dash-ui-kit 1.0.93 → 2.0.0-dev

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.
Files changed (186) hide show
  1. package/README.md +52 -0
  2. package/dist/react/components/accordion/index.cjs.js +193 -0
  3. package/dist/react/components/accordion/index.cjs.js.map +1 -0
  4. package/dist/react/components/accordion/index.esm.js +169 -0
  5. package/dist/react/components/accordion/index.esm.js.map +1 -0
  6. package/dist/react/components/avatar/index.cjs.js +39 -0
  7. package/dist/react/components/avatar/index.cjs.js.map +1 -0
  8. package/dist/react/components/avatar/index.esm.js +34 -0
  9. package/dist/react/components/avatar/index.esm.js.map +1 -0
  10. package/dist/react/components/badge/index.cjs.js +92 -0
  11. package/dist/react/components/badge/index.cjs.js.map +1 -0
  12. package/dist/react/components/badge/index.esm.js +87 -0
  13. package/dist/react/components/badge/index.esm.js.map +1 -0
  14. package/dist/react/components/bigNumber/index.cjs.js +100 -0
  15. package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
  16. package/dist/react/components/bigNumber/index.esm.js +95 -0
  17. package/dist/react/components/bigNumber/index.esm.js.map +1 -0
  18. package/dist/react/components/button/index.cjs.js +535 -0
  19. package/dist/react/components/button/index.cjs.js.map +1 -0
  20. package/dist/react/components/button/index.d.ts +3 -1
  21. package/dist/react/components/button/index.esm.js +530 -0
  22. package/dist/react/components/button/index.esm.js.map +1 -0
  23. package/dist/react/components/copyButton/index.cjs.js +95 -0
  24. package/dist/react/components/copyButton/index.cjs.js.map +1 -0
  25. package/dist/react/components/copyButton/index.esm.js +71 -0
  26. package/dist/react/components/copyButton/index.esm.js.map +1 -0
  27. package/dist/react/components/dashLogo/index.cjs.js +74 -0
  28. package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
  29. package/dist/react/components/dashLogo/index.esm.js +69 -0
  30. package/dist/react/components/dashLogo/index.esm.js.map +1 -0
  31. package/dist/react/components/dateBlock/index.cjs.js +120 -0
  32. package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
  33. package/dist/react/components/dateBlock/index.esm.js +115 -0
  34. package/dist/react/components/dateBlock/index.esm.js.map +1 -0
  35. package/dist/react/components/dialog/index.cjs.js +292 -0
  36. package/dist/react/components/dialog/index.cjs.js.map +1 -0
  37. package/dist/react/components/dialog/index.esm.js +270 -0
  38. package/dist/react/components/dialog/index.esm.js.map +1 -0
  39. package/dist/react/components/heading/index.cjs.js +60 -0
  40. package/dist/react/components/heading/index.cjs.js.map +1 -0
  41. package/dist/react/components/heading/index.esm.js +58 -0
  42. package/dist/react/components/heading/index.esm.js.map +1 -0
  43. package/dist/react/components/icons/index.cjs.js +1173 -0
  44. package/dist/react/components/icons/index.cjs.js.map +1 -0
  45. package/dist/react/components/icons/index.d.ts +2 -0
  46. package/dist/react/components/icons/index.esm.js +1128 -0
  47. package/dist/react/components/icons/index.esm.js.map +1 -0
  48. package/dist/react/components/identifier/index.cjs.js +286 -0
  49. package/dist/react/components/identifier/index.cjs.js.map +1 -0
  50. package/dist/react/components/identifier/index.esm.js +282 -0
  51. package/dist/react/components/identifier/index.esm.js.map +1 -0
  52. package/dist/react/components/index.cjs.js +101 -0
  53. package/dist/react/components/index.cjs.js.map +1 -0
  54. package/dist/react/components/index.d.ts +1 -1
  55. package/dist/react/components/index.esm.js +29 -0
  56. package/dist/react/components/index.esm.js.map +1 -0
  57. package/dist/react/components/input/index.cjs.js +237 -0
  58. package/dist/react/components/input/index.cjs.js.map +1 -0
  59. package/dist/react/components/input/index.esm.js +232 -0
  60. package/dist/react/components/input/index.esm.js.map +1 -0
  61. package/dist/react/components/list/index.cjs.js +49 -0
  62. package/dist/react/components/list/index.cjs.js.map +1 -0
  63. package/dist/react/components/list/index.esm.js +47 -0
  64. package/dist/react/components/list/index.esm.js.map +1 -0
  65. package/dist/react/components/notActive/index.cjs.js +40 -0
  66. package/dist/react/components/notActive/index.cjs.js.map +1 -0
  67. package/dist/react/components/notActive/index.esm.js +38 -0
  68. package/dist/react/components/notActive/index.esm.js.map +1 -0
  69. package/dist/react/components/overlayMenu/index.cjs.js +425 -0
  70. package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
  71. package/dist/react/components/overlayMenu/index.esm.js +420 -0
  72. package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
  73. package/dist/react/components/overlaySelect/index.cjs.js +345 -0
  74. package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
  75. package/dist/react/components/overlaySelect/index.esm.js +340 -0
  76. package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
  77. package/dist/react/components/progressStepBar/index.cjs.js +49 -0
  78. package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
  79. package/dist/react/components/progressStepBar/index.d.ts +2 -1
  80. package/dist/react/components/progressStepBar/index.esm.js +47 -0
  81. package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
  82. package/dist/react/components/select/index.cjs.js +236 -0
  83. package/dist/react/components/select/index.cjs.js.map +1 -0
  84. package/dist/react/components/select/index.esm.js +212 -0
  85. package/dist/react/components/select/index.esm.js.map +1 -0
  86. package/dist/react/components/switch/index.cjs.js +184 -0
  87. package/dist/react/components/switch/index.cjs.js.map +1 -0
  88. package/dist/react/components/switch/index.esm.js +179 -0
  89. package/dist/react/components/switch/index.esm.js.map +1 -0
  90. package/dist/react/components/tabs/index.cjs.js +178 -0
  91. package/dist/react/components/tabs/index.cjs.js.map +1 -0
  92. package/dist/react/components/tabs/index.esm.js +154 -0
  93. package/dist/react/components/tabs/index.esm.js.map +1 -0
  94. package/dist/react/components/text/index.cjs.js +120 -0
  95. package/dist/react/components/text/index.cjs.js.map +1 -0
  96. package/dist/react/components/text/index.esm.js +115 -0
  97. package/dist/react/components/text/index.esm.js.map +1 -0
  98. package/dist/react/components/textarea/index.cjs.js +256 -0
  99. package/dist/react/components/textarea/index.cjs.js.map +1 -0
  100. package/dist/react/components/textarea/index.esm.js +251 -0
  101. package/dist/react/components/textarea/index.esm.js.map +1 -0
  102. package/dist/react/components/timeDelta/index.cjs.js +93 -0
  103. package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
  104. package/dist/react/components/timeDelta/index.d.ts +1 -1
  105. package/dist/react/components/timeDelta/index.esm.js +88 -0
  106. package/dist/react/components/timeDelta/index.esm.js.map +1 -0
  107. package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
  108. package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
  109. package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
  110. package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
  111. package/dist/react/components/valueCard/index.cjs.js +176 -0
  112. package/dist/react/components/valueCard/index.cjs.js.map +1 -0
  113. package/dist/react/components/valueCard/index.d.ts +1 -1
  114. package/dist/react/components/valueCard/index.esm.js +171 -0
  115. package/dist/react/components/valueCard/index.esm.js.map +1 -0
  116. package/dist/react/contexts/ThemeContext.cjs.js +79 -0
  117. package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
  118. package/dist/react/contexts/ThemeContext.esm.js +76 -0
  119. package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
  120. package/dist/react/contexts/index.cjs.js +11 -0
  121. package/dist/react/contexts/index.cjs.js.map +1 -0
  122. package/dist/react/contexts/index.esm.js +4 -0
  123. package/dist/react/contexts/index.esm.js.map +1 -0
  124. package/dist/react/hooks/useDebounce.cjs.js +83 -0
  125. package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
  126. package/dist/react/hooks/useDebounce.esm.js +78 -0
  127. package/dist/react/hooks/useDebounce.esm.js.map +1 -0
  128. package/dist/react/index.cjs.js +99 -12811
  129. package/dist/react/index.cjs.js.map +1 -1
  130. package/dist/react/index.d.ts +1 -1
  131. package/dist/react/index.esm.js +27 -12725
  132. package/dist/react/index.esm.js.map +1 -1
  133. package/dist/react/shared/utils/datetime.cjs.js +59 -0
  134. package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
  135. package/dist/react/shared/utils/datetime.esm.js +57 -0
  136. package/dist/react/shared/utils/datetime.esm.js.map +1 -0
  137. package/dist/react/utils/copyToClipboard.cjs.js +31 -0
  138. package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
  139. package/dist/react/utils/copyToClipboard.esm.js +26 -0
  140. package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
  141. package/dist/react/utils/index.d.ts +1 -1
  142. package/dist/react-native/components/avatar/index.d.ts +26 -0
  143. package/dist/react-native/components/avatar/index.web.d.ts +24 -0
  144. package/dist/react-native/components/badge/index.d.ts +51 -0
  145. package/dist/react-native/components/bigNumber/index.d.ts +26 -0
  146. package/dist/react-native/components/button/index.d.ts +39 -0
  147. package/dist/react-native/components/copyButton/index.d.ts +22 -0
  148. package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
  149. package/dist/react-native/components/dashLogo/index.d.ts +30 -0
  150. package/dist/react-native/components/heading/index.d.ts +25 -0
  151. package/dist/react-native/components/icons/index.d.ts +43 -0
  152. package/dist/react-native/components/identifier/index.d.ts +47 -0
  153. package/dist/react-native/components/index.d.ts +15 -0
  154. package/dist/react-native/components/input/index.d.ts +53 -0
  155. package/dist/react-native/components/notActive/index.d.ts +16 -0
  156. package/dist/react-native/components/tabs/index.d.ts +50 -0
  157. package/dist/react-native/components/text/index.d.ts +28 -0
  158. package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
  159. package/dist/react-native/components/valueCard/index.d.ts +43 -0
  160. package/dist/react-native/hooks/index.d.ts +1 -0
  161. package/dist/react-native/hooks/useDebounce.d.ts +43 -0
  162. package/dist/react-native/index.cjs.js +2856 -0
  163. package/dist/react-native/index.cjs.js.map +1 -0
  164. package/dist/react-native/index.d.ts +4 -0
  165. package/dist/react-native/index.esm.js +2808 -0
  166. package/dist/react-native/index.esm.js.map +1 -0
  167. package/dist/react-native/styles/index.d.ts +11 -0
  168. package/dist/react-native/styles/tokens.d.ts +308 -0
  169. package/dist/react-native/styles/utils.d.ts +65 -0
  170. package/dist/react-native/utils/clipboard.d.ts +27 -0
  171. package/dist/react-native/utils/index.d.ts +2 -0
  172. package/dist/react-native/utils/tw.d.ts +7 -0
  173. package/dist/shared/constants/colors.d.ts +25 -0
  174. package/dist/shared/constants/index.d.ts +2 -0
  175. package/dist/shared/constants/sizes.d.ts +49 -0
  176. package/dist/shared/index.cjs.js +171 -0
  177. package/dist/shared/index.cjs.js.map +1 -0
  178. package/dist/shared/index.d.ts +3 -0
  179. package/dist/shared/index.esm.js +161 -0
  180. package/dist/shared/index.esm.js.map +1 -0
  181. package/dist/shared/types/common.d.ts +33 -0
  182. package/dist/shared/types/index.d.ts +1 -0
  183. package/dist/shared/utils/index.d.ts +1 -0
  184. package/dist/styles.css +1 -1
  185. package/package.json +50 -8
  186. /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
@@ -0,0 +1,184 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var classVarianceAuthority = require('class-variance-authority');
9
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
10
+
11
+ const switchContainer = classVarianceAuthority.cva('flex transition-all duration-200 font-inter gap-2', {
12
+ variants: {
13
+ theme: {
14
+ light: 'bg-white border border-gray-100',
15
+ dark: 'bg-dash-primary-dark-blue/10 outline outline-1 outline-white/15 outline-offset-[-1px]'
16
+ },
17
+ size: {
18
+ sm: 'p-1 rounded-xl',
19
+ md: 'p-2 rounded-2xl',
20
+ xl: 'p-3 rounded-3xl'
21
+ },
22
+ disabled: {
23
+ false: '',
24
+ true: 'opacity-60 cursor-not-allowed'
25
+ }
26
+ },
27
+ compoundVariants: [
28
+ // Light theme shadows
29
+ {
30
+ theme: 'light',
31
+ size: 'sm',
32
+ class: 'shadow-sm'
33
+ }, {
34
+ theme: 'light',
35
+ size: 'md',
36
+ class: 'shadow-lg'
37
+ }, {
38
+ theme: 'light',
39
+ size: 'xl',
40
+ class: 'shadow-xl'
41
+ },
42
+ // Dark theme shadows with brand color
43
+ {
44
+ theme: 'dark',
45
+ size: 'sm',
46
+ class: 'shadow-sm shadow-dash-brand/10'
47
+ }, {
48
+ theme: 'dark',
49
+ size: 'md',
50
+ class: 'shadow-lg shadow-dash-brand/10'
51
+ }, {
52
+ theme: 'dark',
53
+ size: 'xl',
54
+ class: 'shadow-xl shadow-dash-brand/10'
55
+ }],
56
+ defaultVariants: {
57
+ theme: 'light',
58
+ size: 'md',
59
+ disabled: false
60
+ }
61
+ });
62
+ const switchButton = classVarianceAuthority.cva('flex-1 text-center transition-all duration-200 font-medium whitespace-nowrap cursor-pointer font-dash-main', {
63
+ variants: {
64
+ theme: {
65
+ light: '',
66
+ dark: ''
67
+ },
68
+ size: {
69
+ sm: 'py-1 px-2 rounded-lg text-sm',
70
+ md: 'py-2 px-3 rounded-[0.625rem] text-[1rem]',
71
+ xl: 'py-3 px-6 rounded-2xl text-lg font-semibold'
72
+ },
73
+ selected: {
74
+ true: '',
75
+ false: ''
76
+ },
77
+ disabled: {
78
+ false: '',
79
+ true: 'cursor-not-allowed opacity-50'
80
+ }
81
+ },
82
+ compoundVariants: [
83
+ // Selected state - light theme
84
+ {
85
+ theme: 'light',
86
+ selected: true,
87
+ class: 'bg-dash-brand text-white'
88
+ },
89
+ // Selected state - dark theme
90
+ {
91
+ theme: 'dark',
92
+ selected: true,
93
+ class: 'bg-dash-brand text-white'
94
+ },
95
+ // Unselected state - light theme
96
+ {
97
+ theme: 'light',
98
+ selected: false,
99
+ disabled: false,
100
+ class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'
101
+ },
102
+ // Unselected state - dark theme
103
+ {
104
+ theme: 'dark',
105
+ selected: false,
106
+ disabled: false,
107
+ class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'
108
+ },
109
+ // Disabled state - light theme
110
+ {
111
+ theme: 'light',
112
+ selected: false,
113
+ disabled: true,
114
+ class: 'text-gray-400'
115
+ },
116
+ // Disabled state - dark theme
117
+ {
118
+ theme: 'dark',
119
+ selected: false,
120
+ disabled: true,
121
+ class: 'text-gray-500'
122
+ }],
123
+ defaultVariants: {
124
+ theme: 'light',
125
+ size: 'md',
126
+ selected: false,
127
+ disabled: false
128
+ }
129
+ });
130
+ /**
131
+ * A switch component for selecting between multiple options.
132
+ * Supports individual option disabling, hover states, and responsive sizing.
133
+ * Uses dash design system sizing and theming with automatic light/dark mode.
134
+ * @example
135
+ * // With disabled options
136
+ * <Switch
137
+ * options={[
138
+ * { label: 'Basic', value: 'basic' },
139
+ * { label: 'Pro', value: 'pro', disabled: true },
140
+ * { label: 'Free', value: 'free' }
141
+ * ]}
142
+ * value="basic"
143
+ * onChange={(value) => console.log(value)}
144
+ * />
145
+ */
146
+ function Switch({
147
+ options,
148
+ value,
149
+ onChange,
150
+ size = 'md',
151
+ className = '',
152
+ disabled = false
153
+ }) {
154
+ const {
155
+ theme
156
+ } = ThemeContext.useTheme();
157
+ const containerClasses = switchContainer({
158
+ theme,
159
+ size,
160
+ disabled
161
+ }) + ' ' + className;
162
+ return jsxRuntime.jsx("div", {
163
+ className: containerClasses,
164
+ children: options.map((option, index) => {
165
+ const isSelected = option.value === value;
166
+ const isOptionDisabled = disabled || option.disabled;
167
+ return jsxRuntime.jsx("button", {
168
+ onClick: () => !isOptionDisabled && onChange(option.value),
169
+ disabled: isOptionDisabled,
170
+ className: switchButton({
171
+ theme,
172
+ size,
173
+ selected: isSelected,
174
+ disabled: isOptionDisabled
175
+ }),
176
+ children: option.label
177
+ }, index);
178
+ })
179
+ });
180
+ }
181
+
182
+ exports.Switch = Switch;
183
+ exports.default = Switch;
184
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/switch/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst switchContainer = cva(\n 'flex transition-all duration-200 font-inter gap-2',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-100',\n dark: 'bg-dash-primary-dark-blue/10 outline outline-1 outline-white/15 outline-offset-[-1px]'\n },\n size: {\n sm: 'p-1 rounded-xl',\n md: 'p-2 rounded-2xl',\n xl: 'p-3 rounded-3xl'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Light theme shadows\n {\n theme: 'light',\n size: 'sm',\n class: 'shadow-sm'\n },\n {\n theme: 'light',\n size: 'md',\n class: 'shadow-lg'\n },\n {\n theme: 'light',\n size: 'xl',\n class: 'shadow-xl'\n },\n // Dark theme shadows with brand color\n {\n theme: 'dark',\n size: 'sm',\n class: 'shadow-sm shadow-dash-brand/10'\n },\n {\n theme: 'dark',\n size: 'md',\n class: 'shadow-lg shadow-dash-brand/10'\n },\n {\n theme: 'dark',\n size: 'xl',\n class: 'shadow-xl shadow-dash-brand/10'\n }\n ],\n defaultVariants: {\n theme: 'light',\n size: 'md',\n disabled: false\n }\n }\n)\n\nconst switchButton = cva(\n 'flex-1 text-center transition-all duration-200 font-medium whitespace-nowrap cursor-pointer font-dash-main',\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n },\n size: {\n sm: 'py-1 px-2 rounded-lg text-sm',\n md: 'py-2 px-3 rounded-[0.625rem] text-[1rem]',\n xl: 'py-3 px-6 rounded-2xl text-lg font-semibold'\n },\n selected: {\n true: '',\n false: ''\n },\n disabled: {\n false: '',\n true: 'cursor-not-allowed opacity-50'\n }\n },\n compoundVariants: [\n // Selected state - light theme\n {\n theme: 'light',\n selected: true,\n class: 'bg-dash-brand text-white'\n },\n // Selected state - dark theme\n {\n theme: 'dark',\n selected: true,\n class: 'bg-dash-brand text-white'\n },\n // Unselected state - light theme\n {\n theme: 'light',\n selected: false,\n disabled: false,\n class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'\n },\n // Unselected state - dark theme\n {\n theme: 'dark',\n selected: false,\n disabled: false,\n class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'\n },\n // Disabled state - light theme\n {\n theme: 'light',\n selected: false,\n disabled: true,\n class: 'text-gray-400'\n },\n // Disabled state - dark theme\n {\n theme: 'dark',\n selected: false,\n disabled: true,\n class: 'text-gray-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n size: 'md',\n selected: false,\n disabled: false\n }\n }\n)\n\ntype SwitchVariants = VariantProps<typeof switchContainer>\n\n/**\n * Configuration object for a single switch option.\n * \n * @template T - The type of the value (string or number)\n */\nexport interface SwitchOption<T = string | number> {\n /** Display text for the option */\n label: string\n /** Unique value for the option */\n value: T\n /** Whether this specific option is disabled */\n disabled?: boolean\n}\n\n/**\n * Props for the Switch component.\n * \n * @template T - The type of the option values (string or number)\n */\nexport interface SwitchProps<T = string | number> extends Omit<SwitchVariants, 'theme' | 'disabled'> {\n /** Array of options to display */\n options: SwitchOption<T>[]\n /** Currently selected value */\n value: T\n /** Callback when selection changes */\n onChange: (value: T) => void\n /** Additional CSS classes */\n className?: string\n /** Whether the entire switch is disabled */\n disabled?: boolean\n}\n\n/**\n * A switch component for selecting between multiple options.\n * Supports individual option disabling, hover states, and responsive sizing.\n * Uses dash design system sizing and theming with automatic light/dark mode.\n * @example\n * // With disabled options\n * <Switch\n * options={[\n * { label: 'Basic', value: 'basic' },\n * { label: 'Pro', value: 'pro', disabled: true },\n * { label: 'Free', value: 'free' }\n * ]}\n * value=\"basic\"\n * onChange={(value) => console.log(value)}\n * />\n */\nexport function Switch<T = string | number>({\n options,\n value,\n onChange,\n size = 'md',\n className = '',\n disabled = false\n}: SwitchProps<T>): React.JSX.Element {\n const { theme } = useTheme()\n\n const containerClasses = switchContainer({\n theme,\n size,\n disabled\n }) + ' ' + className\n\n return (\n <div className={containerClasses}>\n {options.map((option, index) => {\n const isSelected = option.value === value\n const isOptionDisabled = disabled || option.disabled\n\n return (\n <button\n key={index}\n onClick={() => !isOptionDisabled && onChange(option.value)}\n disabled={isOptionDisabled}\n className={switchButton({\n theme,\n size,\n selected: isSelected,\n disabled: isOptionDisabled\n })}\n >\n {option.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport default Switch "],"names":["switchContainer","cva","variants","theme","light","dark","size","sm","md","xl","disabled","false","true","compoundVariants","class","defaultVariants","switchButton","selected","Switch","options","value","onChange","className","useTheme","containerClasses","_jsx","children","map","option","index","isSelected","isOptionDisabled","onClick","label"],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ "use client";
2
+
3
+ import { jsx } from 'react/jsx-runtime';
4
+ import { cva } from 'class-variance-authority';
5
+ import { useTheme } from '../../contexts/ThemeContext.esm.js';
6
+
7
+ const switchContainer = cva('flex transition-all duration-200 font-inter gap-2', {
8
+ variants: {
9
+ theme: {
10
+ light: 'bg-white border border-gray-100',
11
+ dark: 'bg-dash-primary-dark-blue/10 outline outline-1 outline-white/15 outline-offset-[-1px]'
12
+ },
13
+ size: {
14
+ sm: 'p-1 rounded-xl',
15
+ md: 'p-2 rounded-2xl',
16
+ xl: 'p-3 rounded-3xl'
17
+ },
18
+ disabled: {
19
+ false: '',
20
+ true: 'opacity-60 cursor-not-allowed'
21
+ }
22
+ },
23
+ compoundVariants: [
24
+ // Light theme shadows
25
+ {
26
+ theme: 'light',
27
+ size: 'sm',
28
+ class: 'shadow-sm'
29
+ }, {
30
+ theme: 'light',
31
+ size: 'md',
32
+ class: 'shadow-lg'
33
+ }, {
34
+ theme: 'light',
35
+ size: 'xl',
36
+ class: 'shadow-xl'
37
+ },
38
+ // Dark theme shadows with brand color
39
+ {
40
+ theme: 'dark',
41
+ size: 'sm',
42
+ class: 'shadow-sm shadow-dash-brand/10'
43
+ }, {
44
+ theme: 'dark',
45
+ size: 'md',
46
+ class: 'shadow-lg shadow-dash-brand/10'
47
+ }, {
48
+ theme: 'dark',
49
+ size: 'xl',
50
+ class: 'shadow-xl shadow-dash-brand/10'
51
+ }],
52
+ defaultVariants: {
53
+ theme: 'light',
54
+ size: 'md',
55
+ disabled: false
56
+ }
57
+ });
58
+ const switchButton = cva('flex-1 text-center transition-all duration-200 font-medium whitespace-nowrap cursor-pointer font-dash-main', {
59
+ variants: {
60
+ theme: {
61
+ light: '',
62
+ dark: ''
63
+ },
64
+ size: {
65
+ sm: 'py-1 px-2 rounded-lg text-sm',
66
+ md: 'py-2 px-3 rounded-[0.625rem] text-[1rem]',
67
+ xl: 'py-3 px-6 rounded-2xl text-lg font-semibold'
68
+ },
69
+ selected: {
70
+ true: '',
71
+ false: ''
72
+ },
73
+ disabled: {
74
+ false: '',
75
+ true: 'cursor-not-allowed opacity-50'
76
+ }
77
+ },
78
+ compoundVariants: [
79
+ // Selected state - light theme
80
+ {
81
+ theme: 'light',
82
+ selected: true,
83
+ class: 'bg-dash-brand text-white'
84
+ },
85
+ // Selected state - dark theme
86
+ {
87
+ theme: 'dark',
88
+ selected: true,
89
+ class: 'bg-dash-brand text-white'
90
+ },
91
+ // Unselected state - light theme
92
+ {
93
+ theme: 'light',
94
+ selected: false,
95
+ disabled: false,
96
+ class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'
97
+ },
98
+ // Unselected state - dark theme
99
+ {
100
+ theme: 'dark',
101
+ selected: false,
102
+ disabled: false,
103
+ class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'
104
+ },
105
+ // Disabled state - light theme
106
+ {
107
+ theme: 'light',
108
+ selected: false,
109
+ disabled: true,
110
+ class: 'text-gray-400'
111
+ },
112
+ // Disabled state - dark theme
113
+ {
114
+ theme: 'dark',
115
+ selected: false,
116
+ disabled: true,
117
+ class: 'text-gray-500'
118
+ }],
119
+ defaultVariants: {
120
+ theme: 'light',
121
+ size: 'md',
122
+ selected: false,
123
+ disabled: false
124
+ }
125
+ });
126
+ /**
127
+ * A switch component for selecting between multiple options.
128
+ * Supports individual option disabling, hover states, and responsive sizing.
129
+ * Uses dash design system sizing and theming with automatic light/dark mode.
130
+ * @example
131
+ * // With disabled options
132
+ * <Switch
133
+ * options={[
134
+ * { label: 'Basic', value: 'basic' },
135
+ * { label: 'Pro', value: 'pro', disabled: true },
136
+ * { label: 'Free', value: 'free' }
137
+ * ]}
138
+ * value="basic"
139
+ * onChange={(value) => console.log(value)}
140
+ * />
141
+ */
142
+ function Switch({
143
+ options,
144
+ value,
145
+ onChange,
146
+ size = 'md',
147
+ className = '',
148
+ disabled = false
149
+ }) {
150
+ const {
151
+ theme
152
+ } = useTheme();
153
+ const containerClasses = switchContainer({
154
+ theme,
155
+ size,
156
+ disabled
157
+ }) + ' ' + className;
158
+ return jsx("div", {
159
+ className: containerClasses,
160
+ children: options.map((option, index) => {
161
+ const isSelected = option.value === value;
162
+ const isOptionDisabled = disabled || option.disabled;
163
+ return jsx("button", {
164
+ onClick: () => !isOptionDisabled && onChange(option.value),
165
+ disabled: isOptionDisabled,
166
+ className: switchButton({
167
+ theme,
168
+ size,
169
+ selected: isSelected,
170
+ disabled: isOptionDisabled
171
+ }),
172
+ children: option.label
173
+ }, index);
174
+ })
175
+ });
176
+ }
177
+
178
+ export { Switch, Switch as default };
179
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/switch/index.tsx"],"sourcesContent":["import React from 'react'\nimport { cva, VariantProps } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst switchContainer = cva(\n 'flex transition-all duration-200 font-inter gap-2',\n {\n variants: {\n theme: {\n light: 'bg-white border border-gray-100',\n dark: 'bg-dash-primary-dark-blue/10 outline outline-1 outline-white/15 outline-offset-[-1px]'\n },\n size: {\n sm: 'p-1 rounded-xl',\n md: 'p-2 rounded-2xl',\n xl: 'p-3 rounded-3xl'\n },\n disabled: {\n false: '',\n true: 'opacity-60 cursor-not-allowed'\n }\n },\n compoundVariants: [\n // Light theme shadows\n {\n theme: 'light',\n size: 'sm',\n class: 'shadow-sm'\n },\n {\n theme: 'light',\n size: 'md',\n class: 'shadow-lg'\n },\n {\n theme: 'light',\n size: 'xl',\n class: 'shadow-xl'\n },\n // Dark theme shadows with brand color\n {\n theme: 'dark',\n size: 'sm',\n class: 'shadow-sm shadow-dash-brand/10'\n },\n {\n theme: 'dark',\n size: 'md',\n class: 'shadow-lg shadow-dash-brand/10'\n },\n {\n theme: 'dark',\n size: 'xl',\n class: 'shadow-xl shadow-dash-brand/10'\n }\n ],\n defaultVariants: {\n theme: 'light',\n size: 'md',\n disabled: false\n }\n }\n)\n\nconst switchButton = cva(\n 'flex-1 text-center transition-all duration-200 font-medium whitespace-nowrap cursor-pointer font-dash-main',\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n },\n size: {\n sm: 'py-1 px-2 rounded-lg text-sm',\n md: 'py-2 px-3 rounded-[0.625rem] text-[1rem]',\n xl: 'py-3 px-6 rounded-2xl text-lg font-semibold'\n },\n selected: {\n true: '',\n false: ''\n },\n disabled: {\n false: '',\n true: 'cursor-not-allowed opacity-50'\n }\n },\n compoundVariants: [\n // Selected state - light theme\n {\n theme: 'light',\n selected: true,\n class: 'bg-dash-brand text-white'\n },\n // Selected state - dark theme\n {\n theme: 'dark',\n selected: true,\n class: 'bg-dash-brand text-white'\n },\n // Unselected state - light theme\n {\n theme: 'light',\n selected: false,\n disabled: false,\n class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'\n },\n // Unselected state - dark theme\n {\n theme: 'dark',\n selected: false,\n disabled: false,\n class: 'text-dash-brand hover:bg-dash-brand/10 active:bg-dash-brand/20'\n },\n // Disabled state - light theme\n {\n theme: 'light',\n selected: false,\n disabled: true,\n class: 'text-gray-400'\n },\n // Disabled state - dark theme\n {\n theme: 'dark',\n selected: false,\n disabled: true,\n class: 'text-gray-500'\n }\n ],\n defaultVariants: {\n theme: 'light',\n size: 'md',\n selected: false,\n disabled: false\n }\n }\n)\n\ntype SwitchVariants = VariantProps<typeof switchContainer>\n\n/**\n * Configuration object for a single switch option.\n * \n * @template T - The type of the value (string or number)\n */\nexport interface SwitchOption<T = string | number> {\n /** Display text for the option */\n label: string\n /** Unique value for the option */\n value: T\n /** Whether this specific option is disabled */\n disabled?: boolean\n}\n\n/**\n * Props for the Switch component.\n * \n * @template T - The type of the option values (string or number)\n */\nexport interface SwitchProps<T = string | number> extends Omit<SwitchVariants, 'theme' | 'disabled'> {\n /** Array of options to display */\n options: SwitchOption<T>[]\n /** Currently selected value */\n value: T\n /** Callback when selection changes */\n onChange: (value: T) => void\n /** Additional CSS classes */\n className?: string\n /** Whether the entire switch is disabled */\n disabled?: boolean\n}\n\n/**\n * A switch component for selecting between multiple options.\n * Supports individual option disabling, hover states, and responsive sizing.\n * Uses dash design system sizing and theming with automatic light/dark mode.\n * @example\n * // With disabled options\n * <Switch\n * options={[\n * { label: 'Basic', value: 'basic' },\n * { label: 'Pro', value: 'pro', disabled: true },\n * { label: 'Free', value: 'free' }\n * ]}\n * value=\"basic\"\n * onChange={(value) => console.log(value)}\n * />\n */\nexport function Switch<T = string | number>({\n options,\n value,\n onChange,\n size = 'md',\n className = '',\n disabled = false\n}: SwitchProps<T>): React.JSX.Element {\n const { theme } = useTheme()\n\n const containerClasses = switchContainer({\n theme,\n size,\n disabled\n }) + ' ' + className\n\n return (\n <div className={containerClasses}>\n {options.map((option, index) => {\n const isSelected = option.value === value\n const isOptionDisabled = disabled || option.disabled\n\n return (\n <button\n key={index}\n onClick={() => !isOptionDisabled && onChange(option.value)}\n disabled={isOptionDisabled}\n className={switchButton({\n theme,\n size,\n selected: isSelected,\n disabled: isOptionDisabled\n })}\n >\n {option.label}\n </button>\n )\n })}\n </div>\n )\n}\n\nexport default Switch "],"names":["switchContainer","cva","variants","theme","light","dark","size","sm","md","xl","disabled","false","true","compoundVariants","class","defaultVariants","switchButton","selected","Switch","options","value","onChange","className","useTheme","containerClasses","_jsx","children","map","option","index","isSelected","isOptionDisabled","onClick","label"],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var React = require('react');
9
+ var RadixTabs = require('@radix-ui/react-tabs');
10
+ var classVarianceAuthority = require('class-variance-authority');
11
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
12
+
13
+ function _interopNamespaceDefault(e) {
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var RadixTabs__namespace = /*#__PURE__*/_interopNamespaceDefault(RadixTabs);
31
+
32
+ const tabsRootStyles = classVarianceAuthority.cva('flex flex-col w-full', {
33
+ variants: {
34
+ theme: {
35
+ light: '',
36
+ dark: ''
37
+ }
38
+ },
39
+ defaultVariants: {
40
+ theme: 'light'
41
+ }
42
+ });
43
+ const tabsListStyles = classVarianceAuthority.cva('flex relative overflow-x-auto scrollbar-hide after:absolute after:bottom-0 after:left-0 after:right-0 after:h-[1px] after:transition-colors', {
44
+ variants: {
45
+ theme: {
46
+ light: 'after:bg-[rgba(12,28,51,0.15)]',
47
+ dark: 'after:bg-gray-600/50'
48
+ }
49
+ },
50
+ defaultVariants: {
51
+ theme: 'light'
52
+ }
53
+ });
54
+ const tabsTriggerStyles = classVarianceAuthority.cva(['flex items-center justify-center relative', 'font-dash-main font-light', 'transition-all duration-200 ease-in-out cursor-pointer', 'hover:opacity-80', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500', 'disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:opacity-50', 'whitespace-nowrap flex-shrink-0', 'after:absolute after:bottom-0 after:left-[-0.25rem] after:w-full after:h-[1px] after:bg-transparent after:transition-colors after:duration-200 after:z-10'], {
55
+ variants: {
56
+ theme: {
57
+ light: '',
58
+ dark: ''
59
+ },
60
+ active: {
61
+ true: '',
62
+ false: ''
63
+ },
64
+ size: {
65
+ sm: 'text-sm leading-[1.25] tracking-[-0.02em] px-0 pr-3 pb-2 after:right-3',
66
+ lg: 'text-xl leading-[1.3] tracking-[-0.025em] px-0 pr-4 pb-3 after:right-4',
67
+ xl: 'text-2xl leading-[1.366] tracking-[-0.03em] px-0 pr-[0.875rem] pb-[10px] after:right-[0.875rem]'
68
+ }
69
+ },
70
+ compoundVariants: [{
71
+ theme: 'light',
72
+ active: true,
73
+ class: 'text-dash-primary-dark-blue [text-shadow:0.2px_0_0_currentColor,_-0.2px_0_0_currentColor] after:!bg-[#4C7EFF]'
74
+ }, {
75
+ theme: 'light',
76
+ active: false,
77
+ class: 'text-[rgba(12,28,51,0.35)]'
78
+ }, {
79
+ theme: 'dark',
80
+ active: true,
81
+ class: 'text-white [text-shadow:0.2px_0_0_currentColor,_-0.2px_0_0_currentColor] after:!bg-[#4C7EFF]'
82
+ }, {
83
+ theme: 'dark',
84
+ active: false,
85
+ class: 'text-gray-400'
86
+ }],
87
+ defaultVariants: {
88
+ theme: 'light',
89
+ active: false,
90
+ size: 'xl'
91
+ }
92
+ });
93
+ const tabsContentStyles = classVarianceAuthority.cva('focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500', {
94
+ variants: {
95
+ theme: {
96
+ light: '',
97
+ dark: ''
98
+ },
99
+ size: {
100
+ sm: 'mt-2',
101
+ lg: 'mt-3',
102
+ xl: 'mt-4'
103
+ }
104
+ },
105
+ defaultVariants: {
106
+ theme: 'light',
107
+ size: 'xl'
108
+ }
109
+ });
110
+ /**
111
+ * Tabs component with sleek underline style matching Figma design.
112
+ * Built on radix-ui with light/dark theme support and keyboard navigation.
113
+ */
114
+ const Tabs = ({
115
+ items,
116
+ value,
117
+ defaultValue,
118
+ onValueChange,
119
+ size = 'xl',
120
+ className = '',
121
+ listClassName = '',
122
+ triggerClassName = '',
123
+ contentClassName = ''
124
+ }) => {
125
+ var _a;
126
+ const {
127
+ theme
128
+ } = ThemeContext.useTheme();
129
+ const [internalValue, setInternalValue] = React.useState(defaultValue || ((_a = items[0]) === null || _a === void 0 ? void 0 : _a.value) || '');
130
+ // Use controlled value if provided, otherwise use internal state
131
+ const currentValue = value !== undefined ? value : internalValue;
132
+ const handleValueChange = newValue => {
133
+ if (value === undefined) {
134
+ setInternalValue(newValue);
135
+ }
136
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(newValue);
137
+ };
138
+ const rootClasses = tabsRootStyles({
139
+ theme
140
+ }) + (className ? ` ${className}` : '');
141
+ const listClasses = tabsListStyles({
142
+ theme
143
+ }) + (listClassName ? ` ${listClassName}` : '');
144
+ const contentClasses = tabsContentStyles({
145
+ theme,
146
+ size
147
+ }) + (contentClassName ? ` ${contentClassName}` : '');
148
+ return jsxRuntime.jsxs(RadixTabs__namespace.Root, {
149
+ className: rootClasses,
150
+ value: currentValue,
151
+ onValueChange: handleValueChange,
152
+ children: [jsxRuntime.jsx(RadixTabs__namespace.List, {
153
+ className: listClasses,
154
+ children: items.map(item => {
155
+ const isActive = currentValue === item.value;
156
+ const triggerClasses = tabsTriggerStyles({
157
+ theme,
158
+ active: isActive,
159
+ size
160
+ }) + (triggerClassName ? ` ${triggerClassName}` : '');
161
+ return jsxRuntime.jsx(RadixTabs__namespace.Trigger, {
162
+ value: item.value,
163
+ disabled: item.disabled,
164
+ className: triggerClasses,
165
+ children: item.label
166
+ }, item.value);
167
+ })
168
+ }), items.map(item => jsxRuntime.jsx(RadixTabs__namespace.Content, {
169
+ value: item.value,
170
+ className: contentClasses,
171
+ children: item.content
172
+ }, item.value))]
173
+ });
174
+ };
175
+
176
+ exports.Tabs = Tabs;
177
+ exports.default = Tabs;
178
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/tabs/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as RadixTabs from '@radix-ui/react-tabs'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\n\nconst tabsRootStyles = cva(\n 'flex flex-col w-full',\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst tabsListStyles = cva(\n 'flex relative overflow-x-auto scrollbar-hide after:absolute after:bottom-0 after:left-0 after:right-0 after:h-[1px] after:transition-colors',\n {\n variants: {\n theme: {\n light: 'after:bg-[rgba(12,28,51,0.15)]',\n dark: 'after:bg-gray-600/50'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst tabsTriggerStyles = cva(\n [\n 'flex items-center justify-center relative',\n 'font-dash-main font-light',\n 'transition-all duration-200 ease-in-out cursor-pointer',\n 'hover:opacity-80',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:opacity-50',\n 'whitespace-nowrap flex-shrink-0',\n 'after:absolute after:bottom-0 after:left-[-0.25rem] after:w-full after:h-[1px] after:bg-transparent after:transition-colors after:duration-200 after:z-10'\n ],\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n },\n active: {\n true: '',\n false: ''\n },\n size: {\n sm: 'text-sm leading-[1.25] tracking-[-0.02em] px-0 pr-3 pb-2 after:right-3',\n lg: 'text-xl leading-[1.3] tracking-[-0.025em] px-0 pr-4 pb-3 after:right-4',\n xl: 'text-2xl leading-[1.366] tracking-[-0.03em] px-0 pr-[0.875rem] pb-[10px] after:right-[0.875rem]'\n }\n },\n compoundVariants: [\n {\n theme: 'light',\n active: true,\n class: 'text-dash-primary-dark-blue [text-shadow:0.2px_0_0_currentColor,_-0.2px_0_0_currentColor] after:!bg-[#4C7EFF]'\n },\n {\n theme: 'light',\n active: false,\n class: 'text-[rgba(12,28,51,0.35)]'\n },\n {\n theme: 'dark',\n active: true,\n class: 'text-white [text-shadow:0.2px_0_0_currentColor,_-0.2px_0_0_currentColor] after:!bg-[#4C7EFF]'\n },\n {\n theme: 'dark',\n active: false,\n class: 'text-gray-400'\n }\n ],\n defaultVariants: {\n theme: 'light',\n active: false,\n size: 'xl'\n }\n }\n)\n\nconst tabsContentStyles = cva(\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-blue-500',\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n },\n size: {\n sm: 'mt-2',\n lg: 'mt-3',\n xl: 'mt-4'\n }\n },\n defaultVariants: {\n theme: 'light',\n size: 'xl'\n }\n }\n)\n\nexport interface TabItem {\n /** Unique identifier for the tab */\n value: string\n /** Label text to display */\n label: string\n /** Content to render when tab is active */\n content: React.ReactNode\n /** Whether this tab is disabled */\n disabled?: boolean\n}\n\nexport interface TabsProps {\n /** Array of tab items */\n items: TabItem[]\n /** Currently active tab value (controlled) */\n value?: string\n /** Default active tab value (uncontrolled) */\n defaultValue?: string\n /** Callback when active tab changes */\n onValueChange?: (value: string) => void\n /** Size variant */\n size?: 'sm' | 'lg' | 'xl'\n /** Additional CSS classes */\n className?: string\n /** Additional CSS classes for the tabs list */\n listClassName?: string\n /** Additional CSS classes for tab triggers */\n triggerClassName?: string\n /** Additional CSS classes for tab content */\n contentClassName?: string\n}\n\n/**\n * Tabs component with sleek underline style matching Figma design.\n * Built on radix-ui with light/dark theme support and keyboard navigation.\n */\nexport const Tabs: React.FC<TabsProps> = ({\n items,\n value,\n defaultValue,\n onValueChange,\n size = 'xl',\n className = '',\n listClassName = '',\n triggerClassName = '',\n contentClassName = '',\n}) => {\n const { theme } = useTheme()\n const [internalValue, setInternalValue] = React.useState(defaultValue || items[0]?.value || '')\n \n // Use controlled value if provided, otherwise use internal state\n const currentValue = value !== undefined ? value : internalValue\n \n const handleValueChange = (newValue: string) => {\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onValueChange?.(newValue)\n }\n \n const rootClasses = tabsRootStyles({ theme }) + (className ? ` ${className}` : '')\n const listClasses = tabsListStyles({ theme }) + (listClassName ? ` ${listClassName}` : '')\n const contentClasses = tabsContentStyles({ theme, size }) + (contentClassName ? ` ${contentClassName}` : '')\n\n return (\n <RadixTabs.Root\n className={rootClasses}\n value={currentValue}\n onValueChange={handleValueChange}\n >\n <RadixTabs.List className={listClasses}>\n {items.map((item) => {\n const isActive = currentValue === item.value\n const triggerClasses = tabsTriggerStyles({ \n theme, \n active: isActive,\n size\n }) + (triggerClassName ? ` ${triggerClassName}` : '')\n \n return (\n <RadixTabs.Trigger\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={triggerClasses}\n >\n {item.label}\n </RadixTabs.Trigger>\n )\n })}\n </RadixTabs.List>\n\n {items.map((item) => (\n <RadixTabs.Content\n key={item.value}\n value={item.value}\n className={contentClasses}\n >\n {item.content}\n </RadixTabs.Content>\n ))}\n </RadixTabs.Root>\n )\n}\n\nexport default Tabs\n\n\n"],"names":["tabsRootStyles","cva","variants","theme","light","dark","defaultVariants","tabsListStyles","tabsTriggerStyles","active","true","false","size","sm","lg","xl","compoundVariants","class","tabsContentStyles","Tabs","items","value","defaultValue","onValueChange","className","listClassName","triggerClassName","contentClassName","useTheme","internalValue","setInternalValue","React","useState","_a","currentValue","undefined","handleValueChange","newValue","rootClasses","listClasses","contentClasses","_jsxs","RadixTabs","Root","children","_jsx","List","map","item","isActive","triggerClasses","Trigger","disabled","label","Content","content"],"mappings":"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"}