@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.
- package/CHANGELOG.md +81 -0
- package/dist/BottomSheet/BottomSheet.d.ts +1 -1
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +3 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts +7 -5
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +56 -19
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +10 -5
- package/dist/Chat/ChatComposerDrawer.d.ts +19 -5
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +48 -23
- package/dist/Chat/ChatComposerInput.d.ts +11 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +63 -16
- package/dist/Chat/ChatDictationButton.d.ts +3 -2
- package/dist/Chat/ChatDictationButton.d.ts.map +1 -1
- package/dist/Chat/ChatDictationButton.js +6 -4
- package/dist/Chat/ChatSendButton.js +1 -1
- package/dist/Chat/index.d.ts +1 -1
- package/dist/Chat/index.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +12 -2
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +6 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +1 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +4 -4
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +16 -16
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +2 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +4 -4
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +8 -8
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -4
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts +9 -3
- package/dist/DateTimeInput/nativePickerSegmentStyles.d.ts.map +1 -1
- package/dist/DateTimeInput/nativePickerSegmentStyles.js +3 -3
- package/dist/Dialog/DialogHeader.d.ts +8 -1
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +10 -1
- package/dist/Field/InputClearButton.d.ts +4 -2
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +4 -2
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +7 -7
- package/dist/Kbd/Kbd.d.ts +5 -3
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +36 -42
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +6 -2
- package/dist/Markdown/Markdown.d.ts +8 -2
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.bench.d.ts +2 -0
- package/dist/Markdown/Markdown.fr23.bench.d.ts.map +1 -0
- package/dist/Markdown/Markdown.fr23.bench.js +150 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts +2 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -0
- package/dist/Markdown/Markdown.fr23.sampling.js +43 -0
- package/dist/Markdown/Markdown.js +262 -109
- package/dist/Markdown/ast.d.ts +162 -0
- package/dist/Markdown/ast.d.ts.map +1 -0
- package/dist/Markdown/ast.js +74 -0
- package/dist/Markdown/index.d.ts +5 -3
- package/dist/Markdown/index.d.ts.map +1 -1
- package/dist/Markdown/index.js +3 -2
- package/dist/Markdown/parser/index.d.ts +10 -0
- package/dist/Markdown/parser/index.d.ts.map +1 -0
- package/dist/Markdown/parser/index.js +10 -0
- package/dist/Markdown/parser.d.ts +126 -58
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +716 -167
- package/dist/Markdown/plugins/frontmatter.d.ts +32 -0
- package/dist/Markdown/plugins/frontmatter.d.ts.map +1 -0
- package/dist/Markdown/plugins/frontmatter.js +132 -0
- package/dist/Markdown/plugins/index.d.ts +16 -0
- package/dist/Markdown/plugins/index.d.ts.map +1 -0
- package/dist/Markdown/plugins/index.js +13 -0
- package/dist/Markdown/plugins/protocol.d.ts +191 -0
- package/dist/Markdown/plugins/protocol.d.ts.map +1 -0
- package/dist/Markdown/plugins/protocol.js +957 -0
- package/dist/Markdown/plugins/semanticFence.d.ts +36 -0
- package/dist/Markdown/plugins/semanticFence.d.ts.map +1 -0
- package/dist/Markdown/plugins/semanticFence.js +213 -0
- package/dist/Markdown/plugins/sourceDecoration.d.ts +76 -0
- package/dist/Markdown/plugins/sourceDecoration.d.ts.map +1 -0
- package/dist/Markdown/plugins/sourceDecoration.js +393 -0
- package/dist/Markdown/plugins/textTransform.d.ts +30 -0
- package/dist/Markdown/plugins/textTransform.d.ts.map +1 -0
- package/dist/Markdown/plugins/textTransform.js +374 -0
- package/dist/Markdown/remark.d.ts +196 -0
- package/dist/Markdown/remark.d.ts.map +1 -0
- package/dist/Markdown/remark.js +1062 -0
- package/dist/Markdown/url.d.ts +4 -0
- package/dist/Markdown/url.d.ts.map +1 -0
- package/dist/Markdown/url.js +25 -0
- package/dist/Markdown/utils.d.ts +4 -2
- package/dist/Markdown/utils.d.ts.map +1 -1
- package/dist/Markdown/utils.js +2 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +4 -4
- package/dist/Outline/index.d.ts +1 -0
- package/dist/Outline/index.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.d.ts +7 -1
- package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.js +14 -8
- package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -1
- package/dist/Outline/useOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/useOutlineFromMarkdown.js +8 -3
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchEditPopover.js +46 -30
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +36 -31
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +5 -5
- package/dist/Selector/Selector.d.ts +9 -7
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +7 -5
- package/dist/SideNav/SideNav.d.ts +2 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +9 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +28 -12
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +23 -7
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +11 -0
- package/dist/TabList/Tab.d.ts +1 -1
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +20 -7
- package/dist/Table/Table.d.ts +1 -0
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +29 -13
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +1 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +2 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +4 -4
- package/dist/ToggleButton/ToggleButton.d.ts +9 -6
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +15 -27
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +3 -0
- package/dist/TreeList/TreeListItem.d.ts +6 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +12 -2
- package/dist/TreeList/TreeListTypes.d.ts +8 -1
- package/dist/TreeList/TreeListTypes.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -7
- package/dist/astryx.css +18 -7
- package/dist/hooks/scrollKeyboardDelegation.d.ts +3 -0
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -0
- package/dist/hooks/scrollKeyboardDelegation.js +146 -0
- package/dist/hooks/useScrollableArea.d.ts +6 -2
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +17 -5
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +10 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +8 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +9 -0
- package/locales/af-ZA.json +530 -1
- package/locales/ar-SA.json +490 -1
- package/locales/ca-ES.json +514 -1
- package/locales/cs-CZ.json +498 -1
- package/locales/da-DK.json +522 -1
- package/locales/de-DE.json +522 -1
- package/locales/el-GR.json +498 -1
- package/locales/es-ES.json +510 -1
- package/locales/fi-FI.json +498 -1
- package/locales/fr-FR.json +534 -1
- package/locales/he-IL.json +498 -1
- package/locales/hu-HU.json +498 -1
- package/locales/it-IT.json +510 -1
- package/locales/ja-JP.json +490 -1
- package/locales/ko-KR.json +498 -1
- package/locales/nl-NL.json +534 -1
- package/locales/no-NO.json +510 -1
- package/locales/pl-PL.json +506 -1
- package/locales/pt-BR.json +506 -1
- package/locales/pt-PT.json +506 -1
- package/locales/ro-RO.json +506 -1
- package/locales/ru-RU.json +498 -1
- package/locales/sr-SP.json +498 -1
- package/locales/sv-SE.json +502 -1
- package/locales/tr-TR.json +498 -1
- package/locales/uk-UA.json +498 -1
- package/locales/vi-VN.json +502 -1
- package/locales/zh-CN.json +490 -1
- package/locales/zh-TW.json +490 -1
- package/package.json +19 -4
- package/src/BottomSheet/BottomSheet.doc.mjs +8 -1
- package/src/BottomSheet/BottomSheet.spec.md +46 -20
- package/src/BottomSheet/BottomSheet.test.tsx +6 -3
- package/src/BottomSheet/BottomSheet.tsx +3 -1
- package/src/BottomSheet/BottomSheetKeyboard.test.tsx +195 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +11 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +49 -16
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +344 -0
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +17 -1
- package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -29
- package/src/Button/__tests__/Button.a11y.renders.tsx +9 -2
- package/src/Button/__tests__/Button.a11y.states.ts +9 -0
- package/src/Chat/ChatComposer.doc.mjs +14 -0
- package/src/Chat/ChatComposer.spec.md +230 -0
- package/src/Chat/ChatComposer.test.tsx +57 -0
- package/src/Chat/ChatComposer.tsx +21 -9
- package/src/Chat/ChatComposerDrawer.doc.mjs +63 -5
- package/src/Chat/ChatComposerDrawer.spec.md +267 -0
- package/src/Chat/ChatComposerDrawer.test.tsx +81 -12
- package/src/Chat/ChatComposerDrawer.tsx +38 -9
- package/src/Chat/ChatComposerInput.doc.mjs +114 -26
- package/src/Chat/ChatComposerInput.spec.md +185 -0
- package/src/Chat/ChatComposerInput.test.tsx +113 -3
- package/src/Chat/ChatComposerInput.tsx +78 -13
- package/src/Chat/ChatComposerTokenElement.spec.md +152 -0
- package/src/Chat/ChatComposerTokenElement.test.tsx +85 -0
- package/src/Chat/ChatDictationButton.doc.mjs +3 -3
- package/src/Chat/ChatDictationButton.spec.md +160 -0
- package/src/Chat/ChatDictationButton.test.tsx +92 -27
- package/src/Chat/ChatDictationButton.tsx +8 -6
- package/src/Chat/ChatSendButton.test.tsx +1 -4
- package/src/Chat/ChatSendButton.tsx +1 -1
- package/src/Chat/index.ts +1 -0
- package/src/CheckboxInput/CheckboxInput.doc.mjs +11 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +34 -0
- package/src/CheckboxInput/CheckboxInput.tsx +21 -1
- package/src/ClickableCard/ClickableCard.test.tsx +102 -5
- package/src/Collapsible/Collapsible.doc.mjs +11 -0
- package/src/Collapsible/Collapsible.test.tsx +21 -0
- package/src/Collapsible/Collapsible.tsx +5 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +6 -1
- package/src/ComplexSelector/ComplexSelector.tsx +6 -1
- package/src/DateInput/DateInput.tsx +6 -1
- package/src/DateInput/NativeDateField.tsx +24 -8
- package/src/DateInput/TouchDateField.tsx +6 -2
- package/src/DateRangeInput/DateRangeInput.tsx +6 -1
- package/src/DateTimeInput/DateTimeInput.tsx +6 -1
- package/src/DateTimeInput/TouchDateTimeField.tsx +6 -1
- package/src/DateTimeInput/nativePickerSegmentStyles.ts +24 -8
- package/src/Dialog/DialogHeader.doc.mjs +12 -0
- package/src/Dialog/DialogHeader.test.tsx +97 -0
- package/src/Dialog/DialogHeader.tsx +25 -3
- package/src/Dialog/modules/DialogHeader.spec.md +75 -38
- package/src/Field/InputClearButton.test.tsx +17 -3
- package/src/Field/InputClearButton.tsx +5 -2
- package/src/Field/PanelSearchInput.tsx +5 -2
- package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +1 -1
- package/src/FileInput/FileInput.tsx +11 -2
- package/src/Kbd/Kbd.doc.mjs +3 -3
- package/src/Kbd/Kbd.test.tsx +57 -1
- package/src/Kbd/Kbd.tsx +57 -37
- package/src/Layout/LayoutFooter.doc.mjs +17 -0
- package/src/Link/Link.doc.mjs +11 -0
- package/src/Link/Link.test.tsx +24 -0
- package/src/Link/Link.tsx +5 -0
- package/src/List/List.spec.md +200 -0
- package/src/Markdown/Markdown.doc.mjs +272 -0
- package/src/Markdown/Markdown.fr23.bench.ts +174 -0
- package/src/Markdown/Markdown.fr23.perf.test.ts +249 -0
- package/src/Markdown/Markdown.fr23.sampling.ts +49 -0
- package/src/Markdown/Markdown.helpers.perf.test.ts +489 -0
- package/src/Markdown/Markdown.public.test.ts +126 -3
- package/src/Markdown/Markdown.spec.md +197 -44
- package/src/Markdown/Markdown.test.tsx +11 -0
- package/src/Markdown/Markdown.tsx +414 -135
- package/src/Markdown/ast.test.ts +307 -0
- package/src/Markdown/ast.ts +337 -0
- package/src/Markdown/incremental.test.ts +12 -0
- package/src/Markdown/index.ts +37 -1
- package/src/Markdown/modules/remark.spec.md +269 -0
- package/src/Markdown/parser/index.ts +64 -0
- package/src/Markdown/parser.public.test.ts +103 -0
- package/src/Markdown/parser.ts +1180 -235
- package/src/Markdown/plugins/frontmatter.test.tsx +125 -0
- package/src/Markdown/plugins/frontmatter.ts +198 -0
- package/src/Markdown/plugins/index.ts +53 -0
- package/src/Markdown/plugins/protocol.test.tsx +1022 -0
- package/src/Markdown/plugins/protocol.ts +1618 -0
- package/src/Markdown/plugins/semanticFence.test.tsx +546 -0
- package/src/Markdown/plugins/semanticFence.ts +424 -0
- package/src/Markdown/plugins/sourceDecoration.test.tsx +799 -0
- package/src/Markdown/plugins/sourceDecoration.ts +539 -0
- package/src/Markdown/plugins/textTransform.test.ts +467 -0
- package/src/Markdown/plugins/textTransform.ts +554 -0
- package/src/Markdown/remark.test.tsx +1877 -0
- package/src/Markdown/remark.ts +1574 -0
- package/src/Markdown/url.ts +30 -0
- package/src/Markdown/utils.ts +13 -1
- package/src/MultiSelector/MultiSelector.test.tsx +1 -35
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +128 -0
- package/src/NumberInput/NumberInput.tsx +6 -1
- package/src/Outline/Outline.doc.mjs +7 -5
- package/src/Outline/Outline.spec.md +1 -1
- package/src/Outline/index.ts +1 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +142 -0
- package/src/Outline/parseOutlineFromMarkdown.ts +40 -10
- package/src/Outline/useOutlineFromMarkdown.ts +15 -3
- package/src/PowerSearch/PowerSearch.doc.mjs +2 -2
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +150 -1
- package/src/PowerSearch/PowerSearchEditPopover.tsx +51 -28
- package/src/ProgressBar/ProgressBar.test.tsx +29 -11
- package/src/ProgressBar/ProgressBar.tsx +59 -72
- package/src/RadioList/RadioList.doc.mjs +11 -0
- package/src/RadioList/RadioList.test.tsx +32 -0
- package/src/RadioList/RadioListItem.tsx +25 -1
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +50 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +31 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
- package/src/Selector/Selector.doc.mjs +2 -2
- package/src/Selector/Selector.spec.md +51 -49
- package/src/Selector/Selector.test.tsx +61 -55
- package/src/Selector/Selector.tsx +23 -14
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +130 -0
- package/src/Selector/__tests__/Listbox.a11y.dom.ts +38 -0
- package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +63 -0
- package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +37 -0
- package/src/Selector/__tests__/Listbox.a11y.states.ts +232 -0
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +121 -0
- package/src/SideNav/SideNav.doc.mjs +1 -1
- package/src/SideNav/SideNav.test.tsx +10 -0
- package/src/SideNav/SideNav.tsx +14 -2
- package/src/Slider/Slider.doc.mjs +17 -3
- package/src/Slider/Slider.test.tsx +221 -0
- package/src/Slider/Slider.tsx +40 -9
- package/src/Spinner/Spinner.test.tsx +4 -0
- package/src/Spinner/Spinner.tsx +31 -18
- package/src/Switch/Switch.doc.mjs +11 -0
- package/src/Switch/Switch.test.tsx +16 -0
- package/src/Switch/Switch.tsx +28 -0
- package/src/TabList/Tab.tsx +35 -7
- package/src/TabList/TabList.doc.mjs +11 -0
- package/src/TabList/TabList.spec.md +204 -0
- package/src/TabList/TabList.test.tsx +66 -0
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +1 -34
- package/src/Table/Table.doc.mjs +1 -1
- package/src/Table/Table.spec.md +54 -40
- package/src/Table/Table.test.tsx +83 -10
- package/src/Table/Table.tsx +30 -22
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +137 -0
- package/src/TextArea/TextArea.tsx +6 -1
- package/src/TextInput/TextInput.test.tsx +20 -1
- package/src/TextInput/TextInput.tsx +6 -1
- package/src/TimeInput/TimeInput.tsx +6 -1
- package/src/ToggleButton/ToggleButton.doc.mjs +3 -3
- package/src/ToggleButton/ToggleButton.test.tsx +299 -4
- package/src/ToggleButton/ToggleButton.tsx +26 -33
- package/src/ToggleButton/ToggleButtonGroup.doc.mjs +3 -3
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +209 -0
- package/src/Tokenizer/Tokenizer.spec.md +142 -75
- package/src/TreeList/TreeList.doc.mjs +3 -3
- package/src/TreeList/TreeList.spec.md +123 -75
- package/src/TreeList/TreeList.test.tsx +29 -0
- package/src/TreeList/TreeList.tsx +3 -0
- package/src/TreeList/TreeListItem.tsx +15 -1
- package/src/TreeList/TreeListTypes.ts +11 -1
- package/src/Typeahead/BaseTypeahead.spec.md +4 -3
- package/src/Typeahead/BaseTypeahead.tsx +21 -7
- package/src/Typeahead/Typeahead.test.tsx +53 -0
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +813 -0
- package/src/__tests__/pressState.ts +93 -0
- package/src/hooks/scrollKeyboardDelegation.test.ts +155 -0
- package/src/hooks/scrollKeyboardDelegation.ts +233 -0
- package/src/hooks/useScrollableArea.doc.mjs +15 -3
- package/src/hooks/useScrollableArea.test.tsx +59 -1
- package/src/hooks/useScrollableArea.ts +34 -10
- package/src/inputFontFloor.test.ts +106 -0
- package/src/tailwind-theme.css +0 -6
- package/src/theme/generateThemeRules.test.ts +30 -0
- package/src/theme/generateThemeRules.ts +10 -0
- 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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"}
|