@astryxdesign/cli 0.6.3-canary.ea2f048 → 0.6.3-canary.ee13359

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 (571) hide show
  1. package/README.md +114 -76
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/build.doc.mjs +4 -3
  4. package/api/build/build.test.mjs +14 -3
  5. package/api/build/build.type.d.mts +36 -2
  6. package/api/build/build.type.mjs +25 -4
  7. package/api/build/help/help.d.mts +8 -5
  8. package/api/build/help/help.mjs +56 -6
  9. package/api/component/_adapter.d.mts +6 -12
  10. package/api/component/_adapter.mjs +20 -10
  11. package/api/component/component.doc.mjs +13 -3
  12. package/api/component/component.mjs +91 -14
  13. package/api/component/component.test.mjs +38 -0
  14. package/api/component/component.type.d.mts +22 -11
  15. package/api/component/component.type.mjs +32 -24
  16. package/api/component/detail/blocks/blocks.d.mts +2 -1
  17. package/api/component/detail/blocks/blocks.mjs +4 -3
  18. package/api/component/list/list.d.mts +0 -5
  19. package/api/component/list/list.mjs +40 -11
  20. package/api/discover/discover.doc.mjs +2 -1
  21. package/api/discover/discover.type.d.mts +4 -4
  22. package/api/discover/discover.type.mjs +10 -10
  23. package/api/docs/_adapter.d.mts +230 -41
  24. package/api/docs/_adapter.mjs +734 -108
  25. package/api/docs/compiled-topics.test.mjs +78 -0
  26. package/api/docs/detail/detail.mjs +22 -63
  27. package/api/docs/detail/section/section.d.mts +1 -1
  28. package/api/docs/detail/section/section.mjs +54 -19
  29. package/api/docs/detail/section/section.test.mjs +50 -0
  30. package/api/docs/docs.d.mts +10 -3
  31. package/api/docs/docs.doc.mjs +54 -16
  32. package/api/docs/docs.mjs +53 -10
  33. package/api/docs/docs.test.mjs +164 -4
  34. package/api/docs/docs.type.d.mts +205 -5
  35. package/api/docs/docs.type.mjs +137 -11
  36. package/api/docs/index/index.d.mts +18 -0
  37. package/api/docs/index/index.mjs +40 -0
  38. package/api/docs/index/index.test.mjs +62 -0
  39. package/api/docs/integration-tree.test.mjs +547 -0
  40. package/api/docs/integrationDocs.test.mjs +114 -8
  41. package/api/docs/list/list.mjs +28 -12
  42. package/api/docs/node/node.d.mts +43 -0
  43. package/api/docs/node/node.mjs +192 -0
  44. package/api/doctor/doctor.d.mts +99 -1
  45. package/api/doctor/doctor.doc.mjs +1 -0
  46. package/api/doctor/doctor.mjs +544 -1
  47. package/api/doctor/doctor.test.mjs +610 -1
  48. package/api/gap-report/gap-report.doc.mjs +8 -4
  49. package/api/hook/_adapter.mjs +19 -5
  50. package/api/hook/hook.doc.mjs +1 -0
  51. package/api/hook/hook.type.d.mts +3 -3
  52. package/api/hook/hook.type.mjs +11 -11
  53. package/api/hook/list/list.d.mts +2 -2
  54. package/api/hook/list/list.mjs +69 -17
  55. package/api/index.d.mts +1 -1
  56. package/api/index.mjs +1 -0
  57. package/api/init/init.doc.mjs +6 -1
  58. package/api/init/init.test.mjs +41 -1
  59. package/api/init/remove/remove.mjs +1 -1
  60. package/api/init/run/run.mjs +20 -10
  61. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  62. package/api/integration/add-contribution.d.mts +2 -1
  63. package/api/integration/add-contribution.mjs +130 -15
  64. package/api/integration/add-contribution.test.mjs +258 -7
  65. package/api/integration/add-theme.mjs +34 -64
  66. package/api/integration/add-theme.test.mjs +105 -21
  67. package/api/integration/authoring-checks.mjs +108 -31
  68. package/api/integration/authoring-checks.test.mjs +171 -6
  69. package/api/integration/authoring-checks.type.d.mts +3 -1
  70. package/api/integration/authoring-checks.type.mjs +3 -1
  71. package/api/integration/integration-authoring.type.d.mts +3 -1
  72. package/api/integration/integration-authoring.type.mjs +2 -0
  73. package/api/integration/integration-block-exports.test.mjs +10 -6
  74. package/api/integration/integrationAdd.doc.mjs +14 -4
  75. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  76. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  77. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  78. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  79. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  80. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  81. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  82. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  83. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  84. package/api/integration/integrationTemplateConflicts.doc.mjs +7 -5
  85. package/api/integration/pack-check.mjs +83 -7
  86. package/api/integration/pack-check.test.mjs +387 -47
  87. package/api/integration/pack-check.type.d.mts +26 -2
  88. package/api/integration/pack-check.type.mjs +14 -1
  89. package/api/integration/summarizeIssues.doc.mjs +1 -0
  90. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  91. package/api/integration/validate-integration.mjs +52 -102
  92. package/api/integration/validate-integration.test.mjs +179 -26
  93. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  94. package/api/integration/validateIntegration.doc.mjs +3 -2
  95. package/api/json/assertResponse.doc.mjs +1 -0
  96. package/api/json/envelope-types.test.mjs +76 -0
  97. package/api/json/index.ts +2 -0
  98. package/api/json/isError.doc.mjs +1 -0
  99. package/api/json/parseResponse.doc.mjs +3 -2
  100. package/api/layout/_adapter.mjs +20 -5
  101. package/api/layout/expand/expand.mjs +7 -5
  102. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  103. package/api/layout/grammar/grammar.mjs +2 -1
  104. package/api/layout/layoutCheck.doc.mjs +1 -0
  105. package/api/layout/layoutExpand.doc.mjs +2 -1
  106. package/api/layout/layoutGrammar.doc.mjs +1 -0
  107. package/api/search/search-return-type.test.mjs +54 -0
  108. package/api/search/search.d.mts +29 -11
  109. package/api/search/search.doc.mjs +8 -2
  110. package/api/search/search.mjs +337 -41
  111. package/api/search/search.test.mjs +124 -1
  112. package/api/search/search.type.d.mts +15 -3
  113. package/api/search/search.type.mjs +5 -2
  114. package/api/swizzle/copy/copy.mjs +28 -11
  115. package/api/swizzle/swizzle.doc.mjs +2 -1
  116. package/api/swizzle/swizzle.type.d.mts +2 -2
  117. package/api/swizzle/swizzle.type.mjs +2 -2
  118. package/api/template/copy/copy.mjs +17 -23
  119. package/api/template/copy/copy.test.mjs +17 -0
  120. package/api/template/list/list.mjs +1 -0
  121. package/api/template/template-integration.test.mjs +1022 -3
  122. package/api/template/template-suffix.test.mjs +41 -21
  123. package/api/template/template.d.mts +1 -1
  124. package/api/template/template.doc.mjs +30 -8
  125. package/api/template/template.mjs +45 -8
  126. package/api/template/template.type.d.mts +12 -14
  127. package/api/template/template.type.mjs +15 -14
  128. package/api/theme/_adapter.d.mts +2 -3
  129. package/api/theme/_adapter.mjs +4 -5
  130. package/api/theme/add/add.binary.test.mjs +84 -0
  131. package/api/theme/add/add.mjs +20 -3
  132. package/api/theme/add/add.staging.test.mjs +66 -0
  133. package/api/theme/add/add.test.mjs +14 -1
  134. package/api/theme/build/build.mjs +133 -42
  135. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  136. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  137. package/api/theme/build/build.test.mjs +127 -0
  138. package/api/theme/build/font-warning.mjs +3 -3
  139. package/api/theme/build/font-warning.test.mjs +5 -2
  140. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  141. package/api/theme/integration-themes.test.mjs +39 -28
  142. package/api/theme/list/list.test.mjs +19 -20
  143. package/api/theme/listThemes.doc.mjs +6 -5
  144. package/api/theme/palette/generate/generate.mjs +8 -3
  145. package/api/theme/palette/generate/generate.test.mjs +96 -0
  146. package/api/theme/palette/generate/generator.d.mts +10 -13
  147. package/api/theme/palette/generate/generator.mjs +15 -4
  148. package/api/theme/palette/generate/generator.test.mjs +10 -0
  149. package/api/theme/template/template.mjs +11 -2
  150. package/api/theme/template/template.test.mjs +20 -0
  151. package/api/theme/theme.type.d.mts +170 -11
  152. package/api/theme/theme.type.mjs +94 -27
  153. package/api/theme/themeAdd.doc.mjs +4 -3
  154. package/api/theme/themeBuild.doc.mjs +8 -4
  155. package/api/theme/themeList.doc.mjs +6 -3
  156. package/api/theme/themeListAvailable.doc.mjs +5 -3
  157. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  158. package/api/theme/themeTargets.doc.mjs +1 -0
  159. package/api/theme/themeTemplate.doc.mjs +6 -2
  160. package/api/upgrade/_adapter.d.mts +32 -5
  161. package/api/upgrade/_adapter.mjs +139 -22
  162. package/api/upgrade/list/list.mjs +2 -1
  163. package/api/upgrade/list/list.test.mjs +73 -0
  164. package/api/upgrade/project-context.test.mjs +272 -0
  165. package/api/upgrade/provider-agreement.test.mjs +152 -0
  166. package/api/upgrade/run/run.mjs +356 -59
  167. package/api/upgrade/status/status.mjs +2 -2
  168. package/api/upgrade/upgrade.doc.mjs +12 -5
  169. package/api/upgrade/upgrade.type.d.mts +43 -5
  170. package/api/upgrade/upgrade.type.mjs +27 -11
  171. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  172. package/assets/codemods/integration-discovery.mjs +48 -4
  173. package/assets/codemods/integration-discovery.test.mjs +73 -0
  174. package/assets/codemods/integration-runner.mjs +56 -4
  175. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  176. package/assets/codemods/run-codemod.mjs +177 -34
  177. package/assets/codemods/runner.mjs +350 -102
  178. package/assets/codemods/term-log.mjs +32 -8
  179. package/assets/codemods/term-log.test.mjs +19 -1
  180. package/assets/codemods/transform-prop.mjs +109 -0
  181. package/assets/codemods/transform-prop.test.mjs +95 -0
  182. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  183. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  184. package/assets/codemods/transforms/next/index.mjs +19 -1
  185. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  186. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  187. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  188. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  189. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  190. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  191. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  192. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  193. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  194. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  195. package/assets/docs/README.md +9 -0
  196. package/assets/docs/authoring.doc.mjs +14 -0
  197. package/assets/docs/getting-started.doc.mjs +2 -2
  198. package/assets/docs/principles.doc.mjs +6 -6
  199. package/assets/docs/styling-libraries.doc.mjs +3 -3
  200. package/assets/docs/styling.doc.mjs +4 -4
  201. package/assets/docs/theme.doc.mjs +4 -4
  202. package/assets/docs/tokens.doc.mjs +1 -1
  203. package/assets/docs/tree/api.doc.mjs +30 -0
  204. package/assets/docs/tree/cli.doc.mjs +23 -0
  205. package/assets/docs/tree/commands.doc.mjs +25 -0
  206. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +124 -25
  207. package/assets/docs/tree/integrations.test.mjs +62 -0
  208. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  209. package/assets/docs/working-with-ai.doc.mjs +1 -1
  210. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  211. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  212. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  213. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  214. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  215. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  216. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  217. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  218. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  219. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  220. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  221. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  222. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  223. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  224. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  225. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  226. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  227. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  228. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  229. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  230. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  231. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  232. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  233. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  234. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  235. package/authoring/_shared/contract.ts +22 -0
  236. package/authoring/codemod/codemod.doc.mjs +7 -2
  237. package/authoring/codemod/parse.d.mts +8 -8
  238. package/authoring/codemod/parse.mjs +8 -6
  239. package/authoring/codemod/type.ts +12 -0
  240. package/authoring/config/config.doc.mjs +2 -2
  241. package/authoring/config/debug-composition.test.mjs +92 -0
  242. package/authoring/config/parse.d.mts +13 -13
  243. package/authoring/config/parse.mjs +8 -8
  244. package/authoring/config/type.ts +18 -6
  245. package/authoring/debug/debug.doc.d.mts +11 -0
  246. package/authoring/debug/debug.doc.mjs +182 -0
  247. package/authoring/debug/parse.d.mts +8 -8
  248. package/authoring/debug/parse.mjs +3 -3
  249. package/authoring/doctypes/_schema.d.mts +718 -23
  250. package/authoring/doctypes/_schema.mjs +519 -39
  251. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  252. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  253. package/authoring/doctypes/base/type.ts +41 -0
  254. package/authoring/doctypes/command/command.doc.mjs +4 -3
  255. package/authoring/doctypes/command/parse.d.mts +2 -2
  256. package/authoring/doctypes/command/parse.mjs +1 -1
  257. package/authoring/doctypes/command/type.ts +5 -4
  258. package/authoring/doctypes/component/component.doc.mjs +6 -3
  259. package/authoring/doctypes/component/parse.d.mts +2 -2
  260. package/authoring/doctypes/component/parse.mjs +1 -1
  261. package/authoring/doctypes/component/type.ts +6 -5
  262. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  263. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  264. package/authoring/doctypes/enum/parse.d.mts +2 -2
  265. package/authoring/doctypes/enum/parse.mjs +1 -1
  266. package/authoring/doctypes/enum/type.ts +4 -2
  267. package/authoring/doctypes/function/function.doc.mjs +7 -2
  268. package/authoring/doctypes/function/parse.d.mts +2 -2
  269. package/authoring/doctypes/function/parse.mjs +1 -1
  270. package/authoring/doctypes/function/type.ts +9 -4
  271. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  272. package/authoring/doctypes/hook/parse.d.mts +2 -2
  273. package/authoring/doctypes/hook/parse.mjs +1 -1
  274. package/authoring/doctypes/hook/type.ts +5 -4
  275. package/authoring/doctypes/legacy.d.mts +8 -6
  276. package/authoring/doctypes/legacy.mjs +5 -4
  277. package/authoring/doctypes/load-contract.test.mjs +208 -0
  278. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  279. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  280. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  281. package/authoring/doctypes/namespace/parse.mjs +25 -0
  282. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  283. package/authoring/doctypes/namespace/type.ts +74 -0
  284. package/authoring/doctypes/parse.d.mts +22 -18
  285. package/authoring/doctypes/parse.mjs +22 -11
  286. package/authoring/doctypes/parse.test.mjs +77 -3
  287. package/authoring/doctypes/reference/parse.d.mts +2 -2
  288. package/authoring/doctypes/reference/parse.mjs +8 -5
  289. package/authoring/doctypes/reference/reference.doc.mjs +20 -5
  290. package/authoring/doctypes/reference/type.ts +53 -5
  291. package/authoring/doctypes/schema/parse.d.mts +2 -2
  292. package/authoring/doctypes/schema/parse.mjs +1 -1
  293. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  294. package/authoring/doctypes/schema/type.ts +4 -4
  295. package/authoring/doctypes/template/parse.d.mts +94 -1
  296. package/authoring/doctypes/template/parse.mjs +40 -2
  297. package/authoring/doctypes/template/parse.test.mjs +26 -2
  298. package/authoring/doctypes/template/template.doc.mjs +13 -3
  299. package/authoring/doctypes/template/type.ts +13 -2
  300. package/authoring/doctypes/theme/parse.d.mts +35 -0
  301. package/authoring/doctypes/theme/parse.mjs +76 -0
  302. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  303. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  304. package/authoring/doctypes/theme/type.ts +42 -0
  305. package/authoring/doctypes/types.ts +12 -10
  306. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  307. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  308. package/authoring/gap-report/parse.d.mts +10 -10
  309. package/authoring/gap-report/parse.mjs +6 -6
  310. package/authoring/gap-report/type.ts +1 -1
  311. package/authoring/identity/identity.doc.d.mts +9 -0
  312. package/authoring/identity/identity.doc.mjs +61 -0
  313. package/authoring/identity/type.ts +132 -0
  314. package/authoring/index.d.mts +2 -0
  315. package/authoring/index.d.ts +52 -17
  316. package/authoring/index.mjs +3 -1
  317. package/authoring/integration/integration.doc.mjs +15 -8
  318. package/authoring/integration/parse.d.mts +2 -2
  319. package/authoring/integration/parse.mjs +1 -1
  320. package/authoring/integration/parse.test.mjs +10 -1
  321. package/authoring/integration/schema.d.mts +6 -4
  322. package/authoring/integration/schema.mjs +9 -3
  323. package/authoring/integration/type.ts +19 -8
  324. package/authoring/shadcn/receipt.d.mts +6 -6
  325. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  326. package/clients/cli/command-load-failure.test.mjs +83 -0
  327. package/clients/cli/commands/blog.doc.mjs +1 -1
  328. package/clients/cli/commands/blog.mjs +23 -8
  329. package/clients/cli/commands/blog.test.mjs +42 -1
  330. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  331. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  332. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  333. package/clients/cli/commands/build-theme.mjs +16 -50
  334. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  335. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  336. package/clients/cli/commands/build.doc.mjs +5 -2
  337. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  338. package/clients/cli/commands/build.mjs +37 -49
  339. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  340. package/clients/cli/commands/build.text-fields.test.mjs +40 -0
  341. package/clients/cli/commands/component/index.mjs +3 -8
  342. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  343. package/clients/cli/commands/component-package.test.mjs +46 -0
  344. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  345. package/clients/cli/commands/component.doc.mjs +1 -1
  346. package/clients/cli/commands/component.test.mjs +19 -0
  347. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  348. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  349. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  350. package/clients/cli/commands/discover.doc.mjs +5 -3
  351. package/clients/cli/commands/discover.mjs +4 -4
  352. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  353. package/clients/cli/commands/docs.doc.mjs +28 -6
  354. package/clients/cli/commands/docs.mjs +238 -24
  355. package/clients/cli/commands/docs.test.mjs +193 -1
  356. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  357. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  358. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  359. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  360. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  361. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  362. package/clients/cli/commands/doctor-integration.test.mjs +83 -8
  363. package/clients/cli/commands/doctor.doc.mjs +1 -1
  364. package/clients/cli/commands/doctor.mjs +30 -25
  365. package/clients/cli/commands/doctor.test.mjs +42 -0
  366. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  367. package/clients/cli/commands/gap-report.test.mjs +72 -0
  368. package/clients/cli/commands/hook/index.mjs +7 -17
  369. package/clients/cli/commands/hook.doc.mjs +1 -1
  370. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  371. package/clients/cli/commands/init.doc.mjs +20 -9
  372. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  373. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  374. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  375. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  376. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  377. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  378. package/clients/cli/commands/integration.doc.mjs +1 -1
  379. package/clients/cli/commands/integration.mjs +1 -0
  380. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  381. package/clients/cli/commands/json-contract.test.mjs +33 -0
  382. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  383. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  384. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  385. package/clients/cli/commands/layout.doc.mjs +3 -3
  386. package/clients/cli/commands/layout.mjs +21 -9
  387. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  388. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  389. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  390. package/clients/cli/commands/manifest.doc.mjs +1 -1
  391. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  392. package/clients/cli/commands/search.doc.mjs +7 -4
  393. package/clients/cli/commands/search.mjs +28 -9
  394. package/clients/cli/commands/search.test.mjs +75 -0
  395. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  396. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  397. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  398. package/clients/cli/commands/template.doc.mjs +52 -13
  399. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  400. package/clients/cli/commands/template.mjs +4 -91
  401. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  402. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  403. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  404. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  405. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  406. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  407. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  408. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  409. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  410. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  411. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  412. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  413. package/clients/cli/commands/theme.doc.mjs +1 -1
  414. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  415. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  416. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  417. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  418. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  419. package/clients/cli/commands/upgrade.mjs +29 -7
  420. package/clients/cli/formatters/index.mjs +164 -1
  421. package/clients/cli/formatters/index.test.mjs +97 -0
  422. package/clients/cli/index.mjs +21 -30
  423. package/clients/cli/latest-version-env.test.mjs +50 -0
  424. package/clients/cli/lib/cli-error.test.mjs +7 -0
  425. package/clients/cli/lib/component-format.mjs +9 -9
  426. package/clients/cli/lib/component-format.test.mjs +1 -1
  427. package/clients/cli/lib/define-command.mjs +32 -6
  428. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  429. package/clients/cli/lib/exit-codes.test.mjs +97 -0
  430. package/clients/cli/lib/hook-format.mjs +19 -10
  431. package/clients/cli/lib/json-shim.mjs +38 -2
  432. package/clients/cli/lib/json-shim.test.mjs +83 -0
  433. package/clients/cli/lib/manifest.d.ts +2 -0
  434. package/clients/cli/lib/manifest.mjs +36 -2
  435. package/clients/cli/lib/manifest.test.mjs +17 -0
  436. package/foundation/agent-docs/agent-docs.d.mts +4 -0
  437. package/foundation/agent-docs/agent-docs.mjs +70 -3
  438. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  439. package/foundation/agent-docs/agent-docs.test.mjs +10 -1
  440. package/foundation/config/integration-debug.test.mjs +28 -3
  441. package/foundation/config/project-themes.test.mjs +11 -19
  442. package/foundation/config/project.d.mts +20 -11
  443. package/foundation/config/project.mjs +263 -91
  444. package/foundation/config/project.test.mjs +270 -21
  445. package/foundation/discovery/authoring-self-docs.d.mts +75 -0
  446. package/foundation/discovery/authoring-self-docs.mjs +224 -0
  447. package/foundation/discovery/authoring-self-docs.test.mjs +165 -0
  448. package/foundation/discovery/authoring-surface.d.mts +74 -0
  449. package/foundation/discovery/authoring-surface.mjs +525 -0
  450. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  451. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  452. package/foundation/discovery/cli-self-docs.mjs +490 -0
  453. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  454. package/foundation/discovery/component-discovery.d.mts +39 -1
  455. package/foundation/discovery/component-discovery.mjs +50 -1
  456. package/foundation/discovery/component-loader.d.mts +35 -38
  457. package/foundation/discovery/component-loader.mjs +53 -222
  458. package/foundation/discovery/docs-discovery.d.mts +116 -11
  459. package/foundation/discovery/docs-discovery.mjs +389 -108
  460. package/foundation/discovery/docs-discovery.test.mjs +325 -20
  461. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  462. package/foundation/discovery/docs-output-budget.mjs +50 -0
  463. package/foundation/discovery/docs-section-key.d.mts +116 -0
  464. package/foundation/discovery/docs-section-key.mjs +322 -0
  465. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  466. package/foundation/discovery/template-adapter.d.mts +113 -11
  467. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  468. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  469. package/foundation/discovery/template-adapter.mjs +774 -83
  470. package/foundation/discovery/template-adapter.test.mjs +57 -0
  471. package/foundation/discovery/theme-discovery.d.mts +67 -7
  472. package/foundation/discovery/theme-discovery.mjs +916 -186
  473. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  474. package/foundation/discovery/theming-targets.test.mjs +4 -0
  475. package/foundation/doc-compiler/bundle.d.mts +47 -0
  476. package/foundation/doc-compiler/bundle.mjs +278 -0
  477. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  478. package/foundation/doc-compiler/compile.d.mts +343 -0
  479. package/foundation/doc-compiler/compile.mjs +558 -0
  480. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  481. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  482. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  483. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  484. package/foundation/doc-compiler/import.d.mts +24 -0
  485. package/foundation/doc-compiler/import.mjs +59 -0
  486. package/foundation/doc-compiler/inputs.d.mts +102 -0
  487. package/foundation/doc-compiler/inputs.mjs +291 -0
  488. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  489. package/foundation/doc-compiler/ir.d.mts +22 -0
  490. package/foundation/doc-compiler/ir.mjs +471 -0
  491. package/foundation/doc-compiler/lenses.d.mts +34 -0
  492. package/foundation/doc-compiler/lenses.mjs +128 -0
  493. package/foundation/doc-compiler/links.d.mts +135 -0
  494. package/foundation/doc-compiler/links.mjs +253 -0
  495. package/foundation/doc-compiler/links.test.mjs +139 -0
  496. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  497. package/foundation/doc-compiler/overlays.d.mts +37 -0
  498. package/foundation/doc-compiler/overlays.mjs +206 -0
  499. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  500. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  501. package/foundation/doc-compiler/read.d.mts +127 -0
  502. package/foundation/doc-compiler/read.mjs +325 -0
  503. package/foundation/doc-compiler/read.test.mjs +313 -0
  504. package/foundation/doc-compiler/source.d.mts +33 -0
  505. package/foundation/doc-compiler/source.mjs +128 -0
  506. package/foundation/doc-compiler/tree.d.mts +288 -0
  507. package/foundation/doc-compiler/tree.mjs +876 -0
  508. package/foundation/doc-compiler/tree.test.mjs +598 -0
  509. package/foundation/fs/file-protection.d.mts +33 -0
  510. package/foundation/fs/file-protection.mjs +825 -0
  511. package/foundation/fs/file-protection.test.mjs +250 -0
  512. package/foundation/fs/module-loader.d.mts +1 -0
  513. package/foundation/fs/module-loader.mjs +50 -1
  514. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  515. package/foundation/fs/path-safety.d.mts +3 -2
  516. package/foundation/fs/path-safety.mjs +49 -19
  517. package/foundation/fs/path-safety.test.mjs +50 -0
  518. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  519. package/foundation/identity/provider-identity.d.mts +90 -0
  520. package/foundation/identity/provider-identity.mjs +320 -0
  521. package/foundation/identity/provider-identity.test.mjs +254 -0
  522. package/foundation/identity/providers.d.mts +7 -0
  523. package/foundation/identity/providers.mjs +16 -0
  524. package/foundation/integrations/autolink.d.mts +58 -1
  525. package/foundation/integrations/autolink.mjs +143 -45
  526. package/foundation/integrations/autolink.test.mjs +1 -1
  527. package/foundation/integrations/cli-requirement.d.mts +45 -0
  528. package/foundation/integrations/cli-requirement.mjs +154 -0
  529. package/foundation/integrations/cli-requirement.test.mjs +109 -0
  530. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  531. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  532. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  533. package/foundation/integrations/contribution-inventory.mjs +27 -24
  534. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  535. package/foundation/integrations/integration-warnings.d.mts +9 -2
  536. package/foundation/integrations/integration-warnings.mjs +52 -21
  537. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  538. package/foundation/integrations/integrations.d.mts +49 -2
  539. package/foundation/integrations/integrations.mjs +81 -8
  540. package/foundation/integrations/integrations.test.mjs +384 -1
  541. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  542. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  543. package/foundation/integrations/provider-resolution.d.mts +152 -0
  544. package/foundation/integrations/provider-resolution.mjs +576 -0
  545. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  546. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  547. package/foundation/integrations/theme-descriptor.mjs +44 -0
  548. package/foundation/integrations/validate-contributions.d.mts +2 -0
  549. package/foundation/integrations/validate-contributions.mjs +131 -29
  550. package/foundation/response/base.d.ts +8 -4
  551. package/foundation/response/error-codes.d.mts +3 -1
  552. package/foundation/response/error-codes.d.ts +2 -0
  553. package/foundation/response/error-codes.doc.mjs +13 -4
  554. package/foundation/response/error-codes.mjs +8 -2
  555. package/foundation/response/error-codes.test.mjs +137 -10
  556. package/foundation/response/json-contract.test.mjs +57 -17
  557. package/foundation/response/json.d.mts +4 -2
  558. package/foundation/response/json.mjs +8 -10
  559. package/foundation/response/response-types.doc.mjs +26 -16
  560. package/foundation/response/response-types.doc.test.mjs +158 -0
  561. package/foundation/response/response.doc.mjs +1 -1
  562. package/foundation/text/string-utils.mjs +22 -10
  563. package/foundation/xle/expand.d.mts +2 -0
  564. package/foundation/xle/expand.mjs +4 -3
  565. package/foundation/xle/expand.test.mjs +54 -0
  566. package/foundation/xle/xle.test.mjs +13 -0
  567. package/package.json +10 -11
  568. package/assets/templates/themes/manifest.json +0 -95
  569. package/clients/cli/lib/update-check.mjs +0 -83
  570. package/clients/cli/lib/update-check.test.mjs +0 -137
  571. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -1,14 +1,16 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('./types').ComponentDoc} ComponentDoc */
5
- /** @typedef {import('./types').HookDoc} HookDoc */
6
- /** @typedef {import('./types').FunctionDoc} FunctionDoc */
7
- /** @typedef {import('./types').ReferenceDoc} ReferenceDoc */
8
- /** @typedef {import('./types').TemplateDoc} TemplateDoc */
9
- /** @typedef {import('./types').SchemaDoc} SchemaDoc */
10
- /** @typedef {import('./types').CommandDoc} CommandDoc */
11
- /** @typedef {import('./types').EnumDoc} EnumDoc */
4
+ /** @typedef {import('./types.js').ComponentDoc} ComponentDoc */
5
+ /** @typedef {import('./types.js').HookDoc} HookDoc */
6
+ /** @typedef {import('./types.js').FunctionDoc} FunctionDoc */
7
+ /** @typedef {import('./types.js').ReferenceDoc} ReferenceDoc */
8
+ /** @typedef {import('./types.js').TemplateDoc} TemplateDoc */
9
+ /** @typedef {import('./types.js').SchemaDoc} SchemaDoc */
10
+ /** @typedef {import('./types.js').CommandDoc} CommandDoc */
11
+ /** @typedef {import('./types.js').EnumDoc} EnumDoc */
12
+ /** @typedef {import('./types.js').NamespaceDoc} NamespaceDoc */
13
+ /** @typedef {import('./types.js').ThemeDoc} ThemeDoc */
12
14
  /**
13
15
  * Validate an unknown loaded doc value into its typed shape, or throw.
14
16
  * Dispatches on the stamped `type`; unstamped docs fall back to
@@ -17,14 +19,16 @@
17
19
  *
18
20
  * @param {unknown} input
19
21
  * @param {string} [label]
20
- * @returns {ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc}
22
+ * @returns {ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc | NamespaceDoc | ThemeDoc}
21
23
  */
22
- export function parseDoc(input: unknown, label?: string): ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc;
23
- export type ComponentDoc = import("./types").ComponentDoc;
24
- export type HookDoc = import("./types").HookDoc;
25
- export type FunctionDoc = import("./types").FunctionDoc;
26
- export type ReferenceDoc = import("./types").ReferenceDoc;
27
- export type TemplateDoc = import("./types").TemplateDoc;
28
- export type SchemaDoc = import("./types").SchemaDoc;
29
- export type CommandDoc = import("./types").CommandDoc;
30
- export type EnumDoc = import("./types").EnumDoc;
24
+ export function parseDoc(input: unknown, label?: string): ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc | NamespaceDoc | ThemeDoc;
25
+ export type ComponentDoc = import("./types.js").ComponentDoc;
26
+ export type HookDoc = import("./types.js").HookDoc;
27
+ export type FunctionDoc = import("./types.js").FunctionDoc;
28
+ export type ReferenceDoc = import("./types.js").ReferenceDoc;
29
+ export type TemplateDoc = import("./types.js").TemplateDoc;
30
+ export type SchemaDoc = import("./types.js").SchemaDoc;
31
+ export type CommandDoc = import("./types.js").CommandDoc;
32
+ export type EnumDoc = import("./types.js").EnumDoc;
33
+ export type NamespaceDoc = import("./types.js").NamespaceDoc;
34
+ export type ThemeDoc = import("./types.js").ThemeDoc;
@@ -4,8 +4,8 @@
4
4
  * @file The doc load boundary. `parseDoc` validates an unknown loaded doc value
5
5
  * into its typed shape (or throws a readable error), dispatching on the stamped
6
6
  * `type` and falling back to legacy shape-sniffing for unstamped docs. Its
7
- * acceptance set matches the old permissive `ComponentDocSchema` exactly, so
8
- * every existing `.doc.*` keeps loading unchanged.
7
+ * acceptance set preserves the old permissive `ComponentDocSchema` while new
8
+ * stamped kinds, including `theme`, use their sealed parser.
9
9
  */
10
10
 
11
11
  import {parseComponent} from './component/parse.mjs';
@@ -15,16 +15,20 @@ import {parseTemplate} from './template/parse.mjs';
15
15
  import {parseSchema} from './schema/parse.mjs';
16
16
  import {parseCommand} from './command/parse.mjs';
17
17
  import {parseEnum} from './enum/parse.mjs';
18
+ import {parseNamespace} from './namespace/parse.mjs';
19
+ import {parseTheme} from './theme/parse.mjs';
18
20
  import {parseLegacyDoc} from './legacy.mjs';
19
21
 
20
- /** @typedef {import('./types').ComponentDoc} ComponentDoc */
21
- /** @typedef {import('./types').HookDoc} HookDoc */
22
- /** @typedef {import('./types').FunctionDoc} FunctionDoc */
23
- /** @typedef {import('./types').ReferenceDoc} ReferenceDoc */
24
- /** @typedef {import('./types').TemplateDoc} TemplateDoc */
25
- /** @typedef {import('./types').SchemaDoc} SchemaDoc */
26
- /** @typedef {import('./types').CommandDoc} CommandDoc */
27
- /** @typedef {import('./types').EnumDoc} EnumDoc */
22
+ /** @typedef {import('./types.js').ComponentDoc} ComponentDoc */
23
+ /** @typedef {import('./types.js').HookDoc} HookDoc */
24
+ /** @typedef {import('./types.js').FunctionDoc} FunctionDoc */
25
+ /** @typedef {import('./types.js').ReferenceDoc} ReferenceDoc */
26
+ /** @typedef {import('./types.js').TemplateDoc} TemplateDoc */
27
+ /** @typedef {import('./types.js').SchemaDoc} SchemaDoc */
28
+ /** @typedef {import('./types.js').CommandDoc} CommandDoc */
29
+ /** @typedef {import('./types.js').EnumDoc} EnumDoc */
30
+ /** @typedef {import('./types.js').NamespaceDoc} NamespaceDoc */
31
+ /** @typedef {import('./types.js').ThemeDoc} ThemeDoc */
28
32
 
29
33
  /**
30
34
  * Validate an unknown loaded doc value into its typed shape, or throw.
@@ -34,7 +38,7 @@ import {parseLegacyDoc} from './legacy.mjs';
34
38
  *
35
39
  * @param {unknown} input
36
40
  * @param {string} [label]
37
- * @returns {ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc}
41
+ * @returns {ComponentDoc | HookDoc | FunctionDoc | ReferenceDoc | TemplateDoc | SchemaDoc | CommandDoc | EnumDoc | NamespaceDoc | ThemeDoc}
38
42
  */
39
43
  export function parseDoc(input, label = 'doc') {
40
44
  const type =
@@ -58,7 +62,14 @@ export function parseDoc(input, label = 'doc') {
58
62
  return parseCommand(input, label);
59
63
  case 'enum':
60
64
  return parseEnum(input, label);
65
+ case 'namespace':
66
+ return parseNamespace(input, label);
67
+ case 'theme':
68
+ return parseTheme(input, label);
69
+ case undefined:
61
70
  default:
71
+ // 0.6.x shape-sniffed unknown stamps. Keep accepting them through the
72
+ // patch compatibility window; canonical writers emit a known stamp.
62
73
  return parseLegacyDoc(input, label);
63
74
  }
64
75
  }
@@ -25,8 +25,18 @@ const goodComponent = {
25
25
  displayName: 'Widget',
26
26
  description: 'A small widget.',
27
27
  props: [
28
- {name: 'label', type: 'string', description: 'Visible label.', required: true},
29
- {name: 'size', type: "'sm' | 'md'", description: 'Control size.', default: "'md'"},
28
+ {
29
+ name: 'label',
30
+ type: 'string',
31
+ description: 'Visible label.',
32
+ required: true,
33
+ },
34
+ {
35
+ name: 'size',
36
+ type: "'sm' | 'md'",
37
+ description: 'Control size.',
38
+ default: "'md'",
39
+ },
30
40
  ],
31
41
  };
32
42
 
@@ -35,7 +45,9 @@ const goodFunction = {
35
45
  name: 'useThing',
36
46
  displayName: 'useThing',
37
47
  description: 'A thing hook.',
38
- params: [{name: 'input', type: 'string', description: 'The input.', required: true}],
48
+ params: [
49
+ {name: 'input', type: 'string', description: 'The input.', required: true},
50
+ ],
39
51
  returns: [{name: 'value', type: 'string', description: 'The result.'}],
40
52
  };
41
53
 
@@ -43,7 +55,11 @@ const goodGeneric = {
43
55
  type: 'generic',
44
56
  name: 'Theming',
45
57
  displayName: 'Theming',
58
+ title: 'Theming',
46
59
  description: 'How theming works.',
60
+ sections: [
61
+ {title: 'Overview', content: [{type: 'prose', text: 'Use a theme.'}]},
62
+ ],
47
63
  };
48
64
 
49
65
  /** Run parseDoc and return the thrown message (asserting it throws). */
@@ -101,6 +117,34 @@ describe('per-kind parsers (stamped format)', () => {
101
117
  expect(() => parseReference(goodGeneric)).not.toThrow();
102
118
  });
103
119
 
120
+ it('normalizes a migrated minimal generic doc to the public shape', () => {
121
+ expect(
122
+ parseReference({
123
+ type: 'generic',
124
+ name: 'Theming',
125
+ description: 'How theming works.',
126
+ }),
127
+ ).toMatchObject({
128
+ type: 'generic',
129
+ name: 'Theming',
130
+ title: 'Theming',
131
+ description: 'How theming works.',
132
+ sections: [],
133
+ });
134
+ });
135
+
136
+ it('rejects duplicate stable section IDs', () => {
137
+ expect(() =>
138
+ parseReference({
139
+ ...goodGeneric,
140
+ sections: [
141
+ {id: 'start', title: 'Start', content: []},
142
+ {id: 'start', title: 'Renamed start', content: []},
143
+ ],
144
+ }),
145
+ ).toThrow(/sections\.1\.id.*duplicate section id/u);
146
+ });
147
+
104
148
  it('keeps nested rich blobs loose (usage/theming/playground passthrough)', () => {
105
149
  expect(() =>
106
150
  parseComponent({
@@ -123,6 +167,16 @@ describe('per-kind parsers (stamped format)', () => {
123
167
  expect(parsed.parent).toBe('WidgetGroup');
124
168
  expect(parsed.relatedDocs).toEqual(['Gauge', 'useThing']);
125
169
  });
170
+
171
+ it('validates graph metadata on unstamped legacy docs', () => {
172
+ expect(() =>
173
+ parseDoc({name: 'Widget', props: [], placement: {parent: ''}}),
174
+ ).toThrow(/placement\.parent/u);
175
+ expect(() => parseDoc({name: 'Widget', props: [], aliases: [1]})).toThrow();
176
+ expect(() =>
177
+ parseDoc({name: 'Widget', props: [], audience: 'secret'}),
178
+ ).toThrow();
179
+ });
126
180
  });
127
181
 
128
182
  describe('parseDoc (load boundary, both formats)', () => {
@@ -175,6 +229,24 @@ describe('parseDoc (load boundary, both formats)', () => {
175
229
  expect(() => parseDoc(hook)).not.toThrow();
176
230
  });
177
231
 
232
+ it('accepts and validates the OLD loose reference-topic shape', () => {
233
+ const reference = {
234
+ name: 'theming',
235
+ title: 'Theming',
236
+ description: 'How theming works.',
237
+ sections: [
238
+ {id: 'start', title: 'Start', content: [{type: 'prose', text: 'Go.'}]},
239
+ ],
240
+ };
241
+ expect(parseDoc(reference)).toEqual(reference);
242
+ expect(() =>
243
+ parseDoc({
244
+ ...reference,
245
+ sections: [{title: 'Start', content: [{type: 'prose'}]}],
246
+ }),
247
+ ).toThrow();
248
+ });
249
+
178
250
  it('accepts BOTH parent and legacy subComponentOf', () => {
179
251
  const withParent = {name: 'A', parent: 'B', props: []};
180
252
  const withSubComponentOf = {
@@ -289,7 +361,9 @@ describe('loadComponentDoc (end-to-end load boundary)', () => {
289
361
  " type: 'generic',",
290
362
  " name: 'Theming',",
291
363
  " displayName: 'Theming',",
364
+ " title: 'Theming',",
292
365
  " description: 'How theming works.',",
366
+ " sections: [{title: 'Overview', content: [{type: 'prose', text: 'Use a theme.'}]}],",
293
367
  '};',
294
368
  ].join('\n'),
295
369
  );
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').ReferenceDoc} ReferenceDoc */
4
+ /** @typedef {import('../types.js').ReferenceDoc} ReferenceDoc */
5
5
  /**
6
6
  * Validate an unknown value as a stamped reference/topic doc, or throw.
7
7
  *
@@ -10,4 +10,4 @@
10
10
  * @returns {ReferenceDoc}
11
11
  */
12
12
  export function parseReference(input: unknown, label?: string): ReferenceDoc;
13
- export type ReferenceDoc = import("../types").ReferenceDoc;
13
+ export type ReferenceDoc = import("../types.js").ReferenceDoc;
@@ -9,7 +9,7 @@
9
9
  import {GenericDocKindSchema} from '../_schema.mjs';
10
10
  import {formatZodError} from '../../_shared/errors.mjs';
11
11
 
12
- /** @typedef {import('../types').ReferenceDoc} ReferenceDoc */
12
+ /** @typedef {import('../types.js').ReferenceDoc} ReferenceDoc */
13
13
 
14
14
  /**
15
15
  * Validate an unknown value as a stamped reference/topic doc, or throw.
@@ -23,8 +23,11 @@ export function parseReference(input, label = 'reference doc') {
23
23
  if (!result.success) {
24
24
  throw new Error(formatZodError(label, result.error));
25
25
  }
26
- // The schema is permissive (it also accepts legacy generic docs), so it is
27
- // deliberately looser than the rich public type; cast through unknown at this
28
- // validated boundary.
29
- return /** @type {ReferenceDoc} */ (/** @type {unknown} */ (result.data));
26
+ const doc = result.data;
27
+ return /** @type {ReferenceDoc} */ ({
28
+ ...doc,
29
+ title: doc.title ?? doc.displayName ?? doc.name,
30
+ description: doc.description ?? '',
31
+ sections: doc.sections ?? [],
32
+ });
30
33
  }
@@ -55,14 +55,14 @@ export const doc = {
55
55
  name: 'replaces',
56
56
  type: 'string',
57
57
  description:
58
- "Name of an existing topic this doc takes the place of. Authored by an integration that serves its own guide instead of the built-in one: on a doc of the same name it swaps the content, and on a doc of another name it also leaves the old name as an alias so `astryx docs <old>` still resolves. Exclusive with `extends`.",
58
+ 'Name of an existing topic this doc takes the place of. Authored by an integration that serves its own guide instead of the built-in one: on a doc of the same name it swaps the content, and on a doc of another name it also leaves the old name as an alias so `astryx docs <old>` still resolves. Exclusive with `extends`.',
59
59
  example: "'getting-started'",
60
60
  },
61
61
  {
62
62
  name: 'extends',
63
63
  type: 'string',
64
64
  description:
65
- 'Name of an existing topic this doc merges onto, section by section: a section whose title matches one in the base replaces it, a section the base does not have is appended. For correcting or adding to a topic rather than owning it. Exclusive with `replaces`.',
65
+ "Name of an existing topic this doc merges onto, section by section: a section whose title matches one in the base replaces it, a section the base does not have is appended. The topic keeps the base's title and description. For correcting or adding to a topic rather than owning it. Exclusive with `replaces`.",
66
66
  example: "'theme'",
67
67
  },
68
68
  {
@@ -72,6 +72,12 @@ export const doc = {
72
72
  'Ordered sections that make up the doc. Each becomes an h2 in full output and can be retrieved via `astryx docs <topic> <section>`.',
73
73
  required: true,
74
74
  fields: [
75
+ {
76
+ name: 'sections[].id',
77
+ type: 'string',
78
+ description:
79
+ 'Stable section anchor. New docs should set this instead of relying on a mutable title.',
80
+ },
75
81
  {
76
82
  name: 'sections[].title',
77
83
  type: 'string',
@@ -89,7 +95,7 @@ export const doc = {
89
95
  name: 'sections[].content',
90
96
  type: 'ReferenceContentBlock[]',
91
97
  description:
92
- 'Ordered content blocks. Mix prose, code, tables, and lists freely.',
98
+ 'Ordered content blocks: prose, heading, code, table, list, and token-ref. Graph-only workflow, collection, and reference blocks are available through GraphContentBlock on NamespaceDoc, without widening this stable union. Inside text, `{@link <target>}` links another doc by identity (`[<provider>:]<kind>:<name>`): the CLI prints the command that opens it, and `astryx doctor` warns on one that names no doc.',
93
99
  required: true,
94
100
  },
95
101
  {
@@ -134,7 +140,11 @@ export const docs = {
134
140
  notes: [
135
141
  {
136
142
  type: 'prose',
137
- text: 'Each `sections[].content` is an ordered array of ReferenceContentBlock, a discriminated union. New block types can be added without breaking existing docs. The same union is reused by the `notes` field on SchemaDoc and CommandDoc.',
143
+ text: 'A stamped generic doc without `title`, `description` or `sections` still loads, as older codemod output does; its title falls back to `displayName` or `name`. Without a description and sections it is not a usable topic, and `astryx doctor` reports it.',
144
+ },
145
+ {
146
+ type: 'prose',
147
+ text: 'Each `sections[].content` is an ordered array of ReferenceContentBlock, the stable discriminated union of prose, heading, code, table, list, and token-ref. Docs-graph-only workflow, collection, and reference blocks are exported separately as GraphContentBlock and accepted by NamespaceDoc. choice, callout, and checklist remain invalid. ReferenceContentBlock is also reused by the `notes` field on SchemaDoc and CommandDoc. Inside text, `{@link <target>}` links another doc by identity (`[<provider>:]<kind>:<name>`): the CLI prints the command that opens it, and `astryx doctor` warns on one that names no doc.',
138
148
  },
139
149
  {
140
150
  type: 'code',
@@ -146,7 +156,12 @@ export const docs = {
146
156
  | { type: 'code'; lang: string; code: string; label?: string }
147
157
  | { type: 'table'; headers: string[]; rows: string[][] }
148
158
  | { type: 'list'; style: 'ordered' | 'unordered' | 'do' | 'dont'; items: string[] }
149
- | { type: 'token-ref'; topic: string; section: string };`,
159
+ | { type: 'token-ref'; topic: string; section: string };
160
+
161
+ type GraphContentBlock =
162
+ | { type: 'workflow'; title?: string; steps: WorkflowStep[] }
163
+ | { type: 'collection'; source: {slot: string}; presentation?: 'list' | 'cards' | 'compact'; whenEmpty?: 'show' | 'omit' }
164
+ | { type: 'reference'; target: string; presentation?: 'summary' | 'compact' };`,
150
165
  },
151
166
  {
152
167
  type: 'prose',
@@ -4,10 +4,53 @@
4
4
  * @file Reference/topic doc types.
5
5
  */
6
6
 
7
+ import type {AuthoredDocGraphFields} from '../base/type.js';
8
+
9
+ /** One step in a renderer-neutral workflow. */
10
+ export interface WorkflowStep {
11
+ title: string;
12
+ description?: string;
13
+ /** Stable doc references that supply detail for this step. */
14
+ references?: string[];
15
+ }
16
+
17
+ /** Ordered procedural guidance. */
18
+ export interface WorkflowDocBlock {
19
+ type: 'workflow';
20
+ title?: string;
21
+ steps: WorkflowStep[];
22
+ }
23
+
24
+ /** A generated view over docs placed in one namespace slot. */
25
+ export interface CollectionDocBlock {
26
+ type: 'collection';
27
+ title?: string;
28
+ source: {slot: string};
29
+ presentation?: 'list' | 'cards' | 'compact';
30
+ whenEmpty?: 'show' | 'omit';
31
+ }
32
+
33
+ /** A bounded projection of one canonical doc. */
34
+ export interface ReferenceDocBlock {
35
+ type: 'reference';
36
+ target: string;
37
+ projection?: {
38
+ fields?: string[];
39
+ sections?: string[];
40
+ };
41
+ presentation?: 'summary' | 'compact' | 'full';
42
+ }
43
+
44
+ /** Graph-only content blocks. These are additive and do not widen the stable
45
+ * {@link ReferenceContentBlock} union consumed by existing exhaustive renderers. */
46
+ export type GraphContentBlock =
47
+ WorkflowDocBlock | CollectionDocBlock | ReferenceDocBlock;
48
+
7
49
  /**
8
50
  * A content block within a reference doc section.
9
- * Ordered array of these makes up a section's content.
10
- * New block types can be added without breaking existing docs.
51
+ * Ordered arrays of these blocks form renderer-neutral documentation content.
52
+ * A new semantic kind must ship with every renderer or fail visibly at a legacy
53
+ * reader boundary until that renderer is available.
11
54
  *
12
55
  * @example
13
56
  * ```
@@ -17,9 +60,12 @@
17
60
  * { type: 'table', headers: ['Token', 'Value'], rows: [['--spacing-4', '16px']] }
18
61
  * { type: 'list', style: 'do', items: ['Use semantic tokens'] }
19
62
  * { type: 'token-ref', topic: 'tokens', section: 'Color Tokens' }
63
+ * { type: 'prose', text: 'Check it with {@link command:doctor}.' }
20
64
  * ```
21
65
  */
22
66
  export type ReferenceContentBlock =
67
+ /** Text. `{@link [<provider>:]<kind>:<name>}` inside it links another doc
68
+ * by identity; `astryx docs` prints the command that opens that doc. */
23
69
  | {type: 'prose'; text: string}
24
70
  | {type: 'heading'; level: 3 | 4 | 5 | 6; text: string}
25
71
  | {type: 'code'; lang: string; code: string; label?: string}
@@ -49,12 +95,12 @@ export type ReferenceContentBlock =
49
95
  * they aren't tied to a specific component — just drop a .doc.mjs file
50
96
  * in the docs/ directory and it shows up in `astryx docs`.
51
97
  *
52
- * Every reference .doc.mjs must export a single `docs` constant:
98
+ * Every new reference .doc.mjs default-exports a stamped object:
53
99
  *
54
100
  * /** @type {import('@astryxdesign/cli/authoring').ReferenceDoc} *\/
55
- * export const docs = { ... };
101
+ * export default { type: 'generic', ... };
56
102
  */
57
- export interface ReferenceDoc {
103
+ export interface ReferenceDoc extends AuthoredDocGraphFields {
58
104
  /** Doc-kind discriminant for the stamped default-export format
59
105
  * (`export default { type: 'generic', ... }`). Optional: legacy
60
106
  * `export const docs = {...}` docs omit it. The value stays `'generic'`
@@ -95,6 +141,8 @@ export interface ReferenceDoc {
95
141
  * and can be individually retrieved via `astryx docs <topic> <section>`.
96
142
  */
97
143
  export interface ReferenceSection {
144
+ /** Stable section anchor. New docs should set this instead of relying on title. */
145
+ id?: string;
98
146
  /** Section title, e.g. "Spacing Tokens", "Light/Dark Mode" */
99
147
  title: string;
100
148
  /** Navigation category ('guide' | 'foundations'). Mirrors the parent doc's
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').SchemaDoc} SchemaDoc */
4
+ /** @typedef {import('../types.js').SchemaDoc} SchemaDoc */
5
5
  /**
6
6
  * Validate an unknown value as a stamped schema doc, or throw.
7
7
  *
@@ -10,4 +10,4 @@
10
10
  * @returns {SchemaDoc}
11
11
  */
12
12
  export function parseSchema(input: unknown, label?: string): SchemaDoc;
13
- export type SchemaDoc = import("../types").SchemaDoc;
13
+ export type SchemaDoc = import("../types.js").SchemaDoc;
@@ -8,7 +8,7 @@
8
8
  import {SchemaDocKindSchema} from '../_schema.mjs';
9
9
  import {formatZodError} from '../../_shared/errors.mjs';
10
10
 
11
- /** @typedef {import('../types').SchemaDoc} SchemaDoc */
11
+ /** @typedef {import('../types.js').SchemaDoc} SchemaDoc */
12
12
 
13
13
  /**
14
14
  * Validate an unknown value as a stamped schema doc, or throw.
@@ -49,7 +49,7 @@ export const doc = {
49
49
  name: 'namespace',
50
50
  type: 'string',
51
51
  description:
52
- "Docs namespace path (e.g. 'cli' | 'authoring'). Defaults are applied by the docs index; set explicitly to place the schema.",
52
+ "The group that reads this doc: 'authoring' for a file an author writes (a section of `astryx docs authoring`), or 'cli/api' for a shape the CLI returns (the docs tree adopts it by kind, as the leaf `cli/api/schemas/<name>`). Every schema doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads.",
53
53
  },
54
54
  {
55
55
  name: 'aliases',
@@ -6,7 +6,8 @@
6
6
  * response envelope). Colocated as a `.doc.mjs` next to the schema it describes.
7
7
  */
8
8
 
9
- import type {ReferenceContentBlock} from '../reference/type';
9
+ import type {AuthoredDocGraphFields} from '../base/type.js';
10
+ import type {ReferenceContentBlock} from '../reference/type.js';
10
11
 
11
12
  /**
12
13
  * One documented field of a schema. Object fields nest via `fields`, so a whole
@@ -37,7 +38,7 @@ export interface SchemaFieldDoc {
37
38
  * /\*\* @type {import('@astryxdesign/cli/authoring').SchemaDoc} \*\/
38
39
  * export const doc = { type: 'schema', name: 'config', ... };
39
40
  */
40
- export interface SchemaDoc {
41
+ export interface SchemaDoc extends AuthoredDocGraphFields {
41
42
  /** Doc-kind discriminant. */
42
43
  type?: 'schema';
43
44
  /** URL-safe identifier, used as the docs slug within its namespace. */
@@ -46,8 +47,7 @@ export interface SchemaDoc {
46
47
  displayName: string;
47
48
  /** One-line summary shown in listings. */
48
49
  description: string;
49
- /** Docs namespace path (e.g. 'cli' | 'authoring'). Defaults are applied by
50
- * the docs index; set explicitly to place the schema. */
50
+ /** The group that reads this doc: 'authoring' for a file an author writes (a section of `astryx docs authoring`), or 'cli/api' for a shape the CLI returns (the docs tree adopts it by kind, as the leaf `cli/api/schemas/<name>`). Every schema doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads. */
51
51
  namespace?: string;
52
52
  /** Alternate slugs that also resolve to this doc (back-compat). */
53
53
  aliases?: string[];
@@ -11,4 +11,97 @@
11
11
  * @returns {TemplateDoc}
12
12
  */
13
13
  export function parseTemplate(input: unknown, label?: string): TemplateDoc;
14
- export type TemplateDoc = import("../types").TemplateDoc;
14
+ export type TemplateDoc = import("../types.js").TemplateDoc;
15
+ export type PageTemplateDoc = import("./type.js").PageTemplateDoc;
16
+ export type BlockTemplateDoc = import("./type.js").BlockTemplateDoc;
17
+ /**
18
+ * Templates as they load. Integration templates already published omit
19
+ * `displayName` and `aspectRatio` and group themselves under their own
20
+ * `category`, so the loader accepts those (template discovery falls back to an
21
+ * aspect ratio of 1). The published types keep asking authors for all three.
22
+ */
23
+ export type LoadedPageTemplateDoc = Omit<PageTemplateDoc, "displayName" | "category"> & {
24
+ displayName?: string;
25
+ category?: string;
26
+ };
27
+ /**
28
+ * Templates as they load. Integration templates already published omit
29
+ * `displayName` and `aspectRatio` and group themselves under their own
30
+ * `category`, so the loader accepts those (template discovery falls back to an
31
+ * aspect ratio of 1). The published types keep asking authors for all three.
32
+ */
33
+ export type LoadedBlockTemplateDoc = Omit<BlockTemplateDoc, "displayName" | "aspectRatio" | "category"> & {
34
+ displayName?: string;
35
+ aspectRatio?: number;
36
+ category?: string;
37
+ };
38
+ export type _PageTemplateDocDriftLock = import("../../_shared/contract.js").Expect<import("../../_shared/contract.js").MutuallyAssignable<import("../../_shared/contract.js").NamedFields<z.infer<typeof pageTemplateSchema>>, import("../../_shared/contract.js").NamedFields<LoadedPageTemplateDoc>>>;
39
+ export type _BlockTemplateDocDriftLock = import("../../_shared/contract.js").Expect<import("../../_shared/contract.js").MutuallyAssignable<import("../../_shared/contract.js").NamedFields<z.infer<typeof blockTemplateSchema>>, import("../../_shared/contract.js").NamedFields<LoadedBlockTemplateDoc>>>;
40
+ import { z } from 'zod';
41
+ declare const pageTemplateSchema: z.ZodObject<{
42
+ type: z.ZodLiteral<"page">;
43
+ name: z.ZodString;
44
+ displayName: z.ZodOptional<z.ZodString>;
45
+ description: z.ZodOptional<z.ZodString>;
46
+ category: z.ZodOptional<z.ZodString>;
47
+ componentsUsed: z.ZodOptional<z.ZodArray<z.ZodString>>;
48
+ preview: z.ZodOptional<z.ZodObject<{
49
+ image: z.ZodOptional<z.ZodString>;
50
+ aspectRatio: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$strict>>;
52
+ isReady: z.ZodOptional<z.ZodBoolean>;
53
+ scaffold: z.ZodOptional<z.ZodBoolean>;
54
+ isHiddenFromOverview: z.ZodOptional<z.ZodBoolean>;
55
+ registry: z.ZodOptional<z.ZodObject<{
56
+ slug: z.ZodOptional<z.ZodString>;
57
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ }, z.core.$strict>>;
59
+ replaces: z.ZodOptional<z.ZodString>;
60
+ placement: z.ZodOptional<z.ZodObject<{
61
+ parent: z.ZodString;
62
+ slot: z.ZodOptional<z.ZodString>;
63
+ order: z.ZodOptional<z.ZodNumber>;
64
+ }, z.core.$strict>>;
65
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
66
+ audience: z.ZodOptional<z.ZodEnum<{
67
+ public: "public";
68
+ internal: "internal";
69
+ }>>;
70
+ }, z.core.$strict>;
71
+ declare const blockTemplateSchema: z.ZodObject<{
72
+ type: z.ZodLiteral<"block">;
73
+ exampleFor: z.ZodOptional<z.ZodString>;
74
+ alsoExampleFor: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ alsoShowcaseFor: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
+ aspectRatio: z.ZodOptional<z.ZodNumber>;
77
+ scale: z.ZodOptional<z.ZodNumber>;
78
+ isShowcase: z.ZodOptional<z.ZodBoolean>;
79
+ name: z.ZodString;
80
+ displayName: z.ZodOptional<z.ZodString>;
81
+ description: z.ZodOptional<z.ZodString>;
82
+ category: z.ZodOptional<z.ZodString>;
83
+ componentsUsed: z.ZodOptional<z.ZodArray<z.ZodString>>;
84
+ preview: z.ZodOptional<z.ZodObject<{
85
+ image: z.ZodOptional<z.ZodString>;
86
+ aspectRatio: z.ZodOptional<z.ZodString>;
87
+ }, z.core.$strict>>;
88
+ isReady: z.ZodOptional<z.ZodBoolean>;
89
+ scaffold: z.ZodOptional<z.ZodBoolean>;
90
+ isHiddenFromOverview: z.ZodOptional<z.ZodBoolean>;
91
+ registry: z.ZodOptional<z.ZodObject<{
92
+ slug: z.ZodOptional<z.ZodString>;
93
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
94
+ }, z.core.$strict>>;
95
+ replaces: z.ZodOptional<z.ZodString>;
96
+ placement: z.ZodOptional<z.ZodObject<{
97
+ parent: z.ZodString;
98
+ slot: z.ZodOptional<z.ZodString>;
99
+ order: z.ZodOptional<z.ZodNumber>;
100
+ }, z.core.$strict>>;
101
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
102
+ audience: z.ZodOptional<z.ZodEnum<{
103
+ public: "public";
104
+ internal: "internal";
105
+ }>>;
106
+ }, z.core.$strict>;
107
+ export {};