asterui 0.12.61 → 0.12.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/components/Affix.d.ts +2 -0
  2. package/dist/components/Affix.js.map +1 -1
  3. package/dist/components/Alert.d.ts +2 -0
  4. package/dist/components/Alert.js.map +1 -1
  5. package/dist/components/Anchor.d.ts +2 -0
  6. package/dist/components/Anchor.js +79 -75
  7. package/dist/components/Anchor.js.map +1 -1
  8. package/dist/components/Autocomplete.d.ts +1 -0
  9. package/dist/components/Autocomplete.js +115 -110
  10. package/dist/components/Autocomplete.js.map +1 -1
  11. package/dist/components/Avatar.d.ts +4 -0
  12. package/dist/components/Avatar.js.map +1 -1
  13. package/dist/components/Breadcrumb.d.ts +4 -2
  14. package/dist/components/Breadcrumb.js +54 -29
  15. package/dist/components/Breadcrumb.js.map +1 -1
  16. package/dist/components/Browser.d.ts +2 -0
  17. package/dist/components/Browser.js.map +1 -1
  18. package/dist/components/Button.d.ts +5 -1
  19. package/dist/components/Button.js +117 -107
  20. package/dist/components/Button.js.map +1 -1
  21. package/dist/components/Chart.d.ts +1 -0
  22. package/dist/components/Chart.js +31 -30
  23. package/dist/components/Chart.js.map +1 -1
  24. package/dist/components/Chat.d.ts +1 -0
  25. package/dist/components/Chat.js +39 -28
  26. package/dist/components/Chat.js.map +1 -1
  27. package/dist/components/Code.d.ts +2 -0
  28. package/dist/components/Code.js.map +1 -1
  29. package/dist/components/Command.d.ts +5 -2
  30. package/dist/components/Command.js +262 -233
  31. package/dist/components/Command.js.map +1 -1
  32. package/dist/components/Container.d.ts +2 -0
  33. package/dist/components/Container.js.map +1 -1
  34. package/dist/components/ContextMenu.d.ts +4 -0
  35. package/dist/components/ContextMenu.js +157 -122
  36. package/dist/components/ContextMenu.js.map +1 -1
  37. package/dist/components/CopyButton.d.ts +2 -0
  38. package/dist/components/CopyButton.js +9 -8
  39. package/dist/components/CopyButton.js.map +1 -1
  40. package/dist/components/Countdown.d.ts +3 -3
  41. package/dist/components/Countdown.js +49 -47
  42. package/dist/components/Countdown.js.map +1 -1
  43. package/dist/components/Diff.d.ts +3 -3
  44. package/dist/components/Diff.js +14 -10
  45. package/dist/components/Diff.js.map +1 -1
  46. package/dist/components/Divider.d.ts +2 -0
  47. package/dist/components/Divider.js.map +1 -1
  48. package/dist/components/Dock.d.ts +6 -0
  49. package/dist/components/Dock.js +75 -38
  50. package/dist/components/Dock.js.map +1 -1
  51. package/dist/components/Dropdown.js +110 -110
  52. package/dist/components/Dropdown.js.map +1 -1
  53. package/dist/components/Fieldset.d.ts +2 -0
  54. package/dist/components/Fieldset.js.map +1 -1
  55. package/dist/components/FileInput.d.ts +1 -0
  56. package/dist/components/FileInput.js +26 -26
  57. package/dist/components/FileInput.js.map +1 -1
  58. package/dist/components/Filter.d.ts +1 -0
  59. package/dist/components/Filter.js +43 -40
  60. package/dist/components/Filter.js.map +1 -1
  61. package/dist/components/Flex.d.ts +1 -0
  62. package/dist/components/Flex.js +43 -42
  63. package/dist/components/Flex.js.map +1 -1
  64. package/dist/components/FloatButton.d.ts +9 -0
  65. package/dist/components/FloatButton.js +211 -136
  66. package/dist/components/FloatButton.js.map +1 -1
  67. package/dist/components/Footer.d.ts +2 -0
  68. package/dist/components/Footer.js.map +1 -1
  69. package/dist/components/Grid.d.ts +4 -0
  70. package/dist/components/Grid.js.map +1 -1
  71. package/dist/components/Hero.d.ts +2 -0
  72. package/dist/components/Hero.js.map +1 -1
  73. package/dist/components/HoverGallery.d.ts +3 -3
  74. package/dist/components/HoverGallery.js +12 -10
  75. package/dist/components/HoverGallery.js.map +1 -1
  76. package/dist/components/Input.d.ts +1 -0
  77. package/dist/components/Input.js +201 -184
  78. package/dist/components/Input.js.map +1 -1
  79. package/dist/components/Join.d.ts +2 -0
  80. package/dist/components/Join.js.map +1 -1
  81. package/dist/components/Kbd.d.ts +2 -0
  82. package/dist/components/Kbd.js.map +1 -1
  83. package/dist/components/Loading.d.ts +3 -0
  84. package/dist/components/Loading.js +58 -35
  85. package/dist/components/Loading.js.map +1 -1
  86. package/dist/components/Mask.d.ts +2 -2
  87. package/dist/components/Mask.js.map +1 -1
  88. package/dist/components/Masonry.d.ts +1 -0
  89. package/dist/components/Masonry.js +45 -42
  90. package/dist/components/Masonry.js.map +1 -1
  91. package/dist/components/Mention.d.ts +1 -0
  92. package/dist/components/Mention.js +95 -91
  93. package/dist/components/Mention.js.map +1 -1
  94. package/dist/components/MonthCalendar.d.ts +1 -0
  95. package/dist/components/MonthCalendar.js +104 -97
  96. package/dist/components/MonthCalendar.js.map +1 -1
  97. package/dist/components/Navbar.d.ts +2 -0
  98. package/dist/components/Navbar.js.map +1 -1
  99. package/dist/components/Notification.js +32 -18
  100. package/dist/components/Notification.js.map +1 -1
  101. package/dist/components/Phone.d.ts +3 -2
  102. package/dist/components/Phone.js +10 -8
  103. package/dist/components/Phone.js.map +1 -1
  104. package/dist/components/Popconfirm.js +110 -92
  105. package/dist/components/Popconfirm.js.map +1 -1
  106. package/dist/components/Popover.d.ts +2 -0
  107. package/dist/components/Popover.js.map +1 -1
  108. package/dist/components/Progress.d.ts +2 -0
  109. package/dist/components/Progress.js.map +1 -1
  110. package/dist/components/QRCode.d.ts +1 -0
  111. package/dist/components/QRCode.js +84 -55
  112. package/dist/components/QRCode.js.map +1 -1
  113. package/dist/components/RadialProgress.d.ts +1 -0
  114. package/dist/components/RadialProgress.js +19 -17
  115. package/dist/components/RadialProgress.js.map +1 -1
  116. package/dist/components/Radio.d.ts +6 -3
  117. package/dist/components/Radio.js +9 -9
  118. package/dist/components/Radio.js.map +1 -1
  119. package/dist/components/Range.d.ts +1 -0
  120. package/dist/components/Range.js +45 -43
  121. package/dist/components/Range.js.map +1 -1
  122. package/dist/components/Rating.d.ts +4 -2
  123. package/dist/components/Rating.js +83 -79
  124. package/dist/components/Rating.js.map +1 -1
  125. package/dist/components/Responsive.d.ts +4 -2
  126. package/dist/components/Responsive.js +10 -9
  127. package/dist/components/Responsive.js.map +1 -1
  128. package/dist/components/Result.d.ts +1 -0
  129. package/dist/components/Result.js +24 -22
  130. package/dist/components/Result.js.map +1 -1
  131. package/dist/components/Select.d.ts +1 -0
  132. package/dist/components/Select.js +72 -62
  133. package/dist/components/Select.js.map +1 -1
  134. package/dist/components/Skeleton.d.ts +2 -0
  135. package/dist/components/Skeleton.js.map +1 -1
  136. package/dist/components/Space.d.ts +2 -0
  137. package/dist/components/Space.js.map +1 -1
  138. package/dist/components/Splitter.d.ts +2 -0
  139. package/dist/components/Splitter.js +137 -131
  140. package/dist/components/Splitter.js.map +1 -1
  141. package/dist/components/Stat.d.ts +4 -2
  142. package/dist/components/Stat.js +19 -18
  143. package/dist/components/Stat.js.map +1 -1
  144. package/dist/components/Status.d.ts +3 -3
  145. package/dist/components/Status.js +27 -25
  146. package/dist/components/Status.js.map +1 -1
  147. package/dist/components/Steps.d.ts +4 -2
  148. package/dist/components/Steps.js +56 -52
  149. package/dist/components/Steps.js.map +1 -1
  150. package/dist/components/TextRotate.d.ts +1 -0
  151. package/dist/components/TextRotate.js +14 -12
  152. package/dist/components/TextRotate.js.map +1 -1
  153. package/dist/components/Textarea.d.ts +1 -0
  154. package/dist/components/Textarea.js +31 -30
  155. package/dist/components/Textarea.js.map +1 -1
  156. package/dist/components/ThemeController.d.ts +6 -3
  157. package/dist/components/ThemeController.js +101 -92
  158. package/dist/components/ThemeController.js.map +1 -1
  159. package/dist/components/Toggle.d.ts +2 -0
  160. package/dist/components/Toggle.js.map +1 -1
  161. package/dist/components/Tooltip.d.ts +2 -0
  162. package/dist/components/Tooltip.js +38 -32
  163. package/dist/components/Tooltip.js.map +1 -1
  164. package/dist/components/Typography.d.ts +10 -5
  165. package/dist/components/Typography.js +84 -81
  166. package/dist/components/Typography.js.map +1 -1
  167. package/dist/components/VirtualList.d.ts +2 -1
  168. package/dist/components/VirtualList.js +40 -36
  169. package/dist/components/VirtualList.js.map +1 -1
  170. package/dist/components/Watermark.d.ts +1 -0
  171. package/dist/components/Watermark.js +74 -71
  172. package/dist/components/Watermark.js.map +1 -1
  173. package/dist/components/WeekCalendar.d.ts +1 -0
  174. package/dist/components/WeekCalendar.js +91 -76
  175. package/dist/components/WeekCalendar.js.map +1 -1
  176. package/dist/components/Window.d.ts +3 -2
  177. package/dist/components/Window.js +9 -7
  178. package/dist/components/Window.js.map +1 -1
  179. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Join.js","sources":["../../src/components/Join.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dJoin = 'join'\nconst dJoinVertical = 'join-vertical'\nconst dJoinItem = 'join-item'\n\nexport interface JoinProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n}\n\nexport function Join({ children, direction = 'horizontal', className = '', ...rest }: JoinProps) {\n const classes = [dJoin, direction === 'vertical' && dJoinVertical, className].filter(Boolean).join(' ')\n\n // Automatically add join-item class to all children\n const childrenWithJoinItem = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as any).className || ''\n const newClassName = existingClassName ? `${dJoinItem} ${existingClassName}` : dJoinItem\n\n return React.cloneElement(child as React.ReactElement<any>, {\n className: newClassName,\n })\n }\n return child\n })\n\n return <div className={classes} {...rest}>{childrenWithJoinItem}</div>\n}\n"],"names":["dJoin","dJoinVertical","dJoinItem","Join","children","direction","className","rest","classes","childrenWithJoinItem","React","child","existingClassName","newClassName"],"mappings":";;AAGA,MAAMA,IAAQ,QACRC,IAAgB,iBAChBC,IAAY;AAOX,SAASC,EAAK,EAAE,UAAAC,GAAU,WAAAC,IAAY,cAAc,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAC/F,QAAMC,IAAU,CAACR,GAAOK,MAAc,cAAcJ,GAAeK,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAGhGG,IAAuBC,EAAM,SAAS,IAAIN,GAAU,CAACO,MAAU;AACnE,QAAID,EAAM,eAAeC,CAAK,GAAG;AAC/B,YAAMC,IAAqBD,EAAM,MAAc,aAAa,IACtDE,IAAeD,IAAoB,GAAGV,CAAS,IAAIU,CAAiB,KAAKV;AAE/E,aAAOQ,EAAM,aAAaC,GAAkC;AAAA,QAC1D,WAAWE;AAAA,MAAA,CACZ;AAAA,IACH;AACA,WAAOF;AAAA,EACT,CAAC;AAED,2BAAQ,OAAA,EAAI,WAAWH,GAAU,GAAGD,GAAO,UAAAE,GAAqB;AAClE;"}
1
+ {"version":3,"file":"Join.js","sources":["../../src/components/Join.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dJoin = 'join'\nconst dJoinVertical = 'join-vertical'\nconst dJoinItem = 'join-item'\n\nexport interface JoinProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport function Join({ children, direction = 'horizontal', className = '', ...rest }: JoinProps) {\n const classes = [dJoin, direction === 'vertical' && dJoinVertical, className].filter(Boolean).join(' ')\n\n // Automatically add join-item class to all children\n const childrenWithJoinItem = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as any).className || ''\n const newClassName = existingClassName ? `${dJoinItem} ${existingClassName}` : dJoinItem\n\n return React.cloneElement(child as React.ReactElement<any>, {\n className: newClassName,\n })\n }\n return child\n })\n\n return <div className={classes} {...rest}>{childrenWithJoinItem}</div>\n}\n"],"names":["dJoin","dJoinVertical","dJoinItem","Join","children","direction","className","rest","classes","childrenWithJoinItem","React","child","existingClassName","newClassName"],"mappings":";;AAGA,MAAMA,IAAQ,QACRC,IAAgB,iBAChBC,IAAY;AASX,SAASC,EAAK,EAAE,UAAAC,GAAU,WAAAC,IAAY,cAAc,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAC/F,QAAMC,IAAU,CAACR,GAAOK,MAAc,cAAcJ,GAAeK,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAGhGG,IAAuBC,EAAM,SAAS,IAAIN,GAAU,CAACO,MAAU;AACnE,QAAID,EAAM,eAAeC,CAAK,GAAG;AAC/B,YAAMC,IAAqBD,EAAM,MAAc,aAAa,IACtDE,IAAeD,IAAoB,GAAGV,CAAS,IAAIU,CAAiB,KAAKV;AAE/E,aAAOQ,EAAM,aAAaC,GAAkC;AAAA,QAC1D,WAAWE;AAAA,MAAA,CACZ;AAAA,IACH;AACA,WAAOF;AAAA,EACT,CAAC;AAED,2BAAQ,OAAA,EAAI,WAAWH,GAAU,GAAGD,GAAO,UAAAE,GAAqB;AAClE;"}
@@ -5,5 +5,7 @@ export interface KbdProps extends React.HTMLAttributes<HTMLElement> {
5
5
  size?: KbdSize;
6
6
  /** Key content */
7
7
  children?: React.ReactNode;
8
+ /** Test ID for testing */
9
+ 'data-testid'?: string;
8
10
  }
9
11
  export declare const Kbd: React.FC<KbdProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"Kbd.js","sources":["../../src/components/Kbd.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dKbd = 'kbd'\nconst dKbdXs = 'kbd-xs'\nconst dKbdSm = 'kbd-sm'\nconst dKbdMd = 'kbd-md'\nconst dKbdLg = 'kbd-lg'\nconst dKbdXl = 'kbd-xl'\n\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Size of the kbd */\n size?: KbdSize\n /** Key content */\n children?: React.ReactNode\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: dKbdXs,\n sm: dKbdSm,\n md: dKbdMd,\n lg: dKbdLg,\n xl: dKbdXl,\n}\n\nexport const Kbd: React.FC<KbdProps> = ({\n size,\n children,\n className = '',\n ...rest\n}) => {\n const classes = [dKbd, size ? sizeClasses[size] : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <kbd className={classes} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"names":["dKbd","dKbdXs","dKbdSm","dKbdMd","dKbdLg","dKbdXl","sizeClasses","Kbd","size","children","className","rest","classes"],"mappings":";AAGA,MAAMA,IAAO,OACPC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UAWTC,IAAuC;AAAA,EAC3C,IAAIL;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AACN,GAEaE,IAA0B,CAAC;AAAA,EACtC,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU,CAACZ,GAAMQ,IAAOF,EAAYE,CAAI,IAAI,IAAIE,CAAS,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAC1B,UAAAF,GACH;AAEJ;"}
1
+ {"version":3,"file":"Kbd.js","sources":["../../src/components/Kbd.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dKbd = 'kbd'\nconst dKbdXs = 'kbd-xs'\nconst dKbdSm = 'kbd-sm'\nconst dKbdMd = 'kbd-md'\nconst dKbdLg = 'kbd-lg'\nconst dKbdXl = 'kbd-xl'\n\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Size of the kbd */\n size?: KbdSize\n /** Key content */\n children?: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: dKbdXs,\n sm: dKbdSm,\n md: dKbdMd,\n lg: dKbdLg,\n xl: dKbdXl,\n}\n\nexport const Kbd: React.FC<KbdProps> = ({\n size,\n children,\n className = '',\n ...rest\n}) => {\n const classes = [dKbd, size ? sizeClasses[size] : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <kbd className={classes} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"names":["dKbd","dKbdXs","dKbdSm","dKbdMd","dKbdLg","dKbdXl","sizeClasses","Kbd","size","children","className","rest","classes"],"mappings":";AAGA,MAAMA,IAAO,OACPC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UAaTC,IAAuC;AAAA,EAC3C,IAAIL;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AACN,GAEaE,IAA0B,CAAC;AAAA,EACtC,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU,CAACZ,GAAMQ,IAAOF,EAAYE,CAAI,IAAI,IAAIE,CAAS,EAC5D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAC1B,UAAAF,GACH;AAEJ;"}
@@ -5,5 +5,8 @@ export interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  spinning?: boolean;
6
6
  children?: React.ReactNode;
7
7
  tip?: string;
8
+ /** Accessible label for the loading indicator (defaults to tip or "Loading") */
9
+ label?: string;
10
+ 'data-testid'?: string;
8
11
  }
9
12
  export declare const Loading: React.FC<LoadingProps>;
@@ -1,40 +1,63 @@
1
- import { jsxs as e, jsx as n } from "react/jsx-runtime";
2
- import { useConfig as f } from "../providers/ConfigProvider.js";
3
- const L = "loading", p = "loading-xs", x = "loading-sm", b = "loading-md", u = "loading-lg", N = "loading-xl", v = "loading-spinner", y = "loading-dots", C = "loading-ring", h = "loading-ball", j = "loading-bars", z = "loading-infinity", k = ({
4
- size: l,
5
- type: t = "spinner",
6
- className: c = "",
7
- spinning: o = !0,
8
- children: a,
9
- tip: s,
10
- ...i
1
+ import { jsxs as t, jsx as s } from "react/jsx-runtime";
2
+ import { useConfig as b } from "../providers/ConfigProvider.js";
3
+ const v = "loading", y = "loading-xs", N = "loading-sm", h = "loading-md", C = "loading-lg", j = "loading-xl", z = "loading-spinner", S = "loading-dots", B = "loading-ring", X = "loading-ball", $ = "loading-bars", k = "loading-infinity", T = ({
4
+ size: c,
5
+ type: g = "spinner",
6
+ className: m = "",
7
+ spinning: e = !0,
8
+ children: d,
9
+ tip: a,
10
+ label: f,
11
+ "data-testid": i,
12
+ ...o
11
13
  }) => {
12
- const { componentSize: r } = f(), g = l ?? r ?? "md", m = {
13
- xs: p,
14
- sm: x,
15
- md: b,
16
- lg: u,
17
- xl: N
18
- }, d = [L, {
19
- spinner: v,
20
- dots: y,
21
- ring: C,
22
- ball: h,
23
- bars: j,
24
- infinity: z
25
- }[t], m[g], c].filter(Boolean).join(" ");
26
- return a ? /* @__PURE__ */ e("div", { className: "relative", ...i, children: [
27
- o && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10", children: [
28
- /* @__PURE__ */ n("span", { className: d }),
29
- s && /* @__PURE__ */ n("p", { className: "mt-2 text-sm", children: s })
30
- ] }),
31
- /* @__PURE__ */ n("div", { className: o ? "pointer-events-none" : "", children: a })
32
- ] }) : o ? /* @__PURE__ */ e("div", { className: "flex flex-col items-center gap-2", ...i, children: [
33
- /* @__PURE__ */ n("span", { className: d }),
34
- s && /* @__PURE__ */ n("p", { className: "text-sm", children: s })
35
- ] }) : null;
14
+ const { componentSize: p } = b(), L = c ?? p ?? "md", l = f || a || "Loading", u = {
15
+ xs: y,
16
+ sm: N,
17
+ md: h,
18
+ lg: C,
19
+ xl: j
20
+ }, r = [v, {
21
+ spinner: z,
22
+ dots: S,
23
+ ring: B,
24
+ ball: X,
25
+ bars: $,
26
+ infinity: k
27
+ }[g], u[L], m].filter(Boolean).join(" "), n = (x) => i ? `${i}-${x}` : void 0;
28
+ return d ? /* @__PURE__ */ t("div", { className: "relative", "aria-busy": e, "data-testid": i, ...o, children: [
29
+ e && /* @__PURE__ */ t(
30
+ "div",
31
+ {
32
+ className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10",
33
+ role: "status",
34
+ "aria-live": "polite",
35
+ "data-testid": n("overlay"),
36
+ children: [
37
+ /* @__PURE__ */ s("span", { className: r, "aria-hidden": "true", "data-testid": n("spinner") }),
38
+ a && /* @__PURE__ */ s("p", { className: "mt-2 text-sm", "data-testid": n("tip"), children: a }),
39
+ !a && /* @__PURE__ */ s("span", { className: "sr-only", children: l })
40
+ ]
41
+ }
42
+ ),
43
+ /* @__PURE__ */ s("div", { className: e ? "pointer-events-none" : "", "aria-hidden": e, "data-testid": n("content"), children: d })
44
+ ] }) : e ? /* @__PURE__ */ t(
45
+ "div",
46
+ {
47
+ className: "flex flex-col items-center gap-2",
48
+ role: "status",
49
+ "aria-live": "polite",
50
+ "data-testid": i,
51
+ ...o,
52
+ children: [
53
+ /* @__PURE__ */ s("span", { className: r, "aria-hidden": "true", "data-testid": n("spinner") }),
54
+ a && /* @__PURE__ */ s("p", { className: "text-sm", "data-testid": n("tip"), children: a }),
55
+ !a && /* @__PURE__ */ s("span", { className: "sr-only", children: l })
56
+ ]
57
+ }
58
+ ) : null;
36
59
  };
37
60
  export {
38
- k as Loading
61
+ T as Loading
39
62
  };
40
63
  //# sourceMappingURL=Loading.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Loading.js","sources":["../../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dLoading = 'loading'\nconst dLoadingXs = 'loading-xs'\nconst dLoadingSm = 'loading-sm'\nconst dLoadingMd = 'loading-md'\nconst dLoadingLg = 'loading-lg'\nconst dLoadingXl = 'loading-xl'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingDots = 'loading-dots'\nconst dLoadingRing = 'loading-ring'\nconst dLoadingBall = 'loading-ball'\nconst dLoadingBars = 'loading-bars'\nconst dLoadingInfinity = 'loading-infinity'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size,\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n ...rest\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dLoadingXs,\n sm: dLoadingSm,\n md: dLoadingMd,\n lg: dLoadingLg,\n xl: dLoadingXl,\n }\n\n const typeClasses = {\n spinner: dLoadingSpinner,\n dots: dLoadingDots,\n ring: dLoadingRing,\n ball: dLoadingBall,\n bars: dLoadingBars,\n infinity: dLoadingInfinity,\n }\n\n const spinnerClasses = [dLoading, typeClasses[type], sizeClasses[effectiveSize], className]\n .filter(Boolean)\n .join(' ')\n\n if (children) {\n return (\n <div className=\"relative\" {...rest}>\n {spinning && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\">\n <span className={spinnerClasses}></span>\n {tip && <p className=\"mt-2 text-sm\">{tip}</p>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''}>{children}</div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div className=\"flex flex-col items-center gap-2\" {...rest}>\n <span className={spinnerClasses}></span>\n {tip && <p className=\"text-sm\">{tip}</p>}\n </div>\n )\n}\n"],"names":["dLoading","dLoadingXs","dLoadingSm","dLoadingMd","dLoadingLg","dLoadingXl","dLoadingSpinner","dLoadingDots","dLoadingRing","dLoadingBall","dLoadingBars","dLoadingInfinity","Loading","size","type","className","spinning","children","tip","rest","componentSize","useConfig","effectiveSize","sizeClasses","spinnerClasses","jsxs","jsx"],"mappings":";;AAIA,MAAMA,IAAW,WACXC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAkB,mBAClBC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAmB,oBAUZC,IAAkC,CAAC;AAAA,EAC9C,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,IAClB,IAAItB;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAYAmB,IAAiB,CAACxB,GATJ;AAAA,IAClB,SAASM;AAAA,IACT,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,UAAUC;AAAA,EAAA,EAGkCG,CAAI,GAAGS,EAAYD,CAAa,GAAGP,CAAS,EACvF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAIE,IAEA,gBAAAQ,EAAC,OAAA,EAAI,WAAU,YAAY,GAAGN,GAC3B,UAAA;AAAA,IAAAH,KACC,gBAAAS,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,MAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,gBAAgB,UAAAR,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,sBAED,OAAA,EAAI,WAAWF,IAAW,wBAAwB,IAAK,UAAAC,EAAA,CAAS;AAAA,EAAA,GACnE,IAICD,IAKH,gBAAAS,EAAC,OAAA,EAAI,WAAU,oCAAoC,GAAGN,GACpD,UAAA;AAAA,IAAA,gBAAAO,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,IAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,WAAW,UAAAR,EAAA,CAAI;AAAA,EAAA,GACtC,IAPO;AASX;"}
1
+ {"version":3,"file":"Loading.js","sources":["../../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dLoading = 'loading'\nconst dLoadingXs = 'loading-xs'\nconst dLoadingSm = 'loading-sm'\nconst dLoadingMd = 'loading-md'\nconst dLoadingLg = 'loading-lg'\nconst dLoadingXl = 'loading-xl'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingDots = 'loading-dots'\nconst dLoadingRing = 'loading-ring'\nconst dLoadingBall = 'loading-ball'\nconst dLoadingBars = 'loading-bars'\nconst dLoadingInfinity = 'loading-infinity'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n /** Accessible label for the loading indicator (defaults to tip or \"Loading\") */\n label?: string\n 'data-testid'?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size,\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n label,\n 'data-testid': testId,\n ...rest\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const accessibleLabel = label || tip || 'Loading'\n\n const sizeClasses = {\n xs: dLoadingXs,\n sm: dLoadingSm,\n md: dLoadingMd,\n lg: dLoadingLg,\n xl: dLoadingXl,\n }\n\n const typeClasses = {\n spinner: dLoadingSpinner,\n dots: dLoadingDots,\n ring: dLoadingRing,\n ball: dLoadingBall,\n bars: dLoadingBars,\n infinity: dLoadingInfinity,\n }\n\n const spinnerClasses = [dLoading, typeClasses[type], sizeClasses[effectiveSize], className]\n .filter(Boolean)\n .join(' ')\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n if (children) {\n return (\n <div className=\"relative\" aria-busy={spinning} data-testid={testId} {...rest}>\n {spinning && (\n <div\n className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\"\n role=\"status\"\n aria-live=\"polite\"\n data-testid={getTestId('overlay')}\n >\n <span className={spinnerClasses} aria-hidden=\"true\" data-testid={getTestId('spinner')}></span>\n {tip && <p className=\"mt-2 text-sm\" data-testid={getTestId('tip')}>{tip}</p>}\n {!tip && <span className=\"sr-only\">{accessibleLabel}</span>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''} aria-hidden={spinning} data-testid={getTestId('content')}>\n {children}\n </div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div\n className=\"flex flex-col items-center gap-2\"\n role=\"status\"\n aria-live=\"polite\"\n data-testid={testId}\n {...rest}\n >\n <span className={spinnerClasses} aria-hidden=\"true\" data-testid={getTestId('spinner')}></span>\n {tip && <p className=\"text-sm\" data-testid={getTestId('tip')}>{tip}</p>}\n {!tip && <span className=\"sr-only\">{accessibleLabel}</span>}\n </div>\n )\n}\n"],"names":["dLoading","dLoadingXs","dLoadingSm","dLoadingMd","dLoadingLg","dLoadingXl","dLoadingSpinner","dLoadingDots","dLoadingRing","dLoadingBall","dLoadingBars","dLoadingInfinity","Loading","size","type","className","spinning","children","tip","label","testId","rest","componentSize","useConfig","effectiveSize","accessibleLabel","sizeClasses","spinnerClasses","getTestId","suffix","jsxs","jsx"],"mappings":";;AAIA,MAAMA,IAAW,WACXC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAkB,mBAClBC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAmB,oBAaZC,IAAkC,CAAC;AAAA,EAC9C,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,OAAAC;AAAA,EACA,eAAeC;AAAA,EACf,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBX,KAAQS,KAAiB,MACzCG,IAAkBN,KAASD,KAAO,WAElCQ,IAAc;AAAA,IAClB,IAAIzB;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAYAsB,IAAiB,CAAC3B,GATJ;AAAA,IAClB,SAASM;AAAA,IACT,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,UAAUC;AAAA,EAAA,EAGkCG,CAAI,GAAGY,EAAYF,CAAa,GAAGT,CAAS,EACvF,OAAO,OAAO,EACd,KAAK,GAAG,GACLa,IAAY,CAACC,MAAoBT,IAAS,GAAGA,CAAM,IAAIS,CAAM,KAAK;AAExE,SAAIZ,IAEA,gBAAAa,EAAC,SAAI,WAAU,YAAW,aAAWd,GAAU,eAAaI,GAAS,GAAGC,GACrE,UAAA;AAAA,IAAAL,KACC,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,aAAU;AAAA,QACV,eAAaF,EAAU,SAAS;AAAA,QAEhC,UAAA;AAAA,UAAA,gBAAAG,EAAC,QAAA,EAAK,WAAWJ,GAAgB,eAAY,QAAO,eAAaC,EAAU,SAAS,GAAG;AAAA,UACtFV,uBAAQ,KAAA,EAAE,WAAU,gBAAe,eAAaU,EAAU,KAAK,GAAI,UAAAV,EAAA,CAAI;AAAA,UACvE,CAACA,KAAO,gBAAAa,EAAC,QAAA,EAAK,WAAU,WAAW,UAAAN,EAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGxD,gBAAAM,EAAC,OAAA,EAAI,WAAWf,IAAW,wBAAwB,IAAI,eAAaA,GAAU,eAAaY,EAAU,SAAS,GAC3G,UAAAX,EAAA,CACH;AAAA,EAAA,GACF,IAICD,IAKH,gBAAAc;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,aAAU;AAAA,MACV,eAAaV;AAAA,MACZ,GAAGC;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAU,EAAC,QAAA,EAAK,WAAWJ,GAAgB,eAAY,QAAO,eAAaC,EAAU,SAAS,GAAG;AAAA,QACtFV,uBAAQ,KAAA,EAAE,WAAU,WAAU,eAAaU,EAAU,KAAK,GAAI,UAAAV,EAAA,CAAI;AAAA,QAClE,CAACA,KAAO,gBAAAa,EAAC,QAAA,EAAK,WAAU,WAAW,UAAAN,EAAA,CAAgB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAb/C;AAgBX;"}
@@ -8,7 +8,7 @@ export interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {
8
8
  half?: MaskHalf;
9
9
  /** Content to mask (typically an image) */
10
10
  children: React.ReactNode;
11
- /** Additional CSS classes */
12
- className?: string;
11
+ /** Test ID for testing */
12
+ 'data-testid'?: string;
13
13
  }
14
14
  export declare const Mask: React.ForwardRefExoticComponent<MaskProps & React.RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Mask.js","sources":["../../src/components/Mask.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\n// DaisyUI classes\nconst dMask = 'mask'\nconst dMaskSquircle = 'mask-squircle'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHexagon = 'mask-hexagon'\nconst dMaskHexagon2 = 'mask-hexagon-2'\nconst dMaskDecagon = 'mask-decagon'\nconst dMaskPentagon = 'mask-pentagon'\nconst dMaskDiamond = 'mask-diamond'\nconst dMaskSquare = 'mask-square'\nconst dMaskCircle = 'mask-circle'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskTriangle = 'mask-triangle'\nconst dMaskTriangle2 = 'mask-triangle-2'\nconst dMaskTriangle3 = 'mask-triangle-3'\nconst dMaskTriangle4 = 'mask-triangle-4'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport type MaskShape =\n | 'squircle'\n | 'heart'\n | 'hexagon'\n | 'hexagon-2'\n | 'decagon'\n | 'pentagon'\n | 'diamond'\n | 'square'\n | 'circle'\n | 'star'\n | 'star-2'\n | 'triangle'\n | 'triangle-2'\n | 'triangle-3'\n | 'triangle-4'\n\nexport type MaskHalf = 'half-1' | 'half-2'\n\nexport interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape of the mask */\n shape: MaskShape\n /** Show only half of the mask */\n half?: MaskHalf\n /** Content to mask (typically an image) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst shapeClasses: Record<MaskShape, string> = {\n squircle: dMaskSquircle,\n heart: dMaskHeart,\n hexagon: dMaskHexagon,\n 'hexagon-2': dMaskHexagon2,\n decagon: dMaskDecagon,\n pentagon: dMaskPentagon,\n diamond: dMaskDiamond,\n square: dMaskSquare,\n circle: dMaskCircle,\n star: dMaskStar,\n 'star-2': dMaskStar2,\n triangle: dMaskTriangle,\n 'triangle-2': dMaskTriangle2,\n 'triangle-3': dMaskTriangle3,\n 'triangle-4': dMaskTriangle4,\n}\n\nconst halfClasses: Record<MaskHalf, string> = {\n 'half-1': dMaskHalf1,\n 'half-2': dMaskHalf2,\n}\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n ({ shape, half, children, className = '', ...props }, ref) => {\n const classes = [\n dMask,\n shapeClasses[shape],\n half ? halfClasses[half] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nMask.displayName = 'Mask'\n"],"names":["dMask","dMaskSquircle","dMaskHeart","dMaskHexagon","dMaskHexagon2","dMaskDecagon","dMaskPentagon","dMaskDiamond","dMaskSquare","dMaskCircle","dMaskStar","dMaskStar2","dMaskTriangle","dMaskTriangle2","dMaskTriangle3","dMaskTriangle4","dMaskHalf1","dMaskHalf2","shapeClasses","halfClasses","Mask","forwardRef","shape","half","children","className","props","ref","classes"],"mappings":";;AAGA,MAAMA,IAAQ,QACRC,IAAgB,iBAChBC,IAAa,cACbC,IAAe,gBACfC,IAAgB,kBAChBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAe,gBACfC,IAAc,eACdC,IAAc,eACdC,IAAY,aACZC,IAAa,eACbC,IAAgB,iBAChBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAa,eACbC,IAAa,eAgCbC,IAA0C;AAAA,EAC9C,UAAUjB;AAAA,EACV,OAAOC;AAAA,EACP,SAASC;AAAA,EACT,aAAaC;AAAA,EACb,SAASC;AAAA,EACT,UAAUC;AAAA,EACV,SAASC;AAAA,EACT,QAAQC;AAAA,EACR,QAAQC;AAAA,EACR,MAAMC;AAAA,EACN,UAAUC;AAAA,EACV,UAAUC;AAAA,EACV,cAAcC;AAAA,EACd,cAAcC;AAAA,EACd,cAAcC;AAChB,GAEMI,IAAwC;AAAA,EAC5C,UAAUH;AAAA,EACV,UAAUC;AACZ,GAEaG,IAAOC;AAAA,EAClB,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAC5D,UAAMC,IAAU;AAAA,MACd5B;AAAA,MACAkB,EAAaI,CAAK;AAAA,MAClBC,IAAOJ,EAAYI,CAAI,IAAI;AAAA,MAC3BE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,OAAA,EAAI,KAAAE,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAJ,EAAK,cAAc;"}
1
+ {"version":3,"file":"Mask.js","sources":["../../src/components/Mask.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\n// DaisyUI classes\nconst dMask = 'mask'\nconst dMaskSquircle = 'mask-squircle'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHexagon = 'mask-hexagon'\nconst dMaskHexagon2 = 'mask-hexagon-2'\nconst dMaskDecagon = 'mask-decagon'\nconst dMaskPentagon = 'mask-pentagon'\nconst dMaskDiamond = 'mask-diamond'\nconst dMaskSquare = 'mask-square'\nconst dMaskCircle = 'mask-circle'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskTriangle = 'mask-triangle'\nconst dMaskTriangle2 = 'mask-triangle-2'\nconst dMaskTriangle3 = 'mask-triangle-3'\nconst dMaskTriangle4 = 'mask-triangle-4'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport type MaskShape =\n | 'squircle'\n | 'heart'\n | 'hexagon'\n | 'hexagon-2'\n | 'decagon'\n | 'pentagon'\n | 'diamond'\n | 'square'\n | 'circle'\n | 'star'\n | 'star-2'\n | 'triangle'\n | 'triangle-2'\n | 'triangle-3'\n | 'triangle-4'\n\nexport type MaskHalf = 'half-1' | 'half-2'\n\nexport interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape of the mask */\n shape: MaskShape\n /** Show only half of the mask */\n half?: MaskHalf\n /** Content to mask (typically an image) */\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nconst shapeClasses: Record<MaskShape, string> = {\n squircle: dMaskSquircle,\n heart: dMaskHeart,\n hexagon: dMaskHexagon,\n 'hexagon-2': dMaskHexagon2,\n decagon: dMaskDecagon,\n pentagon: dMaskPentagon,\n diamond: dMaskDiamond,\n square: dMaskSquare,\n circle: dMaskCircle,\n star: dMaskStar,\n 'star-2': dMaskStar2,\n triangle: dMaskTriangle,\n 'triangle-2': dMaskTriangle2,\n 'triangle-3': dMaskTriangle3,\n 'triangle-4': dMaskTriangle4,\n}\n\nconst halfClasses: Record<MaskHalf, string> = {\n 'half-1': dMaskHalf1,\n 'half-2': dMaskHalf2,\n}\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n ({ shape, half, children, className = '', ...props }, ref) => {\n const classes = [\n dMask,\n shapeClasses[shape],\n half ? halfClasses[half] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nMask.displayName = 'Mask'\n"],"names":["dMask","dMaskSquircle","dMaskHeart","dMaskHexagon","dMaskHexagon2","dMaskDecagon","dMaskPentagon","dMaskDiamond","dMaskSquare","dMaskCircle","dMaskStar","dMaskStar2","dMaskTriangle","dMaskTriangle2","dMaskTriangle3","dMaskTriangle4","dMaskHalf1","dMaskHalf2","shapeClasses","halfClasses","Mask","forwardRef","shape","half","children","className","props","ref","classes"],"mappings":";;AAGA,MAAMA,IAAQ,QACRC,IAAgB,iBAChBC,IAAa,cACbC,IAAe,gBACfC,IAAgB,kBAChBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAe,gBACfC,IAAc,eACdC,IAAc,eACdC,IAAY,aACZC,IAAa,eACbC,IAAgB,iBAChBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAa,eACbC,IAAa,eAgCbC,IAA0C;AAAA,EAC9C,UAAUjB;AAAA,EACV,OAAOC;AAAA,EACP,SAASC;AAAA,EACT,aAAaC;AAAA,EACb,SAASC;AAAA,EACT,UAAUC;AAAA,EACV,SAASC;AAAA,EACT,QAAQC;AAAA,EACR,QAAQC;AAAA,EACR,MAAMC;AAAA,EACN,UAAUC;AAAA,EACV,UAAUC;AAAA,EACV,cAAcC;AAAA,EACd,cAAcC;AAAA,EACd,cAAcC;AAChB,GAEMI,IAAwC;AAAA,EAC5C,UAAUH;AAAA,EACV,UAAUC;AACZ,GAEaG,IAAOC;AAAA,EAClB,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAC5D,UAAMC,IAAU;AAAA,MACd5B;AAAA,MACAkB,EAAaI,CAAK;AAAA,MAClBC,IAAOJ,EAAYI,CAAI,IAAI;AAAA,MAC3BE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,OAAA,EAAI,KAAAE,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAJ,EAAK,cAAc;"}
@@ -10,6 +10,7 @@ export interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {
10
10
  '2xl'?: number;
11
11
  };
12
12
  gap?: number;
13
+ 'data-testid'?: string;
13
14
  }
14
15
  export declare const Masonry: React.FC<MasonryProps>;
15
16
  export default Masonry;
@@ -1,84 +1,87 @@
1
- import { jsx as H } from "react/jsx-runtime";
2
- import I, { useRef as R, useState as b, useCallback as K, useLayoutEffect as A } from "react";
3
- const d = {
1
+ import { jsx as R } from "react/jsx-runtime";
2
+ import O, { useRef as b, useState as A, useCallback as _, useLayoutEffect as L } from "react";
3
+ const f = {
4
4
  sm: 640,
5
5
  md: 768,
6
6
  lg: 1024,
7
7
  xl: 1280,
8
8
  "2xl": 1536
9
9
  };
10
- function L(t, e) {
11
- return typeof t == "number" ? t : t ? t["2xl"] !== void 0 && e >= d["2xl"] ? t["2xl"] : t.xl !== void 0 && e >= d.xl ? t.xl : t.lg !== void 0 && e >= d.lg ? t.lg : t.md !== void 0 && e >= d.md ? t.md : t.sm !== void 0 && e >= d.sm ? t.sm : t.xs !== void 0 ? t.xs : 3 : 3;
10
+ function T(t, i) {
11
+ return typeof t == "number" ? t : t ? t["2xl"] !== void 0 && i >= f["2xl"] ? t["2xl"] : t.xl !== void 0 && i >= f.xl ? t.xl : t.lg !== void 0 && i >= f.lg ? t.lg : t.md !== void 0 && i >= f.md ? t.md : t.sm !== void 0 && i >= f.sm ? t.sm : t.xs !== void 0 ? t.xs : 3 : 3;
12
12
  }
13
- const O = ({
13
+ const q = ({
14
14
  children: t,
15
- columns: e = 3,
16
- gap: r = 16,
15
+ columns: i = 3,
16
+ gap: o = 16,
17
17
  className: z = "",
18
18
  style: M,
19
+ "data-testid": u,
19
20
  ...P
20
21
  }) => {
21
- const u = R(null), [l, T] = b([]), [y, N] = b(0), w = R([]), c = I.Children.toArray(t), s = K(() => {
22
- const i = u.current;
23
- if (!i || c.length === 0) return;
24
- const n = i.offsetWidth, m = typeof window < "u" ? window.innerWidth : n, a = L(e, m), j = (n - r * (a - 1)) / a, o = new Array(a).fill(0), W = [];
25
- c.forEach((_, x) => {
26
- const C = w.current[x];
27
- if (!C) return;
28
- let h = 0, E = o[0];
29
- for (let f = 1; f < a; f++)
30
- o[f] < E && (E = o[f], h = f);
31
- const k = h * (j + r), B = o[h];
32
- W[x] = { left: k, top: B };
33
- const F = C.offsetHeight;
34
- o[h] += F + r;
35
- }), T(W), N(Math.max(...o) - r);
36
- }, [t, e, r, c.length]);
37
- A(() => {
22
+ const v = b(null), [l, $] = A([]), [w, N] = A(0), g = b([]), a = O.Children.toArray(t), s = _(() => {
23
+ const e = v.current;
24
+ if (!e || a.length === 0) return;
25
+ const n = e.offsetWidth, y = typeof window < "u" ? window.innerWidth : n, c = T(i, y), k = (n - o * (c - 1)) / c, r = new Array(c).fill(0), x = [];
26
+ a.forEach((D, C) => {
27
+ const E = g.current[C];
28
+ if (!E) return;
29
+ let h = 0, H = r[0];
30
+ for (let d = 1; d < c; d++)
31
+ r[d] < H && (H = r[d], h = d);
32
+ const B = h * (k + o), F = r[h];
33
+ x[C] = { left: B, top: F };
34
+ const K = E.offsetHeight;
35
+ r[h] += K + o;
36
+ }), $(x), N(Math.max(...r) - o);
37
+ }, [t, i, o, a.length]);
38
+ L(() => {
38
39
  s();
39
- const i = () => {
40
+ const e = () => {
40
41
  s();
41
42
  };
42
- return window.addEventListener("resize", i), () => window.removeEventListener("resize", i);
43
- }, [s]), A(() => {
44
- const i = setTimeout(s, 0);
45
- return () => clearTimeout(i);
43
+ return window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
44
+ }, [s]), L(() => {
45
+ const e = setTimeout(s, 0);
46
+ return () => clearTimeout(e);
46
47
  }, [t, s]);
47
- const v = u.current?.offsetWidth ?? 0, S = typeof window < "u" ? window.innerWidth : v, g = L(e, S), p = v > 0 ? (v - r * (g - 1)) / g : 0;
48
- return /* @__PURE__ */ H(
48
+ const m = v.current?.offsetWidth ?? 0, S = typeof window < "u" ? window.innerWidth : m, p = T(i, S), W = m > 0 ? (m - o * (p - 1)) / p : 0, j = (e) => u ? `${u}-${e}` : void 0;
49
+ return /* @__PURE__ */ R(
49
50
  "div",
50
51
  {
51
- ref: u,
52
+ ref: v,
52
53
  className: z,
53
54
  style: {
54
55
  position: "relative",
55
- height: y > 0 ? y : void 0,
56
+ height: w > 0 ? w : void 0,
56
57
  ...M
57
58
  },
59
+ "data-testid": u,
58
60
  ...P,
59
- children: c.map((i, n) => /* @__PURE__ */ H(
61
+ children: a.map((e, n) => /* @__PURE__ */ R(
60
62
  "div",
61
63
  {
62
- ref: (m) => {
63
- w.current[n] = m;
64
+ ref: (y) => {
65
+ g.current[n] = y;
64
66
  },
65
67
  style: {
66
68
  position: l.length > 0 ? "absolute" : "relative",
67
69
  left: l[n]?.left ?? 0,
68
70
  top: l[n]?.top ?? 0,
69
- width: p > 0 ? p : "100%",
71
+ width: W > 0 ? W : "100%",
70
72
  visibility: l.length > 0 ? "visible" : "hidden"
71
73
  },
72
- children: i
74
+ "data-testid": j(`item-${n}`),
75
+ children: e
73
76
  },
74
77
  n
75
78
  ))
76
79
  }
77
80
  );
78
81
  };
79
- O.displayName = "Masonry";
82
+ q.displayName = "Masonry";
80
83
  export {
81
- O as Masonry,
82
- O as default
84
+ q as Masonry,
85
+ q as default
83
86
  };
84
87
  //# sourceMappingURL=Masonry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Masonry.js","sources":["../../src/components/Masonry.tsx"],"sourcesContent":["import React, { useRef, useState, useLayoutEffect, useCallback } from 'react'\n\nexport interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n columns?:\n | number\n | {\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n '2xl'?: number\n }\n gap?: number\n}\n\n// Tailwind breakpoints in pixels\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n}\n\nfunction getColumnsForWidth(\n columns: MasonryProps['columns'],\n width: number\n): number {\n if (typeof columns === 'number') {\n return columns\n }\n\n if (!columns) return 3\n\n // Find the appropriate column count for current width\n // Start from largest breakpoint and work down\n if (columns['2xl'] !== undefined && width >= BREAKPOINTS['2xl']) {\n return columns['2xl']\n }\n if (columns.xl !== undefined && width >= BREAKPOINTS.xl) {\n return columns.xl\n }\n if (columns.lg !== undefined && width >= BREAKPOINTS.lg) {\n return columns.lg\n }\n if (columns.md !== undefined && width >= BREAKPOINTS.md) {\n return columns.md\n }\n if (columns.sm !== undefined && width >= BREAKPOINTS.sm) {\n return columns.sm\n }\n if (columns.xs !== undefined) {\n return columns.xs\n }\n\n // Default fallback\n return 3\n}\n\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 3,\n gap = 16,\n className = '',\n style,\n ...rest\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [positions, setPositions] = useState<\n Array<{ left: number; top: number }>\n >([])\n const [containerHeight, setContainerHeight] = useState(0)\n const itemRefs = useRef<(HTMLDivElement | null)[]>([])\n\n const childArray = React.Children.toArray(children)\n\n const calculateLayout = useCallback(() => {\n const container = containerRef.current\n if (!container || childArray.length === 0) return\n\n const containerWidth = container.offsetWidth\n // Use viewport width for responsive breakpoints (matches Tailwind behavior)\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : containerWidth\n const numColumns = getColumnsForWidth(columns, viewportWidth)\n const columnWidth = (containerWidth - gap * (numColumns - 1)) / numColumns\n\n // Track height of each column\n const columnHeights = new Array(numColumns).fill(0)\n const newPositions: Array<{ left: number; top: number }> = []\n\n // Place each item in the shortest column\n childArray.forEach((_, index) => {\n const itemEl = itemRefs.current[index]\n if (!itemEl) return\n\n // Find shortest column\n let shortestColumn = 0\n let minHeight = columnHeights[0]\n for (let i = 1; i < numColumns; i++) {\n if (columnHeights[i] < minHeight) {\n minHeight = columnHeights[i]\n shortestColumn = i\n }\n }\n\n // Calculate position\n const left = shortestColumn * (columnWidth + gap)\n const top = columnHeights[shortestColumn]\n\n newPositions[index] = { left, top }\n\n // Update column height\n const itemHeight = itemEl.offsetHeight\n columnHeights[shortestColumn] += itemHeight + gap\n })\n\n setPositions(newPositions)\n setContainerHeight(Math.max(...columnHeights) - gap)\n }, [children, columns, gap, childArray.length])\n\n // Calculate layout after render and on resize\n useLayoutEffect(() => {\n calculateLayout()\n\n const handleResize = () => {\n calculateLayout()\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [calculateLayout])\n\n // Recalculate when children change\n useLayoutEffect(() => {\n // Small delay to ensure refs are populated\n const timer = setTimeout(calculateLayout, 0)\n return () => clearTimeout(timer)\n }, [children, calculateLayout])\n\n const containerWidth = containerRef.current?.offsetWidth ?? 0\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : containerWidth\n const numColumns = getColumnsForWidth(columns, viewportWidth)\n const columnWidth =\n containerWidth > 0\n ? (containerWidth - gap * (numColumns - 1)) / numColumns\n : 0\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'relative',\n height: containerHeight > 0 ? containerHeight : undefined,\n ...style,\n }}\n {...rest}\n >\n {childArray.map((child, index) => (\n <div\n key={index}\n ref={(el) => {\n itemRefs.current[index] = el\n }}\n style={{\n position: positions.length > 0 ? 'absolute' : 'relative',\n left: positions[index]?.left ?? 0,\n top: positions[index]?.top ?? 0,\n width: columnWidth > 0 ? columnWidth : '100%',\n visibility: positions.length > 0 ? 'visible' : 'hidden',\n }}\n >\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nMasonry.displayName = 'Masonry'\n\nexport default Masonry\n"],"names":["BREAKPOINTS","getColumnsForWidth","columns","width","Masonry","children","gap","className","style","rest","containerRef","useRef","positions","setPositions","useState","containerHeight","setContainerHeight","itemRefs","childArray","React","calculateLayout","useCallback","container","containerWidth","viewportWidth","numColumns","columnWidth","columnHeights","newPositions","index","itemEl","shortestColumn","minHeight","i","left","top","itemHeight","useLayoutEffect","handleResize","timer","jsx","child","el"],"mappings":"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"}
1
+ {"version":3,"file":"Masonry.js","sources":["../../src/components/Masonry.tsx"],"sourcesContent":["import React, { useRef, useState, useLayoutEffect, useCallback } from 'react'\n\nexport interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n columns?:\n | number\n | {\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n '2xl'?: number\n }\n gap?: number\n 'data-testid'?: string\n}\n\n// Tailwind breakpoints in pixels\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n}\n\nfunction getColumnsForWidth(\n columns: MasonryProps['columns'],\n width: number\n): number {\n if (typeof columns === 'number') {\n return columns\n }\n\n if (!columns) return 3\n\n // Find the appropriate column count for current width\n // Start from largest breakpoint and work down\n if (columns['2xl'] !== undefined && width >= BREAKPOINTS['2xl']) {\n return columns['2xl']\n }\n if (columns.xl !== undefined && width >= BREAKPOINTS.xl) {\n return columns.xl\n }\n if (columns.lg !== undefined && width >= BREAKPOINTS.lg) {\n return columns.lg\n }\n if (columns.md !== undefined && width >= BREAKPOINTS.md) {\n return columns.md\n }\n if (columns.sm !== undefined && width >= BREAKPOINTS.sm) {\n return columns.sm\n }\n if (columns.xs !== undefined) {\n return columns.xs\n }\n\n // Default fallback\n return 3\n}\n\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 3,\n gap = 16,\n className = '',\n style,\n 'data-testid': testId,\n ...rest\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [positions, setPositions] = useState<\n Array<{ left: number; top: number }>\n >([])\n const [containerHeight, setContainerHeight] = useState(0)\n const itemRefs = useRef<(HTMLDivElement | null)[]>([])\n\n const childArray = React.Children.toArray(children)\n\n const calculateLayout = useCallback(() => {\n const container = containerRef.current\n if (!container || childArray.length === 0) return\n\n const containerWidth = container.offsetWidth\n // Use viewport width for responsive breakpoints (matches Tailwind behavior)\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : containerWidth\n const numColumns = getColumnsForWidth(columns, viewportWidth)\n const columnWidth = (containerWidth - gap * (numColumns - 1)) / numColumns\n\n // Track height of each column\n const columnHeights = new Array(numColumns).fill(0)\n const newPositions: Array<{ left: number; top: number }> = []\n\n // Place each item in the shortest column\n childArray.forEach((_, index) => {\n const itemEl = itemRefs.current[index]\n if (!itemEl) return\n\n // Find shortest column\n let shortestColumn = 0\n let minHeight = columnHeights[0]\n for (let i = 1; i < numColumns; i++) {\n if (columnHeights[i] < minHeight) {\n minHeight = columnHeights[i]\n shortestColumn = i\n }\n }\n\n // Calculate position\n const left = shortestColumn * (columnWidth + gap)\n const top = columnHeights[shortestColumn]\n\n newPositions[index] = { left, top }\n\n // Update column height\n const itemHeight = itemEl.offsetHeight\n columnHeights[shortestColumn] += itemHeight + gap\n })\n\n setPositions(newPositions)\n setContainerHeight(Math.max(...columnHeights) - gap)\n }, [children, columns, gap, childArray.length])\n\n // Calculate layout after render and on resize\n useLayoutEffect(() => {\n calculateLayout()\n\n const handleResize = () => {\n calculateLayout()\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [calculateLayout])\n\n // Recalculate when children change\n useLayoutEffect(() => {\n // Small delay to ensure refs are populated\n const timer = setTimeout(calculateLayout, 0)\n return () => clearTimeout(timer)\n }, [children, calculateLayout])\n\n const containerWidth = containerRef.current?.offsetWidth ?? 0\n const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : containerWidth\n const numColumns = getColumnsForWidth(columns, viewportWidth)\n const columnWidth =\n containerWidth > 0\n ? (containerWidth - gap * (numColumns - 1)) / numColumns\n : 0\n\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'relative',\n height: containerHeight > 0 ? containerHeight : undefined,\n ...style,\n }}\n data-testid={testId}\n {...rest}\n >\n {childArray.map((child, index) => (\n <div\n key={index}\n ref={(el) => {\n itemRefs.current[index] = el\n }}\n style={{\n position: positions.length > 0 ? 'absolute' : 'relative',\n left: positions[index]?.left ?? 0,\n top: positions[index]?.top ?? 0,\n width: columnWidth > 0 ? columnWidth : '100%',\n visibility: positions.length > 0 ? 'visible' : 'hidden',\n }}\n data-testid={getTestId(`item-${index}`)}\n >\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nMasonry.displayName = 'Masonry'\n\nexport default Masonry\n"],"names":["BREAKPOINTS","getColumnsForWidth","columns","width","Masonry","children","gap","className","style","testId","rest","containerRef","useRef","positions","setPositions","useState","containerHeight","setContainerHeight","itemRefs","childArray","React","calculateLayout","useCallback","container","containerWidth","viewportWidth","numColumns","columnWidth","columnHeights","newPositions","_","index","itemEl","shortestColumn","minHeight","i","left","top","itemHeight","useLayoutEffect","handleResize","timer","getTestId","suffix","jsx","child","el"],"mappings":"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"}
@@ -26,5 +26,6 @@ export interface MentionProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
26
26
  notFoundContent?: React.ReactNode;
27
27
  filterOption?: boolean | ((input: string, option: MentionOption) => boolean);
28
28
  dropdownClassName?: string;
29
+ 'data-testid'?: string;
29
30
  }
30
31
  export declare const Mention: React.FC<MentionProps>;