asterui 0.12.62 → 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.
- package/dist/components/Anchor.d.ts +2 -0
- package/dist/components/Anchor.js +79 -75
- package/dist/components/Anchor.js.map +1 -1
- package/dist/components/Autocomplete.d.ts +1 -0
- package/dist/components/Autocomplete.js +115 -110
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Breadcrumb.d.ts +4 -2
- package/dist/components/Breadcrumb.js +54 -29
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Button.d.ts +5 -1
- package/dist/components/Button.js +117 -107
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Chart.d.ts +1 -0
- package/dist/components/Chart.js +31 -30
- package/dist/components/Chart.js.map +1 -1
- package/dist/components/Chat.d.ts +1 -0
- package/dist/components/Chat.js +32 -30
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Command.d.ts +5 -2
- package/dist/components/Command.js +262 -233
- package/dist/components/Command.js.map +1 -1
- package/dist/components/ContextMenu.d.ts +4 -0
- package/dist/components/ContextMenu.js +149 -130
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/Dock.d.ts +2 -0
- package/dist/components/Dock.js +70 -46
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/FileInput.d.ts +1 -0
- package/dist/components/FileInput.js +26 -26
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -0
- package/dist/components/Filter.js +43 -40
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/Flex.d.ts +1 -0
- package/dist/components/Flex.js +43 -42
- package/dist/components/Flex.js.map +1 -1
- package/dist/components/FloatButton.d.ts +3 -0
- package/dist/components/FloatButton.js +178 -127
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Input.d.ts +1 -0
- package/dist/components/Input.js +201 -184
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -0
- package/dist/components/Loading.js +40 -37
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Masonry.d.ts +1 -0
- package/dist/components/Masonry.js +45 -42
- package/dist/components/Masonry.js.map +1 -1
- package/dist/components/Mention.d.ts +1 -0
- package/dist/components/Mention.js +95 -91
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +1 -0
- package/dist/components/MonthCalendar.js +104 -97
- package/dist/components/MonthCalendar.js.map +1 -1
- package/dist/components/QRCode.d.ts +1 -0
- package/dist/components/QRCode.js +84 -55
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.d.ts +1 -0
- package/dist/components/RadialProgress.js +19 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Range.d.ts +1 -0
- package/dist/components/Range.js +45 -43
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.d.ts +4 -2
- package/dist/components/Rating.js +83 -79
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/Responsive.d.ts +4 -2
- package/dist/components/Responsive.js +10 -9
- package/dist/components/Responsive.js.map +1 -1
- package/dist/components/Result.d.ts +1 -0
- package/dist/components/Result.js +24 -22
- package/dist/components/Result.js.map +1 -1
- package/dist/components/Select.d.ts +1 -0
- package/dist/components/Select.js +72 -62
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Splitter.d.ts +2 -0
- package/dist/components/Splitter.js +137 -131
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.d.ts +4 -2
- package/dist/components/Stat.js +19 -18
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Steps.d.ts +4 -2
- package/dist/components/Steps.js +56 -52
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/TextRotate.d.ts +1 -0
- package/dist/components/TextRotate.js +14 -12
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.d.ts +1 -0
- package/dist/components/Textarea.js +31 -30
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +6 -3
- package/dist/components/ThemeController.js +101 -92
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/Typography.d.ts +10 -5
- package/dist/components/Typography.js +84 -81
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/VirtualList.d.ts +2 -1
- package/dist/components/VirtualList.js +40 -36
- package/dist/components/VirtualList.js.map +1 -1
- package/dist/components/Watermark.d.ts +1 -0
- package/dist/components/Watermark.js +74 -71
- package/dist/components/Watermark.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +1 -0
- package/dist/components/WeekCalendar.js +91 -76
- package/dist/components/WeekCalendar.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
2
|
-
const
|
|
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
|
-
},
|
|
12
|
-
value:
|
|
11
|
+
}, b = ({
|
|
12
|
+
value: r,
|
|
13
13
|
size: e,
|
|
14
14
|
thickness: s,
|
|
15
|
-
color:
|
|
15
|
+
color: a,
|
|
16
16
|
showValue: i = !0,
|
|
17
|
-
children:
|
|
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
|
|
24
|
-
return
|
|
25
|
-
},
|
|
26
|
-
const
|
|
27
|
-
[
|
|
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 && (
|
|
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__ */
|
|
32
|
+
return /* @__PURE__ */ p(
|
|
32
33
|
"div",
|
|
33
34
|
{
|
|
34
35
|
className: u(),
|
|
35
|
-
style: { ...
|
|
36
|
+
style: { ...x(), ...c },
|
|
36
37
|
role: "progressbar",
|
|
37
|
-
"aria-valuenow":
|
|
38
|
+
"aria-valuenow": r,
|
|
38
39
|
"aria-valuemin": 0,
|
|
39
40
|
"aria-valuemax": 100,
|
|
41
|
+
"data-testid": d,
|
|
40
42
|
...l,
|
|
41
|
-
children:
|
|
43
|
+
children: o !== void 0 ? o : i ? `${r}%` : null
|
|
42
44
|
}
|
|
43
45
|
);
|
|
44
46
|
};
|
|
45
47
|
export {
|
|
46
|
-
|
|
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,
|
|
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;"}
|
package/dist/components/Range.js
CHANGED
|
@@ -1,57 +1,59 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { useConfig as
|
|
4
|
-
const
|
|
5
|
-
value:
|
|
6
|
-
defaultValue:
|
|
7
|
-
onChange:
|
|
8
|
-
min:
|
|
9
|
-
max:
|
|
10
|
-
step:
|
|
11
|
-
size:
|
|
12
|
-
color:
|
|
13
|
-
disabled:
|
|
14
|
-
showValue:
|
|
15
|
-
showSteps:
|
|
16
|
-
className:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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:
|
|
42
|
-
max:
|
|
43
|
-
step:
|
|
42
|
+
min: r,
|
|
43
|
+
max: d,
|
|
44
|
+
step: o,
|
|
44
45
|
value: l,
|
|
45
|
-
onChange:
|
|
46
|
-
disabled:
|
|
47
|
-
className: `${
|
|
46
|
+
onChange: S,
|
|
47
|
+
disabled: x,
|
|
48
|
+
className: `${M} ${N} ${V}`,
|
|
49
|
+
"data-testid": t("input")
|
|
48
50
|
}
|
|
49
51
|
),
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
};
|
|
@@ -1,127 +1,131 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import { useConfig as
|
|
4
|
-
const
|
|
5
|
-
function
|
|
1
|
+
import { jsxs as y, Fragment as L, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import X, { useState as z, useId as _, createContext as O, useContext as P } from "react";
|
|
3
|
+
import { useConfig as q } from "../providers/ConfigProvider.js";
|
|
4
|
+
const D = "rating", J = "rating-xs", K = "rating-sm", Q = "rating-md", U = "rating-lg", W = "rating-xl", Y = "rating-half", Z = "rating-hidden", w = "mask", tt = "mask-star", at = "mask-star-2", nt = "mask-heart", st = "mask-half-1", et = "mask-half-2", G = O(null);
|
|
5
|
+
function rt({
|
|
6
6
|
children: t,
|
|
7
|
-
value:
|
|
8
|
-
defaultValue:
|
|
9
|
-
onChange:
|
|
10
|
-
onHoverChange:
|
|
11
|
-
count:
|
|
12
|
-
size:
|
|
13
|
-
gap:
|
|
14
|
-
color:
|
|
7
|
+
value: c,
|
|
8
|
+
defaultValue: v = 0,
|
|
9
|
+
onChange: C,
|
|
10
|
+
onHoverChange: f,
|
|
11
|
+
count: h = 5,
|
|
12
|
+
size: x,
|
|
13
|
+
gap: r = "md",
|
|
14
|
+
color: d = "bg-warning",
|
|
15
15
|
mask: u = "star-2",
|
|
16
|
-
allowClear:
|
|
17
|
-
allowHalf:
|
|
18
|
-
disabled:
|
|
19
|
-
className:
|
|
20
|
-
|
|
16
|
+
allowClear: g = !0,
|
|
17
|
+
allowHalf: e = !1,
|
|
18
|
+
disabled: m = !1,
|
|
19
|
+
className: M = "",
|
|
20
|
+
"data-testid": o,
|
|
21
|
+
...V
|
|
21
22
|
}) {
|
|
22
|
-
const { componentSize:
|
|
23
|
-
if (
|
|
24
|
-
const n =
|
|
25
|
-
|
|
26
|
-
}, j = (
|
|
27
|
-
|
|
28
|
-
}, H = {
|
|
29
|
-
xs:
|
|
30
|
-
sm:
|
|
31
|
-
md:
|
|
32
|
-
lg:
|
|
33
|
-
xl:
|
|
34
|
-
},
|
|
23
|
+
const { componentSize: k } = q(), i = x ?? k ?? "md", [S, $] = z(v), [R, p] = z(0), b = c !== void 0 ? c : S, N = _(), T = (a) => {
|
|
24
|
+
if (m) return;
|
|
25
|
+
const n = g && a === b ? 0 : a;
|
|
26
|
+
c === void 0 && $(n), p(0), C?.(n);
|
|
27
|
+
}, j = (a) => {
|
|
28
|
+
m || (p(a), f?.(a));
|
|
29
|
+
}, A = (a) => o ? `${o}-${a}` : void 0, H = {
|
|
30
|
+
xs: J,
|
|
31
|
+
sm: K,
|
|
32
|
+
md: Q,
|
|
33
|
+
lg: U,
|
|
34
|
+
xl: W
|
|
35
|
+
}, B = {
|
|
35
36
|
none: "gap-0",
|
|
36
37
|
xs: "gap-0.5",
|
|
37
38
|
sm: "gap-1",
|
|
38
39
|
md: "gap-2",
|
|
39
40
|
lg: "gap-3"
|
|
40
|
-
},
|
|
41
|
-
|
|
41
|
+
}, E = [
|
|
42
|
+
D,
|
|
42
43
|
// Half-star mode requires a size class to render correctly, default to md
|
|
43
|
-
(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
].filter(Boolean).join(" "),
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
(e || i) && H[i],
|
|
45
|
+
e ? Y : r && B[r],
|
|
46
|
+
M
|
|
47
|
+
].filter(Boolean).join(" "), I = e ? "star-2" : u, F = t || /* @__PURE__ */ y(L, { children: [
|
|
48
|
+
g && /* @__PURE__ */ s(l, { value: 0, hidden: !0 }),
|
|
49
|
+
e ? (
|
|
49
50
|
// Half-star mode: each star is two inputs
|
|
50
|
-
Array.from({ length:
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
-
/* @__PURE__ */
|
|
51
|
+
Array.from({ length: h }, (a, n) => /* @__PURE__ */ y(X.Fragment, { children: [
|
|
52
|
+
/* @__PURE__ */ s(l, { value: n + 0.5, mask: I, color: d, half: "first" }),
|
|
53
|
+
/* @__PURE__ */ s(l, { value: n + 1, mask: I, color: d, half: "second" })
|
|
53
54
|
] }, n + 1))
|
|
54
55
|
) : (
|
|
55
56
|
// Standard mode: one input per star
|
|
56
|
-
Array.from({ length:
|
|
57
|
+
Array.from({ length: h }, (a, n) => /* @__PURE__ */ s(l, { value: n + 1, mask: I, color: d }, n + 1))
|
|
57
58
|
)
|
|
58
59
|
] });
|
|
59
|
-
return /* @__PURE__ */
|
|
60
|
+
return /* @__PURE__ */ s(G.Provider, { value: { name: N, currentValue: b, hoverValue: R, onChange: T, onHover: j, size: i, disabled: m, halfGap: e ? r : void 0, getTestId: A }, children: /* @__PURE__ */ s(
|
|
60
61
|
"div",
|
|
61
62
|
{
|
|
62
63
|
role: "radiogroup",
|
|
63
64
|
"aria-label": "Rating",
|
|
64
|
-
className:
|
|
65
|
-
"data-value":
|
|
65
|
+
className: E,
|
|
66
|
+
"data-value": b,
|
|
67
|
+
"data-testid": o,
|
|
66
68
|
onMouseLeave: () => j(0),
|
|
67
|
-
...
|
|
68
|
-
children:
|
|
69
|
+
...V,
|
|
70
|
+
children: F
|
|
69
71
|
}
|
|
70
72
|
) });
|
|
71
73
|
}
|
|
72
|
-
function
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
74
|
+
function l({ value: t, mask: c = "star-2", color: v = "bg-warning", hidden: C = !1, half: f, className: h = "", "data-testid": x }) {
|
|
75
|
+
const r = P(G);
|
|
76
|
+
if (!r)
|
|
75
77
|
throw new Error("Rating.Item must be used within Rating");
|
|
76
|
-
const { name:
|
|
77
|
-
star:
|
|
78
|
-
"star-2":
|
|
79
|
-
heart:
|
|
80
|
-
},
|
|
81
|
-
first:
|
|
82
|
-
second: `${
|
|
78
|
+
const { name: d, currentValue: u, hoverValue: g, onChange: e, onHover: m, disabled: M, halfGap: o, getTestId: V } = r, k = x ?? V?.(`item-${t}`), i = {
|
|
79
|
+
star: tt,
|
|
80
|
+
"star-2": at,
|
|
81
|
+
heart: nt
|
|
82
|
+
}, $ = {
|
|
83
|
+
first: st,
|
|
84
|
+
second: `${et} ${o ? {
|
|
83
85
|
none: "",
|
|
84
86
|
xs: "mr-0.5",
|
|
85
87
|
sm: "mr-1",
|
|
86
88
|
md: "mr-2",
|
|
87
89
|
lg: "mr-3"
|
|
88
|
-
}[
|
|
89
|
-
}, R =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
}[o] : ""}`.trim()
|
|
91
|
+
}, R = C ? Z : [
|
|
92
|
+
w,
|
|
93
|
+
i[c],
|
|
94
|
+
f && $[f],
|
|
95
|
+
v,
|
|
96
|
+
h
|
|
95
97
|
].filter(Boolean).join(" ");
|
|
96
|
-
if (
|
|
97
|
-
return /* @__PURE__ */
|
|
98
|
+
if (M)
|
|
99
|
+
return /* @__PURE__ */ s(
|
|
98
100
|
"div",
|
|
99
101
|
{
|
|
100
102
|
className: R,
|
|
101
|
-
"aria-current":
|
|
102
|
-
"aria-label": `Rating ${t}
|
|
103
|
+
"aria-current": u === t ? "true" : void 0,
|
|
104
|
+
"aria-label": `Rating ${t}`,
|
|
105
|
+
"data-testid": k
|
|
103
106
|
}
|
|
104
107
|
);
|
|
105
|
-
const
|
|
106
|
-
return /* @__PURE__ */
|
|
108
|
+
const p = g > 0 ? g : u;
|
|
109
|
+
return /* @__PURE__ */ s(
|
|
107
110
|
"input",
|
|
108
111
|
{
|
|
109
112
|
type: "radio",
|
|
110
|
-
name:
|
|
113
|
+
name: d,
|
|
111
114
|
className: R,
|
|
112
|
-
checked:
|
|
115
|
+
checked: p === t,
|
|
113
116
|
onChange: () => {
|
|
114
117
|
},
|
|
115
|
-
onClick: () =>
|
|
116
|
-
onMouseEnter: () =>
|
|
117
|
-
"aria-label": `Rating ${t}
|
|
118
|
+
onClick: () => e(t),
|
|
119
|
+
onMouseEnter: () => m(t),
|
|
120
|
+
"aria-label": `Rating ${t}`,
|
|
121
|
+
"data-testid": k
|
|
118
122
|
}
|
|
119
123
|
);
|
|
120
124
|
}
|
|
121
|
-
const
|
|
122
|
-
Item:
|
|
125
|
+
const dt = Object.assign(rt, {
|
|
126
|
+
Item: l
|
|
123
127
|
});
|
|
124
128
|
export {
|
|
125
|
-
|
|
129
|
+
dt as Rating
|
|
126
130
|
};
|
|
127
131
|
//# sourceMappingURL=Rating.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rating.js","sources":["../../src/components/Rating.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRating = 'rating'\nconst dRatingXs = 'rating-xs'\nconst dRatingSm = 'rating-sm'\nconst dRatingMd = 'rating-md'\nconst dRatingLg = 'rating-lg'\nconst dRatingXl = 'rating-xl'\nconst dRatingHalf = 'rating-half'\nconst dRatingHidden = 'rating-hidden'\nconst dMask = 'mask'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n children?: React.ReactNode\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n onHoverChange?: (value: number) => void\n count?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n color?: string\n mask?: 'star' | 'star-2' | 'heart'\n allowClear?: boolean\n allowHalf?: boolean\n disabled?: boolean\n}\n\nexport interface RatingItemProps {\n value: number\n mask?: 'star' | 'star-2' | 'heart'\n color?: string\n hidden?: boolean\n half?: 'first' | 'second'\n className?: string\n}\n\ninterface RatingContextValue {\n name: string\n currentValue: number\n hoverValue: number\n onChange: (value: number) => void\n onHover: (value: number) => void\n size?: string\n disabled?: boolean\n halfGap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n}\n\nconst RatingContext = createContext<RatingContextValue | null>(null)\n\nfunction RatingRoot({\n children,\n value,\n defaultValue = 0,\n onChange,\n onHoverChange,\n count = 5,\n size,\n gap = 'md',\n color = 'bg-warning',\n mask = 'star-2',\n allowClear = true,\n allowHalf = false,\n disabled = false,\n className = '',\n ...rest\n}: RatingProps) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hoverValue, setHoverValue] = useState(0)\n const currentValue = value !== undefined ? value : internalValue\n const name = useId()\n\n const handleChange = (newValue: number) => {\n if (disabled) return\n // Allow clearing if clicking the same value and allowClear is true\n const finalValue = allowClear && newValue === currentValue ? 0 : newValue\n if (value === undefined) {\n setInternalValue(finalValue)\n }\n // Clear hover state so the clicked value shows immediately\n setHoverValue(0)\n onChange?.(finalValue)\n }\n\n const handleHover = (hoverVal: number) => {\n if (disabled) return\n setHoverValue(hoverVal)\n onHoverChange?.(hoverVal)\n }\n\n const sizeClasses = {\n xs: dRatingXs,\n sm: dRatingSm,\n md: dRatingMd,\n lg: dRatingLg,\n xl: dRatingXl,\n }\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n }\n\n const classes = [\n dRating,\n // Half-star mode requires a size class to render correctly, default to md\n allowHalf ? sizeClasses[effectiveSize] : (effectiveSize && sizeClasses[effectiveSize]),\n allowHalf ? dRatingHalf : (gap && gapClasses[gap]),\n className,\n ].filter(Boolean).join(' ')\n\n // Auto-generate items if no children provided\n // Note: half-star mode requires mask-star-2 per DaisyUI\n const effectiveMask = allowHalf ? 'star-2' : mask\n const items = children || (\n <>\n {allowClear && <RatingItem value={0} hidden />}\n {allowHalf ? (\n // Half-star mode: each star is two inputs\n Array.from({ length: count }, (_, i) => (\n <React.Fragment key={i + 1}>\n <RatingItem value={i + 0.5} mask={effectiveMask} color={color} half=\"first\" />\n <RatingItem value={i + 1} mask={effectiveMask} color={color} half=\"second\" />\n </React.Fragment>\n ))\n ) : (\n // Standard mode: one input per star\n Array.from({ length: count }, (_, i) => (\n <RatingItem key={i + 1} value={i + 1} mask={effectiveMask} color={color} />\n ))\n )}\n </>\n )\n\n return (\n <RatingContext.Provider value={{ name, currentValue, hoverValue, onChange: handleChange, onHover: handleHover, size: effectiveSize, disabled, halfGap: allowHalf ? gap : undefined }}>\n <div\n role=\"radiogroup\"\n aria-label=\"Rating\"\n className={classes}\n data-value={currentValue}\n onMouseLeave={() => handleHover(0)}\n {...rest}\n >\n {items}\n </div>\n </RatingContext.Provider>\n )\n}\n\nfunction RatingItem({ value, mask = 'star-2', color = 'bg-warning', hidden = false, half, className = '' }: RatingItemProps) {\n const context = useContext(RatingContext)\n if (!context) {\n throw new Error('Rating.Item must be used within Rating')\n }\n\n const { name, currentValue, hoverValue, onChange, onHover, disabled, halfGap } = context\n\n const maskClasses = {\n star: dMaskStar,\n 'star-2': dMaskStar2,\n heart: dMaskHeart,\n }\n\n const halfGapClasses = {\n none: '',\n xs: 'mr-0.5',\n sm: 'mr-1',\n md: 'mr-2',\n lg: 'mr-3',\n }\n\n const halfClasses = {\n first: dMaskHalf1,\n second: `${dMaskHalf2} ${halfGap ? halfGapClasses[halfGap] : ''}`.trim(),\n }\n\n // Hidden items only get rating-hidden class (no mask)\n // Visible items get mask classes - DaisyUI CSS handles filled/unfilled state\n const classes = hidden\n ? dRatingHidden\n : [\n dMask,\n maskClasses[mask],\n half && halfClasses[half],\n color,\n className,\n ].filter(Boolean).join(' ')\n\n if (disabled) {\n return (\n <div\n className={classes}\n aria-current={currentValue === value ? 'true' : undefined}\n aria-label={`Rating ${value}`}\n />\n )\n }\n\n // Use hoverValue for checked state when hovering (for visual preview)\n // DaisyUI CSS fills all stars up to the checked one\n const displayValue = hoverValue > 0 ? hoverValue : currentValue\n\n return (\n <input\n type=\"radio\"\n name={name}\n className={classes}\n checked={displayValue === value}\n onChange={() => {}} // Controlled by onClick\n onClick={() => onChange(value)}\n onMouseEnter={() => onHover(value)}\n aria-label={`Rating ${value}`}\n />\n )\n}\n\nexport const Rating = Object.assign(RatingRoot, {\n Item: RatingItem,\n})\n"],"names":["dRating","dRatingXs","dRatingSm","dRatingMd","dRatingLg","dRatingXl","dRatingHalf","dRatingHidden","dMask","dMaskStar","dMaskStar2","dMaskHeart","dMaskHalf1","dMaskHalf2","RatingContext","createContext","RatingRoot","children","value","defaultValue","onChange","onHoverChange","count","size","gap","color","mask","allowClear","allowHalf","disabled","className","rest","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","hoverValue","setHoverValue","currentValue","name","useId","handleChange","newValue","finalValue","handleHover","hoverVal","sizeClasses","gapClasses","classes","effectiveMask","items","jsxs","Fragment","jsx","RatingItem","_","i","React","hidden","half","context","useContext","onHover","halfGap","maskClasses","halfClasses","displayValue","Rating"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Rating.js","sources":["../../src/components/Rating.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dRating = 'rating'\nconst dRatingXs = 'rating-xs'\nconst dRatingSm = 'rating-sm'\nconst dRatingMd = 'rating-md'\nconst dRatingLg = 'rating-lg'\nconst dRatingXl = 'rating-xl'\nconst dRatingHalf = 'rating-half'\nconst dRatingHidden = 'rating-hidden'\nconst dMask = 'mask'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n children?: React.ReactNode\n value?: number\n defaultValue?: number\n onChange?: (value: number) => void\n onHoverChange?: (value: number) => void\n count?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n gap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n color?: string\n mask?: 'star' | 'star-2' | 'heart'\n allowClear?: boolean\n allowHalf?: boolean\n disabled?: boolean\n 'data-testid'?: string\n}\n\nexport interface RatingItemProps {\n value: number\n mask?: 'star' | 'star-2' | 'heart'\n color?: string\n hidden?: boolean\n half?: 'first' | 'second'\n className?: string\n 'data-testid'?: string\n}\n\ninterface RatingContextValue {\n name: string\n currentValue: number\n hoverValue: number\n onChange: (value: number) => void\n onHover: (value: number) => void\n size?: string\n disabled?: boolean\n halfGap?: 'none' | 'xs' | 'sm' | 'md' | 'lg'\n getTestId?: (suffix: string) => string | undefined\n}\n\nconst RatingContext = createContext<RatingContextValue | null>(null)\n\nfunction RatingRoot({\n children,\n value,\n defaultValue = 0,\n onChange,\n onHoverChange,\n count = 5,\n size,\n gap = 'md',\n color = 'bg-warning',\n mask = 'star-2',\n allowClear = true,\n allowHalf = false,\n disabled = false,\n className = '',\n 'data-testid': testId,\n ...rest\n}: RatingProps) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [hoverValue, setHoverValue] = useState(0)\n const currentValue = value !== undefined ? value : internalValue\n const name = useId()\n\n const handleChange = (newValue: number) => {\n if (disabled) return\n // Allow clearing if clicking the same value and allowClear is true\n const finalValue = allowClear && newValue === currentValue ? 0 : newValue\n if (value === undefined) {\n setInternalValue(finalValue)\n }\n // Clear hover state so the clicked value shows immediately\n setHoverValue(0)\n onChange?.(finalValue)\n }\n\n const handleHover = (hoverVal: number) => {\n if (disabled) return\n setHoverValue(hoverVal)\n onHoverChange?.(hoverVal)\n }\n\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n const sizeClasses = {\n xs: dRatingXs,\n sm: dRatingSm,\n md: dRatingMd,\n lg: dRatingLg,\n xl: dRatingXl,\n }\n\n const gapClasses = {\n none: 'gap-0',\n xs: 'gap-0.5',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n }\n\n const classes = [\n dRating,\n // Half-star mode requires a size class to render correctly, default to md\n allowHalf ? sizeClasses[effectiveSize] : (effectiveSize && sizeClasses[effectiveSize]),\n allowHalf ? dRatingHalf : (gap && gapClasses[gap]),\n className,\n ].filter(Boolean).join(' ')\n\n // Auto-generate items if no children provided\n // Note: half-star mode requires mask-star-2 per DaisyUI\n const effectiveMask = allowHalf ? 'star-2' : mask\n const items = children || (\n <>\n {allowClear && <RatingItem value={0} hidden />}\n {allowHalf ? (\n // Half-star mode: each star is two inputs\n Array.from({ length: count }, (_, i) => (\n <React.Fragment key={i + 1}>\n <RatingItem value={i + 0.5} mask={effectiveMask} color={color} half=\"first\" />\n <RatingItem value={i + 1} mask={effectiveMask} color={color} half=\"second\" />\n </React.Fragment>\n ))\n ) : (\n // Standard mode: one input per star\n Array.from({ length: count }, (_, i) => (\n <RatingItem key={i + 1} value={i + 1} mask={effectiveMask} color={color} />\n ))\n )}\n </>\n )\n\n return (\n <RatingContext.Provider value={{ name, currentValue, hoverValue, onChange: handleChange, onHover: handleHover, size: effectiveSize, disabled, halfGap: allowHalf ? gap : undefined, getTestId }}>\n <div\n role=\"radiogroup\"\n aria-label=\"Rating\"\n className={classes}\n data-value={currentValue}\n data-testid={testId}\n onMouseLeave={() => handleHover(0)}\n {...rest}\n >\n {items}\n </div>\n </RatingContext.Provider>\n )\n}\n\nfunction RatingItem({ value, mask = 'star-2', color = 'bg-warning', hidden = false, half, className = '', 'data-testid': testId }: RatingItemProps) {\n const context = useContext(RatingContext)\n if (!context) {\n throw new Error('Rating.Item must be used within Rating')\n }\n\n const { name, currentValue, hoverValue, onChange, onHover, disabled, halfGap, getTestId } = context\n const itemTestId = testId ?? getTestId?.(`item-${value}`)\n\n const maskClasses = {\n star: dMaskStar,\n 'star-2': dMaskStar2,\n heart: dMaskHeart,\n }\n\n const halfGapClasses = {\n none: '',\n xs: 'mr-0.5',\n sm: 'mr-1',\n md: 'mr-2',\n lg: 'mr-3',\n }\n\n const halfClasses = {\n first: dMaskHalf1,\n second: `${dMaskHalf2} ${halfGap ? halfGapClasses[halfGap] : ''}`.trim(),\n }\n\n // Hidden items only get rating-hidden class (no mask)\n // Visible items get mask classes - DaisyUI CSS handles filled/unfilled state\n const classes = hidden\n ? dRatingHidden\n : [\n dMask,\n maskClasses[mask],\n half && halfClasses[half],\n color,\n className,\n ].filter(Boolean).join(' ')\n\n if (disabled) {\n return (\n <div\n className={classes}\n aria-current={currentValue === value ? 'true' : undefined}\n aria-label={`Rating ${value}`}\n data-testid={itemTestId}\n />\n )\n }\n\n // Use hoverValue for checked state when hovering (for visual preview)\n // DaisyUI CSS fills all stars up to the checked one\n const displayValue = hoverValue > 0 ? hoverValue : currentValue\n\n return (\n <input\n type=\"radio\"\n name={name}\n className={classes}\n checked={displayValue === value}\n onChange={() => {}} // Controlled by onClick\n onClick={() => onChange(value)}\n onMouseEnter={() => onHover(value)}\n aria-label={`Rating ${value}`}\n data-testid={itemTestId}\n />\n )\n}\n\nexport const Rating = Object.assign(RatingRoot, {\n Item: RatingItem,\n})\n"],"names":["dRating","dRatingXs","dRatingSm","dRatingMd","dRatingLg","dRatingXl","dRatingHalf","dRatingHidden","dMask","dMaskStar","dMaskStar2","dMaskHeart","dMaskHalf1","dMaskHalf2","RatingContext","createContext","RatingRoot","children","value","defaultValue","onChange","onHoverChange","count","size","gap","color","mask","allowClear","allowHalf","disabled","className","testId","rest","componentSize","useConfig","effectiveSize","internalValue","setInternalValue","useState","hoverValue","setHoverValue","currentValue","name","useId","handleChange","newValue","finalValue","handleHover","hoverVal","getTestId","suffix","sizeClasses","gapClasses","classes","effectiveMask","items","jsxs","Fragment","jsx","RatingItem","_","i","React","hidden","half","context","useContext","onHover","halfGap","itemTestId","maskClasses","halfClasses","displayValue","Rating"],"mappings":"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"}
|
|
@@ -6,13 +6,15 @@ export interface ShowProps {
|
|
|
6
6
|
below?: Breakpoint;
|
|
7
7
|
at?: Breakpoint | Breakpoint[];
|
|
8
8
|
between?: [Breakpoint, Breakpoint];
|
|
9
|
+
'data-testid'?: string;
|
|
9
10
|
}
|
|
10
|
-
export declare function Show({ children, above, below, at, between }: ShowProps): React.ReactElement | null;
|
|
11
|
+
export declare function Show({ children, above, below, at, between, 'data-testid': testId }: ShowProps): React.ReactElement | null;
|
|
11
12
|
export interface HideProps {
|
|
12
13
|
children: ReactNode;
|
|
13
14
|
above?: Breakpoint;
|
|
14
15
|
below?: Breakpoint;
|
|
15
16
|
at?: Breakpoint | Breakpoint[];
|
|
16
17
|
between?: [Breakpoint, Breakpoint];
|
|
18
|
+
'data-testid'?: string;
|
|
17
19
|
}
|
|
18
|
-
export declare function Hide({ children, above, below, at, between }: HideProps): React.ReactElement | null;
|
|
20
|
+
export declare function Hide({ children, above, below, at, between, 'data-testid': testId }: HideProps): React.ReactElement | null;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { jsx as v, Fragment as A } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import d from "react";
|
|
3
|
+
import { useBreakpoint as p } from "../hooks/useBreakpoint.js";
|
|
4
|
+
function c({ children: s, above: r, below: t, at: e, between: o, "data-testid": l }) {
|
|
5
|
+
const { isAbove: n, isBelow: u, isAt: f, isBetween: m } = p();
|
|
5
6
|
let i = !1;
|
|
6
|
-
return
|
|
7
|
+
return r !== void 0 ? i = n(r) : t !== void 0 ? i = u(t) : e !== void 0 ? Array.isArray(e) ? i = e.some((a) => f(a)) : i = f(e) : o !== void 0 ? i = m(o[0], o[1]) : i = !0, i ? l && d.isValidElement(s) ? d.cloneElement(s, { "data-testid": l }) : /* @__PURE__ */ v(A, { children: s }) : null;
|
|
7
8
|
}
|
|
8
|
-
function
|
|
9
|
-
const { isAbove:
|
|
9
|
+
function x({ children: s, above: r, below: t, at: e, between: o, "data-testid": l }) {
|
|
10
|
+
const { isAbove: n, isBelow: u, isAt: f, isBetween: m } = p();
|
|
10
11
|
let i = !1;
|
|
11
|
-
return
|
|
12
|
+
return r !== void 0 ? i = n(r) : t !== void 0 ? i = u(t) : e !== void 0 ? Array.isArray(e) ? i = e.some((a) => f(a)) : i = f(e) : o !== void 0 && (i = m(o[0], o[1])), i ? null : l && d.isValidElement(s) ? d.cloneElement(s, { "data-testid": l }) : /* @__PURE__ */ v(A, { children: s });
|
|
12
13
|
}
|
|
13
14
|
export {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
x as Hide,
|
|
16
|
+
c as Show
|
|
16
17
|
};
|
|
17
18
|
//# sourceMappingURL=Responsive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Responsive.js","sources":["../../src/components/Responsive.tsx"],"sourcesContent":["import React, { ReactNode } from 'react'\nimport { useBreakpoint, Breakpoint } from '../hooks/useBreakpoint'\n\nexport interface ShowProps {\n children: ReactNode\n above?: Breakpoint\n below?: Breakpoint\n at?: Breakpoint | Breakpoint[]\n between?: [Breakpoint, Breakpoint]\n}\n\nexport function Show({ children, above, below, at, between }: ShowProps): React.ReactElement | null {\n const { isAbove, isBelow, isAt, isBetween } = useBreakpoint()\n\n let shouldShow = false\n\n if (above !== undefined) {\n shouldShow = isAbove(above)\n } else if (below !== undefined) {\n shouldShow = isBelow(below)\n } else if (at !== undefined) {\n if (Array.isArray(at)) {\n shouldShow = at.some((bp) => isAt(bp))\n } else {\n shouldShow = isAt(at)\n }\n } else if (between !== undefined) {\n shouldShow = isBetween(between[0], between[1])\n } else {\n shouldShow = true\n }\n\n
|
|
1
|
+
{"version":3,"file":"Responsive.js","sources":["../../src/components/Responsive.tsx"],"sourcesContent":["import React, { ReactNode } from 'react'\nimport { useBreakpoint, Breakpoint } from '../hooks/useBreakpoint'\n\nexport interface ShowProps {\n children: ReactNode\n above?: Breakpoint\n below?: Breakpoint\n at?: Breakpoint | Breakpoint[]\n between?: [Breakpoint, Breakpoint]\n 'data-testid'?: string\n}\n\nexport function Show({ children, above, below, at, between, 'data-testid': testId }: ShowProps): React.ReactElement | null {\n const { isAbove, isBelow, isAt, isBetween } = useBreakpoint()\n\n let shouldShow = false\n\n if (above !== undefined) {\n shouldShow = isAbove(above)\n } else if (below !== undefined) {\n shouldShow = isBelow(below)\n } else if (at !== undefined) {\n if (Array.isArray(at)) {\n shouldShow = at.some((bp) => isAt(bp))\n } else {\n shouldShow = isAt(at)\n }\n } else if (between !== undefined) {\n shouldShow = isBetween(between[0], between[1])\n } else {\n shouldShow = true\n }\n\n if (!shouldShow) return null\n if (testId && React.isValidElement(children)) {\n return React.cloneElement(children, { 'data-testid': testId } as Record<string, unknown>)\n }\n return <>{children}</>\n}\n\nexport interface HideProps {\n children: ReactNode\n above?: Breakpoint\n below?: Breakpoint\n at?: Breakpoint | Breakpoint[]\n between?: [Breakpoint, Breakpoint]\n 'data-testid'?: string\n}\n\nexport function Hide({ children, above, below, at, between, 'data-testid': testId }: HideProps): React.ReactElement | null {\n const { isAbove, isBelow, isAt, isBetween } = useBreakpoint()\n\n let shouldHide = false\n\n if (above !== undefined) {\n shouldHide = isAbove(above)\n } else if (below !== undefined) {\n shouldHide = isBelow(below)\n } else if (at !== undefined) {\n if (Array.isArray(at)) {\n shouldHide = at.some((bp) => isAt(bp))\n } else {\n shouldHide = isAt(at)\n }\n } else if (between !== undefined) {\n shouldHide = isBetween(between[0], between[1])\n }\n\n if (shouldHide) return null\n if (testId && React.isValidElement(children)) {\n return React.cloneElement(children, { 'data-testid': testId } as Record<string, unknown>)\n }\n return <>{children}</>\n}\n"],"names":["Show","children","above","below","at","between","testId","isAbove","isBelow","isAt","isBetween","useBreakpoint","shouldShow","bp","React","Hide","shouldHide"],"mappings":";;;AAYO,SAASA,EAAK,EAAE,UAAAC,GAAU,OAAAC,GAAO,OAAAC,GAAO,IAAAC,GAAI,SAAAC,GAAS,eAAeC,KAAgD;AACzH,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,MAAAC,GAAM,WAAAC,EAAA,IAAcC,EAAA;AAE9C,MAAIC,IAAa;AAkBjB,SAhBIV,MAAU,SACZU,IAAaL,EAAQL,CAAK,IACjBC,MAAU,SACnBS,IAAaJ,EAAQL,CAAK,IACjBC,MAAO,SACZ,MAAM,QAAQA,CAAE,IAClBQ,IAAaR,EAAG,KAAK,CAACS,MAAOJ,EAAKI,CAAE,CAAC,IAErCD,IAAaH,EAAKL,CAAE,IAEbC,MAAY,SACrBO,IAAaF,EAAUL,EAAQ,CAAC,GAAGA,EAAQ,CAAC,CAAC,IAE7CO,IAAa,IAGVA,IACDN,KAAUQ,EAAM,eAAeb,CAAQ,IAClCa,EAAM,aAAab,GAAU,EAAE,eAAeK,GAAmC,2BAEhF,UAAAL,GAAS,IAJK;AAK1B;AAWO,SAASc,EAAK,EAAE,UAAAd,GAAU,OAAAC,GAAO,OAAAC,GAAO,IAAAC,GAAI,SAAAC,GAAS,eAAeC,KAAgD;AACzH,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,MAAAC,GAAM,WAAAC,EAAA,IAAcC,EAAA;AAE9C,MAAIK,IAAa;AAgBjB,SAdId,MAAU,SACZc,IAAaT,EAAQL,CAAK,IACjBC,MAAU,SACnBa,IAAaR,EAAQL,CAAK,IACjBC,MAAO,SACZ,MAAM,QAAQA,CAAE,IAClBY,IAAaZ,EAAG,KAAK,CAACS,MAAOJ,EAAKI,CAAE,CAAC,IAErCG,IAAaP,EAAKL,CAAE,IAEbC,MAAY,WACrBW,IAAaN,EAAUL,EAAQ,CAAC,GAAGA,EAAQ,CAAC,CAAC,IAG3CW,IAAmB,OACnBV,KAAUQ,EAAM,eAAeb,CAAQ,IAClCa,EAAM,aAAab,GAAU,EAAE,eAAeK,GAAmC,2BAEhF,UAAAL,GAAS;AACrB;"}
|