@solostylist/ui-kit 1.0.82 → 1.0.84

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.
@@ -2,7 +2,7 @@ import { j as s } from "../jsx-runtime-DywqP_6a.js";
2
2
  import { useRef as S, useState as m, useEffect as v } from "react";
3
3
  import { Box as a, Chip as h, Tooltip as E } from "@mui/material";
4
4
  const L = ({ chips: n, overflow: r = !0, onClick: l, overflowText: c = "keywords" }) => {
5
- const u = S(null), [C, w] = m([]), [W, j] = m([]), [x, y] = m(0), p = () => {
5
+ const u = S(null), [w, C] = m([]), [W, j] = m([]), [x, y] = m(0), p = () => {
6
6
  var f;
7
7
  const t = ((f = u.current) == null ? void 0 : f.offsetWidth) || 0;
8
8
  let e = 0, i = 0;
@@ -18,7 +18,7 @@ const L = ({ chips: n, overflow: r = !0, onClick: l, overflowText: c = "keywords
18
18
  for (; e + o > t && i > 0; )
19
19
  i--, e -= d(n[i]);
20
20
  }
21
- w(n.slice(0, i)), j(n.slice(i)), y(n.length - i);
21
+ C(n.slice(0, i)), j(n.slice(i)), y(n.length - i);
22
22
  }, d = (t) => {
23
23
  const e = document.createElement("span");
24
24
  e.style.visibility = "hidden", e.style.position = "absolute", e.style.whiteSpace = "nowrap", e.textContent = t.trim(), document.body.appendChild(e);
@@ -31,7 +31,7 @@ const L = ({ chips: n, overflow: r = !0, onClick: l, overflowText: c = "keywords
31
31
  window.removeEventListener("resize", p);
32
32
  };
33
33
  }, [n, r]), /* @__PURE__ */ s.jsxs(a, { ref: u, display: "flex", maxWidth: "100%", flexWrap: r ? "nowrap" : "wrap", ...g, children: [
34
- (r ? C : n).map((t) => /* @__PURE__ */ s.jsx(
34
+ (r ? w : n).map((t) => /* @__PURE__ */ s.jsx(
35
35
  a,
36
36
  {
37
37
  component: "span",
@@ -60,6 +60,8 @@ const L = ({ chips: n, overflow: r = !0, onClick: l, overflowText: c = "keywords
60
60
  slotProps: {
61
61
  tooltip: { style: { padding: "0.5rem" } }
62
62
  },
63
+ arrow: !0,
64
+ placement: "top",
63
65
  title: /* @__PURE__ */ s.jsx(a, { display: "flex", gap: 1, maxWidth: "240px", flexWrap: "wrap", children: W.map((t) => /* @__PURE__ */ s.jsx(h, { label: t.trim() }, t)) }),
64
66
  children: /* @__PURE__ */ s.jsx(a, { component: "span", textTransform: "lowercase", children: /* @__PURE__ */ s.jsx(
65
67
  h,
@@ -1,25 +1,25 @@
1
1
  import { j as e } from "../jsx-runtime-DywqP_6a.js";
2
- import { useState as l } from "react";
3
- import { Paper as x, Box as m, IconButton as h, Typography as u } from "@mui/material";
4
- import { c } from "../createSvgIcon-9XY7lJan.js";
5
- const p = c(/* @__PURE__ */ e.jsx("path", {
2
+ import { useState as x } from "react";
3
+ import { Paper as d, Box as m, IconButton as h, Typography as u } from "@mui/material";
4
+ import { c as n } from "../createSvgIcon-9XY7lJan.js";
5
+ const f = n(/* @__PURE__ */ e.jsx("path", {
6
6
  d: "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"
7
- }), "Check"), f = c(/* @__PURE__ */ e.jsx("path", {
7
+ }), "Check"), j = n(/* @__PURE__ */ e.jsx("path", {
8
8
  d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"
9
- }), "ContentCopy"), w = ({ text: r, typographyProps: t, onCopied: o, paperProps: i }) => {
10
- const [s, a] = l(!1), n = async () => {
9
+ }), "ContentCopy"), w = ({ text: r, typographyProps: t, onCopied: o, paperProps: a }) => {
10
+ const [s, c] = x(!1), i = async () => {
11
11
  if (r)
12
12
  try {
13
- await navigator.clipboard.writeText(r), a(!0), setTimeout(() => a(!1), 2e3), o == null || o();
14
- } catch (d) {
15
- console.error("Failed to copy text:", d);
13
+ await navigator.clipboard.writeText(r), c(!0), setTimeout(() => c(!1), 2e3), o == null || o();
14
+ } catch (l) {
15
+ console.error("Failed to copy text:", l);
16
16
  }
17
17
  };
18
- return r ? /* @__PURE__ */ e.jsx(x, { sx: { p: 2, border: "1px dashed", borderColor: "divider" }, ...i, children: /* @__PURE__ */ e.jsxs(m, { sx: { position: "relative" }, children: [
18
+ return r ? /* @__PURE__ */ e.jsx(d, { sx: { p: 2, border: "1px dashed", borderColor: "divider" }, ...a, children: /* @__PURE__ */ e.jsxs(m, { sx: { position: "relative" }, children: [
19
19
  /* @__PURE__ */ e.jsx(
20
20
  h,
21
21
  {
22
- onClick: n,
22
+ onClick: i,
23
23
  size: "small",
24
24
  sx: {
25
25
  position: "absolute",
@@ -31,7 +31,7 @@ const p = c(/* @__PURE__ */ e.jsx("path", {
31
31
  color: s ? "success.main" : "inherit"
32
32
  // Green when copied
33
33
  },
34
- children: s ? /* @__PURE__ */ e.jsx(p, {}) : /* @__PURE__ */ e.jsx(f, {})
34
+ children: s ? /* @__PURE__ */ e.jsx(f, {}) : /* @__PURE__ */ e.jsx(j, {})
35
35
  }
36
36
  ),
37
37
  /* @__PURE__ */ e.jsx(
@@ -39,14 +39,8 @@ const p = c(/* @__PURE__ */ e.jsx("path", {
39
39
  {
40
40
  variant: "body1",
41
41
  sx: {
42
- marginBottom: 0,
43
42
  whiteSpace: "pre-wrap",
44
43
  // Preserve whitespace and line breaks
45
- padding: 2,
46
- // Inner spacing
47
- borderRadius: 1,
48
- border: "1px solid var(--s-palette-divider)",
49
- // Theme-aware border
50
44
  wordBreak: "break-word",
51
45
  // Handle long words gracefully
52
46
  ...t == null ? void 0 : t.sx
@@ -5,8 +5,8 @@ import { Dialog as g, DialogTitle as j, Stack as D, IconButton as v, DialogConte
5
5
  import { useDialog as k } from "../hooks/use-dialog.js";
6
6
  import { T as m } from "../Typography-CeAbQ9LX.js";
7
7
  const w = ({
8
- title: o,
9
- content: e,
8
+ title: e,
9
+ content: o,
10
10
  onConfirm: s = () => {
11
11
  },
12
12
  onClose: i = () => {
@@ -16,17 +16,17 @@ const w = ({
16
16
  showClose: c = !0,
17
17
  loading: l = !1
18
18
  }) => /* @__PURE__ */ n.jsxs(g, { fullWidth: !0, maxWidth: a, onClose: i, open: t, children: [
19
- o && /* @__PURE__ */ n.jsx(j, { children: /* @__PURE__ */ n.jsxs(D, { direction: "row", spacing: 3, sx: { alignItems: "center", justifyContent: "space-between" }, children: [
20
- typeof o == "string" ? /* @__PURE__ */ n.jsx(m, { variant: "h5", textTransform: "capitalize", children: o }) : /* @__PURE__ */ n.jsx("div", { children: o }),
19
+ e && /* @__PURE__ */ n.jsx(j, { children: /* @__PURE__ */ n.jsxs(D, { direction: "row", spacing: 3, sx: { alignItems: "center", justifyContent: "space-between" }, children: [
20
+ typeof e == "string" ? /* @__PURE__ */ n.jsx(m, { variant: "h5", textTransform: "capitalize", children: e }) : /* @__PURE__ */ n.jsx("div", { children: e }),
21
21
  c && /* @__PURE__ */ n.jsx(v, { onClick: i, children: /* @__PURE__ */ n.jsx(p, {}) })
22
22
  ] }) }),
23
- e && /* @__PURE__ */ n.jsx(y, { children: typeof e == "string" ? /* @__PURE__ */ n.jsx(m, { color: "text.secondary", variant: "body2", children: e }) : e }),
23
+ o && /* @__PURE__ */ n.jsx(y, { children: typeof o == "string" ? /* @__PURE__ */ n.jsx(m, { color: "text.secondary", variant: "body2", children: o }) : o }),
24
24
  /* @__PURE__ */ n.jsx(b, { children: /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
25
25
  /* @__PURE__ */ n.jsx(d, { onClick: i, variant: "outlined", disabled: l, children: "Cancel" }),
26
- /* @__PURE__ */ n.jsx(d, { onClick: s, disabled: l, children: "Confirm" })
26
+ /* @__PURE__ */ n.jsx(d, { onClick: s, loading: l, children: "Confirm" })
27
27
  ] }) })
28
- ] }), f = r.createContext(null), E = ({ children: o }) => {
29
- const e = k(), [s, i] = r.useState(!1), [t, a] = r.useState({
28
+ ] }), f = r.createContext(null), E = ({ children: e }) => {
29
+ const o = k(), [s, i] = r.useState(!1), [t, a] = r.useState({
30
30
  title: "",
31
31
  content: "",
32
32
  onConfirm: () => {
@@ -35,12 +35,12 @@ const w = ({
35
35
  handleOpen: r.useCallback(
36
36
  (x) => {
37
37
  const { title: C, content: h, onConfirm: u } = x;
38
- a({ title: C, content: h, onConfirm: u }), e.handleOpen();
38
+ a({ title: C, content: h, onConfirm: u }), o.handleOpen();
39
39
  },
40
- [e]
40
+ [o]
41
41
  ),
42
- handleClose: e.handleClose,
43
- open: e.open,
42
+ handleClose: o.handleClose,
43
+ open: o.open,
44
44
  loading: s,
45
45
  setLoading: i
46
46
  }, l = () => {
@@ -50,21 +50,21 @@ const w = ({
50
50
  /* @__PURE__ */ n.jsx(
51
51
  w,
52
52
  {
53
- open: e.open,
53
+ open: o.open,
54
54
  title: t == null ? void 0 : t.title,
55
55
  content: t == null ? void 0 : t.content,
56
- onClose: e.handleClose,
56
+ onClose: o.handleClose,
57
57
  onConfirm: l,
58
58
  loading: s
59
59
  }
60
60
  ),
61
- o
61
+ e
62
62
  ] });
63
63
  }, O = () => {
64
- const o = r.useContext(f);
65
- if (!o)
64
+ const e = r.useContext(f);
65
+ if (!e)
66
66
  throw new Error("useDialogConfirm must be used within a DialogConfirmProvider");
67
- return o;
67
+ return e;
68
68
  };
69
69
  export {
70
70
  E as DialogConfirmProvider,
@@ -15,8 +15,8 @@ export type CustomFile = File | FileWithPath | {
15
15
  * Props for the SFileDropzone component, extending react-dropzone options
16
16
  */
17
17
  export interface SFileDropzoneProps extends DropzoneOptions {
18
- /** Additional caption text displayed below the main upload message */
19
- caption?: string;
18
+ /** Additional hint text displayed below the main upload message */
19
+ hint?: string;
20
20
  /** Array of files currently selected/uploaded */
21
21
  files?: CustomFile[];
22
22
  /** Callback when a single file is removed */
@@ -52,7 +52,7 @@ export interface SFileDropzoneProps extends DropzoneOptions {
52
52
  * Built on react-dropzone for robust file handling and supports all dropzone options
53
53
  * including file type restrictions, size limits, and custom validation.
54
54
  *
55
- * @param caption - Additional descriptive text below main upload message
55
+ * @param hint - Additional descriptive text below main upload message
56
56
  * @param label - Form field label
57
57
  * @param error - Error message to display when validation fails
58
58
  * @param onRemoveAll - Handler for removing all selected files
@@ -68,7 +68,7 @@ export interface SFileDropzoneProps extends DropzoneOptions {
68
68
  * ```tsx
69
69
  * <SFileDropzone
70
70
  * label="Upload Documents"
71
- * caption="PDF, DOC, or TXT files only"
71
+ * hint="PDF, DOC, or TXT files only"
72
72
  * accept={{
73
73
  * 'application/pdf': ['.pdf'],
74
74
  * 'application/msword': ['.doc', '.docx'],
@@ -83,5 +83,5 @@ export interface SFileDropzoneProps extends DropzoneOptions {
83
83
  * />
84
84
  * ```
85
85
  */
86
- declare const SFileDropzone: ({ caption, label, error, onRemoveAll, onUpload, onRemove, required, disabledUpload, isShowBtnRemoveAll, ...props }: SFileDropzoneProps) => React.JSX.Element;
86
+ declare const SFileDropzone: ({ hint, label, error, onRemoveAll, onUpload, onRemove, required, disabledUpload, isShowBtnRemoveAll, ...props }: SFileDropzoneProps) => React.JSX.Element;
87
87
  export default SFileDropzone;
@@ -1,34 +1,35 @@
1
1
  import { j as e } from "../jsx-runtime-DywqP_6a.js";
2
- import { c as p } from "../createSvgIcon-9XY7lJan.js";
3
- import { Avatar as y, Tooltip as b, IconButton as C, Button as I } from "@mui/material";
4
- import { useDropzone as z } from "react-dropzone";
5
- import S from "../s-file-icon/s-file-icon.js";
6
- import k from "../s-form/s-form.js";
7
- import { bytesToSize as w } from "../utils/bytes-to-size.js";
2
+ import * as y from "react";
3
+ import { c as d } from "../createSvgIcon-9XY7lJan.js";
4
+ import { Avatar as b, Tooltip as C, IconButton as I, Button as z } from "@mui/material";
5
+ import { useDropzone as S } from "react-dropzone";
6
+ import k from "../s-file-icon/s-file-icon.js";
7
+ import w from "../s-form/s-form.js";
8
+ import { bytesToSize as B } from "../utils/bytes-to-size.js";
9
+ import { B as c } from "../Box-Bfkq7uIw.js";
8
10
  import { S as t } from "../Stack-W0weBtf9.js";
9
- import { B as d } from "../Box-Bfkq7uIw.js";
10
11
  import { T as o } from "../Typography-CeAbQ9LX.js";
11
- const B = p(/* @__PURE__ */ e.jsx("path", {
12
+ const D = d(/* @__PURE__ */ e.jsx("path", {
12
13
  d: "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
13
- }), "CloseOutlined"), D = p(/* @__PURE__ */ e.jsx("path", {
14
+ }), "CloseOutlined"), F = d(/* @__PURE__ */ e.jsx("path", {
14
15
  d: "M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M19 18H6c-2.21 0-4-1.79-4-4 0-2.05 1.53-3.76 3.56-3.97l1.07-.11.5-.95C8.08 7.14 9.94 6 12 6c2.62 0 4.88 1.86 5.39 4.43l.3 1.5 1.53.11c1.56.1 2.78 1.41 2.78 2.96 0 1.65-1.35 3-3 3M8 13h2.55v3h2.9v-3H16l-4-4z"
15
- }), "CloudUploadOutlined"), G = ({
16
- caption: i,
16
+ }), "CloudUploadOutlined"), J = ({
17
+ hint: p,
17
18
  label: x = "",
18
19
  error: m,
19
- onRemoveAll: u,
20
+ onRemoveAll: h,
20
21
  onUpload: M,
21
22
  onRemove: s,
22
- required: h = !1,
23
+ required: u = !1,
23
24
  disabledUpload: O = !1,
24
25
  isShowBtnRemoveAll: j = !1,
25
26
  ...n
26
27
  }) => {
27
- var a, c;
28
- const { getRootProps: g, getInputProps: f, isDragActive: l } = z(n);
29
- return /* @__PURE__ */ e.jsxs(k, { error: m, label: x, required: h, children: [
30
- /* @__PURE__ */ e.jsx(t, { spacing: 2, mt: "0.5rem", children: /* @__PURE__ */ e.jsxs(
31
- d,
28
+ var a, l;
29
+ const { getRootProps: f, getInputProps: g, isDragActive: i } = S(n);
30
+ return /* @__PURE__ */ e.jsxs(y.Fragment, { children: [
31
+ /* @__PURE__ */ e.jsx(w, { error: m, label: x, required: u, hint: p, children: /* @__PURE__ */ e.jsxs(
32
+ c,
32
33
  {
33
34
  sx: {
34
35
  alignItems: "center",
@@ -41,45 +42,43 @@ const B = p(/* @__PURE__ */ e.jsx("path", {
41
42
  outline: "none",
42
43
  p: 4,
43
44
  // Visual feedback when files are being dragged over
44
- ...l && {
45
+ ...i && {
45
46
  bgcolor: "var(--s-palette-action-selected)",
46
47
  opacity: 0.5
47
48
  },
48
49
  // Hover effect when not actively dragging
49
50
  "&:hover": {
50
- ...!l && {
51
+ ...!i && {
51
52
  bgcolor: "var(--s-palette-action-hover)"
52
53
  }
53
54
  }
54
55
  },
55
- ...g(),
56
+ ...f(),
56
57
  children: [
57
- /* @__PURE__ */ e.jsx("input", { ...f() }),
58
- /* @__PURE__ */ e.jsxs(t, { direction: "row", spacing: 2, sx: { alignItems: "center" }, children: [
58
+ /* @__PURE__ */ e.jsx("input", { ...g() }),
59
+ /* @__PURE__ */ e.jsxs(t, { direction: "row", spacing: 1, sx: { alignItems: "center" }, children: [
59
60
  /* @__PURE__ */ e.jsx(
60
- y,
61
+ b,
61
62
  {
62
63
  sx: {
63
- bgcolor: "var(--s-palette-background-paper)",
64
- color: "var(--s-palette-text-secondary)"
64
+ border: "1px dashed var(--s-palette-divider)",
65
+ color: "var(--s-palette-text-secondary)",
66
+ backgroundColor: "transparent"
65
67
  },
66
- children: /* @__PURE__ */ e.jsx(D, {})
68
+ children: /* @__PURE__ */ e.jsx(F, { fontSize: "small" })
67
69
  }
68
70
  ),
69
- /* @__PURE__ */ e.jsxs(t, { spacing: 1, children: [
70
- /* @__PURE__ */ e.jsxs(o, { color: "text.secondary", variant: "body2", children: [
71
- /* @__PURE__ */ e.jsx(o, { component: "span", sx: { textDecoration: "underline" }, variant: "inherit", children: "Click to upload" }),
72
- " ",
73
- "or drag and drop your files here"
74
- ] }),
75
- i ? /* @__PURE__ */ e.jsx(o, { color: "text.secondary", variant: "body2", children: i }) : null
76
- ] })
71
+ /* @__PURE__ */ e.jsx(t, { spacing: 1, children: /* @__PURE__ */ e.jsxs(o, { color: "text.secondary", variant: "body2", children: [
72
+ /* @__PURE__ */ e.jsx(o, { component: "span", sx: { textDecoration: "underline" }, variant: "inherit", children: "Click to upload" }),
73
+ " ",
74
+ "or drag and drop your files here"
75
+ ] }) })
77
76
  ] })
78
77
  ]
79
78
  }
80
79
  ) }),
81
- (a = n.files) != null && a.length ? /* @__PURE__ */ e.jsxs(t, { mt: 2, spacing: 2, children: [
82
- /* @__PURE__ */ e.jsx(t, { component: "ul", spacing: 1, sx: { listStyle: "none", m: 0, p: 0 }, children: (c = n.files) == null ? void 0 : c.map((r) => {
80
+ (a = n.files) != null && a.length ? /* @__PURE__ */ e.jsxs(t, { mt: 1, spacing: 1, children: [
81
+ /* @__PURE__ */ e.jsx(t, { component: "ul", spacing: 1, sx: { listStyle: "none", m: 0, p: 0 }, children: (l = n.files) == null ? void 0 : l.map((r) => {
83
82
  const v = r.name.split(".").pop();
84
83
  return /* @__PURE__ */ e.jsxs(
85
84
  t,
@@ -95,18 +94,18 @@ const B = p(/* @__PURE__ */ e.jsx("path", {
95
94
  p: 1
96
95
  },
97
96
  children: [
98
- /* @__PURE__ */ e.jsx(S, { extension: v }),
99
- /* @__PURE__ */ e.jsxs(d, { sx: { flex: "1 1 auto" }, children: [
97
+ /* @__PURE__ */ e.jsx(k, { extension: v }),
98
+ /* @__PURE__ */ e.jsxs(c, { sx: { flex: "1 1 auto" }, children: [
100
99
  /* @__PURE__ */ e.jsx(o, { variant: "subtitle2", children: r.name }),
101
- /* @__PURE__ */ e.jsx(o, { color: "text.secondary", variant: "body2", children: w(r.size) })
100
+ /* @__PURE__ */ e.jsx(o, { color: "text.secondary", variant: "body2", children: B(r.size) })
102
101
  ] }),
103
- /* @__PURE__ */ e.jsx(b, { title: "Remove", children: /* @__PURE__ */ e.jsx(
104
- C,
102
+ /* @__PURE__ */ e.jsx(C, { title: "Remove", children: /* @__PURE__ */ e.jsx(
103
+ I,
105
104
  {
106
105
  onClick: () => {
107
106
  s == null || s(r);
108
107
  },
109
- children: /* @__PURE__ */ e.jsx(B, {})
108
+ children: /* @__PURE__ */ e.jsx(D, {})
110
109
  }
111
110
  ) })
112
111
  ]
@@ -114,10 +113,10 @@ const B = p(/* @__PURE__ */ e.jsx("path", {
114
113
  r.size
115
114
  );
116
115
  }) }),
117
- /* @__PURE__ */ e.jsx(t, { direction: "row", spacing: 2, sx: { alignItems: "center", justifyContent: "flex-end" }, children: j && /* @__PURE__ */ e.jsx(I, { onClick: u, size: "small", type: "button", variant: "text", children: "Remove all" }) })
116
+ /* @__PURE__ */ e.jsx(t, { direction: "row", sx: { alignItems: "center", justifyContent: "flex-end" }, children: j && /* @__PURE__ */ e.jsx(z, { onClick: h, size: "small", type: "button", variant: "text", children: "Remove all" }) })
118
117
  ] }) : null
119
118
  ] });
120
119
  };
121
120
  export {
122
- G as default
121
+ J as default
123
122
  };