@astryxdesign/cli 0.1.7 → 0.1.8-canary.07362a9

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 (389) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +115 -19
  3. package/{src/api → api/blog}/blog.mjs +42 -6
  4. package/{src/api → api/blog}/blog.test.mjs +2 -2
  5. package/api/build/build.mjs +92 -0
  6. package/api/build/build.test.mjs +92 -0
  7. package/{src/api → api/component}/component.mjs +49 -26
  8. package/{src/api → api/discover}/discover.mjs +55 -18
  9. package/{src/api → api/docs}/docs.mjs +47 -21
  10. package/{src/api → api/doctor}/doctor.mjs +13 -10
  11. package/{src/api → api}/error.mjs +2 -2
  12. package/{src/api → api/hook}/hook.mjs +11 -11
  13. package/{src/api → api}/index.mjs +16 -9
  14. package/{src/api → api/integration}/validate-integration.mjs +48 -15
  15. package/{src/api → api/integration}/validate-integration.test.mjs +1 -1
  16. package/{src/api → api/layout}/layout.mjs +66 -17
  17. package/{src/api → api/layout}/layout.test.mjs +1 -1
  18. package/{src/api → api/search}/search.mjs +71 -12
  19. package/api/swizzle/swizzle.mjs +283 -0
  20. package/{src/commands → api/swizzle}/swizzle.test.mjs +26 -1
  21. package/{src/api → api/template}/template-integration.test.mjs +2 -2
  22. package/{src/api → api/template}/template-suffix.test.mjs +3 -3
  23. package/{src/api → api/template}/template.mjs +96 -19
  24. package/{src/api → api/theme}/theme-add.mjs +35 -7
  25. package/{src → authoring}/codemod.mjs +6 -6
  26. package/{src → authoring}/config.test.mjs +1 -1
  27. package/{src → authoring}/doc.mjs +1 -1
  28. package/{src → authoring}/doc.test.mjs +1 -1
  29. package/{src → authoring}/template.mjs +1 -1
  30. package/bin/astryx.mjs +12 -10
  31. package/{src → cli}/commands/blog.mjs +48 -7
  32. package/{src → cli}/commands/build-theme.mjs +133 -115
  33. package/cli/commands/build.mjs +172 -0
  34. package/cli/commands/cli-postinstall.test.mjs +42 -0
  35. package/{src → cli}/commands/component/index.mjs +52 -25
  36. package/{src → cli}/commands/component-ownership.test.mjs +3 -3
  37. package/{src → cli}/commands/component-package.test.mjs +1 -1
  38. package/{src → cli}/commands/component-resolution.test.mjs +2 -2
  39. package/{src → cli}/commands/discover.mjs +23 -12
  40. package/{src → cli}/commands/docs.mjs +42 -10
  41. package/{src → cli}/commands/docs.test.mjs +1 -1
  42. package/{src → cli}/commands/doctor.mjs +3 -3
  43. package/{src → cli}/commands/doctor.test.mjs +2 -2
  44. package/{src → cli}/commands/ensure-core-built.mjs +3 -2
  45. package/{src → cli}/commands/external-showcase.test.mjs +1 -1
  46. package/{src → cli}/commands/hook/index.mjs +40 -17
  47. package/{src → cli}/commands/import-hint-correctness.test.mjs +1 -1
  48. package/cli/commands/init.mjs +195 -0
  49. package/{src → cli}/commands/init.next-steps.test.mjs +1 -1
  50. package/cli/commands/interactive-guard.test.mjs +66 -0
  51. package/{src → cli}/commands/json-contract.test.mjs +2 -2
  52. package/{src → cli}/commands/layout.mjs +59 -19
  53. package/{src → cli}/commands/search.mjs +22 -15
  54. package/{src → cli}/commands/search.test.mjs +1 -1
  55. package/cli/commands/setup-nudge.test.mjs +108 -0
  56. package/cli/commands/swizzle.mjs +103 -0
  57. package/{src → cli}/commands/template.mjs +84 -53
  58. package/{src → cli}/commands/template.path-safety.test.mjs +2 -2
  59. package/{src → cli}/commands/upgrade.integration-policy.test.mjs +1 -1
  60. package/{src → cli}/commands/upgrade.mjs +291 -77
  61. package/cli/commands/upgrade.test.mjs +314 -0
  62. package/{src → cli}/commands/validate-integration.mjs +17 -37
  63. package/{src → cli}/index.mjs +55 -19
  64. package/{src/codemods → codemods}/__tests__/registry.test.mjs +1 -0
  65. package/{src/codemods → codemods}/ensure-jscodeshift.mjs +12 -28
  66. package/{src/codemods → codemods}/integration-discovery.mjs +6 -3
  67. package/{src/codemods → codemods}/integration-discovery.test.mjs +1 -1
  68. package/{src/codemods → codemods}/integration-runner.mjs +8 -3
  69. package/{src/codemods → codemods}/registry.mjs +4 -1
  70. package/{src/codemods → codemods}/run-codemod.mjs +18 -11
  71. package/{src/codemods → codemods}/runner.mjs +24 -14
  72. package/{src/codemods → codemods}/transforms/v0.0.10/remove-size-props.mjs +9 -4
  73. package/{src/codemods → codemods}/transforms/v0.0.12/add-is-icon-only.mjs +27 -22
  74. package/{src/codemods → codemods}/transforms/v0.0.13/icon-name-deprecations.mjs +12 -5
  75. package/{src/codemods → codemods}/transforms/v0.0.13/rename-attachments-to-drawer.mjs +15 -8
  76. package/{src/codemods → codemods}/transforms/v0.0.13/toolbar-density-to-size.mjs +10 -4
  77. package/{src/codemods → codemods}/transforms/v0.0.14/rename-action-props.mjs +11 -5
  78. package/{src/codemods → codemods}/transforms/v0.0.14/rename-section-wash-to-muted.mjs +11 -6
  79. package/{src/codemods → codemods}/transforms/v0.0.14/rename-status-variants.mjs +15 -10
  80. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-item-children-to-endcontent.mjs +13 -8
  81. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-selector-children-to-render-option.mjs +18 -13
  82. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-theme-selectors-to-data-attrs.mjs +8 -4
  83. package/{src/codemods → codemods}/transforms/v0.0.15/rename-date-picker-to-input.mjs +11 -6
  84. package/{src/codemods → codemods}/transforms/v0.0.15/rename-imperative-ref-to-handleRef.mjs +6 -1
  85. package/{src/codemods → codemods}/transforms/v0.0.15/rename-isStreaming-to-isStopShown.mjs +6 -1
  86. package/{src/codemods → codemods}/transforms/v0.0.15/rename-stack-element-to-as.mjs +8 -3
  87. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-badge-dot-to-statusdot.mjs +17 -10
  88. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-gap-to-numeric.mjs +7 -1
  89. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-isFullBleed-to-padding.mjs +9 -4
  90. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-useXDSIcon-to-getIcon.mjs +12 -7
  91. package/{src/codemods → codemods}/transforms/v0.0.2/rename-banner-endButton-to-endContent.mjs +7 -2
  92. package/{src/codemods → codemods}/transforms/v0.0.2/rename-form-tooltip-startIcon.mjs +8 -2
  93. package/{src/codemods → codemods}/transforms/v0.0.2/rename-isShown-to-isOpen.mjs +7 -2
  94. package/{src/codemods → codemods}/transforms/v0.0.2/rename-selector-items-to-options.mjs +7 -2
  95. package/{src/codemods → codemods}/transforms/v0.0.2/rename-sidenav-header-to-heading.mjs +11 -4
  96. package/{src/codemods → codemods}/transforms/v0.0.2/rename-topnav-title-to-heading.mjs +10 -4
  97. package/{src/codemods → codemods}/transforms/v0.0.2/unify-uncontrolled-to-defaultX.mjs +7 -2
  98. package/{src/codemods → codemods}/transforms/v0.0.2/unify-visibility-to-onOpenChange.mjs +10 -5
  99. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-badge-children-to-label.mjs +7 -2
  100. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-collapse-to-collapsible.mjs +9 -3
  101. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-radius-tokens.mjs +11 -5
  102. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-shadow-tokens.mjs +13 -6
  103. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-skeleton-radius.mjs +7 -1
  104. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-token-names.mjs +11 -5
  105. package/{src/codemods → codemods}/transforms/v0.0.7/rename-banner-variant-to-container.mjs +8 -3
  106. package/{src/codemods → codemods}/transforms/v0.0.8/migrate-token-renames.mjs +15 -8
  107. package/{src/codemods → codemods}/transforms/v0.0.8/rename-endslot-to-endcontent.mjs +7 -2
  108. package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/drop-xds-prefix-imports.test.mjs +42 -7
  109. package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-module-specifiers.test.mjs +43 -0
  110. package/{src/codemods → codemods}/transforms/v0.1.0/drop-xds-prefix-imports.mjs +117 -13
  111. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-css-surfaces.mjs +21 -17
  112. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-declare-module.mjs +7 -2
  113. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-module-specifiers.mjs +86 -15
  114. package/{src/codemods → codemods}/transforms/v0.1.2/rename-text-color-active-to-accent.mjs +15 -9
  115. package/{src/codemods → codemods}/transforms/v0.1.3/migrate-layout-components-to-experimental.mjs +17 -12
  116. package/{src/codemods → codemods}/transforms/v0.1.5/rename-switch-label-spacing-default-to-hug.mjs +15 -9
  117. package/{src/codemods → codemods}/transforms/v0.1.7/migrate-table-tableprops-to-direct-props.mjs +17 -10
  118. package/{src/codemods → codemods}/transforms/v0.1.7/rename-table-renderprops-styles-to-xstyle.mjs +18 -13
  119. package/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +161 -0
  120. package/codemods/transforms/v0.1.8/index.mjs +19 -0
  121. package/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +239 -0
  122. package/docs/cli-integrations.doc.mjs +150 -0
  123. package/docs/elevation.doc.mjs +79 -1
  124. package/docs/getting-started.doc.mjs +9 -9
  125. package/docs/internationalization.doc.mjs +92 -46
  126. package/docs/migration.doc.mjs +18 -18
  127. package/docs/principles.doc.dense.mjs +1 -1
  128. package/docs/principles.doc.mjs +6 -6
  129. package/docs/principles.doc.zh.mjs +1 -1
  130. package/docs/styling-libraries.doc.mjs +3 -3
  131. package/docs/styling.doc.mjs +4 -4
  132. package/docs/theme.doc.dense.mjs +2 -2
  133. package/docs/theme.doc.mjs +7 -7
  134. package/docs/theme.doc.zh.mjs +1 -1
  135. package/docs/tokens.doc.mjs +1 -1
  136. package/docs/working-with-ai.doc.mjs +19 -19
  137. package/{src/commands → lib/agent-docs}/agent-docs.mjs +164 -29
  138. package/{src/commands → lib/agent-docs}/agent-docs.path-safety.test.mjs +1 -1
  139. package/{src/commands → lib/agent-docs}/agent-docs.test.mjs +123 -10
  140. package/{src/lib → lib}/cli-error.mjs +2 -2
  141. package/{src/lib → lib}/component-discovery.mjs +44 -2
  142. package/{src/lib → lib}/component-format.mjs +67 -25
  143. package/{src/lib → lib}/component-loader.mjs +27 -13
  144. package/{src/lib → lib}/componentDocOverlay.test.mjs +0 -1
  145. package/{src/lib → lib}/error-codes.test.mjs +1 -1
  146. package/{src/lib → lib}/hook-discovery.mjs +14 -1
  147. package/{src/lib → lib}/hook-format.mjs +29 -5
  148. package/{src/lib → lib}/integration-warnings.mjs +2 -2
  149. package/{src/lib → lib}/integrations.mjs +20 -0
  150. package/{src/lib → lib}/integrations.test.mjs +1 -1
  151. package/{src/lib → lib}/json-contract.test.mjs +1 -1
  152. package/{src/lib → lib}/json-shim.mjs +11 -6
  153. package/{src/lib → lib}/json-shim.test.mjs +1 -1
  154. package/{src/lib → lib}/json.mjs +3 -3
  155. package/{src/lib → lib}/levenshtein.mjs +6 -0
  156. package/{src/lib → lib}/manifest.mjs +7 -5
  157. package/{src/lib → lib}/manifest.test.mjs +2 -2
  158. package/{src/lib → lib}/module-loader.mjs +1 -0
  159. package/{src/lib → lib}/package-scanner.mjs +47 -0
  160. package/{src/lib → lib}/project.mjs +48 -18
  161. package/{src/lib → lib}/project.test.mjs +1 -1
  162. package/{src/lib → lib}/resolve-theme.mjs +5 -0
  163. package/{src/lib → lib}/string-utils.mjs +15 -0
  164. package/lib/term-log.mjs +57 -0
  165. package/{src/lib → lib}/xle/browser.mjs +18 -8
  166. package/{src/lib → lib}/xle/expand.mjs +155 -22
  167. package/{src/lib → lib}/xle/parse.mjs +119 -13
  168. package/{src/lib → lib}/xle/print.mjs +54 -14
  169. package/{src/lib → lib}/xle/registry-core.mjs +28 -3
  170. package/{src/lib → lib}/xle/registry.mjs +9 -4
  171. package/{src/lib → lib}/xle/splice.mjs +13 -2
  172. package/{src/lib → lib}/xle/validate.mjs +95 -14
  173. package/lib/xle/xle-ast.d.ts +214 -0
  174. package/package.json +37 -28
  175. package/scripts/postinstall.mjs +74 -0
  176. package/templates/blocks/components/Avatar/AvatarFallbackChain.tsx +4 -4
  177. package/templates/blocks/components/Avatar/AvatarGroup.tsx +2 -2
  178. package/templates/blocks/components/Avatar/AvatarInitialsFallback.tsx +1 -1
  179. package/templates/blocks/components/Avatar/AvatarShowcase.tsx +5 -5
  180. package/templates/blocks/components/Avatar/AvatarUserCard.tsx +1 -1
  181. package/templates/blocks/components/Avatar/AvatarWithImage.tsx +4 -4
  182. package/templates/blocks/components/Avatar/AvatarWithStatus.tsx +3 -3
  183. package/templates/blocks/components/AvatarGroup/AvatarGroupShowcase.tsx +2 -2
  184. package/templates/blocks/components/AvatarGroupOverflow/AvatarGroupOverflowCustomText.tsx +1 -1
  185. package/templates/blocks/components/AvatarGroupOverflow/AvatarGroupOverflowDefault.tsx +1 -1
  186. package/templates/blocks/components/AvatarGroupOverflow/AvatarGroupOverflowShowcase.tsx +2 -2
  187. package/templates/blocks/components/AvatarStatusDot/AvatarStatusDotShowcase.tsx +3 -3
  188. package/templates/blocks/components/AvatarStatusDot/AvatarStatusDotVariants.tsx +3 -3
  189. package/templates/blocks/components/Banner/BannerFloating.doc.mjs +14 -0
  190. package/templates/blocks/components/Banner/BannerFloating.tsx +16 -0
  191. package/templates/blocks/components/Button/ButtonFloating.doc.mjs +14 -0
  192. package/templates/blocks/components/Button/ButtonFloating.tsx +37 -0
  193. package/templates/blocks/components/ButtonGroup/ButtonGroupFloating.doc.mjs +14 -0
  194. package/templates/blocks/components/ButtonGroup/ButtonGroupFloating.tsx +23 -0
  195. package/templates/blocks/components/Card/CardElevations.doc.mjs +14 -0
  196. package/templates/blocks/components/Card/CardElevations.tsx +32 -0
  197. package/templates/blocks/components/Card/ClickableCardElevated.doc.mjs +14 -0
  198. package/templates/blocks/components/Card/ClickableCardElevated.tsx +21 -0
  199. package/templates/blocks/components/Card/SelectableCardElevated.doc.mjs +14 -0
  200. package/templates/blocks/components/Card/SelectableCardElevated.tsx +37 -0
  201. package/templates/blocks/components/Carousel/CarouselSnap.tsx +1 -1
  202. package/templates/blocks/components/ChatComposer/ChatComposerFlat.doc.mjs +14 -0
  203. package/templates/blocks/components/ChatComposer/ChatComposerFlat.tsx +75 -0
  204. package/templates/blocks/components/ChatMessage/ChatMessageAvatarName.tsx +2 -2
  205. package/templates/blocks/components/ChatMessage/ChatMessageMultiBubble.tsx +1 -1
  206. package/templates/blocks/components/ChatMessageBubble/ChatMessageBubbleGrouping.tsx +1 -1
  207. package/templates/blocks/components/ChatMessageBubble/ChatMessageBubbleMetadata.tsx +1 -1
  208. package/templates/blocks/components/ChatMessageList/ChatMessageListDensity.tsx +5 -9
  209. package/templates/blocks/components/ChatMessageList/ChatMessageListFullFeatured.tsx +1 -1
  210. package/templates/blocks/components/CodeBlock/CodeBlockTerminal.tsx +1 -1
  211. package/templates/blocks/components/HoverCard/HoverCardShowcase.tsx +1 -1
  212. package/templates/blocks/components/IconButton/IconButtonFloating.doc.mjs +14 -0
  213. package/templates/blocks/components/IconButton/IconButtonFloating.tsx +37 -0
  214. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.doc.mjs +19 -0
  215. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +46 -0
  216. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.doc.mjs +14 -0
  217. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.tsx +33 -0
  218. package/templates/blocks/components/Item/ItemWithMedia.tsx +2 -2
  219. package/templates/blocks/components/ListItem/ListItemWithMedia.tsx +2 -2
  220. package/templates/blocks/components/OverflowList/OverflowListCappedToolbar.doc.mjs +14 -0
  221. package/templates/blocks/components/OverflowList/OverflowListCappedToolbar.tsx +39 -0
  222. package/templates/blocks/components/OverflowList/OverflowListMultiRowTags.doc.mjs +14 -0
  223. package/templates/blocks/components/OverflowList/OverflowListMultiRowTags.tsx +44 -0
  224. package/templates/blocks/components/Pagination/PaginationDotsCarousel.tsx +2 -6
  225. package/templates/blocks/components/Stack/StackFillItem.tsx +2 -6
  226. package/templates/blocks/components/TabList/TabListTabsWithActions.doc.mjs +1 -1
  227. package/templates/blocks/components/TabList/TabListTabsWithActions.tsx +2 -7
  228. package/templates/blocks/components/Table/TableRowStatusTable.doc.mjs +14 -0
  229. package/templates/blocks/components/Table/TableRowStatusTable.tsx +59 -0
  230. package/templates/blocks/components/Thumbnail/ThumbnailDisabled.tsx +6 -1
  231. package/templates/blocks/components/Thumbnail/ThumbnailGallery.tsx +1 -0
  232. package/templates/blocks/components/Thumbnail/ThumbnailRemovable.tsx +1 -0
  233. package/templates/blocks/components/TypeaheadItem/TypeaheadItemShowcase.tsx +1 -1
  234. package/templates/pages/ai-chat/page.tsx +4 -4
  235. package/templates/pages/dashboard-portfolio/page.tsx +3 -11
  236. package/templates/pages/detail-page/page.tsx +5 -12
  237. package/templates/pages/documentation-design/page.tsx +1 -1
  238. package/templates/pages/messaging-shell/page.tsx +6 -8
  239. package/templates/pages/table-grouped/page.tsx +9 -14
  240. package/templates/pages/table-page/page.tsx +7 -9
  241. package/templates/pages/table-page-heatmap-status/page.tsx +5 -13
  242. package/{src/types → types}/api.contract.assert.ts +17 -8
  243. package/{src/types → types}/api.d.ts +110 -9
  244. package/{src/types → types}/base.d.ts +40 -4
  245. package/types/build.d.ts +53 -0
  246. package/types/codemod.d.ts +166 -0
  247. package/{src/types → types}/component.d.ts +1 -1
  248. package/{src/types → types}/discover.d.ts +1 -1
  249. package/{src/types → types}/docs.d.ts +1 -4
  250. package/{src/types → types}/hook.d.ts +1 -1
  251. package/{src/types → types}/index.d.ts +1 -0
  252. package/types/jscodeshift.d.ts +19 -0
  253. package/types/layout.d.ts +74 -0
  254. package/{src/types → types}/swizzle.d.ts +4 -0
  255. package/{src/types → types}/template-api.d.ts +4 -1
  256. package/types/theme.d.ts +53 -0
  257. package/types/upgrade.d.ts +108 -0
  258. package/utils/package-manager.mjs +178 -0
  259. package/utils/package-manager.test.mjs +220 -0
  260. package/{src/utils → utils}/path-safety.mjs +0 -18
  261. package/{src/utils → utils}/paths.mjs +4 -1
  262. package/{src/utils → utils}/update-check.mjs +5 -4
  263. package/{src/utils → utils}/update-check.test.mjs +3 -3
  264. package/docs/integration-authoring.md +0 -105
  265. package/src/commands/build.mjs +0 -196
  266. package/src/commands/init.mjs +0 -288
  267. package/src/commands/interactive-guard.test.mjs +0 -69
  268. package/src/commands/swizzle.mjs +0 -440
  269. package/src/commands/upgrade.test.mjs +0 -160
  270. package/src/types/codemod.d.ts +0 -81
  271. package/src/types/theme.d.ts +0 -23
  272. package/src/types/upgrade.d.ts +0 -64
  273. package/src/utils/interactive.mjs +0 -76
  274. package/src/utils/interactive.test.mjs +0 -70
  275. package/src/utils/package-manager.mjs +0 -74
  276. package/src/utils/package-manager.test.mjs +0 -113
  277. /package/{src/api → api/docs}/docOverlays.test.mjs +0 -0
  278. /package/{src/api → api/integration}/integration-block-exports.test.mjs +0 -0
  279. /package/{src/api → api/template}/template.test.mjs +0 -0
  280. /package/{src → authoring}/codemod.test.mjs +0 -0
  281. /package/{src → authoring}/config.mjs +0 -0
  282. /package/{src → authoring}/integration.mjs +0 -0
  283. /package/{src → authoring}/template.test.mjs +0 -0
  284. /package/{src → cli}/cli-exit-codes.test.mjs +0 -0
  285. /package/{src → cli}/commands/build-theme.color-scheme.test.mjs +0 -0
  286. /package/{src → cli}/commands/build-theme.import-path.test.mjs +0 -0
  287. /package/{src → cli}/commands/build-theme.path-safety.test.mjs +0 -0
  288. /package/{src → cli}/commands/build-theme.prose.test.mjs +0 -0
  289. /package/{src → cli}/commands/build-theme.variants.test.mjs +0 -0
  290. /package/{src → cli}/commands/build-theme.watch.test.mjs +0 -0
  291. /package/{src → cli}/commands/component.test.mjs +0 -0
  292. /package/{src → cli}/commands/detail-levels.test.mjs +0 -0
  293. /package/{src → cli}/commands/swizzle.path-safety.test.mjs +0 -0
  294. /package/{src → cli}/commands/swizzle.routing.test.mjs +0 -0
  295. /package/{src → cli}/commands/template.test.mjs +0 -0
  296. /package/{src → cli}/commands/upgrade.config-ordering.test.mjs +0 -0
  297. /package/{src → cli}/commands/validate-integration.test.mjs +0 -0
  298. /package/{src → cli}/update-hint-commands.test.mjs +0 -0
  299. /package/{src/codemods → codemods}/__tests__/rename-imperative-ref-to-handleRef.test.mjs +0 -0
  300. /package/{src/codemods → codemods}/__tests__/rename-isStreaming-to-isStopShown.test.mjs +0 -0
  301. /package/{src/codemods → codemods}/__tests__/rename-section-wash-to-muted.test.mjs +0 -0
  302. /package/{src/codemods → codemods}/__tests__/runner.test.mjs +0 -0
  303. /package/{src/codemods → codemods}/__tests__/toolbar-density-to-size.test.mjs +0 -0
  304. /package/{src/codemods → codemods}/__tests__/validation.test.mjs +0 -0
  305. /package/{src/codemods → codemods}/transforms/v0.0.10/__tests__/remove-size-props.test.mjs +0 -0
  306. /package/{src/codemods → codemods}/transforms/v0.0.10/index.mjs +0 -0
  307. /package/{src/codemods → codemods}/transforms/v0.0.12/__tests__/add-is-icon-only.test.mjs +0 -0
  308. /package/{src/codemods → codemods}/transforms/v0.0.12/index.mjs +0 -0
  309. /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/icon-name-deprecations.test.mjs +0 -0
  310. /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/rename-attachments-to-drawer.test.mjs +0 -0
  311. /package/{src/codemods → codemods}/transforms/v0.0.13/index.mjs +0 -0
  312. /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-action-props.test.mjs +0 -0
  313. /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +0 -0
  314. /package/{src/codemods → codemods}/transforms/v0.0.14/index.mjs +0 -0
  315. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-item-children-to-endcontent.test.mjs +0 -0
  316. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-selector-children-to-render-option.test.mjs +0 -0
  317. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-theme-selectors-to-data-attrs.test.mjs +0 -0
  318. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-date-picker-to-input.test.mjs +0 -0
  319. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-stack-element-to-as.test.mjs +0 -0
  320. /package/{src/codemods → codemods}/transforms/v0.0.15/index.mjs +0 -0
  321. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-badge-dot-to-statusdot.test.mjs +0 -0
  322. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-gap-to-numeric.test.mjs +0 -0
  323. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-isFullBleed-to-padding.test.mjs +0 -0
  324. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-useXDSIcon-to-getIcon.test.mjs +0 -0
  325. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-banner-endButton-to-endContent.test.mjs +0 -0
  326. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-form-tooltip-startIcon.test.mjs +0 -0
  327. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-isShown-to-isOpen.test.mjs +0 -0
  328. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-selector-items-to-options.test.mjs +0 -0
  329. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-sidenav-header-to-heading.test.mjs +0 -0
  330. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-topnav-title-to-heading.test.mjs +0 -0
  331. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-uncontrolled-to-defaultX.test.mjs +0 -0
  332. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-visibility-to-onOpenChange.test.mjs +0 -0
  333. /package/{src/codemods → codemods}/transforms/v0.0.2/index.mjs +0 -0
  334. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-collapse-to-collapsible.test.mjs +0 -0
  335. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-radius-tokens.test.mjs +0 -0
  336. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-shadow-tokens.test.mjs +0 -0
  337. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-skeleton-radius.test.mjs +0 -0
  338. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-token-names.test.mjs +0 -0
  339. /package/{src/codemods → codemods}/transforms/v0.0.6/index.mjs +0 -0
  340. /package/{src/codemods → codemods}/transforms/v0.0.7/__tests__/rename-banner-variant-to-container.test.mjs +0 -0
  341. /package/{src/codemods → codemods}/transforms/v0.0.7/index.mjs +0 -0
  342. /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/migrate-token-renames.test.mjs +0 -0
  343. /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/rename-endslot-to-endcontent.test.mjs +0 -0
  344. /package/{src/codemods → codemods}/transforms/v0.0.8/index.mjs +0 -0
  345. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-css-surfaces.test.mjs +0 -0
  346. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-declare-module.test.mjs +0 -0
  347. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/v0.1.0-ordering.test.mjs +0 -0
  348. /package/{src/codemods → codemods}/transforms/v0.1.0/index.mjs +0 -0
  349. /package/{src/codemods → codemods}/transforms/v0.1.2/__tests__/rename-text-color-active-to-accent.test.mjs +0 -0
  350. /package/{src/codemods → codemods}/transforms/v0.1.2/index.mjs +0 -0
  351. /package/{src/codemods → codemods}/transforms/v0.1.3/__tests__/migrate-layout-components-to-experimental.test.mjs +0 -0
  352. /package/{src/codemods → codemods}/transforms/v0.1.3/index.mjs +0 -0
  353. /package/{src/codemods → codemods}/transforms/v0.1.5/__tests__/rename-switch-label-spacing-default-to-hug.test.mjs +0 -0
  354. /package/{src/codemods → codemods}/transforms/v0.1.5/index.mjs +0 -0
  355. /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/migrate-table-tableprops-to-direct-props.test.mjs +0 -0
  356. /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/rename-table-renderprops-styles-to-xstyle.test.mjs +0 -0
  357. /package/{src/codemods → codemods}/transforms/v0.1.7/index.mjs +0 -0
  358. /package/{src/lib → lib}/cli-error.test.mjs +0 -0
  359. /package/{src/lib → lib}/component-discovery.importpath.test.mjs +0 -0
  360. /package/{src/lib → lib}/component-format.test.mjs +0 -0
  361. /package/{src/lib → lib}/component-loader.test.mjs +0 -0
  362. /package/{src/lib → lib}/config-cache.mjs +0 -0
  363. /package/{src/lib → lib}/config-cache.test.mjs +0 -0
  364. /package/{src/lib → lib}/config-schema.mjs +0 -0
  365. /package/{src/lib → lib}/error-codes.mjs +0 -0
  366. /package/{src/lib → lib}/integration-warnings.test.mjs +0 -0
  367. /package/{src/lib → lib}/module-loader.test.mjs +0 -0
  368. /package/{src/lib → lib}/node-version.mjs +0 -0
  369. /package/{src/lib → lib}/node-version.test.mjs +0 -0
  370. /package/{src/lib → lib}/parse.mjs +0 -0
  371. /package/{src/lib → lib}/site.mjs +0 -0
  372. /package/{src/lib → lib}/xle/browser.d.ts +0 -0
  373. /package/{src/lib → lib}/xle/xle.test.mjs +0 -0
  374. /package/{src/schemas → schemas}/doc-schema.mjs +0 -0
  375. /package/{src/schemas → schemas}/template-schema.mjs +0 -0
  376. /package/{src/types → types}/config.d.ts +0 -0
  377. /package/{src/types → types}/doc.d.ts +0 -0
  378. /package/{src/types → types}/doctor.d.ts +0 -0
  379. /package/{src/types → types}/error-codes.d.ts +0 -0
  380. /package/{src/types → types}/integration.d.ts +0 -0
  381. /package/{src/types → types}/manifest.d.ts +0 -0
  382. /package/{src/types → types}/search.d.ts +0 -0
  383. /package/{src/types → types}/template.d.ts +0 -0
  384. /package/{src/types → types}/validate-integration.d.ts +0 -0
  385. /package/{src/utils → utils}/github.mjs +0 -0
  386. /package/{src/utils → utils}/path-safety.test.mjs +0 -0
  387. /package/{src/utils → utils}/paths.test.mjs +0 -0
  388. /package/{src/utils → utils}/semver.mjs +0 -0
  389. /package/{src/utils → utils}/semver.test.mjs +0 -0
@@ -23,9 +23,14 @@ export default function ThumbnailDisabled() {
23
23
  src={GOLDEN_SUNSET}
24
24
  alt="Golden sunset over mountains"
25
25
  label="golden-sunset.jpg"
26
+ showRemoveOn="always"
27
+ onRemove={() => {}}
28
+ />
29
+ <Thumbnail
30
+ label="document.pdf"
31
+ showRemoveOn="always"
26
32
  onRemove={() => {}}
27
33
  />
28
- <Thumbnail label="document.pdf" onRemove={() => {}} />
29
34
  </Stack>
30
35
  </Stack>
31
36
  <Stack direction="vertical" gap={1}>
@@ -66,6 +66,7 @@ export default function ThumbnailGallery() {
66
66
  src={item.src}
67
67
  alt={item.alt}
68
68
  label={item.label}
69
+ showRemoveOn="always"
69
70
  onClick={() => setSelected(item.label)}
70
71
  onRemove={() =>
71
72
  setItems(prev => prev.filter(i => i.id !== item.id))
@@ -65,6 +65,7 @@ export default function ThumbnailRemovable() {
65
65
  src={item.src}
66
66
  alt={item.alt}
67
67
  label={item.label}
68
+ showRemoveOn="always"
68
69
  onRemove={() =>
69
70
  setItems(prev => prev.filter(i => i.id !== item.id))
70
71
  }
@@ -40,7 +40,7 @@ export default function TypeaheadItemShowcase() {
40
40
  renderItem={(item: PersonItem) => (
41
41
  <TypeaheadItem
42
42
  item={item}
43
- icon={<Avatar name={item.label} size="small" />}
43
+ icon={<Avatar name={item.label} size="md" />}
44
44
  description={item.auxiliaryData.role}
45
45
  />
46
46
  )}
@@ -390,7 +390,7 @@ export default function AIChatConversationTemplate() {
390
390
  {/* Assistant message: tool calls, markdown, code block */}
391
391
  <ChatMessage
392
392
  sender="assistant"
393
- avatar={<Avatar name="Agent" size="small" />}>
393
+ avatar={<Avatar name="Agent" size="md" />}>
394
394
  <ChatMessageBubble variant="ghost">
395
395
  Looking into the auth files now. Let me read through the
396
396
  code and trace the token refresh flow.
@@ -510,7 +510,7 @@ The fix is to catch \`TokenExpiredError\` specifically and attempt a refresh bef
510
510
  {/* Assistant message: test results table + code block */}
511
511
  <ChatMessage
512
512
  sender="assistant"
513
- avatar={<Avatar name="Agent" size="small" />}>
513
+ avatar={<Avatar name="Agent" size="md" />}>
514
514
  <ChatToolCalls
515
515
  defaultIsExpanded
516
516
  calls={[
@@ -608,7 +608,7 @@ The fix is to catch \`TokenExpiredError\` specifically and attempt a refresh bef
608
608
  {/* Assistant message: artifact card */}
609
609
  <ChatMessage
610
610
  sender="assistant"
611
- avatar={<Avatar name="Agent" size="small" />}>
611
+ avatar={<Avatar name="Agent" size="md" />}>
612
612
  <ChatMessageBubble variant="ghost">
613
613
  <Markdown density="compact">
614
614
  {`I've drafted a design doc covering the problem, the fix, and the test matrix — pulling straight from the changes we just made.\n\nOpen the document below to review it. Want me to expand any section?`}
@@ -647,7 +647,7 @@ The fix is to catch \`TokenExpiredError\` specifically and attempt a refresh bef
647
647
  {/* Assistant message: in-progress tool call */}
648
648
  <ChatMessage
649
649
  sender="assistant"
650
- avatar={<Avatar name="Agent" size="small" />}>
650
+ avatar={<Avatar name="Agent" size="md" />}>
651
651
  <ChatMessageBubble variant="ghost">
652
652
  <Markdown density="compact">
653
653
  {`On it — adding a **Rollout & Monitoring** section with a staged flag ramp and the alert thresholds. Updating the document now.`}
@@ -4,12 +4,7 @@
4
4
 
5
5
  import {useState} from 'react';
6
6
 
7
- import {
8
- VStack,
9
- HStack,
10
- Layout,
11
- LayoutContent,
12
- } from '@astryxdesign/core/Layout';
7
+ import {VStack, HStack, Layout, LayoutContent} from '@astryxdesign/core/Layout';
13
8
  import {Text, Heading} from '@astryxdesign/core/Text';
14
9
  import {Card} from '@astryxdesign/core/Card';
15
10
  import {Grid, GridSpan} from '@astryxdesign/core/Grid';
@@ -642,7 +637,7 @@ function AssetRow({
642
637
  label={<Text weight="bold">{ticker}</Text>}
643
638
  description={name}
644
639
  href="#"
645
- startContent={<Avatar name={ticker} size="small" />}
640
+ startContent={<Avatar name={ticker} size="md" />}
646
641
  endContent={
647
642
  <VStack gap={0} hAlign="end">
648
643
  <Text type="body">{value}</Text>
@@ -693,10 +688,7 @@ export default function DashboardPortfolioTemplate() {
693
688
  {/* KPI metric cards */}
694
689
  <Grid columns={{minWidth: 280, repeat: 'fit'}} gap={4}>
695
690
  {Array.from({length: Math.ceil(metrics.length / 2)}, (_, i) => (
696
- <Grid
697
- key={i}
698
- columns={{minWidth: 280, repeat: 'fit'}}
699
- gap={4}>
691
+ <Grid key={i} columns={{minWidth: 280, repeat: 'fit'}} gap={4}>
700
692
  {metrics.slice(i * 2, i * 2 + 2).map(m => (
701
693
  <MetricCard key={m.label} {...m} />
702
694
  ))}
@@ -199,7 +199,7 @@ function PageHeader({
199
199
  </Text>
200
200
  <HStack gap={1} vAlign="center">
201
201
  <Bullet />
202
- <Avatar name="Jane Doe" size="xsmall" />
202
+ <Avatar name="Jane Doe" size="sm" />
203
203
  <Text type="body" maxLines={1}>
204
204
  Jane Doe
205
205
  </Text>
@@ -444,7 +444,7 @@ function TimelineSection() {
444
444
  {ACTIVITY.map((item, i) => (
445
445
  <VStack key={i} gap={2}>
446
446
  <HStack gap={3} vAlign="start">
447
- <Avatar name={item.user} size="small" />
447
+ <Avatar name={item.user} size="md" />
448
448
  <StackItem size="fill">
449
449
  <VStack gap={2}>
450
450
  <Card variant="muted" padding={3}>
@@ -478,11 +478,7 @@ function TimelineSection() {
478
478
  size="xsm"
479
479
  color="secondary"
480
480
  />
481
- <Icon
482
- icon={HeartIcon}
483
- size="xsm"
484
- color="secondary"
485
- />
481
+ <Icon icon={HeartIcon} size="xsm" color="secondary" />
486
482
  <Text type="supporting" color="secondary">
487
483
  {item.reactions}
488
484
  </Text>
@@ -533,16 +529,13 @@ function PanelContent() {
533
529
  321 Smith Road, CA 38238
534
530
  </MetadataListItem>
535
531
  <MetadataListItem label="Phone">234-</MetadataListItem>
536
- <MetadataListItem label="Email">
537
- janedoe@email.com
538
- </MetadataListItem>
532
+ <MetadataListItem label="Email">janedoe@email.com</MetadataListItem>
539
533
  <MetadataListItem label="Billing Address">
540
534
  Same as shipping address
541
535
  </MetadataListItem>
542
536
  </MetadataList>
543
537
  </Collapsible>
544
- <Collapsible
545
- trigger={<Heading level={4}>Fraud Analysis</Heading>}>
538
+ <Collapsible trigger={<Heading level={4}>Fraud Analysis</Heading>}>
546
539
  <VStack gap={1}>
547
540
  <ProgressBar
548
541
  label="Risk level"
@@ -541,7 +541,7 @@ function ComponentDetailView({activeNav}: {activeNav: string}) {
541
541
  endContent={<Badge label="New" variant="info" />}
542
542
  />
543
543
  ),
544
- avatar: <Avatar name="Alice" size="medium" />,
544
+ avatar: <Avatar name="Alice" size="lg" />,
545
545
  badge: <Badge label="Success" variant="success" />,
546
546
  card: (
547
547
  <Card>
@@ -337,7 +337,7 @@ function StreamMessageGroup({message}: {message: StreamMessage}) {
337
337
  return (
338
338
  <ChatMessage
339
339
  sender={isSelf ? 'user' : 'assistant'}
340
- avatar={isSelf ? undefined : <Avatar name={user.name} size="small" />}>
340
+ avatar={isSelf ? undefined : <Avatar name={user.name} size="md" />}>
341
341
  {message.bubbles.map((text, index) => (
342
342
  <ChatMessageBubble
343
343
  key={`${message.id}-${index}`}
@@ -395,7 +395,7 @@ export default function MessagingShellPage() {
395
395
 
396
396
  const workspaceRail = (
397
397
  <VStack gap={2} style={styles.rail}>
398
- <Avatar name="Astryx HQ" size="small" />
398
+ <Avatar name="Astryx HQ" size="md" />
399
399
  {RAIL_ITEMS.map(item => (
400
400
  <IconButton
401
401
  key={item.id}
@@ -416,7 +416,7 @@ export default function MessagingShellPage() {
416
416
  />
417
417
  <Avatar
418
418
  name={USERS.you.name}
419
- size="small"
419
+ size="md"
420
420
  status={<AvatarStatusDot variant="success" label="Online" />}
421
421
  />
422
422
  </VStack>
@@ -497,7 +497,7 @@ export default function MessagingShellPage() {
497
497
  startContent={
498
498
  <Avatar
499
499
  name={USERS[dm.userId].name}
500
- size="xsmall"
500
+ size="sm"
501
501
  status={
502
502
  <AvatarStatusDot
503
503
  variant={PRESENCE_VARIANT[dm.presence]}
@@ -600,9 +600,7 @@ export default function MessagingShellPage() {
600
600
  <ChatMessageList density="compact">
601
601
  <ChatMessage
602
602
  sender="assistant"
603
- avatar={
604
- <Avatar name={USERS[THREAD_ROOT.userId].name} size="small" />
605
- }>
603
+ avatar={<Avatar name={USERS[THREAD_ROOT.userId].name} size="md" />}>
606
604
  <ChatMessageBubble
607
605
  name={USERS[THREAD_ROOT.userId].name}
608
606
  metadata={
@@ -622,7 +620,7 @@ export default function MessagingShellPage() {
622
620
  <ChatMessage
623
621
  key={reply.id}
624
622
  sender="assistant"
625
- avatar={<Avatar name={USERS[reply.userId].name} size="small" />}>
623
+ avatar={<Avatar name={USERS[reply.userId].name} size="md" />}>
626
624
  <ChatMessageBubble
627
625
  name={USERS[reply.userId].name}
628
626
  metadata={
@@ -22,7 +22,10 @@ import {Badge} from '@astryxdesign/core/Badge';
22
22
  import {Avatar} from '@astryxdesign/core/Avatar';
23
23
  import {Selector} from '@astryxdesign/core/Selector';
24
24
  import {PowerSearch} from '@astryxdesign/core/PowerSearch';
25
- import type {PowerSearchConfig, PowerSearchFilter} from '@astryxdesign/core/PowerSearch';
25
+ import type {
26
+ PowerSearchConfig,
27
+ PowerSearchFilter,
28
+ } from '@astryxdesign/core/PowerSearch';
26
29
  import {Dialog, DialogHeader} from '@astryxdesign/core/Dialog';
27
30
  import {Popover} from '@astryxdesign/core/Popover';
28
31
  import {RadioList, RadioListItem} from '@astryxdesign/core/RadioList';
@@ -798,19 +801,15 @@ function TaskDetailPanel({
798
801
  </MetadataListItem>
799
802
  <MetadataListItem label="Assignee">
800
803
  <HStack gap={2} vAlign="center">
801
- <Avatar name={task.assignee} size="xsmall" />
804
+ <Avatar name={task.assignee} size="sm" />
802
805
  <Text type="body">{task.assignee}</Text>
803
806
  </HStack>
804
807
  </MetadataListItem>
805
808
  <MetadataListItem label="Project">
806
809
  {task.project || '\u2014'}
807
810
  </MetadataListItem>
808
- <MetadataListItem label="Created">
809
- {task.created}
810
- </MetadataListItem>
811
- <MetadataListItem label="Updated">
812
- {task.updated}
813
- </MetadataListItem>
811
+ <MetadataListItem label="Created">{task.created}</MetadataListItem>
812
+ <MetadataListItem label="Updated">{task.updated}</MetadataListItem>
814
813
  </MetadataList>
815
814
 
816
815
  {task.tags.length > 0 && (
@@ -942,11 +941,7 @@ export default function DataTableTemplate() {
942
941
  </RadioList>
943
942
  </VStack>
944
943
  }>
945
- <Button
946
- label="View Options"
947
- variant="secondary"
948
- size="md"
949
- />
944
+ <Button label="View Options" variant="secondary" size="md" />
950
945
  </Popover>
951
946
  </HStack>
952
947
  </VStack>
@@ -1066,7 +1061,7 @@ export default function DataTableTemplate() {
1066
1061
  </Text>
1067
1062
  </TableCell>
1068
1063
  <TableCell>
1069
- <Avatar name={task.assignee} size="xsmall" />
1064
+ <Avatar name={task.assignee} size="sm" />
1070
1065
  </TableCell>
1071
1066
  <TableCell>
1072
1067
  <DropdownMenu
@@ -16,7 +16,10 @@ import {Button} from '@astryxdesign/core/Button';
16
16
  import {IconButton} from '@astryxdesign/core/IconButton';
17
17
  import {Icon} from '@astryxdesign/core/Icon';
18
18
  import {Avatar} from '@astryxdesign/core/Avatar';
19
- import {PowerSearch, usePowerSearchConfig} from '@astryxdesign/core/PowerSearch';
19
+ import {
20
+ PowerSearch,
21
+ usePowerSearchConfig,
22
+ } from '@astryxdesign/core/PowerSearch';
20
23
  import type {PowerSearchFilter} from '@astryxdesign/core/PowerSearch';
21
24
  import {Table, proportional, pixel} from '@astryxdesign/core/Table';
22
25
  import type {TableColumn} from '@astryxdesign/core/Table';
@@ -353,7 +356,7 @@ const columns: TableColumn<DogRow>[] = [
353
356
  width: proportional(2),
354
357
  renderCell: (item: DogRow) => (
355
358
  <HStack gap={3} vAlign="center">
356
- <Avatar name={item.name} size="small" />
359
+ <Avatar name={item.name} size="md" />
357
360
  <VStack gap={0}>
358
361
  <Text type="body">{item.name}</Text>
359
362
  <Text type="supporting" color="secondary">
@@ -367,9 +370,7 @@ const columns: TableColumn<DogRow>[] = [
367
370
  key: 'biography',
368
371
  header: 'Biography',
369
372
  width: proportional(5),
370
- renderCell: (item: DogRow) => (
371
- <Text type="body">{item.biography}</Text>
372
- ),
373
+ renderCell: (item: DogRow) => <Text type="body">{item.biography}</Text>,
373
374
  },
374
375
  {
375
376
  key: 'age',
@@ -406,10 +407,7 @@ export default function TablePageTemplate() {
406
407
  icon={<Icon icon={ArrowDownTrayIcon} size="sm" />}
407
408
  variant="ghost"
408
409
  />
409
- <Button
410
- label="Add"
411
- icon={<Icon icon={PlusIcon} size="sm" />}
412
- />
410
+ <Button label="Add" icon={<Icon icon={PlusIcon} size="sm" />} />
413
411
  </HStack>
414
412
  </LayoutHeader>
415
413
  }
@@ -338,17 +338,13 @@ const columns: TableColumn<IncidentRow>[] = [
338
338
  key: 'product',
339
339
  header: 'Product',
340
340
  width: proportional(2),
341
- renderCell: (item: IncidentRow) => (
342
- <Text type="body">{item.product}</Text>
343
- ),
341
+ renderCell: (item: IncidentRow) => <Text type="body">{item.product}</Text>,
344
342
  },
345
343
  {
346
344
  key: 'title',
347
345
  header: 'Description',
348
346
  width: proportional(5),
349
- renderCell: (item: IncidentRow) => (
350
- <Text type="body">{item.title}</Text>
351
- ),
347
+ renderCell: (item: IncidentRow) => <Text type="body">{item.title}</Text>,
352
348
  },
353
349
  {
354
350
  key: 'startTime',
@@ -362,9 +358,7 @@ const columns: TableColumn<IncidentRow>[] = [
362
358
  key: 'duration',
363
359
  header: 'Duration',
364
360
  width: pixel(100),
365
- renderCell: (item: IncidentRow) => (
366
- <Text type="body">{item.duration}</Text>
367
- ),
361
+ renderCell: (item: IncidentRow) => <Text type="body">{item.duration}</Text>,
368
362
  },
369
363
  {
370
364
  key: 'oncall',
@@ -375,7 +369,7 @@ const columns: TableColumn<IncidentRow>[] = [
375
369
  <Avatar
376
370
  name={item.oncall}
377
371
  src={ONCALL_AVATARS[item.oncall]}
378
- size="xsmall"
372
+ size="sm"
379
373
  />
380
374
  <Text type="body">{item.oncall}</Text>
381
375
  </HStack>
@@ -396,9 +390,7 @@ const columns: TableColumn<IncidentRow>[] = [
396
390
  key: 'date',
397
391
  header: 'Date',
398
392
  width: pixel(110),
399
- renderCell: (item: IncidentRow) => (
400
- <Text type="body">{item.date}</Text>
401
- ),
393
+ renderCell: (item: IncidentRow) => <Text type="body">{item.date}</Text>,
402
394
  },
403
395
  ];
404
396
 
@@ -31,14 +31,14 @@
31
31
  */
32
32
 
33
33
  import type * as Api from './api';
34
- import type {component} from '../api/component.mjs';
35
- import type {docs} from '../api/docs.mjs';
36
- import type {discover} from '../api/discover.mjs';
37
- import type {template} from '../api/template.mjs';
34
+ import type {component} from '../api/component/component.mjs';
35
+ import type {docs} from '../api/docs/docs.mjs';
36
+ import type {discover} from '../api/discover/discover.mjs';
37
+ import type {template} from '../api/template/template.mjs';
38
38
 
39
39
  /** Resolve to `true` only when `A` and `B` are mutually assignable. */
40
40
  type Equal<A, B> =
41
- (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2)
41
+ (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2
42
42
  ? true
43
43
  : false;
44
44
 
@@ -52,16 +52,25 @@ type Opt<T> = NonNullable<T>;
52
52
  // must describe the same set of keys/types, in both directions. ──────────────
53
53
 
54
54
  type _ComponentOptions = Expect<
55
- Equal<Opt<Parameters<typeof Api.component>[1]>, Opt<Parameters<typeof component>[1]>>
55
+ Equal<
56
+ Opt<Parameters<typeof Api.component>[1]>,
57
+ Opt<Parameters<typeof component>[1]>
58
+ >
56
59
  >;
57
60
  type _DocsOptions = Expect<
58
61
  Equal<Opt<Parameters<typeof Api.docs>[2]>, Opt<Parameters<typeof docs>[2]>>
59
62
  >;
60
63
  type _DiscoverOptions = Expect<
61
- Equal<Opt<Parameters<typeof Api.discover>[1]>, Opt<Parameters<typeof discover>[1]>>
64
+ Equal<
65
+ Opt<Parameters<typeof Api.discover>[1]>,
66
+ Opt<Parameters<typeof discover>[1]>
67
+ >
62
68
  >;
63
69
  type _TemplateOptions = Expect<
64
- Equal<Opt<Parameters<typeof Api.template>[1]>, Opt<Parameters<typeof template>[1]>>
70
+ Equal<
71
+ Opt<Parameters<typeof Api.template>[1]>,
72
+ Opt<Parameters<typeof template>[1]>
73
+ >
65
74
  >;
66
75
 
67
76
  // ── Positional-argument parity: arity and positional types must match. ───────
@@ -44,17 +44,24 @@ import type {
44
44
  import type {SearchResponse, SearchDomain} from './search';
45
45
  import type {ErrorCode} from './error-codes';
46
46
  import type {DoctorResponse} from './doctor';
47
+ import type {
48
+ LayoutForm,
49
+ LayoutExpandResponse,
50
+ LayoutCheckResponse,
51
+ LayoutGrammarResponse,
52
+ } from './layout';
53
+ import type {ValidateIntegrationResponse} from './validate-integration';
54
+ import type {AstryxIntegrationIssue} from './integration';
55
+ import type {BuildHelpResponse, BuildKitResponse} from './build';
56
+ import type {SwizzleListResponse, SwizzleCopyResponse} from './swizzle';
57
+ import type {Suggestion} from './base';
47
58
 
48
59
  /** Structured API error with a stable machine-readable code. */
49
60
  export declare class AstryxError extends Error {
50
61
  /** Stable error code; consumers branch on this, never the message. */
51
62
  code: ErrorCode;
52
- suggestions?: Array<{name: string; reason: string}>;
53
- constructor(
54
- message: string,
55
- suggestions?: Array<{name: string; reason: string}>,
56
- code?: ErrorCode,
57
- );
63
+ suggestions?: Suggestion[];
64
+ constructor(message: string, suggestions?: Suggestion[], code?: ErrorCode);
58
65
  }
59
66
 
60
67
  // ── Component ────────────────────────────────────────────────────────
@@ -100,9 +107,7 @@ export interface DocsOptions {
100
107
  }
101
108
 
102
109
  type DocsResult =
103
- | DocsListResponse
104
- | DocsDetailResponse
105
- | DocsDetailSectionResponse;
110
+ DocsListResponse | DocsDetailResponse | DocsDetailSectionResponse;
106
111
 
107
112
  export declare function docs(
108
113
  topic?: string,
@@ -191,6 +196,47 @@ export declare function search(
191
196
  options?: SearchOptions,
192
197
  ): Promise<SearchResponse>;
193
198
 
199
+ // ── Build ────────────────────────────────────────────────────────────
200
+
201
+ export interface BuildOptions {
202
+ cwd?: string;
203
+ type?: SearchDomain;
204
+ limit?: number;
205
+ }
206
+
207
+ /**
208
+ * Page-building assistant. No query → `build.help` (playbook signal); a query →
209
+ * `build.kit` (grouped composition kit of raw search entries + frame/foundation).
210
+ */
211
+ export declare function build(
212
+ query?: string,
213
+ options?: BuildOptions,
214
+ ): Promise<BuildHelpResponse | BuildKitResponse>;
215
+
216
+ // ── Swizzle ──────────────────────────────────────────────────────────
217
+
218
+ export interface SwizzleOptions {
219
+ cwd?: string;
220
+ /** Output directory (must resolve inside cwd). Defaults to ./components/astryx. */
221
+ output?: string;
222
+ /** Scope to a specific owning package when a name is ambiguous. */
223
+ package?: string;
224
+ /** Force the list response even with a component argument. */
225
+ list?: boolean;
226
+ /** Overwrite existing files instead of erroring. */
227
+ overwrite?: boolean;
228
+ }
229
+
230
+ /**
231
+ * List swizzlable components (no name / `list`) or copy one component's source
232
+ * into the project (side effect) and return a `swizzle.copy` receipt. Errors
233
+ * throw AstryxError (ERR_UNKNOWN_COMPONENT, ERR_AMBIGUOUS_COMPONENT, …).
234
+ */
235
+ export declare function swizzle(
236
+ component?: string,
237
+ options?: SwizzleOptions,
238
+ ): Promise<SwizzleListResponse | SwizzleCopyResponse>;
239
+
194
240
  // ── Doctor ──────────────────────────────────
195
241
 
196
242
  export interface DoctorOptions {
@@ -200,3 +246,58 @@ export interface DoctorOptions {
200
246
  export declare function doctor(
201
247
  options?: DoctorOptions,
202
248
  ): Promise<DoctorResponse>;
249
+
250
+ // ── Layout ───────────────────────────────────────────────────────────
251
+
252
+ export interface LayoutExpandOptions {
253
+ targetPath?: string;
254
+ form?: LayoutForm;
255
+ loose?: boolean;
256
+ name?: string;
257
+ cwd?: string;
258
+ }
259
+
260
+ export declare function layoutExpand(
261
+ expression: string,
262
+ options?: LayoutExpandOptions,
263
+ ): Promise<LayoutExpandResponse>;
264
+
265
+ export interface LayoutCheckOptions {
266
+ form?: LayoutForm;
267
+ loose?: boolean;
268
+ cwd?: string;
269
+ }
270
+
271
+ export declare function layoutCheck(
272
+ expression: string,
273
+ options?: LayoutCheckOptions,
274
+ ): Promise<LayoutCheckResponse>;
275
+
276
+ export interface LayoutGrammarOptions {
277
+ cwd?: string;
278
+ }
279
+
280
+ export declare function layoutGrammar(
281
+ options?: LayoutGrammarOptions,
282
+ ): Promise<LayoutGrammarResponse>;
283
+
284
+ // ── Validate integration ─────────────────────────────────────────────
285
+
286
+ export interface ValidateIntegrationOptions {
287
+ cwd?: string;
288
+ }
289
+
290
+ /**
291
+ * Validate the local integration (no `pkg`) or an installed one (`pkg` given).
292
+ * The no-manifest local case returns `{ name: null, version: null, issues: [] }`.
293
+ */
294
+ export declare function validateIntegration(
295
+ pkg?: string,
296
+ options?: ValidateIntegrationOptions,
297
+ ): Promise<ValidateIntegrationResponse>;
298
+
299
+ /** Count issues by severity. */
300
+ export declare function summarizeIssues(issues: AstryxIntegrationIssue[]): {
301
+ errors: number;
302
+ warnings: number;
303
+ };