asterui 0.12.62 → 0.12.64

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 (127) hide show
  1. package/dist/components/Anchor.d.ts +2 -0
  2. package/dist/components/Anchor.js +79 -75
  3. package/dist/components/Anchor.js.map +1 -1
  4. package/dist/components/Autocomplete.d.ts +1 -0
  5. package/dist/components/Autocomplete.js +115 -110
  6. package/dist/components/Autocomplete.js.map +1 -1
  7. package/dist/components/Breadcrumb.d.ts +4 -2
  8. package/dist/components/Breadcrumb.js +54 -29
  9. package/dist/components/Breadcrumb.js.map +1 -1
  10. package/dist/components/Button.d.ts +5 -1
  11. package/dist/components/Button.js +117 -107
  12. package/dist/components/Button.js.map +1 -1
  13. package/dist/components/Chart.d.ts +1 -0
  14. package/dist/components/Chart.js +31 -30
  15. package/dist/components/Chart.js.map +1 -1
  16. package/dist/components/Chat.d.ts +1 -0
  17. package/dist/components/Chat.js +32 -30
  18. package/dist/components/Chat.js.map +1 -1
  19. package/dist/components/Collapse.js +58 -56
  20. package/dist/components/Collapse.js.map +1 -1
  21. package/dist/components/Command.d.ts +5 -2
  22. package/dist/components/Command.js +262 -233
  23. package/dist/components/Command.js.map +1 -1
  24. package/dist/components/ContextMenu.d.ts +4 -0
  25. package/dist/components/ContextMenu.js +149 -130
  26. package/dist/components/ContextMenu.js.map +1 -1
  27. package/dist/components/DatePicker.d.ts +19 -1
  28. package/dist/components/DatePicker.js +266 -87
  29. package/dist/components/DatePicker.js.map +1 -1
  30. package/dist/components/Dock.d.ts +2 -0
  31. package/dist/components/Dock.js +70 -46
  32. package/dist/components/Dock.js.map +1 -1
  33. package/dist/components/FileInput.d.ts +1 -0
  34. package/dist/components/FileInput.js +26 -26
  35. package/dist/components/FileInput.js.map +1 -1
  36. package/dist/components/Filter.d.ts +1 -0
  37. package/dist/components/Filter.js +43 -40
  38. package/dist/components/Filter.js.map +1 -1
  39. package/dist/components/Flex.d.ts +1 -0
  40. package/dist/components/Flex.js +43 -42
  41. package/dist/components/Flex.js.map +1 -1
  42. package/dist/components/FloatButton.d.ts +3 -0
  43. package/dist/components/FloatButton.js +178 -127
  44. package/dist/components/FloatButton.js.map +1 -1
  45. package/dist/components/Input.d.ts +1 -0
  46. package/dist/components/Input.js +201 -184
  47. package/dist/components/Input.js.map +1 -1
  48. package/dist/components/Loading.d.ts +1 -0
  49. package/dist/components/Loading.js +40 -37
  50. package/dist/components/Loading.js.map +1 -1
  51. package/dist/components/Masonry.d.ts +1 -0
  52. package/dist/components/Masonry.js +45 -42
  53. package/dist/components/Masonry.js.map +1 -1
  54. package/dist/components/Mention.d.ts +1 -0
  55. package/dist/components/Mention.js +95 -91
  56. package/dist/components/Mention.js.map +1 -1
  57. package/dist/components/Menu.d.ts +1 -1
  58. package/dist/components/Menu.js +99 -93
  59. package/dist/components/Menu.js.map +1 -1
  60. package/dist/components/Modal.js +26 -17
  61. package/dist/components/Modal.js.map +1 -1
  62. package/dist/components/MonthCalendar.d.ts +1 -0
  63. package/dist/components/MonthCalendar.js +104 -97
  64. package/dist/components/MonthCalendar.js.map +1 -1
  65. package/dist/components/Notification.js +53 -45
  66. package/dist/components/Notification.js.map +1 -1
  67. package/dist/components/QRCode.d.ts +1 -0
  68. package/dist/components/QRCode.js +84 -55
  69. package/dist/components/QRCode.js.map +1 -1
  70. package/dist/components/RadialProgress.d.ts +1 -0
  71. package/dist/components/RadialProgress.js +19 -17
  72. package/dist/components/RadialProgress.js.map +1 -1
  73. package/dist/components/Range.d.ts +1 -0
  74. package/dist/components/Range.js +45 -43
  75. package/dist/components/Range.js.map +1 -1
  76. package/dist/components/Rating.d.ts +4 -2
  77. package/dist/components/Rating.js +83 -79
  78. package/dist/components/Rating.js.map +1 -1
  79. package/dist/components/Responsive.d.ts +4 -2
  80. package/dist/components/Responsive.js +10 -9
  81. package/dist/components/Responsive.js.map +1 -1
  82. package/dist/components/Result.d.ts +1 -0
  83. package/dist/components/Result.js +24 -22
  84. package/dist/components/Result.js.map +1 -1
  85. package/dist/components/Select.d.ts +1 -0
  86. package/dist/components/Select.js +72 -62
  87. package/dist/components/Select.js.map +1 -1
  88. package/dist/components/Splitter.d.ts +2 -0
  89. package/dist/components/Splitter.js +137 -131
  90. package/dist/components/Splitter.js.map +1 -1
  91. package/dist/components/Stat.d.ts +4 -2
  92. package/dist/components/Stat.js +19 -18
  93. package/dist/components/Stat.js.map +1 -1
  94. package/dist/components/Steps.d.ts +4 -2
  95. package/dist/components/Steps.js +56 -52
  96. package/dist/components/Steps.js.map +1 -1
  97. package/dist/components/Tabs.js +69 -57
  98. package/dist/components/Tabs.js.map +1 -1
  99. package/dist/components/TextRotate.d.ts +1 -0
  100. package/dist/components/TextRotate.js +14 -12
  101. package/dist/components/TextRotate.js.map +1 -1
  102. package/dist/components/Textarea.d.ts +1 -0
  103. package/dist/components/Textarea.js +31 -30
  104. package/dist/components/Textarea.js.map +1 -1
  105. package/dist/components/ThemeController.d.ts +6 -3
  106. package/dist/components/ThemeController.js +101 -92
  107. package/dist/components/ThemeController.js.map +1 -1
  108. package/dist/components/Tooltip.js +38 -35
  109. package/dist/components/Tooltip.js.map +1 -1
  110. package/dist/components/Transfer.js +130 -121
  111. package/dist/components/Transfer.js.map +1 -1
  112. package/dist/components/TreeSelect.js +49 -48
  113. package/dist/components/TreeSelect.js.map +1 -1
  114. package/dist/components/Typography.d.ts +10 -5
  115. package/dist/components/Typography.js +84 -81
  116. package/dist/components/Typography.js.map +1 -1
  117. package/dist/components/VirtualList.d.ts +2 -1
  118. package/dist/components/VirtualList.js +40 -36
  119. package/dist/components/VirtualList.js.map +1 -1
  120. package/dist/components/Watermark.d.ts +1 -0
  121. package/dist/components/Watermark.js +74 -71
  122. package/dist/components/Watermark.js.map +1 -1
  123. package/dist/components/WeekCalendar.d.ts +1 -0
  124. package/dist/components/WeekCalendar.js +91 -76
  125. package/dist/components/WeekCalendar.js.map +1 -1
  126. package/dist/index.d.ts +1 -1
  127. package/package.json +1 -1
@@ -1,127 +1,131 @@
1
- import { jsxs as I, Fragment as F, jsx as a } from "react/jsx-runtime";
2
- import L, { useState as y, useId as X, createContext as _, useContext as O } from "react";
3
- import { useConfig as P } from "../providers/ConfigProvider.js";
4
- const q = "rating", D = "rating-xs", J = "rating-sm", K = "rating-md", Q = "rating-lg", T = "rating-xl", U = "rating-half", W = "rating-hidden", Y = "mask", Z = "mask-star", w = "mask-star-2", nn = "mask-heart", tn = "mask-half-1", an = "mask-half-2", z = _(null);
5
- function sn({
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: i,
8
- defaultValue: p = 0,
9
- onChange: v,
10
- onHoverChange: l,
11
- count: m = 5,
12
- size: f,
13
- gap: c = "md",
14
- color: r = "bg-warning",
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: h = !0,
17
- allowHalf: s = !1,
18
- disabled: g = !1,
19
- className: k = "",
20
- ...C
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: b } = P(), o = f ?? b ?? "md", [R, x] = y(p), [G, S] = y(0), M = i !== void 0 ? i : R, $ = X(), N = (e) => {
23
- if (g) return;
24
- const n = h && e === M ? 0 : e;
25
- i === void 0 && x(n), S(0), v?.(n);
26
- }, j = (e) => {
27
- g || (S(e), l?.(e));
28
- }, H = {
29
- xs: D,
30
- sm: J,
31
- md: K,
32
- lg: Q,
33
- xl: T
34
- }, A = {
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
- }, B = [
41
- q,
41
+ }, E = [
42
+ D,
42
43
  // Half-star mode requires a size class to render correctly, default to md
43
- (s || o) && H[o],
44
- s ? U : c && A[c],
45
- k
46
- ].filter(Boolean).join(" "), V = s ? "star-2" : u, E = t || /* @__PURE__ */ I(F, { children: [
47
- h && /* @__PURE__ */ a(d, { value: 0, hidden: !0 }),
48
- s ? (
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: m }, (e, n) => /* @__PURE__ */ I(L.Fragment, { children: [
51
- /* @__PURE__ */ a(d, { value: n + 0.5, mask: V, color: r, half: "first" }),
52
- /* @__PURE__ */ a(d, { value: n + 1, mask: V, color: r, half: "second" })
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: m }, (e, n) => /* @__PURE__ */ a(d, { value: n + 1, mask: V, color: r }, n + 1))
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__ */ a(z.Provider, { value: { name: $, currentValue: M, hoverValue: G, onChange: N, onHover: j, size: o, disabled: g, halfGap: s ? c : void 0 }, children: /* @__PURE__ */ a(
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: B,
65
- "data-value": M,
65
+ className: E,
66
+ "data-value": b,
67
+ "data-testid": o,
66
68
  onMouseLeave: () => j(0),
67
- ...C,
68
- children: E
69
+ ...V,
70
+ children: F
69
71
  }
70
72
  ) });
71
73
  }
72
- function d({ value: t, mask: i = "star-2", color: p = "bg-warning", hidden: v = !1, half: l, className: m = "" }) {
73
- const f = O(z);
74
- if (!f)
74
+ 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: c, currentValue: r, hoverValue: u, onChange: h, onHover: s, disabled: g, halfGap: k } = f, C = {
77
- star: Z,
78
- "star-2": w,
79
- heart: nn
80
- }, o = {
81
- first: tn,
82
- second: `${an} ${k ? {
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
- }[k] : ""}`.trim()
89
- }, R = v ? W : [
90
- Y,
91
- C[i],
92
- l && o[l],
93
- p,
94
- m
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 (g)
97
- return /* @__PURE__ */ a(
98
+ if (M)
99
+ return /* @__PURE__ */ s(
98
100
  "div",
99
101
  {
100
102
  className: R,
101
- "aria-current": r === t ? "true" : void 0,
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 x = u > 0 ? u : r;
106
- return /* @__PURE__ */ a(
108
+ const p = g > 0 ? g : u;
109
+ return /* @__PURE__ */ s(
107
110
  "input",
108
111
  {
109
112
  type: "radio",
110
- name: c,
113
+ name: d,
111
114
  className: R,
112
- checked: x === t,
115
+ checked: p === t,
113
116
  onChange: () => {
114
117
  },
115
- onClick: () => h(t),
116
- onMouseEnter: () => s(t),
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 cn = Object.assign(sn, {
122
- Item: d
125
+ const dt = Object.assign(rt, {
126
+ Item: l
123
127
  });
124
128
  export {
125
- cn as Rating
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 { useBreakpoint as m } from "../hooks/useBreakpoint.js";
3
- function h({ children: f, above: o, below: r, at: s, between: e }) {
4
- const { isAbove: d, isBelow: n, isAt: l, isBetween: u } = m();
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 o !== void 0 ? i = d(o) : r !== void 0 ? i = n(r) : s !== void 0 ? Array.isArray(s) ? i = s.some((t) => l(t)) : i = l(s) : e !== void 0 ? i = u(e[0], e[1]) : i = !0, i ? /* @__PURE__ */ v(A, { children: f }) : null;
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 p({ children: f, above: o, below: r, at: s, between: e }) {
9
- const { isAbove: d, isBelow: n, isAt: l, isBetween: u } = m();
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 o !== void 0 ? i = d(o) : r !== void 0 ? i = n(r) : s !== void 0 ? Array.isArray(s) ? i = s.some((t) => l(t)) : i = l(s) : e !== void 0 && (i = u(e[0], e[1])), i ? null : /* @__PURE__ */ v(A, { children: f });
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
- p as Hide,
15
- h as Show
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 return shouldShow ? <>{children}</> : null\n}\n\nexport interface HideProps {\n children: ReactNode\n above?: Breakpoint\n below?: Breakpoint\n at?: Breakpoint | Breakpoint[]\n between?: [Breakpoint, Breakpoint]\n}\n\nexport function Hide({ children, above, below, at, between }: 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 return shouldHide ? null : <>{children}</>\n}\n"],"names":["Show","children","above","below","at","between","isAbove","isBelow","isAt","isBetween","useBreakpoint","shouldShow","bp","jsx","Fragment","Hide","shouldHide"],"mappings":";;AAWO,SAASA,EAAK,EAAE,UAAAC,GAAU,OAAAC,GAAO,OAAAC,GAAO,IAAAC,GAAI,SAAAC,KAAiD;AAClG,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,MAAAC,GAAM,WAAAC,EAAA,IAAcC,EAAA;AAE9C,MAAIC,IAAa;AAEjB,SAAIT,MAAU,SACZS,IAAaL,EAAQJ,CAAK,IACjBC,MAAU,SACnBQ,IAAaJ,EAAQJ,CAAK,IACjBC,MAAO,SACZ,MAAM,QAAQA,CAAE,IAClBO,IAAaP,EAAG,KAAK,CAACQ,MAAOJ,EAAKI,CAAE,CAAC,IAErCD,IAAaH,EAAKJ,CAAE,IAEbC,MAAY,SACrBM,IAAaF,EAAUJ,EAAQ,CAAC,GAAGA,EAAQ,CAAC,CAAC,IAE7CM,IAAa,IAGRA,IAAa,gBAAAE,EAAAC,GAAA,EAAG,UAAAb,EAAA,CAAS,IAAM;AACxC;AAUO,SAASc,EAAK,EAAE,UAAAd,GAAU,OAAAC,GAAO,OAAAC,GAAO,IAAAC,GAAI,SAAAC,KAAiD;AAClG,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,MAAAC,GAAM,WAAAC,EAAA,IAAcC,EAAA;AAE9C,MAAIM,IAAa;AAEjB,SAAId,MAAU,SACZc,IAAaV,EAAQJ,CAAK,IACjBC,MAAU,SACnBa,IAAaT,EAAQJ,CAAK,IACjBC,MAAO,SACZ,MAAM,QAAQA,CAAE,IAClBY,IAAaZ,EAAG,KAAK,CAACQ,MAAOJ,EAAKI,CAAE,CAAC,IAErCI,IAAaR,EAAKJ,CAAE,IAEbC,MAAY,WACrBW,IAAaP,EAAUJ,EAAQ,CAAC,GAAGA,EAAQ,CAAC,CAAC,IAGxCW,IAAa,OAAO,gBAAAH,EAAAC,GAAA,EAAG,UAAAb,EAAA,CAAS;AACzC;"}
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;"}
@@ -7,6 +7,7 @@ export interface ResultProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
7
7
  icon?: React.ReactNode;
8
8
  extra?: React.ReactNode;
9
9
  children?: React.ReactNode;
10
+ 'data-testid'?: string;
10
11
  }
11
12
  export declare const Result: React.FC<ResultProps>;
12
13
  export default Result;
@@ -1,5 +1,5 @@
1
- import { jsxs as d, jsx as e } from "react/jsx-runtime";
2
- const m = {
1
+ import { jsxs as h, jsx as e } from "react/jsx-runtime";
2
+ const u = {
3
3
  success: /* @__PURE__ */ e(
4
4
  "svg",
5
5
  {
@@ -75,36 +75,38 @@ const m = {
75
75
  404: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "404" }),
76
76
  403: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "403" }),
77
77
  500: /* @__PURE__ */ e("div", { className: "text-6xl font-bold text-base-content/40", children: "500" })
78
- }, x = ({
79
- status: t = "info",
80
- title: n,
81
- subTitle: s,
82
- icon: o,
78
+ }, v = ({
79
+ status: n = "info",
80
+ title: o,
81
+ subTitle: a,
82
+ icon: i,
83
83
  extra: r,
84
84
  children: l,
85
- className: i = "",
86
- ...c
85
+ className: c = "",
86
+ "data-testid": s,
87
+ ...m
87
88
  }) => {
88
- const a = o !== void 0 ? o : m[t];
89
- return /* @__PURE__ */ d(
89
+ const d = i !== void 0 ? i : u[n], t = (x) => s ? `${s}-${x}` : void 0;
90
+ return /* @__PURE__ */ h(
90
91
  "div",
91
92
  {
92
- className: `w-full flex flex-col items-center justify-center text-center p-8 ${i}`,
93
- "data-status": t,
94
- ...c,
93
+ className: `w-full flex flex-col items-center justify-center text-center p-8 ${c}`,
94
+ "data-status": n,
95
+ "data-testid": s,
96
+ ...m,
95
97
  children: [
96
- a && /* @__PURE__ */ e("div", { className: "mb-6", children: a }),
97
- n && /* @__PURE__ */ e("div", { className: "text-2xl font-semibold mb-2 text-base-content", children: n }),
98
- s && /* @__PURE__ */ e("div", { className: "text-base text-base-content/70 mb-6 max-w-md", children: s }),
99
- l && /* @__PURE__ */ e("div", { className: "mb-6 max-w-2xl", children: l }),
100
- r && /* @__PURE__ */ e("div", { className: "flex gap-2", children: r })
98
+ d && /* @__PURE__ */ e("div", { className: "mb-6", "data-testid": t("icon"), children: d }),
99
+ o && /* @__PURE__ */ e("div", { className: "text-2xl font-semibold mb-2 text-base-content", "data-testid": t("title"), children: o }),
100
+ a && /* @__PURE__ */ e("div", { className: "text-base text-base-content/70 mb-6 max-w-md", "data-testid": t("subtitle"), children: a }),
101
+ l && /* @__PURE__ */ e("div", { className: "mb-6 max-w-2xl", "data-testid": t("content"), children: l }),
102
+ r && /* @__PURE__ */ e("div", { className: "flex gap-2", "data-testid": t("extra"), children: r })
101
103
  ]
102
104
  }
103
105
  );
104
106
  };
105
- x.displayName = "Result";
107
+ v.displayName = "Result";
106
108
  export {
107
- x as Result,
108
- x as default
109
+ v as Result,
110
+ v as default
109
111
  };
110
112
  //# sourceMappingURL=Result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Result.js","sources":["../../src/components/Result.tsx"],"sourcesContent":["import React from 'react'\n\nexport type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500'\n\nexport interface ResultProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n status?: ResultStatus\n title?: React.ReactNode\n subTitle?: React.ReactNode\n icon?: React.ReactNode\n extra?: React.ReactNode\n children?: React.ReactNode\n}\n\nconst defaultIcons: Record<ResultStatus, React.ReactNode> = {\n success: (\n <svg\n className=\"w-16 h-16 text-success\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"w-16 h-16 text-error\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n info: (\n <svg\n className=\"w-16 h-16 text-info\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"w-16 h-16 text-warning\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n ),\n '404': (\n <div className=\"text-6xl font-bold text-base-content/40\">404</div>\n ),\n '403': (\n <div className=\"text-6xl font-bold text-base-content/40\">403</div>\n ),\n '500': (\n <div className=\"text-6xl font-bold text-base-content/40\">500</div>\n ),\n}\n\nexport const Result: React.FC<ResultProps> = ({\n status = 'info',\n title,\n subTitle,\n icon,\n extra,\n children,\n className = '',\n ...rest\n}) => {\n const displayIcon = icon !== undefined ? icon : defaultIcons[status]\n\n return (\n <div\n className={`w-full flex flex-col items-center justify-center text-center p-8 ${className}`}\n data-status={status}\n {...rest}\n >\n {displayIcon && <div className=\"mb-6\">{displayIcon}</div>}\n\n {title && (\n <div className=\"text-2xl font-semibold mb-2 text-base-content\">\n {title}\n </div>\n )}\n\n {subTitle && (\n <div className=\"text-base text-base-content/70 mb-6 max-w-md\">\n {subTitle}\n </div>\n )}\n\n {children && <div className=\"mb-6 max-w-2xl\">{children}</div>}\n\n {extra && <div className=\"flex gap-2\">{extra}</div>}\n </div>\n )\n}\n\nResult.displayName = 'Result'\n\nexport default Result\n"],"names":["defaultIcons","jsx","Result","status","title","subTitle","icon","extra","children","className","rest","displayIcon","jsxs"],"mappings":";AAaA,MAAMA,IAAsD;AAAA,EAC1D,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,OACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,MACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,SACE,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MAEP,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAa;AAAA,UACb,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ;AAAA,EAAA;AAAA,EAGJ,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,OAAG;AAAA,EAE9D,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,OAAG;AAAA,EAE9D,KACE,gBAAAA,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,MAAA,CAAG;AAEhE,GAEaC,IAAgC,CAAC;AAAA,EAC5C,QAAAC,IAAS;AAAA,EACT,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAcL,MAAS,SAAYA,IAAON,EAAaG,CAAM;AAEnE,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,oEAAoEH,CAAS;AAAA,MACxF,eAAaN;AAAA,MACZ,GAAGO;AAAA,MAEH,UAAA;AAAA,QAAAC,KAAe,gBAAAV,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAU,GAAY;AAAA,QAElDP,KACC,gBAAAH,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAG,GACH;AAAA,QAGDC,KACC,gBAAAJ,EAAC,OAAA,EAAI,WAAU,gDACZ,UAAAI,GACH;AAAA,QAGDG,KAAY,gBAAAP,EAAC,OAAA,EAAI,WAAU,kBAAkB,UAAAO,GAAS;AAAA,QAEtDD,KAAS,gBAAAN,EAAC,OAAA,EAAI,WAAU,cAAc,UAAAM,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD;AAEAL,EAAO,cAAc;"}
1
+ {"version":3,"file":"Result.js","sources":["../../src/components/Result.tsx"],"sourcesContent":["import React from 'react'\n\nexport type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500'\n\nexport interface ResultProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n status?: ResultStatus\n title?: React.ReactNode\n subTitle?: React.ReactNode\n icon?: React.ReactNode\n extra?: React.ReactNode\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nconst defaultIcons: Record<ResultStatus, React.ReactNode> = {\n success: (\n <svg\n className=\"w-16 h-16 text-success\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"w-16 h-16 text-error\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n info: (\n <svg\n className=\"w-16 h-16 text-info\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"w-16 h-16 text-warning\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n ),\n '404': (\n <div className=\"text-6xl font-bold text-base-content/40\">404</div>\n ),\n '403': (\n <div className=\"text-6xl font-bold text-base-content/40\">403</div>\n ),\n '500': (\n <div className=\"text-6xl font-bold text-base-content/40\">500</div>\n ),\n}\n\nexport const Result: React.FC<ResultProps> = ({\n status = 'info',\n title,\n subTitle,\n icon,\n extra,\n children,\n className = '',\n 'data-testid': testId,\n ...rest\n}) => {\n const displayIcon = icon !== undefined ? icon : defaultIcons[status]\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <div\n className={`w-full flex flex-col items-center justify-center text-center p-8 ${className}`}\n data-status={status}\n data-testid={testId}\n {...rest}\n >\n {displayIcon && <div className=\"mb-6\" data-testid={getTestId('icon')}>{displayIcon}</div>}\n\n {title && (\n <div className=\"text-2xl font-semibold mb-2 text-base-content\" data-testid={getTestId('title')}>\n {title}\n </div>\n )}\n\n {subTitle && (\n <div className=\"text-base text-base-content/70 mb-6 max-w-md\" data-testid={getTestId('subtitle')}>\n {subTitle}\n </div>\n )}\n\n {children && <div className=\"mb-6 max-w-2xl\" data-testid={getTestId('content')}>{children}</div>}\n\n {extra && <div className=\"flex gap-2\" data-testid={getTestId('extra')}>{extra}</div>}\n </div>\n )\n}\n\nResult.displayName = 'Result'\n\nexport default Result\n"],"names":["defaultIcons","jsx","Result","status","title","subTitle","icon","extra","children","className","testId","rest","displayIcon","getTestId","suffix","jsxs"],"mappings":"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"}
@@ -14,5 +14,6 @@ export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectE
14
14
  addonAfter?: React.ReactNode;
15
15
  className?: string;
16
16
  children?: React.ReactNode;
17
+ 'data-testid'?: string;
17
18
  }
18
19
  export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
@@ -1,78 +1,88 @@
1
- import { jsx as s, jsxs as C } from "react/jsx-runtime";
2
- import { forwardRef as E, useRef as v } from "react";
3
- import { useConfig as X } from "../providers/ConfigProvider.js";
4
- const o = "select", r = "select-bordered", $ = "select-ghost", F = "select-xs", G = "select-sm", I = "select-md", L = "select-lg", M = "select-xl", P = "select-neutral", W = "select-primary", k = "select-secondary", q = "select-accent", A = "select-info", D = "select-success", b = "select-warning", h = "select-error", H = "floating-label", J = E(
1
+ import { jsx as c, jsxs as w } from "react/jsx-runtime";
2
+ import { forwardRef as W, useRef as X } from "react";
3
+ import { useConfig as F } from "../providers/ConfigProvider.js";
4
+ const i = "select", f = "select-bordered", G = "select-ghost", M = "select-xs", P = "select-sm", k = "select-md", q = "select-lg", A = "select-xl", D = "select-neutral", H = "select-primary", J = "select-secondary", K = "select-accent", L = "select-info", O = "select-success", y = "select-warning", N = "select-error", Q = "floating-label", U = W(
5
5
  ({
6
- size: w,
7
- color: a,
8
- status: i,
9
- ghost: y = !1,
10
- bordered: N = !0,
11
- floatingLabel: d,
12
- addonBefore: t,
13
- addonAfter: c,
14
- className: f = "",
15
- children: m,
16
- ...S
17
- }, j) => {
18
- const { componentSize: R } = X(), e = w ?? R ?? "md", z = v(null), u = j || z, l = {
19
- xs: F,
20
- sm: G,
21
- md: I,
22
- lg: L,
23
- xl: M
24
- }, g = i ? {
25
- error: h,
26
- warning: b
27
- }[i] : a ? {
28
- neutral: P,
29
- primary: W,
30
- secondary: k,
31
- accent: q,
32
- info: A,
33
- success: D,
34
- warning: b,
35
- error: h
36
- }[a] : "", p = t || c, B = p ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", f].filter(Boolean).join(" ") : [
37
- o,
6
+ size: j,
7
+ color: m,
8
+ status: S,
9
+ ghost: v = !1,
10
+ bordered: R = !0,
11
+ floatingLabel: l,
12
+ addonBefore: n,
13
+ addonAfter: o,
14
+ className: u = "",
15
+ children: g,
16
+ "data-testid": e,
17
+ ...p
18
+ }, $) => {
19
+ const { componentSize: z } = F(), s = j ?? z ?? "md", B = X(null), x = $ || B, a = {
20
+ xs: M,
21
+ sm: P,
22
+ md: k,
23
+ lg: q,
24
+ xl: A
25
+ }, C = S ? {
26
+ error: N,
27
+ warning: y
28
+ }[S] : m ? {
29
+ neutral: D,
30
+ primary: H,
31
+ secondary: J,
32
+ accent: K,
33
+ info: L,
34
+ success: O,
35
+ warning: y,
36
+ error: N
37
+ }[m] : "", r = n || o, E = r || !!l, d = (t) => e ? `${e}-${t}` : void 0, b = e ? E ? d("select") : e : void 0, T = r ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", u].filter(Boolean).join(" ") : [
38
+ i,
38
39
  "w-full",
39
- N && r,
40
- y && $,
41
- e && l[e],
42
- g,
43
- f
44
- ].filter(Boolean).join(" "), x = /* @__PURE__ */ s("select", { ref: u, className: B, ...S, children: m });
45
- if (d) {
46
- const n = [
47
- H,
48
- e && l[e]
40
+ R && f,
41
+ v && G,
42
+ s && a[s],
43
+ C,
44
+ u
45
+ ].filter(Boolean).join(" "), h = /* @__PURE__ */ c("select", { ref: x, className: T, "data-testid": b, ...p, children: g });
46
+ if (l) {
47
+ const t = [
48
+ Q,
49
+ s && a[s]
49
50
  ].filter(Boolean).join(" ");
50
- return /* @__PURE__ */ C("label", { className: n, children: [
51
- /* @__PURE__ */ s("select", { ref: u, className: `${o} ${r} w-full`, ...S, children: m }),
52
- /* @__PURE__ */ s("span", { children: d })
51
+ return /* @__PURE__ */ w("label", { className: t, "data-testid": e, children: [
52
+ /* @__PURE__ */ c(
53
+ "select",
54
+ {
55
+ ref: x,
56
+ className: `${i} ${f} w-full`,
57
+ "data-testid": b,
58
+ ...p,
59
+ children: g
60
+ }
61
+ ),
62
+ /* @__PURE__ */ c("span", { children: l })
53
63
  ] });
54
64
  }
55
- if (p) {
56
- const n = [
57
- o,
58
- r,
65
+ if (r) {
66
+ const t = [
67
+ i,
68
+ f,
59
69
  "flex",
60
70
  "items-center",
61
71
  "gap-2",
62
- e && l[e],
63
- g
72
+ s && a[s],
73
+ C
64
74
  ].filter(Boolean).join(" ");
65
- return /* @__PURE__ */ C("label", { className: n, children: [
66
- t && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: t }),
67
- x,
68
- c && /* @__PURE__ */ s("span", { className: "text-base-content/70", children: c })
75
+ return /* @__PURE__ */ w("label", { className: t, "data-testid": e, children: [
76
+ n && /* @__PURE__ */ c("span", { className: "text-base-content/70", "data-testid": d("addon-before"), children: n }),
77
+ h,
78
+ o && /* @__PURE__ */ c("span", { className: "text-base-content/70", "data-testid": d("addon-after"), children: o })
69
79
  ] });
70
80
  }
71
- return x;
81
+ return h;
72
82
  }
73
83
  );
74
- J.displayName = "Select";
84
+ U.displayName = "Select";
75
85
  export {
76
- J as Select
86
+ U as Select
77
87
  };
78
88
  //# sourceMappingURL=Select.js.map