@mieweb/ui 0.6.1-dev.125 → 0.6.1-dev.131

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 (144) hide show
  1. package/dist/brands/index.cjs +12 -12
  2. package/dist/brands/index.js +3 -3
  3. package/dist/{chunk-MPOWJVV4.js → chunk-3OHVUXDG.js} +3 -3
  4. package/dist/{chunk-MPOWJVV4.js.map → chunk-3OHVUXDG.js.map} +1 -1
  5. package/dist/chunk-44CK4CT2.cjs +336 -0
  6. package/dist/chunk-44CK4CT2.cjs.map +1 -0
  7. package/dist/chunk-4LVPQ44A.js +228 -0
  8. package/dist/chunk-4LVPQ44A.js.map +1 -0
  9. package/dist/chunk-7XUN3OQT.js +3 -0
  10. package/dist/{chunk-V2DF2GUE.js.map → chunk-7XUN3OQT.js.map} +1 -1
  11. package/dist/chunk-AEGYWRSL.js +513 -0
  12. package/dist/chunk-AEGYWRSL.js.map +1 -0
  13. package/dist/chunk-AFKKJEV5.cjs +72 -0
  14. package/dist/chunk-AFKKJEV5.cjs.map +1 -0
  15. package/dist/chunk-AT732HC6.cjs +4 -0
  16. package/dist/{chunk-74K3RRU7.cjs.map → chunk-AT732HC6.cjs.map} +1 -1
  17. package/dist/chunk-BIT27PPD.js +49 -0
  18. package/dist/chunk-BIT27PPD.js.map +1 -0
  19. package/dist/chunk-BT3ZQJGT.cjs +130 -0
  20. package/dist/chunk-BT3ZQJGT.cjs.map +1 -0
  21. package/dist/chunk-BX6BTDTR.js +34 -0
  22. package/dist/chunk-BX6BTDTR.js.map +1 -0
  23. package/dist/chunk-C2544GKZ.js +313 -0
  24. package/dist/chunk-C2544GKZ.js.map +1 -0
  25. package/dist/chunk-C7RVKV25.cjs +25 -0
  26. package/dist/chunk-C7RVKV25.cjs.map +1 -0
  27. package/dist/{chunk-CV4CVGLO.cjs → chunk-DFT7TYKL.cjs} +3 -3
  28. package/dist/{chunk-CV4CVGLO.cjs.map → chunk-DFT7TYKL.cjs.map} +1 -1
  29. package/dist/chunk-DLNJLCNO.cjs +101 -0
  30. package/dist/chunk-DLNJLCNO.cjs.map +1 -0
  31. package/dist/chunk-DUPR6FEL.js +43 -0
  32. package/dist/chunk-DUPR6FEL.js.map +1 -0
  33. package/dist/chunk-EJUPJGKA.js +78 -0
  34. package/dist/chunk-EJUPJGKA.js.map +1 -0
  35. package/dist/chunk-ERLPVXOV.js +22 -0
  36. package/dist/chunk-ERLPVXOV.js.map +1 -0
  37. package/dist/chunk-KJ5BSGEO.cjs +258 -0
  38. package/dist/chunk-KJ5BSGEO.cjs.map +1 -0
  39. package/dist/chunk-MARLXJQO.cjs +537 -0
  40. package/dist/chunk-MARLXJQO.cjs.map +1 -0
  41. package/dist/{chunk-WFS6R2F5.js → chunk-OVQKCUTZ.js} +3 -3
  42. package/dist/{chunk-WFS6R2F5.js.map → chunk-OVQKCUTZ.js.map} +1 -1
  43. package/dist/chunk-OXYFTCRW.cjs +57 -0
  44. package/dist/chunk-OXYFTCRW.cjs.map +1 -0
  45. package/dist/chunk-PI3KOYAT.js +192 -0
  46. package/dist/chunk-PI3KOYAT.js.map +1 -0
  47. package/dist/chunk-QKAPKIXI.cjs +80 -0
  48. package/dist/chunk-QKAPKIXI.cjs.map +1 -0
  49. package/dist/{chunk-MV337VA7.js → chunk-R6PBBPU3.js} +2 -2
  50. package/dist/{chunk-MV337VA7.js.map → chunk-R6PBBPU3.js.map} +1 -1
  51. package/dist/chunk-ROXYP3BZ.cjs +214 -0
  52. package/dist/chunk-ROXYP3BZ.cjs.map +1 -0
  53. package/dist/chunk-T3C4RNJ4.js +106 -0
  54. package/dist/chunk-T3C4RNJ4.js.map +1 -0
  55. package/dist/{chunk-7BARESXI.cjs → chunk-ULF4PWHW.cjs} +3 -3
  56. package/dist/{chunk-7BARESXI.cjs.map → chunk-ULF4PWHW.cjs.map} +1 -1
  57. package/dist/chunk-UOOH356R.cjs +66 -0
  58. package/dist/chunk-UOOH356R.cjs.map +1 -0
  59. package/dist/chunk-Y2S6QMKU.js +78 -0
  60. package/dist/chunk-Y2S6QMKU.js.map +1 -0
  61. package/dist/{chunk-JLQTPLSY.cjs → chunk-Z6NRP4Z5.cjs} +2 -2
  62. package/dist/{chunk-JLQTPLSY.cjs.map → chunk-Z6NRP4Z5.cjs.map} +1 -1
  63. package/dist/components/AlertDialog/index.cjs +18 -0
  64. package/dist/components/AlertDialog/index.cjs.map +1 -0
  65. package/dist/components/AlertDialog/index.d.cts +56 -0
  66. package/dist/components/AlertDialog/index.d.ts +56 -0
  67. package/dist/components/AlertDialog/index.js +9 -0
  68. package/dist/components/AlertDialog/index.js.map +1 -0
  69. package/dist/components/Autocomplete/index.cjs +15 -0
  70. package/dist/components/Autocomplete/index.cjs.map +1 -0
  71. package/dist/components/Autocomplete/index.d.cts +77 -0
  72. package/dist/components/Autocomplete/index.d.ts +77 -0
  73. package/dist/components/Autocomplete/index.js +6 -0
  74. package/dist/components/Autocomplete/index.js.map +1 -0
  75. package/dist/components/Collapsible/index.cjs +21 -0
  76. package/dist/components/Collapsible/index.cjs.map +1 -0
  77. package/dist/components/Collapsible/index.d.cts +33 -0
  78. package/dist/components/Collapsible/index.d.ts +33 -0
  79. package/dist/components/Collapsible/index.js +4 -0
  80. package/dist/components/Collapsible/index.js.map +1 -0
  81. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  82. package/dist/components/CountryCodeDropdown/index.js +2 -2
  83. package/dist/components/Dropdown/index.cjs +8 -8
  84. package/dist/components/Dropdown/index.js +2 -2
  85. package/dist/components/FloatingWindow/index.cjs +18 -0
  86. package/dist/components/FloatingWindow/index.cjs.map +1 -0
  87. package/dist/components/FloatingWindow/index.d.cts +64 -0
  88. package/dist/components/FloatingWindow/index.d.ts +64 -0
  89. package/dist/components/FloatingWindow/index.js +5 -0
  90. package/dist/components/FloatingWindow/index.js.map +1 -0
  91. package/dist/components/Label/index.cjs +17 -0
  92. package/dist/components/Label/index.cjs.map +1 -0
  93. package/dist/components/Label/index.d.cts +23 -0
  94. package/dist/components/Label/index.d.ts +23 -0
  95. package/dist/components/Label/index.js +4 -0
  96. package/dist/components/Label/index.js.map +1 -0
  97. package/dist/components/RichTextEditor/index.cjs +32 -0
  98. package/dist/components/RichTextEditor/index.cjs.map +1 -0
  99. package/dist/components/RichTextEditor/index.d.cts +62 -0
  100. package/dist/components/RichTextEditor/index.d.ts +62 -0
  101. package/dist/components/RichTextEditor/index.js +11 -0
  102. package/dist/components/RichTextEditor/index.js.map +1 -0
  103. package/dist/components/ScrollArea/index.cjs +17 -0
  104. package/dist/components/ScrollArea/index.cjs.map +1 -0
  105. package/dist/components/ScrollArea/index.d.cts +22 -0
  106. package/dist/components/ScrollArea/index.d.ts +22 -0
  107. package/dist/components/ScrollArea/index.js +4 -0
  108. package/dist/components/ScrollArea/index.js.map +1 -0
  109. package/dist/components/Separator/index.cjs +17 -0
  110. package/dist/components/Separator/index.cjs.map +1 -0
  111. package/dist/components/Separator/index.d.cts +27 -0
  112. package/dist/components/Separator/index.d.ts +27 -0
  113. package/dist/components/Separator/index.js +4 -0
  114. package/dist/components/Separator/index.js.map +1 -0
  115. package/dist/components/Sheet/index.cjs +48 -0
  116. package/dist/components/Sheet/index.cjs.map +1 -0
  117. package/dist/components/Sheet/index.d.cts +62 -0
  118. package/dist/components/Sheet/index.d.ts +62 -0
  119. package/dist/components/Sheet/index.js +7 -0
  120. package/dist/components/Sheet/index.js.map +1 -0
  121. package/dist/components/Toggle/index.cjs +17 -0
  122. package/dist/components/Toggle/index.cjs.map +1 -0
  123. package/dist/components/Toggle/index.d.cts +28 -0
  124. package/dist/components/Toggle/index.d.ts +28 -0
  125. package/dist/components/Toggle/index.js +4 -0
  126. package/dist/components/Toggle/index.js.map +1 -0
  127. package/dist/hooks/index.cjs +5 -5
  128. package/dist/hooks/index.js +1 -1
  129. package/dist/html-MdxqSzjD.d.cts +13 -0
  130. package/dist/html-MdxqSzjD.d.ts +13 -0
  131. package/dist/index.cjs +352 -225
  132. package/dist/index.cjs.map +1 -1
  133. package/dist/index.d.cts +11 -0
  134. package/dist/index.d.ts +11 -0
  135. package/dist/index.js +43 -32
  136. package/dist/index.js.map +1 -1
  137. package/dist/styles.css +1 -1
  138. package/dist/utils/index.cjs +27 -18
  139. package/dist/utils/index.d.cts +1 -0
  140. package/dist/utils/index.d.ts +1 -0
  141. package/dist/utils/index.js +3 -2
  142. package/package.json +2 -2
  143. package/dist/chunk-74K3RRU7.cjs +0 -4
  144. package/dist/chunk-V2DF2GUE.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ScrollArea/ScrollArea.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,kBAAA,GAAqBA,0BAAA;AAAA,EACzB;AAAA,IACE,wBAAA;AAAA;AAAA,IAEA,wBAAA;AAAA,IACA,kDAAA;AAAA,IACA,uDAAA;AAAA,IACA,6CAAA;AAAA,IACA,2CAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,mCAAA;AAAA,QACV,UAAA,EAAY,mCAAA;AAAA,QACZ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAkBA,IAAM,UAAA,GAAmBC,gBAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,UAAU,GAAG,KAAA,IAAS,GAAA,qBAC/CC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,WAAWC,oBAAA,CAAG,kBAAA,CAAmB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AAGA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-AFKKJEV5.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst scrollAreaVariants = cva(\n [\n 'relative overflow-auto',\n // Thin, theme-aware scrollbars\n '[scrollbar-width:thin]',\n '[scrollbar-color:hsl(var(--border))_transparent]',\n '[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-border',\n 'hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/40',\n ],\n {\n variants: {\n orientation: {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nexport interface ScrollAreaProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof scrollAreaVariants> {}\n\n/**\n * A scrollable container with consistent, theme-aware scrollbar styling.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-64\">\n * <LongContent />\n * </ScrollArea>\n * ```\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, orientation, children, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"scroll-area\"\n role=\"region\"\n tabIndex={0}\n className={cn(scrollAreaVariants({ orientation }), className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n/* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n\nScrollArea.displayName = 'ScrollArea';\n\nexport { ScrollArea, scrollAreaVariants };\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-AT732HC6.cjs.map
4
+ //# sourceMappingURL=chunk-AT732HC6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-74K3RRU7.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-AT732HC6.cjs"}
@@ -0,0 +1,49 @@
1
+ import { cn } from './chunk-F3SOEIN2.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var scrollAreaVariants = cva(
7
+ [
8
+ "relative overflow-auto",
9
+ // Thin, theme-aware scrollbars
10
+ "[scrollbar-width:thin]",
11
+ "[scrollbar-color:hsl(var(--border))_transparent]",
12
+ "[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2",
13
+ "[&::-webkit-scrollbar-track]:bg-transparent",
14
+ "[&::-webkit-scrollbar-thumb]:rounded-full",
15
+ "[&::-webkit-scrollbar-thumb]:bg-border",
16
+ "hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/40"
17
+ ],
18
+ {
19
+ variants: {
20
+ orientation: {
21
+ vertical: "overflow-x-hidden overflow-y-auto",
22
+ horizontal: "overflow-x-auto overflow-y-hidden",
23
+ both: "overflow-auto"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ orientation: "vertical"
28
+ }
29
+ }
30
+ );
31
+ var ScrollArea = React.forwardRef(
32
+ ({ className, orientation, children, ...props }, ref) => /* @__PURE__ */ jsx(
33
+ "div",
34
+ {
35
+ ref,
36
+ "data-slot": "scroll-area",
37
+ role: "region",
38
+ tabIndex: 0,
39
+ className: cn(scrollAreaVariants({ orientation }), className),
40
+ ...props,
41
+ children
42
+ }
43
+ )
44
+ );
45
+ ScrollArea.displayName = "ScrollArea";
46
+
47
+ export { ScrollArea, scrollAreaVariants };
48
+ //# sourceMappingURL=chunk-BIT27PPD.js.map
49
+ //# sourceMappingURL=chunk-BIT27PPD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ScrollArea/ScrollArea.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,kBAAA,GAAqB,GAAA;AAAA,EACzB;AAAA,IACE,wBAAA;AAAA;AAAA,IAEA,wBAAA;AAAA,IACA,kDAAA;AAAA,IACA,uDAAA;AAAA,IACA,6CAAA;AAAA,IACA,2CAAA;AAAA,IACA,wCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,WAAA,EAAa;AAAA,QACX,QAAA,EAAU,mCAAA;AAAA,QACV,UAAA,EAAY,mCAAA;AAAA,QACZ,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,WAAA,EAAa;AAAA;AACf;AAEJ;AAkBA,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,UAAU,GAAG,KAAA,IAAS,GAAA,qBAC/C,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC3D,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA;AAGP;AAGA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-BIT27PPD.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst scrollAreaVariants = cva(\n [\n 'relative overflow-auto',\n // Thin, theme-aware scrollbars\n '[scrollbar-width:thin]',\n '[scrollbar-color:hsl(var(--border))_transparent]',\n '[&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar]:h-2',\n '[&::-webkit-scrollbar-track]:bg-transparent',\n '[&::-webkit-scrollbar-thumb]:rounded-full',\n '[&::-webkit-scrollbar-thumb]:bg-border',\n 'hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/40',\n ],\n {\n variants: {\n orientation: {\n vertical: 'overflow-x-hidden overflow-y-auto',\n horizontal: 'overflow-x-auto overflow-y-hidden',\n both: 'overflow-auto',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n }\n);\n\nexport interface ScrollAreaProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof scrollAreaVariants> {}\n\n/**\n * A scrollable container with consistent, theme-aware scrollbar styling.\n *\n * @example\n * ```tsx\n * <ScrollArea className=\"h-64\">\n * <LongContent />\n * </ScrollArea>\n * ```\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, orientation, children, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"scroll-area\"\n role=\"region\"\n tabIndex={0}\n className={cn(scrollAreaVariants({ orientation }), className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n/* eslint-enable jsx-a11y/no-noninteractive-tabindex */\n\nScrollArea.displayName = 'ScrollArea';\n\nexport { ScrollArea, scrollAreaVariants };\n"]}
@@ -0,0 +1,130 @@
1
+ 'use strict';
2
+
3
+ var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
4
+ var React = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ var CollapsibleContext = React__namespace.createContext(
28
+ null
29
+ );
30
+ function useCollapsibleContext(component) {
31
+ const ctx = React__namespace.useContext(CollapsibleContext);
32
+ if (!ctx) {
33
+ throw new Error(`${component} must be used within a <Collapsible>`);
34
+ }
35
+ return ctx;
36
+ }
37
+ var Collapsible = React__namespace.forwardRef(
38
+ ({
39
+ className,
40
+ open: controlledOpen,
41
+ defaultOpen = false,
42
+ onOpenChange,
43
+ disabled,
44
+ children,
45
+ ...props
46
+ }, ref) => {
47
+ const [uncontrolledOpen, setUncontrolledOpen] = React__namespace.useState(defaultOpen);
48
+ const generatedId = React__namespace.useId();
49
+ const isControlled = controlledOpen !== void 0;
50
+ const open = isControlled ? controlledOpen : uncontrolledOpen;
51
+ const toggle = React__namespace.useCallback(() => {
52
+ if (disabled) return;
53
+ const next = !open;
54
+ if (!isControlled) setUncontrolledOpen(next);
55
+ onOpenChange?.(next);
56
+ }, [disabled, open, isControlled, onOpenChange]);
57
+ const value = React__namespace.useMemo(
58
+ () => ({
59
+ open,
60
+ toggle,
61
+ disabled,
62
+ contentId: `${generatedId}-content`,
63
+ triggerId: `${generatedId}-trigger`
64
+ }),
65
+ [open, toggle, disabled, generatedId]
66
+ );
67
+ return /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(
68
+ "div",
69
+ {
70
+ ref,
71
+ "data-slot": "collapsible",
72
+ "data-state": open ? "open" : "closed",
73
+ className: chunkOR5DRJCW_cjs.cn(className),
74
+ ...props,
75
+ children
76
+ }
77
+ ) });
78
+ }
79
+ );
80
+ Collapsible.displayName = "Collapsible";
81
+ var CollapsibleTrigger = React__namespace.forwardRef(({ className, onClick, children, ...props }, ref) => {
82
+ const { open, toggle, disabled, contentId, triggerId } = useCollapsibleContext("CollapsibleTrigger");
83
+ return /* @__PURE__ */ jsxRuntime.jsx(
84
+ "button",
85
+ {
86
+ ref,
87
+ type: "button",
88
+ id: triggerId,
89
+ "data-slot": "collapsible-trigger",
90
+ "aria-expanded": open,
91
+ "aria-controls": contentId,
92
+ "data-state": open ? "open" : "closed",
93
+ disabled,
94
+ onClick: (e) => {
95
+ toggle();
96
+ onClick?.(e);
97
+ },
98
+ className: chunkOR5DRJCW_cjs.cn(className),
99
+ ...props,
100
+ children
101
+ }
102
+ );
103
+ });
104
+ CollapsibleTrigger.displayName = "CollapsibleTrigger";
105
+ var CollapsibleContent = React__namespace.forwardRef(({ className, forceMount, children, ...props }, ref) => {
106
+ const { open, contentId, triggerId } = useCollapsibleContext("CollapsibleContent");
107
+ if (!open && !forceMount) return null;
108
+ return /* @__PURE__ */ jsxRuntime.jsx(
109
+ "div",
110
+ {
111
+ ref,
112
+ id: contentId,
113
+ role: "region",
114
+ "aria-labelledby": triggerId,
115
+ "data-slot": "collapsible-content",
116
+ "data-state": open ? "open" : "closed",
117
+ hidden: !open,
118
+ className: chunkOR5DRJCW_cjs.cn(className),
119
+ ...props,
120
+ children
121
+ }
122
+ );
123
+ });
124
+ CollapsibleContent.displayName = "CollapsibleContent";
125
+
126
+ exports.Collapsible = Collapsible;
127
+ exports.CollapsibleContent = CollapsibleContent;
128
+ exports.CollapsibleTrigger = CollapsibleTrigger;
129
+ //# sourceMappingURL=chunk-BT3ZQJGT.cjs.map
130
+ //# sourceMappingURL=chunk-BT3ZQJGT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Collapsible/Collapsible.tsx"],"names":["React","jsx","cn"],"mappings":"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","file":"chunk-BT3ZQJGT.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\n\ninterface CollapsibleContextValue {\n open: boolean;\n toggle: () => void;\n disabled?: boolean;\n contentId: string;\n triggerId: string;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null\n);\n\nfunction useCollapsibleContext(component: string): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext);\n if (!ctx) {\n throw new Error(`${component} must be used within a <Collapsible>`);\n }\n return ctx;\n}\n\nexport interface CollapsibleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled open state */\n open?: boolean;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Callback fired when the open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Disables toggling */\n disabled?: boolean;\n}\n\n/**\n * An interactive component that expands and collapses its content.\n *\n * @example\n * ```tsx\n * <Collapsible>\n * <CollapsibleTrigger>Toggle</CollapsibleTrigger>\n * <CollapsibleContent>Hidden content</CollapsibleContent>\n * </Collapsible>\n * ```\n */\nconst Collapsible = React.forwardRef<HTMLDivElement, CollapsibleProps>(\n (\n {\n className,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const generatedId = React.useId();\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const toggle = React.useCallback(() => {\n if (disabled) return;\n const next = !open;\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n }, [disabled, open, isControlled, onOpenChange]);\n\n const value = React.useMemo<CollapsibleContextValue>(\n () => ({\n open,\n toggle,\n disabled,\n contentId: `${generatedId}-content`,\n triggerId: `${generatedId}-trigger`,\n }),\n [open, toggle, disabled, generatedId]\n );\n\n return (\n <CollapsibleContext.Provider value={value}>\n <div\n ref={ref}\n data-slot=\"collapsible\"\n data-state={open ? 'open' : 'closed'}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n }\n);\n\nCollapsible.displayName = 'Collapsible';\n\nexport type CollapsibleTriggerProps =\n React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n CollapsibleTriggerProps\n>(({ className, onClick, children, ...props }, ref) => {\n const { open, toggle, disabled, contentId, triggerId } =\n useCollapsibleContext('CollapsibleTrigger');\n\n return (\n <button\n ref={ref}\n type=\"button\"\n id={triggerId}\n data-slot=\"collapsible-trigger\"\n aria-expanded={open}\n aria-controls={contentId}\n data-state={open ? 'open' : 'closed'}\n disabled={disabled}\n onClick={(e) => {\n toggle();\n onClick?.(e);\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </button>\n );\n});\n\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\nexport interface CollapsibleContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Keep content mounted when collapsed (hidden via CSS) */\n forceMount?: boolean;\n}\n\nconst CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n CollapsibleContentProps\n>(({ className, forceMount, children, ...props }, ref) => {\n const { open, contentId, triggerId } =\n useCollapsibleContext('CollapsibleContent');\n\n if (!open && !forceMount) return null;\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n data-slot=\"collapsible-content\"\n data-state={open ? 'open' : 'closed'}\n hidden={!open}\n className={cn(className)}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nCollapsibleContent.displayName = 'CollapsibleContent';\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"]}
@@ -0,0 +1,34 @@
1
+ import { cn } from './chunk-F3SOEIN2.js';
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var separatorVariants = cva("shrink-0 bg-border", {
7
+ variants: {
8
+ orientation: {
9
+ horizontal: "h-px w-full",
10
+ vertical: "h-full w-px"
11
+ }
12
+ },
13
+ defaultVariants: {
14
+ orientation: "horizontal"
15
+ }
16
+ });
17
+ var Separator = React.forwardRef(
18
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ ref,
22
+ "data-slot": "separator",
23
+ role: decorative ? "none" : "separator",
24
+ "aria-orientation": decorative ? void 0 : orientation ?? "horizontal",
25
+ className: cn(separatorVariants({ orientation }), className),
26
+ ...props
27
+ }
28
+ )
29
+ );
30
+ Separator.displayName = "Separator";
31
+
32
+ export { Separator, separatorVariants };
33
+ //# sourceMappingURL=chunk-BX6BTDTR.js.map
34
+ //# sourceMappingURL=chunk-BX6BTDTR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,iBAAA,GAAoB,IAAI,oBAAA,EAAsB;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC;AAuBD,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,aAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,aAAa,MAAA,GAAS,WAAA;AAAA,MAC5B,kBAAA,EAAkB,UAAA,GAAa,MAAA,GAAa,WAAA,IAAe,YAAA;AAAA,MAC3D,WAAW,EAAA,CAAG,iBAAA,CAAkB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-BX6BTDTR.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst separatorVariants = cva('shrink-0 bg-border', {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport interface SeparatorProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n /**\n * Whether the separator is purely decorative. When `true` (default) the\n * separator is hidden from assistive technologies. Set to `false` when the\n * separator conveys meaningful structure.\n */\n decorative?: boolean;\n}\n\n/**\n * A visual or semantic divider between content.\n *\n * @example\n * ```tsx\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n data-slot=\"separator\"\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : (orientation ?? 'horizontal')}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n);\n\nSeparator.displayName = 'Separator';\n\nexport { Separator, separatorVariants };\n"]}
@@ -0,0 +1,313 @@
1
+ import { Button } from './chunk-ZVSW2KS6.js';
2
+ import { cn } from './chunk-F3SOEIN2.js';
3
+ import * as React from 'react';
4
+ import { Minus, ExternalLink, X, Square } from 'lucide-react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var RESIZE_HANDLES = [
8
+ { dir: "nw", className: "top-0 left-0 h-2 w-2 cursor-nw-resize" },
9
+ { dir: "ne", className: "top-0 right-0 h-2 w-2 cursor-ne-resize" },
10
+ { dir: "sw", className: "bottom-0 left-0 h-2 w-2 cursor-sw-resize" },
11
+ { dir: "n", className: "top-0 left-2 right-2 h-1 cursor-n-resize" },
12
+ { dir: "s", className: "bottom-0 left-2 right-2 h-1 cursor-s-resize" },
13
+ { dir: "w", className: "left-0 top-2 bottom-2 w-1 cursor-w-resize" },
14
+ { dir: "e", className: "right-0 top-2 bottom-2 w-1 cursor-e-resize" }
15
+ ];
16
+ var FloatingWindow = React.forwardRef(
17
+ ({
18
+ open,
19
+ minimized = false,
20
+ title,
21
+ children,
22
+ footer,
23
+ onClose,
24
+ onMinimize,
25
+ onPopOut,
26
+ draggable = false,
27
+ resizable = true,
28
+ defaultWidth = 1024,
29
+ defaultHeight = 600,
30
+ minWidth = 600,
31
+ minHeight = 400,
32
+ className,
33
+ "aria-label": ariaLabel
34
+ }, ref) => {
35
+ const [size, setSize] = React.useState({
36
+ width: defaultWidth,
37
+ height: defaultHeight
38
+ });
39
+ const [position, setPosition] = React.useState({ x: 50, y: 50 });
40
+ const dragRef = React.useRef(null);
41
+ const resizeRef = React.useRef(null);
42
+ const titleId = React.useId();
43
+ const handleResizeStart = (e, dir) => {
44
+ e.preventDefault();
45
+ e.stopPropagation();
46
+ resizeRef.current = {
47
+ dir,
48
+ startX: e.clientX,
49
+ startY: e.clientY,
50
+ startW: size.width,
51
+ startH: size.height,
52
+ startPosX: position.x,
53
+ startPosY: position.y
54
+ };
55
+ };
56
+ const handleDragStart = (e) => {
57
+ if (!draggable) return;
58
+ if (e.target.closest("[data-window-controls]")) return;
59
+ const rect = e.currentTarget.closest('[data-slot="floating-window"]').getBoundingClientRect();
60
+ dragRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };
61
+ };
62
+ React.useEffect(() => {
63
+ if (!open || minimized) return;
64
+ const handleMouseMove = (e) => {
65
+ if (dragRef.current) {
66
+ setPosition({
67
+ x: e.clientX - dragRef.current.x,
68
+ y: e.clientY - dragRef.current.y
69
+ });
70
+ return;
71
+ }
72
+ const r = resizeRef.current;
73
+ if (!r) return;
74
+ const deltaX = e.clientX - r.startX;
75
+ const deltaY = e.clientY - r.startY;
76
+ let newWidth = r.startW;
77
+ let newHeight = r.startH;
78
+ let newX = r.startPosX;
79
+ let newY = r.startPosY;
80
+ if (r.dir.includes("e")) {
81
+ newWidth = Math.max(
82
+ minWidth,
83
+ Math.min(window.innerWidth - 40, r.startW + deltaX)
84
+ );
85
+ }
86
+ if (r.dir.includes("w")) {
87
+ newWidth = Math.max(minWidth, r.startW - deltaX);
88
+ if (draggable) newX = r.startPosX + (r.startW - newWidth);
89
+ }
90
+ if (r.dir.includes("s")) {
91
+ newHeight = Math.max(
92
+ minHeight,
93
+ Math.min(window.innerHeight - 40, r.startH + deltaY)
94
+ );
95
+ }
96
+ if (r.dir.includes("n")) {
97
+ newHeight = Math.max(minHeight, r.startH - deltaY);
98
+ if (draggable) newY = r.startPosY + (r.startH - newHeight);
99
+ }
100
+ setSize({ width: newWidth, height: newHeight });
101
+ if (draggable && (r.dir.includes("w") || r.dir.includes("n"))) {
102
+ setPosition({ x: newX, y: newY });
103
+ }
104
+ };
105
+ const handleMouseUp = () => {
106
+ dragRef.current = null;
107
+ resizeRef.current = null;
108
+ };
109
+ document.addEventListener("mousemove", handleMouseMove);
110
+ document.addEventListener("mouseup", handleMouseUp);
111
+ return () => {
112
+ document.removeEventListener("mousemove", handleMouseMove);
113
+ document.removeEventListener("mouseup", handleMouseUp);
114
+ };
115
+ }, [open, minimized, draggable, minWidth, minHeight]);
116
+ if (!open || minimized) return null;
117
+ const windowEl = /* @__PURE__ */ jsxs(
118
+ "div",
119
+ {
120
+ ref,
121
+ "data-slot": "floating-window",
122
+ role: "dialog",
123
+ "aria-modal": draggable ? void 0 : true,
124
+ "aria-labelledby": typeof title === "string" ? titleId : void 0,
125
+ "aria-label": typeof title === "string" ? void 0 : ariaLabel,
126
+ className: cn(
127
+ "bg-card text-card-foreground relative flex flex-col overflow-hidden rounded-lg shadow-2xl",
128
+ draggable && "border-primary-800 fixed border-2",
129
+ className
130
+ ),
131
+ style: draggable ? {
132
+ left: position.x,
133
+ top: position.y,
134
+ width: size.width,
135
+ height: size.height,
136
+ maxWidth: "calc(100vw - 40px)",
137
+ maxHeight: "calc(100vh - 40px)",
138
+ zIndex: 50
139
+ } : {
140
+ width: size.width,
141
+ height: size.height,
142
+ maxWidth: "calc(100vw - 40px)",
143
+ maxHeight: "calc(100vh - 40px)"
144
+ },
145
+ children: [
146
+ resizable && RESIZE_HANDLES.map((handle) => /* @__PURE__ */ jsx(
147
+ "div",
148
+ {
149
+ "aria-hidden": "true",
150
+ className: cn("absolute z-10", handle.className),
151
+ onMouseDown: (e) => handleResizeStart(e, handle.dir)
152
+ },
153
+ handle.dir
154
+ )),
155
+ resizable && /* @__PURE__ */ jsx(
156
+ "div",
157
+ {
158
+ "aria-hidden": "true",
159
+ className: "hover:bg-muted/50 absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize rounded-tl",
160
+ onMouseDown: (e) => handleResizeStart(e, "se"),
161
+ children: /* @__PURE__ */ jsx(
162
+ "svg",
163
+ {
164
+ className: "text-muted-foreground/50 h-4 w-4",
165
+ viewBox: "0 0 24 24",
166
+ fill: "currentColor",
167
+ children: /* @__PURE__ */ jsx("path", { d: "M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM22 14H20V12H22V14ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z" })
168
+ }
169
+ )
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsxs(
173
+ "div",
174
+ {
175
+ "data-slot": "floating-window-header",
176
+ className: cn(
177
+ "bg-primary-800 text-primary-foreground flex items-center justify-between rounded-t-lg px-4 py-3",
178
+ draggable && "cursor-move"
179
+ ),
180
+ onMouseDown: handleDragStart,
181
+ children: [
182
+ /* @__PURE__ */ jsx(
183
+ "h2",
184
+ {
185
+ id: typeof title === "string" ? titleId : void 0,
186
+ className: "text-lg font-semibold",
187
+ children: title
188
+ }
189
+ ),
190
+ /* @__PURE__ */ jsxs("div", { "data-window-controls": true, className: "flex items-center gap-1", children: [
191
+ onMinimize && /* @__PURE__ */ jsx(
192
+ Button,
193
+ {
194
+ type: "button",
195
+ variant: "ghost",
196
+ size: "sm",
197
+ className: "text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0",
198
+ onClick: onMinimize,
199
+ "aria-label": "Minimize",
200
+ title: "Minimize",
201
+ children: /* @__PURE__ */ jsx(Minus, { className: "h-4 w-4" })
202
+ }
203
+ ),
204
+ onPopOut && /* @__PURE__ */ jsx(
205
+ Button,
206
+ {
207
+ type: "button",
208
+ variant: "ghost",
209
+ size: "sm",
210
+ className: "text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0",
211
+ onClick: onPopOut,
212
+ "aria-label": "Open in new window",
213
+ title: "Open in new window",
214
+ children: /* @__PURE__ */ jsx(ExternalLink, { className: "h-4 w-4" })
215
+ }
216
+ ),
217
+ /* @__PURE__ */ jsx(
218
+ Button,
219
+ {
220
+ type: "button",
221
+ variant: "ghost",
222
+ size: "sm",
223
+ className: "text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0",
224
+ onClick: onClose,
225
+ "aria-label": "Close",
226
+ title: "Close",
227
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
228
+ }
229
+ )
230
+ ] })
231
+ ]
232
+ }
233
+ ),
234
+ /* @__PURE__ */ jsx(
235
+ "div",
236
+ {
237
+ "data-slot": "floating-window-content",
238
+ role: "region",
239
+ className: "flex-1 overflow-y-auto",
240
+ tabIndex: 0,
241
+ children
242
+ }
243
+ ),
244
+ footer && /* @__PURE__ */ jsx(
245
+ "div",
246
+ {
247
+ "data-slot": "floating-window-footer",
248
+ className: "border-border bg-card flex items-center justify-end gap-3 rounded-b-lg border-t px-6 py-4",
249
+ children: footer
250
+ }
251
+ )
252
+ ]
253
+ }
254
+ );
255
+ if (draggable) return windowEl;
256
+ return /* @__PURE__ */ jsx(
257
+ "div",
258
+ {
259
+ "data-slot": "floating-window-overlay",
260
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
261
+ children: windowEl
262
+ }
263
+ );
264
+ }
265
+ );
266
+ FloatingWindow.displayName = "FloatingWindow";
267
+ var MinimizedWindow = React.forwardRef(
268
+ ({ title, onRestore, onClose, className }, ref) => /* @__PURE__ */ jsxs(
269
+ "div",
270
+ {
271
+ ref,
272
+ "data-slot": "minimized-window",
273
+ className: cn(
274
+ "border-border bg-card flex min-w-[200px] items-center gap-2 rounded-lg border px-3 py-2 shadow-md",
275
+ className
276
+ ),
277
+ children: [
278
+ /* @__PURE__ */ jsxs(
279
+ Button,
280
+ {
281
+ type: "button",
282
+ variant: "ghost",
283
+ size: "sm",
284
+ className: "h-6 px-2",
285
+ onClick: onRestore,
286
+ children: [
287
+ /* @__PURE__ */ jsx(Square, { className: "mr-1 h-3 w-3" }),
288
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm", children: title })
289
+ ]
290
+ }
291
+ ),
292
+ /* @__PURE__ */ jsx(
293
+ Button,
294
+ {
295
+ type: "button",
296
+ variant: "ghost",
297
+ size: "sm",
298
+ className: "ml-auto h-6 w-6 p-0",
299
+ onClick: onClose,
300
+ "aria-label": "Close",
301
+ title: "Close",
302
+ children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3" })
303
+ }
304
+ )
305
+ ]
306
+ }
307
+ )
308
+ );
309
+ MinimizedWindow.displayName = "MinimizedWindow";
310
+
311
+ export { FloatingWindow, MinimizedWindow };
312
+ //# sourceMappingURL=chunk-C2544GKZ.js.map
313
+ //# sourceMappingURL=chunk-C2544GKZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/FloatingWindow/FloatingWindow.tsx"],"names":[],"mappings":"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","file":"chunk-C2544GKZ.js","sourcesContent":["import * as React from 'react';\nimport { Minus, Square, ExternalLink, X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\n\ntype ResizeDirection = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';\n\nexport interface FloatingWindowProps {\n /** Whether the window is rendered. */\n open: boolean;\n /** Whether the window is collapsed to a minimized bar (renders nothing). */\n minimized?: boolean;\n /** Window title shown in the header. */\n title: React.ReactNode;\n /** Window body content. */\n children: React.ReactNode;\n /** Footer content, typically action buttons. */\n footer?: React.ReactNode;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Called when the minimize control is activated. Hidden when omitted. */\n onMinimize?: () => void;\n /** Called when the pop-out control is activated. Hidden when omitted. */\n onPopOut?: () => void;\n /**\n * When `true` the window floats at a draggable position. When `false`\n * (default) it is centered over a dimmed overlay like a modal.\n */\n draggable?: boolean;\n /** Whether the window can be resized from its edges/corners. Default true. */\n resizable?: boolean;\n /** Initial width in pixels. Default 1024. */\n defaultWidth?: number;\n /** Initial height in pixels. Default 600. */\n defaultHeight?: number;\n /** Minimum width in pixels. Default 600. */\n minWidth?: number;\n /** Minimum height in pixels. Default 400. */\n minHeight?: number;\n /** Class applied to the window container. */\n className?: string;\n /** Accessible label for the dialog when the title is not text. */\n 'aria-label'?: string;\n}\n\nconst RESIZE_HANDLES: { dir: ResizeDirection; className: string }[] = [\n { dir: 'nw', className: 'top-0 left-0 h-2 w-2 cursor-nw-resize' },\n { dir: 'ne', className: 'top-0 right-0 h-2 w-2 cursor-ne-resize' },\n { dir: 'sw', className: 'bottom-0 left-0 h-2 w-2 cursor-sw-resize' },\n { dir: 'n', className: 'top-0 left-2 right-2 h-1 cursor-n-resize' },\n { dir: 's', className: 'bottom-0 left-2 right-2 h-1 cursor-s-resize' },\n { dir: 'w', className: 'left-0 top-2 bottom-2 w-1 cursor-w-resize' },\n { dir: 'e', className: 'right-0 top-2 bottom-2 w-1 cursor-e-resize' },\n];\n\n/**\n * A presentational floating window shell used for pop-out editors (notes,\n * letters, etc.). It can render as a centered modal-style window or as a\n * draggable, freely-positioned window, and supports edge/corner resizing.\n * Open/minimize/close state and footer actions are controlled via props so it\n * can be wired to any store.\n */\nconst FloatingWindow = React.forwardRef<HTMLDivElement, FloatingWindowProps>(\n (\n {\n open,\n minimized = false,\n title,\n children,\n footer,\n onClose,\n onMinimize,\n onPopOut,\n draggable = false,\n resizable = true,\n defaultWidth = 1024,\n defaultHeight = 600,\n minWidth = 600,\n minHeight = 400,\n className,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const [size, setSize] = React.useState({\n width: defaultWidth,\n height: defaultHeight,\n });\n const [position, setPosition] = React.useState({ x: 50, y: 50 });\n\n const dragRef = React.useRef<{ x: number; y: number } | null>(null);\n const resizeRef = React.useRef<{\n dir: ResizeDirection;\n startX: number;\n startY: number;\n startW: number;\n startH: number;\n startPosX: number;\n startPosY: number;\n } | null>(null);\n\n const titleId = React.useId();\n\n const handleResizeStart = (e: React.MouseEvent, dir: ResizeDirection) => {\n e.preventDefault();\n e.stopPropagation();\n resizeRef.current = {\n dir,\n startX: e.clientX,\n startY: e.clientY,\n startW: size.width,\n startH: size.height,\n startPosX: position.x,\n startPosY: position.y,\n };\n };\n\n const handleDragStart = (e: React.MouseEvent) => {\n if (!draggable) return;\n if ((e.target as HTMLElement).closest('[data-window-controls]')) return;\n const rect = (e.currentTarget as HTMLElement)\n .closest('[data-slot=\"floating-window\"]')!\n .getBoundingClientRect();\n dragRef.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n };\n\n React.useEffect(() => {\n if (!open || minimized) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (dragRef.current) {\n setPosition({\n x: e.clientX - dragRef.current.x,\n y: e.clientY - dragRef.current.y,\n });\n return;\n }\n const r = resizeRef.current;\n if (!r) return;\n const deltaX = e.clientX - r.startX;\n const deltaY = e.clientY - r.startY;\n let newWidth = r.startW;\n let newHeight = r.startH;\n let newX = r.startPosX;\n let newY = r.startPosY;\n\n if (r.dir.includes('e')) {\n newWidth = Math.max(\n minWidth,\n Math.min(window.innerWidth - 40, r.startW + deltaX)\n );\n }\n if (r.dir.includes('w')) {\n newWidth = Math.max(minWidth, r.startW - deltaX);\n if (draggable) newX = r.startPosX + (r.startW - newWidth);\n }\n if (r.dir.includes('s')) {\n newHeight = Math.max(\n minHeight,\n Math.min(window.innerHeight - 40, r.startH + deltaY)\n );\n }\n if (r.dir.includes('n')) {\n newHeight = Math.max(minHeight, r.startH - deltaY);\n if (draggable) newY = r.startPosY + (r.startH - newHeight);\n }\n\n setSize({ width: newWidth, height: newHeight });\n if (draggable && (r.dir.includes('w') || r.dir.includes('n'))) {\n setPosition({ x: newX, y: newY });\n }\n };\n\n const handleMouseUp = () => {\n dragRef.current = null;\n resizeRef.current = null;\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [open, minimized, draggable, minWidth, minHeight]);\n\n if (!open || minimized) return null;\n\n const windowEl = (\n <div\n ref={ref}\n data-slot=\"floating-window\"\n role=\"dialog\"\n aria-modal={draggable ? undefined : true}\n aria-labelledby={typeof title === 'string' ? titleId : undefined}\n aria-label={typeof title === 'string' ? undefined : ariaLabel}\n className={cn(\n 'bg-card text-card-foreground relative flex flex-col overflow-hidden rounded-lg shadow-2xl',\n draggable && 'border-primary-800 fixed border-2',\n className\n )}\n style={\n draggable\n ? {\n left: position.x,\n top: position.y,\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n zIndex: 50,\n }\n : {\n width: size.width,\n height: size.height,\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n }\n }\n >\n {resizable &&\n RESIZE_HANDLES.map((handle) => (\n <div\n key={handle.dir}\n aria-hidden=\"true\"\n className={cn('absolute z-10', handle.className)}\n onMouseDown={(e) => handleResizeStart(e, handle.dir)}\n />\n ))}\n {resizable && (\n <div\n aria-hidden=\"true\"\n className=\"hover:bg-muted/50 absolute right-0 bottom-0 z-10 h-4 w-4 cursor-se-resize rounded-tl\"\n onMouseDown={(e) => handleResizeStart(e, 'se')}\n >\n <svg\n className=\"text-muted-foreground/50 h-4 w-4\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM22 14H20V12H22V14ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z\" />\n </svg>\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- header acts as an optional drag handle; the controls inside remain keyboard accessible */}\n <div\n data-slot=\"floating-window-header\"\n className={cn(\n 'bg-primary-800 text-primary-foreground flex items-center justify-between rounded-t-lg px-4 py-3',\n draggable && 'cursor-move'\n )}\n onMouseDown={handleDragStart}\n >\n <h2\n id={typeof title === 'string' ? titleId : undefined}\n className=\"text-lg font-semibold\"\n >\n {title}\n </h2>\n <div data-window-controls className=\"flex items-center gap-1\">\n {onMinimize && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onMinimize}\n aria-label=\"Minimize\"\n title=\"Minimize\"\n >\n <Minus className=\"h-4 w-4\" />\n </Button>\n )}\n {onPopOut && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onPopOut}\n aria-label=\"Open in new window\"\n title=\"Open in new window\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n </Button>\n )}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-primary-foreground hover:bg-primary-foreground/20 h-8 w-8 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* eslint-disable jsx-a11y/no-noninteractive-tabindex */}\n <div\n data-slot=\"floating-window-content\"\n role=\"region\"\n className=\"flex-1 overflow-y-auto\"\n tabIndex={0}\n >\n {children}\n </div>\n {/* eslint-enable jsx-a11y/no-noninteractive-tabindex */}\n\n {footer && (\n <div\n data-slot=\"floating-window-footer\"\n className=\"border-border bg-card flex items-center justify-end gap-3 rounded-b-lg border-t px-6 py-4\"\n >\n {footer}\n </div>\n )}\n </div>\n );\n\n if (draggable) return windowEl;\n\n return (\n <div\n data-slot=\"floating-window-overlay\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n >\n {windowEl}\n </div>\n );\n }\n);\n\nFloatingWindow.displayName = 'FloatingWindow';\n\nexport interface MinimizedWindowProps {\n /** Title shown on the minimized bar. */\n title: React.ReactNode;\n /** Called when the bar is activated to restore the window. */\n onRestore: () => void;\n /** Called when the close control is activated. */\n onClose: () => void;\n /** Additional class for the minimized bar. */\n className?: string;\n}\n\n/**\n * A compact bar representing a minimized {@link FloatingWindow}. Render this\n * (typically in a docked tray) while the corresponding window is minimized.\n */\nconst MinimizedWindow = React.forwardRef<HTMLDivElement, MinimizedWindowProps>(\n ({ title, onRestore, onClose, className }, ref) => (\n <div\n ref={ref}\n data-slot=\"minimized-window\"\n className={cn(\n 'border-border bg-card flex min-w-[200px] items-center gap-2 rounded-lg border px-3 py-2 shadow-md',\n className\n )}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={onRestore}\n >\n <Square className=\"mr-1 h-3 w-3\" />\n <span className=\"truncate text-sm\">{title}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto h-6 w-6 p-0\"\n onClick={onClose}\n aria-label=\"Close\"\n title=\"Close\"\n >\n <X className=\"h-3 w-3\" />\n </Button>\n </div>\n )\n);\n\nMinimizedWindow.displayName = 'MinimizedWindow';\n\nexport { FloatingWindow, MinimizedWindow };\n"]}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ // src/utils/html.ts
4
+ function stripHtmlTags(html) {
5
+ let result = "";
6
+ let inTag = false;
7
+ for (let i = 0; i < html.length; i++) {
8
+ if (html[i] === "<") {
9
+ inTag = true;
10
+ } else if (html[i] === ">") {
11
+ inTag = false;
12
+ } else if (!inTag) {
13
+ result += html[i];
14
+ }
15
+ }
16
+ return result;
17
+ }
18
+ function isHtmlEmpty(html) {
19
+ return stripHtmlTags(html).replace(/&nbsp;/g, " ").trim().length === 0;
20
+ }
21
+
22
+ exports.isHtmlEmpty = isHtmlEmpty;
23
+ exports.stripHtmlTags = stripHtmlTags;
24
+ //# sourceMappingURL=chunk-C7RVKV25.cjs.map
25
+ //# sourceMappingURL=chunk-C7RVKV25.cjs.map