dash-ui-kit 1.0.94 → 2.1.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 (201) 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 +97 -0
  11. package/dist/react/components/badge/index.cjs.js.map +1 -0
  12. package/dist/react/components/badge/index.d.ts +10 -1
  13. package/dist/react/components/badge/index.esm.js +92 -0
  14. package/dist/react/components/badge/index.esm.js.map +1 -0
  15. package/dist/react/components/bigNumber/index.cjs.js +100 -0
  16. package/dist/react/components/bigNumber/index.cjs.js.map +1 -0
  17. package/dist/react/components/bigNumber/index.esm.js +95 -0
  18. package/dist/react/components/bigNumber/index.esm.js.map +1 -0
  19. package/dist/react/components/button/index.cjs.js +540 -0
  20. package/dist/react/components/button/index.cjs.js.map +1 -0
  21. package/dist/react/components/button/index.d.ts +7 -1
  22. package/dist/react/components/button/index.esm.js +535 -0
  23. package/dist/react/components/button/index.esm.js.map +1 -0
  24. package/dist/react/components/copyButton/index.cjs.js +95 -0
  25. package/dist/react/components/copyButton/index.cjs.js.map +1 -0
  26. package/dist/react/components/copyButton/index.esm.js +71 -0
  27. package/dist/react/components/copyButton/index.esm.js.map +1 -0
  28. package/dist/react/components/dashLogo/index.cjs.js +74 -0
  29. package/dist/react/components/dashLogo/index.cjs.js.map +1 -0
  30. package/dist/react/components/dashLogo/index.esm.js +69 -0
  31. package/dist/react/components/dashLogo/index.esm.js.map +1 -0
  32. package/dist/react/components/dateBlock/index.cjs.js +120 -0
  33. package/dist/react/components/dateBlock/index.cjs.js.map +1 -0
  34. package/dist/react/components/dateBlock/index.esm.js +115 -0
  35. package/dist/react/components/dateBlock/index.esm.js.map +1 -0
  36. package/dist/react/components/dialog/index.cjs.js +292 -0
  37. package/dist/react/components/dialog/index.cjs.js.map +1 -0
  38. package/dist/react/components/dialog/index.esm.js +270 -0
  39. package/dist/react/components/dialog/index.esm.js.map +1 -0
  40. package/dist/react/components/heading/index.cjs.js +65 -0
  41. package/dist/react/components/heading/index.cjs.js.map +1 -0
  42. package/dist/react/components/heading/index.d.ts +4 -1
  43. package/dist/react/components/heading/index.esm.js +63 -0
  44. package/dist/react/components/heading/index.esm.js.map +1 -0
  45. package/dist/react/components/icons/index.cjs.js +1173 -0
  46. package/dist/react/components/icons/index.cjs.js.map +1 -0
  47. package/dist/react/components/icons/index.d.ts +2 -0
  48. package/dist/react/components/icons/index.esm.js +1128 -0
  49. package/dist/react/components/icons/index.esm.js.map +1 -0
  50. package/dist/react/components/identifier/index.cjs.js +286 -0
  51. package/dist/react/components/identifier/index.cjs.js.map +1 -0
  52. package/dist/react/components/identifier/index.esm.js +282 -0
  53. package/dist/react/components/identifier/index.esm.js.map +1 -0
  54. package/dist/react/components/index.cjs.js +101 -0
  55. package/dist/react/components/index.cjs.js.map +1 -0
  56. package/dist/react/components/index.d.ts +1 -1
  57. package/dist/react/components/index.esm.js +29 -0
  58. package/dist/react/components/index.esm.js.map +1 -0
  59. package/dist/react/components/input/index.cjs.js +242 -0
  60. package/dist/react/components/input/index.cjs.js.map +1 -0
  61. package/dist/react/components/input/index.d.ts +4 -0
  62. package/dist/react/components/input/index.esm.js +237 -0
  63. package/dist/react/components/input/index.esm.js.map +1 -0
  64. package/dist/react/components/list/index.cjs.js +49 -0
  65. package/dist/react/components/list/index.cjs.js.map +1 -0
  66. package/dist/react/components/list/index.esm.js +47 -0
  67. package/dist/react/components/list/index.esm.js.map +1 -0
  68. package/dist/react/components/notActive/index.cjs.js +40 -0
  69. package/dist/react/components/notActive/index.cjs.js.map +1 -0
  70. package/dist/react/components/notActive/index.esm.js +38 -0
  71. package/dist/react/components/notActive/index.esm.js.map +1 -0
  72. package/dist/react/components/overlayMenu/index.cjs.js +469 -0
  73. package/dist/react/components/overlayMenu/index.cjs.js.map +1 -0
  74. package/dist/react/components/overlayMenu/index.d.ts +9 -10
  75. package/dist/react/components/overlayMenu/index.esm.js +464 -0
  76. package/dist/react/components/overlayMenu/index.esm.js.map +1 -0
  77. package/dist/react/components/overlaySelect/index.cjs.js +350 -0
  78. package/dist/react/components/overlaySelect/index.cjs.js.map +1 -0
  79. package/dist/react/components/overlaySelect/index.d.ts +4 -0
  80. package/dist/react/components/overlaySelect/index.esm.js +345 -0
  81. package/dist/react/components/overlaySelect/index.esm.js.map +1 -0
  82. package/dist/react/components/progressStepBar/index.cjs.js +54 -0
  83. package/dist/react/components/progressStepBar/index.cjs.js.map +1 -0
  84. package/dist/react/components/progressStepBar/index.d.ts +5 -2
  85. package/dist/react/components/progressStepBar/index.esm.js +52 -0
  86. package/dist/react/components/progressStepBar/index.esm.js.map +1 -0
  87. package/dist/react/components/select/index.cjs.js +241 -0
  88. package/dist/react/components/select/index.cjs.js.map +1 -0
  89. package/dist/react/components/select/index.d.ts +4 -0
  90. package/dist/react/components/select/index.esm.js +217 -0
  91. package/dist/react/components/select/index.esm.js.map +1 -0
  92. package/dist/react/components/switch/index.cjs.js +184 -0
  93. package/dist/react/components/switch/index.cjs.js.map +1 -0
  94. package/dist/react/components/switch/index.esm.js +179 -0
  95. package/dist/react/components/switch/index.esm.js.map +1 -0
  96. package/dist/react/components/tabs/index.cjs.js +178 -0
  97. package/dist/react/components/tabs/index.cjs.js.map +1 -0
  98. package/dist/react/components/tabs/index.esm.js +154 -0
  99. package/dist/react/components/tabs/index.esm.js.map +1 -0
  100. package/dist/react/components/text/index.cjs.js +126 -0
  101. package/dist/react/components/text/index.cjs.js.map +1 -0
  102. package/dist/react/components/text/index.d.ts +5 -0
  103. package/dist/react/components/text/index.esm.js +121 -0
  104. package/dist/react/components/text/index.esm.js.map +1 -0
  105. package/dist/react/components/textarea/index.cjs.js +260 -0
  106. package/dist/react/components/textarea/index.cjs.js.map +1 -0
  107. package/dist/react/components/textarea/index.d.ts +4 -0
  108. package/dist/react/components/textarea/index.esm.js +255 -0
  109. package/dist/react/components/textarea/index.esm.js.map +1 -0
  110. package/dist/react/components/timeDelta/index.cjs.js +93 -0
  111. package/dist/react/components/timeDelta/index.cjs.js.map +1 -0
  112. package/dist/react/components/timeDelta/index.d.ts +1 -1
  113. package/dist/react/components/timeDelta/index.esm.js +88 -0
  114. package/dist/react/components/timeDelta/index.esm.js.map +1 -0
  115. package/dist/react/components/transactionStatusIcon/index.cjs.js +59 -0
  116. package/dist/react/components/transactionStatusIcon/index.cjs.js.map +1 -0
  117. package/dist/react/components/transactionStatusIcon/index.esm.js +54 -0
  118. package/dist/react/components/transactionStatusIcon/index.esm.js.map +1 -0
  119. package/dist/react/components/valueCard/index.cjs.js +181 -0
  120. package/dist/react/components/valueCard/index.cjs.js.map +1 -0
  121. package/dist/react/components/valueCard/index.d.ts +5 -1
  122. package/dist/react/components/valueCard/index.esm.js +176 -0
  123. package/dist/react/components/valueCard/index.esm.js.map +1 -0
  124. package/dist/react/contexts/ThemeContext.cjs.js +79 -0
  125. package/dist/react/contexts/ThemeContext.cjs.js.map +1 -0
  126. package/dist/react/contexts/ThemeContext.esm.js +76 -0
  127. package/dist/react/contexts/ThemeContext.esm.js.map +1 -0
  128. package/dist/react/contexts/index.cjs.js +11 -0
  129. package/dist/react/contexts/index.cjs.js.map +1 -0
  130. package/dist/react/contexts/index.esm.js +4 -0
  131. package/dist/react/contexts/index.esm.js.map +1 -0
  132. package/dist/react/hooks/index.d.ts +1 -0
  133. package/dist/react/hooks/useColorScheme.cjs.js +25 -0
  134. package/dist/react/hooks/useColorScheme.cjs.js.map +1 -0
  135. package/dist/react/hooks/useColorScheme.d.ts +9 -0
  136. package/dist/react/hooks/useColorScheme.esm.js +23 -0
  137. package/dist/react/hooks/useColorScheme.esm.js.map +1 -0
  138. package/dist/react/hooks/useDebounce.cjs.js +83 -0
  139. package/dist/react/hooks/useDebounce.cjs.js.map +1 -0
  140. package/dist/react/hooks/useDebounce.esm.js +78 -0
  141. package/dist/react/hooks/useDebounce.esm.js.map +1 -0
  142. package/dist/react/index.cjs.js +99 -12833
  143. package/dist/react/index.cjs.js.map +1 -1
  144. package/dist/react/index.d.ts +1 -1
  145. package/dist/react/index.esm.js +27 -12747
  146. package/dist/react/index.esm.js.map +1 -1
  147. package/dist/react/shared/utils/datetime.cjs.js +59 -0
  148. package/dist/react/shared/utils/datetime.cjs.js.map +1 -0
  149. package/dist/react/shared/utils/datetime.esm.js +57 -0
  150. package/dist/react/shared/utils/datetime.esm.js.map +1 -0
  151. package/dist/react/utils/copyToClipboard.cjs.js +31 -0
  152. package/dist/react/utils/copyToClipboard.cjs.js.map +1 -0
  153. package/dist/react/utils/copyToClipboard.esm.js +26 -0
  154. package/dist/react/utils/copyToClipboard.esm.js.map +1 -0
  155. package/dist/react/utils/index.d.ts +1 -1
  156. package/dist/react-native/components/avatar/index.d.ts +26 -0
  157. package/dist/react-native/components/avatar/index.web.d.ts +24 -0
  158. package/dist/react-native/components/badge/index.d.ts +63 -0
  159. package/dist/react-native/components/bigNumber/index.d.ts +26 -0
  160. package/dist/react-native/components/button/index.d.ts +45 -0
  161. package/dist/react-native/components/copyButton/index.d.ts +22 -0
  162. package/dist/react-native/components/copyButton/index.web.d.ts +20 -0
  163. package/dist/react-native/components/dashLogo/index.d.ts +30 -0
  164. package/dist/react-native/components/heading/index.d.ts +25 -0
  165. package/dist/react-native/components/icons/index.d.ts +43 -0
  166. package/dist/react-native/components/identifier/index.d.ts +47 -0
  167. package/dist/react-native/components/index.d.ts +15 -0
  168. package/dist/react-native/components/input/index.d.ts +59 -0
  169. package/dist/react-native/components/notActive/index.d.ts +16 -0
  170. package/dist/react-native/components/tabs/index.d.ts +50 -0
  171. package/dist/react-native/components/text/index.d.ts +28 -0
  172. package/dist/react-native/components/transactionStatusIcon/index.d.ts +24 -0
  173. package/dist/react-native/components/valueCard/index.d.ts +47 -0
  174. package/dist/react-native/hooks/index.d.ts +1 -0
  175. package/dist/react-native/hooks/useDebounce.d.ts +43 -0
  176. package/dist/react-native/index.cjs.js +2882 -0
  177. package/dist/react-native/index.cjs.js.map +1 -0
  178. package/dist/react-native/index.d.ts +4 -0
  179. package/dist/react-native/index.esm.js +2833 -0
  180. package/dist/react-native/index.esm.js.map +1 -0
  181. package/dist/react-native/styles/index.d.ts +11 -0
  182. package/dist/react-native/styles/tokens.d.ts +308 -0
  183. package/dist/react-native/styles/utils.d.ts +65 -0
  184. package/dist/react-native/utils/clipboard.d.ts +27 -0
  185. package/dist/react-native/utils/index.d.ts +3 -0
  186. package/dist/react-native/utils/resolveColorScheme.d.ts +1 -0
  187. package/dist/react-native/utils/tw.d.ts +7 -0
  188. package/dist/shared/constants/colors.d.ts +25 -0
  189. package/dist/shared/constants/index.d.ts +2 -0
  190. package/dist/shared/constants/sizes.d.ts +49 -0
  191. package/dist/shared/index.cjs.js +171 -0
  192. package/dist/shared/index.cjs.js.map +1 -0
  193. package/dist/shared/index.d.ts +3 -0
  194. package/dist/shared/index.esm.js +161 -0
  195. package/dist/shared/index.esm.js.map +1 -0
  196. package/dist/shared/types/common.d.ts +33 -0
  197. package/dist/shared/types/index.d.ts +1 -0
  198. package/dist/shared/utils/index.d.ts +1 -0
  199. package/dist/styles.css +1 -1
  200. package/package.json +50 -8
  201. /package/dist/{react → shared}/utils/datetime.d.ts +0 -0
package/README.md CHANGED
@@ -32,6 +32,58 @@ import { Button } from 'dash-ui-kit/react';
32
32
  <Button colorScheme="brand">Button</Button>
33
33
  ```
34
34
 
35
+ ## 📱 React Native Support
36
+
37
+ Dash UI Kit now includes **7 ported components** for React Native with full NativeWind support.
38
+
39
+ ### Installation
40
+
41
+ ```bash
42
+ npm i dash-ui-kit
43
+ npm i nativewind twrnc
44
+ npm i react-native-svg
45
+ ```
46
+
47
+ ### Usage
48
+
49
+ ```tsx
50
+ import { Avatar, Badge, BigNumber, ValueCard } from 'dash-ui-kit/react-native';
51
+
52
+ // Avatar with identicon
53
+ <Avatar identifier="user123" size="md" />
54
+
55
+ // Badge with status
56
+ <Badge colorScheme="success">Active</Badge>
57
+
58
+ // BigNumber with formatting
59
+ <BigNumber variant="space">1234567.89</BigNumber>
60
+
61
+ // ValueCard container
62
+ <ValueCard label="Balance" value="$1,234.56" size="sm" />
63
+ ```
64
+
65
+ ### Available React Native Components
66
+
67
+ - **Avatar** - Unique identicons from usernames/IDs with full customization
68
+ - **Badge** - Status indicators with color schemes and sizes
69
+ - **BigNumber** - Large number formatting with space/comma variants
70
+ - **ValueCard** - Flexible labeled value containers
71
+ - **Identifier** - Transaction/document ID display with copy functionality
72
+ - **CopyButton** - Copy-to-clipboard with visual feedback
73
+ - **NotActive** - Inactive state indicator component
74
+ - **useDebounce** - Custom hook for debouncing values
75
+
76
+ ### Peer Dependencies
77
+
78
+ React Native setup requires:
79
+ - `react-native` >= 0.70
80
+ - `nativewind` for styling (using twrnc)
81
+ - `react-native-svg` for SVG rendering
82
+
83
+ ### Documentation
84
+
85
+ For detailed porting guide and technical details, see [REACT_NATIVE_PORT_GUIDE.md](./REACT_NATIVE_PORT_GUIDE.md)
86
+
35
87
  ## 📦 Components
36
88
 
37
89
  - **ThemeProvider** - Theme context for dark/light mode
@@ -0,0 +1,193 @@
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 RadixAccordion = require('@radix-ui/react-accordion');
9
+ var classVarianceAuthority = require('class-variance-authority');
10
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
11
+ var index = require('../icons/index.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 RadixAccordion__namespace = /*#__PURE__*/_interopNamespaceDefault(RadixAccordion);
31
+
32
+ const accordionRootStyles = classVarianceAuthority.cva(`
33
+ w-full
34
+ rounded-[1rem]
35
+ overflow-hidden
36
+ `, {
37
+ variants: {
38
+ theme: {
39
+ light: 'bg-dash-primary-dark-blue/[0.05]',
40
+ dark: 'bg-gray-800/20'
41
+ },
42
+ border: {
43
+ true: 'ring-1 ring-dash-primary-dark-blue/10',
44
+ false: ''
45
+ }
46
+ },
47
+ defaultVariants: {
48
+ theme: 'light',
49
+ border: false
50
+ }
51
+ });
52
+ const accordionItemStyles = classVarianceAuthority.cva(`
53
+ border-none
54
+ outline-none
55
+ `);
56
+ const accordionTriggerStyles = classVarianceAuthority.cva(`
57
+ w-full
58
+ p-[0.875rem]
59
+ flex
60
+ items-center
61
+ justify-between
62
+ font-dash-main
63
+ font-medium
64
+ text-[0.875rem]
65
+ leading-[1.366]
66
+ text-dash-primary-dark-blue
67
+ bg-transparent
68
+ border-none
69
+ outline-none
70
+ cursor-pointer
71
+ transition-all
72
+ duration-300
73
+ ease-in-out
74
+ hover:bg-dash-primary-dark-blue/[0.01]
75
+ `, {
76
+ variants: {
77
+ theme: {
78
+ light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',
79
+ dark: 'text-white hover:bg-white/5'
80
+ }
81
+ },
82
+ defaultVariants: {
83
+ theme: 'light'
84
+ }
85
+ });
86
+ const accordionContentStyles = classVarianceAuthority.cva(`
87
+ overflow-hidden
88
+ will-change-[height]
89
+ data-[state=open]:h-[var(--radix-accordion-content-height)]
90
+ data-[state=closed]:h-0
91
+ `);
92
+ const accordionContentInnerStyles = classVarianceAuthority.cva(`
93
+ p-[0.875rem]
94
+ space-y-[0.625rem]
95
+ `);
96
+ const separatorStyles = classVarianceAuthority.cva(`
97
+ mx-[0.875rem]
98
+ h-px
99
+ bg-dash-primary-dark-blue/10
100
+ transition-opacity
101
+ duration-300
102
+ ease-in-out
103
+ `, {
104
+ variants: {
105
+ theme: {
106
+ light: 'bg-dash-primary-dark-blue/10',
107
+ dark: 'bg-white/10'
108
+ }
109
+ },
110
+ defaultVariants: {
111
+ theme: 'light'
112
+ }
113
+ });
114
+ const chevronStyles = classVarianceAuthority.cva(`
115
+ w-4
116
+ h-4
117
+ transition-transform
118
+ duration-300
119
+ ease-in-out
120
+ transform
121
+ group-data-[state=open]:rotate-180
122
+ `);
123
+ /**
124
+ * Accordion component based on Radix UI with smooth animations.
125
+ * Displays custom content in an expandable format.
126
+ */
127
+ const Accordion = ({
128
+ title,
129
+ children,
130
+ defaultOpen = false,
131
+ open,
132
+ onOpenChange,
133
+ className = '',
134
+ rightElement,
135
+ showSeparator = false,
136
+ border = false
137
+ }) => {
138
+ const {
139
+ theme
140
+ } = ThemeContext.useTheme();
141
+ const isControlled = open !== undefined;
142
+ const rootClasses = accordionRootStyles({
143
+ theme,
144
+ border
145
+ }) + (className ? ` ${className}` : '');
146
+ return jsxRuntime.jsx(RadixAccordion__namespace.Root, {
147
+ type: 'single',
148
+ collapsible: true,
149
+ className: rootClasses,
150
+ value: isControlled ? open ? 'item-1' : undefined : undefined,
151
+ defaultValue: defaultOpen ? 'item-1' : undefined,
152
+ onValueChange: value => {
153
+ if (onOpenChange) {
154
+ onOpenChange(value === 'item-1');
155
+ }
156
+ },
157
+ children: jsxRuntime.jsxs(RadixAccordion__namespace.Item, {
158
+ value: 'item-1',
159
+ className: `AccordionItem ${accordionItemStyles()} group`,
160
+ children: [jsxRuntime.jsxs(RadixAccordion__namespace.Trigger, {
161
+ className: `${accordionTriggerStyles({
162
+ theme
163
+ })}`,
164
+ children: [jsxRuntime.jsx("div", {
165
+ className: 'w-full text-left',
166
+ children: title
167
+ }), jsxRuntime.jsxs("div", {
168
+ className: 'flex items-center gap-3',
169
+ children: [rightElement && jsxRuntime.jsx("div", {
170
+ children: rightElement
171
+ }), jsxRuntime.jsx(index.ChevronIcon, {
172
+ className: chevronStyles()
173
+ })]
174
+ })]
175
+ }), showSeparator && jsxRuntime.jsx("div", {
176
+ className: `${separatorStyles({
177
+ theme
178
+ })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`
179
+ }), jsxRuntime.jsx(RadixAccordion__namespace.Content, {
180
+ forceMount: true,
181
+ className: accordionContentStyles(),
182
+ children: jsxRuntime.jsx("div", {
183
+ className: accordionContentInnerStyles(),
184
+ children: children
185
+ })
186
+ })]
187
+ })
188
+ });
189
+ };
190
+
191
+ exports.Accordion = Accordion;
192
+ exports.default = Accordion;
193
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/accordion/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as RadixAccordion from '@radix-ui/react-accordion'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { ChevronIcon } from '../icons'\n\nconst accordionRootStyles = cva(\n `\n w-full\n rounded-[1rem]\n overflow-hidden\n `,\n {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/[0.05]',\n dark: 'bg-gray-800/20'\n },\n border: {\n true: 'ring-1 ring-dash-primary-dark-blue/10',\n false: ''\n }\n },\n defaultVariants: {\n theme: 'light',\n border: false\n }\n }\n)\n\nconst accordionItemStyles = cva(\n `\n border-none\n outline-none\n `\n)\n\nconst accordionTriggerStyles = cva(\n `\n w-full\n p-[0.875rem]\n flex\n items-center\n justify-between\n font-dash-main\n font-medium\n text-[0.875rem]\n leading-[1.366]\n text-dash-primary-dark-blue\n bg-transparent\n border-none\n outline-none\n cursor-pointer\n transition-all\n duration-300\n ease-in-out\n hover:bg-dash-primary-dark-blue/[0.01]\n `,\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',\n dark: 'text-white hover:bg-white/5'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst accordionContentStyles = cva(`\n overflow-hidden\n will-change-[height]\n data-[state=open]:h-[var(--radix-accordion-content-height)]\n data-[state=closed]:h-0\n`)\n\nconst accordionContentInnerStyles = cva(`\n p-[0.875rem]\n space-y-[0.625rem]\n`)\n\nconst separatorStyles = cva(`\n mx-[0.875rem]\n h-px\n bg-dash-primary-dark-blue/10\n transition-opacity\n duration-300\n ease-in-out\n`, {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/10',\n dark: 'bg-white/10'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n})\n\nconst chevronStyles = cva(`\n w-4\n h-4\n transition-transform\n duration-300\n ease-in-out\n transform\n group-data-[state=open]:rotate-180\n`)\n\nexport interface AccordionProps {\n /** The title displayed in the accordion trigger */\n title: string\n /** Content to display in the accordion */\n children?: React.ReactNode\n /** Whether the accordion is open by default */\n defaultOpen?: boolean\n /** Controlled open state */\n open?: boolean\n /** Callback when the open state changes */\n onOpenChange?: (open: boolean) => void\n /** Additional CSS classes */\n className?: string\n /** Optional element to display on the right side of the trigger */\n rightElement?: React.ReactNode\n /** Whether to show separator between title and content when open */\n showSeparator?: boolean\n /** Whether to show border around the accordion */\n border?: boolean\n}\n\n/**\n * Accordion component based on Radix UI with smooth animations.\n * Displays custom content in an expandable format.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n open,\n onOpenChange,\n className = '',\n rightElement,\n showSeparator = false,\n border = false\n}) => {\n const { theme } = useTheme()\n const isControlled = open !== undefined\n\n const rootClasses = accordionRootStyles({ theme, border }) + (className ? ` ${className}` : '')\n\n return (\n <RadixAccordion.Root\n type='single'\n collapsible\n className={rootClasses}\n value={isControlled ? (open ? 'item-1' : undefined) : undefined}\n defaultValue={defaultOpen ? 'item-1' : undefined}\n onValueChange={(value) => {\n if (onOpenChange) {\n onOpenChange(value === 'item-1')\n }\n }}\n >\n <RadixAccordion.Item\n value='item-1'\n className={`AccordionItem ${accordionItemStyles()} group`}\n >\n <RadixAccordion.Trigger \n className={`${accordionTriggerStyles({ theme })}`}\n >\n <div className='w-full text-left'>{title}</div>\n <div className='flex items-center gap-3'>\n {rightElement && <div>{rightElement}</div>}\n <ChevronIcon className={chevronStyles()} />\n </div>\n </RadixAccordion.Trigger>\n\n {showSeparator && (\n <div className={`${separatorStyles({ theme })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`} />\n )}\n\n <RadixAccordion.Content forceMount className={accordionContentStyles()}>\n <div className={accordionContentInnerStyles()}>\n {children}\n </div>\n </RadixAccordion.Content>\n </RadixAccordion.Item>\n </RadixAccordion.Root>\n )\n}\n\nexport default Accordion\n"],"names":["accordionRootStyles","cva","variants","theme","light","dark","border","true","false","defaultVariants","accordionItemStyles","accordionTriggerStyles","accordionContentStyles","accordionContentInnerStyles","separatorStyles","chevronStyles","Accordion","title","children","defaultOpen","open","onOpenChange","className","rightElement","showSeparator","useTheme","isControlled","undefined","rootClasses","_jsx","RadixAccordion","Root","type","collapsible","value","defaultValue","onValueChange","_jsxs","Item","Trigger","ChevronIcon","Content","forceMount"],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ "use client";
2
+
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import * as RadixAccordion from '@radix-ui/react-accordion';
5
+ import { cva } from 'class-variance-authority';
6
+ import { useTheme } from '../../contexts/ThemeContext.esm.js';
7
+ import { ChevronIcon } from '../icons/index.esm.js';
8
+
9
+ const accordionRootStyles = cva(`
10
+ w-full
11
+ rounded-[1rem]
12
+ overflow-hidden
13
+ `, {
14
+ variants: {
15
+ theme: {
16
+ light: 'bg-dash-primary-dark-blue/[0.05]',
17
+ dark: 'bg-gray-800/20'
18
+ },
19
+ border: {
20
+ true: 'ring-1 ring-dash-primary-dark-blue/10',
21
+ false: ''
22
+ }
23
+ },
24
+ defaultVariants: {
25
+ theme: 'light',
26
+ border: false
27
+ }
28
+ });
29
+ const accordionItemStyles = cva(`
30
+ border-none
31
+ outline-none
32
+ `);
33
+ const accordionTriggerStyles = cva(`
34
+ w-full
35
+ p-[0.875rem]
36
+ flex
37
+ items-center
38
+ justify-between
39
+ font-dash-main
40
+ font-medium
41
+ text-[0.875rem]
42
+ leading-[1.366]
43
+ text-dash-primary-dark-blue
44
+ bg-transparent
45
+ border-none
46
+ outline-none
47
+ cursor-pointer
48
+ transition-all
49
+ duration-300
50
+ ease-in-out
51
+ hover:bg-dash-primary-dark-blue/[0.01]
52
+ `, {
53
+ variants: {
54
+ theme: {
55
+ light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',
56
+ dark: 'text-white hover:bg-white/5'
57
+ }
58
+ },
59
+ defaultVariants: {
60
+ theme: 'light'
61
+ }
62
+ });
63
+ const accordionContentStyles = cva(`
64
+ overflow-hidden
65
+ will-change-[height]
66
+ data-[state=open]:h-[var(--radix-accordion-content-height)]
67
+ data-[state=closed]:h-0
68
+ `);
69
+ const accordionContentInnerStyles = cva(`
70
+ p-[0.875rem]
71
+ space-y-[0.625rem]
72
+ `);
73
+ const separatorStyles = cva(`
74
+ mx-[0.875rem]
75
+ h-px
76
+ bg-dash-primary-dark-blue/10
77
+ transition-opacity
78
+ duration-300
79
+ ease-in-out
80
+ `, {
81
+ variants: {
82
+ theme: {
83
+ light: 'bg-dash-primary-dark-blue/10',
84
+ dark: 'bg-white/10'
85
+ }
86
+ },
87
+ defaultVariants: {
88
+ theme: 'light'
89
+ }
90
+ });
91
+ const chevronStyles = cva(`
92
+ w-4
93
+ h-4
94
+ transition-transform
95
+ duration-300
96
+ ease-in-out
97
+ transform
98
+ group-data-[state=open]:rotate-180
99
+ `);
100
+ /**
101
+ * Accordion component based on Radix UI with smooth animations.
102
+ * Displays custom content in an expandable format.
103
+ */
104
+ const Accordion = ({
105
+ title,
106
+ children,
107
+ defaultOpen = false,
108
+ open,
109
+ onOpenChange,
110
+ className = '',
111
+ rightElement,
112
+ showSeparator = false,
113
+ border = false
114
+ }) => {
115
+ const {
116
+ theme
117
+ } = useTheme();
118
+ const isControlled = open !== undefined;
119
+ const rootClasses = accordionRootStyles({
120
+ theme,
121
+ border
122
+ }) + (className ? ` ${className}` : '');
123
+ return jsx(RadixAccordion.Root, {
124
+ type: 'single',
125
+ collapsible: true,
126
+ className: rootClasses,
127
+ value: isControlled ? open ? 'item-1' : undefined : undefined,
128
+ defaultValue: defaultOpen ? 'item-1' : undefined,
129
+ onValueChange: value => {
130
+ if (onOpenChange) {
131
+ onOpenChange(value === 'item-1');
132
+ }
133
+ },
134
+ children: jsxs(RadixAccordion.Item, {
135
+ value: 'item-1',
136
+ className: `AccordionItem ${accordionItemStyles()} group`,
137
+ children: [jsxs(RadixAccordion.Trigger, {
138
+ className: `${accordionTriggerStyles({
139
+ theme
140
+ })}`,
141
+ children: [jsx("div", {
142
+ className: 'w-full text-left',
143
+ children: title
144
+ }), jsxs("div", {
145
+ className: 'flex items-center gap-3',
146
+ children: [rightElement && jsx("div", {
147
+ children: rightElement
148
+ }), jsx(ChevronIcon, {
149
+ className: chevronStyles()
150
+ })]
151
+ })]
152
+ }), showSeparator && jsx("div", {
153
+ className: `${separatorStyles({
154
+ theme
155
+ })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`
156
+ }), jsx(RadixAccordion.Content, {
157
+ forceMount: true,
158
+ className: accordionContentStyles(),
159
+ children: jsx("div", {
160
+ className: accordionContentInnerStyles(),
161
+ children: children
162
+ })
163
+ })]
164
+ })
165
+ });
166
+ };
167
+
168
+ export { Accordion, Accordion as default };
169
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/accordion/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as RadixAccordion from '@radix-ui/react-accordion'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { ChevronIcon } from '../icons'\n\nconst accordionRootStyles = cva(\n `\n w-full\n rounded-[1rem]\n overflow-hidden\n `,\n {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/[0.05]',\n dark: 'bg-gray-800/20'\n },\n border: {\n true: 'ring-1 ring-dash-primary-dark-blue/10',\n false: ''\n }\n },\n defaultVariants: {\n theme: 'light',\n border: false\n }\n }\n)\n\nconst accordionItemStyles = cva(\n `\n border-none\n outline-none\n `\n)\n\nconst accordionTriggerStyles = cva(\n `\n w-full\n p-[0.875rem]\n flex\n items-center\n justify-between\n font-dash-main\n font-medium\n text-[0.875rem]\n leading-[1.366]\n text-dash-primary-dark-blue\n bg-transparent\n border-none\n outline-none\n cursor-pointer\n transition-all\n duration-300\n ease-in-out\n hover:bg-dash-primary-dark-blue/[0.01]\n `,\n {\n variants: {\n theme: {\n light: 'text-dash-primary-dark-blue hover:bg-dash-primary-dark-blue/[0.05]',\n dark: 'text-white hover:bg-white/5'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n }\n)\n\nconst accordionContentStyles = cva(`\n overflow-hidden\n will-change-[height]\n data-[state=open]:h-[var(--radix-accordion-content-height)]\n data-[state=closed]:h-0\n`)\n\nconst accordionContentInnerStyles = cva(`\n p-[0.875rem]\n space-y-[0.625rem]\n`)\n\nconst separatorStyles = cva(`\n mx-[0.875rem]\n h-px\n bg-dash-primary-dark-blue/10\n transition-opacity\n duration-300\n ease-in-out\n`, {\n variants: {\n theme: {\n light: 'bg-dash-primary-dark-blue/10',\n dark: 'bg-white/10'\n }\n },\n defaultVariants: {\n theme: 'light'\n }\n})\n\nconst chevronStyles = cva(`\n w-4\n h-4\n transition-transform\n duration-300\n ease-in-out\n transform\n group-data-[state=open]:rotate-180\n`)\n\nexport interface AccordionProps {\n /** The title displayed in the accordion trigger */\n title: string\n /** Content to display in the accordion */\n children?: React.ReactNode\n /** Whether the accordion is open by default */\n defaultOpen?: boolean\n /** Controlled open state */\n open?: boolean\n /** Callback when the open state changes */\n onOpenChange?: (open: boolean) => void\n /** Additional CSS classes */\n className?: string\n /** Optional element to display on the right side of the trigger */\n rightElement?: React.ReactNode\n /** Whether to show separator between title and content when open */\n showSeparator?: boolean\n /** Whether to show border around the accordion */\n border?: boolean\n}\n\n/**\n * Accordion component based on Radix UI with smooth animations.\n * Displays custom content in an expandable format.\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n title,\n children,\n defaultOpen = false,\n open,\n onOpenChange,\n className = '',\n rightElement,\n showSeparator = false,\n border = false\n}) => {\n const { theme } = useTheme()\n const isControlled = open !== undefined\n\n const rootClasses = accordionRootStyles({ theme, border }) + (className ? ` ${className}` : '')\n\n return (\n <RadixAccordion.Root\n type='single'\n collapsible\n className={rootClasses}\n value={isControlled ? (open ? 'item-1' : undefined) : undefined}\n defaultValue={defaultOpen ? 'item-1' : undefined}\n onValueChange={(value) => {\n if (onOpenChange) {\n onOpenChange(value === 'item-1')\n }\n }}\n >\n <RadixAccordion.Item\n value='item-1'\n className={`AccordionItem ${accordionItemStyles()} group`}\n >\n <RadixAccordion.Trigger \n className={`${accordionTriggerStyles({ theme })}`}\n >\n <div className='w-full text-left'>{title}</div>\n <div className='flex items-center gap-3'>\n {rightElement && <div>{rightElement}</div>}\n <ChevronIcon className={chevronStyles()} />\n </div>\n </RadixAccordion.Trigger>\n\n {showSeparator && (\n <div className={`${separatorStyles({ theme })} group-data-[state=closed]:opacity-0 group-data-[state=open]:opacity-100`} />\n )}\n\n <RadixAccordion.Content forceMount className={accordionContentStyles()}>\n <div className={accordionContentInnerStyles()}>\n {children}\n </div>\n </RadixAccordion.Content>\n </RadixAccordion.Item>\n </RadixAccordion.Root>\n )\n}\n\nexport default Accordion\n"],"names":["accordionRootStyles","cva","variants","theme","light","dark","border","true","false","defaultVariants","accordionItemStyles","accordionTriggerStyles","accordionContentStyles","accordionContentInnerStyles","separatorStyles","chevronStyles","Accordion","title","children","defaultOpen","open","onOpenChange","className","rightElement","showSeparator","useTheme","isControlled","undefined","rootClasses","_jsx","RadixAccordion","Root","type","collapsible","value","defaultValue","onValueChange","_jsxs","Item","Trigger","ChevronIcon","Content","forceMount"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var tslib = require('tslib');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var React = require('react');
10
+ var minidenticons = require('minidenticons');
11
+
12
+ /**
13
+ * Avatar component that creates unique identicons from usernames
14
+ * with customizable appearance.
15
+ */
16
+ const Avatar = _a => {
17
+ var {
18
+ username,
19
+ className = '',
20
+ saturation = 50,
21
+ lightness = 50
22
+ } = _a,
23
+ props = tslib.__rest(_a, ["username", "className", "saturation", "lightness"]);
24
+ const svgURI = React.useMemo(() => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticons.minidenticon(username, saturation, lightness)), [username, saturation, lightness]);
25
+ const containerClasses = `relative inline-block ${className}`.trim();
26
+ const imageClasses = 'w-full h-full';
27
+ return jsxRuntime.jsx("div", {
28
+ className: containerClasses,
29
+ children: jsxRuntime.jsx("img", Object.assign({
30
+ src: svgURI,
31
+ alt: username || '',
32
+ className: imageClasses
33
+ }, props))
34
+ });
35
+ };
36
+
37
+ exports.Avatar = Avatar;
38
+ exports.default = Avatar;
39
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/avatar/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { minidenticon } from 'minidenticons'\n\nexport interface AvatarProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n /** Username to generate identicon for */\n username: string\n /** Additional CSS class name */\n className?: string\n /** Saturation level for the identicon (0-100) */\n saturation?: number\n /** Lightness level for the identicon (0-100) */\n lightness?: number\n}\n\n/**\n * Avatar component that creates unique identicons from usernames\n * with customizable appearance.\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n username,\n className = '',\n saturation = 50,\n lightness = 50,\n ...props\n}) => {\n const svgURI = useMemo(\n () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)),\n [username, saturation, lightness]\n )\n\n const containerClasses = `relative inline-block ${className}`.trim()\n const imageClasses = 'w-full h-full'\n\n return (\n <div className={containerClasses}>\n <img\n src={svgURI}\n alt={username || ''}\n className={imageClasses}\n {...props}\n />\n </div>\n )\n}\n\nexport default Avatar\n"],"names":["Avatar","_a","username","className","saturation","lightness","props","__rest","svgURI","useMemo","encodeURIComponent","minidenticon","containerClasses","trim","imageClasses","_jsx","Object","assign","src","alt"],"mappings":";;;;;;;;;;;AAcA;;;AAGG;AACUA,MAAAA,MAAM,GAA2BC,EAM7C,IAAI;EANyC,IAAA;MAC5CC,QAAQ;AACRC,MAAAA,SAAS,GAAG,EAAE;AACdC,MAAAA,UAAU,GAAG,EAAE;AACfC,MAAAA,SAAS,GAAG;AAAE,KAAA,GAAAJ,EAEf;AADIK,IAAAA,KAAK,GAAAC,YAAA,CAAAN,EAAA,EALoC,oDAM7C,CADS;EAER,MAAMO,MAAM,GAAGC,aAAO,CACpB,MAAM,0BAA0B,GAAGC,kBAAkB,CAACC,0BAAY,CAACT,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAAC,EACpG,CAACH,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAClC;EAED,MAAMO,gBAAgB,GAAG,CAAyBT,sBAAAA,EAAAA,SAAS,EAAE,CAACU,IAAI,EAAE;EACpE,MAAMC,YAAY,GAAG,eAAe;EAEpC,OACEC,cAAK,CAAA,KAAA,EAAA;AAAAZ,IAAAA,SAAS,EAAES,gBAAgB;cAC9BG,cACE,CAAA,KAAA,EAAAC,MAAA,CAAAC,MAAA,CAAA;AAAAC,MAAAA,GAAG,EAAEV,MAAM;MACXW,GAAG,EAAEjB,QAAQ,IAAI,EAAE;AACnBC,MAAAA,SAAS,EAAEW;KAAY,EACnBR,KAAK,CAAA;AAEP,GAAA,CAAA;AAEV;;;;;"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+
3
+ import { __rest } from 'tslib';
4
+ import { jsx } from 'react/jsx-runtime';
5
+ import { useMemo } from 'react';
6
+ import { minidenticon } from 'minidenticons';
7
+
8
+ /**
9
+ * Avatar component that creates unique identicons from usernames
10
+ * with customizable appearance.
11
+ */
12
+ const Avatar = _a => {
13
+ var {
14
+ username,
15
+ className = '',
16
+ saturation = 50,
17
+ lightness = 50
18
+ } = _a,
19
+ props = __rest(_a, ["username", "className", "saturation", "lightness"]);
20
+ const svgURI = useMemo(() => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)), [username, saturation, lightness]);
21
+ const containerClasses = `relative inline-block ${className}`.trim();
22
+ const imageClasses = 'w-full h-full';
23
+ return jsx("div", {
24
+ className: containerClasses,
25
+ children: jsx("img", Object.assign({
26
+ src: svgURI,
27
+ alt: username || '',
28
+ className: imageClasses
29
+ }, props))
30
+ });
31
+ };
32
+
33
+ export { Avatar, Avatar as default };
34
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/avatar/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { minidenticon } from 'minidenticons'\n\nexport interface AvatarProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n /** Username to generate identicon for */\n username: string\n /** Additional CSS class name */\n className?: string\n /** Saturation level for the identicon (0-100) */\n saturation?: number\n /** Lightness level for the identicon (0-100) */\n lightness?: number\n}\n\n/**\n * Avatar component that creates unique identicons from usernames\n * with customizable appearance.\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n username,\n className = '',\n saturation = 50,\n lightness = 50,\n ...props\n}) => {\n const svgURI = useMemo(\n () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(username, saturation, lightness)),\n [username, saturation, lightness]\n )\n\n const containerClasses = `relative inline-block ${className}`.trim()\n const imageClasses = 'w-full h-full'\n\n return (\n <div className={containerClasses}>\n <img\n src={svgURI}\n alt={username || ''}\n className={imageClasses}\n {...props}\n />\n </div>\n )\n}\n\nexport default Avatar\n"],"names":["Avatar","_a","username","className","saturation","lightness","props","__rest","svgURI","useMemo","encodeURIComponent","minidenticon","containerClasses","trim","imageClasses","_jsx","Object","assign","src","alt"],"mappings":";;;;;;;AAcA;;;AAGG;AACUA,MAAAA,MAAM,GAA2BC,EAM7C,IAAI;EANyC,IAAA;MAC5CC,QAAQ;AACRC,MAAAA,SAAS,GAAG,EAAE;AACdC,MAAAA,UAAU,GAAG,EAAE;AACfC,MAAAA,SAAS,GAAG;AAAE,KAAA,GAAAJ,EAEf;AADIK,IAAAA,KAAK,GAAAC,MAAA,CAAAN,EAAA,EALoC,oDAM7C,CADS;EAER,MAAMO,MAAM,GAAGC,OAAO,CACpB,MAAM,0BAA0B,GAAGC,kBAAkB,CAACC,YAAY,CAACT,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAAC,EACpG,CAACH,QAAQ,EAAEE,UAAU,EAAEC,SAAS,CAAC,CAClC;EAED,MAAMO,gBAAgB,GAAG,CAAyBT,sBAAAA,EAAAA,SAAS,EAAE,CAACU,IAAI,EAAE;EACpE,MAAMC,YAAY,GAAG,eAAe;EAEpC,OACEC,GAAK,CAAA,KAAA,EAAA;AAAAZ,IAAAA,SAAS,EAAES,gBAAgB;cAC9BG,GACE,CAAA,KAAA,EAAAC,MAAA,CAAAC,MAAA,CAAA;AAAAC,MAAAA,GAAG,EAAEV,MAAM;MACXW,GAAG,EAAEjB,QAAQ,IAAI,EAAE;AACnBC,MAAAA,SAAS,EAAEW;KAAY,EACnBR,KAAK,CAAA;AAEP,GAAA,CAAA;AAEV;;;;"}
@@ -0,0 +1,97 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ Object.defineProperty(exports, '__esModule', { value: true });
6
+
7
+ var tslib = require('tslib');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var useColorScheme = require('../../hooks/useColorScheme.cjs.js');
10
+
11
+ const Badge = _a => {
12
+ var _b;
13
+ var {
14
+ children,
15
+ variant = 'default',
16
+ color,
17
+ colorLight,
18
+ colorDark,
19
+ size = 'sm',
20
+ borderRadius,
21
+ className = '',
22
+ onClick
23
+ } = _a,
24
+ props = tslib.__rest(_a, ["children", "variant", "color", "colorLight", "colorDark", "size", "borderRadius", "className", "onClick"]);
25
+ const effectiveColor = (_b = useColorScheme.useColorScheme(color, colorLight, colorDark)) !== null && _b !== void 0 ? _b : 'blue';
26
+ const baseClasses = 'inline-flex items-center justify-center font-medium transition-colors';
27
+ // Size classes with default border radius
28
+ const sizeClasses = {
29
+ xxs: 'px-1 py-1 text-xs gap-2 rounded-full',
30
+ xs: 'px-[0.5rem] py-[0.25rem] text-xs rounded-full',
31
+ sm: 'px-[2.125rem] py-[0.625rem] text-xs rounded-full',
32
+ xl: 'px-[2.25rem] py-4 text-lg rounded-full'
33
+ };
34
+ // Border radius classes (overrides size border radius)
35
+ const borderRadiusClasses = {
36
+ xs: 'rounded-[0.25rem]'
37
+ };
38
+ // Color and variant combination classes
39
+ const getVariantClasses = () => {
40
+ const colorMap = {
41
+ blue: {
42
+ default: 'text-[#4C7EFF]',
43
+ flat: 'bg-[rgba(76,126,255,0.15)] text-[#4C7EFF]',
44
+ solid: 'bg-[#4C7EFF] text-white',
45
+ bordered: 'outline outline-1 outline-[#4C7EFF] text-[#4C7EFF]'
46
+ },
47
+ white: {
48
+ default: 'text-white',
49
+ flat: 'bg-[rgba(255,255,255,0.15)] text-white',
50
+ solid: 'bg-white text-[#0C1C33]',
51
+ bordered: 'outline outline-1 outline-white text-white'
52
+ },
53
+ gray: {
54
+ default: 'text-[#0C1C33]',
55
+ flat: 'bg-[rgba(12,28,51,0.15)] text-[#0C1C33]',
56
+ solid: 'bg-[#0C1C33] text-white',
57
+ bordered: 'outline outline-1 outline-[#0C1C33] text-[#0C1C33]'
58
+ },
59
+ 'light-gray': {
60
+ default: 'text-[#6B7280]',
61
+ flat: 'bg-[#0C1C33]/5 text-[#0C1C33]',
62
+ solid: 'bg-[#0C1C33]/15 text-[#0C1C33]',
63
+ bordered: 'outline outline-1 outline-[#6B7280] text-[#6B7280]'
64
+ },
65
+ turquoise: {
66
+ default: 'text-[#60F6D2]',
67
+ flat: 'bg-[rgba(96,246,210,0.15)] text-[#60F6D2]',
68
+ solid: 'bg-[#60F6D2] text-[#0C1C33]',
69
+ bordered: 'outline outline-1 outline-[#60F6D2] text-[#60F6D2]'
70
+ },
71
+ red: {
72
+ default: 'text-[#CD2E00]',
73
+ flat: 'bg-[rgba(205,46,0,0.15)] text-[#CD2E00]',
74
+ solid: 'bg-[#CD2E00] text-white',
75
+ bordered: 'outline outline-1 outline-[#CD2E00] text-[#CD2E00]'
76
+ },
77
+ orange: {
78
+ default: 'text-[#F98F12]',
79
+ flat: 'bg-[rgba(249,143,18,0.15)] text-[#F98F12]',
80
+ solid: 'bg-[#F98F12] text-white',
81
+ bordered: 'outline outline-1 outline-[#F98F12] text-[#F98F12]'
82
+ }
83
+ };
84
+ return colorMap[effectiveColor][variant];
85
+ };
86
+ const classes = [baseClasses, sizeClasses[size], getVariantClasses(), borderRadius && borderRadiusClasses[borderRadius], className].filter(Boolean).join(' ');
87
+ return jsxRuntime.jsx("span", Object.assign({
88
+ className: classes,
89
+ onClick: onClick
90
+ }, props, {
91
+ children: children
92
+ }));
93
+ };
94
+
95
+ exports.Badge = Badge;
96
+ exports.default = Badge;
97
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/badge/index.tsx"],"sourcesContent":["import React from 'react';\nimport { useColorScheme } from '../../hooks/useColorScheme'\n\ntype BadgeColor = 'blue' | 'white' | 'gray' | 'light-gray' | 'turquoise' | 'red' | 'orange'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Content of the badge\n */\n children: React.ReactNode;\n\n /**\n * Visual style variant\n */\n variant?: 'default' | 'flat' | 'solid' | 'bordered';\n\n /**\n * Color theme\n */\n color?: BadgeColor;\n\n /**\n * Color override for light theme\n */\n colorLight?: BadgeColor;\n\n /**\n * Color override for dark theme\n */\n colorDark?: BadgeColor;\n\n /**\n * Size of the badge\n */\n size?: 'xxs' | 'xs' | 'sm' | 'xl';\n\n /**\n * Border radius variant\n */\n borderRadius?: 'xs';\n\n /**\n * Additional CSS class name\n */\n className?: string;\n\n /**\n * Click handler\n */\n onClick?: React.MouseEventHandler<HTMLSpanElement>;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n children,\n variant = 'default',\n color,\n colorLight,\n colorDark,\n size = 'sm',\n borderRadius,\n className = '',\n onClick,\n ...props\n}) => {\n const effectiveColor = useColorScheme(color, colorLight, colorDark) ?? 'blue'\n const baseClasses = 'inline-flex items-center justify-center font-medium transition-colors';\n \n // Size classes with default border radius\n const sizeClasses = {\n xxs: 'px-1 py-1 text-xs gap-2 rounded-full',\n xs: 'px-[0.5rem] py-[0.25rem] text-xs rounded-full',\n sm: 'px-[2.125rem] py-[0.625rem] text-xs rounded-full',\n xl: 'px-[2.25rem] py-4 text-lg rounded-full',\n }\n\n // Border radius classes (overrides size border radius)\n const borderRadiusClasses = {\n xs: 'rounded-[0.25rem]',\n }\n \n // Color and variant combination classes\n const getVariantClasses = () => {\n const colorMap = {\n blue: {\n default: 'text-[#4C7EFF]',\n flat: 'bg-[rgba(76,126,255,0.15)] text-[#4C7EFF]',\n solid: 'bg-[#4C7EFF] text-white',\n bordered: 'outline outline-1 outline-[#4C7EFF] text-[#4C7EFF]',\n },\n white: {\n default: 'text-white',\n flat: 'bg-[rgba(255,255,255,0.15)] text-white',\n solid: 'bg-white text-[#0C1C33]',\n bordered: 'outline outline-1 outline-white text-white',\n },\n gray: {\n default: 'text-[#0C1C33]',\n flat: 'bg-[rgba(12,28,51,0.15)] text-[#0C1C33]',\n solid: 'bg-[#0C1C33] text-white',\n bordered: 'outline outline-1 outline-[#0C1C33] text-[#0C1C33]',\n },\n 'light-gray': {\n default: 'text-[#6B7280]',\n flat: 'bg-[#0C1C33]/5 text-[#0C1C33]',\n solid: 'bg-[#0C1C33]/15 text-[#0C1C33]',\n bordered: 'outline outline-1 outline-[#6B7280] text-[#6B7280]',\n },\n turquoise: {\n default: 'text-[#60F6D2]',\n flat: 'bg-[rgba(96,246,210,0.15)] text-[#60F6D2]',\n solid: 'bg-[#60F6D2] text-[#0C1C33]',\n bordered: 'outline outline-1 outline-[#60F6D2] text-[#60F6D2]',\n },\n red: {\n default: 'text-[#CD2E00]',\n flat: 'bg-[rgba(205,46,0,0.15)] text-[#CD2E00]',\n solid: 'bg-[#CD2E00] text-white',\n bordered: 'outline outline-1 outline-[#CD2E00] text-[#CD2E00]',\n },\n orange: {\n default: 'text-[#F98F12]',\n flat: 'bg-[rgba(249,143,18,0.15)] text-[#F98F12]',\n solid: 'bg-[#F98F12] text-white',\n bordered: 'outline outline-1 outline-[#F98F12] text-[#F98F12]',\n },\n }\n \n return colorMap[effectiveColor][variant];\n }\n \n const classes = [\n baseClasses,\n sizeClasses[size],\n getVariantClasses(),\n borderRadius && borderRadiusClasses[borderRadius],\n className,\n ].filter(Boolean).join(' ')\n \n return (\n <span className={classes} onClick={onClick} {...props}>\n {children}\n </span>\n )\n}\n\nexport default Badge\n"],"names":["Badge","_a","children","variant","color","colorLight","colorDark","size","borderRadius","className","onClick","props","__rest","effectiveColor","_b","useColorScheme","baseClasses","sizeClasses","xxs","xs","sm","xl","borderRadiusClasses","getVariantClasses","colorMap","blue","default","flat","solid","bordered","white","gray","turquoise","red","orange","classes","filter","Boolean","join","_jsx","Object","assign"],"mappings":"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"}