@wssto2/vue-core 0.4.28 → 0.5.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 (138) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-J5HoyGNJ.js → AccessGate.vue_vue_type_script_setup_true_lang-Nw1IsB8N.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-CoGI2_GL.js} +7 -7
  5. package/dist/{Changes-MG77TDwz.js → Changes-Cwfe6wbX.js} +6 -6
  6. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-Bnpv9TEj.js → CollectionPage.vue_vue_type_script_setup_true_lang-CtvHtFLy.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-DyA5Dqn0.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-DTEfxWls.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-CRZoUajV.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-DLY81mvN.js +764 -0
  17. package/dist/RoleEditor.vue_vue_type_script_setup_true_lang-gXbxXG2R.js +325 -0
  18. package/dist/RolePage-B9t586Q8.js +314 -0
  19. package/dist/{RolesPage-B5RwSZ89.js → RolesPage-BRdG-OSL.js} +6 -6
  20. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-Dmv6TpCi.js → SectionNavigator.vue_vue_type_script_setup_true_lang-Cy9Oi0ts.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-vGyUOnPG.js} +5 -5
  25. package/dist/SettingsPage-V8WeADZZ.js +632 -0
  26. package/dist/{SignIn-COThB9XN.js → SignIn-C-3i8RG6.js} +7 -7
  27. package/dist/{SignInPage-CdzgSvRm.js → SignInPage-D2NA3VKU.js} +4 -4
  28. package/dist/SignIns-eoYPB6kB.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-BaQl2zzQ.js} +13 -13
  34. package/dist/{UsersList-Chq8yM5C.js → UsersList-BfXWgH5K.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 +6 -6
  44. package/dist/client/index.js +19 -11
  45. package/dist/{client-k9euDWF4.js → client-BHPFfBj3.js} +20 -20
  46. package/dist/collection/index.js +3 -3
  47. package/dist/content/index.js +66 -37
  48. package/dist/{contributions-BVBZP5Jb.js → contributions-DVQPcjJz.js} +1 -1
  49. package/dist/{describeError-B-NMa--w.js → describeError-BqGAUZgX.js} +1 -1
  50. package/dist/{error-CD7x0Jrz.js → error-Bb_dr_Ay.js} +2 -2
  51. package/dist/{fieldMessages-6HVzSDqG.js → fieldMessages-DTXpWnBd.js} +7 -7
  52. package/dist/form/index.js +1235 -1412
  53. package/dist/{guards-BJZjc3FZ.js → guards-DRh4zmxO.js} +1 -1
  54. package/dist/{http-BFfkA7gN.js → http-D_pBg22D.js} +1 -1
  55. package/dist/i18n/index.d.ts +2 -2
  56. package/dist/i18n/index.js +30 -30
  57. package/dist/identity/index.d.ts +2 -0
  58. package/dist/identity/index.js +8 -6
  59. package/dist/identity/profile/DetailsFields.vue.d.ts +8 -0
  60. package/dist/identity/profile/{DetailsPanel.vue.d.ts → DetailsGroup.vue.d.ts} +4 -1
  61. package/dist/identity/profile/{EmailPanel.vue.d.ts → EmailGroup.vue.d.ts} +1 -1
  62. package/dist/identity/profile/SignInsGroup.vue.d.ts +2 -0
  63. package/dist/identity/profile/profileSections.d.ts +37 -0
  64. package/dist/identity/shared/SignInList.vue.d.ts +22 -0
  65. package/dist/identity/shared/deviceLabel.d.ts +7 -0
  66. package/dist/identity/useReturnToOwnAccount.d.ts +10 -0
  67. package/dist/identity/users/context.d.ts +3 -0
  68. package/dist/identity/users/feature.d.ts +3 -0
  69. package/dist/index-WkbzC_ee.js +745 -0
  70. package/dist/index-g-qbUeTk.js +630 -0
  71. package/dist/index-kqk7Mclb.js +480 -0
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.js +1 -1
  74. package/dist/modules/notification/entities.d.ts +19 -0
  75. package/dist/modules/notification/routes.d.ts +25 -1
  76. package/dist/modules/notification/schemas.d.ts +24 -0
  77. package/dist/{navigation-DpcDF0rX.js → navigation-DuQwti76.js} +1 -1
  78. package/dist/{neighbors-RVQ4O3Qv.js → neighbors-IMRQ4rkm.js} +22 -22
  79. package/dist/notifications/context.d.ts +24 -1
  80. package/dist/notifications/feature.d.ts +10 -1
  81. package/dist/notifications/index.d.ts +1 -1
  82. package/dist/notifications/index.js +1 -1
  83. package/dist/notifications/push/DevicesSection.vue.d.ts +12 -0
  84. package/dist/notifications/push/ThisDeviceSection.vue.d.ts +15 -0
  85. package/dist/notifications/push/browser.d.ts +40 -0
  86. package/dist/notifications/push/devices.d.ts +15 -0
  87. package/dist/notifications/push/thisDevice.d.ts +28 -0
  88. package/dist/notifications/settings/ChannelsSection.vue.d.ts +16 -0
  89. package/dist/notifications/settings/{QuietHoursPanel.vue.d.ts → QuietHoursSection.vue.d.ts} +3 -1
  90. package/dist/notifications/settings/SettingsBody.vue.d.ts +17 -0
  91. package/dist/notifications/settings/settings.d.ts +4 -3
  92. package/dist/notifications/settings/state.d.ts +4 -2
  93. package/dist/options-g8RwEhBk.js +366 -0
  94. package/dist/overlay/index.js +37 -59
  95. package/dist/page/index.js +1 -1
  96. package/dist/phone/index.js +10 -11
  97. package/dist/platform/index.js +3 -3
  98. package/dist/{platform-PZpUkkMS.js → platform-Dl1fbScN.js} +2 -2
  99. package/dist/push-worker/index.d.ts +91 -0
  100. package/dist/push-worker/index.js +54 -0
  101. package/dist/resource/index.js +1 -1
  102. package/dist/{routeResource-DlTsGTg_.js → routeResource-CcYA75T2.js} +2 -2
  103. package/dist/router/index.js +3 -3
  104. package/dist/{sections-CeZl-Jxg.js → sections-D5rgQ4YB.js} +1 -1
  105. package/dist/shell/index.js +3 -3
  106. package/dist/signInEvents-DWShrJox.js +30 -0
  107. package/dist/state/index.js +1 -1
  108. package/dist/{status-dGvfh1TP.js → status-C2gHqkj6.js} +2 -2
  109. package/dist/styles.css +1 -1
  110. package/dist/{suggestions-DHJFKB26.js → suggestions-CfFTHi8y.js} +2 -2
  111. package/dist/testing/index.js +1 -1
  112. package/dist/{useCommand-Cj-APj-P.js → useCommand-CtqheKUv.js} +2 -2
  113. package/dist/useGroupSheet-ATvc0IiM.js +278 -0
  114. package/dist/{useLoad-M7V-AVwR.js → useLoad-W4tfxmm5.js} +1 -1
  115. package/dist/{useResourceForm-tGYTfKhH.js → useResourceForm-CJfl8rj_.js} +1 -1
  116. package/package.json +6 -2
  117. package/dist/KeyValue.vue_vue_type_script_setup_true_lang-wcZcvnow.js +0 -35
  118. package/dist/OtpInput.vue_vue_type_script_setup_true_lang-gp4FfWAH.js +0 -95
  119. package/dist/PanelActions.vue_vue_type_script_setup_true_lang-E9VdIGkf.js +0 -46
  120. package/dist/ProfilePage-C8VhiKIh.js +0 -654
  121. package/dist/RoleEditor.vue_vue_type_script_setup_true_lang-DRHmjA9w.js +0 -300
  122. package/dist/RolePage-ODFu68Ce.js +0 -315
  123. package/dist/SessionList.vue_vue_type_script_setup_true_lang-D5qm77Zo.js +0 -111
  124. package/dist/SettingsPage-C3fPSmi7.js +0 -255
  125. package/dist/SignInTable.vue_vue_type_script_setup_true_lang-Bs0yTi2E.js +0 -79
  126. package/dist/SignIns-cztICmqt.js +0 -66
  127. package/dist/control-B4SdblL6.js +0 -350
  128. package/dist/identity/profile/PanelActions.vue.d.ts +0 -17
  129. package/dist/index-BhtJR4c_.js +0 -459
  130. package/dist/index-C3E6DcO0.js +0 -706
  131. package/dist/index-sTBBHqNG.js +0 -504
  132. package/dist/notifications/settings/EmailPanel.vue.d.ts +0 -14
  133. package/dist/options-Ba_0uLWN.js +0 -18
  134. package/dist/route-goWMxDUN.js +0 -13
  135. package/dist/transport-BnP7WC0Y.js +0 -4
  136. /package/dist/identity/{profile/PasswordPanel.vue.d.ts → ReturnMenuItem.vue.d.ts} +0 -0
  137. /package/dist/identity/profile/{SessionsPanel.vue.d.ts → PasswordGroup.vue.d.ts} +0 -0
  138. /package/dist/identity/profile/{SignInsPanel.vue.d.ts → SessionsGroup.vue.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,72 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 — 2026-10-13
4
+
5
+ The screens for go-core v1.8.0. Web push comes into the library (owner 2026-10-12: push belongs in go-core and vue-core). My profile and the notification settings move to the current grouped-rows look. Apps get their own sections on both pages and their own role settings.
6
+
7
+ ### Requires
8
+ - **go-core `v1.8.0`**: the push and device routes, the push settings channel, `authz.invalid` problems as objects, and compare of any two roles. `src/modules` is regenerated. **`vue` 3.5.19 or later**, unchanged.
9
+
10
+ ### New
11
+ - **Web push.** It is on by default; `notificationsFeature({ push: false })` turns it off.
12
+ - **This device:** turn push on or off on this browser. One state shows at a time: unsupported, iPhone or iPad in a Safari tab (the home-screen steps), blocked, off, or on. The permission is asked only from the button.
13
+ - **Your devices:** a list with "This device", "Disabled", last use and last push. Rename, Send test and Remove are in the row's ⋯ menu; Remove asks first.
14
+ - **Per category:** each category is a group with an E-mail row and a Push row. A setting the organisation enforces is locked and says so.
15
+ - **Session sync:** once per session, an existing subscription is registered again. That refreshes the device's last use, re-enables a disabled device, and moves a shared computer's endpoint to whoever is signed in. A subscription made with an old key is replaced. Signing out removes the subscription at the account and in the browser.
16
+ - **`@wssto2/vue-core/push-worker`.** The app's own service worker calls `installPushHandlers({ icon?, badge?, fallbackTitle? })` once.
17
+ - It shows each push from go-core's payload (`notification_id, category, title, body, link, tag, unread_count`) and sets the app badge.
18
+ - A tap focuses a window of the app and navigates it to the link. A link to another origin opens "/".
19
+ - Also exported: `readPayload`, `sameOriginLink`, and the types `PushPayload`, `PushHandlersOptions`, `PushWorkerScope`.
20
+ - **`usersFeature({ profileSections })`.** App-owned sections on My profile: `{ id, component, after?|before?, visible?(profile) }`. The component renders its own `FormGroup`s, gets `profile`, and may emit `updated`. `ActionRow` is exported from `/identity`, and the types are `ProfileSection` and `ProfilePanel`.
21
+ - **`notificationsFeature({ settingsSections })`.** App-owned sections on the notification settings page: `{ id, titleKey, descriptionKey?, component, order?, visible?(preferences) }`. The page draws the title, and the component renders `FormGroup`s and gets `preferences`. Built-in positions: channels 0, quiet hours 10, this device 20, devices 30.
22
+ - **`accessFeature({ roleConstraints })`.** An app's choice stored in a role's `attrs`: `[{ attribute, labelKey, options: [{ value, labelKey }], anyLabelKey? }]`.
23
+ - The attribute is one lowercase word, as go-core requires.
24
+ - It is a select row in the role editor and a read row on a predefined role. "All" leaves the key out.
25
+ - Types: `RoleConstraint`, `RoleConstraintOption`.
26
+ - **`accessFeature({ problems })`.** The app's texts for its own `authz.invalid` problem codes. A refused role names every problem, one sentence each, with `{permission}` as the permission's label and `{detail}`.
27
+ - The library has texts for its own 12 codes, plus a fallback sentence.
28
+ - Exported: `useDescribeRefusal`, `roleProblems`, type `RoleProblem`.
29
+ - **"Return to my account" in the account menu** while signed in as someone else, next to the banner. Both use `useReturnToOwnAccount()`.
30
+
31
+ ### Changes to existing behaviour
32
+ - **My profile is grouped rows** in one readable column, with no page Save.
33
+ - **Details:** read rows. Edit opens a sheet with one Save; the username is read-only and keeps its note.
34
+ - **E-mail:** the current address, then "Change e-mail address". A pending change shows the new address and how long the code is valid, with "Enter code" and "Cancel the change".
35
+ - **Password:** a row that opens a dialog. Every other device is signed out.
36
+ - **Sessions:** grouped rows. "Sign out" is the trailing action from `md` up and sits under the facts on a phone, with no separator ever starting or ending a line.
37
+ - **Sign-in history:** grouped rows labelled by device ("Chrome · Linux"), with the raw User-Agent as a tooltip. The users record page's sign-in table uses the same label.
38
+ - **Notification settings are grouped sections** in one readable column, with no cards.
39
+ - Quiet hours save as they change: the switch at once, a time when it is committed and valid. A failure restores the last saved values and says so under the group.
40
+ - **Compare any two roles.** Compare offers every role the actor may view, and every role page has it, predefined and computed ones included. Replace is still for predefined roles only.
41
+ - **A person outside the admin's reach** (404) shows the not-found state, not an error.
42
+ - **Refusals:**
43
+ - A refused login-as names the reason, or "You cannot sign in as {name}." when the server gives none.
44
+ - A language the server refuses (`identity.locale.unsupported`) says so, and the app goes back to the language the server kept.
45
+ - Resend with no code pending shows its sentence.
46
+ - **`FormGroup`'s header action** (Edit) sits on the title's baseline.
47
+ - **Pinned and unchanged:**
48
+ - the code entry sends once on the sixth digit, typed or pasted;
49
+ - the code's expiry time uses the app's time format.
50
+
51
+ ### Removed
52
+ - `DetailsPanel`, `EmailPanel`, `PasswordPanel`, `SessionsPanel`, `SignInsPanel` and `PanelActions` (My profile).
53
+ - `EmailPanel` of the notification settings, now `ChannelsSection`. The panels are now `QuietHoursSection`, `ThisDeviceSection` and `DevicesSection`.
54
+ - Message keys `core.profile.details.submit`, `quiet.saved`, `quiet.submit`, `push.on_description`, `push.off_description` and `email.note`.
55
+
56
+ ### For ARV (H4, H6, H8)
57
+ - **`usersFeature`:** `profileSections` for mobile phone, dealer and location, roles and preferences. ARV's profile panels and `VerifyCodePanel` go.
58
+ - **`accessFeature`:**
59
+ - `roleConstraints` with `vehiclekind` (all, new only, used only);
60
+ - `problems` with `vehicle_kind_conflict`. ARV's `errors.authz.invalid` override stays as the fallback.
61
+ - **`notificationsFeature`:** `settingsSections` with the dealer policies.
62
+ - These go: `ThisDevicePanel`, `PushPrompt`, `DevicesPanel`, `ChannelPreferencesPanel`, `QuietHoursPanel`, `usePushSubscription`, `utils/push.ts`, `pushApi` and `onBeforeLogout("notification.push")`.
63
+ - **`static/app/sw.js`:**
64
+ - It keeps its caching and calls `installPushHandlers({ icon: "/static/app/icon-192.png", fallbackTitle: "ARV" })`.
65
+ - Its own Web Push block and `pushsubscriptionchange` handler go, as does the SPA's `notification-open` listener.
66
+
67
+ ### Not yet
68
+ - Tapping a notification reloads the app (`client.navigate`). Routing it inside the app, and marking it read, are a follow-up.
69
+
3
70
  ## 0.4.28 — 2026-10-12
4
71
 
5
72
  From the owner's review of ARV W2's screenshots of 0.4.27: the changed-by cell and the row menu are quieter. Two items, one commit each; no new API.
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as t, computed as i, renderSlot as n } from "vue";
2
- import { u as l } from "./platform-PZpUkkMS.js";
2
+ import { u as l } from "./platform-Dl1fbScN.js";
3
3
  const m = /* @__PURE__ */ t({
4
4
  __name: "AccessGate",
5
5
  props: {
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as r, openBlock as s, createBlock as d, unref as n, withCtx as f, createElementVNode as t, normalizeClass as m, toDisplayString as l, createElementBlock as u, createCommentVNode as p, createVNode as b } from "vue";
2
- import { e as _ } from "./control-B4SdblL6.js";
2
+ import { g as _ } from "./options-g8RwEhBk.js";
3
3
  import { _ as x } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
4
4
  const k = ["disabled"], y = { class: "flex min-w-0 flex-1 flex-col" }, h = {
5
5
  key: 0,
@@ -3,15 +3,15 @@ import { useI18n as q } from "vue-i18n";
3
3
  import { _ as D } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
4
4
  import { _ as I } from "./Tabs.vue_vue_type_script_setup_true_lang-CcMcE38r.js";
5
5
  import { u as O } from "./format-D8X4zsx6.js";
6
- import { _ as U } from "./DateField.vue_vue_type_script_setup_true_lang-CpuH0WTl.js";
7
- import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js";
8
- import { e as z } from "./control-B4SdblL6.js";
9
- import { P as G, c as H, i as J } from "./index-BhtJR4c_.js";
10
- import { u as K } from "./platform-PZpUkkMS.js";
11
- import { b as M } from "./routeResource-DlTsGTg_.js";
6
+ import { _ as U } from "./DateField.vue_vue_type_script_setup_true_lang-DRuWzSaX.js";
7
+ import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-BPchlRCl.js";
8
+ import { g as z } from "./options-g8RwEhBk.js";
9
+ import { P as G, c as H, i as J } from "./index-kqk7Mclb.js";
10
+ import { u as K } from "./platform-Dl1fbScN.js";
11
+ import { b as M } from "./routeResource-CcYA75T2.js";
12
12
  import { _ as Q } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
13
13
  import { _ as W } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
14
- import { u as X } from "./useLoad-M7V-AVwR.js";
14
+ import { u as X } from "./useLoad-W4tfxmm5.js";
15
15
  import { _ as Y } from "./PageBar.vue_vue_type_script_setup_true_lang-B7qdEeej.js";
16
16
  import { _ as Z } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
17
17
  const ee = {
@@ -1,15 +1,15 @@
1
1
  import { defineComponent as k, computed as N, openBlock as n, createBlock as u, unref as a, withCtx as g, createElementBlock as p, Fragment as _, renderList as $, createElementVNode as i, toDisplayString as h, createCommentVNode as C, ref as x, watch as b, createVNode as y } from "vue";
2
2
  import { useI18n as E } from "vue-i18n";
3
- import { P as V, i as R } from "./index-BhtJR4c_.js";
4
- import { u as S } from "./platform-PZpUkkMS.js";
5
- import { b as B } from "./routeResource-DlTsGTg_.js";
3
+ import { P as V, i as R } from "./index-kqk7Mclb.js";
4
+ import { u as S } from "./platform-Dl1fbScN.js";
5
+ import { b as B } from "./routeResource-CcYA75T2.js";
6
6
  import { _ as F } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
7
- import { u as L } from "./useLoad-M7V-AVwR.js";
7
+ import { u as L } from "./useLoad-W4tfxmm5.js";
8
8
  import { _ as P } from "./Avatar.vue_vue_type_script_setup_true_lang-BPj_fkJR.js";
9
9
  import { _ as I } from "./IconTile.vue_vue_type_script_setup_true_lang-_FXvaj93.js";
10
10
  import { u as O } from "./format-D8X4zsx6.js";
11
- import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js";
12
- import { e as U } from "./control-B4SdblL6.js";
11
+ import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-BPchlRCl.js";
12
+ import { g as U } from "./options-g8RwEhBk.js";
13
13
  import { _ as q } from "./PageBar.vue_vue_type_script_setup_true_lang-B7qdEeej.js";
14
14
  import { _ as z } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
15
15
  import { _ as A } from "./ViewTabs.vue_vue_type_script_setup_true_lang-BJIoZAlH.js";
@@ -1,7 +1,7 @@
1
1
  import { hasInjectionContext as lt, inject as ot, shallowRef as xe, computed as k, watch as Ve, toValue as Se, ref as ie, getCurrentScope as nt, onScopeDispose as st, defineComponent as be, openBlock as u, createElementBlock as y, createVNode as O, unref as t, createElementVNode as i, toDisplayString as g, Fragment as ee, renderList as le, createCommentVNode as F, createBlock as W, mergeProps as ve, withCtx as q, createTextVNode as G, normalizeClass as ue, useTemplateRef as fe, withModifiers as Ke, withDirectives as Le, vModelText as Fe, nextTick as at, onBeforeUnmount as rt, onMounted as it, renderSlot as ge, useSlots as We, createSlots as Qe, normalizeProps as Xe, guardReactiveProps as Je } from "vue";
2
2
  import { routerKey as ct } from "vue-router";
3
- import { i as qe, a as ut } from "./error-CD7x0Jrz.js";
4
- import { a as dt, d as Re, o as ft, L as Te, e as je, w as pt, b as vt } from "./http-BFfkA7gN.js";
3
+ import { a as qe, i as ut } from "./error-Bb_dr_Ay.js";
4
+ import { a as dt, d as Re, o as ft, L as Te, e as je, w as pt, b as vt } from "./http-D_pBg22D.js";
5
5
  import { a as mt } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-GUTIXuNd.js";
6
6
  import { useI18n as he } from "vue-i18n";
7
7
  import { _ as ce, u as Ne } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
@@ -14,8 +14,8 @@ import { u as bt, _ as gt } from "./rowLayout-BBFyLbOl.js";
14
14
  import { _ as Ye } from "./Menu.vue_vue_type_script_setup_true_lang-DsFOeCVe.js";
15
15
  import { _ as Ze } from "./Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
16
16
  import { _ as we } from "./ToneDot.vue_vue_type_script_setup_true_lang-99rNn-L5.js";
17
- import { _ as ht } from "./NumberField.vue_vue_type_script_setup_true_lang-DaE5BLm4.js";
18
- import { _ as yt } from "./SelectField.vue_vue_type_script_setup_true_lang-C3FbRQW7.js";
17
+ import { _ as ht } from "./NumberField.vue_vue_type_script_setup_true_lang-ButMV_sf.js";
18
+ import { _ as yt } from "./SelectField.vue_vue_type_script_setup_true_lang-BzQC1qDQ.js";
19
19
  import { a as _t } from "./mediaQuery-CygcXmFW.js";
20
20
  import { _ as xt } from "./Sheet.vue_vue_type_script_setup_true_lang-DgOFV4fa.js";
21
21
  import { t as ke } from "./toast-CqSDTWRX.js";
@@ -5,7 +5,7 @@ import { u as W } from "./format-D8X4zsx6.js";
5
5
  import { _ as de } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
6
6
  import { u as ue } from "./mediaQuery-CygcXmFW.js";
7
7
  import { _ as ce } from "./Popover.vue_vue_type_script_setup_true_lang-C70GrCP7.js";
8
- import { c as me, _ as fe, f as pe, b as be } from "./control-B4SdblL6.js";
8
+ import { c as me, _ as fe, f as pe, b as be } from "./options-g8RwEhBk.js";
9
9
  import { e as q, f as j, m as X, g as Z, h as ve, j as ye, u as ke, k as ge, _ as he, l as xe, c as we } from "./useTypedEntry-C7k7Dyl-.js";
10
10
  const _e = ["d", "m", "y"];
11
11
  function $e(o) {
@@ -1,15 +1,15 @@
1
1
  import { defineComponent as B, useTemplateRef as C, computed as y, ref as v, openBlock as D, createBlock as z, unref as r, withCtx as m, createVNode as F, createElementVNode as b, normalizeClass as $, toDisplayString as h } from "vue";
2
2
  import { useI18n as q } from "vue-i18n";
3
- import { a as k } from "./error-CD7x0Jrz.js";
4
- import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-Bnpv9TEj.js";
5
- import { u as P } from "./describeError-B-NMa--w.js";
3
+ import { i as k } from "./error-Bb_dr_Ay.js";
4
+ import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-CtvHtFLy.js";
5
+ import { u as P } from "./describeError-BqGAUZgX.js";
6
6
  import { u as I } from "./format-D8X4zsx6.js";
7
- import { e as a, R as O } from "./index-sTBBHqNG.js";
7
+ import { e as a, R as O } from "./index-g-qbUeTk.js";
8
8
  import { _ as W } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
9
9
  import { t as i } from "./toast-CqSDTWRX.js";
10
- import { u as Y } from "./useLoad-M7V-AVwR.js";
11
- import { u as j } from "./platform-PZpUkkMS.js";
12
- import { a as G, r as H } from "./http-BFfkA7gN.js";
10
+ import { u as Y } from "./useLoad-W4tfxmm5.js";
11
+ import { u as j } from "./platform-Dl1fbScN.js";
12
+ import { a as G, r as H } from "./http-D_pBg22D.js";
13
13
  function J(u) {
14
14
  return G({
15
15
  id: "events.deadletters",
@@ -3,8 +3,8 @@ var ee = (n, e, r) => e in n ? K(n, e, { enumerable: !0, configurable: !0, writa
3
3
  var M = (n, e, r) => ee(n, typeof e != "symbol" ? e + "" : e, r);
4
4
  import { shallowRef as S, computed as A, toRaw as te, reactive as re, ref as G, watch as se, nextTick as ne, toValue as ae, defineComponent as le, unref as w, openBlock as y, createBlock as ie, withCtx as ue, createElementBlock as k, toDisplayString as _, createCommentVNode as E, Fragment as U, createElementVNode as H, normalizeClass as oe, renderList as ce, createTextVNode as q } from "vue";
5
5
  import { useI18n as J } from "vue-i18n";
6
- import { i as fe, a as F } from "./error-CD7x0Jrz.js";
7
- import { d as de, u as me, a as ve } from "./describeError-B-NMa--w.js";
6
+ import { a as fe, i as F } from "./error-Bb_dr_Ay.js";
7
+ import { d as de, u as me, a as ve } from "./describeError-BqGAUZgX.js";
8
8
  import { _ as he } from "./Banner.vue_vue_type_script_setup_true_lang-DSStj_5z.js";
9
9
  class ge {
10
10
  constructor() {
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as B, openBlock as d, createBlock as L, withCtx as N, createTextVNode as v, toDisplayString as m, unref as h, createCommentVNode as i, inject as C, provide as y, ref as R, useSlots as O, computed as n, shallowReactive as E, useTemplateRef as V, useId as A, createElementBlock as p, normalizeStyle as M, normalizeClass as G, createElementVNode as S, renderSlot as f } from "vue";
2
2
  import { s as T, u as W } from "./sectionIndex-BS0ic5W7.js";
3
- import { d as $, g as j } from "./control-B4SdblL6.js";
3
+ import { e as $, h as j } from "./options-g8RwEhBk.js";
4
4
  import { useI18n as D } from "vue-i18n";
5
5
  import { _ as q } from "./Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
6
6
  const H = /* @__PURE__ */ B({
@@ -52,7 +52,7 @@ function le(s) {
52
52
  }
53
53
  const Q = ["id", "data-group"], U = {
54
54
  key: 0,
55
- class: "flex min-w-0 items-end gap-2 px-row-inset pb-2"
55
+ class: "flex min-w-0 items-baseline gap-2 px-row-inset pb-2"
56
56
  }, X = { class: "min-w-0 flex-1 text-subheadline font-semibold text-content-strong compact:text-footnote compact:font-normal compact:uppercase compact:tracking-wide compact:text-content-muted" }, Y = { class: "form-group-cell rounded-group bg-surface-cell shadow-group" }, Z = {
57
57
  key: 1,
58
58
  class: "px-row-inset pt-2 text-footnote text-content-muted text-pretty"
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as n, provide as f, computed as s, useTemplateRef as u, openBlock as t, createElementBlock as p, withModifiers as c, createBlock as d, createCommentVNode as b, renderSlot as _ } from "vue";
2
- import { d as v } from "./control-B4SdblL6.js";
3
- import { _ as k } from "./FormErrors.vue_vue_type_script_setup_true_lang-DGOSc-PS.js";
2
+ import { e as v } from "./options-g8RwEhBk.js";
3
+ import { _ as k } from "./FormErrors.vue_vue_type_script_setup_true_lang-D7edzNTL.js";
4
4
  const x = /* @__PURE__ */ n({
5
5
  __name: "FormView",
6
6
  props: {
@@ -2,18 +2,18 @@ import { defineComponent as R, computed as N, openBlock as i, createElementBlock
2
2
  import { useI18n as V } from "vue-i18n";
3
3
  import { RouterLink as B } from "vue-router";
4
4
  import { u as E } from "./format-D8X4zsx6.js";
5
- import { u as T } from "./useResourceForm-tGYTfKhH.js";
6
- import { _ as h } from "./FormGroup.vue_vue_type_script_setup_true_lang-DSwSRsA5.js";
7
- import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-BUrYkjmF.js";
8
- import { _ as L } from "./SelectField.vue_vue_type_script_setup_true_lang-C3FbRQW7.js";
9
- import { _ as f } from "./TextField.vue_vue_type_script_setup_true_lang-CP2WeU36.js";
5
+ import { u as T } from "./useResourceForm-CJfl8rj_.js";
6
+ import { _ as h } from "./FormGroup.vue_vue_type_script_setup_true_lang-BPchlRCl.js";
7
+ import { _ as F } from "./FormView.vue_vue_type_script_setup_true_lang-CPSYV7iQ.js";
8
+ import { _ as L } from "./SelectField.vue_vue_type_script_setup_true_lang-BzQC1qDQ.js";
9
+ import { _ as f } from "./TextField.vue_vue_type_script_setup_true_lang-DTAQPbW0.js";
10
10
  import { u as A } from "./useSaveChrome-7huA3FzR.js";
11
- import { P as D, b as G, i as I } from "./index-BhtJR4c_.js";
11
+ import { P as D, b as G, i as I } from "./index-kqk7Mclb.js";
12
12
  import { t as M } from "./toast-CqSDTWRX.js";
13
- import { u as O } from "./platform-PZpUkkMS.js";
14
- import { b as U } from "./routeResource-DlTsGTg_.js";
15
- import { u as j } from "./fieldMessages-6HVzSDqG.js";
16
- import { _ as $ } from "./ActionRow.vue_vue_type_script_setup_true_lang-QPvYudWc.js";
13
+ import { u as O } from "./platform-Dl1fbScN.js";
14
+ import { b as U } from "./routeResource-CcYA75T2.js";
15
+ import { u as j } from "./fieldMessages-DTXpWnBd.js";
16
+ import { _ as $ } from "./ActionRow.vue_vue_type_script_setup_true_lang-BCgKzUvG.js";
17
17
  import { _ as z } from "./SectionIntro.vue_vue_type_script_setup_true_lang-CZtPrmXD.js";
18
18
  import { u as H } from "./languages-BShG9LpE.js";
19
19
  const J = {
@@ -0,0 +1,28 @@
1
+ import { defineComponent as n, openBlock as s, createElementBlock as r, mergeProps as i, createVNode as l, unref as a } from "vue";
2
+ import { _ as c } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
3
+ const u = ["aria-label", "data-pressed"], b = /* @__PURE__ */ n({
4
+ __name: "MenuButton",
5
+ props: {
6
+ label: {},
7
+ icon: { default: "moreLine" },
8
+ presented: { type: Boolean },
9
+ toggle: {},
10
+ attrs: {}
11
+ },
12
+ setup(o) {
13
+ const e = o;
14
+ return (f, t) => (s(), r("button", i({ type: "button" }, e.attrs, {
15
+ "aria-label": e.label,
16
+ 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",
17
+ "data-pressed": e.presented || void 0,
18
+ onClick: t[0] || (t[0] = (d) => e.toggle())
19
+ }), [
20
+ l(a(c), {
21
+ name: e.icon
22
+ }, null, 8, ["name"])
23
+ ], 16, u));
24
+ }
25
+ });
26
+ export {
27
+ b as _
28
+ };
@@ -3,9 +3,9 @@ import { useI18n as v } from "vue-i18n";
3
3
  import { useRoute as k, useRouter as R } from "vue-router";
4
4
  import { a as $ } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-GUTIXuNd.js";
5
5
  import { _ as b } from "./AsyncSection.vue_vue_type_script_setup_true_lang-B0NfvG3B.js";
6
- import { u as g } from "./useLoad-M7V-AVwR.js";
7
- import { a as x, c as u } from "./index-C3E6DcO0.js";
8
- import { _ as P } from "./RoleEditor.vue_vue_type_script_setup_true_lang-DRHmjA9w.js";
6
+ import { u as g } from "./useLoad-W4tfxmm5.js";
7
+ import { a as x, c as u } from "./index-WkbzC_ee.js";
8
+ import { _ as P } from "./RoleEditor.vue_vue_type_script_setup_true_lang-gXbxXG2R.js";
9
9
  const V = /* @__PURE__ */ _({
10
10
  __name: "NewRolePage",
11
11
  setup(h) {
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as H, ref as _, computed as B, useTemplateRef as K, watch as R, openBlock as q, createBlock as J, mergeProps as L, unref as T, createSlots as Q, withCtx as $, createElementVNode as Z, normalizeClass as E, createElementBlock as G, toDisplayString as I, createCommentVNode as P, isRef as W, renderSlot as N, mergeDefaults as U } from "vue";
2
2
  import { b as X } from "./controlSurface-t7OEFESJ.js";
3
3
  import { u as Y } from "./format-D8X4zsx6.js";
4
- import { a as ee, c as te, _ as le, f as ae, b as oe } from "./control-B4SdblL6.js";
4
+ import { a as ee, c as te, _ as le, f as ae, b as oe } from "./options-g8RwEhBk.js";
5
5
  function ne(c) {
6
6
  const r = c.number(1234.5, { minimumFractionDigits: 1, maximumFractionDigits: 1, useGrouping: !0 }), u = /^\d(\D)\d/.exec(r)?.[1] ?? "";
7
7
  return { decimal: r.charAt(r.length - 2) || ".", group: u === "." || u === "," ? u : "" };