@astryxdesign/core 0.6.2 → 0.6.3-canary.01fa439

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 (384) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/BottomSheet/BottomSheet.d.ts +1 -1
  3. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  4. package/dist/BottomSheet/BottomSheet.js +3 -1
  5. package/dist/BottomSheet/BottomSheetPanel.d.ts +7 -5
  6. package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheetPanel.js +56 -19
  8. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  9. package/dist/Chat/ChatComposer.js +10 -5
  10. package/dist/Chat/ChatComposerDrawer.d.ts +19 -5
  11. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  12. package/dist/Chat/ChatComposerDrawer.js +48 -23
  13. package/dist/Chat/ChatComposerInput.d.ts +11 -3
  14. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  15. package/dist/Chat/ChatComposerInput.js +63 -16
  16. package/dist/Chat/ChatDictationButton.d.ts +3 -2
  17. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  18. package/dist/Chat/ChatDictationButton.js +6 -4
  19. package/dist/Chat/ChatSendButton.js +1 -1
  20. package/dist/Chat/index.d.ts +1 -1
  21. package/dist/Chat/index.d.ts.map +1 -1
  22. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  23. package/dist/CheckboxInput/CheckboxInput.js +12 -2
  24. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  25. package/dist/Collapsible/Collapsible.js +6 -1
  26. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  27. package/dist/CommandPalette/CommandPaletteInput.js +1 -1
  28. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  29. package/dist/ComplexSelector/ComplexSelector.js +1 -1
  30. package/dist/DateInput/DateInput.d.ts.map +1 -1
  31. package/dist/DateInput/DateInput.js +4 -4
  32. package/dist/DateInput/NativeDateField.d.ts.map +1 -1
  33. package/dist/DateInput/NativeDateField.js +16 -16
  34. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  35. package/dist/DateInput/TouchDateField.js +2 -2
  36. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  37. package/dist/DateRangeInput/DateRangeInput.js +4 -4
  38. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  39. package/dist/DateTimeInput/DateTimeInput.js +8 -8
  40. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  41. package/dist/DateTimeInput/TouchDateTimeField.js +4 -4
  42. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +9 -3
  43. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -1
  44. package/dist/DateTimeInput/nativePickerSegmentStyles.js +3 -3
  45. package/dist/Dialog/DialogHeader.d.ts +8 -1
  46. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  47. package/dist/Dialog/DialogHeader.js +10 -1
  48. package/dist/Field/InputClearButton.d.ts +4 -2
  49. package/dist/Field/InputClearButton.d.ts.map +1 -1
  50. package/dist/Field/InputClearButton.js +4 -2
  51. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  52. package/dist/Field/PanelSearchInput.js +1 -1
  53. package/dist/FileInput/FileInput.d.ts.map +1 -1
  54. package/dist/FileInput/FileInput.js +7 -7
  55. package/dist/Kbd/Kbd.d.ts +5 -3
  56. package/dist/Kbd/Kbd.d.ts.map +1 -1
  57. package/dist/Kbd/Kbd.js +36 -42
  58. package/dist/Link/Link.d.ts.map +1 -1
  59. package/dist/Link/Link.js +6 -2
  60. package/dist/Markdown/Markdown.d.ts +8 -2
  61. package/dist/Markdown/Markdown.d.ts.map +1 -1
  62. package/dist/Markdown/Markdown.fr23.bench.d.ts +2 -0
  63. package/dist/Markdown/Markdown.fr23.bench.d.ts.map +1 -0
  64. package/dist/Markdown/Markdown.fr23.bench.js +150 -0
  65. package/dist/Markdown/Markdown.fr23.sampling.d.ts +2 -0
  66. package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -0
  67. package/dist/Markdown/Markdown.fr23.sampling.js +43 -0
  68. package/dist/Markdown/Markdown.js +262 -109
  69. package/dist/Markdown/ast.d.ts +162 -0
  70. package/dist/Markdown/ast.d.ts.map +1 -0
  71. package/dist/Markdown/ast.js +74 -0
  72. package/dist/Markdown/index.d.ts +5 -3
  73. package/dist/Markdown/index.d.ts.map +1 -1
  74. package/dist/Markdown/index.js +3 -2
  75. package/dist/Markdown/parser/index.d.ts +10 -0
  76. package/dist/Markdown/parser/index.d.ts.map +1 -0
  77. package/dist/Markdown/parser/index.js +10 -0
  78. package/dist/Markdown/parser.d.ts +126 -58
  79. package/dist/Markdown/parser.d.ts.map +1 -1
  80. package/dist/Markdown/parser.js +716 -167
  81. package/dist/Markdown/plugins/frontmatter.d.ts +32 -0
  82. package/dist/Markdown/plugins/frontmatter.d.ts.map +1 -0
  83. package/dist/Markdown/plugins/frontmatter.js +132 -0
  84. package/dist/Markdown/plugins/index.d.ts +16 -0
  85. package/dist/Markdown/plugins/index.d.ts.map +1 -0
  86. package/dist/Markdown/plugins/index.js +13 -0
  87. package/dist/Markdown/plugins/protocol.d.ts +191 -0
  88. package/dist/Markdown/plugins/protocol.d.ts.map +1 -0
  89. package/dist/Markdown/plugins/protocol.js +957 -0
  90. package/dist/Markdown/plugins/semanticFence.d.ts +36 -0
  91. package/dist/Markdown/plugins/semanticFence.d.ts.map +1 -0
  92. package/dist/Markdown/plugins/semanticFence.js +213 -0
  93. package/dist/Markdown/plugins/sourceDecoration.d.ts +76 -0
  94. package/dist/Markdown/plugins/sourceDecoration.d.ts.map +1 -0
  95. package/dist/Markdown/plugins/sourceDecoration.js +393 -0
  96. package/dist/Markdown/plugins/textTransform.d.ts +30 -0
  97. package/dist/Markdown/plugins/textTransform.d.ts.map +1 -0
  98. package/dist/Markdown/plugins/textTransform.js +374 -0
  99. package/dist/Markdown/remark.d.ts +196 -0
  100. package/dist/Markdown/remark.d.ts.map +1 -0
  101. package/dist/Markdown/remark.js +1062 -0
  102. package/dist/Markdown/url.d.ts +4 -0
  103. package/dist/Markdown/url.d.ts.map +1 -0
  104. package/dist/Markdown/url.js +25 -0
  105. package/dist/Markdown/utils.d.ts +4 -2
  106. package/dist/Markdown/utils.d.ts.map +1 -1
  107. package/dist/Markdown/utils.js +2 -1
  108. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  109. package/dist/NumberInput/NumberInput.js +4 -4
  110. package/dist/Outline/index.d.ts +1 -0
  111. package/dist/Outline/index.d.ts.map +1 -1
  112. package/dist/Outline/parseOutlineFromMarkdown.d.ts +7 -1
  113. package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
  114. package/dist/Outline/parseOutlineFromMarkdown.js +14 -8
  115. package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -1
  116. package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
  117. package/dist/Outline/useOutlineFromMarkdown.js +8 -3
  118. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  119. package/dist/PowerSearch/PowerSearchEditPopover.js +46 -30
  120. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  121. package/dist/ProgressBar/ProgressBar.js +36 -31
  122. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  123. package/dist/RadioList/RadioListItem.js +13 -1
  124. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  125. package/dist/SegmentedControl/SegmentedControlItem.js +5 -5
  126. package/dist/Selector/Selector.d.ts +9 -7
  127. package/dist/Selector/Selector.d.ts.map +1 -1
  128. package/dist/Selector/Selector.js +7 -5
  129. package/dist/SideNav/SideNav.d.ts +2 -1
  130. package/dist/SideNav/SideNav.d.ts.map +1 -1
  131. package/dist/SideNav/SideNav.js +9 -3
  132. package/dist/Slider/Slider.d.ts.map +1 -1
  133. package/dist/Slider/Slider.js +28 -12
  134. package/dist/Spinner/Spinner.d.ts.map +1 -1
  135. package/dist/Spinner/Spinner.js +23 -7
  136. package/dist/Switch/Switch.d.ts.map +1 -1
  137. package/dist/Switch/Switch.js +11 -0
  138. package/dist/TabList/Tab.d.ts +1 -1
  139. package/dist/TabList/Tab.d.ts.map +1 -1
  140. package/dist/TabList/Tab.js +20 -7
  141. package/dist/Table/Table.d.ts +1 -0
  142. package/dist/Table/Table.d.ts.map +1 -1
  143. package/dist/Table/Table.js +29 -13
  144. package/dist/TextArea/TextArea.d.ts.map +1 -1
  145. package/dist/TextArea/TextArea.js +1 -1
  146. package/dist/TextInput/TextInput.d.ts.map +1 -1
  147. package/dist/TextInput/TextInput.js +2 -2
  148. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  149. package/dist/TimeInput/TimeInput.js +4 -4
  150. package/dist/ToggleButton/ToggleButton.d.ts +9 -6
  151. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  152. package/dist/ToggleButton/ToggleButton.js +15 -27
  153. package/dist/TreeList/TreeList.d.ts.map +1 -1
  154. package/dist/TreeList/TreeList.js +3 -0
  155. package/dist/TreeList/TreeListItem.d.ts +6 -1
  156. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  157. package/dist/TreeList/TreeListItem.js +12 -2
  158. package/dist/TreeList/TreeListTypes.d.ts +8 -1
  159. package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
  160. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  161. package/dist/Typeahead/BaseTypeahead.js +16 -7
  162. package/dist/astryx.css +18 -7
  163. package/dist/hooks/scrollKeyboardDelegation.d.ts +3 -0
  164. package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -0
  165. package/dist/hooks/scrollKeyboardDelegation.js +146 -0
  166. package/dist/hooks/useScrollableArea.d.ts +6 -2
  167. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  168. package/dist/hooks/useScrollableArea.js +17 -5
  169. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  170. package/dist/theme/generateThemeRules.js +10 -0
  171. package/dist/utils/interactionOverlay.stylex.d.ts +8 -0
  172. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  173. package/dist/utils/interactionOverlay.stylex.js +9 -0
  174. package/locales/af-ZA.json +530 -1
  175. package/locales/ar-SA.json +490 -1
  176. package/locales/ca-ES.json +514 -1
  177. package/locales/cs-CZ.json +498 -1
  178. package/locales/da-DK.json +522 -1
  179. package/locales/de-DE.json +522 -1
  180. package/locales/el-GR.json +498 -1
  181. package/locales/es-ES.json +510 -1
  182. package/locales/fi-FI.json +498 -1
  183. package/locales/fr-FR.json +534 -1
  184. package/locales/he-IL.json +498 -1
  185. package/locales/hu-HU.json +498 -1
  186. package/locales/it-IT.json +510 -1
  187. package/locales/ja-JP.json +490 -1
  188. package/locales/ko-KR.json +498 -1
  189. package/locales/nl-NL.json +534 -1
  190. package/locales/no-NO.json +510 -1
  191. package/locales/pl-PL.json +506 -1
  192. package/locales/pt-BR.json +506 -1
  193. package/locales/pt-PT.json +506 -1
  194. package/locales/ro-RO.json +506 -1
  195. package/locales/ru-RU.json +498 -1
  196. package/locales/sr-SP.json +498 -1
  197. package/locales/sv-SE.json +502 -1
  198. package/locales/tr-TR.json +498 -1
  199. package/locales/uk-UA.json +498 -1
  200. package/locales/vi-VN.json +502 -1
  201. package/locales/zh-CN.json +490 -1
  202. package/locales/zh-TW.json +490 -1
  203. package/package.json +19 -4
  204. package/src/BottomSheet/BottomSheet.doc.mjs +8 -1
  205. package/src/BottomSheet/BottomSheet.spec.md +46 -20
  206. package/src/BottomSheet/BottomSheet.test.tsx +6 -3
  207. package/src/BottomSheet/BottomSheet.tsx +3 -1
  208. package/src/BottomSheet/BottomSheetKeyboard.test.tsx +195 -0
  209. package/src/BottomSheet/BottomSheetPanel.test.tsx +11 -1
  210. package/src/BottomSheet/BottomSheetPanel.tsx +49 -16
  211. package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +344 -0
  212. package/src/Button/__tests__/Button.a11y.chromium.spec.ts +17 -1
  213. package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -29
  214. package/src/Button/__tests__/Button.a11y.renders.tsx +9 -2
  215. package/src/Button/__tests__/Button.a11y.states.ts +9 -0
  216. package/src/Chat/ChatComposer.doc.mjs +14 -0
  217. package/src/Chat/ChatComposer.spec.md +230 -0
  218. package/src/Chat/ChatComposer.test.tsx +57 -0
  219. package/src/Chat/ChatComposer.tsx +21 -9
  220. package/src/Chat/ChatComposerDrawer.doc.mjs +63 -5
  221. package/src/Chat/ChatComposerDrawer.spec.md +267 -0
  222. package/src/Chat/ChatComposerDrawer.test.tsx +81 -12
  223. package/src/Chat/ChatComposerDrawer.tsx +38 -9
  224. package/src/Chat/ChatComposerInput.doc.mjs +114 -26
  225. package/src/Chat/ChatComposerInput.spec.md +185 -0
  226. package/src/Chat/ChatComposerInput.test.tsx +113 -3
  227. package/src/Chat/ChatComposerInput.tsx +78 -13
  228. package/src/Chat/ChatComposerTokenElement.spec.md +152 -0
  229. package/src/Chat/ChatComposerTokenElement.test.tsx +85 -0
  230. package/src/Chat/ChatDictationButton.doc.mjs +3 -3
  231. package/src/Chat/ChatDictationButton.spec.md +160 -0
  232. package/src/Chat/ChatDictationButton.test.tsx +92 -27
  233. package/src/Chat/ChatDictationButton.tsx +8 -6
  234. package/src/Chat/ChatSendButton.test.tsx +1 -4
  235. package/src/Chat/ChatSendButton.tsx +1 -1
  236. package/src/Chat/index.ts +1 -0
  237. package/src/CheckboxInput/CheckboxInput.doc.mjs +11 -0
  238. package/src/CheckboxInput/CheckboxInput.test.tsx +34 -0
  239. package/src/CheckboxInput/CheckboxInput.tsx +21 -1
  240. package/src/ClickableCard/ClickableCard.test.tsx +102 -5
  241. package/src/Collapsible/Collapsible.doc.mjs +11 -0
  242. package/src/Collapsible/Collapsible.test.tsx +21 -0
  243. package/src/Collapsible/Collapsible.tsx +5 -0
  244. package/src/CommandPalette/CommandPaletteInput.tsx +6 -1
  245. package/src/ComplexSelector/ComplexSelector.tsx +6 -1
  246. package/src/DateInput/DateInput.tsx +6 -1
  247. package/src/DateInput/NativeDateField.tsx +24 -8
  248. package/src/DateInput/TouchDateField.tsx +6 -2
  249. package/src/DateRangeInput/DateRangeInput.tsx +6 -1
  250. package/src/DateTimeInput/DateTimeInput.tsx +6 -1
  251. package/src/DateTimeInput/TouchDateTimeField.tsx +6 -1
  252. package/src/DateTimeInput/nativePickerSegmentStyles.ts +24 -8
  253. package/src/Dialog/DialogHeader.doc.mjs +12 -0
  254. package/src/Dialog/DialogHeader.test.tsx +97 -0
  255. package/src/Dialog/DialogHeader.tsx +25 -3
  256. package/src/Dialog/modules/DialogHeader.spec.md +75 -38
  257. package/src/Field/InputClearButton.test.tsx +17 -3
  258. package/src/Field/InputClearButton.tsx +5 -2
  259. package/src/Field/PanelSearchInput.tsx +5 -2
  260. package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +1 -1
  261. package/src/FileInput/FileInput.tsx +11 -2
  262. package/src/Kbd/Kbd.doc.mjs +3 -3
  263. package/src/Kbd/Kbd.test.tsx +57 -1
  264. package/src/Kbd/Kbd.tsx +57 -37
  265. package/src/Layout/LayoutFooter.doc.mjs +17 -0
  266. package/src/Link/Link.doc.mjs +11 -0
  267. package/src/Link/Link.test.tsx +24 -0
  268. package/src/Link/Link.tsx +5 -0
  269. package/src/List/List.spec.md +200 -0
  270. package/src/Markdown/Markdown.doc.mjs +272 -0
  271. package/src/Markdown/Markdown.fr23.bench.ts +174 -0
  272. package/src/Markdown/Markdown.fr23.perf.test.ts +249 -0
  273. package/src/Markdown/Markdown.fr23.sampling.ts +49 -0
  274. package/src/Markdown/Markdown.helpers.perf.test.ts +489 -0
  275. package/src/Markdown/Markdown.public.test.ts +126 -3
  276. package/src/Markdown/Markdown.spec.md +197 -44
  277. package/src/Markdown/Markdown.test.tsx +11 -0
  278. package/src/Markdown/Markdown.tsx +414 -135
  279. package/src/Markdown/ast.test.ts +307 -0
  280. package/src/Markdown/ast.ts +337 -0
  281. package/src/Markdown/incremental.test.ts +12 -0
  282. package/src/Markdown/index.ts +37 -1
  283. package/src/Markdown/modules/remark.spec.md +269 -0
  284. package/src/Markdown/parser/index.ts +64 -0
  285. package/src/Markdown/parser.public.test.ts +103 -0
  286. package/src/Markdown/parser.ts +1180 -235
  287. package/src/Markdown/plugins/frontmatter.test.tsx +125 -0
  288. package/src/Markdown/plugins/frontmatter.ts +198 -0
  289. package/src/Markdown/plugins/index.ts +53 -0
  290. package/src/Markdown/plugins/protocol.test.tsx +1022 -0
  291. package/src/Markdown/plugins/protocol.ts +1618 -0
  292. package/src/Markdown/plugins/semanticFence.test.tsx +546 -0
  293. package/src/Markdown/plugins/semanticFence.ts +424 -0
  294. package/src/Markdown/plugins/sourceDecoration.test.tsx +799 -0
  295. package/src/Markdown/plugins/sourceDecoration.ts +539 -0
  296. package/src/Markdown/plugins/textTransform.test.ts +467 -0
  297. package/src/Markdown/plugins/textTransform.ts +554 -0
  298. package/src/Markdown/remark.test.tsx +1877 -0
  299. package/src/Markdown/remark.ts +1574 -0
  300. package/src/Markdown/url.ts +30 -0
  301. package/src/Markdown/utils.ts +13 -1
  302. package/src/MultiSelector/MultiSelector.test.tsx +1 -35
  303. package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +128 -0
  304. package/src/NumberInput/NumberInput.tsx +6 -1
  305. package/src/Outline/Outline.doc.mjs +7 -5
  306. package/src/Outline/Outline.spec.md +1 -1
  307. package/src/Outline/index.ts +1 -0
  308. package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +142 -0
  309. package/src/Outline/parseOutlineFromMarkdown.ts +40 -10
  310. package/src/Outline/useOutlineFromMarkdown.ts +15 -3
  311. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  312. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +150 -1
  313. package/src/PowerSearch/PowerSearchEditPopover.tsx +51 -28
  314. package/src/ProgressBar/ProgressBar.test.tsx +29 -11
  315. package/src/ProgressBar/ProgressBar.tsx +59 -72
  316. package/src/RadioList/RadioList.doc.mjs +11 -0
  317. package/src/RadioList/RadioList.test.tsx +32 -0
  318. package/src/RadioList/RadioListItem.tsx +25 -1
  319. package/src/ScrollableArea/modules/useScrollableArea.spec.md +50 -22
  320. package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
  321. package/src/SegmentedControl/SegmentedControl.test.tsx +31 -0
  322. package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
  323. package/src/Selector/Selector.doc.mjs +2 -2
  324. package/src/Selector/Selector.spec.md +51 -49
  325. package/src/Selector/Selector.test.tsx +61 -55
  326. package/src/Selector/Selector.tsx +23 -14
  327. package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +130 -0
  328. package/src/Selector/__tests__/Listbox.a11y.dom.ts +38 -0
  329. package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +63 -0
  330. package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +37 -0
  331. package/src/Selector/__tests__/Listbox.a11y.states.ts +232 -0
  332. package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +121 -0
  333. package/src/SideNav/SideNav.doc.mjs +1 -1
  334. package/src/SideNav/SideNav.test.tsx +10 -0
  335. package/src/SideNav/SideNav.tsx +14 -2
  336. package/src/Slider/Slider.doc.mjs +17 -3
  337. package/src/Slider/Slider.test.tsx +221 -0
  338. package/src/Slider/Slider.tsx +40 -9
  339. package/src/Spinner/Spinner.test.tsx +4 -0
  340. package/src/Spinner/Spinner.tsx +31 -18
  341. package/src/Switch/Switch.doc.mjs +11 -0
  342. package/src/Switch/Switch.test.tsx +16 -0
  343. package/src/Switch/Switch.tsx +28 -0
  344. package/src/TabList/Tab.tsx +35 -7
  345. package/src/TabList/TabList.doc.mjs +11 -0
  346. package/src/TabList/TabList.spec.md +204 -0
  347. package/src/TabList/TabList.test.tsx +66 -0
  348. package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +1 -34
  349. package/src/Table/Table.doc.mjs +1 -1
  350. package/src/Table/Table.spec.md +54 -40
  351. package/src/Table/Table.test.tsx +83 -10
  352. package/src/Table/Table.tsx +30 -22
  353. package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +137 -0
  354. package/src/TextArea/TextArea.tsx +6 -1
  355. package/src/TextInput/TextInput.test.tsx +20 -1
  356. package/src/TextInput/TextInput.tsx +6 -1
  357. package/src/TimeInput/TimeInput.tsx +6 -1
  358. package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
  359. package/src/ToggleButton/ToggleButton.test.tsx +299 -4
  360. package/src/ToggleButton/ToggleButton.tsx +26 -33
  361. package/src/ToggleButton/ToggleButtonGroup.doc.mjs +3 -3
  362. package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +209 -0
  363. package/src/Tokenizer/Tokenizer.spec.md +142 -75
  364. package/src/TreeList/TreeList.doc.mjs +3 -3
  365. package/src/TreeList/TreeList.spec.md +123 -75
  366. package/src/TreeList/TreeList.test.tsx +29 -0
  367. package/src/TreeList/TreeList.tsx +3 -0
  368. package/src/TreeList/TreeListItem.tsx +15 -1
  369. package/src/TreeList/TreeListTypes.ts +11 -1
  370. package/src/Typeahead/BaseTypeahead.spec.md +4 -3
  371. package/src/Typeahead/BaseTypeahead.tsx +21 -7
  372. package/src/Typeahead/Typeahead.test.tsx +53 -0
  373. package/src/__tests__/PressedState.a11y.chromium.spec.ts +813 -0
  374. package/src/__tests__/pressState.ts +93 -0
  375. package/src/hooks/scrollKeyboardDelegation.test.ts +155 -0
  376. package/src/hooks/scrollKeyboardDelegation.ts +233 -0
  377. package/src/hooks/useScrollableArea.doc.mjs +15 -3
  378. package/src/hooks/useScrollableArea.test.tsx +59 -1
  379. package/src/hooks/useScrollableArea.ts +34 -10
  380. package/src/inputFontFloor.test.ts +106 -0
  381. package/src/tailwind-theme.css +0 -6
  382. package/src/theme/generateThemeRules.test.ts +30 -0
  383. package/src/theme/generateThemeRules.ts +10 -0
  384. package/src/utils/interactionOverlay.stylex.ts +20 -0
@@ -0,0 +1,374 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file textTransform.ts
5
+ * @input Regex selectors and replacement callbacks for eligible Markdown prose
6
+ * @output Immutable Markdown transforms with protected-context traversal
7
+ * @position Optional helper layer compiled onto the core transform protocol
8
+ */
9
+
10
+ import { getMarkdownHelperOwnership, adoptMarkdownHelperNode, adoptMarkdownHelperNodes, markMarkdownTransformClaim, markMarkdownTransformTrusted } from "./protocol.js";
11
+
12
+ /**
13
+ * Ownership for a transform invoked outside Core's pipeline. It owns no
14
+ * plugin name and no renderer, so a callback's extension node is rejected
15
+ * while ordinary phrasing still works.
16
+ */
17
+ const UNOWNED = Object.freeze({
18
+ pluginName: '\u0000unowned',
19
+ hasRenderer: () => false,
20
+ sourceUnchanged: false
21
+ });
22
+ /**
23
+ * Replacement nodes already placed in a document by this helper.
24
+ *
25
+ * A callback that builds a node per match hands over a fresh object, and
26
+ * that object can go straight into the tree — copying it would allocate a
27
+ * second one for nothing, and it is validated and frozen on the way in
28
+ * either way. A callback that returns the SAME object for several matches
29
+ * is the case that needs a copy: one object cannot occupy two positions in
30
+ * a tree, and a node already frozen into an earlier position must not be
31
+ * reused for a later one. Weak, so remembering a node never keeps it alive.
32
+ */
33
+ const adoptedReplacements = new WeakSet();
34
+
35
+ /** One reusable expression per transform invocation. */
36
+
37
+ /**
38
+ * Copies a caller's node away from them. The cycle-tracking map is allocated
39
+ * only once a nested object actually appears: the overwhelmingly common
40
+ * replacement is a flat node of primitives, and this runs once per match.
41
+ */
42
+ function cloneReplacement(value, seen) {
43
+ if (value == null || typeof value !== 'object') {
44
+ return value;
45
+ }
46
+ const cached = seen?.get(value);
47
+ if (cached != null) {
48
+ return cached;
49
+ }
50
+ if (Array.isArray(value)) {
51
+ const clone = [];
52
+ seen ??= new Map();
53
+ seen.set(value, clone);
54
+ for (const item of value) {
55
+ clone.push(cloneReplacement(item, seen));
56
+ }
57
+ return clone;
58
+ }
59
+ if (Object.getPrototypeOf(value) !== Object.prototype) {
60
+ return value;
61
+ }
62
+ const clone = {};
63
+ let tracked = seen;
64
+ for (const key in value) {
65
+ const nested = value[key];
66
+ if (nested != null && typeof nested === 'object') {
67
+ if (tracked === undefined) {
68
+ tracked = new Map();
69
+ tracked.set(value, clone);
70
+ }
71
+ clone[key] = cloneReplacement(nested, tracked);
72
+ } else {
73
+ clone[key] = nested;
74
+ }
75
+ }
76
+ return clone;
77
+ }
78
+ function advanceStringIndex(value, index, unicode) {
79
+ if (!unicode || index >= value.length) {
80
+ return index + 1;
81
+ }
82
+ const first = value.charCodeAt(index);
83
+ if (first < 0xd800 || first > 0xdbff || index + 1 >= value.length) {
84
+ return index + 1;
85
+ }
86
+ const second = value.charCodeAt(index + 1);
87
+ return second >= 0xdc00 && second <= 0xdfff ? index + 2 : index + 1;
88
+ }
89
+ function replaceTextNode(value, options, parentType, ownership, scanner) {
90
+ // The conservative substring hint decides per text node, not just per
91
+ // document: source without one cannot contain an eligible match, so most
92
+ // prose is skipped before any scanning happens.
93
+ // Disabled for case-insensitive patterns, exactly as the document-level
94
+ // claim is, so JavaScript case folding stays the only authority.
95
+ const required = options.pattern.ignoreCase ? undefined : options.requiredSubstrings;
96
+ if (required != null && !required.some(hint => value.includes(hint))) {
97
+ return null;
98
+ }
99
+ // One expression per transform invocation rather than one per text node.
100
+ // A `replace` callback that re-enters this helper gets its own, so a
101
+ // nested scan can never disturb the outer one's `lastIndex`.
102
+ const pattern = scanner.busy ? new RegExp(options.pattern.source, options.pattern.flags) : scanner.pattern;
103
+ const reentrant = pattern !== scanner.pattern;
104
+ if (!reentrant) {
105
+ scanner.busy = true;
106
+ }
107
+ pattern.lastIndex = 0;
108
+ const output = [];
109
+ let cursor = 0;
110
+ let changed = false;
111
+ let match;
112
+ while ((match = pattern.exec(value)) != null) {
113
+ const start = match.index;
114
+ const defaultEnd = start + match[0].length;
115
+ const resolvedEnd = options.getEndIndex?.(value, match) ?? defaultEnd;
116
+ if (resolvedEnd === false) {
117
+ if (match[0].length === 0) {
118
+ pattern.lastIndex = advanceStringIndex(value, pattern.lastIndex, pattern.unicode || pattern.flags.includes('v'));
119
+ }
120
+ continue;
121
+ }
122
+ if (!Number.isInteger(resolvedEnd) || resolvedEnd < defaultEnd || resolvedEnd < start || resolvedEnd > value.length) {
123
+ throw new TypeError('Markdown text transform returned an invalid end index');
124
+ }
125
+ if (start < cursor) {
126
+ continue;
127
+ }
128
+ if (start > cursor) {
129
+ output.push({
130
+ type: 'text',
131
+ value: value.slice(cursor, start)
132
+ });
133
+ }
134
+ const replacement = options.replace(match, {
135
+ parentType
136
+ });
137
+ // The callback's nodes are the only untrusted structure this helper can
138
+ // introduce. Each one is checked here under the same rules Core applies
139
+ // to newly-introduced nodes — representable data, no authored
140
+ // provenance, no foreign extension ownership, no cycles — and frozen,
141
+ // so the tree this transform returns needs no further checking. A node
142
+ // the callback has handed over before is copied first; a fresh one is
143
+ // adopted as it stands.
144
+ if (Array.isArray(replacement)) {
145
+ const adopted = [];
146
+ for (const replacementNode of replacement) {
147
+ adopted.push(adoptedReplacements.has(replacementNode) ? cloneReplacement(replacementNode) : replacementNode);
148
+ }
149
+ adoptMarkdownHelperNodes(adopted, ownership);
150
+ for (const node of adopted) {
151
+ adoptedReplacements.add(node);
152
+ }
153
+ output.push(...adopted);
154
+ } else {
155
+ // One node is the overwhelmingly common reply, and it is worth its
156
+ // own path: wrapping it in an array to share the loop above would
157
+ // allocate twice per match, which on a large document is the
158
+ // helper's dominant garbage.
159
+ const single = replacement;
160
+ const adopted = adoptedReplacements.has(single) ? cloneReplacement(single) : single;
161
+ adoptMarkdownHelperNode(adopted, ownership);
162
+ adoptedReplacements.add(adopted);
163
+ output.push(adopted);
164
+ }
165
+ cursor = resolvedEnd;
166
+ pattern.lastIndex = resolvedEnd === start ? advanceStringIndex(value, pattern.lastIndex, pattern.unicode || pattern.flags.includes('v')) : Math.max(pattern.lastIndex, resolvedEnd);
167
+ changed = true;
168
+ }
169
+ if (!reentrant) {
170
+ scanner.busy = false;
171
+ }
172
+ if (!changed) {
173
+ return null;
174
+ }
175
+ if (cursor < value.length) {
176
+ output.push({
177
+ type: 'text',
178
+ value: value.slice(cursor)
179
+ });
180
+ }
181
+ return output;
182
+ }
183
+ function transformPhrasing(children, options, parentType, ownership, scanner) {
184
+ // Lazy rebuild: unchanged phrasing is returned as-is, so prose with no
185
+ // match costs one walk and no allocation. Only the first change copies.
186
+ let next;
187
+ for (let index = 0; index < children.length; index++) {
188
+ const node = children[index];
189
+ if (node.type === 'text') {
190
+ const replaced = replaceTextNode(node.value, options, parentType, ownership, scanner);
191
+ if (replaced == null) {
192
+ next?.push(node);
193
+ continue;
194
+ }
195
+ next ??= children.slice(0, index);
196
+ for (const replacement of replaced) {
197
+ next.push(replacement);
198
+ }
199
+ continue;
200
+ }
201
+ if (node.type === 'strong' || node.type === 'emphasis' || node.type === 'delete') {
202
+ const nested = transformPhrasing(node.children, options, node.type, ownership, scanner);
203
+ if (nested === node.children) {
204
+ next?.push(node);
205
+ continue;
206
+ }
207
+ next ??= children.slice(0, index);
208
+ next.push({
209
+ ...node,
210
+ children: nested
211
+ });
212
+ continue;
213
+ }
214
+ // Links, images, code, math, citations, breaks, and accepted extension
215
+ // syntax are protected contexts owned by their existing semantics.
216
+ next?.push(node);
217
+ }
218
+ return next ?? children;
219
+ }
220
+ function blockMayContainRequiredSource(block, source, options) {
221
+ const required = options.requiredSubstrings;
222
+ if (source === undefined || required === undefined) {
223
+ return true;
224
+ }
225
+ const start = block.position?.start.offset;
226
+ const end = block.position?.end.offset;
227
+ if (typeof start !== 'number' || typeof end !== 'number') {
228
+ return true;
229
+ }
230
+ for (const hint of required) {
231
+ const match = source.indexOf(hint, start);
232
+ if (match >= 0 && match < end) {
233
+ return true;
234
+ }
235
+ }
236
+ return false;
237
+ }
238
+ function transformBlocks(blocks, options, ownership, scanner, source) {
239
+ // Lazy rebuild, matching transformPhrasing: a block list with no match is
240
+ // returned unchanged and allocates nothing.
241
+ let next;
242
+ for (let index = 0; index < blocks.length; index++) {
243
+ const block = blocks[index];
244
+ if (!blockMayContainRequiredSource(block, source, options)) {
245
+ next?.push(block);
246
+ continue;
247
+ }
248
+ let replacement;
249
+ switch (block.type) {
250
+ case 'heading':
251
+ case 'paragraph':
252
+ {
253
+ const children = transformPhrasing(block.children, options, block.type, ownership, scanner);
254
+ replacement = children === block.children ? block : {
255
+ ...block,
256
+ children
257
+ };
258
+ break;
259
+ }
260
+ case 'blockquote':
261
+ {
262
+ const children = transformBlocks(block.children, options, ownership, scanner, source);
263
+ replacement = children === block.children ? block : {
264
+ ...block,
265
+ children
266
+ };
267
+ break;
268
+ }
269
+ case 'list':
270
+ {
271
+ let items;
272
+ for (let item_index = 0; item_index < block.children.length; item_index++) {
273
+ const item = block.children[item_index];
274
+ const itemChildren = transformBlocks(item.children, options, ownership, scanner, source);
275
+ if (itemChildren === item.children) {
276
+ items?.push(item);
277
+ continue;
278
+ }
279
+ items ??= block.children.slice(0, item_index);
280
+ items.push({
281
+ ...item,
282
+ children: itemChildren
283
+ });
284
+ }
285
+ replacement = items == null ? block : {
286
+ ...block,
287
+ children: items
288
+ };
289
+ break;
290
+ }
291
+ case 'table':
292
+ {
293
+ let rows;
294
+ for (let row_index = 0; row_index < block.children.length; row_index++) {
295
+ const row = block.children[row_index];
296
+ let cells;
297
+ for (let cell_index = 0; cell_index < row.children.length; cell_index++) {
298
+ const cell = row.children[cell_index];
299
+ const cellChildren = transformPhrasing(cell.children, options, 'tableCell', ownership, scanner);
300
+ if (cellChildren === cell.children) {
301
+ cells?.push(cell);
302
+ continue;
303
+ }
304
+ cells ??= row.children.slice(0, cell_index);
305
+ cells.push({
306
+ ...cell,
307
+ children: cellChildren
308
+ });
309
+ }
310
+ if (cells == null) {
311
+ rows?.push(row);
312
+ continue;
313
+ }
314
+ rows ??= block.children.slice(0, row_index);
315
+ rows.push({
316
+ ...row,
317
+ children: cells
318
+ });
319
+ }
320
+ replacement = rows == null ? block : {
321
+ ...block,
322
+ children: rows
323
+ };
324
+ break;
325
+ }
326
+ case 'code':
327
+ case 'math':
328
+ case 'image':
329
+ case 'thematicBreak':
330
+ case 'extension':
331
+ replacement = block;
332
+ break;
333
+ }
334
+ if (next === undefined && replacement !== block) {
335
+ next = blocks.slice(0, index);
336
+ }
337
+ next?.push(replacement);
338
+ }
339
+ return next ?? blocks;
340
+ }
341
+ export function createMarkdownTextTransform(options) {
342
+ if (!options.pattern.global) {
343
+ throw new TypeError('Markdown text transform patterns must use the global flag');
344
+ }
345
+ if (options.requiredSubstrings != null && (!Array.isArray(options.requiredSubstrings) || options.requiredSubstrings.length === 0 || options.requiredSubstrings.some(value => typeof value !== 'string' || value === ''))) {
346
+ throw new TypeError('Markdown text transform requiredSubstrings must be non-empty strings');
347
+ }
348
+ const requiredSubstrings = options.requiredSubstrings == null ? undefined : Object.freeze([...options.requiredSubstrings]);
349
+ const normalizedOptions = Object.freeze({
350
+ pattern: new RegExp(options.pattern.source, options.pattern.flags),
351
+ requiredSubstrings,
352
+ getEndIndex: options.getEndIndex,
353
+ replace: options.replace
354
+ });
355
+ const transform = (root, context) => {
356
+ const ownership = getMarkdownHelperOwnership(context) ?? UNOWNED;
357
+ const children = transformBlocks(root.children, normalizedOptions, ownership, {
358
+ pattern: new RegExp(normalizedOptions.pattern.source, normalizedOptions.pattern.flags),
359
+ busy: false
360
+ }, ownership.sourceUnchanged && requiredSubstrings != null && !normalizedOptions.pattern.ignoreCase ? context.source : undefined);
361
+ return children === root.children ? root : {
362
+ ...root,
363
+ children
364
+ };
365
+ };
366
+ // Every node this helper returns is either one Core already validated or
367
+ // one `replaceTextNode` just validated against the same rules, so Core may
368
+ // run it on the trusted path.
369
+ const trusted = markMarkdownTransformTrusted(transform);
370
+ if (requiredSubstrings == null || options.pattern.ignoreCase) {
371
+ return trusted;
372
+ }
373
+ return markMarkdownTransformClaim(trusted, source => requiredSubstrings.some(required => source.includes(required)));
374
+ }
@@ -0,0 +1,196 @@
1
+ import { type MarkdownTransform } from './plugins/protocol';
2
+ export interface MarkdownRemarkPoint {
3
+ line?: number;
4
+ column?: number;
5
+ offset?: number;
6
+ }
7
+ export interface MarkdownRemarkPosition {
8
+ start: MarkdownRemarkPoint;
9
+ end: MarkdownRemarkPoint;
10
+ }
11
+ export interface MarkdownRemarkNodeBase {
12
+ position?: MarkdownRemarkPosition;
13
+ data?: {
14
+ [key: string]: unknown;
15
+ };
16
+ }
17
+ export interface MarkdownRemarkText extends MarkdownRemarkNodeBase {
18
+ type: 'text';
19
+ value: string;
20
+ }
21
+ export interface MarkdownRemarkInlineCode extends MarkdownRemarkNodeBase {
22
+ type: 'inlineCode';
23
+ value: string;
24
+ }
25
+ export interface MarkdownRemarkInlineMath extends MarkdownRemarkNodeBase {
26
+ type: 'inlineMath';
27
+ value: string;
28
+ }
29
+ export interface MarkdownRemarkBreak extends MarkdownRemarkNodeBase {
30
+ type: 'break';
31
+ }
32
+ export interface MarkdownRemarkPhrasingParent<Type extends 'strong' | 'emphasis' | 'delete'> extends MarkdownRemarkNodeBase {
33
+ type: Type;
34
+ children: MarkdownRemarkPhrasingContent[];
35
+ }
36
+ export interface MarkdownRemarkLink extends MarkdownRemarkNodeBase {
37
+ type: 'link';
38
+ url: string;
39
+ /** Always `null` on input; a non-empty title cannot round-trip. */
40
+ title?: string | null;
41
+ children: MarkdownRemarkPhrasingContent[];
42
+ }
43
+ export interface MarkdownRemarkImage extends MarkdownRemarkNodeBase {
44
+ type: 'image';
45
+ url: string;
46
+ /** Always `null` on input; a non-empty title cannot round-trip. */
47
+ title?: string | null;
48
+ alt: string;
49
+ }
50
+ /** Astryx-owned citation. Read-only inside the adapter. */
51
+ export interface MarkdownRemarkCitation extends MarkdownRemarkNodeBase {
52
+ type: 'citation';
53
+ sourceId: string;
54
+ }
55
+ /** Astryx-owned plugin extension node. Read-only inside the adapter. */
56
+ export interface MarkdownRemarkExtension extends MarkdownRemarkNodeBase {
57
+ type: 'extension';
58
+ plugin: string;
59
+ name: string;
60
+ display: 'inline' | 'block';
61
+ source?: string;
62
+ }
63
+ export type MarkdownRemarkPhrasingContent = MarkdownRemarkText | MarkdownRemarkInlineCode | MarkdownRemarkInlineMath | MarkdownRemarkBreak | MarkdownRemarkPhrasingParent<'strong'> | MarkdownRemarkPhrasingParent<'emphasis'> | MarkdownRemarkPhrasingParent<'delete'> | MarkdownRemarkLink | MarkdownRemarkImage | MarkdownRemarkCitation | MarkdownRemarkExtension;
64
+ export interface MarkdownRemarkHeading extends MarkdownRemarkNodeBase {
65
+ type: 'heading';
66
+ depth: 1 | 2 | 3 | 4 | 5 | 6;
67
+ children: MarkdownRemarkPhrasingContent[];
68
+ }
69
+ export interface MarkdownRemarkParagraph extends MarkdownRemarkNodeBase {
70
+ type: 'paragraph';
71
+ children: MarkdownRemarkPhrasingContent[];
72
+ }
73
+ export interface MarkdownRemarkCode extends MarkdownRemarkNodeBase {
74
+ type: 'code';
75
+ lang: string | null;
76
+ /** The authored info string after the language, `null` when absent. */
77
+ meta?: string | null;
78
+ value: string;
79
+ }
80
+ export interface MarkdownRemarkMath extends MarkdownRemarkNodeBase {
81
+ type: 'math';
82
+ value: string;
83
+ }
84
+ export interface MarkdownRemarkBlockquote extends MarkdownRemarkNodeBase {
85
+ type: 'blockquote';
86
+ children: MarkdownRemarkBlockContent[];
87
+ }
88
+ export interface MarkdownRemarkListItem extends MarkdownRemarkNodeBase {
89
+ type: 'listItem';
90
+ checked?: boolean | null;
91
+ /** Only a falsy value round-trips; Astryx has no loose-item contract. */
92
+ spread?: boolean | null;
93
+ children: MarkdownRemarkBlockContent[];
94
+ }
95
+ export interface MarkdownRemarkList extends MarkdownRemarkNodeBase {
96
+ type: 'list';
97
+ ordered: boolean;
98
+ start?: number | null;
99
+ spread?: boolean | null;
100
+ /** Astryx-preserved ordered-list marker delimiter. */
101
+ delimiter?: '.' | ')';
102
+ children: MarkdownRemarkListItem[];
103
+ }
104
+ export type MarkdownRemarkTableAlignment = 'left' | 'center' | 'right' | null;
105
+ export interface MarkdownRemarkTableCell extends MarkdownRemarkNodeBase {
106
+ type: 'tableCell';
107
+ children: MarkdownRemarkPhrasingContent[];
108
+ }
109
+ export interface MarkdownRemarkTableRow extends MarkdownRemarkNodeBase {
110
+ type: 'tableRow';
111
+ children: MarkdownRemarkTableCell[];
112
+ }
113
+ export interface MarkdownRemarkTable extends MarkdownRemarkNodeBase {
114
+ type: 'table';
115
+ align: MarkdownRemarkTableAlignment[];
116
+ children: MarkdownRemarkTableRow[];
117
+ }
118
+ export interface MarkdownRemarkThematicBreak extends MarkdownRemarkNodeBase {
119
+ type: 'thematicBreak';
120
+ }
121
+ export type MarkdownRemarkBlockContent = MarkdownRemarkHeading | MarkdownRemarkParagraph | MarkdownRemarkCode | MarkdownRemarkMath | MarkdownRemarkBlockquote | MarkdownRemarkList | MarkdownRemarkTable | MarkdownRemarkThematicBreak | MarkdownRemarkImage | MarkdownRemarkExtension;
122
+ export interface MarkdownRemarkRoot extends MarkdownRemarkNodeBase {
123
+ type: 'root';
124
+ children: MarkdownRemarkBlockContent[];
125
+ }
126
+ export interface MarkdownRemarkMessage {
127
+ reason: string;
128
+ fatal: boolean;
129
+ place: unknown;
130
+ ruleId: string | null;
131
+ toString(): string;
132
+ }
133
+ /**
134
+ * The isolated per-invocation file. It exposes readonly source text, finite
135
+ * JSON-like data, and diagnostics — never processor registration, cross-run
136
+ * state, a compiler, I/O, or asynchronous completion.
137
+ */
138
+ export interface MarkdownRemarkFile {
139
+ readonly value: string;
140
+ readonly data: {
141
+ [key: string]: unknown;
142
+ };
143
+ readonly messages: MarkdownRemarkMessage[];
144
+ message(reason: string | Error, place?: unknown, ruleId?: string): MarkdownRemarkMessage;
145
+ fail(reason: string | Error, place?: unknown, ruleId?: string): never;
146
+ toString(): string;
147
+ }
148
+ /**
149
+ * A Remark transformer either mutates the tree and returns nothing or returns
150
+ * a replacement root, and an attacher may legitimately return nothing at all.
151
+ * Both shapes have to stay assignable, so `void` belongs in these unions.
152
+ */
153
+ type Returned<Value> = Value | undefined | void;
154
+ export type MarkdownRemarkTransformer = (tree: MarkdownRemarkRoot, file: MarkdownRemarkFile) => Returned<MarkdownRemarkRoot>;
155
+ export type MarkdownRemarkPlugin<Settings extends ReadonlyArray<unknown> = readonly []> = (...settings: Settings) => Returned<MarkdownRemarkTransformer>;
156
+ /**
157
+ * The structural shape a conventional Unified/Remark plugin already has. Its
158
+ * declared transformer may take Unified's callback parameter and may declare
159
+ * an asynchronous return union, so an existing typed plugin type-checks at the
160
+ * callsite without being rewritten. The adapter rejects an actual promise, and
161
+ * a callback-style transformer, at run time instead.
162
+ *
163
+ * Authoring a new plugin against Astryx? Annotate it with
164
+ * `MarkdownRemarkPlugin` to keep a typed tree and file.
165
+ */
166
+ export type MarkdownRemarkCompatibleTransformer = (...args: never[]) => unknown;
167
+ export type MarkdownRemarkCompatiblePlugin<Settings extends ReadonlyArray<unknown> = readonly []> = (...settings: Settings) => Returned<MarkdownRemarkCompatibleTransformer>;
168
+ /**
169
+ * Adapt one synchronous transform-only Remark plugin to a Markdown transform.
170
+ *
171
+ * The adapted plugin receives a fresh mutable copy of the canonical document
172
+ * and an isolated constrained file. Every returned or mutated tree round-trips
173
+ * through the supported MDAST subset before it becomes observable; anything
174
+ * unsupported — a parser or compiler plugin, asynchronous work, processor
175
+ * state, raw HTML, an unsupported node, a forged position, or unrepresentable
176
+ * metadata — keeps the last valid document and reports one diagnostic.
177
+ *
178
+ * Compatibility is per plugin and proven by fixtures, never inferred from a
179
+ * package name.
180
+ *
181
+ * @example
182
+ * ```
183
+ * import {createMarkdownPlugin} from '@astryxdesign/core/Markdown';
184
+ * import {createMarkdownRemarkTransform} from '@astryxdesign/core/Markdown/remark';
185
+ *
186
+ * const shouting = createMarkdownPlugin({
187
+ * name: 'shouting-headings',
188
+ * apiVersion: 1,
189
+ * transform: createMarkdownRemarkTransform(remarkShoutingHeadings),
190
+ * });
191
+ * ```
192
+ */
193
+ export declare function createMarkdownRemarkTransform<Settings extends ReadonlyArray<unknown> = readonly []>(plugin: MarkdownRemarkPlugin<Settings>, ...settings: Settings): MarkdownTransform<never>;
194
+ export declare function createMarkdownRemarkTransform<Settings extends ReadonlyArray<unknown> = readonly []>(plugin: MarkdownRemarkCompatiblePlugin<Settings>, ...settings: Settings): MarkdownTransform<never>;
195
+ export {};
196
+ //# sourceMappingURL=remark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark.d.ts","sourceRoot":"","sources":["../../src/Markdown/remark.ts"],"names":[],"mappings":"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"}