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,292 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var Dialog = require('@radix-ui/react-dialog');
7
+ var classVarianceAuthority = require('class-variance-authority');
8
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
9
+ var index = require('../icons/index.cjs.js');
10
+
11
+ function _interopNamespaceDefault(e) {
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var Dialog__namespace = /*#__PURE__*/_interopNamespaceDefault(Dialog);
29
+
30
+ // Visually hidden component for accessibility
31
+ const VisuallyHidden = ({
32
+ children
33
+ }) => jsxRuntime.jsx("span", {
34
+ style: {
35
+ position: 'absolute',
36
+ border: 0,
37
+ width: 1,
38
+ height: 1,
39
+ padding: 0,
40
+ margin: -1,
41
+ overflow: 'hidden',
42
+ clip: 'rect(0, 0, 0, 0)',
43
+ whiteSpace: 'nowrap',
44
+ wordWrap: 'normal'
45
+ },
46
+ children: children
47
+ });
48
+ const overlayStyles = classVarianceAuthority.cva(`
49
+ fixed
50
+ inset-0
51
+ z-50
52
+ bg-black/80
53
+ data-[state=open]:animate-in
54
+ data-[state=closed]:animate-out
55
+ data-[state=closed]:fade-out-0
56
+ data-[state=open]:fade-in-0
57
+ `, {
58
+ variants: {
59
+ theme: {
60
+ light: '',
61
+ dark: ''
62
+ }
63
+ }
64
+ });
65
+ const contentStyles = classVarianceAuthority.cva(`
66
+ fixed
67
+ left-[50%]
68
+ z-50
69
+ w-full
70
+ translate-x-[-50%]
71
+ flex
72
+ flex-col
73
+ gap-4
74
+ p-6
75
+ shadow-lg
76
+ duration-200
77
+ data-[state=open]:animate-in
78
+ data-[state=closed]:animate-out
79
+ data-[state=closed]:fade-out-0
80
+ data-[state=open]:fade-in-0
81
+ data-[state=closed]:zoom-out-95
82
+ data-[state=open]:zoom-in-95
83
+ sm:rounded-lg
84
+ font-dash-main
85
+ `, {
86
+ variants: {
87
+ theme: {
88
+ light: 'bg-white border-gray-200',
89
+ dark: 'bg-gray-950 border-gray-800'
90
+ },
91
+ size: {
92
+ sm: 'dash-block-sm',
93
+ md: 'dash-block-md',
94
+ xl: 'dash-block-xl'
95
+ },
96
+ position: {
97
+ center: `
98
+ top-[50%]
99
+ translate-y-[-50%]
100
+ data-[state=closed]:slide-out-to-left-1/2
101
+ data-[state=closed]:slide-out-to-top-[48%]
102
+ data-[state=open]:slide-in-from-left-1/2
103
+ data-[state=open]:slide-in-from-top-[48%]
104
+ `,
105
+ bottom: `
106
+ data-[state=closed]:slide-out-to-left-1/2
107
+ data-[state=closed]:slide-out-to-bottom-full
108
+ data-[state=open]:slide-in-from-left-1/2
109
+ data-[state=open]:slide-in-from-bottom-full
110
+ `
111
+ }
112
+ },
113
+ defaultVariants: {
114
+ size: 'md',
115
+ position: 'center'
116
+ }
117
+ });
118
+ const headerStyles = classVarianceAuthority.cva(`
119
+ flex
120
+ flex-row
121
+ justify-between
122
+ items-center
123
+ gap-1
124
+ w-full
125
+ `);
126
+ const titleStyles = classVarianceAuthority.cva(`
127
+ text-2xl
128
+ font-medium
129
+ leading-[1.366]
130
+ tracking-[-0.03em]
131
+ flex-1
132
+ font-dash-main
133
+ `, {
134
+ variants: {
135
+ theme: {
136
+ light: 'text-[#0C1C33]',
137
+ dark: 'text-gray-50'
138
+ }
139
+ }
140
+ });
141
+ const closeButtonStyles = classVarianceAuthority.cva(`
142
+ rounded-sm
143
+ opacity-70
144
+ transition-opacity
145
+ hover:opacity-100
146
+ focus:outline-none
147
+ disabled:pointer-events-none
148
+ cursor-pointer
149
+ flex-shrink-0
150
+ `, {
151
+ variants: {
152
+ theme: {
153
+ light: 'text-[#0C1C33] hover:text-gray-700',
154
+ dark: 'text-gray-400 hover:text-gray-200'
155
+ }
156
+ }
157
+ });
158
+ const DashDialog = ({
159
+ open,
160
+ onOpenChange,
161
+ title,
162
+ showCloseButton = true,
163
+ size = 'md',
164
+ position = 'center',
165
+ bottomOffset = 24,
166
+ maxWidth,
167
+ horizontalMargin,
168
+ children,
169
+ className = '',
170
+ trigger
171
+ }) => {
172
+ const {
173
+ theme
174
+ } = ThemeContext.useTheme();
175
+ // Calculate position and sizing styles
176
+ const customStyles = {};
177
+ if (position === 'bottom') {
178
+ customStyles.bottom = `${bottomOffset}px`;
179
+ }
180
+ if (maxWidth) {
181
+ // Check if it's a Tailwind size (sm, md, lg, xl, 2xl, etc.) or a CSS value
182
+ const tailwindSizes = {
183
+ 'xs': '320px',
184
+ 'sm': '384px',
185
+ 'md': '448px',
186
+ 'lg': '512px',
187
+ 'xl': '576px',
188
+ '2xl': '672px',
189
+ '3xl': '768px',
190
+ '4xl': '896px',
191
+ '5xl': '1024px',
192
+ '6xl': '1152px',
193
+ '7xl': '1280px'
194
+ };
195
+ customStyles.maxWidth = tailwindSizes[maxWidth] || maxWidth;
196
+ }
197
+ if (horizontalMargin !== undefined) {
198
+ // Set max width to viewport width minus margins on both sides
199
+ const marginConstraint = `calc(100vw - ${horizontalMargin * 2}px)`;
200
+ if (customStyles.maxWidth) {
201
+ // If maxWidth is already set, use the smaller of the two
202
+ customStyles.maxWidth = `min(${customStyles.maxWidth}, ${marginConstraint})`;
203
+ } else {
204
+ customStyles.maxWidth = marginConstraint;
205
+ }
206
+ // Keep the dialog centered but constrained by the calculated maxWidth
207
+ // The existing left-[50%] translate-x-[-50%] will handle centering
208
+ }
209
+ const DialogContent = jsxRuntime.jsxs(Dialog__namespace.Portal, {
210
+ children: [jsxRuntime.jsx(Dialog__namespace.Overlay, {
211
+ className: overlayStyles({
212
+ theme
213
+ })
214
+ }), jsxRuntime.jsxs(Dialog__namespace.Content, {
215
+ "aria-describedby": undefined,
216
+ className: `${contentStyles({
217
+ theme,
218
+ size,
219
+ position
220
+ })} ${className}`,
221
+ style: customStyles,
222
+ children: [title ?
223
+ // Render visible title in header if provided
224
+ jsxRuntime.jsxs("div", {
225
+ className: headerStyles(),
226
+ children: [jsxRuntime.jsx(Dialog__namespace.Title, {
227
+ className: titleStyles({
228
+ theme
229
+ }),
230
+ children: title
231
+ }), showCloseButton && jsxRuntime.jsxs(Dialog__namespace.Close, {
232
+ className: closeButtonStyles({
233
+ theme
234
+ }),
235
+ children: [jsxRuntime.jsx("div", {
236
+ className: 'w-8 h-8 flex items-center justify-center',
237
+ children: jsxRuntime.jsx(index.CrossIcon, {
238
+ size: 16
239
+ })
240
+ }), jsxRuntime.jsx("span", {
241
+ className: 'sr-only',
242
+ children: "Close"
243
+ })]
244
+ })]
245
+ }) :
246
+ // No title provided - render visually hidden title for accessibility
247
+ jsxRuntime.jsxs(jsxRuntime.Fragment, {
248
+ children: [jsxRuntime.jsx(Dialog__namespace.Title, {
249
+ children: jsxRuntime.jsx(VisuallyHidden, {
250
+ children: "Dialog"
251
+ })
252
+ }), showCloseButton && jsxRuntime.jsx("div", {
253
+ className: headerStyles(),
254
+ children: jsxRuntime.jsxs(Dialog__namespace.Close, {
255
+ className: closeButtonStyles({
256
+ theme
257
+ }),
258
+ children: [jsxRuntime.jsx("div", {
259
+ className: 'w-8 h-8 flex items-center justify-center',
260
+ children: jsxRuntime.jsx(index.CrossIcon, {
261
+ size: 16
262
+ })
263
+ }), jsxRuntime.jsx("span", {
264
+ className: 'sr-only',
265
+ children: "Close"
266
+ })]
267
+ })
268
+ })]
269
+ }), children]
270
+ })]
271
+ });
272
+ if (trigger) {
273
+ // Uncontrolled mode with trigger
274
+ return jsxRuntime.jsxs(Dialog__namespace.Root, {
275
+ onOpenChange: onOpenChange,
276
+ children: [jsxRuntime.jsx(Dialog__namespace.Trigger, {
277
+ asChild: true,
278
+ children: trigger
279
+ }), DialogContent]
280
+ });
281
+ }
282
+ // Controlled mode
283
+ return jsxRuntime.jsx(Dialog__namespace.Root, {
284
+ open: open,
285
+ onOpenChange: onOpenChange,
286
+ children: DialogContent
287
+ });
288
+ };
289
+
290
+ exports.DashDialog = DashDialog;
291
+ exports.Dialog = DashDialog;
292
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/react/components/dialog/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\n\n// Visually hidden component for accessibility\nconst VisuallyHidden: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <span\n style={{\n position: 'absolute',\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n }}\n >\n {children}\n </span>\n)\n\nconst overlayStyles = cva(\n `\n fixed\n inset-0\n z-50\n bg-black/80\n data-[state=open]:animate-in\n data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0\n data-[state=open]:fade-in-0\n `,\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n }\n }\n }\n)\n\nconst contentStyles = cva(\n `\n fixed\n left-[50%]\n z-50\n w-full\n translate-x-[-50%]\n flex\n flex-col\n gap-4\n p-6\n shadow-lg\n duration-200\n data-[state=open]:animate-in\n data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0\n data-[state=open]:fade-in-0\n data-[state=closed]:zoom-out-95\n data-[state=open]:zoom-in-95\n sm:rounded-lg\n font-dash-main\n `,\n {\n variants: {\n theme: {\n light: 'bg-white border-gray-200',\n dark: 'bg-gray-950 border-gray-800'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n position: {\n center: `\n top-[50%]\n translate-y-[-50%]\n data-[state=closed]:slide-out-to-left-1/2\n data-[state=closed]:slide-out-to-top-[48%]\n data-[state=open]:slide-in-from-left-1/2\n data-[state=open]:slide-in-from-top-[48%]\n `,\n bottom: `\n data-[state=closed]:slide-out-to-left-1/2\n data-[state=closed]:slide-out-to-bottom-full\n data-[state=open]:slide-in-from-left-1/2\n data-[state=open]:slide-in-from-bottom-full\n `\n }\n },\n defaultVariants: {\n size: 'md',\n position: 'center'\n }\n }\n)\n\nconst headerStyles = cva(\n `\n flex\n flex-row\n justify-between\n items-center\n gap-1\n w-full\n `\n)\n\nconst titleStyles = cva(\n `\n text-2xl\n font-medium\n leading-[1.366]\n tracking-[-0.03em]\n flex-1\n font-dash-main\n `,\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33]',\n dark: 'text-gray-50'\n }\n }\n }\n)\n\nconst closeButtonStyles = cva(\n `\n rounded-sm\n opacity-70\n transition-opacity\n hover:opacity-100\n focus:outline-none\n disabled:pointer-events-none\n cursor-pointer\n flex-shrink-0\n `,\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] hover:text-gray-700',\n dark: 'text-gray-400 hover:text-gray-200'\n }\n }\n }\n)\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open?: boolean\n /** Callback when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Dialog title */\n title?: string\n /** Whether to show the close button */\n showCloseButton?: boolean\n /** Dialog size */\n size?: 'sm' | 'md' | 'xl'\n /** Vertical position of the dialog */\n position?: 'center' | 'bottom'\n /** Offset from bottom when position is 'bottom' (in pixels) */\n bottomOffset?: number\n /** Maximum width of the dialog (e.g., '500px', '50%', '2xl'). Use Tailwind classes like 'sm', 'md', 'lg', 'xl', '2xl', etc. or CSS values */\n maxWidth?: string\n /** Horizontal margin from screen edges (in pixels) */\n horizontalMargin?: number\n /** Dialog content */\n children: React.ReactNode\n /** Additional className for the content container */\n className?: string\n /** Custom trigger element (if not controlled) */\n trigger?: React.ReactNode\n}\n\nexport const DashDialog: React.FC<DialogProps> = ({\n open,\n onOpenChange,\n title,\n showCloseButton = true,\n size = 'md',\n position = 'center',\n bottomOffset = 24,\n maxWidth,\n horizontalMargin,\n children,\n className = '',\n trigger\n}) => {\n const { theme } = useTheme()\n\n // Calculate position and sizing styles\n const customStyles: React.CSSProperties = {}\n \n if (position === 'bottom') {\n customStyles.bottom = `${bottomOffset}px`\n }\n \n if (maxWidth) {\n // Check if it's a Tailwind size (sm, md, lg, xl, 2xl, etc.) or a CSS value\n const tailwindSizes: Record<string, string> = {\n 'xs': '320px',\n 'sm': '384px',\n 'md': '448px',\n 'lg': '512px',\n 'xl': '576px',\n '2xl': '672px',\n '3xl': '768px',\n '4xl': '896px',\n '5xl': '1024px',\n '6xl': '1152px',\n '7xl': '1280px'\n }\n customStyles.maxWidth = tailwindSizes[maxWidth] || maxWidth\n }\n \n if (horizontalMargin !== undefined) {\n // Set max width to viewport width minus margins on both sides\n const marginConstraint = `calc(100vw - ${horizontalMargin * 2}px)`\n \n if (customStyles.maxWidth) {\n // If maxWidth is already set, use the smaller of the two\n customStyles.maxWidth = `min(${customStyles.maxWidth}, ${marginConstraint})`\n } else {\n customStyles.maxWidth = marginConstraint\n }\n \n // Keep the dialog centered but constrained by the calculated maxWidth\n // The existing left-[50%] translate-x-[-50%] will handle centering\n }\n\n const DialogContent = (\n <Dialog.Portal>\n <Dialog.Overlay className={overlayStyles({ theme })} />\n <Dialog.Content \n aria-describedby={undefined} \n className={`${contentStyles({ theme, size, position })} ${className}`}\n style={customStyles}\n >\n {/* Accessibility: Always provide a title */}\n {title ? (\n // Render visible title in header if provided\n <div className={headerStyles()}>\n <Dialog.Title className={titleStyles({ theme })}>\n {title}\n </Dialog.Title>\n {showCloseButton && (\n <Dialog.Close className={closeButtonStyles({ theme })}>\n <div className='w-8 h-8 flex items-center justify-center'>\n <CrossIcon size={16} />\n </div>\n <span className='sr-only'>Close</span>\n </Dialog.Close>\n )}\n </div>\n ) : (\n // No title provided - render visually hidden title for accessibility\n <>\n <Dialog.Title>\n <VisuallyHidden>Dialog</VisuallyHidden>\n </Dialog.Title>\n {showCloseButton && (\n <div className={headerStyles()}>\n <Dialog.Close className={closeButtonStyles({ theme })}>\n <div className='w-8 h-8 flex items-center justify-center'>\n <CrossIcon size={16} />\n </div>\n <span className='sr-only'>Close</span>\n </Dialog.Close>\n </div>\n )}\n </>\n )}\n {children}\n </Dialog.Content>\n </Dialog.Portal>\n )\n\n if (trigger) {\n // Uncontrolled mode with trigger\n return (\n <Dialog.Root onOpenChange={onOpenChange}>\n <Dialog.Trigger asChild>\n {trigger}\n </Dialog.Trigger>\n {DialogContent}\n </Dialog.Root>\n )\n }\n\n // Controlled mode\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n {DialogContent}\n </Dialog.Root>\n )\n}\n\nexport { DashDialog as Dialog }\n"],"names":["VisuallyHidden","children","_jsx","style","position","border","width","height","padding","margin","overflow","clip","whiteSpace","wordWrap","overlayStyles","cva","variants","theme","light","dark","contentStyles","size","sm","md","xl","center","bottom","defaultVariants","headerStyles","titleStyles","closeButtonStyles","DashDialog","open","onOpenChange","title","showCloseButton","bottomOffset","maxWidth","horizontalMargin","className","trigger","useTheme","customStyles","tailwindSizes","undefined","marginConstraint","DialogContent","_jsxs","Dialog","Portal","Overlay","Content","Title","Close","CrossIcon","_Fragment","Root","Trigger","asChild"],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ "use client";
2
+
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+ import * as Dialog from '@radix-ui/react-dialog';
5
+ import { cva } from 'class-variance-authority';
6
+ import { useTheme } from '../../contexts/ThemeContext.esm.js';
7
+ import { CrossIcon } from '../icons/index.esm.js';
8
+
9
+ // Visually hidden component for accessibility
10
+ const VisuallyHidden = ({
11
+ children
12
+ }) => jsx("span", {
13
+ style: {
14
+ position: 'absolute',
15
+ border: 0,
16
+ width: 1,
17
+ height: 1,
18
+ padding: 0,
19
+ margin: -1,
20
+ overflow: 'hidden',
21
+ clip: 'rect(0, 0, 0, 0)',
22
+ whiteSpace: 'nowrap',
23
+ wordWrap: 'normal'
24
+ },
25
+ children: children
26
+ });
27
+ const overlayStyles = cva(`
28
+ fixed
29
+ inset-0
30
+ z-50
31
+ bg-black/80
32
+ data-[state=open]:animate-in
33
+ data-[state=closed]:animate-out
34
+ data-[state=closed]:fade-out-0
35
+ data-[state=open]:fade-in-0
36
+ `, {
37
+ variants: {
38
+ theme: {
39
+ light: '',
40
+ dark: ''
41
+ }
42
+ }
43
+ });
44
+ const contentStyles = cva(`
45
+ fixed
46
+ left-[50%]
47
+ z-50
48
+ w-full
49
+ translate-x-[-50%]
50
+ flex
51
+ flex-col
52
+ gap-4
53
+ p-6
54
+ shadow-lg
55
+ duration-200
56
+ data-[state=open]:animate-in
57
+ data-[state=closed]:animate-out
58
+ data-[state=closed]:fade-out-0
59
+ data-[state=open]:fade-in-0
60
+ data-[state=closed]:zoom-out-95
61
+ data-[state=open]:zoom-in-95
62
+ sm:rounded-lg
63
+ font-dash-main
64
+ `, {
65
+ variants: {
66
+ theme: {
67
+ light: 'bg-white border-gray-200',
68
+ dark: 'bg-gray-950 border-gray-800'
69
+ },
70
+ size: {
71
+ sm: 'dash-block-sm',
72
+ md: 'dash-block-md',
73
+ xl: 'dash-block-xl'
74
+ },
75
+ position: {
76
+ center: `
77
+ top-[50%]
78
+ translate-y-[-50%]
79
+ data-[state=closed]:slide-out-to-left-1/2
80
+ data-[state=closed]:slide-out-to-top-[48%]
81
+ data-[state=open]:slide-in-from-left-1/2
82
+ data-[state=open]:slide-in-from-top-[48%]
83
+ `,
84
+ bottom: `
85
+ data-[state=closed]:slide-out-to-left-1/2
86
+ data-[state=closed]:slide-out-to-bottom-full
87
+ data-[state=open]:slide-in-from-left-1/2
88
+ data-[state=open]:slide-in-from-bottom-full
89
+ `
90
+ }
91
+ },
92
+ defaultVariants: {
93
+ size: 'md',
94
+ position: 'center'
95
+ }
96
+ });
97
+ const headerStyles = cva(`
98
+ flex
99
+ flex-row
100
+ justify-between
101
+ items-center
102
+ gap-1
103
+ w-full
104
+ `);
105
+ const titleStyles = cva(`
106
+ text-2xl
107
+ font-medium
108
+ leading-[1.366]
109
+ tracking-[-0.03em]
110
+ flex-1
111
+ font-dash-main
112
+ `, {
113
+ variants: {
114
+ theme: {
115
+ light: 'text-[#0C1C33]',
116
+ dark: 'text-gray-50'
117
+ }
118
+ }
119
+ });
120
+ const closeButtonStyles = cva(`
121
+ rounded-sm
122
+ opacity-70
123
+ transition-opacity
124
+ hover:opacity-100
125
+ focus:outline-none
126
+ disabled:pointer-events-none
127
+ cursor-pointer
128
+ flex-shrink-0
129
+ `, {
130
+ variants: {
131
+ theme: {
132
+ light: 'text-[#0C1C33] hover:text-gray-700',
133
+ dark: 'text-gray-400 hover:text-gray-200'
134
+ }
135
+ }
136
+ });
137
+ const DashDialog = ({
138
+ open,
139
+ onOpenChange,
140
+ title,
141
+ showCloseButton = true,
142
+ size = 'md',
143
+ position = 'center',
144
+ bottomOffset = 24,
145
+ maxWidth,
146
+ horizontalMargin,
147
+ children,
148
+ className = '',
149
+ trigger
150
+ }) => {
151
+ const {
152
+ theme
153
+ } = useTheme();
154
+ // Calculate position and sizing styles
155
+ const customStyles = {};
156
+ if (position === 'bottom') {
157
+ customStyles.bottom = `${bottomOffset}px`;
158
+ }
159
+ if (maxWidth) {
160
+ // Check if it's a Tailwind size (sm, md, lg, xl, 2xl, etc.) or a CSS value
161
+ const tailwindSizes = {
162
+ 'xs': '320px',
163
+ 'sm': '384px',
164
+ 'md': '448px',
165
+ 'lg': '512px',
166
+ 'xl': '576px',
167
+ '2xl': '672px',
168
+ '3xl': '768px',
169
+ '4xl': '896px',
170
+ '5xl': '1024px',
171
+ '6xl': '1152px',
172
+ '7xl': '1280px'
173
+ };
174
+ customStyles.maxWidth = tailwindSizes[maxWidth] || maxWidth;
175
+ }
176
+ if (horizontalMargin !== undefined) {
177
+ // Set max width to viewport width minus margins on both sides
178
+ const marginConstraint = `calc(100vw - ${horizontalMargin * 2}px)`;
179
+ if (customStyles.maxWidth) {
180
+ // If maxWidth is already set, use the smaller of the two
181
+ customStyles.maxWidth = `min(${customStyles.maxWidth}, ${marginConstraint})`;
182
+ } else {
183
+ customStyles.maxWidth = marginConstraint;
184
+ }
185
+ // Keep the dialog centered but constrained by the calculated maxWidth
186
+ // The existing left-[50%] translate-x-[-50%] will handle centering
187
+ }
188
+ const DialogContent = jsxs(Dialog.Portal, {
189
+ children: [jsx(Dialog.Overlay, {
190
+ className: overlayStyles({
191
+ theme
192
+ })
193
+ }), jsxs(Dialog.Content, {
194
+ "aria-describedby": undefined,
195
+ className: `${contentStyles({
196
+ theme,
197
+ size,
198
+ position
199
+ })} ${className}`,
200
+ style: customStyles,
201
+ children: [title ?
202
+ // Render visible title in header if provided
203
+ jsxs("div", {
204
+ className: headerStyles(),
205
+ children: [jsx(Dialog.Title, {
206
+ className: titleStyles({
207
+ theme
208
+ }),
209
+ children: title
210
+ }), showCloseButton && jsxs(Dialog.Close, {
211
+ className: closeButtonStyles({
212
+ theme
213
+ }),
214
+ children: [jsx("div", {
215
+ className: 'w-8 h-8 flex items-center justify-center',
216
+ children: jsx(CrossIcon, {
217
+ size: 16
218
+ })
219
+ }), jsx("span", {
220
+ className: 'sr-only',
221
+ children: "Close"
222
+ })]
223
+ })]
224
+ }) :
225
+ // No title provided - render visually hidden title for accessibility
226
+ jsxs(Fragment, {
227
+ children: [jsx(Dialog.Title, {
228
+ children: jsx(VisuallyHidden, {
229
+ children: "Dialog"
230
+ })
231
+ }), showCloseButton && jsx("div", {
232
+ className: headerStyles(),
233
+ children: jsxs(Dialog.Close, {
234
+ className: closeButtonStyles({
235
+ theme
236
+ }),
237
+ children: [jsx("div", {
238
+ className: 'w-8 h-8 flex items-center justify-center',
239
+ children: jsx(CrossIcon, {
240
+ size: 16
241
+ })
242
+ }), jsx("span", {
243
+ className: 'sr-only',
244
+ children: "Close"
245
+ })]
246
+ })
247
+ })]
248
+ }), children]
249
+ })]
250
+ });
251
+ if (trigger) {
252
+ // Uncontrolled mode with trigger
253
+ return jsxs(Dialog.Root, {
254
+ onOpenChange: onOpenChange,
255
+ children: [jsx(Dialog.Trigger, {
256
+ asChild: true,
257
+ children: trigger
258
+ }), DialogContent]
259
+ });
260
+ }
261
+ // Controlled mode
262
+ return jsx(Dialog.Root, {
263
+ open: open,
264
+ onOpenChange: onOpenChange,
265
+ children: DialogContent
266
+ });
267
+ };
268
+
269
+ export { DashDialog, DashDialog as Dialog };
270
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/react/components/dialog/index.tsx"],"sourcesContent":["import React from 'react'\nimport * as Dialog from '@radix-ui/react-dialog'\nimport { cva } from 'class-variance-authority'\nimport { useTheme } from '../../contexts/ThemeContext'\nimport { CrossIcon } from '../icons'\n\n// Visually hidden component for accessibility\nconst VisuallyHidden: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <span\n style={{\n position: 'absolute',\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n }}\n >\n {children}\n </span>\n)\n\nconst overlayStyles = cva(\n `\n fixed\n inset-0\n z-50\n bg-black/80\n data-[state=open]:animate-in\n data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0\n data-[state=open]:fade-in-0\n `,\n {\n variants: {\n theme: {\n light: '',\n dark: ''\n }\n }\n }\n)\n\nconst contentStyles = cva(\n `\n fixed\n left-[50%]\n z-50\n w-full\n translate-x-[-50%]\n flex\n flex-col\n gap-4\n p-6\n shadow-lg\n duration-200\n data-[state=open]:animate-in\n data-[state=closed]:animate-out\n data-[state=closed]:fade-out-0\n data-[state=open]:fade-in-0\n data-[state=closed]:zoom-out-95\n data-[state=open]:zoom-in-95\n sm:rounded-lg\n font-dash-main\n `,\n {\n variants: {\n theme: {\n light: 'bg-white border-gray-200',\n dark: 'bg-gray-950 border-gray-800'\n },\n size: {\n sm: 'dash-block-sm',\n md: 'dash-block-md',\n xl: 'dash-block-xl'\n },\n position: {\n center: `\n top-[50%]\n translate-y-[-50%]\n data-[state=closed]:slide-out-to-left-1/2\n data-[state=closed]:slide-out-to-top-[48%]\n data-[state=open]:slide-in-from-left-1/2\n data-[state=open]:slide-in-from-top-[48%]\n `,\n bottom: `\n data-[state=closed]:slide-out-to-left-1/2\n data-[state=closed]:slide-out-to-bottom-full\n data-[state=open]:slide-in-from-left-1/2\n data-[state=open]:slide-in-from-bottom-full\n `\n }\n },\n defaultVariants: {\n size: 'md',\n position: 'center'\n }\n }\n)\n\nconst headerStyles = cva(\n `\n flex\n flex-row\n justify-between\n items-center\n gap-1\n w-full\n `\n)\n\nconst titleStyles = cva(\n `\n text-2xl\n font-medium\n leading-[1.366]\n tracking-[-0.03em]\n flex-1\n font-dash-main\n `,\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33]',\n dark: 'text-gray-50'\n }\n }\n }\n)\n\nconst closeButtonStyles = cva(\n `\n rounded-sm\n opacity-70\n transition-opacity\n hover:opacity-100\n focus:outline-none\n disabled:pointer-events-none\n cursor-pointer\n flex-shrink-0\n `,\n {\n variants: {\n theme: {\n light: 'text-[#0C1C33] hover:text-gray-700',\n dark: 'text-gray-400 hover:text-gray-200'\n }\n }\n }\n)\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open?: boolean\n /** Callback when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Dialog title */\n title?: string\n /** Whether to show the close button */\n showCloseButton?: boolean\n /** Dialog size */\n size?: 'sm' | 'md' | 'xl'\n /** Vertical position of the dialog */\n position?: 'center' | 'bottom'\n /** Offset from bottom when position is 'bottom' (in pixels) */\n bottomOffset?: number\n /** Maximum width of the dialog (e.g., '500px', '50%', '2xl'). Use Tailwind classes like 'sm', 'md', 'lg', 'xl', '2xl', etc. or CSS values */\n maxWidth?: string\n /** Horizontal margin from screen edges (in pixels) */\n horizontalMargin?: number\n /** Dialog content */\n children: React.ReactNode\n /** Additional className for the content container */\n className?: string\n /** Custom trigger element (if not controlled) */\n trigger?: React.ReactNode\n}\n\nexport const DashDialog: React.FC<DialogProps> = ({\n open,\n onOpenChange,\n title,\n showCloseButton = true,\n size = 'md',\n position = 'center',\n bottomOffset = 24,\n maxWidth,\n horizontalMargin,\n children,\n className = '',\n trigger\n}) => {\n const { theme } = useTheme()\n\n // Calculate position and sizing styles\n const customStyles: React.CSSProperties = {}\n \n if (position === 'bottom') {\n customStyles.bottom = `${bottomOffset}px`\n }\n \n if (maxWidth) {\n // Check if it's a Tailwind size (sm, md, lg, xl, 2xl, etc.) or a CSS value\n const tailwindSizes: Record<string, string> = {\n 'xs': '320px',\n 'sm': '384px',\n 'md': '448px',\n 'lg': '512px',\n 'xl': '576px',\n '2xl': '672px',\n '3xl': '768px',\n '4xl': '896px',\n '5xl': '1024px',\n '6xl': '1152px',\n '7xl': '1280px'\n }\n customStyles.maxWidth = tailwindSizes[maxWidth] || maxWidth\n }\n \n if (horizontalMargin !== undefined) {\n // Set max width to viewport width minus margins on both sides\n const marginConstraint = `calc(100vw - ${horizontalMargin * 2}px)`\n \n if (customStyles.maxWidth) {\n // If maxWidth is already set, use the smaller of the two\n customStyles.maxWidth = `min(${customStyles.maxWidth}, ${marginConstraint})`\n } else {\n customStyles.maxWidth = marginConstraint\n }\n \n // Keep the dialog centered but constrained by the calculated maxWidth\n // The existing left-[50%] translate-x-[-50%] will handle centering\n }\n\n const DialogContent = (\n <Dialog.Portal>\n <Dialog.Overlay className={overlayStyles({ theme })} />\n <Dialog.Content \n aria-describedby={undefined} \n className={`${contentStyles({ theme, size, position })} ${className}`}\n style={customStyles}\n >\n {/* Accessibility: Always provide a title */}\n {title ? (\n // Render visible title in header if provided\n <div className={headerStyles()}>\n <Dialog.Title className={titleStyles({ theme })}>\n {title}\n </Dialog.Title>\n {showCloseButton && (\n <Dialog.Close className={closeButtonStyles({ theme })}>\n <div className='w-8 h-8 flex items-center justify-center'>\n <CrossIcon size={16} />\n </div>\n <span className='sr-only'>Close</span>\n </Dialog.Close>\n )}\n </div>\n ) : (\n // No title provided - render visually hidden title for accessibility\n <>\n <Dialog.Title>\n <VisuallyHidden>Dialog</VisuallyHidden>\n </Dialog.Title>\n {showCloseButton && (\n <div className={headerStyles()}>\n <Dialog.Close className={closeButtonStyles({ theme })}>\n <div className='w-8 h-8 flex items-center justify-center'>\n <CrossIcon size={16} />\n </div>\n <span className='sr-only'>Close</span>\n </Dialog.Close>\n </div>\n )}\n </>\n )}\n {children}\n </Dialog.Content>\n </Dialog.Portal>\n )\n\n if (trigger) {\n // Uncontrolled mode with trigger\n return (\n <Dialog.Root onOpenChange={onOpenChange}>\n <Dialog.Trigger asChild>\n {trigger}\n </Dialog.Trigger>\n {DialogContent}\n </Dialog.Root>\n )\n }\n\n // Controlled mode\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n {DialogContent}\n </Dialog.Root>\n )\n}\n\nexport { DashDialog as Dialog }\n"],"names":["VisuallyHidden","children","_jsx","style","position","border","width","height","padding","margin","overflow","clip","whiteSpace","wordWrap","overlayStyles","cva","variants","theme","light","dark","contentStyles","size","sm","md","xl","center","bottom","defaultVariants","headerStyles","titleStyles","closeButtonStyles","DashDialog","open","onOpenChange","title","showCloseButton","bottomOffset","maxWidth","horizontalMargin","className","trigger","useTheme","customStyles","tailwindSizes","undefined","marginConstraint","DialogContent","_jsxs","Dialog","Portal","Overlay","Content","Title","Close","CrossIcon","_Fragment","Root","Trigger","asChild"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ "use client";
2
+
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var ThemeContext = require('../../contexts/ThemeContext.cjs.js');
7
+
8
+ const sizeClasses = {
9
+ xs: 'text-xs',
10
+ sm: 'text-sm',
11
+ md: 'text-base',
12
+ lg: 'text-lg',
13
+ xl: 'text-xl',
14
+ '2xl': 'text-[2.375rem] leading-[1.3]',
15
+ '3xl': 'text-[3rem] leading-[1.2]'
16
+ };
17
+ const weightClasses = {
18
+ normal: 'font-normal',
19
+ medium: 'font-medium',
20
+ semibold: 'font-semibold',
21
+ bold: 'font-bold',
22
+ extrabold: 'font-extrabold'
23
+ };
24
+ const colorClasses = {
25
+ light: {
26
+ black: 'text-black',
27
+ gray: 'text-gray-600',
28
+ blue: 'text-blue-600',
29
+ red: 'text-red-600',
30
+ green: 'text-green-600'
31
+ },
32
+ dark: {
33
+ black: 'text-white',
34
+ gray: 'text-gray-300',
35
+ blue: 'text-blue-400',
36
+ red: 'text-red-400',
37
+ green: 'text-green-400'
38
+ }
39
+ };
40
+ const Heading = ({
41
+ as = 'h1',
42
+ size = '2xl',
43
+ weight = 'extrabold',
44
+ color = 'black',
45
+ className = '',
46
+ children
47
+ }) => {
48
+ const {
49
+ theme
50
+ } = ThemeContext.useTheme();
51
+ const Component = as;
52
+ const classes = [sizeClasses[size], weightClasses[weight], colorClasses[theme][color], 'tracking-[-0.4px]', className].filter(Boolean).join(' ');
53
+ return jsxRuntime.jsx(Component, {
54
+ className: classes,
55
+ children: children
56
+ });
57
+ };
58
+
59
+ exports.Heading = Heading;
60
+ //# sourceMappingURL=index.cjs.js.map