@almadar/std 16.142.0 → 16.144.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 (57) hide show
  1. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -1
  2. package/behaviors/lolo/ui/core/atoms/std-board.lolo +8 -0
  3. package/behaviors/lolo/ui/core/atoms/std-browse.lolo +1 -1
  4. package/behaviors/lolo/ui/core/atoms/std-calendar.lolo +5 -0
  5. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +18 -1
  6. package/behaviors/lolo/ui/core/atoms/std-image-upload-multi.lolo +17 -0
  7. package/behaviors/lolo/ui/core/atoms/std-saved-search.lolo +17 -0
  8. package/behaviors/lolo/ui/core/atoms/std-tag-taxonomy.lolo +17 -0
  9. package/behaviors/lolo/ui/core/atoms/std-version-history.lolo +17 -0
  10. package/behaviors/lolo/ui/core/molecules/ui-data-grid.lolo +2 -3
  11. package/behaviors/lolo/ui/core/molecules/ui-data-list.lolo +2 -3
  12. package/behaviors/lolo/ui/core/molecules/ui-table-view.lolo +2 -3
  13. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +0 -2
  14. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +0 -2
  15. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +0 -2
  16. package/behaviors/lolo/ui/core/organisms/ui-timeline.lolo +0 -2
  17. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +6 -1
  18. package/behaviors/registry/ui/core/atoms/std-board.orb +26 -0
  19. package/behaviors/registry/ui/core/atoms/std-browse.orb +6 -1
  20. package/behaviors/registry/ui/core/atoms/std-calendar.orb +25 -0
  21. package/behaviors/registry/ui/core/atoms/std-file-store.orb +52 -2
  22. package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +40 -0
  23. package/behaviors/registry/ui/core/atoms/std-saved-search.orb +40 -0
  24. package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +40 -0
  25. package/behaviors/registry/ui/core/atoms/std-version-history.orb +40 -0
  26. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  27. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  28. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  29. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  30. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  31. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  32. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  33. package/dist/behaviors/behaviors-embeddings.json +309 -309
  34. package/dist/behaviors/knob-embeddings.json +1 -1
  35. package/dist/behaviors/registry/ui/core/atoms/std-app-layout.orb +6 -1
  36. package/dist/behaviors/registry/ui/core/atoms/std-board.orb +26 -0
  37. package/dist/behaviors/registry/ui/core/atoms/std-browse.orb +6 -1
  38. package/dist/behaviors/registry/ui/core/atoms/std-calendar.orb +25 -0
  39. package/dist/behaviors/registry/ui/core/atoms/std-file-store.orb +52 -2
  40. package/dist/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +40 -0
  41. package/dist/behaviors/registry/ui/core/atoms/std-saved-search.orb +40 -0
  42. package/dist/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +40 -0
  43. package/dist/behaviors/registry/ui/core/atoms/std-version-history.orb +40 -0
  44. package/dist/behaviors/registry/ui/core/molecules/ui-data-grid.orb +12 -25
  45. package/dist/behaviors/registry/ui/core/molecules/ui-data-list.orb +13 -26
  46. package/dist/behaviors/registry/ui/core/molecules/ui-table-view.orb +12 -25
  47. package/dist/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +0 -13
  48. package/dist/behaviors/registry/ui/core/organisms/ui-entity-list.orb +8 -21
  49. package/dist/behaviors/registry/ui/core/organisms/ui-entity-table.orb +0 -13
  50. package/dist/behaviors/registry/ui/core/organisms/ui-timeline.orb +0 -13
  51. package/dist/behaviors-embeddings.json +309 -309
  52. package/dist/index.d.ts +1 -1
  53. package/dist/index.js +12 -1
  54. package/dist/knob-embeddings.json +1 -1
  55. package/dist/registry.d.ts +9 -1
  56. package/dist/registry.js +12 -1
  57. package/package.json +7 -6
@@ -2,7 +2,7 @@ app std-app-layout "1.4.1"
2
2
  "std-app-layout — dashboard-layout chrome (sidebar nav + top bar with search + topBarActions + notifications) wrapping a single contentTrait slot. Use for list-style apps (CMS / helpdesk / CRM) and account/settings pages: the chrome stays stable while the consumer's content trait renders the data, and the consumer can add domain icons (cart / profile / help) via topBarActions. Bind once per orbital — the consumer rebinds linkedEntity via `XAppLayout = AppShell.traits.AppLayout -> XEntity` so multiple orbitals in one file each get their own chrome without colliding on a shared atom entity."
3
3
  ;; @capabilities "settings page shell, preferences page, account settings layout, profile settings, admin console shell"
4
4
  type NavItem = { label : string!, href : string!, icon : string, badge : string, children : [json] }
5
- type ItemAction = { label : string!, event : string!, variant : string, icon : string }
5
+ type ItemAction = { label : string!, event : string, navigatesTo : string, variant : string, icon : string }
6
6
  type NotificationSpec = { id : string, message : string, variant : string }
7
7
  orbital AppLayoutOrbital {
8
8
  type AppLayoutStateLoaded = Event { data : [AppLayoutData] }
@@ -72,6 +72,14 @@ orbital BoardOrbital {
72
72
  }
73
73
 
74
74
  state viewing_board {
75
+ INIT -> loading
76
+ (fetch BoardView {
77
+ emit: { failure: BoardItemsLoadFailed, success: BoardItemsLoaded }
78
+ })
79
+ (render-ui main {
80
+ title: "Loading board…"
81
+ type: loading-state
82
+ })
75
83
  OPEN_CARD -> viewing_card
76
84
  (set @entity.currentId ?row.id)
77
85
  (set @entity.currentTitle ?row.title)
@@ -1,7 +1,7 @@
1
1
  app std-browse "2.3.0"
2
2
  "std-browse as a Function — single primitive: data-grid. Owns the fetch + REFETCH (query/filter/page) state machine. Consumers configure fields/imageField/itemActions/cols/gap/variant; the atom renders the grid. Each `fields[]` entry accepts `{ name, label, variant }` plus optional `referenceEntity` + `displayField` to render a foreign-key column as the joined entity's display value (data-grid resolves @list[referenceEntity] at render time when both keys are present). `browseLook` (table default / dense / feed / gallery) selects one of four render bodies; dense/feed/gallery were folded in from std-browse-dense/-feed/-gallery (Phase 5.B) and their consumers retarget by setting browseLook."
3
3
  type FieldSpec = { name : string!, label : string, variant : string, icon : string, format : string, key : string, header : string }
4
- type ItemAction = { label : string!, event : string!, variant : string, icon : string }
4
+ type ItemAction = { label : string!, event : string, navigatesTo : string, variant : string, icon : string }
5
5
  type ColumnSpec = { key : string!, field : string, header : string, width : string, align : string, className : string, weight : string, format : string, icon : string }
6
6
  type FilterSpec = { field : string!, label : string, options : [string] }
7
7
  orbital BrowseItemOrbital {
@@ -75,6 +75,11 @@ orbital CalendarEventOrbital {
75
75
  }
76
76
 
77
77
  state month-view {
78
+ INIT -> loading
79
+ (fetch CalendarEvent {
80
+ emit: { failure: CalendarEventLoadFailed, success: CalendarEventLoaded }
81
+ })
82
+ (render-ui main { type: spinner })
78
83
  SELECT_DAY -> loading
79
84
  (set @entity.date ?value)
80
85
  (set @entity.selectedRange ?value)
@@ -1,7 +1,7 @@
1
1
  app std-file-store "2.0.0"
2
2
  "std-file-store — the generic file/page tree primitive. A file-tree + config-driven data table over a hierarchical collection; opens a row in `viewing_single` with config-driven detail actions. Rebindable: pass `fields`/`itemActions`/`detailActions`/`tree` to retarget it at any hierarchical entity (files, wiki pages, note trees). Folds in the former std-page-tree via `reorderable` + a page field/action set."
3
3
  type FieldSpec = { name : string!, label : string, variant : string, icon : string, format : string, key : string, header : string }
4
- type ItemAction = { label : string!, event : string!, variant : string, icon : string }
4
+ type ItemAction = { label : string!, event : string, navigatesTo : string, variant : string, icon : string }
5
5
  type TreeNode = { name : string!, path : string!, type : string!, children : [object] }
6
6
  orbital StoredFileOrbital {
7
7
  type StoredFileLoaded = Event { data : [StoredFile] } "Fired when the collection finishes loading"
@@ -82,6 +82,23 @@ orbital StoredFileOrbital {
82
82
  }
83
83
 
84
84
  state browsing {
85
+ INIT -> loading
86
+ (fetch StoredFile {
87
+ emit: { failure: StoredFileLoadFailed, success: StoredFileLoaded }
88
+ })
89
+ (render-ui main {
90
+ align: center
91
+ children: [{ type: spinner }, {
92
+ color: muted
93
+ content: "Loading…"
94
+ type: typography
95
+ variant: caption
96
+ }]
97
+ className: py-12
98
+ direction: vertical
99
+ gap: md
100
+ type: stack
101
+ })
85
102
  OPEN_FILE -> viewing_single
86
103
  (set @entity.id ?row.id)
87
104
  (set @entity.name ?row.name)
@@ -78,6 +78,23 @@ orbital UploadedImageOrbital {
78
78
  }
79
79
 
80
80
  state browsing {
81
+ INIT -> loading
82
+ (fetch UploadedImage {
83
+ emit: { failure: UploadedImageLoadFailed, success: UploadedImageLoaded }
84
+ })
85
+ (render-ui main {
86
+ align: center
87
+ children: [{ type: spinner }, {
88
+ color: muted
89
+ content: "Loading images…"
90
+ type: typography
91
+ variant: caption
92
+ }]
93
+ className: py-12
94
+ direction: vertical
95
+ gap: md
96
+ type: stack
97
+ })
81
98
  UPLOAD -> uploading
82
99
  (persist create UploadedImage ?files {
83
100
  emit: { failure: UploadedImageUploadFailed, success: UploadedImageCreated }
@@ -106,6 +106,23 @@ orbital SavedSearchOrbital {
106
106
  }
107
107
 
108
108
  state browsing {
109
+ INIT -> loading
110
+ (fetch SavedSearch {
111
+ emit: { failure: SavedSearchLoadFailed, success: SavedSearchLoaded }
112
+ })
113
+ (render-ui main {
114
+ align: center
115
+ children: [{ type: spinner }, {
116
+ color: muted
117
+ content: "Loading saved searches…"
118
+ type: typography
119
+ variant: caption
120
+ }]
121
+ className: py-12
122
+ direction: vertical
123
+ gap: md
124
+ type: stack
125
+ })
109
126
  TOGGLE_ALERT -> browsing
110
127
  (set @entity.id ?id)
111
128
  (set @entity.alertEnabled ?enabled)
@@ -114,6 +114,23 @@ orbital TagTaxonomyOrbital {
114
114
  }
115
115
 
116
116
  state browsing {
117
+ INIT -> loading
118
+ (fetch Tag {
119
+ emit: { failure: TagLoadFailed, success: TagLoaded }
120
+ })
121
+ (render-ui main {
122
+ align: center
123
+ children: [{ type: spinner }, {
124
+ color: muted
125
+ content: "Loading categories…"
126
+ type: typography
127
+ variant: caption
128
+ }]
129
+ className: py-12
130
+ direction: vertical
131
+ gap: md
132
+ type: stack
133
+ })
117
134
  SELECT_TAG -> editing
118
135
  (set @entity.id ?tagId)
119
136
  (emit TagSelected { tagId: ?tagId })
@@ -141,6 +141,23 @@ orbital RevisionOrbital {
141
141
  }
142
142
 
143
143
  state browsing {
144
+ INIT -> loading
145
+ (fetch Revision {
146
+ emit: { failure: RevisionLoadFailed, success: RevisionLoaded }
147
+ })
148
+ (render-ui main {
149
+ align: center
150
+ children: [{ type: spinner }, {
151
+ color: muted
152
+ content: "Loading version history…"
153
+ type: typography
154
+ variant: caption
155
+ }]
156
+ className: py-12
157
+ direction: vertical
158
+ gap: md
159
+ type: stack
160
+ })
144
161
  OPEN_REVISION -> viewing_single
145
162
  (set @entity.id ?row.id)
146
163
  (set @entity.documentId ?row.documentId)
@@ -21,7 +21,8 @@ orbital DataGridOrbital {
21
21
  }
22
22
  type DataGridItemActionsItem = {
23
23
  label : string!
24
- event : string!
24
+ event : string
25
+ navigatesTo : string
25
26
  icon : icon
26
27
  variant : "primary" | "secondary" | "ghost" | "danger"
27
28
  }
@@ -105,8 +106,6 @@ orbital DataGridOrbital {
105
106
  look: @config.look
106
107
  type: data-grid
107
108
  })
108
- VIEW -> idle
109
- (emit VIEW {})
110
109
  }
111
110
 
112
111
  emits {
@@ -18,7 +18,8 @@ orbital DataListOrbital {
18
18
  }
19
19
  type DataListItemActionsItem = {
20
20
  label : string!
21
- event : string!
21
+ event : string
22
+ navigatesTo : string
22
23
  icon : icon
23
24
  variant : "primary" | "secondary" | "ghost" | "danger"
24
25
  }
@@ -122,8 +123,6 @@ orbital DataListOrbital {
122
123
  look: @config.look
123
124
  type: data-list
124
125
  })
125
- VIEW -> idle
126
- (emit VIEW {})
127
126
  }
128
127
 
129
128
  emits {
@@ -31,7 +31,8 @@ orbital TableViewOrbital {
31
31
  }
32
32
  type TableViewItemActionsItem = {
33
33
  label : string!
34
- event : string!
34
+ event : string
35
+ navigatesTo : string
35
36
  icon : icon
36
37
  variant : "primary" | "secondary" | "ghost" | "danger"
37
38
  }
@@ -111,8 +112,6 @@ orbital TableViewOrbital {
111
112
  look: @config.look
112
113
  type: table-view
113
114
  })
114
- VIEW -> idle
115
- (emit VIEW {})
116
115
  }
117
116
 
118
117
  emits {
@@ -96,8 +96,6 @@ orbital EntityCardsOrbital {
96
96
  imageField: @config.imageField
97
97
  type: entity-cards
98
98
  })
99
- VIEW -> idle
100
- (emit VIEW {})
101
99
  }
102
100
 
103
101
  emits {
@@ -74,8 +74,6 @@ orbital EntityListOrbital {
74
74
  fieldNames: @config.fieldNames
75
75
  type: entity-list
76
76
  })
77
- VIEW -> idle
78
- (emit VIEW {})
79
77
  }
80
78
 
81
79
  emits {
@@ -120,8 +120,6 @@ orbital EntityTableOrbital {
120
120
  look: @config.look
121
121
  type: entity-table
122
122
  })
123
- VIEW -> idle
124
- (emit VIEW {})
125
123
  }
126
124
 
127
125
  emits {
@@ -59,8 +59,6 @@ orbital TimelineOrbital {
59
59
  look: @config.look
60
60
  type: timeline
61
61
  })
62
- VIEW -> idle
63
- (emit VIEW {})
64
62
  }
65
63
 
66
64
  emits {
@@ -270,7 +270,7 @@
270
270
  "properties": {
271
271
  "event": {
272
272
  "name": "event",
273
- "required": true,
273
+ "required": false,
274
274
  "type": "string"
275
275
  },
276
276
  "icon": {
@@ -283,6 +283,11 @@
283
283
  "required": true,
284
284
  "type": "string"
285
285
  },
286
+ "navigatesTo": {
287
+ "name": "navigatesTo",
288
+ "required": false,
289
+ "type": "string"
290
+ },
286
291
  "variant": {
287
292
  "name": "variant",
288
293
  "required": false,
@@ -1433,6 +1433,32 @@
1433
1433
  "from": "loading",
1434
1434
  "to": "error"
1435
1435
  },
1436
+ {
1437
+ "effects": [
1438
+ [
1439
+ "fetch",
1440
+ "BoardView",
1441
+ {
1442
+ "emit": {
1443
+ "failure": "BoardItemsLoadFailed",
1444
+ "success": "BoardItemsLoaded"
1445
+ }
1446
+ }
1447
+ ],
1448
+ [
1449
+ "render-ui",
1450
+ "main",
1451
+ {
1452
+ "title": "Loading board…",
1453
+ "type": "loading-state"
1454
+ }
1455
+ ]
1456
+ ],
1457
+ "event": "INIT",
1458
+ "eventId": "evt_01KXG04FS5QM08R185ACBMA51K",
1459
+ "from": "viewing_board",
1460
+ "to": "loading"
1461
+ },
1436
1462
  {
1437
1463
  "effects": [
1438
1464
  [
@@ -845,7 +845,7 @@
845
845
  "properties": {
846
846
  "event": {
847
847
  "name": "event",
848
- "required": true,
848
+ "required": false,
849
849
  "type": "string"
850
850
  },
851
851
  "icon": {
@@ -858,6 +858,11 @@
858
858
  "required": true,
859
859
  "type": "string"
860
860
  },
861
+ "navigatesTo": {
862
+ "name": "navigatesTo",
863
+ "required": false,
864
+ "type": "string"
865
+ },
861
866
  "variant": {
862
867
  "name": "variant",
863
868
  "required": false,
@@ -774,6 +774,31 @@
774
774
  "from": "loading",
775
775
  "to": "error"
776
776
  },
777
+ {
778
+ "effects": [
779
+ [
780
+ "fetch",
781
+ "CalendarEvent",
782
+ {
783
+ "emit": {
784
+ "failure": "CalendarEventLoadFailed",
785
+ "success": "CalendarEventLoaded"
786
+ }
787
+ }
788
+ ],
789
+ [
790
+ "render-ui",
791
+ "main",
792
+ {
793
+ "type": "spinner"
794
+ }
795
+ ]
796
+ ],
797
+ "event": "INIT",
798
+ "eventId": "evt_01KXG04FWZ8CQBQECFH7VXNKC2",
799
+ "from": "month-view",
800
+ "to": "loading"
801
+ },
777
802
  {
778
803
  "effects": [
779
804
  [
@@ -225,7 +225,7 @@
225
225
  "properties": {
226
226
  "event": {
227
227
  "name": "event",
228
- "required": true,
228
+ "required": false,
229
229
  "type": "string"
230
230
  },
231
231
  "icon": {
@@ -238,6 +238,11 @@
238
238
  "required": true,
239
239
  "type": "string"
240
240
  },
241
+ "navigatesTo": {
242
+ "name": "navigatesTo",
243
+ "required": false,
244
+ "type": "string"
245
+ },
241
246
  "variant": {
242
247
  "name": "variant",
243
248
  "required": false,
@@ -349,7 +354,7 @@
349
354
  "properties": {
350
355
  "event": {
351
356
  "name": "event",
352
- "required": true,
357
+ "required": false,
353
358
  "type": "string"
354
359
  },
355
360
  "icon": {
@@ -362,6 +367,11 @@
362
367
  "required": true,
363
368
  "type": "string"
364
369
  },
370
+ "navigatesTo": {
371
+ "name": "navigatesTo",
372
+ "required": false,
373
+ "type": "string"
374
+ },
365
375
  "variant": {
366
376
  "name": "variant",
367
377
  "required": false,
@@ -949,6 +959,46 @@
949
959
  "from": "loading",
950
960
  "to": "error"
951
961
  },
962
+ {
963
+ "effects": [
964
+ [
965
+ "fetch",
966
+ "StoredFile",
967
+ {
968
+ "emit": {
969
+ "failure": "StoredFileLoadFailed",
970
+ "success": "StoredFileLoaded"
971
+ }
972
+ }
973
+ ],
974
+ [
975
+ "render-ui",
976
+ "main",
977
+ {
978
+ "align": "center",
979
+ "children": [
980
+ {
981
+ "type": "spinner"
982
+ },
983
+ {
984
+ "color": "muted",
985
+ "content": "Loading…",
986
+ "type": "typography",
987
+ "variant": "caption"
988
+ }
989
+ ],
990
+ "className": "py-12",
991
+ "direction": "vertical",
992
+ "gap": "md",
993
+ "type": "stack"
994
+ }
995
+ ]
996
+ ],
997
+ "event": "INIT",
998
+ "eventId": "evt_01KXG04GBQ18HVDGB5NHDV52F0",
999
+ "from": "browsing",
1000
+ "to": "loading"
1001
+ },
952
1002
  {
953
1003
  "effects": [
954
1004
  [
@@ -657,6 +657,46 @@
657
657
  "from": "loading",
658
658
  "to": "error"
659
659
  },
660
+ {
661
+ "effects": [
662
+ [
663
+ "fetch",
664
+ "UploadedImage",
665
+ {
666
+ "emit": {
667
+ "failure": "UploadedImageLoadFailed",
668
+ "success": "UploadedImageLoaded"
669
+ }
670
+ }
671
+ ],
672
+ [
673
+ "render-ui",
674
+ "main",
675
+ {
676
+ "align": "center",
677
+ "children": [
678
+ {
679
+ "type": "spinner"
680
+ },
681
+ {
682
+ "color": "muted",
683
+ "content": "Loading images…",
684
+ "type": "typography",
685
+ "variant": "caption"
686
+ }
687
+ ],
688
+ "className": "py-12",
689
+ "direction": "vertical",
690
+ "gap": "md",
691
+ "type": "stack"
692
+ }
693
+ ]
694
+ ],
695
+ "event": "INIT",
696
+ "eventId": "evt_01KXG04GPP89A1D4728P34VMFM",
697
+ "from": "browsing",
698
+ "to": "loading"
699
+ },
660
700
  {
661
701
  "effects": [
662
702
  [
@@ -777,6 +777,46 @@
777
777
  "from": "loading",
778
778
  "to": "error"
779
779
  },
780
+ {
781
+ "effects": [
782
+ [
783
+ "fetch",
784
+ "SavedSearch",
785
+ {
786
+ "emit": {
787
+ "failure": "SavedSearchLoadFailed",
788
+ "success": "SavedSearchLoaded"
789
+ }
790
+ }
791
+ ],
792
+ [
793
+ "render-ui",
794
+ "main",
795
+ {
796
+ "align": "center",
797
+ "children": [
798
+ {
799
+ "type": "spinner"
800
+ },
801
+ {
802
+ "color": "muted",
803
+ "content": "Loading saved searches…",
804
+ "type": "typography",
805
+ "variant": "caption"
806
+ }
807
+ ],
808
+ "className": "py-12",
809
+ "direction": "vertical",
810
+ "gap": "md",
811
+ "type": "stack"
812
+ }
813
+ ]
814
+ ],
815
+ "event": "INIT",
816
+ "eventId": "evt_01KXG04HEK6NXH4H03WDAQSW47",
817
+ "from": "browsing",
818
+ "to": "loading"
819
+ },
780
820
  {
781
821
  "effects": [
782
822
  [
@@ -491,6 +491,46 @@
491
491
  "from": "loading",
492
492
  "to": "error"
493
493
  },
494
+ {
495
+ "effects": [
496
+ [
497
+ "fetch",
498
+ "Tag",
499
+ {
500
+ "emit": {
501
+ "failure": "TagLoadFailed",
502
+ "success": "TagLoaded"
503
+ }
504
+ }
505
+ ],
506
+ [
507
+ "render-ui",
508
+ "main",
509
+ {
510
+ "align": "center",
511
+ "children": [
512
+ {
513
+ "type": "spinner"
514
+ },
515
+ {
516
+ "color": "muted",
517
+ "content": "Loading categories…",
518
+ "type": "typography",
519
+ "variant": "caption"
520
+ }
521
+ ],
522
+ "className": "py-12",
523
+ "direction": "vertical",
524
+ "gap": "md",
525
+ "type": "stack"
526
+ }
527
+ ]
528
+ ],
529
+ "event": "INIT",
530
+ "eventId": "evt_01KXG04HRHZ7R8AVV6NCG6FC0S",
531
+ "from": "browsing",
532
+ "to": "loading"
533
+ },
494
534
  {
495
535
  "effects": [
496
536
  [
@@ -844,6 +844,46 @@
844
844
  "from": "loading",
845
845
  "to": "error"
846
846
  },
847
+ {
848
+ "effects": [
849
+ [
850
+ "fetch",
851
+ "Revision",
852
+ {
853
+ "emit": {
854
+ "failure": "RevisionLoadFailed",
855
+ "success": "RevisionLoaded"
856
+ }
857
+ }
858
+ ],
859
+ [
860
+ "render-ui",
861
+ "main",
862
+ {
863
+ "align": "center",
864
+ "children": [
865
+ {
866
+ "type": "spinner"
867
+ },
868
+ {
869
+ "color": "muted",
870
+ "content": "Loading version history…",
871
+ "type": "typography",
872
+ "variant": "caption"
873
+ }
874
+ ],
875
+ "className": "py-12",
876
+ "direction": "vertical",
877
+ "gap": "md",
878
+ "type": "stack"
879
+ }
880
+ ]
881
+ ],
882
+ "event": "INIT",
883
+ "eventId": "evt_01KXG04HV9D9FEAFFAPEMZ9RP2",
884
+ "from": "browsing",
885
+ "to": "loading"
886
+ },
847
887
  {
848
888
  "effects": [
849
889
  [