@almadar/core 10.91.0 → 10.93.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.
Files changed (34) hide show
  1. package/dist/builders.d.ts +3 -3
  2. package/dist/builders.js +2 -1
  3. package/dist/builders.js.map +1 -1
  4. package/dist/{effect-Bt8vKHwd.d.ts → effect-BnSE0gKt.d.ts} +26 -3
  5. package/dist/{entityAccess-BdDX85rM.d.ts → entityAccess-DtWseAgf.d.ts} +1 -1
  6. package/dist/factory/index.d.ts +4 -4
  7. package/dist/factory/index.js +402 -38
  8. package/dist/factory/index.js.map +1 -1
  9. package/dist/factory-runtime/index.d.ts +3 -3
  10. package/dist/factory-runtime/index.js +6 -2
  11. package/dist/factory-runtime/index.js.map +1 -1
  12. package/dist/{index-rOBf1Oag.d.ts → index-CWArRU6P.d.ts} +19 -10
  13. package/dist/index.d.ts +11 -72
  14. package/dist/index.js +597 -141
  15. package/dist/index.js.map +1 -1
  16. package/dist/mock/index.d.ts +4 -4
  17. package/dist/patterns/component-mapping.json +6 -1
  18. package/dist/patterns/event-contracts.json +1 -1
  19. package/dist/patterns/index.d.ts +1243 -85
  20. package/dist/patterns/index.js +547 -42
  21. package/dist/patterns/index.js.map +1 -1
  22. package/dist/patterns/integrators-registry.json +136 -1
  23. package/dist/patterns/patterns-registry.json +403 -39
  24. package/dist/patterns/registry.json +403 -39
  25. package/dist/patterns/services-registry.json +136 -1
  26. package/dist/{schema-ovDTDQz9.d.ts → schema-DFmFFcLs.d.ts} +25 -25
  27. package/dist/state-machine/index.js +19 -4
  28. package/dist/state-machine/index.js.map +1 -1
  29. package/dist/{trait-C3e3btfn.d.ts → trait-DSMzclmJ.d.ts} +10 -1
  30. package/dist/types/index.d.ts +5 -5
  31. package/dist/types/index.js +31 -2
  32. package/dist/types/index.js.map +1 -1
  33. package/dist/{types-rh0naR6C.d.ts → types-DzkFdgNJ.d.ts} +2 -2
  34. package/package.json +1 -1
@@ -3,7 +3,7 @@ import { z } from 'zod';
3
3
  // src/patterns/patterns-registry.json
4
4
  var patterns_registry_default = {
5
5
  version: "1.0.0",
6
- exportedAt: "2026-09-12T07:27:39.835Z",
6
+ exportedAt: "2026-09-16T03:44:41.117Z",
7
7
  patterns: {
8
8
  "entity-table": {
9
9
  type: "entity-table",
@@ -12,6 +12,7 @@ var patterns_registry_default = {
12
12
  tier: "organisms",
13
13
  family: "core",
14
14
  description: "Data table with columns and sorting",
15
+ fieldsContract: "display",
15
16
  suggestedFor: [
16
17
  "data-dense views",
17
18
  "comparisons",
@@ -480,6 +481,48 @@ var patterns_registry_default = {
480
481
  "card-rows"
481
482
  ],
482
483
  default: "dense"
484
+ },
485
+ relationsData: {
486
+ types: [
487
+ "object"
488
+ ],
489
+ description: "Relation display data: { fieldName: [{value, label}] } \u2014 injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a column whose field is relation-typed. Same contract DetailPanel takes.",
490
+ mapValue: {
491
+ types: [
492
+ "array"
493
+ ],
494
+ items: {
495
+ types: [
496
+ "object"
497
+ ],
498
+ properties: {
499
+ value: {
500
+ types: [
501
+ "string"
502
+ ]
503
+ },
504
+ label: {
505
+ types: [
506
+ "string"
507
+ ]
508
+ },
509
+ description: {
510
+ types: [
511
+ "string"
512
+ ]
513
+ },
514
+ disabled: {
515
+ types: [
516
+ "boolean"
517
+ ]
518
+ }
519
+ },
520
+ required: [
521
+ "value",
522
+ "label"
523
+ ]
524
+ }
525
+ }
483
526
  }
484
527
  }
485
528
  },
@@ -710,7 +753,6 @@ var patterns_registry_default = {
710
753
  "function"
711
754
  ],
712
755
  description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
713
- kind: "callback",
714
756
  callbackArgs: [
715
757
  {
716
758
  name: "item",
@@ -8539,6 +8581,7 @@ var patterns_registry_default = {
8539
8581
  textarea: {
8540
8582
  type: "textarea",
8541
8583
  category: "component",
8584
+ sourceFile: "components/core/atoms/Textarea.tsx",
8542
8585
  tier: "atoms",
8543
8586
  family: "core",
8544
8587
  description: "Multi-line text input",
@@ -8571,7 +8614,7 @@ var patterns_registry_default = {
8571
8614
  types: [
8572
8615
  "string"
8573
8616
  ],
8574
- description: "Declarative event name for trait dispatch",
8617
+ description: "Declarative event: fires on \u2318/Ctrl+Enter with `{ value }`.",
8575
8618
  kind: "event"
8576
8619
  },
8577
8620
  error: {
@@ -9756,6 +9799,7 @@ var patterns_registry_default = {
9756
9799
  "repeatable-form-section": {
9757
9800
  type: "repeatable-form-section",
9758
9801
  category: "form",
9802
+ sourceFile: "components/core/molecules/RepeatableFormSection.tsx",
9759
9803
  tier: "molecules",
9760
9804
  family: "core",
9761
9805
  description: "RepeatableFormSection \u2014 a form section that repeats a fixed group of fields, letting the user add or remove entries.",
@@ -9819,7 +9863,6 @@ var patterns_registry_default = {
9819
9863
  ],
9820
9864
  description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
9821
9865
  required: true,
9822
- kind: "callback",
9823
9866
  callbackArgs: [
9824
9867
  {
9825
9868
  name: "item",
@@ -17415,6 +17458,7 @@ var patterns_registry_default = {
17415
17458
  "state-machine-view": {
17416
17459
  type: "state-machine-view",
17417
17460
  category: "display",
17461
+ sourceFile: "components/core/organisms/StateMachineView.tsx",
17418
17462
  tier: "organisms",
17419
17463
  family: "core",
17420
17464
  description: "StateMachineView component",
@@ -17482,7 +17526,6 @@ var patterns_registry_default = {
17482
17526
  "function"
17483
17527
  ],
17484
17528
  description: "Custom state node renderer \u2014 when provided, replaces the default circle nodes",
17485
- kind: "callback",
17486
17529
  callbackArgs: [
17487
17530
  {
17488
17531
  name: "state",
@@ -17866,6 +17909,7 @@ var patterns_registry_default = {
17866
17909
  "calendar-grid": {
17867
17910
  type: "calendar-grid",
17868
17911
  category: "display",
17912
+ sourceFile: "components/core/molecules/CalendarGrid.tsx",
17869
17913
  tier: "molecules",
17870
17914
  family: "core",
17871
17915
  description: "CalendarGrid component",
@@ -18003,7 +18047,8 @@ var patterns_registry_default = {
18003
18047
  "object"
18004
18048
  ],
18005
18049
  description: "Additional payload for long-press events",
18006
- payloadFor: "longPressEvent"
18050
+ payloadFor: "longPressEvent",
18051
+ eventPayloadBrand: true
18007
18052
  },
18008
18053
  swipeLeftEvent: {
18009
18054
  types: [
@@ -18065,7 +18110,6 @@ var patterns_registry_default = {
18065
18110
  "function"
18066
18111
  ],
18067
18112
  description: "Render function for one event chip's content. Receives the row and its index in the materialised events array. The grid keeps ownership of placement, colour and the click target; this replaces only what is drawn INSIDE the chip, so a host can show a time + instructor + badge stack instead of the default single label.",
18068
- kind: "callback",
18069
18113
  callbackArgs: [
18070
18114
  {
18071
18115
  name: "item",
@@ -18083,7 +18127,6 @@ var patterns_registry_default = {
18083
18127
  "function"
18084
18128
  ],
18085
18129
  description: 'Per-event render function (schema-level alias for the children render prop). In `.orb`: `["fn", "item", { pattern tree with @item.field bindings }]`. In `.lolo`: `renderItem: (fn item <Component \u2026={@item.field}/>)` \u2014 the same contract `data-list` / `data-grid` / `carousel` already use.',
18086
- kind: "callback",
18087
18130
  callbackArgs: [
18088
18131
  {
18089
18132
  name: "item",
@@ -18629,6 +18672,7 @@ var patterns_registry_default = {
18629
18672
  "progress-dots": {
18630
18673
  type: "progress-dots",
18631
18674
  category: "component",
18675
+ sourceFile: "components/core/molecules/ProgressDots.tsx",
18632
18676
  tier: "molecules",
18633
18677
  family: "core",
18634
18678
  description: "ProgressDots component",
@@ -18658,7 +18702,6 @@ var patterns_registry_default = {
18658
18702
  "function"
18659
18703
  ],
18660
18704
  description: "Custom state resolver per dot index",
18661
- kind: "callback",
18662
18705
  callbackArgs: [
18663
18706
  {
18664
18707
  name: "index",
@@ -18708,6 +18751,7 @@ var patterns_registry_default = {
18708
18751
  family: "core",
18709
18752
  description: "DataGrid \u2014 structured records grid rendering rows over configurable columns, with sort, select, and drag-reorder.",
18710
18753
  capabilities: "admin table, records grid, user list, CRUD list, manage-records view, spreadsheet-style data grid, sortable columns",
18754
+ fieldsContract: "display",
18711
18755
  suggestedFor: [
18712
18756
  "data",
18713
18757
  "grid",
@@ -19114,7 +19158,6 @@ var patterns_registry_default = {
19114
19158
  "function"
19115
19159
  ],
19116
19160
  description: "Render prop for custom per-card content. When provided, `fields` are ignored; `itemActions` render as a footer beneath the custom content.",
19117
- kind: "callback",
19118
19161
  callbackArgs: [
19119
19162
  {
19120
19163
  name: "item",
@@ -19132,7 +19175,6 @@ var patterns_registry_default = {
19132
19175
  "function"
19133
19176
  ],
19134
19177
  description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop. In .lolo, author the per-item renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
19135
- kind: "callback",
19136
19178
  callbackArgs: [
19137
19179
  {
19138
19180
  name: "item",
@@ -19165,6 +19207,48 @@ var patterns_registry_default = {
19165
19207
  "card-rows"
19166
19208
  ],
19167
19209
  default: "dense"
19210
+ },
19211
+ relationsData: {
19212
+ types: [
19213
+ "object"
19214
+ ],
19215
+ description: "Relation display data: { fieldName: [{value, label}] } \u2014 injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes.",
19216
+ mapValue: {
19217
+ types: [
19218
+ "array"
19219
+ ],
19220
+ items: {
19221
+ types: [
19222
+ "object"
19223
+ ],
19224
+ properties: {
19225
+ value: {
19226
+ types: [
19227
+ "string"
19228
+ ]
19229
+ },
19230
+ label: {
19231
+ types: [
19232
+ "string"
19233
+ ]
19234
+ },
19235
+ description: {
19236
+ types: [
19237
+ "string"
19238
+ ]
19239
+ },
19240
+ disabled: {
19241
+ types: [
19242
+ "boolean"
19243
+ ]
19244
+ }
19245
+ },
19246
+ required: [
19247
+ "value",
19248
+ "label"
19249
+ ]
19250
+ }
19251
+ }
19168
19252
  }
19169
19253
  }
19170
19254
  },
@@ -19175,6 +19259,7 @@ var patterns_registry_default = {
19175
19259
  tier: "molecules",
19176
19260
  family: "core",
19177
19261
  description: "DataList component",
19262
+ fieldsContract: "display",
19178
19263
  suggestedFor: [
19179
19264
  "data",
19180
19265
  "list",
@@ -19658,7 +19743,6 @@ var patterns_registry_default = {
19658
19743
  "function"
19659
19744
  ],
19660
19745
  description: "Render prop for custom per-item content. When provided, `fields` and `itemActions` are ignored.",
19661
- kind: "callback",
19662
19746
  callbackArgs: [
19663
19747
  {
19664
19748
  name: "item",
@@ -19676,7 +19760,6 @@ var patterns_registry_default = {
19676
19760
  "function"
19677
19761
  ],
19678
19762
  description: 'Per-item render function (schema-level alias for children render prop). In .orb schemas: ["fn", "item", { pattern tree with @item.field bindings }] The compiler converts this to the children render prop. In .lolo, author the per-item renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
19679
- kind: "callback",
19680
19763
  callbackArgs: [
19681
19764
  {
19682
19765
  name: "item",
@@ -19725,6 +19808,48 @@ var patterns_registry_default = {
19725
19808
  "card-rows"
19726
19809
  ],
19727
19810
  default: "dense"
19811
+ },
19812
+ relationsData: {
19813
+ types: [
19814
+ "object"
19815
+ ],
19816
+ description: "Relation display data: { fieldName: [{value, label}] } \u2014 injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a field whose type is relation. Same contract DetailPanel takes.",
19817
+ mapValue: {
19818
+ types: [
19819
+ "array"
19820
+ ],
19821
+ items: {
19822
+ types: [
19823
+ "object"
19824
+ ],
19825
+ properties: {
19826
+ value: {
19827
+ types: [
19828
+ "string"
19829
+ ]
19830
+ },
19831
+ label: {
19832
+ types: [
19833
+ "string"
19834
+ ]
19835
+ },
19836
+ description: {
19837
+ types: [
19838
+ "string"
19839
+ ]
19840
+ },
19841
+ disabled: {
19842
+ types: [
19843
+ "boolean"
19844
+ ]
19845
+ }
19846
+ },
19847
+ required: [
19848
+ "value",
19849
+ "label"
19850
+ ]
19851
+ }
19852
+ }
19728
19853
  }
19729
19854
  }
19730
19855
  },
@@ -20035,6 +20160,7 @@ var patterns_registry_default = {
20035
20160
  "range-slider": {
20036
20161
  type: "range-slider",
20037
20162
  category: "component",
20163
+ sourceFile: "components/core/atoms/RangeSlider.tsx",
20038
20164
  tier: "atoms",
20039
20165
  family: "core",
20040
20166
  description: "RangeSlider component",
@@ -20137,7 +20263,8 @@ var patterns_registry_default = {
20137
20263
  "object"
20138
20264
  ],
20139
20265
  description: "Payload to include with the action event",
20140
- payloadFor: "action"
20266
+ payloadFor: "action",
20267
+ eventPayloadBrand: true
20141
20268
  },
20142
20269
  onChange: {
20143
20270
  types: [
@@ -20157,7 +20284,6 @@ var patterns_registry_default = {
20157
20284
  "function"
20158
20285
  ],
20159
20286
  description: "Format function for tooltip display",
20160
- kind: "callback",
20161
20287
  callbackArgs: [
20162
20288
  {
20163
20289
  name: "value",
@@ -21007,7 +21133,6 @@ var patterns_registry_default = {
21007
21133
  "function"
21008
21134
  ],
21009
21135
  description: "Render function for each slide. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
21010
- kind: "callback",
21011
21136
  callbackArgs: [
21012
21137
  {
21013
21138
  name: "item",
@@ -21047,7 +21172,6 @@ var patterns_registry_default = {
21047
21172
  "function"
21048
21173
  ],
21049
21174
  description: "Children-as-function fallback for renderItem (compiler compatibility)",
21050
- kind: "callback",
21051
21175
  callbackArgs: [
21052
21176
  {
21053
21177
  name: "item",
@@ -21205,6 +21329,7 @@ var patterns_registry_default = {
21205
21329
  "sortable-list": {
21206
21330
  type: "sortable-list",
21207
21331
  category: "display",
21332
+ sourceFile: "components/core/molecules/SortableList.tsx",
21208
21333
  tier: "molecules",
21209
21334
  family: "core",
21210
21335
  description: "SortableList \u2014 a drag-and-drop reorderable list of items.",
@@ -21232,7 +21357,6 @@ var patterns_registry_default = {
21232
21357
  ],
21233
21358
  description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
21234
21359
  required: true,
21235
- kind: "callback",
21236
21360
  callbackArgs: [
21237
21361
  {
21238
21362
  name: "item",
@@ -21276,7 +21400,8 @@ var patterns_registry_default = {
21276
21400
  "object"
21277
21401
  ],
21278
21402
  description: "reorderPayload prop",
21279
- payloadFor: "reorderEvent"
21403
+ payloadFor: "reorderEvent",
21404
+ eventPayloadBrand: true
21280
21405
  },
21281
21406
  dragHandlePosition: {
21282
21407
  types: [
@@ -30760,6 +30885,7 @@ var patterns_registry_default = {
30760
30885
  "doc-search": {
30761
30886
  type: "doc-search",
30762
30887
  category: "filter",
30888
+ sourceFile: "components/core/molecules/DocSearch.tsx",
30763
30889
  tier: "molecules",
30764
30890
  family: "core",
30765
30891
  description: "DocSearch component",
@@ -30781,7 +30907,6 @@ var patterns_registry_default = {
30781
30907
  "function"
30782
30908
  ],
30783
30909
  description: "Callback invoked with the search query, returns results",
30784
- kind: "callback",
30785
30910
  callbackArgs: [
30786
30911
  {
30787
30912
  name: "query",
@@ -36970,6 +37095,7 @@ var patterns_registry_default = {
36970
37095
  family: "core",
36971
37096
  description: "TableView \u2014 sortable, selectable data table rendering rows over configurable columns, with inline row actions and grouping.",
36972
37097
  capabilities: "admin console table, records list, CRUD data table, user list, manage-users grid, sortable columns, row selection with bulk actions, grouped list view",
37098
+ fieldsContract: "display",
36973
37099
  suggestedFor: [
36974
37100
  "table",
36975
37101
  "view",
@@ -37426,7 +37552,6 @@ var patterns_registry_default = {
37426
37552
  "function"
37427
37553
  ],
37428
37554
  description: "Custom per-row render. When provided, the whole row content is delegated to this function (columns are ignored for the body; the header still renders). Mirrors DataList's children render prop.",
37429
- kind: "callback",
37430
37555
  callbackArgs: [
37431
37556
  {
37432
37557
  name: "item",
@@ -37444,7 +37569,6 @@ var patterns_registry_default = {
37444
37569
  "function"
37445
37570
  ],
37446
37571
  description: 'Per-row render function (schema alias). In .orb: ["fn","item",{...}]. The compiler converts this to the children render prop. In .lolo, author the per-row renderer as renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.',
37447
- kind: "callback",
37448
37572
  callbackArgs: [
37449
37573
  {
37450
37574
  name: "item",
@@ -37470,6 +37594,48 @@ var patterns_registry_default = {
37470
37594
  "bordered"
37471
37595
  ],
37472
37596
  default: "dense"
37597
+ },
37598
+ relationsData: {
37599
+ types: [
37600
+ "object"
37601
+ ],
37602
+ description: "Relation display data: { fieldName: [{value, label}] } \u2014 injected server-side by the runtime (relation-option injection) or bound by compiled codegen; resolves stored foreign ids to display names for a column whose field is relation-typed. Same contract DetailPanel takes.",
37603
+ mapValue: {
37604
+ types: [
37605
+ "array"
37606
+ ],
37607
+ items: {
37608
+ types: [
37609
+ "object"
37610
+ ],
37611
+ properties: {
37612
+ value: {
37613
+ types: [
37614
+ "string"
37615
+ ]
37616
+ },
37617
+ label: {
37618
+ types: [
37619
+ "string"
37620
+ ]
37621
+ },
37622
+ description: {
37623
+ types: [
37624
+ "string"
37625
+ ]
37626
+ },
37627
+ disabled: {
37628
+ types: [
37629
+ "boolean"
37630
+ ]
37631
+ }
37632
+ },
37633
+ required: [
37634
+ "value",
37635
+ "label"
37636
+ ]
37637
+ }
37638
+ }
37473
37639
  }
37474
37640
  }
37475
37641
  },
@@ -38051,6 +38217,7 @@ var patterns_registry_default = {
38051
38217
  "code-runner-panel": {
38052
38218
  type: "code-runner-panel",
38053
38219
  category: "display",
38220
+ sourceFile: "components/core/organisms/CodeRunnerPanel.tsx",
38054
38221
  tier: "organisms",
38055
38222
  family: "core",
38056
38223
  description: "CodeRunnerPanel component",
@@ -38088,7 +38255,6 @@ var patterns_registry_default = {
38088
38255
  "function"
38089
38256
  ],
38090
38257
  description: "Simulate executing the code. Omit to render a read-only block. Real execution is a separate future track \u2014 this callback supplies deterministic simulated output for UI feedback.",
38091
- kind: "callback",
38092
38258
  callbackArgs: [
38093
38259
  {
38094
38260
  name: "code",
@@ -38115,6 +38281,7 @@ var patterns_registry_default = {
38115
38281
  "segment-renderer": {
38116
38282
  type: "segment-renderer",
38117
38283
  category: "display",
38284
+ sourceFile: "components/core/organisms/SegmentRenderer.tsx",
38118
38285
  tier: "organisms",
38119
38286
  family: "core",
38120
38287
  description: "SegmentRenderer component",
@@ -38206,7 +38373,6 @@ var patterns_registry_default = {
38206
38373
  "function"
38207
38374
  ],
38208
38375
  description: "Simulate executing runnable code blocks. Omit to render runnable blocks as read-only. Real execution is a future track.",
38209
- kind: "callback",
38210
38376
  callbackArgs: [
38211
38377
  {
38212
38378
  name: "code",
@@ -38224,7 +38390,6 @@ var patterns_registry_default = {
38224
38390
  "function"
38225
38391
  ],
38226
38392
  description: "Optional render slot for `visualization` segment types. When not provided, visualization segments are silently skipped. Callers can wire this to any custom component or orbital generator.",
38227
- kind: "callback",
38228
38393
  callbackArgs: [
38229
38394
  {
38230
38395
  name: "type",
@@ -39022,22 +39187,26 @@ var patterns_registry_default = {
39022
39187
  types: [
39023
39188
  "object"
39024
39189
  ],
39025
- description: "Maps a keydown `e.code` \u2192 the board's SEMANTIC event (device-agnostic input).",
39190
+ description: "Maps a keydown `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event (device-agnostic input), emitted as `UI:{event}`; keystrokes inside inputs/textareas never route.",
39191
+ kind: "event-map",
39026
39192
  mapValue: {
39027
39193
  types: [
39028
39194
  "string"
39029
- ]
39195
+ ],
39196
+ kind: "event"
39030
39197
  }
39031
39198
  },
39032
39199
  keyUpMap: {
39033
39200
  types: [
39034
39201
  "object"
39035
39202
  ],
39036
- description: "Maps a keyup `e.code` \u2192 the board's SEMANTIC event.",
39203
+ description: "Maps a keyup `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event, emitted as `UI:{event}`; keystrokes inside inputs/textareas never route.",
39204
+ kind: "event-map",
39037
39205
  mapValue: {
39038
39206
  types: [
39039
39207
  "string"
39040
- ]
39208
+ ],
39209
+ kind: "event"
39041
39210
  }
39042
39211
  },
39043
39212
  editable: {
@@ -39498,10 +39667,12 @@ var patterns_registry_default = {
39498
39667
  "object"
39499
39668
  ],
39500
39669
  description: 'Per-direction PRESS \u2192 the board\'s SEMANTIC event (kind="dpad"), e.g. `{ left: "LEFT", right: "RIGHT", up: "JUMP" }`. Lets the d-pad emit the SAME intent events as the keyboard so the FSM stays device-agnostic.',
39670
+ kind: "event-map",
39501
39671
  mapValue: {
39502
39672
  types: [
39503
39673
  "string"
39504
- ]
39674
+ ],
39675
+ kind: "event"
39505
39676
  }
39506
39677
  },
39507
39678
  directionReleaseEvents: {
@@ -39509,10 +39680,12 @@ var patterns_registry_default = {
39509
39680
  "object"
39510
39681
  ],
39511
39682
  description: 'Per-direction RELEASE \u2192 semantic event, e.g. `{ left: "STOP", right: "STOP" }`. Omit a direction to ignore its release.',
39683
+ kind: "event-map",
39512
39684
  mapValue: {
39513
39685
  types: [
39514
39686
  "string"
39515
- ]
39687
+ ],
39688
+ kind: "event"
39516
39689
  }
39517
39690
  },
39518
39691
  directionAssets: {
@@ -43461,6 +43634,7 @@ var patterns_registry_default = {
43461
43634
  "math-canvas": {
43462
43635
  type: "math-canvas",
43463
43636
  category: "learning",
43637
+ sourceFile: "components/learning/molecules/MathCanvas.tsx",
43464
43638
  tier: "molecules",
43465
43639
  family: "learning",
43466
43640
  description: "MathCanvas component",
@@ -44491,22 +44665,26 @@ var patterns_registry_default = {
44491
44665
  types: [
44492
44666
  "object"
44493
44667
  ],
44494
- description: "Maps a keydown `e.code` \u2192 the board's SEMANTIC event (device-agnostic input), emitted as `UI:{event}` \u2014 same contract as the game canvas keyMap.",
44668
+ description: "Maps a keydown `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event (device-agnostic input), emitted as `UI:{event}` \u2014 same contract as the game canvas keyMap; keystrokes inside inputs/textareas never route.",
44669
+ kind: "event-map",
44495
44670
  mapValue: {
44496
44671
  types: [
44497
44672
  "string"
44498
- ]
44673
+ ],
44674
+ kind: "event"
44499
44675
  }
44500
44676
  },
44501
44677
  keyUpMap: {
44502
44678
  types: [
44503
44679
  "object"
44504
44680
  ],
44505
- description: "Maps a keyup `e.code` \u2192 the board's SEMANTIC event.",
44681
+ description: "Maps a keyup `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event, emitted as `UI:{event}`; keystrokes inside inputs/textareas never route.",
44682
+ kind: "event-map",
44506
44683
  mapValue: {
44507
44684
  types: [
44508
44685
  "string"
44509
- ]
44686
+ ],
44687
+ kind: "event"
44510
44688
  }
44511
44689
  },
44512
44690
  isLoading: {
@@ -50255,22 +50433,26 @@ var patterns_registry_default = {
50255
50433
  types: [
50256
50434
  "object"
50257
50435
  ],
50258
- description: "keyMap prop",
50436
+ description: "Maps a keydown `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event (device-agnostic input), emitted as `UI:{event}`; keystrokes inside inputs/textareas never route.",
50437
+ kind: "event-map",
50259
50438
  mapValue: {
50260
50439
  types: [
50261
50440
  "string"
50262
- ]
50441
+ ],
50442
+ kind: "event"
50263
50443
  }
50264
50444
  },
50265
50445
  keyUpMap: {
50266
50446
  types: [
50267
50447
  "object"
50268
50448
  ],
50269
- description: "keyUpMap prop",
50449
+ description: "Maps a keyup `e.code` \u2014 optionally prefixed `Mod+` (\u2318/Ctrl), `Shift+`, `Alt+` in that order \u2014 to the board's SEMANTIC event, emitted as `UI:{event}`; keystrokes inside inputs/textareas never route.",
50450
+ kind: "event-map",
50270
50451
  mapValue: {
50271
50452
  types: [
50272
50453
  "string"
50273
- ]
50454
+ ],
50455
+ kind: "event"
50274
50456
  }
50275
50457
  },
50276
50458
  editable: {
@@ -54335,6 +54517,188 @@ var patterns_registry_default = {
54335
54517
  }
54336
54518
  },
54337
54519
  drawable: true
54520
+ },
54521
+ gantt: {
54522
+ type: "gantt",
54523
+ category: "component",
54524
+ sourceFile: "components/core/molecules/Gantt.tsx",
54525
+ tier: "molecules",
54526
+ family: "core",
54527
+ description: "Gantt \u2014 view-only task schedule rendering rows as bars on a day axis.",
54528
+ capabilities: "gantt chart, project timeline, schedule view, task bars, dependency arrows, roadmap, milestone plan",
54529
+ fieldsContract: "display",
54530
+ suggestedFor: [
54531
+ "gantt"
54532
+ ],
54533
+ typicalSize: "medium",
54534
+ propsSchema: {
54535
+ tasks: {
54536
+ types: [
54537
+ "object",
54538
+ "array"
54539
+ ],
54540
+ description: 'Schema entity data \u2014 the task rows to place on the axis. pattern-sync tags it `kind:"entity", cardinality:"collection"` so consumers bind the domain entity without name-matching the prop.',
54541
+ kind: "entity",
54542
+ cardinality: "collection",
54543
+ default: []
54544
+ },
54545
+ links: {
54546
+ types: [
54547
+ "array"
54548
+ ],
54549
+ description: "Dependency arrows between task ids",
54550
+ items: {
54551
+ types: [
54552
+ "object"
54553
+ ],
54554
+ properties: {
54555
+ from: {
54556
+ types: [
54557
+ "string"
54558
+ ]
54559
+ },
54560
+ to: {
54561
+ types: [
54562
+ "string"
54563
+ ]
54564
+ }
54565
+ },
54566
+ required: [
54567
+ "from",
54568
+ "to"
54569
+ ]
54570
+ },
54571
+ default: []
54572
+ },
54573
+ titleField: {
54574
+ types: [
54575
+ "string"
54576
+ ],
54577
+ description: "Row field holding the bar label. Defaults to `title`.",
54578
+ default: "title"
54579
+ },
54580
+ startField: {
54581
+ types: [
54582
+ "string"
54583
+ ],
54584
+ description: "Row field holding the start timestamp (ISO or epoch). Defaults to `start`.",
54585
+ default: "start"
54586
+ },
54587
+ endField: {
54588
+ types: [
54589
+ "string"
54590
+ ],
54591
+ description: "Row field holding the end timestamp (ISO or epoch). Defaults to `end`. When absent, `durationField` (days) is used instead.",
54592
+ default: "end"
54593
+ },
54594
+ durationField: {
54595
+ types: [
54596
+ "string"
54597
+ ],
54598
+ description: "Row field holding the task length in days, used when the row has no end."
54599
+ },
54600
+ statusField: {
54601
+ types: [
54602
+ "string"
54603
+ ],
54604
+ description: "Row field holding the bar status (drives bar colour). Defaults to `status`.",
54605
+ default: "status"
54606
+ },
54607
+ groupField: {
54608
+ types: [
54609
+ "string"
54610
+ ],
54611
+ description: "Row field rows are grouped under header rows by. Empty (default) = flat list.",
54612
+ default: ""
54613
+ },
54614
+ rangeStart: {
54615
+ types: [
54616
+ "string",
54617
+ "date"
54618
+ ],
54619
+ description: "First visible day (ISO or Date). Defaults to 2 days before the earliest task."
54620
+ },
54621
+ rangeEnd: {
54622
+ types: [
54623
+ "string",
54624
+ "date"
54625
+ ],
54626
+ description: "Last visible day (ISO or Date). Defaults to 2 days after the latest task end."
54627
+ },
54628
+ showToday: {
54629
+ types: [
54630
+ "boolean"
54631
+ ],
54632
+ description: "Paint the today marker line when today falls inside the range (default true).",
54633
+ default: true
54634
+ },
54635
+ dayWidth: {
54636
+ types: [
54637
+ "number"
54638
+ ],
54639
+ description: "Pixels per day on the axis (default 28)",
54640
+ default: 28
54641
+ },
54642
+ barClickEvent: {
54643
+ types: [
54644
+ "string"
54645
+ ],
54646
+ description: "Event emitted when a bar is clicked: UI:{barClickEvent} with { id }",
54647
+ kind: "event-ref",
54648
+ emitPayloadSchema: [
54649
+ {
54650
+ name: "id",
54651
+ type: "string",
54652
+ required: true
54653
+ }
54654
+ ]
54655
+ },
54656
+ className: {
54657
+ types: [
54658
+ "string"
54659
+ ],
54660
+ description: "Additional CSS classes"
54661
+ },
54662
+ isLoading: {
54663
+ types: [
54664
+ "boolean"
54665
+ ],
54666
+ description: "Loading state",
54667
+ default: false
54668
+ },
54669
+ error: {
54670
+ types: [
54671
+ "object"
54672
+ ],
54673
+ description: "Error state",
54674
+ properties: {
54675
+ message: {
54676
+ types: [
54677
+ "string"
54678
+ ]
54679
+ },
54680
+ name: {
54681
+ types: [
54682
+ "string"
54683
+ ]
54684
+ },
54685
+ code: {
54686
+ types: [
54687
+ "string"
54688
+ ]
54689
+ },
54690
+ stack: {
54691
+ types: [
54692
+ "string"
54693
+ ]
54694
+ }
54695
+ },
54696
+ propertyRequired: [
54697
+ "message"
54698
+ ],
54699
+ default: null
54700
+ }
54701
+ }
54338
54702
  }
54339
54703
  },
54340
54704
  categories: [
@@ -54360,7 +54724,7 @@ var patterns_registry_default = {
54360
54724
  // src/patterns/integrators-registry.json
54361
54725
  var integrators_registry_default = {
54362
54726
  version: "1.0.0",
54363
- exportedAt: "2026-09-12T12:14:53.173Z",
54727
+ exportedAt: "2026-09-12T17:27:32.966Z",
54364
54728
  integrators: {
54365
54729
  github: {
54366
54730
  name: "github",
@@ -58148,6 +58512,141 @@ var integrators_registry_default = {
58148
58512
  }
58149
58513
  }
58150
58514
  },
58515
+ {
58516
+ name: "buildLayers",
58517
+ description: "Build per-part cutout layer images (name, box, z-order, pivot) from a source image and rig.",
58518
+ params: [
58519
+ {
58520
+ name: "imagePath",
58521
+ type: "string",
58522
+ required: true,
58523
+ description: "Path to the source image."
58524
+ },
58525
+ {
58526
+ name: "rig",
58527
+ type: "object",
58528
+ required: true,
58529
+ description: "The rig definition (parts, boxes, pivots, \u2026) as JSON."
58530
+ },
58531
+ {
58532
+ name: "outDir",
58533
+ type: "string",
58534
+ required: true,
58535
+ description: "Output directory for the layer images."
58536
+ }
58537
+ ],
58538
+ responseShape: {
58539
+ layers: {
58540
+ type: "array",
58541
+ items: {
58542
+ type: "object",
58543
+ properties: {
58544
+ name: {
58545
+ type: "string",
58546
+ required: true
58547
+ },
58548
+ path: {
58549
+ type: "string",
58550
+ required: true
58551
+ },
58552
+ x: {
58553
+ type: "number",
58554
+ required: true
58555
+ },
58556
+ y: {
58557
+ type: "number",
58558
+ required: true
58559
+ },
58560
+ w: {
58561
+ type: "number",
58562
+ required: true
58563
+ },
58564
+ h: {
58565
+ type: "number",
58566
+ required: true
58567
+ },
58568
+ z: {
58569
+ type: "number",
58570
+ required: true
58571
+ },
58572
+ pivot: {
58573
+ type: "[number, number]",
58574
+ required: true
58575
+ },
58576
+ isRest: {
58577
+ type: "boolean",
58578
+ required: true
58579
+ }
58580
+ }
58581
+ }
58582
+ }
58583
+ }
58584
+ },
58585
+ {
58586
+ name: "pose",
58587
+ description: "Sample a pose/animation preset into per-frame, per-part transforms for a rig.",
58588
+ params: [
58589
+ {
58590
+ name: "imagePath",
58591
+ type: "string",
58592
+ required: true,
58593
+ description: "Path to the source image."
58594
+ },
58595
+ {
58596
+ name: "rig",
58597
+ type: "object",
58598
+ required: true,
58599
+ description: "The rig definition (parts, boxes, pivots, \u2026) as JSON."
58600
+ },
58601
+ {
58602
+ name: "roles",
58603
+ type: "object",
58604
+ required: true,
58605
+ description: "Map of part name to preset bone role.",
58606
+ mapValue: {
58607
+ type: "string"
58608
+ }
58609
+ },
58610
+ {
58611
+ name: "preset",
58612
+ type: "string",
58613
+ required: false,
58614
+ description: "Animation preset name."
58615
+ },
58616
+ {
58617
+ name: "overrides",
58618
+ type: "object",
58619
+ required: false,
58620
+ description: "Per-part motion overrides applied over the preset."
58621
+ }
58622
+ ],
58623
+ responseShape: {
58624
+ fps: "number",
58625
+ frames: {
58626
+ type: "array",
58627
+ items: {
58628
+ type: "object",
58629
+ mapValue: {
58630
+ type: "object",
58631
+ properties: {
58632
+ angle: {
58633
+ type: "number",
58634
+ required: true
58635
+ },
58636
+ bx: {
58637
+ type: "number",
58638
+ required: true
58639
+ },
58640
+ by: {
58641
+ type: "number",
58642
+ required: true
58643
+ }
58644
+ }
58645
+ }
58646
+ }
58647
+ }
58648
+ }
58649
+ },
58151
58650
  {
58152
58651
  name: "generate",
58153
58652
  description: "Generate one image on the local image server (text-to-image, or a Kontext edit conditioned on `sourcePath`).",
@@ -58225,7 +58724,7 @@ var integrators_registry_default = {
58225
58724
  // src/patterns/component-mapping.json
58226
58725
  var component_mapping_default = {
58227
58726
  version: "1.0.0",
58228
- exportedAt: "2026-09-12T07:27:39.835Z",
58727
+ exportedAt: "2026-09-16T03:44:41.117Z",
58229
58728
  mappings: {
58230
58729
  "page-header": {
58231
58730
  component: "PageHeader",
@@ -59668,6 +60167,11 @@ var component_mapping_default = {
59668
60167
  component: "UISlotComponent",
59669
60168
  importPath: "@/components/core/organisms/UISlotRenderer",
59670
60169
  category: "layout"
60170
+ },
60171
+ gantt: {
60172
+ component: "Gantt",
60173
+ importPath: "@/components/core/molecules/Gantt",
60174
+ category: "component"
59671
60175
  }
59672
60176
  }
59673
60177
  };
@@ -59675,7 +60179,7 @@ var component_mapping_default = {
59675
60179
  // src/patterns/event-contracts.json
59676
60180
  var event_contracts_default = {
59677
60181
  version: "1.0.0",
59678
- exportedAt: "2026-09-12T07:27:39.835Z",
60182
+ exportedAt: "2026-09-16T03:44:41.117Z",
59679
60183
  contracts: {
59680
60184
  form: {
59681
60185
  emits: [
@@ -60982,6 +61486,7 @@ var PATTERN_TYPES = [
60982
61486
  "game-icon",
60983
61487
  "game-menu",
60984
61488
  "game-shell",
61489
+ "gantt",
60985
61490
  "generic-app-template",
60986
61491
  "geometric-pattern",
60987
61492
  "gradient-divider",