asterui 0.12.49 → 0.12.51

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 (196) hide show
  1. package/dist/components/Alert.js +18 -18
  2. package/dist/components/Alert.js.map +1 -1
  3. package/dist/components/Autocomplete.js +115 -114
  4. package/dist/components/Autocomplete.js.map +1 -1
  5. package/dist/components/Avatar.js +33 -32
  6. package/dist/components/Avatar.js.map +1 -1
  7. package/dist/components/Badge.js +99 -99
  8. package/dist/components/Badge.js.map +1 -1
  9. package/dist/components/Breadcrumb.js +12 -11
  10. package/dist/components/Breadcrumb.js.map +1 -1
  11. package/dist/components/Browser.js +10 -10
  12. package/dist/components/Browser.js.map +1 -1
  13. package/dist/components/Button.js +80 -79
  14. package/dist/components/Button.js.map +1 -1
  15. package/dist/components/Card.d.ts +2 -0
  16. package/dist/components/Card.js +111 -110
  17. package/dist/components/Card.js.map +1 -1
  18. package/dist/components/Carousel.js +59 -59
  19. package/dist/components/Carousel.js.map +1 -1
  20. package/dist/components/Cascader.js +175 -174
  21. package/dist/components/Cascader.js.map +1 -1
  22. package/dist/components/Chat.js +27 -27
  23. package/dist/components/Chat.js.map +1 -1
  24. package/dist/components/Checkbox.js +98 -97
  25. package/dist/components/Checkbox.js.map +1 -1
  26. package/dist/components/Code.js +11 -11
  27. package/dist/components/Code.js.map +1 -1
  28. package/dist/components/Collapse.js +46 -46
  29. package/dist/components/Collapse.js.map +1 -1
  30. package/dist/components/ColorPicker.d.ts +1 -1
  31. package/dist/components/ColorPicker.js +93 -91
  32. package/dist/components/ColorPicker.js.map +1 -1
  33. package/dist/components/Command.js +120 -120
  34. package/dist/components/Command.js.map +1 -1
  35. package/dist/components/ConfigProvider.d.ts +1 -1
  36. package/dist/components/ConfigProvider.js +9 -9
  37. package/dist/components/ConfigProvider.js.map +1 -1
  38. package/dist/components/ContextMenu.js +33 -33
  39. package/dist/components/ContextMenu.js.map +1 -1
  40. package/dist/components/CopyButton.js +74 -73
  41. package/dist/components/CopyButton.js.map +1 -1
  42. package/dist/components/Countdown.js +60 -59
  43. package/dist/components/Countdown.js.map +1 -1
  44. package/dist/components/DatePicker.d.ts +1 -1
  45. package/dist/components/DatePicker.js +54 -53
  46. package/dist/components/DatePicker.js.map +1 -1
  47. package/dist/components/Diff.js +10 -10
  48. package/dist/components/Diff.js.map +1 -1
  49. package/dist/components/Divider.js +21 -20
  50. package/dist/components/Divider.js.map +1 -1
  51. package/dist/components/Dock.js +28 -27
  52. package/dist/components/Dock.js.map +1 -1
  53. package/dist/components/Drawer.js +43 -43
  54. package/dist/components/Drawer.js.map +1 -1
  55. package/dist/components/Dropdown.js +127 -127
  56. package/dist/components/Dropdown.js.map +1 -1
  57. package/dist/components/Empty.js +16 -15
  58. package/dist/components/Empty.js.map +1 -1
  59. package/dist/components/Fieldset.js +11 -10
  60. package/dist/components/Fieldset.js.map +1 -1
  61. package/dist/components/FileInput.js +30 -29
  62. package/dist/components/FileInput.js.map +1 -1
  63. package/dist/components/Filter.d.ts +1 -1
  64. package/dist/components/Filter.js +32 -30
  65. package/dist/components/Filter.js.map +1 -1
  66. package/dist/components/FloatButton.js +83 -83
  67. package/dist/components/FloatButton.js.map +1 -1
  68. package/dist/components/Footer.js +14 -13
  69. package/dist/components/Footer.js.map +1 -1
  70. package/dist/components/Form.js +133 -132
  71. package/dist/components/Form.js.map +1 -1
  72. package/dist/components/Hero.js +12 -11
  73. package/dist/components/Hero.js.map +1 -1
  74. package/dist/components/HoverGallery.js +7 -7
  75. package/dist/components/HoverGallery.js.map +1 -1
  76. package/dist/components/Image.js +40 -40
  77. package/dist/components/Image.js.map +1 -1
  78. package/dist/components/Input.js +171 -169
  79. package/dist/components/Input.js.map +1 -1
  80. package/dist/components/InputNumber.js +84 -83
  81. package/dist/components/InputNumber.js.map +1 -1
  82. package/dist/components/Join.js +11 -10
  83. package/dist/components/Join.js.map +1 -1
  84. package/dist/components/Kbd.js +15 -15
  85. package/dist/components/Kbd.js.map +1 -1
  86. package/dist/components/List.d.ts +1 -1
  87. package/dist/components/List.js +75 -72
  88. package/dist/components/List.js.map +1 -1
  89. package/dist/components/Loading.d.ts +1 -1
  90. package/dist/components/Loading.js +31 -29
  91. package/dist/components/Loading.js.map +1 -1
  92. package/dist/components/Mask.js +31 -31
  93. package/dist/components/Mask.js.map +1 -1
  94. package/dist/components/Mention.js +61 -61
  95. package/dist/components/Mention.js.map +1 -1
  96. package/dist/components/Menu.js +84 -84
  97. package/dist/components/Menu.js.map +1 -1
  98. package/dist/components/Message.js +30 -29
  99. package/dist/components/Message.js.map +1 -1
  100. package/dist/components/Modal.js +117 -116
  101. package/dist/components/Modal.js.map +1 -1
  102. package/dist/components/MonthCalendar.d.ts +31 -0
  103. package/dist/components/MonthCalendar.js +205 -0
  104. package/dist/components/MonthCalendar.js.map +1 -0
  105. package/dist/components/Navbar.js +25 -25
  106. package/dist/components/Navbar.js.map +1 -1
  107. package/dist/components/Notification.js +56 -55
  108. package/dist/components/Notification.js.map +1 -1
  109. package/dist/components/OTPInput.js +69 -68
  110. package/dist/components/OTPInput.js.map +1 -1
  111. package/dist/components/Pagination.d.ts +1 -1
  112. package/dist/components/Pagination.js +60 -58
  113. package/dist/components/Pagination.js.map +1 -1
  114. package/dist/components/Phone.js +10 -10
  115. package/dist/components/Phone.js.map +1 -1
  116. package/dist/components/Popconfirm.js +60 -60
  117. package/dist/components/Popconfirm.js.map +1 -1
  118. package/dist/components/Progress.js +17 -17
  119. package/dist/components/Progress.js.map +1 -1
  120. package/dist/components/QRCode.js +23 -23
  121. package/dist/components/QRCode.js.map +1 -1
  122. package/dist/components/RadialProgress.js +17 -17
  123. package/dist/components/RadialProgress.js.map +1 -1
  124. package/dist/components/Radio.js +41 -40
  125. package/dist/components/Radio.js.map +1 -1
  126. package/dist/components/Range.d.ts +1 -1
  127. package/dist/components/Range.js +39 -37
  128. package/dist/components/Range.js.map +1 -1
  129. package/dist/components/Rating.js +79 -78
  130. package/dist/components/Rating.js.map +1 -1
  131. package/dist/components/ResponsiveDrawer.js +27 -27
  132. package/dist/components/ResponsiveDrawer.js.map +1 -1
  133. package/dist/components/RichTextEditor.d.ts +32 -0
  134. package/dist/components/RichTextEditor.js +335 -0
  135. package/dist/components/RichTextEditor.js.map +1 -0
  136. package/dist/components/Segmented.d.ts +1 -1
  137. package/dist/components/Segmented.js +48 -46
  138. package/dist/components/Segmented.js.map +1 -1
  139. package/dist/components/Select.js +55 -54
  140. package/dist/components/Select.js.map +1 -1
  141. package/dist/components/Skeleton.js +9 -9
  142. package/dist/components/Skeleton.js.map +1 -1
  143. package/dist/components/Splitter.js +1 -3
  144. package/dist/components/Splitter.js.map +1 -1
  145. package/dist/components/Stat.js +17 -16
  146. package/dist/components/Stat.js.map +1 -1
  147. package/dist/components/Status.js +29 -29
  148. package/dist/components/Status.js.map +1 -1
  149. package/dist/components/Steps.js +61 -61
  150. package/dist/components/Steps.js.map +1 -1
  151. package/dist/components/Table.js +256 -256
  152. package/dist/components/Table.js.map +1 -1
  153. package/dist/components/Tabs.js +65 -65
  154. package/dist/components/Tabs.js.map +1 -1
  155. package/dist/components/Tag.js +147 -147
  156. package/dist/components/Tag.js.map +1 -1
  157. package/dist/components/TextRotate.js +6 -6
  158. package/dist/components/TextRotate.js.map +1 -1
  159. package/dist/components/Textarea.js +35 -34
  160. package/dist/components/Textarea.js.map +1 -1
  161. package/dist/components/ThemeController.d.ts +1 -1
  162. package/dist/components/ThemeController.js +71 -68
  163. package/dist/components/ThemeController.js.map +1 -1
  164. package/dist/components/TimePicker.d.ts +1 -1
  165. package/dist/components/TimePicker.js +133 -129
  166. package/dist/components/TimePicker.js.map +1 -1
  167. package/dist/components/Timeline.js +79 -79
  168. package/dist/components/Timeline.js.map +1 -1
  169. package/dist/components/Toggle.js +33 -32
  170. package/dist/components/Toggle.js.map +1 -1
  171. package/dist/components/Tooltip.js +25 -25
  172. package/dist/components/Tooltip.js.map +1 -1
  173. package/dist/components/Tour.js +126 -126
  174. package/dist/components/Tour.js.map +1 -1
  175. package/dist/components/Transfer.js +93 -92
  176. package/dist/components/Transfer.js.map +1 -1
  177. package/dist/components/Tree.js +200 -200
  178. package/dist/components/Tree.js.map +1 -1
  179. package/dist/components/TreeSelect.js +255 -254
  180. package/dist/components/TreeSelect.js.map +1 -1
  181. package/dist/components/Typography.js +71 -70
  182. package/dist/components/Typography.js.map +1 -1
  183. package/dist/components/Upload.js +81 -81
  184. package/dist/components/Upload.js.map +1 -1
  185. package/dist/components/WeekCalendar.d.ts +35 -0
  186. package/dist/components/WeekCalendar.js +204 -0
  187. package/dist/components/WeekCalendar.js.map +1 -0
  188. package/dist/components/Window.js +7 -7
  189. package/dist/components/Window.js.map +1 -1
  190. package/dist/editor.d.ts +1 -0
  191. package/dist/editor.js +5 -0
  192. package/dist/editor.js.map +1 -0
  193. package/dist/index.d.ts +4 -0
  194. package/dist/index.js +211 -207
  195. package/dist/index.js.map +1 -1
  196. package/package.json +30 -1
@@ -1,60 +1,61 @@
1
- import { jsx as r, jsxs as N } from "react/jsx-runtime";
2
- import S, { forwardRef as b, useContext as G, createContext as V } from "react";
3
- const g = V(null);
4
- function w({ children: n, value: e, defaultValue: i, onChange: o, name: t, className: c = "" }) {
5
- const [d, s] = S.useState(i), l = e !== void 0 ? e : d, u = (a) => {
6
- e === void 0 && s(a), o?.({ target: { value: a, name: t } });
1
+ import { jsx as t, jsxs as z } from "react/jsx-runtime";
2
+ import b, { forwardRef as G, useContext as V, createContext as v } from "react";
3
+ import { useConfig as w } from "./ConfigProvider.js";
4
+ const I = "radio", P = "radio-xs", X = "radio-sm", A = "radio-md", B = "radio-lg", E = "radio-xl", L = "radio-neutral", M = "radio-primary", O = "radio-secondary", W = "radio-accent", $ = "radio-info", q = "radio-success", D = "radio-warning", F = "radio-error", g = v(null);
5
+ function H({ children: i, value: n, defaultValue: d, onChange: o, name: e, className: c = "" }) {
6
+ const [l, r] = b.useState(d), m = n !== void 0 ? n : l, u = (s) => {
7
+ n === void 0 && r(s), o?.({ target: { value: s, name: e } });
7
8
  };
8
- return /* @__PURE__ */ r(g.Provider, { value: { value: l, onChange: u, name: t }, children: /* @__PURE__ */ r("div", { role: "radiogroup", className: c, children: n }) });
9
+ return /* @__PURE__ */ t(g.Provider, { value: { value: m, onChange: u, name: e }, children: /* @__PURE__ */ t("div", { role: "radiogroup", className: c, children: i }) });
9
10
  }
10
- const f = b(
11
- ({ size: n, color: e, className: i = "", value: o, checked: t, onChange: c, name: d, children: s, ...l }, u) => {
12
- const a = G(g), h = {
13
- xs: "radio-xs",
14
- sm: "radio-sm",
15
- md: "radio-md",
16
- lg: "radio-lg",
17
- xl: "radio-xl"
11
+ const h = G(
12
+ ({ size: i, color: n, className: d = "", value: o, checked: e, onChange: c, name: l, children: r, ...m }, u) => {
13
+ const { componentSize: s } = w(), p = i ?? s ?? "md", a = V(g), C = {
14
+ xs: P,
15
+ sm: X,
16
+ md: A,
17
+ lg: B,
18
+ xl: E
18
19
  }, x = {
19
- neutral: "radio-neutral",
20
- primary: "radio-primary",
21
- secondary: "radio-secondary",
22
- accent: "radio-accent",
23
- info: "radio-info",
24
- success: "radio-success",
25
- warning: "radio-warning",
26
- error: "radio-error"
27
- }, C = ["radio", n && h[n], e && x[e]].filter(Boolean).join(" "), p = a ? a.value === o : t, y = (k) => {
20
+ neutral: L,
21
+ primary: M,
22
+ secondary: O,
23
+ accent: W,
24
+ info: $,
25
+ success: q,
26
+ warning: D,
27
+ error: F
28
+ }, y = [I, p && C[p], n && x[n]].filter(Boolean).join(" "), R = a ? a.value === o : e, S = (N) => {
28
29
  if (a && o !== void 0) {
29
30
  const j = typeof o == "string" || typeof o == "number" ? o : String(o);
30
31
  a.onChange?.(j);
31
32
  }
32
- c?.(k);
33
- }, R = a?.name || d, m = /* @__PURE__ */ r(
33
+ c?.(N);
34
+ }, k = a?.name || l, f = /* @__PURE__ */ t(
34
35
  "input",
35
36
  {
36
37
  ref: u,
37
38
  type: "radio",
38
- className: C,
39
+ className: y,
39
40
  value: o,
40
- checked: p,
41
- onChange: y,
42
- name: R,
43
- "data-state": p ? "checked" : "unchecked",
44
- ...l
41
+ checked: R,
42
+ onChange: S,
43
+ name: k,
44
+ "data-state": R ? "checked" : "unchecked",
45
+ ...m
45
46
  }
46
47
  );
47
- return s ? /* @__PURE__ */ N("label", { className: `flex items-center gap-2 cursor-pointer ${i}`, children: [
48
- /* @__PURE__ */ r("span", { className: "flex-shrink-0", children: m }),
49
- /* @__PURE__ */ r("span", { children: s })
50
- ] }) : m;
48
+ return r ? /* @__PURE__ */ z("label", { className: `flex items-center gap-2 cursor-pointer ${d}`, children: [
49
+ /* @__PURE__ */ t("span", { className: "flex-shrink-0", children: f }),
50
+ /* @__PURE__ */ t("span", { children: r })
51
+ ] }) : f;
51
52
  }
52
53
  );
53
- f.displayName = "Radio";
54
- const I = Object.assign(f, {
55
- Group: w
54
+ h.displayName = "Radio";
55
+ const U = Object.assign(h, {
56
+ Group: H
56
57
  });
57
58
  export {
58
- I as Radio
59
+ U as Radio
59
60
  };
60
61
  //# sourceMappingURL=Radio.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","sources":["../../src/components/Radio.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n className?: string\n children?: React.ReactNode\n}\n\nexport interface RadioGroupChangeEvent {\n target: {\n value: string | number\n name?: string\n }\n}\n\nexport interface RadioGroupProps {\n children: React.ReactNode\n value?: string | number\n defaultValue?: string | number\n onChange?: (e: RadioGroupChangeEvent) => void\n name?: string\n className?: string\n}\n\ninterface RadioGroupContextValue {\n value?: string | number\n onChange?: (value: string | number) => void\n name?: string\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction RadioGroup({ children, value, defaultValue, onChange, name, className = '' }: RadioGroupProps) {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (newValue: string | number) => {\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.({ target: { value: newValue, name } })\n }\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name }}>\n <div role=\"radiogroup\" className={className}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nconst RadioRoot = forwardRef<HTMLInputElement, RadioProps>(\n ({ size, color, className = '', value, checked, onChange, name: nameProp, children, ...props }, ref) => {\n const groupContext = useContext(RadioGroupContext)\n\n const sizeClasses = {\n xs: 'radio-xs',\n sm: 'radio-sm',\n md: 'radio-md',\n lg: 'radio-lg',\n xl: 'radio-xl',\n }\n\n const colorClasses = {\n neutral: 'radio-neutral',\n primary: 'radio-primary',\n secondary: 'radio-secondary',\n accent: 'radio-accent',\n info: 'radio-info',\n success: 'radio-success',\n warning: 'radio-warning',\n error: 'radio-error',\n }\n\n const radioClasses = ['radio', size && sizeClasses[size], color && colorClasses[color]]\n .filter(Boolean)\n .join(' ')\n\n // If in a group, use group's value and onChange\n const isChecked = groupContext ? groupContext.value === value : checked\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined) {\n const normalizedValue = typeof value === 'string' || typeof value === 'number' ? value : String(value)\n groupContext.onChange?.(normalizedValue)\n }\n onChange?.(e)\n }\n const name = groupContext?.name || nameProp\n\n const dataState = isChecked ? 'checked' : 'unchecked'\n\n const input = (\n <input\n ref={ref}\n type=\"radio\"\n className={radioClasses}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n name={name}\n data-state={dataState}\n {...props}\n />\n )\n\n // If children are provided, wrap in a label\n if (children) {\n return (\n <label className={`flex items-center gap-2 cursor-pointer ${className}`}>\n <span className=\"flex-shrink-0\">{input}</span>\n <span>{children}</span>\n </label>\n )\n }\n\n return input\n }\n)\n\nRadioRoot.displayName = 'Radio'\n\nexport const Radio = Object.assign(RadioRoot, {\n Group: RadioGroup,\n})\n"],"names":["RadioGroupContext","createContext","RadioGroup","children","value","defaultValue","onChange","name","className","internalValue","setInternalValue","React","currentValue","handleChange","newValue","jsx","RadioRoot","forwardRef","size","color","checked","nameProp","props","ref","groupContext","useContext","sizeClasses","colorClasses","radioClasses","isChecked","e","normalizedValue","input","jsxs","Radio"],"mappings":";;AA+BA,MAAMA,IAAoBC,EAA6C,IAAI;AAE3E,SAASC,EAAW,EAAE,UAAAC,GAAU,OAAAC,GAAO,cAAAC,GAAc,UAAAC,GAAU,MAAAC,GAAM,WAAAC,IAAY,MAAuB;AACtG,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAM,SAASN,CAAY,GAC/DO,IAAeR,MAAU,SAAYA,IAAQK,GAE7CI,IAAe,CAACC,MAA8B;AAClD,IAAIV,MAAU,UACZM,EAAiBI,CAAQ,GAE3BR,IAAW,EAAE,QAAQ,EAAE,OAAOQ,GAAU,MAAAP,EAAA,GAAQ;AAAA,EAClD;AAEA,2BACGP,EAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAOY,GAAc,UAAUC,GAAc,MAAAN,EAAA,GAChF,UAAA,gBAAAQ,EAAC,OAAA,EAAI,MAAK,cAAa,WAAAP,GAAuB,UAAAL,GAAS,GACzD;AAEJ;AAEA,MAAMa,IAAYC;AAAA,EAChB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,WAAAX,IAAY,IAAI,OAAAJ,GAAO,SAAAgB,GAAS,UAAAd,GAAU,MAAMe,GAAU,UAAAlB,GAAU,GAAGmB,EAAA,GAASC,MAAQ;AACtG,UAAMC,IAAeC,EAAWzB,CAAiB,GAE3C0B,IAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAGAC,IAAe;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,GAGHC,IAAe,CAAC,SAASV,KAAQQ,EAAYR,CAAI,GAAGC,KAASQ,EAAaR,CAAK,CAAC,EACnF,OAAO,OAAO,EACd,KAAK,GAAG,GAGLU,IAAYL,IAAeA,EAAa,UAAUpB,IAAQgB,GAC1DP,IAAe,CAACiB,MAA2C;AAC/D,UAAIN,KAAgBpB,MAAU,QAAW;AACvC,cAAM2B,IAAkB,OAAO3B,KAAU,YAAY,OAAOA,KAAU,WAAWA,IAAQ,OAAOA,CAAK;AACrG,QAAAoB,EAAa,WAAWO,CAAe;AAAA,MACzC;AACA,MAAAzB,IAAWwB,CAAC;AAAA,IACd,GACMvB,IAAOiB,GAAc,QAAQH,GAI7BW,IACJ,gBAAAjB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAQ;AAAA,QACA,MAAK;AAAA,QACL,WAAWK;AAAA,QACX,OAAAxB;AAAA,QACA,SAASyB;AAAA,QACT,UAAUhB;AAAA,QACV,MAAAN;AAAA,QACA,cAXcsB,IAAY,YAAY;AAAA,QAYrC,GAAGP;AAAA,MAAA;AAAA,IAAA;AAKR,WAAInB,IAEA,gBAAA8B,EAAC,SAAA,EAAM,WAAW,0CAA0CzB,CAAS,IACnE,UAAA;AAAA,MAAA,gBAAAO,EAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAiB,GAAM;AAAA,MACvC,gBAAAjB,EAAC,UAAM,UAAAZ,EAAA,CAAS;AAAA,IAAA,GAClB,IAIG6B;AAAA,EACT;AACF;AAEAhB,EAAU,cAAc;AAEjB,MAAMkB,IAAQ,OAAO,OAAOlB,GAAW;AAAA,EAC5C,OAAOd;AACT,CAAC;"}
1
+ {"version":3,"file":"Radio.js","sources":["../../src/components/Radio.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dRadio = 'radio'\nconst dRadioXs = 'radio-xs'\nconst dRadioSm = 'radio-sm'\nconst dRadioMd = 'radio-md'\nconst dRadioLg = 'radio-lg'\nconst dRadioXl = 'radio-xl'\nconst dRadioNeutral = 'radio-neutral'\nconst dRadioPrimary = 'radio-primary'\nconst dRadioSecondary = 'radio-secondary'\nconst dRadioAccent = 'radio-accent'\nconst dRadioInfo = 'radio-info'\nconst dRadioSuccess = 'radio-success'\nconst dRadioWarning = 'radio-warning'\nconst dRadioError = 'radio-error'\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n className?: string\n children?: React.ReactNode\n}\n\nexport interface RadioGroupChangeEvent {\n target: {\n value: string | number\n name?: string\n }\n}\n\nexport interface RadioGroupProps {\n children: React.ReactNode\n value?: string | number\n defaultValue?: string | number\n onChange?: (e: RadioGroupChangeEvent) => void\n name?: string\n className?: string\n}\n\ninterface RadioGroupContextValue {\n value?: string | number\n onChange?: (value: string | number) => void\n name?: string\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction RadioGroup({ children, value, defaultValue, onChange, name, className = '' }: RadioGroupProps) {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (newValue: string | number) => {\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.({ target: { value: newValue, name } })\n }\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name }}>\n <div role=\"radiogroup\" className={className}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nconst RadioRoot = forwardRef<HTMLInputElement, RadioProps>(\n ({ size, color, className = '', value, checked, onChange, name: nameProp, children, ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const groupContext = useContext(RadioGroupContext)\n\n const sizeClasses = {\n xs: dRadioXs,\n sm: dRadioSm,\n md: dRadioMd,\n lg: dRadioLg,\n xl: dRadioXl,\n }\n\n const colorClasses = {\n neutral: dRadioNeutral,\n primary: dRadioPrimary,\n secondary: dRadioSecondary,\n accent: dRadioAccent,\n info: dRadioInfo,\n success: dRadioSuccess,\n warning: dRadioWarning,\n error: dRadioError,\n }\n\n const radioClasses = [dRadio, effectiveSize && sizeClasses[effectiveSize], color && colorClasses[color]]\n .filter(Boolean)\n .join(' ')\n\n // If in a group, use group's value and onChange\n const isChecked = groupContext ? groupContext.value === value : checked\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined) {\n const normalizedValue = typeof value === 'string' || typeof value === 'number' ? value : String(value)\n groupContext.onChange?.(normalizedValue)\n }\n onChange?.(e)\n }\n const name = groupContext?.name || nameProp\n\n const dataState = isChecked ? 'checked' : 'unchecked'\n\n const input = (\n <input\n ref={ref}\n type=\"radio\"\n className={radioClasses}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n name={name}\n data-state={dataState}\n {...props}\n />\n )\n\n // If children are provided, wrap in a label\n if (children) {\n return (\n <label className={`flex items-center gap-2 cursor-pointer ${className}`}>\n <span className=\"flex-shrink-0\">{input}</span>\n <span>{children}</span>\n </label>\n )\n }\n\n return input\n }\n)\n\nRadioRoot.displayName = 'Radio'\n\nexport const Radio = Object.assign(RadioRoot, {\n Group: RadioGroup,\n})\n"],"names":["dRadio","dRadioXs","dRadioSm","dRadioMd","dRadioLg","dRadioXl","dRadioNeutral","dRadioPrimary","dRadioSecondary","dRadioAccent","dRadioInfo","dRadioSuccess","dRadioWarning","dRadioError","RadioGroupContext","createContext","RadioGroup","children","value","defaultValue","onChange","name","className","internalValue","setInternalValue","React","currentValue","handleChange","newValue","jsx","RadioRoot","forwardRef","size","color","checked","nameProp","props","ref","componentSize","useConfig","effectiveSize","groupContext","useContext","sizeClasses","colorClasses","radioClasses","isChecked","e","normalizedValue","input","jsxs","Radio"],"mappings":";;;AAIA,MAAMA,IAAS,SACTC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAe,gBACfC,IAAa,cACbC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAc,eA+BdC,IAAoBC,EAA6C,IAAI;AAE3E,SAASC,EAAW,EAAE,UAAAC,GAAU,OAAAC,GAAO,cAAAC,GAAc,UAAAC,GAAU,MAAAC,GAAM,WAAAC,IAAY,MAAuB;AACtG,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAM,SAASN,CAAY,GAC/DO,IAAeR,MAAU,SAAYA,IAAQK,GAE7CI,IAAe,CAACC,MAA8B;AAClD,IAAIV,MAAU,UACZM,EAAiBI,CAAQ,GAE3BR,IAAW,EAAE,QAAQ,EAAE,OAAOQ,GAAU,MAAAP,EAAA,GAAQ;AAAA,EAClD;AAEA,2BACGP,EAAkB,UAAlB,EAA2B,OAAO,EAAE,OAAOY,GAAc,UAAUC,GAAc,MAAAN,EAAA,GAChF,UAAA,gBAAAQ,EAAC,OAAA,EAAI,MAAK,cAAa,WAAAP,GAAuB,UAAAL,GAAS,GACzD;AAEJ;AAEA,MAAMa,IAAYC;AAAA,EAChB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,WAAAX,IAAY,IAAI,OAAAJ,GAAO,SAAAgB,GAAS,UAAAd,GAAU,MAAMe,GAAU,UAAAlB,GAAU,GAAGmB,EAAA,GAASC,MAAQ;AACtG,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBR,KAAQM,KAAiB,MACzCG,IAAeC,EAAW5B,CAAiB,GAE3C6B,IAAc;AAAA,MAClB,IAAI1C;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAuC,IAAe;AAAA,MACnB,SAAStC;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHgC,IAAe,CAAC7C,GAAQwC,KAAiBG,EAAYH,CAAa,GAAGP,KAASW,EAAaX,CAAK,CAAC,EACpG,OAAO,OAAO,EACd,KAAK,GAAG,GAGLa,IAAYL,IAAeA,EAAa,UAAUvB,IAAQgB,GAC1DP,IAAe,CAACoB,MAA2C;AAC/D,UAAIN,KAAgBvB,MAAU,QAAW;AACvC,cAAM8B,IAAkB,OAAO9B,KAAU,YAAY,OAAOA,KAAU,WAAWA,IAAQ,OAAOA,CAAK;AACrG,QAAAuB,EAAa,WAAWO,CAAe;AAAA,MACzC;AACA,MAAA5B,IAAW2B,CAAC;AAAA,IACd,GACM1B,IAAOoB,GAAc,QAAQN,GAI7Bc,IACJ,gBAAApB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAQ;AAAA,QACA,MAAK;AAAA,QACL,WAAWQ;AAAA,QACX,OAAA3B;AAAA,QACA,SAAS4B;AAAA,QACT,UAAUnB;AAAA,QACV,MAAAN;AAAA,QACA,cAXcyB,IAAY,YAAY;AAAA,QAYrC,GAAGV;AAAA,MAAA;AAAA,IAAA;AAKR,WAAInB,IAEA,gBAAAiC,EAAC,SAAA,EAAM,WAAW,0CAA0C5B,CAAS,IACnE,UAAA;AAAA,MAAA,gBAAAO,EAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAoB,GAAM;AAAA,MACvC,gBAAApB,EAAC,UAAM,UAAAZ,EAAA,CAAS;AAAA,IAAA,GAClB,IAIGgC;AAAA,EACT;AACF;AAEAnB,EAAU,cAAc;AAEjB,MAAMqB,IAAQ,OAAO,OAAOrB,GAAW;AAAA,EAC5C,OAAOd;AACT,CAAC;"}
@@ -6,7 +6,7 @@ export interface RangeProps {
6
6
  min?: number;
7
7
  max?: number;
8
8
  step?: number;
9
- size?: 'xs' | 'sm' | 'md' | 'lg';
9
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
10
  color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error';
11
11
  disabled?: boolean;
12
12
  showValue?: boolean;
@@ -1,55 +1,57 @@
1
- import { jsxs as b, jsx as a } from "react/jsx-runtime";
2
- import { useState as j } from "react";
3
- const A = ({
4
- value: s,
5
- defaultValue: m = 50,
6
- onChange: d,
7
- min: r = 0,
1
+ import { jsxs as V, jsx as s } from "react/jsx-runtime";
2
+ import { useState as b } from "react";
3
+ import { useConfig as j } from "./ConfigProvider.js";
4
+ const $ = "range", A = "range-xs", I = "range-sm", M = "range-md", X = "range-lg", E = "range-xl", F = "range-primary", L = "range-secondary", P = "range-accent", W = "range-success", _ = "range-warning", k = "range-info", q = "range-error", H = ({
5
+ value: a,
6
+ defaultValue: i = 50,
7
+ onChange: m,
8
+ min: t = 0,
8
9
  max: c = 100,
9
- step: t = 1,
10
- size: f = "md",
11
- color: l,
10
+ step: r = 1,
11
+ size: f,
12
+ color: o,
12
13
  disabled: u = !1,
13
14
  showValue: x = !1,
14
- showSteps: o = !1,
15
- className: h = ""
15
+ showSteps: g = !1,
16
+ className: R = ""
16
17
  }) => {
17
- const [p, y] = j(m), g = s !== void 0 ? s : p, C = (e) => {
18
+ const { componentSize: p } = j(), h = f ?? p ?? "md", [y, C] = b(i), l = a !== void 0 ? a : y, v = (e) => {
18
19
  const n = parseFloat(e.target.value);
19
- s === void 0 && y(n), d?.(n);
20
- }, v = {
21
- xs: "range-xs",
22
- sm: "range-sm",
23
- md: "range-md",
24
- lg: "range-lg"
20
+ a === void 0 && C(n), m?.(n);
21
+ }, S = {
22
+ xs: A,
23
+ sm: I,
24
+ md: M,
25
+ lg: X,
26
+ xl: E
25
27
  }, w = {
26
- primary: "range-primary",
27
- secondary: "range-secondary",
28
- accent: "range-accent",
29
- success: "range-success",
30
- warning: "range-warning",
31
- info: "range-info",
32
- error: "range-error"
33
- }, N = v[f], V = l ? w[l] : "", i = o ? Array.from({ length: Math.floor((c - r) / t) + 1 }, (e, n) => r + n * t) : [];
34
- return /* @__PURE__ */ b("div", { className: h, children: [
35
- /* @__PURE__ */ a(
28
+ primary: F,
29
+ secondary: L,
30
+ accent: P,
31
+ success: W,
32
+ warning: _,
33
+ info: k,
34
+ error: q
35
+ }, z = S[h], N = o ? w[o] : "", d = g ? Array.from({ length: Math.floor((c - t) / r) + 1 }, (e, n) => t + n * r) : [];
36
+ return /* @__PURE__ */ V("div", { className: R, children: [
37
+ /* @__PURE__ */ s(
36
38
  "input",
37
39
  {
38
40
  type: "range",
39
- min: r,
41
+ min: t,
40
42
  max: c,
41
- step: t,
42
- value: g,
43
- onChange: C,
43
+ step: r,
44
+ value: l,
45
+ onChange: v,
44
46
  disabled: u,
45
- className: `range ${N} ${V}`
47
+ className: `${$} ${z} ${N}`
46
48
  }
47
49
  ),
48
- o && i.length > 0 && /* @__PURE__ */ a("div", { className: "w-full flex justify-between text-xs px-2 mt-2", children: i.map((e) => /* @__PURE__ */ a("span", { className: "text-base-content/60", children: "|" }, e)) }),
49
- x && /* @__PURE__ */ a("div", { className: "text-center mt-2 text-sm font-medium text-base-content", children: g })
50
+ g && d.length > 0 && /* @__PURE__ */ s("div", { className: "w-full flex justify-between text-xs px-2 mt-2", children: d.map((e) => /* @__PURE__ */ s("span", { className: "text-base-content/60", children: "|" }, e)) }),
51
+ x && /* @__PURE__ */ s("div", { className: "text-center mt-2 text-sm font-medium text-base-content", children: l })
50
52
  ] });
51
53
  };
52
54
  export {
53
- A as Range
55
+ H as Range
54
56
  };
55
57
  //# sourceMappingURL=Range.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Range.js","sources":["../../src/components/Range.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\nexport interface RangeProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n size?: 'xs' | 'sm' | 'md' | 'lg'\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n disabled?: boolean\n showValue?: boolean\n showSteps?: boolean\n className?: string\n}\n\nexport const Range: React.FC<RangeProps> = ({\n value,\n defaultValue = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size = 'md',\n color,\n disabled = false,\n showValue = false,\n showSteps = false,\n className = '',\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const sizeClasses = {\n xs: 'range-xs',\n sm: 'range-sm',\n md: 'range-md',\n lg: 'range-lg',\n } as const\n\n const colorClasses = {\n primary: 'range-primary',\n secondary: 'range-secondary',\n accent: 'range-accent',\n success: 'range-success',\n warning: 'range-warning',\n info: 'range-info',\n error: 'range-error',\n } as const\n\n const sizeClass = sizeClasses[size]\n const colorClass = color ? colorClasses[color] : ''\n\n // Calculate steps for visual markers\n const steps = showSteps\n ? Array.from({ length: Math.floor((max - min) / step) + 1 }, (_, i) => min + i * step)\n : []\n\n return (\n <div className={className}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n disabled={disabled}\n className={`range ${sizeClass} ${colorClass}`}\n />\n {showSteps && steps.length > 0 && (\n <div className=\"w-full flex justify-between text-xs px-2 mt-2\">\n {steps.map((stepValue) => (\n <span key={stepValue} className=\"text-base-content/60\">\n |\n </span>\n ))}\n </div>\n )}\n {showValue && (\n <div className=\"text-center mt-2 text-sm font-medium text-base-content\">\n {currentValue}\n </div>\n )}\n </div>\n )\n}\n"],"names":["Range","value","defaultValue","onChange","min","max","step","size","color","disabled","showValue","showSteps","className","internalValue","setInternalValue","useState","currentValue","handleChange","newValue","sizeClasses","colorClasses","sizeClass","colorClass","steps","_","i","jsxs","jsx","stepValue"],"mappings":";;AAiBO,MAAMA,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAASb,CAAY,GACzDc,IAAef,MAAU,SAAYA,IAAQY,GAE7CI,IAAe,CAAC,MAA2C;AAC/D,UAAMC,IAAW,WAAW,EAAE,OAAO,KAAK;AAC1C,IAAIjB,MAAU,UACZa,EAAiBI,CAAQ,GAE3Bf,IAAWe,CAAQ;AAAA,EACrB,GAEMC,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAe;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GAGHC,IAAYF,EAAYZ,CAAI,GAC5Be,IAAad,IAAQY,EAAaZ,CAAK,IAAI,IAG3Ce,IAAQZ,IACV,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAON,IAAMD,KAAOE,CAAI,IAAI,EAAA,GAAK,CAACkB,GAAGC,MAAMrB,IAAMqB,IAAInB,CAAI,IACnF,CAAA;AAEJ,SACE,gBAAAoB,EAAC,SAAI,WAAAd,GACH,UAAA;AAAA,IAAA,gBAAAe;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAAvB;AAAA,QACA,KAAAC;AAAA,QACA,MAAAC;AAAA,QACA,OAAOU;AAAA,QACP,UAAUC;AAAA,QACV,UAAAR;AAAA,QACA,WAAW,SAASY,CAAS,IAAIC,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAE5CX,KAAaY,EAAM,SAAS,KAC3B,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAJ,EAAM,IAAI,CAACK,wBACT,QAAA,EAAqB,WAAU,wBAAuB,UAAA,IAAA,GAA5CA,CAEX,CACD,GACH;AAAA,IAEDlB,KACC,gBAAAiB,EAAC,OAAA,EAAI,WAAU,0DACZ,UAAAX,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"Range.js","sources":["../../src/components/Range.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dRange = 'range'\nconst dRangeXs = 'range-xs'\nconst dRangeSm = 'range-sm'\nconst dRangeMd = 'range-md'\nconst dRangeLg = 'range-lg'\nconst dRangeXl = 'range-xl'\nconst dRangePrimary = 'range-primary'\nconst dRangeSecondary = 'range-secondary'\nconst dRangeAccent = 'range-accent'\nconst dRangeSuccess = 'range-success'\nconst dRangeWarning = 'range-warning'\nconst dRangeInfo = 'range-info'\nconst dRangeError = 'range-error'\n\nexport interface RangeProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n disabled?: boolean\n showValue?: boolean\n showSteps?: boolean\n className?: string\n}\n\nexport const Range: React.FC<RangeProps> = ({\n value,\n defaultValue = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size,\n color,\n disabled = false,\n showValue = false,\n showSteps = false,\n className = '',\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const sizeClasses = {\n xs: dRangeXs,\n sm: dRangeSm,\n md: dRangeMd,\n lg: dRangeLg,\n xl: dRangeXl,\n } as const\n\n const colorClasses = {\n primary: dRangePrimary,\n secondary: dRangeSecondary,\n accent: dRangeAccent,\n success: dRangeSuccess,\n warning: dRangeWarning,\n info: dRangeInfo,\n error: dRangeError,\n } as const\n\n const sizeClass = sizeClasses[effectiveSize]\n const colorClass = color ? colorClasses[color] : ''\n\n // Calculate steps for visual markers\n const steps = showSteps\n ? Array.from({ length: Math.floor((max - min) / step) + 1 }, (_, i) => min + i * step)\n : []\n\n return (\n <div className={className}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n disabled={disabled}\n className={`${dRange} ${sizeClass} ${colorClass}`}\n />\n {showSteps && steps.length > 0 && (\n <div className=\"w-full flex justify-between text-xs px-2 mt-2\">\n {steps.map((stepValue) => (\n <span key={stepValue} className=\"text-base-content/60\">\n |\n </span>\n ))}\n </div>\n )}\n {showValue && (\n <div className=\"text-center mt-2 text-sm font-medium text-base-content\">\n {currentValue}\n </div>\n )}\n </div>\n )\n}\n"],"names":["dRange","dRangeXs","dRangeSm","dRangeMd","dRangeLg","dRangeXl","dRangePrimary","dRangeSecondary","dRangeAccent","dRangeSuccess","dRangeWarning","dRangeInfo","dRangeError","Range","value","defaultValue","onChange","min","max","step","size","color","disabled","showValue","showSteps","className","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","currentValue","handleChange","newValue","sizeClasses","colorClasses","sizeClass","colorClass","steps","_","i","jsxs","jsx","stepValue"],"mappings":";;;AAIA,MAAMA,IAAS,SACTC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAa,cACbC,IAAc,eAiBPC,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBR,KAAQM,KAAiB,MACzC,CAACG,GAAeC,CAAgB,IAAIC,EAAShB,CAAY,GACzDiB,IAAelB,MAAU,SAAYA,IAAQe,GAE7CI,IAAe,CAAC,MAA2C;AAC/D,UAAMC,IAAW,WAAW,EAAE,OAAO,KAAK;AAC1C,IAAIpB,MAAU,UACZgB,EAAiBI,CAAQ,GAE3BlB,IAAWkB,CAAQ;AAAA,EACrB,GAEMC,IAAc;AAAA,IAClB,IAAIlC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAGA+B,IAAe;AAAA,IACnB,SAAS9B;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,SAASC;AAAA,IACT,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGHyB,IAAYF,EAAYP,CAAa,GACrCU,IAAajB,IAAQe,EAAaf,CAAK,IAAI,IAG3CkB,IAAQf,IACV,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAON,IAAMD,KAAOE,CAAI,IAAI,EAAA,GAAK,CAACqB,GAAGC,MAAMxB,IAAMwB,IAAItB,CAAI,IACnF,CAAA;AAEJ,SACE,gBAAAuB,EAAC,SAAI,WAAAjB,GACH,UAAA;AAAA,IAAA,gBAAAkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAA1B;AAAA,QACA,KAAAC;AAAA,QACA,MAAAC;AAAA,QACA,OAAOa;AAAA,QACP,UAAUC;AAAA,QACV,UAAAX;AAAA,QACA,WAAW,GAAGtB,CAAM,IAAIqC,CAAS,IAAIC,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEhDd,KAAae,EAAM,SAAS,KAC3B,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAJ,EAAM,IAAI,CAACK,wBACT,QAAA,EAAqB,WAAU,wBAAuB,UAAA,IAAA,GAA5CA,CAEX,CACD,GACH;AAAA,IAEDrB,KACC,gBAAAoB,EAAC,OAAA,EAAI,WAAU,0DACZ,UAAAX,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -1,126 +1,127 @@
1
- import { jsxs as G, Fragment as _, jsx as t } from "react/jsx-runtime";
2
- import L, { useState as M, useId as O, createContext as P, useContext as S } from "react";
3
- const N = P(null);
4
- function q({
5
- children: n,
1
+ import { jsxs as I, Fragment as F, jsx as a } from "react/jsx-runtime";
2
+ import L, { useState as y, useId as X, createContext as _, useContext as O } from "react";
3
+ import { useConfig as P } from "./ConfigProvider.js";
4
+ const q = "rating", D = "rating-xs", J = "rating-sm", K = "rating-md", Q = "rating-lg", T = "rating-xl", U = "rating-half", W = "rating-hidden", Y = "mask", Z = "mask-star", w = "mask-star-2", nn = "mask-heart", tn = "mask-half-1", an = "mask-half-2", z = _(null);
5
+ function sn({
6
+ children: t,
6
7
  value: i,
7
- defaultValue: v = 0,
8
- onChange: x,
9
- onHoverChange: g,
10
- count: d = 5,
11
- size: e,
12
- gap: l = "md",
13
- color: o = "bg-warning",
14
- mask: h = "star-2",
15
- allowClear: u = !0,
8
+ defaultValue: p = 0,
9
+ onChange: v,
10
+ onHoverChange: l,
11
+ count: m = 5,
12
+ size: f,
13
+ gap: c = "md",
14
+ color: r = "bg-warning",
15
+ mask: u = "star-2",
16
+ allowClear: h = !0,
16
17
  allowHalf: s = !1,
17
- disabled: m = !1,
18
- className: f = "",
18
+ disabled: g = !1,
19
+ className: k = "",
19
20
  ...C
20
21
  }) {
21
- const [j, R] = M(v), [p, k] = M(0), V = i !== void 0 ? i : j, $ = O(), A = (r) => {
22
- if (m) return;
23
- const a = u && r === V ? 0 : r;
24
- i === void 0 && R(a), k(0), x?.(a);
25
- }, I = (r) => {
26
- m || (k(r), g?.(r));
27
- }, y = {
28
- xs: "rating-xs",
29
- sm: "rating-sm",
30
- md: "rating-md",
31
- lg: "rating-lg",
32
- xl: "rating-xl"
33
- }, B = {
22
+ const { componentSize: b } = P(), o = f ?? b ?? "md", [R, x] = y(p), [G, S] = y(0), M = i !== void 0 ? i : R, $ = X(), N = (e) => {
23
+ if (g) return;
24
+ const n = h && e === M ? 0 : e;
25
+ i === void 0 && x(n), S(0), v?.(n);
26
+ }, j = (e) => {
27
+ g || (S(e), l?.(e));
28
+ }, H = {
29
+ xs: D,
30
+ sm: J,
31
+ md: K,
32
+ lg: Q,
33
+ xl: T
34
+ }, A = {
34
35
  none: "gap-0",
35
36
  xs: "gap-0.5",
36
37
  sm: "gap-1",
37
38
  md: "gap-2",
38
39
  lg: "gap-3"
39
- }, E = [
40
- "rating",
40
+ }, B = [
41
+ q,
41
42
  // Half-star mode requires a size class to render correctly, default to md
42
- s ? y[e || "md"] : e && y[e],
43
- s ? "rating-half" : l && B[l],
44
- f
45
- ].filter(Boolean).join(" "), b = s ? "star-2" : h, F = n || /* @__PURE__ */ G(_, { children: [
46
- u && /* @__PURE__ */ t(c, { value: 0, hidden: !0 }),
43
+ (s || o) && H[o],
44
+ s ? U : c && A[c],
45
+ k
46
+ ].filter(Boolean).join(" "), V = s ? "star-2" : u, E = t || /* @__PURE__ */ I(F, { children: [
47
+ h && /* @__PURE__ */ a(d, { value: 0, hidden: !0 }),
47
48
  s ? (
48
49
  // Half-star mode: each star is two inputs
49
- Array.from({ length: d }, (r, a) => /* @__PURE__ */ G(L.Fragment, { children: [
50
- /* @__PURE__ */ t(c, { value: a + 0.5, mask: b, color: o, half: "first" }),
51
- /* @__PURE__ */ t(c, { value: a + 1, mask: b, color: o, half: "second" })
52
- ] }, a + 1))
50
+ Array.from({ length: m }, (e, n) => /* @__PURE__ */ I(L.Fragment, { children: [
51
+ /* @__PURE__ */ a(d, { value: n + 0.5, mask: V, color: r, half: "first" }),
52
+ /* @__PURE__ */ a(d, { value: n + 1, mask: V, color: r, half: "second" })
53
+ ] }, n + 1))
53
54
  ) : (
54
55
  // Standard mode: one input per star
55
- Array.from({ length: d }, (r, a) => /* @__PURE__ */ t(c, { value: a + 1, mask: b, color: o }, a + 1))
56
+ Array.from({ length: m }, (e, n) => /* @__PURE__ */ a(d, { value: n + 1, mask: V, color: r }, n + 1))
56
57
  )
57
58
  ] });
58
- return /* @__PURE__ */ t(N.Provider, { value: { name: $, currentValue: V, hoverValue: p, onChange: A, onHover: I, size: e, disabled: m, halfGap: s ? l : void 0 }, children: /* @__PURE__ */ t(
59
+ return /* @__PURE__ */ a(z.Provider, { value: { name: $, currentValue: M, hoverValue: G, onChange: N, onHover: j, size: o, disabled: g, halfGap: s ? c : void 0 }, children: /* @__PURE__ */ a(
59
60
  "div",
60
61
  {
61
62
  role: "radiogroup",
62
63
  "aria-label": "Rating",
63
- className: E,
64
- "data-value": V,
65
- onMouseLeave: () => I(0),
64
+ className: B,
65
+ "data-value": M,
66
+ onMouseLeave: () => j(0),
66
67
  ...C,
67
- children: F
68
+ children: E
68
69
  }
69
70
  ) });
70
71
  }
71
- function c({ value: n, mask: i = "star-2", color: v = "bg-warning", hidden: x = !1, half: g, className: d = "" }) {
72
- const e = S(N);
73
- if (!e)
72
+ function d({ value: t, mask: i = "star-2", color: p = "bg-warning", hidden: v = !1, half: l, className: m = "" }) {
73
+ const f = O(z);
74
+ if (!f)
74
75
  throw new Error("Rating.Item must be used within Rating");
75
- const { name: l, currentValue: o, hoverValue: h, onChange: u, onHover: s, disabled: m, halfGap: f } = e, C = {
76
- star: "mask-star",
77
- "star-2": "mask-star-2",
78
- heart: "mask-heart"
79
- }, R = {
80
- first: "mask-half-1",
81
- second: `mask-half-2 ${f ? {
76
+ const { name: c, currentValue: r, hoverValue: u, onChange: h, onHover: s, disabled: g, halfGap: k } = f, C = {
77
+ star: Z,
78
+ "star-2": w,
79
+ heart: nn
80
+ }, o = {
81
+ first: tn,
82
+ second: `${an} ${k ? {
82
83
  none: "",
83
84
  xs: "mr-0.5",
84
85
  sm: "mr-1",
85
86
  md: "mr-2",
86
87
  lg: "mr-3"
87
- }[f] : ""}`.trim()
88
- }, p = x ? "rating-hidden" : [
89
- "mask",
88
+ }[k] : ""}`.trim()
89
+ }, R = v ? W : [
90
+ Y,
90
91
  C[i],
91
- g && R[g],
92
- v,
93
- d
92
+ l && o[l],
93
+ p,
94
+ m
94
95
  ].filter(Boolean).join(" ");
95
- if (m)
96
- return /* @__PURE__ */ t(
96
+ if (g)
97
+ return /* @__PURE__ */ a(
97
98
  "div",
98
99
  {
99
- className: p,
100
- "aria-current": o === n ? "true" : void 0,
101
- "aria-label": `Rating ${n}`
100
+ className: R,
101
+ "aria-current": r === t ? "true" : void 0,
102
+ "aria-label": `Rating ${t}`
102
103
  }
103
104
  );
104
- const k = h > 0 ? h : o;
105
- return /* @__PURE__ */ t(
105
+ const x = u > 0 ? u : r;
106
+ return /* @__PURE__ */ a(
106
107
  "input",
107
108
  {
108
109
  type: "radio",
109
- name: l,
110
- className: p,
111
- checked: k === n,
110
+ name: c,
111
+ className: R,
112
+ checked: x === t,
112
113
  onChange: () => {
113
114
  },
114
- onClick: () => u(n),
115
- onMouseEnter: () => s(n),
116
- "aria-label": `Rating ${n}`
115
+ onClick: () => h(t),
116
+ onMouseEnter: () => s(t),
117
+ "aria-label": `Rating ${t}`
117
118
  }
118
119
  );
119
120
  }
120
- const J = Object.assign(q, {
121
- Item: c
121
+ const cn = Object.assign(sn, {
122
+ Item: d
122
123
  });
123
124
  export {
124
- J as Rating
125
+ cn as Rating
125
126
  };
126
127
  //# sourceMappingURL=Rating.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rating.js","sources":["../../src/components/Rating.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n children?: React.ReactNode\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n onHoverChange?: (value: number) => void\n count?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n color?: string\n mask?: 'star' | 'star-2' | 'heart'\n allowClear?: boolean\n allowHalf?: boolean\n disabled?: boolean\n}\n\nexport interface RatingItemProps {\n value: number\n mask?: 'star' | 'star-2' | 'heart'\n color?: string\n hidden?: boolean\n half?: 'first' | 'second'\n className?: string\n}\n\ninterface RatingContextValue {\n name: string\n currentValue: number\n hoverValue: number\n onChange: (value: number) => void\n onHover: (value: number) => void\n size?: string\n disabled?: boolean\n halfGap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n}\n\nconst RatingContext = createContext<RatingContextValue | null>(null)\n\nfunction RatingRoot({\n children,\n value,\n defaultValue = 0,\n onChange,\n onHoverChange,\n count = 5,\n size,\n gap = 'md',\n color = 'bg-warning',\n mask = 'star-2',\n allowClear = true,\n allowHalf = false,\n disabled = false,\n className = '',\n ...rest\n}: RatingProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hoverValue, setHoverValue] = useState(0)\n const currentValue = value !== undefined ? value : internalValue\n const name = useId()\n\n const handleChange = (newValue: number) => {\n if (disabled) return\n // Allow clearing if clicking the same value and allowClear is true\n const finalValue = allowClear && newValue === currentValue ? 0 : newValue\n if (value === undefined) {\n setInternalValue(finalValue)\n }\n // Clear hover state so the clicked value shows immediately\n setHoverValue(0)\n onChange?.(finalValue)\n }\n\n const handleHover = (hoverVal: number) => {\n if (disabled) return\n setHoverValue(hoverVal)\n onHoverChange?.(hoverVal)\n }\n\n const sizeClasses = {\n xs: 'rating-xs',\n sm: 'rating-sm',\n md: 'rating-md',\n lg: 'rating-lg',\n xl: 'rating-xl',\n }\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n }\n\n const classes = [\n 'rating',\n // Half-star mode requires a size class to render correctly, default to md\n allowHalf ? sizeClasses[size || 'md'] : (size && sizeClasses[size]),\n allowHalf ? 'rating-half' : (gap && gapClasses[gap]),\n className,\n ].filter(Boolean).join(' ')\n\n // Auto-generate items if no children provided\n // Note: half-star mode requires mask-star-2 per DaisyUI\n const effectiveMask = allowHalf ? 'star-2' : mask\n const items = children || (\n <>\n {allowClear && <RatingItem value={0} hidden />}\n {allowHalf ? (\n // Half-star mode: each star is two inputs\n Array.from({ length: count }, (_, i) => (\n <React.Fragment key={i + 1}>\n <RatingItem value={i + 0.5} mask={effectiveMask} color={color} half=\"first\" />\n <RatingItem value={i + 1} mask={effectiveMask} color={color} half=\"second\" />\n </React.Fragment>\n ))\n ) : (\n // Standard mode: one input per star\n Array.from({ length: count }, (_, i) => (\n <RatingItem key={i + 1} value={i + 1} mask={effectiveMask} color={color} />\n ))\n )}\n </>\n )\n\n return (\n <RatingContext.Provider value={{ name, currentValue, hoverValue, onChange: handleChange, onHover: handleHover, size, disabled, halfGap: allowHalf ? gap : undefined }}>\n <div\n role=\"radiogroup\"\n aria-label=\"Rating\"\n className={classes}\n data-value={currentValue}\n onMouseLeave={() => handleHover(0)}\n {...rest}\n >\n {items}\n </div>\n </RatingContext.Provider>\n )\n}\n\nfunction RatingItem({ value, mask = 'star-2', color = 'bg-warning', hidden = false, half, className = '' }: RatingItemProps) {\n const context = useContext(RatingContext)\n if (!context) {\n throw new Error('Rating.Item must be used within Rating')\n }\n\n const { name, currentValue, hoverValue, onChange, onHover, disabled, halfGap } = context\n\n const maskClasses = {\n star: 'mask-star',\n 'star-2': 'mask-star-2',\n heart: 'mask-heart',\n }\n\n const halfGapClasses = {\n none: '',\n xs: 'mr-0.5',\n sm: 'mr-1',\n md: 'mr-2',\n lg: 'mr-3',\n }\n\n const halfClasses = {\n first: 'mask-half-1',\n second: `mask-half-2 ${halfGap ? halfGapClasses[halfGap] : ''}`.trim(),\n }\n\n // Hidden items only get rating-hidden class (no mask)\n // Visible items get mask classes - DaisyUI CSS handles filled/unfilled state\n const classes = hidden\n ? 'rating-hidden'\n : [\n 'mask',\n maskClasses[mask],\n half && halfClasses[half],\n color,\n className,\n ].filter(Boolean).join(' ')\n\n if (disabled) {\n return (\n <div\n className={classes}\n aria-current={currentValue === value ? 'true' : undefined}\n aria-label={`Rating ${value}`}\n />\n )\n }\n\n // Use hoverValue for checked state when hovering (for visual preview)\n // DaisyUI CSS fills all stars up to the checked one\n const displayValue = hoverValue > 0 ? hoverValue : currentValue\n\n return (\n <input\n type=\"radio\"\n name={name}\n className={classes}\n checked={displayValue === value}\n onChange={() => {}} // Controlled by onClick\n onClick={() => onChange(value)}\n onMouseEnter={() => onHover(value)}\n aria-label={`Rating ${value}`}\n />\n )\n}\n\nexport const Rating = Object.assign(RatingRoot, {\n Item: RatingItem,\n})\n"],"names":["RatingContext","createContext","RatingRoot","children","value","defaultValue","onChange","onHoverChange","count","size","gap","color","mask","allowClear","allowHalf","disabled","className","rest","internalValue","setInternalValue","useState","hoverValue","setHoverValue","currentValue","name","useId","handleChange","newValue","finalValue","handleHover","hoverVal","sizeClasses","gapClasses","classes","effectiveMask","items","jsxs","Fragment","jsx","RatingItem","_","i","React","hidden","half","context","useContext","onHover","halfGap","maskClasses","halfClasses","displayValue","Rating"],"mappings":";;AAsCA,MAAMA,IAAgBC,EAAyC,IAAI;AAEnE,SAASC,EAAW;AAAA,EAClB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,MAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,OAAAC,IAAQ;AAAA,EACR,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAgB;AACd,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAASf,CAAY,GACzD,CAACgB,GAAYC,CAAa,IAAIF,EAAS,CAAC,GACxCG,IAAenB,MAAU,SAAYA,IAAQc,GAC7CM,IAAOC,EAAA,GAEPC,IAAe,CAACC,MAAqB;AACzC,QAAIZ,EAAU;AAEd,UAAMa,IAAaf,KAAcc,MAAaJ,IAAe,IAAII;AACjE,IAAIvB,MAAU,UACZe,EAAiBS,CAAU,GAG7BN,EAAc,CAAC,GACfhB,IAAWsB,CAAU;AAAA,EACvB,GAEMC,IAAc,CAACC,MAAqB;AACxC,IAAIf,MACJO,EAAcQ,CAAQ,GACtBvB,IAAgBuB,CAAQ;AAAA,EAC1B,GAEMC,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAa;AAAA,IACjB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAU;AAAA,IACd;AAAA;AAAA,IAEAnB,IAAYiB,EAAYtB,KAAQ,IAAI,IAAKA,KAAQsB,EAAYtB,CAAI;AAAA,IACjEK,IAAY,gBAAiBJ,KAAOsB,EAAWtB,CAAG;AAAA,IAClDM;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG,GAIpBkB,IAAgBpB,IAAY,WAAWF,GACvCuB,IAAQhC,KACZ,gBAAAiC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAxB,KAAc,gBAAAyB,EAACC,GAAA,EAAW,OAAO,GAAG,QAAM,IAAC;AAAA,IAC3CzB;AAAA;AAAA,MAEC,MAAM,KAAK,EAAE,QAAQN,EAAA,GAAS,CAACgC,GAAGC,MAChC,gBAAAL,EAACM,EAAM,UAAN,EACC,UAAA;AAAA,QAAA,gBAAAJ,EAACC,GAAA,EAAW,OAAOE,IAAI,KAAK,MAAMP,GAAe,OAAAvB,GAAc,MAAK,QAAA,CAAQ;AAAA,QAC5E,gBAAA2B,EAACC,KAAW,OAAOE,IAAI,GAAG,MAAMP,GAAe,OAAAvB,GAAc,MAAK,SAAA,CAAS;AAAA,MAAA,EAAA,GAFxD8B,IAAI,CAGzB,CACD;AAAA;AAAA;AAAA,MAGD,MAAM,KAAK,EAAE,QAAQjC,EAAA,GAAS,CAACgC,GAAGC,wBAC/BF,GAAA,EAAuB,OAAOE,IAAI,GAAG,MAAMP,GAAe,OAAAvB,EAAA,GAA1C8B,IAAI,CAAoD,CAC1E;AAAA;AAAA,EAAA,GAEL;AAGF,2BACGzC,EAAc,UAAd,EAAuB,OAAO,EAAE,MAAAwB,GAAM,cAAAD,GAAc,YAAAF,GAAY,UAAUK,GAAc,SAASG,GAAa,MAAApB,GAAM,UAAAM,GAAU,SAASD,IAAYJ,IAAM,UACxJ,UAAA,gBAAA4B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAWL;AAAA,MACX,cAAYV;AAAA,MACZ,cAAc,MAAMM,EAAY,CAAC;AAAA,MAChC,GAAGZ;AAAA,MAEH,UAAAkB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAASI,EAAW,EAAE,OAAAnC,GAAO,MAAAQ,IAAO,UAAU,OAAAD,IAAQ,cAAc,QAAAgC,IAAS,IAAO,MAAAC,GAAM,WAAA5B,IAAY,GAAA,GAAuB;AAC3H,QAAM6B,IAAUC,EAAW9C,CAAa;AACxC,MAAI,CAAC6C;AACH,UAAM,IAAI,MAAM,wCAAwC;AAG1D,QAAM,EAAE,MAAArB,GAAM,cAAAD,GAAc,YAAAF,GAAY,UAAAf,GAAU,SAAAyC,GAAS,UAAAhC,GAAU,SAAAiC,MAAYH,GAE3EI,IAAc;AAAA,IAClB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,EAAA,GAWHC,IAAc;AAAA,IAClB,OAAO;AAAA,IACP,QAAQ,eAAeF,IAVF;AAAA,MACrB,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,EAK4CA,CAAO,IAAI,EAAE,GAAG,KAAA;AAAA,EAAK,GAKjEf,IAAUU,IACZ,kBACA;AAAA,IACE;AAAA,IACAM,EAAYrC,CAAI;AAAA,IAChBgC,KAAQM,EAAYN,CAAI;AAAA,IACxBjC;AAAA,IACAK;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE9B,MAAID;AACF,WACE,gBAAAuB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWL;AAAA,QACX,gBAAcV,MAAiBnB,IAAQ,SAAS;AAAA,QAChD,cAAY,UAAUA,CAAK;AAAA,MAAA;AAAA,IAAA;AAOjC,QAAM+C,IAAe9B,IAAa,IAAIA,IAAaE;AAEnD,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAAd;AAAA,MACA,WAAWS;AAAA,MACX,SAASkB,MAAiB/C;AAAA,MAC1B,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,SAAS,MAAME,EAASF,CAAK;AAAA,MAC7B,cAAc,MAAM2C,EAAQ3C,CAAK;AAAA,MACjC,cAAY,UAAUA,CAAK;AAAA,IAAA;AAAA,EAAA;AAGjC;AAEO,MAAMgD,IAAS,OAAO,OAAOlD,GAAY;AAAA,EAC9C,MAAMqC;AACR,CAAC;"}
1
+ {"version":3,"file":"Rating.js","sources":["../../src/components/Rating.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dRating = 'rating'\nconst dRatingXs = 'rating-xs'\nconst dRatingSm = 'rating-sm'\nconst dRatingMd = 'rating-md'\nconst dRatingLg = 'rating-lg'\nconst dRatingXl = 'rating-xl'\nconst dRatingHalf = 'rating-half'\nconst dRatingHidden = 'rating-hidden'\nconst dMask = 'mask'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n children?: React.ReactNode\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n onHoverChange?: (value: number) => void\n count?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n color?: string\n mask?: 'star' | 'star-2' | 'heart'\n allowClear?: boolean\n allowHalf?: boolean\n disabled?: boolean\n}\n\nexport interface RatingItemProps {\n value: number\n mask?: 'star' | 'star-2' | 'heart'\n color?: string\n hidden?: boolean\n half?: 'first' | 'second'\n className?: string\n}\n\ninterface RatingContextValue {\n name: string\n currentValue: number\n hoverValue: number\n onChange: (value: number) => void\n onHover: (value: number) => void\n size?: string\n disabled?: boolean\n halfGap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n}\n\nconst RatingContext = createContext<RatingContextValue | null>(null)\n\nfunction RatingRoot({\n children,\n value,\n defaultValue = 0,\n onChange,\n onHoverChange,\n count = 5,\n size,\n gap = 'md',\n color = 'bg-warning',\n mask = 'star-2',\n allowClear = true,\n allowHalf = false,\n disabled = false,\n className = '',\n ...rest\n}: RatingProps) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hoverValue, setHoverValue] = useState(0)\n const currentValue = value !== undefined ? value : internalValue\n const name = useId()\n\n const handleChange = (newValue: number) => {\n if (disabled) return\n // Allow clearing if clicking the same value and allowClear is true\n const finalValue = allowClear && newValue === currentValue ? 0 : newValue\n if (value === undefined) {\n setInternalValue(finalValue)\n }\n // Clear hover state so the clicked value shows immediately\n setHoverValue(0)\n onChange?.(finalValue)\n }\n\n const handleHover = (hoverVal: number) => {\n if (disabled) return\n setHoverValue(hoverVal)\n onHoverChange?.(hoverVal)\n }\n\n const sizeClasses = {\n xs: dRatingXs,\n sm: dRatingSm,\n md: dRatingMd,\n lg: dRatingLg,\n xl: dRatingXl,\n }\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n }\n\n const classes = [\n dRating,\n // Half-star mode requires a size class to render correctly, default to md\n allowHalf ? sizeClasses[effectiveSize] : (effectiveSize && sizeClasses[effectiveSize]),\n allowHalf ? dRatingHalf : (gap && gapClasses[gap]),\n className,\n ].filter(Boolean).join(' ')\n\n // Auto-generate items if no children provided\n // Note: half-star mode requires mask-star-2 per DaisyUI\n const effectiveMask = allowHalf ? 'star-2' : mask\n const items = children || (\n <>\n {allowClear && <RatingItem value={0} hidden />}\n {allowHalf ? (\n // Half-star mode: each star is two inputs\n Array.from({ length: count }, (_, i) => (\n <React.Fragment key={i + 1}>\n <RatingItem value={i + 0.5} mask={effectiveMask} color={color} half=\"first\" />\n <RatingItem value={i + 1} mask={effectiveMask} color={color} half=\"second\" />\n </React.Fragment>\n ))\n ) : (\n // Standard mode: one input per star\n Array.from({ length: count }, (_, i) => (\n <RatingItem key={i + 1} value={i + 1} mask={effectiveMask} color={color} />\n ))\n )}\n </>\n )\n\n return (\n <RatingContext.Provider value={{ name, currentValue, hoverValue, onChange: handleChange, onHover: handleHover, size: effectiveSize, disabled, halfGap: allowHalf ? gap : undefined }}>\n <div\n role=\"radiogroup\"\n aria-label=\"Rating\"\n className={classes}\n data-value={currentValue}\n onMouseLeave={() => handleHover(0)}\n {...rest}\n >\n {items}\n </div>\n </RatingContext.Provider>\n )\n}\n\nfunction RatingItem({ value, mask = 'star-2', color = 'bg-warning', hidden = false, half, className = '' }: RatingItemProps) {\n const context = useContext(RatingContext)\n if (!context) {\n throw new Error('Rating.Item must be used within Rating')\n }\n\n const { name, currentValue, hoverValue, onChange, onHover, disabled, halfGap } = context\n\n const maskClasses = {\n star: dMaskStar,\n 'star-2': dMaskStar2,\n heart: dMaskHeart,\n }\n\n const halfGapClasses = {\n none: '',\n xs: 'mr-0.5',\n sm: 'mr-1',\n md: 'mr-2',\n lg: 'mr-3',\n }\n\n const halfClasses = {\n first: dMaskHalf1,\n second: `${dMaskHalf2} ${halfGap ? halfGapClasses[halfGap] : ''}`.trim(),\n }\n\n // Hidden items only get rating-hidden class (no mask)\n // Visible items get mask classes - DaisyUI CSS handles filled/unfilled state\n const classes = hidden\n ? dRatingHidden\n : [\n dMask,\n maskClasses[mask],\n half && halfClasses[half],\n color,\n className,\n ].filter(Boolean).join(' ')\n\n if (disabled) {\n return (\n <div\n className={classes}\n aria-current={currentValue === value ? 'true' : undefined}\n aria-label={`Rating ${value}`}\n />\n )\n }\n\n // Use hoverValue for checked state when hovering (for visual preview)\n // DaisyUI CSS fills all stars up to the checked one\n const displayValue = hoverValue > 0 ? hoverValue : currentValue\n\n return (\n <input\n type=\"radio\"\n name={name}\n className={classes}\n checked={displayValue === value}\n onChange={() => {}} // Controlled by onClick\n onClick={() => onChange(value)}\n onMouseEnter={() => onHover(value)}\n aria-label={`Rating ${value}`}\n />\n )\n}\n\nexport const Rating = Object.assign(RatingRoot, {\n Item: RatingItem,\n})\n"],"names":["dRating","dRatingXs","dRatingSm","dRatingMd","dRatingLg","dRatingXl","dRatingHalf","dRatingHidden","dMask","dMaskStar","dMaskStar2","dMaskHeart","dMaskHalf1","dMaskHalf2","RatingContext","createContext","RatingRoot","children","value","defaultValue","onChange","onHoverChange","count","size","gap","color","mask","allowClear","allowHalf","disabled","className","rest","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","hoverValue","setHoverValue","currentValue","name","useId","handleChange","newValue","finalValue","handleHover","hoverVal","sizeClasses","gapClasses","classes","effectiveMask","items","jsxs","Fragment","jsx","RatingItem","_","i","React","hidden","half","context","useContext","onHover","halfGap","maskClasses","halfClasses","displayValue","Rating"],"mappings":"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"}