@plumile/ui 0.1.56 → 0.1.57
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/lib/esm/atomic/atoms/badge/Badge.js +17 -16
- package/lib/esm/atomic/atoms/badge/Badge.js.map +1 -1
- package/lib/esm/atomic/atoms/badge/badge.css.js +30 -8
- package/lib/esm/atomic/atoms/badge/badge.css.js.map +1 -1
- package/lib/esm/atomic/atoms/button/Button.js +46 -58
- package/lib/esm/atomic/atoms/button/Button.js.map +1 -1
- package/lib/esm/atomic/atoms/button/LinkButton.js +48 -62
- package/lib/esm/atomic/atoms/button/LinkButton.js.map +1 -1
- package/lib/esm/atomic/atoms/button/button.css.js +95 -16
- package/lib/esm/atomic/atoms/button/button.css.js.map +1 -1
- package/lib/esm/atomic/atoms/checkbox/Checkbox.js +37 -40
- package/lib/esm/atomic/atoms/checkbox/Checkbox.js.map +1 -1
- package/lib/esm/atomic/atoms/checkbox/checkbox.css.js +26 -11
- package/lib/esm/atomic/atoms/checkbox/checkbox.css.js.map +1 -1
- package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js +32 -31
- package/lib/esm/atomic/atoms/formatted-date/FormattedDate.js.map +1 -1
- package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js +18 -25
- package/lib/esm/atomic/atoms/icon-button/IconMenuButton.js.map +1 -1
- package/lib/esm/atomic/atoms/input/Input.js +46 -40
- package/lib/esm/atomic/atoms/input/Input.js.map +1 -1
- package/lib/esm/atomic/atoms/input/input.css.js +32 -14
- package/lib/esm/atomic/atoms/input/input.css.js.map +1 -1
- package/lib/esm/atomic/atoms/label/Label.js +23 -16
- package/lib/esm/atomic/atoms/label/Label.js.map +1 -1
- package/lib/esm/atomic/atoms/label/label.css.js +27 -9
- package/lib/esm/atomic/atoms/label/label.css.js.map +1 -1
- package/lib/esm/atomic/atoms/textarea/Textarea.js +19 -18
- package/lib/esm/atomic/atoms/textarea/Textarea.js.map +1 -1
- package/lib/esm/atomic/atoms/textarea/textarea.css.js +32 -8
- package/lib/esm/atomic/atoms/textarea/textarea.css.js.map +1 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js +47 -54
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuDropdown.js.map +1 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js +53 -60
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbMenuPopover.js.map +1 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js +62 -63
- package/lib/esm/atomic/molecules/breadcrumb_navigation/BreadcrumbNavigation.js.map +1 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js +8 -30
- package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.js.map +1 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js +0 -2
- package/lib/esm/atomic/molecules/card/Card.css.js +8 -10
- package/lib/esm/atomic/molecules/card/Card.css.js.map +1 -1
- package/lib/esm/atomic/molecules/card/Card.js +24 -17
- package/lib/esm/atomic/molecules/card/Card.js.map +1 -1
- package/lib/esm/atomic/molecules/dropdown/Dropdown.js +148 -177
- package/lib/esm/atomic/molecules/dropdown/Dropdown.js.map +1 -1
- package/lib/esm/atomic/molecules/dropdown/dropdown.css.js +8 -13
- package/lib/esm/atomic/molecules/dropdown/dropdown.css.js.map +1 -1
- package/lib/esm/atomic/molecules/form-actions/FormActions.js +31 -56
- package/lib/esm/atomic/molecules/form-actions/FormActions.js.map +1 -1
- package/lib/esm/atomic/molecules/tabs/Tabs.js +34 -33
- package/lib/esm/atomic/molecules/tabs/Tabs.js.map +1 -1
- package/lib/esm/atomic/molecules/tabs/tabs.css.js +18 -9
- package/lib/esm/atomic/molecules/tabs/tabs.css.js.map +1 -1
- package/lib/esm/atomic/molecules/toast/ToastProvider.js +82 -77
- package/lib/esm/atomic/molecules/toast/ToastProvider.js.map +1 -1
- package/lib/esm/atomic/molecules/toast/ToastViewport.js +75 -70
- package/lib/esm/atomic/molecules/toast/ToastViewport.js.map +1 -1
- package/lib/esm/atomic/molecules/toast/constants.js +6 -5
- package/lib/esm/atomic/molecules/toast/constants.js.map +1 -1
- package/lib/esm/atomic/molecules/toast/toast.css.js +18 -17
- package/lib/esm/atomic/molecules/toast/toast.css.js.map +1 -1
- package/lib/esm/components/charts/BillingUsageLineChart.js +140 -173
- package/lib/esm/components/charts/BillingUsageLineChart.js.map +1 -1
- package/lib/esm/components/charts/billingUsageLineChart.css.js +8 -12
- package/lib/esm/components/charts/billingUsageLineChart.css.js.map +1 -1
- package/lib/esm/components/data-table/DataTable.css.js +84 -24
- package/lib/esm/components/data-table/DataTable.css.js.map +1 -1
- package/lib/esm/components/data-table/DataTable.js +73 -140
- package/lib/esm/components/data-table/DataTable.js.map +1 -1
- package/lib/esm/components/data-table/TableCell.css.js +18 -15
- package/lib/esm/components/data-table/TableCell.css.js.map +1 -1
- package/lib/esm/components/data-table/TableCell.js +74 -73
- package/lib/esm/components/data-table/TableCell.js.map +1 -1
- package/lib/esm/components/data-table/TableCellBase.js +18 -15
- package/lib/esm/components/data-table/TableCellBase.js.map +1 -1
- package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js +8 -10
- package/lib/esm/components/data-table/VirtualizedConnectionTable.css.js.map +1 -1
- package/lib/esm/components/data-table/VirtualizedConnectionTable.js +190 -248
- package/lib/esm/components/data-table/VirtualizedConnectionTable.js.map +1 -1
- package/lib/esm/components/data-table/tableBreakpoints.js +28 -34
- package/lib/esm/components/data-table/tableBreakpoints.js.map +1 -1
- package/lib/esm/components/layout/ContentLayout.css.js +8 -18
- package/lib/esm/components/layout/ContentLayout.css.js.map +1 -1
- package/lib/esm/components/layout/ContentLayout.js +68 -78
- package/lib/esm/components/layout/ContentLayout.js.map +1 -1
- package/lib/esm/components/layout/TabsContentLayout.css.js +8 -11
- package/lib/esm/components/layout/TabsContentLayout.css.js.map +1 -1
- package/lib/esm/components/layout/TabsContentLayout.js +30 -13
- package/lib/esm/components/layout/TabsContentLayout.js.map +1 -1
- package/lib/esm/components/select/SimpleSelect.css.js +17 -22
- package/lib/esm/components/select/SimpleSelect.css.js.map +1 -1
- package/lib/esm/components/select/SimpleSelect.js +184 -184
- package/lib/esm/components/select/SimpleSelect.js.map +1 -1
- package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js +8 -10
- package/lib/esm/components/subscriptions/RefetchNeededBanner.css.js.map +1 -1
- package/lib/esm/components/subscriptions/RefetchNeededBanner.js +31 -23
- package/lib/esm/components/subscriptions/RefetchNeededBanner.js.map +1 -1
- package/lib/esm/components/tile/InfoTile.css.js +8 -18
- package/lib/esm/components/tile/InfoTile.css.js.map +1 -1
- package/lib/esm/components/tile/InfoTile.js +62 -67
- package/lib/esm/components/tile/InfoTile.js.map +1 -1
- package/lib/esm/i18n/useUiTranslation.js +8 -7
- package/lib/esm/i18n/useUiTranslation.js.map +1 -1
- package/lib/esm/icons/BanSvg.js +29 -44
- package/lib/esm/icons/BanSvg.js.map +1 -1
- package/lib/esm/icons/ButtonLoadingSpinnerSvg.js +26 -41
- package/lib/esm/icons/ButtonLoadingSpinnerSvg.js.map +1 -1
- package/lib/esm/icons/ChatCheckSvg.js +27 -42
- package/lib/esm/icons/ChatCheckSvg.js.map +1 -1
- package/lib/esm/icons/ChatSizeLargeSvg.js +49 -70
- package/lib/esm/icons/ChatSizeLargeSvg.js.map +1 -1
- package/lib/esm/icons/ChatSizeMediumSvg.js +43 -61
- package/lib/esm/icons/ChatSizeMediumSvg.js.map +1 -1
- package/lib/esm/icons/ChatSizeSmallSvg.js +37 -52
- package/lib/esm/icons/ChatSizeSmallSvg.js.map +1 -1
- package/lib/esm/icons/ChatXSvg.js +27 -42
- package/lib/esm/icons/ChatXSvg.js.map +1 -1
- package/lib/esm/icons/CheckSvg.js +21 -30
- package/lib/esm/icons/CheckSvg.js.map +1 -1
- package/lib/esm/icons/ChevronDownSvg.js +21 -30
- package/lib/esm/icons/ChevronDownSvg.js.map +1 -1
- package/lib/esm/icons/ChevronLeftSvg.js +21 -30
- package/lib/esm/icons/ChevronLeftSvg.js.map +1 -1
- package/lib/esm/icons/ChevronRightSvg.js +21 -30
- package/lib/esm/icons/ChevronRightSvg.js.map +1 -1
- package/lib/esm/icons/ClockSvg.js +29 -44
- package/lib/esm/icons/ClockSvg.js.map +1 -1
- package/lib/esm/icons/CoinOffSvg.js +47 -65
- package/lib/esm/icons/CoinOffSvg.js.map +1 -1
- package/lib/esm/icons/CoinSvg.js +40 -55
- package/lib/esm/icons/CoinSvg.js.map +1 -1
- package/lib/esm/icons/DatabaseCheckSvg.js +47 -65
- package/lib/esm/icons/DatabaseCheckSvg.js.map +1 -1
- package/lib/esm/icons/DatabaseXSvg.js +47 -65
- package/lib/esm/icons/DatabaseXSvg.js.map +1 -1
- package/lib/esm/icons/DevModeSvg.js +21 -30
- package/lib/esm/icons/DevModeSvg.js.map +1 -1
- package/lib/esm/icons/EyeSvg.js +27 -33
- package/lib/esm/icons/EyeSvg.js.map +1 -1
- package/lib/esm/icons/FormErrorAlertSvg.js +37 -29
- package/lib/esm/icons/FormErrorAlertSvg.js.map +1 -1
- package/lib/esm/icons/GlobeSvg.js +18 -27
- package/lib/esm/icons/GlobeSvg.js.map +1 -1
- package/lib/esm/icons/GripDotsSvg.js +52 -29
- package/lib/esm/icons/GripDotsSvg.js.map +1 -1
- package/lib/esm/icons/HomeActivityAssignUserSvg.js +44 -62
- package/lib/esm/icons/HomeActivityAssignUserSvg.js.map +1 -1
- package/lib/esm/icons/HomeStatsCheckBadgeSvg.js +27 -42
- package/lib/esm/icons/HomeStatsCheckBadgeSvg.js.map +1 -1
- package/lib/esm/icons/HomeStatsClipboardSvg.js +27 -42
- package/lib/esm/icons/HomeStatsClipboardSvg.js.map +1 -1
- package/lib/esm/icons/HomeStatsClockSvg.js +27 -42
- package/lib/esm/icons/HomeStatsClockSvg.js.map +1 -1
- package/lib/esm/icons/KeyOffSvg.js +39 -54
- package/lib/esm/icons/KeyOffSvg.js.map +1 -1
- package/lib/esm/icons/KeySvg.js +39 -54
- package/lib/esm/icons/KeySvg.js.map +1 -1
- package/lib/esm/icons/KronexSvg.js +28 -43
- package/lib/esm/icons/KronexSvg.js.map +1 -1
- package/lib/esm/icons/LinkCheckSvg.js +37 -52
- package/lib/esm/icons/LinkCheckSvg.js.map +1 -1
- package/lib/esm/icons/LinkSvg.js +27 -42
- package/lib/esm/icons/LinkSvg.js.map +1 -1
- package/lib/esm/icons/LinkXSvg.js +37 -52
- package/lib/esm/icons/LinkXSvg.js.map +1 -1
- package/lib/esm/icons/LockOpenSvg.js +31 -46
- package/lib/esm/icons/LockOpenSvg.js.map +1 -1
- package/lib/esm/icons/LockSvg.js +31 -46
- package/lib/esm/icons/LockSvg.js.map +1 -1
- package/lib/esm/icons/MailCheckSvg.js +41 -56
- package/lib/esm/icons/MailCheckSvg.js.map +1 -1
- package/lib/esm/icons/MailSvg.js +31 -46
- package/lib/esm/icons/MailSvg.js.map +1 -1
- package/lib/esm/icons/MailXSvg.js +41 -56
- package/lib/esm/icons/MailXSvg.js.map +1 -1
- package/lib/esm/icons/ModalCloseSvg.js +27 -42
- package/lib/esm/icons/ModalCloseSvg.js.map +1 -1
- package/lib/esm/icons/PencilSvg.js +14 -20
- package/lib/esm/icons/PencilSvg.js.map +1 -1
- package/lib/esm/icons/PinFilledSvg.js +24 -40
- package/lib/esm/icons/PinFilledSvg.js.map +1 -1
- package/lib/esm/icons/PinSvg.js +27 -43
- package/lib/esm/icons/PinSvg.js.map +1 -1
- package/lib/esm/icons/ProfileDropdownLogoutSvg.js +37 -52
- package/lib/esm/icons/ProfileDropdownLogoutSvg.js.map +1 -1
- package/lib/esm/icons/ProfileDropdownOrganizationSvg.js +27 -42
- package/lib/esm/icons/ProfileDropdownOrganizationSvg.js.map +1 -1
- package/lib/esm/icons/ProjectsFolderSvg.js +21 -30
- package/lib/esm/icons/ProjectsFolderSvg.js.map +1 -1
- package/lib/esm/icons/RobotCheckSvg.js +60 -68
- package/lib/esm/icons/RobotCheckSvg.js.map +1 -1
- package/lib/esm/icons/RobotSvg.js +53 -58
- package/lib/esm/icons/RobotSvg.js.map +1 -1
- package/lib/esm/icons/RobotXSvg.js +60 -68
- package/lib/esm/icons/RobotXSvg.js.map +1 -1
- package/lib/esm/icons/RocketOffSvg.js +58 -83
- package/lib/esm/icons/RocketOffSvg.js.map +1 -1
- package/lib/esm/icons/RocketSvg.js +51 -73
- package/lib/esm/icons/RocketSvg.js.map +1 -1
- package/lib/esm/icons/SendCheckSvg.js +40 -55
- package/lib/esm/icons/SendCheckSvg.js.map +1 -1
- package/lib/esm/icons/SendMessageSvg.js +30 -45
- package/lib/esm/icons/SendMessageSvg.js.map +1 -1
- package/lib/esm/icons/SendXSvg.js +40 -55
- package/lib/esm/icons/SendXSvg.js.map +1 -1
- package/lib/esm/icons/SettingsCheckSvg.js +37 -52
- package/lib/esm/icons/SettingsCheckSvg.js.map +1 -1
- package/lib/esm/icons/SettingsXSvg.js +37 -52
- package/lib/esm/icons/SettingsXSvg.js.map +1 -1
- package/lib/esm/icons/ShieldLockSvg.js +41 -56
- package/lib/esm/icons/ShieldLockSvg.js.map +1 -1
- package/lib/esm/icons/ShieldOffSvg.js +27 -42
- package/lib/esm/icons/ShieldOffSvg.js.map +1 -1
- package/lib/esm/icons/SidebarHomeSvg.js +27 -42
- package/lib/esm/icons/SidebarHomeSvg.js.map +1 -1
- package/lib/esm/icons/SidebarInitiativesSvg.js +37 -52
- package/lib/esm/icons/SidebarInitiativesSvg.js.map +1 -1
- package/lib/esm/icons/SidebarPlusSvg.js +27 -42
- package/lib/esm/icons/SidebarPlusSvg.js.map +1 -1
- package/lib/esm/icons/SidebarSearchSvg.js +27 -42
- package/lib/esm/icons/SidebarSearchSvg.js.map +1 -1
- package/lib/esm/icons/SidebarSettingsSvg.js +27 -42
- package/lib/esm/icons/SidebarSettingsSvg.js.map +1 -1
- package/lib/esm/icons/SidebarTasksSvg.js +27 -42
- package/lib/esm/icons/SidebarTasksSvg.js.map +1 -1
- package/lib/esm/icons/SidebarTeamSvg.js +44 -62
- package/lib/esm/icons/SidebarTeamSvg.js.map +1 -1
- package/lib/esm/icons/TaskAttachmentSvg.js +21 -30
- package/lib/esm/icons/TaskAttachmentSvg.js.map +1 -1
- package/lib/esm/icons/TaskCalendarSvg.js +44 -62
- package/lib/esm/icons/TaskCalendarSvg.js.map +1 -1
- package/lib/esm/icons/TaskCommentBubbleSvg.js +21 -30
- package/lib/esm/icons/TaskCommentBubbleSvg.js.map +1 -1
- package/lib/esm/icons/TaskDeleteSvg.js +27 -42
- package/lib/esm/icons/TaskDeleteSvg.js.map +1 -1
- package/lib/esm/icons/TaskDependencyBlockedSvg.js +27 -43
- package/lib/esm/icons/TaskDependencyBlockedSvg.js.map +1 -1
- package/lib/esm/icons/TaskDependencyReadySvg.js +27 -43
- package/lib/esm/icons/TaskDependencyReadySvg.js.map +1 -1
- package/lib/esm/icons/TaskMenuDotsSvg.js +37 -52
- package/lib/esm/icons/TaskMenuDotsSvg.js.map +1 -1
- package/lib/esm/icons/TaskTagSvg.js +27 -42
- package/lib/esm/icons/TaskTagSvg.js.map +1 -1
- package/lib/esm/icons/TeamMemberEmailSvg.js +27 -42
- package/lib/esm/icons/TeamMemberEmailSvg.js.map +1 -1
- package/lib/esm/icons/TeamMemberLocationSvg.js +27 -42
- package/lib/esm/icons/TeamMemberLocationSvg.js.map +1 -1
- package/lib/esm/icons/WrenchSvg.js +21 -30
- package/lib/esm/icons/WrenchSvg.js.map +1 -1
- package/lib/esm/icons/XBadgeSvg.js +27 -42
- package/lib/esm/icons/XBadgeSvg.js.map +1 -1
- package/lib/esm/icons/markdown/MarkdownCheckboxCheckedSvg.js +30 -42
- package/lib/esm/icons/markdown/MarkdownCheckboxCheckedSvg.js.map +1 -1
- package/lib/esm/icons/markdown/MarkdownCheckboxUncheckedSvg.js +22 -28
- package/lib/esm/icons/markdown/MarkdownCheckboxUncheckedSvg.js.map +1 -1
- package/lib/esm/icons/markdown/MarkdownCopySuccessSvg.js +41 -53
- package/lib/esm/icons/markdown/MarkdownCopySuccessSvg.js.map +1 -1
- package/lib/esm/icons/markdown/MarkdownCopySvg.js +30 -42
- package/lib/esm/icons/markdown/MarkdownCopySvg.js.map +1 -1
- package/lib/esm/icons/markdown/MarkdownExternalLinkSvg.js +39 -51
- package/lib/esm/icons/markdown/MarkdownExternalLinkSvg.js.map +1 -1
- package/lib/esm/index.js +34 -77
- package/lib/esm/style.css +2 -0
- package/lib/esm/style.js +4 -0
- package/lib/esm/styles/slots.js +0 -2
- package/lib/esm/svg/ChevronDownIcon.js +11 -10
- package/lib/esm/svg/ChevronDownIcon.js.map +1 -1
- package/lib/esm/svg/ChevronRightIcon.js +11 -9
- package/lib/esm/svg/ChevronRightIcon.js.map +1 -1
- package/lib/esm/svg/GlobeIcon.js +11 -6
- package/lib/esm/svg/GlobeIcon.js.map +1 -1
- package/lib/esm/theme/ThemeProvider.js +33 -37
- package/lib/esm/theme/ThemeProvider.js.map +1 -1
- package/lib/esm/theme/VisuallyHidden.js +12 -8
- package/lib/esm/theme/VisuallyHidden.js.map +1 -1
- package/lib/esm/theme/accessibility.css.js +7 -8
- package/lib/esm/theme/accessibility.css.js.map +1 -1
- package/lib/esm/theme/colors.js +101 -100
- package/lib/esm/theme/colors.js.map +1 -1
- package/lib/esm/theme/common.js +122 -123
- package/lib/esm/theme/common.js.map +1 -1
- package/lib/esm/theme/containerQueries.js +14 -13
- package/lib/esm/theme/containerQueries.js.map +1 -1
- package/lib/esm/theme/global.css.js +1 -2
- package/lib/esm/theme/index.js +9 -28
- package/lib/esm/theme/sprinkles.css.js +68484 -9
- package/lib/esm/theme/sprinkles.css.js.map +1 -1
- package/lib/esm/theme/theme.css.js +1 -2
- package/lib/esm/theme/themeContract.js +1025 -1035
- package/lib/esm/theme/themeContract.js.map +1 -1
- package/lib/esm/theme/tools.js +16 -19
- package/lib/esm/theme/tools.js.map +1 -1
- package/lib/style.d.ts +5 -0
- package/lib/style.d.ts.map +1 -0
- package/lib/style.js +5 -0
- package/lib/types/style.d.ts +5 -0
- package/lib/types/style.d.ts.map +1 -0
- package/package.json +4 -3
- package/lib/esm/atomic/atoms/badge/badge.css.ts.vanilla-BxMgYgcH.css +0 -1
- package/lib/esm/atomic/atoms/button/button.css.ts.vanilla-BYFxDZro.css +0 -1
- package/lib/esm/atomic/atoms/checkbox/checkbox.css.ts.vanilla-D6TvWxlo.css +0 -1
- package/lib/esm/atomic/atoms/input/input.css.ts.vanilla-D_X5_tcn.css +0 -1
- package/lib/esm/atomic/atoms/textarea/textarea.css.ts.vanilla-IrvNTQEt.css +0 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/breadcrumbNavigation.css.ts.vanilla-Bhz61Foa.css +0 -1
- package/lib/esm/atomic/molecules/breadcrumb_navigation/types.js.map +0 -1
- package/lib/esm/atomic/molecules/tabs/tabs.css.ts.vanilla-DQm5wO0K.css +0 -1
- package/lib/esm/atomic/molecules/toast/toast.css.ts.vanilla-2GtcGJsi.css +0 -1
- package/lib/esm/components/charts/billingUsageLineChart.css.ts.vanilla-7e3dy1Dj.css +0 -1
- package/lib/esm/components/data-table/DataTable.css.ts.vanilla-BLE98fwj.css +0 -1
- package/lib/esm/components/data-table/TableCell.css.ts.vanilla-i5QJvdbl.css +0 -1
- package/lib/esm/components/layout/ContentLayout.css.ts.vanilla-tn0RQdqM.css +0 -0
- package/lib/esm/components/select/SimpleSelect.css.ts.vanilla-Bil1v8q6.css +0 -1
- package/lib/esm/components/tile/InfoTile.css.ts.vanilla-ByCg4UKz.css +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/styles/slots.js.map +0 -1
- package/lib/esm/theme/accessibility.css.ts.vanilla-D6gfeWvf.css +0 -1
- package/lib/esm/theme/global.css.js.map +0 -1
- package/lib/esm/theme/global.css.ts.vanilla-ClXnHnoy.css +0 -1
- package/lib/esm/theme/index.js.map +0 -1
- package/lib/esm/theme/sprinkles.css.ts.vanilla-DOI5FNoi.css +0 -1
- package/lib/esm/theme/theme.css.js.map +0 -1
- package/lib/esm/theme/theme.css.ts.vanilla-a3SsXff5.css +0 -1
|
@@ -1,178 +1,149 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
width: g.width
|
|
146
|
-
});
|
|
147
|
-
const ot = G ?? document.body, rt = {
|
|
148
|
-
close: d,
|
|
149
|
-
open: Y,
|
|
150
|
-
isOpen: e
|
|
151
|
-
};
|
|
152
|
-
let B = null;
|
|
153
|
-
return e && (B = at(
|
|
154
|
-
/* @__PURE__ */ N(
|
|
155
|
-
"div",
|
|
156
|
-
{
|
|
157
|
-
ref: f,
|
|
158
|
-
role: "menu",
|
|
159
|
-
className: $(
|
|
160
|
-
pt,
|
|
161
|
-
dt,
|
|
162
|
-
U
|
|
163
|
-
),
|
|
164
|
-
style: j,
|
|
165
|
-
children: H
|
|
166
|
-
}
|
|
167
|
-
),
|
|
168
|
-
ot
|
|
169
|
-
)), /* @__PURE__ */ st(q.Provider, { value: rt, children: [
|
|
170
|
-
/* @__PURE__ */ N("div", { className: $(mt, I), ref: R, children: ft(i, u) }),
|
|
171
|
-
B
|
|
172
|
-
] });
|
|
1
|
+
import { cx as e } from "../../../theme/tools.js";
|
|
2
|
+
import { container as t, content as n, contentPositioned as r } from "./dropdown.css.js";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
import { cloneElement as o, createContext as s, isValidElement as c, useCallback as l, useContext as u, useEffect as d, useLayoutEffect as f, useRef as p, useState as m } from "react";
|
|
5
|
+
import { createPortal as h } from "react-dom";
|
|
6
|
+
//#region src/atomic/molecules/dropdown/Dropdown.tsx
|
|
7
|
+
var g = s(null), _ = () => {
|
|
8
|
+
let e = u(g);
|
|
9
|
+
if (e == null) throw Error("useDropdown must be used within a <Dropdown />");
|
|
10
|
+
return e;
|
|
11
|
+
}, v = (e) => typeof e != "object" || !e ? !1 : e.$$typeof === Symbol.for("react.forward_ref"), y = ({ trigger: s, children: u, className: _, contentClassName: y, placement: b = "bottom-start", offset: x = 4, matchTriggerWidth: S = !0, open: C, defaultOpen: w = !1, onOpenChange: T, closeOnItemClick: E = !1, portalContainer: D, ariaLabel: O }) => {
|
|
12
|
+
let k = C != null, [A, j] = m(w), M = A;
|
|
13
|
+
k && (M = !!C);
|
|
14
|
+
let N = p(null), P = p(null), F = p(null), [I, L] = m(null), R = p([]), z = l((e) => {
|
|
15
|
+
k || j(e), T?.(e);
|
|
16
|
+
}, [k, T]), B = l(() => {
|
|
17
|
+
z(!M);
|
|
18
|
+
}, [M, z]), V = l(() => {
|
|
19
|
+
z(!1);
|
|
20
|
+
}, [z]), ee = l(() => {
|
|
21
|
+
z(!0);
|
|
22
|
+
}, [z]), H = l(() => {
|
|
23
|
+
let e = P.current, t = F.current;
|
|
24
|
+
if (e == null || t == null) return;
|
|
25
|
+
let n = e.getBoundingClientRect(), r = 0, i = 0;
|
|
26
|
+
switch (b) {
|
|
27
|
+
case "bottom-start":
|
|
28
|
+
r = n.bottom + x, i = n.left;
|
|
29
|
+
break;
|
|
30
|
+
case "bottom-end":
|
|
31
|
+
r = n.bottom + x, i = n.right - t.offsetWidth;
|
|
32
|
+
break;
|
|
33
|
+
case "top-start":
|
|
34
|
+
r = n.top - t.offsetHeight - x, i = n.left;
|
|
35
|
+
break;
|
|
36
|
+
case "top-end":
|
|
37
|
+
r = n.top - t.offsetHeight - x, i = n.right - t.offsetWidth;
|
|
38
|
+
break;
|
|
39
|
+
default: r = n.bottom + x, i = n.left;
|
|
40
|
+
}
|
|
41
|
+
let a = window.innerWidth, o = window.innerHeight, s;
|
|
42
|
+
S && (s = n.width);
|
|
43
|
+
let c = s ?? t.offsetWidth;
|
|
44
|
+
i + c > a - 4 && (i = Math.max(4, a - c - 4)), i < 4 && (i = 4);
|
|
45
|
+
let l = t.offsetHeight;
|
|
46
|
+
if (r + l > o - 4) if (b.startsWith("bottom")) {
|
|
47
|
+
let e = n.top - l - x;
|
|
48
|
+
r = e >= 4 ? e : Math.max(4, o - l - 4);
|
|
49
|
+
} else r = Math.max(4, o - l - 4);
|
|
50
|
+
r < 4 && (r = 4), L({
|
|
51
|
+
top: r,
|
|
52
|
+
left: i,
|
|
53
|
+
width: s
|
|
54
|
+
});
|
|
55
|
+
}, [
|
|
56
|
+
b,
|
|
57
|
+
x,
|
|
58
|
+
S
|
|
59
|
+
]);
|
|
60
|
+
f(() => {
|
|
61
|
+
M && H();
|
|
62
|
+
}, [
|
|
63
|
+
M,
|
|
64
|
+
H,
|
|
65
|
+
u
|
|
66
|
+
]), d(() => {
|
|
67
|
+
if (!M) return;
|
|
68
|
+
let e = () => {
|
|
69
|
+
H();
|
|
70
|
+
};
|
|
71
|
+
window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), R.current.push(() => {
|
|
72
|
+
window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
|
|
73
|
+
});
|
|
74
|
+
}, [M, H]), d(() => {
|
|
75
|
+
if (!M) return;
|
|
76
|
+
let e = (e) => {
|
|
77
|
+
let t = e.target;
|
|
78
|
+
N.current != null && F.current != null && !N.current.contains(t) && !F.current.contains(t) && V();
|
|
79
|
+
}, t = (e) => {
|
|
80
|
+
e.key === "Escape" && (V(), P.current?.focus());
|
|
81
|
+
};
|
|
82
|
+
document.addEventListener("mousedown", e), document.addEventListener("keydown", t), R.current.push(() => {
|
|
83
|
+
document.removeEventListener("mousedown", e), document.removeEventListener("keydown", t);
|
|
84
|
+
});
|
|
85
|
+
}, [M, V]), d(() => {
|
|
86
|
+
M && (F.current?.querySelector("button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])"))?.focus();
|
|
87
|
+
}, [M]), d(() => {
|
|
88
|
+
if (!M || !E) return;
|
|
89
|
+
let e = (e) => {
|
|
90
|
+
F.current?.contains(e.target) && V();
|
|
91
|
+
};
|
|
92
|
+
document.addEventListener("click", e, { capture: !0 }), R.current.push(() => {
|
|
93
|
+
document.removeEventListener("click", e, { capture: !0 });
|
|
94
|
+
});
|
|
95
|
+
}, [
|
|
96
|
+
M,
|
|
97
|
+
E,
|
|
98
|
+
V
|
|
99
|
+
]), d(() => () => {
|
|
100
|
+
R.current.forEach((e) => {
|
|
101
|
+
e();
|
|
102
|
+
}), R.current = [];
|
|
103
|
+
}, []);
|
|
104
|
+
let U = s;
|
|
105
|
+
if (typeof s == "function" && (U = s(M)), !c(U)) throw Error("Dropdown trigger must be a React element.");
|
|
106
|
+
let W = typeof U.type == "string", G = W && U.type === "button";
|
|
107
|
+
if (!(W || typeof U.type == "function" || v(U.type))) throw Error("Dropdown trigger must be a DOM element or component that accepts a ref.");
|
|
108
|
+
let K = U.props.ref ?? U.ref, q = (e) => {
|
|
109
|
+
P.current = e, typeof K == "function" ? K(e) : K != null && (K.current = e);
|
|
110
|
+
}, J = U.props, Y = (e) => {
|
|
111
|
+
J.onClick?.(e), !e.defaultPrevented && B();
|
|
112
|
+
}, X = (e) => {
|
|
113
|
+
J.onKeyDown?.(e), !e.defaultPrevented && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), B());
|
|
114
|
+
}, Z = {
|
|
115
|
+
onClick: Y,
|
|
116
|
+
"aria-haspopup": "menu",
|
|
117
|
+
"aria-expanded": M
|
|
118
|
+
};
|
|
119
|
+
O != null && O !== "" && (Z["aria-label"] = O), G ? J.type ?? (Z.type = "button") : (Z.onKeyDown = X, J.role ?? (Z.role = "button"), J.tabIndex ?? (Z.tabIndex = 0)), Z.ref = q;
|
|
120
|
+
let Q = {};
|
|
121
|
+
I != null && (Q = {
|
|
122
|
+
top: I.top,
|
|
123
|
+
left: I.left,
|
|
124
|
+
width: I.width
|
|
125
|
+
});
|
|
126
|
+
let te = D ?? document.body, ne = {
|
|
127
|
+
close: V,
|
|
128
|
+
open: ee,
|
|
129
|
+
isOpen: M
|
|
130
|
+
}, $ = null;
|
|
131
|
+
return M && ($ = h(/* @__PURE__ */ i("div", {
|
|
132
|
+
ref: F,
|
|
133
|
+
role: "menu",
|
|
134
|
+
className: e(n, r, y),
|
|
135
|
+
style: Q,
|
|
136
|
+
children: u
|
|
137
|
+
}), te)), /* @__PURE__ */ a(g.Provider, {
|
|
138
|
+
value: ne,
|
|
139
|
+
children: [/* @__PURE__ */ i("div", {
|
|
140
|
+
className: e(t, _),
|
|
141
|
+
ref: N,
|
|
142
|
+
children: o(U, Z)
|
|
143
|
+
}), $]
|
|
144
|
+
});
|
|
173
145
|
};
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//# sourceMappingURL=Dropdown.js.map
|
|
146
|
+
//#endregion
|
|
147
|
+
export { y as Dropdown, _ as useDropdown };
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=Dropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sources":["../../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type ReactElement,\n type JSX,\n type Ref,\n type MutableRefObject,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n createContext,\n useContext,\n isValidElement,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport * as classes from './dropdown.css.js';\nimport { cx } from '../../../theme/tools.js';\n\n// Types\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n close: () => void;\n open: () => void;\n isOpen: boolean;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n/**\n * Access the nearest Dropdown context. Throws if used outside a <Dropdown />.\n */\nexport const useDropdown = (): DropdownContextValue => {\n const ctx = useContext(DropdownContext);\n if (ctx == null) {\n throw new Error('useDropdown must be used within a <Dropdown />');\n }\n return ctx;\n};\n\nexport interface DropdownProps {\n trigger: ReactElement | ((isOpen: boolean) => ReactElement);\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n placement?: DropdownPlacement;\n offset?: number;\n matchTriggerWidth?: boolean;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n closeOnItemClick?: boolean;\n portalContainer?: HTMLElement | null;\n // Accessible label if trigger is an icon only\n ariaLabel?: string;\n}\n\ninterface PositionState {\n top: number;\n left: number;\n width?: number;\n}\n\nconst isForwardRefComponent = (type: unknown): boolean => {\n if (type == null || typeof type !== 'object') {\n return false;\n }\n return (\n (type as { $$typeof?: symbol }).$$typeof === Symbol.for('react.forward_ref')\n );\n};\n\n/**\n * A scalable, portal-based dropdown component with basic collision handling,\n * controlled/uncontrolled modes, accessibility attributes, and optional\n * trigger width matching. Content is rendered in a React portal (default: document.body).\n */\nexport const Dropdown = ({\n trigger,\n children,\n className,\n contentClassName,\n placement = 'bottom-start',\n offset = 4,\n matchTriggerWidth = true,\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnItemClick = false,\n portalContainer,\n ariaLabel,\n}: DropdownProps): JSX.Element => {\n const isControlled = open != null;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n let isOpen = uncontrolledOpen;\n if (isControlled) {\n isOpen = Boolean(open);\n }\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<PositionState | null>(null);\n // Accumulate manual cleanups for effects where returning a function violates lint rules.\n const cleanupRef = useRef<(() => void)[]>([]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const openFn = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n // Positioning logic\n const computePosition = useCallback(() => {\n const triggerEl = triggerRef.current;\n const contentEl = contentRef.current;\n if (triggerEl == null) {\n return;\n }\n if (contentEl == null) {\n return;\n }\n\n const rect = triggerEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'bottom-start':\n top = rect.bottom + offset;\n left = rect.left;\n break;\n case 'bottom-end':\n top = rect.bottom + offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n case 'top-start':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.left;\n break;\n case 'top-end':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n default:\n top = rect.bottom + offset;\n left = rect.left;\n }\n\n // Keep within viewport (basic collision handling)\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let width: number | undefined;\n if (matchTriggerWidth) {\n width = rect.width;\n }\n const contentWidth = width ?? contentEl.offsetWidth;\n\n if (left + contentWidth > vw - 4) {\n left = Math.max(4, vw - contentWidth - 4);\n }\n if (left < 4) left = 4;\n const contentHeight = contentEl.offsetHeight;\n if (top + contentHeight > vh - 4) {\n // Try flip to top if bottom overflows and initial was bottom\n if (placement.startsWith('bottom')) {\n const flippedTop = rect.top - contentHeight - offset;\n if (flippedTop >= 4) {\n top = flippedTop;\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n }\n if (top < 4) top = 4;\n\n setPosition({ top, left, width });\n }, [placement, offset, matchTriggerWidth]);\n\n useLayoutEffect(() => {\n if (isOpen) computePosition();\n }, [isOpen, computePosition, children]);\n\n useEffect(() => {\n if (!isOpen) return;\n const handle = () => {\n computePosition();\n };\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n const cleanup = () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, computePosition]);\n\n // Outside click & Escape\n useEffect(() => {\n if (!isOpen) return;\n const onDocMouseDown = (e: globalThis.MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current != null &&\n contentRef.current != null &&\n !containerRef.current.contains(target) &&\n !contentRef.current.contains(target)\n ) {\n close();\n }\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKey);\n const cleanup = () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKey);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, close]);\n\n // Keyboard navigation basic (ArrowDown focuses first focusable)\n useEffect(() => {\n if (!isOpen) return;\n const firstFocusable = contentRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n firstFocusable?.focus();\n }, [isOpen]);\n\n // Close on item click if enabled\n useEffect(() => {\n if (!isOpen || !closeOnItemClick) return;\n const handler = (e: globalThis.MouseEvent) => {\n if (contentRef.current?.contains(e.target as Node)) {\n close();\n }\n };\n document.addEventListener('click', handler, { capture: true });\n // Explicit cleanup without returning (lint rule forbids returning arrow fn)\n const cleanup = () => {\n document.removeEventListener('click', handler, { capture: true });\n };\n // Store in ref to run on unmount / dependency change\n cleanupRef.current.push(cleanup);\n }, [isOpen, closeOnItemClick, close]);\n // Run accumulated cleanups on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current.forEach((fn) => {\n fn();\n });\n cleanupRef.current = [];\n };\n }, []);\n\n let triggerElement = trigger;\n if (typeof trigger === 'function') {\n triggerElement = trigger(isOpen);\n }\n\n if (!isValidElement(triggerElement)) {\n throw new Error('Dropdown trigger must be a React element.');\n }\n\n const isHostElement = typeof triggerElement.type === 'string';\n const isButtonElement = isHostElement && triggerElement.type === 'button';\n const canAttachRef =\n isHostElement ||\n typeof triggerElement.type === 'function' ||\n isForwardRefComponent(triggerElement.type);\n\n if (!canAttachRef) {\n throw new Error(\n 'Dropdown trigger must be a DOM element or component that accepts a ref.',\n );\n }\n\n const triggerElementRef =\n (triggerElement.props as { ref?: Ref<HTMLElement> }).ref ??\n (triggerElement as ReactElement & { ref?: Ref<HTMLElement> }).ref;\n const setTriggerRef = (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof triggerElementRef === 'function') {\n triggerElementRef(node);\n } else if (triggerElementRef != null) {\n (triggerElementRef as MutableRefObject<HTMLElement | null>).current =\n node;\n }\n };\n\n const triggerProps = triggerElement.props as HTMLAttributes<HTMLElement> & {\n type?: string;\n };\n\n const handleTriggerClick = (event: ReactMouseEvent<HTMLElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n toggle();\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n };\n\n const mergedTriggerProps: Record<string, unknown> = {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n };\n\n if (ariaLabel != null && ariaLabel !== '') {\n mergedTriggerProps['aria-label'] = ariaLabel;\n }\n\n if (isButtonElement) {\n if (triggerProps.type == null) {\n mergedTriggerProps.type = 'button';\n }\n } else {\n mergedTriggerProps.onKeyDown = handleTriggerKeyDown;\n if (triggerProps.role == null) {\n mergedTriggerProps.role = 'button';\n }\n if (triggerProps.tabIndex == null) {\n mergedTriggerProps.tabIndex = 0;\n }\n }\n\n mergedTriggerProps.ref = setTriggerRef;\n\n let contentStyles: React.CSSProperties = {};\n if (position != null) {\n contentStyles = {\n top: position.top,\n left: position.left,\n width: position.width,\n };\n }\n\n const portalTarget = portalContainer ?? document.body;\n\n const contextValue: DropdownContextValue = {\n close,\n open: openFn,\n isOpen,\n };\n\n let dropdownContent: JSX.Element | null = null;\n if (isOpen) {\n dropdownContent = createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={cx(\n classes.content,\n classes.contentPositioned,\n contentClassName,\n )}\n style={contentStyles}\n >\n {children}\n </div>,\n portalTarget,\n );\n }\n\n return (\n <DropdownContext.Provider value={contextValue}>\n <div className={cx(classes.container, className)} ref={containerRef}>\n {cloneElement(triggerElement, mergedTriggerProps)}\n </div>\n {dropdownContent}\n </DropdownContext.Provider>\n );\n};\n"],"names":["DropdownContext","createContext","useDropdown","ctx","useContext","isForwardRefComponent","type","Dropdown","trigger","children","className","contentClassName","placement","offset","matchTriggerWidth","open","defaultOpen","onOpenChange","closeOnItemClick","portalContainer","ariaLabel","isControlled","uncontrolledOpen","setUncontrolledOpen","useState","isOpen","containerRef","useRef","triggerRef","contentRef","position","setPosition","cleanupRef","setOpen","useCallback","next","toggle","close","openFn","computePosition","triggerEl","contentEl","rect","top","left","vw","vh","width","contentWidth","contentHeight","flippedTop","useLayoutEffect","useEffect","handle","cleanup","onDocMouseDown","e","target","onKey","handler","fn","triggerElement","isValidElement","isHostElement","isButtonElement","triggerElementRef","setTriggerRef","node","triggerProps","handleTriggerClick","event","handleTriggerKeyDown","mergedTriggerProps","contentStyles","portalTarget","contextValue","dropdownContent","createPortal","jsx","cx","classes.content","classes.contentPositioned","jsxs","classes.container","cloneElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","names":[],"sources":["../../../../../src/atomic/molecules/dropdown/Dropdown.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type ReactElement,\n type JSX,\n type Ref,\n type MutableRefObject,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n createContext,\n useContext,\n isValidElement,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport * as classes from './dropdown.css.js';\nimport { cx } from '../../../theme/tools.js';\n\n// Types\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n close: () => void;\n open: () => void;\n isOpen: boolean;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n/**\n * Access the nearest Dropdown context. Throws if used outside a <Dropdown />.\n */\nexport const useDropdown = (): DropdownContextValue => {\n const ctx = useContext(DropdownContext);\n if (ctx == null) {\n throw new Error('useDropdown must be used within a <Dropdown />');\n }\n return ctx;\n};\n\nexport interface DropdownProps {\n trigger: ReactElement | ((isOpen: boolean) => ReactElement);\n children: ReactNode;\n className?: string;\n contentClassName?: string;\n placement?: DropdownPlacement;\n offset?: number;\n matchTriggerWidth?: boolean;\n open?: boolean; // controlled\n defaultOpen?: boolean; // uncontrolled\n onOpenChange?: (open: boolean) => void;\n closeOnItemClick?: boolean;\n portalContainer?: HTMLElement | null;\n // Accessible label if trigger is an icon only\n ariaLabel?: string;\n}\n\ninterface PositionState {\n top: number;\n left: number;\n width?: number;\n}\n\nconst isForwardRefComponent = (type: unknown): boolean => {\n if (type == null || typeof type !== 'object') {\n return false;\n }\n return (\n (type as { $$typeof?: symbol }).$$typeof === Symbol.for('react.forward_ref')\n );\n};\n\n/**\n * A scalable, portal-based dropdown component with basic collision handling,\n * controlled/uncontrolled modes, accessibility attributes, and optional\n * trigger width matching. Content is rendered in a React portal (default: document.body).\n */\nexport const Dropdown = ({\n trigger,\n children,\n className,\n contentClassName,\n placement = 'bottom-start',\n offset = 4,\n matchTriggerWidth = true,\n open,\n defaultOpen = false,\n onOpenChange,\n closeOnItemClick = false,\n portalContainer,\n ariaLabel,\n}: DropdownProps): JSX.Element => {\n const isControlled = open != null;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n let isOpen = uncontrolledOpen;\n if (isControlled) {\n isOpen = Boolean(open);\n }\n\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<PositionState | null>(null);\n // Accumulate manual cleanups for effects where returning a function violates lint rules.\n const cleanupRef = useRef<(() => void)[]>([]);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(next);\n }\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n const close = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const openFn = useCallback(() => {\n setOpen(true);\n }, [setOpen]);\n\n // Positioning logic\n const computePosition = useCallback(() => {\n const triggerEl = triggerRef.current;\n const contentEl = contentRef.current;\n if (triggerEl == null) {\n return;\n }\n if (contentEl == null) {\n return;\n }\n\n const rect = triggerEl.getBoundingClientRect();\n let top = 0;\n let left = 0;\n\n switch (placement) {\n case 'bottom-start':\n top = rect.bottom + offset;\n left = rect.left;\n break;\n case 'bottom-end':\n top = rect.bottom + offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n case 'top-start':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.left;\n break;\n case 'top-end':\n top = rect.top - contentEl.offsetHeight - offset;\n left = rect.right - contentEl.offsetWidth;\n break;\n default:\n top = rect.bottom + offset;\n left = rect.left;\n }\n\n // Keep within viewport (basic collision handling)\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n let width: number | undefined;\n if (matchTriggerWidth) {\n width = rect.width;\n }\n const contentWidth = width ?? contentEl.offsetWidth;\n\n if (left + contentWidth > vw - 4) {\n left = Math.max(4, vw - contentWidth - 4);\n }\n if (left < 4) left = 4;\n const contentHeight = contentEl.offsetHeight;\n if (top + contentHeight > vh - 4) {\n // Try flip to top if bottom overflows and initial was bottom\n if (placement.startsWith('bottom')) {\n const flippedTop = rect.top - contentHeight - offset;\n if (flippedTop >= 4) {\n top = flippedTop;\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n } else {\n top = Math.max(4, vh - contentHeight - 4);\n }\n }\n if (top < 4) top = 4;\n\n setPosition({ top, left, width });\n }, [placement, offset, matchTriggerWidth]);\n\n useLayoutEffect(() => {\n if (isOpen) computePosition();\n }, [isOpen, computePosition, children]);\n\n useEffect(() => {\n if (!isOpen) return;\n const handle = () => {\n computePosition();\n };\n window.addEventListener('resize', handle);\n window.addEventListener('scroll', handle, true);\n const cleanup = () => {\n window.removeEventListener('resize', handle);\n window.removeEventListener('scroll', handle, true);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, computePosition]);\n\n // Outside click & Escape\n useEffect(() => {\n if (!isOpen) return;\n const onDocMouseDown = (e: globalThis.MouseEvent) => {\n const target = e.target as Node;\n if (\n containerRef.current != null &&\n contentRef.current != null &&\n !containerRef.current.contains(target) &&\n !contentRef.current.contains(target)\n ) {\n close();\n }\n };\n const onKey = (e: globalThis.KeyboardEvent) => {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('mousedown', onDocMouseDown);\n document.addEventListener('keydown', onKey);\n const cleanup = () => {\n document.removeEventListener('mousedown', onDocMouseDown);\n document.removeEventListener('keydown', onKey);\n };\n cleanupRef.current.push(cleanup);\n }, [isOpen, close]);\n\n // Keyboard navigation basic (ArrowDown focuses first focusable)\n useEffect(() => {\n if (!isOpen) return;\n const firstFocusable = contentRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n firstFocusable?.focus();\n }, [isOpen]);\n\n // Close on item click if enabled\n useEffect(() => {\n if (!isOpen || !closeOnItemClick) return;\n const handler = (e: globalThis.MouseEvent) => {\n if (contentRef.current?.contains(e.target as Node)) {\n close();\n }\n };\n document.addEventListener('click', handler, { capture: true });\n // Explicit cleanup without returning (lint rule forbids returning arrow fn)\n const cleanup = () => {\n document.removeEventListener('click', handler, { capture: true });\n };\n // Store in ref to run on unmount / dependency change\n cleanupRef.current.push(cleanup);\n }, [isOpen, closeOnItemClick, close]);\n // Run accumulated cleanups on unmount\n useEffect(() => {\n return () => {\n cleanupRef.current.forEach((fn) => {\n fn();\n });\n cleanupRef.current = [];\n };\n }, []);\n\n let triggerElement = trigger;\n if (typeof trigger === 'function') {\n triggerElement = trigger(isOpen);\n }\n\n if (!isValidElement(triggerElement)) {\n throw new Error('Dropdown trigger must be a React element.');\n }\n\n const isHostElement = typeof triggerElement.type === 'string';\n const isButtonElement = isHostElement && triggerElement.type === 'button';\n const canAttachRef =\n isHostElement ||\n typeof triggerElement.type === 'function' ||\n isForwardRefComponent(triggerElement.type);\n\n if (!canAttachRef) {\n throw new Error(\n 'Dropdown trigger must be a DOM element or component that accepts a ref.',\n );\n }\n\n const triggerElementRef =\n (triggerElement.props as { ref?: Ref<HTMLElement> }).ref ??\n (triggerElement as ReactElement & { ref?: Ref<HTMLElement> }).ref;\n const setTriggerRef = (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof triggerElementRef === 'function') {\n triggerElementRef(node);\n } else if (triggerElementRef != null) {\n (triggerElementRef as MutableRefObject<HTMLElement | null>).current =\n node;\n }\n };\n\n const triggerProps = triggerElement.props as HTMLAttributes<HTMLElement> & {\n type?: string;\n };\n\n const handleTriggerClick = (event: ReactMouseEvent<HTMLElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n toggle();\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle();\n }\n };\n\n const mergedTriggerProps: Record<string, unknown> = {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n };\n\n if (ariaLabel != null && ariaLabel !== '') {\n mergedTriggerProps['aria-label'] = ariaLabel;\n }\n\n if (isButtonElement) {\n if (triggerProps.type == null) {\n mergedTriggerProps.type = 'button';\n }\n } else {\n mergedTriggerProps.onKeyDown = handleTriggerKeyDown;\n if (triggerProps.role == null) {\n mergedTriggerProps.role = 'button';\n }\n if (triggerProps.tabIndex == null) {\n mergedTriggerProps.tabIndex = 0;\n }\n }\n\n mergedTriggerProps.ref = setTriggerRef;\n\n let contentStyles: React.CSSProperties = {};\n if (position != null) {\n contentStyles = {\n top: position.top,\n left: position.left,\n width: position.width,\n };\n }\n\n const portalTarget = portalContainer ?? document.body;\n\n const contextValue: DropdownContextValue = {\n close,\n open: openFn,\n isOpen,\n };\n\n let dropdownContent: JSX.Element | null = null;\n if (isOpen) {\n dropdownContent = createPortal(\n <div\n ref={contentRef}\n role=\"menu\"\n className={cx(\n classes.content,\n classes.contentPositioned,\n contentClassName,\n )}\n style={contentStyles}\n >\n {children}\n </div>,\n portalTarget,\n );\n }\n\n return (\n <DropdownContext.Provider value={contextValue}>\n <div className={cx(classes.container, className)} ref={containerRef}>\n {cloneElement(triggerElement, mergedTriggerProps)}\n </div>\n {dropdownContent}\n </DropdownContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
/* empty css
|
|
2
|
-
/* empty css
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
i as hidden,
|
|
10
|
-
e as menu,
|
|
11
|
-
m as menuItem
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=dropdown.css.js.map
|
|
1
|
+
/* empty css */
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/atomic/molecules/dropdown/dropdown.css.ts
|
|
4
|
+
var e = "mr2gir0 txvbqbpsf", t = "mr2gir1 txvbqbuzn txvbqb1rx txvbqbuvx txvbqbl6f", n = "mr2gir2 txvbqbpso txvbqbt6x txvbqbdpf", r = "mr2gir3 txvbqb9hx", i = "mr2gir4 txvbqbl3f", a = "mr2gir5 txvbqbfax txvbqbfbo txvbqbl9f", o = "mr2gir6 txvbqbv";
|
|
5
|
+
//#endregion
|
|
6
|
+
export { e as container, t as content, n as contentPositioned, i as focusOutlineReset, r as hidden, a as menu, o as menuItem };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=dropdown.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.css.js","
|
|
1
|
+
{"version":3,"file":"dropdown.css.js","names":[],"sources":["../../../../../src/atomic/molecules/dropdown/dropdown.css.ts"],"sourcesContent":["import { sprinkles } from '../../../theme/sprinkles.css.js';\n\n// Container only wraps the trigger now; menu content is portaled to body.\nexport const container = sprinkles({\n position: 'relative',\n});\n\n// Base visual styling for the dropdown content. Position (top/left) is applied inline.\nexport const content = sprinkles({\n backgroundColor: 'white',\n borderRadius: 'xl',\n zIndex: 'modal',\n overflow: 'hidden',\n});\n\nexport const contentPositioned = sprinkles({\n position: 'fixed',\n top: 0,\n left: 0,\n});\n\nexport const hidden = sprinkles({\n display: 'none',\n});\n\nexport const focusOutlineReset = sprinkles({\n outline: 'none',\n});\n\nexport const menu = sprinkles({\n listStyleType: 'none',\n margin: 0,\n padding: 0,\n});\n\nexport const menuItem = sprinkles({\n cursor: 'pointer',\n});\n"],"mappings":""}
|
|
@@ -1,57 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Button as
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return /* @__PURE__ */ k("div", { className: d, children: [
|
|
29
|
-
/* @__PURE__ */ t(
|
|
30
|
-
l,
|
|
31
|
-
{
|
|
32
|
-
type: "button",
|
|
33
|
-
variant: "text",
|
|
34
|
-
onClick: n,
|
|
35
|
-
disabled: y,
|
|
36
|
-
className: N,
|
|
37
|
-
...x,
|
|
38
|
-
children: p
|
|
39
|
-
}
|
|
40
|
-
),
|
|
41
|
-
/* @__PURE__ */ t(
|
|
42
|
-
l,
|
|
43
|
-
{
|
|
44
|
-
type: "submit",
|
|
45
|
-
variant: "primary",
|
|
46
|
-
disabled: j,
|
|
47
|
-
className: L,
|
|
48
|
-
...h,
|
|
49
|
-
children: s
|
|
50
|
-
}
|
|
51
|
-
)
|
|
52
|
-
] });
|
|
1
|
+
import { useUiTranslation as e } from "../../../i18n/useUiTranslation.js";
|
|
2
|
+
import { Button as t } from "../../atoms/button/Button.js";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
|
+
//#region src/atomic/molecules/form-actions/FormActions.tsx
|
|
5
|
+
var i = ({ onCancel: i, cancelLabel: a, submitLabel: o, submitLoadingLabel: s, isSubmitting: c = !1, submitDisabled: l = !1, className: u, renderSubmitContent: d, submitButtonProps: f, cancelButtonProps: p }) => {
|
|
6
|
+
let { t: m } = e(), h = a ?? m("common.actions.cancel"), g = o ?? m("common.actions.save"), _ = s ?? m("common.actions.saving"), { className: v, disabled: y, ...b } = p ?? {}, { className: x, disabled: S, ...C } = f ?? {}, w;
|
|
7
|
+
w = d == null ? c ? _ : g : d(c);
|
|
8
|
+
let T = !!y, E = !!l || c || S === !0;
|
|
9
|
+
return /* @__PURE__ */ r("div", {
|
|
10
|
+
className: u,
|
|
11
|
+
children: [/* @__PURE__ */ n(t, {
|
|
12
|
+
type: "button",
|
|
13
|
+
variant: "text",
|
|
14
|
+
onClick: i,
|
|
15
|
+
disabled: T,
|
|
16
|
+
className: v,
|
|
17
|
+
...b,
|
|
18
|
+
children: h
|
|
19
|
+
}), /* @__PURE__ */ n(t, {
|
|
20
|
+
type: "submit",
|
|
21
|
+
variant: "primary",
|
|
22
|
+
disabled: E,
|
|
23
|
+
className: x,
|
|
24
|
+
...C,
|
|
25
|
+
children: w
|
|
26
|
+
})]
|
|
27
|
+
});
|
|
53
28
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=FormActions.js.map
|
|
29
|
+
//#endregion
|
|
30
|
+
export { i as FormActions };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=FormActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormActions.js","sources":["../../../../../src/atomic/molecules/form-actions/FormActions.tsx"],"sourcesContent":["import { type ComponentProps, type JSX, type ReactNode } from 'react';\n\nimport { Button } from '../../atoms/button/Button.js';\nimport { useUiTranslation } from '../../../i18n/useUiTranslation.js';\n\nexport type FormActionsProps = {\n onCancel: () => void;\n cancelLabel?: string;\n submitLabel?: string;\n submitLoadingLabel?: string;\n isSubmitting?: boolean;\n submitDisabled?: boolean;\n className?: string;\n renderSubmitContent?: (isSubmitting: boolean) => ReactNode;\n submitButtonProps?: Omit<ComponentProps<typeof Button>, 'children' | 'type'>;\n cancelButtonProps?: Omit<\n ComponentProps<typeof Button>,\n 'children' | 'type' | 'variant'\n >;\n};\n\nexport const FormActions = ({\n onCancel,\n cancelLabel,\n submitLabel,\n submitLoadingLabel,\n isSubmitting = false,\n submitDisabled = false,\n className,\n renderSubmitContent,\n submitButtonProps,\n cancelButtonProps,\n}: FormActionsProps): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedCancelLabel = cancelLabel ?? t('common.actions.cancel');\n const resolvedSubmitLabel = submitLabel ?? t('common.actions.save');\n const resolvedSubmitLoadingLabel =\n submitLoadingLabel ?? t('common.actions.saving');\n const cancelProps = cancelButtonProps ?? {};\n const {\n className: cancelClassName,\n disabled: cancelDisabled,\n ...restCancelButtonProps\n } = cancelProps;\n\n const submitProps = submitButtonProps ?? {};\n const {\n className: submitClassName,\n disabled: submitDisabledOverride,\n ...restSubmitButtonProps\n } = submitProps;\n\n let submitContent: ReactNode;\n\n if (renderSubmitContent != null) {\n submitContent = renderSubmitContent(isSubmitting);\n } else if (isSubmitting) {\n submitContent = resolvedSubmitLoadingLabel;\n } else {\n submitContent = resolvedSubmitLabel;\n }\n\n const isCancelDisabled = Boolean(cancelDisabled);\n const isSubmitDisabled =\n Boolean(submitDisabled) || isSubmitting || submitDisabledOverride === true;\n\n return (\n <div className={className}>\n <Button\n type=\"button\"\n variant=\"text\"\n onClick={onCancel}\n disabled={isCancelDisabled}\n className={cancelClassName}\n {...restCancelButtonProps}\n >\n {resolvedCancelLabel}\n </Button>\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={isSubmitDisabled}\n className={submitClassName}\n {...restSubmitButtonProps}\n >\n {submitContent}\n </Button>\n </div>\n );\n};\n"],"
|
|
1
|
+
{"version":3,"file":"FormActions.js","names":[],"sources":["../../../../../src/atomic/molecules/form-actions/FormActions.tsx"],"sourcesContent":["import { type ComponentProps, type JSX, type ReactNode } from 'react';\n\nimport { Button } from '../../atoms/button/Button.js';\nimport { useUiTranslation } from '../../../i18n/useUiTranslation.js';\n\nexport type FormActionsProps = {\n onCancel: () => void;\n cancelLabel?: string;\n submitLabel?: string;\n submitLoadingLabel?: string;\n isSubmitting?: boolean;\n submitDisabled?: boolean;\n className?: string;\n renderSubmitContent?: (isSubmitting: boolean) => ReactNode;\n submitButtonProps?: Omit<ComponentProps<typeof Button>, 'children' | 'type'>;\n cancelButtonProps?: Omit<\n ComponentProps<typeof Button>,\n 'children' | 'type' | 'variant'\n >;\n};\n\nexport const FormActions = ({\n onCancel,\n cancelLabel,\n submitLabel,\n submitLoadingLabel,\n isSubmitting = false,\n submitDisabled = false,\n className,\n renderSubmitContent,\n submitButtonProps,\n cancelButtonProps,\n}: FormActionsProps): JSX.Element => {\n const { t } = useUiTranslation();\n const resolvedCancelLabel = cancelLabel ?? t('common.actions.cancel');\n const resolvedSubmitLabel = submitLabel ?? t('common.actions.save');\n const resolvedSubmitLoadingLabel =\n submitLoadingLabel ?? t('common.actions.saving');\n const cancelProps = cancelButtonProps ?? {};\n const {\n className: cancelClassName,\n disabled: cancelDisabled,\n ...restCancelButtonProps\n } = cancelProps;\n\n const submitProps = submitButtonProps ?? {};\n const {\n className: submitClassName,\n disabled: submitDisabledOverride,\n ...restSubmitButtonProps\n } = submitProps;\n\n let submitContent: ReactNode;\n\n if (renderSubmitContent != null) {\n submitContent = renderSubmitContent(isSubmitting);\n } else if (isSubmitting) {\n submitContent = resolvedSubmitLoadingLabel;\n } else {\n submitContent = resolvedSubmitLabel;\n }\n\n const isCancelDisabled = Boolean(cancelDisabled);\n const isSubmitDisabled =\n Boolean(submitDisabled) || isSubmitting || submitDisabledOverride === true;\n\n return (\n <div className={className}>\n <Button\n type=\"button\"\n variant=\"text\"\n onClick={onCancel}\n disabled={isCancelDisabled}\n className={cancelClassName}\n {...restCancelButtonProps}\n >\n {resolvedCancelLabel}\n </Button>\n <Button\n type=\"submit\"\n variant=\"primary\"\n disabled={isSubmitDisabled}\n className={submitClassName}\n {...restSubmitButtonProps}\n >\n {submitContent}\n </Button>\n </div>\n );\n};\n"],"mappings":";;;;AAqBA,IAAa,KAAe,EAC1B,aACA,gBACA,gBACA,uBACA,kBAAe,IACf,oBAAiB,IACjB,cACA,wBACA,sBACA,2BACmC;CACnC,IAAM,EAAE,SAAM,GAAkB,EAC1B,IAAsB,KAAe,EAAE,wBAAwB,EAC/D,IAAsB,KAAe,EAAE,sBAAsB,EAC7D,IACJ,KAAsB,EAAE,wBAAwB,EAE5C,EACJ,WAAW,GACX,UAAU,GACV,GAAG,MAJe,KAAqB,EAAE,EAQrC,EACJ,WAAW,GACX,UAAU,GACV,GAAG,MAJe,KAAqB,EAAE,EAOvC;AAEJ,CACE,IADE,KAAuB,OAEhB,IACO,IAEA,IAJA,EAAoB,EAAa;CAOnD,IAAM,IAAmB,EAAQ,GAC3B,IACJ,EAAQ,KAAmB,KAAgB,MAA2B;AAExE,QACE,kBAAC,OAAD;EAAgB;YAAhB,CACE,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,SAAS;GACT,UAAU;GACV,WAAW;GACX,GAAI;aAEH;GACM,CAAA,EACT,kBAAC,GAAD;GACE,MAAK;GACL,SAAQ;GACR,UAAU;GACV,WAAW;GACX,GAAI;aAEH;GACM,CAAA,CACL"}
|