@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.
- package/README.md +866 -622
- package/bin/cli.mjs +2112 -1973
- package/content/cli/agents/fluent-cli/agent.json +149 -149
- package/content/cli/agents/fluent-cli.md +132 -132
- package/content/cli/skills/fluent-bootstrap/SKILL.md +214 -181
- package/content/cli/skills/fluent-cli-index/SKILL.md +1 -1
- package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +117 -1
- package/content/cli/skills/fluent-cli-reference/SKILL.md +1040 -1031
- package/content/cli/skills/fluent-cli-retailer/SKILL.md +27 -2
- package/content/cli/skills/fluent-cli-settings/SKILL.md +21 -1
- package/content/cli/skills/fluent-connect/SKILL.md +937 -886
- package/content/cli/skills/fluent-module-deploy/SKILL.md +63 -5
- package/content/cli/skills/fluent-profile/SKILL.md +73 -0
- package/content/cli/skills/fluent-workflow/SKILL.md +360 -310
- package/content/dev/agents/fluent-backend-dev/AGENT.md +58 -0
- package/content/dev/agents/fluent-backend-dev/agent.json +69 -0
- package/content/dev/agents/fluent-backend-dev.md +287 -0
- package/content/dev/agents/fluent-dev/AGENT.md +98 -0
- package/content/dev/agents/fluent-dev/agent.json +14 -2
- package/content/dev/agents/fluent-dev.md +194 -525
- package/content/dev/agents/fluent-frontend-dev/AGENT.md +63 -0
- package/content/dev/agents/fluent-frontend-dev/agent.json +52 -0
- package/content/dev/agents/fluent-frontend-dev.md +323 -0
- package/content/dev/skills/fluent-archive/SKILL.md +234 -0
- package/content/dev/skills/fluent-build/SKILL.md +312 -192
- package/content/dev/skills/fluent-connection-analysis/SKILL.md +422 -386
- package/content/dev/skills/fluent-custom-code/SKILL.md +15 -9
- package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +19 -2
- package/content/dev/skills/fluent-e2e-test/SKILL.md +501 -394
- package/content/dev/skills/fluent-event-api/SKILL.md +962 -945
- package/content/dev/skills/fluent-feature-explain/SKILL.md +680 -603
- package/content/dev/skills/fluent-feature-plan/PLAN_TEMPLATE.md +27 -2
- package/content/dev/skills/fluent-feature-plan/SKILL.md +478 -227
- package/content/dev/skills/fluent-feature-status/SKILL.md +335 -0
- package/content/dev/skills/fluent-feedback/SKILL.md +221 -0
- package/content/dev/skills/fluent-implementation-map/SKILL.md +644 -0
- package/content/dev/skills/fluent-job-batch/SKILL.md +10 -0
- package/content/dev/skills/fluent-module-scaffold/SKILL.md +64 -2
- package/content/dev/skills/fluent-module-validate/SKILL.md +778 -775
- package/content/dev/skills/fluent-mystique-analyze/SKILL.md +817 -0
- package/content/dev/skills/fluent-mystique-builder/COMPONENT_TEMPLATE.md +81 -0
- package/content/dev/skills/fluent-mystique-builder/README.md +63 -0
- package/content/dev/skills/fluent-mystique-builder/SKILL.md +1294 -0
- package/content/dev/skills/fluent-mystique-builder/components/INDEX.md +92 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.accordion.md +48 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.fulfilmentpack.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.multiparcel.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.returnitems.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.field.wavepick.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.action.inline.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.activity.entity.md +25 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.analytics.viz.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.column.md +111 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.json.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.jsoneditor.md +54 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.locationId.md +51 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.attribute.retailerId.md +52 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.bar.md +57 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.download.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.compatibility.md +60 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.inline.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.button.print.pick.md +61 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.buttons.add.reject.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.attribute.md +73 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.attributes.grid.md +40 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.image.md +37 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.map.point.md +24 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.multi.md +79 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.card.product.md +27 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.md +34 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.area.wrapper.feed.md +98 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.md +52 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.bar.wrapper.source.md +104 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.md +28 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.gauge.wrapper.threshold.md +118 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.chart.line.md +32 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.conditional.md +62 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.dashboard.threshold.md +65 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.daterange.wrapper.forwarder.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.drawer.button.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.event.detail.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.events.search.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.daterange.md +83 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.filterComplex.md +106 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.intrange.md +82 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.field.multistring.md +50 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.filterPanel.md +53 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.json.editor.md +22 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.json.viewer.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.customAction.md +79 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.md +116 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.bppmetrics.md +69 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.feed.md +65 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.list.wrapper.source.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.addItem.md +60 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.modal.button.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mutation.inline.md +88 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.attributes.md +83 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.collapsible.text.md +33 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.mystique.link.md +30 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.order.itemDetails.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.order.shipmentDetails.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.filter.select.md +87 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.refresh.md +48 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.column.md +71 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.header.md +61 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.section.md +59 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.md +45 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.page.wizard.summary.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.progress.circular.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.provider.graphql.md +71 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.quantity.list.md +87 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.repeater.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.reports.ipuipc.md +54 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.return.rowExpansion.md +19 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcode.md +21 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.barcodeFilter.md +72 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.scanner.camera.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.settingForm.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.drawer.button.md +19 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.profile.modal.button.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.sourcing.strategy.modal.button.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.stepper.md +20 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tab.content.md +56 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.card.md +64 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tabs.md +69 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.tile.metric.md +73 -0
- package/content/dev/skills/fluent-mystique-builder/components/fc.workflow.provider.md +77 -0
- package/content/dev/skills/fluent-mystique-builder/validate-docs.ps1 +260 -0
- package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +1830 -0
- package/content/dev/skills/fluent-mystique-validate/SKILL.md +646 -0
- package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +1144 -1108
- package/content/dev/skills/fluent-retailer-config/SKILL.md +1162 -1111
- package/content/dev/skills/fluent-rollback/SKILL.md +387 -0
- package/content/dev/skills/fluent-rule-scaffold/SKILL.md +515 -385
- package/content/dev/skills/fluent-scope-decompose/SKILL.md +1123 -1021
- package/content/dev/skills/fluent-session-audit-export/SKILL.md +880 -632
- package/content/dev/skills/fluent-session-summary/SKILL.md +320 -195
- package/content/dev/skills/fluent-settings/SKILL.md +160 -1
- package/content/dev/skills/fluent-source-onboard/SKILL.md +31 -3
- package/content/dev/skills/fluent-sourcing/SKILL.md +1185 -0
- package/content/dev/skills/fluent-system-monitoring/SKILL.md +771 -767
- package/content/dev/skills/fluent-test-data/SKILL.md +514 -513
- package/content/dev/skills/fluent-trace/SKILL.md +1169 -1143
- package/content/dev/skills/fluent-transition-api/SKILL.md +364 -346
- package/content/dev/skills/fluent-use-case-discover/SKILL.md +593 -0
- package/content/dev/skills/fluent-use-case-discover/SPEC_TEMPLATE.md +281 -0
- package/content/dev/skills/fluent-version-manage/SKILL.md +53 -2
- package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +995 -959
- package/content/dev/skills/fluent-workflow-builder/SKILL.md +668 -319
- package/content/dev/skills/fluent-workflow-deploy/SKILL.md +480 -267
- package/content/dev/skills/fluent-workspace-tree/SKILL.md +281 -0
- package/content/mcp-extn/agents/fluent-mcp.md +133 -69
- package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +812 -461
- package/content/mcp-official/agents/fluent-mcp-core.md +91 -91
- package/content/mcp-official/skills/fluent-mcp-core/SKILL.md +94 -94
- package/content/rfl/skills/fluent-rfl-assess/SKILL.md +172 -172
- package/docs/CAPABILITY_MAP.md +106 -77
- package/docs/DEPLOYMENT_PROMOTION_RUNBOOK.md +218 -0
- package/docs/DESIGN-implementation-map.md +698 -0
- package/docs/DEV_WORKFLOW.md +814 -802
- package/docs/FLOW_RUN.md +142 -142
- package/docs/GETTING_STARTED.md +427 -0
- package/docs/USE_CASES.md +909 -52
- package/metadata.json +184 -156
- 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.
|