@almadar/patterns 2.30.6 → 2.30.8

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "exportedAt": "2026-05-22T00:36:20.394Z",
3
+ "exportedAt": "2026-05-22T01:35:31.064Z",
4
4
  "patterns": {
5
5
  "entity-table": {
6
6
  "type": "entity-table",
@@ -1177,7 +1177,7 @@
1177
1177
  "types": [
1178
1178
  "string"
1179
1179
  ],
1180
- "description": "Form mode \u2014 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
1180
+ "description": "Form mode 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
1181
1181
  },
1182
1182
  "fields": {
1183
1183
  "types": [
@@ -1515,7 +1515,7 @@
1515
1515
  "form-section": {
1516
1516
  "type": "form-section",
1517
1517
  "category": "form",
1518
- "description": "Alias for form \u2014 Complete form with fields and actions",
1518
+ "description": "Alias for form Complete form with fields and actions",
1519
1519
  "suggestedFor": [
1520
1520
  "create forms",
1521
1521
  "edit forms",
@@ -1583,7 +1583,7 @@
1583
1583
  "types": [
1584
1584
  "string"
1585
1585
  ],
1586
- "description": "Form mode \u2014 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
1586
+ "description": "Form mode 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
1587
1587
  },
1588
1588
  "fields": {
1589
1589
  "types": [
@@ -2294,7 +2294,7 @@
2294
2294
  "types": [
2295
2295
  "string"
2296
2296
  ],
2297
- "description": "Declarative tab change event \u2014 emits UI:{tabChangeEvent} with { tabId }",
2297
+ "description": "Declarative tab change event emits UI:{tabChangeEvent} with { tabId }",
2298
2298
  "kind": "event-ref",
2299
2299
  "emitPayloadSchema": [
2300
2300
  {
@@ -2483,7 +2483,7 @@
2483
2483
  "types": [
2484
2484
  "string"
2485
2485
  ],
2486
- "description": "Declarative step click event \u2014 emits UI:{stepClickEvent} with { stepIndex }",
2486
+ "description": "Declarative step click event emits UI:{stepClickEvent} with { stepIndex }",
2487
2487
  "kind": "event-ref",
2488
2488
  "emitPayloadSchema": [
2489
2489
  {
@@ -2569,7 +2569,7 @@
2569
2569
  "types": [
2570
2570
  "string"
2571
2571
  ],
2572
- "description": "Event to emit on Back click \u2014 emits UI:{onBack} with { currentStep, totalSteps }",
2572
+ "description": "Event to emit on Back click emits UI:{onBack} with { currentStep, totalSteps }",
2573
2573
  "kind": "event-ref",
2574
2574
  "emitPayloadSchema": [
2575
2575
  {
@@ -2589,7 +2589,7 @@
2589
2589
  "types": [
2590
2590
  "string"
2591
2591
  ],
2592
- "description": "Event to emit on Next click \u2014 emits UI:{onNext} with { currentStep, totalSteps }",
2592
+ "description": "Event to emit on Next click emits UI:{onNext} with { currentStep, totalSteps }",
2593
2593
  "kind": "event-ref",
2594
2594
  "emitPayloadSchema": [
2595
2595
  {
@@ -2609,7 +2609,7 @@
2609
2609
  "types": [
2610
2610
  "string"
2611
2611
  ],
2612
- "description": "Event to emit on Complete click \u2014 emits UI:{onComplete} with { currentStep, totalSteps }",
2612
+ "description": "Event to emit on Complete click emits UI:{onComplete} with { currentStep, totalSteps }",
2613
2613
  "kind": "event-ref",
2614
2614
  "emitPayloadSchema": [
2615
2615
  {
@@ -3321,7 +3321,7 @@
3321
3321
  "types": [
3322
3322
  "string"
3323
3323
  ],
3324
- "description": "Declarative page change event \u2014 emits UI:{pageChangeEvent} with { page }",
3324
+ "description": "Declarative page change event emits UI:{pageChangeEvent} with { page }",
3325
3325
  "kind": "event-ref",
3326
3326
  "emitPayloadSchema": [
3327
3327
  {
@@ -3335,7 +3335,7 @@
3335
3335
  "types": [
3336
3336
  "string"
3337
3337
  ],
3338
- "description": "Declarative page size change event \u2014 emits UI:{pageSizeChangeEvent} with { pageSize }",
3338
+ "description": "Declarative page size change event emits UI:{pageSizeChangeEvent} with { pageSize }",
3339
3339
  "kind": "event-ref",
3340
3340
  "emitPayloadSchema": [
3341
3341
  {
@@ -3425,7 +3425,7 @@
3425
3425
  "types": [
3426
3426
  "string"
3427
3427
  ],
3428
- "description": "Declarative action event \u2014 emits UI:{actionEvent} via eventBus when action button is clicked",
3428
+ "description": "Declarative action event emits UI:{actionEvent} via eventBus when action button is clicked",
3429
3429
  "kind": "event-ref",
3430
3430
  "emitPayloadSchema": []
3431
3431
  }
@@ -3506,7 +3506,7 @@
3506
3506
  "types": [
3507
3507
  "string"
3508
3508
  ],
3509
- "description": "Declarative retry event \u2014 emits UI:{retryEvent} via eventBus when retry button is clicked",
3509
+ "description": "Declarative retry event emits UI:{retryEvent} via eventBus when retry button is clicked",
3510
3510
  "kind": "event-ref",
3511
3511
  "emitPayloadSchema": []
3512
3512
  }
@@ -3602,7 +3602,7 @@
3602
3602
  "types": [
3603
3603
  "string"
3604
3604
  ],
3605
- "description": "Declarative dismiss event \u2014 emits UI:{dismissEvent} via eventBus when toast is dismissed",
3605
+ "description": "Declarative dismiss event emits UI:{dismissEvent} via eventBus when toast is dismissed",
3606
3606
  "kind": "event-ref",
3607
3607
  "emitPayloadSchema": []
3608
3608
  },
@@ -3610,7 +3610,7 @@
3610
3610
  "types": [
3611
3611
  "string"
3612
3612
  ],
3613
- "description": "Declarative action event \u2014 emits UI:{actionEvent} via eventBus when action button is clicked",
3613
+ "description": "Declarative action event emits UI:{actionEvent} via eventBus when action button is clicked",
3614
3614
  "kind": "event-ref",
3615
3615
  "emitPayloadSchema": []
3616
3616
  }
@@ -3750,7 +3750,7 @@
3750
3750
  "types": [
3751
3751
  "string"
3752
3752
  ],
3753
- "description": "Declarative close event \u2014 emits UI:{closeEvent} via eventBus when modal should close",
3753
+ "description": "Declarative close event emits UI:{closeEvent} via eventBus when modal should close",
3754
3754
  "kind": "event-ref",
3755
3755
  "emitPayloadSchema": []
3756
3756
  },
@@ -3857,7 +3857,7 @@
3857
3857
  "types": [
3858
3858
  "string"
3859
3859
  ],
3860
- "description": "Declarative close event \u2014 emits UI:{closeEvent} via eventBus when drawer should close",
3860
+ "description": "Declarative close event emits UI:{closeEvent} via eventBus when drawer should close",
3861
3861
  "kind": "event"
3862
3862
  }
3863
3863
  }
@@ -4334,7 +4334,7 @@
4334
4334
  "types": [
4335
4335
  "string"
4336
4336
  ],
4337
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
4337
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
4338
4338
  "kind": "event"
4339
4339
  },
4340
4340
  "actionPayload": {
@@ -4347,7 +4347,7 @@
4347
4347
  "types": [
4348
4348
  "string"
4349
4349
  ],
4350
- "description": "Declarative hover event \u2014 emits UI:{hoverEvent} with { hovered: true/false } on mouseEnter/mouseLeave",
4350
+ "description": "Declarative hover event emits UI:{hoverEvent} with { hovered: true/false } on mouseEnter/mouseLeave",
4351
4351
  "kind": "event"
4352
4352
  },
4353
4353
  "maxWidth": {
@@ -4821,7 +4821,7 @@
4821
4821
  "types": [
4822
4822
  "string"
4823
4823
  ],
4824
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
4824
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
4825
4825
  "kind": "event"
4826
4826
  },
4827
4827
  "actionPayload": {
@@ -4896,7 +4896,7 @@
4896
4896
  "string",
4897
4897
  "number"
4898
4898
  ],
4899
- "description": "Badge label text (alternative to children for schema-driven rendering). Numeric values are auto-coerced to string for rendering \u2014 common case is unread counts, error counts, status codes, etc."
4899
+ "description": "Badge label text (alternative to children for schema-driven rendering). Numeric values are auto-coerced to string for rendering common case is unread counts, error counts, status codes, etc."
4900
4900
  },
4901
4901
  "icon": {
4902
4902
  "types": [
@@ -4908,7 +4908,7 @@
4908
4908
  "types": [
4909
4909
  "function"
4910
4910
  ],
4911
- "description": "When set, renders a small X button on the right of the badge that invokes this handler \u2014 turns the badge into a removable chip. Used by the TagInput molecule and other \"list of removable values\" surfaces.",
4911
+ "description": "When set, renders a small X button on the right of the badge that invokes this handler turns the badge into a removable chip. Used by the TagInput molecule and other \"list of removable values\" surfaces.",
4912
4912
  "kind": "callback",
4913
4913
  "callbackArgs": []
4914
4914
  },
@@ -5012,7 +5012,7 @@
5012
5012
  "types": [
5013
5013
  "string"
5014
5014
  ],
5015
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
5015
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
5016
5016
  "kind": "event"
5017
5017
  },
5018
5018
  "actionPayload": {
@@ -5824,7 +5824,7 @@
5824
5824
  "types": [
5825
5825
  "string"
5826
5826
  ],
5827
- "description": "Declarative dismiss event \u2014 emits UI:{dismissEvent} via eventBus when alert is dismissed",
5827
+ "description": "Declarative dismiss event emits UI:{dismissEvent} via eventBus when alert is dismissed",
5828
5828
  "kind": "event"
5829
5829
  }
5830
5830
  }
@@ -6201,7 +6201,7 @@
6201
6201
  "types": [
6202
6202
  "string"
6203
6203
  ],
6204
- "description": "Declarative toggle event \u2014 emits UI:{toggleEvent} with { itemId, isOpen }",
6204
+ "description": "Declarative toggle event emits UI:{toggleEvent} with { itemId, isOpen }",
6205
6205
  "kind": "event-ref",
6206
6206
  "emitPayloadSchema": [
6207
6207
  {
@@ -6741,7 +6741,7 @@
6741
6741
  "types": [
6742
6742
  "string"
6743
6743
  ],
6744
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
6744
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
6745
6745
  "kind": "event"
6746
6746
  }
6747
6747
  }
@@ -6898,7 +6898,7 @@
6898
6898
  "types": [
6899
6899
  "string"
6900
6900
  ],
6901
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
6901
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
6902
6902
  "kind": "event"
6903
6903
  },
6904
6904
  "actionPayload": {
@@ -6992,14 +6992,14 @@
6992
6992
  "types": [
6993
6993
  "string"
6994
6994
  ],
6995
- "description": "Declarative event name \u2014 emits UI:{action} via eventBus on click",
6995
+ "description": "Declarative event name emits UI:{action} via eventBus on click",
6996
6996
  "kind": "event"
6997
6997
  },
6998
6998
  "hoverEvent": {
6999
6999
  "types": [
7000
7000
  "string"
7001
7001
  ],
7002
- "description": "Declarative hover event \u2014 emits UI:{hoverEvent} with { hovered: true/false }",
7002
+ "description": "Declarative hover event emits UI:{hoverEvent} with { hovered: true/false }",
7003
7003
  "kind": "event"
7004
7004
  }
7005
7005
  }
@@ -7923,7 +7923,7 @@
7923
7923
  "types": [
7924
7924
  "string"
7925
7925
  ],
7926
- "description": "Panel width as Tailwind class string. Default fills the viewport on mobile and snaps to `w-96` (384 px) at `sm:` and above so phones don't lose content to a fixed 384 px column. Consumers passing a custom value should include a `w-full` mobile fallback in the same string (e.g. `\"w-full sm:w-[480px]\"`) \u2014 Tailwind's JIT can't see dynamically-concatenated class names. @default 'w-full sm:w-96'",
7926
+ "description": "Panel width as Tailwind class string. Default fills the viewport on mobile and snaps to `w-96` (384 px) at `sm:` and above so phones don't lose content to a fixed 384 px column. Consumers passing a custom value should include a `w-full` mobile fallback in the same string (e.g. `\"w-full sm:w-[480px]\"`) Tailwind's JIT can't see dynamically-concatenated class names. @default 'w-full sm:w-96'",
7927
7927
  "default": "w-full sm:w-96"
7928
7928
  },
7929
7929
  "position": {
@@ -7954,7 +7954,7 @@
7954
7954
  "types": [
7955
7955
  "string"
7956
7956
  ],
7957
- "description": "Declarative close event \u2014 emits UI:{closeEvent} via eventBus when panel should close",
7957
+ "description": "Declarative close event emits UI:{closeEvent} via eventBus when panel should close",
7958
7958
  "kind": "event-ref",
7959
7959
  "emitPayloadSchema": []
7960
7960
  }
@@ -9520,14 +9520,14 @@
9520
9520
  "types": [
9521
9521
  "boolean"
9522
9522
  ],
9523
- "description": "Show the top-bar search box. Default `false` \u2014 opt in by setting `searchEvent` (any truthy value implies showSearch) or this flag.",
9523
+ "description": "Show the top-bar search box. Default `false` opt in by setting `searchEvent` (any truthy value implies showSearch) or this flag.",
9524
9524
  "default": false
9525
9525
  },
9526
9526
  "searchEvent": {
9527
9527
  "types": [
9528
9528
  "string"
9529
9529
  ],
9530
- "description": "Declarative search event \u2014 fires `UI:{searchEvent}` on the bus when the user submits the search box (Enter key). Setting this implies `showSearch=true`. Use `onSearchSubmit` for direct React usage instead.",
9530
+ "description": "Declarative search event fires `UI:{searchEvent}` on the bus when the user submits the search box (Enter key). Setting this implies `showSearch=true`. Use `onSearchSubmit` for direct React usage instead.",
9531
9531
  "kind": "event-ref",
9532
9532
  "emitPayloadSchema": [
9533
9533
  {
@@ -9554,7 +9554,7 @@
9554
9554
  "types": [
9555
9555
  "array"
9556
9556
  ],
9557
- "description": "Generic top-bar action buttons rendered between the search bar and the notifications bell. Each entry: `{icon, label?, event, badge?, variant?}`. Domain-agnostic \u2014 consumers add a cart icon, profile button, help-bubble, or any other top-bar action by appending entries. Empty array (default) renders nothing.",
9557
+ "description": "Generic top-bar action buttons rendered between the search bar and the notifications bell. Each entry: `{icon, label?, event, badge?, variant?}`. Domain-agnostic consumers add a cart icon, profile button, help-bubble, or any other top-bar action by appending entries. Empty array (default) renders nothing.",
9558
9558
  "kind": "event-list",
9559
9559
  "eventField": "event",
9560
9560
  "items": {
@@ -9611,7 +9611,7 @@
9611
9611
  "types": [
9612
9612
  "string"
9613
9613
  ],
9614
- "description": "Declarative bell click event \u2014 fires `UI:{notificationClickEvent}` on the bus with an empty payload when the user clicks the bell.",
9614
+ "description": "Declarative bell click event fires `UI:{notificationClickEvent}` on the bus with an empty payload when the user clicks the bell.",
9615
9615
  "kind": "event-ref",
9616
9616
  "emitPayloadSchema": []
9617
9617
  },
@@ -9627,14 +9627,14 @@
9627
9627
  "types": [
9628
9628
  "boolean"
9629
9629
  ],
9630
- "description": "Show the theme toggle button in the header. Default `true` \u2014 universally useful for a11y / dark mode.",
9630
+ "description": "Show the theme toggle button in the header. Default `true` universally useful for a11y / dark mode.",
9631
9631
  "default": true
9632
9632
  },
9633
9633
  "sidebarFooter": {
9634
9634
  "types": [
9635
9635
  "node"
9636
9636
  ],
9637
- "description": "Custom sidebar footer (optional). When omitted, the sidebar has no footer \u2014 apps that need Settings/etc. add them via navItems."
9637
+ "description": "Custom sidebar footer (optional). When omitted, the sidebar has no footer apps that need Settings/etc. add them via navItems."
9638
9638
  },
9639
9639
  "currentPath": {
9640
9640
  "types": [
@@ -9798,7 +9798,7 @@
9798
9798
  "game-shell": {
9799
9799
  "type": "game-shell",
9800
9800
  "category": "template",
9801
- "description": "GameShell A full-screen layout wrapper for game applications. Replaces DashboardLayout for game clients \u2014 no sidebar nav, just full-viewport rendering with an optional HUD overlay bar. Used as a React Router layout route element: <Route element={<GameShell appName=\"TraitWars\" />}> <Route index element={<WorldMapPage />} /> ... </Route>",
9801
+ "description": "GameShell A full-screen layout wrapper for game applications. Replaces DashboardLayout for game clients no sidebar nav, just full-viewport rendering with an optional HUD overlay bar. Used as a React Router layout route element: <Route element={<GameShell appName=\"TraitWars\" />}> <Route index element={<WorldMapPage />} /> ... </Route>",
9802
9802
  "suggestedFor": [
9803
9803
  "game",
9804
9804
  "shell",
@@ -10056,7 +10056,7 @@
10056
10056
  "types": [
10057
10057
  "boolean"
10058
10058
  ],
10059
- "description": "Format X-axis labels as time (ISO date in \u2192 \"Mar 2026\"-style label out)",
10059
+ "description": "Format X-axis labels as time (ISO date in \"Mar 2026\"-style label out)",
10060
10060
  "default": false
10061
10061
  },
10062
10062
  "drillEvent": {
@@ -11529,7 +11529,7 @@
11529
11529
  "node",
11530
11530
  "function"
11531
11531
  ],
11532
- "description": "Fallback UI when an error is caught \u2014 ReactNode or render function"
11532
+ "description": "Fallback UI when an error is caught ReactNode or render function"
11533
11533
  },
11534
11534
  "className": {
11535
11535
  "types": [
@@ -11710,7 +11710,7 @@
11710
11710
  "types": [
11711
11711
  "function"
11712
11712
  ],
11713
- "description": "GAP-51: called with the new code on every keystroke when `editable === true`. Consumers should debounce + parse downstream \u2014 `CodeBlock` does not.",
11713
+ "description": "GAP-51: called with the new code on every keystroke when `editable === true`. Consumers should debounce + parse downstream `CodeBlock` does not.",
11714
11714
  "kind": "callback",
11715
11715
  "callbackArgs": [
11716
11716
  {
@@ -11723,14 +11723,14 @@
11723
11723
  "types": [
11724
11724
  "object"
11725
11725
  ],
11726
- "description": "GAP-80: line-level error/warning highlights for editable mode. Map of 1-based line number \u2192 severity. The overlay paints a colored background on each line: error = red, warning = yellow. Pass undefined (default) to disable. The consumer is responsible for computing the path \u2192 line map from the schema + validation results."
11726
+ "description": "GAP-80: line-level error/warning highlights for editable mode. Map of 1-based line number severity. The overlay paints a colored background on each line: error = red, warning = yellow. Pass undefined (default) to disable. The consumer is responsible for computing the path line map from the schema + validation results."
11727
11727
  }
11728
11728
  }
11729
11729
  },
11730
11730
  "markdown-content": {
11731
11731
  "type": "markdown-content",
11732
11732
  "category": "component",
11733
- "description": "MarkdownContent Molecule Component Renders markdown content with support for GFM (GitHub Flavored Markdown), math equations (KaTeX), and raw HTML. Handles inline code only \u2014 fenced code blocks should be parsed out and rendered with CodeBlock component. Event Contract: - No events emitted (display-only component) - entityAware: false NOTE: react-markdown's `components` override API requires native HTML elements \u2014 this is the same library-boundary exception as `<iframe>` in DocumentViewer and `<svg>` in JazariStateMachine/StateMachineView.",
11733
+ "description": "MarkdownContent Molecule Component Renders markdown content with support for GFM (GitHub Flavored Markdown), math equations (KaTeX), and raw HTML. Handles inline code only fenced code blocks should be parsed out and rendered with CodeBlock component. Event Contract: - No events emitted (display-only component) - entityAware: false NOTE: react-markdown's `components` override API requires native HTML elements this is the same library-boundary exception as `<iframe>` in DocumentViewer and `<svg>` in JazariStateMachine/StateMachineView.",
11734
11734
  "suggestedFor": [
11735
11735
  "markdown",
11736
11736
  "content",
@@ -11856,7 +11856,7 @@
11856
11856
  "types": [
11857
11857
  "string"
11858
11858
  ],
11859
- "description": "Raw content string \u2014 auto-parsed into segments"
11859
+ "description": "Raw content string auto-parsed into segments"
11860
11860
  },
11861
11861
  "segments": {
11862
11862
  "types": [
@@ -11917,7 +11917,7 @@
11917
11917
  "types": [
11918
11918
  "object"
11919
11919
  ],
11920
- "description": "Full schema \u2014 extracts first trait's state machine"
11920
+ "description": "Full schema extracts first trait's state machine"
11921
11921
  },
11922
11922
  "trait": {
11923
11923
  "types": [
@@ -11998,7 +11998,7 @@
11998
11998
  "types": [
11999
11999
  "function"
12000
12000
  ],
12001
- "description": "Custom state node renderer \u2014 when provided, replaces the default circle nodes",
12001
+ "description": "Custom state node renderer when provided, replaces the default circle nodes",
12002
12002
  "kind": "callback",
12003
12003
  "callbackArgs": [
12004
12004
  {
@@ -12348,7 +12348,7 @@
12348
12348
  "number",
12349
12349
  "string"
12350
12350
  ],
12351
- "description": "Override the viewport-driven day window. `'auto'` (default) tracks `window.innerWidth` \u2014 1 day on mobile, 3 on tablet, 7 on laptop+. Pass an explicit number to force a fixed window (useful for print layouts or screenshot tests).",
12351
+ "description": "Override the viewport-driven day window. `'auto'` (default) tracks `window.innerWidth` 1 day on mobile, 3 on tablet, 7 on laptop+. Pass an explicit number to force a fixed window (useful for print layouts or screenshot tests).",
12352
12352
  "default": "auto"
12353
12353
  }
12354
12354
  }
@@ -12914,21 +12914,21 @@
12914
12914
  "types": [
12915
12915
  "boolean"
12916
12916
  ],
12917
- "description": "Mark this container as the DnD root for its subtree \u2014 descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
12917
+ "description": "Mark this container as the DnD root for its subtree descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
12918
12918
  },
12919
12919
  "entity": {
12920
12920
  "types": [
12921
12921
  "object",
12922
12922
  "array"
12923
12923
  ],
12924
- "description": "Schema entity data \u2014 single record or collection, typed against `@almadar/core`'s `EntityRow` so the narrow type declared on the emitting trait's `Event { data : [X] }` flows through to the prop without widening. The generic `T` lets consumers pass a narrower entity (e.g. `CartItem`) and have the `children` render function receive cards typed to that exact shape.",
12924
+ "description": "Schema entity data single record or collection, typed against `@almadar/core`'s `EntityRow` so the narrow type declared on the emitting trait's `Event { data : [X] }` flows through to the prop without widening. The generic `T` lets consumers pass a narrower entity (e.g. `CartItem`) and have the `children` render function receive cards typed to that exact shape.",
12925
12925
  "required": true
12926
12926
  },
12927
12927
  "fields": {
12928
12928
  "types": [
12929
12929
  "array"
12930
12930
  ],
12931
- "description": "Field definitions for rendering each card. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
12931
+ "description": "Field definitions for rendering each card. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits both names resolve to the same shape here. Pass either.",
12932
12932
  "items": {
12933
12933
  "types": [
12934
12934
  "object"
@@ -12990,7 +12990,7 @@
12990
12990
  "types": [
12991
12991
  "array"
12992
12992
  ],
12993
- "description": "Alias for `fields` \u2014 the compiler emits `columns` for field defs.",
12993
+ "description": "Alias for `fields` the compiler emits `columns` for field defs.",
12994
12994
  "items": {
12995
12995
  "types": [
12996
12996
  "object"
@@ -13280,21 +13280,21 @@
13280
13280
  "types": [
13281
13281
  "boolean"
13282
13282
  ],
13283
- "description": "Mark this container as the DnD root for its subtree \u2014 descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
13283
+ "description": "Mark this container as the DnD root for its subtree descendant zones share one DndContext (cross-container drag). Use on an outer container whose own items are not draggable."
13284
13284
  },
13285
13285
  "entity": {
13286
13286
  "types": [
13287
13287
  "object",
13288
13288
  "array"
13289
13289
  ],
13290
- "description": "Schema entity data \u2014 single record or collection, typed against `@almadar/core`'s `EntityRow` so the narrow type declared on the emitting trait's `Event { data : [X] }` flows through to the prop without widening. The generic `T` lets consumers pass a narrower entity (e.g. `CartItem`) and have the `children` render function receive items of that exact shape.",
13290
+ "description": "Schema entity data single record or collection, typed against `@almadar/core`'s `EntityRow` so the narrow type declared on the emitting trait's `Event { data : [X] }` flows through to the prop without widening. The generic `T` lets consumers pass a narrower entity (e.g. `CartItem`) and have the `children` render function receive items of that exact shape.",
13291
13291
  "required": true
13292
13292
  },
13293
13293
  "fields": {
13294
13294
  "types": [
13295
13295
  "array"
13296
13296
  ],
13297
- "description": "Field definitions for rendering each row. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits \u2014 both names resolve to the same shape here. Pass either.",
13297
+ "description": "Field definitions for rendering each row. The pattern contract in `@almadar/patterns` documents `columns` as the wire-format alias the compiler emits both names resolve to the same shape here. Pass either.",
13298
13298
  "items": {
13299
13299
  "types": [
13300
13300
  "object"
@@ -13351,7 +13351,7 @@
13351
13351
  "types": [
13352
13352
  "array"
13353
13353
  ],
13354
- "description": "Alias for `fields` \u2014 the compiler emits `columns` for field defs.",
13354
+ "description": "Alias for `fields` the compiler emits `columns` for field defs.",
13355
13355
  "items": {
13356
13356
  "types": [
13357
13357
  "object"
@@ -15110,7 +15110,7 @@
15110
15110
  "types": [
15111
15111
  "number"
15112
15112
  ],
15113
- "description": "Signed delta vs previous period. >0 renders \u2191 green, <0 renders \u2193 red, 0 hides. Polarity reversal via `trendPolarity`."
15113
+ "description": "Signed delta vs previous period. >0 renders green, <0 renders red, 0 hides. Polarity reversal via `trendPolarity`."
15114
15114
  },
15115
15115
  "trendPolarity": {
15116
15116
  "types": [
@@ -15127,7 +15127,7 @@
15127
15127
  "types": [
15128
15128
  "string"
15129
15129
  ],
15130
- "description": "When `'percent'`, renders trend with a `%` suffix (e.g. `\u2193 3.3%`); default is `'absolute'`.",
15130
+ "description": "When `'percent'`, renders trend with a `%` suffix (e.g. `↓ 3.3%`); default is `'absolute'`.",
15131
15131
  "enumValues": [
15132
15132
  "absolute",
15133
15133
  "percent"
@@ -15155,7 +15155,7 @@
15155
15155
  "types": [
15156
15156
  "string"
15157
15157
  ],
15158
- "description": "Prefix prepended to the formatted value (e.g. \"\u2248 \")."
15158
+ "description": "Prefix prepended to the formatted value (e.g. \" \")."
15159
15159
  },
15160
15160
  "suffix": {
15161
15161
  "types": [
@@ -18010,14 +18010,14 @@
18010
18010
  "boolean",
18011
18011
  "object"
18012
18012
  ],
18013
- "description": "Enable Suspense boundaries around each slot. When true, each inline slot is wrapped in `<ErrorBoundary><Suspense>` with Skeleton fallbacks. Opt-in \u2014 existing isLoading prop pattern still works."
18013
+ "description": "Enable Suspense boundaries around each slot. When true, each inline slot is wrapped in `<ErrorBoundary><Suspense>` with Skeleton fallbacks. Opt-in existing isLoading prop pattern still works."
18014
18014
  }
18015
18015
  }
18016
18016
  },
18017
18017
  "trait-frame": {
18018
18018
  "type": "trait-frame",
18019
18019
  "category": "component",
18020
- "description": "TraitFrame \u2014 renders the current frame of a referenced trait. Resolves the `@trait.X[.slot]` binding at render time by looking up the referenced trait's last `render-ui` payload from the orbital's `UISlotManager`. Re-renders automatically when that trait transitions via the per-trait subscription channel (`subscribeTrait`). This is the single rendering primitive both runtime paths converge on: - **Interpreted path** \u2014 the trait-binding resolver in `renderer/trait-binding-resolver.ts` walks pattern trees at render time, substituting `\"@trait.X\"` string children with this component. - **Compiled path** \u2014 the TypeScript shell codegen in `orbital-shell-typescript/src/backend.rs::pattern_to_jsx_with_data` emits this component directly into generated JSX wherever a `@trait.*` string appears in a pattern tree. Embedding is passive: the referenced trait's state machine runs unchanged; TraitFrame is only a read-only lens on its current frame. Event propagation happens over the shared event bus, not through this component.",
18020
+ "description": "TraitFrame renders the current frame of a referenced trait. Resolves the `@trait.X[.slot]` binding at render time by looking up the referenced trait's last `render-ui` payload from the orbital's `UISlotManager`. Re-renders automatically when that trait transitions via the per-trait subscription channel (`subscribeTrait`). This is the single rendering primitive both runtime paths converge on: - **Interpreted path** the trait-binding resolver in `renderer/trait-binding-resolver.ts` walks pattern trees at render time, substituting `\"@trait.X\"` string children with this component. - **Compiled path** the TypeScript shell codegen in `orbital-shell-typescript/src/backend.rs::pattern_to_jsx_with_data` emits this component directly into generated JSX wherever a `@trait.*` string appears in a pattern tree. Embedding is passive: the referenced trait's state machine runs unchanged; TraitFrame is only a read-only lens on its current frame. Event propagation happens over the shared event bus, not through this component.",
18021
18021
  "suggestedFor": [
18022
18022
  "trait",
18023
18023
  "frame",
@@ -18200,7 +18200,7 @@
18200
18200
  "types": [
18201
18201
  "function"
18202
18202
  ],
18203
- "description": "Called when the user clicks the remove (\u00d7) button",
18203
+ "description": "Called when the user clicks the remove (×) button",
18204
18204
  "kind": "callback",
18205
18205
  "callbackArgs": []
18206
18206
  },
@@ -18208,7 +18208,7 @@
18208
18208
  "types": [
18209
18209
  "boolean"
18210
18210
  ],
18211
- "description": "Disable the remove button (renders without \u00d7 control)",
18211
+ "description": "Disable the remove button (renders without × control)",
18212
18212
  "default": true
18213
18213
  },
18214
18214
  "onClick": {
@@ -18237,7 +18237,7 @@
18237
18237
  "types": [
18238
18238
  "string"
18239
18239
  ],
18240
- "description": "Event name dispatched via event bus when the remove (\u00d7) button is clicked. Payload: { label }",
18240
+ "description": "Event name dispatched via event bus when the remove (×) button is clicked. Payload: { label }",
18241
18241
  "kind": "event-ref",
18242
18242
  "emitPayloadSchema": [
18243
18243
  {
@@ -20347,7 +20347,7 @@
20347
20347
  "state-indicator": {
20348
20348
  "type": "state-indicator",
20349
20349
  "category": "game",
20350
- "description": "StateIndicator Component Displays a visual indicator for a game entity's current state. Generic \u2014 not tied to any specific game. Projects can extend the state styles via the `stateStyles` prop.",
20350
+ "description": "StateIndicator Component Displays a visual indicator for a game entity's current state. Generic not tied to any specific game. Projects can extend the state styles via the `stateStyles` prop.",
20351
20351
  "suggestedFor": [
20352
20352
  "state",
20353
20353
  "indicator",
@@ -22118,7 +22118,7 @@
22118
22118
  "combat-log": {
22119
22119
  "type": "combat-log",
22120
22120
  "category": "game",
22121
- "description": "CombatLog Component Scrollable log of combat events with icons and colors. Generalized from Trait Wars \u2014 removed asset manifest coupling.",
22121
+ "description": "CombatLog Component Scrollable log of combat events with icons and colors. Generalized from Trait Wars removed asset manifest coupling.",
22122
22122
  "suggestedFor": [
22123
22123
  "combat",
22124
22124
  "log",
@@ -23530,7 +23530,7 @@
23530
23530
  "types": [
23531
23531
  "function"
23532
23532
  ],
23533
- "description": "--- Event handlers (legacy callbacks \u2014 prefer declarative event string props below) ---",
23533
+ "description": "--- Event handlers (legacy callbacks prefer declarative event string props below) ---",
23534
23534
  "kind": "callback",
23535
23535
  "callbackArgs": [
23536
23536
  {
@@ -23789,7 +23789,7 @@
23789
23789
  "types": [
23790
23790
  "boolean"
23791
23791
  ],
23792
- "description": "Whether there are active effects \u2014 keeps RAF loop alive",
23792
+ "description": "Whether there are active effects keeps RAF loop alive",
23793
23793
  "default": false
23794
23794
  },
23795
23795
  "assetBaseUrl": {
@@ -24817,7 +24817,7 @@
24817
24817
  "object",
24818
24818
  "string"
24819
24819
  ],
24820
- "description": "Field name translation map \u2014 a BookFieldMap object or locale key (\"ar\")"
24820
+ "description": "Field name translation map a BookFieldMap object or locale key (\"ar\")"
24821
24821
  }
24822
24822
  }
24823
24823
  },
@@ -25699,7 +25699,7 @@
25699
25699
  "types": [
25700
25700
  "object"
25701
25701
  ],
25702
- "description": "Sound manifest \u2014 keys mapped to SoundEntry definitions",
25702
+ "description": "Sound manifest keys mapped to SoundEntry definitions",
25703
25703
  "required": true
25704
25704
  },
25705
25705
  "baseUrl": {
@@ -25978,7 +25978,7 @@
25978
25978
  "types": [
25979
25979
  "object"
25980
25980
  ],
25981
- "description": "Category \u2192 color mapping"
25981
+ "description": "Category color mapping"
25982
25982
  },
25983
25983
  "tooltipFrameUrl": {
25984
25984
  "types": [
@@ -26626,7 +26626,7 @@
26626
26626
  "simulation-canvas": {
26627
26627
  "type": "simulation-canvas",
26628
26628
  "category": "game",
26629
- "description": "SimulationCanvas Self-contained 2D physics canvas for educational presets. Runs its own Euler integration loop \u2014 no external physics hook needed.",
26629
+ "description": "SimulationCanvas Self-contained 2D physics canvas for educational presets. Runs its own Euler integration loop no external physics hook needed.",
26630
26630
  "suggestedFor": [
26631
26631
  "simulation",
26632
26632
  "canvas",
@@ -28261,7 +28261,7 @@
28261
28261
  "types": [
28262
28262
  "object"
28263
28263
  ],
28264
- "description": "Category \u2192 color mapping"
28264
+ "description": "Category color mapping"
28265
28265
  },
28266
28266
  "size": {
28267
28267
  "types": [
@@ -28442,7 +28442,7 @@
28442
28442
  "types": [
28443
28443
  "object"
28444
28444
  ],
28445
- "description": "Category \u2192 color mapping"
28445
+ "description": "Category color mapping"
28446
28446
  }
28447
28447
  }
28448
28448
  },
@@ -28461,7 +28461,7 @@
28461
28461
  "types": [
28462
28462
  "array"
28463
28463
  ],
28464
- "description": "The current sequence (sparse \u2014 undefined means empty slot)",
28464
+ "description": "The current sequence (sparse undefined means empty slot)",
28465
28465
  "required": true,
28466
28466
  "items": {
28467
28467
  "types": [
@@ -28526,7 +28526,7 @@
28526
28526
  "types": [
28527
28527
  "object"
28528
28528
  ],
28529
- "description": "Category \u2192 color mapping"
28529
+ "description": "Category color mapping"
28530
28530
  },
28531
28531
  "slotFeedback": {
28532
28532
  "types": [
@@ -28792,7 +28792,7 @@
28792
28792
  "types": [
28793
28793
  "object"
28794
28794
  ],
28795
- "description": "Category \u2192 color mapping"
28795
+ "description": "Category color mapping"
28796
28796
  },
28797
28797
  "stepDurationMs": {
28798
28798
  "types": [
@@ -30034,7 +30034,7 @@
30034
30034
  "types": [
30035
30035
  "string"
30036
30036
  ],
30037
- "description": "Stroke color. `auto` (default): success when the series trends up (last \u2265 first), error when it trends down.",
30037
+ "description": "Stroke color. `auto` (default): success when the series trends up (last first), error when it trends down.",
30038
30038
  "enumValues": [
30039
30039
  "auto",
30040
30040
  "primary",
@@ -30110,7 +30110,7 @@
30110
30110
  "types": [
30111
30111
  "string"
30112
30112
  ],
30113
- "description": "Event name emitted as `UI:{event}` with payload `{ from, to }`. Optional \u2014 when omitted, only the `onChange` callback fires.",
30113
+ "description": "Event name emitted as `UI:{event}` with payload `{ from, to }`. Optional when omitted, only the `onChange` callback fires.",
30114
30114
  "kind": "event-ref",
30115
30115
  "emitPayloadSchema": [
30116
30116
  {
@@ -30279,7 +30279,7 @@
30279
30279
  "types": [
30280
30280
  "string"
30281
30281
  ],
30282
- "description": "Placeholder for the entry input. Default: `\"Type and press Enter\u2026\"`."
30282
+ "description": "Placeholder for the entry input. Default: `\"Type and press Enter…\"`."
30283
30283
  },
30284
30284
  "disabled": {
30285
30285
  "types": [
@@ -30341,10 +30341,90 @@
30341
30341
  }
30342
30342
  }
30343
30343
  },
30344
+ "marketing-footer": {
30345
+ "type": "marketing-footer",
30346
+ "category": "component",
30347
+ "description": "MarketingFooter component",
30348
+ "suggestedFor": [
30349
+ "marketing",
30350
+ "footer",
30351
+ "marketing footer"
30352
+ ],
30353
+ "typicalSize": "medium",
30354
+ "propsSchema": {
30355
+ "columns": {
30356
+ "types": [
30357
+ "array"
30358
+ ],
30359
+ "description": "columns prop",
30360
+ "required": true,
30361
+ "items": {
30362
+ "types": [
30363
+ "object"
30364
+ ],
30365
+ "properties": {
30366
+ "title": {
30367
+ "types": [
30368
+ "string"
30369
+ ]
30370
+ },
30371
+ "items": {
30372
+ "types": [
30373
+ "array"
30374
+ ],
30375
+ "items": {
30376
+ "types": [
30377
+ "object"
30378
+ ],
30379
+ "properties": {
30380
+ "label": {
30381
+ "types": [
30382
+ "string"
30383
+ ]
30384
+ },
30385
+ "href": {
30386
+ "types": [
30387
+ "string"
30388
+ ]
30389
+ }
30390
+ },
30391
+ "required": [
30392
+ "label",
30393
+ "href"
30394
+ ]
30395
+ }
30396
+ }
30397
+ },
30398
+ "required": [
30399
+ "title",
30400
+ "items"
30401
+ ]
30402
+ }
30403
+ },
30404
+ "copyright": {
30405
+ "types": [
30406
+ "string"
30407
+ ],
30408
+ "description": "copyright prop"
30409
+ },
30410
+ "logo": {
30411
+ "types": [
30412
+ "object"
30413
+ ],
30414
+ "description": "logo prop"
30415
+ },
30416
+ "className": {
30417
+ "types": [
30418
+ "string"
30419
+ ],
30420
+ "description": "className prop"
30421
+ }
30422
+ }
30423
+ },
30344
30424
  "heading": {
30345
30425
  "type": "heading",
30346
30426
  "category": "component",
30347
- "description": "Alias for typography \u2014 Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
30427
+ "description": "Alias for typography Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
30348
30428
  "suggestedFor": [
30349
30429
  "typography"
30350
30430
  ],
@@ -30498,7 +30578,7 @@
30498
30578
  "text": {
30499
30579
  "type": "text",
30500
30580
  "category": "component",
30501
- "description": "Alias for typography \u2014 Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
30581
+ "description": "Alias for typography Typography Atom Component Text elements following the KFlow design system with theme-aware styling.",
30502
30582
  "suggestedFor": [
30503
30583
  "typography"
30504
30584
  ],
@@ -30648,44 +30728,6 @@
30648
30728
  "description": "Children elements"
30649
30729
  }
30650
30730
  }
30651
- },
30652
- "marketing-footer": {
30653
- "type": "marketing-footer",
30654
- "category": "navigation",
30655
- "description": "Marketing footer with link columns, logo, and copyright",
30656
- "suggestedFor": [
30657
- "marketing sites",
30658
- "landing pages",
30659
- "product websites"
30660
- ],
30661
- "typicalSize": "large",
30662
- "propsSchema": {
30663
- "columns": {
30664
- "types": [
30665
- "array"
30666
- ],
30667
- "description": "Array of footer link column groups"
30668
- },
30669
- "copyright": {
30670
- "types": [
30671
- "string"
30672
- ],
30673
- "description": "Copyright text"
30674
- },
30675
- "logo": {
30676
- "types": [
30677
- "object",
30678
- "string"
30679
- ],
30680
- "description": "Logo configuration"
30681
- },
30682
- "className": {
30683
- "types": [
30684
- "string"
30685
- ],
30686
- "description": "Additional CSS classes"
30687
- }
30688
- }
30689
30731
  }
30690
30732
  },
30691
30733
  "categories": [
@@ -30706,4 +30748,4 @@
30706
30748
  "visualization",
30707
30749
  "media"
30708
30750
  ]
30709
- }
30751
+ }