@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3

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 (670) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +121 -85
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +16 -9
  7. package/api/build/build.test.mjs +197 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +165 -49
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +31 -12
  18. package/api/component/_adapter.mjs +79 -15
  19. package/api/component/component.d.mts +6 -3
  20. package/api/component/component.doc.mjs +36 -13
  21. package/api/component/component.mjs +339 -22
  22. package/api/component/component.test.mjs +38 -0
  23. package/api/component/component.type.d.mts +47 -11
  24. package/api/component/component.type.mjs +76 -24
  25. package/api/component/detail/blocks/blocks.d.mts +2 -1
  26. package/api/component/detail/blocks/blocks.mjs +4 -3
  27. package/api/component/list/list.d.mts +0 -5
  28. package/api/component/list/list.mjs +40 -11
  29. package/api/discover/_adapter.d.mts +114 -6
  30. package/api/discover/_adapter.mjs +372 -17
  31. package/api/discover/_adapter.test.mjs +215 -0
  32. package/api/discover/_catalog-view.d.mts +115 -0
  33. package/api/discover/_catalog-view.mjs +203 -0
  34. package/api/discover/_catalog-view.test.mjs +128 -0
  35. package/api/discover/detail/detail.d.mts +18 -6
  36. package/api/discover/detail/detail.mjs +67 -13
  37. package/api/discover/detail/detail.test.mjs +85 -0
  38. package/api/discover/detail/item/item.d.mts +26 -0
  39. package/api/discover/detail/item/item.mjs +78 -0
  40. package/api/discover/detail/item/item.test.mjs +73 -0
  41. package/api/discover/discover.d.mts +3 -9
  42. package/api/discover/discover.doc.mjs +62 -18
  43. package/api/discover/discover.mjs +220 -36
  44. package/api/discover/discover.test.mjs +11 -2
  45. package/api/discover/discover.type.d.mts +150 -11
  46. package/api/discover/discover.type.mjs +107 -17
  47. package/api/discover/list/list.d.mts +20 -6
  48. package/api/discover/list/list.mjs +45 -12
  49. package/api/discover/list/list.test.mjs +46 -0
  50. package/api/discover/search/search.d.mts +18 -16
  51. package/api/discover/search/search.mjs +102 -56
  52. package/api/discover/search/search.test.mjs +144 -10
  53. package/api/docs/_adapter.d.mts +272 -41
  54. package/api/docs/_adapter.mjs +985 -108
  55. package/api/docs/compiled-topics.test.mjs +78 -0
  56. package/api/docs/detail/detail.mjs +22 -63
  57. package/api/docs/detail/section/section.d.mts +1 -1
  58. package/api/docs/detail/section/section.mjs +54 -19
  59. package/api/docs/detail/section/section.test.mjs +50 -0
  60. package/api/docs/docs.d.mts +10 -3
  61. package/api/docs/docs.doc.mjs +55 -16
  62. package/api/docs/docs.mjs +53 -10
  63. package/api/docs/docs.test.mjs +166 -4
  64. package/api/docs/docs.type.d.mts +221 -5
  65. package/api/docs/docs.type.mjs +153 -11
  66. package/api/docs/index/index.d.mts +18 -0
  67. package/api/docs/index/index.mjs +40 -0
  68. package/api/docs/index/index.test.mjs +62 -0
  69. package/api/docs/integration-tree.test.mjs +555 -0
  70. package/api/docs/integrationDocs.test.mjs +114 -8
  71. package/api/docs/list/list.mjs +28 -12
  72. package/api/docs/node/node.d.mts +43 -0
  73. package/api/docs/node/node.mjs +192 -0
  74. package/api/docs/reference-blocks.test.mjs +406 -0
  75. package/api/doctor/doctor.d.mts +104 -1
  76. package/api/doctor/doctor.doc.mjs +1 -0
  77. package/api/doctor/doctor.mjs +635 -7
  78. package/api/doctor/doctor.test.mjs +732 -11
  79. package/api/gap-report/gap-report.doc.mjs +8 -4
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +1 -0
  82. package/api/hook/hook.type.d.mts +3 -3
  83. package/api/hook/hook.type.mjs +11 -11
  84. package/api/hook/list/list.d.mts +2 -2
  85. package/api/hook/list/list.mjs +69 -17
  86. package/api/index.d.mts +2 -3
  87. package/api/index.mjs +5 -4
  88. package/api/init/init.doc.mjs +6 -1
  89. package/api/init/init.test.mjs +41 -1
  90. package/api/init/remove/remove.mjs +1 -1
  91. package/api/init/run/run.mjs +20 -10
  92. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  93. package/api/integration/add-contribution.d.mts +2 -1
  94. package/api/integration/add-contribution.mjs +130 -15
  95. package/api/integration/add-contribution.test.mjs +258 -7
  96. package/api/integration/add-helpers.d.mts +5 -2
  97. package/api/integration/add-helpers.mjs +36 -9
  98. package/api/integration/add-theme.mjs +34 -64
  99. package/api/integration/add-theme.test.mjs +105 -21
  100. package/api/integration/authoring-checks.mjs +138 -28
  101. package/api/integration/authoring-checks.test.mjs +179 -7
  102. package/api/integration/authoring-checks.type.mjs +6 -1
  103. package/api/integration/integration-authoring.type.d.mts +3 -1
  104. package/api/integration/integration-authoring.type.mjs +2 -0
  105. package/api/integration/integration-block-exports.test.mjs +10 -6
  106. package/api/integration/integrationAdd.doc.mjs +14 -4
  107. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  108. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  109. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  110. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  111. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  112. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  113. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  114. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  115. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  116. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  117. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  118. package/api/integration/pack-check.lifecycle-output.test.mjs +105 -0
  119. package/api/integration/pack-check.mjs +111 -10
  120. package/api/integration/pack-check.test.mjs +387 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +14 -1
  123. package/api/integration/summarizeIssues.doc.mjs +1 -0
  124. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  126. package/api/integration/validate-integration.mjs +52 -102
  127. package/api/integration/validate-integration.test.mjs +179 -26
  128. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  129. package/api/integration/validateIntegration.doc.mjs +3 -2
  130. package/api/json/assertResponse.doc.mjs +1 -0
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -1
  133. package/api/json/isError.doc.mjs +1 -0
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/search/search-return-type.test.mjs +54 -0
  136. package/api/search/search.d.mts +62 -11
  137. package/api/search/search.doc.mjs +8 -2
  138. package/api/search/search.mjs +471 -83
  139. package/api/search/search.test.mjs +142 -1
  140. package/api/search/search.type.d.mts +15 -3
  141. package/api/search/search.type.mjs +5 -2
  142. package/api/swizzle/copy/copy.mjs +28 -11
  143. package/api/swizzle/swizzle.doc.mjs +2 -1
  144. package/api/swizzle/swizzle.type.d.mts +2 -2
  145. package/api/swizzle/swizzle.type.mjs +2 -2
  146. package/api/template/copy/copy.mjs +17 -23
  147. package/api/template/copy/copy.test.mjs +17 -0
  148. package/api/template/list/list.mjs +1 -0
  149. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  150. package/api/template/template-integration.test.mjs +1008 -3
  151. package/api/template/template-suffix.test.mjs +41 -21
  152. package/api/template/template.d.mts +1 -1
  153. package/api/template/template.doc.mjs +30 -8
  154. package/api/template/template.mjs +46 -9
  155. package/api/template/template.type.d.mts +12 -14
  156. package/api/template/template.type.mjs +15 -14
  157. package/api/theme/_adapter.d.mts +2 -3
  158. package/api/theme/_adapter.mjs +4 -5
  159. package/api/theme/add/add.binary.test.mjs +84 -0
  160. package/api/theme/add/add.mjs +31 -22
  161. package/api/theme/add/add.rollback.test.mjs +158 -0
  162. package/api/theme/add/add.staging.test.mjs +83 -0
  163. package/api/theme/add/add.test.mjs +14 -1
  164. package/api/theme/build/build.family.test.mjs +7 -12
  165. package/api/theme/build/build.mjs +140 -59
  166. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  167. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  168. package/api/theme/build/build.rollback.test.mjs +148 -0
  169. package/api/theme/build/build.test.mjs +127 -0
  170. package/api/theme/build/font-warning.mjs +3 -3
  171. package/api/theme/build/font-warning.test.mjs +5 -2
  172. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  173. package/api/theme/integration-themes.test.mjs +39 -28
  174. package/api/theme/list/list.test.mjs +19 -20
  175. package/api/theme/listThemes.doc.mjs +6 -5
  176. package/api/theme/palette/generate/generate.mjs +8 -3
  177. package/api/theme/palette/generate/generate.test.mjs +96 -0
  178. package/api/theme/palette/generate/generator.d.mts +10 -13
  179. package/api/theme/palette/generate/generator.mjs +15 -4
  180. package/api/theme/palette/generate/generator.test.mjs +10 -0
  181. package/api/theme/template/template.mjs +11 -2
  182. package/api/theme/template/template.test.mjs +20 -0
  183. package/api/theme/theme.type.d.mts +170 -11
  184. package/api/theme/theme.type.mjs +94 -27
  185. package/api/theme/themeAdd.doc.mjs +4 -3
  186. package/api/theme/themeBuild.doc.mjs +8 -4
  187. package/api/theme/themeList.doc.mjs +6 -3
  188. package/api/theme/themeListAvailable.doc.mjs +5 -3
  189. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  190. package/api/theme/themeTargets.doc.mjs +1 -0
  191. package/api/theme/themeTemplate.doc.mjs +6 -2
  192. package/api/upgrade/_adapter.d.mts +32 -5
  193. package/api/upgrade/_adapter.mjs +139 -22
  194. package/api/upgrade/list/list.mjs +2 -1
  195. package/api/upgrade/list/list.test.mjs +73 -0
  196. package/api/upgrade/project-context.test.mjs +272 -0
  197. package/api/upgrade/provider-agreement.test.mjs +152 -0
  198. package/api/upgrade/run/files-changed.test.mjs +111 -0
  199. package/api/upgrade/run/run.mjs +359 -60
  200. package/api/upgrade/status/status.mjs +2 -2
  201. package/api/upgrade/upgrade.doc.mjs +12 -5
  202. package/api/upgrade/upgrade.type.d.mts +43 -5
  203. package/api/upgrade/upgrade.type.mjs +29 -13
  204. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  205. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  206. package/assets/codemods/file-count.test.mjs +163 -0
  207. package/assets/codemods/integration-discovery.mjs +48 -4
  208. package/assets/codemods/integration-discovery.test.mjs +73 -0
  209. package/assets/codemods/integration-runner.mjs +59 -7
  210. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  211. package/assets/codemods/registry.mjs +1 -0
  212. package/assets/codemods/run-codemod.mjs +177 -34
  213. package/assets/codemods/runner.mjs +353 -104
  214. package/assets/codemods/term-log.mjs +32 -8
  215. package/assets/codemods/term-log.test.mjs +19 -1
  216. package/assets/codemods/transform-prop.mjs +109 -0
  217. package/assets/codemods/transform-prop.test.mjs +95 -0
  218. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  219. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  220. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  221. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  222. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  223. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  224. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  225. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  226. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  227. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  228. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  229. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  230. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  231. package/assets/docs/README.md +9 -0
  232. package/assets/docs/authoring.doc.mjs +14 -0
  233. package/assets/docs/getting-started.doc.mjs +2 -2
  234. package/assets/docs/internationalization.doc.mjs +7 -5
  235. package/assets/docs/layout.doc.dense.mjs +2 -2
  236. package/assets/docs/layout.doc.mjs +1 -1
  237. package/assets/docs/principles.doc.mjs +6 -6
  238. package/assets/docs/styling-libraries.doc.mjs +4 -4
  239. package/assets/docs/styling.doc.mjs +4 -4
  240. package/assets/docs/theme.doc.mjs +5 -5
  241. package/assets/docs/tokens.doc.mjs +1 -1
  242. package/assets/docs/tree/api.doc.mjs +30 -0
  243. package/assets/docs/tree/cli.doc.mjs +23 -0
  244. package/assets/docs/tree/commands.doc.mjs +25 -0
  245. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  246. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
  247. package/assets/docs/tree/integrations.test.mjs +62 -0
  248. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  249. package/assets/docs/working-with-ai.doc.mjs +4 -4
  250. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  251. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  252. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  253. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  254. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  255. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  256. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  262. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  263. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  264. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  265. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  266. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  267. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  268. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  269. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  270. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  271. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  272. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  273. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  274. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  275. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  276. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  277. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  278. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  279. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  280. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  281. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  282. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  283. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  284. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  285. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  286. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  287. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  288. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  289. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  290. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  291. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  292. package/authoring/_shared/contract.ts +22 -0
  293. package/authoring/codemod/codemod.doc.mjs +7 -2
  294. package/authoring/codemod/parse.d.mts +8 -8
  295. package/authoring/codemod/parse.mjs +8 -6
  296. package/authoring/codemod/type.ts +12 -0
  297. package/authoring/config/config.doc.mjs +11 -3
  298. package/authoring/config/debug-composition.test.mjs +92 -0
  299. package/authoring/config/parse.d.mts +15 -13
  300. package/authoring/config/parse.mjs +27 -8
  301. package/authoring/config/parse.test.mjs +8 -0
  302. package/authoring/config/type.ts +31 -8
  303. package/authoring/debug/debug.doc.d.mts +11 -0
  304. package/authoring/debug/debug.doc.mjs +182 -0
  305. package/authoring/debug/parse.d.mts +8 -8
  306. package/authoring/debug/parse.mjs +3 -3
  307. package/authoring/discover/discover.doc.d.mts +13 -0
  308. package/authoring/discover/discover.doc.mjs +138 -0
  309. package/authoring/discover/parse.d.mts +24 -0
  310. package/authoring/discover/parse.mjs +128 -0
  311. package/authoring/discover/parse.test.mjs +124 -0
  312. package/authoring/discover/type.ts +87 -0
  313. package/authoring/doctypes/_schema.d.mts +790 -23
  314. package/authoring/doctypes/_schema.mjs +543 -39
  315. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  316. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  317. package/authoring/doctypes/base/type.ts +41 -0
  318. package/authoring/doctypes/command/command.doc.mjs +5 -4
  319. package/authoring/doctypes/command/parse.d.mts +2 -2
  320. package/authoring/doctypes/command/parse.mjs +1 -1
  321. package/authoring/doctypes/command/type.ts +6 -5
  322. package/authoring/doctypes/component/component.doc.mjs +6 -3
  323. package/authoring/doctypes/component/parse.d.mts +2 -2
  324. package/authoring/doctypes/component/parse.mjs +1 -1
  325. package/authoring/doctypes/component/type.ts +6 -5
  326. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  327. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  328. package/authoring/doctypes/enum/parse.d.mts +2 -2
  329. package/authoring/doctypes/enum/parse.mjs +1 -1
  330. package/authoring/doctypes/enum/type.ts +4 -2
  331. package/authoring/doctypes/function/function.doc.mjs +7 -2
  332. package/authoring/doctypes/function/parse.d.mts +2 -2
  333. package/authoring/doctypes/function/parse.mjs +1 -1
  334. package/authoring/doctypes/function/type.ts +9 -4
  335. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  336. package/authoring/doctypes/hook/parse.d.mts +2 -2
  337. package/authoring/doctypes/hook/parse.mjs +1 -1
  338. package/authoring/doctypes/hook/type.ts +5 -4
  339. package/authoring/doctypes/legacy.d.mts +8 -6
  340. package/authoring/doctypes/legacy.mjs +5 -4
  341. package/authoring/doctypes/load-contract.test.mjs +233 -0
  342. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  343. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  344. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  345. package/authoring/doctypes/namespace/parse.mjs +25 -0
  346. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  347. package/authoring/doctypes/namespace/type.ts +74 -0
  348. package/authoring/doctypes/parse.d.mts +22 -18
  349. package/authoring/doctypes/parse.mjs +22 -11
  350. package/authoring/doctypes/parse.test.mjs +77 -3
  351. package/authoring/doctypes/reference/parse.d.mts +2 -2
  352. package/authoring/doctypes/reference/parse.mjs +8 -5
  353. package/authoring/doctypes/reference/reference.doc.mjs +48 -6
  354. package/authoring/doctypes/reference/type.ts +70 -7
  355. package/authoring/doctypes/schema/parse.d.mts +2 -2
  356. package/authoring/doctypes/schema/parse.mjs +1 -1
  357. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  358. package/authoring/doctypes/schema/type.ts +4 -4
  359. package/authoring/doctypes/template/parse.d.mts +94 -1
  360. package/authoring/doctypes/template/parse.mjs +40 -2
  361. package/authoring/doctypes/template/parse.test.mjs +26 -2
  362. package/authoring/doctypes/template/template.doc.mjs +13 -3
  363. package/authoring/doctypes/template/type.ts +13 -2
  364. package/authoring/doctypes/theme/parse.d.mts +35 -0
  365. package/authoring/doctypes/theme/parse.mjs +76 -0
  366. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  367. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  368. package/authoring/doctypes/theme/type.ts +42 -0
  369. package/authoring/doctypes/types.ts +12 -10
  370. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  371. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  372. package/authoring/gap-report/parse.d.mts +10 -10
  373. package/authoring/gap-report/parse.mjs +6 -6
  374. package/authoring/gap-report/type.ts +1 -1
  375. package/authoring/identity/identity.doc.d.mts +9 -0
  376. package/authoring/identity/identity.doc.mjs +61 -0
  377. package/authoring/identity/type.ts +132 -0
  378. package/authoring/index.d.mts +3 -0
  379. package/authoring/index.d.ts +62 -17
  380. package/authoring/index.mjs +4 -1
  381. package/authoring/integration/integration.doc.mjs +15 -8
  382. package/authoring/integration/parse.d.mts +2 -2
  383. package/authoring/integration/parse.mjs +1 -1
  384. package/authoring/integration/parse.test.mjs +10 -1
  385. package/authoring/integration/schema.d.mts +6 -4
  386. package/authoring/integration/schema.mjs +9 -3
  387. package/authoring/integration/type.ts +19 -8
  388. package/authoring/shadcn/receipt.d.mts +6 -6
  389. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  390. package/clients/cli/command-load-failure.test.mjs +83 -0
  391. package/clients/cli/command-result-coverage.test.mjs +7 -7
  392. package/clients/cli/commands/blog.doc.mjs +1 -1
  393. package/clients/cli/commands/blog.mjs +23 -8
  394. package/clients/cli/commands/blog.test.mjs +42 -1
  395. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  396. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  397. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  398. package/clients/cli/commands/build-theme.mjs +16 -50
  399. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  400. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  401. package/clients/cli/commands/build.doc.mjs +16 -8
  402. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  403. package/clients/cli/commands/build.mjs +137 -114
  404. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  405. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  406. package/clients/cli/commands/component/index.mjs +153 -61
  407. package/clients/cli/commands/component-batch.test.mjs +341 -0
  408. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  409. package/clients/cli/commands/component-package.test.mjs +46 -0
  410. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  411. package/clients/cli/commands/component.doc.mjs +24 -7
  412. package/clients/cli/commands/component.test.mjs +19 -0
  413. package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
  414. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  415. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  416. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  417. package/clients/cli/commands/discover.doc.mjs +55 -9
  418. package/clients/cli/commands/discover.mjs +393 -118
  419. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  420. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  421. package/clients/cli/commands/docs.doc.mjs +28 -6
  422. package/clients/cli/commands/docs.mjs +240 -26
  423. package/clients/cli/commands/docs.test.mjs +222 -1
  424. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  425. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  426. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  427. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  428. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  429. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  430. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  431. package/clients/cli/commands/doctor.doc.mjs +1 -1
  432. package/clients/cli/commands/doctor.mjs +59 -32
  433. package/clients/cli/commands/doctor.test.mjs +42 -0
  434. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  435. package/clients/cli/commands/gap-report.test.mjs +72 -0
  436. package/clients/cli/commands/hook/index.mjs +7 -17
  437. package/clients/cli/commands/hook.doc.mjs +1 -1
  438. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  439. package/clients/cli/commands/init.doc.mjs +20 -9
  440. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  441. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  442. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  443. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  444. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  445. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  446. package/clients/cli/commands/integration.doc.mjs +1 -1
  447. package/clients/cli/commands/integration.mjs +1 -0
  448. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  449. package/clients/cli/commands/json-contract.test.mjs +33 -0
  450. package/clients/cli/commands/manifest.doc.mjs +1 -1
  451. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  452. package/clients/cli/commands/search.doc.mjs +7 -4
  453. package/clients/cli/commands/search.mjs +28 -9
  454. package/clients/cli/commands/search.test.mjs +75 -0
  455. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  456. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  457. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  458. package/clients/cli/commands/template.doc.mjs +52 -13
  459. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  460. package/clients/cli/commands/template.mjs +4 -91
  461. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  462. package/clients/cli/commands/text-json-parity.test.mjs +702 -0
  463. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  464. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  465. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  466. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  467. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  468. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  469. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  470. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  471. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  472. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  473. package/clients/cli/commands/theme.doc.mjs +1 -1
  474. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  475. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  476. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  477. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  478. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  479. package/clients/cli/commands/upgrade.mjs +29 -7
  480. package/clients/cli/formatters/index.mjs +164 -1
  481. package/clients/cli/formatters/index.test.mjs +97 -0
  482. package/clients/cli/index.mjs +21 -34
  483. package/clients/cli/latest-version-env.test.mjs +50 -0
  484. package/clients/cli/lib/cli-error.test.mjs +7 -0
  485. package/clients/cli/lib/component-format.mjs +9 -9
  486. package/clients/cli/lib/component-format.test.mjs +1 -1
  487. package/clients/cli/lib/define-command.mjs +32 -6
  488. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  489. package/clients/cli/lib/exit-codes.test.mjs +90 -0
  490. package/clients/cli/lib/hook-format.mjs +19 -10
  491. package/clients/cli/lib/json-shim.mjs +62 -16
  492. package/clients/cli/lib/json-shim.test.mjs +69 -0
  493. package/clients/cli/lib/manifest.d.ts +2 -0
  494. package/clients/cli/lib/manifest.mjs +39 -10
  495. package/clients/cli/lib/manifest.test.mjs +22 -2
  496. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  497. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  498. package/foundation/agent-docs/agent-docs.mjs +82 -12
  499. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  500. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  501. package/foundation/config/integration-debug.test.mjs +28 -3
  502. package/foundation/config/project-themes.test.mjs +11 -19
  503. package/foundation/config/project.d.mts +20 -11
  504. package/foundation/config/project.mjs +263 -91
  505. package/foundation/config/project.test.mjs +270 -21
  506. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  507. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  508. package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
  509. package/foundation/discovery/authoring-surface.d.mts +74 -0
  510. package/foundation/discovery/authoring-surface.mjs +525 -0
  511. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  512. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  513. package/foundation/discovery/cli-self-docs.mjs +490 -0
  514. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  515. package/foundation/discovery/component-discovery.d.mts +39 -1
  516. package/foundation/discovery/component-discovery.mjs +50 -1
  517. package/foundation/discovery/component-loader.d.mts +35 -38
  518. package/foundation/discovery/component-loader.mjs +53 -222
  519. package/foundation/discovery/docs-discovery.d.mts +119 -11
  520. package/foundation/discovery/docs-discovery.mjs +423 -108
  521. package/foundation/discovery/docs-discovery.test.mjs +365 -20
  522. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  523. package/foundation/discovery/docs-output-budget.mjs +50 -0
  524. package/foundation/discovery/docs-section-key.d.mts +116 -0
  525. package/foundation/discovery/docs-section-key.mjs +322 -0
  526. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  527. package/foundation/discovery/template-adapter.d.mts +113 -11
  528. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  529. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  530. package/foundation/discovery/template-adapter.mjs +775 -84
  531. package/foundation/discovery/template-adapter.test.mjs +57 -0
  532. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  533. package/foundation/discovery/template-conflict-release.mjs +40 -0
  534. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  535. package/foundation/discovery/theme-discovery.d.mts +67 -7
  536. package/foundation/discovery/theme-discovery.mjs +916 -186
  537. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  538. package/foundation/discovery/theming-targets.test.mjs +4 -0
  539. package/foundation/doc-compiler/bundle.d.mts +47 -0
  540. package/foundation/doc-compiler/bundle.mjs +278 -0
  541. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  542. package/foundation/doc-compiler/compile.d.mts +343 -0
  543. package/foundation/doc-compiler/compile.mjs +558 -0
  544. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  545. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  546. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  547. package/foundation/doc-compiler/doc-loads.test.mjs +1630 -0
  548. package/foundation/doc-compiler/import.d.mts +24 -0
  549. package/foundation/doc-compiler/import.mjs +59 -0
  550. package/foundation/doc-compiler/inputs.d.mts +102 -0
  551. package/foundation/doc-compiler/inputs.mjs +291 -0
  552. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  553. package/foundation/doc-compiler/ir.d.mts +22 -0
  554. package/foundation/doc-compiler/ir.mjs +471 -0
  555. package/foundation/doc-compiler/lenses.d.mts +36 -0
  556. package/foundation/doc-compiler/lenses.mjs +173 -0
  557. package/foundation/doc-compiler/links.d.mts +162 -0
  558. package/foundation/doc-compiler/links.mjs +294 -0
  559. package/foundation/doc-compiler/links.test.mjs +192 -0
  560. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  561. package/foundation/doc-compiler/overlays.d.mts +37 -0
  562. package/foundation/doc-compiler/overlays.mjs +206 -0
  563. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  564. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  565. package/foundation/doc-compiler/read.d.mts +127 -0
  566. package/foundation/doc-compiler/read.mjs +325 -0
  567. package/foundation/doc-compiler/read.test.mjs +313 -0
  568. package/foundation/doc-compiler/source.d.mts +33 -0
  569. package/foundation/doc-compiler/source.mjs +128 -0
  570. package/foundation/doc-compiler/tree.d.mts +288 -0
  571. package/foundation/doc-compiler/tree.mjs +876 -0
  572. package/foundation/doc-compiler/tree.test.mjs +606 -0
  573. package/foundation/fs/file-protection.d.mts +33 -0
  574. package/foundation/fs/file-protection.mjs +825 -0
  575. package/foundation/fs/file-protection.test.mjs +250 -0
  576. package/foundation/fs/module-loader.d.mts +1 -0
  577. package/foundation/fs/module-loader.mjs +50 -1
  578. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  579. package/foundation/fs/path-safety.d.mts +3 -2
  580. package/foundation/fs/path-safety.mjs +49 -19
  581. package/foundation/fs/path-safety.test.mjs +50 -0
  582. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  583. package/foundation/identity/provider-identity.d.mts +90 -0
  584. package/foundation/identity/provider-identity.mjs +320 -0
  585. package/foundation/identity/provider-identity.test.mjs +254 -0
  586. package/foundation/identity/providers.d.mts +7 -0
  587. package/foundation/identity/providers.mjs +16 -0
  588. package/foundation/integrations/autolink.d.mts +58 -1
  589. package/foundation/integrations/autolink.mjs +143 -45
  590. package/foundation/integrations/autolink.test.mjs +1 -1
  591. package/foundation/integrations/cli-requirement.d.mts +45 -0
  592. package/foundation/integrations/cli-requirement.mjs +154 -0
  593. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  594. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  595. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  596. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  597. package/foundation/integrations/contribution-inventory.mjs +27 -24
  598. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  599. package/foundation/integrations/integration-warnings.d.mts +9 -2
  600. package/foundation/integrations/integration-warnings.mjs +52 -21
  601. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  602. package/foundation/integrations/integrations.d.mts +63 -3
  603. package/foundation/integrations/integrations.mjs +122 -9
  604. package/foundation/integrations/integrations.test.mjs +415 -1
  605. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  606. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  607. package/foundation/integrations/provider-resolution.d.mts +152 -0
  608. package/foundation/integrations/provider-resolution.mjs +576 -0
  609. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  610. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  611. package/foundation/integrations/theme-descriptor.mjs +44 -0
  612. package/foundation/integrations/validate-contributions.d.mts +2 -0
  613. package/foundation/integrations/validate-contributions.mjs +131 -29
  614. package/foundation/response/base.d.ts +8 -4
  615. package/foundation/response/batch.type.d.mts +33 -0
  616. package/foundation/response/batch.type.mjs +34 -0
  617. package/foundation/response/error-codes.d.mts +3 -1
  618. package/foundation/response/error-codes.d.ts +2 -0
  619. package/foundation/response/error-codes.doc.mjs +13 -4
  620. package/foundation/response/error-codes.mjs +8 -2
  621. package/foundation/response/error-codes.test.mjs +137 -10
  622. package/foundation/response/json-contract.test.mjs +57 -17
  623. package/foundation/response/json.d.mts +4 -2
  624. package/foundation/response/json.mjs +8 -10
  625. package/foundation/response/response-types.doc.d.mts +5 -1
  626. package/foundation/response/response-types.doc.mjs +46 -38
  627. package/foundation/response/response-types.doc.test.mjs +181 -0
  628. package/foundation/response/response.doc.mjs +1 -1
  629. package/foundation/text/string-utils.d.mts +8 -0
  630. package/foundation/text/string-utils.mjs +40 -10
  631. package/foundation/xle/browser.d.mts +3 -3
  632. package/foundation/xle/browser.mjs +3 -3
  633. package/foundation/xle/expand.d.mts +2 -0
  634. package/foundation/xle/expand.mjs +6 -5
  635. package/foundation/xle/expand.test.mjs +54 -0
  636. package/foundation/xle/parse.mjs +1 -1
  637. package/foundation/xle/print.mjs +2 -2
  638. package/foundation/xle/splice.mjs +1 -1
  639. package/foundation/xle/xle.test.mjs +13 -0
  640. package/package.json +10 -11
  641. package/api/layout/_adapter.d.mts +0 -34
  642. package/api/layout/_adapter.mjs +0 -133
  643. package/api/layout/check/check.d.mts +0 -16
  644. package/api/layout/check/check.mjs +0 -40
  645. package/api/layout/expand/expand.d.mts +0 -22
  646. package/api/layout/expand/expand.mjs +0 -153
  647. package/api/layout/grammar/grammar.d.mts +0 -13
  648. package/api/layout/grammar/grammar.mjs +0 -86
  649. package/api/layout/layout.d.mts +0 -6
  650. package/api/layout/layout.mjs +0 -17
  651. package/api/layout/layout.test.mjs +0 -297
  652. package/api/layout/layout.type.d.mts +0 -89
  653. package/api/layout/layout.type.mjs +0 -103
  654. package/api/layout/layoutCheck.doc.d.mts +0 -11
  655. package/api/layout/layoutCheck.doc.mjs +0 -84
  656. package/api/layout/layoutExpand.doc.d.mts +0 -11
  657. package/api/layout/layoutExpand.doc.mjs +0 -106
  658. package/api/layout/layoutGrammar.doc.d.mts +0 -11
  659. package/api/layout/layoutGrammar.doc.mjs +0 -56
  660. package/assets/templates/themes/manifest.json +0 -95
  661. package/clients/cli/commands/layout-check.doc.mjs +0 -54
  662. package/clients/cli/commands/layout-expand.doc.mjs +0 -66
  663. package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
  664. package/clients/cli/commands/layout.doc.mjs +0 -34
  665. package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
  666. package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
  667. package/clients/cli/commands/layout.mjs +0 -263
  668. package/clients/cli/lib/update-check.mjs +0 -83
  669. package/clients/cli/lib/update-check.test.mjs +0 -137
  670. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -302,7 +302,7 @@ function parseAttrToken(token, line) {
302
302
  * Guard against unbounded recursion in the compact parser. A layout tree this
303
303
  * deep is never hand-authored; without the cap the recursive descent blows the
304
304
  * JS call stack and surfaces a raw RangeError (→ ERR_UNKNOWN, no line/col)
305
- * instead of a located ERR_LAYOUT_PARSE. The counter is module-level so it
305
+ * instead of a located parse error. The counter is module-level so it
306
306
  * spans group / attribute sub-streams; each parse entry point resets it.
307
307
  */
308
308
  const MAX_COMPACT_DEPTH = 512;
@@ -3,8 +3,8 @@
3
3
  /**
4
4
  * @file XLE canonical printers — AST → compact (XLE) or outline (XLO) text.
5
5
  *
6
- * Used by `astryx layout check --form …` so either party (agent or human)
7
- * can request the other surface, and by round-trip conformance tests.
6
+ * Used by `checkExpression` so either party (agent or human) can request the
7
+ * other surface, and by round-trip conformance tests.
8
8
  * Printing is best-effort canonical: spelling variants the lexer
9
9
  * normalized are emitted in canonical form.
10
10
  *
@@ -18,7 +18,7 @@
18
18
  *
19
19
  * @input block TSX source (splice) or a name+importPath (import)
20
20
  * @output prepareSpliceModule / parseImportStatements + import-merge helpers
21
- * @position lib/xle — used by expand.mjs; sources gathered in api/layout.mjs
21
+ * @position lib/xle — used by expand.mjs; sources gathered by the caller
22
22
  */
23
23
 
24
24
  const IMPORT_RE =
@@ -10,6 +10,7 @@ import {describe, it, expect} from 'vitest';
10
10
  import {parse, parseCompact, parseOutline, detectForm, XLEParseError} from './parse.mjs';
11
11
  import {toCompact, toOutline} from './print.mjs';
12
12
  import {validate} from './validate.mjs';
13
+ import {expand} from './expand.mjs';
13
14
  import {parseEnumValues, SPACING_STEPS} from './registry.mjs';
14
15
 
15
16
  // ─── parser: compact ───────────────────────────────────────────────────────
@@ -309,6 +310,18 @@ describe('validate', () => {
309
310
  expect(doc.roots[0].hint.block.name).toBe('CardCallout');
310
311
  });
311
312
 
313
+ it('includes --type block when a known block source is unavailable', () => {
314
+ const doc = parse('Bx{card-callout}');
315
+ expect(validate(doc, registry, BLOCKS).errors).toEqual([]);
316
+ const result = expand(doc, registry, {
317
+ componentName: 'Demo',
318
+ blockModules: new Map(),
319
+ });
320
+ expect(result.code).toContain(
321
+ 'astryx template CardCallout --type block',
322
+ );
323
+ });
324
+
312
325
  it('enforces structural pairings', () => {
313
326
  const doc = parse('Bx > Sh');
314
327
  const {errors} = validate(doc, registry, BLOCKS);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/cli",
3
- "version": "0.6.3",
3
+ "version": "0.6.4-canary.06c8fa3",
4
4
  "displayName": "CLI",
5
5
  "description": "Scaffold projects, browse templates, generate themes, and get agent-ready docs from the command line.",
6
6
  "author": "Meta Open Source",
@@ -91,6 +91,7 @@
91
91
  "@babel/types": "7.29.8",
92
92
  "ast-types": "0.16.3",
93
93
  "commander": "^12.1.0",
94
+ "ignore": "^7.0.5",
94
95
  "jiti": "^2.7.0",
95
96
  "jscodeshift": "^17.3.0",
96
97
  "node-diff3": "3.2.1",
@@ -100,11 +101,10 @@
100
101
  "zod": "^4.4.3"
101
102
  },
102
103
  "peerDependencies": {
103
- "@astryxdesign/charts": "*",
104
- "@astryxdesign/core": "*",
105
- "@astryxdesign/lab": "*",
106
- "@astryxdesign/theme-neutral": "*",
107
- "gpt-tokenizer": "^3.4.0"
104
+ "@astryxdesign/charts": "0.6.4-canary.06c8fa3",
105
+ "@astryxdesign/core": "0.6.4-canary.06c8fa3",
106
+ "@astryxdesign/lab": "0.6.4-canary.06c8fa3",
107
+ "@astryxdesign/theme-neutral": "0.6.4-canary.06c8fa3"
108
108
  },
109
109
  "peerDependenciesMeta": {
110
110
  "@astryxdesign/charts": {
@@ -121,14 +121,13 @@
121
121
  }
122
122
  },
123
123
  "devDependencies": {
124
- "@astryxdesign/charts": "*",
125
- "@astryxdesign/core": "*",
126
- "@astryxdesign/lab": "*",
127
- "@astryxdesign/theme-neutral": "*",
124
+ "@astryxdesign/charts": "0.6.4-canary.06c8fa3",
125
+ "@astryxdesign/core": "0.6.4-canary.06c8fa3",
126
+ "@astryxdesign/lab": "0.6.4-canary.06c8fa3",
127
+ "@astryxdesign/theme-neutral": "0.6.4-canary.06c8fa3",
128
128
  "@heroicons/react": "^2.2.0",
129
129
  "@stylexjs/stylex": "^0.19.0",
130
130
  "@types/babel__core": "^7.20.5",
131
- "gpt-tokenizer": "^3.4.0",
132
131
  "lucide-react": "^1.18.0",
133
132
  "recharts": "^3.9.2"
134
133
  },
@@ -1,34 +0,0 @@
1
- // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
- // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
-
4
- /** @param {import('../../foundation/xle/xle-ast').RawIssue} issue */
5
- export function formatIssue(issue: import("../../foundation/xle/xle-ast").RawIssue): string;
6
- /**
7
- * Parse + validate, throwing structured XDSErrors on failure.
8
- * Returns {doc, registry, blocks, warnings}.
9
- *
10
- * @param {string} expression
11
- * @param {{form?: 'compact'|'outline'|'auto', loose?: boolean, cwd?: string}} [options]
12
- */
13
- export function analyze(expression: string, { form, loose, cwd }?: {
14
- form?: "compact" | "outline" | "auto";
15
- loose?: boolean;
16
- cwd?: string;
17
- }): Promise<{
18
- doc: import("../../foundation/xle/xle-ast").XLEDoc;
19
- registry: import("../../foundation/xle/xle-ast").Registry;
20
- blocks: LayoutBlock[];
21
- errors: import("../../foundation/xle/xle-ast").RawIssue[];
22
- warnings: import("../../foundation/xle/xle-ast").RawIssue[];
23
- }>;
24
- export type LayoutBlock = {
25
- dirName: string;
26
- name: string;
27
- kind: "template" | "component";
28
- type?: string | undefined;
29
- description?: string | undefined;
30
- category?: string | undefined;
31
- importPath?: string | undefined;
32
- filePath?: string | undefined;
33
- isDefault?: boolean | undefined;
34
- };
@@ -1,133 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Shared analysis layer for the `layout` command's expand/check leaves.
5
- *
6
- * Loads the block catalog (template blocks + app-registered components), builds
7
- * the branch registry, and parses+validates a layout expression into a doc +
8
- * issues. Both the expand and check leaves sit on `analyze`; neither parses or
9
- * validates directly. (The grammar leaf needs none of this — it only reads the
10
- * registry alias table.)
11
- *
12
- * @input expression string (+ options)
13
- * @output analyze() -> {doc, registry, blocks, errors, warnings}; formatIssue()
14
- * @position api — shared core over lib/xle; leaves in expand/ + check/ project it
15
- */
16
-
17
- import {AstryxError} from '../error.mjs';
18
- import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
19
- import {parse, XLEParseError} from '../../foundation/xle/parse.mjs';
20
- import {validate} from '../../foundation/xle/validate.mjs';
21
- import {buildRegistry} from '../../foundation/xle/registry.mjs';
22
- import {discoverTemplates} from '../template/template.mjs';
23
- import {Project} from '../../foundation/config/project.mjs';
24
-
25
- /**
26
- * @typedef {object} LayoutBlock
27
- * @property {string} dirName
28
- * @property {string} name
29
- * @property {'template'|'component'} kind
30
- * @property {string} [type]
31
- * @property {string} [description]
32
- * @property {string} [category]
33
- * @property {string} [importPath]
34
- * @property {string} [filePath]
35
- * @property {boolean} [isDefault]
36
- */
37
-
38
- /**
39
- * The catalog a `{hint}` can resolve to: template blocks (spliced inline) plus
40
- * any app-registered local components from astryx.config.mjs
41
- * `experimental.xle.components` (imported by name). App components are how XLE
42
- * reaches domain pieces — the KpiCard/chart/drawer set that the
43
- * @astryxdesign/core registry can't see.
44
- *
45
- * @param {string} cwd
46
- * @returns {Promise<LayoutBlock[]>}
47
- */
48
- async function loadBlocks(cwd) {
49
- /** @type {LayoutBlock[]} */
50
- const blocks = [];
51
- try {
52
- const all = await discoverTemplates(cwd);
53
- for (const t of all) if (t.type === 'block') blocks.push({...t, kind: 'template'});
54
- } catch {
55
- // discovery is best-effort
56
- }
57
- try {
58
- const project = await Project.load(cwd);
59
- /** @type {Record<string, {from?: string, description?: string, default?: boolean}>} */
60
- const components = project.config.experimental?.xle?.components ?? {};
61
- for (const [name, spec] of Object.entries(components)) {
62
- const importPath = spec.from;
63
- if (!importPath) continue;
64
- blocks.push({
65
- type: 'block',
66
- kind: 'component',
67
- dirName: name,
68
- name,
69
- description: spec.description ?? '',
70
- category: 'app',
71
- importPath,
72
- isDefault: Boolean(spec.default),
73
- });
74
- }
75
- } catch {
76
- // config is optional
77
- }
78
- return blocks;
79
- }
80
-
81
- /** @param {import('../../foundation/xle/xle-ast').RawIssue} issue */
82
- export function formatIssue(issue) {
83
- const where = issue.line != null ? `line ${issue.line}: ` : '';
84
- return `${where}${issue.message}`;
85
- }
86
-
87
- /**
88
- * Parse + validate, throwing structured XDSErrors on failure.
89
- * Returns {doc, registry, blocks, warnings}.
90
- *
91
- * @param {string} expression
92
- * @param {{form?: 'compact'|'outline'|'auto', loose?: boolean, cwd?: string}} [options]
93
- */
94
- export async function analyze(expression, {form = 'auto', loose = false, cwd = process.cwd()} = {}) {
95
- // Validate inputs in the API (not just the CLI): an empty expression or an
96
- // unknown --form must error, not silently parse as an empty/compact layout.
97
- if (typeof expression !== 'string' || expression.trim() === '') {
98
- throw new AstryxError(
99
- 'Layout expression is empty.',
100
- undefined,
101
- ERROR_CODES.ERR_INVALID_ARGUMENT,
102
- );
103
- }
104
- if (form !== 'compact' && form !== 'outline' && form !== 'auto') {
105
- throw new AstryxError(
106
- `Invalid form "${form}". Must be one of: compact, outline, auto.`,
107
- undefined,
108
- ERROR_CODES.ERR_INVALID_OPTION,
109
- );
110
- }
111
- const registry = /** @type {import('../../foundation/xle/xle-ast').Registry} */ (
112
- /** @type {unknown} */ (await buildRegistry({cwd}))
113
- );
114
- const blocks = await loadBlocks(cwd);
115
-
116
- /** @type {import('../../foundation/xle/xle-ast').XLEDoc} */
117
- let doc;
118
- try {
119
- doc = parse(expression, {form});
120
- } catch (e) {
121
- if (e instanceof XLEParseError) {
122
- throw new AstryxError(
123
- `Layout expression syntax error at line ${e.line}, col ${e.col}: ${e.message}`,
124
- undefined,
125
- ERROR_CODES.ERR_LAYOUT_PARSE,
126
- );
127
- }
128
- throw e;
129
- }
130
-
131
- const {errors, warnings} = validate(doc, registry, blocks, {loose});
132
- return {doc, registry, blocks, errors, warnings};
133
- }
@@ -1,16 +0,0 @@
1
- // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
- // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
-
4
- /**
5
- * `astryx layout check "<expr>" [--form compact|outline]`
6
- * Validates without expanding; echoes both canonical surfaces.
7
- *
8
- * @param {string} expression
9
- * @param {{form?: 'compact'|'outline'|'auto', loose?: boolean, cwd?: string}} [options]
10
- * @returns {Promise<import('../layout.type.mjs').LayoutCheckResponse>}
11
- */
12
- export function layoutCheck(expression: string, options?: {
13
- form?: "compact" | "outline" | "auto";
14
- loose?: boolean;
15
- cwd?: string;
16
- }): Promise<import("../layout.type.mjs").LayoutCheckResponse>;
@@ -1,40 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file `astryx layout check` leaf — validate a layout expression without
5
- * expanding, echoing both canonical surfaces (compact + outline). Resolution +
6
- * validation come from ../_adapter.mjs (analyze); this leaf projects the
7
- * `layout.check` envelope.
8
- *
9
- * @input expression string (+ options)
10
- * @output {type:'layout.check', data}
11
- * @position api — leaf over ../_adapter.mjs + lib/xle/print
12
- */
13
-
14
- import {toCompact, toOutline} from '../../../foundation/xle/print.mjs';
15
- import {analyze, formatIssue} from '../_adapter.mjs';
16
-
17
- /**
18
- * `astryx layout check "<expr>" [--form compact|outline]`
19
- * Validates without expanding; echoes both canonical surfaces.
20
- *
21
- * @param {string} expression
22
- * @param {{form?: 'compact'|'outline'|'auto', loose?: boolean, cwd?: string}} [options]
23
- * @returns {Promise<import('../layout.type.mjs').LayoutCheckResponse>}
24
- */
25
- export async function layoutCheck(expression, options = {}) {
26
- const {form = 'auto', loose = false, cwd = process.cwd()} = options;
27
- const {doc, errors, warnings} = await analyze(expression, {form, loose, cwd});
28
-
29
- return {
30
- type: 'layout.check',
31
- data: {
32
- valid: errors.length === 0,
33
- form: doc.form,
34
- errors: errors.map(e => ({...e, formatted: formatIssue(e)})),
35
- warnings: warnings.map(formatIssue),
36
- compact: toCompact(doc),
37
- outline: toOutline(doc),
38
- },
39
- };
40
- }
@@ -1,22 +0,0 @@
1
- // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
- // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
-
4
- /**
5
- * `astryx layout expand "<expr>" [path]`
6
- *
7
- * @param {string} expression
8
- * @param {object} [options]
9
- * @param {string} [options.targetPath] - write TSX here (validated against cwd)
10
- * @param {'compact'|'outline'|'auto'} [options.form]
11
- * @param {boolean} [options.loose] - downgrade unknown {hints} to TODO warnings
12
- * @param {string} [options.name] - generated component name
13
- * @param {string} [options.cwd]
14
- * @returns {Promise<import('../layout.type.mjs').LayoutExpandResponse>}
15
- */
16
- export function layoutExpand(expression: string, options?: {
17
- targetPath?: string | undefined;
18
- form?: "compact" | "auto" | "outline" | undefined;
19
- loose?: boolean | undefined;
20
- name?: string | undefined;
21
- cwd?: string | undefined;
22
- }): Promise<import("../layout.type.mjs").LayoutExpandResponse>;
@@ -1,153 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file `astryx layout expand` leaf — expand a validated layout expression into
5
- * XDS TSX (optionally written to disk). Resolution + validation come from
6
- * ../_adapter.mjs (analyze); this leaf owns block-module assembly, code
7
- * generation, and the path-safe write, and projects the `layout.expand` envelope.
8
- *
9
- * @input expression string (+ options)
10
- * @output {type:'layout.expand', data}
11
- * @position api — leaf over ../_adapter.mjs + lib/xle/expand
12
- */
13
-
14
- import * as fs from 'node:fs';
15
- import * as path from 'node:path';
16
- import {AstryxError} from '../../error.mjs';
17
- import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
18
- import {assertWithin, isFilePathArg, PathSafetyError} from '../../../foundation/fs/path-safety.mjs';
19
- import {detectForm} from '../../../foundation/xle/parse.mjs';
20
- import {expand} from '../../../foundation/xle/expand.mjs';
21
- import {stripTemplateAssetRefs} from '../../template/template.mjs';
22
- import {analyze, formatIssue} from '../_adapter.mjs';
23
-
24
- /** @param {string} name */
25
- const normKey = (name) => name.toLowerCase().replace(/[^a-z0-9]/g, '');
26
-
27
- /**
28
- * Collect the block names referenced by {hints} anywhere in the doc.
29
- * @param {import('../../../foundation/xle/xle-ast').XLEDoc} doc
30
- */
31
- function collectHintNames(doc) {
32
- /** @type {Set<string>} */
33
- const names = new Set();
34
- /** @param {import('../../../foundation/xle/xle-ast').XLEItem} node */
35
- const visitNode = (node) => {
36
- if (!node || node.kind === 'group') {
37
- (node?.children || []).forEach(visit);
38
- return;
39
- }
40
- if (node.hint?.block) names.add(node.hint.block.name);
41
- for (const slot of node.slots || []) {
42
- const value = slot.value;
43
- if (value && typeof value === 'object' && 'hint' in value && value.hint?.block) {
44
- names.add(value.hint.block.name);
45
- }
46
- if (value && typeof value === 'object' && 'subexpr' in value) {
47
- (value.subexpr || []).forEach(visit);
48
- }
49
- }
50
- (node.children || []).forEach(visit);
51
- };
52
- /** @param {import('../../../foundation/xle/xle-ast').XLEItem} item */
53
- const visit = (item) => (item?.kind === 'group' ? item.children.forEach(visit) : visitNode(item));
54
- doc.roots.forEach(visit);
55
- doc.overlays.forEach(visit);
56
- return names;
57
- }
58
-
59
- /**
60
- * Build the blockModules map expand() needs: import-mode for app components,
61
- * splice-mode (reading + asset-stripping the block source) for template blocks.
62
- * Only blocks actually referenced are read.
63
- *
64
- * @param {import('../../../foundation/xle/xle-ast').XLEDoc} doc
65
- * @param {import('../_adapter.mjs').LayoutBlock[]} blocks
66
- * @returns {Map<string, import('../../../foundation/xle/xle-ast').BlockModule>}
67
- */
68
- function buildBlockModules(doc, blocks) {
69
- const referenced = collectHintNames(doc);
70
- if (referenced.size === 0) return new Map();
71
- const byKey = new Map(blocks.map(b => [normKey(b.dirName), b]));
72
- /** @type {Map<string, import('../../../foundation/xle/xle-ast').BlockModule>} */
73
- const modules = new Map();
74
- for (const name of referenced) {
75
- const block = byKey.get(normKey(name));
76
- if (!block) continue;
77
- if (block.kind === 'component') {
78
- modules.set(name, /** @type {import('../../../foundation/xle/xle-ast').BlockModule} */ (/** @type {unknown} */ ({mode: 'import', componentName: block.name, importPath: block.importPath, isDefault: block.isDefault})));
79
- } else if (block.filePath && fs.existsSync(block.filePath)) {
80
- modules.set(name, /** @type {import('../../../foundation/xle/xle-ast').BlockModule} */ ({mode: 'splice', componentName: block.dirName, source: stripTemplateAssetRefs(fs.readFileSync(block.filePath, 'utf-8'))}));
81
- }
82
- }
83
- return modules;
84
- }
85
-
86
- /**
87
- * `astryx layout expand "<expr>" [path]`
88
- *
89
- * @param {string} expression
90
- * @param {object} [options]
91
- * @param {string} [options.targetPath] - write TSX here (validated against cwd)
92
- * @param {'compact'|'outline'|'auto'} [options.form]
93
- * @param {boolean} [options.loose] - downgrade unknown {hints} to TODO warnings
94
- * @param {string} [options.name] - generated component name
95
- * @param {string} [options.cwd]
96
- * @returns {Promise<import('../layout.type.mjs').LayoutExpandResponse>}
97
- */
98
- export async function layoutExpand(expression, options = {}) {
99
- const {targetPath, form = 'auto', loose = false, name, cwd = process.cwd()} = options;
100
- const {doc, registry, blocks, errors, warnings} = await analyze(expression, {form, loose, cwd});
101
-
102
- if (errors.length > 0) {
103
- throw new AstryxError(
104
- `Layout expression is invalid:\n` + errors.map(e => ` - ${formatIssue(e)}`).join('\n'),
105
- errors.flatMap(e => (e.suggestions || []).map(s => ({name: s, reason: 'did you mean this?'}))),
106
- ERROR_CODES.ERR_LAYOUT_INVALID,
107
- );
108
- }
109
-
110
- const componentName = name || 'GeneratedLayout';
111
- if (!/^[A-Z][A-Za-z0-9]*$/.test(componentName)) {
112
- throw new AstryxError(
113
- `--name must be a PascalCase component name, got '${componentName}'`,
114
- undefined,
115
- ERROR_CODES.ERR_INVALID_ARGUMENT,
116
- );
117
- }
118
- const blockModules = buildBlockModules(doc, blocks);
119
- const result = expand(doc, registry, {componentName, blockModules});
120
-
121
- let written = null;
122
- if (targetPath) {
123
- let resolved;
124
- try {
125
- resolved = assertWithin(targetPath, cwd, {label: 'layout target path'});
126
- } catch (err) {
127
- if (err instanceof PathSafetyError) {
128
- throw new AstryxError(err.message, undefined, ERROR_CODES.ERR_PATH_TRAVERSAL);
129
- }
130
- throw err;
131
- }
132
- const filePath = isFilePathArg(targetPath)
133
- ? resolved
134
- : path.join(resolved, `${componentName}.tsx`);
135
- fs.mkdirSync(path.dirname(filePath), {recursive: true});
136
- fs.writeFileSync(filePath, result.code);
137
- written = path.relative(cwd, filePath);
138
- }
139
-
140
- return {
141
- type: 'layout.expand',
142
- data: {
143
- form: form === 'auto' ? detectForm(expression) : form,
144
- code: result.code,
145
- componentsUsed: result.componentsUsed,
146
- states: result.states,
147
- todos: result.todos,
148
- blocksReferenced: [...blockModules.entries()].map(([name, m]) => ({name, mode: m.mode})),
149
- warnings: warnings.map(formatIssue),
150
- written,
151
- },
152
- };
153
- }
@@ -1,13 +0,0 @@
1
- // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
- // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
-
4
- /**
5
- * `astryx layout grammar` — the agent cheatsheet, with the alias table
6
- * generated from this branch's registry (never hand-maintained).
7
- *
8
- * @param {{cwd?: string}} [options]
9
- * @returns {Promise<import('../layout.type.mjs').LayoutGrammarResponse>}
10
- */
11
- export function layoutGrammar(options?: {
12
- cwd?: string;
13
- }): Promise<import("../layout.type.mjs").LayoutGrammarResponse>;
@@ -1,86 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file `astryx layout grammar` leaf — the agent cheatsheet, with the alias
5
- * table generated from this branch's registry (never hand-maintained). Reads
6
- * only the registry; shares nothing with expand/check, so it has no adapter.
7
- *
8
- * @output {type:'layout.grammar', data}
9
- * @position api — leaf over lib/xle/registry
10
- */
11
-
12
- import {buildRegistry} from '../../../foundation/xle/registry.mjs';
13
-
14
- /**
15
- * `astryx layout grammar` — the agent cheatsheet, with the alias table
16
- * generated from this branch's registry (never hand-maintained).
17
- *
18
- * @param {{cwd?: string}} [options]
19
- * @returns {Promise<import('../layout.type.mjs').LayoutGrammarResponse>}
20
- */
21
- export async function layoutGrammar(options = {}) {
22
- const {cwd = process.cwd()} = options;
23
- const registry = await buildRegistry({cwd});
24
-
25
- /** @type {string[]} */
26
- const aliasLines = [];
27
- /** @type {Map<string, string[]>} */
28
- const byTarget = new Map();
29
- for (const [alias, target] of registry.aliases) {
30
- if (!byTarget.has(target)) byTarget.set(target, []);
31
- byTarget.get(target)?.push(alias);
32
- }
33
- for (const [target, aliases] of [...byTarget.entries()].sort(([a], [b]) => a.localeCompare(b))) {
34
- aliasLines.push(`${aliases.join('/')}=${target}`);
35
- }
36
-
37
- const text = `XLE/XLO — XDS layout expressions (branch-generated; aliases reflect this install)
38
-
39
- WORKFLOW
40
- astryx layout check "<expr>" validate; echoes canonical compact + outline forms
41
- astryx layout expand "<expr>" [path] emit validated TSX (path optional; --name <Pascal>)
42
- Errors carry line/col + suggestions. Fix and resubmit; nothing is guessed.
43
-
44
- TWO SURFACES, ONE LANGUAGE (autodetected; --form to force)
45
- compact: A[cp6 @topNav=TN] > L > LC > S[p6] > (C{card-callout}*4) + T
46
- outline: indentation = nesting · same-indent = siblings · "repeat N:" block = (...)*N
47
- slot lines: topNav: TN (or a block: topNav:\\n TN ...)
48
-
49
- NODE ANATOMY Name#id.enum"payload"[attrs]{hint}*N > children
50
- .enum unique enum value of any prop: Bd.success Tx.lg B.primary
51
- "payload" primary text prop (label/title/heading) or text child: TI"Email" B"Save"
52
- {hint} kebab-case template/component reference (see TEMPLATE REFERENCING) — NEVER text
53
- *N / xN repeat (use $ for the counter: Tk"item-$"*3)
54
- trailing ! initial selection for scaffolded state: Tab"Overview"!
55
-
56
- ATTRS [...] (outline: bare tokens after the name, no brackets)
57
- fused p6 g4 c4 w240 h2 cp2 mw960 rg2 cg2 (per-component: padding lives on Card/Section/AppShell.cp — p6 on AppShell/Layout/VStack errors with a correction)
58
- key=value t=email href='/x' c{min:340} dv=[top,bottom] — keys validated per component
59
- flags req opt dis striped hover divider … (isX/hasX props) · negate: !scroll
60
- align j= main axis, a= cross axis — expander picks hAlign/vAlign per stack direction
61
- slots @slotName=Node | @slotName=(sub > expr) | @slotName='text' | @slotName=#id
62
- trigger opens=#id (a plain attr, no @ — binds an onClick that opens the overlay)
63
- fill on a stack child → wraps in <StackItem size="fill">
64
-
65
- TEMPLATE REFERENCING ({hint} pulls in real content — this is how XLE reaches past the @astryxdesign/core shell)
66
- C{card-callout} splice a template block (astryx template --list --type block):
67
- the block is co-defined once in the file, referenced, imports merged
68
- {kpi-card} standalone reference (no wrapper element) — place a component directly
69
- {kpi-card}*4 repeat a reference; the definition/import is emitted once
70
- app components register local ones in astryx.config.mjs to import them by name:
71
- export default {experimental: {xle: {components: {KpiCard: {from: '@/components/KpiCard'}}}}}
72
- then {kpi-card} → import {KpiCard} + <KpiCard /> (kebab ↔ Pascal)
73
-
74
- STRUCTURE THE EXPANDER HANDLES
75
- Layout > LH + LC + LF + LP children auto-route into header/content/footer/start slots
76
- T > (TR>THC*4) + (TR>TC*4)*6 rows partition into TableHeader/TableBody automatically
77
- TabList/inputs required value+onChange scaffold typed useState automatically
78
- overlays compact: tree ;; Dlg#confirm[...] · outline: overlays: section
79
- trigger: B"Delete"[opens=#confirm]
80
-
81
- ALIASES (full component names always valid; XDS prefix optional)
82
- ${aliasLines.join(' ')}
83
- `;
84
-
85
- return {type: 'layout.grammar', data: {text, aliases: Object.fromEntries(registry.aliases)}};
86
- }
@@ -1,6 +0,0 @@
1
- // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
- // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
-
4
- export { layoutExpand } from "./expand/expand.mjs";
5
- export { layoutCheck } from "./check/check.mjs";
6
- export { layoutGrammar } from "./grammar/grammar.mjs";
@@ -1,17 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file `layout` command barrel — re-exports the expand/check/grammar leaves so
5
- * the CLI (cli/commands/layout.mjs) and scripted callers import from one place.
6
- * Each leaf is also importable directly (e.g. api/layout/expand/expand.mjs). The
7
- * shared analysis core lives in ./_adapter.mjs. `layout` has real subcommands,
8
- * so there is no flag-dispatch here — the CLI calls the leaf it wants.
9
- *
10
- * @input layout expressions (+ options), per leaf
11
- * @output {type, data} envelopes: layout.expand / layout.check / layout.grammar
12
- * @position api — command barrel over the expand/check/grammar leaves
13
- */
14
-
15
- export {layoutExpand} from './expand/expand.mjs';
16
- export {layoutCheck} from './check/check.mjs';
17
- export {layoutGrammar} from './grammar/grammar.mjs';