@astryxdesign/core 0.6.2 → 0.6.3-canary.0788c49

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 (558) 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/Button/Button.d.ts.map +1 -1
  9. package/dist/Button/Button.js +13 -28
  10. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  11. package/dist/Chat/ChatComposer.js +10 -5
  12. package/dist/Chat/ChatComposerDrawer.d.ts +19 -5
  13. package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
  14. package/dist/Chat/ChatComposerDrawer.js +48 -23
  15. package/dist/Chat/ChatComposerInput.d.ts +11 -3
  16. package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
  17. package/dist/Chat/ChatComposerInput.js +63 -16
  18. package/dist/Chat/ChatDictationButton.d.ts +3 -2
  19. package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
  20. package/dist/Chat/ChatDictationButton.js +6 -4
  21. package/dist/Chat/ChatLayout.d.ts +19 -0
  22. package/dist/Chat/ChatLayout.d.ts.map +1 -1
  23. package/dist/Chat/ChatLayout.js +19 -0
  24. package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
  25. package/dist/Chat/ChatLayoutScrollButton.js +44 -34
  26. package/dist/Chat/ChatMessageBubble.d.ts +2 -0
  27. package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
  28. package/dist/Chat/ChatMessageBubble.js +5 -3
  29. package/dist/Chat/ChatMessageList.d.ts +2 -1
  30. package/dist/Chat/ChatMessageList.d.ts.map +1 -1
  31. package/dist/Chat/ChatMessageList.js +4 -3
  32. package/dist/Chat/ChatMessageMetadata.d.ts +5 -4
  33. package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
  34. package/dist/Chat/ChatMessageMetadata.js +12 -9
  35. package/dist/Chat/ChatSendButton.d.ts +2 -1
  36. package/dist/Chat/ChatSendButton.d.ts.map +1 -1
  37. package/dist/Chat/ChatSendButton.js +6 -4
  38. package/dist/Chat/index.d.ts +1 -1
  39. package/dist/Chat/index.d.ts.map +1 -1
  40. package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  41. package/dist/CheckboxInput/CheckboxInput.js +12 -2
  42. package/dist/Citation/Citation.d.ts +1 -1
  43. package/dist/Citation/Citation.d.ts.map +1 -1
  44. package/dist/Citation/Citation.js +3 -2
  45. package/dist/CodeBlock/highlightRanges.d.ts.map +1 -1
  46. package/dist/CodeBlock/highlightRanges.js +14 -3
  47. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  48. package/dist/Collapsible/Collapsible.js +6 -1
  49. package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
  50. package/dist/CommandPalette/CommandPaletteInput.js +1 -1
  51. package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
  52. package/dist/ComplexSelector/ComplexSelector.js +1 -1
  53. package/dist/DateInput/DateInput.d.ts.map +1 -1
  54. package/dist/DateInput/DateInput.js +4 -4
  55. package/dist/DateInput/NativeDateField.d.ts.map +1 -1
  56. package/dist/DateInput/NativeDateField.js +16 -16
  57. package/dist/DateInput/TouchDateField.d.ts.map +1 -1
  58. package/dist/DateInput/TouchDateField.js +2 -2
  59. package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  60. package/dist/DateRangeInput/DateRangeInput.js +4 -4
  61. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  62. package/dist/DateTimeInput/DateTimeInput.js +8 -8
  63. package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
  64. package/dist/DateTimeInput/TouchDateTimeField.js +4 -4
  65. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +9 -3
  66. package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -1
  67. package/dist/DateTimeInput/nativePickerSegmentStyles.js +3 -3
  68. package/dist/Dialog/DialogHeader.d.ts +8 -1
  69. package/dist/Dialog/DialogHeader.d.ts.map +1 -1
  70. package/dist/Dialog/DialogHeader.js +13 -4
  71. package/dist/Field/InputClearButton.d.ts +4 -2
  72. package/dist/Field/InputClearButton.d.ts.map +1 -1
  73. package/dist/Field/InputClearButton.js +4 -2
  74. package/dist/Field/PanelSearchInput.d.ts.map +1 -1
  75. package/dist/Field/PanelSearchInput.js +1 -1
  76. package/dist/FileInput/FileInput.d.ts.map +1 -1
  77. package/dist/FileInput/FileInput.js +7 -7
  78. package/dist/Icon/Icon.d.ts +6 -31
  79. package/dist/Icon/Icon.d.ts.map +1 -1
  80. package/dist/Icon/Icon.js +8 -71
  81. package/dist/Icon/IconDefaultSizeContext.d.ts +4 -0
  82. package/dist/Icon/IconDefaultSizeContext.d.ts.map +1 -0
  83. package/dist/Icon/IconDefaultSizeContext.js +18 -0
  84. package/dist/Icon/IconSize.stylex.d.ts +65 -0
  85. package/dist/Icon/IconSize.stylex.d.ts.map +1 -0
  86. package/dist/Icon/IconSize.stylex.js +75 -0
  87. package/dist/Item/Item.d.ts +1 -1
  88. package/dist/Item/Item.d.ts.map +1 -1
  89. package/dist/Item/Item.js +4 -3
  90. package/dist/Kbd/Kbd.d.ts +5 -3
  91. package/dist/Kbd/Kbd.d.ts.map +1 -1
  92. package/dist/Kbd/Kbd.js +36 -42
  93. package/dist/Link/Link.d.ts.map +1 -1
  94. package/dist/Link/Link.js +6 -2
  95. package/dist/Link/useLinkComponent.d.ts +5 -15
  96. package/dist/Link/useLinkComponent.d.ts.map +1 -1
  97. package/dist/Link/useLinkComponent.js +34 -51
  98. package/dist/List/List.d.ts +19 -1
  99. package/dist/List/List.d.ts.map +1 -1
  100. package/dist/List/List.js +9 -2
  101. package/dist/List/ListContext.d.ts +1 -0
  102. package/dist/List/ListContext.d.ts.map +1 -1
  103. package/dist/List/ListContext.js +2 -1
  104. package/dist/List/ListItem.d.ts +1 -1
  105. package/dist/List/ListItem.d.ts.map +1 -1
  106. package/dist/List/ListItem.js +9 -2
  107. package/dist/Markdown/Markdown.d.ts +8 -2
  108. package/dist/Markdown/Markdown.d.ts.map +1 -1
  109. package/dist/Markdown/Markdown.fr23.bench.d.ts +2 -0
  110. package/dist/Markdown/Markdown.fr23.bench.d.ts.map +1 -0
  111. package/dist/Markdown/Markdown.fr23.bench.js +150 -0
  112. package/dist/Markdown/Markdown.fr23.sampling.d.ts +2 -0
  113. package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -0
  114. package/dist/Markdown/Markdown.fr23.sampling.js +43 -0
  115. package/dist/Markdown/Markdown.js +262 -109
  116. package/dist/Markdown/ast.d.ts +162 -0
  117. package/dist/Markdown/ast.d.ts.map +1 -0
  118. package/dist/Markdown/ast.js +74 -0
  119. package/dist/Markdown/index.d.ts +5 -3
  120. package/dist/Markdown/index.d.ts.map +1 -1
  121. package/dist/Markdown/index.js +3 -2
  122. package/dist/Markdown/parser/index.d.ts +10 -0
  123. package/dist/Markdown/parser/index.d.ts.map +1 -0
  124. package/dist/Markdown/parser/index.js +10 -0
  125. package/dist/Markdown/parser.d.ts +126 -58
  126. package/dist/Markdown/parser.d.ts.map +1 -1
  127. package/dist/Markdown/parser.js +726 -177
  128. package/dist/Markdown/plugins/frontmatter.d.ts +32 -0
  129. package/dist/Markdown/plugins/frontmatter.d.ts.map +1 -0
  130. package/dist/Markdown/plugins/frontmatter.js +132 -0
  131. package/dist/Markdown/plugins/index.d.ts +17 -0
  132. package/dist/Markdown/plugins/index.d.ts.map +1 -0
  133. package/dist/Markdown/plugins/index.js +14 -0
  134. package/dist/Markdown/plugins/protocol.d.ts +191 -0
  135. package/dist/Markdown/plugins/protocol.d.ts.map +1 -0
  136. package/dist/Markdown/plugins/protocol.js +957 -0
  137. package/dist/Markdown/plugins/semanticFence.d.ts +36 -0
  138. package/dist/Markdown/plugins/semanticFence.d.ts.map +1 -0
  139. package/dist/Markdown/plugins/semanticFence.js +213 -0
  140. package/dist/Markdown/plugins/softBreaks.d.ts +3 -0
  141. package/dist/Markdown/plugins/softBreaks.d.ts.map +1 -0
  142. package/dist/Markdown/plugins/softBreaks.js +172 -0
  143. package/dist/Markdown/plugins/sourceDecoration.d.ts +76 -0
  144. package/dist/Markdown/plugins/sourceDecoration.d.ts.map +1 -0
  145. package/dist/Markdown/plugins/sourceDecoration.js +393 -0
  146. package/dist/Markdown/plugins/textTransform.d.ts +30 -0
  147. package/dist/Markdown/plugins/textTransform.d.ts.map +1 -0
  148. package/dist/Markdown/plugins/textTransform.js +374 -0
  149. package/dist/Markdown/remark.d.ts +196 -0
  150. package/dist/Markdown/remark.d.ts.map +1 -0
  151. package/dist/Markdown/remark.js +1062 -0
  152. package/dist/Markdown/url.d.ts +6 -0
  153. package/dist/Markdown/url.d.ts.map +1 -0
  154. package/dist/Markdown/url.js +31 -0
  155. package/dist/Markdown/utils.d.ts +4 -2
  156. package/dist/Markdown/utils.d.ts.map +1 -1
  157. package/dist/Markdown/utils.js +2 -1
  158. package/dist/MetadataList/MetadataList.js +3 -3
  159. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  160. package/dist/NumberInput/NumberInput.js +4 -4
  161. package/dist/Outline/index.d.ts +1 -0
  162. package/dist/Outline/index.d.ts.map +1 -1
  163. package/dist/Outline/parseOutlineFromMarkdown.d.ts +7 -1
  164. package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
  165. package/dist/Outline/parseOutlineFromMarkdown.js +14 -8
  166. package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -1
  167. package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
  168. package/dist/Outline/useOutlineFromMarkdown.js +8 -3
  169. package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
  170. package/dist/PowerSearch/PowerSearchEditPopover.js +46 -30
  171. package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
  172. package/dist/PowerSearch/PowerSearchValueEditor.js +5 -0
  173. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  174. package/dist/ProgressBar/ProgressBar.js +36 -31
  175. package/dist/RadioList/RadioListItem.d.ts.map +1 -1
  176. package/dist/RadioList/RadioListItem.js +13 -1
  177. package/dist/ScrollableArea/ScrollableArea.d.ts +1 -0
  178. package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
  179. package/dist/ScrollableArea/ScrollableArea.js +1 -0
  180. package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
  181. package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  182. package/dist/SegmentedControl/SegmentedControl.js +1 -0
  183. package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
  184. package/dist/SegmentedControl/SegmentedControlItem.js +5 -5
  185. package/dist/Selector/Selector.d.ts +9 -7
  186. package/dist/Selector/Selector.d.ts.map +1 -1
  187. package/dist/Selector/Selector.js +16 -7
  188. package/dist/SideNav/SideNav.d.ts +2 -1
  189. package/dist/SideNav/SideNav.d.ts.map +1 -1
  190. package/dist/SideNav/SideNav.js +9 -3
  191. package/dist/Slider/Slider.d.ts.map +1 -1
  192. package/dist/Slider/Slider.js +28 -12
  193. package/dist/Spinner/Spinner.d.ts.map +1 -1
  194. package/dist/Spinner/Spinner.js +23 -7
  195. package/dist/Switch/Switch.d.ts.map +1 -1
  196. package/dist/Switch/Switch.js +11 -0
  197. package/dist/TabList/Tab.d.ts +1 -1
  198. package/dist/TabList/Tab.d.ts.map +1 -1
  199. package/dist/TabList/Tab.js +20 -7
  200. package/dist/Table/Table.d.ts +1 -0
  201. package/dist/Table/Table.d.ts.map +1 -1
  202. package/dist/Table/Table.js +29 -13
  203. package/dist/TextArea/TextArea.d.ts.map +1 -1
  204. package/dist/TextArea/TextArea.js +1 -1
  205. package/dist/TextInput/TextInput.d.ts.map +1 -1
  206. package/dist/TextInput/TextInput.js +2 -2
  207. package/dist/TimeInput/TimeInput.d.ts.map +1 -1
  208. package/dist/TimeInput/TimeInput.js +4 -4
  209. package/dist/Timer/Timer.d.ts +49 -0
  210. package/dist/Timer/Timer.d.ts.map +1 -0
  211. package/dist/Timer/Timer.js +158 -0
  212. package/dist/Timer/index.d.ts +9 -0
  213. package/dist/Timer/index.d.ts.map +1 -0
  214. package/dist/Timer/index.js +10 -0
  215. package/dist/ToggleButton/ToggleButton.d.ts +9 -6
  216. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  217. package/dist/ToggleButton/ToggleButton.js +15 -27
  218. package/dist/TopNav/TopNavMenu.d.ts +1 -1
  219. package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
  220. package/dist/TopNav/TopNavMenu.js +3 -2
  221. package/dist/TreeList/TreeList.d.ts.map +1 -1
  222. package/dist/TreeList/TreeList.js +3 -0
  223. package/dist/TreeList/TreeListItem.d.ts +6 -1
  224. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  225. package/dist/TreeList/TreeListItem.js +12 -2
  226. package/dist/TreeList/TreeListTypes.d.ts +8 -1
  227. package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
  228. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  229. package/dist/Typeahead/BaseTypeahead.js +16 -7
  230. package/dist/astryx.css +27 -11
  231. package/dist/hooks/scrollKeyboardDelegation.d.ts +3 -0
  232. package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -0
  233. package/dist/hooks/scrollKeyboardDelegation.js +146 -0
  234. package/dist/hooks/useClickableContainer.d.ts +10 -1
  235. package/dist/hooks/useClickableContainer.d.ts.map +1 -1
  236. package/dist/hooks/useClickableContainer.js +15 -4
  237. package/dist/hooks/useScrollableArea.d.ts +6 -2
  238. package/dist/hooks/useScrollableArea.d.ts.map +1 -1
  239. package/dist/hooks/useScrollableArea.js +17 -5
  240. package/dist/index.d.ts +1 -0
  241. package/dist/index.d.ts.map +1 -1
  242. package/dist/index.js +3 -0
  243. package/dist/theme/declarationBoundary.d.ts +17 -0
  244. package/dist/theme/declarationBoundary.d.ts.map +1 -0
  245. package/dist/theme/declarationBoundary.js +343 -0
  246. package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
  247. package/dist/theme/derivedVarRegistry.js +4 -0
  248. package/dist/theme/generateThemeRules.d.ts +13 -7
  249. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  250. package/dist/theme/generateThemeRules.js +140 -34
  251. package/dist/utils/interactionOverlay.stylex.d.ts +8 -0
  252. package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
  253. package/dist/utils/interactionOverlay.stylex.js +9 -0
  254. package/dist/utils/safeUrl.d.ts +11 -0
  255. package/dist/utils/safeUrl.d.ts.map +1 -0
  256. package/dist/utils/safeUrl.js +78 -0
  257. package/locales/af-ZA.json +530 -1
  258. package/locales/ar-SA.json +490 -1
  259. package/locales/ca-ES.json +514 -1
  260. package/locales/cs-CZ.json +498 -1
  261. package/locales/da-DK.json +522 -1
  262. package/locales/de-DE.json +522 -1
  263. package/locales/el-GR.json +498 -1
  264. package/locales/es-ES.json +510 -1
  265. package/locales/fi-FI.json +498 -1
  266. package/locales/fr-FR.json +534 -1
  267. package/locales/he-IL.json +498 -1
  268. package/locales/hu-HU.json +498 -1
  269. package/locales/it-IT.json +510 -1
  270. package/locales/ja-JP.json +490 -1
  271. package/locales/ko-KR.json +498 -1
  272. package/locales/nl-NL.json +534 -1
  273. package/locales/no-NO.json +510 -1
  274. package/locales/pl-PL.json +506 -1
  275. package/locales/pt-BR.json +506 -1
  276. package/locales/pt-PT.json +506 -1
  277. package/locales/ro-RO.json +506 -1
  278. package/locales/ru-RU.json +498 -1
  279. package/locales/sr-SP.json +498 -1
  280. package/locales/sv-SE.json +502 -1
  281. package/locales/tr-TR.json +498 -1
  282. package/locales/uk-UA.json +498 -1
  283. package/locales/vi-VN.json +502 -1
  284. package/locales/zh-CN.json +490 -1
  285. package/locales/zh-TW.json +490 -1
  286. package/package.json +24 -4
  287. package/src/BottomSheet/BottomSheet.doc.mjs +8 -1
  288. package/src/BottomSheet/BottomSheet.spec.md +46 -20
  289. package/src/BottomSheet/BottomSheet.test.tsx +6 -3
  290. package/src/BottomSheet/BottomSheet.tsx +3 -1
  291. package/src/BottomSheet/BottomSheetKeyboard.test.tsx +195 -0
  292. package/src/BottomSheet/BottomSheetPanel.test.tsx +11 -1
  293. package/src/BottomSheet/BottomSheetPanel.tsx +49 -16
  294. package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +344 -0
  295. package/src/Button/Button.doc.mjs +5 -5
  296. package/src/Button/Button.tsx +15 -13
  297. package/src/Button/__tests__/Button.a11y.chromium.spec.ts +17 -1
  298. package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -29
  299. package/src/Button/__tests__/Button.a11y.renders.tsx +9 -2
  300. package/src/Button/__tests__/Button.a11y.states.ts +9 -0
  301. package/src/Chat/ChatComposer.doc.mjs +14 -0
  302. package/src/Chat/ChatComposer.spec.md +230 -0
  303. package/src/Chat/ChatComposer.test.tsx +57 -0
  304. package/src/Chat/ChatComposer.tsx +21 -9
  305. package/src/Chat/ChatComposerDrawer.doc.mjs +63 -5
  306. package/src/Chat/ChatComposerDrawer.spec.md +267 -0
  307. package/src/Chat/ChatComposerDrawer.test.tsx +81 -12
  308. package/src/Chat/ChatComposerDrawer.tsx +38 -9
  309. package/src/Chat/ChatComposerInput.doc.mjs +114 -26
  310. package/src/Chat/ChatComposerInput.spec.md +185 -0
  311. package/src/Chat/ChatComposerInput.test.tsx +113 -3
  312. package/src/Chat/ChatComposerInput.tsx +78 -13
  313. package/src/Chat/ChatComposerTokenElement.spec.md +152 -0
  314. package/src/Chat/ChatComposerTokenElement.test.tsx +85 -0
  315. package/src/Chat/ChatDictationButton.doc.mjs +3 -3
  316. package/src/Chat/ChatDictationButton.spec.md +160 -0
  317. package/src/Chat/ChatDictationButton.test.tsx +92 -27
  318. package/src/Chat/ChatDictationButton.tsx +8 -6
  319. package/src/Chat/ChatLayout.doc.mjs +12 -4
  320. package/src/Chat/ChatLayout.spec.md +271 -0
  321. package/src/Chat/ChatLayout.test.tsx +28 -0
  322. package/src/Chat/ChatLayout.tsx +19 -0
  323. package/src/Chat/ChatLayoutScrollButton.spec.md +338 -0
  324. package/src/Chat/ChatLayoutScrollButton.test.tsx +31 -0
  325. package/src/Chat/ChatLayoutScrollButton.tsx +31 -14
  326. package/src/Chat/ChatMessageBubble.doc.mjs +28 -15
  327. package/src/Chat/ChatMessageBubble.spec.md +263 -0
  328. package/src/Chat/ChatMessageBubble.test.tsx +93 -0
  329. package/src/Chat/ChatMessageBubble.tsx +8 -3
  330. package/src/Chat/ChatMessageList.spec.md +222 -0
  331. package/src/Chat/ChatMessageList.test.tsx +64 -2
  332. package/src/Chat/ChatMessageList.tsx +4 -3
  333. package/src/Chat/ChatMessageMetadata.doc.mjs +57 -3
  334. package/src/Chat/ChatMessageMetadata.spec.md +220 -0
  335. package/src/Chat/ChatMessageMetadata.test.tsx +34 -0
  336. package/src/Chat/ChatMessageMetadata.tsx +13 -13
  337. package/src/Chat/ChatSendButton.doc.mjs +32 -0
  338. package/src/Chat/ChatSendButton.spec.md +227 -0
  339. package/src/Chat/ChatSendButton.test.tsx +128 -8
  340. package/src/Chat/ChatSendButton.tsx +6 -4
  341. package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +514 -0
  342. package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +740 -0
  343. package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +457 -0
  344. package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +91 -0
  345. package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +91 -0
  346. package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +456 -0
  347. package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +413 -0
  348. package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +1522 -0
  349. package/src/Chat/index.ts +1 -0
  350. package/src/CheckboxInput/CheckboxInput.doc.mjs +11 -0
  351. package/src/CheckboxInput/CheckboxInput.test.tsx +34 -0
  352. package/src/CheckboxInput/CheckboxInput.tsx +21 -1
  353. package/src/Citation/Citation.doc.mjs +2 -2
  354. package/src/Citation/Citation.test.tsx +17 -0
  355. package/src/Citation/Citation.tsx +4 -2
  356. package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
  357. package/src/ClickableCard/ClickableCard.test.tsx +102 -5
  358. package/src/CodeBlock/highlightRanges.test.ts +143 -1
  359. package/src/CodeBlock/highlightRanges.ts +15 -5
  360. package/src/Collapsible/Collapsible.doc.mjs +11 -0
  361. package/src/Collapsible/Collapsible.test.tsx +21 -0
  362. package/src/Collapsible/Collapsible.tsx +5 -0
  363. package/src/CommandPalette/CommandPaletteInput.tsx +6 -1
  364. package/src/ComplexSelector/ComplexSelector.tsx +6 -1
  365. package/src/DateInput/DateInput.tsx +6 -1
  366. package/src/DateInput/NativeDateField.tsx +24 -8
  367. package/src/DateInput/TouchDateField.tsx +6 -2
  368. package/src/DateRangeInput/DateRangeInput.tsx +6 -1
  369. package/src/DateTimeInput/DateTimeInput.tsx +6 -1
  370. package/src/DateTimeInput/TouchDateTimeField.tsx +6 -1
  371. package/src/DateTimeInput/nativePickerSegmentStyles.ts +24 -8
  372. package/src/Dialog/Dialog.doc.mjs +2 -0
  373. package/src/Dialog/DialogHeader.doc.mjs +22 -0
  374. package/src/Dialog/DialogHeader.test.tsx +167 -3
  375. package/src/Dialog/DialogHeader.tsx +37 -6
  376. package/src/Dialog/modules/DialogHeader.spec.md +101 -42
  377. package/src/DropdownMenu/DropdownMenu.test.tsx +5 -2
  378. package/src/Field/InputClearButton.test.tsx +17 -3
  379. package/src/Field/InputClearButton.tsx +5 -2
  380. package/src/Field/PanelSearchInput.tsx +5 -2
  381. package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +1 -1
  382. package/src/FileInput/FileInput.tsx +11 -2
  383. package/src/Icon/Icon.doc.mjs +7 -5
  384. package/src/Icon/Icon.spec.md +81 -40
  385. package/src/Icon/Icon.test.tsx +6 -3
  386. package/src/Icon/Icon.tsx +20 -68
  387. package/src/Icon/IconDefaultSizeContext.ts +23 -0
  388. package/src/Icon/IconSize.stylex.ts +70 -0
  389. package/src/IconButton/IconButton.doc.mjs +3 -3
  390. package/src/IconButton/IconButton.test.tsx +40 -0
  391. package/src/Item/Item.doc.mjs +6 -2
  392. package/src/Item/Item.tsx +9 -3
  393. package/src/Kbd/Kbd.doc.mjs +3 -3
  394. package/src/Kbd/Kbd.test.tsx +57 -1
  395. package/src/Kbd/Kbd.tsx +57 -37
  396. package/src/Layout/LayoutFooter.doc.mjs +17 -0
  397. package/src/Link/Link.doc.mjs +17 -4
  398. package/src/Link/Link.test.tsx +24 -0
  399. package/src/Link/Link.tsx +5 -0
  400. package/src/Link/LinkProvider.doc.mjs +2 -2
  401. package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +261 -0
  402. package/src/Link/useLinkComponent.test.tsx +333 -0
  403. package/src/Link/useLinkComponent.ts +29 -57
  404. package/src/List/List.doc.mjs +6 -0
  405. package/src/List/List.spec.md +200 -0
  406. package/src/List/List.test.tsx +117 -1
  407. package/src/List/List.tsx +22 -2
  408. package/src/List/ListContext.tsx +3 -1
  409. package/src/List/ListItem.doc.mjs +2 -2
  410. package/src/List/ListItem.source-build.test.mjs +41 -0
  411. package/src/List/ListItem.tsx +26 -2
  412. package/src/Markdown/Markdown.doc.mjs +300 -2
  413. package/src/Markdown/Markdown.fr23.bench.ts +174 -0
  414. package/src/Markdown/Markdown.fr23.perf.test.ts +249 -0
  415. package/src/Markdown/Markdown.fr23.sampling.ts +49 -0
  416. package/src/Markdown/Markdown.helpers.perf.test.ts +489 -0
  417. package/src/Markdown/Markdown.public.test.ts +130 -3
  418. package/src/Markdown/Markdown.renderBoundary.test.tsx +72 -0
  419. package/src/Markdown/Markdown.spec.md +210 -45
  420. package/src/Markdown/Markdown.test.tsx +87 -3
  421. package/src/Markdown/Markdown.tsx +414 -135
  422. package/src/Markdown/ast.test.ts +307 -0
  423. package/src/Markdown/ast.ts +337 -0
  424. package/src/Markdown/incremental.test.ts +43 -0
  425. package/src/Markdown/index.ts +37 -1
  426. package/src/Markdown/modules/remark.spec.md +269 -0
  427. package/src/Markdown/modules/softBreaks.spec.md +137 -0
  428. package/src/Markdown/parser/index.ts +64 -0
  429. package/src/Markdown/parser.public.test.ts +103 -0
  430. package/src/Markdown/parser.test.ts +38 -6
  431. package/src/Markdown/parser.ts +1221 -242
  432. package/src/Markdown/plugins/frontmatter.test.tsx +125 -0
  433. package/src/Markdown/plugins/frontmatter.ts +198 -0
  434. package/src/Markdown/plugins/index.ts +54 -0
  435. package/src/Markdown/plugins/protocol.test.tsx +1022 -0
  436. package/src/Markdown/plugins/protocol.ts +1618 -0
  437. package/src/Markdown/plugins/semanticFence.test.tsx +546 -0
  438. package/src/Markdown/plugins/semanticFence.ts +424 -0
  439. package/src/Markdown/plugins/softBreaks.test.tsx +172 -0
  440. package/src/Markdown/plugins/softBreaks.ts +169 -0
  441. package/src/Markdown/plugins/sourceDecoration.test.tsx +799 -0
  442. package/src/Markdown/plugins/sourceDecoration.ts +539 -0
  443. package/src/Markdown/plugins/textTransform.test.ts +467 -0
  444. package/src/Markdown/plugins/textTransform.ts +554 -0
  445. package/src/Markdown/remark.test.tsx +1877 -0
  446. package/src/Markdown/remark.ts +1574 -0
  447. package/src/Markdown/url.ts +36 -0
  448. package/src/Markdown/utils.ts +13 -1
  449. package/src/MetadataList/MetadataList.test.tsx +4 -2
  450. package/src/MetadataList/MetadataList.tsx +3 -3
  451. package/src/MultiSelector/MultiSelector.test.tsx +1 -35
  452. package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +128 -0
  453. package/src/NumberInput/NumberInput.tsx +6 -1
  454. package/src/Outline/Outline.doc.mjs +7 -5
  455. package/src/Outline/Outline.spec.md +1 -1
  456. package/src/Outline/index.ts +1 -0
  457. package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +142 -0
  458. package/src/Outline/parseOutlineFromMarkdown.ts +40 -10
  459. package/src/Outline/useOutlineFromMarkdown.ts +15 -3
  460. package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
  461. package/src/PowerSearch/PowerSearchEditPopover.test.tsx +150 -1
  462. package/src/PowerSearch/PowerSearchEditPopover.tsx +51 -28
  463. package/src/PowerSearch/PowerSearchValueEditor.test.tsx +51 -0
  464. package/src/PowerSearch/PowerSearchValueEditor.tsx +4 -0
  465. package/src/ProgressBar/ProgressBar.test.tsx +29 -11
  466. package/src/ProgressBar/ProgressBar.tsx +59 -72
  467. package/src/RadioList/RadioList.doc.mjs +11 -0
  468. package/src/RadioList/RadioList.test.tsx +32 -0
  469. package/src/RadioList/RadioListItem.tsx +25 -1
  470. package/src/ScrollableArea/ScrollableArea.tsx +1 -0
  471. package/src/ScrollableArea/modules/useScrollableArea.spec.md +50 -22
  472. package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
  473. package/src/SegmentedControl/SegmentedControl.test.tsx +61 -0
  474. package/src/SegmentedControl/SegmentedControl.tsx +2 -1
  475. package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
  476. package/src/Selector/Selector.doc.mjs +3 -3
  477. package/src/Selector/Selector.spec.md +51 -49
  478. package/src/Selector/Selector.test.tsx +61 -55
  479. package/src/Selector/Selector.tsx +34 -15
  480. package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +130 -0
  481. package/src/Selector/__tests__/Listbox.a11y.dom.ts +38 -0
  482. package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +63 -0
  483. package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +37 -0
  484. package/src/Selector/__tests__/Listbox.a11y.states.ts +232 -0
  485. package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +45 -0
  486. package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +121 -0
  487. package/src/SideNav/SideNav.doc.mjs +1 -1
  488. package/src/SideNav/SideNav.test.tsx +10 -0
  489. package/src/SideNav/SideNav.tsx +14 -2
  490. package/src/Slider/Slider.doc.mjs +17 -3
  491. package/src/Slider/Slider.test.tsx +221 -0
  492. package/src/Slider/Slider.tsx +40 -9
  493. package/src/Spinner/Spinner.test.tsx +4 -0
  494. package/src/Spinner/Spinner.tsx +31 -18
  495. package/src/Switch/Switch.doc.mjs +11 -0
  496. package/src/Switch/Switch.test.tsx +16 -0
  497. package/src/Switch/Switch.tsx +28 -0
  498. package/src/TabList/Tab.tsx +35 -7
  499. package/src/TabList/TabList.doc.mjs +11 -0
  500. package/src/TabList/TabList.spec.md +204 -0
  501. package/src/TabList/TabList.test.tsx +66 -0
  502. package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +1 -34
  503. package/src/Table/Table.doc.mjs +1 -1
  504. package/src/Table/Table.spec.md +54 -40
  505. package/src/Table/Table.test.tsx +83 -10
  506. package/src/Table/Table.tsx +30 -22
  507. package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +137 -0
  508. package/src/TextArea/TextArea.tsx +6 -1
  509. package/src/TextInput/TextInput.test.tsx +20 -1
  510. package/src/TextInput/TextInput.tsx +6 -1
  511. package/src/TimeInput/TimeInput.tsx +6 -1
  512. package/src/Timer/Timer.doc.mjs +183 -0
  513. package/src/Timer/Timer.spec.md +215 -0
  514. package/src/Timer/Timer.test.tsx +302 -0
  515. package/src/Timer/Timer.tsx +258 -0
  516. package/src/Timer/index.ts +11 -0
  517. package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
  518. package/src/ToggleButton/ToggleButton.test.tsx +299 -4
  519. package/src/ToggleButton/ToggleButton.tsx +26 -33
  520. package/src/ToggleButton/ToggleButtonGroup.doc.mjs +3 -3
  521. package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +209 -0
  522. package/src/Token/Token.doc.mjs +2 -2
  523. package/src/Tokenizer/Tokenizer.spec.md +142 -75
  524. package/src/TopNav/TopNavMenu.doc.mjs +2 -2
  525. package/src/TopNav/TopNavMenu.test.tsx +30 -0
  526. package/src/TopNav/TopNavMenu.tsx +7 -2
  527. package/src/TreeList/TreeList.doc.mjs +3 -3
  528. package/src/TreeList/TreeList.spec.md +123 -75
  529. package/src/TreeList/TreeList.test.tsx +29 -0
  530. package/src/TreeList/TreeList.tsx +3 -0
  531. package/src/TreeList/TreeListItem.tsx +15 -1
  532. package/src/TreeList/TreeListTypes.ts +11 -1
  533. package/src/Typeahead/BaseTypeahead.spec.md +4 -3
  534. package/src/Typeahead/BaseTypeahead.tsx +21 -7
  535. package/src/Typeahead/Typeahead.test.tsx +53 -0
  536. package/src/__tests__/PressedState.a11y.chromium.spec.ts +813 -0
  537. package/src/__tests__/pressState.ts +93 -0
  538. package/src/hooks/scrollKeyboardDelegation.test.ts +155 -0
  539. package/src/hooks/scrollKeyboardDelegation.ts +233 -0
  540. package/src/hooks/useClickableContainer.test.tsx +236 -0
  541. package/src/hooks/useClickableContainer.ts +20 -4
  542. package/src/hooks/useScrollableArea.doc.mjs +15 -3
  543. package/src/hooks/useScrollableArea.test.tsx +59 -1
  544. package/src/hooks/useScrollableArea.ts +34 -10
  545. package/src/index.ts +3 -0
  546. package/src/inputFontFloor.test.ts +106 -0
  547. package/src/tailwind-theme.css +0 -6
  548. package/src/theme/Theme.test.tsx +32 -0
  549. package/src/theme/declarationBoundary.test.ts +126 -0
  550. package/src/theme/declarationBoundary.ts +347 -0
  551. package/src/theme/derivedVarRegistry.test.ts +7 -0
  552. package/src/theme/derivedVarRegistry.ts +1 -0
  553. package/src/theme/generateThemeRules.test.ts +526 -1
  554. package/src/theme/generateThemeRules.ts +228 -50
  555. package/src/theme/tokenValueCompat.test.ts +4 -1
  556. package/src/utils/interactionOverlay.stylex.ts +20 -0
  557. package/src/utils/safeUrl.test.ts +88 -0
  558. package/src/utils/safeUrl.ts +85 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @file semanticFence.ts
3
+ * @input Declared fenced-code languages and typed extension-node factories
4
+ * @output Immutable Markdown transform that annotates eligible canonical code nodes
5
+ * @position Optional helper layer compiled onto the core transform protocol
6
+ */
7
+ import type { MarkdownAstCode } from '../ast';
8
+ import { type MarkdownExtensionNode, type MarkdownPluginData, type MarkdownTransform } from './protocol';
9
+ export interface MarkdownFenceContext<Language extends string> {
10
+ readonly code: string;
11
+ readonly language: Language;
12
+ readonly meta?: string;
13
+ }
14
+ export type MarkdownFenceNode<Node extends MarkdownExtensionNode> = Node & {
15
+ readonly type: 'extension';
16
+ readonly display: 'block';
17
+ readonly position?: never;
18
+ readonly source?: never;
19
+ };
20
+ export interface MarkdownFenceTransformOptions<Languages extends readonly [string, ...string[]], Node extends MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>> {
21
+ /** Exact, case-sensitive fenced-code language identifiers this helper owns. */
22
+ readonly languages: Languages;
23
+ /**
24
+ * Creates typed semantic data for an eligible fence. Return null or undefined
25
+ * to retain Markdown's ordinary CodeBlock rendering.
26
+ */
27
+ readonly createNode: (context: MarkdownFenceContext<Languages[number]>) => MarkdownFenceNode<Node> | null | undefined;
28
+ }
29
+ interface MarkdownFenceProposal {
30
+ readonly node: MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>;
31
+ }
32
+ /** @internal Returns the first transform-owned proposal attached to a code node. */
33
+ export declare function getMarkdownFenceProposal(node: MarkdownAstCode): MarkdownFenceProposal | undefined;
34
+ export declare function createMarkdownFenceTransform<const Languages extends readonly [string, ...string[]], const Node extends MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>>(options: MarkdownFenceTransformOptions<Languages, Node>): MarkdownTransform<Node>;
35
+ export {};
36
+ //# sourceMappingURL=semanticFence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticFence.d.ts","sourceRoot":"","sources":["../../../src/Markdown/plugins/semanticFence.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB,CAAC,QAAQ,SAAS,MAAM;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,qBAAqB,IAAI,IAAI,GAAG;IACzE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,6BAA6B,CAC5C,SAAS,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAChD,IAAI,SAAS,qBAAqB,CAChC,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,OAAO,CACR;IAED,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,CACnB,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAC7C,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CACjD;AAED,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAClC,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,OAAO,CACR,CAAC;CACH;AAQD,oFAAoF;AACpF,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,GACpB,qBAAqB,GAAG,SAAS,CAEnC;AAgRD,wBAAgB,4BAA4B,CAC1C,KAAK,CAAC,SAAS,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACtD,KAAK,CAAC,IAAI,SAAS,qBAAqB,CACtC,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,OAAO,CACR,EAED,OAAO,EAAE,6BAA6B,CAAC,SAAS,EAAE,IAAI,CAAC,GACtD,iBAAiB,CAAC,IAAI,CAAC,CAgEzB"}
@@ -0,0 +1,213 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file semanticFence.ts
5
+ * @input Declared fenced-code languages and typed extension-node factories
6
+ * @output Immutable Markdown transform that annotates eligible canonical code nodes
7
+ * @position Optional helper layer compiled onto the core transform protocol
8
+ */
9
+
10
+ import { getMarkdownHelperOwnership, markMarkdownTransformClaim, markMarkdownTransformTrusted } from "./protocol.js";
11
+ const markdownFenceProposal = Symbol('MarkdownFenceProposal');
12
+ /** @internal Returns the first transform-owned proposal attached to a code node. */
13
+ export function getMarkdownFenceProposal(node) {
14
+ return node[markdownFenceProposal];
15
+ }
16
+ function cloneNestedPluginData(value, parent, ancestors) {
17
+ if (value == null || typeof value !== 'object') {
18
+ return clonePluginData(value, ancestors);
19
+ }
20
+ const nestedAncestors = new Set(ancestors);
21
+ nestedAncestors.add(parent);
22
+ return clonePluginData(value, nestedAncestors);
23
+ }
24
+ function clonePluginData(value, ancestors) {
25
+ if (value == null || typeof value === 'boolean' || typeof value === 'string') {
26
+ return value;
27
+ }
28
+ if (typeof value === 'number') {
29
+ if (!Number.isFinite(value)) {
30
+ throw new TypeError('invalid plugin data');
31
+ }
32
+ return value;
33
+ }
34
+ if (typeof value !== 'object' || ancestors?.has(value) === true || !Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype) {
35
+ throw new TypeError('invalid plugin data');
36
+ }
37
+ let clone;
38
+ if (Array.isArray(value)) {
39
+ const items = new Array(value.length);
40
+ for (let index = 0; index < value.length; index++) {
41
+ if (index in value) {
42
+ items[index] = cloneNestedPluginData(value[index], value, ancestors);
43
+ }
44
+ }
45
+ clone = Object.freeze(items);
46
+ } else {
47
+ const record = {};
48
+ for (const key in value) {
49
+ const nested = cloneNestedPluginData(value[key], value, ancestors);
50
+ if (key === '__proto__') {
51
+ Object.defineProperty(record, key, {
52
+ configurable: true,
53
+ enumerable: true,
54
+ value: nested,
55
+ writable: true
56
+ });
57
+ } else {
58
+ record[key] = nested;
59
+ }
60
+ }
61
+ clone = Object.freeze(record);
62
+ }
63
+ return clone;
64
+ }
65
+ function createProposal(node, pluginName, hasRenderer) {
66
+ if (node == null || typeof node !== 'object' || node.type !== 'extension' || node.plugin !== pluginName || typeof node.name !== 'string' || node.name.trim() === '' ||
67
+ // Every extension node must have a renderer and a text projection
68
+ // (FR14). Checking it here is what lets Core run this helper on its
69
+ // trusted path: the node is fully validated before it is inserted.
70
+ !hasRenderer(node.name) || node.display !== 'block' || 'source' in node || 'position' in node) {
71
+ throw new TypeError('Markdown fence createNode must return an owned block extension node with finite data and a registered renderer');
72
+ }
73
+ let data;
74
+ try {
75
+ data = clonePluginData(node.data);
76
+ } catch {
77
+ throw new TypeError('Markdown fence createNode must return an owned block extension node with finite data and a registered renderer');
78
+ }
79
+ return Object.freeze({
80
+ node: Object.freeze({
81
+ type: 'extension',
82
+ plugin: node.plugin,
83
+ name: node.name,
84
+ display: 'block',
85
+ data
86
+ })
87
+ });
88
+ }
89
+ function isPromiseLike(value) {
90
+ return value != null && typeof value === 'object' && 'then' in value && typeof value.then === 'function';
91
+ }
92
+ function consumeInvalidAsyncNode(value, report) {
93
+ void Promise.resolve(value).then(() => report('Markdown fence createNode returned a Promise'), () => report('Markdown fence createNode Promise rejected'));
94
+ }
95
+ function annotateCode(node, languages, pluginName, hasRenderer, createNode, report) {
96
+ if (node.lang == null || !languages.has(node.lang) || getMarkdownFenceProposal(node) != null) {
97
+ return node;
98
+ }
99
+ const proposalNode = createNode(Object.freeze({
100
+ code: node.value,
101
+ language: node.lang,
102
+ ...(node.meta == null ? {} : {
103
+ meta: node.meta
104
+ })
105
+ }));
106
+ if (isPromiseLike(proposalNode)) {
107
+ consumeInvalidAsyncNode(proposalNode, report);
108
+ throw new TypeError('Markdown fence createNode must be synchronous');
109
+ }
110
+ if (proposalNode == null) {
111
+ return node;
112
+ }
113
+ const annotated = {
114
+ ...node
115
+ };
116
+ Object.defineProperty(annotated, markdownFenceProposal, {
117
+ configurable: false,
118
+ enumerable: true,
119
+ value: createProposal(proposalNode, pluginName, hasRenderer),
120
+ writable: false
121
+ });
122
+ return annotated;
123
+ }
124
+ function transformBlocks(blocks, languages, pluginName, hasRenderer, createNode, report) {
125
+ let next;
126
+ for (let index = 0; index < blocks.length; index++) {
127
+ const block = blocks[index];
128
+ let replacement;
129
+ switch (block.type) {
130
+ case 'code':
131
+ replacement = annotateCode(block, languages, pluginName, hasRenderer, createNode, report);
132
+ break;
133
+ case 'blockquote':
134
+ {
135
+ const children = transformBlocks(block.children, languages, pluginName, hasRenderer, createNode, report);
136
+ replacement = children === block.children ? block : {
137
+ ...block,
138
+ children
139
+ };
140
+ break;
141
+ }
142
+ case 'list':
143
+ {
144
+ let items;
145
+ for (let itemIndex = 0; itemIndex < block.children.length; itemIndex++) {
146
+ const item = block.children[itemIndex];
147
+ const itemChildren = transformBlocks(item.children, languages, pluginName, hasRenderer, createNode, report);
148
+ if (itemChildren === item.children) {
149
+ items?.push(item);
150
+ continue;
151
+ }
152
+ items ??= block.children.slice(0, itemIndex);
153
+ items.push({
154
+ ...item,
155
+ children: itemChildren
156
+ });
157
+ }
158
+ replacement = items == null ? block : {
159
+ ...block,
160
+ children: items
161
+ };
162
+ break;
163
+ }
164
+ case 'heading':
165
+ case 'paragraph':
166
+ case 'math':
167
+ case 'table':
168
+ case 'thematicBreak':
169
+ case 'image':
170
+ case 'extension':
171
+ replacement = block;
172
+ break;
173
+ }
174
+ if (next === undefined && replacement !== block) {
175
+ next = blocks.slice(0, index);
176
+ }
177
+ next?.push(replacement);
178
+ }
179
+ return next ?? blocks;
180
+ }
181
+ export function createMarkdownFenceTransform(options) {
182
+ if (!Array.isArray(options.languages) || options.languages.length === 0 || options.languages.some(language => typeof language !== 'string' || language.trim() === '')) {
183
+ throw new TypeError('Markdown fence languages must be non-empty strings');
184
+ }
185
+ if (new Set(options.languages).size !== options.languages.length) {
186
+ throw new TypeError('Markdown fence languages must be unique');
187
+ }
188
+ if (typeof options.createNode !== 'function') {
189
+ throw new TypeError('Markdown fence createNode must be a function');
190
+ }
191
+ const declaredLanguages = Object.freeze([...options.languages]);
192
+ const languages = new Set(declaredLanguages);
193
+ const sourceNeedles = Object.freeze(declaredLanguages.flatMap(language => [`\`\`\`${language}`, `~~~${language}`]));
194
+ const createNode = options.createNode;
195
+ const transform = (root, context) => {
196
+ const ownership = getMarkdownHelperOwnership(context);
197
+ if (ownership == null) {
198
+ throw new TypeError('Markdown fence transforms must run through createMarkdownPlugin');
199
+ }
200
+ const children = transformBlocks(root.children, languages, ownership.pluginName, ownership.hasRenderer, createNode, context.report);
201
+ return children === root.children ? root : {
202
+ ...root,
203
+ children
204
+ };
205
+ };
206
+
207
+ // Every node this helper inserts is validated above against the same
208
+ // rules Core applies to plugin-authored output — owned plugin name,
209
+ // registered renderer, representable frozen data, no authored provenance
210
+ // — and nothing else in the tree is touched. Core may therefore skip
211
+ // revalidating the whole document after it runs.
212
+ return markMarkdownTransformTrusted(markMarkdownTransformClaim(transform, source => sourceNeedles.some(needle => source.includes(needle))));
213
+ }
@@ -0,0 +1,3 @@
1
+ /** Converts soft line endings in Markdown phrasing content to hard breaks. */
2
+ export declare const markdownSoftBreaksPlugin: import("./protocol").MarkdownPluginEntry<never>;
3
+ //# sourceMappingURL=softBreaks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"softBreaks.d.ts","sourceRoot":"","sources":["../../../src/Markdown/plugins/softBreaks.ts"],"names":[],"mappings":"AAmKA,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,iDAInC,CAAC"}
@@ -0,0 +1,172 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file softBreaks.ts
5
+ * @input Soft line endings in Markdown phrasing content
6
+ * @output A first-party plugin that renders each soft line ending as a hard break
7
+ * @position Optional Markdown transform built only on the public plugin protocol
8
+ */
9
+
10
+ import { createMarkdownPlugin } from "./protocol.js";
11
+ function replaceLineEndings(value) {
12
+ const pattern = /\r?\n|\r/g;
13
+ let match = pattern.exec(value);
14
+ if (match == null) {
15
+ return null;
16
+ }
17
+ const output = [];
18
+ let cursor = 0;
19
+ do {
20
+ if (match.index > cursor) {
21
+ output.push({
22
+ type: 'text',
23
+ value: value.slice(cursor, match.index)
24
+ });
25
+ }
26
+ output.push({
27
+ type: 'break'
28
+ });
29
+ cursor = match.index + match[0].length;
30
+ match = pattern.exec(value);
31
+ } while (match != null);
32
+ if (cursor < value.length) {
33
+ output.push({
34
+ type: 'text',
35
+ value: value.slice(cursor)
36
+ });
37
+ }
38
+ return output;
39
+ }
40
+ function transformPhrasing(children) {
41
+ let next;
42
+ for (let index = 0; index < children.length; index++) {
43
+ const node = children[index];
44
+ if (node.type === 'text') {
45
+ const replacement = replaceLineEndings(node.value);
46
+ if (replacement == null) {
47
+ next?.push(node);
48
+ } else {
49
+ next ??= children.slice(0, index);
50
+ next.push(...replacement);
51
+ }
52
+ continue;
53
+ }
54
+ if (node.type === 'strong' || node.type === 'emphasis' || node.type === 'delete' || node.type === 'link') {
55
+ const nested = transformPhrasing(node.children);
56
+ if (nested !== node.children) {
57
+ next ??= children.slice(0, index);
58
+ next.push({
59
+ ...node,
60
+ children: nested
61
+ });
62
+ } else {
63
+ next?.push(node);
64
+ }
65
+ continue;
66
+ }
67
+ next?.push(node);
68
+ }
69
+ return next ?? children;
70
+ }
71
+ function transformTableCell(cell) {
72
+ const children = transformPhrasing(cell.children);
73
+ return children === cell.children ? cell : {
74
+ ...cell,
75
+ children
76
+ };
77
+ }
78
+ function transformTableRow(row) {
79
+ const children = row.children.map(transformTableCell);
80
+ return children.every((child, index) => child === row.children[index]) ? row : {
81
+ ...row,
82
+ children
83
+ };
84
+ }
85
+ function transformListItem(item) {
86
+ const children = transformBlocks(item.children);
87
+ return children === item.children ? item : {
88
+ ...item,
89
+ children
90
+ };
91
+ }
92
+ function transformBlocks(children) {
93
+ let next;
94
+ for (let index = 0; index < children.length; index++) {
95
+ const node = children[index];
96
+ let transformed = node;
97
+ switch (node.type) {
98
+ case 'heading':
99
+ case 'paragraph':
100
+ {
101
+ const nested = transformPhrasing(node.children);
102
+ if (nested !== node.children) {
103
+ transformed = {
104
+ ...node,
105
+ children: nested
106
+ };
107
+ }
108
+ break;
109
+ }
110
+ case 'blockquote':
111
+ {
112
+ const nested = transformBlocks(node.children);
113
+ if (nested !== node.children) {
114
+ transformed = {
115
+ ...node,
116
+ children: nested
117
+ };
118
+ }
119
+ break;
120
+ }
121
+ case 'list':
122
+ {
123
+ const nested = node.children.map(transformListItem);
124
+ if (nested.some((child, childIndex) => child !== node.children[childIndex])) {
125
+ transformed = {
126
+ ...node,
127
+ children: nested
128
+ };
129
+ }
130
+ break;
131
+ }
132
+ case 'table':
133
+ {
134
+ const nested = node.children.map(transformTableRow);
135
+ if (nested.some((child, childIndex) => child !== node.children[childIndex])) {
136
+ transformed = {
137
+ ...node,
138
+ children: nested
139
+ };
140
+ }
141
+ break;
142
+ }
143
+ case 'code':
144
+ case 'math':
145
+ case 'thematicBreak':
146
+ case 'image':
147
+ case 'extension':
148
+ break;
149
+ default:
150
+ node;
151
+ }
152
+ if (transformed !== node) {
153
+ next ??= children.slice(0, index);
154
+ }
155
+ next?.push(transformed);
156
+ }
157
+ return next ?? children;
158
+ }
159
+ const transformSoftBreaks = document => {
160
+ const children = transformBlocks(document.children);
161
+ return children === document.children ? document : {
162
+ ...document,
163
+ children
164
+ };
165
+ };
166
+
167
+ /** Converts soft line endings in Markdown phrasing content to hard breaks. */
168
+ export const markdownSoftBreaksPlugin = createMarkdownPlugin({
169
+ name: 'soft-breaks',
170
+ apiVersion: 1,
171
+ transform: transformSoftBreaks
172
+ });
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @file sourceDecoration.ts
3
+ * @input Caller-supplied UTF-16 source ranges and non-semantic decoration payloads
4
+ * @output Immutable Markdown transforms that annotate Core-authored source-backed nodes
5
+ * @position Optional helper layer compiled onto the core transform protocol
6
+ */
7
+ import type { MarkdownAstNodeBase } from '../ast';
8
+ import { type MarkdownPluginData, type MarkdownTransform } from './protocol';
9
+ /** One decoration recorded on an annotated node. */
10
+ export interface MarkdownSourceDecoration {
11
+ /** Stable decoration name supplied by the helper's caller. */
12
+ readonly name: string;
13
+ /** Optional finite JSON-like payload copied from the matching range. */
14
+ readonly data?: MarkdownPluginData;
15
+ }
16
+ export interface MarkdownSourceDecorationRange {
17
+ /** Inclusive UTF-16 offset into the parsed source. */
18
+ readonly start: number;
19
+ /** Exclusive UTF-16 offset into the parsed source. */
20
+ readonly end: number;
21
+ /** Optional finite JSON-like payload recorded with this range. */
22
+ readonly data?: MarkdownPluginData;
23
+ }
24
+ export interface MarkdownSourceDecorationOptions {
25
+ /** Stable decoration name identifying every entry this helper records. */
26
+ readonly name: string;
27
+ /**
28
+ * Source ranges to decorate, as UTF-16 offsets into the same string the
29
+ * parser received. Order does not matter: entries are recorded in a fixed
30
+ * start, end, payload order so overlapping and duplicate ranges resolve the
31
+ * same way on every run. An empty list is a valid no-op.
32
+ */
33
+ readonly ranges: ReadonlyArray<MarkdownSourceDecorationRange>;
34
+ }
35
+ /**
36
+ * Compiles validated source ranges into an immutable transform that records
37
+ * non-semantic presentation metadata on the Core-authored nodes those ranges
38
+ * overlap.
39
+ *
40
+ * A node is decorated only when the parser authored its source position and
41
+ * the range overlaps its span, so the helper never changes AST meaning,
42
+ * rendered output, copyable text, accessible names, focus order, navigation,
43
+ * or source provenance. Core authors positions on top-level blocks, so a
44
+ * range decorates every block it touches, whatever order those blocks sit in
45
+ * after earlier transforms.
46
+ *
47
+ * Decorations describe settled source, so they appear on the final snapshot
48
+ * of a streaming document rather than on its partial chunks: a partial
49
+ * block's extent is still changing, and exposing decorations from it would
50
+ * let one appear and then vanish. Exposure is therefore monotone — never
51
+ * present, then absent.
52
+ *
53
+ * Decorations are stored in one Core-owned versioned envelope and read back
54
+ * with `getMarkdownSourceDecorations`; data the helper does not own is never
55
+ * merged into or overwritten.
56
+ *
57
+ * @example
58
+ * ```
59
+ * const reviewHits = createMarkdownPlugin({
60
+ * name: 'review-hits',
61
+ * apiVersion: 1,
62
+ * transform: createMarkdownSourceDecoration({
63
+ * name: 'review-hit',
64
+ * ranges: [{start: 0, end: 12, data: {reviewer: 'ada'}}],
65
+ * }),
66
+ * });
67
+ * ```
68
+ */
69
+ export declare function createMarkdownSourceDecoration(options: MarkdownSourceDecorationOptions): MarkdownTransform<never>;
70
+ /**
71
+ * Reads the decorations a source-decoration helper recorded on a node.
72
+ * Returns an empty list for undecorated nodes and for any value that is not
73
+ * a current Core-owned decoration envelope.
74
+ */
75
+ export declare function getMarkdownSourceDecorations(node: MarkdownAstNodeBase): ReadonlyArray<MarkdownSourceDecoration>;
76
+ //# sourceMappingURL=sourceDecoration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceDecoration.d.ts","sourceRoot":"","sources":["../../../src/Markdown/plugins/sourceDecoration.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,mBAAmB,EAGpB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAYpB,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,+BAA+B;IAC9C,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,6BAA6B,CAAC,CAAC;CAC/D;AAiXD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,iBAAiB,CAAC,KAAK,CAAC,CAwD1B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,mBAAmB,GACxB,aAAa,CAAC,wBAAwB,CAAC,CAOzC"}