asterui 0.12.25 → 0.12.27

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 (167) hide show
  1. package/dist/components/Cascader.d.ts +2 -0
  2. package/dist/components/Descriptions.d.ts +35 -3
  3. package/dist/components/Empty.d.ts +10 -1
  4. package/dist/components/Image.d.ts +13 -1
  5. package/dist/components/List.d.ts +74 -8
  6. package/dist/components/Table.d.ts +64 -10
  7. package/dist/components/Tag.d.ts +16 -4
  8. package/dist/components/Timeline.d.ts +62 -7
  9. package/dist/components/Tree.d.ts +2 -0
  10. package/dist/index.d.ts +6 -8
  11. package/dist/index.js +151 -152
  12. package/dist/index.js.map +1 -1
  13. package/dist/index10.js +1 -1
  14. package/dist/index100.js +5 -32
  15. package/dist/index100.js.map +1 -1
  16. package/dist/index101.js +13 -5
  17. package/dist/index101.js.map +1 -1
  18. package/dist/index102.js +43 -11
  19. package/dist/index102.js.map +1 -1
  20. package/dist/index103.js +11 -44
  21. package/dist/index103.js.map +1 -1
  22. package/dist/index104.js +12 -10
  23. package/dist/index104.js.map +1 -1
  24. package/dist/index105.js +7 -14
  25. package/dist/index105.js.map +1 -1
  26. package/dist/index106.js +12 -7
  27. package/dist/index106.js.map +1 -1
  28. package/dist/index107.js +29 -11
  29. package/dist/index107.js.map +1 -1
  30. package/dist/index108.js +16 -29
  31. package/dist/index108.js.map +1 -1
  32. package/dist/index109.js +31 -16
  33. package/dist/index109.js.map +1 -1
  34. package/dist/index110.js +517 -30
  35. package/dist/index110.js.map +1 -1
  36. package/dist/index111.js +45 -515
  37. package/dist/index111.js.map +1 -1
  38. package/dist/index15.js.map +1 -1
  39. package/dist/index22.js +1 -1
  40. package/dist/index23.js +127 -93
  41. package/dist/index23.js.map +1 -1
  42. package/dist/index39.js +162 -115
  43. package/dist/index39.js.map +1 -1
  44. package/dist/index40.js +398 -40
  45. package/dist/index40.js.map +1 -1
  46. package/dist/index41.js +132 -389
  47. package/dist/index41.js.map +1 -1
  48. package/dist/index42.js +252 -91
  49. package/dist/index42.js.map +1 -1
  50. package/dist/index43.js +143 -247
  51. package/dist/index43.js.map +1 -1
  52. package/dist/index44.js +15 -154
  53. package/dist/index44.js.map +1 -1
  54. package/dist/index45.js +17 -15
  55. package/dist/index45.js.map +1 -1
  56. package/dist/index46.js +136 -16
  57. package/dist/index46.js.map +1 -1
  58. package/dist/index47.js +118 -133
  59. package/dist/index47.js.map +1 -1
  60. package/dist/index48.js +35 -13
  61. package/dist/index48.js.map +1 -1
  62. package/dist/index49.js +34 -35
  63. package/dist/index49.js.map +1 -1
  64. package/dist/index50.js +81 -34
  65. package/dist/index50.js.map +1 -1
  66. package/dist/index51.js +166 -71
  67. package/dist/index51.js.map +1 -1
  68. package/dist/index52.js +144 -167
  69. package/dist/index52.js.map +1 -1
  70. package/dist/index53.js +11 -152
  71. package/dist/index53.js.map +1 -1
  72. package/dist/index54.js +55 -10
  73. package/dist/index54.js.map +1 -1
  74. package/dist/index55.js +12 -55
  75. package/dist/index55.js.map +1 -1
  76. package/dist/index56.js +7 -14
  77. package/dist/index56.js.map +1 -1
  78. package/dist/index57.js +333 -6
  79. package/dist/index57.js.map +1 -1
  80. package/dist/index58.js +47 -334
  81. package/dist/index58.js.map +1 -1
  82. package/dist/index59.js +122 -47
  83. package/dist/index59.js.map +1 -1
  84. package/dist/index60.js +108 -120
  85. package/dist/index60.js.map +1 -1
  86. package/dist/index61.js +167 -107
  87. package/dist/index61.js.map +1 -1
  88. package/dist/index62.js +29 -167
  89. package/dist/index62.js.map +1 -1
  90. package/dist/index63.js +120 -30
  91. package/dist/index63.js.map +1 -1
  92. package/dist/index64.js +80 -116
  93. package/dist/index64.js.map +1 -1
  94. package/dist/index65.js +19 -85
  95. package/dist/index65.js.map +1 -1
  96. package/dist/index66.js +73 -19
  97. package/dist/index66.js.map +1 -1
  98. package/dist/index67.js +54 -71
  99. package/dist/index67.js.map +1 -1
  100. package/dist/index68.js +44 -56
  101. package/dist/index68.js.map +1 -1
  102. package/dist/index69.js +49 -42
  103. package/dist/index69.js.map +1 -1
  104. package/dist/index70.js +121 -50
  105. package/dist/index70.js.map +1 -1
  106. package/dist/index71.js +102 -118
  107. package/dist/index71.js.map +1 -1
  108. package/dist/index72.js +72 -105
  109. package/dist/index72.js.map +1 -1
  110. package/dist/index73.js +67 -73
  111. package/dist/index73.js.map +1 -1
  112. package/dist/index74.js +19 -66
  113. package/dist/index74.js.map +1 -1
  114. package/dist/index75.js +55 -18
  115. package/dist/index75.js.map +1 -1
  116. package/dist/index76.js +251 -55
  117. package/dist/index76.js.map +1 -1
  118. package/dist/index77.js +22 -254
  119. package/dist/index77.js.map +1 -1
  120. package/dist/index78.js +31 -22
  121. package/dist/index78.js.map +1 -1
  122. package/dist/index79.js +93 -30
  123. package/dist/index79.js.map +1 -1
  124. package/dist/index80.js +626 -86
  125. package/dist/index80.js.map +1 -1
  126. package/dist/index81.js +73 -322
  127. package/dist/index81.js.map +1 -1
  128. package/dist/index82.js +39 -79
  129. package/dist/index82.js.map +1 -1
  130. package/dist/index83.js +23 -40
  131. package/dist/index83.js.map +1 -1
  132. package/dist/index84.js +207 -23
  133. package/dist/index84.js.map +1 -1
  134. package/dist/index85.js +149 -122
  135. package/dist/index85.js.map +1 -1
  136. package/dist/index86.js +152 -147
  137. package/dist/index86.js.map +1 -1
  138. package/dist/index87.js +143 -156
  139. package/dist/index87.js.map +1 -1
  140. package/dist/index88.js +35 -65
  141. package/dist/index88.js.map +1 -1
  142. package/dist/index89.js +234 -35
  143. package/dist/index89.js.map +1 -1
  144. package/dist/index90.js +31 -231
  145. package/dist/index90.js.map +1 -1
  146. package/dist/index91.js +210 -34
  147. package/dist/index91.js.map +1 -1
  148. package/dist/index92.js +418 -187
  149. package/dist/index92.js.map +1 -1
  150. package/dist/index93.js +686 -376
  151. package/dist/index93.js.map +1 -1
  152. package/dist/index94.js +165 -738
  153. package/dist/index94.js.map +1 -1
  154. package/dist/index95.js +253 -173
  155. package/dist/index95.js.map +1 -1
  156. package/dist/index96.js +64 -256
  157. package/dist/index96.js.map +1 -1
  158. package/dist/index97.js +121 -61
  159. package/dist/index97.js.map +1 -1
  160. package/dist/index98.js +14 -126
  161. package/dist/index98.js.map +1 -1
  162. package/dist/index99.js +31 -12
  163. package/dist/index99.js.map +1 -1
  164. package/package.json +1 -1
  165. package/dist/components/Indicator.d.ts +0 -7
  166. package/dist/index112.js +0 -53
  167. package/dist/index112.js.map +0 -1
package/dist/index75.js CHANGED
@@ -1,24 +1,61 @@
1
- import { jsx as x } from "react/jsx-runtime";
2
- const i = ({
3
- width: s,
4
- height: t,
5
- circle: o = !1,
6
- variant: l = "default",
7
- className: n = "",
8
- children: r,
9
- style: f,
10
- ...u
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import b from "react";
3
+ const w = {
4
+ xs: "gap-1",
5
+ sm: "gap-2",
6
+ md: "gap-4",
7
+ lg: "gap-6",
8
+ xl: "gap-8"
9
+ }, v = {
10
+ start: "items-start",
11
+ end: "items-end",
12
+ center: "items-center",
13
+ baseline: "items-baseline",
14
+ stretch: "items-stretch"
15
+ }, N = {
16
+ start: "justify-start",
17
+ end: "justify-end",
18
+ center: "justify-center",
19
+ between: "justify-between",
20
+ around: "justify-around",
21
+ evenly: "justify-evenly"
22
+ }, k = ({
23
+ direction: f = "horizontal",
24
+ size: s = "md",
25
+ align: r,
26
+ justify: a,
27
+ wrap: p = !1,
28
+ split: l,
29
+ className: u = "",
30
+ style: d,
31
+ children: e,
32
+ ...m
11
33
  }) => {
12
- const p = () => {
13
- const e = ["skeleton"];
14
- return l === "text" && e.push("skeleton-text"), o && e.push("rounded-full"), n && e.push(n), e.join(" ");
15
- }, c = () => {
16
- const e = {};
17
- return s && (e.width = typeof s == "number" ? `${s}px` : s), t && (e.height = typeof t == "number" ? `${t}px` : t), Object.keys(e).length > 0 ? e : void 0;
34
+ const o = typeof s == "number", h = o ? "" : w[s], y = r ? v[r] : "", C = a ? N[a] : "", g = [
35
+ "flex",
36
+ f === "horizontal" ? "flex-row" : "flex-col",
37
+ h,
38
+ y,
39
+ C,
40
+ p ? "flex-wrap" : "",
41
+ u
42
+ ].filter(Boolean).join(" "), j = {
43
+ ...d,
44
+ ...o ? { gap: `${s}px` } : {}
18
45
  };
19
- return /* @__PURE__ */ x("div", { className: p(), style: { ...c(), ...f }, ...u, children: r });
46
+ return /* @__PURE__ */ c("div", { className: g, style: j, ...m, children: (() => {
47
+ if (!l) return e;
48
+ const t = b.Children.toArray(e).filter(Boolean);
49
+ if (t.length <= 1) return e;
50
+ const n = [];
51
+ return t.forEach((x, i) => {
52
+ n.push(x), i < t.length - 1 && n.push(
53
+ /* @__PURE__ */ c("span", { className: "flex-shrink-0", children: l }, `split-${i}`)
54
+ );
55
+ }), n;
56
+ })() });
20
57
  };
21
58
  export {
22
- i as Skeleton
59
+ k as Space
23
60
  };
24
61
  //# sourceMappingURL=index75.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index75.js","sources":["../src/components/Skeleton.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: string | number\n height?: string | number\n circle?: boolean\n variant?: 'default' | 'text'\n children?: React.ReactNode\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width,\n height,\n circle = false,\n variant = 'default',\n className = '',\n children,\n style,\n ...rest\n}) => {\n const getClasses = () => {\n const classes = ['skeleton']\n\n if (variant === 'text') {\n classes.push('skeleton-text')\n }\n\n if (circle) {\n classes.push('rounded-full')\n }\n\n if (className) {\n classes.push(className)\n }\n\n return classes.join(' ')\n }\n\n const getStyles = () => {\n const styles: React.CSSProperties = {}\n\n if (width) {\n styles.width = typeof width === 'number' ? `${width}px` : width\n }\n\n if (height) {\n styles.height = typeof height === 'number' ? `${height}px` : height\n }\n\n return Object.keys(styles).length > 0 ? styles : undefined\n }\n\n return (\n <div className={getClasses()} style={{ ...getStyles(), ...style }} {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["Skeleton","width","height","circle","variant","className","children","style","rest","getClasses","classes","getStyles","styles","jsx"],"mappings":";AAUO,MAAMA,IAAoC,CAAC;AAAA,EAChD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAa,MAAM;AACvB,UAAMC,IAAU,CAAC,UAAU;AAE3B,WAAIN,MAAY,UACdM,EAAQ,KAAK,eAAe,GAG1BP,KACFO,EAAQ,KAAK,cAAc,GAGzBL,KACFK,EAAQ,KAAKL,CAAS,GAGjBK,EAAQ,KAAK,GAAG;AAAA,EACzB,GAEMC,IAAY,MAAM;AACtB,UAAMC,IAA8B,CAAA;AAEpC,WAAIX,MACFW,EAAO,QAAQ,OAAOX,KAAU,WAAW,GAAGA,CAAK,OAAOA,IAGxDC,MACFU,EAAO,SAAS,OAAOV,KAAW,WAAW,GAAGA,CAAM,OAAOA,IAGxD,OAAO,KAAKU,CAAM,EAAE,SAAS,IAAIA,IAAS;AAAA,EACnD;AAEA,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAWJ,EAAA,GAAc,OAAO,EAAE,GAAGE,EAAA,GAAa,GAAGJ,EAAA,GAAU,GAAGC,GACpE,UAAAF,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"index75.js","sources":["../src/components/Space.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface SpaceProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch'\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'\n wrap?: boolean\n split?: React.ReactNode\n children: React.ReactNode\n}\n\nconst gapClasses = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n} as const\n\nconst alignClasses = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n} as const\n\nconst justifyClasses = {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n} as const\n\nexport const Space: React.FC<SpaceProps> = ({\n direction = 'horizontal',\n size = 'md',\n align,\n justify,\n wrap = false,\n split,\n className = '',\n style,\n children,\n ...rest\n}) => {\n const isNumericSize = typeof size === 'number'\n const gapClass = isNumericSize ? '' : gapClasses[size]\n const alignClass = align ? alignClasses[align] : ''\n const justifyClass = justify ? justifyClasses[justify] : ''\n const wrapClass = wrap ? 'flex-wrap' : ''\n const directionClass = direction === 'horizontal' ? 'flex-row' : 'flex-col'\n\n const classes = [\n 'flex',\n directionClass,\n gapClass,\n alignClass,\n justifyClass,\n wrapClass,\n className\n ].filter(Boolean).join(' ')\n\n const combinedStyle: React.CSSProperties = {\n ...style,\n ...(isNumericSize ? { gap: `${size}px` } : {}),\n }\n\n // If split is provided, interleave separator between children\n const renderChildren = () => {\n if (!split) return children\n\n const childArray = React.Children.toArray(children).filter(Boolean)\n if (childArray.length <= 1) return children\n\n const result: React.ReactNode[] = []\n childArray.forEach((child, index) => {\n result.push(child)\n if (index < childArray.length - 1) {\n result.push(\n <span key={`split-${index}`} className=\"flex-shrink-0\">\n {split}\n </span>\n )\n }\n })\n return result\n }\n\n return <div className={classes} style={combinedStyle} {...rest}>{renderChildren()}</div>\n}\n"],"names":["gapClasses","alignClasses","justifyClasses","Space","direction","size","align","justify","wrap","split","className","style","children","rest","isNumericSize","gapClass","alignClass","justifyClass","classes","combinedStyle","jsx","childArray","React","result","child","index"],"mappings":";;AAYA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAe;AAAA,EACnB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX,GAEMC,IAAiB;AAAA,EACrB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV,GAEaC,IAA8B,CAAC;AAAA,EAC1C,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAgB,OAAOT,KAAS,UAChCU,IAAWD,IAAgB,KAAKd,EAAWK,CAAI,GAC/CW,IAAaV,IAAQL,EAAaK,CAAK,IAAI,IAC3CW,IAAeV,IAAUL,EAAeK,CAAO,IAAI,IAInDW,IAAU;AAAA,IACd;AAAA,IAHqBd,MAAc,eAAe,aAAa;AAAA,IAK/DW;AAAA,IACAC;AAAA,IACAC;AAAA,IARgBT,IAAO,cAAc;AAAA,IAUrCE;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAEpBS,IAAqC;AAAA,IACzC,GAAGR;AAAA,IACH,GAAIG,IAAgB,EAAE,KAAK,GAAGT,CAAI,SAAS,CAAA;AAAA,EAAC;AAwB9C,SAAO,gBAAAe,EAAC,SAAI,WAAWF,GAAS,OAAOC,GAAgB,GAAGN,GAAO,WApB1C,MAAM;AAC3B,QAAI,CAACJ,EAAO,QAAOG;AAEnB,UAAMS,IAAaC,EAAM,SAAS,QAAQV,CAAQ,EAAE,OAAO,OAAO;AAClE,QAAIS,EAAW,UAAU,EAAG,QAAOT;AAEnC,UAAMW,IAA4B,CAAA;AAClC,WAAAF,EAAW,QAAQ,CAACG,GAAOC,MAAU;AACnC,MAAAF,EAAO,KAAKC,CAAK,GACbC,IAAQJ,EAAW,SAAS,KAC9BE,EAAO;AAAA,0BACJ,QAAA,EAA4B,WAAU,iBACpC,UAAAd,KADQ,SAASgB,CAAK,EAEzB;AAAA,MAAA;AAAA,IAGN,CAAC,GACMF;AAAA,EACT,GAEiE,EAAe,CAAE;AACpF;"}
package/dist/index76.js CHANGED
@@ -1,61 +1,257 @@
1
- import { jsx as c } from "react/jsx-runtime";
2
- import b from "react";
3
- const w = {
4
- xs: "gap-1",
5
- sm: "gap-2",
6
- md: "gap-4",
7
- lg: "gap-6",
8
- xl: "gap-8"
9
- }, v = {
10
- start: "items-start",
11
- end: "items-end",
12
- center: "items-center",
13
- baseline: "items-baseline",
14
- stretch: "items-stretch"
15
- }, N = {
16
- start: "justify-start",
17
- end: "justify-end",
18
- center: "justify-center",
19
- between: "justify-between",
20
- around: "justify-around",
21
- evenly: "justify-evenly"
22
- }, k = ({
23
- direction: f = "horizontal",
24
- size: s = "md",
25
- align: r,
26
- justify: a,
27
- wrap: p = !1,
28
- split: l,
29
- className: u = "",
30
- style: d,
31
- children: e,
32
- ...m
1
+ import { jsx as h, jsxs as _, Fragment as ie } from "react/jsx-runtime";
2
+ import K, { useRef as L, useState as J, useCallback as y, useEffect as Q } from "react";
3
+ const pe = ({ children: M }) => /* @__PURE__ */ h(ie, { children: M }), ue = ({
4
+ children: M,
5
+ direction: z = "horizontal",
6
+ sizes: P,
7
+ defaultSizes: $,
8
+ onSizesChange: T,
9
+ gutterSize: R = 8,
10
+ minSize: E = 50,
11
+ className: Z = ""
33
12
  }) => {
34
- const o = typeof s == "number", h = o ? "" : w[s], y = r ? v[r] : "", C = a ? N[a] : "", g = [
35
- "flex",
36
- f === "horizontal" ? "flex-row" : "flex-col",
37
- h,
38
- y,
39
- C,
40
- p ? "flex-wrap" : "",
41
- u
42
- ].filter(Boolean).join(" "), j = {
43
- ...d,
44
- ...o ? { gap: `${s}px` } : {}
13
+ const D = L(null), I = L([]), x = L(null), u = K.Children.toArray(M).filter(
14
+ (e) => K.isValidElement(e)
15
+ ), m = u.length, [f, F] = J(
16
+ () => u.map((e) => e.props.defaultCollapsed ?? e.props.collapsed ?? !1)
17
+ ), W = L([]), j = y(() => {
18
+ const e = u.map((s) => s.props.defaultSize), o = e.some((s) => s !== void 0);
19
+ if ($ && $.length === m)
20
+ return $;
21
+ if (o) {
22
+ const s = e.reduce((l, n) => l + (n ?? 0), 0), r = e.filter((l) => l === void 0).length, a = Math.max(0, 100 - s), t = r > 0 ? a / r : 0;
23
+ return e.map((l) => l ?? t);
24
+ }
25
+ const i = 100 / m;
26
+ return Array(m).fill(i);
27
+ }, [$, m, u]), [k, X] = J(j), ee = y(() => {
28
+ const e = u.map((t) => t.props.size);
29
+ if (!e.some((t) => t !== void 0)) return null;
30
+ const i = e.reduce((t, l) => t + (l ?? 0), 0), s = e.filter((t) => t === void 0).length, r = Math.max(0, 100 - i), a = s > 0 ? r / s : 0;
31
+ return e.map((t, l) => t ?? k[l] ?? a);
32
+ }, [u, k]), d = P || ee() || k;
33
+ Q(() => {
34
+ !P && k.length !== m && X(j());
35
+ }, [m, P, k.length, j]), Q(() => {
36
+ const e = u.map(
37
+ (i, s) => i.props.collapsed ?? f[s] ?? !1
38
+ );
39
+ e.some((i, s) => i !== f[s]) && F(e);
40
+ }, [u.map((e) => e.props.collapsed).join(",")]);
41
+ const b = y(
42
+ (e) => {
43
+ P || X(e), T?.(e);
44
+ },
45
+ [P, T]
46
+ ), Y = y(
47
+ (e) => {
48
+ const o = u[e];
49
+ if (!o?.props.collapsible) return;
50
+ const s = !f[e], r = [...f];
51
+ if (r[e] = s, F(r), o.props.onCollapse?.(s), s) {
52
+ W.current = [...d];
53
+ const a = 0, t = d[e] - a, l = d.map((n, c) => ({ size: n, index: c })).filter((n, c) => c !== e && !r[c]);
54
+ if (l.length > 0) {
55
+ const n = t / l.length, c = d.map((p, w) => w === e ? a : r[w] ? p : p + n);
56
+ b(c);
57
+ }
58
+ } else {
59
+ const a = W.current[e] || 100 / m, l = d.map((n, c) => ({ size: n, index: c })).filter((n, c) => c !== e && !r[c]).reduce((n, c) => n + c.size, 0);
60
+ if (l > 0) {
61
+ const n = d.map((c, p) => {
62
+ if (p === e) return a;
63
+ if (!r[p]) {
64
+ const w = c / l;
65
+ return c - a * w;
66
+ }
67
+ return c;
68
+ });
69
+ b(n);
70
+ }
71
+ }
72
+ },
73
+ [u, f, d, m, b]
74
+ ), te = y(
75
+ (e, o) => {
76
+ const i = u[e]?.props || {}, s = u[e + 1]?.props || {};
77
+ if (i.resizable === !1 || s.resizable === !1 || f[e] || f[e + 1])
78
+ return;
79
+ o.preventDefault();
80
+ const r = z === "horizontal" ? o.clientX : o.clientY;
81
+ x.current = {
82
+ index: e,
83
+ startPos: r,
84
+ startSizes: [...d]
85
+ };
86
+ const a = (l) => {
87
+ if (!x.current || !D.current) return;
88
+ const { index: n, startPos: c, startSizes: p } = x.current, w = D.current.getBoundingClientRect(), se = z === "horizontal" ? w.width : w.height, re = z === "horizontal" ? l.clientX : l.clientY, le = (m - 1) * R, N = se - le, q = (re - c) / N * 100, G = u[n]?.props || {}, H = u[n + 1]?.props || {}, ae = G.minSize ?? E, ce = H.minSize ?? E, A = ae / N * 100, B = ce / N * 100;
89
+ let v = p[n] + q, C = p[n + 1] - q;
90
+ v < A && (v = A, C = p[n] + p[n + 1] - A), C < B && (C = B, v = p[n] + p[n + 1] - B);
91
+ const O = G.maxSize, V = H.maxSize;
92
+ if (O) {
93
+ const S = O / N * 100;
94
+ v > S && (v = S, C = p[n] + p[n + 1] - S);
95
+ }
96
+ if (V) {
97
+ const S = V / N * 100;
98
+ C > S && (C = S, v = p[n] + p[n + 1] - S);
99
+ }
100
+ const U = [...p];
101
+ U[n] = v, U[n + 1] = C, b(U);
102
+ }, t = () => {
103
+ x.current = null, document.removeEventListener("mousemove", a), document.removeEventListener("mouseup", t), document.body.style.cursor = "", document.body.style.userSelect = "";
104
+ };
105
+ document.addEventListener("mousemove", a), document.addEventListener("mouseup", t), document.body.style.cursor = z === "horizontal" ? "col-resize" : "row-resize", document.body.style.userSelect = "none";
106
+ },
107
+ [z, d, m, R, u, E, b, f]
108
+ ), oe = y(
109
+ (e, o) => {
110
+ if (f[e] || f[e + 1])
111
+ return;
112
+ const i = o.shiftKey ? 10 : 1;
113
+ let s = 0;
114
+ if (z === "horizontal" ? o.key === "ArrowLeft" ? s = -i : o.key === "ArrowRight" && (s = i) : o.key === "ArrowUp" ? s = -i : o.key === "ArrowDown" && (s = i), s !== 0) {
115
+ o.preventDefault();
116
+ const r = [...d], a = 5;
117
+ let t = r[e] + s, l = r[e + 1] - s;
118
+ t >= a && l >= a && (r[e] = t, r[e + 1] = l, b(r));
119
+ }
120
+ },
121
+ [z, d, b, f]
122
+ ), g = z === "horizontal", ne = (e) => {
123
+ const o = u[e], i = u[e + 1], s = o?.props.collapsible, r = i?.props.collapsible, a = f[e], t = f[e + 1];
124
+ return {
125
+ showStart: s && !t,
126
+ showEnd: r && !a,
127
+ panel1Collapsed: a,
128
+ panel2Collapsed: t
129
+ };
45
130
  };
46
- return /* @__PURE__ */ c("div", { className: g, style: j, ...m, children: (() => {
47
- if (!l) return e;
48
- const t = b.Children.toArray(e).filter(Boolean);
49
- if (t.length <= 1) return e;
50
- const n = [];
51
- return t.forEach((x, i) => {
52
- n.push(x), i < t.length - 1 && n.push(
53
- /* @__PURE__ */ c("span", { className: "flex-shrink-0", children: l }, `split-${i}`)
54
- );
55
- }), n;
56
- })() });
131
+ return /* @__PURE__ */ h(
132
+ "div",
133
+ {
134
+ ref: D,
135
+ className: `flex ${g ? "flex-row" : "flex-col"} h-full w-full ${Z}`,
136
+ children: u.map((e, o) => {
137
+ const i = e.props, s = o === u.length - 1, r = f[o], a = i.resizable !== !1 && !r;
138
+ return /* @__PURE__ */ _(K.Fragment, { children: [
139
+ /* @__PURE__ */ h(
140
+ "div",
141
+ {
142
+ ref: (t) => {
143
+ I.current[o] = t;
144
+ },
145
+ className: `overflow-auto ${i.className || ""}`,
146
+ style: {
147
+ [g ? "width" : "height"]: r ? "0px" : `calc(${d[o]}% - ${(m - 1) * R / m}px)`,
148
+ flexShrink: 0,
149
+ overflow: r ? "hidden" : "auto"
150
+ },
151
+ "data-collapsed": r,
152
+ children: i.children
153
+ }
154
+ ),
155
+ !s && /* @__PURE__ */ h(
156
+ "div",
157
+ {
158
+ role: "separator",
159
+ "aria-orientation": g ? "vertical" : "horizontal",
160
+ "aria-valuenow": Math.round(d[o]),
161
+ tabIndex: a ? 0 : -1,
162
+ className: `
163
+ flex-shrink-0 bg-base-300 transition-colors duration-150 relative group
164
+ ${a ? "hover:bg-primary/30 active:bg-primary/50" : ""}
165
+ ${a ? g ? "cursor-col-resize" : "cursor-row-resize" : "cursor-default"}
166
+ `,
167
+ style: {
168
+ [g ? "width" : "height"]: `${R}px`
169
+ },
170
+ onMouseDown: (t) => te(o, t),
171
+ onKeyDown: (t) => oe(o, t),
172
+ children: (() => {
173
+ const { showStart: t, showEnd: l, panel1Collapsed: n, panel2Collapsed: c } = ne(o);
174
+ return !t && !l ? /* @__PURE__ */ _(
175
+ "div",
176
+ {
177
+ className: `
178
+ absolute inset-0 flex items-center justify-center
179
+ ${g ? "flex-col gap-0.5" : "flex-row gap-0.5"}
180
+ `,
181
+ children: [
182
+ /* @__PURE__ */ h("div", { className: "w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60" }),
183
+ /* @__PURE__ */ h("div", { className: "w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60" }),
184
+ /* @__PURE__ */ h("div", { className: "w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60" })
185
+ ]
186
+ }
187
+ ) : /* @__PURE__ */ _(
188
+ "div",
189
+ {
190
+ className: `
191
+ absolute inset-0 flex items-center justify-center
192
+ ${g ? "flex-col" : "flex-row"}
193
+ `,
194
+ children: [
195
+ t && /* @__PURE__ */ h(
196
+ "button",
197
+ {
198
+ type: "button",
199
+ onClick: (p) => {
200
+ p.stopPropagation(), Y(o);
201
+ },
202
+ className: `
203
+ p-0.5 rounded hover:bg-base-content/20 transition-colors
204
+
205
+ `,
206
+ "aria-label": n ? "Expand panel" : "Collapse panel",
207
+ children: /* @__PURE__ */ h(
208
+ "svg",
209
+ {
210
+ className: `w-3 h-3 text-base-content/50 hover:text-base-content transition-transform ${n ? g ? "rotate-180" : "-rotate-90" : g ? "rotate-0" : "rotate-90"}`,
211
+ fill: "none",
212
+ viewBox: "0 0 24 24",
213
+ stroke: "currentColor",
214
+ children: /* @__PURE__ */ h("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
215
+ }
216
+ )
217
+ }
218
+ ),
219
+ l && /* @__PURE__ */ h(
220
+ "button",
221
+ {
222
+ type: "button",
223
+ onClick: (p) => {
224
+ p.stopPropagation(), Y(o + 1);
225
+ },
226
+ className: `
227
+ p-0.5 rounded hover:bg-base-content/20 transition-colors
228
+ `,
229
+ "aria-label": c ? "Expand panel" : "Collapse panel",
230
+ children: /* @__PURE__ */ h(
231
+ "svg",
232
+ {
233
+ className: `w-3 h-3 text-base-content/50 hover:text-base-content transition-transform ${c ? g ? "rotate-0" : "rotate-90" : g ? "rotate-180" : "-rotate-90"}`,
234
+ fill: "none",
235
+ viewBox: "0 0 24 24",
236
+ stroke: "currentColor",
237
+ children: /* @__PURE__ */ h("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
238
+ }
239
+ )
240
+ }
241
+ )
242
+ ]
243
+ }
244
+ );
245
+ })()
246
+ }
247
+ )
248
+ ] }, o);
249
+ })
250
+ }
251
+ );
57
252
  };
253
+ ue.Panel = pe;
58
254
  export {
59
- k as Space
255
+ ue as Splitter
60
256
  };
61
257
  //# sourceMappingURL=index76.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index76.js","sources":["../src/components/Space.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface SpaceProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch'\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly'\n wrap?: boolean\n split?: React.ReactNode\n children: React.ReactNode\n}\n\nconst gapClasses = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n} as const\n\nconst alignClasses = {\n start: 'items-start',\n end: 'items-end',\n center: 'items-center',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n} as const\n\nconst justifyClasses = {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n} as const\n\nexport const Space: React.FC<SpaceProps> = ({\n direction = 'horizontal',\n size = 'md',\n align,\n justify,\n wrap = false,\n split,\n className = '',\n style,\n children,\n ...rest\n}) => {\n const isNumericSize = typeof size === 'number'\n const gapClass = isNumericSize ? '' : gapClasses[size]\n const alignClass = align ? alignClasses[align] : ''\n const justifyClass = justify ? justifyClasses[justify] : ''\n const wrapClass = wrap ? 'flex-wrap' : ''\n const directionClass = direction === 'horizontal' ? 'flex-row' : 'flex-col'\n\n const classes = [\n 'flex',\n directionClass,\n gapClass,\n alignClass,\n justifyClass,\n wrapClass,\n className\n ].filter(Boolean).join(' ')\n\n const combinedStyle: React.CSSProperties = {\n ...style,\n ...(isNumericSize ? { gap: `${size}px` } : {}),\n }\n\n // If split is provided, interleave separator between children\n const renderChildren = () => {\n if (!split) return children\n\n const childArray = React.Children.toArray(children).filter(Boolean)\n if (childArray.length <= 1) return children\n\n const result: React.ReactNode[] = []\n childArray.forEach((child, index) => {\n result.push(child)\n if (index < childArray.length - 1) {\n result.push(\n <span key={`split-${index}`} className=\"flex-shrink-0\">\n {split}\n </span>\n )\n }\n })\n return result\n }\n\n return <div className={classes} style={combinedStyle} {...rest}>{renderChildren()}</div>\n}\n"],"names":["gapClasses","alignClasses","justifyClasses","Space","direction","size","align","justify","wrap","split","className","style","children","rest","isNumericSize","gapClass","alignClass","justifyClass","classes","combinedStyle","jsx","childArray","React","result","child","index"],"mappings":";;AAYA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAe;AAAA,EACnB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX,GAEMC,IAAiB;AAAA,EACrB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV,GAEaC,IAA8B,CAAC;AAAA,EAC1C,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAgB,OAAOT,KAAS,UAChCU,IAAWD,IAAgB,KAAKd,EAAWK,CAAI,GAC/CW,IAAaV,IAAQL,EAAaK,CAAK,IAAI,IAC3CW,IAAeV,IAAUL,EAAeK,CAAO,IAAI,IAInDW,IAAU;AAAA,IACd;AAAA,IAHqBd,MAAc,eAAe,aAAa;AAAA,IAK/DW;AAAA,IACAC;AAAA,IACAC;AAAA,IARgBT,IAAO,cAAc;AAAA,IAUrCE;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAEpBS,IAAqC;AAAA,IACzC,GAAGR;AAAA,IACH,GAAIG,IAAgB,EAAE,KAAK,GAAGT,CAAI,SAAS,CAAA;AAAA,EAAC;AAwB9C,SAAO,gBAAAe,EAAC,SAAI,WAAWF,GAAS,OAAOC,GAAgB,GAAGN,GAAO,WApB1C,MAAM;AAC3B,QAAI,CAACJ,EAAO,QAAOG;AAEnB,UAAMS,IAAaC,EAAM,SAAS,QAAQV,CAAQ,EAAE,OAAO,OAAO;AAClE,QAAIS,EAAW,UAAU,EAAG,QAAOT;AAEnC,UAAMW,IAA4B,CAAA;AAClC,WAAAF,EAAW,QAAQ,CAACG,GAAOC,MAAU;AACnC,MAAAF,EAAO,KAAKC,CAAK,GACbC,IAAQJ,EAAW,SAAS,KAC9BE,EAAO;AAAA,0BACJ,QAAA,EAA4B,WAAU,iBACpC,UAAAd,KADQ,SAASgB,CAAK,EAEzB;AAAA,MAAA;AAAA,IAGN,CAAC,GACMF;AAAA,EACT,GAEiE,EAAe,CAAE;AACpF;"}
1
+ {"version":3,"file":"index76.js","sources":["../src/components/Splitter.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react'\n\nexport interface SplitterPanelProps {\n children: React.ReactNode\n defaultSize?: number\n size?: number\n minSize?: number\n maxSize?: number\n collapsible?: boolean\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapse?: (collapsed: boolean) => void\n resizable?: boolean\n className?: string\n}\n\nexport interface SplitterProps {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n sizes?: number[]\n defaultSizes?: number[]\n onSizesChange?: (sizes: number[]) => void\n gutterSize?: number\n minSize?: number\n className?: string\n}\n\nconst Panel: React.FC<SplitterPanelProps> = ({ children }) => {\n return <>{children}</>\n}\n\nexport const Splitter: React.FC<SplitterProps> & { Panel: typeof Panel } = ({\n children,\n direction = 'horizontal',\n sizes,\n defaultSizes,\n onSizesChange,\n gutterSize = 8,\n minSize = 50,\n className = '',\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const panelsRef = useRef<(HTMLDivElement | null)[]>([])\n const draggingRef = useRef<{ index: number; startPos: number; startSizes: number[] } | null>(null)\n\n // Extract panel props from children\n const panels = React.Children.toArray(children).filter(\n (child): child is React.ReactElement<SplitterPanelProps> =>\n React.isValidElement(child)\n )\n\n const panelCount = panels.length\n\n // Track collapsed state for each panel\n const [collapsedStates, setCollapsedStates] = useState<boolean[]>(() =>\n panels.map((panel) => panel.props.defaultCollapsed ?? panel.props.collapsed ?? false)\n )\n\n // Store sizes before collapse for restoration\n const sizesBeforeCollapseRef = useRef<number[]>([])\n\n // Initialize sizes from panel props or defaults\n const getInitialSizes = useCallback(() => {\n // First check if any panels have defaultSize\n const panelDefaultSizes = panels.map((panel) => panel.props.defaultSize)\n const hasAnyPanelSize = panelDefaultSizes.some((s) => s !== undefined)\n\n if (defaultSizes && defaultSizes.length === panelCount) {\n return defaultSizes\n }\n\n if (hasAnyPanelSize) {\n // Calculate sizes from panel props\n const definedTotal = panelDefaultSizes.reduce<number>((sum, s) => sum + (s ?? 0), 0)\n const undefinedCount = panelDefaultSizes.filter((s) => s === undefined).length\n const remainingSize = Math.max(0, 100 - definedTotal)\n const sizePerUndefined = undefinedCount > 0 ? remainingSize / undefinedCount : 0\n\n return panelDefaultSizes.map((s) => s ?? sizePerUndefined)\n }\n\n // Equal distribution\n const equalSize = 100 / panelCount\n return Array(panelCount).fill(equalSize)\n }, [defaultSizes, panelCount, panels])\n\n const [internalSizes, setInternalSizes] = useState<number[]>(getInitialSizes)\n\n // Handle controlled sizes from panel props\n const getControlledSizes = useCallback(() => {\n const panelSizes = panels.map((panel) => panel.props.size)\n const hasControlledPanel = panelSizes.some((s) => s !== undefined)\n\n if (!hasControlledPanel) return null\n\n // Mix controlled and uncontrolled\n const definedTotal = panelSizes.reduce<number>((sum, s) => sum + (s ?? 0), 0)\n const undefinedCount = panelSizes.filter((s) => s === undefined).length\n const remainingSize = Math.max(0, 100 - definedTotal)\n const sizePerUndefined = undefinedCount > 0 ? remainingSize / undefinedCount : 0\n\n return panelSizes.map((s, i) => s ?? internalSizes[i] ?? sizePerUndefined)\n }, [panels, internalSizes])\n\n const currentSizes = sizes || getControlledSizes() || internalSizes\n\n // Update internal sizes when panel count changes\n useEffect(() => {\n if (!sizes && internalSizes.length !== panelCount) {\n setInternalSizes(getInitialSizes())\n }\n }, [panelCount, sizes, internalSizes.length, getInitialSizes])\n\n // Sync controlled collapsed states from props\n useEffect(() => {\n const newCollapsedStates = panels.map((panel, i) =>\n panel.props.collapsed ?? collapsedStates[i] ?? false\n )\n const hasChange = newCollapsedStates.some((s, i) => s !== collapsedStates[i])\n if (hasChange) {\n setCollapsedStates(newCollapsedStates)\n }\n }, [panels.map(p => p.props.collapsed).join(',')])\n\n const updateSizes = useCallback(\n (newSizes: number[]) => {\n if (!sizes) {\n setInternalSizes(newSizes)\n }\n onSizesChange?.(newSizes)\n },\n [sizes, onSizesChange]\n )\n\n const toggleCollapse = useCallback(\n (panelIndex: number) => {\n const panel = panels[panelIndex]\n if (!panel?.props.collapsible) return\n\n const isCurrentlyCollapsed = collapsedStates[panelIndex]\n const newCollapsed = !isCurrentlyCollapsed\n\n // Update collapsed state\n const newCollapsedStates = [...collapsedStates]\n newCollapsedStates[panelIndex] = newCollapsed\n setCollapsedStates(newCollapsedStates)\n\n // Call panel's onCollapse callback\n panel.props.onCollapse?.(newCollapsed)\n\n // Adjust sizes\n if (newCollapsed) {\n // Store current sizes before collapse\n sizesBeforeCollapseRef.current = [...currentSizes]\n\n // Collapse: set to minimum (we'll use 0 for collapsed)\n const collapsedSize = 0\n const sizeToRedistribute = currentSizes[panelIndex] - collapsedSize\n\n // Find panels that can receive the size\n const otherPanels = currentSizes\n .map((s, i) => ({ size: s, index: i }))\n .filter((_, i) => i !== panelIndex && !newCollapsedStates[i])\n\n if (otherPanels.length > 0) {\n const sizePerPanel = sizeToRedistribute / otherPanels.length\n const newSizes = currentSizes.map((s, i) => {\n if (i === panelIndex) return collapsedSize\n if (!newCollapsedStates[i]) return s + sizePerPanel\n return s\n })\n updateSizes(newSizes)\n }\n } else {\n // Expand: restore previous size\n const previousSize = sizesBeforeCollapseRef.current[panelIndex] || (100 / panelCount)\n\n // Take size from other panels proportionally\n const otherPanels = currentSizes\n .map((s, i) => ({ size: s, index: i }))\n .filter((_, i) => i !== panelIndex && !newCollapsedStates[i])\n\n const totalOtherSize = otherPanels.reduce((sum, p) => sum + p.size, 0)\n\n if (totalOtherSize > 0) {\n const newSizes = currentSizes.map((s, i) => {\n if (i === panelIndex) return previousSize\n if (!newCollapsedStates[i]) {\n const proportion = s / totalOtherSize\n return s - previousSize * proportion\n }\n return s\n })\n updateSizes(newSizes)\n }\n }\n },\n [panels, collapsedStates, currentSizes, panelCount, updateSizes]\n )\n\n const handleMouseDown = useCallback(\n (index: number, e: React.MouseEvent) => {\n // Check if either panel is non-resizable\n const panel1Props = panels[index]?.props || {}\n const panel2Props = panels[index + 1]?.props || {}\n\n if (panel1Props.resizable === false || panel2Props.resizable === false) {\n return // Don't allow dragging\n }\n\n // Don't allow dragging if either panel is collapsed\n if (collapsedStates[index] || collapsedStates[index + 1]) {\n return\n }\n\n e.preventDefault()\n const startPos = direction === 'horizontal' ? e.clientX : e.clientY\n draggingRef.current = {\n index,\n startPos,\n startSizes: [...currentSizes],\n }\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!draggingRef.current || !containerRef.current) return\n\n const { index: dragIndex, startPos: dragStartPos, startSizes } = draggingRef.current\n const containerRect = containerRef.current.getBoundingClientRect()\n const containerSize = direction === 'horizontal' ? containerRect.width : containerRect.height\n const currentPos = direction === 'horizontal' ? moveEvent.clientX : moveEvent.clientY\n\n // Calculate delta as percentage\n const gutterCount = panelCount - 1\n const totalGutterSize = gutterCount * gutterSize\n const availableSize = containerSize - totalGutterSize\n const deltaPixels = currentPos - dragStartPos\n const deltaPercent = (deltaPixels / availableSize) * 100\n\n // Get min sizes for panels\n const panel1Props = panels[dragIndex]?.props || {}\n const panel2Props = panels[dragIndex + 1]?.props || {}\n const minSize1 = panel1Props.minSize ?? minSize\n const minSize2 = panel2Props.minSize ?? minSize\n const minPercent1 = (minSize1 / availableSize) * 100\n const minPercent2 = (minSize2 / availableSize) * 100\n\n // Calculate new sizes\n let newSize1 = startSizes[dragIndex] + deltaPercent\n let newSize2 = startSizes[dragIndex + 1] - deltaPercent\n\n // Apply min constraints\n if (newSize1 < minPercent1) {\n newSize1 = minPercent1\n newSize2 = startSizes[dragIndex] + startSizes[dragIndex + 1] - minPercent1\n }\n if (newSize2 < minPercent2) {\n newSize2 = minPercent2\n newSize1 = startSizes[dragIndex] + startSizes[dragIndex + 1] - minPercent2\n }\n\n // Apply max constraints\n const maxSize1 = panel1Props.maxSize\n const maxSize2 = panel2Props.maxSize\n if (maxSize1) {\n const maxPercent1 = (maxSize1 / availableSize) * 100\n if (newSize1 > maxPercent1) {\n newSize1 = maxPercent1\n newSize2 = startSizes[dragIndex] + startSizes[dragIndex + 1] - maxPercent1\n }\n }\n if (maxSize2) {\n const maxPercent2 = (maxSize2 / availableSize) * 100\n if (newSize2 > maxPercent2) {\n newSize2 = maxPercent2\n newSize1 = startSizes[dragIndex] + startSizes[dragIndex + 1] - maxPercent2\n }\n }\n\n const newSizes = [...startSizes]\n newSizes[dragIndex] = newSize1\n newSizes[dragIndex + 1] = newSize2\n updateSizes(newSizes)\n }\n\n const handleMouseUp = () => {\n draggingRef.current = null\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n document.body.style.cursor = direction === 'horizontal' ? 'col-resize' : 'row-resize'\n document.body.style.userSelect = 'none'\n },\n [direction, currentSizes, panelCount, gutterSize, panels, minSize, updateSizes, collapsedStates]\n )\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent) => {\n // Don't allow keyboard resize if either panel is collapsed\n if (collapsedStates[index] || collapsedStates[index + 1]) {\n return\n }\n\n const step = e.shiftKey ? 10 : 1\n let delta = 0\n\n if (direction === 'horizontal') {\n if (e.key === 'ArrowLeft') delta = -step\n else if (e.key === 'ArrowRight') delta = step\n } else {\n if (e.key === 'ArrowUp') delta = -step\n else if (e.key === 'ArrowDown') delta = step\n }\n\n if (delta !== 0) {\n e.preventDefault()\n const newSizes = [...currentSizes]\n const minPercent = 5 // Minimum 5% when using keyboard\n\n let newSize1 = newSizes[index] + delta\n let newSize2 = newSizes[index + 1] - delta\n\n if (newSize1 >= minPercent && newSize2 >= minPercent) {\n newSizes[index] = newSize1\n newSizes[index + 1] = newSize2\n updateSizes(newSizes)\n }\n }\n },\n [direction, currentSizes, updateSizes, collapsedStates]\n )\n\n const isHorizontal = direction === 'horizontal'\n\n // Determine if gutter should show collapse buttons\n const getCollapseConfig = (index: number) => {\n const panel1 = panels[index]\n const panel2 = panels[index + 1]\n const panel1Collapsible = panel1?.props.collapsible\n const panel2Collapsible = panel2?.props.collapsible\n const panel1Collapsed = collapsedStates[index]\n const panel2Collapsed = collapsedStates[index + 1]\n\n return {\n showStart: panel1Collapsible && !panel2Collapsed,\n showEnd: panel2Collapsible && !panel1Collapsed,\n panel1Collapsed,\n panel2Collapsed,\n }\n }\n\n return (\n <div\n ref={containerRef}\n className={`flex ${isHorizontal ? 'flex-row' : 'flex-col'} h-full w-full ${className}`}\n >\n {panels.map((panel, index) => {\n const panelProps = panel.props\n const isLast = index === panels.length - 1\n const isCollapsed = collapsedStates[index]\n const canResize = panelProps.resizable !== false && !isCollapsed\n\n return (\n <React.Fragment key={index}>\n <div\n ref={(el) => {\n panelsRef.current[index] = el\n }}\n className={`overflow-auto ${panelProps.className || ''}`}\n style={{\n [isHorizontal ? 'width' : 'height']: isCollapsed\n ? '0px'\n : `calc(${currentSizes[index]}% - ${((panelCount - 1) * gutterSize) / panelCount}px)`,\n flexShrink: 0,\n overflow: isCollapsed ? 'hidden' : 'auto',\n }}\n data-collapsed={isCollapsed}\n >\n {panelProps.children}\n </div>\n {!isLast && (\n <div\n role=\"separator\"\n aria-orientation={isHorizontal ? 'vertical' : 'horizontal'}\n aria-valuenow={Math.round(currentSizes[index])}\n tabIndex={canResize ? 0 : -1}\n className={`\n flex-shrink-0 bg-base-300 transition-colors duration-150 relative group\n ${canResize ? 'hover:bg-primary/30 active:bg-primary/50' : ''}\n ${canResize ? (isHorizontal ? 'cursor-col-resize' : 'cursor-row-resize') : 'cursor-default'}\n `}\n style={{\n [isHorizontal ? 'width' : 'height']: `${gutterSize}px`,\n }}\n onMouseDown={(e) => handleMouseDown(index, e)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n >\n {/* Collapse buttons */}\n {(() => {\n const { showStart, showEnd, panel1Collapsed, panel2Collapsed } = getCollapseConfig(index)\n\n if (!showStart && !showEnd) {\n // Just show grip indicator\n return (\n <div\n className={`\n absolute inset-0 flex items-center justify-center\n ${isHorizontal ? 'flex-col gap-0.5' : 'flex-row gap-0.5'}\n `}\n >\n <div className=\"w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60\" />\n <div className=\"w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60\" />\n <div className=\"w-1 h-1 rounded-full bg-base-content/30 group-hover:bg-primary/60\" />\n </div>\n )\n }\n\n return (\n <div\n className={`\n absolute inset-0 flex items-center justify-center\n ${isHorizontal ? 'flex-col' : 'flex-row'}\n `}\n >\n {showStart && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n toggleCollapse(index)\n }}\n className={`\n p-0.5 rounded hover:bg-base-content/20 transition-colors\n ${isHorizontal ? '' : ''}\n `}\n aria-label={panel1Collapsed ? 'Expand panel' : 'Collapse panel'}\n >\n <svg\n className={`w-3 h-3 text-base-content/50 hover:text-base-content transition-transform ${\n panel1Collapsed\n ? isHorizontal ? 'rotate-180' : '-rotate-90'\n : isHorizontal ? 'rotate-0' : 'rotate-90'\n }`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n {showEnd && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n toggleCollapse(index + 1)\n }}\n className={`\n p-0.5 rounded hover:bg-base-content/20 transition-colors\n `}\n aria-label={panel2Collapsed ? 'Expand panel' : 'Collapse panel'}\n >\n <svg\n className={`w-3 h-3 text-base-content/50 hover:text-base-content transition-transform ${\n panel2Collapsed\n ? isHorizontal ? 'rotate-0' : 'rotate-90'\n : isHorizontal ? 'rotate-180' : '-rotate-90'\n }`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n </div>\n )\n })()}\n </div>\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n}\n\nSplitter.Panel = Panel\n"],"names":["Panel","children","Splitter","direction","sizes","defaultSizes","onSizesChange","gutterSize","minSize","className","containerRef","useRef","panelsRef","draggingRef","panels","React","child","panelCount","collapsedStates","setCollapsedStates","useState","panel","sizesBeforeCollapseRef","getInitialSizes","useCallback","panelDefaultSizes","hasAnyPanelSize","definedTotal","sum","s","undefinedCount","remainingSize","sizePerUndefined","equalSize","internalSizes","setInternalSizes","getControlledSizes","panelSizes","i","currentSizes","useEffect","newCollapsedStates","p","updateSizes","newSizes","toggleCollapse","panelIndex","newCollapsed","collapsedSize","sizeToRedistribute","otherPanels","_","sizePerPanel","previousSize","totalOtherSize","proportion","handleMouseDown","index","e","panel1Props","panel2Props","startPos","handleMouseMove","moveEvent","dragIndex","dragStartPos","startSizes","containerRect","containerSize","currentPos","totalGutterSize","availableSize","deltaPercent","minSize1","minSize2","minPercent1","minPercent2","newSize1","newSize2","maxSize1","maxSize2","maxPercent1","maxPercent2","handleMouseUp","handleKeyDown","step","delta","minPercent","isHorizontal","getCollapseConfig","panel1","panel2","panel1Collapsible","panel2Collapsible","panel1Collapsed","panel2Collapsed","jsx","panelProps","isLast","isCollapsed","canResize","jsxs","el","showStart","showEnd"],"mappings":"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"}