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 +1 @@
1
- {"version":3,"file":"QRCode.js","sources":["../../src/components/QRCode.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\nimport QRCodeLib from 'qrcode'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingLg = 'loading-lg'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnPrimary = 'btn-primary'\n\nexport type QRCodeErrorLevel = 'L' | 'M' | 'Q' | 'H'\nexport type QRCodeType = 'canvas' | 'svg'\nexport type QRCodeStatus = 'active' | 'loading' | 'expired'\n\nexport interface QRCodeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color'> {\n value: string\n size?: number\n errorLevel?: QRCodeErrorLevel\n icon?: string\n iconSize?: number\n type?: QRCodeType\n color?: string\n bgColor?: string\n bordered?: boolean\n status?: QRCodeStatus\n onRefresh?: () => void\n}\n\nexport const QRCode: React.FC<QRCodeProps> = ({\n value,\n size = 160,\n errorLevel = 'M',\n icon,\n iconSize = 40,\n type = 'canvas',\n color,\n bgColor,\n bordered = true,\n status = 'active',\n onRefresh,\n className = '',\n ...rest\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const { colors } = useTheme()\n\n // Theme-aware default colors from DaisyUI CSS variables\n const effectiveColor = color ?? colors.foreground\n const effectiveBgColor = bgColor ?? colors.background\n\n useEffect(() => {\n if (status !== 'active' || !value || type !== 'canvas') return\n\n const generateQRCode = async () => {\n if (!canvasRef.current) return\n\n try {\n await QRCodeLib.toCanvas(canvasRef.current, value, {\n width: size,\n margin: 1,\n color: {\n dark: effectiveColor,\n light: effectiveBgColor,\n },\n errorCorrectionLevel: errorLevel,\n })\n\n if (icon && canvasRef.current) {\n const canvas = canvasRef.current\n const ctx = canvas.getContext('2d')\n if (ctx) {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n const iconX = (size - iconSize) / 2\n const iconY = (size - iconSize) / 2\n ctx.fillStyle = effectiveBgColor\n ctx.fillRect(iconX - 4, iconY - 4, iconSize + 8, iconSize + 8)\n ctx.drawImage(img, iconX, iconY, iconSize, iconSize)\n }\n img.src = icon\n }\n }\n } catch (error) {\n console.error('QR Code generation error:', error)\n }\n }\n\n generateQRCode()\n }, [value, size, errorLevel, icon, iconSize, type, effectiveColor, effectiveBgColor, status])\n\n // Download functionality can be implemented by consumers\n // by accessing the canvas ref and converting to data URL\n\n const containerClasses = [\n 'inline-flex items-center justify-center',\n bordered && 'border border-base-content/20 p-3',\n 'bg-base-100',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n if (status === 'loading') {\n return (\n <div className={containerClasses} style={{ width: size + (bordered ? 24 : 0), height: size + (bordered ? 24 : 0) }} data-state=\"loading\" {...rest}>\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingLg}`}></span>\n <span className=\"text-sm text-base-content/70\">Loading...</span>\n </div>\n </div>\n )\n }\n\n if (status === 'expired') {\n return (\n <div className={containerClasses} style={{ width: size + (bordered ? 24 : 0), height: size + (bordered ? 24 : 0) }} data-state=\"expired\" {...rest}>\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <svg className=\"w-12 h-12 text-base-content/30\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-sm text-base-content/70\">QR Code Expired</span>\n {onRefresh && (\n <button className={`${dBtn} ${dBtnSm} ${dBtnPrimary}`} onClick={onRefresh}>\n Refresh\n </button>\n )}\n </div>\n </div>\n )\n }\n\n if (type === 'canvas') {\n return (\n <div className=\"inline-block\" data-state=\"active\" {...rest}>\n <div className={containerClasses}>\n <canvas ref={canvasRef} style={{ display: 'block' }} />\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"inline-block\" data-state=\"active\" {...rest}>\n <div className={containerClasses}>\n <div style={{ width: size, height: size }} className=\"bg-base-content/5\">\n <span className=\"text-xs text-base-content/50\">SVG mode placeholder</span>\n </div>\n </div>\n </div>\n )\n}\n\nQRCode.displayName = 'QRCode'\n\nexport default QRCode\n"],"names":["dLoading","dLoadingSpinner","dLoadingLg","dBtn","dBtnSm","dBtnPrimary","QRCode","value","size","errorLevel","icon","iconSize","type","color","bgColor","bordered","status","onRefresh","className","rest","canvasRef","useRef","colors","useTheme","effectiveColor","effectiveBgColor","useEffect","QRCodeLib","ctx","img","iconX","iconY","error","containerClasses","jsx","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"QRCode.js","sources":["../../src/components/QRCode.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\nimport QRCodeLib from 'qrcode'\nimport { useTheme } from '../hooks/useTheme'\n\n// DaisyUI classes\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingLg = 'loading-lg'\nconst dBtn = 'btn'\nconst dBtnSm = 'btn-sm'\nconst dBtnPrimary = 'btn-primary'\n\nexport type QRCodeErrorLevel = 'L' | 'M' | 'Q' | 'H'\nexport type QRCodeType = 'canvas' | 'svg'\nexport type QRCodeStatus = 'active' | 'loading' | 'expired'\n\nexport interface QRCodeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color'> {\n value: string\n size?: number\n errorLevel?: QRCodeErrorLevel\n icon?: string\n iconSize?: number\n type?: QRCodeType\n color?: string\n bgColor?: string\n bordered?: boolean\n status?: QRCodeStatus\n onRefresh?: () => void\n 'data-testid'?: string\n}\n\nexport const QRCode: React.FC<QRCodeProps> = ({\n value,\n size = 160,\n errorLevel = 'M',\n icon,\n iconSize = 40,\n type = 'canvas',\n color,\n bgColor,\n bordered = true,\n status = 'active',\n onRefresh,\n className = '',\n 'data-testid': testId,\n ...rest\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const { colors } = useTheme()\n\n // Theme-aware default colors from DaisyUI CSS variables\n const effectiveColor = color ?? colors.foreground\n const effectiveBgColor = bgColor ?? colors.background\n\n useEffect(() => {\n if (status !== 'active' || !value || type !== 'canvas') return\n\n const generateQRCode = async () => {\n if (!canvasRef.current) return\n\n try {\n await QRCodeLib.toCanvas(canvasRef.current, value, {\n width: size,\n margin: 1,\n color: {\n dark: effectiveColor,\n light: effectiveBgColor,\n },\n errorCorrectionLevel: errorLevel,\n })\n\n if (icon && canvasRef.current) {\n const canvas = canvasRef.current\n const ctx = canvas.getContext('2d')\n if (ctx) {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n const iconX = (size - iconSize) / 2\n const iconY = (size - iconSize) / 2\n ctx.fillStyle = effectiveBgColor\n ctx.fillRect(iconX - 4, iconY - 4, iconSize + 8, iconSize + 8)\n ctx.drawImage(img, iconX, iconY, iconSize, iconSize)\n }\n img.src = icon\n }\n }\n } catch (error) {\n console.error('QR Code generation error:', error)\n }\n }\n\n generateQRCode()\n }, [value, size, errorLevel, icon, iconSize, type, effectiveColor, effectiveBgColor, status])\n\n // Download functionality can be implemented by consumers\n // by accessing the canvas ref and converting to data URL\n\n const containerClasses = [\n 'inline-flex items-center justify-center',\n bordered && 'border border-base-content/20 p-3',\n 'bg-base-100',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n if (status === 'loading') {\n return (\n <div\n className={containerClasses}\n style={{ width: size + (bordered ? 24 : 0), height: size + (bordered ? 24 : 0) }}\n data-state=\"loading\"\n data-testid={testId}\n {...rest}\n >\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingLg}`}></span>\n <span className=\"text-sm text-base-content/70\" data-testid={getTestId('loading-text')}>Loading...</span>\n </div>\n </div>\n )\n }\n\n if (status === 'expired') {\n return (\n <div\n className={containerClasses}\n style={{ width: size + (bordered ? 24 : 0), height: size + (bordered ? 24 : 0) }}\n data-state=\"expired\"\n data-testid={testId}\n {...rest}\n >\n <div className=\"flex flex-col items-center justify-center gap-2\">\n <svg className=\"w-12 h-12 text-base-content/30\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n <span className=\"text-sm text-base-content/70\" data-testid={getTestId('expired-text')}>QR Code Expired</span>\n {onRefresh && (\n <button\n className={`${dBtn} ${dBtnSm} ${dBtnPrimary}`}\n onClick={onRefresh}\n data-testid={getTestId('refresh')}\n >\n Refresh\n </button>\n )}\n </div>\n </div>\n )\n }\n\n if (type === 'canvas') {\n return (\n <div className=\"inline-block\" data-state=\"active\" data-testid={testId} {...rest}>\n <div className={containerClasses}>\n <canvas ref={canvasRef} style={{ display: 'block' }} data-testid={getTestId('canvas')} />\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"inline-block\" data-state=\"active\" data-testid={testId} {...rest}>\n <div className={containerClasses}>\n <div style={{ width: size, height: size }} className=\"bg-base-content/5\" data-testid={getTestId('svg')}>\n <span className=\"text-xs text-base-content/50\">SVG mode placeholder</span>\n </div>\n </div>\n </div>\n )\n}\n\nQRCode.displayName = 'QRCode'\n\nexport default QRCode\n"],"names":["dLoading","dLoadingSpinner","dLoadingLg","dBtn","dBtnSm","dBtnPrimary","QRCode","value","size","errorLevel","icon","iconSize","type","color","bgColor","bordered","status","onRefresh","className","testId","rest","canvasRef","useRef","colors","useTheme","effectiveColor","effectiveBgColor","useEffect","QRCodeLib","ctx","img","iconX","iconY","error","containerClasses","getTestId","suffix","jsx","jsxs"],"mappings":"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"}
@@ -6,5 +6,6 @@ export interface RadialProgressProps extends Omit<React.HTMLAttributes<HTMLDivEl
6
6
  color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info' | 'neutral';
7
7
  showValue?: boolean;
8
8
  children?: React.ReactNode;
9
+ 'data-testid'?: string;
9
10
  }
10
11
  export declare const RadialProgress: React.FC<RadialProgressProps>;
@@ -1,5 +1,5 @@
1
- import { jsx as x } from "react/jsx-runtime";
2
- const p = "radial-progress", f = "--value", m = "--size", y = "--thickness", g = {
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ const f = "radial-progress", m = "--value", y = "--size", g = "--thickness", v = {
3
3
  primary: "text-primary",
4
4
  secondary: "text-secondary",
5
5
  accent: "text-accent",
@@ -8,41 +8,43 @@ const p = "radial-progress", f = "--value", m = "--size", y = "--thickness", g =
8
8
  error: "text-error",
9
9
  info: "text-info",
10
10
  neutral: "text-neutral"
11
- }, C = ({
12
- value: t,
11
+ }, b = ({
12
+ value: r,
13
13
  size: e,
14
14
  thickness: s,
15
- color: o,
15
+ color: a,
16
16
  showValue: i = !0,
17
- children: a,
17
+ children: o,
18
18
  className: n = "",
19
19
  style: c,
20
+ "data-testid": d,
20
21
  ...l
21
22
  }) => {
22
23
  const u = () => {
23
- const r = [p];
24
- return o && r.push(g[o]), n && r.push(n), r.join(" ");
25
- }, d = () => {
26
- const r = {
27
- [f]: t
24
+ const t = [f];
25
+ return a && t.push(v[a]), n && t.push(n), t.join(" ");
26
+ }, x = () => {
27
+ const t = {
28
+ [m]: r
28
29
  };
29
- return e !== void 0 && (r[m] = typeof e == "number" ? `${e}rem` : e), s !== void 0 && (r[y] = typeof s == "number" ? `${s}px` : s), r;
30
+ return e !== void 0 && (t[y] = typeof e == "number" ? `${e}rem` : e), s !== void 0 && (t[g] = typeof s == "number" ? `${s}px` : s), t;
30
31
  };
31
- return /* @__PURE__ */ x(
32
+ return /* @__PURE__ */ p(
32
33
  "div",
33
34
  {
34
35
  className: u(),
35
- style: { ...d(), ...c },
36
+ style: { ...x(), ...c },
36
37
  role: "progressbar",
37
- "aria-valuenow": t,
38
+ "aria-valuenow": r,
38
39
  "aria-valuemin": 0,
39
40
  "aria-valuemax": 100,
41
+ "data-testid": d,
40
42
  ...l,
41
- children: a !== void 0 ? a : i ? `${t}%` : null
43
+ children: o !== void 0 ? o : i ? `${r}%` : null
42
44
  }
43
45
  );
44
46
  };
45
47
  export {
46
- C as RadialProgress
48
+ b as RadialProgress
47
49
  };
48
50
  //# sourceMappingURL=RadialProgress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadialProgress.js","sources":["../../src/components/RadialProgress.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dRadialProgress = 'radial-progress'\nconst dCssValue = '--value'\nconst dCssSize = '--size'\nconst dCssThickness = '--thickness'\n\nexport interface RadialProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color'> {\n value: number\n size?: string | number\n thickness?: string | number\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info' | 'neutral'\n showValue?: boolean\n children?: React.ReactNode\n}\n\nconst colorClasses = {\n primary: 'text-primary',\n secondary: 'text-secondary',\n accent: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n info: 'text-info',\n neutral: 'text-neutral',\n} as const\n\nexport const RadialProgress: React.FC<RadialProgressProps> = ({\n value,\n size,\n thickness,\n color,\n showValue = true,\n children,\n className = '',\n style,\n ...rest\n}) => {\n const getClasses = () => {\n const classes = [dRadialProgress]\n\n if (color) {\n classes.push(colorClasses[color])\n }\n\n if (className) {\n classes.push(className)\n }\n\n return classes.join(' ')\n }\n\n const getStyle = (): React.CSSProperties => {\n const style: Record<string, string | number> = {\n [dCssValue]: value,\n }\n\n if (size !== undefined) {\n style[dCssSize] = typeof size === 'number' ? `${size}rem` : size\n }\n\n if (thickness !== undefined) {\n style[dCssThickness] = typeof thickness === 'number' ? `${thickness}px` : thickness\n }\n\n return style as React.CSSProperties\n }\n\n return (\n <div\n className={getClasses()}\n style={{ ...getStyle(), ...style }}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n {...rest}\n >\n {children !== undefined ? children : showValue ? `${value}%` : null}\n </div>\n )\n}\n"],"names":["dRadialProgress","dCssValue","dCssSize","dCssThickness","colorClasses","RadialProgress","value","size","thickness","color","showValue","children","className","style","rest","getClasses","classes","getStyle","jsx"],"mappings":";AAGA,MAAMA,IAAkB,mBAClBC,IAAY,WACZC,IAAW,UACXC,IAAgB,eAWhBC,IAAe;AAAA,EACnB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,IAAgD,CAAC;AAAA,EAC5D,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAa,MAAM;AACvB,UAAMC,IAAU,CAAChB,CAAe;AAEhC,WAAIS,KACFO,EAAQ,KAAKZ,EAAaK,CAAK,CAAC,GAG9BG,KACFI,EAAQ,KAAKJ,CAAS,GAGjBI,EAAQ,KAAK,GAAG;AAAA,EACzB,GAEMC,IAAW,MAA2B;AAC1C,UAAMJ,IAAyC;AAAA,MAC7C,CAACZ,CAAS,GAAGK;AAAA,IAAA;AAGf,WAAIC,MAAS,WACXM,EAAMX,CAAQ,IAAI,OAAOK,KAAS,WAAW,GAAGA,CAAI,QAAQA,IAG1DC,MAAc,WAChBK,EAAMV,CAAa,IAAI,OAAOK,KAAc,WAAW,GAAGA,CAAS,OAAOA,IAGrEK;AAAAA,EACT;AAEA,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,EAAA;AAAA,MACX,OAAO,EAAE,GAAGE,EAAA,GAAY,GAAGJ,EAAA;AAAA,MAC3B,MAAK;AAAA,MACL,iBAAeP;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACd,GAAGQ;AAAA,MAEH,gBAAa,SAAYH,IAAWD,IAAY,GAAGJ,CAAK,MAAM;AAAA,IAAA;AAAA,EAAA;AAGrE;"}
1
+ {"version":3,"file":"RadialProgress.js","sources":["../../src/components/RadialProgress.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dRadialProgress = 'radial-progress'\nconst dCssValue = '--value'\nconst dCssSize = '--size'\nconst dCssThickness = '--thickness'\n\nexport interface RadialProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'color'> {\n value: number\n size?: string | number\n thickness?: string | number\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error' | 'info' | 'neutral'\n showValue?: boolean\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nconst colorClasses = {\n primary: 'text-primary',\n secondary: 'text-secondary',\n accent: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n info: 'text-info',\n neutral: 'text-neutral',\n} as const\n\nexport const RadialProgress: React.FC<RadialProgressProps> = ({\n value,\n size,\n thickness,\n color,\n showValue = true,\n children,\n className = '',\n style,\n 'data-testid': testId,\n ...rest\n}) => {\n const getClasses = () => {\n const classes = [dRadialProgress]\n\n if (color) {\n classes.push(colorClasses[color])\n }\n\n if (className) {\n classes.push(className)\n }\n\n return classes.join(' ')\n }\n\n const getStyle = (): React.CSSProperties => {\n const style: Record<string, string | number> = {\n [dCssValue]: value,\n }\n\n if (size !== undefined) {\n style[dCssSize] = typeof size === 'number' ? `${size}rem` : size\n }\n\n if (thickness !== undefined) {\n style[dCssThickness] = typeof thickness === 'number' ? `${thickness}px` : thickness\n }\n\n return style as React.CSSProperties\n }\n\n return (\n <div\n className={getClasses()}\n style={{ ...getStyle(), ...style }}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n data-testid={testId}\n {...rest}\n >\n {children !== undefined ? children : showValue ? `${value}%` : null}\n </div>\n )\n}\n"],"names":["dRadialProgress","dCssValue","dCssSize","dCssThickness","colorClasses","RadialProgress","value","size","thickness","color","showValue","children","className","style","testId","rest","getClasses","classes","getStyle","jsx"],"mappings":";AAGA,MAAMA,IAAkB,mBAClBC,IAAY,WACZC,IAAW,UACXC,IAAgB,eAYhBC,IAAe;AAAA,EACnB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,IAAgD,CAAC;AAAA,EAC5D,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,eAAeC;AAAA,EACf,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAa,MAAM;AACvB,UAAMC,IAAU,CAACjB,CAAe;AAEhC,WAAIS,KACFQ,EAAQ,KAAKb,EAAaK,CAAK,CAAC,GAG9BG,KACFK,EAAQ,KAAKL,CAAS,GAGjBK,EAAQ,KAAK,GAAG;AAAA,EACzB,GAEMC,IAAW,MAA2B;AAC1C,UAAML,IAAyC;AAAA,MAC7C,CAACZ,CAAS,GAAGK;AAAA,IAAA;AAGf,WAAIC,MAAS,WACXM,EAAMX,CAAQ,IAAI,OAAOK,KAAS,WAAW,GAAGA,CAAI,QAAQA,IAG1DC,MAAc,WAChBK,EAAMV,CAAa,IAAI,OAAOK,KAAc,WAAW,GAAGA,CAAS,OAAOA,IAGrEK;AAAAA,EACT;AAEA,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWH,EAAA;AAAA,MACX,OAAO,EAAE,GAAGE,EAAA,GAAY,GAAGL,EAAA;AAAA,MAC3B,MAAK;AAAA,MACL,iBAAeP;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,eAAaQ;AAAA,MACZ,GAAGC;AAAA,MAEH,gBAAa,SAAYJ,IAAWD,IAAY,GAAGJ,CAAK,MAAM;AAAA,IAAA;AAAA,EAAA;AAGrE;"}
@@ -4,6 +4,8 @@ export interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
4
4
  color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
5
5
  className?: string;
6
6
  children?: React.ReactNode;
7
+ /** Test ID for testing */
8
+ 'data-testid'?: string;
7
9
  }
8
10
  export interface RadioGroupChangeEvent {
9
11
  target: {
@@ -11,15 +13,16 @@ export interface RadioGroupChangeEvent {
11
13
  name?: string;
12
14
  };
13
15
  }
14
- export interface RadioGroupProps {
16
+ export interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
15
17
  children: React.ReactNode;
16
18
  value?: string | number;
17
19
  defaultValue?: string | number;
18
20
  onChange?: (e: RadioGroupChangeEvent) => void;
19
21
  name?: string;
20
- className?: string;
22
+ /** Test ID for testing */
23
+ 'data-testid'?: string;
21
24
  }
22
- declare function RadioGroup({ children, value, defaultValue, onChange, name, className }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
25
+ declare function RadioGroup({ children, value, defaultValue, onChange, name, className, 'data-testid': testId, ...rest }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
23
26
  export declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<HTMLInputElement>> & {
24
27
  Group: typeof RadioGroup;
25
28
  };
@@ -2,15 +2,15 @@ import { jsx as t, jsxs as z } from "react/jsx-runtime";
2
2
  import b, { forwardRef as G, useContext as V, createContext as v } from "react";
3
3
  import { useConfig as w } from "../providers/ConfigProvider.js";
4
4
  const I = "radio", P = "radio-xs", X = "radio-sm", A = "radio-md", B = "radio-lg", E = "radio-xl", L = "radio-neutral", M = "radio-primary", O = "radio-secondary", W = "radio-accent", $ = "radio-info", q = "radio-success", D = "radio-warning", F = "radio-error", g = v(null);
5
- function H({ children: i, value: n, defaultValue: d, onChange: o, name: e, className: c = "" }) {
6
- const [l, r] = b.useState(d), m = n !== void 0 ? n : l, u = (s) => {
7
- n === void 0 && r(s), o?.({ target: { value: s, name: e } });
5
+ function H({ children: d, value: n, defaultValue: i, onChange: o, name: e, className: c = "", "data-testid": l, ...s }) {
6
+ const [m, u] = b.useState(i), p = n !== void 0 ? n : m, r = (a) => {
7
+ n === void 0 && u(a), o?.({ target: { value: a, name: e } });
8
8
  };
9
- return /* @__PURE__ */ t(g.Provider, { value: { value: m, onChange: u, name: e }, children: /* @__PURE__ */ t("div", { role: "radiogroup", className: c, children: i }) });
9
+ return /* @__PURE__ */ t(g.Provider, { value: { value: p, onChange: r, name: e }, children: /* @__PURE__ */ t("div", { role: "radiogroup", className: c, "data-testid": l, ...s, children: d }) });
10
10
  }
11
11
  const h = G(
12
- ({ size: i, color: n, className: d = "", value: o, checked: e, onChange: c, name: l, children: r, ...m }, u) => {
13
- const { componentSize: s } = w(), p = i ?? s ?? "md", a = V(g), C = {
12
+ ({ size: d, color: n, className: i = "", value: o, checked: e, onChange: c, name: l, children: s, ...m }, u) => {
13
+ const { componentSize: p } = w(), r = d ?? p ?? "md", a = V(g), C = {
14
14
  xs: P,
15
15
  sm: X,
16
16
  md: A,
@@ -25,7 +25,7 @@ const h = G(
25
25
  success: q,
26
26
  warning: D,
27
27
  error: F
28
- }, y = [I, p && C[p], n && x[n]].filter(Boolean).join(" "), R = a ? a.value === o : e, S = (N) => {
28
+ }, y = [I, r && C[r], n && x[n]].filter(Boolean).join(" "), R = a ? a.value === o : e, S = (N) => {
29
29
  if (a && o !== void 0) {
30
30
  const j = typeof o == "string" || typeof o == "number" ? o : String(o);
31
31
  a.onChange?.(j);
@@ -45,9 +45,9 @@ const h = G(
45
45
  ...m
46
46
  }
47
47
  );
48
- return r ? /* @__PURE__ */ z("label", { className: `flex items-center gap-2 cursor-pointer ${d}`, children: [
48
+ return s ? /* @__PURE__ */ z("label", { className: `flex items-center gap-2 cursor-pointer ${i}`, children: [
49
49
  /* @__PURE__ */ t("span", { className: "flex-shrink-0", children: f }),
50
- /* @__PURE__ */ t("span", { children: r })
50
+ /* @__PURE__ */ t("span", { children: s })
51
51
  ] }) : f;
52
52
  }
53
53
  );
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","sources":["../../src/components/Radio.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRadio = 'radio'\nconst dRadioXs = 'radio-xs'\nconst dRadioSm = 'radio-sm'\nconst dRadioMd = 'radio-md'\nconst dRadioLg = 'radio-lg'\nconst dRadioXl = 'radio-xl'\nconst dRadioNeutral = 'radio-neutral'\nconst dRadioPrimary = 'radio-primary'\nconst dRadioSecondary = 'radio-secondary'\nconst dRadioAccent = 'radio-accent'\nconst dRadioInfo = 'radio-info'\nconst dRadioSuccess = 'radio-success'\nconst dRadioWarning = 'radio-warning'\nconst dRadioError = 'radio-error'\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n className?: string\n children?: React.ReactNode\n}\n\nexport interface RadioGroupChangeEvent {\n target: {\n value: string | number\n name?: string\n }\n}\n\nexport interface RadioGroupProps {\n children: React.ReactNode\n value?: string | number\n defaultValue?: string | number\n onChange?: (e: RadioGroupChangeEvent) => void\n name?: string\n className?: string\n}\n\ninterface RadioGroupContextValue {\n value?: string | number\n onChange?: (value: string | number) => void\n name?: string\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction RadioGroup({ children, value, defaultValue, onChange, name, className = '' }: RadioGroupProps) {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (newValue: string | number) => {\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.({ target: { value: newValue, name } })\n }\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name }}>\n <div role=\"radiogroup\" className={className}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nconst RadioRoot = forwardRef<HTMLInputElement, RadioProps>(\n ({ size, color, className = '', value, checked, onChange, name: nameProp, children, ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const groupContext = useContext(RadioGroupContext)\n\n const sizeClasses = {\n xs: dRadioXs,\n sm: dRadioSm,\n md: dRadioMd,\n lg: dRadioLg,\n xl: dRadioXl,\n }\n\n const colorClasses = {\n neutral: dRadioNeutral,\n primary: dRadioPrimary,\n secondary: dRadioSecondary,\n accent: dRadioAccent,\n info: dRadioInfo,\n success: dRadioSuccess,\n warning: dRadioWarning,\n error: dRadioError,\n }\n\n const radioClasses = [dRadio, effectiveSize && sizeClasses[effectiveSize], color && colorClasses[color]]\n .filter(Boolean)\n .join(' ')\n\n // If in a group, use group's value and onChange\n const isChecked = groupContext ? groupContext.value === value : checked\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined) {\n const normalizedValue = typeof value === 'string' || typeof value === 'number' ? value : String(value)\n groupContext.onChange?.(normalizedValue)\n }\n onChange?.(e)\n }\n const name = groupContext?.name || nameProp\n\n const dataState = isChecked ? 'checked' : 'unchecked'\n\n const input = (\n <input\n ref={ref}\n type=\"radio\"\n className={radioClasses}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n name={name}\n data-state={dataState}\n {...props}\n />\n )\n\n // If children are provided, wrap in a label\n if (children) {\n return (\n <label className={`flex items-center gap-2 cursor-pointer ${className}`}>\n <span className=\"flex-shrink-0\">{input}</span>\n <span>{children}</span>\n </label>\n )\n }\n\n return input\n }\n)\n\nRadioRoot.displayName = 'Radio'\n\nexport const Radio = Object.assign(RadioRoot, {\n Group: RadioGroup,\n})\n"],"names":["dRadio","dRadioXs","dRadioSm","dRadioMd","dRadioLg","dRadioXl","dRadioNeutral","dRadioPrimary","dRadioSecondary","dRadioAccent","dRadioInfo","dRadioSuccess","dRadioWarning","dRadioError","RadioGroupContext","createContext","RadioGroup","children","value","defaultValue","onChange","name","className","internalValue","setInternalValue","React","currentValue","handleChange","newValue","jsx","RadioRoot","forwardRef","size","color","checked","nameProp","props","ref","componentSize","useConfig","effectiveSize","groupContext","useContext","sizeClasses","colorClasses","radioClasses","isChecked","e","normalizedValue","input","jsxs","Radio"],"mappings":"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"}
1
+ {"version":3,"file":"Radio.js","sources":["../../src/components/Radio.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRadio = 'radio'\nconst dRadioXs = 'radio-xs'\nconst dRadioSm = 'radio-sm'\nconst dRadioMd = 'radio-md'\nconst dRadioLg = 'radio-lg'\nconst dRadioXl = 'radio-xl'\nconst dRadioNeutral = 'radio-neutral'\nconst dRadioPrimary = 'radio-primary'\nconst dRadioSecondary = 'radio-secondary'\nconst dRadioAccent = 'radio-accent'\nconst dRadioInfo = 'radio-info'\nconst dRadioSuccess = 'radio-success'\nconst dRadioWarning = 'radio-warning'\nconst dRadioError = 'radio-error'\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n className?: string\n children?: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface RadioGroupChangeEvent {\n target: {\n value: string | number\n name?: string\n }\n}\n\nexport interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n children: React.ReactNode\n value?: string | number\n defaultValue?: string | number\n onChange?: (e: RadioGroupChangeEvent) => void\n name?: string\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ninterface RadioGroupContextValue {\n value?: string | number\n onChange?: (value: string | number) => void\n name?: string\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction RadioGroup({ children, value, defaultValue, onChange, name, className = '', 'data-testid': testId, ...rest }: RadioGroupProps) {\n const [internalValue, setInternalValue] = React.useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (newValue: string | number) => {\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.({ target: { value: newValue, name } })\n }\n\n return (\n <RadioGroupContext.Provider value={{ value: currentValue, onChange: handleChange, name }}>\n <div role=\"radiogroup\" className={className} data-testid={testId} {...rest}>{children}</div>\n </RadioGroupContext.Provider>\n )\n}\n\nconst RadioRoot = forwardRef<HTMLInputElement, RadioProps>(\n ({ size, color, className = '', value, checked, onChange, name: nameProp, children, ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const groupContext = useContext(RadioGroupContext)\n\n const sizeClasses = {\n xs: dRadioXs,\n sm: dRadioSm,\n md: dRadioMd,\n lg: dRadioLg,\n xl: dRadioXl,\n }\n\n const colorClasses = {\n neutral: dRadioNeutral,\n primary: dRadioPrimary,\n secondary: dRadioSecondary,\n accent: dRadioAccent,\n info: dRadioInfo,\n success: dRadioSuccess,\n warning: dRadioWarning,\n error: dRadioError,\n }\n\n const radioClasses = [dRadio, effectiveSize && sizeClasses[effectiveSize], color && colorClasses[color]]\n .filter(Boolean)\n .join(' ')\n\n // If in a group, use group's value and onChange\n const isChecked = groupContext ? groupContext.value === value : checked\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined) {\n const normalizedValue = typeof value === 'string' || typeof value === 'number' ? value : String(value)\n groupContext.onChange?.(normalizedValue)\n }\n onChange?.(e)\n }\n const name = groupContext?.name || nameProp\n\n const dataState = isChecked ? 'checked' : 'unchecked'\n\n const input = (\n <input\n ref={ref}\n type=\"radio\"\n className={radioClasses}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n name={name}\n data-state={dataState}\n {...props}\n />\n )\n\n // If children are provided, wrap in a label\n if (children) {\n return (\n <label className={`flex items-center gap-2 cursor-pointer ${className}`}>\n <span className=\"flex-shrink-0\">{input}</span>\n <span>{children}</span>\n </label>\n )\n }\n\n return input\n }\n)\n\nRadioRoot.displayName = 'Radio'\n\nexport const Radio = Object.assign(RadioRoot, {\n Group: RadioGroup,\n})\n"],"names":["dRadio","dRadioXs","dRadioSm","dRadioMd","dRadioLg","dRadioXl","dRadioNeutral","dRadioPrimary","dRadioSecondary","dRadioAccent","dRadioInfo","dRadioSuccess","dRadioWarning","dRadioError","RadioGroupContext","createContext","RadioGroup","children","value","defaultValue","onChange","name","className","testId","rest","internalValue","setInternalValue","React","currentValue","handleChange","newValue","jsx","RadioRoot","forwardRef","size","color","checked","nameProp","props","ref","componentSize","useConfig","effectiveSize","groupContext","useContext","sizeClasses","colorClasses","radioClasses","isChecked","e","normalizedValue","input","jsxs","Radio"],"mappings":"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"}
@@ -12,5 +12,6 @@ export interface RangeProps {
12
12
  showValue?: boolean;
13
13
  showSteps?: boolean;
14
14
  className?: string;
15
+ 'data-testid'?: string;
15
16
  }
16
17
  export declare const Range: React.FC<RangeProps>;
@@ -1,57 +1,59 @@
1
- import { jsxs as V, jsx as s } from "react/jsx-runtime";
2
- import { useState as b } from "react";
3
- import { useConfig as j } from "../providers/ConfigProvider.js";
4
- const $ = "range", A = "range-xs", I = "range-sm", M = "range-md", X = "range-lg", E = "range-xl", F = "range-primary", L = "range-secondary", P = "range-accent", W = "range-success", _ = "range-warning", k = "range-info", q = "range-error", H = ({
5
- value: a,
6
- defaultValue: i = 50,
7
- onChange: m,
8
- min: t = 0,
9
- max: c = 100,
10
- step: r = 1,
11
- size: f,
12
- color: o,
13
- disabled: u = !1,
14
- showValue: x = !1,
15
- showSteps: g = !1,
16
- className: R = ""
1
+ import { jsxs as b, jsx as a } from "react/jsx-runtime";
2
+ import { useState as j } from "react";
3
+ import { useConfig as A } from "../providers/ConfigProvider.js";
4
+ const M = "range", X = "range-xs", E = "range-sm", F = "range-md", I = "range-lg", L = "range-xl", P = "range-primary", T = "range-secondary", W = "range-accent", _ = "range-success", k = "range-warning", q = "range-info", B = "range-error", J = ({
5
+ value: s,
6
+ defaultValue: f = 50,
7
+ onChange: u,
8
+ min: r = 0,
9
+ max: d = 100,
10
+ step: o = 1,
11
+ size: p,
12
+ color: g,
13
+ disabled: x = !1,
14
+ showValue: R = !1,
15
+ showSteps: i = !1,
16
+ className: h = "",
17
+ "data-testid": c
17
18
  }) => {
18
- const { componentSize: p } = j(), h = f ?? p ?? "md", [y, C] = b(i), l = a !== void 0 ? a : y, v = (e) => {
19
+ const { componentSize: y } = A(), v = p ?? y ?? "md", [C, $] = j(f), l = s !== void 0 ? s : C, S = (e) => {
19
20
  const n = parseFloat(e.target.value);
20
- a === void 0 && C(n), m?.(n);
21
- }, S = {
22
- xs: A,
23
- sm: I,
24
- md: M,
25
- lg: X,
26
- xl: E
21
+ s === void 0 && $(n), u?.(n);
27
22
  }, w = {
28
- primary: F,
29
- secondary: L,
30
- accent: P,
31
- success: W,
32
- warning: _,
33
- info: k,
34
- error: q
35
- }, z = S[h], N = o ? w[o] : "", d = g ? Array.from({ length: Math.floor((c - t) / r) + 1 }, (e, n) => t + n * r) : [];
36
- return /* @__PURE__ */ V("div", { className: R, children: [
37
- /* @__PURE__ */ s(
23
+ xs: X,
24
+ sm: E,
25
+ md: F,
26
+ lg: I,
27
+ xl: L
28
+ }, z = {
29
+ primary: P,
30
+ secondary: T,
31
+ accent: W,
32
+ success: _,
33
+ warning: k,
34
+ info: q,
35
+ error: B
36
+ }, N = w[v], V = g ? z[g] : "", t = (e) => c ? `${c}-${e}` : void 0, m = i ? Array.from({ length: Math.floor((d - r) / o) + 1 }, (e, n) => r + n * o) : [];
37
+ return /* @__PURE__ */ b("div", { className: h, "data-testid": c, children: [
38
+ /* @__PURE__ */ a(
38
39
  "input",
39
40
  {
40
41
  type: "range",
41
- min: t,
42
- max: c,
43
- step: r,
42
+ min: r,
43
+ max: d,
44
+ step: o,
44
45
  value: l,
45
- onChange: v,
46
- disabled: u,
47
- className: `${$} ${z} ${N}`
46
+ onChange: S,
47
+ disabled: x,
48
+ className: `${M} ${N} ${V}`,
49
+ "data-testid": t("input")
48
50
  }
49
51
  ),
50
- g && d.length > 0 && /* @__PURE__ */ s("div", { className: "w-full flex justify-between text-xs px-2 mt-2", children: d.map((e) => /* @__PURE__ */ s("span", { className: "text-base-content/60", children: "|" }, e)) }),
51
- x && /* @__PURE__ */ s("div", { className: "text-center mt-2 text-sm font-medium text-base-content", children: l })
52
+ i && m.length > 0 && /* @__PURE__ */ a("div", { className: "w-full flex justify-between text-xs px-2 mt-2", "data-testid": t("steps"), children: m.map((e, n) => /* @__PURE__ */ a("span", { className: "text-base-content/60", "data-testid": t(`step-${n}`), children: "|" }, e)) }),
53
+ R && /* @__PURE__ */ a("div", { className: "text-center mt-2 text-sm font-medium text-base-content", "data-testid": t("value"), children: l })
52
54
  ] });
53
55
  };
54
56
  export {
55
- H as Range
57
+ J as Range
56
58
  };
57
59
  //# sourceMappingURL=Range.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Range.js","sources":["../../src/components/Range.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRange = 'range'\nconst dRangeXs = 'range-xs'\nconst dRangeSm = 'range-sm'\nconst dRangeMd = 'range-md'\nconst dRangeLg = 'range-lg'\nconst dRangeXl = 'range-xl'\nconst dRangePrimary = 'range-primary'\nconst dRangeSecondary = 'range-secondary'\nconst dRangeAccent = 'range-accent'\nconst dRangeSuccess = 'range-success'\nconst dRangeWarning = 'range-warning'\nconst dRangeInfo = 'range-info'\nconst dRangeError = 'range-error'\n\nexport interface RangeProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n disabled?: boolean\n showValue?: boolean\n showSteps?: boolean\n className?: string\n}\n\nexport const Range: React.FC<RangeProps> = ({\n value,\n defaultValue = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size,\n color,\n disabled = false,\n showValue = false,\n showSteps = false,\n className = '',\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const sizeClasses = {\n xs: dRangeXs,\n sm: dRangeSm,\n md: dRangeMd,\n lg: dRangeLg,\n xl: dRangeXl,\n } as const\n\n const colorClasses = {\n primary: dRangePrimary,\n secondary: dRangeSecondary,\n accent: dRangeAccent,\n success: dRangeSuccess,\n warning: dRangeWarning,\n info: dRangeInfo,\n error: dRangeError,\n } as const\n\n const sizeClass = sizeClasses[effectiveSize]\n const colorClass = color ? colorClasses[color] : ''\n\n // Calculate steps for visual markers\n const steps = showSteps\n ? Array.from({ length: Math.floor((max - min) / step) + 1 }, (_, i) => min + i * step)\n : []\n\n return (\n <div className={className}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n disabled={disabled}\n className={`${dRange} ${sizeClass} ${colorClass}`}\n />\n {showSteps && steps.length > 0 && (\n <div className=\"w-full flex justify-between text-xs px-2 mt-2\">\n {steps.map((stepValue) => (\n <span key={stepValue} className=\"text-base-content/60\">\n |\n </span>\n ))}\n </div>\n )}\n {showValue && (\n <div className=\"text-center mt-2 text-sm font-medium text-base-content\">\n {currentValue}\n </div>\n )}\n </div>\n )\n}\n"],"names":["dRange","dRangeXs","dRangeSm","dRangeMd","dRangeLg","dRangeXl","dRangePrimary","dRangeSecondary","dRangeAccent","dRangeSuccess","dRangeWarning","dRangeInfo","dRangeError","Range","value","defaultValue","onChange","min","max","step","size","color","disabled","showValue","showSteps","className","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","currentValue","handleChange","newValue","sizeClasses","colorClasses","sizeClass","colorClass","steps","_","i","jsxs","jsx","stepValue"],"mappings":";;;AAIA,MAAMA,IAAS,SACTC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAa,cACbC,IAAc,eAiBPC,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBR,KAAQM,KAAiB,MACzC,CAACG,GAAeC,CAAgB,IAAIC,EAAShB,CAAY,GACzDiB,IAAelB,MAAU,SAAYA,IAAQe,GAE7CI,IAAe,CAAC,MAA2C;AAC/D,UAAMC,IAAW,WAAW,EAAE,OAAO,KAAK;AAC1C,IAAIpB,MAAU,UACZgB,EAAiBI,CAAQ,GAE3BlB,IAAWkB,CAAQ;AAAA,EACrB,GAEMC,IAAc;AAAA,IAClB,IAAIlC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAGA+B,IAAe;AAAA,IACnB,SAAS9B;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,SAASC;AAAA,IACT,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGHyB,IAAYF,EAAYP,CAAa,GACrCU,IAAajB,IAAQe,EAAaf,CAAK,IAAI,IAG3CkB,IAAQf,IACV,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAON,IAAMD,KAAOE,CAAI,IAAI,EAAA,GAAK,CAACqB,GAAGC,MAAMxB,IAAMwB,IAAItB,CAAI,IACnF,CAAA;AAEJ,SACE,gBAAAuB,EAAC,SAAI,WAAAjB,GACH,UAAA;AAAA,IAAA,gBAAAkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAA1B;AAAA,QACA,KAAAC;AAAA,QACA,MAAAC;AAAA,QACA,OAAOa;AAAA,QACP,UAAUC;AAAA,QACV,UAAAX;AAAA,QACA,WAAW,GAAGtB,CAAM,IAAIqC,CAAS,IAAIC,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEhDd,KAAae,EAAM,SAAS,KAC3B,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAJ,EAAM,IAAI,CAACK,wBACT,QAAA,EAAqB,WAAU,wBAAuB,UAAA,IAAA,GAA5CA,CAEX,CACD,GACH;AAAA,IAEDrB,KACC,gBAAAoB,EAAC,OAAA,EAAI,WAAU,0DACZ,UAAAX,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"Range.js","sources":["../../src/components/Range.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRange = 'range'\nconst dRangeXs = 'range-xs'\nconst dRangeSm = 'range-sm'\nconst dRangeMd = 'range-md'\nconst dRangeLg = 'range-lg'\nconst dRangeXl = 'range-xl'\nconst dRangePrimary = 'range-primary'\nconst dRangeSecondary = 'range-secondary'\nconst dRangeAccent = 'range-accent'\nconst dRangeSuccess = 'range-success'\nconst dRangeWarning = 'range-warning'\nconst dRangeInfo = 'range-info'\nconst dRangeError = 'range-error'\n\nexport interface RangeProps {\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'info' | 'error'\n disabled?: boolean\n showValue?: boolean\n showSteps?: boolean\n className?: string\n 'data-testid'?: string\n}\n\nexport const Range: React.FC<RangeProps> = ({\n value,\n defaultValue = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size,\n color,\n disabled = false,\n showValue = false,\n showSteps = false,\n className = '',\n 'data-testid': testId,\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = parseFloat(e.target.value)\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const sizeClasses = {\n xs: dRangeXs,\n sm: dRangeSm,\n md: dRangeMd,\n lg: dRangeLg,\n xl: dRangeXl,\n } as const\n\n const colorClasses = {\n primary: dRangePrimary,\n secondary: dRangeSecondary,\n accent: dRangeAccent,\n success: dRangeSuccess,\n warning: dRangeWarning,\n info: dRangeInfo,\n error: dRangeError,\n } as const\n\n const sizeClass = sizeClasses[effectiveSize]\n const colorClass = color ? colorClasses[color] : ''\n\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n // Calculate steps for visual markers\n const steps = showSteps\n ? Array.from({ length: Math.floor((max - min) / step) + 1 }, (_, i) => min + i * step)\n : []\n\n return (\n <div className={className} data-testid={testId}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n disabled={disabled}\n className={`${dRange} ${sizeClass} ${colorClass}`}\n data-testid={getTestId('input')}\n />\n {showSteps && steps.length > 0 && (\n <div className=\"w-full flex justify-between text-xs px-2 mt-2\" data-testid={getTestId('steps')}>\n {steps.map((stepValue, index) => (\n <span key={stepValue} className=\"text-base-content/60\" data-testid={getTestId(`step-${index}`)}>\n |\n </span>\n ))}\n </div>\n )}\n {showValue && (\n <div className=\"text-center mt-2 text-sm font-medium text-base-content\" data-testid={getTestId('value')}>\n {currentValue}\n </div>\n )}\n </div>\n )\n}\n"],"names":["dRange","dRangeXs","dRangeSm","dRangeMd","dRangeLg","dRangeXl","dRangePrimary","dRangeSecondary","dRangeAccent","dRangeSuccess","dRangeWarning","dRangeInfo","dRangeError","Range","value","defaultValue","onChange","min","max","step","size","color","disabled","showValue","showSteps","className","testId","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","currentValue","handleChange","newValue","sizeClasses","colorClasses","sizeClass","colorClass","getTestId","suffix","steps","_","i","jsxs","jsx","stepValue","index"],"mappings":";;;AAIA,MAAMA,IAAS,SACTC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAW,YACXC,IAAgB,iBAChBC,IAAkB,mBAClBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAgB,iBAChBC,IAAa,cACbC,IAAc,eAkBPC,IAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,eAAeC;AACjB,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MACzC,CAACG,GAAeC,CAAgB,IAAIC,EAASjB,CAAY,GACzDkB,IAAenB,MAAU,SAAYA,IAAQgB,GAE7CI,IAAe,CAAC,MAA2C;AAC/D,UAAMC,IAAW,WAAW,EAAE,OAAO,KAAK;AAC1C,IAAIrB,MAAU,UACZiB,EAAiBI,CAAQ,GAE3BnB,IAAWmB,CAAQ;AAAA,EACrB,GAEMC,IAAc;AAAA,IAClB,IAAInC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAGAgC,IAAe;AAAA,IACnB,SAAS/B;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,SAASC;AAAA,IACT,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGH0B,IAAYF,EAAYP,CAAa,GACrCU,IAAalB,IAAQgB,EAAahB,CAAK,IAAI,IAE3CmB,IAAY,CAACC,MAAoBf,IAAS,GAAGA,CAAM,IAAIe,CAAM,KAAK,QAGlEC,IAAQlB,IACV,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAON,IAAMD,KAAOE,CAAI,IAAI,EAAA,GAAK,CAACwB,GAAGC,MAAM3B,IAAM2B,IAAIzB,CAAI,IACnF,CAAA;AAEJ,SACE,gBAAA0B,EAAC,OAAA,EAAI,WAAApB,GAAsB,eAAaC,GACtC,UAAA;AAAA,IAAA,gBAAAoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,KAAA7B;AAAA,QACA,KAAAC;AAAA,QACA,MAAAC;AAAA,QACA,OAAOc;AAAA,QACP,UAAUC;AAAA,QACV,UAAAZ;AAAA,QACA,WAAW,GAAGtB,CAAM,IAAIsC,CAAS,IAAIC,CAAU;AAAA,QAC/C,eAAaC,EAAU,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAE/BhB,KAAakB,EAAM,SAAS,KAC3B,gBAAAI,EAAC,OAAA,EAAI,WAAU,iDAAgD,eAAaN,EAAU,OAAO,GAC1F,YAAM,IAAI,CAACO,GAAWC,MACrB,gBAAAF,EAAC,QAAA,EAAqB,WAAU,wBAAuB,eAAaN,EAAU,QAAQQ,CAAK,EAAE,GAAG,UAAA,IAAA,GAArFD,CAEX,CACD,GACH;AAAA,IAEDxB,uBACE,OAAA,EAAI,WAAU,0DAAyD,eAAaiB,EAAU,OAAO,GACnG,UAAAP,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -13,6 +13,7 @@ export interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
13
13
  allowClear?: boolean;
14
14
  allowHalf?: boolean;
15
15
  disabled?: boolean;
16
+ 'data-testid'?: string;
16
17
  }
17
18
  export interface RatingItemProps {
18
19
  value: number;
@@ -21,9 +22,10 @@ export interface RatingItemProps {
21
22
  hidden?: boolean;
22
23
  half?: 'first' | 'second';
23
24
  className?: string;
25
+ 'data-testid'?: string;
24
26
  }
25
- declare function RatingRoot({ children, value, defaultValue, onChange, onHoverChange, count, size, gap, color, mask, allowClear, allowHalf, disabled, className, ...rest }: RatingProps): import("react/jsx-runtime").JSX.Element;
26
- declare function RatingItem({ value, mask, color, hidden, half, className }: RatingItemProps): import("react/jsx-runtime").JSX.Element;
27
+ declare function RatingRoot({ children, value, defaultValue, onChange, onHoverChange, count, size, gap, color, mask, allowClear, allowHalf, disabled, className, 'data-testid': testId, ...rest }: RatingProps): import("react/jsx-runtime").JSX.Element;
28
+ declare function RatingItem({ value, mask, color, hidden, half, className, 'data-testid': testId }: RatingItemProps): import("react/jsx-runtime").JSX.Element;
27
29
  export declare const Rating: typeof RatingRoot & {
28
30
  Item: typeof RatingItem;
29
31
  };