@wssto2/vue-core 0.9.4 → 0.10.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 (160) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/ActionRow.vue_vue_type_script_setup_true_lang-IpcP3Bjc.js +87 -0
  3. package/dist/Activity-CeAG0ZtJ.js +169 -0
  4. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-DdJOodn8.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-D5i77H6S.js} +147 -159
  5. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-BdeOKqz_.js → AsyncSection.vue_vue_type_script_setup_true_lang-DGzQ-Snp.js} +1 -1
  6. package/dist/BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js +17 -0
  7. package/dist/Button.vue_vue_type_script_setup_true_lang-C74hcb0N.js +123 -0
  8. package/dist/Changes-B9-zpDxG.js +69 -0
  9. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-DHcekGNn.js → CollectionPage.vue_vue_type_script_setup_true_lang-Cn0YOWJF.js} +19 -18
  10. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-8kBsNRuq.js → DataTable.vue_vue_type_script_setup_true_lang-BQRG8bpH.js} +1 -1
  11. package/dist/{DateField.vue_vue_type_script_setup_true_lang-BhKdCVFn.js → DateField.vue_vue_type_script_setup_true_lang-CeNwBbJT.js} +1 -1
  12. package/dist/{DeadLetters-Bb5pPlOY.js → DeadLetters-BP03yC4R.js} +5 -6
  13. package/dist/DrawnCheck.vue_vue_type_script_setup_true_lang-9DzDJlIA.js +38 -0
  14. package/dist/FormGroup.vue_vue_type_script_setup_true_lang-D6jYfNjW.js +427 -0
  15. package/dist/{FormView.vue_vue_type_script_setup_true_lang-aaNnMIOi.js → FormView.vue_vue_type_script_setup_true_lang-DvbPEiNQ.js} +2 -2
  16. package/dist/{General-BAG7S6wV.js → General-BDmCJr3H.js} +35 -38
  17. package/dist/{IncidentRecord-D8aOpNHo.js → IncidentRecord-DEhl6AyA.js} +14 -15
  18. package/dist/{IncidentsList-C0cFl0Db.js → IncidentsList-COgRPdk3.js} +3 -3
  19. package/dist/{Modal.vue_vue_type_script_setup_true_lang-BlHhdmMy.js → Modal.vue_vue_type_script_setup_true_lang-DDS0iEnn.js} +9 -8
  20. package/dist/{NewRolePage-C6Iu-EQJ.js → NewRolePage-DhGFwvk3.js} +4 -4
  21. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-TGGAq8J-.js → NumberField.vue_vue_type_script_setup_true_lang-B3UrXNqH.js} +1 -1
  22. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-qz1tmYpF.js → PersonAccess.vue_vue_type_script_setup_true_lang-DbGZSNQc.js} +56 -56
  23. package/dist/ProfilePage-BQCK2w8R.js +684 -0
  24. package/dist/ProgressTrack.vue_vue_type_script_setup_true_lang-DrOm8k--.js +30 -0
  25. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-B9mN7UxZ.js → RecordHeader.vue_vue_type_script_setup_true_lang-DqGc3Jyo.js} +1 -1
  26. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-Cw8mGf_B.js → ResourcePage.vue_vue_type_script_setup_true_lang-DljhsTU4.js} +3 -3
  27. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-CJPvOVDV.js → RoleEditor.vue_vue_type_script_setup_true_lang-C0FIotFA.js} +11 -12
  28. package/dist/{RolePage-Dj_ocMnM.js → RolePage-DaNv049g.js} +10 -10
  29. package/dist/{RolesPage-PXrs4O-1.js → RolesPage-6hlzJes_.js} +6 -6
  30. package/dist/SearchInput.vue_vue_type_script_setup_true_lang-w4eAqyZ9.js +32 -0
  31. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-CtdF1zuv.js → SectionList.vue_vue_type_script_setup_true_lang-DR0_NsqC.js} +1 -1
  32. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-B5ove3rM.js → SectionNavigator.vue_vue_type_script_setup_true_lang-Dh3sXUt_.js} +2 -2
  33. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-ChfDFAA2.js → SegmentedField.vue_vue_type_script_setup_true_lang-zv_AxpBn.js} +1 -1
  34. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-BP8nAQwo.js → SelectField.vue_vue_type_script_setup_true_lang-BZwdANL3.js} +3 -3
  35. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-aWkKwxNe.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-C0OIBrSp.js} +20 -20
  36. package/dist/{ServiceAccountRecord-bxX9yQkC.js → ServiceAccountRecord-gtlhYaAz.js} +37 -37
  37. package/dist/{ServiceAccountsList-BXE6htxk.js → ServiceAccountsList-BM7GGcvw.js} +33 -33
  38. package/dist/{Sessions--Gvc0kxw.js → Sessions-BCDJYuV2.js} +23 -24
  39. package/dist/{SettingsPage-DzDC7gD-.js → SettingsPage-DUhMsYBf.js} +27 -30
  40. package/dist/{SignIn-CTI_699e.js → SignIn-4D7WohI8.js} +9 -10
  41. package/dist/{SignInPage-HKC1bm2E.js → SignInPage-B6B-34GG.js} +4 -4
  42. package/dist/SignIns-CFoe4hpX.js +64 -0
  43. package/dist/StatusLine.vue_vue_type_script_setup_true_lang-DsdQmLq6.js +56 -0
  44. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-BMA2YXTZ.js → SwitchField.vue_vue_type_script_setup_true_lang-Ds4q0bbl.js} +1 -1
  45. package/dist/{TextField.vue_vue_type_script_setup_true_lang-BFVsqcBX.js → TextField.vue_vue_type_script_setup_true_lang-CWIeeZRE.js} +2 -2
  46. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-Dyh4Hhyl.js → TextareaField.vue_vue_type_script_setup_true_lang-D2j4s96s.js} +1 -1
  47. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-gGFfQLuK.js → TimeField.vue_vue_type_script_setup_true_lang-D-Em4glH.js} +1 -1
  48. package/dist/UserRecord-Cd1TCpJZ.js +202 -0
  49. package/dist/UsersList-GJU5-CTG.js +74 -0
  50. package/dist/access/index.js +4 -4
  51. package/dist/app/index.js +1 -1
  52. package/dist/{application-BmXW6iW_.js → application-CuzT-0vW.js} +1 -1
  53. package/dist/button/index.js +6 -5
  54. package/dist/collection/PickerModal.vue.d.ts +26 -0
  55. package/dist/collection/definition.d.ts +6 -6
  56. package/dist/collection/http.d.ts +6 -6
  57. package/dist/collection/index.d.ts +5 -1
  58. package/dist/collection/index.js +144 -85
  59. package/dist/collection/picker.d.ts +39 -0
  60. package/dist/collection/types.d.ts +9 -4
  61. package/dist/collection/useCollection.d.ts +5 -5
  62. package/dist/content/ActivityStream.vue.d.ts +62 -0
  63. package/dist/content/CommentThread.vue.d.ts +52 -0
  64. package/dist/content/Composer.vue.d.ts +36 -0
  65. package/dist/content/index.d.ts +3 -0
  66. package/dist/content/index.js +321 -56
  67. package/dist/controls/index.js +28 -54
  68. package/dist/form/index.js +132 -134
  69. package/dist/format/index.d.ts +1 -0
  70. package/dist/format/index.js +10 -6
  71. package/dist/format/slug.d.ts +8 -0
  72. package/dist/highlight-DnYhLXnu.js +9 -0
  73. package/dist/http-Dm0uXY9O.js +95 -0
  74. package/dist/i18n/index.d.ts +14 -0
  75. package/dist/i18n/index.js +87 -63
  76. package/dist/i18n/plural.d.ts +23 -0
  77. package/dist/identity/embed.d.ts +39 -0
  78. package/dist/identity/index.d.ts +20 -0
  79. package/dist/identity/index.js +40 -21
  80. package/dist/identity/session.d.ts +9 -1
  81. package/dist/identity/shared/ChangeFeed.vue.d.ts +6 -3
  82. package/dist/identity/users/context.d.ts +8 -0
  83. package/dist/identity/users/dialogs.d.ts +10 -0
  84. package/dist/identity/users/ext.d.ts +8 -0
  85. package/dist/identity/users/feature.d.ts +10 -0
  86. package/dist/identity/users/list.d.ts +1 -1
  87. package/dist/identity/users/personSections.d.ts +1 -1
  88. package/dist/identity/users/replace.d.ts +45 -0
  89. package/dist/identity/users/words.d.ts +28 -0
  90. package/dist/incidents/api.d.ts +1 -1
  91. package/dist/incidents/index.js +1 -1
  92. package/dist/{index-Dz0LkLM8.js → index-CTkG-acm.js} +4 -4
  93. package/dist/{index-Dm-sdJJr.js → index-DUs7WSz-.js} +31 -32
  94. package/dist/index-pJ_eRg80.js +1257 -0
  95. package/dist/index.d.ts +1 -1
  96. package/dist/index.js +1 -1
  97. package/dist/modal/index.js +3 -3
  98. package/dist/modules/identity/entities.d.ts +7 -0
  99. package/dist/modules/identity/routes.d.ts +8 -4
  100. package/dist/modules/identity/schemas.d.ts +16 -0
  101. package/dist/{neighbors-DVfU9T0o.js → neighbors-OyvGi233.js} +2 -2
  102. package/dist/notifications/deadletters/list.d.ts +1 -1
  103. package/dist/notifications/index.js +1 -1
  104. package/dist/{options-QuOkMKVZ.js → options-B48UiYsG.js} +2 -2
  105. package/dist/page/index.js +11 -11
  106. package/dist/phone/index.js +1 -1
  107. package/dist/pwa/AndroidInstallBanner.vue.d.ts +18 -0
  108. package/dist/pwa/InstallQrSheet.vue.d.ts +21 -0
  109. package/dist/pwa/IosInstallGuide.vue.d.ts +19 -0
  110. package/dist/pwa/QrCode.vue.d.ts +16 -0
  111. package/dist/pwa/index.d.ts +4 -0
  112. package/dist/pwa/index.js +244 -24
  113. package/dist/resource/index.js +1 -1
  114. package/dist/{rowLayout-CT8vWYgI.js → rowLayout-Il4psyXN.js} +183 -188
  115. package/dist/shell/DarkModeRow.vue.d.ts +15 -0
  116. package/dist/shell/OfflineNotice.vue.d.ts +2 -0
  117. package/dist/shell/QuickSearchButton.vue.d.ts +2 -0
  118. package/dist/shell/QuickSearchPalette.vue.d.ts +12 -0
  119. package/dist/shell/darkMode.d.ts +26 -0
  120. package/dist/shell/index.d.ts +10 -0
  121. package/dist/shell/index.js +963 -580
  122. package/dist/shell/offlineNotice.d.ts +3 -0
  123. package/dist/shell/quickSearch.d.ts +14 -0
  124. package/dist/shell/quickSearchControl.d.ts +66 -0
  125. package/dist/shortcut-DUR6yPWA.js +93 -0
  126. package/dist/state/BackgroundTaskCapsule.vue.d.ts +18 -0
  127. package/dist/state/backgroundTasks.d.ts +58 -0
  128. package/dist/state/index.d.ts +4 -0
  129. package/dist/state/index.js +194 -80
  130. package/dist/state/useCountUp.d.ts +9 -0
  131. package/dist/styles.css +1 -1
  132. package/dist/{suggestions-BVQhoXzS.js → suggestions-q_v3M7G6.js} +1 -1
  133. package/dist/testing/collection.d.ts +1 -1
  134. package/dist/{useCommand-Dc8Lgs9h.js → useCommand-Ch_nx1AQ.js} +4 -4
  135. package/dist/{useGroupSheet-DQ6cVG-z.js → useGroupSheet-CPjHydQV.js} +14 -15
  136. package/dist/{useRecordDialog-BTsbHY38.js → useRecordDialog-DdkauXnU.js} +1 -1
  137. package/dist/{useResourceForm-DJ4Q75pq.js → useResourceForm-Dl6YFYyz.js} +1 -1
  138. package/package.json +3 -2
  139. package/dist/ActionRow.vue_vue_type_script_setup_true_lang-Cg1lhpcA.js +0 -45
  140. package/dist/Activity-29hsZ28j.js +0 -156
  141. package/dist/Button.vue_vue_type_script_setup_true_lang-Dp7OB-eF.js +0 -192
  142. package/dist/Changes-Dxjdkd_5.js +0 -129
  143. package/dist/FormErrors.vue_vue_type_script_setup_true_lang-CIggKPtq.js +0 -295
  144. package/dist/FormGroup.vue_vue_type_script_setup_true_lang-B37dixvJ.js +0 -137
  145. package/dist/PageBar.vue_vue_type_script_setup_true_lang-qI94fjJv.js +0 -47
  146. package/dist/ProfilePage-BnohZIEg.js +0 -764
  147. package/dist/ProgressTrack.vue_vue_type_script_setup_true_lang-B6Prw9hi.js +0 -64
  148. package/dist/SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js +0 -23
  149. package/dist/SessionList.vue_vue_type_script_setup_true_lang-Cnyt5V8T.js +0 -133
  150. package/dist/SignIns-BcqBgWgN.js +0 -121
  151. package/dist/UserRecord-CtUPpbCt.js +0 -267
  152. package/dist/UsersList-BMkIgIg8.js +0 -155
  153. package/dist/definition-C7QuyV3i.js +0 -54
  154. package/dist/fieldMessages-B6GHgi40.js +0 -25
  155. package/dist/http-nz92KjdS.js +0 -42
  156. package/dist/index-CdtofdcJ.js +0 -501
  157. package/dist/languages-BShG9LpE.js +0 -10
  158. package/dist/signInEvents-DWShrJox.js +0 -30
  159. package/dist/status-BRA14qwX.js +0 -34
  160. package/dist/useWaitStatus-fsacMl4W.js +0 -24
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.9.4";
2
+ export declare const version = "0.10.0";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const o = "0.9.4";
1
+ const o = "0.10.0";
2
2
  export {
3
3
  o as version
4
4
  };
@@ -1,10 +1,10 @@
1
1
  import { _ as G } from "../DiscardChangesModal.vue_vue_type_script_setup_true_lang-B3WbLyNb.js";
2
- import { _ as b } from "../Modal.vue_vue_type_script_setup_true_lang-BlHhdmMy.js";
3
- import { m as O } from "../Modal.vue_vue_type_script_setup_true_lang-BlHhdmMy.js";
2
+ import { _ as b } from "../Modal.vue_vue_type_script_setup_true_lang-DDS0iEnn.js";
3
+ import { m as O } from "../Modal.vue_vue_type_script_setup_true_lang-DDS0iEnn.js";
4
4
  import { _ as T } from "../Sheet.vue_vue_type_script_setup_true_lang-B91aRD_y.js";
5
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 M, u as $ } from "../Button.vue_vue_type_script_setup_true_lang-Dp7OB-eF.js";
7
+ import { a as M, u as $ } from "../shortcut-DUR6yPWA.js";
8
8
  const j = {
9
9
  class: "flex flex-col gap-5",
10
10
  "data-test": "shortcut-help"
@@ -17,6 +17,7 @@ export type ChangeRow = {
17
17
  after: Record<string, string>;
18
18
  actor: PersonRef | null;
19
19
  created_at: string;
20
+ ext?: unknown;
20
21
  };
21
22
  export type ChangeView = "all" | "access" | "details";
22
23
  export type ClauseInfo = {
@@ -26,10 +27,14 @@ export type ClauseInfo = {
26
27
  role?: string;
27
28
  binding_id?: number;
28
29
  };
30
+ export type DeactivateResult = {
31
+ ext?: unknown;
32
+ };
29
33
  export type Impersonator = {
30
34
  id: number;
31
35
  name: string;
32
36
  };
37
+ export type LastSignInFilter = "never" | "idle";
33
38
  export type MyAccess = {
34
39
  subject: Subject;
35
40
  root: boolean;
@@ -129,6 +134,7 @@ export type UserDetail = {
129
134
  last_sign_in: string | null;
130
135
  locked_until: string | null;
131
136
  created_at: string;
137
+ ext?: unknown;
132
138
  };
133
139
  export type UserRow = {
134
140
  id: number;
@@ -142,6 +148,7 @@ export type UserRow = {
142
148
  last_sign_in: string | null;
143
149
  locked_until: string | null;
144
150
  created_at: string;
151
+ ext?: unknown;
145
152
  };
146
153
  export type UserView = "active" | "locked" | "inactive" | "all";
147
154
  export type ViewCount = {
@@ -1,5 +1,5 @@
1
- import { type ListResult } from "../../client";
2
- import type { ActivityRow, ChangeRow, PendingEmail, ProfileResponse, SessionList, SessionResponse, SignInRow, UnlockResult, UserDetail, UserRow } from "./entities";
1
+ import { type ListResult, type QueryValue } from "../../client";
2
+ import type { ActivityRow, ChangeRow, DeactivateResult, PendingEmail, ProfileResponse, SessionList, SessionResponse, SignInRow, UnlockResult, UserDetail, UserRow } from "./entities";
3
3
  export declare const identityRoutes: {
4
4
  readonly login: import("../../client").ApiRoute<{
5
5
  login: string;
@@ -24,7 +24,8 @@ export declare const identityRoutes: {
24
24
  order_dir?: string | undefined;
25
25
  page?: number | undefined;
26
26
  per_page?: number | undefined;
27
- }, ListResult<UserRow>, unknown>;
27
+ last_sign_in?: "idle" | "never" | undefined;
28
+ } & Record<string, QueryValue>, ListResult<UserRow>, unknown>;
28
29
  readonly usersShow: import("../../client").ApiRoute<{
29
30
  id: number;
30
31
  }, UserDetail, unknown>;
@@ -35,6 +36,7 @@ export declare const identityRoutes: {
35
36
  locale: string;
36
37
  password: string;
37
38
  phone?: string | undefined;
39
+ ext?: unknown;
38
40
  }, UserDetail, unknown>;
39
41
  readonly usersUpdate: import("../../client").ApiRoute<{
40
42
  id: number;
@@ -43,6 +45,7 @@ export declare const identityRoutes: {
43
45
  email: string;
44
46
  locale: string;
45
47
  phone?: string | undefined;
48
+ ext?: unknown;
46
49
  }, UserDetail, unknown>;
47
50
  readonly usersSetPassword: import("../../client").ApiRoute<{
48
51
  id: number;
@@ -50,7 +53,8 @@ export declare const identityRoutes: {
50
53
  }, void, unknown>;
51
54
  readonly usersDeactivate: import("../../client").ApiRoute<{
52
55
  id: number;
53
- }, void, unknown>;
56
+ details?: unknown;
57
+ }, DeactivateResult, unknown>;
54
58
  readonly usersActivate: import("../../client").ApiRoute<{
55
59
  id: number;
56
60
  }, void, unknown>;
@@ -46,8 +46,19 @@ export declare const CreateUserInputSchema: z.ZodObject<{
46
46
  phone: z.ZodOptional<z.ZodString>;
47
47
  locale: z.ZodString;
48
48
  password: z.ZodString;
49
+ ext: z.ZodOptional<z.ZodUnknown>;
49
50
  }, z.core.$strip>;
50
51
  export type CreateUserInput = z.infer<typeof CreateUserInputSchema>;
52
+ export declare const DeactivateUserInputSchema: z.ZodObject<{
53
+ id: z.ZodNumber;
54
+ details: z.ZodOptional<z.ZodUnknown>;
55
+ }, z.core.$strip>;
56
+ export type DeactivateUserInput = z.infer<typeof DeactivateUserInputSchema>;
57
+ export declare const LastSignInFilterSchema: z.ZodEnum<{
58
+ idle: "idle";
59
+ never: "never";
60
+ }>;
61
+ export type LastSignInFilter = z.infer<typeof LastSignInFilterSchema>;
51
62
  export declare const UserViewSchema: z.ZodEnum<{
52
63
  inactive: "inactive";
53
64
  all: "all";
@@ -67,6 +78,10 @@ export declare const ListUsersInputSchema: z.ZodObject<{
67
78
  order_dir: z.ZodOptional<z.ZodString>;
68
79
  page: z.ZodOptional<z.ZodNumber>;
69
80
  per_page: z.ZodOptional<z.ZodNumber>;
81
+ last_sign_in: z.ZodOptional<z.ZodEnum<{
82
+ idle: "idle";
83
+ never: "never";
84
+ }>>;
70
85
  }, z.core.$strip>;
71
86
  export type ListUsersInput = z.infer<typeof ListUsersInputSchema>;
72
87
  export declare const LoginAsInputSchema: z.ZodObject<{
@@ -132,6 +147,7 @@ export declare const UpdateUserInputSchema: z.ZodObject<{
132
147
  email: z.ZodString;
133
148
  phone: z.ZodOptional<z.ZodString>;
134
149
  locale: z.ZodString;
150
+ ext: z.ZodOptional<z.ZodUnknown>;
135
151
  }, z.core.$strip>;
136
152
  export type UpdateUserInput = z.infer<typeof UpdateUserInputSchema>;
137
153
  export declare const UserInputSchema: z.ZodObject<{
@@ -100,6 +100,6 @@ function re(l, t) {
100
100
  } };
101
101
  }
102
102
  export {
103
- re as a,
104
- le as u
103
+ le as a,
104
+ re as u
105
105
  };
@@ -1,3 +1,3 @@
1
1
  import type { HttpClient } from "../../client";
2
2
  /** The dead letters of every consumer of the application's event queue, as go-core's `GET /v1/events/dead-letters` pages them (newest first; only the consumer narrows it). */
3
- export declare function deadLetterList(http: HttpClient): import("../../collection").CollectionDefinition<import("..").DeadLetterRow, never, "consumer", never>;
3
+ export declare function deadLetterList(http: HttpClient): import("../../collection").CollectionDefinition<import("..").DeadLetterRow, never, "consumer", never, Readonly<Record<string, unknown>>>;
@@ -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-Dz0LkLM8.js";
1
+ import { d as s, e as a, n as o, b as i, c as n, f as u } from "../index-CTkG-acm.js";
2
2
  export {
3
3
  s as deadLettersRoutes,
4
4
  a as eventsRoutes,
@@ -359,8 +359,8 @@ export {
359
359
  je as e,
360
360
  He as f,
361
361
  fe as g,
362
- Z as h,
363
- Fe as i,
362
+ Fe as h,
363
+ Z as i,
364
364
  ee as j,
365
365
  oe as k,
366
366
  Oe as m,
@@ -1,15 +1,15 @@
1
- import { _ as x } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-DdJOodn8.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-DdJOodn8.js";
1
+ import { _ as W, a as X, b as Y, c as Z, p as ee, u as te, d as ae } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-D5i77H6S.js";
3
2
  import { _ as se } from "../BottomDock.vue_vue_type_script_setup_true_lang-CjN7xYEr.js";
4
3
  import { b as ne, i as re, u as ie } from "../bottomDock-BZEiOPYZ.js";
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";
4
+ import { _ as x } from "../BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
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 _, 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-B9mN7UxZ.js";
7
+ import { _ as ue } from "../RecordHeader.vue_vue_type_script_setup_true_lang-DqGc3Jyo.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
- import { p as _e, a as xe } from "../sectionIndex-BS0ic5W7.js";
11
- import { _ as ye } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-B5ove3rM.js";
12
- import { a as Se, _ as Ce } from "../SectionList.vue_vue_type_script_setup_true_lang-CtdF1zuv.js";
10
+ import { p as he, a as xe } from "../sectionIndex-BS0ic5W7.js";
11
+ import { _ as ye } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-Dh3sXUt_.js";
12
+ import { a as Se, _ as Ce } from "../SectionList.vue_vue_type_script_setup_true_lang-DR0_NsqC.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,
@@ -51,7 +51,7 @@ const K = ["aria-label"], M = ["aria-label"], N = ["aria-selected", "tabindex",
51
51
  onClick: (u) => r("select", e.value)
52
52
  }, [
53
53
  s("span", R, [
54
- e.icon ? (a(), b(h(L), {
54
+ e.icon ? (a(), b(_(L), {
55
55
  key: 0,
56
56
  name: e.icon,
57
57
  size: 22
@@ -96,8 +96,8 @@ const K = ["aria-label"], M = ["aria-label"], N = ["aria-selected", "tabindex",
96
96
  ref_key: "panel",
97
97
  ref: i,
98
98
  collapsed: o.value,
99
- "onUpdate:collapsed": u[0] || (u[0] = (_) => o.value = _)
100
- }, { id: h(r), tabindex: -1 }, {
99
+ "onUpdate:collapsed": u[0] || (u[0] = (h) => o.value = h)
100
+ }, { id: _(r), tabindex: -1 }, {
101
101
  title: t.title,
102
102
  icon: t.icon,
103
103
  number: t.number,
@@ -149,7 +149,7 @@ export {
149
149
  fe as installPageChrome,
150
150
  me as pageChromeKey,
151
151
  ee as pageSectionBackKey,
152
- _e as provideSectionIndex,
152
+ he as provideSectionIndex,
153
153
  z as sectionId,
154
154
  ie as useBottomDockTarget,
155
155
  te as useLargeTitle,
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as fe, useModel as me, useTemplateRef as F, ref as E, computed as g, watch as ne, nextTick as A, openBlock as w, createElementBlock as $, createElementVNode as f, normalizeClass as P, unref as s, createVNode as M, toDisplayString as T, normalizeStyle as xe, Fragment as ee, renderList as le, createCommentVNode as J, withModifiers as we, withDirectives as _e, vModelText as ke, mergeModels as ae, inject as Ce, shallowRef as $e, onBeforeUnmount as De, createBlock as Me, mergeProps as Te, createSlots as Se, withCtx as ie, createTextVNode as Ne, renderSlot as Ie, mergeDefaults as Pe } from "vue";
2
2
  import { useI18n as pe } from "vue-i18n";
3
3
  import { b as Ve } from "../controlSurface-t7OEFESJ.js";
4
- import { c as se, a as Oe, e as Re, _ as Be, f as Ee, b as ze } from "../options-QuOkMKVZ.js";
4
+ import { c as se, a as Oe, e as Re, _ as Be, f as Ee, b as ze } from "../options-B48UiYsG.js";
5
5
  import { _ as q } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
6
6
  import { _ as ue } from "../CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js";
7
7
  import { u as Fe } from "../anchored-DpuUwf-9.js";
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Installing the application on Android: one tap opens the system's own install dialog. Shown by
3
+ * the application when `useInstallPrompt().canInstall` is true; `close` fires when the user
4
+ * installs or dismisses it, and the application keeps it closed.
5
+ *
6
+ * <AndroidInstallBanner v-if="canInstall && !dismissed" app-name="Helpdesk" @close="dismissed = true" />
7
+ */
8
+ type __VLS_Props = {
9
+ appName: string;
10
+ /** The tile's letters; the first three of the name by default. */
11
+ badge?: string;
12
+ };
13
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
+ close: () => any;
15
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ onClose?: (() => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ export default _default;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * "The application on your phone": the QR code of the address the user is signed in on and, in
3
+ * Chrome or Edge on this computer, installing the application here with one click. Open it with
4
+ * `v-model:open`; it closes itself and reports it.
5
+ *
6
+ * <InstallQrSheet v-model:open="qrOpen" app-name="Helpdesk" />
7
+ */
8
+ type __VLS_Props = {
9
+ appName: string;
10
+ /** The address the code opens; the page's own origin by default. */
11
+ url?: string;
12
+ };
13
+ type __VLS_PublicProps = __VLS_Props & {
14
+ "open"?: boolean;
15
+ };
16
+ declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
17
+ "update:open": (value: boolean) => any;
18
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
19
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
20
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
21
+ export default _default;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * "Add the application to your home screen" on iPhone. Safari gives pages no install API and no
3
+ * view of its menus, so the card shows the three taps in turn (the more button at the bottom
4
+ * right, Share, Add to Home Screen), advancing on its own and on Next, with an arrow at the more
5
+ * button for the first. `close` fires when the user closes it; the application keeps it closed.
6
+ *
7
+ * <IosInstallGuide v-if="currentPlatform() === 'ios' && !dismissed" app-name="Helpdesk" @close="dismissed = true" />
8
+ */
9
+ type __VLS_Props = {
10
+ appName: string;
11
+ /** The tile's letters; the first three of the name by default. */
12
+ badge?: string;
13
+ };
14
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ close: () => any;
16
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
+ onClose?: (() => any) | undefined;
18
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
+ export default _default;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * A QR code of `value` (typically the application's own address, to open it on a phone), drawn as
3
+ * one SVG path from `uqr`'s module matrix: dark modules on a white quiet zone in either theme, as
4
+ * cameras read it. `label` is the accessible name.
5
+ *
6
+ * <QrCode :value="origin" :size="184" label="QR code of the address" />
7
+ */
8
+ type __VLS_Props = {
9
+ value: string;
10
+ size?: number;
11
+ label: string;
12
+ };
13
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
14
+ size: number;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
@@ -1,2 +1,6 @@
1
1
  export { captureInstallPrompt, currentPlatform, isStandalone, useInstallPrompt, type AppPlatform } from "./install";
2
2
  export { registerServiceWorker, type ServiceWorkerOptions } from "./worker";
3
+ export { default as AndroidInstallBanner } from "./AndroidInstallBanner.vue";
4
+ export { default as InstallQrSheet } from "./InstallQrSheet.vue";
5
+ export { default as IosInstallGuide } from "./IosInstallGuide.vue";
6
+ export { default as QrCode } from "./QrCode.vue";
package/dist/pwa/index.js CHANGED
@@ -1,51 +1,271 @@
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;
1
+ import { computed as m, shallowRef as D, ref as x, defineComponent as _, openBlock as f, createBlock as b, Teleport as S, createElementVNode as t, toDisplayString as c, unref as n, createVNode as g, withCtx as k, createTextVNode as q, createElementBlock as h, useModel as Q, watch as T, createCommentVNode as M, mergeModels as A, onMounted as V, onBeforeUnmount as R, Fragment as W, renderList as G, normalizeClass as j } from "vue";
2
+ import { useI18n as C } from "vue-i18n";
3
+ import { _ as P } from "../Button.vue_vue_type_script_setup_true_lang-C74hcb0N.js";
4
+ import { _ as z } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
5
+ import { _ as F } from "../Modal.vue_vue_type_script_setup_true_lang-DDS0iEnn.js";
6
+ import { encode as H } from "uqr";
7
+ const v = D(null), I = x(!1);
8
+ let B = !1;
9
+ function Ie() {
10
+ B || typeof window > "u" || (B = !0, window.addEventListener("beforeinstallprompt", (e) => {
11
+ e.preventDefault(), v.value = e;
7
12
  }), window.addEventListener("appinstalled", () => {
8
- r.value = !0, n.value = null;
13
+ I.value = !0, v.value = null;
9
14
  }));
10
15
  }
11
- function v() {
16
+ function Ce() {
12
17
  if (typeof navigator > "u") return "desktop";
13
18
  const e = navigator.userAgent;
14
19
  return /Android/i.test(e) ? "android" : /iPad|iPhone|iPod/.test(e) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1 ? "ios" : "desktop";
15
20
  }
16
- function d() {
21
+ function J() {
17
22
  return typeof window > "u" ? !1 : window.matchMedia?.("(display-mode: standalone)").matches === !0 || navigator.standalone === !0;
18
23
  }
19
- function m() {
24
+ function L() {
20
25
  return {
21
- canInstall: o(() => n.value != null),
22
- installed: o(() => r.value || d()),
26
+ canInstall: m(() => v.value != null),
27
+ installed: m(() => I.value || J()),
23
28
  /** Opens the browser's install dialog; true when the user accepted. */
24
29
  async install() {
25
- const e = n.value;
30
+ const e = v.value;
26
31
  if (!e) return !1;
27
32
  await e.prompt();
28
- const { outcome: t } = await e.userChoice;
29
- return n.value = null, t === "accepted" && (r.value = !0), t === "accepted";
33
+ const { outcome: l } = await e.userChoice;
34
+ return v.value = null, l === "accepted" && (I.value = !0), l === "accepted";
30
35
  }
31
36
  };
32
37
  }
33
- function c() {
38
+ function K() {
34
39
  const e = document.querySelector('script[type="module"][src*="/assets/"]');
35
40
  return e ? new URL(e.src, location.href).pathname : null;
36
41
  }
37
- function w(e = {}) {
42
+ function Ne(e = {}) {
38
43
  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(() => {
44
+ const l = e.url ?? "/sw.js", i = encodeURIComponent(K() ?? "unknown"), a = () => {
45
+ navigator.serviceWorker.register(`${l}${l.includes("?") ? "&" : "?"}build=${i}`).catch(() => {
41
46
  });
42
47
  };
43
48
  document.readyState === "complete" ? a() : window.addEventListener("load", a, { once: !0 });
44
49
  }
50
+ const O = {
51
+ class: "fixed inset-x-3 bottom-[calc(var(--bottom-dock-h,0px)+env(safe-area-inset-bottom)+0.75rem)] z-40 flex animate-reveal items-center gap-3 rounded-2xl bg-surface-cell px-4 py-3.5 shadow-dialog",
52
+ "data-test": "install-android-banner"
53
+ }, X = { class: "grid size-10 shrink-0 place-items-center rounded-xl bg-tint text-footnote font-semibold text-content-on-tint" }, Y = { class: "flex flex-1 flex-col" }, Z = { class: "text-subheadline font-semibold text-content-strong" }, ee = { class: "text-footnote text-content-muted" }, te = ["aria-label"], Ee = /* @__PURE__ */ _({
54
+ __name: "AndroidInstallBanner",
55
+ props: {
56
+ appName: {},
57
+ badge: {}
58
+ },
59
+ emits: ["close"],
60
+ setup(e, { emit: l }) {
61
+ const i = e, a = l, { t: s } = C(), o = L(), r = x(!1);
62
+ async function d() {
63
+ r.value = !0;
64
+ try {
65
+ await o.install() && a("close");
66
+ } finally {
67
+ r.value = !1;
68
+ }
69
+ }
70
+ return (u, p) => (f(), b(S, { to: "body" }, [
71
+ t("div", O, [
72
+ t("span", X, c(i.badge ?? i.appName.slice(0, 3).toUpperCase()), 1),
73
+ t("span", Y, [
74
+ t("span", Z, c(n(s)("core.pwa.android.title", { app: e.appName })), 1),
75
+ t("span", ee, c(n(s)("core.pwa.android.text")), 1)
76
+ ]),
77
+ g(n(P), {
78
+ prominence: "primary",
79
+ size: "sm",
80
+ processing: r.value,
81
+ onClick: d
82
+ }, {
83
+ default: k(() => [
84
+ q(c(n(s)("core.pwa.android.install")), 1)
85
+ ]),
86
+ _: 1
87
+ }, 8, ["processing"]),
88
+ t("button", {
89
+ type: "button",
90
+ class: "hit-target grid size-7 place-items-center rounded-full bg-fill text-content-muted",
91
+ "aria-label": n(s)("core.actions.close"),
92
+ onClick: p[0] || (p[0] = (N) => a("close"))
93
+ }, [
94
+ g(n(z), {
95
+ name: "close",
96
+ size: 12
97
+ })
98
+ ], 8, te)
99
+ ])
100
+ ]));
101
+ }
102
+ }), ne = ["width", "height", "viewBox", "aria-label"], oe = ["d"], $ = 2, ae = /* @__PURE__ */ _({
103
+ __name: "QrCode",
104
+ props: {
105
+ value: {},
106
+ size: { default: 132 },
107
+ label: {}
108
+ },
109
+ setup(e) {
110
+ const l = e, i = m(() => H(l.value, { ecc: "M", border: 0 })), a = m(() => i.value.size + $ * 2), s = m(() => {
111
+ let o = "";
112
+ return i.value.data.forEach((r, d) => r.forEach((u, p) => {
113
+ u && (o += `M${p + $} ${d + $}h1v1h-1z`);
114
+ })), o;
115
+ });
116
+ return (o, r) => (f(), h("svg", {
117
+ width: e.size,
118
+ height: e.size,
119
+ viewBox: `0 0 ${a.value} ${a.value}`,
120
+ role: "img",
121
+ "aria-label": e.label,
122
+ "shape-rendering": "crispEdges",
123
+ class: "shrink-0 rounded-lg bg-white",
124
+ "data-test": "install-qr"
125
+ }, [
126
+ t("path", {
127
+ d: s.value,
128
+ fill: "#0D1714"
129
+ }, null, 8, oe)
130
+ ], 8, ne));
131
+ }
132
+ }), se = {
133
+ class: "flex flex-col items-center gap-4 pb-2 text-center",
134
+ "data-test": "install-qr-sheet"
135
+ }, le = { class: "text-subheadline text-content-muted" }, Be = /* @__PURE__ */ _({
136
+ __name: "InstallQrSheet",
137
+ props: /* @__PURE__ */ A({
138
+ appName: {},
139
+ url: {}
140
+ }, {
141
+ open: { type: Boolean, default: !1 },
142
+ openModifiers: {}
143
+ }),
144
+ emits: ["update:open"],
145
+ setup(e) {
146
+ const l = e, i = Q(e, "open"), { t: a } = C(), s = L(), o = x(null), r = () => l.url ?? (typeof window > "u" ? "" : window.location.origin);
147
+ return T(i, (d) => {
148
+ d && o.value?.present();
149
+ }), (d, u) => (f(), b(n(F), {
150
+ ref_key: "dialog",
151
+ ref: o,
152
+ size: "sm",
153
+ title: n(a)("core.pwa.qr.title", { app: e.appName }),
154
+ onDismissed: u[1] || (u[1] = (p) => i.value = !1)
155
+ }, {
156
+ default: k(() => [
157
+ t("div", se, [
158
+ g(ae, {
159
+ value: r(),
160
+ size: 184,
161
+ label: n(a)("core.pwa.qr.label", { app: e.appName })
162
+ }, null, 8, ["value", "label"]),
163
+ t("p", le, c(n(a)("core.pwa.qr.text", { app: e.appName })), 1),
164
+ n(s).canInstall.value ? (f(), b(n(P), {
165
+ key: 0,
166
+ prominence: "secondary",
167
+ icon: "download",
168
+ onClick: u[0] || (u[0] = (p) => n(s).install())
169
+ }, {
170
+ default: k(() => [
171
+ q(c(n(a)("core.pwa.qr.install_here")), 1)
172
+ ]),
173
+ _: 1
174
+ })) : M("", !0)
175
+ ])
176
+ ]),
177
+ _: 1
178
+ }, 8, ["title"]));
179
+ }
180
+ }), ie = {
181
+ class: "pointer-events-none fixed inset-0 z-50",
182
+ "data-test": "install-ios-guide"
183
+ }, re = { class: "pointer-events-auto absolute inset-x-3 top-[calc(env(safe-area-inset-top)+0.75rem)] flex animate-reveal flex-col gap-2.5 rounded-2xl bg-surface-cell px-4 py-3.5 shadow-dialog" }, ce = { class: "flex items-center gap-3" }, de = { class: "grid size-10 shrink-0 place-items-center rounded-xl bg-tint text-footnote font-semibold text-content-on-tint" }, ue = { class: "flex flex-1 flex-col" }, pe = { class: "text-body font-semibold text-content-strong" }, fe = { class: "text-footnote text-content-muted" }, me = ["aria-label"], ve = { class: "flex items-center gap-2.5 border-t border-border-separator pt-2.5" }, ge = { class: "grid size-6 shrink-0 place-items-center rounded-full bg-tint text-footnote font-semibold text-content-on-tint" }, he = {
184
+ class: "flex gap-1",
185
+ "aria-hidden": "true"
186
+ }, be = {
187
+ key: 0,
188
+ class: "absolute right-5 bottom-[calc(env(safe-area-inset-bottom)+4.5rem)] grid size-10 animate-bounce place-items-center rounded-full bg-tint text-content-on-tint shadow-dialog",
189
+ "aria-hidden": "true"
190
+ }, Se = /* @__PURE__ */ _({
191
+ __name: "IosInstallGuide",
192
+ props: {
193
+ appName: {},
194
+ badge: {}
195
+ },
196
+ emits: ["close"],
197
+ setup(e, { emit: l }) {
198
+ const i = e, a = l, { t: s } = C(), o = x(0), r = ["more", "share", "add"];
199
+ let d = null;
200
+ const u = () => {
201
+ d && clearInterval(d), d = null;
202
+ }, p = () => {
203
+ u(), d = setInterval(() => {
204
+ o.value = (o.value + 1) % r.length;
205
+ }, 2800);
206
+ }, N = () => {
207
+ o.value = (o.value + 1) % r.length, p();
208
+ }, w = m(() => r[o.value]);
209
+ return V(p), R(u), (xe, E) => (f(), b(S, { to: "body" }, [
210
+ t("div", ie, [
211
+ t("div", re, [
212
+ t("div", ce, [
213
+ t("span", de, c(i.badge ?? i.appName.slice(0, 3).toUpperCase()), 1),
214
+ t("span", ue, [
215
+ t("span", pe, c(n(s)("core.pwa.ios.title", { app: e.appName })), 1),
216
+ t("span", fe, c(n(s)("core.pwa.ios.subtitle")), 1)
217
+ ]),
218
+ t("button", {
219
+ type: "button",
220
+ class: "hit-target grid size-7 place-items-center rounded-full bg-fill text-content-muted",
221
+ "aria-label": n(s)("core.actions.close"),
222
+ "data-test": "install-ios-guide-close",
223
+ onClick: E[0] || (E[0] = (U) => a("close"))
224
+ }, [
225
+ g(n(z), {
226
+ name: "close",
227
+ size: 12
228
+ })
229
+ ], 8, me)
230
+ ]),
231
+ t("div", ve, [
232
+ t("span", ge, c(o.value + 1), 1),
233
+ (f(), h("span", {
234
+ key: w.value,
235
+ class: "flex-1 animate-text-swap text-subheadline font-semibold text-content-strong",
236
+ "aria-live": "polite"
237
+ }, c(n(s)(`core.pwa.ios.steps.${w.value}`)), 1)),
238
+ t("span", he, [
239
+ (f(), h(W, null, G(r, (U, y) => t("span", {
240
+ key: y,
241
+ class: j(["h-1.5 rounded-full transition-[width,background-color] duration-motion-normal", [y === o.value ? "w-4" : "w-1.5", y <= o.value ? "bg-tint" : "bg-fill-strong"]])
242
+ }, null, 2)), 64))
243
+ ]),
244
+ t("button", {
245
+ type: "button",
246
+ class: "text-subheadline font-semibold text-content-link",
247
+ onClick: N
248
+ }, c(n(s)("core.pwa.ios.next")), 1)
249
+ ])
250
+ ]),
251
+ w.value === "more" ? (f(), h("span", be, [
252
+ g(n(z), {
253
+ name: "arrowDownSLine",
254
+ class: "size-5"
255
+ })
256
+ ])) : M("", !0)
257
+ ])
258
+ ]));
259
+ }
260
+ });
45
261
  export {
46
- p as captureInstallPrompt,
47
- v as currentPlatform,
48
- d as isStandalone,
49
- w as registerServiceWorker,
50
- m as useInstallPrompt
262
+ Ee as AndroidInstallBanner,
263
+ Be as InstallQrSheet,
264
+ Se as IosInstallGuide,
265
+ ae as QrCode,
266
+ Ie as captureInstallPrompt,
267
+ Ce as currentPlatform,
268
+ J as isStandalone,
269
+ Ne as registerServiceWorker,
270
+ L as useInstallPrompt
51
271
  };
@@ -1,5 +1,5 @@
1
1
  import { p as o, u as r, a, b as u } from "../routeResource-DlTsGTg_.js";
2
- import { _ as R, a as c } from "../ResourcePage.vue_vue_type_script_setup_true_lang-Cw8mGf_B.js";
2
+ import { _ as R, a as c } from "../ResourcePage.vue_vue_type_script_setup_true_lang-DljhsTU4.js";
3
3
  export {
4
4
  R as RecordPager,
5
5
  c as ResourcePage,