@wssto2/vue-core 0.4.28 → 0.5.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 (145) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-J5HoyGNJ.js → AccessGate.vue_vue_type_script_setup_true_lang-DZ9GcLC1.js} +1 -1
  3. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-QPvYudWc.js → ActionRow.vue_vue_type_script_setup_true_lang-BCgKzUvG.js} +1 -1
  4. package/dist/{Activity-BWkVX1Nx.js → Activity-dpY2kIs2.js} +7 -7
  5. package/dist/{Changes-MG77TDwz.js → Changes-CL8F1w8q.js} +6 -6
  6. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-Bnpv9TEj.js → CollectionPage.vue_vue_type_script_setup_true_lang-l-e-6WeS.js} +4 -4
  7. package/dist/{DateField.vue_vue_type_script_setup_true_lang-CpuH0WTl.js → DateField.vue_vue_type_script_setup_true_lang-DRuWzSaX.js} +1 -1
  8. package/dist/{DeadLetters-CkDE71B3.js → DeadLetters-BZLyL5lR.js} +7 -7
  9. package/dist/{FormErrors.vue_vue_type_script_setup_true_lang-DGOSc-PS.js → FormErrors.vue_vue_type_script_setup_true_lang-D7edzNTL.js} +2 -2
  10. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js → FormGroup.vue_vue_type_script_setup_true_lang-BPchlRCl.js} +2 -2
  11. package/dist/{FormView.vue_vue_type_script_setup_true_lang-BUrYkjmF.js → FormView.vue_vue_type_script_setup_true_lang-CPSYV7iQ.js} +2 -2
  12. package/dist/{General-UTBVEXbN.js → General-mrVzi-5R.js} +10 -10
  13. package/dist/MenuButton.vue_vue_type_script_setup_true_lang-AGbN9r5q.js +28 -0
  14. package/dist/{NewRolePage-B7DwFWPk.js → NewRolePage-B2DItwvf.js} +3 -3
  15. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-DaE5BLm4.js → NumberField.vue_vue_type_script_setup_true_lang-ButMV_sf.js} +1 -1
  16. package/dist/ProfilePage-EiTIYzZ5.js +764 -0
  17. package/dist/RoleEditor.vue_vue_type_script_setup_true_lang-BqqilJGF.js +325 -0
  18. package/dist/RolePage-jMHAt9y8.js +314 -0
  19. package/dist/{RolesPage-B5RwSZ89.js → RolesPage-B9GaVQBx.js} +6 -6
  20. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-Dmv6TpCi.js → SectionNavigator.vue_vue_type_script_setup_true_lang-Ci04hApd.js} +1 -1
  21. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-Dg-_ZjgR.js → SegmentedField.vue_vue_type_script_setup_true_lang-BwyMvkis.js} +1 -1
  22. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-C3FbRQW7.js → SelectField.vue_vue_type_script_setup_true_lang-BzQC1qDQ.js} +11 -12
  23. package/dist/SessionList.vue_vue_type_script_setup_true_lang-DhoTd5D7.js +133 -0
  24. package/dist/{Sessions-DWj2OGo0.js → Sessions-CHLokZ9e.js} +5 -5
  25. package/dist/SettingsPage-CudoKdXm.js +632 -0
  26. package/dist/{SignIn-COThB9XN.js → SignIn-ypRvdmjg.js} +7 -7
  27. package/dist/{SignInPage-CdzgSvRm.js → SignInPage-CbPeKlAo.js} +4 -4
  28. package/dist/SignIns-BApzbGq-.js +121 -0
  29. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-ALvJisiP.js → SwitchField.vue_vue_type_script_setup_true_lang-D_-HACqT.js} +1 -1
  30. package/dist/{TextField.vue_vue_type_script_setup_true_lang-CP2WeU36.js → TextField.vue_vue_type_script_setup_true_lang-DTAQPbW0.js} +2 -2
  31. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-BJ4__cvJ.js → TextareaField.vue_vue_type_script_setup_true_lang-DsjK2C9T.js} +1 -1
  32. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-DBxKAWRo.js → TimeField.vue_vue_type_script_setup_true_lang-Cz7KhUqt.js} +1 -1
  33. package/dist/{UserRecord-BWMnXz4q.js → UserRecord-BCTaBajE.js} +13 -13
  34. package/dist/{UsersList-Chq8yM5C.js → UsersList-CqSK3cQL.js} +9 -9
  35. package/dist/access/RoleCompareDialog.vue.d.ts +1 -1
  36. package/dist/access/RoleEditor.vue.d.ts +2 -0
  37. package/dist/access/constraints.d.ts +28 -0
  38. package/dist/access/context.d.ts +5 -0
  39. package/dist/access/feature.d.ts +17 -0
  40. package/dist/access/index.d.ts +3 -1
  41. package/dist/access/index.js +11 -9
  42. package/dist/access/refusals.d.ts +20 -2
  43. package/dist/app/index.js +118 -116
  44. package/dist/app/keepAlive.d.ts +4 -8
  45. package/dist/client/index.js +19 -11
  46. package/dist/{client-k9euDWF4.js → client-BHPFfBj3.js} +20 -20
  47. package/dist/collection/index.js +3 -3
  48. package/dist/content/index.js +66 -37
  49. package/dist/{contributions-BVBZP5Jb.js → contributions-fx5q5n1u.js} +1 -1
  50. package/dist/{describeError-B-NMa--w.js → describeError-BqGAUZgX.js} +1 -1
  51. package/dist/{error-CD7x0Jrz.js → error-Bb_dr_Ay.js} +2 -2
  52. package/dist/{fieldMessages-6HVzSDqG.js → fieldMessages-DTXpWnBd.js} +7 -7
  53. package/dist/form/index.js +1235 -1412
  54. package/dist/{guards-BJZjc3FZ.js → guards-D4mXf_2X.js} +1 -1
  55. package/dist/{http-BFfkA7gN.js → http-CdQowFlW.js} +1 -1
  56. package/dist/i18n/index.d.ts +2 -2
  57. package/dist/i18n/index.js +30 -30
  58. package/dist/identity/index.d.ts +3 -1
  59. package/dist/identity/index.js +7 -6
  60. package/dist/identity/profile/DetailsFields.vue.d.ts +8 -0
  61. package/dist/identity/profile/{DetailsPanel.vue.d.ts → DetailsGroup.vue.d.ts} +4 -1
  62. package/dist/identity/profile/{EmailPanel.vue.d.ts → EmailGroup.vue.d.ts} +1 -1
  63. package/dist/identity/profile/SignInsGroup.vue.d.ts +2 -0
  64. package/dist/identity/profile/profileSections.d.ts +37 -0
  65. package/dist/identity/session.d.ts +10 -7
  66. package/dist/identity/shared/SignInList.vue.d.ts +22 -0
  67. package/dist/identity/shared/deviceLabel.d.ts +7 -0
  68. package/dist/identity/useReturnToOwnAccount.d.ts +10 -0
  69. package/dist/identity/users/context.d.ts +3 -0
  70. package/dist/identity/users/feature.d.ts +3 -0
  71. package/dist/index-BTRv8mcf.js +630 -0
  72. package/dist/index-VPzJJN6Z.js +745 -0
  73. package/dist/index-auJqVMWC.js +478 -0
  74. package/dist/index.d.ts +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/keepAlive-z3IRFkQq.js +46 -0
  77. package/dist/modules/notification/entities.d.ts +19 -0
  78. package/dist/modules/notification/routes.d.ts +25 -1
  79. package/dist/modules/notification/schemas.d.ts +24 -0
  80. package/dist/{navigation-DpcDF0rX.js → navigation-Bc5EQ_Si.js} +1 -1
  81. package/dist/{neighbors-RVQ4O3Qv.js → neighbors-Bv6vnWlW.js} +22 -22
  82. package/dist/notifications/context.d.ts +24 -1
  83. package/dist/notifications/feature.d.ts +10 -1
  84. package/dist/notifications/index.d.ts +1 -1
  85. package/dist/notifications/index.js +1 -1
  86. package/dist/notifications/push/DevicesSection.vue.d.ts +12 -0
  87. package/dist/notifications/push/ThisDeviceSection.vue.d.ts +15 -0
  88. package/dist/notifications/push/browser.d.ts +40 -0
  89. package/dist/notifications/push/devices.d.ts +15 -0
  90. package/dist/notifications/push/thisDevice.d.ts +28 -0
  91. package/dist/notifications/settings/ChannelsSection.vue.d.ts +16 -0
  92. package/dist/notifications/settings/{QuietHoursPanel.vue.d.ts → QuietHoursSection.vue.d.ts} +3 -1
  93. package/dist/notifications/settings/SettingsBody.vue.d.ts +17 -0
  94. package/dist/notifications/settings/settings.d.ts +4 -3
  95. package/dist/notifications/settings/state.d.ts +4 -2
  96. package/dist/options-g8RwEhBk.js +366 -0
  97. package/dist/overlay/index.js +37 -59
  98. package/dist/page/index.js +1 -1
  99. package/dist/phone/index.js +10 -11
  100. package/dist/platform/index.js +3 -3
  101. package/dist/platform/platform.d.ts +7 -2
  102. package/dist/platform/session.d.ts +17 -0
  103. package/dist/platform-Dx6STiwY.js +283 -0
  104. package/dist/push-worker/index.d.ts +91 -0
  105. package/dist/push-worker/index.js +54 -0
  106. package/dist/resource/index.js +1 -1
  107. package/dist/{routeResource-DlTsGTg_.js → routeResource-CcYA75T2.js} +2 -2
  108. package/dist/router/index.js +3 -3
  109. package/dist/{sections-CeZl-Jxg.js → sections-B0HxIOC2.js} +1 -1
  110. package/dist/shell/index.js +3 -3
  111. package/dist/signInEvents-DWShrJox.js +30 -0
  112. package/dist/state/index.js +1 -1
  113. package/dist/{status-dGvfh1TP.js → status-BUFELJz2.js} +2 -2
  114. package/dist/styles.css +1 -1
  115. package/dist/{suggestions-DHJFKB26.js → suggestions-CfFTHi8y.js} +2 -2
  116. package/dist/testing/index.js +1 -1
  117. package/dist/{useCommand-Cj-APj-P.js → useCommand-CtqheKUv.js} +2 -2
  118. package/dist/useGroupSheet-ATvc0IiM.js +278 -0
  119. package/dist/{useLoad-M7V-AVwR.js → useLoad-W4tfxmm5.js} +1 -1
  120. package/dist/{useResourceForm-tGYTfKhH.js → useResourceForm-CJfl8rj_.js} +1 -1
  121. package/package.json +6 -2
  122. package/dist/KeyValue.vue_vue_type_script_setup_true_lang-wcZcvnow.js +0 -35
  123. package/dist/OtpInput.vue_vue_type_script_setup_true_lang-gp4FfWAH.js +0 -95
  124. package/dist/PanelActions.vue_vue_type_script_setup_true_lang-E9VdIGkf.js +0 -46
  125. package/dist/ProfilePage-C8VhiKIh.js +0 -654
  126. package/dist/RoleEditor.vue_vue_type_script_setup_true_lang-DRHmjA9w.js +0 -300
  127. package/dist/RolePage-ODFu68Ce.js +0 -315
  128. package/dist/SessionList.vue_vue_type_script_setup_true_lang-D5qm77Zo.js +0 -111
  129. package/dist/SettingsPage-C3fPSmi7.js +0 -255
  130. package/dist/SignInTable.vue_vue_type_script_setup_true_lang-Bs0yTi2E.js +0 -79
  131. package/dist/SignIns-cztICmqt.js +0 -66
  132. package/dist/control-B4SdblL6.js +0 -350
  133. package/dist/identity/profile/PanelActions.vue.d.ts +0 -17
  134. package/dist/index-BhtJR4c_.js +0 -459
  135. package/dist/index-C3E6DcO0.js +0 -706
  136. package/dist/index-sTBBHqNG.js +0 -504
  137. package/dist/keepAlive-CDvMQlcJ.js +0 -49
  138. package/dist/notifications/settings/EmailPanel.vue.d.ts +0 -14
  139. package/dist/options-Ba_0uLWN.js +0 -18
  140. package/dist/platform-PZpUkkMS.js +0 -268
  141. package/dist/route-goWMxDUN.js +0 -13
  142. package/dist/transport-BnP7WC0Y.js +0 -4
  143. /package/dist/identity/{profile/PasswordPanel.vue.d.ts → ReturnMenuItem.vue.d.ts} +0 -0
  144. /package/dist/identity/profile/{SessionsPanel.vue.d.ts → PasswordGroup.vue.d.ts} +0 -0
  145. /package/dist/identity/profile/{SignInsPanel.vue.d.ts → SessionsGroup.vue.d.ts} +0 -0
@@ -0,0 +1,366 @@
1
+ import { inject as N, ref as O, computed as d, onBeforeUnmount as F, defineComponent as A, useSlots as D, openBlock as r, createBlock as L, resolveDynamicComponent as j, unref as t, normalizeClass as b, withCtx as _, createElementBlock as i, renderSlot as c, createCommentVNode as u, createElementVNode as h, createTextVNode as k, toDisplayString as v, createVNode as V, useAttrs as G, useId as K, mergeProps as C, createSlots as M, mergeDefaults as P } from "vue";
2
+ import { useI18n as U } from "vue-i18n";
3
+ import { _ as B } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
4
+ import { RouterLink as Y } from "vue-router";
5
+ import { c as J, a as Q } from "./controlSurface-t7OEFESJ.js";
6
+ import { u as W } from "./mediaQuery-CygcXmFW.js";
7
+ const X = {
8
+ label: void 0,
9
+ labelHidden: !1,
10
+ hint: void 0,
11
+ error: void 0,
12
+ required: !1,
13
+ editable: !0,
14
+ disabled: !1,
15
+ lockedReason: void 0,
16
+ presentation: "control",
17
+ name: void 0
18
+ }, Z = Symbol("vue-core.formGroup"), ee = Symbol("vue-core.formRowIndent"), te = Symbol("vue-core.formEditable"), R = () => N(Z, null), oe = () => N(ee, 0);
19
+ function le(n) {
20
+ const e = R(), l = N(te, O(!0)), o = W(), g = d(() => !!e && !!n.disabled && (o.value || n.presentation === "value")), m = d(() => (n.editable ?? !0) && l.value && !g.value), s = d(() => !!e && !!n.disabled && m.value);
21
+ if (e) {
22
+ const f = e.registerLocked(d(() => !!n.disabled && l.value && n.presentation !== "value"));
23
+ F(f);
24
+ }
25
+ return { editable: m, locked: s };
26
+ }
27
+ const ae = ["label", "labelHidden", "hint", "error", "required", "editable", "disabled", "lockedReason", "presentation", "name"];
28
+ function He(n) {
29
+ return Object.fromEntries(ae.map((e) => [e, n[e]]));
30
+ }
31
+ const re = {
32
+ key: 0,
33
+ class: "flex shrink-0 items-center"
34
+ }, se = { class: "row-body min-h-row min-w-0 flex-1 border-t border-border-separator py-2 pr-row-inset" }, ne = {
35
+ key: 0,
36
+ class: "text-content-destructive",
37
+ "aria-hidden": "true"
38
+ }, ie = ["id"], de = {
39
+ key: 0,
40
+ class: "break-words text-body text-content-strong"
41
+ }, ue = ["id"], ce = /* @__PURE__ */ A({
42
+ __name: "FormRow",
43
+ props: {
44
+ label: { default: void 0 },
45
+ labelHidden: { type: Boolean, default: !1 },
46
+ for: { default: void 0 },
47
+ sub: { default: void 0 },
48
+ subId: { default: void 0 },
49
+ required: { type: Boolean, default: !1 },
50
+ layout: { default: "entry" },
51
+ value: { default: void 0 },
52
+ to: { default: void 0 },
53
+ error: { default: void 0 },
54
+ errorId: { default: void 0 },
55
+ indent: { default: 0 },
56
+ labelLines: { default: void 0 },
57
+ labelAlign: { default: "center" }
58
+ },
59
+ setup(n) {
60
+ const e = n, l = D(), o = oe(), g = d(() => o + e.indent), m = ["pl-row-inset", "pl-[calc(var(--app-row-inset)+1.25rem)]", "pl-[calc(var(--app-row-inset)+2.5rem)]"], s = { 1: "line-clamp-1", 2: "line-clamp-2", 3: "line-clamp-3" }, f = d(() => e.labelHidden && (e.layout === "entry" || e.layout === "value") ? "stacked" : e.layout), S = d(() => {
61
+ switch (f.value) {
62
+ case "entry":
63
+ return "grid grid-cols-[var(--form-label-width,11rem)_minmax(0,1fr)] items-center gap-x-4 compact:grid-cols-[minmax(0,auto)_minmax(40%,1fr)]";
64
+ case "value":
65
+ return "grid grid-cols-[minmax(min-content,1fr)_minmax(0,auto)] items-center gap-x-4";
66
+ case "setting":
67
+ return "flex items-center gap-4";
68
+ default:
69
+ return "flex flex-col gap-1";
70
+ }
71
+ }), p = d(() => e.labelHidden ? "sr-only" : f.value === "stacked" ? "text-footnote text-content-muted" : e.layout === "value" ? "text-body text-content-muted" : "text-body text-content-strong"), w = d(() => e.value !== void 0 && e.value !== null && e.value !== "");
72
+ return (y, x) => (r(), L(j(e.to ? t(Y) : "div"), {
73
+ to: e.to,
74
+ "data-test": "form-row",
75
+ "data-layout": f.value,
76
+ "data-field-error": e.error ? "true" : void 0,
77
+ class: b(["form-row flex min-w-0 items-stretch gap-3 transition-colors duration-motion-fast first:rounded-t-group last:rounded-b-group focus-within:bg-tint-soft/50 [&:first-child>.row-body]:border-t-0", [m[Math.min(g.value, 2)], e.to ? "hover:bg-fill focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-border-focus" : ""]])
78
+ }, {
79
+ default: _(() => [
80
+ l.leading ? (r(), i("div", re, [
81
+ c(y.$slots, "leading")
82
+ ])) : u("", !0),
83
+ h("div", se, [
84
+ h("div", {
85
+ class: b(["min-w-0", S.value])
86
+ }, [
87
+ e.label || e.sub || l.sub ? (r(), i("div", {
88
+ key: 0,
89
+ class: b([e.labelHidden && !e.sub && !l.sub ? "contents" : f.value === "setting" ? "min-w-min flex-1" : "min-w-0", e.labelAlign === "top" ? "self-start pt-1" : ""])
90
+ }, [
91
+ h("div", {
92
+ class: b(l["label-trailing"] ? "flex items-center justify-between gap-3" : "")
93
+ }, [
94
+ (r(), L(j(e.for ? "label" : "span"), {
95
+ for: e.for,
96
+ class: b(["break-words", [p.value, e.labelHidden ? "" : e.labelLines ? s[e.labelLines] : "block"]])
97
+ }, {
98
+ default: _(() => [
99
+ k(v(e.label), 1),
100
+ e.required ? (r(), i("span", ne, " *")) : u("", !0)
101
+ ]),
102
+ _: 1
103
+ }, 8, ["for", "class"])),
104
+ c(y.$slots, "label-trailing")
105
+ ], 2),
106
+ e.sub || l.sub ? (r(), i("small", {
107
+ key: 0,
108
+ id: e.subId,
109
+ class: "mt-0.5 block text-footnote text-content-muted"
110
+ }, [
111
+ c(y.$slots, "sub", {}, () => [
112
+ k(v(e.sub), 1)
113
+ ])
114
+ ], 8, ie)) : u("", !0)
115
+ ], 2)) : u("", !0),
116
+ h("div", {
117
+ class: b(["flex min-w-0 items-center gap-2", f.value === "value" ? "justify-end text-right" : f.value === "setting" ? "flex-wrap justify-end text-right" : f.value === "entry" ? "compact:justify-end" : ""])
118
+ }, [
119
+ c(y.$slots, "default", {}, () => [
120
+ w.value ? (r(), i("span", de, v(e.value), 1)) : u("", !0)
121
+ ]),
122
+ c(y.$slots, "trailing"),
123
+ e.to ? (r(), L(t(B), {
124
+ key: 0,
125
+ name: "arrowRightSLine",
126
+ size: 18,
127
+ class: "shrink-0 text-content-disabled"
128
+ })) : u("", !0)
129
+ ], 2)
130
+ ], 2),
131
+ e.error ? (r(), i("p", {
132
+ key: 0,
133
+ id: e.errorId,
134
+ class: "mt-1 flex items-start gap-1.5 text-footnote text-content-destructive",
135
+ role: "alert"
136
+ }, [
137
+ V(t(B), {
138
+ name: "alertTriangle",
139
+ size: 14,
140
+ class: "mt-px shrink-0"
141
+ }),
142
+ k(" " + v(e.error), 1)
143
+ ], 8, ue)) : u("", !0)
144
+ ])
145
+ ]),
146
+ _: 3
147
+ }, 8, ["to", "data-layout", "data-field-error", "class"]));
148
+ }
149
+ }), fe = ["title"], ve = {
150
+ key: 0,
151
+ class: "mr-1.5 inline-flex shrink-0 items-center align-middle",
152
+ "data-test": "field-prefix"
153
+ }, me = {
154
+ key: 1,
155
+ class: "mr-1"
156
+ }, be = {
157
+ key: 2,
158
+ class: "ml-1 text-content-muted"
159
+ }, pe = {
160
+ key: 3,
161
+ class: "block text-body text-content-disabled"
162
+ }, ye = {
163
+ key: 0,
164
+ class: "sr-only"
165
+ }, ge = ["data-field-error"], xe = ["for"], he = {
166
+ key: 0,
167
+ class: "text-content-destructive",
168
+ "aria-hidden": "true"
169
+ }, ke = {
170
+ key: 1,
171
+ class: "flex min-w-0 items-center gap-2"
172
+ }, we = { class: "min-w-0 flex-1" }, _e = {
173
+ key: 0,
174
+ class: "mr-1.5 inline-flex shrink-0 items-center align-middle",
175
+ "data-test": "field-prefix"
176
+ }, $e = ["id"], Le = ["id"], Te = /* @__PURE__ */ A({
177
+ __name: "Field",
178
+ props: /* @__PURE__ */ P({
179
+ label: {},
180
+ labelHidden: { type: Boolean },
181
+ hint: {},
182
+ error: {},
183
+ required: { type: Boolean },
184
+ editable: { type: Boolean },
185
+ disabled: { type: Boolean },
186
+ lockedReason: {},
187
+ presentation: {},
188
+ name: {},
189
+ value: { type: [String, Number, Boolean, null] },
190
+ prefix: {},
191
+ suffix: {},
192
+ valueStyle: {},
193
+ rowLayout: {},
194
+ rowLabelAlign: {}
195
+ }, { ...X, value: void 0, prefix: void 0, suffix: void 0, valueStyle: void 0, rowLayout: "entry", rowLabelAlign: "center" }),
196
+ setup(n) {
197
+ const e = n, { t: l } = U(), o = D(), g = G(), m = R(), { editable: s, locked: f } = le(e), S = K(), p = d(() => e.name ?? S), w = d(() => `${p.value}-hint`), y = d(() => `${p.value}-error`);
198
+ if (m?.registerField) {
199
+ const a = g["data-field-key"], T = m.registerField(typeof a == "string" ? a : void 0, d(() => e.disabled));
200
+ F(T);
201
+ }
202
+ const x = d(() => {
203
+ const a = e.value;
204
+ return a == null ? !1 : typeof a == "string" ? a.length > 0 : typeof a == "number" ? !Number.isNaN(a) : !0;
205
+ }), E = d(() => typeof e.value == "boolean" ? e.value ? l("core.form.yes") : l("core.form.no") : e.value), z = d(() => !!m && !s.value && m.hideEmpty.value && !x.value && !o.readonly), q = d(() => [e.hint && s.value ? w.value : null, e.error ? y.value : null].filter(Boolean).join(" ") || void 0), $ = d(() => {
206
+ const a = s.value ? e.rowLayout : e.rowLayout === "stacked" ? "stacked" : "value";
207
+ return e.labelHidden && (a === "entry" || a === "value") ? "stacked" : a;
208
+ }), H = d(
209
+ () => s.value && !f.value && e.required ? { "data-field-required": "true", "data-field-filled": x.value ? "true" : void 0 } : {}
210
+ );
211
+ return (a, T) => t(m) && !z.value ? (r(), L(ce, C({ key: 0 }, H.value, {
212
+ label: e.label,
213
+ "label-hidden": e.labelHidden,
214
+ for: t(s) ? p.value : void 0,
215
+ sub: t(s) ? e.hint : void 0,
216
+ "sub-id": w.value,
217
+ required: t(s) && !t(f) && e.required,
218
+ layout: $.value,
219
+ "label-align": $.value === "entry" ? e.rowLabelAlign : void 0,
220
+ error: t(s) ? e.error : void 0,
221
+ "error-id": y.value,
222
+ "data-field-locked": t(f) ? "true" : void 0
223
+ }), M({
224
+ default: _(() => [
225
+ h("div", {
226
+ class: "relative w-full min-w-0",
227
+ title: t(f) ? e.lockedReason : void 0
228
+ }, [
229
+ h("div", {
230
+ class: b(t(s) ? $.value === "setting" ? "flex min-w-0 flex-col items-end" : $.value === "stacked" ? "flex min-w-0 flex-col items-stretch" : "flex min-w-0 flex-col items-start compact:items-end" : "")
231
+ }, [
232
+ t(s) ? c(a.$slots, "default", {
233
+ id: p.value,
234
+ describedby: q.value,
235
+ invalid: !!e.error,
236
+ required: e.required,
237
+ disabled: e.disabled
238
+ }, void 0, void 0, 0) : t(o).readonly ? c(a.$slots, "readonly", {}, void 0, void 0, 1) : x.value ? (r(), i("span", {
239
+ key: 2,
240
+ class: b(["block break-words text-body text-content-strong", e.valueStyle === "mono" ? "font-mono" : e.valueStyle === "numeric" ? "tabular-nums" : ""])
241
+ }, [
242
+ t(o).prefix ? (r(), i("span", ve, [
243
+ c(a.$slots, "prefix")
244
+ ])) : u("", !0),
245
+ e.prefix ? (r(), i("span", me, v(e.prefix), 1)) : u("", !0),
246
+ k(v(E.value), 1),
247
+ e.suffix ? (r(), i("span", be, v(e.suffix), 1)) : u("", !0)
248
+ ], 2)) : (r(), i("span", pe, v(t(l)("core.state.no_value")), 1))
249
+ ], 2)
250
+ ], 8, fe),
251
+ t(f) && e.lockedReason ? (r(), i("span", ye, v(e.lockedReason), 1)) : u("", !0)
252
+ ]),
253
+ _: 2
254
+ }, [
255
+ t(s) && t(o).trailing ? {
256
+ name: "trailing",
257
+ fn: _(() => [
258
+ c(a.$slots, "trailing")
259
+ ]),
260
+ key: "0"
261
+ } : void 0,
262
+ t(s) && t(o).labelTrailing ? {
263
+ name: "label-trailing",
264
+ fn: _(() => [
265
+ c(a.$slots, "labelTrailing")
266
+ ]),
267
+ key: "1"
268
+ } : void 0
269
+ ]), 1040, ["label", "label-hidden", "for", "sub", "sub-id", "required", "layout", "label-align", "error", "error-id", "data-field-locked"])) : t(m) ? u("", !0) : (r(), i("div", C({ key: 1 }, H.value, {
270
+ "data-field-error": e.error ? "true" : void 0,
271
+ class: "flex min-w-0 flex-col gap-1"
272
+ }), [
273
+ e.label || t(s) && t(o).labelTrailing ? (r(), i("div", {
274
+ key: 0,
275
+ class: b(e.labelHidden && !(t(s) && t(o).labelTrailing) ? "contents" : "flex items-center justify-between gap-3")
276
+ }, [
277
+ e.label ? (r(), i("label", {
278
+ key: 0,
279
+ for: t(s) ? p.value : void 0,
280
+ class: b(e.labelHidden ? "sr-only" : "text-footnote font-medium text-content-muted")
281
+ }, [
282
+ k(v(e.label), 1),
283
+ t(s) && e.required ? (r(), i("span", he, " *")) : u("", !0)
284
+ ], 10, xe)) : u("", !0),
285
+ t(s) ? c(a.$slots, "labelTrailing", {}, void 0, void 0, 1) : u("", !0)
286
+ ], 2)) : u("", !0),
287
+ t(s) && t(o).trailing ? (r(), i("div", ke, [
288
+ h("div", we, [
289
+ c(a.$slots, "default", {
290
+ id: p.value,
291
+ describedby: q.value,
292
+ invalid: !!e.error,
293
+ required: e.required,
294
+ disabled: e.disabled
295
+ })
296
+ ]),
297
+ c(a.$slots, "trailing")
298
+ ])) : t(s) ? c(a.$slots, "default", {
299
+ id: p.value,
300
+ describedby: q.value,
301
+ invalid: !!e.error,
302
+ required: e.required,
303
+ disabled: e.disabled
304
+ }, void 0, void 0, 2) : t(o).readonly ? c(a.$slots, "readonly", {}, void 0, void 0, 3) : (r(), i("span", {
305
+ key: 4,
306
+ class: b(["text-body", x.value ? "text-content-strong" : "text-content-disabled"])
307
+ }, [
308
+ x.value && t(o).prefix ? (r(), i("span", _e, [
309
+ c(a.$slots, "prefix")
310
+ ])) : u("", !0),
311
+ k(v(x.value ? `${e.prefix ?? ""}${E.value}${e.suffix ?? ""}` : t(l)("core.state.no_value")), 1)
312
+ ], 2)),
313
+ e.hint && t(s) ? (r(), i("p", {
314
+ key: 5,
315
+ id: w.value,
316
+ class: "text-footnote text-content-muted"
317
+ }, v(e.hint), 9, $e)) : u("", !0),
318
+ e.error ? (r(), i("p", {
319
+ key: 6,
320
+ id: y.value,
321
+ role: "alert",
322
+ class: "flex items-start gap-1.5 text-footnote text-content-destructive"
323
+ }, [
324
+ V(t(B), {
325
+ name: "alertTriangle",
326
+ size: 14,
327
+ class: "mt-px shrink-0"
328
+ }),
329
+ k(" " + v(e.error), 1)
330
+ ], 8, Le)) : u("", !0)
331
+ ], 16, ge));
332
+ }
333
+ }), Se = "rounded-control transition-[background-color,box-shadow,opacity] duration-motion-fast ease-motion-standard";
334
+ function je(n, e) {
335
+ const l = !!R();
336
+ return d(() => l ? J({ kind: n, state: e() }) : [Se, ...Q(n, e()).map(([o]) => o)].join(" "));
337
+ }
338
+ function Ce(n) {
339
+ const e = /* @__PURE__ */ new Map();
340
+ for (const l of n) {
341
+ const o = l.group ?? null, g = e.get(o) ?? [];
342
+ g.push(l), e.set(o, g);
343
+ }
344
+ return [...e.entries()].sort(([l], [o]) => l === null ? -1 : o === null ? 1 : 0).map(([l, o]) => ({ title: l, options: o }));
345
+ }
346
+ function Fe(n, e) {
347
+ const l = I(e.trim());
348
+ return l === "" ? n : n.filter((o) => I(o.label).includes(l) || o.description !== void 0 && I(o.description).includes(l));
349
+ }
350
+ const I = (n) => n.normalize("NFD").replace(/[̀-ͯ]/g, "").toLocaleLowerCase();
351
+ export {
352
+ Te as _,
353
+ R as a,
354
+ X as b,
355
+ je as c,
356
+ I as d,
357
+ te as e,
358
+ He as f,
359
+ ce as g,
360
+ Z as h,
361
+ Ce as i,
362
+ ee as j,
363
+ oe as k,
364
+ Fe as m,
365
+ le as u
366
+ };
@@ -1,38 +1,16 @@
1
- import { _ as P } from "../AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
2
- import { _ as y } from "../Menu.vue_vue_type_script_setup_true_lang-DsFOeCVe.js";
3
- import { defineComponent as i, openBlock as n, createElementBlock as a, mergeProps as l, createVNode as c, unref as u, normalizeClass as f, toDisplayString as p } from "vue";
4
- import { _ as d } from "../Icon.vue_vue_type_script_lang-D7oC-d-S.js";
5
- import { _ as k } from "../Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
6
- import { _ as D } from "../Toaster.vue_vue_type_script_setup_true_lang-55boRLAj.js";
7
- import { _ as E } from "../Tooltip.vue_vue_type_script_setup_true_lang-mErNPt8e.js";
8
- import { t as S } from "../toast-CqSDTWRX.js";
9
- import { I as $, u as N } from "../dialogStack-DZZg55w0.js";
10
- import { I as j, u as z } from "../useDialog-CXR3hN0G.js";
11
- import { C as L, u as U } from "../mediaQuery-CygcXmFW.js";
12
- import { _ as Q } from "../PhotoViewer.vue_vue_type_script_setup_true_lang-CY5EZiyK.js";
13
- const m = ["aria-label", "data-pressed"], v = /* @__PURE__ */ i({
14
- __name: "MenuButton",
15
- props: {
16
- label: {},
17
- icon: { default: "moreLine" },
18
- presented: { type: Boolean },
19
- toggle: {},
20
- attrs: {}
21
- },
22
- setup(s) {
23
- const e = s;
24
- return (t, o) => (n(), a("button", l({ type: "button" }, e.attrs, {
25
- "aria-label": e.label,
26
- class: "hit-target flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full text-content-muted transition-colors duration-motion-fast hover:bg-fill hover:text-content-strong focus-visible:bg-fill focus-visible:text-content-strong data-pressed:bg-fill-strong data-pressed:text-content-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
27
- "data-pressed": e.presented || void 0,
28
- onClick: o[0] || (o[0] = (r) => e.toggle())
29
- }), [
30
- c(u(d), {
31
- name: e.icon
32
- }, null, 8, ["name"])
33
- ], 16, m));
34
- }
35
- }), b = ["aria-disabled"], C = /* @__PURE__ */ i({
1
+ import { _ as x } from "../AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
2
+ import { _ as w } from "../Menu.vue_vue_type_script_setup_true_lang-DsFOeCVe.js";
3
+ import { _ as I } from "../MenuButton.vue_vue_type_script_setup_true_lang-AGbN9r5q.js";
4
+ import { _ as v } from "../Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
5
+ import { _ as P } from "../Toaster.vue_vue_type_script_setup_true_lang-55boRLAj.js";
6
+ import { _ as y } from "../Tooltip.vue_vue_type_script_setup_true_lang-mErNPt8e.js";
7
+ import { t as k } from "../toast-CqSDTWRX.js";
8
+ import { I as E, u as M } from "../dialogStack-DZZg55w0.js";
9
+ import { I as S, u as O } from "../useDialog-CXR3hN0G.js";
10
+ import { C as K, u as N } from "../mediaQuery-CygcXmFW.js";
11
+ import { _ as j } from "../PhotoViewer.vue_vue_type_script_setup_true_lang-CY5EZiyK.js";
12
+ import { defineComponent as r, openBlock as s, createElementBlock as n, normalizeClass as l, toDisplayString as p } from "vue";
13
+ const c = ["aria-disabled"], d = /* @__PURE__ */ r({
36
14
  __name: "PhotoViewerAction",
37
15
  props: {
38
16
  label: {},
@@ -40,34 +18,34 @@ const m = ["aria-label", "data-pressed"], v = /* @__PURE__ */ i({
40
18
  disabled: { type: Boolean }
41
19
  },
42
20
  emits: ["select"],
43
- setup(s, { emit: e }) {
44
- const t = s, o = e;
45
- function r() {
46
- t.disabled || o("select");
21
+ setup(o, { emit: t }) {
22
+ const e = o, i = t;
23
+ function a() {
24
+ e.disabled || i("select");
47
25
  }
48
- return (_, x) => (n(), a("button", {
26
+ return (f, u) => (s(), n("button", {
49
27
  type: "button",
50
- "aria-disabled": t.disabled || void 0,
28
+ "aria-disabled": e.disabled || void 0,
51
29
  "data-part": "photo-viewer-action",
52
- class: f(["flex min-h-11 shrink-0 cursor-pointer items-center justify-center rounded-full bg-white/8 px-4 text-subheadline font-medium whitespace-nowrap transition-colors duration-motion-fast hover:bg-white/16 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#6ee7b7] aria-disabled:cursor-default aria-disabled:opacity-40 aria-disabled:hover:bg-white/8", t.tone === "critical" ? "text-[#ff8a80]" : "text-[#f1f5f3]"]),
53
- onClick: r
54
- }, p(t.label), 11, b));
30
+ class: l(["flex min-h-11 shrink-0 cursor-pointer items-center justify-center rounded-full bg-white/8 px-4 text-subheadline font-medium whitespace-nowrap transition-colors duration-motion-fast hover:bg-white/16 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#6ee7b7] aria-disabled:cursor-default aria-disabled:opacity-40 aria-disabled:hover:bg-white/8", e.tone === "critical" ? "text-[#ff8a80]" : "text-[#f1f5f3]"]),
31
+ onClick: a
32
+ }, p(e.label), 11, c));
55
33
  }
56
34
  });
57
35
  export {
58
- P as AlertDialog,
59
- L as COMPACT_MEDIA_QUERY,
60
- $ as INERT_SKIP_ATTR,
61
- j as INITIAL_FOCUS_SKIP_ATTR,
62
- y as Menu,
63
- v as MenuButton,
64
- Q as PhotoViewer,
65
- C as PhotoViewerAction,
66
- k as Popover,
67
- D as Toaster,
68
- E as Tooltip,
69
- S as toast,
70
- U as useCompactPresentation,
71
- z as useDialog,
72
- N as useOpenDialogCount
36
+ x as AlertDialog,
37
+ K as COMPACT_MEDIA_QUERY,
38
+ E as INERT_SKIP_ATTR,
39
+ S as INITIAL_FOCUS_SKIP_ATTR,
40
+ w as Menu,
41
+ I as MenuButton,
42
+ j as PhotoViewer,
43
+ d as PhotoViewerAction,
44
+ v as Popover,
45
+ P as Toaster,
46
+ y as Tooltip,
47
+ k as toast,
48
+ N as useCompactPresentation,
49
+ O as useDialog,
50
+ M as useOpenDialogCount
73
51
  };
@@ -8,7 +8,7 @@ import { _ as ue } from "../RecordHeader.vue_vue_type_script_setup_true_lang-fmx
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-Dmv6TpCi.js";
11
+ import { _ as ye } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-Ci04hApd.js";
12
12
  import { a as Se, _ as Ce } from "../SectionList.vue_vue_type_script_setup_true_lang-wyW7n3Uq.js";
13
13
  import { _ as A } from "../Panel.vue_vue_type_script_setup_true_lang-BA0u_DtS.js";
14
14
  const K = ["aria-label"], M = ["aria-label"], N = ["aria-selected", "tabindex", "onClick"], R = { class: "relative" }, E = {
@@ -1,14 +1,13 @@
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 { a as Oe, c as Re, _ as Be, f as Ee, b as ze } from "../control-B4SdblL6.js";
4
+ import { d as se, a as Oe, c as Re, _ as Be, f as Ee, b as ze } from "../options-g8RwEhBk.js";
5
5
  import { _ as q } from "../Icon.vue_vue_type_script_lang-D7oC-d-S.js";
6
- import { _ as se } from "../CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js";
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";
8
8
  import { i as ve } from "../intlLocale-CeRU44qJ.js";
9
9
  import { AsYouType as L, validatePhoneNumberLength as qe, parsePhoneNumberFromString as he, getCountries as Ae, getCountryCallingCode as Le } from "libphonenumber-js/max";
10
10
  import We from "libphonenumber-js/max/metadata";
11
- import { f as ue } from "../options-Ba_0uLWN.js";
12
11
  const ce = ["HR", "BA", "SI", "RS"], Ke = 15;
13
12
  function ye(t) {
14
13
  return We.country_calling_codes[t]?.[0];
@@ -57,7 +56,7 @@ function be(t) {
57
56
  const a = Ye(t), o = qe(t);
58
57
  return o === "TOO_SHORT" ? { kind: "too_short", country: a } : o === "TOO_LONG" ? { kind: "too_long", country: a } : o !== void 0 ? { kind: "invalid", country: a } : he(t)?.isValid() ? null : { kind: "invalid", country: a };
59
58
  }
60
- const Mt = (t) => be(t) === null;
59
+ const Dt = (t) => be(t) === null;
61
60
  function ge(t, a) {
62
61
  try {
63
62
  return new Intl.DisplayNames([ve(a)], { type: "region" }).of(t) ?? t;
@@ -66,9 +65,9 @@ function ge(t, a) {
66
65
  }
67
66
  }
68
67
  function Je(t, a, o) {
69
- const r = ue(t.trim());
68
+ const r = se(t.trim());
70
69
  if (r === "") return o;
71
- const l = r.replace(/\D/g, ""), x = new Intl.DisplayNames([ve(a)], { type: "region" }), p = (h) => ue(x.of(h) ?? h), _ = r.startsWith("+") || /^\d+$/.test(r);
70
+ const l = r.replace(/\D/g, ""), x = new Intl.DisplayNames([ve(a)], { type: "region" }), p = (h) => se(x.of(h) ?? h), _ = r.startsWith("+") || /^\d+$/.test(r);
72
71
  return o.filter((h) => _ ? W(h).startsWith(l) : p(h).includes(r) || h.toLowerCase() === r);
73
72
  }
74
73
  const Qe = ["id", "disabled", "aria-label", "aria-expanded"], Ze = { class: "tabular-nums" }, et = ["id", "aria-label"], tt = {
@@ -160,7 +159,7 @@ const Qe = ["id", "disabled", "aria-label", "aria-expanded"], Ze = { class: "tab
160
159
  onClick: i[0] || (i[0] = (c) => C.value ? N(!0) : j()),
161
160
  onKeydown: B
162
161
  }, [
163
- M(se, { country: l.value }, null, 8, ["country"]),
162
+ M(ue, { country: l.value }, null, 8, ["country"]),
164
163
  f("span", Ze, T(s(de)(l.value)), 1),
165
164
  M(s(q), {
166
165
  name: "arrowDownSLine",
@@ -199,7 +198,7 @@ const Qe = ["id", "disabled", "aria-label", "aria-expanded"], Ze = { class: "tab
199
198
  onMouseenter: (m) => d.value = (z.value[n] ?? 0) + b,
200
199
  onClick: (m) => R(u)
201
200
  }, [
202
- M(se, { country: u }, null, 8, ["country"]),
201
+ M(ue, { country: u }, null, 8, ["country"]),
203
202
  f("span", {
204
203
  class: P(["min-w-0 flex-1 truncate text-content-strong", u === l.value ? "font-semibold" : ""])
205
204
  }, T(S(u)), 3),
@@ -239,7 +238,7 @@ const Qe = ["id", "disabled", "aria-label", "aria-expanded"], Ze = { class: "tab
239
238
  }, ft = ["href", "aria-label", "title"], mt = ["href", "aria-label", "title"], pt = ["aria-label", "title"], vt = {
240
239
  class: "sr-only",
241
240
  role: "status"
242
- }, Tt = /* @__PURE__ */ fe({
241
+ }, Mt = /* @__PURE__ */ fe({
243
242
  __name: "PhoneField",
244
243
  props: /* @__PURE__ */ ae(/* @__PURE__ */ Pe({
245
244
  label: {},
@@ -430,11 +429,11 @@ const Qe = ["id", "disabled", "aria-label", "aria-expanded"], Ze = { class: "tab
430
429
  });
431
430
  export {
432
431
  ce as COMMON_COUNTRIES,
433
- Tt as PhoneField,
432
+ Mt as PhoneField,
434
433
  ge as countryName,
435
434
  de as dialCode,
436
435
  He as formatInternational,
437
- Mt as isValidPhone,
436
+ Dt as isValidPhone,
438
437
  Ye as phoneCountry,
439
438
  st as phoneDefaultsKey,
440
439
  Xe as phoneKind,
@@ -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-PZpUkkMS.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-PZpUkkMS.js";
8
+ import { u as E } from "../platform-Dx6STiwY.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-Dx6STiwY.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-J5HoyGNJ.js";
12
+ import { _ as Z } from "../AccessGate.vue_vue_type_script_setup_true_lang-DZ9GcLC1.js";
13
13
  class m extends Error {
14
14
  constructor(e, r = [], n) {
15
15
  super(r.length > 0 ? `${e}: ${r.join("; ")}` : e);
@@ -30,12 +30,17 @@ export interface PlatformOptions<U extends SessionUser, C extends BootstrapConfi
30
30
  */
31
31
  session?: SessionAdapter<U> | ((http: HttpClient) => SessionAdapter<U>);
32
32
  /**
33
- * Called once when a request is answered 401 while signed in, before the session is given up
34
- * (concurrent 401s share one call). Renew it with the platform's client (for example a refresh-token call, then
33
+ * How the session is renewed (`session.renew()`): when a request is answered 401 while signed in, before the
34
+ * session is given up, and when `keepSessionAlive` finds it due. Concurrent renewals, whoever asked, share one call. Renew it with the platform's client (for example a refresh-token call, then
35
35
  * `session.refresh()`) and return true: the failed request is sent again. False or a throw expires
36
36
  * the session. Without it a 401 expires the session at once.
37
37
  */
38
38
  renewSession?: (session: Session<U>, http: HttpClient) => Promise<boolean>;
39
+ /**
40
+ * False while the session cannot be renewed, for example an embed session (a bearer token with no refresh token):
41
+ * a 401 then ends the session at once and `keepSessionAlive` stays idle. Asked each time. Default: renewable when `renewSession` is given.
42
+ */
43
+ renewable?: () => boolean;
39
44
  /** Called after a 401 expired a signed-in session: the application decides (usually: go to the login page). */
40
45
  onSessionExpired?: () => void;
41
46
  /** Called with the failure of a session load or of a before-sign-out hook. */
@@ -89,6 +89,19 @@ export interface Session<U extends SessionUser = SessionUser> {
89
89
  update(patch: SessionPatch<U>): void;
90
90
  /** The server rejected the session (401): signed in becomes anonymous with reason `expired`. No-op when nobody is signed in. */
91
91
  expire(): void;
92
+ /**
93
+ * Whether this session can be renewed at all: the platform was given a `renewSession` and its `renewable()` says
94
+ * yes. An embed session (a bearer token with no refresh token) is not: nothing renews it, and `keepSessionAlive` idles.
95
+ */
96
+ readonly renewable: boolean;
97
+ /**
98
+ * The one way a session is renewed: the timer's (`keepSessionAlive`), the client's after a 401, and an application's own
99
+ * fetch wrapper all call it. Concurrent callers share one in-flight renewal, so the refresh token (which go-core rotates
100
+ * on every use) is presented once. Resolves true when the session goes on (the failed request may be sent again), false
101
+ * when it ended: a refused or throwing renewal, or a session that is not `renewable`, expires it (`onExpired` runs once).
102
+ * False without effect when nobody is signed in.
103
+ */
104
+ renew(): Promise<boolean>;
92
105
  /**
93
106
  * Runs the before-sign-out hooks (together, at most `beforeSignOutTimeout` ms; a failing or late one is reported
94
107
  * to `onError` and never blocks), then signs out locally (state cleared before anything else can read it), then
@@ -114,5 +127,9 @@ export interface SessionOptions<U extends SessionUser = SessionUser> {
114
127
  beforeSignOut?: BeforeSignOutHook<U>;
115
128
  /** Called after `expire()` moved a signed-in session to anonymous. */
116
129
  onExpired?: () => void;
130
+ /** What a renewal does: renew the tokens and read the session again; true when it goes on. Without it the session is not `renewable`. */
131
+ renew?: (session: Session<U>) => Promise<boolean>;
132
+ /** Asked at each renewal and by `keepSessionAlive`; false when this session cannot be renewed (an embed token). Default true. */
133
+ renewable?: () => boolean;
117
134
  }
118
135
  export declare function createSession<U extends SessionUser = SessionUser>(adapter: SessionAdapter<U>, options?: SessionOptions<U>): Session<U>;