@thl-ui/vue 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,480 @@
1
+ import { defineComponent as S, onBeforeUnmount as V, watch as M, ref as w, h as e, computed as L } from "vue";
2
+ import { createSidebar as F, bem as k, cx as $, localeInfo as I, observeMenuOverflow as Y, findActiveTrail as G, skins as B } from "@thl-ui/core";
3
+ import { usePrefix as x, useI18n as _, useThlContext as H, useStore as J } from "../context.js";
4
+ import { icon as h } from "./util.js";
5
+ import { ThlBadge as K, ThlButton as q, ThlButtonGroup as Q, ThlLabel as R } from "./basic.js";
6
+ import { ThlDropdown as A, ThlToaster as j, ThlConfirmHost as X, ThlDrawer as Z } from "./overlay.js";
7
+ import { ThlBreadcrumb as ee } from "./nav.js";
8
+ import { ThlNativeSelect as N, ThlSwitch as U } from "./form.js";
9
+ const W = (a) => a.map((o) => ({ value: o, label: I[o]?.name ?? o })), ae = /* @__PURE__ */ S({
10
+ name: "ThlSideMenu",
11
+ props: {
12
+ items: { type: Array, required: !0 },
13
+ currentPath: String,
14
+ accordion: { type: Boolean, default: !0 },
15
+ /** One-row menu: top-level items that do not fit move into a "More" dropdown. */
16
+ horizontal: Boolean
17
+ },
18
+ setup(a, { slots: o }) {
19
+ const u = x(), t = w(), s = w(1 / 0);
20
+ let n;
21
+ M(
22
+ [() => a.horizontal, t],
23
+ ([l, c]) => {
24
+ n?.(), n = void 0, s.value = 1 / 0, l && c && (n = Y(c, (r) => s.value = r));
25
+ },
26
+ { flush: "post" }
27
+ ), V(() => n?.());
28
+ const v = L(() => a.horizontal && s.value < a.items.length), { t: b, te: T } = _(), g = L(() => a.currentPath ? G(a.items, a.currentPath) : []), p = w(g.value.slice(0, -1));
29
+ M(
30
+ () => g.value.join("/"),
31
+ () => {
32
+ p.value = Array.from(/* @__PURE__ */ new Set([...a.accordion ? [] : p.value, ...g.value.slice(0, -1)]));
33
+ }
34
+ );
35
+ const i = (l) => T(l) ? b(l) : l, m = (l, c) => {
36
+ const r = p.value;
37
+ p.value = r.includes(l) ? r.filter((d) => d !== l) : a.accordion ? [...r.filter((d) => !c.some((f) => f.key === d)), l] : [...r, l];
38
+ }, y = (l, c) => l.map((r, d) => {
39
+ const f = k("side-menu", u.value), O = c === 0 && v.value && d >= s.value ? { class: "is-overflow", "aria-hidden": "true" } : {};
40
+ if (r.heading) return e("li", { key: r.key, class: f("heading") }, i(r.label));
41
+ if (r.divider) return e("li", { key: r.key, class: f("divider"), role: "separator" });
42
+ const E = g.value.includes(r.key), z = g.value[g.value.length - 1] === r.key, C = [
43
+ r.icon ? e("span", { class: f("icon") }, h(r.icon)) : null,
44
+ e("span", { class: f("label") }, i(r.label)),
45
+ r.badge ? e(R, { class: f("badge"), color: r.badge.color ?? "danger", rounded: !0 }, () => r.badge.text) : null,
46
+ r.children ? h("chevron-right", { class: f("arrow") }) : null
47
+ ], P = $(f("link"), { "is-active": E, "is-current": z });
48
+ if (r.children) {
49
+ const D = p.value.includes(r.key);
50
+ return e("li", { key: r.key, ...O }, [
51
+ e(
52
+ "button",
53
+ { type: "button", class: P, "aria-expanded": D, title: c === 0 ? i(r.label) : void 0, onClick: () => m(r.key, l) },
54
+ C
55
+ ),
56
+ e("div", { class: $(f("collapse"), { "is-open": D }) }, e("div", e("ul", { class: f("sub") }, y(r.children, c + 1))))
57
+ ]);
58
+ }
59
+ return e(
60
+ "li",
61
+ { key: r.key, ...O },
62
+ o.link ? o.link({ item: r, content: C, class: P, current: z }) : e("a", { href: r.href, class: P, "aria-current": z ? "page" : void 0, title: c === 0 ? i(r.label) : void 0 }, C)
63
+ );
64
+ });
65
+ return () => {
66
+ const l = k("side-menu", u.value), c = p.value.includes("__more"), r = a.items.slice(s.value);
67
+ return e("ul", { ref: t, class: l() }, [
68
+ ...y(a.items, 0),
69
+ v.value ? e("li", { key: "__more", "data-thl-more": "", class: l("more") }, [
70
+ e(
71
+ "button",
72
+ {
73
+ type: "button",
74
+ class: $(l("link"), { "is-active": r.some((d) => g.value.includes(d.key)) }),
75
+ "aria-expanded": c,
76
+ onClick: () => m("__more", [])
77
+ },
78
+ [
79
+ e("span", { class: l("icon") }, h("ellipsis")),
80
+ e("span", { class: l("label") }, b("common.more")),
81
+ h("chevron-right", { class: l("arrow") })
82
+ ]
83
+ ),
84
+ e("div", { class: $(l("collapse"), { "is-open": c }) }, e("div", e("ul", { class: l("sub") }, y(r, 1))))
85
+ ]) : null
86
+ ]);
87
+ };
88
+ }
89
+ }), te = /* @__PURE__ */ S({
90
+ name: "ThlSettingsPanel",
91
+ props: { open: Boolean },
92
+ emits: ["update:open"],
93
+ setup(a, { emit: o }) {
94
+ const u = x(), { t } = _(), s = H();
95
+ return () => {
96
+ const n = s.config.value, v = s.thl.set, b = k("settings", u.value), T = (i) => {
97
+ const m = i.replace(/-dark$/, "");
98
+ return e(
99
+ "li",
100
+ { key: i },
101
+ e("button", {
102
+ type: "button",
103
+ "aria-label": i,
104
+ title: i,
105
+ "aria-pressed": n.theme === i,
106
+ class: $(b("skin", { dark: i.endsWith("-dark") }), { "is-active": n.theme === i }),
107
+ style: { background: `linear-gradient(135deg, ${B[m].topbar1}, ${B[m].topbar2})` },
108
+ onClick: () => v({ theme: i })
109
+ })
110
+ );
111
+ }, g = Object.keys(B), p = (i, m, y, l) => e(
112
+ Q,
113
+ { justified: !0 },
114
+ () => i.map(
115
+ (c) => e(
116
+ q,
117
+ { key: c, size: "sm", variant: m === c ? "primary" : "default", "aria-pressed": m === c, icon: l?.[c], onClick: () => y(c) },
118
+ () => t(`layout.${c}`)
119
+ )
120
+ )
121
+ );
122
+ return e(
123
+ Z,
124
+ { open: a.open, title: t("layout.settings"), wide: !0, "onUpdate:open": (i) => o("update:open", i) },
125
+ () => e("div", { class: b() }, [
126
+ e("section", { class: b("section") }, [
127
+ e("h3", t("layout.layoutOptions")),
128
+ e("div", { class: `${u.value}-stack`, style: { gap: "10px" } }, [
129
+ e(U, {
130
+ modelValue: n.fixedHeader,
131
+ size: "sm",
132
+ label: t("layout.fixedHeader"),
133
+ "onUpdate:modelValue": (i) => v({ fixedHeader: i })
134
+ }),
135
+ e(U, {
136
+ modelValue: n.fixedSidebar,
137
+ size: "sm",
138
+ label: t("layout.fixedSidebar"),
139
+ "onUpdate:modelValue": (i) => v({ fixedSidebar: i })
140
+ })
141
+ ])
142
+ ]),
143
+ e("section", { class: b("section") }, [
144
+ e("h3", t("layout.layout")),
145
+ p(["vertical", "mini", "horizontal"], n.layout, (i) => v({ layout: i }))
146
+ ]),
147
+ e("section", { class: b("section") }, [
148
+ e("h3", t("layout.colorMode")),
149
+ p(["light", "dark", "auto"], n.colorMode, (i) => v({ colorMode: i }), { light: "sun", dark: "moon", auto: "monitor" })
150
+ ]),
151
+ e("section", { class: b("section") }, [
152
+ e("h3", t("layout.withLightSidebar")),
153
+ e(
154
+ "ul",
155
+ { class: b("skins") },
156
+ g.map((i) => T(i))
157
+ ),
158
+ e("h3", t("layout.withDarkSidebar")),
159
+ e(
160
+ "ul",
161
+ { class: b("skins") },
162
+ g.map((i) => T(`${i}-dark`))
163
+ )
164
+ ]),
165
+ e("section", { class: b("section") }, [
166
+ e("h3", t("layout.language")),
167
+ e(N, {
168
+ modelValue: n.locale,
169
+ "aria-label": t("layout.language"),
170
+ options: W(n.locales),
171
+ "onUpdate:modelValue": (i) => v({ locale: i })
172
+ })
173
+ ])
174
+ ])
175
+ );
176
+ };
177
+ }
178
+ }), ve = /* @__PURE__ */ S({
179
+ name: "ThlTopbarMessages",
180
+ props: {
181
+ items: {
182
+ type: Array,
183
+ required: !0
184
+ },
185
+ icon: { type: String, default: "mail" },
186
+ title: String,
187
+ footer: String,
188
+ footerHref: String
189
+ },
190
+ setup(a) {
191
+ const o = x(), { t: u } = _();
192
+ return () => {
193
+ const t = k("topbar", o.value), s = k("message-center", o.value);
194
+ return e(
195
+ "li",
196
+ { class: t("item") },
197
+ e(
198
+ A,
199
+ { align: "end", menuClass: t("dropdown"), animation: `${o.value}-anim-bounce-in-down` },
200
+ {
201
+ trigger: () => e("button", { type: "button", class: t("btn"), "aria-label": a.title ?? u("layout.notifications", { count: a.items.length }) }, [
202
+ h(a.icon, { size: 18 }),
203
+ a.items.length ? e("span", { class: t("dot") }) : null
204
+ ]),
205
+ default: () => [
206
+ e("div", { class: t("drop-title") }, a.title ?? u("layout.notifications", { count: a.items.length })),
207
+ e(
208
+ "div",
209
+ { class: s() },
210
+ a.items.map(
211
+ (n) => e("a", { key: n.id, href: "#", class: s("item"), onClick: (v) => v.preventDefault() }, [
212
+ n.avatar ? e("span", { class: `${o.value}-avatar` }, [
213
+ e("img", { src: n.avatar, alt: "" }),
214
+ n.status ? e("span", { class: `${o.value}-avatar__status ${o.value}-avatar__status--${n.status}` }) : null
215
+ ]) : e("span", { class: `${o.value}-list__icon` }, h(n.icon ?? "bell")),
216
+ e("div", { class: s("body") }, [
217
+ e("div", { class: s("body-title") }, n.title),
218
+ e("span", { class: s("desc") }, n.text),
219
+ e("span", { class: s("time") }, n.time)
220
+ ])
221
+ ])
222
+ )
223
+ ),
224
+ e("a", { class: t("drop-footer"), href: a.footerHref ?? "#" }, [a.footer ?? u("layout.seeAllNotifications"), " ", h("chevron-right")])
225
+ ]
226
+ }
227
+ )
228
+ );
229
+ };
230
+ }
231
+ }), be = /* @__PURE__ */ S({
232
+ name: "ThlAppLayout",
233
+ props: {
234
+ menu: { type: Array, required: !0 },
235
+ currentPath: String,
236
+ brand: { type: String, default: "thl-ui" },
237
+ brandHref: { type: String, default: "/" },
238
+ user: Object,
239
+ searchable: Boolean,
240
+ settings: { type: Boolean, default: !0 },
241
+ footer: { type: [String, Boolean], default: void 0 }
242
+ },
243
+ emits: ["search", "user-select"],
244
+ setup(a, { slots: o, emit: u }) {
245
+ const t = x(), { t: s, locale: n } = _(), v = H(), b = F({
246
+ mini: v.config.value.layout === "mini",
247
+ breakpoint: v.config.value.components.Sidebar?.breakpoint
248
+ });
249
+ V(b.destroy), M(
250
+ () => v.config.value.layout,
251
+ (m) => b.setMini(m === "mini")
252
+ ), M(
253
+ () => a.currentPath,
254
+ () => b.closeMobile()
255
+ );
256
+ const T = J(b.state), g = w(!1), p = w(""), i = { light: "dark", dark: "auto", auto: "light" };
257
+ return () => {
258
+ const m = v.config.value, y = m.layout === "horizontal", l = k("topbar", t.value), c = T.value, r = a.user?.menu ?? [
259
+ { key: "profile", label: s("layout.myProfile"), icon: "user" },
260
+ { key: "balance", label: s("layout.myBalance"), icon: "credit-card" },
261
+ { key: "inbox", label: s("layout.inbox"), icon: "inbox" },
262
+ { key: "d1", divider: !0 },
263
+ { key: "settings", label: s("layout.accountSetting"), icon: "settings" },
264
+ { key: "d2", divider: !0 },
265
+ { key: "logout", label: s("layout.logout"), icon: "log-out" }
266
+ ];
267
+ return e("div", { class: k("app", t.value)({ mini: !y && c.mini, horizontal: y, "mobile-open": c.mobileOpen }) }, [
268
+ e("a", { href: "#thl-main", class: `${t.value}-sr-only` }, "Skip to content"),
269
+ e("header", { class: l() }, [
270
+ e(
271
+ "div",
272
+ { class: l("brand") },
273
+ e("a", { href: a.brandHref }, [
274
+ o.brand ? o.brand() : h("thl-logo", { size: 28, strokeWidth: 2.4 }),
275
+ e("span", { class: l("brand-text") }, a.brand)
276
+ ])
277
+ ),
278
+ e("ul", { class: l("left") }, [
279
+ e(
280
+ "li",
281
+ { class: $(l("item"), l("toggler")) },
282
+ e(
283
+ "button",
284
+ {
285
+ type: "button",
286
+ class: l("btn"),
287
+ onClick: b.toggle,
288
+ "aria-label": s("layout.toggleSidebar"),
289
+ "aria-expanded": c.isMobile ? c.mobileOpen : !c.mini
290
+ },
291
+ h("menu", { size: 20 })
292
+ )
293
+ ),
294
+ a.searchable ? e(
295
+ "li",
296
+ { class: l("search") },
297
+ e(
298
+ "form",
299
+ {
300
+ role: "search",
301
+ onSubmit: (d) => {
302
+ d.preventDefault(), u("search", p.value);
303
+ }
304
+ },
305
+ e("input", {
306
+ type: "search",
307
+ value: p.value,
308
+ onInput: (d) => p.value = d.target.value,
309
+ placeholder: s("common.searchPlaceholder"),
310
+ "aria-label": s("common.search")
311
+ })
312
+ )
313
+ ) : null,
314
+ o["topbar-left"]?.()
315
+ ]),
316
+ e("ul", { class: l("right") }, [
317
+ o["topbar-right"]?.(),
318
+ e(
319
+ "li",
320
+ { class: l("item") },
321
+ e(
322
+ A,
323
+ {
324
+ align: "end",
325
+ items: m.locales.map((d) => ({ key: d, label: I[d]?.name ?? d })),
326
+ onSelect: (d) => v.thl.set({ locale: d })
327
+ },
328
+ {
329
+ trigger: () => e("button", { type: "button", class: l("btn"), "aria-label": `${n.value.toUpperCase()} – ${s("layout.language")}` }, [
330
+ h("languages", { size: 18 }),
331
+ e("span", { class: l("btn-text") }, n.value)
332
+ ])
333
+ }
334
+ )
335
+ ),
336
+ e(
337
+ "li",
338
+ { class: l("item") },
339
+ e(
340
+ "button",
341
+ {
342
+ type: "button",
343
+ class: l("btn"),
344
+ title: s(`layout.${m.colorMode}`),
345
+ "aria-label": `${s("layout.colorMode")}: ${s(`layout.${m.colorMode}`)}`,
346
+ onClick: () => v.thl.set({ colorMode: i[m.colorMode] })
347
+ },
348
+ h(m.colorMode === "dark" ? "moon" : m.colorMode === "auto" ? "monitor" : "sun", { size: 18 })
349
+ )
350
+ ),
351
+ a.user ? e(
352
+ "li",
353
+ { class: l("item") },
354
+ e(
355
+ A,
356
+ { align: "end", items: r, animation: `${t.value}-anim-flip-in-y`, onSelect: (d) => u("user-select", d) },
357
+ {
358
+ trigger: () => e("button", { type: "button", class: $(l("btn"), l("user")) }, [
359
+ a.user.avatar ? e("img", { src: a.user.avatar, alt: "" }) : null,
360
+ e("b", { class: `${t.value}-col-hidden-sm` }, a.user.name),
361
+ h("chevron-down")
362
+ ])
363
+ }
364
+ )
365
+ ) : null,
366
+ a.settings ? e(
367
+ "li",
368
+ { class: l("item") },
369
+ e(
370
+ "button",
371
+ { type: "button", class: l("btn"), onClick: () => g.value = !0, "aria-label": s("layout.settings") },
372
+ h("settings", { size: 18 })
373
+ )
374
+ ) : null
375
+ ])
376
+ ]),
377
+ c.mobileOpen ? e("div", { class: `${t.value}-sidebar-backdrop`, onClick: b.closeMobile }) : null,
378
+ e(
379
+ "aside",
380
+ { class: `${t.value}-sidebar`, "aria-label": "sidebar" },
381
+ e("div", { class: `${t.value}-sidebar__scroll` }, [
382
+ a.user && !y ? e("div", { class: `${t.value}-user-profile` }, [
383
+ a.user.avatar ? e("span", { class: `${t.value}-user-profile__avatar` }, [
384
+ e("img", { src: a.user.avatar, alt: "" }),
385
+ e("span", { class: `${t.value}-user-profile__badge` }, e(K, { color: "danger", dot: !0 }))
386
+ ]) : null,
387
+ e("div", { class: `${t.value}-user-profile__name` }, a.user.name),
388
+ a.user.role ? e("div", { class: `${t.value}-user-profile__role` }, a.user.role) : null
389
+ ]) : null,
390
+ e("nav", e(ae, { items: a.menu, currentPath: a.currentPath, horizontal: y }, o.link ? { link: o.link } : void 0)),
391
+ o["sidebar-footer"] ? e("div", { class: `${t.value}-sidebar__footer` }, o["sidebar-footer"]()) : null
392
+ ])
393
+ ),
394
+ e("div", { class: `${t.value}-page` }, [
395
+ e("main", { id: "thl-main", style: { flex: 1, display: "flex", flexDirection: "column" } }, o.default?.()),
396
+ a.footer !== !1 ? e(
397
+ "footer",
398
+ { class: `${t.value}-footer` },
399
+ o.footer ? o.footer() : typeof a.footer == "string" ? a.footer : s("layout.copyright", { year: (/* @__PURE__ */ new Date()).getFullYear() })
400
+ ) : null
401
+ ]),
402
+ a.settings ? e(te, { open: g.value, "onUpdate:open": (d) => g.value = d }) : null,
403
+ e(j),
404
+ e(X)
405
+ ]);
406
+ };
407
+ }
408
+ }), me = /* @__PURE__ */ S({
409
+ name: "ThlPage",
410
+ props: { title: String, breadcrumb: Array },
411
+ setup(a, { slots: o }) {
412
+ const u = x();
413
+ return () => [
414
+ a.title || a.breadcrumb ? e("div", { class: `${u.value}-page-header` }, [
415
+ e("h1", { class: `${u.value}-page-header__title` }, a.title),
416
+ e("div", { class: `${u.value}-page-header__actions` }, [
417
+ o.actions?.(),
418
+ a.breadcrumb ? e(ee, { items: a.breadcrumb }, o.link ? { link: o.link } : void 0) : null
419
+ ])
420
+ ]) : null,
421
+ e("div", { class: `${u.value}-page__content` }, o.default?.())
422
+ ];
423
+ }
424
+ }), ge = /* @__PURE__ */ S({
425
+ name: "ThlAuthLayout",
426
+ props: { title: String, avatar: String },
427
+ setup(a, { slots: o }) {
428
+ const u = x(), { t } = _(), s = H();
429
+ return () => {
430
+ const n = k("auth", u.value);
431
+ return e("main", { class: n() }, [
432
+ e(
433
+ "div",
434
+ { class: n("lang") },
435
+ e(N, {
436
+ size: "sm",
437
+ modelValue: s.config.value.locale,
438
+ "aria-label": t("layout.language"),
439
+ options: W(s.config.value.locales),
440
+ "onUpdate:modelValue": (v) => s.thl.set({ locale: v })
441
+ })
442
+ ),
443
+ e("div", { class: n("box") }, [
444
+ e("div", { class: n("logo") }, o.logo ? o.logo() : [h("thl-logo", { strokeWidth: 2.4 }), " thl-ui"]),
445
+ a.avatar ? e("img", { class: n("avatar"), src: a.avatar, alt: "" }) : null,
446
+ a.title ? e("h1", { class: n("title") }, a.title) : null,
447
+ o.default?.(),
448
+ o.footer ? e("div", { class: n("foot") }, o.footer()) : null
449
+ ]),
450
+ e(j)
451
+ ]);
452
+ };
453
+ }
454
+ }), he = /* @__PURE__ */ S({
455
+ name: "ThlErrorLayout",
456
+ props: { code: { type: Number, required: !0 }, title: String, text: String, homeHref: { type: String, default: "/" } },
457
+ setup(a, { slots: o }) {
458
+ const u = x(), { t } = _();
459
+ return () => {
460
+ const s = k("error", u.value), n = [400, 403, 404, 500, 503].includes(a.code);
461
+ return e("main", { class: s() }, [
462
+ e("h1", { class: s("code") }, a.code),
463
+ e("h2", { class: s("title") }, a.title ?? (n ? t(`pages.error.${a.code}.title`) : "")),
464
+ e("p", { class: s("text") }, a.text ?? (n ? t(`pages.error.${a.code}.text`) : "")),
465
+ o.action ? o.action() : e(q, { href: a.homeHref, variant: "danger", rounded: !0, size: "lg" }, () => t("pages.error.backHome")),
466
+ e("p", { class: s("footer") }, t("layout.copyright", { year: (/* @__PURE__ */ new Date()).getFullYear() }))
467
+ ]);
468
+ };
469
+ }
470
+ });
471
+ export {
472
+ be as ThlAppLayout,
473
+ ge as ThlAuthLayout,
474
+ he as ThlErrorLayout,
475
+ me as ThlPage,
476
+ te as ThlSettingsPanel,
477
+ ae as ThlSideMenu,
478
+ ve as ThlTopbarMessages
479
+ };
480
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sources":["../../src/components/layout.ts"],"sourcesContent":["import { defineComponent, h, ref, watch, computed, onBeforeUnmount, type PropType } from 'vue';\nimport {\n bem,\n cx,\n createSidebar,\n findActiveTrail,\n observeMenuOverflow,\n skins,\n localeInfo,\n type MenuItem,\n type ThlSkin,\n type LayoutMode,\n type ColorMode,\n} from '@thl-ui/core';\nimport { usePrefix, useI18n, useStore, useThlContext } from '../context';\nimport { icon } from './util';\nimport { ThlButton, ThlButtonGroup, ThlLabel, ThlBadge } from './basic';\nimport { ThlDrawer, ThlDropdown, ThlToaster, ThlConfirmHost } from './overlay';\nimport { ThlBreadcrumb } from './nav';\nimport { ThlSwitch, ThlNativeSelect } from './form';\n\nconst localeOptions = (list: string[]) => list.map((l) => ({ value: l, label: (localeInfo as any)[l]?.name ?? l }));\n\n/* ---------------- SideMenu ---------------- */\nexport const ThlSideMenu = /*#__PURE__*/ defineComponent({\n name: 'ThlSideMenu',\n props: {\n items: { type: Array as PropType<MenuItem[]>, required: true },\n currentPath: String,\n accordion: { type: Boolean, default: true },\n /** One-row menu: top-level items that do not fit move into a \"More\" dropdown. */\n horizontal: Boolean,\n },\n setup(p, { slots }) {\n const pre = usePrefix();\n const ul = ref<HTMLUListElement>();\n const visible = ref(Infinity);\n let stop: (() => void) | undefined;\n watch(\n [() => p.horizontal, ul],\n ([hz, el]) => {\n stop?.();\n stop = undefined;\n visible.value = Infinity;\n if (hz && el) stop = observeMenuOverflow(el, (n) => (visible.value = n));\n },\n { flush: 'post' },\n );\n onBeforeUnmount(() => stop?.());\n const overflow = computed(() => p.horizontal && visible.value < p.items.length);\n const { t, te } = useI18n();\n const trail = computed(() => (p.currentPath ? findActiveTrail(p.items, p.currentPath) : []));\n const open = ref<string[]>(trail.value.slice(0, -1));\n watch(\n () => trail.value.join('/'),\n () => {\n open.value = Array.from(new Set([...(p.accordion ? [] : open.value), ...trail.value.slice(0, -1)]));\n },\n );\n const label = (l: string) => (te(l) ? t(l) : l);\n const toggle = (key: string, sib: MenuItem[]) => {\n const o = open.value;\n open.value = o.includes(key) ? o.filter((k) => k !== key) : p.accordion ? [...o.filter((k) => !sib.some((s) => s.key === k)), key] : [...o, key];\n };\n const render = (list: MenuItem[], depth: number): any[] =>\n list.map((it, idx) => {\n const b = bem('side-menu', pre.value);\n const hidden = depth === 0 && overflow.value && idx >= visible.value;\n const liAttrs = hidden ? { class: 'is-overflow', 'aria-hidden': 'true' } : {};\n if (it.heading) return h('li', { key: it.key, class: b('heading') }, label(it.label));\n if (it.divider) return h('li', { key: it.key, class: b('divider'), role: 'separator' });\n const active = trail.value.includes(it.key);\n const current = trail.value[trail.value.length - 1] === it.key;\n const content = [\n it.icon ? h('span', { class: b('icon') }, icon(it.icon)) : null,\n h('span', { class: b('label') }, label(it.label)),\n it.badge ? h(ThlLabel, { class: b('badge'), color: it.badge.color ?? 'danger', rounded: true }, () => it.badge!.text) : null,\n it.children ? icon('chevron-right', { class: b('arrow') }) : null,\n ];\n const cls = cx(b('link'), { 'is-active': active, 'is-current': current });\n if (it.children) {\n const isOpen = open.value.includes(it.key);\n return h('li', { key: it.key, ...liAttrs }, [\n h(\n 'button',\n { type: 'button', class: cls, 'aria-expanded': isOpen, title: depth === 0 ? label(it.label) : undefined, onClick: () => toggle(it.key, list) },\n content,\n ),\n h('div', { class: cx(b('collapse'), { 'is-open': isOpen }) }, h('div', h('ul', { class: b('sub') }, render(it.children, depth + 1)))),\n ]);\n }\n return h(\n 'li',\n { key: it.key, ...liAttrs },\n slots.link\n ? slots.link({ item: it, content, class: cls, current })\n : h('a', { href: it.href, class: cls, 'aria-current': current ? 'page' : undefined, title: depth === 0 ? label(it.label) : undefined }, content),\n );\n });\n return () => {\n const b = bem('side-menu', pre.value);\n const moreOpen = open.value.includes('__more');\n const rest = p.items.slice(visible.value);\n return h('ul', { ref: ul, class: b() }, [\n ...render(p.items, 0),\n overflow.value\n ? h('li', { key: '__more', 'data-thl-more': '', class: b('more') }, [\n h(\n 'button',\n {\n type: 'button',\n class: cx(b('link'), { 'is-active': rest.some((i) => trail.value.includes(i.key)) }),\n 'aria-expanded': moreOpen,\n onClick: () => toggle('__more', []),\n },\n [\n h('span', { class: b('icon') }, icon('ellipsis')),\n h('span', { class: b('label') }, t('common.more')),\n icon('chevron-right', { class: b('arrow') }),\n ],\n ),\n h('div', { class: cx(b('collapse'), { 'is-open': moreOpen }) }, h('div', h('ul', { class: b('sub') }, render(rest, 1)))),\n ])\n : null,\n ]);\n };\n },\n});\n\n/* ---------------- Settings panel ---------------- */\nexport const ThlSettingsPanel = /*#__PURE__*/ defineComponent({\n name: 'ThlSettingsPanel',\n props: { open: Boolean },\n emits: ['update:open'],\n setup(p, { emit }) {\n const pre = usePrefix();\n const { t } = useI18n();\n const ctx = useThlContext();\n return () => {\n const cfg = ctx.config.value;\n const set = ctx.thl.set;\n const s = bem('settings', pre.value);\n const skinBtn = (name: ThlSkin) => {\n const base = name.replace(/-dark$/, '') as keyof typeof skins;\n return h(\n 'li',\n { key: name },\n h('button', {\n type: 'button',\n 'aria-label': name,\n title: name,\n 'aria-pressed': cfg.theme === name,\n class: cx(s('skin', { dark: name.endsWith('-dark') }), { 'is-active': cfg.theme === name }),\n style: { background: `linear-gradient(135deg, ${skins[base].topbar1}, ${skins[base].topbar2})` },\n onClick: () => set({ theme: name }),\n }),\n );\n };\n const bases = Object.keys(skins) as Array<keyof typeof skins>;\n const group = <T extends string>(opts: T[], cur: T, on: (v: T) => void, icons?: Record<string, string>) =>\n h(ThlButtonGroup, { justified: true }, () =>\n opts.map((o) =>\n h(\n ThlButton,\n { key: o, size: 'sm', variant: cur === o ? 'primary' : 'default', 'aria-pressed': cur === o, icon: icons?.[o], onClick: () => on(o) },\n () => t(`layout.${o}`),\n ),\n ),\n );\n return h(ThlDrawer, { open: p.open, title: t('layout.settings'), wide: true, 'onUpdate:open': (v: boolean) => emit('update:open', v) }, () =>\n h('div', { class: s() }, [\n h('section', { class: s('section') }, [\n h('h3', t('layout.layoutOptions')),\n h('div', { class: `${pre.value}-stack`, style: { gap: '10px' } }, [\n h(ThlSwitch, {\n modelValue: cfg.fixedHeader,\n size: 'sm',\n label: t('layout.fixedHeader'),\n 'onUpdate:modelValue': (v: boolean) => set({ fixedHeader: v }),\n }),\n h(ThlSwitch, {\n modelValue: cfg.fixedSidebar,\n size: 'sm',\n label: t('layout.fixedSidebar'),\n 'onUpdate:modelValue': (v: boolean) => set({ fixedSidebar: v }),\n }),\n ]),\n ]),\n h('section', { class: s('section') }, [\n h('h3', t('layout.layout')),\n group<LayoutMode>(['vertical', 'mini', 'horizontal'], cfg.layout, (v) => set({ layout: v })),\n ]),\n h('section', { class: s('section') }, [\n h('h3', t('layout.colorMode')),\n group<ColorMode>(['light', 'dark', 'auto'], cfg.colorMode, (v) => set({ colorMode: v }), { light: 'sun', dark: 'moon', auto: 'monitor' }),\n ]),\n h('section', { class: s('section') }, [\n h('h3', t('layout.withLightSidebar')),\n h(\n 'ul',\n { class: s('skins') },\n bases.map((b) => skinBtn(b)),\n ),\n h('h3', t('layout.withDarkSidebar')),\n h(\n 'ul',\n { class: s('skins') },\n bases.map((b) => skinBtn(`${b}-dark` as ThlSkin)),\n ),\n ]),\n h('section', { class: s('section') }, [\n h('h3', t('layout.language')),\n h(ThlNativeSelect, {\n modelValue: cfg.locale,\n 'aria-label': t('layout.language'),\n options: localeOptions(cfg.locales),\n 'onUpdate:modelValue': (v: string) => set({ locale: v }),\n }),\n ]),\n ]),\n );\n };\n },\n});\n\n/* ---------------- Topbar pieces ---------------- */\nexport const ThlTopbarMessages = /*#__PURE__*/ defineComponent({\n name: 'ThlTopbarMessages',\n props: {\n items: {\n type: Array as PropType<Array<{ id: string | number; title: string; text?: string; time?: string; avatar?: string; icon?: string; status?: string }>>,\n required: true,\n },\n icon: { type: String, default: 'mail' },\n title: String,\n footer: String,\n footerHref: String,\n },\n setup(p) {\n const pre = usePrefix();\n const { t } = useI18n();\n return () => {\n const tb = bem('topbar', pre.value),\n mc = bem('message-center', pre.value);\n return h(\n 'li',\n { class: tb('item') },\n h(\n ThlDropdown,\n { align: 'end', menuClass: tb('dropdown'), animation: `${pre.value}-anim-bounce-in-down` },\n {\n trigger: () =>\n h('button', { type: 'button', class: tb('btn'), 'aria-label': p.title ?? t('layout.notifications', { count: p.items.length }) }, [\n icon(p.icon, { size: 18 }),\n p.items.length ? h('span', { class: tb('dot') }) : null,\n ]),\n default: () => [\n h('div', { class: tb('drop-title') }, p.title ?? t('layout.notifications', { count: p.items.length })),\n h(\n 'div',\n { class: mc() },\n p.items.map((m) =>\n h('a', { key: m.id, href: '#', class: mc('item'), onClick: (e: Event) => e.preventDefault() }, [\n m.avatar\n ? h('span', { class: `${pre.value}-avatar` }, [\n h('img', { src: m.avatar, alt: '' }),\n m.status ? h('span', { class: `${pre.value}-avatar__status ${pre.value}-avatar__status--${m.status}` }) : null,\n ])\n : h('span', { class: `${pre.value}-list__icon` }, icon(m.icon ?? 'bell')),\n h('div', { class: mc('body') }, [\n h('div', { class: mc('body-title') }, m.title),\n h('span', { class: mc('desc') }, m.text),\n h('span', { class: mc('time') }, m.time),\n ]),\n ]),\n ),\n ),\n h('a', { class: tb('drop-footer'), href: p.footerHref ?? '#' }, [p.footer ?? t('layout.seeAllNotifications'), ' ', icon('chevron-right')]),\n ],\n },\n ),\n );\n };\n },\n});\n\n/* ---------------- AppLayout ---------------- */\nexport const ThlAppLayout = /*#__PURE__*/ defineComponent({\n name: 'ThlAppLayout',\n props: {\n menu: { type: Array as PropType<MenuItem[]>, required: true },\n currentPath: String,\n brand: { type: String, default: 'thl-ui' },\n brandHref: { type: String, default: '/' },\n user: Object as PropType<{ name: string; avatar?: string; role?: string; menu?: Array<{ key: string; label?: string; icon?: string; divider?: boolean }> }>,\n searchable: Boolean,\n settings: { type: Boolean, default: true },\n footer: { type: [String, Boolean], default: undefined },\n },\n emits: ['search', 'user-select'],\n setup(p, { slots, emit }) {\n const pre = usePrefix();\n const { t, locale } = useI18n();\n const ctx = useThlContext();\n const sidebar = createSidebar({\n mini: ctx.config.value.layout === 'mini',\n breakpoint: ctx.config.value.components.Sidebar?.breakpoint as number | undefined,\n });\n onBeforeUnmount(sidebar.destroy);\n watch(\n () => ctx.config.value.layout,\n (l) => sidebar.setMini(l === 'mini'),\n );\n watch(\n () => p.currentPath,\n () => sidebar.closeMobile(),\n );\n const sb = useStore(sidebar.state);\n const panel = ref(false);\n const q = ref('');\n const cycle: Record<ColorMode, ColorMode> = { light: 'dark', dark: 'auto', auto: 'light' };\n return () => {\n const cfg = ctx.config.value;\n const horizontal = cfg.layout === 'horizontal';\n const tb = bem('topbar', pre.value);\n const s = sb.value;\n const userItems = p.user?.menu ?? [\n { key: 'profile', label: t('layout.myProfile'), icon: 'user' },\n { key: 'balance', label: t('layout.myBalance'), icon: 'credit-card' },\n { key: 'inbox', label: t('layout.inbox'), icon: 'inbox' },\n { key: 'd1', divider: true },\n { key: 'settings', label: t('layout.accountSetting'), icon: 'settings' },\n { key: 'd2', divider: true },\n { key: 'logout', label: t('layout.logout'), icon: 'log-out' },\n ];\n return h('div', { class: bem('app', pre.value)({ mini: !horizontal && s.mini, horizontal, 'mobile-open': s.mobileOpen }) }, [\n h('a', { href: '#thl-main', class: `${pre.value}-sr-only` }, 'Skip to content'),\n h('header', { class: tb() }, [\n h(\n 'div',\n { class: tb('brand') },\n h('a', { href: p.brandHref }, [\n slots.brand ? slots.brand() : icon('thl-logo', { size: 28, strokeWidth: 2.4 }),\n h('span', { class: tb('brand-text') }, p.brand),\n ]),\n ),\n h('ul', { class: tb('left') }, [\n h(\n 'li',\n { class: cx(tb('item'), tb('toggler')) },\n h(\n 'button',\n {\n type: 'button',\n class: tb('btn'),\n onClick: sidebar.toggle,\n 'aria-label': t('layout.toggleSidebar'),\n 'aria-expanded': s.isMobile ? s.mobileOpen : !s.mini,\n },\n icon('menu', { size: 20 }),\n ),\n ),\n p.searchable\n ? h(\n 'li',\n { class: tb('search') },\n h(\n 'form',\n {\n role: 'search',\n onSubmit: (e: Event) => {\n e.preventDefault();\n emit('search', q.value);\n },\n },\n h('input', {\n type: 'search',\n value: q.value,\n onInput: (e: Event) => (q.value = (e.target as HTMLInputElement).value),\n placeholder: t('common.searchPlaceholder'),\n 'aria-label': t('common.search'),\n }),\n ),\n )\n : null,\n slots['topbar-left']?.(),\n ]),\n h('ul', { class: tb('right') }, [\n slots['topbar-right']?.(),\n h(\n 'li',\n { class: tb('item') },\n h(\n ThlDropdown,\n {\n align: 'end',\n items: cfg.locales.map((l) => ({ key: l, label: (localeInfo as any)[l]?.name ?? l })),\n onSelect: (k: string) => ctx.thl.set({ locale: k }),\n },\n {\n trigger: () =>\n h('button', { type: 'button', class: tb('btn'), 'aria-label': `${locale.value.toUpperCase()} – ${t('layout.language')}` }, [\n icon('languages', { size: 18 }),\n h('span', { class: tb('btn-text') }, locale.value),\n ]),\n },\n ),\n ),\n h(\n 'li',\n { class: tb('item') },\n h(\n 'button',\n {\n type: 'button',\n class: tb('btn'),\n title: t(`layout.${cfg.colorMode}`),\n 'aria-label': `${t('layout.colorMode')}: ${t(`layout.${cfg.colorMode}`)}`,\n onClick: () => ctx.thl.set({ colorMode: cycle[cfg.colorMode] }),\n },\n icon(cfg.colorMode === 'dark' ? 'moon' : cfg.colorMode === 'auto' ? 'monitor' : 'sun', { size: 18 }),\n ),\n ),\n p.user\n ? h(\n 'li',\n { class: tb('item') },\n h(\n ThlDropdown,\n { align: 'end', items: userItems, animation: `${pre.value}-anim-flip-in-y`, onSelect: (k: string) => emit('user-select', k) },\n {\n trigger: () =>\n h('button', { type: 'button', class: cx(tb('btn'), tb('user')) }, [\n p.user!.avatar ? h('img', { src: p.user!.avatar, alt: '' }) : null,\n h('b', { class: `${pre.value}-col-hidden-sm` }, p.user!.name),\n icon('chevron-down'),\n ]),\n },\n ),\n )\n : null,\n p.settings\n ? h(\n 'li',\n { class: tb('item') },\n h(\n 'button',\n { type: 'button', class: tb('btn'), onClick: () => (panel.value = true), 'aria-label': t('layout.settings') },\n icon('settings', { size: 18 }),\n ),\n )\n : null,\n ]),\n ]),\n s.mobileOpen ? h('div', { class: `${pre.value}-sidebar-backdrop`, onClick: sidebar.closeMobile }) : null,\n h(\n 'aside',\n { class: `${pre.value}-sidebar`, 'aria-label': 'sidebar' },\n h('div', { class: `${pre.value}-sidebar__scroll` }, [\n p.user && !horizontal\n ? h('div', { class: `${pre.value}-user-profile` }, [\n p.user.avatar\n ? h('span', { class: `${pre.value}-user-profile__avatar` }, [\n h('img', { src: p.user.avatar, alt: '' }),\n h('span', { class: `${pre.value}-user-profile__badge` }, h(ThlBadge, { color: 'danger', dot: true })),\n ])\n : null,\n h('div', { class: `${pre.value}-user-profile__name` }, p.user.name),\n p.user.role ? h('div', { class: `${pre.value}-user-profile__role` }, p.user.role) : null,\n ])\n : null,\n h('nav', h(ThlSideMenu, { items: p.menu, currentPath: p.currentPath, horizontal }, slots.link ? { link: slots.link } : undefined)),\n slots['sidebar-footer'] ? h('div', { class: `${pre.value}-sidebar__footer` }, slots['sidebar-footer']()) : null,\n ]),\n ),\n h('div', { class: `${pre.value}-page` }, [\n h('main', { id: 'thl-main', style: { flex: 1, display: 'flex', flexDirection: 'column' } }, slots.default?.()),\n p.footer !== false\n ? h(\n 'footer',\n { class: `${pre.value}-footer` },\n slots.footer ? slots.footer() : typeof p.footer === 'string' ? p.footer : t('layout.copyright', { year: new Date().getFullYear() }),\n )\n : null,\n ]),\n p.settings ? h(ThlSettingsPanel, { open: panel.value, 'onUpdate:open': (v: boolean) => (panel.value = v) }) : null,\n h(ThlToaster),\n h(ThlConfirmHost),\n ]);\n };\n },\n});\n\nexport const ThlPage = /*#__PURE__*/ defineComponent({\n name: 'ThlPage',\n props: { title: String, breadcrumb: Array as PropType<Array<{ label: string; href?: string }>> },\n setup(p, { slots }) {\n const pre = usePrefix();\n return () => [\n p.title || p.breadcrumb\n ? h('div', { class: `${pre.value}-page-header` }, [\n h('h1', { class: `${pre.value}-page-header__title` }, p.title),\n h('div', { class: `${pre.value}-page-header__actions` }, [\n slots.actions?.(),\n p.breadcrumb ? h(ThlBreadcrumb, { items: p.breadcrumb }, slots.link ? { link: slots.link } : undefined) : null,\n ]),\n ])\n : null,\n h('div', { class: `${pre.value}-page__content` }, slots.default?.()),\n ];\n },\n});\n\nexport const ThlAuthLayout = /*#__PURE__*/ defineComponent({\n name: 'ThlAuthLayout',\n props: { title: String, avatar: String },\n setup(p, { slots }) {\n const pre = usePrefix();\n const { t } = useI18n();\n const ctx = useThlContext();\n return () => {\n const b = bem('auth', pre.value);\n return h('main', { class: b() }, [\n h(\n 'div',\n { class: b('lang') },\n h(ThlNativeSelect, {\n size: 'sm',\n modelValue: ctx.config.value.locale,\n 'aria-label': t('layout.language'),\n options: localeOptions(ctx.config.value.locales),\n 'onUpdate:modelValue': (v: string) => ctx.thl.set({ locale: v }),\n }),\n ),\n h('div', { class: b('box') }, [\n h('div', { class: b('logo') }, slots.logo ? slots.logo() : [icon('thl-logo', { strokeWidth: 2.4 }), ' thl-ui']),\n p.avatar ? h('img', { class: b('avatar'), src: p.avatar, alt: '' }) : null,\n p.title ? h('h1', { class: b('title') }, p.title) : null,\n slots.default?.(),\n slots.footer ? h('div', { class: b('foot') }, slots.footer()) : null,\n ]),\n h(ThlToaster),\n ]);\n };\n },\n});\nexport const ThlErrorLayout = /*#__PURE__*/ defineComponent({\n name: 'ThlErrorLayout',\n props: { code: { type: Number, required: true }, title: String, text: String, homeHref: { type: String, default: '/' } },\n setup(p, { slots }) {\n const pre = usePrefix();\n const { t } = useI18n();\n return () => {\n const b = bem('error', pre.value);\n const known = [400, 403, 404, 500, 503].includes(p.code);\n return h('main', { class: b() }, [\n h('h1', { class: b('code') }, p.code),\n h('h2', { class: b('title') }, p.title ?? (known ? t(`pages.error.${p.code}.title`) : '')),\n h('p', { class: b('text') }, p.text ?? (known ? t(`pages.error.${p.code}.text`) : '')),\n slots.action ? slots.action() : h(ThlButton, { href: p.homeHref, variant: 'danger', rounded: true, size: 'lg' }, () => t('pages.error.backHome')),\n h('p', { class: b('footer') }, t('layout.copyright', { year: new Date().getFullYear() })),\n ]);\n };\n },\n});\n"],"names":["localeOptions","list","l","localeInfo","ThlSideMenu","defineComponent","p","slots","pre","usePrefix","ul","ref","visible","stop","watch","hz","el","observeMenuOverflow","n","onBeforeUnmount","overflow","computed","t","te","useI18n","trail","findActiveTrail","open","label","toggle","key","sib","o","k","s","render","depth","it","idx","b","bem","liAttrs","h","active","current","content","icon","ThlLabel","cls","cx","isOpen","moreOpen","rest","i","ThlSettingsPanel","emit","ctx","useThlContext","cfg","set","skinBtn","name","base","skins","bases","group","opts","cur","on","icons","ThlButtonGroup","ThlButton","ThlDrawer","v","ThlSwitch","ThlNativeSelect","ThlTopbarMessages","tb","mc","ThlDropdown","m","e","ThlAppLayout","locale","sidebar","createSidebar","sb","useStore","panel","q","cycle","horizontal","userItems","ThlBadge","ThlToaster","ThlConfirmHost","ThlPage","ThlBreadcrumb","ThlAuthLayout","ThlErrorLayout","known"],"mappings":"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"}