@solostylist/ui-kit 1.0.170 → 1.0.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/s-ai-tool-bar/s-ai-tool-bar.d.ts +2 -4
- package/dist/s-ai-tool-bar/s-ai-tool-bar.js +253 -287
- package/dist/s-blur-text/s-blur-text.js +19 -20
- package/dist/s-breadcrumbs/s-breadcrumbs.js +2 -2
- package/dist/s-button-link/s-button-link.js +2 -2
- package/dist/s-category-card/s-category-card.js +2 -2
- package/dist/s-chat-input/s-chat-input.js +29 -29
- package/dist/s-chat-message/s-chat-message.js +73 -151
- package/dist/s-comment-message/s-comment-message.js +9 -9
- package/dist/s-countdown/s-count-box.js +2 -2
- package/dist/s-countdown/s-count-down.js +2 -2
- package/dist/s-error-layout/s-error-layout.js +2 -2
- package/dist/s-gallery/s-gallery.js +106 -119
- package/dist/s-glow-button/s-glow-button.d.ts +7 -1
- package/dist/s-glow-button/s-glow-button.js +39 -189
- package/dist/s-gradient-icon/s-gradient-icon.js +2 -2
- package/dist/s-moving-border/s-moving-border.d.ts +1 -1
- package/dist/s-moving-border/s-moving-border.js +34 -34
- package/dist/s-review/s-review.js +28 -28
- package/dist/s-scroll-reveal/s-scroll-reveal.js +2 -2
- package/dist/s-skeleton/s-skeleton.js +2 -2
- package/dist/s-stripe/s-stripe.js +2 -2
- package/dist/s-text-shimmer/s-text-shimmer.d.ts +2 -2
- package/dist/s-text-shimmer/s-text-shimmer.js +13 -13
- package/dist/s-text-truncation/s-text-truncation.js +1 -1
- package/dist/s-theme-demo/s-theme-demo.js +105 -142
- package/dist/s-theme-provider/s-theme-provider.js +2 -2
- package/dist/s-theme-switch/s-theme-switch.js +1 -1
- package/dist/s-two-pane-layout/index.js +1 -1
- package/dist/s-two-pane-layout/s-two-pane-layout.js +2 -2
- package/dist/s-typewriter-text/s-typewriter-text.js +8 -8
- package/dist/s-zoom-image/index.js +1 -1
- package/dist/s-zoom-image/s-zoom-image.js +2 -2
- package/dist/theme/theme-primitives.d.ts +6 -0
- package/dist/theme/theme-primitives.js +51 -45
- package/package.json +1 -1
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { useRef as L, useState as
|
|
3
|
-
import { Box as
|
|
4
|
-
import { AnimatePresence as
|
|
5
|
-
import { SImageModal as
|
|
1
|
+
import { j as a } from "../jsx-runtime-OVHDjVDe.js";
|
|
2
|
+
import { useRef as L, useState as g, useEffect as v, useId as N } from "react";
|
|
3
|
+
import { Box as u, Paper as j, Skeleton as R, Typography as _ } from "@mui/material";
|
|
4
|
+
import { AnimatePresence as q, motion as k } from "framer-motion";
|
|
5
|
+
import { SImageModal as A } from "../s-image-modal/s-image-modal.js";
|
|
6
6
|
import "../s-lazy-image/index.js";
|
|
7
|
-
import
|
|
8
|
-
const
|
|
9
|
-
const e = L(null), [n,
|
|
10
|
-
return
|
|
11
|
-
const
|
|
7
|
+
import $ from "../s-lazy-image/s-lazy-image.js";
|
|
8
|
+
const b = ({ item: t, sx: o, onClick: r }) => {
|
|
9
|
+
const e = L(null), [n, s] = g(!1), [p, m] = g(!0);
|
|
10
|
+
return v(() => {
|
|
11
|
+
const l = {
|
|
12
12
|
root: null,
|
|
13
13
|
rootMargin: "50px",
|
|
14
14
|
// Start loading 50px before entering viewport
|
|
15
15
|
threshold: 0.1
|
|
16
16
|
// Trigger when 10% of video is visible
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
},
|
|
20
|
-
return e.current &&
|
|
21
|
-
e.current &&
|
|
17
|
+
}, h = new IntersectionObserver((d) => {
|
|
18
|
+
d.forEach((i) => s(i.isIntersecting));
|
|
19
|
+
}, l);
|
|
20
|
+
return e.current && h.observe(e.current), () => {
|
|
21
|
+
e.current && h.unobserve(e.current);
|
|
22
22
|
};
|
|
23
|
-
}, []),
|
|
24
|
-
let
|
|
23
|
+
}, []), v(() => {
|
|
24
|
+
let l = !0;
|
|
25
25
|
return n ? (async () => {
|
|
26
|
-
if (!(!e.current || !n || !
|
|
26
|
+
if (!(!e.current || !n || !l))
|
|
27
27
|
try {
|
|
28
|
-
e.current.readyState >= 3 ? (
|
|
29
|
-
e.current && (e.current.oncanplay = () =>
|
|
30
|
-
}),
|
|
31
|
-
} catch (
|
|
32
|
-
console.warn("Video playback failed:",
|
|
28
|
+
e.current.readyState >= 3 ? (m(!1), await e.current.play()) : (m(!0), await new Promise((d) => {
|
|
29
|
+
e.current && (e.current.oncanplay = () => d());
|
|
30
|
+
}), l && (m(!1), await e.current.play()));
|
|
31
|
+
} catch (d) {
|
|
32
|
+
console.warn("Video playback failed:", d);
|
|
33
33
|
}
|
|
34
34
|
})() : e.current && e.current.pause(), () => {
|
|
35
|
-
|
|
35
|
+
l = !1, e.current && (e.current.pause(), e.current.removeAttribute("src"), e.current.load());
|
|
36
36
|
};
|
|
37
|
-
}, [n]),
|
|
38
|
-
|
|
37
|
+
}, [n]), t.type === "video" ? /* @__PURE__ */ a.jsxs(
|
|
38
|
+
u,
|
|
39
39
|
{
|
|
40
40
|
sx: {
|
|
41
41
|
position: "relative",
|
|
@@ -45,12 +45,12 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
45
45
|
...o
|
|
46
46
|
},
|
|
47
47
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
-
|
|
48
|
+
/* @__PURE__ */ a.jsx(
|
|
49
|
+
u,
|
|
50
50
|
{
|
|
51
51
|
component: "video",
|
|
52
52
|
ref: e,
|
|
53
|
-
onClick:
|
|
53
|
+
onClick: r,
|
|
54
54
|
playsInline: !0,
|
|
55
55
|
muted: !0,
|
|
56
56
|
loop: !0,
|
|
@@ -59,17 +59,17 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
59
59
|
width: "100%",
|
|
60
60
|
height: "100%",
|
|
61
61
|
objectFit: "cover",
|
|
62
|
-
opacity:
|
|
62
|
+
opacity: p ? 0.8 : 1,
|
|
63
63
|
transition: "opacity 0.2s",
|
|
64
64
|
transform: "translateZ(0)",
|
|
65
65
|
willChange: "transform",
|
|
66
66
|
display: "block"
|
|
67
67
|
},
|
|
68
|
-
children: /* @__PURE__ */
|
|
68
|
+
children: /* @__PURE__ */ a.jsx("source", { src: t.url, type: "video/mp4" })
|
|
69
69
|
}
|
|
70
70
|
),
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
p && /* @__PURE__ */ a.jsx(
|
|
72
|
+
u,
|
|
73
73
|
{
|
|
74
74
|
sx: {
|
|
75
75
|
position: "absolute",
|
|
@@ -79,8 +79,8 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
79
79
|
justifyContent: "center",
|
|
80
80
|
bgcolor: "action.disabled"
|
|
81
81
|
},
|
|
82
|
-
children: /* @__PURE__ */
|
|
83
|
-
|
|
82
|
+
children: /* @__PURE__ */ a.jsx(
|
|
83
|
+
u,
|
|
84
84
|
{
|
|
85
85
|
sx: {
|
|
86
86
|
width: 24,
|
|
@@ -100,69 +100,69 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
100
100
|
)
|
|
101
101
|
]
|
|
102
102
|
}
|
|
103
|
-
) : /* @__PURE__ */
|
|
104
|
-
|
|
103
|
+
) : /* @__PURE__ */ a.jsx(u, { onClick: r, sx: { width: "100%", height: "100%", ...o }, children: /* @__PURE__ */ a.jsx(
|
|
104
|
+
$,
|
|
105
105
|
{
|
|
106
|
-
src:
|
|
107
|
-
alt:
|
|
106
|
+
src: t.url,
|
|
107
|
+
alt: t.title || "",
|
|
108
108
|
width: "100%",
|
|
109
109
|
height: "100%",
|
|
110
110
|
style: {
|
|
111
111
|
objectFit: o != null && o.objectFit ? o.objectFit : "cover",
|
|
112
|
-
cursor:
|
|
112
|
+
cursor: r ? "pointer" : "default",
|
|
113
113
|
display: "block",
|
|
114
114
|
width: "100%",
|
|
115
115
|
height: "100%"
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
) });
|
|
119
|
-
}, C = (
|
|
120
|
-
let
|
|
119
|
+
}, C = (t, o) => {
|
|
120
|
+
let r = 1, e = 2;
|
|
121
121
|
switch (o) {
|
|
122
122
|
case "grid":
|
|
123
|
-
|
|
123
|
+
r = 1, e = 2;
|
|
124
124
|
break;
|
|
125
125
|
case "masonry":
|
|
126
|
-
|
|
126
|
+
r = 1, e = t % 3 === 0 ? 3 : t % 2 === 0 ? 2 : 4;
|
|
127
127
|
break;
|
|
128
128
|
case "spotlight":
|
|
129
|
-
|
|
129
|
+
t === 0 ? (r = 2, e = 4) : (r = 1, e = 2);
|
|
130
130
|
break;
|
|
131
131
|
case "featured":
|
|
132
|
-
|
|
132
|
+
t === 0 ? (r = 2, e = 6) : (r = 1, e = 2);
|
|
133
133
|
break;
|
|
134
134
|
case "highlight":
|
|
135
|
-
|
|
135
|
+
t === 0 ? (r = 3, e = 6) : (r = 1, e = 2);
|
|
136
136
|
break;
|
|
137
137
|
case "custom":
|
|
138
|
-
|
|
138
|
+
r = 1, e = 2;
|
|
139
139
|
break;
|
|
140
140
|
}
|
|
141
|
-
return { colSpan:
|
|
142
|
-
}, S = (
|
|
143
|
-
const { colSpan: n, rowSpan:
|
|
144
|
-
return { ...
|
|
145
|
-
}),
|
|
146
|
-
mediaItems:
|
|
141
|
+
return { colSpan: r, rowSpan: e };
|
|
142
|
+
}, S = (t, o) => o === "custom" ? t : t.map((r, e) => {
|
|
143
|
+
const { colSpan: n, rowSpan: s } = C(e, o);
|
|
144
|
+
return { ...r, colSpan: n, rowSpan: s };
|
|
145
|
+
}), w = ({
|
|
146
|
+
mediaItems: t,
|
|
147
147
|
variant: o = "masonry",
|
|
148
|
-
loading:
|
|
148
|
+
loading: r = !1,
|
|
149
149
|
skeletonCount: e = 6
|
|
150
150
|
}) => {
|
|
151
|
-
const [n,
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
-
}, [
|
|
155
|
-
/* @__PURE__ */
|
|
156
|
-
|
|
151
|
+
const [n, s] = g(null), [p, m] = g(() => S(t, o)), [l, h] = g(!1), d = N();
|
|
152
|
+
return v(() => {
|
|
153
|
+
m(S(t, o));
|
|
154
|
+
}, [t, o]), /* @__PURE__ */ a.jsxs(u, { sx: { width: "100%", position: "relative", zIndex: 1 }, children: [
|
|
155
|
+
/* @__PURE__ */ a.jsx(
|
|
156
|
+
A,
|
|
157
157
|
{
|
|
158
158
|
selectedItem: n,
|
|
159
159
|
isOpen: !!n,
|
|
160
|
-
onClose: () =>
|
|
161
|
-
onItemChange:
|
|
162
|
-
mediaItems:
|
|
160
|
+
onClose: () => s(null),
|
|
161
|
+
onItemChange: s,
|
|
162
|
+
mediaItems: p
|
|
163
163
|
}
|
|
164
164
|
),
|
|
165
|
-
/* @__PURE__ */
|
|
165
|
+
/* @__PURE__ */ a.jsx(q, { mode: "wait", children: !n && /* @__PURE__ */ a.jsx(
|
|
166
166
|
k.div,
|
|
167
167
|
{
|
|
168
168
|
initial: "hidden",
|
|
@@ -176,8 +176,8 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
176
176
|
// Stagger child animations
|
|
177
177
|
}
|
|
178
178
|
},
|
|
179
|
-
children: /* @__PURE__ */
|
|
180
|
-
|
|
179
|
+
children: /* @__PURE__ */ a.jsx(
|
|
180
|
+
u,
|
|
181
181
|
{
|
|
182
182
|
sx: {
|
|
183
183
|
display: "grid",
|
|
@@ -191,19 +191,19 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
191
191
|
position: "relative"
|
|
192
192
|
// Ensure proper stacking context
|
|
193
193
|
},
|
|
194
|
-
children:
|
|
195
|
-
const { colSpan:
|
|
196
|
-
return /* @__PURE__ */
|
|
194
|
+
children: r ? Array.from({ length: e }).map((i, c) => {
|
|
195
|
+
const { colSpan: x, rowSpan: y } = C(c, o);
|
|
196
|
+
return /* @__PURE__ */ a.jsx(
|
|
197
197
|
j,
|
|
198
198
|
{
|
|
199
199
|
sx: {
|
|
200
200
|
position: "relative",
|
|
201
201
|
overflow: "hidden",
|
|
202
202
|
borderRadius: 2,
|
|
203
|
-
gridRow: `span ${
|
|
204
|
-
gridColumn: `span ${
|
|
203
|
+
gridRow: `span ${y}`,
|
|
204
|
+
gridColumn: `span ${x}`
|
|
205
205
|
},
|
|
206
|
-
children: /* @__PURE__ */
|
|
206
|
+
children: /* @__PURE__ */ a.jsx(
|
|
207
207
|
R,
|
|
208
208
|
{
|
|
209
209
|
variant: "rectangular",
|
|
@@ -216,13 +216,13 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
216
216
|
}
|
|
217
217
|
)
|
|
218
218
|
},
|
|
219
|
-
|
|
219
|
+
c
|
|
220
220
|
);
|
|
221
|
-
}) :
|
|
221
|
+
}) : p.map((i, c) => /* @__PURE__ */ a.jsx(
|
|
222
222
|
k.div,
|
|
223
223
|
{
|
|
224
|
-
layoutId: `media-${
|
|
225
|
-
onClick: () => !
|
|
224
|
+
layoutId: `media-${i.id}-${d}`,
|
|
225
|
+
onClick: () => !l && s(i),
|
|
226
226
|
variants: {
|
|
227
227
|
hidden: { y: 50, scale: 0.9, opacity: 0 },
|
|
228
228
|
visible: {
|
|
@@ -233,7 +233,7 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
233
233
|
type: "spring",
|
|
234
234
|
stiffness: 350,
|
|
235
235
|
damping: 25,
|
|
236
|
-
delay:
|
|
236
|
+
delay: c * 0.05
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
},
|
|
@@ -241,21 +241,21 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
241
241
|
drag: !0,
|
|
242
242
|
dragConstraints: { left: 0, right: 0, top: 0, bottom: 0 },
|
|
243
243
|
dragElastic: 1,
|
|
244
|
-
onDragStart: () =>
|
|
245
|
-
onDragEnd: (
|
|
246
|
-
|
|
247
|
-
const I =
|
|
244
|
+
onDragStart: () => h(!0),
|
|
245
|
+
onDragEnd: (x, y) => {
|
|
246
|
+
h(!1);
|
|
247
|
+
const I = y.offset.x + y.offset.y;
|
|
248
248
|
if (Math.abs(I) > 50) {
|
|
249
|
-
const
|
|
250
|
-
|
|
249
|
+
const f = [...p], V = f[c], M = I > 0 ? Math.min(c + 1, p.length - 1) : Math.max(c - 1, 0);
|
|
250
|
+
f.splice(c, 1), f.splice(M, 0, V), m(f);
|
|
251
251
|
}
|
|
252
252
|
},
|
|
253
253
|
style: {
|
|
254
254
|
position: "relative",
|
|
255
|
-
gridRow:
|
|
256
|
-
gridColumn:
|
|
255
|
+
gridRow: i.rowSpan ? `span ${i.rowSpan}` : "span 2",
|
|
256
|
+
gridColumn: i.colSpan ? `span ${i.colSpan}` : "span 1"
|
|
257
257
|
},
|
|
258
|
-
children: /* @__PURE__ */
|
|
258
|
+
children: /* @__PURE__ */ a.jsxs(
|
|
259
259
|
j,
|
|
260
260
|
{
|
|
261
261
|
sx: {
|
|
@@ -271,16 +271,16 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
271
271
|
}
|
|
272
272
|
},
|
|
273
273
|
children: [
|
|
274
|
-
/* @__PURE__ */
|
|
275
|
-
|
|
274
|
+
/* @__PURE__ */ a.jsx(
|
|
275
|
+
b,
|
|
276
276
|
{
|
|
277
|
-
item:
|
|
277
|
+
item: i,
|
|
278
278
|
sx: { position: "absolute", inset: 0, width: "100%", height: "100%" },
|
|
279
|
-
onClick: () => !
|
|
279
|
+
onClick: () => !l && s(i)
|
|
280
280
|
}
|
|
281
281
|
),
|
|
282
|
-
(
|
|
283
|
-
|
|
282
|
+
(i.title || i.desc) && /* @__PURE__ */ a.jsxs(
|
|
283
|
+
u,
|
|
284
284
|
{
|
|
285
285
|
className: "hover-overlay",
|
|
286
286
|
sx: {
|
|
@@ -293,48 +293,35 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
293
293
|
pointerEvents: "none",
|
|
294
294
|
// Prevent blocking clicks
|
|
295
295
|
opacity: 0,
|
|
296
|
-
transition: "opacity 0.2s ease-in-out"
|
|
296
|
+
transition: "opacity 0.2s ease-in-out",
|
|
297
|
+
backdropFilter: "blur(8px)"
|
|
297
298
|
},
|
|
298
299
|
children: [
|
|
299
|
-
/* @__PURE__ */
|
|
300
|
-
s,
|
|
301
|
-
{
|
|
302
|
-
sx: {
|
|
303
|
-
position: "absolute",
|
|
304
|
-
inset: 0,
|
|
305
|
-
background: (m) => `linear-gradient(to top, ${(m.vars || m).palette.grey[900]}CC, ${(m.vars || m).palette.grey[900]}66, transparent)`
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
),
|
|
309
|
-
r.title && /* @__PURE__ */ t.jsx(
|
|
300
|
+
i.title && /* @__PURE__ */ a.jsx(
|
|
310
301
|
_,
|
|
311
302
|
{
|
|
312
303
|
variant: "subtitle2",
|
|
313
304
|
sx: {
|
|
314
305
|
position: "relative",
|
|
315
|
-
color: "primary.contrastText",
|
|
316
|
-
fontWeight: 600,
|
|
317
306
|
whiteSpace: "nowrap",
|
|
318
307
|
overflow: "hidden",
|
|
319
308
|
textOverflow: "ellipsis"
|
|
320
309
|
},
|
|
321
|
-
children:
|
|
310
|
+
children: i.title
|
|
322
311
|
}
|
|
323
312
|
),
|
|
324
|
-
|
|
313
|
+
i.desc && /* @__PURE__ */ a.jsx(
|
|
325
314
|
_,
|
|
326
315
|
{
|
|
327
316
|
variant: "caption",
|
|
328
317
|
sx: {
|
|
329
318
|
position: "relative",
|
|
330
|
-
color: "text.secondary",
|
|
331
|
-
mt: r.title ? 0.5 : 0,
|
|
332
319
|
display: "-webkit-box",
|
|
333
320
|
WebkitLineClamp: 2,
|
|
334
321
|
WebkitBoxOrient: "vertical",
|
|
335
322
|
overflow: "hidden"
|
|
336
323
|
},
|
|
337
|
-
children:
|
|
324
|
+
children: i.desc
|
|
338
325
|
}
|
|
339
326
|
)
|
|
340
327
|
]
|
|
@@ -344,7 +331,7 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
344
331
|
}
|
|
345
332
|
)
|
|
346
333
|
},
|
|
347
|
-
`${
|
|
334
|
+
`${i.id}-${d}`
|
|
348
335
|
))
|
|
349
336
|
}
|
|
350
337
|
)
|
|
@@ -352,9 +339,9 @@ const w = ({ item: a, sx: o, onClick: i }) => {
|
|
|
352
339
|
) })
|
|
353
340
|
] });
|
|
354
341
|
};
|
|
355
|
-
|
|
342
|
+
w.displayName = "SGallery";
|
|
356
343
|
try {
|
|
357
|
-
|
|
344
|
+
b.displayName = "MediaItem", b.__docgenInfo = { description: `MediaItem - Renders individual media items (images or videos) with optimized loading and playback.
|
|
358
345
|
|
|
359
346
|
For videos:
|
|
360
347
|
- Intersection Observer for viewport-based autoplay/pause
|
|
@@ -368,7 +355,7 @@ For images:
|
|
|
368
355
|
} catch {
|
|
369
356
|
}
|
|
370
357
|
try {
|
|
371
|
-
|
|
358
|
+
w.displayName = "SGallery", w.__docgenInfo = { description: "A sophisticated media gallery with drag-and-drop reordering, modal viewing, and multiple layout variants.", displayName: "SGallery", props: { mediaItems: { defaultValue: null, description: "Array of media items to display in the gallery", name: "mediaItems", required: !0, type: { name: "MediaItemType[]" } }, variant: { defaultValue: { value: "masonry" }, description: "Layout variant to use (default: 'masonry')", name: "variant", required: !1, type: { name: "enum", value: [{ value: '"grid"' }, { value: '"masonry"' }, { value: '"spotlight"' }, { value: '"featured"' }, { value: '"highlight"' }, { value: '"custom"' }] } }, loading: { defaultValue: { value: "false" }, description: "Loading state - shows skeleton placeholders matching the variant layout", name: "loading", required: !1, type: { name: "boolean" } }, skeletonCount: { defaultValue: { value: "6" }, description: "Number of skeleton items to show when loading (default: 6)", name: "skeletonCount", required: !1, type: { name: "number" } } } };
|
|
372
359
|
} catch {
|
|
373
360
|
}
|
|
374
361
|
try {
|
|
@@ -376,7 +363,7 @@ try {
|
|
|
376
363
|
} catch {
|
|
377
364
|
}
|
|
378
365
|
export {
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
366
|
+
b as MediaItem,
|
|
367
|
+
w as SGallery,
|
|
368
|
+
w as default
|
|
382
369
|
};
|
|
@@ -10,12 +10,18 @@ export interface SGlowButtonProps extends ButtonProps {
|
|
|
10
10
|
children: React.ReactNode;
|
|
11
11
|
/** Duration of the moving border animation in milliseconds (defaults to 6000ms) */
|
|
12
12
|
duration?: number;
|
|
13
|
+
/** Button width (defaults to 'fit-content') */
|
|
14
|
+
width?: string;
|
|
15
|
+
/** Size of the glow effect in pixels (defaults to 60) */
|
|
16
|
+
glowSize?: number;
|
|
17
|
+
/** Color of the glow effect (defaults to blue[500]) */
|
|
18
|
+
glowColor?: string;
|
|
13
19
|
}
|
|
14
20
|
/**
|
|
15
21
|
* A visually striking button with animated glowing border effects and gradient text.
|
|
16
22
|
*/
|
|
17
23
|
declare const SGlowButton: {
|
|
18
|
-
({ borderRadius, children, duration, ...props }: SGlowButtonProps): React.JSX.Element;
|
|
24
|
+
({ borderRadius, children, duration, width, glowSize, glowColor, ...props }: SGlowButtonProps): React.JSX.Element;
|
|
19
25
|
displayName: string;
|
|
20
26
|
};
|
|
21
27
|
export default SGlowButton;
|