aeon-ui-engine 1.3.1 → 1.4.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 (153) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/package.json +1 -1
  3. package/packages/cli/README.md +13 -1
  4. package/packages/cli/dist/bin.js +23 -5
  5. package/packages/cli/dist/chunk-5L47SLNV.js +247 -0
  6. package/packages/cli/dist/index.d.ts +17 -1
  7. package/packages/cli/dist/index.js +5 -3
  8. package/packages/cli/src/bin.ts +21 -3
  9. package/packages/cli/src/index.ts +1 -0
  10. package/packages/cli/src/migrate.ts +170 -0
  11. package/packages/core/dist/index.d.ts +35 -7
  12. package/packages/core/dist/index.js +102 -2
  13. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  14. package/packages/core/src/anatomy.ts +39 -3
  15. package/packages/core/src/identicon.test.ts +39 -0
  16. package/packages/core/src/identicon.ts +79 -0
  17. package/packages/core/src/index.ts +1 -0
  18. package/packages/panda/panda.config.ts +4 -0
  19. package/packages/panda/src/recipes/composer.ts +58 -4
  20. package/packages/panda/src/recipes/file-upload.ts +100 -0
  21. package/packages/panda/src/recipes/index.ts +2 -0
  22. package/packages/panda/src/recipes/range-slider.ts +59 -0
  23. package/packages/panda/src/recipes/thread.ts +77 -2
  24. package/packages/panda/styled-system/recipes/aeon-composer.d.ts +1 -1
  25. package/packages/panda/styled-system/recipes/aeon-composer.mjs +12 -0
  26. package/packages/panda/styled-system/recipes/aeon-file-upload.d.ts +31 -0
  27. package/packages/panda/styled-system/recipes/aeon-file-upload.mjs +61 -0
  28. package/packages/panda/styled-system/recipes/aeon-range-slider.d.ts +31 -0
  29. package/packages/panda/styled-system/recipes/aeon-range-slider.mjs +49 -0
  30. package/packages/panda/styled-system/recipes/aeon-thread.d.ts +1 -1
  31. package/packages/panda/styled-system/recipes/aeon-thread.mjs +20 -0
  32. package/packages/panda/styled-system/recipes/index.d.ts +2 -0
  33. package/packages/panda/styled-system/recipes/index.mjs +2 -0
  34. package/packages/panda/styled-system/styles.css +292 -0
  35. package/packages/primitives/dist/chunk-CV4UXXZF.js +44 -0
  36. package/packages/primitives/dist/chunk-IZKQSCYU.js +164 -0
  37. package/packages/primitives/dist/index.d.ts +2 -0
  38. package/packages/primitives/dist/index.js +22 -6
  39. package/packages/primitives/dist/machines/file-upload.d.ts +39 -0
  40. package/packages/primitives/dist/machines/file-upload.js +8 -0
  41. package/packages/primitives/dist/machines/range-slider.d.ts +129 -0
  42. package/packages/primitives/dist/machines/range-slider.js +12 -0
  43. package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  44. package/packages/primitives/src/__tests__/file-upload.test.ts +25 -0
  45. package/packages/primitives/src/__tests__/range-slider.test.ts +39 -0
  46. package/packages/primitives/src/index.ts +2 -0
  47. package/packages/primitives/src/machines/file-upload.ts +55 -0
  48. package/packages/primitives/src/machines/range-slider.ts +209 -0
  49. package/packages/react/dist/index.d.ts +117 -25
  50. package/packages/react/dist/index.js +1731 -1006
  51. package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  52. package/packages/react/src/button/index.tsx +50 -15
  53. package/packages/react/src/combobox/index.tsx +13 -8
  54. package/packages/react/src/composer/index.tsx +58 -3
  55. package/packages/react/src/file-upload/index.tsx +322 -0
  56. package/packages/react/src/index.ts +3 -0
  57. package/packages/react/src/prompt/index.tsx +45 -0
  58. package/packages/react/src/range-slider/index.tsx +322 -0
  59. package/packages/react/src/thread/index.tsx +74 -3
  60. package/packages/react/src/tooltip/index.tsx +48 -22
  61. package/packages/react/src/utils/slot.tsx +47 -0
  62. package/packages/schemas/dist/index.d.ts +73 -24
  63. package/packages/schemas/dist/index.js +514 -50
  64. package/packages/schemas/json/appNav.json +146 -0
  65. package/packages/schemas/json/appShell.json +151 -0
  66. package/packages/schemas/json/avatar.json +130 -0
  67. package/packages/schemas/json/bar.json +126 -0
  68. package/packages/schemas/json/button.json +6 -0
  69. package/packages/schemas/json/catalog.json +3496 -15
  70. package/packages/schemas/json/combobox.json +19 -7
  71. package/packages/schemas/json/composer.json +125 -0
  72. package/packages/schemas/json/content.json +167 -0
  73. package/packages/schemas/json/conversation.json +166 -0
  74. package/packages/schemas/json/entry.json +182 -0
  75. package/packages/schemas/json/fileUpload.json +168 -0
  76. package/packages/schemas/json/identity.json +147 -0
  77. package/packages/schemas/json/listRow.json +131 -0
  78. package/packages/schemas/json/metricStrip.json +132 -0
  79. package/packages/schemas/json/nav.json +136 -0
  80. package/packages/schemas/json/panel.json +143 -0
  81. package/packages/schemas/json/pinInput.json +112 -0
  82. package/packages/schemas/json/profileHeader.json +138 -0
  83. package/packages/schemas/json/prompt.json +155 -0
  84. package/packages/schemas/json/radioGroup.json +130 -0
  85. package/packages/schemas/json/rangeSlider.json +157 -0
  86. package/packages/schemas/json/separator.json +105 -0
  87. package/packages/schemas/json/slider.json +147 -0
  88. package/packages/schemas/json/statusBanner.json +149 -0
  89. package/packages/schemas/json/stickyBar.json +153 -0
  90. package/packages/schemas/json/thread.json +129 -0
  91. package/packages/schemas/json/tooltip.json +21 -7
  92. package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  93. package/packages/schemas/prompts/cursorrules.md +6 -4
  94. package/packages/schemas/prompts/statecharts.md +23 -2
  95. package/packages/schemas/prompts/system.md +2 -2
  96. package/packages/schemas/registry/catalog.json +313 -4
  97. package/packages/schemas/registry/components/appNav.json +146 -0
  98. package/packages/schemas/registry/components/appShell.json +151 -0
  99. package/packages/schemas/registry/components/avatar.json +130 -0
  100. package/packages/schemas/registry/components/bar.json +126 -0
  101. package/packages/schemas/registry/components/button.json +6 -0
  102. package/packages/schemas/registry/components/combobox.json +19 -7
  103. package/packages/schemas/registry/components/composer.json +125 -0
  104. package/packages/schemas/registry/components/content.json +167 -0
  105. package/packages/schemas/registry/components/conversation.json +166 -0
  106. package/packages/schemas/registry/components/entry.json +182 -0
  107. package/packages/schemas/registry/components/fileUpload.json +168 -0
  108. package/packages/schemas/registry/components/identity.json +147 -0
  109. package/packages/schemas/registry/components/listRow.json +131 -0
  110. package/packages/schemas/registry/components/metricStrip.json +132 -0
  111. package/packages/schemas/registry/components/nav.json +136 -0
  112. package/packages/schemas/registry/components/panel.json +143 -0
  113. package/packages/schemas/registry/components/pinInput.json +112 -0
  114. package/packages/schemas/registry/components/profileHeader.json +138 -0
  115. package/packages/schemas/registry/components/prompt.json +155 -0
  116. package/packages/schemas/registry/components/radioGroup.json +130 -0
  117. package/packages/schemas/registry/components/rangeSlider.json +157 -0
  118. package/packages/schemas/registry/components/separator.json +105 -0
  119. package/packages/schemas/registry/components/slider.json +147 -0
  120. package/packages/schemas/registry/components/statusBanner.json +149 -0
  121. package/packages/schemas/registry/components/stickyBar.json +153 -0
  122. package/packages/schemas/registry/components/thread.json +129 -0
  123. package/packages/schemas/registry/components/tooltip.json +21 -7
  124. package/packages/schemas/registry/machines/accordion.json +58 -0
  125. package/packages/schemas/registry/machines/appNav.json +108 -0
  126. package/packages/schemas/registry/machines/appShell.json +128 -0
  127. package/packages/schemas/registry/machines/contentRegion.json +314 -0
  128. package/packages/schemas/registry/machines/fileUpload.json +182 -0
  129. package/packages/schemas/registry/machines/panel.json +131 -0
  130. package/packages/schemas/registry/machines/popover.json +143 -0
  131. package/packages/schemas/registry/machines/rangeSlider.json +201 -0
  132. package/packages/schemas/registry/machines/slider.json +151 -0
  133. package/packages/schemas/registry/machines/stickyBar.json +261 -0
  134. package/packages/schemas/registry/machines/tabs.json +58 -0
  135. package/packages/schemas/registry/machines/toast.json +89 -0
  136. package/packages/schemas/registry/machines/toggle.json +134 -0
  137. package/packages/schemas/scripts/emit.ts +27 -0
  138. package/packages/schemas/src/components.ts +499 -6
  139. package/packages/schemas/src/index.test.ts +83 -0
  140. package/packages/schemas/src/index.ts +1 -0
  141. package/packages/schemas/src/machine-id.ts +7 -0
  142. package/packages/schemas/src/prompts.ts +25 -4
  143. package/packages/schemas/src/registry.ts +28 -39
  144. package/packages/schemas/tsconfig.json +1 -1
  145. package/packages/ui/dist/index.d.ts +100 -46
  146. package/packages/ui/dist/index.js +463 -341
  147. package/packages/ui/src/composer.tsx +37 -11
  148. package/packages/ui/src/file-upload.tsx +36 -0
  149. package/packages/ui/src/index.ts +2 -0
  150. package/packages/ui/src/prompt.tsx +3 -0
  151. package/packages/ui/src/range-slider.tsx +24 -0
  152. package/packages/ui/src/thread.tsx +40 -0
  153. package/packages/cli/dist/chunk-IW5NT2Z2.js +0 -103
@@ -16,7 +16,7 @@
16
16
  "schemaUrl": "https://aeon-ui.com/registry/components/button.json",
17
17
  "machineUrl": "https://aeon-ui.com/registry/machines/buttonLifecycle.json",
18
18
  "runtime": "status prop",
19
- "description": "Action control with idle|pending|success|failure|disabled"
19
+ "description": "Action control. status is a prop projection (not an in-tree machine). Never invent parallel useState for lifecycle."
20
20
  },
21
21
  {
22
22
  "id": "async",
@@ -25,7 +25,7 @@
25
25
  "schemaUrl": "https://aeon-ui.com/registry/components/async.json",
26
26
  "machineUrl": "https://aeon-ui.com/registry/machines/async.json",
27
27
  "runtime": "useAeonMachine",
28
- "description": "Fetch lifecycle region with full totality"
28
+ "description": "Fetch region with full lifecycle totality: idle → loading → success|empty|failure. Always render every stable state in demos."
29
29
  },
30
30
  {
31
31
  "id": "field",
@@ -34,7 +34,7 @@
34
34
  "schemaUrl": "https://aeon-ui.com/registry/components/field.json",
35
35
  "machineUrl": "https://aeon-ui.com/registry/machines/field.json",
36
36
  "runtime": "useAeonMachine",
37
- "description": "Parallel interaction × validation × submission"
37
+ "description": "Parallel regions: interaction × validation × submission. Do not collapse into a single error boolean."
38
38
  },
39
39
  {
40
40
  "id": "dialog",
@@ -43,7 +43,316 @@
43
43
  "schemaUrl": "https://aeon-ui.com/registry/components/dialog.json",
44
44
  "machineUrl": "https://aeon-ui.com/registry/machines/dialog.json",
45
45
  "runtime": "useAeonMachine",
46
- "description": "Modal open/closed"
46
+ "description": "Modal open/closed via dialogMachine. Dismissal is a transition, not ad hoc flags."
47
+ },
48
+ {
49
+ "id": "switch",
50
+ "title": "Switch",
51
+ "scope": "switch",
52
+ "schemaUrl": "https://aeon-ui.com/registry/components/switch.json",
53
+ "machineUrl": "https://aeon-ui.com/registry/machines/toggle.json",
54
+ "runtime": "useAeonMachine",
55
+ "description": "Binary toggle via toggleMachine."
56
+ },
57
+ {
58
+ "id": "checkbox",
59
+ "title": "Checkbox",
60
+ "scope": "checkbox",
61
+ "schemaUrl": "https://aeon-ui.com/registry/components/checkbox.json",
62
+ "machineUrl": "https://aeon-ui.com/registry/machines/toggle.json",
63
+ "runtime": "useAeonMachine",
64
+ "description": "Binary toggle via toggleMachine (same chart family as Switch)."
65
+ },
66
+ {
67
+ "id": "tabs",
68
+ "title": "Tabs",
69
+ "scope": "tabs",
70
+ "schemaUrl": "https://aeon-ui.com/registry/components/tabs.json",
71
+ "machineUrl": "https://aeon-ui.com/registry/machines/tabs.json",
72
+ "runtime": "useAeonMachine",
73
+ "description": "Selected tab value from tabsMachine."
74
+ },
75
+ {
76
+ "id": "accordion",
77
+ "title": "Accordion",
78
+ "scope": "accordion",
79
+ "schemaUrl": "https://aeon-ui.com/registry/components/accordion.json",
80
+ "machineUrl": "https://aeon-ui.com/registry/machines/accordion.json",
81
+ "runtime": "useAeonMachine",
82
+ "description": "Per-item open state via accordionMachine."
83
+ },
84
+ {
85
+ "id": "popover",
86
+ "title": "Popover",
87
+ "scope": "popover",
88
+ "schemaUrl": "https://aeon-ui.com/registry/components/popover.json",
89
+ "machineUrl": "https://aeon-ui.com/registry/machines/popover.json",
90
+ "runtime": "useAeonMachine",
91
+ "description": "Floating surface — shares popoverMachine. Do not fork a duplicate open/closed chart."
92
+ },
93
+ {
94
+ "id": "menu",
95
+ "title": "Menu",
96
+ "scope": "menu",
97
+ "schemaUrl": "https://aeon-ui.com/registry/components/menu.json",
98
+ "machineUrl": "https://aeon-ui.com/registry/machines/popover.json",
99
+ "runtime": "useAeonMachine",
100
+ "description": "Shares popoverMachine with Popover/Select open state."
101
+ },
102
+ {
103
+ "id": "select",
104
+ "title": "Select",
105
+ "scope": "select",
106
+ "schemaUrl": "https://aeon-ui.com/registry/components/select.json",
107
+ "machineUrl": "https://aeon-ui.com/registry/machines/popover.json",
108
+ "runtime": "useAeonMachine",
109
+ "description": "Open/closed via popoverMachine; highlight may be React-local. Do not invent a new open machine."
110
+ },
111
+ {
112
+ "id": "combobox",
113
+ "title": "Combobox",
114
+ "scope": "combobox",
115
+ "schemaUrl": "https://aeon-ui.com/registry/components/combobox.json",
116
+ "machineUrl": "https://aeon-ui.com/registry/machines/popover.json",
117
+ "runtime": "useAeonMachine",
118
+ "description": "Open/closed via popoverMachine (same family as Select/Menu/Popover). Query, highlight, and item registry stay React-local for typeahead."
119
+ },
120
+ {
121
+ "id": "tooltip",
122
+ "title": "Tooltip",
123
+ "scope": "tooltip",
124
+ "schemaUrl": "https://aeon-ui.com/registry/components/tooltip.json",
125
+ "machineUrl": "https://aeon-ui.com/registry/machines/popover.json",
126
+ "runtime": "useAeonMachine",
127
+ "description": "Open/closed via popoverMachine (same family as Popover/Select/Combobox). openDelay / closeDelay / touchDuration stay React-local."
128
+ },
129
+ {
130
+ "id": "toast",
131
+ "title": "Toast",
132
+ "scope": "toast",
133
+ "schemaUrl": "https://aeon-ui.com/registry/components/toast.json",
134
+ "machineUrl": "https://aeon-ui.com/registry/machines/toast.json",
135
+ "runtime": "useAeonMachine",
136
+ "description": "Per-item visibility via toastMachine."
137
+ },
138
+ {
139
+ "id": "scroll",
140
+ "title": "Scroll",
141
+ "scope": "scroll",
142
+ "schemaUrl": "https://aeon-ui.com/registry/components/scroll.json",
143
+ "runtime": "getScrollSnapshot",
144
+ "description": "Derived overflow/edge snapshot via getScrollSnapshot() — no XState machine."
145
+ },
146
+ {
147
+ "id": "progress",
148
+ "title": "Progress",
149
+ "scope": "progress",
150
+ "schemaUrl": "https://aeon-ui.com/registry/components/progress.json",
151
+ "runtime": "props",
152
+ "description": "Prop-driven progress: value + indeterminate → idle | loading | complete."
153
+ },
154
+ {
155
+ "id": "radioGroup",
156
+ "title": "RadioGroup",
157
+ "scope": "radioGroup",
158
+ "schemaUrl": "https://aeon-ui.com/registry/components/radioGroup.json",
159
+ "machineUrl": "https://aeon-ui.com/registry/machines/tabs.json",
160
+ "runtime": "useAeonMachine",
161
+ "description": "Single selection via tabsMachine (same chart family as Tabs/Nav)."
162
+ },
163
+ {
164
+ "id": "slider",
165
+ "title": "Slider",
166
+ "scope": "slider",
167
+ "schemaUrl": "https://aeon-ui.com/registry/components/slider.json",
168
+ "machineUrl": "https://aeon-ui.com/registry/machines/slider.json",
169
+ "runtime": "useAeonMachine",
170
+ "description": "Range control via sliderMachine — idle | dragging plus numeric value in context."
171
+ },
172
+ {
173
+ "id": "rangeSlider",
174
+ "title": "RangeSlider",
175
+ "scope": "rangeSlider",
176
+ "schemaUrl": "https://aeon-ui.com/registry/components/rangeSlider.json",
177
+ "machineUrl": "https://aeon-ui.com/registry/machines/rangeSlider.json",
178
+ "runtime": "useAeonMachine",
179
+ "description": "Two-thumb range via rangeSliderMachine — idle | dragging with values pair and minStepsBetween gap."
180
+ },
181
+ {
182
+ "id": "fileUpload",
183
+ "title": "FileUpload",
184
+ "scope": "fileUpload",
185
+ "schemaUrl": "https://aeon-ui.com/registry/components/fileUpload.json",
186
+ "machineUrl": "https://aeon-ui.com/registry/machines/fileUpload.json",
187
+ "runtime": "useAeonMachine",
188
+ "description": "Drag-drop surface via fileUploadMachine — idle | dragging | rejected. File bytes stay in React callbacks."
189
+ },
190
+ {
191
+ "id": "pinInput",
192
+ "title": "PinInput",
193
+ "scope": "pinInput",
194
+ "schemaUrl": "https://aeon-ui.com/registry/components/pinInput.json",
195
+ "runtime": "useState",
196
+ "description": "OTP / PIN cells — React state for digit buffer; projects idle | complete on root."
197
+ },
198
+ {
199
+ "id": "avatar",
200
+ "title": "Avatar",
201
+ "scope": "avatar",
202
+ "schemaUrl": "https://aeon-ui.com/registry/components/avatar.json",
203
+ "runtime": "useState",
204
+ "description": "Image load lifecycle in React; badge presence is a prop projection."
205
+ },
206
+ {
207
+ "id": "content",
208
+ "title": "Content",
209
+ "scope": "content",
210
+ "schemaUrl": "https://aeon-ui.com/registry/components/content.json",
211
+ "machineUrl": "https://aeon-ui.com/registry/machines/contentRegion.json",
212
+ "runtime": "useAeonMachine",
213
+ "description": "Status-slotted body via contentRegionMachine (or Root state prop projection). Pair with Async for fetch."
214
+ },
215
+ {
216
+ "id": "panel",
217
+ "title": "Panel",
218
+ "scope": "panel",
219
+ "schemaUrl": "https://aeon-ui.com/registry/components/panel.json",
220
+ "machineUrl": "https://aeon-ui.com/registry/machines/panel.json",
221
+ "runtime": "useAeonMachine",
222
+ "description": "Collapsible layout region via panelMachine — expanded | collapsed."
223
+ },
224
+ {
225
+ "id": "appShell",
226
+ "title": "AppShell",
227
+ "scope": "appShell",
228
+ "schemaUrl": "https://aeon-ui.com/registry/components/appShell.json",
229
+ "machineUrl": "https://aeon-ui.com/registry/machines/appShell.json",
230
+ "runtime": "useAeonMachine",
231
+ "description": "Application chrome frame via appShellMachine — idle | overlayOpen (+ dockVisible)."
232
+ },
233
+ {
234
+ "id": "stickyBar",
235
+ "title": "StickyBar",
236
+ "scope": "bar",
237
+ "schemaUrl": "https://aeon-ui.com/registry/components/stickyBar.json",
238
+ "machineUrl": "https://aeon-ui.com/registry/machines/stickyBar.json",
239
+ "runtime": "useAeonMachine",
240
+ "description": "Sticky/fixed chrome band via stickyBarMachine. DOM scope is bar (reuses bar anatomy zones)."
241
+ },
242
+ {
243
+ "id": "bar",
244
+ "title": "Bar",
245
+ "scope": "bar",
246
+ "schemaUrl": "https://aeon-ui.com/registry/components/bar.json",
247
+ "runtime": "layout",
248
+ "description": "Three-zone toolbar layout (leading / center / trailing / seam). Sticky lifecycle uses StickyBar + stickyBarMachine."
249
+ },
250
+ {
251
+ "id": "nav",
252
+ "title": "Nav",
253
+ "scope": "nav",
254
+ "schemaUrl": "https://aeon-ui.com/registry/components/nav.json",
255
+ "machineUrl": "https://aeon-ui.com/registry/machines/tabs.json",
256
+ "runtime": "useAeonMachine",
257
+ "description": "Navigational collection via tabsMachine; items project inactive | active | disabled."
258
+ },
259
+ {
260
+ "id": "appNav",
261
+ "title": "AppNav",
262
+ "scope": "appNav",
263
+ "schemaUrl": "https://aeon-ui.com/registry/components/appNav.json",
264
+ "machineUrl": "https://aeon-ui.com/registry/machines/appNav.json",
265
+ "runtime": "useAeonMachine",
266
+ "description": "Section + detail stack via appNavMachine — list→detail, settings drill-in."
267
+ },
268
+ {
269
+ "id": "prompt",
270
+ "title": "Prompt",
271
+ "scope": "prompt",
272
+ "schemaUrl": "https://aeon-ui.com/registry/components/prompt.json",
273
+ "machineUrl": "https://aeon-ui.com/registry/machines/dialog.json",
274
+ "runtime": "status prop",
275
+ "description": "Confirm / permission dialog composed on Dialog. Open/closed via dialogMachine; face via status prop."
276
+ },
277
+ {
278
+ "id": "statusBanner",
279
+ "title": "StatusBanner",
280
+ "scope": "statusBanner",
281
+ "schemaUrl": "https://aeon-ui.com/registry/components/statusBanner.json",
282
+ "runtime": "props",
283
+ "description": "Non-blocking top-of-app notice — tone + optional status props project to data-aeon-state."
284
+ },
285
+ {
286
+ "id": "separator",
287
+ "title": "Separator",
288
+ "scope": "separator",
289
+ "schemaUrl": "https://aeon-ui.com/registry/components/separator.json",
290
+ "runtime": "props",
291
+ "description": "Static divider — orientation prop only."
292
+ },
293
+ {
294
+ "id": "composer",
295
+ "title": "Composer",
296
+ "scope": "composer",
297
+ "schemaUrl": "https://aeon-ui.com/registry/components/composer.json",
298
+ "runtime": "props",
299
+ "description": "Compose chrome — root state prop idle | sending | disabled | error."
300
+ },
301
+ {
302
+ "id": "thread",
303
+ "title": "Thread",
304
+ "scope": "thread",
305
+ "schemaUrl": "https://aeon-ui.com/registry/components/thread.json",
306
+ "runtime": "props",
307
+ "description": "Message stream — item state prop mine | theirs | pending | failed."
308
+ },
309
+ {
310
+ "id": "identity",
311
+ "title": "Identity",
312
+ "scope": "identity",
313
+ "schemaUrl": "https://aeon-ui.com/registry/components/identity.json",
314
+ "runtime": "layout",
315
+ "description": "Avatar + title + subtitle strip — presentational layout, not a niche product scope."
316
+ },
317
+ {
318
+ "id": "profileHeader",
319
+ "title": "ProfileHeader",
320
+ "scope": "profileHeader",
321
+ "schemaUrl": "https://aeon-ui.com/registry/components/profileHeader.json",
322
+ "runtime": "layout",
323
+ "description": "Dense account header — identity · metrics · actions. Universal people chrome."
324
+ },
325
+ {
326
+ "id": "metricStrip",
327
+ "title": "MetricStrip",
328
+ "scope": "metricStrip",
329
+ "schemaUrl": "https://aeon-ui.com/registry/components/metricStrip.json",
330
+ "runtime": "layout",
331
+ "description": "Dense value|label chips — cluster or loose density. Generic stats only."
332
+ },
333
+ {
334
+ "id": "listRow",
335
+ "title": "ListRow",
336
+ "scope": "listRow",
337
+ "schemaUrl": "https://aeon-ui.com/registry/components/listRow.json",
338
+ "runtime": "layout",
339
+ "description": "Settings / menu row — leading · label · trailing. Layout only."
340
+ },
341
+ {
342
+ "id": "entry",
343
+ "title": "Entry",
344
+ "scope": "entry",
345
+ "schemaUrl": "https://aeon-ui.com/registry/components/entry.json",
346
+ "runtime": "props",
347
+ "description": "Universal multi-value card (feed stack or listing split). Root state idle | selected | muted — never invent niche scopes."
348
+ },
349
+ {
350
+ "id": "conversation",
351
+ "title": "Conversation",
352
+ "scope": "conversation",
353
+ "schemaUrl": "https://aeon-ui.com/registry/components/conversation.json",
354
+ "runtime": "props",
355
+ "description": "Inbox / DM list — item state prop idle | unread | selected. Universal messaging chrome."
47
356
  }
48
357
  ],
49
358
  "client": {
@@ -0,0 +1,146 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aeon-ui.com/schemas/appNav.json",
4
+ "title": "AppNav",
5
+ "description": "Section + detail stack via appNavMachine — list→detail, settings drill-in.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "component",
10
+ "scope"
11
+ ],
12
+ "properties": {
13
+ "component": {
14
+ "const": "AppNav"
15
+ },
16
+ "scope": {
17
+ "const": "appNav"
18
+ },
19
+ "parts": {
20
+ "type": "array",
21
+ "description": "Anatomy part keys — map to data-aeon-part",
22
+ "items": {
23
+ "type": "string",
24
+ "enum": [
25
+ "root",
26
+ "rail",
27
+ "section",
28
+ "stage",
29
+ "breadcrumb",
30
+ "crumb",
31
+ "back"
32
+ ]
33
+ },
34
+ "uniqueItems": true
35
+ },
36
+ "states": {
37
+ "type": "array",
38
+ "description": "Allowed data-aeon-state values (stable states only)",
39
+ "items": {
40
+ "type": "string",
41
+ "enum": [
42
+ "section"
43
+ ]
44
+ },
45
+ "uniqueItems": true
46
+ },
47
+ "props": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "properties": {}
51
+ },
52
+ "slots": {
53
+ "type": "object",
54
+ "description": "Named composition slots / compound parts",
55
+ "additionalProperties": {
56
+ "type": "string"
57
+ },
58
+ "properties": {
59
+ "Root": {
60
+ "const": "appNav.root",
61
+ "description": "appNav.root"
62
+ },
63
+ "Rail": {
64
+ "const": "appNav.rail",
65
+ "description": "appNav.rail"
66
+ },
67
+ "Stage": {
68
+ "const": "appNav.stage",
69
+ "description": "appNav.stage"
70
+ },
71
+ "Back": {
72
+ "const": "appNav.back",
73
+ "description": "appNav.back"
74
+ }
75
+ }
76
+ },
77
+ "machine": {
78
+ "type": [
79
+ "string",
80
+ "null"
81
+ ],
82
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
83
+ "const": "appNavMachine"
84
+ },
85
+ "runtime": {
86
+ "type": "string",
87
+ "description": "How headless state is driven at runtime",
88
+ "const": "useAeonMachine"
89
+ },
90
+ "events": {
91
+ "type": "array",
92
+ "items": {
93
+ "type": "string",
94
+ "enum": [
95
+ "SET_SECTION",
96
+ "PUSH",
97
+ "REPLACE",
98
+ "POP",
99
+ "POP_TO",
100
+ "CLEAR",
101
+ "RESET"
102
+ ]
103
+ }
104
+ },
105
+ "examples": {
106
+ "type": "array",
107
+ "items": {
108
+ "type": "string"
109
+ },
110
+ "default": []
111
+ }
112
+ },
113
+ "x-aeon": {
114
+ "scope": "appNav",
115
+ "parts": [
116
+ "root",
117
+ "rail",
118
+ "section",
119
+ "stage",
120
+ "breadcrumb",
121
+ "crumb",
122
+ "back"
123
+ ],
124
+ "states": [
125
+ "section"
126
+ ],
127
+ "machine": "appNavMachine",
128
+ "runtime": "useAeonMachine",
129
+ "events": [
130
+ "SET_SECTION",
131
+ "PUSH",
132
+ "REPLACE",
133
+ "POP",
134
+ "POP_TO",
135
+ "CLEAR",
136
+ "RESET"
137
+ ],
138
+ "slots": {
139
+ "Root": "appNav.root",
140
+ "Rail": "appNav.rail",
141
+ "Stage": "appNav.stage",
142
+ "Back": "appNav.back"
143
+ },
144
+ "examples": []
145
+ }
146
+ }
@@ -0,0 +1,151 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aeon-ui.com/schemas/appShell.json",
4
+ "title": "AppShell",
5
+ "description": "Application chrome frame via appShellMachine — idle | overlayOpen (+ dockVisible).",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "component",
10
+ "scope"
11
+ ],
12
+ "properties": {
13
+ "component": {
14
+ "const": "AppShell"
15
+ },
16
+ "scope": {
17
+ "const": "appShell"
18
+ },
19
+ "parts": {
20
+ "type": "array",
21
+ "description": "Anatomy part keys — map to data-aeon-part",
22
+ "items": {
23
+ "type": "string",
24
+ "enum": [
25
+ "root",
26
+ "header",
27
+ "subheader",
28
+ "content",
29
+ "aside",
30
+ "footer",
31
+ "dock",
32
+ "scrim"
33
+ ]
34
+ },
35
+ "uniqueItems": true
36
+ },
37
+ "states": {
38
+ "type": "array",
39
+ "description": "Allowed data-aeon-state values (stable states only)",
40
+ "items": {
41
+ "type": "string",
42
+ "enum": [
43
+ "idle",
44
+ "overlayOpen"
45
+ ]
46
+ },
47
+ "uniqueItems": true
48
+ },
49
+ "props": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "properties": {}
53
+ },
54
+ "slots": {
55
+ "type": "object",
56
+ "description": "Named composition slots / compound parts",
57
+ "additionalProperties": {
58
+ "type": "string"
59
+ },
60
+ "properties": {
61
+ "Root": {
62
+ "const": "appShell.root",
63
+ "description": "appShell.root"
64
+ },
65
+ "Header": {
66
+ "const": "appShell.header",
67
+ "description": "appShell.header"
68
+ },
69
+ "Content": {
70
+ "const": "appShell.content",
71
+ "description": "appShell.content"
72
+ },
73
+ "Dock": {
74
+ "const": "appShell.dock",
75
+ "description": "appShell.dock"
76
+ },
77
+ "Scrim": {
78
+ "const": "appShell.scrim",
79
+ "description": "appShell.scrim"
80
+ }
81
+ }
82
+ },
83
+ "machine": {
84
+ "type": [
85
+ "string",
86
+ "null"
87
+ ],
88
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
89
+ "const": "appShellMachine"
90
+ },
91
+ "runtime": {
92
+ "type": "string",
93
+ "description": "How headless state is driven at runtime",
94
+ "const": "useAeonMachine"
95
+ },
96
+ "events": {
97
+ "type": "array",
98
+ "items": {
99
+ "type": "string",
100
+ "enum": [
101
+ "OPEN_OVERLAY",
102
+ "CLOSE_OVERLAY",
103
+ "SHOW_DOCK",
104
+ "HIDE_DOCK",
105
+ "SET_DOCK"
106
+ ]
107
+ }
108
+ },
109
+ "examples": {
110
+ "type": "array",
111
+ "items": {
112
+ "type": "string"
113
+ },
114
+ "default": []
115
+ }
116
+ },
117
+ "x-aeon": {
118
+ "scope": "appShell",
119
+ "parts": [
120
+ "root",
121
+ "header",
122
+ "subheader",
123
+ "content",
124
+ "aside",
125
+ "footer",
126
+ "dock",
127
+ "scrim"
128
+ ],
129
+ "states": [
130
+ "idle",
131
+ "overlayOpen"
132
+ ],
133
+ "machine": "appShellMachine",
134
+ "runtime": "useAeonMachine",
135
+ "events": [
136
+ "OPEN_OVERLAY",
137
+ "CLOSE_OVERLAY",
138
+ "SHOW_DOCK",
139
+ "HIDE_DOCK",
140
+ "SET_DOCK"
141
+ ],
142
+ "slots": {
143
+ "Root": "appShell.root",
144
+ "Header": "appShell.header",
145
+ "Content": "appShell.content",
146
+ "Dock": "appShell.dock",
147
+ "Scrim": "appShell.scrim"
148
+ },
149
+ "examples": []
150
+ }
151
+ }