asterui 0.12.60 → 0.12.62

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 (89) 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/Avatar.d.ts +4 -0
  6. package/dist/components/Avatar.js.map +1 -1
  7. package/dist/components/Breadcrumb.js +22 -22
  8. package/dist/components/Breadcrumb.js.map +1 -1
  9. package/dist/components/Browser.d.ts +2 -0
  10. package/dist/components/Browser.js.map +1 -1
  11. package/dist/components/Chat.js +35 -26
  12. package/dist/components/Chat.js.map +1 -1
  13. package/dist/components/Code.d.ts +2 -0
  14. package/dist/components/Code.js.map +1 -1
  15. package/dist/components/Container.d.ts +2 -0
  16. package/dist/components/Container.js.map +1 -1
  17. package/dist/components/ContextMenu.js +100 -84
  18. package/dist/components/ContextMenu.js.map +1 -1
  19. package/dist/components/CopyButton.d.ts +2 -0
  20. package/dist/components/CopyButton.js +9 -8
  21. package/dist/components/CopyButton.js.map +1 -1
  22. package/dist/components/Countdown.d.ts +3 -3
  23. package/dist/components/Countdown.js +49 -47
  24. package/dist/components/Countdown.js.map +1 -1
  25. package/dist/components/Diff.d.ts +3 -3
  26. package/dist/components/Diff.js +14 -10
  27. package/dist/components/Diff.js.map +1 -1
  28. package/dist/components/Divider.d.ts +2 -0
  29. package/dist/components/Divider.js.map +1 -1
  30. package/dist/components/Dock.d.ts +4 -0
  31. package/dist/components/Dock.js +38 -25
  32. package/dist/components/Dock.js.map +1 -1
  33. package/dist/components/Dropdown.js +110 -110
  34. package/dist/components/Dropdown.js.map +1 -1
  35. package/dist/components/Fieldset.d.ts +2 -0
  36. package/dist/components/Fieldset.js.map +1 -1
  37. package/dist/components/FloatButton.d.ts +6 -0
  38. package/dist/components/FloatButton.js +122 -98
  39. package/dist/components/FloatButton.js.map +1 -1
  40. package/dist/components/Footer.d.ts +2 -0
  41. package/dist/components/Footer.js.map +1 -1
  42. package/dist/components/Grid.d.ts +4 -0
  43. package/dist/components/Grid.js.map +1 -1
  44. package/dist/components/Hero.d.ts +2 -0
  45. package/dist/components/Hero.js.map +1 -1
  46. package/dist/components/HoverGallery.d.ts +3 -3
  47. package/dist/components/HoverGallery.js +12 -10
  48. package/dist/components/HoverGallery.js.map +1 -1
  49. package/dist/components/Join.d.ts +2 -0
  50. package/dist/components/Join.js.map +1 -1
  51. package/dist/components/Kbd.d.ts +2 -0
  52. package/dist/components/Kbd.js.map +1 -1
  53. package/dist/components/Loading.d.ts +2 -0
  54. package/dist/components/Loading.js +51 -31
  55. package/dist/components/Loading.js.map +1 -1
  56. package/dist/components/Mask.d.ts +2 -2
  57. package/dist/components/Mask.js.map +1 -1
  58. package/dist/components/Navbar.d.ts +2 -0
  59. package/dist/components/Navbar.js.map +1 -1
  60. package/dist/components/Notification.js +32 -18
  61. package/dist/components/Notification.js.map +1 -1
  62. package/dist/components/Phone.d.ts +3 -2
  63. package/dist/components/Phone.js +10 -8
  64. package/dist/components/Phone.js.map +1 -1
  65. package/dist/components/Popconfirm.js +110 -92
  66. package/dist/components/Popconfirm.js.map +1 -1
  67. package/dist/components/Popover.d.ts +2 -0
  68. package/dist/components/Popover.js.map +1 -1
  69. package/dist/components/Progress.d.ts +2 -0
  70. package/dist/components/Progress.js.map +1 -1
  71. package/dist/components/Radio.d.ts +6 -3
  72. package/dist/components/Radio.js +9 -9
  73. package/dist/components/Radio.js.map +1 -1
  74. package/dist/components/Skeleton.d.ts +2 -0
  75. package/dist/components/Skeleton.js.map +1 -1
  76. package/dist/components/Space.d.ts +2 -0
  77. package/dist/components/Space.js.map +1 -1
  78. package/dist/components/Status.d.ts +3 -3
  79. package/dist/components/Status.js +27 -25
  80. package/dist/components/Status.js.map +1 -1
  81. package/dist/components/Toggle.d.ts +2 -0
  82. package/dist/components/Toggle.js.map +1 -1
  83. package/dist/components/Tooltip.d.ts +2 -0
  84. package/dist/components/Tooltip.js +38 -32
  85. package/dist/components/Tooltip.js.map +1 -1
  86. package/dist/components/Window.d.ts +3 -2
  87. package/dist/components/Window.js +9 -7
  88. package/dist/components/Window.js.map +1 -1
  89. package/package.json +5 -3
@@ -30,12 +30,18 @@ export interface FloatButtonGroupProps {
30
30
  shape?: 'circle' | 'square';
31
31
  /** Main trigger button icon */
32
32
  icon?: React.ReactNode;
33
+ /** Accessible label for trigger button (required for icon-only buttons) */
34
+ triggerLabel?: string;
33
35
  /** Main action button that replaces trigger when open (fab-main-action) */
34
36
  mainAction?: React.ReactNode;
37
+ /** Accessible label for main action button */
38
+ mainActionLabel?: string;
35
39
  /** Click handler for main action button */
36
40
  onMainAction?: () => void;
37
41
  /** Show close button when open (fab-close) */
38
42
  showClose?: boolean;
43
+ /** Accessible label for close button */
44
+ closeLabel?: string;
39
45
  /** Button type/color */
40
46
  type?: 'default' | 'primary';
41
47
  /** Position on screen */
@@ -1,183 +1,207 @@
1
1
  import { jsx as t, jsxs as g, Fragment as q } from "react/jsx-runtime";
2
- import { useContext as j, createContext as z, useState as A, useEffect as R } from "react";
3
- const f = "btn", x = "btn-lg", I = "btn-circle", U = "btn-square", k = "btn-neutral", V = "btn-primary", Y = "tooltip", D = "tooltip-left", H = "tooltip-right", J = "tooltip-top", K = "tooltip-bottom", T = "indicator", $ = "indicator-item", y = "badge", L = "badge-secondary", O = "fab", Q = "fab-flower", X = "fab-main-action", Z = "fab-close", G = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" }) }), _ = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 10l7-7m0 0l7 7m-7-7v18" }) }), tt = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }), C = z({ inGroup: !1 }), ot = {
4
- left: D,
5
- right: H,
6
- top: J,
7
- bottom: K
2
+ import { useContext as j, createContext as z, useState as A, useEffect as O } from "react";
3
+ const f = "btn", x = "btn-lg", k = "btn-circle", R = "btn-square", G = "btn-neutral", U = "btn-primary", V = "tooltip", Y = "tooltip-left", D = "tooltip-right", H = "tooltip-top", J = "tooltip-bottom", y = "indicator", T = "indicator-item", $ = "badge", L = "badge-secondary", K = "fab", Q = "fab-flower", X = "fab-main-action", Z = "fab-close", I = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" }) }), _ = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 10l7-7m0 0l7 7m-7-7v18" }) }), tt = () => /* @__PURE__ */ t("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }), C = z({ inGroup: !1 }), ot = {
4
+ left: Y,
5
+ right: D,
6
+ top: H,
7
+ bottom: J
8
8
  }, S = {
9
- default: k,
10
- primary: V
9
+ default: G,
10
+ primary: U
11
11
  }, M = {
12
- circle: I,
13
- square: U
12
+ circle: k,
13
+ square: R
14
14
  }, F = ({
15
15
  icon: d,
16
16
  description: l,
17
- onClick: o,
18
- type: h = "default",
19
- shape: u = "circle",
17
+ onClick: n,
18
+ type: b = "default",
19
+ shape: m = "circle",
20
20
  className: w = "",
21
- tooltip: a,
22
- tooltipPlacement: v = "left",
23
- badge: r,
21
+ tooltip: r,
22
+ tooltipPlacement: B = "left",
23
+ badge: u,
24
24
  href: e,
25
25
  target: i,
26
- children: N,
27
- style: m,
26
+ children: v,
27
+ style: c,
28
28
  ...s
29
29
  }) => {
30
- const p = j(C), B = p.inGroup && p.shape || u, n = [
30
+ const h = j(C), N = h.inGroup && h.shape || m, o = [
31
31
  f,
32
32
  x,
33
33
  "shadow-lg",
34
- M[B],
35
- S[h],
34
+ M[N],
35
+ S[b],
36
36
  w
37
- ].filter(Boolean).join(" "), b = d || N || /* @__PURE__ */ t(G, {}), c = /* @__PURE__ */ t(q, { children: l ? /* @__PURE__ */ g("div", { className: "flex flex-col items-center", children: [
38
- b,
37
+ ].filter(Boolean).join(" "), p = d || v || /* @__PURE__ */ t(I, {}), a = /* @__PURE__ */ t(q, { children: l ? /* @__PURE__ */ g("div", { className: "flex flex-col items-center", children: [
38
+ p,
39
39
  /* @__PURE__ */ t("span", { className: "text-xs mt-1", children: l })
40
- ] }) : b });
41
- if (p.inGroup)
40
+ ] }) : p });
41
+ if (h.inGroup)
42
42
  return e ? /* @__PURE__ */ t(
43
43
  "a",
44
44
  {
45
45
  href: e,
46
46
  target: i,
47
- className: n,
48
- title: a,
49
- onClick: o,
47
+ className: o,
48
+ title: r,
49
+ onClick: n,
50
50
  ...s,
51
- children: c
51
+ children: a
52
52
  }
53
- ) : /* @__PURE__ */ t("button", { className: n, title: a, onClick: o, ...s, children: c });
53
+ ) : /* @__PURE__ */ t("button", { className: o, title: r, onClick: n, ...s, children: a });
54
54
  const E = e ? /* @__PURE__ */ t(
55
55
  "a",
56
56
  {
57
57
  href: e,
58
58
  target: i,
59
- className: n,
60
- style: m,
61
- onClick: o,
59
+ className: o,
60
+ style: c,
61
+ onClick: n,
62
62
  ...s,
63
- children: c
63
+ children: a
64
64
  }
65
- ) : /* @__PURE__ */ t("button", { className: n, onClick: o, style: m, ...s, children: c }), P = r !== void 0 ? /* @__PURE__ */ g("div", { className: T, style: m, children: [
66
- /* @__PURE__ */ t("span", { className: `${$} ${y} ${L}`, children: r }),
67
- e ? /* @__PURE__ */ t("a", { href: e, target: i, className: n, onClick: o, ...s, children: c }) : /* @__PURE__ */ t("button", { className: n, onClick: o, ...s, children: c })
65
+ ) : /* @__PURE__ */ t("button", { className: o, onClick: n, style: c, ...s, children: a }), P = u !== void 0 ? /* @__PURE__ */ g("div", { className: y, style: c, children: [
66
+ /* @__PURE__ */ t("span", { className: `${T} ${$} ${L}`, children: u }),
67
+ e ? /* @__PURE__ */ t("a", { href: e, target: i, className: o, onClick: n, ...s, children: a }) : /* @__PURE__ */ t("button", { className: o, onClick: n, ...s, children: a })
68
68
  ] }) : E;
69
- return a ? /* @__PURE__ */ t("div", { className: `${Y} ${ot[v]}`, "data-tip": a, style: m, children: r !== void 0 ? /* @__PURE__ */ g("div", { className: T, children: [
70
- /* @__PURE__ */ t("span", { className: `${$} ${y} ${L}`, children: r }),
71
- e ? /* @__PURE__ */ t("a", { href: e, target: i, className: n, onClick: o, ...s, children: c }) : /* @__PURE__ */ t("button", { className: n, onClick: o, ...s, children: c })
72
- ] }) : e ? /* @__PURE__ */ t("a", { href: e, target: i, className: n, onClick: o, ...s, children: c }) : /* @__PURE__ */ t("button", { className: n, onClick: o, ...s, children: c }) }) : P;
69
+ return r ? /* @__PURE__ */ t("div", { className: `${V} ${ot[B]}`, "data-tip": r, style: c, children: u !== void 0 ? /* @__PURE__ */ g("div", { className: y, children: [
70
+ /* @__PURE__ */ t("span", { className: `${T} ${$} ${L}`, children: u }),
71
+ e ? /* @__PURE__ */ t("a", { href: e, target: i, className: o, onClick: n, ...s, children: a }) : /* @__PURE__ */ t("button", { className: o, onClick: n, ...s, children: a })
72
+ ] }) : e ? /* @__PURE__ */ t("a", { href: e, target: i, className: o, onClick: n, ...s, children: a }) : /* @__PURE__ */ t("button", { className: o, onClick: n, ...s, children: a }) }) : P;
73
73
  }, W = (d) => {
74
74
  const {
75
75
  style: l,
76
- ...o
76
+ ...n
77
77
  } = d;
78
78
  if (j(C).inGroup)
79
- return /* @__PURE__ */ t(F, { ...o });
80
- const u = {
79
+ return /* @__PURE__ */ t(F, { ...n });
80
+ const m = {
81
81
  position: "fixed",
82
82
  zIndex: 1e3,
83
83
  bottom: 24,
84
84
  right: 24,
85
85
  ...l
86
86
  };
87
- return /* @__PURE__ */ t(F, { ...o, style: u });
87
+ return /* @__PURE__ */ t(F, { ...n, style: m });
88
88
  }, nt = ({
89
89
  children: d,
90
90
  flower: l = !1,
91
- shape: o = "circle",
92
- icon: h,
93
- mainAction: u,
94
- onMainAction: w,
95
- showClose: a = !1,
96
- type: v = "default",
97
- position: r = "bottom-right",
98
- offset: e = 24,
99
- className: i = "",
100
- style: N
91
+ shape: n = "circle",
92
+ icon: b,
93
+ triggerLabel: m = "Open menu",
94
+ mainAction: w,
95
+ mainActionLabel: r,
96
+ onMainAction: B,
97
+ showClose: u = !1,
98
+ closeLabel: e = "Close menu",
99
+ type: i = "default",
100
+ position: v = "bottom-right",
101
+ offset: c = 24,
102
+ className: s = "",
103
+ style: h
101
104
  }) => {
102
- const m = [
103
- O,
105
+ const N = [
106
+ K,
104
107
  l ? Q : "",
105
- i
106
- ].filter(Boolean).join(" "), s = [
108
+ s
109
+ ].filter(Boolean).join(" "), o = [
107
110
  f,
108
111
  x,
109
112
  "shadow-lg",
110
- M[o],
111
- S[v]
113
+ M[n],
114
+ S[i]
112
115
  ].filter(Boolean).join(" "), p = {
113
- ...r.includes("bottom") ? { bottom: e } : { top: e },
114
- ...r.includes("right") ? { right: e } : { left: e },
115
- ...N
116
+ ...v.includes("bottom") ? { bottom: c } : { top: c },
117
+ ...v.includes("right") ? { right: c } : { left: c },
118
+ ...h
116
119
  };
117
- return /* @__PURE__ */ g("div", { className: m, style: p, children: [
120
+ return /* @__PURE__ */ g("div", { className: N, style: p, children: [
118
121
  /* @__PURE__ */ t(
119
- "div",
122
+ "button",
120
123
  {
121
- tabIndex: 0,
122
- role: "button",
123
- className: s,
124
- children: h || /* @__PURE__ */ t(G, {})
124
+ type: "button",
125
+ className: o,
126
+ "aria-label": m,
127
+ "aria-haspopup": "true",
128
+ children: b || /* @__PURE__ */ t(I, {})
129
+ }
130
+ ),
131
+ w && /* @__PURE__ */ t(
132
+ "button",
133
+ {
134
+ type: "button",
135
+ className: `${o} ${X}`,
136
+ onClick: B,
137
+ "aria-label": r,
138
+ children: w
125
139
  }
126
140
  ),
127
141
  u && /* @__PURE__ */ t(
128
142
  "button",
129
143
  {
130
- className: `${s} ${X}`,
131
- onClick: w,
132
- children: u
144
+ type: "button",
145
+ className: `${o} ${Z}`,
146
+ "aria-label": e,
147
+ children: /* @__PURE__ */ t(tt, {})
133
148
  }
134
149
  ),
135
- a && /* @__PURE__ */ t("button", { className: `${s} ${Z}`, children: /* @__PURE__ */ t(tt, {}) }),
136
- /* @__PURE__ */ t(C.Provider, { value: { inGroup: !0, shape: o }, children: d })
150
+ /* @__PURE__ */ t(C.Provider, { value: { inGroup: !0, shape: n }, children: d })
137
151
  ] });
138
152
  }, et = ({
139
153
  visibilityHeight: d = 400,
140
154
  target: l,
141
- onClick: o,
142
- icon: h,
143
- duration: u = 450,
155
+ onClick: n,
156
+ icon: b,
157
+ duration: m = 450,
144
158
  position: w = "bottom-right",
145
- offset: a = 24,
146
- className: v = "",
147
- children: r,
159
+ offset: r = 24,
160
+ className: B = "",
161
+ children: u,
148
162
  style: e,
149
163
  ...i
150
164
  }) => {
151
- const [N, m] = A(!1);
152
- R(() => {
153
- const n = l ? l() : window, b = () => {
154
- const c = n instanceof Window ? window.scrollY : n.scrollTop;
155
- m(c >= d);
165
+ const [v, c] = A(!1);
166
+ O(() => {
167
+ const o = l ? l() : window, p = () => {
168
+ const a = o instanceof Window ? window.scrollY : o.scrollTop;
169
+ c(a >= d);
156
170
  };
157
- return n.addEventListener("scroll", b), b(), () => n.removeEventListener("scroll", b);
171
+ return o.addEventListener("scroll", p), p(), () => o.removeEventListener("scroll", p);
158
172
  }, [l, d]);
159
173
  const s = () => {
160
- o?.();
161
- const n = l ? l() : window;
162
- n instanceof Window ? window.scrollTo({ top: 0, behavior: "smooth" }) : n.scrollTo({ top: 0, behavior: "smooth" });
174
+ n?.();
175
+ const o = l ? l() : window;
176
+ o instanceof Window ? window.scrollTo({ top: 0, behavior: "smooth" }) : o.scrollTo({ top: 0, behavior: "smooth" });
163
177
  };
164
- if (!N) return null;
165
- const p = [
178
+ if (!v) return null;
179
+ const h = [
166
180
  f,
167
181
  x,
168
- I,
169
182
  k,
183
+ G,
170
184
  "shadow-lg",
171
185
  "transition-opacity",
172
- v
173
- ].filter(Boolean).join(" "), B = {
186
+ B
187
+ ].filter(Boolean).join(" "), N = {
174
188
  position: "fixed",
175
189
  zIndex: 1e3,
176
- bottom: a,
177
- ...w.includes("right") ? { right: a } : { left: a },
190
+ bottom: r,
191
+ ...w.includes("right") ? { right: r } : { left: r },
178
192
  ...e
179
193
  };
180
- return /* @__PURE__ */ t("button", { className: p, onClick: s, style: B, ...i, children: h || r || /* @__PURE__ */ t(_, {}) });
194
+ return /* @__PURE__ */ t(
195
+ "button",
196
+ {
197
+ className: h,
198
+ onClick: s,
199
+ style: N,
200
+ "aria-label": i["aria-label"] || "Back to top",
201
+ ...i,
202
+ children: b || u || /* @__PURE__ */ t(_, {})
203
+ }
204
+ );
181
205
  };
182
206
  W.Group = nt;
183
207
  W.BackTop = et;
@@ -1 +1 @@
1
- {"version":3,"file":"FloatButton.js","sources":["../../src/components/FloatButton.tsx"],"sourcesContent":["import React, { useState, useEffect, createContext, useContext } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnLg = 'btn-lg'\nconst dBtnCircle = 'btn-circle'\nconst dBtnSquare = 'btn-square'\nconst dBtnNeutral = 'btn-neutral'\nconst dBtnPrimary = 'btn-primary'\nconst dTooltip = 'tooltip'\nconst dTooltipLeft = 'tooltip-left'\nconst dTooltipRight = 'tooltip-right'\nconst dTooltipTop = 'tooltip-top'\nconst dTooltipBottom = 'tooltip-bottom'\nconst dIndicator = 'indicator'\nconst dIndicatorItem = 'indicator-item'\nconst dBadge = 'badge'\nconst dBadgeSecondary = 'badge-secondary'\nconst dFab = 'fab'\nconst dFabFlower = 'fab-flower'\nconst dFabMainAction = 'fab-main-action'\nconst dFabClose = 'fab-close'\n\n// Default icons\nconst PlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n)\n\nconst ArrowUpIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n)\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nexport interface FloatButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n /** Icon to display */\n icon?: React.ReactNode\n /** Description text below icon */\n description?: React.ReactNode\n /** Button type/color */\n type?: 'default' | 'primary'\n /** Button shape */\n shape?: 'circle' | 'square'\n /** Tooltip text */\n tooltip?: string\n /** Tooltip placement */\n tooltipPlacement?: 'left' | 'right' | 'top' | 'bottom'\n /** Badge content */\n badge?: number | React.ReactNode\n /** Link URL (renders as anchor) */\n href?: string\n /** Link target */\n target?: string\n /** @deprecated Use icon prop instead */\n children?: React.ReactNode\n}\n\nexport interface FloatButtonGroupProps {\n /** Child FloatButton components */\n children: React.ReactNode\n /** Arrange buttons in a quarter-circle (radial) layout */\n flower?: boolean\n /** Button shape for children */\n shape?: 'circle' | 'square'\n /** Main trigger button icon */\n icon?: React.ReactNode\n /** Main action button that replaces trigger when open (fab-main-action) */\n mainAction?: React.ReactNode\n /** Click handler for main action button */\n onMainAction?: () => void\n /** Show close button when open (fab-close) */\n showClose?: boolean\n /** Button type/color */\n type?: 'default' | 'primary'\n /** Position on screen */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n /** Distance from edge */\n offset?: number\n /** Additional CSS classes */\n className?: string\n /** Custom styles */\n style?: React.CSSProperties\n}\n\nexport interface BackTopProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'onClick'> {\n /** Scroll threshold to show button (pixels) */\n visibilityHeight?: number\n /** Scroll target (default: window) */\n target?: () => HTMLElement | Window\n /** Click handler (called before scrolling) */\n onClick?: () => void\n /** Custom icon */\n icon?: React.ReactNode\n /** Duration of scroll animation in ms */\n duration?: number\n /** Position on screen */\n position?: 'bottom-right' | 'bottom-left'\n /** Distance from edge in pixels */\n offset?: number\n /** @deprecated Use icon prop instead */\n children?: React.ReactNode\n}\n\n// Context for group\ninterface FloatButtonGroupContextValue {\n inGroup: boolean\n shape?: 'circle' | 'square'\n}\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue>({ inGroup: false })\n\nconst tooltipPlacementClasses: Record<string, string> = {\n left: dTooltipLeft,\n right: dTooltipRight,\n top: dTooltipTop,\n bottom: dTooltipBottom,\n}\n\nconst typeClasses: Record<string, string> = {\n default: dBtnNeutral,\n primary: dBtnPrimary,\n}\n\nconst shapeClasses: Record<string, string> = {\n circle: dBtnCircle,\n square: dBtnSquare,\n}\n\ninterface FloatButtonComponent extends React.FC<FloatButtonProps> {\n Group: React.FC<FloatButtonGroupProps>\n BackTop: React.FC<BackTopProps>\n}\n\nconst FloatButtonBase: React.FC<FloatButtonProps & { style?: React.CSSProperties }> = ({\n icon,\n description,\n onClick,\n type = 'default',\n shape = 'circle',\n className = '',\n tooltip,\n tooltipPlacement = 'left',\n badge,\n href,\n target,\n children,\n style,\n ...rest\n}) => {\n const groupContext = useContext(FloatButtonGroupContext)\n const effectiveShape = groupContext.inGroup ? (groupContext.shape || shape) : shape\n\n const buttonClasses = [\n dBtn,\n dBtnLg,\n 'shadow-lg',\n shapeClasses[effectiveShape],\n typeClasses[type],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const content = icon || children || <PlusIcon />\n\n const buttonContent = (\n <>\n {description ? (\n <div className=\"flex flex-col items-center\">\n {content}\n <span className=\"text-xs mt-1\">{description}</span>\n </div>\n ) : (\n content\n )}\n </>\n )\n\n // When inside a group, render simple button without wrapper divs\n // DaisyUI's fab CSS requires direct button children\n if (groupContext.inGroup) {\n return href ? (\n <a\n href={href}\n target={target}\n className={buttonClasses}\n title={tooltip}\n onClick={onClick as any}\n {...(rest as any)}\n >\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} title={tooltip} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )\n }\n\n const buttonElement = href ? (\n <a\n href={href}\n target={target}\n className={buttonClasses}\n style={style}\n onClick={onClick as any}\n {...(rest as any)}\n >\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} style={style} {...rest}>\n {buttonContent}\n </button>\n )\n\n const withBadge = badge !== undefined ? (\n <div className={dIndicator} style={style}>\n <span className={`${dIndicatorItem} ${dBadge} ${dBadgeSecondary}`}>\n {badge}\n </span>\n {href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n ) : buttonElement\n\n if (tooltip) {\n return (\n <div className={`${dTooltip} ${tooltipPlacementClasses[tooltipPlacement]}`} data-tip={tooltip} style={style}>\n {badge !== undefined ? (\n <div className={dIndicator}>\n <span className={`${dIndicatorItem} ${dBadge} ${dBadgeSecondary}`}>{badge}</span>\n {href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n ) : href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n )\n }\n\n return withBadge\n}\n\nexport const FloatButton: FloatButtonComponent = (props) => {\n const {\n style: propStyle,\n ...rest\n } = props\n\n const groupContext = useContext(FloatButtonGroupContext)\n\n // If in group, don't apply fixed positioning\n if (groupContext.inGroup) {\n return <FloatButtonBase {...rest} />\n }\n\n // Standalone button with fixed positioning\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n bottom: 24,\n right: 24,\n ...propStyle,\n }\n\n return <FloatButtonBase {...rest} style={style} />\n}\n\nconst FloatButtonGroup: React.FC<FloatButtonGroupProps> = ({\n children,\n flower = false,\n shape = 'circle',\n icon,\n mainAction,\n onMainAction,\n showClose = false,\n type = 'default',\n position = 'bottom-right',\n offset = 24,\n className = '',\n style: propStyle,\n}) => {\n const fabClasses = [\n dFab,\n flower ? dFabFlower : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const triggerButtonClasses = [\n dBtn,\n dBtnLg,\n 'shadow-lg',\n shapeClasses[shape],\n typeClasses[type],\n ]\n .filter(Boolean)\n .join(' ')\n\n const containerStyle: React.CSSProperties = {\n ...(position.includes('bottom') ? { bottom: offset } : { top: offset }),\n ...(position.includes('right') ? { right: offset } : { left: offset }),\n ...propStyle,\n }\n\n return (\n <div className={fabClasses} style={containerStyle}>\n {/* Trigger button - shown when closed */}\n <div\n tabIndex={0}\n role=\"button\"\n className={triggerButtonClasses}\n >\n {icon || <PlusIcon />}\n </div>\n\n {/* Main action button - shown when open (replaces trigger in flower mode) */}\n {mainAction && (\n <button\n className={`${triggerButtonClasses} ${dFabMainAction}`}\n onClick={onMainAction}\n >\n {mainAction}\n </button>\n )}\n\n {/* Close button - shown when open */}\n {showClose && (\n <button className={`${triggerButtonClasses} ${dFabClose}`}>\n <CloseIcon />\n </button>\n )}\n\n <FloatButtonGroupContext.Provider value={{ inGroup: true, shape }}>\n {children}\n </FloatButtonGroupContext.Provider>\n </div>\n )\n}\n\nconst BackTop: React.FC<BackTopProps> = ({\n visibilityHeight = 400,\n target,\n onClick,\n icon,\n duration = 450,\n position = 'bottom-right',\n offset = 24,\n className = '',\n children,\n style: propStyle,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n const scrollTarget = target ? target() : window\n\n const handleScroll = () => {\n const scrollTop =\n scrollTarget instanceof Window\n ? window.scrollY\n : (scrollTarget as HTMLElement).scrollTop\n\n setVisible(scrollTop >= visibilityHeight)\n }\n\n scrollTarget.addEventListener('scroll', handleScroll)\n handleScroll()\n\n return () => scrollTarget.removeEventListener('scroll', handleScroll)\n }, [target, visibilityHeight])\n\n const handleClick = () => {\n onClick?.()\n const scrollTarget = target ? target() : window\n if (scrollTarget instanceof Window) {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n } else {\n (scrollTarget as HTMLElement).scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n\n if (!visible) return null\n\n const buttonClasses = [\n dBtn,\n dBtnLg,\n dBtnCircle,\n dBtnNeutral,\n 'shadow-lg',\n 'transition-opacity',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n bottom: offset,\n ...(position.includes('right') ? { right: offset } : { left: offset }),\n ...propStyle,\n }\n\n return (\n <button className={buttonClasses} onClick={handleClick} style={style} {...rest}>\n {icon || children || <ArrowUpIcon />}\n </button>\n )\n}\n\nFloatButton.Group = FloatButtonGroup\nFloatButton.BackTop = BackTop\n"],"names":["dBtn","dBtnLg","dBtnCircle","dBtnSquare","dBtnNeutral","dBtnPrimary","dTooltip","dTooltipLeft","dTooltipRight","dTooltipTop","dTooltipBottom","dIndicator","dIndicatorItem","dBadge","dBadgeSecondary","dFab","dFabFlower","dFabMainAction","dFabClose","PlusIcon","jsx","ArrowUpIcon","CloseIcon","FloatButtonGroupContext","createContext","tooltipPlacementClasses","typeClasses","shapeClasses","FloatButtonBase","icon","description","onClick","type","shape","className","tooltip","tooltipPlacement","badge","href","target","children","style","rest","groupContext","useContext","effectiveShape","buttonClasses","content","buttonContent","Fragment","jsxs","buttonElement","withBadge","FloatButton","props","propStyle","FloatButtonGroup","flower","mainAction","onMainAction","showClose","position","offset","fabClasses","triggerButtonClasses","containerStyle","BackTop","visibilityHeight","duration","visible","setVisible","useState","useEffect","scrollTarget","handleScroll","scrollTop","handleClick"],"mappings":"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"}
1
+ {"version":3,"file":"FloatButton.js","sources":["../../src/components/FloatButton.tsx"],"sourcesContent":["import React, { useState, useEffect, createContext, useContext } from 'react'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnLg = 'btn-lg'\nconst dBtnCircle = 'btn-circle'\nconst dBtnSquare = 'btn-square'\nconst dBtnNeutral = 'btn-neutral'\nconst dBtnPrimary = 'btn-primary'\nconst dTooltip = 'tooltip'\nconst dTooltipLeft = 'tooltip-left'\nconst dTooltipRight = 'tooltip-right'\nconst dTooltipTop = 'tooltip-top'\nconst dTooltipBottom = 'tooltip-bottom'\nconst dIndicator = 'indicator'\nconst dIndicatorItem = 'indicator-item'\nconst dBadge = 'badge'\nconst dBadgeSecondary = 'badge-secondary'\nconst dFab = 'fab'\nconst dFabFlower = 'fab-flower'\nconst dFabMainAction = 'fab-main-action'\nconst dFabClose = 'fab-close'\n\n// Default icons\nconst PlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n)\n\nconst ArrowUpIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 10l7-7m0 0l7 7m-7-7v18\" />\n </svg>\n)\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nexport interface FloatButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n /** Icon to display */\n icon?: React.ReactNode\n /** Description text below icon */\n description?: React.ReactNode\n /** Button type/color */\n type?: 'default' | 'primary'\n /** Button shape */\n shape?: 'circle' | 'square'\n /** Tooltip text */\n tooltip?: string\n /** Tooltip placement */\n tooltipPlacement?: 'left' | 'right' | 'top' | 'bottom'\n /** Badge content */\n badge?: number | React.ReactNode\n /** Link URL (renders as anchor) */\n href?: string\n /** Link target */\n target?: string\n /** @deprecated Use icon prop instead */\n children?: React.ReactNode\n}\n\nexport interface FloatButtonGroupProps {\n /** Child FloatButton components */\n children: React.ReactNode\n /** Arrange buttons in a quarter-circle (radial) layout */\n flower?: boolean\n /** Button shape for children */\n shape?: 'circle' | 'square'\n /** Main trigger button icon */\n icon?: React.ReactNode\n /** Accessible label for trigger button (required for icon-only buttons) */\n triggerLabel?: string\n /** Main action button that replaces trigger when open (fab-main-action) */\n mainAction?: React.ReactNode\n /** Accessible label for main action button */\n mainActionLabel?: string\n /** Click handler for main action button */\n onMainAction?: () => void\n /** Show close button when open (fab-close) */\n showClose?: boolean\n /** Accessible label for close button */\n closeLabel?: string\n /** Button type/color */\n type?: 'default' | 'primary'\n /** Position on screen */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n /** Distance from edge */\n offset?: number\n /** Additional CSS classes */\n className?: string\n /** Custom styles */\n style?: React.CSSProperties\n}\n\nexport interface BackTopProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'onClick'> {\n /** Scroll threshold to show button (pixels) */\n visibilityHeight?: number\n /** Scroll target (default: window) */\n target?: () => HTMLElement | Window\n /** Click handler (called before scrolling) */\n onClick?: () => void\n /** Custom icon */\n icon?: React.ReactNode\n /** Duration of scroll animation in ms */\n duration?: number\n /** Position on screen */\n position?: 'bottom-right' | 'bottom-left'\n /** Distance from edge in pixels */\n offset?: number\n /** @deprecated Use icon prop instead */\n children?: React.ReactNode\n}\n\n// Context for group\ninterface FloatButtonGroupContextValue {\n inGroup: boolean\n shape?: 'circle' | 'square'\n}\n\nconst FloatButtonGroupContext = createContext<FloatButtonGroupContextValue>({ inGroup: false })\n\nconst tooltipPlacementClasses: Record<string, string> = {\n left: dTooltipLeft,\n right: dTooltipRight,\n top: dTooltipTop,\n bottom: dTooltipBottom,\n}\n\nconst typeClasses: Record<string, string> = {\n default: dBtnNeutral,\n primary: dBtnPrimary,\n}\n\nconst shapeClasses: Record<string, string> = {\n circle: dBtnCircle,\n square: dBtnSquare,\n}\n\ninterface FloatButtonComponent extends React.FC<FloatButtonProps> {\n Group: React.FC<FloatButtonGroupProps>\n BackTop: React.FC<BackTopProps>\n}\n\nconst FloatButtonBase: React.FC<FloatButtonProps & { style?: React.CSSProperties }> = ({\n icon,\n description,\n onClick,\n type = 'default',\n shape = 'circle',\n className = '',\n tooltip,\n tooltipPlacement = 'left',\n badge,\n href,\n target,\n children,\n style,\n ...rest\n}) => {\n const groupContext = useContext(FloatButtonGroupContext)\n const effectiveShape = groupContext.inGroup ? (groupContext.shape || shape) : shape\n\n const buttonClasses = [\n dBtn,\n dBtnLg,\n 'shadow-lg',\n shapeClasses[effectiveShape],\n typeClasses[type],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const content = icon || children || <PlusIcon />\n\n const buttonContent = (\n <>\n {description ? (\n <div className=\"flex flex-col items-center\">\n {content}\n <span className=\"text-xs mt-1\">{description}</span>\n </div>\n ) : (\n content\n )}\n </>\n )\n\n // When inside a group, render simple button without wrapper divs\n // DaisyUI's fab CSS requires direct button children\n if (groupContext.inGroup) {\n return href ? (\n <a\n href={href}\n target={target}\n className={buttonClasses}\n title={tooltip}\n onClick={onClick as any}\n {...(rest as any)}\n >\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} title={tooltip} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )\n }\n\n const buttonElement = href ? (\n <a\n href={href}\n target={target}\n className={buttonClasses}\n style={style}\n onClick={onClick as any}\n {...(rest as any)}\n >\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} style={style} {...rest}>\n {buttonContent}\n </button>\n )\n\n const withBadge = badge !== undefined ? (\n <div className={dIndicator} style={style}>\n <span className={`${dIndicatorItem} ${dBadge} ${dBadgeSecondary}`}>\n {badge}\n </span>\n {href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n ) : buttonElement\n\n if (tooltip) {\n return (\n <div className={`${dTooltip} ${tooltipPlacementClasses[tooltipPlacement]}`} data-tip={tooltip} style={style}>\n {badge !== undefined ? (\n <div className={dIndicator}>\n <span className={`${dIndicatorItem} ${dBadge} ${dBadgeSecondary}`}>{badge}</span>\n {href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n ) : href ? (\n <a href={href} target={target} className={buttonClasses} onClick={onClick as any} {...(rest as any)}>\n {buttonContent}\n </a>\n ) : (\n <button className={buttonClasses} onClick={onClick} {...rest}>\n {buttonContent}\n </button>\n )}\n </div>\n )\n }\n\n return withBadge\n}\n\nexport const FloatButton: FloatButtonComponent = (props) => {\n const {\n style: propStyle,\n ...rest\n } = props\n\n const groupContext = useContext(FloatButtonGroupContext)\n\n // If in group, don't apply fixed positioning\n if (groupContext.inGroup) {\n return <FloatButtonBase {...rest} />\n }\n\n // Standalone button with fixed positioning\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n bottom: 24,\n right: 24,\n ...propStyle,\n }\n\n return <FloatButtonBase {...rest} style={style} />\n}\n\nconst FloatButtonGroup: React.FC<FloatButtonGroupProps> = ({\n children,\n flower = false,\n shape = 'circle',\n icon,\n triggerLabel = 'Open menu',\n mainAction,\n mainActionLabel,\n onMainAction,\n showClose = false,\n closeLabel = 'Close menu',\n type = 'default',\n position = 'bottom-right',\n offset = 24,\n className = '',\n style: propStyle,\n}) => {\n const fabClasses = [\n dFab,\n flower ? dFabFlower : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const triggerButtonClasses = [\n dBtn,\n dBtnLg,\n 'shadow-lg',\n shapeClasses[shape],\n typeClasses[type],\n ]\n .filter(Boolean)\n .join(' ')\n\n const containerStyle: React.CSSProperties = {\n ...(position.includes('bottom') ? { bottom: offset } : { top: offset }),\n ...(position.includes('right') ? { right: offset } : { left: offset }),\n ...propStyle,\n }\n\n return (\n <div className={fabClasses} style={containerStyle}>\n {/* Trigger button - shown when closed */}\n <button\n type=\"button\"\n className={triggerButtonClasses}\n aria-label={triggerLabel}\n aria-haspopup=\"true\"\n >\n {icon || <PlusIcon />}\n </button>\n\n {/* Main action button - shown when open (replaces trigger in flower mode) */}\n {mainAction && (\n <button\n type=\"button\"\n className={`${triggerButtonClasses} ${dFabMainAction}`}\n onClick={onMainAction}\n aria-label={mainActionLabel}\n >\n {mainAction}\n </button>\n )}\n\n {/* Close button - shown when open */}\n {showClose && (\n <button\n type=\"button\"\n className={`${triggerButtonClasses} ${dFabClose}`}\n aria-label={closeLabel}\n >\n <CloseIcon />\n </button>\n )}\n\n <FloatButtonGroupContext.Provider value={{ inGroup: true, shape }}>\n {children}\n </FloatButtonGroupContext.Provider>\n </div>\n )\n}\n\nconst BackTop: React.FC<BackTopProps> = ({\n visibilityHeight = 400,\n target,\n onClick,\n icon,\n duration = 450,\n position = 'bottom-right',\n offset = 24,\n className = '',\n children,\n style: propStyle,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n const scrollTarget = target ? target() : window\n\n const handleScroll = () => {\n const scrollTop =\n scrollTarget instanceof Window\n ? window.scrollY\n : (scrollTarget as HTMLElement).scrollTop\n\n setVisible(scrollTop >= visibilityHeight)\n }\n\n scrollTarget.addEventListener('scroll', handleScroll)\n handleScroll()\n\n return () => scrollTarget.removeEventListener('scroll', handleScroll)\n }, [target, visibilityHeight])\n\n const handleClick = () => {\n onClick?.()\n const scrollTarget = target ? target() : window\n if (scrollTarget instanceof Window) {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n } else {\n (scrollTarget as HTMLElement).scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n\n if (!visible) return null\n\n const buttonClasses = [\n dBtn,\n dBtnLg,\n dBtnCircle,\n dBtnNeutral,\n 'shadow-lg',\n 'transition-opacity',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n bottom: offset,\n ...(position.includes('right') ? { right: offset } : { left: offset }),\n ...propStyle,\n }\n\n return (\n <button\n className={buttonClasses}\n onClick={handleClick}\n style={style}\n aria-label={rest['aria-label'] || 'Back to top'}\n {...rest}\n >\n {icon || children || <ArrowUpIcon />}\n </button>\n )\n}\n\nFloatButton.Group = FloatButtonGroup\nFloatButton.BackTop = BackTop\n"],"names":["dBtn","dBtnLg","dBtnCircle","dBtnSquare","dBtnNeutral","dBtnPrimary","dTooltip","dTooltipLeft","dTooltipRight","dTooltipTop","dTooltipBottom","dIndicator","dIndicatorItem","dBadge","dBadgeSecondary","dFab","dFabFlower","dFabMainAction","dFabClose","PlusIcon","jsx","ArrowUpIcon","CloseIcon","FloatButtonGroupContext","createContext","tooltipPlacementClasses","typeClasses","shapeClasses","FloatButtonBase","icon","description","onClick","type","shape","className","tooltip","tooltipPlacement","badge","href","target","children","style","rest","groupContext","useContext","effectiveShape","buttonClasses","content","buttonContent","Fragment","jsxs","buttonElement","withBadge","FloatButton","props","propStyle","FloatButtonGroup","flower","triggerLabel","mainAction","mainActionLabel","onMainAction","showClose","closeLabel","position","offset","fabClasses","triggerButtonClasses","containerStyle","BackTop","visibilityHeight","duration","visible","setVisible","useState","useEffect","scrollTarget","handleScroll","scrollTop","handleClick"],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface FooterProps extends React.HTMLAttributes<HTMLElement> {
4
4
  center?: boolean;
5
5
  horizontal?: boolean;
6
6
  vertical?: boolean;
7
+ /** Test ID for testing */
8
+ 'data-testid'?: string;
7
9
  }
8
10
  export interface FooterTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
9
11
  children: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sources":["../../src/components/Footer.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dFooter = 'footer'\nconst dFooterCenter = 'footer-center'\nconst dFooterHorizontal = 'footer-horizontal'\nconst dFooterVertical = 'footer-vertical'\nconst dFooterTitle = 'footer-title'\n\nexport interface FooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n center?: boolean\n horizontal?: boolean\n vertical?: boolean\n}\n\nexport interface FooterTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n children: React.ReactNode\n}\n\nfunction FooterRoot({ children, className = '', center = false, horizontal = false, vertical = false, ...rest }: FooterProps) {\n const classes = [\n dFooter,\n center && dFooterCenter,\n horizontal && dFooterHorizontal,\n vertical && dFooterVertical,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <footer className={classes} {...rest}>{children}</footer>\n}\n\nfunction FooterTitle({ children, className = '', ...rest }: FooterTitleProps) {\n return <h6 className={`${dFooterTitle} ${className}`} {...rest}>{children}</h6>\n}\n\nexport const Footer = Object.assign(FooterRoot, {\n Title: FooterTitle,\n})\n"],"names":["dFooter","dFooterCenter","dFooterHorizontal","dFooterVertical","dFooterTitle","FooterRoot","children","className","center","horizontal","vertical","rest","classes","FooterTitle","jsx","Footer"],"mappings":";AAGA,MAAMA,IAAU,UACVC,IAAgB,iBAChBC,IAAoB,qBACpBC,IAAkB,mBAClBC,IAAe;AAarB,SAASC,EAAW,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,QAAAC,IAAS,IAAO,YAAAC,IAAa,IAAO,UAAAC,IAAW,IAAO,GAAGC,KAAqB;AAC5H,QAAMC,IAAU;AAAA,IACdZ;AAAA,IACAQ,KAAUP;AAAA,IACVQ,KAAcP;AAAA,IACdQ,KAAYP;AAAA,IACZI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,UAAA,EAAO,WAAWK,GAAU,GAAGD,GAAO,UAAAL,GAAS;AACzD;AAEA,SAASO,EAAY,EAAE,UAAAP,GAAU,WAAAC,IAAY,IAAI,GAAGI,KAA0B;AAC5E,SAAO,gBAAAG,EAAC,MAAA,EAAG,WAAW,GAAGV,CAAY,IAAIG,CAAS,IAAK,GAAGI,GAAO,UAAAL,EAAA,CAAS;AAC5E;AAEO,MAAMS,IAAS,OAAO,OAAOV,GAAY;AAAA,EAC9C,OAAOQ;AACT,CAAC;"}
1
+ {"version":3,"file":"Footer.js","sources":["../../src/components/Footer.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dFooter = 'footer'\nconst dFooterCenter = 'footer-center'\nconst dFooterHorizontal = 'footer-horizontal'\nconst dFooterVertical = 'footer-vertical'\nconst dFooterTitle = 'footer-title'\n\nexport interface FooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n center?: boolean\n horizontal?: boolean\n vertical?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface FooterTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n children: React.ReactNode\n}\n\nfunction FooterRoot({ children, className = '', center = false, horizontal = false, vertical = false, ...rest }: FooterProps) {\n const classes = [\n dFooter,\n center && dFooterCenter,\n horizontal && dFooterHorizontal,\n vertical && dFooterVertical,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <footer className={classes} {...rest}>{children}</footer>\n}\n\nfunction FooterTitle({ children, className = '', ...rest }: FooterTitleProps) {\n return <h6 className={`${dFooterTitle} ${className}`} {...rest}>{children}</h6>\n}\n\nexport const Footer = Object.assign(FooterRoot, {\n Title: FooterTitle,\n})\n"],"names":["dFooter","dFooterCenter","dFooterHorizontal","dFooterVertical","dFooterTitle","FooterRoot","children","className","center","horizontal","vertical","rest","classes","FooterTitle","jsx","Footer"],"mappings":";AAGA,MAAMA,IAAU,UACVC,IAAgB,iBAChBC,IAAoB,qBACpBC,IAAkB,mBAClBC,IAAe;AAerB,SAASC,EAAW,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,QAAAC,IAAS,IAAO,YAAAC,IAAa,IAAO,UAAAC,IAAW,IAAO,GAAGC,KAAqB;AAC5H,QAAMC,IAAU;AAAA,IACdZ;AAAA,IACAQ,KAAUP;AAAA,IACVQ,KAAcP;AAAA,IACdQ,KAAYP;AAAA,IACZI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,UAAA,EAAO,WAAWK,GAAU,GAAGD,GAAO,UAAAL,GAAS;AACzD;AAEA,SAASO,EAAY,EAAE,UAAAP,GAAU,WAAAC,IAAY,IAAI,GAAGI,KAA0B;AAC5E,SAAO,gBAAAG,EAAC,MAAA,EAAG,WAAW,GAAGV,CAAY,IAAIG,CAAS,IAAK,GAAGI,GAAO,UAAAL,EAAA,CAAS;AAC5E;AAEO,MAAMS,IAAS,OAAO,OAAOV,GAAY;AAAA,EAC9C,OAAOQ;AACT,CAAC;"}
@@ -5,6 +5,8 @@ export interface RowProps extends React.HTMLAttributes<HTMLDivElement> {
5
5
  gutter?: number | [number, number];
6
6
  justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';
7
7
  align?: 'start' | 'end' | 'center' | 'stretch' | 'baseline';
8
+ /** Test ID for testing */
9
+ 'data-testid'?: string;
8
10
  }
9
11
  export interface ColProps extends React.HTMLAttributes<HTMLDivElement> {
10
12
  children: React.ReactNode;
@@ -17,6 +19,8 @@ export interface ColProps extends React.HTMLAttributes<HTMLDivElement> {
17
19
  lg?: number;
18
20
  xl?: number;
19
21
  xxl?: number;
22
+ /** Test ID for testing */
23
+ 'data-testid'?: string;
20
24
  }
21
25
  export declare function Row({ children, cols, gutter, justify, align, className, style: userStyle, ...rest }: RowProps): import("react/jsx-runtime").JSX.Element;
22
26
  export declare function Col({ children, span, offset, order, xs, sm, md, lg, xl, xxl, className, style: userStyle, ...rest }: ColProps): import("react/jsx-runtime").JSX.Element;