@treeui/vue 0.1.0 → 0.1.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.
package/dist/index.js ADDED
@@ -0,0 +1,824 @@
1
+ import { defineComponent as F, computed as o, openBlock as l, createElementBlock as d, normalizeClass as S, renderSlot as b, createCommentVNode as _, createElementVNode as v, toDisplayString as L, createBlock as re, resolveDynamicComponent as Ue, withCtx as Q, createVNode as E, ref as R, useAttrs as ie, toRef as Be, watch as we, onBeforeUnmount as Oe, unref as f, normalizeStyle as de, mergeProps as ue, normalizeProps as te, guardReactiveProps as ae, Transition as Se, Fragment as be, renderList as he, nextTick as le, useSlots as qe, Teleport as Ge, createTextVNode as Je } from "vue";
2
+ import { startOfDay as ke, parseDateValue as ge, createId as Ie, startOfMonth as U, startOfWeek as ee, addDays as H, toDateValue as $e, isSameDay as Te, addMonths as De, isEscapeKey as Ce, isActivationKey as Ae, focusFirst as Pe, getFocusableElements as Qe, focusLast as Xe } from "@treeui/utils";
3
+ import { getTreeIcon as se, treeIconDefaults as oe } from "@treeui/icons";
4
+ const Ye = {
5
+ key: 0,
6
+ class: "tree-badge__icon",
7
+ "aria-hidden": "true"
8
+ }, Le = /* @__PURE__ */ F({
9
+ __name: "TreeBadge",
10
+ props: {
11
+ variant: { default: "soft" },
12
+ size: { default: "md" }
13
+ },
14
+ setup(t) {
15
+ const p = t, n = o(() => [
16
+ "tree-badge",
17
+ `tree-badge--${p.variant}`,
18
+ `tree-badge--${p.size}`
19
+ ]);
20
+ return (r, c) => (l(), d("span", {
21
+ class: S(n.value)
22
+ }, [
23
+ r.$slots.icon ? (l(), d("span", Ye, [
24
+ b(r.$slots, "icon")
25
+ ])) : _("", !0),
26
+ b(r.$slots, "default")
27
+ ], 2));
28
+ }
29
+ }), Ze = ["aria-label"], et = { class: "tree-visually-hidden" }, ne = /* @__PURE__ */ F({
30
+ __name: "TreeSpinner",
31
+ props: {
32
+ size: { default: "md" },
33
+ label: { default: "Loading" }
34
+ },
35
+ setup(t) {
36
+ const p = t, n = o(() => ["tree-spinner", `tree-spinner--${p.size}`]);
37
+ return (r, c) => (l(), d("span", {
38
+ class: S(n.value),
39
+ role: "status",
40
+ "aria-label": t.label
41
+ }, [
42
+ c[0] || (c[0] = v("span", {
43
+ class: "tree-spinner__ring",
44
+ "aria-hidden": "true"
45
+ }, null, -1)),
46
+ v("span", et, L(t.label), 1)
47
+ ], 10, Ze));
48
+ }
49
+ }), tt = {
50
+ key: 0,
51
+ class: "tree-button__spinner"
52
+ }, at = {
53
+ key: 1,
54
+ class: "tree-button__icon",
55
+ "aria-hidden": "true"
56
+ }, st = { class: "tree-button__label" }, Ee = /* @__PURE__ */ F({
57
+ __name: "TreeButton",
58
+ props: {
59
+ as: { default: "button" },
60
+ variant: { default: "solid" },
61
+ size: { default: "md" },
62
+ disabled: { type: Boolean, default: !1 },
63
+ loading: { type: Boolean, default: !1 },
64
+ type: { default: "button" }
65
+ },
66
+ emits: ["click"],
67
+ setup(t, { emit: p }) {
68
+ const n = t, r = p, c = o(() => n.as === "button"), a = o(() => n.disabled || n.loading), h = o(() => [
69
+ "tree-button",
70
+ `tree-button--${n.variant}`,
71
+ `tree-button--${n.size}`,
72
+ {
73
+ "is-loading": n.loading,
74
+ "is-disabled": a.value
75
+ }
76
+ ]), T = (m) => {
77
+ if (a.value) {
78
+ m.preventDefault(), m.stopPropagation();
79
+ return;
80
+ }
81
+ r("click", m);
82
+ };
83
+ return (m, k) => (l(), re(Ue(t.as), {
84
+ type: c.value ? t.type : void 0,
85
+ class: S(h.value),
86
+ disabled: c.value ? a.value : void 0,
87
+ "aria-disabled": !c.value && a.value ? "true" : void 0,
88
+ "aria-busy": t.loading || void 0,
89
+ tabindex: !c.value && a.value ? -1 : void 0,
90
+ onClick: T
91
+ }, {
92
+ default: Q(() => [
93
+ t.loading ? (l(), d("span", tt, [
94
+ E(ne, {
95
+ size: "sm",
96
+ label: "Loading"
97
+ })
98
+ ])) : _("", !0),
99
+ m.$slots.icon ? (l(), d("span", at, [
100
+ b(m.$slots, "icon")
101
+ ])) : _("", !0),
102
+ v("span", st, [
103
+ b(m.$slots, "default")
104
+ ])
105
+ ]),
106
+ _: 3
107
+ }, 8, ["type", "class", "disabled", "aria-disabled", "aria-busy", "tabindex"]));
108
+ }
109
+ }), ot = {
110
+ key: 0,
111
+ class: "tree-card__header"
112
+ }, lt = { class: "tree-card__body" }, nt = {
113
+ key: 1,
114
+ class: "tree-card__footer"
115
+ }, Re = /* @__PURE__ */ F({
116
+ __name: "TreeCard",
117
+ props: {
118
+ as: { default: "section" },
119
+ variant: { default: "outline" },
120
+ size: { default: "md" }
121
+ },
122
+ setup(t) {
123
+ const p = t, n = o(() => [
124
+ "tree-card",
125
+ `tree-card--${p.variant}`,
126
+ `tree-card--${p.size}`
127
+ ]);
128
+ return (r, c) => (l(), re(Ue(t.as), {
129
+ class: S(n.value)
130
+ }, {
131
+ default: Q(() => [
132
+ r.$slots.header ? (l(), d("header", ot, [
133
+ b(r.$slots, "header")
134
+ ])) : _("", !0),
135
+ v("div", lt, [
136
+ b(r.$slots, "default")
137
+ ]),
138
+ r.$slots.footer ? (l(), d("footer", nt, [
139
+ b(r.$slots, "footer")
140
+ ])) : _("", !0)
141
+ ]),
142
+ _: 3
143
+ }, 8, ["class"]));
144
+ }
145
+ }), Ve = (t, p, n) => {
146
+ const r = R(p), c = o(() => t.value ?? r.value);
147
+ return {
148
+ value: c,
149
+ setValue: (h) => {
150
+ h !== c.value && (t.value === void 0 && (r.value = h), n(h));
151
+ }
152
+ };
153
+ }, rt = ["data-state"], it = ["name", "value"], dt = ["disabled", "aria-controls", "aria-expanded", "aria-invalid"], ut = {
154
+ key: 0,
155
+ class: "tree-date-picker__slot tree-date-picker__slot--prefix"
156
+ }, ct = ["data-placeholder"], ft = { class: "tree-date-picker__slot tree-date-picker__slot--suffix" }, pt = ["id"], vt = { class: "tree-date-picker__header" }, mt = ["disabled"], yt = ["disabled"], _t = {
157
+ class: "tree-date-picker__weekdays",
158
+ "aria-hidden": "true"
159
+ }, bt = ["aria-selected"], ht = ["data-date", "disabled", "tabindex", "aria-current", "aria-label", "onClick", "onKeydown"], Fe = /* @__PURE__ */ F({
160
+ inheritAttrs: !1,
161
+ __name: "TreeDatePicker",
162
+ props: {
163
+ modelValue: { default: "" },
164
+ open: { type: Boolean, default: void 0 },
165
+ defaultOpen: { type: Boolean, default: !1 },
166
+ size: { default: "md" },
167
+ disabled: { type: Boolean, default: !1 },
168
+ invalid: { type: Boolean, default: !1 },
169
+ placeholder: { default: "Select date" },
170
+ locale: { default: "en-US" },
171
+ min: { default: "" },
172
+ max: { default: "" },
173
+ weekStartsOn: { default: 0 },
174
+ id: { default: void 0 }
175
+ },
176
+ emits: ["update:modelValue", "update:open", "open-change", "select"],
177
+ setup(t, { emit: p }) {
178
+ const n = se("calendar"), r = se("chevron-left"), c = se("chevron-right"), a = t, h = p, T = ie(), m = ke(/* @__PURE__ */ new Date()), k = o(() => ge(a.modelValue)), u = o(() => ge(a.min)), D = o(() => ge(a.max)), w = a.id ?? Ie("tree-date-picker"), z = `${w}-caption`, j = R(null), W = R(null), M = /* @__PURE__ */ new Map(), O = R(U(k.value ?? m)), y = R(k.value ?? m), q = o(() => {
179
+ const { class: e, style: s, name: g, ...J } = T;
180
+ return J;
181
+ }), G = o(
182
+ () => typeof T.name == "string" ? T.name : void 0
183
+ ), ce = o(() => [
184
+ "tree-date-picker",
185
+ `tree-date-picker--${a.size}`,
186
+ {
187
+ "is-disabled": a.disabled,
188
+ "is-invalid": a.invalid,
189
+ "is-open": C.value
190
+ },
191
+ T.class
192
+ ]), K = o(() => T.style), { value: C, setValue: X } = Ve(
193
+ Be(a, "open"),
194
+ a.defaultOpen,
195
+ (e) => {
196
+ h("update:open", e), h("open-change", e);
197
+ }
198
+ ), Y = o(() => k.value ? new Intl.DateTimeFormat(a.locale, {
199
+ day: "numeric",
200
+ month: "long",
201
+ year: "numeric"
202
+ }).format(k.value) : a.placeholder), fe = o(
203
+ () => new Intl.DateTimeFormat(a.locale, {
204
+ month: "long",
205
+ year: "numeric"
206
+ }).format(O.value)
207
+ ), pe = o(() => {
208
+ const e = new Intl.DateTimeFormat(a.locale, { weekday: "short" }), s = ee(new Date(2024, 0, 7), a.weekStartsOn);
209
+ return Array.from(
210
+ { length: 7 },
211
+ (g, J) => e.format(H(s, J))
212
+ );
213
+ }), N = (e) => !!(a.disabled || u.value && e < u.value || D.value && e > D.value), A = (e) => {
214
+ y.value = ke(e), O.value = U(e);
215
+ };
216
+ we(
217
+ k,
218
+ (e) => {
219
+ if (e) {
220
+ A(e);
221
+ return;
222
+ }
223
+ C.value || A(m);
224
+ },
225
+ { immediate: !0 }
226
+ );
227
+ const ve = o(() => {
228
+ const e = ee(U(O.value), a.weekStartsOn);
229
+ return Array.from(
230
+ { length: 6 },
231
+ (s, g) => Array.from({ length: 7 }, (J, $) => {
232
+ const B = H(e, g * 7 + $), We = $e(B);
233
+ return {
234
+ date: B,
235
+ dayLabel: B.getDate(),
236
+ disabled: N(B),
237
+ inMonth: B.getMonth() === O.value.getMonth(),
238
+ isFocused: Te(B, y.value),
239
+ isSelected: Te(B, k.value),
240
+ isToday: Te(B, m),
241
+ key: We
242
+ };
243
+ })
244
+ );
245
+ }), me = o(() => u.value ? U(O.value) > U(u.value) : !0), ye = o(() => D.value ? U(O.value) < U(D.value) : !0), i = () => {
246
+ const e = $e(y.value);
247
+ le(() => {
248
+ var s;
249
+ (s = M.get(e)) == null || s.focus();
250
+ });
251
+ }, I = (e, s) => {
252
+ if (e instanceof HTMLButtonElement) {
253
+ M.set(s, e);
254
+ return;
255
+ }
256
+ M.delete(s);
257
+ }, V = () => {
258
+ a.disabled || (A(k.value ?? y.value ?? m), X(!0), i());
259
+ }, x = (e = !1) => {
260
+ X(!1), e && le(() => {
261
+ var s;
262
+ (s = W.value) == null || s.focus();
263
+ });
264
+ }, Z = () => {
265
+ if (C.value) {
266
+ x();
267
+ return;
268
+ }
269
+ V();
270
+ }, ze = (e) => {
271
+ const s = De(O.value, e);
272
+ A(s), i();
273
+ }, P = (e) => {
274
+ N(e) || (A(e), i());
275
+ }, Me = (e) => {
276
+ if (N(e))
277
+ return;
278
+ const s = ke(e), g = $e(s);
279
+ A(s), h("update:modelValue", g), h("select", g), x(!0);
280
+ }, He = (e) => {
281
+ if (!a.disabled) {
282
+ if (Ce(e) && C.value) {
283
+ e.preventDefault(), x();
284
+ return;
285
+ }
286
+ (Ae(e) || e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), V());
287
+ }
288
+ }, je = (e, s) => {
289
+ if (Ce(e)) {
290
+ e.preventDefault(), x(!0);
291
+ return;
292
+ }
293
+ if (Ae(e)) {
294
+ e.preventDefault(), Me(s);
295
+ return;
296
+ }
297
+ switch (e.key) {
298
+ case "ArrowLeft":
299
+ e.preventDefault(), P(H(s, -1));
300
+ break;
301
+ case "ArrowRight":
302
+ e.preventDefault(), P(H(s, 1));
303
+ break;
304
+ case "ArrowUp":
305
+ e.preventDefault(), P(H(s, -7));
306
+ break;
307
+ case "ArrowDown":
308
+ e.preventDefault(), P(H(s, 7));
309
+ break;
310
+ case "Home":
311
+ e.preventDefault(), P(ee(s, a.weekStartsOn));
312
+ break;
313
+ case "End":
314
+ e.preventDefault(), P(H(ee(s, a.weekStartsOn), 6));
315
+ break;
316
+ case "PageUp":
317
+ e.preventDefault(), P(De(s, e.shiftKey ? -12 : -1));
318
+ break;
319
+ case "PageDown":
320
+ e.preventDefault(), P(De(s, e.shiftKey ? 12 : 1));
321
+ break;
322
+ }
323
+ }, _e = (e) => {
324
+ var g;
325
+ if (!C.value)
326
+ return;
327
+ const s = e.target;
328
+ s instanceof Node && ((g = j.value) != null && g.contains(s) || x());
329
+ };
330
+ return we(C, (e) => {
331
+ if (e) {
332
+ document.addEventListener("pointerdown", _e);
333
+ return;
334
+ }
335
+ document.removeEventListener("pointerdown", _e);
336
+ }), Oe(() => {
337
+ document.removeEventListener("pointerdown", _e);
338
+ }), (e, s) => (l(), d("div", {
339
+ ref_key: "rootRef",
340
+ ref: j,
341
+ class: S(ce.value),
342
+ style: de(K.value),
343
+ "data-state": f(C) ? "open" : "closed"
344
+ }, [
345
+ G.value ? (l(), d("input", {
346
+ key: 0,
347
+ type: "hidden",
348
+ name: G.value,
349
+ value: t.modelValue
350
+ }, null, 8, it)) : _("", !0),
351
+ v("button", ue({
352
+ ref_key: "triggerRef",
353
+ ref: W
354
+ }, q.value, {
355
+ type: "button",
356
+ class: "tree-date-picker__trigger",
357
+ disabled: t.disabled,
358
+ "aria-controls": f(C) ? f(w) : void 0,
359
+ "aria-haspopup": "dialog",
360
+ "aria-expanded": f(C),
361
+ "aria-invalid": t.invalid || void 0,
362
+ onClick: Z,
363
+ onKeydown: He
364
+ }), [
365
+ e.$slots.prefix ? (l(), d("span", ut, [
366
+ b(e.$slots, "prefix")
367
+ ])) : _("", !0),
368
+ v("span", {
369
+ class: "tree-date-picker__value",
370
+ "data-placeholder": k.value ? void 0 : !0
371
+ }, L(Y.value), 9, ct),
372
+ v("span", ft, [
373
+ b(e.$slots, "suffix", {}, () => [
374
+ E(f(n), te(ae(f(oe))), null, 16)
375
+ ])
376
+ ])
377
+ ], 16, dt),
378
+ E(Se, { name: "tree-fade" }, {
379
+ default: Q(() => [
380
+ f(C) && !t.disabled ? (l(), d("div", {
381
+ key: 0,
382
+ id: f(w),
383
+ class: "tree-date-picker__content",
384
+ role: "dialog",
385
+ "aria-modal": "false",
386
+ "aria-labelledby": z
387
+ }, [
388
+ v("div", vt, [
389
+ v("button", {
390
+ type: "button",
391
+ class: "tree-date-picker__nav",
392
+ disabled: !me.value,
393
+ "aria-label": "Previous month",
394
+ onClick: s[0] || (s[0] = (g) => ze(-1))
395
+ }, [
396
+ E(f(r), te(ae(f(oe))), null, 16)
397
+ ], 8, mt),
398
+ v("p", {
399
+ id: z,
400
+ class: "tree-date-picker__month"
401
+ }, L(fe.value), 1),
402
+ v("button", {
403
+ type: "button",
404
+ class: "tree-date-picker__nav",
405
+ disabled: !ye.value,
406
+ "aria-label": "Next month",
407
+ onClick: s[1] || (s[1] = (g) => ze(1))
408
+ }, [
409
+ E(f(c), te(ae(f(oe))), null, 16)
410
+ ], 8, yt)
411
+ ]),
412
+ v("div", _t, [
413
+ (l(!0), d(be, null, he(pe.value, (g) => (l(), d("span", {
414
+ key: g,
415
+ class: "tree-date-picker__weekday"
416
+ }, L(g), 1))), 128))
417
+ ]),
418
+ v("div", {
419
+ class: "tree-date-picker__grid",
420
+ role: "grid",
421
+ "aria-labelledby": z
422
+ }, [
423
+ (l(!0), d(be, null, he(ve.value, (g, J) => (l(), d("div", {
424
+ key: J,
425
+ class: "tree-date-picker__row",
426
+ role: "row"
427
+ }, [
428
+ (l(!0), d(be, null, he(g, ($) => (l(), d("div", {
429
+ key: $.key,
430
+ class: "tree-date-picker__cell",
431
+ role: "gridcell",
432
+ "aria-selected": $.isSelected
433
+ }, [
434
+ v("button", {
435
+ ref_for: !0,
436
+ ref: (B) => I(B, $.key),
437
+ type: "button",
438
+ class: S(["tree-date-picker__day", {
439
+ "is-muted": !$.inMonth,
440
+ "is-selected": $.isSelected,
441
+ "is-today": $.isToday
442
+ }]),
443
+ "data-date": $.key,
444
+ disabled: $.disabled,
445
+ tabindex: $.isFocused ? 0 : -1,
446
+ "aria-current": $.isToday ? "date" : void 0,
447
+ "aria-label": $.key,
448
+ onClick: (B) => Me($.date),
449
+ onKeydown: (B) => je(B, $.date)
450
+ }, L($.dayLabel), 43, ht)
451
+ ], 8, bt))), 128))
452
+ ]))), 128))
453
+ ])
454
+ ], 8, pt)) : _("", !0)
455
+ ]),
456
+ _: 1
457
+ })
458
+ ], 14, rt));
459
+ }
460
+ }), kt = {
461
+ key: 0,
462
+ class: "tree-input__slot tree-input__slot--prefix"
463
+ }, gt = ["type", "value", "placeholder", "disabled", "aria-invalid"], $t = {
464
+ key: 2,
465
+ class: "tree-input__slot tree-input__slot--suffix"
466
+ }, Ke = /* @__PURE__ */ F({
467
+ inheritAttrs: !1,
468
+ __name: "TreeInput",
469
+ props: {
470
+ modelValue: { default: "" },
471
+ size: { default: "md" },
472
+ disabled: { type: Boolean, default: !1 },
473
+ loading: { type: Boolean, default: !1 },
474
+ invalid: { type: Boolean, default: !1 },
475
+ type: { default: "text" },
476
+ placeholder: { default: "" }
477
+ },
478
+ emits: ["update:modelValue"],
479
+ setup(t, { emit: p }) {
480
+ const n = t, r = p, c = ie(), a = o(() => [
481
+ "tree-input",
482
+ `tree-input--${n.size}`,
483
+ {
484
+ "is-disabled": n.disabled,
485
+ "is-invalid": n.invalid,
486
+ "is-loading": n.loading
487
+ },
488
+ c.class
489
+ ]), h = o(() => c.style), T = o(() => {
490
+ const { class: u, style: D, ...w } = c;
491
+ return w;
492
+ }), m = o(() => `${n.modelValue ?? ""}`), k = (u) => {
493
+ r("update:modelValue", u.target.value);
494
+ };
495
+ return (u, D) => (l(), d("label", {
496
+ class: S(a.value),
497
+ style: de(h.value)
498
+ }, [
499
+ u.$slots.prefix ? (l(), d("span", kt, [
500
+ b(u.$slots, "prefix")
501
+ ])) : _("", !0),
502
+ v("input", ue(T.value, {
503
+ class: "tree-input__field",
504
+ type: t.type,
505
+ value: m.value,
506
+ placeholder: t.placeholder,
507
+ disabled: t.disabled,
508
+ "aria-invalid": t.invalid || void 0,
509
+ onInput: k
510
+ }), null, 16, gt),
511
+ t.loading ? (l(), re(ne, {
512
+ key: 1,
513
+ size: "sm",
514
+ label: "Loading"
515
+ })) : _("", !0),
516
+ u.$slots.suffix ? (l(), d("span", $t, [
517
+ b(u.$slots, "suffix")
518
+ ])) : _("", !0)
519
+ ], 6));
520
+ }
521
+ }), Tt = ["data-state"], Dt = ["aria-disabled"], wt = ["data-state"], Ct = { class: "tree-modal__positioner" }, Bt = ["id", "aria-labelledby", "aria-describedby"], Ot = {
522
+ key: 0,
523
+ class: "tree-modal__topbar"
524
+ }, St = { class: "tree-modal__title" }, It = ["aria-label"], Vt = { class: "tree-modal__body" }, zt = {
525
+ key: 2,
526
+ class: "tree-modal__footer"
527
+ }, Ne = /* @__PURE__ */ F({
528
+ inheritAttrs: !1,
529
+ __name: "TreeModal",
530
+ props: {
531
+ open: { type: Boolean, default: void 0 },
532
+ defaultOpen: { type: Boolean, default: !1 },
533
+ disabled: { type: Boolean, default: !1 },
534
+ size: { default: "md" },
535
+ title: { default: "" },
536
+ description: { default: "" },
537
+ closeOnEscape: { type: Boolean, default: !0 },
538
+ closeOnOverlay: { type: Boolean, default: !0 },
539
+ showCloseButton: { type: Boolean, default: !0 },
540
+ closeLabel: { default: "Close modal" },
541
+ id: { default: void 0 }
542
+ },
543
+ emits: ["update:open", "open-change"],
544
+ setup(t, { emit: p }) {
545
+ const n = se("x"), r = t, c = p, a = ie(), h = r.id ?? Ie("tree-modal"), T = `${h}-title`, m = `${h}-description`, k = R(null), u = R(null), D = R(null), w = o(() => !!(r.title || z.header)), z = qe(), j = o(() => ["tree-modal", a.class]), W = o(() => a.style), M = o(() => {
546
+ const { class: i, style: I, ...V } = a;
547
+ return V;
548
+ }), O = o(() => [
549
+ "tree-modal__surface",
550
+ `tree-modal__surface--${r.size}`
551
+ ]), { value: y, setValue: q } = Ve(
552
+ Be(r, "open"),
553
+ r.defaultOpen,
554
+ (i) => {
555
+ c("update:open", i), c("open-change", i);
556
+ }
557
+ ), G = o(() => w.value ? T : void 0), ce = o(() => r.description ? m : void 0);
558
+ let K = 0, C = "";
559
+ const X = () => {
560
+ typeof document > "u" || (K === 0 && (C = document.body.style.overflow, document.body.style.overflow = "hidden"), K += 1);
561
+ }, Y = () => {
562
+ typeof document > "u" || K === 0 || (K -= 1, K === 0 && (document.body.style.overflow = C));
563
+ }, fe = () => {
564
+ le(() => {
565
+ if (!u.value)
566
+ return;
567
+ Pe(u.value) || u.value.focus();
568
+ });
569
+ }, pe = () => {
570
+ r.disabled || (D.value = document.activeElement, q(!0));
571
+ }, N = () => {
572
+ q(!1);
573
+ }, A = (i) => {
574
+ if (r.disabled) {
575
+ i.preventDefault(), i.stopPropagation();
576
+ return;
577
+ }
578
+ i.defaultPrevented || pe();
579
+ }, ve = () => {
580
+ r.closeOnOverlay && N();
581
+ }, me = (i) => {
582
+ i.stopPropagation();
583
+ }, ye = (i) => {
584
+ if (Ce(i) && r.closeOnEscape) {
585
+ i.preventDefault(), N();
586
+ return;
587
+ }
588
+ if (i.key !== "Tab" || !u.value)
589
+ return;
590
+ const I = Qe(u.value);
591
+ if (!I.length) {
592
+ i.preventDefault(), u.value.focus();
593
+ return;
594
+ }
595
+ const V = I[0], x = I[I.length - 1], Z = document.activeElement;
596
+ i.shiftKey && Z === V && (i.preventDefault(), Xe(u.value)), !i.shiftKey && Z === x && (i.preventDefault(), Pe(u.value));
597
+ };
598
+ return we(y, (i, I) => {
599
+ if (i) {
600
+ X(), fe();
601
+ return;
602
+ }
603
+ I && (Y(), le(() => {
604
+ var V;
605
+ (V = D.value) == null || V.focus();
606
+ }));
607
+ }), Oe(() => {
608
+ y.value && Y();
609
+ }), (i, I) => (l(), d("div", {
610
+ ref_key: "rootRef",
611
+ ref: k,
612
+ class: S(j.value),
613
+ style: de(W.value),
614
+ "data-state": f(y) ? "open" : "closed"
615
+ }, [
616
+ i.$slots.trigger ? (l(), d("span", ue({
617
+ key: 0,
618
+ class: "tree-modal__trigger"
619
+ }, M.value, {
620
+ "aria-disabled": t.disabled || void 0,
621
+ onClick: A
622
+ }), [
623
+ b(i.$slots, "trigger")
624
+ ], 16, Dt)) : _("", !0),
625
+ (l(), re(Ge, { to: "body" }, [
626
+ E(Se, { name: "tree-modal-fade" }, {
627
+ default: Q(() => [
628
+ f(y) ? (l(), d("div", {
629
+ key: 0,
630
+ class: "tree-modal__portal",
631
+ "data-state": f(y) ? "open" : "closed"
632
+ }, [
633
+ v("div", {
634
+ class: "tree-modal__backdrop",
635
+ "aria-hidden": "true",
636
+ onClick: ve
637
+ }),
638
+ v("div", Ct, [
639
+ v("div", {
640
+ id: f(h),
641
+ ref_key: "surfaceRef",
642
+ ref: u,
643
+ class: S(O.value),
644
+ role: "dialog",
645
+ "aria-modal": "true",
646
+ "aria-labelledby": G.value,
647
+ "aria-describedby": ce.value,
648
+ tabindex: "-1",
649
+ onClick: me,
650
+ onKeydown: ye
651
+ }, [
652
+ w.value || t.showCloseButton ? (l(), d("div", Ot, [
653
+ w.value ? (l(), d("div", {
654
+ key: 0,
655
+ id: T,
656
+ class: "tree-modal__header"
657
+ }, [
658
+ b(i.$slots, "header", {}, () => [
659
+ v("h2", St, L(t.title), 1)
660
+ ])
661
+ ])) : _("", !0),
662
+ t.showCloseButton ? (l(), d("button", {
663
+ key: 1,
664
+ type: "button",
665
+ class: "tree-modal__close",
666
+ "aria-label": t.closeLabel,
667
+ onClick: N
668
+ }, [
669
+ E(f(n), te(ae(f(oe))), null, 16)
670
+ ], 8, It)) : _("", !0)
671
+ ])) : _("", !0),
672
+ t.description ? (l(), d("p", {
673
+ key: 1,
674
+ id: m,
675
+ class: "tree-modal__description"
676
+ }, L(t.description), 1)) : _("", !0),
677
+ v("div", Vt, [
678
+ b(i.$slots, "content", {}, () => [
679
+ b(i.$slots, "default")
680
+ ])
681
+ ]),
682
+ i.$slots.footer ? (l(), d("div", zt, [
683
+ b(i.$slots, "footer")
684
+ ])) : _("", !0)
685
+ ], 42, Bt)
686
+ ])
687
+ ], 8, wt)) : _("", !0)
688
+ ]),
689
+ _: 3
690
+ })
691
+ ]))
692
+ ], 14, Tt));
693
+ }
694
+ }), Mt = ["data-state"], At = ["aria-describedby"], Pt = ["id", "data-state"], xe = /* @__PURE__ */ F({
695
+ inheritAttrs: !1,
696
+ __name: "TreeTooltip",
697
+ props: {
698
+ open: { type: Boolean },
699
+ defaultOpen: { type: Boolean, default: !1 },
700
+ disabled: { type: Boolean, default: !1 },
701
+ content: { default: "" },
702
+ side: { default: "top" },
703
+ delay: { default: 80 },
704
+ id: { default: void 0 }
705
+ },
706
+ emits: ["update:open", "open-change"],
707
+ setup(t, { emit: p }) {
708
+ const n = t, r = p, c = ie(), a = n.id ?? Ie("tree-tooltip"), h = o(() => {
709
+ const { class: y, style: q, ...G } = c;
710
+ return G;
711
+ }), T = o(() => ["tree-tooltip", c.class]), m = o(() => c.style), { value: k, setValue: u } = Ve(
712
+ Be(n, "open"),
713
+ n.defaultOpen,
714
+ (y) => {
715
+ r("update:open", y), r("open-change", y);
716
+ }
717
+ );
718
+ let D;
719
+ const w = () => {
720
+ D && (clearTimeout(D), D = void 0);
721
+ }, z = (y = !1) => {
722
+ if (!n.disabled) {
723
+ if (w(), y) {
724
+ u(!0);
725
+ return;
726
+ }
727
+ D = setTimeout(() => {
728
+ u(!0);
729
+ }, n.delay);
730
+ }
731
+ }, j = () => {
732
+ z(!0);
733
+ }, W = () => {
734
+ z();
735
+ }, M = () => {
736
+ w(), u(!1);
737
+ }, O = o(() => [
738
+ "tree-tooltip__content",
739
+ `tree-tooltip__content--${n.side}`
740
+ ]);
741
+ return Oe(w), (y, q) => (l(), d("span", {
742
+ class: S(T.value),
743
+ style: de(m.value),
744
+ "data-state": f(k) ? "open" : "closed",
745
+ onMouseenter: W,
746
+ onMouseleave: M,
747
+ onFocusCapture: j,
748
+ onBlurCapture: M
749
+ }, [
750
+ v("span", ue({
751
+ class: "tree-tooltip__trigger",
752
+ "aria-describedby": f(k) ? f(a) : void 0
753
+ }, h.value), [
754
+ b(y.$slots, "trigger", {}, () => [
755
+ b(y.$slots, "default")
756
+ ])
757
+ ], 16, At),
758
+ E(Se, { name: "tree-fade" }, {
759
+ default: Q(() => [
760
+ f(k) && !t.disabled ? (l(), d("span", {
761
+ key: 0,
762
+ id: f(a),
763
+ role: "tooltip",
764
+ class: S(O.value),
765
+ "data-state": f(k) ? "open" : "closed"
766
+ }, [
767
+ b(y.$slots, "content", {}, () => [
768
+ Je(L(t.content), 1)
769
+ ])
770
+ ], 10, Pt)) : _("", !0)
771
+ ]),
772
+ _: 3
773
+ })
774
+ ], 46, Mt));
775
+ }
776
+ }), Lt = {
777
+ TBadge: Le,
778
+ TButton: Ee,
779
+ TCard: Re,
780
+ TDatePicker: Fe,
781
+ TInput: Ke,
782
+ TModal: Ne,
783
+ TSpinner: ne,
784
+ TTooltip: xe,
785
+ TreeBadge: Le,
786
+ TreeButton: Ee,
787
+ TreeCard: Re,
788
+ TreeDatePicker: Fe,
789
+ TreeInput: Ke,
790
+ TreeModal: Ne,
791
+ TreeSpinner: ne,
792
+ TreeTooltip: xe
793
+ }, Et = {
794
+ install(t) {
795
+ Object.entries(Lt).forEach(([p, n]) => {
796
+ t.component(p, n);
797
+ });
798
+ }
799
+ }, Nt = Et.install, xt = ["sm", "md", "lg"], Ut = ["solid", "outline", "ghost", "soft", "danger"], Ht = ["outline", "soft", "solid"], jt = ["top", "bottom"];
800
+ export {
801
+ Le as TBadge,
802
+ Ee as TButton,
803
+ Re as TCard,
804
+ Fe as TDatePicker,
805
+ Ke as TInput,
806
+ Ne as TModal,
807
+ ne as TSpinner,
808
+ xe as TTooltip,
809
+ Le as TreeBadge,
810
+ Ee as TreeButton,
811
+ Re as TreeCard,
812
+ Fe as TreeDatePicker,
813
+ Ke as TreeInput,
814
+ Ne as TreeModal,
815
+ ne as TreeSpinner,
816
+ xe as TreeTooltip,
817
+ Et as TreeUIPlugin,
818
+ Et as default,
819
+ Nt as install,
820
+ Ht as treeCardVariants,
821
+ xt as treeSizes,
822
+ jt as treeTooltipSides,
823
+ Ut as treeVariants
824
+ };
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--tree-font-family-sans: "IBM Plex Sans", "Segoe UI", sans-serif;--tree-font-family-mono: "IBM Plex Mono", "SFMono-Regular", monospace;--tree-font-size-xs: .6875rem;--tree-font-size-sm: .8125rem;--tree-font-size-md: .9375rem;--tree-font-size-base: .9375rem;--tree-font-size-lg: 1.125rem;--tree-font-size-xl: 1.375rem;--tree-font-size-2xl: 1.375rem;--tree-font-size-3xl: 1.75rem;--tree-font-size-4xl: 2.25rem;--tree-font-size-5xl: 3rem;--tree-font-weight-regular: 400;--tree-font-weight-medium: 500;--tree-font-weight-semibold: 600;--tree-font-weight-bold: 700;--tree-font-weight-extrabold: 800;--tree-font-lineHeight-compact: 1.1;--tree-font-lineHeight-ui: 1.15;--tree-font-lineHeight-tight: 1.25;--tree-font-lineHeight-heading: 1.3;--tree-font-lineHeight-base: 1.5;--tree-font-lineHeight-body: 1.6;--tree-font-lineHeight-relaxed: 1.65;--tree-space-0: 0;--tree-space-1: .25rem;--tree-space-2: .5rem;--tree-space-3: .75rem;--tree-space-4: 1rem;--tree-space-5: 1.25rem;--tree-space-6: 1.5rem;--tree-space-7: 2rem;--tree-space-8: 2.5rem;--tree-space-12: 3rem;--tree-space-16: 4rem;--tree-radius-sm: .375rem;--tree-radius-md: .625rem;--tree-radius-lg: .875rem;--tree-radius-pill: 999px;--tree-shadow-xs: 0 1px 2px rgba(15, 23, 42, .06);--tree-shadow-sm: 0 6px 18px rgba(15, 23, 42, .08);--tree-shadow-md: 0 14px 34px rgba(15, 23, 42, .12);--tree-border-width-subtle: 1px;--tree-border-width-strong: 1.5px;--tree-motion-duration-fast: .1s;--tree-motion-duration-moderate: .2s;--tree-motion-duration-normal: .3s;--tree-motion-duration-slow: .4s;--tree-motion-duration-slower: .5s;--tree-motion-easing-standard: cubic-bezier(.2, 0, 0, 1);--tree-motion-easing-easeOut: cubic-bezier(0, 0, .2, 1);--tree-motion-easing-easeInOut: cubic-bezier(.4, 0, .2, 1);--tree-motion-easing-easeIn: cubic-bezier(.4, 0, 1, 1);--tree-size-control-sm: 2rem;--tree-size-control-md: 2.5rem;--tree-size-control-lg: 3rem;--tree-size-icon-sm: 1rem;--tree-size-icon-md: 1.25rem;--tree-size-icon-lg: 1.5rem;--tree-size-icon-xl: 2rem;--tree-size-icon-2xl: 3rem;--tree-layout-grid-columns: 12;--tree-layout-grid-base: 8px;--tree-layout-gutter-sm: 1rem;--tree-layout-gutter-md: 1.5rem;--tree-layout-margin-sm: 1.5rem;--tree-layout-margin-md: 2rem;--tree-layout-margin-lg: 3rem;--tree-z-base: 1;--tree-z-dropdown: 1000;--tree-z-sticky: 1100;--tree-z-overlay: 1200;--tree-z-modal: 1300;--tree-z-toast: 1400;--tree-breakpoint-sm: 640px;--tree-breakpoint-md: 768px;--tree-breakpoint-lg: 1024px;--tree-breakpoint-xl: 1280px}:root{color-scheme:light;--tree-color-bg-primary: #f3f5f9;--tree-color-bg-surface: #ffffff;--tree-color-bg-subtle: #eef2f7;--tree-color-border-default: #d7dfeb;--tree-color-border-strong: #b8c4d8;--tree-color-text-primary: #142033;--tree-color-text-muted: #5b6b84;--tree-color-text-inverse: #ffffff;--tree-color-brand-primary: #2057d4;--tree-color-brand-hover: #1845ac;--tree-color-brand-soft: #e8efff;--tree-color-brand-contrast: #ffffff;--tree-color-status-success: #117c50;--tree-color-status-warning: #a15d00;--tree-color-status-error: #bc2f3f;--tree-color-status-info: #2459d6;--tree-color-overlay: rgba(15, 23, 42, .4);--tree-color-focus-ring: rgba(32, 87, 212, .32)}[data-tree-theme=light]{color-scheme:light;--tree-color-bg-primary: #f3f5f9;--tree-color-bg-surface: #ffffff;--tree-color-bg-subtle: #eef2f7;--tree-color-border-default: #d7dfeb;--tree-color-border-strong: #b8c4d8;--tree-color-text-primary: #142033;--tree-color-text-muted: #5b6b84;--tree-color-text-inverse: #ffffff;--tree-color-brand-primary: #2057d4;--tree-color-brand-hover: #1845ac;--tree-color-brand-soft: #e8efff;--tree-color-brand-contrast: #ffffff;--tree-color-status-success: #117c50;--tree-color-status-warning: #a15d00;--tree-color-status-error: #bc2f3f;--tree-color-status-info: #2459d6;--tree-color-overlay: rgba(15, 23, 42, .4);--tree-color-focus-ring: rgba(32, 87, 212, .32)}[data-tree-theme=dark]{color-scheme:dark;--tree-color-bg-primary: #0f1724;--tree-color-bg-surface: #162131;--tree-color-bg-subtle: #1b293d;--tree-color-border-default: #2d3d57;--tree-color-border-strong: #41516d;--tree-color-text-primary: #edf3ff;--tree-color-text-muted: #aab7cb;--tree-color-text-inverse: #07101f;--tree-color-brand-primary: #74a2ff;--tree-color-brand-hover: #8bb1ff;--tree-color-brand-soft: #18386d;--tree-color-brand-contrast: #07101f;--tree-color-status-success: #4cc38f;--tree-color-status-warning: #ffb14d;--tree-color-status-error: #ff7d88;--tree-color-status-info: #8ab0ff;--tree-color-overlay: rgba(7, 16, 31, .68);--tree-color-focus-ring: rgba(116, 162, 255, .34)}:root{font-family:var(--tree-font-family-sans);background:var(--tree-color-bg-primary);color:var(--tree-color-text-primary)}*,*:before,*:after{box-sizing:border-box}.tree-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tree-button,.tree-input,.tree-card,.tree-badge,.tree-tooltip__content{font-family:var(--tree-font-family-sans)}.tree-button{--tree-button-bg: var(--tree-color-brand-primary);--tree-button-text: var(--tree-color-brand-contrast);--tree-button-border: transparent;--tree-button-shadow: transparent;display:inline-flex;align-items:center;justify-content:center;gap:var(--tree-space-2);min-width:max-content;height:var(--tree-size-control-md);padding-inline:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-button-border);border-radius:var(--tree-radius-md);background:var(--tree-button-bg);color:var(--tree-button-text);box-shadow:0 0 0 0 var(--tree-button-shadow);font-size:var(--tree-font-size-md);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);text-decoration:none;cursor:pointer;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-button:hover:not(.is-disabled){transform:translateY(-1px)}.tree-button:focus-visible{outline:none;box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.tree-button.is-disabled{opacity:.65;cursor:not-allowed}.tree-button--sm{height:var(--tree-size-control-sm);padding-inline:var(--tree-space-3);font-size:var(--tree-font-size-sm)}.tree-button--lg{height:var(--tree-size-control-lg);padding-inline:var(--tree-space-5);font-size:var(--tree-font-size-lg)}.tree-button--solid{--tree-button-bg: var(--tree-color-brand-primary);--tree-button-text: var(--tree-color-brand-contrast)}.tree-button--outline{--tree-button-bg: var(--tree-color-bg-surface);--tree-button-text: var(--tree-color-text-primary);--tree-button-border: var(--tree-color-border-default)}.tree-button--ghost{--tree-button-bg: transparent;--tree-button-text: var(--tree-color-text-primary)}.tree-button--soft{--tree-button-bg: var(--tree-color-brand-soft);--tree-button-text: var(--tree-color-brand-primary)}.tree-button--danger{--tree-button-bg: var(--tree-color-status-error);--tree-button-text: var(--tree-color-brand-contrast)}.tree-button__icon,.tree-button__spinner,.tree-badge__icon,.tree-input__slot{display:inline-flex;align-items:center;justify-content:center}.tree-input{display:inline-flex;align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-input:focus-within{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.tree-input.is-invalid{border-color:var(--tree-color-status-error)}.tree-input.is-disabled{opacity:.68;cursor:not-allowed}.tree-input--sm{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.tree-input--lg{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.tree-input__field{width:100%;min-width:0;border:0;padding:0;background:transparent;color:inherit;font:inherit;outline:none}.tree-input__field::placeholder{color:var(--tree-color-text-muted)}.tree-input__slot{color:var(--tree-color-text-muted)}.tree-date-picker{position:relative;display:grid;width:100%}.tree-date-picker__trigger,.tree-date-picker__nav,.tree-date-picker__day{font:inherit}.tree-date-picker__trigger{display:inline-flex;align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);text-align:left;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-date-picker__trigger:focus-visible,.tree-date-picker.is-open .tree-date-picker__trigger{outline:none;border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.tree-date-picker.is-disabled .tree-date-picker__trigger{opacity:.68;cursor:not-allowed}.tree-date-picker.is-invalid .tree-date-picker__trigger{border-color:var(--tree-color-status-error)}.tree-date-picker--sm .tree-date-picker__trigger{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.tree-date-picker--lg .tree-date-picker__trigger{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.tree-date-picker__value{flex:1;min-width:0;color:inherit}.tree-date-picker__value[data-placeholder]{color:var(--tree-color-text-muted)}.tree-date-picker__slot{display:inline-flex;align-items:center;justify-content:center;color:var(--tree-color-text-muted)}.tree-date-picker__content{position:absolute;top:calc(100% + var(--tree-space-2));left:0;z-index:var(--tree-z-dropdown);display:grid;gap:var(--tree-space-3);width:min(20rem,100vw - 2rem);padding:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md)}.tree-date-picker__header,.tree-date-picker__weekdays,.tree-date-picker__row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:var(--tree-space-1)}.tree-date-picker__header{grid-template-columns:2rem 1fr 2rem;align-items:center}.tree-date-picker__month{margin:0;font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-ui);text-align:center;text-transform:capitalize}.tree-date-picker__nav{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:0;border-radius:var(--tree-radius-sm);background:transparent;color:var(--tree-color-text-muted);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-date-picker__nav:hover:not(:disabled),.tree-date-picker__day:hover:not(:disabled){background:var(--tree-color-brand-soft);color:var(--tree-color-brand-primary)}.tree-date-picker__nav:focus-visible,.tree-date-picker__day:focus-visible{outline:none;box-shadow:0 0 0 3px var(--tree-color-focus-ring)}.tree-date-picker__nav:disabled,.tree-date-picker__day:disabled{opacity:.45;cursor:not-allowed}.tree-date-picker__weekday{font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-muted);text-align:center;text-transform:uppercase}.tree-date-picker__grid{display:grid;gap:var(--tree-space-1)}.tree-date-picker__cell{display:flex;justify-content:center}.tree-date-picker__day{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:0;border-radius:var(--tree-radius-pill);background:transparent;color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-date-picker__day.is-muted{color:var(--tree-color-text-muted)}.tree-date-picker__day.is-today:not(.is-selected){box-shadow:inset 0 0 0 1px var(--tree-color-border-strong)}.tree-date-picker__day.is-selected{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.tree-modal,.tree-modal__trigger{display:inline-flex}.tree-modal__portal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--tree-z-modal)}.tree-modal__backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--tree-color-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.tree-modal__positioner{position:relative;display:flex;align-items:center;justify-content:center;min-height:100%;padding:var(--tree-space-4)}.tree-modal__surface{position:relative;display:grid;gap:var(--tree-space-3);width:min(100%,34rem);max-height:min(90vh,48rem);overflow:auto;padding:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md)}.tree-modal__surface:focus-visible{outline:none;box-shadow:var(--tree-shadow-md),0 0 0 4px var(--tree-color-focus-ring)}.tree-modal__surface--sm{width:min(100%,28rem)}.tree-modal__surface--lg{width:min(100%,42rem)}.tree-modal__topbar{display:flex;align-items:start;justify-content:space-between;gap:var(--tree-space-3)}.tree-modal__header{min-width:0}.tree-modal__title{margin:0;font-size:var(--tree-font-size-xl);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary)}.tree-modal__description{margin:0;font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-body);color:var(--tree-color-text-muted)}.tree-modal__body{display:grid;gap:var(--tree-space-3);color:var(--tree-color-text-primary)}.tree-modal__footer{display:flex;flex-wrap:wrap;justify-content:end;gap:var(--tree-space-2)}.tree-modal__close{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border:0;border-radius:var(--tree-radius-md);background:transparent;color:var(--tree-color-text-muted);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-modal__close:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.tree-modal__close:focus-visible{outline:none;box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.tree-card{display:grid;gap:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-xs)}.tree-card--sm{padding:var(--tree-space-3)}.tree-card--md{padding:var(--tree-space-4)}.tree-card--lg{padding:var(--tree-space-5)}.tree-card--soft{background:var(--tree-color-bg-subtle)}.tree-card--solid{background:var(--tree-color-text-primary);color:var(--tree-color-bg-surface);border-color:transparent}.tree-card__header,.tree-card__footer{color:var(--tree-color-text-muted)}.tree-card__body{display:grid;gap:var(--tree-space-2)}.tree-badge{display:inline-flex;align-items:center;gap:var(--tree-space-2);width:fit-content;border:var(--tree-border-width-subtle) solid transparent;border-radius:var(--tree-radius-pill);padding-inline:var(--tree-space-3);font-weight:var(--tree-font-weight-medium);line-height:1}.tree-badge--sm{min-height:1.5rem;font-size:var(--tree-font-size-xs)}.tree-badge--md{min-height:1.75rem;font-size:var(--tree-font-size-sm)}.tree-badge--lg{min-height:2rem;font-size:var(--tree-font-size-md)}.tree-badge--solid{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.tree-badge--outline{background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);border-color:var(--tree-color-border-default)}.tree-badge--ghost{background:transparent;color:var(--tree-color-text-muted)}.tree-badge--soft{background:var(--tree-color-brand-soft);color:var(--tree-color-brand-primary)}.tree-badge--danger{background:color-mix(in srgb,var(--tree-color-status-error) 16%,var(--tree-color-bg-surface));color:var(--tree-color-status-error)}.tree-spinner{--tree-spinner-size: var(--tree-size-icon-md);display:inline-flex;align-items:center;justify-content:center;width:var(--tree-spinner-size);height:var(--tree-spinner-size);color:var(--tree-color-brand-primary)}.tree-spinner--sm{--tree-spinner-size: var(--tree-size-icon-sm)}.tree-spinner--lg{--tree-spinner-size: var(--tree-size-icon-lg)}.tree-spinner__ring{width:100%;height:100%;border:2px solid color-mix(in srgb,currentColor 20%,transparent);border-right-color:transparent;border-radius:50%;animation:tree-spin .7s linear infinite}.tree-tooltip{position:relative;display:inline-flex}.tree-tooltip__trigger{display:inline-flex}.tree-tooltip__content{position:absolute;left:50%;z-index:var(--tree-z-dropdown);min-width:max-content;max-width:18rem;padding:var(--tree-space-2) var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-text-primary);color:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-sm);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-base);transform:translate(-50%)}.tree-tooltip__content--top{bottom:calc(100% + var(--tree-space-2))}.tree-tooltip__content--bottom{top:calc(100% + var(--tree-space-2))}.tree-fade-enter-active,.tree-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.tree-fade-enter-from,.tree-fade-leave-to{opacity:0;transform:translate(-50%,4px)}.tree-date-picker .tree-fade-enter-from,.tree-date-picker .tree-fade-leave-to{transform:translateY(4px)}.tree-modal-fade-enter-active,.tree-modal-fade-leave-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeOut),transform var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeOut)}.tree-modal-fade-enter-from,.tree-modal-fade-leave-to{opacity:0}.tree-modal-fade-enter-from .tree-modal__surface,.tree-modal-fade-leave-to .tree-modal__surface{transform:translateY(.5rem) scale(.98)}@keyframes tree-spin{to{transform:rotate(360deg)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treeui/vue",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Vue 3 component package for TreeUI.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,9 +20,9 @@
20
20
  "vue": "^3.5.13"
21
21
  },
22
22
  "dependencies": {
23
- "@treeui/tokens": "0.1.0",
24
- "@treeui/icons": "0.1.0",
25
- "@treeui/utils": "0.1.0"
23
+ "@treeui/icons": "0.1.1",
24
+ "@treeui/tokens": "0.1.1",
25
+ "@treeui/utils": "0.1.1"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "pnpm exec rimraf dist && pnpm exec vite build",