@astryxdesign/cli 0.6.3 → 0.6.4-canary.10dd683

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 (643) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +117 -78
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +16 -9
  7. package/api/build/build.test.mjs +197 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +165 -49
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +6 -12
  18. package/api/component/_adapter.mjs +20 -10
  19. package/api/component/component.doc.mjs +13 -3
  20. package/api/component/component.mjs +91 -14
  21. package/api/component/component.test.mjs +38 -0
  22. package/api/component/component.type.d.mts +22 -11
  23. package/api/component/component.type.mjs +32 -24
  24. package/api/component/detail/blocks/blocks.d.mts +2 -1
  25. package/api/component/detail/blocks/blocks.mjs +4 -3
  26. package/api/component/list/list.d.mts +0 -5
  27. package/api/component/list/list.mjs +40 -11
  28. package/api/discover/_adapter.d.mts +114 -6
  29. package/api/discover/_adapter.mjs +372 -17
  30. package/api/discover/_adapter.test.mjs +215 -0
  31. package/api/discover/_catalog-view.d.mts +115 -0
  32. package/api/discover/_catalog-view.mjs +203 -0
  33. package/api/discover/_catalog-view.test.mjs +128 -0
  34. package/api/discover/detail/detail.d.mts +18 -6
  35. package/api/discover/detail/detail.mjs +67 -13
  36. package/api/discover/detail/detail.test.mjs +85 -0
  37. package/api/discover/detail/item/item.d.mts +26 -0
  38. package/api/discover/detail/item/item.mjs +78 -0
  39. package/api/discover/detail/item/item.test.mjs +73 -0
  40. package/api/discover/discover.d.mts +3 -9
  41. package/api/discover/discover.doc.mjs +62 -18
  42. package/api/discover/discover.mjs +220 -36
  43. package/api/discover/discover.test.mjs +11 -2
  44. package/api/discover/discover.type.d.mts +150 -11
  45. package/api/discover/discover.type.mjs +107 -17
  46. package/api/discover/list/list.d.mts +20 -6
  47. package/api/discover/list/list.mjs +45 -12
  48. package/api/discover/list/list.test.mjs +46 -0
  49. package/api/discover/search/search.d.mts +18 -16
  50. package/api/discover/search/search.mjs +102 -56
  51. package/api/discover/search/search.test.mjs +144 -10
  52. package/api/docs/_adapter.d.mts +272 -41
  53. package/api/docs/_adapter.mjs +985 -108
  54. package/api/docs/compiled-topics.test.mjs +78 -0
  55. package/api/docs/detail/detail.mjs +22 -63
  56. package/api/docs/detail/section/section.d.mts +1 -1
  57. package/api/docs/detail/section/section.mjs +54 -19
  58. package/api/docs/detail/section/section.test.mjs +50 -0
  59. package/api/docs/docs.d.mts +10 -3
  60. package/api/docs/docs.doc.mjs +55 -16
  61. package/api/docs/docs.mjs +53 -10
  62. package/api/docs/docs.test.mjs +164 -4
  63. package/api/docs/docs.type.d.mts +221 -5
  64. package/api/docs/docs.type.mjs +153 -11
  65. package/api/docs/index/index.d.mts +18 -0
  66. package/api/docs/index/index.mjs +40 -0
  67. package/api/docs/index/index.test.mjs +62 -0
  68. package/api/docs/integration-tree.test.mjs +555 -0
  69. package/api/docs/integrationDocs.test.mjs +114 -8
  70. package/api/docs/list/list.mjs +28 -12
  71. package/api/docs/node/node.d.mts +43 -0
  72. package/api/docs/node/node.mjs +192 -0
  73. package/api/docs/reference-blocks.test.mjs +406 -0
  74. package/api/doctor/doctor.d.mts +99 -1
  75. package/api/doctor/doctor.doc.mjs +1 -0
  76. package/api/doctor/doctor.mjs +548 -1
  77. package/api/doctor/doctor.test.mjs +610 -1
  78. package/api/gap-report/gap-report.doc.mjs +8 -4
  79. package/api/hook/_adapter.mjs +19 -5
  80. package/api/hook/hook.doc.mjs +1 -0
  81. package/api/hook/hook.type.d.mts +3 -3
  82. package/api/hook/hook.type.mjs +11 -11
  83. package/api/hook/list/list.d.mts +2 -2
  84. package/api/hook/list/list.mjs +69 -17
  85. package/api/index.d.mts +1 -1
  86. package/api/index.mjs +1 -0
  87. package/api/init/init.doc.mjs +6 -1
  88. package/api/init/init.test.mjs +41 -1
  89. package/api/init/remove/remove.mjs +1 -1
  90. package/api/init/run/run.mjs +20 -10
  91. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  92. package/api/integration/add-contribution.d.mts +2 -1
  93. package/api/integration/add-contribution.mjs +130 -15
  94. package/api/integration/add-contribution.test.mjs +258 -7
  95. package/api/integration/add-helpers.d.mts +5 -2
  96. package/api/integration/add-helpers.mjs +36 -9
  97. package/api/integration/add-theme.mjs +34 -64
  98. package/api/integration/add-theme.test.mjs +105 -21
  99. package/api/integration/authoring-checks.mjs +138 -28
  100. package/api/integration/authoring-checks.test.mjs +179 -7
  101. package/api/integration/authoring-checks.type.mjs +6 -1
  102. package/api/integration/integration-authoring.type.d.mts +3 -1
  103. package/api/integration/integration-authoring.type.mjs +2 -0
  104. package/api/integration/integration-block-exports.test.mjs +10 -6
  105. package/api/integration/integrationAdd.doc.mjs +14 -4
  106. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  107. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  108. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  109. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  110. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  111. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  112. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  113. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  114. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  115. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  116. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  117. package/api/integration/pack-check.mjs +83 -7
  118. package/api/integration/pack-check.test.mjs +387 -47
  119. package/api/integration/pack-check.type.d.mts +26 -2
  120. package/api/integration/pack-check.type.mjs +14 -1
  121. package/api/integration/summarizeIssues.doc.mjs +1 -0
  122. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  123. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  124. package/api/integration/validate-integration.mjs +52 -102
  125. package/api/integration/validate-integration.test.mjs +179 -26
  126. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  127. package/api/integration/validateIntegration.doc.mjs +3 -2
  128. package/api/json/assertResponse.doc.mjs +1 -0
  129. package/api/json/envelope-types.test.mjs +76 -0
  130. package/api/json/index.ts +2 -0
  131. package/api/json/isError.doc.mjs +1 -0
  132. package/api/json/parseResponse.doc.mjs +3 -2
  133. package/api/layout/_adapter.mjs +20 -5
  134. package/api/layout/expand/expand.mjs +7 -5
  135. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  136. package/api/layout/grammar/grammar.mjs +2 -1
  137. package/api/layout/layoutCheck.doc.mjs +1 -0
  138. package/api/layout/layoutExpand.doc.mjs +2 -1
  139. package/api/layout/layoutGrammar.doc.mjs +1 -0
  140. package/api/search/search-return-type.test.mjs +54 -0
  141. package/api/search/search.d.mts +62 -11
  142. package/api/search/search.doc.mjs +8 -2
  143. package/api/search/search.mjs +471 -83
  144. package/api/search/search.test.mjs +124 -1
  145. package/api/search/search.type.d.mts +15 -3
  146. package/api/search/search.type.mjs +5 -2
  147. package/api/swizzle/copy/copy.mjs +28 -11
  148. package/api/swizzle/swizzle.doc.mjs +2 -1
  149. package/api/swizzle/swizzle.type.d.mts +2 -2
  150. package/api/swizzle/swizzle.type.mjs +2 -2
  151. package/api/template/copy/copy.mjs +17 -23
  152. package/api/template/copy/copy.test.mjs +17 -0
  153. package/api/template/list/list.mjs +1 -0
  154. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  155. package/api/template/template-integration.test.mjs +1072 -3
  156. package/api/template/template-suffix.test.mjs +41 -21
  157. package/api/template/template.d.mts +1 -1
  158. package/api/template/template.doc.mjs +30 -8
  159. package/api/template/template.mjs +45 -8
  160. package/api/template/template.type.d.mts +12 -14
  161. package/api/template/template.type.mjs +15 -14
  162. package/api/theme/_adapter.d.mts +2 -3
  163. package/api/theme/_adapter.mjs +4 -5
  164. package/api/theme/add/add.binary.test.mjs +84 -0
  165. package/api/theme/add/add.mjs +31 -22
  166. package/api/theme/add/add.rollback.test.mjs +158 -0
  167. package/api/theme/add/add.staging.test.mjs +83 -0
  168. package/api/theme/add/add.test.mjs +14 -1
  169. package/api/theme/build/build.family.test.mjs +7 -12
  170. package/api/theme/build/build.mjs +140 -59
  171. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  172. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  173. package/api/theme/build/build.rollback.test.mjs +148 -0
  174. package/api/theme/build/build.test.mjs +127 -0
  175. package/api/theme/build/font-warning.mjs +3 -3
  176. package/api/theme/build/font-warning.test.mjs +5 -2
  177. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  178. package/api/theme/integration-themes.test.mjs +39 -28
  179. package/api/theme/list/list.test.mjs +19 -20
  180. package/api/theme/listThemes.doc.mjs +6 -5
  181. package/api/theme/palette/generate/generate.mjs +8 -3
  182. package/api/theme/palette/generate/generate.test.mjs +96 -0
  183. package/api/theme/palette/generate/generator.d.mts +10 -13
  184. package/api/theme/palette/generate/generator.mjs +15 -4
  185. package/api/theme/palette/generate/generator.test.mjs +10 -0
  186. package/api/theme/template/template.mjs +11 -2
  187. package/api/theme/template/template.test.mjs +20 -0
  188. package/api/theme/theme.type.d.mts +170 -11
  189. package/api/theme/theme.type.mjs +94 -27
  190. package/api/theme/themeAdd.doc.mjs +4 -3
  191. package/api/theme/themeBuild.doc.mjs +8 -4
  192. package/api/theme/themeList.doc.mjs +6 -3
  193. package/api/theme/themeListAvailable.doc.mjs +5 -3
  194. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  195. package/api/theme/themeTargets.doc.mjs +1 -0
  196. package/api/theme/themeTemplate.doc.mjs +6 -2
  197. package/api/upgrade/_adapter.d.mts +32 -5
  198. package/api/upgrade/_adapter.mjs +139 -22
  199. package/api/upgrade/list/list.mjs +2 -1
  200. package/api/upgrade/list/list.test.mjs +73 -0
  201. package/api/upgrade/project-context.test.mjs +272 -0
  202. package/api/upgrade/provider-agreement.test.mjs +152 -0
  203. package/api/upgrade/run/run.mjs +356 -59
  204. package/api/upgrade/status/status.mjs +2 -2
  205. package/api/upgrade/upgrade.doc.mjs +12 -5
  206. package/api/upgrade/upgrade.type.d.mts +43 -5
  207. package/api/upgrade/upgrade.type.mjs +27 -11
  208. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  209. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  210. package/assets/codemods/integration-discovery.mjs +48 -4
  211. package/assets/codemods/integration-discovery.test.mjs +73 -0
  212. package/assets/codemods/integration-runner.mjs +56 -4
  213. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  214. package/assets/codemods/registry.mjs +1 -0
  215. package/assets/codemods/run-codemod.mjs +177 -34
  216. package/assets/codemods/runner.mjs +350 -102
  217. package/assets/codemods/term-log.mjs +32 -8
  218. package/assets/codemods/term-log.test.mjs +19 -1
  219. package/assets/codemods/transform-prop.mjs +109 -0
  220. package/assets/codemods/transform-prop.test.mjs +95 -0
  221. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  222. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  223. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  224. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  225. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  226. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  227. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  228. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  229. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  230. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  231. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  232. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  233. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  234. package/assets/docs/README.md +9 -0
  235. package/assets/docs/authoring.doc.mjs +14 -0
  236. package/assets/docs/getting-started.doc.mjs +2 -2
  237. package/assets/docs/internationalization.doc.mjs +7 -5
  238. package/assets/docs/layout.doc.dense.mjs +2 -2
  239. package/assets/docs/layout.doc.mjs +1 -1
  240. package/assets/docs/principles.doc.mjs +6 -6
  241. package/assets/docs/styling-libraries.doc.mjs +4 -4
  242. package/assets/docs/styling.doc.mjs +4 -4
  243. package/assets/docs/theme.doc.mjs +5 -5
  244. package/assets/docs/tokens.doc.mjs +1 -1
  245. package/assets/docs/tree/api.doc.mjs +30 -0
  246. package/assets/docs/tree/cli.doc.mjs +23 -0
  247. package/assets/docs/tree/commands.doc.mjs +25 -0
  248. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
  249. package/assets/docs/tree/integrations.test.mjs +62 -0
  250. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  251. package/assets/docs/working-with-ai.doc.mjs +4 -4
  252. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  253. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  254. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  255. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  256. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  262. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  263. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  264. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  265. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  266. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  267. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  268. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  269. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  270. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  271. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  272. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  273. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  274. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  275. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  276. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  277. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  278. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  279. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  280. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  281. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  282. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  283. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  284. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  285. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  286. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  287. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  288. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  289. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  290. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  291. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  292. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  293. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  294. package/authoring/_shared/contract.ts +22 -0
  295. package/authoring/codemod/codemod.doc.mjs +7 -2
  296. package/authoring/codemod/parse.d.mts +8 -8
  297. package/authoring/codemod/parse.mjs +8 -6
  298. package/authoring/codemod/type.ts +12 -0
  299. package/authoring/config/config.doc.mjs +10 -2
  300. package/authoring/config/debug-composition.test.mjs +92 -0
  301. package/authoring/config/parse.d.mts +15 -13
  302. package/authoring/config/parse.mjs +27 -8
  303. package/authoring/config/parse.test.mjs +8 -0
  304. package/authoring/config/type.ts +29 -6
  305. package/authoring/debug/debug.doc.d.mts +11 -0
  306. package/authoring/debug/debug.doc.mjs +182 -0
  307. package/authoring/debug/parse.d.mts +8 -8
  308. package/authoring/debug/parse.mjs +3 -3
  309. package/authoring/discover/discover.doc.d.mts +13 -0
  310. package/authoring/discover/discover.doc.mjs +138 -0
  311. package/authoring/discover/parse.d.mts +24 -0
  312. package/authoring/discover/parse.mjs +128 -0
  313. package/authoring/discover/parse.test.mjs +124 -0
  314. package/authoring/discover/type.ts +87 -0
  315. package/authoring/doctypes/_schema.d.mts +790 -23
  316. package/authoring/doctypes/_schema.mjs +543 -39
  317. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  318. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  319. package/authoring/doctypes/base/type.ts +41 -0
  320. package/authoring/doctypes/command/command.doc.mjs +4 -3
  321. package/authoring/doctypes/command/parse.d.mts +2 -2
  322. package/authoring/doctypes/command/parse.mjs +1 -1
  323. package/authoring/doctypes/command/type.ts +5 -4
  324. package/authoring/doctypes/component/component.doc.mjs +6 -3
  325. package/authoring/doctypes/component/parse.d.mts +2 -2
  326. package/authoring/doctypes/component/parse.mjs +1 -1
  327. package/authoring/doctypes/component/type.ts +6 -5
  328. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  329. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  330. package/authoring/doctypes/enum/parse.d.mts +2 -2
  331. package/authoring/doctypes/enum/parse.mjs +1 -1
  332. package/authoring/doctypes/enum/type.ts +4 -2
  333. package/authoring/doctypes/function/function.doc.mjs +7 -2
  334. package/authoring/doctypes/function/parse.d.mts +2 -2
  335. package/authoring/doctypes/function/parse.mjs +1 -1
  336. package/authoring/doctypes/function/type.ts +9 -4
  337. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  338. package/authoring/doctypes/hook/parse.d.mts +2 -2
  339. package/authoring/doctypes/hook/parse.mjs +1 -1
  340. package/authoring/doctypes/hook/type.ts +5 -4
  341. package/authoring/doctypes/legacy.d.mts +8 -6
  342. package/authoring/doctypes/legacy.mjs +5 -4
  343. package/authoring/doctypes/load-contract.test.mjs +233 -0
  344. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  345. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  346. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  347. package/authoring/doctypes/namespace/parse.mjs +25 -0
  348. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  349. package/authoring/doctypes/namespace/type.ts +74 -0
  350. package/authoring/doctypes/parse.d.mts +22 -18
  351. package/authoring/doctypes/parse.mjs +22 -11
  352. package/authoring/doctypes/parse.test.mjs +77 -3
  353. package/authoring/doctypes/reference/parse.d.mts +2 -2
  354. package/authoring/doctypes/reference/parse.mjs +8 -5
  355. package/authoring/doctypes/reference/reference.doc.mjs +48 -6
  356. package/authoring/doctypes/reference/type.ts +70 -7
  357. package/authoring/doctypes/schema/parse.d.mts +2 -2
  358. package/authoring/doctypes/schema/parse.mjs +1 -1
  359. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  360. package/authoring/doctypes/schema/type.ts +4 -4
  361. package/authoring/doctypes/template/parse.d.mts +94 -1
  362. package/authoring/doctypes/template/parse.mjs +40 -2
  363. package/authoring/doctypes/template/parse.test.mjs +26 -2
  364. package/authoring/doctypes/template/template.doc.mjs +13 -3
  365. package/authoring/doctypes/template/type.ts +13 -2
  366. package/authoring/doctypes/theme/parse.d.mts +35 -0
  367. package/authoring/doctypes/theme/parse.mjs +76 -0
  368. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  369. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  370. package/authoring/doctypes/theme/type.ts +42 -0
  371. package/authoring/doctypes/types.ts +12 -10
  372. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  373. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  374. package/authoring/gap-report/parse.d.mts +10 -10
  375. package/authoring/gap-report/parse.mjs +6 -6
  376. package/authoring/gap-report/type.ts +1 -1
  377. package/authoring/identity/identity.doc.d.mts +9 -0
  378. package/authoring/identity/identity.doc.mjs +61 -0
  379. package/authoring/identity/type.ts +132 -0
  380. package/authoring/index.d.mts +3 -0
  381. package/authoring/index.d.ts +62 -17
  382. package/authoring/index.mjs +4 -1
  383. package/authoring/integration/integration.doc.mjs +15 -8
  384. package/authoring/integration/parse.d.mts +2 -2
  385. package/authoring/integration/parse.mjs +1 -1
  386. package/authoring/integration/parse.test.mjs +10 -1
  387. package/authoring/integration/schema.d.mts +6 -4
  388. package/authoring/integration/schema.mjs +9 -3
  389. package/authoring/integration/type.ts +19 -8
  390. package/authoring/shadcn/receipt.d.mts +6 -6
  391. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  392. package/clients/cli/command-load-failure.test.mjs +83 -0
  393. package/clients/cli/commands/blog.doc.mjs +1 -1
  394. package/clients/cli/commands/blog.mjs +23 -8
  395. package/clients/cli/commands/blog.test.mjs +42 -1
  396. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  397. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  398. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  399. package/clients/cli/commands/build-theme.mjs +16 -50
  400. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  401. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  402. package/clients/cli/commands/build.doc.mjs +16 -8
  403. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  404. package/clients/cli/commands/build.mjs +137 -114
  405. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  406. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  407. package/clients/cli/commands/component/index.mjs +3 -8
  408. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  409. package/clients/cli/commands/component-package.test.mjs +46 -0
  410. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  411. package/clients/cli/commands/component.doc.mjs +1 -1
  412. package/clients/cli/commands/component.test.mjs +19 -0
  413. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  414. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  415. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  416. package/clients/cli/commands/discover.doc.mjs +55 -9
  417. package/clients/cli/commands/discover.mjs +393 -118
  418. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  419. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  420. package/clients/cli/commands/docs.doc.mjs +28 -6
  421. package/clients/cli/commands/docs.mjs +240 -26
  422. package/clients/cli/commands/docs.test.mjs +193 -1
  423. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  424. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  425. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  426. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  427. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  428. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  429. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  430. package/clients/cli/commands/doctor.doc.mjs +1 -1
  431. package/clients/cli/commands/doctor.mjs +59 -32
  432. package/clients/cli/commands/doctor.test.mjs +42 -0
  433. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  434. package/clients/cli/commands/gap-report.test.mjs +72 -0
  435. package/clients/cli/commands/hook/index.mjs +7 -17
  436. package/clients/cli/commands/hook.doc.mjs +1 -1
  437. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  438. package/clients/cli/commands/init.doc.mjs +20 -9
  439. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  440. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  441. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  442. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  443. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  444. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  445. package/clients/cli/commands/integration.doc.mjs +1 -1
  446. package/clients/cli/commands/integration.mjs +1 -0
  447. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  448. package/clients/cli/commands/json-contract.test.mjs +33 -0
  449. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  450. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  451. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  452. package/clients/cli/commands/layout.doc.mjs +3 -3
  453. package/clients/cli/commands/layout.mjs +21 -9
  454. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  455. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  456. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  457. package/clients/cli/commands/manifest.doc.mjs +1 -1
  458. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  459. package/clients/cli/commands/search.doc.mjs +7 -4
  460. package/clients/cli/commands/search.mjs +28 -9
  461. package/clients/cli/commands/search.test.mjs +75 -0
  462. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  463. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  464. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  465. package/clients/cli/commands/template.doc.mjs +52 -13
  466. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  467. package/clients/cli/commands/template.mjs +4 -91
  468. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  469. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  470. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  471. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  472. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  473. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  474. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  475. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  476. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  477. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  478. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  479. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  480. package/clients/cli/commands/theme.doc.mjs +1 -1
  481. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  482. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  483. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  484. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  485. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  486. package/clients/cli/commands/upgrade.mjs +29 -7
  487. package/clients/cli/formatters/index.mjs +164 -1
  488. package/clients/cli/formatters/index.test.mjs +97 -0
  489. package/clients/cli/index.mjs +21 -30
  490. package/clients/cli/latest-version-env.test.mjs +50 -0
  491. package/clients/cli/lib/cli-error.test.mjs +7 -0
  492. package/clients/cli/lib/component-format.mjs +9 -9
  493. package/clients/cli/lib/component-format.test.mjs +1 -1
  494. package/clients/cli/lib/define-command.mjs +32 -6
  495. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  496. package/clients/cli/lib/exit-codes.test.mjs +97 -0
  497. package/clients/cli/lib/hook-format.mjs +19 -10
  498. package/clients/cli/lib/json-shim.mjs +38 -2
  499. package/clients/cli/lib/json-shim.test.mjs +83 -0
  500. package/clients/cli/lib/manifest.d.ts +2 -0
  501. package/clients/cli/lib/manifest.mjs +37 -2
  502. package/clients/cli/lib/manifest.test.mjs +17 -0
  503. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  504. package/foundation/agent-docs/agent-docs.mjs +82 -12
  505. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  506. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  507. package/foundation/config/integration-debug.test.mjs +28 -3
  508. package/foundation/config/project-themes.test.mjs +11 -19
  509. package/foundation/config/project.d.mts +20 -11
  510. package/foundation/config/project.mjs +263 -91
  511. package/foundation/config/project.test.mjs +270 -21
  512. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  513. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  514. package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
  515. package/foundation/discovery/authoring-surface.d.mts +74 -0
  516. package/foundation/discovery/authoring-surface.mjs +525 -0
  517. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  518. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  519. package/foundation/discovery/cli-self-docs.mjs +490 -0
  520. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  521. package/foundation/discovery/component-discovery.d.mts +39 -1
  522. package/foundation/discovery/component-discovery.mjs +50 -1
  523. package/foundation/discovery/component-loader.d.mts +35 -38
  524. package/foundation/discovery/component-loader.mjs +53 -222
  525. package/foundation/discovery/docs-discovery.d.mts +119 -11
  526. package/foundation/discovery/docs-discovery.mjs +423 -108
  527. package/foundation/discovery/docs-discovery.test.mjs +365 -20
  528. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  529. package/foundation/discovery/docs-output-budget.mjs +50 -0
  530. package/foundation/discovery/docs-section-key.d.mts +116 -0
  531. package/foundation/discovery/docs-section-key.mjs +322 -0
  532. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  533. package/foundation/discovery/template-adapter.d.mts +113 -11
  534. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  535. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  536. package/foundation/discovery/template-adapter.mjs +774 -83
  537. package/foundation/discovery/template-adapter.test.mjs +57 -0
  538. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  539. package/foundation/discovery/template-conflict-release.mjs +40 -0
  540. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  541. package/foundation/discovery/theme-discovery.d.mts +67 -7
  542. package/foundation/discovery/theme-discovery.mjs +916 -186
  543. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  544. package/foundation/discovery/theming-targets.test.mjs +4 -0
  545. package/foundation/doc-compiler/bundle.d.mts +47 -0
  546. package/foundation/doc-compiler/bundle.mjs +278 -0
  547. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  548. package/foundation/doc-compiler/compile.d.mts +343 -0
  549. package/foundation/doc-compiler/compile.mjs +558 -0
  550. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  551. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  552. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  553. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  554. package/foundation/doc-compiler/import.d.mts +24 -0
  555. package/foundation/doc-compiler/import.mjs +59 -0
  556. package/foundation/doc-compiler/inputs.d.mts +102 -0
  557. package/foundation/doc-compiler/inputs.mjs +291 -0
  558. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  559. package/foundation/doc-compiler/ir.d.mts +22 -0
  560. package/foundation/doc-compiler/ir.mjs +471 -0
  561. package/foundation/doc-compiler/lenses.d.mts +36 -0
  562. package/foundation/doc-compiler/lenses.mjs +173 -0
  563. package/foundation/doc-compiler/links.d.mts +162 -0
  564. package/foundation/doc-compiler/links.mjs +294 -0
  565. package/foundation/doc-compiler/links.test.mjs +192 -0
  566. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  567. package/foundation/doc-compiler/overlays.d.mts +37 -0
  568. package/foundation/doc-compiler/overlays.mjs +206 -0
  569. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  570. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  571. package/foundation/doc-compiler/read.d.mts +127 -0
  572. package/foundation/doc-compiler/read.mjs +325 -0
  573. package/foundation/doc-compiler/read.test.mjs +313 -0
  574. package/foundation/doc-compiler/source.d.mts +33 -0
  575. package/foundation/doc-compiler/source.mjs +128 -0
  576. package/foundation/doc-compiler/tree.d.mts +288 -0
  577. package/foundation/doc-compiler/tree.mjs +876 -0
  578. package/foundation/doc-compiler/tree.test.mjs +598 -0
  579. package/foundation/fs/file-protection.d.mts +33 -0
  580. package/foundation/fs/file-protection.mjs +825 -0
  581. package/foundation/fs/file-protection.test.mjs +250 -0
  582. package/foundation/fs/module-loader.d.mts +1 -0
  583. package/foundation/fs/module-loader.mjs +50 -1
  584. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  585. package/foundation/fs/path-safety.d.mts +3 -2
  586. package/foundation/fs/path-safety.mjs +49 -19
  587. package/foundation/fs/path-safety.test.mjs +50 -0
  588. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  589. package/foundation/identity/provider-identity.d.mts +90 -0
  590. package/foundation/identity/provider-identity.mjs +320 -0
  591. package/foundation/identity/provider-identity.test.mjs +254 -0
  592. package/foundation/identity/providers.d.mts +7 -0
  593. package/foundation/identity/providers.mjs +16 -0
  594. package/foundation/integrations/autolink.d.mts +58 -1
  595. package/foundation/integrations/autolink.mjs +143 -45
  596. package/foundation/integrations/autolink.test.mjs +1 -1
  597. package/foundation/integrations/cli-requirement.d.mts +45 -0
  598. package/foundation/integrations/cli-requirement.mjs +154 -0
  599. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  600. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  601. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  602. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  603. package/foundation/integrations/contribution-inventory.mjs +27 -24
  604. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  605. package/foundation/integrations/integration-warnings.d.mts +9 -2
  606. package/foundation/integrations/integration-warnings.mjs +52 -21
  607. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  608. package/foundation/integrations/integrations.d.mts +63 -3
  609. package/foundation/integrations/integrations.mjs +122 -9
  610. package/foundation/integrations/integrations.test.mjs +415 -1
  611. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  612. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  613. package/foundation/integrations/provider-resolution.d.mts +152 -0
  614. package/foundation/integrations/provider-resolution.mjs +576 -0
  615. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  616. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  617. package/foundation/integrations/theme-descriptor.mjs +44 -0
  618. package/foundation/integrations/validate-contributions.d.mts +2 -0
  619. package/foundation/integrations/validate-contributions.mjs +131 -29
  620. package/foundation/response/base.d.ts +8 -4
  621. package/foundation/response/error-codes.d.mts +3 -1
  622. package/foundation/response/error-codes.d.ts +2 -0
  623. package/foundation/response/error-codes.doc.mjs +13 -4
  624. package/foundation/response/error-codes.mjs +8 -2
  625. package/foundation/response/error-codes.test.mjs +137 -10
  626. package/foundation/response/json-contract.test.mjs +57 -17
  627. package/foundation/response/json.d.mts +4 -2
  628. package/foundation/response/json.mjs +8 -10
  629. package/foundation/response/response-types.doc.d.mts +5 -1
  630. package/foundation/response/response-types.doc.mjs +41 -21
  631. package/foundation/response/response-types.doc.test.mjs +158 -0
  632. package/foundation/response/response.doc.mjs +1 -1
  633. package/foundation/text/string-utils.d.mts +8 -0
  634. package/foundation/text/string-utils.mjs +40 -10
  635. package/foundation/xle/expand.d.mts +2 -0
  636. package/foundation/xle/expand.mjs +4 -3
  637. package/foundation/xle/expand.test.mjs +54 -0
  638. package/foundation/xle/xle.test.mjs +13 -0
  639. package/package.json +10 -11
  640. package/assets/templates/themes/manifest.json +0 -95
  641. package/clients/cli/lib/update-check.mjs +0 -83
  642. package/clients/cli/lib/update-check.test.mjs +0 -137
  643. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -0,0 +1,126 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import * as stylex from '@stylexjs/stylex';
6
+ import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
7
+ import {Card} from '@astryxdesign/core/Card';
8
+ import {Grid} from '@astryxdesign/core/Grid';
9
+ import {VStack} from '@astryxdesign/core/Layout';
10
+ import {Heading, Text} from '@astryxdesign/core/Text';
11
+ import {
12
+ borderVars,
13
+ colorVars,
14
+ radiusVars,
15
+ } from '@astryxdesign/core/theme/tokens.stylex';
16
+
17
+ const styles = stylex.create({
18
+ // A hairline frame so the nested viewport's edge — the edge the gesture
19
+ // meets — is visible.
20
+ sectionFrame: {
21
+ borderWidth: borderVars['--border-width'],
22
+ borderStyle: 'solid',
23
+ borderColor: colorVars['--color-border'],
24
+ borderRadius: radiusVars['--radius-element'],
25
+ },
26
+ });
27
+
28
+ const SHARED = [
29
+ {id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
30
+ {id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
31
+ {id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
32
+ {id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
33
+ {id: 'tax', title: 'Tax region notes', meta: 'Hugo Bernard'},
34
+ {id: 'sso', title: 'SSO rollout plan', meta: 'Sofia Marchetti'},
35
+ ];
36
+
37
+ const ARCHIVED = [
38
+ {id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
39
+ {id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
40
+ {id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
41
+ {id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
42
+ {id: 'survey', title: 'Q4 survey results', meta: 'Archived in January'},
43
+ {id: 'offsite', title: 'Offsite agenda', meta: 'Archived last year'},
44
+ ];
45
+
46
+ function FileGrid({
47
+ files,
48
+ }: {
49
+ files: Array<{id: string; title: string; meta: string}>;
50
+ }) {
51
+ return (
52
+ <Grid columns={2} gap={2}>
53
+ {files.map(file => (
54
+ <Card key={file.id} variant="muted" padding={3}>
55
+ <VStack gap={1}>
56
+ <Text weight="medium" maxLines={1}>
57
+ {file.title}
58
+ </Text>
59
+ <Text type="supporting" maxLines={1}>
60
+ {file.meta}
61
+ </Text>
62
+ </VStack>
63
+ </Card>
64
+ ))}
65
+ </Grid>
66
+ );
67
+ }
68
+
69
+ export default function ScrollableAreaOverscrollChaining() {
70
+ return (
71
+ <Card width={400} padding={0}>
72
+ <ScrollableArea
73
+ axis="block"
74
+ role="region"
75
+ label="Workspace files"
76
+ height={300}
77
+ padding={4}>
78
+ <VStack gap={4}>
79
+ <VStack gap={0.5}>
80
+ <Heading level={3}>Workspace files</Heading>
81
+ <Text type="supporting">Two sections, two edge policies</Text>
82
+ </VStack>
83
+
84
+ <VStack gap={2}>
85
+ <Text type="label" color="secondary">
86
+ Shared with you
87
+ </Text>
88
+ {/* Default overscroll="allow": a gesture that reaches this
89
+ section's end carries on scrolling the panel behind it. */}
90
+ <ScrollableArea
91
+ axis="block"
92
+ label="Shared with you"
93
+ height={150}
94
+ padding={2}
95
+ xstyle={styles.sectionFrame}>
96
+ <FileGrid files={SHARED} />
97
+ </ScrollableArea>
98
+ <Text type="supporting">
99
+ Scroll past the end and the panel keeps going.
100
+ </Text>
101
+ </VStack>
102
+
103
+ <VStack gap={2}>
104
+ <Text type="label" color="secondary">
105
+ Archived
106
+ </Text>
107
+ {/* overscroll="contain" stops the gesture at this section's
108
+ edge, so the panel behind it stays put. */}
109
+ <ScrollableArea
110
+ axis="block"
111
+ label="Archived"
112
+ overscroll="contain"
113
+ height={150}
114
+ padding={2}
115
+ xstyle={styles.sectionFrame}>
116
+ <FileGrid files={ARCHIVED} />
117
+ </ScrollableArea>
118
+ <Text type="supporting">
119
+ Scroll past the end and the panel stays where it is.
120
+ </Text>
121
+ </VStack>
122
+ </VStack>
123
+ </ScrollableArea>
124
+ </Card>
125
+ );
126
+ }
@@ -0,0 +1,15 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
4
+ export const doc = {
5
+ type: 'block',
6
+ exampleFor: 'ScrollableArea',
7
+ name: 'ScrollableArea',
8
+ displayName: 'Scrollable Area',
9
+ description:
10
+ 'A fixed-height file panel that scrolls on the block axis; the heading sits inside the viewport, so it scrolls away with the content.',
11
+ isReady: true,
12
+ aspectRatio: 1,
13
+ isShowcase: true,
14
+ componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
15
+ };
@@ -0,0 +1,86 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
6
+ import {Card} from '@astryxdesign/core/Card';
7
+ import {Grid} from '@astryxdesign/core/Grid';
8
+ import {VStack} from '@astryxdesign/core/Layout';
9
+ import {Heading, Text} from '@astryxdesign/core/Text';
10
+
11
+ const SECTIONS = [
12
+ {
13
+ label: 'Recently opened',
14
+ files: [
15
+ {id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
16
+ {id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
17
+ {
18
+ id: 'onboarding',
19
+ title: 'Onboarding flow v4',
20
+ meta: 'Edited 4 days ago',
21
+ },
22
+ {id: 'macros', title: 'Support macros', meta: 'Edited last week'},
23
+ ],
24
+ },
25
+ {
26
+ label: 'Shared with you',
27
+ files: [
28
+ {id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
29
+ {id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
30
+ {id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
31
+ {id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
32
+ ],
33
+ },
34
+ {
35
+ label: 'Archived',
36
+ files: [
37
+ {id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
38
+ {id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
39
+ {id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
40
+ {id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
41
+ ],
42
+ },
43
+ ];
44
+
45
+ export default function ScrollableAreaShowcase() {
46
+ return (
47
+ <Card width={380} padding={0}>
48
+ {/* The heading sits inside the viewport, so it scrolls away with the
49
+ content instead of staying pinned above it. */}
50
+ <ScrollableArea
51
+ axis="block"
52
+ role="region"
53
+ label="Workspace files"
54
+ height={300}
55
+ padding={4}>
56
+ <VStack gap={4}>
57
+ <VStack gap={0.5}>
58
+ <Heading level={3}>Workspace files</Heading>
59
+ <Text type="supporting">12 files across 3 sections</Text>
60
+ </VStack>
61
+ {SECTIONS.map(section => (
62
+ <VStack key={section.label} gap={2}>
63
+ <Text type="label" color="secondary">
64
+ {section.label}
65
+ </Text>
66
+ <Grid columns={2} gap={2}>
67
+ {section.files.map(file => (
68
+ <Card key={file.id} variant="muted" padding={3}>
69
+ <VStack gap={1}>
70
+ <Text weight="medium" maxLines={1}>
71
+ {file.title}
72
+ </Text>
73
+ <Text type="supporting" maxLines={1}>
74
+ {file.meta}
75
+ </Text>
76
+ </VStack>
77
+ </Card>
78
+ ))}
79
+ </Grid>
80
+ </VStack>
81
+ ))}
82
+ </VStack>
83
+ </ScrollableArea>
84
+ </Card>
85
+ );
86
+ }
@@ -0,0 +1,14 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
4
+ export const doc = {
5
+ type: 'block',
6
+ exampleFor: 'ScrollableArea',
7
+ name: 'ScrollableArea — Sticky Section Labels',
8
+ displayName: 'Scrollable Area — Sticky Section Labels',
9
+ description:
10
+ 'A scrollable viewport is the containing block for position: sticky, so section labels pin to the top edge of the list instead of the page.',
11
+ isReady: true,
12
+ aspectRatio: 1,
13
+ componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
14
+ };
@@ -0,0 +1,99 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import * as stylex from '@stylexjs/stylex';
6
+ import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
7
+ import {Card} from '@astryxdesign/core/Card';
8
+ import {Grid} from '@astryxdesign/core/Grid';
9
+ import {VStack} from '@astryxdesign/core/Layout';
10
+ import {Heading, Text} from '@astryxdesign/core/Text';
11
+ import {colorVars, spacingVars} from '@astryxdesign/core/theme/tokens.stylex';
12
+
13
+ const styles = stylex.create({
14
+ sectionLabel: {
15
+ position: 'sticky',
16
+ insetBlockStart: 0,
17
+ zIndex: 1,
18
+ backgroundColor: colorVars['--color-background-card'],
19
+ paddingBlock: spacingVars['--spacing-2'],
20
+ },
21
+ });
22
+
23
+ const SECTIONS = [
24
+ {
25
+ label: 'Recently opened',
26
+ files: [
27
+ {id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
28
+ {id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
29
+ {
30
+ id: 'onboarding',
31
+ title: 'Onboarding flow v4',
32
+ meta: 'Edited 4 days ago',
33
+ },
34
+ {id: 'macros', title: 'Support macros', meta: 'Edited last week'},
35
+ ],
36
+ },
37
+ {
38
+ label: 'Shared with you',
39
+ files: [
40
+ {id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
41
+ {id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
42
+ {id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
43
+ {id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
44
+ ],
45
+ },
46
+ {
47
+ label: 'Archived',
48
+ files: [
49
+ {id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
50
+ {id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
51
+ {id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
52
+ {id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
53
+ ],
54
+ },
55
+ ];
56
+
57
+ export default function ScrollableAreaStickyGroupHeaders() {
58
+ return (
59
+ <Card width={380} padding={0}>
60
+ {/* The viewport is the containing block for position: sticky. The panel
61
+ heading is ordinary content and scrolls away; the section labels
62
+ below it pin to the top of the list, not the page. */}
63
+ <ScrollableArea
64
+ axis="block"
65
+ role="region"
66
+ label="Workspace files"
67
+ height={300}
68
+ padding={4}>
69
+ <VStack gap={0.5} paddingBlockEnd={2}>
70
+ <Heading level={3}>Workspace files</Heading>
71
+ <Text type="supporting">12 files across 3 sections</Text>
72
+ </VStack>
73
+ {SECTIONS.map(section => (
74
+ <section key={section.label}>
75
+ <div {...stylex.props(styles.sectionLabel)}>
76
+ <Text type="label" color="secondary">
77
+ {section.label}
78
+ </Text>
79
+ </div>
80
+ <Grid columns={2} gap={2}>
81
+ {section.files.map(file => (
82
+ <Card key={file.id} variant="muted" padding={3}>
83
+ <VStack gap={1}>
84
+ <Text weight="medium" maxLines={1}>
85
+ {file.title}
86
+ </Text>
87
+ <Text type="supporting" maxLines={1}>
88
+ {file.meta}
89
+ </Text>
90
+ </VStack>
91
+ </Card>
92
+ ))}
93
+ </Grid>
94
+ </section>
95
+ ))}
96
+ </ScrollableArea>
97
+ </Card>
98
+ );
99
+ }
@@ -0,0 +1,14 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
4
+ export const doc = {
5
+ type: 'block',
6
+ exampleFor: 'ScrollableArea',
7
+ name: 'ScrollableArea — Sticky Passthrough',
8
+ displayName: 'Scrollable Area — Sticky Passthrough',
9
+ description:
10
+ 'A section whose content fits clips instead of scrolling, so its sticky label passes outward and pins to the panel edge. The next section sets stickyContainment="always" and keeps its label in its own box.',
11
+ isReady: true,
12
+ aspectRatio: 1,
13
+ componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
14
+ };
@@ -0,0 +1,122 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import * as stylex from '@stylexjs/stylex';
6
+ import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
7
+ import {Card} from '@astryxdesign/core/Card';
8
+ import {Grid} from '@astryxdesign/core/Grid';
9
+ import {VStack} from '@astryxdesign/core/Layout';
10
+ import {Heading, Text} from '@astryxdesign/core/Text';
11
+ import {colorVars, spacingVars} from '@astryxdesign/core/theme/tokens.stylex';
12
+
13
+ const styles = stylex.create({
14
+ sectionLabel: {
15
+ position: 'sticky',
16
+ insetBlockStart: 0,
17
+ zIndex: 1,
18
+ backgroundColor: colorVars['--color-background-card'],
19
+ paddingBlock: spacingVars['--spacing-2'],
20
+ },
21
+ });
22
+
23
+ const SHARED = [
24
+ {id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
25
+ {id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
26
+ {id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
27
+ {id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
28
+ {id: 'tax', title: 'Tax region notes', meta: 'Hugo Bernard'},
29
+ {id: 'sso', title: 'SSO rollout plan', meta: 'Sofia Marchetti'},
30
+ ];
31
+
32
+ const TEMPLATES = [
33
+ {id: 'weekly', title: 'Weekly report', meta: 'Used 24 times'},
34
+ {id: 'checklist', title: 'Launch checklist', meta: 'Used 18 times'},
35
+ {id: 'review', title: 'Design review', meta: 'Used 11 times'},
36
+ {id: 'retro', title: 'Retro board', meta: 'Used 9 times'},
37
+ {id: 'brief', title: 'Project brief', meta: 'Used 7 times'},
38
+ {id: 'postmortem', title: 'Postmortem', meta: 'Used 4 times'},
39
+ ];
40
+
41
+ const ARCHIVED = [
42
+ {id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
43
+ {id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
44
+ {id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
45
+ {id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
46
+ {id: 'survey', title: 'Q4 survey results', meta: 'Archived in January'},
47
+ {id: 'offsite', title: 'Offsite agenda', meta: 'Archived last year'},
48
+ ];
49
+
50
+ function FileGrid({
51
+ files,
52
+ }: {
53
+ files: Array<{id: string; title: string; meta: string}>;
54
+ }) {
55
+ return (
56
+ <Grid columns={2} gap={2}>
57
+ {files.map(file => (
58
+ <Card key={file.id} variant="muted" padding={3}>
59
+ <VStack gap={1}>
60
+ <Text weight="medium" maxLines={1}>
61
+ {file.title}
62
+ </Text>
63
+ <Text type="supporting" maxLines={1}>
64
+ {file.meta}
65
+ </Text>
66
+ </VStack>
67
+ </Card>
68
+ ))}
69
+ </Grid>
70
+ );
71
+ }
72
+
73
+ export default function ScrollableAreaStickyPassthrough() {
74
+ return (
75
+ <Card width={400} padding={0}>
76
+ <ScrollableArea
77
+ axis="block"
78
+ role="region"
79
+ label="Workspace files"
80
+ height={300}
81
+ padding={4}>
82
+ <VStack gap={0.5} paddingBlockEnd={2}>
83
+ <Heading level={3}>Workspace files</Heading>
84
+ <Text type="supporting">18 files across 3 sections</Text>
85
+ </VStack>
86
+
87
+ {/* This section's content fits, so its viewport clips instead of
88
+ scrolling and never becomes the Sticky boundary: the label
89
+ passes outward and pins to the panel's edge. */}
90
+ <ScrollableArea axis="block" label="Shared with you">
91
+ <div {...stylex.props(styles.sectionLabel)}>
92
+ <Text type="label" color="secondary">
93
+ Shared with you
94
+ </Text>
95
+ </div>
96
+ <FileGrid files={SHARED} />
97
+ </ScrollableArea>
98
+
99
+ {/* Same fitting content, but containment is explicit: this viewport
100
+ stays the Sticky boundary, so its label leaves with the box. */}
101
+ <ScrollableArea
102
+ axis="block"
103
+ label="Templates"
104
+ stickyContainment="always">
105
+ <div {...stylex.props(styles.sectionLabel)}>
106
+ <Text type="label" color="secondary">
107
+ Templates
108
+ </Text>
109
+ </div>
110
+ <FileGrid files={TEMPLATES} />
111
+ </ScrollableArea>
112
+
113
+ <div {...stylex.props(styles.sectionLabel)}>
114
+ <Text type="label" color="secondary">
115
+ Archived
116
+ </Text>
117
+ </div>
118
+ <FileGrid files={ARCHIVED} />
119
+ </ScrollableArea>
120
+ </Card>
121
+ );
122
+ }
@@ -0,0 +1,14 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
4
+ export const doc = {
5
+ type: 'block',
6
+ exampleFor: 'ScrollableArea',
7
+ name: 'ScrollableArea — Two-Axis Board',
8
+ displayName: 'Scrollable Area — Two-Axis Board',
9
+ description:
10
+ 'axis="both" gives the content box max-content inline sizing, so a board wider and taller than its panel scrolls on both axes from one viewport.',
11
+ isReady: true,
12
+ aspectRatio: 1,
13
+ componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
14
+ };
@@ -0,0 +1,95 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
6
+ import {Card} from '@astryxdesign/core/Card';
7
+ import {HStack, VStack} from '@astryxdesign/core/Layout';
8
+ import {Heading, Text} from '@astryxdesign/core/Text';
9
+
10
+ const COLUMNS = [
11
+ {
12
+ label: 'Recently opened',
13
+ files: [
14
+ {id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
15
+ {id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
16
+ {
17
+ id: 'onboarding',
18
+ title: 'Onboarding flow v4',
19
+ meta: 'Edited 4 days ago',
20
+ },
21
+ {id: 'macros', title: 'Support macros', meta: 'Edited last week'},
22
+ ],
23
+ },
24
+ {
25
+ label: 'Shared with you',
26
+ files: [
27
+ {id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
28
+ {id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
29
+ {id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
30
+ {id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
31
+ ],
32
+ },
33
+ {
34
+ label: 'Templates',
35
+ files: [
36
+ {id: 'weekly', title: 'Weekly report', meta: 'Used 24 times'},
37
+ {id: 'checklist', title: 'Launch checklist', meta: 'Used 18 times'},
38
+ {id: 'review', title: 'Design review', meta: 'Used 11 times'},
39
+ {id: 'retro', title: 'Retro board', meta: 'Used 9 times'},
40
+ ],
41
+ },
42
+ {
43
+ label: 'Archived',
44
+ files: [
45
+ {id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
46
+ {id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
47
+ {id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
48
+ {id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
49
+ ],
50
+ },
51
+ ];
52
+
53
+ export default function ScrollableAreaTwoAxisBoard() {
54
+ return (
55
+ <Card width={420} padding={0}>
56
+ {/* axis="both" gives the content box max-content inline sizing, so the
57
+ board is free to be wider than the viewport on both axes. The
58
+ heading is inside that box and travels with it. */}
59
+ <ScrollableArea
60
+ axis="both"
61
+ role="region"
62
+ label="Workspace board"
63
+ height={300}
64
+ padding={4}>
65
+ <VStack gap={4}>
66
+ <VStack gap={0.5}>
67
+ <Heading level={3}>Workspace board</Heading>
68
+ <Text type="supporting">16 files across 4 sections</Text>
69
+ </VStack>
70
+ <HStack gap={3} vAlign="start">
71
+ {COLUMNS.map(column => (
72
+ <VStack key={column.label} gap={2} width={180}>
73
+ <Text type="label" color="secondary">
74
+ {column.label}
75
+ </Text>
76
+ {column.files.map(file => (
77
+ <Card key={file.id} variant="muted" padding={3}>
78
+ <VStack gap={1}>
79
+ <Text weight="medium" maxLines={1}>
80
+ {file.title}
81
+ </Text>
82
+ <Text type="supporting" maxLines={1}>
83
+ {file.meta}
84
+ </Text>
85
+ </VStack>
86
+ </Card>
87
+ ))}
88
+ </VStack>
89
+ ))}
90
+ </HStack>
91
+ </VStack>
92
+ </ScrollableArea>
93
+ </Card>
94
+ );
95
+ }
@@ -0,0 +1,14 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
4
+ export const doc = {
5
+ type: 'block',
6
+ exampleFor: 'useTableSelection',
7
+ name: 'Table: Bulk Actions',
8
+ displayName: 'Table: Bulk Actions',
9
+ description:
10
+ 'Controlled row selection with the reusable TableSelectionToolbar rendered in flow above the table. Product actions occupy the logical start; synchronized selection count and complete clear action occupy the logical end.',
11
+ isReady: true,
12
+ aspectRatio: 16 / 9,
13
+ componentsUsed: ['Table', 'TableSelectionToolbar', 'Button'],
14
+ };
@@ -0,0 +1,71 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ import {useState} from 'react';
6
+ import {Button} from '@astryxdesign/core/Button';
7
+ import {
8
+ Table,
9
+ TableSelectionToolbar,
10
+ useTableSelection,
11
+ useTableSelectionState,
12
+ proportional,
13
+ } from '@astryxdesign/core/Table';
14
+ import type {TableColumn} from '@astryxdesign/core/Table';
15
+
16
+ interface User extends Record<string, unknown> {
17
+ id: string;
18
+ name: string;
19
+ email: string;
20
+ role: string;
21
+ }
22
+
23
+ const users: User[] = [
24
+ {id: '1', name: 'Alice', email: 'alice@example.com', role: 'Engineer'},
25
+ {id: '2', name: 'Bob', email: 'bob@example.com', role: 'Designer'},
26
+ {id: '3', name: 'Charlie', email: 'charlie@example.com', role: 'Manager'},
27
+ {id: '4', name: 'Diana', email: 'diana@example.com', role: 'Engineer'},
28
+ {id: '5', name: 'Eve', email: 'eve@example.com', role: 'Admin'},
29
+ ];
30
+
31
+ const columns: TableColumn<User>[] = [
32
+ {key: 'name', header: 'Name', width: proportional(1)},
33
+ {key: 'email', header: 'Email', width: proportional(2)},
34
+ {key: 'role', header: 'Role', width: proportional(1)},
35
+ ];
36
+
37
+ export default function TableBulkActionsTable() {
38
+ const [selectedKeys, setSelectedKeys] = useState<Set<string>>(new Set());
39
+
40
+ const {selectionConfig, selectionState} = useTableSelectionState<User>({
41
+ data: users,
42
+ idKey: 'id',
43
+ selectedKeys,
44
+ setSelectedKeys,
45
+ });
46
+ const selectionPlugin = useTableSelection<User>(selectionConfig);
47
+
48
+ return (
49
+ <div>
50
+ <TableSelectionToolbar
51
+ selection={selectionState}
52
+ startContent={
53
+ <>
54
+ <Button label="Export" variant="ghost" onClick={() => {}} />
55
+ <Button
56
+ label="Delete"
57
+ variant="ghost"
58
+ onClick={selectionState.clearSelection}
59
+ />
60
+ </>
61
+ }
62
+ />
63
+ <Table
64
+ data={users}
65
+ columns={columns}
66
+ idKey="id"
67
+ plugins={{selection: selectionPlugin}}
68
+ />
69
+ </div>
70
+ );
71
+ }