@wssto2/vue-core 0.18.0 → 0.20.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 (150) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +4 -0
  3. package/dist/{AccessGate.vue_vue_type_script_setup_true_lang-Bg8JFAOT.js → AccessGate.vue_vue_type_script_setup_true_lang-Dw_pnsh9.js} +1 -1
  4. package/dist/{AccountMenuItem.vue_vue_type_script_setup_true_lang-BIYgaihv.js → AccountMenuItem.vue_vue_type_script_setup_true_lang-rmH1XbU9.js} +1 -1
  5. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-B5IMNnTf.js → ActionRow.vue_vue_type_script_setup_true_lang-_TDoIg53.js} +2 -2
  6. package/dist/{Activity-CiYn5E6A.js → Activity-BDVYmNgy.js} +9 -9
  7. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-oXWQTfBs.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-DryXyklZ.js} +6 -6
  8. package/dist/{AlertDialog.vue_vue_type_script_setup_true_lang-WuGvAOrj.js → AlertDialog.vue_vue_type_script_setup_true_lang-QYvbly_-.js} +1 -1
  9. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js → AsyncSection.vue_vue_type_script_setup_true_lang-DRP4BnMb.js} +4 -4
  10. package/dist/{Banner.vue_vue_type_script_setup_true_lang-sv0phngk.js → Banner.vue_vue_type_script_setup_true_lang-ukLpznql.js} +1 -1
  11. package/dist/{Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js → Button.vue_vue_type_script_setup_true_lang-DkRuLqQK.js} +1 -1
  12. package/dist/{Changes-Cy8STpLX.js → Changes-DRij0rEQ.js} +5 -5
  13. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-Dr6nFNBB.js → CollectionPage.vue_vue_type_script_setup_true_lang-Aoof1prZ.js} +12 -12
  14. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-D372wlxR.js → DataTable.vue_vue_type_script_setup_true_lang-DGcNcRkO.js} +1 -1
  15. package/dist/{DateField.vue_vue_type_script_setup_true_lang-D0KcfW8R.js → DateField.vue_vue_type_script_setup_true_lang-J04KjxmR.js} +4 -4
  16. package/dist/{DeadLetters-DhJkMpd_.js → DeadLetters-Dpm4UY__.js} +4 -4
  17. package/dist/{DiscardChangesModal.vue_vue_type_script_setup_true_lang-92szOrYd.js → DiscardChangesModal.vue_vue_type_script_setup_true_lang-CxNVKoYI.js} +1 -1
  18. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js → EmptyState.vue_vue_type_script_setup_true_lang-ByKvrNSg.js} +1 -1
  19. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-lvAuBG-0.js → FormGroup.vue_vue_type_script_setup_true_lang-7bIssY9f.js} +4 -4
  20. package/dist/{FormRow.vue_vue_type_script_setup_true_lang-CpgNVQF4.js → FormRow.vue_vue_type_script_setup_true_lang-okuxbKyI.js} +1 -1
  21. package/dist/{FormView.vue_vue_type_script_setup_true_lang-D01Jr4UU.js → FormView.vue_vue_type_script_setup_true_lang-CiYprNRr.js} +2 -2
  22. package/dist/{General-CwTPC5UP.js → General-BmVEbYqv.js} +8 -8
  23. package/dist/{HeaderAction.vue_vue_type_script_setup_true_lang-Da59TLBh.js → HeaderAction.vue_vue_type_script_setup_true_lang-DVfkuOy-.js} +2 -2
  24. package/dist/{Icon.vue_vue_type_script_lang-BhhsFYwp.js → Icon.vue_vue_type_script_lang-0pW1XBaE.js} +35 -33
  25. package/dist/{IconTile.vue_vue_type_script_setup_true_lang-BmxCuUZ9.js → IconTile.vue_vue_type_script_setup_true_lang-BWHQiA7d.js} +1 -1
  26. package/dist/{IncidentRecord-hXEGuLGg.js → IncidentRecord-DWY6Bws1.js} +17 -17
  27. package/dist/{IncidentsList-C41VyDwK.js → IncidentsList-C21UNIhT.js} +6 -6
  28. package/dist/{LeaveGuardRoot.vue_vue_type_script_setup_true_lang-CrGrjrlO.js → LeaveGuardRoot.vue_vue_type_script_setup_true_lang-CpEd_Psg.js} +1 -1
  29. package/dist/{Menu.vue_vue_type_script_setup_true_lang-Cqu4Ebsb.js → Menu.vue_vue_type_script_setup_true_lang-DobycRxf.js} +1 -1
  30. package/dist/{MenuButton.vue_vue_type_script_setup_true_lang-C-XRr5f2.js → MenuButton.vue_vue_type_script_setup_true_lang-qDKt6gX9.js} +1 -1
  31. package/dist/{Modal.vue_vue_type_script_setup_true_lang-CZ7WrDwu.js → Modal.vue_vue_type_script_setup_true_lang-C0tQAYQ4.js} +2 -2
  32. package/dist/{NewRolePage-BYYZJkK7.js → NewRolePage-K5zts3e_.js} +4 -4
  33. package/dist/{NoAccess.vue_vue_type_script_setup_true_lang-BHzZtZ50.js → NoAccess.vue_vue_type_script_setup_true_lang-BYnTQCtW.js} +1 -1
  34. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-BhNZgEW6.js → NumberField.vue_vue_type_script_setup_true_lang-CxgVJrdv.js} +2 -2
  35. package/dist/{Panel.vue_vue_type_script_setup_true_lang-D_Wg42hu.js → Panel.vue_vue_type_script_setup_true_lang-DTCmFSwg.js} +1 -1
  36. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-mYFuG-Y3.js → PersonAccess.vue_vue_type_script_setup_true_lang-Kp9g93wE.js} +12 -12
  37. package/dist/{PhotoViewer.vue_vue_type_script_setup_true_lang-DmMg1T_V.js → PhotoViewer.vue_vue_type_script_setup_true_lang-D2-uQbSV.js} +1 -1
  38. package/dist/{ProfilePage-DGEsIycR.js → ProfilePage-C3mLBer6.js} +17 -17
  39. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-B3BnYg1x.js → RecordHeader.vue_vue_type_script_setup_true_lang-Dz5Qw8II.js} +2 -2
  40. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-1iZtj3rh.js → ResourcePage.vue_vue_type_script_setup_true_lang-R3eJKPq5.js} +4 -4
  41. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-BslSDDiM.js → RoleEditor.vue_vue_type_script_setup_true_lang-CGMpBpnK.js} +12 -12
  42. package/dist/{RolePage-C08ZUqw1.js → RolePage-C62_sGxx.js} +13 -13
  43. package/dist/{RolesPage-FOuY1VKg.js → RolesPage-CS8ryIQq.js} +9 -9
  44. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-CodyVezo.js → SectionList.vue_vue_type_script_setup_true_lang-C6eOVjpa.js} +3 -3
  45. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-DCTFxfPB.js → SectionNavigator.vue_vue_type_script_setup_true_lang-DqDcFvS0.js} +6 -6
  46. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-CLR6EvzO.js → SegmentedField.vue_vue_type_script_setup_true_lang-Du4YUcw9.js} +2 -2
  47. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-D5xYofdb.js → SelectField.vue_vue_type_script_setup_true_lang-BA5YMCXA.js} +6 -6
  48. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-CDr4WNIb.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-BoeV2_MN.js} +8 -8
  49. package/dist/{ServiceAccountRecord-kWwIQGZb.js → ServiceAccountRecord-BDkaaOte.js} +18 -18
  50. package/dist/{ServiceAccountsList-CKy9_YHP.js → ServiceAccountsList-KaZwNlK5.js} +10 -10
  51. package/dist/{Sessions-BDc8gdYH.js → Sessions-DhOpUlRc.js} +7 -7
  52. package/dist/{SettingsPage-t-8kmFVT.js → SettingsPage-DPzg7zwX.js} +18 -18
  53. package/dist/Sheet.vue_vue_type_script_setup_true_lang-C1jpmLYN.js +163 -0
  54. package/dist/{SignIn-CqtkvtCZ.js → SignIn-4aUxE2LU.js} +8 -8
  55. package/dist/{SignInPage-DcdNKZIb.js → SignInPage-B80pQ8tG.js} +6 -6
  56. package/dist/{SignIns-D4-nGu0B.js → SignIns-CLX8Puf1.js} +5 -5
  57. package/dist/{StatusLine.vue_vue_type_script_setup_true_lang-DsdQmLq6.js → StatusLine.vue_vue_type_script_setup_true_lang-BN8nG1CW.js} +1 -1
  58. package/dist/{SwipeActions.vue_vue_type_script_setup_true_lang-D8SiC0G7.js → SwipeActions.vue_vue_type_script_setup_true_lang-BBqcW3MR.js} +1 -1
  59. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-CLtcuofe.js → SwitchField.vue_vue_type_script_setup_true_lang-Dw7BbBU4.js} +2 -2
  60. package/dist/Tabs.vue_vue_type_script_setup_true_lang-Cma_ma6V.js +169 -0
  61. package/dist/{TextField.vue_vue_type_script_setup_true_lang-CVGh-p3J.js → TextField.vue_vue_type_script_setup_true_lang-DS6RPR-h.js} +4 -4
  62. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-YxUlNHSk.js → TextareaField.vue_vue_type_script_setup_true_lang-BqpZt1Hv.js} +2 -2
  63. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-DHNC_MLt.js → TimeField.vue_vue_type_script_setup_true_lang-BeS1cfqL.js} +4 -4
  64. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-d_KuxWjH.js → Timestamp.vue_vue_type_script_setup_true_lang-XbbupD9A.js} +1 -1
  65. package/dist/{UserRecord-CwZCr9Im.js → UserRecord-BFqw2Pi8.js} +10 -10
  66. package/dist/{UsersList-Cn19sFgv.js → UsersList-C52C1lN1.js} +3 -3
  67. package/dist/{ViewTabs.vue_vue_type_script_setup_true_lang-BjdDXE3T.js → ViewTabs.vue_vue_type_script_setup_true_lang-CBYrLPL4.js} +1 -1
  68. package/dist/access/index.js +7 -7
  69. package/dist/app/index.js +2 -2
  70. package/dist/{application-CDSweJb9.js → application-cTqMhmFf.js} +8 -8
  71. package/dist/{back-LcLlFodC.js → back-CeozxCgQ.js} +2 -2
  72. package/dist/button/index.js +1 -1
  73. package/dist/collection/RecordIdentity.vue.d.ts +1 -1
  74. package/dist/collection/index.js +9 -9
  75. package/dist/content/DiffView.vue.d.ts +22 -0
  76. package/dist/content/PreviewFrame.vue.d.ts +46 -0
  77. package/dist/content/diff.d.ts +27 -0
  78. package/dist/content/index.d.ts +4 -0
  79. package/dist/content/index.js +552 -218
  80. package/dist/content/previewFrame.d.ts +50 -0
  81. package/dist/{contributions-B0x5x5xD.js → contributions-BSmIRPg1.js} +1 -1
  82. package/dist/controls/SortableList.vue.d.ts +31 -0
  83. package/dist/controls/Tabs.vue.d.ts +2 -0
  84. package/dist/controls/index.d.ts +1 -0
  85. package/dist/controls/index.js +132 -33
  86. package/dist/form/CodeEditor.vue.d.ts +61 -0
  87. package/dist/form/CodeField.vue.d.ts +62 -0
  88. package/dist/form/I18nField.vue.d.ts +1 -1
  89. package/dist/form/MarkerList.vue.d.ts +20 -0
  90. package/dist/form/TextareaField.vue.d.ts +1 -1
  91. package/dist/form/codeEditor.d.ts +27 -0
  92. package/dist/form/index.d.ts +4 -0
  93. package/dist/form/index.js +1954 -1651
  94. package/dist/{guards-CNJ0ATVC.js → guards-BP9x7CLF.js} +1 -1
  95. package/dist/i18n/index.js +15 -15
  96. package/dist/icon/core.d.ts +2 -0
  97. package/dist/icon/index.js +1 -1
  98. package/dist/identity/index.js +3 -3
  99. package/dist/identity/profile/EmailChangeDialog.vue.d.ts +2 -2
  100. package/dist/incidents/index.js +1 -1
  101. package/dist/{index-BA2w8uwD.js → index-CMx77x5P.js} +27 -27
  102. package/dist/{index-1HS7O2-e.js → index-CxUfs3Xz.js} +10 -10
  103. package/dist/{index-SLJWm40T.js → index-DLkQwWt9.js} +9 -9
  104. package/dist/index.d.ts +1 -1
  105. package/dist/index.js +1 -1
  106. package/dist/modal/Sheet.vue.d.ts +13 -0
  107. package/dist/modal/TabbedSheet.vue.d.ts +46 -0
  108. package/dist/modal/index.d.ts +1 -0
  109. package/dist/modal/index.js +123 -41
  110. package/dist/navigation-C05vGEN8.js +55 -0
  111. package/dist/{neighbors-Dg_LU9ry.js → neighbors-BqfO6zf3.js} +2 -2
  112. package/dist/notifications/index.js +1 -1
  113. package/dist/onboarding/index.js +2 -2
  114. package/dist/{options-mOOX6JSS.js → options-DIp_lVAj.js} +2 -2
  115. package/dist/overlay/index.js +4 -4
  116. package/dist/page/SectionNavigator.vue.d.ts +1 -1
  117. package/dist/page/SplitPane.vue.d.ts +54 -0
  118. package/dist/page/WorkbenchPage.vue.d.ts +72 -0
  119. package/dist/page/index.d.ts +2 -0
  120. package/dist/page/index.js +343 -104
  121. package/dist/phone/index.js +3 -3
  122. package/dist/platform/index.js +3 -3
  123. package/dist/platform/navigation.d.ts +10 -0
  124. package/dist/{platform-DU9QFts8.js → platform-YWfOO7b2.js} +94 -88
  125. package/dist/pwa/index.js +3 -3
  126. package/dist/resource/index.js +1 -1
  127. package/dist/{resources-BZLlAtoS.js → resources-BAxfEEv1.js} +1 -1
  128. package/dist/router/index.js +4 -4
  129. package/dist/router/navigation.d.ts +2 -0
  130. package/dist/{rowLayout-PIuD7MGo.js → rowLayout-3W9TvFNt.js} +5 -5
  131. package/dist/{sectionIndex-BS0ic5W7.js → sectionIndex-CSr457Lb.js} +2 -2
  132. package/dist/{sections-BpiRLntE.js → sections-DXso1JSV.js} +2 -2
  133. package/dist/shell/NavigationList.vue.d.ts +1 -1
  134. package/dist/shell/index.js +522 -501
  135. package/dist/shell/navigationGroups.d.ts +4 -1
  136. package/dist/state/index.js +8 -8
  137. package/dist/{state-z1iPF1DT.js → state-DqCZdet7.js} +1 -1
  138. package/dist/styles.css +1 -1
  139. package/dist/{suggestions-DeMgs_ki.js → suggestions-D0-qmRFy.js} +1 -1
  140. package/dist/testing/index.js +2 -2
  141. package/dist/{useCommand-DQKvro1n.js → useCommand-D6K6o6dx.js} +4 -4
  142. package/dist/{useGroupSheet-CRw3MUmX.js → useGroupSheet-Daxi2mzi.js} +5 -5
  143. package/dist/{usePreferences-DB29UTFD.js → usePreferences-D38x73re.js} +1 -1
  144. package/dist/{useRecordDialog-0azHxxvm.js → useRecordDialog-CfBp0kuP.js} +1 -1
  145. package/dist/{useResourceForm-zVuWerSn.js → useResourceForm-Ddxk7mc0.js} +1 -1
  146. package/dist/{useTypedEntry-BsMV66Yc.js → useTypedEntry-r4AqWlV7.js} +2 -2
  147. package/package.json +51 -1
  148. package/dist/Sheet.vue_vue_type_script_setup_true_lang-BG8HUNfs.js +0 -145
  149. package/dist/Tabs.vue_vue_type_script_setup_true_lang-tpkGp98F.js +0 -155
  150. package/dist/navigation-d-JAPBGA.js +0 -53
@@ -1,82 +1,319 @@
1
- import { _ as W, a as X, b as Y, c as Z, p as ee, u as te, d as ae } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-oXWQTfBs.js";
2
- import { B as se, a as le, u as ne } from "../back-LcLlFodC.js";
3
- import { _ as ie } from "../BottomDock.vue_vue_type_script_setup_true_lang-CjN7xYEr.js";
4
- import { b as ue, i as de, u as pe } from "../bottomDock-BZEiOPYZ.js";
5
- import { _ as x } from "../BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
6
- import { defineComponent as _, openBlock as a, createBlock as b, withCtx as c, createElementVNode as s, normalizeStyle as k, createElementBlock as l, Fragment as y, renderList as B, normalizeClass as d, unref as v, createCommentVNode as p, toDisplayString as f, useModel as C, useId as P, useTemplateRef as S, computed as $, mergeProps as T, createSlots as w, renderSlot as m, mergeModels as A } from "vue";
7
- import { _ as L } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
8
- import { _ as me } from "../RecordHeader.vue_vue_type_script_setup_true_lang-B3BnYg1x.js";
9
- import { c as ge, i as _e, p as ve, u as he, a as xe, b as ke } from "../chrome-kMBKIB1N.js";
10
- import { s as D, u as I } from "../sectionIndex-BS0ic5W7.js";
11
- import { p as Be, a as Ce } from "../sectionIndex-BS0ic5W7.js";
12
- import { _ as Se } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-DCTFxfPB.js";
13
- import { a as Te, _ as we } from "../SectionList.vue_vue_type_script_setup_true_lang-CodyVezo.js";
14
- import { _ as K } from "../Panel.vue_vue_type_script_setup_true_lang-D_Wg42hu.js";
15
- const M = ["aria-label"], R = ["aria-label"], z = ["aria-selected", "tabindex", "onClick"], E = { class: "relative" }, N = {
1
+ import { p as G, a as J, b as Q } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-DryXyklZ.js";
2
+ import { _ as qe, c as Ze, u as et, d as tt } from "../AdaptivePageShell.vue_vue_type_script_setup_true_lang-DryXyklZ.js";
3
+ import { u as X } from "../back-CeozxCgQ.js";
4
+ import { B as ot, a as st, b as lt } from "../back-CeozxCgQ.js";
5
+ import { _ as rt } from "../BottomDock.vue_vue_type_script_setup_true_lang-CjN7xYEr.js";
6
+ import { b as ct, i as ut, u as dt } from "../bottomDock-BZEiOPYZ.js";
7
+ import { _ as Y } from "../BottomDockPortal.vue_vue_type_script_setup_true_lang-DmwR-2SP.js";
8
+ import { defineComponent as A, openBlock as s, createBlock as T, withCtx as P, createElementVNode as r, normalizeStyle as O, createElementBlock as c, Fragment as q, renderList as Z, normalizeClass as $, unref as u, createCommentVNode as h, toDisplayString as S, useModel as I, useTemplateRef as H, ref as U, computed as B, onMounted as ee, onBeforeUnmount as R, watch as E, renderSlot as f, mergeModels as N, provide as D, createTextVNode as te, createVNode as ae, useId as oe, mergeProps as se, createSlots as le } from "vue";
9
+ import { _ as ne } from "../Icon.vue_vue_type_script_lang-0pW1XBaE.js";
10
+ import { _ as ft } from "../RecordHeader.vue_vue_type_script_setup_true_lang-Dz5Qw8II.js";
11
+ import { u as re, c as ie, p as ce } from "../chrome-kMBKIB1N.js";
12
+ import { i as vt, a as ht, b as bt } from "../chrome-kMBKIB1N.js";
13
+ import { s as ue, a as de } from "../sectionIndex-CSr457Lb.js";
14
+ import { p as xt, u as kt } from "../sectionIndex-CSr457Lb.js";
15
+ import { useI18n as V } from "vue-i18n";
16
+ import { a as F } from "../mediaQuery-CygcXmFW.js";
17
+ import { a as pe } from "../leaveGuard-Cc8yeLxM.js";
18
+ import { _ as yt } from "../SectionNavigator.vue_vue_type_script_setup_true_lang-DqDcFvS0.js";
19
+ import { a as $t, _ as Bt } from "../SectionList.vue_vue_type_script_setup_true_lang-C6eOVjpa.js";
20
+ import { _ as fe } from "../Panel.vue_vue_type_script_setup_true_lang-DTCmFSwg.js";
21
+ const me = ["aria-label"], ve = ["aria-label"], he = ["aria-selected", "tabindex", "onClick"], be = { class: "relative" }, ge = {
16
22
  key: 2,
17
23
  class: "absolute -right-1 -top-0.5 size-2 rounded-full bg-status-warning-solid ring-2 ring-surface-cell"
18
- }, H = {
24
+ }, xe = {
19
25
  key: 0,
20
26
  class: "sr-only"
21
- }, U = /* @__PURE__ */ _({
27
+ }, Ge = /* @__PURE__ */ A({
22
28
  __name: "BottomTabBar",
23
29
  props: {
24
30
  items: {},
25
31
  label: {}
26
32
  },
27
33
  emits: ["select"],
28
- setup(n, { emit: t }) {
29
- const o = n, r = t;
30
- return (i, g) => (a(), b(x, null, {
31
- default: c(() => [
32
- s("nav", {
33
- "aria-label": o.label,
34
+ setup(m, { emit: e }) {
35
+ const i = m, x = e;
36
+ return (d, v) => (s(), T(Y, null, {
37
+ default: P(() => [
38
+ r("nav", {
39
+ "aria-label": i.label,
34
40
  class: "dock-safe-area dock-tab-bar pointer-events-auto order-last border-t border-border-separator bg-surface-cell/90 backdrop-blur-lg"
35
41
  }, [
36
- s("ul", {
42
+ r("ul", {
37
43
  class: "grid",
38
- style: k({ gridTemplateColumns: `repeat(${o.items.length}, minmax(0, 1fr))` }),
44
+ style: O({ gridTemplateColumns: `repeat(${i.items.length}, minmax(0, 1fr))` }),
39
45
  role: "tablist",
40
- "aria-label": o.label
46
+ "aria-label": i.label
41
47
  }, [
42
- (a(!0), l(y, null, B(o.items, (e) => (a(), l("li", {
43
- key: e.value,
48
+ (s(!0), c(q, null, Z(i.items, (t) => (s(), c("li", {
49
+ key: t.value,
44
50
  role: "presentation"
45
51
  }, [
46
- s("button", {
52
+ r("button", {
47
53
  type: "button",
48
54
  role: "tab",
49
- "aria-selected": e.active,
50
- tabindex: e.active ? 0 : -1,
51
- class: d(["relative flex h-14 w-full cursor-pointer flex-col items-center justify-center gap-1 px-1 transition-colors duration-motion-fast focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-border-focus", e.active ? "text-content-link" : "text-content-muted active:text-content-strong"]),
52
- onClick: (u) => r("select", e.value)
55
+ "aria-selected": t.active,
56
+ tabindex: t.active ? 0 : -1,
57
+ class: $(["relative flex h-14 w-full cursor-pointer flex-col items-center justify-center gap-1 px-1 transition-colors duration-motion-fast focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-border-focus", t.active ? "text-content-link" : "text-content-muted active:text-content-strong"]),
58
+ onClick: (p) => x("select", t.value)
53
59
  }, [
54
- s("span", E, [
55
- e.icon ? (a(), b(v(L), {
60
+ r("span", be, [
61
+ t.icon ? (s(), T(u(ne), {
56
62
  key: 0,
57
- name: e.icon,
63
+ name: t.icon,
58
64
  size: 22
59
- }, null, 8, ["name"])) : p("", !0),
60
- e.badge ? (a(), l("span", {
65
+ }, null, 8, ["name"])) : h("", !0),
66
+ t.badge ? (s(), c("span", {
61
67
  key: 1,
62
- class: d(["absolute -right-2.5 -top-1.5 min-w-4 rounded-full px-1 text-center text-3xs font-semibold leading-4", e.badgeTone === "critical" ? "bg-status-danger-solid text-white" : "bg-tint text-content-on-tint"])
63
- }, f(e.badge), 3)) : e.warning ? (a(), l("span", N)) : p("", !0)
68
+ class: $(["absolute -right-2.5 -top-1.5 min-w-4 rounded-full px-1 text-center text-3xs font-semibold leading-4", t.badgeTone === "critical" ? "bg-status-danger-solid text-white" : "bg-tint text-content-on-tint"])
69
+ }, S(t.badge), 3)) : t.warning ? (s(), c("span", ge)) : h("", !0)
64
70
  ]),
65
- e.warning ? (a(), l("span", H, f(e.warning), 1)) : p("", !0),
66
- s("span", {
67
- class: d(["w-full truncate text-center text-2xs", e.active ? "font-semibold" : "font-medium"])
68
- }, f(e.label), 3)
69
- ], 10, z)
71
+ t.warning ? (s(), c("span", xe, S(t.warning), 1)) : h("", !0),
72
+ r("span", {
73
+ class: $(["w-full truncate text-center text-2xs", t.active ? "font-semibold" : "font-medium"])
74
+ }, S(t.label), 3)
75
+ ], 10, he)
70
76
  ]))), 128))
71
- ], 12, R)
72
- ], 8, M)
77
+ ], 12, ve)
78
+ ], 8, me)
73
79
  ]),
74
80
  _: 1
75
81
  }));
76
82
  }
77
- }), q = /* @__PURE__ */ _({
83
+ }), ke = ["data-stacked"], _e = ["aria-orientation", "aria-valuenow", "aria-label"], ye = /* @__PURE__ */ A({
84
+ __name: "SplitPane",
85
+ props: /* @__PURE__ */ N({
86
+ orientation: { default: "horizontal" },
87
+ min: { default: 160 },
88
+ max: { default: void 0 },
89
+ storageKey: { default: void 0 },
90
+ stackBelow: { default: "lg" },
91
+ label: { default: void 0 }
92
+ }, {
93
+ size: { default: 0.5 },
94
+ sizeModifiers: {}
95
+ }),
96
+ emits: ["update:size"],
97
+ setup(m) {
98
+ const e = m, i = I(m, "size"), { t: x } = V(), v = F(`(min-width: ${{ md: "48rem", lg: "64rem", xl: "80rem" }[e.stackBelow]})`), t = H("root"), p = U(0), n = B(() => e.orientation === "vertical"), k = B(() => e.storageKey ? `vue-core:split:${e.storageKey}` : null);
99
+ function M(a) {
100
+ let l = 0, g = 1;
101
+ return p.value > 0 && (l = Math.min(e.min / p.value, 0.5), g = Math.max(1 - e.min / p.value, 0.5), e.max !== void 0 && (g = Math.min(g, Math.max(e.max / p.value, l)))), Math.min(Math.max(Number.isFinite(a) ? a : 0.5, l), g);
102
+ }
103
+ const b = B(() => M(i.value)), o = B(() => Math.round(b.value * 100));
104
+ function _(a) {
105
+ if (k.value)
106
+ try {
107
+ localStorage.setItem(k.value, String(a));
108
+ } catch {
109
+ }
110
+ }
111
+ function z(a) {
112
+ const l = M(a);
113
+ i.value = l, _(l);
114
+ }
115
+ function K() {
116
+ const a = t.value?.getBoundingClientRect();
117
+ p.value = a ? n.value ? a.height : a.width : 0;
118
+ }
119
+ let L;
120
+ ee(() => {
121
+ if (k.value)
122
+ try {
123
+ const a = Number.parseFloat(localStorage.getItem(k.value) ?? "");
124
+ a > 0 && a < 1 && (i.value = a);
125
+ } catch {
126
+ }
127
+ K(), typeof ResizeObserver < "u" && t.value && (L = new ResizeObserver(K), L.observe(t.value));
128
+ }), R(() => L?.disconnect()), E(n, K);
129
+ function W(a) {
130
+ const [l, g] = n.value ? ["ArrowUp", "ArrowDown"] : ["ArrowLeft", "ArrowRight"], w = a.shiftKey ? 0.1 : 0.02;
131
+ let y;
132
+ if (a.key === l) y = b.value - w;
133
+ else if (a.key === g) y = b.value + w;
134
+ else if (a.key === "Home") y = 0;
135
+ else if (a.key === "End") y = 1;
136
+ else return;
137
+ a.preventDefault(), z(y);
138
+ }
139
+ function j(a) {
140
+ const l = a.currentTarget;
141
+ l.setPointerCapture?.(a.pointerId);
142
+ const g = (y) => {
143
+ const C = t.value?.getBoundingClientRect();
144
+ !C || !(p.value > 0) || z(n.value ? (y.clientY - C.top) / C.height : (y.clientX - C.left) / C.width);
145
+ }, w = () => {
146
+ l.removeEventListener("pointermove", g), l.removeEventListener("pointerup", w), l.removeEventListener("pointercancel", w);
147
+ };
148
+ l.addEventListener("pointermove", g), l.addEventListener("pointerup", w), l.addEventListener("pointercancel", w);
149
+ }
150
+ return (a, l) => (s(), c("div", {
151
+ ref_key: "root",
152
+ ref: t,
153
+ "data-split-pane": "",
154
+ class: $(["flex min-h-0 min-w-0", [n.value ? "flex-col" : "flex-row", u(v) ? "h-full" : "flex-col"]]),
155
+ "data-stacked": !u(v) || void 0
156
+ }, [
157
+ r("div", {
158
+ class: "min-h-0 min-w-0 overflow-hidden",
159
+ style: O(u(v) ? { flex: `0 0 ${b.value * 100}%`, ...n.value ? { minHeight: `${e.min}px` } : { minWidth: `${e.min}px` } } : void 0)
160
+ }, [
161
+ f(a.$slots, "start")
162
+ ], 4),
163
+ u(v) ? (s(), c("div", {
164
+ key: 0,
165
+ role: "separator",
166
+ tabindex: "0",
167
+ "data-split-handle": "",
168
+ "aria-orientation": n.value ? "horizontal" : "vertical",
169
+ "aria-valuenow": o.value,
170
+ "aria-valuemin": "0",
171
+ "aria-valuemax": "100",
172
+ "aria-label": e.label ?? u(x)("core.page.split.resize"),
173
+ class: $(["group relative z-10 shrink-0 touch-none bg-border-separator outline-none focus-visible:bg-border-focus", n.value ? "h-px w-full cursor-row-resize" : "h-full w-px cursor-col-resize"]),
174
+ onKeydown: W,
175
+ onPointerdown: j
176
+ }, [
177
+ r("span", {
178
+ "aria-hidden": "true",
179
+ class: $(["absolute transition-colors group-hover:bg-border-focus/20 group-focus-visible:bg-border-focus/20", n.value ? "inset-x-0 -top-1 h-2" : "inset-y-0 -left-1 w-2"])
180
+ }, null, 2)
181
+ ], 42, _e)) : h("", !0),
182
+ r("div", {
183
+ class: $(["min-h-0 min-w-0 flex-1 overflow-hidden", u(v) ? "" : "border-t border-border-separator"])
184
+ }, [
185
+ f(a.$slots, "end")
186
+ ], 2)
187
+ ], 10, ke));
188
+ }
189
+ }), we = {
190
+ class: "flex min-h-0 w-full min-w-0 flex-1 flex-col bg-surface-page lg:h-[calc(100dvh-var(--shell-banner-h,0px))] lg:flex-none lg:overflow-hidden",
191
+ "data-page-shell": "",
192
+ "data-workbench-page": ""
193
+ }, $e = { class: "flex shrink-0 flex-wrap items-center gap-x-4 gap-y-2 border-b border-border-separator bg-surface-cell px-4 py-3 lg:px-6" }, Be = { class: "flex min-w-0 flex-[1_1_16rem] items-center gap-3.5" }, ze = { class: "flex min-w-0 flex-col gap-0.5" }, Pe = { class: "flex min-w-0 flex-wrap items-center gap-x-2.5 gap-y-1" }, Se = { class: "min-w-0 truncate text-title font-semibold tracking-tight text-content-strong" }, Ce = {
194
+ key: 0,
195
+ class: "truncate text-subheadline text-content-muted"
196
+ }, Te = {
197
+ key: 0,
198
+ class: "ml-auto flex items-center gap-3"
199
+ }, Me = {
200
+ key: 0,
201
+ class: "flex shrink-0 items-center gap-1.5 text-footnote text-content-muted",
202
+ role: "status",
203
+ "data-page-status": ""
204
+ }, Ae = {
205
+ key: 1,
206
+ class: "shrink-0 border-b border-border-separator bg-surface-page px-4 py-2 lg:px-6"
207
+ }, Ke = {
208
+ key: 2,
209
+ class: "shrink-0"
210
+ }, Le = {
211
+ class: "min-h-0 flex-1 bg-surface-cell",
212
+ "data-workbench-body": ""
213
+ }, Re = {
214
+ key: 1,
215
+ class: "h-full min-h-0 overflow-hidden"
216
+ }, Je = /* @__PURE__ */ A({
217
+ __name: "WorkbenchPage",
218
+ props: /* @__PURE__ */ N({
219
+ title: {},
220
+ documentTitle: { default: void 0 },
221
+ description: { default: void 0 },
222
+ back: { default: void 0 },
223
+ path: { default: void 0 },
224
+ actions: { default: () => [] },
225
+ dirty: { type: Boolean, default: !1 },
226
+ storageKey: { default: void 0 },
227
+ min: { default: 280 },
228
+ stackBelow: { default: "lg" }
229
+ }, {
230
+ size: { default: 0.5 },
231
+ sizeModifiers: {}
232
+ }),
233
+ emits: ["update:size"],
234
+ setup(m) {
235
+ const e = m, i = I(m, "size"), { t: x } = V(), d = re() ?? ie();
236
+ D(ce, d);
237
+ const v = d.claimShell();
238
+ R(v);
239
+ const t = F("(max-width: 47.999rem)"), p = U(null);
240
+ D(G, p);
241
+ const n = X(), k = B(() => {
242
+ if (n.value) return n.value;
243
+ if (e.back !== void 0) return e.back;
244
+ const o = e.path?.[e.path.length - 1];
245
+ return o ? { label: o.label, to: o.to } : null;
246
+ }), M = B(() => n.value ? null : e.path), b = d.claim();
247
+ return E(
248
+ () => [e.actions, e.documentTitle, e.dirty],
249
+ ([o, _, z]) => b.setRegistration({ actions: o, leading: null, status: z ? x("core.form.unsaved_changes") : null, navTitle: null, documentTitle: _ ?? null }),
250
+ { immediate: !0 }
251
+ ), E(k, (o) => b.setBack(o), { immediate: !0 }), R(() => {
252
+ b.clearRegistration(), b.clearBack();
253
+ }), pe(() => e.dirty), (o, _) => (s(), c("div", we, [
254
+ k.value && !u(t) ? (s(), T(J, {
255
+ key: 0,
256
+ back: k.value,
257
+ path: M.value,
258
+ actions: [],
259
+ leading: null
260
+ }, null, 8, ["back", "path"])) : h("", !0),
261
+ r("header", $e, [
262
+ r("div", Be, [
263
+ f(o.$slots, "leading"),
264
+ r("div", ze, [
265
+ r("div", Pe, [
266
+ r("h1", Se, S(e.title), 1),
267
+ f(o.$slots, "badges")
268
+ ]),
269
+ e.description ? (s(), c("p", Ce, S(e.description), 1)) : h("", !0)
270
+ ])
271
+ ]),
272
+ u(t) ? h("", !0) : (s(), c("div", Te, [
273
+ u(d).status.value ? (s(), c("span", Me, [
274
+ _[1] || (_[1] = r("span", {
275
+ class: "size-1.75 rounded-full bg-tint",
276
+ "aria-hidden": "true"
277
+ }, null, -1)),
278
+ te(S(u(d).status.value), 1)
279
+ ])) : h("", !0),
280
+ ae(Q, {
281
+ actions: u(d).actions.value,
282
+ leading: u(d).leading.value
283
+ }, null, 8, ["actions", "leading"])
284
+ ]))
285
+ ]),
286
+ o.$slots.subheader ? (s(), c("div", Ae, [
287
+ f(o.$slots, "subheader")
288
+ ])) : h("", !0),
289
+ o.$slots.notices ? (s(), c("div", Ke, [
290
+ f(o.$slots, "notices")
291
+ ])) : h("", !0),
292
+ r("div", Le, [
293
+ o.$slots.end ? (s(), T(ye, {
294
+ key: 0,
295
+ size: i.value,
296
+ "onUpdate:size": _[0] || (_[0] = (z) => i.value = z),
297
+ "storage-key": e.storageKey,
298
+ min: e.min,
299
+ "stack-below": e.stackBelow
300
+ }, {
301
+ start: P(() => [
302
+ f(o.$slots, "start")
303
+ ]),
304
+ end: P(() => [
305
+ f(o.$slots, "end")
306
+ ]),
307
+ _: 3
308
+ }, 8, ["size", "storage-key", "min", "stack-below"])) : (s(), c("div", Re, [
309
+ f(o.$slots, "start")
310
+ ]))
311
+ ])
312
+ ]));
313
+ }
314
+ }), Qe = /* @__PURE__ */ A({
78
315
  __name: "SectionPanel",
79
- props: /* @__PURE__ */ A({
316
+ props: /* @__PURE__ */ N({
80
317
  title: {},
81
318
  icon: { default: void 0 },
82
319
  number: { default: void 0 },
@@ -91,40 +328,40 @@ const M = ["aria-label"], R = ["aria-label"], z = ["aria-selected", "tabindex",
91
328
  collapsedModifiers: {}
92
329
  }),
93
330
  emits: ["update:collapsed"],
94
- setup(n) {
95
- const t = n, o = C(n, "collapsed"), r = t.id ?? (D(t.title) || `section-${P()}`), i = S("panel"), g = $(() => i.value?.$el ?? null);
96
- return I(r, () => t.title, g, { number: () => t.number, reveal: () => i.value?.expand() }), (e, u) => (a(), b(K, T({
331
+ setup(m) {
332
+ const e = m, i = I(m, "collapsed"), x = e.id ?? (ue(e.title) || `section-${oe()}`), d = H("panel"), v = B(() => d.value?.$el ?? null);
333
+ return de(x, () => e.title, v, { number: () => e.number, reveal: () => d.value?.expand() }), (t, p) => (s(), T(fe, se({
97
334
  ref_key: "panel",
98
- ref: i,
99
- collapsed: o.value,
100
- "onUpdate:collapsed": u[0] || (u[0] = (h) => o.value = h)
101
- }, { id: v(r), tabindex: -1 }, {
102
- title: t.title,
103
- icon: t.icon,
104
- number: t.number,
105
- subtitle: t.subtitle,
106
- presentation: t.presentation,
107
- collapsible: t.collapsible,
108
- flush: t.flush,
109
- "heading-level": t.headingLevel,
335
+ ref: d,
336
+ collapsed: i.value,
337
+ "onUpdate:collapsed": p[0] || (p[0] = (n) => i.value = n)
338
+ }, { id: u(x), tabindex: -1 }, {
339
+ title: e.title,
340
+ icon: e.icon,
341
+ number: e.number,
342
+ subtitle: e.subtitle,
343
+ presentation: e.presentation,
344
+ collapsible: e.collapsible,
345
+ flush: e.flush,
346
+ "heading-level": e.headingLevel,
110
347
  class: "scroll-mt-[calc(var(--app-bar-height)+1.5rem)]"
111
- }), w({
112
- default: c(() => [
113
- m(e.$slots, "default")
348
+ }), le({
349
+ default: P(() => [
350
+ f(t.$slots, "default")
114
351
  ]),
115
352
  _: 2
116
353
  }, [
117
- e.$slots.actions ? {
354
+ t.$slots.actions ? {
118
355
  name: "actions",
119
- fn: c(() => [
120
- m(e.$slots, "actions")
356
+ fn: P(() => [
357
+ f(t.$slots, "actions")
121
358
  ]),
122
359
  key: "0"
123
360
  } : void 0,
124
- e.$slots.footer ? {
361
+ t.$slots.footer ? {
125
362
  name: "footer",
126
- fn: c(() => [
127
- m(e.$slots, "footer")
363
+ fn: P(() => [
364
+ f(t.$slots, "footer")
128
365
  ]),
129
366
  key: "1"
130
367
  } : void 0
@@ -132,35 +369,37 @@ const M = ["aria-label"], R = ["aria-label"], z = ["aria-selected", "tabindex",
132
369
  }
133
370
  });
134
371
  export {
135
- W as AdaptivePageShell,
136
- se as BACK_PARAM,
137
- le as BACK_TITLE_PARAM,
138
- ie as BottomDock,
139
- x as BottomDockPortal,
140
- U as BottomTabBar,
141
- X as PageActions,
142
- Y as PageToolbar,
143
- me as RecordHeader,
144
- Z as ResourceHeader,
145
- Te as SectionJumper,
146
- we as SectionList,
147
- Se as SectionNavigator,
148
- q as SectionPanel,
149
- ue as bottomDockKey,
150
- ge as createPageChrome,
151
- de as installBottomDock,
152
- _e as installPageChrome,
153
- ve as pageChromeKey,
154
- ee as pageSectionBackKey,
155
- Be as provideSectionIndex,
156
- D as sectionId,
157
- ne as useBackLinks,
158
- pe as useBottomDockTarget,
159
- te as useLargeTitle,
160
- he as useOptionalPageChrome,
161
- xe as usePageChrome,
162
- ke as usePageChromeContext,
163
- ae as usePageSectionBack,
164
- I as useSectionAnchor,
165
- Ce as useSectionIndex
372
+ qe as AdaptivePageShell,
373
+ ot as BACK_PARAM,
374
+ st as BACK_TITLE_PARAM,
375
+ rt as BottomDock,
376
+ Y as BottomDockPortal,
377
+ Ge as BottomTabBar,
378
+ Q as PageActions,
379
+ J as PageToolbar,
380
+ ft as RecordHeader,
381
+ Ze as ResourceHeader,
382
+ $t as SectionJumper,
383
+ Bt as SectionList,
384
+ yt as SectionNavigator,
385
+ Qe as SectionPanel,
386
+ ye as SplitPane,
387
+ Je as WorkbenchPage,
388
+ ct as bottomDockKey,
389
+ ie as createPageChrome,
390
+ ut as installBottomDock,
391
+ vt as installPageChrome,
392
+ ce as pageChromeKey,
393
+ G as pageSectionBackKey,
394
+ xt as provideSectionIndex,
395
+ ue as sectionId,
396
+ lt as useBackLinks,
397
+ dt as useBottomDockTarget,
398
+ et as useLargeTitle,
399
+ re as useOptionalPageChrome,
400
+ ht as usePageChrome,
401
+ bt as usePageChromeContext,
402
+ tt as usePageSectionBack,
403
+ de as useSectionAnchor,
404
+ kt as useSectionIndex
166
405
  };
@@ -2,9 +2,9 @@ import { defineComponent as fe, useModel as me, useTemplateRef as z, ref as B, c
2
2
  import { useI18n as pe } from "vue-i18n";
3
3
  import { u as ve } from "../format-C_HXlOYQ.js";
4
4
  import { b as Ve } from "../controlSurface-t7OEFESJ.js";
5
- import { f as se, u as Oe, _ as Le } from "../options-mOOX6JSS.js";
6
- import { a as Re, f as Be, b as Ee } from "../FormRow.vue_vue_type_script_setup_true_lang-CpgNVQF4.js";
7
- import { _ as A } from "../Icon.vue_vue_type_script_lang-BhhsFYwp.js";
5
+ import { f as se, u as Oe, _ as Le } from "../options-DIp_lVAj.js";
6
+ import { a as Re, f as Be, b as Ee } from "../FormRow.vue_vue_type_script_setup_true_lang-okuxbKyI.js";
7
+ import { _ as A } from "../Icon.vue_vue_type_script_lang-0pW1XBaE.js";
8
8
  import { _ as ue } from "../CountryFlag.vue_vue_type_script_setup_true_lang-Kry_vPPZ.js";
9
9
  import { u as Fe } from "../anchored-DpuUwf-9.js";
10
10
  import { AsYouType as q, validatePhoneNumberLength as ze, parsePhoneNumberFromString as he, getCountries as Ae, getCountryCallingCode as We } from "libphonenumber-js/max";
@@ -5,12 +5,12 @@ var S = (s) => {
5
5
  var O = (s, t, e) => t in s ? N(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
6
6
  var $ = (s, t, e) => O(s, typeof t != "symbol" ? t + "" : t, e), w = (s, t, e) => t.has(s) || S("Cannot " + e);
7
7
  var o = (s, t, e) => (w(s, t, "read from private field"), e ? e.call(s) : t.get(s)), l = (s, t, e) => t.has(s) ? S("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(s) : t.set(s, e), f = (s, t, e, r) => (w(s, t, "write to private field"), r ? r.call(s, e) : t.set(s, e), e), h = (s, t, e) => (w(s, t, "access private method"), e);
8
- import { u as v } from "../platform-DU9QFts8.js";
9
- import { b as F, c as G, a as K, d as U, h as _, e as z, i as D, p as H, f as Q, g as R, j as V } from "../platform-DU9QFts8.js";
8
+ import { u as v } from "../platform-YWfOO7b2.js";
9
+ import { b as F, c as G, a as K, d as U, h as _, e as z, i as D, p as H, f as Q, g as R, j as V } from "../platform-YWfOO7b2.js";
10
10
  import { M as X, d as Y } from "../context-Ch1r4fdN.js";
11
11
  import { m as k, p as tt } from "../preferences-hYhrw8Uy.js";
12
12
  import { computed as E } from "vue";
13
- import { _ as st } from "../AccessGate.vue_vue_type_script_setup_true_lang-Bg8JFAOT.js";
13
+ import { _ as st } from "../AccessGate.vue_vue_type_script_setup_true_lang-Dw_pnsh9.js";
14
14
  class m extends Error {
15
15
  constructor(e, r = [], n) {
16
16
  super(r.length > 0 ? `${e}: ${r.join("; ")}` : e);
@@ -3,6 +3,12 @@
3
3
  * filtered by what the user may see). A node with a `route` is a destination: the route is the
4
4
  * backend's token for it (`Destination`), which the application binds to one of its own routes. A node
5
5
  * without one is a group of its children.
6
+ *
7
+ * A node with an `href` (and no `route`) is a destination **outside** this application: the old admin, a sibling app. The shell draws
8
+ * it as a plain link with an "opens outside the app" marker and the browser follows it with a full page load, never through the
9
+ * router. `href` is a path on this origin (`/old-admin/pages`) or an absolute `http(s)` URL; anything else (`javascript:`, `//host`) is
10
+ * refused when the session is read. go-core's `navigation.Node` needs one more optional field, `Href string` with the JSON name `href` (omitted when empty),
11
+ * which the application's menu builder sets instead of a route token for such an entry.
6
12
  */
7
13
  export interface NavigationNode {
8
14
  /** The i18n key of the label. */
@@ -11,7 +17,11 @@ export interface NavigationNode {
11
17
  readonly icon?: string;
12
18
  /** The destination token; absent for a group. */
13
19
  readonly route?: string;
20
+ /** Where a destination outside the application lives; mutually exclusive with `route`. */
21
+ readonly href?: string;
14
22
  readonly children?: readonly NavigationNode[];
15
23
  }
24
+ /** A path on this origin or an absolute http(s) URL: never `javascript:`, `data:` or a protocol-relative `//host`. */
25
+ export declare function isSafeHref(value: string): boolean;
16
26
  /** Validates the `navigation` of a session payload; every problem found goes to `issues`. Unknown fields (policies, ...) are dropped. */
17
27
  export declare function parseNavigation(raw: unknown, issues: string[], path?: string): readonly NavigationNode[];