@versini/ui-button 7.1.6 → 8.0.0

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.
@@ -1,32 +1,132 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import { IconCopied as f, IconCopy as p } from "@versini/ui-icons";
3
- import l, { useState as c, useEffect as d } from "react";
4
- import { ButtonIcon as m } from "./ButtonIcon.js";
5
- const u = l.forwardRef(({ copyToClipboard: t, ...n }, s) => {
6
- const [e, o] = c(!1), a = () => {
7
- typeof t == "string" && (navigator.clipboard.writeText(t), o(!0)), typeof t == "function" && (navigator.clipboard.writeText(t()), o(!0));
1
+ import { jsxs as r, jsx as o } from "react/jsx-runtime";
2
+ import h, { useState as w, useEffect as u } from "react";
3
+ import { ButtonIcon as f } from "./ButtonIcon.js";
4
+ import _ from "clsx";
5
+ const m = ({
6
+ children: e,
7
+ fill: c,
8
+ viewBox: s,
9
+ className: i,
10
+ defaultViewBox: t,
11
+ size: a,
12
+ title: l,
13
+ semantic: n = !1,
14
+ ...d
15
+ }) => {
16
+ const p = _(a, i);
17
+ return /* @__PURE__ */ r(
18
+ "svg",
19
+ {
20
+ xmlns: "http://www.w3.org/2000/svg",
21
+ className: p,
22
+ viewBox: s || t,
23
+ fill: c || "currentColor",
24
+ role: "img",
25
+ "aria-hidden": !n,
26
+ focusable: !1,
27
+ ...d,
28
+ children: [
29
+ l && n && /* @__PURE__ */ o("title", { children: l }),
30
+ e
31
+ ]
32
+ }
33
+ );
34
+ };
35
+ /*!
36
+ @versini/ui-svgicon v4.2.1
37
+ © 2025 gizmette.com
38
+ */
39
+ try {
40
+ window.__VERSINI_UI_SVGICON__ || (window.__VERSINI_UI_SVGICON__ = {
41
+ version: "4.2.1",
42
+ buildTime: "08/27/2025 08:27 AM EDT",
43
+ homepage: "https://github.com/aversini/ui-components",
44
+ license: "MIT"
45
+ });
46
+ } catch {
47
+ }
48
+ const v = ({
49
+ className: e,
50
+ viewBox: c,
51
+ title: s,
52
+ monotone: i,
53
+ ...t
54
+ }) => /* @__PURE__ */ r(
55
+ m,
56
+ {
57
+ defaultViewBox: "0 0 448 512",
58
+ size: "size-5",
59
+ viewBox: c,
60
+ className: e,
61
+ title: s || "Copied",
62
+ ...t,
63
+ children: [
64
+ /* @__PURE__ */ o(
65
+ "path",
66
+ {
67
+ d: "M0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96m104 160c0-6.1 2.3-12.3 7-17 9.4-9.4 24.6-9.4 33.9 0l47 47 111-111c4.7-4.7 10.8-7 17-7s12.3 2.3 17 7c2.3 2.3 4.1 5 5.3 7.9.6 1.5 1 2.9 1.3 4.4.2 1.1.3 2.2.3 2.2.1 1.2.1 1.2.1 2.5-.1 1.5-.1 1.9-.1 2.3-.1.7-.2 1.5-.3 2.2-.3 1.5-.7 3-1.3 4.4-1.2 2.9-2.9 5.6-5.3 7.9l-128 128c-4.7 4.7-10.8 7-17 7s-12.3-2.3-17-7l-64-64c-4.7-4.7-7-10.8-7-17z",
68
+ opacity: ".4"
69
+ }
70
+ ),
71
+ /* @__PURE__ */ o("path", { d: "M337 175c9.4 9.4 9.4 24.6 0 33.9L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0z" })
72
+ ]
73
+ }
74
+ ), I = ({
75
+ className: e,
76
+ viewBox: c,
77
+ title: s,
78
+ monotone: i,
79
+ ...t
80
+ }) => /* @__PURE__ */ o(
81
+ m,
82
+ {
83
+ defaultViewBox: "0 0 512 512",
84
+ size: "size-5",
85
+ viewBox: c,
86
+ className: e,
87
+ title: s || "Copy",
88
+ ...t,
89
+ children: /* @__PURE__ */ o("path", { d: "M64 464h224c8.8 0 16-7.2 16-16v-64h48v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h64v48H64c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16m160-160h224c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16m-64-16V64c0-35.3 28.7-64 64-64h224c35.3 0 64 28.7 64 64v224c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64" })
90
+ }
91
+ );
92
+ /*!
93
+ @versini/ui-icons v4.11.0
94
+ © 2025 gizmette.com
95
+ */
96
+ try {
97
+ window.__VERSINI_UI_ICONS__ || (window.__VERSINI_UI_ICONS__ = {
98
+ version: "4.11.0",
99
+ buildTime: "08/27/2025 08:28 AM EDT",
100
+ homepage: "https://github.com/aversini/ui-components",
101
+ license: "MIT"
102
+ });
103
+ } catch {
104
+ }
105
+ const x = h.forwardRef(({ copyToClipboard: e, ...c }, s) => {
106
+ const [i, t] = w(!1), a = () => {
107
+ typeof e == "string" && (navigator.clipboard.writeText(e), t(!0)), typeof e == "function" && (navigator.clipboard.writeText(e()), t(!0));
8
108
  };
9
- return d(() => {
10
- let r;
11
- return e && (r = window.setTimeout(() => {
12
- o(!1);
109
+ return u(() => {
110
+ let l;
111
+ return i && (l = window.setTimeout(() => {
112
+ t(!1);
13
113
  }, 3e3)), () => {
14
- clearTimeout(r);
114
+ clearTimeout(l);
15
115
  };
16
- }, [e]), /* @__PURE__ */ i(
17
- m,
116
+ }, [i]), /* @__PURE__ */ o(
117
+ f,
18
118
  {
19
- ...n,
119
+ ...c,
20
120
  size: "small",
21
121
  ref: s,
22
- label: e ? "Copied to clipboard" : "Copy to clipboard",
122
+ label: i ? "Copied to clipboard" : "Copy to clipboard",
23
123
  onClick: a,
24
- disabled: e,
25
- children: e ? /* @__PURE__ */ i(f, { size: "size-3" }) : /* @__PURE__ */ i(p, { size: "size-3" })
124
+ disabled: i,
125
+ children: i ? /* @__PURE__ */ o(v, { size: "size-3" }) : /* @__PURE__ */ o(I, { size: "size-3" })
26
126
  }
27
127
  );
28
128
  });
29
- u.displayName = "ButtonCopy";
129
+ x.displayName = "ButtonCopy";
30
130
  export {
31
- u as ButtonCopy
131
+ x as ButtonCopy
32
132
  };
@@ -1,135 +1,169 @@
1
- import { jsx as u, jsxs as Y } from "react/jsx-runtime";
2
- import { useResizeObserver as C, useMergeRefs as k } from "@versini/ui-hooks";
3
- import q, { useRef as b, useLayoutEffect as v, useEffect as F } from "react";
4
- import { BaseButton_private as J } from "../../chunks/BaseButton.BpaKdSwW.js";
5
- import { getButtonClasses as K, TYPE_ICON as Q, getIconClasses as V, getButtonIconLabelClasses as X } from "../../chunks/utilities.CGmHp-Rn.js";
6
- const p = {
1
+ import { jsx as y, jsxs as U } from "react/jsx-runtime";
2
+ import Y, { useRef as m, useCallback as J, useEffect as T, useMemo as j, useState as K, useLayoutEffect as D } from "react";
3
+ import { BaseButton_private as Q } from "../../chunks/BaseButton.BpaKdSwW.js";
4
+ import { getButtonClasses as V, TYPE_ICON as X, getIconClasses as Z, getButtonIconLabelClasses as z } from "../../chunks/utilities.CGmHp-Rn.js";
5
+ function ee() {
6
+ const t = m(!1);
7
+ return T(() => (t.current = !0, () => {
8
+ t.current = !1;
9
+ }), []), J(() => t.current, []);
10
+ }
11
+ function te(t) {
12
+ return j(() => t.every((r) => r == null) ? () => {
13
+ } : (r) => {
14
+ t.forEach((e) => {
15
+ typeof e == "function" ? e(r) : e != null && (e.current = r);
16
+ });
17
+ }, [...t]);
18
+ }
19
+ const re = {
20
+ x: 0,
21
+ y: 0,
22
+ width: 0,
23
+ height: 0,
24
+ top: 0,
25
+ left: 0,
26
+ bottom: 0,
27
+ right: 0
28
+ };
29
+ function A(t) {
30
+ const r = ee(), e = m(0), s = m(null), [p, C] = K(re), d = j(() => typeof ResizeObserver > "u" ? null : new ResizeObserver((w) => {
31
+ const i = w[0];
32
+ i && (cancelAnimationFrame(e.current), e.current = requestAnimationFrame(() => {
33
+ s.current && r() && C(i.contentRect);
34
+ }));
35
+ }), [r]);
36
+ return T(() => (s.current && d?.observe(s.current, t), () => {
37
+ d?.disconnect(), e.current && cancelAnimationFrame(e.current);
38
+ }), [d, t]), [s, p];
39
+ }
40
+ const b = {
7
41
  small: 24,
8
42
  // w-6
9
43
  medium: 32,
10
44
  // w-8
11
45
  large: 48
12
46
  // w-12
13
- }, Z = {
47
+ }, ne = {
14
48
  small: 16,
15
49
  // px-2 x 2
16
50
  medium: 24,
17
51
  // px-3 x 2
18
52
  large: 32
19
53
  // px-4 x 2
20
- }, z = 2, ee = 300, te = q.forwardRef(
54
+ }, ce = 2, se = 300, ue = Y.forwardRef(
21
55
  ({
22
- children: m,
23
- disabled: a = !1,
24
- mode: o = "system",
25
- focusMode: d = "system",
26
- fullWidth: R = !1,
27
- className: O,
28
- type: A = "button",
29
- raw: T = !1,
30
- noBorder: I = !1,
31
- "aria-label": E,
32
- label: j,
33
- size: r = "medium",
34
- labelRight: f,
35
- labelLeft: i,
36
- noBackground: H = !1,
56
+ children: t,
57
+ disabled: r = !1,
58
+ mode: e = "system",
59
+ focusMode: s = "system",
60
+ fullWidth: p = !1,
61
+ className: C,
62
+ type: d = "button",
63
+ raw: w = !1,
64
+ noBorder: i = !1,
65
+ "aria-label": F,
66
+ label: H,
67
+ size: u = "medium",
68
+ labelRight: h,
69
+ labelLeft: R,
70
+ noBackground: S = !1,
37
71
  align: W = "center",
38
72
  radius: _ = "large",
39
- variant: x = "secondary",
73
+ variant: g = "secondary",
40
74
  iconClassName: M,
41
- animated: s = !1,
75
+ animated: l = !1,
42
76
  ...P
43
- }, S) => {
44
- const $ = K({
45
- type: Q,
46
- mode: o,
47
- focusMode: d,
48
- fullWidth: R,
49
- disabled: a,
50
- raw: T,
51
- className: O,
52
- noBorder: I,
53
- size: r,
54
- labelRight: f,
55
- labelLeft: i,
56
- noBackground: H,
77
+ }, $) => {
78
+ const k = V({
79
+ type: X,
80
+ mode: e,
81
+ focusMode: s,
82
+ fullWidth: p,
83
+ disabled: r,
84
+ raw: w,
85
+ className: C,
86
+ noBorder: i,
87
+ size: u,
88
+ labelRight: h,
89
+ labelLeft: R,
90
+ noBackground: S,
57
91
  align: W,
58
92
  radius: _,
59
- variant: x,
60
- animated: s
61
- }), G = V({ mode: o, raw: T, iconClassName: M, variant: x }), B = X({ animated: s }), L = "flex items-center justify-center relative w-full h-full overflow-hidden", [e, h] = C(), [t, w] = C(), [y, g] = C(), N = b(0), c = b(null), n = b(null), U = k([S, c]);
62
- return v(() => {
63
- y && y.current && s && (N.current = g.width + Z[r] + (I ? 0 : z), c.current && !c.current.style.width && (c.current.style.width = `${p[r]}px`));
64
- }, [g, y, r, I, s]), v(() => {
65
- if (c && c.current && s) {
66
- let l = p[r];
67
- f && e && h.width > 0 ? l = h.width + N.current : i && t && w.width > 0 && (l = w.width + N.current), n.current && clearTimeout(n.current), l !== parseInt(c.current.style.width || "0", 10) && (e.current && (e.current.style.opacity = "0"), t.current && (t.current.style.opacity = "0"), c.current.style.width = `${l}px`, l > p[r] && (n.current = setTimeout(() => {
68
- e.current && f && (e.current.style.opacity = "1"), t.current && i && (t.current.style.opacity = "1"), n.current = null;
69
- }, ee * 0.8))), l === p[r] && (e.current && (e.current.style.opacity = "0"), t.current && (t.current.style.opacity = "0"));
93
+ variant: g,
94
+ animated: l
95
+ }), q = Z({ mode: e, raw: w, iconClassName: M, variant: g }), B = z({ animated: l }), G = "flex items-center justify-center relative w-full h-full overflow-hidden", [n, N] = A(), [c, v] = A(), [I, O] = A(), x = m(0), o = m(null), a = m(null), L = te([$, o]);
96
+ return D(() => {
97
+ I && I.current && l && (x.current = O.width + ne[u] + (i ? 0 : ce), o.current && !o.current.style.width && (o.current.style.width = `${b[u]}px`));
98
+ }, [O, I, u, i, l]), D(() => {
99
+ if (o && o.current && l) {
100
+ let f = b[u];
101
+ h && n && N.width > 0 ? f = N.width + x.current : R && c && v.width > 0 && (f = v.width + x.current), a.current && clearTimeout(a.current), f !== parseInt(o.current.style.width || "0", 10) && (n.current && (n.current.style.opacity = "0"), c.current && (c.current.style.opacity = "0"), o.current.style.width = `${f}px`, f > b[u] && (a.current = setTimeout(() => {
102
+ n.current && h && (n.current.style.opacity = "1"), c.current && R && (c.current.style.opacity = "1"), a.current = null;
103
+ }, se * 0.8))), f === b[u] && (n.current && (n.current.style.opacity = "0"), c.current && (c.current.style.opacity = "0"));
70
104
  }
71
105
  }, [
106
+ N,
72
107
  h,
73
- f,
74
- e,
75
- w,
76
- i,
77
- t,
78
- r,
79
- s
80
- ]), F(() => () => {
81
- n.current && clearTimeout(n.current);
82
- }, []), /* @__PURE__ */ u(
83
- J,
108
+ n,
109
+ v,
110
+ R,
111
+ c,
112
+ u,
113
+ l
114
+ ]), T(() => () => {
115
+ a.current && clearTimeout(a.current);
116
+ }, []), /* @__PURE__ */ y(
117
+ Q,
84
118
  {
85
- ref: U,
86
- className: $,
87
- disabled: a,
88
- type: A,
89
- "aria-label": E || j,
119
+ ref: L,
120
+ className: k,
121
+ disabled: r,
122
+ type: d,
123
+ "aria-label": F || H,
90
124
  ...P,
91
- children: /* @__PURE__ */ Y("div", { className: L, children: [
92
- /* @__PURE__ */ u(
93
- D,
125
+ children: /* @__PURE__ */ U("div", { className: G, children: [
126
+ /* @__PURE__ */ y(
127
+ E,
94
128
  {
95
- label: i,
96
- labelRef: t,
129
+ label: R,
130
+ labelRef: c,
97
131
  labelClass: B,
98
132
  labelInnerClass: "pr-2",
99
- initiallyHidden: s
133
+ initiallyHidden: l
100
134
  }
101
135
  ),
102
- /* @__PURE__ */ u("span", { ref: y, className: G, children: m }),
103
- /* @__PURE__ */ u(
104
- D,
136
+ /* @__PURE__ */ y("span", { ref: I, className: q, children: t }),
137
+ /* @__PURE__ */ y(
138
+ E,
105
139
  {
106
- label: f,
107
- labelRef: e,
140
+ label: h,
141
+ labelRef: n,
108
142
  labelClass: B,
109
143
  labelInnerClass: "pl-2",
110
- initiallyHidden: s
144
+ initiallyHidden: l
111
145
  }
112
146
  )
113
147
  ] })
114
148
  }
115
149
  );
116
150
  }
117
- ), D = ({
118
- labelRef: m,
119
- labelClass: a,
120
- label: o,
121
- labelInnerClass: d,
122
- initiallyHidden: R = !1
123
- }) => /* @__PURE__ */ u(
151
+ ), E = ({
152
+ labelRef: t,
153
+ labelClass: r,
154
+ label: e,
155
+ labelInnerClass: s,
156
+ initiallyHidden: p = !1
157
+ }) => /* @__PURE__ */ y(
124
158
  "span",
125
159
  {
126
- ref: m,
127
- className: a,
128
- style: R ? { opacity: 0 } : void 0,
129
- children: o && /* @__PURE__ */ u("span", { className: d, children: o })
160
+ ref: t,
161
+ className: r,
162
+ style: p ? { opacity: 0 } : void 0,
163
+ children: e && /* @__PURE__ */ y("span", { className: s, children: e })
130
164
  }
131
165
  );
132
- te.displayName = "ButtonIcon";
166
+ ue.displayName = "ButtonIcon";
133
167
  export {
134
- te as ButtonIcon
168
+ ue as ButtonIcon
135
169
  };
package/dist/index.js CHANGED
@@ -7,13 +7,13 @@ import { jsx as e } from "react/jsx-runtime";
7
7
  import n from "clsx";
8
8
  import m from "react";
9
9
  /*!
10
- @versini/ui-button v7.1.6
10
+ @versini/ui-button v8.0.0
11
11
  © 2025 gizmette.com
12
12
  */
13
13
  try {
14
14
  window.__VERSINI_UI_BUTTON__ || (window.__VERSINI_UI_BUTTON__ = {
15
- version: "7.1.6",
16
- buildTime: "09/01/2025 02:18 PM EDT",
15
+ version: "8.0.0",
16
+ buildTime: "09/01/2025 03:17 PM EDT",
17
17
  homepage: "https://github.com/aversini/ui-components",
18
18
  license: "MIT"
19
19
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@versini/ui-button",
3
- "version": "7.1.6",
3
+ "version": "8.0.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "publishConfig": {
@@ -37,22 +37,22 @@
37
37
  "test": "vitest run"
38
38
  },
39
39
  "peerDependencies": {
40
- "react": "^18.3.1 || ^19.0.0",
41
- "react-dom": "^18.3.1 || ^19.0.0"
40
+ "react": "^19.0.0",
41
+ "react-dom": "^19.0.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@testing-library/jest-dom": "6.8.0",
45
- "@versini/ui-types": "5.0.7"
45
+ "@versini/ui-types": "6.0.0"
46
46
  },
47
47
  "dependencies": {
48
48
  "@tailwindcss/typography": "0.5.16",
49
- "@versini/ui-hooks": "4.7.8",
50
- "@versini/ui-icons": "4.10.0",
49
+ "@versini/ui-hooks": "5.0.0",
50
+ "@versini/ui-icons": "4.11.0",
51
51
  "clsx": "2.1.1",
52
52
  "tailwindcss": "4.1.12"
53
53
  },
54
54
  "sideEffects": [
55
55
  "**/*.css"
56
56
  ],
57
- "gitHead": "c577149643ec36cad454587166e62410a77aed38"
57
+ "gitHead": "70a47e9e30172dbb7b36306773fe9511e437fba6"
58
58
  }