@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,54 @@
1
+ ---
2
+ alias: "fc.reports.ipuipc"
3
+ aliases:
4
+ - fc.reports.ipuipc
5
+ category: content
6
+ module: Analytics
7
+ ---
8
+ # fc.reports.ipuipc
9
+
10
+ IPU (Inventory Position Update) and IPC (Inventory Position Change) reporting component with line chart visualization, configurable filters for report type, date range, and granularity.
11
+
12
+ ## When to Use
13
+ - Inventory analytics dashboards
14
+ - Monitoring inventory update volumes over time
15
+ - Capacity planning and IPU/IPC usage tracking
16
+
17
+ ## Key Props
18
+ | Prop | Type | Required | What it controls |
19
+ |------|------|----------|------------------|
20
+ | `width` | CardWidth | No | Card width on 12-column grid. Named widths: `"quarter"`, `"third"`, `"half"`, `"two-thirds"`, `"full"`, or number `1-12`. Default: `"full"`. Mobile auto-adjusts to 12. |
21
+
22
+ ## Data Binding
23
+ The component self-manages its data fetching based on three user-configurable filters:
24
+
25
+ - **Display**: Report type -- "Inventory Position Update" (default) or "Inventory Position Change"
26
+ - **Date/time range**: Visualization period, default last 31 days. Based on UTC time.
27
+ - **Granularity**: Detail level -- "Minute", "Hour", or "Day" (default)
28
+
29
+ The line chart displays data points across the selected date range. X-axis shows the date range (UTC), Y-axis shows quantity of inventory updates. A "Total Updates" summary shows the cumulative sum of all usages within the selected range.
30
+
31
+ ## Descendants
32
+ No.
33
+
34
+ ## Gotchas
35
+ - Data older than 185 days cannot be displayed. Exceeding this limit shows: "The maximum time frame is 185 days."
36
+ - Granularity constrains the date range: Minute granularity max 12 hours, Hour granularity max 31 days. Day granularity has no additional constraint beyond 185 days.
37
+ - Mismatched granularity/range shows: "The time frame for your chosen granularity is too long."
38
+ - Both chart start and end points use UTC timestamps.
39
+
40
+ ## Manifest Example
41
+ ```json
42
+ {
43
+ "component": "fc.reports.ipuipc",
44
+ "props": {
45
+ "width": "full"
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## AI Parse Notes
51
+ - **Primary intent:** Declarative Mystique component definition for manifests.
52
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
53
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
54
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,19 @@
1
+ ---
2
+ alias: "fc.return.rowExpansion"
3
+ aliases:
4
+ - fc.return.rowExpansion
5
+ category: content
6
+ module: Returns
7
+ ---
8
+ # fc.return.rowExpansion
9
+
10
+ Expandable detail row for return items in a list.
11
+
12
+ ## When to Use
13
+ - Return list page — expand to see item details
14
+
15
+ ## AI Parse Notes
16
+ - **Primary intent:** Declarative Mystique component definition for manifests.
17
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
18
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
19
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,21 @@
1
+ ---
2
+ alias: "fc.scanner.barcode"
3
+ aliases:
4
+ - fc.scanner.barcode
5
+ - fc.barcode.scanner
6
+ category: content
7
+ module: Core
8
+ ---
9
+ # fc.scanner.barcode
10
+
11
+ USB barcode scanner input field for warehouse operations.
12
+
13
+ ## When to Use
14
+ - Warehouse pick/pack barcode scanning
15
+ - Desktop scanner hardware integration
16
+
17
+ ## AI Parse Notes
18
+ - **Primary intent:** Declarative Mystique component definition for manifests.
19
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
20
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
21
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,72 @@
1
+ ---
2
+ alias: "fc.scanner.barcodeFilter"
3
+ aliases:
4
+ - fc.scanner.barcodeFilter
5
+ category: content
6
+ module: Core
7
+ ---
8
+
9
+ # fc.scanner.barcodeFilter
10
+
11
+ Combined barcode scanner and text filter component that renders a sticky filter bar with hardware barcode scanner support, text input filtering, and optional camera scanner integration.
12
+
13
+ ## When to Use
14
+ - Add barcode scanning and text filtering above a list (pick, pack, count workflows)
15
+ - Enable hardware barcode scanner input on store/warehouse pages
16
+ - Provide a combined scan + filter experience with match count display
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `onFilter` | `(value: string) => void` | Yes* | Callback when the text filter value changes |
22
+ | `onScan` | `(value: string) => boolean \| undefined` | Yes* | Callback when a barcode is scanned. Return `true` to indicate a match. |
23
+ | `setValue` | `(value: string) => void` | Yes* | Setter for the filter input value |
24
+ | `value` | string | No | Current filter input value |
25
+ | `debounceTimeout` | number | No | Debounce timeout for hardware scanner input (ms) |
26
+ | `placeholderText` | string[] | No | i18n key array for the filter placeholder text. Default: `["fc.barcodeFilter.placeholder", "Filter results"]` |
27
+ | `showingText` | string[] | No | i18n key array for the match count text. Supports `{{currentCount}}` and `{{totalCount}}` template vars. Default: `["fc.barcodeFilter.list.count", "Showing {{currentCount}} of {{totalCount}} items"]` |
28
+ | `currentCount` | number | No | Current number of filtered/matching items |
29
+ | `totalCount` | number | No | Total number of items before filtering |
30
+ | `enableCameraScanner` | boolean | No | Enable the camera scanner button on mobile devices (opens `fc.scanner.camera`) |
31
+ | `camera` | object | No | Camera configuration props passed to `fc.scanner.camera` |
32
+
33
+ *These callbacks are typically provided by the parent `fc.quantity.list` or a custom wrapper, not directly in manifest JSON.
34
+
35
+ ## Data Binding
36
+ This component does not consume data directly. It provides filter/scan callbacks that the parent list component uses to filter its data.
37
+
38
+ ## Descendants
39
+ No -- self-contained filter/scanner component.
40
+
41
+ ## Composition Patterns
42
+ - `fc.quantity.list` automatically renders `fc.scanner.barcodeFilter` when `scannerProps` is provided
43
+ - Can be used standalone above any list via programmatic integration
44
+ - Integrates with `fc.scanner.camera` on mobile for camera-based barcode scanning
45
+
46
+ ## Gotchas
47
+ - If any of `onFilter`, `onScan`, or `setValue` are missing, the component renders nothing (returns `null`).
48
+ - The filter bar is sticky (`position: sticky`, `top: -21px`) and floats above the list content as the user scrolls.
49
+ - Hardware barcode scanner detection is handled by `SimpleScanner` (a hidden input that captures rapid keystrokes).
50
+ - The camera scanner button only appears on mobile devices (`isMobile` from `react-device-detect`) and only when `enableCameraScanner` is `true`.
51
+ - When active, the filter bar shows a count indicator (e.g. "Showing 3 of 15 items") styled as a secondary-colored banner.
52
+ - When stuck to the top (scrolled), the card changes to square corners with elevation 3 and wider width to span the page.
53
+ - Registered with category `content` in the component registry.
54
+
55
+ ## Manifest Example
56
+ ```json
57
+ {
58
+ "component": "fc.scanner.barcodeFilter",
59
+ "props": {
60
+ "placeholderText": ["fc.barcodeFilter.placeholder", "Scan or type to filter..."],
61
+ "showingText": ["fc.barcodeFilter.list.count", "Showing {{currentCount}} of {{totalCount}} items"],
62
+ "enableCameraScanner": true,
63
+ "debounceTimeout": 300
64
+ }
65
+ }
66
+ ```
67
+
68
+ ## AI Parse Notes
69
+ - **Primary intent:** Declarative Mystique component definition for manifests.
70
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
71
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
72
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,20 @@
1
+ ---
2
+ alias: "fc.scanner.camera"
3
+ aliases:
4
+ - fc.scanner.camera
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.scanner.camera
9
+
10
+ Mobile camera barcode scanner using device camera API.
11
+
12
+ ## When to Use
13
+ - Mobile warehouse/store scanning
14
+ - Camera-based barcode input on tablets/phones
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,64 @@
1
+ ---
2
+ alias: "fc.settingForm"
3
+ aliases:
4
+ - fc.settingForm
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.settingForm
9
+
10
+ Form for creating and updating Fluent Commerce settings. Renders fields based on a schema definition and the setting's current value. Supports create (override default) and update operations.
11
+
12
+ ## When to Use
13
+ - Settings editor pages
14
+ - Retailer/account/location configuration forms
15
+ - Any page where a user needs to view and edit a Fluent setting value
16
+
17
+ ## Key Props
18
+ | Prop | Type | Required | What it controls |
19
+ |------|------|----------|------------------|
20
+ | `setting` | string | **Yes** | Setting name to load and edit (e.g., `"orderWorkflowConfig"`) |
21
+ | `schema` | string | **Yes** | Schema setting name that defines the form field structure |
22
+ | `context` | string | **Yes** | Setting context: `"ACCOUNT"`, `"RETAILER"`, or `"AGENT"` (location) |
23
+ | `contextId` | number / string | Recommended | Context ID (retailer ID, account ID, or location ID). Supports template strings: `"{{activeRetailer.id}}"`, `"{{params.id}}"` |
24
+ | `title` | string | No | Card header title (inherited from Card) |
25
+ | `width` | CardWidth | No | Card width (inherited from Card) |
26
+ | `highlight` | string | No | Card border highlight color (inherited from Card) |
27
+
28
+ ## Data Binding
29
+ `contextId` supports template strings with access to `{{activeContext.id}}`, `{{activeLocation.id}}`, `{{activeRetailer.id}}`, `{{activeUser}}`, and `{{params.*}}` (route params).
30
+
31
+ ## Descendants
32
+ No.
33
+
34
+ ## Gotchas
35
+ - **The prop is `setting`, NOT `settingName`** -- the source code uses `setting` as the prop name for the setting key
36
+ - `schema` is also a setting name (not an inline object) -- it references a separate Fluent setting that contains the JSON schema definition
37
+ - The component validates that `context` is one of `ACCOUNT`, `RETAILER`, or `AGENT` -- invalid values cause the form to not render
38
+ - `contextId` is required to be a valid integer -- if the template string evaluates to NaN, the form will not render and submit will be blocked
39
+ - When the setting does not yet exist at the specified context level, the form shows an "Override Default" button (create mode). When it exists, it shows "Submit" (update mode)
40
+ - Schema and setting value types must match (JSON/INTEGER/BOOLEAN/STRING) -- a mismatch logs an error and the form does not render
41
+ - The form uses the `useSchema` hook to dynamically generate form fields from the schema setting's value
42
+
43
+ ## Validation Rules
44
+ P18 (needs setting name or reference)
45
+
46
+ ## Manifest Example
47
+ ```json
48
+ {
49
+ "component": "fc.settingForm",
50
+ "props": {
51
+ "setting": "orderWorkflowConfig",
52
+ "schema": "orderWorkflowConfig_schema",
53
+ "context": "RETAILER",
54
+ "contextId": "{{activeRetailer.id}}",
55
+ "title": "Order Workflow Configuration"
56
+ }
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,19 @@
1
+ ---
2
+ alias: "fc.sourcing.profile.drawer.button"
3
+ aliases:
4
+ - fc.sourcing.profile.drawer.button
5
+ category: action
6
+ module: Core
7
+ ---
8
+ # fc.sourcing.profile.drawer.button
9
+
10
+ Drawer button for viewing and editing sourcing profiles.
11
+
12
+ ## When to Use
13
+ - Sourcing profile detail/edit UI
14
+
15
+ ## AI Parse Notes
16
+ - **Primary intent:** Declarative Mystique component definition for manifests.
17
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
18
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
19
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,64 @@
1
+ ---
2
+ alias: "fc.sourcing.profile.modal.button"
3
+ aliases:
4
+ - fc.sourcing.profile.modal.button
5
+ category: action
6
+ module: Core
7
+ ---
8
+
9
+ # fc.sourcing.profile.modal.button
10
+
11
+ Modal confirmation button for sourcing profile activation. Opens a confirmation modal and executes the `activateSourcingProfile` GraphQL mutation.
12
+
13
+ ## When to Use
14
+ - Add an "Activate" action button on a sourcing profile detail page
15
+ - Trigger sourcing profile activation with a confirmation dialog
16
+ - Provide a safe activation workflow with cancel/confirm options
17
+
18
+ ## Key Props
19
+ | Prop | Type | Required | What it controls |
20
+ |------|------|----------|------------------|
21
+ | `action` | `"activate"` | Yes | Action type (currently only `"activate"` is supported) |
22
+ | `label` | string | Yes | Button label text (translatable) |
23
+ | `title` | string | Yes | Modal title text (translatable) |
24
+ | `description` | string | No | Description text shown in the modal body (translatable) |
25
+ | `style` | `"Primary"` / `"Secondary"` | No | Button visual style. Defaults to the context style from `useStyle()` or `"Primary"`. |
26
+
27
+ ## Data Binding
28
+ Reads route parameters from `useData().variables.routeParams` to construct the mutation input for `activateSourcingProfile`. After successful activation, navigates to the activated profile's detail page using the returned `ref` and `version`.
29
+
30
+ ## Descendants
31
+ No -- renders a single button that opens a modal on click.
32
+
33
+ ## Composition Patterns
34
+ - `fc.page.section.header` > `fc.sourcing.profile.modal.button` as a header action
35
+ - `fc.button.bar` > `fc.sourcing.profile.modal.button` alongside other sourcing profile actions
36
+ - Typically used on sourcing profile detail pages as a page-level or section-level action
37
+
38
+ ## Gotchas
39
+ - Only supports `action: "activate"` -- the component hardcodes the `activateSourcingProfile` mutation.
40
+ - On success, clears all modals and drawers, then navigates to `sourcingProfiles/{ref}/{version}` via hash routing.
41
+ - On error, shows an error snackbar with translated message `fc.sourcingProfileModalButton.error.confirmError`.
42
+ - The modal uses translated labels: `fc.sourcingProfileModalButton.cancel.label` (Cancel) and `fc.sourcingProfileModalButton.confirm.label` (Confirm).
43
+ - Button style defaults to the page context style (from `useStyle()` which reads the page actions context), falling back to `"Primary"`.
44
+ - Registered with category `content` in the component registry.
45
+
46
+ ## Manifest Example
47
+ ```json
48
+ {
49
+ "component": "fc.sourcing.profile.modal.button",
50
+ "props": {
51
+ "action": "activate",
52
+ "label": "fc.sourcingProfile.activate.label",
53
+ "title": "fc.sourcingProfile.activate.title",
54
+ "description": "fc.sourcingProfile.activate.description",
55
+ "style": "Primary"
56
+ }
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,20 @@
1
+ ---
2
+ alias: "fc.sourcing.strategy.modal.button"
3
+ aliases:
4
+ - fc.sourcing.strategy.modal.button
5
+ category: action
6
+ module: Core
7
+ ---
8
+ # fc.sourcing.strategy.modal.button
9
+
10
+ Modal button for configuring sourcing strategies — conditions, criteria, and scoring.
11
+
12
+ ## When to Use
13
+ - Sourcing profile management pages
14
+ - Strategy configuration UI
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,20 @@
1
+ ---
2
+ alias: "fc.stepper"
3
+ aliases:
4
+ - fc.stepper
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.stepper
9
+
10
+ Linear step progress bar showing completed/current/pending steps.
11
+
12
+ ## When to Use
13
+ - Order lifecycle status display
14
+ - Multi-step process visualization
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,56 @@
1
+ ---
2
+ alias: "fc.tab.content"
3
+ aliases:
4
+ - fc.tab.content
5
+ - shared.components.material.SubLayoutContent
6
+ category: layout
7
+ module: Core
8
+ ---
9
+
10
+ # fc.tab.content
11
+
12
+ Transparent content wrapper for a single tab panel inside `fc.tabs`.
13
+
14
+ ## When to Use
15
+ - Wrap the content of each tab panel inside `fc.tabs`
16
+ - Group multiple components under a single tab
17
+
18
+ ## Key Props
19
+
20
+ This component has no props. It is a pure pass-through that renders `<Children />`.
21
+
22
+ ## Descendants
23
+ Yes -- accepts any components as children. All descendants are rendered directly.
24
+
25
+ ## Composition Patterns
26
+ - `fc.tabs` > `fc.tab.content` (one per tab, each containing the tab's components)
27
+ - `fc.tab.content` > `fc.column` + `fc.column` for multi-column tab content
28
+ - `fc.tab.content` > `fc.list` for a list-based tab
29
+
30
+ ## Gotchas
31
+ - This component renders no DOM of its own -- it is a pure `<Children />` pass-through.
32
+ - Must be used as a direct descendant of `fc.tabs` for correct tab index mapping.
33
+ - Registered with category `layout`.
34
+
35
+ ## Manifest Example
36
+ ```json
37
+ {
38
+ "component": "fc.tab.content",
39
+ "descendants": [
40
+ {
41
+ "component": "fc.card.attribute",
42
+ "props": { "title": "Order Details" }
43
+ },
44
+ {
45
+ "component": "fc.list",
46
+ "props": { "title": "Line Items" }
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,64 @@
1
+ ---
2
+ alias: "fc.tabs.card"
3
+ aliases:
4
+ - fc.tabs.card
5
+ category: layout
6
+ module: Core
7
+ ---
8
+ # fc.tabs.card
9
+
10
+ Material-UI Card with internal tab navigation. Each tab displays different descendant content by index.
11
+
12
+ ## When to Use
13
+ - Organize entity detail page into sections (Items, Fulfilments, Activity)
14
+ - Group related content with tab navigation
15
+
16
+ ## Key Props
17
+ | Prop | Type | Required | What it controls |
18
+ |------|------|----------|------------------|
19
+ | `tabs` | TabInfo[] | **Yes** | Tab definitions: `[{ label: "Items" }, { label: "Fulfilments" }]`. Alias: `layouts` also accepted |
20
+ | `width` | CardWidth | No | Card width (quarter/third/half/full or 1-12) |
21
+ | `urlKey` | string | No | URL parameter key for tab state persistence |
22
+ | `noCard` | boolean | No | Remove the card wrapper (transparent background, no elevation) |
23
+
24
+ ## Data Binding
25
+ None — descendants inherit parent data context.
26
+
27
+ ## Descendants
28
+ Yes — each descendant corresponds to a tab by index (descendant[0] = tab[0]).
29
+
30
+ ## Composition Patterns
31
+ - Tab "Items" -> `fc.list` (dataSource: entity.items)
32
+ - Tab "Fulfilments" -> `fc.list` (dataSource: entity.fulfilments)
33
+ - Tab "Activity" -> `fc.activity.entity`
34
+ - Tab "Attributes" -> `fc.card.attributes.grid`
35
+
36
+ ## Gotchas
37
+ - Number of tabs MUST match number of descendants -- mismatch causes empty tabs
38
+ - Each tab `label` is required
39
+ - Tab content is lazy-rendered (only active tab mounts)
40
+ - **Internal prop name is `layouts`** -- the component internally uses `layouts: TabInfo[]`, but `tabs` is also accepted in the manifest. Internally resolved as `tabs || layouts || []`. Either name works in the manifest, but `tabs` is the conventional choice
41
+
42
+ ## Validation Rules
43
+ P10 (CRITICAL — tabs required), P11 (tab count should match descendants)
44
+
45
+ ## Manifest Example
46
+ ```json
47
+ {
48
+ "component": "fc.tabs.card",
49
+ "props": {
50
+ "tabs": [{ "label": "Items" }, { "label": "Fulfilments" }, { "label": "Activity" }]
51
+ },
52
+ "descendants": [
53
+ { "component": "fc.list", "props": { "dataSource": "orderById.items.edges", "attributes": [] } },
54
+ { "component": "fc.list", "props": { "dataSource": "orderById.fulfilments.edges", "attributes": [] } },
55
+ { "component": "fc.activity.entity" }
56
+ ]
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,69 @@
1
+ ---
2
+ alias: "fc.tabs"
3
+ aliases:
4
+ - fc.tabs
5
+ - shared.components.material.MaterialTabsSet
6
+ category: layout
7
+ module: Core
8
+ ---
9
+
10
+ # fc.tabs
11
+
12
+ Page-level tab bar that creates URL-driven tab navigation with scrollable Material-UI tabs.
13
+
14
+ ## When to Use
15
+ - Create top-level tab navigation on a page where each tab has its own URL segment
16
+ - Switch between different content views using browser-navigable tabs
17
+ - Build tabbed layouts where tab state persists in the URL
18
+
19
+ ## Key Props
20
+ | Prop | Type | Required | What it controls |
21
+ |------|------|----------|------------------|
22
+ | `layouts` | TabInfo[] | Yes | Array of tab definitions: `{ label: string, urlValue?: string }` |
23
+ | `urlKey` | string | No | URL query parameter key used to track the active tab in the browser URL |
24
+
25
+ ### TabInfo Structure
26
+ | Field | Type | Required | Description |
27
+ |-------|------|----------|-------------|
28
+ | `label` | string | Yes | Display text for the tab |
29
+ | `urlValue` | string | No | Value written to the URL when this tab is active |
30
+
31
+ ## Descendants
32
+ Yes -- each descendant corresponds to a tab panel. The active tab index determines which descendant is rendered via `<Children index={value} />`.
33
+
34
+ ## Composition Patterns
35
+ - `fc.page` > `fc.tabs` > `fc.tab.content` (one per tab)
36
+ - `fc.tabs` > any component (rendered as indexed tab panels)
37
+
38
+ ## Gotchas
39
+ - This is DIFFERENT from `fc.tabs.card` -- `fc.tabs` creates URL segments for navigation, while `fc.tabs.card` is a visual-only card-level tab set.
40
+ - The `layouts` prop defines the tab labels and URL values; descendants define the tab content. The count of `layouts` must match the count of descendants.
41
+ - Tab state is managed via `useTabs` hook which syncs with the URL. Changing tabs updates the browser URL.
42
+ - The tab bar is scrollable (`variant="scrollable"`) to handle many tabs without overflow.
43
+ - Registered with category `layout`.
44
+
45
+ ## Manifest Example
46
+ ```json
47
+ {
48
+ "component": "fc.tabs",
49
+ "props": {
50
+ "layouts": [
51
+ { "label": "Details", "urlValue": "details" },
52
+ { "label": "Items", "urlValue": "items" },
53
+ { "label": "History", "urlValue": "history" }
54
+ ],
55
+ "urlKey": "tab"
56
+ },
57
+ "descendants": [
58
+ { "component": "fc.tab.content", "descendants": [...] },
59
+ { "component": "fc.tab.content", "descendants": [...] },
60
+ { "component": "fc.tab.content", "descendants": [...] }
61
+ ]
62
+ }
63
+ ```
64
+
65
+ ## AI Parse Notes
66
+ - **Primary intent:** Declarative Mystique component definition for manifests.
67
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
68
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
69
+ - **Safety checks:** Validate required props and data bindings before manifest generation.
@@ -0,0 +1,73 @@
1
+ ---
2
+ alias: "fc.tile.metric"
3
+ aliases:
4
+ - fc.tile.metric
5
+ category: content
6
+ module: Core
7
+ ---
8
+ # fc.tile.metric
9
+
10
+ > **NOTE: `fc.tile.metric` is NOT a registered component in the Mystique core source.** It is not found in `ComponentRegistry.register()`. The closest match is `fc.dashboard.threshold` (registered as `ThresholdTile`), which provides identical functionality. Use `fc.dashboard.threshold` instead and simply omit `thresholdLow`/`thresholdHigh` for a simple metric tile without threshold coloring.
11
+
12
+ Simple KPI tile displaying a label and value. Equivalent to `fc.dashboard.threshold` with no threshold props set -- the tile renders green (#4CAF50) by default when thresholds are omitted.
13
+
14
+ ## When to Use
15
+ - Use `fc.dashboard.threshold` instead -- this alias is not registered in core Mystique
16
+ - Simple count tiles (Orders Today, Pending Fulfilments) work by using `fc.dashboard.threshold` without threshold props
17
+
18
+ ## Key Props
19
+ Same as `fc.dashboard.threshold` -- see that component for the full prop reference.
20
+
21
+ | Prop | Type | Required | What it controls |
22
+ |------|------|----------|------------------|
23
+ | `label` | string | No | Metric label text (supports templates) |
24
+ | `value` | string/number | No | Metric value (supports templates) |
25
+ | `link` | string | No | Click navigation URL (supports templates) |
26
+ | `width` | CardWidth | No | Tile width (default: `quarter` / 3) |
27
+ | `variant` | `'large'` or `'small'` | No | Value font size: `large` = 54px center, `small` = 36px left (default: `large`) |
28
+ | `options` | TileOptions | No | Conditional styling based on value (see below) |
29
+
30
+ ### Expression-Based Conditional Styling
31
+
32
+ Use `options.styles[]` to change tile text/icon color based on data values:
33
+
34
+ ```json
35
+ {
36
+ "options": {
37
+ "styles": [
38
+ {
39
+ "expression": "{{gt orders.edges.length 10}}",
40
+ "text": { "color": "error" }
41
+ }
42
+ ]
43
+ }
44
+ }
45
+ ```
46
+
47
+ When `expression` evaluates to truthy, the style is applied. This works on both `fc.tile.metric` and `fc.dashboard.threshold`.
48
+
49
+ ## Data Binding
50
+ Value supports template strings.
51
+
52
+ ## Descendants
53
+ No.
54
+
55
+ ## Gotchas
56
+ - **Not a distinct component registration** -- `fc.tile.metric` does not appear in the Mystique core component registry. If a deployment uses this name, it may be registered via a custom plugin or extension. The standard approach is to use `fc.dashboard.threshold` without threshold props
57
+
58
+ ## Validation Rules
59
+ P12 (CRITICAL -- both label and value required)
60
+
61
+ ## Manifest Example
62
+ ```json
63
+ {
64
+ "component": "fc.dashboard.threshold",
65
+ "props": { "label": "Orders Today", "value": "{{todayCount}}", "link": "/orders?created=today" }
66
+ }
67
+ ```
68
+
69
+ ## AI Parse Notes
70
+ - **Primary intent:** Declarative Mystique component definition for manifests.
71
+ - **Selection signals:** Match by `alias`, category, and required `Key Props`.
72
+ - **Assembly hints:** Combine with compatible parent/child components listed in `Composition Patterns`.
73
+ - **Safety checks:** Validate required props and data bindings before manifest generation.