@wssto2/vue-core 0.3.0 → 0.4.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 (161) hide show
  1. package/README.md +3 -0
  2. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-DKX3PH2n.js → AccessGate.vue_vue_type_script_setup_true_lang-DcbZBINh.js} +1 -1
  3. package/dist/{AccountMenuItem.vue_vue_type_script_setup_true_lang-DIGqTLwd.js → AccountMenuItem.vue_vue_type_script_setup_true_lang-CPeNxh5K.js} +1 -1
  4. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-B7Lpfkf6.js → ActionRow.vue_vue_type_script_setup_true_lang-LlfIPWsJ.js} +2 -2
  5. package/dist/{Activity-DviO0VQ8.js → Activity-ylf1r2lv.js} +9 -9
  6. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-CvAnzdc1.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-CUtGqVGA.js} +4 -4
  7. package/dist/{AlertDialog.vue_vue_type_script_setup_true_lang-CJsMUIUg.js → AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js} +1 -1
  8. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-CCtthMRd.js → AsyncSection.vue_vue_type_script_setup_true_lang-Blj6KgCr.js} +4 -4
  9. package/dist/{Banner.vue_vue_type_script_setup_true_lang-Cib_YYpr.js → Banner.vue_vue_type_script_setup_true_lang-DSStj_5z.js} +1 -1
  10. package/dist/{Button.vue_vue_type_script_setup_true_lang-CYil8h9z.js → Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js} +1 -1
  11. package/dist/{Changes-DlT5mN9G.js → Changes-B1-2LPkp.js} +8 -8
  12. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-CXILftEc.js → CollectionPage.vue_vue_type_script_setup_true_lang-DU_jzTg7.js} +176 -172
  13. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-DSYgS9lC.js → DataTable.vue_vue_type_script_setup_true_lang-UH6f9puS.js} +1 -1
  14. package/dist/DateField.vue_vue_type_script_setup_true_lang-GVasv8ao.js +255 -0
  15. package/dist/DeadLetters-CcogaMTK.js +104 -0
  16. package/dist/{DiscardChangesModal.vue_vue_type_script_setup_true_lang-Cb3xJI1x.js → DiscardChangesModal.vue_vue_type_script_setup_true_lang-D1arePCZ.js} +1 -1
  17. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-C2ZYIT9F.js → EmptyState.vue_vue_type_script_setup_true_lang-50p-Mp8I.js} +1 -1
  18. package/dist/{FormErrors.vue_vue_type_script_setup_true_lang-DVgNBQ8p.js → FormErrors.vue_vue_type_script_setup_true_lang-BQb7wLT0.js} +1 -1
  19. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-0mfG8TkU.js → FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js} +10 -10
  20. package/dist/{FormView.vue_vue_type_script_setup_true_lang-Bz2m3AtF.js → FormView.vue_vue_type_script_setup_true_lang-cr0xNDXP.js} +2 -2
  21. package/dist/{General-BD-Hcz0a.js → General-DSrflQib.js} +9 -9
  22. package/dist/HeaderAction.vue_vue_type_script_setup_true_lang-Cgji-Jrr.js +45 -0
  23. package/dist/{Icon.vue_vue_type_script_lang-VvcV2Bzo.js → Icon.vue_vue_type_script_lang-D7oC-d-S.js} +33 -29
  24. package/dist/{IconTile.vue_vue_type_script_setup_true_lang-D7QgnUyN.js → IconTile.vue_vue_type_script_setup_true_lang-BpIjgu5E.js} +1 -1
  25. package/dist/{LeaveGuardRoot.vue_vue_type_script_setup_true_lang-C2udmeEA.js → LeaveGuardRoot.vue_vue_type_script_setup_true_lang-Cv7KlA5y.js} +1 -1
  26. package/dist/{Menu.vue_vue_type_script_setup_true_lang-BNAjx9tj.js → Menu.vue_vue_type_script_setup_true_lang-DTbAcDzL.js} +30 -26
  27. package/dist/{Modal.vue_vue_type_script_setup_true_lang-D7SwVPpL.js → Modal.vue_vue_type_script_setup_true_lang-DpBb8ans.js} +2 -2
  28. package/dist/{NewRolePage-Dla4YnMs.js → NewRolePage-Du9eyEG2.js} +4 -4
  29. package/dist/{NoAccess.vue_vue_type_script_setup_true_lang-8m9cNptR.js → NoAccess.vue_vue_type_script_setup_true_lang-DWxq-MTM.js} +1 -1
  30. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-CYRg7Kfg.js → NumberField.vue_vue_type_script_setup_true_lang-C7N5nq0P.js} +1 -1
  31. package/dist/{PageBar.vue_vue_type_script_setup_true_lang-Cfr5xsJx.js → PageBar.vue_vue_type_script_setup_true_lang-B7qdEeej.js} +1 -1
  32. package/dist/{Panel.vue_vue_type_script_setup_true_lang-BCRxRK4D.js → Panel.vue_vue_type_script_setup_true_lang-BA0u_DtS.js} +1 -1
  33. package/dist/PanelActions.vue_vue_type_script_setup_true_lang-E9VdIGkf.js +46 -0
  34. package/dist/{PhotoViewer.vue_vue_type_script_setup_true_lang-B3Q4dhqJ.js → PhotoViewer.vue_vue_type_script_setup_true_lang-QPCW3Xi6.js} +1 -1
  35. package/dist/ProfilePage-BjvWyg_e.js +654 -0
  36. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-DKsaKlAq.js → RecordHeader.vue_vue_type_script_setup_true_lang-Ci4fs5s5.js} +2 -2
  37. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-CJcKa9SW.js → ResourcePage.vue_vue_type_script_setup_true_lang-KPVA-1fI.js} +5 -5
  38. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-DuEPOmjI.js → RoleEditor.vue_vue_type_script_setup_true_lang-Ci1Aqc37.js} +30 -29
  39. package/dist/{RolePage-bZzv_E4l.js → RolePage-BDD6volP.js} +13 -13
  40. package/dist/{RolesPage-BniZv0nB.js → RolesPage-Bzun0trr.js} +9 -9
  41. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-BKP_bge8.js → SectionList.vue_vue_type_script_setup_true_lang-DBheVDeX.js} +3 -3
  42. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-BgGEGxSI.js → SectionNavigator.vue_vue_type_script_setup_true_lang-L4TXI0wR.js} +6 -6
  43. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-BZ9UdgA1.js → SegmentedField.vue_vue_type_script_setup_true_lang-BMqWlpsL.js} +1 -1
  44. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-BiGaEKBQ.js → SelectField.vue_vue_type_script_setup_true_lang-7O1BAx04.js} +15 -14
  45. package/dist/{SessionList.vue_vue_type_script_setup_true_lang-DUQpr7gb.js → SessionList.vue_vue_type_script_setup_true_lang-D5KRitar.js} +4 -4
  46. package/dist/{Sessions-Co5-xdeb.js → Sessions-BOzz38WJ.js} +6 -6
  47. package/dist/SettingsPage-BXlYHt8u.js +255 -0
  48. package/dist/{Sheet.vue_vue_type_script_setup_true_lang-bHYzx7-J.js → Sheet.vue_vue_type_script_setup_true_lang-DgOFV4fa.js} +48 -45
  49. package/dist/{SignIn-BWwFbxki.js → SignIn-CenfvX8C.js} +7 -7
  50. package/dist/{SignInPage-FnLtoi2q.js → SignInPage-23sJGIXh.js} +6 -6
  51. package/dist/{SignInTable.vue_vue_type_script_setup_true_lang-Dnx3T_42.js → SignInTable.vue_vue_type_script_setup_true_lang-CEbAvZ_C.js} +1 -1
  52. package/dist/{SignIns-3UcI64_h.js → SignIns-DRaTo-T0.js} +6 -6
  53. package/dist/{SwipeActions.vue_vue_type_script_setup_true_lang-4I8m27ol.js → SwipeActions.vue_vue_type_script_setup_true_lang-BJIA2JfI.js} +1 -1
  54. package/dist/SwitchField.vue_vue_type_script_setup_true_lang-CM8yp9JQ.js +64 -0
  55. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-BeGaydRr.js → Tabs.vue_vue_type_script_setup_true_lang-CcMcE38r.js} +1 -1
  56. package/dist/{TextField.vue_vue_type_script_setup_true_lang-C_FMf3Vc.js → TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js} +3 -3
  57. package/dist/TextareaField.vue_vue_type_script_setup_true_lang-CqAWfABZ.js +68 -0
  58. package/dist/TimeField.vue_vue_type_script_setup_true_lang-DWfAUlnz.js +164 -0
  59. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-1RJGKxbD.js → Timestamp.vue_vue_type_script_setup_true_lang-FVRUr-9y.js} +1 -1
  60. package/dist/{UserRecord-Ci8HfwbX.js → UserRecord-BreLQOPG.js} +13 -13
  61. package/dist/{UsersList-vEJ-cgkT.js → UsersList-CKLqiOpt.js} +8 -8
  62. package/dist/{ViewTabs.vue_vue_type_script_setup_true_lang-ByqTU2JT.js → ViewTabs.vue_vue_type_script_setup_true_lang-BJIoZAlH.js} +1 -1
  63. package/dist/access/index.js +1 -1
  64. package/dist/access-DmAceEo5.js +42 -0
  65. package/dist/app/feature.d.ts +2 -0
  66. package/dist/app/index.js +11 -11
  67. package/dist/button/index.js +1 -1
  68. package/dist/{chrome-BS3xJcad.js → chrome-nUcmVu8G.js} +2 -2
  69. package/dist/client/index.js +11 -19
  70. package/dist/{client-Bw0aM5Gu.js → client-k9euDWF4.js} +19 -19
  71. package/dist/collection/definition.d.ts +3 -0
  72. package/dist/collection/index.js +6 -6
  73. package/dist/collection/useCollection.d.ts +2 -0
  74. package/dist/content/index.js +2 -2
  75. package/dist/{contributions-CDDg3fKp.js → contributions-DsfmDoRD.js} +1 -1
  76. package/dist/control-7EP4tjYy.js +313 -0
  77. package/dist/controls/index.js +4 -4
  78. package/dist/form/index.js +987 -1134
  79. package/dist/{guards-Cd1V28oG.js → guards-Dve61KjR.js} +1 -1
  80. package/dist/{http-DGGSKWvU.js → http-CNcDHSOj.js} +9 -8
  81. package/dist/i18n/index.js +20 -20
  82. package/dist/icon/core.d.ts +4 -0
  83. package/dist/icon/index.js +1 -1
  84. package/dist/identity/index.js +1 -1
  85. package/dist/index-0TeI4rVv.js +504 -0
  86. package/dist/{index-B2dbYZR9.js → index-BBdzJnvG.js} +15 -15
  87. package/dist/{index-BAcl44SC.js → index-CnVf6Uk_.js} +19 -19
  88. package/dist/index.d.ts +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/modal/Sheet.vue.d.ts +2 -0
  91. package/dist/modal/index.js +5 -5
  92. package/dist/modules/events/entities.d.ts +16 -0
  93. package/dist/modules/events/routes.d.ts +17 -0
  94. package/dist/modules/events/schemas.d.ts +16 -0
  95. package/dist/modules/notification/entities.d.ts +46 -0
  96. package/dist/modules/notification/routes.d.ts +26 -0
  97. package/dist/modules/notification/schemas.d.ts +25 -0
  98. package/dist/{navigation-BPWa63ge.js → navigation-Cm3iChlR.js} +1 -1
  99. package/dist/{neighbors-D0WRBxXI.js → neighbors-DpaIMQAL.js} +1 -1
  100. package/dist/notifications/InboxPanel.vue.d.ts +16 -0
  101. package/dist/notifications/MarkAllRead.vue.d.ts +7 -0
  102. package/dist/notifications/NotificationBell.vue.d.ts +2 -0
  103. package/dist/notifications/SettingsLink.vue.d.ts +6 -0
  104. package/dist/notifications/context.d.ts +20 -0
  105. package/dist/notifications/deadletters/DeadLetters.vue.d.ts +2 -0
  106. package/dist/notifications/deadletters/access.d.ts +3 -0
  107. package/dist/notifications/deadletters/list.d.ts +3 -0
  108. package/dist/notifications/deadletters/routes.d.ts +13 -0
  109. package/dist/notifications/feature.d.ts +31 -0
  110. package/dist/notifications/inbox.d.ts +62 -0
  111. package/dist/notifications/index.d.ts +13 -0
  112. package/dist/notifications/index.js +8 -0
  113. package/dist/notifications/settings/EmailPanel.vue.d.ts +14 -0
  114. package/dist/notifications/settings/QuietHoursPanel.vue.d.ts +14 -0
  115. package/dist/notifications/settings/SettingsMenuItem.vue.d.ts +2 -0
  116. package/dist/notifications/settings/SettingsPage.vue.d.ts +2 -0
  117. package/dist/notifications/settings/categoryText.d.ts +9 -0
  118. package/dist/notifications/settings/routes.d.ts +13 -0
  119. package/dist/notifications/settings/settings.d.ts +18 -0
  120. package/dist/notifications/settings/state.d.ts +16 -0
  121. package/dist/notifications/state.d.ts +27 -0
  122. package/dist/notifications/stream.d.ts +21 -0
  123. package/dist/options-Ba_0uLWN.js +18 -0
  124. package/dist/overlay/index.js +3 -3
  125. package/dist/page/chrome.d.ts +4 -1
  126. package/dist/page/index.d.ts +1 -1
  127. package/dist/page/index.js +25 -24
  128. package/dist/phone/index.js +68 -67
  129. package/dist/platform/index.js +2 -2
  130. package/dist/{platform-hunMqFdB.js → platform-q3cjODLx.js} +1 -1
  131. package/dist/resource/index.js +1 -1
  132. package/dist/route-goWMxDUN.js +13 -0
  133. package/dist/router/access.d.ts +1 -1
  134. package/dist/router/index.js +5 -5
  135. package/dist/router/pageRefresh.d.ts +6 -0
  136. package/dist/{rowLayout-BI7a3Kom.js → rowLayout-BqTEhEuy.js} +5 -5
  137. package/dist/{sections-BEqW1dOc.js → sections-D-kD98vu.js} +2 -2
  138. package/dist/shell/BackofficeShell.vue.d.ts +4 -1
  139. package/dist/shell/NavigationDrawer.vue.d.ts +1 -1
  140. package/dist/shell/PullToRefresh.vue.d.ts +2 -0
  141. package/dist/shell/ShellSidebar.vue.d.ts +2 -1
  142. package/dist/shell/backofficeShell.d.ts +3 -1
  143. package/dist/shell/index.js +638 -584
  144. package/dist/shell/pullToRefresh.d.ts +16 -0
  145. package/dist/shell/search.d.ts +3 -0
  146. package/dist/state/index.js +4 -4
  147. package/dist/{status-C9aXR-Jb.js → status-jB5r1cG2.js} +2 -2
  148. package/dist/styles.css +1 -1
  149. package/dist/{suggestions-BJAqOj4c.js → suggestions-BxMm6MQA.js} +1 -1
  150. package/dist/testing/index.js +1 -1
  151. package/dist/transport-BnP7WC0Y.js +4 -0
  152. package/dist/{useCommand-BgRwnYlV.js → useCommand-BkONMn3X.js} +2 -2
  153. package/dist/{useResourceForm-Bgc9jMcu.js → useResourceForm-D1hIpwW5.js} +1 -1
  154. package/dist/{useSaveChrome-chi6D3HY.js → useSaveChrome-DuWm0Czf.js} +1 -1
  155. package/dist/useTypedEntry-aTfPBAhw.js +857 -0
  156. package/package.json +8 -4
  157. package/dist/DateField.vue_vue_type_script_setup_true_lang-DMVjNsaM.js +0 -1099
  158. package/dist/ProfilePage-OJMQ8cr8.js +0 -691
  159. package/dist/TextareaField.vue_vue_type_script_setup_true_lang-CU3KTKIJ.js +0 -127
  160. package/dist/access-DdRFrVV1.js +0 -40
  161. package/dist/options-BXkMR63B.js +0 -329
@@ -0,0 +1,68 @@
1
+ import { defineComponent as k, useModel as _, useTemplateRef as B, computed as l, openBlock as d, createBlock as q, mergeProps as C, unref as i, withCtx as V, createElementVNode as u, normalizeClass as c, withDirectives as L, vModelText as M, createElementBlock as D, toDisplayString as z, createCommentVNode as E, mergeModels as F, mergeDefaults as P } from "vue";
2
+ import { u as R } from "./mediaQuery-CygcXmFW.js";
3
+ import { a as T, u as $, c as N, _ as S, f as j, b as G } from "./control-7EP4tjYy.js";
4
+ const U = ["id", "name", "rows", "placeholder", "maxlength", "autocomplete", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], A = {
5
+ key: 0,
6
+ class: "mt-1 self-end text-footnote tabular-nums text-content-muted"
7
+ }, O = /* @__PURE__ */ k({
8
+ __name: "TextareaField",
9
+ props: /* @__PURE__ */ F(/* @__PURE__ */ P({
10
+ label: {},
11
+ hint: {},
12
+ error: {},
13
+ required: { type: Boolean },
14
+ editable: { type: Boolean },
15
+ disabled: { type: Boolean },
16
+ lockedReason: {},
17
+ presentation: {},
18
+ name: {},
19
+ placeholder: {},
20
+ maxLength: {},
21
+ rows: {},
22
+ autocomplete: {},
23
+ stacked: { type: Boolean }
24
+ }, { ...G, placeholder: void 0, maxLength: void 0, rows: 3, autocomplete: void 0, stacked: !1 }), {
25
+ modelValue: { default: "" },
26
+ modelModifiers: {}
27
+ }),
28
+ emits: ["update:modelValue"],
29
+ setup(r, { expose: m }) {
30
+ const e = r, a = _(r, "modelValue"), s = B("area"), p = !!T(), f = R(), { editable: v } = $(e), t = l(() => p && !e.stacked && !f.value && v.value && !!e.label), o = l(() => e.maxLength ? `${a.value.length} / ${e.maxLength}` : void 0), b = l(() => t.value && o.value ? [e.hint, o.value].filter(Boolean).join(" · ") : e.hint), h = N("area", () => e.error ? "error" : e.disabled ? "locked" : "rest");
31
+ return m({ focus: () => s.value?.focus() }), (H, n) => (d(), q(S, C({ ...i(j)(e), hint: b.value }, {
32
+ value: a.value,
33
+ "row-layout": t.value ? "entry" : "stacked",
34
+ "row-label-align": "top"
35
+ }), {
36
+ default: V(({ id: x, describedby: g, invalid: y }) => [
37
+ u("div", {
38
+ class: c(["w-full", i(h)])
39
+ }, [
40
+ L(u("textarea", {
41
+ id: x,
42
+ ref_key: "area",
43
+ ref: s,
44
+ "onUpdate:modelValue": n[0] || (n[0] = (w) => a.value = w),
45
+ name: e.name,
46
+ rows: e.rows,
47
+ placeholder: e.placeholder,
48
+ maxlength: e.maxLength,
49
+ autocomplete: e.autocomplete,
50
+ disabled: e.disabled,
51
+ required: e.required,
52
+ "aria-required": e.required || void 0,
53
+ "aria-invalid": y || void 0,
54
+ "aria-describedby": g,
55
+ class: c(["block w-full border-0 bg-transparent px-0 py-1 text-body text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed", e.disabled ? "resize-none" : "resize-y"])
56
+ }, null, 10, U), [
57
+ [M, a.value]
58
+ ])
59
+ ], 2),
60
+ !t.value && o.value ? (d(), D("p", A, z(o.value), 1)) : E("", !0)
61
+ ]),
62
+ _: 1
63
+ }, 16, ["value", "row-layout"]));
64
+ }
65
+ });
66
+ export {
67
+ O as _
68
+ };
@@ -0,0 +1,164 @@
1
+ import { computed as u, defineComponent as K, useModel as W, useTemplateRef as v, openBlock as m, createBlock as E, mergeProps as w, unref as t, withCtx as b, createElementBlock as x, Fragment as N, createVNode as d, createTextVNode as j, toDisplayString as G, createCommentVNode as P, createElementVNode as h, normalizeClass as H, mergeModels as J, mergeDefaults as O, nextTick as U } from "vue";
2
+ import { useI18n as L } from "vue-i18n";
3
+ import { _ as X } from "./DateButton.vue_vue_type_script_setup_true_lang-EcqrfWKz.js";
4
+ import { u as Y } from "./format-B8mJm946.js";
5
+ import { _ as Z } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
6
+ import { u as ee } from "./mediaQuery-CygcXmFW.js";
7
+ import { _ as te } from "./Popover.vue_vue_type_script_setup_true_lang-Dx-tDhNE.js";
8
+ import { c as oe, _ as re, f as ae, b as le } from "./control-7EP4tjYy.js";
9
+ import { d as se, r as ie, t as z, p as ne, u as ue, a as me, i as F, _ as de, b as ce, c as pe } from "./useTypedEntry-aTfPBAhw.js";
10
+ function fe(i) {
11
+ const { t: n } = L(), e = u(() => [n("core.form.time.words.now").toLowerCase(), "now"]);
12
+ return {
13
+ placeholder: u(() => n("core.form.time.placeholder")),
14
+ parse(o) {
15
+ if (e.value.includes(o.trim().toLowerCase())) return { value: z(i()) };
16
+ const a = ne(o, i());
17
+ return "time" in a ? { value: a.time } : { error: a.error === "step" ? n("core.form.time.step", { step: i() }) : n("core.form.time.invalid") };
18
+ },
19
+ shortcuts: (o) => (o ?? se).map((a) => ie(a, n("core.form.time.now"), z(i())))
20
+ };
21
+ }
22
+ const ve = ["id", "name", "value", "placeholder", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"], be = ["aria-label", "onClick"], Ce = /* @__PURE__ */ K({
23
+ __name: "TimeField",
24
+ props: /* @__PURE__ */ J(/* @__PURE__ */ O({
25
+ label: {},
26
+ hint: {},
27
+ error: {},
28
+ required: { type: Boolean },
29
+ editable: { type: Boolean },
30
+ disabled: { type: Boolean },
31
+ lockedReason: {},
32
+ presentation: {},
33
+ name: {},
34
+ minuteStep: {},
35
+ quickTimes: {}
36
+ }, { ...le, minuteStep: 1, quickTimes: void 0 }), {
37
+ modelValue: { default: null },
38
+ modelModifiers: {}
39
+ }),
40
+ emits: ["update:modelValue"],
41
+ setup(i, { expose: n }) {
42
+ const e = i, o = W(i, "modelValue"), { t: a } = L(), M = Y(), I = ee(), T = v("input"), c = v("popover"), g = v("panel"), q = v("sheet"), k = fe(() => e.minuteStep), l = ue({ model: o, display: (r) => r, parse: k.parse }), C = u(() => k.shortcuts(e.quickTimes)), V = u(() => e.error || l.message.value), Q = oe("date", () => V.value ? "error" : e.disabled ? "locked" : "rest"), R = u(() => {
43
+ const r = me(o.value);
44
+ return r ? M.time(new Date(2e3, 0, 1, r.hour, r.minute)) : null;
45
+ }), $ = u(() => F(l.typed.value) ? l.typed.value : F(o.value) ? o.value : null);
46
+ async function y(r) {
47
+ e.disabled || (c.value?.present(), r && (await U(), await U(), g.value?.querySelector("[role=listbox]")?.focus()));
48
+ }
49
+ function A(r) {
50
+ r.key === "Enter" ? (l.commit(), c.value?.dismiss()) : r.key === "ArrowDown" && (r.preventDefault(), y(!0));
51
+ }
52
+ return n({ focus: () => T.value?.focus() }), (r, s) => (m(), E(re, w({ ...t(ae)(e), error: V.value }, {
53
+ value: R.value,
54
+ "value-style": "numeric"
55
+ }), {
56
+ default: b(({ id: S, describedby: B, invalid: D }) => [
57
+ t(I) ? (m(), x(N, { key: 0 }, [
58
+ d(X, w({ id: S, "aria-describedby": B }, {
59
+ disabled: e.disabled,
60
+ invalid: D,
61
+ placeholder: t(a)("core.form.select.choose"),
62
+ onClick: s[0] || (s[0] = (p) => q.value?.present())
63
+ }), {
64
+ default: b(() => [
65
+ o.value ? (m(), x(N, { key: 0 }, [
66
+ j(G(o.value), 1)
67
+ ], 64)) : P("", !0)
68
+ ]),
69
+ _: 1
70
+ }, 16, ["disabled", "invalid", "placeholder"]),
71
+ d(de, {
72
+ ref_key: "sheet",
73
+ ref: q,
74
+ title: e.label ?? t(a)("core.form.time.label"),
75
+ mode: "time",
76
+ "model-value": o.value,
77
+ shortcuts: C.value,
78
+ step: e.minuteStep,
79
+ clearable: !e.required,
80
+ "onUpdate:modelValue": t(l).set
81
+ }, null, 8, ["title", "model-value", "shortcuts", "step", "clearable", "onUpdate:modelValue"])
82
+ ], 64)) : (m(), E(te, {
83
+ key: 1,
84
+ ref_key: "popover",
85
+ ref: c,
86
+ label: e.label ?? t(a)("core.form.time.label"),
87
+ width: "sm",
88
+ placement: "bottom-start",
89
+ arrow: !1,
90
+ autofocus: !1
91
+ }, {
92
+ trigger: b(({ attrs: p, presented: _ }) => [
93
+ h("div", {
94
+ class: H(["inline-flex max-w-full items-center gap-2", t(Q)])
95
+ }, [
96
+ h("input", w({
97
+ id: S,
98
+ ref_key: "input",
99
+ ref: T
100
+ }, p, {
101
+ type: "text",
102
+ role: "combobox",
103
+ autocomplete: "off",
104
+ size: "10",
105
+ name: e.name,
106
+ value: t(l).text.value,
107
+ placeholder: t(k).placeholder.value,
108
+ disabled: e.disabled,
109
+ required: e.required,
110
+ "aria-required": e.required || void 0,
111
+ "aria-invalid": D || void 0,
112
+ "aria-describedby": B,
113
+ class: "block min-h-7 min-w-0 border-0 bg-transparent py-1 pl-2.5 text-body tabular-nums text-content-strong placeholder:text-content-disabled focus:outline-none focus:ring-0 disabled:cursor-not-allowed",
114
+ onInput: s[1] || (s[1] = (f) => t(l).input(f.target.value)),
115
+ onBlur: s[2] || (s[2] = (f) => t(l).commit()),
116
+ onKeydown: A,
117
+ onClick: s[3] || (s[3] = (f) => y(!1))
118
+ }), null, 16, ve),
119
+ e.disabled ? P("", !0) : (m(), x("button", {
120
+ key: 0,
121
+ type: "button",
122
+ tabindex: "-1",
123
+ "aria-label": t(a)("core.form.time.open"),
124
+ class: "mr-2 flex shrink-0 cursor-pointer items-center text-content-link",
125
+ onClick: (f) => _ ? c.value?.dismiss() : y(!0)
126
+ }, [
127
+ d(t(Z), {
128
+ name: "timeLine",
129
+ size: 18
130
+ })
131
+ ], 8, be))
132
+ ], 2)
133
+ ]),
134
+ default: b(({ dismiss: p }) => [
135
+ h("div", {
136
+ ref_key: "panel",
137
+ ref: g,
138
+ class: "flex flex-col gap-2.5"
139
+ }, [
140
+ d(ce, {
141
+ "model-value": $.value,
142
+ step: e.minuteStep,
143
+ "onUpdate:modelValue": t(l).set
144
+ }, null, 8, ["model-value", "step", "onUpdate:modelValue"]),
145
+ d(pe, {
146
+ items: C.value,
147
+ selected: $.value,
148
+ onPick: (_) => {
149
+ t(l).set(_), p();
150
+ }
151
+ }, null, 8, ["items", "selected", "onPick"])
152
+ ], 512)
153
+ ]),
154
+ _: 2
155
+ }, 1032, ["label"]))
156
+ ]),
157
+ _: 1
158
+ }, 16, ["value"]));
159
+ }
160
+ });
161
+ export {
162
+ Ce as _,
163
+ fe as u
164
+ };
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as p, computed as a, openBlock as n, createElementBlock as s, createVNode as v, unref as r, createTextVNode as _, toDisplayString as c } from "vue";
2
2
  import { useI18n as f } from "vue-i18n";
3
3
  import { u as x, t as y } from "./format-B8mJm946.js";
4
- import { _ as T } from "./Icon.vue_vue_type_script_lang-VvcV2Bzo.js";
4
+ import { _ as T } from "./Icon.vue_vue_type_script_lang-D7oC-d-S.js";
5
5
  const g = ["datetime"], k = {
6
6
  key: 1,
7
7
  class: "text-xs text-content-muted"
@@ -1,25 +1,25 @@
1
1
  import { defineComponent as R, openBlock as q, createBlock as P, unref as e, withCtx as u, createVNode as t, mergeProps as L, provide as N, computed as g, useTemplateRef as $, createElementVNode as x, toDisplayString as C, createTextVNode as j } from "vue";
2
2
  import { useI18n as A } from "vue-i18n";
3
- import { u as F } from "./neighbors-D0WRBxXI.js";
3
+ import { u as F } from "./neighbors-DpaIMQAL.js";
4
4
  import { _ as H } from "./Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
5
5
  import { u as J } from "./describeError-Ctga6GcS.js";
6
- import { i as w, P as Q, p as W, f as X, M as Y, g as Z, d as ee } from "./index-BAcl44SC.js";
7
- import { _ as se } from "./AlertDialog.vue_vue_type_script_setup_true_lang-CJsMUIUg.js";
6
+ import { i as w, P as Q, p as W, f as X, M as Y, g as Z, d as ee } from "./index-CnVf6Uk_.js";
7
+ import { _ as se } from "./AlertDialog.vue_vue_type_script_setup_true_lang-whA4WLdl.js";
8
8
  import { t as k } from "./toast-D9Z5To38.js";
9
- import { _ as ae } from "./SectionNavigator.vue_vue_type_script_setup_true_lang-BgGEGxSI.js";
10
- import { u as E } from "./platform-hunMqFdB.js";
9
+ import { _ as ae } from "./SectionNavigator.vue_vue_type_script_setup_true_lang-L4TXI0wR.js";
10
+ import { u as E } from "./platform-q3cjODLx.js";
11
11
  import { a as te } from "./routeResource-DstM0hvf.js";
12
- import { a as oe } from "./ResourcePage.vue_vue_type_script_setup_true_lang-CJcKa9SW.js";
13
- import { A as re } from "./access-DdRFrVV1.js";
12
+ import { a as oe } from "./ResourcePage.vue_vue_type_script_setup_true_lang-KPVA-1fI.js";
13
+ import { A as re } from "./access-DmAceEo5.js";
14
14
  import { _ as ne } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
15
15
  import { u as ie } from "./useLoad-CYRVx6HW.js";
16
- import { _ as V } from "./IconTile.vue_vue_type_script_setup_true_lang-D7QgnUyN.js";
17
- import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-0mfG8TkU.js";
18
- import { e as B } from "./options-BXkMR63B.js";
19
- import { u as z, _ as K } from "./useCommand-BgRwnYlV.js";
16
+ import { _ as V } from "./IconTile.vue_vue_type_script_setup_true_lang-BpIjgu5E.js";
17
+ import { _ as T } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js";
18
+ import { e as B } from "./control-7EP4tjYy.js";
19
+ import { u as z, _ as K } from "./useCommand-BkONMn3X.js";
20
20
  import { u as U } from "./fieldMessages-C3Rpbktw.js";
21
- import { u as ce, s as le } from "./status-C9aXR-Jb.js";
22
- import { _ as M } from "./TextField.vue_vue_type_script_setup_true_lang-C_FMf3Vc.js";
21
+ import { u as ce, s as le } from "./status-jB5r1cG2.js";
22
+ import { _ as M } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
23
23
  const ue = /* @__PURE__ */ R({
24
24
  __name: "DeactivateDialog",
25
25
  props: {
@@ -1,19 +1,19 @@
1
1
  import { defineComponent as U, openBlock as p, createBlock as C, unref as e, withCtx as c, createVNode as r, mergeProps as i, useTemplateRef as V, computed as q, createTextVNode as z, toDisplayString as $, createCommentVNode as A, createElementBlock as S, normalizeClass as N } from "vue";
2
2
  import { useI18n as B } from "vue-i18n";
3
3
  import { useRouter as M } from "vue-router";
4
- import { u as P, _ as D } from "./CollectionPage.vue_vue_type_script_setup_true_lang-CXILftEc.js";
4
+ import { u as P, _ as D } from "./CollectionPage.vue_vue_type_script_setup_true_lang-DU_jzTg7.js";
5
5
  import { _ as I } from "./Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
6
6
  import { u as F } from "./format-B8mJm946.js";
7
- import { u as L } from "./platform-hunMqFdB.js";
7
+ import { u as L } from "./platform-q3cjODLx.js";
8
8
  import { _ as G } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
9
- import { i as K, f as E, M as W } from "./index-BAcl44SC.js";
10
- import { U as j, u as H, s as J } from "./status-C9aXR-Jb.js";
9
+ import { i as K, f as E, M as W } from "./index-CnVf6Uk_.js";
10
+ import { U as j, u as H, s as J } from "./status-jB5r1cG2.js";
11
11
  import { u as O } from "./environment-Dva-SG8D.js";
12
12
  import { u as Q } from "./languages-BShG9LpE.js";
13
- import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-0mfG8TkU.js";
14
- import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-BiGaEKBQ.js";
15
- import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-C_FMf3Vc.js";
16
- import { u as Z, _ as ee } from "./useCommand-BgRwnYlV.js";
13
+ import { _ as X } from "./FormGroup.vue_vue_type_script_setup_true_lang-DG2zdG_a.js";
14
+ import { _ as Y } from "./SelectField.vue_vue_type_script_setup_true_lang-7O1BAx04.js";
15
+ import { _ as d } from "./TextField.vue_vue_type_script_setup_true_lang-B9dwVASU.js";
16
+ import { u as Z, _ as ee } from "./useCommand-BkONMn3X.js";
17
17
  import { t as se } from "./toast-D9Z5To38.js";
18
18
  import { u as te } from "./fieldMessages-C3Rpbktw.js";
19
19
  const oe = /* @__PURE__ */ U({
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as u, useModel as m, computed as d, openBlock as r, createBlock as p, unref as c, mergeModels as i } from "vue";
2
- import { _ as b } from "./Tabs.vue_vue_type_script_setup_true_lang-BeGaydRr.js";
2
+ import { _ as b } from "./Tabs.vue_vue_type_script_setup_true_lang-CcMcE38r.js";
3
3
  const _ = /* @__PURE__ */ u({
4
4
  __name: "ViewTabs",
5
5
  props: /* @__PURE__ */ i({
@@ -1,4 +1,4 @@
1
- import { _ as a, i as c, j as o, c as r, b as n, k as i, l as u, p as l, m as p, n as t, u as d, f as m } from "../index-B2dbYZR9.js";
1
+ import { _ as a, i as c, j as o, c as r, b as n, k as i, l as u, p as l, m as p, n as t, u as d, f as m } from "../index-BBdzJnvG.js";
2
2
  export {
3
3
  a as BindingRow,
4
4
  c as PersonAccess,
@@ -0,0 +1,42 @@
1
+ import { defineComponent as d, inject as a, provide as l, h as o, computed as p } from "vue";
2
+ import { RouterView as m } from "vue-router";
3
+ import { d as v } from "./context-Ch1r4fdN.js";
4
+ function y(e, r) {
5
+ return e === void 0 ? !0 : typeof e == "string" ? r.can(e) : "any" in e ? e.any.some((t) => r.can(t)) : e.all.every((t) => r.can(t));
6
+ }
7
+ const A = Symbol("vue-core.pageRefresh");
8
+ function h(e, r) {
9
+ return e.matched.findIndex((t) => !y(t.meta.access, r));
10
+ }
11
+ function x(e) {
12
+ return {
13
+ deniedFrom: p(() => h(e.router.currentRoute.value, e.access)),
14
+ noAccess: e.noAccess
15
+ };
16
+ }
17
+ const [F, R] = v("vue-core.routeAccess"), i = Symbol("vue-core.routerViewDepth"), K = d({
18
+ name: "AppRouterView",
19
+ setup() {
20
+ const e = a(i, 0);
21
+ l(i, e + 1);
22
+ const r = R(), t = e === 0 ? a(A, null) : null;
23
+ return () => o(m, null, {
24
+ default: ({ Component: s, route: c }) => {
25
+ const u = r.deniedFrom.value;
26
+ if (u !== -1 && e >= u) return o(r.noAccess);
27
+ if (!s) return null;
28
+ const n = c.meta.remountOnParam, f = [n ? `${n}:${String(c.params[n])}` : "", t?.value ? `refresh:${t.value}` : ""].filter(Boolean).join("|");
29
+ return o(s, { key: f || void 0 });
30
+ }
31
+ });
32
+ }
33
+ });
34
+ export {
35
+ K as A,
36
+ x as c,
37
+ h as f,
38
+ y as i,
39
+ A as p,
40
+ F as r,
41
+ R as u
42
+ };
@@ -19,6 +19,7 @@ export declare function provideContext<T>(key: InjectionKey<T>, value: T): Conte
19
19
  * shell that offers more augments this interface (declaration merging, like `IconRegistry`).
20
20
  *
21
21
  * - `headerActions`: the actions of the top bar (a notification bell, a search button)
22
+ * - `search`: a search field at the top of the sidebar, under the brand, and at the top of the phone drawer (a quick-search trigger that looks like a field)
22
23
  * - `accountMenu`: entries of the signed-in user's menu
23
24
  * - `banner`: a strip across the top of the whole shell, above everything (a notice that must stay in view: signed in as somebody else)
24
25
  * - `host`: components with no place of their own that must be mounted once (a command palette, a dialog host)
@@ -27,6 +28,7 @@ export interface ShellSlots {
27
28
  }
28
29
  interface DocumentedShellSlots {
29
30
  headerActions: true;
31
+ search: true;
30
32
  accountMenu: true;
31
33
  banner: true;
32
34
  host: true;
package/dist/app/index.js CHANGED
@@ -7,20 +7,20 @@ import { createRouter as Ke, isNavigationFailure as _e } from "vue-router";
7
7
  import { i as Ie } from "../leaveGuard-Cc8yeLxM.js";
8
8
  import { c as Fe, i as Te, f as qe } from "../format-B8mJm946.js";
9
9
  import { coreMessages as oe, createMessageRuntime as Pe } from "../i18n/index.js";
10
- import { i as We, a as Be } from "../Icon.vue_vue_type_script_lang-VvcV2Bzo.js";
10
+ import { i as We, a as Be } from "../Icon.vue_vue_type_script_lang-D7oC-d-S.js";
11
11
  import { i as De, b as He } from "../bottomDock-BZEiOPYZ.js";
12
- import { i as Ve, p as Ge } from "../chrome-BS3xJcad.js";
13
- import { i as Je, g as ze } from "../platform-hunMqFdB.js";
14
- import { c as Qe, A as Ue, r as re } from "../access-DdRFrVV1.js";
15
- import { c as Xe, _ as Ye } from "../NoAccess.vue_vue_type_script_setup_true_lang-8m9cNptR.js";
16
- import { i as Ze } from "../guards-Cd1V28oG.js";
17
- import { b as et, c as tt, n as ne } from "../navigation-BPWa63ge.js";
18
- import { c as st, s as ae } from "../contributions-CDDg3fKp.js";
19
- import { S as Tt } from "../contributions-CDDg3fKp.js";
12
+ import { i as Ve, p as Ge } from "../chrome-nUcmVu8G.js";
13
+ import { i as Je, g as ze } from "../platform-q3cjODLx.js";
14
+ import { c as Qe, A as Ue, r as re } from "../access-DmAceEo5.js";
15
+ import { c as Xe, _ as Ye } from "../NoAccess.vue_vue_type_script_setup_true_lang-DWxq-MTM.js";
16
+ import { i as Ze } from "../guards-Dve61KjR.js";
17
+ import { b as et, c as tt, n as ne } from "../navigation-Cm3iChlR.js";
18
+ import { c as st, s as ae } from "../contributions-DsfmDoRD.js";
19
+ import { S as Tt } from "../contributions-DsfmDoRD.js";
20
20
  import { a as ie } from "../environment-Dva-SG8D.js";
21
21
  import { u as Pt } from "../environment-Dva-SG8D.js";
22
- import { _ as ot } from "../Button.vue_vue_type_script_setup_true_lang-CYil8h9z.js";
23
- import { _ as rt } from "../EmptyState.vue_vue_type_script_setup_true_lang-C2ZYIT9F.js";
22
+ import { _ as ot } from "../Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
23
+ import { _ as rt } from "../EmptyState.vue_vue_type_script_setup_true_lang-50p-Mp8I.js";
24
24
  import { i as nt } from "../feature-DdUAfyi4.js";
25
25
  import { d as Bt, p as Dt } from "../feature-DdUAfyi4.js";
26
26
  import { k as Vt } from "../keepAlive-WYQGRhuz.js";
@@ -1,4 +1,4 @@
1
- import { _ as a, m as o, s as r, u, a as e } from "../Button.vue_vue_type_script_setup_true_lang-CYil8h9z.js";
1
+ import { _ as a, m as o, s as r, u, a as e } from "../Button.vue_vue_type_script_setup_true_lang-CL9Qh5yq.js";
2
2
  export {
3
3
  a as Button,
4
4
  o as matchesShortcut,
@@ -84,8 +84,8 @@ function S(l) {
84
84
  ), M(() => u.clearRegistration());
85
85
  }
86
86
  export {
87
- R as a,
88
- b,
87
+ b as a,
88
+ R as b,
89
89
  O as c,
90
90
  P as i,
91
91
  g as p,
@@ -1,21 +1,13 @@
1
- import { R as p, c as o, f as u } from "../client-Bw0aM5Gu.js";
2
- import { A as n, i as f, a as l } from "../error-CD7x0Jrz.js";
3
- function s(e, i, r = {}) {
4
- return { method: e, path: i, permission: r.permission, public: r.public === !0, raw: !1 };
5
- }
6
- s.raw = (e, i, r = {}) => ({
7
- method: e,
8
- path: i,
9
- permission: r.permission,
10
- public: r.public === !0,
11
- raw: !0
12
- });
1
+ import { R as t, c as a } from "../client-k9euDWF4.js";
2
+ import { A as s, i as p, a as f } from "../error-CD7x0Jrz.js";
3
+ import { f as E } from "../transport-BnP7WC0Y.js";
4
+ import { r as m } from "../route-goWMxDUN.js";
13
5
  export {
14
- n as ApiError,
15
- p as REQUEST_ID_HEADER,
16
- o as createHttpClient,
17
- u as fetchTransport,
18
- f as isAborted,
19
- l as isApiError,
20
- s as route
6
+ s as ApiError,
7
+ t as REQUEST_ID_HEADER,
8
+ a as createHttpClient,
9
+ E as fetchTransport,
10
+ p as isAborted,
11
+ f as isApiError,
12
+ m as route
21
13
  };
@@ -1,5 +1,6 @@
1
1
  import { A, k as I, a as S } from "./error-CD7x0Jrz.js";
2
- function U(t) {
2
+ import { f as U } from "./transport-BnP7WC0Y.js";
3
+ function D(t) {
3
4
  if (!t) return "";
4
5
  const e = new URLSearchParams();
5
6
  for (const [a, r] of Object.entries(t))
@@ -9,7 +10,7 @@ function U(t) {
9
10
  return e.toString();
10
11
  }
11
12
  const g = (t) => typeof Blob < "u" && t instanceof Blob;
12
- function D(t) {
13
+ function z(t) {
13
14
  const e = new FormData();
14
15
  for (const [a, r] of Object.entries(t))
15
16
  if (r != null)
@@ -22,23 +23,23 @@ function D(t) {
22
23
  function E(t) {
23
24
  return g(t) ? t : t instanceof Date ? t.toISOString() : typeof t == "object" && t !== null ? JSON.stringify(t) : String(t);
24
25
  }
25
- function z(t) {
26
+ function v(t) {
26
27
  if (t === void 0) return { body: void 0, contentType: null };
27
28
  if (typeof t == "string" || t instanceof FormData || t instanceof URLSearchParams || t instanceof ArrayBuffer || ArrayBuffer.isView(t) || g(t))
28
29
  return { body: t, contentType: null };
29
30
  if (typeof t == "object" && t !== null && !Array.isArray(t)) {
30
31
  const e = t;
31
32
  if (Object.values(e).some((a) => g(a) || Array.isArray(a) && a.some(g)))
32
- return { body: D(e), contentType: null };
33
+ return { body: z(e), contentType: null };
33
34
  }
34
35
  return { body: JSON.stringify(t), contentType: "application/json" };
35
36
  }
36
- function v() {
37
+ function B() {
37
38
  const t = new Uint8Array(16);
38
39
  return globalThis.crypto.getRandomValues(t), Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
39
40
  }
40
41
  const b = "X-Request-ID", T = (t) => typeof t == "object" && t !== null && !Array.isArray(t), w = (t) => typeof t == "string" && t !== "" ? t : null;
41
- function B(t) {
42
+ function O(t) {
42
43
  const e = t?.errors ?? t?.fields;
43
44
  if (!T(e)) return {};
44
45
  const a = {};
@@ -46,7 +47,7 @@ function B(t) {
46
47
  Array.isArray(i) ? a[r] = i.map(String) : i != null && (a[r] = [String(i)]);
47
48
  return a;
48
49
  }
49
- async function O(t) {
50
+ async function C(t) {
50
51
  const e = await t.text();
51
52
  if (e.trim() === "") return { payload: null, readable: !0 };
52
53
  try {
@@ -55,10 +56,10 @@ async function O(t) {
55
56
  return { payload: null, readable: !1 };
56
57
  }
57
58
  }
58
- async function C(t, e) {
59
- const a = t.headers.get(b) ?? e, { payload: r, readable: i } = await O(t), o = T(r) ? r : null;
59
+ async function F(t, e) {
60
+ const a = t.headers.get(b) ?? e, { payload: r, readable: i } = await C(t), o = T(r) ? r : null;
60
61
  if (!t.ok) {
61
- const m = B(o), n = o?.params;
62
+ const m = O(o), n = o?.params;
62
63
  throw new A({
63
64
  kind: I(t.status, Object.keys(m).length > 0),
64
65
  message: w(o?.error) ?? w(o?.message) ?? `Request failed with status ${t.status}`,
@@ -85,25 +86,25 @@ async function C(t, e) {
85
86
  requestId: a
86
87
  } : { data: r, meta: null, message: null, status: t.status, requestId: a };
87
88
  }
88
- const F = (t, e) => globalThis.fetch(t, e), H = (t) => /^[a-z][a-z0-9+.-]*:\/\//i.test(t);
89
+ const H = (t) => /^[a-z][a-z0-9+.-]*:\/\//i.test(t);
89
90
  function P(t, e, a) {
90
91
  const r = H(e) || t === "" ? e : `${t.replace(/\/+$/, "")}/${e.replace(/^\/+/, "")}`;
91
92
  return a === "" ? r : `${r}${r.includes("?") ? "&" : "?"}${a}`;
92
93
  }
93
94
  const j = (t, e) => new A({ kind: "aborted", message: "The request was cancelled", requestId: t, cause: e });
94
- function x(t = {}) {
95
- const { baseUrl: e = "", transport: a = F, credentials: r = "include" } = t;
95
+ function J(t = {}) {
96
+ const { baseUrl: e = "", transport: a = U, credentials: r = "include" } = t;
96
97
  async function i(n, s, c, u) {
97
- const { signal: f } = u, y = t.requestId === !1 ? null : (t.requestId ?? v)();
98
+ const { signal: f } = u, y = t.requestId === !1 ? null : (t.requestId ?? B)();
98
99
  if (f?.aborted) throw j(y, f.reason);
99
- const p = z(c), l = new Headers({ Accept: "application/json" }), h = t.headers ? await t.headers() : void 0;
100
+ const p = v(c), l = new Headers({ Accept: "application/json" }), h = t.headers ? await t.headers() : void 0;
100
101
  for (const d of [h, u.headers])
101
102
  d && new Headers(d).forEach(($, q) => l.set(q, $));
102
103
  y !== null && !l.has(b) && l.set(b, y), p.contentType !== null && !l.has("Content-Type") && l.set("Content-Type", p.contentType);
103
- const k = { method: n, headers: l, credentials: r, body: p.body, signal: f }, R = P(e, s, U(u.query));
104
+ const k = { method: n, headers: l, credentials: r, body: p.body, signal: f }, R = P(e, s, D(u.query));
104
105
  try {
105
106
  const d = await a(R, k);
106
- return await C(d, y);
107
+ return await F(d, y);
107
108
  } catch (d) {
108
109
  throw S(d) ? d : f?.aborted || d instanceof Error && d.name === "AbortError" ? j(y, d) : new A({
109
110
  kind: "network",
@@ -142,6 +143,5 @@ function x(t = {}) {
142
143
  }
143
144
  export {
144
145
  b as R,
145
- x as c,
146
- F as f
146
+ J as c
147
147
  };
@@ -21,6 +21,8 @@ export interface QueryContract<Sort extends string, Filter extends string, View
21
21
  readonly sensitive?: readonly Filter[];
22
22
  /** Default: `DEFAULT_PAGE_SIZES`. */
23
23
  readonly pageSizes?: readonly number[];
24
+ /** Whether the backend searches by text. `false` leaves the search field out of the toolbar (a list the server only filters). Default true. */
25
+ readonly search?: boolean;
24
26
  }
25
27
  export type CollectionDefaults<Sort extends string, Filter extends string, View extends string> = Partial<CollectionQuery<Sort, Filter, View>>;
26
28
  /** The state a stored version of a list's state (a link, a saved view) is migrated from. */
@@ -56,6 +58,7 @@ export interface CollectionDefinition<Row, Sort extends string = string, Filter
56
58
  readonly views: readonly View[] | null;
57
59
  readonly sensitive: readonly Filter[];
58
60
  readonly pageSizes: readonly number[];
61
+ readonly search: boolean;
59
62
  };
60
63
  readonly migrate?: (stored: StoredState, version: number) => StoredState | null;
61
64
  }
@@ -1,10 +1,10 @@
1
- import { D as M, L as O, a as V, h as j, l as U, r as G } from "../http-DGGSKWvU.js";
2
- import { _ as Z, a as q, u as H } from "../CollectionPage.vue_vue_type_script_setup_true_lang-CXILftEc.js";
3
- import { u as K } from "../neighbors-D0WRBxXI.js";
4
- import { a as W, b as Y } from "../rowLayout-BI7a3Kom.js";
5
- import { _ as te } from "../DataTable.vue_vue_type_script_setup_true_lang-DSYgS9lC.js";
1
+ import { D as M, L as O, a as V, h as j, l as U, r as G } from "../http-CNcDHSOj.js";
2
+ import { _ as Z, a as q, u as H } from "../CollectionPage.vue_vue_type_script_setup_true_lang-DU_jzTg7.js";
3
+ import { u as K } from "../neighbors-DpaIMQAL.js";
4
+ import { a as W, b as Y } from "../rowLayout-BqTEhEuy.js";
5
+ import { _ as te } from "../DataTable.vue_vue_type_script_setup_true_lang-UH6f9puS.js";
6
6
  import { defineComponent as y, openBlock as c, createElementBlock as d, Fragment as h, renderList as v, createBlock as k, unref as u, withCtx as C, normalizeClass as m, createVNode as p, createCommentVNode as g } from "vue";
7
- import { _ } from "../Icon.vue_vue_type_script_lang-VvcV2Bzo.js";
7
+ import { _ } from "../Icon.vue_vue_type_script_lang-D7oC-d-S.js";
8
8
  import { _ as w } from "../Tooltip.vue_vue_type_script_setup_true_lang-OOD_XNWx.js";
9
9
  import { useI18n as E } from "vue-i18n";
10
10
  function R(r = {}) {
@@ -74,6 +74,8 @@ export interface Collection<Row, Sort extends string = string, Filter extends st
74
74
  rowKey(row: Row): string | number;
75
75
  /** The page sizes the list offers. */
76
76
  readonly pageSizes: readonly number[];
77
+ /** Whether the list can be searched by text (the definition's `query.search`); the toolbar shows the search field only then. */
78
+ readonly searchable: boolean;
77
79
  /** The request state: loading (nothing to show), loaded, refreshing (previous rows stay), stale (a refresh failed, previous rows stay) or failed. */
78
80
  readonly state: Readonly<Ref<AsyncState<ListPage<Row>>>>;
79
81
  /** The query the list shows or is loading. */
@@ -1,8 +1,8 @@
1
1
  import { _ as K, i as S } from "../Avatar.vue_vue_type_script_setup_true_lang-CFIheaSr.js";
2
2
  import { defineComponent as o, openBlock as t, createElementBlock as l, createElementVNode as c, toDisplayString as u, createCommentVNode as d, normalizeClass as f, Fragment as _, renderList as g, createBlock as i, createSlots as x, withCtx as p, renderSlot as m, resolveDynamicComponent as y } from "vue";
3
3
  import { _ as b } from "../KeyValue.vue_vue_type_script_setup_true_lang-wcZcvnow.js";
4
- import { _ as F } from "../Panel.vue_vue_type_script_setup_true_lang-BCRxRK4D.js";
5
- import { _ as N } from "../Timestamp.vue_vue_type_script_setup_true_lang-1RJGKxbD.js";
4
+ import { _ as F } from "../Panel.vue_vue_type_script_setup_true_lang-BA0u_DtS.js";
5
+ import { _ as N } from "../Timestamp.vue_vue_type_script_setup_true_lang-FVRUr-9y.js";
6
6
  const k = {
7
7
  role: "separator",
8
8
  class: "my-2 flex items-center gap-4"