@fluentcommerce/ai-skills 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @fluentcommerce/ai-skills might be problematic. Click here for more details.

Files changed (168) hide show
  1. package/README.md +866 -622
  2. package/bin/cli.mjs +2112 -1973
  3. package/content/cli/agents/fluent-cli/agent.json +149 -149
  4. package/content/cli/agents/fluent-cli.md +132 -132
  5. package/content/cli/skills/fluent-bootstrap/SKILL.md +214 -181
  6. package/content/cli/skills/fluent-cli-index/SKILL.md +1 -1
  7. package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +117 -1
  8. package/content/cli/skills/fluent-cli-reference/SKILL.md +1040 -1031
  9. package/content/cli/skills/fluent-cli-retailer/SKILL.md +27 -2
  10. package/content/cli/skills/fluent-cli-settings/SKILL.md +21 -1
  11. package/content/cli/skills/fluent-connect/SKILL.md +937 -886
  12. package/content/cli/skills/fluent-module-deploy/SKILL.md +63 -5
  13. package/content/cli/skills/fluent-profile/SKILL.md +73 -0
  14. package/content/cli/skills/fluent-workflow/SKILL.md +360 -310
  15. package/content/dev/agents/fluent-backend-dev/AGENT.md +58 -0
  16. package/content/dev/agents/fluent-backend-dev/agent.json +69 -0
  17. package/content/dev/agents/fluent-backend-dev.md +287 -0
  18. package/content/dev/agents/fluent-dev/AGENT.md +98 -0
  19. package/content/dev/agents/fluent-dev/agent.json +14 -2
  20. package/content/dev/agents/fluent-dev.md +194 -525
  21. package/content/dev/agents/fluent-frontend-dev/AGENT.md +63 -0
  22. package/content/dev/agents/fluent-frontend-dev/agent.json +52 -0
  23. package/content/dev/agents/fluent-frontend-dev.md +323 -0
  24. package/content/dev/skills/fluent-archive/SKILL.md +234 -0
  25. package/content/dev/skills/fluent-build/SKILL.md +312 -192
  26. package/content/dev/skills/fluent-connection-analysis/SKILL.md +422 -386
  27. package/content/dev/skills/fluent-custom-code/SKILL.md +15 -9
  28. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +19 -2
  29. package/content/dev/skills/fluent-e2e-test/SKILL.md +501 -394
  30. package/content/dev/skills/fluent-event-api/SKILL.md +962 -945
  31. package/content/dev/skills/fluent-feature-explain/SKILL.md +680 -603
  32. package/content/dev/skills/fluent-feature-plan/PLAN_TEMPLATE.md +27 -2
  33. package/content/dev/skills/fluent-feature-plan/SKILL.md +478 -227
  34. package/content/dev/skills/fluent-feature-status/SKILL.md +335 -0
  35. package/content/dev/skills/fluent-feedback/SKILL.md +221 -0
  36. package/content/dev/skills/fluent-implementation-map/SKILL.md +644 -0
  37. package/content/dev/skills/fluent-job-batch/SKILL.md +10 -0
  38. package/content/dev/skills/fluent-module-scaffold/SKILL.md +64 -2
  39. package/content/dev/skills/fluent-module-validate/SKILL.md +778 -775
  40. package/content/dev/skills/fluent-mystique-analyze/SKILL.md +817 -0
  41. package/content/dev/skills/fluent-mystique-builder/COMPONENT_TEMPLATE.md +81 -0
  42. package/content/dev/skills/fluent-mystique-builder/README.md +63 -0
  43. package/content/dev/skills/fluent-mystique-builder/SKILL.md +1294 -0
  44. package/content/dev/skills/fluent-mystique-builder/components/INDEX.md +92 -0
  45. package/content/dev/skills/fluent-mystique-builder/components/fc.accordion.md +48 -0
  46. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.fulfilmentpack.md +20 -0
  47. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.multiparcel.md +21 -0
  48. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.returnitems.md +21 -0
  49. package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.wavepick.md +21 -0
  50. package/content/dev/skills/fluent-mystique-builder/components/fc.action.inline.md +24 -0
  51. package/content/dev/skills/fluent-mystique-builder/components/fc.activity.entity.md +25 -0
  52. package/content/dev/skills/fluent-mystique-builder/components/fc.analytics.viz.md +20 -0
  53. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.column.md +111 -0
  54. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.json.md +20 -0
  55. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.jsoneditor.md +54 -0
  56. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.locationId.md +51 -0
  57. package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.retailerId.md +52 -0
  58. package/content/dev/skills/fluent-mystique-builder/components/fc.button.bar.md +57 -0
  59. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.download.md +53 -0
  60. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.compatibility.md +60 -0
  61. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.md +53 -0
  62. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.md +24 -0
  63. package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.pick.md +61 -0
  64. package/content/dev/skills/fluent-mystique-builder/components/fc.buttons.add.reject.md +20 -0
  65. package/content/dev/skills/fluent-mystique-builder/components/fc.card.attribute.md +73 -0
  66. package/content/dev/skills/fluent-mystique-builder/components/fc.card.attributes.grid.md +40 -0
  67. package/content/dev/skills/fluent-mystique-builder/components/fc.card.image.md +37 -0
  68. package/content/dev/skills/fluent-mystique-builder/components/fc.card.map.point.md +24 -0
  69. package/content/dev/skills/fluent-mystique-builder/components/fc.card.multi.md +79 -0
  70. package/content/dev/skills/fluent-mystique-builder/components/fc.card.product.md +27 -0
  71. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.md +34 -0
  72. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.wrapper.feed.md +98 -0
  73. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.md +52 -0
  74. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.wrapper.source.md +104 -0
  75. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.md +28 -0
  76. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.wrapper.threshold.md +118 -0
  77. package/content/dev/skills/fluent-mystique-builder/components/fc.chart.line.md +32 -0
  78. package/content/dev/skills/fluent-mystique-builder/components/fc.conditional.md +62 -0
  79. package/content/dev/skills/fluent-mystique-builder/components/fc.dashboard.threshold.md +65 -0
  80. package/content/dev/skills/fluent-mystique-builder/components/fc.daterange.wrapper.forwarder.md +56 -0
  81. package/content/dev/skills/fluent-mystique-builder/components/fc.drawer.button.md +21 -0
  82. package/content/dev/skills/fluent-mystique-builder/components/fc.event.detail.md +20 -0
  83. package/content/dev/skills/fluent-mystique-builder/components/fc.events.search.md +21 -0
  84. package/content/dev/skills/fluent-mystique-builder/components/fc.field.daterange.md +83 -0
  85. package/content/dev/skills/fluent-mystique-builder/components/fc.field.filterComplex.md +106 -0
  86. package/content/dev/skills/fluent-mystique-builder/components/fc.field.intrange.md +82 -0
  87. package/content/dev/skills/fluent-mystique-builder/components/fc.field.multistring.md +50 -0
  88. package/content/dev/skills/fluent-mystique-builder/components/fc.filterPanel.md +53 -0
  89. package/content/dev/skills/fluent-mystique-builder/components/fc.json.editor.md +22 -0
  90. package/content/dev/skills/fluent-mystique-builder/components/fc.json.viewer.md +21 -0
  91. package/content/dev/skills/fluent-mystique-builder/components/fc.list.customAction.md +79 -0
  92. package/content/dev/skills/fluent-mystique-builder/components/fc.list.md +116 -0
  93. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.bppmetrics.md +69 -0
  94. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.feed.md +65 -0
  95. package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.source.md +64 -0
  96. package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.addItem.md +60 -0
  97. package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.md +21 -0
  98. package/content/dev/skills/fluent-mystique-builder/components/fc.mutation.inline.md +88 -0
  99. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.attributes.md +83 -0
  100. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.text.md +33 -0
  101. package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.link.md +30 -0
  102. package/content/dev/skills/fluent-mystique-builder/components/fc.order.itemDetails.md +20 -0
  103. package/content/dev/skills/fluent-mystique-builder/components/fc.order.shipmentDetails.md +20 -0
  104. package/content/dev/skills/fluent-mystique-builder/components/fc.page.filter.select.md +87 -0
  105. package/content/dev/skills/fluent-mystique-builder/components/fc.page.md +64 -0
  106. package/content/dev/skills/fluent-mystique-builder/components/fc.page.refresh.md +48 -0
  107. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.column.md +71 -0
  108. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.header.md +61 -0
  109. package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.md +59 -0
  110. package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.md +45 -0
  111. package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.summary.md +56 -0
  112. package/content/dev/skills/fluent-mystique-builder/components/fc.progress.circular.md +20 -0
  113. package/content/dev/skills/fluent-mystique-builder/components/fc.provider.graphql.md +71 -0
  114. package/content/dev/skills/fluent-mystique-builder/components/fc.quantity.list.md +87 -0
  115. package/content/dev/skills/fluent-mystique-builder/components/fc.repeater.md +56 -0
  116. package/content/dev/skills/fluent-mystique-builder/components/fc.reports.ipuipc.md +54 -0
  117. package/content/dev/skills/fluent-mystique-builder/components/fc.return.rowExpansion.md +19 -0
  118. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcode.md +21 -0
  119. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcodeFilter.md +72 -0
  120. package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.camera.md +20 -0
  121. package/content/dev/skills/fluent-mystique-builder/components/fc.settingForm.md +64 -0
  122. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.drawer.button.md +19 -0
  123. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.modal.button.md +64 -0
  124. package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.strategy.modal.button.md +20 -0
  125. package/content/dev/skills/fluent-mystique-builder/components/fc.stepper.md +20 -0
  126. package/content/dev/skills/fluent-mystique-builder/components/fc.tab.content.md +56 -0
  127. package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.card.md +64 -0
  128. package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.md +69 -0
  129. package/content/dev/skills/fluent-mystique-builder/components/fc.tile.metric.md +73 -0
  130. package/content/dev/skills/fluent-mystique-builder/components/fc.workflow.provider.md +77 -0
  131. package/content/dev/skills/fluent-mystique-builder/validate-docs.ps1 +260 -0
  132. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1830 -0
  133. package/content/dev/skills/fluent-mystique-validate/SKILL.md +646 -0
  134. package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +1144 -1108
  135. package/content/dev/skills/fluent-retailer-config/SKILL.md +1162 -1111
  136. package/content/dev/skills/fluent-rollback/SKILL.md +387 -0
  137. package/content/dev/skills/fluent-rule-scaffold/SKILL.md +515 -385
  138. package/content/dev/skills/fluent-scope-decompose/SKILL.md +1123 -1021
  139. package/content/dev/skills/fluent-session-audit-export/SKILL.md +880 -632
  140. package/content/dev/skills/fluent-session-summary/SKILL.md +320 -195
  141. package/content/dev/skills/fluent-settings/SKILL.md +160 -1
  142. package/content/dev/skills/fluent-source-onboard/SKILL.md +31 -3
  143. package/content/dev/skills/fluent-sourcing/SKILL.md +1185 -0
  144. package/content/dev/skills/fluent-system-monitoring/SKILL.md +771 -767
  145. package/content/dev/skills/fluent-test-data/SKILL.md +514 -513
  146. package/content/dev/skills/fluent-trace/SKILL.md +1169 -1143
  147. package/content/dev/skills/fluent-transition-api/SKILL.md +364 -346
  148. package/content/dev/skills/fluent-use-case-discover/SKILL.md +593 -0
  149. package/content/dev/skills/fluent-use-case-discover/SPEC_TEMPLATE.md +281 -0
  150. package/content/dev/skills/fluent-version-manage/SKILL.md +53 -2
  151. package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +995 -959
  152. package/content/dev/skills/fluent-workflow-builder/SKILL.md +668 -319
  153. package/content/dev/skills/fluent-workflow-deploy/SKILL.md +480 -267
  154. package/content/dev/skills/fluent-workspace-tree/SKILL.md +281 -0
  155. package/content/mcp-extn/agents/fluent-mcp.md +133 -69
  156. package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +812 -461
  157. package/content/mcp-official/agents/fluent-mcp-core.md +91 -91
  158. package/content/mcp-official/skills/fluent-mcp-core/SKILL.md +94 -94
  159. package/content/rfl/skills/fluent-rfl-assess/SKILL.md +172 -172
  160. package/docs/CAPABILITY_MAP.md +106 -77
  161. package/docs/DEPLOYMENT_PROMOTION_RUNBOOK.md +218 -0
  162. package/docs/DESIGN-implementation-map.md +698 -0
  163. package/docs/DEV_WORKFLOW.md +814 -802
  164. package/docs/FLOW_RUN.md +142 -142
  165. package/docs/GETTING_STARTED.md +427 -0
  166. package/docs/USE_CASES.md +909 -52
  167. package/metadata.json +184 -156
  168. package/package.json +3 -2
@@ -0,0 +1,64 @@
1
+ ---
2
+ alias: "fc.page"
3
+ aliases:
4
+ - fc.page
5
+ - shared.components.material.DynamicPage
6
+ category: page
7
+ module: Core
8
+ ---
9
+ # fc.page
10
+
11
+ Top-level page container with header, breadcrumb navigation, and automatic workflow user actions.
12
+
13
+ ## When to Use
14
+ - Every page in a manifest (required as root component)
15
+ - When you need workflow-driven action buttons in the header
16
+ - When you need breadcrumb back-navigation
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `title` | string | Recommended | Header text -- supports template strings `"Order {{ref}}"` |
22
+ | `backButtons` | BreadCrumb[] | No | Breadcrumb navigation links `[{ label, path, menuLabel? }]` |
23
+ | `actions` | PageActionConfig / boolean | No | User actions config -- `true` for auto-discovery, object for custom `{ primary?, secondary?, userActionFilter?, userActionExtensions? }` |
24
+ | `tabs` | TabInfo[] | No | Page-level tab bar (different from `fc.tabs.card`) |
25
+ | `hideRefreshButton` | boolean | No | **DEPRECATED** -- the refresh button has been moved to the global header and is always displayed. This prop is accepted but has no effect |
26
+
27
+ ## Data Binding
28
+ Page-level `data.query` in the route definition provides the data context for all descendants. Variables support template strings: `{ "id": "{{params.id}}", "retailerId": "{{activeRetailer.id}}" }`
29
+
30
+ ## Descendants
31
+ Yes — accepts any component as children. Uses Material-UI Grid internally.
32
+
33
+ ## Composition Patterns
34
+ - `fc.page` > `fc.column` + `fc.column` for multi-column layouts
35
+ - `fc.page` > `fc.tabs.card` for tabbed content
36
+ - `fc.page` > `fc.list` for entity list pages
37
+
38
+ ## Gotchas
39
+ - Actions prop set to `true` auto-discovers workflow actions -- set to `false` or omit for read-only pages
40
+ - Page-level tabs are different from `fc.tabs.card` -- page tabs create URL segments, card tabs are visual only
41
+ - `hideRefreshButton` is deprecated and has no effect -- the refresh button is now in the global header
42
+ - `fullScreen` is NOT a prop on `fc.page` -- it is a route-level property set on the page definition in the manifest (e.g., `{ "path": "/scanner", "fullScreen": true, "component": "fc.page", ... }`). It collapses the sidebar navigation
43
+
44
+ ## Validation Rules
45
+ P15 (title recommended), P16 (component should be fc.page), S09 (every page needs component field)
46
+
47
+ ## Manifest Example
48
+ ```json
49
+ {
50
+ "component": "fc.page",
51
+ "props": {
52
+ "title": "Order {{ref}}",
53
+ "backButtons": [{ "label": "Orders", "path": "/orders" }],
54
+ "actions": true
55
+ },
56
+ "descendants": []
57
+ }
58
+ ```
59
+
60
+ ## AI Parse Notes
61
+ - **Primary intent:** Declarative Mystique component definition for manifests.
62
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
63
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
64
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,48 @@
1
+ ---
2
+ alias: "fc.page.refresh"
3
+ aliases:
4
+ - fc.page.refresh
5
+ category: page
6
+ module: Core
7
+ ---
8
+
9
+ # fc.page.refresh
10
+
11
+ Auto-refresh timer that reloads the current page data at a configurable interval.
12
+
13
+ ## When to Use
14
+ - Auto-refresh a dashboard or monitoring page on a timer
15
+ - Keep a pick/pack or fulfilment page updated without manual refresh
16
+ - Show a loading spinner with optional label while waiting for the next refresh cycle
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `interval` | number | Yes | Refresh interval in seconds. Minimum enforced is 10 -- values below 10 are clamped to 10. |
22
+ | `displaySpinner` | boolean | No | When `true`, renders a centered loading spinner (and optional label) between refreshes |
23
+ | `label` | string \| TypedDynamicAttribute | No | Text or dynamic attribute shown below the spinner. Strings render directly; objects use `DynamicValue`. |
24
+ | `data` | any | No | Data context for resolving dynamic `label` attributes |
25
+
26
+ ## Gotchas
27
+ - The minimum interval is 10 seconds. Setting `interval` to less than 10 (or omitting it) silently defaults to 10.
28
+ - Calls `refreshPage()` which re-fetches all page-level queries -- use sparingly on pages with heavy data.
29
+ - The timer is set once on mount and does not re-initialize if `interval` changes (empty dependency array in `useEffect`).
30
+ - When `displaySpinner` is `false` or omitted, this component renders nothing visible -- it only triggers the background timer.
31
+
32
+ ## Manifest Example
33
+ ```json
34
+ {
35
+ "component": "fc.page.refresh",
36
+ "props": {
37
+ "interval": 30,
38
+ "displaySpinner": true,
39
+ "label": "Auto-refreshing every 30 seconds..."
40
+ }
41
+ }
42
+ ```
43
+
44
+ ## AI Parse Notes
45
+ - **Primary intent:** Declarative Mystique component definition for manifests.
46
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
47
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
48
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,71 @@
1
+ ---
2
+ alias: "fc.page.section.column"
3
+ aliases:
4
+ - fc.page.section.column
5
+ - fc.column
6
+ category: layout
7
+ module: Core
8
+ ---
9
+ # fc.page.section.column
10
+
11
+ Compatibility alias for `fc.column` used in page-section layout manifests.
12
+
13
+ ## One-line Description
14
+ Defines a column container within page section layouts, using the same behavior as `fc.column`.
15
+
16
+ ## When to Use
17
+ - Legacy manifests that reference `fc.page.section.column`
18
+ - Grid-based page sections where components are arranged by columns
19
+ - Backward-compatible layout migrations to canonical aliases
20
+
21
+ ## Key Props
22
+ | Prop | Type | Required | Description |
23
+ |---|---|---|---|
24
+ | xs | number | No | Width on extra-small breakpoints |
25
+ | sm | number | No | Width on small breakpoints |
26
+ | md | number | No | Width on medium breakpoints |
27
+ | lg | number | No | Width on large breakpoints |
28
+ | xl | number | No | Width on extra-large breakpoints |
29
+ | className | string | No | Additional CSS classes |
30
+
31
+ ## Data Binding
32
+ Primarily structural layout component; binds child components rather than business data fields.
33
+
34
+ ## Descendants
35
+ Yes. Supports nested content components.
36
+
37
+ ## Composition Patterns
38
+ - Commonly nested under `fc.page.section`.
39
+ - Use multiple columns to compose responsive cards, fields, and action clusters.
40
+ - Prefer `fc.column` for newly authored manifests.
41
+
42
+ ## Gotchas
43
+ - Column widths should be coordinated across siblings to avoid overflow.
44
+ - Alias and canonical component are functionally equivalent.
45
+
46
+ ## Validation Rules
47
+ - Breakpoint width props should be valid grid values for the active theme/system.
48
+
49
+ ## Manifest Example
50
+ ```json
51
+ {
52
+ "component": "fc.page.section.column",
53
+ "props": {
54
+ "md": 6
55
+ },
56
+ "descendants": [
57
+ {
58
+ "component": "fc.card.attribute",
59
+ "props": {
60
+ "title": "Details"
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ ```
66
+
67
+ ## AI Parse Notes
68
+ - **Primary intent:** Declarative Mystique component definition for manifests.
69
+ - **Selection signals:** Match by `alias`, `category`, and required `Key Props`.
70
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
71
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,61 @@
1
+ ---
2
+ alias: "fc.page.section.header"
3
+ aliases:
4
+ - fc.page.section.header
5
+ category: layout
6
+ module: Core
7
+ ---
8
+
9
+ # fc.page.section.header
10
+
11
+ Section header bar with an optional icon, title text, and right-aligned action buttons rendered from descendants.
12
+
13
+ ## When to Use
14
+ - Display a titled header above a group of components within a page section
15
+ - Add icon + title branding to a section
16
+ - Place action buttons (descendants) aligned to the right of the header row
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `title` | string | Yes | Header text -- supports template strings `"{{status}}"` via TemplateRenderer |
22
+ | `icon` | string | No | Material icon name (e.g. `"MdInfo"`, `"MdLocalShipping"`) rendered left of the title via `getIcon()` |
23
+ | `data` | any | No | Data context passed to `TemplateRenderer.parse()` for resolving template strings in `title` |
24
+
25
+ ## Descendants
26
+ Yes -- descendants are rendered as action buttons in a horizontal `Grid` to the right of the title. Each child is wrapped in a `<Grid item>`.
27
+
28
+ ## Composition Patterns
29
+ - `fc.page.section` > `fc.page.section.header` + content components
30
+ - `fc.page.section.header` > `fc.drawer.button` or `fc.modal.button` as action descendants
31
+ - `fc.column` > `fc.page.section.header` + content components for titled sections
32
+
33
+ ## Gotchas
34
+ - The `title` prop is required; without it (and no icon) the header still renders but shows an empty container.
35
+ - Template strings in `title` are resolved via `TemplateRenderer.parse()` using the `data` prop as context.
36
+ - Descendants render right-aligned in the header bar, not below the title.
37
+ - Different from `fc.page.section` which is an invisible grouping container -- this component has visible chrome.
38
+ - Registered with category `content` in the component registry.
39
+
40
+ ## Manifest Example
41
+ ```json
42
+ {
43
+ "component": "fc.page.section.header",
44
+ "props": {
45
+ "title": "Fulfilment Details",
46
+ "icon": "MdLocalShipping"
47
+ },
48
+ "descendants": [
49
+ {
50
+ "component": "fc.drawer.button",
51
+ "props": { "label": "Edit" }
52
+ }
53
+ ]
54
+ }
55
+ ```
56
+
57
+ ## AI Parse Notes
58
+ - **Primary intent:** Declarative Mystique component definition for manifests.
59
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
60
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
61
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,59 @@
1
+ ---
2
+ alias: "fc.page.section"
3
+ aliases:
4
+ - fc.page.section
5
+ category: layout
6
+ module: Core
7
+ ---
8
+
9
+ # fc.page.section
10
+
11
+ Transparent grouping container that renders all descendants without any visual wrapper.
12
+
13
+ ## When to Use
14
+ - Group related components into a logical section within a page
15
+ - Organize page layout without adding visual card boundaries
16
+ - Pair with `fc.page.section.header` for a titled section
17
+ - Wrap multiple descendants into a single logical unit inside tabs or list column components
18
+
19
+ ## Key Props
20
+
21
+ This component has no props of its own. The source code is `export const Section = () => <Children />;` -- a pure pass-through container.
22
+
23
+ ## Descendants
24
+ Yes -- accepts any component as children. All descendants are rendered directly without wrapping markup.
25
+
26
+ ## Composition Patterns
27
+ - `fc.page` > `fc.page.section` > `fc.page.section.header` + child components
28
+ - `fc.page` > `fc.page.section` > `fc.card.attribute` + `fc.list`
29
+ - `fc.tabs.card` > `fc.page.section` per tab for grouped content
30
+ - `fc.list` column `type: "component"` > `fc.page.section` > multiple child components
31
+ - Use `fc.page.section.column` (alias for `fc.column`) within a section for column layout
32
+
33
+ ## Gotchas
34
+ - This component renders zero DOM of its own -- it delegates entirely to `<Children />`. If you need a visual card boundary use `fc.card.attribute` or `fc.card.multi` instead.
35
+ - Easily confused with `fc.page.section.header` which adds a visible title bar with icon.
36
+ - Registered with category `content` in the component registry despite being a structural grouping element.
37
+
38
+ ## Manifest Example
39
+ ```json
40
+ {
41
+ "component": "fc.page.section",
42
+ "descendants": [
43
+ {
44
+ "component": "fc.page.section.header",
45
+ "props": { "title": "Details", "icon": "MdInfo" }
46
+ },
47
+ {
48
+ "component": "fc.card.attribute",
49
+ "props": { "title": "Order Info" }
50
+ }
51
+ ]
52
+ }
53
+ ```
54
+
55
+ ## AI Parse Notes
56
+ - **Primary intent:** Declarative Mystique component definition for manifests.
57
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
58
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
59
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,45 @@
1
+ ---
2
+ alias: "fc.page.wizard"
3
+ aliases:
4
+ - fc.page.wizard
5
+ category: page
6
+ module: Core
7
+ ---
8
+ # fc.page.wizard
9
+
10
+ Multi-step wizard page with linear progression and step tracking.
11
+
12
+ ## When to Use
13
+ - Multi-step entity creation (create order, configure sourcing)
14
+ - Complex configuration workflows
15
+ - Guided setup processes
16
+
17
+ ## Key Props
18
+ | Prop | Type | Required | What it controls |
19
+ |------|------|----------|------------------|
20
+ | `steps` | StepConfig[] | **Yes** | Step definitions with labels |
21
+ | `title` | string | No | Wizard page title |
22
+
23
+ ## Data Binding
24
+ Each step can have its own form state. Final step typically submits a mutation.
25
+
26
+ ## Descendants
27
+ Yes — each step's content (matched by index, like `fc.tabs.card`).
28
+
29
+ ## Manifest Example
30
+ ```json
31
+ {
32
+ "component": "fc.page.wizard",
33
+ "props": {
34
+ "title": "Create Order",
35
+ "steps": [{ "label": "Order Details" }, { "label": "Items" }, { "label": "Review" }]
36
+ },
37
+ "descendants": []
38
+ }
39
+ ```
40
+
41
+ ## AI Parse Notes
42
+ - **Primary intent:** Declarative Mystique component definition for manifests.
43
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
44
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
45
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,56 @@
1
+ ---
2
+ alias: "fc.page.wizard.summary"
3
+ aliases:
4
+ - fc.page.wizard.summary
5
+ category: page
6
+ module: Core
7
+ ---
8
+
9
+ # fc.page.wizard.summary
10
+
11
+ Summary panel for `fc.page.wizard` that displays the wizard's summary content as a sidebar or inline card.
12
+
13
+ ## When to Use
14
+ - Show a running summary alongside wizard steps (e.g. order totals, selected items)
15
+ - Create a sticky sidebar that follows the user as they scroll through wizard steps
16
+ - Display wizard summary content outside the step flow
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `width` | CardWidth (`"quarter"` / `"third"` / `"half"` / `"two-thirds"` / `"full"` / number 1-12) | No | Width on 12-column grid. Default `12`. |
22
+ | `noCard` | boolean | No | When `true`, renders summary content without the Material-UI Card wrapper |
23
+ | `sticky` | boolean | No | When `true`, makes the summary panel stick to the top of the viewport as the user scrolls |
24
+
25
+ ## Data Binding
26
+ Reads summary content from `WizardContext` -- the `summary` field is set by the parent `fc.page.wizard` component. This component does not accept its own data query.
27
+
28
+ ## Composition Patterns
29
+ - `fc.page.wizard` > `fc.page.wizard.summary` + wizard step descendants
30
+ - Place the summary as a sibling to wizard steps at the same level within the wizard
31
+
32
+ ## Gotchas
33
+ - Must be a descendant of `fc.page.wizard` -- it reads from `WizardContext` which is only available inside a wizard.
34
+ - The `sticky` prop uses CSS `position: sticky` with a negative top offset. This may not work inside overflow containers.
35
+ - Named widths (e.g. `"third"`) are resolved via the shared `NamedWidths` map. Invalid values default to 12.
36
+ - Registered with category `content` in the component registry.
37
+
38
+ ## Manifest Example
39
+ ```json
40
+ {
41
+ "component": "fc.page.wizard",
42
+ "props": { "title": "Create Order" },
43
+ "descendants": [
44
+ {
45
+ "component": "fc.page.wizard.summary",
46
+ "props": { "width": "third", "sticky": true }
47
+ }
48
+ ]
49
+ }
50
+ ```
51
+
52
+ ## AI Parse Notes
53
+ - **Primary intent:** Declarative Mystique component definition for manifests.
54
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
55
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
56
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,20 @@
1
+ ---
2
+ alias: "fc.progress.circular"
3
+ aliases:
4
+ - fc.progress.circular
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.progress.circular
9
+
10
+ Circular progress visualization showing completion percentages.
11
+
12
+ ## When to Use
13
+ - Fulfilment pick/pack completion
14
+ - Order processing progress
15
+
16
+ ## AI Parse Notes
17
+ - **Primary intent:** Declarative Mystique component definition for manifests.
18
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
19
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
20
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,71 @@
1
+ ---
2
+ alias: "fc.provider.graphql"
3
+ aliases:
4
+ - fc.provider.graphql
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.provider.graphql
9
+
10
+ Execute an additional GraphQL query and provide results as data context for descendants.
11
+
12
+ ## When to Use
13
+ - Load related entity data not in the page query
14
+ - Fetch locations, inventory, or reference data
15
+ - Secondary queries that don't fit in the primary page query
16
+
17
+ ## Key Props
18
+ | Prop | Type | Required | What it controls |
19
+ |------|------|----------|------------------|
20
+ | `query` | string (GraphQL) | **Yes** | GraphQL query string |
21
+ | `path` | string | **Yes** | Path to the data root in the query response. If the path points to a connection, auto-paginates. E.g., `"locationById"`, `"orders"` |
22
+ | `variables` | Record<string, any> | No | Query variables -- supports template strings |
23
+ | `max` | number | No | Max records to fetch when auto-paginating (default: 1000, **hardcoded cap: 1000** -- values above 1000 are clamped) |
24
+ | `loadingBehavior` | string | No | `"wait"`, `"wait-with-animation"`, `"pass-immediately"` (default) |
25
+ | `toastMessages` | object | No | Override toast messages: `{ maxResultsReached?: string }` -- custom warning when max record limit is hit |
26
+
27
+ ## Data Binding
28
+ Query results become the data context for descendants. Variables can reference parent data: `{ "id": "{{fulfilment.location.id}}" }`.
29
+
30
+ **Implicit template variables** available in `variables` templates: `{{activeContext.id}}`, `{{activeLocation.id}}`, `{{activeRetailer.id}}`, `{{activeUser.username}}`, `{{params.id}}` (route params), plus all parent data fields.
31
+
32
+ ## Descendants
33
+ Yes — receive the provider's query results as their data context.
34
+
35
+ ## Composition Patterns
36
+ - `fc.provider.graphql` > `fc.card.attribute` (show location details)
37
+ - `fc.provider.graphql` > `fc.list` (show related entities)
38
+
39
+ ## Gotchas
40
+ - **Do NOT nest inside `fc.list`** -- both compete for pagination, causes conflicts
41
+ - Query is a string, not gql tagged template
42
+ - Variables are rendered as templates before query execution
43
+ - `loadingBehavior: "wait"` blocks rendering until ALL pages are fetched
44
+ - **Implicit `dataProviderState`** is passed to all descendants as part of the data context. Values: `"loading"`, `"ok"`, `"error"`, `"max"`. Use in conditionals: `"{{dataProviderState}}"` matches `"ok"` to show content only after data loads
45
+ - `max` is clamped to 1000 even if you specify a higher value (`Math.min(max, 1000)`)
46
+ - When the max record limit is reached, a toast warning is shown automatically (customizable via `toastMessages.maxResultsReached`)
47
+
48
+ ## Validation Rules
49
+ P09 (CRITICAL — query required), D01 (valid GraphQL), D06 (query must be defined)
50
+
51
+ ## Manifest Example
52
+ ```json
53
+ {
54
+ "component": "fc.provider.graphql",
55
+ "props": {
56
+ "query": "query location($id: ID!) { locationById(id: $id) { id ref name } }",
57
+ "path": "locationById",
58
+ "variables": { "id": "{{fulfilment.fromLocation.id}}" },
59
+ "loadingBehavior": "wait"
60
+ },
61
+ "descendants": [
62
+ { "component": "fc.card.attribute", "props": { "title": "Location", "attributes": [{ "label": "Name", "value": "{{locationById.name}}" }] } }
63
+ ]
64
+ }
65
+ ```
66
+
67
+ ## AI Parse Notes
68
+ - **Primary intent:** Declarative Mystique component definition for manifests.
69
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
70
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
71
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,87 @@
1
+ ---
2
+ alias: "fc.quantity.list"
3
+ aliases:
4
+ - fc.quantity.list
5
+ category: content
6
+ module: Core
7
+ ---
8
+
9
+ # fc.quantity.list
10
+
11
+ Specialized list component that combines a standard data list with an integrated quantity selector column and optional barcode scanner/filter.
12
+
13
+ ## When to Use
14
+ - Pick/pack workflows where items need quantity input per row
15
+ - Any list where each row requires a quantity adjustment control
16
+ - Store module wave picking, fulfilment packing, or inventory count UIs
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `attributes` | TranslatableAttribute[] | Yes | Column definitions (same as `fc.list` but with translatable labels) |
22
+ | `defaultPageSize` | number | Yes | Number of rows per page (inherited from StandardListProps) |
23
+ | `quantitySelectorProps` | Partial\<QuantitySelectorComponentProps\> | No | Configuration for the quantity selector rendered in each row |
24
+ | `quantitySelectorAttribute` | Partial\<TranslatableAttribute\> | No | Override the label, alignment, or other column props for the quantity selector column |
25
+ | `scannerProps` | ScannerContract | No | Props passed to the `fc.scanner.barcodeFilter` component rendered above the list |
26
+ | `rowsPerPageOptions` | number[] | No | Available page size options |
27
+ | `title` | string | No | Card title |
28
+ | `width` | CardWidth | No | Card width on 12-column grid |
29
+ | `highlight` | string | No | Top border highlight color |
30
+ | `filter` | ListFilterConfig | No | List filter configuration |
31
+
32
+ ## Data Binding
33
+ Same as `fc.list` -- uses `dataSource` to bind to a GraphQL connection. The quantity selector column is automatically appended to the `attributes` array.
34
+
35
+ ## Descendants
36
+ No -- self-contained list component. Column content is configured via `attributes`.
37
+
38
+ ## Composition Patterns
39
+ - `fc.page` > `fc.quantity.list` for pick/pack item lists
40
+ - `fc.page.wizard` step > `fc.quantity.list` for wizard-driven quantity input
41
+ - Often used with `scannerProps` to enable barcode filtering above the list
42
+
43
+ ## Gotchas
44
+ - The quantity selector column is automatically appended as the last column with `type: "component"` pointing to `fc.util.quantitySelector`. You do not need to include it in `attributes`.
45
+ - The quantity selector column defaults to label `"Quantity"` (i18n key `fc.mystique.list.column.quantity.label`) and `align: "center"`. Override via `quantitySelectorAttribute`.
46
+ - When `scannerProps` is provided, the `fc.scanner.barcodeFilter` component is rendered above the list. If not provided, no scanner appears.
47
+ - When the scanner is active, the "no records" message uses i18n key `fc.barcodeFilter.list.noRecords` instead of the default.
48
+ - All attribute labels are passed through `prefixedTranslate` for i18n resolution, and string values in attributes are recursively translated.
49
+ - Registered with category `content` in the component registry.
50
+
51
+ ## Manifest Example
52
+ ```json
53
+ {
54
+ "component": "fc.quantity.list",
55
+ "dataSource": "waveItems",
56
+ "props": {
57
+ "defaultPageSize": 50,
58
+ "attributes": [
59
+ {
60
+ "label": "i18n:fc.mystique.product.name",
61
+ "value": "{{node.product.name}}"
62
+ },
63
+ {
64
+ "label": "i18n:fc.mystique.product.ref",
65
+ "value": "{{node.product.ref}}"
66
+ },
67
+ {
68
+ "label": "i18n:fc.mystique.product.barcode",
69
+ "value": "{{node.product.gtin}}"
70
+ }
71
+ ],
72
+ "quantitySelectorProps": {
73
+ "max": "{{node.quantity}}",
74
+ "min": 0
75
+ },
76
+ "scannerProps": {
77
+ "placeholderText": ["fc.barcodeFilter.placeholder", "Scan barcode..."]
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## AI Parse Notes
84
+ - **Primary intent:** Declarative Mystique component definition for manifests.
85
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
86
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
87
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,56 @@
1
+ ---
2
+ alias: "fc.repeater"
3
+ aliases:
4
+ - fc.repeater
5
+ category: layout
6
+ module: Core
7
+ ---
8
+ # fc.repeater
9
+
10
+ Iterate over array data, rendering descendants once per item with per-item data context.
11
+
12
+ ## When to Use
13
+ - Fulfilment choices in a MULTI order (each with its own card)
14
+ - Order items with complex per-item detail views
15
+ - Any array where each item needs a rich component tree (not just a table row)
16
+
17
+ ## Key Props
18
+ | Prop | Type | Required | What it controls |
19
+ |------|------|----------|------------------|
20
+ | `dataSource` | string (JSONPath) | **Yes** | Path to array or connection, e.g., `"order.fulfilmentChoices.edges"` |
21
+
22
+ ## Data Binding
23
+ Each iteration's data context is set to the current array item. **Auto-detects Relay connection format**: if the resolved data is an object with an `edges` array (`{ edges: [{ node: {...} }] }`), it automatically unwraps and iterates over `edges`. This means you can point `dataSource` at either a plain array OR a Relay connection object and it works the same way.
24
+
25
+ ## Descendants
26
+ Yes (required) — rendered once per item.
27
+
28
+ ## Composition Patterns
29
+ - `fc.repeater` > `fc.card.attribute` per item
30
+ - `fc.repeater` > `fc.conditional` > type-specific content per item
31
+
32
+ ## Gotchas
33
+ - Must have at least one descendant -- empty repeater is an error
34
+ - For simple tabular data, use `fc.list` instead (better performance, pagination)
35
+ - **Supports both plain arrays and Relay connection objects** -- if data has `{ edges: [...] }`, it iterates over `edges` automatically. You do NOT need to append `.edges` to the dataSource path if the data is a connection
36
+ - When iterating a connection, each iteration's context is the edge object (typically `{ node: {...}, cursor: "..." }`) -- use `{{node.field}}` in descendant templates
37
+
38
+ ## Validation Rules
39
+ P07 (CRITICAL — dataSource required), P08 (CRITICAL — needs descendants)
40
+
41
+ ## Manifest Example
42
+ ```json
43
+ {
44
+ "component": "fc.repeater",
45
+ "props": { "dataSource": "orderById.fulfilmentChoices.edges" },
46
+ "descendants": [
47
+ { "component": "fc.card.attribute", "props": { "title": "FC: {{node.ref}}", "attributes": [{ "label": "Type", "value": "{{node.type}}" }] } }
48
+ ]
49
+ }
50
+ ```
51
+
52
+ ## AI Parse Notes
53
+ - **Primary intent:** Declarative Mystique component definition for manifests.
54
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
55
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
56
+ - **Safety checks:** Validate required props and data bindings before manifest generation.