@wssto2/vue-core 0.19.0 → 0.21.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 (174) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +5 -1
  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-C2TmmH38.js} +1 -1
  5. package/dist/{ActionRow.vue_vue_type_script_setup_true_lang-B5IMNnTf.js → ActionRow.vue_vue_type_script_setup_true_lang-BEV0drwF.js} +2 -2
  6. package/dist/{Activity-CiYn5E6A.js → Activity-CZzAt3SH.js} +9 -9
  7. package/dist/{AdaptivePageShell.vue_vue_type_script_setup_true_lang-oXWQTfBs.js → AdaptivePageShell.vue_vue_type_script_setup_true_lang-BkZzuICH.js} +6 -6
  8. package/dist/{AlertDialog.vue_vue_type_script_setup_true_lang-WuGvAOrj.js → AlertDialog.vue_vue_type_script_setup_true_lang-B0UvzCoE.js} +1 -1
  9. package/dist/{AsyncSection.vue_vue_type_script_setup_true_lang-CX8mpXRE.js → AsyncSection.vue_vue_type_script_setup_true_lang-DuPS_zMX.js} +4 -4
  10. package/dist/{Banner.vue_vue_type_script_setup_true_lang-sv0phngk.js → Banner.vue_vue_type_script_setup_true_lang-BXZVOhfH.js} +1 -1
  11. package/dist/{Button.vue_vue_type_script_setup_true_lang-JrqhO99l.js → Button.vue_vue_type_script_setup_true_lang-CZkTqGtE.js} +1 -1
  12. package/dist/{Changes-Cy8STpLX.js → Changes-B0bhSNU3.js} +5 -5
  13. package/dist/CharacteristicsPage-fGnahf62.js +4 -0
  14. package/dist/{CollectionPage.vue_vue_type_script_setup_true_lang-Dr6nFNBB.js → CollectionPage.vue_vue_type_script_setup_true_lang-Bf5WXVFZ.js} +12 -12
  15. package/dist/CollectionTree.vue_vue_type_script_setup_true_lang-DV0OhquO.js +345 -0
  16. package/dist/{DataTable.vue_vue_type_script_setup_true_lang-D372wlxR.js → DataTable.vue_vue_type_script_setup_true_lang-Cw_E8w48.js} +1 -1
  17. package/dist/{DateField.vue_vue_type_script_setup_true_lang-D0KcfW8R.js → DateField.vue_vue_type_script_setup_true_lang-Cn8CNAwM.js} +4 -4
  18. package/dist/{DeadLetters-DhJkMpd_.js → DeadLetters--js7aeC6.js} +4 -4
  19. package/dist/{DiscardChangesModal.vue_vue_type_script_setup_true_lang-92szOrYd.js → DiscardChangesModal.vue_vue_type_script_setup_true_lang-lnFUie1d.js} +1 -1
  20. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js → EmptyState.vue_vue_type_script_setup_true_lang-DHmu-UG-.js} +1 -1
  21. package/dist/{FormGroup.vue_vue_type_script_setup_true_lang-lvAuBG-0.js → FormGroup.vue_vue_type_script_setup_true_lang-BUhKKybf.js} +4 -4
  22. package/dist/{FormRow.vue_vue_type_script_setup_true_lang-CpgNVQF4.js → FormRow.vue_vue_type_script_setup_true_lang-B-uth5RB.js} +1 -1
  23. package/dist/{FormView.vue_vue_type_script_setup_true_lang-D01Jr4UU.js → FormView.vue_vue_type_script_setup_true_lang-CoQZG-hB.js} +2 -2
  24. package/dist/{General-CwTPC5UP.js → General-BGT9H69S.js} +8 -8
  25. package/dist/{HeaderAction.vue_vue_type_script_setup_true_lang-Da59TLBh.js → HeaderAction.vue_vue_type_script_setup_true_lang-Uw0vwV-o.js} +2 -2
  26. package/dist/{Icon.vue_vue_type_script_lang-BhhsFYwp.js → Icon.vue_vue_type_script_lang-BIzh8LF1.js} +19 -13
  27. package/dist/{IconTile.vue_vue_type_script_setup_true_lang-BmxCuUZ9.js → IconTile.vue_vue_type_script_setup_true_lang-DRirnJvd.js} +1 -1
  28. package/dist/{IncidentRecord-hXEGuLGg.js → IncidentRecord-BETFfXbI.js} +17 -17
  29. package/dist/{IncidentsList-C41VyDwK.js → IncidentsList-BIr3a2To.js} +6 -6
  30. package/dist/{LeaveGuardRoot.vue_vue_type_script_setup_true_lang-CrGrjrlO.js → LeaveGuardRoot.vue_vue_type_script_setup_true_lang-DjXYh-p0.js} +1 -1
  31. package/dist/{Menu.vue_vue_type_script_setup_true_lang-Cqu4Ebsb.js → Menu.vue_vue_type_script_setup_true_lang-D2FsOVYA.js} +1 -1
  32. package/dist/{MenuButton.vue_vue_type_script_setup_true_lang-C-XRr5f2.js → MenuButton.vue_vue_type_script_setup_true_lang-BNzrYIzR.js} +1 -1
  33. package/dist/{Modal.vue_vue_type_script_setup_true_lang-CZ7WrDwu.js → Modal.vue_vue_type_script_setup_true_lang-BRRMKXOV.js} +2 -2
  34. package/dist/{NewRolePage-BYYZJkK7.js → NewRolePage-B0Y5MrTu.js} +4 -4
  35. package/dist/{NoAccess.vue_vue_type_script_setup_true_lang-BHzZtZ50.js → NoAccess.vue_vue_type_script_setup_true_lang-CnfE_AEl.js} +1 -1
  36. package/dist/{NumberField.vue_vue_type_script_setup_true_lang-BhNZgEW6.js → NumberField.vue_vue_type_script_setup_true_lang-BDZ_0TH7.js} +2 -2
  37. package/dist/{Panel.vue_vue_type_script_setup_true_lang-D_Wg42hu.js → Panel.vue_vue_type_script_setup_true_lang-CwcJadT7.js} +1 -1
  38. package/dist/{PersonAccess.vue_vue_type_script_setup_true_lang-mYFuG-Y3.js → PersonAccess.vue_vue_type_script_setup_true_lang-CJMV9BDQ.js} +12 -12
  39. package/dist/{PhotoViewer.vue_vue_type_script_setup_true_lang-DmMg1T_V.js → PhotoViewer.vue_vue_type_script_setup_true_lang-BL485L63.js} +1 -1
  40. package/dist/{ProfilePage-DGEsIycR.js → ProfilePage-CMy2Dkr2.js} +17 -17
  41. package/dist/{RecordHeader.vue_vue_type_script_setup_true_lang-B3BnYg1x.js → RecordHeader.vue_vue_type_script_setup_true_lang-D4PcZnbo.js} +2 -2
  42. package/dist/{ResourcePage.vue_vue_type_script_setup_true_lang-1iZtj3rh.js → ResourcePage.vue_vue_type_script_setup_true_lang-CpGwm2tv.js} +4 -4
  43. package/dist/{RoleEditor.vue_vue_type_script_setup_true_lang-BslSDDiM.js → RoleEditor.vue_vue_type_script_setup_true_lang-CMo8PrO7.js} +12 -12
  44. package/dist/{RolePage-C08ZUqw1.js → RolePage-DGFISfM1.js} +13 -13
  45. package/dist/{RolesPage-FOuY1VKg.js → RolesPage-Bq9EVB_3.js} +9 -9
  46. package/dist/{SectionList.vue_vue_type_script_setup_true_lang-CodyVezo.js → SectionList.vue_vue_type_script_setup_true_lang-BdJ11lZo.js} +3 -3
  47. package/dist/{SectionNavigator.vue_vue_type_script_setup_true_lang-DCTFxfPB.js → SectionNavigator.vue_vue_type_script_setup_true_lang-CnzECivO.js} +6 -6
  48. package/dist/{SegmentedField.vue_vue_type_script_setup_true_lang-CLR6EvzO.js → SegmentedField.vue_vue_type_script_setup_true_lang-D3IZil4q.js} +2 -2
  49. package/dist/{SelectField.vue_vue_type_script_setup_true_lang-D5xYofdb.js → SelectField.vue_vue_type_script_setup_true_lang-DxCEwED6.js} +6 -6
  50. package/dist/{ServiceAccountDialog.vue_vue_type_script_setup_true_lang-CDr4WNIb.js → ServiceAccountDialog.vue_vue_type_script_setup_true_lang-DtVXUOdP.js} +8 -8
  51. package/dist/{ServiceAccountRecord-kWwIQGZb.js → ServiceAccountRecord-Dc7Gn52W.js} +18 -18
  52. package/dist/{ServiceAccountsList-CKy9_YHP.js → ServiceAccountsList-DBUFeka-.js} +10 -10
  53. package/dist/{Sessions-BDc8gdYH.js → Sessions-BMmqYZrJ.js} +7 -7
  54. package/dist/{SettingsPage-t-8kmFVT.js → SettingsPage-4Dolsr0t.js} +18 -18
  55. package/dist/Sheet.vue_vue_type_script_setup_true_lang-BVU5yzXe.js +163 -0
  56. package/dist/{SignIn-CqtkvtCZ.js → SignIn-uFn1ZWG8.js} +8 -8
  57. package/dist/{SignInPage-DcdNKZIb.js → SignInPage-DouCg9aD.js} +6 -6
  58. package/dist/{SignIns-D4-nGu0B.js → SignIns-CqN5UNmh.js} +5 -5
  59. package/dist/SortableList.vue_vue_type_script_setup_true_lang-D2-5Z_jO.js +112 -0
  60. package/dist/{StatusLine.vue_vue_type_script_setup_true_lang-DsdQmLq6.js → StatusLine.vue_vue_type_script_setup_true_lang-DBkQueB0.js} +1 -1
  61. package/dist/{SwipeActions.vue_vue_type_script_setup_true_lang-D8SiC0G7.js → SwipeActions.vue_vue_type_script_setup_true_lang-DUjUWq3G.js} +1 -1
  62. package/dist/{SwitchField.vue_vue_type_script_setup_true_lang-CLtcuofe.js → SwitchField.vue_vue_type_script_setup_true_lang-CTMjlNid.js} +2 -2
  63. package/dist/Tabs.vue_vue_type_script_setup_true_lang-7CJto6Mp.js +169 -0
  64. package/dist/{TextField.vue_vue_type_script_setup_true_lang-CVGh-p3J.js → TextField.vue_vue_type_script_setup_true_lang-B6Q65aQA.js} +4 -4
  65. package/dist/{TextareaField.vue_vue_type_script_setup_true_lang-YxUlNHSk.js → TextareaField.vue_vue_type_script_setup_true_lang-Cj0LKDdo.js} +2 -2
  66. package/dist/{TimeField.vue_vue_type_script_setup_true_lang-DHNC_MLt.js → TimeField.vue_vue_type_script_setup_true_lang-TSnnjMn1.js} +4 -4
  67. package/dist/{Timestamp.vue_vue_type_script_setup_true_lang-d_KuxWjH.js → Timestamp.vue_vue_type_script_setup_true_lang-0WL7PP0j.js} +1 -1
  68. package/dist/{UserRecord-CwZCr9Im.js → UserRecord-CH5oNRLg.js} +10 -10
  69. package/dist/{UsersList-Cn19sFgv.js → UsersList-BmxWpt9h.js} +3 -3
  70. package/dist/{ViewTabs.vue_vue_type_script_setup_true_lang-BjdDXE3T.js → ViewTabs.vue_vue_type_script_setup_true_lang-BKI5DGuS.js} +1 -1
  71. package/dist/access/index.js +7 -7
  72. package/dist/app/index.js +2 -2
  73. package/dist/{application-CDSweJb9.js → application-C5fZyCB9.js} +8 -8
  74. package/dist/{back-LcLlFodC.js → back-CeozxCgQ.js} +2 -2
  75. package/dist/button/index.js +1 -1
  76. package/dist/characteristics/CharacteristicsPage.vue.d.ts +2 -0
  77. package/dist/characteristics/DeleteDialog.vue.d.ts +22 -0
  78. package/dist/characteristics/ItemSheet.vue.d.ts +25 -0
  79. package/dist/characteristics/access.d.ts +3 -0
  80. package/dist/characteristics/api.d.ts +23 -0
  81. package/dist/characteristics/context.d.ts +12 -0
  82. package/dist/characteristics/feature.d.ts +27 -0
  83. package/dist/characteristics/index.d.ts +10 -0
  84. package/dist/characteristics/index.js +617 -0
  85. package/dist/characteristics/model.d.ts +34 -0
  86. package/dist/characteristics/routes.d.ts +13 -0
  87. package/dist/collection/CollectionTree.vue.d.ts +51 -0
  88. package/dist/collection/CollectionTreeBranch.vue.d.ts +12 -0
  89. package/dist/collection/FileExplorer.vue.d.ts +53 -0
  90. package/dist/collection/RowMore.vue.d.ts +11 -0
  91. package/dist/collection/explorer.d.ts +11 -0
  92. package/dist/collection/index.d.ts +5 -0
  93. package/dist/collection/index.js +431 -158
  94. package/dist/collection/tree.d.ts +64 -0
  95. package/dist/content/DiffView.vue.d.ts +22 -0
  96. package/dist/content/PreviewFrame.vue.d.ts +46 -0
  97. package/dist/content/diff.d.ts +27 -0
  98. package/dist/content/index.d.ts +4 -0
  99. package/dist/content/index.js +552 -218
  100. package/dist/content/previewFrame.d.ts +50 -0
  101. package/dist/{contributions-B0x5x5xD.js → contributions-BSmIRPg1.js} +1 -1
  102. package/dist/controls/SortableList.vue.d.ts +32 -0
  103. package/dist/controls/Tabs.vue.d.ts +2 -0
  104. package/dist/controls/index.d.ts +1 -0
  105. package/dist/controls/index.js +18 -16
  106. package/dist/form/CharacteristicField.vue.d.ts +36 -0
  107. package/dist/form/CodeEditor.vue.d.ts +61 -0
  108. package/dist/form/I18nField.vue.d.ts +1 -1
  109. package/dist/form/MarkerList.vue.d.ts +20 -0
  110. package/dist/form/TextareaField.vue.d.ts +1 -1
  111. package/dist/form/index.d.ts +3 -0
  112. package/dist/form/index.js +1769 -1805
  113. package/dist/{guards-CNJ0ATVC.js → guards-BP9x7CLF.js} +1 -1
  114. package/dist/i18n/index.js +46 -46
  115. package/dist/icon/core.d.ts +6 -0
  116. package/dist/icon/index.js +1 -1
  117. package/dist/identity/index.js +3 -3
  118. package/dist/identity/profile/EmailChangeDialog.vue.d.ts +2 -2
  119. package/dist/incidents/index.js +1 -1
  120. package/dist/{index-SLJWm40T.js → index-4wyfEeIw.js} +9 -9
  121. package/dist/{index-BA2w8uwD.js → index-C_ZVaTkR.js} +27 -27
  122. package/dist/{index-1HS7O2-e.js → index-OVbtHAtG.js} +10 -10
  123. package/dist/index.d.ts +1 -1
  124. package/dist/index.js +1 -1
  125. package/dist/modal/Sheet.vue.d.ts +13 -0
  126. package/dist/modal/TabbedSheet.vue.d.ts +46 -0
  127. package/dist/modal/index.d.ts +1 -0
  128. package/dist/modal/index.js +123 -41
  129. package/dist/modules/characteristics/entities.d.ts +67 -0
  130. package/dist/modules/characteristics/routes.d.ts +55 -0
  131. package/dist/modules/characteristics/schemas.d.ts +50 -0
  132. package/dist/modules/identity/entities.d.ts +1 -0
  133. package/dist/navigation-C05vGEN8.js +55 -0
  134. package/dist/{neighbors-Dg_LU9ry.js → neighbors-BqfO6zf3.js} +2 -2
  135. package/dist/notifications/index.js +1 -1
  136. package/dist/onboarding/index.js +2 -2
  137. package/dist/{options-mOOX6JSS.js → options-DDCG86OV.js} +2 -2
  138. package/dist/overlay/index.js +4 -4
  139. package/dist/page/SectionNavigator.vue.d.ts +1 -1
  140. package/dist/page/SplitPane.vue.d.ts +54 -0
  141. package/dist/page/WorkbenchPage.vue.d.ts +72 -0
  142. package/dist/page/index.d.ts +2 -0
  143. package/dist/page/index.js +343 -104
  144. package/dist/phone/index.js +3 -3
  145. package/dist/platform/index.js +3 -3
  146. package/dist/platform/navigation.d.ts +10 -0
  147. package/dist/{platform-DU9QFts8.js → platform-YWfOO7b2.js} +94 -88
  148. package/dist/pwa/index.js +3 -3
  149. package/dist/resource/index.js +1 -1
  150. package/dist/{resources-BZLlAtoS.js → resources-DkI60fHL.js} +1 -1
  151. package/dist/router/index.js +4 -4
  152. package/dist/router/navigation.d.ts +2 -0
  153. package/dist/routes-DC8BWFz8.js +251 -0
  154. package/dist/{rowLayout-PIuD7MGo.js → rowLayout-zd3Yw6fO.js} +34 -33
  155. package/dist/{sectionIndex-BS0ic5W7.js → sectionIndex-CSr457Lb.js} +2 -2
  156. package/dist/{sections-BpiRLntE.js → sections-DXso1JSV.js} +2 -2
  157. package/dist/shell/NavigationList.vue.d.ts +1 -1
  158. package/dist/shell/index.js +522 -501
  159. package/dist/shell/navigationGroups.d.ts +4 -1
  160. package/dist/state/index.js +8 -8
  161. package/dist/{state-z1iPF1DT.js → state-DqCZdet7.js} +1 -1
  162. package/dist/styles.css +1 -1
  163. package/dist/{suggestions-DeMgs_ki.js → suggestions-DZ3B5RVH.js} +1 -1
  164. package/dist/testing/index.js +2 -2
  165. package/dist/{useCommand-DQKvro1n.js → useCommand-DerEnzIW.js} +4 -4
  166. package/dist/{useGroupSheet-CRw3MUmX.js → useGroupSheet-B9TCHIKH.js} +5 -5
  167. package/dist/{usePreferences-DB29UTFD.js → usePreferences-D38x73re.js} +1 -1
  168. package/dist/{useRecordDialog-0azHxxvm.js → useRecordDialog-DX97ivZD.js} +1 -1
  169. package/dist/{useResourceForm-zVuWerSn.js → useResourceForm-D8T1snBQ.js} +1 -1
  170. package/dist/{useTypedEntry-BsMV66Yc.js → useTypedEntry-CTkgM29Y.js} +2 -2
  171. package/package.json +6 -2
  172. package/dist/Sheet.vue_vue_type_script_setup_true_lang-BG8HUNfs.js +0 -145
  173. package/dist/Tabs.vue_vue_type_script_setup_true_lang-tpkGp98F.js +0 -155
  174. package/dist/navigation-d-JAPBGA.js +0 -53
@@ -0,0 +1,251 @@
1
+ import { defineComponent as re, useModel as ue, inject as ce, useId as de, useTemplateRef as Q, computed as o, ref as R, openBlock as s, createBlock as ve, mergeProps as fe, unref as r, createSlots as me, withCtx as V, createElementVNode as c, createElementBlock as u, Fragment as z, renderList as W, normalizeClass as T, createTextVNode as pe, toDisplayString as x, createCommentVNode as D, createVNode as be, renderSlot as he, mergeModels as ge, mergeDefaults as xe, nextTick as X } from "vue";
2
+ import { u as ye } from "./format-C_HXlOYQ.js";
3
+ import { useI18n as we } from "vue-i18n";
4
+ import { a as _e } from "./environment-Dva-SG8D.js";
5
+ import { _ as ke } from "./Icon.vue_vue_type_script_lang-BIzh8LF1.js";
6
+ import { u as Le, _ as Te } from "./options-DDCG86OV.js";
7
+ import { u as qe, f as Ee, b as $e } from "./FormRow.vue_vue_type_script_setup_true_lang-B-uth5RB.js";
8
+ import { r as d } from "./route-goWMxDUN.js";
9
+ function Ce(q, G) {
10
+ return G.filter((t) => (q?.[t] ?? "").trim() === "");
11
+ }
12
+ const Ie = ["id", "aria-labelledby"], Be = ["id", "value", "lang", "name", "rows", "placeholder", "maxlength", "disabled", "aria-required", "aria-invalid", "aria-describedby"], Ve = ["id", "value", "lang", "name", "placeholder", "maxlength", "disabled", "aria-required", "aria-invalid", "aria-describedby"], De = {
13
+ key: 0,
14
+ class: "mt-1.5 flex items-center gap-2"
15
+ }, Ge = {
16
+ key: 0,
17
+ class: "flex-1 text-footnote text-status-warning-content",
18
+ "data-test": "i18n-missing"
19
+ }, Pe = {
20
+ key: 1,
21
+ class: "flex-1"
22
+ }, Se = ["aria-label"], Fe = ["id", "aria-selected", "tabindex", "aria-controls", "aria-label", "title", "onClick", "onKeydown"], Ne = ["data-state"], Oe = { class: "w-full" }, Re = { class: "whitespace-pre-line break-words text-body text-content-strong" }, ze = ["aria-expanded"], Ke = { class: "flex-1" }, Me = {
23
+ key: 0,
24
+ class: "mt-1 flex flex-col gap-1.5"
25
+ }, Ue = ["title"], Ze = /* @__PURE__ */ re({
26
+ __name: "I18nField",
27
+ props: /* @__PURE__ */ ge(/* @__PURE__ */ xe({
28
+ label: {},
29
+ labelHidden: { type: Boolean },
30
+ hint: {},
31
+ error: {},
32
+ required: { type: Boolean },
33
+ editable: { type: Boolean },
34
+ disabled: { type: Boolean },
35
+ lockedReason: {},
36
+ presentation: {},
37
+ name: {},
38
+ locales: {},
39
+ defaultLocale: {},
40
+ requiredLocales: {},
41
+ multiline: { type: Boolean },
42
+ rows: {},
43
+ placeholder: {},
44
+ maxLength: {}
45
+ }, { ...$e, locales: void 0, defaultLocale: void 0, requiredLocales: () => [], multiline: !1, rows: 3, placeholder: void 0, maxLength: void 0 }), {
46
+ modelValue: { default: () => ({}) },
47
+ modelModifiers: {}
48
+ }),
49
+ emits: ["update:modelValue"],
50
+ setup(q, { expose: G }) {
51
+ const t = q, y = ue(q, "modelValue"), { t: p, locale: P, availableLocales: Y } = we(), Z = ye(), ee = ce(_e, null), S = de(), E = Q("field"), K = Q("root"), { editable: M } = qe(t), te = Le(t.multiline ? "area" : "text", () => t.error || k.value ? "error" : t.disabled ? "locked" : "rest"), $ = o(() => t.locales ?? ee?.locales ?? Y), f = o(() => t.defaultLocale ?? $.value[0] ?? ""), i = o(() => $.value.includes(f.value) ? [f.value, ...$.value.filter((e) => e !== f.value)] : $.value), C = R(null), v = o(() => C.value !== null && i.value.includes(C.value) ? C.value : i.value.includes(P.value) ? P.value : f.value), b = (e) => y.value[e] ?? "", n = (e) => b(e).trim() !== "", w = (e) => e.toUpperCase();
52
+ function I(e) {
53
+ try {
54
+ return new Intl.DisplayNames([Z.intlLocale], { type: "language" }).of(e) ?? w(e);
55
+ } catch {
56
+ return w(e);
57
+ }
58
+ }
59
+ const U = (e) => e.map(I).join(", ");
60
+ function j(e, l) {
61
+ y.value = { ...y.value, [e]: l };
62
+ }
63
+ const F = (e) => `${S}-tab-${e}`;
64
+ function A(e, l) {
65
+ C.value = e, l && X(() => E.value?.focus());
66
+ }
67
+ function ae(e, l) {
68
+ const a = i.value.length - 1, g = { ArrowRight: l + 1, ArrowLeft: l - 1, Home: 0, End: a }[e.key];
69
+ if (g === void 0) return;
70
+ e.preventDefault();
71
+ const m = i.value[(g + i.value.length) % i.value.length];
72
+ m !== void 0 && (A(m, !1), X(() => document.getElementById(F(m))?.focus()));
73
+ }
74
+ const H = R(!1);
75
+ function le(e) {
76
+ K.value?.contains(e.relatedTarget) || (H.value = !0);
77
+ }
78
+ const _ = o(() => Ce(y.value, t.requiredLocales)), k = o(() => H.value && _.value.length > 0 ? p("core.form.i18n.required", { languages: U(_.value) }) : void 0), ie = o(() => t.requiredLocales.length > 0 ? _.value.length === 0 : i.value.some(n)), N = o(() => i.value.filter((e) => !n(e) && !(k.value && _.value.includes(e)))), J = o(() => n(f.value) && i.value.some((e) => e !== f.value && !n(e)));
79
+ function oe() {
80
+ const e = b(f.value);
81
+ y.value = { ...y.value, ...Object.fromEntries(i.value.filter((l) => !n(l)).map((l) => [l, e])) };
82
+ }
83
+ const h = o(() => [P.value, f.value, ...i.value].find((e) => i.value.includes(e) && n(e))), B = o(() => i.value.filter((e) => e !== h.value)), se = o(() => B.value.filter(n).length), L = R(!1), ne = o(() => t.label && !M.value && h.value ? `${t.label} · ${w(h.value)}` : t.label);
84
+ return G({ focus: () => E.value?.focus() }), (e, l) => (s(), ve(Te, fe({ ...r(Ee)(t), label: ne.value, error: t.error ?? k.value, required: t.required || t.requiredLocales.length > 0 }, {
85
+ value: r(M) ? ie.value ? "written" : null : h.value ? b(h.value) : null,
86
+ "row-layout": "stacked"
87
+ }), me({
88
+ default: V(({ id: a, describedby: g, invalid: m }) => [
89
+ c("div", {
90
+ ref_key: "root",
91
+ ref: K,
92
+ class: "w-full",
93
+ onFocusout: le
94
+ }, [
95
+ c("div", {
96
+ id: `${r(S)}-panel`,
97
+ role: "tabpanel",
98
+ "aria-labelledby": F(v.value)
99
+ }, [
100
+ c("div", {
101
+ class: T(["w-full", r(te)])
102
+ }, [
103
+ t.multiline ? (s(), u("textarea", {
104
+ key: 0,
105
+ id: a,
106
+ ref_key: "field",
107
+ ref: E,
108
+ value: b(v.value),
109
+ lang: v.value,
110
+ name: t.name,
111
+ rows: t.rows,
112
+ placeholder: t.placeholder,
113
+ maxlength: t.maxLength,
114
+ disabled: t.disabled,
115
+ "aria-required": t.required || void 0,
116
+ "aria-invalid": m || void 0,
117
+ "aria-describedby": g,
118
+ "data-test": "i18n-input",
119
+ class: "block w-full resize-y 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",
120
+ onInput: l[0] || (l[0] = (O) => j(v.value, O.target.value))
121
+ }, null, 40, Be)) : (s(), u("input", {
122
+ key: 1,
123
+ id: a,
124
+ ref_key: "field",
125
+ ref: E,
126
+ value: b(v.value),
127
+ lang: v.value,
128
+ type: "text",
129
+ name: t.name,
130
+ placeholder: t.placeholder,
131
+ maxlength: t.maxLength,
132
+ disabled: t.disabled,
133
+ "aria-required": t.required || void 0,
134
+ "aria-invalid": m || void 0,
135
+ "aria-describedby": g,
136
+ "data-test": "i18n-input",
137
+ class: "block w-full min-w-0 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",
138
+ onInput: l[1] || (l[1] = (O) => j(v.value, O.target.value))
139
+ }, null, 40, Ve))
140
+ ], 2)
141
+ ], 8, Ie),
142
+ N.value.length > 0 || J.value ? (s(), u("div", De, [
143
+ N.value.length > 0 ? (s(), u("p", Ge, x(r(p)("core.form.i18n.missing", { languages: U(N.value) })), 1)) : (s(), u("span", Pe)),
144
+ J.value && !t.disabled ? (s(), u("button", {
145
+ key: 2,
146
+ type: "button",
147
+ "data-test": "i18n-copy",
148
+ class: "shrink-0 cursor-pointer rounded-control bg-tint-soft px-2.5 py-1.5 text-footnote font-medium text-content-link transition-colors duration-motion-fast hover:bg-fill focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-border-focus",
149
+ onClick: oe
150
+ }, x(r(p)("core.form.i18n.copy", { language: w(f.value) })), 1)) : D("", !0)
151
+ ])) : D("", !0)
152
+ ], 544)
153
+ ]),
154
+ labelTrailing: V(() => [
155
+ c("div", {
156
+ role: "tablist",
157
+ "aria-label": r(p)("core.form.i18n.languages"),
158
+ class: "flex shrink-0 gap-0.5 rounded-control bg-fill p-0.5",
159
+ "data-test": "i18n-tabs"
160
+ }, [
161
+ (s(!0), u(z, null, W(i.value, (a, g) => (s(), u("button", {
162
+ id: F(a),
163
+ key: a,
164
+ type: "button",
165
+ role: "tab",
166
+ "aria-selected": a === v.value,
167
+ tabindex: a === v.value ? 0 : -1,
168
+ "aria-controls": `${r(S)}-panel`,
169
+ "aria-label": r(p)(n(a) ? "core.form.i18n.tab_written" : "core.form.i18n.tab_empty", { language: I(a) }),
170
+ title: I(a),
171
+ class: T(["flex min-h-7 cursor-pointer items-center gap-1.5 rounded-control px-2.5 py-1 text-footnote font-semibold transition-colors duration-motion-fast focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-border-focus", a === v.value ? "bg-segment-selected text-content-strong shadow-sm" : "text-content-muted hover:text-content-strong"]),
172
+ onClick: (m) => A(a, !0),
173
+ onKeydown: (m) => ae(m, g)
174
+ }, [
175
+ pe(x(w(a)) + " ", 1),
176
+ c("span", {
177
+ "aria-hidden": "true",
178
+ class: T(["size-1.5 rounded-full", n(a) ? "bg-status-success-solid" : k.value && _.value.includes(a) ? "bg-content-destructive" : "bg-content-disabled"]),
179
+ "data-test": "i18n-dot",
180
+ "data-state": n(a) ? "written" : k.value && _.value.includes(a) ? "required" : "empty"
181
+ }, null, 10, Ne)
182
+ ], 42, Fe))), 128))
183
+ ], 8, Se)
184
+ ]),
185
+ _: 2
186
+ }, [
187
+ h.value ? {
188
+ name: "readonly",
189
+ fn: V(() => [
190
+ c("div", Oe, [
191
+ c("p", Re, x(b(h.value)), 1),
192
+ B.value.length > 0 ? (s(), u(z, { key: 0 }, [
193
+ c("button", {
194
+ type: "button",
195
+ "aria-expanded": L.value,
196
+ class: "mt-1.5 flex w-full cursor-pointer items-center gap-2 text-left text-footnote text-content-muted focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-border-focus",
197
+ onClick: l[2] || (l[2] = (a) => L.value = !L.value)
198
+ }, [
199
+ c("span", Ke, x(r(p)("core.form.i18n.more", { count: B.value.length, filled: se.value })), 1),
200
+ be(r(ke), {
201
+ name: "arrowRightSLine",
202
+ size: 16,
203
+ class: T(["shrink-0 transition-transform duration-motion-fast", L.value ? "rotate-90" : ""])
204
+ }, null, 8, ["class"])
205
+ ], 8, ze),
206
+ L.value ? (s(), u("dl", Me, [
207
+ (s(!0), u(z, null, W(B.value, (a) => (s(), u("div", {
208
+ key: a,
209
+ class: "flex gap-2 text-body"
210
+ }, [
211
+ c("dt", {
212
+ class: "w-8 shrink-0 text-footnote font-semibold leading-6 text-content-muted",
213
+ title: I(a)
214
+ }, x(w(a)), 9, Ue),
215
+ c("dd", {
216
+ class: T(["min-w-0 flex-1 whitespace-pre-line break-words", n(a) ? "text-content-strong" : "text-content-disabled"])
217
+ }, x(n(a) ? b(a) : r(p)("core.state.no_value")), 3)
218
+ ]))), 128))
219
+ ])) : D("", !0)
220
+ ], 64)) : D("", !0)
221
+ ])
222
+ ]),
223
+ key: "0"
224
+ } : void 0,
225
+ e.$slots.trailing ? {
226
+ name: "trailing",
227
+ fn: V(() => [
228
+ he(e.$slots, "trailing")
229
+ ]),
230
+ key: "1"
231
+ } : void 0
232
+ ]), 1040, ["value"]));
233
+ }
234
+ }), et = {
235
+ tree: d("GET", "/v1/characteristics", { permission: "characteristics:view" }),
236
+ description: d("GET", "/v1/characteristics/description", { permission: "characteristics:view" }),
237
+ show: d("GET", "/v1/characteristics/items/:level/:id", { permission: "characteristics:view" }),
238
+ branch: d("GET", "/v1/characteristics/items/:level/:id/branch", { permission: "characteristics:view" }),
239
+ usage: d("GET", "/v1/characteristics/items/:level/:id/usage", { permission: "characteristics:view" }),
240
+ create: d("POST", "/v1/characteristics/items/:level", { permission: "characteristics:edit" }),
241
+ update: d("PUT", "/v1/characteristics/items/:level/:id", { permission: "characteristics:edit" }),
242
+ setActive: d("PUT", "/v1/characteristics/items/:level/:id/active", { permission: "characteristics:edit" }),
243
+ move: d("PUT", "/v1/characteristics/items/:level/:id/position", { permission: "characteristics:edit" }),
244
+ delete: d("DELETE", "/v1/characteristics/items/:level/:id", { permission: "characteristics:edit" }),
245
+ options: d("GET", "/v1/characteristics/options")
246
+ };
247
+ export {
248
+ Ze as _,
249
+ et as c,
250
+ Ce as m
251
+ };
@@ -1,14 +1,14 @@
1
- import { defineComponent as oe, openBlock as l, createElementBlock as r, normalizeClass as x, createBlock as D, unref as i, withCtx as F, createVNode as g, toDisplayString as M, createCommentVNode as f, computed as y, Fragment as b, renderSlot as S, createTextVNode as de, ref as te, getCurrentScope as Ie, onScopeDispose as Ae, nextTick as ge, useSlots as fe, useId as Te, useTemplateRef as pe, watch as ye, mergeProps as q, renderList as L, normalizeStyle as R, createElementVNode as c, withModifiers as ve, createSlots as De } from "vue";
1
+ import { defineComponent as oe, openBlock as l, createElementBlock as r, normalizeClass as x, createBlock as D, unref as i, withCtx as F, createVNode as g, toDisplayString as M, createCommentVNode as f, computed as v, Fragment as b, renderSlot as S, createTextVNode as de, ref as te, getCurrentScope as Ie, onScopeDispose as Ae, nextTick as ge, useSlots as fe, useId as Te, useTemplateRef as pe, watch as ve, mergeProps as q, renderList as L, normalizeStyle as R, createElementVNode as c, withModifiers as ye, createSlots as De } from "vue";
2
2
  import { useI18n as Be } from "vue-i18n";
3
3
  import { RouterLink as we, useRouter as He } from "vue-router";
4
- import { _ as Ke } from "./SwipeActions.vue_vue_type_script_setup_true_lang-D8SiC0G7.js";
5
- import { _ as J } from "./Icon.vue_vue_type_script_lang-BhhsFYwp.js";
6
- import { _ as Ne } from "./Menu.vue_vue_type_script_setup_true_lang-Cqu4Ebsb.js";
4
+ import { _ as Ke } from "./SwipeActions.vue_vue_type_script_setup_true_lang-DUjUWq3G.js";
5
+ import { _ as J } from "./Icon.vue_vue_type_script_lang-BIzh8LF1.js";
6
+ import { _ as Ne } from "./Menu.vue_vue_type_script_setup_true_lang-D2FsOVYA.js";
7
7
  import { _ as ze } from "./Tooltip.vue_vue_type_script_setup_true_lang-C1C1qeBj.js";
8
- import { _ as he } from "./EmptyState.vue_vue_type_script_setup_true_lang-DbZiO2RF.js";
8
+ import { _ as he } from "./EmptyState.vue_vue_type_script_setup_true_lang-DHmu-UG-.js";
9
9
  import { u as Fe } from "./format-C_HXlOYQ.js";
10
10
  import { _ as Ve } from "./Badge.vue_vue_type_script_setup_true_lang-DJyZc0C7.js";
11
- import { _ as Oe } from "./Timestamp.vue_vue_type_script_setup_true_lang-d_KuxWjH.js";
11
+ import { _ as Oe } from "./Timestamp.vue_vue_type_script_setup_true_lang-0WL7PP0j.js";
12
12
  import { _ as me } from "./Highlight.vue_vue_type_script_setup_true_lang-DZGBmwcX.js";
13
13
  import { a as je } from "./mediaQuery-CygcXmFW.js";
14
14
  const Ue = ["data-row-click-ignore"], be = "col-start-1 row-start-1", Ye = "col-span-full row-start-2 max-w-full", ke = /* @__PURE__ */ oe({
@@ -21,8 +21,8 @@ const Ue = ["data-row-click-ignore"], be = "col-start-1 row-start-1", Ye = "col-
21
21
  highlight: { default: null },
22
22
  spread: { type: Boolean, default: !1 }
23
23
  },
24
- setup(v) {
25
- const s = v;
24
+ setup(y) {
25
+ const s = y;
26
26
  return (h, e) => (l(), r("div", {
27
27
  class: x(s.spread ? "contents" : "flex min-w-0 flex-col")
28
28
  }, [
@@ -55,8 +55,8 @@ const Ue = ["data-row-click-ignore"], be = "col-start-1 row-start-1", Ye = "col-
55
55
  ], 2));
56
56
  }
57
57
  });
58
- function _e(v, s) {
59
- let h = v;
58
+ function _e(y, s) {
59
+ let h = y;
60
60
  for (const e of String(s).split(".")) {
61
61
  if (typeof h != "object" || h === null) return;
62
62
  h = h[e];
@@ -82,8 +82,8 @@ const Ge = {
82
82
  search: {},
83
83
  spread: { type: Boolean }
84
84
  },
85
- setup(v) {
86
- const s = v, h = Fe(), e = y(() => _e(s.item, s.column.key)), C = y(() => e.value), k = y(() => e.value === null || e.value === void 0 ? "" : String(e.value)), m = y(() => typeof e.value == "number" ? e.value : typeof e.value == "string" && e.value.trim() !== "" ? Number(e.value) : null);
85
+ setup(y) {
86
+ const s = y, h = Fe(), e = v(() => _e(s.item, s.column.key)), C = v(() => e.value), k = v(() => e.value === null || e.value === void 0 ? "" : String(e.value)), m = v(() => typeof e.value == "number" ? e.value : typeof e.value == "string" && e.value.trim() !== "" ? Number(e.value) : null);
87
87
  return (E, N) => s.column.kind === "identity" ? (l(), r(b, { key: 0 }, [
88
88
  !s.compact && E.$slots.leading ? (l(), r("div", Ge, [
89
89
  S(E.$slots, "leading"),
@@ -127,16 +127,16 @@ const Ge = {
127
127
  ], 64));
128
128
  }
129
129
  }), Je = 'a, button, input, select, textarea, label, [role="button"], [data-row-click-ignore]', Qe = 500, Ze = 8;
130
- function et(v) {
130
+ function et(y) {
131
131
  const s = He(), h = te([]), e = te("");
132
132
  let C = !1, k = null, m = { x: 0, y: 0 };
133
- const E = (a) => v.actions()?.(a) ?? [];
133
+ const E = (a) => y.actions()?.(a) ?? [];
134
134
  function N(a) {
135
135
  return E(a).filter((p) => p.href).map((p) => ({ key: p.key, label: p.label, icon: p.icon, href: p.href, tone: p.tone ?? "neutral", external: p.external }));
136
136
  }
137
137
  function I(a, p, w) {
138
138
  const A = E(a);
139
- return A.length === 0 ? !1 : (e.value = v.label()?.(a) ?? v.moreLabel(), h.value = A.map((_) => ({
139
+ return A.length === 0 ? !1 : (e.value = y.label()?.(a) ?? y.moreLabel(), h.value = A.map((_) => ({
140
140
  id: _.key,
141
141
  label: _.label,
142
142
  icon: _.icon,
@@ -145,20 +145,20 @@ function et(v) {
145
145
  onSelect: () => {
146
146
  _.onSelect ? _.onSelect() : _.href && (_.external ? window.open(_.href, "_blank", "noopener") : window.location.assign(_.href));
147
147
  }
148
- })), ge(() => v.presentMenu(p, w)), !0);
148
+ })), ge(() => y.presentMenu(p, w)), !0);
149
149
  }
150
150
  function O(a, p) {
151
151
  const w = a.currentTarget.getBoundingClientRect();
152
152
  I(p, w.left, w.bottom);
153
153
  }
154
154
  function j(a, p) {
155
- !v.actions() || a.target.closest("a") || I(p, a.clientX, a.clientY) && (a.preventDefault(), C = !0);
155
+ !y.actions() || a.target.closest("a") || I(p, a.clientX, a.clientY) && (a.preventDefault(), C = !0);
156
156
  }
157
157
  function B() {
158
158
  k && clearTimeout(k), k = null;
159
159
  }
160
160
  function U(a, p) {
161
- C = !1, !(a.pointerType !== "touch" || !v.actions()) && (m = { x: a.clientX, y: a.clientY }, B(), k = setTimeout(() => {
161
+ C = !1, !(a.pointerType !== "touch" || !y.actions()) && (m = { x: a.clientX, y: a.clientY }, B(), k = setTimeout(() => {
162
162
  k = null, I(p, m.x, m.y) && (C = !0, navigator.vibrate?.(10));
163
163
  }, Qe));
164
164
  }
@@ -169,7 +169,7 @@ function et(v) {
169
169
  C && (C = !1, a.preventDefault(), a.stopPropagation());
170
170
  }
171
171
  function K(a, p) {
172
- const w = v.pick?.(), A = w ? null : v.target(p);
172
+ const w = y.pick?.(), A = w ? null : y.target(p);
173
173
  if (!(!w && !A || a.target.closest(Je)) && !window.getSelection()?.toString()) {
174
174
  if (w) {
175
175
  w(p);
@@ -210,7 +210,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
210
210
  }, pt = {
211
211
  key: 1,
212
212
  class: "inline-block w-full align-middle"
213
- }, yt = ["role"], vt = { class: "border-b border-border-separator" }, ht = ["aria-sort"], mt = ["onClick"], bt = { key: 1 }, kt = {
213
+ }, vt = ["role"], yt = { class: "border-b border-border-separator" }, ht = ["aria-sort"], mt = ["onClick"], bt = { key: 1 }, kt = {
214
214
  key: 0,
215
215
  class: "px-4 pt-2.5 pb-2",
216
216
  style: { width: "20px" }
@@ -246,15 +246,15 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
246
246
  pickLabel: { default: void 0 }
247
247
  },
248
248
  emits: ["sort"],
249
- setup(v, { expose: s, emit: h }) {
250
- const e = v, C = h, k = fe(), { t: m } = Be(), E = fe(), N = (o) => e.columns.filter((u) => u.mobile === o), I = y(() => N("primary")), O = y(() => N("accessory")), j = y(() => N("meta")), B = y(() => I.value.length === 1 && I.value[0].kind === "identity" && !z(I.value[0])), U = (o) => O.value.length > 0 || G.value && Z(o), H = (o) => `cell-${String(o.key).replace(/\./g, "_")}`, z = (o) => !!E[H(o)], K = (o, u) => _e(o, u.key), a = (o) => o == null || o === "", p = { md: "hidden md:table-cell", xl: "hidden xl:table-cell", "2xl": "hidden 2xl:table-cell" }, w = (o) => o.hideBelow ? [p[o.hideBelow]] : [], A = (o) => ["text-nowrap px-4 pt-2.5 pb-2 text-footnote font-normal text-content-muted", ...w(o)], _ = { start: "text-left", center: "text-center", end: "text-right" }, xe = (o) => [...w(o), _[o.align ?? "start"]], Ce = { start: "justify-start", center: "justify-center", end: "justify-end" }, se = y(() => e.rows.length > 0 && e.link(e.rows[0]) !== null), T = y(() => e.pick !== void 0 && e.display === "rows" && e.rows.length > 0), $e = Te(), Q = (o) => `${$e}-option-${o}`, P = te(-1), Y = pe("list");
251
- ye(() => e.rows, () => P.value = -1), ye(P, (o) => void ge(() => Y.value?.querySelector(`[id="${Q(o)}"]`)?.scrollIntoView?.({ block: "nearest" })));
249
+ setup(y, { expose: s, emit: h }) {
250
+ const e = y, C = h, k = fe(), { t: m } = Be(), E = fe(), N = (o) => e.columns.filter((u) => u.mobile === o), I = v(() => N("primary")), O = v(() => N("accessory")), j = v(() => N("meta")), B = v(() => I.value.length === 1 && I.value[0].kind === "identity" && !z(I.value[0])), U = (o) => O.value.length > 0 || G.value && Z(o), H = (o) => `cell-${String(o.key).replace(/\./g, "_")}`, z = (o) => !!E[H(o)], K = (o, u) => _e(o, u.key), a = (o) => o == null || o === "", p = { md: "hidden md:table-cell", xl: "hidden xl:table-cell", "2xl": "hidden 2xl:table-cell" }, w = (o) => o.hideBelow ? [p[o.hideBelow]] : [], A = (o) => ["text-nowrap px-4 pt-2.5 pb-2 text-footnote font-normal text-content-muted", ...w(o)], _ = { start: "text-left", center: "text-center", end: "text-right" }, xe = (o) => [...w(o), _[o.align ?? "start"]], Ce = { start: "justify-start", center: "justify-center", end: "justify-end" }, se = v(() => e.rows.length > 0 && e.link(e.rows[0]) !== null), T = v(() => e.pick !== void 0 && e.display === "rows" && e.rows.length > 0), $e = Te(), Q = (o) => `${$e}-option-${o}`, P = te(-1), Y = pe("list");
251
+ ve(() => e.rows, () => P.value = -1), ve(P, (o) => void ge(() => Y.value?.querySelector(`[id="${Q(o)}"]`)?.scrollIntoView?.({ block: "nearest" })));
252
252
  function Se(o) {
253
253
  if (o.target !== o.currentTarget || o.altKey || o.ctrlKey || o.metaKey || o.shiftKey) return;
254
254
  const u = e.rows.length - 1, t = P.value, $ = { ArrowDown: Math.min(t + 1, u), ArrowUp: Math.max(t - 1, 0), Home: 0, End: u };
255
255
  o.key in $ ? (o.preventDefault(), P.value = $[o.key]) : (o.key === "Enter" || o.key === " ") && t >= 0 && e.rows[t] !== void 0 && (o.preventDefault(), e.pick?.(e.rows[t]));
256
256
  }
257
- const le = y(
257
+ const le = v(
258
258
  () => T.value ? {
259
259
  role: "listbox",
260
260
  tabindex: 0,
@@ -277,7 +277,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
277
277
  pick: () => e.pick,
278
278
  presentMenu: (o, u) => re.value?.presentAt(o, u),
279
279
  moreLabel: () => m("core.page.more_actions")
280
- }), G = y(() => !!e.rowActions && (e.actionsVisible || !k.actions && !se.value)), W = y(() => !!k.actions || se.value || G.value), ie = (o) => e.rowLabel ? `${m("core.page.more_actions")}: ${e.rowLabel(o)}` : m("core.page.more_actions"), Z = (o) => d.actionsOf(o).length > 0, ae = y(() => e.columns.length + (W.value ? 1 : 0)), X = (o) => o.sort !== void 0 && e.sorted?.key === o.sort, Pe = (o) => o.sort === void 0 ? void 0 : X(o) ? e.sorted?.direction === "asc" ? "ascending" : "descending" : "none", Re = (o) => X(o) ? e.sorted?.direction === "asc" ? "arrowUpSLine" : "arrowDownSLine" : "expandUpDownLine", ce = (o) => ({ animationDelay: `${Math.min(o, 8) * 30}ms` }), ee = y(() => e.display === "loading"), Me = y(() => ee.value && e.reserveRows !== void 0 ? `${e.reserveRows * (e.rowHeight ?? 40) + Tt}px` : void 0), ue = y(() => e.display === "empty" || e.display === "no-matches");
280
+ }), G = v(() => !!e.rowActions && (e.actionsVisible || !k.actions && !se.value)), W = v(() => !!k.actions || se.value || G.value), ie = (o) => e.rowLabel ? `${m("core.page.more_actions")}: ${e.rowLabel(o)}` : m("core.page.more_actions"), Z = (o) => d.actionsOf(o).length > 0, ae = v(() => e.columns.length + (W.value ? 1 : 0)), X = (o) => o.sort !== void 0 && e.sorted?.key === o.sort, Pe = (o) => o.sort === void 0 ? void 0 : X(o) ? e.sorted?.direction === "asc" ? "ascending" : "descending" : "none", Re = (o) => X(o) ? e.sorted?.direction === "asc" ? "arrowUpSLine" : "arrowDownSLine" : "expandUpDownLine", ce = (o) => ({ animationDelay: `${Math.min(o, 8) * 30}ms` }), ee = v(() => e.display === "loading"), Me = v(() => ee.value && e.reserveRows !== void 0 ? `${e.reserveRows * (e.rowHeight ?? 40) + Tt}px` : void 0), ue = v(() => e.display === "empty" || e.display === "no-matches");
281
281
  return (o, u) => (l(), r(b, null, [
282
282
  e.phone ? (l(), r("ul", q({
283
283
  key: 0,
@@ -396,7 +396,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
396
396
  "data-test": "collection-row-more",
397
397
  "aria-label": ie(t),
398
398
  class: "hit-target -my-1 -mr-1 flex size-8 cursor-pointer items-center justify-center rounded-full text-content-muted active:bg-fill",
399
- onClick: ve((n) => i(d).openMenuFrom(n, t), ["stop"])
399
+ onClick: ye((n) => i(d).openMenuFrom(n, t), ["stop"])
400
400
  }, [
401
401
  g(i(J), {
402
402
  name: "moreLine",
@@ -451,7 +451,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
451
451
  class: x(["collection-grid w-full", { condensed: e.density === "condensed" }]),
452
452
  role: T.value ? "presentation" : void 0
453
453
  }, [
454
- c("thead", vt, [
454
+ c("thead", yt, [
455
455
  c("tr", null, [
456
456
  (l(!0), r(b, null, L(e.columns, (t) => (l(), r("th", {
457
457
  key: String(t.key),
@@ -593,7 +593,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
593
593
  "data-test": "collection-row-more",
594
594
  "aria-label": ie(t),
595
595
  class: "hit-target flex size-8 cursor-pointer items-center justify-center rounded-full 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",
596
- onClick: ve((n) => i(d).openMenuFrom(n, t), ["stop"])
596
+ onClick: ye((n) => i(d).openMenuFrom(n, t), ["stop"])
597
597
  }, [
598
598
  g(i(J), {
599
599
  name: "moreLine",
@@ -625,7 +625,7 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
625
625
  ], 8, Et)
626
626
  ])) : f("", !0)
627
627
  ], 16)
628
- ], 10, yt)
628
+ ], 10, vt)
629
629
  ], 4)
630
630
  ])),
631
631
  e.rowActions ? (l(), D(i(Ne), {
@@ -638,13 +638,14 @@ const tt = { class: "flex flex-1 flex-col gap-2 pt-1" }, ot = ["onClick", "onCon
638
638
  ], 64));
639
639
  }
640
640
  });
641
- function Xt(v) {
642
- const s = je("(max-width: 1023px)"), h = y(() => v().some((e) => e.mobile && e.mobile !== "hidden"));
643
- return { narrow: y(() => s.value), phone: y(() => s.value && h.value) };
641
+ function Xt(y) {
642
+ const s = je("(max-width: 1023px)"), h = v(() => y().some((e) => e.mobile && e.mobile !== "hidden"));
643
+ return { narrow: v(() => s.value), phone: v(() => s.value && h.value) };
644
644
  }
645
645
  export {
646
646
  Wt as _,
647
647
  ke as a,
648
648
  V as b,
649
- Xt as u
649
+ Xt as u,
650
+ _e as v
650
651
  };
@@ -79,8 +79,8 @@ function U(t, n, u, a = {}) {
79
79
  }), v([n, () => a.number?.()], ([c, d]) => i.update(t, { label: c, number: d })), b(() => l?.());
80
80
  }
81
81
  export {
82
- A as a,
82
+ U as a,
83
83
  T as p,
84
84
  N as s,
85
- U as u
85
+ A as u
86
86
  };
@@ -1,8 +1,8 @@
1
1
  import { computed as n, watch as h } from "vue";
2
2
  import { useI18n as g } from "vue-i18n";
3
3
  import { useRoute as y, useRouter as v } from "vue-router";
4
- import { u as A } from "./platform-DU9QFts8.js";
5
- import { B as K, a as P } from "./back-LcLlFodC.js";
4
+ import { u as A } from "./platform-YWfOO7b2.js";
5
+ import { B as K, a as P } from "./back-CeozxCgQ.js";
6
6
  import { i as R } from "./access-DmAceEo5.js";
7
7
  function C() {
8
8
  const t = y(), u = v(), { access: c } = A(), { t: o } = g(), i = n(() => {
@@ -2,7 +2,7 @@ import { type NavigationItem } from "../router/navigation";
2
2
  /**
3
3
  * The server's menu for the signed-in user, as a list of links: headings over groups of two or more
4
4
  * destinations, the current destination marked (`aria-current="page"`), a destination whose feature
5
- * is not installed left out. Reads the application's menu (`useNavigation()`) unless `items` is given.
5
+ * is not installed left out. A destination outside the app (`href`, the old admin) is a plain link with an "opens outside the app" marker. Reads the application's menu (`useNavigation()`) unless `items` is given.
6
6
  *
7
7
  * - `rail`: the desktop sidebar, on the dark anchor surface.
8
8
  * - `drawer`: the phone drawer, on the page surface; a tap is reported as `select` instead of