@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.
Files changed (36) hide show
  1. package/dist/s-ai-tool-bar/s-ai-tool-bar.d.ts +2 -4
  2. package/dist/s-ai-tool-bar/s-ai-tool-bar.js +253 -287
  3. package/dist/s-blur-text/s-blur-text.js +19 -20
  4. package/dist/s-breadcrumbs/s-breadcrumbs.js +2 -2
  5. package/dist/s-button-link/s-button-link.js +2 -2
  6. package/dist/s-category-card/s-category-card.js +2 -2
  7. package/dist/s-chat-input/s-chat-input.js +29 -29
  8. package/dist/s-chat-message/s-chat-message.js +73 -151
  9. package/dist/s-comment-message/s-comment-message.js +9 -9
  10. package/dist/s-countdown/s-count-box.js +2 -2
  11. package/dist/s-countdown/s-count-down.js +2 -2
  12. package/dist/s-error-layout/s-error-layout.js +2 -2
  13. package/dist/s-gallery/s-gallery.js +106 -119
  14. package/dist/s-glow-button/s-glow-button.d.ts +7 -1
  15. package/dist/s-glow-button/s-glow-button.js +39 -189
  16. package/dist/s-gradient-icon/s-gradient-icon.js +2 -2
  17. package/dist/s-moving-border/s-moving-border.d.ts +1 -1
  18. package/dist/s-moving-border/s-moving-border.js +34 -34
  19. package/dist/s-review/s-review.js +28 -28
  20. package/dist/s-scroll-reveal/s-scroll-reveal.js +2 -2
  21. package/dist/s-skeleton/s-skeleton.js +2 -2
  22. package/dist/s-stripe/s-stripe.js +2 -2
  23. package/dist/s-text-shimmer/s-text-shimmer.d.ts +2 -2
  24. package/dist/s-text-shimmer/s-text-shimmer.js +13 -13
  25. package/dist/s-text-truncation/s-text-truncation.js +1 -1
  26. package/dist/s-theme-demo/s-theme-demo.js +105 -142
  27. package/dist/s-theme-provider/s-theme-provider.js +2 -2
  28. package/dist/s-theme-switch/s-theme-switch.js +1 -1
  29. package/dist/s-two-pane-layout/index.js +1 -1
  30. package/dist/s-two-pane-layout/s-two-pane-layout.js +2 -2
  31. package/dist/s-typewriter-text/s-typewriter-text.js +8 -8
  32. package/dist/s-zoom-image/index.js +1 -1
  33. package/dist/s-zoom-image/s-zoom-image.js +2 -2
  34. package/dist/theme/theme-primitives.d.ts +6 -0
  35. package/dist/theme/theme-primitives.js +51 -45
  36. package/package.json +1 -1
@@ -1,41 +1,41 @@
1
- import { j as t } from "../jsx-runtime-OVHDjVDe.js";
2
- import { useRef as L, useState as h, useEffect as b, useId as N } from "react";
3
- import { Box as s, Paper as j, Skeleton as R, Typography as _ } from "@mui/material";
4
- import { AnimatePresence as $, motion as k } from "framer-motion";
5
- import { SImageModal as q } from "../s-image-modal/s-image-modal.js";
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 A from "../s-lazy-image/s-lazy-image.js";
8
- const w = ({ item: a, sx: o, onClick: i }) => {
9
- const e = L(null), [n, l] = h(!1), [u, g] = h(!0);
10
- return b(() => {
11
- const d = {
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
- }, y = new IntersectionObserver((c) => {
18
- c.forEach((r) => l(r.isIntersecting));
19
- }, d);
20
- return e.current && y.observe(e.current), () => {
21
- e.current && y.unobserve(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
- }, []), b(() => {
24
- let d = !0;
23
+ }, []), v(() => {
24
+ let l = !0;
25
25
  return n ? (async () => {
26
- if (!(!e.current || !n || !d))
26
+ if (!(!e.current || !n || !l))
27
27
  try {
28
- e.current.readyState >= 3 ? (g(!1), await e.current.play()) : (g(!0), await new Promise((c) => {
29
- e.current && (e.current.oncanplay = () => c());
30
- }), d && (g(!1), await e.current.play()));
31
- } catch (c) {
32
- console.warn("Video playback failed:", c);
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
- d = !1, e.current && (e.current.pause(), e.current.removeAttribute("src"), e.current.load());
35
+ l = !1, e.current && (e.current.pause(), e.current.removeAttribute("src"), e.current.load());
36
36
  };
37
- }, [n]), a.type === "video" ? /* @__PURE__ */ t.jsxs(
38
- s,
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__ */ t.jsx(
49
- s,
48
+ /* @__PURE__ */ a.jsx(
49
+ u,
50
50
  {
51
51
  component: "video",
52
52
  ref: e,
53
- onClick: i,
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: u ? 0.8 : 1,
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__ */ t.jsx("source", { src: a.url, type: "video/mp4" })
68
+ children: /* @__PURE__ */ a.jsx("source", { src: t.url, type: "video/mp4" })
69
69
  }
70
70
  ),
71
- u && /* @__PURE__ */ t.jsx(
72
- s,
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__ */ t.jsx(
83
- s,
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__ */ t.jsx(s, { onClick: i, sx: { width: "100%", height: "100%", ...o }, children: /* @__PURE__ */ t.jsx(
104
- A,
103
+ ) : /* @__PURE__ */ a.jsx(u, { onClick: r, sx: { width: "100%", height: "100%", ...o }, children: /* @__PURE__ */ a.jsx(
104
+ $,
105
105
  {
106
- src: a.url,
107
- alt: a.title || "",
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: i ? "pointer" : "default",
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 = (a, o) => {
120
- let i = 1, e = 2;
119
+ }, C = (t, o) => {
120
+ let r = 1, e = 2;
121
121
  switch (o) {
122
122
  case "grid":
123
- i = 1, e = 2;
123
+ r = 1, e = 2;
124
124
  break;
125
125
  case "masonry":
126
- i = 1, e = a % 3 === 0 ? 3 : a % 2 === 0 ? 2 : 4;
126
+ r = 1, e = t % 3 === 0 ? 3 : t % 2 === 0 ? 2 : 4;
127
127
  break;
128
128
  case "spotlight":
129
- a === 0 ? (i = 2, e = 4) : (i = 1, e = 2);
129
+ t === 0 ? (r = 2, e = 4) : (r = 1, e = 2);
130
130
  break;
131
131
  case "featured":
132
- a === 0 ? (i = 2, e = 6) : (i = 1, e = 2);
132
+ t === 0 ? (r = 2, e = 6) : (r = 1, e = 2);
133
133
  break;
134
134
  case "highlight":
135
- a === 0 ? (i = 3, e = 6) : (i = 1, e = 2);
135
+ t === 0 ? (r = 3, e = 6) : (r = 1, e = 2);
136
136
  break;
137
137
  case "custom":
138
- i = 1, e = 2;
138
+ r = 1, e = 2;
139
139
  break;
140
140
  }
141
- return { colSpan: i, rowSpan: e };
142
- }, S = (a, o) => o === "custom" ? a : a.map((i, e) => {
143
- const { colSpan: n, rowSpan: l } = C(e, o);
144
- return { ...i, colSpan: n, rowSpan: l };
145
- }), x = ({
146
- mediaItems: a,
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: i = !1,
148
+ loading: r = !1,
149
149
  skeletonCount: e = 6
150
150
  }) => {
151
- const [n, l] = h(null), [u, g] = h(() => S(a, o)), [d, y] = h(!1), c = N();
152
- return b(() => {
153
- g(S(a, o));
154
- }, [a, o]), /* @__PURE__ */ t.jsxs(s, { sx: { width: "100%", position: "relative", zIndex: 1 }, children: [
155
- /* @__PURE__ */ t.jsx(
156
- q,
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: () => l(null),
161
- onItemChange: l,
162
- mediaItems: u
160
+ onClose: () => s(null),
161
+ onItemChange: s,
162
+ mediaItems: p
163
163
  }
164
164
  ),
165
- /* @__PURE__ */ t.jsx($, { mode: "wait", children: !n && /* @__PURE__ */ t.jsx(
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__ */ t.jsx(
180
- s,
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: i ? Array.from({ length: e }).map((r, p) => {
195
- const { colSpan: m, rowSpan: f } = C(p, o);
196
- return /* @__PURE__ */ t.jsx(
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 ${f}`,
204
- gridColumn: `span ${m}`
203
+ gridRow: `span ${y}`,
204
+ gridColumn: `span ${x}`
205
205
  },
206
- children: /* @__PURE__ */ t.jsx(
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
- p
219
+ c
220
220
  );
221
- }) : u.map((r, p) => /* @__PURE__ */ t.jsx(
221
+ }) : p.map((i, c) => /* @__PURE__ */ a.jsx(
222
222
  k.div,
223
223
  {
224
- layoutId: `media-${r.id}-${c}`,
225
- onClick: () => !d && l(r),
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: p * 0.05
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: () => y(!0),
245
- onDragEnd: (m, f) => {
246
- y(!1);
247
- const I = f.offset.x + f.offset.y;
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 v = [...u], V = v[p], M = I > 0 ? Math.min(p + 1, u.length - 1) : Math.max(p - 1, 0);
250
- v.splice(p, 1), v.splice(M, 0, V), g(v);
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: r.rowSpan ? `span ${r.rowSpan}` : "span 2",
256
- gridColumn: r.colSpan ? `span ${r.colSpan}` : "span 1"
255
+ gridRow: i.rowSpan ? `span ${i.rowSpan}` : "span 2",
256
+ gridColumn: i.colSpan ? `span ${i.colSpan}` : "span 1"
257
257
  },
258
- children: /* @__PURE__ */ t.jsxs(
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__ */ t.jsx(
275
- w,
274
+ /* @__PURE__ */ a.jsx(
275
+ b,
276
276
  {
277
- item: r,
277
+ item: i,
278
278
  sx: { position: "absolute", inset: 0, width: "100%", height: "100%" },
279
- onClick: () => !d && l(r)
279
+ onClick: () => !l && s(i)
280
280
  }
281
281
  ),
282
- (r.title || r.desc) && /* @__PURE__ */ t.jsxs(
283
- s,
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__ */ t.jsx(
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: r.title
310
+ children: i.title
322
311
  }
323
312
  ),
324
- r.desc && /* @__PURE__ */ t.jsx(
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: r.desc
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
- `${r.id}-${c}`
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
- x.displayName = "SGallery";
342
+ w.displayName = "SGallery";
356
343
  try {
357
- w.displayName = "MediaItem", w.__docgenInfo = { description: `MediaItem - Renders individual media items (images or videos) with optimized loading and playback.
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
- x.displayName = "SGallery", x.__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" } } } };
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
- w as MediaItem,
380
- x as SGallery,
381
- x as default
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;