@yourbestsoft/studio-screen-ui-kit 0.0.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.
Files changed (76) hide show
  1. package/README.md +1 -0
  2. package/dist/App.d.ts +1 -0
  3. package/dist/ToolIconButton-Be6zefbX.js +520 -0
  4. package/dist/ToolIconButton-Be6zefbX.js.map +1 -0
  5. package/dist/components/button/Button.d.ts +26 -0
  6. package/dist/components/button/index.d.ts +1 -0
  7. package/dist/components/buttons-group/ButtonsGroup.d.ts +14 -0
  8. package/dist/components/buttons-group/index.d.ts +1 -0
  9. package/dist/components/card/Card.d.ts +17 -0
  10. package/dist/components/card/index.d.ts +1 -0
  11. package/dist/components/color-button/ColorButton.d.ts +10 -0
  12. package/dist/components/color-button/index.d.ts +1 -0
  13. package/dist/components/color-picker/ColorPicker.d.ts +9 -0
  14. package/dist/components/color-picker/colors.d.ts +2 -0
  15. package/dist/components/color-picker/hooks/usePalette.d.ts +18 -0
  16. package/dist/components/color-picker/hooks/usePaletteControls.d.ts +8 -0
  17. package/dist/components/color-picker/index.d.ts +1 -0
  18. package/dist/components/color-picker/parts/hex-input/HexInput.d.ts +9 -0
  19. package/dist/components/color-picker/parts/palette/Palette.d.ts +8 -0
  20. package/dist/components/color-picker/parts/shadow-list/ShadesList.d.ts +9 -0
  21. package/dist/components/color-picker/types.d.ts +9 -0
  22. package/dist/components/dialog/Dialog.d.ts +34 -0
  23. package/dist/components/dialog/index.d.ts +1 -0
  24. package/dist/components/drop-down/DropDown.d.ts +23 -0
  25. package/dist/components/drop-down/index.d.ts +1 -0
  26. package/dist/components/icon-button/IconButton.d.ts +10 -0
  27. package/dist/components/icon-button/index.d.ts +1 -0
  28. package/dist/components/index.d.ts +19 -0
  29. package/dist/components/pagination/Pagination.d.ts +9 -0
  30. package/dist/components/pagination/index.d.ts +1 -0
  31. package/dist/components/pagination/utils/getPagesArray.d.ts +6 -0
  32. package/dist/components/pagination/utils/getPagesArray.test.d.ts +1 -0
  33. package/dist/components/select/Select.d.ts +20 -0
  34. package/dist/components/select/index.d.ts +1 -0
  35. package/dist/components/shortcut/Shortcut.d.ts +22 -0
  36. package/dist/components/shortcut/index.d.ts +1 -0
  37. package/dist/components/sidebar/Sidebar.d.ts +31 -0
  38. package/dist/components/sidebar/index.d.ts +1 -0
  39. package/dist/components/slider/Slider.d.ts +9 -0
  40. package/dist/components/slider/index.d.ts +1 -0
  41. package/dist/components/switcher-buttons/SwitcherButtons.d.ts +17 -0
  42. package/dist/components/switcher-buttons/index.d.ts +1 -0
  43. package/dist/components/table/Table.d.ts +33 -0
  44. package/dist/components/table/index.d.ts +1 -0
  45. package/dist/components/text-field/index.d.ts +1 -0
  46. package/dist/components/text-field/text-field.d.ts +33 -0
  47. package/dist/components/theme-switcher/ThemeSwitcher.d.ts +1 -0
  48. package/dist/components/theme-switcher/index.d.ts +1 -0
  49. package/dist/components/toggle-switch/ToggleSwitch.d.ts +14 -0
  50. package/dist/components/toggle-switch/index.d.ts +1 -0
  51. package/dist/components/toolbar/Toolbar.d.ts +13 -0
  52. package/dist/components/toolbar/index.d.ts +2 -0
  53. package/dist/components/toolbar/tool-icon-button/ToolIconButton.d.ts +20 -0
  54. package/dist/components/toolbar/tool-icon-button/index.d.ts +1 -0
  55. package/dist/features/card-collection/CardCollection.d.ts +15 -0
  56. package/dist/features/card-collection/index.d.ts +1 -0
  57. package/dist/features/index.d.ts +3 -0
  58. package/dist/features/save-modal/SaveModal.d.ts +6 -0
  59. package/dist/features/save-modal/index.d.ts +1 -0
  60. package/dist/features/theme-provider/ThemeProvider.d.ts +12 -0
  61. package/dist/features/theme-provider/index.d.ts +1 -0
  62. package/dist/hooks/index.d.ts +2 -0
  63. package/dist/hooks/useKeyboardControls.d.ts +3 -0
  64. package/dist/hooks/useSelect.d.ts +17 -0
  65. package/dist/index.js +821 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/index2.js +102 -0
  68. package/dist/index2.js.map +1 -0
  69. package/dist/main.d.ts +1 -0
  70. package/dist/style.css +1 -0
  71. package/dist/utils/colorUtils.d.ts +2 -0
  72. package/dist/utils/fileUtils.d.ts +3 -0
  73. package/dist/utils/index.d.ts +3 -0
  74. package/dist/utils/typeUtils.d.ts +1 -0
  75. package/dist/vite.svg +1 -0
  76. package/package.json +80 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+
package/dist/App.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const App: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,520 @@
1
+ import { jsx as n, jsxs as g, Fragment as A } from "react/jsx-runtime";
2
+ import i from "classnames";
3
+ import G, { forwardRef as p, createContext as I, useState as w, useRef as P, useEffect as E, useContext as C } from "react";
4
+ import { Eye as J, EyeOff as Q, X as U, Search as Y } from "lucide-react";
5
+ const Z = "_text_4m304_1", tt = "_tertiary_4m304_1", et = "_secondary_4m304_1", ot = "_primary_4m304_1", nt = "_fullWidth_4m304_50", st = "_buttonWithIcon_4m304_54", rt = "_content_4m304_61", ct = "_shortcut_4m304_70", at = "_disabled_4m304_82", b = {
6
+ text: Z,
7
+ tertiary: tt,
8
+ secondary: et,
9
+ primary: ot,
10
+ fullWidth: nt,
11
+ buttonWithIcon: st,
12
+ content: rt,
13
+ shortcut: ct,
14
+ disabled: at
15
+ }, it = ({
16
+ children: t,
17
+ className: e,
18
+ component: o = "button",
19
+ disabled: s,
20
+ fullWidth: c,
21
+ icon: r,
22
+ shortcut: a,
23
+ variant: _ = "primary",
24
+ ...d
25
+ }, l) => {
26
+ const m = /* @__PURE__ */ g("div", { className: b.buttonWithIcon, children: [
27
+ /* @__PURE__ */ g("div", { className: b.content, children: [
28
+ r,
29
+ t
30
+ ] }),
31
+ /* @__PURE__ */ n("div", { className: b.shortcut, children: a })
32
+ ] });
33
+ return /* @__PURE__ */ n(
34
+ o,
35
+ {
36
+ className: i(
37
+ b[_],
38
+ c && b.fullWidth,
39
+ s && b.disabled,
40
+ r && b.icon,
41
+ e
42
+ ),
43
+ children: r ? m : t,
44
+ disabled: s,
45
+ ref: l,
46
+ ...d
47
+ }
48
+ );
49
+ }, He = p(it), lt = "_content_23x5h_1", dt = "_header_23x5h_1", _t = "_root_23x5h_7", ut = "_contentAfterHeader_23x5h_22", D = {
50
+ content: lt,
51
+ header: dt,
52
+ root: _t,
53
+ contentAfterHeader: ut
54
+ }, H = p(
55
+ ({ className: t, ...e }, o) => /* @__PURE__ */ n("div", { className: i(D.root, t), ref: o, ...e })
56
+ ), ht = p(
57
+ ({ className: t, ignoreHeader: e, ...o }, s) => /* @__PURE__ */ n(
58
+ "div",
59
+ {
60
+ className: i(
61
+ D.content,
62
+ !e && D.contentAfterHeader,
63
+ t
64
+ ),
65
+ ref: s,
66
+ ...o
67
+ }
68
+ )
69
+ ), mt = p(
70
+ ({ className: t, ...e }, o) => /* @__PURE__ */ n("div", { className: i(D.header, t), ref: o, ...e })
71
+ ), Fe = Object.assign(H, {
72
+ Content: ht,
73
+ Header: mt,
74
+ Root: H
75
+ }), gt = "_root_1xfv8_1", pt = "_dropdownContent_1xfv8_6", ft = "_left_1xfv8_17", bt = "_center_1xfv8_21", vt = "_right_1xfv8_26", wt = "_top_1xfv8_30", Ct = "_bottom_1xfv8_34", Nt = "_fixedPosition_1xfv8_38", T = {
76
+ root: gt,
77
+ dropdownContent: pt,
78
+ left: ft,
79
+ center: bt,
80
+ right: vt,
81
+ top: wt,
82
+ bottom: Ct,
83
+ fixedPosition: Nt
84
+ }, B = I(
85
+ void 0
86
+ ), M = () => {
87
+ const t = C(B);
88
+ if (!t)
89
+ throw new Error("useDropDownContext must be used within a DropDown.Root");
90
+ return t;
91
+ }, y = [], xt = ({
92
+ children: t,
93
+ closeOnEsc: e = !0,
94
+ closeOnOutsideClick: o = !0,
95
+ defaultVisible: s = !1
96
+ }) => {
97
+ const [c, r] = w(s), a = P(null), _ = () => {
98
+ c ? d() : (r(!0), a.current && y.push(a.current));
99
+ }, d = () => {
100
+ if (r(!1), a.current) {
101
+ const l = y.indexOf(a.current);
102
+ l !== -1 && y.splice(l, 1);
103
+ }
104
+ };
105
+ return E(() => {
106
+ if (!o) return;
107
+ const l = (m) => {
108
+ a.current && !a.current.contains(m.target) && d();
109
+ };
110
+ return document.addEventListener("mousedown", l), () => {
111
+ document.removeEventListener("mousedown", l);
112
+ };
113
+ }, [o]), E(() => {
114
+ if (!e) return;
115
+ const l = (m) => {
116
+ m.key === "Escape" && c && y[y.length - 1] === a.current && d();
117
+ };
118
+ return document.addEventListener("keydown", l), () => {
119
+ document.removeEventListener("keydown", l);
120
+ };
121
+ }, [e, c]), /* @__PURE__ */ n(B.Provider, { value: { close: d, toggle: _, visible: c }, children: /* @__PURE__ */ n("div", { ref: a, className: T.root, children: t }) });
122
+ }, kt = ({ children: t }) => {
123
+ const { toggle: e } = M();
124
+ return /* @__PURE__ */ n("div", { onClick: e, children: t });
125
+ }, yt = ({
126
+ children: t,
127
+ className: e,
128
+ fixedPosition: o = !1,
129
+ horizontal: s = "left",
130
+ vertical: c = "bottom"
131
+ }) => {
132
+ const { visible: r } = M();
133
+ return r ? /* @__PURE__ */ n(
134
+ "div",
135
+ {
136
+ className: i(
137
+ T.dropdownContent,
138
+ T[s],
139
+ T[c],
140
+ { [T.fixedPosition]: o },
141
+ e
142
+ ),
143
+ children: t
144
+ }
145
+ ) : null;
146
+ }, Ae = { Content: yt, Root: xt, Trigger: kt }, Tt = "_dialogRoot_c30vs_1", Rt = "_dialogTrigger_c30vs_5", Dt = "_dialogContent_c30vs_13", St = "_dialogClose_c30vs_25", $t = "_dialogTitle_c30vs_33", Ot = "_dialogSeparator_c30vs_38", N = {
147
+ dialogRoot: Tt,
148
+ dialogTrigger: Rt,
149
+ dialogContent: Dt,
150
+ dialogClose: St,
151
+ dialogTitle: $t,
152
+ dialogSeparator: Ot
153
+ }, S = G.createContext(null), Wt = ({
154
+ children: t,
155
+ isOpen: e,
156
+ onStateChange: o
157
+ }) => {
158
+ const s = P(null), [c, r] = w(!1), a = e !== void 0 ? e : c, _ = (d) => {
159
+ e === void 0 && r(d), o && o(d);
160
+ };
161
+ return /* @__PURE__ */ n(S.Provider, { value: { dialogRef: s, isOpen: a, setIsOpen: _ }, children: /* @__PURE__ */ n("div", { className: N.dialogRoot, children: t }) });
162
+ }, Et = ({
163
+ as: t,
164
+ children: e,
165
+ ...o
166
+ }) => {
167
+ const s = C(S);
168
+ if (!s) throw new Error("Trigger must be used within a Dialog.Root");
169
+ const { dialogRef: c, setIsOpen: r } = s;
170
+ return /* @__PURE__ */ n(
171
+ t || "button",
172
+ {
173
+ onClick: () => {
174
+ c.current?.showModal(), r(!0);
175
+ },
176
+ ...o,
177
+ className: N.dialogTrigger,
178
+ role: t && t !== "button" ? "button" : void 0,
179
+ children: e
180
+ }
181
+ );
182
+ }, It = p(
183
+ ({ children: t, className: e, closeOnBackdropClick: o = !0 }, s) => {
184
+ const c = C(S);
185
+ if (!c) throw new Error("Content must be used within a Dialog.Root");
186
+ const { dialogRef: r, isOpen: a, setIsOpen: _ } = c, d = (l) => {
187
+ o && l.target === r.current && (r.current?.close(), _(!1));
188
+ };
189
+ return /* @__PURE__ */ n(
190
+ "dialog",
191
+ {
192
+ ref: r,
193
+ className: i(N.dialogContent, e),
194
+ onClick: d,
195
+ open: a,
196
+ children: /* @__PURE__ */ n("div", { onClick: (l) => l.stopPropagation(), children: t })
197
+ }
198
+ );
199
+ }
200
+ ), Pt = ({
201
+ as: t,
202
+ children: e,
203
+ ...o
204
+ }) => {
205
+ const s = C(S);
206
+ if (!s) throw new Error("Close must be used within a Dialog.Root");
207
+ const { dialogRef: c, setIsOpen: r } = s;
208
+ return /* @__PURE__ */ n(
209
+ t || "button",
210
+ {
211
+ onClick: () => {
212
+ c.current?.close(), r(!1);
213
+ },
214
+ ...o,
215
+ className: N.dialogClose,
216
+ role: t && t !== "button" ? "button" : void 0,
217
+ children: e
218
+ }
219
+ );
220
+ }, Lt = ({ children: t, className: e }) => /* @__PURE__ */ n("h2", { className: i(N.dialogTitle, e), children: t }), qt = ({}) => /* @__PURE__ */ n("div", { className: N.dialogSeparator }), Be = {
221
+ Close: Pt,
222
+ Content: It,
223
+ Root: Wt,
224
+ Separator: qt,
225
+ Title: Lt,
226
+ Trigger: Et
227
+ }, Ht = "_sidebar_dg2au_12", Ft = "_trigger_dg2au_16", At = "_content_dg2au_21", Bt = "_left_dg2au_34", Mt = "_open_dg2au_38", Vt = "_right_dg2au_42", jt = "_bottom_dg2au_50", zt = "_top_dg2au_63", v = {
228
+ sidebar: Ht,
229
+ trigger: Ft,
230
+ content: At,
231
+ left: Bt,
232
+ open: Mt,
233
+ right: Vt,
234
+ bottom: jt,
235
+ top: zt
236
+ }, V = I(
237
+ void 0
238
+ ), L = () => {
239
+ const t = C(V);
240
+ if (!t)
241
+ throw new Error("useSidebarContext must be used within a SidebarProvider");
242
+ return t;
243
+ }, Kt = ({ children: t, isOpen: e, setIsOpen: o }) => {
244
+ const [s, c] = w(e);
245
+ return /* @__PURE__ */ n(
246
+ V.Provider,
247
+ {
248
+ value: {
249
+ isOpen: s,
250
+ setIsOpen: (r) => {
251
+ c(r), o(r);
252
+ }
253
+ },
254
+ children: t
255
+ }
256
+ );
257
+ }, Xt = ({ children: t }) => {
258
+ const { setIsOpen: e } = L(), o = (s) => {
259
+ s.preventDefault(), e(!0);
260
+ };
261
+ return /* @__PURE__ */ n("div", { className: v.trigger, onClick: o, children: t });
262
+ }, Gt = ({
263
+ children: t,
264
+ className: e,
265
+ closeOnOutsideClick: o = !0,
266
+ position: s = "right"
267
+ }) => {
268
+ const { isOpen: c, setIsOpen: r } = L(), a = P(null);
269
+ return E(() => {
270
+ if (!o) return;
271
+ const _ = (d) => {
272
+ a.current && !a.current.contains(d.target) && r(!1);
273
+ };
274
+ return c && document.addEventListener("mousedown", _), () => {
275
+ document.removeEventListener("mousedown", _);
276
+ };
277
+ }, [c, r, o]), /* @__PURE__ */ n(
278
+ "div",
279
+ {
280
+ ref: a,
281
+ className: i(
282
+ v[s],
283
+ v.content,
284
+ {
285
+ [v.close]: !c,
286
+ [v.open]: c
287
+ },
288
+ e
289
+ ),
290
+ children: t
291
+ }
292
+ );
293
+ }, Jt = ({ children: t }) => {
294
+ const { setIsOpen: e } = L(), o = (s) => {
295
+ s.preventDefault(), e(!1);
296
+ };
297
+ return /* @__PURE__ */ n("button", { className: v.close, onClick: o, children: t });
298
+ }, Me = {
299
+ Close: Jt,
300
+ Content: Gt,
301
+ Root: Kt,
302
+ Trigger: Xt
303
+ }, Qt = "_switcher_k6tdq_1", Ut = "_buttons_k6tdq_6", Yt = "_separator_k6tdq_10", W = {
304
+ switcher: Qt,
305
+ buttons: Ut,
306
+ separator: Yt
307
+ }, Ve = p(
308
+ ({
309
+ className: t,
310
+ component: e,
311
+ componentValues: o,
312
+ containerProps: s,
313
+ onChange: c,
314
+ selectedValue: r,
315
+ slot: a
316
+ }, _) => {
317
+ const [d, l] = w(
318
+ r || o[0].value
319
+ ), m = (h) => {
320
+ l(h), c && c(h);
321
+ };
322
+ return /* @__PURE__ */ g("div", { ref: _, className: W.switcher, ...s, children: [
323
+ /* @__PURE__ */ n("div", { className: i(W.buttons, t), children: o.map((h, x) => /* @__PURE__ */ n(
324
+ e,
325
+ {
326
+ ...h,
327
+ selected: d === h.value,
328
+ onClick: () => m(h.value)
329
+ },
330
+ x
331
+ )) }),
332
+ a && /* @__PURE__ */ g(A, { children: [
333
+ /* @__PURE__ */ n("div", { className: W.separator }),
334
+ a
335
+ ] })
336
+ ] });
337
+ }
338
+ ), Zt = "_root_w2o37_13", te = "_header_w2o37_19", ee = "_footer_w2o37_23", oe = "_row_w2o37_28", ne = "_body_w2o37_40", se = "_head_w2o37_19", re = "_cell_w2o37_47", ce = "_caption_w2o37_64", ae = "_storiesFooterCellOne_w2o37_69", ie = "_storiesFooterCellTwo_w2o37_72", f = {
339
+ root: Zt,
340
+ header: te,
341
+ footer: ee,
342
+ row: oe,
343
+ body: ne,
344
+ head: se,
345
+ cell: re,
346
+ caption: ce,
347
+ storiesFooterCellOne: ae,
348
+ storiesFooterCellTwo: ie
349
+ }, F = ({ children: t, className: e }) => /* @__PURE__ */ n("table", { className: i(f.root, e), children: t }), le = ({ children: t, className: e }) => /* @__PURE__ */ n("caption", { className: i(f.caption, e), children: t }), de = ({ children: t, className: e }) => /* @__PURE__ */ n("thead", { className: i(f.header, e), children: t }), _e = ({ children: t, className: e, onClick: o }) => /* @__PURE__ */ n("tr", { className: i(f.row, e), onClick: o, children: t }), ue = ({ children: t, className: e }) => /* @__PURE__ */ n("th", { className: i(f.head, e), children: t }), he = ({ children: t, className: e }) => /* @__PURE__ */ n("tbody", { className: i(f.body, e), children: t }), me = ({ children: t, className: e }) => /* @__PURE__ */ n("td", { className: i(f.cell, e), children: t }), ge = ({ children: t, className: e }) => /* @__PURE__ */ n("tfoot", { className: i(f.footer, e), children: t }), je = Object.assign(F, {
350
+ Body: he,
351
+ Caption: le,
352
+ Cell: me,
353
+ Footer: ge,
354
+ Head: ue,
355
+ Header: de,
356
+ Root: F,
357
+ Row: _e
358
+ }), pe = "_inputContainer_iqbs3_1", fe = "_input_iqbs3_1", be = "_inputSearch_iqbs3_40", ve = "_error_iqbs3_43", we = "_button_iqbs3_58", Ce = "_buttonWithLabel_iqbs3_68", Ne = "_resetSearchValue_iqbs3_73", xe = "_searchOutline_iqbs3_80", ke = "_errorMessage_iqbs3_87", u = {
359
+ inputContainer: pe,
360
+ input: fe,
361
+ inputSearch: be,
362
+ error: ve,
363
+ button: we,
364
+ buttonWithLabel: Ce,
365
+ resetSearchValue: Ne,
366
+ searchOutline: xe,
367
+ errorMessage: ke
368
+ }, ze = p(({ className: t, error: e, label: o, onChange: s, required: c, ...r }, a) => {
369
+ const [_, d] = w(!1), l = (x) => s(x.currentTarget.value), m = i(u.input, e && u.error, t);
370
+ let h;
371
+ if (!r.as || r.as === "input") {
372
+ const { as: x, inputType: k, ...K } = r, $ = k === "search", q = k === "password", X = _ ? "text" : "password";
373
+ h = /* @__PURE__ */ g(A, { children: [
374
+ /* @__PURE__ */ n(
375
+ "input",
376
+ {
377
+ className: i(m, $ && u.inputSearch),
378
+ onChange: l,
379
+ ref: a,
380
+ type: q ? X : k,
381
+ ...K
382
+ }
383
+ ),
384
+ q && (_ ? /* @__PURE__ */ n(
385
+ J,
386
+ {
387
+ strokeWidth: 2.5,
388
+ width: 20,
389
+ className: i(u.button, o && u.buttonWithLabel),
390
+ onClick: () => d((O) => !O)
391
+ }
392
+ ) : /* @__PURE__ */ n(
393
+ Q,
394
+ {
395
+ strokeWidth: 2.5,
396
+ width: 20,
397
+ className: i(u.button, o && u.buttonWithLabel),
398
+ onClick: () => d((O) => !O)
399
+ }
400
+ )),
401
+ $ && r.value && /* @__PURE__ */ n(
402
+ U,
403
+ {
404
+ onClick: () => s(""),
405
+ className: i(
406
+ u.button,
407
+ o && u.buttonWithLabel,
408
+ u.resetSearchValue
409
+ ),
410
+ strokeWidth: 2.5,
411
+ size: 24
412
+ }
413
+ ),
414
+ $ && /* @__PURE__ */ n(
415
+ Y,
416
+ {
417
+ className: i(
418
+ u.searchOutline,
419
+ o && u.searchOutlineWithLabel
420
+ ),
421
+ size: 20
422
+ }
423
+ )
424
+ ] });
425
+ }
426
+ if (r.as === "textarea") {
427
+ const { as: x, ...k } = r;
428
+ h = /* @__PURE__ */ n(
429
+ "textarea",
430
+ {
431
+ className: m,
432
+ onChange: l,
433
+ ref: a,
434
+ ...k
435
+ }
436
+ );
437
+ }
438
+ return /* @__PURE__ */ g("div", { className: u.root, children: [
439
+ /* @__PURE__ */ g("span", { className: u.title, children: [
440
+ o,
441
+ c && /* @__PURE__ */ n("span", { className: u.titleError, children: "*" })
442
+ ] }),
443
+ /* @__PURE__ */ n("div", { className: u.inputContainer, children: h }),
444
+ /* @__PURE__ */ n("div", { className: u.errorMessage, children: e })
445
+ ] });
446
+ }), j = I(void 0), Ke = ({ children: t }) => {
447
+ const e = z() || "system", [o, s] = w(e);
448
+ return /* @__PURE__ */ n(j.Provider, { value: { setTheme: s, theme: o }, children: t });
449
+ }, Xe = () => {
450
+ const t = C(j);
451
+ if (!t)
452
+ throw new Error("useTheme must be used within a ThemeProvider");
453
+ return ye(t.theme), t;
454
+ }, ye = (t) => {
455
+ const e = window.matchMedia("(prefers-color-scheme: dark)"), s = z() ?? (e.matches ? "dark" : "light");
456
+ Te(t === "system" ? s : t);
457
+ }, Te = (t) => {
458
+ Re(t), localStorage.setItem("theme", t);
459
+ }, Re = (t) => {
460
+ document.documentElement.setAttribute("data-theme", t);
461
+ }, z = () => {
462
+ const t = localStorage.getItem("theme");
463
+ if (t) return t;
464
+ }, De = "_root_17w6h_1", Se = "_icon_17w6h_11", $e = "_active_17w6h_27", Oe = "_disabled_17w6h_31", We = "_keybinding_17w6h_44", R = {
465
+ root: De,
466
+ icon: Se,
467
+ active: $e,
468
+ disabled: Oe,
469
+ keybinding: We
470
+ }, Ge = p(
471
+ (t, e) => {
472
+ const { classes: o, disabled: s, icon: c, isActive: r, keybinding: a, onClick: _, title: d } = t, l = Ee(o, r, s);
473
+ return /* @__PURE__ */ g("label", { className: R.root, title: d, children: [
474
+ /* @__PURE__ */ n(
475
+ "div",
476
+ {
477
+ className: l.icon,
478
+ ref: e,
479
+ tabIndex: s ? -1 : 0,
480
+ role: "button",
481
+ "aria-pressed": r,
482
+ "aria-disabled": s,
483
+ onClick: s ? void 0 : _,
484
+ children: c
485
+ }
486
+ ),
487
+ a && /* @__PURE__ */ n("span", { className: l.keybinding, children: a })
488
+ ] });
489
+ }
490
+ ), Ee = (t, e, o) => ({
491
+ icon: i(
492
+ R.icon,
493
+ {
494
+ [R.active]: e,
495
+ [R.disabled]: o
496
+ },
497
+ t?.icon
498
+ ),
499
+ keybinding: i(R.keybinding, t?.keybinding)
500
+ });
501
+ export {
502
+ He as B,
503
+ H as C,
504
+ Ae as D,
505
+ V as S,
506
+ je as T,
507
+ it as a,
508
+ ht as b,
509
+ mt as c,
510
+ Fe as d,
511
+ Be as e,
512
+ L as f,
513
+ Me as g,
514
+ Ve as h,
515
+ ze as i,
516
+ Ge as j,
517
+ Ke as k,
518
+ Xe as u
519
+ };
520
+ //# sourceMappingURL=ToolIconButton-Be6zefbX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolIconButton-Be6zefbX.js","sources":["../src/components/button/Button.tsx","../src/components/card/Card.tsx","../src/components/drop-down/DropDown.tsx","../src/components/dialog/Dialog.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/switcher-buttons/SwitcherButtons.tsx","../src/components/table/Table.tsx","../src/components/text-field/text-field.tsx","../src/features/theme-provider/ThemeProvider.tsx","../src/components/toolbar/tool-icon-button/ToolIconButton.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport {\n ComponentPropsWithoutRef,\n ElementRef,\n ElementType,\n ForwardedRef,\n ReactNode,\n forwardRef,\n} from 'react'\n\nimport { Replace } from '../../utils'\nimport s from './button.module.scss'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'text'\ntype OwnProps<T extends ElementType> = {\n children?: ReactNode\n className?: string\n component?: T\n disabled?: boolean\n fullWidth?: boolean\n variant?: ButtonVariant\n icon?: ReactNode\n shortcut?: string\n}\n\nexport type ButtonProps<T extends ElementType> = Replace<\n ComponentPropsWithoutRef<T>,\n OwnProps<T>\n>\n\ntype ButtonRenderType = {\n (\n props: ButtonProps<'button'>,\n ref?: ForwardedRef<ElementRef<'button'>>\n ): ReactNode\n (\n props: ButtonProps<ElementType>,\n ref?: ForwardedRef<ElementRef<ElementType>>\n ): ReactNode\n}\n\nexport type ButtonComponent = {\n <T extends ElementType = 'button'>(\n props: ButtonProps<T> & { ref?: ForwardedRef<ElementRef<T>> }\n ): ReactNode\n}\n\nexport const ButtonRender: ButtonRenderType = (\n {\n children,\n className,\n component: Component = 'button',\n disabled,\n fullWidth,\n icon,\n shortcut,\n variant = 'primary',\n ...props\n },\n ref\n) => {\n const content = (\n <div className={s.buttonWithIcon}>\n <div className={s.content}>\n {icon}\n {children}\n </div>\n <div className={s.shortcut}>{shortcut}</div>\n </div>\n )\n\n return (\n <Component\n className={classNames(\n s[variant],\n fullWidth && s.fullWidth,\n disabled && s.disabled,\n icon && s.icon,\n className\n )}\n children={icon ? content : children}\n disabled={disabled}\n ref={ref}\n {...props}\n />\n )\n}\n\nexport const Button: ButtonComponent = forwardRef(ButtonRender)\n","import classNames from 'classnames'\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'\n\nimport s from './card.module.scss'\n\nexport type CardProps = ComponentPropsWithoutRef<'div'>\n\nexport const CardRoot = forwardRef<ElementRef<'div'>, CardProps>(\n ({ className, ...props }, ref) => (\n <div className={classNames(s.root, className)} ref={ref} {...props} />\n )\n)\n\nexport type CardContentProps = CardProps & { ignoreHeader?: boolean }\n\nexport const CardContent = forwardRef<ElementRef<'div'>, CardContentProps>(\n ({ className, ignoreHeader, ...props }, ref) => (\n <div\n className={classNames(\n s.content,\n !ignoreHeader && s.contentAfterHeader,\n className\n )}\n ref={ref}\n {...props}\n />\n )\n)\n\nexport const CardHeader = forwardRef<ElementRef<'div'>, CardProps>(\n ({ className, ...props }, ref) => (\n <div className={classNames(s.header, className)} ref={ref} {...props} />\n )\n)\n\nexport const Card = Object.assign(CardRoot, {\n Content: CardContent,\n Header: CardHeader,\n Root: CardRoot,\n})\n","import classNames from 'classnames'\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport styles from './drop-down.module.scss'\n\ninterface DropDownContextType {\n visible: boolean\n toggle: () => void\n close: () => void\n}\n\nconst DropDownContext = createContext<DropDownContextType | undefined>(\n undefined\n)\n\nconst useDropDownContext = () => {\n const context = useContext(DropDownContext)\n if (!context) {\n throw new Error('useDropDownContext must be used within a DropDown.Root')\n }\n return context\n}\n\ninterface RootProps {\n children: ReactNode\n defaultVisible?: boolean\n closeOnOutsideClick?: boolean\n closeOnEsc?: boolean\n}\n\nconst openDropDownStack: HTMLElement[] = []\n\nconst Root = ({\n children,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n defaultVisible = false,\n}: RootProps) => {\n const [visible, setVisible] = useState(defaultVisible)\n const rootRef = useRef<HTMLDivElement>(null)\n\n const toggle = () => {\n if (!visible) {\n setVisible(true)\n if (rootRef.current) {\n openDropDownStack.push(rootRef.current)\n }\n } else {\n close()\n }\n }\n\n const close = () => {\n setVisible(false)\n if (rootRef.current) {\n const index = openDropDownStack.indexOf(rootRef.current)\n if (index !== -1) {\n openDropDownStack.splice(index, 1)\n }\n }\n }\n\n useEffect(() => {\n if (!closeOnOutsideClick) return\n\n const handleClickOutside = (event: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) {\n close()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [closeOnOutsideClick])\n\n useEffect(() => {\n if (!closeOnEsc) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && visible) {\n const lastDropDown = openDropDownStack[openDropDownStack.length - 1]\n if (lastDropDown === rootRef.current) {\n close()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [closeOnEsc, visible])\n\n return (\n <DropDownContext.Provider value={{ close, toggle, visible }}>\n <div ref={rootRef} className={styles.root}>\n {children}\n </div>\n </DropDownContext.Provider>\n )\n}\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nconst Trigger = ({ children }: TriggerProps) => {\n const { toggle } = useDropDownContext()\n return <div onClick={toggle}>{children}</div>\n}\n\ninterface ContentProps {\n children: ReactNode\n horizontal?: 'left' | 'center' | 'right'\n vertical?: 'top' | 'bottom'\n className?: string\n fixedPosition?: boolean\n}\n\nconst Content = ({\n children,\n className,\n fixedPosition = false,\n horizontal = 'left',\n vertical = 'bottom',\n}: ContentProps) => {\n const { visible } = useDropDownContext()\n\n if (!visible) return null\n\n return (\n <div\n className={classNames(\n styles.dropdownContent,\n styles[horizontal],\n styles[vertical],\n { [styles.fixedPosition]: fixedPosition },\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nexport const DropDown = { Content, Root, Trigger }\n","import classNames from 'classnames'\nimport React, {\n useState,\n useRef,\n ReactNode,\n forwardRef,\n MouseEvent,\n ElementType,\n useContext,\n} from 'react'\n\nimport styles from './dialog.module.scss'\n\ninterface RootProps {\n children: React.ReactNode\n isOpen?: boolean\n onStateChange?: (isOpen: boolean) => void\n}\n\ninterface DialogContextProps {\n dialogRef: React.RefObject<HTMLDialogElement>\n isOpen: boolean\n setIsOpen: (state: boolean) => void\n}\nconst DialogContext = React.createContext<DialogContextProps | null>(null)\n\nconst Root = ({\n children,\n isOpen: externalIsOpen,\n onStateChange,\n}: RootProps) => {\n const dialogRef = useRef<HTMLDialogElement | null>(null)\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n\n const isOpen = externalIsOpen !== undefined ? externalIsOpen : internalIsOpen\n const setIsOpen = (state: boolean) => {\n if (externalIsOpen === undefined) {\n setInternalIsOpen(state)\n }\n if (onStateChange) {\n onStateChange(state)\n }\n }\n\n return (\n <DialogContext.Provider value={{ dialogRef, isOpen, setIsOpen }}>\n <div className={styles.dialogRoot}>{children}</div>\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps<T extends ElementType = 'button'> {\n as?: T\n children: ReactNode\n}\n\nconst Trigger = <T extends ElementType = 'button'>({\n as,\n children,\n ...props\n}: TriggerProps<T> & React.ComponentPropsWithoutRef<T>) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Trigger must be used within a Dialog.Root')\n\n const { dialogRef, setIsOpen } = context\n const Component = as || 'button'\n\n const handleClick = () => {\n dialogRef.current?.showModal()\n setIsOpen(true)\n }\n\n return (\n <Component\n onClick={handleClick}\n {...props}\n className={styles.dialogTrigger}\n role={as && as !== 'button' ? 'button' : undefined}\n >\n {children}\n </Component>\n )\n}\n\ninterface ContentProps {\n children: ReactNode\n className?: string\n closeOnBackdropClick?: boolean\n}\n\nconst Content = forwardRef<HTMLDialogElement, ContentProps>(\n ({ children, className, closeOnBackdropClick = true }, _) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Content must be used within a Dialog.Root')\n\n const { dialogRef, isOpen, setIsOpen } = context\n\n const handleBackdropClick = (event: MouseEvent<HTMLDialogElement>) => {\n if (closeOnBackdropClick && event.target === dialogRef.current) {\n dialogRef.current?.close()\n setIsOpen(false)\n }\n }\n\n return (\n <dialog\n ref={dialogRef}\n className={classNames(styles.dialogContent, className)}\n onClick={handleBackdropClick}\n open={isOpen}\n >\n <div onClick={(e) => e.stopPropagation()}>{children}</div>\n </dialog>\n )\n }\n)\n\ninterface CloseProps<T extends ElementType = 'button'> {\n as?: T\n children?: ReactNode\n}\n\nconst Close = <T extends ElementType = 'button'>({\n as,\n children,\n ...props\n}: CloseProps<T> & React.ComponentPropsWithoutRef<T>) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Close must be used within a Dialog.Root')\n\n const { dialogRef, setIsOpen } = context\n const Component = as || 'button'\n\n const handleClick = () => {\n dialogRef.current?.close()\n setIsOpen(false)\n }\n\n return (\n <Component\n onClick={handleClick}\n {...props}\n className={styles.dialogClose}\n role={as && as !== 'button' ? 'button' : undefined}\n >\n {children}\n </Component>\n )\n}\n\ninterface TitleProps {\n children: ReactNode\n className?: string\n}\n\nconst Title = ({ children, className }: TitleProps) => {\n return (\n <h2 className={classNames(styles.dialogTitle, className)}>{children}</h2>\n )\n}\n\ninterface SeparatorProps {}\n\nconst Separator = ({}: SeparatorProps) => {\n return <div className={styles.dialogSeparator} />\n}\n\nexport const Dialog = {\n Close,\n Content,\n Root,\n Separator,\n Title,\n Trigger,\n}\n","import classNames from 'classnames'\nimport {\n createContext,\n MouseEvent,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport styles from './sidebar.module.scss'\n\ntype SidebarContextProps = {\n isOpen: boolean\n setIsOpen: (isOpen: boolean) => void\n}\n\nexport const SidebarContext = createContext<SidebarContextProps | undefined>(\n undefined\n)\n\nexport const useSidebarContext = () => {\n const context = useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebarContext must be used within a SidebarProvider')\n }\n return context\n}\n\ntype SidebarRootProps = {\n isOpen: boolean\n setIsOpen: (isOpen: boolean) => void\n children: ReactNode\n}\n\nconst Root = ({ children, isOpen, setIsOpen }: SidebarRootProps) => {\n const [opened, setOpened] = useState(isOpen)\n\n return (\n <SidebarContext.Provider\n value={{\n isOpen: opened,\n setIsOpen: (open) => {\n setOpened(open)\n setIsOpen(open)\n },\n }}\n >\n {children}\n </SidebarContext.Provider>\n )\n}\n\ntype SidebarTriggerProps = {\n children: ReactNode\n}\n\nconst Trigger = ({ children }: SidebarTriggerProps) => {\n const { setIsOpen } = useSidebarContext()\n\n const onClickHandler = (event: MouseEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsOpen(true)\n }\n\n return (\n <div className={styles.trigger} onClick={onClickHandler}>\n {children}\n </div>\n )\n}\n\ntype SidebarContentProps = {\n position?: 'left' | 'right' | 'bottom' | 'top'\n children: ReactNode\n className?: string\n closeOnOutsideClick?: boolean\n}\n\nconst Content = ({\n children,\n className,\n closeOnOutsideClick = true,\n position = 'right',\n}: SidebarContentProps) => {\n const { isOpen, setIsOpen } = useSidebarContext()\n const contentRef = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (!closeOnOutsideClick) return\n\n const handleClickOutside = (event: Event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen, closeOnOutsideClick])\n\n return (\n <div\n ref={contentRef}\n className={classNames(\n styles[position],\n styles.content,\n {\n [styles.close]: !isOpen,\n [styles.open]: isOpen,\n },\n className\n )}\n >\n {children}\n </div>\n )\n}\n\ntype SidebarCloseProps = {\n children: ReactNode\n}\n\nconst Close = ({ children }: SidebarCloseProps) => {\n const { setIsOpen } = useSidebarContext()\n\n const onClickHandler = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n setIsOpen(false)\n }\n\n return (\n <button className={styles.close} onClick={onClickHandler}>\n {children}\n </button>\n )\n}\n\nexport const Sidebar = {\n Close,\n Content,\n Root,\n Trigger,\n}\n","import classNames from 'classnames'\nimport React, { ElementType, forwardRef, ReactNode, useState } from 'react'\n\nimport style from './switcher-buttons.module.scss'\n\ninterface ComponentValues {\n value: string\n [key: string]: any\n}\n\ninterface SwitcherProps {\n componentValues: ComponentValues[]\n defaultValue?: string\n onChange?: (value: string) => void\n selectedValue?: string\n component: ElementType\n containerProps?: React.HTMLAttributes<HTMLDivElement>\n slot?: ReactNode\n className?: string\n}\n\nexport const SwitcherButtons = forwardRef<HTMLDivElement, SwitcherProps>(\n (\n {\n className,\n component: Component,\n componentValues,\n containerProps,\n onChange,\n selectedValue,\n slot,\n },\n ref\n ) => {\n const [activeValue, setActiveValue] = useState<string>(\n selectedValue || componentValues[0].value\n )\n\n const onChangeHandler = (value: string) => {\n setActiveValue(value)\n if (onChange) onChange(value)\n }\n\n return (\n <div ref={ref} className={style.switcher} {...containerProps}>\n <div className={classNames(style.buttons, className)}>\n {componentValues.map((button, index) => (\n <Component\n key={index}\n {...button}\n selected={activeValue === button.value}\n onClick={() => onChangeHandler(button.value)}\n />\n ))}\n </div>\n {slot && (\n <>\n <div className={style.separator} />\n {slot}\n </>\n )}\n </div>\n )\n }\n)\n","import classNames from 'classnames'\nimport { MouseEventHandler, ReactNode } from 'react'\n\nimport s from './table.module.scss'\n\ninterface Props {\n children: ReactNode\n className?: string\n}\n\ninterface RootProps extends Props {}\nconst Root = ({ children, className }: RootProps) => {\n return <table className={classNames(s.root, className)}>{children}</table>\n}\n\ninterface CaptionProps extends Props {}\nconst Caption = ({ children, className }: CaptionProps) => {\n return (\n <caption className={classNames(s.caption, className)}>{children}</caption>\n )\n}\n\ninterface HeaderProps extends Props {}\nconst Header = ({ children, className }: HeaderProps) => {\n return <thead className={classNames(s.header, className)}>{children}</thead>\n}\n\ninterface RowProps extends Props {\n onClick?: MouseEventHandler<HTMLTableRowElement> | undefined\n}\nconst Row = ({ children, className, onClick }: RowProps) => {\n return (\n <tr className={classNames(s.row, className)} onClick={onClick}>\n {children}\n </tr>\n )\n}\n\ninterface HeadProps extends Props {}\nconst Head = ({ children, className }: HeadProps) => {\n return <th className={classNames(s.head, className)}>{children}</th>\n}\n\ninterface BodyProps extends Props {}\nconst Body = ({ children, className }: BodyProps) => {\n return <tbody className={classNames(s.body, className)}>{children}</tbody>\n}\n\ninterface CellProps extends Props {}\nconst Cell = ({ children, className }: CellProps) => {\n return <td className={classNames(s.cell, className)}>{children}</td>\n}\n\ninterface FooterProps extends Props {}\nconst Footer = ({ children, className }: FooterProps) => {\n return <tfoot className={classNames(s.footer, className)}>{children}</tfoot>\n}\n\nexport const Table = Object.assign(Root, {\n Body,\n Caption,\n Cell,\n Footer,\n Head,\n Header,\n Root,\n Row,\n})\n","import {\n ChangeEvent,\n ForwardedRef,\n ReactNode,\n forwardRef,\n useState,\n} from 'react'\n\nimport classNames from 'classnames'\n\nimport s from './text-field.module.scss'\nimport { X, Eye, Search, EyeOff } from 'lucide-react'\n\ntype SharedProps = {\n className?: string\n disabled?: boolean\n error?: string\n label?: string\n onBlur?: () => void\n onChange: (value: string) => void\n onFocus?: () => void\n placeholder?: string\n required?: boolean\n value: string\n}\n\nexport type TextFieldProps =\n | (SharedProps & {\n as?: 'input'\n inputType?: 'password' | 'search' | 'text'\n })\n | (SharedProps & { as: 'textarea' })\n\nexport type TextFieldComponent = {\n (\n props: Extract<TextFieldProps, { as: 'textarea' }> & {\n ref?: ForwardedRef<HTMLTextAreaElement>\n }\n ): ReactNode\n (\n props: Extract<TextFieldProps, { as?: 'input' }> & {\n ref?: ForwardedRef<HTMLInputElement>\n }\n ): ReactNode\n}\n\nexport const TextField: TextFieldComponent = forwardRef<\n HTMLInputElement | HTMLTextAreaElement,\n TextFieldProps\n>(({ className, error, label, onChange, required, ...props }, ref) => {\n const [showPassword, setShowPassword] = useState(false)\n\n const handleChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => onChange(e.currentTarget.value)\n\n const sharedClassName = classNames(s.input, error && s.error, className)\n let resolvedFragment: ReactNode\n\n if (!props.as || props.as === 'input') {\n const { as, inputType, ...restProps } = props\n const isSearch = inputType === 'search'\n const isPassword = inputType === 'password'\n const passwordFieldNextType = showPassword ? 'text' : 'password'\n\n resolvedFragment = (\n <>\n <input\n className={classNames(sharedClassName, isSearch && s.inputSearch)}\n onChange={handleChange}\n ref={ref as unknown as ForwardedRef<HTMLInputElement>}\n type={isPassword ? passwordFieldNextType : inputType}\n {...restProps}\n />\n {isPassword &&\n (showPassword ? (\n <Eye\n strokeWidth={2.5}\n width={20}\n className={classNames(s.button, label && s.buttonWithLabel)}\n onClick={() => setShowPassword((prev) => !prev)}\n />\n ) : (\n <EyeOff\n strokeWidth={2.5}\n width={20}\n className={classNames(s.button, label && s.buttonWithLabel)}\n onClick={() => setShowPassword((prev) => !prev)}\n />\n ))}\n {isSearch && props.value && (\n <X\n onClick={() => onChange('')}\n className={classNames(\n s.button,\n label && s.buttonWithLabel,\n s.resetSearchValue\n )}\n strokeWidth={2.5}\n size={24}\n />\n )}\n {isSearch && (\n <Search\n className={classNames(\n s.searchOutline,\n label && s.searchOutlineWithLabel\n )}\n size={20}\n />\n )}\n </>\n )\n }\n\n if (props.as === 'textarea') {\n const { as, ...restProps } = props\n\n resolvedFragment = (\n <textarea\n className={sharedClassName}\n onChange={handleChange}\n ref={ref as unknown as ForwardedRef<HTMLTextAreaElement>}\n {...restProps}\n />\n )\n }\n\n return (\n <div className={s.root}>\n <span className={s.title}>\n {label}\n {required && <span className={s.titleError}>*</span>}\n </span>\n <div className={s.inputContainer}>{resolvedFragment}</div>\n <div className={s.errorMessage}>{error}</div>\n </div>\n )\n})\n","import { createContext, useContext, useState, ReactNode } from 'react'\n\nexport type Theme = 'light' | 'dark'\nexport type ThemeValue = Theme | 'system'\n\ninterface ThemeContextType {\n theme: ThemeValue\n setTheme: (theme: ThemeValue) => void\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined)\n\nexport const ThemeProvider = ({ children }: { children: ReactNode }) => {\n const defaultTheme = getTheme() || 'system'\n const [theme, setTheme] = useState<ThemeValue>(defaultTheme)\n\n return (\n <ThemeContext.Provider value={{ setTheme, theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext)\n\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider')\n }\n\n setDataThemeHandler(context.theme)\n\n return context\n}\n\nconst setDataThemeHandler = (value: ThemeValue) => {\n const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)')\n const savedTheme = getTheme()\n const defaultTheme =\n savedTheme ?? (prefersDarkScheme.matches ? 'dark' : 'light')\n\n saveTheme(value === 'system' ? defaultTheme : value)\n}\n\nconst saveTheme = (theme: Theme) => {\n setTheme(theme)\n localStorage.setItem('theme', theme)\n}\n\nconst setTheme = (theme: Theme) => {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nconst getTheme = () => {\n const theme = localStorage.getItem('theme')\n if (theme) return theme as Theme\n}\n","import classNames from 'classnames'\nimport { ReactNode, forwardRef } from 'react'\n\nimport s from './tool-icon-button.module.scss'\n\nexport type ToolbarSlot = 'icon' | 'keybinding'\nexport type ToolbarClasses = { [P in ToolbarSlot]?: string }\n\ninterface Props {\n title?: string\n icon: ReactNode\n keybinding?: string\n aria_label?: string\n aria_keyshortcuts?: string\n classes?: ToolbarClasses\n name?: string\n id?: string\n isActive?: boolean\n disabled?: boolean\n onClick?: () => void\n}\n\nexport const ToolIconButton = forwardRef<HTMLDivElement, Props>(\n (props, ref) => {\n const { classes, disabled, icon, isActive, keybinding, onClick, title } =\n props\n\n const styles = getClasses(classes, isActive, disabled)\n\n return (\n <label className={s.root} title={title}>\n <div\n className={styles.icon}\n ref={ref}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-pressed={isActive}\n aria-disabled={disabled}\n onClick={!disabled ? onClick : undefined}\n >\n {icon}\n </div>\n {keybinding && <span className={styles.keybinding}>{keybinding}</span>}\n </label>\n )\n }\n)\n\nconst getClasses = (\n classes?: ToolbarClasses,\n isActive?: boolean,\n disabled?: boolean\n): Required<ToolbarClasses> => ({\n icon: classNames(\n s.icon,\n {\n [s.active]: isActive,\n [s.disabled]: disabled,\n },\n classes?.icon\n ),\n keybinding: classNames(s.keybinding, classes?.keybinding),\n})\n"],"names":["ButtonRender","children","className","Component","disabled","fullWidth","icon","shortcut","variant","props","ref","content","jsxs","s","jsx","classNames","Button","forwardRef","CardRoot","CardContent","ignoreHeader","CardHeader","Card","DropDownContext","createContext","useDropDownContext","context","useContext","openDropDownStack","Root","closeOnEsc","closeOnOutsideClick","defaultVisible","visible","setVisible","useState","rootRef","useRef","toggle","close","index","useEffect","handleClickOutside","event","handleKeyDown","styles","Trigger","Content","fixedPosition","horizontal","vertical","DropDown","DialogContext","React","externalIsOpen","onStateChange","dialogRef","internalIsOpen","setInternalIsOpen","isOpen","setIsOpen","state","as","closeOnBackdropClick","_","handleBackdropClick","e","Close","Title","Separator","Dialog","SidebarContext","useSidebarContext","opened","setOpened","open","onClickHandler","position","contentRef","Sidebar","SwitcherButtons","componentValues","containerProps","onChange","selectedValue","slot","activeValue","setActiveValue","onChangeHandler","value","style","button","Fragment","Caption","Header","Row","onClick","Head","Body","Cell","Footer","Table","TextField","error","label","required","showPassword","setShowPassword","handleChange","sharedClassName","resolvedFragment","inputType","restProps","isSearch","isPassword","passwordFieldNextType","Eye","prev","EyeOff","X","Search","ThemeContext","ThemeProvider","defaultTheme","getTheme","theme","setTheme","useTheme","setDataThemeHandler","prefersDarkScheme","saveTheme","ToolIconButton","classes","isActive","keybinding","title","getClasses"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ComponentPropsWithoutRef, ElementRef, ElementType, ForwardedRef, ReactNode } from 'react';
2
+ import { Replace } from '../../utils';
3
+ export type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'text';
4
+ type OwnProps<T extends ElementType> = {
5
+ children?: ReactNode;
6
+ className?: string;
7
+ component?: T;
8
+ disabled?: boolean;
9
+ fullWidth?: boolean;
10
+ variant?: ButtonVariant;
11
+ icon?: ReactNode;
12
+ shortcut?: string;
13
+ };
14
+ export type ButtonProps<T extends ElementType> = Replace<ComponentPropsWithoutRef<T>, OwnProps<T>>;
15
+ type ButtonRenderType = {
16
+ (props: ButtonProps<'button'>, ref?: ForwardedRef<ElementRef<'button'>>): ReactNode;
17
+ (props: ButtonProps<ElementType>, ref?: ForwardedRef<ElementRef<ElementType>>): ReactNode;
18
+ };
19
+ export type ButtonComponent = {
20
+ <T extends ElementType = 'button'>(props: ButtonProps<T> & {
21
+ ref?: ForwardedRef<ElementRef<T>>;
22
+ }): ReactNode;
23
+ };
24
+ export declare const ButtonRender: ButtonRenderType;
25
+ export declare const Button: ButtonComponent;
26
+ export {};
@@ -0,0 +1 @@
1
+ export * from './Button';
@@ -0,0 +1,14 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ interface ButtonProps extends HTMLAttributes<HTMLButtonElement> {
3
+ label?: string;
4
+ icon?: ReactNode;
5
+ onClick?: () => void;
6
+ disabled?: boolean;
7
+ selected?: boolean;
8
+ }
9
+ interface Props {
10
+ buttons: ButtonProps[];
11
+ className?: string;
12
+ }
13
+ export declare const ButtonsGroup: ({ buttons, className }: Props) => import("react/jsx-runtime").JSX.Element;
14
+ export {};
@@ -0,0 +1 @@
1
+ export * from './ButtonsGroup';