@drjoshcsimmons/scl 0.1.6 → 0.1.7

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 (108) hide show
  1. package/dist/index100.js +30 -4
  2. package/dist/index101.js +647 -12
  3. package/dist/index102.js +178 -27
  4. package/dist/index103.js +24 -180
  5. package/dist/index104.js +12 -647
  6. package/dist/index105.js +6 -12
  7. package/dist/index106.js +10 -204
  8. package/dist/index107.js +20 -21
  9. package/dist/index108.js +9 -400
  10. package/dist/index109.js +38 -6
  11. package/dist/index11.js +2 -2
  12. package/dist/index110.js +11 -14
  13. package/dist/index111.js +206 -9
  14. package/dist/index112.js +21 -37
  15. package/dist/index113.js +399 -17
  16. package/dist/index114.js +2 -25
  17. package/dist/index115.js +53 -29
  18. package/dist/index116.js +65 -5
  19. package/dist/index117.js +25 -2
  20. package/dist/index118.js +29 -53
  21. package/dist/index119.js +5 -65
  22. package/dist/index12.js +1 -1
  23. package/dist/index125.js +1 -1
  24. package/dist/index126.js +1 -1
  25. package/dist/index13.js +2 -2
  26. package/dist/index130.js +1 -1
  27. package/dist/index131.js +1 -1
  28. package/dist/index132.js +1 -1
  29. package/dist/index137.js +11 -21
  30. package/dist/index138.js +26 -11
  31. package/dist/index139.js +4 -27
  32. package/dist/index14.js +2 -2
  33. package/dist/index140.js +22 -4
  34. package/dist/index15.js +2 -2
  35. package/dist/index17.js +4 -4
  36. package/dist/index18.js +2 -2
  37. package/dist/index20.js +1 -1
  38. package/dist/index21.js +1 -1
  39. package/dist/index22.js +1 -1
  40. package/dist/index23.js +2 -2
  41. package/dist/index24.js +1 -1
  42. package/dist/index25.js +4 -4
  43. package/dist/index26.js +1 -1
  44. package/dist/index27.js +2 -2
  45. package/dist/index29.js +1 -1
  46. package/dist/index31.js +1 -1
  47. package/dist/index33.js +1 -1
  48. package/dist/index36.js +1 -1
  49. package/dist/index37.js +1 -1
  50. package/dist/index4.js +2 -2
  51. package/dist/index46.js +210 -214
  52. package/dist/index47.js +11 -249
  53. package/dist/index48.js +73 -9
  54. package/dist/index49.js +125 -12
  55. package/dist/index50.js +57 -257
  56. package/dist/index51.js +260 -12
  57. package/dist/index52.js +12 -73
  58. package/dist/index53.js +12 -237
  59. package/dist/index54.js +3 -5
  60. package/dist/index55.js +811 -481
  61. package/dist/index56.js +9 -125
  62. package/dist/index57.js +215 -300
  63. package/dist/index58.js +3 -4
  64. package/dist/index59.js +11 -435
  65. package/dist/index6.js +1 -1
  66. package/dist/index60.js +114 -56
  67. package/dist/index61.js +20 -252
  68. package/dist/index62.js +250 -126
  69. package/dist/index63.js +224 -70
  70. package/dist/index64.js +160 -21
  71. package/dist/index65.js +434 -30
  72. package/dist/index66.js +334 -16
  73. package/dist/index67.js +16 -234
  74. package/dist/index68.js +530 -11
  75. package/dist/index69.js +222 -134
  76. package/dist/index7.js +1 -1
  77. package/dist/index70.js +119 -325
  78. package/dist/index71.js +25 -219
  79. package/dist/index72.js +241 -11
  80. package/dist/index73.js +68 -846
  81. package/dist/index74.js +310 -9
  82. package/dist/index75.js +12 -118
  83. package/dist/index76.js +66 -5
  84. package/dist/index77.js +44 -25
  85. package/dist/index78.js +23 -64
  86. package/dist/index79.js +5 -123
  87. package/dist/index80.js +50 -13
  88. package/dist/index81.js +32 -133
  89. package/dist/index82.js +1 -1
  90. package/dist/index83.js +7 -218
  91. package/dist/index84.js +55 -14
  92. package/dist/index85.js +10 -68
  93. package/dist/index86.js +4 -34
  94. package/dist/index87.js +29 -53
  95. package/dist/index88.js +10 -49
  96. package/dist/index89.js +53 -49
  97. package/dist/index9.js +1 -1
  98. package/dist/index90.js +124 -8
  99. package/dist/index91.js +134 -5
  100. package/dist/index92.js +14 -25
  101. package/dist/index93.js +65 -51
  102. package/dist/index94.js +12 -8
  103. package/dist/index95.js +9 -4
  104. package/dist/index96.js +49 -29
  105. package/dist/index97.js +3 -12
  106. package/dist/index98.js +216 -43
  107. package/dist/index99.js +5 -7
  108. package/package.json +11 -19
package/dist/index96.js CHANGED
@@ -1,32 +1,52 @@
1
- import * as f from "react";
2
- import "react-dom";
3
- import { createSlot as l } from "./index60.js";
4
- import { jsx as n } from "react/jsx-runtime";
5
- var u = [
6
- "a",
7
- "button",
8
- "div",
9
- "form",
10
- "h2",
11
- "h3",
12
- "img",
13
- "input",
14
- "label",
15
- "li",
16
- "nav",
17
- "ol",
18
- "p",
19
- "select",
20
- "span",
21
- "svg",
22
- "ul"
23
- ], w = u.reduce((t, i) => {
24
- const o = l(`Primitive.${i}`), r = f.forwardRef((e, m) => {
25
- const { asChild: a, ...p } = e, s = a ? o : i;
26
- return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ n(s, { ...p, ref: m });
1
+ var S = function(r) {
2
+ if (typeof document > "u")
3
+ return null;
4
+ var u = Array.isArray(r) ? r[0] : r;
5
+ return u.ownerDocument.body;
6
+ }, f = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap(), p = {}, h = 0, W = function(r) {
7
+ return r && (r.host || W(r.parentNode));
8
+ }, D = function(r, u) {
9
+ return u.map(function(e) {
10
+ if (r.contains(e))
11
+ return e;
12
+ var n = W(e);
13
+ return n && r.contains(n) ? n : (console.error("aria-hidden", e, "in not contained inside", r, ". Doing nothing"), null);
14
+ }).filter(function(e) {
15
+ return !!e;
27
16
  });
28
- return r.displayName = `Primitive.${i}`, { ...t, [i]: r };
29
- }, {});
17
+ }, E = function(r, u, e, n) {
18
+ var i = D(u, Array.isArray(r) ? r : [r]);
19
+ p[e] || (p[e] = /* @__PURE__ */ new WeakMap());
20
+ var s = p[e], l = [], o = /* @__PURE__ */ new Set(), b = new Set(i), y = function(t) {
21
+ !t || o.has(t) || (o.add(t), y(t.parentNode));
22
+ };
23
+ i.forEach(y);
24
+ var A = function(t) {
25
+ !t || b.has(t) || Array.prototype.forEach.call(t.children, function(a) {
26
+ if (o.has(a))
27
+ A(a);
28
+ else
29
+ try {
30
+ var c = a.getAttribute(n), w = c !== null && c !== "false", d = (f.get(a) || 0) + 1, M = (s.get(a) || 0) + 1;
31
+ f.set(a, d), s.set(a, M), l.push(a), d === 1 && w && v.set(a, !0), M === 1 && a.setAttribute(e, "true"), w || a.setAttribute(n, "true");
32
+ } catch (k) {
33
+ console.error("aria-hidden: cannot operate on ", a, k);
34
+ }
35
+ });
36
+ };
37
+ return A(u), o.clear(), h++, function() {
38
+ l.forEach(function(t) {
39
+ var a = f.get(t) - 1, c = s.get(t) - 1;
40
+ f.set(t, a), s.set(t, c), a || (v.has(t) || t.removeAttribute(n), v.delete(t)), c || t.removeAttribute(e);
41
+ }), h--, h || (f = /* @__PURE__ */ new WeakMap(), f = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap(), p = {});
42
+ };
43
+ }, C = function(r, u, e) {
44
+ e === void 0 && (e = "data-aria-hidden");
45
+ var n = Array.from(Array.isArray(r) ? r : [r]), i = S(r);
46
+ return i ? (n.push.apply(n, Array.from(i.querySelectorAll("[aria-live], script"))), E(n, i, e, "aria-hidden")) : function() {
47
+ return null;
48
+ };
49
+ };
30
50
  export {
31
- w as Primitive
51
+ C as hideOthers
32
52
  };
package/dist/index97.js CHANGED
@@ -1,15 +1,6 @@
1
- import { s as r } from "./index109.js";
2
- function s() {
3
- return r.useSyncExternalStore(
4
- e,
5
- () => !0,
6
- () => !1
7
- );
8
- }
9
- function e() {
10
- return () => {
11
- };
1
+ function m(t, [a, n]) {
2
+ return Math.min(n, Math.max(a, t));
12
3
  }
13
4
  export {
14
- s as useIsHydrated
5
+ m as clamp
15
6
  };
package/dist/index98.js CHANGED
@@ -1,48 +1,221 @@
1
- import r from "react";
2
- import { createContextScope as y } from "./index78.js";
3
- import { useComposedRefs as M } from "./index77.js";
4
- import { createSlot as x } from "./index87.js";
5
- import { jsx as u } from "react/jsx-runtime";
6
- function g(s) {
7
- const m = s + "CollectionProvider", [A, N] = y(m), [_, f] = A(
8
- m,
9
- { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }
10
- ), p = (c) => {
11
- const { scope: e, children: l } = c, o = r.useRef(null), t = r.useRef(/* @__PURE__ */ new Map()).current;
12
- return /* @__PURE__ */ u(_, { scope: e, itemMap: t, collectionRef: o, children: l });
13
- };
14
- p.displayName = m;
15
- const a = s + "CollectionSlot", E = x(a), C = r.forwardRef(
16
- (c, e) => {
17
- const { scope: l, children: o } = c, t = f(a, l), n = M(e, t.collectionRef);
18
- return /* @__PURE__ */ u(E, { ref: n, children: o });
19
- }
20
- );
21
- C.displayName = a;
22
- const d = s + "CollectionItemSlot", R = "data-radix-collection-item", T = x(d), I = r.forwardRef(
23
- (c, e) => {
24
- const { scope: l, children: o, ...t } = c, n = r.useRef(null), S = M(e, n), i = f(d, l);
25
- return r.useEffect(() => (i.itemMap.set(n, { ref: n, ...t }), () => void i.itemMap.delete(n))), /* @__PURE__ */ u(T, { [R]: "", ref: S, children: o });
26
- }
1
+ import * as p from "react";
2
+ import { useFloating as xe, offset as Pe, shift as ye, flip as Ae, size as ve, arrow as Ce, hide as be, limitShift as Se } from "./index111.js";
3
+ import { Root as Oe } from "./index112.js";
4
+ import { useComposedRefs as j } from "./index78.js";
5
+ import { createContextScope as Re } from "./index76.js";
6
+ import { Primitive as z } from "./index81.js";
7
+ import { useCallbackRef as Ee } from "./index85.js";
8
+ import { useLayoutEffect as T } from "./index86.js";
9
+ import { useSize as Ne } from "./index103.js";
10
+ import { jsx as f } from "react/jsx-runtime";
11
+ import { autoUpdate as _e } from "./index113.js";
12
+ var N = "Popper", [L, Ue] = Re(N), [$e, Z] = L(N), U = (e) => {
13
+ const { __scopePopper: s, children: a } = e, [t, i] = p.useState(null);
14
+ return /* @__PURE__ */ f($e, { scope: s, anchor: t, onAnchorChange: i, children: a });
15
+ };
16
+ U.displayName = N;
17
+ var q = "PopperAnchor", G = p.forwardRef(
18
+ (e, s) => {
19
+ const { __scopePopper: a, virtualRef: t, ...i } = e, r = Z(q, a), o = p.useRef(null), w = j(s, o), n = p.useRef(null);
20
+ return p.useEffect(() => {
21
+ const c = n.current;
22
+ n.current = (t == null ? void 0 : t.current) || o.current, c !== n.current && r.onAnchorChange(n.current);
23
+ }), t ? null : /* @__PURE__ */ f(z.div, { ...i, ref: w });
24
+ }
25
+ );
26
+ G.displayName = q;
27
+ var _ = "PopperContent", [He, We] = L(_), J = p.forwardRef(
28
+ (e, s) => {
29
+ var Y, M, X, D, F, k;
30
+ const {
31
+ __scopePopper: a,
32
+ side: t = "bottom",
33
+ sideOffset: i = 0,
34
+ align: r = "center",
35
+ alignOffset: o = 0,
36
+ arrowPadding: w = 0,
37
+ avoidCollisions: n = !0,
38
+ collisionBoundary: c = [],
39
+ collisionPadding: x = 0,
40
+ sticky: m = "partial",
41
+ hideWhenDetached: y = !1,
42
+ updatePositionStrategy: A = "optimized",
43
+ onPlaced: l,
44
+ ...d
45
+ } = e, v = Z(_, a), [h, C] = p.useState(null), ee = j(s, (P) => C(P)), [E, te] = p.useState(null), u = Ne(E), re = (u == null ? void 0 : u.width) ?? 0, $ = (u == null ? void 0 : u.height) ?? 0, oe = t + (r !== "center" ? "-" + r : ""), ne = typeof x == "number" ? x : { top: 0, right: 0, bottom: 0, left: 0, ...x }, H = Array.isArray(c) ? c : [c], ae = H.length > 0, b = {
46
+ padding: ne,
47
+ boundary: H.filter(Ye),
48
+ // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries
49
+ altBoundary: ae
50
+ }, { refs: ie, floatingStyles: W, placement: se, isPositioned: S, middlewareData: g } = xe({
51
+ // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues
52
+ strategy: "fixed",
53
+ placement: oe,
54
+ whileElementsMounted: (...P) => _e(...P, {
55
+ animationFrame: A === "always"
56
+ }),
57
+ elements: {
58
+ reference: v.anchor
59
+ },
60
+ middleware: [
61
+ Pe({ mainAxis: i + $, alignmentAxis: o }),
62
+ n && ye({
63
+ mainAxis: !0,
64
+ crossAxis: !1,
65
+ limiter: m === "partial" ? Se() : void 0,
66
+ ...b
67
+ }),
68
+ n && Ae({ ...b }),
69
+ ve({
70
+ ...b,
71
+ apply: ({ elements: P, rects: B, availableWidth: he, availableHeight: ue }) => {
72
+ const { width: ge, height: we } = B.reference, R = P.floating.style;
73
+ R.setProperty("--radix-popper-available-width", `${he}px`), R.setProperty("--radix-popper-available-height", `${ue}px`), R.setProperty("--radix-popper-anchor-width", `${ge}px`), R.setProperty("--radix-popper-anchor-height", `${we}px`);
74
+ }
75
+ }),
76
+ E && Ce({ element: E, padding: w }),
77
+ Me({ arrowWidth: re, arrowHeight: $ }),
78
+ y && be({ strategy: "referenceHidden", ...b })
79
+ ]
80
+ }), [I, ce] = V(se), O = Ee(l);
81
+ T(() => {
82
+ S && (O == null || O());
83
+ }, [S, O]);
84
+ const pe = (Y = g.arrow) == null ? void 0 : Y.x, de = (M = g.arrow) == null ? void 0 : M.y, le = ((X = g.arrow) == null ? void 0 : X.centerOffset) !== 0, [fe, me] = p.useState();
85
+ return T(() => {
86
+ h && me(window.getComputedStyle(h).zIndex);
87
+ }, [h]), /* @__PURE__ */ f(
88
+ "div",
89
+ {
90
+ ref: ie.setFloating,
91
+ "data-radix-popper-content-wrapper": "",
92
+ style: {
93
+ ...W,
94
+ transform: S ? W.transform : "translate(0, -200%)",
95
+ // keep off the page when measuring
96
+ minWidth: "max-content",
97
+ zIndex: fe,
98
+ "--radix-popper-transform-origin": [
99
+ (D = g.transformOrigin) == null ? void 0 : D.x,
100
+ (F = g.transformOrigin) == null ? void 0 : F.y
101
+ ].join(" "),
102
+ // hide the content if using the hide middleware and should be hidden
103
+ // set visibility to hidden and disable pointer events so the UI behaves
104
+ // as if the PopperContent isn't there at all
105
+ ...((k = g.hide) == null ? void 0 : k.referenceHidden) && {
106
+ visibility: "hidden",
107
+ pointerEvents: "none"
108
+ }
109
+ },
110
+ dir: e.dir,
111
+ children: /* @__PURE__ */ f(
112
+ He,
113
+ {
114
+ scope: a,
115
+ placedSide: I,
116
+ onArrowChange: te,
117
+ arrowX: pe,
118
+ arrowY: de,
119
+ shouldHideArrow: le,
120
+ children: /* @__PURE__ */ f(
121
+ z.div,
122
+ {
123
+ "data-side": I,
124
+ "data-align": ce,
125
+ ...d,
126
+ ref: ee,
127
+ style: {
128
+ ...d.style,
129
+ // if the PopperContent hasn't been placed yet (not all measurements done)
130
+ // we prevent animations so that users's animation don't kick in too early referring wrong sides
131
+ animation: S ? void 0 : "none"
132
+ }
133
+ }
134
+ )
135
+ }
136
+ )
137
+ }
138
+ );
139
+ }
140
+ );
141
+ J.displayName = _;
142
+ var K = "PopperArrow", Ie = {
143
+ top: "bottom",
144
+ right: "left",
145
+ bottom: "top",
146
+ left: "right"
147
+ }, Q = p.forwardRef(function(s, a) {
148
+ const { __scopePopper: t, ...i } = s, r = We(K, t), o = Ie[r.placedSide];
149
+ return (
150
+ // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)
151
+ // doesn't report size as we'd expect on SVG elements.
152
+ // it reports their bounding box which is effectively the largest path inside the SVG.
153
+ /* @__PURE__ */ f(
154
+ "span",
155
+ {
156
+ ref: r.onArrowChange,
157
+ style: {
158
+ position: "absolute",
159
+ left: r.arrowX,
160
+ top: r.arrowY,
161
+ [o]: 0,
162
+ transformOrigin: {
163
+ top: "",
164
+ right: "0 0",
165
+ bottom: "center 0",
166
+ left: "100% 0"
167
+ }[r.placedSide],
168
+ transform: {
169
+ top: "translateY(100%)",
170
+ right: "translateY(50%) rotate(90deg) translateX(-50%)",
171
+ bottom: "rotate(180deg)",
172
+ left: "translateY(50%) rotate(-90deg) translateX(50%)"
173
+ }[r.placedSide],
174
+ visibility: r.shouldHideArrow ? "hidden" : void 0
175
+ },
176
+ children: /* @__PURE__ */ f(
177
+ Oe,
178
+ {
179
+ ...i,
180
+ ref: a,
181
+ style: {
182
+ ...i.style,
183
+ // ensures the element can be measured correctly (mostly for if SVG)
184
+ display: "block"
185
+ }
186
+ }
187
+ )
188
+ }
189
+ )
27
190
  );
28
- I.displayName = d;
29
- function O(c) {
30
- const e = f(s + "CollectionConsumer", c);
31
- return r.useCallback(() => {
32
- const o = e.collectionRef.current;
33
- if (!o) return [];
34
- const t = Array.from(o.querySelectorAll(`[${R}]`));
35
- return Array.from(e.itemMap.values()).sort(
36
- (i, v) => t.indexOf(i.ref.current) - t.indexOf(v.ref.current)
37
- );
38
- }, [e.collectionRef, e.itemMap]);
191
+ });
192
+ Q.displayName = K;
193
+ function Ye(e) {
194
+ return e !== null;
195
+ }
196
+ var Me = (e) => ({
197
+ name: "transformOrigin",
198
+ options: e,
199
+ fn(s) {
200
+ var v, h, C;
201
+ const { placement: a, rects: t, middlewareData: i } = s, o = ((v = i.arrow) == null ? void 0 : v.centerOffset) !== 0, w = o ? 0 : e.arrowWidth, n = o ? 0 : e.arrowHeight, [c, x] = V(a), m = { start: "0%", center: "50%", end: "100%" }[x], y = (((h = i.arrow) == null ? void 0 : h.x) ?? 0) + w / 2, A = (((C = i.arrow) == null ? void 0 : C.y) ?? 0) + n / 2;
202
+ let l = "", d = "";
203
+ return c === "bottom" ? (l = o ? m : `${y}px`, d = `${-n}px`) : c === "top" ? (l = o ? m : `${y}px`, d = `${t.floating.height + n}px`) : c === "right" ? (l = `${-n}px`, d = o ? m : `${A}px`) : c === "left" && (l = `${t.floating.width + n}px`, d = o ? m : `${A}px`), { data: { x: l, y: d } };
39
204
  }
40
- return [
41
- { Provider: p, Slot: C, ItemSlot: I },
42
- O,
43
- N
44
- ];
205
+ });
206
+ function V(e) {
207
+ const [s, a = "center"] = e.split("-");
208
+ return [s, a];
45
209
  }
210
+ var qe = U, Ge = G, Je = J, Ke = Q;
46
211
  export {
47
- g as createCollection
212
+ Ge as Anchor,
213
+ Ke as Arrow,
214
+ Je as Content,
215
+ U as Popper,
216
+ G as PopperAnchor,
217
+ Q as PopperArrow,
218
+ J as PopperContent,
219
+ qe as Root,
220
+ Ue as createPopperScope
48
221
  };
package/dist/index99.js CHANGED
@@ -1,10 +1,8 @@
1
- import * as t from "react";
2
- import "react/jsx-runtime";
3
- var r = t.createContext(void 0);
4
- function n(o) {
5
- const e = t.useContext(r);
6
- return o || e || "ltr";
1
+ import * as u from "react";
2
+ function t(r) {
3
+ const e = u.useRef({ value: r, previous: r });
4
+ return u.useMemo(() => (e.current.value !== r && (e.current.previous = e.current.value, e.current.value = r), e.current.previous), [r]);
7
5
  }
8
6
  export {
9
- n as useDirection
7
+ t as usePrevious
10
8
  };
package/package.json CHANGED
@@ -1,18 +1,11 @@
1
1
  {
2
2
  "name": "@drjoshcsimmons/scl",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/jcpsimmons/scl"
8
8
  },
9
- "pnpm": {
10
- "overrides": {
11
- "lru-cache": "^10.0.0",
12
- "semver": "^7.6.0",
13
- "browserslist": "^4.24.0"
14
- }
15
- },
16
9
  "main": "./dist/index.js",
17
10
  "module": "./dist/index.js",
18
11
  "types": "./dist/index.d.ts",
@@ -29,16 +22,6 @@
29
22
  "sideEffects": [
30
23
  "**/*.css"
31
24
  ],
32
- "scripts": {
33
- "dev": "storybook dev -p 6006",
34
- "build": "tsc && vite build && cp src/styles/globals.css dist/globals.css",
35
- "build:storybook": "storybook build -o storybook-static",
36
- "test": "vitest",
37
- "test:coverage": "vitest --coverage",
38
- "lint": "eslint src --ext .ts,.tsx",
39
- "typecheck": "tsc --noEmit",
40
- "prepublishOnly": "npm run build"
41
- },
42
25
  "peerDependencies": {
43
26
  "react": "^18.0.0 || ^19.0.0",
44
27
  "react-dom": "^18.0.0 || ^19.0.0"
@@ -137,5 +120,14 @@
137
120
  "@lezer/highlight": "^1.2.3",
138
121
  "@replit/codemirror-vim": "^6.3.0",
139
122
  "@vercel/analytics": "^1.6.1"
123
+ },
124
+ "scripts": {
125
+ "dev": "storybook dev -p 6006",
126
+ "build": "tsc && vite build && cp src/styles/globals.css dist/globals.css",
127
+ "build:storybook": "storybook build -o storybook-static",
128
+ "test": "vitest",
129
+ "test:coverage": "vitest --coverage",
130
+ "lint": "eslint src --ext .ts,.tsx",
131
+ "typecheck": "tsc --noEmit"
140
132
  }
141
- }
133
+ }