asterui 0.12.19 → 0.12.21

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 (204) hide show
  1. package/dist/components/Code.d.ts +2 -0
  2. package/dist/components/CopyButton.d.ts +34 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +205 -203
  5. package/dist/index.js.map +1 -1
  6. package/dist/index10.js +91 -121
  7. package/dist/index10.js.map +1 -1
  8. package/dist/index100.js +5 -13
  9. package/dist/index100.js.map +1 -1
  10. package/dist/index101.js +11 -43
  11. package/dist/index101.js.map +1 -1
  12. package/dist/index102.js +44 -11
  13. package/dist/index102.js.map +1 -1
  14. package/dist/index103.js +10 -12
  15. package/dist/index103.js.map +1 -1
  16. package/dist/index104.js +14 -7
  17. package/dist/index104.js.map +1 -1
  18. package/dist/index105.js +7 -12
  19. package/dist/index105.js.map +1 -1
  20. package/dist/index106.js +11 -29
  21. package/dist/index106.js.map +1 -1
  22. package/dist/index107.js +29 -16
  23. package/dist/index107.js.map +1 -1
  24. package/dist/index108.js +21 -0
  25. package/dist/index108.js.map +1 -0
  26. package/dist/index11.js +123 -30
  27. package/dist/index11.js.map +1 -1
  28. package/dist/index12.js +28 -263
  29. package/dist/index12.js.map +1 -1
  30. package/dist/index13.js +257 -105
  31. package/dist/index13.js.map +1 -1
  32. package/dist/index14.js +108 -153
  33. package/dist/index14.js.map +1 -1
  34. package/dist/index15.js +154 -146
  35. package/dist/index15.js.map +1 -1
  36. package/dist/index16.js +150 -5
  37. package/dist/index16.js.map +1 -1
  38. package/dist/index17.js +5 -71
  39. package/dist/index17.js.map +1 -1
  40. package/dist/index18.js +70 -24
  41. package/dist/index18.js.map +1 -1
  42. package/dist/index19.js +23 -194
  43. package/dist/index19.js.map +1 -1
  44. package/dist/index20.js +188 -106
  45. package/dist/index20.js.map +1 -1
  46. package/dist/index21.js +107 -177
  47. package/dist/index21.js.map +1 -1
  48. package/dist/index22.js +181 -107
  49. package/dist/index22.js.map +1 -1
  50. package/dist/index23.js +110 -19
  51. package/dist/index23.js.map +1 -1
  52. package/dist/index24.js +17 -41
  53. package/dist/index24.js.map +1 -1
  54. package/dist/index25.js +43 -32
  55. package/dist/index25.js.map +1 -1
  56. package/dist/index26.js +30 -170
  57. package/dist/index26.js.map +1 -1
  58. package/dist/index27.js +171 -40
  59. package/dist/index27.js.map +1 -1
  60. package/dist/index28.js +41 -17
  61. package/dist/index28.js.map +1 -1
  62. package/dist/index29.js +17 -33
  63. package/dist/index29.js.map +1 -1
  64. package/dist/index30.js +33 -52
  65. package/dist/index30.js.map +1 -1
  66. package/dist/index31.js +50 -61
  67. package/dist/index31.js.map +1 -1
  68. package/dist/index32.js +60 -181
  69. package/dist/index32.js.map +1 -1
  70. package/dist/index33.js +184 -18
  71. package/dist/index33.js.map +1 -1
  72. package/dist/index34.js +15 -271
  73. package/dist/index34.js.map +1 -1
  74. package/dist/index35.js +270 -1083
  75. package/dist/index35.js.map +1 -1
  76. package/dist/index36.js +1086 -16
  77. package/dist/index36.js.map +1 -1
  78. package/dist/index37.js +17 -17
  79. package/dist/index37.js.map +1 -1
  80. package/dist/index38.js +15 -120
  81. package/dist/index38.js.map +1 -1
  82. package/dist/index39.js +119 -37
  83. package/dist/index39.js.map +1 -1
  84. package/dist/index40.js +40 -398
  85. package/dist/index40.js.map +1 -1
  86. package/dist/index41.js +390 -89
  87. package/dist/index41.js.map +1 -1
  88. package/dist/index42.js +91 -253
  89. package/dist/index42.js.map +1 -1
  90. package/dist/index43.js +249 -145
  91. package/dist/index43.js.map +1 -1
  92. package/dist/index44.js +155 -15
  93. package/dist/index44.js.map +1 -1
  94. package/dist/index45.js +15 -17
  95. package/dist/index45.js.map +1 -1
  96. package/dist/index46.js +16 -136
  97. package/dist/index46.js.map +1 -1
  98. package/dist/index47.js +134 -10
  99. package/dist/index47.js.map +1 -1
  100. package/dist/index48.js +13 -35
  101. package/dist/index48.js.map +1 -1
  102. package/dist/index49.js +35 -34
  103. package/dist/index49.js.map +1 -1
  104. package/dist/index50.js +34 -81
  105. package/dist/index50.js.map +1 -1
  106. package/dist/index51.js +71 -166
  107. package/dist/index51.js.map +1 -1
  108. package/dist/index52.js +167 -144
  109. package/dist/index52.js.map +1 -1
  110. package/dist/index53.js +152 -11
  111. package/dist/index53.js.map +1 -1
  112. package/dist/index54.js +10 -20
  113. package/dist/index54.js.map +1 -1
  114. package/dist/index55.js +55 -12
  115. package/dist/index55.js.map +1 -1
  116. package/dist/index56.js +14 -7
  117. package/dist/index56.js.map +1 -1
  118. package/dist/index57.js +6 -333
  119. package/dist/index57.js.map +1 -1
  120. package/dist/index58.js +334 -47
  121. package/dist/index58.js.map +1 -1
  122. package/dist/index59.js +47 -122
  123. package/dist/index59.js.map +1 -1
  124. package/dist/index60.js +120 -108
  125. package/dist/index60.js.map +1 -1
  126. package/dist/index61.js +107 -167
  127. package/dist/index61.js.map +1 -1
  128. package/dist/index62.js +167 -29
  129. package/dist/index62.js.map +1 -1
  130. package/dist/index63.js +30 -120
  131. package/dist/index63.js.map +1 -1
  132. package/dist/index64.js +116 -80
  133. package/dist/index64.js.map +1 -1
  134. package/dist/index65.js +85 -19
  135. package/dist/index65.js.map +1 -1
  136. package/dist/index66.js +19 -73
  137. package/dist/index66.js.map +1 -1
  138. package/dist/index67.js +71 -54
  139. package/dist/index67.js.map +1 -1
  140. package/dist/index68.js +56 -44
  141. package/dist/index68.js.map +1 -1
  142. package/dist/index69.js +42 -49
  143. package/dist/index69.js.map +1 -1
  144. package/dist/index70.js +50 -121
  145. package/dist/index70.js.map +1 -1
  146. package/dist/index71.js +118 -102
  147. package/dist/index71.js.map +1 -1
  148. package/dist/index72.js +105 -72
  149. package/dist/index72.js.map +1 -1
  150. package/dist/index73.js +73 -67
  151. package/dist/index73.js.map +1 -1
  152. package/dist/index74.js +66 -19
  153. package/dist/index74.js.map +1 -1
  154. package/dist/index75.js +18 -55
  155. package/dist/index75.js.map +1 -1
  156. package/dist/index76.js +55 -251
  157. package/dist/index76.js.map +1 -1
  158. package/dist/index77.js +254 -22
  159. package/dist/index77.js.map +1 -1
  160. package/dist/index78.js +22 -31
  161. package/dist/index78.js.map +1 -1
  162. package/dist/index79.js +30 -93
  163. package/dist/index79.js.map +1 -1
  164. package/dist/index80.js +89 -324
  165. package/dist/index80.js.map +1 -1
  166. package/dist/index81.js +322 -73
  167. package/dist/index81.js.map +1 -1
  168. package/dist/index82.js +79 -39
  169. package/dist/index82.js.map +1 -1
  170. package/dist/index83.js +40 -23
  171. package/dist/index83.js.map +1 -1
  172. package/dist/index84.js +21 -93
  173. package/dist/index84.js.map +1 -1
  174. package/dist/index85.js +87 -148
  175. package/dist/index85.js.map +1 -1
  176. package/dist/index86.js +147 -152
  177. package/dist/index86.js.map +1 -1
  178. package/dist/index87.js +159 -63
  179. package/dist/index87.js.map +1 -1
  180. package/dist/index88.js +65 -35
  181. package/dist/index88.js.map +1 -1
  182. package/dist/index89.js +35 -234
  183. package/dist/index89.js.map +1 -1
  184. package/dist/index90.js +231 -31
  185. package/dist/index90.js.map +1 -1
  186. package/dist/index91.js +34 -210
  187. package/dist/index91.js.map +1 -1
  188. package/dist/index92.js +195 -198
  189. package/dist/index92.js.map +1 -1
  190. package/dist/index93.js +159 -241
  191. package/dist/index93.js.map +1 -1
  192. package/dist/index94.js +283 -166
  193. package/dist/index94.js.map +1 -1
  194. package/dist/index95.js +173 -253
  195. package/dist/index95.js.map +1 -1
  196. package/dist/index96.js +253 -121
  197. package/dist/index96.js.map +1 -1
  198. package/dist/index97.js +126 -14
  199. package/dist/index97.js.map +1 -1
  200. package/dist/index98.js +12 -31
  201. package/dist/index98.js.map +1 -1
  202. package/dist/index99.js +32 -5
  203. package/dist/index99.js.map +1 -1
  204. package/package.json +1 -1
package/dist/index72.js CHANGED
@@ -1,77 +1,110 @@
1
- import { jsx as s, jsxs as C } from "react/jsx-runtime";
2
- import { forwardRef as N, useRef as y } from "react";
3
- const R = N(
4
- ({
5
- size: e,
6
- color: r,
7
- status: o,
8
- ghost: b = !1,
9
- bordered: p = !0,
10
- floatingLabel: a,
11
- addonBefore: l,
12
- addonAfter: t,
13
- className: i = "",
14
- children: f,
15
- ...m
16
- }, w) => {
17
- const h = y(null), u = w || h, c = {
18
- xs: "select-xs",
19
- sm: "select-sm",
20
- md: "select-md",
21
- lg: "select-lg",
22
- xl: "select-xl"
23
- }, d = o ? {
24
- error: "select-error",
25
- warning: "select-warning"
26
- }[o] : r ? {
27
- neutral: "select-neutral",
28
- primary: "select-primary",
29
- secondary: "select-secondary",
30
- accent: "select-accent",
31
- info: "select-info",
32
- success: "select-success",
33
- warning: "select-warning",
34
- error: "select-error"
35
- }[r] : "", g = l || t, j = g ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", i].filter(Boolean).join(" ") : [
36
- "select",
37
- "w-full",
38
- p && "select-bordered",
39
- b && "select-ghost",
40
- e && c[e],
41
- d,
42
- i
43
- ].filter(Boolean).join(" "), x = /* @__PURE__ */ s("select", { ref: u, className: j, ...m, children: f });
44
- if (a) {
45
- const n = [
46
- "floating-label",
47
- e && c[e]
48
- ].filter(Boolean).join(" ");
49
- return /* @__PURE__ */ C("label", { className: n, children: [
50
- /* @__PURE__ */ s("select", { ref: u, className: "select select-bordered w-full", ...m, children: f }),
51
- /* @__PURE__ */ s("span", { children: a })
52
- ] });
1
+ import { jsxs as d, jsx as e } from "react/jsx-runtime";
2
+ const m = {
3
+ success: /* @__PURE__ */ e(
4
+ "svg",
5
+ {
6
+ className: "w-16 h-16 text-success",
7
+ fill: "none",
8
+ viewBox: "0 0 24 24",
9
+ stroke: "currentColor",
10
+ children: /* @__PURE__ */ e(
11
+ "path",
12
+ {
13
+ strokeLinecap: "round",
14
+ strokeLinejoin: "round",
15
+ strokeWidth: 2,
16
+ d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
17
+ }
18
+ )
53
19
  }
54
- if (g) {
55
- const n = [
56
- "select",
57
- "select-bordered",
58
- "flex",
59
- "items-center",
60
- "gap-2",
61
- e && c[e],
62
- d
63
- ].filter(Boolean).join(" ");
64
- return /* @__PURE__ */ C("label", { className: n, children: [
65
- l && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: l }),
66
- x,
67
- t && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: t })
68
- ] });
20
+ ),
21
+ error: /* @__PURE__ */ e(
22
+ "svg",
23
+ {
24
+ className: "w-16 h-16 text-error",
25
+ fill: "none",
26
+ viewBox: "0 0 24 24",
27
+ stroke: "currentColor",
28
+ children: /* @__PURE__ */ e(
29
+ "path",
30
+ {
31
+ strokeLinecap: "round",
32
+ strokeLinejoin: "round",
33
+ strokeWidth: 2,
34
+ d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
35
+ }
36
+ )
69
37
  }
70
- return x;
71
- }
72
- );
73
- R.displayName = "Select";
38
+ ),
39
+ info: /* @__PURE__ */ e(
40
+ "svg",
41
+ {
42
+ className: "w-16 h-16 text-info",
43
+ fill: "none",
44
+ viewBox: "0 0 24 24",
45
+ stroke: "currentColor",
46
+ children: /* @__PURE__ */ e(
47
+ "path",
48
+ {
49
+ strokeLinecap: "round",
50
+ strokeLinejoin: "round",
51
+ strokeWidth: 2,
52
+ d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
53
+ }
54
+ )
55
+ }
56
+ ),
57
+ warning: /* @__PURE__ */ e(
58
+ "svg",
59
+ {
60
+ className: "w-16 h-16 text-warning",
61
+ fill: "none",
62
+ viewBox: "0 0 24 24",
63
+ stroke: "currentColor",
64
+ children: /* @__PURE__ */ e(
65
+ "path",
66
+ {
67
+ strokeLinecap: "round",
68
+ strokeLinejoin: "round",
69
+ strokeWidth: 2,
70
+ d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
71
+ }
72
+ )
73
+ }
74
+ ),
75
+ 404: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "404" }),
76
+ 403: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "403" }),
77
+ 500: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "500" })
78
+ }, x = ({
79
+ status: t = "info",
80
+ title: n,
81
+ subTitle: s,
82
+ icon: o,
83
+ extra: r,
84
+ children: l,
85
+ className: i = "",
86
+ ...c
87
+ }) => {
88
+ const a = o !== void 0 ? o : m[t];
89
+ return /* @__PURE__ */ d(
90
+ "div",
91
+ {
92
+ className: `w-full flex flex-col items-center justify-center text-center p-8 ${i}`,
93
+ "data-status": t,
94
+ ...c,
95
+ children: [
96
+ a && /* @__PURE__ */ e("div", { className: "mb-6", children: a }),
97
+ n && /* @__PURE__ */ e("div", { className: "text-2xl font-semibold mb-2 text-base-content", children: n }),
98
+ s && /* @__PURE__ */ e("div", { className: "text-base text-base-content/70 mb-6 max-w-md", children: s }),
99
+ l && /* @__PURE__ */ e("div", { className: "mb-6 max-w-2xl", children: l }),
100
+ r && /* @__PURE__ */ e("div", { className: "flex gap-2", children: r })
101
+ ]
102
+ }
103
+ );
104
+ };
105
+ x.displayName = "Result";
74
106
  export {
75
- R as Select
107
+ x as Result,
108
+ x as default
76
109
  };
77
110
  //# sourceMappingURL=index72.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index72.js","sources":["../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react'\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** Text/element before select (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after select (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n className?: string\n children?: React.ReactNode\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n floatingLabel,\n addonBefore,\n addonAfter,\n className = '',\n children,\n ...props\n },\n ref\n ) => {\n const innerRef = useRef<HTMLSelectElement>(null)\n const selectRef = (ref as React.RefObject<HTMLSelectElement>) || innerRef\n\n const sizeClasses = {\n xs: 'select-xs',\n sm: 'select-sm',\n md: 'select-md',\n lg: 'select-lg',\n xl: 'select-xl',\n }\n\n const colorClasses = {\n neutral: 'select-neutral',\n primary: 'select-primary',\n secondary: 'select-secondary',\n accent: 'select-accent',\n info: 'select-info',\n success: 'select-success',\n warning: 'select-warning',\n error: 'select-error',\n }\n\n const statusClasses = {\n error: 'select-error',\n warning: 'select-warning',\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n // When wrapped with external addons, the wrapper has the styling\n const hasExternalAddons = addonBefore || addonAfter\n\n const selectClasses = hasExternalAddons\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n 'select',\n 'w-full',\n bordered && 'select-bordered',\n ghost && 'select-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ].filter(Boolean).join(' ')\n\n // Build the core select element\n const selectElement = (\n <select ref={selectRef} className={selectClasses} {...props}>\n {children}\n </select>\n )\n\n // Wrap with floating label if specified\n if (floatingLabel) {\n const floatingClasses = [\n 'floating-label',\n size && sizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n <select ref={selectRef} className=\"select select-bordered w-full\" {...props}>\n {children}\n </select>\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons if specified\n if (hasExternalAddons) {\n const addonClasses = [\n 'select',\n 'select-bordered',\n 'flex',\n 'items-center',\n 'gap-2',\n size && sizeClasses[size],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses}>\n {addonBefore && <span className=\"text-base-content/70\">{addonBefore}</span>}\n {selectElement}\n {addonAfter && <span className=\"text-base-content/70\">{addonAfter}</span>}\n </label>\n )\n }\n\n return selectElement\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["Select","forwardRef","size","color","status","ghost","bordered","floatingLabel","addonBefore","addonAfter","className","children","props","ref","innerRef","useRef","selectRef","sizeClasses","effectiveColorClass","hasExternalAddons","selectClasses","selectElement","floatingClasses","jsxs","jsx","addonClasses"],"mappings":";;AAmBO,MAAMA,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCC,IAAaH,KAA8CC,GAE3DG,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAoBAC,IAAsBd,IANN;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAIwCA,CAAM,IAAKD,IAjBzC;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,EAS0EA,CAAK,IAAI,IAGtFgB,IAAoBX,KAAeC,GAEnCW,IAAgBD,IAClB,CAAC,QAAQ,kBAAkB,YAAY,gBAAgB,sBAAsBT,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAChH;AAAA,MACE;AAAA,MACA;AAAA,MACAJ,KAAY;AAAA,MACZD,KAAS;AAAA,MACTH,KAAQe,EAAYf,CAAI;AAAA,MACxBgB;AAAA,MACAR;AAAA,IAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAGxBW,sBACH,UAAA,EAAO,KAAKL,GAAW,WAAWI,GAAgB,GAAGR,GACnD,UAAAD,EAAA,CACH;AAIF,QAAIJ,GAAe;AACjB,YAAMe,IAAkB;AAAA,QACtB;AAAA,QACApB,KAAQe,EAAYf,CAAI;AAAA,MAAA,EACxB,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAqB,EAAC,SAAA,EAAM,WAAWD,GAChB,UAAA;AAAA,QAAA,gBAAAE,EAAC,YAAO,KAAKR,GAAW,WAAU,iCAAiC,GAAGJ,GACnE,UAAAD,GACH;AAAA,QACA,gBAAAa,EAAC,UAAM,UAAAjB,EAAA,CAAc;AAAA,MAAA,GACvB;AAAA,IAEJ;AAGA,QAAIY,GAAmB;AACrB,YAAMM,IAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAvB,KAAQe,EAAYf,CAAI;AAAA,QACxBgB;AAAA,MAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAK,EAAC,SAAA,EAAM,WAAWE,GACf,UAAA;AAAA,QAAAjB,KAAe,gBAAAgB,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAhB,GAAY;AAAA,QACnEa;AAAA,QACAZ,KAAc,gBAAAe,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAf,EAAA,CAAW;AAAA,MAAA,GACpE;AAAA,IAEJ;AAEA,WAAOY;AAAA,EACT;AACF;AAEArB,EAAO,cAAc;"}
1
+ {"version":3,"file":"index72.js","sources":["../src/components/Result.tsx"],"sourcesContent":["import React from 'react'\n\nexport type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500'\n\nexport interface ResultProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n status?: ResultStatus\n title?: React.ReactNode\n subTitle?: React.ReactNode\n icon?: React.ReactNode\n extra?: React.ReactNode\n children?: React.ReactNode\n}\n\nconst defaultIcons: Record<ResultStatus, React.ReactNode> = {\n success: (\n <svg\n className=\"w-16 h-16 text-success\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"w-16 h-16 text-error\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n info: (\n <svg\n className=\"w-16 h-16 text-info\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"w-16 h-16 text-warning\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n ),\n '404': (\n <div className=\"text-6xl font-bold text-base-content/40\">404</div>\n ),\n '403': (\n <div className=\"text-6xl font-bold text-base-content/40\">403</div>\n ),\n '500': (\n <div className=\"text-6xl font-bold text-base-content/40\">500</div>\n ),\n}\n\nexport const Result: React.FC<ResultProps> = ({\n status = 'info',\n title,\n subTitle,\n icon,\n extra,\n children,\n className = '',\n ...rest\n}) => {\n const displayIcon = icon !== undefined ? icon : defaultIcons[status]\n\n return (\n <div\n className={`w-full flex flex-col items-center justify-center text-center p-8 ${className}`}\n data-status={status}\n {...rest}\n >\n {displayIcon && <div className=\"mb-6\">{displayIcon}</div>}\n\n {title && (\n <div className=\"text-2xl font-semibold mb-2 text-base-content\">\n {title}\n </div>\n )}\n\n {subTitle && (\n <div className=\"text-base text-base-content/70 mb-6 max-w-md\">\n {subTitle}\n </div>\n )}\n\n {children && <div className=\"mb-6 max-w-2xl\">{children}</div>}\n\n {extra && <div className=\"flex gap-2\">{extra}</div>}\n </div>\n )\n}\n\nResult.displayName = 'Result'\n\nexport default Result\n"],"names":["defaultIcons","jsx","Result","status","title","subTitle","icon","extra","children","className","rest","displayIcon","jsxs"],"mappings":";AAaA,MAAMA,IAAsD;AAAA,EAC1D,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,OACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,MACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,SACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,OAAG;AAAA,EAE9D,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,OAAG;AAAA,EAE9D,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,MAAA,CAAG;AAEhE,GAEaC,IAAgC,CAAC;AAAA,EAC5C,QAAAC,IAAS;AAAA,EACT,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAcL,MAAS,SAAYA,IAAON,EAAaG,CAAM;AAEnE,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,oEAAoEH,CAAS;AAAA,MACxF,eAAaN;AAAA,MACZ,GAAGO;AAAA,MAEH,UAAA;AAAA,QAAAC,KAAe,gBAAAV,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAU,GAAY;AAAA,QAElDP,KACC,gBAAAH,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAG,GACH;AAAA,QAGDC,KACC,gBAAAJ,EAAC,OAAA,EAAI,WAAU,gDACZ,UAAAI,GACH;AAAA,QAGDG,KAAY,gBAAAP,EAAC,OAAA,EAAI,WAAU,kBAAkB,UAAAO,GAAS;AAAA,QAEtDD,KAAS,gBAAAN,EAAC,OAAA,EAAI,WAAU,cAAc,UAAAM,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD;AAEAL,EAAO,cAAc;"}
package/dist/index73.js CHANGED
@@ -1,71 +1,77 @@
1
- import { jsx as b, jsxs as h } from "react/jsx-runtime";
2
- import { useState as p, useCallback as S, createContext as j, useContext as v } from "react";
3
- const C = j(null), I = () => {
4
- const e = v(C);
5
- if (!e)
6
- throw new Error("Segmented.Item must be used within a Segmented component");
7
- return e;
8
- }, V = {
9
- xs: "btn-xs",
10
- sm: "btn-sm",
11
- md: "",
12
- lg: "btn-lg"
13
- }, k = ({
14
- value: e,
15
- disabled: o = !1,
16
- icon: n,
17
- children: l,
18
- className: a = ""
19
- }) => {
20
- const { value: i, onChange: d, size: r, disabled: c } = I(), s = i === e, t = c || o, m = () => {
21
- t || d?.(e);
22
- }, u = [
23
- "join-item",
24
- "btn",
25
- V[r],
26
- s ? "btn-active" : "",
27
- a
28
- ].filter(Boolean).join(" ");
29
- return /* @__PURE__ */ h(
30
- "button",
31
- {
32
- type: "button",
33
- className: u,
34
- disabled: t,
35
- onClick: m,
36
- "aria-pressed": s,
37
- "data-testid": `segmented-item-${e}`,
38
- children: [
39
- n && /* @__PURE__ */ b("span", { className: "mr-1", children: n }),
40
- l
41
- ]
1
+ import { jsx as s, jsxs as C } from "react/jsx-runtime";
2
+ import { forwardRef as N, useRef as y } from "react";
3
+ const R = N(
4
+ ({
5
+ size: e,
6
+ color: r,
7
+ status: o,
8
+ ghost: b = !1,
9
+ bordered: p = !0,
10
+ floatingLabel: a,
11
+ addonBefore: l,
12
+ addonAfter: t,
13
+ className: i = "",
14
+ children: f,
15
+ ...m
16
+ }, w) => {
17
+ const h = y(null), u = w || h, c = {
18
+ xs: "select-xs",
19
+ sm: "select-sm",
20
+ md: "select-md",
21
+ lg: "select-lg",
22
+ xl: "select-xl"
23
+ }, d = o ? {
24
+ error: "select-error",
25
+ warning: "select-warning"
26
+ }[o] : r ? {
27
+ neutral: "select-neutral",
28
+ primary: "select-primary",
29
+ secondary: "select-secondary",
30
+ accent: "select-accent",
31
+ info: "select-info",
32
+ success: "select-success",
33
+ warning: "select-warning",
34
+ error: "select-error"
35
+ }[r] : "", g = l || t, j = g ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", i].filter(Boolean).join(" ") : [
36
+ "select",
37
+ "w-full",
38
+ p && "select-bordered",
39
+ b && "select-ghost",
40
+ e && c[e],
41
+ d,
42
+ i
43
+ ].filter(Boolean).join(" "), x = /* @__PURE__ */ s("select", { ref: u, className: j, ...m, children: f });
44
+ if (a) {
45
+ const n = [
46
+ "floating-label",
47
+ e && c[e]
48
+ ].filter(Boolean).join(" ");
49
+ return /* @__PURE__ */ C("label", { className: n, children: [
50
+ /* @__PURE__ */ s("select", { ref: u, className: "select select-bordered w-full", ...m, children: f }),
51
+ /* @__PURE__ */ s("span", { children: a })
52
+ ] });
42
53
  }
43
- );
44
- }, w = ({
45
- value: e,
46
- defaultValue: o,
47
- onChange: n,
48
- size: l = "md",
49
- block: a = !1,
50
- disabled: i = !1,
51
- className: d = "",
52
- children: r
53
- }) => {
54
- const [c, s] = p(o), t = e !== void 0, m = t ? e : c, u = S(
55
- (g) => {
56
- t || s(g), n?.(g);
57
- },
58
- [t, n]
59
- ), f = {
60
- value: m,
61
- onChange: u,
62
- size: l,
63
- disabled: i
64
- }, x = ["join", a ? "w-full [&>.join-item]:flex-1" : "", d].filter(Boolean).join(" ");
65
- return /* @__PURE__ */ b(C.Provider, { value: f, children: /* @__PURE__ */ b("div", { className: x, role: "group", "data-testid": "segmented", children: r }) });
66
- };
67
- w.Item = k;
54
+ if (g) {
55
+ const n = [
56
+ "select",
57
+ "select-bordered",
58
+ "flex",
59
+ "items-center",
60
+ "gap-2",
61
+ e && c[e],
62
+ d
63
+ ].filter(Boolean).join(" ");
64
+ return /* @__PURE__ */ C("label", { className: n, children: [
65
+ l && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: l }),
66
+ x,
67
+ t && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: t })
68
+ ] });
69
+ }
70
+ return x;
71
+ }
72
+ );
73
+ R.displayName = "Select";
68
74
  export {
69
- w as Segmented
75
+ R as Select
70
76
  };
71
77
  //# sourceMappingURL=index73.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index73.js","sources":["../src/components/Segmented.tsx"],"sourcesContent":["import React, { useState, useCallback, createContext, useContext } from 'react'\n\nexport type SegmentedValue = string | number\n\ninterface SegmentedContextValue {\n value?: SegmentedValue\n onChange?: (value: SegmentedValue) => void\n size: 'xs' | 'sm' | 'md' | 'lg'\n disabled: boolean\n}\n\nconst SegmentedContext = createContext<SegmentedContextValue | null>(null)\n\nconst useSegmentedContext = () => {\n const context = useContext(SegmentedContext)\n if (!context) {\n throw new Error('Segmented.Item must be used within a Segmented component')\n }\n return context\n}\n\nexport interface SegmentedItemProps {\n /** Option value */\n value: SegmentedValue\n /** Disable this option */\n disabled?: boolean\n /** Icon to display before label */\n icon?: React.ReactNode\n /** Label content */\n children: React.ReactNode\n /** Additional CSS class */\n className?: string\n}\n\nconst sizeClasses = {\n xs: 'btn-xs',\n sm: 'btn-sm',\n md: '',\n lg: 'btn-lg',\n}\n\nconst SegmentedItem: React.FC<SegmentedItemProps> = ({\n value,\n disabled: itemDisabled = false,\n icon,\n children,\n className = '',\n}) => {\n const { value: selectedValue, onChange, size, disabled: groupDisabled } = useSegmentedContext()\n\n const isSelected = selectedValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onChange?.(value)\n }\n }\n\n const buttonClasses = [\n 'join-item',\n 'btn',\n sizeClasses[size],\n isSelected ? 'btn-active' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n type=\"button\"\n className={buttonClasses}\n disabled={isDisabled}\n onClick={handleClick}\n aria-pressed={isSelected}\n data-testid={`segmented-item-${value}`}\n >\n {icon && <span className=\"mr-1\">{icon}</span>}\n {children}\n </button>\n )\n}\n\nexport interface SegmentedProps {\n /** Currently selected value (controlled) */\n value?: SegmentedValue\n /** Default selected value (uncontrolled) */\n defaultValue?: SegmentedValue\n /** Callback when selection changes */\n onChange?: (value: SegmentedValue) => void\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Take full width of container */\n block?: boolean\n /** Disable all options */\n disabled?: boolean\n /** Additional CSS class */\n className?: string\n /** Segmented.Item children */\n children: React.ReactNode\n}\n\nexport const Segmented: React.FC<SegmentedProps> & { Item: typeof SegmentedItem } = ({\n value,\n defaultValue,\n onChange,\n size = 'md',\n block = false,\n disabled = false,\n className = '',\n children,\n}) => {\n const [internalValue, setInternalValue] = useState<SegmentedValue | undefined>(defaultValue)\n\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : internalValue\n\n const handleChange = useCallback(\n (newValue: SegmentedValue) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [isControlled, onChange]\n )\n\n const contextValue: SegmentedContextValue = {\n value: currentValue,\n onChange: handleChange,\n size,\n disabled,\n }\n\n const containerClasses = ['join', block ? 'w-full [&>.join-item]:flex-1' : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <SegmentedContext.Provider value={contextValue}>\n <div className={containerClasses} role=\"group\" data-testid=\"segmented\">\n {children}\n </div>\n </SegmentedContext.Provider>\n )\n}\n\nSegmented.Item = SegmentedItem\n"],"names":["SegmentedContext","createContext","useSegmentedContext","context","useContext","sizeClasses","SegmentedItem","value","itemDisabled","icon","children","className","selectedValue","onChange","size","groupDisabled","isSelected","isDisabled","handleClick","buttonClasses","jsxs","jsx","Segmented","defaultValue","block","disabled","internalValue","setInternalValue","useState","isControlled","currentValue","handleChange","useCallback","newValue","contextValue","containerClasses"],"mappings":";;AAWA,MAAMA,IAAmBC,EAA4C,IAAI,GAEnEC,IAAsB,MAAM;AAChC,QAAMC,IAAUC,EAAWJ,CAAgB;AAC3C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,0DAA0D;AAE5E,SAAOA;AACT,GAeME,IAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,UAAUC,IAAe;AAAA,EACzB,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,OAAOC,GAAe,UAAAC,GAAU,MAAAC,GAAM,UAAUC,EAAA,IAAkBb,EAAA,GAEpEc,IAAaJ,MAAkBL,GAC/BU,IAAaF,KAAiBP,GAE9BU,IAAc,MAAM;AACxB,IAAKD,KACHJ,IAAWN,CAAK;AAAA,EAEpB,GAEMY,IAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACAd,EAAYS,CAAI;AAAA,IAChBE,IAAa,eAAe;AAAA,IAC5BL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWD;AAAA,MACX,UAAUF;AAAA,MACV,SAASC;AAAA,MACT,gBAAcF;AAAA,MACd,eAAa,kBAAkBT,CAAK;AAAA,MAEnC,UAAA;AAAA,QAAAE,KAAQ,gBAAAY,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAAZ,GAAK;AAAA,QACrCC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAqBaY,IAAuE,CAAC;AAAA,EACnF,OAAAf;AAAA,EACA,cAAAgB;AAAA,EACA,UAAAV;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAU,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,WAAAd,IAAY;AAAA,EACZ,UAAAD;AACF,MAAM;AACJ,QAAM,CAACgB,GAAeC,CAAgB,IAAIC,EAAqCL,CAAY,GAErFM,IAAetB,MAAU,QACzBuB,IAAeD,IAAetB,IAAQmB,GAEtCK,IAAeC;AAAA,IACnB,CAACC,MAA6B;AAC5B,MAAKJ,KACHF,EAAiBM,CAAQ,GAE3BpB,IAAWoB,CAAQ;AAAA,IACrB;AAAA,IACA,CAACJ,GAAchB,CAAQ;AAAA,EAAA,GAGnBqB,IAAsC;AAAA,IAC1C,OAAOJ;AAAA,IACP,UAAUC;AAAA,IACV,MAAAjB;AAAA,IACA,UAAAW;AAAA,EAAA,GAGIU,IAAmB,CAAC,QAAQX,IAAQ,iCAAiC,IAAIb,CAAS,EACrF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAU,EAACrB,EAAiB,UAAjB,EAA0B,OAAOkC,GAChC,UAAA,gBAAAb,EAAC,OAAA,EAAI,WAAWc,GAAkB,MAAK,SAAQ,eAAY,aACxD,UAAAzB,GACH,GACF;AAEJ;AAEAY,EAAU,OAAOhB;"}
1
+ {"version":3,"file":"index73.js","sources":["../src/components/Select.tsx"],"sourcesContent":["import React, { forwardRef, useRef } from 'react'\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** Text/element before select (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after select (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n className?: string\n children?: React.ReactNode\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n floatingLabel,\n addonBefore,\n addonAfter,\n className = '',\n children,\n ...props\n },\n ref\n ) => {\n const innerRef = useRef<HTMLSelectElement>(null)\n const selectRef = (ref as React.RefObject<HTMLSelectElement>) || innerRef\n\n const sizeClasses = {\n xs: 'select-xs',\n sm: 'select-sm',\n md: 'select-md',\n lg: 'select-lg',\n xl: 'select-xl',\n }\n\n const colorClasses = {\n neutral: 'select-neutral',\n primary: 'select-primary',\n secondary: 'select-secondary',\n accent: 'select-accent',\n info: 'select-info',\n success: 'select-success',\n warning: 'select-warning',\n error: 'select-error',\n }\n\n const statusClasses = {\n error: 'select-error',\n warning: 'select-warning',\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n // When wrapped with external addons, the wrapper has the styling\n const hasExternalAddons = addonBefore || addonAfter\n\n const selectClasses = hasExternalAddons\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n 'select',\n 'w-full',\n bordered && 'select-bordered',\n ghost && 'select-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ].filter(Boolean).join(' ')\n\n // Build the core select element\n const selectElement = (\n <select ref={selectRef} className={selectClasses} {...props}>\n {children}\n </select>\n )\n\n // Wrap with floating label if specified\n if (floatingLabel) {\n const floatingClasses = [\n 'floating-label',\n size && sizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n <select ref={selectRef} className=\"select select-bordered w-full\" {...props}>\n {children}\n </select>\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons if specified\n if (hasExternalAddons) {\n const addonClasses = [\n 'select',\n 'select-bordered',\n 'flex',\n 'items-center',\n 'gap-2',\n size && sizeClasses[size],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses}>\n {addonBefore && <span className=\"text-base-content/70\">{addonBefore}</span>}\n {selectElement}\n {addonAfter && <span className=\"text-base-content/70\">{addonAfter}</span>}\n </label>\n )\n }\n\n return selectElement\n }\n)\n\nSelect.displayName = 'Select'\n"],"names":["Select","forwardRef","size","color","status","ghost","bordered","floatingLabel","addonBefore","addonAfter","className","children","props","ref","innerRef","useRef","selectRef","sizeClasses","effectiveColorClass","hasExternalAddons","selectClasses","selectElement","floatingClasses","jsxs","jsx","addonClasses"],"mappings":";;AAmBO,MAAMA,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCC,IAAaH,KAA8CC,GAE3DG,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAoBAC,IAAsBd,IANN;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAIwCA,CAAM,IAAKD,IAjBzC;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,EAS0EA,CAAK,IAAI,IAGtFgB,IAAoBX,KAAeC,GAEnCW,IAAgBD,IAClB,CAAC,QAAQ,kBAAkB,YAAY,gBAAgB,sBAAsBT,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAChH;AAAA,MACE;AAAA,MACA;AAAA,MACAJ,KAAY;AAAA,MACZD,KAAS;AAAA,MACTH,KAAQe,EAAYf,CAAI;AAAA,MACxBgB;AAAA,MACAR;AAAA,IAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAGxBW,sBACH,UAAA,EAAO,KAAKL,GAAW,WAAWI,GAAgB,GAAGR,GACnD,UAAAD,EAAA,CACH;AAIF,QAAIJ,GAAe;AACjB,YAAMe,IAAkB;AAAA,QACtB;AAAA,QACApB,KAAQe,EAAYf,CAAI;AAAA,MAAA,EACxB,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAqB,EAAC,SAAA,EAAM,WAAWD,GAChB,UAAA;AAAA,QAAA,gBAAAE,EAAC,YAAO,KAAKR,GAAW,WAAU,iCAAiC,GAAGJ,GACnE,UAAAD,GACH;AAAA,QACA,gBAAAa,EAAC,UAAM,UAAAjB,EAAA,CAAc;AAAA,MAAA,GACvB;AAAA,IAEJ;AAGA,QAAIY,GAAmB;AACrB,YAAMM,IAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAvB,KAAQe,EAAYf,CAAI;AAAA,QACxBgB;AAAA,MAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACE,gBAAAK,EAAC,SAAA,EAAM,WAAWE,GACf,UAAA;AAAA,QAAAjB,KAAe,gBAAAgB,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAhB,GAAY;AAAA,QACnEa;AAAA,QACAZ,KAAc,gBAAAe,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAf,EAAA,CAAW;AAAA,MAAA,GACpE;AAAA,IAEJ;AAEA,WAAOY;AAAA,EACT;AACF;AAEArB,EAAO,cAAc;"}
package/dist/index74.js CHANGED
@@ -1,24 +1,71 @@
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 b, jsxs as h } from "react/jsx-runtime";
2
+ import { useState as p, useCallback as S, createContext as j, useContext as v } from "react";
3
+ const C = j(null), I = () => {
4
+ const e = v(C);
5
+ if (!e)
6
+ throw new Error("Segmented.Item must be used within a Segmented component");
7
+ return e;
8
+ }, V = {
9
+ xs: "btn-xs",
10
+ sm: "btn-sm",
11
+ md: "",
12
+ lg: "btn-lg"
13
+ }, k = ({
14
+ value: e,
15
+ disabled: o = !1,
16
+ icon: n,
17
+ children: l,
18
+ className: a = ""
11
19
  }) => {
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;
18
- };
19
- return /* @__PURE__ */ x("div", { className: p(), style: { ...c(), ...f }, ...u, children: r });
20
+ const { value: i, onChange: d, size: r, disabled: c } = I(), s = i === e, t = c || o, m = () => {
21
+ t || d?.(e);
22
+ }, u = [
23
+ "join-item",
24
+ "btn",
25
+ V[r],
26
+ s ? "btn-active" : "",
27
+ a
28
+ ].filter(Boolean).join(" ");
29
+ return /* @__PURE__ */ h(
30
+ "button",
31
+ {
32
+ type: "button",
33
+ className: u,
34
+ disabled: t,
35
+ onClick: m,
36
+ "aria-pressed": s,
37
+ "data-testid": `segmented-item-${e}`,
38
+ children: [
39
+ n && /* @__PURE__ */ b("span", { className: "mr-1", children: n }),
40
+ l
41
+ ]
42
+ }
43
+ );
44
+ }, w = ({
45
+ value: e,
46
+ defaultValue: o,
47
+ onChange: n,
48
+ size: l = "md",
49
+ block: a = !1,
50
+ disabled: i = !1,
51
+ className: d = "",
52
+ children: r
53
+ }) => {
54
+ const [c, s] = p(o), t = e !== void 0, m = t ? e : c, u = S(
55
+ (g) => {
56
+ t || s(g), n?.(g);
57
+ },
58
+ [t, n]
59
+ ), f = {
60
+ value: m,
61
+ onChange: u,
62
+ size: l,
63
+ disabled: i
64
+ }, x = ["join", a ? "w-full [&>.join-item]:flex-1" : "", d].filter(Boolean).join(" ");
65
+ return /* @__PURE__ */ b(C.Provider, { value: f, children: /* @__PURE__ */ b("div", { className: x, role: "group", "data-testid": "segmented", children: r }) });
20
66
  };
67
+ w.Item = k;
21
68
  export {
22
- i as Skeleton
69
+ w as Segmented
23
70
  };
24
71
  //# sourceMappingURL=index74.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index74.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":"index74.js","sources":["../src/components/Segmented.tsx"],"sourcesContent":["import React, { useState, useCallback, createContext, useContext } from 'react'\n\nexport type SegmentedValue = string | number\n\ninterface SegmentedContextValue {\n value?: SegmentedValue\n onChange?: (value: SegmentedValue) => void\n size: 'xs' | 'sm' | 'md' | 'lg'\n disabled: boolean\n}\n\nconst SegmentedContext = createContext<SegmentedContextValue | null>(null)\n\nconst useSegmentedContext = () => {\n const context = useContext(SegmentedContext)\n if (!context) {\n throw new Error('Segmented.Item must be used within a Segmented component')\n }\n return context\n}\n\nexport interface SegmentedItemProps {\n /** Option value */\n value: SegmentedValue\n /** Disable this option */\n disabled?: boolean\n /** Icon to display before label */\n icon?: React.ReactNode\n /** Label content */\n children: React.ReactNode\n /** Additional CSS class */\n className?: string\n}\n\nconst sizeClasses = {\n xs: 'btn-xs',\n sm: 'btn-sm',\n md: '',\n lg: 'btn-lg',\n}\n\nconst SegmentedItem: React.FC<SegmentedItemProps> = ({\n value,\n disabled: itemDisabled = false,\n icon,\n children,\n className = '',\n}) => {\n const { value: selectedValue, onChange, size, disabled: groupDisabled } = useSegmentedContext()\n\n const isSelected = selectedValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onChange?.(value)\n }\n }\n\n const buttonClasses = [\n 'join-item',\n 'btn',\n sizeClasses[size],\n isSelected ? 'btn-active' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <button\n type=\"button\"\n className={buttonClasses}\n disabled={isDisabled}\n onClick={handleClick}\n aria-pressed={isSelected}\n data-testid={`segmented-item-${value}`}\n >\n {icon && <span className=\"mr-1\">{icon}</span>}\n {children}\n </button>\n )\n}\n\nexport interface SegmentedProps {\n /** Currently selected value (controlled) */\n value?: SegmentedValue\n /** Default selected value (uncontrolled) */\n defaultValue?: SegmentedValue\n /** Callback when selection changes */\n onChange?: (value: SegmentedValue) => void\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg'\n /** Take full width of container */\n block?: boolean\n /** Disable all options */\n disabled?: boolean\n /** Additional CSS class */\n className?: string\n /** Segmented.Item children */\n children: React.ReactNode\n}\n\nexport const Segmented: React.FC<SegmentedProps> & { Item: typeof SegmentedItem } = ({\n value,\n defaultValue,\n onChange,\n size = 'md',\n block = false,\n disabled = false,\n className = '',\n children,\n}) => {\n const [internalValue, setInternalValue] = useState<SegmentedValue | undefined>(defaultValue)\n\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : internalValue\n\n const handleChange = useCallback(\n (newValue: SegmentedValue) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [isControlled, onChange]\n )\n\n const contextValue: SegmentedContextValue = {\n value: currentValue,\n onChange: handleChange,\n size,\n disabled,\n }\n\n const containerClasses = ['join', block ? 'w-full [&>.join-item]:flex-1' : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <SegmentedContext.Provider value={contextValue}>\n <div className={containerClasses} role=\"group\" data-testid=\"segmented\">\n {children}\n </div>\n </SegmentedContext.Provider>\n )\n}\n\nSegmented.Item = SegmentedItem\n"],"names":["SegmentedContext","createContext","useSegmentedContext","context","useContext","sizeClasses","SegmentedItem","value","itemDisabled","icon","children","className","selectedValue","onChange","size","groupDisabled","isSelected","isDisabled","handleClick","buttonClasses","jsxs","jsx","Segmented","defaultValue","block","disabled","internalValue","setInternalValue","useState","isControlled","currentValue","handleChange","useCallback","newValue","contextValue","containerClasses"],"mappings":";;AAWA,MAAMA,IAAmBC,EAA4C,IAAI,GAEnEC,IAAsB,MAAM;AAChC,QAAMC,IAAUC,EAAWJ,CAAgB;AAC3C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,0DAA0D;AAE5E,SAAOA;AACT,GAeME,IAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,UAAUC,IAAe;AAAA,EACzB,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,OAAOC,GAAe,UAAAC,GAAU,MAAAC,GAAM,UAAUC,EAAA,IAAkBb,EAAA,GAEpEc,IAAaJ,MAAkBL,GAC/BU,IAAaF,KAAiBP,GAE9BU,IAAc,MAAM;AACxB,IAAKD,KACHJ,IAAWN,CAAK;AAAA,EAEpB,GAEMY,IAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACAd,EAAYS,CAAI;AAAA,IAChBE,IAAa,eAAe;AAAA,IAC5BL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWD;AAAA,MACX,UAAUF;AAAA,MACV,SAASC;AAAA,MACT,gBAAcF;AAAA,MACd,eAAa,kBAAkBT,CAAK;AAAA,MAEnC,UAAA;AAAA,QAAAE,KAAQ,gBAAAY,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAAZ,GAAK;AAAA,QACrCC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAqBaY,IAAuE,CAAC;AAAA,EACnF,OAAAf;AAAA,EACA,cAAAgB;AAAA,EACA,UAAAV;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAU,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,WAAAd,IAAY;AAAA,EACZ,UAAAD;AACF,MAAM;AACJ,QAAM,CAACgB,GAAeC,CAAgB,IAAIC,EAAqCL,CAAY,GAErFM,IAAetB,MAAU,QACzBuB,IAAeD,IAAetB,IAAQmB,GAEtCK,IAAeC;AAAA,IACnB,CAACC,MAA6B;AAC5B,MAAKJ,KACHF,EAAiBM,CAAQ,GAE3BpB,IAAWoB,CAAQ;AAAA,IACrB;AAAA,IACA,CAACJ,GAAchB,CAAQ;AAAA,EAAA,GAGnBqB,IAAsC;AAAA,IAC1C,OAAOJ;AAAA,IACP,UAAUC;AAAA,IACV,MAAAjB;AAAA,IACA,UAAAW;AAAA,EAAA,GAGIU,IAAmB,CAAC,QAAQX,IAAQ,iCAAiC,IAAIb,CAAS,EACrF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAU,EAACrB,EAAiB,UAAjB,EAA0B,OAAOkC,GAChC,UAAA,gBAAAb,EAAC,OAAA,EAAI,WAAWc,GAAkB,MAAK,SAAQ,eAAY,aACxD,UAAAzB,GACH,GACF;AAEJ;AAEAY,EAAU,OAAOhB;"}