asterui 0.12.49 → 0.12.50

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 (200) hide show
  1. package/dist/components/Alert.js +18 -18
  2. package/dist/components/Alert.js.map +1 -1
  3. package/dist/components/Anchor.js +53 -53
  4. package/dist/components/Anchor.js.map +1 -1
  5. package/dist/components/Autocomplete.js +115 -114
  6. package/dist/components/Autocomplete.js.map +1 -1
  7. package/dist/components/Avatar.js +33 -32
  8. package/dist/components/Avatar.js.map +1 -1
  9. package/dist/components/Badge.js +99 -99
  10. package/dist/components/Badge.js.map +1 -1
  11. package/dist/components/Breadcrumb.js +12 -11
  12. package/dist/components/Breadcrumb.js.map +1 -1
  13. package/dist/components/Browser.js +10 -10
  14. package/dist/components/Browser.js.map +1 -1
  15. package/dist/components/Button.js +80 -79
  16. package/dist/components/Button.js.map +1 -1
  17. package/dist/components/Card.d.ts +2 -0
  18. package/dist/components/Card.js +111 -110
  19. package/dist/components/Card.js.map +1 -1
  20. package/dist/components/Carousel.js +59 -59
  21. package/dist/components/Carousel.js.map +1 -1
  22. package/dist/components/Cascader.js +175 -174
  23. package/dist/components/Cascader.js.map +1 -1
  24. package/dist/components/Chat.js +27 -27
  25. package/dist/components/Chat.js.map +1 -1
  26. package/dist/components/Checkbox.js +98 -97
  27. package/dist/components/Checkbox.js.map +1 -1
  28. package/dist/components/Code.js +11 -11
  29. package/dist/components/Code.js.map +1 -1
  30. package/dist/components/Collapse.js +46 -46
  31. package/dist/components/Collapse.js.map +1 -1
  32. package/dist/components/ColorPicker.d.ts +1 -1
  33. package/dist/components/ColorPicker.js +93 -91
  34. package/dist/components/ColorPicker.js.map +1 -1
  35. package/dist/components/Command.js +120 -120
  36. package/dist/components/Command.js.map +1 -1
  37. package/dist/components/ConfigProvider.d.ts +1 -1
  38. package/dist/components/ConfigProvider.js +9 -9
  39. package/dist/components/ConfigProvider.js.map +1 -1
  40. package/dist/components/ContextMenu.js +33 -33
  41. package/dist/components/ContextMenu.js.map +1 -1
  42. package/dist/components/CopyButton.js +74 -73
  43. package/dist/components/CopyButton.js.map +1 -1
  44. package/dist/components/Countdown.js +60 -59
  45. package/dist/components/Countdown.js.map +1 -1
  46. package/dist/components/DatePicker.d.ts +1 -1
  47. package/dist/components/DatePicker.js +54 -53
  48. package/dist/components/DatePicker.js.map +1 -1
  49. package/dist/components/Diff.js +10 -10
  50. package/dist/components/Diff.js.map +1 -1
  51. package/dist/components/Divider.js +21 -20
  52. package/dist/components/Divider.js.map +1 -1
  53. package/dist/components/Dock.js +28 -27
  54. package/dist/components/Dock.js.map +1 -1
  55. package/dist/components/Drawer.js +43 -43
  56. package/dist/components/Drawer.js.map +1 -1
  57. package/dist/components/Dropdown.js +127 -127
  58. package/dist/components/Dropdown.js.map +1 -1
  59. package/dist/components/Empty.js +16 -15
  60. package/dist/components/Empty.js.map +1 -1
  61. package/dist/components/Fieldset.js +11 -10
  62. package/dist/components/Fieldset.js.map +1 -1
  63. package/dist/components/FileInput.js +30 -29
  64. package/dist/components/FileInput.js.map +1 -1
  65. package/dist/components/Filter.d.ts +1 -1
  66. package/dist/components/Filter.js +32 -30
  67. package/dist/components/Filter.js.map +1 -1
  68. package/dist/components/FloatButton.js +83 -83
  69. package/dist/components/FloatButton.js.map +1 -1
  70. package/dist/components/Footer.js +14 -13
  71. package/dist/components/Footer.js.map +1 -1
  72. package/dist/components/Form.js +133 -132
  73. package/dist/components/Form.js.map +1 -1
  74. package/dist/components/Hero.js +12 -11
  75. package/dist/components/Hero.js.map +1 -1
  76. package/dist/components/HoverGallery.js +7 -7
  77. package/dist/components/HoverGallery.js.map +1 -1
  78. package/dist/components/Image.js +40 -40
  79. package/dist/components/Image.js.map +1 -1
  80. package/dist/components/Input.js +171 -169
  81. package/dist/components/Input.js.map +1 -1
  82. package/dist/components/InputNumber.js +84 -83
  83. package/dist/components/InputNumber.js.map +1 -1
  84. package/dist/components/Join.js +11 -10
  85. package/dist/components/Join.js.map +1 -1
  86. package/dist/components/Kbd.js +15 -15
  87. package/dist/components/Kbd.js.map +1 -1
  88. package/dist/components/Layout.js +66 -66
  89. package/dist/components/Layout.js.map +1 -1
  90. package/dist/components/List.d.ts +1 -1
  91. package/dist/components/List.js +75 -72
  92. package/dist/components/List.js.map +1 -1
  93. package/dist/components/Loading.d.ts +1 -1
  94. package/dist/components/Loading.js +31 -29
  95. package/dist/components/Loading.js.map +1 -1
  96. package/dist/components/Mask.js +31 -31
  97. package/dist/components/Mask.js.map +1 -1
  98. package/dist/components/Mention.js +61 -61
  99. package/dist/components/Mention.js.map +1 -1
  100. package/dist/components/Menu.js +84 -84
  101. package/dist/components/Menu.js.map +1 -1
  102. package/dist/components/Message.js +30 -29
  103. package/dist/components/Message.js.map +1 -1
  104. package/dist/components/Modal.js +117 -116
  105. package/dist/components/Modal.js.map +1 -1
  106. package/dist/components/MonthCalendar.d.ts +31 -0
  107. package/dist/components/MonthCalendar.js +205 -0
  108. package/dist/components/MonthCalendar.js.map +1 -0
  109. package/dist/components/Navbar.js +25 -25
  110. package/dist/components/Navbar.js.map +1 -1
  111. package/dist/components/Notification.js +56 -55
  112. package/dist/components/Notification.js.map +1 -1
  113. package/dist/components/OTPInput.js +69 -68
  114. package/dist/components/OTPInput.js.map +1 -1
  115. package/dist/components/Pagination.d.ts +1 -1
  116. package/dist/components/Pagination.js +60 -58
  117. package/dist/components/Pagination.js.map +1 -1
  118. package/dist/components/Phone.js +10 -10
  119. package/dist/components/Phone.js.map +1 -1
  120. package/dist/components/Popconfirm.js +60 -60
  121. package/dist/components/Popconfirm.js.map +1 -1
  122. package/dist/components/Progress.js +17 -17
  123. package/dist/components/Progress.js.map +1 -1
  124. package/dist/components/QRCode.js +23 -23
  125. package/dist/components/QRCode.js.map +1 -1
  126. package/dist/components/RadialProgress.js +17 -17
  127. package/dist/components/RadialProgress.js.map +1 -1
  128. package/dist/components/Radio.js +41 -40
  129. package/dist/components/Radio.js.map +1 -1
  130. package/dist/components/Range.d.ts +1 -1
  131. package/dist/components/Range.js +39 -37
  132. package/dist/components/Range.js.map +1 -1
  133. package/dist/components/Rating.js +79 -78
  134. package/dist/components/Rating.js.map +1 -1
  135. package/dist/components/ResponsiveDrawer.js +27 -27
  136. package/dist/components/ResponsiveDrawer.js.map +1 -1
  137. package/dist/components/RichTextEditor.d.ts +32 -0
  138. package/dist/components/RichTextEditor.js +335 -0
  139. package/dist/components/RichTextEditor.js.map +1 -0
  140. package/dist/components/Segmented.d.ts +1 -1
  141. package/dist/components/Segmented.js +48 -46
  142. package/dist/components/Segmented.js.map +1 -1
  143. package/dist/components/Select.js +55 -54
  144. package/dist/components/Select.js.map +1 -1
  145. package/dist/components/Skeleton.js +9 -9
  146. package/dist/components/Skeleton.js.map +1 -1
  147. package/dist/components/Splitter.js +93 -93
  148. package/dist/components/Splitter.js.map +1 -1
  149. package/dist/components/Stat.js +17 -16
  150. package/dist/components/Stat.js.map +1 -1
  151. package/dist/components/Status.js +29 -29
  152. package/dist/components/Status.js.map +1 -1
  153. package/dist/components/Steps.js +61 -61
  154. package/dist/components/Steps.js.map +1 -1
  155. package/dist/components/Table.js +256 -256
  156. package/dist/components/Table.js.map +1 -1
  157. package/dist/components/Tabs.js +65 -65
  158. package/dist/components/Tabs.js.map +1 -1
  159. package/dist/components/Tag.js +147 -147
  160. package/dist/components/Tag.js.map +1 -1
  161. package/dist/components/TextRotate.js +6 -6
  162. package/dist/components/TextRotate.js.map +1 -1
  163. package/dist/components/Textarea.js +35 -34
  164. package/dist/components/Textarea.js.map +1 -1
  165. package/dist/components/ThemeController.d.ts +1 -1
  166. package/dist/components/ThemeController.js +71 -68
  167. package/dist/components/ThemeController.js.map +1 -1
  168. package/dist/components/TimePicker.d.ts +1 -1
  169. package/dist/components/TimePicker.js +133 -129
  170. package/dist/components/TimePicker.js.map +1 -1
  171. package/dist/components/Timeline.js +79 -79
  172. package/dist/components/Timeline.js.map +1 -1
  173. package/dist/components/Toggle.js +33 -32
  174. package/dist/components/Toggle.js.map +1 -1
  175. package/dist/components/Tooltip.js +25 -25
  176. package/dist/components/Tooltip.js.map +1 -1
  177. package/dist/components/Tour.js +126 -126
  178. package/dist/components/Tour.js.map +1 -1
  179. package/dist/components/Transfer.js +93 -92
  180. package/dist/components/Transfer.js.map +1 -1
  181. package/dist/components/Tree.js +200 -200
  182. package/dist/components/Tree.js.map +1 -1
  183. package/dist/components/TreeSelect.js +255 -254
  184. package/dist/components/TreeSelect.js.map +1 -1
  185. package/dist/components/Typography.js +71 -70
  186. package/dist/components/Typography.js.map +1 -1
  187. package/dist/components/Upload.js +81 -81
  188. package/dist/components/Upload.js.map +1 -1
  189. package/dist/components/WeekCalendar.d.ts +35 -0
  190. package/dist/components/WeekCalendar.js +204 -0
  191. package/dist/components/WeekCalendar.js.map +1 -0
  192. package/dist/components/Window.js +7 -7
  193. package/dist/components/Window.js.map +1 -1
  194. package/dist/editor.d.ts +1 -0
  195. package/dist/editor.js +5 -0
  196. package/dist/editor.js.map +1 -0
  197. package/dist/index.d.ts +4 -0
  198. package/dist/index.js +211 -207
  199. package/dist/index.js.map +1 -1
  200. package/package.json +30 -1
@@ -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":"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"}
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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"}
@@ -1,75 +1,75 @@
1
1
  import { jsxs as d, jsx as e } from "react/jsx-runtime";
2
- import R, { forwardRef as k } from "react";
3
- const I = k(
2
+ import B, { forwardRef as R } from "react";
3
+ const T = "drawer", k = "drawer-end", I = "drawer-toggle", S = "drawer-content", E = "drawer-side", F = "drawer-overlay", O = R(
4
4
  ({
5
5
  children: n,
6
6
  sidebar: i,
7
- open: s = !1,
7
+ open: r = !1,
8
8
  onOpenChange: c,
9
- end: r = !1,
9
+ end: s = !1,
10
10
  width: a = 320,
11
- responsive: l,
12
- className: m = "",
13
- sidebarClassName: w = "",
11
+ responsive: o,
12
+ className: w = "",
13
+ sidebarClassName: m = "",
14
14
  contentClassName: p = "",
15
15
  overlayClassName: g = "",
16
16
  id: f,
17
17
  "data-testid": h,
18
18
  ...b
19
19
  }, v) => {
20
- const x = R.useId(), o = f || x, y = (B) => {
21
- c?.(B.target.checked);
20
+ const x = B.useId(), l = f || x, y = (u) => {
21
+ c?.(u.target.checked);
22
22
  }, C = [
23
- "drawer",
24
- r && "drawer-end",
25
- l && {
23
+ T,
24
+ s && k,
25
+ o && {
26
26
  sm: "sm:drawer-open",
27
27
  md: "md:drawer-open",
28
28
  lg: "lg:drawer-open",
29
29
  xl: "xl:drawer-open",
30
30
  "2xl": "2xl:drawer-open"
31
- }[l],
32
- m
33
- ].filter(Boolean).join(" "), N = ["bg-base-200 min-h-full p-4", w].filter(Boolean).join(" "), j = ["drawer-content", p].filter(Boolean).join(" "), u = ["drawer-overlay", g].filter(Boolean).join(" "), t = typeof a == "number" ? `${a}px` : a;
31
+ }[o],
32
+ w
33
+ ].filter(Boolean).join(" "), D = ["bg-base-200 min-h-full p-4", m].filter(Boolean).join(" "), N = [S, p].filter(Boolean).join(" "), j = [F, g].filter(Boolean).join(" "), t = typeof a == "number" ? `${a}px` : a;
34
34
  return /* @__PURE__ */ d(
35
35
  "div",
36
36
  {
37
37
  ref: v,
38
38
  className: C,
39
- "data-state": s ? "open" : "closed",
39
+ "data-state": r ? "open" : "closed",
40
40
  "data-testid": h,
41
41
  ...b,
42
42
  children: [
43
43
  /* @__PURE__ */ e(
44
44
  "input",
45
45
  {
46
- id: o,
46
+ id: l,
47
47
  type: "checkbox",
48
- className: "drawer-toggle",
49
- checked: s,
48
+ className: I,
49
+ checked: r,
50
50
  onChange: y,
51
- "aria-label": r ? "Toggle right sidebar" : "Toggle sidebar"
51
+ "aria-label": s ? "Toggle right sidebar" : "Toggle sidebar"
52
52
  }
53
53
  ),
54
- /* @__PURE__ */ e("div", { className: j, children: n }),
55
- /* @__PURE__ */ d("div", { className: "drawer-side", style: { "--drawer-width": t }, children: [
54
+ /* @__PURE__ */ e("div", { className: N, children: n }),
55
+ /* @__PURE__ */ d("div", { className: E, style: { "--drawer-width": t }, children: [
56
56
  /* @__PURE__ */ e(
57
57
  "label",
58
58
  {
59
- htmlFor: o,
59
+ htmlFor: l,
60
60
  "aria-label": "Close sidebar",
61
- className: u
61
+ className: j
62
62
  }
63
63
  ),
64
- /* @__PURE__ */ e("div", { className: N, style: { width: t }, children: i })
64
+ /* @__PURE__ */ e("div", { className: D, style: { width: t }, children: i })
65
65
  ] })
66
66
  ]
67
67
  }
68
68
  );
69
69
  }
70
70
  );
71
- I.displayName = "ResponsiveDrawer";
71
+ O.displayName = "ResponsiveDrawer";
72
72
  export {
73
- I as ResponsiveDrawer
73
+ O as ResponsiveDrawer
74
74
  };
75
75
  //# sourceMappingURL=ResponsiveDrawer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResponsiveDrawer.js","sources":["../../src/components/ResponsiveDrawer.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport type ResponsiveDrawerBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface ResponsiveDrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Main content area */\n children: React.ReactNode\n /** Sidebar content */\n sidebar: React.ReactNode\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Position sidebar on the right side */\n end?: boolean\n /** Width of the sidebar */\n width?: number | string\n /** Breakpoint at which sidebar becomes always visible (e.g., 'lg' for lg:drawer-open) */\n responsive?: ResponsiveDrawerBreakpoint\n /** Additional classes for sidebar container */\n sidebarClassName?: string\n /** Additional classes for content area */\n contentClassName?: string\n /** Additional classes for the overlay */\n overlayClassName?: string\n /** Unique ID for the drawer (auto-generated if not provided) */\n id?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\n/**\n * ResponsiveDrawer - A responsive sidebar layout using DaisyUI's drawer.\n * Use for navigation sidebars that toggle on mobile but can be always visible on larger screens.\n * For overlay panel drawers (forms, details), use the Drawer component instead.\n */\nexport const ResponsiveDrawer = forwardRef<HTMLDivElement, ResponsiveDrawerProps>(\n (\n {\n children,\n sidebar,\n open = false,\n onOpenChange,\n end = false,\n width = 320,\n responsive,\n className = '',\n sidebarClassName = '',\n contentClassName = '',\n overlayClassName = '',\n id,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const autoId = React.useId()\n const drawerId = id || autoId\n\n const handleToggle = (e: React.ChangeEvent<HTMLInputElement>) => {\n onOpenChange?.(e.target.checked)\n }\n\n // Build responsive class if specified\n const responsiveClasses: Record<ResponsiveDrawerBreakpoint, string> = {\n sm: 'sm:drawer-open',\n md: 'md:drawer-open',\n lg: 'lg:drawer-open',\n xl: 'xl:drawer-open',\n '2xl': '2xl:drawer-open',\n }\n\n const drawerClasses = [\n 'drawer',\n end && 'drawer-end',\n responsive && responsiveClasses[responsive],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const sidebarClasses = ['bg-base-200 min-h-full p-4', sidebarClassName]\n .filter(Boolean)\n .join(' ')\n\n const contentClasses = ['drawer-content', contentClassName]\n .filter(Boolean)\n .join(' ')\n\n const overlayClasses = ['drawer-overlay', overlayClassName]\n .filter(Boolean)\n .join(' ')\n\n // Calculate width style\n const widthStyle = typeof width === 'number' ? `${width}px` : width\n\n return (\n <div\n ref={ref}\n className={drawerClasses}\n data-state={open ? 'open' : 'closed'}\n data-testid={testId}\n {...rest}\n >\n <input\n id={drawerId}\n type=\"checkbox\"\n className=\"drawer-toggle\"\n checked={open}\n onChange={handleToggle}\n aria-label={end ? 'Toggle right sidebar' : 'Toggle sidebar'}\n />\n <div className={contentClasses}>{children}</div>\n <div className=\"drawer-side\" style={{ '--drawer-width': widthStyle } as React.CSSProperties}>\n <label\n htmlFor={drawerId}\n aria-label=\"Close sidebar\"\n className={overlayClasses}\n />\n <div className={sidebarClasses} style={{ width: widthStyle }}>\n {sidebar}\n </div>\n </div>\n </div>\n )\n }\n)\n\nResponsiveDrawer.displayName = 'ResponsiveDrawer'\n"],"names":["ResponsiveDrawer","forwardRef","children","sidebar","open","onOpenChange","end","width","responsive","className","sidebarClassName","contentClassName","overlayClassName","id","testId","rest","ref","autoId","React","drawerId","handleToggle","e","drawerClasses","sidebarClasses","contentClasses","overlayClasses","widthStyle","jsxs","jsx"],"mappings":";;AAoCO,MAAMA,IAAmBC;AAAA,EAC9B,CACE;AAAA,IACE,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,cAAAC;AAAA,IACA,KAAAC,IAAM;AAAA,IACN,OAAAC,IAAQ;AAAA,IACR,YAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,kBAAAC,IAAmB;AAAA,IACnB,kBAAAC,IAAmB;AAAA,IACnB,kBAAAC,IAAmB;AAAA,IACnB,IAAAC;AAAA,IACA,eAAeC;AAAA,IACf,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAASC,EAAM,MAAA,GACfC,IAAWN,KAAMI,GAEjBG,IAAe,CAACC,MAA2C;AAC/D,MAAAhB,IAAegB,EAAE,OAAO,OAAO;AAAA,IACjC,GAWMC,IAAgB;AAAA,MACpB;AAAA,MACAhB,KAAO;AAAA,MACPE,KAXoE;AAAA,QACpE,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA,EAMyBA,CAAU;AAAA,MAC1CC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC,8BAA8Bb,CAAgB,EACnE,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC,kBAAkBb,CAAgB,EACvD,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC,kBAAkBb,CAAgB,EACvD,OAAO,OAAO,EACd,KAAK,GAAG,GAGLc,IAAa,OAAOnB,KAAU,WAAW,GAAGA,CAAK,OAAOA;AAE9D,WACE,gBAAAoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAX;AAAA,QACA,WAAWM;AAAA,QACX,cAAYlB,IAAO,SAAS;AAAA,QAC5B,eAAaU;AAAA,QACZ,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAa;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIT;AAAA,cACJ,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAASf;AAAA,cACT,UAAUgB;AAAA,cACV,cAAYd,IAAM,yBAAyB;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7C,gBAAAsB,EAAC,OAAA,EAAI,WAAWJ,GAAiB,UAAAtB,EAAA,CAAS;AAAA,UAC1C,gBAAAyB,EAAC,SAAI,WAAU,eAAc,OAAO,EAAE,kBAAkBD,KACtD,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAST;AAAA,gBACT,cAAW;AAAA,gBACX,WAAWM;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,gBAAAG,EAAC,SAAI,WAAWL,GAAgB,OAAO,EAAE,OAAOG,EAAA,GAC7C,UAAAvB,EAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAH,EAAiB,cAAc;"}
1
+ {"version":3,"file":"ResponsiveDrawer.js","sources":["../../src/components/ResponsiveDrawer.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\n// DaisyUI classes\nconst dDrawer = 'drawer'\nconst dDrawerEnd = 'drawer-end'\nconst dDrawerToggle = 'drawer-toggle'\nconst dDrawerContent = 'drawer-content'\nconst dDrawerSide = 'drawer-side'\nconst dDrawerOverlay = 'drawer-overlay'\n\nexport type ResponsiveDrawerBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport interface ResponsiveDrawerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Main content area */\n children: React.ReactNode\n /** Sidebar content */\n sidebar: React.ReactNode\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Position sidebar on the right side */\n end?: boolean\n /** Width of the sidebar */\n width?: number | string\n /** Breakpoint at which sidebar becomes always visible (e.g., 'lg' for lg:drawer-open) */\n responsive?: ResponsiveDrawerBreakpoint\n /** Additional classes for sidebar container */\n sidebarClassName?: string\n /** Additional classes for content area */\n contentClassName?: string\n /** Additional classes for the overlay */\n overlayClassName?: string\n /** Unique ID for the drawer (auto-generated if not provided) */\n id?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\n/**\n * ResponsiveDrawer - A responsive sidebar layout using DaisyUI's drawer.\n * Use for navigation sidebars that toggle on mobile but can be always visible on larger screens.\n * For overlay panel drawers (forms, details), use the Drawer component instead.\n */\nexport const ResponsiveDrawer = forwardRef<HTMLDivElement, ResponsiveDrawerProps>(\n (\n {\n children,\n sidebar,\n open = false,\n onOpenChange,\n end = false,\n width = 320,\n responsive,\n className = '',\n sidebarClassName = '',\n contentClassName = '',\n overlayClassName = '',\n id,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const autoId = React.useId()\n const drawerId = id || autoId\n\n const handleToggle = (e: React.ChangeEvent<HTMLInputElement>) => {\n onOpenChange?.(e.target.checked)\n }\n\n // Build responsive class if specified\n const responsiveClasses: Record<ResponsiveDrawerBreakpoint, string> = {\n sm: 'sm:drawer-open',\n md: 'md:drawer-open',\n lg: 'lg:drawer-open',\n xl: 'xl:drawer-open',\n '2xl': '2xl:drawer-open',\n }\n\n const drawerClasses = [\n dDrawer,\n end && dDrawerEnd,\n responsive && responsiveClasses[responsive],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const sidebarClasses = ['bg-base-200 min-h-full p-4', sidebarClassName]\n .filter(Boolean)\n .join(' ')\n\n const contentClasses = [dDrawerContent, contentClassName]\n .filter(Boolean)\n .join(' ')\n\n const overlayClasses = [dDrawerOverlay, overlayClassName]\n .filter(Boolean)\n .join(' ')\n\n // Calculate width style\n const widthStyle = typeof width === 'number' ? `${width}px` : width\n\n return (\n <div\n ref={ref}\n className={drawerClasses}\n data-state={open ? 'open' : 'closed'}\n data-testid={testId}\n {...rest}\n >\n <input\n id={drawerId}\n type=\"checkbox\"\n className={dDrawerToggle}\n checked={open}\n onChange={handleToggle}\n aria-label={end ? 'Toggle right sidebar' : 'Toggle sidebar'}\n />\n <div className={contentClasses}>{children}</div>\n <div className={dDrawerSide} style={{ '--drawer-width': widthStyle } as React.CSSProperties}>\n <label\n htmlFor={drawerId}\n aria-label=\"Close sidebar\"\n className={overlayClasses}\n />\n <div className={sidebarClasses} style={{ width: widthStyle }}>\n {sidebar}\n </div>\n </div>\n </div>\n )\n }\n)\n\nResponsiveDrawer.displayName = 'ResponsiveDrawer'\n"],"names":["dDrawer","dDrawerEnd","dDrawerToggle","dDrawerContent","dDrawerSide","dDrawerOverlay","ResponsiveDrawer","forwardRef","children","sidebar","open","onOpenChange","end","width","responsive","className","sidebarClassName","contentClassName","overlayClassName","id","testId","rest","ref","autoId","React","drawerId","handleToggle","e","drawerClasses","sidebarClasses","contentClasses","overlayClasses","widthStyle","jsxs","jsx"],"mappings":";;AAGA,MAAMA,IAAU,UACVC,IAAa,cACbC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAc,eACdC,IAAiB,kBAoCVC,IAAmBC;AAAA,EAC9B,CACE;AAAA,IACE,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,cAAAC;AAAA,IACA,KAAAC,IAAM;AAAA,IACN,OAAAC,IAAQ;AAAA,IACR,YAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,kBAAAC,IAAmB;AAAA,IACnB,kBAAAC,IAAmB;AAAA,IACnB,kBAAAC,IAAmB;AAAA,IACnB,IAAAC;AAAA,IACA,eAAeC;AAAA,IACf,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAASC,EAAM,MAAA,GACfC,IAAWN,KAAMI,GAEjBG,IAAe,CAACC,MAA2C;AAC/D,MAAAhB,IAAegB,EAAE,OAAO,OAAO;AAAA,IACjC,GAWMC,IAAgB;AAAA,MACpB5B;AAAA,MACAY,KAAOX;AAAA,MACPa,KAXoE;AAAA,QACpE,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA,EAMyBA,CAAU;AAAA,MAC1CC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC,8BAA8Bb,CAAgB,EACnE,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC3B,GAAgBc,CAAgB,EACrD,OAAO,OAAO,EACd,KAAK,GAAG,GAELc,IAAiB,CAAC1B,GAAgBa,CAAgB,EACrD,OAAO,OAAO,EACd,KAAK,GAAG,GAGLc,IAAa,OAAOnB,KAAU,WAAW,GAAGA,CAAK,OAAOA;AAE9D,WACE,gBAAAoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAX;AAAA,QACA,WAAWM;AAAA,QACX,cAAYlB,IAAO,SAAS;AAAA,QAC5B,eAAaU;AAAA,QACZ,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAa;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIT;AAAA,cACJ,MAAK;AAAA,cACL,WAAWvB;AAAA,cACX,SAASQ;AAAA,cACT,UAAUgB;AAAA,cACV,cAAYd,IAAM,yBAAyB;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7C,gBAAAsB,EAAC,OAAA,EAAI,WAAWJ,GAAiB,UAAAtB,EAAA,CAAS;AAAA,UAC1C,gBAAAyB,EAAC,SAAI,WAAW7B,GAAa,OAAO,EAAE,kBAAkB4B,KACtD,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAST;AAAA,gBACT,cAAW;AAAA,gBACX,WAAWM;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,gBAAAG,EAAC,SAAI,WAAWL,GAAgB,OAAO,EAAE,OAAOG,EAAA,GAC7C,UAAAvB,EAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAH,EAAiB,cAAc;"}
@@ -0,0 +1,32 @@
1
+ import { default as React } from 'react';
2
+ import { Editor } from '@tiptap/react';
3
+ export type ToolbarItem = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code' | 'heading1' | 'heading2' | 'heading3' | 'bulletList' | 'orderedList' | 'blockquote' | 'codeBlock' | 'horizontalRule' | 'link' | 'undo' | 'redo' | '|';
4
+ export interface RichTextEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
5
+ /** Initial HTML content */
6
+ value?: string;
7
+ /** Callback when content changes */
8
+ onChange?: (html: string) => void;
9
+ /** Placeholder text */
10
+ placeholder?: string;
11
+ /** Toolbar items to display */
12
+ toolbar?: ToolbarItem[];
13
+ /** Hide the toolbar */
14
+ hideToolbar?: boolean;
15
+ /** Make editor read-only */
16
+ readOnly?: boolean;
17
+ /** Auto focus on mount */
18
+ autoFocus?: boolean;
19
+ /** Minimum height of the editor */
20
+ minHeight?: string | number;
21
+ /** Maximum height of the editor (enables scrolling) */
22
+ maxHeight?: string | number;
23
+ /** Editor size variant */
24
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
25
+ /** Show border around editor */
26
+ bordered?: boolean;
27
+ /** Callback with editor instance */
28
+ onEditorReady?: (editor: Editor) => void;
29
+ 'data-testid'?: string;
30
+ }
31
+ export declare const RichTextEditor: React.ForwardRefExoticComponent<RichTextEditorProps & React.RefAttributes<HTMLDivElement>>;
32
+ export default RichTextEditor;