asterui 0.12.61 → 0.12.63

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 (179) hide show
  1. package/dist/components/Affix.d.ts +2 -0
  2. package/dist/components/Affix.js.map +1 -1
  3. package/dist/components/Alert.d.ts +2 -0
  4. package/dist/components/Alert.js.map +1 -1
  5. package/dist/components/Anchor.d.ts +2 -0
  6. package/dist/components/Anchor.js +79 -75
  7. package/dist/components/Anchor.js.map +1 -1
  8. package/dist/components/Autocomplete.d.ts +1 -0
  9. package/dist/components/Autocomplete.js +115 -110
  10. package/dist/components/Autocomplete.js.map +1 -1
  11. package/dist/components/Avatar.d.ts +4 -0
  12. package/dist/components/Avatar.js.map +1 -1
  13. package/dist/components/Breadcrumb.d.ts +4 -2
  14. package/dist/components/Breadcrumb.js +54 -29
  15. package/dist/components/Breadcrumb.js.map +1 -1
  16. package/dist/components/Browser.d.ts +2 -0
  17. package/dist/components/Browser.js.map +1 -1
  18. package/dist/components/Button.d.ts +5 -1
  19. package/dist/components/Button.js +117 -107
  20. package/dist/components/Button.js.map +1 -1
  21. package/dist/components/Chart.d.ts +1 -0
  22. package/dist/components/Chart.js +31 -30
  23. package/dist/components/Chart.js.map +1 -1
  24. package/dist/components/Chat.d.ts +1 -0
  25. package/dist/components/Chat.js +39 -28
  26. package/dist/components/Chat.js.map +1 -1
  27. package/dist/components/Code.d.ts +2 -0
  28. package/dist/components/Code.js.map +1 -1
  29. package/dist/components/Command.d.ts +5 -2
  30. package/dist/components/Command.js +262 -233
  31. package/dist/components/Command.js.map +1 -1
  32. package/dist/components/Container.d.ts +2 -0
  33. package/dist/components/Container.js.map +1 -1
  34. package/dist/components/ContextMenu.d.ts +4 -0
  35. package/dist/components/ContextMenu.js +157 -122
  36. package/dist/components/ContextMenu.js.map +1 -1
  37. package/dist/components/CopyButton.d.ts +2 -0
  38. package/dist/components/CopyButton.js +9 -8
  39. package/dist/components/CopyButton.js.map +1 -1
  40. package/dist/components/Countdown.d.ts +3 -3
  41. package/dist/components/Countdown.js +49 -47
  42. package/dist/components/Countdown.js.map +1 -1
  43. package/dist/components/Diff.d.ts +3 -3
  44. package/dist/components/Diff.js +14 -10
  45. package/dist/components/Diff.js.map +1 -1
  46. package/dist/components/Divider.d.ts +2 -0
  47. package/dist/components/Divider.js.map +1 -1
  48. package/dist/components/Dock.d.ts +6 -0
  49. package/dist/components/Dock.js +75 -38
  50. package/dist/components/Dock.js.map +1 -1
  51. package/dist/components/Dropdown.js +110 -110
  52. package/dist/components/Dropdown.js.map +1 -1
  53. package/dist/components/Fieldset.d.ts +2 -0
  54. package/dist/components/Fieldset.js.map +1 -1
  55. package/dist/components/FileInput.d.ts +1 -0
  56. package/dist/components/FileInput.js +26 -26
  57. package/dist/components/FileInput.js.map +1 -1
  58. package/dist/components/Filter.d.ts +1 -0
  59. package/dist/components/Filter.js +43 -40
  60. package/dist/components/Filter.js.map +1 -1
  61. package/dist/components/Flex.d.ts +1 -0
  62. package/dist/components/Flex.js +43 -42
  63. package/dist/components/Flex.js.map +1 -1
  64. package/dist/components/FloatButton.d.ts +9 -0
  65. package/dist/components/FloatButton.js +211 -136
  66. package/dist/components/FloatButton.js.map +1 -1
  67. package/dist/components/Footer.d.ts +2 -0
  68. package/dist/components/Footer.js.map +1 -1
  69. package/dist/components/Grid.d.ts +4 -0
  70. package/dist/components/Grid.js.map +1 -1
  71. package/dist/components/Hero.d.ts +2 -0
  72. package/dist/components/Hero.js.map +1 -1
  73. package/dist/components/HoverGallery.d.ts +3 -3
  74. package/dist/components/HoverGallery.js +12 -10
  75. package/dist/components/HoverGallery.js.map +1 -1
  76. package/dist/components/Input.d.ts +1 -0
  77. package/dist/components/Input.js +201 -184
  78. package/dist/components/Input.js.map +1 -1
  79. package/dist/components/Join.d.ts +2 -0
  80. package/dist/components/Join.js.map +1 -1
  81. package/dist/components/Kbd.d.ts +2 -0
  82. package/dist/components/Kbd.js.map +1 -1
  83. package/dist/components/Loading.d.ts +3 -0
  84. package/dist/components/Loading.js +58 -35
  85. package/dist/components/Loading.js.map +1 -1
  86. package/dist/components/Mask.d.ts +2 -2
  87. package/dist/components/Mask.js.map +1 -1
  88. package/dist/components/Masonry.d.ts +1 -0
  89. package/dist/components/Masonry.js +45 -42
  90. package/dist/components/Masonry.js.map +1 -1
  91. package/dist/components/Mention.d.ts +1 -0
  92. package/dist/components/Mention.js +95 -91
  93. package/dist/components/Mention.js.map +1 -1
  94. package/dist/components/MonthCalendar.d.ts +1 -0
  95. package/dist/components/MonthCalendar.js +104 -97
  96. package/dist/components/MonthCalendar.js.map +1 -1
  97. package/dist/components/Navbar.d.ts +2 -0
  98. package/dist/components/Navbar.js.map +1 -1
  99. package/dist/components/Notification.js +32 -18
  100. package/dist/components/Notification.js.map +1 -1
  101. package/dist/components/Phone.d.ts +3 -2
  102. package/dist/components/Phone.js +10 -8
  103. package/dist/components/Phone.js.map +1 -1
  104. package/dist/components/Popconfirm.js +110 -92
  105. package/dist/components/Popconfirm.js.map +1 -1
  106. package/dist/components/Popover.d.ts +2 -0
  107. package/dist/components/Popover.js.map +1 -1
  108. package/dist/components/Progress.d.ts +2 -0
  109. package/dist/components/Progress.js.map +1 -1
  110. package/dist/components/QRCode.d.ts +1 -0
  111. package/dist/components/QRCode.js +84 -55
  112. package/dist/components/QRCode.js.map +1 -1
  113. package/dist/components/RadialProgress.d.ts +1 -0
  114. package/dist/components/RadialProgress.js +19 -17
  115. package/dist/components/RadialProgress.js.map +1 -1
  116. package/dist/components/Radio.d.ts +6 -3
  117. package/dist/components/Radio.js +9 -9
  118. package/dist/components/Radio.js.map +1 -1
  119. package/dist/components/Range.d.ts +1 -0
  120. package/dist/components/Range.js +45 -43
  121. package/dist/components/Range.js.map +1 -1
  122. package/dist/components/Rating.d.ts +4 -2
  123. package/dist/components/Rating.js +83 -79
  124. package/dist/components/Rating.js.map +1 -1
  125. package/dist/components/Responsive.d.ts +4 -2
  126. package/dist/components/Responsive.js +10 -9
  127. package/dist/components/Responsive.js.map +1 -1
  128. package/dist/components/Result.d.ts +1 -0
  129. package/dist/components/Result.js +24 -22
  130. package/dist/components/Result.js.map +1 -1
  131. package/dist/components/Select.d.ts +1 -0
  132. package/dist/components/Select.js +72 -62
  133. package/dist/components/Select.js.map +1 -1
  134. package/dist/components/Skeleton.d.ts +2 -0
  135. package/dist/components/Skeleton.js.map +1 -1
  136. package/dist/components/Space.d.ts +2 -0
  137. package/dist/components/Space.js.map +1 -1
  138. package/dist/components/Splitter.d.ts +2 -0
  139. package/dist/components/Splitter.js +137 -131
  140. package/dist/components/Splitter.js.map +1 -1
  141. package/dist/components/Stat.d.ts +4 -2
  142. package/dist/components/Stat.js +19 -18
  143. package/dist/components/Stat.js.map +1 -1
  144. package/dist/components/Status.d.ts +3 -3
  145. package/dist/components/Status.js +27 -25
  146. package/dist/components/Status.js.map +1 -1
  147. package/dist/components/Steps.d.ts +4 -2
  148. package/dist/components/Steps.js +56 -52
  149. package/dist/components/Steps.js.map +1 -1
  150. package/dist/components/TextRotate.d.ts +1 -0
  151. package/dist/components/TextRotate.js +14 -12
  152. package/dist/components/TextRotate.js.map +1 -1
  153. package/dist/components/Textarea.d.ts +1 -0
  154. package/dist/components/Textarea.js +31 -30
  155. package/dist/components/Textarea.js.map +1 -1
  156. package/dist/components/ThemeController.d.ts +6 -3
  157. package/dist/components/ThemeController.js +101 -92
  158. package/dist/components/ThemeController.js.map +1 -1
  159. package/dist/components/Toggle.d.ts +2 -0
  160. package/dist/components/Toggle.js.map +1 -1
  161. package/dist/components/Tooltip.d.ts +2 -0
  162. package/dist/components/Tooltip.js +38 -32
  163. package/dist/components/Tooltip.js.map +1 -1
  164. package/dist/components/Typography.d.ts +10 -5
  165. package/dist/components/Typography.js +84 -81
  166. package/dist/components/Typography.js.map +1 -1
  167. package/dist/components/VirtualList.d.ts +2 -1
  168. package/dist/components/VirtualList.js +40 -36
  169. package/dist/components/VirtualList.js.map +1 -1
  170. package/dist/components/Watermark.d.ts +1 -0
  171. package/dist/components/Watermark.js +74 -71
  172. package/dist/components/Watermark.js.map +1 -1
  173. package/dist/components/WeekCalendar.d.ts +1 -0
  174. package/dist/components/WeekCalendar.js +91 -76
  175. package/dist/components/WeekCalendar.js.map +1 -1
  176. package/dist/components/Window.d.ts +3 -2
  177. package/dist/components/Window.js +9 -7
  178. package/dist/components/Window.js.map +1 -1
  179. package/package.json +1 -1
@@ -1,26 +1,28 @@
1
- import { jsx as t } from "react/jsx-runtime";
2
- const c = "text-rotate", d = {
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ const l = "text-rotate", u = {
3
3
  6e3: "duration-6000",
4
4
  9e3: "duration-9000",
5
5
  12e3: "duration-12000",
6
6
  15e3: "duration-15000",
7
7
  18e3: "duration-18000"
8
- }, u = ({
9
- items: s,
10
- duration: e,
11
- centered: a = !1,
12
- className: n = ""
8
+ }, $ = ({
9
+ items: n,
10
+ duration: s,
11
+ centered: o = !1,
12
+ className: r = "",
13
+ "data-testid": t
13
14
  }) => {
14
- const r = e ? d[e] : "";
15
- return /* @__PURE__ */ t(
15
+ const d = s ? u[s] : "", c = (e) => t ? `${t}-${e}` : void 0;
16
+ return /* @__PURE__ */ a(
16
17
  "span",
17
18
  {
18
- className: `${c} ${r} ${a ? "justify-items-center" : ""} ${n}`.trim(),
19
- children: /* @__PURE__ */ t("span", { children: s.slice(0, 6).map((o, i) => /* @__PURE__ */ t("span", { children: o }, i)) })
19
+ className: `${l} ${d} ${o ? "justify-items-center" : ""} ${r}`.trim(),
20
+ "data-testid": t,
21
+ children: /* @__PURE__ */ a("span", { children: n.slice(0, 6).map((e, i) => /* @__PURE__ */ a("span", { "data-testid": c(`item-${i}`), children: e }, i)) })
20
22
  }
21
23
  );
22
24
  };
23
25
  export {
24
- u as TextRotate
26
+ $ as TextRotate
25
27
  };
26
28
  //# sourceMappingURL=TextRotate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextRotate.js","sources":["../../src/components/TextRotate.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dTextRotate = 'text-rotate'\n\nexport type TextRotateDuration = 6000 | 9000 | 12000 | 15000 | 18000\n\nconst durationClasses: Record<TextRotateDuration, string> = {\n 6000: 'duration-6000',\n 9000: 'duration-9000',\n 12000: 'duration-12000',\n 15000: 'duration-15000',\n 18000: 'duration-18000',\n}\n\nexport interface TextRotateProps {\n /** Text items to rotate through (max 6) */\n items: React.ReactNode[]\n /** Animation duration in ms (default 10000) */\n duration?: TextRotateDuration\n /** Center text horizontally */\n centered?: boolean\n /** Additional CSS classes */\n className?: string\n}\n\nexport const TextRotate: React.FC<TextRotateProps> = ({\n items,\n duration,\n centered = false,\n className = '',\n}) => {\n const durationClass = duration ? durationClasses[duration] : ''\n\n return (\n <span\n className={`${dTextRotate} ${durationClass} ${centered ? 'justify-items-center' : ''} ${className}`.trim()}\n >\n <span>\n {items.slice(0, 6).map((item, index) => (\n <span key={index}>{item}</span>\n ))}\n </span>\n </span>\n )\n}\n"],"names":["dTextRotate","durationClasses","TextRotate","items","duration","centered","className","durationClass","jsx","item","index"],"mappings":";AAGA,MAAMA,IAAc,eAIdC,IAAsD;AAAA,EAC1D,KAAM;AAAA,EACN,KAAM;AAAA,EACN,MAAO;AAAA,EACP,MAAO;AAAA,EACP,MAAO;AACT,GAaaC,IAAwC,CAAC;AAAA,EACpD,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AACd,MAAM;AACJ,QAAMC,IAAgBH,IAAWH,EAAgBG,CAAQ,IAAI;AAE7D,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAGR,CAAW,IAAIO,CAAa,IAAIF,IAAW,yBAAyB,EAAE,IAAIC,CAAS,GAAG,KAAA;AAAA,MAEpG,4BAAC,QAAA,EACE,UAAAH,EAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAACM,GAAMC,MAC5B,gBAAAF,EAAC,QAAA,EAAkB,UAAAC,EAAA,GAARC,CAAa,CACzB,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"TextRotate.js","sources":["../../src/components/TextRotate.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dTextRotate = 'text-rotate'\n\nexport type TextRotateDuration = 6000 | 9000 | 12000 | 15000 | 18000\n\nconst durationClasses: Record<TextRotateDuration, string> = {\n 6000: 'duration-6000',\n 9000: 'duration-9000',\n 12000: 'duration-12000',\n 15000: 'duration-15000',\n 18000: 'duration-18000',\n}\n\nexport interface TextRotateProps {\n /** Text items to rotate through (max 6) */\n items: React.ReactNode[]\n /** Animation duration in ms (default 10000) */\n duration?: TextRotateDuration\n /** Center text horizontally */\n centered?: boolean\n /** Additional CSS classes */\n className?: string\n 'data-testid'?: string\n}\n\nexport const TextRotate: React.FC<TextRotateProps> = ({\n items,\n duration,\n centered = false,\n className = '',\n 'data-testid': testId,\n}) => {\n const durationClass = duration ? durationClasses[duration] : ''\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <span\n className={`${dTextRotate} ${durationClass} ${centered ? 'justify-items-center' : ''} ${className}`.trim()}\n data-testid={testId}\n >\n <span>\n {items.slice(0, 6).map((item, index) => (\n <span key={index} data-testid={getTestId(`item-${index}`)}>{item}</span>\n ))}\n </span>\n </span>\n )\n}\n"],"names":["dTextRotate","durationClasses","TextRotate","items","duration","centered","className","testId","durationClass","getTestId","suffix","jsx","item","index"],"mappings":";AAGA,MAAMA,IAAc,eAIdC,IAAsD;AAAA,EAC1D,KAAM;AAAA,EACN,KAAM;AAAA,EACN,MAAO;AAAA,EACP,MAAO;AAAA,EACP,MAAO;AACT,GAcaC,IAAwC,CAAC;AAAA,EACpD,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,eAAeC;AACjB,MAAM;AACJ,QAAMC,IAAgBJ,IAAWH,EAAgBG,CAAQ,IAAI,IACvDK,IAAY,CAACC,MAAoBH,IAAS,GAAGA,CAAM,IAAIG,CAAM,KAAK;AAExE,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAGX,CAAW,IAAIQ,CAAa,IAAIH,IAAW,yBAAyB,EAAE,IAAIC,CAAS,GAAG,KAAA;AAAA,MACpG,eAAaC;AAAA,MAEb,UAAA,gBAAAI,EAAC,UACE,UAAAR,EAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAACS,GAAMC,wBAC3B,QAAA,EAAiB,eAAaJ,EAAU,QAAQI,CAAK,EAAE,GAAI,UAAAD,KAAjDC,CAAsD,CAClE,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -5,5 +5,6 @@ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTex
5
5
  ghost?: boolean;
6
6
  bordered?: boolean;
7
7
  className?: string;
8
+ 'data-testid'?: string;
8
9
  }
9
10
  export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
@@ -1,44 +1,45 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { forwardRef as T } from "react";
3
- import { useConfig as f } from "../providers/ConfigProvider.js";
4
- const u = "textarea", g = "textarea-bordered", p = "textarea-ghost", y = "textarea-xs", S = "textarea-sm", w = "textarea-md", C = "textarea-lg", z = "textarea-xl", N = "textarea-neutral", h = "textarea-primary", j = "textarea-secondary", B = "textarea-accent", X = "textarea-info", b = "textarea-success", v = "textarea-warning", A = "textarea-error", E = T(
1
+ import { jsx as T } from "react/jsx-runtime";
2
+ import { forwardRef as f } from "react";
3
+ import { useConfig as u } from "../providers/ConfigProvider.js";
4
+ const g = "textarea", p = "textarea-bordered", y = "textarea-ghost", S = "textarea-xs", w = "textarea-sm", C = "textarea-md", z = "textarea-lg", N = "textarea-xl", h = "textarea-neutral", j = "textarea-primary", B = "textarea-secondary", X = "textarea-accent", b = "textarea-info", v = "textarea-success", A = "textarea-warning", E = "textarea-error", G = f(
5
5
  ({
6
6
  size: t,
7
7
  color: e,
8
8
  ghost: r = !1,
9
9
  bordered: s = !0,
10
10
  className: o = "",
11
- ...n
12
- }, x) => {
13
- const { componentSize: c } = f(), a = t ?? c ?? "md", d = {
14
- xs: y,
15
- sm: S,
16
- md: w,
17
- lg: C,
18
- xl: z
19
- }, i = {
20
- neutral: N,
21
- primary: h,
22
- secondary: j,
23
- accent: B,
24
- info: X,
25
- success: b,
26
- warning: v,
27
- error: A
28
- }, l = [
29
- u,
11
+ "data-testid": n,
12
+ ...x
13
+ }, c) => {
14
+ const { componentSize: d } = u(), a = t ?? d ?? "md", i = {
15
+ xs: S,
16
+ sm: w,
17
+ md: C,
18
+ lg: z,
19
+ xl: N
20
+ }, l = {
21
+ neutral: h,
22
+ primary: j,
23
+ secondary: B,
24
+ accent: X,
25
+ info: b,
26
+ success: v,
27
+ warning: A,
28
+ error: E
29
+ }, m = [
30
+ g,
30
31
  "w-full",
31
- s && g,
32
- r && p,
33
- a && d[a],
34
- e && i[e],
32
+ s && p,
33
+ r && y,
34
+ a && i[a],
35
+ e && l[e],
35
36
  o
36
37
  ].filter(Boolean).join(" ");
37
- return /* @__PURE__ */ m("textarea", { ref: x, className: l, ...n });
38
+ return /* @__PURE__ */ T("textarea", { ref: c, className: m, "data-testid": n, ...x });
38
39
  }
39
40
  );
40
- E.displayName = "Textarea";
41
+ G.displayName = "Textarea";
41
42
  export {
42
- E as Textarea
43
+ G as Textarea
43
44
  };
44
45
  //# sourceMappingURL=Textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.js","sources":["../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTextarea = 'textarea'\nconst dTextareaBordered = 'textarea-bordered'\nconst dTextareaGhost = 'textarea-ghost'\nconst dTextareaXs = 'textarea-xs'\nconst dTextareaSm = 'textarea-sm'\nconst dTextareaMd = 'textarea-md'\nconst dTextareaLg = 'textarea-lg'\nconst dTextareaXl = 'textarea-xl'\nconst dTextareaNeutral = 'textarea-neutral'\nconst dTextareaPrimary = 'textarea-primary'\nconst dTextareaSecondary = 'textarea-secondary'\nconst dTextareaAccent = 'textarea-accent'\nconst dTextareaInfo = 'textarea-info'\nconst dTextareaSuccess = 'textarea-success'\nconst dTextareaWarning = 'textarea-warning'\nconst dTextareaError = 'textarea-error'\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dTextareaXs,\n sm: dTextareaSm,\n md: dTextareaMd,\n lg: dTextareaLg,\n xl: dTextareaXl,\n }\n\n const colorClasses = {\n neutral: dTextareaNeutral,\n primary: dTextareaPrimary,\n secondary: dTextareaSecondary,\n accent: dTextareaAccent,\n info: dTextareaInfo,\n success: dTextareaSuccess,\n warning: dTextareaWarning,\n error: dTextareaError,\n }\n\n const textareaClasses = [\n dTextarea,\n 'w-full',\n bordered && dTextareaBordered,\n ghost && dTextareaGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <textarea ref={ref} className={textareaClasses} {...props} />\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["dTextarea","dTextareaBordered","dTextareaGhost","dTextareaXs","dTextareaSm","dTextareaMd","dTextareaLg","dTextareaXl","dTextareaNeutral","dTextareaPrimary","dTextareaSecondary","dTextareaAccent","dTextareaInfo","dTextareaSuccess","dTextareaWarning","dTextareaError","Textarea","forwardRef","size","color","ghost","bordered","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","textareaClasses"],"mappings":";;;AAIA,MAAMA,IAAY,YACZC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAqB,sBACrBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAiB,kBAUVC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIzB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAsB,IAAe;AAAA,MACnB,SAASrB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHe,IAAkB;AAAA,MACtB9B;AAAA,MACA;AAAA,MACAqB,KAAYpB;AAAA,MACZmB,KAASlB;AAAA,MACTyB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CR,KAASU,EAAaV,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BAAQ,YAAA,EAAS,KAAAE,GAAU,WAAWM,GAAkB,GAAGP,GAAO;AAAA,EACpE;AACF;AAEAP,EAAS,cAAc;"}
1
+ {"version":3,"file":"Textarea.js","sources":["../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dTextarea = 'textarea'\nconst dTextareaBordered = 'textarea-bordered'\nconst dTextareaGhost = 'textarea-ghost'\nconst dTextareaXs = 'textarea-xs'\nconst dTextareaSm = 'textarea-sm'\nconst dTextareaMd = 'textarea-md'\nconst dTextareaLg = 'textarea-lg'\nconst dTextareaXl = 'textarea-xl'\nconst dTextareaNeutral = 'textarea-neutral'\nconst dTextareaPrimary = 'textarea-primary'\nconst dTextareaSecondary = 'textarea-secondary'\nconst dTextareaAccent = 'textarea-accent'\nconst dTextareaInfo = 'textarea-info'\nconst dTextareaSuccess = 'textarea-success'\nconst dTextareaWarning = 'textarea-warning'\nconst dTextareaError = 'textarea-error'\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n 'data-testid'?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size,\n color,\n ghost = false,\n bordered = true,\n className = '',\n 'data-testid': testId,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dTextareaXs,\n sm: dTextareaSm,\n md: dTextareaMd,\n lg: dTextareaLg,\n xl: dTextareaXl,\n }\n\n const colorClasses = {\n neutral: dTextareaNeutral,\n primary: dTextareaPrimary,\n secondary: dTextareaSecondary,\n accent: dTextareaAccent,\n info: dTextareaInfo,\n success: dTextareaSuccess,\n warning: dTextareaWarning,\n error: dTextareaError,\n }\n\n const textareaClasses = [\n dTextarea,\n 'w-full',\n bordered && dTextareaBordered,\n ghost && dTextareaGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <textarea ref={ref} className={textareaClasses} data-testid={testId} {...props} />\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["dTextarea","dTextareaBordered","dTextareaGhost","dTextareaXs","dTextareaSm","dTextareaMd","dTextareaLg","dTextareaXl","dTextareaNeutral","dTextareaPrimary","dTextareaSecondary","dTextareaAccent","dTextareaInfo","dTextareaSuccess","dTextareaWarning","dTextareaError","Textarea","forwardRef","size","color","ghost","bordered","className","testId","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","textareaClasses","jsx"],"mappings":";;;AAIA,MAAMA,IAAY,YACZC,IAAoB,qBACpBC,IAAiB,kBACjBC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAc,eACdC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAqB,sBACrBC,IAAkB,mBAClBC,IAAgB,iBAChBC,IAAmB,oBACnBC,IAAmB,oBACnBC,IAAiB,kBAWVC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,eAAeC;AAAA,IACf,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBV,KAAQQ,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAI1B;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAuB,IAAe;AAAA,MACnB,SAAStB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHgB,IAAkB;AAAA,MACtB/B;AAAA,MACA;AAAA,MACAqB,KAAYpB;AAAA,MACZmB,KAASlB;AAAA,MACT0B,KAAiBC,EAAYD,CAAa;AAAA,MAC1CT,KAASW,EAAaX,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WAAO,gBAAAU,EAAC,cAAS,KAAAP,GAAU,WAAWM,GAAiB,eAAaR,GAAS,GAAGC,GAAO;AAAA,EACzF;AACF;AAEAR,EAAS,cAAc;"}
@@ -3,12 +3,14 @@ export interface ThemeControllerSwapProps {
3
3
  darkTheme?: string;
4
4
  onChange?: (theme: string) => void;
5
5
  className?: string;
6
+ 'data-testid'?: string;
6
7
  }
7
8
  export interface ThemeControllerDropdownProps {
8
9
  themes: string[];
9
10
  defaultTheme?: string;
10
11
  onChange?: (theme: string) => void;
11
12
  className?: string;
13
+ 'data-testid'?: string;
12
14
  }
13
15
  export interface ThemeControllerToggleProps {
14
16
  lightTheme?: string;
@@ -16,10 +18,11 @@ export interface ThemeControllerToggleProps {
16
18
  onChange?: (theme: string) => void;
17
19
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
20
  className?: string;
21
+ 'data-testid'?: string;
19
22
  }
20
- declare function ThemeControllerSwap({ lightTheme, darkTheme, onChange, className, }: ThemeControllerSwapProps): import("react/jsx-runtime").JSX.Element;
21
- declare function ThemeControllerDropdown({ themes, defaultTheme, onChange, className, }: ThemeControllerDropdownProps): import("react/jsx-runtime").JSX.Element;
22
- declare function ThemeControllerToggle({ lightTheme, darkTheme, onChange, size, className, }: ThemeControllerToggleProps): import("react/jsx-runtime").JSX.Element;
23
+ declare function ThemeControllerSwap({ lightTheme, darkTheme, onChange, className, 'data-testid': testId, }: ThemeControllerSwapProps): import("react/jsx-runtime").JSX.Element;
24
+ declare function ThemeControllerDropdown({ themes, defaultTheme, onChange, className, 'data-testid': testId, }: ThemeControllerDropdownProps): import("react/jsx-runtime").JSX.Element;
25
+ declare function ThemeControllerToggle({ lightTheme, darkTheme, onChange, size, className, 'data-testid': testId, }: ThemeControllerToggleProps): import("react/jsx-runtime").JSX.Element;
23
26
  export declare const ThemeController: {
24
27
  Swap: typeof ThemeControllerSwap;
25
28
  Dropdown: typeof ThemeControllerDropdown;
@@ -1,49 +1,52 @@
1
- import { jsx as r, jsxs as p } from "react/jsx-runtime";
2
- import { useState as b, useEffect as f, useId as $ } from "react";
3
- import { useConfig as S } from "../providers/ConfigProvider.js";
4
- import { useTheme as v } from "../hooks/useTheme.js";
5
- const C = "swap", D = "swap-rotate", M = "swap-off", Z = "swap-on", N = "dropdown", B = "dropdown-end", y = "dropdown-content", A = "btn", E = "btn-sm", I = "btn-block", O = "btn-ghost", z = "toggle", j = "toggle-xs", F = "toggle-sm", H = "toggle-md", L = "toggle-lg", V = "toggle-xl";
6
- function i() {
1
+ import { jsx as r, jsxs as b } from "react/jsx-runtime";
2
+ import { useState as v, useEffect as f, useId as S } from "react";
3
+ import { useConfig as C } from "../providers/ConfigProvider.js";
4
+ import { useTheme as x } from "../hooks/useTheme.js";
5
+ const D = "swap", M = "swap-rotate", Z = "swap-off", N = "swap-on", B = "dropdown", y = "dropdown-end", E = "dropdown-content", A = "btn", O = "btn-sm", z = "btn-block", I = "btn-ghost", j = "toggle", F = "toggle-xs", H = "toggle-sm", L = "toggle-md", V = "toggle-lg", X = "toggle-xl";
6
+ function g() {
7
7
  return document.documentElement.getAttribute("data-theme");
8
8
  }
9
- function x(n) {
10
- document.documentElement.setAttribute("data-theme", n);
9
+ function T(o) {
10
+ document.documentElement.setAttribute("data-theme", o);
11
11
  }
12
- function X({
13
- lightTheme: n = "light",
14
- darkTheme: o = "dark",
15
- onChange: u,
16
- className: m = ""
12
+ function G({
13
+ lightTheme: o = "light",
14
+ darkTheme: c = "dark",
15
+ onChange: m,
16
+ className: h = "",
17
+ "data-testid": a
17
18
  }) {
18
- const { setTheme: g, isDark: t } = v(), h = g ?? x, [c, d] = b(() => t !== void 0 ? t : i() === o);
19
+ const { setTheme: p, isDark: e } = x(), w = p ?? T, [d, u] = v(() => e !== void 0 ? e : g() === c);
19
20
  f(() => {
20
- if (t !== void 0) {
21
- d(t);
21
+ if (e !== void 0) {
22
+ u(e);
22
23
  return;
23
24
  }
24
- const s = new MutationObserver(() => {
25
- const e = i();
26
- d(e === o);
25
+ const n = new MutationObserver(() => {
26
+ const t = g();
27
+ u(t === c);
27
28
  });
28
- return s.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => s.disconnect();
29
- }, [o, t]);
30
- const l = (s) => {
31
- const a = s.target.checked ? o : n;
32
- h(a), u?.(a);
33
- };
34
- return /* @__PURE__ */ p("label", { className: `${C} ${D} ${m}`, children: [
29
+ return n.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => n.disconnect();
30
+ }, [c, e]);
31
+ const i = (n) => {
32
+ const s = n.target.checked ? c : o;
33
+ w(s), m?.(s);
34
+ }, l = (n) => a ? `${a}-${n}` : void 0;
35
+ return /* @__PURE__ */ b("label", { className: `${D} ${M} ${h}`, "data-testid": a, children: [
35
36
  /* @__PURE__ */ r(
36
37
  "input",
37
38
  {
38
39
  type: "checkbox",
39
- checked: c,
40
- onChange: l
40
+ checked: d,
41
+ onChange: i,
42
+ "data-testid": l("input")
41
43
  }
42
44
  ),
43
45
  /* @__PURE__ */ r(
44
46
  "svg",
45
47
  {
46
- className: `${M} h-8 w-8 fill-current`,
48
+ className: `${Z} h-8 w-8 fill-current`,
49
+ "data-testid": l("icon-light"),
47
50
  xmlns: "http://www.w3.org/2000/svg",
48
51
  viewBox: "0 0 24 24",
49
52
  children: /* @__PURE__ */ r("path", { d: "M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z" })
@@ -52,7 +55,8 @@ function X({
52
55
  /* @__PURE__ */ r(
53
56
  "svg",
54
57
  {
55
- className: `${Z} h-8 w-8 fill-current`,
58
+ className: `${N} h-8 w-8 fill-current`,
59
+ "data-testid": l("icon-dark"),
56
60
  xmlns: "http://www.w3.org/2000/svg",
57
61
  viewBox: "0 0 24 24",
58
62
  children: /* @__PURE__ */ r("path", { d: "M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z" })
@@ -60,33 +64,34 @@ function X({
60
64
  )
61
65
  ] });
62
66
  }
63
- function G({
64
- themes: n,
65
- defaultTheme: o,
66
- onChange: u,
67
- className: m = ""
67
+ function R({
68
+ themes: o,
69
+ defaultTheme: c,
70
+ onChange: m,
71
+ className: h = "",
72
+ "data-testid": a
68
73
  }) {
69
- const { setTheme: g, resolvedTheme: t } = v(), h = g ?? x, c = $(), [d, l] = b(() => {
70
- if (t && n.includes(t)) return t;
71
- const e = i();
72
- return e && n.includes(e) ? e : o || n[0] || "light";
74
+ const { setTheme: p, resolvedTheme: e } = x(), w = p ?? T, d = S(), [u, i] = v(() => {
75
+ if (e && o.includes(e)) return e;
76
+ const t = g();
77
+ return t && o.includes(t) ? t : c || o[0] || "light";
73
78
  });
74
79
  f(() => {
75
- if (t && n.includes(t)) {
76
- l(t);
80
+ if (e && o.includes(e)) {
81
+ i(e);
77
82
  return;
78
83
  }
79
- const e = new MutationObserver(() => {
80
- const a = i();
81
- a && n.includes(a) && l(a);
84
+ const t = new MutationObserver(() => {
85
+ const s = g();
86
+ s && o.includes(s) && i(s);
82
87
  });
83
- return e.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => e.disconnect();
84
- }, [n, t]);
85
- const s = (e) => {
86
- l(e), h(e), u?.(e);
87
- };
88
- return /* @__PURE__ */ p("div", { className: `${N} ${B} ${m}`, children: [
89
- /* @__PURE__ */ p("div", { tabIndex: 0, role: "button", className: A, children: [
88
+ return t.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => t.disconnect();
89
+ }, [o, e]);
90
+ const l = (t) => {
91
+ i(t), w(t), m?.(t);
92
+ }, n = (t) => a ? `${a}-${t}` : void 0;
93
+ return /* @__PURE__ */ b("div", { className: `${B} ${y} ${h}`, "data-testid": a, children: [
94
+ /* @__PURE__ */ b("div", { tabIndex: 0, role: "button", className: A, "data-testid": n("trigger"), children: [
90
95
  "Theme",
91
96
  /* @__PURE__ */ r(
92
97
  "svg",
@@ -104,73 +109,77 @@ function G({
104
109
  "ul",
105
110
  {
106
111
  tabIndex: 0,
107
- className: `${y} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`,
108
- children: n.map((e) => /* @__PURE__ */ r("li", { children: /* @__PURE__ */ r(
112
+ className: `${E} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`,
113
+ "data-testid": n("menu"),
114
+ children: o.map((t) => /* @__PURE__ */ r("li", { children: /* @__PURE__ */ r(
109
115
  "input",
110
116
  {
111
117
  type: "radio",
112
- name: c,
113
- className: `${A} ${E} ${I} ${O} justify-start`,
114
- "aria-label": e,
115
- value: e,
116
- checked: d === e,
117
- onChange: () => s(e)
118
+ name: d,
119
+ className: `${A} ${O} ${z} ${I} justify-start`,
120
+ "aria-label": t,
121
+ value: t,
122
+ checked: u === t,
123
+ onChange: () => l(t),
124
+ "data-testid": n(`option-${t}`)
118
125
  }
119
- ) }, e))
126
+ ) }, t))
120
127
  }
121
128
  )
122
129
  ] });
123
130
  }
124
- const R = {
125
- xs: j,
126
- sm: F,
127
- md: H,
128
- lg: L,
129
- xl: V
131
+ const q = {
132
+ xs: F,
133
+ sm: H,
134
+ md: L,
135
+ lg: V,
136
+ xl: X
130
137
  };
131
- function q({
132
- lightTheme: n = "light",
133
- darkTheme: o = "dark",
134
- onChange: u,
135
- size: m,
136
- className: g = ""
138
+ function J({
139
+ lightTheme: o = "light",
140
+ darkTheme: c = "dark",
141
+ onChange: m,
142
+ size: h,
143
+ className: a = "",
144
+ "data-testid": p
137
145
  }) {
138
- const { componentSize: t } = S(), { setTheme: h, isDark: c } = v(), d = h ?? x, l = m ?? t ?? "md", [s, e] = b(() => c !== void 0 ? c : i() === o);
146
+ const { componentSize: e } = C(), { setTheme: w, isDark: d } = x(), u = w ?? T, i = h ?? e ?? "md", [l, n] = v(() => d !== void 0 ? d : g() === c);
139
147
  f(() => {
140
- if (c !== void 0) {
141
- e(c);
148
+ if (d !== void 0) {
149
+ n(d);
142
150
  return;
143
151
  }
144
- const w = new MutationObserver(() => {
145
- const T = i();
146
- e(T === o);
152
+ const s = new MutationObserver(() => {
153
+ const $ = g();
154
+ n($ === c);
147
155
  });
148
- return w.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => w.disconnect();
149
- }, [o, c]);
150
- const a = (w) => {
151
- const k = w.target.checked ? o : n;
152
- d(k), u?.(k);
156
+ return s.observe(document.documentElement, { attributes: !0, attributeFilter: ["data-theme"] }), () => s.disconnect();
157
+ }, [c, d]);
158
+ const t = (s) => {
159
+ const k = s.target.checked ? c : o;
160
+ u(k), m?.(k);
153
161
  };
154
162
  return /* @__PURE__ */ r(
155
163
  "input",
156
164
  {
157
165
  type: "checkbox",
158
- className: `${z} ${R[l]} ${g}`,
159
- checked: s,
160
- onChange: a,
161
- "aria-label": "Toggle theme"
166
+ className: `${j} ${q[i]} ${a}`,
167
+ checked: l,
168
+ onChange: t,
169
+ "aria-label": "Toggle theme",
170
+ "data-testid": p
162
171
  }
163
172
  );
164
173
  }
165
- const U = Object.assign(
174
+ const W = Object.assign(
166
175
  {},
167
176
  {
168
- Swap: X,
169
- Dropdown: G,
170
- Toggle: q
177
+ Swap: G,
178
+ Dropdown: R,
179
+ Toggle: J
171
180
  }
172
181
  );
173
182
  export {
174
- U as ThemeController
183
+ W as ThemeController
175
184
  };
176
185
  //# sourceMappingURL=ThemeController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeController.js","sources":["../../src/components/ThemeController.tsx"],"sourcesContent":["import React, { useState, useEffect, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dSwap = 'swap'\nconst dSwapRotate = 'swap-rotate'\nconst dSwapOff = 'swap-off'\nconst dSwapOn = 'swap-on'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnBlock = 'btn-block'\nconst dBtnGhost = 'btn-ghost'\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\n\nexport interface ThemeControllerSwapProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerDropdownProps {\n themes: string[]\n defaultTheme?: string\n onChange?: (theme: string) => void\n className?: string\n}\n\nexport interface ThemeControllerToggleProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n className?: string\n}\n\n// Get current theme from document\nfunction getCurrentTheme(): string | null {\n return document.documentElement.getAttribute('data-theme')\n}\n\n// Set theme directly on document (fallback when no ThemeProvider)\nfunction setThemeDirectly(theme: string) {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nfunction ThemeControllerSwap({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n className = '',\n}: ThemeControllerSwapProps) {\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <label className={`${dSwap} ${dSwapRotate} ${className}`}>\n <input\n type=\"checkbox\"\n checked={isDark}\n onChange={handleChange}\n />\n {/* sun icon */}\n <svg\n className={`${dSwapOff} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z\" />\n </svg>\n {/* moon icon */}\n <svg\n className={`${dSwapOn} h-8 w-8 fill-current`}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\" />\n </svg>\n </label>\n )\n}\n\nfunction ThemeControllerDropdown({\n themes,\n defaultTheme,\n onChange,\n className = '',\n}: ThemeControllerDropdownProps) {\n const { setTheme: contextSetTheme, resolvedTheme } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const radioName = useId()\n\n const [selectedTheme, setSelectedTheme] = useState(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) return resolvedTheme\n const current = getCurrentTheme()\n if (current && themes.includes(current)) return current\n return defaultTheme || themes[0] || 'light'\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) {\n setSelectedTheme(resolvedTheme)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) {\n setSelectedTheme(current)\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [themes, resolvedTheme])\n\n const handleChange = (theme: string) => {\n setSelectedTheme(theme)\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd} ${className}`}>\n <div tabIndex={0} role=\"button\" className={dBtn}>\n Theme\n <svg\n width=\"12px\"\n height=\"12px\"\n className=\"inline-block h-2 w-2 fill-current opacity-60\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2048 2048\"\n >\n <path d=\"M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z\"></path>\n </svg>\n </div>\n <ul\n tabIndex={0}\n className={`${dDropdownContent} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`}\n >\n {themes.map((theme) => (\n <li key={theme}>\n <input\n type=\"radio\"\n name={radioName}\n className={`${dBtn} ${dBtnSm} ${dBtnBlock} ${dBtnGhost} justify-start`}\n aria-label={theme}\n value={theme}\n checked={selectedTheme === theme}\n onChange={() => handleChange(theme)}\n />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n}\n\nfunction ThemeControllerToggle({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n size,\n className = '',\n}: ThemeControllerToggleProps) {\n const { componentSize } = useConfig()\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`${dToggle} ${sizeClasses[effectiveSize]} ${className}`}\n checked={isDark}\n onChange={handleChange}\n aria-label=\"Toggle theme\"\n />\n )\n}\n\nexport const ThemeController = Object.assign(\n {},\n {\n Swap: ThemeControllerSwap,\n Dropdown: ThemeControllerDropdown,\n Toggle: ThemeControllerToggle,\n }\n)\n"],"names":["dSwap","dSwapRotate","dSwapOff","dSwapOn","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnSm","dBtnBlock","dBtnGhost","dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","getCurrentTheme","setThemeDirectly","theme","ThemeControllerSwap","lightTheme","darkTheme","onChange","className","contextSetTheme","contextIsDark","useTheme","setTheme","isDark","setIsDark","useState","useEffect","observer","current","handleChange","e","jsxs","jsx","ThemeControllerDropdown","themes","defaultTheme","resolvedTheme","radioName","useId","selectedTheme","setSelectedTheme","sizeClasses","ThemeControllerToggle","size","componentSize","useConfig","effectiveSize","ThemeController"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeController.js","sources":["../../src/components/ThemeController.tsx"],"sourcesContent":["import React, { useState, useEffect, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dSwap = 'swap'\nconst dSwapRotate = 'swap-rotate'\nconst dSwapOff = 'swap-off'\nconst dSwapOn = 'swap-on'\nconst dDropdown = 'dropdown'\nconst dDropdownEnd = 'dropdown-end'\nconst dDropdownContent = 'dropdown-content'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnBlock = 'btn-block'\nconst dBtnGhost = 'btn-ghost'\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\n\nexport interface ThemeControllerSwapProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n className?: string\n 'data-testid'?: string\n}\n\nexport interface ThemeControllerDropdownProps {\n themes: string[]\n defaultTheme?: string\n onChange?: (theme: string) => void\n className?: string\n 'data-testid'?: string\n}\n\nexport interface ThemeControllerToggleProps {\n lightTheme?: string\n darkTheme?: string\n onChange?: (theme: string) => void\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n className?: string\n 'data-testid'?: string\n}\n\n// Get current theme from document\nfunction getCurrentTheme(): string | null {\n return document.documentElement.getAttribute('data-theme')\n}\n\n// Set theme directly on document (fallback when no ThemeProvider)\nfunction setThemeDirectly(theme: string) {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nfunction ThemeControllerSwap({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n className = '',\n 'data-testid': testId,\n}: ThemeControllerSwapProps) {\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <label className={`${dSwap} ${dSwapRotate} ${className}`} data-testid={testId}>\n <input\n type=\"checkbox\"\n checked={isDark}\n onChange={handleChange}\n data-testid={getTestId('input')}\n />\n {/* sun icon */}\n <svg\n className={`${dSwapOff} h-8 w-8 fill-current`}\n data-testid={getTestId('icon-light')}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z\" />\n </svg>\n {/* moon icon */}\n <svg\n className={`${dSwapOn} h-8 w-8 fill-current`}\n data-testid={getTestId('icon-dark')}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z\" />\n </svg>\n </label>\n )\n}\n\nfunction ThemeControllerDropdown({\n themes,\n defaultTheme,\n onChange,\n className = '',\n 'data-testid': testId,\n}: ThemeControllerDropdownProps) {\n const { setTheme: contextSetTheme, resolvedTheme } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const radioName = useId()\n\n const [selectedTheme, setSelectedTheme] = useState(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) return resolvedTheme\n const current = getCurrentTheme()\n if (current && themes.includes(current)) return current\n return defaultTheme || themes[0] || 'light'\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (resolvedTheme && themes.includes(resolvedTheme)) {\n setSelectedTheme(resolvedTheme)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n if (current && themes.includes(current)) {\n setSelectedTheme(current)\n }\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [themes, resolvedTheme])\n\n const handleChange = (theme: string) => {\n setSelectedTheme(theme)\n setTheme(theme)\n onChange?.(theme)\n }\n\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <div className={`${dDropdown} ${dDropdownEnd} ${className}`} data-testid={testId}>\n <div tabIndex={0} role=\"button\" className={dBtn} data-testid={getTestId('trigger')}>\n Theme\n <svg\n width=\"12px\"\n height=\"12px\"\n className=\"inline-block h-2 w-2 fill-current opacity-60\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 2048 2048\"\n >\n <path d=\"M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z\"></path>\n </svg>\n </div>\n <ul\n tabIndex={0}\n className={`${dDropdownContent} bg-base-300 rounded-box z-[1] w-52 p-2 shadow-2xl max-h-96 overflow-y-auto`}\n data-testid={getTestId('menu')}\n >\n {themes.map((theme) => (\n <li key={theme}>\n <input\n type=\"radio\"\n name={radioName}\n className={`${dBtn} ${dBtnSm} ${dBtnBlock} ${dBtnGhost} justify-start`}\n aria-label={theme}\n value={theme}\n checked={selectedTheme === theme}\n onChange={() => handleChange(theme)}\n data-testid={getTestId(`option-${theme}`)}\n />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n}\n\nfunction ThemeControllerToggle({\n lightTheme = 'light',\n darkTheme = 'dark',\n onChange,\n size,\n className = '',\n 'data-testid': testId,\n}: ThemeControllerToggleProps) {\n const { componentSize } = useConfig()\n const { setTheme: contextSetTheme, isDark: contextIsDark } = useTheme()\n const setTheme = contextSetTheme ?? setThemeDirectly\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const [isDark, setIsDark] = useState(() => {\n if (contextIsDark !== undefined) return contextIsDark\n const current = getCurrentTheme()\n return current === darkTheme\n })\n\n // Sync with context or external theme changes\n useEffect(() => {\n if (contextIsDark !== undefined) {\n setIsDark(contextIsDark)\n return\n }\n const observer = new MutationObserver(() => {\n const current = getCurrentTheme()\n setIsDark(current === darkTheme)\n })\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })\n return () => observer.disconnect()\n }, [darkTheme, contextIsDark])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked\n const theme = checked ? darkTheme : lightTheme\n setTheme(theme)\n onChange?.(theme)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`${dToggle} ${sizeClasses[effectiveSize]} ${className}`}\n checked={isDark}\n onChange={handleChange}\n aria-label=\"Toggle theme\"\n data-testid={testId}\n />\n )\n}\n\nexport const ThemeController = Object.assign(\n {},\n {\n Swap: ThemeControllerSwap,\n Dropdown: ThemeControllerDropdown,\n Toggle: ThemeControllerToggle,\n }\n)\n"],"names":["dSwap","dSwapRotate","dSwapOff","dSwapOn","dDropdown","dDropdownEnd","dDropdownContent","dBtn","dBtnSm","dBtnBlock","dBtnGhost","dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","getCurrentTheme","setThemeDirectly","theme","ThemeControllerSwap","lightTheme","darkTheme","onChange","className","testId","contextSetTheme","contextIsDark","useTheme","setTheme","isDark","setIsDark","useState","useEffect","observer","current","handleChange","e","getTestId","suffix","jsxs","jsx","ThemeControllerDropdown","themes","defaultTheme","resolvedTheme","radioName","useId","selectedTheme","setSelectedTheme","sizeClasses","ThemeControllerToggle","size","componentSize","useConfig","effectiveSize","ThemeController"],"mappings":"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"}
@@ -3,5 +3,7 @@ export interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputEle
3
3
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
4
  color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error';
5
5
  className?: string;
6
+ /** Test ID for testing */
7
+ 'data-testid'?: string;
6
8
  }
7
9
  export declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLInputElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAQRC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
1
+ {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAURC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
@@ -5,5 +5,7 @@ export interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  position?: 'top' | 'bottom' | 'left' | 'right';
6
6
  color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
7
7
  open?: boolean;
8
+ /** Test ID for testing */
9
+ 'data-testid'?: string;
8
10
  }
9
11
  export declare const Tooltip: React.FC<TooltipProps>;