@astryxdesign/core 0.1.2 → 0.1.3
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 +165 -0
- package/README.md +12 -12
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +11 -5
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +24 -5
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +2 -4
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +0 -1
- package/dist/Calendar/Calendar.d.ts +5 -4
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +82 -43
- package/dist/Calendar/hooks/index.d.ts +0 -2
- package/dist/Calendar/hooks/index.d.ts.map +1 -1
- package/dist/Calendar/hooks/index.js +1 -2
- package/dist/Calendar/index.d.ts +3 -3
- package/dist/Calendar/index.d.ts.map +1 -1
- package/dist/Calendar/index.js +1 -1
- package/dist/Calendar/styles.d.ts +3 -9
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +3 -11
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +17 -3
- package/dist/Center/Center.d.ts +11 -1
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +9 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +0 -1
- package/dist/Chat/ChatMessageList.d.ts +14 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +2 -0
- package/dist/Chat/useTriggerMenu.d.ts +8 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts +23 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +51 -9
- package/dist/CheckboxList/CheckboxList.d.ts +13 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +39 -9
- package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +0 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +9 -5
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +51 -37
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -5
- package/dist/ContextMenu/ContextMenu.d.ts +4 -5
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +93 -11
- package/dist/DateInput/DateInput.d.ts +23 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +167 -99
- package/dist/DateRangeInput/DateRangeInput.d.ts +23 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +42 -9
- package/dist/DateTimeInput/DateTimeInput.d.ts +35 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +78 -15
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts +1 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +42 -14
- package/dist/Field/Field.d.ts +19 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +4 -0
- package/dist/Field/FieldLabel.d.ts +21 -2
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +41 -26
- package/dist/FileInput/FileInput.d.ts +22 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +56 -10
- package/dist/Grid/Grid.d.ts +11 -1
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +32 -6
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +16 -6
- package/dist/InputGroup/InputGroupContext.d.ts +4 -0
- package/dist/InputGroup/InputGroupContext.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupContext.js +2 -2
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +3 -3
- package/dist/InputGroup/index.d.ts +1 -0
- package/dist/InputGroup/index.d.ts.map +1 -1
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +33 -1
- package/dist/Layer/layerAnimations.stylex.d.ts +4 -0
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +8 -4
- package/dist/Layer/useLayer.d.ts +10 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +64 -9
- package/dist/Layout/Layout.d.ts +4 -11
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +10 -11
- package/dist/Layout/LayoutFooter.d.ts +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.d.ts +2 -2
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.d.ts +2 -2
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.d.ts +51 -0
- package/dist/Layout/padding.stylex.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.js +63 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -2
- package/dist/Link/Link.d.ts +16 -1
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +18 -7
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -0
- package/dist/MoreMenu/MoreMenu.d.ts +1 -7
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +0 -2
- package/dist/MultiSelector/MultiSelector.d.ts +27 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +141 -42
- package/dist/MultiSelector/hooks.d.ts +12 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +14 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +34 -3
- package/dist/NumberInput/NumberInput.d.ts +23 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +62 -12
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +15 -1
- package/dist/Popover/Popover.d.ts +18 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +5 -2
- package/dist/Popover/usePopover.d.ts +38 -3
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +24 -9
- package/dist/PowerSearch/PowerSearch.d.ts +11 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +6 -1
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +3 -5
- package/dist/RadioList/RadioList.d.ts +20 -2
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +105 -9
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +78 -44
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +7 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +13 -2
- package/dist/Selector/Selector.d.ts +24 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +122 -43
- package/dist/Selector/hooks.d.ts +8 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +14 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +2 -0
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +1 -1
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +8 -2
- package/dist/Slider/Slider.d.ts +21 -0
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +36 -9
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +1 -1
- package/dist/Stack/Stack.d.ts +38 -23
- package/dist/Stack/Stack.d.ts.map +1 -1
- package/dist/Stack/Stack.js +25 -1
- package/dist/Stack/StackItem.d.ts +12 -23
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +8 -1
- package/dist/Switch/Switch.d.ts +23 -2
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +41 -11
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +6 -0
- package/dist/TabList/TabList.d.ts +16 -4
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +87 -10
- package/dist/TabList/TabListContext.d.ts +5 -0
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +5 -0
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +6 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +11 -8
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +10 -1
- package/dist/Table/TableCell.d.ts +8 -1
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +10 -10
- package/dist/Table/TableHeaderCell.d.ts +8 -1
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +16 -16
- package/dist/Table/index.d.ts +2 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +2 -2
- package/dist/Table/plugins/pagination/paginateData.d.ts +2 -1
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +8 -3
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +6 -1
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
- package/dist/Table/tableContextMenu.d.ts +33 -0
- package/dist/Table/tableContextMenu.d.ts.map +1 -0
- package/dist/Table/tableContextMenu.js +133 -0
- package/dist/Table/types.d.ts +66 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +22 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +41 -9
- package/dist/TextInput/TextInput.d.ts +23 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +55 -10
- package/dist/TimeInput/TimeInput.d.ts +23 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +147 -76
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +14 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +131 -3
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +26 -4
- package/dist/Toolbar/Toolbar.d.ts +3 -3
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +51 -7
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +56 -9
- package/dist/TopNav/TopNavHeading.d.ts +7 -1
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +8 -0
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +72 -2
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +51 -12
- package/dist/TreeList/treeListItem.markers.stylex.d.ts +16 -0
- package/dist/TreeList/treeListItem.markers.stylex.d.ts.map +1 -0
- package/dist/TreeList/treeListItem.markers.stylex.js +22 -0
- package/dist/Typeahead/BaseTypeahead.d.ts +13 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +69 -6
- package/dist/Typeahead/Typeahead.d.ts +26 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +65 -29
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +61 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/VisuallyHidden/VisuallyHidden.js +65 -0
- package/dist/VisuallyHidden/index.d.ts +11 -0
- package/dist/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/VisuallyHidden/index.js +13 -0
- package/dist/astryx.css +18 -0
- package/dist/astryx.umd.js +55 -55
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/focusableSelector.d.ts +22 -0
- package/dist/hooks/focusableSelector.d.ts.map +1 -0
- package/dist/hooks/focusableSelector.js +24 -0
- package/dist/hooks/index.d.ts +12 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +7 -2
- package/dist/hooks/useAnnounce.d.ts +40 -0
- package/dist/hooks/useAnnounce.d.ts.map +1 -0
- package/dist/hooks/useAnnounce.js +142 -0
- package/dist/hooks/useClickableContainer.d.ts +16 -1
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +16 -4
- package/dist/hooks/useEntryAnimation.d.ts.map +1 -1
- package/dist/hooks/useEntryAnimation.js +4 -4
- package/dist/hooks/useFocusTrap.d.ts +18 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +87 -3
- package/dist/hooks/useGridFocus.d.ts +88 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +261 -62
- package/dist/hooks/useKeyboardHint.d.ts +82 -0
- package/dist/hooks/useKeyboardHint.d.ts.map +1 -0
- package/dist/hooks/useKeyboardHint.js +220 -0
- package/dist/hooks/useListFocus.d.ts +78 -7
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +305 -52
- package/dist/hooks/useLongPress.d.ts +21 -0
- package/dist/hooks/useLongPress.d.ts.map +1 -0
- package/dist/hooks/useLongPress.js +89 -0
- package/dist/hooks/useTreeFocus.d.ts +157 -0
- package/dist/hooks/useTreeFocus.d.ts.map +1 -0
- package/dist/hooks/useTreeFocus.js +337 -0
- package/dist/hooks/useTypeahead.d.ts +63 -0
- package/dist/hooks/useTypeahead.d.ts.map +1 -0
- package/dist/hooks/useTypeahead.js +117 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/utils/dateTypes.d.ts +12 -0
- package/dist/utils/dateTypes.d.ts.map +1 -1
- package/dist/utils/dateTypes.js +41 -1
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/inputAria.d.ts +29 -0
- package/dist/utils/inputAria.d.ts.map +1 -0
- package/dist/utils/inputAria.js +30 -0
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -2
- package/docs.mjs +2 -2
- package/package.json +12 -8
- package/src/Avatar/Avatar.test.tsx +37 -0
- package/src/Avatar/Avatar.tsx +10 -5
- package/src/Breadcrumbs/BreadcrumbItem.tsx +25 -7
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -10
- package/src/Button/Button.tsx +3 -16
- package/src/ButtonGroup/ButtonGroup.test.tsx +9 -9
- package/src/ButtonGroup/ButtonGroup.tsx +0 -1
- package/src/Calendar/Calendar.doc.mjs +4 -4
- package/src/Calendar/Calendar.test.tsx +168 -30
- package/src/Calendar/Calendar.tsx +121 -66
- package/src/Calendar/hooks/index.ts +0 -6
- package/src/Calendar/index.ts +1 -3
- package/src/Calendar/styles.ts +4 -9
- package/src/Carousel/Carousel.doc.mjs +7 -1
- package/src/Carousel/Carousel.test.tsx +20 -0
- package/src/Carousel/Carousel.tsx +16 -1
- package/src/Center/Center.doc.mjs +12 -2
- package/src/Center/Center.tsx +28 -3
- package/src/Chat/ChatComposerInput.test.tsx +26 -7
- package/src/Chat/ChatComposerInput.tsx +0 -1
- package/src/Chat/ChatDictationButton.doc.mjs +1 -1
- package/src/Chat/ChatMessageList.doc.mjs +8 -0
- package/src/Chat/ChatMessageList.test.tsx +18 -0
- package/src/Chat/ChatMessageList.tsx +16 -0
- package/src/Chat/useTriggerMenu.tsx +22 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +10 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +172 -27
- package/src/CheckboxInput/CheckboxInput.tsx +78 -6
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
- package/src/CheckboxList/CheckboxList.test.tsx +192 -26
- package/src/CheckboxList/CheckboxList.tsx +56 -3
- package/src/CheckboxList/CheckboxListContext.tsx +7 -0
- package/src/CheckboxList/CheckboxListItem.tsx +0 -3
- package/src/Citation/Citation.doc.mjs +10 -0
- package/src/Citation/Citation.test.tsx +121 -0
- package/src/Citation/Citation.tsx +15 -3
- package/src/CodeBlock/CodeBlock.test.tsx +115 -0
- package/src/CodeBlock/CodeBlock.tsx +63 -33
- package/src/CommandPalette/CommandPalette.test.tsx +47 -1
- package/src/CommandPalette/CommandPalette.tsx +9 -21
- package/src/ContextMenu/ContextMenu.doc.mjs +4 -4
- package/src/ContextMenu/ContextMenu.test.tsx +155 -1
- package/src/ContextMenu/ContextMenu.tsx +113 -16
- package/src/DateInput/DateInput.doc.mjs +286 -56
- package/src/DateInput/DateInput.test.tsx +248 -2
- package/src/DateInput/DateInput.tsx +196 -100
- package/src/DateRangeInput/DateRangeInput.doc.mjs +251 -46
- package/src/DateRangeInput/DateRangeInput.test.tsx +182 -20
- package/src/DateRangeInput/DateRangeInput.tsx +63 -5
- package/src/DateTimeInput/DateTimeInput.doc.mjs +368 -67
- package/src/DateTimeInput/DateTimeInput.test.tsx +279 -11
- package/src/DateTimeInput/DateTimeInput.tsx +125 -17
- package/src/Dialog/Dialog.doc.mjs +2 -2
- package/src/Dialog/Dialog.tsx +12 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -8
- package/src/DropdownMenu/DropdownMenu.test.tsx +56 -42
- package/src/DropdownMenu/DropdownMenu.tsx +52 -18
- package/src/Field/Field.doc.mjs +59 -18
- package/src/Field/Field.test.tsx +32 -0
- package/src/Field/Field.tsx +23 -5
- package/src/Field/FieldLabel.tsx +55 -17
- package/src/FileInput/FileInput.doc.mjs +17 -0
- package/src/FileInput/FileInput.test.tsx +283 -49
- package/src/FileInput/FileInput.tsx +76 -4
- package/src/Grid/Grid.doc.mjs +17 -4
- package/src/Grid/Grid.test.tsx +43 -30
- package/src/Grid/Grid.tsx +38 -3
- package/src/Icon/Icon.doc.mjs +3 -3
- package/src/InputGroup/InputGroup.doc.mjs +111 -23
- package/src/InputGroup/InputGroup.test.tsx +257 -60
- package/src/InputGroup/InputGroup.tsx +23 -5
- package/src/InputGroup/InputGroupContext.ts +9 -4
- package/src/InputGroup/groupStyles.ts +7 -1
- package/src/InputGroup/index.ts +1 -0
- package/src/Kbd/Kbd.test.tsx +22 -4
- package/src/Kbd/Kbd.tsx +35 -3
- package/src/Layer/layerAnimations.stylex.ts +20 -4
- package/src/Layer/useLayer.doc.mjs +5 -0
- package/src/Layer/useLayer.test.tsx +111 -0
- package/src/Layer/useLayer.tsx +90 -9
- package/src/Layout/Layout.tsx +8 -16
- package/src/Layout/LayoutFooter.doc.mjs +4 -4
- package/src/Layout/LayoutFooter.tsx +3 -3
- package/src/Layout/LayoutHeader.doc.mjs +4 -4
- package/src/Layout/LayoutHeader.tsx +3 -3
- package/src/Layout/LayoutPanel.tsx +3 -3
- package/src/Layout/padding.stylex.ts +52 -0
- package/src/Lightbox/Lightbox.doc.mjs +9 -0
- package/src/Lightbox/Lightbox.test.tsx +53 -5
- package/src/Lightbox/Lightbox.tsx +9 -4
- package/src/Link/Link.doc.mjs +14 -0
- package/src/Link/Link.test.tsx +50 -0
- package/src/Link/Link.tsx +39 -4
- package/src/Markdown/Markdown.test.tsx +11 -0
- package/src/Markdown/Markdown.tsx +7 -0
- package/src/MetadataList/MetadataListItem.doc.mjs +4 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -17
- package/src/MoreMenu/MoreMenu.tsx +0 -9
- package/src/MultiSelector/MultiSelector.doc.mjs +30 -0
- package/src/MultiSelector/MultiSelector.test.tsx +375 -8
- package/src/MultiSelector/MultiSelector.tsx +194 -48
- package/src/MultiSelector/hooks.ts +27 -0
- package/src/NavMenu/NavHeadingMenu.test.tsx +77 -1
- package/src/NavMenu/NavHeadingMenu.tsx +50 -3
- package/src/NumberInput/NumberInput.doc.mjs +17 -0
- package/src/NumberInput/NumberInput.test.tsx +242 -40
- package/src/NumberInput/NumberInput.tsx +89 -11
- package/src/Pagination/Pagination.doc.mjs +3 -3
- package/src/Pagination/Pagination.test.tsx +117 -5
- package/src/Pagination/Pagination.tsx +21 -1
- package/src/Popover/Popover.doc.mjs +26 -0
- package/src/Popover/Popover.test.tsx +121 -0
- package/src/Popover/Popover.tsx +23 -2
- package/src/Popover/usePopover.doc.mjs +9 -3
- package/src/Popover/usePopover.tsx +70 -12
- package/src/PowerSearch/PowerSearch.doc.mjs +15 -0
- package/src/PowerSearch/PowerSearch.test.tsx +97 -1
- package/src/PowerSearch/PowerSearch.tsx +16 -3
- package/src/ProgressBar/ProgressBar.test.tsx +34 -26
- package/src/ProgressBar/ProgressBar.tsx +3 -4
- package/src/RadioList/RadioList.doc.mjs +9 -0
- package/src/RadioList/RadioList.test.tsx +252 -16
- package/src/RadioList/RadioList.tsx +166 -10
- package/src/RadioList/RadioListItem.tsx +14 -2
- package/src/SegmentedControl/SegmentedControl.doc.mjs +9 -0
- package/src/SegmentedControl/SegmentedControl.test.tsx +214 -42
- package/src/SegmentedControl/SegmentedControl.tsx +102 -54
- package/src/SegmentedControl/SegmentedControlContext.ts +7 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +14 -1
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +26 -0
- package/src/Selector/Selector.test.tsx +387 -15
- package/src/Selector/Selector.tsx +175 -67
- package/src/Selector/hooks.ts +23 -0
- package/src/SideNav/SideNav.test.tsx +48 -0
- package/src/SideNav/SideNavHeading.tsx +8 -2
- package/src/SideNav/SideNavItem.tsx +2 -4
- package/src/Skeleton/Skeleton.test.tsx +25 -0
- package/src/Skeleton/Skeleton.tsx +11 -1
- package/src/Slider/Slider.doc.mjs +15 -0
- package/src/Slider/Slider.test.tsx +155 -2
- package/src/Slider/Slider.tsx +53 -5
- package/src/Spinner/Spinner.tsx +7 -1
- package/src/Stack/Stack.doc.mjs +77 -0
- package/src/Stack/Stack.test.tsx +55 -5
- package/src/Stack/Stack.tsx +73 -24
- package/src/Stack/StackItem.test.tsx +23 -0
- package/src/Stack/StackItem.tsx +20 -23
- package/src/Switch/Switch.doc.mjs +15 -0
- package/src/Switch/Switch.test.tsx +162 -27
- package/src/Switch/Switch.tsx +61 -21
- package/src/TabList/Tab.tsx +6 -0
- package/src/TabList/TabList.doc.mjs +6 -0
- package/src/TabList/TabList.test.tsx +251 -0
- package/src/TabList/TabList.tsx +103 -12
- package/src/TabList/TabListContext.ts +7 -3
- package/src/TabList/TabMenu.tsx +6 -3
- package/src/Table/BaseTable.tsx +21 -17
- package/src/Table/Table.doc.mjs +2 -0
- package/src/Table/Table.test.tsx +10 -0
- package/src/Table/Table.tsx +8 -0
- package/src/Table/TableCell.tsx +25 -23
- package/src/Table/TableHeaderCell.tsx +28 -29
- package/src/Table/index.ts +3 -2
- package/src/Table/plugins/pagination/paginateData.ts +10 -3
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +16 -0
- package/src/Table/plugins/pagination/useTablePagination.tsx +8 -1
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +91 -2
- package/src/Table/plugins/sortable/useTableSortable.tsx +53 -1
- package/src/Table/tableContextMenu.test.tsx +157 -0
- package/src/Table/tableContextMenu.tsx +142 -0
- package/src/Table/types.ts +74 -0
- package/src/Table/useTableColumnResize.doc.mjs +3 -3
- package/src/Table/useTableStickyColumns.doc.mjs +2 -2
- package/src/Text/Text.doc.mjs +18 -18
- package/src/TextArea/TextArea.doc.mjs +17 -0
- package/src/TextArea/TextArea.test.tsx +167 -35
- package/src/TextArea/TextArea.tsx +62 -15
- package/src/TextInput/TextInput.doc.mjs +17 -0
- package/src/TextInput/TextInput.test.tsx +168 -34
- package/src/TextInput/TextInput.tsx +77 -9
- package/src/Thumbnail/Thumbnail.doc.mjs +4 -4
- package/src/TimeInput/TimeInput.doc.mjs +340 -60
- package/src/TimeInput/TimeInput.test.tsx +255 -7
- package/src/TimeInput/TimeInput.tsx +176 -70
- package/src/Timestamp/Timestamp.doc.mjs +19 -19
- package/src/Toast/Toast.tsx +14 -0
- package/src/Toast/ToastViewport.test.tsx +214 -0
- package/src/Toast/ToastViewport.tsx +167 -21
- package/src/Tokenizer/Tokenizer.doc.mjs +29 -14
- package/src/Tokenizer/Tokenizer.test.tsx +105 -1
- package/src/Tokenizer/Tokenizer.tsx +37 -1
- package/src/Toolbar/Toolbar.test.tsx +109 -6
- package/src/Toolbar/Toolbar.tsx +59 -5
- package/src/Tooltip/Tooltip.test.tsx +68 -0
- package/src/Tooltip/useTooltip.tsx +55 -8
- package/src/TopNav/TopNav.test.tsx +50 -0
- package/src/TopNav/TopNavHeading.tsx +17 -1
- package/src/TreeList/TreeList.test.tsx +295 -6
- package/src/TreeList/TreeList.tsx +73 -1
- package/src/TreeList/TreeListItem.tsx +51 -5
- package/src/TreeList/treeListItem.markers.stylex.ts +20 -0
- package/src/Typeahead/BaseTypeahead.tsx +93 -9
- package/src/Typeahead/Typeahead.doc.mjs +141 -30
- package/src/Typeahead/Typeahead.test.tsx +331 -1
- package/src/Typeahead/Typeahead.tsx +105 -33
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +80 -0
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +76 -0
- package/src/VisuallyHidden/VisuallyHidden.tsx +113 -0
- package/src/VisuallyHidden/index.ts +15 -0
- package/src/docs-script.test.mjs +50 -0
- package/src/hooks/focusableSelector.ts +25 -0
- package/src/hooks/index.ts +28 -2
- package/src/hooks/useAnnounce.test.tsx +101 -0
- package/src/hooks/useAnnounce.ts +168 -0
- package/src/hooks/useClickableContainer.ts +16 -4
- package/src/hooks/useEntryAnimation.ts +16 -4
- package/src/hooks/useFocusTrap.test.tsx +132 -0
- package/src/hooks/useFocusTrap.ts +98 -4
- package/src/hooks/useGridFocus.doc.mjs +40 -2
- package/src/hooks/useGridFocus.test.tsx +132 -0
- package/src/hooks/useGridFocus.ts +343 -67
- package/src/hooks/useKeyboardHint.doc.mjs +101 -0
- package/src/hooks/useKeyboardHint.test.tsx +70 -0
- package/src/hooks/useKeyboardHint.tsx +332 -0
- package/src/hooks/useListFocus.doc.mjs +50 -10
- package/src/hooks/useListFocus.test.tsx +375 -0
- package/src/hooks/useListFocus.ts +395 -57
- package/src/hooks/useLongPress.test.tsx +134 -0
- package/src/hooks/useLongPress.ts +119 -0
- package/src/hooks/useTreeFocus.doc.mjs +140 -0
- package/src/hooks/useTreeFocus.test.tsx +214 -0
- package/src/hooks/useTreeFocus.ts +559 -0
- package/src/hooks/useTypeahead.test.tsx +109 -0
- package/src/hooks/useTypeahead.ts +183 -0
- package/src/index.ts +1 -0
- package/src/theme/derivedVarRegistry.test.ts +10 -5
- package/src/utils/dateTypes.test.ts +40 -0
- package/src/utils/dateTypes.ts +40 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/inputAria.test.ts +39 -0
- package/src/utils/inputAria.ts +58 -0
- package/src/utils/timeParser.test.ts +10 -0
- package/src/utils/timeParser.ts +5 -2
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts +0 -57
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts.map +0 -1
- package/dist/Calendar/hooks/useCalendarRovingTabindex.js +0 -96
- package/src/Calendar/hooks/useCalendarRovingTabindex.ts +0 -118
package/src/Grid/Grid.doc.mjs
CHANGED
|
@@ -17,6 +17,7 @@ export const docs = {
|
|
|
17
17
|
{ guidance: true, description: 'Use `repeat: \'fill\'` (the default) for consistent item widths. Use `\'fit\'` when items should stretch to fill leftover space.' },
|
|
18
18
|
{ guidance: false, description: 'Write manual CSS grid; Grid handles spacing and responsive behavior for you.' },
|
|
19
19
|
{ guidance: false, description: 'Use `HStack` with wrapping for grids; use Grid instead.' },
|
|
20
|
+
{ guidance: true, description: 'Track templates use CSS-variable indirection (not raw inline styles), so `xstyle` overrides of `gridTemplateColumns` — including inside `@media` queries — take effect.' },
|
|
20
21
|
],
|
|
21
22
|
},
|
|
22
23
|
theming: {
|
|
@@ -39,13 +40,23 @@ export const docs = {
|
|
|
39
40
|
},
|
|
40
41
|
{
|
|
41
42
|
name: 'width',
|
|
42
|
-
type: '
|
|
43
|
-
description: 'Container width.',
|
|
43
|
+
type: 'SizeValue',
|
|
44
|
+
description: 'Container width. Numbers are treated as pixels, strings are used as-is.',
|
|
44
45
|
},
|
|
45
46
|
{
|
|
46
47
|
name: 'height',
|
|
47
|
-
type: '
|
|
48
|
-
description: 'Container height.',
|
|
48
|
+
type: 'SizeValue',
|
|
49
|
+
description: 'Container height. Numbers are treated as pixels, strings are used as-is.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'maxWidth',
|
|
53
|
+
type: 'SizeValue',
|
|
54
|
+
description: 'Maximum container width. Numbers are treated as pixels, strings are used as-is.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'minHeight',
|
|
58
|
+
type: 'SizeValue',
|
|
59
|
+
description: 'Minimum container height. Numbers are treated as pixels, strings are used as-is.',
|
|
49
60
|
},
|
|
50
61
|
{
|
|
51
62
|
name: 'gap',
|
|
@@ -101,6 +112,7 @@ export const docsZh = {
|
|
|
101
112
|
{ guidance: true, description: 'Use `repeat: \'fill\'` (the default) for consistent item widths. Use `\'fit\'` when items should stretch to fill leftover space.' },
|
|
102
113
|
{ guidance: false, description: 'Write manual CSS grid; Grid handles spacing and responsive behavior for you.' },
|
|
103
114
|
{ guidance: false, description: 'Use `HStack` with wrapping for grids; use Grid instead.' },
|
|
115
|
+
{ guidance: true, description: 'Track templates use CSS-variable indirection (not raw inline styles), so `xstyle` overrides of `gridTemplateColumns` — including inside `@media` queries — take effect.' },
|
|
104
116
|
],
|
|
105
117
|
},
|
|
106
118
|
};
|
|
@@ -116,6 +128,7 @@ export const docsDense = {
|
|
|
116
128
|
{ guidance: true, description: 'Use repeat: \'fill\' (the default) for consistent item widths. Use \'fit\' when items should stretch to fill leftover space.' },
|
|
117
129
|
{ guidance: false, description: 'Write manual CSS grid; Grid handles spacing and responsive behavior for you.' },
|
|
118
130
|
{ guidance: false, description: 'Use HStack with wrapping for grids; use Grid instead.' },
|
|
131
|
+
{ guidance: true, description: 'track templates use CSS-var indirection, not inline styles — xstyle/@media overrides of gridTemplateColumns work.' },
|
|
119
132
|
],
|
|
120
133
|
},
|
|
121
134
|
};
|
package/src/Grid/Grid.test.tsx
CHANGED
|
@@ -14,6 +14,17 @@ import {render, screen} from '@testing-library/react';
|
|
|
14
14
|
import {Grid} from './Grid';
|
|
15
15
|
import {GridSpan} from './GridSpan';
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* The track template is applied via a StyleX dynamic style: the element
|
|
19
|
+
* carries an inline CSS variable while the `grid-template-columns`
|
|
20
|
+
* declaration lives in a class (so consumer xstyle/@media overrides can
|
|
21
|
+
* win). `--x-gridTemplateColumns` is the debug-mode variable name emitted
|
|
22
|
+
* by the StyleX transform in tests.
|
|
23
|
+
*/
|
|
24
|
+
function templateColumns(el: HTMLElement): string {
|
|
25
|
+
return el.style.getPropertyValue('--x-gridTemplateColumns');
|
|
26
|
+
}
|
|
27
|
+
|
|
17
28
|
describe('Grid', () => {
|
|
18
29
|
it('renders with fixed columns', () => {
|
|
19
30
|
render(
|
|
@@ -25,7 +36,22 @@ describe('Grid', () => {
|
|
|
25
36
|
);
|
|
26
37
|
const grid = screen.getByTestId('grid');
|
|
27
38
|
expect(grid).toBeInTheDocument();
|
|
28
|
-
expect(grid
|
|
39
|
+
expect(templateColumns(grid)).toBe('repeat(3, 1fr)');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('does not write grid-template-columns as a raw inline style (regression: inline style defeats xstyle/@media overrides)', () => {
|
|
43
|
+
render(
|
|
44
|
+
<Grid columns={3} rowHeight={80} data-testid="grid">
|
|
45
|
+
<div>Item 1</div>
|
|
46
|
+
</Grid>,
|
|
47
|
+
);
|
|
48
|
+
const grid = screen.getByTestId('grid');
|
|
49
|
+
// The declaration must live in a class (via CSS-var indirection), never
|
|
50
|
+
// as a raw inline property — inline would beat any consumer override.
|
|
51
|
+
expect(grid.style.gridTemplateColumns).toBe('');
|
|
52
|
+
expect(grid.style.gridAutoRows).toBe('');
|
|
53
|
+
expect(templateColumns(grid)).toBe('repeat(3, 1fr)');
|
|
54
|
+
expect(grid.style.getPropertyValue('--x-gridAutoRows')).toBe('80px');
|
|
29
55
|
});
|
|
30
56
|
|
|
31
57
|
it('renders with columns object (auto-fill default)', () => {
|
|
@@ -36,9 +62,7 @@ describe('Grid', () => {
|
|
|
36
62
|
</Grid>,
|
|
37
63
|
);
|
|
38
64
|
const grid = screen.getByTestId('grid');
|
|
39
|
-
expect(grid
|
|
40
|
-
'repeat(auto-fill, minmax(250px, 1fr))',
|
|
41
|
-
);
|
|
65
|
+
expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(250px, 1fr))');
|
|
42
66
|
});
|
|
43
67
|
|
|
44
68
|
it('renders with columns object max (capped via track-max)', () => {
|
|
@@ -51,7 +75,7 @@ describe('Grid', () => {
|
|
|
51
75
|
);
|
|
52
76
|
const grid = screen.getByTestId('grid');
|
|
53
77
|
// Track max caps at (100% - 2 * gap) / 3 — no maxWidth on container
|
|
54
|
-
expect(grid
|
|
78
|
+
expect(templateColumns(grid)).toBe(
|
|
55
79
|
'repeat(auto-fill, minmax(250px, calc((100% - 2 * var(--spacing-4)) / 3)))',
|
|
56
80
|
);
|
|
57
81
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -59,17 +83,14 @@ describe('Grid', () => {
|
|
|
59
83
|
|
|
60
84
|
it('renders with columns object max using columnGap', () => {
|
|
61
85
|
render(
|
|
62
|
-
<Grid
|
|
63
|
-
columns={{minWidth: 200, max: 4}}
|
|
64
|
-
columnGap={6}
|
|
65
|
-
data-testid="grid">
|
|
86
|
+
<Grid columns={{minWidth: 200, max: 4}} columnGap={6} data-testid="grid">
|
|
66
87
|
<div>Item 1</div>
|
|
67
88
|
<div>Item 2</div>
|
|
68
89
|
</Grid>,
|
|
69
90
|
);
|
|
70
91
|
const grid = screen.getByTestId('grid');
|
|
71
92
|
// columnGap takes precedence for track-max calculation
|
|
72
|
-
expect(grid
|
|
93
|
+
expect(templateColumns(grid)).toBe(
|
|
73
94
|
'repeat(auto-fill, minmax(200px, calc((100% - 3 * var(--spacing-6)) / 4)))',
|
|
74
95
|
);
|
|
75
96
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -118,7 +139,7 @@ describe('Grid', () => {
|
|
|
118
139
|
</Grid>,
|
|
119
140
|
);
|
|
120
141
|
const grid = screen.getByTestId('grid');
|
|
121
|
-
expect(grid
|
|
142
|
+
expect(templateColumns(grid)).toBe('1fr');
|
|
122
143
|
});
|
|
123
144
|
|
|
124
145
|
// --- P1: columns={0} guard (hardening #719) ---
|
|
@@ -131,7 +152,7 @@ describe('Grid', () => {
|
|
|
131
152
|
);
|
|
132
153
|
const grid = screen.getByTestId('grid');
|
|
133
154
|
// columns={0} must not produce repeat(0, 1fr) — should fall back to default
|
|
134
|
-
expect(grid
|
|
155
|
+
expect(templateColumns(grid)).toBe('1fr');
|
|
135
156
|
});
|
|
136
157
|
|
|
137
158
|
it('falls back to 1fr when columns is negative', () => {
|
|
@@ -141,7 +162,7 @@ describe('Grid', () => {
|
|
|
141
162
|
</Grid>,
|
|
142
163
|
);
|
|
143
164
|
const grid = screen.getByTestId('grid');
|
|
144
|
-
expect(grid
|
|
165
|
+
expect(templateColumns(grid)).toBe('1fr');
|
|
145
166
|
});
|
|
146
167
|
|
|
147
168
|
it('uses auto-fill without track-max cap when no max specified', () => {
|
|
@@ -151,9 +172,7 @@ describe('Grid', () => {
|
|
|
151
172
|
</Grid>,
|
|
152
173
|
);
|
|
153
174
|
const grid = screen.getByTestId('grid');
|
|
154
|
-
expect(grid
|
|
155
|
-
'repeat(auto-fill, minmax(200px, 1fr))',
|
|
156
|
-
);
|
|
175
|
+
expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(200px, 1fr))');
|
|
157
176
|
expect(grid.style.maxWidth).toBe('');
|
|
158
177
|
});
|
|
159
178
|
|
|
@@ -213,7 +232,7 @@ describe('Grid', () => {
|
|
|
213
232
|
);
|
|
214
233
|
const grid = screen.getByTestId('grid');
|
|
215
234
|
// columnGap takes precedence over gap in track-max
|
|
216
|
-
expect(grid
|
|
235
|
+
expect(templateColumns(grid)).toBe(
|
|
217
236
|
'repeat(auto-fill, minmax(200px, calc((100% - 2 * var(--spacing-6)) / 3)))',
|
|
218
237
|
);
|
|
219
238
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -226,7 +245,7 @@ describe('Grid', () => {
|
|
|
226
245
|
</Grid>,
|
|
227
246
|
);
|
|
228
247
|
const grid = screen.getByTestId('grid');
|
|
229
|
-
expect(grid
|
|
248
|
+
expect(templateColumns(grid)).toBe(
|
|
230
249
|
'repeat(auto-fill, minmax(150px, calc((100% - 1 * var(--spacing-3)) / 2)))',
|
|
231
250
|
);
|
|
232
251
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -239,7 +258,7 @@ describe('Grid', () => {
|
|
|
239
258
|
</Grid>,
|
|
240
259
|
);
|
|
241
260
|
const grid = screen.getByTestId('grid');
|
|
242
|
-
expect(grid
|
|
261
|
+
expect(templateColumns(grid)).toBe(
|
|
243
262
|
'repeat(auto-fill, minmax(100px, calc(100% / 3)))',
|
|
244
263
|
);
|
|
245
264
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -288,9 +307,7 @@ describe('Grid', () => {
|
|
|
288
307
|
</Grid>,
|
|
289
308
|
);
|
|
290
309
|
const grid = screen.getByTestId('grid');
|
|
291
|
-
expect(grid
|
|
292
|
-
'repeat(auto-fill, minmax(280px, 1fr))',
|
|
293
|
-
);
|
|
310
|
+
expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(280px, 1fr))');
|
|
294
311
|
});
|
|
295
312
|
|
|
296
313
|
it('renders with columns={{minWidth, repeat: "fit"}} using auto-fit', () => {
|
|
@@ -301,9 +318,7 @@ describe('Grid', () => {
|
|
|
301
318
|
</Grid>,
|
|
302
319
|
);
|
|
303
320
|
const grid = screen.getByTestId('grid');
|
|
304
|
-
expect(grid
|
|
305
|
-
'repeat(auto-fit, minmax(280px, 1fr))',
|
|
306
|
-
);
|
|
321
|
+
expect(templateColumns(grid)).toBe('repeat(auto-fit, minmax(280px, 1fr))');
|
|
307
322
|
});
|
|
308
323
|
|
|
309
324
|
it('renders with columns={{minWidth, repeat: "fill"}} using auto-fill', () => {
|
|
@@ -314,9 +329,7 @@ describe('Grid', () => {
|
|
|
314
329
|
</Grid>,
|
|
315
330
|
);
|
|
316
331
|
const grid = screen.getByTestId('grid');
|
|
317
|
-
expect(grid
|
|
318
|
-
'repeat(auto-fill, minmax(280px, 1fr))',
|
|
319
|
-
);
|
|
332
|
+
expect(templateColumns(grid)).toBe('repeat(auto-fill, minmax(280px, 1fr))');
|
|
320
333
|
});
|
|
321
334
|
|
|
322
335
|
it('renders with columns={{minWidth, max}} capping via track-max', () => {
|
|
@@ -328,7 +341,7 @@ describe('Grid', () => {
|
|
|
328
341
|
);
|
|
329
342
|
const grid = screen.getByTestId('grid');
|
|
330
343
|
// Track-max limits columns — grid stays full width
|
|
331
|
-
expect(grid
|
|
344
|
+
expect(templateColumns(grid)).toBe(
|
|
332
345
|
'repeat(auto-fill, minmax(280px, calc((100% - 2 * var(--spacing-4)) / 3)))',
|
|
333
346
|
);
|
|
334
347
|
expect(grid.style.maxWidth).toBe('');
|
|
@@ -345,7 +358,7 @@ describe('Grid', () => {
|
|
|
345
358
|
</Grid>,
|
|
346
359
|
);
|
|
347
360
|
const grid = screen.getByTestId('grid');
|
|
348
|
-
expect(grid
|
|
361
|
+
expect(templateColumns(grid)).toBe(
|
|
349
362
|
'repeat(auto-fit, minmax(280px, calc((100% - 2 * var(--spacing-4)) / 3)))',
|
|
350
363
|
);
|
|
351
364
|
expect(grid.style.maxWidth).toBe('');
|
package/src/Grid/Grid.tsx
CHANGED
|
@@ -83,6 +83,18 @@ export interface GridProps extends BaseProps<HTMLDivElement> {
|
|
|
83
83
|
*/
|
|
84
84
|
height?: SizeValue;
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Maximum width of the grid container.
|
|
88
|
+
* Numbers are treated as pixels, strings are used as-is (e.g., '100%').
|
|
89
|
+
*/
|
|
90
|
+
maxWidth?: SizeValue;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Minimum height of the grid container.
|
|
94
|
+
* Numbers are treated as pixels, strings are used as-is (e.g., '100%').
|
|
95
|
+
*/
|
|
96
|
+
minHeight?: SizeValue;
|
|
97
|
+
|
|
86
98
|
/**
|
|
87
99
|
* Spacing between all grid items (both row and column).
|
|
88
100
|
* Accepts numeric spacing steps: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10.
|
|
@@ -140,6 +152,19 @@ const baseStyles = stylex.create({
|
|
|
140
152
|
},
|
|
141
153
|
});
|
|
142
154
|
|
|
155
|
+
// Dynamic track values compile to CSS variables + a class-level declaration
|
|
156
|
+
// (grid-template-columns: var(--x)) instead of a raw inline style, so
|
|
157
|
+
// consumer `xstyle` overrides — including ones inside @media queries — can
|
|
158
|
+
// still win. A raw inline `grid-template-columns` would beat any class.
|
|
159
|
+
const dynamicStyles = stylex.create({
|
|
160
|
+
templateColumns: (value: string) => ({
|
|
161
|
+
gridTemplateColumns: value,
|
|
162
|
+
}),
|
|
163
|
+
autoRows: (value: number) => ({
|
|
164
|
+
gridAutoRows: `${value}px`,
|
|
165
|
+
}),
|
|
166
|
+
});
|
|
167
|
+
|
|
143
168
|
const alignStyles = stylex.create({
|
|
144
169
|
start: {
|
|
145
170
|
alignItems: 'start',
|
|
@@ -346,6 +371,8 @@ export function Grid({
|
|
|
346
371
|
rowHeight,
|
|
347
372
|
width,
|
|
348
373
|
height,
|
|
374
|
+
maxWidth,
|
|
375
|
+
minHeight,
|
|
349
376
|
gap,
|
|
350
377
|
rowGap,
|
|
351
378
|
columnGap,
|
|
@@ -399,16 +426,22 @@ export function Grid({
|
|
|
399
426
|
gridTemplateColumns = '1fr';
|
|
400
427
|
}
|
|
401
428
|
|
|
402
|
-
// Build inline style for dynamic values
|
|
429
|
+
// Build inline style for dynamic values. Track templates go through
|
|
430
|
+
// dynamicStyles (CSS-var indirection) so xstyle/@media overrides work;
|
|
431
|
+
// width/height stay inline as explicit caller-set dimensions.
|
|
403
432
|
const inlineStyle: React.CSSProperties = {
|
|
404
|
-
gridTemplateColumns,
|
|
405
|
-
...(rowHeight != null && {gridAutoRows: `${rowHeight}px`}),
|
|
406
433
|
...(width != null && {
|
|
407
434
|
width: typeof width === 'number' ? `${width}px` : width,
|
|
408
435
|
}),
|
|
409
436
|
...(height != null && {
|
|
410
437
|
height: typeof height === 'number' ? `${height}px` : height,
|
|
411
438
|
}),
|
|
439
|
+
...(maxWidth != null && {
|
|
440
|
+
maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
|
|
441
|
+
}),
|
|
442
|
+
...(minHeight != null && {
|
|
443
|
+
minHeight: typeof minHeight === 'number' ? `${minHeight}px` : minHeight,
|
|
444
|
+
}),
|
|
412
445
|
};
|
|
413
446
|
|
|
414
447
|
// For themeProps, extract numeric columns value for variant tracking
|
|
@@ -426,6 +459,8 @@ export function Grid({
|
|
|
426
459
|
themeProps('grid', {columns: columnsVariant, gap, align, justify}),
|
|
427
460
|
stylex.props(
|
|
428
461
|
baseStyles.grid,
|
|
462
|
+
dynamicStyles.templateColumns(gridTemplateColumns),
|
|
463
|
+
rowHeight != null && dynamicStyles.autoRows(rowHeight),
|
|
429
464
|
gap != null && gapStyles[gap],
|
|
430
465
|
rowGap != null && rowGapStyles[rowGap],
|
|
431
466
|
columnGap != null && columnGapStyles[columnGap],
|
package/src/Icon/Icon.doc.mjs
CHANGED
|
@@ -51,7 +51,7 @@ export const docs = {
|
|
|
51
51
|
{ guidance: false, description: 'Resize icons with arbitrary pixel values; use the provided size props.' },
|
|
52
52
|
{ guidance: false, description: 'Mix icon styles (e.g. outline and filled) within the same context.' },
|
|
53
53
|
{ guidance: false, description: 'Render raw SVG elements; always wrap in Icon for consistent sizing and color.' },
|
|
54
|
-
{ guidance: false, description: 'Pass a `name` prop
|
|
54
|
+
{ guidance: false, description: 'Pass a `name` prop; Icon uses `icon` (not `name`) to specify which icon to render.' },
|
|
55
55
|
],
|
|
56
56
|
},
|
|
57
57
|
};
|
|
@@ -96,7 +96,7 @@ export const docsZh = {
|
|
|
96
96
|
{ guidance: false, description: 'Resize icons with arbitrary pixel values; use the provided size props.' },
|
|
97
97
|
{ guidance: false, description: 'Mix icon styles (e.g. outline and filled) within the same context.' },
|
|
98
98
|
{ guidance: false, description: 'Render raw SVG elements; always wrap in Icon for consistent sizing and color.' },
|
|
99
|
-
{ guidance: false, description: 'Pass a `name` prop
|
|
99
|
+
{ guidance: false, description: 'Pass a `name` prop; Icon uses `icon` (not `name`) to specify which icon to render.' },
|
|
100
100
|
],
|
|
101
101
|
},
|
|
102
102
|
};
|
|
@@ -116,7 +116,7 @@ export const docsDense = {
|
|
|
116
116
|
{ guidance: false, description: 'Resize icons with arbitrary pixel values; use the provided size props.' },
|
|
117
117
|
{ guidance: false, description: 'Mix icon styles (e.g. outline and filled) within the same context.' },
|
|
118
118
|
{ guidance: false, description: 'Render raw SVG elements; always wrap in Icon for consistent sizing and color.' },
|
|
119
|
-
{ guidance: false, description: '`name` prop
|
|
119
|
+
{ guidance: false, description: '`name` prop, which does not exist. Use `icon` to specify which icon to render.' },
|
|
120
120
|
],
|
|
121
121
|
},
|
|
122
122
|
propDescriptions: {
|
|
@@ -8,18 +8,28 @@ export const docs = {
|
|
|
8
8
|
group: 'Field',
|
|
9
9
|
category: 'Data Input',
|
|
10
10
|
isHiddenFromOverview: true,
|
|
11
|
-
keywords: [
|
|
11
|
+
keywords: [
|
|
12
|
+
'inputgroup',
|
|
13
|
+
'addon',
|
|
14
|
+
'prefix',
|
|
15
|
+
'suffix',
|
|
16
|
+
'connected',
|
|
17
|
+
'grouped',
|
|
18
|
+
'input',
|
|
19
|
+
],
|
|
12
20
|
theming: {
|
|
13
21
|
targets: [
|
|
14
22
|
{className: 'astryx-input-group', visualProps: ['size', 'status']},
|
|
15
23
|
],
|
|
16
24
|
},
|
|
17
|
-
description:
|
|
25
|
+
description:
|
|
26
|
+
'Groups an input with prefix/suffix addons in a visually connected container with shared border and focus ring.',
|
|
18
27
|
props: [
|
|
19
28
|
{
|
|
20
29
|
name: 'children',
|
|
21
30
|
type: 'ReactNode',
|
|
22
|
-
description:
|
|
31
|
+
description:
|
|
32
|
+
'InputGroupText and compatible input children: TextInput, NumberInput, TimeInput, DateInput, Typeahead, Selector, or MultiSelector.',
|
|
23
33
|
required: true,
|
|
24
34
|
},
|
|
25
35
|
{
|
|
@@ -84,39 +94,117 @@ export const docs = {
|
|
|
84
94
|
description: 'Test selector.',
|
|
85
95
|
},
|
|
86
96
|
],
|
|
87
|
-
components: [
|
|
88
|
-
{name: 'InputGroupText'},
|
|
89
|
-
],
|
|
97
|
+
components: [{name: 'InputGroupText'}],
|
|
90
98
|
usage: {
|
|
91
|
-
description:
|
|
99
|
+
description:
|
|
100
|
+
'InputGroup connects an input with prefix/suffix addons in a single visual unit. Use it for URL fields, currency inputs, search fields with action buttons, or any input that needs contextual decorations.',
|
|
92
101
|
bestPractices: [
|
|
93
|
-
{
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
{
|
|
103
|
+
guidance: true,
|
|
104
|
+
description:
|
|
105
|
+
'Use text addons to show units, prefixes, or suffixes that clarify the input format (e.g., "$", "kg", "https://").',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
guidance: true,
|
|
109
|
+
description:
|
|
110
|
+
'Use InputGroupText for static prefixes/suffixes like "$", "kg", or "https://".',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
guidance: true,
|
|
114
|
+
description:
|
|
115
|
+
'Use InputGroup with compatible single-line inputs: TextInput, NumberInput, TimeInput, DateInput, Typeahead, Selector, and MultiSelector.',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
guidance: true,
|
|
119
|
+
description:
|
|
120
|
+
"Keep each inner input's label specific; grouped inputs automatically combine the group label with their own label and inherit the group description/status context.",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
guidance: false,
|
|
124
|
+
description:
|
|
125
|
+
"Don't put multiple text inputs in one group; use separate fields instead.",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
guidance: false,
|
|
129
|
+
description:
|
|
130
|
+
"Don't use InputGroup for unrelated inputs; it's for a single input with decorations.",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
guidance: false,
|
|
134
|
+
description:
|
|
135
|
+
"Don't use InputGroup with TextArea, Slider, Switch, CheckboxInput, or RadioList.",
|
|
136
|
+
},
|
|
98
137
|
],
|
|
99
138
|
anatomy: [
|
|
100
139
|
{name: 'Label', required: true, description: 'Text above the group.'},
|
|
101
|
-
{
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
140
|
+
{
|
|
141
|
+
name: 'Prefix addon',
|
|
142
|
+
required: false,
|
|
143
|
+
description: 'Content before the input (text, icon, or button).',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'Input',
|
|
147
|
+
required: true,
|
|
148
|
+
description:
|
|
149
|
+
'The main input element (TextInput, NumberInput, TimeInput, DateInput, Typeahead, Selector, or MultiSelector).',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'Suffix addon',
|
|
153
|
+
required: false,
|
|
154
|
+
description: 'Content after the input (text, icon, or button).',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'Status message',
|
|
158
|
+
required: false,
|
|
159
|
+
description: 'An error, warning, or success message below the group.',
|
|
160
|
+
},
|
|
105
161
|
],
|
|
106
162
|
},
|
|
107
163
|
};
|
|
108
164
|
|
|
109
165
|
/** @type {import('../docs-types').TranslationDoc} */
|
|
110
166
|
export const docsDense = {
|
|
111
|
-
description:
|
|
167
|
+
description:
|
|
168
|
+
'groups input with prefix/suffix addons in a connected container',
|
|
112
169
|
usage: {
|
|
113
|
-
description:
|
|
170
|
+
description:
|
|
171
|
+
'InputGroup connects an input with addons. Use for URL fields, currency inputs, search with actions.',
|
|
114
172
|
bestPractices: [
|
|
115
|
-
{
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
173
|
+
{
|
|
174
|
+
guidance: true,
|
|
175
|
+
description:
|
|
176
|
+
'Use text addons to show units, prefixes, or suffixes that clarify input format (e.g. "$", "kg", "https://").',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
guidance: true,
|
|
180
|
+
description:
|
|
181
|
+
'Use InputGroupText for static prefixes/suffixes like "$", "kg", or "https://".',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
guidance: true,
|
|
185
|
+
description:
|
|
186
|
+
'Use InputGroup with compatible single-line inputs: TextInput, NumberInput, TimeInput, DateInput, Typeahead, Selector, and MultiSelector.',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
guidance: true,
|
|
190
|
+
description:
|
|
191
|
+
"Keep each inner input's label specific; grouped inputs combine the group label with their own label and inherit group description/status.",
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
guidance: false,
|
|
195
|
+
description:
|
|
196
|
+
"Don't put multiple text inputs in one group; use separate fields instead.",
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
guidance: false,
|
|
200
|
+
description:
|
|
201
|
+
"Don't use InputGroup for unrelated inputs; it's for a single input with decorations.",
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
guidance: false,
|
|
205
|
+
description:
|
|
206
|
+
"Don't use InputGroup with TextArea, Slider, Switch, CheckboxInput, or RadioList.",
|
|
207
|
+
},
|
|
120
208
|
],
|
|
121
209
|
},
|
|
122
210
|
};
|