@astryxdesign/core 0.6.2 → 0.6.3-canary.0788c49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +13 -28
- 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/ChatLayout.d.ts +19 -0
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +19 -0
- package/dist/Chat/ChatLayoutScrollButton.d.ts.map +1 -1
- package/dist/Chat/ChatLayoutScrollButton.js +44 -34
- package/dist/Chat/ChatMessageBubble.d.ts +2 -0
- package/dist/Chat/ChatMessageBubble.d.ts.map +1 -1
- package/dist/Chat/ChatMessageBubble.js +5 -3
- package/dist/Chat/ChatMessageList.d.ts +2 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +4 -3
- package/dist/Chat/ChatMessageMetadata.d.ts +5 -4
- package/dist/Chat/ChatMessageMetadata.d.ts.map +1 -1
- package/dist/Chat/ChatMessageMetadata.js +12 -9
- package/dist/Chat/ChatSendButton.d.ts +2 -1
- package/dist/Chat/ChatSendButton.d.ts.map +1 -1
- package/dist/Chat/ChatSendButton.js +6 -4
- 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/Citation/Citation.d.ts +1 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +3 -2
- package/dist/CodeBlock/highlightRanges.d.ts.map +1 -1
- package/dist/CodeBlock/highlightRanges.js +14 -3
- 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 +13 -4
- 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/Icon/Icon.d.ts +6 -31
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +8 -71
- package/dist/Icon/IconDefaultSizeContext.d.ts +4 -0
- package/dist/Icon/IconDefaultSizeContext.d.ts.map +1 -0
- package/dist/Icon/IconDefaultSizeContext.js +18 -0
- package/dist/Icon/IconSize.stylex.d.ts +65 -0
- package/dist/Icon/IconSize.stylex.d.ts.map +1 -0
- package/dist/Icon/IconSize.stylex.js +75 -0
- package/dist/Item/Item.d.ts +1 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +4 -3
- 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/Link/useLinkComponent.d.ts +5 -15
- package/dist/Link/useLinkComponent.d.ts.map +1 -1
- package/dist/Link/useLinkComponent.js +34 -51
- package/dist/List/List.d.ts +19 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +9 -2
- package/dist/List/ListContext.d.ts +1 -0
- package/dist/List/ListContext.d.ts.map +1 -1
- package/dist/List/ListContext.js +2 -1
- package/dist/List/ListItem.d.ts +1 -1
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +9 -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 +726 -177
- 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 +17 -0
- package/dist/Markdown/plugins/index.d.ts.map +1 -0
- package/dist/Markdown/plugins/index.js +14 -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/softBreaks.d.ts +3 -0
- package/dist/Markdown/plugins/softBreaks.d.ts.map +1 -0
- package/dist/Markdown/plugins/softBreaks.js +172 -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 +6 -0
- package/dist/Markdown/url.d.ts.map +1 -0
- package/dist/Markdown/url.js +31 -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/MetadataList/MetadataList.js +3 -3
- 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/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +5 -0
- 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/ScrollableArea/ScrollableArea.d.ts +1 -0
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
- package/dist/ScrollableArea/ScrollableArea.js +1 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +1 -0
- 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 +16 -7
- 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/Timer/Timer.d.ts +49 -0
- package/dist/Timer/Timer.d.ts.map +1 -0
- package/dist/Timer/Timer.js +158 -0
- package/dist/Timer/index.d.ts +9 -0
- package/dist/Timer/index.d.ts.map +1 -0
- package/dist/Timer/index.js +10 -0
- 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/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +3 -2
- 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 +27 -11
- 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/useClickableContainer.d.ts +10 -1
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +15 -4
- 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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/theme/declarationBoundary.d.ts +17 -0
- package/dist/theme/declarationBoundary.d.ts.map +1 -0
- package/dist/theme/declarationBoundary.js +343 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +4 -0
- package/dist/theme/generateThemeRules.d.ts +13 -7
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +140 -34
- 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/dist/utils/safeUrl.d.ts +11 -0
- package/dist/utils/safeUrl.d.ts.map +1 -0
- package/dist/utils/safeUrl.js +78 -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 +24 -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/Button.doc.mjs +5 -5
- package/src/Button/Button.tsx +15 -13
- 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/ChatLayout.doc.mjs +12 -4
- package/src/Chat/ChatLayout.spec.md +271 -0
- package/src/Chat/ChatLayout.test.tsx +28 -0
- package/src/Chat/ChatLayout.tsx +19 -0
- package/src/Chat/ChatLayoutScrollButton.spec.md +338 -0
- package/src/Chat/ChatLayoutScrollButton.test.tsx +31 -0
- package/src/Chat/ChatLayoutScrollButton.tsx +31 -14
- package/src/Chat/ChatMessageBubble.doc.mjs +28 -15
- package/src/Chat/ChatMessageBubble.spec.md +263 -0
- package/src/Chat/ChatMessageBubble.test.tsx +93 -0
- package/src/Chat/ChatMessageBubble.tsx +8 -3
- package/src/Chat/ChatMessageList.spec.md +222 -0
- package/src/Chat/ChatMessageList.test.tsx +64 -2
- package/src/Chat/ChatMessageList.tsx +4 -3
- package/src/Chat/ChatMessageMetadata.doc.mjs +57 -3
- package/src/Chat/ChatMessageMetadata.spec.md +220 -0
- package/src/Chat/ChatMessageMetadata.test.tsx +34 -0
- package/src/Chat/ChatMessageMetadata.tsx +13 -13
- package/src/Chat/ChatSendButton.doc.mjs +32 -0
- package/src/Chat/ChatSendButton.spec.md +227 -0
- package/src/Chat/ChatSendButton.test.tsx +128 -8
- package/src/Chat/ChatSendButton.tsx +6 -4
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +514 -0
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +740 -0
- package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +457 -0
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +91 -0
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +91 -0
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +456 -0
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +413 -0
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +1522 -0
- 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/Citation/Citation.doc.mjs +2 -2
- package/src/Citation/Citation.test.tsx +17 -0
- package/src/Citation/Citation.tsx +4 -2
- package/src/ClickableCard/ClickableCard.doc.mjs +2 -2
- package/src/ClickableCard/ClickableCard.test.tsx +102 -5
- package/src/CodeBlock/highlightRanges.test.ts +143 -1
- package/src/CodeBlock/highlightRanges.ts +15 -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/Dialog.doc.mjs +2 -0
- package/src/Dialog/DialogHeader.doc.mjs +22 -0
- package/src/Dialog/DialogHeader.test.tsx +167 -3
- package/src/Dialog/DialogHeader.tsx +37 -6
- package/src/Dialog/modules/DialogHeader.spec.md +101 -42
- package/src/DropdownMenu/DropdownMenu.test.tsx +5 -2
- 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/Icon/Icon.doc.mjs +7 -5
- package/src/Icon/Icon.spec.md +81 -40
- package/src/Icon/Icon.test.tsx +6 -3
- package/src/Icon/Icon.tsx +20 -68
- package/src/Icon/IconDefaultSizeContext.ts +23 -0
- package/src/Icon/IconSize.stylex.ts +70 -0
- package/src/IconButton/IconButton.doc.mjs +3 -3
- package/src/IconButton/IconButton.test.tsx +40 -0
- package/src/Item/Item.doc.mjs +6 -2
- package/src/Item/Item.tsx +9 -3
- 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 +17 -4
- package/src/Link/Link.test.tsx +24 -0
- package/src/Link/Link.tsx +5 -0
- package/src/Link/LinkProvider.doc.mjs +2 -2
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +261 -0
- package/src/Link/useLinkComponent.test.tsx +333 -0
- package/src/Link/useLinkComponent.ts +29 -57
- package/src/List/List.doc.mjs +6 -0
- package/src/List/List.spec.md +200 -0
- package/src/List/List.test.tsx +117 -1
- package/src/List/List.tsx +22 -2
- package/src/List/ListContext.tsx +3 -1
- package/src/List/ListItem.doc.mjs +2 -2
- package/src/List/ListItem.source-build.test.mjs +41 -0
- package/src/List/ListItem.tsx +26 -2
- package/src/Markdown/Markdown.doc.mjs +300 -2
- 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 +130 -3
- package/src/Markdown/Markdown.renderBoundary.test.tsx +72 -0
- package/src/Markdown/Markdown.spec.md +210 -45
- package/src/Markdown/Markdown.test.tsx +87 -3
- 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 +43 -0
- package/src/Markdown/index.ts +37 -1
- package/src/Markdown/modules/remark.spec.md +269 -0
- package/src/Markdown/modules/softBreaks.spec.md +137 -0
- package/src/Markdown/parser/index.ts +64 -0
- package/src/Markdown/parser.public.test.ts +103 -0
- package/src/Markdown/parser.test.ts +38 -6
- package/src/Markdown/parser.ts +1221 -242
- package/src/Markdown/plugins/frontmatter.test.tsx +125 -0
- package/src/Markdown/plugins/frontmatter.ts +198 -0
- package/src/Markdown/plugins/index.ts +54 -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/softBreaks.test.tsx +172 -0
- package/src/Markdown/plugins/softBreaks.ts +169 -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 +36 -0
- package/src/Markdown/utils.ts +13 -1
- package/src/MetadataList/MetadataList.test.tsx +4 -2
- package/src/MetadataList/MetadataList.tsx +3 -3
- 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/PowerSearch/PowerSearchValueEditor.test.tsx +51 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +4 -0
- 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/ScrollableArea.tsx +1 -0
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +50 -22
- package/src/SegmentedControl/SegmentedControl.doc.mjs +2 -2
- package/src/SegmentedControl/SegmentedControl.test.tsx +61 -0
- package/src/SegmentedControl/SegmentedControl.tsx +2 -1
- package/src/SegmentedControl/SegmentedControlItem.tsx +6 -9
- package/src/Selector/Selector.doc.mjs +3 -3
- package/src/Selector/Selector.spec.md +51 -49
- package/src/Selector/Selector.test.tsx +61 -55
- package/src/Selector/Selector.tsx +34 -15
- 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.a11y.chromium.spec.ts +45 -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/Timer/Timer.doc.mjs +183 -0
- package/src/Timer/Timer.spec.md +215 -0
- package/src/Timer/Timer.test.tsx +302 -0
- package/src/Timer/Timer.tsx +258 -0
- package/src/Timer/index.ts +11 -0
- 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/Token/Token.doc.mjs +2 -2
- package/src/Tokenizer/Tokenizer.spec.md +142 -75
- package/src/TopNav/TopNavMenu.doc.mjs +2 -2
- package/src/TopNav/TopNavMenu.test.tsx +30 -0
- package/src/TopNav/TopNavMenu.tsx +7 -2
- 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/useClickableContainer.test.tsx +236 -0
- package/src/hooks/useClickableContainer.ts +20 -4
- 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/index.ts +3 -0
- package/src/inputFontFloor.test.ts +106 -0
- package/src/tailwind-theme.css +0 -6
- package/src/theme/Theme.test.tsx +32 -0
- package/src/theme/declarationBoundary.test.ts +126 -0
- package/src/theme/declarationBoundary.ts +347 -0
- package/src/theme/derivedVarRegistry.test.ts +7 -0
- package/src/theme/derivedVarRegistry.ts +1 -0
- package/src/theme/generateThemeRules.test.ts +526 -1
- package/src/theme/generateThemeRules.ts +228 -50
- package/src/theme/tokenValueCompat.test.ts +4 -1
- package/src/utils/interactionOverlay.stylex.ts +20 -0
- package/src/utils/safeUrl.test.ts +88 -0
- package/src/utils/safeUrl.ts +85 -0
|
@@ -100,10 +100,14 @@ const styles = stylex.create({
|
|
|
100
100
|
borderStyle: 'none',
|
|
101
101
|
padding: 0,
|
|
102
102
|
fontFamily: typographyVars['--font-family-body'],
|
|
103
|
-
// Below 16px iOS zooms the page when the field takes focus.
|
|
103
|
+
// Below 16px iOS zooms the page when the field takes focus. Only iOS
|
|
104
|
+
// WebKit implements -webkit-touch-callout, so the coarse-pointer floor is
|
|
105
|
+
// keyed to iOS alone.
|
|
104
106
|
fontSize: {
|
|
105
107
|
default: typeScaleVars['--text-body-size'],
|
|
106
|
-
'@media (pointer: coarse)':
|
|
108
|
+
'@media (pointer: coarse)': {
|
|
109
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
110
|
+
},
|
|
107
111
|
},
|
|
108
112
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
109
113
|
color: colorVars['--color-text-primary'],
|
|
@@ -112,11 +116,20 @@ const styles = stylex.create({
|
|
|
112
116
|
// A date control's intrinsic height comes from its inner edit fields, not
|
|
113
117
|
// from `line-height`, so it renders ~2px taller than a text input and its
|
|
114
118
|
// value sits off the shared baseline inside the same flex row. One line
|
|
115
|
-
// box is exactly what the text field occupies.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
// box is exactly what the text field occupies. The calc fallback mirrors
|
|
120
|
+
// the iOS-only floor above; browsers with `1lh` track it for free.
|
|
121
|
+
height: {
|
|
122
|
+
default: stylex.firstThatWorks(
|
|
123
|
+
'1lh',
|
|
124
|
+
`calc(${typeScaleVars['--text-body-size']} * ${typeScaleVars['--text-body-leading']})`,
|
|
125
|
+
),
|
|
126
|
+
'@media (pointer: coarse)': {
|
|
127
|
+
'@supports (-webkit-touch-callout: none)': stylex.firstThatWorks(
|
|
128
|
+
'1lh',
|
|
129
|
+
`calc(max(1rem, ${typeScaleVars['--text-body-size']}) * ${typeScaleVars['--text-body-leading']})`,
|
|
130
|
+
),
|
|
131
|
+
},
|
|
132
|
+
},
|
|
120
133
|
// iOS gives date controls their own button-like chrome, with inner
|
|
121
134
|
// spacing and a centred value that no reset of ours can reach.
|
|
122
135
|
WebkitAppearance: 'none',
|
|
@@ -187,9 +200,12 @@ const styles = stylex.create({
|
|
|
187
200
|
// covers — one line of that leading fills its height exactly, which puts
|
|
188
201
|
// the glyphs on the input's own baseline.
|
|
189
202
|
display: 'block',
|
|
203
|
+
// ...with the input's own iOS floor, so the two baselines stay shared.
|
|
190
204
|
fontSize: {
|
|
191
205
|
default: typeScaleVars['--text-body-size'],
|
|
192
|
-
'@media (pointer: coarse)':
|
|
206
|
+
'@media (pointer: coarse)': {
|
|
207
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
208
|
+
},
|
|
193
209
|
},
|
|
194
210
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
195
211
|
// A tap has to reach the control underneath — that is what raises the
|
|
@@ -194,10 +194,14 @@ const styles = stylex.create({
|
|
|
194
194
|
padding: 0,
|
|
195
195
|
fontFamily: typographyVars['--font-family-body'],
|
|
196
196
|
// Below 16px iOS zooms the page on focus. The field is focusable even
|
|
197
|
-
// though it is not typable, so it needs the same floor DateInput has
|
|
197
|
+
// though it is not typable, so it needs the same floor DateInput has —
|
|
198
|
+
// keyed to iOS alone, since only iOS WebKit implements
|
|
199
|
+
// -webkit-touch-callout.
|
|
198
200
|
fontSize: {
|
|
199
201
|
default: typeScaleVars['--text-body-size'],
|
|
200
|
-
'@media (pointer: coarse)':
|
|
202
|
+
'@media (pointer: coarse)': {
|
|
203
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
204
|
+
},
|
|
201
205
|
},
|
|
202
206
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
203
207
|
color: colorVars['--color-text-primary'],
|
|
@@ -92,9 +92,14 @@ const styles = stylex.create({
|
|
|
92
92
|
borderStyle: 'none',
|
|
93
93
|
padding: 0,
|
|
94
94
|
fontFamily: typographyVars['--font-family-body'],
|
|
95
|
+
// The 16px floor is iOS-only: iOS Safari zooms the page when a focused
|
|
96
|
+
// control sits under 16px, and only iOS WebKit implements
|
|
97
|
+
// -webkit-touch-callout to key the coarse-pointer floor to it.
|
|
95
98
|
fontSize: {
|
|
96
99
|
default: typeScaleVars['--text-body-size'],
|
|
97
|
-
'@media (pointer: coarse)':
|
|
100
|
+
'@media (pointer: coarse)': {
|
|
101
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
102
|
+
},
|
|
98
103
|
},
|
|
99
104
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
100
105
|
color: colorVars['--color-text-primary'],
|
|
@@ -173,9 +173,14 @@ const styles = stylex.create({
|
|
|
173
173
|
borderStyle: 'none',
|
|
174
174
|
padding: 0,
|
|
175
175
|
fontFamily: typographyVars['--font-family-body'],
|
|
176
|
+
// The 16px floor is iOS-only: iOS Safari zooms the page when a focused
|
|
177
|
+
// control sits under 16px, and only iOS WebKit implements
|
|
178
|
+
// -webkit-touch-callout to key the coarse-pointer floor to it.
|
|
176
179
|
fontSize: {
|
|
177
180
|
default: typeScaleVars['--text-body-size'],
|
|
178
|
-
'@media (pointer: coarse)':
|
|
181
|
+
'@media (pointer: coarse)': {
|
|
182
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
183
|
+
},
|
|
179
184
|
},
|
|
180
185
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
181
186
|
color: colorVars['--color-text-primary'],
|
|
@@ -182,9 +182,14 @@ const styles = stylex.create({
|
|
|
182
182
|
borderStyle: 'none',
|
|
183
183
|
padding: 0,
|
|
184
184
|
fontFamily: typographyVars['--font-family-body'],
|
|
185
|
+
// The 16px floor is iOS-only: iOS Safari zooms the page when a focused
|
|
186
|
+
// control sits under 16px, and only iOS WebKit implements
|
|
187
|
+
// -webkit-touch-callout to key the coarse-pointer floor to it.
|
|
185
188
|
fontSize: {
|
|
186
189
|
default: typeScaleVars['--text-body-size'],
|
|
187
|
-
'@media (pointer: coarse)':
|
|
190
|
+
'@media (pointer: coarse)': {
|
|
191
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
192
|
+
},
|
|
188
193
|
},
|
|
189
194
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
190
195
|
color: colorVars['--color-text-primary'],
|
|
@@ -42,21 +42,34 @@ export const nativePickerSegmentStyles = stylex.create({
|
|
|
42
42
|
borderStyle: 'none',
|
|
43
43
|
padding: 0,
|
|
44
44
|
fontFamily: typographyVars['--font-family-body'],
|
|
45
|
-
// Below 16px iOS zooms the page when the field takes focus.
|
|
45
|
+
// Below 16px iOS zooms the page when the field takes focus. Only iOS
|
|
46
|
+
// WebKit implements -webkit-touch-callout, so the coarse-pointer floor is
|
|
47
|
+
// keyed to iOS alone.
|
|
46
48
|
fontSize: {
|
|
47
49
|
default: typeScaleVars['--text-body-size'],
|
|
48
|
-
'@media (pointer: coarse)':
|
|
50
|
+
'@media (pointer: coarse)': {
|
|
51
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
52
|
+
},
|
|
49
53
|
},
|
|
50
54
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
51
55
|
color: colorVars['--color-text-primary'],
|
|
52
56
|
backgroundColor: 'transparent',
|
|
53
57
|
outline: 'none',
|
|
54
58
|
// Native date/time controls size from their internal edit fields. Pin the
|
|
55
|
-
// box to one text line so both segments stay aligned.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
// box to one text line so both segments stay aligned. The calc fallback
|
|
60
|
+
// mirrors the iOS-only floor above; browsers with `1lh` track it for free.
|
|
61
|
+
height: {
|
|
62
|
+
default: stylex.firstThatWorks(
|
|
63
|
+
'1lh',
|
|
64
|
+
`calc(${typeScaleVars['--text-body-size']} * ${typeScaleVars['--text-body-leading']})`,
|
|
65
|
+
),
|
|
66
|
+
'@media (pointer: coarse)': {
|
|
67
|
+
'@supports (-webkit-touch-callout: none)': stylex.firstThatWorks(
|
|
68
|
+
'1lh',
|
|
69
|
+
`calc(max(1rem, ${typeScaleVars['--text-body-size']}) * ${typeScaleVars['--text-body-leading']})`,
|
|
70
|
+
),
|
|
71
|
+
},
|
|
72
|
+
},
|
|
60
73
|
WebkitAppearance: 'none',
|
|
61
74
|
appearance: 'none',
|
|
62
75
|
// DateTimeInput renders its own calendar/clock affordances.
|
|
@@ -101,9 +114,12 @@ export const nativePickerSegmentStyles = stylex.create({
|
|
|
101
114
|
insetInlineEnd: 0,
|
|
102
115
|
insetBlock: 0,
|
|
103
116
|
display: 'block',
|
|
117
|
+
// The same iOS-only floor as the input it covers, shared baselines.
|
|
104
118
|
fontSize: {
|
|
105
119
|
default: typeScaleVars['--text-body-size'],
|
|
106
|
-
'@media (pointer: coarse)':
|
|
120
|
+
'@media (pointer: coarse)': {
|
|
121
|
+
'@supports (-webkit-touch-callout: none)': `max(1rem, ${typeScaleVars['--text-body-size']})`,
|
|
122
|
+
},
|
|
107
123
|
},
|
|
108
124
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
109
125
|
pointerEvents: 'none',
|
|
@@ -31,7 +31,9 @@ export const docs = {
|
|
|
31
31
|
targets: [
|
|
32
32
|
{className: 'astryx-dialog', visualProps: ['variant']},
|
|
33
33
|
{className: 'astryx-dialog-header'},
|
|
34
|
+
{className: 'astryx-dialog-header-start-content'},
|
|
34
35
|
{className: 'astryx-dialog-header-title-block'},
|
|
36
|
+
{className: 'astryx-dialog-header-end-content'},
|
|
35
37
|
{className: 'astryx-dialog-header-close-icon'},
|
|
36
38
|
],
|
|
37
39
|
vars: [
|
|
@@ -12,7 +12,9 @@ export const docs = {
|
|
|
12
12
|
description: 'Use DialogHeader to give a dialog a labelled title area and optional close control.',
|
|
13
13
|
anatomy: [
|
|
14
14
|
{name: 'Header row', required: true, description: 'Arranges the title block, optional start/end content, and close control.'},
|
|
15
|
+
{name: 'Start content', required: false, description: 'Wraps optional leading content.'},
|
|
15
16
|
{name: 'Title block', required: true, description: 'Groups the title and optional subtitle.'},
|
|
17
|
+
{name: 'End content', required: false, description: 'Groups optional trailing content with the optional close control.'},
|
|
16
18
|
{name: 'Close icon', required: false, description: 'Visual close glyph inside the close button.'},
|
|
17
19
|
],
|
|
18
20
|
},
|
|
@@ -66,6 +68,11 @@ export const docs = {
|
|
|
66
68
|
},
|
|
67
69
|
],
|
|
68
70
|
},
|
|
71
|
+
{
|
|
72
|
+
name: 'endContentEdgeCompensation',
|
|
73
|
+
type: "'inline' | 'block' | 'all'",
|
|
74
|
+
description: 'Selects compensation axes for the end-content slot. Omit to preserve automatic close-action compensation.',
|
|
75
|
+
},
|
|
69
76
|
{
|
|
70
77
|
name: 'hasDivider',
|
|
71
78
|
type: 'boolean',
|
|
@@ -83,7 +90,9 @@ export const docs = {
|
|
|
83
90
|
theming: {
|
|
84
91
|
targets: [
|
|
85
92
|
{className: 'astryx-dialog-header'},
|
|
93
|
+
{className: 'astryx-dialog-header-start-content'},
|
|
86
94
|
{className: 'astryx-dialog-header-title-block'},
|
|
95
|
+
{className: 'astryx-dialog-header-end-content'},
|
|
87
96
|
{className: 'astryx-dialog-header-close-icon'},
|
|
88
97
|
],
|
|
89
98
|
},
|
|
@@ -136,7 +145,9 @@ export const docsZh = {
|
|
|
136
145
|
description: '使用 DialogHeader 为对话框提供带标签的标题区和可选的关闭控件。',
|
|
137
146
|
anatomy: [
|
|
138
147
|
{name: 'Header row', required: true, description: '排列标题区、可选的首尾内容和关闭控件。'},
|
|
148
|
+
{name: 'Start content', required: false, description: '包装可选的首部内容。'},
|
|
139
149
|
{name: 'Title block', required: true, description: '组合标题和可选副标题。'},
|
|
150
|
+
{name: 'End content', required: false, description: '组合可选尾部内容和可选关闭控件。'},
|
|
140
151
|
{name: 'Close icon', required: false, description: '关闭按钮内的关闭图标。'},
|
|
141
152
|
],
|
|
142
153
|
},
|
|
@@ -166,6 +177,11 @@ export const docsZh = {
|
|
|
166
177
|
type: 'ReactNode',
|
|
167
178
|
description: '标题之后、关闭按钮之前的内容。',
|
|
168
179
|
},
|
|
180
|
+
{
|
|
181
|
+
name: 'endContentEdgeCompensation',
|
|
182
|
+
type: "'inline' | 'block' | 'all'",
|
|
183
|
+
description: '选择尾部内容插槽的补偿轴;省略时保留关闭操作的自动补偿。',
|
|
184
|
+
},
|
|
169
185
|
{
|
|
170
186
|
name: 'hasDivider',
|
|
171
187
|
type: 'boolean',
|
|
@@ -176,7 +192,9 @@ export const docsZh = {
|
|
|
176
192
|
theming: {
|
|
177
193
|
targets: [
|
|
178
194
|
{className: 'astryx-dialog-header'},
|
|
195
|
+
{className: 'astryx-dialog-header-start-content'},
|
|
179
196
|
{className: 'astryx-dialog-header-title-block'},
|
|
197
|
+
{className: 'astryx-dialog-header-end-content'},
|
|
180
198
|
{className: 'astryx-dialog-header-close-icon'},
|
|
181
199
|
],
|
|
182
200
|
},
|
|
@@ -191,7 +209,9 @@ export const docsDense = {
|
|
|
191
209
|
description: 'labelled dialog title area + optional close control',
|
|
192
210
|
anatomy: [
|
|
193
211
|
{name: 'Header row', required: true, description: 'arranges title block, optional start/end content, close control'},
|
|
212
|
+
{name: 'Start content', required: false, description: 'wraps optional leading content'},
|
|
194
213
|
{name: 'Title block', required: true, description: 'groups title + optional subtitle'},
|
|
214
|
+
{name: 'End content', required: false, description: 'groups optional trailing content + optional close control'},
|
|
195
215
|
{name: 'Close icon', required: false, description: 'close glyph inside close button'},
|
|
196
216
|
],
|
|
197
217
|
},
|
|
@@ -201,6 +221,8 @@ export const docsDense = {
|
|
|
201
221
|
onOpenChange: 'close button callback (omit=no button)',
|
|
202
222
|
startContent: 'content before title (e.g. back button)',
|
|
203
223
|
endContent: 'content after title, before close button',
|
|
224
|
+
endContentEdgeCompensation:
|
|
225
|
+
'end-content slot axes: inline | block | all; omit=automatic close-action compensation',
|
|
204
226
|
hasDivider: 'bottom border',
|
|
205
227
|
},
|
|
206
228
|
};
|
|
@@ -22,6 +22,17 @@ function generateThemeTestCSS(theme: Parameters<typeof generateThemeCSS>[0]) {
|
|
|
22
22
|
return [prose, component].filter(Boolean).join('\n\n');
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
function getEndSlot(): HTMLElement {
|
|
26
|
+
const child =
|
|
27
|
+
screen.queryByRole('button', {name: 'Action'}) ??
|
|
28
|
+
screen.getByRole('button', {name: /close/i});
|
|
29
|
+
const slot = child.parentElement;
|
|
30
|
+
if (slot == null) {
|
|
31
|
+
throw new Error('Expected DialogHeader end slot');
|
|
32
|
+
}
|
|
33
|
+
return slot;
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
describe('DialogHeader', () => {
|
|
26
37
|
it('renders the title', () => {
|
|
27
38
|
render(<DialogHeader title="My Dialog Title" />);
|
|
@@ -60,35 +71,184 @@ describe('DialogHeader', () => {
|
|
|
60
71
|
|
|
61
72
|
it('renders close button when onOpenChange is provided', () => {
|
|
62
73
|
render(<DialogHeader title="Title" onOpenChange={() => {}} />);
|
|
63
|
-
|
|
74
|
+
const closeButton = screen.getByRole('button', {name: /close/i});
|
|
75
|
+
|
|
76
|
+
expect(closeButton).toBeInTheDocument();
|
|
77
|
+
expect(closeButton.parentElement).toHaveClass(
|
|
78
|
+
'astryx-dialog-header-end-content',
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('preserves automatic end-slot compensation when the close action renders', () => {
|
|
83
|
+
const {rerender} = render(
|
|
84
|
+
<DialogHeader title="Title" onOpenChange={() => {}} />,
|
|
85
|
+
);
|
|
86
|
+
const automaticClassName = getEndSlot().className;
|
|
87
|
+
|
|
88
|
+
rerender(
|
|
89
|
+
<DialogHeader
|
|
90
|
+
title="Title"
|
|
91
|
+
endContent={<button type="button">Action</button>}
|
|
92
|
+
onOpenChange={() => {}}
|
|
93
|
+
/>,
|
|
94
|
+
);
|
|
95
|
+
expect(getEndSlot().className).toBe(automaticClassName);
|
|
96
|
+
|
|
97
|
+
rerender(
|
|
98
|
+
<DialogHeader
|
|
99
|
+
title="Title"
|
|
100
|
+
endContent={<button type="button">Action</button>}
|
|
101
|
+
/>,
|
|
102
|
+
);
|
|
103
|
+
expect(getEndSlot().className).not.toBe(automaticClassName);
|
|
64
104
|
});
|
|
65
105
|
|
|
66
|
-
it('
|
|
106
|
+
it('lets endContentEdgeCompensation select inline, block, or all', () => {
|
|
107
|
+
const {rerender} = render(
|
|
108
|
+
<DialogHeader
|
|
109
|
+
title="Title"
|
|
110
|
+
endContent={<button type="button">Action</button>}
|
|
111
|
+
/>,
|
|
112
|
+
);
|
|
113
|
+
const noCompensationClassName = getEndSlot().className;
|
|
114
|
+
|
|
115
|
+
rerender(
|
|
116
|
+
<DialogHeader
|
|
117
|
+
title="Title"
|
|
118
|
+
endContent={<button type="button">Action</button>}
|
|
119
|
+
endContentEdgeCompensation="inline"
|
|
120
|
+
/>,
|
|
121
|
+
);
|
|
122
|
+
const inlineClassName = getEndSlot().className;
|
|
123
|
+
|
|
124
|
+
rerender(
|
|
125
|
+
<DialogHeader
|
|
126
|
+
title="Title"
|
|
127
|
+
endContent={<button type="button">Action</button>}
|
|
128
|
+
endContentEdgeCompensation="block"
|
|
129
|
+
/>,
|
|
130
|
+
);
|
|
131
|
+
const blockClassName = getEndSlot().className;
|
|
132
|
+
|
|
133
|
+
rerender(
|
|
134
|
+
<DialogHeader
|
|
135
|
+
title="Title"
|
|
136
|
+
endContent={<button type="button">Action</button>}
|
|
137
|
+
endContentEdgeCompensation="all"
|
|
138
|
+
/>,
|
|
139
|
+
);
|
|
140
|
+
const allClassName = getEndSlot().className;
|
|
141
|
+
|
|
142
|
+
expect(inlineClassName).not.toBe(noCompensationClassName);
|
|
143
|
+
expect(blockClassName).not.toBe(noCompensationClassName);
|
|
144
|
+
expect(inlineClassName).not.toBe(blockClassName);
|
|
145
|
+
expect(allClassName).not.toBe(inlineClassName);
|
|
146
|
+
expect(allClassName).not.toBe(blockClassName);
|
|
147
|
+
|
|
148
|
+
rerender(
|
|
149
|
+
<DialogHeader
|
|
150
|
+
title="Title"
|
|
151
|
+
endContent={<button type="button">Action</button>}
|
|
152
|
+
onOpenChange={() => {}}
|
|
153
|
+
/>,
|
|
154
|
+
);
|
|
155
|
+
expect(getEndSlot().className).toBe(allClassName);
|
|
156
|
+
|
|
157
|
+
rerender(
|
|
158
|
+
<DialogHeader
|
|
159
|
+
title="Title"
|
|
160
|
+
endContent={<button type="button">Action</button>}
|
|
161
|
+
endContentEdgeCompensation="inline"
|
|
162
|
+
onOpenChange={() => {}}
|
|
163
|
+
/>,
|
|
164
|
+
);
|
|
165
|
+
expect(getEndSlot().className).toBe(inlineClassName);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('exposes theme targets for the header row, title block, both content slots, and close icon', () => {
|
|
67
169
|
const {container} = render(
|
|
68
170
|
<DialogHeader
|
|
69
171
|
title="Title"
|
|
70
172
|
subtitle="Subtitle"
|
|
173
|
+
startContent={<button type="button">Back</button>}
|
|
174
|
+
endContent={<button type="button">Custom Action</button>}
|
|
71
175
|
onOpenChange={() => {}}
|
|
72
176
|
/>,
|
|
73
177
|
);
|
|
74
178
|
|
|
75
179
|
expect(container.querySelector('.astryx-dialog-header')).not.toBeNull();
|
|
180
|
+
expect(
|
|
181
|
+
screen.getByRole('button', {name: 'Back'}).parentElement,
|
|
182
|
+
).toHaveClass('astryx-dialog-header-start-content');
|
|
76
183
|
expect(screen.getByRole('heading', {level: 2}).parentElement).toHaveClass(
|
|
77
184
|
'astryx-dialog-header-title-block',
|
|
78
185
|
);
|
|
79
186
|
|
|
187
|
+
const endContent = screen.getByRole('button', {
|
|
188
|
+
name: 'Custom Action',
|
|
189
|
+
}).parentElement;
|
|
190
|
+
expect(endContent).toHaveClass('astryx-dialog-header-end-content');
|
|
191
|
+
expect(screen.getByRole('button', {name: /close/i}).parentElement).toBe(
|
|
192
|
+
endContent,
|
|
193
|
+
);
|
|
194
|
+
|
|
80
195
|
const closeIcon = screen
|
|
81
196
|
.getByRole('button', {name: /close/i})
|
|
82
197
|
.querySelector('.astryx-dialog-header-close-icon');
|
|
83
198
|
expect(closeIcon).toHaveClass('astryx-icon');
|
|
84
199
|
});
|
|
85
200
|
|
|
86
|
-
it('
|
|
201
|
+
it('exposes the start-content target when startContent renders', () => {
|
|
202
|
+
const {container} = render(
|
|
203
|
+
<DialogHeader
|
|
204
|
+
title="Title"
|
|
205
|
+
startContent={<button type="button">Back</button>}
|
|
206
|
+
/>,
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
expect(
|
|
210
|
+
screen.getByRole('button', {name: 'Back'}).parentElement,
|
|
211
|
+
).toHaveClass('astryx-dialog-header-start-content');
|
|
212
|
+
expect(
|
|
213
|
+
container.querySelectorAll('.astryx-dialog-header-start-content'),
|
|
214
|
+
).toHaveLength(1);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('exposes the end-content target when endContent renders without a close button', () => {
|
|
218
|
+
const {container} = render(
|
|
219
|
+
<DialogHeader
|
|
220
|
+
title="Title"
|
|
221
|
+
endContent={<button type="button">Custom Action</button>}
|
|
222
|
+
/>,
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
expect(
|
|
226
|
+
screen.getByRole('button', {name: 'Custom Action'}).parentElement,
|
|
227
|
+
).toHaveClass('astryx-dialog-header-end-content');
|
|
228
|
+
expect(
|
|
229
|
+
container.querySelectorAll('.astryx-dialog-header-end-content'),
|
|
230
|
+
).toHaveLength(1);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it('omits the content-slot targets when their content does not render', () => {
|
|
234
|
+
const {container} = render(<DialogHeader title="Title" />);
|
|
235
|
+
|
|
236
|
+
expect(
|
|
237
|
+
container.querySelector('.astryx-dialog-header-start-content'),
|
|
238
|
+
).toBeNull();
|
|
239
|
+
expect(
|
|
240
|
+
container.querySelector('.astryx-dialog-header-end-content'),
|
|
241
|
+
).toBeNull();
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
it('lets themes set the internal gaps and close-icon size', () => {
|
|
87
245
|
const theme = defineTheme({
|
|
88
246
|
name: 'dialog-header-targets-test',
|
|
89
247
|
components: {
|
|
90
248
|
'dialog-header': {base: {gap: '8px'}},
|
|
249
|
+
'dialog-header-start-content': {base: {gap: '5px'}},
|
|
91
250
|
'dialog-header-title-block': {base: {gap: '4px'}},
|
|
251
|
+
'dialog-header-end-content': {base: {gap: '6px'}},
|
|
92
252
|
'dialog-header-close-icon': {
|
|
93
253
|
base: {width: '16px', height: '16px', fontSize: '16px'},
|
|
94
254
|
},
|
|
@@ -98,8 +258,12 @@ describe('DialogHeader', () => {
|
|
|
98
258
|
|
|
99
259
|
expect(css).toContain('.astryx-dialog-header {');
|
|
100
260
|
expect(css).toContain('gap: 8px');
|
|
261
|
+
expect(css).toContain('.astryx-dialog-header-start-content {');
|
|
262
|
+
expect(css).toContain('gap: 5px');
|
|
101
263
|
expect(css).toContain('.astryx-dialog-header-title-block {');
|
|
102
264
|
expect(css).toContain('gap: 4px');
|
|
265
|
+
expect(css).toContain('.astryx-dialog-header-end-content {');
|
|
266
|
+
expect(css).toContain('gap: 6px');
|
|
103
267
|
expect(css).toContain('.astryx-dialog-header-close-icon {');
|
|
104
268
|
expect(css).toContain('width: 16px');
|
|
105
269
|
expect(css).toContain('height: 16px');
|
|
@@ -37,9 +37,11 @@ const styles = stylex.create({
|
|
|
37
37
|
justifyContent: 'space-between',
|
|
38
38
|
gap: spacingVars['--spacing-3'],
|
|
39
39
|
},
|
|
40
|
-
// Compensate for the icon button's visual padding on the
|
|
41
|
-
|
|
40
|
+
// Compensate for the medium icon button's visual padding on the end slot.
|
|
41
|
+
endBlockEdgeCompensation: {
|
|
42
42
|
marginBlock: `calc(-1 * ${spacingVars['--spacing-2']})`,
|
|
43
|
+
},
|
|
44
|
+
endInlineEdgeCompensation: {
|
|
43
45
|
marginInlineEnd: `calc(-1 * ${spacingVars['--spacing-2']})`,
|
|
44
46
|
},
|
|
45
47
|
titleWrapper: {
|
|
@@ -98,6 +100,14 @@ export interface DialogHeaderProps extends BaseProps<HTMLDivElement> {
|
|
|
98
100
|
*/
|
|
99
101
|
endContent?: ReactNode;
|
|
100
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Overrides automatic end-slot compensation. When omitted, the slot keeps its
|
|
105
|
+
* existing behavior: rendering the close action applies block and logical
|
|
106
|
+
* inline-end compensation. Use `inline`, `block`, or `all` to select the axes
|
|
107
|
+
* explicitly.
|
|
108
|
+
*/
|
|
109
|
+
endContentEdgeCompensation?: 'inline' | 'block' | 'all';
|
|
110
|
+
|
|
101
111
|
/**
|
|
102
112
|
* Adds a themed border at the bottom edge.
|
|
103
113
|
* When false, spacing collapse is applied automatically for seamless visual flow.
|
|
@@ -134,6 +144,7 @@ export function DialogHeader({
|
|
|
134
144
|
onOpenChange,
|
|
135
145
|
startContent,
|
|
136
146
|
endContent,
|
|
147
|
+
endContentEdgeCompensation,
|
|
137
148
|
hasDivider,
|
|
138
149
|
xstyle,
|
|
139
150
|
className,
|
|
@@ -146,6 +157,16 @@ export function DialogHeader({
|
|
|
146
157
|
const dialogContext = useDialogContext();
|
|
147
158
|
const shouldAutoFocus = dialogContext?.isInline !== true;
|
|
148
159
|
const titleId = dialogContext?.titleId;
|
|
160
|
+
const shouldCompensateEndBlock =
|
|
161
|
+
endContentEdgeCompensation == null
|
|
162
|
+
? onOpenChange != null
|
|
163
|
+
: endContentEdgeCompensation === 'block' ||
|
|
164
|
+
endContentEdgeCompensation === 'all';
|
|
165
|
+
const shouldCompensateEndInline =
|
|
166
|
+
endContentEdgeCompensation == null
|
|
167
|
+
? onOpenChange != null
|
|
168
|
+
: endContentEdgeCompensation === 'inline' ||
|
|
169
|
+
endContentEdgeCompensation === 'all';
|
|
149
170
|
|
|
150
171
|
// Auto-focus the title when mounted for screen reader accessibility.
|
|
151
172
|
// Inline dialogs are documentation/showcase previews, so suppress focus to
|
|
@@ -172,7 +193,13 @@ export function DialogHeader({
|
|
|
172
193
|
stylex.props(styles.container),
|
|
173
194
|
)}>
|
|
174
195
|
{startContent && (
|
|
175
|
-
<div
|
|
196
|
+
<div
|
|
197
|
+
{...mergeProps(
|
|
198
|
+
themeProps('dialog-header-start-content'),
|
|
199
|
+
stylex.props(styles.actions),
|
|
200
|
+
)}>
|
|
201
|
+
{startContent}
|
|
202
|
+
</div>
|
|
176
203
|
)}
|
|
177
204
|
<div
|
|
178
205
|
{...mergeProps(
|
|
@@ -195,9 +222,13 @@ export function DialogHeader({
|
|
|
195
222
|
</div>
|
|
196
223
|
{(endContent || onOpenChange) && (
|
|
197
224
|
<div
|
|
198
|
-
{...
|
|
199
|
-
|
|
200
|
-
|
|
225
|
+
{...mergeProps(
|
|
226
|
+
themeProps('dialog-header-end-content'),
|
|
227
|
+
stylex.props(
|
|
228
|
+
styles.actions,
|
|
229
|
+
shouldCompensateEndBlock && styles.endBlockEdgeCompensation,
|
|
230
|
+
shouldCompensateEndInline && styles.endInlineEdgeCompensation,
|
|
231
|
+
),
|
|
201
232
|
)}>
|
|
202
233
|
{endContent}
|
|
203
234
|
{onOpenChange && (
|