@wssto2/vue-core 0.12.1 → 0.13.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 (122) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +4 -2
  3. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-CzQbD2Pc.js → AccessGate.vue_vue_type_script_setup_true_lang-DEzXovsY.js} +1 -1
  4. package/dist/{Activity-CdkJW68R.js → Activity-ChfxdvXf.js} +24 -23
  5. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-D5i77H6S.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-lPj9hPqV.js} +33 -33
  6. package/dist/{Changes-DxK_QfiB.js → Changes-BCa43_mO.js} +18 -17
  7. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-x0jyJ01f.js → CollectionPage.vue_vue_type_script_setup_true_lang-C1GCvyZx.js} +6 -6
  8. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-C_ZytnW-.js → DataTable.vue_vue_type_script_setup_true_lang-B9r9M5Gt.js} +1 -1
  9. package/dist/{DateField.vue_vue_type_script_setup_true_lang-CeNwBbJT.js → DateField.vue_vue_type_script_setup_true_lang-B5UUY1OO.js} +2 -2
  10. package/dist/{DeadLetters-DnA7LP1w.js → DeadLetters-wFTqhISU.js} +5 -5
  11. package/dist/{General-2matxl2Y.js → General-jW7u4MjH.js} +16 -15
  12. package/dist/{IncidentRecord-Bt3G4HlX.js → IncidentRecord-CXzgLKqI.js} +6 -6
  13. package/dist/{IncidentsList-2iwgqp9J.js → IncidentsList-D1MySyXb.js} +6 -6
  14. package/dist/{NewRolePage-DhGFwvk3.js → NewRolePage-CQ5UVaHs.js} +3 -3
  15. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-B3UrXNqH.js → NumberField.vue_vue_type_script_setup_true_lang-YVgf5CP6.js} +1 -1
  16. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-DbGZSNQc.js → PersonAccess.vue_vue_type_script_setup_true_lang-CWCt9_dM.js} +2 -2
  17. package/dist/{ProfilePage-CpuyDBAv.js → ProfilePage-Ca3x3UAH.js} +79 -77
  18. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-DqGc3Jyo.js → RecordHeader.vue_vue_type_script_setup_true_lang-Do_ATJwT.js} +1 -1
  19. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-DljhsTU4.js → ResourcePage.vue_vue_type_script_setup_true_lang-Coz91xht.js} +1 -1
  20. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-C0FIotFA.js → RoleEditor.vue_vue_type_script_setup_true_lang-d_aaeXTT.js} +2 -2
  21. package/dist/{RolePage-DaNv049g.js → RolePage-BUj1w1m1.js} +5 -5
  22. package/dist/{RolesPage-6hlzJes_.js → RolesPage-NKzBUsrM.js} +3 -3
  23. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-Dh3sXUt_.js → SectionNavigator.vue_vue_type_script_setup_true_lang-DfKEhTFv.js} +2 -2
  24. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-FJbWxME_.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-4nbhEpv_.js} +10 -9
  25. package/dist/{ServiceAccountRecord-0-JF5lRx.js → ServiceAccountRecord-ClbyeLhL.js} +8 -8
  26. package/dist/{ServiceAccountsList-DcsnOcf-.js → ServiceAccountsList-B2VDnYxD.js} +5 -5
  27. package/dist/{Sessions-DgWhpk-i.js → Sessions-BjkciyHH.js} +23 -21
  28. package/dist/{SettingsPage-BXPWATYU.js → SettingsPage-Csb14qsx.js} +7 -7
  29. package/dist/{SignIn-DPoUwHZd.js → SignIn-DPFMv4C7.js} +14 -12
  30. package/dist/{SignInPage-OyrVemro.js → SignInPage-DukoFqkt.js} +2 -2
  31. package/dist/{SignIns-BMDrZVVp.js → SignIns-DvdpNkiS.js} +23 -22
  32. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-D-Em4glH.js → TimeField.vue_vue_type_script_setup_true_lang-DpDXHH7u.js} +2 -2
  33. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-ClZAAUMd.js → Timestamp.vue_vue_type_script_setup_true_lang-DlEUKWra.js} +1 -1
  34. package/dist/{UserRecord-BW-gdCqi.js → UserRecord-B9SeSWQh.js} +57 -55
  35. package/dist/{UsersList-B3ZF_1Dj.js → UsersList-CREG8q3l.js} +4 -4
  36. package/dist/access/index.js +4 -4
  37. package/dist/app/application.d.ts +14 -6
  38. package/dist/app/current.d.ts +11 -0
  39. package/dist/app/environment.d.ts +8 -0
  40. package/dist/app/index.d.ts +1 -0
  41. package/dist/app/index.js +14 -12
  42. package/dist/application-DomS6sbx.js +435 -0
  43. package/dist/collection/http.d.ts +16 -1
  44. package/dist/collection/index.d.ts +1 -1
  45. package/dist/collection/index.js +34 -32
  46. package/dist/content/Money.vue.d.ts +1 -1
  47. package/dist/content/index.js +151 -158
  48. package/dist/{contributions-CeG4bszd.js → contributions-obnyn03x.js} +1 -1
  49. package/dist/current-B0lHKTWr.js +17 -0
  50. package/dist/form/DateField.vue.d.ts +2 -2
  51. package/dist/form/DateTimeField.vue.d.ts +2 -2
  52. package/dist/form/MoneyField.vue.d.ts +1 -1
  53. package/dist/form/NumberField.vue.d.ts +1 -1
  54. package/dist/form/date/MonthYearPanel.vue.d.ts +1 -1
  55. package/dist/form/date/days.d.ts +3 -3
  56. package/dist/form/index.d.ts +2 -0
  57. package/dist/form/index.js +1111 -1081
  58. package/dist/form/zodErrorMap.d.ts +35 -0
  59. package/dist/format/format.d.ts +51 -6
  60. package/dist/format/index.d.ts +1 -1
  61. package/dist/format/index.js +1 -1
  62. package/dist/format-DoKs29bZ.js +118 -0
  63. package/dist/{guards-Biv_SlGn.js → guards-DGcSfTEh.js} +1 -1
  64. package/dist/http-DOEfFCDA.js +107 -0
  65. package/dist/i18n/index.js +15 -15
  66. package/dist/identity/index.d.ts +2 -0
  67. package/dist/identity/index.js +43 -40
  68. package/dist/identity/usePreferences.d.ts +19 -0
  69. package/dist/incidents/clientErrorReporter.d.ts +2 -1
  70. package/dist/incidents/index.js +1 -1
  71. package/dist/{index-kEHY7hcG.js → index-CRxU_Wh2.js} +61 -61
  72. package/dist/{index-Cq9TuOqH.js → index-DZikGJ8L.js} +457 -511
  73. package/dist/{index-ClJeyW3F.js → index-D_yyd4C2.js} +4 -4
  74. package/dist/index.d.ts +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/internal/intlLocale.d.ts +5 -2
  77. package/dist/modules/identity/entities.d.ts +4 -0
  78. package/dist/modules/identity/routes.d.ts +5 -2
  79. package/dist/modules/identity/schemas.d.ts +6 -2
  80. package/dist/{navigation-TnVFYRaX.js → navigation-CctcxT51.js} +1 -1
  81. package/dist/{neighbors-OyvGi233.js → neighbors-Csfan8Ho.js} +1 -1
  82. package/dist/notifications/index.js +1 -1
  83. package/dist/onboarding/Tip.vue.d.ts +41 -0
  84. package/dist/onboarding/index.d.ts +1 -0
  85. package/dist/onboarding/index.js +145 -0
  86. package/dist/onboarding/tips.d.ts +5 -0
  87. package/dist/page/index.js +3 -3
  88. package/dist/phone/index.js +74 -74
  89. package/dist/phone/phone.d.ts +3 -3
  90. package/dist/platform/httpSession.d.ts +1 -1
  91. package/dist/platform/index.d.ts +2 -0
  92. package/dist/platform/index.js +16 -13
  93. package/dist/platform/preferences.d.ts +35 -0
  94. package/dist/platform/session.d.ts +6 -1
  95. package/dist/platform-DtISOEt7.js +284 -0
  96. package/dist/playwright/session.d.ts +2 -0
  97. package/dist/preferences-hYhrw8Uy.js +91 -0
  98. package/dist/resource/index.d.ts +1 -0
  99. package/dist/resource/index.js +24 -8
  100. package/dist/resource/read.d.ts +16 -0
  101. package/dist/router/index.js +3 -3
  102. package/dist/{rowLayout-BsKEzEME.js → rowLayout-y1IB_h2r.js} +2 -2
  103. package/dist/{sections-CvUwZ-S1.js → sections-fkW_IJLc.js} +1 -1
  104. package/dist/{serverMessages-B6GHgi40.js → serverMessages-Ddghrewh.js} +1 -1
  105. package/dist/shell/darkMode.d.ts +13 -8
  106. package/dist/shell/index.js +396 -384
  107. package/dist/{state-6KSYsVw0.js → state-CXMexi0l.js} +1 -1
  108. package/dist/styles.css +1 -1
  109. package/dist/testing/app.d.ts +11 -0
  110. package/dist/testing/format.d.ts +4 -2
  111. package/dist/testing/index.d.ts +1 -1
  112. package/dist/testing/index.js +96 -89
  113. package/dist/testing/platform.d.ts +2 -0
  114. package/dist/usePreferences-B8LIZp_f.js +47 -0
  115. package/dist/{useTypedEntry-C_Bk4sI0.js → useTypedEntry-DKs8I1yP.js} +279 -280
  116. package/package.json +6 -2
  117. package/src/styles/components.css +17 -0
  118. package/dist/application-CuzT-0vW.js +0 -420
  119. package/dist/format-D8KUBmbS.js +0 -87
  120. package/dist/http-Dm0uXY9O.js +0 -95
  121. package/dist/intlLocale-CeRU44qJ.js +0 -4
  122. package/dist/platform-BQOX_Ntw.js +0 -283
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.13.0 — 2026-10-18
4
+
5
+ Platform features an application kept to itself: per-person preferences (dark mode, dismissed tips) on go-core identity, an
6
+ anchored onboarding tip, the formatting options a house style needs, a Zod error map, handled-error reports and the bound
7
+ application for code outside setup. Needs go-core v1.18.0 (`goCore`, `src/modules` synced).
8
+
9
+ ### New
10
+ - **platform:** `preferencesOf(platform)`, `mergePatch` (RFC 7396), `Preferences`, `PreferencesPatch`. The session snapshot carries `preferences` (the top-level `preferences` of the session payload; `{}` when absent or not an object); `session.update({ preferences })`; `createTestPlatform({ preferences })`.
11
+ - **identity:** `usePreferences<T>()`: a reactive `value` and `save(patch)`, applied at once, sent as `PUT /v1/auth/preferences` (`identityRoutes.preferencesUpdate`), replaced by the server's merged answer, saves one after another; a refusal takes back only that patch, with a toast.
12
+ - **onboarding:** new subpath `@wssto2/vue-core/onboarding` with `Tip`: an anchored, non-modal tip shown until closed and remembered in the person's preferences (`dismissedAt`, default `tips_dismissed`), one open at a time; the anchor glows (`[data-tip-anchor]`).
13
+ - **format:** `createFormatting` and `createApplication({ formatting })` take `intlLocale` (language code → `Intl` tag, used by every formatter and exposed as `format.intlLocale`), `datePattern` (a numeric date per language, `DD`/`MM`/`YYYY`), `numberSymbols` (group and decimal, grouping from four digits, `toFixed` rounding), `emptyNumber` and `translate`; `intlFormatters(settings)` takes the same settings.
14
+ - **format:** `format.day()` and `format.dayTime()`: "Today" / "Yesterday" / the date (`core.activity.*`), and the time after it.
15
+ - **form:** `zodErrorMap(application)`, a Zod 4 `customError` onto `validation_errors.*`: the application's key wins, else the library's new `core.validation_errors` (`required`, `min`, `max`, `min_value`, `max_value`, `email`, `url`, `date`, `datetime`) in five languages. `z.config({ customError: zodErrorMap(application) })`.
16
+ - **app:** `Application.report(error, { detail })` and `useApplication().report`: an error the code handled and the user saw, through `onError` with `source: "handled"`; `clientErrorReporter` sends it as an incident, its message headed `[handled: detail]` (go-core's `ClientErrorInput` has no source field yet).
17
+ - **app:** `currentApplication()`, the application `createApplication` made, for code outside setup (`currentApplication().platform.http` in an `api.ts`); `Application.platform` and `Application.format`. `createTestApplication()` in `@wssto2/vue-core/testing`.
18
+ - **resource / collection:** `readRecord`, `readRecordWithMeta`, `found`; `listLoader`, `routeListLoader`, on the current application.
19
+ - **i18n:** `core.tip.ok`, `core.preferences.save_failed`, `core.validation_errors.*` in hr, en, sl, bs and sr-Latn.
20
+
21
+ ### Changed
22
+ - **shell:** `darkMode()` needs no options: it keeps `dark_mode` in the person's preferences. `dark` and `set` are optional, for a preference kept elsewhere.
23
+ - **format:** `toDate` reads `YYYY-MM-DD HH:mm[:ss]` as local time (Safari's `Date` refuses the space) and anything starting `0000-00-00`, `0001-01-01` or `1970-01-01` as empty, with or without a time.
24
+ - **form, content:** the calendar, the date picker, the phone and country pickers, `I18nField` and `ResourceHeader` follow the application's `intlLocale` map (the first day of the week of `en` → `en-GB` is Monday); `ResourceHeader` and the phone field need the formatting provider (always there in an application). `ActivityStream` writes its day headings with `format.day()`.
25
+ - **Breaking:** `firstWeekday`, `weekendDays`, `countryName` and `searchCountries` take the `Intl` tag (`format.intlLocale`), not the language code. `ApplicationOptions.formatting` is `Partial<Formatters> & FormattingSettings`. `testFormatting(i18n, settings?)`.
26
+ - **modules:** regenerated from go-core v1.18.0 (identity: `PreferencesResponse`, `SessionResponse.preferences`, `UpdatePreferencesInput`, `preferencesUpdate`).
27
+
3
28
  ## 0.12.1 — 2026-10-18
4
29
 
5
30
  go-core `v1.16.1`: a type the wire writes as text is generated as a string.
package/README.md CHANGED
@@ -11,7 +11,7 @@ Its plan and rules are in [PLAN.md](PLAN.md).
11
11
  | Import | For |
12
12
  |---|---|
13
13
  | `@wssto2/vue-core/platform` | `readBootstrap`, `createPlatform` (HTTP client, session, access), `AccessGate`, typed contexts |
14
- | `@wssto2/vue-core/app` | `createApplication`, `defineFeature`, shell outlets, effects |
14
+ | `@wssto2/vue-core/app` | `createApplication`, `defineFeature`, `currentApplication` and `application.report` (outside setup, handled errors), shell outlets, effects |
15
15
  | `@wssto2/vue-core/shell` | `backofficeShell`, the shell's parts for a custom one |
16
16
  | `@wssto2/vue-core/router` | `defineRoutes` (typed targets), guards, navigation |
17
17
  | `@wssto2/vue-core/collection` | `defineCollection`, `useCollection`, `CollectionPage`, `DataTable` (a table over an array), record neighbors |
@@ -21,8 +21,9 @@ Its plan and rules are in [PLAN.md](PLAN.md).
21
21
  | `@wssto2/vue-core/identity`, `/access` | go-core's module contracts (types, route tables) and, in `/identity`, `identityFeature` (sign-in page, language), `identityPlatform()` and `usersFeature` (users, "my profile") and `serviceAccountsFeature` (service accounts and their API keys): [sign-in](docs/recipes/sign-in.md), [users](docs/recipes/users.md), [service accounts](docs/recipes/service-accounts.md) |
22
22
  | `@wssto2/vue-core/access` (screens) | `accessFeature({ catalogue })`: roles list and editor, compare, replace, a person's roles (`PersonAccess`) and what they can do: [roles and access](docs/recipes/access.md) |
23
23
  | `@wssto2/vue-core/notifications` | go-core's notification and events modules: `notificationsFeature({ categories, deadLetters })`: the bell with the unread count, the inbox (popover, bottom sheet on phones), the live stream, the failed-events page: [notifications](docs/recipes/notifications.md) |
24
+ | `@wssto2/vue-core/onboarding` | `Tip`: a card beside something new, shown until the person closes it, remembered in their stored preferences (`usePreferences`, in `/identity`): [preferences and tips](docs/recipes/preferences.md) |
24
25
  | `@wssto2/vue-core/incidents` | go-core's incident module: `incidentsFeature({ destination, appVersion })`: the list, an incident with its reports, comments and management form, "Report a bug" in the account menu; `clientErrorReporter({ platform })`: the browser's own errors reported as incidents: [incidents](docs/recipes/incidents.md) |
25
- | `@wssto2/vue-core/testing` | `createTestPlatform`, `createTestApp`, fake transports: for your tests, [testing](docs/recipes/testing.md) |
26
+ | `@wssto2/vue-core/testing` | `createTestPlatform`, `createTestApp`, `createTestApplication`, fake transports: for your tests, [testing](docs/recipes/testing.md) |
26
27
  | `@wssto2/vue-core/playwright` | `mockAuth`, `serveAccess`, `serveNotifications`, `serveProfile`, `serveUsers`: Playwright mocks of the library's endpoints, [end-to-end specs](docs/recipes/e2e.md) |
27
28
 
28
29
  Nothing is reachable by a deep import. The peers are `vue`, `vue-router` and `vue-i18n`; the library never bundles them.
@@ -343,6 +344,7 @@ The library's own texts are under the `core` namespace in English, Croatian, Bos
343
344
  - [Lint](docs/recipes/lint.md): `vue-core lint` and `@wssto2/vue-core/eslint`: ceilings per file and rule that only go down, the typed run on changed files
344
345
  - [Notifications](docs/recipes/notifications.md): the bell, the inbox and the live stream, categories, the failed-events page, trying it against go-core's dev server
345
346
  - [Incidents](docs/recipes/incidents.md): go-core's incident module: the list and an incident, "Report a bug", the browser's errors reported (what is and is not sent), source maps
347
+ - [Preferences and tips](docs/recipes/preferences.md): `usePreferences`, the person's stored settings, `darkMode()` on them, the `Tip` beside something new
346
348
  - [Theming](docs/recipes/theming.md): brand accent, dark mode, tokens, status tones and category hues
347
349
  - [Testing](docs/recipes/testing.md): the application's environment and a fake backend for your tests
348
350
  - [End-to-end specs](docs/recipes/e2e.md): `@wssto2/vue-core/playwright`, the Playwright mocks of go-core's envelope, session, access, notification, profile and users routes
@@ -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-BQOX_Ntw.js";
2
+ import { u as l } from "./platform-DtISOEt7.js";
3
3
  const m = /* @__PURE__ */ t({
4
4
  __name: "AccessGate",
5
5
  props: {
@@ -3,16 +3,17 @@ import { useI18n as D } from "vue-i18n";
3
3
  import { RouterLink as I } from "vue-router";
4
4
  import { _ as T } from "./IconTile.vue_vue_type_script_setup_true_lang-BmxCuUZ9.js";
5
5
  import { _ as z } from "./Tabs.vue_vue_type_script_setup_true_lang-tpkGp98F.js";
6
- import { u as G } from "./format-D8KUBmbS.js";
7
- import { _ as B } from "./DateField.vue_vue_type_script_setup_true_lang-CeNwBbJT.js";
6
+ import { u as G } from "./format-DoKs29bZ.js";
7
+ import { _ as B } from "./DateField.vue_vue_type_script_setup_true_lang-B5UUY1OO.js";
8
8
  import { a as H } from "./FormGroup.vue_vue_type_script_setup_true_lang-D6jYfNjW.js";
9
9
  import { g as J } from "./options-B48UiYsG.js";
10
- import { P as M, f as Q, i as W, l as X } from "./index-Cq9TuOqH.js";
11
- import { u as Y } from "./platform-BQOX_Ntw.js";
12
- import { b as Z } from "./routeResource-DlTsGTg_.js";
13
- import { _ as tt } from "./AsyncSection.vue_vue_type_script_setup_true_lang-DGzQ-Snp.js";
14
- import { _ as et } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
15
- import { u as at } from "./useLoad-M7V-AVwR.js";
10
+ import { i as M } from "./preferences-hYhrw8Uy.js";
11
+ import { u as Q } from "./platform-DtISOEt7.js";
12
+ import { b as W } from "./routeResource-DlTsGTg_.js";
13
+ import { _ as X } from "./AsyncSection.vue_vue_type_script_setup_true_lang-DGzQ-Snp.js";
14
+ import { _ as Y } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
15
+ import { u as Z } from "./useLoad-M7V-AVwR.js";
16
+ import { P as tt, f as et, j as at } from "./index-DZikGJ8L.js";
16
17
  import { _ as st } from "./ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js";
17
18
  const ot = {
18
19
  class: "flex min-w-0 flex-col gap-group-gap",
@@ -28,15 +29,15 @@ const ot = {
28
29
  key: 1,
29
30
  class: "flex min-w-0 flex-col gap-group-gap",
30
31
  "data-activity-feed": ""
31
- }, ut = { class: "flex flex-wrap items-center gap-x-1.5" }, ct = { key: 1 }, dt = { class: "text-body tabular-nums text-content-muted" }, mt = { class: "px-row-inset text-footnote text-content-muted" }, At = /* @__PURE__ */ q({
32
+ }, ut = { class: "flex flex-wrap items-center gap-x-1.5" }, ct = { key: 1 }, dt = { class: "text-body tabular-nums text-content-muted" }, mt = { class: "px-row-inset text-footnote text-content-muted" }, Bt = /* @__PURE__ */ q({
32
33
  __name: "Activity",
33
34
  setup(pt) {
34
- const { t: o, te: k } = D(), { http: E } = Y(), w = G(), h = Z(M), { activityAreas: L, activityRecords: P } = Q(), d = b("all"), m = b(null), p = b(null), y = b(1), _ = at(
35
+ const { t: o, te: k } = D(), { http: E } = Q(), w = G(), h = W(tt), { activityAreas: L, activityRecords: P } = et(), d = b("all"), m = b(null), p = b(null), y = b(1), _ = Z(
35
36
  async ({ signal: e }) => {
36
37
  const t = h.id.value;
37
38
  if (t === null) return null;
38
39
  const a = { id: t, page: y.value, per_page: 20, ...d.value === "all" ? {} : { area: d.value }, ...m.value ? { from: m.value } : {}, ...p.value ? { to: p.value } : {} };
39
- return (await E.request(W.usersActivity, a, { signal: e })).data;
40
+ return (await E.request(M.usersActivity, a, { signal: e })).data;
40
41
  },
41
42
  { watch: () => h.id.value }
42
43
  );
@@ -47,16 +48,16 @@ const ot = {
47
48
  if (e === "all" || e === "identity" || e === "other") return o(`core.users.activity.areas.${e}`);
48
49
  const t = L[e];
49
50
  return t && k(t) ? o(t) : o("core.users.activity.areas.other");
50
- }, F = V(() => _.data.value?.meta?.views ?? []), K = V(() => {
51
- const e = F.value.filter((t) => t.key === "all" || t.key === d.value || t.count > 0).map((t) => ({ value: t.key, label: $(t.key), badge: t.count }));
51
+ }, j = V(() => _.data.value?.meta?.views ?? []), F = V(() => {
52
+ const e = j.value.filter((t) => t.key === "all" || t.key === d.value || t.count > 0).map((t) => ({ value: t.key, label: $(t.key), badge: t.count }));
52
53
  return e.length > 0 ? e : [{ value: "all", label: $("all") }];
53
- }), O = (e, t) => {
54
+ }), K = (e, t) => {
54
55
  const a = P[e];
55
56
  return a && k(a.labelKey) ? { text: `${o(a.labelKey)} #${t}`, to: a.to?.(t) } : { text: `${e} #${t}`, to: void 0 };
56
- }, S = (e) => k(`core.users.activity.actions.${e}`) ? o(`core.users.activity.actions.${e}`) : o("core.users.activity.actions.other"), j = V(() => {
57
+ }, O = (e) => k(`core.users.activity.actions.${e}`) ? o(`core.users.activity.actions.${e}`) : o("core.users.activity.actions.other"), S = V(() => {
57
58
  const e = [];
58
59
  for (const t of _.data.value?.data ?? []) {
59
- const a = { row: t, record: O(t.record_type, t.record_id) }, i = t.created_at.slice(0, 10), n = e[e.length - 1];
60
+ const a = { row: t, record: K(t.record_type, t.record_id) }, i = t.created_at.slice(0, 10), n = e[e.length - 1];
60
61
  n && n.key === i ? n.rows.push(a) : e.push({ key: i, header: w.date(t.created_at), rows: [a] });
61
62
  }
62
63
  return e;
@@ -70,7 +71,7 @@ const ot = {
70
71
  v(s(z), {
71
72
  modelValue: d.value,
72
73
  "onUpdate:modelValue": t[0] || (t[0] = (a) => d.value = a),
73
- tabs: K.value,
74
+ tabs: F.value,
74
75
  presentation: "scope",
75
76
  label: s(o)("core.users.activity.areas_label")
76
77
  }, null, 8, ["modelValue", "tabs", "label"]),
@@ -89,7 +90,7 @@ const ot = {
89
90
  }, null, 8, ["modelValue", "label", "min"])
90
91
  ])
91
92
  ]),
92
- v(s(tt), {
93
+ v(s(X), {
93
94
  state: s(_).state.value,
94
95
  "skeleton-rows": 5,
95
96
  "is-empty": () => !1,
@@ -97,7 +98,7 @@ const ot = {
97
98
  }, {
98
99
  default: u(({ value: a }) => [
99
100
  !a || a.data.length === 0 ? (l(), f("p", it, c(s(o)("core.users.activity.empty")), 1)) : (l(), f("div", rt, [
100
- (l(!0), f(C, null, N(j.value, (i) => (l(), g(s(H), {
101
+ (l(!0), f(C, null, N(S.value, (i) => (l(), g(s(H), {
101
102
  key: i.key,
102
103
  header: i.header
103
104
  }, {
@@ -105,7 +106,7 @@ const ot = {
105
106
  (l(!0), f(C, null, N(i.rows, ({ row: n, record: x }) => (l(), g(s(J), {
106
107
  key: n.id,
107
108
  layout: "setting",
108
- label: S(n.action),
109
+ label: O(n.action),
109
110
  "data-activity-row": ""
110
111
  }, {
111
112
  leading: u(() => [
@@ -132,7 +133,7 @@ const ot = {
132
133
  ])
133
134
  ]),
134
135
  default: u(() => [
135
- n.signed_in_as ? (l(), g(s(et), {
136
+ n.signed_in_as ? (l(), g(s(Y), {
136
137
  key: 0,
137
138
  tone: "warning",
138
139
  "data-activity-signed-in-as": ""
@@ -150,7 +151,7 @@ const ot = {
150
151
  _: 2
151
152
  }, 1032, ["header"]))), 128))
152
153
  ])),
153
- a ? (l(), g(X, {
154
+ a ? (l(), g(at, {
154
155
  key: 2,
155
156
  page: y.value,
156
157
  "onUpdate:page": t[3] || (t[3] = (i) => y.value = i),
@@ -165,5 +166,5 @@ const ot = {
165
166
  }
166
167
  });
167
168
  export {
168
- At as default
169
+ Bt as default
169
170
  };
@@ -1,26 +1,26 @@
1
- import { defineComponent as T, computed as _, openBlock as i, createElementBlock as d, Fragment as I, renderList as M, createBlock as x, withCtx as k, createTextVNode as w, toDisplayString as b, unref as l, createElementVNode as m, mergeProps as F, createVNode as v, createCommentVNode as f, renderSlot as h, toValue as z, watch as S, onMounted as R, onBeforeUnmount as L, useTemplateRef as V, provide as A, ref as O, createSlots as H, normalizeClass as D } from "vue";
2
- import { a as N } from "./mediaQuery-CygcXmFW.js";
1
+ import { defineComponent as L, computed as _, openBlock as i, createElementBlock as d, Fragment as A, renderList as M, createBlock as x, withCtx as k, createTextVNode as w, toDisplayString as b, unref as l, createElementVNode as m, mergeProps as N, createVNode as v, createCommentVNode as f, renderSlot as h, toValue as P, watch as S, onMounted as R, onBeforeUnmount as T, useTemplateRef as I, provide as z, ref as O, createSlots as H, normalizeClass as D } from "vue";
2
+ import { a as V } from "./mediaQuery-CygcXmFW.js";
3
3
  import { _ as K } from "./BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
4
- import { useI18n as E } from "vue-i18n";
4
+ import { useI18n as j } from "vue-i18n";
5
5
  import { _ as q } from "./Button.vue_vue_type_script_setup_true_lang-C74hcb0N.js";
6
6
  import { _ as y } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
7
7
  import { _ as Q } from "./Menu.vue_vue_type_script_setup_true_lang-wKc9gdCn.js";
8
8
  import { RouterLink as B, useRoute as U } from "vue-router";
9
- import { i as W } from "./intlLocale-CeRU44qJ.js";
10
- import { a as j, c as Y, p as G } from "./chrome-nUcmVu8G.js";
9
+ import { u as W } from "./format-DoKs29bZ.js";
10
+ import { a as F, c as Y, p as G } from "./chrome-nUcmVu8G.js";
11
11
  import { d as J } from "./context-Ch1r4fdN.js";
12
12
  const X = {
13
13
  key: 0,
14
14
  "data-page-actions": "",
15
15
  class: "flex min-w-0 flex-wrap items-center justify-end gap-2"
16
- }, Z = ["aria-label", "onClick"], P = /* @__PURE__ */ T({
16
+ }, Z = ["aria-label", "onClick"], E = /* @__PURE__ */ L({
17
17
  __name: "PageActions",
18
18
  props: {
19
19
  actions: {},
20
20
  leading: {}
21
21
  },
22
22
  setup(p) {
23
- const e = p, { t: a } = E(), u = _(() => [
23
+ const e = p, { t: a } = j(), u = _(() => [
24
24
  ...e.leading ? [e.leading] : [],
25
25
  ...e.actions.filter((t) => t.placement !== "overflow" && t.tone !== "critical")
26
26
  ]), r = _(() => e.actions.filter((t) => t.placement === "overflow" || t.tone === "critical").map((t) => ({
@@ -36,7 +36,7 @@ const X = {
36
36
  return t === e.leading || t.prominence === "plain" ? "plain" : t.prominence === "standard" ? "standard" : t.placement === "primary" ? "primary" : "standard";
37
37
  }
38
38
  return (t, o) => u.value.length || r.value.length ? (i(), d("div", X, [
39
- (i(!0), d(I, null, M(u.value, (s) => (i(), x(q, {
39
+ (i(!0), d(A, null, M(u.value, (s) => (i(), x(q, {
40
40
  key: s.id,
41
41
  prominence: c(s),
42
42
  icon: s.icon,
@@ -57,7 +57,7 @@ const X = {
57
57
  label: l(a)("core.page.more_actions")
58
58
  }, {
59
59
  trigger: k(({ toggle: s, attrs: g }) => [
60
- m("button", F({ type: "button" }, g, {
60
+ m("button", N({ type: "button" }, g, {
61
61
  "aria-label": l(a)("core.page.more_actions"),
62
62
  "data-page-overflow": "",
63
63
  class: "hit-target flex size-9 cursor-pointer items-center justify-center rounded-button bg-fill text-content-strong transition-colors duration-motion-fast hover:bg-fill-strong focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-border-focus",
@@ -84,7 +84,7 @@ const X = {
84
84
  class: "flex shrink-0 items-center gap-1.5 text-footnote text-content-muted",
85
85
  role: "status",
86
86
  "data-page-status": ""
87
- }, re = /* @__PURE__ */ T({
87
+ }, re = /* @__PURE__ */ L({
88
88
  __name: "PageToolbar",
89
89
  props: {
90
90
  back: {},
@@ -94,7 +94,7 @@ const X = {
94
94
  status: {}
95
95
  },
96
96
  setup(p) {
97
- const e = p, { t: a } = E(), u = _(() => e.path && e.path.length >= 2 ? e.path.slice(0, -1) : []), r = _(() => e.path && u.value.length ? e.path[e.path.length - 1] ?? null : e.back ?? null);
97
+ const e = p, { t: a } = j(), u = _(() => e.path && e.path.length >= 2 ? e.path.slice(0, -1) : []), r = _(() => e.path && u.value.length ? e.path[e.path.length - 1] ?? null : e.back ?? null);
98
98
  return (c, t) => (i(), d("div", ee, [
99
99
  u.value.length && r.value ? (i(), d("nav", {
100
100
  key: 0,
@@ -109,7 +109,7 @@ const X = {
109
109
  })
110
110
  ]),
111
111
  m("ol", ne, [
112
- (i(!0), d(I, null, M(u.value, (o) => (i(), d("li", {
112
+ (i(!0), d(A, null, M(u.value, (o) => (i(), d("li", {
113
113
  key: o.label,
114
114
  class: "flex min-w-0 max-w-48 shrink items-center max-lg:hidden"
115
115
  }, [
@@ -167,7 +167,7 @@ const X = {
167
167
  }, null, -1)),
168
168
  w(b(e.status), 1)
169
169
  ])) : f("", !0),
170
- v(P, {
170
+ v(E, {
171
171
  actions: e.actions,
172
172
  leading: e.leading
173
173
  }, null, 8, ["actions", "leading"])
@@ -175,13 +175,13 @@ const X = {
175
175
  }
176
176
  });
177
177
  function ce(p, e, a = !0) {
178
- const u = j();
179
- if (!u || !z(a)) return;
178
+ const u = F();
179
+ if (!u || !P(a)) return;
180
180
  const r = u.claim();
181
181
  let c = null;
182
- S(() => z(e), (t) => r.setTitle(t), { immediate: !0 }), R(() => {
182
+ S(() => P(e), (t) => r.setTitle(t), { immediate: !0 }), R(() => {
183
183
  !p.value || typeof IntersectionObserver > "u" || (c = new IntersectionObserver(([t]) => r.setTitleInView(t?.isIntersecting ?? !0), { rootMargin: "-52px 0px 0px 0px" }), c.observe(p.value));
184
- }), L(() => {
184
+ }), T(() => {
185
185
  c?.disconnect(), r.clearTitle();
186
186
  });
187
187
  }
@@ -204,7 +204,7 @@ const ue = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, de
204
204
  class: "flex shrink-0 items-center gap-1.5 text-footnote text-content-muted",
205
205
  role: "status",
206
206
  "data-page-status": ""
207
- }, ke = /* @__PURE__ */ T({
207
+ }, ke = /* @__PURE__ */ L({
208
208
  __name: "ResourceHeader",
209
209
  props: {
210
210
  title: {},
@@ -217,7 +217,7 @@ const ue = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, de
217
217
  inlineActions: { type: Boolean, default: !1 }
218
218
  },
219
219
  setup(p) {
220
- const e = p, { locale: a } = E(), u = N("(max-width: 47.999rem)"), r = _(() => e.count == null ? null : new Intl.NumberFormat(W(a.value)).format(e.count)), c = V("titleElement");
220
+ const e = p, a = W(), u = V("(max-width: 47.999rem)"), r = _(() => e.count == null ? null : a.number(e.count)), c = I("titleElement");
221
221
  return ce(c, () => e.title), (t, o) => (i(), d("div", ue, [
222
222
  m("div", de, [
223
223
  h(t.$slots, "leading", {}, () => [
@@ -249,14 +249,14 @@ const ue = { class: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-3" }, de
249
249
  }, null, -1)),
250
250
  w(b(e.status), 1)
251
251
  ])) : f("", !0),
252
- v(P, {
252
+ v(E, {
253
253
  actions: e.actions,
254
254
  leading: e.leading
255
255
  }, null, 8, ["actions", "leading"])
256
256
  ])) : f("", !0)
257
257
  ]));
258
258
  }
259
- }), [_e, Re] = J("vue-core.pageSectionBack");
259
+ }), [_e, Ie] = J("vue-core.pageSectionBack");
260
260
  function xe(p, e) {
261
261
  const a = U();
262
262
  let u = a.fullPath;
@@ -281,7 +281,7 @@ function xe(p, e) {
281
281
  $ && ($.focus({ preventScroll: !0 }), window.scrollTo({ top: s.top, behavior: "instant" }), o());
282
282
  };
283
283
  c = new MutationObserver(g), c.observe(p.value, { subtree: !0, childList: !0 }), document.addEventListener("pointerdown", o, !0), document.addEventListener("keydown", o, !0), t = setTimeout(o, 1e4), g();
284
- }), L(() => {
284
+ }), T(() => {
285
285
  const s = document.activeElement;
286
286
  s instanceof HTMLAnchorElement && p.value?.contains(s) && e.focusMemory.put(u, { href: s.getAttribute("href") ?? "", top: window.scrollY }), o();
287
287
  });
@@ -289,7 +289,7 @@ function xe(p, e) {
289
289
  const we = { key: 1 }, ye = {
290
290
  key: 2,
291
291
  class: "flex justify-center pt-2"
292
- }, $e = { class: "dock-safe-area pointer-events-auto order-1 border-t border-border-separator bg-surface-cell pt-screen-padding pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-screen-padding pl-[max(var(--app-screen-padding),var(--app-safe-left))]" }, Ve = /* @__PURE__ */ T({
292
+ }, $e = { class: "dock-safe-area pointer-events-auto order-1 border-t border-border-separator bg-surface-cell pt-screen-padding pr-[max(var(--app-screen-padding),var(--app-safe-right))] pb-screen-padding pl-[max(var(--app-screen-padding),var(--app-safe-left))]" }, Ve = /* @__PURE__ */ L({
293
293
  __name: "AdaptivePageShell",
294
294
  props: {
295
295
  title: {},
@@ -303,14 +303,14 @@ const we = { key: 1 }, ye = {
303
303
  width: { default: "full" }
304
304
  },
305
305
  setup(p) {
306
- const e = p, a = j() ?? Y();
307
- A(G, a);
306
+ const e = p, a = F() ?? Y();
307
+ z(G, a);
308
308
  const u = a.claimShell();
309
- L(u);
310
- const r = V("root");
309
+ T(u);
310
+ const r = I("root");
311
311
  xe(r, a);
312
- const c = N("(max-width: 47.999rem)"), t = O(null);
313
- A(_e, t);
312
+ const c = V("(max-width: 47.999rem)"), t = O(null);
313
+ z(_e, t);
314
314
  const o = _(() => {
315
315
  if (t.value) return t.value;
316
316
  if (e.back !== void 0) return e.back;
@@ -324,7 +324,7 @@ const we = { key: 1 }, ye = {
324
324
  () => [e.actions, e.documentTitle],
325
325
  ([n, C]) => g.setRegistration({ actions: n, leading: null, status: null, navTitle: null, documentTitle: C ?? null }),
326
326
  { immediate: !0 }
327
- ), S(o, (n) => g.setBack(n), { immediate: !0 }), L(() => {
327
+ ), S(o, (n) => g.setBack(n), { immediate: !0 }), T(() => {
328
328
  g.clearRegistration(), g.clearBack();
329
329
  });
330
330
  const $ = { full: "", content: "max-w-content", readable: "max-w-readable" };
@@ -364,7 +364,7 @@ const we = { key: 1 }, ye = {
364
364
  status: o.value ? null : l(a).status.value
365
365
  }, null, 8, ["title", "description", "icon", "count", "actions", "leading", "status"])
366
366
  ]),
367
- n.$slots.header && !o.value && !l(c) ? (i(), x(P, {
367
+ n.$slots.header && !o.value && !l(c) ? (i(), x(E, {
368
368
  key: 0,
369
369
  actions: l(a).actions.value,
370
370
  leading: l(a).leading.value
@@ -390,10 +390,10 @@ const we = { key: 1 }, ye = {
390
390
  });
391
391
  export {
392
392
  Ve as _,
393
- P as a,
393
+ E as a,
394
394
  re as b,
395
395
  ke as c,
396
- Re as d,
396
+ Ie as d,
397
397
  _e as p,
398
398
  ce as u
399
399
  };
@@ -1,26 +1,27 @@
1
- import { defineComponent as h, ref as m, watch as p, openBlock as l, createElementBlock as d, createVNode as c, unref as t, withCtx as y, toDisplayString as x, createBlock as f, createCommentVNode as C } from "vue";
2
- import { useI18n as k } from "vue-i18n";
3
- import { P as $, f as b, i as V, m as R, l as E } from "./index-Cq9TuOqH.js";
4
- import { u as N } from "./platform-BQOX_Ntw.js";
5
- import { b as B } from "./routeResource-DlTsGTg_.js";
6
- import { _ as P } from "./AsyncSection.vue_vue_type_script_setup_true_lang-DGzQ-Snp.js";
7
- import { u as S } from "./useLoad-M7V-AVwR.js";
1
+ import { defineComponent as h, ref as m, watch as p, openBlock as l, createElementBlock as d, createVNode as c, unref as t, withCtx as y, toDisplayString as x, createBlock as f, createCommentVNode as k } from "vue";
2
+ import { useI18n as C } from "vue-i18n";
3
+ import { i as $ } from "./preferences-hYhrw8Uy.js";
4
+ import { u as b } from "./platform-DtISOEt7.js";
5
+ import { b as V } from "./routeResource-DlTsGTg_.js";
6
+ import { _ as R } from "./AsyncSection.vue_vue_type_script_setup_true_lang-DGzQ-Snp.js";
7
+ import { u as E } from "./useLoad-M7V-AVwR.js";
8
+ import { P as N, f as B, k as P, j as S } from "./index-DZikGJ8L.js";
8
9
  import { _ as U } from "./ActionRow.vue_vue_type_script_setup_true_lang-DybAIOHS.js";
9
10
  import { _ as I } from "./ViewTabs.vue_vue_type_script_setup_true_lang-BjdDXE3T.js";
10
11
  const W = {
11
12
  class: "flex min-w-0 flex-col gap-group-gap",
12
13
  "data-person-changes": ""
13
- }, q = {
14
+ }, j = {
14
15
  key: 0,
15
16
  class: "px-row-inset py-4 text-body text-content-muted",
16
17
  "data-changes-empty": ""
17
- }, K = /* @__PURE__ */ h({
18
+ }, M = /* @__PURE__ */ h({
18
19
  __name: "Changes",
19
- setup(A) {
20
- const g = ["all", "access", "details"], { t: a } = k(), { http: _ } = N(), i = B($), { changeWords: v } = b(), r = m("all"), o = m(1), n = S(
20
+ setup(q) {
21
+ const g = ["all", "access", "details"], { t: a } = C(), { http: _ } = b(), i = V(N), { changeWords: v } = B(), r = m("all"), o = m(1), n = E(
21
22
  async ({ signal: u }) => {
22
23
  const s = i.id.value;
23
- return s === null ? null : (await _.request(V.usersChanges, { id: s, view: r.value, page: o.value, per_page: 20 }, { signal: u })).data;
24
+ return s === null ? null : (await _.request($.usersChanges, { id: s, view: r.value, page: o.value, per_page: 20 }, { signal: u })).data;
24
25
  },
25
26
  { watch: () => i.id.value }
26
27
  );
@@ -39,25 +40,25 @@ const W = {
39
40
  "label-of": (e) => t(a)(`core.users.changes.views.${e}`),
40
41
  label: t(a)("core.users.sections.changes")
41
42
  }, null, 8, ["modelValue", "counts", "label-of", "label"]),
42
- c(t(P), {
43
+ c(t(R), {
43
44
  state: t(n).state.value,
44
45
  "skeleton-rows": 5,
45
46
  "is-empty": () => !1,
46
47
  onRetry: s[2] || (s[2] = (e) => t(n).reload())
47
48
  }, {
48
49
  default: y(({ value: e }) => [
49
- !e || e.data.length === 0 ? (l(), d("p", q, x(t(a)("core.users.changes.empty")), 1)) : (l(), f(R, {
50
+ !e || e.data.length === 0 ? (l(), d("p", j, x(t(a)("core.users.changes.empty")), 1)) : (l(), f(P, {
50
51
  key: 1,
51
52
  rows: e.data,
52
53
  words: t(v)
53
54
  }, null, 8, ["rows", "words"])),
54
- e ? (l(), f(E, {
55
+ e ? (l(), f(S, {
55
56
  key: 2,
56
57
  page: o.value,
57
58
  "onUpdate:page": s[1] || (s[1] = (w) => o.value = w),
58
59
  "last-page": e.last_page,
59
60
  total: e.total
60
- }, null, 8, ["page", "last-page", "total"])) : C("", !0)
61
+ }, null, 8, ["page", "last-page", "total"])) : k("", !0)
61
62
  ]),
62
63
  _: 1
63
64
  }, 8, ["state"])
@@ -65,5 +66,5 @@ const W = {
65
66
  }
66
67
  });
67
68
  export {
68
- K as default
69
+ M as default
69
70
  };
@@ -1,22 +1,22 @@
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
3
  import { i as qe, a as ut } from "./error-CD7x0Jrz.js";
4
- import { d as dt } from "./http-Dm0uXY9O.js";
5
- import { d as Re, o as ft, L as Te, e as je, w as pt, r as vt } from "./state-6KSYsVw0.js";
6
- import { _ as mt } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-D5i77H6S.js";
4
+ import { d as dt } from "./http-DOEfFCDA.js";
5
+ import { d as Re, o as ft, L as Te, e as je, w as pt, r as vt } from "./state-CXMexi0l.js";
6
+ import { _ as mt } from "./AdaptivePageShell.vue_vue_type_script_setup_true_lang-lPj9hPqV.js";
7
7
  import { useI18n as he } from "vue-i18n";
8
8
  import { _ as ce } from "./Button.vue_vue_type_script_setup_true_lang-C74hcb0N.js";
9
9
  import { _ as Ge } from "./Tabs.vue_vue_type_script_setup_true_lang-tpkGp98F.js";
10
- import { u as Pe } from "./format-D8KUBmbS.js";
10
+ import { u as Pe } from "./format-DoKs29bZ.js";
11
11
  import { _ as I } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
12
12
  import { _ as Ne } from "./Banner.vue_vue_type_script_setup_true_lang-sv0phngk.js";
13
13
  import { _ as Ae } from "./EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js";
14
- import { u as bt, _ as gt } from "./rowLayout-BsKEzEME.js";
14
+ import { u as bt, _ as gt } from "./rowLayout-y1IB_h2r.js";
15
15
  import { u as Ee } from "./shortcut-DUR6yPWA.js";
16
16
  import { _ as Ye } from "./Menu.vue_vue_type_script_setup_true_lang-wKc9gdCn.js";
17
17
  import { _ as Ze } from "./Popover.vue_vue_type_script_setup_true_lang-C20Hf3Hl.js";
18
18
  import { _ as we } from "./ToneDot.vue_vue_type_script_setup_true_lang-99rNn-L5.js";
19
- import { _ as ht } from "./NumberField.vue_vue_type_script_setup_true_lang-B3UrXNqH.js";
19
+ import { _ as ht } from "./NumberField.vue_vue_type_script_setup_true_lang-YVgf5CP6.js";
20
20
  import { _ as yt } from "./SelectField.vue_vue_type_script_setup_true_lang-BZwdANL3.js";
21
21
  import { a as _t } from "./mediaQuery-CygcXmFW.js";
22
22
  import { _ as xt } from "./Sheet.vue_vue_type_script_setup_true_lang-B91aRD_y.js";
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as d, computed as u, useSlots as p, openBlock as w, createElementBlock as y, createVNode as f, unref as k, createSlots as b, renderList as m, withCtx as h, renderSlot as v, normalizeProps as _, guardReactiveProps as g } from "vue";
2
- import { u as R, _ as L } from "./rowLayout-BsKEzEME.js";
2
+ import { u as R, _ as L } from "./rowLayout-y1IB_h2r.js";
3
3
  const F = ["aria-busy"], V = /* @__PURE__ */ d({
4
4
  __name: "DataTable",
5
5
  props: {
@@ -1,12 +1,12 @@
1
1
  import { computed as p, defineComponent as re, useModel as oe, useTemplateRef as T, openBlock as g, createBlock as Y, mergeProps as E, unref as s, createSlots as ae, withCtx as y, createElementBlock as C, Fragment as H, createVNode as D, createTextVNode as ne, toDisplayString as K, createCommentVNode as M, createElementVNode as O, normalizeClass as le, renderSlot as S, mergeModels as G, mergeDefaults as se, nextTick as J } from "vue";
2
2
  import { useI18n as L } from "vue-i18n";
3
3
  import { _ as ie } from "./DateButton.vue_vue_type_script_setup_true_lang-CovKG5lN.js";
4
- import { u as W } from "./format-D8KUBmbS.js";
4
+ import { u as W } from "./format-DoKs29bZ.js";
5
5
  import { _ as de } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.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-C20Hf3Hl.js";
8
8
  import { e as me, _ as fe, f as pe, b as be } from "./options-B48UiYsG.js";
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-C_Bk4sI0.js";
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-DKs8I1yP.js";
10
10
  const _e = ["d", "m", "y"];
11
11
  function $e(o) {
12
12
  const r = o("2033-11-22"), t = { y: r.indexOf("2033") >= 0 ? r.indexOf("2033") : r.indexOf("33"), m: r.indexOf("11"), d: r.indexOf("22") };
@@ -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
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-x0jyJ01f.js";
4
+ import { u as V, _ as N } from "./CollectionPage.vue_vue_type_script_setup_true_lang-C1GCvyZx.js";
5
5
  import { u as P } from "./describeError-B-NMa--w.js";
6
- import { u as I } from "./format-D8KUBmbS.js";
7
- import { e as a, R as O } from "./index-ClJeyW3F.js";
6
+ import { u as I } from "./format-DoKs29bZ.js";
7
+ import { e as a, R as O } from "./index-D_yyd4C2.js";
8
8
  import { _ as W } from "./AlertDialog.vue_vue_type_script_setup_true_lang-CrFhR9rJ.js";
9
9
  import { t as i } from "./toast-CqSDTWRX.js";
10
10
  import { u as Y } from "./useLoad-M7V-AVwR.js";
11
- import { u as j } from "./platform-BQOX_Ntw.js";
12
- import { d as G, r as H } from "./http-Dm0uXY9O.js";
11
+ import { u as j } from "./platform-DtISOEt7.js";
12
+ import { d as G, r as H } from "./http-DOEfFCDA.js";
13
13
  function J(u) {
14
14
  return G({
15
15
  id: "events.deadletters",