scrubbed-tailwind-components-v2 2.0.4 → 2.1.0

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 CHANGED
@@ -1,51 +1,81 @@
1
- # scrubbed-tailwind-components-v2
1
+ # Scrubbed Tailwind Components v2
2
2
 
3
- This template should help get you started developing with Vue 3 in Vite.
3
+ Scrubbed Tailwind Components v2 is a Vue 3 component library that provides a set of pre-built and beautifully styled components using Tailwind CSS. This library is designed to help you quickly build modern and responsive user interfaces.
4
4
 
5
- ## Recommended IDE Setup
5
+ ## Installation
6
6
 
7
- [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
7
+ To use Scrubbed Tailwind Components v2 in your project, you can install it via npm:
8
8
 
9
- ## Customize configuration
9
+ ```sh
10
+ npm install scrubbed-tailwind-components-v2
11
+ ```
10
12
 
11
- See [Vite Configuration Reference](https://vite.dev/config/).
13
+ ## Usage
12
14
 
13
- ## Project Setup
15
+ You can import and use the components in your Vue application like this:
14
16
 
15
- ```sh
16
- npm install
17
+ ```vue
18
+ <script setup>
19
+ import { Button } from "scrubbed-tailwind-components-v2";
20
+ </script>
21
+
22
+ <template>
23
+ <Button>Click me</Button>
24
+ </template>
17
25
  ```
18
26
 
19
- ### Compile and Hot-Reload for Development
27
+ ## Development
20
28
 
21
- ```sh
22
- npm run dev
23
- ```
29
+ This project uses Vite for development and building.
24
30
 
25
- ### Compile and Minify for Production
31
+ ### Recommended IDE Setup
26
32
 
27
- ```sh
28
- npm run build
29
- ```
33
+ - [VSCode](https://code.visualstudio.com/)
34
+ - [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur)
30
35
 
31
- ### Run Headed Component Tests with [Cypress Component Testing](https://on.cypress.io/component)
36
+ ### Project Setup
37
+
38
+ To set up the development environment, clone the repository and install the dependencies:
32
39
 
33
40
  ```sh
34
- npm run test:unit:dev # or `npm run test:unit` for headless testing
41
+ git clone https://[your-username]@bitbucket.org/devteam_scrubbed/scrubbed-tailwind-components-v2.git
42
+ cd scrubbed-tailwind-components-v2
43
+ npm install
35
44
  ```
36
45
 
37
- ### Run End-to-End Tests with [Cypress](https://www.cypress.io/)
46
+ ### Compile and Hot-Reload for Development
47
+
48
+ To start the development server with hot-reloading, run the following command:
38
49
 
39
50
  ```sh
40
- npm run test:e2e:dev
51
+ npm run dev
41
52
  ```
42
53
 
43
- This runs the end-to-end tests against the Vite development server.
44
- It is much faster than the production build.
54
+ ### Compile and Minify for Production
45
55
 
46
- But it's still recommended to test the production build with `test:e2e` before deploying (e.g. in CI environments):
56
+ To build the library for production, run:
47
57
 
48
58
  ```sh
49
59
  npm run build
50
- npm run test:e2e
51
60
  ```
61
+
62
+ ### Testing
63
+
64
+ This project uses Cypress for both component and end-to-end testing.
65
+
66
+ - **Run component tests (headless):**
67
+ ```sh
68
+ npm run test:unit
69
+ ```
70
+ - **Run component tests (headed):**
71
+ ```sh
72
+ npm run test:unit:dev
73
+ ```
74
+ - **Run end-to-end tests (headless):**
75
+ ```sh
76
+ npm run test:e2e
77
+ ```
78
+ - **Run end-to-end tests (headed):**
79
+ ```sh
80
+ npm run test:e2e:dev
81
+ ```
@@ -1 +1 @@
1
- @starting-style{.backdrop[data-v-aaece1c7]{opacity:0}}.link[data-v-0fab71c0]{border:1px solid transparent}.link[data-v-0fab71c0]:has(.router-link-active){border:1px solid rgba(255,255,255,.75);background:linear-gradient(101deg,#e9eef54d 6.76%,#105fa24d 100.14%);box-shadow:0 4px 17px -1px #30537426;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.tab[data-v-9e06f71f]{border:1px solid transparent}.tab-active[data-v-9e06f71f]{border-radius:10px;border:1px solid rgba(255,255,255,.75);background:linear-gradient(101deg,#e9eef54d 6.76%,#105fa24d 100.14%);box-shadow:0 4px 17px -1px #30537426;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}
1
+ @starting-style{.backdrop[data-v-aaece1c7]{opacity:0}}.link[data-v-28fee03d]{border:1px solid transparent}.link[data-v-28fee03d]:has(.router-link-active){border:1px solid rgba(255,255,255,.75);background:linear-gradient(101deg,#e9eef54d 6.76%,#105fa24d 100.14%);box-shadow:0 4px 17px -1px #30537426;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.fade-in-dialog-enter-active{transition:all .15s cubic-bezier(.08,.82,.17,1)}.fade-in-dialog-leave-active{transition:all .15s cubic-bezier(.46,.03,.52,.96)}.fade-in-dialog-enter-from,.fade-in-dialog-leave-to{transform:scale(.95);opacity:0}.fade-in-dialog-enter-active{transition-delay:.05s}.fade-in-enter-active,.fade-in-leave-active{transition:opacity .15s ease}.fade-in-enter-from,.fade-in-leave-to{opacity:0}.slide-enter-active{transition:all .5s cubic-bezier(.08,.82,.17,1)}.slide-leave-active{transition:all .15s cubic-bezier(.46,.03,.52,.96)}.slide-enter-from,.slide-leave-to{opacity:0;transform:translate(100%)}.slide-enter-active{transition-delay:.18s}.tab[data-v-9e06f71f]{border:1px solid transparent}.tab-active[data-v-9e06f71f]{border-radius:10px;border:1px solid rgba(255,255,255,.75);background:linear-gradient(101deg,#e9eef54d 6.76%,#105fa24d 100.14%);box-shadow:0 4px 17px -1px #30537426;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}
@@ -1,18 +1,18 @@
1
- import { inject as m, createElementBlock as a, openBlock as s, normalizeClass as h, unref as u, createElementVNode as d, renderSlot as i, createBlock as y, withCtx as _, ref as f, provide as I, createVNode as B, Fragment as x, Teleport as L, normalizeStyle as M, watch as j, createCommentVNode as k, resolveComponent as G, mergeProps as g, useModel as D, withDirectives as $, vModelCheckbox as z, onMounted as N, onUnmounted as E, vModelText as P, vModelRadio as H, renderList as S, toDisplayString as C, createTextVNode as W, computed as q } from "vue";
2
- import { RouterLink as w, useRoute as R } 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 = {
1
+ import { inject as g, createElementBlock as l, openBlock as s, normalizeClass as b, unref as c, createElementVNode as d, renderSlot as i, createBlock as p, withCtx as m, ref as f, provide as y, createVNode as x, Fragment as C, Teleport as D, normalizeStyle as H, watch as W, createCommentVNode as v, resolveComponent as O, mergeProps as k, useModel as S, withDirectives as w, vModelCheckbox as q, onMounted as U, onUnmounted as Z, Transition as A, useSlots as P, resolveDynamicComponent as E, cloneVNode as G, vModelText as z, vModelRadio as J, vModelSelect as Y, renderList as B, toDisplayString as L, createTextVNode as F, computed as X } from "vue";
2
+ import { RouterLink as T, useRoute as j } from "vue-router";
3
+ const Q = { class: "flex w-full items-center justify-between" }, K = { class: "flex items-center gap-2" }, ee = { class: "flex items-center gap-10" }, te = { class: "hidden gap-6 sm:flex" }, oe = {
4
4
  __name: "AppHeader",
5
5
  setup(e) {
6
- const t = m("APP_DATA"), { isSidebarToggled: o, toggleSidebar: n } = t;
7
- return (r, l) => (s(), a("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(o) }])
6
+ const t = g("APP_DATA"), { isSidebarToggled: o, toggleSidebar: n } = t;
7
+ return (r, a) => (s(), l("header", {
8
+ class: b(["fixed top-0 flex h-16 w-dvw items-center bg-white/50 px-3 backdrop-blur sm:px-6", { "rounded-t-2xl": c(o) }])
9
9
  }, [
10
- d("nav", O, [
11
- d("div", U, [
10
+ d("nav", Q, [
11
+ d("div", K, [
12
12
  d("button", {
13
- onClick: l[0] || (l[0] = (c) => u(n)()),
13
+ onClick: a[0] || (a[0] = (u) => c(n)()),
14
14
  class: "block cursor-pointer rounded-full p-2 hover:bg-neutral-100 sm:hidden"
15
- }, l[1] || (l[1] = [
15
+ }, a[1] || (a[1] = [
16
16
  d("svg", {
17
17
  xmlns: "http://www.w3.org/2000/svg",
18
18
  width: "24",
@@ -32,8 +32,8 @@ const O = { class: "flex w-full items-center justify-between" }, U = { class: "f
32
32
  ])),
33
33
  i(r.$slots, "header-img")
34
34
  ]),
35
- d("div", Z, [
36
- d("ul", J, [
35
+ d("div", ee, [
36
+ d("ul", te, [
37
37
  i(r.$slots, "header-links")
38
38
  ]),
39
39
  i(r.$slots, "header-actions")
@@ -41,33 +41,33 @@ const O = { class: "flex w-full items-center justify-between" }, U = { class: "f
41
41
  ])
42
42
  ], 2));
43
43
  }
44
- }, F = ["href"], X = {
44
+ }, re = ["href"], ne = {
45
45
  __name: "AppHeaderLink",
46
46
  props: {
47
47
  to: { type: String, required: !0 }
48
48
  },
49
49
  setup(e) {
50
50
  const t = e;
51
- return (o, n) => (s(), a("li", null, [
52
- t.to.startsWith("/") ? (s(), y(u(w), {
51
+ return (o, n) => (s(), l("li", null, [
52
+ t.to.startsWith("/") ? (s(), p(c(T), {
53
53
  key: 0,
54
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
55
  to: t.to
56
56
  }, {
57
- default: _(() => [
57
+ default: m(() => [
58
58
  i(o.$slots, "default")
59
59
  ]),
60
60
  _: 3
61
- }, 8, ["to"])) : (s(), a("a", {
61
+ }, 8, ["to"])) : (s(), l("a", {
62
62
  key: 1,
63
63
  class: "hover:text-primary-950 text-xs uppercase text-neutral-600 hover:transition-all",
64
64
  href: t.to
65
65
  }, [
66
66
  i(o.$slots, "default")
67
- ], 8, F))
67
+ ], 8, re))
68
68
  ]));
69
69
  }
70
- }, Q = { class: "relative" }, K = { class: "flex" }, ee = {
70
+ }, se = { class: "relative" }, ae = { class: "flex" }, le = {
71
71
  __name: "AppLayout",
72
72
  setup(e) {
73
73
  const t = f(!1);
@@ -78,56 +78,56 @@ const O = { class: "flex w-full items-center justify-between" }, U = { class: "f
78
78
  const r = document.querySelector("body");
79
79
  r.classList.contains("bg-black") ? r.classList.remove("bg-black") : r.classList.add("bg-black");
80
80
  }
81
- return I("APP_DATA", { isSidebarToggled: t, toggleSidebar: o }), (r, l) => (s(), a("div", {
82
- class: h(["bg-white transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)]", {
81
+ return y("APP_DATA", { isSidebarToggled: t, toggleSidebar: o }), (r, a) => (s(), l("div", {
82
+ class: b(["bg-white transition-all duration-500 ease-[cubic-bezier(.32,.72,0,1)]", {
83
83
  "scale-93 origin-[center_top] translate-y-4": t.value
84
84
  }])
85
85
  }, [
86
- d("div", Q, [
86
+ d("div", se, [
87
87
  i(r.$slots, "header"),
88
- d("div", K, [
88
+ d("div", ae, [
89
89
  i(r.$slots, "content")
90
90
  ])
91
91
  ])
92
92
  ], 2));
93
93
  }
94
- }, te = {
94
+ }, ie = {
95
95
  __name: "AppMain",
96
96
  setup(e) {
97
- const t = m("APP_DATA"), { isSidebarToggled: o } = t;
98
- return (n, r) => (s(), a("main", {
99
- class: h([
97
+ const t = g("APP_DATA"), { isSidebarToggled: o } = t;
98
+ return (n, r) => (s(), l("main", {
99
+ class: b([
100
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(o) ? "overflow-hidden rounded-t-xl sm:rounded-none" : "sm:rounded-tl-2xl"
101
+ c(o) ? "overflow-hidden rounded-t-xl sm:rounded-none" : "sm:rounded-tl-2xl"
102
102
  ])
103
103
  }, [
104
104
  i(n.$slots, "default")
105
105
  ], 2));
106
106
  }
107
- }, b = (e, t) => {
107
+ }, h = (e, t) => {
108
108
  const o = e.__vccOpts || e;
109
109
  for (const [n, r] of t)
110
110
  o[n] = r;
111
111
  return o;
112
- }, re = {}, oe = { class: "flex w-full overflow-x-auto border-b-[1px] border-neutral-200 [&::-webkit-scrollbar]:hidden" };
113
- function ne(e, t) {
114
- return s(), a("div", oe, [
112
+ }, de = {}, ce = { class: "flex w-full overflow-x-auto border-b-[1px] border-neutral-200 [&::-webkit-scrollbar]:hidden" };
113
+ function ue(e, t) {
114
+ return s(), l("div", ce, [
115
115
  i(e.$slots, "default")
116
116
  ]);
117
117
  }
118
- const se = /* @__PURE__ */ b(re, [["render", ne]]), ae = { class: "shrink-0" }, le = {
118
+ const pe = /* @__PURE__ */ h(de, [["render", ue]]), ge = { class: "shrink-0" }, me = {
119
119
  __name: "AppNavTab",
120
120
  props: {
121
121
  to: { type: String, required: !0 }
122
122
  },
123
123
  setup(e) {
124
124
  const t = e;
125
- return f(null), (o, n) => (s(), a("div", ae, [
126
- B(u(w), {
125
+ return f(null), (o, n) => (s(), l("div", ge, [
126
+ x(c(T), {
127
127
  class: "[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:border-brand-primary-700 hover:text-brand-primary-700 group relative 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 [&.router-link-exact-active]:font-medium",
128
128
  to: t.to
129
129
  }, {
130
- default: _(() => [
130
+ default: m(() => [
131
131
  i(o.$slots, "default"),
132
132
  n[0] || (n[0] = d("div", { class: "bg-primary-100 absolute inset-x-0 z-[-1] h-8 w-full rounded-lg opacity-0 transition-all contain-strict group-hover:transform-none group-hover:opacity-100 group-hover:[transform-origin:50%_50%_0px]" }, null, -1))
133
133
  ]),
@@ -136,118 +136,118 @@ const se = /* @__PURE__ */ b(re, [["render", ne]]), ae = { class: "shrink-0" },
136
136
  }, 8, ["to"])
137
137
  ]));
138
138
  }
139
- }, ie = { class: "fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block" }, de = {
139
+ }, be = { class: "fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block" }, fe = {
140
140
  __name: "AppSidebar",
141
141
  setup(e) {
142
- const t = m("APP_DATA"), { isSidebarToggled: o, toggleSidebar: n } = t;
143
- return (r, l) => (s(), a(x, null, [
144
- d("aside", ie, [
142
+ const t = g("APP_DATA"), { isSidebarToggled: o, toggleSidebar: n } = t;
143
+ return (r, a) => (s(), l(C, null, [
144
+ d("aside", be, [
145
145
  i(r.$slots, "default", {}, void 0, !0)
146
146
  ]),
147
- (s(), y(L, { to: "body" }, [
147
+ (s(), p(D, { to: "body" }, [
148
148
  d("div", {
149
149
  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",
150
- style: M(
151
- u(o) ? "transform: translateZ(0)" : "transform: translate3d(0,60svh,0)"
150
+ style: H(
151
+ c(o) ? "transform: translateZ(0)" : "transform: translate3d(0,60svh,0)"
152
152
  )
153
153
  }, [
154
154
  i(r.$slots, "default", {}, void 0, !0)
155
155
  ], 4),
156
156
  d("div", {
157
- onClick: l[0] || (l[0] = (c) => u(n)()),
158
- class: h([
157
+ onClick: a[0] || (a[0] = (u) => c(n)()),
158
+ class: b([
159
159
  "backdrop backdrop-blur-[0.50px] transition-all duration-300 [transition-behavior:allow-discrete]",
160
- u(o) ? "fixed inset-0 z-40 block bg-black/80 opacity-100" : "hidden"
160
+ c(o) ? "fixed inset-0 z-40 block bg-black/80 opacity-100" : "hidden"
161
161
  ])
162
162
  }, null, 2)
163
163
  ]))
164
164
  ], 64));
165
165
  }
166
- }, ue = /* @__PURE__ */ b(de, [["__scopeId", "data-v-aaece1c7"]]), ce = { class: "flex flex-col" }, pe = {
166
+ }, he = /* @__PURE__ */ h(fe, [["__scopeId", "data-v-aaece1c7"]]), _e = { class: "flex flex-col" }, ve = {
167
167
  __name: "AppSidebarItem",
168
168
  setup(e) {
169
- R();
169
+ j();
170
170
  const t = f(!1);
171
171
  function o() {
172
172
  t.value = !t.value;
173
173
  }
174
- return I("SIDEBAR_TOGGLE", { toggled: t, toggleSidebarItem: o }), (n, r) => (s(), a("div", ce, [
174
+ return y("SIDEBAR_TOGGLE", { toggled: t, toggleSidebarItem: o }), (n, r) => (s(), l("div", _e, [
175
175
  i(n.$slots, "default")
176
176
  ]));
177
177
  }
178
- }, me = ["to"], fe = {
178
+ }, xe = ["to"], ke = {
179
179
  __name: "AppSidebarItemChild",
180
180
  props: {
181
181
  to: { type: String, required: !0 }
182
182
  },
183
183
  setup(e) {
184
184
  const t = e;
185
- return (o, n) => t.to.startsWith("/") ? (s(), y(u(w), {
185
+ return (o, n) => t.to.startsWith("/") ? (s(), p(c(T), {
186
186
  key: 0,
187
187
  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",
188
188
  to: t.to
189
189
  }, {
190
- default: _(() => [
190
+ default: m(() => [
191
191
  i(o.$slots, "default")
192
192
  ]),
193
193
  _: 3
194
- }, 8, ["to"])) : (s(), a("a", {
194
+ }, 8, ["to"])) : (s(), l("a", {
195
195
  key: 1,
196
196
  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",
197
197
  to: t.to
198
198
  }, [
199
199
  i(o.$slots, "default")
200
- ], 8, me));
200
+ ], 8, xe));
201
201
  }
202
- }, be = {
202
+ }, ye = {
203
203
  __name: "AppSidebarItemChildren",
204
204
  setup(e) {
205
- const t = m("SIDEBAR_TOGGLE"), { toggled: o } = t;
206
- return (n, r) => (s(), a("div", {
207
- 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(o) }])
205
+ const t = g("SIDEBAR_TOGGLE"), { toggled: o } = t;
206
+ return (n, r) => (s(), l("div", {
207
+ class: b(["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": c(o) }])
208
208
  }, [
209
209
  i(n.$slots, "default")
210
210
  ], 2));
211
211
  }
212
- }, he = { class: "link 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" }, ge = ["href"], _e = {
212
+ }, we = { class: "link 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" }, $e = ["href"], Ce = {
213
213
  __name: "AppSidebarItemParent",
214
214
  props: {
215
215
  to: { type: String, required: !0 },
216
- name: { type: String },
216
+ name: { type: [String, Object] },
217
217
  hasChildren: { type: Boolean, default: !1 }
218
218
  },
219
219
  setup(e) {
220
- const t = R(), o = e, n = m("SIDEBAR_TOGGLE"), r = m("APP_DATA"), { toggled: l, toggleSidebarItem: c } = n, { toggleSidebar: v } = r;
221
- function T() {
220
+ const t = j(), o = e, n = g("SIDEBAR_TOGGLE"), r = g("APP_DATA"), { toggled: a, toggleSidebarItem: u } = n, { toggleSidebar: $ } = r;
221
+ function M() {
222
222
  t.matched.some(
223
- (p) => o.name === p.name
224
- ) ? l.value = !0 : l.value = !1;
223
+ (_) => o.name === _.name
224
+ ) ? a.value = !0 : a.value = !1;
225
225
  }
226
- return j(t, () => T(), { immediate: !0 }), (A, p) => (s(), a("div", he, [
227
- o.to.startsWith("/") ? (s(), y(u(w), {
226
+ return W(t, () => M(), { immediate: !0 }), (I, _) => (s(), l("div", we, [
227
+ o.to.startsWith("/") ? (s(), p(c(T), {
228
228
  key: 0,
229
- onClick: p[0] || (p[0] = (V) => u(v)()),
230
- class: "[&.router-link-active]:text-primary-800 [&.router-link-active]:text-primary-800 text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium",
229
+ onClick: _[0] || (_[0] = (N) => c($)()),
230
+ class: "[&.router-link-active]:text-primary-800 text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium",
231
231
  to: o.to
232
232
  }, {
233
- default: _(() => [
234
- i(A.$slots, "default", {}, void 0, !0)
233
+ default: m(() => [
234
+ i(I.$slots, "default", {}, void 0, !0)
235
235
  ]),
236
236
  _: 3
237
- }, 8, ["to"])) : (s(), a("a", {
237
+ }, 8, ["to"])) : (s(), l("a", {
238
238
  key: 1,
239
239
  class: "text-primary-950 peer flex h-full w-full items-center gap-3 text-xs",
240
240
  href: o.to
241
241
  }, [
242
- i(A.$slots, "default", {}, void 0, !0)
243
- ], 8, ge)),
244
- o.hasChildren ? (s(), a("button", {
242
+ i(I.$slots, "default", {}, void 0, !0)
243
+ ], 8, $e)),
244
+ o.hasChildren ? (s(), l("button", {
245
245
  key: 2,
246
- onClick: p[1] || (p[1] = (V) => u(c)()),
246
+ onClick: _[1] || (_[1] = (N) => c(u)()),
247
247
  class: "cursor-pointer rounded-full p-1 transition-all hover:bg-neutral-100",
248
248
  type: "button"
249
249
  }, [
250
- (s(), a("svg", {
250
+ (s(), l("svg", {
251
251
  xmlns: "http://www.w3.org/2000/svg",
252
252
  width: "16",
253
253
  height: "16",
@@ -257,31 +257,31 @@ const se = /* @__PURE__ */ b(re, [["render", ne]]), ae = { class: "shrink-0" },
257
257
  "stroke-width": "2",
258
258
  "stroke-linecap": "round",
259
259
  "stroke-linejoin": "round",
260
- class: h(["lucide lucide-chevron-down-icon lucide-chevron-down stroke-primary-800 transition-all duration-300", { "rotate-180": u(l) }])
261
- }, p[2] || (p[2] = [
260
+ class: b(["lucide lucide-chevron-down-icon lucide-chevron-down stroke-primary-800 transition-all duration-300", { "rotate-180": c(a) }])
261
+ }, _[2] || (_[2] = [
262
262
  d("path", { d: "m6 9 6 6 6-6" }, null, -1)
263
263
  ]), 2))
264
- ])) : k("", !0)
264
+ ])) : v("", !0)
265
265
  ]));
266
266
  }
267
- }, ve = /* @__PURE__ */ b(_e, [["__scopeId", "data-v-0fab71c0"]]), xe = { 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" }, ke = {
267
+ }, Ae = /* @__PURE__ */ h(Ce, [["__scopeId", "data-v-28fee03d"]]), Se = { 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" }, Te = {
268
268
  __name: "AppSidebarToggle",
269
269
  setup(e) {
270
- const t = m("SIDEBAR_TOGGLE");
270
+ const t = g("SIDEBAR_TOGGLE");
271
271
  return (o, n) => {
272
- const r = G("RouterLink");
273
- return s(), a("div", xe, [
274
- B(r, {
272
+ const r = O("RouterLink");
273
+ return s(), l("div", Se, [
274
+ x(r, {
275
275
  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",
276
276
  to: "/"
277
277
  }, {
278
- default: _(() => [
278
+ default: m(() => [
279
279
  i(o.$slots, "default")
280
280
  ]),
281
281
  _: 3
282
282
  }),
283
283
  d("button", {
284
- onClick: n[0] || (n[0] = (l) => u(t).toggleSidebarItem()),
284
+ onClick: n[0] || (n[0] = (a) => c(t).toggleSidebarItem()),
285
285
  class: "cursor-pointer",
286
286
  type: "button"
287
287
  }, n[1] || (n[1] = [
@@ -303,66 +303,162 @@ const se = /* @__PURE__ */ b(re, [["render", ne]]), ae = { class: "shrink-0" },
303
303
  ]);
304
304
  };
305
305
  }
306
- }, ye = {}, $e = {
306
+ }, Ie = {}, Be = {
307
307
  key: 0,
308
308
  class: "text-primary-950 px-1 text-sm font-medium"
309
- }, we = { class: "mt-2" };
310
- function Ae(e, t) {
311
- return s(), a("nav", null, [
312
- e.$slots.title ? (s(), a("b", $e, [
309
+ }, De = { class: "mt-2" };
310
+ function Re(e, t) {
311
+ return s(), l("nav", null, [
312
+ e.$slots.title ? (s(), l("b", Be, [
313
313
  i(e.$slots, "title")
314
- ])) : k("", !0),
315
- d("div", we, [
314
+ ])) : v("", !0),
315
+ d("div", De, [
316
316
  i(e.$slots, "items")
317
317
  ])
318
318
  ]);
319
319
  }
320
- const Se = /* @__PURE__ */ b(ye, [["render", Ae]]), Ie = {}, Te = { class: "rounded-full px-3 py-1 text-xs font-medium" };
321
- function Ce(e, t) {
322
- return s(), a("div", Te, [
320
+ const Ve = /* @__PURE__ */ h(Ie, [["render", Re]]), Me = {}, Le = { class: "rounded-full px-3 py-1 text-xs font-medium" };
321
+ function Pe(e, t) {
322
+ return s(), l("div", Le, [
323
323
  i(e.$slots, "default")
324
324
  ]);
325
325
  }
326
- const Be = /* @__PURE__ */ b(Ie, [["render", Ce]]), De = {
326
+ const Ee = /* @__PURE__ */ h(Me, [["render", Pe]]), Ge = {
327
327
  __name: "Button",
328
328
  props: {
329
329
  variant: { type: String, default: "primary" }
330
330
  },
331
331
  setup(e) {
332
332
  const t = e, o = {
333
- primary: [
334
- "bg-brand-primary-700",
335
- "text-white",
336
- "active:bg-primary-950 hover:bg-primary-800"
337
- ],
338
- secondary: ["bg-neutral-100", "text-primary-900"],
339
- outlined: [
340
- "border-[1px]",
341
- "border-neutral-200",
342
- "text-primary-900",
343
- "hover:bg-neutral-100"
344
- ],
345
- ghost: ["font-medium", "text-primary-900", "hover:bg-neutral-100"],
346
- destructive: [
347
- "bg-danger-600",
348
- "text-white",
349
- "active:bg-danger-600-active",
350
- "hover:bg-danger-600-hovered"
351
- ]
333
+ /* ---------------- Solid Buttons ---------------- */
334
+ primary: {
335
+ backgroundColor: "bg-gradient-to-br from-brand-primary-500 to-brand-primary-700",
336
+ textColor: "text-white",
337
+ hoverBackgroundColor: "hover:from-brand-primary-700 hover:to-brand-primary-800",
338
+ focusRing: "focus:ring-brand-primary-300"
339
+ },
340
+ secondary: {
341
+ backgroundColor: "bg-neutral-100",
342
+ textColor: "text-neutral-700",
343
+ hoverBackgroundColor: "hover:bg-neutral-200",
344
+ focusRing: "focus:ring-neutral-300"
345
+ },
346
+ success: {
347
+ backgroundColor: "bg-success-400",
348
+ textColor: "text-white",
349
+ hoverBackgroundColor: "hover:bg-success-500",
350
+ focusRing: "focus:ring-success-300"
351
+ },
352
+ danger: {
353
+ backgroundColor: "bg-danger-600",
354
+ textColor: "text-white",
355
+ hoverBackgroundColor: "hover:bg-danger-700",
356
+ focusRing: "focus:ring-danger-300"
357
+ },
358
+ warning: {
359
+ backgroundColor: "bg-warning-500",
360
+ textColor: "text-neutral-950",
361
+ hoverBackgroundColor: "hover:bg-warning-600",
362
+ focusRing: "focus:ring-warning-300"
363
+ },
364
+ /* ---------------- Outlined Buttons ---------------- */
365
+ outlined: {
366
+ backgroundColor: "bg-transparent",
367
+ textColor: "text-neutral-700",
368
+ borderColor: "border border-neutral-200",
369
+ hoverBackgroundColor: "hover:bg-neutral-100",
370
+ hoverTextColor: "hover:text-neutral-900",
371
+ focusRing: "focus:ring-neutral-200"
372
+ },
373
+ outlinedPrimary: {
374
+ backgroundColor: "bg-transparent",
375
+ textColor: "text-brand-primary-700",
376
+ borderColor: "border border-brand-primary-300",
377
+ hoverBackgroundColor: "hover:bg-brand-primary-100",
378
+ hoverTextColor: "hover:text-brand-primary-800",
379
+ focusRing: "focus:ring-brand-primary-200"
380
+ },
381
+ outlinedSuccess: {
382
+ backgroundColor: "bg-transparent",
383
+ textColor: "text-success-600",
384
+ borderColor: "border border-success-300",
385
+ hoverBackgroundColor: "hover:bg-success-100",
386
+ hoverTextColor: "hover:text-success-700",
387
+ focusRing: "focus:ring-success-200"
388
+ },
389
+ outlinedDanger: {
390
+ backgroundColor: "bg-transparent",
391
+ textColor: "text-danger-600",
392
+ borderColor: "border border-danger-300",
393
+ hoverBackgroundColor: "hover:bg-danger-100",
394
+ hoverTextColor: "hover:text-danger-700",
395
+ focusRing: "focus:ring-danger-200"
396
+ },
397
+ outlinedWarning: {
398
+ backgroundColor: "bg-transparent",
399
+ textColor: "text-warning-600",
400
+ borderColor: "border border-warning-300",
401
+ hoverBackgroundColor: "hover:bg-warning-100",
402
+ hoverTextColor: "hover:text-warning-700",
403
+ focusRing: "focus:ring-warning-200"
404
+ },
405
+ /* ---------------- Ghost Buttons ---------------- */
406
+ ghost: {
407
+ backgroundColor: "bg-transparent",
408
+ textColor: "text-neutral-700",
409
+ hoverBackgroundColor: "hover:bg-neutral-100",
410
+ hoverTextColor: "hover:text-neutral-900",
411
+ focusRing: "focus:ring-neutral-200"
412
+ },
413
+ ghostPrimary: {
414
+ backgroundColor: "bg-transparent",
415
+ textColor: "text-brand-primary-700",
416
+ hoverBackgroundColor: "hover:bg-brand-primary-100",
417
+ hoverTextColor: "hover:text-brand-primary-800",
418
+ focusRing: "focus:ring-brand-primary-200"
419
+ },
420
+ ghostSuccess: {
421
+ backgroundColor: "bg-transparent",
422
+ textColor: "text-success-600",
423
+ hoverBackgroundColor: "hover:bg-success-100",
424
+ hoverTextColor: "hover:text-success-700",
425
+ focusRing: "focus:ring-success-200"
426
+ },
427
+ ghostDanger: {
428
+ backgroundColor: "bg-transparent",
429
+ textColor: "text-danger-600",
430
+ hoverBackgroundColor: "hover:bg-danger-100",
431
+ hoverTextColor: "hover:text-danger-700",
432
+ focusRing: "focus:ring-danger-200"
433
+ },
434
+ ghostWarning: {
435
+ backgroundColor: "bg-transparent",
436
+ textColor: "text-warning-600",
437
+ hoverBackgroundColor: "hover:bg-warning-100",
438
+ hoverTextColor: "hover:text-warning-700",
439
+ focusRing: "focus:ring-warning-200"
440
+ }
352
441
  };
353
- return (n, r) => (s(), a("button", g(n.$attrs, {
354
- class: ["cursor-pointer rounded-lg px-4 py-2 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50", o[t.variant]]
442
+ return (n, r) => (s(), l("button", k(n.$attrs, {
443
+ class: ["cursor-pointer rounded-lg px-4 py-2 text-xs transition-all active:scale-[0.97] disabled:cursor-not-allowed disabled:opacity-50 disabled:active:scale-100", [
444
+ o[t.variant].backgroundColor,
445
+ o[t.variant].borderColor,
446
+ o[t.variant].textColor,
447
+ o[t.variant].hoverBackgroundColor,
448
+ o[t.variant].hoverTextColor,
449
+ o[t.variant].focusRing
450
+ ]]
355
451
  }), [
356
452
  i(n.$slots, "default")
357
453
  ], 16));
358
454
  }
359
- }, Pe = {}, Re = { class: "rounded-2xl bg-white p-6" };
360
- function Ve(e, t) {
361
- return s(), a("div", Re, [
455
+ }, ze = {}, je = { class: "rounded-2xl bg-white p-6" };
456
+ function Ne(e, t) {
457
+ return s(), l("div", je, [
362
458
  i(e.$slots, "default")
363
459
  ]);
364
460
  }
365
- const Le = /* @__PURE__ */ b(Pe, [["render", Ve]]), Me = {
461
+ const R = /* @__PURE__ */ h(ze, [["render", Ne]]), He = {
366
462
  __name: "Checkbox",
367
463
  props: {
368
464
  modelValue: {},
@@ -370,10 +466,10 @@ const Le = /* @__PURE__ */ b(Pe, [["render", Ve]]), Me = {
370
466
  },
371
467
  emits: ["update:modelValue"],
372
468
  setup(e) {
373
- const t = D(e, "modelValue"), o = f(null);
374
- return (n, r) => (s(), a("button", {
375
- onClick: r[1] || (r[1] = (l) => o.value.click()),
376
- class: "group/checkbox bg-neutral-100 has-checked:bg-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-sm transition-all"
469
+ const t = S(e, "modelValue"), o = f(null);
470
+ return (n, r) => (s(), l("button", {
471
+ onClick: r[1] || (r[1] = (a) => o.value.click()),
472
+ class: "group/checkbox has-checked:bg-brand-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-sm bg-neutral-200 transition-all duration-300 active:scale-[0.50]"
377
473
  }, [
378
474
  r[2] || (r[2] = d("svg", {
379
475
  xmlns: "http://www.w3.org/2000/svg",
@@ -385,52 +481,110 @@ const Le = /* @__PURE__ */ b(Pe, [["render", Ve]]), Me = {
385
481
  "stroke-width": "2",
386
482
  "stroke-linecap": "round",
387
483
  "stroke-linejoin": "round",
388
- class: "lucide lucide-check-icon lucide-check hidden stroke-white group-has-[:checked]/checkbox:block"
484
+ class: "lucide lucide-check-icon lucide-check scale-0 stroke-white opacity-0 group-has-[:checked]/checkbox:scale-100 group-has-[:checked]/checkbox:opacity-100"
389
485
  }, [
390
486
  d("path", { d: "M20 6 9 17l-5-5" })
391
487
  ], -1)),
392
- $(d("input", g(n.$attrs, {
393
- "onUpdate:modelValue": r[0] || (r[0] = (l) => t.value = l),
488
+ w(d("input", k(n.$attrs, {
489
+ "onUpdate:modelValue": r[0] || (r[0] = (a) => t.value = a),
394
490
  type: "checkbox",
395
491
  ref_key: "checkboxRef",
396
492
  ref: o,
397
493
  hidden: ""
398
494
  }), null, 16), [
399
- [z, t.value]
495
+ [q, t.value]
400
496
  ])
401
497
  ]));
402
498
  }
403
- }, je = { class: "pointer-events-auto fixed inset-0 z-[100] min-h-screen bg-black/80 backdrop-blur-[2px]" }, Ge = {
499
+ }, We = {
500
+ __name: "Dialog",
501
+ setup(e) {
502
+ const t = f(!1);
503
+ function o() {
504
+ t.value = !t.value;
505
+ }
506
+ return y("DIALOG_META", { toggled: t, toggleDialog: o }), (n, r) => i(n.$slots, "default");
507
+ }
508
+ }, Oe = { class: "pointer-events-auto fixed inset-0 z-[500] min-h-screen bg-black/80 backdrop-blur-[2px]" }, V = {
404
509
  __name: "DialogBackground",
405
510
  setup(e) {
406
- return N(() => {
511
+ return U(() => {
407
512
  document.querySelector("body").classList.add("overflow-hidden");
408
- }), E(() => {
513
+ }), Z(() => {
409
514
  document.querySelector("body").classList.remove("overflow-hidden");
410
- }), (t, o) => (s(), a("div", je, [
515
+ }), (t, o) => (s(), l("div", Oe, [
411
516
  i(t.$slots, "default")
412
517
  ]));
413
518
  }
414
- }, ze = {
519
+ }, qe = {
520
+ __name: "DialogContent",
521
+ props: {
522
+ class: { type: String }
523
+ },
524
+ setup(e) {
525
+ const t = e, { toggled: o, toggleDialog: n } = g("DIALOG_META");
526
+ return (r, a) => (s(), p(D, { to: "body" }, [
527
+ x(A, { name: "fade-in" }, {
528
+ default: m(() => [
529
+ c(o) ? (s(), p(V, {
530
+ key: 0,
531
+ onClick: a[0] || (a[0] = (u) => c(n)())
532
+ })) : v("", !0)
533
+ ]),
534
+ _: 1
535
+ }),
536
+ x(A, { name: "fade-in-dialog" }, {
537
+ default: m(() => [
538
+ c(o) ? (s(), p(R, {
539
+ key: 0,
540
+ class: b(["fixed left-1/2 top-1/2 z-[600] -translate-x-1/2 -translate-y-1/2 rounded-xl bg-white transition-all", t.class])
541
+ }, {
542
+ default: m(() => [
543
+ i(r.$slots, "default")
544
+ ]),
545
+ _: 3
546
+ }, 8, ["class"])) : v("", !0)
547
+ ]),
548
+ _: 3
549
+ })
550
+ ]));
551
+ }
552
+ }, Ue = {
553
+ __name: "DialogToggle",
554
+ setup(e) {
555
+ const t = P(), { toggleDialog: o } = g("DIALOG_META");
556
+ return (n, r) => {
557
+ var a, u;
558
+ return s(), p(E(
559
+ G((u = (a = c(t)).default) == null ? void 0 : u.call(a)[0], {
560
+ onClick: c(o)
561
+ })
562
+ ));
563
+ };
564
+ }
565
+ }, Ze = {
415
566
  __name: "Input",
416
- props: ["modelValue"],
567
+ props: {
568
+ modelValue: {},
569
+ modelModifiers: {}
570
+ },
571
+ emits: ["update:modelValue"],
417
572
  setup(e) {
418
- const o = f(e.modelValue);
419
- return (n, r) => $((s(), a("input", {
420
- "onUpdate:modelValue": r[0] || (r[0] = (l) => o.value = l),
421
- onInput: r[1] || (r[1] = (l) => n.$emit("update:modelValue", l.target.value)),
422
- 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"
423
- }, null, 544)), [
424
- [P, o.value]
573
+ const t = S(e, "modelValue");
574
+ return (o, n) => w((s(), l("input", {
575
+ "onUpdate:modelValue": n[0] || (n[0] = (r) => t.value = r),
576
+ class: "text-primary-950 focus:ring-brand-primary-700 neutral-400:text-neutral-400 rounded-lg border-[1px] border-neutral-200 bg-white px-3 py-2 text-xs transition-all duration-300 outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
577
+ }, null, 512)), [
578
+ [z, t.value]
425
579
  ]);
426
580
  }
427
- }, Ne = {};
428
- function Ee(e, t) {
429
- return s(), a("label", g(e.$attrs, { class: "text-primary-950 text-xs transition-all" }), [
581
+ }, Je = {};
582
+ function Ye(e, t) {
583
+ return s(), l("label", k(e.$attrs, { class: "text-primary-950 text-sm transition-all" }), [
430
584
  i(e.$slots, "default")
431
585
  ], 16);
432
586
  }
433
- const He = /* @__PURE__ */ b(Ne, [["render", Ee]]), We = {
587
+ const Fe = /* @__PURE__ */ h(Je, [["render", Ye]]), Xe = {
434
588
  __name: "Radio",
435
589
  props: {
436
590
  modelValue: {},
@@ -438,37 +592,125 @@ const He = /* @__PURE__ */ b(Ne, [["render", Ee]]), We = {
438
592
  },
439
593
  emits: ["update:modelValue"],
440
594
  setup(e) {
441
- const t = D(e, "modelValue"), o = f(null);
442
- return (n, r) => (s(), a("button", {
443
- onClick: r[1] || (r[1] = (l) => o.value.click()),
444
- 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"
595
+ const t = S(e, "modelValue"), o = f(null);
596
+ return (n, r) => (s(), l("button", {
597
+ onClick: r[1] || (r[1] = (a) => o.value.click()),
598
+ class: "group/radio has-checked:border-brand-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-full border-[1px] border-transparent bg-neutral-100 duration-300 active:scale-[0.80] has-checked:bg-white"
445
599
  }, [
446
- r[2] || (r[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)),
447
- $(d("input", g(n.$attrs, {
448
- "onUpdate:modelValue": r[0] || (r[0] = (l) => t.value = l),
600
+ r[2] || (r[2] = d("div", { class: "group-has-checked/radio:bg-brand-primary-700 size-[10px] rounded-full opacity-0 transition-all group-has-checked/radio:opacity-100" }, null, -1)),
601
+ w(d("input", k(n.$attrs, {
602
+ "onUpdate:modelValue": r[0] || (r[0] = (a) => t.value = a),
449
603
  type: "radio",
450
604
  ref_key: "radioRef",
451
605
  ref: o,
452
606
  hidden: ""
453
607
  }), null, 16), [
454
- [H, t.value]
608
+ [J, t.value]
455
609
  ])
456
610
  ]));
457
611
  }
458
- }, qe = "bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]", Oe = {
612
+ }, Qe = "bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]", Ke = {
459
613
  __name: "Select",
614
+ props: {
615
+ modelValue: {},
616
+ modelModifiers: {}
617
+ },
618
+ emits: ["update:modelValue"],
460
619
  setup(e) {
461
- return (t, o) => (s(), a("select", g(t.$attrs, {
462
- onChange: o[0] || (o[0] = (n) => t.$emit("update:modelValue", n.target.value)),
463
- 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", qe]
620
+ const t = S(e, "modelValue");
621
+ return (o, n) => w((s(), l("select", k(o.$attrs, {
622
+ "onUpdate:modelValue": n[0] || (n[0] = (r) => t.value = r),
623
+ class: ["text-primary-950 focus:ring-brand-primary-700 appearance-none rounded-lg border-[1px] border-neutral-200 bg-white bg-[length:16px] bg-[right_12px_center] bg-no-repeat px-3 py-2 text-xs transition-all outline-none focus:ring-2 focus:ring-offset-2", Qe]
464
624
  }), [
465
- i(t.$slots, "default")
466
- ], 16));
625
+ i(o.$slots, "default")
626
+ ], 16)), [
627
+ [Y, t.value]
628
+ ]);
629
+ }
630
+ }, et = {
631
+ __name: "Sheet",
632
+ setup(e) {
633
+ const t = f(!1);
634
+ function o() {
635
+ t.value = !t.value;
636
+ }
637
+ return y("SHEET_META", { toggled: t, toggleSheet: o }), (n, r) => i(n.$slots, "default");
638
+ }
639
+ }, tt = {
640
+ __name: "SheetContent",
641
+ props: {
642
+ class: { type: String }
643
+ },
644
+ setup(e) {
645
+ const t = e, { toggled: o, toggleSheet: n } = g("SHEET_META");
646
+ return (r, a) => (s(), p(D, { to: "body" }, [
647
+ x(A, { name: "fade-in" }, {
648
+ default: m(() => [
649
+ c(o) ? (s(), p(V, {
650
+ key: 0,
651
+ onClick: a[0] || (a[0] = (u) => c(n)())
652
+ })) : v("", !0)
653
+ ]),
654
+ _: 1
655
+ }),
656
+ x(A, { name: "slide" }, {
657
+ default: m(() => [
658
+ c(o) ? (s(), p(R, {
659
+ key: 0,
660
+ class: b(["fixed right-0 top-1/2 z-[600] h-full w-3/4 -translate-y-1/2 rounded-e-none bg-white transition-all md:right-[1rem] md:h-[calc(100dvh-2rem)] md:w-96 md:rounded-xl", t.class])
661
+ }, {
662
+ default: m(() => [
663
+ i(r.$slots, "default")
664
+ ]),
665
+ _: 3
666
+ }, 8, ["class"])) : v("", !0)
667
+ ]),
668
+ _: 3
669
+ })
670
+ ]));
671
+ }
672
+ }, ot = {
673
+ __name: "SheetToggle",
674
+ setup(e) {
675
+ const t = P(), { toggleSheet: o } = g("SHEET_META");
676
+ return (n, r) => {
677
+ var a, u;
678
+ return s(), p(E(
679
+ G((u = (a = c(t)).default) == null ? void 0 : u.call(a)[0], {
680
+ onClick: c(o)
681
+ })
682
+ ));
683
+ };
684
+ }
685
+ }, rt = {}, nt = { class: "bg-primary-100 animate-pulse rounded-lg" };
686
+ function st(e, t) {
687
+ return s(), l("div", nt);
688
+ }
689
+ const at = /* @__PURE__ */ h(rt, [["render", st]]), lt = {
690
+ __name: "Switch",
691
+ setup(e) {
692
+ const t = f(!1);
693
+ function o() {
694
+ t.value = !t.value;
695
+ }
696
+ return (n, r) => (s(), l("button", {
697
+ onClick: r[0] || (r[0] = (a) => o()),
698
+ class: b([
699
+ "h-5 w-9 cursor-pointer rounded-full p-0.5 transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-50",
700
+ t.value ? "from-brand-primary-600 to-brand-primary-700 bg-gradient-to-br" : "bg-neutral-200"
701
+ ]),
702
+ role: "switch",
703
+ type: "button"
704
+ }, [
705
+ d("span", {
706
+ class: b(["pointer-events-none block size-4 rounded-full bg-white shadow-md transition-all duration-300", { "translate-x-full": t.value }])
707
+ }, null, 2)
708
+ ], 2));
467
709
  }
468
- }, Ue = { class: "w-full" }, Ze = { class: "h-16" }, Je = { key: 0 }, Ye = {
710
+ }, it = { class: "w-full" }, dt = { class: "h-16" }, ct = { key: 0 }, ut = {
469
711
  key: 0,
470
712
  class: "pe-4"
471
- }, Fe = {
713
+ }, pt = {
472
714
  __name: "Table",
473
715
  props: {
474
716
  columns: { type: Array, required: !0 },
@@ -476,37 +718,37 @@ const He = /* @__PURE__ */ b(Ne, [["render", Ee]]), We = {
476
718
  },
477
719
  setup(e) {
478
720
  const t = e;
479
- return (o, n) => (s(), a("table", Ue, [
721
+ return (o, n) => (s(), l("table", it, [
480
722
  d("thead", null, [
481
- d("tr", Ze, [
482
- (s(!0), a(x, null, S(t.columns, (r) => (s(), a("th", {
723
+ d("tr", dt, [
724
+ (s(!0), l(C, null, B(t.columns, (r) => (s(), l("th", {
483
725
  key: r.key,
484
726
  class: "text-xs font-medium text-neutral-600 first-of-type:ps-4"
485
- }, C(r.label), 1))), 128)),
486
- o.$slots.actions ? (s(), a("th", Je)) : k("", !0)
727
+ }, L(r.label), 1))), 128)),
728
+ o.$slots.actions ? (s(), l("th", ct)) : v("", !0)
487
729
  ])
488
730
  ]),
489
731
  d("tbody", null, [
490
- (s(!0), a(x, null, S(t.data, (r, l) => (s(), a("tr", {
491
- key: l,
732
+ (s(!0), l(C, null, B(t.data, (r, a) => (s(), l("tr", {
733
+ key: a,
492
734
  class: "odd:bg-background-main/50 hover:bg-background-main min-h-16 rounded-md transition-all"
493
735
  }, [
494
- (s(!0), a(x, null, S(t.columns, (c) => (s(), a("td", {
495
- key: c.key,
736
+ (s(!0), l(C, null, B(t.columns, (u) => (s(), l("td", {
737
+ key: u.key,
496
738
  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"
497
739
  }, [
498
- i(o.$slots, c.key, { row: r }, () => [
499
- W(C(r[c.key]), 1)
740
+ i(o.$slots, u.key, { row: r }, () => [
741
+ F(L(r[u.key]), 1)
500
742
  ])
501
743
  ]))), 128)),
502
- o.$slots.actions ? (s(), a("td", Ye, [
744
+ o.$slots.actions ? (s(), l("td", ut, [
503
745
  i(o.$slots, "actions", { row: r })
504
- ])) : k("", !0)
746
+ ])) : v("", !0)
505
747
  ]))), 128))
506
748
  ])
507
749
  ]));
508
750
  }
509
- }, Xe = { class: "overflow-x-scroll rounded-xl bg-neutral-100/50 p-1 [&::-webkit-scrollbar]:hidden" }, Qe = {
751
+ }, gt = { class: "overflow-x-scroll rounded-xl bg-neutral-100/50 p-1 [&::-webkit-scrollbar]:hidden" }, mt = {
510
752
  __name: "Tabs",
511
753
  props: {
512
754
  default: { default: null }
@@ -516,75 +758,83 @@ const He = /* @__PURE__ */ b(Ne, [["render", Ee]]), We = {
516
758
  function n(r) {
517
759
  o.value = r;
518
760
  }
519
- return I("TAB_DATA", { currentValue: o, setCurrentValue: n }), (r, l) => (s(), a("div", Xe, [
761
+ return y("TAB_DATA", { currentValue: o, setCurrentValue: n }), (r, a) => (s(), l("div", gt, [
520
762
  i(r.$slots, "default")
521
763
  ]));
522
764
  }
523
- }, Ke = {
765
+ }, bt = {
524
766
  __name: "TabItem",
525
767
  props: {
526
768
  value: { required: !0 }
527
769
  },
528
770
  setup(e) {
529
- const t = e, o = m("TAB_DATA"), { currentValue: n, setCurrentValue: r } = o, l = q(() => n.value === t.value ? [
771
+ const t = e, o = g("TAB_DATA"), { currentValue: n, setCurrentValue: r } = o, a = X(() => n.value === t.value ? [
530
772
  "bg-white",
531
773
  "font-medium",
532
774
  "text-primary-700",
533
775
  "shadow-xl",
534
776
  "tab-active"
535
777
  ] : "text-neutral-600");
536
- return (c, v) => (s(), a("button", {
537
- onClick: v[0] || (v[0] = (T) => u(r)(t.value)),
538
- class: h(["tab h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50", l.value])
778
+ return (u, $) => (s(), l("button", {
779
+ onClick: $[0] || ($[0] = (M) => c(r)(t.value)),
780
+ class: b(["tab h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50", a.value])
539
781
  }, [
540
- i(c.$slots, "default", {}, void 0, !0)
782
+ i(u.$slots, "default", {}, void 0, !0)
541
783
  ], 2));
542
784
  }
543
- }, et = /* @__PURE__ */ b(Ke, [["__scopeId", "data-v-9e06f71f"]]), tt = {
785
+ }, ft = /* @__PURE__ */ h(bt, [["__scopeId", "data-v-9e06f71f"]]), ht = {
544
786
  __name: "TextArea",
545
787
  props: ["modelValue"],
546
788
  setup(e) {
547
789
  const o = f(e.modelValue);
548
- return (n, r) => $((s(), a("textarea", g({
549
- onInput: r[0] || (r[0] = (l) => n.$emit("update:modelValue", l.target.value))
790
+ return (n, r) => w((s(), l("textarea", k({
791
+ onInput: r[0] || (r[0] = (a) => n.$emit("update:modelValue", a.target.value))
550
792
  }, n.$attrs, {
551
- "onUpdate:modelValue": r[1] || (r[1] = (l) => o.value = l),
552
- 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"
793
+ "onUpdate:modelValue": r[1] || (r[1] = (a) => o.value = a),
794
+ class: "text-primary-950 neutral-400:text-neutral-400 focus:ring-brand-primary-700 rounded-lg border-[1px] border-neutral-200 px-3 py-2 text-xs transition-all outline-none focus:ring-2 focus:ring-offset-2"
553
795
  }), null, 16)), [
554
- [P, o.value]
796
+ [z, o.value]
555
797
  ]);
556
798
  }
557
- }, nt = {
799
+ }, xt = {
558
800
  install(e) {
559
- e.component("AppHeader", Y), e.component("AppHeaderLink", X), e.component("AppLayout", ee), e.component("AppMain", te), e.component("AppNavTabs", se), e.component("AppNavTab", le), e.component("AppSidebar", ue), e.component("AppSidebarItem", pe), e.component("AppSidebarItemChild", fe), e.component("AppSidebarItemChildren", be), e.component("AppSidebarItemParent", ve), e.component("AppSidebarToggle", ke), e.component("AppSidebarNavSection", Se), e.component("Badge", Be), e.component("Button", De), e.component("Checkbox", Me), e.component("Card", Le), e.component("DialogBackground", Ge), e.component("Input", ze), e.component("Label", He), e.component("Radio", We), e.component("Select", Oe), e.component("Table", Fe), e.component("Tabs", Qe), e.component("TabItem", et), e.component("TextArea", tt);
801
+ e.component("AppHeader", oe), e.component("AppHeaderLink", ne), e.component("AppLayout", le), e.component("AppMain", ie), e.component("AppNavTabs", pe), e.component("AppNavTab", me), e.component("AppSidebar", he), e.component("AppSidebarItem", ve), e.component("AppSidebarItemChild", ke), e.component("AppSidebarItemChildren", ye), e.component("AppSidebarItemParent", Ae), e.component("AppSidebarToggle", Te), e.component("AppSidebarNavSection", Ve), e.component("Badge", Ee), e.component("Button", Ge), e.component("Checkbox", He), e.component("Card", R), e.component("Dialog", We), e.component("DialogContent", qe), e.component("DialogToggle", Ue), e.component("DialogBackground", V), e.component("Input", Ze), e.component("Label", Fe), e.component("Radio", Xe), e.component("Select", Ke), e.component("Sheet", et), e.component("SheetContent", tt), e.component("SheetToggle", ot), e.component("SkeletonLoader", at), e.component("Switch", lt), e.component("Table", pt), e.component("Tabs", mt), e.component("TabItem", ft), e.component("TextArea", ht);
560
802
  }
561
803
  };
562
804
  export {
563
- Y as AppHeader,
564
- X as AppHeaderLink,
565
- ee as AppLayout,
566
- te as AppMain,
567
- le as AppNavTab,
568
- se as AppNavTabs,
569
- ue as AppSidebar,
570
- pe as AppSidebarItem,
571
- fe as AppSidebarItemChild,
572
- be as AppSidebarItemChildren,
573
- ve as AppSidebarItemParent,
574
- Se as AppSidebarNavSection,
575
- ke as AppSidebarToggle,
576
- Be as Badge,
577
- De as Button,
578
- Le as Card,
579
- Me as Checkbox,
580
- Ge as DialogBackground,
581
- ze as Input,
582
- He as Label,
583
- We as Radio,
584
- Oe as Select,
585
- et as TabItem,
586
- Fe as Table,
587
- Qe as Tabs,
588
- tt as TextArea,
589
- nt as default
805
+ oe as AppHeader,
806
+ ne as AppHeaderLink,
807
+ le as AppLayout,
808
+ ie as AppMain,
809
+ me as AppNavTab,
810
+ pe as AppNavTabs,
811
+ he as AppSidebar,
812
+ ve as AppSidebarItem,
813
+ ke as AppSidebarItemChild,
814
+ ye as AppSidebarItemChildren,
815
+ Ae as AppSidebarItemParent,
816
+ Ve as AppSidebarNavSection,
817
+ Te as AppSidebarToggle,
818
+ Ee as Badge,
819
+ Ge as Button,
820
+ R as Card,
821
+ He as Checkbox,
822
+ We as Dialog,
823
+ V as DialogBackground,
824
+ qe as DialogContent,
825
+ Ue as DialogToggle,
826
+ Ze as Input,
827
+ Fe as Label,
828
+ Xe as Radio,
829
+ Ke as Select,
830
+ et as Sheet,
831
+ tt as SheetContent,
832
+ ot as SheetToggle,
833
+ at as SkeletonLoader,
834
+ lt as Switch,
835
+ ft as TabItem,
836
+ pt as Table,
837
+ mt as Tabs,
838
+ ht as TextArea,
839
+ xt as default
590
840
  };
@@ -1 +1 @@
1
- (function(a,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):(a=typeof globalThis<"u"?globalThis:a||self,e(a.ScrubbedTailwindComponentsV2={},a.Vue,a.vueRouter))})(this,function(a,e,p){"use strict";const H={class:"flex w-full items-center justify-between"},W={class:"flex items-center gap-2"},q={class:"flex items-center gap-10"},O={class:"hidden gap-6 sm:flex"},f={__name:"AppHeader",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:n,toggleSidebar:l}=o;return(r,s)=>(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",H,[e.createElementVNode("div",W,[e.createElementVNode("button",{onClick:s[0]||(s[0]=i=>e.unref(l)()),class:"block cursor-pointer rounded-full p-2 hover:bg-neutral-100 sm:hidden"},s[1]||(s[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"],k={__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"},b={__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,s)=>(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))}},h={__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))}},c=(t,o)=>{const n=t.__vccOpts||t;for(const[l,r]of o)n[l]=r;return n},Y={},F={class:"flex w-full overflow-x-auto border-b-[1px] border-neutral-200 [&::-webkit-scrollbar]:hidden"};function X(t,o){return e.openBlock(),e.createElementBlock("div",F,[e.renderSlot(t.$slots,"default")])}const g=c(Y,[["render",X]]),Q={class:"shrink-0"},_={__name:"AppNavTab",props:{to:{type:String,required:!0}},setup(t){const o=t;return e.ref(null),(n,l)=>(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(e.unref(p.RouterLink),{class:"[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:border-brand-primary-700 hover:text-brand-primary-700 group relative 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 [&.router-link-exact-active]:font-medium",to:o.to},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default"),l[0]||(l[0]=e.createElementVNode("div",{class:"bg-primary-100 absolute inset-x-0 z-[-1] h-8 w-full rounded-lg opacity-0 transition-all contain-strict group-hover:transform-none group-hover:opacity-100 group-hover:[transform-origin:50%_50%_0px]"},null,-1))]),_:3,__:[0]},8,["to"])]))}},K={class:"fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block"},x=c({__name:"AppSidebar",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:n,toggleSidebar:l}=o;return(r,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("aside",K,[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:s[0]||(s[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"]]),v={class:"flex flex-col"},y={__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",v,[e.renderSlot(l.$slots,"default")]))}},ee=["to"],B={__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,ee))}},w={__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))}},te={class:"link 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"},oe=["href"],$=c({__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:s,toggleSidebarItem:i}=l,{toggleSidebar:m}=r;function G(){o.matched.some(d=>n.name===d.name)?s.value=!0:s.value=!1}return e.watch(o,()=>G(),{immediate:!0}),(u,d)=>(e.openBlock(),e.createElementBlock("div",te,[n.to.startsWith("/")?(e.openBlock(),e.createBlock(e.unref(p.RouterLink),{key:0,onClick:d[0]||(d[0]=$e=>e.unref(m)()),class:"[&.router-link-active]:text-primary-800 [&.router-link-active]:text-primary-800 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(u.$slots,"default",{},void 0,!0)]),_: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(u.$slots,"default",{},void 0,!0)],8,oe)),n.hasChildren?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:d[1]||(d[1]=$e=>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-800 transition-all duration-300",{"rotate-180":e.unref(s)}])},d[2]||(d[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)]),2))])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-0fab71c0"]]),re={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"},S={__name:"AppSidebarToggle",setup(t){const o=e.inject("SIDEBAR_TOGGLE");return(n,l)=>{const r=e.resolveComponent("RouterLink");return e.openBlock(),e.createElementBlock("div",re,[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]=s=>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)]))])}}},ne={},le={key:0,class:"text-primary-950 px-1 text-sm font-medium"},ae={class:"mt-2"};function se(t,o){return e.openBlock(),e.createElementBlock("nav",null,[t.$slots.title?(e.openBlock(),e.createElementBlock("b",le,[e.renderSlot(t.$slots,"title")])):e.createCommentVNode("",!0),e.createElementVNode("div",ae,[e.renderSlot(t.$slots,"items")])])}const A=c(ne,[["render",se]]),ie={},ce={class:"rounded-full px-3 py-1 text-xs font-medium"};function de(t,o){return e.openBlock(),e.createElementBlock("div",ce,[e.renderSlot(t.$slots,"default")])}const E=c(ie,[["render",de]]),V={__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))}},pe={},me={class:"rounded-2xl bg-white p-6"};function ue(t,o){return e.openBlock(),e.createElementBlock("div",me,[e.renderSlot(t.$slots,"default")])}const I=c(pe,[["render",ue]]),T={__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]=s=>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]=s=>o.value=s),type:"checkbox",ref_key:"checkboxRef",ref:n,hidden:""}),null,16),[[e.vModelCheckbox,o.value]])]))}},fe={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",fe,[e.renderSlot(o.$slots,"default")]))}},N={__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]=s=>n.value=s),onInput:r[1]||(r[1]=s=>l.$emit("update:modelValue",s.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]])}},ke={};function be(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 P=c(ke,[["render",be]]),D={__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]=s=>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]=s=>o.value=s),type:"radio",ref_key:"radioRef",ref:n,hidden:""}),null,16),[[e.vModelRadio,o.value]])]))}},he="bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]",L={__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",he]}),[e.renderSlot(o.$slots,"default")],16))}},ge={class:"w-full"},_e={class:"h-16"},xe={key:0},ye={key:0,class:"pe-4"},j={__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",ge,[e.createElementVNode("thead",null,[e.createElementVNode("tr",_e,[(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",xe)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.data,(r,s)=>(e.openBlock(),e.createElementBlock("tr",{key:s,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",ye,[e.renderSlot(n.$slots,"actions",{row:r})])):e.createCommentVNode("",!0)]))),128))])]))}},Be={class:"overflow-x-scroll rounded-xl bg-neutral-100/50 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,s)=>(e.openBlock(),e.createElementBlock("div",Be,[e.renderSlot(r.$slots,"default")]))}},M=c({__name:"TabItem",props:{value:{required:!0}},setup(t){const o=t,n=e.inject("TAB_DATA"),{currentValue:l,setCurrentValue:r}=n,s=e.computed(()=>l.value===o.value?["bg-white","font-medium","text-primary-700","shadow-xl","tab-active"]:"text-neutral-600");return(i,m)=>(e.openBlock(),e.createElementBlock("button",{onClick:m[0]||(m[0]=G=>e.unref(r)(o.value)),class:e.normalizeClass(["tab h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",s.value])},[e.renderSlot(i.$slots,"default",{},void 0,!0)],2))}},[["__scopeId","data-v-9e06f71f"]]),z={__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]=s=>l.$emit("update:modelValue",s.target.value))},l.$attrs,{"onUpdate:modelValue":r[1]||(r[1]=s=>n.value=s),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]])}},we={install(t){t.component("AppHeader",f),t.component("AppHeaderLink",k),t.component("AppLayout",b),t.component("AppMain",h),t.component("AppNavTabs",g),t.component("AppNavTab",_),t.component("AppSidebar",x),t.component("AppSidebarItem",y),t.component("AppSidebarItemChild",B),t.component("AppSidebarItemChildren",w),t.component("AppSidebarItemParent",$),t.component("AppSidebarToggle",S),t.component("AppSidebarNavSection",A),t.component("Badge",E),t.component("Button",V),t.component("Checkbox",T),t.component("Card",I),t.component("DialogBackground",C),t.component("Input",N),t.component("Label",P),t.component("Radio",D),t.component("Select",L),t.component("Table",j),t.component("Tabs",R),t.component("TabItem",M),t.component("TextArea",z)}};a.AppHeader=f,a.AppHeaderLink=k,a.AppLayout=b,a.AppMain=h,a.AppNavTab=_,a.AppNavTabs=g,a.AppSidebar=x,a.AppSidebarItem=y,a.AppSidebarItemChild=B,a.AppSidebarItemChildren=w,a.AppSidebarItemParent=$,a.AppSidebarNavSection=A,a.AppSidebarToggle=S,a.Badge=E,a.Button=V,a.Card=I,a.Checkbox=T,a.DialogBackground=C,a.Input=N,a.Label=P,a.Radio=D,a.Select=L,a.TabItem=M,a.Table=j,a.Tabs=R,a.TextArea=z,a.default=we,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(a,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):(a=typeof globalThis<"u"?globalThis:a||self,e(a.ScrubbedTailwindComponentsV2={},a.Vue,a.vueRouter))})(this,function(a,e,p){"use strict";const F={class:"flex w-full items-center justify-between"},X={class:"flex items-center gap-2"},Q={class:"flex items-center gap-10"},K={class:"hidden gap-6 sm:flex"},b={__name:"AppHeader",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:r,toggleSidebar:l}=o;return(n,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass(["fixed top-0 flex h-16 w-dvw items-center bg-white/50 px-3 backdrop-blur sm:px-6",{"rounded-t-2xl":e.unref(r)}])},[e.createElementVNode("nav",F,[e.createElementVNode("div",X,[e.createElementVNode("button",{onClick:s[0]||(s[0]=c=>e.unref(l)()),class:"block cursor-pointer rounded-full p-2 hover:bg-neutral-100 sm:hidden"},s[1]||(s[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(n.$slots,"header-img")]),e.createElementVNode("div",Q,[e.createElementVNode("ul",K,[e.renderSlot(n.$slots,"header-links")]),e.renderSlot(n.$slots,"header-actions")])])],2))}},v=["href"],h={__name:"AppHeaderLink",props:{to:{type:String,required:!0}},setup(t){const o=t;return(r,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(r.$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(r.$slots,"default")],8,v))]))}},ee={class:"relative"},te={class:"flex"},k={__name:"AppLayout",setup(t){const o=e.ref(!1);function r(){window.innerWidth<=640?(o.value=!o.value,l()):o.value&&(o.value=!1,l())}function l(){const n=document.querySelector("body");n.classList.contains("bg-black")?n.classList.remove("bg-black"):n.classList.add("bg-black")}return e.provide("APP_DATA",{isSidebarToggled:o,toggleSidebar:r}),(n,s)=>(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",ee,[e.renderSlot(n.$slots,"header"),e.createElementVNode("div",te,[e.renderSlot(n.$slots,"content")])])],2))}},_={__name:"AppMain",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:r}=o;return(l,n)=>(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(r)?"overflow-hidden rounded-t-xl sm:rounded-none":"sm:rounded-tl-2xl"])},[e.renderSlot(l.$slots,"default")],2))}},i=(t,o)=>{const r=t.__vccOpts||t;for(const[l,n]of o)r[l]=n;return r},oe={},re={class:"flex w-full overflow-x-auto border-b-[1px] border-neutral-200 [&::-webkit-scrollbar]:hidden"};function ne(t,o){return e.openBlock(),e.createElementBlock("div",re,[e.renderSlot(t.$slots,"default")])}const x=i(oe,[["render",ne]]),le={class:"shrink-0"},y={__name:"AppNavTab",props:{to:{type:String,required:!0}},setup(t){const o=t;return e.ref(null),(r,l)=>(e.openBlock(),e.createElementBlock("div",le,[e.createVNode(e.unref(p.RouterLink),{class:"[&.router-link-exact-active]:text-primary-950 [&.router-link-exact-active]:border-brand-primary-700 hover:text-brand-primary-700 group relative 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 [&.router-link-exact-active]:font-medium",to:o.to},{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default"),l[0]||(l[0]=e.createElementVNode("div",{class:"bg-primary-100 absolute inset-x-0 z-[-1] h-8 w-full rounded-lg opacity-0 transition-all contain-strict group-hover:transform-none group-hover:opacity-100 group-hover:[transform-origin:50%_50%_0px]"},null,-1))]),_:3,__:[0]},8,["to"])]))}},ae={class:"fixed left-0 top-0 hidden w-[223px] space-y-4 bg-white px-4 py-8 sm:top-[64px] sm:block"},B=i({__name:"AppSidebar",setup(t){const o=e.inject("APP_DATA"),{isSidebarToggled:r,toggleSidebar:l}=o;return(n,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("aside",ae,[e.renderSlot(n.$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(r)?"transform: translateZ(0)":"transform: translate3d(0,60svh,0)")},[e.renderSlot(n.$slots,"default",{},void 0,!0)],4),e.createElementVNode("div",{onClick:s[0]||(s[0]=c=>e.unref(l)()),class:e.normalizeClass(["backdrop backdrop-blur-[0.50px] transition-all duration-300 [transition-behavior:allow-discrete]",e.unref(r)?"fixed inset-0 z-40 block bg-black/80 opacity-100":"hidden"])},null,2)]))],64))}},[["__scopeId","data-v-aaece1c7"]]),se={class:"flex flex-col"},C={__name:"AppSidebarItem",setup(t){p.useRoute();const o=e.ref(!1);function r(){o.value=!o.value}return e.provide("SIDEBAR_TOGGLE",{toggled:o,toggleSidebarItem:r}),(l,n)=>(e.openBlock(),e.createElementBlock("div",se,[e.renderSlot(l.$slots,"default")]))}},ce=["to"],w={__name:"AppSidebarItemChild",props:{to:{type:String,required:!0}},setup(t){const o=t;return(r,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(r.$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(r.$slots,"default")],8,ce))}},S={__name:"AppSidebarItemChildren",setup(t){const o=e.inject("SIDEBAR_TOGGLE"),{toggled:r}=o;return(l,n)=>(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(r)}])},[e.renderSlot(l.$slots,"default")],2))}},ie={class:"link 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"},de=["href"],$=i({__name:"AppSidebarItemParent",props:{to:{type:String,required:!0},name:{type:[String,Object]},hasChildren:{type:Boolean,default:!1}},setup(t){const o=p.useRoute(),r=t,l=e.inject("SIDEBAR_TOGGLE"),n=e.inject("APP_DATA"),{toggled:s,toggleSidebarItem:c}=l,{toggleSidebar:g}=n;function Y(){o.matched.some(d=>r.name===d.name)?s.value=!0:s.value=!1}return e.watch(o,()=>Y(),{immediate:!0}),(f,d)=>(e.openBlock(),e.createElementBlock("div",ie,[r.to.startsWith("/")?(e.openBlock(),e.createBlock(e.unref(p.RouterLink),{key:0,onClick:d[0]||(d[0]=Le=>e.unref(g)()),class:"[&.router-link-active]:text-primary-800 text-primary-950 peer flex h-full w-full items-center gap-3 text-xs [&.router-link-active]:font-medium",to:r.to},{default:e.withCtx(()=>[e.renderSlot(f.$slots,"default",{},void 0,!0)]),_: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:r.to},[e.renderSlot(f.$slots,"default",{},void 0,!0)],8,de)),r.hasChildren?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:d[1]||(d[1]=Le=>e.unref(c)()),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-800 transition-all duration-300",{"rotate-180":e.unref(s)}])},d[2]||(d[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)]),2))])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-28fee03d"]]),pe={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(r,l)=>{const n=e.resolveComponent("RouterLink");return e.openBlock(),e.createElementBlock("div",pe,[e.createVNode(n,{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(r.$slots,"default")]),_:3}),e.createElementVNode("button",{onClick:l[0]||(l[0]=s=>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)]))])}}},me={},ue={key:0,class:"text-primary-950 px-1 text-sm font-medium"},ge={class:"mt-2"};function fe(t,o){return e.openBlock(),e.createElementBlock("nav",null,[t.$slots.title?(e.openBlock(),e.createElementBlock("b",ue,[e.renderSlot(t.$slots,"title")])):e.createCommentVNode("",!0),e.createElementVNode("div",ge,[e.renderSlot(t.$slots,"items")])])}const E=i(me,[["render",fe]]),be={},he={class:"rounded-full px-3 py-1 text-xs font-medium"};function ke(t,o){return e.openBlock(),e.createElementBlock("div",he,[e.renderSlot(t.$slots,"default")])}const T=i(be,[["render",ke]]),V={__name:"Button",props:{variant:{type:String,default:"primary"}},setup(t){const o=t,r={primary:{backgroundColor:"bg-gradient-to-br from-brand-primary-500 to-brand-primary-700",textColor:"text-white",hoverBackgroundColor:"hover:from-brand-primary-700 hover:to-brand-primary-800",focusRing:"focus:ring-brand-primary-300"},secondary:{backgroundColor:"bg-neutral-100",textColor:"text-neutral-700",hoverBackgroundColor:"hover:bg-neutral-200",focusRing:"focus:ring-neutral-300"},success:{backgroundColor:"bg-success-400",textColor:"text-white",hoverBackgroundColor:"hover:bg-success-500",focusRing:"focus:ring-success-300"},danger:{backgroundColor:"bg-danger-600",textColor:"text-white",hoverBackgroundColor:"hover:bg-danger-700",focusRing:"focus:ring-danger-300"},warning:{backgroundColor:"bg-warning-500",textColor:"text-neutral-950",hoverBackgroundColor:"hover:bg-warning-600",focusRing:"focus:ring-warning-300"},outlined:{backgroundColor:"bg-transparent",textColor:"text-neutral-700",borderColor:"border border-neutral-200",hoverBackgroundColor:"hover:bg-neutral-100",hoverTextColor:"hover:text-neutral-900",focusRing:"focus:ring-neutral-200"},outlinedPrimary:{backgroundColor:"bg-transparent",textColor:"text-brand-primary-700",borderColor:"border border-brand-primary-300",hoverBackgroundColor:"hover:bg-brand-primary-100",hoverTextColor:"hover:text-brand-primary-800",focusRing:"focus:ring-brand-primary-200"},outlinedSuccess:{backgroundColor:"bg-transparent",textColor:"text-success-600",borderColor:"border border-success-300",hoverBackgroundColor:"hover:bg-success-100",hoverTextColor:"hover:text-success-700",focusRing:"focus:ring-success-200"},outlinedDanger:{backgroundColor:"bg-transparent",textColor:"text-danger-600",borderColor:"border border-danger-300",hoverBackgroundColor:"hover:bg-danger-100",hoverTextColor:"hover:text-danger-700",focusRing:"focus:ring-danger-200"},outlinedWarning:{backgroundColor:"bg-transparent",textColor:"text-warning-600",borderColor:"border border-warning-300",hoverBackgroundColor:"hover:bg-warning-100",hoverTextColor:"hover:text-warning-700",focusRing:"focus:ring-warning-200"},ghost:{backgroundColor:"bg-transparent",textColor:"text-neutral-700",hoverBackgroundColor:"hover:bg-neutral-100",hoverTextColor:"hover:text-neutral-900",focusRing:"focus:ring-neutral-200"},ghostPrimary:{backgroundColor:"bg-transparent",textColor:"text-brand-primary-700",hoverBackgroundColor:"hover:bg-brand-primary-100",hoverTextColor:"hover:text-brand-primary-800",focusRing:"focus:ring-brand-primary-200"},ghostSuccess:{backgroundColor:"bg-transparent",textColor:"text-success-600",hoverBackgroundColor:"hover:bg-success-100",hoverTextColor:"hover:text-success-700",focusRing:"focus:ring-success-200"},ghostDanger:{backgroundColor:"bg-transparent",textColor:"text-danger-600",hoverBackgroundColor:"hover:bg-danger-100",hoverTextColor:"hover:text-danger-700",focusRing:"focus:ring-danger-200"},ghostWarning:{backgroundColor:"bg-transparent",textColor:"text-warning-600",hoverBackgroundColor:"hover:bg-warning-100",hoverTextColor:"hover:text-warning-700",focusRing:"focus:ring-warning-200"}};return(l,n)=>(e.openBlock(),e.createElementBlock("button",e.mergeProps(l.$attrs,{class:["cursor-pointer rounded-lg px-4 py-2 text-xs transition-all active:scale-[0.97] disabled:cursor-not-allowed disabled:opacity-50 disabled:active:scale-100",[r[o.variant].backgroundColor,r[o.variant].borderColor,r[o.variant].textColor,r[o.variant].hoverBackgroundColor,r[o.variant].hoverTextColor,r[o.variant].focusRing]]}),[e.renderSlot(l.$slots,"default")],16))}},_e={},xe={class:"rounded-2xl bg-white p-6"};function ye(t,o){return e.openBlock(),e.createElementBlock("div",xe,[e.renderSlot(t.$slots,"default")])}const m=i(_e,[["render",ye]]),I={__name:"Checkbox",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue"),r=e.ref(null);return(l,n)=>(e.openBlock(),e.createElementBlock("button",{onClick:n[1]||(n[1]=s=>r.value.click()),class:"group/checkbox has-checked:bg-brand-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-sm bg-neutral-200 transition-all duration-300 active:scale-[0.50]"},[n[2]||(n[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 scale-0 stroke-white opacity-0 group-has-[:checked]/checkbox:scale-100 group-has-[:checked]/checkbox:opacity-100"},[e.createElementVNode("path",{d:"M20 6 9 17l-5-5"})],-1)),e.withDirectives(e.createElementVNode("input",e.mergeProps(l.$attrs,{"onUpdate:modelValue":n[0]||(n[0]=s=>o.value=s),type:"checkbox",ref_key:"checkboxRef",ref:r,hidden:""}),null,16),[[e.vModelCheckbox,o.value]])]))}},N={__name:"Dialog",setup(t){const o=e.ref(!1);function r(){o.value=!o.value}return e.provide("DIALOG_META",{toggled:o,toggleDialog:r}),(l,n)=>e.renderSlot(l.$slots,"default")}},Be={class:"pointer-events-auto fixed inset-0 z-[500] min-h-screen bg-black/80 backdrop-blur-[2px]"},u={__name:"DialogBackground",setup(t){return e.onMounted(()=>{document.querySelector("body").classList.add("overflow-hidden")}),e.onUnmounted(()=>{document.querySelector("body").classList.remove("overflow-hidden")}),(o,r)=>(e.openBlock(),e.createElementBlock("div",Be,[e.renderSlot(o.$slots,"default")]))}},D={__name:"DialogContent",props:{class:{type:String}},setup(t){const o=t,{toggled:r,toggleDialog:l}=e.inject("DIALOG_META");return(n,s)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"fade-in"},{default:e.withCtx(()=>[e.unref(r)?(e.openBlock(),e.createBlock(u,{key:0,onClick:s[0]||(s[0]=c=>e.unref(l)())})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.Transition,{name:"fade-in-dialog"},{default:e.withCtx(()=>[e.unref(r)?(e.openBlock(),e.createBlock(m,{key:0,class:e.normalizeClass(["fixed left-1/2 top-1/2 z-[600] -translate-x-1/2 -translate-y-1/2 rounded-xl bg-white transition-all",o.class])},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},8,["class"])):e.createCommentVNode("",!0)]),_:3})]))}},R={__name:"DialogToggle",setup(t){const o=e.useSlots(),{toggleDialog:r}=e.inject("DIALOG_META");return(l,n)=>{var s,c;return e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.cloneVNode((c=(s=e.unref(o)).default)==null?void 0:c.call(s)[0],{onClick:e.unref(r)})))}}},L={__name:"Input",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue");return(r,l)=>e.withDirectives((e.openBlock(),e.createElementBlock("input",{"onUpdate:modelValue":l[0]||(l[0]=n=>o.value=n),class:"text-primary-950 focus:ring-brand-primary-700 neutral-400:text-neutral-400 rounded-lg border-[1px] border-neutral-200 bg-white px-3 py-2 text-xs transition-all duration-300 outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"},null,512)),[[e.vModelText,o.value]])}},Ce={};function we(t,o){return e.openBlock(),e.createElementBlock("label",e.mergeProps(t.$attrs,{class:"text-primary-950 text-sm transition-all"}),[e.renderSlot(t.$slots,"default")],16)}const M=i(Ce,[["render",we]]),P={__name:"Radio",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue"),r=e.ref(null);return(l,n)=>(e.openBlock(),e.createElementBlock("button",{onClick:n[1]||(n[1]=s=>r.value.click()),class:"group/radio has-checked:border-brand-primary-700 flex size-4 cursor-pointer items-center justify-center rounded-full border-[1px] border-transparent bg-neutral-100 duration-300 active:scale-[0.80] has-checked:bg-white"},[n[2]||(n[2]=e.createElementVNode("div",{class:"group-has-checked/radio:bg-brand-primary-700 size-[10px] rounded-full opacity-0 transition-all group-has-checked/radio:opacity-100"},null,-1)),e.withDirectives(e.createElementVNode("input",e.mergeProps(l.$attrs,{"onUpdate:modelValue":n[0]||(n[0]=s=>o.value=s),type:"radio",ref_key:"radioRef",ref:r,hidden:""}),null,16),[[e.vModelRadio,o.value]])]))}},Se="bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1YjYxNmUiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0ibHVjaWRlIGx1Y2lkZS1jaGV2cm9uLWRvd24iPjxwYXRoIGQ9Im02IDkgNiA2IDYtNiIvPjwvc3ZnPg==')]",j={__name:"Select",props:{modelValue:{},modelModifiers:{}},emits:["update:modelValue"],setup(t){const o=e.useModel(t,"modelValue");return(r,l)=>e.withDirectives((e.openBlock(),e.createElementBlock("select",e.mergeProps(r.$attrs,{"onUpdate:modelValue":l[0]||(l[0]=n=>o.value=n),class:["text-primary-950 focus:ring-brand-primary-700 appearance-none rounded-lg border-[1px] border-neutral-200 bg-white bg-[length:16px] bg-[right_12px_center] bg-no-repeat px-3 py-2 text-xs transition-all outline-none focus:ring-2 focus:ring-offset-2",Se]}),[e.renderSlot(r.$slots,"default")],16)),[[e.vModelSelect,o.value]])}},z={__name:"Sheet",setup(t){const o=e.ref(!1);function r(){o.value=!o.value}return e.provide("SHEET_META",{toggled:o,toggleSheet:r}),(l,n)=>e.renderSlot(l.$slots,"default")}},G={__name:"SheetContent",props:{class:{type:String}},setup(t){const o=t,{toggled:r,toggleSheet:l}=e.inject("SHEET_META");return(n,s)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"fade-in"},{default:e.withCtx(()=>[e.unref(r)?(e.openBlock(),e.createBlock(u,{key:0,onClick:s[0]||(s[0]=c=>e.unref(l)())})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[e.unref(r)?(e.openBlock(),e.createBlock(m,{key:0,class:e.normalizeClass(["fixed right-0 top-1/2 z-[600] h-full w-3/4 -translate-y-1/2 rounded-e-none bg-white transition-all md:right-[1rem] md:h-[calc(100dvh-2rem)] md:w-96 md:rounded-xl",o.class])},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},8,["class"])):e.createCommentVNode("",!0)]),_:3})]))}},H={__name:"SheetToggle",setup(t){const o=e.useSlots(),{toggleSheet:r}=e.inject("SHEET_META");return(l,n)=>{var s,c;return e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.cloneVNode((c=(s=e.unref(o)).default)==null?void 0:c.call(s)[0],{onClick:e.unref(r)})))}}},$e={},Ae={class:"bg-primary-100 animate-pulse rounded-lg"};function Ee(t,o){return e.openBlock(),e.createElementBlock("div",Ae)}const W=i($e,[["render",Ee]]),q={__name:"Switch",setup(t){const o=e.ref(!1);function r(){o.value=!o.value}return(l,n)=>(e.openBlock(),e.createElementBlock("button",{onClick:n[0]||(n[0]=s=>r()),class:e.normalizeClass(["h-5 w-9 cursor-pointer rounded-full p-0.5 transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-50",o.value?"from-brand-primary-600 to-brand-primary-700 bg-gradient-to-br":"bg-neutral-200"]),role:"switch",type:"button"},[e.createElementVNode("span",{class:e.normalizeClass(["pointer-events-none block size-4 rounded-full bg-white shadow-md transition-all duration-300",{"translate-x-full":o.value}])},null,2)],2))}},Te={class:"w-full"},Ve={class:"h-16"},Ie={key:0},Ne={key:0,class:"pe-4"},O={__name:"Table",props:{columns:{type:Array,required:!0},data:{type:Array,required:!0}},setup(t){const o=t;return(r,l)=>(e.openBlock(),e.createElementBlock("table",Te,[e.createElementVNode("thead",null,[e.createElementVNode("tr",Ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.columns,n=>(e.openBlock(),e.createElementBlock("th",{key:n.key,class:"text-xs font-medium text-neutral-600 first-of-type:ps-4"},e.toDisplayString(n.label),1))),128)),r.$slots.actions?(e.openBlock(),e.createElementBlock("th",Ie)):e.createCommentVNode("",!0)])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.data,(n,s)=>(e.openBlock(),e.createElementBlock("tr",{key:s,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,c=>(e.openBlock(),e.createElementBlock("td",{key:c.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(r.$slots,c.key,{row:n},()=>[e.createTextVNode(e.toDisplayString(n[c.key]),1)])]))),128)),r.$slots.actions?(e.openBlock(),e.createElementBlock("td",Ne,[e.renderSlot(r.$slots,"actions",{row:n})])):e.createCommentVNode("",!0)]))),128))])]))}},De={class:"overflow-x-scroll rounded-xl bg-neutral-100/50 p-1 [&::-webkit-scrollbar]:hidden"},U={__name:"Tabs",props:{default:{default:null}},setup(t){const o=t,r=e.ref(o.default);function l(n){r.value=n}return e.provide("TAB_DATA",{currentValue:r,setCurrentValue:l}),(n,s)=>(e.openBlock(),e.createElementBlock("div",De,[e.renderSlot(n.$slots,"default")]))}},Z=i({__name:"TabItem",props:{value:{required:!0}},setup(t){const o=t,r=e.inject("TAB_DATA"),{currentValue:l,setCurrentValue:n}=r,s=e.computed(()=>l.value===o.value?["bg-white","font-medium","text-primary-700","shadow-xl","tab-active"]:"text-neutral-600");return(c,g)=>(e.openBlock(),e.createElementBlock("button",{onClick:g[0]||(g[0]=Y=>e.unref(n)(o.value)),class:e.normalizeClass(["tab h-8 cursor-pointer rounded-lg px-3 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",s.value])},[e.renderSlot(c.$slots,"default",{},void 0,!0)],2))}},[["__scopeId","data-v-9e06f71f"]]),J={__name:"TextArea",props:["modelValue"],setup(t){const o=t,r=e.ref(o.modelValue);return(l,n)=>e.withDirectives((e.openBlock(),e.createElementBlock("textarea",e.mergeProps({onInput:n[0]||(n[0]=s=>l.$emit("update:modelValue",s.target.value))},l.$attrs,{"onUpdate:modelValue":n[1]||(n[1]=s=>r.value=s),class:"text-primary-950 neutral-400:text-neutral-400 focus:ring-brand-primary-700 rounded-lg border-[1px] border-neutral-200 px-3 py-2 text-xs transition-all outline-none focus:ring-2 focus:ring-offset-2"}),null,16)),[[e.vModelText,r.value]])}},Re={install(t){t.component("AppHeader",b),t.component("AppHeaderLink",h),t.component("AppLayout",k),t.component("AppMain",_),t.component("AppNavTabs",x),t.component("AppNavTab",y),t.component("AppSidebar",B),t.component("AppSidebarItem",C),t.component("AppSidebarItemChild",w),t.component("AppSidebarItemChildren",S),t.component("AppSidebarItemParent",$),t.component("AppSidebarToggle",A),t.component("AppSidebarNavSection",E),t.component("Badge",T),t.component("Button",V),t.component("Checkbox",I),t.component("Card",m),t.component("Dialog",N),t.component("DialogContent",D),t.component("DialogToggle",R),t.component("DialogBackground",u),t.component("Input",L),t.component("Label",M),t.component("Radio",P),t.component("Select",j),t.component("Sheet",z),t.component("SheetContent",G),t.component("SheetToggle",H),t.component("SkeletonLoader",W),t.component("Switch",q),t.component("Table",O),t.component("Tabs",U),t.component("TabItem",Z),t.component("TextArea",J)}};a.AppHeader=b,a.AppHeaderLink=h,a.AppLayout=k,a.AppMain=_,a.AppNavTab=y,a.AppNavTabs=x,a.AppSidebar=B,a.AppSidebarItem=C,a.AppSidebarItemChild=w,a.AppSidebarItemChildren=S,a.AppSidebarItemParent=$,a.AppSidebarNavSection=E,a.AppSidebarToggle=A,a.Badge=T,a.Button=V,a.Card=m,a.Checkbox=I,a.Dialog=N,a.DialogBackground=u,a.DialogContent=D,a.DialogToggle=R,a.Input=L,a.Label=M,a.Radio=P,a.Select=j,a.Sheet=z,a.SheetContent=G,a.SheetToggle=H,a.SkeletonLoader=W,a.Switch=q,a.TabItem=Z,a.Table=O,a.Tabs=U,a.TextArea=J,a.default=Re,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrubbed-tailwind-components-v2",
3
- "version": "2.0.4",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/scrubbed-tailwind-components-v2.umd.js",
@@ -26,7 +26,10 @@
26
26
  "test:unit:dev": "cypress open --component",
27
27
  "format": "prettier --write src/"
28
28
  },
29
- "dependencies": {},
29
+ "dependencies": {
30
+ "@tailwindcss/vite": "^4.1.14",
31
+ "tailwindcss": "^4.1.14"
32
+ },
30
33
  "peerDependencies": {
31
34
  "vue": "^3.5.13",
32
35
  "vue-router": "^4.5.0"