@almadar/core 10.91.0 → 10.92.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-DGa2ixo7.d.ts} +5 -1
  5. package/dist/{entityAccess-BdDX85rM.d.ts → entityAccess-CXennIKj.d.ts} +1 -1
  6. package/dist/factory/index.d.ts +4 -4
  7. package/dist/factory/index.js +212 -31
  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-BFortVj8.d.ts} +19 -10
  13. package/dist/index.d.ts +11 -72
  14. package/dist/index.js +401 -134
  15. package/dist/index.js.map +1 -1
  16. package/dist/mock/index.d.ts +4 -4
  17. package/dist/patterns/component-mapping.json +1 -1
  18. package/dist/patterns/event-contracts.json +1 -1
  19. package/dist/patterns/index.d.ts +791 -78
  20. package/dist/patterns/index.js +351 -35
  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 +213 -32
  24. package/dist/patterns/registry.json +213 -32
  25. package/dist/patterns/services-registry.json +136 -1
  26. package/dist/{schema-ovDTDQz9.d.ts → schema-DIL07Bmv.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-DHb48lyx.d.ts} +10 -1
  30. package/dist/types/index.d.ts +5 -5
  31. package/dist/types/index.js +30 -2
  32. package/dist/types/index.js.map +1 -1
  33. package/dist/{types-rh0naR6C.d.ts → types-F5EPwMor.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-12T18:14:02.248Z",
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",
@@ -9756,6 +9798,7 @@ var patterns_registry_default = {
9756
9798
  "repeatable-form-section": {
9757
9799
  type: "repeatable-form-section",
9758
9800
  category: "form",
9801
+ sourceFile: "components/core/molecules/RepeatableFormSection.tsx",
9759
9802
  tier: "molecules",
9760
9803
  family: "core",
9761
9804
  description: "RepeatableFormSection \u2014 a form section that repeats a fixed group of fields, letting the user add or remove entries.",
@@ -9819,7 +9862,6 @@ var patterns_registry_default = {
9819
9862
  ],
9820
9863
  description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
9821
9864
  required: true,
9822
- kind: "callback",
9823
9865
  callbackArgs: [
9824
9866
  {
9825
9867
  name: "item",
@@ -17415,6 +17457,7 @@ var patterns_registry_default = {
17415
17457
  "state-machine-view": {
17416
17458
  type: "state-machine-view",
17417
17459
  category: "display",
17460
+ sourceFile: "components/core/organisms/StateMachineView.tsx",
17418
17461
  tier: "organisms",
17419
17462
  family: "core",
17420
17463
  description: "StateMachineView component",
@@ -17482,7 +17525,6 @@ var patterns_registry_default = {
17482
17525
  "function"
17483
17526
  ],
17484
17527
  description: "Custom state node renderer \u2014 when provided, replaces the default circle nodes",
17485
- kind: "callback",
17486
17528
  callbackArgs: [
17487
17529
  {
17488
17530
  name: "state",
@@ -17866,6 +17908,7 @@ var patterns_registry_default = {
17866
17908
  "calendar-grid": {
17867
17909
  type: "calendar-grid",
17868
17910
  category: "display",
17911
+ sourceFile: "components/core/molecules/CalendarGrid.tsx",
17869
17912
  tier: "molecules",
17870
17913
  family: "core",
17871
17914
  description: "CalendarGrid component",
@@ -18003,7 +18046,8 @@ var patterns_registry_default = {
18003
18046
  "object"
18004
18047
  ],
18005
18048
  description: "Additional payload for long-press events",
18006
- payloadFor: "longPressEvent"
18049
+ payloadFor: "longPressEvent",
18050
+ eventPayloadBrand: true
18007
18051
  },
18008
18052
  swipeLeftEvent: {
18009
18053
  types: [
@@ -18065,7 +18109,6 @@ var patterns_registry_default = {
18065
18109
  "function"
18066
18110
  ],
18067
18111
  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
18112
  callbackArgs: [
18070
18113
  {
18071
18114
  name: "item",
@@ -18083,7 +18126,6 @@ var patterns_registry_default = {
18083
18126
  "function"
18084
18127
  ],
18085
18128
  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
18129
  callbackArgs: [
18088
18130
  {
18089
18131
  name: "item",
@@ -18629,6 +18671,7 @@ var patterns_registry_default = {
18629
18671
  "progress-dots": {
18630
18672
  type: "progress-dots",
18631
18673
  category: "component",
18674
+ sourceFile: "components/core/molecules/ProgressDots.tsx",
18632
18675
  tier: "molecules",
18633
18676
  family: "core",
18634
18677
  description: "ProgressDots component",
@@ -18658,7 +18701,6 @@ var patterns_registry_default = {
18658
18701
  "function"
18659
18702
  ],
18660
18703
  description: "Custom state resolver per dot index",
18661
- kind: "callback",
18662
18704
  callbackArgs: [
18663
18705
  {
18664
18706
  name: "index",
@@ -18708,6 +18750,7 @@ var patterns_registry_default = {
18708
18750
  family: "core",
18709
18751
  description: "DataGrid \u2014 structured records grid rendering rows over configurable columns, with sort, select, and drag-reorder.",
18710
18752
  capabilities: "admin table, records grid, user list, CRUD list, manage-records view, spreadsheet-style data grid, sortable columns",
18753
+ fieldsContract: "display",
18711
18754
  suggestedFor: [
18712
18755
  "data",
18713
18756
  "grid",
@@ -19114,7 +19157,6 @@ var patterns_registry_default = {
19114
19157
  "function"
19115
19158
  ],
19116
19159
  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
19160
  callbackArgs: [
19119
19161
  {
19120
19162
  name: "item",
@@ -19132,7 +19174,6 @@ var patterns_registry_default = {
19132
19174
  "function"
19133
19175
  ],
19134
19176
  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
19177
  callbackArgs: [
19137
19178
  {
19138
19179
  name: "item",
@@ -19165,6 +19206,48 @@ var patterns_registry_default = {
19165
19206
  "card-rows"
19166
19207
  ],
19167
19208
  default: "dense"
19209
+ },
19210
+ relationsData: {
19211
+ types: [
19212
+ "object"
19213
+ ],
19214
+ 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.",
19215
+ mapValue: {
19216
+ types: [
19217
+ "array"
19218
+ ],
19219
+ items: {
19220
+ types: [
19221
+ "object"
19222
+ ],
19223
+ properties: {
19224
+ value: {
19225
+ types: [
19226
+ "string"
19227
+ ]
19228
+ },
19229
+ label: {
19230
+ types: [
19231
+ "string"
19232
+ ]
19233
+ },
19234
+ description: {
19235
+ types: [
19236
+ "string"
19237
+ ]
19238
+ },
19239
+ disabled: {
19240
+ types: [
19241
+ "boolean"
19242
+ ]
19243
+ }
19244
+ },
19245
+ required: [
19246
+ "value",
19247
+ "label"
19248
+ ]
19249
+ }
19250
+ }
19168
19251
  }
19169
19252
  }
19170
19253
  },
@@ -19175,6 +19258,7 @@ var patterns_registry_default = {
19175
19258
  tier: "molecules",
19176
19259
  family: "core",
19177
19260
  description: "DataList component",
19261
+ fieldsContract: "display",
19178
19262
  suggestedFor: [
19179
19263
  "data",
19180
19264
  "list",
@@ -19658,7 +19742,6 @@ var patterns_registry_default = {
19658
19742
  "function"
19659
19743
  ],
19660
19744
  description: "Render prop for custom per-item content. When provided, `fields` and `itemActions` are ignored.",
19661
- kind: "callback",
19662
19745
  callbackArgs: [
19663
19746
  {
19664
19747
  name: "item",
@@ -19676,7 +19759,6 @@ var patterns_registry_default = {
19676
19759
  "function"
19677
19760
  ],
19678
19761
  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
19762
  callbackArgs: [
19681
19763
  {
19682
19764
  name: "item",
@@ -19725,6 +19807,48 @@ var patterns_registry_default = {
19725
19807
  "card-rows"
19726
19808
  ],
19727
19809
  default: "dense"
19810
+ },
19811
+ relationsData: {
19812
+ types: [
19813
+ "object"
19814
+ ],
19815
+ 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.",
19816
+ mapValue: {
19817
+ types: [
19818
+ "array"
19819
+ ],
19820
+ items: {
19821
+ types: [
19822
+ "object"
19823
+ ],
19824
+ properties: {
19825
+ value: {
19826
+ types: [
19827
+ "string"
19828
+ ]
19829
+ },
19830
+ label: {
19831
+ types: [
19832
+ "string"
19833
+ ]
19834
+ },
19835
+ description: {
19836
+ types: [
19837
+ "string"
19838
+ ]
19839
+ },
19840
+ disabled: {
19841
+ types: [
19842
+ "boolean"
19843
+ ]
19844
+ }
19845
+ },
19846
+ required: [
19847
+ "value",
19848
+ "label"
19849
+ ]
19850
+ }
19851
+ }
19728
19852
  }
19729
19853
  }
19730
19854
  },
@@ -20035,6 +20159,7 @@ var patterns_registry_default = {
20035
20159
  "range-slider": {
20036
20160
  type: "range-slider",
20037
20161
  category: "component",
20162
+ sourceFile: "components/core/atoms/RangeSlider.tsx",
20038
20163
  tier: "atoms",
20039
20164
  family: "core",
20040
20165
  description: "RangeSlider component",
@@ -20137,7 +20262,8 @@ var patterns_registry_default = {
20137
20262
  "object"
20138
20263
  ],
20139
20264
  description: "Payload to include with the action event",
20140
- payloadFor: "action"
20265
+ payloadFor: "action",
20266
+ eventPayloadBrand: true
20141
20267
  },
20142
20268
  onChange: {
20143
20269
  types: [
@@ -20157,7 +20283,6 @@ var patterns_registry_default = {
20157
20283
  "function"
20158
20284
  ],
20159
20285
  description: "Format function for tooltip display",
20160
- kind: "callback",
20161
20286
  callbackArgs: [
20162
20287
  {
20163
20288
  name: "value",
@@ -21007,7 +21132,6 @@ var patterns_registry_default = {
21007
21132
  "function"
21008
21133
  ],
21009
21134
  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
21135
  callbackArgs: [
21012
21136
  {
21013
21137
  name: "item",
@@ -21047,7 +21171,6 @@ var patterns_registry_default = {
21047
21171
  "function"
21048
21172
  ],
21049
21173
  description: "Children-as-function fallback for renderItem (compiler compatibility)",
21050
- kind: "callback",
21051
21174
  callbackArgs: [
21052
21175
  {
21053
21176
  name: "item",
@@ -21205,6 +21328,7 @@ var patterns_registry_default = {
21205
21328
  "sortable-list": {
21206
21329
  type: "sortable-list",
21207
21330
  category: "display",
21331
+ sourceFile: "components/core/molecules/SortableList.tsx",
21208
21332
  tier: "molecules",
21209
21333
  family: "core",
21210
21334
  description: "SortableList \u2014 a drag-and-drop reorderable list of items.",
@@ -21232,7 +21356,6 @@ var patterns_registry_default = {
21232
21356
  ],
21233
21357
  description: "Render function for each item. In .lolo: renderItem: (fn item <Component \u2026={@item.field}/>), binding per-item fields via @item.field.",
21234
21358
  required: true,
21235
- kind: "callback",
21236
21359
  callbackArgs: [
21237
21360
  {
21238
21361
  name: "item",
@@ -21276,7 +21399,8 @@ var patterns_registry_default = {
21276
21399
  "object"
21277
21400
  ],
21278
21401
  description: "reorderPayload prop",
21279
- payloadFor: "reorderEvent"
21402
+ payloadFor: "reorderEvent",
21403
+ eventPayloadBrand: true
21280
21404
  },
21281
21405
  dragHandlePosition: {
21282
21406
  types: [
@@ -30760,6 +30884,7 @@ var patterns_registry_default = {
30760
30884
  "doc-search": {
30761
30885
  type: "doc-search",
30762
30886
  category: "filter",
30887
+ sourceFile: "components/core/molecules/DocSearch.tsx",
30763
30888
  tier: "molecules",
30764
30889
  family: "core",
30765
30890
  description: "DocSearch component",
@@ -30781,7 +30906,6 @@ var patterns_registry_default = {
30781
30906
  "function"
30782
30907
  ],
30783
30908
  description: "Callback invoked with the search query, returns results",
30784
- kind: "callback",
30785
30909
  callbackArgs: [
30786
30910
  {
30787
30911
  name: "query",
@@ -36970,6 +37094,7 @@ var patterns_registry_default = {
36970
37094
  family: "core",
36971
37095
  description: "TableView \u2014 sortable, selectable data table rendering rows over configurable columns, with inline row actions and grouping.",
36972
37096
  capabilities: "admin console table, records list, CRUD data table, user list, manage-users grid, sortable columns, row selection with bulk actions, grouped list view",
37097
+ fieldsContract: "display",
36973
37098
  suggestedFor: [
36974
37099
  "table",
36975
37100
  "view",
@@ -37426,7 +37551,6 @@ var patterns_registry_default = {
37426
37551
  "function"
37427
37552
  ],
37428
37553
  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
37554
  callbackArgs: [
37431
37555
  {
37432
37556
  name: "item",
@@ -37444,7 +37568,6 @@ var patterns_registry_default = {
37444
37568
  "function"
37445
37569
  ],
37446
37570
  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
37571
  callbackArgs: [
37449
37572
  {
37450
37573
  name: "item",
@@ -37470,6 +37593,48 @@ var patterns_registry_default = {
37470
37593
  "bordered"
37471
37594
  ],
37472
37595
  default: "dense"
37596
+ },
37597
+ relationsData: {
37598
+ types: [
37599
+ "object"
37600
+ ],
37601
+ 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.",
37602
+ mapValue: {
37603
+ types: [
37604
+ "array"
37605
+ ],
37606
+ items: {
37607
+ types: [
37608
+ "object"
37609
+ ],
37610
+ properties: {
37611
+ value: {
37612
+ types: [
37613
+ "string"
37614
+ ]
37615
+ },
37616
+ label: {
37617
+ types: [
37618
+ "string"
37619
+ ]
37620
+ },
37621
+ description: {
37622
+ types: [
37623
+ "string"
37624
+ ]
37625
+ },
37626
+ disabled: {
37627
+ types: [
37628
+ "boolean"
37629
+ ]
37630
+ }
37631
+ },
37632
+ required: [
37633
+ "value",
37634
+ "label"
37635
+ ]
37636
+ }
37637
+ }
37473
37638
  }
37474
37639
  }
37475
37640
  },
@@ -38051,6 +38216,7 @@ var patterns_registry_default = {
38051
38216
  "code-runner-panel": {
38052
38217
  type: "code-runner-panel",
38053
38218
  category: "display",
38219
+ sourceFile: "components/core/organisms/CodeRunnerPanel.tsx",
38054
38220
  tier: "organisms",
38055
38221
  family: "core",
38056
38222
  description: "CodeRunnerPanel component",
@@ -38088,7 +38254,6 @@ var patterns_registry_default = {
38088
38254
  "function"
38089
38255
  ],
38090
38256
  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
38257
  callbackArgs: [
38093
38258
  {
38094
38259
  name: "code",
@@ -38115,6 +38280,7 @@ var patterns_registry_default = {
38115
38280
  "segment-renderer": {
38116
38281
  type: "segment-renderer",
38117
38282
  category: "display",
38283
+ sourceFile: "components/core/organisms/SegmentRenderer.tsx",
38118
38284
  tier: "organisms",
38119
38285
  family: "core",
38120
38286
  description: "SegmentRenderer component",
@@ -38206,7 +38372,6 @@ var patterns_registry_default = {
38206
38372
  "function"
38207
38373
  ],
38208
38374
  description: "Simulate executing runnable code blocks. Omit to render runnable blocks as read-only. Real execution is a future track.",
38209
- kind: "callback",
38210
38375
  callbackArgs: [
38211
38376
  {
38212
38377
  name: "code",
@@ -38224,7 +38389,6 @@ var patterns_registry_default = {
38224
38389
  "function"
38225
38390
  ],
38226
38391
  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
38392
  callbackArgs: [
38229
38393
  {
38230
38394
  name: "type",
@@ -39023,10 +39187,12 @@ var patterns_registry_default = {
39023
39187
  "object"
39024
39188
  ],
39025
39189
  description: "Maps a keydown `e.code` \u2192 the board's SEMANTIC event (device-agnostic input).",
39190
+ kind: "event-map",
39026
39191
  mapValue: {
39027
39192
  types: [
39028
39193
  "string"
39029
- ]
39194
+ ],
39195
+ kind: "event"
39030
39196
  }
39031
39197
  },
39032
39198
  keyUpMap: {
@@ -39034,10 +39200,12 @@ var patterns_registry_default = {
39034
39200
  "object"
39035
39201
  ],
39036
39202
  description: "Maps a keyup `e.code` \u2192 the board's SEMANTIC event.",
39203
+ kind: "event-map",
39037
39204
  mapValue: {
39038
39205
  types: [
39039
39206
  "string"
39040
- ]
39207
+ ],
39208
+ kind: "event"
39041
39209
  }
39042
39210
  },
39043
39211
  editable: {
@@ -39498,10 +39666,12 @@ var patterns_registry_default = {
39498
39666
  "object"
39499
39667
  ],
39500
39668
  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.',
39669
+ kind: "event-map",
39501
39670
  mapValue: {
39502
39671
  types: [
39503
39672
  "string"
39504
- ]
39673
+ ],
39674
+ kind: "event"
39505
39675
  }
39506
39676
  },
39507
39677
  directionReleaseEvents: {
@@ -39509,10 +39679,12 @@ var patterns_registry_default = {
39509
39679
  "object"
39510
39680
  ],
39511
39681
  description: 'Per-direction RELEASE \u2192 semantic event, e.g. `{ left: "STOP", right: "STOP" }`. Omit a direction to ignore its release.',
39682
+ kind: "event-map",
39512
39683
  mapValue: {
39513
39684
  types: [
39514
39685
  "string"
39515
- ]
39686
+ ],
39687
+ kind: "event"
39516
39688
  }
39517
39689
  },
39518
39690
  directionAssets: {
@@ -43461,6 +43633,7 @@ var patterns_registry_default = {
43461
43633
  "math-canvas": {
43462
43634
  type: "math-canvas",
43463
43635
  category: "learning",
43636
+ sourceFile: "components/learning/molecules/MathCanvas.tsx",
43464
43637
  tier: "molecules",
43465
43638
  family: "learning",
43466
43639
  description: "MathCanvas component",
@@ -44492,10 +44665,12 @@ var patterns_registry_default = {
44492
44665
  "object"
44493
44666
  ],
44494
44667
  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
+ kind: "event-map",
44495
44669
  mapValue: {
44496
44670
  types: [
44497
44671
  "string"
44498
- ]
44672
+ ],
44673
+ kind: "event"
44499
44674
  }
44500
44675
  },
44501
44676
  keyUpMap: {
@@ -44503,10 +44678,12 @@ var patterns_registry_default = {
44503
44678
  "object"
44504
44679
  ],
44505
44680
  description: "Maps a keyup `e.code` \u2192 the board's SEMANTIC event.",
44681
+ kind: "event-map",
44506
44682
  mapValue: {
44507
44683
  types: [
44508
44684
  "string"
44509
- ]
44685
+ ],
44686
+ kind: "event"
44510
44687
  }
44511
44688
  },
44512
44689
  isLoading: {
@@ -50256,10 +50433,12 @@ var patterns_registry_default = {
50256
50433
  "object"
50257
50434
  ],
50258
50435
  description: "keyMap prop",
50436
+ kind: "event-map",
50259
50437
  mapValue: {
50260
50438
  types: [
50261
50439
  "string"
50262
- ]
50440
+ ],
50441
+ kind: "event"
50263
50442
  }
50264
50443
  },
50265
50444
  keyUpMap: {
@@ -50267,10 +50446,12 @@ var patterns_registry_default = {
50267
50446
  "object"
50268
50447
  ],
50269
50448
  description: "keyUpMap prop",
50449
+ kind: "event-map",
50270
50450
  mapValue: {
50271
50451
  types: [
50272
50452
  "string"
50273
- ]
50453
+ ],
50454
+ kind: "event"
50274
50455
  }
50275
50456
  },
50276
50457
  editable: {
@@ -54360,7 +54541,7 @@ var patterns_registry_default = {
54360
54541
  // src/patterns/integrators-registry.json
54361
54542
  var integrators_registry_default = {
54362
54543
  version: "1.0.0",
54363
- exportedAt: "2026-09-12T12:14:53.173Z",
54544
+ exportedAt: "2026-09-12T17:27:32.966Z",
54364
54545
  integrators: {
54365
54546
  github: {
54366
54547
  name: "github",
@@ -58148,6 +58329,141 @@ var integrators_registry_default = {
58148
58329
  }
58149
58330
  }
58150
58331
  },
58332
+ {
58333
+ name: "buildLayers",
58334
+ description: "Build per-part cutout layer images (name, box, z-order, pivot) from a source image and rig.",
58335
+ params: [
58336
+ {
58337
+ name: "imagePath",
58338
+ type: "string",
58339
+ required: true,
58340
+ description: "Path to the source image."
58341
+ },
58342
+ {
58343
+ name: "rig",
58344
+ type: "object",
58345
+ required: true,
58346
+ description: "The rig definition (parts, boxes, pivots, \u2026) as JSON."
58347
+ },
58348
+ {
58349
+ name: "outDir",
58350
+ type: "string",
58351
+ required: true,
58352
+ description: "Output directory for the layer images."
58353
+ }
58354
+ ],
58355
+ responseShape: {
58356
+ layers: {
58357
+ type: "array",
58358
+ items: {
58359
+ type: "object",
58360
+ properties: {
58361
+ name: {
58362
+ type: "string",
58363
+ required: true
58364
+ },
58365
+ path: {
58366
+ type: "string",
58367
+ required: true
58368
+ },
58369
+ x: {
58370
+ type: "number",
58371
+ required: true
58372
+ },
58373
+ y: {
58374
+ type: "number",
58375
+ required: true
58376
+ },
58377
+ w: {
58378
+ type: "number",
58379
+ required: true
58380
+ },
58381
+ h: {
58382
+ type: "number",
58383
+ required: true
58384
+ },
58385
+ z: {
58386
+ type: "number",
58387
+ required: true
58388
+ },
58389
+ pivot: {
58390
+ type: "[number, number]",
58391
+ required: true
58392
+ },
58393
+ isRest: {
58394
+ type: "boolean",
58395
+ required: true
58396
+ }
58397
+ }
58398
+ }
58399
+ }
58400
+ }
58401
+ },
58402
+ {
58403
+ name: "pose",
58404
+ description: "Sample a pose/animation preset into per-frame, per-part transforms for a rig.",
58405
+ params: [
58406
+ {
58407
+ name: "imagePath",
58408
+ type: "string",
58409
+ required: true,
58410
+ description: "Path to the source image."
58411
+ },
58412
+ {
58413
+ name: "rig",
58414
+ type: "object",
58415
+ required: true,
58416
+ description: "The rig definition (parts, boxes, pivots, \u2026) as JSON."
58417
+ },
58418
+ {
58419
+ name: "roles",
58420
+ type: "object",
58421
+ required: true,
58422
+ description: "Map of part name to preset bone role.",
58423
+ mapValue: {
58424
+ type: "string"
58425
+ }
58426
+ },
58427
+ {
58428
+ name: "preset",
58429
+ type: "string",
58430
+ required: false,
58431
+ description: "Animation preset name."
58432
+ },
58433
+ {
58434
+ name: "overrides",
58435
+ type: "object",
58436
+ required: false,
58437
+ description: "Per-part motion overrides applied over the preset."
58438
+ }
58439
+ ],
58440
+ responseShape: {
58441
+ fps: "number",
58442
+ frames: {
58443
+ type: "array",
58444
+ items: {
58445
+ type: "object",
58446
+ mapValue: {
58447
+ type: "object",
58448
+ properties: {
58449
+ angle: {
58450
+ type: "number",
58451
+ required: true
58452
+ },
58453
+ bx: {
58454
+ type: "number",
58455
+ required: true
58456
+ },
58457
+ by: {
58458
+ type: "number",
58459
+ required: true
58460
+ }
58461
+ }
58462
+ }
58463
+ }
58464
+ }
58465
+ }
58466
+ },
58151
58467
  {
58152
58468
  name: "generate",
58153
58469
  description: "Generate one image on the local image server (text-to-image, or a Kontext edit conditioned on `sourcePath`).",
@@ -58225,7 +58541,7 @@ var integrators_registry_default = {
58225
58541
  // src/patterns/component-mapping.json
58226
58542
  var component_mapping_default = {
58227
58543
  version: "1.0.0",
58228
- exportedAt: "2026-09-12T07:27:39.835Z",
58544
+ exportedAt: "2026-09-12T18:14:02.248Z",
58229
58545
  mappings: {
58230
58546
  "page-header": {
58231
58547
  component: "PageHeader",
@@ -59675,7 +59991,7 @@ var component_mapping_default = {
59675
59991
  // src/patterns/event-contracts.json
59676
59992
  var event_contracts_default = {
59677
59993
  version: "1.0.0",
59678
- exportedAt: "2026-09-12T07:27:39.835Z",
59994
+ exportedAt: "2026-09-12T18:14:02.248Z",
59679
59995
  contracts: {
59680
59996
  form: {
59681
59997
  emits: [