@work-rjkashyap/unified-ui 0.3.3 → 0.3.5
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/CHANGELOG.md +105 -0
- package/LICENSE +21 -0
- package/dist/components/accordion.cjs +225 -0
- package/dist/components/accordion.d.cts +157 -0
- package/dist/components/accordion.d.ts +157 -0
- package/dist/components/accordion.mjs +199 -0
- package/dist/components/alert-dialog.cjs +246 -0
- package/dist/components/alert-dialog.d.cts +61 -0
- package/dist/components/alert-dialog.d.ts +61 -0
- package/dist/components/alert-dialog.mjs +218 -0
- package/dist/components/alert.cjs +401 -0
- package/dist/components/alert.d.cts +217 -0
- package/dist/components/alert.d.ts +217 -0
- package/dist/components/alert.mjs +374 -0
- package/dist/components/aspect-ratio.cjs +45 -0
- package/dist/components/aspect-ratio.d.cts +10 -0
- package/dist/components/aspect-ratio.d.ts +10 -0
- package/dist/components/aspect-ratio.mjs +23 -0
- package/dist/components/avatar.cjs +348 -0
- package/dist/components/avatar.d.cts +198 -0
- package/dist/components/avatar.d.ts +198 -0
- package/dist/components/avatar.mjs +329 -0
- package/dist/components/badge.cjs +325 -0
- package/dist/components/badge.d.cts +259 -0
- package/dist/components/badge.d.ts +259 -0
- package/dist/components/badge.mjs +298 -0
- package/dist/components/banner.cjs +147 -0
- package/dist/components/banner.d.cts +31 -0
- package/dist/components/banner.d.ts +31 -0
- package/dist/components/banner.mjs +122 -0
- package/dist/components/breadcrumb.cjs +266 -0
- package/dist/components/breadcrumb.d.cts +159 -0
- package/dist/components/breadcrumb.d.ts +159 -0
- package/dist/components/breadcrumb.mjs +235 -0
- package/dist/components/button.cjs +254 -0
- package/dist/components/button.d.cts +126 -0
- package/dist/components/button.d.ts +126 -0
- package/dist/components/button.mjs +229 -0
- package/dist/components/calendar.cjs +511 -0
- package/dist/components/calendar.d.cts +94 -0
- package/dist/components/calendar.d.ts +94 -0
- package/dist/components/calendar.mjs +492 -0
- package/dist/components/card.cjs +234 -0
- package/dist/components/card.d.cts +190 -0
- package/dist/components/card.d.ts +190 -0
- package/dist/components/card.mjs +210 -0
- package/dist/components/carousel.cjs +234 -0
- package/dist/components/carousel.d.cts +30 -0
- package/dist/components/carousel.d.ts +30 -0
- package/dist/components/carousel.mjs +217 -0
- package/dist/components/chart.cjs +122 -0
- package/dist/components/chart.d.cts +103 -0
- package/dist/components/chart.d.ts +103 -0
- package/dist/components/chart.mjs +96 -0
- package/dist/components/checkbox.cjs +318 -0
- package/dist/components/checkbox.d.cts +182 -0
- package/dist/components/checkbox.d.ts +182 -0
- package/dist/components/checkbox.mjs +296 -0
- package/dist/components/code-highlight.cjs +335 -0
- package/dist/components/code-highlight.d.cts +18 -0
- package/dist/components/code-highlight.d.ts +18 -0
- package/dist/components/code-highlight.mjs +308 -0
- package/dist/components/code.cjs +265 -0
- package/dist/components/code.d.cts +40 -0
- package/dist/components/code.d.ts +40 -0
- package/dist/components/code.mjs +243 -0
- package/dist/components/collapsible.cjs +143 -0
- package/dist/components/collapsible.d.cts +159 -0
- package/dist/components/collapsible.d.ts +159 -0
- package/dist/components/collapsible.mjs +123 -0
- package/dist/components/color-picker.cjs +348 -0
- package/dist/components/color-picker.d.cts +35 -0
- package/dist/components/color-picker.d.ts +35 -0
- package/dist/components/color-picker.mjs +331 -0
- package/dist/components/combobox.cjs +584 -0
- package/dist/components/combobox.d.cts +183 -0
- package/dist/components/combobox.d.ts +183 -0
- package/dist/components/combobox.mjs +571 -0
- package/dist/components/command.cjs +329 -0
- package/dist/components/command.d.cts +97 -0
- package/dist/components/command.d.ts +97 -0
- package/dist/components/command.mjs +311 -0
- package/dist/components/confirm-dialog.cjs +100 -0
- package/dist/components/confirm-dialog.d.cts +25 -0
- package/dist/components/confirm-dialog.d.ts +25 -0
- package/dist/components/confirm-dialog.mjs +86 -0
- package/dist/components/context-menu.cjs +325 -0
- package/dist/components/context-menu.d.cts +259 -0
- package/dist/components/context-menu.d.ts +259 -0
- package/dist/components/context-menu.mjs +290 -0
- package/dist/components/copy-button.cjs +203 -0
- package/dist/components/copy-button.d.cts +22 -0
- package/dist/components/copy-button.d.ts +22 -0
- package/dist/components/copy-button.mjs +178 -0
- package/dist/components/data-list.cjs +140 -0
- package/dist/components/data-list.d.cts +36 -0
- package/dist/components/data-list.d.ts +36 -0
- package/dist/components/data-list.mjs +113 -0
- package/dist/components/data-table-toolbar.cjs +338 -0
- package/dist/components/data-table-toolbar.d.cts +84 -0
- package/dist/components/data-table-toolbar.d.ts +84 -0
- package/dist/components/data-table-toolbar.mjs +320 -0
- package/dist/components/data-table.cjs +1324 -0
- package/dist/components/data-table.d.cts +349 -0
- package/dist/components/data-table.d.ts +349 -0
- package/dist/components/data-table.mjs +1323 -0
- package/dist/components/date-picker.cjs +282 -0
- package/dist/components/date-picker.d.cts +97 -0
- package/dist/components/date-picker.d.ts +97 -0
- package/dist/components/date-picker.mjs +258 -0
- package/dist/components/dialog.cjs +319 -0
- package/dist/components/dialog.d.cts +74 -0
- package/dist/components/dialog.d.ts +74 -0
- package/dist/components/dialog.mjs +292 -0
- package/dist/components/drawer.cjs +262 -0
- package/dist/components/drawer.d.cts +113 -0
- package/dist/components/drawer.d.ts +113 -0
- package/dist/components/drawer.mjs +230 -0
- package/dist/components/dropdown-menu.cjs +328 -0
- package/dist/components/dropdown-menu.d.cts +95 -0
- package/dist/components/dropdown-menu.d.ts +95 -0
- package/dist/components/dropdown-menu.mjs +293 -0
- package/dist/components/empty-state.cjs +123 -0
- package/dist/components/empty-state.d.cts +15 -0
- package/dist/components/empty-state.d.ts +15 -0
- package/dist/components/empty-state.mjs +99 -0
- package/dist/components/file-upload.cjs +442 -0
- package/dist/components/file-upload.d.cts +35 -0
- package/dist/components/file-upload.d.ts +35 -0
- package/dist/components/file-upload.mjs +423 -0
- package/dist/components/form-field.cjs +191 -0
- package/dist/components/form-field.d.cts +163 -0
- package/dist/components/form-field.d.ts +163 -0
- package/dist/components/form-field.mjs +167 -0
- package/dist/components/hover-card.cjs +99 -0
- package/dist/components/hover-card.d.cts +28 -0
- package/dist/components/hover-card.d.ts +28 -0
- package/dist/components/hover-card.mjs +75 -0
- package/dist/components/image-gallery.cjs +359 -0
- package/dist/components/image-gallery.d.cts +46 -0
- package/dist/components/image-gallery.d.ts +46 -0
- package/dist/components/image-gallery.mjs +340 -0
- package/dist/components/index.cjs +719 -0
- package/dist/components/index.d.cts +84 -0
- package/dist/components/index.d.ts +84 -0
- package/dist/components/index.mjs +771 -0
- package/dist/components/infinite-scroll.cjs +95 -0
- package/dist/components/infinite-scroll.d.cts +54 -0
- package/dist/components/infinite-scroll.d.ts +54 -0
- package/dist/components/infinite-scroll.mjs +71 -0
- package/dist/components/input-group.cjs +202 -0
- package/dist/components/input-group.d.cts +22 -0
- package/dist/components/input-group.d.ts +22 -0
- package/dist/components/input-group.mjs +178 -0
- package/dist/components/input.cjs +318 -0
- package/dist/components/input.d.cts +99 -0
- package/dist/components/input.d.ts +99 -0
- package/dist/components/input.mjs +296 -0
- package/dist/components/kbd.cjs +69 -0
- package/dist/components/kbd.d.cts +25 -0
- package/dist/components/kbd.d.ts +25 -0
- package/dist/components/kbd.mjs +44 -0
- package/dist/components/label.cjs +138 -0
- package/dist/components/label.d.cts +91 -0
- package/dist/components/label.d.ts +91 -0
- package/dist/components/label.mjs +113 -0
- package/dist/components/markdown.cjs +179 -0
- package/dist/components/markdown.d.cts +41 -0
- package/dist/components/markdown.d.ts +41 -0
- package/dist/components/markdown.mjs +155 -0
- package/dist/components/menubar.cjs +365 -0
- package/dist/components/menubar.d.cts +88 -0
- package/dist/components/menubar.d.ts +88 -0
- package/dist/components/menubar.mjs +329 -0
- package/dist/components/navigation-menu.cjs +280 -0
- package/dist/components/navigation-menu.d.cts +123 -0
- package/dist/components/navigation-menu.d.ts +123 -0
- package/dist/components/navigation-menu.mjs +250 -0
- package/dist/components/number-input.cjs +419 -0
- package/dist/components/number-input.d.cts +111 -0
- package/dist/components/number-input.d.ts +111 -0
- package/dist/components/number-input.mjs +400 -0
- package/dist/components/pagination.cjs +322 -0
- package/dist/components/pagination.d.cts +119 -0
- package/dist/components/pagination.d.ts +119 -0
- package/dist/components/pagination.mjs +297 -0
- package/dist/components/pin-input.cjs +321 -0
- package/dist/components/pin-input.d.cts +112 -0
- package/dist/components/pin-input.d.ts +112 -0
- package/dist/components/pin-input.mjs +303 -0
- package/dist/components/popover.cjs +194 -0
- package/dist/components/popover.d.cts +108 -0
- package/dist/components/popover.d.ts +108 -0
- package/dist/components/popover.mjs +168 -0
- package/dist/components/progress.cjs +237 -0
- package/dist/components/progress.d.cts +137 -0
- package/dist/components/progress.d.ts +137 -0
- package/dist/components/progress.mjs +211 -0
- package/dist/components/radio.cjs +344 -0
- package/dist/components/radio.d.cts +145 -0
- package/dist/components/radio.d.ts +145 -0
- package/dist/components/radio.mjs +320 -0
- package/dist/components/resizable.cjs +121 -0
- package/dist/components/resizable.d.cts +23 -0
- package/dist/components/resizable.d.ts +23 -0
- package/dist/components/resizable.mjs +99 -0
- package/dist/components/scroll-area.cjs +168 -0
- package/dist/components/scroll-area.d.cts +131 -0
- package/dist/components/scroll-area.d.ts +131 -0
- package/dist/components/scroll-area.mjs +143 -0
- package/dist/components/search-input.cjs +261 -0
- package/dist/components/search-input.d.cts +26 -0
- package/dist/components/search-input.d.ts +26 -0
- package/dist/components/search-input.mjs +243 -0
- package/dist/components/select.cjs +320 -0
- package/dist/components/select.d.cts +55 -0
- package/dist/components/select.d.ts +55 -0
- package/dist/components/select.mjs +288 -0
- package/dist/components/separator.cjs +193 -0
- package/dist/components/separator.d.cts +92 -0
- package/dist/components/separator.d.ts +92 -0
- package/dist/components/separator.mjs +170 -0
- package/dist/components/sheet.cjs +399 -0
- package/dist/components/sheet.d.cts +219 -0
- package/dist/components/sheet.d.ts +219 -0
- package/dist/components/sheet.mjs +379 -0
- package/dist/components/sidebar.cjs +1077 -0
- package/dist/components/sidebar.d.cts +733 -0
- package/dist/components/sidebar.d.ts +733 -0
- package/dist/components/sidebar.mjs +1033 -0
- package/dist/components/skeleton.cjs +210 -0
- package/dist/components/skeleton.d.cts +202 -0
- package/dist/components/skeleton.d.ts +202 -0
- package/dist/components/skeleton.mjs +182 -0
- package/dist/components/slider.cjs +319 -0
- package/dist/components/slider.d.cts +82 -0
- package/dist/components/slider.d.ts +82 -0
- package/dist/components/slider.mjs +296 -0
- package/dist/components/sonner.cjs +119 -0
- package/dist/components/sonner.d.cts +60 -0
- package/dist/components/sonner.d.ts +60 -0
- package/dist/components/sonner.mjs +94 -0
- package/dist/components/spinner.cjs +238 -0
- package/dist/components/spinner.d.cts +101 -0
- package/dist/components/spinner.d.ts +101 -0
- package/dist/components/spinner.mjs +213 -0
- package/dist/components/stat.cjs +180 -0
- package/dist/components/stat.d.cts +21 -0
- package/dist/components/stat.d.ts +21 -0
- package/dist/components/stat.mjs +161 -0
- package/dist/components/steps.cjs +228 -0
- package/dist/components/steps.d.cts +76 -0
- package/dist/components/steps.d.ts +76 -0
- package/dist/components/steps.mjs +207 -0
- package/dist/components/switch.cjs +243 -0
- package/dist/components/switch.d.cts +90 -0
- package/dist/components/switch.d.ts +90 -0
- package/dist/components/switch.mjs +228 -0
- package/dist/components/table.cjs +381 -0
- package/dist/components/table.d.cts +181 -0
- package/dist/components/table.d.ts +181 -0
- package/dist/components/table.mjs +349 -0
- package/dist/components/tabs.cjs +326 -0
- package/dist/components/tabs.d.cts +154 -0
- package/dist/components/tabs.d.ts +154 -0
- package/dist/components/tabs.mjs +304 -0
- package/dist/components/textarea.cjs +258 -0
- package/dist/components/textarea.d.cts +112 -0
- package/dist/components/textarea.d.ts +112 -0
- package/dist/components/textarea.mjs +233 -0
- package/dist/components/theme-toggle.cjs +282 -0
- package/dist/components/theme-toggle.d.cts +58 -0
- package/dist/components/theme-toggle.d.ts +58 -0
- package/dist/components/theme-toggle.mjs +258 -0
- package/dist/components/timeline.cjs +178 -0
- package/dist/components/timeline.d.cts +41 -0
- package/dist/components/timeline.d.ts +41 -0
- package/dist/components/timeline.mjs +157 -0
- package/dist/components/toast.cjs +546 -0
- package/dist/components/toast.d.cts +169 -0
- package/dist/components/toast.d.ts +169 -0
- package/dist/components/toast.mjs +528 -0
- package/dist/components/toggle-group.cjs +204 -0
- package/dist/components/toggle-group.d.cts +215 -0
- package/dist/components/toggle-group.d.ts +215 -0
- package/dist/components/toggle-group.mjs +180 -0
- package/dist/components/toggle.cjs +155 -0
- package/dist/components/toggle.d.cts +100 -0
- package/dist/components/toggle.d.ts +100 -0
- package/dist/components/toggle.mjs +130 -0
- package/dist/components/tooltip.cjs +155 -0
- package/dist/components/tooltip.d.cts +129 -0
- package/dist/components/tooltip.d.ts +129 -0
- package/dist/components/tooltip.mjs +132 -0
- package/dist/components/tree-view.cjs +450 -0
- package/dist/components/tree-view.d.cts +67 -0
- package/dist/components/tree-view.d.ts +67 -0
- package/dist/components/tree-view.mjs +433 -0
- package/dist/components/video-player.cjs +344 -0
- package/dist/components/video-player.d.cts +34 -0
- package/dist/components/video-player.d.ts +34 -0
- package/dist/components/video-player.mjs +320 -0
- package/dist/components/virtual-list.cjs +153 -0
- package/dist/components/virtual-list.d.cts +53 -0
- package/dist/components/virtual-list.d.ts +53 -0
- package/dist/components/virtual-list.mjs +136 -0
- package/dist/components/visually-hidden.cjs +43 -0
- package/dist/components/visually-hidden.d.cts +9 -0
- package/dist/components/visually-hidden.d.ts +9 -0
- package/dist/components/visually-hidden.mjs +21 -0
- package/dist/index.cjs +1081 -1933
- package/dist/index.d.cts +99 -11
- package/dist/index.d.ts +99 -11
- package/dist/index.mjs +1138 -16
- package/dist/motion/hooks.cjs +98 -0
- package/dist/motion/hooks.d.cts +32 -0
- package/dist/motion/hooks.d.ts +32 -0
- package/dist/motion/hooks.mjs +70 -0
- package/dist/motion/index.cjs +157 -0
- package/dist/motion/index.d.cts +5 -0
- package/dist/motion/index.d.ts +5 -0
- package/dist/motion/index.mjs +137 -0
- package/dist/motion/presets.cjs +609 -0
- package/dist/{motion.d.ts → motion/presets.d.cts} +1 -30
- package/dist/{motion.d.cts → motion/presets.d.ts} +1 -30
- package/dist/{chunk-PLRSH37T.mjs → motion/presets.mjs} +119 -126
- package/dist/primitives/container.cjs +88 -0
- package/dist/primitives/container.d.cts +82 -0
- package/dist/primitives/container.d.ts +82 -0
- package/dist/primitives/container.mjs +64 -0
- package/dist/primitives/divider.cjs +74 -0
- package/dist/primitives/divider.d.cts +30 -0
- package/dist/primitives/divider.d.ts +30 -0
- package/dist/primitives/divider.mjs +50 -0
- package/dist/primitives/index.cjs +54 -0
- package/dist/primitives/index.d.cts +6 -0
- package/dist/primitives/index.d.ts +6 -0
- package/dist/primitives/index.mjs +33 -0
- package/dist/primitives/stack.cjs +167 -0
- package/dist/primitives/stack.d.cts +132 -0
- package/dist/primitives/stack.d.ts +132 -0
- package/dist/primitives/stack.mjs +142 -0
- package/dist/primitives/typography.cjs +260 -0
- package/dist/primitives/typography.d.cts +157 -0
- package/dist/primitives/typography.d.ts +157 -0
- package/dist/primitives/typography.mjs +229 -0
- package/dist/theme/contract.cjs +246 -0
- package/dist/theme/contract.d.cts +76 -0
- package/dist/theme/contract.d.ts +76 -0
- package/dist/theme/contract.mjs +221 -0
- package/dist/theme/customizer-store.cjs +266 -0
- package/dist/theme/customizer-store.d.cts +76 -0
- package/dist/theme/customizer-store.d.ts +76 -0
- package/dist/theme/customizer-store.mjs +261 -0
- package/dist/theme/customizer.cjs +812 -0
- package/dist/theme/customizer.d.cts +13 -0
- package/dist/theme/customizer.d.ts +13 -0
- package/dist/theme/customizer.mjs +803 -0
- package/dist/theme/index.cjs +105 -0
- package/dist/theme/index.d.cts +13 -0
- package/dist/theme/index.d.ts +13 -0
- package/dist/theme/index.mjs +87 -0
- package/dist/theme/presets.cjs +1205 -0
- package/dist/theme/presets.d.cts +232 -0
- package/dist/theme/presets.d.ts +232 -0
- package/dist/theme/presets.mjs +1175 -0
- package/dist/theme/provider.cjs +122 -0
- package/dist/theme/provider.d.cts +57 -0
- package/dist/theme/provider.d.ts +57 -0
- package/dist/theme/provider.mjs +104 -0
- package/dist/{chunk-IVZAB7BV.mjs → tokens/colors.cjs} +212 -86
- package/dist/{z-index-Dd8IllRx.d.cts → tokens/colors.d.cts} +235 -72
- package/dist/{z-index-Dd8IllRx.d.ts → tokens/colors.d.ts} +235 -72
- package/dist/{chunk-ZBGR7MUW.cjs → tokens/colors.mjs} +165 -104
- package/dist/tokens/index.cjs +96 -0
- package/dist/tokens/index.d.cts +7 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.mjs +71 -0
- package/dist/{chunk-XCKK6P46.cjs → tokens/motion.cjs} +46 -18
- package/dist/{motion-D9wQbcKL.d.cts → tokens/motion.d.cts} +1 -1
- package/dist/{motion-D9wQbcKL.d.ts → tokens/motion.d.ts} +1 -1
- package/dist/{chunk-EZ2L3XPS.mjs → tokens/motion.mjs} +16 -10
- package/dist/tokens/radius.cjs +41 -0
- package/dist/tokens/radius.d.cts +18 -0
- package/dist/tokens/radius.d.ts +18 -0
- package/dist/tokens/radius.mjs +17 -0
- package/dist/tokens/shadows.cjs +57 -0
- package/dist/tokens/shadows.d.cts +32 -0
- package/dist/tokens/shadows.d.ts +32 -0
- package/dist/tokens/shadows.mjs +32 -0
- package/dist/tokens/spacing.cjs +51 -0
- package/dist/tokens/spacing.d.cts +26 -0
- package/dist/tokens/spacing.d.ts +26 -0
- package/dist/{chunk-NMPHV6ZD.mjs → tokens/spacing.mjs} +4 -4
- package/dist/{chunk-ECIGDEAH.cjs → tokens/typography.cjs} +43 -16
- package/dist/{typography-DlvVjEdE.d.ts → tokens/typography.d.cts} +1 -1
- package/dist/{typography-DlvVjEdE.d.cts → tokens/typography.d.ts} +1 -1
- package/dist/{chunk-ITBG42M5.mjs → tokens/typography.mjs} +14 -9
- package/dist/tokens/z-index.cjs +47 -0
- package/dist/tokens/z-index.d.cts +24 -0
- package/dist/tokens/z-index.d.ts +24 -0
- package/dist/tokens/z-index.mjs +23 -0
- package/dist/utils/cn.cjs +102 -0
- package/dist/utils/cn.d.cts +84 -0
- package/dist/utils/cn.d.ts +84 -0
- package/dist/{chunk-ZT3PCXDF.mjs → utils/cn.mjs} +14 -7
- package/dist/{chunk-33QEKXRQ.cjs → utils/contrast.cjs} +68 -38
- package/dist/utils/contrast.d.cts +209 -0
- package/dist/utils/contrast.d.ts +209 -0
- package/dist/{chunk-5NZDQWRV.mjs → utils/contrast.mjs} +27 -18
- package/dist/utils/focus-ring.cjs +81 -0
- package/dist/utils/focus-ring.d.cts +80 -0
- package/dist/utils/focus-ring.d.ts +80 -0
- package/dist/utils/focus-ring.mjs +47 -0
- package/dist/utils/index.cjs +107 -0
- package/dist/utils/index.d.cts +6 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.mjs +88 -0
- package/dist/utils/types.cjs +38 -0
- package/dist/utils/types.d.cts +187 -0
- package/dist/utils/types.d.ts +187 -0
- package/dist/utils/types.mjs +13 -0
- package/package.json +191 -191
- package/dist/chunk-2JFREULQ.cjs +0 -29
- package/dist/chunk-3EHT6IOA.cjs +0 -49
- package/dist/chunk-4ON3M3OM.cjs +0 -73
- package/dist/chunk-5TP7J7T4.cjs +0 -1766
- package/dist/chunk-A2DGHQL2.cjs +0 -21808
- package/dist/chunk-EQWESXRH.mjs +0 -1735
- package/dist/chunk-F4JJFWWU.cjs +0 -604
- package/dist/chunk-FUWXGHWQ.cjs +0 -468
- package/dist/chunk-MBYCK2JJ.mjs +0 -37
- package/dist/chunk-OHEH57BV.mjs +0 -455
- package/dist/chunk-XAIUX2YS.mjs +0 -21477
- package/dist/components.cjs +0 -1247
- package/dist/components.d.cts +0 -7881
- package/dist/components.d.ts +0 -7881
- package/dist/components.mjs +0 -6
- package/dist/motion.cjs +0 -264
- package/dist/motion.mjs +0 -3
- package/dist/primitives.cjs +0 -57
- package/dist/primitives.d.cts +0 -390
- package/dist/primitives.d.ts +0 -390
- package/dist/primitives.mjs +0 -4
- package/dist/theme.cjs +0 -131
- package/dist/theme.d.cts +0 -414
- package/dist/theme.d.ts +0 -414
- package/dist/theme.mjs +0 -6
- package/dist/tokens.cjs +0 -137
- package/dist/tokens.d.cts +0 -30
- package/dist/tokens.d.ts +0 -30
- package/dist/tokens.mjs +0 -4
- package/dist/utils.cjs +0 -164
- package/dist/utils.d.cts +0 -525
- package/dist/utils.d.ts +0 -525
- package/dist/utils.mjs +0 -3
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
declare const textareaVariants: (props?: ({
|
|
6
|
+
variant?: "success" | "default" | "error" | null | undefined;
|
|
7
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
8
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
|
+
type TextareaVariant = "default" | "error" | "success";
|
|
10
|
+
type TextareaSize = "sm" | "md" | "lg";
|
|
11
|
+
interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, "size">, VariantProps<typeof textareaVariants> {
|
|
12
|
+
/**
|
|
13
|
+
* Visual variant of the textarea.
|
|
14
|
+
* @default "default"
|
|
15
|
+
*/
|
|
16
|
+
variant?: TextareaVariant;
|
|
17
|
+
/**
|
|
18
|
+
* Size of the textarea.
|
|
19
|
+
* @default "md"
|
|
20
|
+
*/
|
|
21
|
+
size?: TextareaSize;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the textarea should automatically resize to fit its content.
|
|
24
|
+
* When enabled, the native resize handle is hidden and the textarea
|
|
25
|
+
* grows vertically as the user types.
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
autoResize?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Maximum height (in pixels) for the textarea when `autoResize` is enabled.
|
|
31
|
+
* After reaching this height, the textarea will scroll instead of growing.
|
|
32
|
+
* Only applies when `autoResize` is true.
|
|
33
|
+
* @default undefined (no max height constraint)
|
|
34
|
+
*/
|
|
35
|
+
maxHeight?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Minimum number of rows to display.
|
|
38
|
+
* This sets the initial height of the textarea.
|
|
39
|
+
* @default 3
|
|
40
|
+
*/
|
|
41
|
+
minRows?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Whether to show the character count below the textarea.
|
|
44
|
+
* When `maxLength` is also set, displays "current / max".
|
|
45
|
+
* Otherwise, displays just the current count.
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
showCount?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Additional CSS classes for the outer wrapper element.
|
|
51
|
+
* Use this when you need to control the width/margin of the textarea group.
|
|
52
|
+
*/
|
|
53
|
+
wrapperClassName?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Additional CSS classes for the character count text.
|
|
56
|
+
*/
|
|
57
|
+
countClassName?: string;
|
|
58
|
+
/** Additional CSS classes to merge on the textarea element. */
|
|
59
|
+
className?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Textarea — a multi-line text input for capturing longer user content.
|
|
63
|
+
*
|
|
64
|
+
* Built on the design system's token layer with CVA for variant composition.
|
|
65
|
+
* Shares the same visual language as the Input component for consistency.
|
|
66
|
+
* All colors, radii, spacing, and transitions come from CSS custom properties
|
|
67
|
+
* defined in design-system.css.
|
|
68
|
+
*
|
|
69
|
+
* Accessibility:
|
|
70
|
+
* - Focus ring visible on keyboard navigation (focus-visible)
|
|
71
|
+
* - Disabled state uses both `disabled` attribute and `aria-disabled`
|
|
72
|
+
* - Error variant sets `aria-invalid="true"` automatically
|
|
73
|
+
* - Supports `aria-describedby` for linking to error/helper messages
|
|
74
|
+
* - Character count uses `aria-live="polite"` for screen reader updates
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```tsx
|
|
78
|
+
* // Basic usage
|
|
79
|
+
* <Textarea placeholder="Write something..." />
|
|
80
|
+
*
|
|
81
|
+
* // With variant
|
|
82
|
+
* <Textarea variant="error" aria-describedby="desc-error" />
|
|
83
|
+
* <Textarea variant="success" />
|
|
84
|
+
*
|
|
85
|
+
* // Auto-resize
|
|
86
|
+
* <Textarea autoResize placeholder="This will grow as you type..." />
|
|
87
|
+
* <Textarea autoResize maxHeight={200} placeholder="Grows up to 200px" />
|
|
88
|
+
*
|
|
89
|
+
* // Character count
|
|
90
|
+
* <Textarea showCount placeholder="With counter" />
|
|
91
|
+
* <Textarea showCount maxLength={500} placeholder="Max 500 chars" />
|
|
92
|
+
*
|
|
93
|
+
* // Sizes
|
|
94
|
+
* <Textarea size="sm" placeholder="Small" />
|
|
95
|
+
* <Textarea size="md" placeholder="Medium" />
|
|
96
|
+
* <Textarea size="lg" placeholder="Large" />
|
|
97
|
+
*
|
|
98
|
+
* // Controlled with min rows
|
|
99
|
+
* <Textarea
|
|
100
|
+
* minRows={5}
|
|
101
|
+
* value={text}
|
|
102
|
+
* onChange={(e) => setText(e.target.value)}
|
|
103
|
+
* />
|
|
104
|
+
*
|
|
105
|
+
* // Disabled / Read-only
|
|
106
|
+
* <Textarea disabled placeholder="Disabled" />
|
|
107
|
+
* <Textarea readOnly value="Read-only value" />
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
111
|
+
|
|
112
|
+
export { Textarea, type TextareaProps, type TextareaSize, type TextareaVariant, textareaVariants };
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn, composeRefs } from "../utils/cn";
|
|
4
|
+
import { focusRingClasses } from "../utils/focus-ring";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
|
|
7
|
+
const textareaVariants = cva(
|
|
8
|
+
// Base styles — shared across all variants and sizes
|
|
9
|
+
[
|
|
10
|
+
// Layout
|
|
11
|
+
"flex w-full min-h-[60px]",
|
|
12
|
+
// Typography
|
|
13
|
+
"text-sm leading-5",
|
|
14
|
+
// Shape
|
|
15
|
+
"rounded-md",
|
|
16
|
+
// Border
|
|
17
|
+
"border",
|
|
18
|
+
// Colors
|
|
19
|
+
"bg-background text-input-foreground",
|
|
20
|
+
"placeholder:text-input-placeholder",
|
|
21
|
+
// Transition
|
|
22
|
+
"transition-[color,background-color,border-color,box-shadow,opacity]",
|
|
23
|
+
"duration-fast ease-standard",
|
|
24
|
+
// Focus ring — WCAG AA compliant, visible on keyboard navigation only
|
|
25
|
+
focusRingClasses,
|
|
26
|
+
// Disabled
|
|
27
|
+
"disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground",
|
|
28
|
+
// Read-only
|
|
29
|
+
"read-only:bg-muted read-only:cursor-default",
|
|
30
|
+
// Resize handle
|
|
31
|
+
"resize-vertical"
|
|
32
|
+
],
|
|
33
|
+
{
|
|
34
|
+
variants: {
|
|
35
|
+
// -----------------------------------------------------------------
|
|
36
|
+
// Visual Variants
|
|
37
|
+
// -----------------------------------------------------------------
|
|
38
|
+
variant: {
|
|
39
|
+
/**
|
|
40
|
+
* Default — standard textarea with muted border.
|
|
41
|
+
*/
|
|
42
|
+
default: [
|
|
43
|
+
"border-input",
|
|
44
|
+
"hover:border-border-strong",
|
|
45
|
+
"focus-visible:border-border-strong"
|
|
46
|
+
],
|
|
47
|
+
/**
|
|
48
|
+
* Error — validation failed. Uses danger color.
|
|
49
|
+
*/
|
|
50
|
+
error: [
|
|
51
|
+
"border-danger",
|
|
52
|
+
"text-foreground",
|
|
53
|
+
"focus-visible:border-danger",
|
|
54
|
+
"placeholder:text-input-placeholder"
|
|
55
|
+
],
|
|
56
|
+
/**
|
|
57
|
+
* Success — validation passed. Uses success color.
|
|
58
|
+
*/
|
|
59
|
+
success: [
|
|
60
|
+
"border-success",
|
|
61
|
+
"text-foreground",
|
|
62
|
+
"focus-visible:border-success",
|
|
63
|
+
"placeholder:text-input-placeholder"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
// -----------------------------------------------------------------
|
|
67
|
+
// Size Variants
|
|
68
|
+
// -----------------------------------------------------------------
|
|
69
|
+
size: {
|
|
70
|
+
/**
|
|
71
|
+
* Small — compact for dense UIs.
|
|
72
|
+
* Padding and font match Input sm.
|
|
73
|
+
*/
|
|
74
|
+
sm: "px-2.5 py-1.5 text-xs",
|
|
75
|
+
/**
|
|
76
|
+
* Medium — default size for most textareas.
|
|
77
|
+
* Padding and font match Input md.
|
|
78
|
+
*/
|
|
79
|
+
md: "px-3 py-2 text-sm",
|
|
80
|
+
/**
|
|
81
|
+
* Large — prominent textareas for long-form content.
|
|
82
|
+
* Padding and font match Input lg.
|
|
83
|
+
*/
|
|
84
|
+
lg: "px-3.5 py-2.5 text-sm"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
defaultVariants: {
|
|
88
|
+
variant: "default",
|
|
89
|
+
size: "md"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
function useAutoResize(textareaRef, autoResize, maxHeight) {
|
|
94
|
+
const adjustHeight = useCallback(() => {
|
|
95
|
+
const textarea = textareaRef.current;
|
|
96
|
+
if (!textarea || !autoResize) return;
|
|
97
|
+
textarea.style.height = "auto";
|
|
98
|
+
const newHeight = textarea.scrollHeight;
|
|
99
|
+
if (maxHeight && newHeight > maxHeight) {
|
|
100
|
+
textarea.style.height = `${maxHeight}px`;
|
|
101
|
+
textarea.style.overflowY = "auto";
|
|
102
|
+
} else {
|
|
103
|
+
textarea.style.height = `${newHeight}px`;
|
|
104
|
+
textarea.style.overflowY = "hidden";
|
|
105
|
+
}
|
|
106
|
+
}, [textareaRef, autoResize, maxHeight]);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
adjustHeight();
|
|
109
|
+
}, [adjustHeight]);
|
|
110
|
+
return adjustHeight;
|
|
111
|
+
}
|
|
112
|
+
function CharacterCount({
|
|
113
|
+
current,
|
|
114
|
+
max,
|
|
115
|
+
variant,
|
|
116
|
+
className
|
|
117
|
+
}) {
|
|
118
|
+
const isOverLimit = max !== void 0 && current > max;
|
|
119
|
+
const isNearLimit = max !== void 0 && current >= max * 0.9;
|
|
120
|
+
return /* @__PURE__ */ jsx(
|
|
121
|
+
"span",
|
|
122
|
+
{
|
|
123
|
+
className: cn(
|
|
124
|
+
"text-xs leading-4 tabular-nums select-none",
|
|
125
|
+
// Default muted text
|
|
126
|
+
"text-muted-foreground",
|
|
127
|
+
// Near limit warning
|
|
128
|
+
isNearLimit && !isOverLimit && "text-warning",
|
|
129
|
+
// Over limit or error variant
|
|
130
|
+
(isOverLimit || variant === "error") && "text-danger",
|
|
131
|
+
className
|
|
132
|
+
),
|
|
133
|
+
"aria-live": "polite",
|
|
134
|
+
"aria-atomic": "true",
|
|
135
|
+
children: max !== void 0 ? `${current} / ${max}` : current
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
const Textarea = forwardRef(
|
|
140
|
+
function Textarea2({
|
|
141
|
+
variant = "default",
|
|
142
|
+
size = "md",
|
|
143
|
+
autoResize = false,
|
|
144
|
+
maxHeight,
|
|
145
|
+
minRows = 3,
|
|
146
|
+
showCount = false,
|
|
147
|
+
wrapperClassName,
|
|
148
|
+
countClassName,
|
|
149
|
+
className,
|
|
150
|
+
disabled,
|
|
151
|
+
readOnly,
|
|
152
|
+
value,
|
|
153
|
+
defaultValue,
|
|
154
|
+
maxLength,
|
|
155
|
+
onChange,
|
|
156
|
+
"aria-invalid": ariaInvalid,
|
|
157
|
+
...rest
|
|
158
|
+
}, ref) {
|
|
159
|
+
const internalRef = useRef(null);
|
|
160
|
+
const [uncontrolledCharCount, setUncontrolledCharCount] = useState(
|
|
161
|
+
() => {
|
|
162
|
+
if (defaultValue !== void 0) return String(defaultValue).length;
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
const charCount = value !== void 0 ? String(value).length : uncontrolledCharCount;
|
|
167
|
+
const adjustHeight = useAutoResize(internalRef, autoResize, maxHeight);
|
|
168
|
+
const handleChange = useCallback(
|
|
169
|
+
(e) => {
|
|
170
|
+
setUncontrolledCharCount(e.target.value.length);
|
|
171
|
+
adjustHeight();
|
|
172
|
+
onChange?.(e);
|
|
173
|
+
},
|
|
174
|
+
[onChange, adjustHeight]
|
|
175
|
+
);
|
|
176
|
+
const resolvedAriaInvalid = ariaInvalid !== void 0 ? ariaInvalid : variant === "error" ? true : void 0;
|
|
177
|
+
const textareaClasses = cn(
|
|
178
|
+
textareaVariants({ variant, size }),
|
|
179
|
+
autoResize && "resize-none overflow-hidden",
|
|
180
|
+
className
|
|
181
|
+
);
|
|
182
|
+
const textareaElement = /* @__PURE__ */ jsx(
|
|
183
|
+
"textarea",
|
|
184
|
+
{
|
|
185
|
+
ref: composeRefs(internalRef, ref),
|
|
186
|
+
rows: minRows,
|
|
187
|
+
disabled,
|
|
188
|
+
readOnly,
|
|
189
|
+
value,
|
|
190
|
+
defaultValue,
|
|
191
|
+
maxLength,
|
|
192
|
+
onChange: handleChange,
|
|
193
|
+
"aria-invalid": resolvedAriaInvalid,
|
|
194
|
+
"aria-disabled": disabled || void 0,
|
|
195
|
+
className: textareaClasses,
|
|
196
|
+
"data-ds": "",
|
|
197
|
+
"data-ds-component": "textarea",
|
|
198
|
+
"data-ds-variant": variant,
|
|
199
|
+
"data-ds-size": size,
|
|
200
|
+
...autoResize ? { "data-ds-auto-resize": "" } : {},
|
|
201
|
+
...rest
|
|
202
|
+
}
|
|
203
|
+
);
|
|
204
|
+
if (!showCount) {
|
|
205
|
+
return textareaElement;
|
|
206
|
+
}
|
|
207
|
+
return /* @__PURE__ */ jsxs(
|
|
208
|
+
"div",
|
|
209
|
+
{
|
|
210
|
+
className: cn("flex flex-col gap-1.5 w-full", wrapperClassName),
|
|
211
|
+
"data-ds": "",
|
|
212
|
+
"data-ds-component": "textarea-wrapper",
|
|
213
|
+
children: [
|
|
214
|
+
textareaElement,
|
|
215
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-end px-0.5", children: /* @__PURE__ */ jsx(
|
|
216
|
+
CharacterCount,
|
|
217
|
+
{
|
|
218
|
+
current: charCount,
|
|
219
|
+
max: maxLength,
|
|
220
|
+
variant,
|
|
221
|
+
className: countClassName
|
|
222
|
+
}
|
|
223
|
+
) })
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
);
|
|
229
|
+
Textarea.displayName = "Textarea";
|
|
230
|
+
export {
|
|
231
|
+
Textarea,
|
|
232
|
+
textareaVariants
|
|
233
|
+
};
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var theme_toggle_exports = {};
|
|
21
|
+
__export(theme_toggle_exports, {
|
|
22
|
+
ThemeToggle: () => ThemeToggle
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(theme_toggle_exports);
|
|
25
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_cn = require("../utils/cn");
|
|
27
|
+
var import_focus_ring = require("../utils/focus-ring");
|
|
28
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
function SunIcon({ className }) {
|
|
31
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
32
|
+
"svg",
|
|
33
|
+
{
|
|
34
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
35
|
+
viewBox: "0 0 24 24",
|
|
36
|
+
fill: "none",
|
|
37
|
+
stroke: "currentColor",
|
|
38
|
+
strokeWidth: "2",
|
|
39
|
+
strokeLinecap: "round",
|
|
40
|
+
strokeLinejoin: "round",
|
|
41
|
+
className,
|
|
42
|
+
"aria-hidden": "true",
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "5" }),
|
|
45
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
|
|
46
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
|
|
47
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
|
|
48
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
|
|
49
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
|
|
50
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" }),
|
|
52
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" })
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
function MoonIcon({ className }) {
|
|
58
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
59
|
+
"svg",
|
|
60
|
+
{
|
|
61
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
62
|
+
viewBox: "0 0 24 24",
|
|
63
|
+
fill: "none",
|
|
64
|
+
stroke: "currentColor",
|
|
65
|
+
strokeWidth: "2",
|
|
66
|
+
strokeLinecap: "round",
|
|
67
|
+
strokeLinejoin: "round",
|
|
68
|
+
className,
|
|
69
|
+
"aria-hidden": "true",
|
|
70
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" })
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function MonitorIcon({ className }) {
|
|
75
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
76
|
+
"svg",
|
|
77
|
+
{
|
|
78
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
79
|
+
viewBox: "0 0 24 24",
|
|
80
|
+
fill: "none",
|
|
81
|
+
stroke: "currentColor",
|
|
82
|
+
strokeWidth: "2",
|
|
83
|
+
strokeLinecap: "round",
|
|
84
|
+
strokeLinejoin: "round",
|
|
85
|
+
className,
|
|
86
|
+
"aria-hidden": "true",
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2", ry: "2" }),
|
|
89
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "8", y1: "21", x2: "16", y2: "21" }),
|
|
90
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "17", x2: "12", y2: "21" })
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
const iconButtonVariants = (0, import_class_variance_authority.cva)(
|
|
96
|
+
[
|
|
97
|
+
"inline-flex items-center justify-center",
|
|
98
|
+
"rounded-md",
|
|
99
|
+
"border border-border",
|
|
100
|
+
"bg-secondary text-secondary-foreground",
|
|
101
|
+
"transition-[color,background-color,border-color,box-shadow,opacity,transform]",
|
|
102
|
+
"duration-fast ease-standard",
|
|
103
|
+
"hover:bg-secondary-hover hover:text-foreground",
|
|
104
|
+
"active:scale-[0.97]",
|
|
105
|
+
import_focus_ring.focusRingClasses,
|
|
106
|
+
"cursor-pointer",
|
|
107
|
+
"select-none"
|
|
108
|
+
],
|
|
109
|
+
{
|
|
110
|
+
variants: {
|
|
111
|
+
size: {
|
|
112
|
+
sm: "size-7 [&>svg]:size-3.5",
|
|
113
|
+
md: "size-9 [&>svg]:size-4",
|
|
114
|
+
lg: "size-10 [&>svg]:size-5"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
defaultVariants: {
|
|
118
|
+
size: "md"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
const segmentedContainerVariants = (0, import_class_variance_authority.cva)(
|
|
123
|
+
[
|
|
124
|
+
"inline-flex items-center",
|
|
125
|
+
"rounded-md",
|
|
126
|
+
"border border-border",
|
|
127
|
+
"bg-muted",
|
|
128
|
+
"p-0.5",
|
|
129
|
+
"gap-0.5"
|
|
130
|
+
],
|
|
131
|
+
{
|
|
132
|
+
variants: {
|
|
133
|
+
size: {
|
|
134
|
+
sm: "[&>button]:size-6 [&>button>svg]:size-3",
|
|
135
|
+
md: "[&>button]:size-7 [&>button>svg]:size-3.5",
|
|
136
|
+
lg: "[&>button]:size-8 [&>button>svg]:size-4"
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
defaultVariants: {
|
|
140
|
+
size: "md"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
const ICON_MAP = {
|
|
145
|
+
light: SunIcon,
|
|
146
|
+
dark: MoonIcon,
|
|
147
|
+
system: MonitorIcon
|
|
148
|
+
};
|
|
149
|
+
const LABEL_MAP = {
|
|
150
|
+
light: "Light mode",
|
|
151
|
+
dark: "Dark mode",
|
|
152
|
+
system: "System theme"
|
|
153
|
+
};
|
|
154
|
+
function getNextTheme(current, mode) {
|
|
155
|
+
if (mode === "light-dark") {
|
|
156
|
+
return current === "light" ? "dark" : "light";
|
|
157
|
+
}
|
|
158
|
+
const order = ["light", "dark", "system"];
|
|
159
|
+
const idx = order.indexOf(current);
|
|
160
|
+
return order[(idx + 1) % order.length];
|
|
161
|
+
}
|
|
162
|
+
const ThemeToggleIcon = (0, import_react.forwardRef)(
|
|
163
|
+
function ThemeToggleIcon2({ value, onChange, mode = "light-dark", size = "md", className, ...rest }, ref) {
|
|
164
|
+
const handleClick = (0, import_react.useCallback)(() => {
|
|
165
|
+
onChange(getNextTheme(value, mode));
|
|
166
|
+
}, [value, mode, onChange]);
|
|
167
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
168
|
+
"button",
|
|
169
|
+
{
|
|
170
|
+
ref,
|
|
171
|
+
type: "button",
|
|
172
|
+
onClick: handleClick,
|
|
173
|
+
className: (0, import_cn.cn)(iconButtonVariants({ size }), className),
|
|
174
|
+
"aria-label": `Switch to ${LABEL_MAP[getNextTheme(value, mode)] ?? "next theme"}`,
|
|
175
|
+
"data-ds": "",
|
|
176
|
+
"data-ds-component": "theme-toggle",
|
|
177
|
+
"data-ds-variant": "icon",
|
|
178
|
+
"data-ds-size": size,
|
|
179
|
+
"data-ds-theme-value": value,
|
|
180
|
+
...rest,
|
|
181
|
+
children: [
|
|
182
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
183
|
+
SunIcon,
|
|
184
|
+
{
|
|
185
|
+
className: (0, import_cn.cn)(
|
|
186
|
+
"absolute transition-all duration-300",
|
|
187
|
+
value !== "light" && "scale-0 rotate-90 opacity-0"
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
),
|
|
191
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
192
|
+
MoonIcon,
|
|
193
|
+
{
|
|
194
|
+
className: (0, import_cn.cn)(
|
|
195
|
+
"absolute transition-all duration-300",
|
|
196
|
+
value !== "dark" && "scale-0 -rotate-90 opacity-0"
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
mode === "light-dark-system" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
201
|
+
MonitorIcon,
|
|
202
|
+
{
|
|
203
|
+
className: (0, import_cn.cn)(
|
|
204
|
+
"absolute transition-all duration-300",
|
|
205
|
+
value !== "system" && "scale-0 rotate-90 opacity-0"
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
)
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
ThemeToggleIcon.displayName = "ThemeToggleIcon";
|
|
215
|
+
const ThemeToggleSegmented = (0, import_react.forwardRef)(
|
|
216
|
+
function ThemeToggleSegmented2({ value, onChange, mode = "light-dark", size = "md", className }, ref) {
|
|
217
|
+
const options = mode === "light-dark-system" ? ["light", "dark", "system"] : ["light", "dark"];
|
|
218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
219
|
+
"div",
|
|
220
|
+
{
|
|
221
|
+
ref,
|
|
222
|
+
role: "radiogroup",
|
|
223
|
+
"aria-label": "Theme selection",
|
|
224
|
+
className: (0, import_cn.cn)(segmentedContainerVariants({ size }), className),
|
|
225
|
+
"data-ds": "",
|
|
226
|
+
"data-ds-component": "theme-toggle",
|
|
227
|
+
"data-ds-variant": "segmented",
|
|
228
|
+
"data-ds-size": size,
|
|
229
|
+
"data-ds-theme-value": value,
|
|
230
|
+
children: options.map((option) => {
|
|
231
|
+
const Icon = ICON_MAP[option];
|
|
232
|
+
const isActive = value === option;
|
|
233
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
234
|
+
"button",
|
|
235
|
+
{
|
|
236
|
+
type: "button",
|
|
237
|
+
role: "radio",
|
|
238
|
+
"aria-checked": isActive,
|
|
239
|
+
"aria-label": LABEL_MAP[option],
|
|
240
|
+
onClick: () => onChange(option),
|
|
241
|
+
className: (0, import_cn.cn)(
|
|
242
|
+
"inline-flex items-center justify-center rounded-sm transition-all duration-fast ease-standard",
|
|
243
|
+
import_focus_ring.focusRingClasses,
|
|
244
|
+
isActive ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
|
|
245
|
+
),
|
|
246
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {})
|
|
247
|
+
},
|
|
248
|
+
option
|
|
249
|
+
);
|
|
250
|
+
})
|
|
251
|
+
}
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
ThemeToggleSegmented.displayName = "ThemeToggleSegmented";
|
|
256
|
+
const ThemeToggle = (0, import_react.forwardRef)(
|
|
257
|
+
function ThemeToggle2({ variant = "icon", ...rest }, ref) {
|
|
258
|
+
if (variant === "segmented") {
|
|
259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
260
|
+
ThemeToggleSegmented,
|
|
261
|
+
{
|
|
262
|
+
ref,
|
|
263
|
+
variant,
|
|
264
|
+
...rest
|
|
265
|
+
}
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
269
|
+
ThemeToggleIcon,
|
|
270
|
+
{
|
|
271
|
+
ref,
|
|
272
|
+
variant,
|
|
273
|
+
...rest
|
|
274
|
+
}
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
ThemeToggle.displayName = "ThemeToggle";
|
|
279
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
280
|
+
0 && (module.exports = {
|
|
281
|
+
ThemeToggle
|
|
282
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
|
|
3
|
+
type ThemeToggleMode = "light-dark" | "light-dark-system";
|
|
4
|
+
type ThemeToggleVariant = "icon" | "segmented";
|
|
5
|
+
type ThemeToggleSize = "sm" | "md" | "lg";
|
|
6
|
+
type ThemeValue = "light" | "dark" | "system";
|
|
7
|
+
interface ThemeToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
|
|
8
|
+
/** Current theme value. */
|
|
9
|
+
value: ThemeValue;
|
|
10
|
+
/** Callback when the theme changes. */
|
|
11
|
+
onChange: (value: ThemeValue) => void;
|
|
12
|
+
/**
|
|
13
|
+
* Toggle mode.
|
|
14
|
+
* - "light-dark": cycles between light and dark only
|
|
15
|
+
* - "light-dark-system": cycles through light, dark, and system
|
|
16
|
+
* @default "light-dark"
|
|
17
|
+
*/
|
|
18
|
+
mode?: ThemeToggleMode;
|
|
19
|
+
/**
|
|
20
|
+
* Visual variant.
|
|
21
|
+
* - "icon": single button that cycles on click
|
|
22
|
+
* - "segmented": inline pill group with one button per option
|
|
23
|
+
* @default "icon"
|
|
24
|
+
*/
|
|
25
|
+
variant?: ThemeToggleVariant;
|
|
26
|
+
/**
|
|
27
|
+
* Size of the toggle.
|
|
28
|
+
* @default "md"
|
|
29
|
+
*/
|
|
30
|
+
size?: ThemeToggleSize;
|
|
31
|
+
/** Additional CSS classes. */
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* ThemeToggle — a light/dark/system mode switcher.
|
|
36
|
+
*
|
|
37
|
+
* This is a headless, controlled component: you provide `value` and
|
|
38
|
+
* `onChange`. It works with any theme provider (next-themes, custom
|
|
39
|
+
* context, etc.).
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* // With next-themes
|
|
44
|
+
* const { theme, setTheme } = useTheme();
|
|
45
|
+
* <ThemeToggle value={theme as ThemeValue} onChange={setTheme} />
|
|
46
|
+
*
|
|
47
|
+
* // Segmented variant with system option
|
|
48
|
+
* <ThemeToggle
|
|
49
|
+
* value={theme as ThemeValue}
|
|
50
|
+
* onChange={setTheme}
|
|
51
|
+
* variant="segmented"
|
|
52
|
+
* mode="light-dark-system"
|
|
53
|
+
* />
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
declare const ThemeToggle: react.ForwardRefExoticComponent<ThemeToggleProps & react.RefAttributes<HTMLElement>>;
|
|
57
|
+
|
|
58
|
+
export { ThemeToggle, type ThemeToggleMode, type ThemeToggleProps, type ThemeToggleSize, type ThemeToggleVariant, type ThemeValue };
|