npx skills add ...
npx skills add qfeius/make-platform-skills --skill canvas-table-integration
Use when integrating `@qfei-design/canvas-table` into an app or page. Covers consumer-side local, virtual, large-data fast-scroll, and grouped tables; public props/methods/events; row-head and header menus; selection, Shift 200 条上限, row colors, drag, fixed columns, summaries, empty states, async row sync, canvas interactions, cell editing, and Make schema field display. Make record lists use make-app-actions for the default selectable record-action workflow. Use make-app-sort for record sorting and header sort controllers. Route Make record-list grouping behavior, Preset, groupFilter, and leaf pagination to make-app-group. Route Service-side AbortSignal propagation to make-app-service. Only supports `@qfei-design/canvas-table`, not UI-library tables. Does not own Make DSL (use makedsl), page layout (use makeui), or table-library maintenance. Read package AI docs, choose Track A or C, layer Track B for editing, and use public APIs only.
npx skills add qfeius/make-platform-skills --skill canvas-table-integration
Use this skill only for consumer-side integration of @qfei-design/canvas-table. It does not support Ant Design Table, Arco Table, TDesign Table, native HTML tables, or any other table implementation as the product table.
This skill uses two base tracks and one optional enhancement:
apps/ui/src/lib/make-field-types.ts or the host equivalent, pure value normalization, field renderers, and overflow-only tooltips.customEdit, controlled commits, popup ownership, host field editors, and rollback.Choose Track C as the base for every Make schema table; choose Track A only when columns are not Make schema-driven. Add Track B only when editing is explicitly requested or already established. Track B never replaces the selected display base.
Hard Track B rule: every CanvasTable cell edit / 单元格编辑 implementation must follow Track B plus references/make-cell-edit-defaults.md. Non-popup editors keep only the CanvasTable active edit border; inner controls must fill the cell and remain borderless. Missing immediate popup opening, post-scroll positioning, normalized values, or unchanged-value save skipping is a readiness blocker.
@qfei-design/canvas-table@^1.3.1 contract.IColumn[] plus renderers from the normalized field types, schema field.properties, and the shared field type registry.showSN sequence numbers plus a hover-revealed open-detail action through bodyRowHeadSuffixOptions.make-app-actions. Only an explicitly read-only list opts out.setRowColors / rowStyleOptions colors remain visible above selection and hover, and clearRowColors restores the underlying row style or built-in background. Resolve ^1.3.1 before using that path; do not repair an older package's rendering order with host CSS or private imports.+N content; do not require the user to ask for it.setData(latestRows) in local mode. In virtual mode, select the page-only or identity-aware callback from the installed public docs and preserve its page/request contract. Empty rows remain valid and must still render headers and the empty state.references/virtual-table-patterns.md; installed-contract selection, request identity, bounded scheduling, stale-request cancellation, pending-page release, atomic total/page writes, and cache limits are delivery requirements for that path.make-app-actions.openWithField, Preset, and records timing to make-app-sort.GroupTableComponent public API mechanics and route grouping behavior, Preset, record-groups, groupFilter, and leaf-page timing to make-app-group.@qfei-design/canvas-table@qfei-design/canvas-tablepackage.ai.json, recipes.json, examples, or docs inside the table library repomakedsl for schema modelingmake-app-serviceBefore editing code:
@qfei-design/canvas-table is installed in the current project.package.json, stop and tell the user the current directory is not an npm package.pnpm-lock.yaml:
make-app-runtime baseline "packageManager": "pnpm@10.20.0", Node.js 22.20.0, and Corepack 0.34.0, then run corepack pnpm add @qfei-design/canvas-table. For an existing Make App, preserve its declared runtime and use Corepack to resolve that declared pnpm version; do not migrate the runtime merely to add CanvasTable.pnpm add @qfei-design/canvas-table and preserve the project's existing package-manager workflow; do not introduce Corepack solely for this integration.yarn.lock -> yarn add @qfei-design/canvas-tablepackage-lock.json -> npm install @qfei-design/canvas-tablemake-app-runtime baseline, then run corepack pnpm add @qfei-design/canvas-table. For an existing Make App with no lockfile, stop and hand the package-manager, workspace and CI/install workflow reconciliation to make-app-runtime; do not assume pnpm, generate a lockfile, or migrate the runtime merely to add CanvasTable.npm install @qfei-design/canvas-table.Use @qfei-design/canvas-table consistently. If an existing codebase uses a different package name, stop and ask before changing the consumer app dependency.
If an existing Make record list uses another table component, the expected integration target is still @qfei-design/canvas-table. Do not preserve a UI-library table as the main record table unless the user explicitly says this page is out of scope for canvas-table.
package.json name is @qfei-design/canvas-table.<package-root>/package.ai.json first.package.ai.json.readOrder, resolve each entry relative to the package root, and verify every declared file exists.package.ai.json entry.package.ai.json.readOrder is the source of truth. Do not hardcode docs/, examples/, monorepo folder names, or other package-internal documentation paths. If a declared file is missing, report the exact path and package version instead of inferring from internal source.
| Task / topic | Read |
|---|---|
| Public props, methods, events, setup, cleanup | references/core-props-methods-events.md |
| Row-head sequence number or open-detail action | references/row-head-action-patterns.md |
| Make record-list default selection and edit/delete/batch-edit actions | Use make-app-actions |
| Virtual loading, paginated backend integration, large-data fast scrolling, or scrollbar dragging | references/virtual-table-patterns.md |
Schema/meta to IColumn[] | references/column-patterns.md |
| Custom clickable cell shapes | references/shape-render-patterns.md |
| Track A pitfalls | references/common-pitfalls.md |
| Cell-edit contract | references/edit-contract.md |
| Host-side edit architecture | references/edit-host-architecture.md |
| Edit lifecycle, positioning, close/commit/rollback | references/edit-interaction-lifecycle.md |
| Platform Make editable-cell defaults | references/make-cell-edit-defaults.md |
| Field editor mapping | references/field-editor-patterns.md |
| Host component choice | references/editor-component-selection.md |
| Attachment editor integration | references/attachment-editor-patterns.md |
| Track B pitfalls | references/edit-common-pitfalls.md |
| Make field display | references/make-field-display-patterns.md |
| Proven downstream usage and unvalidated areas | references/validated-usage-notes.md |
| Track workflows, capability checklists, output templates | references/track-workflows.md |
| Table-header asc/desc behavior, shared sort panel, Preset and records sort | Use make-app-sort |
| Make record grouping, Preset group, record-groups, groupFilter, grouped leaf pagination | Use make-app-group |
Service route cancellation, server disconnect handling, downstream AbortSignal propagation | Use make-app-service |
Read as needed:
references/core-props-methods-events.mdreferences/row-head-action-patterns.md when adding an icon or action to the body row head / sequence-number areareferences/virtual-table-patterns.md when using paginated virtual loading, especially for large data, fast scrolling, or scrollbar draggingreferences/column-patterns.md when shaping columnsreferences/shape-render-patterns.md when adding custom clickable cell contentreferences/common-pitfalls.md before finalizing changesRead:
references/make-field-display-patterns.mdreferences/shape-render-patterns.md when adding canvas shapesreferences/column-patterns.md when deriving IColumn[] from field schemasreferences/common-pitfalls.md before finalizing changesRead in this order:
package.ai.json.readOrderreferences/edit-contract.mdreferences/edit-host-architecture.mdreferences/edit-interaction-lifecycle.mdreferences/make-cell-edit-defaults.mdreferences/field-editor-patterns.mdreferences/editor-component-selection.mdreferences/attachment-editor-patterns.md when attachment fields are in scopereferences/edit-common-pitfalls.md before finalizing changesIf any required package file is missing, stop and tell the user exactly which file is missing.
references/track-workflows.md and references/make-field-display-patterns.md.Treat these as safety rules:
src or dist@qfei-design/canvas-table for product tables; do not substitute UI-library tablestable.tableId as the namespace key for globalEventBus.onWithNamespace(...)/objects/:objectKey is fine only if the table is keyed by that identity or the integration explicitly resets the canvas-table instance/state on identity changeIColumn[] before creating the tablerecords.length, rows.length, or business totals as the gate for creating the table. Empty rows are a valid table state: keep headers visible and show the built-in empty state after setData([])setData(latestRows) immediately after instance creation; do not let early data updates disappear because tableRef.current was nullNaN, Infinity, or exception text; normalize them to an empty display value before canvas rendering¥, ¥, %, or thousands separators are dependency defects; render - or surface the data-contract issue instead of silently treating them as API-ready valuesfield.properties on generated columns/edit configs so renderers and editors can use Number.precision, Date.format, DateRange.begin/end, Currency.symbol/decimalPlaces/useGrouping, Percent.decimalPlaces, File.maxCount, and multi identity maxCountNumber.precision, Currency.decimalPlaces, or Percent.decimalPlaces before parsing and commit. Decimal overflow keeps the editor active, shows 最多保留 N 位小数 through a tooltip or external validation surface, and must not call the save API; silent rounding is forbidden unless the host project explicitly documents itreferences/field-editor-patterns.mdaria-hidden or inert on the visual canvas-table host, or on any ancestor that can contain the package-created focusable canvasvirtualOptions, or data:load wiring unless the user explicitly asks for pagination, virtual loading, or paginated backend integrationsetData / setVirtualPageData or markPageLoadFailed; use the legacy page-only path only when that is the installed public contractmake-app-sort controller. Do not sort records locally, keep separate header sort state, or call records directly from a header actionmake-app-group for the package panel, Preset, Service, groupFilter, and records timing. This Skill may instantiate GroupTableComponent and wire group:load / group:data:load, but must not define grouping semantics itselfclearSelection, supported Shift/select-all behavior, and row colors; make-app-actions owns action state, permissions, precheck, batch modal, and mutation timing. Under the CanvasTable 1.3.1 contract, GroupTableComponent does not support Shift range selection; do not emulate it in the hostclearRowColors(rowKeys). setRowColors(rowKeys, undefined) is not a cleanup fallback. Require @qfei-design/canvas-table@^1.3.1 instead of overriding canvas internals in the hostCanvasTableComponent record lists, one Shift
range-selection gesture may select at most 200 records. Enforce the limit only
through the installed public selection contract; if that capability is absent,
report a blocker instead of implementing host keyboard anchors, range expansion,
or private selection statereferences/track-workflows.md.references/validated-usage-notes.md to distinguish validated downstream patterns from less-proven package capabilities.