@usefui/components 1.5.1

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 (104) hide show
  1. package/CHANGELOG.md +233 -0
  2. package/LICENSE +21 -0
  3. package/README.md +0 -0
  4. package/babel.config.js +12 -0
  5. package/dist/index.d.mts +1299 -0
  6. package/dist/index.d.ts +1299 -0
  7. package/dist/index.js +3701 -0
  8. package/dist/index.mjs +3586 -0
  9. package/package.json +44 -0
  10. package/src/__tests__/Accordion.test.tsx +106 -0
  11. package/src/__tests__/Avatar.test.tsx +89 -0
  12. package/src/__tests__/Badge.test.tsx +58 -0
  13. package/src/__tests__/Button.test.tsx +88 -0
  14. package/src/__tests__/Checkbox.test.tsx +106 -0
  15. package/src/__tests__/Collapsible.test.tsx +79 -0
  16. package/src/__tests__/Dialog.test.tsx +109 -0
  17. package/src/__tests__/Dropdown.test.tsx +159 -0
  18. package/src/__tests__/Field.test.tsx +100 -0
  19. package/src/__tests__/OTPField.test.tsx +199 -0
  20. package/src/__tests__/Overlay.test.tsx +70 -0
  21. package/src/__tests__/Page.test.tsx +98 -0
  22. package/src/__tests__/Portal.test.tsx +28 -0
  23. package/src/__tests__/Sheet.test.tsx +125 -0
  24. package/src/__tests__/Switch.test.tsx +90 -0
  25. package/src/__tests__/Tabs.test.tsx +129 -0
  26. package/src/__tests__/Toggle.test.tsx +67 -0
  27. package/src/__tests__/Toolbar.test.tsx +147 -0
  28. package/src/__tests__/Tooltip.test.tsx +88 -0
  29. package/src/accordion/Accordion.stories.tsx +89 -0
  30. package/src/accordion/hooks/index.tsx +39 -0
  31. package/src/accordion/index.tsx +170 -0
  32. package/src/avatar/Avatar.stories.tsx +62 -0
  33. package/src/avatar/index.tsx +90 -0
  34. package/src/avatar/styles/index.ts +79 -0
  35. package/src/badge/Badge.stories.tsx +60 -0
  36. package/src/badge/index.tsx +58 -0
  37. package/src/badge/styles/index.ts +109 -0
  38. package/src/button/Button.stories.tsx +47 -0
  39. package/src/button/index.tsx +79 -0
  40. package/src/button/styles/index.ts +180 -0
  41. package/src/checkbox/Checkbox.stories.tsx +100 -0
  42. package/src/checkbox/hooks/index.tsx +40 -0
  43. package/src/checkbox/index.tsx +147 -0
  44. package/src/checkbox/styles/index.ts +139 -0
  45. package/src/collapsible/Collapsible.stories.tsx +95 -0
  46. package/src/collapsible/hooks/index.tsx +50 -0
  47. package/src/collapsible/index.tsx +137 -0
  48. package/src/dialog/Dialog.stories.tsx +73 -0
  49. package/src/dialog/hooks/index.tsx +35 -0
  50. package/src/dialog/index.tsx +221 -0
  51. package/src/dialog/styles/index.ts +72 -0
  52. package/src/divider/index.ts +10 -0
  53. package/src/dropdown/Dropdown.stories.tsx +100 -0
  54. package/src/dropdown/hooks/index.tsx +64 -0
  55. package/src/dropdown/index.tsx +316 -0
  56. package/src/dropdown/styles/index.ts +90 -0
  57. package/src/field/Field.stories.tsx +146 -0
  58. package/src/field/hooks/index.tsx +28 -0
  59. package/src/field/index.tsx +183 -0
  60. package/src/field/styles/index.ts +166 -0
  61. package/src/index.ts +33 -0
  62. package/src/otp-field/OTPField.stories.tsx +50 -0
  63. package/src/otp-field/hooks/index.tsx +13 -0
  64. package/src/otp-field/index.tsx +234 -0
  65. package/src/otp-field/styles/index.ts +33 -0
  66. package/src/otp-field/types/index.ts +23 -0
  67. package/src/overlay/Overlay.stories.tsx +59 -0
  68. package/src/overlay/index.tsx +58 -0
  69. package/src/overlay/styles/index.ts +26 -0
  70. package/src/page/Page.stories.tsx +85 -0
  71. package/src/page/index.tsx +265 -0
  72. package/src/page/styles/index.ts +59 -0
  73. package/src/portal/Portal.stories.tsx +27 -0
  74. package/src/portal/index.tsx +36 -0
  75. package/src/scrollarea/Scrollarea.stories.tsx +99 -0
  76. package/src/scrollarea/index.tsx +27 -0
  77. package/src/scrollarea/styles/index.ts +71 -0
  78. package/src/sheet/Sheet.stories.tsx +86 -0
  79. package/src/sheet/hooks/index.tsx +47 -0
  80. package/src/sheet/index.tsx +190 -0
  81. package/src/sheet/styles/index.ts +69 -0
  82. package/src/switch/Switch.stories.tsx +96 -0
  83. package/src/switch/hooks/index.tsx +33 -0
  84. package/src/switch/index.tsx +122 -0
  85. package/src/switch/styles/index.ts +118 -0
  86. package/src/table/index.tsx +138 -0
  87. package/src/table/styles/index.ts +48 -0
  88. package/src/tabs/Tabs.stories.tsx +87 -0
  89. package/src/tabs/hooks/index.tsx +35 -0
  90. package/src/tabs/index.tsx +161 -0
  91. package/src/tabs/styles/index.ts +9 -0
  92. package/src/toggle/Toggle.stories.tsx +118 -0
  93. package/src/toggle/index.tsx +55 -0
  94. package/src/toggle/styles/index.ts +0 -0
  95. package/src/toolbar/Toolbar.stories.tsx +89 -0
  96. package/src/toolbar/hooks/index.tsx +35 -0
  97. package/src/toolbar/index.tsx +243 -0
  98. package/src/toolbar/styles/index.ts +129 -0
  99. package/src/tooltip/Tooltip.stories.tsx +60 -0
  100. package/src/tooltip/index.tsx +177 -0
  101. package/src/tooltip/styles/index.ts +38 -0
  102. package/src/utils/index.ts +2 -0
  103. package/tsconfig.json +18 -0
  104. package/vitest.config.ts +16 -0
package/dist/index.js ADDED
@@ -0,0 +1,3701 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ Accordion: () => Accordion,
34
+ AccordionContent: () => AccordionContent,
35
+ AccordionRoot: () => AccordionRoot,
36
+ AccordionTrigger: () => AccordionTrigger,
37
+ AvataStatusEnum: () => AvataStatusEnum,
38
+ Avatar: () => Avatar,
39
+ Badge: () => Badge,
40
+ Button: () => Button,
41
+ Checkbox: () => Checkbox,
42
+ CheckboxIndicator: () => CheckboxIndicator,
43
+ CheckboxRoot: () => CheckboxRoot,
44
+ Collapsible: () => Collapsible,
45
+ CollapsibleContent: () => CollapsibleContent,
46
+ CollapsibleRoot: () => CollapsibleRoot,
47
+ CollapsibleTrigger: () => CollapsibleTrigger,
48
+ Dialog: () => Dialog,
49
+ DialogControl: () => DialogControl,
50
+ DialogMenu: () => DialogMenu,
51
+ DialogOverlay: () => DialogOverlay,
52
+ DialogRoot: () => DialogRoot,
53
+ DialogTrigger: () => DialogTrigger,
54
+ Divider: () => Divider,
55
+ DropdownMenu: () => DropdownMenu,
56
+ DropdownMenuContent: () => DropdownMenuContent,
57
+ DropdownMenuItem: () => DropdownMenuItem,
58
+ DropdownMenuRoot: () => DropdownMenuRoot,
59
+ DropdownMenuTrigger: () => DropdownMenuTrigger,
60
+ Field: () => Field,
61
+ FieldLabel: () => FieldLabel,
62
+ FieldMeta: () => FieldMeta,
63
+ FieldRoot: () => FieldRoot,
64
+ FieldWrapper: () => FieldWrapper,
65
+ MetaVariantEnum: () => MetaVariantEnum,
66
+ OTPField: () => OTPField,
67
+ OTPFieldSlot: () => OTPFieldSlot,
68
+ Overlay: () => Overlay,
69
+ Page: () => Page,
70
+ PageContent: () => PageContent,
71
+ PageMenu: () => PageMenu,
72
+ PageNavigation: () => PageNavigation,
73
+ PagePanel: () => PagePanel,
74
+ PageTools: () => PageTools,
75
+ PageWrapper: () => PageWrapper,
76
+ Portal: () => Portal,
77
+ ScrollArea: () => ScrollArea,
78
+ Sheet: () => Sheet,
79
+ SheetRoot: () => SheetRoot,
80
+ SheetTrigger: () => SheetTrigger,
81
+ Switch: () => Switch,
82
+ SwitchRoot: () => SwitchRoot,
83
+ SwitchThumb: () => SwitchThumb,
84
+ Table: () => Table,
85
+ TableBody: () => TableBody,
86
+ TableCell: () => TableCell,
87
+ TableFooter: () => TableFooter,
88
+ TableHead: () => TableHead,
89
+ TableHeadCell: () => TableHeadCell,
90
+ TableRow: () => TableRow,
91
+ Tabs: () => Tabs,
92
+ TabsContent: () => TabsContent,
93
+ TabsRoot: () => TabsRoot,
94
+ TabsTrigger: () => TabsTrigger,
95
+ Toggle: () => Toggle,
96
+ Toolbar: () => Toolbar,
97
+ ToolbarItem: () => ToolbarItem,
98
+ ToolbarRoot: () => ToolbarRoot,
99
+ ToolbarSection: () => ToolbarSection,
100
+ ToolbarTrigger: () => ToolbarTrigger,
101
+ Tooltip: () => Tooltip,
102
+ useAccordion: () => useAccordion,
103
+ useCheckbox: () => useCheckbox,
104
+ useCollapsible: () => useCollapsible,
105
+ useDialog: () => useDialog,
106
+ useDropdownMenu: () => useDropdownMenu,
107
+ useField: () => useField,
108
+ useSheet: () => useSheet,
109
+ useSwitch: () => useSwitch,
110
+ useTabs: () => useTabs,
111
+ useToolbar: () => useToolbar
112
+ });
113
+ module.exports = __toCommonJS(index_exports);
114
+
115
+ // src/accordion/index.tsx
116
+ var import_react3 = __toESM(require("react"));
117
+
118
+ // src/accordion/hooks/index.tsx
119
+ var import_react = __toESM(require("react"));
120
+ var defaultComponentAPI = {
121
+ id: "",
122
+ states: {},
123
+ methods: {}
124
+ };
125
+ var AccordionContext = (0, import_react.createContext)(defaultComponentAPI);
126
+ var useAccordion = () => (0, import_react.useContext)(AccordionContext);
127
+ var AccordionProvider = ({
128
+ children
129
+ }) => {
130
+ const context = useAccordionProvider();
131
+ return /* @__PURE__ */ import_react.default.createElement(AccordionContext.Provider, { value: context }, children);
132
+ };
133
+ function useAccordionProvider() {
134
+ const [value, setValue] = (0, import_react.useState)(null);
135
+ const accordionId = import_react.default.useId();
136
+ return {
137
+ id: accordionId,
138
+ states: {
139
+ value
140
+ },
141
+ methods: {
142
+ applyValue: (value2) => setValue(value2),
143
+ getAccordionId: ({ value: value2, type }) => `${accordionId}-${type}-${value2}`
144
+ }
145
+ };
146
+ }
147
+
148
+ // src/button/index.tsx
149
+ var import_react2 = __toESM(require("react"));
150
+
151
+ // src/button/styles/index.ts
152
+ var import_styled_components = __toESM(require("styled-components"));
153
+ var ButtonDefaultStyles = import_styled_components.css`
154
+ cursor: pointer;
155
+ position: relative;
156
+ display: flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ gap: var(--measurement-medium-30);
160
+ font-size: var(--fontsize-medium-20);
161
+ height: fit-content;
162
+ font-weight: 500;
163
+ line-height: 1;
164
+ letter-spacing: calc(
165
+ var(--fontsize-small-10) - ((var(--fontsize-small-10) * 1.066))
166
+ );
167
+
168
+ border: var(--measurement-small-10) solid transparent;
169
+ backdrop-filter: blur(var(--measurement-small-10));
170
+
171
+ width: fit-content;
172
+ transition: all ease-in-out 0.2s;
173
+
174
+ span,
175
+ img {
176
+ opacity: 0.6;
177
+ }
178
+
179
+ &:hover,
180
+ &:focus,
181
+ &:active {
182
+ span,
183
+ img {
184
+ opacity: 1;
185
+ }
186
+ }
187
+
188
+ &:disabled {
189
+ cursor: not-allowed;
190
+ opacity: 0.6;
191
+ }
192
+ `;
193
+ var ButtonIconStyles = import_styled_components.css`
194
+ svg {
195
+ width: var(--fontsize-medium-20);
196
+ height: var(--fontsize-medium-20);
197
+ fill: currentColor;
198
+ }
199
+
200
+ svg {
201
+ opacity: 0.6;
202
+ }
203
+
204
+ &:hover,
205
+ &:focus,
206
+ &:active {
207
+ svg {
208
+ opacity: 1;
209
+ }
210
+ }
211
+
212
+ &[data-variant="primary"] {
213
+ svg {
214
+ fill: var(--body-color);
215
+ }
216
+ }
217
+ `;
218
+ var ButtonVariantsStyles = import_styled_components.css`
219
+ &[data-variant="primary"] {
220
+ color: var(--body-color) !important;
221
+ background-color: var(--font-color);
222
+
223
+ &:hover,
224
+ &:focus,
225
+ &:active {
226
+ color: var(--body-color);
227
+ }
228
+ }
229
+ &[data-variant="secondary"] {
230
+ color: var(--font-color-alpha-60);
231
+ background-color: var(--body-color);
232
+ border-color: var(--font-color-alpha-10);
233
+
234
+ &:hover,
235
+ &:focus,
236
+ &:active {
237
+ color: var(--font-color);
238
+ border-color: var(--font-color-alpha-30);
239
+ }
240
+ }
241
+ &[data-variant="tertiary"] {
242
+ color: var(--font-color-alpha-60);
243
+ border-color: var(--font-color-alpha-10);
244
+ background-color: transparent;
245
+
246
+ &:hover,
247
+ &:focus,
248
+ &:active {
249
+ color: var(--font-color);
250
+ background-color: var(--font-color-alpha-10);
251
+ border-color: transparent;
252
+ }
253
+ }
254
+ &[data-variant="border"] {
255
+ color: var(--font-color-alpha-60);
256
+ background-color: transparent;
257
+ border-color: var(--font-color-alpha-10);
258
+
259
+ &:hover,
260
+ &:focus,
261
+ &:active {
262
+ color: var(--font-color);
263
+ }
264
+ }
265
+ &[data-variant="mono"] {
266
+ color: var(--font-color-alpha-80);
267
+ background-color: var(--font-color-alpha-10);
268
+
269
+ &:hover,
270
+ &:focus,
271
+ &:active {
272
+ color: var(--font-color);
273
+ border-color: var(--font-color-alpha-10);
274
+ }
275
+ }
276
+ &[data-variant="ghost"] {
277
+ border: none;
278
+ padding: 0;
279
+ background-color: transparent;
280
+ min-width: fit-content;
281
+ min-height: var(--measurement-medium-60);
282
+ color: var(--font-color-alpha-60);
283
+
284
+ &:hover,
285
+ &:focus,
286
+ &:active {
287
+ color: var(--font-color);
288
+ }
289
+ }
290
+ `;
291
+ var ButtonSizeStyles = import_styled_components.css`
292
+ &[data-size="small"] {
293
+ border-radius: var(--measurement-medium-20);
294
+ font-size: var(--fontsize-medium-10);
295
+
296
+ gap: var(--measurement-medium-10);
297
+ padding: var(--measurement-medium-10) var(--measurement-medium-30);
298
+ min-width: var(--measurement-medium-60);
299
+ min-height: var(--measurement-medium-60);
300
+
301
+ svg {
302
+ width: var(--fontsize-medium-10);
303
+ height: var(--fontsize-medium-10);
304
+ }
305
+ }
306
+ &[data-size="medium"] {
307
+ border-radius: var(--measurement-medium-30);
308
+ padding: var(--measurement-medium-10) var(--measurement-medium-60);
309
+ min-width: var(--measurement-medium-90);
310
+ min-height: var(--measurement-medium-80);
311
+ }
312
+ &[data-size="large"] {
313
+ border-radius: var(--measurement-medium-30);
314
+ padding: var(--measurement-medium-10) var(--measurement-medium-60);
315
+ min-width: var(--measurement-medium-90);
316
+ min-height: var(--measurement-medium-90);
317
+ }
318
+ `;
319
+ var ButtonWrapper = import_styled_components.default.button`
320
+ &[data-raw="false"] {
321
+ ${ButtonDefaultStyles}
322
+ ${ButtonSizeStyles}
323
+ ${ButtonVariantsStyles}
324
+
325
+ &[data-rawIcon="false"] {
326
+ ${ButtonIconStyles}
327
+ }
328
+ }
329
+ `;
330
+
331
+ // src/button/index.tsx
332
+ var Button = import_react2.default.forwardRef(
333
+ (props, forwardedRef) => {
334
+ const {
335
+ name,
336
+ variant = "mono" /* Mono */,
337
+ sizing = "medium" /* Medium */,
338
+ raw,
339
+ rawicon,
340
+ children,
341
+ ...restProps
342
+ } = props;
343
+ const defaultName = "button";
344
+ const ariaLabel = `${name ?? defaultName}-action`;
345
+ const disabledState = props.disabled ?? false;
346
+ const buttonType = props.type ?? "button";
347
+ const buttonDescription = `${ariaLabel}:${buttonType}`;
348
+ const buttonStateDescription = `disabled:${disabledState}`;
349
+ const ButtonFullDesc = `${buttonDescription}/${buttonStateDescription}`;
350
+ return /* @__PURE__ */ import_react2.default.createElement(
351
+ ButtonWrapper,
352
+ {
353
+ ref: forwardedRef,
354
+ role: "button",
355
+ type: buttonType,
356
+ name: name ?? defaultName,
357
+ "aria-label": ariaLabel,
358
+ "aria-description": ButtonFullDesc,
359
+ "aria-disabled": disabledState,
360
+ "data-variant": variant,
361
+ "data-size": sizing,
362
+ "data-raw": Boolean(raw),
363
+ "data-rawicon": Boolean(rawicon),
364
+ tabIndex: 0,
365
+ ...restProps
366
+ },
367
+ children
368
+ );
369
+ }
370
+ );
371
+ Button.displayName = "Button";
372
+
373
+ // src/accordion/index.tsx
374
+ var Accordion = (props) => {
375
+ const { children, ...restProps } = props;
376
+ const { id } = useAccordion();
377
+ return /* @__PURE__ */ import_react3.default.createElement("div", { id, ...restProps }, children);
378
+ };
379
+ Accordion.displayName = "Accordion";
380
+ var AccordionRoot = ({ children }) => {
381
+ return /* @__PURE__ */ import_react3.default.createElement(AccordionProvider, null, children);
382
+ };
383
+ AccordionRoot.displayName = "Accordion.Root";
384
+ var AccordionTrigger = (props) => {
385
+ const { value, disabled, onClick, children, ...restProps } = props;
386
+ const { states, methods } = useAccordion();
387
+ const { getAccordionId, applyValue } = methods;
388
+ const hasSameValueAsContext = value === states.value;
389
+ const IdHandler = {
390
+ trigger: getAccordionId && getAccordionId({ value, type: "trigger" }),
391
+ content: getAccordionId && getAccordionId({ value, type: "content" })
392
+ };
393
+ const handleClick = (event) => {
394
+ if (!disabled) {
395
+ onClick && onClick(event);
396
+ if (applyValue) {
397
+ const unchangedValue = hasSameValueAsContext && states.value !== null;
398
+ if (unchangedValue) applyValue(null);
399
+ else applyValue(value);
400
+ }
401
+ }
402
+ };
403
+ return /* @__PURE__ */ import_react3.default.createElement(
404
+ Button,
405
+ {
406
+ id: String(IdHandler.trigger),
407
+ value,
408
+ disabled: disabled ?? false,
409
+ onClick: handleClick,
410
+ "aria-expanded": hasSameValueAsContext,
411
+ "aria-controls": String(IdHandler.content),
412
+ "data-state": hasSameValueAsContext ? "expanded" : "collapsed",
413
+ variant: props.variant ?? "ghost" /* Ghost */,
414
+ ...restProps
415
+ },
416
+ children
417
+ );
418
+ };
419
+ AccordionTrigger.displayName = "Accordion.Trigger";
420
+ var AccordionContent = (props) => {
421
+ const { defaultOpen = false, value, children, ...restProps } = props;
422
+ const { states, methods } = useAccordion();
423
+ const { getAccordionId, applyValue } = methods;
424
+ const hasSameValueAsContext = value === states.value;
425
+ const IdHandler = {
426
+ trigger: getAccordionId && getAccordionId({ value, type: "trigger" }),
427
+ content: getAccordionId && getAccordionId({ value, type: "content" })
428
+ };
429
+ import_react3.default.useEffect(() => {
430
+ if (defaultOpen && !hasSameValueAsContext && applyValue) applyValue(value);
431
+ }, []);
432
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, hasSameValueAsContext && /* @__PURE__ */ import_react3.default.createElement(
433
+ "div",
434
+ {
435
+ role: "article",
436
+ id: String(IdHandler.content),
437
+ "aria-labelledby": String(IdHandler.trigger),
438
+ "aria-expanded": hasSameValueAsContext,
439
+ "data-value": value,
440
+ ...restProps
441
+ },
442
+ children
443
+ ));
444
+ };
445
+ AccordionContent.displayName = "Accordion.Content";
446
+ Accordion.Root = AccordionRoot;
447
+ Accordion.Trigger = AccordionTrigger;
448
+ Accordion.Content = AccordionContent;
449
+
450
+ // src/avatar/index.tsx
451
+ var import_react4 = __toESM(require("react"));
452
+
453
+ // src/avatar/styles/index.ts
454
+ var import_styled_components2 = __toESM(require("styled-components"));
455
+ var AvatarSizesStyles = import_styled_components2.css`
456
+ &[data-size="small"] {
457
+ width: var(--measurement-large-10);
458
+ height: var(--measurement-large-10);
459
+ min-width: var(--measurement-large-10);
460
+ min-height: var(--measurement-large-10);
461
+ }
462
+
463
+ &[data-size="medium"] {
464
+ width: var(--measurement-medium-90);
465
+ height: var(--measurement-medium-90);
466
+ min-width: var(--measurement-medium-90);
467
+ min-height: var(--measurement-medium-90);
468
+ }
469
+
470
+ &[data-size="large"] {
471
+ width: var(--measurement-large-20);
472
+ height: var(--measurement-large-20);
473
+ min-width: var(--measurement-large-20);
474
+ min-height: var(--measurement-large-20);
475
+ }
476
+ `;
477
+ var AvatarStatusesStyles = import_styled_components2.css`
478
+ &[data-status="online"] {
479
+ fill: var(--shade-green-10);
480
+ stroke: var(--shade-green-20);
481
+ }
482
+
483
+ &[data-status="away"] {
484
+ fill: var(--color-yellow);
485
+ stroke: var(--shade-yellow-10);
486
+ }
487
+
488
+ &[data-status="busy"] {
489
+ fill: var(--color-red);
490
+ stroke: var(--shade-red-10);
491
+ }
492
+
493
+ &[data-status="offline"] {
494
+ fill: var(--body-color);
495
+ stroke: var(--font-color-alpha-10);
496
+ }
497
+ `;
498
+ var AvatarWrapper = import_styled_components2.default.div`
499
+ &[data-raw="false"] {
500
+ position: relative;
501
+ display: flex;
502
+ align-items: center;
503
+ justify-content: center;
504
+
505
+ background-color: var(--body-color);
506
+ border-radius: 100%;
507
+
508
+ img {
509
+ width: inherit;
510
+ height: inherit;
511
+ min-width: inherit;
512
+ min-height: inherit;
513
+ border-radius: 100%;
514
+ }
515
+
516
+ ${AvatarSizesStyles}
517
+ }
518
+ `;
519
+ var StatusWrapper = import_styled_components2.default.svg`
520
+ --status-position: calc(
521
+ var(--measurement-medium-10) - (var(--measurement-medium-10) * 2)
522
+ );
523
+
524
+ position: absolute;
525
+ stroke-width: var(--measurement-small-30);
526
+ bottom: var(--status-position);
527
+ right: var(--status-position);
528
+
529
+ ${AvatarStatusesStyles}
530
+ `;
531
+
532
+ // src/avatar/index.tsx
533
+ var AvataStatusEnum = /* @__PURE__ */ ((AvataStatusEnum2) => {
534
+ AvataStatusEnum2["Online"] = "online";
535
+ AvataStatusEnum2["Away"] = "away";
536
+ AvataStatusEnum2["Busy"] = "busy";
537
+ AvataStatusEnum2["Offline"] = "offline";
538
+ return AvataStatusEnum2;
539
+ })(AvataStatusEnum || {});
540
+ var Avatar = (props) => {
541
+ const {
542
+ raw,
543
+ sizing = "medium" /* Medium */,
544
+ status,
545
+ src,
546
+ alt,
547
+ children,
548
+ ...restProps
549
+ } = props;
550
+ const sizeLabel = sizing ?? "medium" /* Medium */;
551
+ return /* @__PURE__ */ import_react4.default.createElement(
552
+ AvatarWrapper,
553
+ {
554
+ "data-raw": Boolean(raw),
555
+ "data-size": sizing,
556
+ "data-status": status,
557
+ "aria-label": props["aria-label"] ?? `${sizeLabel}-user-avatar`,
558
+ ...restProps
559
+ },
560
+ !children && src && /* @__PURE__ */ import_react4.default.createElement(
561
+ "img",
562
+ {
563
+ "aria-label": `${sizeLabel}-user-avatar-image`,
564
+ alt: alt ?? `${sizeLabel}-user-avatar-image`,
565
+ src
566
+ }
567
+ ),
568
+ children,
569
+ status && /* @__PURE__ */ import_react4.default.createElement(
570
+ StatusWrapper,
571
+ {
572
+ role: "img",
573
+ "aria-label": `${sizing}-user-avatar-status`,
574
+ "aria-labelledby": "title desc",
575
+ "data-status": status,
576
+ height: "16",
577
+ width: "16"
578
+ },
579
+ /* @__PURE__ */ import_react4.default.createElement("title", null, "Activity status"),
580
+ /* @__PURE__ */ import_react4.default.createElement("desc", null, status),
581
+ /* @__PURE__ */ import_react4.default.createElement("circle", { role: "presentation", cx: "8", cy: "8", r: "6" })
582
+ )
583
+ );
584
+ };
585
+ Avatar.displayName = "Avatar";
586
+
587
+ // src/badge/index.tsx
588
+ var import_react5 = __toESM(require("react"));
589
+
590
+ // src/badge/styles/index.ts
591
+ var import_styled_components3 = __toESM(require("styled-components"));
592
+ var BadgeBaseStyles = import_styled_components3.css`
593
+ display: inline-flex;
594
+ align-items: center;
595
+ justify-content: center;
596
+ gap: var(--measurement-medium-10);
597
+ min-width: var(--measurement-medium-60);
598
+ min-height: var(--measurement-medium-60);
599
+ width: fit-content;
600
+
601
+ border: var(--measurement-small-10) solid transparent;
602
+
603
+ font-size: var(--fontsize-small-60);
604
+ padding: var(--measurement-medium-10) var(--measurement-medium-30);
605
+ font-weight: 500;
606
+ transition: all ease-in-out 0.2s;
607
+ `;
608
+ var BadgeVariantStyles = import_styled_components3.css`
609
+ border: var(--measurement-small-10) solid transparent;
610
+
611
+ &[data-variant="primary"] {
612
+ background-color: var(--font-color);
613
+ color: var(--body-color);
614
+
615
+ &:hover,
616
+ &:focus {
617
+ border-color: var(--font-color-alpha-10);
618
+ }
619
+ }
620
+ &[data-variant="secondary"] {
621
+ background-color: var(--font-color-alpha-10);
622
+ color: var(--font-color-alpha-60);
623
+
624
+ &:hover,
625
+ &:focus {
626
+ color: var(--font-color);
627
+ }
628
+ }
629
+ &[data-variant="border"] {
630
+ background-color: transparent;
631
+ border-color: var(--font-color-alpha-10);
632
+ color: var(--font-color-alpha-60);
633
+
634
+ &:hover,
635
+ &:focus {
636
+ color: var(--font-color);
637
+ }
638
+ }
639
+ &[data-variant="error"] {
640
+ background-color: var(--alpha-red-10);
641
+ color: var(--alpha-red-80);
642
+
643
+ &:hover,
644
+ &:focus {
645
+ background-color: var(--alpha-red-10);
646
+ color: var(--color-red);
647
+ }
648
+ }
649
+ &[data-variant="warning"] {
650
+ background-color: var(--alpha-orange-10);
651
+ color: var(--alpha-orange-80);
652
+
653
+ &:hover,
654
+ &:focus {
655
+ background-color: var(--alpha-orange-10);
656
+ color: var(--color-orange);
657
+ }
658
+ }
659
+ &[data-variant="success"] {
660
+ background-color: var(--alpha-green-10);
661
+ color: var(--alpha-green-80);
662
+
663
+ &:hover,
664
+ &:focus {
665
+ background-color: var(--alpha-green-10);
666
+ color: var(--color-green);
667
+ }
668
+ }
669
+ &[data-variant="meta"] {
670
+ background-color: var(--alpha-blue-10);
671
+ color: var(--alpha-blue-80);
672
+
673
+ &:hover,
674
+ &:focus {
675
+ background-color: var(--alpha-blue-10);
676
+ color: var(--color-blue);
677
+ }
678
+ }
679
+ `;
680
+ var BadgeShapeStyles = import_styled_components3.css`
681
+ &[data-shape="square"] {
682
+ border-radius: 0;
683
+ }
684
+ &[data-shape="smooth"] {
685
+ border-radius: var(--measurement-medium-20);
686
+ }
687
+ &[data-shape="round"] {
688
+ border-radius: var(--measurement-large-90);
689
+ }
690
+ `;
691
+ var BadgeWrapper = import_styled_components3.default.div`
692
+ &[data-raw="false"] {
693
+ ${BadgeBaseStyles}
694
+ ${BadgeVariantStyles}
695
+ ${BadgeShapeStyles}
696
+ }
697
+ `;
698
+
699
+ // src/badge/index.tsx
700
+ var Badge = (props) => {
701
+ const {
702
+ raw = false,
703
+ variant = "primary",
704
+ shape = "smooth",
705
+ children,
706
+ ...restProps
707
+ } = props;
708
+ return /* @__PURE__ */ import_react5.default.createElement(
709
+ BadgeWrapper,
710
+ {
711
+ "data-raw": raw,
712
+ "data-variant": variant,
713
+ "data-shape": shape,
714
+ ...restProps
715
+ },
716
+ children
717
+ );
718
+ };
719
+ Badge.displayName = "Badge";
720
+
721
+ // src/checkbox/index.tsx
722
+ var import_react7 = __toESM(require("react"));
723
+
724
+ // src/checkbox/hooks/index.tsx
725
+ var import_react6 = __toESM(require("react"));
726
+ var defaultComponentAPI2 = {
727
+ id: "",
728
+ states: {},
729
+ methods: {}
730
+ };
731
+ var CheckboxContext = (0, import_react6.createContext)(defaultComponentAPI2);
732
+ var useCheckbox = () => (0, import_react6.useContext)(CheckboxContext);
733
+ var CheckboxProvider = ({ children }) => {
734
+ const context = useCheckboxProvider();
735
+ return /* @__PURE__ */ import_react6.default.createElement(CheckboxContext.Provider, { value: context }, children);
736
+ };
737
+ function useCheckboxProvider() {
738
+ const [checked, setChecked] = (0, import_react6.useState)(false);
739
+ const checkboxId = import_react6.default.useId();
740
+ return {
741
+ id: checkboxId,
742
+ states: {
743
+ checked
744
+ },
745
+ methods: {
746
+ toggleChecked: () => setChecked(!checked),
747
+ applyChecked: (state) => setChecked(Boolean(state))
748
+ }
749
+ };
750
+ }
751
+
752
+ // src/checkbox/styles/index.ts
753
+ var import_styled_components4 = __toESM(require("styled-components"));
754
+ var CheckboxDefaultStyles = import_styled_components4.css`
755
+ position: relative;
756
+ display: flex;
757
+ align-items: center;
758
+ justify-content: center;
759
+ backdrop-filter: blur(var(--measurement-small-10));
760
+ transition: all ease-in-out 0.2s;
761
+ `;
762
+ var CheckboxVariantsStyles = import_styled_components4.css`
763
+ &[data-variant="primary"] {
764
+ background-color: var(--font-color-alpha-10);
765
+ border: var(--measurement-small-10) solid transparent;
766
+
767
+ &:hover,
768
+ &:focus {
769
+ border-color: var(--font-color-alpha-10);
770
+ }
771
+
772
+ &:active,
773
+ &[data-state="checked"] {
774
+ background-color: var(--font-color);
775
+ }
776
+
777
+ &[data-state="checked"] {
778
+ svg {
779
+ stroke: var(--body-color);
780
+ }
781
+ }
782
+ }
783
+
784
+ &[data-variant="border"] {
785
+ background-color: var(--body-color);
786
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
787
+
788
+ &:hover,
789
+ &:focus,
790
+ &:active,
791
+ &[data-state="checked"] {
792
+ background-color: var(--font-color-alpha-10);
793
+ border-color: transparent;
794
+ }
795
+
796
+ &[data-state="checked"] {
797
+ svg {
798
+ stroke: var(--font-color);
799
+ }
800
+ }
801
+ }
802
+ &[data-variant="mono"] {
803
+ background-color: var(--font-color-alpha-10);
804
+ border: var(--measurement-small-10) solid transparent;
805
+
806
+ &:hover,
807
+ &:focus,
808
+ &:active,
809
+ &[data-state="checked"] {
810
+ border-color: var(--font-color-alpha-10);
811
+ }
812
+
813
+ &[data-state="checked"] {
814
+ svg {
815
+ stroke: var(--font-color);
816
+ }
817
+ }
818
+ }
819
+ &[data-variant="ghost"] {
820
+ border: var(--measurement-small-10) solid transparent;
821
+
822
+ &:hover,
823
+ &:focus,
824
+ &:active,
825
+ &[data-state="checked"] {
826
+ border-color: var(--font-color-alpha-10);
827
+
828
+ svg {
829
+ stroke: var(--font-color);
830
+ }
831
+ }
832
+ }
833
+ `;
834
+ var CheckboxSizeStyles = import_styled_components4.css`
835
+ &[data-size="small"] {
836
+ width: var(--measurement-medium-60);
837
+ height: var(--measurement-medium-60);
838
+ border-radius: var(--measurement-small-80);
839
+ }
840
+ &[data-size="medium"] {
841
+ width: var(--measurement-medium-70);
842
+ height: var(--measurement-medium-70);
843
+ border-radius: var(--measurement-medium-10);
844
+ }
845
+ &[data-size="large"] {
846
+ width: var(--measurement-large-10);
847
+ height: var(--measurement-large-10);
848
+ border-radius: var(--measurement-medium-20);
849
+ }
850
+ `;
851
+ var CheckboxWrapper = import_styled_components4.default.div`
852
+ cursor: pointer;
853
+
854
+ &[data-raw="false"] {
855
+ ${CheckboxDefaultStyles}
856
+ ${CheckboxVariantsStyles}
857
+ ${CheckboxSizeStyles}
858
+ }
859
+
860
+ &[data-disabled="true"] {
861
+ cursor: not-allowed;
862
+ opacity: 0.6;
863
+
864
+ svg {
865
+ stroke-opacity: 0.6;
866
+ }
867
+ }
868
+ `;
869
+ var NativeInput = import_styled_components4.default.input`
870
+ &[data-raw="false"] {
871
+ appearance: none;
872
+ background: none;
873
+ border: none;
874
+ cursor: pointer;
875
+ height: 100%;
876
+ position: absolute;
877
+ left: 0;
878
+ top: 0;
879
+ width: 100%;
880
+
881
+ &:disabled {
882
+ cursor: not-allowed;
883
+ }
884
+ }
885
+ `;
886
+ var Indicator = import_styled_components4.default.span`
887
+ line-height: 0;
888
+ pointer-events: none;
889
+ `;
890
+
891
+ // src/checkbox/index.tsx
892
+ var Checkbox = (props) => {
893
+ const { states, methods } = useCheckbox();
894
+ const { applyChecked, toggleChecked } = methods;
895
+ const {
896
+ raw,
897
+ sizing = "medium" /* Medium */,
898
+ variant = "mono" /* Mono */,
899
+ name,
900
+ disabled,
901
+ required,
902
+ defaultChecked,
903
+ value,
904
+ onClick,
905
+ children,
906
+ ...restProps
907
+ } = props;
908
+ const defaultValue = states.checked ? "checked" : "unchecked";
909
+ const handleClick = (event) => {
910
+ if (toggleChecked) toggleChecked();
911
+ if (onClick) onClick(event);
912
+ };
913
+ import_react7.default.useEffect(() => {
914
+ if (defaultChecked && applyChecked) applyChecked(defaultChecked);
915
+ }, []);
916
+ return /* @__PURE__ */ import_react7.default.createElement(
917
+ CheckboxWrapper,
918
+ {
919
+ role: "checkbox",
920
+ "aria-hidden": "true",
921
+ "data-state": value ?? defaultValue,
922
+ "data-disabled": disabled,
923
+ "data-raw": Boolean(raw),
924
+ "data-size": sizing,
925
+ "data-variant": variant,
926
+ "aria-label": props["aria-label"] ?? `${name}-checkbox`
927
+ },
928
+ /* @__PURE__ */ import_react7.default.createElement(
929
+ NativeInput,
930
+ {
931
+ type: "checkbox",
932
+ tabIndex: 0,
933
+ name,
934
+ value: value ?? defaultValue,
935
+ defaultChecked: Boolean(states.checked),
936
+ required,
937
+ disabled,
938
+ onInput: handleClick,
939
+ "data-state": defaultValue,
940
+ "data-raw": Boolean(raw),
941
+ "aria-disabled": Boolean(disabled),
942
+ "aria-required": Boolean(required),
943
+ "aria-checked": Boolean(states.checked),
944
+ "aria-label": props["aria-label"] ?? `${name}-native-checkbox`,
945
+ ...restProps
946
+ }
947
+ ),
948
+ children
949
+ );
950
+ };
951
+ Checkbox.displayName = "Checkbox";
952
+ var CheckboxRoot = (props) => {
953
+ const { children, ...restProps } = props;
954
+ return /* @__PURE__ */ import_react7.default.createElement(CheckboxProvider, { ...restProps }, children);
955
+ };
956
+ CheckboxRoot.displayName = "Checkbox.Root";
957
+ var CheckboxIndicator = (props) => {
958
+ const { states } = useCheckbox();
959
+ const { children, ...restProps } = props;
960
+ return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, states.checked && /* @__PURE__ */ import_react7.default.createElement(Indicator, { ...restProps }, children ?? /* @__PURE__ */ import_react7.default.createElement(
961
+ "svg",
962
+ {
963
+ tabIndex: -1,
964
+ "aria-hidden": "true",
965
+ "aria-label": "checked-icon",
966
+ focusable: "false",
967
+ width: "10",
968
+ height: "10",
969
+ viewBox: "0 0 10 10",
970
+ fill: "none"
971
+ },
972
+ /* @__PURE__ */ import_react7.default.createElement("title", null, "Checked"),
973
+ /* @__PURE__ */ import_react7.default.createElement(
974
+ "path",
975
+ {
976
+ d: "M2 5.5L4.12132 7.62132L8.36396 3.37868",
977
+ strokeWidth: "2",
978
+ strokeLinecap: "round",
979
+ strokeLinejoin: "round"
980
+ }
981
+ )
982
+ )));
983
+ };
984
+ CheckboxIndicator.displayName = "Checkbox.Indicator";
985
+ Checkbox.Root = CheckboxRoot;
986
+ Checkbox.Indicator = CheckboxIndicator;
987
+
988
+ // src/collapsible/index.tsx
989
+ var import_react9 = __toESM(require("react"));
990
+
991
+ // src/collapsible/hooks/index.tsx
992
+ var import_react8 = __toESM(require("react"));
993
+ var defaultComponentAPI3 = {
994
+ id: "",
995
+ states: {},
996
+ methods: {}
997
+ };
998
+ var CollapsibleContext = (0, import_react8.createContext)(defaultComponentAPI3);
999
+ var useCollapsible = () => (0, import_react8.useContext)(CollapsibleContext);
1000
+ var CollapsibleProvider = ({
1001
+ children
1002
+ }) => {
1003
+ const context = useCollapsibleProvider();
1004
+ return /* @__PURE__ */ import_react8.default.createElement(CollapsibleContext.Provider, { value: context }, children);
1005
+ };
1006
+ function useCollapsibleProvider() {
1007
+ const [expanded, setExpanded] = (0, import_react8.useState)(false);
1008
+ const [defaultOpen, setDefaultOpen] = (0, import_react8.useState)(false);
1009
+ const collapsibleId = import_react8.default.useId();
1010
+ const toggleCollapsible = () => {
1011
+ setExpanded(!expanded);
1012
+ setDefaultOpen(false);
1013
+ };
1014
+ const applyDefaultOpen = () => {
1015
+ setExpanded(!expanded);
1016
+ setDefaultOpen(true);
1017
+ };
1018
+ return {
1019
+ id: collapsibleId,
1020
+ states: {
1021
+ expanded,
1022
+ defaultOpen
1023
+ },
1024
+ methods: {
1025
+ toggleCollapsible: () => toggleCollapsible(),
1026
+ applyDefaultOpen: () => applyDefaultOpen()
1027
+ }
1028
+ };
1029
+ }
1030
+
1031
+ // src/utils/index.ts
1032
+ var applyDataState = (condition) => condition ? "open" : "closed";
1033
+
1034
+ // src/collapsible/index.tsx
1035
+ var Collapsible = (props) => {
1036
+ const { children, ...restProps } = props;
1037
+ const collapsibleContext = useCollapsible();
1038
+ return /* @__PURE__ */ import_react9.default.createElement(
1039
+ "div",
1040
+ {
1041
+ "data-state": applyDataState(Boolean(collapsibleContext.states.expanded)),
1042
+ ...restProps
1043
+ },
1044
+ children
1045
+ );
1046
+ };
1047
+ Collapsible.displayName = "Collapsible";
1048
+ var CollapsibleRoot = ({ children }) => {
1049
+ return /* @__PURE__ */ import_react9.default.createElement(CollapsibleProvider, null, children);
1050
+ };
1051
+ CollapsibleRoot.displayName = "Collapsible.Root";
1052
+ var CollapsibleTrigger = (props) => {
1053
+ const { children, disabled, onClick, ...restProps } = props;
1054
+ const { id, states, methods } = useCollapsible();
1055
+ const { toggleCollapsible } = methods;
1056
+ const handleClick = (event) => {
1057
+ if (toggleCollapsible) toggleCollapsible();
1058
+ if (onClick) onClick(event);
1059
+ };
1060
+ return /* @__PURE__ */ import_react9.default.createElement(
1061
+ Button,
1062
+ {
1063
+ disabled,
1064
+ "aria-controls": id,
1065
+ "data-state": applyDataState(Boolean(states.expanded)),
1066
+ "data-expanded": states.expanded,
1067
+ onClick: handleClick,
1068
+ variant: props.variant ?? "ghost" /* Ghost */,
1069
+ ...restProps
1070
+ },
1071
+ children
1072
+ );
1073
+ };
1074
+ CollapsibleTrigger.displayName = "Collapsible.Trigger";
1075
+ var CollapsibleContent = (props) => {
1076
+ const { defaultOpen = false, showFirstChild, children, ...restProps } = props;
1077
+ const { id, states, methods } = useCollapsible();
1078
+ const { applyDefaultOpen } = methods;
1079
+ const childArray = import_react9.default.Children.toArray(children);
1080
+ const displayChildren = states.expanded ?? states.defaultOpen;
1081
+ const displayFirstChild = showFirstChild && childArray.length > 1 && !states.expanded;
1082
+ import_react9.default.useEffect(() => {
1083
+ if (defaultOpen && applyDefaultOpen) applyDefaultOpen();
1084
+ }, []);
1085
+ return /* @__PURE__ */ import_react9.default.createElement(
1086
+ "div",
1087
+ {
1088
+ id,
1089
+ "data-state": applyDataState(Boolean(states.expanded)),
1090
+ role: "region",
1091
+ ...restProps
1092
+ },
1093
+ displayFirstChild && childArray[0],
1094
+ displayChildren && children
1095
+ );
1096
+ };
1097
+ CollapsibleContent.displayName = "Collapsible.Content";
1098
+ Collapsible.Root = CollapsibleRoot;
1099
+ Collapsible.Trigger = CollapsibleTrigger;
1100
+ Collapsible.Content = CollapsibleContent;
1101
+
1102
+ // src/dialog/index.tsx
1103
+ var import_react14 = __toESM(require("react"));
1104
+
1105
+ // src/dialog/hooks/index.tsx
1106
+ var import_react10 = __toESM(require("react"));
1107
+ var defaultComponentAPI4 = {
1108
+ id: "",
1109
+ states: {},
1110
+ methods: {}
1111
+ };
1112
+ var DialogContext = (0, import_react10.createContext)(defaultComponentAPI4);
1113
+ var useDialog = () => (0, import_react10.useContext)(DialogContext);
1114
+ var DialogProvider = ({ children }) => {
1115
+ const context = useDialogProvider();
1116
+ return /* @__PURE__ */ import_react10.default.createElement(DialogContext.Provider, { value: context }, children);
1117
+ };
1118
+ function useDialogProvider() {
1119
+ const [open, setOpen] = (0, import_react10.useState)(false);
1120
+ const dialogId = import_react10.default.useId();
1121
+ return {
1122
+ id: dialogId,
1123
+ states: {
1124
+ open
1125
+ },
1126
+ methods: {
1127
+ toggleDialog: () => setOpen(!open),
1128
+ getDialogId: (type) => `${dialogId}-${type}`
1129
+ }
1130
+ };
1131
+ }
1132
+
1133
+ // ../hooks/dist/index.mjs
1134
+ var import_react11 = require("react");
1135
+ var import_react12 = require("react");
1136
+ var import_react13 = __toESM(require("react"), 1);
1137
+ function useEventListener(eventName, handler, element) {
1138
+ const savedHandler = (0, import_react11.useRef)(handler);
1139
+ (0, import_react11.useEffect)(() => {
1140
+ savedHandler.current = handler;
1141
+ }, [handler]);
1142
+ (0, import_react11.useEffect)(() => {
1143
+ const targetElement = element && element.current || window;
1144
+ if (!(targetElement && targetElement.addEventListener)) return;
1145
+ const eventListener = (event) => savedHandler.current(event);
1146
+ targetElement.addEventListener(eventName, eventListener);
1147
+ return () => targetElement.removeEventListener(eventName, eventListener);
1148
+ }, [eventName, element]);
1149
+ }
1150
+ var useEventListener_default = useEventListener;
1151
+ function useClickOutside(ref, handler, mouseEvent = "mousedown") {
1152
+ useEventListener_default(mouseEvent, (event) => {
1153
+ const element = ref && ref.current;
1154
+ if (!element || element.contains(event.target)) return;
1155
+ handler(event);
1156
+ });
1157
+ }
1158
+ function useKeyPress(targetKey, hotkey, bindKey) {
1159
+ const [keyPressed, setKeyPressed] = (0, import_react12.useState)(false);
1160
+ const switchStoredKeyPressed = (0, import_react12.useCallback)(
1161
+ (event, state) => {
1162
+ if (!hotkey && event.key === targetKey) {
1163
+ return setKeyPressed(state);
1164
+ }
1165
+ if (hotkey && event[
1166
+ bindKey ?? "metaKey"
1167
+ /* Meta */
1168
+ ] && event.key === targetKey) {
1169
+ return setKeyPressed(state);
1170
+ }
1171
+ return;
1172
+ },
1173
+ [bindKey, hotkey, targetKey]
1174
+ );
1175
+ const KeyDownHandler = (0, import_react12.useCallback)(
1176
+ (event) => switchStoredKeyPressed(event, true),
1177
+ [switchStoredKeyPressed]
1178
+ );
1179
+ const KeyUpHandler = (0, import_react12.useCallback)(
1180
+ (event) => switchStoredKeyPressed(event, false),
1181
+ [switchStoredKeyPressed]
1182
+ );
1183
+ (0, import_react12.useEffect)(() => {
1184
+ window.addEventListener("keydown", KeyDownHandler);
1185
+ window.addEventListener("keyup", KeyUpHandler);
1186
+ return () => {
1187
+ window.removeEventListener("keydown", KeyDownHandler);
1188
+ window.removeEventListener("keyup", KeyUpHandler);
1189
+ };
1190
+ }, [KeyDownHandler, KeyUpHandler]);
1191
+ return keyPressed;
1192
+ }
1193
+ var useDisabledScroll = (state) => {
1194
+ const overflow = state ? "hidden" : "";
1195
+ import_react13.default.useEffect(() => {
1196
+ document.body.style.overflowY = overflow;
1197
+ }, [state]);
1198
+ return {
1199
+ overflow,
1200
+ disabled: state
1201
+ };
1202
+ };
1203
+
1204
+ // src/dialog/styles/index.ts
1205
+ var import_styled_components5 = __toESM(require("styled-components"));
1206
+ var DialogDefaultStyles = import_styled_components5.css`
1207
+ position: fixed;
1208
+ top: 15dvh;
1209
+ padding: var(--measurement-medium-60);
1210
+ width: 100%;
1211
+
1212
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
1213
+ background-color: var(--body-color);
1214
+ border-radius: var(--measurement-medium-30);
1215
+
1216
+ transition: all ease-in-out 0.2s;
1217
+ z-index: var(--depth-default-100);
1218
+ `;
1219
+ var DialogSizeStyles = import_styled_components5.css`
1220
+ --base-size: var(--measurement-medium-60);
1221
+ --computed-size: calc(100% - (var(--base-size) * 2));
1222
+ --max-height: 75dvh;
1223
+
1224
+ &[data-size="small"] {
1225
+ max-width: calc(var(--measurement-large-90) * 1.33);
1226
+ max-height: var(--max-height);
1227
+ }
1228
+ &[data-size="medium"] {
1229
+ max-width: calc(var(--measurement-large-90) * 2.66);
1230
+ max-height: var(--max-height);
1231
+ }
1232
+
1233
+ &[data-size="large"] {
1234
+ top: var(--base-size);
1235
+ max-width: var(--computed-size);
1236
+ height: var(--computed-size);
1237
+ padding: var(--measurement-medium-80);
1238
+ }
1239
+ `;
1240
+ var Menu = import_styled_components5.default.menu`
1241
+ margin: 0;
1242
+ padding: 0;
1243
+
1244
+ &[data-raw="false"] {
1245
+ display: flex;
1246
+ justify-content: flex-end;
1247
+ gap: var(--measurement-medium-30);
1248
+ }
1249
+ `;
1250
+ var DialogWrapper = import_styled_components5.default.dialog`
1251
+ @keyframes slide-in {
1252
+ 0% {
1253
+ opacity: 0;
1254
+ transform: translateY(var(--measurement-medium-30));
1255
+ }
1256
+ 100% {
1257
+ opacity: 1;
1258
+ transform: translateY(0);
1259
+ }
1260
+ }
1261
+
1262
+ border: none;
1263
+ box-shadow: none;
1264
+ z-index: 100;
1265
+
1266
+ &[data-raw="false"] {
1267
+ ${DialogDefaultStyles}
1268
+ ${DialogSizeStyles}
1269
+
1270
+ animation-duration: 0.2s;
1271
+ animation-name: slide-in;
1272
+ animation-fill-mode: backwards;
1273
+ }
1274
+ `;
1275
+
1276
+ // src/dialog/index.tsx
1277
+ var Dialog = (props) => {
1278
+ const {
1279
+ raw,
1280
+ sizing = "medium" /* Medium */,
1281
+ open = false,
1282
+ lock = true,
1283
+ children,
1284
+ ...restProps
1285
+ } = props;
1286
+ const { states, methods } = useDialog();
1287
+ const { getDialogId, toggleDialog } = methods;
1288
+ const triggerId = getDialogId && getDialogId("trigger");
1289
+ const contentId = getDialogId && getDialogId("content");
1290
+ import_react14.default.useEffect(() => {
1291
+ if (open && toggleDialog) toggleDialog();
1292
+ }, []);
1293
+ if (lock) useDisabledScroll(Boolean(states.open));
1294
+ return /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, states.open && /* @__PURE__ */ import_react14.default.createElement(
1295
+ ScrollArea,
1296
+ {
1297
+ as: DialogWrapper,
1298
+ role: "dialog",
1299
+ tabIndex: -1,
1300
+ id: String(contentId),
1301
+ open: Boolean(states.open),
1302
+ "aria-labelledby": String(triggerId),
1303
+ "data-state": applyDataState(Boolean(states.open)),
1304
+ "data-size": sizing,
1305
+ "data-raw": Boolean(raw),
1306
+ ...restProps
1307
+ },
1308
+ children
1309
+ ));
1310
+ };
1311
+ Dialog.displayName = "Dialog";
1312
+ var DialogRoot = ({ children }) => {
1313
+ return /* @__PURE__ */ import_react14.default.createElement(DialogProvider, null, children);
1314
+ };
1315
+ DialogRoot.displayName = "Dialog.Root";
1316
+ var DialogOverlay = (props) => {
1317
+ const { closeOnInteract = false, onClick, ...restProps } = props;
1318
+ const { states, methods } = useDialog();
1319
+ const { toggleDialog } = methods;
1320
+ const handleClick = (event) => {
1321
+ if (closeOnInteract && toggleDialog) toggleDialog();
1322
+ if (onClick) onClick(event);
1323
+ };
1324
+ return /* @__PURE__ */ import_react14.default.createElement(
1325
+ Overlay,
1326
+ {
1327
+ visible: Boolean(states.open),
1328
+ closeOnInteract,
1329
+ onClick: handleClick,
1330
+ ...restProps
1331
+ }
1332
+ );
1333
+ };
1334
+ DialogOverlay.displayName = "Dialog.Overlay";
1335
+ var DialogTrigger = (props) => {
1336
+ const { onClick, children, ...restProps } = props;
1337
+ const { states, methods } = useDialog();
1338
+ const { getDialogId, toggleDialog } = methods;
1339
+ const triggerId = getDialogId && getDialogId("trigger");
1340
+ const contentId = getDialogId && getDialogId("content");
1341
+ const handleClick = (event) => {
1342
+ if (toggleDialog) toggleDialog();
1343
+ if (onClick) onClick(event);
1344
+ };
1345
+ return /* @__PURE__ */ import_react14.default.createElement(
1346
+ Button,
1347
+ {
1348
+ id: String(triggerId),
1349
+ onClick: handleClick,
1350
+ "aria-controls": String(contentId),
1351
+ "aria-expanded": Boolean(states.open),
1352
+ "data-state": applyDataState(Boolean(states.open)),
1353
+ ...restProps
1354
+ },
1355
+ children
1356
+ );
1357
+ };
1358
+ DialogTrigger.displayName = "Dialog.Trigger";
1359
+ var DialogMenu = (props) => {
1360
+ const { raw, children, ...restProps } = props;
1361
+ return /* @__PURE__ */ import_react14.default.createElement(Menu, { "data-raw": Boolean(raw), ...restProps }, children);
1362
+ };
1363
+ DialogMenu.displayName = "Dialog.Menu";
1364
+ var DialogControl = (props) => {
1365
+ const { onClick, children, ...restProps } = props;
1366
+ const { states, methods } = useDialog();
1367
+ const { getDialogId, toggleDialog } = methods;
1368
+ const innerControlId = getDialogId && getDialogId("inner-control");
1369
+ const contentId = getDialogId && getDialogId("content");
1370
+ const handleClick = (event) => {
1371
+ if (toggleDialog) toggleDialog();
1372
+ if (onClick) onClick(event);
1373
+ };
1374
+ return /* @__PURE__ */ import_react14.default.createElement(
1375
+ Button,
1376
+ {
1377
+ id: String(innerControlId),
1378
+ onClick: handleClick,
1379
+ "aria-controls": String(contentId),
1380
+ "aria-expanded": Boolean(states.open),
1381
+ "data-state": applyDataState(Boolean(states.open)),
1382
+ ...restProps
1383
+ },
1384
+ children
1385
+ );
1386
+ };
1387
+ DialogControl.displayName = "Dialog.Control";
1388
+ Dialog.Root = DialogRoot;
1389
+ Dialog.Trigger = DialogTrigger;
1390
+ Dialog.Control = DialogControl;
1391
+ Dialog.Menu = DialogMenu;
1392
+ Dialog.Overlay = DialogOverlay;
1393
+
1394
+ // src/divider/index.ts
1395
+ var import_styled_components6 = __toESM(require("styled-components"));
1396
+ var Divider = import_styled_components6.default.hr`
1397
+ height: var(--measurement-small-10);
1398
+ margin: var(--measurement-medium-30) 0;
1399
+ background: var(--font-color-alpha-10);
1400
+ border: none;
1401
+ `;
1402
+
1403
+ // src/dropdown/index.tsx
1404
+ var import_react16 = __toESM(require("react"));
1405
+
1406
+ // src/dropdown/hooks/index.tsx
1407
+ var import_react15 = __toESM(require("react"));
1408
+ var DEFAULT_API = {
1409
+ id: "",
1410
+ states: {},
1411
+ methods: {}
1412
+ };
1413
+ var DEFAULT_POSITIONS = {
1414
+ top: 0,
1415
+ right: 0,
1416
+ bottom: 0,
1417
+ left: 0
1418
+ };
1419
+ var DEFAULT_DIMENSIONS = {
1420
+ width: 0,
1421
+ height: 0
1422
+ };
1423
+ var DropdownMenuContext = import_react15.default.createContext(DEFAULT_API);
1424
+ var useDropdownMenu = () => import_react15.default.useContext(DropdownMenuContext);
1425
+ var DropdownMenuProvider = ({
1426
+ children
1427
+ }) => {
1428
+ const context = useDropdownMenuProvider();
1429
+ return /* @__PURE__ */ import_react15.default.createElement(DropdownMenuContext.Provider, { value: context }, children);
1430
+ };
1431
+ function useDropdownMenuProvider() {
1432
+ const [open, setOpen] = import_react15.default.useState(false);
1433
+ const [contentProps, setContentProps] = import_react15.default.useState({
1434
+ ...DEFAULT_POSITIONS,
1435
+ ...DEFAULT_DIMENSIONS
1436
+ });
1437
+ const [triggerProps, setTriggerProps] = import_react15.default.useState({
1438
+ ...DEFAULT_POSITIONS,
1439
+ ...DEFAULT_DIMENSIONS
1440
+ });
1441
+ const triggerId = import_react15.default.useId();
1442
+ const dropdownId = import_react15.default.useId();
1443
+ const composedId = `${triggerId}|${dropdownId}`;
1444
+ return {
1445
+ id: composedId,
1446
+ states: {
1447
+ open,
1448
+ contentProps,
1449
+ triggerProps
1450
+ },
1451
+ methods: {
1452
+ toggleOpen: () => setOpen(!open),
1453
+ setContentProps,
1454
+ setTriggerProps
1455
+ }
1456
+ };
1457
+ }
1458
+
1459
+ // src/dropdown/styles/index.ts
1460
+ var import_styled_components7 = __toESM(require("styled-components"));
1461
+ var FadeIn = import_styled_components7.keyframes`
1462
+ 0% {
1463
+ opacity: 0;
1464
+ }
1465
+ 100% {
1466
+ opacity: 1;
1467
+ }
1468
+ `;
1469
+ var ContentWrapperSizes = import_styled_components7.css`
1470
+ --small: var(--measurement-large-60);
1471
+ --medium: var(--measurement-large-80);
1472
+ --large: var(--measurement-large-90);
1473
+
1474
+ max-height: var(--measurement-large-90);
1475
+
1476
+ &[data-sizing="small"] {
1477
+ width: var(--small);
1478
+ max-width: var(--small);
1479
+ }
1480
+
1481
+ &[data-sizing="medium"] {
1482
+ width: var(--medium);
1483
+ max-width: var(--medium);
1484
+ }
1485
+
1486
+ &[data-sizing="large"] {
1487
+ width: var(--large);
1488
+ max-width: var(--large);
1489
+ }
1490
+ `;
1491
+ var RootWrapper = import_styled_components7.default.div`
1492
+ position: relative;
1493
+ `;
1494
+ var ContentWrapper = import_styled_components7.default.ul`
1495
+ --small: var(--measurement-large-60);
1496
+ --medium: var(--measurement-large-80);
1497
+ --large: var(--measurement-large-90);
1498
+
1499
+ &[data-raw="false"] {
1500
+ position: fixed;
1501
+ margin: 0;
1502
+
1503
+ padding: var(--measurement-medium-30);
1504
+ margin: var(--measurement-medium-10) 0;
1505
+
1506
+ background-color: var(--body-color);
1507
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
1508
+ border-radius: var(--measurement-medium-30);
1509
+
1510
+ z-index: var(--depth-default-100);
1511
+ animation-duration: 0.2s;
1512
+ animation-name: ${FadeIn};
1513
+ animation-fill-mode: backwards;
1514
+
1515
+ ${ContentWrapperSizes}
1516
+ }
1517
+ `;
1518
+ var ItemWrapper = import_styled_components7.default.li`
1519
+ list-style: none;
1520
+ padding: 0;
1521
+ margin: 0;
1522
+ user-select: none;
1523
+
1524
+ &[data-raw="false"] {
1525
+ font-size: var(--fontsize-small-80);
1526
+ padding: var(--measurement-medium-30);
1527
+ border-radius: var(--measurement-medium-20);
1528
+ text-align: left;
1529
+ color: var(--font-color-alpha-60);
1530
+ outline: none;
1531
+ transition: all ease-in-out 0.2s;
1532
+ cursor: pointer;
1533
+
1534
+ &:hover,
1535
+ &:focus,
1536
+ &:active {
1537
+ color: var(--font-color);
1538
+ background-color: var(--font-color-alpha-10);
1539
+ }
1540
+ }
1541
+
1542
+ &[aria-disabled="true"] {
1543
+ cursor: not-allowed;
1544
+ opacity: 0.6;
1545
+ }
1546
+ `;
1547
+
1548
+ // src/dropdown/index.tsx
1549
+ var DropdownMenu = ({ children }) => {
1550
+ const DropdownContentRef = import_react16.default.useRef(null);
1551
+ const { states, methods } = useDropdownMenu();
1552
+ const { toggleOpen } = methods;
1553
+ const handleClickOutside = () => {
1554
+ if (states.open && toggleOpen) toggleOpen();
1555
+ };
1556
+ useClickOutside(DropdownContentRef, handleClickOutside);
1557
+ useDisabledScroll(Boolean(states.open));
1558
+ return /* @__PURE__ */ import_react16.default.createElement(RootWrapper, { ref: DropdownContentRef }, children);
1559
+ };
1560
+ DropdownMenu.displayName = "DropdownMenu";
1561
+ var DropdownMenuRoot = ({ children }) => {
1562
+ return /* @__PURE__ */ import_react16.default.createElement(DropdownMenuProvider, null, children);
1563
+ };
1564
+ DropdownMenuRoot.displayName = "DropdownMenu.Root";
1565
+ var DropdownMenuTrigger = (props) => {
1566
+ const triggerRef = import_react16.default.useRef(null);
1567
+ const triggerRect = () => triggerRef.current?.getBoundingClientRect();
1568
+ const { variant = "ghost", onClick, children, ...restProps } = props;
1569
+ const { id, states, methods } = useDropdownMenu();
1570
+ const { toggleOpen, setTriggerProps } = methods;
1571
+ const handleClick = (event) => {
1572
+ if (onClick) onClick(event);
1573
+ if (toggleOpen) toggleOpen();
1574
+ if (setTriggerProps)
1575
+ setTriggerProps({
1576
+ top: Number(triggerRect()?.top),
1577
+ right: Number(triggerRect()?.right),
1578
+ bottom: Number(triggerRect()?.bottom),
1579
+ left: Number(triggerRect()?.left),
1580
+ width: Number(triggerRect()?.width),
1581
+ height: Number(triggerRect()?.height)
1582
+ });
1583
+ };
1584
+ return /* @__PURE__ */ import_react16.default.createElement(
1585
+ Button,
1586
+ {
1587
+ ref: triggerRef,
1588
+ id: id.split("|").at(0),
1589
+ onClick: handleClick,
1590
+ "aria-haspopup": "menu",
1591
+ "data-state": applyDataState(Boolean(states.open)),
1592
+ variant,
1593
+ ...restProps
1594
+ },
1595
+ children
1596
+ );
1597
+ };
1598
+ DropdownMenuTrigger.displayName = "DropdownMenu.Trigger";
1599
+ var DropdownMenuContent = import_react16.default.forwardRef((props, _) => {
1600
+ const { raw, sizing = "medium", defaultOpen, children, ...restProps } = props;
1601
+ const { id, states, methods } = useDropdownMenu();
1602
+ const { toggleOpen, setContentProps } = methods;
1603
+ const mounted = import_react16.default.useRef(false);
1604
+ const contentRef = import_react16.default.useRef(null);
1605
+ const contentRect = () => contentRef?.current?.getBoundingClientRect();
1606
+ const bodyRect = () => {
1607
+ if (typeof document !== "undefined") {
1608
+ return document?.body?.getBoundingClientRect();
1609
+ }
1610
+ return void 0;
1611
+ };
1612
+ const positions = {
1613
+ btt: `calc((${states?.triggerProps?.top}px - ${states?.contentProps?.height}px) - (var(--measurement-medium-10) * 2))`,
1614
+ ttb: `calc((${states?.triggerProps?.top}px + ${states?.triggerProps?.height}px) + var(--measurement-medium-10))`,
1615
+ ltr: `${states?.triggerProps?.left}px`,
1616
+ rtl: `calc(${states?.triggerProps?.left}px - (${states?.contentProps?.width}px - ${states?.triggerProps?.width}px))`
1617
+ };
1618
+ const dimensions = {
1619
+ body_width: bodyRect()?.width ?? 0,
1620
+ body_height: bodyRect()?.height ?? 0,
1621
+ content_width: states.contentProps.width,
1622
+ content_height: states.contentProps.height,
1623
+ content_left: states.contentProps.left,
1624
+ content_bottom: states.contentProps.bottom
1625
+ };
1626
+ const hasEnoughHorizontalSpace = dimensions.body_width - dimensions.content_left > dimensions.content_width * 1.1;
1627
+ const hasEnoughVerticalSpace = dimensions.body_height - dimensions.content_bottom > dimensions.content_height - dimensions.content_height * 0.9;
1628
+ import_react16.default.useEffect(() => {
1629
+ if (defaultOpen && toggleOpen) toggleOpen();
1630
+ }, []);
1631
+ import_react16.default.useEffect(() => {
1632
+ mounted.current = true;
1633
+ setContentProps && setContentProps({
1634
+ top: Number(contentRect()?.top),
1635
+ right: Number(contentRect()?.right),
1636
+ bottom: Number(contentRect()?.bottom),
1637
+ left: Number(contentRect()?.left),
1638
+ width: Number(contentRect()?.width),
1639
+ height: Number(contentRect()?.height)
1640
+ });
1641
+ return () => {
1642
+ mounted.current = false;
1643
+ };
1644
+ }, [states.open]);
1645
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, states.open && /* @__PURE__ */ import_react16.default.createElement(
1646
+ ContentWrapper,
1647
+ {
1648
+ ref: contentRef,
1649
+ id: id.split("|").at(-1),
1650
+ role: "menu",
1651
+ tabIndex: -1,
1652
+ "aria-labelledby": id.split("|").at(0),
1653
+ "data-state": applyDataState(Boolean(states.open)),
1654
+ "data-sizing": sizing,
1655
+ "data-side": hasEnoughHorizontalSpace ? "left" /* Left */ : "right" /* Right */,
1656
+ "data-align": hasEnoughHorizontalSpace ? "left" /* Left */ : "right" /* Right */,
1657
+ "data-raw": Boolean(raw),
1658
+ style: {
1659
+ top: hasEnoughVerticalSpace ? positions.ttb : positions.btt,
1660
+ left: hasEnoughHorizontalSpace ? positions.ltr : positions.rtl
1661
+ },
1662
+ ...restProps
1663
+ },
1664
+ children
1665
+ ));
1666
+ });
1667
+ DropdownMenuContent.displayName = "DropdownMenu.Content";
1668
+ var DropdownMenuItem = (props) => {
1669
+ const {
1670
+ raw,
1671
+ onClick,
1672
+ radio = false,
1673
+ disabled,
1674
+ children,
1675
+ ...restProps
1676
+ } = props;
1677
+ const { methods } = useDropdownMenu();
1678
+ const { toggleOpen } = methods;
1679
+ const EventsHandler = {
1680
+ toggle: () => {
1681
+ if (!radio && toggleOpen) toggleOpen();
1682
+ },
1683
+ click: (event) => {
1684
+ if (onClick) onClick(event);
1685
+ }
1686
+ };
1687
+ const handleClick = (event) => {
1688
+ if (!disabled) {
1689
+ EventsHandler.click(event);
1690
+ EventsHandler.toggle();
1691
+ }
1692
+ };
1693
+ const handleKeydown = (event) => {
1694
+ if (["Space", "Enter"].includes(event.code || event.key) && !disabled) {
1695
+ EventsHandler.click(event);
1696
+ EventsHandler.toggle();
1697
+ }
1698
+ };
1699
+ return /* @__PURE__ */ import_react16.default.createElement(
1700
+ ItemWrapper,
1701
+ {
1702
+ role: "menuitem",
1703
+ tabIndex: 0,
1704
+ onClick: handleClick,
1705
+ onKeyDown: handleKeydown,
1706
+ "aria-disabled": disabled,
1707
+ "data-orientation": "vertical",
1708
+ "data-raw": Boolean(raw),
1709
+ ...restProps
1710
+ },
1711
+ children
1712
+ );
1713
+ };
1714
+ DropdownMenuItem.displayName = "DropdownMenu.Item";
1715
+ DropdownMenu.Root = DropdownMenuRoot;
1716
+ DropdownMenu.Trigger = DropdownMenuTrigger;
1717
+ DropdownMenu.Content = DropdownMenuContent;
1718
+ DropdownMenu.Item = DropdownMenuItem;
1719
+
1720
+ // src/field/index.tsx
1721
+ var import_react18 = __toESM(require("react"));
1722
+
1723
+ // src/field/hooks/index.tsx
1724
+ var import_react17 = __toESM(require("react"));
1725
+ var defaultComponentAPI5 = {
1726
+ id: "",
1727
+ states: {},
1728
+ methods: {}
1729
+ };
1730
+ var FieldContext = (0, import_react17.createContext)(defaultComponentAPI5);
1731
+ var useField = () => (0, import_react17.useContext)(FieldContext);
1732
+ var FieldProvider = ({ children }) => {
1733
+ const context = useFieldProvider();
1734
+ return /* @__PURE__ */ import_react17.default.createElement(FieldContext.Provider, { value: context }, children);
1735
+ };
1736
+ function useFieldProvider() {
1737
+ const fieldId = import_react17.default.useId();
1738
+ return {
1739
+ id: fieldId,
1740
+ states: {},
1741
+ methods: {}
1742
+ };
1743
+ }
1744
+
1745
+ // src/field/styles/index.ts
1746
+ var import_styled_components8 = __toESM(require("styled-components"));
1747
+ var FieldDefaultStyles = import_styled_components8.css`
1748
+ outline: none;
1749
+ cursor: pointer;
1750
+ display: flex;
1751
+ align-items: center;
1752
+ justify-content: center;
1753
+
1754
+ font-size: var(--fontsize-small-80);
1755
+ font-weight: 500;
1756
+ line-height: 1.1;
1757
+ letter-spacing: calc(
1758
+ var(--fontsize-small-10) - ((var(--fontsize-small-10) * 1.066))
1759
+ );
1760
+
1761
+ border: var(--measurement-small-10) solid transparent;
1762
+ border-radius: var(--measurement-medium-30);
1763
+ backdrop-filter: blur(var(--measurement-small-10));
1764
+ color: var(--font-color-alpha-60);
1765
+ width: fit-content;
1766
+ height: fit-content;
1767
+
1768
+ transition: all ease-in-out 0.2s;
1769
+
1770
+ svg,
1771
+ span,
1772
+ img {
1773
+ opacity: 0.6;
1774
+ }
1775
+
1776
+ &:hover,
1777
+ &:focus,
1778
+ &:active {
1779
+ color: var(--font-color);
1780
+
1781
+ svg,
1782
+ span,
1783
+ img {
1784
+ opacity: 1;
1785
+ }
1786
+ }
1787
+ &::placeholder {
1788
+ color: var(--font-color-alpha-30);
1789
+ }
1790
+ &:disabled {
1791
+ cursor: not-allowed;
1792
+ opacity: 0.6;
1793
+ }
1794
+ `;
1795
+ var FieldVariantsStyles = import_styled_components8.css`
1796
+ &[data-variant="primary"] {
1797
+ background-color: var(--font-color-alpha-10);
1798
+
1799
+ &[data-error="true"] {
1800
+ color: var(--color-red);
1801
+ background-color: var(--alpha-red-10);
1802
+ border-color: var(--alpha-red-10);
1803
+ }
1804
+ }
1805
+
1806
+ &[data-variant="secondary"] {
1807
+ background-color: transparent;
1808
+ border-color: var(--font-color-alpha-10);
1809
+
1810
+ &:hover,
1811
+ &:focus,
1812
+ &:active {
1813
+ background-color: var(--font-color-alpha-10);
1814
+ }
1815
+
1816
+ &[data-error="true"] {
1817
+ color: var(--color-red);
1818
+ border-color: var(--alpha-red-10);
1819
+
1820
+ &:hover,
1821
+ &:focus,
1822
+ &:active {
1823
+ background-color: var(--alpha-red-10);
1824
+ }
1825
+ }
1826
+ }
1827
+
1828
+ &[data-variant="ghost"] {
1829
+ padding: 0;
1830
+ border: none;
1831
+ background-color: transparent;
1832
+ min-width: fit-content;
1833
+ min-height: var(--measurement-medium-60);
1834
+ color: var(--font-color-alpha-60);
1835
+
1836
+ &:hover,
1837
+ &:focus,
1838
+ &:active {
1839
+ color: var(--font-color);
1840
+ }
1841
+
1842
+ &[data-error="true"] {
1843
+ color: var(--color-red);
1844
+ }
1845
+ }
1846
+ `;
1847
+ var FieldSizeStyles = import_styled_components8.css`
1848
+ &[data-size="small"] {
1849
+ gap: var(--measurement-medium-10);
1850
+ padding: 0 var(--measurement-medium-30);
1851
+ min-width: var(--measurement-medium-60);
1852
+ min-height: var(--measurement-medium-80);
1853
+ }
1854
+ &[data-size="medium"] {
1855
+ gap: var(--measurement-medium-30);
1856
+ padding: 0 var(--measurement-medium-30);
1857
+ min-width: var(--measurement-medium-90);
1858
+ min-height: var(--measurement-medium-90);
1859
+ width: fit-content;
1860
+ }
1861
+ &[data-size="large"] {
1862
+ padding: var(--measurement-medium-20) var(--measurement-medium-40);
1863
+ min-width: var(--measurement-medium-90);
1864
+ min-height: var(--measurement-medium-90);
1865
+ }
1866
+ `;
1867
+ var Fieldset = import_styled_components8.default.fieldset`
1868
+ all: unset;
1869
+ display: grid;
1870
+ gap: var(--measurement-medium-10);
1871
+ `;
1872
+ var Sup = import_styled_components8.default.sup`
1873
+ color: var(--color-red);
1874
+ `;
1875
+ var Input = import_styled_components8.default.input`
1876
+ &[data-raw="false"] {
1877
+ ${FieldDefaultStyles}
1878
+ ${FieldVariantsStyles}
1879
+ ${FieldSizeStyles}
1880
+
1881
+ &[data-error="true"] {
1882
+ &::placeholder {
1883
+ color: var(--alpha-red-30);
1884
+ }
1885
+ }
1886
+ }
1887
+ `;
1888
+ var Label = import_styled_components8.default.label`
1889
+ &[data-raw="false"] {
1890
+ font-weight: 500;
1891
+ line-height: 1.1;
1892
+ letter-spacing: calc(
1893
+ var(--fontsize-small-10) - ((var(--fontsize-small-10) * 1.066))
1894
+ );
1895
+ }
1896
+ `;
1897
+ var Def = import_styled_components8.default.dfn`
1898
+ &[data-raw="false"] {
1899
+ font-style: normal;
1900
+ font-size: var(--fontsize-medium-10);
1901
+
1902
+ &[data-variant="hint"] {
1903
+ color: var(--font-color-alpha-30);
1904
+ }
1905
+ &[data-variant="error"] {
1906
+ color: var(--color-red);
1907
+ }
1908
+ }
1909
+ `;
1910
+
1911
+ // src/field/index.tsx
1912
+ var MetaVariantEnum = /* @__PURE__ */ ((MetaVariantEnum2) => {
1913
+ MetaVariantEnum2["Default"] = "default";
1914
+ MetaVariantEnum2["Hint"] = "hint";
1915
+ MetaVariantEnum2["Emphasis"] = "emphasis";
1916
+ MetaVariantEnum2["Error"] = "error";
1917
+ return MetaVariantEnum2;
1918
+ })(MetaVariantEnum || {});
1919
+ var Field = (props) => {
1920
+ const {
1921
+ raw,
1922
+ sizing = "medium" /* Medium */,
1923
+ variant = "primary" /* Primary */,
1924
+ error,
1925
+ hint,
1926
+ ...restProps
1927
+ } = props;
1928
+ const metaId = import_react18.default.useId();
1929
+ const { id } = useField();
1930
+ return /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement(
1931
+ Input,
1932
+ {
1933
+ id,
1934
+ "aria-invalid": !!error,
1935
+ "aria-describedby": metaId,
1936
+ "aria-errormessage": error,
1937
+ "data-error": Boolean(error),
1938
+ "data-variant": variant,
1939
+ "data-size": sizing,
1940
+ "data-raw": Boolean(raw),
1941
+ ...restProps
1942
+ }
1943
+ ), (error ?? hint) && /* @__PURE__ */ import_react18.default.createElement(
1944
+ FieldMeta,
1945
+ {
1946
+ raw,
1947
+ "data-variant": error ? "error" /* Error */ : "hint" /* Hint */
1948
+ },
1949
+ error ?? hint
1950
+ ));
1951
+ };
1952
+ Field.displayName = "Field";
1953
+ var FieldRoot = ({ children }) => {
1954
+ return /* @__PURE__ */ import_react18.default.createElement(FieldProvider, null, children);
1955
+ };
1956
+ FieldRoot.displayName = "Field.Root";
1957
+ var FieldWrapper = ({
1958
+ children,
1959
+ ...restProps
1960
+ }) => {
1961
+ return /* @__PURE__ */ import_react18.default.createElement(Fieldset, { ...restProps }, children);
1962
+ };
1963
+ FieldWrapper.displayName = "Field.Wrapper";
1964
+ var FieldLabel = (props) => {
1965
+ const { raw, optional = false, children, ...restProps } = props;
1966
+ const { id } = useField();
1967
+ return /* @__PURE__ */ import_react18.default.createElement(Label, { htmlFor: id, "data-raw": Boolean(raw), ...restProps }, children, !optional && /* @__PURE__ */ import_react18.default.createElement(Sup, null, "*"));
1968
+ };
1969
+ FieldLabel.displayName = "Field.Label";
1970
+ var FieldMeta = (props) => {
1971
+ const {
1972
+ raw,
1973
+ variant = "emphasis" /* Emphasis */,
1974
+ children,
1975
+ ...restProps
1976
+ } = props;
1977
+ const metaId = import_react18.default.useId();
1978
+ const { id } = useField();
1979
+ return /* @__PURE__ */ import_react18.default.createElement(
1980
+ Def,
1981
+ {
1982
+ id: metaId,
1983
+ "aria-details": id,
1984
+ "data-variant": variant,
1985
+ "data-raw": Boolean(raw),
1986
+ ...restProps
1987
+ },
1988
+ children
1989
+ );
1990
+ };
1991
+ FieldMeta.displayName = "Field.Meta";
1992
+ Field.Root = FieldRoot;
1993
+ Field.Wrapper = FieldWrapper;
1994
+ Field.Label = FieldLabel;
1995
+ Field.Meta = FieldMeta;
1996
+
1997
+ // src/otp-field/index.tsx
1998
+ var import_react20 = __toESM(require("react"));
1999
+
2000
+ // src/otp-field/hooks/index.tsx
2001
+ var import_react19 = __toESM(require("react"));
2002
+ var OTPFieldContext = import_react19.default.createContext(
2003
+ null
2004
+ );
2005
+ var useOTPField = () => {
2006
+ const context = import_react19.default.useContext(OTPFieldContext);
2007
+ if (!context) return null;
2008
+ return context;
2009
+ };
2010
+
2011
+ // src/otp-field/styles/index.ts
2012
+ var import_styled_components9 = __toESM(require("styled-components"));
2013
+ var OTPCell = import_styled_components9.default.input`
2014
+ width: var(--measurement-medium-90);
2015
+ height: var(--measurement-medium-90);
2016
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
2017
+
2018
+ border-radius: var(--measurement-medium-30);
2019
+ backdrop-filter: blur(var(--measurement-small-10));
2020
+
2021
+ text-align: center;
2022
+ font-size: var(--fontsize-medium-10);
2023
+ font-weight: 500;
2024
+
2025
+ color: var(--font-color-alpha-10);
2026
+ text-shadow: 0 0 0 var(--font-color);
2027
+
2028
+ background-color: transparent;
2029
+ transition: all 0.2s ease-in-out;
2030
+ outline: none;
2031
+
2032
+ &:focus:not(:active) {
2033
+ background-color: var(--font-color-alpha-10);
2034
+ }
2035
+
2036
+ &:hover:not(:active) {
2037
+ border-color: var(--font-color-alpha-20);
2038
+ }
2039
+
2040
+ &::placeholder {
2041
+ opacity: var(--opacity-default-10);
2042
+ }
2043
+ `;
2044
+
2045
+ // src/otp-field/index.tsx
2046
+ var OTPField = ({ children, length, onComplete }) => {
2047
+ const defaultLength = length ?? 6;
2048
+ const inputRefs = import_react20.default.useRef([]);
2049
+ const [otp, setOtp] = import_react20.default.useState(
2050
+ Array.from({ length: defaultLength }, () => "")
2051
+ );
2052
+ const [activeIndex, setActiveIndex] = import_react20.default.useState(0);
2053
+ const handleChange = (index, value) => {
2054
+ const newOtp = [...otp];
2055
+ newOtp[index] = value.substring(value.length - 1);
2056
+ setOtp(newOtp);
2057
+ if (value && index < defaultLength - 1) {
2058
+ setActiveIndex(index + 1);
2059
+ inputRefs.current[index + 1]?.focus();
2060
+ }
2061
+ };
2062
+ const handleKeyDown = (index, e) => {
2063
+ const enabledBehaviorKeys = ["Backspace", "Delete"];
2064
+ const disabledBehaviorKeys = [
2065
+ "Tab",
2066
+ "ArrowLeft",
2067
+ "ArrowRight",
2068
+ "Home",
2069
+ "End"
2070
+ ];
2071
+ if (enabledBehaviorKeys.includes(e.key)) {
2072
+ if (otp[index]) {
2073
+ const newOtp = [...otp];
2074
+ newOtp[index] = "";
2075
+ setOtp(newOtp);
2076
+ return;
2077
+ }
2078
+ if (index > 0) {
2079
+ setActiveIndex(index - 1);
2080
+ inputRefs.current[index - 1]?.focus();
2081
+ }
2082
+ return;
2083
+ }
2084
+ if (disabledBehaviorKeys.includes(e.key) && !otp[index]) {
2085
+ e.preventDefault();
2086
+ }
2087
+ };
2088
+ const handleFocus = (index) => setActiveIndex(index);
2089
+ const handlePaste = (e) => {
2090
+ e.preventDefault();
2091
+ const pasteData = e.clipboardData.getData("text");
2092
+ const pasteArray = pasteData.slice(0, defaultLength).split("");
2093
+ const newOtp = [...otp];
2094
+ pasteArray.forEach((char, index) => {
2095
+ if (index < defaultLength) newOtp[index] = char;
2096
+ });
2097
+ setOtp(newOtp);
2098
+ const nextIndex = Math.min(pasteArray.length, defaultLength - 1);
2099
+ setActiveIndex(nextIndex);
2100
+ inputRefs.current[nextIndex]?.focus();
2101
+ };
2102
+ const handleClick = () => {
2103
+ const firstEmptyIndex = otp.findIndex((digit) => digit === "");
2104
+ const targetIndex = firstEmptyIndex === -1 ? defaultLength - 1 : firstEmptyIndex;
2105
+ setActiveIndex(targetIndex);
2106
+ inputRefs.current[targetIndex]?.focus();
2107
+ const timeout = setTimeout(
2108
+ () => inputRefs.current[targetIndex]?.select(),
2109
+ 0
2110
+ );
2111
+ return () => clearTimeout(timeout);
2112
+ };
2113
+ import_react20.default.useEffect(() => {
2114
+ const otpString = otp.join("");
2115
+ if (otpString.length === defaultLength && onComplete) {
2116
+ onComplete(otpString);
2117
+ }
2118
+ }, [otp, defaultLength, onComplete]);
2119
+ const contextValue = import_react20.default.useMemo(() => {
2120
+ return {
2121
+ otp,
2122
+ activeIndex,
2123
+ inputRefs,
2124
+ length: defaultLength,
2125
+ handleChange,
2126
+ handleKeyDown,
2127
+ handleFocus,
2128
+ handleClick,
2129
+ handlePaste
2130
+ };
2131
+ }, [
2132
+ otp,
2133
+ activeIndex,
2134
+ inputRefs,
2135
+ defaultLength,
2136
+ handleChange,
2137
+ handleKeyDown,
2138
+ handleFocus,
2139
+ handleClick,
2140
+ handlePaste
2141
+ ]);
2142
+ return /* @__PURE__ */ import_react20.default.createElement(OTPFieldContext.Provider, { value: contextValue }, children);
2143
+ };
2144
+ OTPField.displayName = "OTPField";
2145
+ var OTPFieldGroup = import_react20.default.forwardRef(({ ...props }, ref) => {
2146
+ return /* @__PURE__ */ import_react20.default.createElement("span", { ref, className: "flex g-medium-10 align-center", ...props });
2147
+ });
2148
+ OTPFieldGroup.displayName = "OTPField.Group";
2149
+ var OTPFieldSlot = ({
2150
+ index,
2151
+ ...props
2152
+ }) => {
2153
+ const context = useOTPField();
2154
+ if (!context) return null;
2155
+ const {
2156
+ otp,
2157
+ activeIndex,
2158
+ inputRefs,
2159
+ handleChange,
2160
+ handleKeyDown,
2161
+ handleFocus,
2162
+ handleClick,
2163
+ handlePaste
2164
+ } = context;
2165
+ return /* @__PURE__ */ import_react20.default.createElement(
2166
+ OTPCell,
2167
+ {
2168
+ ref: (el) => inputRefs.current[index] = el,
2169
+ type: "text",
2170
+ "data-testid": "otp-field-slot",
2171
+ "data-active": activeIndex === index,
2172
+ autoComplete: "one-time-code",
2173
+ maxLength: 1,
2174
+ value: otp[index] || "",
2175
+ placeholder: props.placeholder || "-",
2176
+ onChange: (e) => handleChange(index, e.target.value),
2177
+ onKeyDown: (e) => handleKeyDown(index, e),
2178
+ onFocus: () => handleFocus(index),
2179
+ onMouseDown: () => handleClick(index),
2180
+ onClick: () => handleClick(index),
2181
+ onPaste: handlePaste,
2182
+ ...props
2183
+ }
2184
+ );
2185
+ };
2186
+ OTPFieldSlot.displayName = "OTPField.Slot";
2187
+ OTPField.Group = OTPFieldGroup;
2188
+ OTPField.Slot = OTPFieldSlot;
2189
+
2190
+ // src/overlay/index.tsx
2191
+ var import_react21 = __toESM(require("react"));
2192
+
2193
+ // src/overlay/styles/index.ts
2194
+ var import_styled_components10 = __toESM(require("styled-components"));
2195
+ var OverlayWrapper = import_styled_components10.default.div`
2196
+ @keyframes animate-fade {
2197
+ 0% {
2198
+ opacity: 0;
2199
+ }
2200
+ 100% {
2201
+ opacity: 1;
2202
+ }
2203
+ }
2204
+
2205
+ position: fixed;
2206
+ top: 0;
2207
+ left: 0;
2208
+ width: 100%;
2209
+ height: 100%;
2210
+ z-index: var(--depth-default-90);
2211
+
2212
+ &[data-raw="false"] {
2213
+ background-color: rgba(0, 0, 0, 0.6); // Always forced to black
2214
+ animation-duration: 0.2s;
2215
+ animation-name: animate-fade;
2216
+ animation-fill-mode: backwards;
2217
+ }
2218
+ `;
2219
+
2220
+ // src/overlay/index.tsx
2221
+ var Overlay = (props) => {
2222
+ const { raw, visible, closeOnInteract, onClick, ...restProps } = props;
2223
+ const [mounted, setMounted] = import_react21.default.useState(Boolean(visible));
2224
+ const handleClick = (event) => {
2225
+ if (onClick) onClick(event);
2226
+ if (closeOnInteract) setMounted(false);
2227
+ };
2228
+ import_react21.default.useEffect(() => {
2229
+ if (visible !== mounted) setMounted(Boolean(visible));
2230
+ }, [visible]);
2231
+ return /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, mounted && /* @__PURE__ */ import_react21.default.createElement(
2232
+ OverlayWrapper,
2233
+ {
2234
+ tabIndex: -1,
2235
+ onClick: handleClick,
2236
+ "aria-hidden": true,
2237
+ "data-raw": Boolean(raw),
2238
+ ...restProps
2239
+ }
2240
+ ));
2241
+ };
2242
+ Overlay.displayName = "Overlay";
2243
+
2244
+ // src/page/index.tsx
2245
+ var import_react22 = __toESM(require("react"));
2246
+
2247
+ // src/page/styles/index.ts
2248
+ var import_styled_components12 = __toESM(require("styled-components"));
2249
+
2250
+ // src/scrollarea/styles/index.ts
2251
+ var import_styled_components11 = __toESM(require("styled-components"));
2252
+ var HiddenScrollbar = import_styled_components11.css`
2253
+ scrollbar-width: none;
2254
+
2255
+ &::-webkit-scrollbar {
2256
+ display: none;
2257
+ width: 0;
2258
+ height: 0;
2259
+ }
2260
+ &::-moz-scrollbar {
2261
+ display: none;
2262
+ }
2263
+ `;
2264
+ var CustomScrollbar = import_styled_components11.css`
2265
+ height: ${({ $height }) => $height || "100%"};
2266
+ width: ${({ $width }) => $width || "100%"};
2267
+ overflow-y: auto;
2268
+ overflow-x: hidden;
2269
+
2270
+ &::-webkit-scrollbar {
2271
+ cursor: pointer;
2272
+
2273
+ width: var(--measurement-medium-10);
2274
+ }
2275
+
2276
+ &::-webkit-scrollbar-track {
2277
+ background: ${({ $trackColor }) => $trackColor || "transparent"};
2278
+ border-radius: var(--measurement-medium-30);
2279
+ border: none;
2280
+ }
2281
+
2282
+ &::-webkit-scrollbar-thumb {
2283
+ background: ${({ $thumbColor }) => $thumbColor || "var(--font-color-alpha-10)"};
2284
+ border-radius: var(--measurement-medium-30);
2285
+ transition: background-color 0.2s ease;
2286
+ }
2287
+
2288
+ &::-webkit-scrollbar-thumb:hover {
2289
+ background: ${({ $thumbHoverColor, $thumbColor }) => $thumbHoverColor || $thumbColor || "var(--font-color-alpha-20)"};
2290
+ }
2291
+
2292
+ // Firefox
2293
+ scrollbar-width: thin;
2294
+ scrollbar-color: ${({ $thumbColor, $trackColor }) => `${$thumbColor || "var(--font-color-alpha-10)"} ${$trackColor || "transparent"}`};
2295
+ `;
2296
+ var ScrollAreaWrapper = import_styled_components11.default.div`
2297
+ overflow: scroll;
2298
+
2299
+ &[data-scrollbar="true"] {
2300
+ ${CustomScrollbar}
2301
+ }
2302
+ &[data-scrollbar="false"] {
2303
+ ${HiddenScrollbar}
2304
+ }
2305
+ `;
2306
+
2307
+ // src/page/styles/index.ts
2308
+ var PageRootWrapper = import_styled_components12.default.div`
2309
+ height: 100dvh;
2310
+ width: 100%;
2311
+ `;
2312
+ var PageNavWrapper = import_styled_components12.default.nav`
2313
+ background-color: var(--body-color);
2314
+ border: var(--measurement-small-10) solid transparent;
2315
+ border-bottom-color: var(--font-color-alpha-10);
2316
+ width: 100%;
2317
+ height: 100%;
2318
+ max-height: var(--measurement-large-20);
2319
+ padding: var(--measurement-medium-30);
2320
+ `;
2321
+ var PageMenuWrapper = import_styled_components12.default.menu`
2322
+ background-color: var(--body-color);
2323
+ border: var(--measurement-small-10) solid transparent;
2324
+ border-bottom-color: var(--font-color-alpha-10);
2325
+ width: 100%;
2326
+ height: 100%;
2327
+ max-height: var(--measurement-large-30);
2328
+ margin: 0;
2329
+ padding: var(--measurement-medium-60) var(--measurement-medium-30);
2330
+ `;
2331
+ var PagePanelWrapper = import_styled_components12.default.aside`
2332
+ position: absolute;
2333
+ bottom: 0;
2334
+ width: 100%;
2335
+ overflow: scroll;
2336
+ ${HiddenScrollbar}
2337
+ `;
2338
+ var PageSectionWrapper = import_styled_components12.default.div`
2339
+ background: var(--body-color);
2340
+ width: 100%;
2341
+ height: 100%;
2342
+ `;
2343
+ var PageBodyWrapper = import_styled_components12.default.div`
2344
+ --menus-height: calc(
2345
+ var(--measurement-large-30) *
2346
+ ${({ $menus }) => $menus ? Number($menus) : 0}
2347
+ );
2348
+ --navs-height: calc(
2349
+ var(--measurement-large-20) *
2350
+ ${({ $navigations }) => $navigations ? Number($navigations) : 0}
2351
+ );
2352
+ --page-height: calc(100dvh - (var(--menus-height) + var(--navs-height)));
2353
+
2354
+ outline: none;
2355
+ display: inline-block;
2356
+
2357
+ height: var(--page-height);
2358
+ max-height: var(--page-height);
2359
+
2360
+ width: 100%;
2361
+ overflow: scroll;
2362
+ ${HiddenScrollbar}
2363
+ `;
2364
+
2365
+ // src/page/index.tsx
2366
+ var Page = (props) => {
2367
+ const { children } = props;
2368
+ return /* @__PURE__ */ import_react22.default.createElement(PageRootWrapper, { className: "flex", ...props }, children);
2369
+ };
2370
+ Page.displayName = "Page";
2371
+ var PageNavigation = (props) => {
2372
+ const { children } = props;
2373
+ return /* @__PURE__ */ import_react22.default.createElement(PageNavWrapper, { ...props }, children);
2374
+ };
2375
+ PageNavigation.displayName = "Page.Navigation";
2376
+ var PageTools = (props) => {
2377
+ const {
2378
+ shortcut,
2379
+ hotkey,
2380
+ bindkey,
2381
+ raw,
2382
+ sizing,
2383
+ side,
2384
+ defaultOpen,
2385
+ fixed,
2386
+ showoncollapse,
2387
+ onClick,
2388
+ trigger,
2389
+ triggerProps,
2390
+ children
2391
+ } = props;
2392
+ const handleClick = (event) => {
2393
+ if (onClick) onClick(event);
2394
+ };
2395
+ return /* @__PURE__ */ import_react22.default.createElement(Toolbar.Root, null, /* @__PURE__ */ import_react22.default.createElement(
2396
+ Toolbar,
2397
+ {
2398
+ raw,
2399
+ sizing,
2400
+ side,
2401
+ shortcut: !fixed && shortcut,
2402
+ hotkey,
2403
+ bindkey,
2404
+ defaultOpen,
2405
+ ...props
2406
+ },
2407
+ /* @__PURE__ */ import_react22.default.createElement(Toolbar.Section, { showoncollapse }, children),
2408
+ !fixed && /* @__PURE__ */ import_react22.default.createElement(
2409
+ Toolbar.Trigger,
2410
+ {
2411
+ title: shortcut ? `${bindkey ?? "ctrl"} + ${hotkey}` : "toolbar-trigger",
2412
+ onClick: handleClick,
2413
+ ...triggerProps
2414
+ },
2415
+ trigger ?? /* @__PURE__ */ import_react22.default.createElement("span", null, "\u2194")
2416
+ )
2417
+ ));
2418
+ };
2419
+ PageTools.displayName = "Page.Tools";
2420
+ var PageContent = (props) => {
2421
+ const { children } = props;
2422
+ return /* @__PURE__ */ import_react22.default.createElement(ScrollArea, { as: PageSectionWrapper, ...props }, children);
2423
+ };
2424
+ PageContent.displayName = "Page.Content";
2425
+ var PageWrapper = (props) => {
2426
+ const { children } = props;
2427
+ return /* @__PURE__ */ import_react22.default.createElement(PageBodyWrapper, { ...props }, children);
2428
+ };
2429
+ PageWrapper.displayName = "Page.Wrapper";
2430
+ var PagePanel = (props) => {
2431
+ const {
2432
+ shortcut,
2433
+ hotkey,
2434
+ bindkey,
2435
+ raw,
2436
+ sizing,
2437
+ height = "auto",
2438
+ side,
2439
+ defaultOpen,
2440
+ fixed,
2441
+ showoncollapse,
2442
+ onClick,
2443
+ trigger,
2444
+ triggerProps,
2445
+ children
2446
+ } = props;
2447
+ const handleClick = (event) => {
2448
+ if (onClick) onClick(event);
2449
+ };
2450
+ return /* @__PURE__ */ import_react22.default.createElement(Toolbar.Root, null, /* @__PURE__ */ import_react22.default.createElement(
2451
+ PagePanelWrapper,
2452
+ {
2453
+ as: Toolbar,
2454
+ raw,
2455
+ sizing,
2456
+ height,
2457
+ side,
2458
+ shortcut: !fixed && shortcut,
2459
+ hotkey,
2460
+ bindkey,
2461
+ defaultOpen,
2462
+ "aria-label": props["aria-label"]
2463
+ },
2464
+ !fixed && /* @__PURE__ */ import_react22.default.createElement(
2465
+ Toolbar.Trigger,
2466
+ {
2467
+ title: shortcut ? `${bindkey ?? "ctrl"} + ${hotkey}` : "toolbar-trigger",
2468
+ onClick: handleClick,
2469
+ ...triggerProps
2470
+ },
2471
+ trigger ?? /* @__PURE__ */ import_react22.default.createElement("span", { style: { transform: "rotate(90deg)" } }, "\u2194")
2472
+ ),
2473
+ /* @__PURE__ */ import_react22.default.createElement(Toolbar.Section, { showoncollapse }, children)
2474
+ ));
2475
+ };
2476
+ PagePanel.displayName = "Page.Panel";
2477
+ var PageMenu = (props) => {
2478
+ const { children } = props;
2479
+ return /* @__PURE__ */ import_react22.default.createElement(PageMenuWrapper, { ...props }, children);
2480
+ };
2481
+ PageMenu.displayName = "Page.Menu";
2482
+ Page.Navigation = PageNavigation;
2483
+ Page.Tools = PageTools;
2484
+ Page.Wrapper = PageWrapper;
2485
+ Page.Content = PageContent;
2486
+ Page.Panel = PagePanel;
2487
+ Page.Menu = PageMenu;
2488
+
2489
+ // src/portal/index.tsx
2490
+ var import_react23 = __toESM(require("react"));
2491
+ var import_react_dom = require("react-dom");
2492
+ var Portal = (props) => {
2493
+ if (typeof document === "undefined") return null;
2494
+ const { container, children } = props;
2495
+ const [hasMounted, setHasMounted] = import_react23.default.useState(false);
2496
+ const [portalRoot, setPortalRoot] = import_react23.default.useState(null);
2497
+ import_react23.default.useEffect(() => {
2498
+ setHasMounted(true);
2499
+ setPortalRoot(document.querySelector(`#${container}`));
2500
+ }, [container]);
2501
+ if (!hasMounted || !portalRoot) return null;
2502
+ return (0, import_react_dom.createPortal)(children, portalRoot);
2503
+ };
2504
+ Portal.displayName = "Portal";
2505
+
2506
+ // src/sheet/index.tsx
2507
+ var import_react25 = __toESM(require("react"));
2508
+
2509
+ // src/sheet/hooks/index.tsx
2510
+ var import_react24 = __toESM(require("react"));
2511
+ var SheetContext = import_react24.default.createContext({
2512
+ id: {},
2513
+ states: {},
2514
+ methods: {}
2515
+ });
2516
+ var useSheet = () => import_react24.default.useContext(SheetContext);
2517
+ var SheetProvider = ({ children }) => {
2518
+ const context = useSheetProvider();
2519
+ return /* @__PURE__ */ import_react24.default.createElement(SheetContext.Provider, { value: context }, children);
2520
+ };
2521
+ function useSheetProvider() {
2522
+ const containerId = import_react24.default.useId();
2523
+ const triggerId = import_react24.default.useId();
2524
+ const controlId = import_react24.default.useId();
2525
+ const [open, setOpen] = import_react24.default.useState(false);
2526
+ return {
2527
+ id: {
2528
+ containerId,
2529
+ triggerId,
2530
+ controlId
2531
+ },
2532
+ states: {
2533
+ open
2534
+ },
2535
+ methods: {
2536
+ setOpen,
2537
+ toggle: () => setOpen(!open)
2538
+ }
2539
+ };
2540
+ }
2541
+
2542
+ // src/sheet/styles/index.ts
2543
+ var import_styled_components13 = __toESM(require("styled-components"));
2544
+ var SheetStyles = import_styled_components13.css`
2545
+ all: unset;
2546
+ position: fixed;
2547
+ background-color: var(--body-color);
2548
+ border: var(--measurement-small-10) solid transparent;
2549
+ padding: var(--measurement-medium-60);
2550
+ height: 100%;
2551
+ z-index: var(--depth-default-100);
2552
+
2553
+ @keyframes slide-right {
2554
+ 0% {
2555
+ transform: translateX(calc(var(--measurement-large-90) * 2));
2556
+ }
2557
+ 100% {
2558
+ transform: translateX(0);
2559
+ }
2560
+ }
2561
+ @keyframes slide-left {
2562
+ 0% {
2563
+ transform: translateX(calc(var(--measurement-large-90) * -2));
2564
+ }
2565
+ 100% {
2566
+ transform: translateX(0);
2567
+ }
2568
+ }
2569
+
2570
+ animation-delay: 0.2s;
2571
+ animation-duration: 0.2s;
2572
+ animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);
2573
+ animation-fill-mode: backwards;
2574
+ `;
2575
+ var SheetSizeStyles = import_styled_components13.css`
2576
+ &[data-size="small"] {
2577
+ width: var(--measurement-large-80);
2578
+ }
2579
+
2580
+ &[data-size="medium"] {
2581
+ width: var(--measurement-large-90);
2582
+ }
2583
+
2584
+ &[data-size="large"] {
2585
+ width: calc(var(--measurement-large-90) * 1.5);
2586
+ }
2587
+ `;
2588
+ var SheetSideStyles = import_styled_components13.css`
2589
+ top: 0;
2590
+
2591
+ &[data-side="right"] {
2592
+ right: 0;
2593
+ border-left-color: var(--font-color-alpha-10);
2594
+ animation-name: slide-right;
2595
+ }
2596
+
2597
+ &[data-side="left"] {
2598
+ left: 0;
2599
+ border-right-color: var(--font-color-alpha-10);
2600
+ animation-name: slide-left;
2601
+ }
2602
+ `;
2603
+ var SheetWrapper = import_styled_components13.default.dialog`
2604
+ &[data-raw="false"] {
2605
+ ${SheetStyles}
2606
+ ${SheetSideStyles}
2607
+ ${SheetSizeStyles}
2608
+ }
2609
+ `;
2610
+
2611
+ // src/sheet/index.tsx
2612
+ var SheetRoot = ({ children }) => {
2613
+ return /* @__PURE__ */ import_react25.default.createElement(SheetProvider, null, children);
2614
+ };
2615
+ SheetRoot.displayName = "Sheet.Root";
2616
+ var Sheet = (props) => {
2617
+ const {
2618
+ raw,
2619
+ sizing = "medium" /* Medium */,
2620
+ side = "right" /* Right */,
2621
+ lock = true,
2622
+ overlay = true,
2623
+ closeOnInteract = true,
2624
+ open,
2625
+ shortcut,
2626
+ bindkey = "ctrlKey" /* Ctrl */,
2627
+ hotkey,
2628
+ children,
2629
+ ...restProps
2630
+ } = props;
2631
+ const { id, states, methods } = useSheet();
2632
+ const { toggle } = methods;
2633
+ const shortcutControls = useKeyPress(String(hotkey), true, bindkey);
2634
+ import_react25.default.useEffect(() => {
2635
+ if (open && toggle) return toggle();
2636
+ }, [open]);
2637
+ import_react25.default.useEffect(() => {
2638
+ if (shortcut && shortcutControls && toggle) {
2639
+ return toggle();
2640
+ }
2641
+ }, [shortcutControls]);
2642
+ useDisabledScroll(lock && Boolean(states.open));
2643
+ return /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, states.open && /* @__PURE__ */ import_react25.default.createElement(import_react25.default.Fragment, null, /* @__PURE__ */ import_react25.default.createElement(
2644
+ SheetWrapper,
2645
+ {
2646
+ role: "dialog",
2647
+ tabIndex: -1,
2648
+ id: String(id.containerId),
2649
+ "aria-label": props["aria-label"] ?? `${id.containerId}-sheet`,
2650
+ "aria-labelledby": String(id.containerId),
2651
+ open: Boolean(states.open),
2652
+ "data-expanded": Boolean(states.open),
2653
+ "data-state": applyDataState(Boolean(states.open)),
2654
+ "data-size": sizing,
2655
+ "data-side": side,
2656
+ "data-raw": Boolean(raw),
2657
+ ...restProps
2658
+ },
2659
+ children
2660
+ ), overlay && /* @__PURE__ */ import_react25.default.createElement(
2661
+ Overlay,
2662
+ {
2663
+ onClick: () => toggle && toggle(!states.open),
2664
+ visible: Boolean(states.open),
2665
+ closeOnInteract,
2666
+ "aria-label": props["aria-label"] ? `${props["aria-label"]}-overlay` : `${id.containerId}-sheet-overlay`
2667
+ }
2668
+ )));
2669
+ };
2670
+ Sheet.displayName = "Sheet";
2671
+ var SheetTrigger = (props) => {
2672
+ const {
2673
+ raw,
2674
+ onClick,
2675
+ variant = "ghost" /* Ghost */,
2676
+ sizing = "small" /* Small */,
2677
+ children,
2678
+ ...restProps
2679
+ } = props;
2680
+ const { id, methods, states } = useSheet();
2681
+ const { toggle } = methods;
2682
+ const handleClick = (event) => {
2683
+ if (onClick) onClick(event);
2684
+ if (toggle) toggle(!states.open);
2685
+ };
2686
+ return /* @__PURE__ */ import_react25.default.createElement(
2687
+ Button,
2688
+ {
2689
+ id: id.triggerId,
2690
+ "aria-controls": String(id.containerId),
2691
+ "data-state": applyDataState(Boolean(states.open)),
2692
+ variant,
2693
+ sizing,
2694
+ raw: Boolean(raw),
2695
+ onClick: handleClick,
2696
+ ...restProps
2697
+ },
2698
+ children
2699
+ );
2700
+ };
2701
+ SheetTrigger.displayName = "Sheet.Trigger";
2702
+ Sheet.Root = SheetRoot;
2703
+ Sheet.Trigger = SheetTrigger;
2704
+
2705
+ // src/scrollarea/index.tsx
2706
+ var import_react26 = __toESM(require("react"));
2707
+ var ScrollArea = ({
2708
+ scrollbar = false,
2709
+ children,
2710
+ ...restProps
2711
+ }) => {
2712
+ return /* @__PURE__ */ import_react26.default.createElement(
2713
+ ScrollAreaWrapper,
2714
+ {
2715
+ "aria-hidden": "true",
2716
+ "data-scrollbar": scrollbar,
2717
+ ...restProps
2718
+ },
2719
+ children
2720
+ );
2721
+ };
2722
+
2723
+ // src/switch/index.tsx
2724
+ var import_react28 = __toESM(require("react"));
2725
+
2726
+ // src/switch/hooks/index.tsx
2727
+ var import_react27 = __toESM(require("react"));
2728
+ var defaultComponentAPI6 = {
2729
+ id: "",
2730
+ states: {},
2731
+ methods: {}
2732
+ };
2733
+ var SwitchContext = (0, import_react27.createContext)(defaultComponentAPI6);
2734
+ var useSwitch = () => (0, import_react27.useContext)(SwitchContext);
2735
+ var SwitchProvider = ({ children }) => {
2736
+ const context = useSwitchProvider();
2737
+ return /* @__PURE__ */ import_react27.default.createElement(SwitchContext.Provider, { value: context }, children);
2738
+ };
2739
+ function useSwitchProvider() {
2740
+ const [checked, setChecked] = (0, import_react27.useState)(false);
2741
+ const switchId = import_react27.default.useId();
2742
+ return {
2743
+ id: switchId,
2744
+ states: {
2745
+ checked
2746
+ },
2747
+ methods: {
2748
+ toggleSwitch: () => setChecked(!checked)
2749
+ }
2750
+ };
2751
+ }
2752
+
2753
+ // src/switch/styles/index.ts
2754
+ var import_styled_components14 = __toESM(require("styled-components"));
2755
+ var SwitchDefaultStyles = import_styled_components14.css`
2756
+ all: unset;
2757
+
2758
+ border: var(--measurement-small-10) solid transparent;
2759
+ border-radius: var(--measurement-large-90);
2760
+ transition: all 0.2s ease-in-out 0s;
2761
+
2762
+ cursor: pointer;
2763
+
2764
+ &:disabled {
2765
+ cursor: not-allowed;
2766
+ opacity: 0.6;
2767
+ }
2768
+ `;
2769
+ var SwitchVariantsStyles = import_styled_components14.css`
2770
+ &[data-variant="primary"] {
2771
+ &[aria-checked="true"] {
2772
+ background-color: var(--color-green);
2773
+ border-color: var(--font-color-alpha-10);
2774
+ }
2775
+ &[aria-checked="false"] {
2776
+ background-color: var(--font-color-alpha-10);
2777
+ border-color: var(--font-color-alpha-10);
2778
+ }
2779
+ }
2780
+ &[data-variant="secondary"] {
2781
+ &[aria-checked="true"] {
2782
+ background-color: var(--font-color-alpha-10);
2783
+ border-color: var(--font-color-alpha-10);
2784
+ }
2785
+ &[aria-checked="false"] {
2786
+ background-color: var(--body-color-alpha-10);
2787
+ }
2788
+ }
2789
+
2790
+ &[data-variant="ghost"] {
2791
+ &[aria-checked="true"] {
2792
+ border-color: var(--font-color-alpha-10);
2793
+ background-color: var(--body-color-alpha-10);
2794
+ }
2795
+ &[aria-checked="false"] {
2796
+ border-color: var(--font-color-alpha-10);
2797
+ }
2798
+ }
2799
+ `;
2800
+ var SwitchSizeStyles = import_styled_components14.css`
2801
+ &[data-size="small"] {
2802
+ width: calc(var(--measurement-medium-60) * 1.33);
2803
+ height: var(--measurement-medium-50);
2804
+
2805
+ span {
2806
+ width: var(--measurement-medium-40);
2807
+ height: var(--measurement-medium-40);
2808
+ &[data-checked="true"] {
2809
+ transform: translateX(var(--measurement-medium-40));
2810
+ }
2811
+ &[data-checked="false"] {
2812
+ transform: translateX(var(--measurement-small-60));
2813
+ }
2814
+ }
2815
+ }
2816
+
2817
+ &[data-size="medium"] {
2818
+ width: calc(var(--measurement-medium-60) * 1.66);
2819
+ height: var(--measurement-medium-60);
2820
+
2821
+ span {
2822
+ width: var(--measurement-medium-50);
2823
+ height: var(--measurement-medium-50);
2824
+ &[data-checked="true"] {
2825
+ transform: translateX(var(--measurement-medium-50));
2826
+ }
2827
+ &[data-checked="false"] {
2828
+ transform: translateX(var(--measurement-small-60));
2829
+ }
2830
+ }
2831
+ }
2832
+
2833
+ &[data-size="large"] {
2834
+ width: calc(var(--measurement-medium-60) * 2.33);
2835
+ height: var(--measurement-medium-70);
2836
+
2837
+ span {
2838
+ width: var(--measurement-medium-60);
2839
+ height: var(--measurement-medium-60);
2840
+ &[data-checked="true"] {
2841
+ transform: translateX(calc(var(--measurement-medium-60) * 1.133));
2842
+ }
2843
+ &[data-checked="false"] {
2844
+ transform: translateX(var(--measurement-small-80));
2845
+ }
2846
+ }
2847
+ }
2848
+ `;
2849
+ var TriggerWrapper = import_styled_components14.default.button`
2850
+ &[data-raw="false"] {
2851
+ ${SwitchDefaultStyles}
2852
+ ${SwitchVariantsStyles}
2853
+ ${SwitchSizeStyles}
2854
+ }
2855
+ `;
2856
+ var Thumb = import_styled_components14.default.span`
2857
+ &[data-raw="false"] {
2858
+ all: unset;
2859
+ display: block;
2860
+
2861
+ background: var(--font-color-alpha-60);
2862
+ border-radius: 100%;
2863
+ transition: all 0.1s ease-in-out 0.2s;
2864
+
2865
+ &[data-checked="true"] {
2866
+ background: var(--font-color);
2867
+ }
2868
+ }
2869
+ `;
2870
+
2871
+ // src/switch/index.tsx
2872
+ var Switch = (props) => {
2873
+ const {
2874
+ raw,
2875
+ sizing = "medium" /* Medium */,
2876
+ variant = "primary" /* Primary */,
2877
+ value,
2878
+ defaultChecked,
2879
+ disabled,
2880
+ onClick,
2881
+ children,
2882
+ ...restProps
2883
+ } = props;
2884
+ const { id, states, methods } = useSwitch();
2885
+ const { toggleSwitch } = methods;
2886
+ const handleClick = (event) => {
2887
+ if (onClick) onClick(event);
2888
+ if (toggleSwitch) toggleSwitch();
2889
+ };
2890
+ import_react28.default.useEffect(() => {
2891
+ if (defaultChecked && toggleSwitch) toggleSwitch();
2892
+ }, [defaultChecked]);
2893
+ return /* @__PURE__ */ import_react28.default.createElement(
2894
+ TriggerWrapper,
2895
+ {
2896
+ type: "button",
2897
+ role: "switch",
2898
+ title: "switch-trigger",
2899
+ onClick: handleClick,
2900
+ value: String(states.checked),
2901
+ "aria-label": `${id}-switch-trigger`,
2902
+ "aria-checked": Boolean(states.checked),
2903
+ "data-disabled": String(disabled ?? false),
2904
+ "data-variant": variant,
2905
+ "data-size": sizing,
2906
+ "data-raw": Boolean(raw),
2907
+ ...restProps
2908
+ },
2909
+ /* @__PURE__ */ import_react28.default.createElement("title", null, "Switch"),
2910
+ children
2911
+ );
2912
+ };
2913
+ Switch.displayName = "Switch";
2914
+ var SwitchRoot = ({ children }) => {
2915
+ return /* @__PURE__ */ import_react28.default.createElement(SwitchProvider, null, children);
2916
+ };
2917
+ SwitchRoot.displayName = "Switch.Root";
2918
+ var SwitchThumb = (props) => {
2919
+ const { raw, sizing } = props;
2920
+ const { id, states } = useSwitch();
2921
+ return /* @__PURE__ */ import_react28.default.createElement(
2922
+ Thumb,
2923
+ {
2924
+ role: "presentation",
2925
+ title: "switch-thumb",
2926
+ tabIndex: -1,
2927
+ "aria-hidden": true,
2928
+ "aria-label": `${id}-switch-thumb`,
2929
+ "data-checked": states.checked,
2930
+ "data-raw": Boolean(raw),
2931
+ "data-size": sizing ?? "medium" /* Medium */,
2932
+ ...props
2933
+ }
2934
+ );
2935
+ };
2936
+ SwitchThumb.displayName = "Switch.Thumb";
2937
+ Switch.Root = SwitchRoot;
2938
+ Switch.Thumb = SwitchThumb;
2939
+
2940
+ // src/table/index.tsx
2941
+ var import_react29 = __toESM(require("react"));
2942
+
2943
+ // src/table/styles/index.ts
2944
+ var import_styled_components15 = __toESM(require("styled-components"));
2945
+ var CellStyles = import_styled_components15.css`
2946
+ box-sizing: border-box;
2947
+ border: none;
2948
+ line-height: 1;
2949
+ font-weight: 500;
2950
+ padding: var(--measurement-medium-40) var(--measurement-medium-30);
2951
+ letter-spacing: calc(
2952
+ var(--fontsize-small-10) - ((var(--fontsize-small-10) * 1.066))
2953
+ );
2954
+ `;
2955
+ var TableLayer = import_styled_components15.default.div`
2956
+ border-radius: var(--measurement-medium-30);
2957
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
2958
+ `;
2959
+ var TableWrapper = import_styled_components15.default.table`
2960
+ border-collapse: collapse;
2961
+
2962
+ tbody {
2963
+ tr {
2964
+ &:last-of-type {
2965
+ border-bottom: none;
2966
+ }
2967
+ }
2968
+ }
2969
+ `;
2970
+ var RowWrapper = import_styled_components15.default.tr`
2971
+ border-bottom: var(--measurement-small-10) solid var(--font-color-alpha-10);
2972
+
2973
+ transition: background-color linear 0.1s;
2974
+
2975
+ &:hover {
2976
+ background-color: var(--font-color-alpha-10);
2977
+ }
2978
+ `;
2979
+ var HeadCellWrapper = import_styled_components15.default.th`
2980
+ font-size: var(--fontsize-medium-10);
2981
+ ${CellStyles}
2982
+
2983
+ div {
2984
+ color: var(--font-color-alpha-60);
2985
+ }
2986
+ `;
2987
+ var CellWrapper = import_styled_components15.default.td`
2988
+ ${CellStyles}
2989
+ `;
2990
+
2991
+ // src/table/index.tsx
2992
+ var Table = ({
2993
+ children,
2994
+ ...restProps
2995
+ }) => {
2996
+ return /* @__PURE__ */ import_react29.default.createElement(ScrollArea, { as: TableLayer, role: "presentation", tabIndex: -1 }, /* @__PURE__ */ import_react29.default.createElement(TableWrapper, { ...restProps, cellSpacing: "0", cellPadding: "0" }, children));
2997
+ };
2998
+ Table.displayName = "Table";
2999
+ var TableHead = ({
3000
+ children,
3001
+ ...restProps
3002
+ }) => {
3003
+ return /* @__PURE__ */ import_react29.default.createElement("thead", { ...restProps }, children);
3004
+ };
3005
+ TableHead.displayName = "Table.Head";
3006
+ var TableBody = ({
3007
+ children,
3008
+ ...restProps
3009
+ }) => {
3010
+ return /* @__PURE__ */ import_react29.default.createElement("tbody", { ...restProps }, children);
3011
+ };
3012
+ TableBody.displayName = "Table.Body";
3013
+ var TableHeadCell = ({
3014
+ children,
3015
+ ...restProps
3016
+ }) => {
3017
+ return /* @__PURE__ */ import_react29.default.createElement(HeadCellWrapper, { colSpan: 1, ...restProps }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex align-center g-medium-30" }, children));
3018
+ };
3019
+ TableHeadCell.displayName = "Table.HeadCell";
3020
+ var TableRow = ({ children, ...restProps }) => {
3021
+ return /* @__PURE__ */ import_react29.default.createElement(RowWrapper, { className: "p-medium-30", ...restProps }, children);
3022
+ };
3023
+ TableRow.displayName = "Table.Row";
3024
+ var TableCell = ({ children, ...restProps }) => {
3025
+ return /* @__PURE__ */ import_react29.default.createElement(CellWrapper, { ...restProps }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex align-center g-medium-30" }, children));
3026
+ };
3027
+ TableCell.displayName = "Table.Cell";
3028
+ var TableFooter = ({
3029
+ children,
3030
+ ...restProps
3031
+ }) => {
3032
+ return /* @__PURE__ */ import_react29.default.createElement("tfoot", { ...restProps }, children);
3033
+ };
3034
+ TableFooter.displayName = "Table.Footer";
3035
+ Table.Head = TableHead;
3036
+ Table.Body = TableBody;
3037
+ Table.HeadCell = TableHeadCell;
3038
+ Table.Row = TableRow;
3039
+ Table.Cell = TableCell;
3040
+ Table.Footer = TableFooter;
3041
+
3042
+ // src/tabs/index.tsx
3043
+ var import_react31 = __toESM(require("react"));
3044
+
3045
+ // src/tabs/hooks/index.tsx
3046
+ var import_react30 = __toESM(require("react"));
3047
+ var defaultComponentAPI7 = {
3048
+ id: "",
3049
+ states: {},
3050
+ methods: {}
3051
+ };
3052
+ var TabsContext = (0, import_react30.createContext)(defaultComponentAPI7);
3053
+ var useTabs = () => (0, import_react30.useContext)(TabsContext);
3054
+ var TabsProvider = ({ children }) => {
3055
+ const context = useTabsProvider();
3056
+ return /* @__PURE__ */ import_react30.default.createElement(TabsContext.Provider, { value: context }, children);
3057
+ };
3058
+ function useTabsProvider() {
3059
+ const [value, setValue] = (0, import_react30.useState)(null);
3060
+ const tabsId = import_react30.default.useId();
3061
+ return {
3062
+ id: tabsId,
3063
+ states: {
3064
+ value
3065
+ },
3066
+ methods: {
3067
+ applyValue: (value2) => setValue(value2),
3068
+ getTabsId: ({ value: value2, type }) => `${tabsId}-${type}-${value2}`
3069
+ }
3070
+ };
3071
+ }
3072
+
3073
+ // src/tabs/styles/index.ts
3074
+ var import_styled_components16 = __toESM(require("styled-components"));
3075
+ var TabWrapper = import_styled_components16.default.div`
3076
+ button {
3077
+ &[aria-selected="true"] {
3078
+ color: var(--font-color) !important;
3079
+ }
3080
+ }
3081
+ `;
3082
+
3083
+ // src/tabs/index.tsx
3084
+ var Tabs = (props) => {
3085
+ const { defaultOpen, children, ...restProps } = props;
3086
+ const { methods } = useTabs();
3087
+ const { applyValue } = methods;
3088
+ const childArray = import_react31.Children.toArray(children);
3089
+ const firstChild = childArray[0];
3090
+ import_react31.default.useEffect(() => {
3091
+ if (import_react31.default.isValidElement(firstChild)) {
3092
+ if (childArray.length > 0 && applyValue)
3093
+ applyValue(firstChild.props.value);
3094
+ }
3095
+ }, []);
3096
+ import_react31.default.useEffect(() => {
3097
+ if (defaultOpen && applyValue) applyValue(defaultOpen);
3098
+ }, []);
3099
+ return /* @__PURE__ */ import_react31.default.createElement(TabWrapper, { role: "tablist", ...restProps }, children);
3100
+ };
3101
+ Tabs.displayName = "Tabs";
3102
+ var TabsRoot = ({ children }) => {
3103
+ return /* @__PURE__ */ import_react31.default.createElement(TabsProvider, null, children);
3104
+ };
3105
+ TabsRoot.displayName = "Tabs.Root";
3106
+ var TabsTrigger = (props) => {
3107
+ const { value, onClick, children, ...restProps } = props;
3108
+ const { states, methods } = useTabs();
3109
+ const { applyValue, getTabsId } = methods;
3110
+ const hasSameValueAsContext = value === states.value;
3111
+ const IdHandler = {
3112
+ trigger: getTabsId && getTabsId({ value, type: "trigger" }),
3113
+ content: getTabsId && getTabsId({ value, type: "content" })
3114
+ };
3115
+ const handleClick = (event) => {
3116
+ if (applyValue) applyValue(value);
3117
+ if (onClick) onClick(event);
3118
+ };
3119
+ return /* @__PURE__ */ import_react31.default.createElement(
3120
+ Button,
3121
+ {
3122
+ type: "button",
3123
+ role: "tab",
3124
+ title: `${value}-tab`,
3125
+ id: String(IdHandler.trigger),
3126
+ value,
3127
+ onClick: handleClick,
3128
+ "aria-selected": hasSameValueAsContext,
3129
+ "data-controls": IdHandler.content,
3130
+ "data-state": hasSameValueAsContext ? "active" : "inactive",
3131
+ variant: props.variant ?? "ghost" /* Ghost */,
3132
+ ...restProps
3133
+ },
3134
+ children
3135
+ );
3136
+ };
3137
+ TabsTrigger.displayName = "Tabs.Trigger";
3138
+ var TabsContent = (props) => {
3139
+ const { value, children, ...restProps } = props;
3140
+ const { states, methods } = useTabs();
3141
+ const { getTabsId } = methods;
3142
+ const hasSameValueAsContext = value === states.value;
3143
+ const IdHandler = {
3144
+ trigger: getTabsId && getTabsId({ value, type: "trigger" }),
3145
+ content: getTabsId && getTabsId({ value, type: "content" })
3146
+ };
3147
+ return /* @__PURE__ */ import_react31.default.createElement(
3148
+ "div",
3149
+ {
3150
+ tabIndex: 0,
3151
+ role: "tabpanel",
3152
+ title: `${value}-tabpanel`,
3153
+ id: String(IdHandler.content),
3154
+ "data-value": value,
3155
+ "data-state": hasSameValueAsContext ? "active" : "inactive",
3156
+ "aria-labelledby": IdHandler.trigger ?? restProps["aria-labelledby"],
3157
+ ...restProps
3158
+ },
3159
+ hasSameValueAsContext && children
3160
+ );
3161
+ };
3162
+ TabsContent.displayName = "Tabs.Content";
3163
+ Tabs.Root = TabsRoot;
3164
+ Tabs.Trigger = TabsTrigger;
3165
+ Tabs.Content = TabsContent;
3166
+
3167
+ // src/toggle/index.tsx
3168
+ var import_react32 = __toESM(require("react"));
3169
+ var Toggle = (props) => {
3170
+ const { defaultChecked, onClick, disabled, children, ...restProps } = props;
3171
+ const [checked, setChecked] = import_react32.default.useState(
3172
+ defaultChecked ?? false
3173
+ );
3174
+ const handleClick = (event) => {
3175
+ if (onClick) onClick(event);
3176
+ if (!disabled) setChecked((prevChecked) => !prevChecked);
3177
+ };
3178
+ import_react32.default.useEffect(() => {
3179
+ if (defaultChecked !== void 0) {
3180
+ setChecked(Boolean(defaultChecked));
3181
+ }
3182
+ }, [defaultChecked]);
3183
+ return /* @__PURE__ */ import_react32.default.createElement(
3184
+ Button,
3185
+ {
3186
+ role: "switch",
3187
+ onClick: handleClick,
3188
+ value: String(checked),
3189
+ "aria-checked": checked,
3190
+ "data-checked": Boolean(checked),
3191
+ "data-disabled": Boolean(disabled),
3192
+ disabled,
3193
+ ...restProps
3194
+ },
3195
+ children
3196
+ );
3197
+ };
3198
+ Toggle.displayName = "Toggle";
3199
+
3200
+ // src/toolbar/index.tsx
3201
+ var import_react34 = __toESM(require("react"));
3202
+
3203
+ // src/toolbar/hooks/index.tsx
3204
+ var import_react33 = __toESM(require("react"));
3205
+ var defaultComponentAPI8 = {
3206
+ id: "",
3207
+ states: {},
3208
+ methods: {}
3209
+ };
3210
+ var ToolbarContext = (0, import_react33.createContext)(defaultComponentAPI8);
3211
+ var useToolbar = () => (0, import_react33.useContext)(ToolbarContext);
3212
+ var ToolbarProvider = ({ children }) => {
3213
+ const context = useToolbarProvider();
3214
+ return /* @__PURE__ */ import_react33.default.createElement(ToolbarContext.Provider, { value: context }, children);
3215
+ };
3216
+ function useToolbarProvider() {
3217
+ const [expanded, setExpanded] = (0, import_react33.useState)(false);
3218
+ const toolbarId = import_react33.default.useId();
3219
+ return {
3220
+ id: toolbarId,
3221
+ states: {
3222
+ expanded
3223
+ },
3224
+ methods: {
3225
+ toggleToolbar: (state) => setExpanded(state ?? !expanded)
3226
+ }
3227
+ };
3228
+ }
3229
+
3230
+ // src/toolbar/styles/index.ts
3231
+ var import_styled_components17 = __toESM(require("styled-components"));
3232
+ var ToolbarDefaultStyles = import_styled_components17.css`
3233
+ margin: 0;
3234
+ display: grid;
3235
+ grid-template-rows: min-content;
3236
+ background-color: var(--body-color);
3237
+ border: var(--measurement-small-10) solid transparent;
3238
+ padding: var(--measurement-medium-30);
3239
+ min-width: var(--measurement-large-30);
3240
+ min-height: fit-content;
3241
+
3242
+ &[aria-expanded="true"] {
3243
+ width: 100%;
3244
+
3245
+ &[aria-orientation="horizontal"] {
3246
+ height: 100%;
3247
+ width: 100%;
3248
+ }
3249
+
3250
+ menu {
3251
+ display: flex;
3252
+ }
3253
+ }
3254
+
3255
+ &[aria-expanded="false"] {
3256
+ width: fit-content;
3257
+ justify-items: center;
3258
+
3259
+ &[aria-orientation="horizontal"] {
3260
+ justify-items: start;
3261
+ height: fit-content;
3262
+ width: 100%;
3263
+ }
3264
+ }
3265
+ `;
3266
+ var ToolbarSizeStyles = import_styled_components17.css`
3267
+ &[data-size="small"] {
3268
+ &[aria-orientation="vertical"] {
3269
+ max-width: var(--measurement-large-70);
3270
+ }
3271
+ &[aria-orientation="horizontal"] {
3272
+ max-height: var(--measurement-large-70);
3273
+ }
3274
+ }
3275
+
3276
+ &[data-size="medium"] {
3277
+ &[aria-orientation="vertical"] {
3278
+ max-width: var(--measurement-large-80);
3279
+ }
3280
+ &[aria-orientation="horizontal"] {
3281
+ max-height: var(--measurement-large-80);
3282
+ }
3283
+ }
3284
+
3285
+ &[data-size="large"] {
3286
+ &[aria-orientation="vertical"] {
3287
+ max-width: var(--measurement-large-90);
3288
+ }
3289
+ &[aria-orientation="horizontal"] {
3290
+ max-height: var(--measurement-large-90);
3291
+ }
3292
+ }
3293
+
3294
+ &[data-height="display"] {
3295
+ &[aria-orientation="vertical"] {
3296
+ max-width: calc(var(--measurement-large-90) * 1.618);
3297
+ }
3298
+ &[aria-orientation="horizontal"] {
3299
+ max-height: calc(var(--measurement-large-90) * 1.618);
3300
+ }
3301
+ }
3302
+
3303
+ &[data-height="fullscreen"] {
3304
+ &[aria-orientation="vertical"] {
3305
+ max-width: 100dvw;
3306
+ }
3307
+ &[aria-orientation="horizontal"] {
3308
+ max-height: 100dvh;
3309
+ }
3310
+ }
3311
+ `;
3312
+ var ToolbarSideStyles = import_styled_components17.css`
3313
+ &[data-side="top"] {
3314
+ border-bottom-color: var(--font-color-alpha-10);
3315
+ }
3316
+ &[data-side="right"] {
3317
+ border-left-color: var(--font-color-alpha-10);
3318
+
3319
+ &[aria-expanded="true"] {
3320
+ menu {
3321
+ justify-content: flex-end;
3322
+ }
3323
+ }
3324
+ &[aria-expanded="false"] {
3325
+ justify-items: end;
3326
+ }
3327
+ }
3328
+ &[data-side="bottom"] {
3329
+ border-top-color: var(--font-color-alpha-10);
3330
+ }
3331
+ &[data-side="left"] {
3332
+ border-right-color: var(--font-color-alpha-10);
3333
+
3334
+ &[aria-expanded="true"] {
3335
+ menu {
3336
+ justify-content: flex-start;
3337
+ }
3338
+ }
3339
+ &[aria-expanded="false"] {
3340
+ justify-items: start;
3341
+ }
3342
+ }
3343
+ `;
3344
+ var ToolbarWrapper = import_styled_components17.default.menu`
3345
+ &[data-raw="false"] {
3346
+ ${ToolbarDefaultStyles}
3347
+ ${ToolbarSizeStyles}
3348
+
3349
+ ${ToolbarSideStyles}
3350
+ }
3351
+ `;
3352
+ var ToolbarTriggerWrapper = import_styled_components17.default.menu`
3353
+ &[data-raw="false"] {
3354
+ all: unset;
3355
+ align-self: flex-end;
3356
+ }
3357
+ `;
3358
+
3359
+ // src/toolbar/index.tsx
3360
+ var Toolbar = (props) => {
3361
+ const {
3362
+ shortcut,
3363
+ hotkey,
3364
+ bindkey = "ctrlKey" /* Ctrl */,
3365
+ raw,
3366
+ sizing = "medium" /* Medium */,
3367
+ side = "left" /* Left */,
3368
+ height = "fullscreen" /* Fullscreen */,
3369
+ defaultOpen,
3370
+ children,
3371
+ ...restProps
3372
+ } = props;
3373
+ const { id, methods, states } = useToolbar();
3374
+ const { toggleToolbar } = methods;
3375
+ const shortcutControls = useKeyPress(String(hotkey), true, bindkey);
3376
+ const orientation = side && ["left", "right"].includes(side) ? "vertical" : "horizontal";
3377
+ import_react34.default.useEffect(() => {
3378
+ if (defaultOpen && toggleToolbar) return toggleToolbar(true);
3379
+ }, [defaultOpen]);
3380
+ import_react34.default.useEffect(() => {
3381
+ if (shortcut && shortcutControls && toggleToolbar) toggleToolbar();
3382
+ }, [shortcutControls]);
3383
+ return /* @__PURE__ */ import_react34.default.createElement(
3384
+ ToolbarWrapper,
3385
+ {
3386
+ id,
3387
+ role: "toolbar",
3388
+ "aria-label": props["aria-label"] ?? `${id}-toolbar`,
3389
+ "aria-controls": `${id}-trigger`,
3390
+ "aria-expanded": Boolean(states.expanded),
3391
+ "aria-orientation": orientation,
3392
+ "data-raw": Boolean(raw),
3393
+ "data-size": sizing,
3394
+ "data-height": height,
3395
+ "data-side": side,
3396
+ ...restProps
3397
+ },
3398
+ children
3399
+ );
3400
+ };
3401
+ Toolbar.displayName = "Toolbar";
3402
+ var ToolbarRoot = ({ children }) => {
3403
+ return /* @__PURE__ */ import_react34.default.createElement(ToolbarProvider, null, children);
3404
+ };
3405
+ ToolbarRoot.displayName = "Toolbar.Root";
3406
+ var ToolbarTrigger = (props) => {
3407
+ const {
3408
+ raw,
3409
+ onClick,
3410
+ variant = "ghost" /* Ghost */,
3411
+ sizing = "small" /* Small */,
3412
+ children,
3413
+ ...restProps
3414
+ } = props;
3415
+ const { id, methods, states } = useToolbar();
3416
+ const { toggleToolbar } = methods;
3417
+ const handleClick = (event) => {
3418
+ if (onClick) onClick(event);
3419
+ if (toggleToolbar) toggleToolbar(!states.expanded);
3420
+ };
3421
+ return /* @__PURE__ */ import_react34.default.createElement(ToolbarTriggerWrapper, { "data-raw": Boolean(raw) }, /* @__PURE__ */ import_react34.default.createElement(
3422
+ Button,
3423
+ {
3424
+ id: `${id}-trigger`,
3425
+ variant,
3426
+ sizing,
3427
+ raw: Boolean(raw),
3428
+ onClick: handleClick,
3429
+ ...restProps
3430
+ },
3431
+ children
3432
+ ));
3433
+ };
3434
+ ToolbarTrigger.displayName = "Toolbar.Trigger";
3435
+ var ToolbarSection = (props) => {
3436
+ const { showoncollapse, children, ...restProps } = props;
3437
+ const { states } = useToolbar();
3438
+ const { expanded } = states;
3439
+ if (showoncollapse) return /* @__PURE__ */ import_react34.default.createElement("section", { ...restProps }, children);
3440
+ return /* @__PURE__ */ import_react34.default.createElement("section", { ...restProps }, expanded && children);
3441
+ };
3442
+ ToolbarSection.displayName = "Toolbar.Section";
3443
+ var ToolbarItem = (props) => {
3444
+ const { showfirstchild, onClick, children, ...restProps } = props;
3445
+ const childArray = import_react34.default.Children.toArray(children);
3446
+ const { id, states, methods } = useToolbar();
3447
+ const { expanded } = states;
3448
+ const { toggleToolbar } = methods;
3449
+ const displayFirstChild = showfirstchild && childArray.length > 1 && !expanded;
3450
+ const handleClick = (event) => {
3451
+ if (onClick) onClick(event);
3452
+ if (toggleToolbar && !expanded) toggleToolbar(true);
3453
+ };
3454
+ return /* @__PURE__ */ import_react34.default.createElement(
3455
+ "div",
3456
+ {
3457
+ tabIndex: -1,
3458
+ "aria-hidden": true,
3459
+ "aria-describedby": id,
3460
+ "data-expanded": expanded,
3461
+ onClick: handleClick,
3462
+ ...restProps
3463
+ },
3464
+ displayFirstChild && childArray[0],
3465
+ expanded && children
3466
+ );
3467
+ };
3468
+ ToolbarItem.displayName = "Toolbar.Item";
3469
+ Toolbar.Root = ToolbarRoot;
3470
+ Toolbar.Trigger = ToolbarTrigger;
3471
+ Toolbar.Item = ToolbarItem;
3472
+ Toolbar.Section = ToolbarSection;
3473
+
3474
+ // src/tooltip/index.tsx
3475
+ var import_react35 = __toESM(require("react"));
3476
+
3477
+ // src/tooltip/styles/index.ts
3478
+ var import_styled_components18 = __toESM(require("styled-components"));
3479
+ var FadeIn2 = import_styled_components18.keyframes`
3480
+ 0% {
3481
+ opacity: 0;
3482
+ }
3483
+ 100% {
3484
+ opacity: 1;
3485
+ }
3486
+ `;
3487
+ var ContentBox = import_styled_components18.default.div`
3488
+ display: inline-block;
3489
+ position: relative;
3490
+ `;
3491
+ var ContentWrapper2 = import_styled_components18.default.span`
3492
+ &[data-raw="false"] {
3493
+ width: fit-content;
3494
+ max-width: var(--measurement-large-60);
3495
+
3496
+ * {
3497
+ color: var(--body-color) !important;
3498
+ white-space: nowrap;
3499
+ text-overflow: ellipsis;
3500
+ overflow: hidden;
3501
+ }
3502
+
3503
+ background: var(--font-color);
3504
+ padding: var(--measurement-medium-10) var(--measurement-medium-30);
3505
+ border: var(--measurement-small-10) solid var(--font-color-alpha-10);
3506
+ border-radius: var(--measurement-medium-20);
3507
+ font-size: var(--fontsize-medium-10);
3508
+ z-index: var(--depth-default-100);
3509
+ animation-duration: 0.2s;
3510
+ animation-name: ${FadeIn2};
3511
+ animation-fill-mode: backwards;
3512
+ }
3513
+ `;
3514
+
3515
+ // src/tooltip/index.tsx
3516
+ var Tooltip = ({
3517
+ delay = 200,
3518
+ content,
3519
+ children,
3520
+ ...restProps
3521
+ }) => {
3522
+ const [visible, setVisible] = import_react35.default.useState(false);
3523
+ const [triggerProps, setTriggerProps] = import_react35.default.useState(null);
3524
+ const [contentProps, setContentProps] = import_react35.default.useState(null);
3525
+ const mounted = import_react35.default.useRef(false);
3526
+ const containerRef = import_react35.default.useRef(null);
3527
+ const contentRef = import_react35.default.useRef(null);
3528
+ const timeoutRef = import_react35.default.useRef(null);
3529
+ const contentRect = () => contentRef?.current?.getBoundingClientRect();
3530
+ const bodyRect = import_react35.default.useCallback(() => {
3531
+ if (typeof document !== "undefined") {
3532
+ return document.body.getBoundingClientRect();
3533
+ }
3534
+ }, []);
3535
+ const positions = {
3536
+ btt: `calc((${triggerProps?.top}px - ${contentProps?.height}px) - (var(--measurement-medium-10)))`,
3537
+ ttb: `calc((${triggerProps?.top}px + ${triggerProps?.height}px) + var(--measurement-medium-10))`,
3538
+ ltr: `${triggerProps?.left}px`,
3539
+ rtl: `calc(${triggerProps?.left}px - (${contentProps?.width}px - ${triggerProps?.width}px))`
3540
+ };
3541
+ const dimensions = {
3542
+ body_width: bodyRect()?.width,
3543
+ body_height: bodyRect()?.height,
3544
+ content_width: contentProps?.width,
3545
+ content_height: contentProps?.height,
3546
+ content_left: contentProps?.left,
3547
+ content_bottom: contentProps?.bottom
3548
+ };
3549
+ const hasEnoughHorizontalSpace = Number(dimensions.body_width) - Number(dimensions.content_left) > Number(dimensions.content_width) * 1.1;
3550
+ const hasEnoughVerticalSpace = Number(dimensions.body_height) - Number(dimensions.content_bottom) > Number(dimensions.content_height) * 0.9;
3551
+ const showTooltip = import_react35.default.useCallback(() => {
3552
+ timeoutRef.current = setTimeout(() => setVisible(true), delay);
3553
+ }, [delay]);
3554
+ const hideTooltip = import_react35.default.useCallback(() => {
3555
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
3556
+ setVisible(false);
3557
+ }, []);
3558
+ const handleMouseEnter = import_react35.default.useCallback(() => {
3559
+ const rect = containerRef.current?.getBoundingClientRect();
3560
+ if (rect) {
3561
+ setTriggerProps({
3562
+ top: rect.top,
3563
+ right: rect.right,
3564
+ bottom: rect.bottom,
3565
+ left: rect.left,
3566
+ width: rect.width,
3567
+ height: rect.height
3568
+ });
3569
+ showTooltip();
3570
+ }
3571
+ }, [showTooltip]);
3572
+ const handleMouseLeave = import_react35.default.useCallback(
3573
+ () => hideTooltip(),
3574
+ [hideTooltip]
3575
+ );
3576
+ import_react35.default.useEffect(() => {
3577
+ mounted.current = true;
3578
+ setContentProps && setContentProps({
3579
+ top: Number(contentRect()?.top),
3580
+ right: Number(contentRect()?.right),
3581
+ bottom: Number(contentRect()?.bottom),
3582
+ left: Number(contentRect()?.left),
3583
+ width: Number(contentRect()?.width),
3584
+ height: Number(contentRect()?.height)
3585
+ });
3586
+ return () => {
3587
+ mounted.current = false;
3588
+ };
3589
+ }, [visible]);
3590
+ return /* @__PURE__ */ import_react35.default.createElement(
3591
+ ContentBox,
3592
+ {
3593
+ ref: containerRef,
3594
+ style: { display: "inline-block", position: "relative" },
3595
+ onMouseEnter: handleMouseEnter,
3596
+ onMouseLeave: handleMouseLeave,
3597
+ ...restProps
3598
+ },
3599
+ children,
3600
+ visible && /* @__PURE__ */ import_react35.default.createElement(
3601
+ ContentWrapper2,
3602
+ {
3603
+ ref: contentRef,
3604
+ style: {
3605
+ top: hasEnoughVerticalSpace ? positions.ttb : positions.btt,
3606
+ left: hasEnoughHorizontalSpace ? positions.ltr : positions.rtl,
3607
+ position: "fixed"
3608
+ },
3609
+ role: "tooltip",
3610
+ "data-state": applyDataState(visible),
3611
+ "data-raw": Boolean(restProps.raw),
3612
+ "data-side": hasEnoughHorizontalSpace ? "left" /* Left */ : "right" /* Right */,
3613
+ "data-align": hasEnoughHorizontalSpace ? "left" /* Left */ : "right" /* Right */
3614
+ },
3615
+ /* @__PURE__ */ import_react35.default.createElement("div", null, content)
3616
+ )
3617
+ );
3618
+ };
3619
+ Tooltip.displayName = "Tooltip";
3620
+ // Annotate the CommonJS export names for ESM import in node:
3621
+ 0 && (module.exports = {
3622
+ Accordion,
3623
+ AccordionContent,
3624
+ AccordionRoot,
3625
+ AccordionTrigger,
3626
+ AvataStatusEnum,
3627
+ Avatar,
3628
+ Badge,
3629
+ Button,
3630
+ Checkbox,
3631
+ CheckboxIndicator,
3632
+ CheckboxRoot,
3633
+ Collapsible,
3634
+ CollapsibleContent,
3635
+ CollapsibleRoot,
3636
+ CollapsibleTrigger,
3637
+ Dialog,
3638
+ DialogControl,
3639
+ DialogMenu,
3640
+ DialogOverlay,
3641
+ DialogRoot,
3642
+ DialogTrigger,
3643
+ Divider,
3644
+ DropdownMenu,
3645
+ DropdownMenuContent,
3646
+ DropdownMenuItem,
3647
+ DropdownMenuRoot,
3648
+ DropdownMenuTrigger,
3649
+ Field,
3650
+ FieldLabel,
3651
+ FieldMeta,
3652
+ FieldRoot,
3653
+ FieldWrapper,
3654
+ MetaVariantEnum,
3655
+ OTPField,
3656
+ OTPFieldSlot,
3657
+ Overlay,
3658
+ Page,
3659
+ PageContent,
3660
+ PageMenu,
3661
+ PageNavigation,
3662
+ PagePanel,
3663
+ PageTools,
3664
+ PageWrapper,
3665
+ Portal,
3666
+ ScrollArea,
3667
+ Sheet,
3668
+ SheetRoot,
3669
+ SheetTrigger,
3670
+ Switch,
3671
+ SwitchRoot,
3672
+ SwitchThumb,
3673
+ Table,
3674
+ TableBody,
3675
+ TableCell,
3676
+ TableFooter,
3677
+ TableHead,
3678
+ TableHeadCell,
3679
+ TableRow,
3680
+ Tabs,
3681
+ TabsContent,
3682
+ TabsRoot,
3683
+ TabsTrigger,
3684
+ Toggle,
3685
+ Toolbar,
3686
+ ToolbarItem,
3687
+ ToolbarRoot,
3688
+ ToolbarSection,
3689
+ ToolbarTrigger,
3690
+ Tooltip,
3691
+ useAccordion,
3692
+ useCheckbox,
3693
+ useCollapsible,
3694
+ useDialog,
3695
+ useDropdownMenu,
3696
+ useField,
3697
+ useSheet,
3698
+ useSwitch,
3699
+ useTabs,
3700
+ useToolbar
3701
+ });