@wssto2/vue-core 0.8.0 → 0.9.1

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 (103) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-CkomzGrt.js → AccessGate.vue_vue_type_script_setup_true_lang-B8gpkhbw.js} +1 -1
  3. package/dist/{Activity-Cm1dlM2b.js → Activity-CfG8_Pp3.js} +7 -7
  4. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-9Lt1XggN.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-DC-zSRcl.js} +1 -1
  5. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-GxAsImnO.js → AsyncSection.vue_vue_type_script_setup_true_lang-BTIUz3cG.js} +1 -1
  6. package/dist/{Button.vue_vue_type_script_setup_true_lang-DQq_0P0p.js → Button.vue_vue_type_script_setup_true_lang-Dn-cJcj3.js} +67 -65
  7. package/dist/{Changes-fN0KMYbW.js → Changes-BT__0XX0.js} +6 -6
  8. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang--onFdKOB.js → CollectionPage.vue_vue_type_script_setup_true_lang-Bcwwr8ng.js} +7 -7
  9. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-CTukf2B2.js → DataTable.vue_vue_type_script_setup_true_lang-CJlllQII.js} +1 -1
  10. package/dist/{DateField.vue_vue_type_script_setup_true_lang-DmYp54mq.js → DateField.vue_vue_type_script_setup_true_lang-BuQY5e5x.js} +2 -2
  11. package/dist/{DeadLetters-BslDh93e.js → DeadLetters-Btv3u3qh.js} +4 -4
  12. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-BTADNpwB.js → FormGroup.vue_vue_type_script_setup_true_lang-Bzm3yJy5.js} +1 -1
  13. package/dist/{General-DJ53Egpp.js → General-Cum9U4Z3.js} +6 -6
  14. package/dist/{IncidentRecord-DQTnYQEe.js → IncidentRecord-C4K8hDJ1.js} +10 -10
  15. package/dist/{IncidentsList-C3yUnwwY.js → IncidentsList-BHfJ1cbg.js} +6 -6
  16. package/dist/{Modal.vue_vue_type_script_setup_true_lang-4MsnTWyx.js → Modal.vue_vue_type_script_setup_true_lang-BqO9X_-u.js} +1 -1
  17. package/dist/{NewRolePage-Bw2_jXcQ.js → NewRolePage-BSvYZkH4.js} +4 -4
  18. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-C3nw944P.js → NumberField.vue_vue_type_script_setup_true_lang-CLN2COfp.js} +1 -1
  19. package/dist/{PageBar.vue_vue_type_script_setup_true_lang-DPpcZxuT.js → PageBar.vue_vue_type_script_setup_true_lang-OE8VgTkY.js} +1 -1
  20. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-07pq4SrY.js → PersonAccess.vue_vue_type_script_setup_true_lang-CBQ1kv8G.js} +7 -7
  21. package/dist/{ProfilePage-DxALOfzC.js → ProfilePage-Dnn_VUoB.js} +13 -13
  22. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-DPm9q1P_.js → RecordHeader.vue_vue_type_script_setup_true_lang-CU7fZpp2.js} +1 -1
  23. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-Cm3tx76N.js → ResourcePage.vue_vue_type_script_setup_true_lang-y3gyR5A-.js} +3 -3
  24. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-DuQR8hFf.js → RoleEditor.vue_vue_type_script_setup_true_lang-BcUxVL9y.js} +5 -5
  25. package/dist/{RolePage-Yv6m6u7o.js → RolePage-BIY9dEME.js} +10 -10
  26. package/dist/{RolesPage-TibtzxzQ.js → RolesPage-Be35CA_4.js} +5 -5
  27. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-DAnZbfWA.js → SectionList.vue_vue_type_script_setup_true_lang-DzoE_o8v.js} +1 -1
  28. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-ivdGWUeF.js → SectionNavigator.vue_vue_type_script_setup_true_lang-CWPD9zQJ.js} +3 -3
  29. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-iJm8qmjT.js → SelectField.vue_vue_type_script_setup_true_lang-CYiarLAK.js} +1 -1
  30. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-en2w_pAJ.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-CKIq1Ljb.js} +7 -7
  31. package/dist/{ServiceAccountRecord-B_amE8fL.js → ServiceAccountRecord-QsIfylwj.js} +13 -13
  32. package/dist/{ServiceAccountsList-CoDKG_15.js → ServiceAccountsList-CVDIhuCh.js} +7 -7
  33. package/dist/{SessionList.vue_vue_type_script_setup_true_lang-BEKTaL0g.js → SessionList.vue_vue_type_script_setup_true_lang-CkN7vR71.js} +3 -3
  34. package/dist/{Sessions-BrAEXAMA.js → Sessions-Cl2DTM7s.js} +5 -5
  35. package/dist/{SettingsPage-Cje1X0ix.js → SettingsPage-B2uWw27O.js} +10 -10
  36. package/dist/{SignIn-CbWgDlFb.js → SignIn-BHYFSMOX.js} +5 -5
  37. package/dist/{SignInPage-DmHdrZR-.js → SignInPage--OC0hQ8M.js} +3 -3
  38. package/dist/{SignIns-D5BRb9Sr.js → SignIns-CJ09NqOn.js} +5 -5
  39. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-BwoE08jT.js → TimeField.vue_vue_type_script_setup_true_lang-B140Gjqd.js} +2 -2
  40. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-u53rHMFG.js → Timestamp.vue_vue_type_script_setup_true_lang-CAz2W69d.js} +1 -1
  41. package/dist/{UserRecord-rIeTkocJ.js → UserRecord-BjXUcHo8.js} +9 -9
  42. package/dist/{UsersList-CiPeerC7.js → UsersList-D4-eC5tC.js} +9 -9
  43. package/dist/access/index.js +4 -4
  44. package/dist/app/application.d.ts +4 -2
  45. package/dist/app/index.js +2 -2
  46. package/dist/application-DtY0ef-w.js +420 -0
  47. package/dist/button/index.js +1 -1
  48. package/dist/button/shortcut.d.ts +7 -0
  49. package/dist/client/client.d.ts +33 -0
  50. package/dist/client/disposition.d.ts +5 -0
  51. package/dist/client/index.d.ts +1 -1
  52. package/dist/client/index.js +1 -1
  53. package/dist/client-Dr2vV3qH.js +193 -0
  54. package/dist/collection/index.js +5 -5
  55. package/dist/content/Money.vue.d.ts +31 -0
  56. package/dist/content/index.d.ts +1 -0
  57. package/dist/content/index.js +75 -40
  58. package/dist/{contributions-BQ9dZoRw.js → contributions-DGsAIWd8.js} +1 -1
  59. package/dist/{fieldMessages-DTXpWnBd.js → fieldMessages-6UTV9yWL.js} +1 -1
  60. package/dist/form/EditorPage.vue.d.ts +6 -0
  61. package/dist/form/FileField.vue.d.ts +1 -1
  62. package/dist/form/PhotoField.vue.d.ts +1 -1
  63. package/dist/form/index.js +108 -108
  64. package/dist/format/format.d.ts +9 -1
  65. package/dist/format/index.js +1 -1
  66. package/dist/format-Dn-BOb-o.js +86 -0
  67. package/dist/{guards-BFCulig0.js → guards-Cz7TOQD8.js} +1 -1
  68. package/dist/identity/index.js +1 -1
  69. package/dist/incidents/index.js +1 -1
  70. package/dist/{index-B_lzrZot.js → index-BB0_hxmE.js} +16 -16
  71. package/dist/{index-BQg5X6iK.js → index-C1jSzT1V.js} +7 -7
  72. package/dist/{index-Cgu6Ntok.js → index-DZQ3gy3e.js} +8 -8
  73. package/dist/index.d.ts +1 -1
  74. package/dist/index.js +1 -1
  75. package/dist/modal/index.js +15 -15
  76. package/dist/{navigation-BSC9X7FM.js → navigation-CWj6F_cV.js} +1 -1
  77. package/dist/{neighbors-BKzihEGQ.js → neighbors-CcCaurV5.js} +1 -1
  78. package/dist/notifications/index.js +1 -1
  79. package/dist/page/index.js +5 -5
  80. package/dist/platform/index.js +3 -3
  81. package/dist/{platform-Dr4iY3b8.js → platform-BZUWAXQV.js} +1 -1
  82. package/dist/pwa/index.d.ts +2 -0
  83. package/dist/pwa/index.js +51 -0
  84. package/dist/pwa/install.d.ts +12 -0
  85. package/dist/pwa/worker.d.ts +13 -0
  86. package/dist/resource/index.js +1 -1
  87. package/dist/router/index.js +3 -3
  88. package/dist/{rowLayout-XlTcD4de.js → rowLayout-BLhJ9-42.js} +2 -2
  89. package/dist/{sections-BXg4_ZhO.js → sections-CmqFs-U-.js} +1 -1
  90. package/dist/shell/index.js +3 -3
  91. package/dist/state/index.js +1 -1
  92. package/dist/{state-ChVIjayU.js → state-BiYPPKoj.js} +1 -1
  93. package/dist/{status-BV5Ae4K4.js → status-Bf4nfIe0.js} +1 -1
  94. package/dist/styles.css +1 -1
  95. package/dist/testing/index.js +2 -2
  96. package/dist/{useCommand-BIZX1ReM.js → useCommand-C3QTZIIw.js} +1 -1
  97. package/dist/{useGroupSheet-DxXzdKo3.js → useGroupSheet-LAnO37WV.js} +2 -2
  98. package/dist/{useRecordDialog-BLVSz7g3.js → useRecordDialog-Da1Sfak1.js} +1 -1
  99. package/dist/{useTypedEntry-CKuGqWT8.js → useTypedEntry-DIYdA7DK.js} +1 -1
  100. package/package.json +5 -1
  101. package/dist/application-D8Nm17zA.js +0 -420
  102. package/dist/client-CZgikXPG.js +0 -151
  103. package/dist/format-D8X4zsx6.js +0 -78
@@ -34,7 +34,13 @@ export interface Formatting {
34
34
  dateTime(value: DateInput): string;
35
35
  time(value: DateInput): string;
36
36
  number(value: number | null | undefined, options?: Intl.NumberFormatOptions): string;
37
- money(amount: number | null | undefined, currency: string): string;
37
+ /**
38
+ * With an ISO `currency` ("EUR"): `Intl`'s currency style. Without one: the amount with two decimals, then the
39
+ * `currencySymbol` after a space ("1.234,50 KM"), or the bare amount when the application set no symbol.
40
+ */
41
+ money(amount: number | null | undefined, currency?: string): string;
42
+ /** The display symbol the application set (`""` when none), for a caller that draws it apart from the amount. */
43
+ readonly currencySymbol: string;
38
44
  /** "3 days ago", "in 2 hours", "now": the largest whole unit. */
39
45
  relative(value: DateInput, now?: Date): string;
40
46
  }
@@ -45,6 +51,8 @@ export interface FormattingOptions {
45
51
  locale: () => string;
46
52
  /** Replaces any of the `Intl` defaults. */
47
53
  formatters?: Partial<Formatters>;
54
+ /** The symbol shown after an amount when no ISO currency is passed: "€", "KM". It is text, not a currency code. */
55
+ currencySymbol?: string;
48
56
  }
49
57
  export declare function createFormatting(options: FormattingOptions): Formatting;
50
58
  /** The formatting of the app (or of a subtree): `installFormatting(app, createFormatting(...))` once, `useFormat()` below. */
@@ -1,4 +1,4 @@
1
- import { c as r, f as s, i as o, a as e, t as i, u as m } from "../format-D8X4zsx6.js";
1
+ import { c as r, f as s, i as o, a as e, t as i, u as m } from "../format-Dn-BOb-o.js";
2
2
  export {
3
3
  r as createFormatting,
4
4
  s as formattingKey,
@@ -0,0 +1,86 @@
1
+ import { d as y } from "./context-Ch1r4fdN.js";
2
+ import { i } from "./intlLocale-CeRU44qJ.js";
3
+ const b = /^(\d{4})-(\d{2})-(\d{2})$/;
4
+ function c(r) {
5
+ if (r == null || r === "") return null;
6
+ let n;
7
+ if (r instanceof Date) n = r;
8
+ else if (typeof r == "number") n = new Date(r);
9
+ else {
10
+ const a = b.exec(r);
11
+ n = a ? new Date(Number(a[1]), Number(a[2]) - 1, Number(a[3])) : new Date(r);
12
+ }
13
+ return Number.isNaN(n.getTime()) || n.getTime() <= 0 ? null : n;
14
+ }
15
+ const s = { year: "numeric", month: "2-digit", day: "2-digit" }, f = { hour: "2-digit", minute: "2-digit" }, o = [
16
+ ["year", 31536e3],
17
+ ["month", 2592e3],
18
+ ["week", 604800],
19
+ ["day", 86400],
20
+ ["hour", 3600],
21
+ ["minute", 60],
22
+ ["second", 1]
23
+ ];
24
+ function T() {
25
+ const r = /* @__PURE__ */ new Map(), n = (e, t) => {
26
+ let m = r.get(e);
27
+ return m || (m = t(), r.set(e, m)), m;
28
+ }, a = (e, t) => n(`d|${e}|${JSON.stringify(t)}`, () => new Intl.DateTimeFormat(i(e), t));
29
+ return {
30
+ date: (e, t) => a(t, s).format(e),
31
+ dateTime: (e, t) => a(t, { ...s, ...f }).format(e),
32
+ time: (e, t) => a(t, f).format(e),
33
+ number: (e, t, m) => n(`n|${t}|${JSON.stringify(m ?? {})}`, () => new Intl.NumberFormat(i(t), m)).format(e),
34
+ money: (e, t, m) => n(`m|${m}|${t}`, () => new Intl.NumberFormat(i(m), { style: "currency", currency: t })).format(e),
35
+ relative(e, t, m) {
36
+ const u = Math.trunc((e.getTime() - m.getTime()) / 1e3), [d, l] = o.find(([, g]) => Math.abs(u) >= g) ?? o[o.length - 1];
37
+ return n(`r|${t}`, () => new Intl.RelativeTimeFormat(i(t), { numeric: "auto" })).format(Math.trunc(u / l), d);
38
+ }
39
+ };
40
+ }
41
+ function h(r) {
42
+ const n = { ...T(), ...r.formatters }, a = (e) => typeof e == "number" && Number.isFinite(e);
43
+ return {
44
+ get locale() {
45
+ return r.locale();
46
+ },
47
+ date: (e) => {
48
+ const t = c(e);
49
+ return t ? n.date(t, r.locale()) : "";
50
+ },
51
+ dateTime: (e) => {
52
+ const t = c(e);
53
+ return t ? n.dateTime(t, r.locale()) : "";
54
+ },
55
+ time: (e) => {
56
+ const t = c(e);
57
+ return t ? n.time(t, r.locale()) : "";
58
+ },
59
+ number: (e, t) => a(e) ? n.number(e, r.locale(), t) : "",
60
+ get currencySymbol() {
61
+ return r.currencySymbol ?? "";
62
+ },
63
+ money: (e, t) => {
64
+ if (!a(e)) return "";
65
+ if (t) return n.money(e, t, r.locale());
66
+ const m = n.number(e, r.locale(), { minimumFractionDigits: 2, maximumFractionDigits: 2 });
67
+ return r.currencySymbol ? `${m} ${r.currencySymbol}` : m;
68
+ },
69
+ relative: (e, t = /* @__PURE__ */ new Date()) => {
70
+ const m = c(e);
71
+ return m ? n.relative(m, r.locale(), t) : "";
72
+ }
73
+ };
74
+ }
75
+ const [F, w] = y("vue-core.formatting");
76
+ function $(r, n) {
77
+ r.provide(F, n);
78
+ }
79
+ export {
80
+ T as a,
81
+ h as c,
82
+ F as f,
83
+ $ as i,
84
+ c as t,
85
+ w as u
86
+ };
@@ -1,5 +1,5 @@
1
1
  import { effectScope as R, watch as g } from "vue";
2
- import { h as b } from "./platform-Dr4iY3b8.js";
2
+ import { h as b } from "./platform-BZUWAXQV.js";
3
3
  const i = "redirect";
4
4
  function q(r) {
5
5
  const t = r.query[i], n = Array.isArray(t) ? t[0] : t;
@@ -1,4 +1,4 @@
1
- import { _ as t, k as a, l as o, i as n, m as i, d as r, n as u, o as c, q as d, r as A, t as p, s as R, v as f, w as l, x as m, g as y } from "../index-B_lzrZot.js";
1
+ import { _ as t, k as a, l as o, i as n, m as i, d as r, n as u, o as c, q as d, r as A, t as p, s as R, v as f, w as l, x as m, g as y } from "../index-BB0_hxmE.js";
2
2
  import { _ as v } from "../ActionRow.vue_vue_type_script_setup_true_lang-Cg1lhpcA.js";
3
3
  import { s as I } from "../routes-CVckt7Pj.js";
4
4
  export {
@@ -1,4 +1,4 @@
1
- import { h as t, j as i, k as r, l as n, i as a } from "../index-Cgu6Ntok.js";
1
+ import { h as t, j as i, k as r, l as n, i as a } from "../index-DZQ3gy3e.js";
2
2
  export {
3
3
  t as MAX_REPORTS_PER_SESSION,
4
4
  i as clientErrorReporter,
@@ -8,12 +8,12 @@ import { i as P } from "./error-Bb_dr_Ay.js";
8
8
  import { u as ve } from "./environment-Dva-SG8D.js";
9
9
  import { u as C } from "./describeError-BqGAUZgX.js";
10
10
  import { t as k } from "./toast-CqSDTWRX.js";
11
- import { u as x, h as R, f as j } from "./platform-Dr4iY3b8.js";
11
+ import { u as x, h as R, f as j } from "./platform-BZUWAXQV.js";
12
12
  import { useI18n as E } from "vue-i18n";
13
13
  import { _ as J } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
14
14
  import { useRouter as Q, useRoute as ye } from "vue-router";
15
15
  import { _ as X } from "./AccountMenuItem.vue_vue_type_script_setup_true_lang-BIYgaihv.js";
16
- import { _ as G } from "./Button.vue_vue_type_script_setup_true_lang-DQq_0P0p.js";
16
+ import { _ as G } from "./Button.vue_vue_type_script_setup_true_lang-Dn-cJcj3.js";
17
17
  import { u as ge } from "./leaveGuard-Cc8yeLxM.js";
18
18
  import { _ as _e } from "./FormView.vue_vue_type_script_setup_true_lang-Ncl9DmFB.js";
19
19
  import { _ as be } from "./TextField.vue_vue_type_script_setup_true_lang-7IAl4eAE.js";
@@ -21,10 +21,10 @@ import { u as we } from "./mediaQuery-CygcXmFW.js";
21
21
  import { u as xe } from "./useDialog-CXR3hN0G.js";
22
22
  import { c as Ee } from "./closeOverlays-CjVsIrpL.js";
23
23
  import { u as Se } from "./FormErrors.vue_vue_type_script_setup_true_lang-DJiK8iqo.js";
24
- import { u as Te } from "./format-D8X4zsx6.js";
24
+ import { u as Te } from "./format-Dn-BOb-o.js";
25
25
  import { b as ke } from "./routeResource-CcYA75T2.js";
26
26
  import "./ActionRow.vue_vue_type_script_setup_true_lang-Cg1lhpcA.js";
27
- import { _ as Ae } from "./AccessGate.vue_vue_type_script_setup_true_lang-CkomzGrt.js";
27
+ import { _ as Ae } from "./AccessGate.vue_vue_type_script_setup_true_lang-B8gpkhbw.js";
28
28
  import "./routes-CVckt7Pj.js";
29
29
  const b = {
30
30
  login: i("POST", "/v1/auth/login", { public: !0 }),
@@ -287,7 +287,7 @@ const De = ["aria-labelledby"], Ve = ["id"], Me = { class: "mt-1 text-subheadlin
287
287
  ]));
288
288
  }
289
289
  }), Je = K({
290
- login: { name: "login", path: "/login", component: () => import("./SignInPage-DmHdrZR-.js"), meta: { public: !0, titleKey: "core.identity.signin.title" } }
290
+ login: { name: "login", path: "/login", component: () => import("./SignInPage--OC0hQ8M.js"), meta: { public: !0, titleKey: "core.identity.signin.title" } }
291
291
  });
292
292
  function $s(e = {}) {
293
293
  return N({
@@ -355,7 +355,7 @@ function Ls(e) {
355
355
  };
356
356
  }
357
357
  const te = K({
358
- index: { name: "profile", path: "/profile", component: () => import("./ProfilePage-DxALOfzC.js"), meta: { titleKey: "core.profile.title" } }
358
+ index: { name: "profile", path: "/profile", component: () => import("./ProfilePage-Dnn_VUoB.js"), meta: { titleKey: "core.profile.title" } }
359
359
  }), es = /* @__PURE__ */ w({
360
360
  __name: "ProfileMenuItem",
361
361
  setup(e) {
@@ -379,19 +379,19 @@ function ns(e) {
379
379
  return { name: `users.record.${e.path}`, path: e.path, component: s, meta: { ...e.meta } };
380
380
  }
381
381
  const W = "iam.user:view", Ds = "iam.user:manage", os = "iam.user.activity:view", ne = K({
382
- index: { name: "users.index", path: "/users", component: () => import("./UsersList-CiPeerC7.js"), meta: { access: W, titleKey: "core.users.title" } },
382
+ index: { name: "users.index", path: "/users", component: () => import("./UsersList-D4-eC5tC.js"), meta: { access: W, titleKey: "core.users.title" } },
383
383
  record: {
384
384
  name: "users.record",
385
385
  path: "/users/:id",
386
- component: () => import("./UserRecord-rIeTkocJ.js"),
386
+ component: () => import("./UserRecord-BjXUcHo8.js"),
387
387
  meta: { access: W, titleKey: "core.users.title", remountOnParam: "id" },
388
388
  children: [
389
- { name: "users.record.general", path: "general", component: () => import("./General-DJ53Egpp.js"), meta: { section: { labelKey: "core.users.sections.general", icon: "user3Line", groupKey: "core.users.section_groups.person" } } },
390
- { name: "users.record.signin", path: "signin", component: () => import("./SignIn-CbWgDlFb.js"), meta: { section: { labelKey: "core.users.sections.signin", icon: "key2Line", groupKey: "core.users.section_groups.access" } } },
391
- { name: "users.record.sessions", path: "sessions", component: () => import("./Sessions-BrAEXAMA.js"), meta: { section: { labelKey: "core.users.sections.sessions", icon: "deviceLine", groupKey: "core.users.section_groups.access" } } },
392
- { name: "users.record.signins", path: "signins", component: () => import("./SignIns-D5BRb9Sr.js"), meta: { section: { labelKey: "core.users.sections.signins", icon: "timeFill", groupKey: "core.users.section_groups.activity" } } },
393
- { name: "users.record.changes", path: "changes", component: () => import("./Changes-fN0KMYbW.js"), meta: { section: { labelKey: "core.users.sections.changes", icon: "edit", groupKey: "core.users.section_groups.activity" } } },
394
- { name: "users.record.activity", path: "activity", component: () => import("./Activity-Cm1dlM2b.js"), meta: { access: os, section: { labelKey: "core.users.sections.activity", icon: "listCheck", groupKey: "core.users.section_groups.activity" } } }
389
+ { name: "users.record.general", path: "general", component: () => import("./General-Cum9U4Z3.js"), meta: { section: { labelKey: "core.users.sections.general", icon: "user3Line", groupKey: "core.users.section_groups.person" } } },
390
+ { name: "users.record.signin", path: "signin", component: () => import("./SignIn-BHYFSMOX.js"), meta: { section: { labelKey: "core.users.sections.signin", icon: "key2Line", groupKey: "core.users.section_groups.access" } } },
391
+ { name: "users.record.sessions", path: "sessions", component: () => import("./Sessions-Cl2DTM7s.js"), meta: { section: { labelKey: "core.users.sections.sessions", icon: "deviceLine", groupKey: "core.users.section_groups.access" } } },
392
+ { name: "users.record.signins", path: "signins", component: () => import("./SignIns-CJ09NqOn.js"), meta: { section: { labelKey: "core.users.sections.signins", icon: "timeFill", groupKey: "core.users.section_groups.activity" } } },
393
+ { name: "users.record.changes", path: "changes", component: () => import("./Changes-BT__0XX0.js"), meta: { section: { labelKey: "core.users.sections.changes", icon: "edit", groupKey: "core.users.section_groups.activity" } } },
394
+ { name: "users.record.activity", path: "activity", component: () => import("./Activity-CfG8_Pp3.js"), meta: { access: os, section: { labelKey: "core.users.sections.activity", icon: "listCheck", groupKey: "core.users.section_groups.activity" } } }
395
395
  ]
396
396
  }
397
397
  });
@@ -452,11 +452,11 @@ const Ms = /* @__PURE__ */ w({
452
452
  }, 8, ["permission"])) : I("", !0);
453
453
  }
454
454
  }), [rs, Bs] = A("vue-core.serviceaccounts"), Y = "iam.serviceaccount:view", js = "iam.serviceaccount:manage", Ws = "iam.serviceaccount:revoke", H = K({
455
- index: { name: "serviceaccounts.index", path: "/iam/service-accounts", component: () => import("./ServiceAccountsList-CoDKG_15.js"), meta: { access: Y, titleKey: "core.serviceaccounts.title_plural" } },
455
+ index: { name: "serviceaccounts.index", path: "/iam/service-accounts", component: () => import("./ServiceAccountsList-CVDIhuCh.js"), meta: { access: Y, titleKey: "core.serviceaccounts.title_plural" } },
456
456
  record: {
457
457
  name: "serviceaccounts.record",
458
458
  path: "/iam/service-accounts/:id",
459
- component: () => import("./ServiceAccountRecord-B_amE8fL.js"),
459
+ component: () => import("./ServiceAccountRecord-QsIfylwj.js"),
460
460
  meta: { access: Y, titleKey: "core.serviceaccounts.title_plural", remountOnParam: "id" }
461
461
  }
462
462
  });
@@ -2,20 +2,20 @@ import { route as v } from "./client/index.js";
2
2
  import { d as ve, p as me } from "./feature-DdUAfyi4.js";
3
3
  import { ref as C, readonly as $, defineComponent as q, openBlock as _, createBlock as U, unref as s, shallowRef as z, withCtx as A, createTextVNode as X, toDisplayString as L, mergeProps as Z, computed as N, createElementBlock as S, createElementVNode as P, createCommentVNode as R, createVNode as T, Fragment as G, renderList as be, normalizeClass as H, useTemplateRef as he, createSlots as ye } from "vue";
4
4
  import { d as ge } from "./context-Ch1r4fdN.js";
5
- import { u as ee } from "./platform-Dr4iY3b8.js";
5
+ import { u as ee } from "./platform-BZUWAXQV.js";
6
6
  import { d as te } from "./defineRoutes-BGAdiIrt.js";
7
7
  import { useI18n as I } from "vue-i18n";
8
8
  import { _ as _e } from "./AccountMenuItem.vue_vue_type_script_setup_true_lang-BIYgaihv.js";
9
- import { f as xe } from "./client-CZgikXPG.js";
9
+ import { f as xe } from "./client-Dr2vV3qH.js";
10
10
  import { u as we } from "./mediaQuery-CygcXmFW.js";
11
11
  import { _ as ke } from "./Sheet.vue_vue_type_script_setup_true_lang-sh9YD0Pm.js";
12
12
  import { _ as Se } from "./Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
13
13
  import { _ as J } from "./HeaderAction.vue_vue_type_script_setup_true_lang-Da59TLBh.js";
14
14
  import { useRouter as Te } from "vue-router";
15
- import { _ as K } from "./Button.vue_vue_type_script_setup_true_lang-DQq_0P0p.js";
16
- import { u as Ee } from "./format-D8X4zsx6.js";
15
+ import { _ as K } from "./Button.vue_vue_type_script_setup_true_lang-Dn-cJcj3.js";
16
+ import { u as Ee } from "./format-Dn-BOb-o.js";
17
17
  import { _ as Pe } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
18
- import { _ as Ce } from "./AsyncSection.vue_vue_type_script_setup_true_lang-GxAsImnO.js";
18
+ import { _ as Ce } from "./AsyncSection.vue_vue_type_script_setup_true_lang-BTIUz3cG.js";
19
19
  const E = {
20
20
  list: v("GET", "/v1/notifications"),
21
21
  unread: v("GET", "/v1/notifications/unread"),
@@ -135,9 +135,9 @@ function Me(n = ee().http, t = W()) {
135
135
  return { state: $(e), hash: $(i), busy: $(a), inspect: c, enable: u, disable: g };
136
136
  }
137
137
  const Ne = "events.deadletter:view", $t = "events.deadletter:retry", Y = te({
138
- index: { name: "events.deadletters", path: "/events/dead-letters", component: () => import("./DeadLetters-BslDh93e.js"), meta: { access: Ne, titleKey: "core.notifications.dead_letters.title" } }
138
+ index: { name: "events.deadletters", path: "/events/dead-letters", component: () => import("./DeadLetters-Btv3u3qh.js"), meta: { access: Ne, titleKey: "core.notifications.dead_letters.title" } }
139
139
  }), j = te({
140
- index: { name: "notifications.settings", path: "/profile/notifications", component: () => import("./SettingsPage-Cje1X0ix.js"), meta: { titleKey: "core.notifications.settings.title" } }
140
+ index: { name: "notifications.settings", path: "/profile/notifications", component: () => import("./SettingsPage-B2uWw27O.js"), meta: { titleKey: "core.notifications.settings.title" } }
141
141
  }), Oe = /* @__PURE__ */ q({
142
142
  __name: "SettingsMenuItem",
143
143
  setup(n) {
@@ -3,19 +3,19 @@ import { d as V, p as U } from "./feature-DdUAfyi4.js";
3
3
  import { defineComponent as A, computed as O, onMounted as L, watch as B, openBlock as S, createBlock as y, unref as e, withCtx as I, createElementVNode as X, createVNode as c, mergeProps as d, createCommentVNode as R, ref as F } from "vue";
4
4
  import { d as j } from "./context-Ch1r4fdN.js";
5
5
  import { useI18n as P } from "vue-i18n";
6
- import { _ as N } from "./FormGroup.vue_vue_type_script_setup_true_lang-BTADNpwB.js";
7
- import { _ as G } from "./SelectField.vue_vue_type_script_setup_true_lang-iJm8qmjT.js";
6
+ import { _ as N } from "./FormGroup.vue_vue_type_script_setup_true_lang-Bzm3yJy5.js";
7
+ import { _ as G } from "./SelectField.vue_vue_type_script_setup_true_lang-CYiarLAK.js";
8
8
  import { _ as g } from "./TextareaField.vue_vue_type_script_setup_true_lang-Dyh4Hhyl.js";
9
9
  import { _ as E } from "./TextField.vue_vue_type_script_setup_true_lang-7IAl4eAE.js";
10
- import { u as K, _ as z } from "./useCommand-BIZX1ReM.js";
10
+ import { u as K, _ as z } from "./useCommand-C3QTZIIw.js";
11
11
  import { t as H } from "./toast-CqSDTWRX.js";
12
- import { u as k } from "./platform-Dr4iY3b8.js";
12
+ import { u as k } from "./platform-BZUWAXQV.js";
13
13
  import { d as Q } from "./definition-C7QuyV3i.js";
14
14
  import { r as W, l as Y } from "./http-nz92KjdS.js";
15
15
  import { _ as J } from "./AccountMenuItem.vue_vue_type_script_setup_true_lang-BIYgaihv.js";
16
16
  import { d as Z } from "./defineRoutes-BGAdiIrt.js";
17
- import { d as ee } from "./application-D8Nm17zA.js";
18
- import { R as te } from "./client-CZgikXPG.js";
17
+ import { d as ee } from "./application-DtY0ef-w.js";
18
+ import { R as te } from "./client-Dr2vV3qH.js";
19
19
  import { i as ne } from "./error-Bb_dr_Ay.js";
20
20
  const v = {
21
21
  index: p("GET", "/v1/incidents", { permission: "incident:view" }),
@@ -263,11 +263,11 @@ const Qe = {
263
263
  }, null, 8, ["label"])) : R("", !0);
264
264
  }
265
265
  }), M = Z({
266
- index: { name: "incidents.index", path: "/incidents", component: () => import("./IncidentsList-C3yUnwwY.js"), meta: { access: q, titleKey: "core.incidents.title" } },
266
+ index: { name: "incidents.index", path: "/incidents", component: () => import("./IncidentsList-BHfJ1cbg.js"), meta: { access: q, titleKey: "core.incidents.title" } },
267
267
  details: {
268
268
  name: "incidents.details",
269
269
  path: "/incidents/:incidentID",
270
- component: () => import("./IncidentRecord-DQTnYQEe.js"),
270
+ component: () => import("./IncidentRecord-C4K8hDJ1.js"),
271
271
  // Previous / next record swaps the id in place.
272
272
  meta: { access: q, titleKey: "core.incidents.title", remountOnParam: "incidentID" }
273
273
  }
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The version of @wssto2/vue-core (kept equal to package.json by index.test.ts). */
2
- export declare const version = "0.8.0";
2
+ export declare const version = "0.9.1";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const o = "0.8.0";
1
+ const o = "0.9.1";
2
2
  export {
3
3
  o as version
4
4
  };
@@ -1,42 +1,42 @@
1
1
  import { _ as G } from "../DiscardChangesModal.vue_vue_type_script_setup_true_lang-DcihJfpk.js";
2
- import { _ as y } from "../Modal.vue_vue_type_script_setup_true_lang-4MsnTWyx.js";
3
- import { m as O } from "../Modal.vue_vue_type_script_setup_true_lang-4MsnTWyx.js";
2
+ import { _ as b } from "../Modal.vue_vue_type_script_setup_true_lang-BqO9X_-u.js";
3
+ import { m as O } from "../Modal.vue_vue_type_script_setup_true_lang-BqO9X_-u.js";
4
4
  import { _ as T } from "../Sheet.vue_vue_type_script_setup_true_lang-sh9YD0Pm.js";
5
- import { defineComponent as b, ref as k, computed as v, openBlock as t, createBlock as w, unref as i, withCtx as S, createElementVNode as r, createElementBlock as o, Fragment as c, renderList as u, toDisplayString as l, createCommentVNode as C } from "vue";
5
+ import { defineComponent as y, ref as k, computed as v, openBlock as t, createBlock as w, unref as i, withCtx as S, createElementVNode as r, createElementBlock as o, Fragment as c, renderList as u, toDisplayString as l, createCommentVNode as C } from "vue";
6
6
  import { useI18n as B } from "vue-i18n";
7
- import { a as K, u as M } from "../Button.vue_vue_type_script_setup_true_lang-DQq_0P0p.js";
8
- const $ = {
7
+ import { a as M, u as $ } from "../Button.vue_vue_type_script_setup_true_lang-Dn-cJcj3.js";
8
+ const j = {
9
9
  class: "flex flex-col gap-5",
10
10
  "data-test": "shortcut-help"
11
- }, j = { class: "mb-1 text-footnote font-semibold text-content-muted uppercase" }, D = { class: "divide-y divide-border-separator" }, E = { class: "text-body" }, H = { class: "flex shrink-0 items-center gap-1 text-footnote text-content-muted" }, N = { key: 0 }, V = { class: "text-footnote text-content-muted" }, R = /* @__PURE__ */ b({
11
+ }, D = { class: "mb-1 text-footnote font-semibold text-content-muted uppercase" }, E = { class: "divide-y divide-border-separator" }, H = { class: "text-body" }, K = { class: "flex shrink-0 items-center gap-1 text-footnote text-content-muted" }, N = { key: 0 }, V = { class: "text-footnote text-content-muted" }, R = /* @__PURE__ */ y({
12
12
  __name: "ShortcutHelp",
13
13
  setup(z) {
14
- const { t: s, te: f } = B(), p = k(null), h = K();
15
- M({ key: "?", shiftKey: !0, group: "general", label: () => s("core.shortcuts.show_help") }, () => p.value?.present());
14
+ const { t: s, te: f } = B(), p = k(null), h = M();
15
+ $({ key: "?", group: "general", label: () => s("core.shortcuts.show_help") }, () => p.value?.present());
16
16
  const x = v(() => {
17
17
  const a = /* @__PURE__ */ new Map();
18
18
  for (const e of h.value) a.set(e.group ?? "general", [...a.get(e.group ?? "general") ?? [], e]);
19
19
  return [...a].map(([e, n]) => ({ group: e, title: f(`core.shortcuts.groups.${e}`) ? s(`core.shortcuts.groups.${e}`) : e, rows: n }));
20
20
  });
21
- return (a, e) => (t(), w(y, {
21
+ return (a, e) => (t(), w(b, {
22
22
  ref_key: "modal",
23
23
  ref: p,
24
24
  title: i(s)("core.shortcuts.title"),
25
25
  size: "sm"
26
26
  }, {
27
27
  default: S(() => [
28
- r("div", $, [
28
+ r("div", j, [
29
29
  (t(!0), o(c, null, u(x.value, (n) => (t(), o("section", {
30
30
  key: n.group
31
31
  }, [
32
- r("h3", j, l(n.title), 1),
33
- r("dl", D, [
32
+ r("h3", D, l(n.title), 1),
33
+ r("dl", E, [
34
34
  (t(!0), o(c, null, u(n.rows, (d) => (t(), o("div", {
35
35
  key: d.label,
36
36
  class: "flex items-center justify-between gap-4 py-1.5"
37
37
  }, [
38
- r("dt", E, l(d.label), 1),
39
- r("dd", H, [
38
+ r("dt", H, l(d.label), 1),
39
+ r("dd", K, [
40
40
  (t(!0), o(c, null, u(d.keys, (m, g) => (t(), o(c, {
41
41
  key: m.join("+")
42
42
  }, [
@@ -59,7 +59,7 @@ const $ = {
59
59
  });
60
60
  export {
61
61
  G as DiscardChangesModal,
62
- y as Modal,
62
+ b as Modal,
63
63
  T as Sheet,
64
64
  R as ShortcutHelp,
65
65
  O as modalPlacementKey
@@ -1,6 +1,6 @@
1
1
  import { computed as k } from "vue";
2
2
  import { d as y } from "./context-Ch1r4fdN.js";
3
- import { h as N } from "./platform-Dr4iY3b8.js";
3
+ import { h as N } from "./platform-BZUWAXQV.js";
4
4
  function F(l, a = {}) {
5
5
  const i = /* @__PURE__ */ new Map(), o = [];
6
6
  for (const e of l) {
@@ -1,7 +1,7 @@
1
1
  import { computed as j, ref as z, shallowRef as I, watch as F, getCurrentScope as J, onScopeDispose as Q } from "vue";
2
2
  import { useRoute as O } from "vue-router";
3
3
  import { a as N } from "./error-Bb_dr_Ay.js";
4
- import { L as k, d as B, e as D, o as U, q as V } from "./state-ChVIjayU.js";
4
+ import { L as k, d as B, e as D, o as U, q as V } from "./state-BiYPPKoj.js";
5
5
  function K(l, t, n, g) {
6
6
  return typeof t == "string" ? t : { ...t, query: { ...t.query, [n]: D(l, g) } };
7
7
  }
@@ -1,4 +1,4 @@
1
- import { d as s, e as a, n as o, b as i, c as n, f as u } from "../index-BQg5X6iK.js";
1
+ import { d as s, e as a, n as o, b as i, c as n, f as u } from "../index-C1jSzT1V.js";
2
2
  export {
3
3
  s as deadLettersRoutes,
4
4
  a as eventsRoutes,
@@ -1,15 +1,15 @@
1
- import { _ as x } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-9Lt1XggN.js";
2
- import { a as W, b as X, c as Y, d as Z, p as ee, u as te, e as ae } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-9Lt1XggN.js";
1
+ import { _ as x } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-DC-zSRcl.js";
2
+ import { a as W, b as X, c as Y, d as Z, p as ee, u as te, e as ae } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-DC-zSRcl.js";
3
3
  import { _ as se } from "../BottomDock.vue_vue_type_script_setup_true_lang-CjN7xYEr.js";
4
4
  import { b as ne, i as re, u as ie } from "../bottomDock-BZEiOPYZ.js";
5
5
  import { defineComponent as v, openBlock as a, createBlock as b, withCtx as c, createElementVNode as s, normalizeStyle as k, createElementBlock as l, Fragment as y, renderList as B, normalizeClass as d, unref as h, createCommentVNode as p, toDisplayString as f, useModel as S, useId as C, useTemplateRef as P, computed as $, mergeProps as w, createSlots as T, renderSlot as m, mergeModels as D } from "vue";
6
6
  import { _ as L } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
7
- import { _ as ue } from "../RecordHeader.vue_vue_type_script_setup_true_lang-DPm9q1P_.js";
7
+ import { _ as ue } from "../RecordHeader.vue_vue_type_script_setup_true_lang-CU7fZpp2.js";
8
8
  import { c as pe, i as fe, p as me, a as be, u as ge, b as ve } from "../chrome-nUcmVu8G.js";
9
9
  import { s as z, u as I } from "../sectionIndex-BS0ic5W7.js";
10
10
  import { p as _e, a as xe } from "../sectionIndex-BS0ic5W7.js";
11
- import { _ as ye } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-ivdGWUeF.js";
12
- import { a as Se, _ as Ce } from "../SectionList.vue_vue_type_script_setup_true_lang-DAnZbfWA.js";
11
+ import { _ as ye } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-CWPD9zQJ.js";
12
+ import { a as Se, _ as Ce } from "../SectionList.vue_vue_type_script_setup_true_lang-DzoE_o8v.js";
13
13
  import { _ as A } from "../Panel.vue_vue_type_script_setup_true_lang-D_Wg42hu.js";
14
14
  const K = ["aria-label"], M = ["aria-label"], N = ["aria-selected", "tabindex", "onClick"], R = { class: "relative" }, E = {
15
15
  key: 2,
@@ -5,11 +5,11 @@ var S = (s) => {
5
5
  var v = (s, t, e) => t in s ? N(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
6
6
  var $ = (s, t, e) => v(s, typeof t != "symbol" ? t + "" : t, e), w = (s, t, e) => t.has(s) || S("Cannot " + e);
7
7
  var o = (s, t, e) => (w(s, t, "read from private field"), e ? e.call(s) : t.get(s)), l = (s, t, e) => t.has(s) ? S("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(s) : t.set(s, e), f = (s, t, e, r) => (w(s, t, "write to private field"), r ? r.call(s, e) : t.set(s, e), e), h = (s, t, e) => (w(s, t, "access private method"), e);
8
- import { u as E } from "../platform-Dr4iY3b8.js";
9
- import { b as F, c as G, a as K, d as U, h as _, e as z, i as D, p as H, f as Q, g as R } from "../platform-Dr4iY3b8.js";
8
+ import { u as E } from "../platform-BZUWAXQV.js";
9
+ import { b as F, c as G, a as K, d as U, h as _, e as z, i as D, p as H, f as Q, g as R } from "../platform-BZUWAXQV.js";
10
10
  import { M as W, d as X } from "../context-Ch1r4fdN.js";
11
11
  import { computed as O } from "vue";
12
- import { _ as Z } from "../AccessGate.vue_vue_type_script_setup_true_lang-CkomzGrt.js";
12
+ import { _ as Z } from "../AccessGate.vue_vue_type_script_setup_true_lang-B8gpkhbw.js";
13
13
  class m extends Error {
14
14
  constructor(e, r = [], n) {
15
15
  super(r.length > 0 ? `${e}: ${r.join("; ")}` : e);
@@ -1,4 +1,4 @@
1
- import { c as U } from "./client-CZgikXPG.js";
1
+ import { c as U } from "./client-Dr2vV3qH.js";
2
2
  import { d as _ } from "./context-Ch1r4fdN.js";
3
3
  import { i as A, A as z } from "./error-Bb_dr_Ay.js";
4
4
  import { shallowRef as C } from "vue";
@@ -0,0 +1,2 @@
1
+ export { captureInstallPrompt, currentPlatform, isStandalone, useInstallPrompt, type AppPlatform } from "./install";
2
+ export { registerServiceWorker, type ServiceWorkerOptions } from "./worker";
@@ -0,0 +1,51 @@
1
+ import { computed as o, shallowRef as l, ref as s } from "vue";
2
+ const n = l(null), r = s(!1);
3
+ let i = !1;
4
+ function p() {
5
+ i || typeof window > "u" || (i = !0, window.addEventListener("beforeinstallprompt", (e) => {
6
+ e.preventDefault(), n.value = e;
7
+ }), window.addEventListener("appinstalled", () => {
8
+ r.value = !0, n.value = null;
9
+ }));
10
+ }
11
+ function v() {
12
+ if (typeof navigator > "u") return "desktop";
13
+ const e = navigator.userAgent;
14
+ return /Android/i.test(e) ? "android" : /iPad|iPhone|iPod/.test(e) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1 ? "ios" : "desktop";
15
+ }
16
+ function d() {
17
+ return typeof window > "u" ? !1 : window.matchMedia?.("(display-mode: standalone)").matches === !0 || navigator.standalone === !0;
18
+ }
19
+ function m() {
20
+ return {
21
+ canInstall: o(() => n.value != null),
22
+ installed: o(() => r.value || d()),
23
+ /** Opens the browser's install dialog; true when the user accepted. */
24
+ async install() {
25
+ const e = n.value;
26
+ if (!e) return !1;
27
+ await e.prompt();
28
+ const { outcome: t } = await e.userChoice;
29
+ return n.value = null, t === "accepted" && (r.value = !0), t === "accepted";
30
+ }
31
+ };
32
+ }
33
+ function c() {
34
+ const e = document.querySelector('script[type="module"][src*="/assets/"]');
35
+ return e ? new URL(e.src, location.href).pathname : null;
36
+ }
37
+ function w(e = {}) {
38
+ if (e.enabled === !1 || typeof navigator > "u" || !("serviceWorker" in navigator)) return;
39
+ const t = e.url ?? "/sw.js", u = encodeURIComponent(c() ?? "unknown"), a = () => {
40
+ navigator.serviceWorker.register(`${t}${t.includes("?") ? "&" : "?"}build=${u}`).catch(() => {
41
+ });
42
+ };
43
+ document.readyState === "complete" ? a() : window.addEventListener("load", a, { once: !0 });
44
+ }
45
+ export {
46
+ p as captureInstallPrompt,
47
+ v as currentPlatform,
48
+ d as isStandalone,
49
+ w as registerServiceWorker,
50
+ m as useInstallPrompt
51
+ };
@@ -0,0 +1,12 @@
1
+ /** Starts listening for the install prompt. Safe to call twice; does nothing without a `window`. */
2
+ export declare function captureInstallPrompt(): void;
3
+ export type AppPlatform = "ios" | "android" | "desktop";
4
+ export declare function currentPlatform(): AppPlatform;
5
+ /** Opened from the home screen or as an installed app, not in a browser tab. */
6
+ export declare function isStandalone(): boolean;
7
+ export declare function useInstallPrompt(): {
8
+ canInstall: import("vue").ComputedRef<boolean>;
9
+ installed: import("vue").ComputedRef<boolean>;
10
+ /** Opens the browser's install dialog; true when the user accepted. */
11
+ install(): Promise<boolean>;
12
+ };
@@ -0,0 +1,13 @@
1
+ export interface ServiceWorkerOptions {
2
+ /** Where the application serves its worker. Default `/sw.js`. */
3
+ url?: string;
4
+ /** Default true. Pass `import.meta.env.PROD` (and `false` inside an embedding page's iframe): a worker in development caches the dev server's modules. */
5
+ enabled?: boolean;
6
+ }
7
+ /**
8
+ * Registers the application's service worker. The build entry goes into the worker's URL (`?build=`),
9
+ * so each deploy installs a fresh worker, which can clear the previous build's cache. Registered once
10
+ * the page has loaded, so it never competes with the first render. A failure is silent: the application
11
+ * works the same without a worker.
12
+ */
13
+ export declare function registerServiceWorker(options?: ServiceWorkerOptions): void;
@@ -1,5 +1,5 @@
1
1
  import { p as o, u as r, a, b as u } from "../routeResource-CcYA75T2.js";
2
- import { _ as R, a as c } from "../ResourcePage.vue_vue_type_script_setup_true_lang-Cm3tx76N.js";
2
+ import { _ as R, a as c } from "../ResourcePage.vue_vue_type_script_setup_true_lang-y3gyR5A-.js";
3
3
  export {
4
4
  R as RecordPager,
5
5
  c as ResourcePage,
@@ -1,9 +1,9 @@
1
1
  import { _ as a, c as o, a as r, i as t } from "../NoAccess.vue_vue_type_script_setup_true_lang-BHzZtZ50.js";
2
2
  import { d as c } from "../defineRoutes-BGAdiIrt.js";
3
3
  import { A as u, f as p, i as f, r as A, u as m } from "../access-DmAceEo5.js";
4
- import { i as l, r as x } from "../guards-BFCulig0.js";
5
- import { u as y } from "../sections-BXg4_ZhO.js";
6
- import { b as v, c as N, n as H, u as b } from "../navigation-BSC9X7FM.js";
4
+ import { i as l, r as x } from "../guards-Cz7TOQD8.js";
5
+ import { u as y } from "../sections-CmqFs-U-.js";
6
+ import { b as v, c as N, n as H, u as b } from "../navigation-CWj6F_cV.js";
7
7
  export {
8
8
  u as AppRouterView,
9
9
  a as NoAccess,
@@ -6,9 +6,9 @@ import { _ as J } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
6
6
  import { _ as Ne } from "./Menu.vue_vue_type_script_setup_true_lang-ldLdJ5Q-.js";
7
7
  import { _ as ze } from "./Tooltip.vue_vue_type_script_setup_true_lang-mErNPt8e.js";
8
8
  import { _ as he } from "./EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js";
9
- import { u as Fe } from "./format-D8X4zsx6.js";
9
+ import { u as Fe } from "./format-Dn-BOb-o.js";
10
10
  import { _ as Ve } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
11
- import { _ as Oe } from "./Timestamp.vue_vue_type_script_setup_true_lang-u53rHMFG.js";
11
+ import { _ as Oe } from "./Timestamp.vue_vue_type_script_setup_true_lang-CAz2W69d.js";
12
12
  import { a as je } from "./mediaQuery-CygcXmFW.js";
13
13
  function Ue(y, n) {
14
14
  const d = (n ?? "").split(/\s+/).filter((v) => v !== "");
@@ -1,7 +1,7 @@
1
1
  import { computed as n, watch as h } from "vue";
2
2
  import { useI18n as b } from "vue-i18n";
3
3
  import { useRoute as g, useRouter as p } from "vue-router";
4
- import { u as y } from "./platform-Dr4iY3b8.js";
4
+ import { u as y } from "./platform-BZUWAXQV.js";
5
5
  import { i as w } from "./access-DmAceEo5.js";
6
6
  function j() {
7
7
  const t = g(), u = p(), { access: c } = y(), { t: r } = b(), i = n(() => {
@@ -3,12 +3,12 @@ import { useI18n as B } from "vue-i18n";
3
3
  import { _ as we } from "../Avatar.vue_vue_type_script_setup_true_lang-BPj_fkJR.js";
4
4
  import { _ as P, u as Xe, c as Ue } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
5
5
  import { _ as We } from "../Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
6
- import { u as xe, S as X } from "../contributions-BQ9dZoRw.js";
6
+ import { u as xe, S as X } from "../contributions-DGsAIWd8.js";
7
7
  import { u as Ye } from "../environment-Dva-SG8D.js";
8
8
  import { _ as He } from "../CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js";
9
9
  import { l as pe } from "../languageName-CItV_SOv.js";
10
10
  import { t as _e } from "../toast-CqSDTWRX.js";
11
- import { u as J, h as ue } from "../platform-Dr4iY3b8.js";
11
+ import { u as J, h as ue } from "../platform-BZUWAXQV.js";
12
12
  import { a as qe, _ as ve, h as ke } from "../AccountMenuItem.vue_vue_type_script_setup_true_lang-BIYgaihv.js";
13
13
  import { _ as Ge } from "../Sheet.vue_vue_type_script_setup_true_lang-sh9YD0Pm.js";
14
14
  import { _ as Qe } from "../LeaveGuardRoot.vue_vue_type_script_setup_true_lang-ChIsmnts.js";
@@ -17,7 +17,7 @@ import { _ as Ze } from "../BottomDock.vue_vue_type_script_setup_true_lang-CjN7x
17
17
  import { b as $e } from "../chrome-nUcmVu8G.js";
18
18
  import { p as Se, A as et } from "../access-DmAceEo5.js";
19
19
  import { RouterLink as Le, useRoute as tt, useRouter as de } from "vue-router";
20
- import { u as nt } from "../navigation-BSC9X7FM.js";
20
+ import { u as nt } from "../navigation-CWj6F_cV.js";
21
21
  import { u as at } from "../leaveGuard-Cc8yeLxM.js";
22
22
  import { u as ot, S as st } from "../dialogStack-DZZg55w0.js";
23
23
  import { a as H } from "../mediaQuery-CygcXmFW.js";