@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,185 +1,185 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { ChevronDownSvg as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
1
|
+
import { cx as e } from "../../theme/tools.js";
|
|
2
|
+
import { useUiTranslation as t } from "../../i18n/useUiTranslation.js";
|
|
3
|
+
import { ChevronDownSvg as n } from "../../icons/ChevronDownSvg.js";
|
|
4
|
+
import { actionsContainer as r, container as i, label as a, menu as o, menuOpen as s, menuSeparator as c, optionButton as l, optionDescription as u, optionSelected as d, trigger as f, triggerIcon as ee, triggerIconBrand as te, triggerIconOpen as ne, triggerOpen as re, valueText as ie } from "./SimpleSelect.css.js";
|
|
5
|
+
import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
6
|
+
import { useCallback as g, useEffect as _, useId as v, useMemo as y, useRef as b, useState as x } from "react";
|
|
7
|
+
//#region src/components/select/SimpleSelect.tsx
|
|
8
|
+
var S = ({ actionsSlot: S, className: C, isDisabled: w = !1, label: T, onChange: ae, options: E, placeholder: oe, value: D, variant: O = "default" }) => {
|
|
9
|
+
let { t: k } = t(), [A, j] = x(!1), M = oe ?? k("common.select.placeholder"), [N, P] = x(-1), F = b(null), I = b(null), L = b(/* @__PURE__ */ new Map()), R = v(), z = y(() => E.find((e) => e.value === D) ?? null, [E, D]);
|
|
10
|
+
_(() => {
|
|
11
|
+
if (!A) return;
|
|
12
|
+
let e = E.findIndex((e) => e.value === D), t = 0;
|
|
13
|
+
e >= 0 && (t = e), P(t);
|
|
14
|
+
}, [
|
|
15
|
+
A,
|
|
16
|
+
E,
|
|
17
|
+
D
|
|
18
|
+
]), _(() => {
|
|
19
|
+
if (!A || N < 0 || N >= E.length) return;
|
|
20
|
+
let e = E[N];
|
|
21
|
+
e != null && L.current.get(e.id)?.focus();
|
|
22
|
+
}, [
|
|
23
|
+
N,
|
|
24
|
+
A,
|
|
25
|
+
E
|
|
26
|
+
]), _(() => {
|
|
27
|
+
if (!A) return () => {};
|
|
28
|
+
let e = (e) => {
|
|
29
|
+
F.current?.contains(e.target) || j(!1);
|
|
30
|
+
}, t = (e) => {
|
|
31
|
+
e.key === "Escape" && (j(!1), I.current?.focus());
|
|
32
|
+
};
|
|
33
|
+
return document.addEventListener("mousedown", e), window.addEventListener("keydown", t), () => {
|
|
34
|
+
document.removeEventListener("mousedown", e), window.removeEventListener("keydown", t);
|
|
35
|
+
};
|
|
36
|
+
}, [A]), _(() => {
|
|
37
|
+
L.current.clear();
|
|
38
|
+
}, [E]);
|
|
39
|
+
let B = g(() => {
|
|
40
|
+
j(!1), requestAnimationFrame(() => {
|
|
41
|
+
I.current?.focus();
|
|
42
|
+
});
|
|
43
|
+
}, []), V = () => {
|
|
44
|
+
w || j((e) => !e);
|
|
45
|
+
}, H = (e) => {
|
|
46
|
+
ae(e), B();
|
|
47
|
+
}, U = (e) => {
|
|
48
|
+
w || (e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), j(!0));
|
|
49
|
+
}, W = (e) => {
|
|
50
|
+
E.length !== 0 && P((t) => {
|
|
51
|
+
if (t < 0) {
|
|
52
|
+
let t = E.length - 1;
|
|
53
|
+
return e === 1 && (t = 0), t;
|
|
54
|
+
}
|
|
55
|
+
return (t + e + E.length) % E.length;
|
|
56
|
+
});
|
|
57
|
+
}, G = (e) => {
|
|
58
|
+
switch (e.key) {
|
|
59
|
+
case "ArrowDown":
|
|
60
|
+
e.preventDefault(), W(1);
|
|
61
|
+
break;
|
|
62
|
+
case "ArrowUp":
|
|
63
|
+
e.preventDefault(), W(-1);
|
|
64
|
+
break;
|
|
65
|
+
case "Home":
|
|
66
|
+
e.preventDefault(), P(0);
|
|
67
|
+
break;
|
|
68
|
+
case "End":
|
|
69
|
+
e.preventDefault(), P(E.length - 1);
|
|
70
|
+
break;
|
|
71
|
+
case "Enter":
|
|
72
|
+
case " ":
|
|
73
|
+
if (e.preventDefault(), N >= 0 && N < E.length) {
|
|
74
|
+
let e = E[N];
|
|
75
|
+
e != null && H(e.value);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case "Escape":
|
|
79
|
+
e.preventDefault(), j(!1), I.current?.focus();
|
|
80
|
+
break;
|
|
81
|
+
default: break;
|
|
82
|
+
}
|
|
83
|
+
}, K = (e) => (t) => {
|
|
84
|
+
L.current.set(e, t);
|
|
85
|
+
}, q;
|
|
86
|
+
T != null && (q = `${R}-label`);
|
|
87
|
+
let se = () => typeof S == "function" ? S(B) : S ?? null, ce = E.map((t, n) => {
|
|
88
|
+
let r = t.value === D, i = e(l, { [d]: r }), a = -1;
|
|
89
|
+
N === n && (a = 0);
|
|
90
|
+
let o = null;
|
|
91
|
+
return t.description != null && t.description !== "" && (o = /* @__PURE__ */ m("span", {
|
|
92
|
+
className: u,
|
|
93
|
+
children: t.description
|
|
94
|
+
})), /* @__PURE__ */ m("li", {
|
|
95
|
+
role: "presentation",
|
|
96
|
+
children: /* @__PURE__ */ h("button", {
|
|
97
|
+
ref: K(t.id),
|
|
98
|
+
type: "button",
|
|
99
|
+
role: "option",
|
|
100
|
+
"aria-selected": r,
|
|
101
|
+
className: i,
|
|
102
|
+
tabIndex: a,
|
|
103
|
+
onClick: () => {
|
|
104
|
+
H(t.value);
|
|
105
|
+
},
|
|
106
|
+
onMouseEnter: () => {
|
|
107
|
+
P(n);
|
|
108
|
+
},
|
|
109
|
+
children: [/* @__PURE__ */ m("span", { children: t.label }), o]
|
|
110
|
+
})
|
|
111
|
+
}, t.id);
|
|
112
|
+
}), J;
|
|
113
|
+
N >= 0 && N < E.length && (J = E[N]?.id);
|
|
114
|
+
let Y = null;
|
|
115
|
+
T != null && (Y = /* @__PURE__ */ m("span", {
|
|
116
|
+
id: q,
|
|
117
|
+
className: a,
|
|
118
|
+
children: T
|
|
119
|
+
}));
|
|
120
|
+
let X;
|
|
121
|
+
A && (X = R);
|
|
122
|
+
let Z = null;
|
|
123
|
+
S != null && (Z = /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m("li", {
|
|
124
|
+
role: "presentation",
|
|
125
|
+
children: /* @__PURE__ */ m("div", {
|
|
126
|
+
className: c,
|
|
127
|
+
role: "separator"
|
|
128
|
+
})
|
|
129
|
+
}), /* @__PURE__ */ m("li", {
|
|
130
|
+
role: "presentation",
|
|
131
|
+
children: /* @__PURE__ */ m("div", {
|
|
132
|
+
className: r,
|
|
133
|
+
children: se()
|
|
134
|
+
})
|
|
135
|
+
})] }));
|
|
136
|
+
let Q = null;
|
|
137
|
+
A && (Q = /* @__PURE__ */ h("ul", {
|
|
138
|
+
id: R,
|
|
139
|
+
className: e(o, s),
|
|
140
|
+
role: "listbox",
|
|
141
|
+
"aria-activedescendant": J,
|
|
142
|
+
tabIndex: -1,
|
|
143
|
+
onKeyDown: G,
|
|
144
|
+
children: [ce, Z]
|
|
145
|
+
}));
|
|
146
|
+
let le = e(f({ variant: O }), { [re]: A }), $ = e(ee, {
|
|
147
|
+
[ne]: A,
|
|
148
|
+
[te]: O === "brand"
|
|
149
|
+
});
|
|
150
|
+
return /* @__PURE__ */ h("div", {
|
|
151
|
+
className: e(i, C),
|
|
152
|
+
ref: F,
|
|
153
|
+
children: [
|
|
154
|
+
Y,
|
|
155
|
+
/* @__PURE__ */ h("button", {
|
|
156
|
+
ref: I,
|
|
157
|
+
type: "button",
|
|
158
|
+
className: le,
|
|
159
|
+
"aria-haspopup": "listbox",
|
|
160
|
+
"aria-expanded": A,
|
|
161
|
+
"aria-controls": X,
|
|
162
|
+
"aria-labelledby": q,
|
|
163
|
+
onClick: V,
|
|
164
|
+
onKeyDown: U,
|
|
165
|
+
disabled: w,
|
|
166
|
+
children: [/* @__PURE__ */ m("span", {
|
|
167
|
+
className: ie,
|
|
168
|
+
children: z?.label ?? M
|
|
169
|
+
}), /* @__PURE__ */ m("span", {
|
|
170
|
+
className: $,
|
|
171
|
+
children: /* @__PURE__ */ m(n, {
|
|
172
|
+
width: 16,
|
|
173
|
+
height: 16,
|
|
174
|
+
"aria-hidden": "true"
|
|
175
|
+
})
|
|
176
|
+
})]
|
|
177
|
+
}),
|
|
178
|
+
Q
|
|
179
|
+
]
|
|
180
|
+
});
|
|
181
181
|
};
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
//# sourceMappingURL=SimpleSelect.js.map
|
|
182
|
+
//#endregion
|
|
183
|
+
export { S as SimpleSelect };
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=SimpleSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleSelect.js","sources":["../../../../src/components/select/SimpleSelect.tsx"],"sourcesContent":["import {\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ChevronDownSvg } from '../../icons/ChevronDownSvg.js';\n\nimport * as styles from './SimpleSelect.css.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nexport type SimpleSelectOption = {\n id: string;\n label: string;\n value: string;\n description?: string | null;\n};\n\ntype ActionSlot = ReactNode | ((closeMenu: () => void) => ReactNode);\n\ntype Props = {\n options: readonly SimpleSelectOption[];\n value: string;\n onChange: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n actionsSlot?: ActionSlot;\n isDisabled?: boolean;\n className?: string;\n variant?: 'default' | 'brand';\n};\n\nexport const SimpleSelect = ({\n actionsSlot,\n className,\n isDisabled = false,\n label,\n onChange,\n options,\n placeholder,\n value,\n variant = 'default',\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const resolvedPlaceholder = placeholder ?? t('common.select.placeholder');\n const [focusedIndex, setFocusedIndex] = useState<number>(-1);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const optionRefs = useRef<Map<string, HTMLButtonElement | null>>(new Map());\n const listboxId = useId();\n\n const selectedOption = useMemo(() => {\n return (\n options.find((option) => {\n return option.value === value;\n }) ?? null\n );\n }, [options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const selectedIndex = options.findIndex((option) => {\n return option.value === value;\n });\n let nextIndex = 0;\n if (selectedIndex >= 0) {\n nextIndex = selectedIndex;\n }\n setFocusedIndex(nextIndex);\n }, [isOpen, options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n if (focusedIndex < 0 || focusedIndex >= options.length) {\n return;\n }\n const option = options[focusedIndex];\n if (option == null) {\n return;\n }\n const node = optionRefs.current.get(option.id);\n node?.focus();\n }, [focusedIndex, isOpen, options]);\n\n useEffect(() => {\n if (!isOpen) {\n return () => {};\n }\n\n const handleClick = (event: MouseEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n optionRefs.current.clear();\n }, [options]);\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n }, []);\n\n const handleToggle = (): void => {\n if (isDisabled) {\n return;\n }\n setIsOpen((prev) => {\n return !prev;\n });\n };\n\n const handleSelect = (nextValue: string): void => {\n onChange(nextValue);\n closeMenu();\n };\n\n const handleTriggerKeyDown = (\n event: ReactKeyboardEvent<HTMLButtonElement>,\n ) => {\n if (isDisabled) {\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n const moveFocus = (direction: 1 | -1): void => {\n if (options.length === 0) {\n return;\n }\n setFocusedIndex((prev) => {\n if (prev < 0) {\n let fallbackIndex = options.length - 1;\n if (direction === 1) {\n fallbackIndex = 0;\n }\n return fallbackIndex;\n }\n const nextIndex = (prev + direction + options.length) % options.length;\n return nextIndex;\n });\n };\n\n const handleListKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n setFocusedIndex(0);\n break;\n case 'End':\n event.preventDefault();\n setFocusedIndex(options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n const option = options[focusedIndex];\n if (option != null) {\n handleSelect(option.value);\n }\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n break;\n default:\n break;\n }\n };\n\n const registerOptionRef = (optionId: string) => {\n return (node: HTMLButtonElement | null) => {\n optionRefs.current.set(optionId, node);\n };\n };\n\n let labelId: string | undefined;\n if (label != null) {\n labelId = `${listboxId}-label`;\n }\n\n const renderActionsSlot = (): ReactNode | null => {\n if (typeof actionsSlot === 'function') {\n return actionsSlot(closeMenu);\n }\n return actionsSlot ?? null;\n };\n\n const optionItems = options.map((option, index) => {\n const isSelected = option.value === value;\n const optionClassName = cx(styles.optionButton, {\n [styles.optionSelected]: isSelected,\n });\n let optionTabIndex = -1;\n if (focusedIndex === index) {\n optionTabIndex = 0;\n }\n\n let descriptionNode: JSX.Element | null = null;\n if (option.description != null && option.description !== '') {\n descriptionNode = (\n <span className={styles.optionDescription}>{option.description}</span>\n );\n }\n\n return (\n <li key={option.id} role=\"presentation\">\n <button\n ref={registerOptionRef(option.id)}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={optionClassName}\n tabIndex={optionTabIndex}\n onClick={() => {\n handleSelect(option.value);\n }}\n onMouseEnter={() => {\n setFocusedIndex(index);\n }}\n >\n <span>{option.label}</span>\n {descriptionNode}\n </button>\n </li>\n );\n });\n\n let activeOptionId: string | undefined;\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n activeOptionId = options[focusedIndex]?.id;\n }\n\n let labelNode: JSX.Element | null = null;\n if (label != null) {\n labelNode = (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n );\n }\n\n let ariaControls: string | undefined;\n if (isOpen) {\n ariaControls = listboxId;\n }\n\n let actionsSlotNode: ReactNode | null = null;\n if (actionsSlot != null) {\n actionsSlotNode = (\n <>\n <li role=\"presentation\">\n <div className={styles.menuSeparator} role=\"separator\" />\n </li>\n <li role=\"presentation\">\n <div className={styles.actionsContainer}>{renderActionsSlot()}</div>\n </li>\n </>\n );\n }\n\n let menuNode: JSX.Element | null = null;\n if (isOpen) {\n menuNode = (\n <ul\n id={listboxId}\n className={cx(styles.menu, styles.menuOpen)}\n role=\"listbox\"\n aria-activedescendant={activeOptionId}\n tabIndex={-1}\n onKeyDown={handleListKeyDown}\n >\n {optionItems}\n {actionsSlotNode}\n </ul>\n );\n }\n\n const triggerClassName = cx(styles.trigger({ variant }), {\n [styles.triggerOpen]: isOpen,\n });\n const triggerIconClassName = cx(styles.triggerIcon, {\n [styles.triggerIconOpen]: isOpen,\n [styles.triggerIconBrand]: variant === 'brand',\n });\n\n return (\n <div className={cx(styles.container, className)} ref={containerRef}>\n {labelNode}\n <button\n ref={triggerRef}\n type=\"button\"\n className={triggerClassName}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={ariaControls}\n aria-labelledby={labelId}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n disabled={isDisabled}\n >\n <span className={styles.valueText}>\n {selectedOption?.label ?? resolvedPlaceholder}\n </span>\n <span className={triggerIconClassName}>\n <ChevronDownSvg width={16} height={16} aria-hidden=\"true\" />\n </span>\n </button>\n {menuNode}\n </div>\n );\n};\n"],"names":["SimpleSelect","actionsSlot","className","isDisabled","label","onChange","options","placeholder","value","variant","t","useUiTranslation","isOpen","setIsOpen","useState","resolvedPlaceholder","focusedIndex","setFocusedIndex","containerRef","useRef","triggerRef","optionRefs","listboxId","useId","selectedOption","useMemo","option","useEffect","selectedIndex","nextIndex","handleClick","event","handleKeyDown","closeMenu","useCallback","handleToggle","prev","handleSelect","nextValue","handleTriggerKeyDown","moveFocus","direction","fallbackIndex","handleListKeyDown","registerOptionRef","optionId","node","labelId","renderActionsSlot","optionItems","index","isSelected","optionClassName","cx","styles.optionButton","styles.optionSelected","optionTabIndex","descriptionNode","styles.optionDescription","jsx","jsxs","activeOptionId","labelNode","styles.label","ariaControls","actionsSlotNode","Fragment","styles.menuSeparator","styles.actionsContainer","menuNode","styles.menu","styles.menuOpen","triggerClassName","styles.trigger","styles.triggerOpen","triggerIconClassName","styles.triggerIcon","styles.triggerIconOpen","styles.triggerIconBrand","styles.container","styles.valueText","ChevronDownSvg"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SimpleSelect.js","names":[],"sources":["../../../../src/components/select/SimpleSelect.tsx"],"sourcesContent":["import {\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { ChevronDownSvg } from '../../icons/ChevronDownSvg.js';\n\nimport * as styles from './SimpleSelect.css.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nexport type SimpleSelectOption = {\n id: string;\n label: string;\n value: string;\n description?: string | null;\n};\n\ntype ActionSlot = ReactNode | ((closeMenu: () => void) => ReactNode);\n\ntype Props = {\n options: readonly SimpleSelectOption[];\n value: string;\n onChange: (value: string) => void;\n label?: ReactNode;\n placeholder?: string;\n actionsSlot?: ActionSlot;\n isDisabled?: boolean;\n className?: string;\n variant?: 'default' | 'brand';\n};\n\nexport const SimpleSelect = ({\n actionsSlot,\n className,\n isDisabled = false,\n label,\n onChange,\n options,\n placeholder,\n value,\n variant = 'default',\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const resolvedPlaceholder = placeholder ?? t('common.select.placeholder');\n const [focusedIndex, setFocusedIndex] = useState<number>(-1);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const optionRefs = useRef<Map<string, HTMLButtonElement | null>>(new Map());\n const listboxId = useId();\n\n const selectedOption = useMemo(() => {\n return (\n options.find((option) => {\n return option.value === value;\n }) ?? null\n );\n }, [options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n const selectedIndex = options.findIndex((option) => {\n return option.value === value;\n });\n let nextIndex = 0;\n if (selectedIndex >= 0) {\n nextIndex = selectedIndex;\n }\n setFocusedIndex(nextIndex);\n }, [isOpen, options, value]);\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n if (focusedIndex < 0 || focusedIndex >= options.length) {\n return;\n }\n const option = options[focusedIndex];\n if (option == null) {\n return;\n }\n const node = optionRefs.current.get(option.id);\n node?.focus();\n }, [focusedIndex, isOpen, options]);\n\n useEffect(() => {\n if (!isOpen) {\n return () => {};\n }\n\n const handleClick = (event: MouseEvent) => {\n if (containerRef.current?.contains(event.target as Node)) {\n return;\n }\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen]);\n\n useEffect(() => {\n optionRefs.current.clear();\n }, [options]);\n\n const closeMenu = useCallback(() => {\n setIsOpen(false);\n requestAnimationFrame(() => {\n triggerRef.current?.focus();\n });\n }, []);\n\n const handleToggle = (): void => {\n if (isDisabled) {\n return;\n }\n setIsOpen((prev) => {\n return !prev;\n });\n };\n\n const handleSelect = (nextValue: string): void => {\n onChange(nextValue);\n closeMenu();\n };\n\n const handleTriggerKeyDown = (\n event: ReactKeyboardEvent<HTMLButtonElement>,\n ) => {\n if (isDisabled) {\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setIsOpen(true);\n }\n };\n\n const moveFocus = (direction: 1 | -1): void => {\n if (options.length === 0) {\n return;\n }\n setFocusedIndex((prev) => {\n if (prev < 0) {\n let fallbackIndex = options.length - 1;\n if (direction === 1) {\n fallbackIndex = 0;\n }\n return fallbackIndex;\n }\n const nextIndex = (prev + direction + options.length) % options.length;\n return nextIndex;\n });\n };\n\n const handleListKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n setFocusedIndex(0);\n break;\n case 'End':\n event.preventDefault();\n setFocusedIndex(options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n const option = options[focusedIndex];\n if (option != null) {\n handleSelect(option.value);\n }\n }\n break;\n }\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n triggerRef.current?.focus();\n break;\n default:\n break;\n }\n };\n\n const registerOptionRef = (optionId: string) => {\n return (node: HTMLButtonElement | null) => {\n optionRefs.current.set(optionId, node);\n };\n };\n\n let labelId: string | undefined;\n if (label != null) {\n labelId = `${listboxId}-label`;\n }\n\n const renderActionsSlot = (): ReactNode | null => {\n if (typeof actionsSlot === 'function') {\n return actionsSlot(closeMenu);\n }\n return actionsSlot ?? null;\n };\n\n const optionItems = options.map((option, index) => {\n const isSelected = option.value === value;\n const optionClassName = cx(styles.optionButton, {\n [styles.optionSelected]: isSelected,\n });\n let optionTabIndex = -1;\n if (focusedIndex === index) {\n optionTabIndex = 0;\n }\n\n let descriptionNode: JSX.Element | null = null;\n if (option.description != null && option.description !== '') {\n descriptionNode = (\n <span className={styles.optionDescription}>{option.description}</span>\n );\n }\n\n return (\n <li key={option.id} role=\"presentation\">\n <button\n ref={registerOptionRef(option.id)}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n className={optionClassName}\n tabIndex={optionTabIndex}\n onClick={() => {\n handleSelect(option.value);\n }}\n onMouseEnter={() => {\n setFocusedIndex(index);\n }}\n >\n <span>{option.label}</span>\n {descriptionNode}\n </button>\n </li>\n );\n });\n\n let activeOptionId: string | undefined;\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n activeOptionId = options[focusedIndex]?.id;\n }\n\n let labelNode: JSX.Element | null = null;\n if (label != null) {\n labelNode = (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n );\n }\n\n let ariaControls: string | undefined;\n if (isOpen) {\n ariaControls = listboxId;\n }\n\n let actionsSlotNode: ReactNode | null = null;\n if (actionsSlot != null) {\n actionsSlotNode = (\n <>\n <li role=\"presentation\">\n <div className={styles.menuSeparator} role=\"separator\" />\n </li>\n <li role=\"presentation\">\n <div className={styles.actionsContainer}>{renderActionsSlot()}</div>\n </li>\n </>\n );\n }\n\n let menuNode: JSX.Element | null = null;\n if (isOpen) {\n menuNode = (\n <ul\n id={listboxId}\n className={cx(styles.menu, styles.menuOpen)}\n role=\"listbox\"\n aria-activedescendant={activeOptionId}\n tabIndex={-1}\n onKeyDown={handleListKeyDown}\n >\n {optionItems}\n {actionsSlotNode}\n </ul>\n );\n }\n\n const triggerClassName = cx(styles.trigger({ variant }), {\n [styles.triggerOpen]: isOpen,\n });\n const triggerIconClassName = cx(styles.triggerIcon, {\n [styles.triggerIconOpen]: isOpen,\n [styles.triggerIconBrand]: variant === 'brand',\n });\n\n return (\n <div className={cx(styles.container, className)} ref={containerRef}>\n {labelNode}\n <button\n ref={triggerRef}\n type=\"button\"\n className={triggerClassName}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={ariaControls}\n aria-labelledby={labelId}\n onClick={handleToggle}\n onKeyDown={handleTriggerKeyDown}\n disabled={isDisabled}\n >\n <span className={styles.valueText}>\n {selectedOption?.label ?? resolvedPlaceholder}\n </span>\n <span className={triggerIconClassName}>\n <ChevronDownSvg width={16} height={16} aria-hidden=\"true\" />\n </span>\n </button>\n {menuNode}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
/* empty css
|
|
2
|
-
/* empty css
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=RefetchNeededBanner.css.js.map
|
|
1
|
+
/* empty css */
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/components/subscriptions/RefetchNeededBanner.css.ts
|
|
4
|
+
var e = "_1onl44v0 txvbqbnvf txvbqboio txvbqbp5o txvbqblxf txvbqb9io txvbqbco txvbqbdoo txvbqbaof txvbqb1rf txvbqb1co txvbqb1qf txvbqbix txvbqbv09 txvbqbv69", t = "_1onl44v1 txvbqb9io txvbqbai6 txvbqbanx txvbqbk4x", n = "_1onl44v2 txvbqbfbo txvbqbamo txvbqb8x", r = "_1onl44v3 txvbqbfbo txvbqb8x txvbqbf4f";
|
|
5
|
+
//#endregion
|
|
6
|
+
export { t as content, r as message, e as root, n as title };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=RefetchNeededBanner.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefetchNeededBanner.css.js","
|
|
1
|
+
{"version":3,"file":"RefetchNeededBanner.css.js","names":[],"sources":["../../../../src/components/subscriptions/RefetchNeededBanner.css.ts"],"sourcesContent":["import { sprinkles } from '../../theme/sprinkles.css.js';\n\nexport const root = sprinkles({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 3,\n paddingY: 3,\n paddingX: 4,\n borderRadius: 'md',\n borderWidth: 'default',\n borderStyle: 'solid',\n borderColor: 'amber-200',\n backgroundColor: 'amber-50',\n color: 'amber-900',\n});\n\nexport const content = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n minWidth: 0,\n});\n\nexport const title = sprinkles({\n margin: 0,\n fontWeight: 'semibold',\n fontSize: 'sm',\n});\n\nexport const message = sprinkles({\n margin: 0,\n fontSize: 'sm',\n lineHeight: 1.4,\n});\n"],"mappings":""}
|
|
@@ -1,24 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { cx as e } from "../../theme/tools.js";
|
|
2
|
+
import { useUiTranslation as t } from "../../i18n/useUiTranslation.js";
|
|
3
|
+
import { Button as n } from "../../atomic/atoms/button/Button.js";
|
|
4
|
+
import { content as r, message as i, root as a, title as o } from "./RefetchNeededBanner.css.js";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/subscriptions/RefetchNeededBanner.tsx
|
|
7
|
+
var l = ({ reason: l, onReload: u, className: d }) => {
|
|
8
|
+
let { t: f } = t(), p = f("subscriptions.refetchNeeded.messages.default");
|
|
9
|
+
return l === "CURSOR_REPLAY_UNAVAILABLE" ? p = f("subscriptions.refetchNeeded.messages.cursorReplayUnavailable") : l === "BUFFER_OVERFLOW" && (p = f("subscriptions.refetchNeeded.messages.bufferOverflow")), /* @__PURE__ */ c("div", {
|
|
10
|
+
className: e(a, d),
|
|
11
|
+
children: [/* @__PURE__ */ c("div", {
|
|
12
|
+
className: r,
|
|
13
|
+
children: [/* @__PURE__ */ s("p", {
|
|
14
|
+
className: o,
|
|
15
|
+
children: f("subscriptions.refetchNeeded.title")
|
|
16
|
+
}), /* @__PURE__ */ s("p", {
|
|
17
|
+
className: i,
|
|
18
|
+
children: p
|
|
19
|
+
})]
|
|
20
|
+
}), /* @__PURE__ */ s(n, {
|
|
21
|
+
type: "button",
|
|
22
|
+
variant: "secondary",
|
|
23
|
+
size: "small",
|
|
24
|
+
onClick: u,
|
|
25
|
+
children: f("subscriptions.refetchNeeded.actions.reload")
|
|
26
|
+
})]
|
|
27
|
+
});
|
|
20
28
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=RefetchNeededBanner.js.map
|
|
29
|
+
//#endregion
|
|
30
|
+
export { l as RefetchNeededBanner };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=RefetchNeededBanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefetchNeededBanner.js","sources":["../../../../src/components/subscriptions/RefetchNeededBanner.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport { Button } from '../../atomic/atoms/button/Button.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nimport * as styles from './RefetchNeededBanner.css.js';\n\ntype Props = {\n reason: string;\n onReload: () => void;\n className?: string;\n};\n\nexport const RefetchNeededBanner = ({\n reason,\n onReload,\n className,\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n let message = t('subscriptions.refetchNeeded.messages.default');\n if (reason === 'CURSOR_REPLAY_UNAVAILABLE') {\n message = t('subscriptions.refetchNeeded.messages.cursorReplayUnavailable');\n } else if (reason === 'BUFFER_OVERFLOW') {\n message = t('subscriptions.refetchNeeded.messages.bufferOverflow');\n }\n\n return (\n <div className={cx(styles.root, className)}>\n <div className={styles.content}>\n <p className={styles.title}>{t('subscriptions.refetchNeeded.title')}</p>\n <p className={styles.message}>{message}</p>\n </div>\n <Button type=\"button\" variant=\"secondary\" size=\"small\" onClick={onReload}>\n {t('subscriptions.refetchNeeded.actions.reload')}\n </Button>\n </div>\n );\n};\n"],"
|
|
1
|
+
{"version":3,"file":"RefetchNeededBanner.js","names":[],"sources":["../../../../src/components/subscriptions/RefetchNeededBanner.tsx"],"sourcesContent":["import { type JSX } from 'react';\n\nimport { Button } from '../../atomic/atoms/button/Button.js';\nimport { cx } from '../../theme/tools.js';\nimport { useUiTranslation } from '../../i18n/useUiTranslation.js';\n\nimport * as styles from './RefetchNeededBanner.css.js';\n\ntype Props = {\n reason: string;\n onReload: () => void;\n className?: string;\n};\n\nexport const RefetchNeededBanner = ({\n reason,\n onReload,\n className,\n}: Props): JSX.Element => {\n const { t } = useUiTranslation();\n let message = t('subscriptions.refetchNeeded.messages.default');\n if (reason === 'CURSOR_REPLAY_UNAVAILABLE') {\n message = t('subscriptions.refetchNeeded.messages.cursorReplayUnavailable');\n } else if (reason === 'BUFFER_OVERFLOW') {\n message = t('subscriptions.refetchNeeded.messages.bufferOverflow');\n }\n\n return (\n <div className={cx(styles.root, className)}>\n <div className={styles.content}>\n <p className={styles.title}>{t('subscriptions.refetchNeeded.title')}</p>\n <p className={styles.message}>{message}</p>\n </div>\n <Button type=\"button\" variant=\"secondary\" size=\"small\" onClick={onReload}>\n {t('subscriptions.refetchNeeded.actions.reload')}\n </Button>\n </div>\n );\n};\n"],"mappings":";;;;;;AAcA,IAAa,KAAuB,EAClC,WACA,aACA,mBACwB;CACxB,IAAM,EAAE,SAAM,GAAkB,EAC5B,IAAU,EAAE,+CAA+C;AAO/D,QANI,MAAW,8BACb,IAAU,EAAE,+DAA+D,GAClE,MAAW,sBACpB,IAAU,EAAE,sDAAsD,GAIlE,kBAAC,OAAD;EAAK,WAAW,EAAG,GAAa,EAAU;YAA1C,CACE,kBAAC,OAAD;GAAK,WAAW;aAAhB,CACE,kBAAC,KAAD;IAAG,WAAW;cAAe,EAAE,oCAAoC;IAAK,CAAA,EACxE,kBAAC,KAAD;IAAG,WAAW;cAAiB;IAAY,CAAA,CACvC;MACN,kBAAC,GAAD;GAAQ,MAAK;GAAS,SAAQ;GAAY,MAAK;GAAQ,SAAS;aAC7D,EAAE,6CAA6C;GACzC,CAAA,CACL"}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
/* empty css
|
|
2
|
-
/* empty css
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
i as headingGroup,
|
|
10
|
-
x as interactive,
|
|
11
|
-
a as interactiveButton,
|
|
12
|
-
q as interactiveLink,
|
|
13
|
-
k as meta,
|
|
14
|
-
m as subtitle,
|
|
15
|
-
t as tile,
|
|
16
|
-
r as title
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=InfoTile.css.js.map
|
|
1
|
+
/* empty css */
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/components/tile/InfoTile.css.ts
|
|
4
|
+
var e = "_1mkg78a0 txvbqbu6f txvbqb1s6 txvbqbv2d txvbqblax txvbqb9io txvbqbai6 txvbqbaoo txvbqb8pf", t = "_1mkg78a2 _1mkg78a1 txvbqb77 txvbqb6y txvbqb7k", n = "_1mkg78a3 txvbqb3b txvbqbu6f txvbqb9jf", r = "_1mkg78a6 _1mkg78a4 txvbqb4 _1mkg78a5 txvbqbv txvbqb9jf txvbqbu6f", i = "_1mkg78a7 txvbqb9io txvbqbajx txvbqbcf txvbqbdoo txvbqbaof", a = "_1mkg78a8 txvbqb9io txvbqbai6 txvbqbanx txvbqbk4x", o = "_1mkg78a9 txvbqb9o txvbqbf4f txvbqbamo txvbqbv8p txvbqbfbo", s = "_1mkg78aa txvbqbfbo txvbqb8x txvbqban6", c = "_1mkg78ab txvbqb8x txvbqbv8r txvbqb9io txvbqbajx txvbqbao6", l = "_1mkg78ac txvbqb96 txvbqbv8p txvbqb9io txvbqbai6 txvbqbao6", u = "_1mkg78ad txvbqb9io txvbqbajx txvbqbaof txvbqbco txvbqbdoo txvbqb8x txvbqbv8r", d = "_1mkg78ae txvbqb9io txvbqbco txvbqbao6 txvbqbgwf";
|
|
5
|
+
//#endregion
|
|
6
|
+
export { d as actions, l as body, u as footer, i as header, a as headingGroup, t as interactive, r as interactiveButton, n as interactiveLink, c as meta, s as subtitle, e as tile, o as title };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=InfoTile.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoTile.css.js","
|
|
1
|
+
{"version":3,"file":"InfoTile.css.js","names":[],"sources":["../../../../src/components/tile/InfoTile.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nimport { sprinkles } from '../../theme/sprinkles.css.js';\nimport { vars } from '../../theme/themeContract.js';\n\nexport const tile = sprinkles({\n width: 'full',\n borderRadius: '2xl',\n backgroundColor: 'black-10',\n padding: 6,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n boxShadow: 'sm',\n});\n\nexport const interactive = style([\n sprinkles({\n transitionProperty: 'default',\n transitionDuration: 160,\n transitionTimingFunction: 'ease',\n }),\n {\n selectors: {\n '&:hover': {\n boxShadow: vars.boxShadow.md,\n transform: 'translateY(-2px)',\n },\n '&:focus-visible': {\n outline: `2px solid ${vars.colors['blue-500']}`,\n outlineOffset: '2px',\n },\n },\n },\n]);\n\nexport const interactiveLink = sprinkles({\n textDecoration: 'none',\n width: 'full',\n display: 'inline-flex',\n});\n\nconst interactiveButtonReset = sprinkles({\n all: 'unset',\n});\n\nexport const interactiveButton = style([\n interactiveButtonReset,\n sprinkles({\n cursor: 'pointer',\n display: 'inline-flex',\n width: 'full',\n }),\n]);\n\nexport const header = sprinkles({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 3,\n});\n\nexport const headingGroup = sprinkles({\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n minWidth: 0,\n});\n\nexport const title = sprinkles({\n fontSize: 'xl',\n lineHeight: 1.4,\n fontWeight: 'semibold',\n color: 'text',\n margin: 0,\n});\n\nexport const subtitle = sprinkles({\n margin: 0,\n fontSize: 'sm',\n fontWeight: 'extrabold',\n});\n\nexport const meta = sprinkles({\n fontSize: 'sm',\n color: 'textSecondary',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 2,\n});\n\nexport const body = sprinkles({\n fontSize: 'base',\n color: 'text',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n});\n\nexport const footer = sprinkles({\n display: 'flex',\n flexWrap: 'wrap',\n gap: 3,\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: 'sm',\n color: 'textSecondary',\n});\n\nexport const actions = sprinkles({\n display: 'flex',\n alignItems: 'center',\n gap: 2,\n marginLeft: 'auto',\n});\n"],"mappings":""}
|