@studiocubics/components 0.0.1 → 0.0.2
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/Cards/Card/Card.d.ts +49 -0
- package/dist/Cards/Card/Card.js +45 -0
- package/dist/Cards/Card/Card.js.map +1 -0
- package/dist/Cards/Card/Card.module.css.js +4 -0
- package/dist/Cards/Card/Card.module.css.js.map +1 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCard.d.ts +55 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCard.js +48 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCard.js.map +1 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js +4 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js.map +1 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCardActions.d.ts +19 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js +34 -0
- package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js.map +1 -0
- package/dist/Cards/GlassCard/GlassCard.d.ts +7 -0
- package/dist/Cards/GlassCard/GlassCard.js +52 -0
- package/dist/Cards/GlassCard/GlassCard.js.map +1 -0
- package/dist/Cards/GlassCard/GlassCard.module.css.js +4 -0
- package/dist/Cards/GlassCard/GlassCard.module.css.js.map +1 -0
- package/dist/Display/Accordion/Accordion.d.ts +14 -0
- package/dist/Display/Accordion/Accordion.js +28 -0
- package/dist/Display/Accordion/Accordion.js.map +1 -0
- package/dist/Display/Accordion/Accordion.module.css.js +4 -0
- package/dist/Display/Accordion/Accordion.module.css.js.map +1 -0
- package/dist/Display/Accordion/AccordionItem.d.ts +15 -0
- package/dist/Display/Accordion/AccordionItem.js +56 -0
- package/dist/Display/Accordion/AccordionItem.js.map +1 -0
- package/dist/Display/Chip/Chip.d.ts +46 -0
- package/dist/Display/Chip/Chip.js +43 -0
- package/dist/Display/Chip/Chip.js.map +1 -0
- package/dist/Display/Chip/Chip.module.css.js +4 -0
- package/dist/Display/Chip/Chip.module.css.js.map +1 -0
- package/dist/Display/IdentityDisplay/IdentityDisplay.d.ts +21 -0
- package/dist/Display/IdentityDisplay/IdentityDisplay.js +36 -0
- package/dist/Display/IdentityDisplay/IdentityDisplay.js.map +1 -0
- package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js +4 -0
- package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js.map +1 -0
- package/dist/Display/InputErrors/InputErrors.d.ts +11 -0
- package/dist/Display/InputErrors/InputErrors.js +25 -0
- package/dist/Display/InputErrors/InputErrors.js.map +1 -0
- package/dist/Display/InputErrors/InputErrors.module.css.js +4 -0
- package/dist/Display/InputErrors/InputErrors.module.css.js.map +1 -0
- package/dist/Display/Kbd/Kbd.d.ts +8 -0
- package/dist/Display/Kbd/Kbd.js +19 -0
- package/dist/Display/Kbd/Kbd.js.map +1 -0
- package/dist/Display/Kbd/Kbd.module.css.js +4 -0
- package/dist/Display/Kbd/Kbd.module.css.js.map +1 -0
- package/dist/Display/Kbd/buttonList.d.ts +324 -0
- package/dist/Display/Kbd/buttonList.js +198 -0
- package/dist/Display/Kbd/buttonList.js.map +1 -0
- package/dist/Display/LabeledValue/LabeledValue.d.ts +9 -0
- package/dist/Display/LabeledValue/LabeledValue.js +11 -0
- package/dist/Display/LabeledValue/LabeledValue.js.map +1 -0
- package/dist/Display/LabeledValue/LabeledValue.module.css.js +4 -0
- package/dist/Display/LabeledValue/LabeledValue.module.css.js.map +1 -0
- package/dist/Display/List/List.d.ts +50 -0
- package/dist/Display/List/List.js +96 -0
- package/dist/Display/List/List.js.map +1 -0
- package/dist/Display/List/List.module.css.js +4 -0
- package/dist/Display/List/List.module.css.js.map +1 -0
- package/dist/Display/PasswordStrength/PasswordStrength.d.ts +4 -0
- package/dist/Display/PasswordStrength/PasswordStrength.js +17 -0
- package/dist/Display/PasswordStrength/PasswordStrength.js.map +1 -0
- package/dist/Display/PasswordStrength/PasswordStrength.module.css.js +4 -0
- package/dist/Display/PasswordStrength/PasswordStrength.module.css.js.map +1 -0
- package/dist/Display/PasswordStrength/usePasswordStrength.d.ts +42 -0
- package/dist/Display/PasswordStrength/usePasswordStrength.js +49 -0
- package/dist/Display/PasswordStrength/usePasswordStrength.js.map +1 -0
- package/dist/Display/Skeleton/Skeleton.d.ts +8 -0
- package/dist/Display/Skeleton/Skeleton.js +11 -0
- package/dist/Display/Skeleton/Skeleton.js.map +1 -0
- package/dist/Display/Skeleton/Skeleton.module.css.js +4 -0
- package/dist/Display/Skeleton/Skeleton.module.css.js.map +1 -0
- package/dist/Display/Toast/Toaster.d.ts +1 -0
- package/dist/Display/Toast/Toaster.js +45 -0
- package/dist/Display/Toast/Toaster.js.map +1 -0
- package/dist/Display/Toast/toast.d.ts +12 -0
- package/dist/Display/Toast/toast.js +32 -0
- package/dist/Display/Toast/toast.js.map +1 -0
- package/dist/Display/Tooltip/Tooltip.d.ts +8 -0
- package/dist/Display/Tooltip/Tooltip.js +45 -0
- package/dist/Display/Tooltip/Tooltip.js.map +1 -0
- package/dist/Display/Tooltip/Tooltip.module.css.js +4 -0
- package/dist/Display/Tooltip/Tooltip.module.css.js.map +1 -0
- package/dist/Display/Tooltip/getArrowDirection.d.ts +1 -0
- package/dist/Display/Tooltip/getArrowDirection.js +48 -0
- package/dist/Display/Tooltip/getArrowDirection.js.map +1 -0
- package/dist/Display/Tooltip/useTooltip.d.ts +8 -0
- package/dist/Display/Tooltip/useTooltip.js +48 -0
- package/dist/Display/Tooltip/useTooltip.js.map +1 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.d.ts +15 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.js +12 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.js.map +1 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js +4 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js.map +1 -0
- package/dist/Inputs/Button/Button.d.ts +83 -0
- package/dist/Inputs/Button/Button.js +56 -0
- package/dist/Inputs/Button/Button.js.map +1 -0
- package/dist/Inputs/Button/Button.module.css.js +4 -0
- package/dist/Inputs/Button/Button.module.css.js.map +1 -0
- package/dist/Inputs/Checkbox/Checkbox.d.ts +23 -0
- package/dist/Inputs/Checkbox/Checkbox.js +55 -0
- package/dist/Inputs/Checkbox/Checkbox.js.map +1 -0
- package/dist/Inputs/Checkbox/Checkbox.module.css.js +4 -0
- package/dist/Inputs/Checkbox/Checkbox.module.css.js.map +1 -0
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.d.ts +15 -0
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js +35 -0
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js.map +1 -0
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js +4 -0
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js.map +1 -0
- package/dist/Inputs/Checkbox/CheckboxSelectAll.d.ts +5 -0
- package/dist/Inputs/Checkbox/CheckboxSelectAll.js +19 -0
- package/dist/Inputs/Checkbox/CheckboxSelectAll.js.map +1 -0
- package/dist/Inputs/PasswordInput/PasswordInput.d.ts +31 -0
- package/dist/Inputs/PasswordInput/PasswordInput.js +45 -0
- package/dist/Inputs/PasswordInput/PasswordInput.js.map +1 -0
- package/dist/Inputs/PasswordInput/PasswordInput.module.css.js +4 -0
- package/dist/Inputs/PasswordInput/PasswordInput.module.css.js.map +1 -0
- package/dist/Inputs/Select/Select.d.ts +22 -0
- package/dist/Inputs/Select/Select.js +26 -0
- package/dist/Inputs/Select/Select.js.map +1 -0
- package/dist/Inputs/Select/Select.module.css.js +4 -0
- package/dist/Inputs/Select/Select.module.css.js.map +1 -0
- package/dist/Inputs/Switch/Switch.d.ts +43 -0
- package/dist/Inputs/Switch/Switch.js +81 -0
- package/dist/Inputs/Switch/Switch.js.map +1 -0
- package/dist/Inputs/Switch/Switch.module.css.js +4 -0
- package/dist/Inputs/Switch/Switch.module.css.js.map +1 -0
- package/dist/Inputs/TextAreaInput/TextAreaInput.d.ts +17 -0
- package/dist/Inputs/TextAreaInput/TextAreaInput.js +30 -0
- package/dist/Inputs/TextAreaInput/TextAreaInput.js.map +1 -0
- package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js +4 -0
- package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js.map +1 -0
- package/dist/Inputs/TextInput/TextInput.d.ts +27 -0
- package/dist/Inputs/TextInput/TextInput.js +23 -0
- package/dist/Inputs/TextInput/TextInput.js.map +1 -0
- package/dist/Inputs/TextInput/TextInput.module.css.js +4 -0
- package/dist/Inputs/TextInput/TextInput.module.css.js.map +1 -0
- package/dist/Inputs/ThemeToggle/ThemeToggleListItem.d.ts +16 -0
- package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js +31 -0
- package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js.map +1 -0
- package/dist/Inputs/ThemeToggle/_index.d.ts +1 -0
- package/dist/Layout/Dialog/Dialog.d.ts +13 -0
- package/dist/Layout/Dialog/Dialog.js +74 -0
- package/dist/Layout/Dialog/Dialog.js.map +1 -0
- package/dist/Layout/Dialog/Dialog.module.css.js +4 -0
- package/dist/Layout/Dialog/Dialog.module.css.js.map +1 -0
- package/dist/Layout/PageLayout/PageLayout.d.ts +28 -0
- package/dist/Layout/PageLayout/PageLayout.js +25 -0
- package/dist/Layout/PageLayout/PageLayout.js.map +1 -0
- package/dist/Layout/PageLayout/PageLayout.module.css.js +4 -0
- package/dist/Layout/PageLayout/PageLayout.module.css.js.map +1 -0
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.d.ts +7 -0
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js +13 -0
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js.map +1 -0
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js +4 -0
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js.map +1 -0
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.d.ts +14 -0
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js +22 -0
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js.map +1 -0
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js +4 -0
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js.map +1 -0
- package/dist/Layout/Popover/Popover.d.ts +14 -0
- package/dist/Layout/Popover/Popover.js +103 -0
- package/dist/Layout/Popover/Popover.js.map +1 -0
- package/dist/Layout/Popover/Popover.module.css.js +4 -0
- package/dist/Layout/Popover/Popover.module.css.js.map +1 -0
- package/dist/Layout/SectionWrapper/SectionWrapper.d.ts +14 -0
- package/dist/Layout/SectionWrapper/SectionWrapper.js +11 -0
- package/dist/Layout/SectionWrapper/SectionWrapper.js.map +1 -0
- package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js +4 -0
- package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js.map +1 -0
- package/dist/Layout/Sidebar/Sidebar.d.ts +15 -0
- package/dist/Layout/Sidebar/Sidebar.js +25 -0
- package/dist/Layout/Sidebar/Sidebar.js.map +1 -0
- package/dist/Layout/Sidebar/Sidebar.module.css.js +4 -0
- package/dist/Layout/Sidebar/Sidebar.module.css.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.d.ts +2 -0
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js +14 -0
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js +4 -0
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.d.ts +2 -0
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js +14 -0
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js +4 -0
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.d.ts +2 -0
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js +14 -0
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js +4 -0
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.d.ts +2 -0
- package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js +12 -0
- package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.d.ts +2 -0
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js +11 -0
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js.map +1 -0
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js +4 -0
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js.map +1 -0
- package/dist/Layout/Table/Table.d.ts +54 -0
- package/dist/Layout/Table/Table.js +131 -0
- package/dist/Layout/Table/Table.js.map +1 -0
- package/dist/Layout/Table/Table.module.css.js +4 -0
- package/dist/Layout/Table/Table.module.css.js.map +1 -0
- package/dist/Layout/Table/TableFooter.d.ts +1 -0
- package/dist/Layout/Table/TableFooter.js +9 -0
- package/dist/Layout/Table/TableFooter.js.map +1 -0
- package/dist/Layout/Table/TableHeader.d.ts +1 -0
- package/dist/Layout/Table/TableHeader.js +9 -0
- package/dist/Layout/Table/TableHeader.js.map +1 -0
- package/dist/Layout/Table/tableUtils.d.ts +52 -0
- package/dist/Layout/Table/tableUtils.js +124 -0
- package/dist/Layout/Table/tableUtils.js.map +1 -0
- package/dist/Layout/Table/types.d.ts +43 -0
- package/dist/Misc/Cursor/Cursor.d.ts +1 -0
- package/dist/Misc/Cursor/Cursor.js +59 -0
- package/dist/Misc/Cursor/Cursor.js.map +1 -0
- package/dist/Misc/Cursor/Cursor.module.css.js +4 -0
- package/dist/Misc/Cursor/Cursor.module.css.js.map +1 -0
- package/dist/Misc/Logos.d.ts +14 -0
- package/dist/Misc/Logos.js +29 -0
- package/dist/Misc/Logos.js.map +1 -0
- package/dist/Misc/PoweredByBanner/PoweredByBanner.d.ts +3 -0
- package/dist/Misc/PoweredByBanner/PoweredByBanner.js +11 -0
- package/dist/Misc/PoweredByBanner/PoweredByBanner.js.map +1 -0
- package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js +4 -0
- package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js.map +1 -0
- package/dist/Misc/Ripple/Ripple.d.ts +21 -0
- package/dist/Misc/Ripple/Ripple.js +62 -0
- package/dist/Misc/Ripple/Ripple.js.map +1 -0
- package/dist/Misc/Ripple/Ripple.module.css.js +4 -0
- package/dist/Misc/Ripple/Ripple.module.css.js.map +1 -0
- package/dist/Misc/Spinner/Spinner.d.ts +2 -0
- package/dist/Misc/Spinner/Spinner.js +12 -0
- package/dist/Misc/Spinner/Spinner.js.map +1 -0
- package/dist/Misc/Spinner/Spinner.module.css.js +4 -0
- package/dist/Misc/Spinner/Spinner.module.css.js.map +1 -0
- package/dist/Misc/TransitionAnimation/TransitionAnimation.d.ts +71 -0
- package/dist/Misc/TransitionAnimation/TransitionAnimation.js +87 -0
- package/dist/Misc/TransitionAnimation/TransitionAnimation.js.map +1 -0
- package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js +4 -0
- package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js.map +1 -0
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.d.ts +39 -0
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.js +36 -0
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js +4 -0
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js.map +1 -0
- package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.d.ts +10 -0
- package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js +15 -0
- package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js.map +1 -0
- package/dist/Navigation/Breadcrumbs/useBreadcrumbs.d.ts +7 -0
- package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js +44 -0
- package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js.map +1 -0
- package/dist/Navigation/Pagination/Pagination.d.ts +52 -0
- package/dist/Navigation/Pagination/Pagination.js +61 -0
- package/dist/Navigation/Pagination/Pagination.js.map +1 -0
- package/dist/Navigation/Pagination/Pagination.module.css.js +4 -0
- package/dist/Navigation/Pagination/Pagination.module.css.js.map +1 -0
- package/dist/Navigation/Pagination/PaginationItem.d.ts +8 -0
- package/dist/Navigation/Pagination/PaginationItem.js +14 -0
- package/dist/Navigation/Pagination/PaginationItem.js.map +1 -0
- package/dist/Navigation/Pagination/usePagination.d.ts +6 -0
- package/dist/Navigation/Pagination/usePagination.js +38 -0
- package/dist/Navigation/Pagination/usePagination.js.map +1 -0
- package/dist/Navigation/Tabs/Tab/Tab.d.ts +46 -0
- package/dist/Navigation/Tabs/Tab/Tab.js +70 -0
- package/dist/Navigation/Tabs/Tab/Tab.js.map +1 -0
- package/dist/Navigation/Tabs/Tab/Tab.module.css.js +4 -0
- package/dist/Navigation/Tabs/Tab/Tab.module.css.js.map +1 -0
- package/dist/Navigation/Tabs/Tabs.d.ts +12 -0
- package/dist/Navigation/Tabs/Tabs.js +22 -0
- package/dist/Navigation/Tabs/Tabs.js.map +1 -0
- package/dist/Navigation/Tabs/TabsBar/TabsBar.d.ts +12 -0
- package/dist/Navigation/Tabs/TabsBar/TabsBar.js +44 -0
- package/dist/Navigation/Tabs/TabsBar/TabsBar.js.map +1 -0
- package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js +4 -0
- package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js.map +1 -0
- package/dist/Typography/ClampedText/ClampedText.d.ts +38 -0
- package/dist/Typography/ClampedText/ClampedText.js +44 -0
- package/dist/Typography/ClampedText/ClampedText.js.map +1 -0
- package/dist/Typography/ClampedText/ClampedText.module.css.js +4 -0
- package/dist/Typography/ClampedText/ClampedText.module.css.js.map +1 -0
- package/dist/Typography/CopyableText/CopyableText.d.ts +16 -0
- package/dist/Typography/CopyableText/CopyableText.js +39 -0
- package/dist/Typography/CopyableText/CopyableText.js.map +1 -0
- package/dist/Typography/CopyableText/CopyableText.module.css.js +4 -0
- package/dist/Typography/CopyableText/CopyableText.module.css.js.map +1 -0
- package/dist/Typography/PageTitle/PageTitle.d.ts +9 -0
- package/dist/Typography/PageTitle/PageTitle.js +10 -0
- package/dist/Typography/PageTitle/PageTitle.js.map +1 -0
- package/dist/Typography/PageTitle/PageTitle.module.css.js +4 -0
- package/dist/Typography/PageTitle/PageTitle.module.css.js.map +1 -0
- package/dist/index.css +2392 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/package.json +4 -4
- package/CHANGELOG.md +0 -11
- package/eslint.config.js +0 -21
- package/src/Cards/Card/Card.module.css +0 -27
- package/src/Cards/Card/Card.tsx +0 -105
- package/src/Cards/CollectionItemCard/CollectionItemCard.module.css +0 -84
- package/src/Cards/CollectionItemCard/CollectionItemCard.tsx +0 -170
- package/src/Cards/CollectionItemCard/CollectionItemCardActions.tsx +0 -85
- package/src/Cards/GlassCard/GlassCard.module.css +0 -71
- package/src/Cards/GlassCard/GlassCard.tsx +0 -80
- package/src/Display/Accordion/Accordion.module.css +0 -69
- package/src/Display/Accordion/Accordion.tsx +0 -61
- package/src/Display/Accordion/AccordionItem.tsx +0 -135
- package/src/Display/Chip/Chip.module.css +0 -64
- package/src/Display/Chip/Chip.tsx +0 -105
- package/src/Display/IdentityDisplay/IdentityDisplay.module.css +0 -95
- package/src/Display/IdentityDisplay/IdentityDisplay.tsx +0 -119
- package/src/Display/InputErrors/InputErrors.module.css +0 -6
- package/src/Display/InputErrors/InputErrors.tsx +0 -52
- package/src/Display/Kbd/Kbd.module.css +0 -29
- package/src/Display/Kbd/Kbd.tsx +0 -39
- package/src/Display/Kbd/buttonList.tsx +0 -246
- package/src/Display/LabeledValue/LabeledValue.module.css +0 -32
- package/src/Display/LabeledValue/LabeledValue.tsx +0 -20
- package/src/Display/List/List.module.css +0 -143
- package/src/Display/List/List.tsx +0 -298
- package/src/Display/PasswordStrength/PasswordStrength.module.css +0 -45
- package/src/Display/PasswordStrength/PasswordStrength.tsx +0 -41
- package/src/Display/PasswordStrength/usePasswordStrength.tsx +0 -77
- package/src/Display/Skeleton/Skeleton.module.css +0 -54
- package/src/Display/Skeleton/Skeleton.tsx +0 -28
- package/src/Display/Toast/Toaster.tsx +0 -58
- package/src/Display/Toast/toast.ts +0 -44
- package/src/Display/Tooltip/Tooltip.module.css +0 -128
- package/src/Display/Tooltip/Tooltip.tsx +0 -93
- package/src/Display/Tooltip/getArrowDirection.ts +0 -55
- package/src/Display/Tooltip/useTooltip.tsx +0 -63
- package/src/Forms/ConfirmationForm/ConfirmationForm.module.css +0 -23
- package/src/Forms/ConfirmationForm/ConfirmationForm.tsx +0 -60
- package/src/Inputs/Button/Button.module.css +0 -131
- package/src/Inputs/Button/Button.tsx +0 -178
- package/src/Inputs/Checkbox/Checkbox.module.css +0 -77
- package/src/Inputs/Checkbox/Checkbox.tsx +0 -191
- package/src/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css +0 -10
- package/src/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.tsx +0 -83
- package/src/Inputs/Checkbox/CheckboxSelectAll.tsx +0 -34
- package/src/Inputs/PasswordInput/PasswordInput.module.css +0 -111
- package/src/Inputs/PasswordInput/PasswordInput.tsx +0 -229
- package/src/Inputs/Select/Select.module.css +0 -138
- package/src/Inputs/Select/Select.tsx +0 -136
- package/src/Inputs/Switch/Switch.module.css +0 -119
- package/src/Inputs/Switch/Switch.tsx +0 -195
- package/src/Inputs/TextAreaInput/TextAreaInput.module.css +0 -65
- package/src/Inputs/TextAreaInput/TextAreaInput.tsx +0 -97
- package/src/Inputs/TextInput/TextInput.module.css +0 -112
- package/src/Inputs/TextInput/TextInput.tsx +0 -142
- package/src/Inputs/ThemeToggle/ThemeToggleListItem.tsx +0 -80
- package/src/Inputs/ThemeToggle/_index.ts +0 -1
- package/src/Layout/Dialog/Dialog.module.css +0 -15
- package/src/Layout/Dialog/Dialog.tsx +0 -115
- package/src/Layout/PageLayout/PageLayout.module.css +0 -20
- package/src/Layout/PageLayout/PageLayout.tsx +0 -79
- package/src/Layout/PageLayoutPagination/PageLayoutPagination.module.css +0 -5
- package/src/Layout/PageLayoutPagination/PageLayoutPagination.tsx +0 -40
- package/src/Layout/PageLayoutTabs/PageLayoutTabs.module.css +0 -3
- package/src/Layout/PageLayoutTabs/PageLayoutTabs.tsx +0 -62
- package/src/Layout/Popover/Popover.module.css +0 -9
- package/src/Layout/Popover/Popover.tsx +0 -145
- package/src/Layout/SectionWrapper/SectionWrapper.module.css +0 -31
- package/src/Layout/SectionWrapper/SectionWrapper.tsx +0 -62
- package/src/Layout/Sidebar/Sidebar.module.css +0 -17
- package/src/Layout/Sidebar/Sidebar.tsx +0 -39
- package/src/Layout/Sidebar/SidebarBody/SidebarBody.module.css +0 -31
- package/src/Layout/Sidebar/SidebarBody/SidebarBody.tsx +0 -18
- package/src/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css +0 -20
- package/src/Layout/Sidebar/SidebarDrawer/SidebarDrawer.tsx +0 -19
- package/src/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css +0 -35
- package/src/Layout/Sidebar/SidebarFooter/SidebarFooter.tsx +0 -19
- package/src/Layout/Sidebar/SidebarHeader/SidebarHeader.tsx +0 -14
- package/src/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css +0 -12
- package/src/Layout/Sidebar/SidebarViewport/SidebarViewport.tsx +0 -11
- package/src/Layout/Table/Table.module.css +0 -46
- package/src/Layout/Table/Table.tsx +0 -222
- package/src/Layout/Table/TableFooter.tsx +0 -4
- package/src/Layout/Table/TableHeader.tsx +0 -4
- package/src/Layout/Table/tableUtils.ts +0 -142
- package/src/Layout/Table/types.ts +0 -48
- package/src/Misc/Cursor/Cursor.module.css +0 -31
- package/src/Misc/Cursor/Cursor.tsx +0 -77
- package/src/Misc/Logos.tsx +0 -230
- package/src/Misc/PoweredByBanner/PoweredByBanner.module.css +0 -20
- package/src/Misc/PoweredByBanner/PoweredByBanner.tsx +0 -17
- package/src/Misc/Ripple/Ripple.module.css +0 -25
- package/src/Misc/Ripple/Ripple.tsx +0 -126
- package/src/Misc/Spinner/Spinner.module.css +0 -38
- package/src/Misc/Spinner/Spinner.tsx +0 -36
- package/src/Misc/TransitionAnimation/TransitionAnimation.module.css +0 -131
- package/src/Misc/TransitionAnimation/TransitionAnimation.tsx +0 -166
- package/src/Navigation/Breadcrumbs/Breadcrumbs.module.css +0 -22
- package/src/Navigation/Breadcrumbs/Breadcrumbs.tsx +0 -127
- package/src/Navigation/Breadcrumbs/BreadcrumbsItem.tsx +0 -31
- package/src/Navigation/Breadcrumbs/useBreadcrumbs.tsx +0 -74
- package/src/Navigation/Pagination/Pagination.module.css +0 -41
- package/src/Navigation/Pagination/Pagination.tsx +0 -187
- package/src/Navigation/Pagination/PaginationItem.tsx +0 -28
- package/src/Navigation/Pagination/usePagination.tsx +0 -65
- package/src/Navigation/Tabs/Tab/Tab.module.css +0 -43
- package/src/Navigation/Tabs/Tab/Tab.tsx +0 -155
- package/src/Navigation/Tabs/Tabs.tsx +0 -37
- package/src/Navigation/Tabs/TabsBar/TabsBar.module.css +0 -47
- package/src/Navigation/Tabs/TabsBar/TabsBar.tsx +0 -92
- package/src/Typography/ClampedText/ClampedText.module.css +0 -5
- package/src/Typography/ClampedText/ClampedText.tsx +0 -77
- package/src/Typography/CopyableText/CopyableText.module.css +0 -21
- package/src/Typography/CopyableText/CopyableText.tsx +0 -120
- package/src/Typography/PageTitle/PageTitle.module.css +0 -47
- package/src/Typography/PageTitle/PageTitle.tsx +0 -35
- package/src/declaration.d.ts +0 -4
- package/tsconfig.json +0 -32
- /package/{src/Cards/CollectionItemCard/_index.ts → dist/Cards/CollectionItemCard/_index.d.ts} +0 -0
- /package/{src/Cards/_index.ts → dist/Cards/_index.d.ts} +0 -0
- /package/{src/Display/Accordion/_index.ts → dist/Display/Accordion/_index.d.ts} +0 -0
- /package/{src/Display/Kbd/_index.ts → dist/Display/Kbd/_index.d.ts} +0 -0
- /package/{src/Display/Toast/_index.ts → dist/Display/Toast/_index.d.ts} +0 -0
- /package/{src/Display/_index.ts → dist/Display/_index.d.ts} +0 -0
- /package/{src/Forms/_index.ts → dist/Forms/_index.d.ts} +0 -0
- /package/{src/Inputs/Checkbox/_index.ts → dist/Inputs/Checkbox/_index.d.ts} +0 -0
- /package/{src/Inputs/_index.ts → dist/Inputs/_index.d.ts} +0 -0
- /package/{src/Layout/Sidebar/_index.ts → dist/Layout/Sidebar/_index.d.ts} +0 -0
- /package/{src/Layout/Table/_index.ts → dist/Layout/Table/_index.d.ts} +0 -0
- /package/{src/Layout/_index.ts → dist/Layout/_index.d.ts} +0 -0
- /package/{src/Misc/_index.ts → dist/Misc/_index.d.ts} +0 -0
- /package/{src/Navigation/Breadcrumbs/_index.ts → dist/Navigation/Breadcrumbs/_index.d.ts} +0 -0
- /package/{src/Navigation/Pagination/_index.ts → dist/Navigation/Pagination/_index.d.ts} +0 -0
- /package/{src/Navigation/Tabs/_index.ts → dist/Navigation/Tabs/_index.d.ts} +0 -0
- /package/{src/Navigation/_index.ts → dist/Navigation/_index.d.ts} +0 -0
- /package/{src/Typography/_index.ts → dist/Typography/_index.d.ts} +0 -0
- /package/{src/index.ts → dist/index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePasswordStrength.js","sources":["../../../src/Display/PasswordStrength/usePasswordStrength.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nexport const PASSWORD_REGEX = {\n ASCII_NO_SPACE: { ex: /^[!-~]+$/, score: 0.5 },\n LOWERCASE: { ex: /[a-z]/, score: 0.5 },\n UPPERCASE: { ex: /[A-Z]/, score: 1 },\n DIGIT: { ex: /\\d/, score: 1 },\n SPECIAL: { ex: /[!@#$%^&*()_\\-+=\\[\\]{};:'\",.<>/?\\\\|`~]/, score: 1 },\n NO_TRIPLE_REPEAT: { ex: /^(?!.*(.)\\1\\1).*$/, score: 1 },\n} as const;\n\nexport type PasswordTest = keyof typeof PASSWORD_REGEX;\n\nexport const ALL_PASSWORD_TESTS: PasswordTest[] = [\n \"ASCII_NO_SPACE\",\n \"DIGIT\",\n \"LOWERCASE\",\n \"NO_TRIPLE_REPEAT\",\n \"SPECIAL\",\n \"UPPERCASE\",\n];\nexport interface PasswordStrengthProps {\n password?: string;\n requiredTests?: PasswordTest[];\n disableStrengthMeter?: boolean;\n /**\n * Minimum length of the password when it should start checking,\n * before reaching the minimum length the strength will always be 1\n */\n minLength?: number;\n}\n\nexport function usePasswordStrength({\n password,\n requiredTests = [],\n disableStrengthMeter = true,\n minLength = 8,\n}: PasswordStrengthProps) {\n const [strength, setStrength] = useState<number | null>(null);\n const [testsPassed, setPassed] = useState<PasswordTest[]>([]);\n\n useEffect(() => {\n if (!password) {\n setStrength(null);\n setPassed([]);\n return;\n }\n\n const results: PasswordTest[] = [];\n\n for (const [key, regex] of Object.entries(PASSWORD_REGEX)) {\n if (regex.ex.test(password)) results.push(key as PasswordTest);\n }\n\n setPassed(results);\n\n // REQUIRED TESTS GATE\n const allRequiredPassed = results.every((test) =>\n requiredTests.includes(test),\n );\n\n if (!allRequiredPassed || password.length < minLength) {\n setStrength(1); // Weak\n return;\n }\n\n // Otherwise score by total passed tests\n const totalScore = Object.entries(PASSWORD_REGEX).reduce(\n (acc, [key, value]) =>\n results.includes(key as PasswordTest) ? acc + value.score : acc,\n 0,\n );\n setStrength(totalScore);\n }, [password, requiredTests]);\n\n if (!disableStrengthMeter) return { strength, testsPassed };\n}\n"],"names":[],"mappings":";;AAEO,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9C,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IACtC,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;IACpC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;IAC7B,OAAO,EAAE,EAAE,EAAE,EAAE,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnE,gBAAgB,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;;AAKlD,MAAM,kBAAkB,GAAmB;IAChD,gBAAgB;IAChB,OAAO;IACP,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,WAAW;;SAaG,mBAAmB,CAAC,EAClC,QAAQ,EACR,aAAa,GAAG,EAAE,EAClB,oBAAoB,GAAG,IAAI,EAC3B,SAAS,GAAG,CAAC,GACS,EAAA;IACtB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IAC7D,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC;IAE7D,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,QAAQ,EAAE;YACb,WAAW,CAAC,IAAI,CAAC;YACjB,SAAS,CAAC,EAAE,CAAC;YACb;QACF;QAEA,MAAM,OAAO,GAAmB,EAAE;AAElC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACzD,YAAA,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAmB,CAAC;QAChE;QAEA,SAAS,CAAC,OAAO,CAAC;;AAGlB,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAC3C,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7B;QAED,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE;AACrD,YAAA,WAAW,CAAC,CAAC,CAAC,CAAC;YACf;QACF;;AAGA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CACtD,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAChB,OAAO,CAAC,QAAQ,CAAC,GAAmB,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,EACjE,CAAC,CACF;QACD,WAAW,CAAC,UAAU,CAAC;AACzB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE7B,IAAA,IAAI,CAAC,oBAAoB;AAAE,QAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC7D;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentProps, CSSProperties } from "react";
|
|
2
|
+
export interface SkeletonProps extends ComponentProps<"span"> {
|
|
3
|
+
type?: "text" | "card";
|
|
4
|
+
size?: "small" | "medium" | "large";
|
|
5
|
+
width?: CSSProperties["width"];
|
|
6
|
+
height?: CSSProperties["height"];
|
|
7
|
+
}
|
|
8
|
+
export declare function Skeleton(props: SkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import styles from './Skeleton.module.css.js';
|
|
3
|
+
import { cn } from '@studiocubics/utils';
|
|
4
|
+
|
|
5
|
+
function Skeleton(props) {
|
|
6
|
+
const { className, style, type = "text", size = "medium", width = "100%", height = "1.5em", ...rest } = props;
|
|
7
|
+
return (jsx("span", { className: cn(className, styles.root, styles[size], styles[type]), style: { width, height, ...style }, ...rest }));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { Skeleton };
|
|
11
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../../src/Display/Skeleton/Skeleton.tsx"],"sourcesContent":["import type { ComponentProps, CSSProperties } from \"react\";\nimport styles from \"./Skeleton.module.css\";\nimport { cn } from \"@studiocubics/utils\";\nexport interface SkeletonProps extends ComponentProps<\"span\"> {\n type?: \"text\" | \"card\";\n size?: \"small\" | \"medium\" | \"large\";\n width?: CSSProperties[\"width\"];\n height?: CSSProperties[\"height\"];\n}\n\nexport function Skeleton(props: SkeletonProps) {\n const {\n className,\n style,\n type = \"text\",\n size = \"medium\",\n width = \"100%\",\n height = \"1.5em\",\n ...rest\n } = props;\n return (\n <span\n className={cn(className, styles.root, styles[size], styles[type])}\n style={{ width, height, ...style }}\n {...rest}\n ></span>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AAUM,SAAU,QAAQ,CAAC,KAAoB,EAAA;IAC3C,MAAM,EACJ,SAAS,EACT,KAAK,EACL,IAAI,GAAG,MAAM,EACb,IAAI,GAAG,QAAQ,EACf,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,OAAO,EAChB,GAAG,IAAI,EACR,GAAG,KAAK;AACT,IAAA,QACEA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EACjE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAC9B,IAAI,EAAA,CACF;AAEZ;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var styles = {"root":"Skeleton-module_root__Ft3Ey","throb":"Skeleton-module_throb__SxiMC","large":"Skeleton-module_large__LnDji","medium":"Skeleton-module_medium__LjhY7","small":"Skeleton-module_small__j9Re2","wave":"Skeleton-module_wave__mC2od"};
|
|
2
|
+
|
|
3
|
+
export { styles as default };
|
|
4
|
+
//# sourceMappingURL=Skeleton.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Toaster(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { subscribe, dismiss } from './toast.js';
|
|
5
|
+
|
|
6
|
+
function Toaster() {
|
|
7
|
+
const [toasts, setToasts] = useState([]);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
return () => {
|
|
10
|
+
subscribe(setToasts);
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
if (toasts.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
return (jsx("div", { style: containerStyle, children: toasts.map((t) => (jsxs("div", { style: toastStyle, children: [jsx("span", { children: t.message }), jsx("button", { onClick: () => dismiss(t.id), style: closeStyle, children: "\u00D7" })] }, t.id))) }));
|
|
16
|
+
}
|
|
17
|
+
const containerStyle = {
|
|
18
|
+
position: "fixed",
|
|
19
|
+
top: 16,
|
|
20
|
+
right: 16,
|
|
21
|
+
display: "flex",
|
|
22
|
+
flexDirection: "column",
|
|
23
|
+
gap: 8,
|
|
24
|
+
zIndex: 1000,
|
|
25
|
+
};
|
|
26
|
+
const toastStyle = {
|
|
27
|
+
background: "#111",
|
|
28
|
+
color: "#fff",
|
|
29
|
+
padding: "12px 16px",
|
|
30
|
+
borderRadius: 6,
|
|
31
|
+
minWidth: 200,
|
|
32
|
+
display: "flex",
|
|
33
|
+
justifyContent: "space-between",
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
};
|
|
36
|
+
const closeStyle = {
|
|
37
|
+
background: "transparent",
|
|
38
|
+
border: "none",
|
|
39
|
+
color: "#fff",
|
|
40
|
+
fontSize: 16,
|
|
41
|
+
cursor: "pointer",
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export { Toaster };
|
|
45
|
+
//# sourceMappingURL=Toaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toaster.js","sources":["../../../src/Display/Toast/Toaster.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { subscribe, dismiss, type Toast } from \"./toast\";\n\nexport function Toaster() {\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n useEffect(() => {\n return () => {\n subscribe(setToasts);\n };\n }, []);\n\n if (toasts.length === 0) return null;\n\n return (\n <div style={containerStyle}>\n {toasts.map((t) => (\n <div key={t.id} style={toastStyle}>\n <span>{t.message}</span>\n <button onClick={() => dismiss(t.id)} style={closeStyle}>\n ×\n </button>\n </div>\n ))}\n </div>\n );\n}\n\nconst containerStyle: React.CSSProperties = {\n position: \"fixed\",\n top: 16,\n right: 16,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n zIndex: 1000,\n};\n\nconst toastStyle: React.CSSProperties = {\n background: \"#111\",\n color: \"#fff\",\n padding: \"12px 16px\",\n borderRadius: 6,\n minWidth: 200,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n};\n\nconst closeStyle: React.CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n color: \"#fff\",\n fontSize: 16,\n cursor: \"pointer\",\n};\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type Toast = {
|
|
2
|
+
id: string;
|
|
3
|
+
message: string;
|
|
4
|
+
duration?: number;
|
|
5
|
+
};
|
|
6
|
+
type Listener = (toasts: Toast[]) => void;
|
|
7
|
+
export declare function subscribe(listener: Listener): () => boolean;
|
|
8
|
+
export declare function toast(message: string, options?: {
|
|
9
|
+
duration?: number;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function dismiss(id: string): void;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
let toasts = [];
|
|
2
|
+
const listeners = new Set();
|
|
3
|
+
function emit() {
|
|
4
|
+
listeners.forEach((l) => l(toasts));
|
|
5
|
+
}
|
|
6
|
+
function subscribe(listener) {
|
|
7
|
+
listeners.add(listener);
|
|
8
|
+
return () => listeners.delete(listener);
|
|
9
|
+
}
|
|
10
|
+
function toast(message, options) {
|
|
11
|
+
const id = crypto.randomUUID();
|
|
12
|
+
const t = {
|
|
13
|
+
id,
|
|
14
|
+
message,
|
|
15
|
+
duration: options?.duration ?? 3000,
|
|
16
|
+
};
|
|
17
|
+
toasts = [...toasts, t];
|
|
18
|
+
emit();
|
|
19
|
+
// Its a toast not a lecture!
|
|
20
|
+
if (t.duration <= 20000) {
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
dismiss(id);
|
|
23
|
+
}, t.duration);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function dismiss(id) {
|
|
27
|
+
toasts = toasts.filter((t) => t.id !== id);
|
|
28
|
+
emit();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { dismiss, subscribe, toast };
|
|
32
|
+
//# sourceMappingURL=toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","sources":["../../../src/Display/Toast/toast.ts"],"sourcesContent":["export type Toast = {\n id: string;\n message: string;\n duration?: number;\n};\n\ntype Listener = (toasts: Toast[]) => void;\n\nlet toasts: Toast[] = [];\nconst listeners = new Set<Listener>();\n\nfunction emit() {\n listeners.forEach((l) => l(toasts));\n}\n\nexport function subscribe(listener: Listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function toast(message: string, options?: { duration?: number }) {\n const id = crypto.randomUUID();\n\n const t: Required<Toast> = {\n id,\n message,\n duration: options?.duration ?? 3000,\n };\n\n toasts = [...toasts, t];\n emit();\n\n // Its a toast not a lecture!\n if (t.duration <= 20000) {\n setTimeout(() => {\n dismiss(id);\n }, t.duration);\n }\n}\n\nexport function dismiss(id: string) {\n toasts = toasts.filter((t) => t.id !== id);\n emit();\n}\n"],"names":[],"mappings":"AAQA,IAAI,MAAM,GAAY,EAAE;AACxB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY;AAErC,SAAS,IAAI,GAAA;AACX,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACrC;AAEM,SAAU,SAAS,CAAC,QAAkB,EAAA;AAC1C,IAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvB,OAAO,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzC;AAEM,SAAU,KAAK,CAAC,OAAe,EAAE,OAA+B,EAAA;AACpE,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;AAE9B,IAAA,MAAM,CAAC,GAAoB;QACzB,EAAE;QACF,OAAO;AACP,QAAA,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI;KACpC;AAED,IAAA,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;AACvB,IAAA,IAAI,EAAE;;AAGN,IAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,EAAE;QACvB,UAAU,CAAC,MAAK;YACd,OAAO,CAAC,EAAE,CAAC;AACb,QAAA,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;IAChB;AACF;AAEM,SAAU,OAAO,CAAC,EAAU,EAAA;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC1C,IAAA,IAAI,EAAE;AACR;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import { type SafePositionOptions } from "@studiocubics/utils";
|
|
3
|
+
export interface TooltipProps extends SafePositionOptions {
|
|
4
|
+
title?: ReactNode;
|
|
5
|
+
renderArrow?: boolean;
|
|
6
|
+
children: ReactElement;
|
|
7
|
+
}
|
|
8
|
+
export declare function Tooltip({ title, children, renderArrow, anchorOrigin, transformOrigin, margin, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useMemo, Children, useEffect, isValidElement, cloneElement } from 'react';
|
|
4
|
+
import { createPortal } from 'react-dom';
|
|
5
|
+
import { useTooltip } from './useTooltip.js';
|
|
6
|
+
import styles from './Tooltip.module.css.js';
|
|
7
|
+
import getArrowDirection from './getArrowDirection.js';
|
|
8
|
+
import { cn } from '@studiocubics/utils';
|
|
9
|
+
|
|
10
|
+
function Tooltip({ title, children, renderArrow = false, anchorOrigin, transformOrigin, margin, }) {
|
|
11
|
+
const options = useMemo(() => {
|
|
12
|
+
return {
|
|
13
|
+
anchorOrigin: anchorOrigin ?? "bottom center",
|
|
14
|
+
transformOrigin: transformOrigin ?? "top center",
|
|
15
|
+
margin: margin ?? 8,
|
|
16
|
+
};
|
|
17
|
+
}, [anchorOrigin, transformOrigin, margin]);
|
|
18
|
+
const { anchorRef, showTooltip, tooltipRef, position, updatePosition } = useTooltip(options);
|
|
19
|
+
const direction = renderArrow
|
|
20
|
+
? getArrowDirection(anchorOrigin ?? "bottom center", transformOrigin ?? "top center")
|
|
21
|
+
: null;
|
|
22
|
+
// Ensure only one child is passed
|
|
23
|
+
const child = Children.only(children);
|
|
24
|
+
const childWithRef = () => {
|
|
25
|
+
if (isValidElement(child))
|
|
26
|
+
return cloneElement(child, { ref: anchorRef });
|
|
27
|
+
else {
|
|
28
|
+
throw new Error("Children passed to Tooltip should be a valid react element");
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (showTooltip)
|
|
33
|
+
updatePosition();
|
|
34
|
+
}, [title, showTooltip, updatePosition]);
|
|
35
|
+
if (!title)
|
|
36
|
+
return child;
|
|
37
|
+
return (jsxs(Fragment, { children: [showTooltip &&
|
|
38
|
+
createPortal(jsx("div", { className: cn(styles.root, renderArrow && direction ? styles[`arrow-${direction}`] : ""), ref: tooltipRef, style: {
|
|
39
|
+
left: `${position.x}px`,
|
|
40
|
+
top: `${position.y}px`,
|
|
41
|
+
}, children: title }), document.body), childWithRef()] }));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { Tooltip };
|
|
45
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../../src/Display/Tooltip/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useMemo,\n type ReactElement,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTooltip } from \"./useTooltip\";\nimport styles from \"./Tooltip.module.css\";\nimport getArrowDirection from \"./getArrowDirection\";\nimport { cn, type SafePositionOptions } from \"@studiocubics/utils\";\n\nexport interface TooltipProps extends SafePositionOptions {\n title?: ReactNode;\n renderArrow?: boolean;\n children: ReactElement;\n}\n\nexport function Tooltip({\n title,\n children,\n renderArrow = false,\n anchorOrigin,\n transformOrigin,\n margin,\n}: TooltipProps) {\n const options = useMemo(() => {\n return {\n anchorOrigin: anchorOrigin ?? \"bottom center\",\n transformOrigin: transformOrigin ?? \"top center\",\n margin: margin ?? 8,\n };\n }, [anchorOrigin, transformOrigin, margin]);\n const { anchorRef, showTooltip, tooltipRef, position, updatePosition } =\n useTooltip(options);\n\n const direction = renderArrow\n ? getArrowDirection(\n anchorOrigin ?? \"bottom center\",\n transformOrigin ?? \"top center\"\n )\n : null;\n\n // Ensure only one child is passed\n const child = Children.only(children);\n\n const childWithRef = () => {\n if (isValidElement(child))\n return cloneElement(child, { ref: anchorRef } as {\n ref: RefObject<HTMLElement | null>;\n });\n else {\n throw new Error(\n \"Children passed to Tooltip should be a valid react element\"\n );\n }\n };\n\n useEffect(() => {\n if (showTooltip) updatePosition();\n }, [title, showTooltip, updatePosition]);\n\n if (!title) return child;\n\n return (\n <>\n {showTooltip &&\n createPortal(\n <div\n className={cn(\n styles.root,\n renderArrow && direction ? styles[`arrow-${direction}`] : \"\"\n )}\n ref={tooltipRef}\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n }}\n >\n {title}\n </div>,\n document.body\n )}\n {childWithRef()}\n </>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;SAwBgB,OAAO,CAAC,CAAA,CACtB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACL,QAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAK,EACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CACZ,eAAe,CAAA,CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GACO,CAAA,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK;QAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO;YACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe;YAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;YAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAC;SACpB;IACH,CAAC,EAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC;AAC3C,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,cAAc,CAAA,CAAE,CAAA,CAAA,CACpE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,OAAO,CAAC;IAErB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAI,eAAe,CAAA,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;UAEjC,CAAA,CAAA,CAAA,CAAI;;IAGR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,QAAQ,CAAC;IAErC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK;QACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;YACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,EAAE,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAE1C,CAAC;aACC;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CACb,4DAA4D,CAC7D;QACH;AACF,CAAA,CAAA,CAAA,CAAA,CAAC;IAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,cAAc,CAAA,CAAE;IACnC,CAAC,EAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAC;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAK;IAExB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEA,4BACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,YAAY,CACVC,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAE,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CACX,WAAW,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,CAC7D,CAAA,CACD,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACf,KAAK,CAAA,CAAE;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,CAAI;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,CAAI;AACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CACF,CAAA,CACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAI,CACd,CAAA,CACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAE,CAAA,EAAA,CACd,CAAA;AAEP;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var styles = {"root":"Tooltip-module_root__nip6a","arrow-bottom":"Tooltip-module_arrow-bottom__CuvK2","arrow-top":"Tooltip-module_arrow-top__XaUyR","arrow-right":"Tooltip-module_arrow-right__O1HnI","arrow-left":"Tooltip-module_arrow-left__4o1J4","arrow-topLeft":"Tooltip-module_arrow-topLeft__WyNAm","arrow-topRight":"Tooltip-module_arrow-topRight__-ILdh","arrow-bottomLeft":"Tooltip-module_arrow-bottomLeft__E6w40","arrow-bottomRight":"Tooltip-module_arrow-bottomRight__mefBZ"};
|
|
2
|
+
|
|
3
|
+
export { styles as default };
|
|
4
|
+
//# sourceMappingURL=Tooltip.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getArrowDirection(anchorOrigin: string, transformOrigin: string): "top" | "bottom" | "left" | "right" | "topLeft" | "topRight" | "bottomLeft" | "bottomRight" | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function getArrowDirection(anchorOrigin, transformOrigin) {
|
|
2
|
+
const parse = (origin) => origin.toLowerCase().trim().split(/\s+/);
|
|
3
|
+
const [aV = "top", aH = "left"] = parse(anchorOrigin);
|
|
4
|
+
const [tV = "top", tH = "left"] = parse(transformOrigin);
|
|
5
|
+
// Vertical priority
|
|
6
|
+
if (aV !== tV) {
|
|
7
|
+
// anchor top, tooltip attached bottom -> tooltip is above anchor -> arrow on bottom side
|
|
8
|
+
if (aV === "top" && tV === "bottom") {
|
|
9
|
+
if (aH === "left" && tH === "right")
|
|
10
|
+
return "bottomRight";
|
|
11
|
+
if (aH === "right" && tH === "left")
|
|
12
|
+
return "bottomLeft";
|
|
13
|
+
return "bottom";
|
|
14
|
+
}
|
|
15
|
+
// anchor bottom, tooltip attached top -> tooltip is below anchor -> arrow on top side
|
|
16
|
+
if (aV === "bottom" && tV === "top") {
|
|
17
|
+
if (aH === "left" && tH === "right")
|
|
18
|
+
return "topRight";
|
|
19
|
+
if (aH === "right" && tH === "left")
|
|
20
|
+
return "topLeft";
|
|
21
|
+
return "top";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Horizontal fallback
|
|
25
|
+
if (aH !== tH) {
|
|
26
|
+
// anchor left, tooltip attached right -> tooltip sits left of anchor -> arrow on right side
|
|
27
|
+
if (aH === "left" && tH === "right") {
|
|
28
|
+
if (aV === "top" && tV === "top")
|
|
29
|
+
return "topRight";
|
|
30
|
+
if (aV === "bottom" && tV === "bottom")
|
|
31
|
+
return "bottomRight";
|
|
32
|
+
return "right";
|
|
33
|
+
}
|
|
34
|
+
// anchor right, tooltip attached left -> tooltip sits right of anchor -> arrow on left side
|
|
35
|
+
if (aH === "right" && tH === "left") {
|
|
36
|
+
if (aV === "top" && tV === "top")
|
|
37
|
+
return "topLeft";
|
|
38
|
+
if (aV === "bottom" && tV === "bottom")
|
|
39
|
+
return "bottomLeft";
|
|
40
|
+
return "left";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// No clear difference (both centers or identical origins)
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { getArrowDirection as default };
|
|
48
|
+
//# sourceMappingURL=getArrowDirection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getArrowDirection.js","sources":["../../../src/Display/Tooltip/getArrowDirection.ts"],"sourcesContent":["export default function getArrowDirection(\n anchorOrigin: string,\n transformOrigin: string\n):\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"topLeft\"\n | \"topRight\"\n | \"bottomLeft\"\n | \"bottomRight\"\n | null {\n const parse = (origin: string) => origin.toLowerCase().trim().split(/\\s+/);\n\n const [aV = \"top\", aH = \"left\"] = parse(anchorOrigin);\n const [tV = \"top\", tH = \"left\"] = parse(transformOrigin);\n\n // Vertical priority\n if (aV !== tV) {\n // anchor top, tooltip attached bottom -> tooltip is above anchor -> arrow on bottom side\n if (aV === \"top\" && tV === \"bottom\") {\n if (aH === \"left\" && tH === \"right\") return \"bottomRight\";\n if (aH === \"right\" && tH === \"left\") return \"bottomLeft\";\n return \"bottom\";\n }\n\n // anchor bottom, tooltip attached top -> tooltip is below anchor -> arrow on top side\n if (aV === \"bottom\" && tV === \"top\") {\n if (aH === \"left\" && tH === \"right\") return \"topRight\";\n if (aH === \"right\" && tH === \"left\") return \"topLeft\";\n return \"top\";\n }\n }\n\n // Horizontal fallback\n if (aH !== tH) {\n // anchor left, tooltip attached right -> tooltip sits left of anchor -> arrow on right side\n if (aH === \"left\" && tH === \"right\") {\n if (aV === \"top\" && tV === \"top\") return \"topRight\";\n if (aV === \"bottom\" && tV === \"bottom\") return \"bottomRight\";\n return \"right\";\n }\n\n // anchor right, tooltip attached left -> tooltip sits right of anchor -> arrow on left side\n if (aH === \"right\" && tH === \"left\") {\n if (aV === \"top\" && tV === \"top\") return \"topLeft\";\n if (aV === \"bottom\" && tV === \"bottom\") return \"bottomLeft\";\n return \"left\";\n }\n }\n\n // No clear difference (both centers or identical origins)\n return null;\n}\n"],"names":[],"mappings":"AAAc,SAAU,iBAAiB,CACvC,YAAoB,EACpB,eAAuB,EAAA;AAWvB,IAAA,MAAM,KAAK,GAAG,CAAC,MAAc,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAE1E,IAAA,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;AACrD,IAAA,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;;AAGxD,IAAA,IAAI,EAAE,KAAK,EAAE,EAAE;;QAEb,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO;AAAE,gBAAA,OAAO,aAAa;AACzD,YAAA,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM;AAAE,gBAAA,OAAO,YAAY;AACxD,YAAA,OAAO,QAAQ;QACjB;;QAGA,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,EAAE;AACnC,YAAA,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO;AAAE,gBAAA,OAAO,UAAU;AACtD,YAAA,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM;AAAE,gBAAA,OAAO,SAAS;AACrD,YAAA,OAAO,KAAK;QACd;IACF;;AAGA,IAAA,IAAI,EAAE,KAAK,EAAE,EAAE;;QAEb,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,OAAO,EAAE;AACnC,YAAA,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK;AAAE,gBAAA,OAAO,UAAU;AACnD,YAAA,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;AAAE,gBAAA,OAAO,aAAa;AAC5D,YAAA,OAAO,OAAO;QAChB;;QAGA,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM,EAAE;AACnC,YAAA,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK;AAAE,gBAAA,OAAO,SAAS;AAClD,YAAA,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,QAAQ;AAAE,gBAAA,OAAO,YAAY;AAC3D,YAAA,OAAO,MAAM;QACf;IACF;;AAGA,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Position, type SafePositionOptions } from "@studiocubics/utils";
|
|
2
|
+
export declare function useTooltip(options?: SafePositionOptions): {
|
|
3
|
+
showTooltip: boolean;
|
|
4
|
+
position: Position;
|
|
5
|
+
anchorRef: import("react").RefObject<HTMLElement | null>;
|
|
6
|
+
tooltipRef: import("react").RefObject<HTMLDivElement | null>;
|
|
7
|
+
updatePosition: () => void;
|
|
8
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { calculateSafePosition } from '@studiocubics/utils';
|
|
3
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
function useTooltip(options = {}) {
|
|
6
|
+
const [showTooltip, setShowTooltip] = useState(false);
|
|
7
|
+
const [position, setPosition] = useState({ x: -9999, y: -9999 });
|
|
8
|
+
const anchorRef = useRef(null);
|
|
9
|
+
const tooltipRef = useRef(null);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const element = anchorRef.current;
|
|
12
|
+
if (!element)
|
|
13
|
+
return;
|
|
14
|
+
const handleMouseEnter = () => {
|
|
15
|
+
setShowTooltip(true);
|
|
16
|
+
};
|
|
17
|
+
const handleMouseLeave = () => {
|
|
18
|
+
setShowTooltip(false);
|
|
19
|
+
};
|
|
20
|
+
element.addEventListener("mouseenter", handleMouseEnter);
|
|
21
|
+
element.addEventListener("mouseleave", handleMouseLeave);
|
|
22
|
+
return () => {
|
|
23
|
+
element.removeEventListener("mouseenter", handleMouseEnter);
|
|
24
|
+
element.removeEventListener("mouseleave", handleMouseLeave);
|
|
25
|
+
};
|
|
26
|
+
}, []);
|
|
27
|
+
const updatePosition = useCallback(() => {
|
|
28
|
+
const safePos = calculateSafePosition(tooltipRef.current, anchorRef.current, options);
|
|
29
|
+
setPosition(safePos);
|
|
30
|
+
}, [options]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!showTooltip)
|
|
33
|
+
return;
|
|
34
|
+
// Initial position calculation
|
|
35
|
+
updatePosition();
|
|
36
|
+
// Update position on scroll and resize
|
|
37
|
+
window.addEventListener("scroll", updatePosition);
|
|
38
|
+
window.addEventListener("resize", updatePosition);
|
|
39
|
+
return () => {
|
|
40
|
+
window.removeEventListener("scroll", updatePosition);
|
|
41
|
+
window.removeEventListener("resize", updatePosition);
|
|
42
|
+
};
|
|
43
|
+
}, [showTooltip]);
|
|
44
|
+
return { showTooltip, position, anchorRef, tooltipRef, updatePosition };
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { useTooltip };
|
|
48
|
+
//# sourceMappingURL=useTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTooltip.js","sources":["../../../src/Display/Tooltip/useTooltip.tsx"],"sourcesContent":["\"use client\"\nimport {\n calculateSafePosition,\n type Position,\n type SafePositionOptions,\n} from \"@studiocubics/utils\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport function useTooltip(options: SafePositionOptions = {}) {\n const [showTooltip, setShowTooltip] = useState(false);\n const [position, setPosition] = useState<Position>({ x: -9999, y: -9999 });\n const anchorRef = useRef<HTMLElement>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = anchorRef.current;\n if (!element) return;\n\n const handleMouseEnter = () => {\n setShowTooltip(true);\n };\n\n const handleMouseLeave = () => {\n setShowTooltip(false);\n };\n\n element.addEventListener(\"mouseenter\", handleMouseEnter);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n element.removeEventListener(\"mouseenter\", handleMouseEnter);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n const updatePosition = useCallback(() => {\n const safePos = calculateSafePosition(\n tooltipRef.current,\n anchorRef.current,\n options\n );\n\n setPosition(safePos);\n }, [options]);\n\n useEffect(() => {\n if (!showTooltip) return;\n\n // Initial position calculation\n updatePosition();\n\n // Update position on scroll and resize\n window.addEventListener(\"scroll\", updatePosition);\n window.addEventListener(\"resize\", updatePosition);\n\n return () => {\n window.removeEventListener(\"scroll\", updatePosition);\n window.removeEventListener(\"resize\", updatePosition);\n };\n }, [showTooltip]);\n\n return { showTooltip, position, anchorRef, tooltipRef, updatePosition };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
import { type ButtonProps } from "../../Inputs/Button/Button";
|
|
3
|
+
export interface ConfirmationFormProps extends ComponentProps<"form"> {
|
|
4
|
+
formTitle?: string;
|
|
5
|
+
onCancel?: () => void;
|
|
6
|
+
variant?: "danger" | "info";
|
|
7
|
+
confirmText?: string;
|
|
8
|
+
cancelText?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
slotProps?: {
|
|
11
|
+
confirmButton?: ButtonProps;
|
|
12
|
+
cancelButton?: ButtonProps;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare function ConfirmationForm(props: ConfirmationFormProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import styles from './ConfirmationForm.module.css.js';
|
|
3
|
+
import { cn } from '@studiocubics/utils';
|
|
4
|
+
import { Button } from '../../Inputs/Button/Button.js';
|
|
5
|
+
|
|
6
|
+
function ConfirmationForm(props) {
|
|
7
|
+
const { onCancel, formTitle, variant = "info", confirmText = "Confirm", cancelText = "Cancel", disabled, slotProps = {}, className, children, ...rest } = props;
|
|
8
|
+
return (jsxs("form", { "aria-disabled": disabled, className: cn(styles.root, className, styles[variant]), ...rest, children: [jsx("h4", { children: formTitle }), children, jsxs("div", { className: styles.actions, children: [jsx(Button, { variant: variant == "danger" ? "contained" : "text", disabled: disabled, type: "button", onClick: () => onCancel?.(), ...slotProps.cancelButton, children: cancelText }), jsx(Button, { disabled: disabled, variant: variant == "danger" ? "text" : "contained", color: variant == "danger" ? "error" : undefined, type: "submit", ...slotProps.confirmButton, children: confirmText })] })] }));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { ConfirmationForm };
|
|
12
|
+
//# sourceMappingURL=ConfirmationForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmationForm.js","sources":["../../../src/Forms/ConfirmationForm/ConfirmationForm.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport styles from \"./ConfirmationForm.module.css\";\nimport { cn } from \"@studiocubics/utils\";\nimport { Button, type ButtonProps } from \"../../Inputs/Button/Button\";\nexport interface ConfirmationFormProps extends ComponentProps<\"form\"> {\n formTitle?: string;\n onCancel?: () => void;\n variant?: \"danger\" | \"info\";\n confirmText?: string;\n cancelText?: string;\n disabled?: boolean;\n slotProps?: {\n confirmButton?: ButtonProps;\n cancelButton?: ButtonProps;\n };\n}\nexport function ConfirmationForm(props: ConfirmationFormProps) {\n const {\n onCancel,\n formTitle,\n variant = \"info\",\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n disabled,\n slotProps = {},\n className,\n children,\n ...rest\n } = props;\n return (\n <form\n aria-disabled={disabled}\n className={cn(styles.root, className, styles[variant])}\n {...rest}\n >\n <h4>{formTitle}</h4>\n {children}\n <div className={styles.actions}>\n <Button\n variant={variant == \"danger\" ? \"contained\" : \"text\"}\n disabled={disabled}\n type=\"button\"\n onClick={() => onCancel?.()}\n {...slotProps.cancelButton}\n >\n {cancelText}\n </Button>\n <Button\n disabled={disabled}\n variant={variant == \"danger\" ? \"text\" : \"contained\"}\n color={variant == \"danger\" ? \"error\" : undefined}\n type=\"submit\"\n {...slotProps.confirmButton}\n >\n {confirmText}\n </Button>\n </div>\n </form>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAgBM,SAAU,gBAAgB,CAAC,KAA4B,EAAA;AAC3D,IAAA,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,GAAG,MAAM,EAChB,WAAW,GAAG,SAAS,EACvB,UAAU,GAAG,QAAQ,EACrB,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK;AACT,IAAA,QACEA,IAAA,CAAA,MAAA,EAAA,EAAA,eAAA,EACiB,QAAQ,EACvB,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAA,GAClD,IAAI,EAAA,QAAA,EAAA,CAERC,GAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAK,SAAS,EAAA,CAAM,EACnB,QAAQ,EACTD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,OAAO,EAAA,QAAA,EAAA,CAC5BC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,WAAW,GAAG,MAAM,EACnD,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,QAAQ,IAAI,EAAA,GACvB,SAAS,CAAC,YAAY,EAAA,QAAA,EAEzB,UAAU,EAAA,CACJ,EACTA,GAAA,CAAC,MAAM,EAAA,EACL,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,MAAM,GAAG,WAAW,EACnD,KAAK,EAAE,OAAO,IAAI,QAAQ,GAAG,OAAO,GAAG,SAAS,EAChD,IAAI,EAAC,QAAQ,EAAA,GACT,SAAS,CAAC,aAAa,EAAA,QAAA,EAE1B,WAAW,EAAA,CACL,CAAA,EAAA,CACL,CAAA,EAAA,CACD;AAEX;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmationForm.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { PolymorphicComponentProps, PolymorphicComponentType } from "@studiocubics/types";
|
|
2
|
+
import { type ComponentProps, type CSSProperties, type ElementType, type ReactNode } from "react";
|
|
3
|
+
import { type UseRippleProps } from "../../Misc/Ripple/Ripple";
|
|
4
|
+
/**
|
|
5
|
+
* Props specific to the Button component.
|
|
6
|
+
*
|
|
7
|
+
* These extend the intrinsic element props of whatever element is passed via `as`.
|
|
8
|
+
* @group button
|
|
9
|
+
* @category inputs
|
|
10
|
+
*/
|
|
11
|
+
export interface ButtonBaseProps {
|
|
12
|
+
/** Renders an icon at the beginning of the button. */
|
|
13
|
+
startIcon?: ReactNode;
|
|
14
|
+
/** Renders an icon at the end of the button. */
|
|
15
|
+
endIcon?: ReactNode;
|
|
16
|
+
/** Marks the button as selected. */
|
|
17
|
+
selected?: boolean;
|
|
18
|
+
/** Visual style variant. */
|
|
19
|
+
variant?: "contained" | "text" | "outlined";
|
|
20
|
+
/** Expands width to 100%. */
|
|
21
|
+
fullWidth?: boolean;
|
|
22
|
+
/** Force a 1:1 aspect ratio. */
|
|
23
|
+
square?: boolean;
|
|
24
|
+
/** Button size. */
|
|
25
|
+
size?: "sm" | "md" | "lg";
|
|
26
|
+
/** Overrides the CSS `position` property of the root element. */
|
|
27
|
+
position?: CSSProperties["position"];
|
|
28
|
+
color?: "primary" | "secondary" | "error";
|
|
29
|
+
/**
|
|
30
|
+
* Slot props for customizing internal elements.
|
|
31
|
+
*/
|
|
32
|
+
slotProps?: {
|
|
33
|
+
/** Props for the ripple effect. */
|
|
34
|
+
ripple?: UseRippleProps;
|
|
35
|
+
/** Wrapper span for the start icon. */
|
|
36
|
+
startIcon?: ComponentProps<"span">;
|
|
37
|
+
/** Wrapper span for the end icon. */
|
|
38
|
+
endIcon?: ComponentProps<"span">;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
declare const defaultElement = "button";
|
|
42
|
+
type DefaultElement = typeof defaultElement;
|
|
43
|
+
/**
|
|
44
|
+
* Polymorphic props for the Button component.
|
|
45
|
+
*
|
|
46
|
+
* `C` defines the element type rendered by the component (e.g. `"button"`, `"a"`, `"div"`).
|
|
47
|
+
* All intrinsic props for `C` are supported unless overridden by `ButtonBaseProps`.
|
|
48
|
+
*
|
|
49
|
+
* @group button
|
|
50
|
+
* @category inputs
|
|
51
|
+
*/
|
|
52
|
+
export type ButtonProps<C extends ElementType = DefaultElement> = PolymorphicComponentProps<C, ButtonBaseProps>;
|
|
53
|
+
/**
|
|
54
|
+
* Base implementation for the Button component.
|
|
55
|
+
*
|
|
56
|
+
* This is a polymorphic component that defaults to rendering a `<button>`.
|
|
57
|
+
* Use the `as` prop to change the underlying element.
|
|
58
|
+
*
|
|
59
|
+
* @typeParam C - The intrinsic or custom element type to render.
|
|
60
|
+
*
|
|
61
|
+
* @group button
|
|
62
|
+
* @category inputs
|
|
63
|
+
*/
|
|
64
|
+
export declare function ButtonBase<C extends ElementType = DefaultElement>(props: ButtonProps<C>): import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
export declare namespace ButtonBase {
|
|
66
|
+
var displayName: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A polymorphic button component.
|
|
70
|
+
*
|
|
71
|
+
* By default it renders a `<button>`, but any element can be used via the `as` prop:
|
|
72
|
+
*
|
|
73
|
+
* ```tsx
|
|
74
|
+
* <Button as="a" href="/docs">Read docs</Button>
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* Supports variants, sizes, icons, and ripple effects.
|
|
78
|
+
*
|
|
79
|
+
* @group button
|
|
80
|
+
* @category inputs
|
|
81
|
+
*/
|
|
82
|
+
export declare const Button: PolymorphicComponentType<ButtonBaseProps, DefaultElement>;
|
|
83
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import 'react';
|
|
4
|
+
import { useRipple, eventWithRipple } from '../../Misc/Ripple/Ripple.js';
|
|
5
|
+
import { cn } from '@studiocubics/utils';
|
|
6
|
+
import styles from './Button.module.css.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Button is love button is life
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const defaultElement = "button";
|
|
13
|
+
/**
|
|
14
|
+
* Base implementation for the Button component.
|
|
15
|
+
*
|
|
16
|
+
* This is a polymorphic component that defaults to rendering a `<button>`.
|
|
17
|
+
* Use the `as` prop to change the underlying element.
|
|
18
|
+
*
|
|
19
|
+
* @typeParam C - The intrinsic or custom element type to render.
|
|
20
|
+
*
|
|
21
|
+
* @group button
|
|
22
|
+
* @category inputs
|
|
23
|
+
*/
|
|
24
|
+
function ButtonBase(props) {
|
|
25
|
+
const { as, className, children, variant = "text", size = "md", startIcon, color, endIcon, square, fullWidth = false, onTouchStart, onClick, position, slotProps: _slotProps, ...restProps } = props;
|
|
26
|
+
const slotProps = _slotProps ?? {};
|
|
27
|
+
const Component = (as || defaultElement);
|
|
28
|
+
const { rippleElements, createRipple } = useRipple(slotProps.ripple);
|
|
29
|
+
const componentProps = {
|
|
30
|
+
className: cn(className, styles.root, square ? styles.square : "", fullWidth ? styles.fullWidth : "", position ? styles[`position_${position}`] : "", styles[`size_${size}`], styles[variant]),
|
|
31
|
+
onTouchStart: eventWithRipple(createRipple, onTouchStart),
|
|
32
|
+
onClick: eventWithRipple(createRipple, onClick),
|
|
33
|
+
"data-color": color,
|
|
34
|
+
...restProps,
|
|
35
|
+
};
|
|
36
|
+
return (jsxs(Component, { ...componentProps, children: [rippleElements, startIcon && (jsx("span", { ...slotProps.startIcon, className: cn(styles.iconContainer, slotProps.startIcon?.className), children: startIcon })), children, endIcon && (jsx("span", { ...slotProps.endIcon, className: cn(styles.iconContainer, slotProps.endIcon?.className), children: endIcon }))] }));
|
|
37
|
+
}
|
|
38
|
+
ButtonBase.displayName = "Button";
|
|
39
|
+
/**
|
|
40
|
+
* A polymorphic button component.
|
|
41
|
+
*
|
|
42
|
+
* By default it renders a `<button>`, but any element can be used via the `as` prop:
|
|
43
|
+
*
|
|
44
|
+
* ```tsx
|
|
45
|
+
* <Button as="a" href="/docs">Read docs</Button>
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* Supports variants, sizes, icons, and ripple effects.
|
|
49
|
+
*
|
|
50
|
+
* @group button
|
|
51
|
+
* @category inputs
|
|
52
|
+
*/
|
|
53
|
+
const Button = ButtonBase;
|
|
54
|
+
|
|
55
|
+
export { Button, ButtonBase };
|
|
56
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../src/Inputs/Button/Button.tsx"],"sourcesContent":["/**\n * Button is love button is life\n */\n\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport {\n type ComponentProps,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n} from \"react\";\nimport {\n eventWithRipple,\n useRipple,\n type UseRippleProps,\n} from \"../../Misc/Ripple/Ripple\";\nimport { cn } from \"@studiocubics/utils\";\nimport styles from \"./Button.module.css\";\n\n/**\n * Props specific to the Button component.\n *\n * These extend the intrinsic element props of whatever element is passed via `as`.\n * @group button\n * @category inputs\n */\nexport interface ButtonBaseProps {\n /** Renders an icon at the beginning of the button. */\n startIcon?: ReactNode;\n\n /** Renders an icon at the end of the button. */\n endIcon?: ReactNode;\n\n /** Marks the button as selected. */\n selected?: boolean;\n\n /** Visual style variant. */\n variant?: \"contained\" | \"text\" | \"outlined\";\n\n /** Expands width to 100%. */\n fullWidth?: boolean;\n\n /** Force a 1:1 aspect ratio. */\n square?: boolean;\n\n /** Button size. */\n size?: \"sm\" | \"md\" | \"lg\";\n\n /** Overrides the CSS `position` property of the root element. */\n position?: CSSProperties[\"position\"];\n\n color?: \"primary\" | \"secondary\" | \"error\";\n /**\n * Slot props for customizing internal elements.\n */\n slotProps?: {\n /** Props for the ripple effect. */\n ripple?: UseRippleProps;\n\n /** Wrapper span for the start icon. */\n startIcon?: ComponentProps<\"span\">;\n\n /** Wrapper span for the end icon. */\n endIcon?: ComponentProps<\"span\">;\n };\n}\nconst defaultElement = \"button\";\ntype DefaultElement = typeof defaultElement;\n/**\n * Polymorphic props for the Button component.\n *\n * `C` defines the element type rendered by the component (e.g. `\"button\"`, `\"a\"`, `\"div\"`).\n * All intrinsic props for `C` are supported unless overridden by `ButtonBaseProps`.\n *\n * @group button\n * @category inputs\n */\nexport type ButtonProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, ButtonBaseProps>;\n\n/**\n * Base implementation for the Button component.\n *\n * This is a polymorphic component that defaults to rendering a `<button>`.\n * Use the `as` prop to change the underlying element.\n *\n * @typeParam C - The intrinsic or custom element type to render.\n *\n * @group button\n * @category inputs\n */\nexport function ButtonBase<C extends ElementType = DefaultElement>(\n props: ButtonProps<C>\n) {\n const {\n as,\n className,\n children,\n variant = \"text\",\n size = \"md\",\n startIcon,\n color,\n endIcon,\n square,\n fullWidth = false,\n onTouchStart,\n onClick,\n position,\n slotProps: _slotProps,\n ...restProps\n } = props as ButtonProps<DefaultElement>;\n const slotProps: NonNullable<ButtonBaseProps[\"slotProps\"]> = _slotProps ?? {};\n const Component = (as || defaultElement) as ElementType;\n const { rippleElements, createRipple } = useRipple(slotProps.ripple);\n\n const componentProps = {\n className: cn(\n className,\n styles.root,\n square ? styles.square : \"\",\n fullWidth ? styles.fullWidth : \"\",\n position ? styles[`position_${position}`] : \"\",\n styles[`size_${size}`],\n styles[variant]\n ),\n onTouchStart: eventWithRipple(createRipple, onTouchStart),\n onClick: eventWithRipple(createRipple, onClick),\n \"data-color\": color,\n ...restProps,\n };\n\n return (\n <Component {...componentProps}>\n {rippleElements}\n {startIcon && (\n <span\n {...slotProps.startIcon}\n className={cn(styles.iconContainer, slotProps.startIcon?.className)}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n {...slotProps.endIcon}\n className={cn(styles.iconContainer, slotProps.endIcon?.className)}\n >\n {endIcon}\n </span>\n )}\n </Component>\n );\n}\nButtonBase.displayName = \"Button\";\n\n/**\n * A polymorphic button component.\n *\n * By default it renders a `<button>`, but any element can be used via the `as` prop:\n *\n * ```tsx\n * <Button as=\"a\" href=\"/docs\">Read docs</Button>\n * ```\n *\n * Supports variants, sizes, icons, and ripple effects.\n *\n * @group button\n * @category inputs\n */\nexport const Button = ButtonBase as PolymorphicComponentType<\n ButtonBaseProps,\n DefaultElement\n>;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var styles = {"root":"Button-module_root__hmumx","iconContainer":"Button-module_iconContainer__-VER1","square":"Button-module_square__Wu8jt","size_sm":"Button-module_size_sm__Qk6rp","size_md":"Button-module_size_md__qWVt-","size_lg":"Button-module_size_lg__e7Ely","contained":"Button-module_contained__tlUyK","outlined":"Button-module_outlined__rgbFf","position_absolute":"Button-module_position_absolute__NN8P1","position_relative":"Button-module_position_relative__r0CV0","position_fixed":"Button-module_position_fixed__LilZy","position_sticky":"Button-module_position_sticky__2ixpW","fullWidth":"Button-module_fullWidth__5o7qa"};
|
|
2
|
+
|
|
3
|
+
export { styles as default };
|
|
4
|
+
//# sourceMappingURL=Button.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|