@work-rjkashyap/unified-ui 0.3.4 → 0.3.6
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 -1957
- 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-AAEWG5VR.mjs → tokens/colors.cjs} +94 -94
- package/dist/{z-index-DmLl6FUD.d.ts → tokens/colors.d.cts} +118 -72
- package/dist/{z-index-DmLl6FUD.d.cts → tokens/colors.d.ts} +118 -72
- package/dist/{chunk-6ZZZBOCH.cjs → tokens/colors.mjs} +47 -121
- 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-A2DGHQL2.cjs +0 -21808
- package/dist/chunk-BJ55D5IK.mjs +0 -2433
- 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-RUG3BW2B.cjs +0 -2471
- 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 -159
- package/dist/theme.d.cts +0 -440
- package/dist/theme.d.ts +0 -440
- 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,304 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "../utils/cn.mjs";
|
|
4
|
+
import { focusRingClasses } from "../utils/focus-ring.mjs";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { motion, useReducedMotion } from "framer-motion";
|
|
7
|
+
import { Tabs as TabsPrimitive } from "radix-ui";
|
|
8
|
+
import {
|
|
9
|
+
createContext,
|
|
10
|
+
forwardRef,
|
|
11
|
+
useCallback,
|
|
12
|
+
useContext,
|
|
13
|
+
useId,
|
|
14
|
+
useState
|
|
15
|
+
} from "react";
|
|
16
|
+
const TabsContext = createContext({
|
|
17
|
+
variant: "underline",
|
|
18
|
+
size: "md",
|
|
19
|
+
orientation: "horizontal",
|
|
20
|
+
layoutId: "",
|
|
21
|
+
activeValue: ""
|
|
22
|
+
});
|
|
23
|
+
function useTabsContext() {
|
|
24
|
+
return useContext(TabsContext);
|
|
25
|
+
}
|
|
26
|
+
const tabsListVariants = cva(["inline-flex items-center", "shrink-0"], {
|
|
27
|
+
variants: {
|
|
28
|
+
variant: {
|
|
29
|
+
underline: ["border-b border-border", "gap-0"],
|
|
30
|
+
pills: ["gap-1", "rounded-md", "bg-muted", "p-1"],
|
|
31
|
+
enclosed: ["border-b border-border", "gap-0"]
|
|
32
|
+
},
|
|
33
|
+
orientation: {
|
|
34
|
+
horizontal: "flex-row w-full",
|
|
35
|
+
vertical: "flex-col w-auto border-b-0"
|
|
36
|
+
},
|
|
37
|
+
fullWidth: {
|
|
38
|
+
true: "",
|
|
39
|
+
false: ""
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
compoundVariants: [
|
|
43
|
+
// Vertical orientation adjustments
|
|
44
|
+
{
|
|
45
|
+
variant: "underline",
|
|
46
|
+
orientation: "vertical",
|
|
47
|
+
className: "border-b-0 border-r border-border"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
variant: "enclosed",
|
|
51
|
+
orientation: "vertical",
|
|
52
|
+
className: "border-b-0 border-r border-border"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
defaultVariants: {
|
|
56
|
+
variant: "underline",
|
|
57
|
+
orientation: "horizontal",
|
|
58
|
+
fullWidth: false
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const tabsTriggerVariants = cva(
|
|
62
|
+
[
|
|
63
|
+
// Layout
|
|
64
|
+
"relative inline-flex items-center justify-center gap-1.5",
|
|
65
|
+
// Typography
|
|
66
|
+
"font-medium leading-5 whitespace-nowrap",
|
|
67
|
+
// Transition
|
|
68
|
+
"transition-[color,background-color,border-color,box-shadow,opacity]",
|
|
69
|
+
"duration-fast ease-standard",
|
|
70
|
+
// Focus ring
|
|
71
|
+
focusRingClasses,
|
|
72
|
+
// Disabled
|
|
73
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
74
|
+
// Cursor
|
|
75
|
+
"cursor-pointer select-none"
|
|
76
|
+
],
|
|
77
|
+
{
|
|
78
|
+
variants: {
|
|
79
|
+
variant: {
|
|
80
|
+
underline: [
|
|
81
|
+
"bg-transparent",
|
|
82
|
+
"text-muted-foreground",
|
|
83
|
+
"hover:text-foreground",
|
|
84
|
+
"data-[state=active]:text-foreground",
|
|
85
|
+
// Bottom border space for the active indicator
|
|
86
|
+
"border-b-2 border-transparent -mb-px"
|
|
87
|
+
],
|
|
88
|
+
pills: [
|
|
89
|
+
"rounded-sm",
|
|
90
|
+
"text-muted-foreground",
|
|
91
|
+
"hover:text-foreground hover:bg-background/60",
|
|
92
|
+
"data-[state=active]:text-foreground"
|
|
93
|
+
],
|
|
94
|
+
enclosed: [
|
|
95
|
+
"bg-transparent",
|
|
96
|
+
"text-muted-foreground",
|
|
97
|
+
"border border-transparent",
|
|
98
|
+
"hover:text-foreground",
|
|
99
|
+
"data-[state=active]:text-foreground",
|
|
100
|
+
"data-[state=active]:bg-background",
|
|
101
|
+
"data-[state=active]:border-border",
|
|
102
|
+
"data-[state=active]:border-b-transparent",
|
|
103
|
+
"-mb-px"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
size: {
|
|
107
|
+
sm: "text-xs px-3 py-1.5",
|
|
108
|
+
md: "text-sm px-4 py-2"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
defaultVariants: {
|
|
112
|
+
variant: "underline",
|
|
113
|
+
size: "md"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
const tabsContentVariants = cva(["mt-2", focusRingClasses, "rounded-sm"], {
|
|
118
|
+
variants: {
|
|
119
|
+
orientation: {
|
|
120
|
+
horizontal: "mt-2",
|
|
121
|
+
vertical: "mt-0 ml-4"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
defaultVariants: {
|
|
125
|
+
orientation: "horizontal"
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const MotionSpan = motion.create("span");
|
|
129
|
+
const indicatorSpringConfig = {
|
|
130
|
+
type: "spring",
|
|
131
|
+
stiffness: 500,
|
|
132
|
+
damping: 35,
|
|
133
|
+
mass: 0.5
|
|
134
|
+
};
|
|
135
|
+
const indicatorInstantConfig = {
|
|
136
|
+
type: "tween",
|
|
137
|
+
duration: 0
|
|
138
|
+
};
|
|
139
|
+
function ActiveIndicator({
|
|
140
|
+
variant,
|
|
141
|
+
layoutId
|
|
142
|
+
}) {
|
|
143
|
+
const prefersReduced = useReducedMotion();
|
|
144
|
+
const transition = prefersReduced ? indicatorInstantConfig : indicatorSpringConfig;
|
|
145
|
+
if (variant === "enclosed") {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
if (variant === "underline") {
|
|
149
|
+
return /* @__PURE__ */ jsx(
|
|
150
|
+
MotionSpan,
|
|
151
|
+
{
|
|
152
|
+
layoutId,
|
|
153
|
+
className: cn(
|
|
154
|
+
"absolute bottom-0 left-0 right-0 h-0.5",
|
|
155
|
+
"bg-primary",
|
|
156
|
+
"rounded-full"
|
|
157
|
+
),
|
|
158
|
+
transition
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
return /* @__PURE__ */ jsx(
|
|
163
|
+
MotionSpan,
|
|
164
|
+
{
|
|
165
|
+
layoutId,
|
|
166
|
+
className: cn(
|
|
167
|
+
"absolute inset-0",
|
|
168
|
+
"bg-background",
|
|
169
|
+
"rounded-sm",
|
|
170
|
+
"shadow-sm"
|
|
171
|
+
),
|
|
172
|
+
transition
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
const Tabs = forwardRef(function Tabs2({
|
|
177
|
+
variant = "underline",
|
|
178
|
+
size = "md",
|
|
179
|
+
orientation = "horizontal",
|
|
180
|
+
className,
|
|
181
|
+
children,
|
|
182
|
+
value: controlledValue,
|
|
183
|
+
defaultValue,
|
|
184
|
+
onValueChange,
|
|
185
|
+
...rest
|
|
186
|
+
}, ref) {
|
|
187
|
+
const autoId = useId();
|
|
188
|
+
const layoutId = `tabs-indicator-${autoId}`;
|
|
189
|
+
const [internalValue, setInternalValue] = useState(
|
|
190
|
+
controlledValue ?? defaultValue ?? ""
|
|
191
|
+
);
|
|
192
|
+
const activeValue = controlledValue !== void 0 ? controlledValue : internalValue;
|
|
193
|
+
const handleValueChange = useCallback(
|
|
194
|
+
(newValue) => {
|
|
195
|
+
if (controlledValue === void 0) {
|
|
196
|
+
setInternalValue(newValue);
|
|
197
|
+
}
|
|
198
|
+
onValueChange?.(newValue);
|
|
199
|
+
},
|
|
200
|
+
[controlledValue, onValueChange]
|
|
201
|
+
);
|
|
202
|
+
return /* @__PURE__ */ jsx(
|
|
203
|
+
TabsContext.Provider,
|
|
204
|
+
{
|
|
205
|
+
value: { variant, size, orientation, layoutId, activeValue },
|
|
206
|
+
children: /* @__PURE__ */ jsx(
|
|
207
|
+
TabsPrimitive.Root,
|
|
208
|
+
{
|
|
209
|
+
ref,
|
|
210
|
+
orientation,
|
|
211
|
+
value: controlledValue,
|
|
212
|
+
defaultValue: controlledValue !== void 0 ? void 0 : defaultValue,
|
|
213
|
+
onValueChange: handleValueChange,
|
|
214
|
+
className: cn(
|
|
215
|
+
"not-prose",
|
|
216
|
+
orientation === "vertical" && "flex flex-row",
|
|
217
|
+
className
|
|
218
|
+
),
|
|
219
|
+
"data-ds": "",
|
|
220
|
+
"data-ds-component": "tabs",
|
|
221
|
+
"data-ds-variant": variant,
|
|
222
|
+
"data-ds-size": size,
|
|
223
|
+
"data-ds-orientation": orientation,
|
|
224
|
+
...rest,
|
|
225
|
+
children
|
|
226
|
+
}
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
});
|
|
231
|
+
Tabs.displayName = "Tabs";
|
|
232
|
+
const TabsList = forwardRef(function TabsList2({ fullWidth = false, className, children, ...rest }, ref) {
|
|
233
|
+
const { variant, orientation } = useTabsContext();
|
|
234
|
+
return /* @__PURE__ */ jsx(
|
|
235
|
+
TabsPrimitive.List,
|
|
236
|
+
{
|
|
237
|
+
ref,
|
|
238
|
+
className: cn(
|
|
239
|
+
tabsListVariants({ variant, orientation, fullWidth }),
|
|
240
|
+
fullWidth && orientation === "horizontal" && "[&>*]:flex-1",
|
|
241
|
+
className
|
|
242
|
+
),
|
|
243
|
+
"data-ds": "",
|
|
244
|
+
"data-ds-component": "tabs-list",
|
|
245
|
+
...rest,
|
|
246
|
+
children
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
});
|
|
250
|
+
TabsList.displayName = "TabsList";
|
|
251
|
+
const TabsTrigger = forwardRef(function TabsTrigger2({ className, icon, children, disabled, value, ...rest }, ref) {
|
|
252
|
+
const { variant, size, layoutId, activeValue } = useTabsContext();
|
|
253
|
+
const iconSizeClass = size === "sm" ? "[&>svg]:size-3.5" : "[&>svg]:size-4";
|
|
254
|
+
const isActive = value === activeValue;
|
|
255
|
+
return /* @__PURE__ */ jsxs(
|
|
256
|
+
TabsPrimitive.Trigger,
|
|
257
|
+
{
|
|
258
|
+
ref,
|
|
259
|
+
value,
|
|
260
|
+
disabled,
|
|
261
|
+
className: cn(
|
|
262
|
+
tabsTriggerVariants({ variant, size }),
|
|
263
|
+
iconSizeClass,
|
|
264
|
+
// For underline variant, make border transparent — the motion indicator handles the active line
|
|
265
|
+
variant === "underline" && "data-[state=active]:border-transparent",
|
|
266
|
+
className
|
|
267
|
+
),
|
|
268
|
+
"data-ds": "",
|
|
269
|
+
"data-ds-component": "tabs-trigger",
|
|
270
|
+
...rest,
|
|
271
|
+
children: [
|
|
272
|
+
variant !== "enclosed" && isActive && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 pointer-events-none", children: /* @__PURE__ */ jsx(ActiveIndicator, { variant, layoutId }) }),
|
|
273
|
+
/* @__PURE__ */ jsxs("span", { className: cn("relative z-[1] inline-flex items-center gap-1.5"), children: [
|
|
274
|
+
icon && /* @__PURE__ */ jsx("span", { className: "shrink-0", "aria-hidden": "true", children: icon }),
|
|
275
|
+
children
|
|
276
|
+
] })
|
|
277
|
+
]
|
|
278
|
+
}
|
|
279
|
+
);
|
|
280
|
+
});
|
|
281
|
+
TabsTrigger.displayName = "TabsTrigger";
|
|
282
|
+
const TabsContent = forwardRef(function TabsContent2({ className, children, ...rest }, ref) {
|
|
283
|
+
const { orientation } = useTabsContext();
|
|
284
|
+
return /* @__PURE__ */ jsx(
|
|
285
|
+
TabsPrimitive.Content,
|
|
286
|
+
{
|
|
287
|
+
ref,
|
|
288
|
+
className: cn(tabsContentVariants({ orientation }), className),
|
|
289
|
+
"data-ds": "",
|
|
290
|
+
"data-ds-component": "tabs-content",
|
|
291
|
+
...rest,
|
|
292
|
+
children
|
|
293
|
+
}
|
|
294
|
+
);
|
|
295
|
+
});
|
|
296
|
+
TabsContent.displayName = "TabsContent";
|
|
297
|
+
export {
|
|
298
|
+
Tabs,
|
|
299
|
+
TabsContent,
|
|
300
|
+
TabsList,
|
|
301
|
+
TabsTrigger,
|
|
302
|
+
tabsListVariants,
|
|
303
|
+
tabsTriggerVariants
|
|
304
|
+
};
|
|
@@ -0,0 +1,258 @@
|
|
|
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 textarea_exports = {};
|
|
21
|
+
__export(textarea_exports, {
|
|
22
|
+
Textarea: () => Textarea,
|
|
23
|
+
textareaVariants: () => textareaVariants
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(textarea_exports);
|
|
26
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
27
|
+
var import_cn = require("../utils/cn.cjs");
|
|
28
|
+
var import_focus_ring = require("../utils/focus-ring.cjs");
|
|
29
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
30
|
+
var import_react = require("react");
|
|
31
|
+
const textareaVariants = (0, import_class_variance_authority.cva)(
|
|
32
|
+
// Base styles — shared across all variants and sizes
|
|
33
|
+
[
|
|
34
|
+
// Layout
|
|
35
|
+
"flex w-full min-h-[60px]",
|
|
36
|
+
// Typography
|
|
37
|
+
"text-sm leading-5",
|
|
38
|
+
// Shape
|
|
39
|
+
"rounded-md",
|
|
40
|
+
// Border
|
|
41
|
+
"border",
|
|
42
|
+
// Colors
|
|
43
|
+
"bg-background text-input-foreground",
|
|
44
|
+
"placeholder:text-input-placeholder",
|
|
45
|
+
// Transition
|
|
46
|
+
"transition-[color,background-color,border-color,box-shadow,opacity]",
|
|
47
|
+
"duration-fast ease-standard",
|
|
48
|
+
// Focus ring — WCAG AA compliant, visible on keyboard navigation only
|
|
49
|
+
import_focus_ring.focusRingClasses,
|
|
50
|
+
// Disabled
|
|
51
|
+
"disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground",
|
|
52
|
+
// Read-only
|
|
53
|
+
"read-only:bg-muted read-only:cursor-default",
|
|
54
|
+
// Resize handle
|
|
55
|
+
"resize-vertical"
|
|
56
|
+
],
|
|
57
|
+
{
|
|
58
|
+
variants: {
|
|
59
|
+
// -----------------------------------------------------------------
|
|
60
|
+
// Visual Variants
|
|
61
|
+
// -----------------------------------------------------------------
|
|
62
|
+
variant: {
|
|
63
|
+
/**
|
|
64
|
+
* Default — standard textarea with muted border.
|
|
65
|
+
*/
|
|
66
|
+
default: [
|
|
67
|
+
"border-input",
|
|
68
|
+
"hover:border-border-strong",
|
|
69
|
+
"focus-visible:border-border-strong"
|
|
70
|
+
],
|
|
71
|
+
/**
|
|
72
|
+
* Error — validation failed. Uses danger color.
|
|
73
|
+
*/
|
|
74
|
+
error: [
|
|
75
|
+
"border-danger",
|
|
76
|
+
"text-foreground",
|
|
77
|
+
"focus-visible:border-danger",
|
|
78
|
+
"placeholder:text-input-placeholder"
|
|
79
|
+
],
|
|
80
|
+
/**
|
|
81
|
+
* Success — validation passed. Uses success color.
|
|
82
|
+
*/
|
|
83
|
+
success: [
|
|
84
|
+
"border-success",
|
|
85
|
+
"text-foreground",
|
|
86
|
+
"focus-visible:border-success",
|
|
87
|
+
"placeholder:text-input-placeholder"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
// -----------------------------------------------------------------
|
|
91
|
+
// Size Variants
|
|
92
|
+
// -----------------------------------------------------------------
|
|
93
|
+
size: {
|
|
94
|
+
/**
|
|
95
|
+
* Small — compact for dense UIs.
|
|
96
|
+
* Padding and font match Input sm.
|
|
97
|
+
*/
|
|
98
|
+
sm: "px-2.5 py-1.5 text-xs",
|
|
99
|
+
/**
|
|
100
|
+
* Medium — default size for most textareas.
|
|
101
|
+
* Padding and font match Input md.
|
|
102
|
+
*/
|
|
103
|
+
md: "px-3 py-2 text-sm",
|
|
104
|
+
/**
|
|
105
|
+
* Large — prominent textareas for long-form content.
|
|
106
|
+
* Padding and font match Input lg.
|
|
107
|
+
*/
|
|
108
|
+
lg: "px-3.5 py-2.5 text-sm"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
defaultVariants: {
|
|
112
|
+
variant: "default",
|
|
113
|
+
size: "md"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
function useAutoResize(textareaRef, autoResize, maxHeight) {
|
|
118
|
+
const adjustHeight = (0, import_react.useCallback)(() => {
|
|
119
|
+
const textarea = textareaRef.current;
|
|
120
|
+
if (!textarea || !autoResize) return;
|
|
121
|
+
textarea.style.height = "auto";
|
|
122
|
+
const newHeight = textarea.scrollHeight;
|
|
123
|
+
if (maxHeight && newHeight > maxHeight) {
|
|
124
|
+
textarea.style.height = `${maxHeight}px`;
|
|
125
|
+
textarea.style.overflowY = "auto";
|
|
126
|
+
} else {
|
|
127
|
+
textarea.style.height = `${newHeight}px`;
|
|
128
|
+
textarea.style.overflowY = "hidden";
|
|
129
|
+
}
|
|
130
|
+
}, [textareaRef, autoResize, maxHeight]);
|
|
131
|
+
(0, import_react.useEffect)(() => {
|
|
132
|
+
adjustHeight();
|
|
133
|
+
}, [adjustHeight]);
|
|
134
|
+
return adjustHeight;
|
|
135
|
+
}
|
|
136
|
+
function CharacterCount({
|
|
137
|
+
current,
|
|
138
|
+
max,
|
|
139
|
+
variant,
|
|
140
|
+
className
|
|
141
|
+
}) {
|
|
142
|
+
const isOverLimit = max !== void 0 && current > max;
|
|
143
|
+
const isNearLimit = max !== void 0 && current >= max * 0.9;
|
|
144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
145
|
+
"span",
|
|
146
|
+
{
|
|
147
|
+
className: (0, import_cn.cn)(
|
|
148
|
+
"text-xs leading-4 tabular-nums select-none",
|
|
149
|
+
// Default muted text
|
|
150
|
+
"text-muted-foreground",
|
|
151
|
+
// Near limit warning
|
|
152
|
+
isNearLimit && !isOverLimit && "text-warning",
|
|
153
|
+
// Over limit or error variant
|
|
154
|
+
(isOverLimit || variant === "error") && "text-danger",
|
|
155
|
+
className
|
|
156
|
+
),
|
|
157
|
+
"aria-live": "polite",
|
|
158
|
+
"aria-atomic": "true",
|
|
159
|
+
children: max !== void 0 ? `${current} / ${max}` : current
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
const Textarea = (0, import_react.forwardRef)(
|
|
164
|
+
function Textarea2({
|
|
165
|
+
variant = "default",
|
|
166
|
+
size = "md",
|
|
167
|
+
autoResize = false,
|
|
168
|
+
maxHeight,
|
|
169
|
+
minRows = 3,
|
|
170
|
+
showCount = false,
|
|
171
|
+
wrapperClassName,
|
|
172
|
+
countClassName,
|
|
173
|
+
className,
|
|
174
|
+
disabled,
|
|
175
|
+
readOnly,
|
|
176
|
+
value,
|
|
177
|
+
defaultValue,
|
|
178
|
+
maxLength,
|
|
179
|
+
onChange,
|
|
180
|
+
"aria-invalid": ariaInvalid,
|
|
181
|
+
...rest
|
|
182
|
+
}, ref) {
|
|
183
|
+
const internalRef = (0, import_react.useRef)(null);
|
|
184
|
+
const [uncontrolledCharCount, setUncontrolledCharCount] = (0, import_react.useState)(
|
|
185
|
+
() => {
|
|
186
|
+
if (defaultValue !== void 0) return String(defaultValue).length;
|
|
187
|
+
return 0;
|
|
188
|
+
}
|
|
189
|
+
);
|
|
190
|
+
const charCount = value !== void 0 ? String(value).length : uncontrolledCharCount;
|
|
191
|
+
const adjustHeight = useAutoResize(internalRef, autoResize, maxHeight);
|
|
192
|
+
const handleChange = (0, import_react.useCallback)(
|
|
193
|
+
(e) => {
|
|
194
|
+
setUncontrolledCharCount(e.target.value.length);
|
|
195
|
+
adjustHeight();
|
|
196
|
+
onChange?.(e);
|
|
197
|
+
},
|
|
198
|
+
[onChange, adjustHeight]
|
|
199
|
+
);
|
|
200
|
+
const resolvedAriaInvalid = ariaInvalid !== void 0 ? ariaInvalid : variant === "error" ? true : void 0;
|
|
201
|
+
const textareaClasses = (0, import_cn.cn)(
|
|
202
|
+
textareaVariants({ variant, size }),
|
|
203
|
+
autoResize && "resize-none overflow-hidden",
|
|
204
|
+
className
|
|
205
|
+
);
|
|
206
|
+
const textareaElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
207
|
+
"textarea",
|
|
208
|
+
{
|
|
209
|
+
ref: (0, import_cn.composeRefs)(internalRef, ref),
|
|
210
|
+
rows: minRows,
|
|
211
|
+
disabled,
|
|
212
|
+
readOnly,
|
|
213
|
+
value,
|
|
214
|
+
defaultValue,
|
|
215
|
+
maxLength,
|
|
216
|
+
onChange: handleChange,
|
|
217
|
+
"aria-invalid": resolvedAriaInvalid,
|
|
218
|
+
"aria-disabled": disabled || void 0,
|
|
219
|
+
className: textareaClasses,
|
|
220
|
+
"data-ds": "",
|
|
221
|
+
"data-ds-component": "textarea",
|
|
222
|
+
"data-ds-variant": variant,
|
|
223
|
+
"data-ds-size": size,
|
|
224
|
+
...autoResize ? { "data-ds-auto-resize": "" } : {},
|
|
225
|
+
...rest
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
if (!showCount) {
|
|
229
|
+
return textareaElement;
|
|
230
|
+
}
|
|
231
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
232
|
+
"div",
|
|
233
|
+
{
|
|
234
|
+
className: (0, import_cn.cn)("flex flex-col gap-1.5 w-full", wrapperClassName),
|
|
235
|
+
"data-ds": "",
|
|
236
|
+
"data-ds-component": "textarea-wrapper",
|
|
237
|
+
children: [
|
|
238
|
+
textareaElement,
|
|
239
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-end px-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
240
|
+
CharacterCount,
|
|
241
|
+
{
|
|
242
|
+
current: charCount,
|
|
243
|
+
max: maxLength,
|
|
244
|
+
variant,
|
|
245
|
+
className: countClassName
|
|
246
|
+
}
|
|
247
|
+
) })
|
|
248
|
+
]
|
|
249
|
+
}
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
);
|
|
253
|
+
Textarea.displayName = "Textarea";
|
|
254
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
255
|
+
0 && (module.exports = {
|
|
256
|
+
Textarea,
|
|
257
|
+
textareaVariants
|
|
258
|
+
});
|
|
@@ -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 };
|