@taiv/ui 1.15.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/assets.d.ts +12 -1
- package/dist/assets/assets.d.ts.map +1 -1
- package/dist/assets/assets.js +22 -16
- package/dist/assets/brand/taiv-favicon-dark.png +0 -0
- package/dist/assets/brand/taiv-favicon-light.png +0 -0
- package/dist/assets/brand/taiv-icon-black.svg +10 -0
- package/dist/assets/brand/taiv-icon-dark.svg +17 -0
- package/dist/assets/brand/taiv-icon-white.svg +17 -0
- package/dist/assets/brand/taiv-logo-black.svg +16 -0
- package/dist/assets/brand/taiv-logo-dark.svg +23 -0
- package/dist/assets/brand/taiv-logo-old.svg +1 -0
- package/dist/assets/brand/taiv-logo-purple.svg +16 -0
- package/dist/assets/brand/taiv-logo-white.svg +23 -0
- package/dist/assets/icons.d.ts +1 -1
- package/dist/assets/icons.d.ts.map +1 -1
- package/dist/assets/icons.js +57 -53
- package/dist/assets/index.d.ts +3 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +2 -0
- package/dist/components/Data/BigCalendar/BigCalendar.d.ts +26 -0
- package/dist/components/Data/BigCalendar/BigCalendar.d.ts.map +1 -0
- package/dist/components/Data/BigCalendar/BigCalendar.js +92 -0
- package/dist/components/Data/BigCalendar/BigCalendar.stories.d.ts +8 -0
- package/dist/components/Data/BigCalendar/BigCalendar.stories.d.ts.map +1 -0
- package/dist/components/Data/BigCalendar/BigCalendar.stories.js +77 -0
- package/dist/components/Data/Calendar/Calendar.d.ts +102 -0
- package/dist/components/Data/Calendar/Calendar.d.ts.map +1 -0
- package/dist/components/Data/Calendar/Calendar.js +671 -0
- package/dist/components/Data/Calendar/Calendar.stories.d.ts +10 -0
- package/dist/components/Data/Calendar/Calendar.stories.d.ts.map +1 -0
- package/dist/components/Data/Calendar/Calendar.stories.js +87 -0
- package/dist/components/Data/Cards/StatsCard/StatsCard.d.ts +1 -1
- package/dist/components/Data/Cards/StatsCard/StatsCard.d.ts.map +1 -1
- package/dist/components/Data/CheckboxTable/CheckboxTable.d.ts +1 -1
- package/dist/components/Data/CheckboxTable/CheckboxTable.d.ts.map +1 -1
- package/dist/components/Data/MediaPill/MediaPill.d.ts +27 -0
- package/dist/components/Data/MediaPill/MediaPill.d.ts.map +1 -0
- package/dist/components/Data/MediaPill/MediaPill.js +53 -0
- package/dist/components/Data/MediaPill/MediaPill.stories.d.ts +10 -0
- package/dist/components/Data/MediaPill/MediaPill.stories.d.ts.map +1 -0
- package/dist/components/Data/MediaPill/MediaPill.stories.js +51 -0
- package/dist/components/Data/Progress/Progress.d.ts +1 -1
- package/dist/components/Data/Progress/Progress.d.ts.map +1 -1
- package/dist/components/Data/RemovableItemList/RemovableItemList.d.ts +1 -1
- package/dist/components/Data/RemovableItemList/RemovableItemList.d.ts.map +1 -1
- package/dist/components/Data/StatsBadge/StatsBadge.d.ts +2 -1
- package/dist/components/Data/StatsBadge/StatsBadge.d.ts.map +1 -1
- package/dist/components/Info/Avatar/Avatar.d.ts +9 -0
- package/dist/components/Info/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Info/Avatar/Avatar.js +36 -0
- package/dist/components/Info/Avatar/Avatar.stories.d.ts +9 -0
- package/dist/components/Info/Avatar/Avatar.stories.d.ts.map +1 -0
- package/dist/components/Info/Avatar/Avatar.stories.js +78 -0
- package/dist/components/Info/Badge/Badge.d.ts +1 -1
- package/dist/components/Info/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Info/Badge/Badge.stories.d.ts.map +1 -1
- package/dist/components/Info/Badge/Badge.stories.js +21 -6
- package/dist/components/Info/Badge/sizes.d.ts +10 -10
- package/dist/components/Info/Badge/sizes.js +16 -16
- package/dist/components/Info/Badge/variants.d.ts +4 -4
- package/dist/components/Info/Badge/variants.d.ts.map +1 -1
- package/dist/components/Info/Badge/variants.js +26 -13
- package/dist/components/Info/Drawer/Drawer.d.ts +24 -0
- package/dist/components/Info/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Info/Drawer/Drawer.js +44 -0
- package/dist/components/Info/Drawer/Drawer.stories.d.ts +10 -0
- package/dist/components/Info/Drawer/Drawer.stories.d.ts.map +1 -0
- package/dist/components/Info/Drawer/Drawer.stories.js +47 -0
- package/dist/components/Info/HoverCard/HoverCard.d.ts +16 -0
- package/dist/components/Info/HoverCard/HoverCard.d.ts.map +1 -0
- package/dist/components/Info/HoverCard/HoverCard.js +26 -0
- package/dist/components/Info/HoverCard/HoverCard.stories.d.ts +11 -0
- package/dist/components/Info/HoverCard/HoverCard.stories.d.ts.map +1 -0
- package/dist/components/Info/HoverCard/HoverCard.stories.js +86 -0
- package/dist/components/Info/HoverCard/HoverCardMenuItem.d.ts +12 -0
- package/dist/components/Info/HoverCard/HoverCardMenuItem.d.ts.map +1 -0
- package/dist/components/Info/HoverCard/HoverCardMenuItem.js +22 -0
- package/dist/components/Info/Indicator/Indicator.d.ts +3 -0
- package/dist/components/Info/Indicator/Indicator.d.ts.map +1 -0
- package/dist/components/Info/Indicator/Indicator.js +1 -0
- package/dist/components/Info/Indicator/Indicator.stories.d.ts +11 -0
- package/dist/components/Info/Indicator/Indicator.stories.d.ts.map +1 -0
- package/dist/components/Info/Indicator/Indicator.stories.js +123 -0
- package/dist/components/Info/InfoCard/InfoCard.d.ts +3 -3
- package/dist/components/Info/InfoCard/InfoCard.d.ts.map +1 -1
- package/dist/components/Info/InfoCard/InfoCard.js +5 -5
- package/dist/components/Info/MobileDrawer/MobileDrawer.d.ts +30 -0
- package/dist/components/Info/MobileDrawer/MobileDrawer.d.ts.map +1 -0
- package/dist/components/Info/MobileDrawer/MobileDrawer.js +52 -0
- package/dist/components/Info/MobileDrawer/MobileDrawer.stories.d.ts +9 -0
- package/dist/components/Info/MobileDrawer/MobileDrawer.stories.d.ts.map +1 -0
- package/dist/components/Info/MobileDrawer/MobileDrawer.stories.js +38 -0
- package/dist/components/Info/Modals/FormModal/FormModal.d.ts +17 -1
- package/dist/components/Info/Modals/FormModal/FormModal.d.ts.map +1 -1
- package/dist/components/Info/Modals/FormModal/FormModal.js +30 -12
- package/dist/components/Info/Modals/FormModalV2/FormModalV2.d.ts +60 -0
- package/dist/components/Info/Modals/FormModalV2/FormModalV2.d.ts.map +1 -0
- package/dist/components/Info/Modals/FormModalV2/FormModalV2.js +96 -0
- package/dist/components/Info/Modals/Modal/Modal.d.ts +1 -1
- package/dist/components/Info/Modals/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Info/Modals/Modal/Modal.js +9 -1
- package/dist/components/Info/Modals/ModalProvider/ModalProvider.d.ts +1 -1
- package/dist/components/Info/Modals/ModalProvider/ModalProvider.d.ts.map +1 -1
- package/dist/components/Info/Modals/StepperModal/StepperModal.d.ts +1 -1
- package/dist/components/Info/Modals/StepperModal/StepperModal.d.ts.map +1 -1
- package/dist/components/Info/Modals/variants.d.ts +61 -41
- package/dist/components/Info/Modals/variants.d.ts.map +1 -1
- package/dist/components/Info/Modals/variants.js +58 -38
- package/dist/components/Info/Notifications/NotificationProvider/NotificationProvider.d.ts +2 -1
- package/dist/components/Info/Notifications/NotificationProvider/NotificationProvider.d.ts.map +1 -1
- package/dist/components/Info/Notifications/Notifications.stories.d.ts +1 -0
- package/dist/components/Info/Notifications/Notifications.stories.d.ts.map +1 -1
- package/dist/components/Info/Notifications/Notifications.stories.js +31 -0
- package/dist/components/Info/Notifications/variants.d.ts +30 -23
- package/dist/components/Info/Notifications/variants.d.ts.map +1 -1
- package/dist/components/Info/Notifications/variants.js +30 -24
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.d.ts +37 -0
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.d.ts.map +1 -0
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.js +17 -0
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.d.ts +7 -0
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.d.ts.map +1 -0
- package/dist/components/Info/ResponsiveDrawer/ResponsiveDrawer.stories.js +26 -0
- package/dist/components/Info/Tooltips/FormulaTooltip/FormulaTooltip.d.ts +2 -1
- package/dist/components/Info/Tooltips/FormulaTooltip/FormulaTooltip.d.ts.map +1 -1
- package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.d.ts +2 -2
- package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.d.ts.map +1 -1
- package/dist/components/Info/Tooltips/InfoTooltip/InfoTooltip.js +9 -3
- package/dist/components/Info/Tooltips/Popover/Popover.d.ts +16 -0
- package/dist/components/Info/Tooltips/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Info/Tooltips/Popover/Popover.js +32 -0
- package/dist/components/Info/Tooltips/Tooltip/Tooltip.d.ts +5 -1
- package/dist/components/Info/Tooltips/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Info/Tooltips/Tooltip/Tooltip.js +10 -8
- package/dist/components/Inputs/Buttons/Button/Button.d.ts +3 -1
- package/dist/components/Inputs/Buttons/Button/Button.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/Button/Button.js +38 -5
- package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts +1 -0
- package/dist/components/Inputs/Buttons/Button/Button.stories.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/Button/Button.stories.js +105 -79
- package/dist/components/Inputs/Buttons/IconButton/IconButton.d.ts +7 -2
- package/dist/components/Inputs/Buttons/IconButton/IconButton.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/IconButton/IconButton.js +35 -11
- package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.d.ts +1 -0
- package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/IconButton/IconButton.stories.js +100 -74
- package/dist/components/Inputs/Buttons/IconButton/sizes.d.ts +15 -0
- package/dist/components/Inputs/Buttons/IconButton/sizes.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/IconButton/sizes.js +3 -0
- package/dist/components/Inputs/Buttons/SSOButton/SSOButton.d.ts +2 -2
- package/dist/components/Inputs/Buttons/SSOButton/SSOButton.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/UnstyledButton/UnstyledButton.d.ts +1 -1
- package/dist/components/Inputs/Buttons/UnstyledButton/UnstyledButton.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/shared/variants.d.ts +399 -164
- package/dist/components/Inputs/Buttons/shared/variants.d.ts.map +1 -1
- package/dist/components/Inputs/Buttons/shared/variants.js +353 -143
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.d.ts +41 -0
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.d.ts.map +1 -0
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.js +139 -0
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.d.ts +13 -0
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.d.ts.map +1 -0
- package/dist/components/Inputs/ColorPickerTrigger/ColorPickerTrigger.stories.js +75 -0
- package/dist/components/Inputs/ColorSwatch/ColorSwatch.d.ts +27 -0
- package/dist/components/Inputs/ColorSwatch/ColorSwatch.d.ts.map +1 -0
- package/dist/components/Inputs/ColorSwatch/ColorSwatch.js +46 -0
- package/dist/components/Inputs/Controls/Checkbox/Checkbox.d.ts +2 -1
- package/dist/components/Inputs/Controls/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.d.ts +32 -0
- package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.d.ts.map +1 -0
- package/dist/components/Inputs/Controls/DaysOfWeek/DaysOfWeek.js +92 -0
- package/dist/components/Inputs/Controls/Radio/Radio.d.ts +2 -1
- package/dist/components/Inputs/Controls/Radio/Radio.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/RadioList/RadioList.d.ts +1 -1
- package/dist/components/Inputs/Controls/RadioList/RadioList.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.d.ts +13 -9
- package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/SegmentedControl/SegmentedControl.js +20 -12
- package/dist/components/Inputs/Controls/Toggle/Toggle.d.ts +25 -11
- package/dist/components/Inputs/Controls/Toggle/Toggle.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/Toggle/Toggle.js +67 -20
- package/dist/components/Inputs/Controls/Toggle/Toggle.stories.d.ts +1 -0
- package/dist/components/Inputs/Controls/Toggle/Toggle.stories.d.ts.map +1 -1
- package/dist/components/Inputs/Controls/Toggle/Toggle.stories.js +86 -69
- package/dist/components/Inputs/Dates/DatePicker/DatePicker.d.ts +2 -1
- package/dist/components/Inputs/Dates/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/Inputs/Dates/DatePicker/DatePicker.js +23 -7
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.d.ts +13 -0
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.d.ts.map +1 -0
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.js +87 -0
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.d.ts +13 -0
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.d.ts.map +1 -0
- package/dist/components/Inputs/Dates/DateTimePicker/DateTimePicker.stories.js +239 -0
- package/dist/components/Inputs/Dates/TimeInput/TimeInput.d.ts +20 -0
- package/dist/components/Inputs/Dates/TimeInput/TimeInput.d.ts.map +1 -0
- package/dist/components/Inputs/Dates/TimeInput/TimeInput.js +51 -0
- package/dist/components/Inputs/Dropdowns/CascadingSelect/CascadingSelect.d.ts +1 -1
- package/dist/components/Inputs/Dropdowns/CascadingSelect/CascadingSelect.d.ts.map +1 -1
- package/dist/components/Inputs/Dropdowns/FontSelect/FontSelect.d.ts +2 -1
- package/dist/components/Inputs/Dropdowns/FontSelect/FontSelect.d.ts.map +1 -1
- package/dist/components/Inputs/Dropdowns/FontSelect/FontSelect.js +8 -1
- package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.d.ts +4 -3
- package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/components/Inputs/Dropdowns/MultiSelect/MultiSelect.js +76 -57
- package/dist/components/Inputs/Dropdowns/Select/Select.d.ts +2 -1
- package/dist/components/Inputs/Dropdowns/Select/Select.d.ts.map +1 -1
- package/dist/components/Inputs/Dropdowns/Select/Select.js +5 -3
- package/dist/components/Inputs/Dropzone/Dropzone.d.ts +24 -0
- package/dist/components/Inputs/Dropzone/Dropzone.d.ts.map +1 -0
- package/dist/components/Inputs/Dropzone/Dropzone.js +44 -0
- package/dist/components/Inputs/Dropzone/Dropzone.stories.d.ts +12 -0
- package/dist/components/Inputs/Dropzone/Dropzone.stories.d.ts.map +1 -0
- package/dist/components/Inputs/Dropzone/Dropzone.stories.js +114 -0
- package/dist/components/Inputs/Sliders/Slider/Slider.d.ts +1 -1
- package/dist/components/Inputs/Sliders/Slider/Slider.d.ts.map +1 -1
- package/dist/components/Inputs/Sliders/VolumeSlider/VolumeSlider.d.ts +2 -1
- package/dist/components/Inputs/Sliders/VolumeSlider/VolumeSlider.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/AutoComplete/AutoComplete.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/AutoComplete/AutoComplete.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/NumberInput/NumberInput.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/NumberInput/NumberInput.js +4 -1
- package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.d.ts +46 -0
- package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.d.ts.map +1 -0
- package/dist/components/Inputs/TextInputs/NumberInput/ResponsiveNumberInput.js +60 -0
- package/dist/components/Inputs/TextInputs/PasswordInput/PasswordInput.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/PasswordInput/PasswordInput.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/SearchBar/SearchBar.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/SearchBar/SearchBar.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/TextArea/TextArea.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/TextArea/TextArea.d.ts.map +1 -1
- package/dist/components/Inputs/TextInputs/TextInput/TextInput.d.ts +2 -1
- package/dist/components/Inputs/TextInputs/TextInput/TextInput.d.ts.map +1 -1
- package/dist/components/Layout/Accordion/Accordion.d.ts +16 -0
- package/dist/components/Layout/Accordion/Accordion.d.ts.map +1 -0
- package/dist/components/Layout/Accordion/Accordion.js +63 -0
- package/dist/components/Layout/Accordion/Accordion.stories.d.ts +11 -0
- package/dist/components/Layout/Accordion/Accordion.stories.d.ts.map +1 -0
- package/dist/components/Layout/Accordion/Accordion.stories.js +148 -0
- package/dist/components/Layout/AutoGrid/AutoGrid.d.ts +20 -5
- package/dist/components/Layout/AutoGrid/AutoGrid.d.ts.map +1 -1
- package/dist/components/Layout/AutoGrid/AutoGrid.js +51 -3
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts +1 -0
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.d.ts.map +1 -1
- package/dist/components/Layout/AutoGrid/AutoGrid.stories.js +39 -29
- package/dist/components/Layout/BottomActionBar/BottomActionBar.d.ts +40 -0
- package/dist/components/Layout/BottomActionBar/BottomActionBar.d.ts.map +1 -0
- package/dist/components/Layout/BottomActionBar/BottomActionBar.js +79 -0
- package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.d.ts +10 -0
- package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.d.ts.map +1 -0
- package/dist/components/Layout/BottomActionBar/BottomActionBar.stories.js +102 -0
- package/dist/components/Layout/Box/Box.d.ts +2 -1
- package/dist/components/Layout/Box/Box.d.ts.map +1 -1
- package/dist/components/Layout/Card/Card.d.ts +2 -2
- package/dist/components/Layout/Card/Card.d.ts.map +1 -1
- package/dist/components/Layout/Center/Center.d.ts +2 -1
- package/dist/components/Layout/Center/Center.d.ts.map +1 -1
- package/dist/components/Layout/Container/Container.d.ts +3 -0
- package/dist/components/Layout/Container/Container.d.ts.map +1 -0
- package/dist/components/Layout/Container/Container.js +1 -0
- package/dist/components/Layout/Container/Container.stories.d.ts +8 -0
- package/dist/components/Layout/Container/Container.stories.d.ts.map +1 -0
- package/dist/components/Layout/Container/Container.stories.js +52 -0
- package/dist/components/Layout/DataState/DataState.d.ts +34 -0
- package/dist/components/Layout/DataState/DataState.d.ts.map +1 -0
- package/dist/components/Layout/DataState/DataState.js +22 -0
- package/dist/components/Layout/DataState/DataState.stories.d.ts +11 -0
- package/dist/components/Layout/DataState/DataState.stories.d.ts.map +1 -0
- package/dist/components/Layout/DataState/DataState.stories.js +38 -0
- package/dist/components/Layout/Divider/Divider.d.ts +2 -1
- package/dist/components/Layout/Divider/Divider.d.ts.map +1 -1
- package/dist/components/Layout/Divider/Divider.js +4 -2
- package/dist/components/Layout/Frame/Frame.d.ts +2 -1
- package/dist/components/Layout/Frame/Frame.d.ts.map +1 -1
- package/dist/components/Layout/Grid/Grid.d.ts +1 -1
- package/dist/components/Layout/Group/Group.d.ts +3 -2
- package/dist/components/Layout/Group/Group.d.ts.map +1 -1
- package/dist/components/Layout/Loader/Loader.d.ts +2 -1
- package/dist/components/Layout/Loader/Loader.d.ts.map +1 -1
- package/dist/components/Layout/Loader/Loader.js +3 -2
- package/dist/components/Layout/Navbar/Navbar.d.ts +15 -0
- package/dist/components/Layout/Navbar/Navbar.d.ts.map +1 -0
- package/dist/components/Layout/Navbar/Navbar.js +20 -0
- package/dist/components/Layout/Navbar/Navbar.stories.d.ts +9 -0
- package/dist/components/Layout/Navbar/Navbar.stories.d.ts.map +1 -0
- package/dist/components/Layout/Navbar/Navbar.stories.js +98 -0
- package/dist/components/Layout/Page/Page.d.ts +13 -0
- package/dist/components/Layout/Page/Page.d.ts.map +1 -0
- package/dist/components/Layout/Page/Page.js +13 -0
- package/dist/components/Layout/Pagination/Pagination.d.ts +24 -0
- package/dist/components/Layout/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Layout/Pagination/Pagination.js +53 -0
- package/dist/components/Layout/Pagination/Pagination.stories.d.ts +10 -0
- package/dist/components/Layout/Pagination/Pagination.stories.d.ts.map +1 -0
- package/dist/components/Layout/Pagination/Pagination.stories.js +76 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.d.ts +3 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.js +1 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.stories.d.ts +8 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.stories.d.ts.map +1 -0
- package/dist/components/Layout/ScrollArea/ScrollArea.stories.js +62 -0
- package/dist/components/Layout/SectionCard/SectionCard.d.ts +1 -1
- package/dist/components/Layout/SectionCard/SectionCard.d.ts.map +1 -1
- package/dist/components/Layout/Stack/Stack.d.ts +2 -1
- package/dist/components/Layout/Stack/Stack.d.ts.map +1 -1
- package/dist/components/Layout/Table/Table.d.ts +1 -1
- package/dist/components/Layout/Table/Table.d.ts.map +1 -1
- package/dist/components/Layout/Tabs/Tabs.d.ts +16 -5
- package/dist/components/Layout/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Layout/Tabs/Tabs.js +53 -18
- package/dist/components/Layout/Tabs/Tabs.stories.d.ts.map +1 -1
- package/dist/components/Layout/Tabs/Tabs.stories.js +39 -39
- package/dist/components/Layout/VirtualGrid/VirtualGrid.d.ts +63 -0
- package/dist/components/Layout/VirtualGrid/VirtualGrid.d.ts.map +1 -0
- package/dist/components/Layout/VirtualGrid/VirtualGrid.js +159 -0
- package/dist/components/Misc/Burger/Burger.d.ts +6 -0
- package/dist/components/Misc/Burger/Burger.d.ts.map +1 -0
- package/dist/components/Misc/Burger/Burger.js +7 -0
- package/dist/components/Misc/Burger/Burger.stories.d.ts +10 -0
- package/dist/components/Misc/Burger/Burger.stories.d.ts.map +1 -0
- package/dist/components/Misc/Burger/Burger.stories.js +86 -0
- package/dist/components/Misc/Carousel/Carousel.d.ts +32 -0
- package/dist/components/Misc/Carousel/Carousel.d.ts.map +1 -0
- package/dist/components/Misc/Carousel/Carousel.js +16 -0
- package/dist/components/Misc/DragHandle/DragHandle.d.ts +19 -0
- package/dist/components/Misc/DragHandle/DragHandle.d.ts.map +1 -0
- package/dist/components/Misc/DragHandle/DragHandle.js +39 -0
- package/dist/components/Misc/DragHandle/DragHandle.stories.d.ts +9 -0
- package/dist/components/Misc/DragHandle/DragHandle.stories.d.ts.map +1 -0
- package/dist/components/Misc/DragHandle/DragHandle.stories.js +54 -0
- package/dist/components/Misc/FAB/FAB.d.ts +54 -0
- package/dist/components/Misc/FAB/FAB.d.ts.map +1 -0
- package/dist/components/Misc/FAB/FAB.js +53 -0
- package/dist/components/Misc/FAB/FAB.stories.d.ts +10 -0
- package/dist/components/Misc/FAB/FAB.stories.d.ts.map +1 -0
- package/dist/components/Misc/FAB/FAB.stories.js +100 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.d.ts +50 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.d.ts.map +1 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.js +40 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.d.ts +9 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.d.ts.map +1 -0
- package/dist/components/Misc/FloatingToolbar/FloatingToolbar.stories.js +53 -0
- package/dist/components/Misc/HoverAction/HoverAction.d.ts +50 -0
- package/dist/components/Misc/HoverAction/HoverAction.d.ts.map +1 -0
- package/dist/components/Misc/HoverAction/HoverAction.js +61 -0
- package/dist/components/Misc/HoverAction/HoverAction.stories.d.ts +12 -0
- package/dist/components/Misc/HoverAction/HoverAction.stories.d.ts.map +1 -0
- package/dist/components/Misc/HoverAction/HoverAction.stories.js +96 -0
- package/dist/components/Misc/IconBadge/IconBadge.d.ts +1 -1
- package/dist/components/Misc/IconBadge/IconBadge.d.ts.map +1 -1
- package/dist/components/Misc/IconBadge/IconBadge.js +8 -6
- package/dist/components/Misc/Image/Image.d.ts +3 -0
- package/dist/components/Misc/Image/Image.d.ts.map +1 -0
- package/dist/components/Misc/Image/Image.js +1 -0
- package/dist/components/Misc/Image/Image.stories.d.ts +11 -0
- package/dist/components/Misc/Image/Image.stories.d.ts.map +1 -0
- package/dist/components/Misc/Image/Image.stories.js +63 -0
- package/dist/components/Misc/Kbd/Kbd.d.ts +7 -0
- package/dist/components/Misc/Kbd/Kbd.d.ts.map +1 -0
- package/dist/components/Misc/Kbd/Kbd.js +16 -0
- package/dist/components/Misc/Kbd/Kbd.stories.d.ts +9 -0
- package/dist/components/Misc/Kbd/Kbd.stories.d.ts.map +1 -0
- package/dist/components/Misc/Kbd/Kbd.stories.js +52 -0
- package/dist/components/Misc/LoadingOverlay/LoadingOverlay.d.ts +2 -1
- package/dist/components/Misc/LoadingOverlay/LoadingOverlay.d.ts.map +1 -1
- package/dist/components/Misc/Menu/Menu.d.ts +17 -0
- package/dist/components/Misc/Menu/Menu.d.ts.map +1 -0
- package/dist/components/Misc/Menu/Menu.js +52 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.d.ts +42 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.d.ts.map +1 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.js +110 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.stories.d.ts +11 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.stories.d.ts.map +1 -0
- package/dist/components/Misc/OverflowFade/OverflowFade.stories.js +112 -0
- package/dist/components/Misc/Picker/Picker.d.ts +62 -0
- package/dist/components/Misc/Picker/Picker.d.ts.map +1 -0
- package/dist/components/Misc/Picker/Picker.js +111 -0
- package/dist/components/Misc/Picker/Picker.stories.d.ts +14 -0
- package/dist/components/Misc/Picker/Picker.stories.d.ts.map +1 -0
- package/dist/components/Misc/Picker/Picker.stories.js +154 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.d.ts +38 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.d.ts.map +1 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.js +70 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.stories.d.ts +11 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.stories.d.ts.map +1 -0
- package/dist/components/Misc/SelectableObject/SelectableObject.stories.js +84 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.d.ts +26 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.d.ts.map +1 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.js +41 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.d.ts +10 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.d.ts.map +1 -0
- package/dist/components/Misc/SelectionToolbar/SelectionToolbar.stories.js +48 -0
- package/dist/components/Misc/Skeleton/Skeleton.d.ts +1 -1
- package/dist/components/Misc/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Misc/Stepper/Step.d.ts +1 -1
- package/dist/components/Misc/Stepper/Step.d.ts.map +1 -1
- package/dist/components/Misc/Stepper/Step.stories.d.ts +120 -120
- package/dist/components/Misc/Stepper/Stepper.d.ts +1 -1
- package/dist/components/Misc/Stepper/Stepper.d.ts.map +1 -1
- package/dist/components/Misc/Stepper/variants.d.ts +1 -1
- package/dist/components/Misc/Timeline/Timeline.d.ts +18 -0
- package/dist/components/Misc/Timeline/Timeline.d.ts.map +1 -0
- package/dist/components/Misc/Timeline/Timeline.js +38 -0
- package/dist/components/Misc/Timeline/Timeline.stories.d.ts +8 -0
- package/dist/components/Misc/Timeline/Timeline.stories.d.ts.map +1 -0
- package/dist/components/Misc/Timeline/Timeline.stories.js +54 -0
- package/dist/components/Misc/Transition/Transition.d.ts +2 -1
- package/dist/components/Misc/Transition/Transition.d.ts.map +1 -1
- package/dist/components/Typography/CollapsibleText/CollapsibleText.d.ts +1 -1
- package/dist/components/Typography/CollapsibleText/CollapsibleText.d.ts.map +1 -1
- package/dist/components/Typography/CollapsibleTitle/CollapsibleTitle.d.ts +1 -1
- package/dist/components/Typography/CollapsibleTitle/CollapsibleTitle.d.ts.map +1 -1
- package/dist/components/Typography/Formula/Formula.d.ts +2 -1
- package/dist/components/Typography/Formula/Formula.d.ts.map +1 -1
- package/dist/components/Typography/Fraction/Fraction.d.ts +1 -1
- package/dist/components/Typography/Fraction/Fraction.d.ts.map +1 -1
- package/dist/components/Typography/InlineEditableText/InlineEditableText.d.ts +35 -0
- package/dist/components/Typography/InlineEditableText/InlineEditableText.d.ts.map +1 -0
- package/dist/components/Typography/InlineEditableText/InlineEditableText.js +112 -0
- package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.d.ts +11 -0
- package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.d.ts.map +1 -0
- package/dist/components/Typography/InlineEditableText/InlineEditableText.stories.js +48 -0
- package/dist/components/Typography/Text/Text.d.ts +1 -1
- package/dist/components/Typography/Text/Text.d.ts.map +1 -1
- package/dist/components/Typography/Title/Title.d.ts +1 -1
- package/dist/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/components/index.d.ts +148 -66
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +110 -68
- package/dist/constants/colors.d.ts +117 -91
- package/dist/constants/colors.d.ts.map +1 -1
- package/dist/constants/colors.js +56 -43
- package/dist/constants/font.d.ts +4 -4
- package/dist/constants/font.js +2 -2
- package/dist/docs/AIGeneratedBanner.d.ts +1 -1
- package/dist/docs/AIGeneratedBanner.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +9 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +7 -1
- package/dist/hooks/useConfirmationModal.d.ts.map +1 -1
- package/dist/hooks/useConfirmationModal.js +20 -1
- package/dist/hooks/useDisclosure.d.ts +11 -0
- package/dist/hooks/useDisclosure.d.ts.map +1 -0
- package/dist/hooks/useDisclosure.js +10 -0
- package/dist/hooks/useHeadroom.d.ts +18 -0
- package/dist/hooks/useHeadroom.d.ts.map +1 -0
- package/dist/hooks/useHeadroom.js +17 -0
- package/dist/hooks/useInfoModal.d.ts.map +1 -1
- package/dist/hooks/useInfoModal.js +13 -1
- package/dist/hooks/useMediaQuery.d.ts +1 -0
- package/dist/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.js +1 -0
- package/dist/hooks/useNotifications.d.ts +39 -7
- package/dist/hooks/useNotifications.d.ts.map +1 -1
- package/dist/hooks/useNotifications.js +108 -5
- package/dist/hooks/usePagination.d.ts +11 -0
- package/dist/hooks/usePagination.d.ts.map +1 -0
- package/dist/hooks/usePagination.js +2 -0
- package/dist/hooks/useScrollLock.d.ts +21 -0
- package/dist/hooks/useScrollLock.d.ts.map +1 -0
- package/dist/hooks/useScrollLock.js +20 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/styles/iosInputZoomFix.d.ts +31 -0
- package/dist/styles/iosInputZoomFix.d.ts.map +1 -0
- package/dist/styles/iosInputZoomFix.js +135 -0
- package/dist/utils/bytes.d.ts +10 -0
- package/dist/utils/bytes.d.ts.map +1 -0
- package/dist/utils/bytes.js +17 -0
- package/dist/utils/datetime.d.ts +18 -0
- package/dist/utils/datetime.d.ts.map +1 -0
- package/dist/utils/datetime.js +42 -0
- package/dist/utils/duration.d.ts +17 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +30 -0
- package/dist/utils/index.d.ts +8 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -2
- package/dist/utils/sort.d.ts +44 -0
- package/dist/utils/sort.d.ts.map +1 -0
- package/dist/utils/sort.js +53 -0
- package/dist/utils/string.d.ts +22 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +25 -0
- package/package.json +28 -4
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconCheck, IconPencil, IconPlus, IconTrash } from '@tabler/icons-react';
|
|
3
|
+
import { neutral } from '../../../constants/colors';
|
|
4
|
+
import { spacing } from '../../../constants/spacing';
|
|
5
|
+
import { Stack } from '../../Layout/Stack/Stack';
|
|
6
|
+
import { Text } from '../../Typography/Text/Text';
|
|
7
|
+
import { Title } from '../../Typography/Title/Title';
|
|
8
|
+
import { FAB } from './FAB';
|
|
9
|
+
const meta = {
|
|
10
|
+
argTypes: {
|
|
11
|
+
ariaLabel: {
|
|
12
|
+
control: { type: 'text' },
|
|
13
|
+
description: 'Accessible label — required since the FAB has no visible text',
|
|
14
|
+
},
|
|
15
|
+
hidden: {
|
|
16
|
+
control: { type: 'boolean' },
|
|
17
|
+
description: 'Force-hide the FAB regardless of viewport',
|
|
18
|
+
table: { defaultValue: { summary: 'false' } },
|
|
19
|
+
},
|
|
20
|
+
mobileOnly: {
|
|
21
|
+
control: { type: 'boolean' },
|
|
22
|
+
description: 'Only render on tablet/mobile viewports (≤ 768px)',
|
|
23
|
+
table: { defaultValue: { summary: 'true' } },
|
|
24
|
+
},
|
|
25
|
+
offset: {
|
|
26
|
+
control: { type: 'text' },
|
|
27
|
+
description: 'Distance from the anchored edges',
|
|
28
|
+
table: { defaultValue: { summary: 'spacing.lg (16px)' } },
|
|
29
|
+
},
|
|
30
|
+
onClick: { action: 'clicked' },
|
|
31
|
+
position: {
|
|
32
|
+
control: { type: 'select' },
|
|
33
|
+
options: ['bottom-right', 'bottom-left', 'top-right', 'top-left'],
|
|
34
|
+
table: { defaultValue: { summary: "'bottom-right'" } },
|
|
35
|
+
},
|
|
36
|
+
size: {
|
|
37
|
+
control: { type: 'select' },
|
|
38
|
+
options: ['sm', 'md', 'lg', 'xl', '2xl'],
|
|
39
|
+
table: { defaultValue: { summary: "'2xl'" } },
|
|
40
|
+
},
|
|
41
|
+
variant: {
|
|
42
|
+
control: { type: 'select' },
|
|
43
|
+
options: ['primary', 'secondary', 'tertiary', 'cancel', 'success', 'warning'],
|
|
44
|
+
table: { defaultValue: { summary: "'primary'" } },
|
|
45
|
+
},
|
|
46
|
+
zIndex: {
|
|
47
|
+
control: { type: 'number' },
|
|
48
|
+
table: { defaultValue: { summary: '10' } },
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
component: FAB,
|
|
52
|
+
parameters: {
|
|
53
|
+
docs: {
|
|
54
|
+
description: {
|
|
55
|
+
component: "Floating Action Button. A `position: fixed` IconButton anchored to a viewport corner, used for the page's primary action when screen real estate is tight. Defaults to mobile-only (≤ 768px) — on desktop, prefer an inline `<Button>` for the same action.",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
layout: 'fullscreen',
|
|
59
|
+
},
|
|
60
|
+
title: 'Components/Misc/FAB',
|
|
61
|
+
};
|
|
62
|
+
export default meta;
|
|
63
|
+
const StageBackdrop = ({ children }) => (_jsxs(Stack, { gap: spacing.md, style: {
|
|
64
|
+
background: neutral[25],
|
|
65
|
+
height: '100vh',
|
|
66
|
+
padding: spacing.xl,
|
|
67
|
+
position: 'relative',
|
|
68
|
+
}, children: [_jsx(Title, { variant: 'sectionHeader', children: "Page content" }), _jsxs(Text, { variant: 'subtle', children: ["The FAB anchors to the viewport \u2014 scroll, resize, or move other content; it stays put. Defaults to mobile-only; toggle ", _jsx("code", { children: "mobileOnly" }), " in controls to preview it on desktop."] }), children] }));
|
|
69
|
+
export const Default = {
|
|
70
|
+
args: {
|
|
71
|
+
ariaLabel: 'Add item',
|
|
72
|
+
icon: _jsx(IconPlus, {}),
|
|
73
|
+
mobileOnly: false,
|
|
74
|
+
onClick: () => { },
|
|
75
|
+
},
|
|
76
|
+
render: (args) => (_jsx(StageBackdrop, { children: _jsx(FAB, { ...args }) })),
|
|
77
|
+
};
|
|
78
|
+
export const Positions = {
|
|
79
|
+
parameters: {
|
|
80
|
+
docs: {
|
|
81
|
+
description: {
|
|
82
|
+
story: 'Each of the four corner anchors. `mobileOnly` disabled for the demo.',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
render: () => (_jsxs(StageBackdrop, { children: [_jsx(FAB, { ariaLabel: 'Top-left', icon: _jsx(IconPencil, {}), mobileOnly: false, onClick: () => { }, position: 'top-left', variant: 'secondary' }), _jsx(FAB, { ariaLabel: 'Top-right', icon: _jsx(IconCheck, {}), mobileOnly: false, onClick: () => { }, position: 'top-right', variant: 'success' }), _jsx(FAB, { ariaLabel: 'Bottom-left', icon: _jsx(IconTrash, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-left', variant: 'cancel' }), _jsx(FAB, { ariaLabel: 'Bottom-right', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-right' })] })),
|
|
87
|
+
};
|
|
88
|
+
export const Variants = {
|
|
89
|
+
parameters: {
|
|
90
|
+
docs: {
|
|
91
|
+
description: {
|
|
92
|
+
story: "All IconButton variants are supported. `tertiary` (white bg, primary outline) is the recommended FAB style — softer than `primary` while still reading as a brand-colored CTA.",
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
render: () => (_jsxs(StageBackdrop, { children: [_jsx(FAB, { ariaLabel: 'Primary', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-right' }), _jsx(FAB, { ariaLabel: 'Tertiary', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-left', variant: 'tertiary' })] })),
|
|
97
|
+
};
|
|
98
|
+
export const Sizes = {
|
|
99
|
+
render: () => (_jsxs(StageBackdrop, { children: [_jsx(FAB, { ariaLabel: '2XL (default, recommended for mobile FABs)', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-right' }), _jsx(FAB, { ariaLabel: 'XL', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'bottom-left', size: 'xl' }), _jsx(FAB, { ariaLabel: 'Large', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'top-left', size: 'lg' }), _jsx(FAB, { ariaLabel: 'Medium', icon: _jsx(IconPlus, {}), mobileOnly: false, onClick: () => { }, position: 'top-right', size: 'md' })] })),
|
|
100
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface FloatingToolbarProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* How `children` are separated. Default `spacing.xs`.
|
|
6
|
+
*/
|
|
7
|
+
gap?: string | number;
|
|
8
|
+
/**
|
|
9
|
+
* When children overflow horizontally, scroll instead of wrapping. Default `true`.
|
|
10
|
+
*/
|
|
11
|
+
scrollOverflow?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Override the pill's inner padding. Accepts a CSS `padding` value.
|
|
14
|
+
* Default `'4px 8px'`.
|
|
15
|
+
*/
|
|
16
|
+
padding?: string | number;
|
|
17
|
+
/**
|
|
18
|
+
* Additional inline styles forwarded to the pill container. Consumers use
|
|
19
|
+
* this to position the toolbar over a canvas — the component itself is
|
|
20
|
+
* position-agnostic (see `SelectableObject` + consumer selection state
|
|
21
|
+
* for the anchor/flipping behavior).
|
|
22
|
+
*/
|
|
23
|
+
style?: React.CSSProperties;
|
|
24
|
+
className?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Accessible label for the toolbar. Default `'Formatting options'`.
|
|
27
|
+
*/
|
|
28
|
+
ariaLabel?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Chrome for a Canva-style floating action toolbar. Renders a white pill with
|
|
32
|
+
* shadow + border + horizontal overflow scrolling and a flex-row gap between
|
|
33
|
+
* children. **Positioning is the consumer's responsibility** — wrap this in
|
|
34
|
+
* your own portal / absolute-positioned shell, or use it inline.
|
|
35
|
+
*
|
|
36
|
+
* The *composition* inside (font select, size stepper, B/I/U, color pickers,
|
|
37
|
+
* delete) stays in the consuming app since it depends on the canvas object's
|
|
38
|
+
* shape. This component only ships the shell.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* <div style={{ position: 'absolute', top: y, left: x, transform: 'translate(-50%, -100%)' }}>
|
|
42
|
+
* <FloatingToolbar>
|
|
43
|
+
* <Select ... />
|
|
44
|
+
* <Divider orientation="vertical" />
|
|
45
|
+
* <IconButton>...</IconButton>
|
|
46
|
+
* </FloatingToolbar>
|
|
47
|
+
* </div>
|
|
48
|
+
*/
|
|
49
|
+
export declare const FloatingToolbar: ({ children, gap, scrollOverflow, padding, style, className, ariaLabel, }: FloatingToolbarProps) => React.JSX.Element;
|
|
50
|
+
//# sourceMappingURL=FloatingToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/FloatingToolbar/FloatingToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,0EAQ7B,oBAAoB,sBA6BtB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { neutral, white } from '../../../constants/colors';
|
|
4
|
+
import { spacing } from '../../../constants/spacing';
|
|
5
|
+
/**
|
|
6
|
+
* Chrome for a Canva-style floating action toolbar. Renders a white pill with
|
|
7
|
+
* shadow + border + horizontal overflow scrolling and a flex-row gap between
|
|
8
|
+
* children. **Positioning is the consumer's responsibility** — wrap this in
|
|
9
|
+
* your own portal / absolute-positioned shell, or use it inline.
|
|
10
|
+
*
|
|
11
|
+
* The *composition* inside (font select, size stepper, B/I/U, color pickers,
|
|
12
|
+
* delete) stays in the consuming app since it depends on the canvas object's
|
|
13
|
+
* shape. This component only ships the shell.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* <div style={{ position: 'absolute', top: y, left: x, transform: 'translate(-50%, -100%)' }}>
|
|
17
|
+
* <FloatingToolbar>
|
|
18
|
+
* <Select ... />
|
|
19
|
+
* <Divider orientation="vertical" />
|
|
20
|
+
* <IconButton>...</IconButton>
|
|
21
|
+
* </FloatingToolbar>
|
|
22
|
+
* </div>
|
|
23
|
+
*/
|
|
24
|
+
export const FloatingToolbar = ({ children, gap = spacing.xs, scrollOverflow = true, padding = `${spacing.xxs} ${spacing.sm}`, style, className, ariaLabel = 'Formatting options', }) => {
|
|
25
|
+
return (_jsx("div", { "aria-label": ariaLabel, className: className, role: 'toolbar', style: {
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
backgroundColor: white,
|
|
28
|
+
border: `1px solid ${neutral[50]}`,
|
|
29
|
+
borderRadius: '999px',
|
|
30
|
+
boxShadow: '0 8px 24px rgba(0, 0, 0, 0.12)',
|
|
31
|
+
display: 'inline-flex',
|
|
32
|
+
gap,
|
|
33
|
+
maxWidth: '100%',
|
|
34
|
+
overflowX: scrollOverflow ? 'auto' : 'visible',
|
|
35
|
+
overflowY: 'visible',
|
|
36
|
+
padding,
|
|
37
|
+
whiteSpace: 'nowrap',
|
|
38
|
+
...style,
|
|
39
|
+
}, children: React.Children.map(children, (child, i) => (_jsx("div", { style: { flexShrink: 0, display: 'inline-flex', alignItems: 'center' }, children: child }, i))) }));
|
|
40
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { FloatingToolbar } from './FloatingToolbar';
|
|
3
|
+
declare const meta: Meta<typeof FloatingToolbar>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const TextToolbar: Story;
|
|
7
|
+
export declare const OverflowScroll: Story;
|
|
8
|
+
export declare const OverCanvas: Story;
|
|
9
|
+
//# sourceMappingURL=FloatingToolbar.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingToolbar.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/FloatingToolbar/FloatingToolbar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAc5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAYtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,WAAW,EAAE,KA8CzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAmCxB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconBold, IconItalic, IconTrash, IconUnderline, } from '@tabler/icons-react';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { neutral } from '../../../constants/colors';
|
|
5
|
+
import { spacing } from '../../../constants/spacing';
|
|
6
|
+
import { IconButton } from '../../Inputs/Buttons/IconButton/IconButton';
|
|
7
|
+
import { ColorPickerTrigger } from '../../Inputs/ColorPickerTrigger/ColorPickerTrigger';
|
|
8
|
+
import { Select } from '../../Inputs/Dropdowns/Select/Select';
|
|
9
|
+
import { Divider } from '../../Layout/Divider/Divider';
|
|
10
|
+
import { FloatingToolbar } from './FloatingToolbar';
|
|
11
|
+
const meta = {
|
|
12
|
+
component: FloatingToolbar,
|
|
13
|
+
parameters: {
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component: "White pill used as the chrome for Canva-style floating action toolbars. Positioning is the consumer's responsibility — wrap this in a portal / absolute-positioned shell, or use it inline.",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
layout: 'centered',
|
|
20
|
+
},
|
|
21
|
+
title: 'Components/Misc/FloatingToolbar',
|
|
22
|
+
};
|
|
23
|
+
export default meta;
|
|
24
|
+
export const TextToolbar = {
|
|
25
|
+
render: () => {
|
|
26
|
+
const [font, setFont] = useState('poppins');
|
|
27
|
+
const [color, setColor] = useState('#1E293B');
|
|
28
|
+
const [fill, setFill] = useState('transparent');
|
|
29
|
+
return (_jsxs(FloatingToolbar, { children: [_jsx(Select, { data: [
|
|
30
|
+
{ label: 'Poppins', value: 'poppins' },
|
|
31
|
+
{ label: 'Inter', value: 'inter' },
|
|
32
|
+
{ label: 'Georgia', value: 'georgia' },
|
|
33
|
+
], onChange: setFont, size: 'sm', style: { width: 140 }, value: font }), _jsx(Divider, { orientation: 'vertical' }), _jsx(IconButton, { "aria-label": 'Bold', variant: 'text', children: _jsx(IconBold, { size: 16 }) }), _jsx(IconButton, { "aria-label": 'Italic', variant: 'text', children: _jsx(IconItalic, { size: 16 }) }), _jsx(IconButton, { "aria-label": 'Underline', variant: 'text', children: _jsx(IconUnderline, { size: 16 }) }), _jsx(Divider, { orientation: 'vertical' }), _jsx(ColorPickerTrigger, { onChange: setColor, value: color, variant: 'fontColor' }), _jsx(ColorPickerTrigger, { onChange: setFill, value: fill, variant: 'fillColor' }), _jsx(Divider, { orientation: 'vertical' }), _jsx(IconButton, { "aria-label": 'Delete', variant: 'text', children: _jsx(IconTrash, { size: 16 }) })] }));
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
export const OverflowScroll = {
|
|
37
|
+
render: () => (_jsx("div", { style: { maxWidth: 320 }, children: _jsx(FloatingToolbar, { children: Array.from({ length: 12 }, (_, i) => `tool-${i + 1}`).map((key, i) => (_jsx(IconButton, { "aria-label": `Tool ${i + 1}`, variant: 'text', children: _jsx(IconBold, { size: 16 }) }, key))) }) })),
|
|
38
|
+
};
|
|
39
|
+
export const OverCanvas = {
|
|
40
|
+
render: () => (_jsx("div", { style: {
|
|
41
|
+
background: neutral[25],
|
|
42
|
+
border: `1px solid ${neutral[50]}`,
|
|
43
|
+
borderRadius: 8,
|
|
44
|
+
height: 320,
|
|
45
|
+
position: 'relative',
|
|
46
|
+
width: 480,
|
|
47
|
+
}, children: _jsx("div", { style: {
|
|
48
|
+
left: '50%',
|
|
49
|
+
position: 'absolute',
|
|
50
|
+
top: spacing.md,
|
|
51
|
+
transform: 'translateX(-50%)',
|
|
52
|
+
}, children: _jsxs(FloatingToolbar, { children: [_jsx(IconButton, { "aria-label": 'Bold', variant: 'text', children: _jsx(IconBold, { size: 16 }) }), _jsx(IconButton, { "aria-label": 'Italic', variant: 'text', children: _jsx(IconItalic, { size: 16 }) }), _jsx(Divider, { orientation: 'vertical' }), _jsx(IconButton, { "aria-label": 'Delete', variant: 'text', children: _jsx(IconTrash, { size: 16 }) })] }) }) })),
|
|
53
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
declare const componentVariants: {
|
|
3
|
+
readonly close: {
|
|
4
|
+
readonly Icon: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
|
|
5
|
+
readonly color: "#6D6D6D";
|
|
6
|
+
readonly hoverColor: "#C10007";
|
|
7
|
+
};
|
|
8
|
+
readonly trash: {
|
|
9
|
+
readonly Icon: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
|
|
10
|
+
readonly color: "#6D6D6D";
|
|
11
|
+
readonly hoverColor: "#C10007";
|
|
12
|
+
};
|
|
13
|
+
readonly edit: {
|
|
14
|
+
readonly Icon: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
|
|
15
|
+
readonly color: "#6D6D6D";
|
|
16
|
+
readonly hoverColor: "#6F3FEE";
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
declare const componentSizes: {
|
|
20
|
+
readonly sm: {
|
|
21
|
+
readonly borderLength: 24;
|
|
22
|
+
readonly iconSize: 14;
|
|
23
|
+
};
|
|
24
|
+
readonly md: {
|
|
25
|
+
readonly borderLength: 32;
|
|
26
|
+
readonly iconSize: 18;
|
|
27
|
+
};
|
|
28
|
+
readonly lg: {
|
|
29
|
+
readonly borderLength: 44;
|
|
30
|
+
readonly iconSize: 24;
|
|
31
|
+
};
|
|
32
|
+
readonly xl: {
|
|
33
|
+
readonly borderLength: 56;
|
|
34
|
+
readonly iconSize: 30;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export interface HoverActionProps {
|
|
38
|
+
variant: keyof typeof componentVariants;
|
|
39
|
+
onClick: () => void;
|
|
40
|
+
children: ReactNode;
|
|
41
|
+
showBackground?: boolean;
|
|
42
|
+
offset?: number;
|
|
43
|
+
visible?: boolean;
|
|
44
|
+
iconSize?: number;
|
|
45
|
+
size?: keyof typeof componentSizes;
|
|
46
|
+
fullWidth?: boolean;
|
|
47
|
+
}
|
|
48
|
+
declare const HoverAction: ({ variant, onClick, children, showBackground, offset, visible, iconSize, size, fullWidth, }: HoverActionProps) => import("react").JSX.Element;
|
|
49
|
+
export { HoverAction };
|
|
50
|
+
//# sourceMappingURL=HoverAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HoverAction.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/HoverAction/HoverAction.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,OAAO,CAAC;AAM9C,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;CAgBb,CAAC;AAEX,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;CAKV,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,OAAO,iBAAiB,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,OAAO,cAAc,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,WAAW,GAAI,6FAUlB,gBAAgB,gCA4ClB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActionIcon, Box } from '@mantine/core';
|
|
3
|
+
import { useHover } from '@mantine/hooks';
|
|
4
|
+
import { IconX, IconTrash, IconPencil } from '@tabler/icons-react';
|
|
5
|
+
import { neutral, error, primary, white } from '../../../constants/colors';
|
|
6
|
+
const componentVariants = {
|
|
7
|
+
close: {
|
|
8
|
+
Icon: IconX,
|
|
9
|
+
color: neutral[200],
|
|
10
|
+
hoverColor: error[200],
|
|
11
|
+
},
|
|
12
|
+
trash: {
|
|
13
|
+
Icon: IconTrash,
|
|
14
|
+
color: neutral[200],
|
|
15
|
+
hoverColor: error[200],
|
|
16
|
+
},
|
|
17
|
+
edit: {
|
|
18
|
+
Icon: IconPencil,
|
|
19
|
+
color: neutral[200],
|
|
20
|
+
hoverColor: primary[200],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
const componentSizes = {
|
|
24
|
+
sm: { borderLength: 24, iconSize: 14 },
|
|
25
|
+
md: { borderLength: 32, iconSize: 18 },
|
|
26
|
+
lg: { borderLength: 44, iconSize: 24 },
|
|
27
|
+
xl: { borderLength: 56, iconSize: 30 },
|
|
28
|
+
};
|
|
29
|
+
const HoverAction = ({ variant, onClick, children, showBackground = false, offset = 10, visible, iconSize, size = 'md', fullWidth = false, }) => {
|
|
30
|
+
const { ref, hovered } = useHover();
|
|
31
|
+
const { Icon, color, hoverColor } = componentVariants[variant];
|
|
32
|
+
const selectedSize = componentSizes[size];
|
|
33
|
+
const resolvedIconSize = iconSize !== null && iconSize !== void 0 ? iconSize : selectedSize.iconSize;
|
|
34
|
+
const isVisible = visible !== undefined ? visible : hovered;
|
|
35
|
+
const handleClick = (e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
e.stopPropagation();
|
|
38
|
+
onClick();
|
|
39
|
+
};
|
|
40
|
+
return (_jsxs(Box, { ref: ref, sx: { position: 'relative', width: fullWidth ? '100%' : 'fit-content' }, children: [children, _jsx(ActionIcon, { onClick: handleClick, radius: 'xl', sx: {
|
|
41
|
+
position: 'absolute',
|
|
42
|
+
top: -offset,
|
|
43
|
+
right: -offset,
|
|
44
|
+
height: `${selectedSize.borderLength}px`,
|
|
45
|
+
width: `${selectedSize.borderLength}px`,
|
|
46
|
+
minHeight: `${selectedSize.borderLength}px`,
|
|
47
|
+
minWidth: `${selectedSize.borderLength}px`,
|
|
48
|
+
opacity: isVisible ? 1 : 0,
|
|
49
|
+
pointerEvents: isVisible ? 'auto' : 'none',
|
|
50
|
+
transition: 'opacity 0.15s ease-in-out, color 0.1s ease-in-out',
|
|
51
|
+
backgroundColor: showBackground ? white : 'transparent',
|
|
52
|
+
boxShadow: showBackground ? '0 2px 6px rgba(0, 0, 0, 0.12)' : 'none',
|
|
53
|
+
color,
|
|
54
|
+
'&:hover': {
|
|
55
|
+
backgroundColor: white,
|
|
56
|
+
color: hoverColor,
|
|
57
|
+
boxShadow: '0 2px 6px rgba(0, 0, 0, 0.12)',
|
|
58
|
+
},
|
|
59
|
+
}, children: _jsx(Icon, { size: resolvedIconSize }) })] }));
|
|
60
|
+
};
|
|
61
|
+
export { HoverAction };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { HoverAction } from './HoverAction';
|
|
3
|
+
declare const meta: Meta<typeof HoverAction>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof HoverAction>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Variants: Story;
|
|
8
|
+
export declare const HiddenUntilHover: Story;
|
|
9
|
+
export declare const AlwaysVisible: Story;
|
|
10
|
+
export declare const WrappingACard: Story;
|
|
11
|
+
export declare const CustomOffset: Story;
|
|
12
|
+
//# sourceMappingURL=HoverAction.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HoverAction.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/HoverAction/HoverAction.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA8B5C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAiClC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,eAAO,MAAM,OAAO,EAAE,KAWrB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KActB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAc9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAa3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { HoverAction } from './HoverAction';
|
|
3
|
+
import { Card } from '../../Layout/Card/Card';
|
|
4
|
+
import { Group } from '../../Layout/Group/Group';
|
|
5
|
+
import { Stack } from '../../Layout/Stack/Stack';
|
|
6
|
+
import { Text } from '../../Typography/Text/Text';
|
|
7
|
+
import { Title } from '../../Typography/Title/Title';
|
|
8
|
+
import { spacing } from '../../../constants/spacing';
|
|
9
|
+
import { neutral } from '../../../constants/colors';
|
|
10
|
+
const SlidePreview = ({ label = 'Calamari' }) => (_jsxs(Stack, { gap: spacing.xs, children: [_jsx("div", { style: {
|
|
11
|
+
width: 160,
|
|
12
|
+
height: 110,
|
|
13
|
+
borderRadius: 8,
|
|
14
|
+
background: `linear-gradient(135deg, ${neutral[50]}, ${neutral[100]})`,
|
|
15
|
+
display: 'flex',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
justifyContent: 'center',
|
|
18
|
+
}, children: _jsx(Text, { variant: 'label', style: { color: neutral[300] }, children: label }) }), _jsx(Text, { variant: 'label', children: label })] }));
|
|
19
|
+
const meta = {
|
|
20
|
+
title: 'Components/Misc/HoverAction',
|
|
21
|
+
component: HoverAction,
|
|
22
|
+
parameters: {
|
|
23
|
+
layout: 'centered',
|
|
24
|
+
docs: {
|
|
25
|
+
description: {
|
|
26
|
+
component: 'Wraps any content with a floating icon button pinned to the top-right corner. The button fades in when the wrapped content is hovered. Variants: close, trash, edit. Click handler is called with propagation stopped, so wrapping interactive cards is safe.',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
argTypes: {
|
|
31
|
+
variant: {
|
|
32
|
+
control: { type: 'select' },
|
|
33
|
+
options: ['close', 'trash', 'edit'],
|
|
34
|
+
table: { defaultValue: { summary: "'close'" } },
|
|
35
|
+
},
|
|
36
|
+
showBackground: {
|
|
37
|
+
control: { type: 'boolean' },
|
|
38
|
+
description: 'Always show white circle background (vs transparent until hover)',
|
|
39
|
+
table: { defaultValue: { summary: 'false' } },
|
|
40
|
+
},
|
|
41
|
+
offset: {
|
|
42
|
+
control: { type: 'number' },
|
|
43
|
+
description: 'Pixels the button pokes out of the top-right corner',
|
|
44
|
+
table: { defaultValue: { summary: '10' } },
|
|
45
|
+
},
|
|
46
|
+
visible: {
|
|
47
|
+
control: { type: 'boolean' },
|
|
48
|
+
description: 'Manual override for visibility. When unset, button shows on hover.',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
export default meta;
|
|
53
|
+
export const Default = {
|
|
54
|
+
args: {
|
|
55
|
+
variant: 'close',
|
|
56
|
+
showBackground: true,
|
|
57
|
+
offset: 10,
|
|
58
|
+
},
|
|
59
|
+
render: (args) => (_jsx(HoverAction, { ...args, onClick: () => console.log('clicked'), children: _jsx(SlidePreview, {}) })),
|
|
60
|
+
};
|
|
61
|
+
export const Variants = {
|
|
62
|
+
render: () => (_jsxs(Group, { gap: spacing.xl, children: [_jsx(HoverAction, { variant: 'close', showBackground: true, onClick: () => console.log('close'), children: _jsx(SlidePreview, { label: 'Close' }) }), _jsx(HoverAction, { variant: 'trash', showBackground: true, onClick: () => console.log('trash'), children: _jsx(SlidePreview, { label: 'Trash' }) }), _jsx(HoverAction, { variant: 'edit', showBackground: true, onClick: () => console.log('edit'), children: _jsx(SlidePreview, { label: 'Edit' }) })] })),
|
|
63
|
+
};
|
|
64
|
+
export const HiddenUntilHover = {
|
|
65
|
+
parameters: {
|
|
66
|
+
docs: {
|
|
67
|
+
description: {
|
|
68
|
+
story: 'With `showBackground={false}` (default), the button is fully hidden until the wrapper is hovered. Matches the Taiv app slide-preview pattern.',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
render: () => (_jsx(HoverAction, { variant: 'close', onClick: () => console.log('close'), children: _jsx(SlidePreview, { label: 'Hover me' }) })),
|
|
73
|
+
};
|
|
74
|
+
export const AlwaysVisible = {
|
|
75
|
+
parameters: {
|
|
76
|
+
docs: {
|
|
77
|
+
description: {
|
|
78
|
+
story: 'Pass `visible` explicitly to bypass the internal hover state.',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
render: () => (_jsx(HoverAction, { variant: 'trash', showBackground: true, visible: true, onClick: () => console.log('delete'), children: _jsx(SlidePreview, { label: 'Always shown' }) })),
|
|
83
|
+
};
|
|
84
|
+
export const WrappingACard = {
|
|
85
|
+
parameters: {
|
|
86
|
+
docs: {
|
|
87
|
+
description: {
|
|
88
|
+
story: 'Wrapping an interactive Card. Clicking the close button stops propagation — the card onClick does not fire.',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
render: () => (_jsx(HoverAction, { variant: 'close', showBackground: true, onClick: () => alert('Removed!'), children: _jsx("div", { onClick: () => alert('Card clicked'), style: { cursor: 'pointer', width: 240 }, children: _jsx(Card, { children: _jsxs(Stack, { gap: spacing.xs, children: [_jsx(Title, { variant: 'cardHeader', children: "Calamari" }), _jsx(Text, { variant: 'subtle', children: "Crispy. Hot. Delicious." })] }) }) }) })),
|
|
93
|
+
};
|
|
94
|
+
export const CustomOffset = {
|
|
95
|
+
render: () => (_jsxs(Group, { gap: spacing.xl, children: [_jsx(HoverAction, { variant: 'close', showBackground: true, offset: 0, onClick: () => { }, children: _jsx(SlidePreview, { label: 'offset=0' }) }), _jsx(HoverAction, { variant: 'close', showBackground: true, offset: 10, onClick: () => { }, children: _jsx(SlidePreview, { label: 'offset=10' }) }), _jsx(HoverAction, { variant: 'close', showBackground: true, offset: 20, onClick: () => { }, children: _jsx(SlidePreview, { label: 'offset=20' }) })] })),
|
|
96
|
+
};
|
|
@@ -4,5 +4,5 @@ export interface IconBadgeProps {
|
|
|
4
4
|
icon: React.ReactNode;
|
|
5
5
|
color: keyof typeof primitives;
|
|
6
6
|
}
|
|
7
|
-
export declare const IconBadge: ({ icon, color }: IconBadgeProps) =>
|
|
7
|
+
export declare const IconBadge: ({ icon, color }: IconBadgeProps) => React.JSX.Element;
|
|
8
8
|
//# sourceMappingURL=IconBadge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconBadge.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/IconBadge/IconBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,OAAO,UAAU,CAAC;CAChC;AAED,eAAO,MAAM,SAAS,GAAI,iBAAiB,cAAc,
|
|
1
|
+
{"version":3,"file":"IconBadge.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/IconBadge/IconBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,EAAE,MAAM,OAAO,UAAU,CAAC;CAChC;AAED,eAAO,MAAM,SAAS,GAAI,iBAAiB,cAAc,sBAoCxD,CAAC"}
|
|
@@ -4,25 +4,27 @@ import { primitives } from '../../../constants/colors';
|
|
|
4
4
|
export const IconBadge = ({ icon, color }) => {
|
|
5
5
|
const getIconColors = () => {
|
|
6
6
|
return {
|
|
7
|
-
background: primitives[color][
|
|
7
|
+
background: primitives[color][25],
|
|
8
8
|
icon: primitives[color][200],
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
const getIconSize = () => {
|
|
12
|
-
if (React.isValidElement(icon) &&
|
|
12
|
+
if (React.isValidElement(icon) &&
|
|
13
|
+
icon.props &&
|
|
14
|
+
typeof icon.props.size === 'number') {
|
|
13
15
|
const iconSize = icon.props.size;
|
|
14
16
|
const badgeSize = iconSize + 12;
|
|
15
17
|
return `${badgeSize}px`;
|
|
16
18
|
}
|
|
17
19
|
};
|
|
18
20
|
return (_jsx("div", { style: {
|
|
19
|
-
|
|
20
|
-
height: getIconSize(),
|
|
21
|
-
borderRadius: '50%',
|
|
21
|
+
alignItems: 'center',
|
|
22
22
|
backgroundColor: getIconColors().background,
|
|
23
|
+
borderRadius: '50%',
|
|
23
24
|
color: getIconColors().icon,
|
|
24
25
|
display: 'flex',
|
|
25
|
-
|
|
26
|
+
height: getIconSize(),
|
|
26
27
|
justifyContent: 'center',
|
|
28
|
+
width: getIconSize(),
|
|
27
29
|
}, children: icon }));
|
|
28
30
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/Image/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Image } from '@mantine/core';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { Image } from './Image';
|
|
3
|
+
declare const meta: Meta<typeof Image>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof Image>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Fits: Story;
|
|
8
|
+
export declare const Radii: Story;
|
|
9
|
+
export declare const WithPlaceholder: Story;
|
|
10
|
+
export declare const WithCaption: Story;
|
|
11
|
+
//# sourceMappingURL=Image.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/Misc/Image/Image.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,CA0B5B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC;AAEpC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAWlB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAWnB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA6B7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Image } from './Image';
|
|
3
|
+
import { Group } from '../../Layout/Group/Group';
|
|
4
|
+
import { Stack } from '../../Layout/Stack/Stack';
|
|
5
|
+
import { Text } from '../../Typography/Text/Text';
|
|
6
|
+
import { spacing } from '../../../constants/spacing';
|
|
7
|
+
const SAMPLE_SRC = 'https://images.unsplash.com/photo-1511216335778-7cb8f49fa7a3?w=600';
|
|
8
|
+
const meta = {
|
|
9
|
+
title: 'Components/Misc/Image',
|
|
10
|
+
component: Image,
|
|
11
|
+
parameters: {
|
|
12
|
+
layout: 'centered',
|
|
13
|
+
docs: {
|
|
14
|
+
description: {
|
|
15
|
+
component: 'Re-export of Mantine Image. Handles object-fit, placeholders, captions, and loading/error states. Use this instead of raw <img> so placeholder and caption behavior stays consistent.',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
argTypes: {
|
|
20
|
+
fit: {
|
|
21
|
+
control: { type: 'select' },
|
|
22
|
+
options: ['cover', 'contain', 'fill', 'none', 'scale-down'],
|
|
23
|
+
table: { defaultValue: { summary: "'cover'" } },
|
|
24
|
+
},
|
|
25
|
+
radius: {
|
|
26
|
+
control: { type: 'select' },
|
|
27
|
+
options: ['xs', 'sm', 'md', 'lg', 'xl'],
|
|
28
|
+
},
|
|
29
|
+
withPlaceholder: {
|
|
30
|
+
control: { type: 'boolean' },
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export default meta;
|
|
35
|
+
export const Default = {
|
|
36
|
+
args: {
|
|
37
|
+
src: SAMPLE_SRC,
|
|
38
|
+
alt: 'Sample',
|
|
39
|
+
width: 320,
|
|
40
|
+
height: 200,
|
|
41
|
+
fit: 'cover',
|
|
42
|
+
radius: 'md',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export const Fits = {
|
|
46
|
+
render: () => (_jsx(Group, { gap: spacing.lg, align: 'flex-start', children: ['cover', 'contain', 'fill'].map((fit) => (_jsxs(Stack, { gap: spacing.xs, align: 'center', children: [_jsx(Image, { src: SAMPLE_SRC, alt: fit, width: 180, height: 120, fit: fit, radius: 'md' }), _jsx(Text, { variant: 'label', children: fit })] }, fit))) })),
|
|
47
|
+
};
|
|
48
|
+
export const Radii = {
|
|
49
|
+
render: () => (_jsx(Group, { gap: spacing.lg, children: ['xs', 'md', 'xl'].map((radius) => (_jsxs(Stack, { gap: spacing.xs, align: 'center', children: [_jsx(Image, { src: SAMPLE_SRC, alt: radius, width: 140, height: 140, fit: 'cover', radius: radius }), _jsxs(Text, { variant: 'label', children: ["radius=", radius] })] }, radius))) })),
|
|
50
|
+
};
|
|
51
|
+
export const WithPlaceholder = {
|
|
52
|
+
parameters: {
|
|
53
|
+
docs: {
|
|
54
|
+
description: {
|
|
55
|
+
story: 'When the src fails or is missing, `withPlaceholder` renders a fallback.',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
render: () => (_jsxs(Group, { gap: spacing.lg, children: [_jsx(Image, { src: 'https://invalid.example.com/does-not-exist.jpg', alt: 'broken', width: 200, height: 140, radius: 'md', withPlaceholder: true }), _jsx(Image, { src: null, alt: 'none', width: 200, height: 140, radius: 'md', withPlaceholder: true, placeholder: _jsx(Text, { variant: 'label', children: "No image" }) })] })),
|
|
60
|
+
};
|
|
61
|
+
export const WithCaption = {
|
|
62
|
+
render: () => (_jsx(Image, { src: SAMPLE_SRC, alt: 'Ocean sunset', width: 320, height: 200, fit: 'cover', radius: 'md', caption: 'Pacific ocean, golden hour' })),
|
|
63
|
+
};
|