@almadar/std 16.148.0 → 16.149.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/behaviors/lolo/ui/core/atoms/std-app-search.lolo +1 -1
  2. package/behaviors/lolo/ui/core/atoms/std-billable-hour.lolo +86 -41
  3. package/behaviors/lolo/ui/core/atoms/std-board.lolo +29 -16
  4. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +187 -83
  5. package/behaviors/lolo/ui/core/atoms/std-dashboard-grid-embedded.lolo +8 -0
  6. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
  7. package/behaviors/lolo/ui/core/atoms/std-stats.lolo +14 -10
  8. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +1 -29
  9. package/behaviors/registry/factory-signatures.json +9 -13
  10. package/behaviors/registry/ui/core/atoms/std-app-search.orb +9 -1
  11. package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +242 -50
  12. package/behaviors/registry/ui/core/atoms/std-board.orb +86 -20
  13. package/behaviors/registry/ui/core/atoms/std-browse.orb +377 -119
  14. package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +41 -29
  15. package/behaviors/registry/ui/core/atoms/std-file-store.orb +0 -3
  16. package/behaviors/registry/ui/core/atoms/std-stats.orb +267 -238
  17. package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -38
  18. package/dist/behaviors/behaviors-embeddings.json +475 -475
  19. package/dist/behaviors/behaviors-registry.json +10 -12
  20. package/dist/behaviors/knob-embeddings.json +1 -1
  21. package/dist/behaviors/registry/factory-signatures.json +9 -13
  22. package/dist/behaviors/registry/ui/core/atoms/std-app-search.orb +9 -1
  23. package/dist/behaviors/registry/ui/core/atoms/std-billable-hour.orb +242 -50
  24. package/dist/behaviors/registry/ui/core/atoms/std-board.orb +86 -20
  25. package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +377 -119
  26. package/dist/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +41 -29
  27. package/dist/behaviors/registry/ui/core/atoms/std-file-store.orb +0 -3
  28. package/dist/behaviors/registry/ui/core/atoms/std-stats.orb +267 -238
  29. package/dist/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -38
  30. package/dist/behaviors-embeddings.json +475 -475
  31. package/dist/behaviors-registry.json +10 -12
  32. package/dist/knob-embeddings.json +1 -1
  33. package/dist/registry/factory-signatures.json +9 -13
  34. package/package.json +8 -1
@@ -29,6 +29,9 @@ orbital DashboardGridEmbeddedOrbital {
29
29
  state composing {
30
30
  INIT -> composing
31
31
  (render-ui main {
32
+ data-theme: @config.theme
33
+ type: box
34
+ children: [{
32
35
  children: [{
33
36
  align: center
34
37
  children: [{
@@ -54,6 +57,7 @@ orbital DashboardGridEmbeddedOrbital {
54
57
  direction: vertical
55
58
  gap: md
56
59
  type: stack
60
+ }]
57
61
  })
58
62
  }
59
63
 
@@ -138,6 +142,10 @@ orbital DashboardGridEmbeddedOrbital {
138
142
  @label "Tile min width"
139
143
  @description "Minimum pixel width per tile before the grid re-flows"
140
144
  @tier "presentation"
145
+ theme : string = ""
146
+ @label "Theme"
147
+ @description "Design-system skin applied to the embedded grid surface via data-theme (e.g. 'linear-clean-light'). Empty inherits the surrounding shell's theme. Needed because this atom renders without app-shell chrome, so no layout-level theme cascade reaches it."
148
+ @tier "presentation"
141
149
  }
142
150
  }
143
151
 
@@ -59,7 +59,7 @@ orbital StoredFileOrbital {
59
59
  direction: horizontal
60
60
  gap: sm
61
61
  type: stack
62
- }, { type: divider }, { tree: @config.tree, type: file-tree }, { type: divider }, {
62
+ }, { type: divider }, { tree: @config.tree, type: file-tree }, {
63
63
  entity: ?data
64
64
  fields: @config.fields
65
65
  gap: sm
@@ -33,7 +33,7 @@ orbital StatsItemOrbital {
33
33
  sparklineData: (object/get @metric sparklineData [])
34
34
  suffix: (object/get @metric suffix "")
35
35
  target: (object/get @metric target 0)
36
- trend: (object/get @metric trend 0)
36
+ trend: (object/get @metric trend)
37
37
  trendFormat: (object/get @metric trendFormat absolute)
38
38
  trendPolarity: (object/get @metric trendPolarity higher-is-better)
39
39
  value: (object/get @metric value 0)
@@ -62,7 +62,7 @@ orbital StatsItemOrbital {
62
62
  sparklineData: (object/get @metric sparklineData [])
63
63
  suffix: (object/get @metric suffix "")
64
64
  target: (object/get @metric target 0)
65
- trend: (if ["=", (object/get @metric aggregation count), variance] ["-", (array/sum (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")), (array/sum (array/filter ?data (object/get @metric baselineFilter true)) (object/get @metric field ""))] (object/get @metric trend 0))
65
+ trend: (if ["=", (object/get @metric aggregation count), variance] ["-", (array/sum (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")), (array/sum (array/filter ?data (object/get @metric baselineFilter true)) (object/get @metric field ""))] (object/get @metric trend))
66
66
  trendFormat: (object/get @metric trendFormat absolute)
67
67
  trendPolarity: (object/get @metric trendPolarity higher-is-better)
68
68
  value: (if ["=", (object/get @metric aggregation count), sum] (array/sum (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")) (if ["=", (object/get @metric aggregation count), avg] (array/avg (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")) (if ["=", (object/get @metric aggregation count), min] (array/min (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")) (if ["=", (object/get @metric aggregation count), max] (array/max (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")) (if ["=", (object/get @metric aggregation count), variance] (array/sum (array/filter ?data (object/get @metric filter true)) (object/get @metric field "")) (array/len (array/filter ?data (object/get @metric filter true))))))))
@@ -117,6 +117,10 @@ orbital StatsItemOrbital {
117
117
  @description "Heading shown above the stat-card grid"
118
118
  @synonyms "the section header text. user phrases: 'rename section to X' / 'title the KPIs X' / 'change section title to X' -> X"
119
119
  @tier "presentation"
120
+ theme : string = ""
121
+ @label "Theme"
122
+ @description "Data-theme skin applied to the stat body root — for chrome-less pages composed without an AppShell."
123
+ @tier "presentation"
120
124
  viewPattern : pattern = data-grid
121
125
  @label "Render pattern"
122
126
  @description "UI pattern used to arrange the stat cards"
@@ -130,7 +134,7 @@ orbital StatsItemOrbital {
130
134
  @label "Stats look"
131
135
  @description "Layer 3 body layout: default per-metric stat-card grid ('cards'), Stripe-dashboard KPI tile row ('kpi-tiles'), single oversize hero number ('hero-metric'), or chart-first sparkline tile grid ('sparkline-row')."
132
136
  @tier "presentation"
133
- bodyContent : render-ui = {
137
+ bodyContent : render-ui = { data-theme: @config.theme, type: box, children: [{
134
138
  entity: @entity.cards
135
139
  fields: []
136
140
  renderItem: (fn card {
@@ -152,11 +156,11 @@ orbital StatsItemOrbital {
152
156
  variant: @card.variant
153
157
  })
154
158
  type: @config.viewPattern
155
- }
159
+ }] }
156
160
  @label "Body content tree"
157
161
  @description "Render-ui SExpr rendered after metrics aggregate for statsLook='cards' — the canonical data-grid call mapping @entity.cards through stat-display. Other statsLook values render kpiTilesBodyContent / heroMetricBodyContent / sparklineRowBodyContent instead; all four share this trait's state machine, aggregation pipeline, and listens."
158
162
  @tier "internal"
159
- kpiTilesBodyContent : render-ui = {
163
+ kpiTilesBodyContent : render-ui = { data-theme: @config.theme, type: box, children: [{
160
164
  className: w-full
161
165
  entity: @entity.cards
162
166
  fields: []
@@ -228,11 +232,11 @@ orbital StatsItemOrbital {
228
232
  type: stack
229
233
  })
230
234
  type: data-grid
231
- }
235
+ }] }
232
236
  @label "KPI tiles body content tree"
233
237
  @description "Render-ui SExpr for statsLook='kpi-tiles' — Stripe-dashboard style tile grid: huge typography number, label, trend indicator, sparkline hint."
234
238
  @tier "internal"
235
- heroMetricBodyContent : render-ui = {
239
+ heroMetricBodyContent : render-ui = { data-theme: @config.theme, type: box, children: [{
236
240
  entity: @entity.cards
237
241
  fields: []
238
242
  gap: none
@@ -313,11 +317,11 @@ orbital StatsItemOrbital {
313
317
  type: stack
314
318
  })
315
319
  type: data-list
316
- }
320
+ }] }
317
321
  @label "Hero metric body content tree"
318
322
  @description "Render-ui SExpr for statsLook='hero-metric' — one elevated card, one oversize number, background sparkline."
319
323
  @tier "internal"
320
- sparklineRowBodyContent : render-ui = {
324
+ sparklineRowBodyContent : render-ui = { data-theme: @config.theme, type: box, children: [{
321
325
  className: w-full
322
326
  entity: @entity.cards
323
327
  fields: []
@@ -391,7 +395,7 @@ orbital StatsItemOrbital {
391
395
  type: stack
392
396
  })
393
397
  type: data-grid
394
- }
398
+ }] }
395
399
  @label "Sparkline row body content tree"
396
400
  @description "Render-ui SExpr for statsLook='sparkline-row' — chart-first tiles where the mini trend line is the visual centerpiece, label above, value+delta footer."
397
401
  @tier "internal"
@@ -56,34 +56,6 @@ orbital RevisionOrbital {
56
56
  gap: sm
57
57
  type: stack
58
58
  }, {
59
- children: [{
60
- icon: history
61
- label: "Total revisions"
62
- look: @config.statLook
63
- type: stat-display
64
- value: ?data.length
65
- }, {
66
- icon: users
67
- label: Authors
68
- look: @config.statLook
69
- type: stat-display
70
- value: "6"
71
- }, {
72
- icon: save
73
- label: "Saves this week"
74
- look: @config.statLook
75
- type: stat-display
76
- value: "14"
77
- }, {
78
- icon: rotate-ccw
79
- label: Rollbacks
80
- look: @config.statLook
81
- type: stat-display
82
- value: "2"
83
- }]
84
- cols: 4
85
- type: simple-grid
86
- }, { type: divider }, {
87
59
  cols: 1
88
60
  entity: ?data
89
61
  fields: [{
@@ -108,7 +80,7 @@ orbital RevisionOrbital {
108
80
  event: OPEN_REVISION
109
81
  icon: arrow-right
110
82
  label: Open
111
- variant: primary
83
+ variant: ghost
112
84
  }, {
113
85
  event: ROLLBACK
114
86
  icon: rotate-ccw
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedFromStdVersion": "16.146.0",
2
+ "generatedFromStdVersion": "16.148.0",
3
3
  "signatures": [
4
4
  {
5
5
  "organism": "learning-algorithms",
@@ -96383,17 +96383,16 @@
96383
96383
  "if",
96384
96384
  "@config.bodySearch",
96385
96385
  {
96386
- "align": "center",
96387
96386
  "children": [
96388
96387
  {
96389
- "className": "w-full max-w-2xl",
96388
+ "className": "w-full",
96390
96389
  "clearable": true,
96391
96390
  "event": "REFETCH_QUERY",
96392
96391
  "placeholder": "@config.searchPlaceholder",
96393
96392
  "type": "search-input"
96394
96393
  }
96395
96394
  ],
96396
- "className": "w-full max-w-2xl",
96395
+ "className": "w-full",
96397
96396
  "direction": "horizontal",
96398
96397
  "gap": "sm",
96399
96398
  "type": "stack"
@@ -96414,7 +96413,6 @@
96414
96413
  "type": "stack"
96415
96414
  }
96416
96415
  ],
96417
- "className": "p-card-md",
96418
96416
  "direction": "vertical",
96419
96417
  "gap": "sm",
96420
96418
  "type": "stack"
@@ -96563,7 +96561,7 @@
96563
96561
  "variant": "card"
96564
96562
  }
96565
96563
  ],
96566
- "className": "w-full p-card-md",
96564
+ "className": "w-full",
96567
96565
  "direction": "vertical",
96568
96566
  "gap": "lg",
96569
96567
  "type": "stack"
@@ -96794,7 +96792,7 @@
96794
96792
  "type": "data-grid"
96795
96793
  }
96796
96794
  ],
96797
- "className": "w-full px-card-md py-section",
96795
+ "className": "w-full",
96798
96796
  "direction": "vertical",
96799
96797
  "gap": "lg",
96800
96798
  "type": "stack"
@@ -97487,17 +97485,16 @@
97487
97485
  "if",
97488
97486
  "@config.bodySearch",
97489
97487
  {
97490
- "align": "center",
97491
97488
  "children": [
97492
97489
  {
97493
- "className": "w-full max-w-2xl",
97490
+ "className": "w-full",
97494
97491
  "clearable": true,
97495
97492
  "event": "REFETCH_QUERY",
97496
97493
  "placeholder": "@config.searchPlaceholder",
97497
97494
  "type": "search-input"
97498
97495
  }
97499
97496
  ],
97500
- "className": "w-full max-w-2xl",
97497
+ "className": "w-full",
97501
97498
  "direction": "horizontal",
97502
97499
  "gap": "sm",
97503
97500
  "type": "stack"
@@ -97518,7 +97515,6 @@
97518
97515
  "type": "stack"
97519
97516
  }
97520
97517
  ],
97521
- "className": "p-card-md",
97522
97518
  "direction": "vertical",
97523
97519
  "gap": "sm",
97524
97520
  "type": "stack"
@@ -97664,7 +97660,7 @@
97664
97660
  "variant": "card"
97665
97661
  }
97666
97662
  ],
97667
- "className": "w-full p-card-md",
97663
+ "className": "w-full",
97668
97664
  "direction": "vertical",
97669
97665
  "gap": "lg",
97670
97666
  "type": "stack"
@@ -97878,7 +97874,7 @@
97878
97874
  "type": "data-grid"
97879
97875
  }
97880
97876
  ],
97881
- "className": "w-full px-card-md py-section",
97877
+ "className": "w-full",
97882
97878
  "direction": "vertical",
97883
97879
  "gap": "lg",
97884
97880
  "type": "stack"
@@ -642,7 +642,15 @@
642
642
  },
643
643
  {
644
644
  "color": "muted",
645
- "content": "Matching “@entity.searchTerm”",
645
+ "content": [
646
+ "str/concat",
647
+ [
648
+ "str/concat",
649
+ "Matching “",
650
+ "@entity.searchTerm"
651
+ ],
652
+ "”"
653
+ ],
646
654
  "type": "typography",
647
655
  "variant": "caption"
648
656
  },
@@ -96,6 +96,14 @@
96
96
  "kind": "trait",
97
97
  "owner": "workspace",
98
98
  "renames": []
99
+ },
100
+ "trt_01KYGG0J813545ADJDSSED6T49": {
101
+ "bakedName": "DenseHoursTable",
102
+ "curName": "DenseHoursTable",
103
+ "id": "trt_01KYGG0J813545ADJDSSED6T49",
104
+ "kind": "trait",
105
+ "owner": "workspace",
106
+ "renames": []
99
107
  }
100
108
  },
101
109
  "schemaVersion": 1
@@ -208,9 +216,201 @@
208
216
  }
209
217
  ],
210
218
  "traits": [
219
+ {
220
+ "config": {
221
+ "columns": {
222
+ "default": "@config.columns",
223
+ "type": "unknown"
224
+ },
225
+ "emptyMessage": {
226
+ "default": "No time entries",
227
+ "type": "unknown"
228
+ },
229
+ "itemActions": {
230
+ "default": "@config.itemActions",
231
+ "type": "unknown"
232
+ },
233
+ "look": {
234
+ "default": "@config.tableLook",
235
+ "type": "unknown"
236
+ },
237
+ "maxInlineActions": {
238
+ "default": 2.0,
239
+ "type": "unknown"
240
+ }
241
+ },
242
+ "id": "trt_01KYGG0J813545ADJDSSED6T49",
243
+ "linkedEntity": "BillableHour",
244
+ "linkedEntityId": "ent_01KXG04FQKJHPT5T65NNKMM8AM",
245
+ "listens": [
246
+ {
247
+ "event": "BillableHourLoaded",
248
+ "source": {
249
+ "kind": "trait",
250
+ "trait": "BillableHourTimesheet"
251
+ },
252
+ "triggers": "TableViewLoaded"
253
+ }
254
+ ],
255
+ "name": "DenseHoursTable",
256
+ "ref": "TableView.traits.TableViewRender"
257
+ },
211
258
  {
212
259
  "category": "interaction",
213
260
  "config": {
261
+ "columns": {
262
+ "default": [
263
+ {
264
+ "align": "left",
265
+ "field": "workerName",
266
+ "header": "Worker",
267
+ "key": "workerName",
268
+ "width": "minmax(8rem, 1fr)"
269
+ },
270
+ {
271
+ "align": "left",
272
+ "field": "matterId",
273
+ "header": "Matter",
274
+ "key": "matterId",
275
+ "width": "8rem"
276
+ },
277
+ {
278
+ "align": "left",
279
+ "field": "workDate",
280
+ "format": "date",
281
+ "header": "Date",
282
+ "key": "workDate",
283
+ "width": "8rem"
284
+ },
285
+ {
286
+ "align": "right",
287
+ "field": "hours",
288
+ "format": "number",
289
+ "header": "Hours",
290
+ "key": "hours",
291
+ "width": "6rem"
292
+ },
293
+ {
294
+ "align": "right",
295
+ "field": "rate",
296
+ "format": "currency",
297
+ "header": "Rate",
298
+ "key": "rate",
299
+ "width": "7rem"
300
+ },
301
+ {
302
+ "align": "center",
303
+ "field": "invoiceStatus",
304
+ "format": "badge",
305
+ "header": "Status",
306
+ "key": "invoiceStatus",
307
+ "width": "8rem"
308
+ }
309
+ ],
310
+ "description": "ColumnSpec list for the dense hours ledger table.",
311
+ "items": {
312
+ "properties": {
313
+ "align": {
314
+ "name": "align",
315
+ "required": false,
316
+ "type": "string"
317
+ },
318
+ "className": {
319
+ "name": "className",
320
+ "required": false,
321
+ "type": "string"
322
+ },
323
+ "field": {
324
+ "name": "field",
325
+ "required": false,
326
+ "type": "string"
327
+ },
328
+ "format": {
329
+ "name": "format",
330
+ "required": false,
331
+ "type": "string"
332
+ },
333
+ "header": {
334
+ "name": "header",
335
+ "required": false,
336
+ "type": "string"
337
+ },
338
+ "icon": {
339
+ "name": "icon",
340
+ "required": false,
341
+ "type": "string"
342
+ },
343
+ "key": {
344
+ "name": "key",
345
+ "required": true,
346
+ "type": "string"
347
+ },
348
+ "weight": {
349
+ "name": "weight",
350
+ "required": false,
351
+ "type": "string"
352
+ },
353
+ "width": {
354
+ "name": "width",
355
+ "required": false,
356
+ "type": "string"
357
+ }
358
+ },
359
+ "type": "object"
360
+ },
361
+ "label": "Table columns",
362
+ "tier": "presentation",
363
+ "type": "[ColumnSpec]"
364
+ },
365
+ "itemActions": {
366
+ "default": [
367
+ {
368
+ "event": "OPEN_HOURS",
369
+ "icon": "arrow-right",
370
+ "label": "Open",
371
+ "variant": "ghost"
372
+ },
373
+ {
374
+ "event": "WRITE_OFF_HOURS",
375
+ "label": "Write Off",
376
+ "variant": "danger"
377
+ }
378
+ ],
379
+ "description": "Per-row actions rendered by the hours table.",
380
+ "items": {
381
+ "properties": {
382
+ "event": {
383
+ "name": "event",
384
+ "required": false,
385
+ "type": "string"
386
+ },
387
+ "icon": {
388
+ "name": "icon",
389
+ "required": false,
390
+ "type": "string"
391
+ },
392
+ "label": {
393
+ "name": "label",
394
+ "required": true,
395
+ "type": "string"
396
+ },
397
+ "navigatesTo": {
398
+ "name": "navigatesTo",
399
+ "required": false,
400
+ "type": "string"
401
+ },
402
+ "variant": {
403
+ "name": "variant",
404
+ "required": false,
405
+ "type": "string"
406
+ }
407
+ },
408
+ "type": "object"
409
+ },
410
+ "label": "Row actions",
411
+ "tier": "presentation",
412
+ "type": "[ItemAction]"
413
+ },
214
414
  "statLook": {
215
415
  "default": "elevated",
216
416
  "description": "Layer 2 visual treatment for stat / KPI cards.",
@@ -236,7 +436,7 @@
236
436
  "spacious",
237
437
  "striped",
238
438
  "borderless",
239
- "card-rows"
439
+ "bordered"
240
440
  ]
241
441
  },
242
442
  "title": {
@@ -570,56 +770,13 @@
570
770
  "type": "divider"
571
771
  },
572
772
  {
573
- "cols": 1.0,
574
- "entity": "@payload.data",
575
- "fields": [
576
- {
577
- "label": "Worker",
578
- "name": "workerName",
579
- "variant": "caption"
580
- },
581
- {
582
- "label": "Matter",
583
- "name": "matterId",
584
- "variant": "caption"
585
- },
586
- {
587
- "label": "Date",
588
- "name": "workDate",
589
- "variant": "caption"
590
- },
591
- {
592
- "label": "Hours",
593
- "name": "hours",
594
- "variant": "caption"
595
- },
596
- {
597
- "label": "Rate",
598
- "name": "rate",
599
- "variant": "caption"
600
- },
601
- {
602
- "label": "Status",
603
- "name": "invoiceStatus",
604
- "variant": "badge"
605
- }
606
- ],
607
- "gap": "sm",
608
- "itemActions": [
609
- {
610
- "event": "OPEN_HOURS",
611
- "icon": "arrow-right",
612
- "label": "Open",
613
- "variant": "primary"
614
- },
615
- {
616
- "event": "WRITE_OFF_HOURS",
617
- "label": "Write Off",
618
- "variant": "danger"
619
- }
773
+ "children": [
774
+ "@trait.DenseHoursTable"
620
775
  ],
621
- "look": "@config.tableLook",
622
- "type": "data-grid"
776
+ "className": "overflow-x-auto",
777
+ "direction": "vertical",
778
+ "gap": "none",
779
+ "type": "stack"
623
780
  }
624
781
  ],
625
782
  "direction": "vertical",
@@ -650,6 +807,32 @@
650
807
  "from": "loading",
651
808
  "to": "error"
652
809
  },
810
+ {
811
+ "effects": [
812
+ [
813
+ "fetch",
814
+ "BillableHour",
815
+ {
816
+ "emit": {
817
+ "failure": "BillableHourLoadFailed",
818
+ "success": "BillableHourLoaded"
819
+ }
820
+ }
821
+ ],
822
+ [
823
+ "render-ui",
824
+ "main",
825
+ {
826
+ "rows": 4.0,
827
+ "type": "skeleton"
828
+ }
829
+ ]
830
+ ],
831
+ "event": "INIT",
832
+ "eventId": "evt_01KXG04FQKQJP6SX8JCRF7HBP1",
833
+ "from": "browsing",
834
+ "to": "loading"
835
+ },
653
836
  {
654
837
  "effects": [
655
838
  [
@@ -1074,8 +1257,17 @@
1074
1257
  "to": "loading"
1075
1258
  }
1076
1259
  ]
1260
+ },
1261
+ "traitEmbedIds": {
1262
+ "DenseHoursTable": "trt_01KYGG0J813545ADJDSSED6T49"
1077
1263
  }
1078
1264
  }
1265
+ ],
1266
+ "uses": [
1267
+ {
1268
+ "as": "TableView",
1269
+ "from": "std/behaviors/ui-table-view"
1270
+ }
1079
1271
  ]
1080
1272
  }
1081
1273
  ],