@almadar/core 10.28.0 → 10.30.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "exportedAt": "2026-07-09T14:00:32.936Z",
3
+ "exportedAt": "2026-07-16T19:33:37.203Z",
4
4
  "patterns": {
5
5
  "entity-table": {
6
6
  "type": "entity-table",
@@ -705,7 +705,7 @@
705
705
  "types": [
706
706
  "function"
707
707
  ],
708
- "description": "renderItem prop",
708
+ "description": "Render function for each item. In .lolo: renderItem: (fn item <Component …={@item.field}/>), binding per-item fields via @item.field.",
709
709
  "kind": "callback",
710
710
  "callbackArgs": [
711
711
  {
@@ -875,15 +875,6 @@
875
875
  ],
876
876
  "typicalSize": "medium",
877
877
  "propsSchema": {
878
- "entity": {
879
- "types": [
880
- "object",
881
- "array"
882
- ],
883
- "description": "Entity record or array of records — pre-resolved by the trait via render-ui after a fetch emit",
884
- "kind": "entity",
885
- "cardinality": "collection"
886
- },
887
878
  "className": {
888
879
  "types": [
889
880
  "string"
@@ -987,6 +978,15 @@
987
978
  ]
988
979
  }
989
980
  },
981
+ "entity": {
982
+ "types": [
983
+ "object",
984
+ "array"
985
+ ],
986
+ "description": "Entity data (single record or collection).",
987
+ "kind": "entity",
988
+ "cardinality": "collection"
989
+ },
990
990
  "minCardWidth": {
991
991
  "types": [
992
992
  "number"
@@ -4222,7 +4222,7 @@
4222
4222
  "types": [
4223
4223
  "string"
4224
4224
  ],
4225
- "description": "Declarative step click event — emits UI:{stepClickEvent} with { stepIndex }",
4225
+ "description": "Declarative step click event — emits UI:{stepClickEvent} with { stepIndex }. Setting it requires declaring that event (with a `{ stepIndex }` payload) and a transition handling it in the same trait; omit this prop for non-clickable progress indicators.",
4226
4226
  "kind": "event-ref",
4227
4227
  "emitPayloadSchema": [
4228
4228
  {
@@ -7671,7 +7671,7 @@
7671
7671
  "types": [
7672
7672
  "string"
7673
7673
  ],
7674
- "description": "Input type - supports 'select' and 'textarea' in addition to standard types",
7674
+ "description": "Input type selects the field's data mode. Use 'password' for masked credentials / secret / passphrase entry (there is no separate password pattern); 'email', 'tel', 'url', 'number', 'search', 'date', and 'time' for their respective values; and 'select' / 'textarea' for choice and multi-line entry in addition to the standard single-line types.",
7675
7675
  "enumValues": [
7676
7676
  "text",
7677
7677
  "email",
@@ -8949,7 +8949,7 @@
8949
8949
  "types": [
8950
8950
  "function"
8951
8951
  ],
8952
- "description": "Render function for each item",
8952
+ "description": "Render function for each item. In .lolo: renderItem: (fn item <Component …={@item.field}/>), binding per-item fields via @item.field.",
8953
8953
  "required": true,
8954
8954
  "kind": "callback",
8955
8955
  "callbackArgs": [
@@ -10349,6 +10349,144 @@
10349
10349
  ],
10350
10350
  "typicalSize": "medium",
10351
10351
  "propsSchema": {
10352
+ "className": {
10353
+ "types": [
10354
+ "string"
10355
+ ],
10356
+ "description": "Additional CSS classes"
10357
+ },
10358
+ "placeholder": {
10359
+ "types": [
10360
+ "string"
10361
+ ],
10362
+ "description": "Placeholder text"
10363
+ },
10364
+ "value": {
10365
+ "types": [
10366
+ "string",
10367
+ "number"
10368
+ ],
10369
+ "description": "Current value"
10370
+ },
10371
+ "disabled": {
10372
+ "types": [
10373
+ "boolean"
10374
+ ],
10375
+ "description": "Whether input is disabled"
10376
+ },
10377
+ "action": {
10378
+ "types": [
10379
+ "string"
10380
+ ],
10381
+ "description": "Declarative event name for trait dispatch",
10382
+ "kind": "event"
10383
+ },
10384
+ "inputType": {
10385
+ "types": [
10386
+ "string"
10387
+ ],
10388
+ "description": "Input type — selects the field's data mode. Use 'password' for masked credentials / secret / passphrase entry (there is no separate password pattern); 'email', 'tel', 'url', 'number', 'search', 'date', and 'time' for their respective values; and 'select' / 'textarea' for choice and multi-line entry in addition to the standard single-line types.",
10389
+ "enumValues": [
10390
+ "text",
10391
+ "email",
10392
+ "password",
10393
+ "number",
10394
+ "tel",
10395
+ "url",
10396
+ "search",
10397
+ "date",
10398
+ "datetime-local",
10399
+ "time",
10400
+ "checkbox",
10401
+ "select",
10402
+ "textarea"
10403
+ ]
10404
+ },
10405
+ "label": {
10406
+ "types": [
10407
+ "string"
10408
+ ],
10409
+ "description": "label prop"
10410
+ },
10411
+ "helperText": {
10412
+ "types": [
10413
+ "string"
10414
+ ],
10415
+ "description": "helperText prop"
10416
+ },
10417
+ "error": {
10418
+ "types": [
10419
+ "string"
10420
+ ],
10421
+ "description": "error prop"
10422
+ },
10423
+ "leftIcon": {
10424
+ "types": [
10425
+ "icon",
10426
+ "string"
10427
+ ],
10428
+ "description": "leftIcon prop"
10429
+ },
10430
+ "rightIcon": {
10431
+ "types": [
10432
+ "icon",
10433
+ "string"
10434
+ ],
10435
+ "description": "rightIcon prop"
10436
+ },
10437
+ "clearable": {
10438
+ "types": [
10439
+ "boolean"
10440
+ ],
10441
+ "description": "Show clear button when input has value"
10442
+ },
10443
+ "onClear": {
10444
+ "types": [
10445
+ "function",
10446
+ "string"
10447
+ ],
10448
+ "description": "Callback or declarative event key when clear button is clicked"
10449
+ },
10450
+ "options": {
10451
+ "types": [
10452
+ "array"
10453
+ ],
10454
+ "description": "Options for select type",
10455
+ "items": {
10456
+ "types": [
10457
+ "object"
10458
+ ],
10459
+ "properties": {
10460
+ "value": {
10461
+ "types": [
10462
+ "string"
10463
+ ]
10464
+ },
10465
+ "label": {
10466
+ "types": [
10467
+ "string"
10468
+ ]
10469
+ }
10470
+ },
10471
+ "required": [
10472
+ "value",
10473
+ "label"
10474
+ ]
10475
+ }
10476
+ },
10477
+ "rows": {
10478
+ "types": [
10479
+ "number"
10480
+ ],
10481
+ "description": "Rows for textarea type"
10482
+ },
10483
+ "onChange": {
10484
+ "types": [
10485
+ "function",
10486
+ "string"
10487
+ ],
10488
+ "description": "onChange handler or declarative event key for trait dispatch"
10489
+ },
10352
10490
  "leftAddon": {
10353
10491
  "types": [
10354
10492
  "node",
@@ -10362,12 +10500,6 @@
10362
10500
  "icon"
10363
10501
  ],
10364
10502
  "description": "Right addon (icon, button, or text)"
10365
- },
10366
- "className": {
10367
- "types": [
10368
- "string"
10369
- ],
10370
- "description": "Additional CSS classes"
10371
10503
  }
10372
10504
  }
10373
10505
  },
@@ -14356,6 +14488,11 @@
14356
14488
  "number"
14357
14489
  ]
14358
14490
  },
14491
+ "badge": {
14492
+ "types": [
14493
+ "number"
14494
+ ]
14495
+ },
14359
14496
  "x": {
14360
14497
  "types": [
14361
14498
  "number"
@@ -14376,7 +14513,7 @@
14376
14513
  "types": [
14377
14514
  "array"
14378
14515
  ],
14379
- "description": "Graph edges",
14516
+ "description": "Graph edges (the only rendered links)",
14380
14517
  "items": {
14381
14518
  "types": [
14382
14519
  "object"
@@ -14414,6 +14551,39 @@
14414
14551
  ]
14415
14552
  }
14416
14553
  },
14554
+ "similarity": {
14555
+ "types": [
14556
+ "array"
14557
+ ],
14558
+ "description": "All-pairs similarity (cosine 0–1) used ONLY for layout, never drawn. It is the secondary macro-layout: non-connected pairs get a weak spring (higher cosine ⇒ closer) so clusters arrange relative to each other; drawn `edges` stay the primary tight structure. When omitted, edges alone drive the layout.",
14559
+ "items": {
14560
+ "types": [
14561
+ "object"
14562
+ ],
14563
+ "properties": {
14564
+ "source": {
14565
+ "types": [
14566
+ "string"
14567
+ ]
14568
+ },
14569
+ "target": {
14570
+ "types": [
14571
+ "string"
14572
+ ]
14573
+ },
14574
+ "weight": {
14575
+ "types": [
14576
+ "number"
14577
+ ]
14578
+ }
14579
+ },
14580
+ "required": [
14581
+ "source",
14582
+ "target",
14583
+ "weight"
14584
+ ]
14585
+ }
14586
+ },
14417
14587
  "height": {
14418
14588
  "types": [
14419
14589
  "number"
@@ -14523,6 +14693,11 @@
14523
14693
  "number"
14524
14694
  ]
14525
14695
  },
14696
+ "badge": {
14697
+ "types": [
14698
+ "number"
14699
+ ]
14700
+ },
14526
14701
  "x": {
14527
14702
  "types": [
14528
14703
  "number"
@@ -14581,6 +14756,74 @@
14581
14756
  "number"
14582
14757
  ]
14583
14758
  },
14759
+ "badge": {
14760
+ "types": [
14761
+ "number"
14762
+ ]
14763
+ },
14764
+ "x": {
14765
+ "types": [
14766
+ "number"
14767
+ ]
14768
+ },
14769
+ "y": {
14770
+ "types": [
14771
+ "number"
14772
+ ]
14773
+ }
14774
+ },
14775
+ "required": [
14776
+ "id"
14777
+ ]
14778
+ }
14779
+ }
14780
+ ]
14781
+ },
14782
+ "onBadgeClick": {
14783
+ "types": [
14784
+ "function"
14785
+ ],
14786
+ "description": "On node badge click (e.g. to expand a merged cluster).",
14787
+ "kind": "callback",
14788
+ "callbackArgs": [
14789
+ {
14790
+ "name": "node",
14791
+ "type": "object",
14792
+ "schema": {
14793
+ "types": [
14794
+ "object"
14795
+ ],
14796
+ "properties": {
14797
+ "id": {
14798
+ "types": [
14799
+ "string"
14800
+ ]
14801
+ },
14802
+ "label": {
14803
+ "types": [
14804
+ "string"
14805
+ ]
14806
+ },
14807
+ "group": {
14808
+ "types": [
14809
+ "string"
14810
+ ]
14811
+ },
14812
+ "color": {
14813
+ "types": [
14814
+ "string"
14815
+ ]
14816
+ },
14817
+ "size": {
14818
+ "types": [
14819
+ "number"
14820
+ ]
14821
+ },
14822
+ "badge": {
14823
+ "types": [
14824
+ "number"
14825
+ ]
14826
+ },
14584
14827
  "x": {
14585
14828
  "types": [
14586
14829
  "number"
@@ -16596,7 +16839,7 @@
16596
16839
  "types": [
16597
16840
  "array"
16598
16841
  ],
16599
- "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.",
16842
+ "description": "Field definitions for rendering each card. The pattern contract in `@almadar/core/patterns` documents `columns` as the wire-format alias the compiler emits — both names resolve to the same shape here. Pass either.",
16600
16843
  "items": {
16601
16844
  "types": [
16602
16845
  "object"
@@ -16928,7 +17171,7 @@
16928
17171
  "types": [
16929
17172
  "function"
16930
17173
  ],
16931
- "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.",
17174
+ "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 …={@item.field}/>), binding per-item fields via @item.field.",
16932
17175
  "kind": "callback",
16933
17176
  "callbackArgs": [
16934
17177
  {
@@ -17041,7 +17284,7 @@
17041
17284
  "types": [
17042
17285
  "array"
17043
17286
  ],
17044
- "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.",
17287
+ "description": "Field definitions for rendering each row. The pattern contract in `@almadar/core/patterns` documents `columns` as the wire-format alias the compiler emits — both names resolve to the same shape here. Pass either.",
17045
17288
  "items": {
17046
17289
  "types": [
17047
17290
  "object"
@@ -17445,7 +17688,7 @@
17445
17688
  "types": [
17446
17689
  "function"
17447
17690
  ],
17448
- "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.",
17691
+ "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 …={@item.field}/>), binding per-item fields via @item.field.",
17449
17692
  "kind": "callback",
17450
17693
  "callbackArgs": [
17451
17694
  {
@@ -18475,6 +18718,12 @@
18475
18718
  ],
18476
18719
  "description": "Text to display after the number"
18477
18720
  },
18721
+ "format": {
18722
+ "types": [
18723
+ "string"
18724
+ ],
18725
+ "description": "Display format: \"number\" (locale grouping), \"currency\" ($x.xx), \"percent\" (rounded %). Unset preserves the value's own decimals."
18726
+ },
18478
18727
  "className": {
18479
18728
  "types": [
18480
18729
  "string"
@@ -18661,7 +18910,7 @@
18661
18910
  "types": [
18662
18911
  "function"
18663
18912
  ],
18664
- "description": "Render function for each slide",
18913
+ "description": "Render function for each slide. In .lolo: renderItem: (fn item <Component …={@item.field}/>), binding per-item fields via @item.field.",
18665
18914
  "kind": "callback",
18666
18915
  "callbackArgs": [
18667
18916
  {
@@ -18834,7 +19083,7 @@
18834
19083
  "types": [
18835
19084
  "function"
18836
19085
  ],
18837
- "description": "renderItem prop",
19086
+ "description": "Render function for each item. In .lolo: renderItem: (fn item <Component …={@item.field}/>), binding per-item fields via @item.field.",
18838
19087
  "required": true,
18839
19088
  "kind": "callback",
18840
19089
  "callbackArgs": [
@@ -32856,7 +33105,7 @@
32856
33105
  "types": [
32857
33106
  "function"
32858
33107
  ],
32859
- "description": "Per-row render function (schema alias). In .orb: [\"fn\",\"item\",{...}]. The compiler converts this to the children render prop.",
33108
+ "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 …={@item.field}/>), binding per-item fields via @item.field.",
32860
33109
  "kind": "callback",
32861
33110
  "callbackArgs": [
32862
33111
  {
@@ -34892,7 +35141,159 @@
34892
35141
  "v stack"
34893
35142
  ],
34894
35143
  "typicalSize": "small",
34895
- "propsSchema": {}
35144
+ "propsSchema": {
35145
+ "gap": {
35146
+ "types": [
35147
+ "string"
35148
+ ],
35149
+ "description": "Gap between children",
35150
+ "enumValues": [
35151
+ "none",
35152
+ "xs",
35153
+ "sm",
35154
+ "md",
35155
+ "lg",
35156
+ "xl",
35157
+ "2xl"
35158
+ ],
35159
+ "default": "md"
35160
+ },
35161
+ "align": {
35162
+ "types": [
35163
+ "string"
35164
+ ],
35165
+ "description": "Align items on the cross axis",
35166
+ "enumValues": [
35167
+ "start",
35168
+ "center",
35169
+ "end",
35170
+ "stretch",
35171
+ "baseline"
35172
+ ],
35173
+ "default": "stretch"
35174
+ },
35175
+ "justify": {
35176
+ "types": [
35177
+ "string"
35178
+ ],
35179
+ "description": "Justify items on the main axis",
35180
+ "enumValues": [
35181
+ "start",
35182
+ "center",
35183
+ "end",
35184
+ "between",
35185
+ "around",
35186
+ "evenly"
35187
+ ],
35188
+ "default": "start"
35189
+ },
35190
+ "wrap": {
35191
+ "types": [
35192
+ "boolean"
35193
+ ],
35194
+ "description": "Allow items to wrap",
35195
+ "default": false
35196
+ },
35197
+ "reverse": {
35198
+ "types": [
35199
+ "boolean"
35200
+ ],
35201
+ "description": "Reverse the order of children",
35202
+ "default": false
35203
+ },
35204
+ "flex": {
35205
+ "types": [
35206
+ "boolean"
35207
+ ],
35208
+ "description": "Fill available space (flex: 1)",
35209
+ "default": false
35210
+ },
35211
+ "className": {
35212
+ "types": [
35213
+ "string"
35214
+ ],
35215
+ "description": "Custom class name"
35216
+ },
35217
+ "style": {
35218
+ "types": [
35219
+ "object"
35220
+ ],
35221
+ "description": "Inline styles"
35222
+ },
35223
+ "children": {
35224
+ "types": [
35225
+ "node"
35226
+ ],
35227
+ "description": "Children elements"
35228
+ },
35229
+ "as": {
35230
+ "types": [
35231
+ "component"
35232
+ ],
35233
+ "description": "HTML element to render as"
35234
+ },
35235
+ "onClick": {
35236
+ "types": [
35237
+ "function"
35238
+ ],
35239
+ "description": "Click handler",
35240
+ "kind": "callback",
35241
+ "callbackArgs": [
35242
+ {
35243
+ "name": "e",
35244
+ "type": "object"
35245
+ }
35246
+ ],
35247
+ "nonEmittable": true
35248
+ },
35249
+ "onKeyDown": {
35250
+ "types": [
35251
+ "function"
35252
+ ],
35253
+ "description": "Keyboard handler",
35254
+ "kind": "callback",
35255
+ "callbackArgs": [
35256
+ {
35257
+ "name": "e",
35258
+ "type": "object"
35259
+ }
35260
+ ],
35261
+ "nonEmittable": true
35262
+ },
35263
+ "role": {
35264
+ "types": [
35265
+ "string"
35266
+ ],
35267
+ "description": "Role for accessibility"
35268
+ },
35269
+ "tabIndex": {
35270
+ "types": [
35271
+ "number"
35272
+ ],
35273
+ "description": "Tab index for focus management"
35274
+ },
35275
+ "action": {
35276
+ "types": [
35277
+ "string"
35278
+ ],
35279
+ "description": "Declarative event name — emits UI:{action} via eventBus on click",
35280
+ "kind": "event"
35281
+ },
35282
+ "actionPayload": {
35283
+ "types": [
35284
+ "object"
35285
+ ],
35286
+ "description": "Payload to include with the action event",
35287
+ "freeform": true
35288
+ },
35289
+ "responsive": {
35290
+ "types": [
35291
+ "boolean"
35292
+ ],
35293
+ "description": "When true, horizontal stacks flip to vertical below the md breakpoint (768px)",
35294
+ "default": false
35295
+ }
35296
+ }
34896
35297
  },
34897
35298
  "hstack": {
34898
35299
  "type": "hstack",
@@ -34905,7 +35306,159 @@
34905
35306
  "h stack"
34906
35307
  ],
34907
35308
  "typicalSize": "small",
34908
- "propsSchema": {}
35309
+ "propsSchema": {
35310
+ "gap": {
35311
+ "types": [
35312
+ "string"
35313
+ ],
35314
+ "description": "Gap between children",
35315
+ "enumValues": [
35316
+ "none",
35317
+ "xs",
35318
+ "sm",
35319
+ "md",
35320
+ "lg",
35321
+ "xl",
35322
+ "2xl"
35323
+ ],
35324
+ "default": "md"
35325
+ },
35326
+ "align": {
35327
+ "types": [
35328
+ "string"
35329
+ ],
35330
+ "description": "Align items on the cross axis",
35331
+ "enumValues": [
35332
+ "start",
35333
+ "center",
35334
+ "end",
35335
+ "stretch",
35336
+ "baseline"
35337
+ ],
35338
+ "default": "stretch"
35339
+ },
35340
+ "justify": {
35341
+ "types": [
35342
+ "string"
35343
+ ],
35344
+ "description": "Justify items on the main axis",
35345
+ "enumValues": [
35346
+ "start",
35347
+ "center",
35348
+ "end",
35349
+ "between",
35350
+ "around",
35351
+ "evenly"
35352
+ ],
35353
+ "default": "start"
35354
+ },
35355
+ "wrap": {
35356
+ "types": [
35357
+ "boolean"
35358
+ ],
35359
+ "description": "Allow items to wrap",
35360
+ "default": false
35361
+ },
35362
+ "reverse": {
35363
+ "types": [
35364
+ "boolean"
35365
+ ],
35366
+ "description": "Reverse the order of children",
35367
+ "default": false
35368
+ },
35369
+ "flex": {
35370
+ "types": [
35371
+ "boolean"
35372
+ ],
35373
+ "description": "Fill available space (flex: 1)",
35374
+ "default": false
35375
+ },
35376
+ "className": {
35377
+ "types": [
35378
+ "string"
35379
+ ],
35380
+ "description": "Custom class name"
35381
+ },
35382
+ "style": {
35383
+ "types": [
35384
+ "object"
35385
+ ],
35386
+ "description": "Inline styles"
35387
+ },
35388
+ "children": {
35389
+ "types": [
35390
+ "node"
35391
+ ],
35392
+ "description": "Children elements"
35393
+ },
35394
+ "as": {
35395
+ "types": [
35396
+ "component"
35397
+ ],
35398
+ "description": "HTML element to render as"
35399
+ },
35400
+ "onClick": {
35401
+ "types": [
35402
+ "function"
35403
+ ],
35404
+ "description": "Click handler",
35405
+ "kind": "callback",
35406
+ "callbackArgs": [
35407
+ {
35408
+ "name": "e",
35409
+ "type": "object"
35410
+ }
35411
+ ],
35412
+ "nonEmittable": true
35413
+ },
35414
+ "onKeyDown": {
35415
+ "types": [
35416
+ "function"
35417
+ ],
35418
+ "description": "Keyboard handler",
35419
+ "kind": "callback",
35420
+ "callbackArgs": [
35421
+ {
35422
+ "name": "e",
35423
+ "type": "object"
35424
+ }
35425
+ ],
35426
+ "nonEmittable": true
35427
+ },
35428
+ "role": {
35429
+ "types": [
35430
+ "string"
35431
+ ],
35432
+ "description": "Role for accessibility"
35433
+ },
35434
+ "tabIndex": {
35435
+ "types": [
35436
+ "number"
35437
+ ],
35438
+ "description": "Tab index for focus management"
35439
+ },
35440
+ "action": {
35441
+ "types": [
35442
+ "string"
35443
+ ],
35444
+ "description": "Declarative event name — emits UI:{action} via eventBus on click",
35445
+ "kind": "event"
35446
+ },
35447
+ "actionPayload": {
35448
+ "types": [
35449
+ "object"
35450
+ ],
35451
+ "description": "Payload to include with the action event",
35452
+ "freeform": true
35453
+ },
35454
+ "responsive": {
35455
+ "types": [
35456
+ "boolean"
35457
+ ],
35458
+ "description": "When true, horizontal stacks flip to vertical below the md breakpoint (768px)",
35459
+ "default": false
35460
+ }
35461
+ }
34909
35462
  },
34910
35463
  "form-layout": {
34911
35464
  "type": "form-layout",
@@ -38158,31 +38711,31 @@
38158
38711
  "types": [
38159
38712
  "number"
38160
38713
  ],
38161
- "description": "Rect width in px."
38714
+ "description": "Rect width in world units (fractions of `projector.tileWidth`)."
38162
38715
  },
38163
38716
  "height": {
38164
38717
  "types": [
38165
38718
  "number"
38166
38719
  ],
38167
- "description": "Rect height in px."
38720
+ "description": "Rect height in world units (fractions of `projector.tileWidth`)."
38168
38721
  },
38169
38722
  "radiusX": {
38170
38723
  "types": [
38171
38724
  "number"
38172
38725
  ],
38173
- "description": "Ellipse horizontal radius in px."
38726
+ "description": "Ellipse horizontal radius in world units (fractions of `projector.tileWidth`)."
38174
38727
  },
38175
38728
  "radiusY": {
38176
38729
  "types": [
38177
38730
  "number"
38178
38731
  ],
38179
- "description": "Ellipse vertical radius in px; omitted → `radiusX` (a circle)."
38732
+ "description": "Ellipse vertical radius in world units; omitted → `radiusX` (a circle)."
38180
38733
  },
38181
38734
  "offsetX": {
38182
38735
  "types": [
38183
38736
  "number"
38184
38737
  ],
38185
- "description": "Fine px nudge from the anchor point (e.g. a disc drawn at `groundY - 8*scale`)."
38738
+ "description": "Fine nudge from the anchor point in world units."
38186
38739
  },
38187
38740
  "offsetY": {
38188
38741
  "types": [
@@ -38194,7 +38747,7 @@
38194
38747
  "types": [
38195
38748
  "array"
38196
38749
  ],
38197
- "description": "Poly vertices as px offsets relative to the cell's projected top-left.",
38750
+ "description": "Poly vertices as world-unit offsets relative to the cell's projected top-left.",
38198
38751
  "items": {
38199
38752
  "types": [
38200
38753
  "object"
@@ -38384,13 +38937,13 @@
38384
38937
  "types": [
38385
38938
  "number"
38386
38939
  ],
38387
- "description": "Draw width in px (2D) / world units (3D); omitted → resolved source width."
38940
+ "description": "Draw width in world units (fractions of `projector.tileWidth`); omitted → resolved source width in px."
38388
38941
  },
38389
38942
  "height": {
38390
38943
  "types": [
38391
38944
  "number"
38392
38945
  ],
38393
- "description": "Draw height in px (2D) / world units (3D); omitted → resolved source height."
38946
+ "description": "Draw height in world units (fractions of `projector.tileWidth`); omitted → resolved source height in px."
38394
38947
  },
38395
38948
  "frame": {
38396
38949
  "types": [
@@ -38398,6 +38951,12 @@
38398
38951
  ],
38399
38952
  "description": "Explicit atlas sub-rect override (px); omitted → resolved from `asset.atlas`/`asset.sprite`."
38400
38953
  },
38954
+ "animation": {
38955
+ "types": [
38956
+ "string"
38957
+ ],
38958
+ "description": "Named GLB animation clip to play (3D backend only; the 2D painter animates via `frame`). Matched case-insensitively against the model's clips."
38959
+ },
38401
38960
  "flipX": {
38402
38961
  "types": [
38403
38962
  "boolean"
@@ -38875,6 +39434,11 @@
38875
39434
  "object"
38876
39435
  ]
38877
39436
  },
39437
+ "animation": {
39438
+ "types": [
39439
+ "string"
39440
+ ]
39441
+ },
38878
39442
  "flipX": {
38879
39443
  "types": [
38880
39444
  "boolean"