@prosync_solutions/ui 0.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.
Files changed (79) hide show
  1. package/README.docx +0 -0
  2. package/README.md +129 -0
  3. package/dist/chunks/ProSidebarItem-CNJJi_zd.js +4 -0
  4. package/dist/chunks/ProSidebarItem-W3KGbpUN.js +1 -0
  5. package/dist/chunks/ProSpinner.vue_vue_type_script_setup_true_lang-C3WfTGch.js +661 -0
  6. package/dist/chunks/ProSpinner.vue_vue_type_script_setup_true_lang-g-x6G5qO.js +1 -0
  7. package/dist/components/ProAvatar/ProAvatar.vue.d.ts +14 -0
  8. package/dist/components/ProAvatar/index.d.ts +1 -0
  9. package/dist/components/ProBanner/ProBanner.vue.d.ts +40 -0
  10. package/dist/components/ProBanner/index.d.ts +1 -0
  11. package/dist/components/ProBreadcrumbs/ProBreadcrumbs.vue.d.ts +10 -0
  12. package/dist/components/ProBreadcrumbs/index.d.ts +1 -0
  13. package/dist/components/ProButton/ProButton.vue.d.ts +32 -0
  14. package/dist/components/ProButton/index.d.ts +1 -0
  15. package/dist/components/ProCard/ProCard.vue.d.ts +25 -0
  16. package/dist/components/ProCard/index.d.ts +1 -0
  17. package/dist/components/ProDivider/ProDivider.vue.d.ts +20 -0
  18. package/dist/components/ProDivider/index.d.ts +1 -0
  19. package/dist/components/ProDrawer/ProDrawer.vue.d.ts +33 -0
  20. package/dist/components/ProDrawer/index.d.ts +1 -0
  21. package/dist/components/ProEmpty/ProEmpty.vue.d.ts +25 -0
  22. package/dist/components/ProEmpty/index.d.ts +1 -0
  23. package/dist/components/ProFormField/ProFormField.vue.d.ts +19 -0
  24. package/dist/components/ProFormField/index.d.ts +1 -0
  25. package/dist/components/ProInput/ProInput.vue.d.ts +31 -0
  26. package/dist/components/ProInput/index.d.ts +1 -0
  27. package/dist/components/ProMenu/ProMenu.vue.d.ts +44 -0
  28. package/dist/components/ProMenu/index.d.ts +1 -0
  29. package/dist/components/ProModal/ProModal.vue.d.ts +33 -0
  30. package/dist/components/ProModal/index.d.ts +1 -0
  31. package/dist/components/ProPageHeader/ProPageHeader.vue.d.ts +26 -0
  32. package/dist/components/ProPageHeader/index.d.ts +1 -0
  33. package/dist/components/ProPagination/ProPagination.vue.d.ts +13 -0
  34. package/dist/components/ProPagination/index.d.ts +1 -0
  35. package/dist/components/ProSelect/ProSelect.vue.d.ts +22 -0
  36. package/dist/components/ProSelect/index.d.ts +1 -0
  37. package/dist/components/ProSidebar/ProSidebar.vue.d.ts +33 -0
  38. package/dist/components/ProSidebar/index.d.ts +1 -0
  39. package/dist/components/ProSidebarItem/ProSidebarItem.vue.d.ts +7 -0
  40. package/dist/components/ProSidebarItem/index.d.ts +1 -0
  41. package/dist/components/ProSkeleton/ProSkeleton.vue.d.ts +22 -0
  42. package/dist/components/ProSkeleton/index.d.ts +1 -0
  43. package/dist/components/ProSpinner/ProSpinner.vue.d.ts +10 -0
  44. package/dist/components/ProSpinner/index.d.ts +1 -0
  45. package/dist/components/ProStatisticCard/ProStatisticCard.vue.d.ts +17 -0
  46. package/dist/components/ProStatisticCard/index.d.ts +1 -0
  47. package/dist/components/ProStatusBadge/ProStatusBadge.vue.d.ts +6 -0
  48. package/dist/components/ProStatusBadge/index.d.ts +1 -0
  49. package/dist/components/ProTable/ProTable.vue.d.ts +19 -0
  50. package/dist/components/ProTable/index.d.ts +1 -0
  51. package/dist/components/ProTableCell/ProTableCell.vue.d.ts +16 -0
  52. package/dist/components/ProTableCell/index.d.ts +1 -0
  53. package/dist/components/ProTableRow/ProTableRow.vue.d.ts +29 -0
  54. package/dist/components/ProTableRow/index.d.ts +1 -0
  55. package/dist/components/ProTabs/ProTabs.vue.d.ts +27 -0
  56. package/dist/components/ProTabs/index.d.ts +1 -0
  57. package/dist/components/ProTag/ProTag.vue.d.ts +28 -0
  58. package/dist/components/ProTag/index.d.ts +1 -0
  59. package/dist/components/ProTextarea/ProTextarea.vue.d.ts +21 -0
  60. package/dist/components/ProTextarea/index.d.ts +1 -0
  61. package/dist/components/ProToast/ProToast.vue.d.ts +18 -0
  62. package/dist/components/ProToast/index.d.ts +1 -0
  63. package/dist/components/ProTooltip/ProTooltip.vue.d.ts +21 -0
  64. package/dist/components/ProTooltip/index.d.ts +1 -0
  65. package/dist/components/ProTopbar/ProTopbar.vue.d.ts +27 -0
  66. package/dist/components/ProTopbar/index.d.ts +1 -0
  67. package/dist/components/index.d.ts +30 -0
  68. package/dist/components/tier1/index.d.ts +12 -0
  69. package/dist/index.d.ts +6 -0
  70. package/dist/prosync-ui-tier1.js +36 -0
  71. package/dist/prosync-ui-tier1.umd.cjs +1 -0
  72. package/dist/prosync-ui.js +1034 -0
  73. package/dist/prosync-ui.umd.cjs +1 -0
  74. package/dist/tier1.d.ts +17 -0
  75. package/dist/types/index.d.ts +62 -0
  76. package/dist/ui.css +1 -0
  77. package/package.json +75 -0
  78. package/src/styles/tokens-tier1.css +80 -0
  79. package/src/styles/tokens.json +673 -0
@@ -0,0 +1,1034 @@
1
+ import { _ as j, a as K, b as L, c as W, d as q, e as G, f as X, g as J, h as Q, i as Y, j as ee, k as te, P as se } from "./chunks/ProSpinner.vue_vue_type_script_setup_true_lang-C3WfTGch.js";
2
+ import { defineComponent as y, openBlock as t, createElementBlock as o, normalizeStyle as A, normalizeClass as m, createElementVNode as l, Fragment as _, renderList as z, createTextVNode as V, toDisplayString as d, createBlock as x, resolveDynamicComponent as P, createCommentVNode as u, renderSlot as f, ref as B, createVNode as w, withCtx as k, unref as v, useSlots as ae, computed as g, withAsyncContext as oe, mergeProps as M, onMounted as I, onUnmounted as re, Transition as E, defineAsyncComponent as le, resolveComponent as ne, watch as ie, withModifiers as ce } from "vue";
3
+ import { PhCaretDown as H, PhCaretRight as T, PhSparkle as de, PhInfo as ue, PhWarningCircle as fe, PhWarning as be, PhCheckCircle as me, PhX as O, PhArrowLeft as he, PhPlus as xe, PhCaretLeft as R, PhEmpty as ge } from "@phosphor-icons/vue";
4
+ const pe = { class: "w-full" }, ve = { class: "bg-surface-gray-bg" }, ye = { class: "flex items-center gap-1" }, Ce = { class: "divide-y divide-border-border [&>tr:last-child]:border-b-0" }, $e = /* @__PURE__ */ y({
5
+ __name: "ProTable",
6
+ props: {
7
+ columns: {},
8
+ bordered: { type: Boolean, default: !0 }
9
+ },
10
+ setup(e) {
11
+ return (a, r) => (t(), o("div", {
12
+ class: m([
13
+ "overflow-x-auto",
14
+ e.bordered ? "bg-surface-sub-bg border border-border-border" : ""
15
+ ]),
16
+ style: A(e.bordered ? "border-radius: 12px" : "")
17
+ }, [
18
+ l("table", pe, [
19
+ l("thead", null, [
20
+ l("tr", ve, [
21
+ (t(!0), o(_, null, z(e.columns, (s) => (t(), o("th", {
22
+ key: s.key,
23
+ class: "px-4 py-2.5 text-left text-body text-body-sm-bold"
24
+ }, [
25
+ l("div", ye, [
26
+ V(d(s.label) + " ", 1),
27
+ s.headerIcon ? (t(), x(P(s.headerIcon), {
28
+ key: 0,
29
+ size: 14,
30
+ class: "text-icon-info",
31
+ weight: "fill"
32
+ })) : u("", !0)
33
+ ])
34
+ ]))), 128))
35
+ ])
36
+ ]),
37
+ l("tbody", Ce, [
38
+ f(a.$slots, "default")
39
+ ])
40
+ ])
41
+ ], 6));
42
+ }
43
+ }), we = { class: "px-4 py-2.5 text-left" }, ke = {
44
+ key: 0,
45
+ class: "flex flex-col"
46
+ }, Pe = { class: "text-body-sm-bold text-text-body" }, _e = { class: "text-body-sm text-text-subtitle" }, Ve = {
47
+ key: 1,
48
+ class: "text-body-sm text-text-body"
49
+ }, D = /* @__PURE__ */ y({
50
+ __name: "ProTableCell",
51
+ props: {
52
+ text: {},
53
+ subtitle: {}
54
+ },
55
+ setup(e) {
56
+ return (a, r) => (t(), o("td", we, [
57
+ e.subtitle ? (t(), o("div", ke, [
58
+ l("span", Pe, d(e.text), 1),
59
+ l("span", _e, d(e.subtitle), 1)
60
+ ])) : e.text ? (t(), o("span", Ve, d(e.text), 1)) : f(a.$slots, "default", { key: 2 })
61
+ ]));
62
+ }
63
+ }), Se = { class: "flex items-center space-x-2" }, ze = {
64
+ type: "button",
65
+ class: "p-1 hover:bg-surface-gray-bg rounded transition-colors"
66
+ }, Be = {
67
+ key: 0,
68
+ class: "bg-surface-main-bg"
69
+ }, Ee = ["colspan"], Te = { key: 1 }, je = /* @__PURE__ */ y({
70
+ __name: "ProTableRow",
71
+ props: {
72
+ expandable: { type: Boolean, default: !1 },
73
+ defaultExpanded: { type: Boolean, default: !1 },
74
+ columnCount: { default: 4 }
75
+ },
76
+ setup(e) {
77
+ const a = e, r = B(a.defaultExpanded);
78
+ function s() {
79
+ a.expandable && (r.value = !r.value);
80
+ }
81
+ return (n, i) => e.expandable ? (t(), o(_, { key: 0 }, [
82
+ l("tr", {
83
+ class: m(r.value ? "bg-surface-main-bg" : ""),
84
+ onClick: s
85
+ }, [
86
+ w(D, null, {
87
+ default: k(() => [
88
+ l("div", Se, [
89
+ l("button", ze, [
90
+ r.value ? (t(), x(v(H), {
91
+ key: 0,
92
+ size: 16,
93
+ class: "text-icon-default"
94
+ })) : (t(), x(v(T), {
95
+ key: 1,
96
+ size: 16,
97
+ class: "text-icon-default"
98
+ }))
99
+ ]),
100
+ f(n.$slots, "first-cell")
101
+ ])
102
+ ]),
103
+ _: 3
104
+ }),
105
+ f(n.$slots, "default")
106
+ ], 2),
107
+ r.value ? (t(), o("tr", Be, [
108
+ l("td", {
109
+ colspan: e.columnCount,
110
+ class: "p-6 border-b border-border-border"
111
+ }, [
112
+ f(n.$slots, "expanded")
113
+ ], 8, Ee)
114
+ ])) : u("", !0)
115
+ ], 64)) : (t(), o("tr", Te, [
116
+ f(n.$slots, "first-cell"),
117
+ f(n.$slots, "default")
118
+ ]));
119
+ }
120
+ }), He = {
121
+ key: 0,
122
+ class: "shrink-0 self-center"
123
+ }, Le = /* @__PURE__ */ y({
124
+ __name: "ProBanner",
125
+ props: {
126
+ variant: { default: "default" },
127
+ title: { default: "" },
128
+ subtitle: { default: "" },
129
+ showAction: { type: Boolean, default: !1 },
130
+ actionLabel: { default: "Action" },
131
+ showClose: { type: Boolean, default: !1 }
132
+ },
133
+ emits: ["close", "action"],
134
+ setup(e) {
135
+ const a = e, r = ae(), s = g(() => !!a.title || !!r.title), n = g(() => !!a.subtitle || !!r.default), i = g(() => s.value && n.value), c = g(() => {
136
+ switch (a.variant) {
137
+ case "success":
138
+ return me;
139
+ case "warn":
140
+ return be;
141
+ case "error":
142
+ return fe;
143
+ case "info":
144
+ return ue;
145
+ default:
146
+ return de;
147
+ }
148
+ }), b = {
149
+ default: "bg-surface-gray-bg border-border-border",
150
+ info: "bg-surface-info border-border-info",
151
+ success: "bg-surface-success border-border-success",
152
+ warn: "bg-surface-warn border-border-warn",
153
+ error: "bg-surface-error border-border-error"
154
+ }, h = {
155
+ default: "text-icon-default",
156
+ info: "text-text-info",
157
+ success: "text-text-success",
158
+ warn: "text-text-warn",
159
+ error: "text-text-error"
160
+ }, p = {
161
+ default: "text-text-body",
162
+ info: "text-text-info",
163
+ success: "text-text-success",
164
+ warn: "text-text-warn",
165
+ error: "text-text-error"
166
+ }, $ = {
167
+ default: "text-icon-default hover:bg-black/5",
168
+ info: "text-text-info hover:bg-black/5",
169
+ success: "text-text-success hover:bg-black/5",
170
+ warn: "text-text-warn hover:bg-black/5",
171
+ error: "text-text-error hover:bg-black/5"
172
+ };
173
+ return (C, S) => (t(), o("div", {
174
+ class: m([
175
+ "flex gap-4 px-4 py-3 rounded-card border transition-colors relative text-left",
176
+ i.value ? "items-start" : "items-center",
177
+ b[e.variant]
178
+ ]),
179
+ role: "alert"
180
+ }, [
181
+ l("div", {
182
+ class: m([
183
+ "flex items-center justify-center shrink-0 w-9 h-9 rounded-lg",
184
+ h[e.variant]
185
+ ])
186
+ }, [
187
+ f(C.$slots, "icon", {}, () => [
188
+ (t(), x(P(c.value), {
189
+ size: 20,
190
+ weight: e.variant === "default" ? "regular" : "light"
191
+ }, null, 8, ["weight"]))
192
+ ])
193
+ ], 2),
194
+ l("div", {
195
+ class: m(["flex-1 min-w-0", i.value ? "pt-0.5" : ""])
196
+ }, [
197
+ s.value ? (t(), o("div", {
198
+ key: 0,
199
+ class: m(["text-body-sm-bold mb-0.5 text-left", p[e.variant]])
200
+ }, [
201
+ f(C.$slots, "title", {}, () => [
202
+ V(d(e.title), 1)
203
+ ])
204
+ ], 2)) : u("", !0),
205
+ n.value ? (t(), o("div", {
206
+ key: 1,
207
+ class: m(["text-body-sm text-left", p[e.variant]])
208
+ }, [
209
+ f(C.$slots, "default", {}, () => [
210
+ V(d(e.subtitle), 1)
211
+ ])
212
+ ], 2)) : u("", !0)
213
+ ], 2),
214
+ e.showAction || C.$slots.action ? (t(), o("div", He, [
215
+ f(C.$slots, "action", {}, () => [
216
+ e.showAction ? (t(), o("button", {
217
+ key: 0,
218
+ onClick: S[0] || (S[0] = (U) => C.$emit("action")),
219
+ class: "px-3 py-1.5 text-body-sm-bold text-text-heading bg-surface-gray-bg hover:bg-surface-gray-bg/80 border border-border-border rounded-md shadow-xs transition-colors"
220
+ }, d(e.actionLabel), 1)) : u("", !0)
221
+ ])
222
+ ])) : u("", !0),
223
+ e.showClose ? (t(), o("button", {
224
+ key: 1,
225
+ onClick: S[1] || (S[1] = (U) => C.$emit("close")),
226
+ class: m([
227
+ "shrink-0 p-1.5 rounded-md transition-colors -mr-1",
228
+ i.value ? "-mt-1" : "",
229
+ $[e.variant]
230
+ ]),
231
+ "aria-label": "Close"
232
+ }, [
233
+ w(v(O), { size: 16 })
234
+ ], 2)) : u("", !0)
235
+ ], 2));
236
+ }
237
+ }), Ae = {
238
+ "aria-label": "Breadcrumb",
239
+ class: "flex items-center gap-4"
240
+ }, Me = { class: "flex items-center gap-2 flex-wrap" }, Ie = {
241
+ key: 0,
242
+ class: "flex items-center text-text-subsubtitle",
243
+ "aria-hidden": "true"
244
+ }, Oe = {
245
+ key: 0,
246
+ class: "text-body-sm-bold text-text-body whitespace-nowrap",
247
+ "aria-current": "page"
248
+ }, N = /* @__PURE__ */ y({
249
+ __name: "ProBreadcrumbs",
250
+ props: {
251
+ items: {}
252
+ },
253
+ emits: ["back"],
254
+ async setup(e, { emit: a }) {
255
+ let r, s;
256
+ const n = a;
257
+ let i = null;
258
+ try {
259
+ i = ([r, s] = oe(() => import("vue-router")), r = await r, s(), r);
260
+ } catch {
261
+ }
262
+ const c = g(() => i != null && i.RouterLink ? i.RouterLink : "a");
263
+ function b() {
264
+ if (i)
265
+ try {
266
+ i.useRouter().back();
267
+ return;
268
+ } catch {
269
+ }
270
+ n("back"), window.history.back();
271
+ }
272
+ return (h, p) => (t(), o("nav", Ae, [
273
+ w(j, {
274
+ variant: "secondary",
275
+ size: "sm",
276
+ class: "flex flex-shrink-0 items-center justify-center",
277
+ onClick: b,
278
+ "aria-label": "Go back"
279
+ }, {
280
+ iconLeft: k(() => [
281
+ w(v(he), {
282
+ size: 16,
283
+ class: "text-text-body"
284
+ })
285
+ ]),
286
+ default: k(() => [
287
+ p[0] || (p[0] = V(" Back ", -1))
288
+ ]),
289
+ _: 1
290
+ }),
291
+ l("ol", Me, [
292
+ (t(!0), o(_, null, z(e.items, ($, C) => (t(), o(_, { key: C }, [
293
+ C > 0 ? (t(), o("li", Ie, [
294
+ w(v(T), { size: 12 })
295
+ ])) : u("", !0),
296
+ l("li", null, [
297
+ C === e.items.length - 1 ? (t(), o("span", Oe, d($.label), 1)) : (t(), x(P(c.value), M({
298
+ key: 1,
299
+ ref_for: !0
300
+ }, c.value === "a" ? { href: $.to ?? "#" } : { to: $.to ?? "#" }, { class: "text-body-sm !text-text-subsubtitle hover:!text-text-subtitle transition-colors whitespace-nowrap" }), {
301
+ default: k(() => [
302
+ V(d($.label), 1)
303
+ ]),
304
+ _: 2
305
+ }, 1040))
306
+ ])
307
+ ], 64))), 128))
308
+ ])
309
+ ]));
310
+ }
311
+ }), Re = { class: "space-y-2" }, De = { class: "flex items-center justify-between" }, Ne = { class: "flex items-center gap-3" }, Ze = { class: "text-h2 text-text-heading text-left" }, Fe = {
312
+ key: 0,
313
+ class: "text-body-sm text-text-subtitle mt-1 text-left"
314
+ }, Ue = { class: "flex items-center gap-3" }, Ke = /* @__PURE__ */ y({
315
+ __name: "ProPageHeader",
316
+ props: {
317
+ title: {},
318
+ subtitle: {},
319
+ actionText: {},
320
+ showPlusIcon: { type: Boolean },
321
+ breadcrumbs: {}
322
+ },
323
+ emits: ["action"],
324
+ setup(e) {
325
+ return (a, r) => (t(), o("div", Re, [
326
+ e.breadcrumbs && e.breadcrumbs.length > 0 ? (t(), x(N, {
327
+ key: 0,
328
+ items: e.breadcrumbs
329
+ }, null, 8, ["items"])) : u("", !0),
330
+ l("div", De, [
331
+ l("div", null, [
332
+ l("div", Ne, [
333
+ l("p", Ze, d(e.title), 1),
334
+ f(a.$slots, "title-suffix")
335
+ ]),
336
+ e.subtitle ? (t(), o("p", Fe, d(e.subtitle), 1)) : u("", !0)
337
+ ]),
338
+ l("div", Ue, [
339
+ f(a.$slots, "actions", {}, () => [
340
+ e.actionText ? (t(), x(j, {
341
+ key: 0,
342
+ onClick: r[0] || (r[0] = (s) => a.$emit("action")),
343
+ class: "bg-brand-primary hover:bg-brand-primary-strong text-text-on-primary flex items-center space-x-2 px-4 py-2.5 rounded-container shadow-sm"
344
+ }, {
345
+ default: k(() => [
346
+ e.showPlusIcon ? (t(), x(v(xe), {
347
+ key: 0,
348
+ size: 20,
349
+ weight: "bold"
350
+ })) : u("", !0),
351
+ l("span", null, d(e.actionText), 1)
352
+ ]),
353
+ _: 1
354
+ })) : u("", !0)
355
+ ])
356
+ ])
357
+ ])
358
+ ]));
359
+ }
360
+ }), We = /* @__PURE__ */ y({
361
+ __name: "ProMenu",
362
+ props: {
363
+ align: {
364
+ type: String,
365
+ default: "right",
366
+ validator: (e) => ["left", "right"].includes(e)
367
+ },
368
+ width: {
369
+ type: String,
370
+ default: "w-56"
371
+ }
372
+ },
373
+ setup(e, { expose: a }) {
374
+ const s = e.width, n = B(!1), i = B(null);
375
+ function c() {
376
+ n.value = !n.value;
377
+ }
378
+ function b() {
379
+ n.value = !1;
380
+ }
381
+ function h(p) {
382
+ i.value && !i.value.contains(p.target) && b();
383
+ }
384
+ return I(() => {
385
+ document.addEventListener("click", h);
386
+ }), re(() => {
387
+ document.removeEventListener("click", h);
388
+ }), a({
389
+ close: b
390
+ }), (p, $) => (t(), o("div", {
391
+ class: "relative",
392
+ ref_key: "menuRef",
393
+ ref: i
394
+ }, [
395
+ l("div", {
396
+ onClick: c,
397
+ class: "cursor-pointer"
398
+ }, [
399
+ f(p.$slots, "trigger", { isOpen: n.value }, void 0, !0)
400
+ ]),
401
+ w(E, { name: "dropdown" }, {
402
+ default: k(() => [
403
+ n.value ? (t(), o("div", {
404
+ key: 0,
405
+ class: m(["absolute mt-2 bg-surface-sub-bg border border-border-border rounded-container shadow-lg overflow-hidden z-50 text-black", [
406
+ e.align === "right" ? "right-0" : "left-0",
407
+ v(s)
408
+ ]])
409
+ }, [
410
+ f(p.$slots, "items", { close: b }, void 0, !0)
411
+ ], 2)) : u("", !0)
412
+ ]),
413
+ _: 3
414
+ })
415
+ ], 512));
416
+ }
417
+ }), Z = /* @__PURE__ */ K(We, [["__scopeId", "data-v-f6942bad"]]), qe = { class: "bg-surface-sub-bg border-b border-border-border h-16 shrink-0" }, Ge = { class: "px-8 h-full flex items-center justify-between" }, Xe = { class: "flex items-center gap-3 ml-auto" }, Je = { class: "flex items-center space-x-3 cursor-pointer hover:bg-surface-gray-bg p-2 rounded-container transition-colors" }, Qe = { class: "w-8 h-8 rounded-full bg-surface-gray-bg overflow-hidden border border-border-border" }, Ye = ["src"], et = {
418
+ key: 1,
419
+ class: "w-full h-full flex items-center justify-center bg-brand-primary text-text-on-primary text-body-sm-bold"
420
+ }, tt = { class: "text-right hidden md:block" }, st = { class: "text-sm font-semibold text-text-heading font-montserrat" }, at = {
421
+ key: 0,
422
+ class: "text-xs text-text-subtitle font-montserrat"
423
+ }, ot = /* @__PURE__ */ y({
424
+ __name: "ProTopbar",
425
+ props: {
426
+ userName: { default: "" },
427
+ userEmail: { default: "" },
428
+ userAvatar: { default: "" }
429
+ },
430
+ setup(e) {
431
+ const a = e, r = g(() => a.userName ? a.userName.split(" ").map((s) => s.charAt(0)).join("").toUpperCase().slice(0, 2) : "");
432
+ return (s, n) => (t(), o("header", qe, [
433
+ l("div", Ge, [
434
+ f(s.$slots, "left"),
435
+ l("div", Xe, [
436
+ f(s.$slots, "right"),
437
+ e.userName ? (t(), x(Z, {
438
+ key: 0,
439
+ align: "right",
440
+ width: "w-56"
441
+ }, {
442
+ trigger: k(() => [
443
+ l("div", Je, [
444
+ l("div", Qe, [
445
+ e.userAvatar ? (t(), o("img", {
446
+ key: 0,
447
+ src: e.userAvatar,
448
+ alt: "User Avatar",
449
+ class: "w-full h-full object-cover"
450
+ }, null, 8, Ye)) : (t(), o("div", et, d(r.value), 1))
451
+ ]),
452
+ l("div", tt, [
453
+ l("p", st, d(e.userName), 1),
454
+ e.userEmail ? (t(), o("p", at, d(e.userEmail), 1)) : u("", !0)
455
+ ]),
456
+ w(v(H), {
457
+ size: 16,
458
+ class: "text-icon-default-soft"
459
+ })
460
+ ])
461
+ ]),
462
+ items: k(({ close: i }) => [
463
+ f(s.$slots, "menu-items", { close: i })
464
+ ]),
465
+ _: 3
466
+ })) : u("", !0)
467
+ ])
468
+ ])
469
+ ]));
470
+ }
471
+ }), rt = {
472
+ key: 0,
473
+ class: "text-body-sm font-medium transition-opacity duration-200 flex-1 text-left"
474
+ }, lt = {
475
+ key: 1,
476
+ class: "absolute left-full ml-2 px-3 py-1.5 bg-surface-sub-bg border border-border-border rounded-container shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 whitespace-nowrap z-50 pointer-events-none"
477
+ }, nt = { class: "text-body-sm font-medium text-text-heading" }, it = {
478
+ key: 1,
479
+ class: "flex flex-col"
480
+ }, ct = {
481
+ key: 0,
482
+ class: "text-body-sm font-medium transition-opacity duration-200 flex-1 text-left"
483
+ }, dt = {
484
+ key: 2,
485
+ class: "absolute left-full ml-2 px-3 py-1.5 bg-surface-sub-bg border border-border-border rounded-container shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 whitespace-nowrap z-50 pointer-events-none"
486
+ }, ut = { class: "text-body-sm font-medium text-text-heading" }, ft = {
487
+ key: 0,
488
+ class: "ml-6 mt-1"
489
+ }, F = /* @__PURE__ */ y({
490
+ __name: "ProSidebarItem",
491
+ props: {
492
+ item: {},
493
+ isExpanded: { type: Boolean }
494
+ },
495
+ setup(e) {
496
+ const a = le(() => import("./chunks/ProSidebarItem-CNJJi_zd.js")), r = e, s = (() => {
497
+ try {
498
+ return ne("RouterLink");
499
+ } catch {
500
+ return null;
501
+ }
502
+ })(), n = g(() => s && typeof s != "string" ? s : "a"), i = g(() => s && typeof s != "string" ? { to: r.item.to } : { href: r.item.to || "#" }), c = g(() => typeof window < "u" ? window.location.pathname === r.item.to : !1), b = B(!1);
503
+ function h() {
504
+ r.item.children && r.item.children.length > 0 && (b.value = !b.value);
505
+ }
506
+ const p = g(() => [
507
+ "relative flex items-center gap-2.5 px-3 py-2.5 mx-2 mb-2 rounded-button transition-all duration-200",
508
+ r.isExpanded ? "justify-start" : "justify-center",
509
+ c.value ? "bg-surface-gray-bg text-brand-primary" : "!text-text-body hover:bg-surface-gray-bg hover:text-text-heading",
510
+ !r.isExpanded && "px-0 w-12 mx-auto"
511
+ ]);
512
+ return ($, C) => e.item.to ? (t(), x(P(n.value), M({ key: 0 }, i.value, {
513
+ class: [p.value, "group relative"]
514
+ }), {
515
+ default: k(() => [
516
+ (t(), x(P(e.item.icon), {
517
+ size: 20,
518
+ weight: "regular",
519
+ class: m(["shrink-0", c.value ? "text-brand-primary" : "text-icon-default"])
520
+ }, null, 8, ["class"])),
521
+ e.isExpanded ? (t(), o("span", rt, d(e.item.label), 1)) : u("", !0),
522
+ e.isExpanded ? u("", !0) : (t(), o("div", lt, [
523
+ l("span", nt, d(e.item.label), 1)
524
+ ]))
525
+ ]),
526
+ _: 1
527
+ }, 16, ["class"])) : (t(), o("div", it, [
528
+ l("button", {
529
+ onClick: h,
530
+ class: m([p.value, "group relative"])
531
+ }, [
532
+ (t(), x(P(e.item.icon), {
533
+ size: 20,
534
+ weight: "regular",
535
+ class: "shrink-0 text-icon-default"
536
+ })),
537
+ e.isExpanded ? (t(), o("span", ct, d(e.item.label), 1)) : u("", !0),
538
+ e.isExpanded && e.item.children && e.item.children.length > 0 ? (t(), x(v(H), {
539
+ key: 1,
540
+ size: 16,
541
+ class: m(["transition-transform duration-200 shrink-0", b.value ? "rotate-180" : ""])
542
+ }, null, 8, ["class"])) : u("", !0),
543
+ e.isExpanded ? u("", !0) : (t(), o("div", dt, [
544
+ l("span", ut, d(e.item.label), 1)
545
+ ]))
546
+ ], 2),
547
+ w(E, {
548
+ "enter-active-class": "transition-all duration-200 ease-out",
549
+ "enter-from-class": "opacity-0 -translate-y-2",
550
+ "enter-to-class": "opacity-100 translate-y-0",
551
+ "leave-active-class": "transition-all duration-150 ease-in",
552
+ "leave-from-class": "opacity-100 translate-y-0",
553
+ "leave-to-class": "opacity-0 -translate-y-2"
554
+ }, {
555
+ default: k(() => [
556
+ b.value && e.item.children && e.isExpanded ? (t(), o("div", ft, [
557
+ (t(!0), o(_, null, z(e.item.children, (S) => (t(), x(v(a), {
558
+ key: S.label,
559
+ item: S,
560
+ "is-expanded": e.isExpanded
561
+ }, null, 8, ["item", "is-expanded"]))), 128))
562
+ ])) : u("", !0)
563
+ ]),
564
+ _: 1
565
+ })
566
+ ]));
567
+ }
568
+ }), bt = "data:image/svg+xml,%3csvg%20width='149'%20height='23'%20viewBox='0%200%20149%2023'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_1452_404)'%3e%3cpath%20d='M5.88924%2015.6801V22.9843H0.0909263C-0.0412166%2022.8057%200.0096076%2022.6183%200.0096076%2022.4441C0.00670336%2020.1628%200.00379912%2017.883%200.0096076%2015.6017C0.0154161%2012.8499%201.91769%2010.451%204.61138%209.9094C7.99627%209.2298%2011.3957%208.61991%2014.7893%207.97662C15.4108%207.859%2015.7201%207.54244%2015.6809%207.08647C15.6402%206.59421%2015.2888%206.3517%2014.6092%206.35025C9.99293%206.35025%205.3781%206.35025%200.761806%206.34734C0.532371%206.34734%200.294223%206.39527%200.0401021%206.28345V0.522892C0.27825%200.409627%200.49752%200.456094%200.709529%200.456094C5.43328%200.45319%2010.1585%200.451738%2014.8822%200.454642C18.2918%200.454642%2021.2251%203.07427%2021.5402%206.39381C21.8785%209.96748%2019.5885%2013.0721%2016.118%2013.7314C12.8493%2014.3514%209.57763%2014.9613%206.30745%2015.577C6.18402%2015.6003%206.0635%2015.6366%205.88924%2015.6801Z'%20fill='%23F0C111'/%3e%3cpath%20d='M30.8149%2022.9856V0.447253H34.1025L34.422%202.80985H34.7415C36.0818%200.862559%2037.9652%200%2040.4556%200C44.6696%200%2048.1169%202.93764%2048.1169%208.68368C48.1169%2014.4297%2044.6696%2017.3674%2040.4556%2017.3674C37.9971%2017.3674%2036.1137%2016.5367%2034.7415%2014.6214H34.422V22.9856H30.8149ZM44.446%208.68368C44.446%204.98077%2042.339%203.00153%2039.4013%203.00153C36.4637%203.00153%2034.3567%205.01272%2034.3567%208.68368C34.3567%2012.3546%2036.4637%2014.3658%2039.4013%2014.3658C42.339%2014.3658%2044.446%2012.3546%2044.446%208.68368Z'%20fill='%2303439A'/%3e%3cpath%20d='M50.6711%2016.9201V0.447266H53.9587L54.2782%203.03349H54.5977C55.7782%201.30982%2057.5673%200.447266%2060.6951%200.447266V3.79876C60.2798%203.73486%2059.8645%203.73486%2059.4507%203.73486C55.9394%203.73486%2054.2782%205.61826%2054.2782%209.28922V16.9187H50.6711V16.9201Z'%20fill='%2303439A'/%3e%3cpath%20d='M60.9521%208.68368C60.9521%202.80985%2064.6551%200%2069.7636%200C74.8722%200%2078.5751%202.80985%2078.5751%208.68368C78.5751%2014.5575%2074.9041%2017.3674%2069.7636%2017.3674C64.6231%2017.3674%2060.9521%2014.5575%2060.9521%208.68368ZM74.9027%208.68368C74.9027%204.78909%2072.7956%202.90569%2069.7622%202.90569C66.7287%202.90569%2064.6536%204.78909%2064.6536%208.68368C64.6536%2012.5783%2066.7287%2014.4297%2069.7941%2014.4297C72.8595%2014.4297%2074.9027%2012.5783%2074.9027%208.68368Z'%20fill='%2303439A'/%3e%3cpath%20d='M80.5225%2012.4185C80.5225%2012.2907%2080.5225%2012.131%2080.5544%2012.0032H84.1295V12.163C84.1295%2013.5033%2085.4379%2014.5894%2087.9602%2014.5894C90.4825%2014.5894%2091.7909%2013.8227%2091.7909%2012.2268C91.7909%208.77952%2080.7446%2011.9713%2080.7446%205.20295C80.7446%202.13897%2083.3628%200%2087.8644%200C92.8452%200%2095.048%202.20287%2095.048%205.01272V5.36413H91.4729V5.17245C91.4729%203.86409%2090.3882%202.74596%2087.8658%202.74596C85.5991%202.74596%2084.3227%203.54462%2084.3227%205.07661C84.3227%208.65173%2095.3689%205.33218%2095.3689%2012.1325C95.3689%2015.1979%2092.8466%2017.3688%2087.9631%2017.3688C82.5366%2017.3688%2080.5254%2015.0382%2080.5254%2012.42L80.5225%2012.4185Z'%20fill='%2303439A'/%3e%3cpath%20d='M100.027%2022.9856L102.582%2016.8882L95.6855%200.447266H99.644L104.465%2012.5144H104.785L109.542%200.447266H113.34L103.923%2022.9856H100.029H100.027Z'%20fill='%2303439A'/%3e%3cpath%20d='M113.82%2016.9201V7.85307C113.82%202.42649%20116.947%200%20121.992%200C127.037%200%20130.165%202.26676%20130.165%207.69333V16.9201H126.558V7.69333C126.558%204.50157%20124.866%203.06397%20121.992%203.06397C119.118%203.06397%20117.427%204.62791%20117.427%207.85307V16.9201H113.82Z'%20fill='%2303439A'/%3e%3cpath%20d='M132.719%208.68368C132.719%202.80985%20136.486%200%20141.307%200C145.106%200%20148.522%202.10703%20149%206.1294H145.489C145.074%204.02237%20143.222%202.90569%20141.275%202.90569C138.465%202.90569%20136.422%204.88493%20136.422%208.68368C136.422%2012.4824%20138.465%2014.4297%20141.275%2014.4297C143.222%2014.4297%20145.074%2013.345%20145.489%2011.2365H149C148.521%2015.2589%20145.106%2017.3659%20141.307%2017.3659C136.486%2017.3659%20132.719%2014.5561%20132.719%208.68223V8.68368Z'%20fill='%2303439A'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_1452_404'%3e%3crect%20width='149'%20height='22.9856'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e", mt = "data:image/svg+xml,%3csvg%20width='22'%20height='23'%20viewBox='0%200%2022%2023'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_1487_2700)'%3e%3cpath%20d='M6.00574%2015.5462V23H0.092725C-0.0420319%2022.8177%200.00979765%2022.6266%200.00979765%2022.4487C0.00683596%2020.1207%200.00387427%2017.7942%200.00979765%2015.4662C0.015721%2012.658%201.95563%2010.21%204.70259%209.65724C8.15444%208.96373%2011.6211%208.34134%2015.0818%207.68488C15.7156%207.56484%2016.0311%207.2418%2015.9911%206.77649C15.9496%206.27414%2015.5912%206.02666%2014.8982%206.02518C10.1906%206.02518%205.48448%206.02518%200.776875%206.02222C0.542902%206.02222%200.300043%206.07112%200.0408954%205.95702V0.0769569C0.282273%20-0.0386289%200.507361%200.0102728%200.723565%200.0102728C5.54075%200.00730901%2010.3594%200.00582714%2015.1766%200.00879088C18.6536%200.00879088%2021.6449%202.68208%2021.9663%206.06964C22.3113%209.71652%2019.976%2012.8848%2016.4368%2013.5575C13.1034%2014.1903%209.76708%2014.8127%206.43222%2015.441C6.30635%2015.4647%206.18344%2015.5017%206.00574%2015.5462Z'%20fill='%23F0C111'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_1487_2700'%3e%3crect%20width='22'%20height='23'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e", ht = { class: "h-16 flex items-center px-4 justify-start" }, xt = ["src"], gt = ["src"], pt = {
569
+ key: 0,
570
+ class: "border-t border-border-border p-2"
571
+ }, vt = /* @__PURE__ */ y({
572
+ __name: "ProSidebar",
573
+ props: {
574
+ navItems: {},
575
+ defaultExpanded: { type: Boolean, default: !0 },
576
+ persistState: { type: Boolean, default: !0 },
577
+ storageKey: { default: "prosync-sidebar-expanded" }
578
+ },
579
+ emits: ["update:expanded"],
580
+ setup(e, { emit: a }) {
581
+ const r = e, s = B(r.defaultExpanded), n = a;
582
+ I(() => {
583
+ if (r.persistState) {
584
+ const c = localStorage.getItem(r.storageKey);
585
+ c !== null && (s.value = c === "true");
586
+ }
587
+ }), ie(s, (c) => {
588
+ r.persistState && localStorage.setItem(r.storageKey, String(c)), n("update:expanded", c);
589
+ });
590
+ function i() {
591
+ s.value = !s.value;
592
+ }
593
+ return (c, b) => (t(), o("aside", {
594
+ class: m([
595
+ "h-full bg-surface-sub-bg border-r border-border-border transition-all duration-300 ease-in-out flex flex-col shrink-0 relative",
596
+ s.value ? "w-60" : "w-[68px]"
597
+ ])
598
+ }, [
599
+ l("div", ht, [
600
+ f(c.$slots, "logo", { isExpanded: s.value }, () => [
601
+ s.value ? (t(), o("img", {
602
+ key: 0,
603
+ src: v(bt),
604
+ alt: "Prosync",
605
+ height: "39",
606
+ class: "w-auto transition-opacity duration-200"
607
+ }, null, 8, xt)) : (t(), o("img", {
608
+ key: 1,
609
+ src: v(mt),
610
+ alt: "Prosync",
611
+ height: "39",
612
+ class: "w-auto transition-opacity duration-200"
613
+ }, null, 8, gt))
614
+ ])
615
+ ]),
616
+ l("button", {
617
+ onClick: i,
618
+ class: "absolute -right-4 top-[40px] w-8 h-8 rounded-lg flex items-center justify-center bg-surface-gray-bg border border-border-border hover:bg-surface-gray-bg transition-colors text-icon-default shadow-sm z-50 cursor-pointer"
619
+ }, [
620
+ s.value ? (t(), x(v(R), {
621
+ key: 0,
622
+ size: 14
623
+ })) : (t(), x(v(T), {
624
+ key: 1,
625
+ size: 14
626
+ }))
627
+ ]),
628
+ l("nav", {
629
+ class: m(["flex-1 py-4", s.value ? "overflow-y-auto" : "overflow-visible"])
630
+ }, [
631
+ (t(!0), o(_, null, z(e.navItems, (h) => (t(), x(F, {
632
+ key: h.label,
633
+ item: h,
634
+ "is-expanded": s.value
635
+ }, null, 8, ["item", "is-expanded"]))), 128))
636
+ ], 2),
637
+ c.$slots.footer ? (t(), o("div", pt, [
638
+ f(c.$slots, "footer", { isExpanded: s.value })
639
+ ])) : u("", !0)
640
+ ], 2));
641
+ }
642
+ }), yt = { class: "col-span-12 sm:col-span-6 lg:col-span-3 bg-surface-sub-bg p-6 rounded-card border border-border-border shadow-xs flex flex-col justify-between relative group hover:shadow-md transition-shadow" }, Ct = { class: "flex justify-between items-start mb-2" }, $t = { class: "text-body text-text-subtitle truncate pr-2" }, wt = { class: "text-h2 text-text-heading mb-3 text-left truncate" }, kt = { class: "flex justify-between items-end flex-wrap gap-2" }, Pt = { class: "text-caption text-text-disabled" }, _t = {
643
+ key: 0,
644
+ class: "text-tag font-semibold text-text-heading"
645
+ }, Vt = {
646
+ key: 1,
647
+ class: "flex items-center gap-1"
648
+ }, St = {
649
+ key: 0,
650
+ class: "text-caption text-text-disabled"
651
+ }, zt = /* @__PURE__ */ y({
652
+ __name: "ProStatisticCard",
653
+ props: {
654
+ label: {},
655
+ value: {},
656
+ subtitle: {},
657
+ subtitleValue: { default: void 0 },
658
+ icon: {},
659
+ iconBg: { default: "bg-surface-gray-bg" },
660
+ trend: { default: void 0 }
661
+ },
662
+ setup(e) {
663
+ return (a, r) => (t(), o("div", yt, [
664
+ l("div", Ct, [
665
+ l("p", $t, d(e.label), 1),
666
+ l("div", {
667
+ class: m([
668
+ "w-10 h-10 rounded-lg flex-shrink-0 flex items-center justify-center text-icon-default-soft group-hover:text-brand-primary group-hover:bg-brand-primary/10 transition-colors",
669
+ e.iconBg
670
+ ])
671
+ }, [
672
+ (t(), x(P(e.icon), { size: 24 }))
673
+ ], 2)
674
+ ]),
675
+ l("p", wt, d(e.value), 1),
676
+ l("div", kt, [
677
+ l("p", Pt, d(e.subtitle), 1),
678
+ e.subtitleValue ? (t(), o("p", _t, d(e.subtitleValue), 1)) : e.trend ? (t(), o("div", Vt, [
679
+ (t(), x(P(e.trend.icon), {
680
+ size: 14,
681
+ class: m(e.trend.iconClass)
682
+ }, null, 8, ["class"])),
683
+ l("span", {
684
+ class: m(["text-tag font-semibold", e.trend.valueClass])
685
+ }, d(e.trend.value), 3),
686
+ e.trend.comparison ? (t(), o("span", St, d(e.trend.comparison), 1)) : u("", !0)
687
+ ])) : u("", !0)
688
+ ])
689
+ ]));
690
+ }
691
+ }), Bt = /* @__PURE__ */ y({
692
+ __name: "ProStatusBadge",
693
+ props: {
694
+ status: {},
695
+ dueDate: {}
696
+ },
697
+ setup(e) {
698
+ const a = e, r = {
699
+ "Not Started": { label: "Not Started", variant: "secondary" },
700
+ "In Progress": { label: "In Progress", variant: "info" },
701
+ "Pending Review": { label: "Pending Review", variant: "warn" },
702
+ Completed: { label: "Completed", variant: "success" },
703
+ Rejected: { label: "Rejected", variant: "error" },
704
+ Blocked: { label: "Blocked", variant: "error" },
705
+ Delegated: { label: "Delegated", variant: "attention" },
706
+ Overdue: { label: "Overdue", variant: "error" }
707
+ }, s = g(() => {
708
+ if (!a.dueDate || ["Completed", "Rejected"].includes(a.status)) return !1;
709
+ const c = new Date(a.dueDate), b = /* @__PURE__ */ new Date();
710
+ return b.setHours(0, 0, 0, 0), c < b;
711
+ }), n = g(() => {
712
+ var c;
713
+ return s.value ? "Overdue" : ((c = r[a.status]) == null ? void 0 : c.label) || a.status;
714
+ }), i = g(() => {
715
+ var c;
716
+ return s.value ? "error" : ((c = r[a.status]) == null ? void 0 : c.variant) || "secondary";
717
+ });
718
+ return (c, b) => (t(), x(L, {
719
+ variant: i.value,
720
+ label: n.value
721
+ }, null, 8, ["variant", "label"]));
722
+ }
723
+ }), Et = { class: "flex items-center justify-between border-b border-border-border px-6 py-4 shrink-0" }, Tt = { class: "text-body-bold text-text-heading" }, jt = { class: "flex-1 overflow-y-auto px-6 py-4" }, Ht = {
724
+ key: 0,
725
+ class: "border-t border-border-border px-6 py-4 shrink-0"
726
+ }, Lt = /* @__PURE__ */ y({
727
+ __name: "ProDrawer",
728
+ props: {
729
+ modelValue: { type: Boolean },
730
+ title: { default: "" },
731
+ placement: { default: "right" },
732
+ size: { default: "md" },
733
+ closeOnOverlay: { type: Boolean, default: !0 }
734
+ },
735
+ emits: ["update:modelValue"],
736
+ setup(e, { emit: a }) {
737
+ const r = e, s = a, n = g(() => ({
738
+ right: "top-0 right-0 h-full",
739
+ left: "top-0 left-0 h-full",
740
+ top: "top-0 left-0 w-full",
741
+ bottom: "bottom-0 left-0 w-full"
742
+ })[r.placement]), i = g(() => (["left", "right"].includes(r.placement) ? { sm: "w-80", md: "w-[480px]", lg: "w-[640px]", xl: "w-[800px]", full: "w-screen" } : { sm: "h-48", md: "h-80", lg: "h-[480px]", xl: "h-[640px]", full: "h-screen" })[r.size]);
743
+ function c() {
744
+ s("update:modelValue", !1);
745
+ }
746
+ function b() {
747
+ r.closeOnOverlay && c();
748
+ }
749
+ return (h, p) => (t(), x(E, { name: "drawer" }, {
750
+ default: k(() => [
751
+ e.modelValue ? (t(), o("div", {
752
+ key: 0,
753
+ class: "fixed inset-0 bg-surface-dark-bg/60 z-50",
754
+ onClick: ce(b, ["self"])
755
+ }, [
756
+ w(E, { name: "drawer-panel" }, {
757
+ default: k(() => [
758
+ e.modelValue ? (t(), o("div", {
759
+ key: 0,
760
+ class: m(["bg-surface-sub-bg shadow-xl flex flex-col fixed", n.value, i.value])
761
+ }, [
762
+ l("div", Et, [
763
+ f(h.$slots, "header", {}, () => [
764
+ l("p", Tt, d(e.title), 1)
765
+ ]),
766
+ l("button", {
767
+ onClick: c,
768
+ class: "text-icon-default-soft hover:text-icon-default transition-colors p-1 rounded-md hover:bg-surface-gray-bg",
769
+ "aria-label": "Close"
770
+ }, [
771
+ w(v(O), { size: 20 })
772
+ ])
773
+ ]),
774
+ l("div", jt, [
775
+ f(h.$slots, "default")
776
+ ]),
777
+ h.$slots.footer ? (t(), o("div", Ht, [
778
+ f(h.$slots, "footer")
779
+ ])) : u("", !0)
780
+ ], 2)) : u("", !0)
781
+ ]),
782
+ _: 3
783
+ })
784
+ ])) : u("", !0)
785
+ ]),
786
+ _: 3
787
+ }));
788
+ }
789
+ }), At = { class: "relative inline-flex group" }, Mt = /* @__PURE__ */ y({
790
+ __name: "ProTooltip",
791
+ props: {
792
+ content: {},
793
+ placement: { default: "top" },
794
+ visible: { type: Boolean, default: !1 }
795
+ },
796
+ setup(e) {
797
+ const a = e, r = g(() => ({
798
+ top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
799
+ bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
800
+ left: "right-full top-1/2 -translate-y-1/2 mr-2",
801
+ right: "left-full top-1/2 -translate-y-1/2 ml-2"
802
+ })[a.placement]), s = g(() => ({
803
+ top: "top-full left-1/2 -translate-x-1/2 border-t-surface-dark-bg",
804
+ bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-surface-dark-bg",
805
+ left: "left-full top-1/2 -translate-y-1/2 border-l-surface-dark-bg",
806
+ right: "right-full top-1/2 -translate-y-1/2 border-r-surface-dark-bg"
807
+ })[a.placement]);
808
+ return (n, i) => (t(), o("div", At, [
809
+ f(n.$slots, "default"),
810
+ l("div", {
811
+ class: m([
812
+ "absolute px-2 py-1 bg-surface-dark-bg text-text-inverse text-xs rounded whitespace-nowrap pointer-events-none z-50 transition-opacity duration-200",
813
+ e.visible ? "opacity-100" : "opacity-0 group-hover:opacity-100",
814
+ r.value
815
+ ])
816
+ }, [
817
+ V(d(e.content) + " ", 1),
818
+ l("div", {
819
+ class: m(["absolute border-4 border-transparent", s.value])
820
+ }, null, 2)
821
+ ], 2)
822
+ ]));
823
+ }
824
+ }), It = { class: "nav-tabs" }, Ot = ["onClick"], Rt = {
825
+ key: 1,
826
+ class: "inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 text-[10px] font-semibold rounded-full bg-brand-primary text-text-on-primary"
827
+ }, Dt = { class: "pt-4" }, Nt = /* @__PURE__ */ y({
828
+ __name: "ProTabs",
829
+ props: {
830
+ tabs: {},
831
+ modelValue: {}
832
+ },
833
+ emits: ["update:modelValue"],
834
+ setup(e) {
835
+ return (a, r) => (t(), o("div", null, [
836
+ l("div", It, [
837
+ (t(!0), o(_, null, z(e.tabs, (s) => (t(), o("button", {
838
+ key: s.key,
839
+ class: m(["tab-link", { active: e.modelValue === s.key }]),
840
+ onClick: (n) => a.$emit("update:modelValue", s.key)
841
+ }, [
842
+ s.icon ? (t(), x(P(s.icon), {
843
+ key: 0,
844
+ size: 16
845
+ })) : u("", !0),
846
+ V(" " + d(s.label) + " ", 1),
847
+ s.badge !== void 0 ? (t(), o("span", Rt, d(s.badge), 1)) : u("", !0)
848
+ ], 10, Ot))), 128))
849
+ ]),
850
+ l("div", Dt, [
851
+ f(a.$slots, "default")
852
+ ])
853
+ ]));
854
+ }
855
+ }), Zt = {
856
+ class: "flex items-center gap-1",
857
+ "aria-label": "Pagination"
858
+ }, Ft = ["disabled"], Ut = {
859
+ key: 0,
860
+ class: "px-2 text-text-disabled text-body-sm"
861
+ }, Kt = ["onClick"], Wt = ["disabled"], qt = /* @__PURE__ */ y({
862
+ __name: "ProPagination",
863
+ props: {
864
+ modelValue: {},
865
+ totalPages: {},
866
+ maxVisible: { default: 7 }
867
+ },
868
+ emits: ["update:modelValue"],
869
+ setup(e) {
870
+ const a = e, r = g(() => {
871
+ const s = a.totalPages, n = a.modelValue, i = a.maxVisible;
872
+ if (s <= i)
873
+ return Array.from({ length: s }, ($, C) => C + 1);
874
+ const c = [1], b = Math.floor((i - 3) / 2);
875
+ let h = Math.max(2, n - b), p = Math.min(s - 1, n + b);
876
+ n <= b + 2 && (p = i - 2), n >= s - b - 1 && (h = s - i + 3), h > 2 && c.push("...");
877
+ for (let $ = h; $ <= p; $++) c.push($);
878
+ return p < s - 1 && c.push("..."), c.push(s), c;
879
+ });
880
+ return (s, n) => (t(), o("nav", Zt, [
881
+ l("button", {
882
+ disabled: e.modelValue <= 1,
883
+ onClick: n[0] || (n[0] = (i) => s.$emit("update:modelValue", e.modelValue - 1)),
884
+ class: "p-2 rounded-button text-icon-default hover:bg-surface-gray-bg disabled:text-icon-disabled disabled:cursor-not-allowed transition-colors",
885
+ "aria-label": "Previous page"
886
+ }, [
887
+ w(v(R), { size: 16 })
888
+ ], 8, Ft),
889
+ (t(!0), o(_, null, z(r.value, (i) => (t(), o(_, { key: i }, [
890
+ i === "..." ? (t(), o("span", Ut, "...")) : (t(), o("button", {
891
+ key: 1,
892
+ onClick: (c) => s.$emit("update:modelValue", i),
893
+ class: m([
894
+ "w-8 h-8 rounded-button text-body-sm font-medium transition-colors",
895
+ e.modelValue === i ? "bg-brand-primary text-text-on-primary" : "text-text-body hover:bg-surface-gray-bg"
896
+ ])
897
+ }, d(i), 11, Kt))
898
+ ], 64))), 128)),
899
+ l("button", {
900
+ disabled: e.modelValue >= e.totalPages,
901
+ onClick: n[1] || (n[1] = (i) => s.$emit("update:modelValue", e.modelValue + 1)),
902
+ class: "p-2 rounded-button text-icon-default hover:bg-surface-gray-bg disabled:text-icon-disabled disabled:cursor-not-allowed transition-colors",
903
+ "aria-label": "Next page"
904
+ }, [
905
+ w(v(T), { size: 16 })
906
+ ], 8, Wt)
907
+ ]));
908
+ }
909
+ }), Gt = { class: "flex flex-col items-center justify-center py-12 px-6 text-center" }, Xt = { class: "w-16 h-16 rounded-full bg-surface-gray-bg flex items-center justify-center mb-4" }, Jt = { class: "text-body-bold text-text-heading mb-1" }, Qt = {
910
+ key: 0,
911
+ class: "text-body-sm text-text-subtitle mb-6 max-w-sm"
912
+ }, Yt = /* @__PURE__ */ y({
913
+ __name: "ProEmpty",
914
+ props: {
915
+ title: { default: "No data" },
916
+ description: { default: "" }
917
+ },
918
+ setup(e) {
919
+ return (a, r) => (t(), o("div", Gt, [
920
+ l("div", Xt, [
921
+ f(a.$slots, "icon", {}, () => [
922
+ w(v(ge), {
923
+ size: 32,
924
+ class: "text-icon-default-soft"
925
+ })
926
+ ])
927
+ ]),
928
+ l("p", Jt, [
929
+ f(a.$slots, "title", {}, () => [
930
+ V(d(e.title), 1)
931
+ ])
932
+ ]),
933
+ e.description || a.$slots.description ? (t(), o("p", Qt, [
934
+ f(a.$slots, "description", {}, () => [
935
+ V(d(e.description), 1)
936
+ ])
937
+ ])) : u("", !0),
938
+ f(a.$slots, "action")
939
+ ]));
940
+ }
941
+ }), es = /* @__PURE__ */ y({
942
+ __name: "ProSkeleton",
943
+ props: {
944
+ shape: { default: "text" },
945
+ width: { default: "" },
946
+ height: { default: "" }
947
+ },
948
+ setup(e) {
949
+ const a = e, r = g(() => ({
950
+ text: "h-4 rounded",
951
+ circle: "rounded-full",
952
+ rectangle: "rounded-card"
953
+ })[a.shape]), s = g(() => ({
954
+ width: a.width || (a.shape === "circle" ? "40px" : "100%"),
955
+ height: a.height || (a.shape === "circle" ? "40px" : a.shape === "rectangle" ? "120px" : "")
956
+ }));
957
+ return (n, i) => (t(), o("div", {
958
+ class: m(["animate-pulse bg-surface-gray-bg", r.value]),
959
+ style: A(s.value)
960
+ }, [
961
+ f(n.$slots, "default")
962
+ ], 6));
963
+ }
964
+ }), ts = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
965
+ __proto__: null,
966
+ ProAvatar: W,
967
+ ProBanner: Le,
968
+ ProBreadcrumbs: N,
969
+ ProButton: j,
970
+ ProCard: q,
971
+ ProDivider: G,
972
+ ProDrawer: Lt,
973
+ ProEmpty: Yt,
974
+ ProFormField: X,
975
+ ProInput: J,
976
+ ProMenu: Z,
977
+ ProModal: Q,
978
+ ProPageHeader: Ke,
979
+ ProPagination: qt,
980
+ ProSelect: Y,
981
+ ProSidebar: vt,
982
+ ProSidebarItem: F,
983
+ ProSkeleton: es,
984
+ ProSpinner: ee,
985
+ ProStatisticCard: zt,
986
+ ProStatusBadge: Bt,
987
+ ProTable: $e,
988
+ ProTableCell: D,
989
+ ProTableRow: je,
990
+ ProTabs: Nt,
991
+ ProTag: L,
992
+ ProTextarea: te,
993
+ ProToast: se,
994
+ ProTooltip: Mt,
995
+ ProTopbar: ot
996
+ }, Symbol.toStringTag, { value: "Module" })), rs = {
997
+ install(e) {
998
+ for (const [a, r] of Object.entries(ts))
999
+ e.component(a, r);
1000
+ }
1001
+ };
1002
+ export {
1003
+ W as ProAvatar,
1004
+ Le as ProBanner,
1005
+ N as ProBreadcrumbs,
1006
+ j as ProButton,
1007
+ q as ProCard,
1008
+ G as ProDivider,
1009
+ Lt as ProDrawer,
1010
+ Yt as ProEmpty,
1011
+ X as ProFormField,
1012
+ J as ProInput,
1013
+ Z as ProMenu,
1014
+ Q as ProModal,
1015
+ Ke as ProPageHeader,
1016
+ qt as ProPagination,
1017
+ Y as ProSelect,
1018
+ vt as ProSidebar,
1019
+ F as ProSidebarItem,
1020
+ es as ProSkeleton,
1021
+ ee as ProSpinner,
1022
+ zt as ProStatisticCard,
1023
+ Bt as ProStatusBadge,
1024
+ $e as ProTable,
1025
+ D as ProTableCell,
1026
+ je as ProTableRow,
1027
+ Nt as ProTabs,
1028
+ L as ProTag,
1029
+ te as ProTextarea,
1030
+ se as ProToast,
1031
+ Mt as ProTooltip,
1032
+ ot as ProTopbar,
1033
+ rs as default
1034
+ };