scrubbed-tailwind-components-v2 2.0.2

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/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # scrubbed-tailwind-components-v2
2
+
3
+ This template should help get you started developing with Vue 3 in Vite.
4
+
5
+ ## Recommended IDE Setup
6
+
7
+ [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
8
+
9
+ ## Customize configuration
10
+
11
+ See [Vite Configuration Reference](https://vite.dev/config/).
12
+
13
+ ## Project Setup
14
+
15
+ ```sh
16
+ npm install
17
+ ```
18
+
19
+ ### Compile and Hot-Reload for Development
20
+
21
+ ```sh
22
+ npm run dev
23
+ ```
24
+
25
+ ### Compile and Minify for Production
26
+
27
+ ```sh
28
+ npm run build
29
+ ```
30
+
31
+ ### Run Headed Component Tests with [Cypress Component Testing](https://on.cypress.io/component)
32
+
33
+ ```sh
34
+ npm run test:unit:dev # or `npm run test:unit` for headless testing
35
+ ```
36
+
37
+ ### Run End-to-End Tests with [Cypress](https://www.cypress.io/)
38
+
39
+ ```sh
40
+ npm run test:e2e:dev
41
+ ```
42
+
43
+ This runs the end-to-end tests against the Vite development server.
44
+ It is much faster than the production build.
45
+
46
+ But it's still recommended to test the production build with `test:e2e` before deploying (e.g. in CI environments):
47
+
48
+ ```sh
49
+ npm run build
50
+ npm run test:e2e
51
+ ```
Binary file
@@ -0,0 +1 @@
1
+ @starting-style{.backdrop[data-v-aaece1c7]{opacity:0}}
@@ -0,0 +1,604 @@
1
+ import { inject as m, createElementBlock as l, openBlock as a, normalizeClass as h, unref as u, createElementVNode as d, renderSlot as i, createBlock as $, withCtx as g, ref as f, provide as w, createVNode as B, Fragment as y, Teleport as R, normalizeStyle as M, watch as N, createCommentVNode as k, resolveComponent as j, mergeProps as v, useModel as V, withDirectives as A, vModelCheckbox as G, onMounted as z, onUnmounted as E, vModelText as D, vModelRadio as W, renderList as T, toDisplayString as C, createTextVNode as H, computed as q } from "vue";
2
+ import { RouterLink as S, useRoute as L } from "vue-router";
3
+ const O = { class: "flex w-full items-center justify-between" }, U = { class: "flex items-center gap-2" }, Z = { class: "flex items-center gap-10" }, J = { class: "hidden gap-6 sm:flex" }, Y = {
4
+ __name: "AppHeader",
5
+ setup(e) {
6
+ const o = m("APP_DATA"), { isSidebarToggled: r, toggleSidebar: n } = o;
7
+ return (t, s) => (a(), l("header", {
8
+ class: h(["fixed flex h-16 w-dvw items-center bg-white/50 px-3 backdrop-blur sm:px-6", { "rounded-t-2xl": u(r) }])
9
+ }, [
10
+ d("nav", O, [
11
+ d("div", U, [
12
+ d("button", {
13
+ onClick: s[0] || (s[0] = (c) => u(n)()),
14
+ class: "block cursor-pointer rounded-full p-2 hover:bg-neutral-100 sm:hidden"
15
+ }, s[1] || (s[1] = [
16
+ d("svg", {
17
+ xmlns: "http://www.w3.org/2000/svg",
18
+ width: "24",
19
+ height: "24",
20
+ viewBox: "0 0 24 24",
21
+ fill: "none",
22
+ stroke: "currentColor",
23
+ "stroke-width": "2",
24
+ "stroke-linecap": "round",
25
+ "stroke-linejoin": "round",
26
+ class: "lucide lucide-menu-icon lucide-menu size-5 stroke-neutral-600"
27
+ }, [
28
+ d("path", { d: "M4 12h16" }),
29
+ d("path", { d: "M4 18h16" }),
30
+ d("path", { d: "M4 6h16" })
31
+ ], -1)
32
+ ])),
33
+ i(t.$slots, "header-img")
34
+ ]),
35
+ d("div", Z, [
36
+ d("ul", J, [
37
+ i(t.$slots, "header-links")
38
+ ]),
39
+ i(t.$slots, "header-actions")
40
+ ])
41
+ ])
42
+ ], 2));
43
+ }
44
+ }, F = ["href"], X = {
45
+ __name: "AppHeaderLink",
46
+ props: {
47
+ to: { type: String, required: !0 }
48
+ },
49
+ setup(e) {
50
+ const o = e;
51
+ return (r, n) => (a(), l("li", null, [
52
+ o.to.startsWith("/") ? (a(), $(u(S), {
53
+ key: 0,
54
+ class: "hover:text-primary-950 [&.router-link-active]:text-primary-950 text-xs uppercase text-neutral-600 hover:transition-all [&.router-link-active]:font-semibold",
55
+ to: o.to
56
+ }, {
57
+ default: g(() => [
58
+ i(r.$slots, "default")
59
+ ]),
60
+ _: 3
61
+ }, 8, ["to"])) : (a(), l("a", {
62
+ key: 1,
63
+ class: "hover:text-primary-950 text-xs uppercase text-neutral-600 hover:transition-all",
64
+ href: o.to
65
+ }, [
66
+ i(r.$slots, "default")
67
+ ], 8, F))
68
+ ]));
69
+ }
70
+ }, Q = { class: "relative" }, K = { class: "flex" }, ee = {
71
+ __name: "AppLayout",
72
+ setup(e) {
73
+ const o = f(!1);
74
+ function r() {
75
+ window.innerWidth <= 640 ? (o.value = !o.value, n()) : o.value && (o.value = !1, n());
76
+ }
77
+ function n() {
78
+ const t = document.querySelector("body");
79
+ t.classList.contains("bg-black") ? t.classList.remove("bg-black") : t.classList.add("bg-black");
80
+ }
81
+ return w("APP_DATA", { isSidebarToggled: o, toggleSidebar: r }), (t, s) => (a(), l("div", {
82
+ class: h(["bg-white transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)]", {
83
+ "scale-93 origin-[center_top] translate-y-4": o.value
84
+ }])
85
+ }, [
86
+ d("div", Q, [
87
+ i(t.$slots, "header"),
88
+ d("div", K, [
89
+ i(t.$slots, "content")
90
+ ])
91
+ ])
92
+ ], 2));
93
+ }
94
+ }, te = {
95
+ __name: "AppMain",
96
+ setup(e) {
97
+ const o = m("APP_DATA"), { isSidebarToggled: r } = o;
98
+ return (n, t) => (a(), l("main", {
99
+ class: h([
100
+ "bg-background-main fixed z-[-1] h-svh w-full overflow-auto px-6 pb-9 pt-24 sm:top-16 sm:ml-[223px] sm:h-[calc(100dvh-4rem)] sm:w-[calc(100dvw-223px)] sm:pt-9",
101
+ u(r) ? "overflow-hidden rounded-t-xl sm:rounded-none" : "sm:rounded-tl-2xl"
102
+ ])
103
+ }, [
104
+ i(n.$slots, "default")
105
+ ], 2));
106
+ }
107
+ }, oe = { class: "group flex w-full overflow-x-auto border-b-[1px] border-neutral-200" }, re = {
108
+ __name: "AppNavTabs",
109
+ setup(e) {
110
+ const o = f(null);
111
+ function r(t, s, c) {
112
+ o.value.style = `left: ${t}px; top: calc(${s}px + 6px); opacity: 1; width: ${c}px`;
113
+ }
114
+ function n(t, s, c) {
115
+ o.value.style = `left: ${t}px; top: calc(${s}px + 6px); opacity: 0; width: ${c}px`;
116
+ }
117
+ return w("NAV_TABS", {
118
+ setSelectorAttributes: r,
119
+ resetSelectorOpacity: n
120
+ }), (t, s) => (a(), l("div", oe, [
121
+ i(t.$slots, "default"),
122
+ d("div", {
123
+ class: "bg-brand-primary-700 absolute left-0 z-[-1] h-[32px] w-10 rounded-lg opacity-0 transition-all ease-in-out",
124
+ ref_key: "selector",
125
+ ref: o
126
+ }, null, 512)
127
+ ]));
128
+ }
129
+ }, ne = {
130
+ __name: "AppNavTab",
131
+ props: {
132
+ to: { type: String, required: !0 }
133
+ },
134
+ setup(e) {
135
+ const o = e, r = m("NAV_TABS"), { setSelectorAttributes: n, resetSelectorOpacity: t } = r, s = f(null);
136
+ return (c, p) => (a(), l("div", {
137
+ onMouseover: p[0] || (p[0] = (x) => u(n)(s.value.offsetLeft, s.value.offsetTop, s.value.clientWidth)),
138
+ onMouseleave: p[1] || (p[1] = (x) => u(t)(s.value.offsetLeft, s.value.offsetTop, s.value.clientWidth)),
139
+ class: "shrink-0",
140
+ ref_key: "el",
141
+ ref: s
142
+ }, [
143
+ B(u(S), {
144
+ class: "[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:border-brand-primary-700 flex h-12 shrink-0 items-center justify-between gap-2 border-b-2 border-transparent px-3 text-sm text-neutral-600 transition-all hover:font-medium hover:text-white [&.router-link-exact-active]:font-medium [&.router-link-exact-active]:hover:text-white",
145
+ to: o.to
146
+ }, {
147
+ default: g(() => [
148
+ i(c.$slots, "default")
149
+ ]),
150
+ _: 3
151
+ }, 8, ["to"])
152
+ ], 544));
153
+ }
154
+ }, _ = (e, o) => {
155
+ const r = e.__vccOpts || e;
156
+ for (const [n, t] of o)
157
+ r[n] = t;
158
+ return r;
159
+ }, se = { class: "fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block" }, ae = {
160
+ __name: "AppSidebar",
161
+ setup(e) {
162
+ const o = m("APP_DATA"), { isSidebarToggled: r, toggleSidebar: n } = o;
163
+ return (t, s) => (a(), l(y, null, [
164
+ d("aside", se, [
165
+ i(t.$slots, "default", {}, void 0, !0)
166
+ ]),
167
+ (a(), $(R, { to: "body" }, [
168
+ d("div", {
169
+ class: "shadow-t-2xl fixed bottom-0 z-50 h-[60svh] w-full space-y-4 overflow-y-scroll rounded-t-2xl bg-white p-4 transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)] [&::-webkit-scrollbar]:hidden",
170
+ style: M(
171
+ u(r) ? "transform: translateZ(0)" : "transform: translate3d(0,60svh,0)"
172
+ )
173
+ }, [
174
+ i(t.$slots, "default", {}, void 0, !0)
175
+ ], 4),
176
+ d("div", {
177
+ onClick: s[0] || (s[0] = (c) => u(n)()),
178
+ class: h([
179
+ "backdrop backdrop-blur-[0.50px] transition-all duration-300 [transition-behavior:allow-discrete]",
180
+ u(r) ? "fixed inset-0 z-40 block bg-black/80 opacity-100" : "hidden"
181
+ ])
182
+ }, null, 2)
183
+ ]))
184
+ ], 64));
185
+ }
186
+ }, le = /* @__PURE__ */ _(ae, [["__scopeId", "data-v-aaece1c7"]]), ie = { class: "flex flex-col" }, de = {
187
+ __name: "AppSidebarItem",
188
+ setup(e) {
189
+ L();
190
+ const o = f(!1);
191
+ function r() {
192
+ o.value = !o.value;
193
+ }
194
+ return w("SIDEBAR_TOGGLE", { toggled: o, toggleSidebarItem: r }), (n, t) => (a(), l("div", ie, [
195
+ i(n.$slots, "default")
196
+ ]));
197
+ }
198
+ }, ue = ["to"], ce = {
199
+ __name: "AppSidebarItemChild",
200
+ props: {
201
+ to: { type: String, required: !0 }
202
+ },
203
+ setup(e) {
204
+ const o = e;
205
+ return (r, n) => o.to.startsWith("/") ? (a(), $(u(S), {
206
+ key: 0,
207
+ class: "[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:bg-background-main text-primary-950 hover:bg-background-main block h-10 items-center gap-3 overflow-hidden text-ellipsis whitespace-nowrap rounded-lg px-3 text-xs leading-[40px] transition-all [&.router-link-exact-active]:font-medium",
208
+ to: o.to
209
+ }, {
210
+ default: g(() => [
211
+ i(r.$slots, "default")
212
+ ]),
213
+ _: 3
214
+ }, 8, ["to"])) : (a(), l("a", {
215
+ key: 1,
216
+ class: "text-primary-950 hover:bg-background-main block h-10 items-center gap-3 overflow-hidden text-ellipsis whitespace-nowrap rounded-lg px-3 text-xs leading-[40px] transition-all",
217
+ to: o.to
218
+ }, [
219
+ i(r.$slots, "default")
220
+ ], 8, ue));
221
+ }
222
+ }, pe = {
223
+ __name: "AppSidebarItemChildren",
224
+ setup(e) {
225
+ const o = m("SIDEBAR_TOGGLE"), { toggled: r } = o;
226
+ return (n, t) => (a(), l("div", {
227
+ class: h(["max-h-0 overflow-y-hidden rounded-b-lg opacity-0 transition-all", { "mt-2 max-h-max overflow-y-auto px-2 opacity-100": u(r) }])
228
+ }, [
229
+ i(n.$slots, "default")
230
+ ], 2));
231
+ }
232
+ }, me = { class: "group/sidebar-item hover:bg-background-main has-[&.router-link-active]:bg-background-main peer flex h-10 items-center justify-between rounded-lg px-3 transition-all" }, fe = ["href"], be = {
233
+ __name: "AppSidebarItemParent",
234
+ props: {
235
+ to: { type: String, required: !0 },
236
+ name: { type: String },
237
+ hasChildren: { type: Boolean, default: !1 }
238
+ },
239
+ setup(e) {
240
+ const o = L(), r = e, n = m("SIDEBAR_TOGGLE"), t = m("APP_DATA"), { toggled: s, toggleSidebarItem: c } = n, { toggleSidebar: p } = t;
241
+ function x() {
242
+ o.matched.some(
243
+ (b) => r.name === b.name
244
+ ) ? s.value = !0 : s.value = !1;
245
+ }
246
+ return N(o, () => x(), { immediate: !0 }), (I, b) => (a(), l("div", me, [
247
+ r.to.startsWith("/") ? (a(), $(u(S), {
248
+ key: 0,
249
+ onClick: b[0] || (b[0] = (P) => u(p)()),
250
+ class: "[&.router-link-active]:text-primary-950 [&.router-link-active]:text-primary-950 text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium",
251
+ to: r.to
252
+ }, {
253
+ default: g(() => [
254
+ i(I.$slots, "default")
255
+ ]),
256
+ _: 3
257
+ }, 8, ["to"])) : (a(), l("a", {
258
+ key: 1,
259
+ class: "text-primary-950 peer flex h-full w-full items-center gap-3 text-xs",
260
+ href: r.to
261
+ }, [
262
+ i(I.$slots, "default")
263
+ ], 8, fe)),
264
+ r.hasChildren ? (a(), l("button", {
265
+ key: 2,
266
+ onClick: b[1] || (b[1] = (P) => u(c)()),
267
+ class: "cursor-pointer rounded-full p-1 transition-all hover:bg-neutral-100",
268
+ type: "button"
269
+ }, [
270
+ (a(), l("svg", {
271
+ xmlns: "http://www.w3.org/2000/svg",
272
+ width: "16",
273
+ height: "16",
274
+ viewBox: "0 0 24 24",
275
+ fill: "none",
276
+ stroke: "currentColor",
277
+ "stroke-width": "2",
278
+ "stroke-linecap": "round",
279
+ "stroke-linejoin": "round",
280
+ class: h(["lucide lucide-chevron-down-icon lucide-chevron-down stroke-primary-950 transition-all duration-300", { "rotate-180": u(s) }])
281
+ }, b[2] || (b[2] = [
282
+ d("path", { d: "m6 9 6 6 6-6" }, null, -1)
283
+ ]), 2))
284
+ ])) : k("", !0)
285
+ ]));
286
+ }
287
+ }, he = { class: "hover:bg-background-main has-[&.router-link-active]:active has-[&.router-link-active]:bg-primary-700 peer flex h-10 items-center justify-between rounded-lg px-3 transition-all" }, ve = {
288
+ __name: "AppSidebarToggle",
289
+ setup(e) {
290
+ const o = m("SIDEBAR_TOGGLE");
291
+ return (r, n) => {
292
+ const t = j("RouterLink");
293
+ return a(), l("div", he, [
294
+ B(t, {
295
+ class: "text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium [&.router-link-active]:text-white",
296
+ to: "/"
297
+ }, {
298
+ default: g(() => [
299
+ i(r.$slots, "default")
300
+ ]),
301
+ _: 3
302
+ }),
303
+ d("button", {
304
+ onClick: n[0] || (n[0] = (s) => u(o).toggleSidebarItem()),
305
+ class: "cursor-pointer",
306
+ type: "button"
307
+ }, n[1] || (n[1] = [
308
+ d("svg", {
309
+ xmlns: "http://www.w3.org/2000/svg",
310
+ width: "16",
311
+ height: "16",
312
+ viewBox: "0 0 24 24",
313
+ fill: "none",
314
+ stroke: "currentColor",
315
+ "stroke-width": "2",
316
+ "stroke-linecap": "round",
317
+ "stroke-linejoin": "round",
318
+ class: "lucide lucide-chevron-down-icon lucide-chevron-down stroke-white"
319
+ }, [
320
+ d("path", { d: "m6 9 6 6 6-6" })
321
+ ], -1)
322
+ ]))
323
+ ]);
324
+ };
325
+ }
326
+ }, ge = {}, _e = {
327
+ key: 0,
328
+ class: "text-primary-950 px-1 text-sm font-medium"
329
+ }, xe = { class: "mt-2" };
330
+ function ye(e, o) {
331
+ return a(), l("nav", null, [
332
+ e.$slots.title ? (a(), l("b", _e, [
333
+ i(e.$slots, "title")
334
+ ])) : k("", !0),
335
+ d("div", xe, [
336
+ i(e.$slots, "items")
337
+ ])
338
+ ]);
339
+ }
340
+ const ke = /* @__PURE__ */ _(ge, [["render", ye]]), $e = {}, we = { class: "rounded-full px-3 py-1 text-xs font-medium" };
341
+ function Ae(e, o) {
342
+ return a(), l("div", we, [
343
+ i(e.$slots, "default")
344
+ ]);
345
+ }
346
+ const Se = /* @__PURE__ */ _($e, [["render", Ae]]), Ie = {
347
+ __name: "Button",
348
+ props: {
349
+ variant: { type: String, default: "primary" }
350
+ },
351
+ setup(e) {
352
+ const o = e, r = {
353
+ primary: [
354
+ "bg-brand-primary-700",
355
+ "text-white",
356
+ "active:bg-primary-950 hover:bg-primary-800"
357
+ ],
358
+ secondary: ["bg-neutral-100", "text-primary-900"],
359
+ outlined: [
360
+ "border-[1px]",
361
+ "border-neutral-200",
362
+ "text-primary-900",
363
+ "hover:bg-neutral-100"
364
+ ],
365
+ ghost: ["font-medium", "text-primary-900", "hover:bg-neutral-100"],
366
+ destructive: [
367
+ "bg-danger-600",
368
+ "text-white",
369
+ "active:bg-danger-600-active",
370
+ "hover:bg-danger-600-hovered"
371
+ ]
372
+ };
373
+ return (n, t) => (a(), l("button", v(n.$attrs, {
374
+ class: ["cursor-pointer rounded-lg px-4 py-2 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50", r[o.variant]]
375
+ }), [
376
+ i(n.$slots, "default")
377
+ ], 16));
378
+ }
379
+ }, Te = {}, Ce = { class: "rounded-2xl bg-white p-6" };
380
+ function Be(e, o) {
381
+ return a(), l("div", Ce, [
382
+ i(e.$slots, "default")
383
+ ]);
384
+ }
385
+ const Ve = /* @__PURE__ */ _(Te, [["render", Be]]), De = {
386
+ __name: "Checkbox",
387
+ props: {
388
+ modelValue: {},
389
+ modelModifiers: {}
390
+ },
391
+ emits: ["update:modelValue"],
392
+ setup(e) {
393
+ const o = V(e, "modelValue"), r = f(null);
394
+ return (n, t) => (a(), l("button", {
395
+ onClick: t[1] || (t[1] = (s) => r.value.click()),
396
+ class: "group/checkbox bg-neutral-100 has-checked:bg-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-sm transition-all"
397
+ }, [
398
+ t[2] || (t[2] = d("svg", {
399
+ xmlns: "http://www.w3.org/2000/svg",
400
+ width: "14",
401
+ height: "14",
402
+ viewBox: "0 0 24 24",
403
+ fill: "none",
404
+ stroke: "currentColor",
405
+ "stroke-width": "2",
406
+ "stroke-linecap": "round",
407
+ "stroke-linejoin": "round",
408
+ class: "lucide lucide-check-icon lucide-check hidden stroke-white group-has-[:checked]/checkbox:block"
409
+ }, [
410
+ d("path", { d: "M20 6 9 17l-5-5" })
411
+ ], -1)),
412
+ A(d("input", v(n.$attrs, {
413
+ "onUpdate:modelValue": t[0] || (t[0] = (s) => o.value = s),
414
+ type: "checkbox",
415
+ ref_key: "checkboxRef",
416
+ ref: r,
417
+ hidden: ""
418
+ }), null, 16), [
419
+ [G, o.value]
420
+ ])
421
+ ]));
422
+ }
423
+ }, Le = { class: "pointer-events-auto fixed inset-0 z-[100] min-h-screen bg-black/80 backdrop-blur-[2px]" }, Pe = {
424
+ __name: "DialogBackground",
425
+ setup(e) {
426
+ return z(() => {
427
+ document.querySelector("body").classList.add("overflow-hidden");
428
+ }), E(() => {
429
+ document.querySelector("body").classList.remove("overflow-hidden");
430
+ }), (o, r) => (a(), l("div", Le, [
431
+ i(o.$slots, "default")
432
+ ]));
433
+ }
434
+ }, Re = {
435
+ __name: "Input",
436
+ props: ["modelValue"],
437
+ setup(e) {
438
+ const r = f(e.modelValue);
439
+ return (n, t) => A((a(), l("input", {
440
+ "onUpdate:modelValue": t[0] || (t[0] = (s) => r.value = s),
441
+ onInput: t[1] || (t[1] = (s) => n.$emit("update:modelValue", s.target.value)),
442
+ class: "text-primary-950 focus:ring-primary-700 neutral-400:text-neutral-400 rounded-lg border-[1px] border-neutral-200 bg-white px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
443
+ }, null, 544)), [
444
+ [D, r.value]
445
+ ]);
446
+ }
447
+ }, Me = {};
448
+ function Ne(e, o) {
449
+ return a(), l("label", v(e.$attrs, { class: "text-primary-950 text-xs transition-all" }), [
450
+ i(e.$slots, "default")
451
+ ], 16);
452
+ }
453
+ const je = /* @__PURE__ */ _(Me, [["render", Ne]]), Ge = {
454
+ __name: "Radio",
455
+ props: {
456
+ modelValue: {},
457
+ modelModifiers: {}
458
+ },
459
+ emits: ["update:modelValue"],
460
+ setup(e) {
461
+ const o = V(e, "modelValue"), r = f(null);
462
+ return (n, t) => (a(), l("button", {
463
+ onClick: t[1] || (t[1] = (s) => r.value.click()),
464
+ class: "group/radio bg-neutral-100 has-checked:bg-white has-checked:border-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-full border-[1px] border-transparent"
465
+ }, [
466
+ t[2] || (t[2] = d("div", { class: "group-has-checked/radio:bg-primary-700 group-has-checked/radio:opacity-100 size-[10px] rounded-full opacity-0 transition-all" }, null, -1)),
467
+ A(d("input", v(n.$attrs, {
468
+ "onUpdate:modelValue": t[0] || (t[0] = (s) => o.value = s),
469
+ type: "radio",
470
+ ref_key: "radioRef",
471
+ ref: r,
472
+ hidden: ""
473
+ }), null, 16), [
474
+ [W, o.value]
475
+ ])
476
+ ]));
477
+ }
478
+ }, ze = "bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]", Ee = {
479
+ __name: "Select",
480
+ setup(e) {
481
+ return (o, r) => (a(), l("select", v(o.$attrs, {
482
+ onChange: r[0] || (r[0] = (n) => o.$emit("update:modelValue", n.target.value)),
483
+ class: ["border-neutral-200 text-primary-950 focus:ring-primary-700 appearance-none rounded-lg border-[1px] bg-white bg-[length:16px] bg-[right_12px_center] bg-no-repeat px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2", ze]
484
+ }), [
485
+ i(o.$slots, "default")
486
+ ], 16));
487
+ }
488
+ }, We = { class: "w-full" }, He = { class: "h-16" }, qe = { key: 0 }, Oe = {
489
+ key: 0,
490
+ class: "pe-4"
491
+ }, Ue = {
492
+ __name: "Table",
493
+ props: {
494
+ columns: { type: Array, required: !0 },
495
+ data: { type: Array, required: !0 }
496
+ },
497
+ setup(e) {
498
+ const o = e;
499
+ return (r, n) => (a(), l("table", We, [
500
+ d("thead", null, [
501
+ d("tr", He, [
502
+ (a(!0), l(y, null, T(o.columns, (t) => (a(), l("th", {
503
+ key: t.key,
504
+ class: "text-xs font-medium text-neutral-600 first-of-type:ps-4"
505
+ }, C(t.label), 1))), 128)),
506
+ r.$slots.actions ? (a(), l("th", qe)) : k("", !0)
507
+ ])
508
+ ]),
509
+ d("tbody", null, [
510
+ (a(!0), l(y, null, T(o.data, (t, s) => (a(), l("tr", {
511
+ key: s,
512
+ class: "odd:bg-background-main/50 hover:bg-background-main min-h-16 rounded-md transition-all"
513
+ }, [
514
+ (a(!0), l(y, null, T(o.columns, (c) => (a(), l("td", {
515
+ key: c.key,
516
+ class: "text-primary-950 py-4 text-xs first-of-type:rounded-s-md first-of-type:ps-4 last-of-type:rounded-e-md last-of-type:pe-4"
517
+ }, [
518
+ i(r.$slots, c.key, { row: t }, () => [
519
+ H(C(t[c.key]), 1)
520
+ ])
521
+ ]))), 128)),
522
+ r.$slots.actions ? (a(), l("td", Oe, [
523
+ i(r.$slots, "actions", { row: t })
524
+ ])) : k("", !0)
525
+ ]))), 128))
526
+ ])
527
+ ]));
528
+ }
529
+ }, Ze = { class: "bg-neutral-100/50 overflow-x-scroll rounded-xl p-1 [&::-webkit-scrollbar]:hidden" }, Je = {
530
+ __name: "Tabs",
531
+ props: {
532
+ default: { default: null }
533
+ },
534
+ setup(e) {
535
+ const r = f(e.default);
536
+ function n(t) {
537
+ r.value = t;
538
+ }
539
+ return w("TAB_DATA", { currentValue: r, setCurrentValue: n }), (t, s) => (a(), l("div", Ze, [
540
+ i(t.$slots, "default")
541
+ ]));
542
+ }
543
+ }, Ye = {
544
+ __name: "TabItem",
545
+ props: {
546
+ value: { required: !0 }
547
+ },
548
+ setup(e) {
549
+ const o = e, r = m("TAB_DATA"), { currentValue: n, setCurrentValue: t } = r, s = q(() => n.value === o.value ? ["bg-white", "font-medium", "text-primary-700", "shadow-xl"] : "text-neutral-600");
550
+ return (c, p) => (a(), l("button", {
551
+ onClick: p[0] || (p[0] = (x) => u(t)(o.value)),
552
+ class: h(["h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50", s.value])
553
+ }, [
554
+ i(c.$slots, "default")
555
+ ], 2));
556
+ }
557
+ }, Fe = {
558
+ __name: "TextArea",
559
+ props: ["modelValue"],
560
+ setup(e) {
561
+ const r = f(e.modelValue);
562
+ return (n, t) => A((a(), l("textarea", v({
563
+ onInput: t[0] || (t[0] = (s) => n.$emit("update:modelValue", s.target.value))
564
+ }, n.$attrs, {
565
+ "onUpdate:modelValue": t[1] || (t[1] = (s) => r.value = s),
566
+ class: "border-neutral-200 text-primary-950 neutral-400:text-neutral-400 focus:ring-primary-700 rounded-lg border-[1px] px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2"
567
+ }), null, 16)), [
568
+ [D, r.value]
569
+ ]);
570
+ }
571
+ }, Ke = {
572
+ install(e) {
573
+ e.component("AppHeader", Y), e.component("AppHeaderLink", X), e.component("AppLayout", ee), e.component("AppMain", te), e.component("AppNavTabs", re), e.component("AppNavTab", ne), e.component("AppSidebar", le), e.component("AppSidebarItem", de), e.component("AppSidebarItemChild", ce), e.component("AppSidebarItemChildren", pe), e.component("AppSidebarItemParent", be), e.component("AppSidebarToggle", ve), e.component("AppSidebarNavSection", ke), e.component("Badge", Se), e.component("Button", Ie), e.component("Checkbox", De), e.component("Card", Ve), e.component("DialogBackground", Pe), e.component("Input", Re), e.component("Label", je), e.component("Radio", Ge), e.component("Select", Ee), e.component("Table", Ue), e.component("Tabs", Je), e.component("TabItem", Ye), e.component("TextArea", Fe);
574
+ }
575
+ };
576
+ export {
577
+ Y as AppHeader,
578
+ X as AppHeaderLink,
579
+ ee as AppLayout,
580
+ te as AppMain,
581
+ ne as AppNavTab,
582
+ re as AppNavTabs,
583
+ le as AppSidebar,
584
+ de as AppSidebarItem,
585
+ ce as AppSidebarItemChild,
586
+ pe as AppSidebarItemChildren,
587
+ be as AppSidebarItemParent,
588
+ ke as AppSidebarNavSection,
589
+ ve as AppSidebarToggle,
590
+ Se as Badge,
591
+ Ie as Button,
592
+ Ve as Card,
593
+ De as Checkbox,
594
+ Pe as DialogBackground,
595
+ Re as Input,
596
+ je as Label,
597
+ Ge as Radio,
598
+ Ee as Select,
599
+ Ye as TabItem,
600
+ Ue as Table,
601
+ Je as Tabs,
602
+ Fe as TextArea,
603
+ Ke as default
604
+ };
@@ -0,0 +1 @@
1
+ (function(s,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router"],e):(s=typeof globalThis<"u"?globalThis:s||self,e(s.ScrubbedTailwindComponentsV2={},s.Vue,s.vueRouter))})(this,function(s,e,p){"use strict";const W={class:"flex w-full items-center justify-between"},H={class:"flex items-center gap-2"},q={class:"flex items-center gap-10"},O={class:"hidden gap-6 sm:flex"},k={__name:"AppHeader",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:n,toggleSidebar:l}=o;return(r,a)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass(["fixed flex h-16 w-dvw items-center bg-white/50 px-3 backdrop-blur sm:px-6",{"rounded-t-2xl":e.unref(n)}])},[e.createElementVNode("nav",W,[e.createElementVNode("div",H,[e.createElementVNode("button",{onClick:a[0]||(a[0]=i=>e.unref(l)()),class:"block cursor-pointer rounded-full p-2 hover:bg-neutral-100 sm:hidden"},a[1]||(a[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-menu-icon lucide-menu size-5 stroke-neutral-600"},[e.createElementVNode("path",{d:"M4 12h16"}),e.createElementVNode("path",{d:"M4 18h16"}),e.createElementVNode("path",{d:"M4 6h16"})],-1)])),e.renderSlot(r.$slots,"header-img")]),e.createElementVNode("div",q,[e.createElementVNode("ul",O,[e.renderSlot(r.$slots,"header-links")]),e.renderSlot(r.$slots,"header-actions")])])],2))}},U=["href"],b={__name:"AppHeaderLink",props:{to:{type:String,required:!0}},setup(t){const o=t;return(n,l)=>(e.openBlock(),e.createElementBlock("li",null,[o.to.startsWith("/")?(e.openBlock(),e.createBlock(e.unref(p.RouterLink),{key:0,class:"hover:text-primary-950 [&.router-link-active]:text-primary-950 text-xs uppercase text-neutral-600 hover:transition-all [&.router-link-active]:font-semibold",to:o.to},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},8,["to"])):(e.openBlock(),e.createElementBlock("a",{key:1,class:"hover:text-primary-950 text-xs uppercase text-neutral-600 hover:transition-all",href:o.to},[e.renderSlot(n.$slots,"default")],8,U))]))}},Z={class:"relative"},J={class:"flex"},h={__name:"AppLayout",setup(t){const o=e.ref(!1);function n(){window.innerWidth<=640?(o.value=!o.value,l()):o.value&&(o.value=!1,l())}function l(){const r=document.querySelector("body");r.classList.contains("bg-black")?r.classList.remove("bg-black"):r.classList.add("bg-black")}return e.provide("APP_DATA",{isSidebarToggled:o,toggleSidebar:n}),(r,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["bg-white transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)]",{"scale-93 origin-[center_top] translate-y-4":o.value}])},[e.createElementVNode("div",Z,[e.renderSlot(r.$slots,"header"),e.createElementVNode("div",J,[e.renderSlot(r.$slots,"content")])])],2))}},g={__name:"AppMain",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:n}=o;return(l,r)=>(e.openBlock(),e.createElementBlock("main",{class:e.normalizeClass(["bg-background-main fixed z-[-1] h-svh w-full overflow-auto px-6 pb-9 pt-24 sm:top-16 sm:ml-[223px] sm:h-[calc(100dvh-4rem)] sm:w-[calc(100dvw-223px)] sm:pt-9",e.unref(n)?"overflow-hidden rounded-t-xl sm:rounded-none":"sm:rounded-tl-2xl"])},[e.renderSlot(l.$slots,"default")],2))}},Y={class:"group flex w-full overflow-x-auto border-b-[1px] border-neutral-200"},_={__name:"AppNavTabs",setup(t){const o=e.ref(null);function n(r,a,i){o.value.style=`left: ${r}px; top: calc(${a}px + 6px); opacity: 1; width: ${i}px`}function l(r,a,i){o.value.style=`left: ${r}px; top: calc(${a}px + 6px); opacity: 0; width: ${i}px`}return e.provide("NAV_TABS",{setSelectorAttributes:n,resetSelectorOpacity:l}),(r,a)=>(e.openBlock(),e.createElementBlock("div",Y,[e.renderSlot(r.$slots,"default"),e.createElementVNode("div",{class:"bg-brand-primary-700 absolute left-0 z-[-1] h-[32px] w-10 rounded-lg opacity-0 transition-all ease-in-out",ref_key:"selector",ref:o},null,512)]))}},x={__name:"AppNavTab",props:{to:{type:String,required:!0}},setup(t){const o=t,n=e.inject("NAV_TABS"),{setSelectorAttributes:l,resetSelectorOpacity:r}=n,a=e.ref(null);return(i,c)=>(e.openBlock(),e.createElementBlock("div",{onMouseover:c[0]||(c[0]=u=>e.unref(l)(a.value.offsetLeft,a.value.offsetTop,a.value.clientWidth)),onMouseleave:c[1]||(c[1]=u=>e.unref(r)(a.value.offsetLeft,a.value.offsetTop,a.value.clientWidth)),class:"shrink-0",ref_key:"el",ref:a},[e.createVNode(e.unref(p.RouterLink),{class:"[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:border-brand-primary-700 flex h-12 shrink-0 items-center justify-between gap-2 border-b-2 border-transparent px-3 text-sm text-neutral-600 transition-all hover:font-medium hover:text-white [&.router-link-exact-active]:font-medium [&.router-link-exact-active]:hover:text-white",to:o.to},{default:e.withCtx(()=>[e.renderSlot(i.$slots,"default")]),_:3},8,["to"])],544))}},m=(t,o)=>{const n=t.__vccOpts||t;for(const[l,r]of o)n[l]=r;return n},F={class:"fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block"},y=m({__name:"AppSidebar",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:n,toggleSidebar:l}=o;return(r,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("aside",F,[e.renderSlot(r.$slots,"default",{},void 0,!0)]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createElementVNode("div",{class:"shadow-t-2xl fixed bottom-0 z-50 h-[60svh] w-full space-y-4 overflow-y-scroll rounded-t-2xl bg-white p-4 transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)] [&::-webkit-scrollbar]:hidden",style:e.normalizeStyle(e.unref(n)?"transform: translateZ(0)":"transform: translate3d(0,60svh,0)")},[e.renderSlot(r.$slots,"default",{},void 0,!0)],4),e.createElementVNode("div",{onClick:a[0]||(a[0]=i=>e.unref(l)()),class:e.normalizeClass(["backdrop backdrop-blur-[0.50px] transition-all duration-300 [transition-behavior:allow-discrete]",e.unref(n)?"fixed inset-0 z-40 block bg-black/80 opacity-100":"hidden"])},null,2)]))],64))}},[["__scopeId","data-v-aaece1c7"]]),X={class:"flex flex-col"},B={__name:"AppSidebarItem",setup(t){p.useRoute();const o=e.ref(!1);function n(){o.value=!o.value}return e.provide("SIDEBAR_TOGGLE",{toggled:o,toggleSidebarItem:n}),(l,r)=>(e.openBlock(),e.createElementBlock("div",X,[e.renderSlot(l.$slots,"default")]))}},Q=["to"],w={__name:"AppSidebarItemChild",props:{to:{type:String,required:!0}},setup(t){const o=t;return(n,l)=>o.to.startsWith("/")?(e.openBlock(),e.createBlock(e.unref(p.RouterLink),{key:0,class:"[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:bg-background-main text-primary-950 hover:bg-background-main block h-10 items-center gap-3 overflow-hidden text-ellipsis whitespace-nowrap rounded-lg px-3 text-xs leading-[40px] transition-all [&.router-link-exact-active]:font-medium",to:o.to},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},8,["to"])):(e.openBlock(),e.createElementBlock("a",{key:1,class:"text-primary-950 hover:bg-background-main block h-10 items-center gap-3 overflow-hidden text-ellipsis whitespace-nowrap rounded-lg px-3 text-xs leading-[40px] transition-all",to:o.to},[e.renderSlot(n.$slots,"default")],8,Q))}},$={__name:"AppSidebarItemChildren",setup(t){const o=e.inject("SIDEBAR_TOGGLE"),{toggled:n}=o;return(l,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["max-h-0 overflow-y-hidden rounded-b-lg opacity-0 transition-all",{"mt-2 max-h-max overflow-y-auto px-2 opacity-100":e.unref(n)}])},[e.renderSlot(l.$slots,"default")],2))}},K={class:"group/sidebar-item hover:bg-background-main has-[&.router-link-active]:bg-background-main peer flex h-10 items-center justify-between rounded-lg px-3 transition-all"},v=["href"],S={__name:"AppSidebarItemParent",props:{to:{type:String,required:!0},name:{type:String},hasChildren:{type:Boolean,default:!1}},setup(t){const o=p.useRoute(),n=t,l=e.inject("SIDEBAR_TOGGLE"),r=e.inject("APP_DATA"),{toggled:a,toggleSidebarItem:i}=l,{toggleSidebar:c}=r;function u(){o.matched.some(d=>n.name===d.name)?a.value=!0:a.value=!1}return e.watch(o,()=>u(),{immediate:!0}),(f,d)=>(e.openBlock(),e.createElementBlock("div",K,[n.to.startsWith("/")?(e.openBlock(),e.createBlock(e.unref(p.RouterLink),{key:0,onClick:d[0]||(d[0]=ye=>e.unref(c)()),class:"[&.router-link-active]:text-primary-950 [&.router-link-active]:text-primary-950 text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium",to:n.to},{default:e.withCtx(()=>[e.renderSlot(f.$slots,"default")]),_:3},8,["to"])):(e.openBlock(),e.createElementBlock("a",{key:1,class:"text-primary-950 peer flex h-full w-full items-center gap-3 text-xs",href:n.to},[e.renderSlot(f.$slots,"default")],8,v)),n.hasChildren?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:d[1]||(d[1]=ye=>e.unref(i)()),class:"cursor-pointer rounded-full p-1 transition-all hover:bg-neutral-100",type:"button"},[(e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:e.normalizeClass(["lucide lucide-chevron-down-icon lucide-chevron-down stroke-primary-950 transition-all duration-300",{"rotate-180":e.unref(a)}])},d[2]||(d[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)]),2))])):e.createCommentVNode("",!0)]))}},ee={class:"hover:bg-background-main has-[&.router-link-active]:active has-[&.router-link-active]:bg-primary-700 peer flex h-10 items-center justify-between rounded-lg px-3 transition-all"},A={__name:"AppSidebarToggle",setup(t){const o=e.inject("SIDEBAR_TOGGLE");return(n,l)=>{const r=e.resolveComponent("RouterLink");return e.openBlock(),e.createElementBlock("div",ee,[e.createVNode(r,{class:"text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium [&.router-link-active]:text-white",to:"/"},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3}),e.createElementVNode("button",{onClick:l[0]||(l[0]=a=>e.unref(o).toggleSidebarItem()),class:"cursor-pointer",type:"button"},l[1]||(l[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-down-icon lucide-chevron-down stroke-white"},[e.createElementVNode("path",{d:"m6 9 6 6 6-6"})],-1)]))])}}},te={},oe={key:0,class:"text-primary-950 px-1 text-sm font-medium"},re={class:"mt-2"};function ne(t,o){return e.openBlock(),e.createElementBlock("nav",null,[t.$slots.title?(e.openBlock(),e.createElementBlock("b",oe,[e.renderSlot(t.$slots,"title")])):e.createCommentVNode("",!0),e.createElementVNode("div",re,[e.renderSlot(t.$slots,"items")])])}const E=m(te,[["render",ne]]),le={},ae={class:"rounded-full px-3 py-1 text-xs font-medium"};function se(t,o){return e.openBlock(),e.createElementBlock("div",ae,[e.renderSlot(t.$slots,"default")])}const V=m(le,[["render",se]]),T={__name:"Button",props:{variant:{type:String,default:"primary"}},setup(t){const o=t,n={primary:["bg-brand-primary-700","text-white","active:bg-primary-950 hover:bg-primary-800"],secondary:["bg-neutral-100","text-primary-900"],outlined:["border-[1px]","border-neutral-200","text-primary-900","hover:bg-neutral-100"],ghost:["font-medium","text-primary-900","hover:bg-neutral-100"],destructive:["bg-danger-600","text-white","active:bg-danger-600-active","hover:bg-danger-600-hovered"]};return(l,r)=>(e.openBlock(),e.createElementBlock("button",e.mergeProps(l.$attrs,{class:["cursor-pointer rounded-lg px-4 py-2 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",n[o.variant]]}),[e.renderSlot(l.$slots,"default")],16))}},ie={},ce={class:"rounded-2xl bg-white p-6"};function de(t,o){return e.openBlock(),e.createElementBlock("div",ce,[e.renderSlot(t.$slots,"default")])}const I=m(ie,[["render",de]]),N={__name:"Checkbox",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue"),n=e.ref(null);return(l,r)=>(e.openBlock(),e.createElementBlock("button",{onClick:r[1]||(r[1]=a=>n.value.click()),class:"group/checkbox bg-neutral-100 has-checked:bg-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-sm transition-all"},[r[2]||(r[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check-icon lucide-check hidden stroke-white group-has-[:checked]/checkbox:block"},[e.createElementVNode("path",{d:"M20 6 9 17l-5-5"})],-1)),e.withDirectives(e.createElementVNode("input",e.mergeProps(l.$attrs,{"onUpdate:modelValue":r[0]||(r[0]=a=>o.value=a),type:"checkbox",ref_key:"checkboxRef",ref:n,hidden:""}),null,16),[[e.vModelCheckbox,o.value]])]))}},pe={class:"pointer-events-auto fixed inset-0 z-[100] min-h-screen bg-black/80 backdrop-blur-[2px]"},C={__name:"DialogBackground",setup(t){return e.onMounted(()=>{document.querySelector("body").classList.add("overflow-hidden")}),e.onUnmounted(()=>{document.querySelector("body").classList.remove("overflow-hidden")}),(o,n)=>(e.openBlock(),e.createElementBlock("div",pe,[e.renderSlot(o.$slots,"default")]))}},D={__name:"Input",props:["modelValue"],setup(t){const o=t,n=e.ref(o.modelValue);return(l,r)=>e.withDirectives((e.openBlock(),e.createElementBlock("input",{"onUpdate:modelValue":r[0]||(r[0]=a=>n.value=a),onInput:r[1]||(r[1]=a=>l.$emit("update:modelValue",a.target.value)),class:"text-primary-950 focus:ring-primary-700 neutral-400:text-neutral-400 rounded-lg border-[1px] border-neutral-200 bg-white px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"},null,544)),[[e.vModelText,n.value]])}},me={};function ue(t,o){return e.openBlock(),e.createElementBlock("label",e.mergeProps(t.$attrs,{class:"text-primary-950 text-xs transition-all"}),[e.renderSlot(t.$slots,"default")],16)}const L=m(me,[["render",ue]]),P={__name:"Radio",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue"),n=e.ref(null);return(l,r)=>(e.openBlock(),e.createElementBlock("button",{onClick:r[1]||(r[1]=a=>n.value.click()),class:"group/radio bg-neutral-100 has-checked:bg-white has-checked:border-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-full border-[1px] border-transparent"},[r[2]||(r[2]=e.createElementVNode("div",{class:"group-has-checked/radio:bg-primary-700 group-has-checked/radio:opacity-100 size-[10px] rounded-full opacity-0 transition-all"},null,-1)),e.withDirectives(e.createElementVNode("input",e.mergeProps(l.$attrs,{"onUpdate:modelValue":r[0]||(r[0]=a=>o.value=a),type:"radio",ref_key:"radioRef",ref:n,hidden:""}),null,16),[[e.vModelRadio,o.value]])]))}},fe="bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]",j={__name:"Select",setup(t){return(o,n)=>(e.openBlock(),e.createElementBlock("select",e.mergeProps(o.$attrs,{onChange:n[0]||(n[0]=l=>o.$emit("update:modelValue",l.target.value)),class:["border-neutral-200 text-primary-950 focus:ring-primary-700 appearance-none rounded-lg border-[1px] bg-white bg-[length:16px] bg-[right_12px_center] bg-no-repeat px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2",fe]}),[e.renderSlot(o.$slots,"default")],16))}},ke={class:"w-full"},be={class:"h-16"},he={key:0},ge={key:0,class:"pe-4"},M={__name:"Table",props:{columns:{type:Array,required:!0},data:{type:Array,required:!0}},setup(t){const o=t;return(n,l)=>(e.openBlock(),e.createElementBlock("table",ke,[e.createElementVNode("thead",null,[e.createElementVNode("tr",be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.columns,r=>(e.openBlock(),e.createElementBlock("th",{key:r.key,class:"text-xs font-medium text-neutral-600 first-of-type:ps-4"},e.toDisplayString(r.label),1))),128)),n.$slots.actions?(e.openBlock(),e.createElementBlock("th",he)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.data,(r,a)=>(e.openBlock(),e.createElementBlock("tr",{key:a,class:"odd:bg-background-main/50 hover:bg-background-main min-h-16 rounded-md transition-all"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.columns,i=>(e.openBlock(),e.createElementBlock("td",{key:i.key,class:"text-primary-950 py-4 text-xs first-of-type:rounded-s-md first-of-type:ps-4 last-of-type:rounded-e-md last-of-type:pe-4"},[e.renderSlot(n.$slots,i.key,{row:r},()=>[e.createTextVNode(e.toDisplayString(r[i.key]),1)])]))),128)),n.$slots.actions?(e.openBlock(),e.createElementBlock("td",ge,[e.renderSlot(n.$slots,"actions",{row:r})])):e.createCommentVNode("",!0)]))),128))])]))}},_e={class:"bg-neutral-100/50 overflow-x-scroll rounded-xl p-1 [&::-webkit-scrollbar]:hidden"},R={__name:"Tabs",props:{default:{default:null}},setup(t){const o=t,n=e.ref(o.default);function l(r){n.value=r}return e.provide("TAB_DATA",{currentValue:n,setCurrentValue:l}),(r,a)=>(e.openBlock(),e.createElementBlock("div",_e,[e.renderSlot(r.$slots,"default")]))}},z={__name:"TabItem",props:{value:{required:!0}},setup(t){const o=t,n=e.inject("TAB_DATA"),{currentValue:l,setCurrentValue:r}=n,a=e.computed(()=>l.value===o.value?["bg-white","font-medium","text-primary-700","shadow-xl"]:"text-neutral-600");return(i,c)=>(e.openBlock(),e.createElementBlock("button",{onClick:c[0]||(c[0]=u=>e.unref(r)(o.value)),class:e.normalizeClass(["h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",a.value])},[e.renderSlot(i.$slots,"default")],2))}},G={__name:"TextArea",props:["modelValue"],setup(t){const o=t,n=e.ref(o.modelValue);return(l,r)=>e.withDirectives((e.openBlock(),e.createElementBlock("textarea",e.mergeProps({onInput:r[0]||(r[0]=a=>l.$emit("update:modelValue",a.target.value))},l.$attrs,{"onUpdate:modelValue":r[1]||(r[1]=a=>n.value=a),class:"border-neutral-200 text-primary-950 neutral-400:text-neutral-400 focus:ring-primary-700 rounded-lg border-[1px] px-3 py-2 text-xs outline-none transition-all focus:ring-2 focus:ring-offset-2"}),null,16)),[[e.vModelText,n.value]])}},xe={install(t){t.component("AppHeader",k),t.component("AppHeaderLink",b),t.component("AppLayout",h),t.component("AppMain",g),t.component("AppNavTabs",_),t.component("AppNavTab",x),t.component("AppSidebar",y),t.component("AppSidebarItem",B),t.component("AppSidebarItemChild",w),t.component("AppSidebarItemChildren",$),t.component("AppSidebarItemParent",S),t.component("AppSidebarToggle",A),t.component("AppSidebarNavSection",E),t.component("Badge",V),t.component("Button",T),t.component("Checkbox",N),t.component("Card",I),t.component("DialogBackground",C),t.component("Input",D),t.component("Label",L),t.component("Radio",P),t.component("Select",j),t.component("Table",M),t.component("Tabs",R),t.component("TabItem",z),t.component("TextArea",G)}};s.AppHeader=k,s.AppHeaderLink=b,s.AppLayout=h,s.AppMain=g,s.AppNavTab=x,s.AppNavTabs=_,s.AppSidebar=y,s.AppSidebarItem=B,s.AppSidebarItemChild=w,s.AppSidebarItemChildren=$,s.AppSidebarItemParent=S,s.AppSidebarNavSection=E,s.AppSidebarToggle=A,s.Badge=V,s.Button=T,s.Card=I,s.Checkbox=N,s.DialogBackground=C,s.Input=D,s.Label=L,s.Radio=P,s.Select=j,s.TabItem=z,s.Table=M,s.Tabs=R,s.TextArea=G,s.default=xe,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "scrubbed-tailwind-components-v2",
3
+ "version": "2.0.2",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "dist/scrubbed-tailwind-components-v2.umd.js",
7
+ "module": "dist/scrubbed-tailwind-components-v2.es.js",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/scrubbed-tailwind-components-v2.es.js",
14
+ "require": "./dist/scrubbed-tailwind-components-v2.umd.js",
15
+ "default": "./dist/scrubbed-tailwind-components-v2.es.js"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "dev": "vite",
20
+ "build": "vite build",
21
+ "preview": "vite preview",
22
+ "prepare": "cypress install",
23
+ "test:e2e": "start-server-and-test preview http://localhost:4173 'cypress run --e2e'",
24
+ "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'",
25
+ "test:unit": "cypress run --component",
26
+ "test:unit:dev": "cypress open --component",
27
+ "format": "prettier --write src/"
28
+ },
29
+ "dependencies": {},
30
+ "peerDependencies": {
31
+ "vue": "^3.5.13",
32
+ "vue-router": "^4.5.0"
33
+ },
34
+ "devDependencies": {
35
+ "@vitejs/plugin-vue": "^5.2.3",
36
+ "@vitejs/plugin-vue-jsx": "^4.1.2",
37
+ "cypress": "^14.2.1",
38
+ "prettier": "^3.6.0",
39
+ "prettier-plugin-classnames": "^0.7.8",
40
+ "prettier-plugin-tailwindcss": "^0.6.13",
41
+ "start-server-and-test": "^2.0.11",
42
+ "vite": "^6.2.4",
43
+ "vite-plugin-vue-devtools": "^7.7.2",
44
+ "vue-router": "^4.5.0"
45
+ }
46
+ }