@wssto2/vue-core 0.15.3 → 0.16.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 (55) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{Activity-DM9t5d3D.js → Activity-DOUuIkZR.js} +1 -1
  3. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-uO4EAmBb.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-d_dPurWG.js} +170 -168
  4. package/dist/{Changes-DYpysvfX.js → Changes-BfcbVgmu.js} +1 -1
  5. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-qxeSTAKV.js → CollectionPage.vue_vue_type_script_setup_true_lang-B5hSkJ2N.js} +1 -1
  6. package/dist/{DeadLetters-vt9vhJD7.js → DeadLetters-CuMvfXH8.js} +2 -2
  7. package/dist/{General-oUI2MiwO.js → General-B5vcSEhP.js} +2 -2
  8. package/dist/{IncidentRecord-CQdv_bN5.js → IncidentRecord-wmStcEag.js} +5 -5
  9. package/dist/{IncidentsList-DwQ0wuM8.js → IncidentsList-CFx5tsxP.js} +2 -2
  10. package/dist/{NewRolePage-C-wbA-uW.js → NewRolePage-CZxAp7LR.js} +2 -2
  11. package/dist/{ProfilePage-Di77M2cX.js → ProfilePage-B-T8kBcc.js} +2 -2
  12. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-CZtvUH5L.js → RecordHeader.vue_vue_type_script_setup_true_lang-Bt5mT19g.js} +1 -1
  13. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-uLrX13ab.js → ResourcePage.vue_vue_type_script_setup_true_lang-DOiFuJnH.js} +1 -1
  14. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-V2D7fhR9.js → RoleEditor.vue_vue_type_script_setup_true_lang-CqSsNPCw.js} +1 -1
  15. package/dist/{RolePage-Crp71rRb.js → RolePage-zcUWpuDE.js} +3 -3
  16. package/dist/{RolesPage-DKXXnnDV.js → RolesPage-C7_zWw-c.js} +1 -1
  17. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-5ogQCj8M.js → SectionNavigator.vue_vue_type_script_setup_true_lang-BlCx9dVL.js} +2 -2
  18. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-C7WKxJ9i.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-C2D_D5Hi.js} +1 -1
  19. package/dist/{ServiceAccountRecord-CTU10RWy.js → ServiceAccountRecord-BYxpHzTR.js} +4 -4
  20. package/dist/{ServiceAccountsList-BVRjoswH.js → ServiceAccountsList-BUuK-RUj.js} +3 -3
  21. package/dist/{Sessions-BHwMrF7c.js → Sessions-Cm-Kilwl.js} +1 -1
  22. package/dist/{SettingsPage-lRWvsMYK.js → SettingsPage-Bavl0K-F.js} +2 -2
  23. package/dist/{SignIn-HnujOMRY.js → SignIn-SfEhFiyM.js} +1 -1
  24. package/dist/{SignInPage-c886Fvd7.js → SignInPage-BU0n2ehq.js} +1 -1
  25. package/dist/{SignIns-BsTlN2Zc.js → SignIns-Ahbn5cO6.js} +1 -1
  26. package/dist/{UserRecord-DrbpVHh9.js → UserRecord-3pCKMHkq.js} +4 -4
  27. package/dist/{UsersList-M5tBxrox.js → UsersList-vw3aDpvo.js} +2 -2
  28. package/dist/access/index.js +3 -3
  29. package/dist/app/index.js +1 -1
  30. package/dist/{application-C900Wz0A.js → application-CHPpOssP.js} +1 -1
  31. package/dist/back-LcLlFodC.js +63 -0
  32. package/dist/{chrome-nUcmVu8G.js → chrome-kMBKIB1N.js} +2 -2
  33. package/dist/collection/index.js +2 -2
  34. package/dist/form/index.js +2 -2
  35. package/dist/identity/index.js +1 -1
  36. package/dist/incidents/index.js +1 -1
  37. package/dist/{index-vES_D5ls.js → index-Ct7W_gYE.js} +2 -2
  38. package/dist/{index-_hDHxrt5.js → index-D9_xqF5g.js} +3 -3
  39. package/dist/{index-DM_nWOYf.js → index-nByFc1eL.js} +12 -12
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/{neighbors-DrEahe7B.js → neighbors-BpypL3Wb.js} +32 -31
  43. package/dist/notifications/index.js +1 -1
  44. package/dist/page/back.d.ts +37 -0
  45. package/dist/page/index.d.ts +1 -0
  46. package/dist/page/index.js +46 -42
  47. package/dist/resource/index.js +1 -1
  48. package/dist/router/index.js +1 -1
  49. package/dist/router/sections.d.ts +1 -1
  50. package/dist/sections-CSpJN0Z7.js +54 -0
  51. package/dist/shell/index.js +1 -1
  52. package/dist/testing/index.js +1 -1
  53. package/dist/{useSaveChrome-7huA3FzR.js → useSaveChrome-DB9OwIjT.js} +1 -1
  54. package/package.json +1 -1
  55. package/dist/sections-DI_JhgQG.js +0 -53
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.0 — 2026-10-22
4
+
5
+ Back to the page a record was opened from.
6
+
7
+ ### New
8
+ - **page:** `useBackLinks()` returns `backHere(to)` and `keepBack(to)`. `backHere` adds `?back=<current path>&back_title=<the page's title>` (the title is the page chrome's, so a caller passes nothing and the link updates once the record has loaded); `keepBack` carries the page's own `back` and `back_title`. `BACK_PARAM` and `BACK_TITLE_PARAM` are exported.
9
+ - **page:** `AdaptivePageShell` (so `EditorPage`, `ResourcePage` and list pages) replaces the page's back with the valid `?back=`, on the desktop toolbar and the phone bar alike. The label is `back_title` (text, trimmed, 80 characters), else the target route's `meta.titleKey`. A back that is not a single-slash path of this app, resolves to no route (the catch-all does not count), is the current page, or has no label is ignored and the page keeps its own.
10
+
11
+ ### Changed
12
+ - **router:** `useRouteSections` keeps `back` and `back_title` in a sub-page's section links (the rest of a sub-page's query is still left behind); sections already kept the whole query.
13
+ - **collection:** the previous / next links of `useCollectionNeighbors` drop `back` and `back_title`: another record is not reached from the page the user came from.
14
+
3
15
  ## 0.15.3 — 2026-10-21
4
16
 
5
17
  A group sheet focuses its first error.
@@ -13,7 +13,7 @@ import { b as W } from "./routeResource-DlTsGTg_.js";
13
13
  import { _ as X } from "./AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js";
14
14
  import { _ as Y } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
15
15
  import { u as Z } from "./useLoad-M7V-AVwR.js";
16
- import { P as tt, f as et, j as at } from "./index-DM_nWOYf.js";
16
+ import { P as tt, f as et, j as at } from "./index-nByFc1eL.js";
17
17
  import { _ as st } from "./ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js";
18
18
  const ot = {
19
19
  class: "flex min-w-0 flex-col gap-group-gap",
@@ -1,29 +1,30 @@
1
- import { defineComponent as L, computed as _, openBlock as i, createElementBlock as d, Fragment as A, renderList as M, createBlock as x, withCtx as k, createTextVNode as w, toDisplayString as b, unref as l, createElementVNode as m, mergeProps as N, createVNode as v, createCommentVNode as f, renderSlot as h, toValue as P, watch as S, onMounted as R, onBeforeUnmount as T, useTemplateRef as I, provide as z, ref as O, createSlots as H, normalizeClass as D } from "vue";
2
- import { a as V } from "./mediaQuery-CygcXmFW.js";
3
- import { _ as K } from "./BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
1
+ import { defineComponent as L, computed as x, openBlock as l, createElementBlock as d, Fragment as M, renderList as R, createBlock as w, withCtx as _, createTextVNode as y, toDisplayString as h, unref as s, createElementVNode as m, mergeProps as N, createVNode as g, createCommentVNode as f, renderSlot as v, toValue as z, watch as S, onMounted as I, onBeforeUnmount as T, useTemplateRef as V, provide as A, ref as H, createSlots as D, normalizeClass as K } from "vue";
2
+ import { a as O } from "./mediaQuery-CygcXmFW.js";
3
+ import { _ as q } from "./BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
4
4
  import { useI18n as j } from "vue-i18n";
5
- import { _ as q } from "./Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js";
6
- import { _ as y } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
7
- import { _ as Q } from "./Menu.vue_vue_type_script_setup_true_lang-Cqu4Ebsb.js";
8
- import { RouterLink as B, useRoute as U } from "vue-router";
9
- import { u as W } from "./format-Cp1h0vsC.js";
10
- import { a as F, c as Y, p as G } from "./chrome-nUcmVu8G.js";
11
- import { d as J } from "./context-Ch1r4fdN.js";
12
- const X = {
5
+ import { _ as Q } from "./Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js";
6
+ import { _ as $ } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
7
+ import { _ as U } from "./Menu.vue_vue_type_script_setup_true_lang-Cqu4Ebsb.js";
8
+ import { RouterLink as E, useRoute as W } from "vue-router";
9
+ import { u as Y } from "./format-Cp1h0vsC.js";
10
+ import { u as F, c as G, p as J } from "./chrome-kMBKIB1N.js";
11
+ import { b as X } from "./back-LcLlFodC.js";
12
+ import { d as Z } from "./context-Ch1r4fdN.js";
13
+ const ee = {
13
14
  key: 0,
14
15
  "data-page-actions": "",
15
16
  class: "flex min-w-0 flex-wrap items-center justify-end gap-2"
16
- }, Z = ["aria-label", "onClick"], E = /* @__PURE__ */ L({
17
+ }, te = ["aria-label", "onClick"], P = /* @__PURE__ */ L({
17
18
  __name: "PageActions",
18
19
  props: {
19
20
  actions: {},
20
21
  leading: {}
21
22
  },
22
23
  setup(p) {
23
- const e = p, { t: a } = j(), u = _(() => [
24
+ const e = p, { t: n } = j(), u = x(() => [
24
25
  ...e.leading ? [e.leading] : [],
25
26
  ...e.actions.filter((t) => t.placement !== "overflow" && t.tone !== "critical")
26
- ]), r = _(() => e.actions.filter((t) => t.placement === "overflow" || t.tone === "critical").map((t) => ({
27
+ ]), r = x(() => e.actions.filter((t) => t.placement === "overflow" || t.tone === "critical").map((t) => ({
27
28
  id: t.id,
28
29
  label: t.label,
29
30
  icon: t.icon,
@@ -35,56 +36,56 @@ const X = {
35
36
  function c(t) {
36
37
  return t === e.leading || t.prominence === "plain" ? "plain" : t.prominence === "standard" ? "standard" : t.placement === "primary" ? "primary" : "standard";
37
38
  }
38
- return (t, o) => u.value.length || r.value.length ? (i(), d("div", X, [
39
- (i(!0), d(A, null, M(u.value, (s) => (i(), x(q, {
40
- key: s.id,
41
- prominence: c(s),
42
- icon: s.icon,
43
- disabled: s.disabled,
44
- processing: s.processing,
45
- "keyboard-shortcut": s.keyboardShortcut,
46
- "data-page-action": s.id,
47
- onClick: (g) => s.onClick()
39
+ return (t, i) => u.value.length || r.value.length ? (l(), d("div", ee, [
40
+ (l(!0), d(M, null, R(u.value, (a) => (l(), w(Q, {
41
+ key: a.id,
42
+ prominence: c(a),
43
+ icon: a.icon,
44
+ disabled: a.disabled,
45
+ processing: a.processing,
46
+ "keyboard-shortcut": a.keyboardShortcut,
47
+ "data-page-action": a.id,
48
+ onClick: (b) => a.onClick()
48
49
  }, {
49
- default: k(() => [
50
- w(b(s.label), 1)
50
+ default: _(() => [
51
+ y(h(a.label), 1)
51
52
  ]),
52
53
  _: 2
53
54
  }, 1032, ["prominence", "icon", "disabled", "processing", "keyboard-shortcut", "data-page-action", "onClick"]))), 128)),
54
- r.value.length ? (i(), x(Q, {
55
+ r.value.length ? (l(), w(U, {
55
56
  key: 0,
56
57
  items: r.value,
57
- label: l(a)("core.page.more_actions")
58
+ label: s(n)("core.page.more_actions")
58
59
  }, {
59
- trigger: k(({ toggle: s, attrs: g }) => [
60
- m("button", N({ type: "button" }, g, {
61
- "aria-label": l(a)("core.page.more_actions"),
60
+ trigger: _(({ toggle: a, attrs: b }) => [
61
+ m("button", N({ type: "button" }, b, {
62
+ "aria-label": s(n)("core.page.more_actions"),
62
63
  "data-page-overflow": "",
63
64
  class: "hit-target flex size-9 cursor-pointer items-center justify-center rounded-button bg-fill text-content-strong transition-colors duration-motion-fast hover:bg-fill-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
64
- onClick: s
65
+ onClick: a
65
66
  }), [
66
- v(l(y), { name: "moreLine" })
67
- ], 16, Z)
67
+ g(s($), { name: "moreLine" })
68
+ ], 16, te)
68
69
  ]),
69
70
  _: 1
70
71
  }, 8, ["items", "label"])) : f("", !0)
71
72
  ])) : f("", !0);
72
73
  }
73
- }), ee = {
74
+ }), ae = {
74
75
  "data-page-toolbar": "",
75
76
  class: "sticky top-[var(--shell-banner-h,0px)] z-20 flex min-h-bar-height min-w-0 flex-wrap items-center gap-2.5 border-b border-border-separator bg-surface-page/85 py-2 pr-6 pl-4 backdrop-blur-xl"
76
- }, te = ["aria-label"], ae = {
77
+ }, ne = ["aria-label"], oe = {
77
78
  class: "flex shrink-0 text-content-link",
78
79
  "aria-hidden": "true"
79
- }, ne = { class: "flex min-w-0 items-center" }, oe = {
80
+ }, se = { class: "flex min-w-0 items-center" }, le = {
80
81
  class: "flex shrink-0 text-content-disabled",
81
82
  "aria-hidden": "true"
82
- }, se = { class: "flex min-w-0 shrink-0 items-center" }, le = { class: "truncate" }, ie = {
83
+ }, ie = { class: "flex min-w-0 shrink-0 items-center" }, re = { class: "truncate" }, ce = {
83
84
  key: 2,
84
85
  class: "flex shrink-0 items-center gap-1.5 text-footnote text-content-muted",
85
86
  role: "status",
86
87
  "data-page-status": ""
87
- }, re = /* @__PURE__ */ L({
88
+ }, ue = /* @__PURE__ */ L({
88
89
  __name: "PageToolbar",
89
90
  props: {
90
91
  back: {},
@@ -94,117 +95,117 @@ const X = {
94
95
  status: {}
95
96
  },
96
97
  setup(p) {
97
- const e = p, { t: a } = j(), u = _(() => e.path && e.path.length >= 2 ? e.path.slice(0, -1) : []), r = _(() => e.path && u.value.length ? e.path[e.path.length - 1] ?? null : e.back ?? null);
98
- return (c, t) => (i(), d("div", ee, [
99
- u.value.length && r.value ? (i(), d("nav", {
98
+ const e = p, { t: n } = j(), u = x(() => e.path && e.path.length >= 2 ? e.path.slice(0, -1) : []), r = x(() => e.path && u.value.length ? e.path[e.path.length - 1] ?? null : e.back ?? null);
99
+ return (c, t) => (l(), d("div", ae, [
100
+ u.value.length && r.value ? (l(), d("nav", {
100
101
  key: 0,
101
102
  "data-page-path": "",
102
- "aria-label": l(a)("core.page.breadcrumbs"),
103
+ "aria-label": s(n)("core.page.breadcrumbs"),
103
104
  class: "-ml-1 flex min-w-0 items-center"
104
105
  }, [
105
- m("span", ae, [
106
- v(l(y), {
106
+ m("span", oe, [
107
+ g(s($), {
107
108
  name: "arrowLeftSLine",
108
109
  size: 20
109
110
  })
110
111
  ]),
111
- m("ol", ne, [
112
- (i(!0), d(A, null, M(u.value, (o) => (i(), d("li", {
113
- key: o.label,
112
+ m("ol", se, [
113
+ (l(!0), d(M, null, R(u.value, (i) => (l(), d("li", {
114
+ key: i.label,
114
115
  class: "flex min-w-0 max-w-48 shrink items-center max-lg:hidden"
115
116
  }, [
116
- v(l(B), {
117
- to: o.to,
117
+ g(s(E), {
118
+ to: i.to,
118
119
  "data-page-path-item": "",
119
120
  class: "min-w-0 truncate rounded-control px-1 py-1 text-subheadline text-content-muted hover:bg-tint-soft hover:text-content-link focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus"
120
121
  }, {
121
- default: k(() => [
122
- w(b(o.label), 1)
122
+ default: _(() => [
123
+ y(h(i.label), 1)
123
124
  ]),
124
125
  _: 2
125
126
  }, 1032, ["to"]),
126
- m("span", oe, [
127
- v(l(y), {
127
+ m("span", le, [
128
+ g(s($), {
128
129
  name: "arrowRightSLine",
129
130
  size: 14
130
131
  })
131
132
  ])
132
133
  ]))), 128)),
133
- m("li", se, [
134
- v(l(B), {
134
+ m("li", ie, [
135
+ g(s(E), {
135
136
  to: r.value.to,
136
137
  "data-page-back": "",
137
138
  class: "min-w-0 truncate rounded-control px-1 py-1 text-subheadline font-medium text-content-link hover:bg-tint-soft focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus"
138
139
  }, {
139
- default: k(() => [
140
- w(b(r.value.label), 1)
140
+ default: _(() => [
141
+ y(h(r.value.label), 1)
141
142
  ]),
142
143
  _: 1
143
144
  }, 8, ["to"])
144
145
  ])
145
146
  ])
146
- ], 8, te)) : e.back ? (i(), x(l(B), {
147
+ ], 8, ne)) : e.back ? (l(), w(s(E), {
147
148
  key: 1,
148
149
  to: e.back.to,
149
150
  "data-page-back": "",
150
151
  class: "-ml-1 flex min-w-0 items-center gap-0.5 rounded-control py-1 pr-2 pl-0.5 text-subheadline font-medium text-content-link hover:bg-tint-soft focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus"
151
152
  }, {
152
- default: k(() => [
153
- v(l(y), {
153
+ default: _(() => [
154
+ g(s($), {
154
155
  name: "arrowLeftSLine",
155
156
  size: 20
156
157
  }),
157
- m("span", le, b(e.back.label), 1)
158
+ m("span", re, h(e.back.label), 1)
158
159
  ]),
159
160
  _: 1
160
161
  }, 8, ["to"])) : f("", !0),
161
162
  t[1] || (t[1] = m("div", { class: "min-w-0 flex-1" }, null, -1)),
162
- h(c.$slots, "pager"),
163
- e.status ? (i(), d("span", ie, [
163
+ v(c.$slots, "pager"),
164
+ e.status ? (l(), d("span", ce, [
164
165
  t[0] || (t[0] = m("span", {
165
166
  class: "size-1.75 rounded-full bg-tint",
166
167
  "aria-hidden": "true"
167
168
  }, null, -1)),
168
- w(b(e.status), 1)
169
+ y(h(e.status), 1)
169
170
  ])) : f("", !0),
170
- v(E, {
171
+ g(P, {
171
172
  actions: e.actions,
172
173
  leading: e.leading
173
174
  }, null, 8, ["actions", "leading"])
174
175
  ]));
175
176
  }
176
177
  });
177
- function ce(p, e, a = !0) {
178
+ function de(p, e, n = !0) {
178
179
  const u = F();
179
- if (!u || !P(a)) return;
180
+ if (!u || !z(n)) return;
180
181
  const r = u.claim();
181
182
  let c = null;
182
- S(() => P(e), (t) => r.setTitle(t), { immediate: !0 }), R(() => {
183
+ S(() => z(e), (t) => r.setTitle(t), { immediate: !0 }), I(() => {
183
184
  !p.value || typeof IntersectionObserver > "u" || (c = new IntersectionObserver(([t]) => r.setTitleInView(t?.isIntersecting ?? !0), { rootMargin: "-52px 0px 0px 0px" }), c.observe(p.value));
184
185
  }), T(() => {
185
186
  c?.disconnect(), r.clearTitle();
186
187
  });
187
188
  }
188
- const ue = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, de = { class: "flex min-w-0 flex-[1_1_16rem] items-center gap-3.5" }, pe = {
189
+ const pe = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, me = { class: "flex min-w-0 flex-[1_1_16rem] items-center gap-3.5" }, fe = {
189
190
  key: 0,
190
191
  "aria-hidden": "true",
191
192
  class: "flex size-10 shrink-0 items-center justify-center rounded-group bg-tile-brand text-tile-brand-foreground compact:hidden"
192
- }, me = { class: "flex min-w-0 flex-col gap-0.5" }, fe = { class: "flex min-w-0 flex-wrap items-baseline gap-2.5" }, ge = {
193
+ }, ge = { class: "flex min-w-0 flex-col gap-0.5" }, ve = { class: "flex min-w-0 flex-wrap items-baseline gap-2.5" }, he = {
193
194
  key: 0,
194
195
  "data-resource-count": "",
195
196
  class: "rounded-full bg-fill px-2.5 py-0.5 text-subheadline font-semibold tabular-nums text-content-muted compact:bg-transparent compact:px-0 compact:font-normal"
196
- }, ve = {
197
+ }, be = {
197
198
  key: 0,
198
199
  class: "text-subheadline text-content-muted max-md:hidden"
199
- }, he = {
200
+ }, ke = {
200
201
  key: 0,
201
202
  class: "ml-auto flex items-center gap-3"
202
- }, be = {
203
+ }, _e = {
203
204
  key: 0,
204
205
  class: "flex shrink-0 items-center gap-1.5 text-footnote text-content-muted",
205
206
  role: "status",
206
207
  "data-page-status": ""
207
- }, ke = /* @__PURE__ */ L({
208
+ }, xe = /* @__PURE__ */ L({
208
209
  __name: "ResourceHeader",
209
210
  props: {
210
211
  title: {},
@@ -217,79 +218,79 @@ const ue = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, de
217
218
  inlineActions: { type: Boolean, default: !1 }
218
219
  },
219
220
  setup(p) {
220
- const e = p, a = W(), u = V("(max-width: 47.999rem)"), r = _(() => e.count == null ? null : a.number(e.count)), c = I("titleElement");
221
- return ce(c, () => e.title), (t, o) => (i(), d("div", ue, [
222
- m("div", de, [
223
- h(t.$slots, "leading", {}, () => [
224
- e.icon ? (i(), d("span", pe, [
225
- v(l(y), {
221
+ const e = p, n = Y(), u = O("(max-width: 47.999rem)"), r = x(() => e.count == null ? null : n.number(e.count)), c = V("titleElement");
222
+ return de(c, () => e.title), (t, i) => (l(), d("div", pe, [
223
+ m("div", me, [
224
+ v(t.$slots, "leading", {}, () => [
225
+ e.icon ? (l(), d("span", fe, [
226
+ g(s($), {
226
227
  name: e.icon,
227
228
  size: 20
228
229
  }, null, 8, ["name"])
229
230
  ])) : f("", !0)
230
231
  ]),
231
- m("div", me, [
232
- m("div", fe, [
232
+ m("div", ge, [
233
+ m("div", ve, [
233
234
  m("h1", {
234
235
  ref_key: "titleElement",
235
236
  ref: c,
236
237
  class: "min-w-0 text-large-title font-semibold tracking-tight break-words text-content-strong"
237
- }, b(e.title), 513),
238
- r.value !== null ? (i(), d("span", ge, b(r.value), 1)) : f("", !0)
238
+ }, h(e.title), 513),
239
+ r.value !== null ? (l(), d("span", he, h(r.value), 1)) : f("", !0)
239
240
  ]),
240
- e.description ? (i(), d("p", ve, b(e.description), 1)) : f("", !0),
241
- h(t.$slots, "description")
241
+ e.description ? (l(), d("p", be, h(e.description), 1)) : f("", !0),
242
+ v(t.$slots, "description")
242
243
  ])
243
244
  ]),
244
- e.inlineActions || !l(u) ? (i(), d("div", he, [
245
- e.status ? (i(), d("span", be, [
246
- o[0] || (o[0] = m("span", {
245
+ e.inlineActions || !s(u) ? (l(), d("div", ke, [
246
+ e.status ? (l(), d("span", _e, [
247
+ i[0] || (i[0] = m("span", {
247
248
  class: "size-1.75 rounded-full bg-tint",
248
249
  "aria-hidden": "true"
249
250
  }, null, -1)),
250
- w(b(e.status), 1)
251
+ y(h(e.status), 1)
251
252
  ])) : f("", !0),
252
- v(E, {
253
+ g(P, {
253
254
  actions: e.actions,
254
255
  leading: e.leading
255
256
  }, null, 8, ["actions", "leading"])
256
257
  ])) : f("", !0)
257
258
  ]));
258
259
  }
259
- }), [_e, Ie] = J("vue-core.pageSectionBack");
260
- function xe(p, e) {
261
- const a = U();
262
- let u = a.fullPath;
263
- const r = a.matched[a.matched.length - 1];
260
+ }), [we, je] = Z("vue-core.pageSectionBack");
261
+ function ye(p, e) {
262
+ const n = W();
263
+ let u = n.fullPath;
264
+ const r = n.matched[n.matched.length - 1];
264
265
  S(
265
- () => a.fullPath,
266
- (s) => {
267
- a.matched[a.matched.length - 1] === r && (u = s);
266
+ () => n.fullPath,
267
+ (a) => {
268
+ n.matched[n.matched.length - 1] === r && (u = a);
268
269
  }
269
270
  );
270
271
  let c, t;
271
- function o() {
272
- c?.disconnect(), clearTimeout(t), document.removeEventListener("pointerdown", o, !0), document.removeEventListener("keydown", o, !0);
272
+ function i() {
273
+ c?.disconnect(), clearTimeout(t), document.removeEventListener("pointerdown", i, !0), document.removeEventListener("keydown", i, !0);
273
274
  }
274
- R(() => {
275
- const s = e.focusMemory.take(u);
276
- if (!s || !p.value) return;
277
- const g = () => {
278
- const $ = Array.from(p.value?.querySelectorAll("a[href]") ?? []).find(
279
- (n) => n.getAttribute("href") === s.href
275
+ I(() => {
276
+ const a = e.focusMemory.take(u);
277
+ if (!a || !p.value) return;
278
+ const b = () => {
279
+ const k = Array.from(p.value?.querySelectorAll("a[href]") ?? []).find(
280
+ (C) => C.getAttribute("href") === a.href
280
281
  );
281
- $ && ($.focus({ preventScroll: !0 }), window.scrollTo({ top: s.top, behavior: "instant" }), o());
282
+ k && (k.focus({ preventScroll: !0 }), window.scrollTo({ top: a.top, behavior: "instant" }), i());
282
283
  };
283
- c = new MutationObserver(g), c.observe(p.value, { subtree: !0, childList: !0 }), document.addEventListener("pointerdown", o, !0), document.addEventListener("keydown", o, !0), t = setTimeout(o, 1e4), g();
284
+ c = new MutationObserver(b), c.observe(p.value, { subtree: !0, childList: !0 }), document.addEventListener("pointerdown", i, !0), document.addEventListener("keydown", i, !0), t = setTimeout(i, 1e4), b();
284
285
  }), T(() => {
285
- const s = document.activeElement;
286
- s instanceof HTMLAnchorElement && p.value?.contains(s) && e.focusMemory.put(u, { href: s.getAttribute("href") ?? "", top: window.scrollY }), o();
286
+ const a = document.activeElement;
287
+ a instanceof HTMLAnchorElement && p.value?.contains(a) && e.focusMemory.put(u, { href: a.getAttribute("href") ?? "", top: window.scrollY }), i();
287
288
  });
288
289
  }
289
- const we = { key: 1 }, ye = {
290
+ const $e = { key: 1 }, Se = {
290
291
  key: 2,
291
292
  class: "flex justify-center pt-2"
292
- }, $e = { class: "dock-safe-area pointer-events-auto order-1 border-t border-border-separator bg-surface-cell pt-screen-padding pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-screen-padding pl-[max(var(--app-screen-padding),var(--app-safe-left))]" }, Ve = /* @__PURE__ */ L({
293
+ }, Te = { class: "dock-safe-area pointer-events-auto order-1 border-t border-border-separator bg-surface-cell pt-screen-padding pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-screen-padding pl-[max(var(--app-screen-padding),var(--app-safe-left))]" }, Fe = /* @__PURE__ */ L({
293
294
  __name: "AdaptivePageShell",
294
295
  props: {
295
296
  title: {},
@@ -303,84 +304,85 @@ const we = { key: 1 }, ye = {
303
304
  width: { default: "full" }
304
305
  },
305
306
  setup(p) {
306
- const e = p, a = F() ?? Y();
307
- z(G, a);
308
- const u = a.claimShell();
307
+ const e = p, n = F() ?? G();
308
+ A(J, n);
309
+ const u = n.claimShell();
309
310
  T(u);
310
- const r = I("root");
311
- xe(r, a);
312
- const c = V("(max-width: 47.999rem)"), t = O(null);
313
- z(_e, t);
314
- const o = _(() => {
311
+ const r = V("root");
312
+ ye(r, n);
313
+ const c = O("(max-width: 47.999rem)"), t = H(null);
314
+ A(we, t);
315
+ const i = X(), a = x(() => {
315
316
  if (t.value) return t.value;
317
+ if (i.value) return i.value;
316
318
  if (e.back !== void 0) return e.back;
317
- const n = e.path?.[e.path.length - 1];
318
- return n ? { label: n.label, to: n.to } : null;
319
- }), s = _(() => {
320
- const n = t.value;
321
- return n ? n.path ? [...e.path ?? (e.back ? [e.back] : []), ...n.path] : null : e.path;
322
- }), g = a.claim();
319
+ const o = e.path?.[e.path.length - 1];
320
+ return o ? { label: o.label, to: o.to } : null;
321
+ }), b = x(() => {
322
+ const o = t.value;
323
+ return o ? o.path ? [...i.value ? [i.value] : e.path ?? (e.back ? [e.back] : []), ...o.path] : null : i.value ? null : e.path;
324
+ }), k = n.claim();
323
325
  S(
324
326
  () => [e.actions, e.documentTitle],
325
- ([n, C]) => g.setRegistration({ actions: n, leading: null, status: null, navTitle: null, documentTitle: C ?? null }),
327
+ ([o, B]) => k.setRegistration({ actions: o, leading: null, status: null, navTitle: null, documentTitle: B ?? null }),
326
328
  { immediate: !0 }
327
- ), S(o, (n) => g.setBack(n), { immediate: !0 }), T(() => {
328
- g.clearRegistration(), g.clearBack();
329
+ ), S(a, (o) => k.setBack(o), { immediate: !0 }), T(() => {
330
+ k.clearRegistration(), k.clearBack();
329
331
  });
330
- const $ = { full: "", content: "max-w-content", readable: "max-w-readable" };
331
- return (n, C) => (i(), d("div", {
332
+ const C = { full: "", content: "max-w-content", readable: "max-w-readable" };
333
+ return (o, B) => (l(), d("div", {
332
334
  ref_key: "root",
333
335
  ref: r,
334
336
  class: "min-w-0 w-full flex-1 bg-surface-page",
335
337
  "data-page-shell": ""
336
338
  }, [
337
- o.value && !l(c) ? (i(), x(re, {
339
+ a.value && !s(c) ? (l(), w(ue, {
338
340
  key: 0,
339
- back: o.value,
340
- path: s.value,
341
- actions: l(a).actions.value,
342
- leading: l(a).leading.value,
343
- status: l(a).status.value
344
- }, H({ _: 2 }, [
345
- n.$slots.pager ? {
341
+ back: a.value,
342
+ path: b.value,
343
+ actions: s(n).actions.value,
344
+ leading: s(n).leading.value,
345
+ status: s(n).status.value
346
+ }, D({ _: 2 }, [
347
+ o.$slots.pager ? {
346
348
  name: "pager",
347
- fn: k(() => [
348
- h(n.$slots, "pager")
349
+ fn: _(() => [
350
+ v(o.$slots, "pager")
349
351
  ]),
350
352
  key: "0"
351
353
  } : void 0
352
354
  ]), 1032, ["back", "path", "actions", "leading", "status"])) : f("", !0),
353
355
  m("div", {
354
- class: D(["mx-auto flex min-w-0 flex-col gap-section-gap pt-section-gap pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-[max(var(--app-screen-padding),var(--app-safe-bottom),calc(var(--bottom-dock-h,0px)+var(--app-screen-padding)))] pl-[max(var(--app-screen-padding),var(--app-safe-left))] lg:pt-[calc(var(--app-section-gap)*1.5)] lg:pr-[max(2.5rem,var(--app-safe-right))] lg:pl-[max(2.5rem,var(--app-safe-left))]", $[e.width]])
356
+ class: K(["mx-auto flex min-w-0 flex-col gap-section-gap pt-section-gap pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-[max(var(--app-screen-padding),var(--app-safe-bottom),calc(var(--bottom-dock-h,0px)+var(--app-screen-padding)))] pl-[max(var(--app-screen-padding),var(--app-safe-left))] lg:pt-[calc(var(--app-section-gap)*1.5)] lg:pr-[max(2.5rem,var(--app-safe-right))] lg:pl-[max(2.5rem,var(--app-safe-left))]", C[e.width]])
355
357
  }, [
356
- h(n.$slots, "header", {}, () => [
357
- v(ke, {
358
+ v(o.$slots, "header", {}, () => [
359
+ g(xe, {
358
360
  title: e.title,
359
361
  description: e.description,
360
362
  icon: e.icon,
361
363
  count: e.count,
362
- actions: o.value ? [] : l(a).actions.value,
363
- leading: o.value ? null : l(a).leading.value,
364
- status: o.value ? null : l(a).status.value
364
+ actions: a.value ? [] : s(n).actions.value,
365
+ leading: a.value ? null : s(n).leading.value,
366
+ status: a.value ? null : s(n).status.value
365
367
  }, null, 8, ["title", "description", "icon", "count", "actions", "leading", "status"])
366
368
  ]),
367
- n.$slots.header && !o.value && !l(c) ? (i(), x(E, {
369
+ o.$slots.header && !a.value && !s(c) ? (l(), w(P, {
368
370
  key: 0,
369
- actions: l(a).actions.value,
370
- leading: l(a).leading.value
371
+ actions: s(n).actions.value,
372
+ leading: s(n).leading.value
371
373
  }, null, 8, ["actions", "leading"])) : f("", !0),
372
- n.$slots.notices ? (i(), d("div", we, [
373
- h(n.$slots, "notices")
374
+ o.$slots.notices ? (l(), d("div", $e, [
375
+ v(o.$slots, "notices")
374
376
  ])) : f("", !0),
375
- h(n.$slots, "default"),
376
- n.$slots.pager && l(c) ? (i(), d("div", ye, [
377
- h(n.$slots, "pager")
377
+ v(o.$slots, "default"),
378
+ o.$slots.pager && s(c) ? (l(), d("div", Se, [
379
+ v(o.$slots, "pager")
378
380
  ])) : f("", !0)
379
381
  ], 2),
380
- n.$slots.bottom ? (i(), x(K, { key: 1 }, {
381
- default: k(() => [
382
- m("div", $e, [
383
- h(n.$slots, "bottom")
382
+ o.$slots.bottom ? (l(), w(q, { key: 1 }, {
383
+ default: _(() => [
384
+ m("div", Te, [
385
+ v(o.$slots, "bottom")
384
386
  ])
385
387
  ]),
386
388
  _: 3
@@ -389,11 +391,11 @@ const we = { key: 1 }, ye = {
389
391
  }
390
392
  });
391
393
  export {
392
- Ve as _,
393
- E as a,
394
- re as b,
395
- ke as c,
396
- Ie as d,
397
- _e as p,
398
- ce as u
394
+ Fe as _,
395
+ P as a,
396
+ ue as b,
397
+ xe as c,
398
+ je as d,
399
+ we as p,
400
+ de as u
399
401
  };
@@ -5,7 +5,7 @@ import { u as b } from "./platform-ORzRR3Tw.js";
5
5
  import { b as V } from "./routeResource-DlTsGTg_.js";
6
6
  import { _ as R } from "./AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js";
7
7
  import { u as E } from "./useLoad-M7V-AVwR.js";
8
- import { P as N, f as B, k as P, j as S } from "./index-DM_nWOYf.js";
8
+ import { P as N, f as B, k as P, j as S } from "./index-nByFc1eL.js";
9
9
  import { _ as U } from "./ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js";
10
10
  import { _ as I } from "./ViewTabs.vue_vue_type_script_setup_true_lang-BjdDXE3T.js";
11
11
  const W = {
@@ -3,7 +3,7 @@ import { routerKey as ct } from "vue-router";
3
3
  import { i as qe, a as ut } from "./error-CD7x0Jrz.js";
4
4
  import { d as dt } from "./http-D6qOS6xs.js";
5
5
  import { d as Re, o as ft, L as Te, e as je, w as pt, r as vt } from "./state-QDaxntgR.js";
6
- import { _ as mt } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-uO4EAmBb.js";
6
+ import { _ as mt } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-d_dPurWG.js";
7
7
  import { useI18n as he } from "vue-i18n";
8
8
  import { _ as ce } from "./Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js";
9
9
  import { _ as Ge } from "./Tabs.vue_vue_type_script_setup_true_lang-tpkGp98F.js";
@@ -1,10 +1,10 @@
1
1
  import { defineComponent as B, useTemplateRef as C, computed as y, ref as v, openBlock as D, createBlock as z, unref as r, withCtx as m, createVNode as F, createElementVNode as b, normalizeClass as $, toDisplayString as h } from "vue";
2
2
  import { useI18n as q } from "vue-i18n";
3
3
  import { a as k } from "./error-CD7x0Jrz.js";
4
- import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-qxeSTAKV.js";
4
+ import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-B5hSkJ2N.js";
5
5
  import { u as P } from "./describeError-B-NMa--w.js";
6
6
  import { u as I } from "./format-Cp1h0vsC.js";
7
- import { e as a, R as O } from "./index-vES_D5ls.js";
7
+ import { e as a, R as O } from "./index-Ct7W_gYE.js";
8
8
  import { _ as W } from "./AlertDialog.vue_vue_type_script_setup_true_lang-WuGvAOrj.js";
9
9
  import { t as i } from "./toast-CqSDTWRX.js";
10
10
  import { u as Y } from "./useLoad-M7V-AVwR.js";
@@ -7,7 +7,7 @@ import { a as h } from "./FormGroup.vue_vue_type_script_setup_true_lang-dsO1m9Mm
7
7
  import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-Bq_Qa4py.js";
8
8
  import { _ as L } from "./SelectField.vue_vue_type_script_setup_true_lang-CLkoPbGm.js";
9
9
  import { _ as f } from "./TextField.vue_vue_type_script_setup_true_lang-CWIeeZRE.js";
10
- import { u as A } from "./useSaveChrome-7huA3FzR.js";
10
+ import { u as A } from "./useSaveChrome-DB9OwIjT.js";
11
11
  import { i as D } from "./preferences-hYhrw8Uy.js";
12
12
  import { t as G } from "./toast-CqSDTWRX.js";
13
13
  import { u as I } from "./platform-ORzRR3Tw.js";
@@ -15,7 +15,7 @@ import { b as M } from "./routeResource-DlTsGTg_.js";
15
15
  import { u as O } from "./serverMessages-Ce8-MK4e.js";
16
16
  import { _ as U, a as $ } from "./ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js";
17
17
  import { u as j } from "./keepAlive-ClGnsIzT.js";
18
- import { P as z, e as H } from "./index-DM_nWOYf.js";
18
+ import { P as z, e as H } from "./index-nByFc1eL.js";
19
19
  const J = {
20
20
  class: "flex min-w-0 max-w-200 flex-col gap-group-gap",
21
21
  "data-person-general": ""