@astryxdesign/core 0.5.0 → 0.5.1-canary.f64186a
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 +222 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AspectRatio/AspectRatio.d.ts +6 -6
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +43 -9
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +5 -2
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +11 -7
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +26 -2
- package/dist/Banner/Banner.d.ts +10 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +11 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +8 -7
- package/dist/Calendar/Calendar.d.ts +4 -2
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +15 -21
- package/dist/Calendar/hooks/useCalendarDays.js +4 -6
- package/dist/Calendar/hooks/useCalendarNavigation.js +4 -6
- package/dist/Calendar/styles.d.ts +5 -20
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -17
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +108 -7
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +7 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -7
- package/dist/ComplexSelector/ComplexSelector.d.ts +10 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +14 -7
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -5
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +5 -3
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
- package/dist/DateInput/MonthYearWheels.js +6 -4
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +52 -25
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +1 -0
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +3 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts +23 -24
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +35 -10
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +6 -0
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -0
- package/dist/DateTimeInput/TouchDateTimeField.js +1021 -0
- package/dist/Dialog/Dialog.d.ts +16 -2
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +28 -7
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +0 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +14 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +7 -1
- package/dist/Icon/Icon.d.ts +4 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.d.ts +3 -2
- package/dist/Icon/defaultIcons.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.js +7 -0
- package/dist/Icon/globalIconRegistry.d.ts +13 -0
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +34 -6
- package/dist/Icon/index.d.ts +1 -1
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/useIcon.d.ts +5 -2
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +3 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +2 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -26
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +146 -24
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +5 -3
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MultiSelector/MultiSelector.d.ts +18 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +58 -11
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavItem/navItemStyles.stylex.d.ts +0 -8
- package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
- package/dist/NavItem/navItemStyles.stylex.js +0 -2
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +7 -4
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +95 -126
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/OverflowList/OverflowList.d.ts +41 -1
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +43 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +8 -14
- package/dist/Popover/usePopover.d.ts +15 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +26 -7
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +91 -18
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +4 -2
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/useResizable.d.ts +19 -1
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +104 -38
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +9 -0
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +92 -21
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts +6 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +57 -27
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +5 -4
- package/dist/SideNav/SideNavItem.d.ts +29 -4
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +75 -20
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +34 -2
- package/dist/Spinner/Spinner.d.ts +3 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +199 -20
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +7 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +6 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +34 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +25 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +0 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -8
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +10 -18
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +10 -5
- package/dist/Toast/Toast.d.ts +17 -2
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +77 -11
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +76 -21
- package/dist/Toast/index.d.ts +1 -1
- package/dist/Toast/index.d.ts.map +1 -1
- package/dist/Toast/types.d.ts +38 -0
- package/dist/Toast/types.d.ts.map +1 -1
- package/dist/Toast/useToastGesture.d.ts +26 -0
- package/dist/Toast/useToastGesture.d.ts.map +1 -0
- package/dist/Toast/useToastGesture.js +223 -0
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +23 -12
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +5 -2
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +31 -21
- package/dist/TopNav/TopNavHeading.js +2 -2
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +30 -9
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +3 -3
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +21 -6
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +2 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +33 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +51 -8
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +2 -0
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +87 -22
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -25
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +14 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/defineTheme.d.ts +9 -3
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +5 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +6 -7
- package/dist/utils/dateParser.d.ts +5 -8
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +10 -11
- package/dist/utils/focusOutline.stylex.d.ts +25 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +15 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +26 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -0
- package/dist/utils/interactionOverlay.stylex.js +42 -0
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/plainDate.d.ts +11 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +20 -4
- package/locales/af-ZA.json +7 -7
- package/locales/ar-SA.json +7 -7
- package/locales/ca-ES.json +6 -6
- package/locales/cs-CZ.json +7 -7
- package/locales/da-DK.json +7 -7
- package/locales/de-DE.json +7 -7
- package/locales/el-GR.json +7 -7
- package/locales/en.json +178 -6
- package/locales/es-ES.json +6 -6
- package/locales/fi-FI.json +7 -7
- package/locales/fr-FR.json +7 -7
- package/locales/he-IL.json +7 -7
- package/locales/hu-HU.json +7 -7
- package/locales/it-IT.json +7 -7
- package/locales/ja-JP.json +7 -7
- package/locales/ko-KR.json +7 -7
- package/locales/nl-NL.json +7 -7
- package/locales/no-NO.json +7 -7
- package/locales/pl-PL.json +7 -7
- package/locales/pseudo.json +130 -1
- package/locales/pt-BR.json +7 -7
- package/locales/pt-PT.json +7 -7
- package/locales/ro-RO.json +7 -7
- package/locales/ru-RU.json +7 -7
- package/locales/sr-SP.json +7 -7
- package/locales/sv-SE.json +7 -7
- package/locales/tr-TR.json +7 -7
- package/locales/uk-UA.json +7 -7
- package/locales/vi-VN.json +7 -7
- package/locales/zh-CN.json +7 -7
- package/locales/zh-TW.json +7 -7
- package/package.json +4 -5
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
- package/src/AspectRatio/AspectRatio.tsx +6 -6
- package/src/Avatar/Avatar.doc.mjs +12 -2
- package/src/Avatar/Avatar.test.tsx +80 -0
- package/src/Avatar/Avatar.tsx +64 -14
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +12 -4
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +12 -12
- package/src/Badge/Badge.doc.mjs +3 -2
- package/src/Badge/Badge.test.tsx +32 -3
- package/src/Badge/Badge.tsx +42 -1
- package/src/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +76 -11
- package/src/Banner/Banner.tsx +21 -2
- package/src/Button/Button.doc.mjs +2 -1
- package/src/Button/Button.test.tsx +19 -4
- package/src/Button/Button.tsx +9 -29
- package/src/ButtonGroup/ButtonGroup.doc.mjs +2 -2
- package/src/ButtonGroup/ButtonGroup.test.tsx +13 -0
- package/src/Calendar/Calendar.doc.mjs +3 -3
- package/src/Calendar/Calendar.test.tsx +112 -0
- package/src/Calendar/Calendar.tsx +18 -16
- package/src/Calendar/hooks/useCalendarDays.ts +4 -4
- package/src/Calendar/hooks/useCalendarNavigation.ts +4 -4
- package/src/Calendar/styles.ts +48 -42
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.test.tsx +360 -0
- package/src/Carousel/Carousel.tsx +116 -15
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +5 -0
- package/src/CodeBlock/CodeBlock.doc.mjs +10 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteItem.tsx +2 -12
- package/src/ComplexSelector/ComplexSelector.doc.mjs +7 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +183 -0
- package/src/ComplexSelector/ComplexSelector.tsx +22 -12
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.test.tsx +9 -4
- package/src/DateInput/DateInput.tsx +54 -3
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/MonthScroller.tsx +5 -1
- package/src/DateInput/MonthYearWheels.tsx +7 -4
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +83 -33
- package/src/DateInput/Wheel.tsx +1 -0
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -0
- package/src/DateRangeInput/DateRangeInput.tsx +8 -13
- package/src/DateTimeInput/DateTimeInput.doc.mjs +38 -21
- package/src/DateTimeInput/DateTimeInput.test.tsx +76 -0
- package/src/DateTimeInput/DateTimeInput.tsx +54 -20
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +980 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +1437 -0
- package/src/Dialog/Dialog.test.tsx +185 -18
- package/src/Dialog/Dialog.tsx +35 -11
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/Heading/Heading.tsx +0 -1
- package/src/HoverCard/HoverCard.doc.mjs +8 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +137 -3
- package/src/HoverCard/useHoverCard.tsx +23 -3
- package/src/Icon/Icon.test.tsx +55 -1
- package/src/Icon/Icon.tsx +5 -3
- package/src/Icon/defaultIcons.tsx +11 -2
- package/src/Icon/globalIconRegistry.test.tsx +16 -3
- package/src/Icon/globalIconRegistry.tsx +37 -6
- package/src/Icon/index.ts +1 -0
- package/src/Icon/useIcon.ts +9 -2
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +2 -7
- package/src/Kbd/Kbd.test.tsx +0 -17
- package/src/Kbd/Kbd.tsx +2 -26
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/useLayer.test.tsx +368 -16
- package/src/Layer/useLayer.tsx +208 -35
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/parser.test.ts +33 -0
- package/src/Markdown/parser.ts +9 -3
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MultiSelector/MultiSelector.doc.mjs +22 -1
- package/src/MultiSelector/MultiSelector.test.tsx +205 -0
- package/src/MultiSelector/MultiSelector.tsx +103 -16
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavItem/navItemStyles.stylex.ts +0 -8
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +7 -4
- package/src/NumberInput/NumberInput.doc.mjs +26 -7
- package/src/NumberInput/NumberInput.test.tsx +563 -8
- package/src/NumberInput/NumberInput.tsx +77 -131
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +2 -4
- package/src/OverflowList/OverflowList.doc.mjs +102 -21
- package/src/OverflowList/OverflowList.test.tsx +550 -4
- package/src/OverflowList/OverflowList.tsx +100 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.doc.mjs +2 -2
- package/src/Popover/Popover.test.tsx +38 -0
- package/src/Popover/Popover.tsx +28 -66
- package/src/Popover/usePopover.tsx +44 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +87 -0
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +64 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +109 -10
- package/src/PowerSearch/formatFilterValue.test.ts +16 -1
- package/src/PowerSearch/formatFilterValue.ts +2 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/Resizable.doc.mjs +2 -2
- package/src/Resizable/useResizable.doc.mjs +21 -2
- package/src/Resizable/useResizable.test.ts +421 -0
- package/src/Resizable/useResizable.ts +133 -48
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +16 -0
- package/src/Selector/Selector.doc.mjs +14 -0
- package/src/Selector/Selector.source-build.test.mjs +65 -0
- package/src/Selector/Selector.test.tsx +301 -0
- package/src/Selector/Selector.tsx +145 -32
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +2 -2
- package/src/SideNav/SideNav.test.tsx +1069 -6
- package/src/SideNav/SideNav.tsx +109 -38
- package/src/SideNav/SideNavHeading.tsx +5 -2
- package/src/SideNav/SideNavItem.doc.mjs +24 -3
- package/src/SideNav/SideNavItem.tsx +134 -44
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +52 -1
- package/src/Spinner/Spinner.doc.mjs +17 -5
- package/src/Spinner/Spinner.test.tsx +164 -0
- package/src/Spinner/Spinner.tsx +252 -22
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +1 -1
- package/src/Stepper/Step.tsx +7 -14
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +3 -0
- package/src/Table/BaseTable.tsx +6 -1
- package/src/Table/Table.doc.mjs +5 -3
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +2 -2
- package/src/Table/TableFooter.doc.mjs +1 -1
- package/src/Table/TableHeader.doc.mjs +1 -1
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +50 -4
- package/src/Table/plugins/selection/useTableSelection.test.tsx +62 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +25 -2
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/useTableGroupedRows.doc.mjs +3 -3
- package/src/Table/useTablePagination.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +1 -1
- package/src/Text/Text.test.tsx +44 -0
- package/src/Text/Text.tsx +0 -1
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +34 -22
- package/src/Timestamp/Timestamp.test.tsx +89 -0
- package/src/Timestamp/Timestamp.tsx +8 -8
- package/src/Timestamp/formatInstant.ts +5 -0
- package/src/Toast/Toast.doc.mjs +213 -44
- package/src/Toast/Toast.tsx +118 -23
- package/src/Toast/ToastViewport.test.tsx +1434 -8
- package/src/Toast/ToastViewport.tsx +85 -14
- package/src/Toast/index.ts +2 -0
- package/src/Toast/types.ts +43 -5
- package/src/Toast/useToastGesture.ts +361 -0
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +19 -17
- package/src/Token/TokenLink.tsx +12 -3
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +49 -24
- package/src/TopNav/TopNavHeading.tsx +2 -2
- package/src/TopNav/TopNavItem.tsx +3 -7
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -4
- package/src/TopNav/TopNavMegaMenuItem.tsx +10 -9
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -5
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/TreeList/TreeListItem.tsx +2 -7
- package/src/Typeahead/BaseTypeahead.doc.mjs +13 -0
- package/src/Typeahead/BaseTypeahead.tsx +96 -6
- package/src/Typeahead/Typeahead.doc.mjs +6 -0
- package/src/Typeahead/Typeahead.test.tsx +154 -0
- package/src/Typeahead/Typeahead.tsx +9 -0
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useHotkeys.test.ts +0 -18
- package/src/hooks/useHotkeys.ts +3 -25
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useOverflow.doc.mjs +58 -17
- package/src/hooks/useOverflow.ts +16 -4
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +2 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/defineTheme.ts +12 -3
- package/src/theme/derivedVarRegistry.test.ts +87 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/theme/useTheme.test.tsx +10 -0
- package/src/theme/useTheme.ts +16 -10
- package/src/utils/dateParser.test.ts +34 -2
- package/src/utils/dateParser.ts +11 -14
- package/src/utils/focusOutline.stylex.ts +50 -0
- package/src/utils/interactionOverlay.stylex.ts +74 -0
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/plainDate.test.ts +46 -0
- package/src/utils/plainDate.ts +18 -3
package/src/hooks/useHotkeys.ts
CHANGED
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* unless a hotkey opts in via `allowInInputs`.
|
|
19
19
|
*
|
|
20
20
|
* Platform-aware: `mod` maps to metaKey (⌘) on Apple platforms and
|
|
21
|
-
* ctrlKey elsewhere
|
|
21
|
+
* ctrlKey elsewhere, through the same isApplePlatform util Kbd reads, so
|
|
22
|
+
* displayed and handled shortcuts cannot disagree.
|
|
22
23
|
*
|
|
23
24
|
* SYNC: When modified, update:
|
|
24
25
|
* - /packages/core/src/hooks/index.ts
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
*/
|
|
27
28
|
|
|
28
29
|
import {useEffect, useRef} from 'react';
|
|
30
|
+
import {isApplePlatform} from '../utils/isApplePlatform';
|
|
29
31
|
|
|
30
32
|
/**
|
|
31
33
|
* A single keyboard shortcut registration.
|
|
@@ -71,30 +73,6 @@ const KEY_ALIASES: Record<string, string> = {
|
|
|
71
73
|
plus: '+',
|
|
72
74
|
};
|
|
73
75
|
|
|
74
|
-
/**
|
|
75
|
-
* Detects whether the current platform is macOS/iOS.
|
|
76
|
-
* Prefers the User-Agent Client Hints API when it names a platform (modern
|
|
77
|
-
* Chrome/Edge), falls back to navigator.platform (deprecated but universally
|
|
78
|
-
* supported) when it is absent or blank.
|
|
79
|
-
* Mirrors the detection used by Kbd so displayed and handled shortcuts agree.
|
|
80
|
-
*/
|
|
81
|
-
function isApplePlatform(): boolean {
|
|
82
|
-
if (typeof navigator === 'undefined') {
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null;
|
|
86
|
-
if (uaData && typeof uaData === 'object' && 'platform' in uaData) {
|
|
87
|
-
const uaPlatform = (uaData as {platform?: unknown}).platform;
|
|
88
|
-
// A blank platform is no answer, not a negative one. Builds that rewrite
|
|
89
|
-
// their client-hints identity ship '', so fall through rather than
|
|
90
|
-
// reading it as "not Apple".
|
|
91
|
-
if (typeof uaPlatform === 'string' && uaPlatform.trim() !== '') {
|
|
92
|
-
return /mac/i.test(uaPlatform);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? '');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
76
|
/**
|
|
99
77
|
* Whether the event target is a typing surface where global shortcuts
|
|
100
78
|
* should stay silent by default.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
|
+
export const docs = {
|
|
5
|
+
name: 'useIndicatorFocusRing',
|
|
6
|
+
displayName: 'useIndicatorFocusRing',
|
|
7
|
+
keywords: [
|
|
8
|
+
'focus ring',
|
|
9
|
+
'focus',
|
|
10
|
+
'focus-visible',
|
|
11
|
+
'outline',
|
|
12
|
+
'indicator',
|
|
13
|
+
'checkbox',
|
|
14
|
+
'radio',
|
|
15
|
+
'visually hidden input',
|
|
16
|
+
'keyboard',
|
|
17
|
+
'accessibility',
|
|
18
|
+
'a11y',
|
|
19
|
+
'wcag',
|
|
20
|
+
],
|
|
21
|
+
params: [
|
|
22
|
+
{
|
|
23
|
+
name: 'containerRef',
|
|
24
|
+
type: 'RefObject<HTMLElement | null>',
|
|
25
|
+
description:
|
|
26
|
+
'Ref to an element wrapping only the indicator, so its single element child is unambiguously the thing to ring.',
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'isDisabled',
|
|
31
|
+
type: 'boolean',
|
|
32
|
+
description: 'Skip the ring; a disabled control is not focusable.',
|
|
33
|
+
default: 'false',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
returns: [
|
|
37
|
+
{
|
|
38
|
+
name: 'focusProps',
|
|
39
|
+
type: '{onFocus: (event: FocusEvent<HTMLElement>) => void; onBlur: () => void}',
|
|
40
|
+
description: 'Spread onto the element that owns the focusable input.',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
usage: {
|
|
44
|
+
description:
|
|
45
|
+
"Draws the standard focus ring on the indicator of a control whose real input is visually hidden; a checkbox or radio focuses an opacity-0 input, so the ring has to appear on the picture beside it. The ring is painted imperatively on the indicator's own element, which is the only element whose border-radius can shape it, and only on :focus-visible, so pointer clicks stay quiet. Owning it here means a theme-supplied indicator cannot ship a control with no visible focus (WCAG 2.4.7) by ignoring a prop.",
|
|
46
|
+
bestPractices: [
|
|
47
|
+
{
|
|
48
|
+
guidance: true,
|
|
49
|
+
description:
|
|
50
|
+
"Wrap only the indicator in the ref'd element; a wrapper holding label text would ring the whole row.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
guidance: true,
|
|
54
|
+
description:
|
|
55
|
+
'Spread focusProps on the element that contains the hidden input, not on the input itself.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
guidance: false,
|
|
59
|
+
description:
|
|
60
|
+
'Ask a themeable indicator to draw its own focus ring; a replacement that ignores the prop leaves the control with no visible focus.',
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
relatedComponents: ['CheckboxInput', 'RadioList', 'Selector'],
|
|
65
|
+
relatedHooks: ['useFocusTrap'],
|
|
66
|
+
importPath: '@astryxdesign/core/hooks',
|
|
67
|
+
category: 'focus',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
71
|
+
export const docsDense = {
|
|
72
|
+
description:
|
|
73
|
+
'Draws the standard focus ring on the indicator of a control whose input is visually hidden (checkbox / radio). Painted imperatively on the indicator element (only element whose border-radius shapes the outline), on :focus-visible only.',
|
|
74
|
+
paramDescriptions: {
|
|
75
|
+
containerRef:
|
|
76
|
+
'ref to element wrapping ONLY the indicator; its single element child gets the ring.',
|
|
77
|
+
isDisabled: 'skip the ring; disabled control is not focusable.',
|
|
78
|
+
},
|
|
79
|
+
returnDescriptions: {
|
|
80
|
+
focusProps:
|
|
81
|
+
'onFocus / onBlur to spread onto the element owning the focusable input.',
|
|
82
|
+
},
|
|
83
|
+
usage: {
|
|
84
|
+
description:
|
|
85
|
+
'Owner draws the ring so a theme-supplied indicator cannot ship a control w/ no visible focus (WCAG 2.4.7).',
|
|
86
|
+
bestPractices: [
|
|
87
|
+
{
|
|
88
|
+
guidance: true,
|
|
89
|
+
description:
|
|
90
|
+
"Wrap only the indicator in the ref'd element; a wrapper w/ label text rings the whole row.",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
guidance: true,
|
|
94
|
+
description:
|
|
95
|
+
'Spread focusProps on the element containing the hidden input, not the input.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
guidance: false,
|
|
99
|
+
description:
|
|
100
|
+
'Delegate the ring to a themeable indicator; a replacement that ignores it loses visible focus.',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
|
+
export const docs = {
|
|
5
|
+
name: 'useInputStatusIcon',
|
|
6
|
+
displayName: 'useInputStatusIcon',
|
|
7
|
+
keywords: [
|
|
8
|
+
'input',
|
|
9
|
+
'status',
|
|
10
|
+
'icon',
|
|
11
|
+
'error',
|
|
12
|
+
'warning',
|
|
13
|
+
'success',
|
|
14
|
+
'validation',
|
|
15
|
+
'tooltip',
|
|
16
|
+
'info tip',
|
|
17
|
+
'field',
|
|
18
|
+
'describedby',
|
|
19
|
+
'accessibility',
|
|
20
|
+
'a11y',
|
|
21
|
+
],
|
|
22
|
+
params: [
|
|
23
|
+
{
|
|
24
|
+
name: 'options',
|
|
25
|
+
type: 'UseInputStatusIconOptions',
|
|
26
|
+
description: 'Configuration object.',
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'options.status',
|
|
31
|
+
type: 'InputStatus',
|
|
32
|
+
description:
|
|
33
|
+
"The input's status (type plus message), or undefined when there is none.",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'options.statusVariant',
|
|
37
|
+
type: "'attached' | 'detached' | 'tooltip'",
|
|
38
|
+
description: 'How the status is presented relative to the input.',
|
|
39
|
+
default: "'attached'",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'options.isInGroup',
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
description:
|
|
45
|
+
'Whether the input sits inside an InputGroup, which owns status rendering itself.',
|
|
46
|
+
default: 'false',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'options.size',
|
|
50
|
+
type: 'IconSize',
|
|
51
|
+
description: 'Size of the on-field icon.',
|
|
52
|
+
default: "'md'",
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
returns: [
|
|
56
|
+
{
|
|
57
|
+
name: 'statusIcon',
|
|
58
|
+
type: 'ReactNode',
|
|
59
|
+
description:
|
|
60
|
+
'The affordance to render inside the input container: a plain icon, or a focusable info-tip button with its tooltip. Null when no icon should render.',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'describedBy',
|
|
64
|
+
type: 'string | undefined',
|
|
65
|
+
description:
|
|
66
|
+
"ID to add to the input's aria-describedby, present exactly when a tooltip element is in the DOM, so there is never a dangling reference.",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
usage: {
|
|
70
|
+
description:
|
|
71
|
+
'Builds the on-field status affordance for a bordered input and its accessibility wiring, so every input in the family behaves the same for a given status. The attached variant renders a plain glyph and leaves the text to the message box; the detached variant renders nothing here, because the message box already carries its own icon; the tooltip variant renders a real focusable button whose tooltip is reachable by keyboard, pointer, touch and assistive tech. Use it when building a bordered input, not for field-level messaging.',
|
|
72
|
+
bestPractices: [
|
|
73
|
+
{
|
|
74
|
+
guidance: true,
|
|
75
|
+
description:
|
|
76
|
+
"Render statusIcon inside the input container and merge describedBy into the control's aria-describedby list.",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
guidance: true,
|
|
80
|
+
description:
|
|
81
|
+
'Let it decide when nothing should render; pass isInGroup and the variant through rather than branching at the call site.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
guidance: false,
|
|
85
|
+
description:
|
|
86
|
+
'Use it to convey the status by icon alone; the tooltip variant is the only one that carries the message, so the others still need a message box.',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
relatedComponents: [
|
|
91
|
+
'TextInput',
|
|
92
|
+
'TextArea',
|
|
93
|
+
'NumberInput',
|
|
94
|
+
'DateInput',
|
|
95
|
+
'FileInput',
|
|
96
|
+
'FieldStatus',
|
|
97
|
+
'InputGroup',
|
|
98
|
+
],
|
|
99
|
+
relatedHooks: ['useInputContainer'],
|
|
100
|
+
importPath: '@astryxdesign/core/hooks',
|
|
101
|
+
category: 'interaction',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
105
|
+
export const docsDense = {
|
|
106
|
+
description:
|
|
107
|
+
'On-field status affordance + a11y wiring for bordered inputs. attached = plain glyph (message box carries text); detached = nothing (box has own icon); tooltip = focusable info-tip button reachable by keyboard / pointer / touch / AT.',
|
|
108
|
+
paramDescriptions: {
|
|
109
|
+
options: 'config.',
|
|
110
|
+
'options.status': 'input status (type + message), or undefined.',
|
|
111
|
+
'options.statusVariant': 'how status is presented relative to input.',
|
|
112
|
+
'options.isInGroup': 'inside InputGroup, which owns status rendering.',
|
|
113
|
+
'options.size': 'on-field icon size.',
|
|
114
|
+
},
|
|
115
|
+
returnDescriptions: {
|
|
116
|
+
statusIcon:
|
|
117
|
+
'node to render inside input container; null when nothing should render.',
|
|
118
|
+
describedBy:
|
|
119
|
+
'id for aria-describedby, present exactly when the tooltip element is in the DOM.',
|
|
120
|
+
},
|
|
121
|
+
usage: {
|
|
122
|
+
description:
|
|
123
|
+
'Use when building a bordered input so all inputs behave the same per status; not for field-level messaging.',
|
|
124
|
+
bestPractices: [
|
|
125
|
+
{
|
|
126
|
+
guidance: true,
|
|
127
|
+
description:
|
|
128
|
+
'Render statusIcon in the input container; merge describedBy into aria-describedby.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
guidance: true,
|
|
132
|
+
description:
|
|
133
|
+
'Pass isInGroup + variant through; let the hook decide when nothing renders.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
guidance: false,
|
|
137
|
+
description:
|
|
138
|
+
'Rely on the icon alone for meaning; only the tooltip variant carries the message.',
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
|
+
export const docs = {
|
|
5
|
+
name: 'useInteractiveRole',
|
|
6
|
+
displayName: 'useInteractiveRole',
|
|
7
|
+
keywords: [
|
|
8
|
+
'role',
|
|
9
|
+
'polymorphic',
|
|
10
|
+
'link',
|
|
11
|
+
'button',
|
|
12
|
+
'inert',
|
|
13
|
+
'href',
|
|
14
|
+
'onClick',
|
|
15
|
+
'element type',
|
|
16
|
+
'as',
|
|
17
|
+
'trigger',
|
|
18
|
+
'semantics',
|
|
19
|
+
'accessibility',
|
|
20
|
+
'a11y',
|
|
21
|
+
],
|
|
22
|
+
params: [
|
|
23
|
+
{
|
|
24
|
+
name: 'options',
|
|
25
|
+
type: 'UseInteractiveRoleOptions',
|
|
26
|
+
description: 'The interactivity inputs the component received.',
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'options.href',
|
|
31
|
+
type: 'string',
|
|
32
|
+
description:
|
|
33
|
+
'URL for navigation. Highest priority: with an href the component is a link.',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'options.onClick',
|
|
37
|
+
type: '((...args: never[]) => unknown) | null',
|
|
38
|
+
description:
|
|
39
|
+
'Click handler. Resolves to a button, ahead of any context-provided role.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'options.isDisabled',
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
description:
|
|
45
|
+
'When true, href is ignored for role resolution (a disabled link is an anti-pattern), so the role comes from onClick, then context, then inert.',
|
|
46
|
+
default: 'false',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
returns: [
|
|
50
|
+
{
|
|
51
|
+
name: 'role',
|
|
52
|
+
type: "'link' | 'button' | 'inert'",
|
|
53
|
+
description:
|
|
54
|
+
'The element the component should render: an anchor, a button, or a non-interactive span/div.',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
usage: {
|
|
58
|
+
description:
|
|
59
|
+
'Resolves what a polymorphic component should render as, in one place: href wins, then onClick, then an interactive trigger context supplied by a parent (Popover, DropdownMenu and friends), then inert. Use it in any component that is sometimes a link, sometimes a button, and sometimes plain content; Token, Thumbnail, Item and ClickableCard all do. Because context is part of the resolution, a component built on it becomes a valid trigger for new surfaces without changing.',
|
|
60
|
+
bestPractices: [
|
|
61
|
+
{
|
|
62
|
+
guidance: true,
|
|
63
|
+
description:
|
|
64
|
+
'Switch on the returned role to pick the element, and render an anchor only for "link" so keyboard and middle-click behavior come from the platform.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
guidance: true,
|
|
68
|
+
description:
|
|
69
|
+
'Pass isDisabled through rather than dropping the href yourself; the hook already keeps disabled links out of the tab order.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
guidance: false,
|
|
73
|
+
description:
|
|
74
|
+
'Add another ad-hoc href/onClick precedence check in a component; new trigger contexts are added here so every consumer inherits them.',
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
relatedComponents: ['Token', 'Thumbnail', 'Item', 'ClickableCard'],
|
|
79
|
+
relatedHooks: ['useClickableContainer'],
|
|
80
|
+
importPath: '@astryxdesign/core/hooks',
|
|
81
|
+
category: 'interaction',
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
85
|
+
export const docsDense = {
|
|
86
|
+
description:
|
|
87
|
+
'Resolves what a polymorphic component renders as: href -> link, onClick -> button, interactive trigger context -> its role, else inert. Single place the precedence lives.',
|
|
88
|
+
paramDescriptions: {
|
|
89
|
+
options: 'interactivity inputs the component received.',
|
|
90
|
+
'options.href': 'navigation URL; highest priority.',
|
|
91
|
+
'options.onClick': 'click handler; button, ahead of context role.',
|
|
92
|
+
'options.isDisabled':
|
|
93
|
+
'true = href ignored for resolution (disabled link is anti-pattern); falls to onClick / context / inert.',
|
|
94
|
+
},
|
|
95
|
+
returnDescriptions: {
|
|
96
|
+
role: "element to render: 'link' (anchor), 'button', or 'inert' (span/div).",
|
|
97
|
+
},
|
|
98
|
+
usage: {
|
|
99
|
+
description:
|
|
100
|
+
'For components that are sometimes link, sometimes button, sometimes plain content (Token, Thumbnail, Item, ClickableCard). Context-aware, so consumers become valid triggers for new surfaces w/o changing.',
|
|
101
|
+
bestPractices: [
|
|
102
|
+
{
|
|
103
|
+
guidance: true,
|
|
104
|
+
description:
|
|
105
|
+
'Switch on returned role; render a real anchor for "link" so platform keyboard / middle-click behavior applies.',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
guidance: true,
|
|
109
|
+
description:
|
|
110
|
+
'Pass isDisabled through instead of dropping href yourself.',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
guidance: false,
|
|
114
|
+
description:
|
|
115
|
+
'Re-implement href/onClick precedence per component; new trigger contexts are added here.',
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').HookDoc} */
|
|
4
|
+
export const docs = {
|
|
5
|
+
name: 'useLongPress',
|
|
6
|
+
displayName: 'useLongPress',
|
|
7
|
+
keywords: [
|
|
8
|
+
'long press',
|
|
9
|
+
'touch',
|
|
10
|
+
'press and hold',
|
|
11
|
+
'context menu',
|
|
12
|
+
'mobile',
|
|
13
|
+
'ios',
|
|
14
|
+
'safari',
|
|
15
|
+
'gesture',
|
|
16
|
+
'tap',
|
|
17
|
+
],
|
|
18
|
+
params: [
|
|
19
|
+
{
|
|
20
|
+
name: 'options',
|
|
21
|
+
type: 'UseLongPressOptions',
|
|
22
|
+
description: 'Configuration object.',
|
|
23
|
+
required: true,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'options.onLongPress',
|
|
27
|
+
type: '(point: {x: number; y: number}) => void',
|
|
28
|
+
description:
|
|
29
|
+
'Fired with the touch start point once the press is held for delayMs.',
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'options.disabled',
|
|
34
|
+
type: 'boolean',
|
|
35
|
+
description: 'When true, the returned touch handlers are inert.',
|
|
36
|
+
default: 'false',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'options.delayMs',
|
|
40
|
+
type: 'number',
|
|
41
|
+
description: 'Hold duration before the press fires, in milliseconds.',
|
|
42
|
+
default: '500',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'options.moveCancelPx',
|
|
46
|
+
type: 'number',
|
|
47
|
+
description:
|
|
48
|
+
'Movement past this distance on either axis cancels the press, treating it as a scroll or drag.',
|
|
49
|
+
default: '10',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
returns: [
|
|
53
|
+
{
|
|
54
|
+
name: 'handlers',
|
|
55
|
+
type: 'UseLongPressHandlers',
|
|
56
|
+
description:
|
|
57
|
+
'onTouchStart, onTouchMove, onTouchEnd and onTouchCancel to spread onto the target element.',
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
usage: {
|
|
61
|
+
description:
|
|
62
|
+
'Detects a single-finger press-and-hold and reports where it happened, so touch users can reach affordances that a pointer gets from right-click. iOS Safari never synthesizes a contextmenu event on long-press, which makes this the only touch route into a cursor-positioned surface such as ContextMenu. The press cancels on movement, lift, multi-touch or unmount.',
|
|
63
|
+
bestPractices: [
|
|
64
|
+
{
|
|
65
|
+
guidance: true,
|
|
66
|
+
description:
|
|
67
|
+
'Use the reported point to position the surface you open, so it appears under the finger.',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
guidance: true,
|
|
71
|
+
description:
|
|
72
|
+
'Pair it with the pointer contextmenu handler rather than replacing it; this hook only covers touch.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
guidance: false,
|
|
76
|
+
description:
|
|
77
|
+
'Use it for the primary action of a control; press-and-hold is undiscoverable as the only way to do something.',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
relatedComponents: ['ContextMenu'],
|
|
82
|
+
relatedHooks: ['useClickableContainer', 'useHotkeys'],
|
|
83
|
+
importPath: '@astryxdesign/core/hooks',
|
|
84
|
+
category: 'interaction',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
88
|
+
export const docsDense = {
|
|
89
|
+
description:
|
|
90
|
+
'Single-finger press-and-hold detection reporting the touch point. iOS Safari never fires contextmenu on long-press, so this is the only touch route to cursor-positioned surfaces. Cancels on move / lift / multi-touch / unmount.',
|
|
91
|
+
paramDescriptions: {
|
|
92
|
+
options: 'config.',
|
|
93
|
+
'options.onLongPress': 'fired w/ touch start point after delayMs.',
|
|
94
|
+
'options.disabled': 'true = handlers inert.',
|
|
95
|
+
'options.delayMs': 'hold duration before firing, ms.',
|
|
96
|
+
'options.moveCancelPx':
|
|
97
|
+
'movement past this (px, either axis) cancels as scroll / drag.',
|
|
98
|
+
},
|
|
99
|
+
returnDescriptions: {
|
|
100
|
+
handlers:
|
|
101
|
+
'onTouchStart / onTouchMove / onTouchEnd / onTouchCancel to spread onto the element.',
|
|
102
|
+
},
|
|
103
|
+
usage: {
|
|
104
|
+
description:
|
|
105
|
+
'Touch press-and-hold for affordances a pointer reaches by right-click (e.g. ContextMenu). Reports the point so the surface opens under the finger.',
|
|
106
|
+
bestPractices: [
|
|
107
|
+
{
|
|
108
|
+
guidance: true,
|
|
109
|
+
description: 'Position the opened surface at the reported point.',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
guidance: true,
|
|
113
|
+
description:
|
|
114
|
+
'Pair w/ pointer contextmenu handler; this covers touch only.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
guidance: false,
|
|
118
|
+
description:
|
|
119
|
+
'Make press-and-hold the only way to reach an action; it is undiscoverable.',
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
};
|
|
@@ -4,7 +4,17 @@
|
|
|
4
4
|
export const docs = {
|
|
5
5
|
name: 'useOverflow',
|
|
6
6
|
displayName: 'useOverflow',
|
|
7
|
-
keywords: [
|
|
7
|
+
keywords: [
|
|
8
|
+
'overflow',
|
|
9
|
+
'truncate',
|
|
10
|
+
'responsive',
|
|
11
|
+
'collapse',
|
|
12
|
+
'resize',
|
|
13
|
+
'measure',
|
|
14
|
+
'hidden',
|
|
15
|
+
'more',
|
|
16
|
+
'breadcrumb',
|
|
17
|
+
],
|
|
8
18
|
params: [
|
|
9
19
|
{
|
|
10
20
|
name: 'itemCount',
|
|
@@ -28,7 +38,8 @@ export const docs = {
|
|
|
28
38
|
{
|
|
29
39
|
name: 'options.minVisibleItems',
|
|
30
40
|
type: 'number',
|
|
31
|
-
description:
|
|
41
|
+
description:
|
|
42
|
+
"Minimum number of items to always show, even if they don't fit.",
|
|
32
43
|
default: '0',
|
|
33
44
|
required: false,
|
|
34
45
|
},
|
|
@@ -42,7 +53,8 @@ export const docs = {
|
|
|
42
53
|
{
|
|
43
54
|
name: 'options.behavior',
|
|
44
55
|
type: "'observeParent' | 'observeSelf'",
|
|
45
|
-
description:
|
|
56
|
+
description:
|
|
57
|
+
"Which element to observe for overflow calculations. 'observeParent' uses the container's parent element width, allowing the visible container to remain content-sized.",
|
|
46
58
|
default: "'observeSelf'",
|
|
47
59
|
required: false,
|
|
48
60
|
},
|
|
@@ -56,7 +68,8 @@ export const docs = {
|
|
|
56
68
|
{
|
|
57
69
|
name: 'measureRef',
|
|
58
70
|
type: 'React.RefCallback<HTMLElement>',
|
|
59
|
-
description:
|
|
71
|
+
description:
|
|
72
|
+
'Ref callback to attach to the hidden measurement container that holds all items.',
|
|
60
73
|
},
|
|
61
74
|
{
|
|
62
75
|
name: 'visibleCount',
|
|
@@ -66,16 +79,29 @@ export const docs = {
|
|
|
66
79
|
{
|
|
67
80
|
name: 'hasOverflow',
|
|
68
81
|
type: 'boolean',
|
|
69
|
-
description:
|
|
82
|
+
description:
|
|
83
|
+
'Whether any items are overflowing (visibleCount < itemCount).',
|
|
70
84
|
},
|
|
71
85
|
],
|
|
72
86
|
usage: {
|
|
73
87
|
description:
|
|
74
|
-
'Measures children rendered in a hidden container to determine how many fit in the available width without flickering. Uses ResizeObserver to react to container size changes. The measurement container should hold all items plus an optional overflow indicator element (identified by a data-overflow-indicator attribute).',
|
|
88
|
+
'Measures children rendered in a hidden container to determine how many fit in the available width without flickering. Uses ResizeObserver to react to container and measured-child size changes. The measurement container should hold all items plus an optional overflow indicator element (identified by a data-overflow-indicator attribute).',
|
|
75
89
|
bestPractices: [
|
|
76
|
-
{
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
{
|
|
91
|
+
guidance: true,
|
|
92
|
+
description:
|
|
93
|
+
'Render all items into the measureRef container (hidden) and only the first visibleCount items into the containerRef container (visible).',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
guidance: true,
|
|
97
|
+
description:
|
|
98
|
+
'Include an overflow indicator (e.g., "+N more" button) as the last child of the measurement container with a data-overflow-indicator attribute.',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
guidance: false,
|
|
102
|
+
description:
|
|
103
|
+
'Use for vertical overflow; this hook measures horizontal width only.',
|
|
104
|
+
},
|
|
79
105
|
],
|
|
80
106
|
},
|
|
81
107
|
relatedComponents: ['OverflowList', 'Breadcrumb'],
|
|
@@ -87,28 +113,43 @@ export const docs = {
|
|
|
87
113
|
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
88
114
|
export const docsDense = {
|
|
89
115
|
description:
|
|
90
|
-
'Measures children rendered in hidden container to determine how many fit in available width w/o flickering. Uses ResizeObserver to react to container size changes. Measurement container should hold all items plus optional overflow indicator element (identified by data-overflow-indicator attribute).',
|
|
116
|
+
'Measures children rendered in hidden container to determine how many fit in available width w/o flickering. Uses ResizeObserver to react to container and measured-child size changes. Measurement container should hold all items plus optional overflow indicator element (identified by data-overflow-indicator attribute).',
|
|
91
117
|
paramDescriptions: {
|
|
92
118
|
itemCount: 'total # items to measure for overflow.',
|
|
93
119
|
options: 'config for overflow behavior.',
|
|
94
120
|
'options.gap': 'gap between items in px. Used in width calculations.',
|
|
95
|
-
'options.minVisibleItems':
|
|
121
|
+
'options.minVisibleItems':
|
|
122
|
+
"min # items to always show, even if they don't fit.",
|
|
96
123
|
'options.collapseFrom': 'which end to collapse items from.',
|
|
97
|
-
'options.behavior':
|
|
124
|
+
'options.behavior':
|
|
125
|
+
"which element to observe for overflow calculations. 'observeParent' uses container's parent element width, allowing visible container to remain content-sized.",
|
|
98
126
|
},
|
|
99
127
|
returnDescriptions: {
|
|
100
128
|
containerRef: 'ref callback for visible container element.',
|
|
101
|
-
measureRef:
|
|
129
|
+
measureRef:
|
|
130
|
+
'ref callback for hidden measurement container holding all items.',
|
|
102
131
|
visibleCount: '# items that fit in visible container.',
|
|
103
132
|
hasOverflow: 'whether any items overflowing (visibleCount < itemCount).',
|
|
104
133
|
},
|
|
105
134
|
usage: {
|
|
106
135
|
description:
|
|
107
|
-
'Measures children rendered in hidden container to determine how many fit in available width w/o flickering. Uses ResizeObserver to react to container size changes. Measurement container should hold all items plus optional overflow indicator element (identified by data-overflow-indicator attribute).',
|
|
136
|
+
'Measures children rendered in hidden container to determine how many fit in available width w/o flickering. Uses ResizeObserver to react to container and measured-child size changes. Measurement container should hold all items plus optional overflow indicator element (identified by data-overflow-indicator attribute).',
|
|
108
137
|
bestPractices: [
|
|
109
|
-
{
|
|
110
|
-
|
|
111
|
-
|
|
138
|
+
{
|
|
139
|
+
guidance: true,
|
|
140
|
+
description:
|
|
141
|
+
'Render all items into measureRef container (hidden) + only first visibleCount items into containerRef container (visible).',
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
guidance: true,
|
|
145
|
+
description:
|
|
146
|
+
'Include overflow indicator (e.g. "+N more" button) as last child of measurement container w/ data-overflow-indicator attribute.',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
guidance: false,
|
|
150
|
+
description:
|
|
151
|
+
'Use for vertical overflow; this hook measures horizontal width only.',
|
|
152
|
+
},
|
|
112
153
|
],
|
|
113
154
|
},
|
|
114
155
|
};
|