@astryxdesign/core 0.6.2 → 0.6.3-canary.0949cb1
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,424 @@
|
|
|
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 type {
|
|
11
|
+
MarkdownAstBlockContent,
|
|
12
|
+
MarkdownAstCode,
|
|
13
|
+
MarkdownAstListItem,
|
|
14
|
+
} from '../ast';
|
|
15
|
+
import {
|
|
16
|
+
getMarkdownHelperOwnership,
|
|
17
|
+
markMarkdownTransformClaim,
|
|
18
|
+
markMarkdownTransformTrusted,
|
|
19
|
+
type MarkdownExtensionNode,
|
|
20
|
+
type MarkdownPluginData,
|
|
21
|
+
type MarkdownTransform,
|
|
22
|
+
type MarkdownTransformContext,
|
|
23
|
+
} from './protocol';
|
|
24
|
+
|
|
25
|
+
export interface MarkdownFenceContext<Language extends string> {
|
|
26
|
+
readonly code: string;
|
|
27
|
+
readonly language: Language;
|
|
28
|
+
readonly meta?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type MarkdownFenceNode<Node extends MarkdownExtensionNode> = Node & {
|
|
32
|
+
readonly type: 'extension';
|
|
33
|
+
readonly display: 'block';
|
|
34
|
+
readonly position?: never;
|
|
35
|
+
readonly source?: never;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export interface MarkdownFenceTransformOptions<
|
|
39
|
+
Languages extends readonly [string, ...string[]],
|
|
40
|
+
Node extends MarkdownExtensionNode<
|
|
41
|
+
string,
|
|
42
|
+
string,
|
|
43
|
+
MarkdownPluginData,
|
|
44
|
+
'block'
|
|
45
|
+
>,
|
|
46
|
+
> {
|
|
47
|
+
/** Exact, case-sensitive fenced-code language identifiers this helper owns. */
|
|
48
|
+
readonly languages: Languages;
|
|
49
|
+
/**
|
|
50
|
+
* Creates typed semantic data for an eligible fence. Return null or undefined
|
|
51
|
+
* to retain Markdown's ordinary CodeBlock rendering.
|
|
52
|
+
*/
|
|
53
|
+
readonly createNode: (
|
|
54
|
+
context: MarkdownFenceContext<Languages[number]>,
|
|
55
|
+
) => MarkdownFenceNode<Node> | null | undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface MarkdownFenceProposal {
|
|
59
|
+
readonly node: MarkdownExtensionNode<
|
|
60
|
+
string,
|
|
61
|
+
string,
|
|
62
|
+
MarkdownPluginData,
|
|
63
|
+
'block'
|
|
64
|
+
>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const markdownFenceProposal = Symbol('MarkdownFenceProposal');
|
|
68
|
+
|
|
69
|
+
type FenceCode = MarkdownAstCode & {
|
|
70
|
+
readonly [markdownFenceProposal]?: MarkdownFenceProposal;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** @internal Returns the first transform-owned proposal attached to a code node. */
|
|
74
|
+
export function getMarkdownFenceProposal(
|
|
75
|
+
node: MarkdownAstCode,
|
|
76
|
+
): MarkdownFenceProposal | undefined {
|
|
77
|
+
return (node as FenceCode)[markdownFenceProposal];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function cloneNestedPluginData(
|
|
81
|
+
value: unknown,
|
|
82
|
+
parent: object,
|
|
83
|
+
ancestors: ReadonlySet<object> | undefined,
|
|
84
|
+
): MarkdownPluginData {
|
|
85
|
+
if (value == null || typeof value !== 'object') {
|
|
86
|
+
return clonePluginData(value, ancestors);
|
|
87
|
+
}
|
|
88
|
+
const nestedAncestors = new Set(ancestors);
|
|
89
|
+
nestedAncestors.add(parent);
|
|
90
|
+
return clonePluginData(value, nestedAncestors);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function clonePluginData(
|
|
94
|
+
value: unknown,
|
|
95
|
+
ancestors?: ReadonlySet<object>,
|
|
96
|
+
): MarkdownPluginData {
|
|
97
|
+
if (
|
|
98
|
+
value == null ||
|
|
99
|
+
typeof value === 'boolean' ||
|
|
100
|
+
typeof value === 'string'
|
|
101
|
+
) {
|
|
102
|
+
return value as MarkdownPluginData;
|
|
103
|
+
}
|
|
104
|
+
if (typeof value === 'number') {
|
|
105
|
+
if (!Number.isFinite(value)) {
|
|
106
|
+
throw new TypeError('invalid plugin data');
|
|
107
|
+
}
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
if (
|
|
111
|
+
typeof value !== 'object' ||
|
|
112
|
+
ancestors?.has(value) === true ||
|
|
113
|
+
(!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype)
|
|
114
|
+
) {
|
|
115
|
+
throw new TypeError('invalid plugin data');
|
|
116
|
+
}
|
|
117
|
+
let clone: MarkdownPluginData;
|
|
118
|
+
if (Array.isArray(value)) {
|
|
119
|
+
const items = new Array<MarkdownPluginData>(value.length);
|
|
120
|
+
for (let index = 0; index < value.length; index++) {
|
|
121
|
+
if (index in value) {
|
|
122
|
+
items[index] = cloneNestedPluginData(value[index], value, ancestors);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
clone = Object.freeze(items);
|
|
126
|
+
} else {
|
|
127
|
+
const record: Record<string, MarkdownPluginData> = {};
|
|
128
|
+
for (const key in value) {
|
|
129
|
+
const nested = cloneNestedPluginData(
|
|
130
|
+
(value as Record<string, unknown>)[key],
|
|
131
|
+
value,
|
|
132
|
+
ancestors,
|
|
133
|
+
);
|
|
134
|
+
if (key === '__proto__') {
|
|
135
|
+
Object.defineProperty(record, key, {
|
|
136
|
+
configurable: true,
|
|
137
|
+
enumerable: true,
|
|
138
|
+
value: nested,
|
|
139
|
+
writable: true,
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
record[key] = nested;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
clone = Object.freeze(record);
|
|
146
|
+
}
|
|
147
|
+
return clone;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function createProposal(
|
|
151
|
+
node: MarkdownFenceNode<
|
|
152
|
+
MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>
|
|
153
|
+
>,
|
|
154
|
+
pluginName: string,
|
|
155
|
+
hasRenderer: (nodeName: string) => boolean,
|
|
156
|
+
): MarkdownFenceProposal {
|
|
157
|
+
if (
|
|
158
|
+
node == null ||
|
|
159
|
+
typeof node !== 'object' ||
|
|
160
|
+
node.type !== 'extension' ||
|
|
161
|
+
node.plugin !== pluginName ||
|
|
162
|
+
typeof node.name !== 'string' ||
|
|
163
|
+
node.name.trim() === '' ||
|
|
164
|
+
// Every extension node must have a renderer and a text projection
|
|
165
|
+
// (FR14). Checking it here is what lets Core run this helper on its
|
|
166
|
+
// trusted path: the node is fully validated before it is inserted.
|
|
167
|
+
!hasRenderer(node.name) ||
|
|
168
|
+
node.display !== 'block' ||
|
|
169
|
+
'source' in node ||
|
|
170
|
+
'position' in node
|
|
171
|
+
) {
|
|
172
|
+
throw new TypeError(
|
|
173
|
+
'Markdown fence createNode must return an owned block extension node with finite data and a registered renderer',
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
let data: MarkdownPluginData;
|
|
178
|
+
try {
|
|
179
|
+
data = clonePluginData(node.data);
|
|
180
|
+
} catch {
|
|
181
|
+
throw new TypeError(
|
|
182
|
+
'Markdown fence createNode must return an owned block extension node with finite data and a registered renderer',
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
return Object.freeze({
|
|
186
|
+
node: Object.freeze({
|
|
187
|
+
type: 'extension' as const,
|
|
188
|
+
plugin: node.plugin,
|
|
189
|
+
name: node.name,
|
|
190
|
+
display: 'block' as const,
|
|
191
|
+
data,
|
|
192
|
+
}),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function isPromiseLike(value: unknown): value is PromiseLike<unknown> {
|
|
197
|
+
return (
|
|
198
|
+
value != null &&
|
|
199
|
+
typeof value === 'object' &&
|
|
200
|
+
'then' in value &&
|
|
201
|
+
typeof value.then === 'function'
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function consumeInvalidAsyncNode(
|
|
206
|
+
value: PromiseLike<unknown>,
|
|
207
|
+
report: (message: string) => void,
|
|
208
|
+
): void {
|
|
209
|
+
void Promise.resolve(value).then(
|
|
210
|
+
() => report('Markdown fence createNode returned a Promise'),
|
|
211
|
+
() => report('Markdown fence createNode Promise rejected'),
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function annotateCode(
|
|
216
|
+
node: MarkdownAstCode,
|
|
217
|
+
languages: ReadonlySet<string>,
|
|
218
|
+
pluginName: string,
|
|
219
|
+
hasRenderer: (nodeName: string) => boolean,
|
|
220
|
+
createNode: (
|
|
221
|
+
context: MarkdownFenceContext<string>,
|
|
222
|
+
) =>
|
|
223
|
+
| MarkdownFenceNode<
|
|
224
|
+
MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>
|
|
225
|
+
>
|
|
226
|
+
| null
|
|
227
|
+
| undefined,
|
|
228
|
+
report: (message: string) => void,
|
|
229
|
+
): MarkdownAstCode {
|
|
230
|
+
if (
|
|
231
|
+
node.lang == null ||
|
|
232
|
+
!languages.has(node.lang) ||
|
|
233
|
+
getMarkdownFenceProposal(node) != null
|
|
234
|
+
) {
|
|
235
|
+
return node;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const proposalNode = createNode(
|
|
239
|
+
Object.freeze({
|
|
240
|
+
code: node.value,
|
|
241
|
+
language: node.lang,
|
|
242
|
+
...(node.meta == null ? {} : {meta: node.meta}),
|
|
243
|
+
}),
|
|
244
|
+
);
|
|
245
|
+
if (isPromiseLike(proposalNode)) {
|
|
246
|
+
consumeInvalidAsyncNode(proposalNode, report);
|
|
247
|
+
throw new TypeError('Markdown fence createNode must be synchronous');
|
|
248
|
+
}
|
|
249
|
+
if (proposalNode == null) {
|
|
250
|
+
return node;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const annotated = {...node};
|
|
254
|
+
Object.defineProperty(annotated, markdownFenceProposal, {
|
|
255
|
+
configurable: false,
|
|
256
|
+
enumerable: true,
|
|
257
|
+
value: createProposal(proposalNode, pluginName, hasRenderer),
|
|
258
|
+
writable: false,
|
|
259
|
+
});
|
|
260
|
+
return annotated;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function transformBlocks(
|
|
264
|
+
blocks: ReadonlyArray<MarkdownAstBlockContent<MarkdownExtensionNode>>,
|
|
265
|
+
languages: ReadonlySet<string>,
|
|
266
|
+
pluginName: string,
|
|
267
|
+
hasRenderer: (nodeName: string) => boolean,
|
|
268
|
+
createNode: (
|
|
269
|
+
context: MarkdownFenceContext<string>,
|
|
270
|
+
) =>
|
|
271
|
+
| MarkdownFenceNode<
|
|
272
|
+
MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>
|
|
273
|
+
>
|
|
274
|
+
| null
|
|
275
|
+
| undefined,
|
|
276
|
+
report: (message: string) => void,
|
|
277
|
+
): ReadonlyArray<MarkdownAstBlockContent<MarkdownExtensionNode>> {
|
|
278
|
+
let next: MarkdownAstBlockContent<MarkdownExtensionNode>[] | undefined;
|
|
279
|
+
for (let index = 0; index < blocks.length; index++) {
|
|
280
|
+
const block = blocks[index];
|
|
281
|
+
let replacement: MarkdownAstBlockContent<MarkdownExtensionNode>;
|
|
282
|
+
switch (block.type) {
|
|
283
|
+
case 'code':
|
|
284
|
+
replacement = annotateCode(
|
|
285
|
+
block,
|
|
286
|
+
languages,
|
|
287
|
+
pluginName,
|
|
288
|
+
hasRenderer,
|
|
289
|
+
createNode,
|
|
290
|
+
report,
|
|
291
|
+
);
|
|
292
|
+
break;
|
|
293
|
+
case 'blockquote': {
|
|
294
|
+
const children = transformBlocks(
|
|
295
|
+
block.children,
|
|
296
|
+
languages,
|
|
297
|
+
pluginName,
|
|
298
|
+
hasRenderer,
|
|
299
|
+
createNode,
|
|
300
|
+
report,
|
|
301
|
+
);
|
|
302
|
+
replacement =
|
|
303
|
+
children === block.children ? block : {...block, children};
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
case 'list': {
|
|
307
|
+
let items: MarkdownAstListItem<MarkdownExtensionNode>[] | undefined;
|
|
308
|
+
for (
|
|
309
|
+
let itemIndex = 0;
|
|
310
|
+
itemIndex < block.children.length;
|
|
311
|
+
itemIndex++
|
|
312
|
+
) {
|
|
313
|
+
const item = block.children[itemIndex];
|
|
314
|
+
const itemChildren = transformBlocks(
|
|
315
|
+
item.children,
|
|
316
|
+
languages,
|
|
317
|
+
pluginName,
|
|
318
|
+
hasRenderer,
|
|
319
|
+
createNode,
|
|
320
|
+
report,
|
|
321
|
+
);
|
|
322
|
+
if (itemChildren === item.children) {
|
|
323
|
+
items?.push(item);
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
items ??= block.children.slice(0, itemIndex);
|
|
327
|
+
items.push({...item, children: itemChildren});
|
|
328
|
+
}
|
|
329
|
+
replacement = items == null ? block : {...block, children: items};
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
case 'heading':
|
|
333
|
+
case 'paragraph':
|
|
334
|
+
case 'math':
|
|
335
|
+
case 'table':
|
|
336
|
+
case 'thematicBreak':
|
|
337
|
+
case 'image':
|
|
338
|
+
case 'extension':
|
|
339
|
+
replacement = block;
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
if (next === undefined && replacement !== block) {
|
|
343
|
+
next = blocks.slice(0, index);
|
|
344
|
+
}
|
|
345
|
+
next?.push(replacement);
|
|
346
|
+
}
|
|
347
|
+
return next ?? blocks;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export function createMarkdownFenceTransform<
|
|
351
|
+
const Languages extends readonly [string, ...string[]],
|
|
352
|
+
const Node extends MarkdownExtensionNode<
|
|
353
|
+
string,
|
|
354
|
+
string,
|
|
355
|
+
MarkdownPluginData,
|
|
356
|
+
'block'
|
|
357
|
+
>,
|
|
358
|
+
>(
|
|
359
|
+
options: MarkdownFenceTransformOptions<Languages, Node>,
|
|
360
|
+
): MarkdownTransform<Node> {
|
|
361
|
+
if (
|
|
362
|
+
!Array.isArray(options.languages) ||
|
|
363
|
+
options.languages.length === 0 ||
|
|
364
|
+
options.languages.some(
|
|
365
|
+
language => typeof language !== 'string' || language.trim() === '',
|
|
366
|
+
)
|
|
367
|
+
) {
|
|
368
|
+
throw new TypeError('Markdown fence languages must be non-empty strings');
|
|
369
|
+
}
|
|
370
|
+
if (new Set(options.languages).size !== options.languages.length) {
|
|
371
|
+
throw new TypeError('Markdown fence languages must be unique');
|
|
372
|
+
}
|
|
373
|
+
if (typeof options.createNode !== 'function') {
|
|
374
|
+
throw new TypeError('Markdown fence createNode must be a function');
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
const declaredLanguages = Object.freeze([...options.languages]);
|
|
378
|
+
const languages = new Set<string>(declaredLanguages);
|
|
379
|
+
const sourceNeedles = Object.freeze(
|
|
380
|
+
declaredLanguages.flatMap(language => [
|
|
381
|
+
`\`\`\`${language}`,
|
|
382
|
+
`~~~${language}`,
|
|
383
|
+
]),
|
|
384
|
+
);
|
|
385
|
+
const createNode = options.createNode as (
|
|
386
|
+
context: MarkdownFenceContext<string>,
|
|
387
|
+
) =>
|
|
388
|
+
| MarkdownFenceNode<
|
|
389
|
+
MarkdownExtensionNode<string, string, MarkdownPluginData, 'block'>
|
|
390
|
+
>
|
|
391
|
+
| null
|
|
392
|
+
| undefined;
|
|
393
|
+
const transform: MarkdownTransform<Node> = (
|
|
394
|
+
root,
|
|
395
|
+
context: MarkdownTransformContext,
|
|
396
|
+
) => {
|
|
397
|
+
const ownership = getMarkdownHelperOwnership(context);
|
|
398
|
+
if (ownership == null) {
|
|
399
|
+
throw new TypeError(
|
|
400
|
+
'Markdown fence transforms must run through createMarkdownPlugin',
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
const children = transformBlocks(
|
|
404
|
+
root.children,
|
|
405
|
+
languages,
|
|
406
|
+
ownership.pluginName,
|
|
407
|
+
ownership.hasRenderer,
|
|
408
|
+
createNode,
|
|
409
|
+
context.report,
|
|
410
|
+
);
|
|
411
|
+
return children === root.children ? root : {...root, children};
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
// Every node this helper inserts is validated above against the same
|
|
415
|
+
// rules Core applies to plugin-authored output — owned plugin name,
|
|
416
|
+
// registered renderer, representable frozen data, no authored provenance
|
|
417
|
+
// — and nothing else in the tree is touched. Core may therefore skip
|
|
418
|
+
// revalidating the whole document after it runs.
|
|
419
|
+
return markMarkdownTransformTrusted(
|
|
420
|
+
markMarkdownTransformClaim(transform, source =>
|
|
421
|
+
sourceNeedles.some(needle => source.includes(needle)),
|
|
422
|
+
) as MarkdownTransform<never>,
|
|
423
|
+
);
|
|
424
|
+
}
|