@workday/canvas-kit-react 13.0.0-alpha.944-next.0 → 13.0.0-alpha.950-next.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/collection/index.ts +3 -0
- package/collection/lib/focusOnCurrentCursor.ts +55 -0
- package/collection/lib/listItemRemove.ts +21 -0
- package/collection/lib/useListItemRemoveOnDeleteKey.tsx +40 -0
- package/collection/lib/useListItemRovingFocus.tsx +8 -34
- package/collection/lib/useListLoader.ts +2 -0
- package/collection/lib/useListResetCursorOnBlur.tsx +16 -2
- package/collection/lib/useOverflowListItemMeasure.tsx +6 -2
- package/collection/lib/useOverflowListMeasure.ts +1 -1
- package/collection/lib/useOverflowListModel.tsx +90 -51
- package/collection/lib/useOverflowListTarget.tsx +5 -1
- package/collection/lib/useSelectionListModel.tsx +10 -0
- package/combobox/lib/hooks/useComboboxInput.ts +7 -10
- package/dist/commonjs/action-bar/lib/ActionBar.d.ts +676 -0
- package/dist/commonjs/action-bar/lib/ActionBar.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts +51 -0
- package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarList.d.ts +51 -0
- package/dist/commonjs/action-bar/lib/ActionBarList.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts +56 -0
- package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts +531 -0
- package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts.map +1 -1
- package/dist/commonjs/avatar/lib/Avatar.js +21 -21
- package/dist/commonjs/badge/lib/CountBadge.js +3 -3
- package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts +759 -385
- package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +56 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts +51 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts +28 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsMenu.d.ts +112 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsMenu.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +56 -0
- package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +531 -0
- package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
- package/dist/commonjs/button/lib/BaseButton.js +21 -21
- package/dist/commonjs/button/lib/DeleteButton.js +1 -1
- package/dist/commonjs/button/lib/PrimaryButton.js +2 -2
- package/dist/commonjs/button/lib/SecondaryButton.js +2 -2
- package/dist/commonjs/button/lib/TertiaryButton.js +18 -18
- package/dist/commonjs/card/lib/Card.js +1 -1
- package/dist/commonjs/card/lib/CardBody.js +1 -1
- package/dist/commonjs/card/lib/CardHeading.js +1 -1
- package/dist/commonjs/checkbox/lib/CheckBackground.js +3 -3
- package/dist/commonjs/checkbox/lib/CheckboxCheck.js +5 -5
- package/dist/commonjs/checkbox/lib/CheckboxContainer.js +1 -1
- package/dist/commonjs/checkbox/lib/CheckboxInput.js +5 -5
- package/dist/commonjs/checkbox/lib/CheckboxRipple.js +1 -1
- package/dist/commonjs/collection/index.d.ts +3 -0
- package/dist/commonjs/collection/index.d.ts.map +1 -1
- package/dist/commonjs/collection/index.js +3 -0
- package/dist/commonjs/collection/lib/ListBox.d.ts +78 -0
- package/dist/commonjs/collection/lib/ListBox.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/ListBox.js +3 -3
- package/dist/commonjs/collection/lib/focusOnCurrentCursor.d.ts +3 -0
- package/dist/commonjs/collection/lib/focusOnCurrentCursor.d.ts.map +1 -0
- package/dist/commonjs/collection/lib/focusOnCurrentCursor.js +45 -0
- package/dist/commonjs/collection/lib/listItemRemove.d.ts +3 -0
- package/dist/commonjs/collection/lib/listItemRemove.d.ts.map +1 -0
- package/dist/commonjs/collection/lib/listItemRemove.js +19 -0
- package/dist/commonjs/collection/lib/useGridModel.d.ts +73 -0
- package/dist/commonjs/collection/lib/useGridModel.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListItemAllowChildStrings.d.ts +5 -0
- package/dist/commonjs/collection/lib/useListItemAllowChildStrings.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListItemRegister.d.ts +5 -0
- package/dist/commonjs/collection/lib/useListItemRegister.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListItemRemoveOnDeleteKey.d.ts +86 -0
- package/dist/commonjs/collection/lib/useListItemRemoveOnDeleteKey.d.ts.map +1 -0
- package/dist/commonjs/collection/lib/useListItemRemoveOnDeleteKey.js +40 -0
- package/dist/commonjs/collection/lib/useListItemRovingFocus.d.ts +1 -1
- package/dist/commonjs/collection/lib/useListItemRovingFocus.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListItemRovingFocus.js +6 -29
- package/dist/commonjs/collection/lib/useListItemSelect.d.ts +5 -0
- package/dist/commonjs/collection/lib/useListItemSelect.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListLoader.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListLoader.js +2 -0
- package/dist/commonjs/collection/lib/useListModel.d.ts +73 -0
- package/dist/commonjs/collection/lib/useListModel.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListResetCursorOnBlur.d.ts +5 -0
- package/dist/commonjs/collection/lib/useListResetCursorOnBlur.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useListResetCursorOnBlur.js +13 -1
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts +23 -0
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListItemMeasure.js +5 -2
- package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts +23 -0
- package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListMeasure.js +1 -1
- package/dist/commonjs/collection/lib/useOverflowListModel.d.ts +945 -1
- package/dist/commonjs/collection/lib/useOverflowListModel.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListModel.js +73 -35
- package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts +23 -0
- package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useOverflowListTarget.js +4 -1
- package/dist/commonjs/collection/lib/useSelectionListModel.d.ts +94 -0
- package/dist/commonjs/collection/lib/useSelectionListModel.d.ts.map +1 -1
- package/dist/commonjs/collection/lib/useSelectionListModel.js +10 -0
- package/dist/commonjs/combobox/lib/Combobox.d.ts +113 -0
- package/dist/commonjs/combobox/lib/Combobox.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxCard.d.ts +10 -0
- package/dist/commonjs/combobox/lib/ComboboxCard.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxInput.d.ts +5 -0
- package/dist/commonjs/combobox/lib/ComboboxInput.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts +25 -0
- package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts +5 -0
- package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxMenuList.d.ts +10 -0
- package/dist/commonjs/combobox/lib/ComboboxMenuList.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/ComboboxMenuList.js +1 -1
- package/dist/commonjs/combobox/lib/ComboboxPopper.d.ts +5 -0
- package/dist/commonjs/combobox/lib/ComboboxPopper.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxInput.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxInput.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxInput.js +5 -9
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputArbitrary.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputArbitrary.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputConstrained.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputConstrained.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxModel.d.ts +101 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxModel.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts.map +1 -1
- package/dist/commonjs/combobox/lib/hooks/useSetPopupWidth.d.ts +5 -0
- package/dist/commonjs/combobox/lib/hooks/useSetPopupWidth.d.ts.map +1 -1
- package/dist/commonjs/common/lib/AccessibleHide.js +1 -1
- package/dist/commonjs/common/lib/CanvasProvider.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldContainer.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldField.js +1 -1
- package/dist/commonjs/form-field/lib/FormFieldGroupLabel.js +5 -5
- package/dist/commonjs/form-field/lib/FormFieldGroupList.js +3 -3
- package/dist/commonjs/form-field/lib/FormFieldHint.js +3 -3
- package/dist/commonjs/form-field/lib/FormFieldLabel.js +6 -6
- package/dist/commonjs/form-field/lib/formFieldStencil.js +8 -8
- package/dist/commonjs/icon/lib/AccentIcon.js +2 -2
- package/dist/commonjs/icon/lib/AppletIcon.js +1 -1
- package/dist/commonjs/icon/lib/Graphic.js +2 -2
- package/dist/commonjs/icon/lib/Svg.js +2 -2
- package/dist/commonjs/icon/lib/SystemIcon.js +1 -1
- package/dist/commonjs/icon/lib/SystemIconCircle.js +1 -1
- package/dist/commonjs/loading-dots/lib/LoadingDots.js +2 -2
- package/dist/commonjs/menu/lib/Menu.d.ts +112 -0
- package/dist/commonjs/menu/lib/Menu.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuCard.d.ts +10 -0
- package/dist/commonjs/menu/lib/MenuCard.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuCard.js +1 -1
- package/dist/commonjs/menu/lib/MenuContextTarget.d.ts +15 -0
- package/dist/commonjs/menu/lib/MenuContextTarget.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuItem.d.ts +11 -1
- package/dist/commonjs/menu/lib/MenuItem.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuItem.js +1 -1
- package/dist/commonjs/menu/lib/MenuList.d.ts +10 -0
- package/dist/commonjs/menu/lib/MenuList.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuList.js +3 -3
- package/dist/commonjs/menu/lib/MenuOption.d.ts +10 -0
- package/dist/commonjs/menu/lib/MenuOption.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuOption.js +1 -1
- package/dist/commonjs/menu/lib/MenuPopper.d.ts +5 -0
- package/dist/commonjs/menu/lib/MenuPopper.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/MenuTarget.d.ts +25 -0
- package/dist/commonjs/menu/lib/MenuTarget.d.ts.map +1 -1
- package/dist/commonjs/menu/lib/useMenuModel.d.ts +87 -0
- package/dist/commonjs/menu/lib/useMenuModel.d.ts.map +1 -1
- package/dist/commonjs/modal/lib/ModalBody.js +1 -1
- package/dist/commonjs/modal/lib/ModalCard.js +1 -1
- package/dist/commonjs/modal/lib/ModalHeading.js +1 -1
- package/dist/commonjs/modal/lib/ModalOverflowOverlay.js +1 -1
- package/dist/commonjs/modal/lib/ModalOverlay.js +2 -2
- package/dist/commonjs/popup/lib/PopupBody.js +1 -1
- package/dist/commonjs/popup/lib/PopupCard.js +2 -2
- package/dist/commonjs/popup/lib/PopupCloseIcon.js +1 -1
- package/dist/commonjs/popup/lib/PopupHeading.js +1 -1
- package/dist/commonjs/select/lib/Select.d.ts +118 -0
- package/dist/commonjs/select/lib/Select.d.ts.map +1 -1
- package/dist/commonjs/select/lib/SelectCard.d.ts +10 -0
- package/dist/commonjs/select/lib/SelectCard.d.ts.map +1 -1
- package/dist/commonjs/select/lib/SelectCard.js +1 -1
- package/dist/commonjs/select/lib/SelectInput.d.ts +5 -0
- package/dist/commonjs/select/lib/SelectInput.d.ts.map +1 -1
- package/dist/commonjs/select/lib/SelectInput.js +3 -3
- package/dist/commonjs/select/lib/SelectItem.d.ts +10 -0
- package/dist/commonjs/select/lib/SelectItem.d.ts.map +1 -1
- package/dist/commonjs/select/lib/hooks/useSelectCard.d.ts +5 -0
- package/dist/commonjs/select/lib/hooks/useSelectCard.d.ts.map +1 -1
- package/dist/commonjs/select/lib/hooks/useSelectInput.d.ts +5 -0
- package/dist/commonjs/select/lib/hooks/useSelectInput.d.ts.map +1 -1
- package/dist/commonjs/select/lib/hooks/useSelectModel.d.ts +93 -0
- package/dist/commonjs/select/lib/hooks/useSelectModel.d.ts.map +1 -1
- package/dist/commonjs/switch/lib/Switch.js +7 -7
- package/dist/commonjs/table/lib/Table.js +1 -1
- package/dist/commonjs/table/lib/TableBody.js +1 -1
- package/dist/commonjs/table/lib/TableCaption.js +1 -1
- package/dist/commonjs/table/lib/TableCell.js +1 -1
- package/dist/commonjs/table/lib/TableFooter.js +1 -1
- package/dist/commonjs/table/lib/TableHead.js +1 -1
- package/dist/commonjs/table/lib/TableHeader.js +1 -1
- package/dist/commonjs/table/lib/TableRow.js +1 -1
- package/dist/commonjs/tabs/lib/Tabs.d.ts +891 -44
- package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsItem.d.ts +57 -1
- package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsList.d.ts +56 -0
- package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +5 -0
- package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +56 -0
- package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsPanel.d.ts +56 -0
- package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/TabsPanels.d.ts +28 -0
- package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -1
- package/dist/commonjs/tabs/lib/useTabsModel.d.ts +867 -74
- package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
- package/dist/commonjs/text/lib/LabelText.js +6 -6
- package/dist/commonjs/text/lib/Text.js +16 -16
- package/dist/commonjs/text/lib/TypeLevelComponents.js +4 -4
- package/dist/commonjs/text-area/lib/TextArea.js +5 -5
- package/dist/commonjs/text-input/lib/InputGroup.js +6 -6
- package/dist/commonjs/text-input/lib/TextInput.js +5 -5
- package/dist/commonjs/toast/lib/Toast.js +1 -1
- package/dist/commonjs/toast/lib/ToastBody.js +1 -1
- package/dist/commonjs/toast/lib/ToastCloseIcon.js +1 -1
- package/dist/commonjs/toast/lib/ToastIcon.js +1 -1
- package/dist/commonjs/toast/lib/ToastMessage.js +1 -1
- package/dist/es6/action-bar/lib/ActionBar.d.ts +676 -0
- package/dist/es6/action-bar/lib/ActionBar.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarItem.d.ts +51 -0
- package/dist/es6/action-bar/lib/ActionBarItem.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarList.d.ts +51 -0
- package/dist/es6/action-bar/lib/ActionBarList.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts +56 -0
- package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
- package/dist/es6/action-bar/lib/useActionBarModel.d.ts +531 -0
- package/dist/es6/action-bar/lib/useActionBarModel.d.ts.map +1 -1
- package/dist/es6/avatar/lib/Avatar.js +21 -21
- package/dist/es6/badge/lib/CountBadge.js +3 -3
- package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts +759 -385
- package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +56 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts +51 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts +28 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsMenu.d.ts +112 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsMenu.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +56 -0
- package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
- package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +531 -0
- package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
- package/dist/es6/button/lib/BaseButton.js +21 -21
- package/dist/es6/button/lib/DeleteButton.js +1 -1
- package/dist/es6/button/lib/PrimaryButton.js +2 -2
- package/dist/es6/button/lib/SecondaryButton.js +2 -2
- package/dist/es6/button/lib/TertiaryButton.js +18 -18
- package/dist/es6/card/lib/Card.js +1 -1
- package/dist/es6/card/lib/CardBody.js +1 -1
- package/dist/es6/card/lib/CardHeading.js +1 -1
- package/dist/es6/checkbox/lib/CheckBackground.js +3 -3
- package/dist/es6/checkbox/lib/CheckboxCheck.js +5 -5
- package/dist/es6/checkbox/lib/CheckboxContainer.js +1 -1
- package/dist/es6/checkbox/lib/CheckboxInput.js +5 -5
- package/dist/es6/checkbox/lib/CheckboxRipple.js +1 -1
- package/dist/es6/collection/index.d.ts +3 -0
- package/dist/es6/collection/index.d.ts.map +1 -1
- package/dist/es6/collection/index.js +3 -0
- package/dist/es6/collection/lib/ListBox.d.ts +78 -0
- package/dist/es6/collection/lib/ListBox.d.ts.map +1 -1
- package/dist/es6/collection/lib/ListBox.js +3 -3
- package/dist/es6/collection/lib/focusOnCurrentCursor.d.ts +3 -0
- package/dist/es6/collection/lib/focusOnCurrentCursor.d.ts.map +1 -0
- package/dist/es6/collection/lib/focusOnCurrentCursor.js +41 -0
- package/dist/es6/collection/lib/listItemRemove.d.ts +3 -0
- package/dist/es6/collection/lib/listItemRemove.d.ts.map +1 -0
- package/dist/es6/collection/lib/listItemRemove.js +15 -0
- package/dist/es6/collection/lib/useGridModel.d.ts +73 -0
- package/dist/es6/collection/lib/useGridModel.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListItemAllowChildStrings.d.ts +5 -0
- package/dist/es6/collection/lib/useListItemAllowChildStrings.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListItemRegister.d.ts +5 -0
- package/dist/es6/collection/lib/useListItemRegister.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListItemRemoveOnDeleteKey.d.ts +86 -0
- package/dist/es6/collection/lib/useListItemRemoveOnDeleteKey.d.ts.map +1 -0
- package/dist/es6/collection/lib/useListItemRemoveOnDeleteKey.js +37 -0
- package/dist/es6/collection/lib/useListItemRovingFocus.d.ts +1 -1
- package/dist/es6/collection/lib/useListItemRovingFocus.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListItemRovingFocus.js +6 -29
- package/dist/es6/collection/lib/useListItemSelect.d.ts +5 -0
- package/dist/es6/collection/lib/useListItemSelect.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListLoader.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListLoader.js +2 -0
- package/dist/es6/collection/lib/useListModel.d.ts +73 -0
- package/dist/es6/collection/lib/useListModel.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListResetCursorOnBlur.d.ts +5 -0
- package/dist/es6/collection/lib/useListResetCursorOnBlur.d.ts.map +1 -1
- package/dist/es6/collection/lib/useListResetCursorOnBlur.js +14 -2
- package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts +23 -0
- package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListItemMeasure.js +5 -2
- package/dist/es6/collection/lib/useOverflowListMeasure.d.ts +23 -0
- package/dist/es6/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListMeasure.js +1 -1
- package/dist/es6/collection/lib/useOverflowListModel.d.ts +945 -1
- package/dist/es6/collection/lib/useOverflowListModel.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListModel.js +73 -35
- package/dist/es6/collection/lib/useOverflowListTarget.d.ts +23 -0
- package/dist/es6/collection/lib/useOverflowListTarget.d.ts.map +1 -1
- package/dist/es6/collection/lib/useOverflowListTarget.js +4 -1
- package/dist/es6/collection/lib/useSelectionListModel.d.ts +94 -0
- package/dist/es6/collection/lib/useSelectionListModel.d.ts.map +1 -1
- package/dist/es6/collection/lib/useSelectionListModel.js +10 -0
- package/dist/es6/combobox/lib/Combobox.d.ts +113 -0
- package/dist/es6/combobox/lib/Combobox.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxCard.d.ts +10 -0
- package/dist/es6/combobox/lib/ComboboxCard.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxInput.d.ts +5 -0
- package/dist/es6/combobox/lib/ComboboxInput.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxMenu.d.ts +25 -0
- package/dist/es6/combobox/lib/ComboboxMenu.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts +5 -0
- package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxMenuList.d.ts +10 -0
- package/dist/es6/combobox/lib/ComboboxMenuList.d.ts.map +1 -1
- package/dist/es6/combobox/lib/ComboboxMenuList.js +1 -1
- package/dist/es6/combobox/lib/ComboboxPopper.d.ts +5 -0
- package/dist/es6/combobox/lib/ComboboxPopper.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxInput.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxInput.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxInput.js +5 -9
- package/dist/es6/combobox/lib/hooks/useComboboxInputArbitrary.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxInputArbitrary.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxInputConstrained.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxInputConstrained.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxModel.d.ts +101 -0
- package/dist/es6/combobox/lib/hooks/useComboboxModel.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts.map +1 -1
- package/dist/es6/combobox/lib/hooks/useSetPopupWidth.d.ts +5 -0
- package/dist/es6/combobox/lib/hooks/useSetPopupWidth.d.ts.map +1 -1
- package/dist/es6/common/lib/AccessibleHide.js +1 -1
- package/dist/es6/common/lib/CanvasProvider.js +1 -1
- package/dist/es6/form-field/lib/FormFieldContainer.js +1 -1
- package/dist/es6/form-field/lib/FormFieldField.js +1 -1
- package/dist/es6/form-field/lib/FormFieldGroupLabel.js +5 -5
- package/dist/es6/form-field/lib/FormFieldGroupList.js +3 -3
- package/dist/es6/form-field/lib/FormFieldHint.js +3 -3
- package/dist/es6/form-field/lib/FormFieldLabel.js +6 -6
- package/dist/es6/form-field/lib/formFieldStencil.js +8 -8
- package/dist/es6/icon/lib/AccentIcon.js +2 -2
- package/dist/es6/icon/lib/AppletIcon.js +1 -1
- package/dist/es6/icon/lib/Graphic.js +2 -2
- package/dist/es6/icon/lib/Svg.js +2 -2
- package/dist/es6/icon/lib/SystemIcon.js +1 -1
- package/dist/es6/icon/lib/SystemIconCircle.js +1 -1
- package/dist/es6/loading-dots/lib/LoadingDots.js +2 -2
- package/dist/es6/menu/lib/Menu.d.ts +112 -0
- package/dist/es6/menu/lib/Menu.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuCard.d.ts +10 -0
- package/dist/es6/menu/lib/MenuCard.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuCard.js +1 -1
- package/dist/es6/menu/lib/MenuContextTarget.d.ts +15 -0
- package/dist/es6/menu/lib/MenuContextTarget.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuItem.d.ts +11 -1
- package/dist/es6/menu/lib/MenuItem.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuItem.js +1 -1
- package/dist/es6/menu/lib/MenuList.d.ts +10 -0
- package/dist/es6/menu/lib/MenuList.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuList.js +3 -3
- package/dist/es6/menu/lib/MenuOption.d.ts +10 -0
- package/dist/es6/menu/lib/MenuOption.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuOption.js +1 -1
- package/dist/es6/menu/lib/MenuPopper.d.ts +5 -0
- package/dist/es6/menu/lib/MenuPopper.d.ts.map +1 -1
- package/dist/es6/menu/lib/MenuTarget.d.ts +25 -0
- package/dist/es6/menu/lib/MenuTarget.d.ts.map +1 -1
- package/dist/es6/menu/lib/useMenuModel.d.ts +87 -0
- package/dist/es6/menu/lib/useMenuModel.d.ts.map +1 -1
- package/dist/es6/modal/lib/ModalBody.js +1 -1
- package/dist/es6/modal/lib/ModalCard.js +1 -1
- package/dist/es6/modal/lib/ModalHeading.js +1 -1
- package/dist/es6/modal/lib/ModalOverflowOverlay.js +1 -1
- package/dist/es6/modal/lib/ModalOverlay.js +2 -2
- package/dist/es6/popup/lib/PopupBody.js +1 -1
- package/dist/es6/popup/lib/PopupCard.js +2 -2
- package/dist/es6/popup/lib/PopupCloseIcon.js +1 -1
- package/dist/es6/popup/lib/PopupHeading.js +1 -1
- package/dist/es6/select/lib/Select.d.ts +118 -0
- package/dist/es6/select/lib/Select.d.ts.map +1 -1
- package/dist/es6/select/lib/SelectCard.d.ts +10 -0
- package/dist/es6/select/lib/SelectCard.d.ts.map +1 -1
- package/dist/es6/select/lib/SelectCard.js +1 -1
- package/dist/es6/select/lib/SelectInput.d.ts +5 -0
- package/dist/es6/select/lib/SelectInput.d.ts.map +1 -1
- package/dist/es6/select/lib/SelectInput.js +3 -3
- package/dist/es6/select/lib/SelectItem.d.ts +10 -0
- package/dist/es6/select/lib/SelectItem.d.ts.map +1 -1
- package/dist/es6/select/lib/hooks/useSelectCard.d.ts +5 -0
- package/dist/es6/select/lib/hooks/useSelectCard.d.ts.map +1 -1
- package/dist/es6/select/lib/hooks/useSelectInput.d.ts +5 -0
- package/dist/es6/select/lib/hooks/useSelectInput.d.ts.map +1 -1
- package/dist/es6/select/lib/hooks/useSelectModel.d.ts +93 -0
- package/dist/es6/select/lib/hooks/useSelectModel.d.ts.map +1 -1
- package/dist/es6/switch/lib/Switch.js +7 -7
- package/dist/es6/table/lib/Table.js +1 -1
- package/dist/es6/table/lib/TableBody.js +1 -1
- package/dist/es6/table/lib/TableCaption.js +1 -1
- package/dist/es6/table/lib/TableCell.js +1 -1
- package/dist/es6/table/lib/TableFooter.js +1 -1
- package/dist/es6/table/lib/TableHead.js +1 -1
- package/dist/es6/table/lib/TableHeader.js +1 -1
- package/dist/es6/table/lib/TableRow.js +1 -1
- package/dist/es6/tabs/lib/Tabs.d.ts +891 -44
- package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsItem.d.ts +57 -1
- package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsList.d.ts +56 -0
- package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsMenuPopper.d.ts +5 -0
- package/dist/es6/tabs/lib/TabsMenuPopper.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +56 -0
- package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsPanel.d.ts +56 -0
- package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -1
- package/dist/es6/tabs/lib/TabsPanels.d.ts +28 -0
- package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -1
- package/dist/es6/tabs/lib/useTabsModel.d.ts +867 -74
- package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
- package/dist/es6/text/lib/LabelText.js +6 -6
- package/dist/es6/text/lib/Text.js +16 -16
- package/dist/es6/text/lib/TypeLevelComponents.js +4 -4
- package/dist/es6/text-area/lib/TextArea.js +5 -5
- package/dist/es6/text-input/lib/InputGroup.js +6 -6
- package/dist/es6/text-input/lib/TextInput.js +5 -5
- package/dist/es6/toast/lib/Toast.js +1 -1
- package/dist/es6/toast/lib/ToastBody.js +1 -1
- package/dist/es6/toast/lib/ToastCloseIcon.js +1 -1
- package/dist/es6/toast/lib/ToastIcon.js +1 -1
- package/dist/es6/toast/lib/ToastMessage.js +1 -1
- package/package.json +4 -4
package/collection/index.ts
CHANGED
|
@@ -15,6 +15,9 @@ export * from './lib/useGridModel';
|
|
|
15
15
|
export * from './lib/useListActiveDescendant';
|
|
16
16
|
export * from './lib/useListItemActiveDescendant';
|
|
17
17
|
export * from './lib/useListItemAllowChildStrings';
|
|
18
|
+
export * from './lib/useListItemRemoveOnDeleteKey';
|
|
19
|
+
export * from './lib/focusOnCurrentCursor';
|
|
20
|
+
export * from './lib/listItemRemove';
|
|
18
21
|
export {ListBox, ListBoxProps} from './lib/ListBox';
|
|
19
22
|
export {keyboardEventToCursorEvents} from './lib/keyUtils';
|
|
20
23
|
export {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {useCursorListModel} from './useCursorListModel';
|
|
2
|
+
|
|
3
|
+
// retry a function each frame so we don't rely on the timing mechanism of React's render cycle.
|
|
4
|
+
const retryEachFrame = (cb: () => boolean, iterations: number, reject?: (reason?: any) => void) => {
|
|
5
|
+
if (cb() === false && iterations > 1) {
|
|
6
|
+
requestAnimationFrame(() => retryEachFrame(cb, iterations - 1));
|
|
7
|
+
}
|
|
8
|
+
reject?.('Retry timeout');
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const focusOnCurrentCursor = (
|
|
12
|
+
model: ReturnType<typeof useCursorListModel>,
|
|
13
|
+
nextId: string,
|
|
14
|
+
/**
|
|
15
|
+
* This can be any element in the list. It is used only to get the client-id from the element in
|
|
16
|
+
* case it is different than the server ID when DOM is hydrated.
|
|
17
|
+
*/
|
|
18
|
+
element?: HTMLElement
|
|
19
|
+
) => {
|
|
20
|
+
return new Promise<HTMLElement | null>((resolve, reject) => {
|
|
21
|
+
// Attempt to extract the ID from the DOM element. This fixes issues where the server and client
|
|
22
|
+
// do not agree on a generated ID
|
|
23
|
+
const clientId = (element?.dataset?.focusId || '').split('-')[0] || model.state.id;
|
|
24
|
+
|
|
25
|
+
const item = model.navigation.getItem(nextId, model);
|
|
26
|
+
|
|
27
|
+
if (item) {
|
|
28
|
+
// If the list is virtualized, we need to manually call out to the virtual list's
|
|
29
|
+
// `scrollToIndex`
|
|
30
|
+
if (model.state.isVirtualized) {
|
|
31
|
+
model.state.UNSTABLE_virtual.scrollToIndex(item.index);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const getElement = (id?: string) => {
|
|
35
|
+
return document.querySelector<HTMLElement>(`[data-focus-id="${`${id}-${item.id}`}"]`);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// In React concurrent mode, there could be several render attempts before the element we're
|
|
39
|
+
// looking for could be available in the DOM
|
|
40
|
+
retryEachFrame(
|
|
41
|
+
() => {
|
|
42
|
+
const element = getElement(clientId) || getElement(model.state.id);
|
|
43
|
+
|
|
44
|
+
if (element) {
|
|
45
|
+
element.focus();
|
|
46
|
+
resolve(element);
|
|
47
|
+
}
|
|
48
|
+
return !!element;
|
|
49
|
+
},
|
|
50
|
+
5,
|
|
51
|
+
reject
|
|
52
|
+
); // 5 should be enough, right?!
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {useSelectionListModel} from './useSelectionListModel';
|
|
2
|
+
|
|
3
|
+
export const listItemRemove = (
|
|
4
|
+
id: string,
|
|
5
|
+
model: ReturnType<typeof useSelectionListModel>
|
|
6
|
+
): string | undefined => {
|
|
7
|
+
// bail early if an ID isn't available
|
|
8
|
+
if (!id) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const index = model.state.items.findIndex(item => item.id === model.state.cursorId);
|
|
13
|
+
const nextIndex = index === model.state.items.length - 1 ? index - 1 : index + 1;
|
|
14
|
+
const nextId = model.state.items[nextIndex]?.id;
|
|
15
|
+
if (nextId && model.state.cursorId === id) {
|
|
16
|
+
// We're removing the currently focused item. Focus next item
|
|
17
|
+
model.events.goTo({id: nextId});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return nextId;
|
|
21
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {createElemPropsHook} from '@workday/canvas-kit-react/common';
|
|
3
|
+
|
|
4
|
+
import {useSelectionListModel} from './useSelectionListModel';
|
|
5
|
+
import {focusOnCurrentCursor} from './focusOnCurrentCursor';
|
|
6
|
+
import {listItemRemove} from './listItemRemove';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* This elemProps hook is used when a menu item is expected to be removed. It will advance the cursor to
|
|
10
|
+
* another item.
|
|
11
|
+
* This elemProps hook is used for cursor navigation by using [Roving
|
|
12
|
+
* Tabindex](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex). Only a single item in the
|
|
13
|
+
* collection has a tab stop. Pressing an arrow key moves the tab stop to a different item in the
|
|
14
|
+
* corresponding direction. See the [Roving Tabindex](#roving-tabindex) example. This elemProps hook
|
|
15
|
+
* should be applied to an `*.Item` component.
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* const useMyItem = composeHooks(
|
|
19
|
+
* useListItemRovingFocus, // adds the roving tabindex support
|
|
20
|
+
* useListItemRegister
|
|
21
|
+
* );
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const useListItemRemoveOnDeleteKey = createElemPropsHook(useSelectionListModel)(model => {
|
|
25
|
+
return {
|
|
26
|
+
onKeyDown(event: React.KeyboardEvent<HTMLElement>) {
|
|
27
|
+
if (event.key === 'Backspace' || event.key === 'Delete') {
|
|
28
|
+
const id = event.currentTarget.dataset.id || '';
|
|
29
|
+
const nextId = listItemRemove(id, model);
|
|
30
|
+
model.events.remove({id, nextId, event});
|
|
31
|
+
if (nextId) {
|
|
32
|
+
// use an animation frame to wait for any other model changes that may happen
|
|
33
|
+
requestAnimationFrame(() => {
|
|
34
|
+
focusOnCurrentCursor(model, nextId, event.currentTarget);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
});
|
|
@@ -3,13 +3,7 @@ import {useIsRTL, createElemPropsHook} from '@workday/canvas-kit-react/common';
|
|
|
3
3
|
|
|
4
4
|
import {useCursorListModel} from './useCursorListModel';
|
|
5
5
|
import {keyboardEventToCursorEvents} from './keyUtils';
|
|
6
|
-
|
|
7
|
-
// retry a function each frame so we don't rely on the timing mechanism of React's render cycle.
|
|
8
|
-
const retryEachFrame = (cb: () => boolean, iterations: number) => {
|
|
9
|
-
if (cb() === false && iterations > 1) {
|
|
10
|
-
requestAnimationFrame(() => retryEachFrame(cb, iterations - 1));
|
|
11
|
-
}
|
|
12
|
-
};
|
|
6
|
+
import {focusOnCurrentCursor} from './focusOnCurrentCursor';
|
|
13
7
|
|
|
14
8
|
/**
|
|
15
9
|
* This elemProps hook is used for cursor navigation by using [Roving
|
|
@@ -33,36 +27,16 @@ export const useListItemRovingFocus = createElemPropsHook(useCursorListModel)(
|
|
|
33
27
|
const stateRef = React.useRef(model.state);
|
|
34
28
|
stateRef.current = model.state;
|
|
35
29
|
|
|
36
|
-
const keyElementRef = React.useRef<
|
|
30
|
+
const keyElementRef = React.useRef<HTMLElement | null>(null);
|
|
37
31
|
const isRTL = useIsRTL();
|
|
38
32
|
|
|
39
33
|
React.useEffect(() => {
|
|
34
|
+
// If the cursor change was triggered by this hook, we should change focus
|
|
40
35
|
if (keyElementRef.current) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const selector = (id?: string) => {
|
|
48
|
-
return document.querySelector<HTMLElement>(`[data-focus-id="${`${id}-${item.id}`}"]`);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// In React concurrent mode, there could be several render attempts before the element we're
|
|
52
|
-
// looking for could be available in the DOM
|
|
53
|
-
retryEachFrame(() => {
|
|
54
|
-
// Attempt to extract the ID from the DOM element. This fixes issues where the server and client
|
|
55
|
-
// do not agree on a generated ID
|
|
56
|
-
const clientId = keyElementRef.current?.getAttribute('data-focus-id')?.split('-')[0];
|
|
57
|
-
const element = selector(clientId) || selector(model.state.id);
|
|
58
|
-
|
|
59
|
-
element?.focus();
|
|
60
|
-
if (element) {
|
|
61
|
-
keyElementRef.current = null;
|
|
62
|
-
}
|
|
63
|
-
return !!element;
|
|
64
|
-
}, 5); // 5 should be enough, right?!
|
|
65
|
-
}
|
|
36
|
+
focusOnCurrentCursor(model, model.state.cursorId, keyElementRef.current).then(() => {
|
|
37
|
+
// Reset key element since focus was successful
|
|
38
|
+
keyElementRef.current = null;
|
|
39
|
+
});
|
|
66
40
|
}
|
|
67
41
|
// we only want to run this effect if the cursor changes and not any other time
|
|
68
42
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -76,7 +50,7 @@ export const useListItemRovingFocus = createElemPropsHook(useCursorListModel)(
|
|
|
76
50
|
}, [model.state.cursorId, model.state.items, model.events]);
|
|
77
51
|
|
|
78
52
|
return {
|
|
79
|
-
onKeyDown(event: React.KeyboardEvent) {
|
|
53
|
+
onKeyDown(event: React.KeyboardEvent<HTMLElement>) {
|
|
80
54
|
const handled = keyboardEventToCursorEvents(event, model, isRTL);
|
|
81
55
|
if (handled) {
|
|
82
56
|
event.preventDefault();
|
|
@@ -269,6 +269,8 @@ export function useListLoader<
|
|
|
269
269
|
|
|
270
270
|
const model = modelHook(
|
|
271
271
|
modelHook.mergeConfig(config, {
|
|
272
|
+
// Loaders should virtualize by default. If they do not, it is an infinite scroll list
|
|
273
|
+
shouldVirtualize: true,
|
|
272
274
|
items,
|
|
273
275
|
shouldGoToNext: shouldLoadIndex('getNext', 'goToNext'),
|
|
274
276
|
shouldGoToPrevious: shouldLoadIndex('getPrevious', 'goToPrevious'),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import {createElemPropsHook} from '@workday/canvas-kit-react/common';
|
|
3
|
+
import {createElemPropsHook, useMountLayout} from '@workday/canvas-kit-react/common';
|
|
4
4
|
import {orientationKeyMap} from './keyUtils';
|
|
5
5
|
import {useListModel} from './useListModel';
|
|
6
6
|
|
|
@@ -20,6 +20,15 @@ import {useListModel} from './useListModel';
|
|
|
20
20
|
*/
|
|
21
21
|
export const useListResetCursorOnBlur = createElemPropsHook(useListModel)(({state, events}) => {
|
|
22
22
|
const programmaticFocusRef = React.useRef(false);
|
|
23
|
+
const requestAnimationFrameRef = React.useRef(0);
|
|
24
|
+
|
|
25
|
+
useMountLayout(() => {
|
|
26
|
+
return () => {
|
|
27
|
+
// Cancelling the animation frame prevents React unmount errors
|
|
28
|
+
cancelAnimationFrame(requestAnimationFrameRef.current);
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
|
|
23
32
|
return {
|
|
24
33
|
onKeyDown(event: React.KeyboardEvent) {
|
|
25
34
|
// Programmatic focus only on any focus change via keyboard
|
|
@@ -32,7 +41,12 @@ export const useListResetCursorOnBlur = createElemPropsHook(useListModel)(({stat
|
|
|
32
41
|
},
|
|
33
42
|
onBlur() {
|
|
34
43
|
if (!programmaticFocusRef.current) {
|
|
35
|
-
|
|
44
|
+
// use an animation frame to wait for any other model changes that may happen on a blur
|
|
45
|
+
requestAnimationFrameRef.current = requestAnimationFrame(() => {
|
|
46
|
+
if (state.selectedIds[0] !== state.cursorId) {
|
|
47
|
+
events.goTo({id: state.selectedIds[0]});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
36
50
|
}
|
|
37
51
|
},
|
|
38
52
|
};
|
|
@@ -26,17 +26,21 @@ export const useOverflowListItemMeasure = createElemPropsHook(useOverflowListMod
|
|
|
26
26
|
useMountLayout(() => {
|
|
27
27
|
if (localRef.current) {
|
|
28
28
|
const styles = getComputedStyle(localRef.current);
|
|
29
|
-
model.events.
|
|
29
|
+
model.events.addItemSize({
|
|
30
30
|
id: name,
|
|
31
31
|
width:
|
|
32
32
|
localRef.current.offsetWidth +
|
|
33
33
|
parseFloat(styles.marginLeft) +
|
|
34
34
|
parseFloat(styles.marginRight),
|
|
35
|
+
height:
|
|
36
|
+
localRef.current.offsetHeight +
|
|
37
|
+
parseFloat(styles.marginTop) +
|
|
38
|
+
parseFloat(styles.marginBottom),
|
|
35
39
|
});
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
return () => {
|
|
39
|
-
model.events.
|
|
43
|
+
model.events.removeItemSize({id: name});
|
|
40
44
|
};
|
|
41
45
|
});
|
|
42
46
|
|
|
@@ -19,7 +19,7 @@ export const useOverflowListMeasure = createElemPropsHook(useOverflowListModel)(
|
|
|
19
19
|
|
|
20
20
|
useResizeObserver({
|
|
21
21
|
ref: localRef,
|
|
22
|
-
onResize: model.events.
|
|
22
|
+
onResize: model.events.setContainerSize,
|
|
23
23
|
});
|
|
24
24
|
useMountLayout(() => {
|
|
25
25
|
if (localRef.current) {
|
|
@@ -5,17 +5,17 @@ import {useSelectionListModel} from './useSelectionListModel';
|
|
|
5
5
|
import {Item} from './useBaseListModel';
|
|
6
6
|
|
|
7
7
|
export function getHiddenIds(
|
|
8
|
-
|
|
8
|
+
containerSize: number,
|
|
9
9
|
containerGap: number,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
overflowTargetSize: number,
|
|
11
|
+
itemSizeCache: Record<string, number>,
|
|
12
12
|
selectedIds: string[] | 'all',
|
|
13
13
|
items: Item<any>[]
|
|
14
14
|
): string[] {
|
|
15
15
|
/** Allows us to prioritize showing the selected item */
|
|
16
16
|
let selectedKey: undefined | string;
|
|
17
17
|
/** Tally of combined item widths. We'll add items that fit until the container is full */
|
|
18
|
-
let
|
|
18
|
+
let itemSize = 0;
|
|
19
19
|
/** Tally ids that won't fit inside the container. These will be used by components to hide
|
|
20
20
|
* elements that won't fit in the container */
|
|
21
21
|
const hiddenIds: string[] = [];
|
|
@@ -31,31 +31,31 @@ export function getHiddenIds(
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
if (
|
|
34
|
-
Object.keys(
|
|
35
|
-
(sum, key, index) => sum +
|
|
34
|
+
Object.keys(itemSizeCache).reduce(
|
|
35
|
+
(sum, key, index) => sum + itemSizeCache[key] + (index > 0 ? containerGap : 0),
|
|
36
36
|
0
|
|
37
|
-
) <=
|
|
37
|
+
) <= containerSize
|
|
38
38
|
) {
|
|
39
39
|
// All items fit, return empty array
|
|
40
40
|
return [];
|
|
41
41
|
} else if (selectedKey) {
|
|
42
|
-
if (
|
|
42
|
+
if (itemSizeCache[selectedKey] + overflowTargetSize > containerSize) {
|
|
43
43
|
// If the selected item doesn't fit, only show overflow (all items hidden)
|
|
44
|
-
return Object.keys(
|
|
44
|
+
return Object.keys(itemSizeCache);
|
|
45
45
|
} else {
|
|
46
46
|
// at least the selected item and overflow target fit. Update our itemWidth with the sum
|
|
47
|
-
|
|
47
|
+
itemSize += itemSizeCache[selectedKey] + overflowTargetSize;
|
|
48
48
|
shouldAddGap = true;
|
|
49
49
|
}
|
|
50
50
|
} else {
|
|
51
|
-
|
|
51
|
+
itemSize += overflowTargetSize;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
for (const key in
|
|
54
|
+
for (const key in itemSizeCache) {
|
|
55
55
|
if (key !== selectedKey) {
|
|
56
|
-
|
|
56
|
+
itemSize += itemSizeCache[key] + (shouldAddGap ? containerGap : 0);
|
|
57
57
|
shouldAddGap = true;
|
|
58
|
-
if (
|
|
58
|
+
if (itemSize > containerSize) {
|
|
59
59
|
hiddenIds.push(key);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -81,13 +81,13 @@ export const useOverflowListModel = createModelHook({
|
|
|
81
81
|
const shouldCalculateOverflow =
|
|
82
82
|
config.shouldCalculateOverflow === undefined ? true : config.shouldCalculateOverflow;
|
|
83
83
|
const [hiddenIds, setHiddenIds] = React.useState(config.initialHiddenIds);
|
|
84
|
-
const [
|
|
85
|
-
const [
|
|
84
|
+
const [itemSizeCache, setItemSizeCache] = React.useState<Record<string, number>>({});
|
|
85
|
+
const [containerSize, setContainerSize] = React.useState(0);
|
|
86
86
|
const [containerGap, setContainerGap] = React.useState(0);
|
|
87
|
-
const
|
|
88
|
-
const
|
|
87
|
+
const containerSizeRef = React.useRef(0);
|
|
88
|
+
const itemSizeCacheRef = React.useRef(itemSizeCache);
|
|
89
89
|
const [overflowTargetWidth, setOverflowTargetWidth] = React.useState(0);
|
|
90
|
-
const
|
|
90
|
+
const overflowTargetSizeRef = React.useRef(0);
|
|
91
91
|
|
|
92
92
|
const internalHiddenIds = shouldCalculateOverflow ? hiddenIds : [];
|
|
93
93
|
|
|
@@ -103,8 +103,16 @@ export const useOverflowListModel = createModelHook({
|
|
|
103
103
|
const state = {
|
|
104
104
|
...model.state,
|
|
105
105
|
hiddenIds: internalHiddenIds,
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
itemSizeCache,
|
|
107
|
+
/**
|
|
108
|
+
* @deprecated Use `itemSizeCache` instead
|
|
109
|
+
*/
|
|
110
|
+
itemWidthCache: itemSizeCache,
|
|
111
|
+
containerSize,
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated Use `containerSize` instead
|
|
114
|
+
*/
|
|
115
|
+
containerWidth: containerSize,
|
|
108
116
|
containerGap,
|
|
109
117
|
overflowTargetWidth,
|
|
110
118
|
};
|
|
@@ -114,10 +122,10 @@ export const useOverflowListModel = createModelHook({
|
|
|
114
122
|
select(data: Parameters<typeof model.events.select>[0]) {
|
|
115
123
|
const {selectedIds} = model.selection.select(data.id, state);
|
|
116
124
|
const ids = getHiddenIds(
|
|
117
|
-
|
|
125
|
+
containerSizeRef.current,
|
|
118
126
|
containerGap,
|
|
119
|
-
|
|
120
|
-
|
|
127
|
+
overflowTargetSizeRef.current,
|
|
128
|
+
itemSizeCacheRef.current,
|
|
121
129
|
selectedIds,
|
|
122
130
|
config.items
|
|
123
131
|
);
|
|
@@ -125,69 +133,93 @@ export const useOverflowListModel = createModelHook({
|
|
|
125
133
|
|
|
126
134
|
setHiddenIds(ids);
|
|
127
135
|
},
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
setContainerSize(data: {width?: number; height?: number}) {
|
|
137
|
+
containerSizeRef.current =
|
|
138
|
+
model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
|
|
139
|
+
setContainerSize(containerSizeRef.current);
|
|
132
140
|
const ids = getHiddenIds(
|
|
133
|
-
|
|
141
|
+
containerSizeRef.current,
|
|
134
142
|
containerGap,
|
|
135
|
-
|
|
136
|
-
|
|
143
|
+
overflowTargetSizeRef.current,
|
|
144
|
+
itemSizeCacheRef.current,
|
|
137
145
|
state.selectedIds,
|
|
138
146
|
config.items
|
|
139
147
|
);
|
|
140
|
-
|
|
141
148
|
setHiddenIds(ids);
|
|
142
149
|
},
|
|
150
|
+
/**
|
|
151
|
+
* @deprecated Use `setContainerSize` instead and pass both `width` and `height`
|
|
152
|
+
*/
|
|
153
|
+
setContainerWidth(data: {width?: number}) {
|
|
154
|
+
events.setContainerSize({width: data.width, height: 0});
|
|
155
|
+
},
|
|
143
156
|
setContainerGap(data: {size: number}) {
|
|
144
157
|
setContainerGap(data.size);
|
|
145
158
|
|
|
146
159
|
const ids = getHiddenIds(
|
|
147
|
-
|
|
160
|
+
containerSizeRef.current,
|
|
148
161
|
data.size,
|
|
149
|
-
|
|
150
|
-
|
|
162
|
+
overflowTargetSizeRef.current,
|
|
163
|
+
itemSizeCacheRef.current,
|
|
151
164
|
state.selectedIds,
|
|
152
165
|
config.items
|
|
153
166
|
);
|
|
154
167
|
|
|
155
168
|
setHiddenIds(ids);
|
|
156
169
|
},
|
|
170
|
+
setOverflowTargetSize(data: {width: number; height: number}) {
|
|
171
|
+
overflowTargetSizeRef.current =
|
|
172
|
+
model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
|
|
173
|
+
setOverflowTargetWidth(overflowTargetSizeRef.current);
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
*
|
|
178
|
+
* @deprecated `setOverflowTargetWidth` is deprecated. Please use `setOverflowTargetSize` and pass in the `width` and set `height` to `0`.
|
|
179
|
+
*/
|
|
157
180
|
setOverflowTargetWidth(data: {width: number}) {
|
|
158
|
-
|
|
159
|
-
|
|
181
|
+
overflowTargetSizeRef.current = data.width;
|
|
182
|
+
events.setOverflowTargetSize({width: overflowTargetSizeRef.current, height: 0});
|
|
160
183
|
},
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
*
|
|
187
|
+
* @deprecated `addItemWidth` is deprecated. Please use `addItemSize` and set the `width`
|
|
188
|
+
*/
|
|
161
189
|
addItemWidth(data: {id: string; width: number}) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
190
|
+
events.addItemSize({id: data.id, width: data.width, height: 0});
|
|
191
|
+
},
|
|
192
|
+
addItemSize(data: {id: string; width: number; height: number}) {
|
|
193
|
+
itemSizeCacheRef.current = {
|
|
194
|
+
...itemSizeCacheRef.current,
|
|
195
|
+
[data.id]: model.state.orientation === 'horizontal' ? data.width : data.height,
|
|
165
196
|
};
|
|
166
197
|
|
|
167
|
-
|
|
198
|
+
|
|
199
|
+
setItemSizeCache(itemSizeCacheRef.current);
|
|
168
200
|
|
|
169
201
|
const ids = getHiddenIds(
|
|
170
|
-
|
|
202
|
+
containerSizeRef.current,
|
|
171
203
|
containerGap,
|
|
172
|
-
|
|
173
|
-
|
|
204
|
+
overflowTargetSizeRef.current,
|
|
205
|
+
itemSizeCacheRef.current,
|
|
174
206
|
state.selectedIds,
|
|
175
207
|
config.items
|
|
176
208
|
);
|
|
177
209
|
|
|
178
210
|
setHiddenIds(ids);
|
|
179
211
|
},
|
|
180
|
-
|
|
181
|
-
const newCache = {...
|
|
212
|
+
removeItemSize(data: {id: string}) {
|
|
213
|
+
const newCache = {...itemSizeCacheRef.current};
|
|
182
214
|
delete newCache[data.id];
|
|
183
|
-
|
|
184
|
-
|
|
215
|
+
itemSizeCacheRef.current = newCache;
|
|
216
|
+
setItemSizeCache(itemSizeCacheRef.current);
|
|
185
217
|
|
|
186
218
|
const ids = getHiddenIds(
|
|
187
|
-
|
|
219
|
+
containerSizeRef.current,
|
|
188
220
|
containerGap,
|
|
189
|
-
|
|
190
|
-
|
|
221
|
+
overflowTargetSizeRef.current,
|
|
222
|
+
itemSizeCacheRef.current,
|
|
191
223
|
state.selectedIds !== 'all'
|
|
192
224
|
? state.selectedIds.filter(sId => data.id !== sId)
|
|
193
225
|
: state.selectedIds,
|
|
@@ -196,6 +228,13 @@ export const useOverflowListModel = createModelHook({
|
|
|
196
228
|
|
|
197
229
|
setHiddenIds(ids);
|
|
198
230
|
},
|
|
231
|
+
/**
|
|
232
|
+
*
|
|
233
|
+
* @deprecated `removeItemWidth` is deprecated. Please use `removeItemSize`.
|
|
234
|
+
*/
|
|
235
|
+
removeItemWidth(data: {id: string}) {
|
|
236
|
+
events.removeItemSize({id: data.id});
|
|
237
|
+
},
|
|
199
238
|
addHiddenKey(data: {id: string}) {
|
|
200
239
|
setHiddenIds(ids => ids.concat(data.id));
|
|
201
240
|
},
|
|
@@ -24,11 +24,15 @@ export const useOverflowListTarget = createElemPropsHook(useOverflowListModel)((
|
|
|
24
24
|
if (localRef.current) {
|
|
25
25
|
const styles = getComputedStyle(localRef.current);
|
|
26
26
|
|
|
27
|
-
model.events.
|
|
27
|
+
model.events.setOverflowTargetSize({
|
|
28
28
|
width:
|
|
29
29
|
localRef.current.offsetWidth +
|
|
30
30
|
parseFloat(styles.marginLeft) +
|
|
31
31
|
parseFloat(styles.marginRight),
|
|
32
|
+
height:
|
|
33
|
+
localRef.current.offsetWidth +
|
|
34
|
+
parseFloat(styles.marginTop) +
|
|
35
|
+
parseFloat(styles.marginBottom),
|
|
32
36
|
});
|
|
33
37
|
}
|
|
34
38
|
});
|
|
@@ -109,6 +109,16 @@ export const useSelectionListModel = createModelHook({
|
|
|
109
109
|
setSelectedIds(ids: 'all' | string[]) {
|
|
110
110
|
setSelectedIds(ids);
|
|
111
111
|
},
|
|
112
|
+
/**
|
|
113
|
+
* The `remove` event can be called by Behavior Hooks based on user interaction. The `onRemove`
|
|
114
|
+
* can be added to the model config to signal the user wishes to remove the item in the list.
|
|
115
|
+
* The `remove` event requires the dynamic API where `items` are passed to the model. It is up
|
|
116
|
+
* to you to remove the item from the list. Focus redirection should be automatically managed,
|
|
117
|
+
* if necessary.
|
|
118
|
+
*/
|
|
119
|
+
remove(data: {id: string; nextId?: string; event?: Event | React.SyntheticEvent}) {
|
|
120
|
+
// nothing to do here. It is a signal event
|
|
121
|
+
},
|
|
112
122
|
};
|
|
113
123
|
|
|
114
124
|
return {...cursor, state, events, selection};
|
|
@@ -26,16 +26,13 @@ export const useComboboxInput = composeHooks(
|
|
|
26
26
|
if (model.state.isVirtualized && item) {
|
|
27
27
|
model.state.UNSTABLE_virtual.scrollToIndex(item.index);
|
|
28
28
|
} else {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
menuItem.scrollIntoView({block: 'nearest'});
|
|
37
|
-
});
|
|
38
|
-
}
|
|
29
|
+
const menuItem = document.querySelector(
|
|
30
|
+
`[id="${model.state.id}-list"] [data-id="${model.state.cursorId}"]`
|
|
31
|
+
);
|
|
32
|
+
if (menuItem) {
|
|
33
|
+
requestAnimationFrame(() => {
|
|
34
|
+
menuItem.scrollIntoView({block: 'nearest'});
|
|
35
|
+
});
|
|
39
36
|
}
|
|
40
37
|
}
|
|
41
38
|
}
|