@servicetitan/design-system 13.4.0 → 14.0.0
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/dist/components/ActionMenu/ActionMenu.css +29 -21
- package/dist/components/ActionMenu/ActionMenu.css.map +1 -1
- package/dist/components/ActionMenu/ActionMenu.d.ts +8 -2
- package/dist/components/ActionMenu/ActionMenu.js +46 -3
- package/dist/components/ActionMenu/ActionMenu.js.map +1 -1
- package/dist/components/ActionMenu/ActionMenu.stories.d.ts +39 -0
- package/dist/components/ActionMenu/ActionMenu.stories.js +249 -0
- package/dist/components/ActionMenu/ActionMenu.stories.js.map +1 -0
- package/dist/components/ActionMenu/ActionMenu.test.js.map +1 -1
- package/dist/components/ActionMenu/ActionMenuGroup.js.map +1 -1
- package/dist/components/ActionMenu/ActionMenuItem.js +2 -5
- package/dist/components/ActionMenu/ActionMenuItem.js.map +1 -1
- package/dist/components/ActionMenu/index.css +29 -21
- package/dist/components/ActionMenu/index.css.map +1 -1
- package/dist/components/ActionMenu/index.js.map +1 -1
- package/dist/components/ActionMenu/useLatestEvent.d.ts +2 -0
- package/dist/components/ActionMenu/useLatestEvent.js +20 -0
- package/dist/components/ActionMenu/useLatestEvent.js.map +1 -0
- package/dist/components/Announcement/Announcement.js.map +1 -1
- package/dist/components/Announcement/Announcement.test.js.map +1 -1
- package/dist/components/Announcement/index.js.map +1 -1
- package/dist/components/AnvilSelect/AnvilSelect.d.ts +2 -1
- package/dist/components/AnvilSelect/AnvilSelect.js +17 -41
- package/dist/components/AnvilSelect/AnvilSelect.js.map +1 -1
- package/dist/components/AnvilSelect/AnvilSelect.test.js.map +1 -1
- package/dist/components/AnvilSelect/components/DrillIn.js.map +1 -1
- package/dist/components/AnvilSelect/components/FocusProvider.d.ts +2 -1
- package/dist/components/AnvilSelect/components/FocusProvider.js.map +1 -1
- package/dist/components/AnvilSelect/components/SelectFooter.js +6 -6
- package/dist/components/AnvilSelect/components/SelectFooter.js.map +1 -1
- package/dist/components/AnvilSelect/components/SelectHeader.js.map +1 -1
- package/dist/components/AnvilSelect/components/SelectOptions.js.map +1 -1
- package/dist/components/AnvilSelect/components/Tree.js.map +1 -1
- package/dist/components/AnvilSelect/components/Trigger.js +2 -0
- package/dist/components/AnvilSelect/components/Trigger.js.map +1 -1
- package/dist/components/AnvilSelect/components/index.js.map +1 -1
- package/dist/components/AnvilSelect/index.js.map +1 -1
- package/dist/components/AnvilSelect/utils/FocusActionType.js.map +1 -1
- package/dist/components/AnvilSelect/utils/FocusContext.js.map +1 -1
- package/dist/components/AnvilSelect/utils/FooterAction.js.map +1 -1
- package/dist/components/AnvilSelect/utils/focus-utils.d.ts +0 -3
- package/dist/components/AnvilSelect/utils/focus-utils.js +1 -19
- package/dist/components/AnvilSelect/utils/focus-utils.js.map +1 -1
- package/dist/components/AnvilSelect/utils/index.js.map +1 -1
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/Avatar.test.js.map +1 -1
- package/dist/components/Avatar/index.js.map +1 -1
- package/dist/components/BackLink/BackLink.js.map +1 -1
- package/dist/components/BackLink/BackLink.test.js.map +1 -1
- package/dist/components/BackLink/index.js.map +1 -1
- package/dist/components/Backdrop/Backdrop.js.map +1 -1
- package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
- package/dist/components/Backdrop/index.js.map +1 -1
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Banner/Banner.test.js.map +1 -1
- package/dist/components/Banner/index.js.map +1 -1
- package/dist/components/BodyText/BodyText.js +2 -2
- package/dist/components/BodyText/BodyText.js.map +1 -1
- package/dist/components/BodyText/BodyText.test.js.map +1 -1
- package/dist/components/BodyText/index.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/BreadcrumbLink.js.map +1 -1
- package/dist/components/Breadcrumb/BreadcrumbLink.test.js.map +1 -1
- package/dist/components/Breadcrumb/index.js.map +1 -1
- package/dist/components/BreakPoint/BreakPoint.d.ts +2 -1
- package/dist/components/BreakPoint/BreakPoint.js.map +1 -1
- package/dist/components/BreakPoint/BreakPoint.test.js.map +1 -1
- package/dist/components/BreakPoint/index.js.map +1 -1
- package/dist/components/Button/Button.js +2 -10
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.test.js.map +1 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.test.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroupItem.js.map +1 -1
- package/dist/components/ButtonGroup/index.js.map +1 -1
- package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
- package/dist/components/ButtonToggle/ButtonToggle.js +11 -1
- package/dist/components/ButtonToggle/ButtonToggle.js.map +1 -1
- package/dist/components/ButtonToggle/ButtonToggle.test.js.map +1 -1
- package/dist/components/ButtonToggle/ButtonToggleItem.js +1 -1
- package/dist/components/ButtonToggle/ButtonToggleItem.js.map +1 -1
- package/dist/components/ButtonToggle/index.js.map +1 -1
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Card/Card.test.js.map +1 -1
- package/dist/components/Card/CardSection.js.map +1 -1
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Collapsible/Collapsible.js +1 -1
- package/dist/components/Collapsible/Collapsible.js.map +1 -1
- package/dist/components/Collapsible/Collapsible.test.js.map +1 -1
- package/dist/components/Collapsible/index.js.map +1 -1
- package/dist/components/ColorPicker/ColorPicker.css +6 -4
- package/dist/components/ColorPicker/ColorPicker.css.map +1 -1
- package/dist/components/ColorPicker/ColorPicker.d.ts +1 -7
- package/dist/components/ColorPicker/ColorPicker.js +14 -27
- package/dist/components/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/ColorPicker/ColorPicker.test.js.map +1 -1
- package/dist/components/ColorPicker/index.css +6 -4
- package/dist/components/ColorPicker/index.css.map +1 -1
- package/dist/components/ColorPicker/index.js.map +1 -1
- package/dist/components/Container/Container.js.map +1 -1
- package/dist/components/Container/index.js.map +1 -1
- package/dist/components/DataList/DataList.js +3 -3
- package/dist/components/DataList/DataList.js.map +1 -1
- package/dist/components/DataList/DataList.test.js.map +1 -1
- package/dist/components/DataList/DataListCell.d.ts +6 -4
- package/dist/components/DataList/DataListCell.js +2 -3
- package/dist/components/DataList/DataListCell.js.map +1 -1
- package/dist/components/DataList/DataListHeaderCell.d.ts +4 -2
- package/dist/components/DataList/DataListHeaderCell.js +2 -3
- package/dist/components/DataList/DataListHeaderCell.js.map +1 -1
- package/dist/components/DataList/DataListHeaderRow.js.map +1 -1
- package/dist/components/DataList/DataListRow.js.map +1 -1
- package/dist/components/DataList/index.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.js +9 -6
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.test.js.map +1 -1
- package/dist/components/DatePicker/InputDateMask.js +2 -2
- package/dist/components/DatePicker/InputDateMask.js.map +1 -1
- package/dist/components/DatePicker/index.js.map +1 -1
- package/dist/components/DatePicker/utils/expandMaskUtils.js.map +1 -1
- package/dist/components/DatePicker/utils/expandMaskUtils.test.js.map +1 -1
- package/dist/components/DatePicker/utils/maskUtils.js.map +1 -1
- package/dist/components/DatePicker/utils/utils.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.js +7 -2
- package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.test.js.map +1 -1
- package/dist/components/DateRangePicker/components/DateRangeInput.js +1 -1
- package/dist/components/DateRangePicker/components/DateRangeInput.js.map +1 -1
- package/dist/components/DateRangePicker/components/DateRangeOptionList.js.map +1 -1
- package/dist/components/DateRangePicker/components/DateRangeTrigger.js.map +1 -1
- package/dist/components/DateRangePicker/components/index.js.map +1 -1
- package/dist/components/DateRangePicker/index.js.map +1 -1
- package/dist/components/DateRangePicker/utils/checkScope.js.map +1 -1
- package/dist/components/DateRangePicker/utils/index.js.map +1 -1
- package/dist/components/Dialog/Dialog.d.ts +1 -0
- package/dist/components/Dialog/Dialog.js.map +1 -1
- package/dist/components/Dialog/Dialog.test.js.map +1 -1
- package/dist/components/Dialog/index.js.map +1 -1
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/Divider/Divider.test.js.map +1 -1
- package/dist/components/Divider/index.js.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +1 -0
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Drawer/Drawer.test.js.map +1 -1
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.d.ts +2 -1
- package/dist/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/Dropdown/DropdownIcon.js.map +1 -1
- package/dist/components/Dropdown/index.js.map +1 -1
- package/dist/components/Eyebrow/Eyebrow.js.map +1 -1
- package/dist/components/Eyebrow/Eyebrow.test.js.map +1 -1
- package/dist/components/Eyebrow/index.js.map +1 -1
- package/dist/components/FilePicker/FilePicker.js.map +1 -1
- package/dist/components/FilePicker/FilePicker.test.js.map +1 -1
- package/dist/components/FilePicker/index.js.map +1 -1
- package/dist/components/FilterButton/FilterButton.js.map +1 -1
- package/dist/components/FilterButton/FilterButton.test.js.map +1 -1
- package/dist/components/FilterButton/index.js.map +1 -1
- package/dist/components/FlowCard/FlowCard.d.ts +2 -1
- package/dist/components/FlowCard/FlowCard.js.map +1 -1
- package/dist/components/FlowCard/FlowCard.test.js.map +1 -1
- package/dist/components/FlowCard/FlowCardStep.js.map +1 -1
- package/dist/components/FlowCard/index.js.map +1 -1
- package/dist/components/Form/Form.js.map +1 -1
- package/dist/components/Form/Form.test.js.map +1 -1
- package/dist/components/Form/index.js.map +1 -1
- package/dist/components/FormControls/FormAnvilSelect.js.map +1 -1
- package/dist/components/FormControls/FormButton.js.map +1 -1
- package/dist/components/FormControls/FormButtonToggle.js.map +1 -1
- package/dist/components/FormControls/FormCheckbox.js.map +1 -1
- package/dist/components/FormControls/FormColorPicker.js.map +1 -1
- package/dist/components/FormControls/FormDatePicker.js.map +1 -1
- package/dist/components/FormControls/FormDateRangePicker.js.map +1 -1
- package/dist/components/FormControls/FormDropdown.js.map +1 -1
- package/dist/components/FormControls/FormInput.d.ts +1 -1
- package/dist/components/FormControls/FormInput.js.map +1 -1
- package/dist/components/FormControls/FormRadio.js.map +1 -1
- package/dist/components/FormControls/FormSelect.js.map +1 -1
- package/dist/components/FormControls/FormTextArea.js.map +1 -1
- package/dist/components/FormControls/FormTimePicker.js.map +1 -1
- package/dist/components/FormControls/FormToggleSwitch.js.map +1 -1
- package/dist/components/FormControls/FormTogglebox.js.map +1 -1
- package/dist/components/FormControls/index.js.map +1 -1
- package/dist/components/FormField/FormField.js +8 -6
- package/dist/components/FormField/FormField.js.map +1 -1
- package/dist/components/FormField/FormField.test.js.map +1 -1
- package/dist/components/FormField/FormFieldContext.js.map +1 -1
- package/dist/components/FormField/index.js.map +1 -1
- package/dist/components/FormGroup/FormGroup.js.map +1 -1
- package/dist/components/FormGroup/FormGroup.test.js.map +1 -1
- package/dist/components/FormGroup/index.js.map +1 -1
- package/dist/components/Frame/Frame.js.map +1 -1
- package/dist/components/Frame/Frame.test.js.map +1 -1
- package/dist/components/Frame/index.js.map +1 -1
- package/dist/components/Grid/Grid.js.map +1 -1
- package/dist/components/Grid/Grid.test.js.map +1 -1
- package/dist/components/Grid/GridColumn.js.map +1 -1
- package/dist/components/Grid/GridRow.js.map +1 -1
- package/dist/components/Grid/index.js.map +1 -1
- package/dist/components/Headline/Headline.js.map +1 -1
- package/dist/components/Headline/Headline.test.js.map +1 -1
- package/dist/components/Headline/index.js.map +1 -1
- package/dist/components/Icon/Icon.js.map +1 -1
- package/dist/components/Icon/Icon.test.js.map +1 -1
- package/dist/components/Icon/index.js.map +1 -1
- package/dist/components/InlineEdit/InlineEdit.js.map +1 -1
- package/dist/components/InlineEdit/InlineEdit.test.js.map +1 -1
- package/dist/components/InlineEdit/index.js.map +1 -1
- package/dist/components/Input/Input.d.ts +1 -0
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/Input.test.js.map +1 -1
- package/dist/components/Input/InputAddon.js.map +1 -1
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Input/inputProps.js.map +1 -1
- package/dist/components/KeyPressListener/KeyPressListener.js.map +1 -1
- package/dist/components/KeyPressListener/index.js.map +1 -1
- package/dist/components/Label/Label.js.map +1 -1
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Layout/Layout.test.js.map +1 -1
- package/dist/components/Layout/LayoutSection.js.map +1 -1
- package/dist/components/Layout/index.js.map +1 -1
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/Link/Link.test.js.map +1 -1
- package/dist/components/Link/index.js.map +1 -1
- package/dist/components/Mask/Mask.js.map +1 -1
- package/dist/components/Mask/Mask.test.js.map +1 -1
- package/dist/components/Mask/index.js.map +1 -1
- package/dist/components/Modal/Modal.js +4 -5
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/Modal.test.js.map +1 -1
- package/dist/components/Modal/components.d.ts +1 -0
- package/dist/components/Modal/components.js.map +1 -1
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/MoreDetails/MoreDetails.js.map +1 -1
- package/dist/components/MoreDetails/MoreDetails.test.js.map +1 -1
- package/dist/components/MoreDetails/index.js.map +1 -1
- package/dist/components/OptionList/Option.js.map +1 -1
- package/dist/components/OptionList/OptionList.d.ts +2 -0
- package/dist/components/OptionList/OptionList.js +6 -2
- package/dist/components/OptionList/OptionList.js.map +1 -1
- package/dist/components/OptionList/OptionList.test.js.map +1 -1
- package/dist/components/OptionList/index.js.map +1 -1
- package/dist/components/OptionList/useOnExpand.js.map +1 -1
- package/dist/components/Page/Page.js.map +1 -1
- package/dist/components/Page/Page.test.js.map +1 -1
- package/dist/components/Page/components/ActionToolbar.js.map +1 -1
- package/dist/components/Page/components/Panel.js.map +1 -1
- package/dist/components/Page/components/index.js.map +1 -1
- package/dist/components/Page/index.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +2 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/Popover.test.js.map +1 -1
- package/dist/components/Popover/components.d.ts +2 -0
- package/dist/components/Popover/components.js.map +1 -1
- package/dist/components/Popover/index.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.test.js.map +1 -1
- package/dist/components/ProgressBar/index.js.map +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.js.map +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.test.js.map +1 -1
- package/dist/components/ProgressCircle/index.js.map +1 -1
- package/dist/components/ProgressTracker/ProgressTracker.js.map +1 -1
- package/dist/components/ProgressTracker/ProgressTracker.test.js.map +1 -1
- package/dist/components/ProgressTracker/ProgressTrackerDivider.js +3 -3
- package/dist/components/ProgressTracker/ProgressTrackerDivider.js.map +1 -1
- package/dist/components/ProgressTracker/ProgressTrackerStep.js.map +1 -1
- package/dist/components/ProgressTracker/index.js.map +1 -1
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Radio/Radio.test.js.map +1 -1
- package/dist/components/Radio/index.js.map +1 -1
- package/dist/components/Scroll/Scroll.js.map +1 -1
- package/dist/components/Scroll/Scroll.test.js.map +1 -1
- package/dist/components/Scroll/index.js.map +1 -1
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/Select.test.js.map +1 -1
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SideNav/SideNav.d.ts +1 -0
- package/dist/components/SideNav/SideNav.js +20 -5
- package/dist/components/SideNav/SideNav.js.map +1 -1
- package/dist/components/SideNav/SideNav.test.js.map +1 -1
- package/dist/components/SideNav/SideNavGroup.js.map +1 -1
- package/dist/components/SideNav/SideNavItem.css +4 -2
- package/dist/components/SideNav/SideNavItem.css.map +1 -1
- package/dist/components/SideNav/SideNavItem.d.ts +1 -0
- package/dist/components/SideNav/SideNavItem.js +13 -51
- package/dist/components/SideNav/SideNavItem.js.map +1 -1
- package/dist/components/SideNav/index.css +4 -2
- package/dist/components/SideNav/index.css.map +1 -1
- package/dist/components/SideNav/index.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.test.js.map +1 -1
- package/dist/components/Sidebar/SidebarSection.js.map +1 -1
- package/dist/components/Sidebar/index.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts +1 -0
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.test.js.map +1 -1
- package/dist/components/Snackbar/index.js.map +1 -1
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/Spinner/Spinner.test.js.map +1 -1
- package/dist/components/Spinner/index.js.map +1 -1
- package/dist/components/Stack/Stack.js.map +1 -1
- package/dist/components/Stack/Stack.test.js.map +1 -1
- package/dist/components/Stack/StackItem.js.map +1 -1
- package/dist/components/Stack/index.js.map +1 -1
- package/dist/components/StatusLight/StatusLight.js.map +1 -1
- package/dist/components/StatusLight/StatusLight.test.js.map +1 -1
- package/dist/components/StatusLight/index.js.map +1 -1
- package/dist/components/Tab/Tab.js +1 -1
- package/dist/components/Tab/Tab.js.map +1 -1
- package/dist/components/Tab/Tab.test.js.map +1 -1
- package/dist/components/Tab/index.js.map +1 -1
- package/dist/components/TabGroup/TabGroup.js +8 -1
- package/dist/components/TabGroup/TabGroup.js.map +1 -1
- package/dist/components/TabGroup/TabGroup.test.js.map +1 -1
- package/dist/components/TabGroup/TabGroupItem.js.map +1 -1
- package/dist/components/TabGroup/components.d.ts +4 -2
- package/dist/components/TabGroup/components.js.map +1 -1
- package/dist/components/TabGroup/index.js.map +1 -1
- package/dist/components/Table/GridMod.js.map +1 -1
- package/dist/components/Table/Table.css +11 -1
- package/dist/components/Table/Table.css.map +1 -1
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/Table.test.js.map +1 -1
- package/dist/components/Table/TableLoadingPanel.js.map +1 -1
- package/dist/components/Table/components.js.map +1 -1
- package/dist/components/Table/index.css +11 -1
- package/dist/components/Table/index.css.map +1 -1
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Table/useTableMinWidth.js.map +1 -1
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Tag/Tag.test.js.map +1 -1
- package/dist/components/Tag/index.js.map +1 -1
- package/dist/components/TagGroup/TagGroup.js.map +1 -1
- package/dist/components/TagGroup/TagGroup.test.js.map +1 -1
- package/dist/components/TagGroup/TagGroupItem.js.map +1 -1
- package/dist/components/TagGroup/index.js.map +1 -1
- package/dist/components/Takeover/Takeover.js.map +1 -1
- package/dist/components/Takeover/Takeover.test.js.map +1 -1
- package/dist/components/Takeover/TakeoverFooter.js.map +1 -1
- package/dist/components/Takeover/TakeoverHeader.js.map +1 -1
- package/dist/components/Takeover/TakeoverSection.js.map +1 -1
- package/dist/components/Takeover/index.js.map +1 -1
- package/dist/components/Text/Text.js.map +1 -1
- package/dist/components/Text/Text.test.js.map +1 -1
- package/dist/components/Text/index.js.map +1 -1
- package/dist/components/TextArea/TextArea.d.ts +2 -1
- package/dist/components/TextArea/TextArea.js +1 -1
- package/dist/components/TextArea/TextArea.js.map +1 -1
- package/dist/components/TextArea/TextArea.test.js.map +1 -1
- package/dist/components/TextArea/index.js.map +1 -1
- package/dist/components/Thumbnail/Thumbnail.js.map +1 -1
- package/dist/components/Thumbnail/Thumbnail.test.js.map +1 -1
- package/dist/components/Thumbnail/index.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.js +10 -8
- package/dist/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.test.js +13 -4
- package/dist/components/TimePicker/TimePicker.test.js.map +1 -1
- package/dist/components/TimePicker/components/TimePickerOptionList.d.ts +1 -1
- package/dist/components/TimePicker/components/TimePickerOptionList.js +21 -25
- package/dist/components/TimePicker/components/TimePickerOptionList.js.map +1 -1
- package/dist/components/TimePicker/components/index.js.map +1 -1
- package/dist/components/TimePicker/index.js.map +1 -1
- package/dist/components/TimePicker/utils/TimePickerUtils.test.js.map +1 -1
- package/dist/components/TimePicker/utils/checkMinMax.js.map +1 -1
- package/dist/components/TimePicker/utils/filterOptions.js +7 -5
- package/dist/components/TimePicker/utils/filterOptions.js.map +1 -1
- package/dist/components/TimePicker/utils/generateOptions.js.map +1 -1
- package/dist/components/TimePicker/utils/getClosestOption.js.map +1 -1
- package/dist/components/TimePicker/utils/getOptionByText.js.map +1 -1
- package/dist/components/TimePicker/utils/highlightOption.js.map +1 -1
- package/dist/components/TimePicker/utils/index.js.map +1 -1
- package/dist/components/TimePicker/utils/injectOption.js.map +1 -1
- package/dist/components/TimePicker/utils/stringToDate.js.map +1 -1
- package/dist/components/TimePicker/utils/timezoneUtils.js.map +1 -1
- package/dist/components/TimePicker/utils/toTimeFormat.js.map +1 -1
- package/dist/components/TimePicker/utils/utils.js +10 -12
- package/dist/components/TimePicker/utils/utils.js.map +1 -1
- package/dist/components/Toast/Toast.d.ts +2 -1
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Toast/Toast.test.js.map +1 -1
- package/dist/components/Toast/ToastGroup.d.ts +1 -1
- package/dist/components/Toast/ToastGroup.js.map +1 -1
- package/dist/components/Toast/index.js.map +1 -1
- package/dist/components/ToggleSwitch/ToggleSwitch.js +8 -7
- package/dist/components/ToggleSwitch/ToggleSwitch.js.map +1 -1
- package/dist/components/ToggleSwitch/ToggleSwitch.test.js.map +1 -1
- package/dist/components/ToggleSwitch/index.js.map +1 -1
- package/dist/components/Togglebox/Togglebox.js.map +1 -1
- package/dist/components/Togglebox/Togglebox.test.js.map +1 -1
- package/dist/components/Togglebox/index.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +3 -4
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.test.js.map +1 -1
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +2 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.js +1 -1
- package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/components/VisuallyHidden/index.js.map +1 -1
- package/dist/components/index.css +50 -28
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/global/index.css +1 -1
- package/dist/global/version.css +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useArrowNav/index.d.ts +1 -0
- package/dist/hooks/useArrowNav/index.js +2 -0
- package/dist/hooks/useArrowNav/index.js.map +1 -0
- package/dist/hooks/useArrowNav/useArrowNav.d.ts +27 -0
- package/dist/hooks/useArrowNav/useArrowNav.js +65 -0
- package/dist/hooks/useArrowNav/useArrowNav.js.map +1 -0
- package/dist/hooks/useArrowNav/utils/index.d.ts +3 -0
- package/dist/hooks/useArrowNav/utils/index.js +4 -0
- package/dist/hooks/useArrowNav/utils/index.js.map +1 -0
- package/dist/hooks/useArrowNav/utils/keys.d.ts +3 -0
- package/dist/hooks/useArrowNav/utils/keys.js +12 -0
- package/dist/hooks/useArrowNav/utils/keys.js.map +1 -0
- package/dist/hooks/useArrowNav/utils/tabIndex.d.ts +2 -0
- package/dist/hooks/useArrowNav/utils/tabIndex.js +53 -0
- package/dist/hooks/useArrowNav/utils/tabIndex.js.map +1 -0
- package/dist/hooks/useArrowNav/utils/utils.d.ts +14 -0
- package/dist/hooks/useArrowNav/utils/utils.js +111 -0
- package/dist/hooks/useArrowNav/utils/utils.js.map +1 -0
- package/dist/hooks/useFocusTrap/index.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/index.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/useAutoFocus.js +12 -13
- package/dist/hooks/useFocusTrap/internal/useAutoFocus.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/useAutoFocusContainer.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/useDisableClickOutside.js +5 -5
- package/dist/hooks/useFocusTrap/internal/useDisableClickOutside.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/useFocusLock.js +4 -5
- package/dist/hooks/useFocusTrap/internal/useFocusLock.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/useRestoreFocus.js +4 -1
- package/dist/hooks/useFocusTrap/internal/useRestoreFocus.js.map +1 -1
- package/dist/hooks/useFocusTrap/internal/utils.d.ts +6 -2
- package/dist/hooks/useFocusTrap/internal/utils.js +27 -12
- package/dist/hooks/useFocusTrap/internal/utils.js.map +1 -1
- package/dist/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/hooks/useFocusVisible.js +9 -11
- package/dist/hooks/useFocusVisible.js.map +1 -1
- package/dist/hooks/useFocusVisible.test.js.map +1 -1
- package/dist/hooks/useMergedRef.js.map +1 -1
- package/dist/hooks/useScreenSize.js.map +1 -1
- package/dist/hooks/useScrollPosition.js.map +1 -1
- package/dist/hooks/useVisuallyHidden.js.map +1 -1
- package/dist/internal/CollapsibleList/CollapsibleContext.js.map +1 -1
- package/dist/internal/CollapsibleList/CollapsibleList.d.ts +2 -1
- package/dist/internal/CollapsibleList/CollapsibleList.js.map +1 -1
- package/dist/internal/CollapsibleList/CollapsibleListItem.d.ts +2 -1
- package/dist/internal/CollapsibleList/CollapsibleListItem.js +20 -2
- package/dist/internal/CollapsibleList/CollapsibleListItem.js.map +1 -1
- package/dist/internal/CollapsibleList/index.js.map +1 -1
- package/dist/internal/Overlay/Overlay.d.ts +2 -1
- package/dist/internal/Overlay/Overlay.js.map +1 -1
- package/dist/internal/Overlay/index.js.map +1 -1
- package/dist/internal/Popper/Popper.css +4 -2
- package/dist/internal/Popper/Popper.css.map +1 -1
- package/dist/internal/Popper/Popper.d.ts +1 -1
- package/dist/internal/Popper/Popper.js +3 -3
- package/dist/internal/Popper/Popper.js.map +1 -1
- package/dist/internal/Popper/index.css +4 -2
- package/dist/internal/Popper/index.css.map +1 -1
- package/dist/internal/Popper/index.js.map +1 -1
- package/dist/internal/Portal/Portal.d.ts +2 -1
- package/dist/internal/Portal/Portal.js.map +1 -1
- package/dist/internal/Portal/index.js.map +1 -1
- package/dist/internal/index.css +4 -2
- package/dist/internal/index.css.map +1 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/system-light.css +5 -9
- package/dist/system-light.css.map +1 -1
- package/dist/system-light.min.css +1 -1
- package/dist/system.css +86 -97
- package/dist/system.css.map +1 -1
- package/dist/system.js.map +1 -1
- package/dist/system.min.css +2 -2
- package/dist/utilities/AnvilProvider.js.map +1 -1
- package/dist/utilities/ConditionalWrapper.js.map +1 -1
- package/dist/utilities/DefaultPortalContext.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/KeyboardAccess.test.js +143 -32
- package/dist/utilities/KeyboardAccessTests/KeyboardAccess.test.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/components/KeyboardTester.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/components/components.d.ts +1 -0
- package/dist/utilities/KeyboardAccessTests/components/components.js +78 -39
- package/dist/utilities/KeyboardAccessTests/components/components.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/components/index.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/utils/index.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/utils/jestUtils.d.ts +1 -0
- package/dist/utilities/KeyboardAccessTests/utils/jestUtils.js +18 -0
- package/dist/utilities/KeyboardAccessTests/utils/jestUtils.js.map +1 -1
- package/dist/utilities/KeyboardAccessTests/utils/utils.d.ts +0 -1
- package/dist/utilities/KeyboardAccessTests/utils/utils.js +0 -16
- package/dist/utilities/KeyboardAccessTests/utils/utils.js.map +1 -1
- package/dist/utilities/OverlayContext.js.map +1 -1
- package/dist/utilities/SemanticUtils/index.js.map +1 -1
- package/dist/utilities/SemanticUtils/refUtils.js.map +1 -1
- package/dist/utilities/SemanticUtils/widths.js.map +1 -1
- package/dist/utilities/ThemeProvider.js.map +1 -1
- package/dist/utilities/TimezoneProvider/TimezoneProvider.js.map +1 -1
- package/dist/utilities/TimezoneProvider/TimezoneProvider.test.js.map +1 -1
- package/dist/utilities/TimezoneProvider/index.js.map +1 -1
- package/dist/utilities/color-utils.js.map +1 -1
- package/dist/utilities/dateFormat.js.map +1 -1
- package/dist/utilities/debounce.js.map +1 -1
- package/dist/utilities/getContent.js.map +1 -1
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/isElementOfType.js.map +1 -1
- package/dist/utilities/justify-props.js.map +1 -1
- package/dist/utilities/keyCodes.js.map +1 -1
- package/dist/utilities/usePrefersColorScheme.js.map +1 -1
- package/dist/utilities/useStorybookFigmaAddon.js.map +1 -1
- package/dist/utilities/wrapChildren.js.map +1 -1
- package/dist/utilities/wrapWithComponent.d.ts +1 -1
- package/dist/utilities/wrapWithComponent.js.map +1 -1
- package/package.json +29 -35
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { keys } from '../../../utilities';
|
|
2
|
+
import { queryOnScope, active, toArray, } from '../../useFocusTrap/internal/utils';
|
|
3
|
+
// Excluded: input[type=text], select, textarea, [contenteditable]
|
|
4
|
+
const focusableElements = [
|
|
5
|
+
'input[type=button]:not([disabled])',
|
|
6
|
+
'input[type=checkbox]:not([disabled])',
|
|
7
|
+
'input[type=radio]:not([disabled])',
|
|
8
|
+
'input[type=file]:not([disabled])',
|
|
9
|
+
'input[type=reset]:not([disabled])',
|
|
10
|
+
'input[type=submit]:not([disabled])',
|
|
11
|
+
'button:not([disabled])',
|
|
12
|
+
'a[href]',
|
|
13
|
+
'area[href]',
|
|
14
|
+
'summary',
|
|
15
|
+
'object',
|
|
16
|
+
'embed',
|
|
17
|
+
'audio[controls]',
|
|
18
|
+
'video[controls]',
|
|
19
|
+
'[tabindex]:not([disabled]):not([aria-disabled=true]):not(input):not(textarea):not(select)',
|
|
20
|
+
];
|
|
21
|
+
export const focusableSelector = focusableElements
|
|
22
|
+
.map((s) => s + ':not([hidden]):not([contenteditable])')
|
|
23
|
+
.join(',');
|
|
24
|
+
export { active, queryOnScope };
|
|
25
|
+
export const getScope = (scope) => {
|
|
26
|
+
if (!scope)
|
|
27
|
+
return null;
|
|
28
|
+
return toArray(scope)
|
|
29
|
+
.map((el) => { var _a; return (_a = el.current) !== null && _a !== void 0 ? _a : el; })
|
|
30
|
+
.filter((el) => el instanceof HTMLElement);
|
|
31
|
+
};
|
|
32
|
+
export const isInsideScope = (scope, el, keynavId) => {
|
|
33
|
+
const scopeElement = scope.find((item) => (item === null || item === void 0 ? void 0 : item.contains(el)) &&
|
|
34
|
+
isInsideSameKeynav(el, keynavId));
|
|
35
|
+
return !!scopeElement;
|
|
36
|
+
};
|
|
37
|
+
export const getFocusables = (scope, selectorOptions, tabLoop, key, keynavId) => {
|
|
38
|
+
const selector = getSelector(selectorOptions);
|
|
39
|
+
const focusables = queryOnScope(scope, selector).filter((el) => isInsideSameKeynav(el, keynavId));
|
|
40
|
+
const result = {
|
|
41
|
+
active: null,
|
|
42
|
+
next: null,
|
|
43
|
+
};
|
|
44
|
+
const current = focusables === null || focusables === void 0 ? void 0 : focusables.indexOf(active());
|
|
45
|
+
if (!focusables || current < 0)
|
|
46
|
+
return result;
|
|
47
|
+
result.active = focusables[current];
|
|
48
|
+
result.next = focusables[nextIdx(focusables, tabLoop, key)];
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
// Trims commas and whitespaces
|
|
52
|
+
const trim = (str) => {
|
|
53
|
+
let result = str, prevResult = '';
|
|
54
|
+
do {
|
|
55
|
+
prevResult = result;
|
|
56
|
+
result = result.trim().replace(/(^,)|(,$)/, '');
|
|
57
|
+
} while (result !== prevResult);
|
|
58
|
+
return result;
|
|
59
|
+
};
|
|
60
|
+
const isSelectorValid = (selector) => {
|
|
61
|
+
const queryCheck = (s) => document.createDocumentFragment().querySelector(s);
|
|
62
|
+
try {
|
|
63
|
+
queryCheck(selector);
|
|
64
|
+
}
|
|
65
|
+
catch (_a) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return true;
|
|
69
|
+
};
|
|
70
|
+
export const getSelector = (selectorOptions) => {
|
|
71
|
+
const { selector, extendSelector = '' } = selectorOptions;
|
|
72
|
+
let result;
|
|
73
|
+
if (selector) {
|
|
74
|
+
result = trim(selector);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
result = trim(focusableSelector + ',' + trim(extendSelector));
|
|
78
|
+
}
|
|
79
|
+
if (isSelectorValid(result))
|
|
80
|
+
return result;
|
|
81
|
+
console.warn('@servicetitan/design-system: useKeyNav() provided with invalid `selectorOptions`', result);
|
|
82
|
+
return focusableSelector;
|
|
83
|
+
};
|
|
84
|
+
const nextIdx = (focusables, loop, key) => {
|
|
85
|
+
const current = focusables === null || focusables === void 0 ? void 0 : focusables.indexOf(active());
|
|
86
|
+
const last = (focusables === null || focusables === void 0 ? void 0 : focusables.length) - 1;
|
|
87
|
+
if (key === keys.home)
|
|
88
|
+
return 0;
|
|
89
|
+
if (key === keys.end)
|
|
90
|
+
return last;
|
|
91
|
+
if ([keys.down, keys.right].includes(key)) {
|
|
92
|
+
if (current === last)
|
|
93
|
+
return loop ? 0 : last;
|
|
94
|
+
return current + 1;
|
|
95
|
+
}
|
|
96
|
+
if ([keys.up, keys.left].includes(key)) {
|
|
97
|
+
if (current === 0)
|
|
98
|
+
return loop ? last : 0;
|
|
99
|
+
return current - 1;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
export const createId = () => {
|
|
103
|
+
const res = Math.round(Math.random() * 0xffffff).toString(16);
|
|
104
|
+
return res;
|
|
105
|
+
};
|
|
106
|
+
export const isInsideSameKeynav = (el, keynavId) => {
|
|
107
|
+
var _a;
|
|
108
|
+
const closest = el.closest('[data-keynav]');
|
|
109
|
+
return keynavId === ((_a = closest === null || closest === void 0 ? void 0 : closest.dataset) === null || _a === void 0 ? void 0 : _a.keynav);
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useArrowNav/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { keys } from '../../../utilities';\nimport { UseArrowNavProps, SelectorOptions } from '../useArrowNav';\nimport {\n\tqueryOnScope,\n\tactive,\n\ttoArray,\n} from '../../useFocusTrap/internal/utils';\n\n// Excluded: input[type=text], select, textarea, [contenteditable]\nconst focusableElements = [\n\t'input[type=button]:not([disabled])',\n\t'input[type=checkbox]:not([disabled])',\n\t'input[type=radio]:not([disabled])',\n\t'input[type=file]:not([disabled])',\n\t'input[type=reset]:not([disabled])',\n\t'input[type=submit]:not([disabled])',\n\t'button:not([disabled])',\n\t'a[href]',\n\t'area[href]',\n\t'summary',\n\t'object',\n\t'embed',\n\t'audio[controls]',\n\t'video[controls]',\n\t'[tabindex]:not([disabled]):not([aria-disabled=true]):not(input):not(textarea):not(select)',\n];\n\nexport const focusableSelector = focusableElements\n\t.map((s) => s + ':not([hidden]):not([contenteditable])')\n\t.join(',');\n\nexport { active, queryOnScope };\n\nexport const getScope = (scope: UseArrowNavProps['scope']): HTMLElement[] => {\n\tif (!scope) return null;\n\n\treturn toArray(scope)\n\t\t.map((el) => (el as React.RefObject<any>).current ?? el)\n\t\t.filter((el) => el instanceof HTMLElement);\n};\n\nexport const isInsideScope = (\n\tscope: HTMLElement[],\n\tel: HTMLElement | Element,\n\tkeynavId: string\n) => {\n\tconst scopeElement = scope.find(\n\t\t(item) =>\n\t\t\titem?.contains(el) &&\n\t\t\tisInsideSameKeynav(el as HTMLElement, keynavId)\n\t);\n\n\treturn !!scopeElement;\n};\n\nexport interface IFocusables {\n\tactive: HTMLElement;\n\tnext: HTMLElement;\n}\n\nexport const getFocusables = (\n\tscope: HTMLElement[],\n\tselectorOptions: SelectorOptions,\n\ttabLoop: boolean,\n\tkey: string,\n\tkeynavId: string\n): IFocusables => {\n\tconst selector = getSelector(selectorOptions);\n\tconst focusables = queryOnScope(scope, selector).filter((el) =>\n\t\tisInsideSameKeynav(el, keynavId)\n\t);\n\tconst result: IFocusables = {\n\t\tactive: null,\n\t\tnext: null,\n\t};\n\n\tconst current = focusables?.indexOf(active() as any);\n\n\tif (!focusables || current < 0) return result;\n\n\tresult.active = focusables[current];\n\tresult.next = focusables[nextIdx(focusables, tabLoop, key)];\n\n\treturn result;\n};\n\n// Trims commas and whitespaces\nconst trim = (str: string) => {\n\tlet result = str,\n\t\tprevResult = '';\n\tdo {\n\t\tprevResult = result;\n\t\tresult = result.trim().replace(/(^,)|(,$)/, '');\n\t} while (result !== prevResult);\n\treturn result;\n};\n\nconst isSelectorValid = (selector: string) => {\n\tconst queryCheck = (s: string) =>\n\t\tdocument.createDocumentFragment().querySelector(s);\n\ttry {\n\t\tqueryCheck(selector);\n\t} catch {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nexport const getSelector = (selectorOptions: any) => {\n\tconst { selector, extendSelector = '' } = selectorOptions;\n\tlet result;\n\n\tif (selector) {\n\t\tresult = trim(selector);\n\t} else {\n\t\tresult = trim(focusableSelector + ',' + trim(extendSelector));\n\t}\n\tif (isSelectorValid(result)) return result;\n\n\tconsole.warn(\n\t\t'@servicetitan/design-system: useKeyNav() provided with invalid `selectorOptions`',\n\t\tresult\n\t);\n\treturn focusableSelector;\n};\n\nconst nextIdx = (focusables: any[], loop: boolean, key: string) => {\n\tconst current = focusables?.indexOf(active() as any);\n\tconst last = focusables?.length - 1;\n\n\tif (key === keys.home) return 0;\n\tif (key === keys.end) return last;\n\tif ([keys.down, keys.right].includes(key)) {\n\t\tif (current === last) return loop ? 0 : last;\n\t\treturn current + 1;\n\t}\n\tif ([keys.up, keys.left].includes(key)) {\n\t\tif (current === 0) return loop ? last : 0;\n\t\treturn current - 1;\n\t}\n};\n\nexport const createId = (): string => {\n\tconst res = Math.round(Math.random() * 0xffffff).toString(16);\n\n\treturn res;\n};\n\nexport const isInsideSameKeynav = (el: HTMLElement, keynavId: string) => {\n\tconst closest = el.closest('[data-keynav]') as HTMLElement;\n\n\treturn keynavId === closest?.dataset?.keynav;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './useFocusTrap';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './useAutoFocus';\nexport * from './useDisableClickOutside';\nexport * from './useFocusLock';\nexport * from './useRestoreFocus';\nexport * from './useAutoFocusContainer';\n"]}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { useEffect, useCallback } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { getScopeElements, getFocusables, priorityFocusableSelector, } from './utils';
|
|
3
3
|
export const useAutoFocus = (props) => {
|
|
4
|
-
const { scope
|
|
4
|
+
const { scope, enabled = true } = props;
|
|
5
5
|
const autoFocus = useCallback(() => {
|
|
6
|
-
var _a, _b
|
|
6
|
+
var _a, _b;
|
|
7
7
|
if (!enabled)
|
|
8
8
|
return;
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
9
|
+
const elements = getScopeElements(scope);
|
|
10
|
+
if (elements.length === 0)
|
|
11
11
|
return;
|
|
12
12
|
// Do not auto focus on wrappers, buttons and so on, if input exist
|
|
13
|
-
const priorityFocusable = (_a = getFocusables(
|
|
14
|
-
priorityFocusable
|
|
15
|
-
? priorityFocusable
|
|
16
|
-
: (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}, [enabled, initialScope]); // eslint-disable-line
|
|
13
|
+
const priorityFocusable = (_a = getFocusables(elements, priorityFocusableSelector)) === null || _a === void 0 ? void 0 : _a.first;
|
|
14
|
+
const focusElement = priorityFocusable
|
|
15
|
+
? priorityFocusable
|
|
16
|
+
: (_b = getFocusables(elements)) === null || _b === void 0 ? void 0 : _b.first;
|
|
17
|
+
focusElement === null || focusElement === void 0 ? void 0 : focusElement.focus(preventScroll);
|
|
18
|
+
}, [enabled, scope]);
|
|
19
|
+
useEffect(autoFocus, [enabled, scope]); // eslint-disable-line
|
|
21
20
|
};
|
|
22
21
|
const preventScroll = { preventScroll: true };
|
|
23
22
|
//# sourceMappingURL=useAutoFocus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAutoFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"useAutoFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,yBAAyB,GACzB,MAAM,SAAS,CAAC;AAQjB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAExC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,mEAAmE;QACnE,MAAM,iBAAiB,GAAG,MAAA,aAAa,CACtC,QAAQ,EACR,yBAAyB,CACzB,0CAAE,KAAK,CAAC;QAET,MAAM,YAAY,GAAG,iBAAiB;YACrC,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,MAAA,aAAa,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAC;QAElC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB;AAC/D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { useEffect, useCallback } from 'react';\nimport {\n\tgetScopeElements,\n\tgetFocusables,\n\tpriorityFocusableSelector,\n} from './utils';\nimport { FocusTrapShards } from '../';\n\nexport interface useAutoFocusProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n}\n\nexport const useAutoFocus = (props: useAutoFocusProps) => {\n\tconst { scope, enabled = true } = props;\n\n\tconst autoFocus = useCallback(() => {\n\t\tif (!enabled) return;\n\n\t\tconst elements = getScopeElements(scope);\n\t\tif (elements.length === 0) return;\n\n\t\t// Do not auto focus on wrappers, buttons and so on, if input exist\n\t\tconst priorityFocusable = getFocusables(\n\t\t\telements,\n\t\t\tpriorityFocusableSelector\n\t\t)?.first;\n\n\t\tconst focusElement = priorityFocusable\n\t\t\t? priorityFocusable\n\t\t\t: getFocusables(elements)?.first;\n\n\t\tfocusElement?.focus(preventScroll);\n\t}, [enabled, scope]);\n\n\tuseEffect(autoFocus, [enabled, scope]); // eslint-disable-line\n};\n\nconst preventScroll = { preventScroll: true };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAutoFocusContainer.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocusContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOlC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACzE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC;YAAE,OAAO,CAAC,4EAA4E;QAErI,WAAW,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB;AACtC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,EAAE;IACvC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACjC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;QACjC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;KACrD;AACF,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,EAAe,EAAE,EAAE;IACzC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/B,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"useAutoFocusContainer.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocusContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOlC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACzE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC;YAAE,OAAO,CAAC,4EAA4E;QAErI,WAAW,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB;AACtC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,EAAE;IACvC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACjC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;QACjC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;KACrD;AACF,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,EAAe,EAAE,EAAE;IACzC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/B,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\n\ninterface usePrefocusContainerProps {\n\tcontainerRef: React.RefObject<HTMLElement>;\n\tenabled?: boolean;\n}\n\n/**\n * Helper which provides focus handling over modals, dialogs, etc.\n * Sets focus on overlay wrapper if there is no other element already focused inside.\n */\nexport const useAutoFocusContainer = (props: usePrefocusContainerProps) => {\n\tconst { containerRef, enabled = false } = props;\n\n\tuseEffect(() => {\n\t\tconst container = containerRef.current;\n\n\t\tif (!enabled || !container) return;\n\t\tif (container.contains(document?.activeElement)) return; // Already has focus inside, e.g. some internal input was autofocused before\n\n\t\tsetTabindex(container);\n\t\tcontainer.focus({ preventScroll: true });\n\t}, [enabled]); // eslint-disable-line\n};\n\nconst setTabindex = (el: HTMLElement) => {\n\tif (!el.hasAttribute('tabIndex')) {\n\t\tel.tabIndex = 0; // Crucial value\n\t\tel.addEventListener('blur', () => clearTabindex(el));\n\t}\n};\nconst clearTabindex = (el: HTMLElement) => {\n\tel.removeAttribute('tabIndex');\n\tel.removeEventListener('blur', () => clearTabindex(el));\n};\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { getScopeElements, isInside } from './utils';
|
|
3
3
|
export const useDisableClickOutside = (props) => {
|
|
4
|
-
const { scope
|
|
4
|
+
const { scope, enabled = true, onClickOutside } = props;
|
|
5
5
|
useEffect(() => {
|
|
6
6
|
function handleClick(event) {
|
|
7
7
|
var _a, _b;
|
|
8
8
|
if (!enabled)
|
|
9
9
|
return;
|
|
10
10
|
const target = (_b = (_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)[0]) !== null && _b !== void 0 ? _b : event.target;
|
|
11
|
-
const
|
|
11
|
+
const elements = getScopeElements(scope);
|
|
12
12
|
// Suppress if inside current scope
|
|
13
|
-
if (isInside(
|
|
13
|
+
if (isInside(elements, target))
|
|
14
14
|
return; // How to prevent disabling on popovers?
|
|
15
15
|
event.stopPropagation();
|
|
16
16
|
event.preventDefault();
|
|
@@ -23,6 +23,6 @@ export const useDisableClickOutside = (props) => {
|
|
|
23
23
|
document === null || document === void 0 ? void 0 : document.removeEventListener('mousedown', handleClick);
|
|
24
24
|
document === null || document === void 0 ? void 0 : document.removeEventListener('touchstart', handleClick);
|
|
25
25
|
};
|
|
26
|
-
}, [
|
|
26
|
+
}, [enabled, scope, onClickOutside]);
|
|
27
27
|
};
|
|
28
28
|
//# sourceMappingURL=useDisableClickOutside.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDisableClickOutside.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useDisableClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useDisableClickOutside.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useDisableClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC5E,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,WAAW,CAAC,KAAU;;YAC9B,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,MAAM,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,+CAAlB,KAAK,EAAkB,CAAC,CAAC,mCAAI,KAAK,CAAC,MAAM,CAAC;YACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAEzC,mCAAmC;YACnC,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAAE,OAAO,CAAC,wCAAwC;YAEhF,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,cAAc;gBAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE;YACX,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACxD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { getScopeElements, isInside } from './utils';\nimport { FocusTrapShards } from '../';\n\ninterface useDisableClickOutsideProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n\tonClickOutside?: (e: React.SyntheticEvent) => void;\n}\n\nexport const useDisableClickOutside = (props: useDisableClickOutsideProps) => {\n\tconst { scope, enabled = true, onClickOutside } = props;\n\n\tuseEffect(() => {\n\t\tfunction handleClick(event: any) {\n\t\t\tif (!enabled) return;\n\n\t\t\tconst target = event.composedPath?.()[0] ?? event.target;\n\t\t\tconst elements = getScopeElements(scope);\n\n\t\t\t// Suppress if inside current scope\n\t\t\tif (isInside(elements, target)) return; // How to prevent disabling on popovers?\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tif (onClickOutside) onClickOutside(event);\n\t\t}\n\n\t\tdocument?.addEventListener('mousedown', handleClick);\n\t\tdocument?.addEventListener('touchstart', handleClick);\n\t\treturn () => {\n\t\t\tdocument?.removeEventListener('mousedown', handleClick);\n\t\t\tdocument?.removeEventListener('touchstart', handleClick);\n\t\t};\n\t}, [enabled, scope, onClickOutside]);\n};\n"]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
// More proper name to be useTabLoop
|
|
2
|
+
import { getScopeElements, isInside, tabIndexInside, focusNext, focusPrev, handleFocusablesUnmount, cleanFocusLockMarkers, setFocusLockMarkers, } from './utils';
|
|
4
3
|
export const useFocusLock = (props) => {
|
|
5
4
|
const { scope: initialScope, enabled = true } = props;
|
|
6
5
|
useEffect(() => {
|
|
7
6
|
if (!enabled) {
|
|
8
|
-
cleanFocusLockMarkers(
|
|
7
|
+
cleanFocusLockMarkers(getScopeElements(initialScope));
|
|
9
8
|
return;
|
|
10
9
|
}
|
|
11
|
-
setFocusLockMarkers(
|
|
10
|
+
setFocusLockMarkers(getScopeElements(initialScope));
|
|
12
11
|
// Warning in case tabIndex was set inside FocusLock
|
|
13
12
|
if (tabIndexInside(initialScope))
|
|
14
13
|
console.warn('@servicetitan/design-system: (FocusTrap) Avoid using tabIndex values greater than 0. Instead put elements in a logical sequence.');
|
|
@@ -17,7 +16,7 @@ export const useFocusLock = (props) => {
|
|
|
17
16
|
const shift = event.shiftKey;
|
|
18
17
|
if (!tab)
|
|
19
18
|
return; // Exit fast if no Tab key was pressed
|
|
20
|
-
const scope =
|
|
19
|
+
const scope = getScopeElements(initialScope);
|
|
21
20
|
if (scope.length === 0)
|
|
22
21
|
return;
|
|
23
22
|
// Prevent focus management if Tab happens outside or over nested useFocusLock
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusLock.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useFocusLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EACN,
|
|
1
|
+
{"version":3,"file":"useFocusLock.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useFocusLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EACN,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,SAAS,CAAC;AAOjB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,EAAE;IACrD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO,EAAE;YACb,qBAAqB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;YACtD,OAAO;SACP;QAED,mBAAmB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;QAEpD,oDAAoD;QACpD,IAAI,cAAc,CAAC,YAAY,CAAC;YAC/B,OAAO,CAAC,IAAI,CACX,kIAAkI,CAClI,CAAC;QAEH,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE7B,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,sCAAsC;YAExD,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,8EAA8E;YAC9E,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO;YAE3C,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,6FAA6F;YAE7H,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;gBAClB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxB,OAAO;aACP;YACD,IAAI,GAAG,IAAI,KAAK,EAAE;gBACjB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACxB;QACF,CAAC,CAAC;QAEF,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\n\nimport { FocusTrapShards } from '../';\nimport {\n\tgetScopeElements,\n\tisInside,\n\ttabIndexInside,\n\tfocusNext,\n\tfocusPrev,\n\thandleFocusablesUnmount,\n\tcleanFocusLockMarkers,\n\tsetFocusLockMarkers,\n} from './utils';\n\nexport interface FocusLockProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n}\n\nexport const useFocusLock = (props: FocusLockProps) => {\n\tconst { scope: initialScope, enabled = true } = props;\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tcleanFocusLockMarkers(getScopeElements(initialScope));\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusLockMarkers(getScopeElements(initialScope));\n\n\t\t// Warning in case tabIndex was set inside FocusLock\n\t\tif (tabIndexInside(initialScope))\n\t\t\tconsole.warn(\n\t\t\t\t'@servicetitan/design-system: (FocusTrap) Avoid using tabIndex values greater than 0. Instead put elements in a logical sequence.'\n\t\t\t);\n\n\t\tconst handleTab = (event: any) => {\n\t\t\tconst tab = event.code === 'Tab';\n\t\t\tconst shift = event.shiftKey;\n\n\t\t\tif (!tab) return; // Exit fast if no Tab key was pressed\n\n\t\t\tconst scope = getScopeElements(initialScope);\n\n\t\t\tif (scope.length === 0) return;\n\n\t\t\t// Prevent focus management if Tab happens outside or over nested useFocusLock\n\t\t\tif (!isInside(scope, event.target)) return;\n\n\t\t\thandleFocusablesUnmount(scope); // Case of removal currently focused focusable element, so that focus wouldn't go to the body\n\n\t\t\tif (tab && !shift) {\n\t\t\t\tfocusNext(scope, event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tab && shift) {\n\t\t\t\tfocusPrev(scope, event);\n\t\t\t}\n\t\t};\n\n\t\tdocument?.addEventListener('keydown', handleTab);\n\t\treturn () => document?.removeEventListener('keydown', handleTab);\n\t}, [initialScope, enabled]);\n};\n"]}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { active } from './utils';
|
|
2
3
|
export const useRestoreFocus = ({ enabled = true }) => {
|
|
3
4
|
const prevActiveRef = useRef(null);
|
|
4
5
|
useEffect(() => {
|
|
5
6
|
if (!enabled)
|
|
6
7
|
return;
|
|
7
|
-
|
|
8
|
+
if (active() !== (document === null || document === void 0 ? void 0 : document.body))
|
|
9
|
+
prevActiveRef.current = active();
|
|
10
|
+
// Focus previously active element on unmount
|
|
8
11
|
return () => { var _a; return (_a = prevActiveRef.current) === null || _a === void 0 ? void 0 : _a.focus(preventScroll); };
|
|
9
12
|
}, [enabled]);
|
|
10
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRestoreFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useRestoreFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useRestoreFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useRestoreFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE;IACrD,MAAM,aAAa,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,MAAM,EAAE,MAAK,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAA;YAAE,aAAa,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;QAElE,6CAA6C;QAC7C,OAAO,GAAG,EAAE,WAAC,OAAA,MAAA,aAAa,CAAC,OAAO,0CAAE,KAAK,CAAC,aAAa,CAAC,CAAA,EAAA,CAAC;IAC1D,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\nimport { active } from './utils';\n\nexport const useRestoreFocus = ({ enabled = true }) => {\n\tconst prevActiveRef = useRef<any>(null);\n\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tif (active() !== document?.body) prevActiveRef.current = active();\n\n\t\t// Focus previously active element on unmount\n\t\treturn () => prevActiveRef.current?.focus(preventScroll);\n\t}, [enabled]);\n};\n\nconst preventScroll = { preventScroll: true };\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FocusTrapShards } from '../';
|
|
2
|
-
export declare const focusableSelector
|
|
2
|
+
export declare const focusableSelector: string;
|
|
3
3
|
export declare const priorityFocusableSelector = "input, textarea";
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const active: () => HTMLElement;
|
|
5
|
+
export declare const getScopeElements: (shards: FocusTrapShards) => HTMLElement[];
|
|
5
6
|
export declare const queryOnScope: (scope: HTMLElement | HTMLElement[], selector: string) => HTMLElement[];
|
|
6
7
|
export declare const getFocusables: (scope: HTMLElement | HTMLElement[], selector?: string) => {
|
|
7
8
|
focusables: HTMLElement[];
|
|
@@ -18,6 +19,9 @@ export declare const shardsUtils: (initialScope: HTMLElement | HTMLElement[]) =>
|
|
|
18
19
|
};
|
|
19
20
|
export declare const focusNext: (scope: HTMLElement | HTMLElement[], event?: React.KeyboardEvent<HTMLElement>) => void;
|
|
20
21
|
export declare const focusPrev: (scope: HTMLElement | HTMLElement[], event?: React.KeyboardEvent<HTMLElement>) => void;
|
|
22
|
+
export declare const toArray: (obj: any) => any[];
|
|
23
|
+
export declare const prevIdx: (array: any[], current: number) => number;
|
|
24
|
+
export declare const nextIdx: (array: any[], current: number) => number;
|
|
21
25
|
export declare const handleFocusablesUnmount: (scope: HTMLElement[]) => void;
|
|
22
26
|
export declare const setFocusLockMarkers: (scope: HTMLElement[]) => void;
|
|
23
27
|
export declare const cleanFocusLockMarkers: (scope: HTMLElement[]) => void;
|
|
@@ -1,7 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
const focusableElements = [
|
|
2
|
+
'input:not([disabled]):not([type=hidden])',
|
|
3
|
+
'select:not([disabled])',
|
|
4
|
+
'textarea:not([disabled])',
|
|
5
|
+
'button:not([disabled])',
|
|
6
|
+
'a[href]',
|
|
7
|
+
'area[href]',
|
|
8
|
+
'summary',
|
|
9
|
+
'iframe',
|
|
10
|
+
'object',
|
|
11
|
+
'embed',
|
|
12
|
+
'audio[controls]',
|
|
13
|
+
'video[controls]',
|
|
14
|
+
'[contenteditable]',
|
|
15
|
+
'[tabindex]:not([disabled]):not([tabindex="-1"])',
|
|
16
|
+
];
|
|
17
|
+
export const focusableSelector = focusableElements.join(':not([hidden]):not([tabindex="-1"]),');
|
|
2
18
|
export const priorityFocusableSelector = 'input, textarea';
|
|
3
|
-
const active = () => document === null || document === void 0 ? void 0 : document.activeElement;
|
|
4
|
-
export const
|
|
19
|
+
export const active = () => document === null || document === void 0 ? void 0 : document.activeElement;
|
|
20
|
+
export const getScopeElements = (shards) => {
|
|
5
21
|
if (!shards)
|
|
6
22
|
return [];
|
|
7
23
|
return toArray(shards)
|
|
@@ -17,17 +33,16 @@ const queryOnElement = (el, selector) => {
|
|
|
17
33
|
result = result.concat(Array.from(nodeList));
|
|
18
34
|
return result.length > 0 ? result : null;
|
|
19
35
|
};
|
|
36
|
+
// True if `display: none`, etc.
|
|
37
|
+
const isHidden = (el) => !(el === null || el === void 0 ? void 0 : el.offsetWidth) || !(el === null || el === void 0 ? void 0 : el.offsetHeight);
|
|
20
38
|
export const queryOnScope = (scope, selector) => {
|
|
21
|
-
let targetElements =
|
|
22
|
-
scope instanceof Array
|
|
23
|
-
? (targetElements = scope)
|
|
24
|
-
: (targetElements = [scope]);
|
|
39
|
+
let targetElements = toArray(scope);
|
|
25
40
|
if (targetElements.length === 0)
|
|
26
41
|
return null;
|
|
27
42
|
targetElements = targetElements
|
|
28
43
|
.map((el) => queryOnElement(el, selector))
|
|
29
44
|
.flat()
|
|
30
|
-
.filter((el) => el);
|
|
45
|
+
.filter((el) => !isHidden(el));
|
|
31
46
|
if (targetElements.length === 0)
|
|
32
47
|
return null;
|
|
33
48
|
return targetElements;
|
|
@@ -64,7 +79,7 @@ const isInsideNestedTrap = (scopeElement, target) => {
|
|
|
64
79
|
return found;
|
|
65
80
|
};
|
|
66
81
|
export const tabIndexInside = (scope) => {
|
|
67
|
-
return
|
|
82
|
+
return getScopeElements(scope).some((el) => getFocusables(el).focusables.some((e) => getTabIndex(e) > 0));
|
|
68
83
|
};
|
|
69
84
|
export const shardsUtils = (initialScope) => {
|
|
70
85
|
let currentShardIdx = 0;
|
|
@@ -111,13 +126,13 @@ export const focusPrev = (scope, event) => {
|
|
|
111
126
|
shards.lastPrevShard.focus();
|
|
112
127
|
}
|
|
113
128
|
};
|
|
114
|
-
const toArray = (obj) => (obj instanceof Array ? obj : [obj]);
|
|
115
|
-
const prevIdx = (array, current) => {
|
|
129
|
+
export const toArray = (obj) => (obj instanceof Array ? obj : [obj]);
|
|
130
|
+
export const prevIdx = (array, current) => {
|
|
116
131
|
if (current < 0)
|
|
117
132
|
return current;
|
|
118
133
|
return current === 0 ? array.length - 1 : current - 1;
|
|
119
134
|
};
|
|
120
|
-
const nextIdx = (array, current) => {
|
|
135
|
+
export const nextIdx = (array, current) => {
|
|
121
136
|
if (current < 0)
|
|
122
137
|
return current;
|
|
123
138
|
return current === array.length - 1 ? 0 : current + 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { FocusTrapShards } from '../';\n\nconst focusableElements = [\n\t'input:not([disabled]):not([type=hidden])',\n\t'select:not([disabled])',\n\t'textarea:not([disabled])',\n\t'button:not([disabled])',\n\t'a[href]',\n\t'area[href]',\n\t'summary',\n\t'iframe',\n\t'object',\n\t'embed',\n\t'audio[controls]',\n\t'video[controls]',\n\t'[contenteditable]',\n\t'[tabindex]:not([disabled]):not([tabindex=\"-1\"])',\n];\n\nexport const focusableSelector = focusableElements.join(\n\t':not([hidden]):not([tabindex=\"-1\"]),'\n);\nexport const priorityFocusableSelector = 'input, textarea';\nexport const active = () => document?.activeElement as HTMLElement;\n\nexport const getScopeElements = (shards: FocusTrapShards): HTMLElement[] => {\n\tif (!shards) return [];\n\n\treturn toArray(shards)\n\t\t.map((el) => (el as React.RefObject<any>).current ?? el)\n\t\t.filter((el) => el instanceof HTMLElement);\n};\n\nconst queryOnElement = (el: HTMLElement, selector: string) => {\n\tlet result = [];\n\n\tif (el.matches(selector)) result.push(el); // Return self if matches\n\n\tconst nodeList = el.querySelectorAll(selector);\n\n\tif (nodeList.length > 0)\n\t\tresult = result.concat(Array.from(nodeList) as HTMLElement[]);\n\n\treturn result.length > 0 ? result : null;\n};\n\n// True if `display: none`, etc.\nconst isHidden = (el: HTMLElement) => !el?.offsetWidth || !el?.offsetHeight;\n\nexport const queryOnScope = (\n\tscope: HTMLElement | HTMLElement[],\n\tselector: string\n) => {\n\tlet targetElements: HTMLElement[] = toArray(scope);\n\n\tif (targetElements.length === 0) return null;\n\n\ttargetElements = targetElements\n\t\t.map((el) => queryOnElement(el, selector))\n\t\t.flat()\n\t\t.filter((el) => !isHidden(el));\n\n\tif (targetElements.length === 0) return null;\n\n\treturn targetElements;\n};\n\nexport const getFocusables = (\n\tscope: HTMLElement | HTMLElement[],\n\tselector: string = focusableSelector // Crucial thing\n) => {\n\tconst focusables = queryOnScope(scope, selector);\n\n\tif (!focusables || focusables.length === 0)\n\t\treturn { focusables: [], first: null, last: null };\n\n\tconst first = focusables[0];\n\tconst last = focusables[focusables.length - 1];\n\n\treturn { focusables, first, last };\n};\n\nexport const isInside = (\n\tscope: HTMLElement[],\n\ttarget: HTMLElement | Element\n) => {\n\tconst scopeElement = scope.find((item) => item?.contains(target));\n\n\tif (!scopeElement) return false;\n\n\t// Check if target element is inside another FocusTrap scope\n\tif (isInsideNestedTrap(scopeElement, target)) return false;\n\n\treturn true;\n};\n\nconst isInsideNestedTrap = (\n\tscopeElement: HTMLElement,\n\ttarget: HTMLElement | Element\n) => {\n\tlet current = target;\n\tlet found = false;\n\n\t// Check if some parent of active element has nested useFocusTrap marker\n\twhile (scopeElement.contains(current) && scopeElement !== current) {\n\t\tif (current.hasAttribute('data-focus-locked')) {\n\t\t\tfound = true; // Nested scope found\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = current.parentElement;\n\t}\n\treturn found;\n};\n\nexport const tabIndexInside = (scope: FocusTrapShards) => {\n\treturn getScopeElements(scope).some((el) =>\n\t\tgetFocusables(el).focusables.some((e) => getTabIndex(e) > 0)\n\t);\n};\n\nexport const shardsUtils = (initialScope: HTMLElement | HTMLElement[]) => {\n\tlet currentShardIdx = 0;\n\tconst scope = toArray(initialScope);\n\n\tscope.forEach((el, i) => {\n\t\tif (el?.contains(active())) currentShardIdx = i;\n\t});\n\n\tconst nextShardIdx = nextIdx(scope, currentShardIdx);\n\tconst prevShardIdx = prevIdx(scope, currentShardIdx);\n\n\tconst current = getFocusables(scope[currentShardIdx]);\n\tconst next = getFocusables(scope[nextShardIdx]);\n\tconst prev = getFocusables(scope[prevShardIdx]);\n\n\treturn {\n\t\tfirstCurrentShard: current?.first,\n\t\tlastCurrentShard: current?.last,\n\t\tfirstNextShard: next.first,\n\t\tlastPrevShard: prev.last,\n\t};\n};\n\nexport const focusNext = (\n\tscope: HTMLElement | HTMLElement[],\n\tevent?: React.KeyboardEvent<HTMLElement>\n) => {\n\tconst { first, last } = getFocusables(scope);\n\tconst shards = shardsUtils(scope);\n\n\tif (active() === last) {\n\t\tevent?.preventDefault(); // Prevent focus on focusable outside of useFocusLock\n\t\tfirst.focus();\n\t\treturn;\n\t}\n\tif (active() === shards.lastCurrentShard) {\n\t\tevent?.preventDefault();\n\t\tshards.firstNextShard.focus();\n\t}\n};\n\nexport const focusPrev = (\n\tscope: HTMLElement | HTMLElement[],\n\tevent?: React.KeyboardEvent<HTMLElement>\n) => {\n\tconst { first, last } = getFocusables(scope);\n\tconst shards = shardsUtils(scope);\n\n\tif (active() === first) {\n\t\tevent?.preventDefault(); // Prevent focusing on focusable outside of useFocusLock scope\n\t\tlast.focus();\n\t\treturn;\n\t}\n\tif (active() === shards.firstCurrentShard) {\n\t\tevent?.preventDefault();\n\t\tshards.lastPrevShard.focus();\n\t}\n};\n\nexport const toArray = (obj: any) => (obj instanceof Array ? obj : [obj]);\n\nexport const prevIdx = (array: any[], current: number) => {\n\tif (current < 0) return current;\n\treturn current === 0 ? array.length - 1 : current - 1;\n};\n\nexport const nextIdx = (array: any[], current: number) => {\n\tif (current < 0) return current;\n\treturn current === array.length - 1 ? 0 : current + 1;\n};\n\nconst getTabIndex = (el: HTMLElement) => {\n\tconst idx = parseInt(el.getAttribute('tabIndex'), 10);\n\tif (!idx) return 0;\n\treturn idx;\n};\n\n// Focus on prev focusable if focusable was removed\nconst focusPrevOnUnmount = (el: HTMLElement, scope: HTMLElement[]) => {\n\tconst { focusables: f1 } = getFocusables(scope);\n\tconst idx = f1.indexOf(el);\n\tconst length1 = f1.length;\n\n\tsetTimeout(() => {\n\t\tconst { focusables: f2 } = getFocusables(scope);\n\n\t\tif (document?.body.contains(el)) return;\n\t\tif (f2.length === 0) return;\n\t\tif (length1 !== f2.length + 1) return;\n\n\t\tidx === 0 ? f2[f2.length - 1].focus() : f2[idx - 1].focus();\n\t}, 10);\n};\n\nexport const handleFocusablesUnmount = (scope: HTMLElement[]) => {\n\tconst once = { once: true };\n\n\tgetFocusables(scope).focusables.forEach((el) => {\n\t\tconst handleBlur = () => focusPrevOnUnmount(el, scope);\n\t\tel.removeEventListener('blur', handleBlur);\n\t\tel.addEventListener('blur', handleBlur, once);\n\t});\n};\n\nexport const setFocusLockMarkers = (scope: HTMLElement[]) => {\n\tscope.forEach((el) => el.setAttribute('data-focus-locked', ''));\n};\n\nexport const cleanFocusLockMarkers = (scope: HTMLElement[]) => {\n\tscope.forEach((el) => el.removeAttribute('data-focus-locked'));\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACZ,MAAM,YAAY,CAAC;AAiDpB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAA2B,EAAE,EACN,EAAE;IACzB,MAAM,EACL,SAAS,GAAG,KAAK,EACjB,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,GAAG,KAAK,EAChB,mBAAmB,GAAG,KAAK,EAC3B,SAAS,GAAG,IAAI,EAChB,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,KAER,KAAK,EADL,IAAI,UACJ,KAAK,EATH,6GASL,CAAQ,CAAC;IACV,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAiC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC;IAExC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC;QACrB,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,CAAC,QAAQ,IAAI,kBAAkB;KACxC,CAAC,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IACH,sBAAsB,iBACrB,KAAK,EACL,OAAO,EAAE,CAAC,QAAQ,IAAI,mBAAmB,IACtC,IAAI,EACN,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACZ,MAAM,YAAY,CAAC;AAiDpB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAA2B,EAAE,EACN,EAAE;IACzB,MAAM,EACL,SAAS,GAAG,KAAK,EACjB,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,GAAG,KAAK,EAChB,mBAAmB,GAAG,KAAK,EAC3B,SAAS,GAAG,IAAI,EAChB,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,KAER,KAAK,EADL,IAAI,UACJ,KAAK,EATH,6GASL,CAAQ,CAAC;IACV,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAiC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC;IAExC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC;QACrB,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,CAAC,QAAQ,IAAI,kBAAkB;KACxC,CAAC,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IACH,sBAAsB,iBACrB,KAAK,EACL,OAAO,EAAE,CAAC,QAAQ,IAAI,mBAAmB,IACtC,IAAI,EACN,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC","sourcesContent":["import { useRef } from 'react';\n\nimport {\n\tuseAutoFocus,\n\tuseAutoFocusContainer,\n\tuseRestoreFocus,\n\tuseDisableClickOutside,\n\tuseFocusLock,\n} from './internal';\n\nexport type FocusTrapShards = (\n\t| HTMLElement\n\t| React.RefObject<HTMLElement>\n\t| React.MutableRefObject<HTMLElement>\n)[];\n\nexport interface UseFocusTrapProps {\n\t/**\n\t * Sets focus on first focusable element.\n\t * Default is false.\n\t */\n\tautoFocus?: boolean;\n\n\t/**\n\t * Sets focus on container referenced within useFocusTrap.\n\t * Default is false.\n\t *\n\t * Required to properly handle focus inside Modal, Drawer, etc.\n\t * Executed before useAutoFocus hook, thus might be overriden by it.\n\t */\n\tautoFocusContainer?: boolean;\n\n\t/** Disables everything: focus lock, auto focus, restore focus, etc. */\n\tdisabled?: boolean;\n\n\t/**\n\t * Prevents focus to move to another focusable element outside of useFocusTrap when clicked/tapped.\n\t * Default is false.\n\t */\n\tdisableClickOutside?: boolean;\n\n\t/**\n\t * Prevent user from from tabbing focus out of scope'ed elements\n\t * Default is true.\n\t */\n\tfocusLock?: boolean;\n\n\t/**\n\t * Disables restoring focus position on unmount.\n\t * Default is true.\n\t */\n\trestoreFocus?: boolean;\n\n\t/** Array of refs or nodes, which useFocusTrap should consider as a part of it */\n\tshards?: FocusTrapShards;\n}\n\nexport const useFocusTrap = (\n\tprops: UseFocusTrapProps = {}\n): React.RefObject<any> => {\n\tconst {\n\t\tautoFocus = false,\n\t\tautoFocusContainer = false,\n\t\tdisabled = false,\n\t\tdisableClickOutside = false,\n\t\tfocusLock = true,\n\t\trestoreFocus = true,\n\t\tshards = [],\n\t\t...rest\n\t} = props;\n\tconst focusTrapRef = useRef(null) as React.RefObject<HTMLElement>;\n\tconst scope = [focusTrapRef, ...shards];\n\n\tuseRestoreFocus({ enabled: !disabled && restoreFocus });\n\tuseAutoFocusContainer({\n\t\tcontainerRef: focusTrapRef,\n\t\tenabled: !disabled && autoFocusContainer,\n\t});\n\tuseAutoFocus({\n\t\tscope,\n\t\tenabled: !disabled && autoFocus,\n\t});\n\tuseDisableClickOutside({\n\t\tscope,\n\t\tenabled: !disabled && disableClickOutside,\n\t\t...rest, // Passing onClickOutside\n\t});\n\tuseFocusLock({\n\t\tscope,\n\t\tenabled: !disabled && focusLock,\n\t});\n\n\treturn focusTrapRef;\n};\n"]}
|
|
@@ -1,36 +1,34 @@
|
|
|
1
1
|
import { useEffect, useState, useCallback } from 'react';
|
|
2
2
|
export const useFocusVisible = (target, onBlur, onFocus) => {
|
|
3
3
|
const [isFocusVisible, setIsFocusVisible] = useState(true);
|
|
4
|
-
const [
|
|
4
|
+
const [keyboardUser, setKeyboardUser] = useState(true);
|
|
5
5
|
const [focused, setFocused] = useState(false);
|
|
6
6
|
const focusFunction = (event) => {
|
|
7
|
-
|
|
8
|
-
onFocus(event);
|
|
7
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
9
8
|
setIsFocusVisible(true);
|
|
10
9
|
setFocused(true);
|
|
11
10
|
};
|
|
12
11
|
const blurFunction = (event) => {
|
|
13
|
-
|
|
14
|
-
onBlur(event);
|
|
12
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
15
13
|
setIsFocusVisible(false);
|
|
16
14
|
setFocused(false);
|
|
17
15
|
};
|
|
18
16
|
useEffect(() => {
|
|
19
|
-
setIsFocusVisible(
|
|
20
|
-
}, [focused,
|
|
17
|
+
setIsFocusVisible(keyboardUser);
|
|
18
|
+
}, [focused, keyboardUser]);
|
|
21
19
|
// KeyboardEvent
|
|
22
20
|
const keyboardEventHandler = useCallback(() => {
|
|
23
|
-
|
|
21
|
+
setKeyboardUser(true);
|
|
24
22
|
}, []);
|
|
25
23
|
// MouseEvent
|
|
26
24
|
const mouseEventHandler = useCallback(() => {
|
|
27
|
-
|
|
25
|
+
setKeyboardUser(false);
|
|
28
26
|
}, []);
|
|
29
27
|
const useEvent = (event, callback) => {
|
|
30
28
|
useEffect(() => {
|
|
31
29
|
const { current } = target;
|
|
32
|
-
current.addEventListener(event, callback);
|
|
33
|
-
return () => current.removeEventListener(event, callback);
|
|
30
|
+
current === null || current === void 0 ? void 0 : current.addEventListener(event, callback);
|
|
31
|
+
return () => current === null || current === void 0 ? void 0 : current.removeEventListener(event, callback);
|
|
34
32
|
}, [event, callback]);
|
|
35
33
|
};
|
|
36
34
|
useEvent('mousedown', mouseEventHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusVisible.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAA4B,EAC5B,MAAuD,EACvD,OAAwD,EACvD,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC9D,
|
|
1
|
+
{"version":3,"file":"useFocusVisible.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAA4B,EAC5B,MAAuD,EACvD,OAAwD,EACvD,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC9D,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAC;QACjB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC7D,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,CAAC,CAAC;QAChB,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,gBAAgB;IAChB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,eAAe,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,aAAa;IACb,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,eAAe,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAoB,EAAE,EAAE;QACxD,SAAS,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAC3B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAExC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState, useCallback } from 'react';\n\nexport const useFocusVisible = (\n\ttarget: React.RefObject<any>,\n\tonBlur?: (event: React.FocusEvent<HTMLElement>) => void,\n\tonFocus?: (event: React.FocusEvent<HTMLElement>) => void\n) => {\n\tconst [isFocusVisible, setIsFocusVisible] = useState(true);\n\tconst [keyboardUser, setKeyboardUser] = useState(true);\n\tconst [focused, setFocused] = useState(false);\n\n\tconst focusFunction = (event: React.FocusEvent<HTMLElement>) => {\n\t\tonFocus?.(event);\n\t\tsetIsFocusVisible(true);\n\t\tsetFocused(true);\n\t};\n\n\tconst blurFunction = (event: React.FocusEvent<HTMLElement>) => {\n\t\tonBlur?.(event);\n\t\tsetIsFocusVisible(false);\n\t\tsetFocused(false);\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsFocusVisible(keyboardUser);\n\t}, [focused, keyboardUser]);\n\n\t// KeyboardEvent\n\tconst keyboardEventHandler = useCallback(() => {\n\t\tsetKeyboardUser(true);\n\t}, []);\n\n\t// MouseEvent\n\tconst mouseEventHandler = useCallback(() => {\n\t\tsetKeyboardUser(false);\n\t}, []);\n\n\tconst useEvent = (event: string, callback: () => void) => {\n\t\tuseEffect(() => {\n\t\t\tconst { current } = target;\n\t\t\tcurrent?.addEventListener(event, callback);\n\t\t\treturn () => current?.removeEventListener(event, callback);\n\t\t}, [event, callback]);\n\t};\n\n\tuseEvent('mousedown', mouseEventHandler);\n\tuseEvent('mouseup', mouseEventHandler);\n\tuseEvent('keydown', keyboardEventHandler);\n\tuseEvent('keyup', keyboardEventHandler);\n\n\treturn { isFocusVisible, focusFunction, blurFunction };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusVisible.test.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFocusVisible.test.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport '@testing-library/jest-dom';\nimport userEvent from '@testing-library/user-event';\nimport { useFocusVisible } from './useFocusVisible';\n\nconst TestButton = ({ children, onFocus, onBlur }: any) => {\n\tconst btnRef = React.useRef(null);\n\tconst { isFocusVisible, focusFunction, blurFunction } = useFocusVisible(\n\t\tbtnRef,\n\t\tonFocus,\n\t\tonBlur\n\t);\n\treturn (\n\t\t<button\n\t\t\tclassName={isFocusVisible ? 'focus-visible' : ''}\n\t\t\tref={btnRef}\n\t\t\tonBlur={blurFunction}\n\t\t\tonFocus={focusFunction}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n};\n\ndescribe('useFocusVisible', () => {\n\tconst user = userEvent.setup();\n\n\tit('should have class focus-visible on Button on load', () => {\n\t\tconst { container } = render(<TestButton />);\n\t\tconst element = container.firstChild as HTMLElement;\n\n\t\t// expect that focus-visible class is added on initial load\n\t\texpect(element.classList.contains('focus-visible')).toBe(true);\n\t});\n\n\tit('should remove class focus-visible on mouse interaction', async () => {\n\t\tconst { getByText } = render(<TestButton>Test Button</TestButton>);\n\t\tconst element = getByText('Test Button');\n\t\texpect(element.classList.contains('focus-visible')).toBe(true);\n\n\t\t// click on the button and expect the class to be removed\n\t\tawait user.click(getByText('Test Button'));\n\t\texpect(element.classList.contains('focus-visible')).toBe(false);\n\t});\n\n\tit('should reintroduce focus-visible class after first time', async () => {\n\t\tconst { getByText } = render(\n\t\t\t<React.Fragment>\n\t\t\t\t<TestButton>Test Button 0</TestButton>\n\t\t\t\t<TestButton>Test Button 1</TestButton>\n\t\t\t</React.Fragment>\n\t\t);\n\t\tconst firstBtn = getByText('Test Button 0');\n\t\tconst secondBtn = getByText('Test Button 1');\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(true);\n\t\texpect(secondBtn.classList.contains('focus-visible')).toBe(true);\n\n\t\t// click first button and expect the class to be removed\n\t\tawait user.click(getByText('Test Button 0'));\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(false);\n\n\t\t// tab and shift tab to refocus first button\n\t\tawait user.tab();\n\t\tawait user.tab({ shift: true });\n\n\t\t// expect that first button will get the class back\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(true);\n\t});\n\n\tit('should call onFocus when focused', async () => {\n\t\t// const onFocus = console.log('working');\n\t\tconst onFocus = jest.fn();\n\t\trender(<TestButton onFocus={onFocus}>Hello</TestButton>);\n\n\t\tawait user.tab();\n\t\tawait user.tab({ shift: true });\n\t\texpect(onFocus).toHaveBeenCalledTimes(1);\n\t});\n\n\tit('should call onFocus when focused', async () => {\n\t\t// const onFocus = console.log('working');\n\t\tconst onBlur = jest.fn();\n\t\trender(<TestButton onBlur={onBlur}>Hello</TestButton>);\n\n\t\tawait user.tab();\n\t\texpect(onBlur).toHaveBeenCalledTimes(1);\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMergedRef.js","sourceRoot":"","sources":["../../src/hooks/useMergedRef.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,GAAG,IAAW;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACvB;iBAAM;gBACN,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;aAChC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"useMergedRef.js","sourceRoot":"","sources":["../../src/hooks/useMergedRef.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,GAAG,IAAW;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACvB;iBAAM;gBACN,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;aAChC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import React from 'react';\n\nexport function useMergedRef(...refs: any[]) {\n\tconst targetRef = React.useRef();\n\n\tReact.useEffect(() => {\n\t\trefs.forEach((ref) => {\n\t\t\tif (!ref) return;\n\n\t\t\tif (typeof ref === 'function') {\n\t\t\t\tref(targetRef.current);\n\t\t\t} else {\n\t\t\t\tref.current = targetRef.current;\n\t\t\t}\n\t\t});\n\t}, [refs]);\n\n\treturn targetRef;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScreenSize.js","sourceRoot":"","sources":["../../src/hooks/useScreenSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAExE,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC9D,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,OAAO,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC3D,KAAK,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACvD,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KACjE,CAAC;IAEF,MAAM,UAAU,GAAG;QAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC7D,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACxD,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1D,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KAChE,CAAC;IAEF,OAAO;QACN,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"useScreenSize.js","sourceRoot":"","sources":["../../src/hooks/useScreenSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAExE,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC9D,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,OAAO,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC3D,KAAK,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACvD,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KACjE,CAAC;IAEF,MAAM,UAAU,GAAG;QAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC7D,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACxD,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1D,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KAChE,CAAC;IAEF,OAAO;QACN,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC","sourcesContent":["import { tokens } from '@servicetitan/tokens/core';\nimport { useWindowSize } from '@react-hook/window-size';\n\nexport function useScreenSize() {\n\tconst [innerWidth, innerHeight] = useWindowSize();\n\n\tconst orientation = innerWidth > innerHeight ? 'landscape' : 'portrait';\n\n\tconst smallerThan = {\n\t\tmobile: innerWidth <= parseFloat(tokens.breakpointMobileLarge),\n\t\ttablet: innerWidth <= parseFloat(tokens.breakpointTablet),\n\t\tdesktop: innerWidth <= parseFloat(tokens.breakpointDesktop),\n\t\tlarge: innerWidth <= parseFloat(tokens.breakpointLarge),\n\t\twidescreen: innerWidth <= parseFloat(tokens.breakpointWidescreen),\n\t};\n\n\tconst largerThan = {\n\t\tmobile: innerWidth > parseFloat(tokens.breakpointMobileLarge),\n\t\ttablet: innerWidth > parseFloat(tokens.breakpointTablet),\n\t\tdesktop: innerWidth > parseFloat(tokens.breakpointDesktop),\n\t\tlarge: innerWidth > parseFloat(tokens.breakpointLarge),\n\t\twidescreen: innerWidth > parseFloat(tokens.breakpointWidescreen),\n\t};\n\n\treturn {\n\t\tsmallerThan,\n\t\tlargerThan,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\torientation,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollPosition.js","sourceRoot":"","sources":["../../src/hooks/useScrollPosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgBvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAA2B,EAAe,EAAE;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,WAAW,EAAE;YAClE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACjE;KACD;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc;QAC/C,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACP,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,IAAI,EAAE,EAAE;gBACP,MAAM,mBAAmB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;gBAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;gBAChE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC;gBAE9D,QAAQ,CAAC;oBACR,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;oBACzD,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,IAAI,EAAE,mBAAmB;wBACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;wBAC3B,CAAC,CAAC,KAAK;iBACR,CAAC,CAAC;aACH;QACF,CAAC,CAAC;QAEF,kCAAkC;QAClC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEpC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAIF,yEAAyE;AACzE,SAAS,EAAE,CACV,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,+CAArB,GAAG,EACF,GAAI,IAAoD,CACxD,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CACX,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,+CAAxB,GAAG,EACF,GAAI,IAAuD,CAC3D,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"useScrollPosition.js","sourceRoot":"","sources":["../../src/hooks/useScrollPosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgBvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAA2B,EAAe,EAAE;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,WAAW,EAAE;YAClE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACjE;KACD;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc;QAC/C,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACP,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,IAAI,EAAE,EAAE;gBACP,MAAM,mBAAmB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;gBAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;gBAChE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC;gBAE9D,QAAQ,CAAC;oBACR,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;oBACzD,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,IAAI,EAAE,mBAAmB;wBACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;wBAC3B,CAAC,CAAC,KAAK;iBACR,CAAC,CAAC;aACH;QACF,CAAC,CAAC;QAEF,kCAAkC;QAClC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEpC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAIF,yEAAyE;AACzE,SAAS,EAAE,CACV,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,+CAArB,GAAG,EACF,GAAI,IAAoD,CACxD,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CACX,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,+CAAxB,GAAG,EACF,GAAI,IAAuD,CAC3D,CAAC;AACH,CAAC","sourcesContent":["import { RefObject, useEffect, useState } from 'react';\n\ninterface ScrollState {\n\t/** Scroll position from top, false if no scrollbar */\n\ttop: number | boolean;\n\n\t/** Scroll position from right, false if no scrollbar */\n\tright: number | boolean;\n\n\t/** Scroll position from bottom, false if no scrollbar */\n\tbottom: number | boolean;\n\n\t/** Scroll position from left, false if no scrollbar */\n\tleft: number | boolean;\n}\n\nexport const useScrollPosition = (ref: RefObject<HTMLElement>): ScrollState => {\n\tif (process.env.NODE_ENV === 'development') {\n\t\tif (typeof ref !== 'object' || typeof ref.current === 'undefined') {\n\t\t\tconsole.error('useScrollPosition expects a single ref argument');\n\t\t}\n\t}\n\n\tconst [state, setState] = useState<ScrollState>({\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t});\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tconst handleScroll = () => {\n\t\t\tif (el) {\n\t\t\t\tconst horizontalScrollbar = el.scrollWidth > el.clientWidth;\n\t\t\t\tconst verticalScrollbar = el.scrollHeight > el.clientHeight;\n\n\t\t\t\tconst bottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t\t\tconst right = el.scrollWidth - el.scrollLeft - el.clientWidth;\n\n\t\t\t\tsetState({\n\t\t\t\t\ttop: verticalScrollbar ? Math.round(el.scrollTop) : false,\n\t\t\t\t\tright: horizontalScrollbar ? Math.round(right) : false,\n\t\t\t\t\tbottom: verticalScrollbar ? Math.round(bottom) : false,\n\t\t\t\t\tleft: horizontalScrollbar\n\t\t\t\t\t\t? Math.round(el.scrollLeft)\n\t\t\t\t\t\t: false,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/** Handle scroll once rendered */\n\t\trequestAnimationFrame(handleScroll);\n\n\t\tel && on(el, 'scroll', handleScroll, { capture: false, passive: true });\n\n\t\treturn () => el && off(el, 'scroll', handleScroll);\n\t}, [ref]);\n\n\treturn state;\n};\n\ntype El = Window | Document | HTMLElement | EventTarget;\n\n/* https://github.com/streamich/react-use/blob/master/src/misc/util.ts */\nfunction on<T extends El>(\n\tobj: T | null,\n\t...args:\n\t\t| Parameters<T['addEventListener']>\n\t\t| [string, Function | null, ...any]\n): void {\n\tobj?.addEventListener?.(\n\t\t...(args as Parameters<HTMLElement['addEventListener']>)\n\t);\n}\n\nfunction off<T extends El>(\n\tobj: T | null,\n\t...args:\n\t\t| Parameters<T['removeEventListener']>\n\t\t| [string, Function | null, ...any]\n): void {\n\tobj?.removeEventListener?.(\n\t\t...(args as Parameters<HTMLElement['removeEventListener']>)\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVisuallyHidden.js","sourceRoot":"","sources":["../../src/hooks/useVisuallyHidden.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,UAAU;KACH,CAAC;IAEnB,OAAO,EAAE,WAAW,EAAE,CAAC;AACxB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"useVisuallyHidden.js","sourceRoot":"","sources":["../../src/hooks/useVisuallyHidden.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,UAAU;KACH,CAAC;IAEnB,OAAO,EAAE,WAAW,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { CSSProperties } from 'react';\n\nexport const useVisuallyHidden = () => {\n\tconst hiddenStyle = {\n\t\tborder: 'none',\n\t\tdisplay: 'table-cell',\n\t\tfloat: 'left',\n\t\theight: '1px',\n\t\twidth: '1px',\n\t\tmaxWidth: '1px',\n\t\tminWidth: '1px',\n\t\tmargin: '-.5em -1px -.5em 0',\n\t\topacity: '0',\n\t\toverflow: 'hidden',\n\t\tpadding: '0',\n\t\tpointerEvents: 'none',\n\t\tposition: 'absolute',\n\t} as CSSProperties;\n\n\treturn { hiddenStyle };\n};\n"]}
|