polpo 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.cjs +3 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.css +2 -0
- package/dist/components.css.map +1 -0
- package/dist/components.d.cts +1866 -0
- package/dist/components.d.ts +1866 -0
- package/dist/components.js +3 -0
- package/dist/components.js.map +1 -0
- package/dist/{get-modal-position-drle0OjP.d.cts → get-modal-position-C5jQsaGx.d.cts} +1 -1
- package/dist/{get-modal-position-drle0OjP.d.ts → get-modal-position-C5jQsaGx.d.ts} +1 -1
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +2 -2
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.js +1 -1
- package/dist/helpers.js.map +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +15 -13
- package/dist/hooks.d.ts +15 -13
- package/dist/hooks.js +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/layouts.cjs +3 -0
- package/dist/layouts.cjs.map +1 -0
- package/dist/layouts.css +2 -0
- package/dist/layouts.css.map +1 -0
- package/dist/{ui.d.cts → layouts.d.cts} +237 -2202
- package/dist/{ui.d.ts → layouts.d.ts} +237 -2202
- package/dist/layouts.js +3 -0
- package/dist/layouts.js.map +1 -0
- package/dist/types.cjs +3 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +8 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/{use-modal-transition-XQHye62R.d.cts → use-modal-transition-C0lyjvkD.d.ts} +4 -4
- package/dist/{use-modal-transition-DPZFWFFf.d.ts → use-modal-transition-C7DzbnY5.d.cts} +4 -4
- package/package.json +76 -76
- package/.eslintrc.cjs +0 -9
- package/.storybook/decorators.tsx +0 -61
- package/.storybook/main.ts +0 -47
- package/.storybook/manager-head.html +0 -2
- package/.storybook/manager.ts +0 -7
- package/.storybook/preview-head.html +0 -2
- package/.storybook/preview.ts +0 -38
- package/.storybook/theme.ts +0 -47
- package/.turbo/turbo-lint.log +0 -4
- package/README.md +0 -65
- package/dist/chunk-CF5MBMWG.js +0 -3
- package/dist/chunk-CF5MBMWG.js.map +0 -1
- package/dist/chunk-MAWW6AA7.js +0 -3
- package/dist/chunk-MAWW6AA7.js.map +0 -1
- package/dist/ui.cjs +0 -2279
- package/dist/ui.cjs.map +0 -1
- package/dist/ui.js +0 -2279
- package/dist/ui.js.map +0 -1
- package/src/components/accordion/accordion-item.stories.tsx +0 -128
- package/src/components/accordion/accordion-item.tsx +0 -119
- package/src/components/accordion/accordion.stories.tsx +0 -74
- package/src/components/accordion/accordion.style.ts +0 -42
- package/src/components/accordion/accordion.tsx +0 -74
- package/src/components/accordion/index.ts +0 -2
- package/src/components/buttons/button/button.stories.tsx +0 -103
- package/src/components/buttons/button/button.style.ts +0 -152
- package/src/components/buttons/button/button.tsx +0 -107
- package/src/components/buttons/button/index.ts +0 -1
- package/src/components/buttons/index.ts +0 -1
- package/src/components/cards/flip-card/flip-card.stories.tsx +0 -61
- package/src/components/cards/flip-card/flip-card.style.ts +0 -45
- package/src/components/cards/flip-card/flip-card.tsx +0 -55
- package/src/components/cards/flip-card/index.ts +0 -1
- package/src/components/cards/hover-card/hover-card.stories.tsx +0 -45
- package/src/components/cards/hover-card/hover-card.style.ts +0 -13
- package/src/components/cards/hover-card/hover-card.tsx +0 -71
- package/src/components/cards/hover-card/index.ts +0 -1
- package/src/components/cards/index.ts +0 -3
- package/src/components/cards/slide-card/index.ts +0 -1
- package/src/components/cards/slide-card/slide-card.stories.tsx +0 -47
- package/src/components/cards/slide-card/slide-card.tsx +0 -42
- package/src/components/cursor/cursor.stories.tsx +0 -36
- package/src/components/cursor/cursor.style.ts +0 -73
- package/src/components/cursor/cursor.tsx +0 -49
- package/src/components/cursor/index.ts +0 -1
- package/src/components/form/checkbox/checkbox.stories.tsx +0 -85
- package/src/components/form/checkbox/checkbox.style.ts +0 -109
- package/src/components/form/checkbox/checkbox.tsx +0 -120
- package/src/components/form/checkbox/index.ts +0 -1
- package/src/components/form/controller/controller.tsx +0 -42
- package/src/components/form/controller/index.ts +0 -1
- package/src/components/form/date-picker/date-picker.stories.tsx +0 -38
- package/src/components/form/date-picker/date-picker.tsx +0 -67
- package/src/components/form/date-picker/index.ts +0 -1
- package/src/components/form/field/field.stories.tsx +0 -52
- package/src/components/form/field/field.style.ts +0 -94
- package/src/components/form/field/field.tsx +0 -86
- package/src/components/form/field/field.types.ts +0 -34
- package/src/components/form/field/index.ts +0 -2
- package/src/components/form/form.stories.types.tsx +0 -50
- package/src/components/form/form.types.ts +0 -37
- package/src/components/form/index.ts +0 -14
- package/src/components/form/input/index.ts +0 -1
- package/src/components/form/input/input.stories.tsx +0 -41
- package/src/components/form/input/input.tsx +0 -73
- package/src/components/form/input-color/index.ts +0 -1
- package/src/components/form/input-color/input-color.stories.tsx +0 -46
- package/src/components/form/input-color/input-color.style.ts +0 -94
- package/src/components/form/input-color/input-color.tsx +0 -162
- package/src/components/form/input-file/index.ts +0 -1
- package/src/components/form/input-file/input-file.stories.tsx +0 -40
- package/src/components/form/input-file/input-file.style.ts +0 -143
- package/src/components/form/input-file/input-file.tsx +0 -214
- package/src/components/form/input-password/index.ts +0 -1
- package/src/components/form/input-password/input-password.stories.tsx +0 -37
- package/src/components/form/input-password/input-password.tsx +0 -83
- package/src/components/form/radio/index.ts +0 -1
- package/src/components/form/radio/radio.stories.tsx +0 -68
- package/src/components/form/radio/radio.style.ts +0 -79
- package/src/components/form/radio/radio.tsx +0 -106
- package/src/components/form/select/data.stories.json +0 -452
- package/src/components/form/select/index.ts +0 -1
- package/src/components/form/select/option.tsx +0 -101
- package/src/components/form/select/options.tsx +0 -161
- package/src/components/form/select/select.stories.tsx +0 -369
- package/src/components/form/select/select.style.ts +0 -116
- package/src/components/form/select/select.tsx +0 -312
- package/src/components/form/select/select.types.ts +0 -97
- package/src/components/form/slider/index.ts +0 -1
- package/src/components/form/slider/slider.stories.tsx +0 -40
- package/src/components/form/slider/slider.style.ts +0 -92
- package/src/components/form/slider/slider.tsx +0 -108
- package/src/components/form/switch/index.ts +0 -1
- package/src/components/form/switch/switch.stories.tsx +0 -88
- package/src/components/form/switch/switch.style.ts +0 -137
- package/src/components/form/switch/switch.tsx +0 -177
- package/src/components/form/textarea/index.ts +0 -1
- package/src/components/form/textarea/textarea.stories.tsx +0 -43
- package/src/components/form/textarea/textarea.style.ts +0 -7
- package/src/components/form/textarea/textarea.tsx +0 -76
- package/src/components/icon/icon.stories.tsx +0 -63
- package/src/components/icon/icon.tsx +0 -64
- package/src/components/icon/icons/index.ts +0 -18
- package/src/components/icon/icons/object.tsx +0 -482
- package/src/components/icon/icons/social.tsx +0 -88
- package/src/components/icon/icons/symbol.tsx +0 -776
- package/src/components/icon/index.ts +0 -5
- package/src/components/image/image.stories.tsx +0 -25
- package/src/components/image/image.tsx +0 -7
- package/src/components/image/index.ts +0 -1
- package/src/components/index.ts +0 -17
- package/src/components/infinity-scroll/index.ts +0 -1
- package/src/components/infinity-scroll/infinity-scroll.stories.tsx +0 -118
- package/src/components/infinity-scroll/infinity-scroll.style.ts +0 -30
- package/src/components/infinity-scroll/infinity-scroll.tsx +0 -53
- package/src/components/line/index.ts +0 -1
- package/src/components/line/line.stories.tsx +0 -66
- package/src/components/line/line.style.ts +0 -57
- package/src/components/line/line.tsx +0 -76
- package/src/components/loaders/icons/box-1.tsx +0 -31
- package/src/components/loaders/icons/box-2.tsx +0 -30
- package/src/components/loaders/icons/box-3.tsx +0 -66
- package/src/components/loaders/icons/clock-1.tsx +0 -25
- package/src/components/loaders/icons/clock-2.tsx +0 -58
- package/src/components/loaders/icons/dots-1.tsx +0 -194
- package/src/components/loaders/icons/dots-2.tsx +0 -15
- package/src/components/loaders/icons/dots-3.tsx +0 -38
- package/src/components/loaders/icons/dots-4.tsx +0 -90
- package/src/components/loaders/icons/dots-5.tsx +0 -30
- package/src/components/loaders/icons/dots-6.tsx +0 -72
- package/src/components/loaders/icons/dots-7.tsx +0 -51
- package/src/components/loaders/icons/dots-8.tsx +0 -42
- package/src/components/loaders/icons/dots-9.tsx +0 -27
- package/src/components/loaders/icons/lines-1.tsx +0 -96
- package/src/components/loaders/icons/lines-2.tsx +0 -48
- package/src/components/loaders/icons/pulse-1.tsx +0 -69
- package/src/components/loaders/icons/pulse-2.tsx +0 -69
- package/src/components/loaders/icons/pulse-3.tsx +0 -105
- package/src/components/loaders/icons/pulse-4.tsx +0 -105
- package/src/components/loaders/icons/pulse-5.tsx +0 -56
- package/src/components/loaders/icons/spinner-1.tsx +0 -162
- package/src/components/loaders/icons/spinner-2.tsx +0 -147
- package/src/components/loaders/icons/spinner-3.tsx +0 -35
- package/src/components/loaders/icons/spinner-4.tsx +0 -16
- package/src/components/loaders/index.ts +0 -1
- package/src/components/loaders/simple-loader/index.ts +0 -1
- package/src/components/loaders/simple-loader/simple-loader.stories.tsx +0 -42
- package/src/components/loaders/simple-loader/simple-loader.style.ts +0 -12
- package/src/components/loaders/simple-loader/simple-loader.tsx +0 -99
- package/src/components/modals/action-modal/action-modal.stories.tsx +0 -157
- package/src/components/modals/action-modal/action-modal.style.ts +0 -117
- package/src/components/modals/action-modal/action-modal.tsx +0 -148
- package/src/components/modals/action-modal/index.ts +0 -1
- package/src/components/modals/aside-modal/aside-modal.stories.tsx +0 -81
- package/src/components/modals/aside-modal/aside-modal.style.ts +0 -88
- package/src/components/modals/aside-modal/aside-modal.tsx +0 -64
- package/src/components/modals/aside-modal/index.ts +0 -1
- package/src/components/modals/confirmation-modal/confirmation-modal.stories.tsx +0 -62
- package/src/components/modals/confirmation-modal/confirmation-modal.style.ts +0 -17
- package/src/components/modals/confirmation-modal/confirmation-modal.tsx +0 -43
- package/src/components/modals/confirmation-modal/index.ts +0 -1
- package/src/components/modals/index.ts +0 -6
- package/src/components/modals/menu/index.ts +0 -1
- package/src/components/modals/menu/menu.stories.tsx +0 -79
- package/src/components/modals/menu/menu.style.ts +0 -103
- package/src/components/modals/menu/menu.tsx +0 -186
- package/src/components/modals/modal/backdrop.tsx +0 -70
- package/src/components/modals/modal/index.ts +0 -2
- package/src/components/modals/modal/modal.stories.tsx +0 -328
- package/src/components/modals/modal/modal.style.ts +0 -70
- package/src/components/modals/modal/modal.tsx +0 -106
- package/src/components/modals/portal/index.ts +0 -1
- package/src/components/modals/portal/portal.tsx +0 -21
- package/src/components/ripple/index.ts +0 -1
- package/src/components/ripple/ripple.stories.tsx +0 -38
- package/src/components/ripple/ripple.style.ts +0 -33
- package/src/components/ripple/ripple.tsx +0 -65
- package/src/components/smart-table/index.ts +0 -1
- package/src/components/smart-table/smart-table.column.tsx +0 -63
- package/src/components/smart-table/smart-table.helpers.tsx +0 -59
- package/src/components/smart-table/smart-table.hooks.ts +0 -27
- package/src/components/smart-table/smart-table.row.tsx +0 -29
- package/src/components/smart-table/smart-table.stories.tsx +0 -301
- package/src/components/smart-table/smart-table.style.ts +0 -102
- package/src/components/smart-table/smart-table.tsx +0 -112
- package/src/components/smart-table/smart-table.types.ts +0 -41
- package/src/components/tabs/index.ts +0 -1
- package/src/components/tabs/tabs-container.stories.tsx +0 -159
- package/src/components/tabs/tabs-list.tsx +0 -134
- package/src/components/tabs/tabs.stories.tsx +0 -68
- package/src/components/tabs/tabs.style.ts +0 -137
- package/src/components/tabs/tabs.tsx +0 -117
- package/src/components/tag/index.ts +0 -1
- package/src/components/tag/tag.stories.tsx +0 -48
- package/src/components/tag/tag.style.ts +0 -29
- package/src/components/tag/tag.tsx +0 -34
- package/src/components/tooltips/click-to-copy/click-to-copy.stories.tsx +0 -39
- package/src/components/tooltips/click-to-copy/click-to-copy.tsx +0 -41
- package/src/components/tooltips/click-to-copy/index.ts +0 -1
- package/src/components/tooltips/index.ts +0 -2
- package/src/components/tooltips/tooltip/index.ts +0 -1
- package/src/components/tooltips/tooltip/tooltip.stories.tsx +0 -38
- package/src/components/tooltips/tooltip/tooltip.style.ts +0 -93
- package/src/components/tooltips/tooltip/tooltip.tsx +0 -59
- package/src/components/typography/index.ts +0 -2
- package/src/components/typography/typography.constants.ts +0 -43
- package/src/components/typography/typography.stories.tsx +0 -108
- package/src/components/typography/typography.style.ts +0 -76
- package/src/components/typography/typography.tsx +0 -100
- package/src/contexts/fetch-context/fetch-context.tsx +0 -114
- package/src/contexts/fetch-context/index.ts +0 -1
- package/src/contexts/form-context/form-context.tsx +0 -43
- package/src/contexts/form-context/index.ts +0 -1
- package/src/contexts/index.ts +0 -3
- package/src/contexts/theme-context/index.ts +0 -3
- package/src/contexts/theme-context/theme-context.tsx +0 -158
- package/src/contexts/theme-context/theme.animations.ts +0 -269
- package/src/contexts/theme-context/theme.defaults.ts +0 -209
- package/src/contexts/theme-context/theme.style.ts +0 -78
- package/src/contexts/theme-context/themes.ts +0 -98
- package/src/core/http-client.d.ts +0 -11
- package/src/core/http-client.d.ts.map +0 -1
- package/src/core/http-client.ts +0 -49
- package/src/core/index.d.ts +0 -2
- package/src/core/index.d.ts.map +0 -1
- package/src/core/index.ts +0 -1
- package/src/core/variants/color.ts +0 -9
- package/src/core/variants/index.ts +0 -3
- package/src/core/variants/radius.ts +0 -27
- package/src/core/variants/size.ts +0 -19
- package/src/helpers/format-bytes.ts +0 -11
- package/src/helpers/format-dates.ts +0 -11
- package/src/helpers/get-modal-position-relative-to-screen.ts +0 -86
- package/src/helpers/get-modal-position.ts +0 -211
- package/src/helpers/index.ts +0 -5
- package/src/helpers/text/index.ts +0 -1
- package/src/helpers/text/to-capitalize.ts +0 -17
- package/src/hooks/index.ts +0 -29
- package/src/hooks/use-async.ts +0 -88
- package/src/hooks/use-classnames.ts +0 -13
- package/src/hooks/use-click-outside.ts +0 -32
- package/src/hooks/use-constant.ts +0 -3
- package/src/hooks/use-cookie.ts +0 -124
- package/src/hooks/use-debounce.ts +0 -15
- package/src/hooks/use-dimensions.ts +0 -19
- package/src/hooks/use-dom-container.ts +0 -35
- package/src/hooks/use-event-listener.ts +0 -71
- package/src/hooks/use-file-reader.ts +0 -69
- package/src/hooks/use-geolocation.ts +0 -63
- package/src/hooks/use-hover.ts +0 -17
- package/src/hooks/use-in-view.ts +0 -18
- package/src/hooks/use-input-handlers.ts +0 -49
- package/src/hooks/use-intersection-observer.ts +0 -19
- package/src/hooks/use-media-query.ts +0 -25
- package/src/hooks/use-modal-in-container.ts +0 -85
- package/src/hooks/use-modal-transition.ts +0 -64
- package/src/hooks/use-modal.ts +0 -21
- package/src/hooks/use-mouse-position.ts +0 -64
- package/src/hooks/use-online-status.ts +0 -12
- package/src/hooks/use-render-count.ts +0 -11
- package/src/hooks/use-resize-observer.ts +0 -18
- package/src/hooks/use-safe-dispatch.ts +0 -22
- package/src/hooks/use-scroll.ts +0 -31
- package/src/hooks/use-state-history.ts +0 -22
- package/src/hooks/use-toggle-values.ts +0 -14
- package/src/hooks/use-toggle.ts +0 -11
- package/src/hooks/use-viewport.ts +0 -38
- package/src/index.ts +0 -5
- package/src/layouts/flex/flex.tsx +0 -75
- package/src/layouts/flex/index.ts +0 -1
- package/src/layouts/grid/grid.tsx +0 -86
- package/src/layouts/grid/index.ts +0 -1
- package/src/layouts/index.ts +0 -3
- package/src/layouts/section-layout/index.ts +0 -1
- package/src/layouts/section-layout/section-layout.stories.tsx +0 -55
- package/src/layouts/section-layout/section-layout.style.ts +0 -21
- package/src/layouts/section-layout/section-layout.tsx +0 -46
- package/src/stories/GettingStarted.mdx +0 -62
- package/src/types/generics.ts +0 -68
- package/src/types/index.ts +0 -1
- package/svg/Name=airplane, Category=object.svg +0 -3
- package/svg/Name=arrow-circle, Category=symbol.svg +0 -3
- package/svg/Name=arrow-down, Category=symbol.svg +0 -3
- package/svg/Name=arrow-left, Category=symbol.svg +0 -3
- package/svg/Name=arrow-right, Category=symbol.svg +0 -3
- package/svg/Name=arrow-up, Category=symbol.svg +0 -3
- package/svg/Name=bell, Category=object.svg +0 -3
- package/svg/Name=bicycle, Category=object.svg +0 -3
- package/svg/Name=book-open, Category=object.svg +0 -3
- package/svg/Name=book-solid, Category=object.svg +0 -6
- package/svg/Name=box-shadow, Category=symbol.svg +0 -5
- package/svg/Name=calendar, Category=object.svg +0 -3
- package/svg/Name=camera, Category=object.svg +0 -3
- package/svg/Name=caret-down, Category=symbol.svg +0 -3
- package/svg/Name=caret-left, Category=symbol.svg +0 -3
- package/svg/Name=caret-right, Category=symbol.svg +0 -3
- package/svg/Name=caret-up, Category=symbol.svg +0 -3
- package/svg/Name=checkmark, Category=symbol.svg +0 -3
- package/svg/Name=clean-computer, Category=object.svg +0 -10
- package/svg/Name=codepen, Category=social.svg +0 -3
- package/svg/Name=creative, Category=symbol.svg +0 -5
- package/svg/Name=cross, Category=symbol.svg +0 -4
- package/svg/Name=crossed-flags, Category=object.svg +0 -4
- package/svg/Name=cv, Category=symbol.svg +0 -5
- package/svg/Name=design-ui, Category=symbol.svg +0 -9
- package/svg/Name=document, Category=object.svg +0 -3
- package/svg/Name=door-closed, Category=object.svg +0 -3
- package/svg/Name=door-open, Category=object.svg +0 -3
- package/svg/Name=double-caret-down, Category=symbol.svg +0 -4
- package/svg/Name=double-caret-left, Category=symbol.svg +0 -4
- package/svg/Name=double-caret-righ, Category=symbol.svg +0 -4
- package/svg/Name=double-caret-up, Category=symbol.svg +0 -4
- package/svg/Name=download, Category=symbol.svg +0 -5
- package/svg/Name=dropper, Category=object.svg +0 -5
- package/svg/Name=envelope, Category=object.svg +0 -3
- package/svg/Name=exclamation-close, Category=symbol.svg +0 -4
- package/svg/Name=exclamation-open, Category=symbol.svg +0 -4
- package/svg/Name=external-link, Category=symbol.svg +0 -3
- package/svg/Name=eye, Category=object.svg +0 -4
- package/svg/Name=eye-hidden, Category=object.svg +0 -7
- package/svg/Name=facebook, Category=social.svg +0 -3
- package/svg/Name=form, Category=symbol.svg +0 -8
- package/svg/Name=game-control, Category=object.svg +0 -3
- package/svg/Name=gear, Category=object.svg +0 -3
- package/svg/Name=github, Category=social.svg +0 -3
- package/svg/Name=house, Category=object.svg +0 -3
- package/svg/Name=hyphen, Category=symbol.svg +0 -3
- package/svg/Name=info, Category=symbol.svg +0 -3
- package/svg/Name=instagram, Category=social.svg +0 -3
- package/svg/Name=link, Category=symbol.svg +0 -5
- package/svg/Name=linkedin, Category=social.svg +0 -3
- package/svg/Name=magnifying-glass, Category=object.svg +0 -3
- package/svg/Name=message, Category=symbol.svg +0 -4
- package/svg/Name=moon, Category=object.svg +0 -5
- package/svg/Name=npm, Category=social.svg +0 -3
- package/svg/Name=order-list, Category=symbol.svg +0 -7
- package/svg/Name=pencil, Category=object.svg +0 -3
- package/svg/Name=pin-location, Category=symbol.svg +0 -3
- package/svg/Name=question-mark-close, Category=symbol.svg +0 -3
- package/svg/Name=question-mark-open, Category=symbol.svg +0 -3
- package/svg/Name=share, Category=symbol.svg +0 -5
- package/svg/Name=spinner, Category=symbol.svg +0 -9
- package/svg/Name=star, Category=object.svg +0 -3
- package/svg/Name=star-empty, Category=object.svg +0 -3
- package/svg/Name=sun, Category=object.svg +0 -11
- package/svg/Name=text-shadow, Category=symbol.svg +0 -4
- package/svg/Name=thinking, Category=symbol.svg +0 -3
- package/svg/Name=trash-can, Category=object.svg +0 -4
- package/svg/Name=upload, Category=symbol.svg +0 -5
- package/svg/Name=user, Category=symbol.svg +0 -4
- package/svg/Name=warning, Category=symbol.svg +0 -5
- package/svg/Name=whatsapp, Category=social.svg +0 -3
- package/svgconfig.json +0 -4
- package/tsconfig.json +0 -15
- package/tsup.config.cjs +0 -21
- package/vite.config.ts +0 -14
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { formatBytes } from '@polpo/helpers';
|
|
4
|
-
|
|
5
|
-
export enum FileTypeEnum {
|
|
6
|
-
PNG = 'image/png',
|
|
7
|
-
PDF = 'application/pdf',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export type FileResolvedT = {
|
|
11
|
-
name: string;
|
|
12
|
-
size: number;
|
|
13
|
-
formatSize: string;
|
|
14
|
-
type: FileTypeEnum;
|
|
15
|
-
url: FileReader['result'];
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const useFileReader = (inputFiles: Array<File>) => {
|
|
19
|
-
const [files, setFiles] = useState<Array<FileResolvedT>>([]);
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
const fileReaders: Array<FileReader> = [];
|
|
23
|
-
let isCancel = false;
|
|
24
|
-
|
|
25
|
-
if (!Array.isArray(inputFiles) || inputFiles.length === 0) {
|
|
26
|
-
setFiles([]);
|
|
27
|
-
} else {
|
|
28
|
-
const promises = inputFiles.map(file => {
|
|
29
|
-
return new Promise<FileResolvedT>((resolve, reject) => {
|
|
30
|
-
const fileReader = new FileReader();
|
|
31
|
-
fileReaders.push(fileReader);
|
|
32
|
-
fileReader.onload = (e: ProgressEvent<FileReader>) => {
|
|
33
|
-
if (e.target?.result) {
|
|
34
|
-
resolve({
|
|
35
|
-
name: file.name,
|
|
36
|
-
size: file.size,
|
|
37
|
-
formatSize: formatBytes(file.size),
|
|
38
|
-
type: file.type as FileTypeEnum,
|
|
39
|
-
url: e.target.result,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
fileReader.onabort = () => {
|
|
44
|
-
reject(new Error('File reading aborted'));
|
|
45
|
-
};
|
|
46
|
-
fileReader.onerror = () => {
|
|
47
|
-
reject(new Error('Failed to read file'));
|
|
48
|
-
};
|
|
49
|
-
fileReader.readAsDataURL(file);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
Promise.all(promises).then(files => {
|
|
54
|
-
if (!isCancel) {
|
|
55
|
-
setFiles(files);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return () => {
|
|
61
|
-
isCancel = true;
|
|
62
|
-
fileReaders.forEach(fileReader => {
|
|
63
|
-
fileReader.abort();
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
}, [inputFiles]);
|
|
67
|
-
|
|
68
|
-
return files;
|
|
69
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
type GeolocationData = GeolocationPosition['coords'] & {
|
|
4
|
-
timestamp: GeolocationPosition['timestamp'];
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
interface GeolocationError {
|
|
8
|
-
code: number;
|
|
9
|
-
message: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type UseGeolocationReturn = {
|
|
13
|
-
data: GeolocationData | null;
|
|
14
|
-
error: GeolocationError | null;
|
|
15
|
-
isLoading: boolean;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const useGeolocation = (): UseGeolocationReturn => {
|
|
19
|
-
const [data, setData] = useState<GeolocationData | null>(null);
|
|
20
|
-
const [error, setError] = useState<GeolocationError | null>(null);
|
|
21
|
-
const [isLoading, setIsLoading] = useState<boolean>(true);
|
|
22
|
-
const watchIdRef = useRef<number | null>(null);
|
|
23
|
-
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
if (!navigator.geolocation) {
|
|
26
|
-
setError({
|
|
27
|
-
code: 0,
|
|
28
|
-
message: 'Geolocation is not supported by your browser.',
|
|
29
|
-
});
|
|
30
|
-
setIsLoading(false);
|
|
31
|
-
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const handleSuccess = (position: GeolocationPosition) => {
|
|
36
|
-
setData({
|
|
37
|
-
...position.coords,
|
|
38
|
-
timestamp: position.timestamp,
|
|
39
|
-
});
|
|
40
|
-
setIsLoading(false);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const handleError = (geolocationError: GeolocationPositionError) => {
|
|
44
|
-
setError({
|
|
45
|
-
code: geolocationError.code,
|
|
46
|
-
message: geolocationError.message,
|
|
47
|
-
});
|
|
48
|
-
setIsLoading(false);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
navigator.geolocation.getCurrentPosition(handleSuccess, handleError);
|
|
52
|
-
|
|
53
|
-
watchIdRef.current = navigator.geolocation.watchPosition(handleSuccess, handleError);
|
|
54
|
-
|
|
55
|
-
return () => {
|
|
56
|
-
if (watchIdRef.current !== null) {
|
|
57
|
-
navigator.geolocation.clearWatch(watchIdRef.current);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}, []);
|
|
61
|
-
|
|
62
|
-
return { data, error, isLoading };
|
|
63
|
-
};
|
package/src/hooks/use-hover.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { useCallback, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
|
|
5
|
-
export const useHover = () => {
|
|
6
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
7
|
-
const ref = useRef<HTMLElement>(null);
|
|
8
|
-
|
|
9
|
-
const handleMouseEnter = useCallback(() => setIsHovered(true), []);
|
|
10
|
-
|
|
11
|
-
const handleMouseLeave = useCallback(() => setIsHovered(false), []);
|
|
12
|
-
|
|
13
|
-
useEventListener('mouseenter', handleMouseEnter, ref);
|
|
14
|
-
useEventListener('mouseleave', handleMouseLeave, ref);
|
|
15
|
-
|
|
16
|
-
return isHovered;
|
|
17
|
-
};
|
package/src/hooks/use-in-view.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useIntersectionObserver } from './use-intersection-observer';
|
|
4
|
-
|
|
5
|
-
export const useInView = (initOptions: IntersectionObserverInit = {}) => {
|
|
6
|
-
const [inView, setInView] = useState(false);
|
|
7
|
-
const ref = useRef<Element>(null);
|
|
8
|
-
|
|
9
|
-
useIntersectionObserver(
|
|
10
|
-
ref,
|
|
11
|
-
([entry]) => {
|
|
12
|
-
setInView(entry.isIntersecting);
|
|
13
|
-
},
|
|
14
|
-
initOptions,
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
return { ref, inView };
|
|
18
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
type InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;
|
|
4
|
-
|
|
5
|
-
type UseInputHandlersProps<T extends InputTypes> = {
|
|
6
|
-
onBlur?: (e: React.FocusEvent<T>) => void;
|
|
7
|
-
onFocus?: (e: React.FocusEvent<T>) => void;
|
|
8
|
-
onChange?: (e: React.ChangeEvent<T>) => void;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const useInputHandlers = <T extends InputTypes>({
|
|
12
|
-
onBlur,
|
|
13
|
-
onFocus,
|
|
14
|
-
onChange,
|
|
15
|
-
}: UseInputHandlersProps<T> = {}) => {
|
|
16
|
-
const [isFocus, setIsFocus] = useState(false);
|
|
17
|
-
|
|
18
|
-
const handleFocus = useCallback(
|
|
19
|
-
(e: React.FocusEvent<T>) => {
|
|
20
|
-
setIsFocus(true);
|
|
21
|
-
onFocus && onFocus(e);
|
|
22
|
-
},
|
|
23
|
-
[onFocus],
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const handleBlur = useCallback(
|
|
27
|
-
(e: React.FocusEvent<T>) => {
|
|
28
|
-
setIsFocus(false);
|
|
29
|
-
onBlur && onBlur(e);
|
|
30
|
-
},
|
|
31
|
-
[onBlur],
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const handleChange = useCallback(
|
|
35
|
-
(e: React.ChangeEvent<T>) => {
|
|
36
|
-
onChange && onChange(e);
|
|
37
|
-
},
|
|
38
|
-
[onChange],
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
isFocus,
|
|
43
|
-
handlers: {
|
|
44
|
-
onFocus: handleFocus,
|
|
45
|
-
onBlur: handleBlur,
|
|
46
|
-
onChange: handleChange,
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { RefObject, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useIntersectionObserver = <T extends Element>(
|
|
4
|
-
ref: RefObject<T> | Array<RefObject<T>>,
|
|
5
|
-
callback: IntersectionObserverCallback,
|
|
6
|
-
initOptions: IntersectionObserverInit = {},
|
|
7
|
-
) => {
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
const refs = Array.isArray(ref) ? ref : [ref];
|
|
10
|
-
|
|
11
|
-
const observer = new IntersectionObserver(callback, initOptions);
|
|
12
|
-
|
|
13
|
-
refs.forEach(r => r.current && observer.observe(r.current));
|
|
14
|
-
|
|
15
|
-
return () => {
|
|
16
|
-
observer.disconnect();
|
|
17
|
-
};
|
|
18
|
-
}, [callback, initOptions, ref]);
|
|
19
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useMediaQuery = (query: string): boolean => {
|
|
4
|
-
const [matches, setMatches] = useState(false);
|
|
5
|
-
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
const media = window.matchMedia(query);
|
|
8
|
-
|
|
9
|
-
if (media.matches !== matches) {
|
|
10
|
-
setMatches(media.matches);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const listener = () => {
|
|
14
|
-
setMatches(media.matches);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
media.addEventListener('change', listener);
|
|
18
|
-
|
|
19
|
-
return () => {
|
|
20
|
-
media.removeEventListener('change', listener);
|
|
21
|
-
};
|
|
22
|
-
}, [matches, query]);
|
|
23
|
-
|
|
24
|
-
return matches;
|
|
25
|
-
};
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { RefObject, useCallback, useLayoutEffect, useRef } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
import { useResizeObserver } from './use-resize-observer';
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
getModalPositionRelativeToContainer,
|
|
8
|
-
getModalPositionRelativeToScreen,
|
|
9
|
-
PositionContainer,
|
|
10
|
-
PositionObject,
|
|
11
|
-
} from '@polpo/helpers';
|
|
12
|
-
|
|
13
|
-
const convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({
|
|
14
|
-
x: rect.x,
|
|
15
|
-
y: rect.y,
|
|
16
|
-
w: rect.width,
|
|
17
|
-
h: rect.height,
|
|
18
|
-
top: rect.top,
|
|
19
|
-
left: rect.left,
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
export type UseModalInContainerParams<
|
|
23
|
-
Container extends HTMLElement = HTMLElement,
|
|
24
|
-
Modal extends HTMLElement = Container,
|
|
25
|
-
> = {
|
|
26
|
-
windowOffset?: number;
|
|
27
|
-
offset?: number;
|
|
28
|
-
position?: `${PositionContainer}`;
|
|
29
|
-
modalRef: RefObject<Modal>;
|
|
30
|
-
containerRef?: RefObject<Container>;
|
|
31
|
-
isOpen: boolean;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const useModalInContainer = <
|
|
35
|
-
Container extends HTMLElement = HTMLElement,
|
|
36
|
-
Modal extends HTMLElement = Container,
|
|
37
|
-
>({
|
|
38
|
-
offset = 0,
|
|
39
|
-
windowOffset = 0,
|
|
40
|
-
position = PositionContainer.BOTTOM,
|
|
41
|
-
modalRef,
|
|
42
|
-
containerRef,
|
|
43
|
-
isOpen,
|
|
44
|
-
}: UseModalInContainerParams<Container, Modal>) => {
|
|
45
|
-
const containerTemporalRef = useRef<Container>(null);
|
|
46
|
-
|
|
47
|
-
const getPosition = useCallback(
|
|
48
|
-
(modalRef: RefObject<Modal>, containerRef: RefObject<Container>) => {
|
|
49
|
-
const modal = modalRef.current?.getClientRects()[0];
|
|
50
|
-
const container = containerRef.current?.getClientRects()[0];
|
|
51
|
-
|
|
52
|
-
if (!modal) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const modalStyle: Record<string, string> = !container
|
|
57
|
-
? getModalPositionRelativeToScreen({ position: position as PositionContainer, windowOffset })
|
|
58
|
-
: getModalPositionRelativeToContainer({
|
|
59
|
-
c: convertDOMRectToPosition(container),
|
|
60
|
-
m: convertDOMRectToPosition(modal),
|
|
61
|
-
offset,
|
|
62
|
-
windowOffset,
|
|
63
|
-
position: position as PositionContainer,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
Object.keys(modalStyle).forEach(key => {
|
|
67
|
-
modalRef.current?.style.setProperty(key, modalStyle[key]);
|
|
68
|
-
});
|
|
69
|
-
},
|
|
70
|
-
[position, windowOffset, offset],
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const callback = useCallback(() => {
|
|
74
|
-
if (isOpen) {
|
|
75
|
-
getPosition(modalRef, containerRef ?? containerTemporalRef);
|
|
76
|
-
}
|
|
77
|
-
}, [getPosition, isOpen, containerRef, modalRef]);
|
|
78
|
-
|
|
79
|
-
useLayoutEffect(callback, [callback]);
|
|
80
|
-
|
|
81
|
-
useResizeObserver<Container>(containerRef ?? containerTemporalRef, callback);
|
|
82
|
-
useResizeObserver<Modal>(modalRef, callback);
|
|
83
|
-
useEventListener('resize', callback);
|
|
84
|
-
useEventListener('scroll', callback, modalRef);
|
|
85
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useLayoutEffect, useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
export enum ModalState {
|
|
4
|
-
OPENING = 'OPENING',
|
|
5
|
-
OPEN = 'OPEN',
|
|
6
|
-
CLOSING = 'CLOSING',
|
|
7
|
-
CLOSED = 'CLOSED',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export type UseModalTransitionParams = {
|
|
11
|
-
transitionDuration?: number;
|
|
12
|
-
isOpen: boolean;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const useModalTransition = ({ transitionDuration = 0, isOpen }: UseModalTransitionParams) => {
|
|
16
|
-
const [modalState, setModalState] = React.useState<ModalState>(ModalState.CLOSED);
|
|
17
|
-
|
|
18
|
-
const isVisible = useMemo(() => {
|
|
19
|
-
return modalState !== ModalState.CLOSED;
|
|
20
|
-
}, [modalState]);
|
|
21
|
-
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';
|
|
24
|
-
}, [isVisible]);
|
|
25
|
-
|
|
26
|
-
const closeModal = useCallback(() => {
|
|
27
|
-
if ([ModalState.OPENING, ModalState.OPEN].includes(modalState)) {
|
|
28
|
-
if (transitionDuration > 0) {
|
|
29
|
-
setModalState(ModalState.CLOSING);
|
|
30
|
-
setTimeout(() => {
|
|
31
|
-
setModalState(ModalState.CLOSED);
|
|
32
|
-
}, transitionDuration);
|
|
33
|
-
} else {
|
|
34
|
-
setModalState(ModalState.CLOSED);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}, [modalState, transitionDuration]);
|
|
38
|
-
|
|
39
|
-
const openModal = useCallback(() => {
|
|
40
|
-
if ([ModalState.CLOSING, ModalState.CLOSED].includes(modalState)) {
|
|
41
|
-
if (transitionDuration > 0) {
|
|
42
|
-
setModalState(ModalState.OPENING);
|
|
43
|
-
setTimeout(() => {
|
|
44
|
-
setModalState(ModalState.OPEN);
|
|
45
|
-
}, transitionDuration);
|
|
46
|
-
} else {
|
|
47
|
-
setModalState(ModalState.OPEN);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}, [modalState, transitionDuration]);
|
|
51
|
-
|
|
52
|
-
useLayoutEffect(() => {
|
|
53
|
-
if (modalState === ModalState.CLOSED && isOpen) {
|
|
54
|
-
openModal();
|
|
55
|
-
} else if (modalState === ModalState.OPEN && !isOpen) {
|
|
56
|
-
closeModal();
|
|
57
|
-
}
|
|
58
|
-
}, [isOpen, openModal, closeModal, modalState]);
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
isVisible,
|
|
62
|
-
modalState,
|
|
63
|
-
};
|
|
64
|
-
};
|
package/src/hooks/use-modal.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useModal = <T extends HTMLElement>() => {
|
|
4
|
-
const containerRef = useRef<T>(null);
|
|
5
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
6
|
-
|
|
7
|
-
const openModal = () => {
|
|
8
|
-
setIsOpen(true);
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const closeModal = () => {
|
|
12
|
-
setIsOpen(false);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
return {
|
|
16
|
-
containerRef,
|
|
17
|
-
isOpen,
|
|
18
|
-
openModal,
|
|
19
|
-
closeModal,
|
|
20
|
-
};
|
|
21
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import React, { useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
|
|
5
|
-
type MousePosition = {
|
|
6
|
-
x: null | number;
|
|
7
|
-
y: null | number;
|
|
8
|
-
elementX: number | null;
|
|
9
|
-
elementY: number | null;
|
|
10
|
-
elementPositionX: number | null;
|
|
11
|
-
elementPositionY: number | null;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const getMousePosition = (domRect: DOMRect, e: MouseEvent) => {
|
|
15
|
-
const { left, top } = domRect;
|
|
16
|
-
const containerPositionX = left + window.scrollX;
|
|
17
|
-
const containerPositionY = top + window.scrollY;
|
|
18
|
-
const containerX = e.pageX - containerPositionX;
|
|
19
|
-
const containerY = e.pageY - containerPositionY;
|
|
20
|
-
|
|
21
|
-
return {
|
|
22
|
-
x: e.pageX,
|
|
23
|
-
y: e.pageY,
|
|
24
|
-
elementX: containerX,
|
|
25
|
-
elementY: containerY,
|
|
26
|
-
elementPositionX: containerPositionX,
|
|
27
|
-
elementPositionY: containerPositionY,
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const useMousePosition = (containerRef?: React.RefObject<HTMLElement | SVGElement | null>) => {
|
|
32
|
-
const ref = useRef<HTMLElement>(null);
|
|
33
|
-
const [position, setPosition] = useState<MousePosition>({
|
|
34
|
-
x: null,
|
|
35
|
-
y: null,
|
|
36
|
-
elementX: null,
|
|
37
|
-
elementY: null,
|
|
38
|
-
elementPositionX: null,
|
|
39
|
-
elementPositionY: null,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const mouseMove = (e: MouseEvent) => {
|
|
43
|
-
const { clientX, clientY } = e;
|
|
44
|
-
setPosition(prev => ({ ...prev, x: clientX, y: clientY }));
|
|
45
|
-
|
|
46
|
-
if (containerRef?.current instanceof Element) {
|
|
47
|
-
const newState = getMousePosition(containerRef.current.getBoundingClientRect(), e);
|
|
48
|
-
setPosition(prev => ({
|
|
49
|
-
...prev,
|
|
50
|
-
...newState,
|
|
51
|
-
}));
|
|
52
|
-
} else if (ref.current instanceof Element) {
|
|
53
|
-
const newState = getMousePosition(ref.current.getBoundingClientRect(), e);
|
|
54
|
-
setPosition(prev => ({
|
|
55
|
-
...prev,
|
|
56
|
-
...newState,
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
useEventListener('mousemove', mouseMove);
|
|
62
|
-
|
|
63
|
-
return { ...position, ref };
|
|
64
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
|
|
5
|
-
export const useOnlineStatus = () => {
|
|
6
|
-
const [online, setOnline] = useState(navigator.onLine);
|
|
7
|
-
|
|
8
|
-
useEventListener('online', () => setOnline(navigator.onLine));
|
|
9
|
-
useEventListener('offline', () => setOnline(navigator.onLine));
|
|
10
|
-
|
|
11
|
-
return online;
|
|
12
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { RefObject, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useResizeObserver = <T extends Element>(
|
|
4
|
-
ref: RefObject<T> | Array<RefObject<T>>,
|
|
5
|
-
callback: ResizeObserverCallback,
|
|
6
|
-
) => {
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
const refs = Array.isArray(ref) ? ref : [ref];
|
|
9
|
-
|
|
10
|
-
const observer = new ResizeObserver(callback);
|
|
11
|
-
|
|
12
|
-
refs.forEach(r => r.current && observer.observe(r.current));
|
|
13
|
-
|
|
14
|
-
return () => {
|
|
15
|
-
observer.disconnect();
|
|
16
|
-
};
|
|
17
|
-
}, [ref, callback]);
|
|
18
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useLayoutEffect, useRef } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {
|
|
4
|
-
const mounted = useRef(false);
|
|
5
|
-
|
|
6
|
-
useLayoutEffect(() => {
|
|
7
|
-
mounted.current = true;
|
|
8
|
-
|
|
9
|
-
return () => {
|
|
10
|
-
mounted.current = false;
|
|
11
|
-
};
|
|
12
|
-
}, []);
|
|
13
|
-
|
|
14
|
-
return useCallback(
|
|
15
|
-
(...args: Parameters<React.Dispatch<T>>) => {
|
|
16
|
-
if (mounted.current) {
|
|
17
|
-
dispatch(...args);
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
[dispatch],
|
|
21
|
-
);
|
|
22
|
-
};
|
package/src/hooks/use-scroll.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useScroll = () => {
|
|
4
|
-
const ref = useRef<HTMLElement>(null);
|
|
5
|
-
const [position, setPosition] = useState([0, 0]);
|
|
6
|
-
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
const element = ref.current;
|
|
9
|
-
|
|
10
|
-
const handleScroll = () => {
|
|
11
|
-
if (!element) return;
|
|
12
|
-
|
|
13
|
-
setPosition([element.scrollLeft, element.scrollTop]);
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
if (element) {
|
|
17
|
-
element.addEventListener('scroll', handleScroll);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return () => {
|
|
21
|
-
if (element) {
|
|
22
|
-
element.removeEventListener('scroll', handleScroll);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
}, []);
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
ref,
|
|
29
|
-
position,
|
|
30
|
-
};
|
|
31
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Dispatch, SetStateAction, useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
function useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];
|
|
4
|
-
|
|
5
|
-
function useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];
|
|
6
|
-
|
|
7
|
-
function useStateHistory<T = undefined>(
|
|
8
|
-
initialState?: T | (() => T) | undefined,
|
|
9
|
-
): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {
|
|
10
|
-
const [state, setState] = useState<T | undefined>(initialState);
|
|
11
|
-
const [history, setHistory] = useState<Array<T>>([]);
|
|
12
|
-
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (state !== undefined) {
|
|
15
|
-
setHistory(prevHistory => [...prevHistory, state]);
|
|
16
|
-
}
|
|
17
|
-
}, [state]);
|
|
18
|
-
|
|
19
|
-
return [state, setState, history];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export { useStateHistory };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { useCallback, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {
|
|
4
|
-
const [index, setIndex] = useState(defaultIndex);
|
|
5
|
-
|
|
6
|
-
const toggle = useCallback(
|
|
7
|
-
(index?: number) => {
|
|
8
|
-
setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);
|
|
9
|
-
},
|
|
10
|
-
[values.length],
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
return [values[index], toggle];
|
|
14
|
-
};
|
package/src/hooks/use-toggle.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { useCallback, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useToggle = (defaultValue: boolean = false) => {
|
|
4
|
-
const [value, setValue] = useState<boolean>(defaultValue);
|
|
5
|
-
|
|
6
|
-
const toggle = useCallback(() => {
|
|
7
|
-
setValue(prev => !prev);
|
|
8
|
-
}, []);
|
|
9
|
-
|
|
10
|
-
return [value, toggle, setValue];
|
|
11
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import { useEventListener } from './use-event-listener';
|
|
4
|
-
|
|
5
|
-
enum ScreenOrientation {
|
|
6
|
-
PORTRAIT = 'portrait',
|
|
7
|
-
LANDSCAPE = 'landscape',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
type UseViewportData = {
|
|
11
|
-
width: number;
|
|
12
|
-
height: number;
|
|
13
|
-
orientation: ScreenOrientation;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export const useViewport = (): UseViewportData => {
|
|
17
|
-
const getData = (): UseViewportData => {
|
|
18
|
-
const { innerWidth, innerHeight } = window;
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
width: innerWidth,
|
|
22
|
-
height: innerHeight,
|
|
23
|
-
orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const [data, setData] = useState<UseViewportData>(getData);
|
|
28
|
-
|
|
29
|
-
useEventListener('resize', () => {
|
|
30
|
-
setData(getData());
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
setData(getData());
|
|
35
|
-
}, []);
|
|
36
|
-
|
|
37
|
-
return data;
|
|
38
|
-
};
|