@loadsmart/loadsmart-ui 7.5.0 → 7.7.0-beta.1
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/README.md +15 -1
- package/dist/DragDropFile.context-oKnUu6d3.js +33 -0
- package/dist/{DragDropFile.context-D-EBrXnw.js.map → DragDropFile.context-oKnUu6d3.js.map} +1 -1
- package/dist/index.js +9104 -253
- package/dist/index.js.map +1 -1
- package/dist/miranda-compatibility.theme-C_FEacSw.js +2528 -0
- package/dist/miranda-compatibility.theme-C_FEacSw.js.map +1 -0
- package/dist/prop-B8LY6G2g.js +81 -0
- package/dist/{prop-pWSEOvKc.js.map → prop-B8LY6G2g.js.map} +1 -1
- package/dist/testing/index.js +282 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/theming/index.js +22 -1
- package/dist/theming/index.js.map +1 -1
- package/dist/toArray-Dxb1kUxx.js +14 -0
- package/dist/toArray-Dxb1kUxx.js.map +1 -0
- package/dist/tools/index.js +6 -1
- package/dist/tools/index.js.map +1 -1
- package/package.json +28 -57
- package/dist/DragDropFile.context-D-EBrXnw.js +0 -2
- package/dist/DragDropFile.context-jVTIKfj5.mjs +0 -29
- package/dist/DragDropFile.context-jVTIKfj5.mjs.map +0 -1
- package/dist/index.mjs +0 -9310
- package/dist/index.mjs.map +0 -1
- package/dist/miranda-compatibility.theme-C3Dt-45K.js +0 -2
- package/dist/miranda-compatibility.theme-C3Dt-45K.js.map +0 -1
- package/dist/miranda-compatibility.theme-ClCWbTIT.mjs +0 -2525
- package/dist/miranda-compatibility.theme-ClCWbTIT.mjs.map +0 -1
- package/dist/prop-C4yDbi0C.mjs +0 -53
- package/dist/prop-C4yDbi0C.mjs.map +0 -1
- package/dist/prop-pWSEOvKc.js +0 -2
- package/dist/testing/index.mjs +0 -227
- package/dist/testing/index.mjs.map +0 -1
- package/dist/theming/index.mjs +0 -19
- package/dist/theming/index.mjs.map +0 -1
- package/dist/toArray-BJfx0Xhj.mjs +0 -38
- package/dist/toArray-BJfx0Xhj.mjs.map +0 -1
- package/dist/toArray-Dw6F-w3t.js +0 -2
- package/dist/toArray-Dw6F-w3t.js.map +0 -1
- package/dist/tools/index.mjs +0 -7
- package/dist/tools/index.mjs.map +0 -1
- package/src/@types/@loadsmart/utilsFunction.d.ts +0 -5
- package/src/@types/@loadsmart/utilsObject.d.ts +0 -5
- package/src/@types/svg.d.ts +0 -4
- package/src/addons/Theme/register.js +0 -590
- package/src/common/BackButton/BackButton.tsx +0 -18
- package/src/common/BackButton/index.ts +0 -2
- package/src/common/CloseButton/CloseButton.tsx +0 -55
- package/src/common/CloseButton/index.ts +0 -2
- package/src/common/SelectionWrapper.tsx +0 -130
- package/src/components/Accordion/Accordion.context.tsx +0 -36
- package/src/components/Accordion/Accordion.stories.tsx +0 -186
- package/src/components/Accordion/Accordion.test.tsx +0 -209
- package/src/components/Accordion/Accordion.tsx +0 -233
- package/src/components/Accordion/index.ts +0 -2
- package/src/components/Banner/Banner.stories.tsx +0 -213
- package/src/components/Banner/Banner.test.tsx +0 -118
- package/src/components/Banner/Banner.tsx +0 -418
- package/src/components/Banner/index.tsx +0 -2
- package/src/components/Breadcrumbs/Breadbrumbs.test.tsx +0 -125
- package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -92
- package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +0 -21
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -54
- package/src/components/Breadcrumbs/index.ts +0 -4
- package/src/components/Button/Button.stories.tsx +0 -174
- package/src/components/Button/Button.test.tsx +0 -57
- package/src/components/Button/Button.tsx +0 -576
- package/src/components/Button/index.tsx +0 -2
- package/src/components/Calendar/Calendar.helpers.ts +0 -15
- package/src/components/Calendar/Calendar.stories.tsx +0 -168
- package/src/components/Calendar/Calendar.test.tsx +0 -316
- package/src/components/Calendar/Calendar.tsx +0 -130
- package/src/components/Calendar/Calendar.types.ts +0 -68
- package/src/components/Calendar/Date.helper.test.ts +0 -847
- package/src/components/Calendar/Date.helper.ts +0 -461
- package/src/components/Calendar/DateFormat.helper.test.ts +0 -171
- package/src/components/Calendar/DateFormat.helper.ts +0 -195
- package/src/components/Calendar/Month.helper.test.ts +0 -187
- package/src/components/Calendar/Month.helper.ts +0 -172
- package/src/components/Calendar/PickerModeToggle.tsx +0 -61
- package/src/components/Calendar/Pickers/DayPicker.test.tsx +0 -85
- package/src/components/Calendar/Pickers/DayPicker.tsx +0 -127
- package/src/components/Calendar/Pickers/MonthPicker.test.tsx +0 -77
- package/src/components/Calendar/Pickers/MonthPicker.tsx +0 -51
- package/src/components/Calendar/Pickers/PickerButton.tsx +0 -119
- package/src/components/Calendar/Pickers/YearPicker.test.tsx +0 -75
- package/src/components/Calendar/Pickers/YearPicker.tsx +0 -52
- package/src/components/Calendar/index.ts +0 -10
- package/src/components/Calendar/useCalendar.ts +0 -190
- package/src/components/Calendar/usePickerMode.ts +0 -48
- package/src/components/Card/Card.stories.tsx +0 -117
- package/src/components/Card/Card.test.tsx +0 -139
- package/src/components/Card/Card.tsx +0 -106
- package/src/components/Card/CardTitle.tsx +0 -43
- package/src/components/Card/index.ts +0 -2
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -79
- package/src/components/Checkbox/Checkbox.test.tsx +0 -66
- package/src/components/Checkbox/Checkbox.tsx +0 -170
- package/src/components/Checkbox/index.ts +0 -2
- package/src/components/DatePicker/DatePicker.stories.tsx +0 -113
- package/src/components/DatePicker/DatePicker.test.tsx +0 -174
- package/src/components/DatePicker/DatePicker.tsx +0 -140
- package/src/components/DatePicker/DatePicker.types.ts +0 -30
- package/src/components/DatePicker/DateRangePicker.stories.tsx +0 -128
- package/src/components/DatePicker/DateRangePicker.test.tsx +0 -267
- package/src/components/DatePicker/DateRangePicker.tsx +0 -110
- package/src/components/DatePicker/index.ts +0 -3
- package/src/components/DatePicker/useDatePicker.ts +0 -201
- package/src/components/DatePicker/useDateRangePicker.ts +0 -224
- package/src/components/Dialog/Dialog.stories.tsx +0 -227
- package/src/components/Dialog/Dialog.test.tsx +0 -74
- package/src/components/Dialog/Dialog.tsx +0 -139
- package/src/components/Dialog/index.tsx +0 -4
- package/src/components/Dialog/useDialog.tsx +0 -59
- package/src/components/DragDropFile/DragDropFile.context.tsx +0 -39
- package/src/components/DragDropFile/DragDropFile.stories.tsx +0 -183
- package/src/components/DragDropFile/DragDropFile.tsx +0 -11
- package/src/components/DragDropFile/components/DropZone.test.tsx +0 -108
- package/src/components/DragDropFile/components/DropZone.tsx +0 -145
- package/src/components/DragDropFile/components/FileItem.tsx +0 -117
- package/src/components/DragDropFile/components/FileList.test.tsx +0 -119
- package/src/components/DragDropFile/components/FileList.tsx +0 -47
- package/src/components/DragDropFile/components/Wrapper.tsx +0 -22
- package/src/components/DragDropFile/index.ts +0 -9
- package/src/components/DragDropFile/mocks.ts +0 -23
- package/src/components/DragDropFile/styles.tsx +0 -81
- package/src/components/DragDropFile/types.ts +0 -85
- package/src/components/Drawer/Drawer.stories.tsx +0 -83
- package/src/components/Drawer/Drawer.test.tsx +0 -90
- package/src/components/Drawer/Drawer.tsx +0 -225
- package/src/components/Drawer/index.ts +0 -4
- package/src/components/Dropdown/Dropdown.context.ts +0 -13
- package/src/components/Dropdown/Dropdown.fixtures.ts +0 -15
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -259
- package/src/components/Dropdown/Dropdown.test.tsx +0 -173
- package/src/components/Dropdown/Dropdown.tsx +0 -141
- package/src/components/Dropdown/Dropdown.types.ts +0 -59
- package/src/components/Dropdown/DropdownMenu.tsx +0 -263
- package/src/components/Dropdown/DropdownTrigger.tsx +0 -368
- package/src/components/Dropdown/index.ts +0 -15
- package/src/components/Dropdown/useDropdown.test.ts +0 -96
- package/src/components/Dropdown/useDropdown.ts +0 -65
- package/src/components/EmptyState/EmptyState.mocks.tsx +0 -60
- package/src/components/EmptyState/EmptyState.stories.tsx +0 -239
- package/src/components/EmptyState/EmptyState.test.tsx +0 -101
- package/src/components/EmptyState/EmptyState.tsx +0 -22
- package/src/components/EmptyState/EmptyState.types.ts +0 -59
- package/src/components/EmptyState/EmptyStateWithIcon.tsx +0 -42
- package/src/components/EmptyState/EmptyStateWithIllustration.tsx +0 -72
- package/src/components/EmptyState/Illustration.tsx +0 -29
- package/src/components/EmptyState/index.ts +0 -4
- package/src/components/ErrorMessage/ErrorMessage.stories.tsx +0 -26
- package/src/components/ErrorMessage/ErrorMessage.test.tsx +0 -24
- package/src/components/ErrorMessage/ErrorMessage.tsx +0 -19
- package/src/components/ErrorMessage/index.ts +0 -2
- package/src/components/HighlightMatch/HighlightMatch.stories.tsx +0 -24
- package/src/components/HighlightMatch/HighlightMatch.test.tsx +0 -37
- package/src/components/HighlightMatch/HighlightMatch.tsx +0 -29
- package/src/components/HighlightMatch/index.ts +0 -2
- package/src/components/Icon/Icon.tsx +0 -55
- package/src/components/Icon/assets/back.svg +0 -4
- package/src/components/Icon/assets/burger-menu.svg +0 -3
- package/src/components/Icon/assets/calendar.svg +0 -5
- package/src/components/Icon/assets/caret-down.svg +0 -4
- package/src/components/Icon/assets/caret-left.svg +0 -4
- package/src/components/Icon/assets/caret-right-last.svg +0 -4
- package/src/components/Icon/assets/caret-right.svg +0 -4
- package/src/components/Icon/assets/check.svg +0 -4
- package/src/components/Icon/assets/chevron-down.svg +0 -3
- package/src/components/Icon/assets/circle.svg +0 -3
- package/src/components/Icon/assets/close.svg +0 -4
- package/src/components/Icon/assets/dots-horizontal.svg +0 -1
- package/src/components/Icon/assets/information.svg +0 -4
- package/src/components/Icon/assets/minus.svg +0 -4
- package/src/components/Icon/assets/plus.svg +0 -4
- package/src/components/Icon/assets/refresh.svg +0 -3
- package/src/components/Icon/assets/sort-asc.svg +0 -7
- package/src/components/Icon/assets/sort-desc.svg +0 -7
- package/src/components/Icon/assets/sort.svg +0 -7
- package/src/components/Icon/assets/upload.svg +0 -3
- package/src/components/Icon/assets/warning.svg +0 -4
- package/src/components/Icon/index.ts +0 -2
- package/src/components/IconFactory/IconFactory.fixtures.tsx +0 -31
- package/src/components/IconFactory/IconFactory.stories.tsx +0 -120
- package/src/components/IconFactory/IconFactory.test.tsx +0 -36
- package/src/components/IconFactory/IconFactory.tsx +0 -75
- package/src/components/IconFactory/index.ts +0 -2
- package/src/components/Label/Label.stories.tsx +0 -47
- package/src/components/Label/Label.test.tsx +0 -80
- package/src/components/Label/Label.tsx +0 -120
- package/src/components/Label/index.ts +0 -2
- package/src/components/Layout/Box.tsx +0 -98
- package/src/components/Layout/Grid.tsx +0 -42
- package/src/components/Layout/Group.tsx +0 -55
- package/src/components/Layout/Layout.stories.tsx +0 -412
- package/src/components/Layout/Layout.tsx +0 -19
- package/src/components/Layout/Layout.types.ts +0 -9
- package/src/components/Layout/Layout.utils.ts +0 -20
- package/src/components/Layout/Sidebar.tsx +0 -75
- package/src/components/Layout/Stack.tsx +0 -63
- package/src/components/Layout/Switcher.tsx +0 -48
- package/src/components/Layout/index.tsx +0 -8
- package/src/components/Link/Link.stories.tsx +0 -22
- package/src/components/Link/Link.test.tsx +0 -79
- package/src/components/Link/Link.tsx +0 -114
- package/src/components/Link/index.ts +0 -3
- package/src/components/Link/useSafeLink.ts +0 -49
- package/src/components/Loaders/LoadingBar.stories.tsx +0 -36
- package/src/components/Loaders/LoadingBar.test.tsx +0 -35
- package/src/components/Loaders/LoadingBar.tsx +0 -65
- package/src/components/Loaders/LoadingDots.stories.tsx +0 -69
- package/src/components/Loaders/LoadingDots.test.tsx +0 -22
- package/src/components/Loaders/LoadingDots.tsx +0 -68
- package/src/components/Loaders/Spinner.stories.tsx +0 -24
- package/src/components/Loaders/Spinner.test.tsx +0 -35
- package/src/components/Loaders/Spinner.tsx +0 -68
- package/src/components/Loaders/index.tsx +0 -3
- package/src/components/Modal/Modal.stories.tsx +0 -121
- package/src/components/Modal/Modal.test.tsx +0 -46
- package/src/components/Modal/Modal.tsx +0 -163
- package/src/components/Modal/index.tsx +0 -2
- package/src/components/Pagination/Pagination.constants.ts +0 -7
- package/src/components/Pagination/Pagination.helper.ts +0 -88
- package/src/components/Pagination/Pagination.stories.tsx +0 -29
- package/src/components/Pagination/Pagination.test.tsx +0 -102
- package/src/components/Pagination/Pagination.tsx +0 -34
- package/src/components/Pagination/Pagination.types.ts +0 -55
- package/src/components/Pagination/PaginationItem.tsx +0 -74
- package/src/components/Pagination/index.ts +0 -2
- package/src/components/Pagination/usePagination.test.ts +0 -188
- package/src/components/Pagination/usePagination.ts +0 -87
- package/src/components/Popover/Popover.stories.tsx +0 -50
- package/src/components/Popover/Popover.test.tsx +0 -22
- package/src/components/Popover/Popover.tsx +0 -110
- package/src/components/Popover/Popover.types.ts +0 -39
- package/src/components/Popover/index.ts +0 -11
- package/src/components/ProgressBar/ProgressBar.stories.tsx +0 -47
- package/src/components/ProgressBar/ProgressBar.test.tsx +0 -40
- package/src/components/ProgressBar/ProgressBar.tsx +0 -89
- package/src/components/ProgressBar/index.tsx +0 -2
- package/src/components/Radio/Radio.stories.tsx +0 -75
- package/src/components/Radio/Radio.test.tsx +0 -66
- package/src/components/Radio/Radio.tsx +0 -153
- package/src/components/Radio/index.ts +0 -2
- package/src/components/Section/Section.test.tsx +0 -35
- package/src/components/Section/Section.tsx +0 -66
- package/src/components/Section/Sections.stories.tsx +0 -56
- package/src/components/Section/index.ts +0 -2
- package/src/components/Select/Select.constants.ts +0 -12
- package/src/components/Select/Select.context.ts +0 -11
- package/src/components/Select/Select.fixtures.ts +0 -167
- package/src/components/Select/Select.stories.tsx +0 -780
- package/src/components/Select/Select.test.tsx +0 -1109
- package/src/components/Select/Select.tsx +0 -271
- package/src/components/Select/Select.types.ts +0 -148
- package/src/components/Select/SelectCreatableOption.tsx +0 -20
- package/src/components/Select/SelectEmpty.test.tsx +0 -15
- package/src/components/Select/SelectEmpty.tsx +0 -29
- package/src/components/Select/SelectOption.test.tsx +0 -78
- package/src/components/Select/SelectOption.tsx +0 -79
- package/src/components/Select/SelectTrigger.tsx +0 -83
- package/src/components/Select/components.tsx +0 -14
- package/src/components/Select/index.ts +0 -12
- package/src/components/Select/useSelect.helpers.test.ts +0 -184
- package/src/components/Select/useSelect.helpers.ts +0 -63
- package/src/components/Select/useSelect.test.ts +0 -207
- package/src/components/Select/useSelect.ts +0 -540
- package/src/components/Select/useSelectExternal.ts +0 -26
- package/src/components/SideNavigation/Logo/Logo.test.tsx +0 -19
- package/src/components/SideNavigation/Logo/Logo.tsx +0 -26
- package/src/components/SideNavigation/Logo/index.ts +0 -1
- package/src/components/SideNavigation/Menu/Menu.test.tsx +0 -65
- package/src/components/SideNavigation/Menu/Menu.tsx +0 -53
- package/src/components/SideNavigation/Menu/MenuBaseItem.tsx +0 -64
- package/src/components/SideNavigation/Menu/MenuExpandable.tsx +0 -107
- package/src/components/SideNavigation/Menu/MenuLink.tsx +0 -37
- package/src/components/SideNavigation/Menu/index.ts +0 -1
- package/src/components/SideNavigation/Separator/Separator.test.tsx +0 -14
- package/src/components/SideNavigation/Separator/Separator.tsx +0 -20
- package/src/components/SideNavigation/Separator/index.ts +0 -1
- package/src/components/SideNavigation/SideNavigation.stories.tsx +0 -69
- package/src/components/SideNavigation/SideNavigation.test.tsx +0 -21
- package/src/components/SideNavigation/SideNavigation.tsx +0 -47
- package/src/components/SideNavigation/index.ts +0 -5
- package/src/components/SideNavigation/useSideNavigation.ts +0 -36
- package/src/components/Steps/ProgressSteps/ProgressStep.tsx +0 -163
- package/src/components/Steps/ProgressSteps/ProgressSteps.tsx +0 -37
- package/src/components/Steps/ProgressSteps/index.ts +0 -1
- package/src/components/Steps/Steps.fixtures.ts +0 -11
- package/src/components/Steps/Steps.helpers.ts +0 -11
- package/src/components/Steps/Steps.stories.tsx +0 -65
- package/src/components/Steps/Steps.test.tsx +0 -78
- package/src/components/Steps/Steps.tsx +0 -53
- package/src/components/Steps/Steps.types.ts +0 -5
- package/src/components/Steps/StepsContext.ts +0 -5
- package/src/components/Steps/StepsStep.tsx +0 -58
- package/src/components/Steps/index.ts +0 -6
- package/src/components/Steps/useStep.test.tsx +0 -217
- package/src/components/Steps/useSteps.ts +0 -131
- package/src/components/Switch/Switch.stories.tsx +0 -65
- package/src/components/Switch/Switch.test.tsx +0 -60
- package/src/components/Switch/Switch.tsx +0 -209
- package/src/components/Switch/index.ts +0 -2
- package/src/components/Table/Selection.tsx +0 -202
- package/src/components/Table/Table.fixtures.ts +0 -101
- package/src/components/Table/Table.stories.tsx +0 -568
- package/src/components/Table/Table.test.tsx +0 -310
- package/src/components/Table/Table.tsx +0 -523
- package/src/components/Table/Table.types.ts +0 -93
- package/src/components/Table/TableSortHandle.tsx +0 -31
- package/src/components/Table/index.tsx +0 -2
- package/src/components/Table/useSortBy.test.ts +0 -96
- package/src/components/Table/useSortBy.ts +0 -92
- package/src/components/Table/useSortBy.types.ts +0 -21
- package/src/components/TablePagination/RowsPerPage.tsx +0 -81
- package/src/components/TablePagination/TablePagination.stories.tsx +0 -42
- package/src/components/TablePagination/TablePagination.styles.ts +0 -13
- package/src/components/TablePagination/TablePagination.test.tsx +0 -111
- package/src/components/TablePagination/TablePagination.tsx +0 -49
- package/src/components/TablePagination/TablePagination.types.ts +0 -69
- package/src/components/TablePagination/TablePaginationActions.tsx +0 -144
- package/src/components/TablePagination/index.ts +0 -2
- package/src/components/Tabs/Tabs.stories.tsx +0 -78
- package/src/components/Tabs/Tabs.test.tsx +0 -103
- package/src/components/Tabs/Tabs.tsx +0 -287
- package/src/components/Tabs/Tabs.types.ts +0 -7
- package/src/components/Tabs/TabsContext.ts +0 -10
- package/src/components/Tabs/index.ts +0 -2
- package/src/components/Tag/Tag.stories.tsx +0 -112
- package/src/components/Tag/Tag.test.tsx +0 -19
- package/src/components/Tag/Tag.tsx +0 -393
- package/src/components/Tag/index.ts +0 -2
- package/src/components/Text/Text.stories.tsx +0 -59
- package/src/components/Text/Text.test.tsx +0 -48
- package/src/components/Text/Text.tsx +0 -14
- package/src/components/Text/index.ts +0 -2
- package/src/components/TextField/TextField.stories.tsx +0 -90
- package/src/components/TextField/TextField.test.tsx +0 -36
- package/src/components/TextField/TextField.tsx +0 -244
- package/src/components/TextField/index.ts +0 -6
- package/src/components/TextField/useTextField.tsx +0 -26
- package/src/components/Textarea/Textarea.stories.tsx +0 -101
- package/src/components/Textarea/Textarea.test.tsx +0 -14
- package/src/components/Textarea/Textarea.tsx +0 -230
- package/src/components/Textarea/index.ts +0 -2
- package/src/components/Toast/Toast.stories.tsx +0 -50
- package/src/components/Toast/Toast.test.tsx +0 -24
- package/src/components/Toast/Toast.tsx +0 -141
- package/src/components/Toast/icons/close.svg +0 -3
- package/src/components/Toast/icons/danger.svg +0 -4
- package/src/components/Toast/icons/neutral.svg +0 -4
- package/src/components/Toast/icons/success.svg +0 -3
- package/src/components/Toast/icons/warning.svg +0 -4
- package/src/components/Toast/index.tsx +0 -2
- package/src/components/ToggleGroup/Toggle.test.tsx +0 -76
- package/src/components/ToggleGroup/Toggle.tsx +0 -158
- package/src/components/ToggleGroup/ToggleGroup.constants.ts +0 -16
- package/src/components/ToggleGroup/ToggleGroup.stories.tsx +0 -145
- package/src/components/ToggleGroup/ToggleGroup.test.tsx +0 -237
- package/src/components/ToggleGroup/ToggleGroup.tsx +0 -165
- package/src/components/ToggleGroup/ToggleGroup.types.ts +0 -35
- package/src/components/ToggleGroup/ToggleGroupContext.ts +0 -13
- package/src/components/ToggleGroup/index.ts +0 -3
- package/src/components/Tooltip/Tooltip.stories.tsx +0 -82
- package/src/components/Tooltip/Tooltip.test.tsx +0 -49
- package/src/components/Tooltip/Tooltip.tsx +0 -185
- package/src/components/Tooltip/index.ts +0 -2
- package/src/components/TopNavigation/Logo/Logo.test.tsx +0 -21
- package/src/components/TopNavigation/Logo/Logo.tsx +0 -20
- package/src/components/TopNavigation/Logo/index.ts +0 -1
- package/src/components/TopNavigation/Menu/Menu.test.tsx +0 -125
- package/src/components/TopNavigation/Menu/Menu.tsx +0 -62
- package/src/components/TopNavigation/Menu/MenuItemDropdown.tsx +0 -118
- package/src/components/TopNavigation/Menu/MenuItemIcon.tsx +0 -50
- package/src/components/TopNavigation/Menu/index.ts +0 -1
- package/src/components/TopNavigation/OpenSideNavButton/OpenSideNavButton.tsx +0 -28
- package/src/components/TopNavigation/OpenSideNavButton/index.ts +0 -1
- package/src/components/TopNavigation/TopNavigation.stories.tsx +0 -42
- package/src/components/TopNavigation/TopNavigation.tsx +0 -47
- package/src/components/TopNavigation/index.ts +0 -2
- package/src/components/VisuallyHidden/VisuallyHidden.mdx +0 -26
- package/src/components/VisuallyHidden/VisuallyHidden.stories.tsx +0 -32
- package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +0 -18
- package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -6
- package/src/components/VisuallyHidden/index.ts +0 -1
- package/src/docs/tools/DatePickerEvent.stories.mdx +0 -108
- package/src/docs/tools/DragDropFileEvent.stories.mdx +0 -75
- package/src/docs/tools/conditional.stories.mdx +0 -251
- package/src/docs/tools/selectEvent.stories.mdx +0 -121
- package/src/hooks/useClickOutside/index.ts +0 -1
- package/src/hooks/useClickOutside/useClickOutside.test.tsx +0 -116
- package/src/hooks/useClickOutside/useClickOutside.ts +0 -65
- package/src/hooks/useDidMount/index.ts +0 -1
- package/src/hooks/useDidMount/useDidMount.test.tsx +0 -38
- package/src/hooks/useDidMount/useDidMount.ts +0 -20
- package/src/hooks/useFingerprint/index.ts +0 -1
- package/src/hooks/useFingerprint/useFingerprint.test.ts +0 -76
- package/src/hooks/useFingerprint/useFingerprint.ts +0 -94
- package/src/hooks/useFocusTrap/index.ts +0 -2
- package/src/hooks/useFocusTrap/useFocusTrap.stories.tsx +0 -87
- package/src/hooks/useFocusTrap/useFocusTrap.test.tsx +0 -129
- package/src/hooks/useFocusTrap/useFocusTrap.ts +0 -187
- package/src/hooks/useFocusWithin/index.ts +0 -2
- package/src/hooks/useFocusWithin/useFocusWithin.test.tsx +0 -71
- package/src/hooks/useFocusWithin/useFocusWithin.ts +0 -62
- package/src/hooks/useHeightExpansionToggler/index.ts +0 -2
- package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.test.tsx +0 -85
- package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.ts +0 -54
- package/src/hooks/useID/index.ts +0 -1
- package/src/hooks/useID/useID.ts +0 -18
- package/src/hooks/useSelectable/SelectableStrategy.test.ts +0 -424
- package/src/hooks/useSelectable/SelectableStrategy.ts +0 -143
- package/src/hooks/useSelectable/index.ts +0 -8
- package/src/hooks/useSelectable/useSelectable.test.ts +0 -221
- package/src/hooks/useSelectable/useSelectable.ts +0 -156
- package/src/hooks/useSelectable/useSelectable.types.ts +0 -45
- package/src/hooks/useWindowResize/index.ts +0 -1
- package/src/hooks/useWindowResize/useWindowResize.ts +0 -27
- package/src/index.ts +0 -188
- package/src/stories/assets/code-brackets.svg +0 -1
- package/src/stories/assets/colors.svg +0 -1
- package/src/stories/assets/comments.svg +0 -1
- package/src/stories/assets/direction.svg +0 -1
- package/src/stories/assets/flow.svg +0 -1
- package/src/stories/assets/plugin.svg +0 -1
- package/src/stories/assets/repo.svg +0 -1
- package/src/stories/assets/stackalt.svg +0 -1
- package/src/stories/introduction.stories.mdx +0 -57
- package/src/stories/startPage.stories.mdx +0 -95
- package/src/styles/activatable.tsx +0 -30
- package/src/styles/disableable.tsx +0 -45
- package/src/styles/ellipsizable.tsx +0 -14
- package/src/styles/focusable.tsx +0 -32
- package/src/styles/font.test.ts +0 -31
- package/src/styles/font.tsx +0 -40
- package/src/styles/hidden.tsx +0 -29
- package/src/styles/hoverable.tsx +0 -30
- package/src/styles/transition.tsx +0 -25
- package/src/styles/typography.test.ts +0 -93
- package/src/styles/typography.ts +0 -190
- package/src/testing/DatePickerEvent/DatePickerEvent.ts +0 -117
- package/src/testing/DatePickerEvent/DateRangePickerEvent.ts +0 -83
- package/src/testing/DatePickerEvent/index.ts +0 -2
- package/src/testing/DragDropFileEvent/DragDropFileEvent.ts +0 -56
- package/src/testing/DragDropFileEvent/index.ts +0 -1
- package/src/testing/SelectEvent/SelectEvent.test.tsx +0 -192
- package/src/testing/SelectEvent/SelectEvent.ts +0 -264
- package/src/testing/SelectEvent/index.ts +0 -1
- package/src/testing/getInterpolatedStyles/getInterpolatedStyles.ts +0 -25
- package/src/testing/getInterpolatedStyles/index.ts +0 -1
- package/src/testing/index.ts +0 -6
- package/src/testing/renderWithDragDropFileProvider/index.ts +0 -1
- package/src/testing/renderWithDragDropFileProvider/renderWithDragDropFileProvider.tsx +0 -28
- package/src/tests/generator.ts +0 -127
- package/src/tests/renderer.tsx +0 -39
- package/src/theming/index.ts +0 -42
- package/src/theming/themes/alice.theme.ts +0 -1022
- package/src/theming/themes/index.ts +0 -3
- package/src/theming/themes/loadsmart.theme.ts +0 -1019
- package/src/theming/themes/miranda-compatibility.theme.ts +0 -972
- package/src/theming/theming.helpers.ts +0 -95
- package/src/tools/conditional.test.ts +0 -166
- package/src/tools/conditional.ts +0 -127
- package/src/tools/index.ts +0 -2
- package/src/tools/prop.test.ts +0 -52
- package/src/tools/prop.ts +0 -36
- package/src/utils/toolset/awaitTo.ts +0 -24
- package/src/utils/toolset/flatten.ts +0 -3
- package/src/utils/toolset/formatBytes.test.ts +0 -45
- package/src/utils/toolset/formatBytes.ts +0 -18
- package/src/utils/toolset/get.ts +0 -2
- package/src/utils/toolset/getID.test.ts +0 -57
- package/src/utils/toolset/getID.ts +0 -93
- package/src/utils/toolset/getOrdinalSuffix.test.ts +0 -27
- package/src/utils/toolset/getOrdinalSuffix.ts +0 -15
- package/src/utils/toolset/highlightMatch.test.tsx +0 -32
- package/src/utils/toolset/highlightMatch.tsx +0 -32
- package/src/utils/toolset/interleave.test.ts +0 -40
- package/src/utils/toolset/interleave.ts +0 -23
- package/src/utils/toolset/isEmpty.ts +0 -2
- package/src/utils/toolset/isThenable.test.ts +0 -40
- package/src/utils/toolset/isThenable.ts +0 -14
- package/src/utils/toolset/keyboard.ts +0 -50
- package/src/utils/toolset/omit.ts +0 -2
- package/src/utils/toolset/pluralize.ts +0 -16
- package/src/utils/toolset/range.ts +0 -2
- package/src/utils/toolset/rem.ts +0 -7
- package/src/utils/toolset/styledCompounds.ts +0 -22
- package/src/utils/toolset/toArray.ts +0 -16
- package/src/utils/types/ColorScheme.ts +0 -3
- package/src/utils/types/EventLike.ts +0 -11
- package/src/utils/types/InterpolatedStyle.ts +0 -3
- package/src/utils/types/Status.ts +0 -8
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { Meta } from '@storybook/blocks'
|
|
2
|
-
|
|
3
|
-
<Meta title="Tools/Tests/DragDropFile Event" />
|
|
4
|
-
|
|
5
|
-
# DragDropFile Event
|
|
6
|
-
|
|
7
|
-
We have exposed a few helper functions to make it easier to write unit tests for our [`DragDropFile`](/?path=/story/components-dragdropfile--playground) component.
|
|
8
|
-
|
|
9
|
-
The following functions descriptions consider this example:
|
|
10
|
-
|
|
11
|
-
```jsx
|
|
12
|
-
<DragDropFileProvider fileList={fileList} onFilesAdded={onFilesAdded} onFileRemoved={onFileRemoved}>
|
|
13
|
-
<DragDropFile.Wrapper>
|
|
14
|
-
<DragDropFile.DropZone
|
|
15
|
-
aria-label="Drag and drop file"
|
|
16
|
-
renderCustomContent={({ isDragging }) => (
|
|
17
|
-
<div>{isDragging ? 'Is dragging.' : 'Is not dragging.'}</div>
|
|
18
|
-
)}
|
|
19
|
-
multiple
|
|
20
|
-
/>
|
|
21
|
-
<ErrorMessage>{errorMessage}</ErrorMessage>
|
|
22
|
-
<DragDropFile.FileList />
|
|
23
|
-
</DragDropFile.Wrapper>
|
|
24
|
-
</DragDropFileProvider>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## `dropFiles`
|
|
28
|
-
|
|
29
|
-
Simulates the onDrop event on the drop zone. You can provide a list of files or a single file.
|
|
30
|
-
|
|
31
|
-
Example with a single file:
|
|
32
|
-
|
|
33
|
-
```js
|
|
34
|
-
const dropZoneInput = screen.getByLabelText('Drag and drop file') as HTMLInputElement
|
|
35
|
-
|
|
36
|
-
const exampleFile = new File([''], 'example-file.png')
|
|
37
|
-
|
|
38
|
-
DragDropFileEvent.dropFiles(dropZoneInput, exampleFile)
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Example with multiple files:
|
|
42
|
-
|
|
43
|
-
```js
|
|
44
|
-
const dropZoneInput = screen.getByLabelText('Drag and drop file') as HTMLInputElement
|
|
45
|
-
|
|
46
|
-
const firstFile = new File([''], 'first-file.png')
|
|
47
|
-
const secondFile = new File([''], 'second-file.png')
|
|
48
|
-
const exampleFiles = [firstFile, secondFile]
|
|
49
|
-
|
|
50
|
-
DragDropFileEvent.dropFiles(dropZoneInput, exampleFiles)
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## `dragOver`
|
|
54
|
-
|
|
55
|
-
Simulates the onDragOver event on the drop zone. Useful if you have custom content provided with the `renderCustomContent` prop and want to test a different behviour based on the `isDragging` state.
|
|
56
|
-
|
|
57
|
-
Example:
|
|
58
|
-
|
|
59
|
-
```js
|
|
60
|
-
const dropZoneInput = screen.getByLabelText('Drag and drop file') as HTMLInputElement
|
|
61
|
-
|
|
62
|
-
DragDropFileEvent.dragOver(dropZoneInput)
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## `dragLeave`
|
|
66
|
-
|
|
67
|
-
Simulates the onDragLeave event on the drop zone. Useful if you have custom content provided with the `renderCustomContent` prop and want to test a different behviour based on the `isDragging` state.
|
|
68
|
-
|
|
69
|
-
Example:
|
|
70
|
-
|
|
71
|
-
```js
|
|
72
|
-
const dropZoneInput = screen.getByLabelText('Drag and drop file') as HTMLInputElement
|
|
73
|
-
|
|
74
|
-
DragDropFileEvent.dragLeave(dropZoneInput)
|
|
75
|
-
```
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs'
|
|
2
|
-
|
|
3
|
-
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
|
|
4
|
-
|
|
5
|
-
<Meta title="Tools/Conditional & WhenProps" />
|
|
6
|
-
|
|
7
|
-
# The Conditional & WhenProps tools
|
|
8
|
-
|
|
9
|
-
Our conditional utility is heavily inspired by utilities like [classnames](https://www.npmjs.com/package/classnames) and [clsx](https://www.npmjs.com/package/clsx).
|
|
10
|
-
|
|
11
|
-
In a nutshell, its purpose is to evaluate different types of conditions and return a `string` joining all their results.
|
|
12
|
-
|
|
13
|
-
Unlike the utilities we mentioned above, our `conditional` superpower enables us to do that using CSS-in-JS - `styled-components` more specifically - making styling based on logical conditions more straightforward and less verbose.
|
|
14
|
-
|
|
15
|
-
## Conditional
|
|
16
|
-
|
|
17
|
-
Let's consider the following sample button that changes its width based on its `scale` and `variant` props:
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
const Button = styled.button<ButtonProps>`
|
|
21
|
-
// ...
|
|
22
|
-
|
|
23
|
-
width: ${(props) =>
|
|
24
|
-
['primary', 'secondary', 'warning'].includes(props.variant)
|
|
25
|
-
? '36px'
|
|
26
|
-
: props.variant == 'icon' && props.scale == 'default'
|
|
27
|
-
? '32px'
|
|
28
|
-
: props.variant == 'icon' && props.scale == 'large'
|
|
29
|
-
? '48px'
|
|
30
|
-
: '24px'};
|
|
31
|
-
|
|
32
|
-
// ...
|
|
33
|
-
`
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Of course, we could improve how we wrote our conditions, but that would still take some effort to make it easy to read and maintain.
|
|
37
|
-
|
|
38
|
-
Notice how we use our `props` of interest to determine the final value for our button's width. Well, that's where our `conditional` comes in handy. It encapsulates the `props` consumption, allowing for a quicker way of writing the conditionals.
|
|
39
|
-
|
|
40
|
-
Our current implementation allows the following types of condition checking:
|
|
41
|
-
|
|
42
|
-
**_Function condition_**
|
|
43
|
-
|
|
44
|
-
A function that receives the component props as argument and should return a string.
|
|
45
|
-
|
|
46
|
-
```tsx
|
|
47
|
-
const Button = styled.button<ButtonProps>`
|
|
48
|
-
// ...
|
|
49
|
-
|
|
50
|
-
height: ${conditional(props => props.scale == 'default' ? '36px' : '24px')};
|
|
51
|
-
|
|
52
|
-
// ...
|
|
53
|
-
`;
|
|
54
|
-
|
|
55
|
-
<Button scale="default" /> // would render style with `height: 36px;`
|
|
56
|
-
|
|
57
|
-
<Button scale="small" /> // would render style with `height: 24px;`
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**_Object condition_**
|
|
61
|
-
|
|
62
|
-
An object, where the `key` would end up in the result of the `conditional` if `value` evaluates to `true`. Here, the `value` can be either a `boolean` value or a `function` that receives the component props as argument and returns a `boolean`.
|
|
63
|
-
|
|
64
|
-
```tsx
|
|
65
|
-
const Button = styled.button<ButtonProps>`
|
|
66
|
-
// ...
|
|
67
|
-
|
|
68
|
-
height: ${conditional({
|
|
69
|
-
'36px': true, // use any value you would want to be evaluated as boolean
|
|
70
|
-
})};
|
|
71
|
-
|
|
72
|
-
width: ${conditional({
|
|
73
|
-
'36px': props => props.scale == 'default', // or a function that returns a boolean
|
|
74
|
-
'24px': props => props.scale == 'small'
|
|
75
|
-
})};
|
|
76
|
-
|
|
77
|
-
// ...
|
|
78
|
-
`;
|
|
79
|
-
|
|
80
|
-
<Button scale="default" /> // would render style with `height: 36px; width: 36px;`
|
|
81
|
-
|
|
82
|
-
<Button scale="small" /> // would render style with `height: 36px; width: 24px;`
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**_Primitive condition_**
|
|
86
|
-
|
|
87
|
-
Any value you want to end up resulting from `conditional`, if _truthy_.
|
|
88
|
-
|
|
89
|
-
```tsx
|
|
90
|
-
const PADDING_X = '20px'
|
|
91
|
-
|
|
92
|
-
const Button = styled.button<ButtonProps>`
|
|
93
|
-
// ...
|
|
94
|
-
|
|
95
|
-
padding: ${conditional('10px', PADDING_X, false)};
|
|
96
|
-
|
|
97
|
-
// ...
|
|
98
|
-
`
|
|
99
|
-
|
|
100
|
-
;<Button /> // would render style with `padding: 10px 20px;`
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
**_Mixed condition_**
|
|
104
|
-
|
|
105
|
-
Of course, you can also mix and match multiple conditions at will:
|
|
106
|
-
|
|
107
|
-
```tsx
|
|
108
|
-
const Button = styled.button<ButtonProps>`
|
|
109
|
-
// ...
|
|
110
|
-
|
|
111
|
-
margin: ${conditional(
|
|
112
|
-
'10px',
|
|
113
|
-
props => props.scale == 'default' ? '12px' : '8px', {
|
|
114
|
-
'14px': true
|
|
115
|
-
})};
|
|
116
|
-
|
|
117
|
-
// ...
|
|
118
|
-
`;
|
|
119
|
-
|
|
120
|
-
<Button scale="default" /> // would render style with `margin: 10px 12px 14px;`
|
|
121
|
-
|
|
122
|
-
<Button scale="small" /> // would render style with `margin: 10px 8px 14px;`
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
One cool thing to add is that you can also consume design tokens from our theme besides managing regular `string`s derived from condition checks. If the condition is evaluated to `true`, the value of that theme token will be returned.
|
|
126
|
-
|
|
127
|
-
```tsx
|
|
128
|
-
const Button = styled.button<ButtonProps>`
|
|
129
|
-
// ...
|
|
130
|
-
|
|
131
|
-
width: ${conditional({
|
|
132
|
-
'button-default-width': props => props.scale == 'default',
|
|
133
|
-
'button-small-width': props => props.scale == 'small'
|
|
134
|
-
})};
|
|
135
|
-
|
|
136
|
-
// ...
|
|
137
|
-
`;
|
|
138
|
-
|
|
139
|
-
<Button scale="default" /> // would render style with `width: <token value for button-default-width>;`
|
|
140
|
-
|
|
141
|
-
<Button scale="small" /> // would render style with `width: <token value for button-small-width>;`
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
Ok, this is cool indeed, but we can get even further with another utility that goes along `conditional`, the `whenProps` tool.
|
|
145
|
-
|
|
146
|
-
## WhenProps
|
|
147
|
-
|
|
148
|
-
This utility helps us write even cleaner `props`-based conditions by leveraging how `styled-components` handle interpolation. No need to go into implementation details here, so let's go back to the initial example to show how `conditional` and `whenProps` make the perfect pair:
|
|
149
|
-
|
|
150
|
-
_Before_:
|
|
151
|
-
|
|
152
|
-
```tsx
|
|
153
|
-
const Button = styled.button<ButtonProps>`
|
|
154
|
-
// ...
|
|
155
|
-
|
|
156
|
-
width: ${(props) =>
|
|
157
|
-
['primary', 'secondary', 'warning'].include(props.variant)
|
|
158
|
-
? '36px'
|
|
159
|
-
: props.variant == 'icon' && props.scale == 'default'
|
|
160
|
-
? '32px'
|
|
161
|
-
: props.variant == 'icon' && props.scale == 'large'
|
|
162
|
-
? '48px'
|
|
163
|
-
: '24px'};
|
|
164
|
-
|
|
165
|
-
// ...
|
|
166
|
-
`
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
_After_:
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
|
|
173
|
-
const Button = styled.button<ButtonProps>`
|
|
174
|
-
// ...
|
|
175
|
-
|
|
176
|
-
width: ${conditional({
|
|
177
|
-
'36px': whenProps({ variant: ['primary', 'secondary', 'warning'] }),
|
|
178
|
-
'24px': whenProps({ variant: 'icon', scale: 'small' }),
|
|
179
|
-
'32px': whenProps({ variant: 'icon', scale: 'default' }),
|
|
180
|
-
'48px': whenProps({ variant: 'icon', scale: 'large' }),
|
|
181
|
-
})};
|
|
182
|
-
|
|
183
|
-
// ...
|
|
184
|
-
`;
|
|
185
|
-
|
|
186
|
-
<Button variant="primary" /> // would render style with `width: 36px;`
|
|
187
|
-
|
|
188
|
-
<Button variant="secondary" /> // would render style with `width: 36px;`
|
|
189
|
-
|
|
190
|
-
<Button variant="warning" /> // would render style with `width: 36px;`
|
|
191
|
-
|
|
192
|
-
<Button variant="icon" scale="small" /> // would render style with `width: 24px;`
|
|
193
|
-
|
|
194
|
-
<Button variant="icon" scale="default" /> // would render style with `width: 32px;`
|
|
195
|
-
|
|
196
|
-
<Button variant="icon" scale="large" /> // would render style with `width: 48px;`
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
`whenProps` receives an object that defines how condition should be evaluated over the component's `props`, mapping which value(s) it should be compared to for each prop of interest (for predictability reasons, we use strict comparison).
|
|
200
|
-
|
|
201
|
-
The values can be represented as follows:
|
|
202
|
-
|
|
203
|
-
**_Array_**
|
|
204
|
-
|
|
205
|
-
A collection of values that the prop value should be compared to.
|
|
206
|
-
|
|
207
|
-
```tsx
|
|
208
|
-
const Button = styled.button<ButtonProps>`
|
|
209
|
-
width: ${conditional({
|
|
210
|
-
'36px': whenProps({ variant: ['primary', 'secondary', 'warning'] }),
|
|
211
|
-
})};
|
|
212
|
-
`
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
In the example above, we'll have `width: 36px;` as a result if the button's `variant` prop is either `'primary'`, `'secondary'`, or `'warning'`.
|
|
216
|
-
|
|
217
|
-
**_Function_**
|
|
218
|
-
|
|
219
|
-
A function that receives the prop value as argument and returns a `boolean`.
|
|
220
|
-
|
|
221
|
-
```tsx
|
|
222
|
-
const Button = styled.button<ButtonProps>`
|
|
223
|
-
width: ${conditional({
|
|
224
|
-
'36px': whenProps({
|
|
225
|
-
variant: (variant) => ['primary', 'secondary', 'warning'].includes(variant),
|
|
226
|
-
}),
|
|
227
|
-
})};
|
|
228
|
-
`
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
In the example above, we'll also have `width: 36px;` as a result if the button's `variant` prop is either `'primary'`, `'secondary'`, or `'warning'`.
|
|
232
|
-
|
|
233
|
-
**_Anything else_**
|
|
234
|
-
|
|
235
|
-
A value to which the component prop will be strictly compared to.
|
|
236
|
-
|
|
237
|
-
```tsx
|
|
238
|
-
const Button = styled.button<ButtonProps>`
|
|
239
|
-
width: ${conditional({
|
|
240
|
-
'36px': whenProps({ variant: 'primary' }),
|
|
241
|
-
})};
|
|
242
|
-
`
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
In the example above, we'll have `width: 36px;` as a result only if the button's `variant` prop is `'primary'`.
|
|
246
|
-
|
|
247
|
-
{/* The usage of this "Component" is intentional to enable react-syntax-highlighter's own highlighter */}
|
|
248
|
-
|
|
249
|
-
export const Component = () => {
|
|
250
|
-
return <SyntaxHighlighter />
|
|
251
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { Meta } from '@storybook/blocks'
|
|
2
|
-
|
|
3
|
-
<Meta title="Tools/Tests/Select Event" />
|
|
4
|
-
|
|
5
|
-
# Select Event
|
|
6
|
-
|
|
7
|
-
Our [`Select`](/?path=/story/components-select--playground) component is fully tailored for the needs of our Design System.
|
|
8
|
-
|
|
9
|
-
As we are not using the native select element, writing unit tests that rely on our custom component would require prior knowledge about its inner structure. To prevent that and to help with performing the main select features, we have exposed a few helper functions.
|
|
10
|
-
|
|
11
|
-
The following functions descriptions consider this example:
|
|
12
|
-
|
|
13
|
-
```jsx
|
|
14
|
-
<div>
|
|
15
|
-
<label htmlFor="select-something">Select something</label>
|
|
16
|
-
<Select id="select-something" {...otherProps} />
|
|
17
|
-
</div>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## `expand`
|
|
21
|
-
|
|
22
|
-
This asynchronous function will expand (show) the select menu if it's not already expanded.
|
|
23
|
-
|
|
24
|
-
Example:
|
|
25
|
-
|
|
26
|
-
```js
|
|
27
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
28
|
-
await selectEvent.expand(selectComponent)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## `collapse`
|
|
32
|
-
|
|
33
|
-
This asynchronous function will collapse the select menu if it's not already collapsed.
|
|
34
|
-
|
|
35
|
-
Example:
|
|
36
|
-
|
|
37
|
-
```js
|
|
38
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
39
|
-
await selectEvent.collapse(selectComponent)
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## `select`
|
|
43
|
-
|
|
44
|
-
This asynchronous function will select the option provided, referred to by its label.
|
|
45
|
-
|
|
46
|
-
Since we currently support only single selection, we collapse the menu after clicking the option.
|
|
47
|
-
|
|
48
|
-
If the provided option is already selected, nothing will happen.
|
|
49
|
-
|
|
50
|
-
Example:
|
|
51
|
-
|
|
52
|
-
```js
|
|
53
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
54
|
-
await selectEvent.select('Option label', selectComponent)
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## `unselect`
|
|
58
|
-
|
|
59
|
-
This asynchronous function will unselect the option provided, referred to by its label.
|
|
60
|
-
|
|
61
|
-
Since we currently support only single selection, we collapse the menu after clicking the option.
|
|
62
|
-
|
|
63
|
-
If the provided option is already unselected, nothing will happen.
|
|
64
|
-
|
|
65
|
-
Example:
|
|
66
|
-
|
|
67
|
-
```js
|
|
68
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
69
|
-
await selectEvent.unselect('Option label', selectComponent)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## `clear`
|
|
73
|
-
|
|
74
|
-
This asynchronous function will clear the current selection.
|
|
75
|
-
|
|
76
|
-
If there is no selected option, nothing will happen.
|
|
77
|
-
|
|
78
|
-
Example:
|
|
79
|
-
|
|
80
|
-
```js
|
|
81
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
82
|
-
await selectEvent.clear(selectComponent)
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## `getOptions`
|
|
86
|
-
|
|
87
|
-
This asynchronous function will return the option elements currently available on the provided Select.
|
|
88
|
-
|
|
89
|
-
Example:
|
|
90
|
-
|
|
91
|
-
```js
|
|
92
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
93
|
-
const optionElements = await selectEvent.getOptions(selectComponent)
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## `getSelectedOptions`
|
|
97
|
-
|
|
98
|
-
This asynchronous function will return the option elements currently selected on the provided Select.
|
|
99
|
-
|
|
100
|
-
As previously mentioned, we only support single selection, so expect an array with 0 or 1 element for the time being.
|
|
101
|
-
|
|
102
|
-
Example:
|
|
103
|
-
|
|
104
|
-
```js
|
|
105
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
106
|
-
const selectedOptionElements = await selectEvent.getSelectedOptions(selectComponent)
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## `search`
|
|
110
|
-
|
|
111
|
-
This asynchronous function will trigger a search based on the provided query term.
|
|
112
|
-
|
|
113
|
-
You can use the `getOptions` to check the options that match your search.
|
|
114
|
-
|
|
115
|
-
Example:
|
|
116
|
-
|
|
117
|
-
```js
|
|
118
|
-
const selectComponent = screen.getByLabelText('Select something')
|
|
119
|
-
await selectEvent.search('Search term', selectedOptionElements)
|
|
120
|
-
const matchingOptionElements = await selectEvent.getOptions(input)
|
|
121
|
-
```
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as useClickOutside } from './useClickOutside'
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import React, { useRef } from 'react'
|
|
2
|
-
import renderer, { screen, fire } from '../../tests/renderer'
|
|
3
|
-
|
|
4
|
-
import useClickOutside from './useClickOutside'
|
|
5
|
-
interface ExperimentProps {
|
|
6
|
-
callback: () => void
|
|
7
|
-
disabled: boolean
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function Experiment({ callback, disabled }: ExperimentProps) {
|
|
11
|
-
const ref = useRef(null)
|
|
12
|
-
|
|
13
|
-
useClickOutside(ref, callback, disabled)
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div>
|
|
17
|
-
<div ref={ref}>
|
|
18
|
-
<label id="inside-label">Inside</label>
|
|
19
|
-
<input aria-labelledby="inside-label" />
|
|
20
|
-
</div>
|
|
21
|
-
<button>Outside</button>
|
|
22
|
-
</div>
|
|
23
|
-
)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const setup = (props: ExperimentProps) => renderer(<Experiment {...props} />).render()
|
|
27
|
-
|
|
28
|
-
describe('useClickOutside', () => {
|
|
29
|
-
describe('when enabled', () => {
|
|
30
|
-
const props = {
|
|
31
|
-
callback: jest.fn(),
|
|
32
|
-
disabled: false,
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
it('does not call callback if user has not interacted with container descendants', () => {
|
|
36
|
-
setup(props)
|
|
37
|
-
|
|
38
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
39
|
-
fire.touchEnd(screen.getByText('Outside'))
|
|
40
|
-
fire.keyUp(screen.getByText('Outside'), { key: 'Escape', code: 'Escape' })
|
|
41
|
-
|
|
42
|
-
expect(props.callback).not.toHaveBeenCalled()
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it('calls callback if the user has interacted with the mouse in any of the container descendants', () => {
|
|
46
|
-
setup(props)
|
|
47
|
-
|
|
48
|
-
fire.mouseDown(screen.getByLabelText('Inside'))
|
|
49
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
50
|
-
expect(props.callback).toHaveBeenCalled()
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('calls callback if the user has touched in any of the container descendants', () => {
|
|
54
|
-
setup(props)
|
|
55
|
-
|
|
56
|
-
fire.touchEnd(screen.getByLabelText('Inside'))
|
|
57
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
58
|
-
expect(props.callback).toHaveBeenCalled()
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('calls callback if the user has pressed any key in any of the container descendants', () => {
|
|
62
|
-
setup(props)
|
|
63
|
-
|
|
64
|
-
fire.keyUp(screen.getByLabelText('Inside'), { key: 'A', code: 'KeyA' })
|
|
65
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
66
|
-
expect(props.callback).toHaveBeenCalled()
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
it('calls callback if the user presses the escape key while interacting with any of the container descendants', () => {
|
|
70
|
-
setup(props)
|
|
71
|
-
|
|
72
|
-
fire.mouseDown(screen.getByLabelText('Inside'))
|
|
73
|
-
fire.keyUp(screen.getByLabelText('Inside'), { key: 'Escape', code: 'Escape' })
|
|
74
|
-
expect(props.callback).toHaveBeenCalled()
|
|
75
|
-
})
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
describe('when disabled', () => {
|
|
79
|
-
const props = {
|
|
80
|
-
callback: jest.fn(),
|
|
81
|
-
disabled: true,
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
it('does not call the callback even if the user has interacted with the mouse in any of the container descendants', () => {
|
|
85
|
-
setup(props)
|
|
86
|
-
|
|
87
|
-
fire.mouseDown(screen.getByLabelText('Inside'))
|
|
88
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
89
|
-
expect(props.callback).not.toHaveBeenCalled()
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
it('does not call callback even if the user has touched in any of the container descendants', () => {
|
|
93
|
-
setup(props)
|
|
94
|
-
|
|
95
|
-
fire.touchEnd(screen.getByLabelText('Inside'))
|
|
96
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
97
|
-
expect(props.callback).not.toHaveBeenCalled()
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
it('does not call callback even if the user has pressed any key in any of the container descendants', () => {
|
|
101
|
-
setup(props)
|
|
102
|
-
|
|
103
|
-
fire.keyUp(screen.getByLabelText('Inside'), { key: 'A', code: 'KeyA' })
|
|
104
|
-
fire.mouseDown(screen.getByText('Outside'))
|
|
105
|
-
expect(props.callback).not.toHaveBeenCalled()
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
it('does not call callback even if the user presses the escape key while interacting with any of the container descendants', () => {
|
|
109
|
-
setup(props)
|
|
110
|
-
|
|
111
|
-
fire.mouseDown(screen.getByLabelText('Inside'))
|
|
112
|
-
fire.keyUp(screen.getByLabelText('Inside'), { key: 'Escape', code: 'Escape' })
|
|
113
|
-
expect(props.callback).not.toHaveBeenCalled()
|
|
114
|
-
})
|
|
115
|
-
})
|
|
116
|
-
})
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
import KeyboardKey from 'utils/toolset/keyboard'
|
|
4
|
-
|
|
5
|
-
import type { RefObject } from 'react'
|
|
6
|
-
|
|
7
|
-
function useClickOutside<T extends HTMLElement>(
|
|
8
|
-
container: RefObject<T>,
|
|
9
|
-
callback: (event?: MouseEvent | TouchEvent | KeyboardEvent) => void,
|
|
10
|
-
disabled = false
|
|
11
|
-
): void {
|
|
12
|
-
const [active, setActive] = useState(false)
|
|
13
|
-
|
|
14
|
-
const getContainer = useCallback(
|
|
15
|
-
function getContainer() {
|
|
16
|
-
return container.current
|
|
17
|
-
},
|
|
18
|
-
[container]
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
const handleEvent = useCallback(
|
|
22
|
-
function handleEvent(event: MouseEvent | TouchEvent | KeyboardEvent) {
|
|
23
|
-
function hasPressedEsc() {
|
|
24
|
-
return KeyboardKey(event as unknown as React.KeyboardEvent).is('ESCAPE')
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (!getContainer() || disabled) {
|
|
28
|
-
return
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const target = event.target as Node
|
|
32
|
-
const hasTarget = getContainer()?.contains(target)
|
|
33
|
-
|
|
34
|
-
if (!active && hasTarget) {
|
|
35
|
-
setActive(true)
|
|
36
|
-
} else if (active && (!hasTarget || hasPressedEsc())) {
|
|
37
|
-
setActive(false)
|
|
38
|
-
callback(event)
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
[active, callback, disabled, getContainer]
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
function subscribe() {
|
|
46
|
-
document.addEventListener('mousedown', handleEvent, true)
|
|
47
|
-
document.addEventListener('touchend', handleEvent, true)
|
|
48
|
-
document.addEventListener('keyup', handleEvent)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function unsubscribe() {
|
|
52
|
-
document.removeEventListener('mousedown', handleEvent, true)
|
|
53
|
-
document.removeEventListener('touchend', handleEvent, true)
|
|
54
|
-
document.removeEventListener('keyup', handleEvent)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
subscribe()
|
|
58
|
-
|
|
59
|
-
return () => {
|
|
60
|
-
unsubscribe()
|
|
61
|
-
}
|
|
62
|
-
}, [handleEvent])
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export default useClickOutside
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as useDidMount } from './useDidMount'
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react'
|
|
2
|
-
import renderer, { screen } from '../../tests/renderer'
|
|
3
|
-
import useDidMount from './useDidMount'
|
|
4
|
-
|
|
5
|
-
function Experiment() {
|
|
6
|
-
const [logs, setLogs] = useState<string[]>([])
|
|
7
|
-
const didMount = useDidMount()
|
|
8
|
-
|
|
9
|
-
useEffect(
|
|
10
|
-
function () {
|
|
11
|
-
setLogs((logs) => [...logs, didMount ? 'did mount' : 'not mounted'])
|
|
12
|
-
},
|
|
13
|
-
[didMount]
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<div data-testid="logs">
|
|
18
|
-
{logs.map((log, index) => (
|
|
19
|
-
<p key={index}>{log}</p>
|
|
20
|
-
))}
|
|
21
|
-
</div>
|
|
22
|
-
)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const setup = () => renderer(<Experiment />).render()
|
|
26
|
-
|
|
27
|
-
describe('useDidMount', () => {
|
|
28
|
-
it('returns true after component is mounted', () => {
|
|
29
|
-
setup()
|
|
30
|
-
|
|
31
|
-
const logs = screen.getByTestId('logs')
|
|
32
|
-
|
|
33
|
-
expect(logs.children).toHaveLength(2)
|
|
34
|
-
|
|
35
|
-
expect(logs.children[0]).toHaveTextContent('not mounted')
|
|
36
|
-
expect(logs.children[1]).toHaveTextContent('did mount')
|
|
37
|
-
})
|
|
38
|
-
})
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { useRef, useEffect } from 'react'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Hook useful to trigger action conditionally based
|
|
5
|
-
* on if the component is mounted.
|
|
6
|
-
* Be aware that your effect, callback, memo, etc cannot list is
|
|
7
|
-
* as a dependency, otherwise it will be triggered at the wrong moment.
|
|
8
|
-
* @returns {boolean} Whether the component is mounted or not.
|
|
9
|
-
*/
|
|
10
|
-
function useDidMount(): boolean {
|
|
11
|
-
const counter = useRef(0)
|
|
12
|
-
|
|
13
|
-
useEffect(function onMount() {
|
|
14
|
-
counter.current = 1
|
|
15
|
-
}, [])
|
|
16
|
-
|
|
17
|
-
return counter.current > 0
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export default useDidMount
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from './useFingerprint'
|