@bluerobotics/bluevue 0.1.1 → 0.2.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 (91) hide show
  1. package/README.md +97 -18
  2. package/bin/create-blueos-extension.mjs +72 -0
  3. package/dist/bluevue.js +2464 -778
  4. package/dist/components/BlueApp.vue.d.ts +50 -0
  5. package/dist/components/BlueBanner.vue.d.ts +49 -0
  6. package/dist/components/BlueBannerGroup.vue.d.ts +20 -0
  7. package/dist/components/BlueButton.vue.d.ts +59 -0
  8. package/dist/components/BlueCard.vue.d.ts +45 -0
  9. package/dist/components/BlueCheckbox.vue.d.ts +34 -0
  10. package/dist/components/BlueChip.vue.d.ts +47 -0
  11. package/dist/components/BlueConfirmDialog.vue.d.ts +193 -0
  12. package/dist/components/BlueDialog.vue.d.ts +60 -0
  13. package/dist/components/BlueFileDrop.vue.d.ts +32 -0
  14. package/dist/components/BlueIcon.vue.d.ts +26 -0
  15. package/dist/components/BlueInput.vue.d.ts +1 -0
  16. package/dist/components/BlueProgressBar.vue.d.ts +28 -0
  17. package/dist/components/BlueRadioGroup.vue.d.ts +40 -0
  18. package/dist/components/BlueSection.vue.d.ts +36 -0
  19. package/dist/components/BlueSnackbar.vue.d.ts +19 -0
  20. package/dist/components/BlueSpinner.vue.d.ts +25 -0
  21. package/dist/components/BlueStat.vue.d.ts +21 -0
  22. package/dist/components/BlueStepsDialog.vue.d.ts +62 -0
  23. package/dist/components/BlueTable.vue.d.ts +62 -0
  24. package/dist/components/BlueTabs.vue.d.ts +37 -0
  25. package/dist/components/BlueTextarea.vue.d.ts +40 -0
  26. package/dist/components/BlueTooltip.vue.d.ts +44 -0
  27. package/dist/components/BlueWindRose.vue.d.ts +37 -0
  28. package/dist/composables/useBlueLoading.d.ts +22 -0
  29. package/dist/composables/useBlueOs.d.ts +39 -0
  30. package/dist/composables/useBlueSnackbar.d.ts +30 -0
  31. package/dist/index.d.ts +30 -0
  32. package/dist/services/blueos.d.ts +37 -0
  33. package/dist/style.css +1 -1
  34. package/dist/types/banner.d.ts +16 -0
  35. package/dist/utils/files.d.ts +13 -0
  36. package/dist/utils/theme.d.ts +22 -0
  37. package/package.json +8 -2
  38. package/src/components/BlueApp.vue +84 -0
  39. package/src/components/BlueBanner.vue +196 -0
  40. package/src/components/BlueBannerGroup.vue +47 -0
  41. package/src/components/BlueButton.vue +134 -0
  42. package/src/components/BlueButtonGroup.vue +26 -24
  43. package/src/components/BlueCard.vue +62 -0
  44. package/src/components/BlueCheckbox.vue +100 -0
  45. package/src/components/BlueChip.vue +77 -0
  46. package/src/components/BlueConfirmDialog.vue +73 -0
  47. package/src/components/BlueDialog.vue +135 -0
  48. package/src/components/BlueFileDrop.vue +94 -0
  49. package/src/components/BlueIcon.vue +37 -0
  50. package/src/components/BlueInput.vue +21 -11
  51. package/src/components/BlueLoadingDialog.vue +22 -53
  52. package/src/components/BlueProgressBar.vue +46 -0
  53. package/src/components/BluePromptDialog.vue +51 -99
  54. package/src/components/BlueRadioGroup.vue +104 -0
  55. package/src/components/BlueSection.vue +33 -0
  56. package/src/components/BlueSelect.vue +12 -10
  57. package/src/components/BlueSlider.vue +1 -3
  58. package/src/components/BlueSnackbar.vue +79 -0
  59. package/src/components/BlueSpinner.vue +37 -0
  60. package/src/components/BlueStat.vue +26 -0
  61. package/src/components/BlueStepsDialog.vue +180 -0
  62. package/src/components/BlueSwitch.vue +16 -13
  63. package/src/components/BlueTable.vue +154 -0
  64. package/src/components/BlueTabs.vue +77 -0
  65. package/src/components/BlueTextarea.vue +101 -0
  66. package/src/components/BlueTooltip.vue +88 -0
  67. package/src/components/BlueWindRose.vue +267 -0
  68. package/src/composables/useBlueLoading.ts +38 -0
  69. package/src/composables/useBlueOs.ts +154 -0
  70. package/src/composables/useBlueSnackbar.ts +89 -0
  71. package/src/index.ts +40 -0
  72. package/src/services/blueos.ts +95 -0
  73. package/src/styles/bluevue.css +136 -0
  74. package/src/types/banner.ts +17 -0
  75. package/src/utils/files.ts +44 -0
  76. package/src/utils/theme.ts +37 -0
  77. package/templates/extension/.github/workflows/deploy.yml +23 -0
  78. package/templates/extension/Dockerfile +56 -0
  79. package/templates/extension/README.md +35 -0
  80. package/templates/extension/backend/main.py +45 -0
  81. package/templates/extension/backend/requirements.txt +2 -0
  82. package/templates/extension/frontend/.eslintrc.cjs +20 -0
  83. package/templates/extension/frontend/env.d.ts +7 -0
  84. package/templates/extension/frontend/index.html +12 -0
  85. package/templates/extension/frontend/package.json +30 -0
  86. package/templates/extension/frontend/src/App.vue +51 -0
  87. package/templates/extension/frontend/src/main.ts +8 -0
  88. package/templates/extension/frontend/src/styles/global.css +11 -0
  89. package/templates/extension/frontend/tsconfig.json +25 -0
  90. package/templates/extension/frontend/tsconfig.node.json +11 -0
  91. package/templates/extension/frontend/vite.config.ts +24 -0
package/dist/bluevue.js CHANGED
@@ -1,91 +1,807 @@
1
- import { ref as h, computed as T, nextTick as r2, defineComponent as Y, onMounted as s2, onBeforeUnmount as k2, watch as U, openBlock as i, createElementBlock as c, createElementVNode as t, normalizeClass as m, toDisplayString as g, renderSlot as l2, createCommentVNode as C, normalizeStyle as W, Fragment as X, renderList as t2, withModifiers as u2, mergeProps as $2, unref as I, createVNode as M2, Transition as I2, withCtx as R2, withDirectives as c2, vShow as P2, withKeys as e2, createBlock as L2, createTextVNode as D2, vModelText as y2 } from "vue";
2
- import { useFloating as E2, autoUpdate as A2, offset as z2, flip as j2, shift as N2, size as O2 } from "@floating-ui/vue";
3
- let W2 = 0, d2 = !1, g2 = !1;
4
- const U2 = () => {
5
- if (g2 || typeof document > "u") return;
6
- g2 = !0;
7
- const M = () => {
8
- d2 = !1;
1
+ import { ref as q, readonly as Ue, onMounted as pe, watch as X, onBeforeUnmount as me, defineComponent as L, computed as w, openBlock as a, createElementBlock as d, normalizeStyle as D, normalizeClass as b, renderSlot as j, createBlock as U, createCommentVNode as C, createElementVNode as i, toDisplayString as B, useSlots as Ke, unref as M, withCtx as N, createVNode as O, TransitionGroup as dt, Fragment as J, renderList as Z, createTextVNode as oe, createSlots as Ge, mergeProps as ke, nextTick as _e, withKeys as de, withModifiers as ae, Transition as pt, withDirectives as Te, vShow as mt, vModelText as je } from "vue";
2
+ import { useFloating as ft, autoUpdate as vt, offset as ht, flip as bt, shift as yt, size as gt } from "@floating-ui/vue";
3
+ const qe = q({ show: !1, message: "Working…", dismissible: !1 }), qt = (c = "Working…", n = !1) => {
4
+ qe.value = { show: !0, message: c, dismissible: n };
5
+ }, wt = () => {
6
+ qe.value = { ...qe.value, show: !1 };
7
+ };
8
+ function kt() {
9
+ return { loading: Ue(qe), showLoading: qt, hideLoading: wt };
10
+ }
11
+ class Ve extends Error {
12
+ constructor(n, e, t) {
13
+ super(n), this.url = e, this.status = t, this.name = "BlueOsError";
14
+ }
15
+ }
16
+ let He = "";
17
+ const qo = (c) => {
18
+ He = c.replace(/\/$/, "");
19
+ }, xt = () => typeof window < "u" && window.location.pathname.startsWith("/extensionv2/"), xe = (c, n = {}) => {
20
+ const e = n.version === void 0 ? "v1.0" : n.version, t = n.timeout ?? 5e3, o = (s) => {
21
+ const u = [c, e, s.replace(/^\//, "")].filter((r) => !!r);
22
+ return `${He}/${u.join("/")}`;
23
+ }, l = async (s, u) => {
24
+ const r = o(s);
25
+ let v;
26
+ try {
27
+ v = await fetch(r, { signal: AbortSignal.timeout(t), ...u });
28
+ } catch (x) {
29
+ throw new Ve(`Could not reach ${c}: ${x.message}`, r, 0);
30
+ }
31
+ if (!v.ok)
32
+ throw new Ve(await v.text() || v.statusText, r, v.status);
33
+ const f = await v.text();
34
+ return f === "" ? void 0 : JSON.parse(f);
35
+ };
36
+ return {
37
+ url: o,
38
+ get: (s, u) => l(s, { method: "GET", ...u }),
39
+ post: (s, u, r) => l(s, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: u === void 0 ? void 0 : JSON.stringify(u),
43
+ ...r
44
+ }),
45
+ delete: (s, u) => l(s, { method: "DELETE", ...u })
46
+ };
47
+ }, Ce = xe("beacon"), Fe = xe("bag"), $t = xe("version-chooser"), Bt = xe("customization"), Je = q(null), Ye = q(null), Xe = q(null), Ze = q(null), Qe = q(!0), et = q(!1), tt = q(null), he = async (c, n) => {
48
+ try {
49
+ return n(await c), !0;
50
+ } catch {
51
+ return !1;
52
+ }
53
+ }, Oe = async () => {
54
+ const [c, n, e] = await Promise.all([
55
+ he(Ce.get("vehicle_name"), (t) => {
56
+ Je.value = t;
57
+ }),
58
+ he(Ce.get("hostname"), (t) => {
59
+ Ye.value = t;
60
+ }),
61
+ he($t.get("version/current"), (t) => {
62
+ Xe.value = t.tag;
63
+ })
64
+ ]);
65
+ await Promise.all([
66
+ he(Bt.get("theme"), (t) => {
67
+ Ze.value = t.primary;
68
+ }),
69
+ he(Fe.get("get/settings"), (t) => {
70
+ typeof t.is_dark_theme == "boolean" && (Qe.value = t.is_dark_theme), typeof t.is_pirate_mode == "boolean" && (et.value = t.is_pirate_mode);
71
+ })
72
+ ]), tt.value = c || n || e ? null : new Ve("Could not reach the vehicle", Ce.url("vehicle_name"), 0);
73
+ }, Ct = () => (pe(() => {
74
+ Oe();
75
+ }), {
76
+ vehicleName: Je,
77
+ hostname: Ye,
78
+ version: Xe,
79
+ primaryColor: Ze,
80
+ isDarkTheme: Qe,
81
+ isPirateMode: et,
82
+ embedded: xt(),
83
+ error: tt,
84
+ refresh: Oe
85
+ }), wo = (c, n) => {
86
+ const e = q(n);
87
+ let t = !1, o;
88
+ pe(async () => {
89
+ try {
90
+ e.value = await Fe.get(`get/${c}`);
91
+ } catch (u) {
92
+ u.status !== 400 && console.warn(`Could not read ${c}:`, u);
93
+ }
94
+ t = !0;
95
+ });
96
+ const l = () => {
97
+ Fe.post(`set/${c}`, e.value).catch((u) => console.warn(`Could not save ${c}:`, u));
98
+ }, s = X(e, () => {
99
+ t && (clearTimeout(o), o = setTimeout(() => {
100
+ o = void 0, l();
101
+ }, 500));
102
+ }, { deep: !0 });
103
+ return me(() => {
104
+ s(), o !== void 0 && (clearTimeout(o), l());
105
+ }), e;
106
+ }, _t = {
107
+ primary: "--bluevue-primary",
108
+ accent: "--bluevue-accent",
109
+ error: "--bluevue-error",
110
+ surface: "--bluevue-surface",
111
+ panelBg: "--bluevue-panel-bg",
112
+ hairline: "--bluevue-hairline"
113
+ };
114
+ function Tt(c, n = document.documentElement) {
115
+ for (const [e, t] of Object.entries(_t)) {
116
+ const o = c[e];
117
+ o && n.style.setProperty(t, o);
118
+ }
119
+ }
120
+ const Vt = ["role", "aria-label", "aria-hidden"], H = /* @__PURE__ */ L({
121
+ __name: "BlueIcon",
122
+ props: {
123
+ name: {},
124
+ size: {},
125
+ color: {},
126
+ spin: { type: Boolean },
127
+ label: {}
128
+ },
129
+ setup(c) {
130
+ const n = c, e = w(() => n.name.startsWith("mdi-") ? n.name : `mdi-${n.name}`), t = w(() => {
131
+ const o = n.size ?? 20;
132
+ return typeof o == "number" ? `${o}px` : o;
133
+ });
134
+ return (o, l) => (a(), d("span", {
135
+ class: b(["mdi bluevue-icon", [e.value, o.spin ? "bluevue-icon--spin" : ""]]),
136
+ style: D({ width: t.value, height: t.value, fontSize: t.value, color: o.color }),
137
+ role: o.label ? "img" : void 0,
138
+ "aria-label": o.label,
139
+ "aria-hidden": o.label ? void 0 : "true"
140
+ }, null, 14, Vt));
141
+ }
142
+ }), Ft = {
143
+ key: 0,
144
+ class: "bluevue-elevation-1 relative flex items-center gap-5 rounded-t-[8px] bg-[#15151577] px-5 py-3"
145
+ }, Mt = ["src"], St = { class: "truncate text-lg font-medium" }, Rt = { class: "ml-auto flex shrink-0 items-center gap-1" }, zt = {
146
+ key: 1,
147
+ class: "flex items-center justify-between gap-3 border-t border-[#ffffff0d] px-5 py-3"
148
+ }, Dt = /* @__PURE__ */ L({
149
+ __name: "BlueCard",
150
+ props: {
151
+ title: {},
152
+ logo: {},
153
+ icon: {},
154
+ width: {},
155
+ bodyClass: {}
156
+ },
157
+ setup(c) {
158
+ return (n, e) => (a(), d("section", {
159
+ class: "bluevue-elevation-5 mx-auto w-full rounded-[8px] bg-[var(--bluevue-surface)] text-white",
160
+ style: D({ maxWidth: n.width || "615px" })
161
+ }, [
162
+ n.title || n.$slots.header || n.$slots.actions ? (a(), d("header", Ft, [
163
+ j(n.$slots, "header", {}, () => [
164
+ n.logo ? (a(), d("img", {
165
+ key: 0,
166
+ src: n.logo,
167
+ alt: "",
168
+ class: "h-6 w-6 shrink-0"
169
+ }, null, 8, Mt)) : n.icon ? (a(), U(H, {
170
+ key: 1,
171
+ name: n.icon,
172
+ size: 24
173
+ }, null, 8, ["name"])) : C("", !0),
174
+ i("span", St, B(n.title), 1)
175
+ ]),
176
+ i("div", Rt, [
177
+ j(n.$slots, "actions")
178
+ ])
179
+ ])) : C("", !0),
180
+ i("div", {
181
+ class: b(n.bodyClass || "px-5 py-4")
182
+ }, [
183
+ j(n.$slots, "default")
184
+ ], 2),
185
+ n.$slots.footer ? (a(), d("footer", zt, [
186
+ j(n.$slots, "footer")
187
+ ])) : C("", !0)
188
+ ], 4));
189
+ }
190
+ }), Lt = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%3e%3cg%20fill='%23fff'%20fill-rule='evenodd'%3e%3cpath%20d='M185.5.4c0%20.2-1%20.3-2%20.2a7%207%200%200%200-2.4.1q-.3.4-1.3.2c-.5%200-1.3%200-1.6.4q-.7.5-.3%200%20.1-.5-.1-.5-.5%200-.5.4-.1.3-1.4.2-1.5-.3-2.5.5l-1%20.8%201%20.3q1.4.2.2.6-1%20.3.1.3.8%200%201.1.5t-.2.1q-.5-.1.1.3t.7%201q0%20.3%201.5%201.6%201.3%201.2.9%201-.6-.3%200%20.5.3.8.7.9t.4.6.8.5.7.3c-.1.6.5%201.7.9%201.5q.3-.1.3.2.1.4.7%201.1.7.6.1.3-.4-.2%201%201.1t1%201.2q-.5-.3-.3.1t1%20.5q.5%200%20.3.2c-.3.4.9%202.5%201.5%202.5q.5%200%201.2.9l.8.9-1-.8q-1-.9-.7-.2.2.6%201%201l1.4%201q.4.4-.3%200-1-1-.3.2.5.9%201%201t1.2.8.2.4q-.7-.6-.6.1%200%20.8%201%20.6.4%200%20.3.5%200%20.4.4.5l.7.1-.2.6q-.7.9.9.7.3%200%200%20.3%200%20.3.3.4.6%200%200%20.3t.4.8q1%20.6.5%200t.3%200q.6.5.5.9t.7%201.3.6%201%20.6.7q.9.7%201%201.3t.5%201q.4.2.1-.3-.2-.5.1-.2.5.3.5.8t.9%201.2q.7.5.3.4-.4-.2.5.7%201.1%201%201.3%201.7t1%201.5.8%201.3q0%20.4.6%201%20.9.6.3.6t.3.5q.7.5.8%201c0%201%20.2%201.2%201%201.5q.6.2.5.5-.2.4.4.7.6.4.6.6c0%201%20.9%202.7%201.2%202.2q.3-.6.4%200c.1%201.5%201%203.1%201.9%203.6q.8.4.6%201-.1.5.5%201.2.7.5.6%201.1-.1.5.7%201.1.7.5.6%201.2-.2.5.6.8%201%20.1.3.8t.2.6q.5%200%20.4.4-.2.3.1.4c.3%200%201%202.1%201%202.8q-.1.3.5.3t.4.3.4.6.1.9.3.5.2.4q-.7.2.3%201%201%20.6.4.6t.3.7c.5.3%201%201.2%201%201.8.2%201.5.9%203.2%201.4%203.5q.5.3%200%201-.8.7.2.3.7-.3.4.5-.1.7.2.8.3%200%20.4.7%200%20.8.5%201.2.6.6%200%20.3t-.5%200q0%20.4.6.7t.4%201c-.2%201%20.1%202%20.6%201.7q.2%200%200%20.6%200%20.8.3.8t.2.6.2.6.2.6.4.6%201.2.6.6.1.6%200%201.1.3q.6-.1.6.1.1.3.8.2t.8.2.6.2q.6-.2.6.4%200%20.5.6.6c.8%200%20.8%200%202%20.6q1%20.5%201.4.2.5-.3%201.2%200%201.2.5%200%20.2h-1c0%20.5%201.8.8%202.1.4q.3-.5.3.3t.9.6q2-.2%201.6.4c-.3.5%201.7%201.3%202.6%201q.8-.2.5.3-.2.7.6.5.7-.1%201%20.4.3.7%201%20.4.8%200%20.5.2-.1.4.3.3t1.2.5q.6.7%201.4.8.9%200%201%20.4%200%20.2.5.4t.3-.2c-.3-.6%201.1.5%201.6%201.2q.3.3.8.2t.8.3q.3.5-.1.2t-.5%200%20.8.7q.7%200%20.6-.2-.2-.3.4-.1.5.3.4.5c-.2.3.5.8%201%20.7q.4%200%20.8.6t1.1.7q.7%200%20.8.4%200%20.3.6.4.5%200%201%20.8.4.7.7.5t.4.2.4.2q.4%200%20.6.3.3.4-.1.2t-.5%200c0%20.5%201.5%201.1%202%201q.4%200%20.2.2c-.2.3.6%201%201.4%201l.6.4q.2.4-.2%200-.5%200-.5.2%200%20.4.6.4t.8.6.9.8.2-.3q-.2-.4.4.2.5.7.6.4l.7%201c.5%201.1%201.8%202%202.6%201.7q.3%200%20.1.2a39%2039%200%200%200%208%207.7c-.2.7.4%201.8.8%201.6q.3-.2%200%20.4-.2.9.5.4.8-.3.3.3-.7.8%201.2%201.2c.3%200%20.9.6.9%201q.1.4%201.1%201.4%201.1.9.5.6-.7-.6-.6%200%200%20.4%201%20.8.9.3%201%20.6h-.5q-.3-.2-.4.1.1.3%201.1%201%201%20.4%201%201t1%201.9%201%201.4q-.2.2.4.4.5.3.4.6-.2.4.4.6.5.2.4.6t.3.6q.6.3.6.7.3%201.7%201.1%201.8.6%200%20.4.6t.4%201q.6.2.3.3t.6%201q1%201%20.5.8t-.3.4q.4.5.7.6.4%200-.1.4-.7.4%200%20.3.7%200%20.7.3c-.2.5%201%202.9%201.3%202.9q.3%200%20.3.3-.2%201.3.4%201%20.4%200%20.4.2t-.4.4q-.4.1.5.8t.4.8q-.6%200%200%20.8.4.6.8.5.3-.2.2.4-.2.5%200%20.6.4%200%20.2.7t.1.4c.5-.3%201%20.9.8%202.3q-.2.9.3%201t.8.6q.4.8-.5%200-.4-.3.3.6c.8%201%20.9%201.2.4%201.5q-.7.4.2.4.7%200%20.4.6-.1.6.4%201.4t.3%201.4.2.3.3.6.3%201.2%200%20.3-.3.6q.2.8.6.1.4-.4.1.7t.2.8.2.8.2.7.3.6.2%201.7q.5.9%200%201-.3.1-.2.7.2.8.6%200%20.4-.4.1.7-.1%201%20.2%201.6.5.5.2.6t.3.6q.6.8%200%20.4t-.3.2.3%201.6.3.9.4.2-.5.4q-.6%200%200%20.3.4.4.3%201.1l.1%201q.3%200%20.3%201.8l.1%202.2q.6%201.2%200%202.1-.6.7%200%20.3.6-.5-.1%203.2-.1.9.2.6c.5-.2.3%204.5-.2%206.4l.1.9c.5%200%20.5%201.7%200%202q-.5.3%200%20.3c.3%200%20.4%201.1%200%201.8q-.2.5-.1%202.2%200%202-.6%201.9-.5%200-.2.3c.4.3.7%202.8.2%202.7q-.6-.1-.2%201%20.2.7-.3%201.3-.6.9.1.4t.1.1q-.3.6-.2%201%200%20.6-.2.6-.4.1-.6.8t.2.5%200%20.6l-.5%201.6q0%20.7-.4.8-.4%200%200%20.6.6.5-.2%201.2-.6.8-.2.9t.4.5-.4.1-.1.8-.3.8-.2.3v.7q-.4%200-.2%201%20.2%201.2-.3.7-.6-.3-.3.3.1.8-.5%202-.6%201.3-.3%201.2.5-.2%200%20.3l-.4%201q0%20.6-.5%201-.4.2-.2.6.1.5-.2.5t-.2.5-.1.6q-.4%200-.6.7l-.3%201.3q.4-.6.4-.1t-.7.9-.6.8-.3.3%200%20.4q.8.4.1.4-.4%200-.3.6t-.1.6q-.4%200-.2.4.1.3-.3.8t-.4%201.1v.3c-.5-.3-1.6%201.2-1.3%201.7q.2.3-.1.4-.5%200-.2.4%200%20.3-.2.4-.4%200-.3.3.2.4-.3.6t-.6.6.5.2q.4-.1-.2.3-.6.6-.7%201.3%200%20.5-.4.4-.6-.2-.4%201%200%20.5-.6%201.2-.6.9-.6.3%200-.4-.4.4c-.5%201-.6%201.4-.7%202.3q0%20.5-.3.3c-.3-.3-1.4.8-1.1%201.3q.2.3-.4.6-.5.1-.4.6.3.3-.4.4-.5%200-.5.5.2.4-.4%201-.8.8%200%20.3.4-.3-.5.6-1%201-.8%201.2.1.3-.3.3-.3%200-.2.3%200%20.4-.5.9-.8.8-.3%200t-.3%200q-.8.4-.2.8.6.3-.1.3c-.6%200-1.3%201-1.2%201.7q0%20.2-.5.3a1%201%200%200%200-.8.4q-.3.5.2.2t-.3.5q-.7.6-.6%201%20.1.2-.3.2c-.8%200-2.8%202.3-2.5%202.8q0%20.3-.9.9c-1%20.5-5.7%205-5.3%205l-.3.7q-.4.7-1%20.5-.4%200-.7.6-.4.8-.7.7-.4%200-1%201-.4.8-.5.6t-.8.6-.5.4-.4-.3q-.5.3-.3.9t-.3.3c-.4-.3-1.6.6-1.6%201.3q0%20.3-.5.2a1%201%200%200%200-.9.3q-.3.4.3.1t0%20.3-.9.5-.3.2-.3.3-1.2.8q-.8%201-.6.4.5-.7-.3%200-.5.6-1.2.8-.6.1-1.3%201-.6.7-.8.7c-.4-.2-1.3.4-1.1.7s-1.2%201-2.6%201.1q-.3%200-.2.4c.3.5-1%201-2.5%201.2q-.3%200-.2.5.2.5-.3.2-.7-.3-1%20.5-.5.7-1%20.5-.7-.2-.7.3%200%20.3-.3.2-.4-.2-.4.2%200%20.3-.4.2-.3-.2-.4.2%200%20.4-.4.1-.3%200-.4.2%200%20.4-.3.4-1.3-.2-1%20.5.1.3-.3.2-.6-.1-1%20.4-.6.4-1%20.3-.2-.1-.3.2t-.6.1q-.5%200-.6.3t-.3.2c-.4-.2-.4%203.3%200%203.9q.2.5%200%201.6%200%201.3.4%201.3.3%200%20.1%201.2t.2%201.2.2%201%20.2%201%20.1.5q0%20.6.3%201.2.5.6%200%20.6-.3%200%20.3%201l.6%201.2v.4l-.1%201q0%20.7.3.5.6-.3.2.7-.2%201%20.3%201t0%20.4q-.7.4%200%20.4c.8%200%201%201%20.2%201.3q-.3.2.2.2.7%200%20.5.7t.1.4.2.6.4.5%200%20.3q-.8%201%20.4.7.7.2-.2%201.1-.6.7.3.3t.2.3q-.6.9.4.7.3%200%20.1.7t.2.8q.2%200%20.4.9%200%20.7.4%201%20.3.1.2.7-.3.6.2.4.3-.2.4%200%200%20.5-.4.6-.2.1.4%201%20.9.8.3%201.2-.5.4.2.4c.7%200%201.3%201.2.6%201.2q-.4%200%20.2.5.8.6.2%201-.6.6.3.2.7-.3.5.2c-.4.6%200%201.7.6%201.4q.4-.2%200%20.2%200%20.5.3.9.7.3%200%20.3-.8%200%200%20.5c.7.5.8.7.8%201.7q0%20.5.4.3t.2.1c-.3.6.1%201.8.6%201.5.3-.2.5.6.4%201.5q0%20.2.3.3t.2.5.4.8.4.8q0%20.5.2.6t.4.8q0%20.7.4.8.3%200%20.2.4-.2.3.1.3t.2.6.3%201q.5.6.5%201.2c0%20.7.7%201.5%201%201.3s.8%201%20.6%201.4q-.2.3.2.4.3%200%20.2.4-.2.4.1.4.5.1%201.3%201.6.6%201.5.4%201.3-.5-.2-.2.4.3.5.5.4.3-.2.6.4.1.5-.2.4-.4-.2-.1.3.2.6.6.7t0%20.3q-.9.5%200%20.4.6%200%20.5.4t.5%201.1q.8.9.6%201-.2.3.2.3t.3.3.6%201q.6.8.5%201.4-.2.8.6%201.2.6.5.5%201t.1.4q.5%200%201%20.6.5.8%200%20.5c-.7-.4.2%201.3%201.3%202.5q.6.7.4.8-.2%200%20.4.6.8.6.3.4c-.7-.4-.6.4.3%201.5.8%201%202%201.5%201.4.7q-.1-.3.7-.2.9%200%201.4-.6.6-.6%201-.5.6%200%20.6-.3t.4-.2.4-.1q0-.4.6-.6t.3.1q0%20.3%201.2-.2t1.1-1q0-.3.2-.4.4.1.6.5t.2-.3q0-.9.4-.1.4.7%201.1-.2%201-1.2%200-.2-1.1.8-.3-.1.5-.6.9-.5c.4.3%202.7-1%202.7-1.4q0-.3.3-.2.4.1.4-.1%200-.5.6-.2.6%200%201.7-.9%201.3-1%201.3-.5t.3-.3%201.4-.7.8-.4q-.2-.6.5-.3.6.1.3-.2-.2-.8%201.9-1%20.7-.2%201.3-.9.5-.7%201-.8c1%200%201.8-.6%201.6-1q-.2-.4.4-.2t.9-.3q.1-.5.5-.4.3.2.5-.4.4-.6%201-.5.9.3%201-.5.3-.7.5-.6c.3.4%201.7-.5%201.5-1q-.2-.2.3%200%20.7%200%201.2-.8.8-1%201.2-.8.6%200%201.1-.7.7-.9.7-.3%200%20.5.5-.4c.5-1%202.5-2.5%202-1.6q-.1.4.8-.6t1.4-1%20.4-.4.3-.2q.4.3.4-.4t.6-.4%201-.6q.3-.8.4-.5%200%20.3.6-.5.6-1%201.2-.5t.3-.1.4-.7q.5%200%20.6-.6t.4-.4q.5.2%201.7-1l1.7-1.4q.3-.2.2-.6t.5.1q.7.8.5%200%200-.5.5-.4t.3-.2.7-1%201-1.3q0-.5.2-.5.4%200%201.5-1%201.3-1.4.4-.3-.4.7%202-1.7c1.4-1.5%202.8-2.7%203-2.7l.4-.6c.3-.8%203.5-4%204.1-4q.4%200%20.4-.2a16%2016%200%200%201%202.6-3q2.4-2.4%201.7-2-1%20.8.2-.4%201.2-1%201.1-1.5%200-.2.5-.3c.7%200%203-2.9%202.6-3.3q-.1-.2.1-.1.4%200%20.5-.2l1.5-1.6q1.3-1.4%201.1-1.8-.1-.3.4-.4.6%200%20.6-.6t.7-.4.4%200q-.2-.4.2-.9.6-.7-.1-.3-.4.2.2-.3t.4-.6q-.3%200%20.5-.4t.6-1%20.4-.6q.7%200%20.4-.4%200-.3.2-.4.4%200%20.3-.3.1-.5%201.1-1.4%201-1%20.6-.8-.5.3.2-.7.6-.8%201.2-1.2.6-.2.4-.5t.6-.8.6-1.1.8-1.2.7-1.2q-.1-.5.2-.3.3%200%20.8-.6.3-.7%200-.8-.2%200%20.4-.4t.7-1.2q0-.7%201-1.6.6-.9.7-1.4-.1-.4.2-.3c.4.2%201-.7%201-1.6q.1-.5.8-1t.8-1.3c.1-1.1.7-2.1%201-2%20.4.3%201.3-1.6%201-2q-.2-.5.5-.8.5-.4.3-.4-.2-.1.7-1.3%201-1.1.9-1.7-.2-.5.2-.6.3%200%20.1-.4-.1-.3.2-.3.4-.2%201.2-1.6.8-1.6.3-1.3-.4.1.2-.5l.4-1q-.2-.3.2-.3.3%200%20.2-.7-.2-.6.1-.4.4%200%201-1.1.6-1.3.3-1.2t-.1-.3.6-.6q.3%200%20.1-.4-.1-.3.2-.4.5%200%20.2-.6l.1-.6q.4-.1%201-1.4t.3-1.2q-.3.3-.2-.5.3-.7.7-.5t.1-.4q-.2-.7.4-1.2.5-.6.4-1-.2-.4.3-.8t.4-1.3.2-.5q.6.4.3-.3t.1-.6q.4-.1.4-1t.4-1%20.2-.6.2-.6q.5%200%20.2-.8%200-.6.3-.5.3.3.1-.6%200-.7.2-.6.5.3.2-.5-.1-.9.2-.6.4.2.1-.7t.2-.6.4-.2c-.2-1.1.5-3.9.9-3.6q.4.3.2-.4-.2-.5%200-.6.4-.1.3-.8t.2-.8.2-.6.2-.8q.2-.1.2-1-.1-.8.2-.5.5.3.2-.8t.2-.8.2-.8.2-.7.2-.8.2-.8q.4.3.2-.2t.1-1%20.2-1.2q0-.7.2-1c.3%200%20.5-1%20.5-1.8q0-1.6.4-1.7.2%200%200-1%200-.9.3-1%20.4%200%20.3-1.3%200-1.2.2-1.6.2-.2%200-.8-.1-.5.2-.5.4-.1.4-1.3.1-3.7.5-4%20.3-.3%200-1.2%200-1%20.3-1.5.5-.5.3-2-.1-1.2.2-1.3.3%200%20.3-.4t-.5-.2%200-.2.2-1.8q0-1.3.3-1.3t.2-2.4q0-2.1.2-2.3c.1%200%20.3-6.2.3-13.7a170%20170%200%200%200-1.2-21.5q-.5-.6%200-.2.5.1.5-.2t-.4-.4q-.3%200-.1-1.6.3-1.5-.2-1.4-.3.3-.3-1.3.1-1.4-.2-1.7-.2-.3-.2-1.4.1-1-.2-1.4-.3-.2%200-1.3%200-1.2-.3-1.2-.4%200-.3-.5t-.3-1q-.5-.7.1-.3t.3-.6l-.4-1.4q0-.5-.3-.5t-.1-1q0-1-.3-.7-.4.3-.2-.7t0-1.3-.2-1-.2-1q-.3-.1-.2-1%20.1-.7-.2-.7t-.2-.9q.3-.8-.3-.5t-.2-.7q.3-1.2-.2-.8t-.2-.8q.3-1-.1-.8-.5.3-.2-.8t-.2-.8c-.4.3-.6-1-.5-2.4q0-.5-.2-.5t-.4-1.2q0-1.2-.5-1.5t-.5-1.5-.3-1.3-.1-.6-.3-.3-.2-.2c.3-.5-.1-2.4-.6-2.2q-.2%200%200-.6%200-.9-.2-.6-.5.2-.2-.6.1-.8-.2-.6t-.3-.5q.2-.8-.2-.8t-.3-.3q.1-.1-.2-.7a4%204%200%200%201-.6-1.8q-.1-1-.7-1.8-.5-.6-.4-1.1t-.2-.3q-.5.3-.2-.4%200-.5-.2-.6t-.2-.6q.1-.6-.1-.4-.3%200-.6-.6%200-.7.2-.6.9.6-.4-1-.7-.7-.6-1.3.2-.5-.4-.7-.6-.3-.6-.8c.2-1%200-1.9-.4-1.6q-.3.1-.2-.4.3-.5-.4-.8-.6-.2-.4-.8.1-.5-.1-.6c-.3%200-.8-1-1-2.1s-.7-2.2-1-2q-.4.3-.1-.4.2-.7-.3-.4t-.3%200c.3-.5-1.3-4.1-2.2-4.8q-.5-.5-.4-.8t-.5-.6-.4-.8-1-2q-1-1.2-1-1.6.2-1.2-.7-1.3-.6%200-.4-.6t-.4-.9-.9-2q0-.4-.6-.4t-.3-.4q.2-.5-.4-1l-.7-.7q-.3-1.6-.8-1.1-.5.2-.2-.4.1-.6-.2-.6-.5%200-.5-.6t-.3-.4q-.2%200-.3-.6%200-.8-.4-.6-.4%200-.4-.6t-.5-.7q-.4%200-.5-.6c0-.4-.6-1.4-1.3-2.1a7%207%200%200%201-1.5-2q0-.7-.6-1-.6-.5-.5-.7%200-.3-1.2-1.7l-1.3-1.7q0-.2-.7-.5t-.3-.3-.4-.7-.2-.3q.5.1-.7-1-1.3-1.1-.9-1%20.6.3.3-.1t-.9-.5-.3-.3c.3-.5-1-2-1.6-2q-.5%200-.4-.4.2-.2-.4-.5-.5-.3-.4-.7%200-.5-.8-1t-.7-.6q.2-.4-.6-.7-.7-.5-.6-.7c.3-.3-1.4-2-2-2l-.7-.5q-.3-.4.2-.1.3%200-1.9-2t-2.2-2.5c.2-.4-1.6-2-1.9-1.8%200%20.2-1.2-.9-2.4-2.2q-2-2.2-2-2%20.3.6-.1.3l-.5-.7q0-.6-1-1.4t-1-.6-.5-.5-1-.7-.4-.3-.6-1.1q-1-.8-.2.2.4.7-.7-.6t-1.6-1.2q-.4%200-.2-.3.1-.4-.7-.8l-1.4-1.1q-.5-.7-.2%200%20.1.4-1-.9-1.1-1.1-1-.7l-1.3-1.1q-1.6-1.6-2.1-1.4-.5.1-.2%200c.4-.5-2.4-2.6-3.3-2.6q-.7-.1-1.2-.8t-1.7-1.6q-1.3-1-.5-.2.9%201.2-.5%200-1-.7-.8-1%200-.3-.5-.3t-.6-.4q0-.4-.3-.2-.4.1-.6-.4-.3-.5-1-.6-.8%200-.6-.4t-.2-.2-1.6-1q-1-1-1.5-1-1.2%200-1-.5t-.2-.4l-.8-.2-.8-.1q-.3-.1-.2-.5.2-.3-.1-.4l-.8-.2-.8-.1q-.5%200-.2-.4%200-.3-.8-.8-1-.5-.8%200%20.3.3-.5%200-.7-.6-.6-.9.1-.5-1.1-.3-.3%200-.3-.3%200-.4-.6-.6-.6-.3-.4.2t-.9-.6q-1.1-1-1.7-.8-.4.2-.2-.1c.2-.4-2-1.6-2.6-1.4q-.2%200-.3-.3%200-.4-.3-.2-.4.1-.4-.2t-.3-.3q-.2.2-.8-.3t-1.2-.4-.2-.2-.4-.2q-.6%200-.7-.2t-.3-.2q-.4.3-.4-.1-.1-.4-1-.4t-1.2-.6-.6-.4q-.3.1-.4-.2%200-.4-.4-.3-.6%200-1.6-.6t-1.5-.5q-.5.4-.2-.2.4-.5-.5-.2t-1.1-.3c-.5-.7-4.3-2.2-5-2q-.7.3-.5-.1.2-.3-.3-.7-.6-.2-.3.3.1.4-.5-.2-.8-.7-1.5-.4-.9.3-.4-.3.3-.5-.6-.3t-.5-.2q.2-.3-.4-.1-.6%200-.7-.2t-.6-.1-.5-.2-.6-.2-.6-.2-.6-.2q-.5.1-.6-.2t-.6-.2-.6-.2q0-.5-.8-.2t-.6-.2q.4-.6-1.6-.5-.5%200-.5-.3t-1%200q-1.2.1-.7-.4.3-.5-.4-.3-.5.3-.6-.1-.1-.3-1-.1-1.2.3-.8-.3t-.5-.2-.8-.2q0-.3-.6-.2t-.8-.2-.8-.2-.6-.2-.8-.2q-.6%200-.7-.2t-1-.2q-1%20.3-1-.2%200-.3-1-.2-1%20.2-1-.1%200-.5-.7-.2-.8.1-.8-.2t-.7-.4c-2.9-.1-3.5-.2-3.3-.5q0-.3-.7%200-.8%200-1.1-.2c-.4-.6-2.9-1-2.5-.4q.3.6-.4%200t-1.4-.3-.8-.1-1-.2q-.8.1-1.2-.2c0-.2-.7-.3-1.2-.2q-1%20.2-1.6-.3-.5-.3-1.9-.2-1.2.3-1.3-.1%200-.4-.5-.4-.3%200%200%20.5.1.5-.3%200-.6-.4-1.7-.3-1%200-1.3-.2c0-.2-1.1-.3-2.3-.2q-2%200-2.3-.2c-.3-.4-28.8-.4-28.8%200M114%2019.1q-.7.1-.7.5t-.4.1q-.4-.1-.4.2%200%20.5-.4.2-.4-.1-.4.2t-.4.2q-.3-.1-.4.2%200%20.3-.4.2-.3-.1-.3.2t-.4.2-.4.2-.4.2-.4.2-.3.3c-.3-.4-2.4.8-2.4%201.3q0%20.4-.3.2t-1.2.6-.7.4q.3-.6-.7%200-1%20.4-.8.8t-.2.1q-.4-.2-.9.3l-1.1.6q-.6.1-1%20.8l-1%20.7c-1%200-1.9.6-1.7%201q.1.1-.4.4t-.4-.2q.3-.4-.4.3-.5.6-.6.4t-.6.4-.5.4-.8.6q-.8.7-1.2.5t-.6.4-.8.4-.5.4-.4.4-.7.3q-.1.6-.7.4t-.6.5q0%20.6-.2.4-.3%200-1%20.7t-1.2.8c-.9%200-3%201.5-3.3%202.3q-.4.8-.8.8-.5-.1-.5.3t-.4.1q-.4-.1-.3.1%200%20.3-.2.3l-.9.8q-.5.6-.3.2t-1%20.4q-1%201-1.2%201.4%200%20.4-.7.4t-1%20.8q-.6.8-.8.7c-.3-.4-1.8%201-1.8%201.7q0%20.4-.4.3-.3-.2-.5.4-.4.5-.7.5-.5%200-1%20.8t-.5.6-.8.5q-.7.9-1%20.8t-1.3%201.2q-.7%201.2-.8%201c0-.2-.8.5-1.6%201.4q-1.5%201.6-1.4%201.2.3-.6-.5.1l-.7%201q0%20.5-1.8%202.2l-2%202%201.9-2.1c1-1.1%201.8-2%201.5-2-.2%200-1.4%201.2-2.7%202.6q-2%202.3-1.7%202.2t-1%201.2c-.9.8-1.5%201.7-1.5%201.9q.1.2-.3%200-.3%200-.4.2%200%20.3-.5.4-.6%200-.6.4t.4.2.2.2q-.3.3-.6.2-.4-.1-1.2%201-.8%201-.5%201.2.3%200-.7.5-.8.5-.8%201%200%20.3-.5.7-.6.1-.4.5.1.3-.3.4-.7%200-1.1.7-.7.8%200%20.3t0%20.2q-.6.7-.5.9.2.2-.4.2c-.7%200-1.6%201.3-1.2%201.7q.2.3-.3.3c-.5%200-1.7%201.4-1.7%202q-.1.5-.8.7-.8.3-.2.4.7%200-.2.7-.7.7-.8%201-.1.5-.8.8c-.8.4-2%202.3-2.1%203.2%200%20.6-1.2%201.7-1.9%201.7q-.7-.1%200%20.4t-.2.4q-.7%200-.5.6.3.6-.1.4t-.4.2q.1.9-.9%201.5a3%203%200%200%200-.9%201.6q0%20.9-.6%201.3-.4.5-.1-.3.4-1-.2-.1-.4.7-.3%201%20.3.4-.4.6-.5.3-.4.5.3.2-.4.8-.6.5-.2.3.5-.2.2.4-.1.5-.5.4c-.3-.2-1%201-.8%201.6q0%20.4-1%201.1-.8.7-.8%201.2.2.5-.4.7-.5.3-.4.9.2.5%200%20.4-.4-.1-.8.8-.6%201%200%20.7.3-.2-.5.7l-.7%201q.3.1-.7%201.1-.8%201-.8%201.5.2.5-.4.8-.6.2-.3%201%20.2.7-.3.7t-.4.5-.3.5c-.4-.2-.8%201-.6%201.4q.2.4-.1.4-.5%200-.5.6t-.4.6%200%20.3q.8.5-.1.4t-.2.4q.6.4%200%20.4-.4.1-.4%201t-.4.8q-.5-.5-.6%201%200%20.5-.7%201.2-.6.8-.7%201.2%200%20.5.4-.1t.4-.1-.8.9-.5.8q0%20.3-.2.3-.3.1-.3%201t-.2%201q-.3%200-.1.4%200%20.4-.3.4t-.2.6-.4%201.1-.5%201.1q.2%201.5-.4%201.3-.3-.2-.1.4%200%20.5-.3.6-.5%200-.3.7.2.8-.2.6-.3-.2-.2.4.3.5-.1.6-.3%200-.2.4.3.4-.4%201.3t-.2.5-.1.5-.2.6-.2.5-.5%201.5q.1.5-.1.6t-.2.5q.2.6-.2.6t-.3.8-.2.5-.2.4%200%20.7q-.5%200-.3.8%200%20.7-.3.7-.5%200-.5%201.4T7%20147t-.1.5q.1.6-.2.9t-.2.8-.2.5-.1.6-.2.8-.2.6q.1.3-.2%201-.5.6-.3%201v.9q-.5.1-.6%201-.1.7.1.5.8-.4-.2%201.5c-.7%201.4-1.4%204.7-1.1%205.7q.2.8-.3%201.5l-.2.5q.3.1-.1.5-.4.6-.3%201.3c0%20.4-.1%201.4-.4%202q-.4%201.2-.1%201.1.3-.2.3.4%200%20.5-.3.7-.3.4-.2%201.8.1%201.6-.4%201.5c-.4%200-.5%200%200%201.8q.2%201-.2%201t-.4.5.5%200%200%20.4-.4%201.6q.1%201-.2%201.3c-.2.1-.2%201.2-.1%202.3q0%202-.2%202.1a300%20300%200%200%200%200%2029.6q-.7.7-.1.4t.5.3-.4.4q-.6-.3-.1.5.3.8.2%201.2-.1.6.3%201.1t.1.4-.4.3.4.3.1.5q-.1.7.3%201.3.5.8%200%20.3-.5-.1-.5.1%200%20.5.4.5t.1%201.3q-.1%201.3.2%202%20.5.5.3%201.4%200%20.9.3%201.6.5.7-.1%201t.2.8.2%201q-.5.9.3%201.3l.2.3q-.4%200-.4%201.2%200%201.3.6%201.3t.2%201q0%201%20.1.9c.3-.2.4.4.5%203.3q0%20.6.4.7t.2.8.2.8q.3%200%20.1%201t.2%201%20.5.3-.4.2q-.3%200-.1.6t.6.8q.5%200%200%20.4c-.6.6-.2%201.6.4%201.2q.4-.2%200%20.4-.7.6%200%20.8t.4.9q-.1.5.2.6.5%200%20.2.8t.2.6c.6-.4.5.6%200%201.2q-.6.5.1.5t.4.6q-.2.7.3.4.6-.5.3.7l.1%201q.3%200%20.3.5%200%202%20.5%201.7c.5-.4.5.3%200%20.9q-.7.4.1.4t.5.6q-.1.5.2.6t.2.6.3.7-.1.8q-.8.8.2.4.7-.3.4.3-.1.7.3.9t0%20.2q-.6%200-.2.7.3.8.1%201-.2.4.4.1.8-.3.5.7-.2%201%20.4%201.2.9.1.1.9-.7.8.2.4.6-.3.7.1%200%20.3-.4.4-.2.1.4%201.3l1%202.4c.1%201.2.9%202.5%201.4%202.5q.3%200%20.1.4-.2.6.5%201.5t.6%201.6q0%20.4.3.4t.2.4.4.6.6%201.2.4%201%20.1.4q0%20.3.2.3t.2.7q-.3.6.2.4.3-.3.2.2-.2.6.4%201.2.5.6.3.8-.1.3.3.3.3%200%20.2.3t.2.5.5%201.2q0%201%20.4%201%20.3.1%200%20.5t.4.2.4.2q0%20.5.9%201.6t.6%201q-.5-.2-.5%200%20.1.5.5.7.5.3.6%201%200%20.9.7%201.4.5.4.2%200l-.4-.8c0-.5%201%201%201%201.5l.1%201q0%20.3.4.2.4-.2.6.4t-.2.3%200%20.6.8.6.5.3v1.1q.1.5.6.5.6-.1.4.4-.2.7%201.1%202t1.1%201.9q-.3.4.2.1t.4.6.6%201q.5.2.4.6c-.3.4.5%201.6%201%201.3l1%201q.8%201%200%20.5-.6-.6-.8-.1-.2.3%200%20.4c.8%200%203.4%202.6%203.2%203.2q-.1.5.3.8.5.2.6.6c0%20.6%201.4%202%201.8%201.7q.1-.2%200%20.2t.7%201.4q.8.9.7%201.2t.4.2q.5%200%20.9.4.2.4-.5.2-.5-.2.8.8c1.4%201%202%201.7%201%201.2q-.4-.2.2.3t.3.7.8%201.1a3%203%200%200%200%201.6%201q.4-.3.2%200t.8%201.3q.8.8.3.4-1-.8-.3.3.6.8%201.1.6.6-.1.4.2-.2.5.4%201t.8.9q0%20.3.4.4.3%200%20.7.3.3.4-.1.1-1-.5%200%20.7.4.4.9.4.4-.1.7.3.4.4-.2.1-.3-.1.2.8t1%20.8s.9.6%201.7%201.5q1.5%201.5.4.6-1-1%20.6%201%201.7%201.9%202%201.6.5-.5.4.7%200%20.2.5.2t.3.4.3.3c.5-.3%201.7%201.2%201.4%201.8q-.3.5%200%20.2.4-.2%201.1.4t.5.1q-.4-.6.1-.2t.3.8c-.2.5.5%201.3%201%201.3q.3%200%200-.5%200-.3.2-.1.3.3.3.8.1.4.5.4.6.1%201.1%201t.6.4.3.4%201%201%201%20.7q0%20.8.4.2t.4%200c0%20.9%201.8%202.5%202%201.9q.3-.4.3.2t.4.5.6.2q.3.5-.1.2t-.5%200%201.2%201%201%20.2l.3.2q.5.7.9.4.2-.2%200%20.4-.1.6.2.7%201-.2%201.2.6.3.5.8.3.3-.1.2.1-.1.4.7%201.3.9.7%201%20.4t1%20.7q.8.9.9.5.1-.3%201.6%201%201.4%201.6%202.2%201.6.7%200%20.6.4t.7.5.6.3q-.1.2%201%20.7t1.2.9.5.2q.5-.2.5.5t.7.7%201.2.6q.4.4.9.3.3-.2.4.3%200%20.5.3.6%201.7.1%202.1%201%20.4.5.9.3.5-.1.7.7.3.9%201%20.5.8-.3%201.5.8.6.9%201%201t1.2.6.7.3-.5-.7q-.5-.1%200-.2.4%200%201%201t1.4.8.7.3q0%20.3.8.4.8%200%20.6.6t.2.2q.6-.1%201%20.2.7.4%201%20.2.6-.3.2.2t.3.3.4.4.8.4%201.4.5%201.2.5.8.2.6.2.8.3-.2.2-.4.1%201%20.3h.8c-.3.3%201%201.3%201.7%201.3q.8.1%200-.4-.6-.4%200-.4.3%200%20.7.6.2.6.6.5%201.6-.1%201.3.4c-.3.5%201%201.2%202%201.2q.9.1-.2-.4-1.8-.9.3-.3%201%20.4%201.2.8%200%20.3.6%200t.4.3q-.2.3.3.2.5-.2%201.1.4.8.6%201.8.7a4%204%200%200%201%201.8.6q.5.4.7.2.3-.1.3.3t.8.2.5.3.6.2q.8-.2.6%200c-.1.3%201%201%201.9%201l.5.3q.4.2.9-.2.7-.6.3%200t.3.4h.6q.1.3%201.3.4%201%20.1%201.5.5.3.5%201.5.5t1.2.4.5.2c1.4-.1%202.7.1%202.4.5q-.3.5.8.2%201-.2.8.1-.3.5.8.2t.8.2.8.2.7.2.5.3%201%20.4q.3.5.9.5t.3-.5q-.2-.4.4%200%20.6.6%201.2.4t.8.4.7.2c.5-.6%201.6-.7%201.3-.1q-.2.3.8.2%201-.3.7.2t.3.3q.5-.2%201%200c.5.6%203%201%202.6.5q-.1-.4.2-.4t.4.4q0%20.4%201.1.2t1.4.1.6.3.6.2.6%200q.3-.8%201.1.1t1.3.3c.8-.6%201.9-.4%201.6.3q-.3.6.5.3%202.4-.9%202.5-.3%200%20.4.4.4t.2-.5q-.4-.5.2%200t1.6.3q.8%200%201.4.3c.2.1%201.4.2%202.6.1a272%20272%200%200%200%2030.5.1q.6.5.8.2t1-.2q2%20.6-1.3-2.4-1.8-1.7-1-1.2l1%20.8-1-1q-1-1.1-1.4-1.2a1%201%200%200%201-.8-.4q-.3-.5.2-.2t-.2-.4-1-1.4-1-.7q-.5%200-.4-.3.2-.4-.8-1.3-1-.7-.5-.5.5.3.2-.2-.2-.3-.9-.4-.5%200-.4-.3.2-.3-.6-1-.7-.6-.3-.5.6.3.3-.1t-1-.5q-.4%200-.3-.2%200-.4-.6-1t-.3-.5-.8-1-.8-1q.6.3.3-.1-.4-.5-.9-.5t-.4-.3-.3-.6-.5-.7-.3-.5q-.4%200-1.2-1l-.7-1%201%20.8q.5.5-.9-1.4l-2.2-2.5q-.4-.5-.3-.7c.1%200-.5-1-1.5-1.9q-1.5-1.6-1.5-2.2%200-.4-.7-1l-1.7-1.6q-1-1.4%200-.6.8.8-.3-.7-.8-1.2-1.2-1.3-.3%200-.1-.4.1-.3-.4-.6t-.4-.6-.4-.5q-.5-.3-.4-.6.2-.4-.4-.6-.5-.2-.4-.6.2-.4-.3-.6t-.5-.6-.6-.7q-.7-.5-.6-1%20.2-.6-.1-.4-.6.1-.4-.7c.2-.8-.9-1.8-1.2-1.6q-.3%200-.5-.4-.3-.6.2-.4l-.6-.7q-1.7-1.7-.6-1.3.4.2-.2-.3-.8-.7-.8-1.1%200-.6-1-1.5-.7-1-.6-1.4%200-.6-1-2-1.2-1.3-.9-1.1.6.3.3-.4-.2-.5-.6-.6t-.2-.3q.3-.5-.5-1.2-.6-.6-.5-1%20.2-.1-.3-.2-.3%200-.2-.4.1-.3-.1-.4-.4-.1-.7-1.1-.2-1.1-.6-1.2t-.2-.4-.2-.4-.2-.4%200-.4-.4-.8q-.1-.9-.5-1.1t-.5-.6q.2-1-.3-.8-.7.1-.4-1.7%200-.4-.4-.3-.3.2-.1-.3%200-.6-.2-.6-.5%200-.4-.3c.1-.9-.1-1.7-.4-1.5-.5.3-1.3-2-1-2.6q.2-.4-.2-.1-.6.3-.3-.3.1-.6-.2-1l-.1-.5q.1-.3-.2-.4-.4%200-.1-.6.1-.7-.3-.4-.6.4-.2-.5.1-.8-.2-.8t-.3-.6q.2-.5%200-.6c-.5%200-1.4-2.9-1.3-4q0-.7-.4-.4t-.3-.8v-1q-.4%200-.2-.6.1-.5-.2-.6-.5%200-.3-.6t-.2-1.2-.2-1.2q.3-.5-.2-.3t-.2-.7q.2-1-.6-1.5t-.5%200q.5.9-.7-.2c-.6-.5-1.3-.7-3.3-.9q-.4%200-.3-.4.4-.6-1.4-.5a1%201%200%200%201-1-.5q-.3-.6-.7-.5-.5.2-1-.3a1%201%200%200%200-1-.3q-.7.2-.4-.2.4-.6-.8-.4l-.5-.4c-.3-.6-3.4-2-3.7-1.7q-.2%200-.2-.2t-.6-.7q-.6-.2-.4.3.3.4-.7-.5t-1-.6-.5-.3q-.3-.6-.7-.5t-1.4-.8q-.9-.8-1.3-.8-.4.2-.6-.3t-.6-.4-.6-.4-.6-.4-.4-.1q-.1-.4-1-1-1-.8-.8-.2.2.5-.3-.3-.7-.7-1-.6t-.4-.3-.4-.3q-.4-.1-1.4-1.1t-.7-.6q.1.5-.7-.4t-.6-.4q.2.4-1.3-1.1l-1.3-1.2q.3.6-.3%200t-.9-.5-.2-.4c0-.7-2.2-2.5-2.8-2.3q-.3%200-.2-.2a39%2039%200%200%200-7.9-7.8q0-.5-.7-1.1t-.1-.4-.2-.5-1.3-.9q-.6%200-.4-.2t-.4-.9-.1-.3q.4.2-1-1.1t-1-1.2-1.1-1.9a9%209%200%200%200-2-2.2q-.3%200-.2-.4.2-.3-.5-.7-.8-.5-.8-1.3%200-.6-.4-.5-.3.1-.4-.6%200-.7-.6-1l-.6-.7c0-.7-.5-1.4-.8-1.2q-.2%200-.5-.4-.2-.7.2-.4t-.3-.4q-.7-.5-.7-1.1t-1-1.4q-.7-1-.6-1.5t-.2-.5-.3-.3c.2-.5-1-2.8-1.3-2.6q-.3.2%200-.5.1-.6-.3-.3t-.2-.4q.3-.7-.2-.4t-.2-.4q.1-.5-.2-.6t-.4-.3q.3-1.2-.4-1-.4.1-.4-.3c.2-1.2%200-2-.4-1.6q-.5.1-.2-.2.1-.5-.3-1-.6-.7-.4-1.2t-.2-.6q-.5%200-.3-.4.3-.3-.1-.4-.3%200-.2-.6.3-.6-.1-.4t-.6-.6q-.2-.6.1-.5.3.2.1-.4-.2-.5-.6-.6t-.2-.6-.2-.4q-.4.3-.1-.6t-.1-.6-.2-.6q.2-.6-.3-.7t-.2-.6q0-.5-.2-.6t-.2-.8-.2-.8%200-.6q0-.7-.3-.4-.5.3-.3-.6c0-.5-.3-2-.8-3.4s-.8-3-.7-3.5q.2-.8-.2-.8t-.2-1-.2-1-.2-1.2q.3-1-.2-1.1-.4%200-.3-.7%200-.7-.3-1.3-.3-.5.2-.2t0-.5-.2-1.6q0-.7-.2-.8t-.2-2v-2a176%20176%200%200%201%20.4-24.1q0-1.5.3-1.3.4.2.1-.9-.2-1%20.3-1.7t-.1-.2q-.7.4-.1-.3.5-.5.2-.9-.1-.2.2-.6c.3-.1.6-1.2.6-2.4s.3-2.5.6-3q.4-.7.4-1.3-.2-.5.4-.4t0-.7q-.3-.7%200-.8t.1-1q-.1-1.2.3-.7.6.2.3-.4-.1-.5.2-.6t.1-.8q-.1-.8.2-.8.5%200%20.3-.8-.1-.8.2-.5t.2-.6q-.1-.7.2-.6.4.3.2-.6t.2-.5q.4.2.2-.4t0-.7.2-.6q-.3-.7.3-.4.5.4.2-.1t0-.8q.5-.3.6-1t.3-1c.5-.4%201.6-3.1%201.2-3q-.4.2-.1-.3.1-.5.5-.6.3%200%20.1-.6t.5-.8q.5-.2.4-.8t.2-.3q.6.3.2-.4-.1-.6.1-.4c.4.2%201-1%20.6-1.4q0-.4.2-.4.5%200%20.3-.3-.2-.4.4-.6.5-.3.4-.9-.2-.5.1-.3t.5-.3c0-1.2.1-1.4.8-2q.7-.7.4-1.1-.1-.4.2-.2.5.3.5-.1l.2-.8.1-.8q0-.3.4-.2t.4-.2q0-1%20.6-1.3t.6-1%20.6-1.4q.6-.6.4-.2-.3.5.5-.4.7-.8.6-1.4t.8-1.1q1-.7%201-1.2.1-.5.8-1t.7-.6.7-1.2.8-1.4q0-.5.4-.5c.6%200%202.1-2%201.8-2.3q-.2-.3.2%200%20.4%200%201-.8.8-.9%201.2-.7t-.2-.5-.1-.5a41%2041%200%200%200%208.6-8.5q.6.1%202.2-1.4l2-1.8q.4%200%20.4-.6%200-.4.5-.5t.8-.5l.7-.6q.3%200%20.3-.4-.1-.3.4%200%20.7%200%201-.6.5-.7%201-.8.5%200%201.2-1t1.1-.8q.6%200%201.4-.6.9-.7.4-.5t.2-.4%201.4-.6%201-.6q.4-.6.7-.6%201.2.2.8-.4-.1-.3.2-.3.9%200%201.5-.8t.2%200%20.4%200q.6-.5.7-.2t.4-.5%201-.8c.4%200%20.6-.4.7-2.7.1-1.6%200-2.9-.2-2.9q-.2-.1-.2-2%200-1.7-.2-1.9t-.2-1.3q.1-1.3-.2-1.4t-.1-1q.1-1-.1-.9-.4.2-.4-1.2l-.2-2q0-.8-.3-.8-.3-.1-.4-.8c0-1.8-.2-2.5-.5-3q-.3-.4-.1-.8%200-.4-.2-.4t-.2-.6q.2-.5-.1-.6t-.4-1.2-.3-1.5q-.7-.5-.7-2%200-.8-.3-.8t-.1-.6q.1-.5-.2-.5t-.2-.6-.2-.6-.2-.6-.2-.6q-.5%200-.2-.4.1-.4-.4-1t-.5-1.2-.1-.5-.1-.7-.3-.3q-.6.3-.2-.6t-.2-.6-.4-1.1c0-.6-.9-2.7-1.5-3.2q-.5-.5-.6-1.5l-.2-1.5q0-.3-.4%200-.3%200-.5-.6c0-1.9-.7-3.3-1.2-3q-.4.2-.2-.3.1-.6-.3-1t-.3-.9-.3-.3-.2-.4-.2-.4-.2-.4c.3-.4-.5-2.4-1-2.4q-.3%200-.1-.4.1-.3-.2-.3t-.3-.3c.2-.6-1-2.9-1.3-2.6q-.3%200-.1-.4.2-.6-.4-.9a1%201%200%200%201-.7-1%201%201%200%200%200-.6-.9q-.5-.1-.3-.6c.3-.5-.9-2.7-1.5-2.7q-.3%200-.2-.3c.4-.3-.7-2.3-1.4-2.6a1%201%200%200%201-.4-.8q.2-.6-.4-.8-.5-.4-.8-1.4-.2-1-.6-1-.4.3-.4-.4c0-.9-1-2.2-1.3-1.8q-.2.1-.5-1t-.8-1.5q-.5-.2-.3-.6t-.4-.6q-.5-.1-.4-.5%200-.3-.4-1c-.6-.9-1-1-2.6-.6m6.7%2099-1.5%201.5-1.4%201.3%201.3-1.5q1.8-1.8%201.6-1.3M281%20280.8q-1.7%201.6-2%201.7%200-.2%201.6-1.7l1.9-1.8z'/%3e%3cpath%20d='M308%2031.8q.8.6%201.1.6.2%200-.3-.6l-1.2-.5q-.2%200%20.4.5m30.9%2024.5%201.7%201.5-1.3-1.5q-1.5-1.6-1.8-1.6%200%20.2%201.4%201.5M58.4%2058.8l-2%202%202.1-1.9c1.9-1.8%202.2-2.2%202-2.2zM343.6%2061q1.4%201.5%201.7%201.6l-1.4-1.6-1.7-1.5q0%20.2%201.4%201.5m21%2026q.6%201%201%20.8%200-.3-.7-1l-1-1zm2.1%202.8q.1.6.8%201.6t.8.8l-.8-1.6q-.7-1-.8-.8M135%20106.1q-1.2.9-.4.6c.7-.4%202-1.6%201.7-1.6q-.3%200-1.3%201m-16%2013.3-1.3%201.5%201.4-1.3%201.5-1.5q.2-.5-1.6%201.3m266.1%205.6q.5%201.1.6%201c.2-.1-.5-2.2-.8-2.2zm.8%201.8q0%20.4.5%201.3t.6.6l-.6-1.4q-.5-.8-.5-.5m-280.2%208.5q-1%201.3-.2.7c.7-.6%201.6-2%201.3-2zm293.9%2056.1q0%201.2.2.7v-1.4q-.2-.5-.2.7m-85.9%208.4q0%202.3.2%201.3v-2.8q-.2-.9-.2%201.5m85.9%208.8q0%201.1.2.7v-1.4q-.2-.5-.2.7m-8.4%2049.3q-.3%201-.1%201.4l.4-1.1q.2-1.1%200-1.4zm-110.8%2022.9-1.6%201.7%202-1.7q1.6-1.7%201.5-1.8zm-249.1%2027%20.5%201q.6.7.6.4%200-.4-.6-1.1-.5-.6-.5-.4m131.7%201.2q0%20.7.3%201.6c.4%201%20.4%200%200-1.4q-.4-1.2-.3-.2m5%2016.8.8%202q.6%201.2.5.5c-.3-1-1.3-3.1-1.3-2.5M55.5%20338.4l1.2%201.3%201.3%201.1-1.1-1.2q-1.5-1.7-1.4-1.2m285.7%203.1-1.6%201.7%201.7-1.6c1.6-1.4%201.8-1.8%201.6-1.8zm-280.5%202.3%201.8%201.5-1.4-1.6-1.7-1.5zm123.9%2014q.6%201.1.8%201.2l-.4-1.2-.8-1.2q-.2.2.4%201.2m79.9%207q.6%201.5%201%201.6l-.7-1.6q-.6-1.4-1-1.5zm-177.9%200q.8%201%201.1.8%200-.3-.9-1l-1-.6zm104.4%202.6%201%201.3c.4%200-.6-1.5-1.2-2q-.7-.5.2.7m-100.6%200%201.6.9q.3-.1-.8-.8l-1.6-.8q-.2.1.8.8m33.4%2017.4c0%20.3%202%201%202.3.8l-1-.6zm3.5%201.5%201.4.6q.3%200-.6-.6t-1.3-.5q-.3%200%20.5.5m63.4%2013.4h1.4q.5-.2-.7-.2t-.7.2m17.2%200h1.4q.5-.2-.7-.2t-.7.2'/%3e%3c/g%3e%3c/svg%3e", Pt = ["aria-label"], It = /* @__PURE__ */ L({
191
+ __name: "BlueSpinner",
192
+ props: {
193
+ size: {},
194
+ color: {},
195
+ width: {},
196
+ label: {}
197
+ },
198
+ setup(c) {
199
+ const n = c, e = w(() => {
200
+ const t = n.size ?? 20;
201
+ return typeof t == "number" ? `${t}px` : t;
202
+ });
203
+ return (t, o) => (a(), d("span", {
204
+ class: "bluevue-spinner",
205
+ role: "status",
206
+ "aria-label": t.label,
207
+ style: D({
208
+ width: e.value,
209
+ height: e.value,
210
+ borderWidth: `${t.width ?? 2}px`,
211
+ borderTopColor: t.color
212
+ })
213
+ }, null, 12, Pt));
214
+ }
215
+ }), Et = ["type", "disabled", "title", "aria-label", "aria-busy"], ce = /* @__PURE__ */ L({
216
+ __name: "BlueButton",
217
+ props: {
218
+ variant: {},
219
+ color: {},
220
+ density: {},
221
+ icon: {},
222
+ appendIcon: {},
223
+ loading: { type: Boolean },
224
+ disabled: { type: Boolean },
225
+ block: { type: Boolean },
226
+ tooltip: {},
227
+ theme: {},
228
+ type: {}
229
+ },
230
+ emits: ["click"],
231
+ setup(c) {
232
+ const n = c, e = { compact: 24, regular: 30, comfortable: 36 }, t = { compact: "px-2", regular: "px-3", comfortable: "px-4" }, o = w(() => n.variant ?? "tonal"), l = w(() => n.density ?? "regular"), s = w(() => n.theme !== "light"), u = w(() => e[l.value]), r = w(() => l.value === "compact" ? 14 : 16), v = w(() => {
233
+ if (n.disabled)
234
+ return o.value === "text" || o.value === "icon" ? "opacity-30 cursor-not-allowed" : "opacity-30 cursor-not-allowed bg-[#9e9e9e80] text-[#afafaf]";
235
+ switch (o.value) {
236
+ case "filled":
237
+ return "bluevue-elevation-1 cursor-pointer text-white hover:brightness-125";
238
+ case "text":
239
+ return s.value ? "cursor-pointer text-[#ffffffcc] hover:bg-[#ffffff11] hover:text-white" : "cursor-pointer text-[#000000cc] hover:bg-[#00000011] hover:text-black";
240
+ case "icon":
241
+ return s.value ? "cursor-pointer text-[#ffffffaa] hover:text-white" : "cursor-pointer text-[#00000099] hover:text-black";
242
+ default:
243
+ return s.value ? "cursor-pointer bg-[#ffffff11] text-white hover:bg-[#ffffff22]" : "cursor-pointer bg-[#00000011] text-black hover:bg-[#00000022]";
244
+ }
245
+ }), f = w(() => o.value === "filled" && !n.disabled ? n.color || "var(--bluevue-primary)" : void 0), x = w(
246
+ () => n.color && (o.value === "text" || o.value === "icon") ? n.color : void 0
247
+ );
248
+ return (p, F) => (a(), d("button", {
249
+ type: p.type || "button",
250
+ disabled: p.disabled,
251
+ title: p.tooltip,
252
+ "aria-label": o.value === "icon" ? p.tooltip : void 0,
253
+ "aria-busy": p.loading || void 0,
254
+ class: b(["inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap transition-colors duration-200", [
255
+ v.value,
256
+ o.value === "icon" ? "rounded-[6px]" : "rounded-[4px]",
257
+ o.value === "icon" ? "" : t[l.value],
258
+ p.block ? "w-full" : "",
259
+ // A button waiting on its own result stays where it is and reads as busy rather than
260
+ // inviting a second press.
261
+ p.loading ? "pointer-events-none" : ""
262
+ ]]),
263
+ style: D({
264
+ height: `${u.value}px`,
265
+ width: o.value === "icon" ? `${u.value}px` : void 0,
266
+ backgroundColor: f.value
267
+ }),
268
+ onClick: F[0] || (F[0] = ($) => p.$emit("click", $))
269
+ }, [
270
+ p.loading ? (a(), U(It, {
271
+ key: 0,
272
+ size: r.value,
273
+ color: o.value === "filled" ? "#ffffff" : void 0
274
+ }, null, 8, ["size", "color"])) : p.icon ? (a(), U(H, {
275
+ key: 1,
276
+ name: p.icon,
277
+ size: r.value,
278
+ color: x.value
279
+ }, null, 8, ["name", "size", "color"])) : C("", !0),
280
+ o.value !== "icon" ? (a(), d("span", {
281
+ key: 2,
282
+ class: b(["min-w-0 truncate font-medium uppercase tracking-wide", l.value === "compact" ? "text-[12px]" : "text-[13px]"])
283
+ }, [
284
+ j(p.$slots, "default")
285
+ ], 2)) : C("", !0),
286
+ p.appendIcon && o.value !== "icon" ? (a(), U(H, {
287
+ key: 3,
288
+ name: p.appendIcon,
289
+ size: r.value,
290
+ color: x.value
291
+ }, null, 8, ["name", "size", "color"])) : C("", !0)
292
+ ], 14, Et));
293
+ }
294
+ }), At = {
295
+ key: 0,
296
+ class: "flex items-start gap-3 px-5 pt-4 pb-3"
297
+ }, jt = { class: "min-w-0 flex-1" }, Ot = { class: "truncate text-base leading-tight" }, Nt = {
298
+ key: 0,
299
+ class: "mt-1 text-xs leading-relaxed text-[#ffffff88]"
300
+ }, Wt = {
301
+ key: 2,
302
+ class: "flex items-center justify-between gap-3 border-t border-[#ffffff0d] px-5 py-3"
303
+ }, $e = /* @__PURE__ */ L({
304
+ __name: "BlueDialog",
305
+ props: {
306
+ modelValue: { type: Boolean },
307
+ title: {},
308
+ icon: {},
309
+ iconColor: {},
310
+ subtitle: {},
311
+ persistent: { type: Boolean },
312
+ width: {},
313
+ bodyClass: {}
314
+ },
315
+ emits: ["update:modelValue"],
316
+ setup(c, { expose: n, emit: e }) {
317
+ const t = c, o = e, l = Ke(), s = q(null), u = w(() => !!(t.title || l.header)), r = (p) => {
318
+ const F = s.value;
319
+ F && (p && !F.open && F.showModal(), !p && F.open && F.close());
320
+ };
321
+ pe(() => r(t.modelValue)), X(() => t.modelValue, r);
322
+ const v = () => {
323
+ var p;
324
+ return (p = s.value) == null ? void 0 : p.close();
325
+ }, f = (p) => {
326
+ t.persistent && p.preventDefault();
327
+ }, x = (p) => {
328
+ !t.persistent && p.target === s.value && v();
329
+ };
330
+ return n({ close: v }), (p, F) => (a(), d("dialog", {
331
+ ref_key: "dialogRef",
332
+ ref: s,
333
+ class: "bluevue-dialog",
334
+ onClose: F[0] || (F[0] = ($) => o("update:modelValue", !1)),
335
+ onCancel: f,
336
+ onClick: x
337
+ }, [
338
+ i("div", {
339
+ class: "bluevue-panel relative max-w-full rounded-lg text-white",
340
+ style: D({ width: p.width || "624px" })
341
+ }, [
342
+ u.value ? (a(), d("header", At, [
343
+ j(p.$slots, "header", {}, () => [
344
+ p.icon ? (a(), U(H, {
345
+ key: 0,
346
+ name: p.icon,
347
+ size: 22,
348
+ color: p.iconColor || "#42A5F5",
349
+ class: "mt-[2px]"
350
+ }, null, 8, ["name", "color"])) : C("", !0),
351
+ i("div", jt, [
352
+ i("div", Ot, B(p.title), 1),
353
+ p.subtitle ? (a(), d("div", Nt, B(p.subtitle), 1)) : C("", !0)
354
+ ])
355
+ ]),
356
+ p.persistent ? C("", !0) : (a(), U(ce, {
357
+ key: 0,
358
+ variant: "icon",
359
+ icon: "mdi-close",
360
+ tooltip: "Close",
361
+ onClick: v
362
+ }))
363
+ ])) : p.persistent ? C("", !0) : (a(), U(ce, {
364
+ key: 1,
365
+ variant: "icon",
366
+ icon: "mdi-close",
367
+ tooltip: "Close",
368
+ class: "absolute right-3 top-3 z-10",
369
+ onClick: v
370
+ })),
371
+ i("div", {
372
+ class: b([p.bodyClass || "px-5 py-4", u.value ? "border-t border-[#ffffff0d]" : ""])
373
+ }, [
374
+ j(p.$slots, "default")
375
+ ], 2),
376
+ M(l).footer ? (a(), d("footer", Wt, [
377
+ j(p.$slots, "footer")
378
+ ])) : C("", !0)
379
+ ], 4)
380
+ ], 544));
381
+ }
382
+ }), Ut = ["src"], Kt = {
383
+ key: 0,
384
+ class: "mt-[15px] text-center text-base text-white"
385
+ }, Gt = /* @__PURE__ */ L({
386
+ __name: "BlueLoadingDialog",
387
+ props: {
388
+ modelValue: { type: Boolean },
389
+ message: {},
390
+ dismissible: { type: Boolean }
391
+ },
392
+ emits: ["update:modelValue"],
393
+ setup(c, { emit: n }) {
394
+ const e = n;
395
+ return (t, o) => (a(), U($e, {
396
+ "model-value": t.modelValue,
397
+ persistent: !t.dismissible,
398
+ width: "320px",
399
+ "body-class": "flex flex-col items-center justify-center px-6 pt-7 pb-5",
400
+ "onUpdate:modelValue": o[0] || (o[0] = (l) => e("update:modelValue", l))
401
+ }, {
402
+ default: N(() => [
403
+ i("img", {
404
+ src: M(Lt),
405
+ alt: "",
406
+ class: "bluevue-loading__icon mb-6 h-[100px] w-[100px]"
407
+ }, null, 8, Ut),
408
+ t.message ? (a(), d("span", Kt, B(t.message), 1)) : C("", !0)
409
+ ]),
410
+ _: 1
411
+ }, 8, ["model-value", "persistent"]));
412
+ }
413
+ }), Ht = 5e3, ue = q([]), we = /* @__PURE__ */ new Map();
414
+ let Jt = 0;
415
+ const lt = (c) => {
416
+ const n = we.get(c);
417
+ n !== void 0 && (clearTimeout(n), we.delete(c));
418
+ }, Me = (c) => {
419
+ lt(c), ue.value = ue.value.filter((n) => n.id !== c);
420
+ }, ot = (c, n = {}) => {
421
+ const e = n.severity ?? "info", t = n.timeout ?? (e === "error" ? 0 : Ht), o = ue.value[ue.value.length - 1];
422
+ if (o && o.text === c && o.severity === e)
423
+ return o.repeats += 1, lt(o.id), t > 0 && we.set(o.id, window.setTimeout(() => Me(o.id), t)), o.id;
424
+ const l = { id: ++Jt, text: c, severity: e, repeats: 1 };
425
+ return ue.value = [...ue.value, l].slice(-4), t > 0 && we.set(l.id, window.setTimeout(() => Me(l.id), t)), l.id;
426
+ }, Yt = (c, n = "Request failed") => {
427
+ var o, l;
428
+ const e = (l = (o = c == null ? void 0 : c.response) == null ? void 0 : o.data) == null ? void 0 : l.detail, t = c == null ? void 0 : c.message;
429
+ return ot(e || t || n, { severity: "error" });
430
+ };
431
+ function Xt() {
432
+ return { notices: Ue(ue), notify: ot, notifyError: Yt, dismiss: Me };
433
+ }
434
+ const Zt = { class: "min-w-0 flex-1 text-[13px] leading-snug" }, Qt = {
435
+ key: 0,
436
+ class: "text-[#ffffff88]"
437
+ }, el = /* @__PURE__ */ L({
438
+ __name: "BlueSnackbar",
439
+ props: {
440
+ position: {}
441
+ },
442
+ setup(c) {
443
+ const n = c, { notices: e, dismiss: t } = Xt(), o = {
444
+ success: { icon: "mdi-check-circle-outline", color: "#66BB6A" },
445
+ error: { icon: "mdi-alert-circle-outline", color: "var(--bluevue-error)" },
446
+ warning: { icon: "mdi-alert-outline", color: "#FFB74D" },
447
+ info: { icon: "mdi-information-outline", color: "#42A5F5" }
448
+ }, l = w(() => {
449
+ switch (n.position) {
450
+ case "bottom-left":
451
+ return "bottom-4 left-4 items-start";
452
+ case "top-right":
453
+ return "top-4 right-4 items-end";
454
+ case "top-left":
455
+ return "top-4 left-4 items-start";
456
+ default:
457
+ return "bottom-4 right-4 items-end";
458
+ }
459
+ }), s = w(() => {
460
+ var u;
461
+ return (u = n.position) != null && u.startsWith("top") ? [...e.value].reverse() : e.value;
462
+ });
463
+ return (u, r) => (a(), d("div", {
464
+ class: b(["pointer-events-none fixed z-[2000] flex max-w-[min(90vw,420px)] flex-col gap-2", l.value]),
465
+ role: "status",
466
+ "aria-live": "polite"
467
+ }, [
468
+ O(dt, { name: "bluevue-notice" }, {
469
+ default: N(() => [
470
+ (a(!0), d(J, null, Z(s.value, (v) => (a(), d("div", {
471
+ key: v.id,
472
+ class: "bluevue-panel pointer-events-auto flex items-center gap-3 rounded-[6px] py-2 pl-3 pr-2 text-white"
473
+ }, [
474
+ O(H, {
475
+ name: o[v.severity].icon,
476
+ size: 18,
477
+ color: o[v.severity].color
478
+ }, null, 8, ["name", "color"]),
479
+ i("span", Zt, [
480
+ oe(B(v.text) + " ", 1),
481
+ v.repeats > 1 ? (a(), d("span", Qt, "(×" + B(v.repeats) + ")", 1)) : C("", !0)
482
+ ]),
483
+ O(ce, {
484
+ variant: "icon",
485
+ density: "compact",
486
+ icon: "mdi-close",
487
+ tooltip: "Dismiss",
488
+ onClick: (f) => M(t)(v.id)
489
+ }, null, 8, ["onClick"])
490
+ ]))), 128))
491
+ ]),
492
+ _: 1
493
+ })
494
+ ], 2));
495
+ }
496
+ }), ko = /* @__PURE__ */ L({
497
+ __name: "BlueApp",
498
+ props: {
499
+ title: {},
500
+ logo: {},
501
+ icon: {},
502
+ width: {},
503
+ backdrop: {},
504
+ ignoreHostTheme: { type: Boolean }
505
+ },
506
+ setup(c) {
507
+ const n = c, { loading: e, hideLoading: t } = kt(), { primaryColor: o } = Ct();
508
+ return X(
509
+ o,
510
+ (l) => {
511
+ !n.ignoreHostTheme && l && Tt({ primary: l });
512
+ },
513
+ { immediate: !0 }
514
+ ), (l, s) => (a(), d("div", {
515
+ class: "min-h-screen w-full px-4 py-6",
516
+ style: D({ backgroundColor: l.backdrop || "#0C577B" })
517
+ }, [
518
+ O(Dt, {
519
+ title: l.title,
520
+ logo: l.logo,
521
+ icon: l.icon,
522
+ width: l.width
523
+ }, Ge({
524
+ default: N(() => [
525
+ j(l.$slots, "default")
526
+ ]),
527
+ _: 2
528
+ }, [
529
+ l.$slots.actions ? {
530
+ name: "actions",
531
+ fn: N(() => [
532
+ j(l.$slots, "actions")
533
+ ]),
534
+ key: "0"
535
+ } : void 0,
536
+ l.$slots.footer ? {
537
+ name: "footer",
538
+ fn: N(() => [
539
+ j(l.$slots, "footer")
540
+ ]),
541
+ key: "1"
542
+ } : void 0
543
+ ]), 1032, ["title", "logo", "icon", "width"]),
544
+ O(el),
545
+ O(Gt, {
546
+ "model-value": M(e).show,
547
+ message: M(e).message,
548
+ dismissible: M(e).dismissible,
549
+ "onUpdate:modelValue": M(t)
550
+ }, null, 8, ["model-value", "message", "dismissible", "onUpdate:modelValue"])
551
+ ], 4));
552
+ }
553
+ }), tl = ["aria-expanded", "aria-label", "title"], ll = /* @__PURE__ */ L({
554
+ __name: "BlueBanner",
555
+ props: {
556
+ text: {},
557
+ severity: { default: void 0 },
558
+ icon: { default: void 0 },
559
+ color: { default: void 0 },
560
+ background: { default: void 0 },
561
+ border: { default: void 0 },
562
+ expanded: { type: Boolean, default: void 0 }
563
+ },
564
+ emits: ["update:expanded"],
565
+ setup(c, { emit: n }) {
566
+ const e = {
567
+ error: { icon: "mdi-alert-circle-outline", color: "#EF9A9A", background: "#CF667926", border: "#CF667955" },
568
+ warning: { icon: "mdi-alert", color: "#FFB74D", background: "#FB8C0022", border: "#FB8C0055" },
569
+ info: { icon: "mdi-information-outline", color: "#81D4FA", background: "#4FC3F71A", border: "#4FC3F744" },
570
+ success: { icon: "mdi-check-circle-outline", color: "#A5D6A7", background: "#66BB6A22", border: "#66BB6A55" }
571
+ }, t = c, o = n, l = q(null), s = q(null), u = q(null), r = q(t.expanded ?? !0), v = q(0), f = q(!1), x = w(() => e[t.severity ?? "info"]), p = w(() => ({
572
+ color: t.color ?? x.value.color,
573
+ backgroundColor: t.background ?? x.value.background,
574
+ borderColor: t.border ?? x.value.border
575
+ })), F = w(() => r.value ? f.value ? { width: `${v.value}px` } : void 0 : { width: "0px" }), $ = w(() => f.value ? { width: `${v.value}px` } : void 0);
576
+ function V() {
577
+ const m = l.value, T = s.value, E = u.value;
578
+ if (!m || !T || !E)
579
+ return;
580
+ const k = m.style.cssText, A = T.style.cssText, K = E.style.cssText, Y = () => {
581
+ m.style.cssText = k, T.style.cssText = A, E.style.cssText = K, T.getBoundingClientRect(), m.classList.remove("bluevue-banner--measuring");
582
+ };
583
+ m.classList.add("bluevue-banner--measuring"), m.style.width = "100%", T.style.flex = "1 1 auto", T.style.width = "auto", E.style.width = "0px";
584
+ const te = T.getBoundingClientRect().width;
585
+ if (te <= 0) {
586
+ Y();
587
+ return;
588
+ }
589
+ E.style.width = "max-content";
590
+ const ee = Math.ceil(E.getBoundingClientRect().width);
591
+ v.value = Math.min(ee, Math.floor(te)), Y(), f.value = !0;
592
+ }
593
+ function R() {
594
+ V(), r.value = !r.value, o("update:expanded", r.value);
595
+ }
596
+ let P = null;
597
+ return pe(() => {
598
+ var T, E;
599
+ V(), (T = document.fonts) == null || T.ready.then(V);
600
+ const m = (E = l.value) == null ? void 0 : E.parentElement;
601
+ if (m) {
602
+ let k = m.clientWidth;
603
+ P = new ResizeObserver(() => {
604
+ m.clientWidth !== k && (k = m.clientWidth, requestAnimationFrame(V));
605
+ }), P.observe(m);
606
+ }
607
+ }), me(() => {
608
+ P == null || P.disconnect(), P = null;
609
+ }), X(() => t.text, V, { flush: "post" }), X(
610
+ () => t.expanded,
611
+ (m) => {
612
+ m !== void 0 && (r.value = m);
613
+ }
614
+ ), (m, T) => (a(), d("button", {
615
+ ref_key: "box",
616
+ ref: l,
617
+ type: "button",
618
+ class: "bluevue-banner bluevue-elevation-1-soft flex w-fit items-center rounded-[6px] border text-left cursor-pointer",
619
+ style: D(p.value),
620
+ "aria-expanded": r.value,
621
+ "aria-label": m.text,
622
+ title: m.text,
623
+ onClick: R
624
+ }, [
625
+ i("span", {
626
+ class: b(["mdi bluevue-banner__icon shrink-0", t.icon ?? x.value.icon])
627
+ }, null, 2),
628
+ i("span", {
629
+ ref_key: "reveal",
630
+ ref: s,
631
+ class: b(["bluevue-banner__reveal overflow-hidden", f.value ? "shrink-0" : ""]),
632
+ style: D(F.value)
633
+ }, [
634
+ i("span", {
635
+ ref_key: "label",
636
+ ref: u,
637
+ class: "bluevue-banner__text block whitespace-nowrap",
638
+ style: D($.value)
639
+ }, B(m.text), 5)
640
+ ], 6)
641
+ ], 12, tl));
642
+ }
643
+ }), ol = { class: "flex w-full min-w-0 items-center gap-2" }, xo = /* @__PURE__ */ L({
644
+ __name: "BlueBannerGroup",
645
+ props: {
646
+ banners: {}
647
+ },
648
+ setup(c) {
649
+ const n = c, e = q(null), t = q([]);
650
+ function o(s) {
651
+ const u = t.value.indexOf(s.text);
652
+ return u === -1 ? n.banners.indexOf(s) : n.banners.length + u;
653
+ }
654
+ function l(s, u) {
655
+ e.value = u ? s : null, u && (t.value = [...t.value.filter((r) => r !== s), s]);
656
+ }
657
+ return (s, u) => (a(), d("div", ol, [
658
+ (a(!0), d(J, null, Z(n.banners, (r) => (a(), U(ll, ke({
659
+ key: r.text,
660
+ ref_for: !0
661
+ }, r, {
662
+ expanded: e.value === r.text,
663
+ class: e.value === r.text ? "min-w-0 flex-1 !w-auto" : "shrink-0",
664
+ style: { order: o(r) },
665
+ "onUpdate:expanded": (v) => l(r.text, v)
666
+ }), null, 16, ["expanded", "class", "style", "onUpdate:expanded"]))), 128))
667
+ ]));
668
+ }
669
+ });
670
+ let nl = 0, Se = !1, Ne = !1;
671
+ const sl = () => {
672
+ if (Ne || typeof document > "u") return;
673
+ Ne = !0;
674
+ const c = () => {
675
+ Se = !1;
9
676
  };
10
677
  document.addEventListener("pointerdown", () => {
11
- d2 = !0;
12
- }, !0), document.addEventListener("pointerup", M, !0), document.addEventListener("pointercancel", M, !0);
13
- }, K2 = () => new Promise((M) => {
14
- const F = () => {
15
- document.removeEventListener("pointerup", F), document.removeEventListener("pointercancel", F), setTimeout(M);
678
+ Se = !0;
679
+ }, !0), document.addEventListener("pointerup", c, !0), document.addEventListener("pointercancel", c, !0);
680
+ }, al = () => new Promise((c) => {
681
+ const n = () => {
682
+ document.removeEventListener("pointerup", n), document.removeEventListener("pointercancel", n), setTimeout(c);
16
683
  };
17
- document.addEventListener("pointerup", F), document.addEventListener("pointercancel", F);
684
+ document.addEventListener("pointerup", n), document.addEventListener("pointercancel", n);
18
685
  });
19
- function m2(M = {}) {
20
- U2();
21
- const F = h(null), e = h(null), b = h(!1), s = `bluevue-popover-${++W2}`, r = h(null), f = T(() => {
22
- if (!r.value) return null;
23
- const [$, w] = r.value;
24
- return { getBoundingClientRect: () => new DOMRect($, w, 0, 0) };
25
- }), a = T(() => b.value ? f.value ?? F.value : null), { floatingStyles: x, isPositioned: p } = E2(a, e, {
686
+ function ye(c = {}) {
687
+ sl();
688
+ const n = q(null), e = q(null), t = q(!1), o = `bluevue-popover-${++nl}`, l = q(null), s = w(() => {
689
+ if (!l.value) return null;
690
+ const [$, V] = l.value;
691
+ return { getBoundingClientRect: () => new DOMRect($, V, 0, 0) };
692
+ }), u = w(() => t.value ? s.value ?? n.value : null), { floatingStyles: r, isPositioned: v } = ft(u, e, {
26
693
  // Stated so isPositioned drops back to false on close, and a second open is held invisible
27
694
  // until it has been placed rather than showing for a frame at wherever it last was.
28
- open: b,
29
- placement: M.placement ?? "bottom-end",
695
+ open: t,
696
+ placement: c.placement ?? "bottom-end",
30
697
  strategy: "fixed",
31
- whileElementsMounted: A2,
698
+ whileElementsMounted: vt,
32
699
  middleware: [
33
- z2(4),
34
- j2({ padding: 8 }),
35
- N2({ padding: 8 }),
36
- ...M.matchAnchorWidth ? [O2({
37
- apply: ({ rects: $, elements: w }) => {
38
- w.floating.style.minWidth = `${$.reference.width}px`;
700
+ ht(4),
701
+ bt({ padding: 8 }),
702
+ yt({ padding: 8 }),
703
+ ...c.matchAnchorWidth ? [gt({
704
+ apply: ({ rects: $, elements: V }) => {
705
+ V.floating.style.minWidth = `${$.reference.width}px`;
39
706
  }
40
707
  })] : []
41
708
  ]
42
709
  });
43
- let d = 0;
710
+ let f = 0;
44
711
  return {
45
- anchorRef: F,
712
+ anchorRef: n,
46
713
  popoverRef: e,
47
- popoverId: s,
48
- activatorProps: { popovertarget: s },
49
- isOpen: b,
50
- isPositioned: p,
51
- floatingStyles: x,
714
+ popoverId: o,
715
+ activatorProps: { popovertarget: o },
716
+ isOpen: t,
717
+ isPositioned: v,
718
+ floatingStyles: r,
52
719
  show: async ($) => {
53
- const w = ++d;
54
- if (r.value = $ ?? null, await r2(), d2 && await K2(), w !== d) return;
55
- const S = e.value;
56
- !S || S.matches(":popover-open") || S.showPopover();
720
+ const V = ++f;
721
+ if (l.value = $ ?? null, await _e(), Se && await al(), V !== f) return;
722
+ const R = e.value;
723
+ !R || R.matches(":popover-open") || R.showPopover();
57
724
  },
58
725
  hide: () => {
59
- d += 1;
726
+ f += 1;
60
727
  const $ = e.value;
61
- $ != null && $.matches(":popover-open") ? $.hidePopover() : b.value = !1;
728
+ $ != null && $.matches(":popover-open") ? $.hidePopover() : t.value = !1;
62
729
  },
63
730
  onToggle: ($) => {
64
- b.value = $.newState === "open", b.value || (r.value = null);
731
+ t.value = $.newState === "open", t.value || (l.value = null);
65
732
  }
66
733
  };
67
734
  }
68
- const G2 = {
735
+ const il = ["aria-describedby"], rl = ["id"], ie = /* @__PURE__ */ L({
736
+ __name: "BlueTooltip",
737
+ props: {
738
+ text: {},
739
+ placement: {},
740
+ openDelay: {},
741
+ disabled: { type: Boolean },
742
+ theme: {}
743
+ },
744
+ setup(c) {
745
+ const n = c, { anchorRef: e, popoverRef: t, popoverId: o, isPositioned: l, floatingStyles: s, show: u, hide: r, onToggle: v } = ye({
746
+ placement: n.placement ?? "top"
747
+ });
748
+ let f = null;
749
+ const x = () => {
750
+ f !== null && (clearTimeout(f), f = null);
751
+ }, p = () => {
752
+ n.disabled || !n.text || (x(), f = window.setTimeout(() => {
753
+ f = null, u();
754
+ }, n.openDelay ?? 300));
755
+ }, F = () => {
756
+ x(), r();
757
+ };
758
+ return me(x), ($, V) => (a(), d("span", {
759
+ ref_key: "anchorRef",
760
+ ref: e,
761
+ class: "inline-flex",
762
+ "aria-describedby": $.text && !$.disabled ? M(o) : void 0,
763
+ onMouseenter: p,
764
+ onMouseleave: F,
765
+ onFocusin: p,
766
+ onFocusout: F,
767
+ onKeydown: de(F, ["escape"])
768
+ }, [
769
+ j($.$slots, "default"),
770
+ i("div", {
771
+ id: M(o),
772
+ ref_key: "popoverRef",
773
+ ref: t,
774
+ popover: "manual",
775
+ class: "bluevue-popover",
776
+ style: D(M(s)),
777
+ onToggle: V[0] || (V[0] = //@ts-ignore
778
+ (...R) => M(v) && M(v)(...R))
779
+ }, [
780
+ i("div", {
781
+ role: "tooltip",
782
+ class: b(["bluevue-elevation-5 max-w-[280px] rounded-[4px] px-2 py-1 text-xs leading-snug transition-opacity duration-150", [
783
+ $.theme === "light" ? "bg-white text-black" : "bg-[#333333f2] text-white",
784
+ M(l) ? "opacity-100" : "opacity-0"
785
+ ]])
786
+ }, B($.text), 3)
787
+ ], 44, rl)
788
+ ], 40, il));
789
+ }
790
+ }), ul = {
69
791
  key: 0,
70
792
  class: "min-w-0 max-w-[45%] shrink-0"
71
- }, Y2 = ["title"], H2 = { key: 1 }, X2 = { class: "flex items-center min-w-0 shrink-[1000]" }, J2 = {
72
- key: 0,
73
- class: "relative group inline-flex items-center shrink-0 mr-2"
74
- }, Q2 = { class: "absolute bottom-full mb-1 right-0 hidden group-hover:block w-max max-w-[280px] px-2 py-1 text-xs rounded bg-gray-700 text-white z-[1000]" }, Z2 = /* @__PURE__ */ t("div", {
793
+ }, cl = ["title"], dl = { key: 1 }, pl = { class: "flex items-center min-w-0 shrink-[1000]" }, ml = /* @__PURE__ */ i("div", {
75
794
  id: "border-releif",
76
795
  class: "absolute left-[-20px] top-0 h-full w-[6px] bg-[#6699cc] z-[20] pointer-events-none"
77
- }, null, -1), e0 = ["disabled", "title", "onClick", "onContextmenu", "onPointerdown"], t0 = { class: "relative group inline-block min-w-0" }, l0 = {
78
- key: 0,
79
- class: "absolute bottom-full mb-1 left-1/2 -translate-x-1/2 hidden group-hover:block whitespace-no-wrap px-2 py-1 text-xs rounded bg-gray-700 text-white"
80
- }, n0 = {
796
+ }, null, -1), fl = ["disabled", "title", "onClick", "onContextmenu", "onPointerdown"], vl = {
81
797
  key: 0,
82
798
  class: "w-[1px] shrink-0 bg-[#FFFFFF22] my-2"
83
- }, o0 = {
799
+ }, hl = {
84
800
  key: 0,
85
801
  class: "w-[1px] shrink-0 bg-[#FFFFFF22] my-2 mr-[3px]"
86
- }, s0 = /* @__PURE__ */ t("span", { class: "self-center mdi mdi-menu-right text-[20px] mr-[2px] opacity-80" }, null, -1), a0 = [
87
- s0
88
- ], i0 = ["id"], r0 = ["disabled", "onClick"], u0 = 500, c0 = 850, d0 = 24, we = /* @__PURE__ */ Y({
802
+ }, bl = /* @__PURE__ */ i("span", { class: "self-center mdi mdi-menu-right text-[20px] mr-[2px] opacity-80" }, null, -1), yl = [
803
+ bl
804
+ ], gl = ["id"], ql = ["disabled", "onClick"], wl = 500, kl = 850, xl = 24, $o = /* @__PURE__ */ L({
89
805
  __name: "BlueButtonGroup",
90
806
  props: {
91
807
  buttonItems: {},
@@ -99,198 +815,400 @@ const G2 = {
99
815
  density: {}
100
816
  },
101
817
  emits: ["update:selected", "context-menu"],
102
- setup(M, { emit: F }) {
103
- const e = M, b = F, s = h([]), {
104
- anchorRef: r,
105
- popoverRef: f,
106
- popoverId: a,
107
- activatorProps: x,
108
- isPositioned: p,
109
- floatingStyles: d,
110
- hide: _,
111
- onToggle: P
112
- } = m2();
113
- let E = null, $ = !1;
114
- const w = {
115
- compact: { class: "px-2", total: 16 },
116
- regular: { class: "px-3", total: 24 },
117
- comfortable: { class: "px-4", total: 32 }
118
- }, S = h(null), B = h(null), o = h(null), y = h(!1), A = h(!1);
119
- let u = null;
120
- const R = () => {
121
- const n = o.value, q = S.value;
122
- if (!n || !q) return;
123
- const L = n.querySelectorAll("[data-bbg-label]"), j = w[e.density || "comfortable"].total;
124
- let k = 0;
125
- L.forEach((O) => {
126
- k += O.scrollWidth + j;
127
- }), k += Math.max(0, L.length - 1), y.value = k > c0;
128
- let D = B.value ? B.value.scrollWidth + d0 : 0;
129
- for (const O of Array.from(q.children))
130
- O.contains(n) && (D += O.clientWidth - n.clientWidth);
131
- A.value = k > q.clientWidth - D;
132
- }, z = () => {
133
- const n = e.buttonItems;
818
+ setup(c, { emit: n }) {
819
+ const e = c, t = n, o = q([]), {
820
+ anchorRef: l,
821
+ popoverRef: s,
822
+ popoverId: u,
823
+ activatorProps: r,
824
+ isPositioned: v,
825
+ floatingStyles: f,
826
+ hide: x,
827
+ onToggle: p
828
+ } = ye();
829
+ let F = null, $ = !1;
830
+ const V = {
831
+ compact: { class: "px-[11px]", total: 22 },
832
+ regular: { class: "px-[15px]", total: 30 },
833
+ comfortable: { class: "px-[19px]", total: 38 }
834
+ }, R = q(null), P = q(null), m = q(null), T = q(!1), E = q(!1);
835
+ let k = null;
836
+ const A = () => {
837
+ const y = m.value, S = R.value;
838
+ if (!y || !S) return;
839
+ const g = y.querySelectorAll("[data-bbg-label]"), I = V[e.density || "comfortable"].total;
840
+ let _ = 0;
841
+ g.forEach((Q) => {
842
+ _ += Q.scrollWidth + I;
843
+ }), _ += Math.max(0, g.length - 1), T.value = _ > kl;
844
+ let G = P.value ? P.value.scrollWidth + xl : 0;
845
+ for (const Q of Array.from(S.children))
846
+ Q.contains(y) && (G += Q.clientWidth - y.clientWidth);
847
+ E.value = _ > S.clientWidth - G;
848
+ }, K = () => {
849
+ const y = e.buttonItems;
134
850
  if (e.type === "switch") {
135
- const q = n.findIndex((j) => j.preSelected), L = q >= 0 ? q : 0;
136
- s.value = n.map((j, k) => k === L);
851
+ const S = y.findIndex((I) => I.preSelected), g = S >= 0 ? S : 0;
852
+ o.value = y.map((I, _) => _ === g);
137
853
  } else
138
- s.value = n.map((q) => !!q.preSelected);
139
- b("update:selected", s.value);
140
- }, N = (n) => {
141
- var L, j;
142
- if (e.disabled || e.buttonItems[n].disabled) return;
143
- const q = e.buttonItems[n];
144
- e.type === "switch" ? s.value[n] || (s.value = s.value.map((k, D) => D === n), (L = q.onSelected) == null || L.call(q)) : (s.value[n] = !s.value[n], s.value[n] && ((j = q.onSelected) == null || j.call(q))), b("update:selected", s.value);
145
- }, Q = (n, q) => {
146
- e.disabled || e.buttonItems[n].disabled || b("context-menu", { item: e.buttonItems[n], index: n, x: q.clientX, y: q.clientY });
147
- }, G = () => {
148
- E !== null && (clearTimeout(E), E = null);
149
- }, n2 = (n, q) => {
150
- if (e.disabled || e.buttonItems[n].disabled) return;
151
- G(), $ = !1;
152
- const { clientX: L, clientY: j } = q;
153
- E = window.setTimeout(() => {
154
- E = null, $ = !0, b("context-menu", { item: e.buttonItems[n], index: n, x: L, y: j });
155
- }, u0);
156
- }, a2 = (n) => {
854
+ o.value = y.map((S) => !!S.preSelected);
855
+ t("update:selected", o.value);
856
+ }, Y = (y) => {
857
+ var g, I;
858
+ if (e.disabled || e.buttonItems[y].disabled) return;
859
+ const S = e.buttonItems[y];
860
+ e.type === "switch" ? o.value[y] || (o.value = o.value.map((_, G) => G === y), (g = S.onSelected) == null || g.call(S)) : (o.value[y] = !o.value[y], o.value[y] && ((I = S.onSelected) == null || I.call(S))), t("update:selected", o.value);
861
+ }, te = (y, S) => {
862
+ e.disabled || e.buttonItems[y].disabled || t("context-menu", { item: e.buttonItems[y], index: y, x: S.clientX, y: S.clientY });
863
+ }, ee = () => {
864
+ F !== null && (clearTimeout(F), F = null);
865
+ }, re = (y, S) => {
866
+ if (e.disabled || e.buttonItems[y].disabled) return;
867
+ ee(), $ = !1;
868
+ const { clientX: g, clientY: I } = S;
869
+ F = window.setTimeout(() => {
870
+ F = null, $ = !0, t("context-menu", { item: e.buttonItems[y], index: y, x: g, y: I });
871
+ }, wl);
872
+ }, fe = (y) => {
157
873
  if ($) {
158
874
  $ = !1;
159
875
  return;
160
876
  }
161
- e.buttonItems[n].disabled || N(n);
162
- }, J = (n) => {
163
- n.action(), _();
877
+ e.buttonItems[y].disabled || Y(y);
878
+ }, ne = (y) => {
879
+ y.action(), x();
164
880
  };
165
- return s2(() => {
166
- var n;
167
- z(), r2(R), (n = document.fonts) == null || n.ready.then(R), typeof ResizeObserver < "u" && o.value && (u = new ResizeObserver(() => R()), u.observe(o.value));
168
- }), k2(() => {
169
- u == null || u.disconnect(), G();
170
- }), U(
881
+ return pe(() => {
882
+ var y;
883
+ K(), _e(A), (y = document.fonts) == null || y.ready.then(A), typeof ResizeObserver < "u" && m.value && (k = new ResizeObserver(() => A()), k.observe(m.value));
884
+ }), me(() => {
885
+ k == null || k.disconnect(), ee();
886
+ }), X(
171
887
  () => e.buttonItems.length,
172
- z,
888
+ K,
173
889
  { deep: !0, immediate: !0 }
174
- ), U(
175
- () => e.buttonItems.map((n) => n.name).join("|"),
176
- () => r2(R)
177
- ), (n, q) => {
178
- var L, j;
179
- return i(), c("div", {
890
+ ), X(
891
+ () => e.buttonItems.map((y) => y.name).join("|"),
892
+ () => _e(A)
893
+ ), (y, S) => {
894
+ var g, I;
895
+ return a(), d("div", {
180
896
  ref_key: "rowRef",
181
- ref: S,
897
+ ref: R,
182
898
  class: "flex w-full justify-between items-center"
183
899
  }, [
184
- n.label ? (i(), c("div", G2, [
185
- t("label", {
900
+ y.label ? (a(), d("div", ul, [
901
+ i("label", {
186
902
  ref_key: "labelRef",
187
- ref: B,
188
- class: m(["block truncate text-start mr-6", n.theme === "dark" ? "text-white" : "text-black"]),
189
- title: n.label
190
- }, g(n.label), 11, Y2)
191
- ])) : (i(), c("div", H2)),
192
- l2(n.$slots, "insetElement"),
193
- t("div", X2, [
194
- n.infoTooltip ? (i(), c("div", J2, [
195
- t("span", {
196
- class: m(["mdi mdi-information-outline text-[16px] opacity-60 cursor-help", n.theme === "dark" ? "text-white" : "text-black"])
197
- }, null, 2),
198
- t("div", Q2, g(n.infoTooltip), 1)
199
- ])) : C("", !0),
200
- t("div", {
903
+ ref: P,
904
+ class: b(["block truncate text-start mr-6", y.theme === "dark" ? "text-white" : "text-black"]),
905
+ title: y.label
906
+ }, B(y.label), 11, cl)
907
+ ])) : (a(), d("div", dl)),
908
+ j(y.$slots, "insetElement"),
909
+ i("div", pl, [
910
+ y.infoTooltip ? (a(), U(ie, {
911
+ key: 0,
912
+ text: y.infoTooltip,
913
+ theme: y.theme,
914
+ class: "items-center shrink-0 mr-2"
915
+ }, {
916
+ default: N(() => [
917
+ O(H, {
918
+ name: "mdi-information-outline",
919
+ size: 16,
920
+ label: y.infoTooltip,
921
+ class: b(["opacity-60 cursor-help", y.theme === "dark" ? "text-white" : "text-black"])
922
+ }, null, 8, ["label", "class"])
923
+ ]),
924
+ _: 1
925
+ }, 8, ["text", "theme"])) : C("", !0),
926
+ i("div", {
201
927
  ref_key: "trackRef",
202
- ref: o,
203
- class: m(["relative flex min-w-0 justify-end overflow-hidden rounded-[6px] bluevue-elevation-1 z-[666]", [n.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", n.disabled ? "opacity-30 pointer-events-none" : ""]]),
204
- style: W({ height: n.height || (n.density === "compact" ? "24px" : "30px") })
928
+ ref: m,
929
+ class: b(["relative flex min-w-0 justify-end overflow-hidden rounded-[6px] bluevue-elevation-1 z-[666]", [y.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", y.disabled ? "opacity-30 pointer-events-none" : ""]]),
930
+ style: D({ height: y.height || (y.density === "compact" ? "24px" : "30px") })
205
931
  }, [
206
- Z2,
207
- (i(!0), c(X, null, t2(n.buttonItems, (k, D) => (i(), c(X, {
208
- key: k.name
932
+ ml,
933
+ (a(!0), d(J, null, Z(y.buttonItems, (_, G) => (a(), d(J, {
934
+ key: _.name
209
935
  }, [
210
- t("button", {
211
- disabled: n.disabled || k.disabled,
212
- title: k.name,
213
- class: m(["flex min-w-0 items-center justify-center text-sm font-medium transition-colors duration-200", [
936
+ i("button", {
937
+ disabled: y.disabled || _.disabled,
938
+ title: _.name,
939
+ class: b(["flex min-w-0 items-center justify-center text-sm font-medium transition-colors duration-200", [
214
940
  // A group with no room left falls back to the tightest inset whatever the
215
941
  // density asks for, since the alternative is cutting into the names.
216
- A.value ? w.compact.class : w[n.density || "comfortable"].class,
942
+ E.value ? V.compact.class : V[y.density || "comfortable"].class,
217
943
  // The active choice is the one worth reading at a glance, so it keeps its full
218
944
  // name and the rest give up the room a crowded group needs.
219
- s.value[D] ? "shrink-0" : "",
220
- s.value[D] ? "text-white" : n.theme === "dark" ? "text-[#ffffff99]" : "text-[#00000066]",
221
- s.value[D] && n.type === "switch" ? "bluevue-elevation-5" : "",
222
- n.disabled || k.disabled ? "cursor-not-allowed" : "cursor-pointer",
945
+ o.value[G] ? "shrink-0" : "",
946
+ o.value[G] ? "text-white" : y.theme === "dark" ? "text-[#ffffff99]" : "text-[#00000066]",
947
+ o.value[G] && y.type === "switch" ? "bluevue-elevation-5" : "",
948
+ y.disabled || _.disabled ? "cursor-not-allowed" : "cursor-pointer",
223
949
  // Only the button's own state fades it: a disabled group is faded whole by the
224
950
  // track below, and dimming twice over would leave the names unreadable.
225
- k.disabled ? "opacity-30" : ""
951
+ _.disabled ? "opacity-30" : ""
226
952
  ]]),
227
- style: W({ backgroundColor: s.value[D] ? k.activeColor || "var(--bluevue-primary)" : void 0 }),
228
- onClick: (O) => a2(D),
229
- onContextmenu: u2((O) => Q(D, O), ["prevent"]),
230
- onPointerdown: (O) => n2(D, O),
231
- onPointerup: G,
232
- onPointerleave: G,
233
- onPointercancel: G
953
+ style: D({ backgroundColor: o.value[G] ? _.activeColor || "var(--bluevue-primary)" : void 0 }),
954
+ onClick: (Q) => fe(G),
955
+ onContextmenu: ae((Q) => te(G, Q), ["prevent"]),
956
+ onPointerdown: (Q) => re(G, Q),
957
+ onPointerup: ee,
958
+ onPointerleave: ee,
959
+ onPointercancel: ee
234
960
  }, [
235
- t("div", t0, [
236
- t("p", {
237
- "data-bbg-label": "",
238
- class: m(["truncate", [n.density === "compact" ? "text-[10px]" : "text-xs", y.value ? "max-w-[150px]" : ""]])
239
- }, g(k.name), 3),
240
- k.tooltip ? (i(), c("div", l0, g(k.tooltip), 1)) : C("", !0)
241
- ])
242
- ], 46, e0),
243
- D < n.buttonItems.length - 1 ? (i(), c("div", n0)) : C("", !0)
961
+ O(ie, {
962
+ text: _.tooltip || "",
963
+ theme: y.theme,
964
+ class: "min-w-0"
965
+ }, {
966
+ default: N(() => [
967
+ i("span", {
968
+ "data-bbg-label": "",
969
+ class: b(["block truncate", [y.density === "compact" ? "text-[10px]" : "text-xs", T.value ? "max-w-[150px]" : ""]])
970
+ }, B(_.name), 3)
971
+ ]),
972
+ _: 2
973
+ }, 1032, ["text", "theme"])
974
+ ], 46, fl),
975
+ G < y.buttonItems.length - 1 ? (a(), d("div", vl)) : C("", !0)
244
976
  ], 64))), 128)),
245
- (L = n.buttonsMenu) != null && L.length ? (i(), c("div", o0)) : C("", !0),
246
- (j = n.buttonsMenu) != null && j.length ? (i(), c(X, { key: 1 }, [
247
- t("button", $2({
977
+ (g = y.buttonsMenu) != null && g.length ? (a(), d("div", hl)) : C("", !0),
978
+ (I = y.buttonsMenu) != null && I.length ? (a(), d(J, { key: 1 }, [
979
+ i("button", ke({
248
980
  ref_key: "menuAnchorRef",
249
- ref: r
250
- }, I(x), {
981
+ ref: l
982
+ }, M(r), {
251
983
  type: "button",
252
984
  title: "More options",
253
- class: ["shrink-0 px-0 flex items-center justify-center h-full cursor-pointer", n.theme === "dark" ? "text-white" : "text-black"]
254
- }), a0, 16),
255
- t("div", {
256
- id: I(a),
985
+ class: ["shrink-0 px-0 flex items-center justify-center h-full cursor-pointer", y.theme === "dark" ? "text-white" : "text-black"]
986
+ }), yl, 16),
987
+ i("div", {
988
+ id: M(u),
257
989
  ref_key: "menuPopoverRef",
258
- ref: f,
990
+ ref: s,
259
991
  popover: "",
260
992
  class: "bluevue-popover",
261
- style: W(I(d)),
262
- onToggle: q[0] || (q[0] = //@ts-ignore
263
- (...k) => I(P) && I(P)(...k))
993
+ style: D(M(f)),
994
+ onToggle: S[0] || (S[0] = //@ts-ignore
995
+ (..._) => M(p) && M(p)(..._))
264
996
  }, [
265
- t("ul", {
266
- class: m(["bluevue-elevation-5 max-h-[60vh] overflow-y-auto border-[1px] rounded-[4px] border-[#FFFFFF22]", [
267
- n.theme === "dark" ? "text-[#FFFFFF99] bg-[var(--bluevue-surface)]" : "text-black bg-white",
268
- I(p) ? "opacity-100" : "opacity-0"
997
+ i("ul", {
998
+ class: b(["bluevue-elevation-5 max-h-[60vh] overflow-y-auto border-[1px] rounded-[4px] border-[#FFFFFF22]", [
999
+ y.theme === "dark" ? "text-[#FFFFFF99] bg-[var(--bluevue-surface)]" : "text-black bg-white",
1000
+ M(v) ? "opacity-100" : "opacity-0"
269
1001
  ]])
270
1002
  }, [
271
- (i(!0), c(X, null, t2(n.buttonsMenu, (k, D) => (i(), c("li", {
272
- key: k.name
1003
+ (a(!0), d(J, null, Z(y.buttonsMenu, (_, G) => (a(), d("li", {
1004
+ key: _.name
273
1005
  }, [
274
- t("button", {
275
- disabled: k.menuItemDisabled,
1006
+ i("button", {
1007
+ disabled: _.menuItemDisabled,
276
1008
  type: "button",
277
- class: m(["block w-full text-left whitespace-nowrap px-4 py-2 text-[14px]", [
278
- D < n.buttonsMenu.length - 1 ? "border-b border-white" : "",
279
- n.theme === "dark" ? "hover:bg-[#333333]" : "hover:bg-gray-100",
280
- k.menuItemDisabled ? "opacity-30 cursor-not-allowed" : "cursor-pointer"
1009
+ class: b(["block w-full text-left whitespace-nowrap px-4 py-2 text-[14px]", [
1010
+ G < y.buttonsMenu.length - 1 ? "border-b border-white" : "",
1011
+ y.theme === "dark" ? "hover:bg-[#333333]" : "hover:bg-gray-100",
1012
+ _.menuItemDisabled ? "opacity-30 cursor-not-allowed" : "cursor-pointer"
281
1013
  ]]),
282
- onClick: (O) => J(k)
283
- }, g(k.name), 11, r0)
1014
+ onClick: (Q) => ne(_)
1015
+ }, B(_.name), 11, ql)
284
1016
  ]))), 128))
285
1017
  ], 2)
286
- ], 44, i0)
1018
+ ], 44, gl)
287
1019
  ], 64)) : C("", !0)
288
1020
  ], 6)
289
1021
  ])
290
1022
  ], 512);
291
1023
  };
292
1024
  }
293
- }), m0 = { class: "rounded-lg overflow-hidden" }, p0 = { class: "flex-1 flex items-center" }, f0 = ["title"], ke = /* @__PURE__ */ Y({
1025
+ }), $l = { class: "flex w-full items-center justify-between" }, Bl = ["for", "title"], Cl = { key: 1 }, _l = { class: "ml-auto flex shrink-0 items-center" }, Tl = ["id", "name", "checked", "disabled", "aria-checked"], Bo = /* @__PURE__ */ L({
1026
+ __name: "BlueCheckbox",
1027
+ props: {
1028
+ modelValue: { type: [Boolean, null] },
1029
+ label: {},
1030
+ name: {},
1031
+ indeterminate: { type: Boolean },
1032
+ disabled: { type: Boolean },
1033
+ color: {},
1034
+ infoTooltip: {},
1035
+ theme: {}
1036
+ },
1037
+ emits: ["update:modelValue"],
1038
+ setup(c, { emit: n }) {
1039
+ const e = c, t = n, o = w(() => e.modelValue === !0), l = () => {
1040
+ e.disabled || t("update:modelValue", e.indeterminate ? !0 : !o.value);
1041
+ };
1042
+ return (s, u) => (a(), d("div", $l, [
1043
+ s.label ? (a(), d("label", {
1044
+ key: 0,
1045
+ for: s.name,
1046
+ class: b(["min-w-0 max-w-[45%] shrink-0 truncate text-start mr-6", [s.theme === "dark" ? "text-white" : "text-black", s.disabled ? "opacity-30" : "cursor-pointer"]]),
1047
+ title: s.label
1048
+ }, B(s.label), 11, Bl)) : (a(), d("div", Cl)),
1049
+ i("div", _l, [
1050
+ s.infoTooltip ? (a(), U(ie, {
1051
+ key: 0,
1052
+ text: s.infoTooltip,
1053
+ theme: s.theme,
1054
+ class: "items-center mr-2"
1055
+ }, {
1056
+ default: N(() => [
1057
+ O(H, {
1058
+ name: "mdi-information-outline",
1059
+ size: 16,
1060
+ label: s.infoTooltip,
1061
+ class: b(["opacity-60 cursor-help", s.theme === "dark" ? "text-white" : "text-black"])
1062
+ }, null, 8, ["label", "class"])
1063
+ ]),
1064
+ _: 1
1065
+ }, 8, ["text", "theme"])) : C("", !0),
1066
+ i("label", {
1067
+ class: b(["relative inline-flex items-center", s.disabled ? "opacity-30" : "cursor-pointer"])
1068
+ }, [
1069
+ i("input", {
1070
+ id: s.name,
1071
+ type: "checkbox",
1072
+ class: "peer absolute h-0 w-0 opacity-0",
1073
+ name: s.name,
1074
+ checked: o.value,
1075
+ disabled: s.disabled,
1076
+ "aria-checked": s.indeterminate ? "mixed" : o.value,
1077
+ onChange: l
1078
+ }, null, 40, Tl),
1079
+ i("span", {
1080
+ class: b(["bluevue-elevation-1 flex h-[18px] w-[18px] items-center justify-center rounded-[4px] border transition-colors peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[var(--bluevue-accent)]", [
1081
+ o.value || s.indeterminate ? "border-transparent" : s.theme === "dark" ? "border-[#ffffff44] bg-[#00000022]" : "border-[#00000044] bg-white"
1082
+ ]]),
1083
+ style: D({ backgroundColor: o.value || s.indeterminate ? s.color || "var(--bluevue-primary)" : void 0 })
1084
+ }, [
1085
+ o.value || s.indeterminate ? (a(), U(H, {
1086
+ key: 0,
1087
+ name: s.indeterminate ? "mdi-minus" : "mdi-check",
1088
+ size: 14,
1089
+ color: "#ffffff"
1090
+ }, null, 8, ["name"])) : C("", !0)
1091
+ ], 6)
1092
+ ], 2)
1093
+ ])
1094
+ ]));
1095
+ }
1096
+ }), Vl = { class: "min-w-0 truncate" }, Fl = ["aria-label"], Ml = /* @__PURE__ */ L({
1097
+ __name: "BlueChip",
1098
+ props: {
1099
+ label: {},
1100
+ variant: {},
1101
+ color: {},
1102
+ icon: {},
1103
+ closable: { type: Boolean },
1104
+ size: {}
1105
+ },
1106
+ emits: ["close"],
1107
+ setup(c) {
1108
+ const n = c, e = {
1109
+ success: "#66BB6A",
1110
+ error: "#EF5350",
1111
+ warning: "#FFB74D",
1112
+ info: "#42A5F5",
1113
+ neutral: "#90A4AE"
1114
+ }, t = w(() => e[n.color ?? "neutral"] ?? n.color ?? e.neutral), o = w(() => n.variant === "filled"), l = w(() => ({
1115
+ color: o.value ? "#ffffff" : t.value,
1116
+ backgroundColor: o.value ? t.value : n.variant === "outlined" ? "transparent" : `color-mix(in srgb, ${t.value} 18%, transparent)`,
1117
+ borderColor: n.variant === "outlined" ? t.value : "transparent"
1118
+ }));
1119
+ return (s, u) => (a(), d("span", {
1120
+ class: b(["inline-flex max-w-full shrink-0 items-center gap-1 whitespace-nowrap rounded-full border", s.size === "small" ? "h-[18px] px-2 text-[11px]" : "h-[22px] px-[10px] text-[12px]"]),
1121
+ style: D(l.value)
1122
+ }, [
1123
+ s.icon ? (a(), U(H, {
1124
+ key: 0,
1125
+ name: s.icon,
1126
+ size: s.size === "small" ? 12 : 14
1127
+ }, null, 8, ["name", "size"])) : C("", !0),
1128
+ i("span", Vl, [
1129
+ j(s.$slots, "default", {}, () => [
1130
+ oe(B(s.label), 1)
1131
+ ])
1132
+ ]),
1133
+ s.closable ? (a(), d("button", {
1134
+ key: 1,
1135
+ type: "button",
1136
+ class: "-mr-1 cursor-pointer opacity-70 transition-opacity hover:opacity-100",
1137
+ "aria-label": `Remove ${s.label}`,
1138
+ onClick: u[0] || (u[0] = (r) => s.$emit("close"))
1139
+ }, [
1140
+ O(H, {
1141
+ name: "mdi-close",
1142
+ size: s.size === "small" ? 12 : 14
1143
+ }, null, 8, ["size"])
1144
+ ], 8, Fl)) : C("", !0)
1145
+ ], 6));
1146
+ }
1147
+ }), Sl = {
1148
+ key: 0,
1149
+ class: "text-sm leading-relaxed text-[#ffffffcc]"
1150
+ }, Co = /* @__PURE__ */ L({
1151
+ __name: "BlueConfirmDialog",
1152
+ props: {
1153
+ modelValue: { type: Boolean },
1154
+ title: {},
1155
+ message: {},
1156
+ confirmLabel: {},
1157
+ cancelLabel: {},
1158
+ danger: { type: Boolean },
1159
+ icon: {}
1160
+ },
1161
+ emits: ["update:modelValue", "confirm"],
1162
+ setup(c, { emit: n }) {
1163
+ const e = n, t = q(null);
1164
+ function o() {
1165
+ var l;
1166
+ (l = t.value) == null || l.close(), e("confirm");
1167
+ }
1168
+ return (l, s) => (a(), U($e, {
1169
+ ref_key: "dialogRef",
1170
+ ref: t,
1171
+ "model-value": l.modelValue,
1172
+ title: l.title,
1173
+ icon: l.icon || (l.danger ? "mdi-alert-outline" : "mdi-help-circle-outline"),
1174
+ "icon-color": l.danger ? "var(--bluevue-error)" : void 0,
1175
+ width: "440px",
1176
+ "onUpdate:modelValue": s[1] || (s[1] = (u) => e("update:modelValue", u))
1177
+ }, {
1178
+ footer: N(() => [
1179
+ O(ce, {
1180
+ variant: "text",
1181
+ density: "compact",
1182
+ onClick: s[0] || (s[0] = (u) => {
1183
+ var r;
1184
+ return (r = t.value) == null ? void 0 : r.close();
1185
+ })
1186
+ }, {
1187
+ default: N(() => [
1188
+ oe(B(l.cancelLabel || "Cancel"), 1)
1189
+ ]),
1190
+ _: 1
1191
+ }),
1192
+ O(ce, {
1193
+ variant: "filled",
1194
+ density: "compact",
1195
+ color: l.danger ? "var(--bluevue-error)" : void 0,
1196
+ onClick: o
1197
+ }, {
1198
+ default: N(() => [
1199
+ oe(B(l.confirmLabel || "Confirm"), 1)
1200
+ ]),
1201
+ _: 1
1202
+ }, 8, ["color"])
1203
+ ]),
1204
+ default: N(() => [
1205
+ l.message ? (a(), d("p", Sl, B(l.message), 1)) : C("", !0),
1206
+ j(l.$slots, "default")
1207
+ ]),
1208
+ _: 3
1209
+ }, 8, ["model-value", "title", "icon", "icon-color"]));
1210
+ }
1211
+ }), Rl = { class: "rounded-lg overflow-hidden" }, zl = { class: "flex-1 flex items-center" }, Dl = ["title"], _o = /* @__PURE__ */ L({
294
1212
  __name: "BlueExpansiblePanel",
295
1213
  props: {
296
1214
  title: {},
@@ -298,64 +1216,130 @@ const G2 = {
298
1216
  theme: {}
299
1217
  },
300
1218
  emits: ["update:expanded"],
301
- setup(M, { emit: F }) {
302
- const e = M, b = F, s = h(e.expanded ?? !0), r = () => {
303
- s.value = !s.value, b("update:expanded", s.value);
1219
+ setup(c, { emit: n }) {
1220
+ const e = c, t = n, o = q(e.expanded ?? !0), l = () => {
1221
+ o.value = !o.value, t("update:expanded", o.value);
304
1222
  };
305
- return U(
1223
+ return X(
306
1224
  () => e.expanded,
307
- (f) => {
308
- f !== void 0 && (s.value = f);
1225
+ (s) => {
1226
+ s !== void 0 && (o.value = s);
309
1227
  },
310
1228
  { immediate: !0 }
311
- ), (f, a) => (i(), c("div", m0, [
312
- t("div", {
1229
+ ), (s, u) => (a(), d("div", Rl, [
1230
+ i("div", {
313
1231
  class: "flex items-center justify-between bg-transparent cursor-pointer select-none px-3 my-2",
314
- onClick: r
1232
+ onClick: l
315
1233
  }, [
316
- t("div", p0, [
317
- t("div", {
318
- class: m(["flex-1 h-px", e.theme === "dark" ? "bg-[#ffffff22]" : "bg-[#00000033]"])
1234
+ i("div", zl, [
1235
+ i("div", {
1236
+ class: b(["flex-1 h-px", e.theme === "dark" ? "bg-[#ffffff22]" : "bg-[#00000033]"])
319
1237
  }, null, 2),
320
- t("span", {
321
- class: m(["mx-3 min-w-0 truncate text-sm font-medium opacity-60", e.theme === "dark" ? "text-white" : "text-black"]),
322
- title: f.title
323
- }, g(f.title), 11, f0),
324
- t("div", {
325
- class: m(["flex-1 h-px", e.theme === "dark" ? "bg-[#ffffff11]" : "bg-[#00000033]"])
1238
+ i("span", {
1239
+ class: b(["mx-3 min-w-0 truncate text-sm font-medium opacity-60", e.theme === "dark" ? "text-white" : "text-black"]),
1240
+ title: s.title
1241
+ }, B(s.title), 11, Dl),
1242
+ i("div", {
1243
+ class: b(["flex-1 h-px", e.theme === "dark" ? "bg-[#ffffff11]" : "bg-[#00000033]"])
326
1244
  }, null, 2)
327
1245
  ]),
328
- t("span", {
329
- class: m(["mdi ml-3 text-[24px] leading-none opacity-40", [
330
- s.value ? "mdi-menu-up" : "mdi-menu-down",
1246
+ i("span", {
1247
+ class: b(["mdi ml-3 text-[24px] leading-none opacity-40", [
1248
+ o.value ? "mdi-menu-up" : "mdi-menu-down",
331
1249
  e.theme === "dark" ? "text-white" : "text-black"
332
1250
  ]])
333
1251
  }, null, 2)
334
1252
  ]),
335
- M2(I2, { name: "bluevue-expand" }, {
336
- default: R2(() => [
337
- c2(t("div", {
338
- class: m(["px-13 my-6 pb-2", e.theme === "dark" ? "border-[#555555]" : "border-[#dddddd]"])
1253
+ O(pt, { name: "bluevue-expand" }, {
1254
+ default: N(() => [
1255
+ Te(i("div", {
1256
+ class: b(["px-13 my-6 pb-2", e.theme === "dark" ? "border-[#555555]" : "border-[#dddddd]"])
339
1257
  }, [
340
- l2(f.$slots, "default")
1258
+ j(s.$slots, "default")
341
1259
  ], 2), [
342
- [P2, s.value]
1260
+ [mt, o.value]
343
1261
  ])
344
1262
  ]),
345
1263
  _: 3
346
1264
  })
347
1265
  ]));
348
1266
  }
349
- }), q0 = { class: "flex w-full justify-between items-center" }, v0 = {
1267
+ }), Ll = { class: "text-[13px]" }, Pl = {
1268
+ key: 0,
1269
+ class: "text-[11px] opacity-60"
1270
+ }, Il = ["accept", "multiple"], To = /* @__PURE__ */ L({
1271
+ __name: "BlueFileDrop",
1272
+ props: {
1273
+ accept: {},
1274
+ multiple: { type: Boolean },
1275
+ hint: {},
1276
+ label: {},
1277
+ disabled: { type: Boolean },
1278
+ theme: {}
1279
+ },
1280
+ emits: ["files"],
1281
+ setup(c, { emit: n }) {
1282
+ const e = c, t = n, o = q(), l = q(!1), s = q(0), u = (f) => {
1283
+ e.disabled || !(f != null && f.length) || t("files", Array.from(f));
1284
+ }, r = (f) => {
1285
+ var x;
1286
+ s.value = 0, l.value = !1, u(((x = f.dataTransfer) == null ? void 0 : x.files) ?? null);
1287
+ }, v = (f) => {
1288
+ const x = f.target;
1289
+ u(x.files), x.value = "";
1290
+ };
1291
+ return (f, x) => (a(), d("div", {
1292
+ class: b(["w-full", f.disabled ? "pointer-events-none opacity-30" : ""])
1293
+ }, [
1294
+ i("button", {
1295
+ type: "button",
1296
+ class: b(["flex w-full cursor-pointer flex-col items-center justify-center gap-1 rounded-[8px] border border-dashed px-4 py-6 text-center transition-colors", [
1297
+ l.value ? "border-[var(--bluevue-accent)] bg-[var(--bluevue-accent)]/10" : f.theme === "light" ? "border-[#00000033] hover:bg-[#00000006]" : "border-[#ffffff33] hover:bg-[#ffffff08]",
1298
+ f.theme === "light" ? "text-black" : "text-white"
1299
+ ]]),
1300
+ onClick: x[0] || (x[0] = (p) => {
1301
+ var F;
1302
+ return (F = o.value) == null ? void 0 : F.click();
1303
+ }),
1304
+ onDragenter: x[1] || (x[1] = ae((p) => {
1305
+ s.value += 1, l.value = !0;
1306
+ }, ["prevent"])),
1307
+ onDragover: x[2] || (x[2] = ae(() => {
1308
+ }, ["prevent"])),
1309
+ onDragleave: x[3] || (x[3] = ae((p) => {
1310
+ s.value -= 1, l.value = s.value > 0;
1311
+ }, ["prevent"])),
1312
+ onDrop: ae(r, ["prevent"])
1313
+ }, [
1314
+ O(H, {
1315
+ name: "mdi-tray-arrow-up",
1316
+ size: 24,
1317
+ class: "opacity-70"
1318
+ }),
1319
+ i("span", Ll, B(f.label ?? "Drop a file here, or press to choose one"), 1),
1320
+ f.hint ? (a(), d("span", Pl, B(f.hint), 1)) : C("", !0)
1321
+ ], 34),
1322
+ i("input", {
1323
+ ref_key: "input",
1324
+ ref: o,
1325
+ type: "file",
1326
+ class: "hidden",
1327
+ accept: f.accept,
1328
+ multiple: f.multiple,
1329
+ onChange: v
1330
+ }, null, 40, Il)
1331
+ ], 2));
1332
+ }
1333
+ }), El = { class: "flex w-full justify-between items-center" }, Al = {
350
1334
  key: 0,
351
1335
  class: "min-w-0 max-w-[45%] shrink-0"
352
- }, h0 = ["for", "title"], b0 = { key: 1 }, x0 = {
353
- key: 2,
354
- class: "relative group inline-flex items-center shrink-0 mr-2 ml-auto"
355
- }, y0 = { class: "absolute bottom-full mb-1 right-0 hidden group-hover:block w-max max-w-[280px] px-2 py-1 text-xs rounded bg-gray-700 text-white z-[1000]" }, g0 = { class: "flex flex-col items-end min-w-0 shrink-[1000]" }, w0 = ["id", "name", "value", "placeholder", "disabled", "autofocus", "inputmode"], k0 = {
1336
+ }, jl = ["for", "title"], Ol = { key: 1 }, Nl = { class: "flex flex-col items-end min-w-0 shrink-[1000]" }, Wl = {
1337
+ key: 0,
1338
+ class: "flex shrink-0 items-center pl-2"
1339
+ }, Ul = ["id", "name", "value", "placeholder", "disabled", "autofocus", "inputmode"], Kl = {
356
1340
  key: 0,
357
1341
  class: "text-[14px] text-[var(--bluevue-error)]"
358
- }, w2 = /* @__PURE__ */ Y({
1342
+ }, Re = /* @__PURE__ */ L({
359
1343
  __name: "BlueInput",
360
1344
  props: {
361
1345
  modelValue: {},
@@ -376,171 +1360,288 @@ const G2 = {
376
1360
  errorMessages: {}
377
1361
  },
378
1362
  emits: ["update:modelValue"],
379
- setup(M, { emit: F }) {
380
- const e = M, b = F, s = T(() => e.errorMessages && e.errorMessages.length > 0), r = T(() => /^[°′″'"]+$/.test(e.suffix ?? "")), f = T(() => e.theme === "dark" ? "#FFFFFF11" : "#00000011"), a = /^-?\d*\.?\d*$/, x = (o) => o == null ? "" : String(o), p = h(x(e.modelValue)), d = h(null), _ = h(!1);
381
- s2(() => {
382
- var o;
383
- e.autofocus && ((o = d.value) == null || o.focus());
1363
+ setup(c, { emit: n }) {
1364
+ const e = c, t = n, o = w(() => e.errorMessages && e.errorMessages.length > 0), l = w(() => /^[°′″'"]+$/.test(e.suffix ?? "")), s = w(() => e.theme === "dark" ? "#FFFFFF11" : "#00000011"), u = /^-?\d*\.?\d*$/, r = (m) => m == null ? "" : String(m), v = q(r(e.modelValue)), f = q(null), x = q(!1);
1365
+ pe(() => {
1366
+ var m;
1367
+ e.autofocus && ((m = f.value) == null || m.focus());
384
1368
  });
385
- const P = (o) => {
386
- if (e.type !== "number") return o;
387
- if (o.trim() === "") return null;
388
- const y = Number(o);
389
- return Number.isFinite(y) ? y : null;
390
- }, E = (o) => {
391
- const y = e.min !== void 0 ? Math.max(o, e.min) : o;
392
- return e.max !== void 0 ? Math.min(y, e.max) : y;
393
- }, $ = (o) => {
394
- const y = o.target;
395
- if (e.type === "number" && !a.test(y.value)) {
396
- y.value = p.value;
1369
+ const p = (m) => {
1370
+ if (e.type !== "number") return m;
1371
+ if (m.trim() === "") return null;
1372
+ const T = Number(m);
1373
+ return Number.isFinite(T) ? T : null;
1374
+ }, F = (m) => {
1375
+ const T = e.min !== void 0 ? Math.max(m, e.min) : m;
1376
+ return e.max !== void 0 ? Math.min(T, e.max) : T;
1377
+ }, $ = (m) => {
1378
+ const T = m.target;
1379
+ if (e.type === "number" && !u.test(T.value)) {
1380
+ T.value = v.value;
397
1381
  return;
398
1382
  }
399
- p.value = y.value;
400
- const A = P(p.value);
401
- A === null && e.type === "number" || b("update:modelValue", A);
402
- }, w = (o) => {
1383
+ v.value = T.value;
1384
+ const E = p(v.value);
1385
+ E === null && e.type === "number" || t("update:modelValue", E);
1386
+ }, V = (m) => {
403
1387
  if (e.type !== "number" || e.disabled) return;
404
- const y = e.step ?? 1, A = typeof e.modelValue == "number" ? e.modelValue : Number(p.value) || 0, u = (String(y).split(".")[1] ?? "").length, R = E(Number((A + o * y).toFixed(u)));
405
- p.value = String(R), b("update:modelValue", R);
406
- }, S = () => {
1388
+ const T = e.step ?? 1, E = typeof e.modelValue == "number" ? e.modelValue : Number(v.value) || 0, k = (String(T).split(".")[1] ?? "").length, A = F(Number((E + m * T).toFixed(k)));
1389
+ v.value = String(A), t("update:modelValue", A);
1390
+ }, R = () => {
407
1391
  if (e.type === "number" && typeof e.modelValue == "number") {
408
- const o = E(e.modelValue);
409
- if (o !== e.modelValue) {
410
- b("update:modelValue", o), p.value = String(o);
1392
+ const m = F(e.modelValue);
1393
+ if (m !== e.modelValue) {
1394
+ t("update:modelValue", m), v.value = String(m);
411
1395
  return;
412
1396
  }
413
1397
  }
414
- p.value = x(e.modelValue);
415
- }, B = () => {
416
- _.value = !1, S();
1398
+ v.value = r(e.modelValue);
1399
+ }, P = () => {
1400
+ x.value = !1, R();
417
1401
  };
418
- return U(
1402
+ return X(
419
1403
  () => e.modelValue,
420
- (o) => {
421
- P(p.value) !== o && (p.value = x(o));
1404
+ (m) => {
1405
+ p(v.value) !== m && (v.value = r(m));
422
1406
  }
423
- ), (o, y) => {
424
- var A;
425
- return i(), c("div", q0, [
426
- o.label ? (i(), c("div", v0, [
427
- t("label", {
428
- for: o.name,
429
- class: m(["block truncate text-start mr-6", o.theme === "dark" ? "text-white" : "text-black"]),
430
- title: o.label
431
- }, g(o.label), 11, h0)
432
- ])) : (i(), c("div", b0)),
433
- l2(o.$slots, "insetElement"),
434
- o.infoTooltip ? (i(), c("div", x0, [
435
- t("span", {
436
- class: m(["mdi mdi-information-outline text-[16px] opacity-60 cursor-help", o.theme === "dark" ? "text-white" : "text-black"])
437
- }, null, 2),
438
- t("div", y0, g(o.infoTooltip), 1)
439
- ])) : C("", !0),
440
- t("div", g0, [
441
- t("div", {
442
- class: m(["relative flex items-center rounded-[6px] bluevue-inset-1 min-w-[90px] max-w-full", [
443
- o.disabled ? "opacity-30 pointer-events-none" : "",
444
- s.value ? "border-2 border-solid border-[var(--bluevue-error)]" : ""
1407
+ ), (m, T) => {
1408
+ var E;
1409
+ return a(), d("div", El, [
1410
+ m.label ? (a(), d("div", Al, [
1411
+ i("label", {
1412
+ for: m.name,
1413
+ class: b(["block truncate text-start mr-6", m.theme === "dark" ? "text-white" : "text-black"]),
1414
+ title: m.label
1415
+ }, B(m.label), 11, jl)
1416
+ ])) : (a(), d("div", Ol)),
1417
+ j(m.$slots, "insetElement"),
1418
+ m.infoTooltip ? (a(), U(ie, {
1419
+ key: 2,
1420
+ text: m.infoTooltip,
1421
+ theme: m.theme,
1422
+ class: "items-center shrink-0 mr-2 ml-auto"
1423
+ }, {
1424
+ default: N(() => [
1425
+ O(H, {
1426
+ name: "mdi-information-outline",
1427
+ size: 16,
1428
+ label: m.infoTooltip,
1429
+ class: b(["opacity-60 cursor-help", m.theme === "dark" ? "text-white" : "text-black"])
1430
+ }, null, 8, ["label", "class"])
1431
+ ]),
1432
+ _: 1
1433
+ }, 8, ["text", "theme"])) : C("", !0),
1434
+ i("div", Nl, [
1435
+ i("div", {
1436
+ class: b(["relative flex items-center rounded-[6px] bluevue-inset-1 min-w-[90px] max-w-full", [
1437
+ m.disabled ? "opacity-30 pointer-events-none" : "",
1438
+ o.value ? "border-2 border-solid border-[var(--bluevue-error)]" : ""
445
1439
  ]]),
446
- style: W({
447
- height: o.height || "30px",
448
- width: o.width || "auto",
449
- backgroundColor: f.value,
1440
+ style: D({
1441
+ height: m.height || "30px",
1442
+ width: m.width || "auto",
1443
+ backgroundColor: s.value,
450
1444
  paddingTop: "2px"
451
1445
  })
452
1446
  }, [
453
- t("input", {
454
- id: o.name,
1447
+ m.$slots.prepend ? (a(), d("div", Wl, [
1448
+ j(m.$slots, "prepend")
1449
+ ])) : C("", !0),
1450
+ i("input", {
1451
+ id: m.name,
455
1452
  ref_key: "inputRef",
456
- ref: d,
457
- name: o.name,
1453
+ ref: f,
1454
+ name: m.name,
458
1455
  type: "text",
459
- value: p.value,
460
- placeholder: o.placeholder,
461
- disabled: o.disabled,
462
- autofocus: o.autofocus,
463
- inputmode: o.type === "number" ? "decimal" : void 0,
464
- class: m(["w-full min-w-0 bg-transparent pl-4 text-sm font-medium outline-none", [
465
- o.suffix ? "pr-1" : "pr-4",
466
- o.theme === "dark" ? "text-white placeholder:text-[#ffffff44]" : "text-black placeholder:text-[#00000055]"
1456
+ value: v.value,
1457
+ placeholder: m.placeholder,
1458
+ disabled: m.disabled,
1459
+ autofocus: m.autofocus,
1460
+ inputmode: m.type === "number" ? "decimal" : void 0,
1461
+ class: b(["w-full min-w-0 bg-transparent text-sm font-medium outline-none", [
1462
+ m.$slots.prepend ? "pl-1" : "pl-4",
1463
+ m.suffix ? "pr-1" : "pr-4",
1464
+ m.theme === "dark" ? "text-white placeholder:text-[#ffffff44]" : "text-black placeholder:text-[#00000055]"
467
1465
  ]]),
468
1466
  onInput: $,
469
1467
  onKeydown: [
470
- y[0] || (y[0] = e2(u2((u) => w(1), ["prevent"]), ["up"])),
471
- y[1] || (y[1] = e2(u2((u) => w(-1), ["prevent"]), ["down"])),
472
- e2(S, ["enter"])
1468
+ T[0] || (T[0] = de(ae((k) => V(1), ["prevent"]), ["up"])),
1469
+ T[1] || (T[1] = de(ae((k) => V(-1), ["prevent"]), ["down"])),
1470
+ de(R, ["enter"])
473
1471
  ],
474
- onFocus: y[2] || (y[2] = (u) => _.value = !0),
475
- onBlur: B
476
- }, null, 42, w0),
477
- o.suffix ? (i(), c("span", {
478
- key: 0,
479
- class: m(["shrink-0 pr-4 pl-1 text-sm select-none", [
480
- o.theme === "dark" ? "text-[#ffffff66]" : "text-[#00000066]",
481
- r.value ? "translate-y-[0.22em]" : ""
1472
+ onFocus: T[2] || (T[2] = (k) => x.value = !0),
1473
+ onBlur: P
1474
+ }, null, 42, Ul),
1475
+ m.suffix ? (a(), d("span", {
1476
+ key: 1,
1477
+ class: b(["shrink-0 pr-4 pl-1 text-sm select-none", [
1478
+ m.theme === "dark" ? "text-[#ffffff66]" : "text-[#00000066]",
1479
+ l.value ? "translate-y-[0.22em]" : ""
482
1480
  ]])
483
- }, g(o.suffix), 3)) : C("", !0),
484
- t("div", {
1481
+ }, B(m.suffix), 3)) : C("", !0),
1482
+ i("div", {
485
1483
  class: "pointer-events-none absolute inset-0 rounded-[6px]",
486
- style: W({ border: `1px solid ${_.value ? "var(--bluevue-accent)" : "transparent"}` })
1484
+ style: D({ border: `1px solid ${x.value ? "var(--bluevue-accent)" : "transparent"}` })
487
1485
  }, null, 4)
488
1486
  ], 6),
489
- s.value ? (i(), c("div", k0, g(((A = o.errorMessages) == null ? void 0 : A[0]) || ""), 1)) : C("", !0)
1487
+ o.value ? (a(), d("div", Kl, B(((E = m.errorMessages) == null ? void 0 : E[0]) || ""), 1)) : C("", !0)
490
1488
  ])
491
1489
  ]);
492
1490
  };
493
1491
  }
494
- }), $0 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%3e%3cg%20fill='%23fff'%20fill-rule='evenodd'%3e%3cpath%20d='M185.5.4c0%20.2-1%20.3-2%20.2a7%207%200%200%200-2.4.1q-.3.4-1.3.2c-.5%200-1.3%200-1.6.4q-.7.5-.3%200%20.1-.5-.1-.5-.5%200-.5.4-.1.3-1.4.2-1.5-.3-2.5.5l-1%20.8%201%20.3q1.4.2.2.6-1%20.3.1.3.8%200%201.1.5t-.2.1q-.5-.1.1.3t.7%201q0%20.3%201.5%201.6%201.3%201.2.9%201-.6-.3%200%20.5.3.8.7.9t.4.6.8.5.7.3c-.1.6.5%201.7.9%201.5q.3-.1.3.2.1.4.7%201.1.7.6.1.3-.4-.2%201%201.1t1%201.2q-.5-.3-.3.1t1%20.5q.5%200%20.3.2c-.3.4.9%202.5%201.5%202.5q.5%200%201.2.9l.8.9-1-.8q-1-.9-.7-.2.2.6%201%201l1.4%201q.4.4-.3%200-1-1-.3.2.5.9%201%201t1.2.8.2.4q-.7-.6-.6.1%200%20.8%201%20.6.4%200%20.3.5%200%20.4.4.5l.7.1-.2.6q-.7.9.9.7.3%200%200%20.3%200%20.3.3.4.6%200%200%20.3t.4.8q1%20.6.5%200t.3%200q.6.5.5.9t.7%201.3.6%201%20.6.7q.9.7%201%201.3t.5%201q.4.2.1-.3-.2-.5.1-.2.5.3.5.8t.9%201.2q.7.5.3.4-.4-.2.5.7%201.1%201%201.3%201.7t1%201.5.8%201.3q0%20.4.6%201%20.9.6.3.6t.3.5q.7.5.8%201c0%201%20.2%201.2%201%201.5q.6.2.5.5-.2.4.4.7.6.4.6.6c0%201%20.9%202.7%201.2%202.2q.3-.6.4%200c.1%201.5%201%203.1%201.9%203.6q.8.4.6%201-.1.5.5%201.2.7.5.6%201.1-.1.5.7%201.1.7.5.6%201.2-.2.5.6.8%201%20.1.3.8t.2.6q.5%200%20.4.4-.2.3.1.4c.3%200%201%202.1%201%202.8q-.1.3.5.3t.4.3.4.6.1.9.3.5.2.4q-.7.2.3%201%201%20.6.4.6t.3.7c.5.3%201%201.2%201%201.8.2%201.5.9%203.2%201.4%203.5q.5.3%200%201-.8.7.2.3.7-.3.4.5-.1.7.2.8.3%200%20.4.7%200%20.8.5%201.2.6.6%200%20.3t-.5%200q0%20.4.6.7t.4%201c-.2%201%20.1%202%20.6%201.7q.2%200%200%20.6%200%20.8.3.8t.2.6.2.6.2.6.4.6%201.2.6.6.1.6%200%201.1.3q.6-.1.6.1.1.3.8.2t.8.2.6.2q.6-.2.6.4%200%20.5.6.6c.8%200%20.8%200%202%20.6q1%20.5%201.4.2.5-.3%201.2%200%201.2.5%200%20.2h-1c0%20.5%201.8.8%202.1.4q.3-.5.3.3t.9.6q2-.2%201.6.4c-.3.5%201.7%201.3%202.6%201q.8-.2.5.3-.2.7.6.5.7-.1%201%20.4.3.7%201%20.4.8%200%20.5.2-.1.4.3.3t1.2.5q.6.7%201.4.8.9%200%201%20.4%200%20.2.5.4t.3-.2c-.3-.6%201.1.5%201.6%201.2q.3.3.8.2t.8.3q.3.5-.1.2t-.5%200%20.8.7q.7%200%20.6-.2-.2-.3.4-.1.5.3.4.5c-.2.3.5.8%201%20.7q.4%200%20.8.6t1.1.7q.7%200%20.8.4%200%20.3.6.4.5%200%201%20.8.4.7.7.5t.4.2.4.2q.4%200%20.6.3.3.4-.1.2t-.5%200c0%20.5%201.5%201.1%202%201q.4%200%20.2.2c-.2.3.6%201%201.4%201l.6.4q.2.4-.2%200-.5%200-.5.2%200%20.4.6.4t.8.6.9.8.2-.3q-.2-.4.4.2.5.7.6.4l.7%201c.5%201.1%201.8%202%202.6%201.7q.3%200%20.1.2a39%2039%200%200%200%208%207.7c-.2.7.4%201.8.8%201.6q.3-.2%200%20.4-.2.9.5.4.8-.3.3.3-.7.8%201.2%201.2c.3%200%20.9.6.9%201q.1.4%201.1%201.4%201.1.9.5.6-.7-.6-.6%200%200%20.4%201%20.8.9.3%201%20.6h-.5q-.3-.2-.4.1.1.3%201.1%201%201%20.4%201%201t1%201.9%201%201.4q-.2.2.4.4.5.3.4.6-.2.4.4.6.5.2.4.6t.3.6q.6.3.6.7.3%201.7%201.1%201.8.6%200%20.4.6t.4%201q.6.2.3.3t.6%201q1%201%20.5.8t-.3.4q.4.5.7.6.4%200-.1.4-.7.4%200%20.3.7%200%20.7.3c-.2.5%201%202.9%201.3%202.9q.3%200%20.3.3-.2%201.3.4%201%20.4%200%20.4.2t-.4.4q-.4.1.5.8t.4.8q-.6%200%200%20.8.4.6.8.5.3-.2.2.4-.2.5%200%20.6.4%200%20.2.7t.1.4c.5-.3%201%20.9.8%202.3q-.2.9.3%201t.8.6q.4.8-.5%200-.4-.3.3.6c.8%201%20.9%201.2.4%201.5q-.7.4.2.4.7%200%20.4.6-.1.6.4%201.4t.3%201.4.2.3.3.6.3%201.2%200%20.3-.3.6q.2.8.6.1.4-.4.1.7t.2.8.2.8.2.7.3.6.2%201.7q.5.9%200%201-.3.1-.2.7.2.8.6%200%20.4-.4.1.7-.1%201%20.2%201.6.5.5.2.6t.3.6q.6.8%200%20.4t-.3.2.3%201.6.3.9.4.2-.5.4q-.6%200%200%20.3.4.4.3%201.1l.1%201q.3%200%20.3%201.8l.1%202.2q.6%201.2%200%202.1-.6.7%200%20.3.6-.5-.1%203.2-.1.9.2.6c.5-.2.3%204.5-.2%206.4l.1.9c.5%200%20.5%201.7%200%202q-.5.3%200%20.3c.3%200%20.4%201.1%200%201.8q-.2.5-.1%202.2%200%202-.6%201.9-.5%200-.2.3c.4.3.7%202.8.2%202.7q-.6-.1-.2%201%20.2.7-.3%201.3-.6.9.1.4t.1.1q-.3.6-.2%201%200%20.6-.2.6-.4.1-.6.8t.2.5%200%20.6l-.5%201.6q0%20.7-.4.8-.4%200%200%20.6.6.5-.2%201.2-.6.8-.2.9t.4.5-.4.1-.1.8-.3.8-.2.3v.7q-.4%200-.2%201%20.2%201.2-.3.7-.6-.3-.3.3.1.8-.5%202-.6%201.3-.3%201.2.5-.2%200%20.3l-.4%201q0%20.6-.5%201-.4.2-.2.6.1.5-.2.5t-.2.5-.1.6q-.4%200-.6.7l-.3%201.3q.4-.6.4-.1t-.7.9-.6.8-.3.3%200%20.4q.8.4.1.4-.4%200-.3.6t-.1.6q-.4%200-.2.4.1.3-.3.8t-.4%201.1v.3c-.5-.3-1.6%201.2-1.3%201.7q.2.3-.1.4-.5%200-.2.4%200%20.3-.2.4-.4%200-.3.3.2.4-.3.6t-.6.6.5.2q.4-.1-.2.3-.6.6-.7%201.3%200%20.5-.4.4-.6-.2-.4%201%200%20.5-.6%201.2-.6.9-.6.3%200-.4-.4.4c-.5%201-.6%201.4-.7%202.3q0%20.5-.3.3c-.3-.3-1.4.8-1.1%201.3q.2.3-.4.6-.5.1-.4.6.3.3-.4.4-.5%200-.5.5.2.4-.4%201-.8.8%200%20.3.4-.3-.5.6-1%201-.8%201.2.1.3-.3.3-.3%200-.2.3%200%20.4-.5.9-.8.8-.3%200t-.3%200q-.8.4-.2.8.6.3-.1.3c-.6%200-1.3%201-1.2%201.7q0%20.2-.5.3a1%201%200%200%200-.8.4q-.3.5.2.2t-.3.5q-.7.6-.6%201%20.1.2-.3.2c-.8%200-2.8%202.3-2.5%202.8q0%20.3-.9.9c-1%20.5-5.7%205-5.3%205l-.3.7q-.4.7-1%20.5-.4%200-.7.6-.4.8-.7.7-.4%200-1%201-.4.8-.5.6t-.8.6-.5.4-.4-.3q-.5.3-.3.9t-.3.3c-.4-.3-1.6.6-1.6%201.3q0%20.3-.5.2a1%201%200%200%200-.9.3q-.3.4.3.1t0%20.3-.9.5-.3.2-.3.3-1.2.8q-.8%201-.6.4.5-.7-.3%200-.5.6-1.2.8-.6.1-1.3%201-.6.7-.8.7c-.4-.2-1.3.4-1.1.7s-1.2%201-2.6%201.1q-.3%200-.2.4c.3.5-1%201-2.5%201.2q-.3%200-.2.5.2.5-.3.2-.7-.3-1%20.5-.5.7-1%20.5-.7-.2-.7.3%200%20.3-.3.2-.4-.2-.4.2%200%20.3-.4.2-.3-.2-.4.2%200%20.4-.4.1-.3%200-.4.2%200%20.4-.3.4-1.3-.2-1%20.5.1.3-.3.2-.6-.1-1%20.4-.6.4-1%20.3-.2-.1-.3.2t-.6.1q-.5%200-.6.3t-.3.2c-.4-.2-.4%203.3%200%203.9q.2.5%200%201.6%200%201.3.4%201.3.3%200%20.1%201.2t.2%201.2.2%201%20.2%201%20.1.5q0%20.6.3%201.2.5.6%200%20.6-.3%200%20.3%201l.6%201.2v.4l-.1%201q0%20.7.3.5.6-.3.2.7-.2%201%20.3%201t0%20.4q-.7.4%200%20.4c.8%200%201%201%20.2%201.3q-.3.2.2.2.7%200%20.5.7t.1.4.2.6.4.5%200%20.3q-.8%201%20.4.7.7.2-.2%201.1-.6.7.3.3t.2.3q-.6.9.4.7.3%200%20.1.7t.2.8q.2%200%20.4.9%200%20.7.4%201%20.3.1.2.7-.3.6.2.4.3-.2.4%200%200%20.5-.4.6-.2.1.4%201%20.9.8.3%201.2-.5.4.2.4c.7%200%201.3%201.2.6%201.2q-.4%200%20.2.5.8.6.2%201-.6.6.3.2.7-.3.5.2c-.4.6%200%201.7.6%201.4q.4-.2%200%20.2%200%20.5.3.9.7.3%200%20.3-.8%200%200%20.5c.7.5.8.7.8%201.7q0%20.5.4.3t.2.1c-.3.6.1%201.8.6%201.5.3-.2.5.6.4%201.5q0%20.2.3.3t.2.5.4.8.4.8q0%20.5.2.6t.4.8q0%20.7.4.8.3%200%20.2.4-.2.3.1.3t.2.6.3%201q.5.6.5%201.2c0%20.7.7%201.5%201%201.3s.8%201%20.6%201.4q-.2.3.2.4.3%200%20.2.4-.2.4.1.4.5.1%201.3%201.6.6%201.5.4%201.3-.5-.2-.2.4.3.5.5.4.3-.2.6.4.1.5-.2.4-.4-.2-.1.3.2.6.6.7t0%20.3q-.9.5%200%20.4.6%200%20.5.4t.5%201.1q.8.9.6%201-.2.3.2.3t.3.3.6%201q.6.8.5%201.4-.2.8.6%201.2.6.5.5%201t.1.4q.5%200%201%20.6.5.8%200%20.5c-.7-.4.2%201.3%201.3%202.5q.6.7.4.8-.2%200%20.4.6.8.6.3.4c-.7-.4-.6.4.3%201.5.8%201%202%201.5%201.4.7q-.1-.3.7-.2.9%200%201.4-.6.6-.6%201-.5.6%200%20.6-.3t.4-.2.4-.1q0-.4.6-.6t.3.1q0%20.3%201.2-.2t1.1-1q0-.3.2-.4.4.1.6.5t.2-.3q0-.9.4-.1.4.7%201.1-.2%201-1.2%200-.2-1.1.8-.3-.1.5-.6.9-.5c.4.3%202.7-1%202.7-1.4q0-.3.3-.2.4.1.4-.1%200-.5.6-.2.6%200%201.7-.9%201.3-1%201.3-.5t.3-.3%201.4-.7.8-.4q-.2-.6.5-.3.6.1.3-.2-.2-.8%201.9-1%20.7-.2%201.3-.9.5-.7%201-.8c1%200%201.8-.6%201.6-1q-.2-.4.4-.2t.9-.3q.1-.5.5-.4.3.2.5-.4.4-.6%201-.5.9.3%201-.5.3-.7.5-.6c.3.4%201.7-.5%201.5-1q-.2-.2.3%200%20.7%200%201.2-.8.8-1%201.2-.8.6%200%201.1-.7.7-.9.7-.3%200%20.5.5-.4c.5-1%202.5-2.5%202-1.6q-.1.4.8-.6t1.4-1%20.4-.4.3-.2q.4.3.4-.4t.6-.4%201-.6q.3-.8.4-.5%200%20.3.6-.5.6-1%201.2-.5t.3-.1.4-.7q.5%200%20.6-.6t.4-.4q.5.2%201.7-1l1.7-1.4q.3-.2.2-.6t.5.1q.7.8.5%200%200-.5.5-.4t.3-.2.7-1%201-1.3q0-.5.2-.5.4%200%201.5-1%201.3-1.4.4-.3-.4.7%202-1.7c1.4-1.5%202.8-2.7%203-2.7l.4-.6c.3-.8%203.5-4%204.1-4q.4%200%20.4-.2a16%2016%200%200%201%202.6-3q2.4-2.4%201.7-2-1%20.8.2-.4%201.2-1%201.1-1.5%200-.2.5-.3c.7%200%203-2.9%202.6-3.3q-.1-.2.1-.1.4%200%20.5-.2l1.5-1.6q1.3-1.4%201.1-1.8-.1-.3.4-.4.6%200%20.6-.6t.7-.4.4%200q-.2-.4.2-.9.6-.7-.1-.3-.4.2.2-.3t.4-.6q-.3%200%20.5-.4t.6-1%20.4-.6q.7%200%20.4-.4%200-.3.2-.4.4%200%20.3-.3.1-.5%201.1-1.4%201-1%20.6-.8-.5.3.2-.7.6-.8%201.2-1.2.6-.2.4-.5t.6-.8.6-1.1.8-1.2.7-1.2q-.1-.5.2-.3.3%200%20.8-.6.3-.7%200-.8-.2%200%20.4-.4t.7-1.2q0-.7%201-1.6.6-.9.7-1.4-.1-.4.2-.3c.4.2%201-.7%201-1.6q.1-.5.8-1t.8-1.3c.1-1.1.7-2.1%201-2%20.4.3%201.3-1.6%201-2q-.2-.5.5-.8.5-.4.3-.4-.2-.1.7-1.3%201-1.1.9-1.7-.2-.5.2-.6.3%200%20.1-.4-.1-.3.2-.3.4-.2%201.2-1.6.8-1.6.3-1.3-.4.1.2-.5l.4-1q-.2-.3.2-.3.3%200%20.2-.7-.2-.6.1-.4.4%200%201-1.1.6-1.3.3-1.2t-.1-.3.6-.6q.3%200%20.1-.4-.1-.3.2-.4.5%200%20.2-.6l.1-.6q.4-.1%201-1.4t.3-1.2q-.3.3-.2-.5.3-.7.7-.5t.1-.4q-.2-.7.4-1.2.5-.6.4-1-.2-.4.3-.8t.4-1.3.2-.5q.6.4.3-.3t.1-.6q.4-.1.4-1t.4-1%20.2-.6.2-.6q.5%200%20.2-.8%200-.6.3-.5.3.3.1-.6%200-.7.2-.6.5.3.2-.5-.1-.9.2-.6.4.2.1-.7t.2-.6.4-.2c-.2-1.1.5-3.9.9-3.6q.4.3.2-.4-.2-.5%200-.6.4-.1.3-.8t.2-.8.2-.6.2-.8q.2-.1.2-1-.1-.8.2-.5.5.3.2-.8t.2-.8.2-.8.2-.7.2-.8.2-.8q.4.3.2-.2t.1-1%20.2-1.2q0-.7.2-1c.3%200%20.5-1%20.5-1.8q0-1.6.4-1.7.2%200%200-1%200-.9.3-1%20.4%200%20.3-1.3%200-1.2.2-1.6.2-.2%200-.8-.1-.5.2-.5.4-.1.4-1.3.1-3.7.5-4%20.3-.3%200-1.2%200-1%20.3-1.5.5-.5.3-2-.1-1.2.2-1.3.3%200%20.3-.4t-.5-.2%200-.2.2-1.8q0-1.3.3-1.3t.2-2.4q0-2.1.2-2.3c.1%200%20.3-6.2.3-13.7a170%20170%200%200%200-1.2-21.5q-.5-.6%200-.2.5.1.5-.2t-.4-.4q-.3%200-.1-1.6.3-1.5-.2-1.4-.3.3-.3-1.3.1-1.4-.2-1.7-.2-.3-.2-1.4.1-1-.2-1.4-.3-.2%200-1.3%200-1.2-.3-1.2-.4%200-.3-.5t-.3-1q-.5-.7.1-.3t.3-.6l-.4-1.4q0-.5-.3-.5t-.1-1q0-1-.3-.7-.4.3-.2-.7t0-1.3-.2-1-.2-1q-.3-.1-.2-1%20.1-.7-.2-.7t-.2-.9q.3-.8-.3-.5t-.2-.7q.3-1.2-.2-.8t-.2-.8q.3-1-.1-.8-.5.3-.2-.8t-.2-.8c-.4.3-.6-1-.5-2.4q0-.5-.2-.5t-.4-1.2q0-1.2-.5-1.5t-.5-1.5-.3-1.3-.1-.6-.3-.3-.2-.2c.3-.5-.1-2.4-.6-2.2q-.2%200%200-.6%200-.9-.2-.6-.5.2-.2-.6.1-.8-.2-.6t-.3-.5q.2-.8-.2-.8t-.3-.3q.1-.1-.2-.7a4%204%200%200%201-.6-1.8q-.1-1-.7-1.8-.5-.6-.4-1.1t-.2-.3q-.5.3-.2-.4%200-.5-.2-.6t-.2-.6q.1-.6-.1-.4-.3%200-.6-.6%200-.7.2-.6.9.6-.4-1-.7-.7-.6-1.3.2-.5-.4-.7-.6-.3-.6-.8c.2-1%200-1.9-.4-1.6q-.3.1-.2-.4.3-.5-.4-.8-.6-.2-.4-.8.1-.5-.1-.6c-.3%200-.8-1-1-2.1s-.7-2.2-1-2q-.4.3-.1-.4.2-.7-.3-.4t-.3%200c.3-.5-1.3-4.1-2.2-4.8q-.5-.5-.4-.8t-.5-.6-.4-.8-1-2q-1-1.2-1-1.6.2-1.2-.7-1.3-.6%200-.4-.6t-.4-.9-.9-2q0-.4-.6-.4t-.3-.4q.2-.5-.4-1l-.7-.7q-.3-1.6-.8-1.1-.5.2-.2-.4.1-.6-.2-.6-.5%200-.5-.6t-.3-.4q-.2%200-.3-.6%200-.8-.4-.6-.4%200-.4-.6t-.5-.7q-.4%200-.5-.6c0-.4-.6-1.4-1.3-2.1a7%207%200%200%201-1.5-2q0-.7-.6-1-.6-.5-.5-.7%200-.3-1.2-1.7l-1.3-1.7q0-.2-.7-.5t-.3-.3-.4-.7-.2-.3q.5.1-.7-1-1.3-1.1-.9-1%20.6.3.3-.1t-.9-.5-.3-.3c.3-.5-1-2-1.6-2q-.5%200-.4-.4.2-.2-.4-.5-.5-.3-.4-.7%200-.5-.8-1t-.7-.6q.2-.4-.6-.7-.7-.5-.6-.7c.3-.3-1.4-2-2-2l-.7-.5q-.3-.4.2-.1.3%200-1.9-2t-2.2-2.5c.2-.4-1.6-2-1.9-1.8%200%20.2-1.2-.9-2.4-2.2q-2-2.2-2-2%20.3.6-.1.3l-.5-.7q0-.6-1-1.4t-1-.6-.5-.5-1-.7-.4-.3-.6-1.1q-1-.8-.2.2.4.7-.7-.6t-1.6-1.2q-.4%200-.2-.3.1-.4-.7-.8l-1.4-1.1q-.5-.7-.2%200%20.1.4-1-.9-1.1-1.1-1-.7l-1.3-1.1q-1.6-1.6-2.1-1.4-.5.1-.2%200c.4-.5-2.4-2.6-3.3-2.6q-.7-.1-1.2-.8t-1.7-1.6q-1.3-1-.5-.2.9%201.2-.5%200-1-.7-.8-1%200-.3-.5-.3t-.6-.4q0-.4-.3-.2-.4.1-.6-.4-.3-.5-1-.6-.8%200-.6-.4t-.2-.2-1.6-1q-1-1-1.5-1-1.2%200-1-.5t-.2-.4l-.8-.2-.8-.1q-.3-.1-.2-.5.2-.3-.1-.4l-.8-.2-.8-.1q-.5%200-.2-.4%200-.3-.8-.8-1-.5-.8%200%20.3.3-.5%200-.7-.6-.6-.9.1-.5-1.1-.3-.3%200-.3-.3%200-.4-.6-.6-.6-.3-.4.2t-.9-.6q-1.1-1-1.7-.8-.4.2-.2-.1c.2-.4-2-1.6-2.6-1.4q-.2%200-.3-.3%200-.4-.3-.2-.4.1-.4-.2t-.3-.3q-.2.2-.8-.3t-1.2-.4-.2-.2-.4-.2q-.6%200-.7-.2t-.3-.2q-.4.3-.4-.1-.1-.4-1-.4t-1.2-.6-.6-.4q-.3.1-.4-.2%200-.4-.4-.3-.6%200-1.6-.6t-1.5-.5q-.5.4-.2-.2.4-.5-.5-.2t-1.1-.3c-.5-.7-4.3-2.2-5-2q-.7.3-.5-.1.2-.3-.3-.7-.6-.2-.3.3.1.4-.5-.2-.8-.7-1.5-.4-.9.3-.4-.3.3-.5-.6-.3t-.5-.2q.2-.3-.4-.1-.6%200-.7-.2t-.6-.1-.5-.2-.6-.2-.6-.2-.6-.2q-.5.1-.6-.2t-.6-.2-.6-.2q0-.5-.8-.2t-.6-.2q.4-.6-1.6-.5-.5%200-.5-.3t-1%200q-1.2.1-.7-.4.3-.5-.4-.3-.5.3-.6-.1-.1-.3-1-.1-1.2.3-.8-.3t-.5-.2-.8-.2q0-.3-.6-.2t-.8-.2-.8-.2-.6-.2-.8-.2q-.6%200-.7-.2t-1-.2q-1%20.3-1-.2%200-.3-1-.2-1%20.2-1-.1%200-.5-.7-.2-.8.1-.8-.2t-.7-.4c-2.9-.1-3.5-.2-3.3-.5q0-.3-.7%200-.8%200-1.1-.2c-.4-.6-2.9-1-2.5-.4q.3.6-.4%200t-1.4-.3-.8-.1-1-.2q-.8.1-1.2-.2c0-.2-.7-.3-1.2-.2q-1%20.2-1.6-.3-.5-.3-1.9-.2-1.2.3-1.3-.1%200-.4-.5-.4-.3%200%200%20.5.1.5-.3%200-.6-.4-1.7-.3-1%200-1.3-.2c0-.2-1.1-.3-2.3-.2q-2%200-2.3-.2c-.3-.4-28.8-.4-28.8%200M114%2019.1q-.7.1-.7.5t-.4.1q-.4-.1-.4.2%200%20.5-.4.2-.4-.1-.4.2t-.4.2q-.3-.1-.4.2%200%20.3-.4.2-.3-.1-.3.2t-.4.2-.4.2-.4.2-.4.2-.3.3c-.3-.4-2.4.8-2.4%201.3q0%20.4-.3.2t-1.2.6-.7.4q.3-.6-.7%200-1%20.4-.8.8t-.2.1q-.4-.2-.9.3l-1.1.6q-.6.1-1%20.8l-1%20.7c-1%200-1.9.6-1.7%201q.1.1-.4.4t-.4-.2q.3-.4-.4.3-.5.6-.6.4t-.6.4-.5.4-.8.6q-.8.7-1.2.5t-.6.4-.8.4-.5.4-.4.4-.7.3q-.1.6-.7.4t-.6.5q0%20.6-.2.4-.3%200-1%20.7t-1.2.8c-.9%200-3%201.5-3.3%202.3q-.4.8-.8.8-.5-.1-.5.3t-.4.1q-.4-.1-.3.1%200%20.3-.2.3l-.9.8q-.5.6-.3.2t-1%20.4q-1%201-1.2%201.4%200%20.4-.7.4t-1%20.8q-.6.8-.8.7c-.3-.4-1.8%201-1.8%201.7q0%20.4-.4.3-.3-.2-.5.4-.4.5-.7.5-.5%200-1%20.8t-.5.6-.8.5q-.7.9-1%20.8t-1.3%201.2q-.7%201.2-.8%201c0-.2-.8.5-1.6%201.4q-1.5%201.6-1.4%201.2.3-.6-.5.1l-.7%201q0%20.5-1.8%202.2l-2%202%201.9-2.1c1-1.1%201.8-2%201.5-2-.2%200-1.4%201.2-2.7%202.6q-2%202.3-1.7%202.2t-1%201.2c-.9.8-1.5%201.7-1.5%201.9q.1.2-.3%200-.3%200-.4.2%200%20.3-.5.4-.6%200-.6.4t.4.2.2.2q-.3.3-.6.2-.4-.1-1.2%201-.8%201-.5%201.2.3%200-.7.5-.8.5-.8%201%200%20.3-.5.7-.6.1-.4.5.1.3-.3.4-.7%200-1.1.7-.7.8%200%20.3t0%20.2q-.6.7-.5.9.2.2-.4.2c-.7%200-1.6%201.3-1.2%201.7q.2.3-.3.3c-.5%200-1.7%201.4-1.7%202q-.1.5-.8.7-.8.3-.2.4.7%200-.2.7-.7.7-.8%201-.1.5-.8.8c-.8.4-2%202.3-2.1%203.2%200%20.6-1.2%201.7-1.9%201.7q-.7-.1%200%20.4t-.2.4q-.7%200-.5.6.3.6-.1.4t-.4.2q.1.9-.9%201.5a3%203%200%200%200-.9%201.6q0%20.9-.6%201.3-.4.5-.1-.3.4-1-.2-.1-.4.7-.3%201%20.3.4-.4.6-.5.3-.4.5.3.2-.4.8-.6.5-.2.3.5-.2.2.4-.1.5-.5.4c-.3-.2-1%201-.8%201.6q0%20.4-1%201.1-.8.7-.8%201.2.2.5-.4.7-.5.3-.4.9.2.5%200%20.4-.4-.1-.8.8-.6%201%200%20.7.3-.2-.5.7l-.7%201q.3.1-.7%201.1-.8%201-.8%201.5.2.5-.4.8-.6.2-.3%201%20.2.7-.3.7t-.4.5-.3.5c-.4-.2-.8%201-.6%201.4q.2.4-.1.4-.5%200-.5.6t-.4.6%200%20.3q.8.5-.1.4t-.2.4q.6.4%200%20.4-.4.1-.4%201t-.4.8q-.5-.5-.6%201%200%20.5-.7%201.2-.6.8-.7%201.2%200%20.5.4-.1t.4-.1-.8.9-.5.8q0%20.3-.2.3-.3.1-.3%201t-.2%201q-.3%200-.1.4%200%20.4-.3.4t-.2.6-.4%201.1-.5%201.1q.2%201.5-.4%201.3-.3-.2-.1.4%200%20.5-.3.6-.5%200-.3.7.2.8-.2.6-.3-.2-.2.4.3.5-.1.6-.3%200-.2.4.3.4-.4%201.3t-.2.5-.1.5-.2.6-.2.5-.5%201.5q.1.5-.1.6t-.2.5q.2.6-.2.6t-.3.8-.2.5-.2.4%200%20.7q-.5%200-.3.8%200%20.7-.3.7-.5%200-.5%201.4T7%20147t-.1.5q.1.6-.2.9t-.2.8-.2.5-.1.6-.2.8-.2.6q.1.3-.2%201-.5.6-.3%201v.9q-.5.1-.6%201-.1.7.1.5.8-.4-.2%201.5c-.7%201.4-1.4%204.7-1.1%205.7q.2.8-.3%201.5l-.2.5q.3.1-.1.5-.4.6-.3%201.3c0%20.4-.1%201.4-.4%202q-.4%201.2-.1%201.1.3-.2.3.4%200%20.5-.3.7-.3.4-.2%201.8.1%201.6-.4%201.5c-.4%200-.5%200%200%201.8q.2%201-.2%201t-.4.5.5%200%200%20.4-.4%201.6q.1%201-.2%201.3c-.2.1-.2%201.2-.1%202.3q0%202-.2%202.1a300%20300%200%200%200%200%2029.6q-.7.7-.1.4t.5.3-.4.4q-.6-.3-.1.5.3.8.2%201.2-.1.6.3%201.1t.1.4-.4.3.4.3.1.5q-.1.7.3%201.3.5.8%200%20.3-.5-.1-.5.1%200%20.5.4.5t.1%201.3q-.1%201.3.2%202%20.5.5.3%201.4%200%20.9.3%201.6.5.7-.1%201t.2.8.2%201q-.5.9.3%201.3l.2.3q-.4%200-.4%201.2%200%201.3.6%201.3t.2%201q0%201%20.1.9c.3-.2.4.4.5%203.3q0%20.6.4.7t.2.8.2.8q.3%200%20.1%201t.2%201%20.5.3-.4.2q-.3%200-.1.6t.6.8q.5%200%200%20.4c-.6.6-.2%201.6.4%201.2q.4-.2%200%20.4-.7.6%200%20.8t.4.9q-.1.5.2.6.5%200%20.2.8t.2.6c.6-.4.5.6%200%201.2q-.6.5.1.5t.4.6q-.2.7.3.4.6-.5.3.7l.1%201q.3%200%20.3.5%200%202%20.5%201.7c.5-.4.5.3%200%20.9q-.7.4.1.4t.5.6q-.1.5.2.6t.2.6.3.7-.1.8q-.8.8.2.4.7-.3.4.3-.1.7.3.9t0%20.2q-.6%200-.2.7.3.8.1%201-.2.4.4.1.8-.3.5.7-.2%201%20.4%201.2.9.1.1.9-.7.8.2.4.6-.3.7.1%200%20.3-.4.4-.2.1.4%201.3l1%202.4c.1%201.2.9%202.5%201.4%202.5q.3%200%20.1.4-.2.6.5%201.5t.6%201.6q0%20.4.3.4t.2.4.4.6.6%201.2.4%201%20.1.4q0%20.3.2.3t.2.7q-.3.6.2.4.3-.3.2.2-.2.6.4%201.2.5.6.3.8-.1.3.3.3.3%200%20.2.3t.2.5.5%201.2q0%201%20.4%201%20.3.1%200%20.5t.4.2.4.2q0%20.5.9%201.6t.6%201q-.5-.2-.5%200%20.1.5.5.7.5.3.6%201%200%20.9.7%201.4.5.4.2%200l-.4-.8c0-.5%201%201%201%201.5l.1%201q0%20.3.4.2.4-.2.6.4t-.2.3%200%20.6.8.6.5.3v1.1q.1.5.6.5.6-.1.4.4-.2.7%201.1%202t1.1%201.9q-.3.4.2.1t.4.6.6%201q.5.2.4.6c-.3.4.5%201.6%201%201.3l1%201q.8%201%200%20.5-.6-.6-.8-.1-.2.3%200%20.4c.8%200%203.4%202.6%203.2%203.2q-.1.5.3.8.5.2.6.6c0%20.6%201.4%202%201.8%201.7q.1-.2%200%20.2t.7%201.4q.8.9.7%201.2t.4.2q.5%200%20.9.4.2.4-.5.2-.5-.2.8.8c1.4%201%202%201.7%201%201.2q-.4-.2.2.3t.3.7.8%201.1a3%203%200%200%200%201.6%201q.4-.3.2%200t.8%201.3q.8.8.3.4-1-.8-.3.3.6.8%201.1.6.6-.1.4.2-.2.5.4%201t.8.9q0%20.3.4.4.3%200%20.7.3.3.4-.1.1-1-.5%200%20.7.4.4.9.4.4-.1.7.3.4.4-.2.1-.3-.1.2.8t1%20.8s.9.6%201.7%201.5q1.5%201.5.4.6-1-1%20.6%201%201.7%201.9%202%201.6.5-.5.4.7%200%20.2.5.2t.3.4.3.3c.5-.3%201.7%201.2%201.4%201.8q-.3.5%200%20.2.4-.2%201.1.4t.5.1q-.4-.6.1-.2t.3.8c-.2.5.5%201.3%201%201.3q.3%200%200-.5%200-.3.2-.1.3.3.3.8.1.4.5.4.6.1%201.1%201t.6.4.3.4%201%201%201%20.7q0%20.8.4.2t.4%200c0%20.9%201.8%202.5%202%201.9q.3-.4.3.2t.4.5.6.2q.3.5-.1.2t-.5%200%201.2%201%201%20.2l.3.2q.5.7.9.4.2-.2%200%20.4-.1.6.2.7%201-.2%201.2.6.3.5.8.3.3-.1.2.1-.1.4.7%201.3.9.7%201%20.4t1%20.7q.8.9.9.5.1-.3%201.6%201%201.4%201.6%202.2%201.6.7%200%20.6.4t.7.5.6.3q-.1.2%201%20.7t1.2.9.5.2q.5-.2.5.5t.7.7%201.2.6q.4.4.9.3.3-.2.4.3%200%20.5.3.6%201.7.1%202.1%201%20.4.5.9.3.5-.1.7.7.3.9%201%20.5.8-.3%201.5.8.6.9%201%201t1.2.6.7.3-.5-.7q-.5-.1%200-.2.4%200%201%201t1.4.8.7.3q0%20.3.8.4.8%200%20.6.6t.2.2q.6-.1%201%20.2.7.4%201%20.2.6-.3.2.2t.3.3.4.4.8.4%201.4.5%201.2.5.8.2.6.2.8.3-.2.2-.4.1%201%20.3h.8c-.3.3%201%201.3%201.7%201.3q.8.1%200-.4-.6-.4%200-.4.3%200%20.7.6.2.6.6.5%201.6-.1%201.3.4c-.3.5%201%201.2%202%201.2q.9.1-.2-.4-1.8-.9.3-.3%201%20.4%201.2.8%200%20.3.6%200t.4.3q-.2.3.3.2.5-.2%201.1.4.8.6%201.8.7a4%204%200%200%201%201.8.6q.5.4.7.2.3-.1.3.3t.8.2.5.3.6.2q.8-.2.6%200c-.1.3%201%201%201.9%201l.5.3q.4.2.9-.2.7-.6.3%200t.3.4h.6q.1.3%201.3.4%201%20.1%201.5.5.3.5%201.5.5t1.2.4.5.2c1.4-.1%202.7.1%202.4.5q-.3.5.8.2%201-.2.8.1-.3.5.8.2t.8.2.8.2.7.2.5.3%201%20.4q.3.5.9.5t.3-.5q-.2-.4.4%200%20.6.6%201.2.4t.8.4.7.2c.5-.6%201.6-.7%201.3-.1q-.2.3.8.2%201-.3.7.2t.3.3q.5-.2%201%200c.5.6%203%201%202.6.5q-.1-.4.2-.4t.4.4q0%20.4%201.1.2t1.4.1.6.3.6.2.6%200q.3-.8%201.1.1t1.3.3c.8-.6%201.9-.4%201.6.3q-.3.6.5.3%202.4-.9%202.5-.3%200%20.4.4.4t.2-.5q-.4-.5.2%200t1.6.3q.8%200%201.4.3c.2.1%201.4.2%202.6.1a272%20272%200%200%200%2030.5.1q.6.5.8.2t1-.2q2%20.6-1.3-2.4-1.8-1.7-1-1.2l1%20.8-1-1q-1-1.1-1.4-1.2a1%201%200%200%201-.8-.4q-.3-.5.2-.2t-.2-.4-1-1.4-1-.7q-.5%200-.4-.3.2-.4-.8-1.3-1-.7-.5-.5.5.3.2-.2-.2-.3-.9-.4-.5%200-.4-.3.2-.3-.6-1-.7-.6-.3-.5.6.3.3-.1t-1-.5q-.4%200-.3-.2%200-.4-.6-1t-.3-.5-.8-1-.8-1q.6.3.3-.1-.4-.5-.9-.5t-.4-.3-.3-.6-.5-.7-.3-.5q-.4%200-1.2-1l-.7-1%201%20.8q.5.5-.9-1.4l-2.2-2.5q-.4-.5-.3-.7c.1%200-.5-1-1.5-1.9q-1.5-1.6-1.5-2.2%200-.4-.7-1l-1.7-1.6q-1-1.4%200-.6.8.8-.3-.7-.8-1.2-1.2-1.3-.3%200-.1-.4.1-.3-.4-.6t-.4-.6-.4-.5q-.5-.3-.4-.6.2-.4-.4-.6-.5-.2-.4-.6.2-.4-.3-.6t-.5-.6-.6-.7q-.7-.5-.6-1%20.2-.6-.1-.4-.6.1-.4-.7c.2-.8-.9-1.8-1.2-1.6q-.3%200-.5-.4-.3-.6.2-.4l-.6-.7q-1.7-1.7-.6-1.3.4.2-.2-.3-.8-.7-.8-1.1%200-.6-1-1.5-.7-1-.6-1.4%200-.6-1-2-1.2-1.3-.9-1.1.6.3.3-.4-.2-.5-.6-.6t-.2-.3q.3-.5-.5-1.2-.6-.6-.5-1%20.2-.1-.3-.2-.3%200-.2-.4.1-.3-.1-.4-.4-.1-.7-1.1-.2-1.1-.6-1.2t-.2-.4-.2-.4-.2-.4%200-.4-.4-.8q-.1-.9-.5-1.1t-.5-.6q.2-1-.3-.8-.7.1-.4-1.7%200-.4-.4-.3-.3.2-.1-.3%200-.6-.2-.6-.5%200-.4-.3c.1-.9-.1-1.7-.4-1.5-.5.3-1.3-2-1-2.6q.2-.4-.2-.1-.6.3-.3-.3.1-.6-.2-1l-.1-.5q.1-.3-.2-.4-.4%200-.1-.6.1-.7-.3-.4-.6.4-.2-.5.1-.8-.2-.8t-.3-.6q.2-.5%200-.6c-.5%200-1.4-2.9-1.3-4q0-.7-.4-.4t-.3-.8v-1q-.4%200-.2-.6.1-.5-.2-.6-.5%200-.3-.6t-.2-1.2-.2-1.2q.3-.5-.2-.3t-.2-.7q.2-1-.6-1.5t-.5%200q.5.9-.7-.2c-.6-.5-1.3-.7-3.3-.9q-.4%200-.3-.4.4-.6-1.4-.5a1%201%200%200%201-1-.5q-.3-.6-.7-.5-.5.2-1-.3a1%201%200%200%200-1-.3q-.7.2-.4-.2.4-.6-.8-.4l-.5-.4c-.3-.6-3.4-2-3.7-1.7q-.2%200-.2-.2t-.6-.7q-.6-.2-.4.3.3.4-.7-.5t-1-.6-.5-.3q-.3-.6-.7-.5t-1.4-.8q-.9-.8-1.3-.8-.4.2-.6-.3t-.6-.4-.6-.4-.6-.4-.4-.1q-.1-.4-1-1-1-.8-.8-.2.2.5-.3-.3-.7-.7-1-.6t-.4-.3-.4-.3q-.4-.1-1.4-1.1t-.7-.6q.1.5-.7-.4t-.6-.4q.2.4-1.3-1.1l-1.3-1.2q.3.6-.3%200t-.9-.5-.2-.4c0-.7-2.2-2.5-2.8-2.3q-.3%200-.2-.2a39%2039%200%200%200-7.9-7.8q0-.5-.7-1.1t-.1-.4-.2-.5-1.3-.9q-.6%200-.4-.2t-.4-.9-.1-.3q.4.2-1-1.1t-1-1.2-1.1-1.9a9%209%200%200%200-2-2.2q-.3%200-.2-.4.2-.3-.5-.7-.8-.5-.8-1.3%200-.6-.4-.5-.3.1-.4-.6%200-.7-.6-1l-.6-.7c0-.7-.5-1.4-.8-1.2q-.2%200-.5-.4-.2-.7.2-.4t-.3-.4q-.7-.5-.7-1.1t-1-1.4q-.7-1-.6-1.5t-.2-.5-.3-.3c.2-.5-1-2.8-1.3-2.6q-.3.2%200-.5.1-.6-.3-.3t-.2-.4q.3-.7-.2-.4t-.2-.4q.1-.5-.2-.6t-.4-.3q.3-1.2-.4-1-.4.1-.4-.3c.2-1.2%200-2-.4-1.6q-.5.1-.2-.2.1-.5-.3-1-.6-.7-.4-1.2t-.2-.6q-.5%200-.3-.4.3-.3-.1-.4-.3%200-.2-.6.3-.6-.1-.4t-.6-.6q-.2-.6.1-.5.3.2.1-.4-.2-.5-.6-.6t-.2-.6-.2-.4q-.4.3-.1-.6t-.1-.6-.2-.6q.2-.6-.3-.7t-.2-.6q0-.5-.2-.6t-.2-.8-.2-.8%200-.6q0-.7-.3-.4-.5.3-.3-.6c0-.5-.3-2-.8-3.4s-.8-3-.7-3.5q.2-.8-.2-.8t-.2-1-.2-1-.2-1.2q.3-1-.2-1.1-.4%200-.3-.7%200-.7-.3-1.3-.3-.5.2-.2t0-.5-.2-1.6q0-.7-.2-.8t-.2-2v-2a176%20176%200%200%201%20.4-24.1q0-1.5.3-1.3.4.2.1-.9-.2-1%20.3-1.7t-.1-.2q-.7.4-.1-.3.5-.5.2-.9-.1-.2.2-.6c.3-.1.6-1.2.6-2.4s.3-2.5.6-3q.4-.7.4-1.3-.2-.5.4-.4t0-.7q-.3-.7%200-.8t.1-1q-.1-1.2.3-.7.6.2.3-.4-.1-.5.2-.6t.1-.8q-.1-.8.2-.8.5%200%20.3-.8-.1-.8.2-.5t.2-.6q-.1-.7.2-.6.4.3.2-.6t.2-.5q.4.2.2-.4t0-.7.2-.6q-.3-.7.3-.4.5.4.2-.1t0-.8q.5-.3.6-1t.3-1c.5-.4%201.6-3.1%201.2-3q-.4.2-.1-.3.1-.5.5-.6.3%200%20.1-.6t.5-.8q.5-.2.4-.8t.2-.3q.6.3.2-.4-.1-.6.1-.4c.4.2%201-1%20.6-1.4q0-.4.2-.4.5%200%20.3-.3-.2-.4.4-.6.5-.3.4-.9-.2-.5.1-.3t.5-.3c0-1.2.1-1.4.8-2q.7-.7.4-1.1-.1-.4.2-.2.5.3.5-.1l.2-.8.1-.8q0-.3.4-.2t.4-.2q0-1%20.6-1.3t.6-1%20.6-1.4q.6-.6.4-.2-.3.5.5-.4.7-.8.6-1.4t.8-1.1q1-.7%201-1.2.1-.5.8-1t.7-.6.7-1.2.8-1.4q0-.5.4-.5c.6%200%202.1-2%201.8-2.3q-.2-.3.2%200%20.4%200%201-.8.8-.9%201.2-.7t-.2-.5-.1-.5a41%2041%200%200%200%208.6-8.5q.6.1%202.2-1.4l2-1.8q.4%200%20.4-.6%200-.4.5-.5t.8-.5l.7-.6q.3%200%20.3-.4-.1-.3.4%200%20.7%200%201-.6.5-.7%201-.8.5%200%201.2-1t1.1-.8q.6%200%201.4-.6.9-.7.4-.5t.2-.4%201.4-.6%201-.6q.4-.6.7-.6%201.2.2.8-.4-.1-.3.2-.3.9%200%201.5-.8t.2%200%20.4%200q.6-.5.7-.2t.4-.5%201-.8c.4%200%20.6-.4.7-2.7.1-1.6%200-2.9-.2-2.9q-.2-.1-.2-2%200-1.7-.2-1.9t-.2-1.3q.1-1.3-.2-1.4t-.1-1q.1-1-.1-.9-.4.2-.4-1.2l-.2-2q0-.8-.3-.8-.3-.1-.4-.8c0-1.8-.2-2.5-.5-3q-.3-.4-.1-.8%200-.4-.2-.4t-.2-.6q.2-.5-.1-.6t-.4-1.2-.3-1.5q-.7-.5-.7-2%200-.8-.3-.8t-.1-.6q.1-.5-.2-.5t-.2-.6-.2-.6-.2-.6-.2-.6q-.5%200-.2-.4.1-.4-.4-1t-.5-1.2-.1-.5-.1-.7-.3-.3q-.6.3-.2-.6t-.2-.6-.4-1.1c0-.6-.9-2.7-1.5-3.2q-.5-.5-.6-1.5l-.2-1.5q0-.3-.4%200-.3%200-.5-.6c0-1.9-.7-3.3-1.2-3q-.4.2-.2-.3.1-.6-.3-1t-.3-.9-.3-.3-.2-.4-.2-.4-.2-.4c.3-.4-.5-2.4-1-2.4q-.3%200-.1-.4.1-.3-.2-.3t-.3-.3c.2-.6-1-2.9-1.3-2.6q-.3%200-.1-.4.2-.6-.4-.9a1%201%200%200%201-.7-1%201%201%200%200%200-.6-.9q-.5-.1-.3-.6c.3-.5-.9-2.7-1.5-2.7q-.3%200-.2-.3c.4-.3-.7-2.3-1.4-2.6a1%201%200%200%201-.4-.8q.2-.6-.4-.8-.5-.4-.8-1.4-.2-1-.6-1-.4.3-.4-.4c0-.9-1-2.2-1.3-1.8q-.2.1-.5-1t-.8-1.5q-.5-.2-.3-.6t-.4-.6q-.5-.1-.4-.5%200-.3-.4-1c-.6-.9-1-1-2.6-.6m6.7%2099-1.5%201.5-1.4%201.3%201.3-1.5q1.8-1.8%201.6-1.3M281%20280.8q-1.7%201.6-2%201.7%200-.2%201.6-1.7l1.9-1.8z'/%3e%3cpath%20d='M308%2031.8q.8.6%201.1.6.2%200-.3-.6l-1.2-.5q-.2%200%20.4.5m30.9%2024.5%201.7%201.5-1.3-1.5q-1.5-1.6-1.8-1.6%200%20.2%201.4%201.5M58.4%2058.8l-2%202%202.1-1.9c1.9-1.8%202.2-2.2%202-2.2zM343.6%2061q1.4%201.5%201.7%201.6l-1.4-1.6-1.7-1.5q0%20.2%201.4%201.5m21%2026q.6%201%201%20.8%200-.3-.7-1l-1-1zm2.1%202.8q.1.6.8%201.6t.8.8l-.8-1.6q-.7-1-.8-.8M135%20106.1q-1.2.9-.4.6c.7-.4%202-1.6%201.7-1.6q-.3%200-1.3%201m-16%2013.3-1.3%201.5%201.4-1.3%201.5-1.5q.2-.5-1.6%201.3m266.1%205.6q.5%201.1.6%201c.2-.1-.5-2.2-.8-2.2zm.8%201.8q0%20.4.5%201.3t.6.6l-.6-1.4q-.5-.8-.5-.5m-280.2%208.5q-1%201.3-.2.7c.7-.6%201.6-2%201.3-2zm293.9%2056.1q0%201.2.2.7v-1.4q-.2-.5-.2.7m-85.9%208.4q0%202.3.2%201.3v-2.8q-.2-.9-.2%201.5m85.9%208.8q0%201.1.2.7v-1.4q-.2-.5-.2.7m-8.4%2049.3q-.3%201-.1%201.4l.4-1.1q.2-1.1%200-1.4zm-110.8%2022.9-1.6%201.7%202-1.7q1.6-1.7%201.5-1.8zm-249.1%2027%20.5%201q.6.7.6.4%200-.4-.6-1.1-.5-.6-.5-.4m131.7%201.2q0%20.7.3%201.6c.4%201%20.4%200%200-1.4q-.4-1.2-.3-.2m5%2016.8.8%202q.6%201.2.5.5c-.3-1-1.3-3.1-1.3-2.5M55.5%20338.4l1.2%201.3%201.3%201.1-1.1-1.2q-1.5-1.7-1.4-1.2m285.7%203.1-1.6%201.7%201.7-1.6c1.6-1.4%201.8-1.8%201.6-1.8zm-280.5%202.3%201.8%201.5-1.4-1.6-1.7-1.5zm123.9%2014q.6%201.1.8%201.2l-.4-1.2-.8-1.2q-.2.2.4%201.2m79.9%207q.6%201.5%201%201.6l-.7-1.6q-.6-1.4-1-1.5zm-177.9%200q.8%201%201.1.8%200-.3-.9-1l-1-.6zm104.4%202.6%201%201.3c.4%200-.6-1.5-1.2-2q-.7-.5.2.7m-100.6%200%201.6.9q.3-.1-.8-.8l-1.6-.8q-.2.1.8.8m33.4%2017.4c0%20.3%202%201%202.3.8l-1-.6zm3.5%201.5%201.4.6q.3%200-.6-.6t-1.3-.5q-.3%200%20.5.5m63.4%2013.4h1.4q.5-.2-.7-.2t-.7.2m17.2%200h1.4q.5-.2-.7-.2t-.7.2'/%3e%3c/g%3e%3c/svg%3e", M0 = { class: "bluevue-panel relative flex w-[320px] flex-col items-center justify-center rounded-lg px-6 pt-7 pb-5" }, F0 = /* @__PURE__ */ t("span", { class: "mdi mdi-close text-[20px] leading-none" }, null, -1), _0 = [
495
- F0
496
- ], V0 = ["src"], S0 = {
497
- key: 1,
498
- class: "mt-[15px] text-center text-base text-white"
499
- }, $e = /* @__PURE__ */ Y({
500
- __name: "BlueLoadingDialog",
1492
+ }), Gl = ["aria-label", "aria-valuenow"], Hl = /* @__PURE__ */ L({
1493
+ __name: "BlueProgressBar",
1494
+ props: {
1495
+ modelValue: {},
1496
+ indeterminate: { type: Boolean },
1497
+ height: {},
1498
+ color: {},
1499
+ theme: {},
1500
+ label: {}
1501
+ },
1502
+ setup(c) {
1503
+ const n = c, e = w(() => Math.min(100, Math.max(0, n.modelValue ?? 0)));
1504
+ return (t, o) => (a(), d("div", {
1505
+ class: b(["bluevue-progress w-full overflow-hidden rounded-full", t.theme === "light" ? "bg-[#00000022]" : "bg-[#ffffff1a]"]),
1506
+ style: D({ height: `${t.height ?? 4}px` }),
1507
+ role: "progressbar",
1508
+ "aria-label": t.label,
1509
+ "aria-valuenow": t.indeterminate ? void 0 : e.value,
1510
+ "aria-valuemin": "0",
1511
+ "aria-valuemax": "100"
1512
+ }, [
1513
+ i("div", {
1514
+ class: b(["h-full rounded-full", t.indeterminate ? "bluevue-progress__sweep" : "transition-[width] duration-200 ease-out"]),
1515
+ style: D({
1516
+ width: t.indeterminate ? void 0 : `${e.value}%`,
1517
+ backgroundColor: t.color || "var(--bluevue-primary)"
1518
+ })
1519
+ }, null, 6)
1520
+ ], 14, Gl));
1521
+ }
1522
+ }), Jl = { class: "min-w-0 flex-1" }, Yl = { class: "truncate text-base leading-tight" }, Xl = {
1523
+ key: 0,
1524
+ class: "mt-1 truncate text-xs text-[#ffffff88]"
1525
+ }, Zl = { class: "flex items-start" }, Ql = /* @__PURE__ */ i("div", { class: "h-px w-full bg-[#ffffff1a]" }, null, -1), e2 = [
1526
+ Ql
1527
+ ], t2 = { class: "flex w-[84px] shrink-0 flex-col items-center gap-1" }, l2 = ["title"], o2 = {
1528
+ key: 0,
1529
+ class: "mt-4 border-t border-[#ffffff0d] pt-4"
1530
+ }, n2 = { class: "mb-2 flex items-baseline justify-between" }, s2 = { class: "truncate text-xs text-[#ffffffcc]" }, a2 = { class: "flex shrink-0 gap-2 pl-3" }, We = 22, Vo = /* @__PURE__ */ L({
1531
+ __name: "BlueStepsDialog",
501
1532
  props: {
502
1533
  modelValue: { type: Boolean },
503
- message: {},
504
- dismissible: { type: Boolean }
1534
+ title: {},
1535
+ subtitle: {},
1536
+ state: {},
1537
+ steps: {},
1538
+ progressLabel: {},
1539
+ progress: {},
1540
+ indeterminate: { type: Boolean }
505
1541
  },
506
1542
  emits: ["update:modelValue"],
507
- setup(M, { emit: F }) {
508
- const e = M, b = F, s = h(null), r = (x) => {
509
- const p = s.value;
510
- p && (x && !p.open && p.showModal(), !x && p.open && p.close());
511
- }, f = () => b("update:modelValue", !1), a = (x) => {
512
- x.preventDefault(), e.dismissible && f();
1543
+ setup(c, { emit: n }) {
1544
+ const e = c, t = n, o = Ke(), l = {
1545
+ pending: { icon: "mdi-circle-outline", color: "#ffffff44" },
1546
+ running: { icon: "mdi-progress-clock", color: "#42A5F5" },
1547
+ done: { icon: "mdi-check-circle", color: "#66BB6A" },
1548
+ failed: { icon: "mdi-alert-circle", color: "#EF5350" },
1549
+ skipped: { icon: "mdi-minus-circle-outline", color: "#ffffff44" }
1550
+ }, s = {
1551
+ running: { icon: "mdi-cog-sync", color: "#42A5F5" },
1552
+ failed: { icon: "mdi-alert-circle", color: "#EF5350" },
1553
+ done: { icon: "mdi-check-circle", color: "#66BB6A" }
1554
+ }, u = w(() => s[e.state]), r = w(() => e.progress !== void 0 || e.indeterminate || !!o.log), v = q(null);
1555
+ let f = null;
1556
+ const x = () => {
1557
+ const p = v.value;
1558
+ p && p.scrollHeight - p.scrollTop - p.clientHeight < 40 && (p.scrollTop = p.scrollHeight);
513
1559
  };
514
- return s2(() => r(e.modelValue)), U(() => e.modelValue, r), (x, p) => (i(), c("dialog", {
515
- ref_key: "dialogRef",
516
- ref: s,
517
- class: "bluevue-dialog",
518
- onCancel: a
1560
+ return X(v, (p) => {
1561
+ f == null || f.disconnect(), f = null, p && (f = new MutationObserver(x), f.observe(p, { childList: !0, subtree: !0, characterData: !0 }));
1562
+ }), me(() => f == null ? void 0 : f.disconnect()), (p, F) => (a(), U($e, {
1563
+ "model-value": p.modelValue,
1564
+ persistent: p.state === "running",
1565
+ width: "620px",
1566
+ "body-class": "px-5 pb-4 pt-3",
1567
+ "onUpdate:modelValue": F[0] || (F[0] = ($) => t("update:modelValue", $))
1568
+ }, Ge({
1569
+ header: N(() => [
1570
+ O(H, {
1571
+ name: u.value.icon,
1572
+ size: 22,
1573
+ color: u.value.color,
1574
+ class: "mt-[2px]"
1575
+ }, null, 8, ["name", "color"]),
1576
+ i("div", Jl, [
1577
+ i("div", Yl, B(p.title), 1),
1578
+ p.subtitle ? (a(), d("div", Xl, B(p.subtitle), 1)) : C("", !0)
1579
+ ])
1580
+ ]),
1581
+ default: N(() => [
1582
+ i("div", Zl, [
1583
+ (a(!0), d(J, null, Z(p.steps, ($, V) => (a(), d(J, {
1584
+ key: $.key
1585
+ }, [
1586
+ V ? (a(), d("div", {
1587
+ key: 0,
1588
+ class: "flex flex-1 items-center",
1589
+ style: D({ height: `${We}px` })
1590
+ }, e2, 4)) : C("", !0),
1591
+ i("div", t2, [
1592
+ O(H, {
1593
+ name: l[$.state].icon,
1594
+ size: We,
1595
+ color: l[$.state].color
1596
+ }, null, 8, ["name", "color"]),
1597
+ i("span", {
1598
+ class: b(["w-full truncate text-center text-[10px] leading-tight", $.state === "running" ? "text-white" : "text-[#ffffff77]"]),
1599
+ title: $.detail || $.title
1600
+ }, B($.title), 11, l2)
1601
+ ])
1602
+ ], 64))), 128))
1603
+ ]),
1604
+ r.value ? (a(), d("div", o2, [
1605
+ i("div", n2, [
1606
+ i("span", s2, B(p.progressLabel), 1),
1607
+ i("div", a2, [
1608
+ j(p.$slots, "badges")
1609
+ ])
1610
+ ]),
1611
+ O(Hl, {
1612
+ "model-value": p.progress ?? 100,
1613
+ indeterminate: p.indeterminate && p.state === "running",
1614
+ color: p.state === "failed" ? "var(--bluevue-error)" : void 0,
1615
+ label: p.progressLabel
1616
+ }, null, 8, ["model-value", "indeterminate", "color", "label"]),
1617
+ M(o).log ? (a(), d("div", {
1618
+ key: 0,
1619
+ ref_key: "logRef",
1620
+ ref: v,
1621
+ class: "mt-3 max-h-[220px] overflow-y-auto rounded-[6px] bg-[#00000033] px-3 py-2 font-mono text-[11px]"
1622
+ }, [
1623
+ j(p.$slots, "log")
1624
+ ], 512)) : C("", !0)
1625
+ ])) : C("", !0)
1626
+ ]),
1627
+ _: 2
519
1628
  }, [
520
- t("div", M0, [
521
- x.dismissible ? (i(), c("button", {
522
- key: 0,
523
- type: "button",
524
- class: "absolute right-3 top-3 cursor-pointer text-[#ffffffaa] transition-colors hover:text-white",
525
- title: "Close",
526
- onClick: f
527
- }, _0)) : C("", !0),
528
- t("img", {
529
- src: I($0),
530
- alt: "",
531
- class: "bluevue-loading__icon mb-6 h-[100px] w-[100px]"
532
- }, null, 8, V0),
533
- x.message ? (i(), c("span", S0, g(x.message), 1)) : C("", !0)
534
- ])
535
- ], 544));
1629
+ M(o).footer ? {
1630
+ name: "footer",
1631
+ fn: N(() => [
1632
+ j(p.$slots, "footer")
1633
+ ]),
1634
+ key: "0"
1635
+ } : void 0
1636
+ ]), 1032, ["model-value", "persistent"]));
536
1637
  }
537
- }), B0 = ["id"], T0 = {
1638
+ }), i2 = ["id"], r2 = {
538
1639
  key: 0,
539
1640
  class: "h-px bg-[#ffffff0d]"
540
- }, C0 = ["disabled", "onClick"], I0 = { class: "min-w-0" }, R0 = { class: "block text-[13px] leading-snug" }, P0 = {
1641
+ }, u2 = ["disabled", "onClick"], c2 = { class: "min-w-0" }, d2 = { class: "block text-[13px] leading-snug" }, p2 = {
541
1642
  key: 0,
542
1643
  class: "block text-[10px] text-[#ffffff66]"
543
- }, Me = /* @__PURE__ */ Y({
1644
+ }, Fo = /* @__PURE__ */ L({
544
1645
  __name: "BlueMenu",
545
1646
  props: {
546
1647
  modelValue: { type: Boolean },
@@ -548,83 +1649,78 @@ const G2 = {
548
1649
  target: {}
549
1650
  },
550
1651
  emits: ["update:modelValue"],
551
- setup(M, { emit: F }) {
552
- const e = M, b = F, {
553
- anchorRef: s,
554
- popoverRef: r,
555
- popoverId: f,
556
- activatorProps: a,
557
- isOpen: x,
558
- isPositioned: p,
559
- floatingStyles: d,
560
- show: _,
561
- hide: P,
562
- onToggle: E
563
- } = m2();
564
- U(x, (w) => b("update:modelValue", w)), U(
1652
+ setup(c, { emit: n }) {
1653
+ const e = c, t = n, {
1654
+ anchorRef: o,
1655
+ popoverRef: l,
1656
+ popoverId: s,
1657
+ activatorProps: u,
1658
+ isOpen: r,
1659
+ isPositioned: v,
1660
+ floatingStyles: f,
1661
+ show: x,
1662
+ hide: p,
1663
+ onToggle: F
1664
+ } = ye();
1665
+ X(r, (V) => t("update:modelValue", V)), X(
565
1666
  () => [e.modelValue, e.target],
566
- ([w, S]) => {
567
- w ? _(S) : P();
1667
+ ([V, R]) => {
1668
+ V ? x(R) : p();
568
1669
  },
569
1670
  { immediate: !0 }
570
1671
  );
571
- function $(w) {
572
- P(), w.action();
1672
+ function $(V) {
1673
+ p(), V.action();
573
1674
  }
574
- return (w, S) => (i(), c(X, null, [
575
- w.target ? C("", !0) : (i(), c("span", {
1675
+ return (V, R) => (a(), d(J, null, [
1676
+ V.target ? C("", !0) : (a(), d("span", {
576
1677
  key: 0,
577
1678
  ref_key: "anchorRef",
578
- ref: s,
1679
+ ref: o,
579
1680
  class: "inline-flex"
580
1681
  }, [
581
- l2(w.$slots, "activator", { props: I(a) })
1682
+ j(V.$slots, "activator", { props: M(u) })
582
1683
  ], 512)),
583
- t("div", {
584
- id: I(f),
1684
+ i("div", {
1685
+ id: M(s),
585
1686
  ref_key: "popoverRef",
586
- ref: r,
1687
+ ref: l,
587
1688
  popover: "",
588
1689
  class: "bluevue-popover",
589
- style: W(I(d)),
590
- onToggle: S[0] || (S[0] = //@ts-ignore
591
- (...B) => I(E) && I(E)(...B))
1690
+ style: D(M(f)),
1691
+ onToggle: R[0] || (R[0] = //@ts-ignore
1692
+ (...P) => M(F) && M(F)(...P))
592
1693
  }, [
593
- t("ul", {
594
- class: m(["bluevue-elevation-5 min-w-[220px] max-h-[60vh] overflow-y-auto rounded-[4px] border border-[#ffffff1a] bg-[#2d2d2d]", I(p) ? "opacity-100" : "opacity-0"])
1694
+ i("ul", {
1695
+ class: b(["bluevue-elevation-5 min-w-[220px] max-h-[60vh] overflow-y-auto rounded-[4px] border border-[#ffffff1a] bg-[#2d2d2d]", M(v) ? "opacity-100" : "opacity-0"])
595
1696
  }, [
596
- (i(!0), c(X, null, t2(w.items, (B, o) => (i(), c("li", {
597
- key: B.title
1697
+ (a(!0), d(J, null, Z(V.items, (P, m) => (a(), d("li", {
1698
+ key: P.title
598
1699
  }, [
599
- o ? (i(), c("div", T0)) : C("", !0),
600
- t("button", {
1700
+ m ? (a(), d("div", r2)) : C("", !0),
1701
+ i("button", {
601
1702
  type: "button",
602
- disabled: B.disabled,
603
- class: m(["flex w-full items-start gap-3 px-4 py-2 text-left", [
604
- B.danger ? "text-[#ff6b6b]" : "text-white",
605
- B.disabled ? "cursor-not-allowed opacity-30" : "cursor-pointer hover:bg-[#ffffff11]"
1703
+ disabled: P.disabled,
1704
+ class: b(["flex w-full items-start gap-3 px-4 py-2 text-left", [
1705
+ P.danger ? "text-[#ff6b6b]" : "text-white",
1706
+ P.disabled ? "cursor-not-allowed opacity-30" : "cursor-pointer hover:bg-[#ffffff11]"
606
1707
  ]]),
607
- onClick: (y) => $(B)
1708
+ onClick: (T) => $(P)
608
1709
  }, [
609
- t("span", {
610
- class: m(["mdi shrink-0 mt-[2px] text-[18px] leading-none", B.icon])
1710
+ i("span", {
1711
+ class: b(["mdi shrink-0 mt-[2px] text-[18px] leading-none", P.icon])
611
1712
  }, null, 2),
612
- t("span", I0, [
613
- t("span", R0, g(B.title), 1),
614
- B.hint ? (i(), c("span", P0, g(B.hint), 1)) : C("", !0)
1713
+ i("span", c2, [
1714
+ i("span", d2, B(P.title), 1),
1715
+ P.hint ? (a(), d("span", p2, B(P.hint), 1)) : C("", !0)
615
1716
  ])
616
- ], 10, C0)
1717
+ ], 10, u2)
617
1718
  ]))), 128))
618
1719
  ], 2)
619
- ], 44, B0)
1720
+ ], 44, i2)
620
1721
  ], 64));
621
1722
  }
622
- }), L0 = { class: "bluevue-panel w-[624px] max-w-full rounded-lg text-white" }, D0 = { class: "flex items-start gap-3 px-5 pt-4 pb-3" }, E0 = { class: "flex-1 min-w-0" }, A0 = { class: "text-base leading-tight truncate" }, z0 = {
623
- key: 0,
624
- class: "text-xs text-[#ffffff88] mt-1 leading-relaxed"
625
- }, j0 = /* @__PURE__ */ t("span", { class: "mdi mdi-close text-[20px] leading-none" }, null, -1), N0 = [
626
- j0
627
- ], O0 = { class: "flex flex-col gap-3 border-t border-[#ffffff0d] px-5 py-4" }, W0 = { class: "flex items-center justify-between gap-3 border-t border-[#ffffff0d] px-5 py-3" }, U0 = { class: "flex-1 text-center text-xs text-[#ffffff88]" }, K0 = ["disabled"], Fe = /* @__PURE__ */ Y({
1723
+ }), m2 = { class: "flex-1 text-center text-xs text-[#ffffff88]" }, Mo = /* @__PURE__ */ L({
628
1724
  __name: "BluePromptDialog",
629
1725
  props: {
630
1726
  modelValue: { type: Boolean },
@@ -639,102 +1735,181 @@ const G2 = {
639
1735
  hint: {}
640
1736
  },
641
1737
  emits: ["update:modelValue", "confirm"],
642
- setup(M, { emit: F }) {
643
- const e = M, b = F, s = h(e.initial ?? ""), r = h(e.notesInitial ?? ""), f = h(null);
644
- U(
1738
+ setup(c, { emit: n }) {
1739
+ const e = c, t = n, o = q(e.initial ?? ""), l = q(e.notesInitial ?? ""), s = q(null);
1740
+ X(
645
1741
  () => e.modelValue,
646
- (d) => {
647
- d && (s.value = e.initial ?? "", r.value = e.notesInitial ?? "");
648
- const _ = f.value;
649
- _ && (d && !_.open && _.showModal(), !d && _.open && _.close());
1742
+ (r) => {
1743
+ r && (o.value = e.initial ?? "", l.value = e.notesInitial ?? "");
650
1744
  }
651
- ), s2(() => {
652
- var d;
653
- e.modelValue && ((d = f.value) == null || d.showModal());
654
- });
655
- function a() {
656
- var d;
657
- (d = f.value) == null || d.close();
658
- }
659
- function x() {
660
- const d = s.value.trim();
661
- d && (a(), b("confirm", d, r.value.trim()));
662
- }
663
- function p(d) {
664
- d.target === f.value && a();
1745
+ );
1746
+ function u() {
1747
+ var v;
1748
+ const r = o.value.trim();
1749
+ r && ((v = s.value) == null || v.close(), t("confirm", r, l.value.trim()));
665
1750
  }
666
- return (d, _) => (i(), c("dialog", {
1751
+ return (r, v) => (a(), U($e, {
667
1752
  ref_key: "dialogRef",
668
- ref: f,
669
- class: "bluevue-dialog",
670
- onClose: _[2] || (_[2] = (P) => b("update:modelValue", !1)),
671
- onClick: p
672
- }, [
673
- t("div", L0, [
674
- t("div", D0, [
675
- t("span", {
676
- class: m(["mdi mt-[2px] shrink-0 text-[22px] leading-none text-[#42A5F5]", d.icon || "mdi-content-save-outline"])
677
- }, null, 2),
678
- t("div", E0, [
679
- t("div", A0, g(d.title), 1),
680
- d.subtitle ? (i(), c("div", z0, g(d.subtitle), 1)) : C("", !0)
1753
+ ref: s,
1754
+ "model-value": r.modelValue,
1755
+ title: r.title,
1756
+ subtitle: r.subtitle,
1757
+ icon: r.icon || "mdi-content-save-outline",
1758
+ "body-class": "flex flex-col gap-3 px-5 py-4",
1759
+ "onUpdate:modelValue": v[3] || (v[3] = (f) => t("update:modelValue", f))
1760
+ }, {
1761
+ footer: N(() => [
1762
+ O(ce, {
1763
+ density: "compact",
1764
+ onClick: v[2] || (v[2] = (f) => {
1765
+ var x;
1766
+ return (x = s.value) == null ? void 0 : x.close();
1767
+ })
1768
+ }, {
1769
+ default: N(() => [
1770
+ oe(" Cancel ")
681
1771
  ]),
682
- t("button", {
683
- type: "button",
684
- class: "cursor-pointer text-[#ffffffaa] transition-colors hover:text-white",
685
- title: "Close",
686
- onClick: a
687
- }, N0)
688
- ]),
689
- t("div", O0, [
690
- M2(w2, {
691
- modelValue: s.value,
692
- "onUpdate:modelValue": _[0] || (_[0] = (P) => s.value = P),
693
- name: "bluevue-prompt-name",
694
- label: d.label,
695
- theme: "dark",
696
- width: "380px",
697
- autofocus: "",
698
- onKeydown: e2(x, ["enter"])
699
- }, null, 8, ["modelValue", "label"]),
700
- d.notesLabel ? (i(), L2(w2, {
1772
+ _: 1
1773
+ }),
1774
+ i("span", m2, B(r.hint), 1),
1775
+ O(ce, {
1776
+ variant: "filled",
1777
+ density: "compact",
1778
+ disabled: !o.value.trim(),
1779
+ onClick: u
1780
+ }, {
1781
+ default: N(() => [
1782
+ oe(B(r.confirmLabel || "Save"), 1)
1783
+ ]),
1784
+ _: 1
1785
+ }, 8, ["disabled"])
1786
+ ]),
1787
+ default: N(() => [
1788
+ O(Re, {
1789
+ modelValue: o.value,
1790
+ "onUpdate:modelValue": v[0] || (v[0] = (f) => o.value = f),
1791
+ name: "bluevue-prompt-name",
1792
+ label: r.label,
1793
+ theme: "dark",
1794
+ width: "380px",
1795
+ autofocus: "",
1796
+ onKeydown: de(u, ["enter"])
1797
+ }, null, 8, ["modelValue", "label"]),
1798
+ r.notesLabel ? (a(), U(Re, {
1799
+ key: 0,
1800
+ modelValue: l.value,
1801
+ "onUpdate:modelValue": v[1] || (v[1] = (f) => l.value = f),
1802
+ name: "bluevue-prompt-notes",
1803
+ label: r.notesLabel,
1804
+ theme: "dark",
1805
+ width: "380px",
1806
+ onKeydown: de(u, ["enter"])
1807
+ }, null, 8, ["modelValue", "label"])) : C("", !0)
1808
+ ]),
1809
+ _: 1
1810
+ }, 8, ["model-value", "title", "subtitle", "icon"]));
1811
+ }
1812
+ }), f2 = ["name", "value", "checked", "disabled", "onChange"], v2 = {
1813
+ key: 0,
1814
+ class: "h-[8px] w-[8px] rounded-full bg-[var(--bluevue-primary)]"
1815
+ }, h2 = { class: "min-w-0 truncate text-[13px]" }, So = /* @__PURE__ */ L({
1816
+ __name: "BlueRadioGroup",
1817
+ props: {
1818
+ modelValue: {},
1819
+ items: {},
1820
+ name: {},
1821
+ label: {},
1822
+ inline: { type: Boolean },
1823
+ disabled: { type: Boolean },
1824
+ theme: {}
1825
+ },
1826
+ emits: ["update:modelValue"],
1827
+ setup(c, { emit: n }) {
1828
+ const e = n;
1829
+ return (t, o) => (a(), d("fieldset", {
1830
+ class: b(["w-full min-w-0", t.disabled ? "opacity-30" : ""])
1831
+ }, [
1832
+ t.label ? (a(), d("legend", {
1833
+ key: 0,
1834
+ class: b(["mb-2 text-[13px]", t.theme === "dark" ? "text-white" : "text-black"])
1835
+ }, B(t.label), 3)) : C("", !0),
1836
+ i("div", {
1837
+ class: b(["flex", t.inline ? "flex-wrap items-center gap-x-5 gap-y-2" : "flex-col gap-2"])
1838
+ }, [
1839
+ (a(!0), d(J, null, Z(t.items, (l) => (a(), d("label", {
1840
+ key: l.value,
1841
+ class: b(["flex items-center gap-2", [
1842
+ t.disabled || l.disabled ? "cursor-not-allowed opacity-30" : "cursor-pointer",
1843
+ t.theme === "dark" ? "text-white" : "text-black"
1844
+ ]])
1845
+ }, [
1846
+ i("input", {
1847
+ type: "radio",
1848
+ class: "peer absolute h-0 w-0 opacity-0",
1849
+ name: t.name,
1850
+ value: l.value,
1851
+ checked: t.modelValue === l.value,
1852
+ disabled: t.disabled || l.disabled,
1853
+ onChange: (s) => e("update:modelValue", l.value)
1854
+ }, null, 40, f2),
1855
+ i("span", {
1856
+ class: b(["flex h-[16px] w-[16px] shrink-0 items-center justify-center rounded-full border transition-colors peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[var(--bluevue-accent)]", t.modelValue === l.value ? "border-[var(--bluevue-primary)]" : t.theme === "dark" ? "border-[#ffffff44]" : "border-[#00000044]"])
1857
+ }, [
1858
+ t.modelValue === l.value ? (a(), d("span", v2)) : C("", !0)
1859
+ ], 2),
1860
+ i("span", h2, B(l.label), 1),
1861
+ l.hint ? (a(), U(ie, {
701
1862
  key: 0,
702
- modelValue: r.value,
703
- "onUpdate:modelValue": _[1] || (_[1] = (P) => r.value = P),
704
- name: "bluevue-prompt-notes",
705
- label: d.notesLabel,
706
- theme: "dark",
707
- width: "380px",
708
- onKeydown: e2(x, ["enter"])
709
- }, null, 8, ["modelValue", "label"])) : C("", !0)
710
- ]),
711
- t("div", W0, [
712
- t("button", {
713
- type: "button",
714
- class: "h-7 shrink-0 cursor-pointer rounded-[4px] bg-[#ffffff11] px-3 text-[13px] font-medium uppercase tracking-wide transition-colors hover:bg-[#ffffff22]",
715
- onClick: a
716
- }, " Cancel "),
717
- t("span", U0, g(d.hint), 1),
718
- t("button", {
719
- type: "button",
720
- disabled: !s.value.trim(),
721
- class: m(["h-7 shrink-0 rounded-[4px] bg-[var(--bluevue-primary)] px-3 text-[13px] font-medium uppercase tracking-wide transition-colors hover:brightness-125 disabled:cursor-not-allowed disabled:bg-[#9e9e9e80] disabled:text-[#afafaf] disabled:opacity-30 disabled:hover:brightness-100", s.value.trim() ? "cursor-pointer" : ""]),
722
- onClick: x
723
- }, g(d.confirmLabel || "Save"), 11, K0)
724
- ])
725
- ])
726
- ], 544));
1863
+ text: l.hint,
1864
+ theme: t.theme,
1865
+ class: "items-center"
1866
+ }, {
1867
+ default: N(() => [
1868
+ O(H, {
1869
+ name: "mdi-information-outline",
1870
+ size: 14,
1871
+ label: l.hint,
1872
+ class: "opacity-60"
1873
+ }, null, 8, ["label"])
1874
+ ]),
1875
+ _: 2
1876
+ }, 1032, ["text", "theme"])) : C("", !0)
1877
+ ], 2))), 128))
1878
+ ], 2)
1879
+ ], 2));
1880
+ }
1881
+ }), b2 = { class: "mb-2 flex items-center gap-2" }, y2 = { class: "text-[13px] uppercase tracking-wide text-[#ffffff88]" }, g2 = {
1882
+ key: 0,
1883
+ class: "min-w-0 flex-1"
1884
+ }, Ro = /* @__PURE__ */ L({
1885
+ __name: "BlueSection",
1886
+ props: {
1887
+ title: {},
1888
+ gap: {}
1889
+ },
1890
+ setup(c) {
1891
+ return (n, e) => (a(), d("section", null, [
1892
+ i("div", b2, [
1893
+ i("span", y2, B(n.title), 1),
1894
+ n.$slots.notes ? (a(), d("div", g2, [
1895
+ j(n.$slots, "notes")
1896
+ ])) : C("", !0)
1897
+ ]),
1898
+ i("div", {
1899
+ class: "flex flex-col",
1900
+ style: D({ gap: `${n.gap ?? 12}px` })
1901
+ }, [
1902
+ j(n.$slots, "default")
1903
+ ], 4)
1904
+ ]));
727
1905
  }
728
- }), G0 = { class: "flex w-full justify-between items-center" }, Y0 = {
1906
+ }), q2 = { class: "flex w-full justify-between items-center" }, w2 = {
729
1907
  key: 0,
730
1908
  class: "min-w-0 max-w-[45%] shrink-0"
731
- }, H0 = ["title"], X0 = { key: 1 }, J0 = {
732
- key: 2,
733
- class: "relative group inline-flex items-center shrink-0 mr-2 ml-auto"
734
- }, Q0 = { class: "absolute bottom-full mb-1 right-0 hidden group-hover:block w-max max-w-[280px] px-2 py-1 text-xs rounded bg-gray-700 text-white z-[1000]" }, Z0 = { class: "flex flex-col items-end min-w-0 shrink-[1000]" }, ee = ["disabled"], te = {
1909
+ }, k2 = ["title"], x2 = { key: 1 }, $2 = { class: "flex flex-col items-end min-w-0 shrink-[1000]" }, B2 = ["disabled"], C2 = {
735
1910
  key: 0,
736
1911
  class: "text-[14px] text-[var(--bluevue-error)]"
737
- }, le = ["id"], ne = ["disabled", "onClick"], _e = /* @__PURE__ */ Y({
1912
+ }, _2 = ["id"], T2 = ["disabled", "onClick"], zo = /* @__PURE__ */ L({
738
1913
  __name: "BlueSelect",
739
1914
  props: {
740
1915
  items: {},
@@ -749,128 +1924,138 @@ const G2 = {
749
1924
  errorMessages: {}
750
1925
  },
751
1926
  emits: ["update:modelValue"],
752
- setup(M, { emit: F }) {
753
- const e = M, b = F, s = h([]), r = h({ name: "Select..." }), {
754
- anchorRef: f,
755
- popoverRef: a,
756
- popoverId: x,
757
- activatorProps: p,
758
- isOpen: d,
759
- isPositioned: _,
760
- floatingStyles: P,
761
- hide: E,
1927
+ setup(c, { emit: n }) {
1928
+ const e = c, t = n, o = q([]), l = q({ name: "Select..." }), {
1929
+ anchorRef: s,
1930
+ popoverRef: u,
1931
+ popoverId: r,
1932
+ activatorProps: v,
1933
+ isOpen: f,
1934
+ isPositioned: x,
1935
+ floatingStyles: p,
1936
+ hide: F,
762
1937
  onToggle: $
763
- } = m2({ matchAnchorWidth: !0 }), w = T(
1938
+ } = ye({ matchAnchorWidth: !0 }), V = w(
764
1939
  () => e.errorMessages && e.errorMessages.length > 0
765
- ), S = T(() => e.theme === "dark" ? "#FFFFFF05" : "#00000011"), B = (u) => {
1940
+ ), R = w(() => e.theme === "dark" ? "#FFFFFF05" : "#00000011"), P = (k) => {
766
1941
  if (e.multiSelect) {
767
- const R = e.items[u].value || e.items[u].name, z = s.value.indexOf(R);
768
- z > -1 ? s.value.splice(z, 1) : s.value.push(R), b("update:modelValue", s.value);
1942
+ const A = e.items[k].value || e.items[k].name, K = o.value.indexOf(A);
1943
+ K > -1 ? o.value.splice(K, 1) : o.value.push(A), t("update:modelValue", o.value);
769
1944
  } else {
770
- const R = e.items[u].value || e.items[u].name;
771
- r.value = e.items[u], b("update:modelValue", R), E();
1945
+ const A = e.items[k].value || e.items[k].name;
1946
+ l.value = e.items[k], t("update:modelValue", A), F();
772
1947
  }
773
- }, o = T(() => e.theme === "dark" ? "text-white" : "text-black"), y = T(() => e.theme === "dark" ? "text-white" : "text-black");
774
- function A(u) {
775
- return u.disabled || e.disabled ? "text-gray-500" : e.theme === "dark" ? "text-white" : "text-black";
1948
+ }, m = w(() => e.theme === "dark" ? "text-white" : "text-black"), T = w(() => e.theme === "dark" ? "text-white" : "text-black");
1949
+ function E(k) {
1950
+ return k.disabled || e.disabled ? "text-gray-500" : e.theme === "dark" ? "text-white" : "text-black";
776
1951
  }
777
- return U(
1952
+ return X(
778
1953
  () => e.modelValue,
779
- (u) => {
1954
+ (k) => {
780
1955
  if (e.multiSelect)
781
- Array.isArray(u) && (s.value = u);
1956
+ Array.isArray(k) && (o.value = k);
782
1957
  else {
783
- const R = e.items.find(
784
- (z) => z.value !== void 0 ? z.value === u : z.name === u
1958
+ const A = e.items.find(
1959
+ (K) => K.value !== void 0 ? K.value === k : K.name === k
785
1960
  );
786
- r.value = R ?? { name: "Select..." };
1961
+ l.value = A ?? { name: "Select..." };
787
1962
  }
788
1963
  },
789
1964
  { immediate: !0 }
790
- ), (u, R) => {
791
- var z;
792
- return i(), c("div", G0, [
793
- u.label ? (i(), c("div", Y0, [
794
- t("label", {
795
- class: m(["block truncate text-start mr-6", [u.theme === "dark" ? "text-white" : "text-black", u.disabled ? "opacity-30" : ""]]),
796
- title: u.label
797
- }, g(u.label), 11, H0)
798
- ])) : (i(), c("div", X0)),
799
- l2(u.$slots, "insetElement"),
800
- u.infoTooltip ? (i(), c("div", J0, [
801
- t("span", {
802
- class: m(["mdi mdi-information-outline text-[16px] opacity-60 cursor-help", u.theme === "dark" ? "text-white" : "text-black"])
803
- }, null, 2),
804
- t("div", Q0, g(u.infoTooltip), 1)
805
- ])) : C("", !0),
806
- t("div", Z0, [
807
- t("button", $2({
1965
+ ), (k, A) => {
1966
+ var K;
1967
+ return a(), d("div", q2, [
1968
+ k.label ? (a(), d("div", w2, [
1969
+ i("label", {
1970
+ class: b(["block truncate text-start mr-6", [k.theme === "dark" ? "text-white" : "text-black", k.disabled ? "opacity-30" : ""]]),
1971
+ title: k.label
1972
+ }, B(k.label), 11, k2)
1973
+ ])) : (a(), d("div", x2)),
1974
+ j(k.$slots, "insetElement"),
1975
+ k.infoTooltip ? (a(), U(ie, {
1976
+ key: 2,
1977
+ text: k.infoTooltip,
1978
+ theme: k.theme,
1979
+ class: "items-center shrink-0 mr-2 ml-auto"
1980
+ }, {
1981
+ default: N(() => [
1982
+ O(H, {
1983
+ name: "mdi-information-outline",
1984
+ size: 16,
1985
+ label: k.infoTooltip,
1986
+ class: b(["opacity-60 cursor-help", k.theme === "dark" ? "text-white" : "text-black"])
1987
+ }, null, 8, ["label", "class"])
1988
+ ]),
1989
+ _: 1
1990
+ }, 8, ["text", "theme"])) : C("", !0),
1991
+ i("div", $2, [
1992
+ i("button", ke({
808
1993
  ref_key: "anchorRef",
809
- ref: f
810
- }, I(p), {
1994
+ ref: s
1995
+ }, M(v), {
811
1996
  type: "button",
812
- disabled: u.disabled,
1997
+ disabled: k.disabled,
813
1998
  class: ["relative inline-flex items-center justify-between pl-4 rounded-[6px] bluevue-elevation-1 min-w-[90px] max-w-full", [
814
- u.disabled ? "opacity-30" : "cursor-pointer",
815
- w.value ? "border-2 border-solid border-[var(--bluevue-error)]" : ""
1999
+ k.disabled ? "opacity-30" : "cursor-pointer",
2000
+ V.value ? "border-2 border-solid border-[var(--bluevue-error)]" : ""
816
2001
  ]],
817
- style: { height: u.height || "30px", width: u.width || "auto", backgroundColor: S.value }
2002
+ style: { height: k.height || "30px", width: k.width || "auto", backgroundColor: R.value }
818
2003
  }), [
819
- t("span", {
820
- class: m(["text-sm font-medium truncate min-w-0 mr-1 -mb-[1px]", y.value])
821
- }, g(u.multiSelect ? s.value.length > 0 ? s.value.join(", ") : "Select..." : r.value.name), 3),
822
- t("span", {
823
- class: m(["mdi mdi-menu-down text-[24px] leading-none shrink-0 transition-transform", [o.value, I(d) ? "rotate-180" : ""]])
2004
+ i("span", {
2005
+ class: b(["text-sm font-medium truncate min-w-0 mr-1 -mb-[1px]", T.value])
2006
+ }, B(k.multiSelect ? o.value.length > 0 ? o.value.join(", ") : "Select..." : l.value.name), 3),
2007
+ i("span", {
2008
+ class: b(["mdi mdi-menu-down text-[24px] leading-none shrink-0 transition-transform", [m.value, M(f) ? "rotate-180" : ""]])
824
2009
  }, null, 2)
825
- ], 16, ee),
826
- w.value ? (i(), c("div", te, g(((z = u.errorMessages) == null ? void 0 : z[0]) || ""), 1)) : C("", !0)
2010
+ ], 16, B2),
2011
+ V.value ? (a(), d("div", C2, B(((K = k.errorMessages) == null ? void 0 : K[0]) || ""), 1)) : C("", !0)
827
2012
  ]),
828
- t("div", {
829
- id: I(x),
2013
+ i("div", {
2014
+ id: M(r),
830
2015
  ref_key: "popoverRef",
831
- ref: a,
2016
+ ref: u,
832
2017
  popover: "",
833
2018
  class: "bluevue-popover",
834
- style: W(I(P)),
835
- onToggle: R[0] || (R[0] = //@ts-ignore
836
- (...N) => I($) && I($)(...N))
2019
+ style: D(M(p)),
2020
+ onToggle: A[0] || (A[0] = //@ts-ignore
2021
+ (...Y) => M($) && M($)(...Y))
837
2022
  }, [
838
- t("ul", {
839
- class: m(["bluevue-elevation-5 max-h-[60vh] overflow-y-auto rounded-[4px] border border-[#FFFFFF22]", [
840
- u.theme === "dark" ? "bg-[var(--bluevue-surface)]" : "bg-white",
841
- I(_) ? "opacity-100" : "opacity-0"
2023
+ i("ul", {
2024
+ class: b(["bluevue-elevation-5 max-h-[60vh] overflow-y-auto rounded-[4px] border border-[#FFFFFF22]", [
2025
+ k.theme === "dark" ? "bg-[var(--bluevue-surface)]" : "bg-white",
2026
+ M(x) ? "opacity-100" : "opacity-0"
842
2027
  ]])
843
2028
  }, [
844
- (i(!0), c(X, null, t2(u.items, (N, Q) => (i(), c("li", {
845
- key: N.name
2029
+ (a(!0), d(J, null, Z(k.items, (Y, te) => (a(), d("li", {
2030
+ key: Y.name
846
2031
  }, [
847
- t("button", {
2032
+ i("button", {
848
2033
  type: "button",
849
- disabled: u.disabled || N.disabled,
850
- class: m(["flex w-full items-center justify-between gap-2 whitespace-nowrap px-4 py-2 text-left text-sm", [
851
- A(N),
852
- u.disabled || N.disabled ? "cursor-not-allowed" : u.theme === "dark" ? "cursor-pointer hover:bg-[#ffffff11]" : "cursor-pointer hover:bg-gray-100"
2034
+ disabled: k.disabled || Y.disabled,
2035
+ class: b(["flex w-full items-center justify-between gap-2 whitespace-nowrap px-4 py-2 text-left text-sm", [
2036
+ E(Y),
2037
+ k.disabled || Y.disabled ? "cursor-not-allowed" : k.theme === "dark" ? "cursor-pointer hover:bg-[#ffffff11]" : "cursor-pointer hover:bg-gray-100"
853
2038
  ]]),
854
- onClick: (G) => B(Q)
2039
+ onClick: (ee) => P(te)
855
2040
  }, [
856
- t("span", {
857
- class: m(["mdi mdi-check text-[16px] leading-none", s.value.includes(N.value || N.name) ? "" : "invisible"])
2041
+ i("span", {
2042
+ class: b(["mdi mdi-check text-[16px] leading-none", o.value.includes(Y.value || Y.name) ? "" : "invisible"])
858
2043
  }, null, 2),
859
- D2(" " + g(N.name), 1)
860
- ], 10, ne)
2044
+ oe(" " + B(Y.name), 1)
2045
+ ], 10, T2)
861
2046
  ]))), 128))
862
2047
  ], 2)
863
- ], 44, le)
2048
+ ], 44, _2)
864
2049
  ]);
865
2050
  };
866
2051
  }
867
- }), oe = { class: "flex w-full justify-between items-center" }, se = {
2052
+ }), V2 = { class: "flex w-full justify-between items-center" }, F2 = {
868
2053
  key: 0,
869
2054
  class: "min-w-0 max-w-[45%] shrink-0"
870
- }, ae = ["title"], ie = { class: "flex justify-between items-center min-w-0 shrink-[1000]" }, re = { class: "absolute inset-x-[18%] top-1/2 -translate-y-1/2 flex justify-between pointer-events-none" }, ue = { key: 0 }, ce = {
2055
+ }, M2 = ["title"], S2 = { class: "flex w-1/2 min-w-0 items-center justify-between" }, R2 = { class: "absolute inset-x-[18%] top-1/2 -translate-y-1/2 flex justify-between pointer-events-none" }, z2 = { key: 0 }, D2 = {
871
2056
  class: "font-bold leading-none select-none",
872
2057
  draggable: "false"
873
- }, de = { key: 1 }, me = ["min", "max", "step"], pe = ["min", "max", "step", "disabled"], Ve = /* @__PURE__ */ Y({
2058
+ }, L2 = { key: 1 }, P2 = ["min", "max", "step"], I2 = ["min", "max", "step", "disabled"], Do = /* @__PURE__ */ L({
874
2059
  __name: "BlueSlider",
875
2060
  props: {
876
2061
  color: {},
@@ -892,215 +2077,228 @@ const G2 = {
892
2077
  formatDisplay: { type: Function }
893
2078
  },
894
2079
  emits: ["update:modelValue"],
895
- setup(M, { emit: F }) {
896
- const e = M, b = F, s = (l) => {
897
- if (!Number.isFinite(l) || l <= 0) return 0;
898
- const v = l.toString();
899
- if (v.includes("e-")) {
900
- const o2 = parseInt(v.split("e-")[1] ?? "0", 10);
901
- return Math.min(6, Math.max(0, o2));
2080
+ setup(c, { emit: n }) {
2081
+ const e = c, t = n, o = (h) => {
2082
+ if (!Number.isFinite(h) || h <= 0) return 0;
2083
+ const z = h.toString();
2084
+ if (z.includes("e-")) {
2085
+ const ge = parseInt(z.split("e-")[1] ?? "0", 10);
2086
+ return Math.min(6, Math.max(0, ge));
902
2087
  }
903
- const [, V = ""] = v.split(".");
904
- return Math.min(6, V.length);
905
- }, r = h(e.modelValue ?? e.min), f = h(r.value), a = h(!1), x = h(!1), p = h(0), d = T(
906
- () => e.scaleFn ? e.scaleFn(r.value) : r.value
907
- ), _ = T(
2088
+ const [, W = ""] = z.split(".");
2089
+ return Math.min(6, W.length);
2090
+ }, l = q(e.modelValue ?? e.min), s = q(l.value), u = q(!1), r = q(!1), v = q(0), f = w(
2091
+ () => e.scaleFn ? e.scaleFn(l.value) : l.value
2092
+ ), x = w(
908
2093
  () => e.labelMin ? e.labelMin : e.formatDisplay ? e.formatDisplay(e.scaleFn ? e.scaleFn(e.min) : e.min) : e.min
909
- ), P = T(
2094
+ ), p = w(
910
2095
  () => e.labelMax ? e.labelMax : e.formatDisplay ? e.formatDisplay(e.scaleFn ? e.scaleFn(e.max) : e.max) : e.max
911
- ), E = T(() => {
912
- const l = r.value;
913
- return e.scaleFn ? e.scaleFn(l) : l;
914
- }), $ = T(() => e.scaleFn ? e.scaleFn(e.min) : e.min), w = T(() => e.scaleFn ? e.scaleFn(e.max) : e.max), S = T(() => e.step ?? 0.1), B = T(() => {
915
- const l = e.keyboardStepMultiplierLimit ?? 3;
916
- return Number.isFinite(l) && l >= 1 ? l : 3;
917
- }), o = h(0), y = h(0), A = h(0), u = () => {
918
- o.value = 0, y.value = 0, A.value = 0;
919
- }, R = (l) => {
920
- const v = Date.now(), V = B.value;
921
- A.value === l && v - o.value <= 250 || (y.value = 0), y.value += 1, o.value = v, A.value = l;
922
- const i2 = Math.min(1, (y.value - 1) / 6);
923
- return 1 + (1 - Math.pow(1 - i2, 2)) * (V - 1);
924
- }, z = T(() => {
925
- if (!e.scaleFn) return S.value;
926
- const l = e.scaleFn(e.min), v = e.scaleFn(e.min + S.value), V = Math.abs(v - l);
927
- return V > 0 ? V : S.value;
928
- }), N = T(() => s(z.value)), Q = (l, v) => {
929
- const V = Math.max(S.value / 10, 1e-4);
930
- return Math.abs(l - v) <= V;
931
- }, G = T(() => (r.value - e.min) / (e.max - e.min) * 100), n2 = h(0), a2 = T(
932
- () => `calc((100% - 70px) * ${(a.value ? n2.value : G.value) / 100})`
933
- ), J = (l) => {
934
- l !== f.value && (f.value = l, b("update:modelValue", l));
935
- }, n = h(null);
936
- let q = null;
937
- const L = h(0), j = () => {
938
- n.value = null, L.value = 0, q && (clearTimeout(q), q = null);
939
- }, k = (l) => {
940
- n.value = l, L.value = Date.now() + 2e3, q && clearTimeout(q), q = window.setTimeout(() => {
941
- q = null, n.value = null, L.value = 0;
2096
+ ), F = w(() => {
2097
+ const h = l.value;
2098
+ return e.scaleFn ? e.scaleFn(h) : h;
2099
+ }), $ = w(() => e.scaleFn ? e.scaleFn(e.min) : e.min), V = w(() => e.scaleFn ? e.scaleFn(e.max) : e.max), R = w(() => e.step ?? 0.1), P = w(() => {
2100
+ const h = e.keyboardStepMultiplierLimit ?? 3;
2101
+ return Number.isFinite(h) && h >= 1 ? h : 3;
2102
+ }), m = q(0), T = q(0), E = q(0), k = () => {
2103
+ m.value = 0, T.value = 0, E.value = 0;
2104
+ }, A = (h) => {
2105
+ const z = Date.now(), W = P.value;
2106
+ E.value === h && z - m.value <= 250 || (T.value = 0), T.value += 1, m.value = z, E.value = h;
2107
+ const Be = Math.min(1, (T.value - 1) / 6);
2108
+ return 1 + (1 - Math.pow(1 - Be, 2)) * (W - 1);
2109
+ }, K = w(() => {
2110
+ if (!e.scaleFn) return R.value;
2111
+ const h = e.scaleFn(e.min), z = e.scaleFn(e.min + R.value), W = Math.abs(z - h);
2112
+ return W > 0 ? W : R.value;
2113
+ }), Y = w(() => o(K.value)), te = (h, z) => {
2114
+ const W = Math.max(R.value / 10, 1e-4);
2115
+ return Math.abs(h - z) <= W;
2116
+ }, ee = w(() => (l.value - e.min) / (e.max - e.min) * 100), re = q(0), fe = w(
2117
+ () => `calc((100% - 70px) * ${(u.value ? re.value : ee.value) / 100})`
2118
+ ), ne = (h) => {
2119
+ h !== s.value && (s.value = h, t("update:modelValue", h));
2120
+ }, y = q(null);
2121
+ let S = null;
2122
+ const g = q(0), I = () => {
2123
+ y.value = null, g.value = 0, S && (clearTimeout(S), S = null);
2124
+ }, _ = (h) => {
2125
+ y.value = h, g.value = Date.now() + 2e3, S && clearTimeout(S), S = window.setTimeout(() => {
2126
+ S = null, y.value = null, g.value = 0;
942
2127
  }, 2e3);
943
- }, D = () => {
944
- const l = Math.min(Math.max(r.value, e.min), e.max);
945
- r.value = l, p2(l);
946
- }, O = () => {
947
- Z();
948
- }, F2 = () => {
949
- p.value = Math.min(Math.max(p.value, $.value), w.value);
2128
+ }, G = () => {
2129
+ const h = Math.min(Math.max(l.value, e.min), e.max);
2130
+ l.value = h, ze(h);
2131
+ }, Q = () => {
2132
+ ve();
2133
+ }, nt = () => {
2134
+ v.value = Math.min(Math.max(v.value, $.value), V.value);
950
2135
  };
951
- let H = null, K = null;
952
- const p2 = (l) => {
953
- if (K = l, H) return;
954
- const v = K;
955
- K = null, J(v), H = window.setTimeout(() => {
956
- if (H = null, K === null) return;
957
- const V = K;
958
- K = null, J(V);
2136
+ let se = null, le = null;
2137
+ const ze = (h) => {
2138
+ if (le = h, se) return;
2139
+ const z = le;
2140
+ le = null, ne(z), se = window.setTimeout(() => {
2141
+ if (se = null, le === null) return;
2142
+ const W = le;
2143
+ le = null, ne(W);
959
2144
  }, 500);
960
- }, _2 = () => {
961
- if (H && (clearTimeout(H), H = null), K === null) return;
962
- const l = K;
963
- K = null, J(l);
964
- }, Z = () => {
965
- x.value = !1;
966
- const l = Math.min(Math.max(r.value, e.min), e.max);
967
- r.value = l, K = l, _2(), J(l), k(l);
968
- }, f2 = () => Z(), q2 = () => Z(), V2 = () => {
969
- e.disabled || a.value || (x.value = !0, j(), window.addEventListener("pointerup", f2, { once: !0 }), window.addEventListener("pointercancel", q2, { once: !0 }));
970
- }, v2 = (l) => l === "ArrowLeft" || l === "ArrowRight" || l === "ArrowUp" || l === "ArrowDown", S2 = (l) => {
971
- if (e.disabled || a.value || !v2(l.key)) return;
972
- l.preventDefault();
973
- const v = l.key === "ArrowRight" || l.key === "ArrowUp" ? 1 : -1, V = S.value;
974
- if (!Number.isFinite(V) || V <= 0) return;
975
- const o2 = R(v), h2 = V * o2, i2 = r.value + v * h2, b2 = Math.min(Math.max(i2, e.min), e.max), C2 = Math.round((b2 - e.min) / V), x2 = Math.min(
976
- Math.max(e.min + C2 * V, e.min),
2145
+ }, st = () => {
2146
+ if (se && (clearTimeout(se), se = null), le === null) return;
2147
+ const h = le;
2148
+ le = null, ne(h);
2149
+ }, ve = () => {
2150
+ r.value = !1;
2151
+ const h = Math.min(Math.max(l.value, e.min), e.max);
2152
+ l.value = h, le = h, st(), ne(h), _(h);
2153
+ }, De = () => ve(), Le = () => ve(), at = () => {
2154
+ e.disabled || u.value || (r.value = !0, I(), window.addEventListener("pointerup", De, { once: !0 }), window.addEventListener("pointercancel", Le, { once: !0 }));
2155
+ }, Pe = (h) => h === "ArrowLeft" || h === "ArrowRight" || h === "ArrowUp" || h === "ArrowDown", it = (h) => {
2156
+ if (e.disabled || u.value || !Pe(h.key)) return;
2157
+ h.preventDefault();
2158
+ const z = h.key === "ArrowRight" || h.key === "ArrowUp" ? 1 : -1, W = R.value;
2159
+ if (!Number.isFinite(W) || W <= 0) return;
2160
+ const ge = A(z), Ie = W * ge, Be = l.value + z * Ie, Ee = Math.min(Math.max(Be, e.min), e.max), ct = Math.round((Ee - e.min) / W), Ae = Math.min(
2161
+ Math.max(e.min + ct * W, e.min),
977
2162
  e.max
978
2163
  );
979
- r.value = x2, p2(x2), x.value || (x.value = !0, j());
980
- }, B2 = (l) => {
981
- v2(l.key) && (u(), Z());
982
- }, T2 = (l) => {
983
- l.key === "Escape" ? (a.value = !1, p.value = e.scaleFn ? e.scaleFn(f.value) : f.value, r.value = f.value) : l.key === "Enter" && (a.value = !1);
2164
+ l.value = Ae, ze(Ae), r.value || (r.value = !0, I());
2165
+ }, rt = (h) => {
2166
+ Pe(h.key) && (k(), ve());
2167
+ }, ut = (h) => {
2168
+ h.key === "Escape" ? (u.value = !1, v.value = e.scaleFn ? e.scaleFn(s.value) : s.value, l.value = s.value) : h.key === "Enter" && (u.value = !1);
984
2169
  };
985
- return U(
2170
+ return X(
986
2171
  () => e.modelValue,
987
- (l) => {
988
- const v = l ?? e.min;
989
- a.value || x.value || n.value !== null && Date.now() < L.value && !Q(v, n.value) || (r.value = v);
2172
+ (h) => {
2173
+ const z = h ?? e.min;
2174
+ u.value || r.value || y.value !== null && Date.now() < g.value && !te(z, y.value) || (l.value = z);
990
2175
  },
991
2176
  { immediate: !0 }
992
- ), U(a, (l) => {
993
- if (l)
994
- p.value = E.value, n2.value = G.value;
2177
+ ), X(u, (h) => {
2178
+ if (h)
2179
+ v.value = F.value, re.value = ee.value;
995
2180
  else {
996
- const v = e.unscaleFn ? e.unscaleFn(p.value) : p.value;
997
- r.value = Math.min(Math.max(v, e.min), e.max), J(r.value), k(r.value);
2181
+ const z = e.unscaleFn ? e.unscaleFn(v.value) : v.value;
2182
+ l.value = Math.min(Math.max(z, e.min), e.max), ne(l.value), _(l.value);
998
2183
  }
999
- }), k2(() => {
1000
- H && clearTimeout(H), q && clearTimeout(q), window.removeEventListener("pointerup", f2), window.removeEventListener("pointercancel", q2);
1001
- }), (l, v) => (i(), c("div", oe, [
1002
- l.label ? (i(), c("div", se, [
1003
- t("label", {
1004
- class: m(["block truncate text-start mr-6", [l.theme === "dark" ? "text-white" : "text-black", l.disabled ? "opacity-30" : ""]]),
1005
- title: l.label
1006
- }, g(l.label), 11, ae)
2184
+ }), me(() => {
2185
+ se && clearTimeout(se), S && clearTimeout(S), window.removeEventListener("pointerup", De), window.removeEventListener("pointercancel", Le);
2186
+ }), (h, z) => (a(), d("div", V2, [
2187
+ h.label ? (a(), d("div", F2, [
2188
+ i("label", {
2189
+ class: b(["block truncate text-start mr-6", [h.theme === "dark" ? "text-white" : "text-black", h.disabled ? "opacity-30" : ""]]),
2190
+ title: h.label
2191
+ }, B(h.label), 11, M2)
1007
2192
  ])) : C("", !0),
1008
- t("div", ie, [
1009
- t("div", {
2193
+ i("div", S2, [
2194
+ i("div", {
1010
2195
  name: "slider-track",
1011
- class: m(["relative overflow-visible rounded-[6px] bluevue-elevation-1 min-w-[140px] max-w-full", [l.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", l.disabled ? "opacity-30" : ""]]),
1012
- style: W({ width: l.width || "100%", height: l.height || "30px", cursor: l.disabled ? "not-allowed" : "pointer" })
2196
+ class: b(["relative overflow-visible rounded-[6px] bluevue-elevation-1 min-w-[140px] max-w-full", [h.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", h.disabled ? "opacity-30" : ""]]),
2197
+ style: D({ width: h.width || "100%", height: h.height || "30px", cursor: h.disabled ? "not-allowed" : "pointer" })
1013
2198
  }, [
1014
- t("div", re, [
1015
- (i(), c(X, null, t2(6, (V) => t("div", {
1016
- key: V,
2199
+ i("div", R2, [
2200
+ (a(), d(J, null, Z(6, (W) => i("div", {
2201
+ key: W,
1017
2202
  class: "mdi mdi-circle w-2 h-2",
1018
- style: W({
2203
+ style: D({
1019
2204
  fontSize: "6px",
1020
- color: l.theme === "dark" ? "#ffffff11" : "#00000011"
2205
+ color: h.theme === "dark" ? "#ffffff11" : "#00000011"
1021
2206
  })
1022
2207
  }, null, 4)), 64))
1023
2208
  ]),
1024
- t("div", {
1025
- class: m(["absolute translate-y-1/2 bottom-1/2 flex items-center justify-center text-white text-center text-[14px] whitespace-nowrap min-w-[60px] rounded-[6px] bluevue-elevation-1 z-50 h-3/4", a.value ? "pointer-events-auto" : "pointer-events-none select-none"]),
1026
- style: W({
1027
- left: a2.value,
2209
+ i("div", {
2210
+ class: b(["absolute translate-y-1/2 bottom-1/2 flex items-center justify-center text-white text-center text-[14px] whitespace-nowrap min-w-[60px] rounded-[6px] bluevue-elevation-1 z-50 h-3/4", u.value ? "pointer-events-auto" : "pointer-events-none select-none"]),
2211
+ style: D({
2212
+ left: fe.value,
1028
2213
  marginLeft: "5px",
1029
- backgroundColor: l.color || "var(--bluevue-primary)"
2214
+ backgroundColor: h.color || "var(--bluevue-primary)"
1030
2215
  })
1031
2216
  }, [
1032
- a.value ? (i(), c("div", de, [
1033
- c2(t("input", {
2217
+ u.value ? (a(), d("div", L2, [
2218
+ Te(i("input", {
1034
2219
  ref: "editInput",
1035
- "onUpdate:modelValue": v[0] || (v[0] = (V) => p.value = V),
2220
+ "onUpdate:modelValue": z[0] || (z[0] = (W) => v.value = W),
1036
2221
  type: "number",
1037
2222
  min: $.value,
1038
- max: w.value,
1039
- step: z.value,
2223
+ max: V.value,
2224
+ step: K.value,
1040
2225
  autofocus: "",
1041
2226
  class: "bg-white border border-gray-300 rounded px-1 py-0.5",
1042
- onInput: F2,
1043
- onKeydown: T2,
1044
- onBlur: v[1] || (v[1] = (V) => a.value = !1)
1045
- }, null, 40, me), [
2227
+ onInput: nt,
2228
+ onKeydown: ut,
2229
+ onBlur: z[1] || (z[1] = (W) => u.value = !1)
2230
+ }, null, 40, P2), [
1046
2231
  [
1047
- y2,
1048
- p.value,
2232
+ je,
2233
+ v.value,
1049
2234
  void 0,
1050
2235
  { number: !0 }
1051
2236
  ]
1052
2237
  ])
1053
- ])) : (i(), c("div", ue, [
1054
- t("p", ce, g(l.formatDisplay ? l.formatDisplay(d.value) : d.value.toFixed(N.value)), 1)
2238
+ ])) : (a(), d("div", z2, [
2239
+ i("p", D2, B(h.formatDisplay ? h.formatDisplay(f.value) : f.value.toFixed(Y.value)), 1)
1055
2240
  ]))
1056
2241
  ], 6),
1057
- c2(t("input", {
1058
- "onUpdate:modelValue": v[2] || (v[2] = (V) => r.value = V),
2242
+ Te(i("input", {
2243
+ "onUpdate:modelValue": z[2] || (z[2] = (W) => l.value = W),
1059
2244
  type: "range",
1060
- class: m(["absolute inset-0 w-full h-full opacity-0", l.disabled ? "cursor-not-allowed" : "cursor-pointer"]),
2245
+ class: b(["absolute inset-0 w-full h-full opacity-0", h.disabled ? "cursor-not-allowed" : "cursor-pointer"]),
1061
2246
  style: { width: "95%", left: "2.5%" },
1062
- min: l.min,
1063
- max: l.max,
1064
- step: S.value,
1065
- disabled: l.disabled || a.value,
1066
- onInput: D,
1067
- onChange: O,
1068
- onPointerdown: V2,
1069
- onKeydown: S2,
1070
- onKeyup: B2,
1071
- onBlur: Z,
1072
- onDblclick: v[3] || (v[3] = (V) => a.value = !0)
1073
- }, null, 42, pe), [
2247
+ min: h.min,
2248
+ max: h.max,
2249
+ step: R.value,
2250
+ disabled: h.disabled || u.value,
2251
+ onInput: G,
2252
+ onChange: Q,
2253
+ onPointerdown: at,
2254
+ onKeydown: it,
2255
+ onKeyup: rt,
2256
+ onBlur: ve,
2257
+ onDblclick: z[3] || (z[3] = (W) => u.value = !0)
2258
+ }, null, 42, I2), [
1074
2259
  [
1075
- y2,
1076
- r.value,
2260
+ je,
2261
+ l.value,
1077
2262
  void 0,
1078
2263
  { number: !0 }
1079
2264
  ]
1080
2265
  ]),
1081
- t("p", {
1082
- class: m(["absolute left-[5px] top-1/2 -translate-y-1/2 min-w-[30px] text-[12px] font-medium text-center whitespace-nowrap z-10 pointer-events-none", l.theme === "dark" ? "text-[#ffffff44]" : "text-[#00000066]"])
1083
- }, g(_.value), 3),
1084
- t("p", {
1085
- class: m(["absolute right-[5px] top-1/2 -translate-y-1/2 min-w-[30px] text-[12px] font-medium text-center whitespace-nowrap z-10 pointer-events-none", l.theme === "dark" ? "text-[#ffffff44]" : "text-[#00000066]"])
1086
- }, g(P.value), 3),
1087
- a.value ? (i(), c("div", {
2266
+ i("p", {
2267
+ class: b(["absolute left-[5px] top-1/2 -translate-y-1/2 min-w-[30px] text-[12px] font-medium text-center whitespace-nowrap z-10 pointer-events-none", h.theme === "dark" ? "text-[#ffffff44]" : "text-[#00000066]"])
2268
+ }, B(x.value), 3),
2269
+ i("p", {
2270
+ class: b(["absolute right-[5px] top-1/2 -translate-y-1/2 min-w-[30px] text-[12px] font-medium text-center whitespace-nowrap z-10 pointer-events-none", h.theme === "dark" ? "text-[#ffffff44]" : "text-[#00000066]"])
2271
+ }, B(p.value), 3),
2272
+ u.value ? (a(), d("div", {
1088
2273
  key: 0,
1089
2274
  class: "absolute mdi mdi-check mdi-24px",
1090
2275
  style: { right: "-30px", top: "50%", transform: "translateY(-50%)", cursor: "pointer", color: "green" },
1091
- onClick: v[4] || (v[4] = (V) => a.value = !1)
2276
+ onClick: z[4] || (z[4] = (W) => u.value = !1)
1092
2277
  })) : C("", !0)
1093
2278
  ], 6)
1094
2279
  ])
1095
2280
  ]));
1096
2281
  }
1097
- }), fe = { class: "flex w-full justify-between items-center" }, qe = {
2282
+ }), E2 = { class: "bluevue-elevation-1 min-w-[120px] flex-1 rounded-[6px] bg-[#00000022] px-3 py-2" }, A2 = { class: "truncate text-[11px] uppercase tracking-wide text-[#ffffff66]" }, j2 = ["title"], Lo = /* @__PURE__ */ L({
2283
+ __name: "BlueStat",
2284
+ props: {
2285
+ label: {},
2286
+ value: {},
2287
+ placeholder: {}
2288
+ },
2289
+ setup(c) {
2290
+ return (n, e) => (a(), d("div", E2, [
2291
+ i("div", A2, B(n.label), 1),
2292
+ i("div", {
2293
+ class: "truncate text-sm text-white",
2294
+ title: n.value === null || n.value === void 0 || n.value === "" ? void 0 : String(n.value)
2295
+ }, B(n.value === null || n.value === void 0 || n.value === "" ? n.placeholder ?? "—" : n.value), 9, j2)
2296
+ ]));
2297
+ }
2298
+ }), O2 = { class: "flex w-full justify-between items-center" }, N2 = {
1098
2299
  key: 0,
1099
2300
  class: "min-w-0 max-w-[45%] shrink-0"
1100
- }, ve = ["title"], he = { class: "flex items-center min-w-0 shrink-[1000]" }, be = {
1101
- key: 0,
1102
- class: "relative group inline-flex items-center shrink-0 mr-2"
1103
- }, xe = { class: "absolute bottom-full mb-1 right-0 hidden group-hover:block w-max max-w-[280px] px-2 py-1 text-xs rounded bg-gray-700 text-white z-[1000]" }, Se = /* @__PURE__ */ Y({
2301
+ }, W2 = ["title"], U2 = { class: "flex items-center min-w-0 shrink-[1000]" }, Po = /* @__PURE__ */ L({
1104
2302
  __name: "BlueSwitch",
1105
2303
  props: {
1106
2304
  color: {},
@@ -1116,61 +2314,549 @@ const G2 = {
1116
2314
  width: {}
1117
2315
  },
1118
2316
  emits: ["update:modelValue"],
1119
- setup(M, { emit: F }) {
1120
- const e = M, b = F, s = h(e.modelValue || !1), r = (a) => a ? ["text-white"] : ["opacity-20", e.theme === "dark" ? "text-white" : "text-black"], f = () => {
1121
- e.disabled || (s.value = !s.value, b("update:modelValue", s.value));
2317
+ setup(c, { emit: n }) {
2318
+ const e = c, t = n, o = q(e.modelValue || !1), l = (u) => u ? ["text-white"] : ["opacity-20", e.theme === "dark" ? "text-white" : "text-black"], s = () => {
2319
+ e.disabled || (o.value = !o.value, t("update:modelValue", o.value));
1122
2320
  };
1123
- return U(
2321
+ return X(
1124
2322
  () => e.modelValue,
1125
- (a) => s.value = a ?? !1,
2323
+ (u) => o.value = u ?? !1,
1126
2324
  { immediate: !0 }
1127
- ), (a, x) => (i(), c("div", fe, [
1128
- a.label ? (i(), c("div", qe, [
1129
- t("label", {
1130
- class: m(["block truncate text-start mr-6", a.theme === "dark" ? "text-white" : "text-black"]),
1131
- title: a.label
1132
- }, g(a.label), 11, ve)
2325
+ ), (u, r) => (a(), d("div", O2, [
2326
+ u.label ? (a(), d("div", N2, [
2327
+ i("label", {
2328
+ class: b(["block truncate text-start mr-6", u.theme === "dark" ? "text-white" : "text-black"]),
2329
+ title: u.label
2330
+ }, B(u.label), 11, W2)
1133
2331
  ])) : C("", !0),
1134
- t("div", he, [
1135
- a.infoTooltip ? (i(), c("div", be, [
1136
- t("span", {
1137
- class: m(["mdi mdi-information-outline text-[16px] opacity-60 cursor-help", a.theme === "dark" ? "text-white" : "text-black"])
1138
- }, null, 2),
1139
- t("div", xe, g(a.infoTooltip), 1)
1140
- ])) : C("", !0),
1141
- t("div", {
2332
+ i("div", U2, [
2333
+ u.infoTooltip ? (a(), U(ie, {
2334
+ key: 0,
2335
+ text: u.infoTooltip,
2336
+ theme: u.theme,
2337
+ class: "items-center shrink-0 mr-2"
2338
+ }, {
2339
+ default: N(() => [
2340
+ O(H, {
2341
+ name: "mdi-information-outline",
2342
+ size: 16,
2343
+ label: u.infoTooltip,
2344
+ class: b(["opacity-60 cursor-help", u.theme === "dark" ? "text-white" : "text-black"])
2345
+ }, null, 8, ["label", "class"])
2346
+ ]),
2347
+ _: 1
2348
+ }, 8, ["text", "theme"])) : C("", !0),
2349
+ i("div", {
1142
2350
  name: "switch-track",
1143
- class: m(["relative grid grid-cols-2 rounded-[8px] bluevue-elevation-1 cursor-pointer overflow-hidden", [a.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", a.disabled ? "opacity-30 cursor-not-allowed" : ""]]),
1144
- style: W({ minWidth: a.width || "75px", height: a.height || "30px" }),
1145
- onClick: f
2351
+ class: b(["relative grid grid-cols-2 rounded-[8px] bluevue-elevation-1 cursor-pointer overflow-hidden", [u.theme === "dark" ? "bg-[#464646AA]" : "bg-[#00000011]", u.disabled ? "opacity-30 cursor-not-allowed" : ""]]),
2352
+ style: D({ minWidth: u.width || "75px", height: u.height || "30px" }),
2353
+ onClick: s
1146
2354
  }, [
1147
- t("div", {
2355
+ i("div", {
1148
2356
  class: "absolute top-[4px] bottom-[4px] w-[calc(50%-4px)] rounded-[8px] bluevue-elevation-1 transition-all duration-300",
1149
- style: W({
1150
- left: s.value ? "calc(50% + 2px)" : "2px",
1151
- backgroundColor: s.value ? a.color || "var(--bluevue-primary)" : "#777777"
2357
+ style: D({
2358
+ left: o.value ? "calc(50% + 2px)" : "2px",
2359
+ backgroundColor: o.value ? u.color || "var(--bluevue-primary)" : "#777777"
1152
2360
  })
1153
2361
  }, null, 4),
1154
- t("span", {
1155
- class: m(["relative flex items-center justify-center px-[6px] text-[14px] whitespace-nowrap pointer-events-none transition-opacity duration-300", r(!s.value)])
1156
- }, g(a.labelOff || "Off"), 3),
1157
- t("span", {
1158
- class: m(["relative flex items-center justify-center px-[6px] text-[14px] whitespace-nowrap pointer-events-none transition-opacity duration-300", r(s.value)])
1159
- }, g(a.labelOn || "On"), 3)
2362
+ i("span", {
2363
+ class: b(["relative flex items-center justify-center px-[9px] text-[14px] whitespace-nowrap pointer-events-none transition-opacity duration-300", l(!o.value)])
2364
+ }, B(u.labelOff || "Off"), 3),
2365
+ i("span", {
2366
+ class: b(["relative flex items-center justify-center px-[9px] text-[14px] whitespace-nowrap pointer-events-none transition-opacity duration-300", l(o.value)])
2367
+ }, B(u.labelOn || "On"), 3)
1160
2368
  ], 6)
1161
2369
  ])
1162
2370
  ]));
1163
2371
  }
2372
+ }), K2 = { class: "w-full border-collapse text-[13px]" }, G2 = ["aria-sort", "onClick"], H2 = { class: "inline-flex items-center gap-1" }, J2 = ["onClick"], Y2 = { key: 0 }, X2 = ["colspan"], Io = /* @__PURE__ */ L({
2373
+ __name: "BlueTable",
2374
+ props: {
2375
+ columns: {},
2376
+ rows: {},
2377
+ rowKey: {},
2378
+ sortBy: {},
2379
+ maxHeight: {},
2380
+ dense: { type: Boolean },
2381
+ emptyText: {},
2382
+ theme: {}
2383
+ },
2384
+ emits: ["row-click"],
2385
+ setup(c) {
2386
+ const n = c, e = q(n.sortBy ?? ""), t = q(!1), o = (r) => {
2387
+ if (r.sortable) {
2388
+ if (e.value === r.key) {
2389
+ t.value = !t.value;
2390
+ return;
2391
+ }
2392
+ e.value = r.key, t.value = !1;
2393
+ }
2394
+ }, l = (r, v) => r == null ? v == null ? 0 : 1 : v == null ? -1 : typeof r == "number" && typeof v == "number" ? r - v : String(r).localeCompare(String(v), void 0, { numeric: !0 }), s = w(() => {
2395
+ if (!e.value) return n.rows;
2396
+ const r = t.value ? -1 : 1;
2397
+ return [...n.rows].sort((v, f) => r * l(v[e.value], f[e.value]));
2398
+ }), u = (r) => r.align === "end" ? "text-end" : r.align === "center" ? "text-center" : "text-start";
2399
+ return (r, v) => (a(), d("div", {
2400
+ class: b(["w-full overflow-auto rounded-[6px]", r.theme === "light" ? "bg-[#00000006]" : "bg-[#ffffff08]"]),
2401
+ style: D({ maxHeight: r.maxHeight })
2402
+ }, [
2403
+ i("table", K2, [
2404
+ i("thead", null, [
2405
+ i("tr", null, [
2406
+ (a(!0), d(J, null, Z(r.columns, (f) => (a(), d("th", {
2407
+ key: f.key,
2408
+ scope: "col",
2409
+ class: b(["sticky top-0 z-[1] whitespace-nowrap border-b px-3 py-2 text-[11px] font-medium uppercase tracking-wide backdrop-blur-sm", [
2410
+ u(f),
2411
+ f.sortable ? "cursor-pointer select-none" : "",
2412
+ r.theme === "light" ? "border-[#00000014] bg-[#f5f5f5cc] text-[#00000088]" : "border-[#ffffff14] bg-[#1e1e1ecc] text-[#ffffff88]"
2413
+ ]]),
2414
+ style: D({ width: f.width }),
2415
+ "aria-sort": e.value === f.key ? t.value ? "descending" : "ascending" : void 0,
2416
+ onClick: (x) => o(f)
2417
+ }, [
2418
+ i("span", H2, [
2419
+ oe(B(f.title) + " ", 1),
2420
+ f.sortable ? (a(), U(H, {
2421
+ key: 0,
2422
+ name: e.value === f.key ? t.value ? "mdi-arrow-down" : "mdi-arrow-up" : "mdi-arrow-up-down",
2423
+ size: 12,
2424
+ class: b(e.value === f.key ? "" : "opacity-30")
2425
+ }, null, 8, ["name", "class"])) : C("", !0)
2426
+ ])
2427
+ ], 14, G2))), 128))
2428
+ ])
2429
+ ]),
2430
+ i("tbody", null, [
2431
+ (a(!0), d(J, null, Z(s.value, (f, x) => (a(), d("tr", {
2432
+ key: String(r.rowKey ? f[r.rowKey] : x),
2433
+ class: b(["transition-colors", r.theme === "light" ? "hover:bg-[#0000000a]" : "hover:bg-[#ffffff0a]"]),
2434
+ onClick: (p) => r.$emit("row-click", f)
2435
+ }, [
2436
+ (a(!0), d(J, null, Z(r.columns, (p) => (a(), d("td", {
2437
+ key: p.key,
2438
+ class: b(["border-b px-3", [
2439
+ u(p),
2440
+ r.dense ? "py-1" : "py-2",
2441
+ r.theme === "light" ? "border-[#0000000a] text-black" : "border-[#ffffff0a] text-white"
2442
+ ]])
2443
+ }, [
2444
+ j(r.$slots, `cell-${p.key}`, {
2445
+ row: f,
2446
+ value: f[p.key]
2447
+ }, () => [
2448
+ oe(B(f[p.key] ?? "—"), 1)
2449
+ ])
2450
+ ], 2))), 128))
2451
+ ], 10, J2))), 128)),
2452
+ s.value.length === 0 ? (a(), d("tr", Y2, [
2453
+ i("td", {
2454
+ colspan: r.columns.length,
2455
+ class: b(["px-3 py-6 text-center text-[13px]", r.theme === "light" ? "text-[#00000066]" : "text-[#ffffff66]"])
2456
+ }, [
2457
+ j(r.$slots, "empty", {}, () => [
2458
+ oe(B(r.emptyText ?? "Nothing here yet."), 1)
2459
+ ])
2460
+ ], 10, X2)
2461
+ ])) : C("", !0)
2462
+ ])
2463
+ ])
2464
+ ], 6));
2465
+ }
2466
+ }), Z2 = ["aria-selected", "disabled", "onClick"], Q2 = { class: "min-w-0 truncate" }, eo = {
2467
+ key: 2,
2468
+ class: "absolute inset-x-0 -bottom-px h-[2px] rounded-full bg-[var(--bluevue-accent)]"
2469
+ }, Eo = /* @__PURE__ */ L({
2470
+ __name: "BlueTabs",
2471
+ props: {
2472
+ modelValue: {},
2473
+ tabs: {},
2474
+ stretch: { type: Boolean },
2475
+ theme: {}
2476
+ },
2477
+ emits: ["update:modelValue"],
2478
+ setup(c, { emit: n }) {
2479
+ const e = n;
2480
+ return (t, o) => (a(), d("div", {
2481
+ class: b(["flex items-stretch gap-1 border-b", t.theme === "light" ? "border-[#00000014]" : "border-[#ffffff14]"]),
2482
+ role: "tablist"
2483
+ }, [
2484
+ (a(!0), d(J, null, Z(t.tabs, (l) => (a(), d("button", {
2485
+ key: l.value,
2486
+ type: "button",
2487
+ role: "tab",
2488
+ "aria-selected": t.modelValue === l.value,
2489
+ disabled: l.disabled,
2490
+ class: b(["relative flex items-center justify-center gap-2 whitespace-nowrap px-3 pb-2 pt-[6px] text-[13px] font-medium transition-colors", [
2491
+ t.stretch ? "flex-1" : "",
2492
+ l.disabled ? "cursor-not-allowed opacity-30" : "cursor-pointer",
2493
+ t.modelValue === l.value ? t.theme === "light" ? "text-black" : "text-white" : t.theme === "light" ? "text-[#00000088] hover:text-black" : "text-[#ffffff88] hover:text-white"
2494
+ ]]),
2495
+ onClick: (s) => e("update:modelValue", l.value)
2496
+ }, [
2497
+ l.icon ? (a(), U(H, {
2498
+ key: 0,
2499
+ name: l.icon,
2500
+ size: 16
2501
+ }, null, 8, ["name"])) : C("", !0),
2502
+ i("span", Q2, B(l.label), 1),
2503
+ l.badge !== void 0 ? (a(), U(Ml, {
2504
+ key: 1,
2505
+ size: "small",
2506
+ label: String(l.badge)
2507
+ }, null, 8, ["label"])) : C("", !0),
2508
+ t.modelValue === l.value ? (a(), d("span", eo)) : C("", !0)
2509
+ ], 10, Z2))), 128))
2510
+ ], 2));
2511
+ }
2512
+ }), to = {
2513
+ key: 0,
2514
+ class: "mb-1 flex items-center gap-2"
2515
+ }, lo = ["for"], oo = ["id", "name", "rows", "value", "placeholder", "disabled"], Ao = /* @__PURE__ */ L({
2516
+ __name: "BlueTextarea",
2517
+ props: {
2518
+ modelValue: {},
2519
+ label: {},
2520
+ name: {},
2521
+ placeholder: {},
2522
+ rows: {},
2523
+ autoGrow: { type: Boolean },
2524
+ maxRows: {},
2525
+ disabled: { type: Boolean },
2526
+ errorMessages: {},
2527
+ infoTooltip: {},
2528
+ width: {},
2529
+ theme: {}
2530
+ },
2531
+ emits: ["update:modelValue"],
2532
+ setup(c, { emit: n }) {
2533
+ const e = c, t = n, o = w(() => {
2534
+ var s;
2535
+ return (((s = e.errorMessages) == null ? void 0 : s.length) ?? 0) > 0;
2536
+ }), l = w(() => {
2537
+ if (!e.autoGrow) return e.rows ?? 4;
2538
+ const s = (e.modelValue ?? "").split(`
2539
+ `).length;
2540
+ return Math.min(Math.max(s, e.rows ?? 4), e.maxRows ?? 12);
2541
+ });
2542
+ return (s, u) => (a(), d("div", {
2543
+ class: "flex w-full min-w-0 flex-col",
2544
+ style: D({ width: s.width })
2545
+ }, [
2546
+ s.label ? (a(), d("div", to, [
2547
+ i("label", {
2548
+ for: s.name,
2549
+ class: b(["min-w-0 truncate text-[13px]", [s.theme === "dark" ? "text-white" : "text-black", s.disabled ? "opacity-30" : ""]])
2550
+ }, B(s.label), 11, lo),
2551
+ s.infoTooltip ? (a(), U(ie, {
2552
+ key: 0,
2553
+ text: s.infoTooltip,
2554
+ theme: s.theme,
2555
+ class: "items-center"
2556
+ }, {
2557
+ default: N(() => [
2558
+ O(H, {
2559
+ name: "mdi-information-outline",
2560
+ size: 16,
2561
+ label: s.infoTooltip,
2562
+ class: "opacity-60 cursor-help"
2563
+ }, null, 8, ["label"])
2564
+ ]),
2565
+ _: 1
2566
+ }, 8, ["text", "theme"])) : C("", !0)
2567
+ ])) : C("", !0),
2568
+ i("textarea", {
2569
+ id: s.name,
2570
+ name: s.name,
2571
+ rows: l.value,
2572
+ value: s.modelValue ?? "",
2573
+ placeholder: s.placeholder,
2574
+ disabled: s.disabled,
2575
+ class: b(["bluevue-inset-1 w-full resize-y rounded-[6px] px-3 py-2 text-sm outline-none transition-colors focus:outline focus:outline-2 focus:outline-offset-0 focus:outline-[var(--bluevue-accent)]", [
2576
+ s.theme === "dark" ? "bg-[#ffffff11] text-white placeholder:text-[#ffffff55]" : "bg-[#00000008] text-black placeholder:text-[#00000055]",
2577
+ s.disabled ? "pointer-events-none opacity-30" : "",
2578
+ o.value ? "outline outline-2 outline-[var(--bluevue-error)]" : ""
2579
+ ]]),
2580
+ onInput: u[0] || (u[0] = (r) => t("update:modelValue", r.target.value))
2581
+ }, null, 42, oo),
2582
+ (a(!0), d(J, null, Z(s.errorMessages ?? [], (r) => (a(), d("span", {
2583
+ key: r,
2584
+ class: "mt-1 text-[11px] text-[var(--bluevue-error)]"
2585
+ }, B(r), 1))), 128))
2586
+ ], 4));
2587
+ }
2588
+ }), no = { class: "w-full" }, so = ["disabled", "aria-label", "title"], ao = ["id"], io = ["viewBox"], ro = ["r", "stroke"], uo = ["r", "fill"], co = ["x1", "y1", "x2", "y2", "stroke", "stroke-width"], po = ["x", "y", "fill"], mo = ["id"], fo = /* @__PURE__ */ i("feDropShadow", {
2589
+ dx: "0",
2590
+ dy: "1",
2591
+ stdDeviation: "1.2",
2592
+ "flood-color": "#000000",
2593
+ "flood-opacity": "0.45"
2594
+ }, null, -1), vo = [
2595
+ fo
2596
+ ], ho = ["transform", "filter"], bo = ["d"], be = 176, jo = /* @__PURE__ */ L({
2597
+ __name: "BlueWindRose",
2598
+ props: {
2599
+ modelValue: {},
2600
+ label: {},
2601
+ name: {},
2602
+ min: {},
2603
+ max: {},
2604
+ step: {},
2605
+ suffix: {},
2606
+ placeholder: {},
2607
+ disabled: { type: Boolean },
2608
+ theme: {},
2609
+ height: {},
2610
+ width: {},
2611
+ infoTooltip: {},
2612
+ errorMessages: {}
2613
+ },
2614
+ emits: ["update:modelValue"],
2615
+ setup(c, { emit: n }) {
2616
+ const e = be / 2, t = [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], o = [
2617
+ { label: "N", deg: 0 },
2618
+ { label: "E", deg: 90 },
2619
+ { label: "S", deg: 180 },
2620
+ { label: "W", deg: 270 }
2621
+ ], l = c, s = n, {
2622
+ anchorRef: u,
2623
+ popoverRef: r,
2624
+ popoverId: v,
2625
+ activatorProps: f,
2626
+ isPositioned: x,
2627
+ floatingStyles: p,
2628
+ onToggle: F
2629
+ } = ye({ placement: "bottom-end" }), $ = q(null), V = q(!1), R = w(() => l.min ?? 0), P = w(() => l.max ?? 360), m = w(() => l.step && l.step > 0 ? l.step : 1), T = w(() => {
2630
+ const g = P.value - R.value;
2631
+ return g > 0 ? g : 360;
2632
+ }), E = w(() => typeof l.modelValue == "number" ? l.modelValue : R.value), k = w(() => (K(E.value) - R.value) / T.value * 360), A = w(() => l.theme !== "light");
2633
+ function K(g) {
2634
+ return R.value + ((g - R.value) % T.value + T.value) % T.value;
2635
+ }
2636
+ function Y(g) {
2637
+ return R.value + Math.round((g - R.value) / m.value) * m.value;
2638
+ }
2639
+ function te(g) {
2640
+ s("update:modelValue", K(Y(g)));
2641
+ }
2642
+ function ee(g) {
2643
+ if (!(typeof g != "number" || !Number.isFinite(g))) {
2644
+ if (g < R.value || g >= P.value) {
2645
+ s("update:modelValue", K(g));
2646
+ return;
2647
+ }
2648
+ s("update:modelValue", g);
2649
+ }
2650
+ }
2651
+ function re(g) {
2652
+ const I = $.value;
2653
+ if (!I) return E.value;
2654
+ const _ = I.getBoundingClientRect(), G = Math.atan2(g.clientX - (_.left + _.width / 2), _.top + _.height / 2 - g.clientY) * 180 / Math.PI, Q = G < 0 ? G + 360 : G;
2655
+ return R.value + Q / 360 * T.value;
2656
+ }
2657
+ function fe(g) {
2658
+ var I;
2659
+ l.disabled || (V.value = !0, (I = $.value) == null || I.setPointerCapture(g.pointerId), te(re(g)));
2660
+ }
2661
+ function ne(g) {
2662
+ V.value && te(re(g));
2663
+ }
2664
+ function y(g) {
2665
+ var I;
2666
+ V.value && (V.value = !1, (I = $.value) == null || I.releasePointerCapture(g.pointerId));
2667
+ }
2668
+ function S(g, I) {
2669
+ const _ = (g - 90) * Math.PI / 180;
2670
+ return { x: e + Math.cos(_) * I, y: e + Math.sin(_) * I };
2671
+ }
2672
+ return (g, I) => (a(), d("div", no, [
2673
+ O(Re, {
2674
+ "model-value": g.modelValue,
2675
+ type: "number",
2676
+ label: g.label,
2677
+ name: g.name,
2678
+ suffix: g.suffix ?? "°",
2679
+ placeholder: g.placeholder,
2680
+ disabled: g.disabled,
2681
+ theme: g.theme,
2682
+ height: g.height,
2683
+ width: g.width,
2684
+ "info-tooltip": g.infoTooltip,
2685
+ "error-messages": g.errorMessages,
2686
+ step: m.value,
2687
+ "onUpdate:modelValue": ee
2688
+ }, {
2689
+ prepend: N(() => [
2690
+ i("button", ke({
2691
+ ref_key: "anchorRef",
2692
+ ref: u
2693
+ }, M(f), {
2694
+ type: "button",
2695
+ disabled: g.disabled,
2696
+ class: ["flex items-center justify-center rounded-[4px] p-[2px]", g.disabled ? "cursor-not-allowed" : "cursor-pointer hover:bg-[#ffffff14]"],
2697
+ "aria-label": g.label ? `Choose ${g.label}` : "Choose heading",
2698
+ title: g.label ? `Choose ${g.label}` : "Choose heading"
2699
+ }), [
2700
+ O(H, {
2701
+ name: "mdi-compass-rose",
2702
+ size: 16,
2703
+ class: b(A.value ? "text-white" : "text-black")
2704
+ }, null, 8, ["class"])
2705
+ ], 16, so)
2706
+ ]),
2707
+ _: 1
2708
+ }, 8, ["model-value", "label", "name", "suffix", "placeholder", "disabled", "theme", "height", "width", "info-tooltip", "error-messages", "step"]),
2709
+ i("div", {
2710
+ id: M(v),
2711
+ ref_key: "popoverRef",
2712
+ ref: r,
2713
+ popover: "",
2714
+ class: "bluevue-popover",
2715
+ style: D(M(p)),
2716
+ onToggle: I[0] || (I[0] = //@ts-ignore
2717
+ (..._) => M(F) && M(F)(..._))
2718
+ }, [
2719
+ i("div", {
2720
+ class: b(["bluevue-elevation-5 rounded-[8px] p-3", [
2721
+ A.value ? "bg-[var(--bluevue-surface)] text-white" : "bg-white text-black",
2722
+ M(x) ? "opacity-100" : "opacity-0"
2723
+ ]])
2724
+ }, [
2725
+ (a(), d("svg", {
2726
+ ref_key: "roseRef",
2727
+ ref: $,
2728
+ width: be,
2729
+ height: be,
2730
+ viewBox: `0 0 ${be} ${be}`,
2731
+ class: b(["block touch-none select-none", g.disabled ? "cursor-not-allowed" : "cursor-pointer"]),
2732
+ onPointerdown: ae(fe, ["prevent"]),
2733
+ onPointermove: ne,
2734
+ onPointerup: y,
2735
+ onPointercancel: y
2736
+ }, [
2737
+ i("circle", {
2738
+ cx: e,
2739
+ cy: e,
2740
+ r: e - 6,
2741
+ fill: "transparent",
2742
+ stroke: A.value ? "#ffffff22" : "#00000022",
2743
+ "stroke-width": "1"
2744
+ }, null, 8, ro),
2745
+ i("circle", {
2746
+ cx: e,
2747
+ cy: e,
2748
+ r: e - 22,
2749
+ fill: A.value ? "#ffffff0d" : "#0000000d"
2750
+ }, null, 8, uo),
2751
+ (a(), d(J, null, Z(t, (_) => i("line", {
2752
+ key: _,
2753
+ x1: S(_, _ % 90 === 0 ? 70 : 74).x,
2754
+ y1: S(_, _ % 90 === 0 ? 70 : 74).y,
2755
+ x2: S(_, 80).x,
2756
+ y2: S(_, 80).y,
2757
+ stroke: A.value ? "#ffffff44" : "#00000044",
2758
+ "stroke-width": _ % 90 === 0 ? 2 : 1
2759
+ }, null, 8, co)), 64)),
2760
+ (a(), d(J, null, Z(o, (_) => i("text", {
2761
+ key: _.label,
2762
+ x: S(_.deg, 58).x,
2763
+ y: S(_.deg, 58).y,
2764
+ "text-anchor": "middle",
2765
+ "dominant-baseline": "middle",
2766
+ class: "text-[11px] font-medium",
2767
+ fill: A.value ? "#ffffff88" : "#00000088"
2768
+ }, B(_.label), 9, po)), 64)),
2769
+ i("defs", null, [
2770
+ i("filter", {
2771
+ id: `${M(v)}-arrow-shadow`,
2772
+ x: "-50%",
2773
+ y: "-50%",
2774
+ width: "200%",
2775
+ height: "200%"
2776
+ }, vo, 8, mo)
2777
+ ]),
2778
+ i("g", {
2779
+ transform: `rotate(${k.value} ${e} ${e})`,
2780
+ filter: `url(#${M(v)}-arrow-shadow)`
2781
+ }, [
2782
+ i("path", {
2783
+ d: `M ${e} 18 L ${e + 7} 36 L ${e + 2.2} 36 L ${e + 2.2} ${e} L ${e - 2.2} ${e} L ${e - 2.2} 36 L ${e - 7} 36 Z`,
2784
+ fill: "#F5C400"
2785
+ }, null, 8, bo),
2786
+ i("circle", {
2787
+ cx: e,
2788
+ cy: e,
2789
+ r: "3.5",
2790
+ fill: "#F5C400"
2791
+ })
2792
+ ], 8, ho)
2793
+ ], 42, io))
2794
+ ], 2)
2795
+ ], 44, ao)
2796
+ ]));
2797
+ }
1164
2798
  });
2799
+ function Oo(c, n) {
2800
+ const e = n.endsWith(".json") ? n : `${n}.json`, t = URL.createObjectURL(new Blob([JSON.stringify(c, null, 2)], { type: "application/json" })), o = document.createElement("a");
2801
+ o.href = t, o.download = e, o.click(), URL.revokeObjectURL(t);
2802
+ }
2803
+ function No(c = ".json,application/json") {
2804
+ return new Promise((n, e) => {
2805
+ const t = document.createElement("input");
2806
+ t.type = "file", t.accept = c, t.addEventListener("change", () => {
2807
+ var l;
2808
+ const o = (l = t.files) == null ? void 0 : l[0];
2809
+ if (!o) {
2810
+ n(null);
2811
+ return;
2812
+ }
2813
+ o.text().then((s) => n(JSON.parse(s))).catch(e);
2814
+ }), t.click();
2815
+ });
2816
+ }
1165
2817
  export {
1166
- we as BlueButtonGroup,
1167
- ke as BlueExpansiblePanel,
1168
- w2 as BlueInput,
1169
- $e as BlueLoadingDialog,
1170
- Me as BlueMenu,
1171
- Fe as BluePromptDialog,
1172
- _e as BlueSelect,
1173
- Ve as BlueSlider,
1174
- Se as BlueSwitch,
1175
- m2 as useBluePopover
2818
+ ko as BlueApp,
2819
+ ll as BlueBanner,
2820
+ xo as BlueBannerGroup,
2821
+ ce as BlueButton,
2822
+ $o as BlueButtonGroup,
2823
+ Dt as BlueCard,
2824
+ Bo as BlueCheckbox,
2825
+ Ml as BlueChip,
2826
+ Co as BlueConfirmDialog,
2827
+ $e as BlueDialog,
2828
+ _o as BlueExpansiblePanel,
2829
+ To as BlueFileDrop,
2830
+ H as BlueIcon,
2831
+ Re as BlueInput,
2832
+ Gt as BlueLoadingDialog,
2833
+ Fo as BlueMenu,
2834
+ Ve as BlueOsError,
2835
+ Hl as BlueProgressBar,
2836
+ Mo as BluePromptDialog,
2837
+ So as BlueRadioGroup,
2838
+ Ro as BlueSection,
2839
+ zo as BlueSelect,
2840
+ Do as BlueSlider,
2841
+ el as BlueSnackbar,
2842
+ It as BlueSpinner,
2843
+ Lo as BlueStat,
2844
+ Vo as BlueStepsDialog,
2845
+ Po as BlueSwitch,
2846
+ Io as BlueTable,
2847
+ Eo as BlueTabs,
2848
+ Ao as BlueTextarea,
2849
+ ie as BlueTooltip,
2850
+ jo as BlueWindRose,
2851
+ Tt as applyBlueTheme,
2852
+ xe as blueOsService,
2853
+ Oo as downloadJson,
2854
+ xt as isBlueOsExtension,
2855
+ No as pickJsonFile,
2856
+ qo as setBlueOsHost,
2857
+ kt as useBlueLoading,
2858
+ Ct as useBlueOs,
2859
+ wo as useBlueOsSetting,
2860
+ ye as useBluePopover,
2861
+ Xt as useBlueSnackbar
1176
2862
  };