meticulous-ui 3.9.0 → 3.9.1

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,7 +1,7 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const g=require("react/jsx-runtime"),l=require("react"),D=require("styled-components"),E=require("../Button/Button.cjs"),S=require("./FormField.cjs"),$=t=>t&&t.__esModule?t:{default:t},m=$(D),A=m.default.form`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("react/jsx-runtime"),a=require("react"),p=require("styled-components"),B=require("../Button/Button.cjs"),D=require("./FormField.cjs"),E=t=>t&&t.__esModule?t:{default:t},m=E(p),T=m.default.form`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: ${({$gap:t})=>t};
5
- `,H=m.default.div`
5
+ `,$=m.default.div`
6
6
  align-self: flex-start;
7
- `,N=t=>Object.fromEntries(t.map(({id:c,validate:n,compProps:u})=>{var i;return n?[c,n((i=u==null?void 0:u.defaultValue)!=null?i:"")===null]:[c,!0]})),x=l.forwardRef(({fields:t=[],allProps:c={},onSubmit:n,submitLabel:u="Submit",disableUntilValid:i=!1,gap:F="2rem",labelMarginBottom:_="0.4rem",...h},M)=>{const b=l.useRef(Object.fromEntries(t.map(({id:e,compProps:r})=>{var a;return[e,(a=r==null?void 0:r.defaultValue)!=null?a:""]}))),V=l.useRef({}),q=l.useCallback(e=>(V.current[e]||(V.current[e]=r=>{b.current[e]=r}),V.current[e]),[]),[I,j]=l.useState(()=>N(t)),O=Object.values(I).every(Boolean),v=l.useRef({}),w=l.useCallback(e=>(v.current[e]||(v.current[e]=r=>{j(a=>({...a,[e]:r}))}),v.current[e]),[]),s=l.useRef({}),p=l.useCallback(e=>(s.current[e]||(s.current[e]={current:null}),s.current[e]),[]);l.useImperativeHandle(M,()=>({getValues:()=>({...b.current})}),[]);const B=l.useCallback(e=>{var f,o,d,y;e.preventDefault();let r=null;const a={};for(const{id:C}of t){const R=s.current[C],k=(o=(f=R==null?void 0:R.current)==null?void 0:f.triggerValidation())!=null?o:!0;a[C]=k,!k&&!r&&(r=C)}if(j(a),r){(y=(d=s.current[r])==null?void 0:d.current)==null||y.scrollIntoView();return}n==null||n({...b.current})},[t,n]);return g.jsxs(A,{onSubmit:B,$gap:F,...h,children:[t.map(({id:e,label:r,component:a,isMandatory:f,allProps:o,compProps:d,validate:y})=>g.jsx(S.default,{ref:p(e),label:r,component:a,isMandatory:f,sharedAllProps:c,allProps:o,compProps:d,validate:y,onValueChange:q(e),onValidityChange:w(e),labelMarginBottom:_},e)),n&&g.jsx(H,{children:g.jsx(E.default,{type:"submit",disabled:i&&!O,children:u})})]})});x.displayName="Form";exports.default=x;
7
+ `,A=t=>Object.fromEntries(t.map(({id:i,validate:u,compProps:s})=>{var o;return u?[i,u((o=s==null?void 0:s.defaultValue)!=null?o:"")===null]:[i,!0]})),x=a.forwardRef(({fields:t=[],allProps:i={},onSubmit:u,submitLabel:s="Submit",disableUntilValid:o=!1,gap:h="2rem",labelMarginBottom:F="0.4rem",...R},_)=>{const V=a.useRef(Object.fromEntries(t.map(({id:e,compProps:r})=>{var n;return[e,(n=r==null?void 0:r.defaultValue)!=null?n:""]}))),b=a.useRef({}),M=a.useCallback(e=>(b.current[e]||(b.current[e]=r=>{V.current[e]=r}),b.current[e]),[]),[q,j]=a.useState(()=>A(t)),I=Object.values(q).every(Boolean),v=a.useRef({}),O=a.useCallback(e=>(v.current[e]||(v.current[e]=r=>{j(n=>({...n,[e]:r}))}),v.current[e]),[]),c=a.useRef({}),w=a.useCallback(e=>(c.current[e]||(c.current[e]={current:null}),c.current[e]),[]);a.useImperativeHandle(_,()=>({getValues:()=>({...V.current})}),[]);const S=a.useCallback(e=>{var f,d,g;e.preventDefault();let r=null;const n={};for(const{id:l}of t){const C=c.current[l],k=(d=(f=C==null?void 0:C.current)==null?void 0:f.triggerValidation())!=null?d:!0;n[l]=k,!k&&!r&&(r=l)}if(j(n),r){const l=(g=c.current[r])==null?void 0:g.current;l==null||l.scrollIntoView(),setTimeout(()=>l==null?void 0:l.triggerShake(),500);return}u==null||u({...V.current})},[t,u]);return y.jsxs(T,{onSubmit:S,$gap:h,noValidate:!0,...R,children:[t.map(({id:e,label:r,component:n,isMandatory:f,allProps:d,compProps:g,validate:l})=>y.jsx(D.default,{ref:w(e),label:r,component:n,isMandatory:f,sharedAllProps:i,allProps:d,compProps:g,validate:l,onValueChange:M(e),onValidityChange:O(e),labelMarginBottom:F},e)),u&&y.jsx($,{children:y.jsx(B.default,{type:"submit",disabled:o&&!I,children:s})})]})});x.displayName="Form";exports.default=x;
@@ -1,17 +1,25 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),e=require("react"),L=require("styled-components"),T=require("../../colors/red.cjs"),W=t=>t&&t.__esModule?t:{default:t},l=W(L),B=l.default.div`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),e=require("react"),F=require("styled-components"),C=require("../../colors/red.cjs"),D=t=>t&&t.__esModule?t:{default:t},l=D(F),H=F.keyframes`
2
+ 0% { transform: translateX(0); }
3
+ 20% { transform: translateX(-6px); }
4
+ 40% { transform: translateX(6px); }
5
+ 60% { transform: translateX(-4px); }
6
+ 80% { transform: translateX(4px); }
7
+ 100% { transform: translateX(0); }
8
+ `,N=l.default.div`
2
9
  display: flex;
3
10
  flex-direction: column;
4
11
  gap: 0.4rem;
5
- `,D=l.default.div`
12
+ animation: ${({$shake:t})=>t?H:"none"} 0.35s ease;
13
+ `,O=l.default.div`
6
14
  margin-bottom: ${({$labelMarginBottom:t})=>t};
7
- `,H=l.default.label`
15
+ `,P=l.default.label`
8
16
  font-size: 1.6rem;
9
17
  font-weight: 600;
10
18
  margin-bottom: 0.2rem;
11
- `,N=l.default.span`
12
- color: ${T.default.m600};
19
+ `,A=l.default.span`
20
+ color: ${C.default.m600};
13
21
  vertical-align: super;
14
- `,O=l.default.span`
22
+ `,G=l.default.span`
15
23
  font-size: 1.4rem;
16
24
  color: red;
17
- `,j=e.forwardRef(({label:t,component:_,isMandatory:F,compProps:q,validate:d,onValueChange:m,onValidityChange:f,labelMarginBottom:y="0.4rem",sharedAllProps:p,allProps:g},M)=>{const I=e.useMemo(()=>({...p,...g}),[p,g]),{defaultValue:n,onChange:b,...S}=q||{},[C,$]=e.useState(n!=null?n:""),[h,k]=e.useState(null),v=e.useRef(n!=null?n:""),x=e.useRef(null),u=e.useRef(d);u.current=d;const i=e.useRef(m);i.current=m;const z=e.useRef(f);z.current=f;const a=e.useRef(b);a.current=b,e.useImperativeHandle(M,()=>({triggerValidation:()=>{var o,c;const r=(c=(o=u.current)==null?void 0:o.call(u,v.current))!=null?c:null;return k(r),r===null},scrollIntoView:()=>{var r;return(r=x.current)==null?void 0:r.scrollIntoView({behavior:"smooth",block:"center"})}}));const E=e.useCallback(r=>{var c,R;const o=(r==null?void 0:r.target)!==void 0?r.target.value:r;v.current=o,$(o),(c=a.current)==null||c.call(a,o),(R=i.current)==null||R.call(i,o)},[]);return s.jsxs(B,{ref:x,children:[s.jsx(D,{$labelMarginBottom:y,children:s.jsxs(H,{children:[t,F&&s.jsx(N,{"aria-hidden":"true",children:" *"})]})}),s.jsx(_,{...I,...S,value:C,onChange:E}),h&&s.jsx(O,{role:"alert",children:h})]})});j.displayName="FormField";const P=e.memo(j);exports.default=P;
25
+ `,X=e.forwardRef(({label:t,component:q,isMandatory:M,compProps:$,validate:f,onValueChange:p,onValidityChange:g,labelMarginBottom:I="0.4rem",sharedAllProps:x,allProps:h},z)=>{const E=e.useMemo(()=>({...x,...h}),[x,h]),{defaultValue:s,onChange:b,...K}=$||{},[L,T]=e.useState(s!=null?s:""),[v,R]=e.useState(null),[j,W]=e.useState(0),d=e.useRef(null),k=e.useRef(s!=null?s:""),S=e.useRef(null),a=e.useRef(f);a.current=f;const u=e.useRef(p);u.current=p;const i=e.useRef(g);i.current=g;const m=e.useRef(b);m.current=b,e.useImperativeHandle(z,()=>({triggerValidation:()=>{var n,c;const r=(c=(n=a.current)==null?void 0:n.call(a,k.current))!=null?c:null;return d.current=r,R(r),r===null},triggerShake:()=>W(r=>r+1),scrollIntoView:()=>{var r;return(r=S.current)==null?void 0:r.scrollIntoView({behavior:"smooth",block:"center"})}}));const B=e.useCallback(r=>{var c,_,y;const n=(r==null?void 0:r.target)!==void 0?r.target.value:r;k.current=n,T(n),(c=m.current)==null||c.call(m,n),(_=u.current)==null||_.call(u,n),d.current!==null&&(d.current=null,R(null),(y=i.current)==null||y.call(i,!0))},[]);return o.jsxs(N,{ref:S,$shake:j>0,children:[o.jsx(O,{$labelMarginBottom:I,children:o.jsxs(P,{children:[t,M&&o.jsx(A,{"aria-hidden":"true",children:" *"})]})}),o.jsx(q,{...E,...K,value:L,onChange:B}),v&&o.jsx(G,{role:"alert",children:v})]},j)});X.displayName="FormField";const J=e.memo(X);exports.default=J;
@@ -1,88 +1,89 @@
1
- import { jsxs as A, jsx as F } from "react/jsx-runtime";
2
- import { forwardRef as D, useRef as m, useCallback as y, useState as H, useImperativeHandle as N } from "react";
3
- import x from "styled-components";
4
- import W from "../Button/Button.js";
5
- import q from "./FormField.js";
6
- const z = x.form`
1
+ import { jsxs as $, jsx as h } from "react/jsx-runtime";
2
+ import { forwardRef as A, useRef as d, useCallback as g, useState as D, useImperativeHandle as H } from "react";
3
+ import k from "styled-components";
4
+ import N from "../Button/Button.js";
5
+ import S from "./FormField.js";
6
+ const T = k.form`
7
7
  display: flex;
8
8
  flex-direction: column;
9
- gap: ${({ $gap: r }) => r};
10
- `, G = x.div`
9
+ gap: ${({ $gap: n }) => n};
10
+ `, W = k.div`
11
11
  align-self: flex-start;
12
- `, J = (r) => Object.fromEntries(
13
- r.map(({ id: c, validate: n, compProps: a }) => {
12
+ `, q = (n) => Object.fromEntries(
13
+ n.map(({ id: s, validate: l, compProps: u }) => {
14
14
  var i;
15
- return n ? [c, n((i = a == null ? void 0 : a.defaultValue) != null ? i : "") === null] : [c, !0];
15
+ return l ? [s, l((i = u == null ? void 0 : u.defaultValue) != null ? i : "") === null] : [s, !0];
16
16
  })
17
- ), K = D(
17
+ ), z = A(
18
18
  ({
19
- fields: r = [],
20
- allProps: c = {},
21
- onSubmit: n,
22
- submitLabel: a = "Submit",
19
+ fields: n = [],
20
+ allProps: s = {},
21
+ onSubmit: l,
22
+ submitLabel: u = "Submit",
23
23
  disableUntilValid: i = !1,
24
- gap: R = "2rem",
25
- labelMarginBottom: j = "0.4rem",
26
- ...k
24
+ gap: p = "2rem",
25
+ labelMarginBottom: x = "0.4rem",
26
+ ...j
27
27
  }, I) => {
28
- const V = m(
29
- Object.fromEntries(r.map(({ id: e, compProps: t }) => {
30
- var l;
31
- return [e, (l = t == null ? void 0 : t.defaultValue) != null ? l : ""];
28
+ const V = d(
29
+ Object.fromEntries(n.map(({ id: t, compProps: e }) => {
30
+ var a;
31
+ return [t, (a = e == null ? void 0 : e.defaultValue) != null ? a : ""];
32
32
  }))
33
- ), g = m({}), w = y((e) => (g.current[e] || (g.current[e] = (t) => {
34
- V.current[e] = t;
35
- }), g.current[e]), []), [M, h] = H(() => J(r)), O = Object.values(M).every(Boolean), b = m({}), B = y((e) => (b.current[e] || (b.current[e] = (t) => {
36
- h((l) => ({ ...l, [e]: t }));
37
- }), b.current[e]), []), u = m({}), E = y((e) => (u.current[e] || (u.current[e] = { current: null }), u.current[e]), []);
38
- N(
33
+ ), y = d({}), w = g((t) => (y.current[t] || (y.current[t] = (e) => {
34
+ V.current[t] = e;
35
+ }), y.current[t]), []), [M, C] = D(() => q(n)), O = Object.values(M).every(Boolean), b = d({}), R = g((t) => (b.current[t] || (b.current[t] = (e) => {
36
+ C((a) => ({ ...a, [t]: e }));
37
+ }), b.current[t]), []), c = d({}), B = g((t) => (c.current[t] || (c.current[t] = { current: null }), c.current[t]), []);
38
+ H(
39
39
  I,
40
40
  () => ({
41
41
  getValues: () => ({ ...V.current })
42
42
  }),
43
43
  []
44
44
  );
45
- const $ = y(
46
- (e) => {
47
- var s, f, o, d;
48
- e.preventDefault();
49
- let t = null;
50
- const l = {};
51
- for (const { id: v } of r) {
52
- const C = u.current[v], p = (f = (s = C == null ? void 0 : C.current) == null ? void 0 : s.triggerValidation()) != null ? f : !0;
53
- l[v] = p, !p && !t && (t = v);
45
+ const E = g(
46
+ (t) => {
47
+ var o, f, m;
48
+ t.preventDefault();
49
+ let e = null;
50
+ const a = {};
51
+ for (const { id: r } of n) {
52
+ const v = c.current[r], F = (f = (o = v == null ? void 0 : v.current) == null ? void 0 : o.triggerValidation()) != null ? f : !0;
53
+ a[r] = F, !F && !e && (e = r);
54
54
  }
55
- if (h(l), t) {
56
- (d = (o = u.current[t]) == null ? void 0 : o.current) == null || d.scrollIntoView();
55
+ if (C(a), e) {
56
+ const r = (m = c.current[e]) == null ? void 0 : m.current;
57
+ r == null || r.scrollIntoView(), setTimeout(() => r == null ? void 0 : r.triggerShake(), 500);
57
58
  return;
58
59
  }
59
- n == null || n({ ...V.current });
60
+ l == null || l({ ...V.current });
60
61
  },
61
- [r, n]
62
+ [n, l]
62
63
  );
63
- return /* @__PURE__ */ A(z, { onSubmit: $, $gap: R, ...k, children: [
64
- r.map(({ id: e, label: t, component: l, isMandatory: s, allProps: f, compProps: o, validate: d }) => /* @__PURE__ */ F(
65
- q,
64
+ return /* @__PURE__ */ $(T, { onSubmit: E, $gap: p, noValidate: !0, ...j, children: [
65
+ n.map(({ id: t, label: e, component: a, isMandatory: o, allProps: f, compProps: m, validate: r }) => /* @__PURE__ */ h(
66
+ S,
66
67
  {
67
- ref: E(e),
68
- label: t,
69
- component: l,
70
- isMandatory: s,
71
- sharedAllProps: c,
68
+ ref: B(t),
69
+ label: e,
70
+ component: a,
71
+ isMandatory: o,
72
+ sharedAllProps: s,
72
73
  allProps: f,
73
- compProps: o,
74
- validate: d,
75
- onValueChange: w(e),
76
- onValidityChange: B(e),
77
- labelMarginBottom: j
74
+ compProps: m,
75
+ validate: r,
76
+ onValueChange: w(t),
77
+ onValidityChange: R(t),
78
+ labelMarginBottom: x
78
79
  },
79
- e
80
+ t
80
81
  )),
81
- n && /* @__PURE__ */ F(G, { children: /* @__PURE__ */ F(W, { type: "submit", disabled: i && !O, children: a }) })
82
+ l && /* @__PURE__ */ h(W, { children: /* @__PURE__ */ h(N, { type: "submit", disabled: i && !O, children: u }) })
82
83
  ] });
83
84
  }
84
85
  );
85
- K.displayName = "Form";
86
+ z.displayName = "Form";
86
87
  export {
87
- K as default
88
+ z as default
88
89
  };
@@ -1,74 +1,83 @@
1
- import { jsxs as I, jsx as m } from "react/jsx-runtime";
2
- import { memo as N, forwardRef as S, useMemo as T, useState as y, useRef as t, useImperativeHandle as A, useCallback as D } from "react";
3
- import c from "styled-components";
4
- import G from "../../colors/red.js";
5
- const J = c.div`
1
+ import { jsxs as j, jsx as u } from "react/jsx-runtime";
2
+ import { memo as T, forwardRef as A, useMemo as D, useState as d, useRef as e, useImperativeHandle as G, useCallback as J } from "react";
3
+ import c, { keyframes as O } from "styled-components";
4
+ import P from "../../colors/red.js";
5
+ const Q = O`
6
+ 0% { transform: translateX(0); }
7
+ 20% { transform: translateX(-6px); }
8
+ 40% { transform: translateX(6px); }
9
+ 60% { transform: translateX(-4px); }
10
+ 80% { transform: translateX(4px); }
11
+ 100% { transform: translateX(0); }
12
+ `, U = c.div`
6
13
  display: flex;
7
14
  flex-direction: column;
8
15
  gap: 0.4rem;
9
- `, K = c.div`
10
- margin-bottom: ${({ $labelMarginBottom: a }) => a};
11
- `, O = c.label`
16
+ animation: ${({ $shake: o }) => o ? Q : "none"} 0.35s ease;
17
+ `, Y = c.div`
18
+ margin-bottom: ${({ $labelMarginBottom: o }) => o};
19
+ `, Z = c.label`
12
20
  font-size: 1.6rem;
13
21
  font-weight: 600;
14
22
  margin-bottom: 0.2rem;
15
- `, P = c.span`
16
- color: ${G.m600};
23
+ `, _ = c.span`
24
+ color: ${P.m600};
17
25
  vertical-align: super;
18
- `, Q = c.span`
26
+ `, w = c.span`
19
27
  font-size: 1.4rem;
20
28
  color: red;
21
- `, C = S(
29
+ `, z = A(
22
30
  ({
23
- label: a,
24
- component: R,
25
- isMandatory: $,
26
- compProps: j,
27
- validate: d,
28
- onValueChange: p,
29
- onValidityChange: u,
30
- labelMarginBottom: k = "0.4rem",
31
- sharedAllProps: g,
32
- allProps: f
33
- }, z) => {
34
- const E = T(
35
- () => ({ ...g, ...f }),
36
- [g, f]
37
- ), { defaultValue: o, onChange: h, ...L } = j || {}, [M, W] = y(o != null ? o : ""), [b, q] = y(null), v = t(o != null ? o : ""), x = t(null), s = t(d);
38
- s.current = d;
39
- const i = t(p);
40
- i.current = p;
41
- const B = t(u);
42
- B.current = u;
43
- const l = t(h);
44
- l.current = h, A(z, () => ({
31
+ label: o,
32
+ component: E,
33
+ isMandatory: K,
34
+ compProps: L,
35
+ validate: f,
36
+ onValueChange: h,
37
+ onValidityChange: g,
38
+ labelMarginBottom: M = "0.4rem",
39
+ sharedAllProps: x,
40
+ allProps: b
41
+ }, R) => {
42
+ const W = D(
43
+ () => ({ ...x, ...b }),
44
+ [x, b]
45
+ ), { defaultValue: n, onChange: k, ...q } = L || {}, [B, C] = d(n != null ? n : ""), [v, F] = d(null), [X, H] = d(0), p = e(null), $ = e(n != null ? n : ""), y = e(null), a = e(f);
46
+ a.current = f;
47
+ const l = e(h);
48
+ l.current = h;
49
+ const m = e(g);
50
+ m.current = g;
51
+ const i = e(k);
52
+ i.current = k, G(R, () => ({
45
53
  triggerValidation: () => {
46
- var e, n;
47
- const r = (n = (e = s.current) == null ? void 0 : e.call(s, v.current)) != null ? n : null;
48
- return q(r), r === null;
54
+ var t, s;
55
+ const r = (s = (t = a.current) == null ? void 0 : t.call(a, $.current)) != null ? s : null;
56
+ return p.current = r, F(r), r === null;
49
57
  },
58
+ triggerShake: () => H((r) => r + 1),
50
59
  scrollIntoView: () => {
51
60
  var r;
52
- return (r = x.current) == null ? void 0 : r.scrollIntoView({ behavior: "smooth", block: "center" });
61
+ return (r = y.current) == null ? void 0 : r.scrollIntoView({ behavior: "smooth", block: "center" });
53
62
  }
54
63
  }));
55
- const H = D((r) => {
56
- var n, F;
57
- const e = (r == null ? void 0 : r.target) !== void 0 ? r.target.value : r;
58
- v.current = e, W(e), (n = l.current) == null || n.call(l, e), (F = i.current) == null || F.call(i, e);
64
+ const N = J((r) => {
65
+ var s, I, S;
66
+ const t = (r == null ? void 0 : r.target) !== void 0 ? r.target.value : r;
67
+ $.current = t, C(t), (s = i.current) == null || s.call(i, t), (I = l.current) == null || I.call(l, t), p.current !== null && (p.current = null, F(null), (S = m.current) == null || S.call(m, !0));
59
68
  }, []);
60
- return /* @__PURE__ */ I(J, { ref: x, children: [
61
- /* @__PURE__ */ m(K, { $labelMarginBottom: k, children: /* @__PURE__ */ I(O, { children: [
62
- a,
63
- $ && /* @__PURE__ */ m(P, { "aria-hidden": "true", children: " *" })
69
+ return /* @__PURE__ */ j(U, { ref: y, $shake: X > 0, children: [
70
+ /* @__PURE__ */ u(Y, { $labelMarginBottom: M, children: /* @__PURE__ */ j(Z, { children: [
71
+ o,
72
+ K && /* @__PURE__ */ u(_, { "aria-hidden": "true", children: " *" })
64
73
  ] }) }),
65
- /* @__PURE__ */ m(R, { ...E, ...L, value: M, onChange: H }),
66
- b && /* @__PURE__ */ m(Q, { role: "alert", children: b })
67
- ] });
74
+ /* @__PURE__ */ u(E, { ...W, ...q, value: B, onChange: N }),
75
+ v && /* @__PURE__ */ u(w, { role: "alert", children: v })
76
+ ] }, X);
68
77
  }
69
78
  );
70
- C.displayName = "FormField";
71
- const _ = N(C);
79
+ z.displayName = "FormField";
80
+ const nr = T(z);
72
81
  export {
73
- _ as default
82
+ nr as default
74
83
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meticulous-ui",
3
- "version": "3.9.0",
3
+ "version": "3.9.1",
4
4
  "license": "ISC",
5
5
  "description": "A comprehensive React UI component library with a wide range of customizable components, icons, colors, and utilities for building modern web applications.",
6
6
  "types": "./index.d.ts",