@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
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useScrollableArea.ts
|
|
7
|
-
* @input Logical scroll intent, keyboard
|
|
8
|
-
* @output Safe prop getters and stable per-axis effective scroll state
|
|
7
|
+
* @input Logical scroll intent, focus-time keyboard delegation, caller-owned viewport/content props
|
|
8
|
+
* @output Safe prop getters, native keyboard entry, and stable per-axis effective scroll state
|
|
9
9
|
* @position Canonical behavior core for ScrollableArea and structure-owning adopters
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update:
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
} from 'react';
|
|
27
27
|
import * as stylex from '@stylexjs/stylex';
|
|
28
28
|
import type {BaseProps} from '../BaseProps';
|
|
29
|
+
import {attachScrollKeyboardDelegation} from './scrollKeyboardDelegation';
|
|
29
30
|
import {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';
|
|
30
31
|
import {mergeProps} from '../utils/mergeProps';
|
|
31
32
|
import {mergeRefs} from '../utils/mergeRefs';
|
|
@@ -48,7 +49,12 @@ export type ScrollStickyContainment = 'whenScrollable' | 'always';
|
|
|
48
49
|
|
|
49
50
|
export type ScrollKeyboardAccess =
|
|
50
51
|
| {owner: 'content'}
|
|
51
|
-
| {owner: 'viewport'; label: string; role?: 'group' | 'region'}
|
|
52
|
+
| {owner: 'viewport'; label: string; role?: 'group' | 'region'}
|
|
53
|
+
| {
|
|
54
|
+
owner: 'contentOrViewport';
|
|
55
|
+
label: string;
|
|
56
|
+
role?: 'group' | 'region';
|
|
57
|
+
};
|
|
52
58
|
|
|
53
59
|
export interface ScrollAxisState {
|
|
54
60
|
isScrollable: boolean;
|
|
@@ -285,6 +291,8 @@ export function useScrollableArea({
|
|
|
285
291
|
content.addEventListener('transitionend', scheduleMeasure);
|
|
286
292
|
content.addEventListener('animationend', scheduleMeasure);
|
|
287
293
|
|
|
294
|
+
// Geometry invalidation is independent of keyboard eligibility. The latter
|
|
295
|
+
// is inspected only on native keyboard entry, never by these observers.
|
|
288
296
|
const mutationObserver =
|
|
289
297
|
typeof MutationObserver === 'undefined'
|
|
290
298
|
? null
|
|
@@ -346,6 +354,20 @@ export function useScrollableArea({
|
|
|
346
354
|
[axis, measured],
|
|
347
355
|
);
|
|
348
356
|
|
|
357
|
+
const hasEffectiveAxis =
|
|
358
|
+
state.inline.isScrollable || state.block.isScrollable;
|
|
359
|
+
useIsomorphicLayoutEffect(() => {
|
|
360
|
+
if (
|
|
361
|
+
keyboardAccess.owner !== 'contentOrViewport' ||
|
|
362
|
+
!hasEffectiveAxis ||
|
|
363
|
+
viewport == null ||
|
|
364
|
+
content == null
|
|
365
|
+
) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
return attachScrollKeyboardDelegation(viewport, content);
|
|
369
|
+
}, [content, hasEffectiveAxis, keyboardAccess.owner, viewport]);
|
|
370
|
+
|
|
349
371
|
const getViewportProps = useCallback(
|
|
350
372
|
<E extends HTMLElement>(
|
|
351
373
|
props: ScrollableElementProps<E> = {},
|
|
@@ -385,8 +407,9 @@ export function useScrollableArea({
|
|
|
385
407
|
),
|
|
386
408
|
),
|
|
387
409
|
) as ScrollableElementProps<E>;
|
|
410
|
+
const viewportIsKeyboardOwner = keyboardAccess.owner !== 'content';
|
|
388
411
|
const keepsProgrammaticFocus =
|
|
389
|
-
!hasEffectiveAxis &&
|
|
412
|
+
(!viewportIsKeyboardOwner || !hasEffectiveAxis) &&
|
|
390
413
|
viewport != null &&
|
|
391
414
|
typeof document !== 'undefined' &&
|
|
392
415
|
document.activeElement === viewport;
|
|
@@ -409,15 +432,16 @@ export function useScrollableArea({
|
|
|
409
432
|
}
|
|
410
433
|
|
|
411
434
|
const keyboardProps =
|
|
412
|
-
keyboardAccess.owner
|
|
435
|
+
keyboardAccess.owner !== 'content'
|
|
413
436
|
? {
|
|
414
437
|
role: keyboardAccess.role ?? 'group',
|
|
415
438
|
'aria-label': keyboardAccess.label,
|
|
416
|
-
tabIndex:
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
439
|
+
tabIndex:
|
|
440
|
+
viewportIsKeyboardOwner && hasEffectiveAxis
|
|
441
|
+
? 0
|
|
442
|
+
: keepsProgrammaticFocus
|
|
443
|
+
? -1
|
|
444
|
+
: undefined,
|
|
421
445
|
}
|
|
422
446
|
: {};
|
|
423
447
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file inputFontFloor.test.ts
|
|
5
|
+
* @input Uses node:fs and node:path to read the text-control sources
|
|
6
|
+
* @output Invariants for the 16px input floor shared by every text control
|
|
7
|
+
* @position Family-wide source test, in the source-reading style of
|
|
8
|
+
* reset.test.ts. jsdom's CSSOM drops declarations nested inside @supports,
|
|
9
|
+
* so the iOS branch cannot be asserted against injected rules — the
|
|
10
|
+
* runtime half (no bare coarse-pointer floor) lives in TextInput.test.tsx.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {readFileSync, readdirSync} from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
|
|
16
|
+
import {describe, expect, it} from 'vitest';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Every control that floors its text to 16px. iOS Safari zooms the page when
|
|
20
|
+
* a focused control renders under 16px; no other coarse-pointer browser does.
|
|
21
|
+
* `-webkit-touch-callout` is implemented by iOS WebKit alone, so each floor
|
|
22
|
+
* nests `@supports (-webkit-touch-callout: none)` inside the coarse-pointer
|
|
23
|
+
* query: iPhones and iPads keep the zoom guard, while Android and touch
|
|
24
|
+
* laptops keep the theme's own type scale instead of an inflated 16px.
|
|
25
|
+
*/
|
|
26
|
+
const FLOORED_CONTROLS = [
|
|
27
|
+
'Chat/ChatComposerInput.tsx',
|
|
28
|
+
'CommandPalette/CommandPaletteInput.tsx',
|
|
29
|
+
'ComplexSelector/ComplexSelector.tsx',
|
|
30
|
+
'DateInput/DateInput.tsx',
|
|
31
|
+
'DateInput/NativeDateField.tsx',
|
|
32
|
+
'DateInput/TouchDateField.tsx',
|
|
33
|
+
'DateRangeInput/DateRangeInput.tsx',
|
|
34
|
+
'DateTimeInput/DateTimeInput.tsx',
|
|
35
|
+
'DateTimeInput/TouchDateTimeField.tsx',
|
|
36
|
+
'DateTimeInput/nativePickerSegmentStyles.ts',
|
|
37
|
+
'Field/PanelSearchInput.tsx',
|
|
38
|
+
'FileInput/FileInput.tsx',
|
|
39
|
+
'NumberInput/NumberInput.tsx',
|
|
40
|
+
'Selector/Selector.tsx',
|
|
41
|
+
'TextArea/TextArea.tsx',
|
|
42
|
+
'TextInput/TextInput.tsx',
|
|
43
|
+
'TimeInput/TimeInput.tsx',
|
|
44
|
+
'Typeahead/BaseTypeahead.tsx',
|
|
45
|
+
// The rich-text package carries the same floor; its path is relative to
|
|
46
|
+
// packages/core/src.
|
|
47
|
+
'../../richtext/src/RichTextEditor.tsx',
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
/** A font floor applied to every coarse pointer, iOS or not. */
|
|
51
|
+
const BARE_COARSE_FLOOR = `'@media (pointer: coarse)': \`max(1rem`;
|
|
52
|
+
|
|
53
|
+
/** The same floor, gated to iOS WebKit inside the coarse-pointer query. */
|
|
54
|
+
const IOS_GATED_FLOOR =
|
|
55
|
+
/'@media \(pointer: coarse\)': \{\s*'@supports \(-webkit-touch-callout: none\)': `max\(1rem, \$\{typeScaleVars\['--text-(?:body|label)-size'\]\}\)`/;
|
|
56
|
+
|
|
57
|
+
/** Collect every non-test component source under `dir`, recursively. */
|
|
58
|
+
function componentSources(dir: string): string[] {
|
|
59
|
+
const SOURCE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx'];
|
|
60
|
+
const out: string[] = [];
|
|
61
|
+
for (const entry of readdirSync(dir, {withFileTypes: true})) {
|
|
62
|
+
const full = path.join(dir, entry.name);
|
|
63
|
+
if (entry.isDirectory()) {
|
|
64
|
+
out.push(...componentSources(full));
|
|
65
|
+
} else if (
|
|
66
|
+
SOURCE_EXTENSIONS.some(ext => entry.name.endsWith(ext)) &&
|
|
67
|
+
!entry.name.endsWith('.test.ts') &&
|
|
68
|
+
!entry.name.endsWith('.test.tsx') &&
|
|
69
|
+
!entry.name.endsWith('.doc.mjs')
|
|
70
|
+
) {
|
|
71
|
+
out.push(full);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
describe('the 16px input floor', () => {
|
|
78
|
+
it('gates every floored text control to iOS alone', () => {
|
|
79
|
+
// Guards the loop below against the list silently emptying out.
|
|
80
|
+
expect(FLOORED_CONTROLS.length).toBeGreaterThanOrEqual(18);
|
|
81
|
+
for (const file of FLOORED_CONTROLS) {
|
|
82
|
+
const source = readFileSync(path.resolve(__dirname, file), 'utf8');
|
|
83
|
+
expect(source, file).toMatch(IOS_GATED_FLOOR);
|
|
84
|
+
expect(source, file).not.toContain(BARE_COARSE_FLOOR);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('leaves no bare coarse-pointer font floor anywhere in core or richtext', () => {
|
|
89
|
+
// Catches a new (or renamed) control reintroducing the ungated floor,
|
|
90
|
+
// wherever it lands — the list above only knows the current family. The
|
|
91
|
+
// rich-text package carries the same floor, so it is scanned too.
|
|
92
|
+
const scanRoots = [
|
|
93
|
+
__dirname,
|
|
94
|
+
path.resolve(__dirname, '../../richtext/src'),
|
|
95
|
+
];
|
|
96
|
+
const offenders = scanRoots
|
|
97
|
+
.flatMap(root => componentSources(root))
|
|
98
|
+
.map(file => ({
|
|
99
|
+
file,
|
|
100
|
+
source: readFileSync(file, 'utf8'),
|
|
101
|
+
}))
|
|
102
|
+
.filter(({source}) => source.includes(BARE_COARSE_FLOOR))
|
|
103
|
+
.map(({file}) => path.relative(__dirname, file));
|
|
104
|
+
expect(offenders).toEqual([]);
|
|
105
|
+
});
|
|
106
|
+
});
|
package/src/tailwind-theme.css
CHANGED
|
@@ -182,12 +182,6 @@
|
|
|
182
182
|
--text-4xl: var(--font-size-4xl);
|
|
183
183
|
--text-5xl: var(--font-size-5xl);
|
|
184
184
|
|
|
185
|
-
/* --- Font weights --- */
|
|
186
|
-
--font-weight-normal: var(--font-weight-normal);
|
|
187
|
-
--font-weight-medium: var(--font-weight-medium);
|
|
188
|
-
--font-weight-semibold: var(--font-weight-semibold);
|
|
189
|
-
--font-weight-bold: var(--font-weight-bold);
|
|
190
|
-
|
|
191
185
|
/* =========================================================================
|
|
192
186
|
* Border radius
|
|
193
187
|
*
|
|
@@ -276,6 +276,36 @@ describe('generateThemeRules', () => {
|
|
|
276
276
|
expect(rules.some(r => r.includes(':where(hr)'))).toBe(true);
|
|
277
277
|
});
|
|
278
278
|
|
|
279
|
+
it('applies the theme body font to the scope root', () => {
|
|
280
|
+
// Components styled with `font-family: inherit` (SideNav items, Buttons)
|
|
281
|
+
// resolve against this; without it they fall back to the browser default
|
|
282
|
+
// serif since nothing else sets a page font.
|
|
283
|
+
const fontTheme = defineTheme({
|
|
284
|
+
name: 'with-body-font',
|
|
285
|
+
typography: {body: {family: 'Figtree', fallbacks: 'sans-serif'}},
|
|
286
|
+
tokens: {},
|
|
287
|
+
components: {},
|
|
288
|
+
});
|
|
289
|
+
const fontRules = generateThemeRules(fontTheme);
|
|
290
|
+
const fontRule = fontRules.find(
|
|
291
|
+
r =>
|
|
292
|
+
r.includes(':scope') &&
|
|
293
|
+
r.includes('font-family: var(--font-family-body)'),
|
|
294
|
+
);
|
|
295
|
+
expect(fontRule).toBeDefined();
|
|
296
|
+
expect(fontRule).toBe(' :scope {\n font-family: var(--font-family-body);\n }');
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
it('emits no scope font rule when the theme declares no body font', () => {
|
|
300
|
+
// A bare theme contributes no scope rules of its own.
|
|
301
|
+
const fontRule = rules.find(
|
|
302
|
+
r =>
|
|
303
|
+
r.includes(':scope') &&
|
|
304
|
+
r.includes('font-family: var(--font-family-body)'),
|
|
305
|
+
);
|
|
306
|
+
expect(fontRule).toBeUndefined();
|
|
307
|
+
});
|
|
308
|
+
|
|
279
309
|
// --- Prop-level color overrides ---
|
|
280
310
|
|
|
281
311
|
it('includes color prop overrides for text and heading', () => {
|
|
@@ -414,6 +414,16 @@ export function generateThemeRules(theme: ThemeRuleSource): string[] {
|
|
|
414
414
|
parts.push(` :scope {\n${declarations}\n }`);
|
|
415
415
|
}
|
|
416
416
|
|
|
417
|
+
// 1b. Base font — apply the theme's declared body font to the scope root.
|
|
418
|
+
// Components styled with `font-family: inherit` (SideNav items, Buttons)
|
|
419
|
+
// otherwise resolve against the browser default serif, since nothing else
|
|
420
|
+
// sets a page font. `font-family` inherits, so one rule on :scope covers
|
|
421
|
+
// the tree. Only emitted when the theme declares a body font, so a bare
|
|
422
|
+
// theme still contributes no scope rules of its own.
|
|
423
|
+
if (tokens['--font-family-body']) {
|
|
424
|
+
parts.push(` :scope {\n font-family: var(--font-family-body);\n }`);
|
|
425
|
+
}
|
|
426
|
+
|
|
417
427
|
// 2. Component overrides: stable .astryx-* target classes combined with
|
|
418
428
|
// reflected data-* selectors for visual props and runtime states.
|
|
419
429
|
if (theme.components) {
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
* @output Exports reusable background-color and background-image state styles
|
|
11
11
|
* @position Internal styling utility for interactive core surfaces
|
|
12
12
|
*
|
|
13
|
+
* Every surface that paints a press composes one of these (or carries its own
|
|
14
|
+
* `:active` rule), so a change to how the system answers a press is made here
|
|
15
|
+
* once. `pressedBackgroundColor` is the press without the hover, for controls
|
|
16
|
+
* whose hover is a colour or nothing.
|
|
17
|
+
*
|
|
13
18
|
* Keep the enabled guard outside the individual states. StyleX assigns an
|
|
14
19
|
* extra priority bucket (and generated selector specificity) to media-nested
|
|
15
20
|
* rules. Repeating `:active` inside the hover-capable branch gives hover and
|
|
@@ -71,4 +76,19 @@ export const interactionOverlayStyles = stylex.create({
|
|
|
71
76
|
},
|
|
72
77
|
},
|
|
73
78
|
},
|
|
79
|
+
/**
|
|
80
|
+
* The pressed arm alone, for a control whose hover answer is its own — a
|
|
81
|
+
* text link changes colour, a disclosure row has none — so a press paints
|
|
82
|
+
* the system's pressed overlay without adding a hover surface the control
|
|
83
|
+
* never had. Same enabled guard as the paired states above.
|
|
84
|
+
*/
|
|
85
|
+
pressedBackgroundColor: {
|
|
86
|
+
backgroundColor: {
|
|
87
|
+
default: null,
|
|
88
|
+
[ENABLED]: {
|
|
89
|
+
default: null,
|
|
90
|
+
':active': colorVars['--color-overlay-pressed'],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
74
94
|
});
|