@conduction/nextcloud-vue 2.143.0 → 2.144.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 (101) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +7 -2
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
  5. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  6. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  7. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +1 -1
  8. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  9. package/dist/esm/components/CnEventsCard/CnEventsCard.vue.js +1 -1
  10. package/dist/esm/components/CnEventsCard/CnEventsCard.vue2.js +9 -0
  11. package/dist/esm/components/CnEventsCard/CnEventsCard.vue2.js.map +1 -1
  12. package/dist/esm/components/CnEventsCard/CnEventsCard.vue3.js +24 -13
  13. package/dist/esm/components/CnEventsCard/CnEventsCard.vue3.js.map +1 -1
  14. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  15. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +2 -1
  16. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  17. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  18. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +3 -1
  19. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  20. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  21. package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
  22. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js +3 -0
  23. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
  24. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js +19 -14
  25. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
  26. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue.js +1 -1
  27. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js +30 -0
  28. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js.map +1 -1
  29. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js +158 -102
  30. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js.map +1 -1
  31. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  32. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  33. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js +12 -0
  34. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue.js +1 -1
  36. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +110 -2
  37. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +146 -80
  39. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  40. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue.js +1 -1
  41. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js +45 -0
  42. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js.map +1 -1
  43. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue3.js +67 -34
  44. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue3.js.map +1 -1
  45. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue.js +1 -1
  46. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js +3 -22
  47. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js.map +1 -1
  48. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue3.js.map +1 -1
  49. package/dist/esm/integrations/builtin/calendar/eventStatus.js +67 -0
  50. package/dist/esm/integrations/builtin/calendar/eventStatus.js.map +1 -0
  51. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue.js +1 -1
  52. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js +39 -0
  53. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js.map +1 -1
  54. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue3.js +81 -32
  55. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue3.js.map +1 -1
  56. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue.js +1 -1
  57. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js +5 -6
  58. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js.map +1 -1
  59. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js.map +1 -1
  60. package/dist/esm/integrations/builtin/deck/deckCardParts.js +59 -0
  61. package/dist/esm/integrations/builtin/deck/deckCardParts.js.map +1 -0
  62. package/dist/esm/l10n/en.json.js +6 -0
  63. package/dist/esm/l10n/en.json.js.map +1 -1
  64. package/dist/esm/l10n/nl.json.js +6 -0
  65. package/dist/esm/l10n/nl.json.js.map +1 -1
  66. package/dist/esm/library-style.js +1 -1
  67. package/dist/esm/nextcloud-vue.css +815 -363
  68. package/dist/esm/utils/fetchFilterCounts.js +5 -2
  69. package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
  70. package/dist/esm/utils/nextcloudDirectory.js +19 -6
  71. package/dist/esm/utils/nextcloudDirectory.js.map +1 -1
  72. package/dist/nextcloud-vue.cjs.js +1347 -758
  73. package/dist/nextcloud-vue.cjs.js.map +2 -2
  74. package/dist/nextcloud-vue.css +815 -363
  75. package/l10n/en.json +6 -0
  76. package/l10n/nl.json +6 -0
  77. package/package.json +1 -1
  78. package/src/components/CnActionDialog/CnActionDialog.vue +28 -3
  79. package/src/components/CnConversationThread/CnConversationThread.vue +5 -2
  80. package/src/components/CnEventsCard/CnEventsCard.vue +27 -5
  81. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +15 -1
  82. package/src/components/CnIndexPage/CnIndexPage.vue +3 -1
  83. package/src/components/CnNotesCard/CnNotesCard.vue +8 -0
  84. package/src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue +114 -46
  85. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +26 -1
  86. package/src/components/CnTasksWidget/CnTasksWidget.vue +170 -13
  87. package/src/css/dialog.css +7 -1
  88. package/src/css/kpi-card.css +3 -0
  89. package/src/css/look-board-detail.css +317 -0
  90. package/src/css/look-board-index.css +14 -0
  91. package/src/css/look-board.css +25 -0
  92. package/src/integrations/builtin/calendar/CnCalendarCard.vue +76 -11
  93. package/src/integrations/builtin/calendar/CnCalendarTab.vue +3 -22
  94. package/src/integrations/builtin/calendar/__tests__/CnCalendarCardBoardRows.spec.js +52 -0
  95. package/src/integrations/builtin/calendar/eventStatus.js +63 -0
  96. package/src/integrations/builtin/deck/CnDeckCard.vue +66 -0
  97. package/src/integrations/builtin/deck/CnDeckTab.vue +5 -6
  98. package/src/integrations/builtin/deck/__tests__/CnDeckCardBoardRows.spec.js +49 -0
  99. package/src/integrations/builtin/deck/deckCardParts.js +56 -0
  100. package/src/utils/fetchFilterCounts.js +5 -2
  101. package/src/utils/nextcloudDirectory.js +19 -6
@@ -2930,6 +2930,12 @@ var translations$s = {
2930
2930
  "expires {date}": "expires {date}",
2931
2931
  "Loading …": "Loading …",
2932
2932
  "Reorder {item}: drag, or press the up and down arrow keys": "Reorder {item}: drag, or press the up and down arrow keys",
2933
+ "Board {name}": "Board {name}",
2934
+ "list {name}": "list {name}",
2935
+ Tentative: "Tentative",
2936
+ Confirmed: "Confirmed",
2937
+ Cancelled: "Cancelled",
2938
+ "{start} until {end}": "{start} until {end}",
2933
2939
  "No contacts linked": "No contacts linked",
2934
2940
  "No relations yet": "No relations yet",
2935
2941
  Period: "Period",
@@ -5916,6 +5922,12 @@ var translations$c = {
5916
5922
  "Made {date}": "Gemaakt {date}",
5917
5923
  "expires {date}": "verloopt {date}",
5918
5924
  "Reorder {item}: drag, or press the up and down arrow keys": "{item} verplaatsen: slepen, of de pijltoetsen omhoog en omlaag",
5925
+ "Board {name}": "Bord {name}",
5926
+ "list {name}": "lijst {name}",
5927
+ Tentative: "Voorlopig",
5928
+ Confirmed: "Bevestigd",
5929
+ Cancelled: "Geannuleerd",
5930
+ "{start} until {end}": "{start} tot {end}",
5919
5931
  "No contacts linked": "Geen contacten gekoppeld",
5920
5932
  "No relations yet": "Nog geen relaties",
5921
5933
  Period: "Periode",
@@ -7309,8 +7321,8 @@ const _hoisted_8$4i = {
7309
7321
  key: 0,
7310
7322
  class: "cn-ai-history-list__item-desc"
7311
7323
  };
7312
- const _hoisted_9$3X = { class: "cn-ai-history-list__item-time" };
7313
- const _hoisted_10$3t = ["aria-label", "title", "onClick"];
7324
+ const _hoisted_9$3Y = { class: "cn-ai-history-list__item-time" };
7325
+ const _hoisted_10$3u = ["aria-label", "title", "onClick"];
7314
7326
 
7315
7327
  function render$8G(_ctx, _cache, $props, $setup, $data, $options) {
7316
7328
  const _component_NcTextField = vue$1.resolveComponent("NcTextField");
@@ -7411,7 +7423,7 @@ function render$8G(_ctx, _cache, $props, $setup, $data, $options) {
7411
7423
  (conv.description)
7412
7424
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_8$4i, vue$1.toDisplayString(conv.description), 1 /* TEXT */))
7413
7425
  : vue$1.createCommentVNode("v-if", true),
7414
- vue$1.createElementVNode("span", _hoisted_9$3X, vue$1.toDisplayString($options.formatRelative(conv.updatedAt || conv.createdAt)), 1 /* TEXT */)
7426
+ vue$1.createElementVNode("span", _hoisted_9$3Y, vue$1.toDisplayString($options.formatRelative(conv.updatedAt || conv.createdAt)), 1 /* TEXT */)
7415
7427
  ], 8 /* PROPS */, _hoisted_6$5c),
7416
7428
  vue$1.createElementVNode("button", {
7417
7429
  type: "button",
@@ -7422,7 +7434,7 @@ function render$8G(_ctx, _cache, $props, $setup, $data, $options) {
7422
7434
  onClick: $event => ($options.startEdit(conv))
7423
7435
  }, [
7424
7436
  vue$1.createVNode(_component_Pencil, { size: 16 })
7425
- ], 8 /* PROPS */, _hoisted_10$3t)
7437
+ ], 8 /* PROPS */, _hoisted_10$3u)
7426
7438
  ], 64 /* STABLE_FRAGMENT */))
7427
7439
  ], 2 /* CLASS */))
7428
7440
  }), 128 /* KEYED_FRAGMENT */))
@@ -10496,12 +10508,12 @@ const _hoisted_8$4g = {
10496
10508
  key: 1,
10497
10509
  class: "cn-ai-message-list__chip"
10498
10510
  };
10499
- const _hoisted_9$3W = {
10511
+ const _hoisted_9$3X = {
10500
10512
  key: 2,
10501
10513
  class: "cn-ai-message-list__bubble cn-ai-message-list__bubble--assistant",
10502
10514
  "aria-live": "polite"
10503
10515
  };
10504
- const _hoisted_10$3s = {
10516
+ const _hoisted_10$3t = {
10505
10517
  key: 1,
10506
10518
  class: "cn-ai-message-list__attachments",
10507
10519
  "data-testid": "cn-ai-message-attachments"
@@ -10509,16 +10521,16 @@ const _hoisted_10$3s = {
10509
10521
  const _hoisted_11$36 = ["href"];
10510
10522
  const _hoisted_12$2P = ["src", "alt"];
10511
10523
  const _hoisted_13$2w = ["href"];
10512
- const _hoisted_14$2m = {
10524
+ const _hoisted_14$2n = {
10513
10525
  key: 2,
10514
10526
  class: "cn-ai-message-list__chip"
10515
10527
  };
10516
- const _hoisted_15$29 = ["aria-expanded", "onClick"];
10517
- const _hoisted_16$1Y = {
10528
+ const _hoisted_15$2a = ["aria-expanded", "onClick"];
10529
+ const _hoisted_16$1_ = {
10518
10530
  key: 0,
10519
10531
  class: "cn-ai-message-list__tool-detail"
10520
10532
  };
10521
- const _hoisted_17$1K = { class: "cn-ai-message-list__tool-json" };
10533
+ const _hoisted_17$1L = { class: "cn-ai-message-list__tool-json" };
10522
10534
  const _hoisted_18$1w = {
10523
10535
  key: 1,
10524
10536
  class: "cn-ai-message-list__item cn-ai-message-list__item--assistant"
@@ -10576,7 +10588,7 @@ function render$8E(_ctx, _cache, $props, $setup, $data, $options) {
10576
10588
  ]))
10577
10589
  : vue$1.createCommentVNode("v-if", true)
10578
10590
  ]))
10579
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_9$3W, [
10591
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_9$3X, [
10580
10592
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList((message.attachmentNotices || []), (notice, nIdx) => {
10581
10593
  return (vue$1.openBlock(), vue$1.createElementBlock("p", {
10582
10594
  key: 'notice-' + nIdx,
@@ -10593,7 +10605,7 @@ function render$8E(_ctx, _cache, $props, $setup, $data, $options) {
10593
10605
  }, null, 8 /* PROPS */, ["text"]))
10594
10606
  : vue$1.createCommentVNode("v-if", true),
10595
10607
  ($options.hasAttachments(message))
10596
- ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_10$3s, [
10608
+ ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_10$3t, [
10597
10609
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(message.attachments, (file, fIdx) => {
10598
10610
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
10599
10611
  key: fIdx,
@@ -10621,7 +10633,7 @@ function render$8E(_ctx, _cache, $props, $setup, $data, $options) {
10621
10633
  target: "_blank",
10622
10634
  rel: "noopener noreferrer"
10623
10635
  }, vue$1.toDisplayString($options.fileLabel(file)), 9 /* TEXT, PROPS */, _hoisted_13$2w))
10624
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$2m, vue$1.toDisplayString(file.name), 1 /* TEXT */))
10636
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$2n, vue$1.toDisplayString(file.name), 1 /* TEXT */))
10625
10637
  ]))
10626
10638
  }), 128 /* KEYED_FRAGMENT */))
10627
10639
  ]))
@@ -10642,10 +10654,10 @@ function render$8E(_ctx, _cache, $props, $setup, $data, $options) {
10642
10654
  class: vue$1.normalizeClass(["cn-ai-message-list__tool-chevron", [{ 'cn-ai-message-list__tool-chevron--open': $options.isToolExpanded(index, tIdx) }]])
10643
10655
  }, null, 8 /* PROPS */, ["class"]),
10644
10656
  vue$1.createTextVNode(" " + vue$1.toDisplayString($options.cnTranslate('Tool: {toolId}').replace('{toolId}', tool.toolId)), 1 /* TEXT */)
10645
- ], 8 /* PROPS */, _hoisted_15$29),
10657
+ ], 8 /* PROPS */, _hoisted_15$2a),
10646
10658
  ($options.isToolExpanded(index, tIdx))
10647
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1Y, [
10648
- vue$1.createElementVNode("pre", _hoisted_17$1K, vue$1.toDisplayString($options.formatToolPayload(tool)), 1 /* TEXT */)
10659
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1_, [
10660
+ vue$1.createElementVNode("pre", _hoisted_17$1L, vue$1.toDisplayString($options.formatToolPayload(tool)), 1 /* TEXT */)
10649
10661
  ]))
10650
10662
  : vue$1.createCommentVNode("v-if", true)
10651
10663
  ], 2 /* CLASS */))
@@ -11771,31 +11783,31 @@ const _hoisted_8$4f = {
11771
11783
  class: "cn-ai-chat-window__start",
11772
11784
  "data-testid": "cn-ai-chat-tab-start"
11773
11785
  };
11774
- const _hoisted_9$3V = {
11786
+ const _hoisted_9$3W = {
11775
11787
  key: 0,
11776
11788
  class: "cn-ai-chat-window__approvals",
11777
11789
  "data-testid": "cn-ai-panel-approvals"
11778
11790
  };
11779
- const _hoisted_10$3r = { class: "cn-ai-approval__head" };
11791
+ const _hoisted_10$3s = { class: "cn-ai-approval__head" };
11780
11792
  const _hoisted_11$35 = { class: "cn-ai-approval__title" };
11781
11793
  const _hoisted_12$2O = { class: "cn-ai-approval__reach" };
11782
11794
  const _hoisted_13$2v = {
11783
11795
  key: 0,
11784
11796
  class: "cn-ai-approval__reason"
11785
11797
  };
11786
- const _hoisted_14$2l = { class: "cn-ai-approval__actions" };
11787
- const _hoisted_15$28 = {
11798
+ const _hoisted_14$2m = { class: "cn-ai-approval__actions" };
11799
+ const _hoisted_15$29 = {
11788
11800
  key: 1,
11789
11801
  class: "cn-ai-chat-window__error",
11790
11802
  role: "alert",
11791
11803
  "data-testid": "cn-ai-panel-error"
11792
11804
  };
11793
- const _hoisted_16$1X = {
11805
+ const _hoisted_16$1Z = {
11794
11806
  key: 2,
11795
11807
  class: "cn-ai-chat-window__note",
11796
11808
  "data-testid": "cn-ai-panel-note"
11797
11809
  };
11798
- const _hoisted_17$1J = { class: "cn-ai-chat-window__input" };
11810
+ const _hoisted_17$1K = { class: "cn-ai-chat-window__input" };
11799
11811
  const _hoisted_18$1v = {
11800
11812
  key: 2,
11801
11813
  class: "cn-ai-chat-window__body cn-ai-chat-window__body--history"
@@ -12031,20 +12043,20 @@ function render$8D(_ctx, _cache, $props, $setup, $data, $options) {
12031
12043
  }, 8 /* PROPS */, ["messages", "currentText", "isStreaming"])
12032
12044
  ]),
12033
12045
  ($options.pendingApprovals.length)
12034
- ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_9$3V, [
12046
+ ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_9$3W, [
12035
12047
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.pendingApprovals, (approval) => {
12036
12048
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
12037
12049
  key: approval.id,
12038
12050
  class: "cn-ai-approval"
12039
12051
  }, [
12040
- vue$1.createElementVNode("div", _hoisted_10$3r, [
12052
+ vue$1.createElementVNode("div", _hoisted_10$3s, [
12041
12053
  vue$1.createElementVNode("span", _hoisted_11$35, vue$1.toDisplayString(approval.title), 1 /* TEXT */),
12042
12054
  vue$1.createElementVNode("span", _hoisted_12$2O, vue$1.toDisplayString(approval.reach), 1 /* TEXT */)
12043
12055
  ]),
12044
12056
  (approval.reason)
12045
12057
  ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_13$2v, vue$1.toDisplayString(approval.reason), 1 /* TEXT */))
12046
12058
  : vue$1.createCommentVNode("v-if", true),
12047
- vue$1.createElementVNode("div", _hoisted_14$2l, [
12059
+ vue$1.createElementVNode("div", _hoisted_14$2m, [
12048
12060
  vue$1.createVNode(_component_NcButton, {
12049
12061
  variant: "primary",
12050
12062
  disabled: $data.resolvingApprovalId === approval.id,
@@ -12073,10 +12085,10 @@ function render$8D(_ctx, _cache, $props, $setup, $data, $options) {
12073
12085
  ]))
12074
12086
  : vue$1.createCommentVNode("v-if", true),
12075
12087
  ($props.streamState.error)
12076
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_15$28, vue$1.toDisplayString($props.streamState.error.message || $options.cnTranslate('The assistant could not answer.')), 1 /* TEXT */))
12088
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_15$29, vue$1.toDisplayString($props.streamState.error.message || $options.cnTranslate('The assistant could not answer.')), 1 /* TEXT */))
12077
12089
  : vue$1.createCommentVNode("v-if", true),
12078
12090
  ($props.note)
12079
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_16$1X, [
12091
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_16$1Z, [
12080
12092
  vue$1.createVNode(_component_InformationOutline, {
12081
12093
  size: 18,
12082
12094
  class: "cn-ai-chat-window__note-icon"
@@ -12084,7 +12096,7 @@ function render$8D(_ctx, _cache, $props, $setup, $data, $options) {
12084
12096
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($props.note), 1 /* TEXT */)
12085
12097
  ]))
12086
12098
  : vue$1.createCommentVNode("v-if", true),
12087
- vue$1.createElementVNode("div", _hoisted_17$1J, [
12099
+ vue$1.createElementVNode("div", _hoisted_17$1K, [
12088
12100
  vue$1.createVNode(_component_CnAiInput, {
12089
12101
  ref: "input",
12090
12102
  disabled: $props.streamState.isStreaming,
@@ -26807,8 +26819,8 @@ const _hoisted_8$4e = {
26807
26819
  class: "cn-chart-widget__bar-track",
26808
26820
  "aria-hidden": "true"
26809
26821
  };
26810
- const _hoisted_9$3U = { class: "cn-chart-widget__bar-value" };
26811
- const _hoisted_10$3q = {
26822
+ const _hoisted_9$3V = { class: "cn-chart-widget__bar-value" };
26823
+ const _hoisted_10$3r = {
26812
26824
  key: 0,
26813
26825
  class: "cn-chart-widget__footnote"
26814
26826
  };
@@ -26822,16 +26834,16 @@ const _hoisted_13$2u = {
26822
26834
  role: "row",
26823
26835
  class: "cn-chart-widget__matrix-row"
26824
26836
  };
26825
- const _hoisted_14$2k = {
26837
+ const _hoisted_14$2l = {
26826
26838
  role: "rowheader",
26827
26839
  class: "cn-chart-widget__matrix-label"
26828
26840
  };
26829
- const _hoisted_15$27 = ["aria-current"];
26830
- const _hoisted_16$1W = {
26841
+ const _hoisted_15$28 = ["aria-current"];
26842
+ const _hoisted_16$1Y = {
26831
26843
  key: 0,
26832
26844
  class: "cn-chart-widget__footnote"
26833
26845
  };
26834
- const _hoisted_17$1I = {
26846
+ const _hoisted_17$1J = {
26835
26847
  key: 7,
26836
26848
  class: "cn-chart-widget__canvas"
26837
26849
  };
@@ -26932,7 +26944,7 @@ function render$8y(_ctx, _cache, $props, $setup, $data, $options) {
26932
26944
  style: vue$1.normalizeStyle({ width: `${row.share}%` })
26933
26945
  }, null, 4 /* STYLE */)
26934
26946
  ]),
26935
- vue$1.createElementVNode("span", _hoisted_9$3U, vue$1.toDisplayString(row.text), 1 /* TEXT */)
26947
+ vue$1.createElementVNode("span", _hoisted_9$3V, vue$1.toDisplayString(row.text), 1 /* TEXT */)
26936
26948
  ], 64 /* STABLE_FRAGMENT */))
26937
26949
  ]),
26938
26950
  _: 2 /* DYNAMIC */
@@ -26941,7 +26953,7 @@ function render$8y(_ctx, _cache, $props, $setup, $data, $options) {
26941
26953
  }), 128 /* KEYED_FRAGMENT */))
26942
26954
  ], 2 /* CLASS */),
26943
26955
  ($props.footnote)
26944
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_10$3q, vue$1.toDisplayString($options.hostTranslate($props.footnote)), 1 /* TEXT */))
26956
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_10$3r, vue$1.toDisplayString($options.hostTranslate($props.footnote)), 1 /* TEXT */))
26945
26957
  : vue$1.createCommentVNode("v-if", true)
26946
26958
  ]))
26947
26959
  : ($props.type === 'matrix')
@@ -26971,7 +26983,7 @@ function render$8y(_ctx, _cache, $props, $setup, $data, $options) {
26971
26983
  role: "row",
26972
26984
  class: "cn-chart-widget__matrix-row"
26973
26985
  }, [
26974
- vue$1.createElementVNode("span", _hoisted_14$2k, vue$1.toDisplayString(row.label), 1 /* TEXT */),
26986
+ vue$1.createElementVNode("span", _hoisted_14$2l, vue$1.toDisplayString(row.label), 1 /* TEXT */),
26975
26987
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(row.cells, (cell, column) => {
26976
26988
  return (vue$1.openBlock(), vue$1.createElementBlock("span", {
26977
26989
  key: column,
@@ -26980,17 +26992,17 @@ function render$8y(_ctx, _cache, $props, $setup, $data, $options) {
26980
26992
  style: vue$1.normalizeStyle(cell.color ? { background: cell.color } : null),
26981
26993
  "aria-current": cell.current ? 'true' : null,
26982
26994
  "data-testid": "cn-chart-widget-matrix-cell"
26983
- }, vue$1.toDisplayString(cell.text), 15 /* TEXT, CLASS, STYLE, PROPS */, _hoisted_15$27))
26995
+ }, vue$1.toDisplayString(cell.text), 15 /* TEXT, CLASS, STYLE, PROPS */, _hoisted_15$28))
26984
26996
  }), 128 /* KEYED_FRAGMENT */))
26985
26997
  ]))
26986
26998
  }), 128 /* KEYED_FRAGMENT */))
26987
26999
  ], 12 /* STYLE, PROPS */, _hoisted_12$2N),
26988
27000
  ($props.footnote)
26989
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_16$1W, vue$1.toDisplayString($options.hostTranslate($props.footnote)), 1 /* TEXT */))
27001
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_16$1Y, vue$1.toDisplayString($options.hostTranslate($props.footnote)), 1 /* TEXT */))
26990
27002
  : vue$1.createCommentVNode("v-if", true)
26991
27003
  ]))
26992
27004
  : ($data.chartComponent)
26993
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_17$1I, [
27005
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_17$1J, [
26994
27006
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent($data.chartComponent), {
26995
27007
  ref: "chart",
26996
27008
  type: $props.type,
@@ -27966,7 +27978,7 @@ const _hoisted_7$4F = {
27966
27978
  class: "cn-chart-widget-form__row2"
27967
27979
  };
27968
27980
  const _hoisted_8$4d = { class: "cn-chart-widget-form__row2" };
27969
- const _hoisted_9$3T = {
27981
+ const _hoisted_9$3U = {
27970
27982
  key: 2,
27971
27983
  class: "cn-chart-widget-form__hint"
27972
27984
  };
@@ -28077,7 +28089,7 @@ function render$8u(_ctx, _cache, $props, $setup, $data, $options) {
28077
28089
  onInput: $options.onFilterRows
28078
28090
  }, null, 8 /* PROPS */, ["value", "fields", "onInput"]),
28079
28091
  ($data.mode === 'timeseries')
28080
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_9$3T, vue$1.toDisplayString($options.t('nextcloud-vue', 'The time range follows the dashboard date chip.')), 1 /* TEXT */))
28092
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_9$3U, vue$1.toDisplayString($options.t('nextcloud-vue', 'The time range follows the dashboard date chip.')), 1 /* TEXT */))
28081
28093
  : vue$1.createCommentVNode("v-if", true)
28082
28094
  ]))
28083
28095
  }
@@ -29448,21 +29460,21 @@ const _hoisted_5$5x = {
29448
29460
  const _hoisted_6$56 = ["role", "aria-label"];
29449
29461
  const _hoisted_7$4E = ["role", "aria-selected", "aria-pressed", "onClick"];
29450
29462
  const _hoisted_8$4c = { class: "cn-quick-filter-bar__label" };
29451
- const _hoisted_9$3S = {
29463
+ const _hoisted_9$3T = {
29452
29464
  key: 1,
29453
29465
  class: "cn-quick-filter-bar__count",
29454
29466
  "data-testid": "cn-quick-filter-count"
29455
29467
  };
29456
- const _hoisted_10$3p = ["aria-expanded", "aria-label", "title"];
29468
+ const _hoisted_10$3q = ["aria-expanded", "aria-label", "title"];
29457
29469
  const _hoisted_11$33 = {
29458
29470
  key: 0,
29459
29471
  class: "cn-quick-filter-bar__label"
29460
29472
  };
29461
29473
  const _hoisted_12$2M = { class: "cn-quick-filter-bar__more-heading" };
29462
29474
  const _hoisted_13$2t = { class: "cn-quick-filter-bar__more-list" };
29463
- const _hoisted_14$2j = ["aria-pressed", "onClick"];
29464
- const _hoisted_15$26 = { class: "cn-quick-filter-bar__label" };
29465
- const _hoisted_16$1V = {
29475
+ const _hoisted_14$2k = ["aria-pressed", "onClick"];
29476
+ const _hoisted_15$27 = { class: "cn-quick-filter-bar__label" };
29477
+ const _hoisted_16$1X = {
29466
29478
  key: 1,
29467
29479
  class: "cn-quick-filter-bar__count",
29468
29480
  "data-testid": "cn-quick-filter-count"
@@ -29548,7 +29560,7 @@ function render$8r(_ctx, _cache, $props, $setup, $data, $options) {
29548
29560
  : vue$1.createCommentVNode("v-if", true),
29549
29561
  vue$1.createElementVNode("span", _hoisted_8$4c, vue$1.toDisplayString($options.tl(entry.tab.label)), 1 /* TEXT */),
29550
29562
  ($options.countOf(entry) !== null)
29551
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_9$3S, vue$1.toDisplayString(' ' + $options.countOf(entry)), 1 /* TEXT */))
29563
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_9$3T, vue$1.toDisplayString(' ' + $options.countOf(entry)), 1 /* TEXT */))
29552
29564
  : vue$1.createCommentVNode("v-if", true)
29553
29565
  ], 10 /* CLASS, PROPS */, _hoisted_7$4E))
29554
29566
  }), 128 /* KEYED_FRAGMENT */))
@@ -29584,7 +29596,7 @@ function render$8r(_ctx, _cache, $props, $setup, $data, $options) {
29584
29596
  size: 16,
29585
29597
  class: "cn-quick-filter-bar__icon"
29586
29598
  })
29587
- ], 10 /* CLASS, PROPS */, _hoisted_10$3p)
29599
+ ], 10 /* CLASS, PROPS */, _hoisted_10$3q)
29588
29600
  ]),
29589
29601
  default: vue$1.withCtx(() => [
29590
29602
  vue$1.createElementVNode("div", {
@@ -29610,11 +29622,11 @@ function render$8r(_ctx, _cache, $props, $setup, $data, $options) {
29610
29622
  class: "cn-quick-filter-bar__icon"
29611
29623
  }, null, 8 /* PROPS */, ["name"]))
29612
29624
  : vue$1.createCommentVNode("v-if", true),
29613
- vue$1.createElementVNode("span", _hoisted_15$26, vue$1.toDisplayString($options.tl(entry.tab.label)), 1 /* TEXT */),
29625
+ vue$1.createElementVNode("span", _hoisted_15$27, vue$1.toDisplayString($options.tl(entry.tab.label)), 1 /* TEXT */),
29614
29626
  ($options.countOf(entry) !== null)
29615
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1V, vue$1.toDisplayString(' ' + $options.countOf(entry)), 1 /* TEXT */))
29627
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1X, vue$1.toDisplayString(' ' + $options.countOf(entry)), 1 /* TEXT */))
29616
29628
  : vue$1.createCommentVNode("v-if", true)
29617
- ], 10 /* CLASS, PROPS */, _hoisted_14$2j))
29629
+ ], 10 /* CLASS, PROPS */, _hoisted_14$2k))
29618
29630
  }), 128 /* KEYED_FRAGMENT */))
29619
29631
  ])
29620
29632
  ], 32 /* NEED_HYDRATION */)
@@ -30092,25 +30104,25 @@ const _hoisted_8$4b = {
30092
30104
  class: "cn-conversation-thread__empty",
30093
30105
  "data-testid": "cn-conversation-channel-empty"
30094
30106
  };
30095
- const _hoisted_9$3R = {
30107
+ const _hoisted_9$3S = {
30096
30108
  key: 5,
30097
30109
  class: "cn-conversation-thread__messages"
30098
30110
  };
30099
- const _hoisted_10$3o = ["data-side"];
30111
+ const _hoisted_10$3p = ["data-side"];
30100
30112
  const _hoisted_11$32 = {
30101
30113
  class: "cn-conversation-thread__avatar",
30102
30114
  "aria-hidden": "true"
30103
30115
  };
30104
30116
  const _hoisted_12$2L = { class: "cn-conversation-thread__bubble" };
30105
30117
  const _hoisted_13$2s = { class: "cn-conversation-thread__meta" };
30106
- const _hoisted_14$2i = { class: "hidden-visually" };
30107
- const _hoisted_15$25 = { class: "cn-conversation-thread__author" };
30108
- const _hoisted_16$1U = {
30118
+ const _hoisted_14$2j = { class: "hidden-visually" };
30119
+ const _hoisted_15$26 = { class: "cn-conversation-thread__author" };
30120
+ const _hoisted_16$1W = {
30109
30121
  key: 0,
30110
30122
  class: "cn-conversation-thread__channel",
30111
30123
  "data-testid": "cn-conversation-channel"
30112
30124
  };
30113
- const _hoisted_17$1H = {
30125
+ const _hoisted_17$1I = {
30114
30126
  key: 1,
30115
30127
  class: "cn-conversation-thread__status",
30116
30128
  "data-testid": "cn-conversation-status"
@@ -30132,23 +30144,23 @@ const _hoisted_22$1a = {
30132
30144
  key: 1,
30133
30145
  class: "cn-conversation-thread__message-actions"
30134
30146
  };
30135
- const _hoisted_23$$ = { class: "cn-conversation-thread__reply-head" };
30136
- const _hoisted_24$V = ["for"];
30137
- const _hoisted_25$N = {
30147
+ const _hoisted_23$10 = { class: "cn-conversation-thread__reply-head" };
30148
+ const _hoisted_24$W = ["for"];
30149
+ const _hoisted_25$O = {
30138
30150
  key: 0,
30139
30151
  class: "cn-conversation-thread__reply-hint",
30140
30152
  "data-testid": "cn-conversation-reply-hint"
30141
30153
  };
30142
- const _hoisted_26$H = ["id", "placeholder", "disabled", "aria-describedby"];
30143
- const _hoisted_27$y = ["id"];
30144
- const _hoisted_28$w = { class: "cn-conversation-thread__reply-foot" };
30145
- const _hoisted_29$u = {
30154
+ const _hoisted_26$I = ["id", "placeholder", "disabled", "aria-describedby"];
30155
+ const _hoisted_27$A = ["id"];
30156
+ const _hoisted_28$y = { class: "cn-conversation-thread__reply-foot" };
30157
+ const _hoisted_29$w = {
30146
30158
  key: 0,
30147
30159
  class: "cn-conversation-thread__reply-option",
30148
30160
  "data-testid": "cn-conversation-reply-option"
30149
30161
  };
30150
- const _hoisted_30$t = ["disabled"];
30151
- const _hoisted_31$r = { class: "cn-conversation-thread__reply-actions" };
30162
+ const _hoisted_30$u = ["disabled"];
30163
+ const _hoisted_31$s = { class: "cn-conversation-thread__reply-actions" };
30152
30164
 
30153
30165
  function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30154
30166
  const _component_CnQuickFilterBar = vue$1.resolveComponent("CnQuickFilterBar");
@@ -30175,7 +30187,7 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30175
30187
  _: 1 /* STABLE */
30176
30188
  }, 8 /* PROPS */, ["id"])),
30177
30189
  ($props.subtitle)
30178
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_4$6f, vue$1.toDisplayString($props.subtitle), 1 /* TEXT */))
30190
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_4$6f, vue$1.toDisplayString($props.subtitle), 1 /* TEXT */))
30179
30191
  : vue$1.createCommentVNode("v-if", true)
30180
30192
  ]))
30181
30193
  : vue$1.createCommentVNode("v-if", true),
@@ -30202,7 +30214,7 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30202
30214
  ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_7$4D, vue$1.toDisplayString($props.emptyText), 1 /* TEXT */))
30203
30215
  : ($options.shownRows.length === 0)
30204
30216
  ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_8$4b, vue$1.toDisplayString($props.emptyText), 1 /* TEXT */))
30205
- : (vue$1.openBlock(), vue$1.createElementBlock("ol", _hoisted_9$3R, [
30217
+ : (vue$1.openBlock(), vue$1.createElementBlock("ol", _hoisted_9$3S, [
30206
30218
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.shownRows, (row) => {
30207
30219
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
30208
30220
  key: row.key,
@@ -30213,13 +30225,13 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30213
30225
  vue$1.createElementVNode("span", _hoisted_11$32, vue$1.toDisplayString(row.initials), 1 /* TEXT */),
30214
30226
  vue$1.createElementVNode("div", _hoisted_12$2L, [
30215
30227
  vue$1.createElementVNode("span", _hoisted_13$2s, [
30216
- vue$1.createElementVNode("span", _hoisted_14$2i, vue$1.toDisplayString(row.directionLabel), 1 /* TEXT */),
30217
- vue$1.createElementVNode("span", _hoisted_15$25, vue$1.toDisplayString(row.author), 1 /* TEXT */),
30228
+ vue$1.createElementVNode("span", _hoisted_14$2j, vue$1.toDisplayString(row.directionLabel), 1 /* TEXT */),
30229
+ vue$1.createElementVNode("span", _hoisted_15$26, vue$1.toDisplayString(row.author), 1 /* TEXT */),
30218
30230
  (row.channel)
30219
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1U, vue$1.toDisplayString(row.channel), 1 /* TEXT */))
30231
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1W, vue$1.toDisplayString(row.channel), 1 /* TEXT */))
30220
30232
  : vue$1.createCommentVNode("v-if", true),
30221
30233
  (row.status)
30222
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1H, vue$1.toDisplayString(row.status), 1 /* TEXT */))
30234
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1I, vue$1.toDisplayString(row.status), 1 /* TEXT */))
30223
30235
  : vue$1.createCommentVNode("v-if", true),
30224
30236
  ($props.showDirection)
30225
30237
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$1t, vue$1.toDisplayString(row.directionWord), 1 /* TEXT */))
@@ -30254,7 +30266,7 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30254
30266
  ]))
30255
30267
  : vue$1.createCommentVNode("v-if", true)
30256
30268
  ])
30257
- ], 10 /* CLASS, PROPS */, _hoisted_10$3o))
30269
+ ], 10 /* CLASS, PROPS */, _hoisted_10$3p))
30258
30270
  }), 128 /* KEYED_FRAGMENT */))
30259
30271
  ])),
30260
30272
  ($props.allowReply)
@@ -30265,13 +30277,13 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30265
30277
  onSubmit: _cache[4] || (_cache[4] = vue$1.withModifiers((...args) => ($options.onSend && $options.onSend(...args)), ["prevent"]))
30266
30278
  }, [
30267
30279
  vue$1.renderSlot(_ctx.$slots, "reply-tools", { setDraft: $options.setDraft }),
30268
- vue$1.createElementVNode("div", _hoisted_23$$, [
30280
+ vue$1.createElementVNode("div", _hoisted_23$10, [
30269
30281
  vue$1.createElementVNode("label", {
30270
30282
  for: $data.inputId,
30271
30283
  class: "cn-conversation-thread__reply-label"
30272
- }, vue$1.toDisplayString($props.replyLabel), 9 /* TEXT, PROPS */, _hoisted_24$V),
30284
+ }, vue$1.toDisplayString($props.replyLabel), 9 /* TEXT, PROPS */, _hoisted_24$W),
30273
30285
  ($props.replyHint)
30274
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_25$N, vue$1.toDisplayString($props.replyHint), 1 /* TEXT */))
30286
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_25$O, vue$1.toDisplayString($props.replyHint), 1 /* TEXT */))
30275
30287
  : vue$1.createCommentVNode("v-if", true)
30276
30288
  ]),
30277
30289
  vue$1.withDirectives(vue$1.createElementVNode("textarea", {
@@ -30287,7 +30299,7 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30287
30299
  _cache[1] || (_cache[1] = vue$1.withKeys(vue$1.withModifiers((...args) => ($options.onSend && $options.onSend(...args)), ["ctrl","prevent"]), ["enter"])),
30288
30300
  _cache[2] || (_cache[2] = vue$1.withKeys(vue$1.withModifiers((...args) => ($options.onSend && $options.onSend(...args)), ["meta","prevent"]), ["enter"]))
30289
30301
  ]
30290
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_26$H), [
30302
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_26$I), [
30291
30303
  [vue$1.vModelText, $data.draft]
30292
30304
  ]),
30293
30305
  ($data.errorMessage)
@@ -30297,22 +30309,22 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30297
30309
  class: "cn-conversation-thread__error",
30298
30310
  role: "alert",
30299
30311
  "data-testid": "cn-conversation-error"
30300
- }, vue$1.toDisplayString($data.errorMessage), 9 /* TEXT, PROPS */, _hoisted_27$y))
30312
+ }, vue$1.toDisplayString($data.errorMessage), 9 /* TEXT, PROPS */, _hoisted_27$A))
30301
30313
  : vue$1.createCommentVNode("v-if", true),
30302
- vue$1.createElementVNode("div", _hoisted_28$w, [
30314
+ vue$1.createElementVNode("div", _hoisted_28$y, [
30303
30315
  ($options.optionShown)
30304
- ? (vue$1.openBlock(), vue$1.createElementBlock("label", _hoisted_29$u, [
30316
+ ? (vue$1.openBlock(), vue$1.createElementBlock("label", _hoisted_29$w, [
30305
30317
  vue$1.withDirectives(vue$1.createElementVNode("input", {
30306
30318
  "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.optionOn) = $event)),
30307
30319
  type: "checkbox",
30308
30320
  disabled: $data.sending
30309
- }, null, 8 /* PROPS */, _hoisted_30$t), [
30321
+ }, null, 8 /* PROPS */, _hoisted_30$u), [
30310
30322
  [vue$1.vModelCheckbox, $data.optionOn]
30311
30323
  ]),
30312
30324
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($props.replyOption.label), 1 /* TEXT */)
30313
30325
  ]))
30314
30326
  : vue$1.createCommentVNode("v-if", true),
30315
- vue$1.createElementVNode("div", _hoisted_31$r, [
30327
+ vue$1.createElementVNode("div", _hoisted_31$s, [
30316
30328
  vue$1.renderSlot(_ctx.$slots, "reply-actions", { draft: $data.draft }),
30317
30329
  vue$1.createVNode(_component_NcButton, {
30318
30330
  variant: "primary",
@@ -30336,7 +30348,7 @@ function render$8q(_ctx, _cache, $props, $setup, $data, $options) {
30336
30348
  }
30337
30349
 
30338
30350
  script$8r.render = render$8q;
30339
- script$8r.__scopeId = "data-v-0d461ee4";
30351
+ script$8r.__scopeId = "data-v-e2600a68";
30340
30352
  const __sfc_main$8l = script$8r;
30341
30353
 
30342
30354
  /**
@@ -32625,7 +32637,7 @@ const _hoisted_8$4a = {
32625
32637
  key: 1,
32626
32638
  class: "cn-document-review-list__name"
32627
32639
  };
32628
- const _hoisted_9$3Q = {
32640
+ const _hoisted_9$3R = {
32629
32641
  key: 2,
32630
32642
  class: "cn-document-review-list__meta"
32631
32643
  };
@@ -32683,7 +32695,7 @@ function render$8k(_ctx, _cache, $props, $setup, $data, $options) {
32683
32695
  }, vue$1.toDisplayString(row.name), 9 /* TEXT, PROPS */, _hoisted_7$4C))
32684
32696
  : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_8$4a, vue$1.toDisplayString(row.name), 1 /* TEXT */)),
32685
32697
  (row.meta)
32686
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_9$3Q, vue$1.toDisplayString(row.meta), 1 /* TEXT */))
32698
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_9$3R, vue$1.toDisplayString(row.meta), 1 /* TEXT */))
32687
32699
  : vue$1.createCommentVNode("v-if", true)
32688
32700
  ]),
32689
32701
  vue$1.createVNode(_component_CnStatusBadge, {
@@ -37329,11 +37341,11 @@ const _hoisted_8$49 = {
37329
37341
  key: 3,
37330
37342
  class: "cn-calendar-event-picker__empty"
37331
37343
  };
37332
- const _hoisted_9$3P = {
37344
+ const _hoisted_9$3Q = {
37333
37345
  key: 1,
37334
37346
  class: "cn-calendar-event-picker__step"
37335
37347
  };
37336
- const _hoisted_10$3n = { class: "cn-calendar-event-picker__breadcrumb" };
37348
+ const _hoisted_10$3o = { class: "cn-calendar-event-picker__breadcrumb" };
37337
37349
  const _hoisted_11$31 = { class: "cn-calendar-event-picker__breadcrumb-calendar" };
37338
37350
  const _hoisted_12$2K = {
37339
37351
  key: 1,
@@ -37344,10 +37356,10 @@ const _hoisted_13$2r = {
37344
37356
  key: 2,
37345
37357
  class: "cn-calendar-event-picker__event-list"
37346
37358
  };
37347
- const _hoisted_14$2h = ["onClick", "onKeyup"];
37348
- const _hoisted_15$24 = { class: "cn-calendar-event-picker__event-summary" };
37349
- const _hoisted_16$1T = { class: "cn-calendar-event-picker__event-meta" };
37350
- const _hoisted_17$1G = { class: "cn-calendar-event-picker__event-when" };
37359
+ const _hoisted_14$2i = ["onClick", "onKeyup"];
37360
+ const _hoisted_15$25 = { class: "cn-calendar-event-picker__event-summary" };
37361
+ const _hoisted_16$1V = { class: "cn-calendar-event-picker__event-meta" };
37362
+ const _hoisted_17$1H = { class: "cn-calendar-event-picker__event-when" };
37351
37363
  const _hoisted_18$1s = {
37352
37364
  key: 0,
37353
37365
  class: "cn-calendar-event-picker__event-location"
@@ -37427,8 +37439,8 @@ function render$8h(_ctx, _cache, $props, $setup, $data, $options) {
37427
37439
  : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_8$49, vue$1.toDisplayString($props.noCalendarsLabel), 1 /* TEXT */))
37428
37440
  ]))
37429
37441
  : ($data.step === 'events')
37430
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_9$3P, [
37431
- vue$1.createElementVNode("div", _hoisted_10$3n, [
37442
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_9$3Q, [
37443
+ vue$1.createElementVNode("div", _hoisted_10$3o, [
37432
37444
  vue$1.createVNode(_component_NcButton, {
37433
37445
  variant: "tertiary",
37434
37446
  onClick: $options.backToCalendars
@@ -37467,14 +37479,14 @@ function render$8h(_ctx, _cache, $props, $setup, $data, $options) {
37467
37479
  onClick: $event => ($options.selectEvent(ev)),
37468
37480
  onKeyup: vue$1.withKeys($event => ($options.selectEvent(ev)), ["enter"])
37469
37481
  }, [
37470
- vue$1.createElementVNode("div", _hoisted_15$24, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
37471
- vue$1.createElementVNode("div", _hoisted_16$1T, [
37472
- vue$1.createElementVNode("span", _hoisted_17$1G, vue$1.toDisplayString($options.formatWhen(ev)), 1 /* TEXT */),
37482
+ vue$1.createElementVNode("div", _hoisted_15$25, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
37483
+ vue$1.createElementVNode("div", _hoisted_16$1V, [
37484
+ vue$1.createElementVNode("span", _hoisted_17$1H, vue$1.toDisplayString($options.formatWhen(ev)), 1 /* TEXT */),
37473
37485
  (ev.location)
37474
37486
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$1s, vue$1.toDisplayString(ev.location), 1 /* TEXT */))
37475
37487
  : vue$1.createCommentVNode("v-if", true)
37476
37488
  ])
37477
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_14$2h))
37489
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_14$2i))
37478
37490
  }), 128 /* KEYED_FRAGMENT */))
37479
37491
  ]))
37480
37492
  : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_19$1m, vue$1.toDisplayString($props.noEventsLabel), 1 /* TEXT */))
@@ -37819,6 +37831,15 @@ var script$8h = {
37819
37831
  return summary === '' ? l10n.translate('nextcloud-vue', 'Appointment') : summary
37820
37832
  },
37821
37833
 
37834
+ /**
37835
+ * @param {object} event The event.
37836
+ * @return {string} The day of the month it starts on, '' when it has no readable start.
37837
+ */
37838
+ dayOf(event) {
37839
+ const parsed = new Date(String(event?.dtstart ?? '').trim());
37840
+ return Number.isNaN(parsed.getTime()) ? '' : String(parsed.getDate())
37841
+ },
37842
+
37822
37843
  /**
37823
37844
  * @param {object} event The event.
37824
37845
  * @return {string} When it is: its start and end, or whichever it has.
@@ -37861,18 +37882,24 @@ const _hoisted_3$6Q = {
37861
37882
  key: 2,
37862
37883
  class: "cn-events-card__list"
37863
37884
  };
37864
- const _hoisted_4$69 = { class: "cn-events-card__summary" };
37865
- const _hoisted_5$5s = { class: "cn-events-card__when" };
37866
- const _hoisted_6$52 = {
37885
+ const _hoisted_4$69 = {
37886
+ key: 0,
37887
+ class: "cn-events-card__day",
37888
+ "aria-hidden": "true"
37889
+ };
37890
+ const _hoisted_5$5s = { class: "cn-events-card__text" };
37891
+ const _hoisted_6$52 = { class: "cn-events-card__summary" };
37892
+ const _hoisted_7$4A = { class: "cn-events-card__when" };
37893
+ const _hoisted_8$48 = {
37867
37894
  key: 0,
37868
37895
  class: "cn-events-card__where"
37869
37896
  };
37870
- const _hoisted_7$4A = {
37897
+ const _hoisted_9$3P = {
37871
37898
  key: 3,
37872
37899
  class: "cn-events-card__muted",
37873
37900
  "data-testid": "cn-events-card-empty"
37874
37901
  };
37875
- const _hoisted_8$48 = {
37902
+ const _hoisted_10$3n = {
37876
37903
  key: 4,
37877
37904
  class: "cn-events-card__muted",
37878
37905
  role: "alert",
@@ -37900,17 +37927,22 @@ function render$8g(_ctx, _cache, $props, $setup, $data, $options) {
37900
37927
  class: "cn-events-card__event",
37901
37928
  "data-testid": "cn-events-card-event"
37902
37929
  }, [
37903
- vue$1.createElementVNode("span", _hoisted_4$69, vue$1.toDisplayString($options.summaryOf(event)), 1 /* TEXT */),
37904
- vue$1.createElementVNode("span", _hoisted_5$5s, vue$1.toDisplayString($options.whenOf(event)), 1 /* TEXT */),
37905
- (event.location)
37906
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_6$52, vue$1.toDisplayString(event.location), 1 /* TEXT */))
37907
- : vue$1.createCommentVNode("v-if", true)
37930
+ ($options.dayOf(event))
37931
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_4$69, vue$1.toDisplayString($options.dayOf(event)), 1 /* TEXT */))
37932
+ : vue$1.createCommentVNode("v-if", true),
37933
+ vue$1.createElementVNode("span", _hoisted_5$5s, [
37934
+ vue$1.createElementVNode("span", _hoisted_6$52, vue$1.toDisplayString($options.summaryOf(event)), 1 /* TEXT */),
37935
+ vue$1.createElementVNode("span", _hoisted_7$4A, vue$1.toDisplayString($options.whenOf(event)), 1 /* TEXT */),
37936
+ (event.location)
37937
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_8$48, vue$1.toDisplayString(event.location), 1 /* TEXT */))
37938
+ : vue$1.createCommentVNode("v-if", true)
37939
+ ])
37908
37940
  ]))
37909
37941
  }), 128 /* KEYED_FRAGMENT */))
37910
37942
  ]))
37911
- : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_7$4A, vue$1.toDisplayString($options.emptyText), 1 /* TEXT */)),
37943
+ : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_9$3P, vue$1.toDisplayString($options.emptyText), 1 /* TEXT */)),
37912
37944
  ($data.linkError)
37913
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_8$48, vue$1.toDisplayString($data.linkError), 1 /* TEXT */))
37945
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_10$3n, vue$1.toDisplayString($data.linkError), 1 /* TEXT */))
37914
37946
  : vue$1.createCommentVNode("v-if", true),
37915
37947
  ($data.showPicker)
37916
37948
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnCalendarEventPicker, {
@@ -37934,7 +37966,7 @@ function render$8g(_ctx, _cache, $props, $setup, $data, $options) {
37934
37966
  }
37935
37967
 
37936
37968
  script$8h.render = render$8g;
37937
- script$8h.__scopeId = "data-v-079bed63";
37969
+ script$8h.__scopeId = "data-v-bb3ee7b4";
37938
37970
  const __sfc_main$8b = script$8h;
37939
37971
 
37940
37972
  /**
@@ -42914,13 +42946,13 @@ const _hoisted_11$2$ = {
42914
42946
  };
42915
42947
  const _hoisted_12$2I = { class: "cn-column-filter__sr-only" };
42916
42948
  const _hoisted_13$2q = ["name", "value", "checked", "onChange"];
42917
- const _hoisted_14$2g = {
42949
+ const _hoisted_14$2h = {
42918
42950
  key: 2,
42919
42951
  class: "cn-column-filter__range"
42920
42952
  };
42921
- const _hoisted_15$23 = { class: "cn-column-filter__field" };
42922
- const _hoisted_16$1S = { class: "cn-column-filter__label" };
42923
- const _hoisted_17$1F = ["type"];
42953
+ const _hoisted_15$24 = { class: "cn-column-filter__field" };
42954
+ const _hoisted_16$1U = { class: "cn-column-filter__label" };
42955
+ const _hoisted_17$1G = ["type"];
42924
42956
  const _hoisted_18$1r = { class: "cn-column-filter__field" };
42925
42957
  const _hoisted_19$1l = { class: "cn-column-filter__label" };
42926
42958
  const _hoisted_20$1c = ["type"];
@@ -42929,7 +42961,7 @@ const _hoisted_21$1a = {
42929
42961
  class: "cn-column-filter__field"
42930
42962
  };
42931
42963
  const _hoisted_22$19 = { class: "cn-column-filter__label" };
42932
- const _hoisted_23$_ = { class: "cn-column-filter__actions" };
42964
+ const _hoisted_23$$ = { class: "cn-column-filter__actions" };
42933
42965
 
42934
42966
  function render$87(_ctx, _cache, $props, $setup, $data, $options) {
42935
42967
  return (vue$1.openBlock(), vue$1.createBlock(vue$1.Teleport, {
@@ -43016,15 +43048,15 @@ function render$87(_ctx, _cache, $props, $setup, $data, $options) {
43016
43048
  }), 128 /* KEYED_FRAGMENT */))
43017
43049
  ]))
43018
43050
  : ($props.def.kind === 'number' || $props.def.kind === 'date')
43019
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$2g, [
43020
- vue$1.createElementVNode("label", _hoisted_15$23, [
43021
- vue$1.createElementVNode("span", _hoisted_16$1S, vue$1.toDisplayString($options.fromLabel), 1 /* TEXT */),
43051
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$2h, [
43052
+ vue$1.createElementVNode("label", _hoisted_15$24, [
43053
+ vue$1.createElementVNode("span", _hoisted_16$1U, vue$1.toDisplayString($options.fromLabel), 1 /* TEXT */),
43022
43054
  vue$1.withDirectives(vue$1.createElementVNode("input", {
43023
43055
  "onUpdate:modelValue": _cache[2] || (_cache[2] = $event => (($data.draft.from) = $event)),
43024
43056
  class: "cn-column-filter__input",
43025
43057
  type: $props.def.kind === 'date' ? 'date' : 'number',
43026
43058
  "data-testid": "cn-column-filter-from"
43027
- }, null, 8 /* PROPS */, _hoisted_17$1F), [
43059
+ }, null, 8 /* PROPS */, _hoisted_17$1G), [
43028
43060
  [vue$1.vModelDynamic, $data.draft.from]
43029
43061
  ])
43030
43062
  ]),
@@ -43051,7 +43083,7 @@ function render$87(_ctx, _cache, $props, $setup, $data, $options) {
43051
43083
  [vue$1.vModelText, $data.draft.value]
43052
43084
  ])
43053
43085
  ])),
43054
- vue$1.createElementVNode("div", _hoisted_23$_, [
43086
+ vue$1.createElementVNode("div", _hoisted_23$$, [
43055
43087
  vue$1.createElementVNode("button", {
43056
43088
  type: "button",
43057
43089
  class: "cn-column-filter__button",
@@ -46355,13 +46387,13 @@ const _hoisted_12$2H = {
46355
46387
  "data-testid": "cn-cell-ref-labels"
46356
46388
  };
46357
46389
  const _hoisted_13$2p = { key: 0 };
46358
- const _hoisted_14$2f = ["href", "target", "rel"];
46359
- const _hoisted_15$22 = ["title"];
46360
- const _hoisted_16$1R = {
46390
+ const _hoisted_14$2g = ["href", "target", "rel"];
46391
+ const _hoisted_15$23 = ["title"];
46392
+ const _hoisted_16$1T = {
46361
46393
  class: "cn-cell-renderer__avatar",
46362
46394
  "data-testid": "cn-cell-avatar-resolved"
46363
46395
  };
46364
- const _hoisted_17$1E = { class: "cn-cell-renderer__avatar-text" };
46396
+ const _hoisted_17$1F = { class: "cn-cell-renderer__avatar-text" };
46365
46397
  const _hoisted_18$1q = ["title"];
46366
46398
  const _hoisted_19$1k = {
46367
46399
  key: 0,
@@ -46381,30 +46413,30 @@ const _hoisted_22$18 = {
46381
46413
  class: "cn-cell-renderer__avatar-picture",
46382
46414
  "aria-hidden": "true"
46383
46415
  };
46384
- const _hoisted_23$Z = { class: "cn-cell-renderer__avatar-text" };
46385
- const _hoisted_24$U = ["title"];
46386
- const _hoisted_25$M = {
46416
+ const _hoisted_23$_ = { class: "cn-cell-renderer__avatar-text" };
46417
+ const _hoisted_24$V = ["title"];
46418
+ const _hoisted_25$N = {
46387
46419
  key: 0,
46388
46420
  class: "cn-cell-renderer__avatar-secondary",
46389
46421
  "data-testid": "cn-cell-secondary"
46390
46422
  };
46391
- const _hoisted_26$G = {
46423
+ const _hoisted_26$H = {
46392
46424
  key: 1,
46393
46425
  class: "cn-cell-renderer__dash"
46394
46426
  };
46395
- const _hoisted_27$x = ["datetime", "title"];
46396
- const _hoisted_28$v = {
46427
+ const _hoisted_27$z = ["datetime", "title"];
46428
+ const _hoisted_28$x = {
46397
46429
  key: 1,
46398
46430
  class: "cn-cell-renderer__dash"
46399
46431
  };
46400
- const _hoisted_29$t = ["datetime", "title"];
46401
- const _hoisted_30$s = {
46432
+ const _hoisted_29$v = ["datetime", "title"];
46433
+ const _hoisted_30$t = {
46402
46434
  key: 1,
46403
46435
  class: "cn-cell-renderer__date cn-cell-renderer__due--empty",
46404
46436
  "data-testid": "cn-cell-renderer-due"
46405
46437
  };
46406
- const _hoisted_31$q = ["datetime", "title"];
46407
- const _hoisted_32$q = { class: "cn-cell-renderer__date-tile" };
46438
+ const _hoisted_31$r = ["datetime", "title"];
46439
+ const _hoisted_32$r = { class: "cn-cell-renderer__date-tile" };
46408
46440
  const _hoisted_33$o = { class: "cn-cell-renderer__date-day" };
46409
46441
  const _hoisted_34$o = { class: "cn-cell-renderer__date-month" };
46410
46442
  const _hoisted_35$m = { class: "cn-cell-renderer__date-lines" };
@@ -46431,7 +46463,7 @@ const _hoisted_43$b = {
46431
46463
  class: "cn-cell-renderer__progress-bar",
46432
46464
  "aria-hidden": "true"
46433
46465
  };
46434
- const _hoisted_44$b = {
46466
+ const _hoisted_44$a = {
46435
46467
  key: 16,
46436
46468
  class: "cn-cell-renderer__icon-label",
46437
46469
  "data-testid": "cn-cell-icon-label"
@@ -46648,11 +46680,11 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46648
46680
  target: $options.linkTarget,
46649
46681
  rel: $options.linkTarget ? 'noopener' : null,
46650
46682
  class: "cn-cell-renderer__link"
46651
- }, vue$1.toDisplayString($options.labelledValue), 9 /* TEXT, PROPS */, _hoisted_14$2f))
46683
+ }, vue$1.toDisplayString($options.labelledValue), 9 /* TEXT, PROPS */, _hoisted_14$2g))
46652
46684
  : (vue$1.openBlock(), vue$1.createElementBlock("span", {
46653
46685
  key: 2,
46654
46686
  title: $options.rawTitle
46655
- }, vue$1.toDisplayString($options.labelledValue), 9 /* TEXT, PROPS */, _hoisted_15$22))
46687
+ }, vue$1.toDisplayString($options.labelledValue), 9 /* TEXT, PROPS */, _hoisted_15$23))
46656
46688
  ], 64 /* STABLE_FRAGMENT */))
46657
46689
  : ($props.widget === 'avatar' && $options.avatarResolve)
46658
46690
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 9 }, [
@@ -46665,13 +46697,13 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46665
46697
  labelField: $options.avatarResolve.labelField || 'name'
46666
46698
  }, {
46667
46699
  default: vue$1.withCtx(({ label, resolved }) => [
46668
- vue$1.createElementVNode("span", _hoisted_16$1R, [
46700
+ vue$1.createElementVNode("span", _hoisted_16$1T, [
46669
46701
  vue$1.createElementVNode("span", {
46670
46702
  class: "cn-cell-renderer__avatar-initials",
46671
46703
  style: vue$1.normalizeStyle({ width: $options.avatarSize + 'px', height: $options.avatarSize + 'px' }),
46672
46704
  "aria-hidden": "true"
46673
46705
  }, vue$1.toDisplayString(resolved ? $options.initialsOf(label) : ''), 5 /* TEXT, STYLE */),
46674
- vue$1.createElementVNode("span", _hoisted_17$1E, [
46706
+ vue$1.createElementVNode("span", _hoisted_17$1F, [
46675
46707
  vue$1.createElementVNode("span", {
46676
46708
  class: "cn-cell-renderer__avatar-name",
46677
46709
  title: label
@@ -46706,17 +46738,17 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46706
46738
  style: vue$1.normalizeStyle({ width: $options.avatarSize + 'px', height: $options.avatarSize + 'px' }),
46707
46739
  "aria-hidden": "true"
46708
46740
  }, vue$1.toDisplayString($options.avatarInitials), 7 /* TEXT, CLASS, STYLE */)),
46709
- vue$1.createElementVNode("span", _hoisted_23$Z, [
46741
+ vue$1.createElementVNode("span", _hoisted_23$_, [
46710
46742
  vue$1.createElementVNode("span", {
46711
46743
  class: "cn-cell-renderer__avatar-name",
46712
46744
  title: $options.avatarName || $options.avatarUserId
46713
- }, vue$1.toDisplayString($options.avatarName || $options.avatarUserId), 9 /* TEXT, PROPS */, _hoisted_24$U),
46745
+ }, vue$1.toDisplayString($options.avatarName || $options.avatarUserId), 9 /* TEXT, PROPS */, _hoisted_24$V),
46714
46746
  ($props.secondary)
46715
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_25$M, vue$1.toDisplayString($props.secondary), 1 /* TEXT */))
46747
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_25$N, vue$1.toDisplayString($props.secondary), 1 /* TEXT */))
46716
46748
  : vue$1.createCommentVNode("v-if", true)
46717
46749
  ])
46718
46750
  ]))
46719
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_26$G, "—"))
46751
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_26$H, "—"))
46720
46752
  ], 64 /* STABLE_FRAGMENT */))
46721
46753
  : ($props.widget === 'age')
46722
46754
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 11 }, [
@@ -46726,8 +46758,8 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46726
46758
  class: vue$1.normalizeClass(["cn-cell-renderer__age", $options.ageVariant ? 'cn-cell-renderer__age--' + $options.ageVariant : null]),
46727
46759
  datetime: $options.dateTimestamp.toISOString(),
46728
46760
  title: $options.absoluteDateLabel
46729
- }, vue$1.toDisplayString($options.ageLabel), 11 /* TEXT, CLASS, PROPS */, _hoisted_27$x))
46730
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$v, "—"))
46761
+ }, vue$1.toDisplayString($options.ageLabel), 11 /* TEXT, CLASS, PROPS */, _hoisted_27$z))
46762
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$x, "—"))
46731
46763
  ], 64 /* STABLE_FRAGMENT */))
46732
46764
  : ($props.widget === 'date')
46733
46765
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 12 }, [
@@ -46740,8 +46772,8 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46740
46772
  datetime: $options.dateTimestamp.toISOString(),
46741
46773
  title: $options.absoluteDateLabel,
46742
46774
  "data-testid": "cn-cell-renderer-due"
46743
- }, vue$1.toDisplayString($options.dueResult.text), 11 /* TEXT, CLASS, PROPS */, _hoisted_29$t))
46744
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$s, vue$1.toDisplayString($options.dueResult.text), 1 /* TEXT */))
46775
+ }, vue$1.toDisplayString($options.dueResult.text), 11 /* TEXT, CLASS, PROPS */, _hoisted_29$v))
46776
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$t, vue$1.toDisplayString($options.dueResult.text), 1 /* TEXT */))
46745
46777
  ], 64 /* STABLE_FRAGMENT */))
46746
46778
  : ($options.dateTimestamp && $options.dateBlock)
46747
46779
  ? (vue$1.openBlock(), vue$1.createElementBlock("time", {
@@ -46751,7 +46783,7 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46751
46783
  title: $options.absoluteDateLabel,
46752
46784
  "data-testid": "cn-cell-date-block"
46753
46785
  }, [
46754
- vue$1.createElementVNode("span", _hoisted_32$q, [
46786
+ vue$1.createElementVNode("span", _hoisted_32$r, [
46755
46787
  vue$1.createElementVNode("strong", _hoisted_33$o, vue$1.toDisplayString($options.dateBlock.day), 1 /* TEXT */),
46756
46788
  vue$1.createElementVNode("span", _hoisted_34$o, vue$1.toDisplayString($options.dateBlock.month), 1 /* TEXT */)
46757
46789
  ]),
@@ -46761,7 +46793,7 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46761
46793
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_37$j, vue$1.toDisplayString($options.dateBlock.time), 1 /* TEXT */))
46762
46794
  : vue$1.createCommentVNode("v-if", true)
46763
46795
  ])
46764
- ], 8 /* PROPS */, _hoisted_31$q))
46796
+ ], 8 /* PROPS */, _hoisted_31$r))
46765
46797
  : ($options.dateTimestamp)
46766
46798
  ? (vue$1.openBlock(), vue$1.createElementBlock("time", {
46767
46799
  key: 2,
@@ -46847,7 +46879,7 @@ function render$84(_ctx, _cache, $props, $setup, $data, $options) {
46847
46879
  }, 8 /* PROPS */, ["modelValue", "disabled", "onUpdate:modelValue"])
46848
46880
  ], 32 /* NEED_HYDRATION */))
46849
46881
  : ($props.widget === 'iconLabel')
46850
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_44$b, [
46882
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_44$a, [
46851
46883
  (typeof $options.iconLabelIcon === 'string' && $options.iconLabelIcon)
46852
46884
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnIcon, {
46853
46885
  key: 0,
@@ -49473,15 +49505,15 @@ const _hoisted_12$2G = {
49473
49505
  scope: "col"
49474
49506
  };
49475
49507
  const _hoisted_13$2o = { class: "hidden-visually" };
49476
- const _hoisted_14$2e = { key: 1 };
49477
- const _hoisted_15$21 = ["aria-sort", "data-filtered", "title", "onClick", "onKeydown"];
49478
- const _hoisted_16$1Q = {
49508
+ const _hoisted_14$2f = { key: 1 };
49509
+ const _hoisted_15$22 = ["aria-sort", "data-filtered", "title", "onClick", "onKeydown"];
49510
+ const _hoisted_16$1S = {
49479
49511
  key: 0,
49480
49512
  type: "button",
49481
49513
  class: "cn-table-header__sort",
49482
49514
  "data-testid": "cn-table-header-sort"
49483
49515
  };
49484
- const _hoisted_17$1D = ["data-sort-direction"];
49516
+ const _hoisted_17$1E = ["data-sort-direction"];
49485
49517
  const _hoisted_18$1p = {
49486
49518
  key: 1,
49487
49519
  class: "cn-table-header__chevron cn-table-header__chevron--idle"
@@ -49500,31 +49532,31 @@ const _hoisted_22$17 = {
49500
49532
  key: 2,
49501
49533
  class: "cn-table-col--actions"
49502
49534
  };
49503
- const _hoisted_23$Y = {
49535
+ const _hoisted_23$Z = {
49504
49536
  key: 0,
49505
49537
  class: "hidden-visually"
49506
49538
  };
49507
- const _hoisted_24$T = {
49539
+ const _hoisted_24$U = {
49508
49540
  key: 0,
49509
49541
  class: "cn-table-empty",
49510
49542
  "data-testid": "cn-object-list-empty"
49511
49543
  };
49512
- const _hoisted_25$L = ["colspan"];
49513
- const _hoisted_26$F = {
49544
+ const _hoisted_25$M = ["colspan"];
49545
+ const _hoisted_26$G = {
49514
49546
  key: 0,
49515
49547
  class: "cn-table-empty__lens-reason",
49516
49548
  "data-testid": "cn-data-table-lens-reason"
49517
49549
  };
49518
- const _hoisted_27$w = ["draggable", "data-testid-row-id", "onDragstart", "onDragover", "onDragleave", "onDrop", "onClick", "onAuxclick", "onContextmenu"];
49519
- const _hoisted_28$u = ["href", "aria-label", "onClick"];
49520
- const _hoisted_29$s = {
49550
+ const _hoisted_27$y = ["draggable", "data-testid-row-id", "onDragstart", "onDragover", "onDragleave", "onDrop", "onClick", "onAuxclick", "onContextmenu"];
49551
+ const _hoisted_28$w = ["href", "aria-label", "onClick"];
49552
+ const _hoisted_29$u = {
49521
49553
  key: 3,
49522
49554
  class: "cn-table-row-indicators",
49523
49555
  "data-testid": "cn-row-indicators"
49524
49556
  };
49525
- const _hoisted_30$r = ["title", "data-testid"];
49526
- const _hoisted_31$p = { class: "hidden-visually" };
49527
- const _hoisted_32$p = {
49557
+ const _hoisted_30$s = ["title", "data-testid"];
49558
+ const _hoisted_31$q = { class: "hidden-visually" };
49559
+ const _hoisted_32$q = {
49528
49560
  key: 4,
49529
49561
  class: "cn-table-cell__overline",
49530
49562
  "data-testid": "cn-cell-overline"
@@ -49670,7 +49702,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49670
49702
  : vue$1.createCommentVNode("v-if", true)
49671
49703
  ])
49672
49704
  ]))
49673
- : (vue$1.openBlock(), vue$1.createElementBlock("thead", _hoisted_14$2e, [
49705
+ : (vue$1.openBlock(), vue$1.createElementBlock("thead", _hoisted_14$2f, [
49674
49706
  vue$1.createElementVNode("tr", null, [
49675
49707
  ($props.selectable)
49676
49708
  ? (vue$1.openBlock(), vue$1.createElementBlock("th", {
@@ -49711,7 +49743,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49711
49743
  onKeydown: vue$1.withKeys($event => (col.sortable ? $options.onHeaderKeydown(col.key, $event) : null), ["enter"])
49712
49744
  }, [
49713
49745
  (col.sortable)
49714
- ? (vue$1.openBlock(), vue$1.createElementBlock("button", _hoisted_16$1Q, [
49746
+ ? (vue$1.openBlock(), vue$1.createElementBlock("button", _hoisted_16$1S, [
49715
49747
  vue$1.createElementVNode("span", {
49716
49748
  class: vue$1.normalizeClass(col.description ? 'cn-table-header--described' : '')
49717
49749
  }, vue$1.toDisplayString($options.translateLabel(col.label)), 3 /* TEXT, CLASS */),
@@ -49730,7 +49762,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49730
49762
  key: 1,
49731
49763
  size: 14
49732
49764
  }))
49733
- ], 8 /* PROPS */, _hoisted_17$1D))
49765
+ ], 8 /* PROPS */, _hoisted_17$1E))
49734
49766
  : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$1p, [
49735
49767
  vue$1.createVNode(_component_ChevronDown, { size: 14 })
49736
49768
  ])),
@@ -49762,12 +49794,12 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49762
49794
  : vue$1.createCommentVNode("v-if", true)
49763
49795
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_20$1a))
49764
49796
  : vue$1.createCommentVNode("v-if", true)
49765
- ], 46 /* CLASS, STYLE, PROPS, NEED_HYDRATION */, _hoisted_15$21))
49797
+ ], 46 /* CLASS, STYLE, PROPS, NEED_HYDRATION */, _hoisted_15$22))
49766
49798
  }), 128 /* KEYED_FRAGMENT */)),
49767
49799
  (_ctx.$slots['row-actions'])
49768
49800
  ? (vue$1.openBlock(), vue$1.createElementBlock("th", _hoisted_22$17, [
49769
49801
  ($options.isBoardLook)
49770
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$Y, vue$1.toDisplayString($options.actionsColumnLabel), 1 /* TEXT */))
49802
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$Z, vue$1.toDisplayString($options.actionsColumnLabel), 1 /* TEXT */))
49771
49803
  : vue$1.createCommentVNode("v-if", true),
49772
49804
  vue$1.renderSlot(_ctx.$slots, "actions-header")
49773
49805
  ]))
@@ -49776,16 +49808,16 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49776
49808
  ])),
49777
49809
  vue$1.createElementVNode("tbody", null, [
49778
49810
  ($options.effectiveRows.length === 0)
49779
- ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_24$T, [
49811
+ ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_24$U, [
49780
49812
  vue$1.createElementVNode("td", { colspan: $options.totalColumns }, [
49781
49813
  vue$1.renderSlot(_ctx.$slots, "empty", {}, () => [
49782
49814
  ($options.lensReasonText)
49783
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_26$F, vue$1.toDisplayString($options.lensReasonText), 1 /* TEXT */))
49815
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_26$G, vue$1.toDisplayString($options.lensReasonText), 1 /* TEXT */))
49784
49816
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
49785
49817
  vue$1.createTextVNode(vue$1.toDisplayString($options.translateLabel($props.emptyText)), 1 /* TEXT */)
49786
49818
  ], 64 /* STABLE_FRAGMENT */))
49787
49819
  ])
49788
- ], 8 /* PROPS */, _hoisted_25$L)
49820
+ ], 8 /* PROPS */, _hoisted_25$M)
49789
49821
  ]))
49790
49822
  : (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, vue$1.renderList($options.effectiveRows, (row, rowIndex) => {
49791
49823
  return (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, {
@@ -49857,7 +49889,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49857
49889
  "data-testid": "cn-row-link",
49858
49890
  onMousemove: _cache[4] || (_cache[4] = (...args) => ($options.linkTitleAtPointer && $options.linkTitleAtPointer(...args))),
49859
49891
  onClick: $event => ($options.onRowLinkClick(row, $event))
49860
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_28$u))
49892
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_28$w))
49861
49893
  : vue$1.createCommentVNode("v-if", true),
49862
49894
  (colIndex === $options.titleColumnIndex && $options.isUnreadRow(row))
49863
49895
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnUnreadMarker, { key: 1 }))
@@ -49870,7 +49902,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49870
49902
  }, null, 8 /* PROPS */, ["object"]))
49871
49903
  : vue$1.createCommentVNode("v-if", true),
49872
49904
  (colIndex === $options.titleColumnIndex && $options.indicatorsFor(row).shown.length > 0)
49873
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$s, [
49905
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$u, [
49874
49906
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.indicatorsFor(row).shown, (indicator) => {
49875
49907
  return (vue$1.openBlock(), vue$1.createElementBlock("span", {
49876
49908
  key: indicator.id || indicator.field,
@@ -49882,13 +49914,13 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49882
49914
  name: indicator.icon || 'InformationOutline',
49883
49915
  size: 16
49884
49916
  }, null, 8 /* PROPS */, ["name"]),
49885
- vue$1.createElementVNode("span", _hoisted_31$p, vue$1.toDisplayString($options.translateLabel(indicator.text)), 1 /* TEXT */)
49886
- ], 8 /* PROPS */, _hoisted_30$r))
49917
+ vue$1.createElementVNode("span", _hoisted_31$q, vue$1.toDisplayString($options.translateLabel(indicator.text)), 1 /* TEXT */)
49918
+ ], 8 /* PROPS */, _hoisted_30$s))
49887
49919
  }), 128 /* KEYED_FRAGMENT */))
49888
49920
  ]))
49889
49921
  : vue$1.createCommentVNode("v-if", true),
49890
49922
  ($options.overlineValue(row, col))
49891
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_32$p, vue$1.toDisplayString($options.overlineValue(row, col)), 1 /* TEXT */))
49923
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_32$q, vue$1.toDisplayString($options.overlineValue(row, col)), 1 /* TEXT */))
49892
49924
  : vue$1.createCommentVNode("v-if", true),
49893
49925
  vue$1.renderSlot(_ctx.$slots, 'column-' + col.key, {
49894
49926
  row: row,
@@ -49940,7 +49972,7 @@ function render$81(_ctx, _cache, $props, $setup, $data, $options) {
49940
49972
  vue$1.renderSlot(_ctx.$slots, "row-actions", { row: row })
49941
49973
  ], 34 /* CLASS, NEED_HYDRATION */))
49942
49974
  : vue$1.createCommentVNode("v-if", true)
49943
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_27$w),
49975
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_27$y),
49944
49976
  (_ctx.$slots['row-detail'])
49945
49977
  ? (vue$1.openBlock(), vue$1.createElementBlock("tr", {
49946
49978
  key: 0,
@@ -85594,10 +85626,10 @@ const _hoisted_13$2m = {
85594
85626
  key: 0,
85595
85627
  class: "cn-icon-browser-panel__grid"
85596
85628
  };
85597
- const _hoisted_14$2d = ["title", "aria-label", "tabindex", "onClick", "onKeydown"];
85598
- const _hoisted_15$20 = ["viewBox"];
85599
- const _hoisted_16$1P = ["d"];
85600
- const _hoisted_17$1C = {
85629
+ const _hoisted_14$2e = ["title", "aria-label", "tabindex", "onClick", "onKeydown"];
85630
+ const _hoisted_15$21 = ["viewBox"];
85631
+ const _hoisted_16$1R = ["d"];
85632
+ const _hoisted_17$1D = {
85601
85633
  key: 2,
85602
85634
  class: "cn-icon-browser-panel__cell-label"
85603
85635
  };
@@ -85616,28 +85648,28 @@ const _hoisted_22$16 = {
85616
85648
  class: "cn-icon-browser-panel__error",
85617
85649
  role: "alert"
85618
85650
  };
85619
- const _hoisted_23$X = ["placeholder", "aria-label"];
85620
- const _hoisted_24$S = {
85651
+ const _hoisted_23$Y = ["placeholder", "aria-label"];
85652
+ const _hoisted_24$T = {
85621
85653
  key: 3,
85622
85654
  class: "cn-icon-browser-panel__grid"
85623
85655
  };
85624
- const _hoisted_25$K = ["title", "aria-label", "onClick"];
85625
- const _hoisted_26$E = ["src", "alt"];
85626
- const _hoisted_27$v = {
85656
+ const _hoisted_25$L = ["title", "aria-label", "onClick"];
85657
+ const _hoisted_26$F = ["src", "alt"];
85658
+ const _hoisted_27$x = {
85627
85659
  key: 0,
85628
85660
  class: "cn-icon-browser-panel__cell-label"
85629
85661
  };
85630
- const _hoisted_28$t = {
85662
+ const _hoisted_28$v = {
85631
85663
  key: 4,
85632
85664
  class: "cn-icon-browser-panel__hint"
85633
85665
  };
85634
- const _hoisted_29$r = ["id", "aria-labelledby"];
85635
- const _hoisted_30$q = ["value", "placeholder", "aria-label"];
85636
- const _hoisted_31$o = {
85666
+ const _hoisted_29$t = ["id", "aria-labelledby"];
85667
+ const _hoisted_30$r = ["value", "placeholder", "aria-label"];
85668
+ const _hoisted_31$p = {
85637
85669
  key: 1,
85638
85670
  class: "cn-icon-browser-panel__grid"
85639
85671
  };
85640
- const _hoisted_32$o = ["title", "aria-label", "onClick"];
85672
+ const _hoisted_32$p = ["title", "aria-label", "onClick"];
85641
85673
  const _hoisted_33$m = ["src", "alt"];
85642
85674
  const _hoisted_34$m = {
85643
85675
  key: 0,
@@ -85769,12 +85801,12 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85769
85801
  }, [
85770
85802
  vue$1.createElementVNode("path", {
85771
85803
  d: icon.path
85772
- }, null, 8 /* PROPS */, _hoisted_16$1P)
85773
- ], 8 /* PROPS */, _hoisted_15$20)),
85804
+ }, null, 8 /* PROPS */, _hoisted_16$1R)
85805
+ ], 8 /* PROPS */, _hoisted_15$21)),
85774
85806
  ($props.showLabels)
85775
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1C, vue$1.toDisplayString(icon.label), 1 /* TEXT */))
85807
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1D, vue$1.toDisplayString(icon.label), 1 /* TEXT */))
85776
85808
  : vue$1.createCommentVNode("v-if", true)
85777
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_14$2d))
85809
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_14$2e))
85778
85810
  }), 128 /* KEYED_FRAGMENT */))
85779
85811
  ]))
85780
85812
  : vue$1.renderSlot(_ctx.$slots, "empty", {}, () => [
@@ -85812,12 +85844,12 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85812
85844
  class: "cn-icon-browser-panel__search",
85813
85845
  placeholder: $options.t('nextcloud-vue', 'Search icons…'),
85814
85846
  "aria-label": $options.t('nextcloud-vue', 'Search icons')
85815
- }, null, 8 /* PROPS */, _hoisted_23$X)), [
85847
+ }, null, 8 /* PROPS */, _hoisted_23$Y)), [
85816
85848
  [vue$1.vModelText, $data.customQuery]
85817
85849
  ])
85818
85850
  : vue$1.createCommentVNode("v-if", true),
85819
85851
  ($options.customVisibleIcons.length > 0)
85820
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$S, [
85852
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$T, [
85821
85853
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.customVisibleIcons, (icon) => {
85822
85854
  return (vue$1.openBlock(), vue$1.createElementBlock("button", {
85823
85855
  key: icon.id || icon.url,
@@ -85832,16 +85864,16 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85832
85864
  src: icon.url,
85833
85865
  alt: icon.label,
85834
85866
  loading: "lazy"
85835
- }, null, 8 /* PROPS */, _hoisted_26$E),
85867
+ }, null, 8 /* PROPS */, _hoisted_26$F),
85836
85868
  ($props.showLabels)
85837
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$v, vue$1.toDisplayString(icon.label), 1 /* TEXT */))
85869
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$x, vue$1.toDisplayString(icon.label), 1 /* TEXT */))
85838
85870
  : vue$1.createCommentVNode("v-if", true)
85839
- ], 10 /* CLASS, PROPS */, _hoisted_25$K))
85871
+ ], 10 /* CLASS, PROPS */, _hoisted_25$L))
85840
85872
  }), 128 /* KEYED_FRAGMENT */))
85841
85873
  ]))
85842
85874
  : vue$1.createCommentVNode("v-if", true),
85843
85875
  ($options.customTruncated)
85844
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_28$t, vue$1.toDisplayString($options.t('nextcloud-vue', 'Showing {shown} of {total} — refine your search to narrow results.', { shown: $options.customVisibleIcons.length, total: $options.customMatches.length })), 1 /* TEXT */))
85876
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_28$v, vue$1.toDisplayString($options.t('nextcloud-vue', 'Showing {shown} of {total} — refine your search to narrow results.', { shown: $options.customVisibleIcons.length, total: $options.customMatches.length })), 1 /* TEXT */))
85845
85877
  : vue$1.createCommentVNode("v-if", true)
85846
85878
  ], 64 /* STABLE_FRAGMENT */))
85847
85879
  : vue$1.createCommentVNode("v-if", true)
@@ -85866,10 +85898,10 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85866
85898
  placeholder: $options.t('nextcloud-vue', 'Image URL (https://… or /path)'),
85867
85899
  "aria-label": $options.t('nextcloud-vue', 'Image URL'),
85868
85900
  onInput: _cache[3] || (_cache[3] = (...args) => ($options.onUrlInput && $options.onUrlInput(...args)))
85869
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_30$q))
85901
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_30$r))
85870
85902
  : vue$1.createCommentVNode("v-if", true),
85871
85903
  ($options.unnamedIcons.length > 0)
85872
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$o, [
85904
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$p, [
85873
85905
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.unnamedIcons, (icon) => {
85874
85906
  return (vue$1.openBlock(), vue$1.createElementBlock("button", {
85875
85907
  key: icon.id || icon.url,
@@ -85888,7 +85920,7 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85888
85920
  ($props.showLabels)
85889
85921
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_34$m, vue$1.toDisplayString(icon.label), 1 /* TEXT */))
85890
85922
  : vue$1.createCommentVNode("v-if", true)
85891
- ], 10 /* CLASS, PROPS */, _hoisted_32$o))
85923
+ ], 10 /* CLASS, PROPS */, _hoisted_32$p))
85892
85924
  }), 128 /* KEYED_FRAGMENT */))
85893
85925
  ]))
85894
85926
  : vue$1.createCommentVNode("v-if", true),
@@ -85912,7 +85944,7 @@ function render$7S(_ctx, _cache, $props, $setup, $data, $options) {
85912
85944
  ($data.uploadError)
85913
85945
  ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_40$d, vue$1.toDisplayString($data.uploadError), 1 /* TEXT */))
85914
85946
  : vue$1.createCommentVNode("v-if", true)
85915
- ], 8 /* PROPS */, _hoisted_29$r)), [
85947
+ ], 8 /* PROPS */, _hoisted_29$t)), [
85916
85948
  [vue$1.vShow, $data.mode === 'custom']
85917
85949
  ])
85918
85950
  : vue$1.createCommentVNode("v-if", true),
@@ -95787,19 +95819,19 @@ const _hoisted_10$3f = {
95787
95819
  const _hoisted_11$2V = { class: "cn-activity-card__headline-actor" };
95788
95820
  const _hoisted_12$2D = { class: "cn-activity-card__headline-subject" };
95789
95821
  const _hoisted_13$2l = { class: "cn-activity-card__headline-time" };
95790
- const _hoisted_14$2c = {
95822
+ const _hoisted_14$2d = {
95791
95823
  key: 0,
95792
95824
  class: "cn-activity-card__empty"
95793
95825
  };
95794
- const _hoisted_15$1$ = {
95826
+ const _hoisted_15$20 = {
95795
95827
  key: 1,
95796
95828
  class: "cn-activity-card__empty"
95797
95829
  };
95798
- const _hoisted_16$1O = {
95830
+ const _hoisted_16$1Q = {
95799
95831
  key: 2,
95800
95832
  class: "cn-activity-card__timeline"
95801
95833
  };
95802
- const _hoisted_17$1B = { class: "cn-activity-card__day-header" };
95834
+ const _hoisted_17$1C = { class: "cn-activity-card__day-header" };
95803
95835
  const _hoisted_18$1n = { class: "cn-activity-card__day-count" };
95804
95836
  const _hoisted_19$1h = { class: "cn-activity-card__list" };
95805
95837
  const _hoisted_20$18 = { class: "cn-activity-card__row-main" };
@@ -95861,16 +95893,16 @@ function render$7I(_ctx, _cache, $props, $setup, $data, $options) {
95861
95893
  ], 64 /* STABLE_FRAGMENT */))
95862
95894
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 3 }, [
95863
95895
  ($data.degraded)
95864
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$2c, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
95896
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$2d, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
95865
95897
  : ($data.entries.length === 0)
95866
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$1$, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
95867
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1O, [
95898
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$20, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
95899
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1Q, [
95868
95900
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.groupedByDay, (day) => {
95869
95901
  return (vue$1.openBlock(), vue$1.createElementBlock("section", {
95870
95902
  key: day.key,
95871
95903
  class: "cn-activity-card__day"
95872
95904
  }, [
95873
- vue$1.createElementVNode("header", _hoisted_17$1B, [
95905
+ vue$1.createElementVNode("header", _hoisted_17$1C, [
95874
95906
  vue$1.createVNode(_component_CalendarOutline, { size: 14 }),
95875
95907
  vue$1.createElementVNode("span", null, vue$1.toDisplayString(day.label), 1 /* TEXT */),
95876
95908
  vue$1.createElementVNode("span", _hoisted_18$1n, vue$1.toDisplayString(day.rows.length), 1 /* TEXT */)
@@ -96777,10 +96809,10 @@ const _hoisted_12$2C = {
96777
96809
  class: "cn-activity-tab__filter"
96778
96810
  };
96779
96811
  const _hoisted_13$2k = { class: "cn-activity-tab__filter-label" };
96780
- const _hoisted_14$2b = { value: "" };
96781
- const _hoisted_15$1_ = ["value"];
96782
- const _hoisted_16$1N = { class: "cn-activity-tab__filter" };
96783
- const _hoisted_17$1A = { class: "cn-activity-tab__filter-label" };
96812
+ const _hoisted_14$2c = { value: "" };
96813
+ const _hoisted_15$1$ = ["value"];
96814
+ const _hoisted_16$1P = { class: "cn-activity-tab__filter" };
96815
+ const _hoisted_17$1B = { class: "cn-activity-tab__filter-label" };
96784
96816
  const _hoisted_18$1m = { value: "" };
96785
96817
  const _hoisted_19$1g = ["value"];
96786
96818
  const _hoisted_20$17 = {
@@ -96797,22 +96829,22 @@ const _hoisted_22$14 = {
96797
96829
  key: 1,
96798
96830
  class: "cn-activity-tab__filter"
96799
96831
  };
96800
- const _hoisted_23$W = { class: "cn-activity-tab__filter-label" };
96801
- const _hoisted_24$R = { value: "" };
96802
- const _hoisted_25$J = { value: "internal" };
96803
- const _hoisted_26$D = { value: "public" };
96804
- const _hoisted_27$u = {
96832
+ const _hoisted_23$X = { class: "cn-activity-tab__filter-label" };
96833
+ const _hoisted_24$S = { value: "" };
96834
+ const _hoisted_25$K = { value: "internal" };
96835
+ const _hoisted_26$E = { value: "public" };
96836
+ const _hoisted_27$w = {
96805
96837
  key: 2,
96806
96838
  class: "cn-activity-tab__reads"
96807
96839
  };
96808
- const _hoisted_28$s = ["checked"];
96809
- const _hoisted_29$q = ["aria-label"];
96810
- const _hoisted_30$p = ["onClick"];
96811
- const _hoisted_31$n = {
96840
+ const _hoisted_28$u = ["checked"];
96841
+ const _hoisted_29$s = ["aria-label"];
96842
+ const _hoisted_30$q = ["onClick"];
96843
+ const _hoisted_31$o = {
96812
96844
  key: 3,
96813
96845
  class: "cn-activity-tab__dates"
96814
96846
  };
96815
- const _hoisted_32$n = { class: "cn-activity-tab__filter" };
96847
+ const _hoisted_32$o = { class: "cn-activity-tab__filter" };
96816
96848
  const _hoisted_33$l = { class: "cn-activity-tab__filter-label" };
96817
96849
  const _hoisted_34$l = ["value"];
96818
96850
  const _hoisted_35$j = { class: "cn-activity-tab__filter" };
@@ -96840,7 +96872,7 @@ const _hoisted_42$a = {
96840
96872
  "aria-hidden": "true"
96841
96873
  };
96842
96874
  const _hoisted_43$a = { class: "cn-activity-tab__event-body" };
96843
- const _hoisted_44$a = { class: "cn-activity-tab__event-line" };
96875
+ const _hoisted_44$9 = { class: "cn-activity-tab__event-line" };
96844
96876
  const _hoisted_45$8 = { class: "cn-activity-tab__event-meta" };
96845
96877
  const _hoisted_46$8 = {
96846
96878
  key: 0,
@@ -96958,20 +96990,20 @@ function render$7H(_ctx, _cache, $props, $setup, $data, $options) {
96958
96990
  class: "cn-activity-tab__select",
96959
96991
  onChange: _cache[2] || (_cache[2] = (...args) => ($options.resetAndFetch && $options.resetAndFetch(...args)))
96960
96992
  }, [
96961
- vue$1.createElementVNode("option", _hoisted_14$2b, vue$1.toDisplayString($data.allTypesLabel), 1 /* TEXT */),
96993
+ vue$1.createElementVNode("option", _hoisted_14$2c, vue$1.toDisplayString($data.allTypesLabel), 1 /* TEXT */),
96962
96994
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($data.types, (ty) => {
96963
96995
  return (vue$1.openBlock(), vue$1.createElementBlock("option", {
96964
96996
  key: ty,
96965
96997
  value: ty
96966
- }, vue$1.toDisplayString(ty), 9 /* TEXT, PROPS */, _hoisted_15$1_))
96998
+ }, vue$1.toDisplayString(ty), 9 /* TEXT, PROPS */, _hoisted_15$1$))
96967
96999
  }), 128 /* KEYED_FRAGMENT */))
96968
97000
  ], 544 /* NEED_HYDRATION, NEED_PATCH */), [
96969
97001
  [vue$1.vModelSelect, $data.selectedType]
96970
97002
  ])
96971
97003
  ]))
96972
97004
  : vue$1.createCommentVNode("v-if", true),
96973
- vue$1.createElementVNode("label", _hoisted_16$1N, [
96974
- vue$1.createElementVNode("span", _hoisted_17$1A, vue$1.toDisplayString($data.actorLabel), 1 /* TEXT */),
97005
+ vue$1.createElementVNode("label", _hoisted_16$1P, [
97006
+ vue$1.createElementVNode("span", _hoisted_17$1B, vue$1.toDisplayString($data.actorLabel), 1 /* TEXT */),
96975
97007
  vue$1.withDirectives(vue$1.createElementVNode("select", {
96976
97008
  "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.selectedActor) = $event)),
96977
97009
  class: "cn-activity-tab__select",
@@ -96997,16 +97029,16 @@ function render$7H(_ctx, _cache, $props, $setup, $data, $options) {
96997
97029
  vue$1.createTextVNode(" " + vue$1.toDisplayString($data.publicOnlyLabel), 1 /* TEXT */)
96998
97030
  ]))
96999
97031
  : (vue$1.openBlock(), vue$1.createElementBlock("label", _hoisted_22$14, [
97000
- vue$1.createElementVNode("span", _hoisted_23$W, vue$1.toDisplayString($data.visibilityLabel), 1 /* TEXT */),
97032
+ vue$1.createElementVNode("span", _hoisted_23$X, vue$1.toDisplayString($data.visibilityLabel), 1 /* TEXT */),
97001
97033
  vue$1.withDirectives(vue$1.createElementVNode("select", {
97002
97034
  "onUpdate:modelValue": _cache[5] || (_cache[5] = $event => (($data.selectedVisibility) = $event)),
97003
97035
  class: "cn-activity-tab__select",
97004
97036
  "data-testid": "cn-activity-visibility-select",
97005
97037
  onChange: _cache[6] || (_cache[6] = (...args) => ($options.resetAndFetch && $options.resetAndFetch(...args)))
97006
97038
  }, [
97007
- vue$1.createElementVNode("option", _hoisted_24$R, vue$1.toDisplayString($data.allVisibilityLabel), 1 /* TEXT */),
97008
- vue$1.createElementVNode("option", _hoisted_25$J, vue$1.toDisplayString($data.internalLabel), 1 /* TEXT */),
97009
- vue$1.createElementVNode("option", _hoisted_26$D, vue$1.toDisplayString($data.publicLabel), 1 /* TEXT */)
97039
+ vue$1.createElementVNode("option", _hoisted_24$S, vue$1.toDisplayString($data.allVisibilityLabel), 1 /* TEXT */),
97040
+ vue$1.createElementVNode("option", _hoisted_25$K, vue$1.toDisplayString($data.internalLabel), 1 /* TEXT */),
97041
+ vue$1.createElementVNode("option", _hoisted_26$E, vue$1.toDisplayString($data.publicLabel), 1 /* TEXT */)
97010
97042
  ], 544 /* NEED_HYDRATION, NEED_PATCH */), [
97011
97043
  [vue$1.vModelSelect, $data.selectedVisibility]
97012
97044
  ])
@@ -97014,13 +97046,13 @@ function render$7H(_ctx, _cache, $props, $setup, $data, $options) {
97014
97046
  ]))
97015
97047
  : vue$1.createCommentVNode("v-if", true),
97016
97048
  (!$data.legacy)
97017
- ? (vue$1.openBlock(), vue$1.createElementBlock("label", _hoisted_27$u, [
97049
+ ? (vue$1.openBlock(), vue$1.createElementBlock("label", _hoisted_27$w, [
97018
97050
  vue$1.createElementVNode("input", {
97019
97051
  type: "checkbox",
97020
97052
  checked: $data.showReads,
97021
97053
  "data-testid": "cn-activity-reads",
97022
97054
  onChange: _cache[7] || (_cache[7] = $event => ($options.setShowReads($event.target.checked)))
97023
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_28$s),
97055
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_28$u),
97024
97056
  vue$1.createTextVNode(" " + vue$1.toDisplayString($data.showReadsLabel), 1 /* TEXT */)
97025
97057
  ]))
97026
97058
  : vue$1.createCommentVNode("v-if", true),
@@ -97035,12 +97067,12 @@ function render$7H(_ctx, _cache, $props, $setup, $data, $options) {
97035
97067
  type: "button",
97036
97068
  class: vue$1.normalizeClass(["cn-activity-tab__range-btn", { 'cn-activity-tab__range-btn--active': $data.selectedRange === range.key }]),
97037
97069
  onClick: $event => ($options.selectRange(range.key))
97038
- }, vue$1.toDisplayString(range.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_30$p))
97070
+ }, vue$1.toDisplayString(range.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_30$q))
97039
97071
  }), 128 /* KEYED_FRAGMENT */))
97040
- ], 8 /* PROPS */, _hoisted_29$q),
97072
+ ], 8 /* PROPS */, _hoisted_29$s),
97041
97073
  (!$data.legacy)
97042
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$n, [
97043
- vue$1.createElementVNode("label", _hoisted_32$n, [
97074
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$o, [
97075
+ vue$1.createElementVNode("label", _hoisted_32$o, [
97044
97076
  vue$1.createElementVNode("span", _hoisted_33$l, vue$1.toDisplayString($data.fromLabel), 1 /* TEXT */),
97045
97077
  vue$1.createElementVNode("input", {
97046
97078
  type: "date",
@@ -97103,7 +97135,7 @@ function render$7H(_ctx, _cache, $props, $setup, $data, $options) {
97103
97135
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent($options.iconFor(entry)), { size: 18 }))
97104
97136
  ]),
97105
97137
  vue$1.createElementVNode("div", _hoisted_43$a, [
97106
- vue$1.createElementVNode("p", _hoisted_44$a, [
97138
+ vue$1.createElementVNode("p", _hoisted_44$9, [
97107
97139
  vue$1.createElementVNode("strong", null, vue$1.toDisplayString($options.splitSubject(entry).verb), 1 /* TEXT */),
97108
97140
  vue$1.createTextVNode(vue$1.toDisplayString($options.splitSubject(entry).rest), 1 /* TEXT */)
97109
97141
  ]),
@@ -97581,13 +97613,13 @@ const _hoisted_13$2j = {
97581
97613
  key: 1,
97582
97614
  class: "cn-analytics-card__empty"
97583
97615
  };
97584
- const _hoisted_14$2a = {
97616
+ const _hoisted_14$2b = {
97585
97617
  key: 2,
97586
97618
  class: "cn-analytics-card__list"
97587
97619
  };
97588
- const _hoisted_15$1Z = { class: "cn-analytics-card__row-icon" };
97589
- const _hoisted_16$1M = { class: "cn-analytics-card__row-main" };
97590
- const _hoisted_17$1z = ["href"];
97620
+ const _hoisted_15$1_ = { class: "cn-analytics-card__row-icon" };
97621
+ const _hoisted_16$1O = { class: "cn-analytics-card__row-main" };
97622
+ const _hoisted_17$1A = ["href"];
97591
97623
  const _hoisted_18$1l = {
97592
97624
  key: 3,
97593
97625
  class: "cn-analytics-card__view-all"
@@ -97663,22 +97695,22 @@ function render$7G(_ctx, _cache, $props, $setup, $data, $options) {
97663
97695
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_12$2B, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
97664
97696
  : ($data.reports.length === 0)
97665
97697
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_13$2j, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
97666
- : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_14$2a, [
97698
+ : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_14$2b, [
97667
97699
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.displayedReports, (report) => {
97668
97700
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
97669
97701
  key: $options.reportKey(report),
97670
97702
  class: "cn-analytics-card__row"
97671
97703
  }, [
97672
- vue$1.createElementVNode("div", _hoisted_15$1Z, [
97704
+ vue$1.createElementVNode("div", _hoisted_15$1_, [
97673
97705
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent($options.reportIcon(report)), { size: 16 }))
97674
97706
  ]),
97675
- vue$1.createElementVNode("div", _hoisted_16$1M, [
97707
+ vue$1.createElementVNode("div", _hoisted_16$1O, [
97676
97708
  vue$1.createElementVNode("a", {
97677
97709
  href: $options.reportUrl(report),
97678
97710
  target: "_blank",
97679
97711
  rel: "noopener noreferrer",
97680
97712
  class: "cn-analytics-card__title"
97681
- }, vue$1.toDisplayString($options.reportTitle(report)), 9 /* TEXT, PROPS */, _hoisted_17$1z),
97713
+ }, vue$1.toDisplayString($options.reportTitle(report)), 9 /* TEXT, PROPS */, _hoisted_17$1A),
97682
97714
  vue$1.createElementVNode("span", {
97683
97715
  class: vue$1.normalizeClass(["cn-analytics-card__badge", $options.badgeClass(report)])
97684
97716
  }, vue$1.toDisplayString($options.reportTypeLabel(report)), 3 /* TEXT, CLASS */)
@@ -100246,16 +100278,16 @@ const _hoisted_13$2i = {
100246
100278
  key: 3,
100247
100279
  class: "cn-audit-details__changes"
100248
100280
  };
100249
- const _hoisted_14$29 = { class: "cn-audit-details__field" };
100250
- const _hoisted_15$1Y = {
100281
+ const _hoisted_14$2a = { class: "cn-audit-details__field" };
100282
+ const _hoisted_15$1Z = {
100251
100283
  key: 0,
100252
100284
  class: "cn-audit-details__values"
100253
100285
  };
100254
- const _hoisted_16$1L = {
100286
+ const _hoisted_16$1N = {
100255
100287
  key: 0,
100256
100288
  class: "cn-audit-details__old"
100257
100289
  };
100258
- const _hoisted_17$1y = {
100290
+ const _hoisted_17$1z = {
100259
100291
  key: 1,
100260
100292
  class: "cn-audit-details__arrow"
100261
100293
  };
@@ -100402,14 +100434,14 @@ function render$7z(_ctx, _cache, $props, $setup, $data, $options) {
100402
100434
  key: field,
100403
100435
  class: "cn-audit-details__change"
100404
100436
  }, [
100405
- vue$1.createElementVNode("span", _hoisted_14$29, vue$1.toDisplayString(field), 1 /* TEXT */),
100437
+ vue$1.createElementVNode("span", _hoisted_14$2a, vue$1.toDisplayString(field), 1 /* TEXT */),
100406
100438
  ($options.isSimpleValue(change))
100407
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$1Y, [
100439
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$1Z, [
100408
100440
  (change.old !== null && change.old !== undefined)
100409
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1L, vue$1.toDisplayString($options.formatValue(change.old)), 1 /* TEXT */))
100441
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1N, vue$1.toDisplayString($options.formatValue(change.old)), 1 /* TEXT */))
100410
100442
  : vue$1.createCommentVNode("v-if", true),
100411
100443
  (change.old !== null && change.new !== null)
100412
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1y, "→"))
100444
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1z, "→"))
100413
100445
  : vue$1.createCommentVNode("v-if", true),
100414
100446
  (change.new !== null && change.new !== undefined)
100415
100447
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$1k, vue$1.toDisplayString($options.formatValue(change.new)), 1 /* TEXT */))
@@ -100744,16 +100776,16 @@ const _hoisted_10$39 = {
100744
100776
  const _hoisted_11$2P = ["src"];
100745
100777
  const _hoisted_12$2y = ["href"];
100746
100778
  const _hoisted_13$2h = { key: 3 };
100747
- const _hoisted_14$28 = {
100779
+ const _hoisted_14$29 = {
100748
100780
  key: 1,
100749
100781
  class: "cn-bookmarks-card__view-all"
100750
100782
  };
100751
- const _hoisted_15$1X = ["href"];
100752
- const _hoisted_16$1K = {
100783
+ const _hoisted_15$1Y = ["href"];
100784
+ const _hoisted_16$1M = {
100753
100785
  key: 0,
100754
100786
  class: "cn-bookmarks-card__empty"
100755
100787
  };
100756
- const _hoisted_17$1x = {
100788
+ const _hoisted_17$1y = {
100757
100789
  key: 1,
100758
100790
  class: "cn-bookmarks-card__empty"
100759
100791
  };
@@ -100765,15 +100797,15 @@ const _hoisted_19$1d = { class: "cn-bookmarks-card__row-icon" };
100765
100797
  const _hoisted_20$15 = ["src", "onError"];
100766
100798
  const _hoisted_21$13 = { class: "cn-bookmarks-card__row-main" };
100767
100799
  const _hoisted_22$12 = ["href"];
100768
- const _hoisted_23$V = {
100800
+ const _hoisted_23$W = {
100769
100801
  key: 1,
100770
100802
  class: "cn-bookmarks-card__title"
100771
100803
  };
100772
- const _hoisted_24$Q = {
100804
+ const _hoisted_24$R = {
100773
100805
  key: 3,
100774
100806
  class: "cn-bookmarks-card__view-all"
100775
100807
  };
100776
- const _hoisted_25$I = ["href"];
100808
+ const _hoisted_25$J = ["href"];
100777
100809
 
100778
100810
  function render$7y(_ctx, _cache, $props, $setup, $data, $options) {
100779
100811
  const _component_NcLoadingIcon = vue$1.resolveComponent("NcLoadingIcon");
@@ -100854,21 +100886,21 @@ function render$7y(_ctx, _cache, $props, $setup, $data, $options) {
100854
100886
  ]))
100855
100887
  : vue$1.createCommentVNode("v-if", true),
100856
100888
  ($data.bookmarks.length > 1)
100857
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$28, [
100889
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$29, [
100858
100890
  vue$1.createElementVNode("a", {
100859
100891
  href: $props.bookmarksAppUrl,
100860
100892
  target: "_blank",
100861
100893
  rel: "noopener noreferrer"
100862
- }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_15$1X)
100894
+ }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_15$1Y)
100863
100895
  ]))
100864
100896
  : vue$1.createCommentVNode("v-if", true)
100865
100897
  ]))
100866
100898
  ], 64 /* STABLE_FRAGMENT */))
100867
100899
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 3 }, [
100868
100900
  ($data.degraded)
100869
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1K, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
100901
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1M, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
100870
100902
  : ($data.bookmarks.length === 0)
100871
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_17$1x, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
100903
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_17$1y, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
100872
100904
  : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_18$1j, [
100873
100905
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.displayedBookmarks, (bookmark) => {
100874
100906
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
@@ -100898,18 +100930,18 @@ function render$7y(_ctx, _cache, $props, $setup, $data, $options) {
100898
100930
  rel: "noopener noreferrer",
100899
100931
  class: "cn-bookmarks-card__title"
100900
100932
  }, vue$1.toDisplayString($options.bookmarkTitle(bookmark)), 9 /* TEXT, PROPS */, _hoisted_22$12))
100901
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$V, vue$1.toDisplayString($options.bookmarkTitle(bookmark)), 1 /* TEXT */))
100933
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$W, vue$1.toDisplayString($options.bookmarkTitle(bookmark)), 1 /* TEXT */))
100902
100934
  ])
100903
100935
  ]))
100904
100936
  }), 128 /* KEYED_FRAGMENT */))
100905
100937
  ])),
100906
100938
  ($data.bookmarks.length > $data.COMPACT_LIMIT)
100907
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$Q, [
100939
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$R, [
100908
100940
  vue$1.createElementVNode("a", {
100909
100941
  href: $props.bookmarksAppUrl,
100910
100942
  target: "_blank",
100911
100943
  rel: "noopener noreferrer"
100912
- }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_25$I)
100944
+ }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_25$J)
100913
100945
  ]))
100914
100946
  : vue$1.createCommentVNode("v-if", true)
100915
100947
  ], 64 /* STABLE_FRAGMENT */))
@@ -101707,7 +101739,7 @@ const _hoisted_13$2g = {
101707
101739
  key: 0,
101708
101740
  class: "cn-bookmarks-tab__description"
101709
101741
  };
101710
- const _hoisted_14$27 = {
101742
+ const _hoisted_14$28 = {
101711
101743
  key: 1,
101712
101744
  class: "cn-bookmarks-tab__tags"
101713
101745
  };
@@ -101841,7 +101873,7 @@ function render$7v(_ctx, _cache, $props, $setup, $data, $options) {
101841
101873
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_13$2g, vue$1.toDisplayString(bookmark.description), 1 /* TEXT */))
101842
101874
  : vue$1.createCommentVNode("v-if", true),
101843
101875
  ($options.bookmarkTags(bookmark).length > 0)
101844
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$27, [
101876
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$28, [
101845
101877
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.bookmarkTags(bookmark), (tag) => {
101846
101878
  return (vue$1.openBlock(), vue$1.createBlock(_component_CnStatusBadge, {
101847
101879
  key: tag,
@@ -101956,6 +101988,69 @@ const bookmarksIntegration = {
101956
101988
  defaultSize: { w: 3, h: 3 },
101957
101989
  };
101958
101990
 
101991
+ /**
101992
+ * SPDX-FileCopyrightText: 2026 Conduction B.V.
101993
+ * SPDX-License-Identifier: EUPL-1.2
101994
+ *
101995
+ * A calendar event's status as a label and a badge tone, shared by the
101996
+ * calendar tab and the calendar card.
101997
+ */
101998
+
101999
+
102000
+ /**
102001
+ * The event's status in words, or '' when it has none the reader needs.
102002
+ *
102003
+ * @param {object} ev The event.
102004
+ * @return {string}
102005
+ */
102006
+ function eventStatusLabel(ev) {
102007
+ const status = String(ev?.status || '').toLowerCase();
102008
+ if (status === 'confirmed') {
102009
+ return l10n.translate('nextcloud-vue', 'Confirmed')
102010
+ }
102011
+ if (status === 'tentative') {
102012
+ return l10n.translate('nextcloud-vue', 'Tentative')
102013
+ }
102014
+ if (status === 'cancelled') {
102015
+ return l10n.translate('nextcloud-vue', 'Cancelled')
102016
+ }
102017
+ return ''
102018
+ }
102019
+
102020
+ /**
102021
+ * The badge tone of the event's status.
102022
+ *
102023
+ * @param {object} ev The event.
102024
+ * @return {string} `success`, `warning`, `error` or `default`.
102025
+ */
102026
+ function eventStatusVariant(ev) {
102027
+ const status = String(ev?.status || '').toLowerCase();
102028
+ if (status === 'confirmed') {
102029
+ return 'success'
102030
+ }
102031
+ if (status === 'tentative') {
102032
+ return 'warning'
102033
+ }
102034
+ if (status === 'cancelled') {
102035
+ return 'error'
102036
+ }
102037
+ return 'default'
102038
+ }
102039
+
102040
+ /**
102041
+ * The names of the event's attendees.
102042
+ *
102043
+ * @param {object} ev The event.
102044
+ * @return {Array<string>}
102045
+ */
102046
+ function eventAttendeeNames(ev) {
102047
+ const raw = ev?.attendees || ev?.participants || [];
102048
+ if (!Array.isArray(raw)) {
102049
+ return []
102050
+ }
102051
+ return raw.map((att) => (typeof att === 'string' ? att : (att.name || att.displayName || att.cn || att.email || ''))).filter(Boolean)
102052
+ }
102053
+
101959
102054
  /**
101960
102055
  * CnCalendarCard — surface-aware compact widget for the calendar
101961
102056
  * integration. Renders linked VEVENTs across all four widget surfaces
@@ -101966,6 +102061,10 @@ var script$7v = {
101966
102061
 
101967
102062
  components: { CnCalendarEventCreate: __sfc_main$8d, CnCalendarEventPicker: __sfc_main$8c, CnDetailCard: __sfc_main$7F, CnIcon: __sfc_main$8o, LinkVariant, NcButton: vue.NcButton, NcLoadingIcon: vue.NcLoadingIcon, Plus, CalendarClock, CalendarCheck },
101968
102063
 
102064
+ inject: {
102065
+ cnLook: { default: 'nextcloud' },
102066
+ },
102067
+
101969
102068
  props: {
101970
102069
  /** OpenRegister register id (slug or uuid). Optional for user-dashboard. */
101971
102070
  register: { type: String, default: '' },
@@ -102041,6 +102140,16 @@ var script$7v = {
102041
102140
  *
102042
102141
  * @return {Array<string>}
102043
102142
  */
102143
+ /** @return {boolean} The board look draws ruled rows. */
102144
+ isBoard() {
102145
+ return normalizeLook(this.cnLook) === 'board'
102146
+ },
102147
+
102148
+ /** @return {boolean} The meetings are ruled rows: the board look on a detail page. */
102149
+ boardRows() {
102150
+ return this.isBoard && this.surface === 'detail-page'
102151
+ },
102152
+
102044
102153
  shownHeaderActions() {
102045
102154
  if (this.surface !== 'detail-page' || !this.objectId || !Array.isArray(this.headerActions)) {
102046
102155
  return []
@@ -102100,6 +102209,34 @@ var script$7v = {
102100
102209
  },
102101
102210
 
102102
102211
  methods: {
102212
+ /**
102213
+ * A meeting's meta line in the board look: "14 okt, 10:00 tot 10:30",
102214
+ * its place and its attendees, separated by middots.
102215
+ *
102216
+ * @param {object} ev The event.
102217
+ * @return {string}
102218
+ */
102219
+ boardMetaOf(ev) {
102220
+ const start = ev.dtstart ? new Date(ev.dtstart) : null;
102221
+ const end = ev.dtend ? new Date(ev.dtend) : null;
102222
+ let when = '';
102223
+ if (start && !Number.isNaN(start.getTime())) {
102224
+ when = `${formatBoardDate(start)}, ${formatTimeOfDay(start)}`;
102225
+ if (end && !Number.isNaN(end.getTime())) {
102226
+ when = l10n.translate('nextcloud-vue', '{start} until {end}', { start: when, end: formatTimeOfDay(end) });
102227
+ }
102228
+ }
102229
+ return [when, ev.location, ...eventAttendeeNames(ev)].filter(Boolean).join(' · ')
102230
+ },
102231
+
102232
+ statusOf(ev) {
102233
+ return eventStatusLabel(ev)
102234
+ },
102235
+
102236
+ statusVariantOf(ev) {
102237
+ return eventStatusVariant(ev)
102238
+ },
102239
+
102103
102240
  /**
102104
102241
  * A meeting was made on this object: close the form, read the list again.
102105
102242
  *
@@ -102257,19 +102394,26 @@ const _hoisted_6$4F = {
102257
102394
  key: 4,
102258
102395
  class: "cn-calendar-card__list"
102259
102396
  };
102260
- const _hoisted_7$4e = { class: "cn-calendar-card__row-icon" };
102261
- const _hoisted_8$3P = { class: "cn-calendar-card__row-main" };
102262
- const _hoisted_9$3v = { class: "cn-calendar-card__title" };
102263
- const _hoisted_10$36 = { class: "cn-calendar-card__meta" };
102264
- const _hoisted_11$2N = {
102397
+ const _hoisted_7$4e = { class: "cn-calendar-card__row-main" };
102398
+ const _hoisted_8$3P = { class: "cn-calendar-card__title" };
102399
+ const _hoisted_9$3v = {
102400
+ class: "cn-calendar-card__meta",
102401
+ "data-testid": "cn-calendar-card-meta"
102402
+ };
102403
+ const _hoisted_10$36 = { class: "cn-calendar-card__row-icon" };
102404
+ const _hoisted_11$2N = { class: "cn-calendar-card__row-main" };
102405
+ const _hoisted_12$2w = { class: "cn-calendar-card__title" };
102406
+ const _hoisted_13$2f = { class: "cn-calendar-card__meta" };
102407
+ const _hoisted_14$27 = {
102265
102408
  key: 0,
102266
102409
  class: "cn-calendar-card__when"
102267
102410
  };
102268
- const _hoisted_12$2w = {
102411
+ const _hoisted_15$1X = {
102269
102412
  key: 1,
102270
102413
  class: "cn-calendar-card__location"
102271
102414
  };
102272
- const _hoisted_13$2f = ["href"];
102415
+ const _hoisted_16$1L = ["href"];
102416
+ const _hoisted_17$1x = ["href"];
102273
102417
 
102274
102418
  function render$7u(_ctx, _cache, $props, $setup, $data, $options) {
102275
102419
  const _component_CnIcon = vue$1.resolveComponent("CnIcon");
@@ -102318,32 +102462,58 @@ function render$7u(_ctx, _cache, $props, $setup, $data, $options) {
102318
102462
  key: $options.rowKey(ev),
102319
102463
  class: "cn-calendar-card__row"
102320
102464
  }, [
102321
- vue$1.createElementVNode("div", _hoisted_7$4e, [
102322
- ($options.isUpcoming(ev))
102323
- ? (vue$1.openBlock(), vue$1.createBlock(_component_CalendarClock, {
102324
- key: 0,
102325
- size: 20,
102326
- class: "cn-calendar-card__icon--upcoming"
102327
- }))
102328
- : (vue$1.openBlock(), vue$1.createBlock(_component_CalendarCheck, {
102329
- key: 1,
102330
- size: 20,
102331
- class: "cn-calendar-card__icon--past"
102332
- }))
102333
- ]),
102334
- vue$1.createElementVNode("div", _hoisted_8$3P, [
102335
- vue$1.createElementVNode("span", _hoisted_9$3v, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
102336
- vue$1.createElementVNode("div", _hoisted_10$36, [
102337
- (ev.dtstart)
102338
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_11$2N, vue$1.toDisplayString($options.formatShort(ev.dtstart)), 1 /* TEXT */))
102339
- : vue$1.createCommentVNode("v-if", true),
102340
- (ev.location)
102341
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_12$2w, "· " + vue$1.toDisplayString(ev.location), 1 /* TEXT */))
102342
- : vue$1.createCommentVNode("v-if", true)
102343
- ])
102344
- ])
102465
+ ($options.boardRows)
102466
+ ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 0 }, [
102467
+ vue$1.createElementVNode("div", _hoisted_7$4e, [
102468
+ vue$1.createElementVNode("span", _hoisted_8$3P, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
102469
+ vue$1.createElementVNode("span", _hoisted_9$3v, vue$1.toDisplayString($options.boardMetaOf(ev)), 1 /* TEXT */)
102470
+ ]),
102471
+ ($options.statusOf(ev))
102472
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", {
102473
+ key: 0,
102474
+ class: vue$1.normalizeClass(["cn-status-badge", `cn-status-badge--${$options.statusVariantOf(ev)}`]),
102475
+ "data-testid": "cn-calendar-card-status"
102476
+ }, vue$1.toDisplayString($options.statusOf(ev)), 3 /* TEXT, CLASS */))
102477
+ : vue$1.createCommentVNode("v-if", true)
102478
+ ], 64 /* STABLE_FRAGMENT */))
102479
+ : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
102480
+ vue$1.createElementVNode("div", _hoisted_10$36, [
102481
+ ($options.isUpcoming(ev))
102482
+ ? (vue$1.openBlock(), vue$1.createBlock(_component_CalendarClock, {
102483
+ key: 0,
102484
+ size: 20,
102485
+ class: "cn-calendar-card__icon--upcoming"
102486
+ }))
102487
+ : (vue$1.openBlock(), vue$1.createBlock(_component_CalendarCheck, {
102488
+ key: 1,
102489
+ size: 20,
102490
+ class: "cn-calendar-card__icon--past"
102491
+ }))
102492
+ ]),
102493
+ vue$1.createElementVNode("div", _hoisted_11$2N, [
102494
+ vue$1.createElementVNode("span", _hoisted_12$2w, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
102495
+ vue$1.createElementVNode("div", _hoisted_13$2f, [
102496
+ (ev.dtstart)
102497
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$27, vue$1.toDisplayString($options.formatShort(ev.dtstart)), 1 /* TEXT */))
102498
+ : vue$1.createCommentVNode("v-if", true),
102499
+ (ev.location)
102500
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_15$1X, "· " + vue$1.toDisplayString(ev.location), 1 /* TEXT */))
102501
+ : vue$1.createCommentVNode("v-if", true)
102502
+ ])
102503
+ ])
102504
+ ], 64 /* STABLE_FRAGMENT */))
102345
102505
  ]))
102346
- }), 128 /* KEYED_FRAGMENT */))
102506
+ }), 128 /* KEYED_FRAGMENT */)),
102507
+ ($options.boardRows)
102508
+ ? (vue$1.openBlock(), vue$1.createElementBlock("a", {
102509
+ key: 0,
102510
+ class: "cn-calendar-card__open",
102511
+ href: $options.calendarAppUrl,
102512
+ target: "_blank",
102513
+ rel: "noopener",
102514
+ "data-testid": "cn-calendar-card-open"
102515
+ }, vue$1.toDisplayString($props.openInCalendarLabel), 9 /* TEXT, PROPS */, _hoisted_16$1L))
102516
+ : vue$1.createCommentVNode("v-if", true)
102347
102517
  ])),
102348
102518
  ($data.showPicker)
102349
102519
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnCalendarEventPicker, {
@@ -102406,7 +102576,7 @@ function render$7u(_ctx, _cache, $props, $setup, $data, $options) {
102406
102576
  key: "0"
102407
102577
  }
102408
102578
  : undefined,
102409
- ($props.surface === 'detail-page')
102579
+ ($props.surface === 'detail-page' && !$options.isBoard)
102410
102580
  ? {
102411
102581
  name: "footer",
102412
102582
  fn: vue$1.withCtx(() => [
@@ -102415,7 +102585,7 @@ function render$7u(_ctx, _cache, $props, $setup, $data, $options) {
102415
102585
  href: $options.calendarAppUrl,
102416
102586
  target: "_blank",
102417
102587
  rel: "noopener"
102418
- }, vue$1.toDisplayString($props.openInCalendarLabel), 9 /* TEXT, PROPS */, _hoisted_13$2f)
102588
+ }, vue$1.toDisplayString($props.openInCalendarLabel), 9 /* TEXT, PROPS */, _hoisted_17$1x)
102419
102589
  ]),
102420
102590
  key: "1"
102421
102591
  }
@@ -102435,7 +102605,7 @@ function render$7u(_ctx, _cache, $props, $setup, $data, $options) {
102435
102605
  }
102436
102606
 
102437
102607
  script$7v.render = render$7u;
102438
- script$7v.__scopeId = "data-v-25d68a70";
102608
+ script$7v.__scopeId = "data-v-6c15c681";
102439
102609
  const __sfc_main$7p = script$7v;
102440
102610
 
102441
102611
  const MAX_AVATARS = 3;
@@ -102737,31 +102907,11 @@ var script$7u = {
102737
102907
  },
102738
102908
 
102739
102909
  statusLabel(ev) {
102740
- const status = (ev.status || '').toString().toLowerCase();
102741
- if (status === 'confirmed') {
102742
- return l10n.translate('nextcloud-vue', 'Confirmed')
102743
- }
102744
- if (status === 'tentative') {
102745
- return l10n.translate('nextcloud-vue', 'Tentative')
102746
- }
102747
- if (status === 'cancelled') {
102748
- return l10n.translate('nextcloud-vue', 'Cancelled')
102749
- }
102750
- return ''
102910
+ return eventStatusLabel(ev)
102751
102911
  },
102752
102912
 
102753
102913
  statusVariant(ev) {
102754
- const status = (ev.status || '').toString().toLowerCase();
102755
- if (status === 'confirmed') {
102756
- return 'success'
102757
- }
102758
- if (status === 'tentative') {
102759
- return 'warning'
102760
- }
102761
- if (status === 'cancelled') {
102762
- return 'error'
102763
- }
102764
- return 'default'
102914
+ return eventStatusVariant(ev)
102765
102915
  },
102766
102916
 
102767
102917
  attendeeList(ev) {
@@ -102845,7 +102995,7 @@ const _hoisted_12$2v = { class: "cn-calendar-tab__main" };
102845
102995
  const _hoisted_13$2e = { class: "cn-calendar-tab__title-row" };
102846
102996
  const _hoisted_14$26 = { class: "cn-calendar-tab__title" };
102847
102997
  const _hoisted_15$1W = { class: "cn-calendar-tab__when" };
102848
- const _hoisted_16$1J = {
102998
+ const _hoisted_16$1K = {
102849
102999
  key: 0,
102850
103000
  class: "cn-calendar-tab__location"
102851
103001
  };
@@ -102861,22 +103011,22 @@ const _hoisted_21$12 = {
102861
103011
  class: "cn-calendar-tab__group"
102862
103012
  };
102863
103013
  const _hoisted_22$11 = { class: "cn-calendar-tab__group-title cn-calendar-tab__group-title--past" };
102864
- const _hoisted_23$U = {
103014
+ const _hoisted_23$V = {
102865
103015
  class: "cn-calendar-tab__date cn-calendar-tab__date--past",
102866
103016
  "aria-hidden": "true"
102867
103017
  };
102868
- const _hoisted_24$P = { class: "cn-calendar-tab__date-month" };
102869
- const _hoisted_25$H = { class: "cn-calendar-tab__date-day" };
102870
- const _hoisted_26$C = { class: "cn-calendar-tab__main" };
102871
- const _hoisted_27$t = { class: "cn-calendar-tab__title-row" };
102872
- const _hoisted_28$r = { class: "cn-calendar-tab__title" };
102873
- const _hoisted_29$p = { class: "cn-calendar-tab__when" };
102874
- const _hoisted_30$o = {
103018
+ const _hoisted_24$Q = { class: "cn-calendar-tab__date-month" };
103019
+ const _hoisted_25$I = { class: "cn-calendar-tab__date-day" };
103020
+ const _hoisted_26$D = { class: "cn-calendar-tab__main" };
103021
+ const _hoisted_27$v = { class: "cn-calendar-tab__title-row" };
103022
+ const _hoisted_28$t = { class: "cn-calendar-tab__title" };
103023
+ const _hoisted_29$r = { class: "cn-calendar-tab__when" };
103024
+ const _hoisted_30$p = {
102875
103025
  key: 0,
102876
103026
  class: "cn-calendar-tab__location"
102877
103027
  };
102878
- const _hoisted_31$m = { class: "cn-calendar-tab__location-text" };
102879
- const _hoisted_32$m = {
103028
+ const _hoisted_31$n = { class: "cn-calendar-tab__location-text" };
103029
+ const _hoisted_32$n = {
102880
103030
  key: 1,
102881
103031
  class: "cn-calendar-tab__attendees"
102882
103032
  };
@@ -102975,7 +103125,7 @@ function render$7t(_ctx, _cache, $props, $setup, $data, $options) {
102975
103125
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($options.formatTimeRange(ev)), 1 /* TEXT */)
102976
103126
  ]),
102977
103127
  (ev.location)
102978
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1J, [
103128
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1K, [
102979
103129
  vue$1.createVNode(_component_MapMarkerOutline, {
102980
103130
  size: 14,
102981
103131
  class: "cn-calendar-tab__meta-icon"
@@ -103046,13 +103196,13 @@ function render$7t(_ctx, _cache, $props, $setup, $data, $options) {
103046
103196
  key: $options.rowKey(ev),
103047
103197
  class: "cn-calendar-tab__event cn-calendar-tab__event--past"
103048
103198
  }, [
103049
- vue$1.createElementVNode("div", _hoisted_23$U, [
103050
- vue$1.createElementVNode("span", _hoisted_24$P, vue$1.toDisplayString($options.monthOf(ev)), 1 /* TEXT */),
103051
- vue$1.createElementVNode("span", _hoisted_25$H, vue$1.toDisplayString($options.dayOf(ev)), 1 /* TEXT */)
103199
+ vue$1.createElementVNode("div", _hoisted_23$V, [
103200
+ vue$1.createElementVNode("span", _hoisted_24$Q, vue$1.toDisplayString($options.monthOf(ev)), 1 /* TEXT */),
103201
+ vue$1.createElementVNode("span", _hoisted_25$I, vue$1.toDisplayString($options.dayOf(ev)), 1 /* TEXT */)
103052
103202
  ]),
103053
- vue$1.createElementVNode("div", _hoisted_26$C, [
103054
- vue$1.createElementVNode("div", _hoisted_27$t, [
103055
- vue$1.createElementVNode("span", _hoisted_28$r, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
103203
+ vue$1.createElementVNode("div", _hoisted_26$D, [
103204
+ vue$1.createElementVNode("div", _hoisted_27$v, [
103205
+ vue$1.createElementVNode("span", _hoisted_28$t, vue$1.toDisplayString(ev.summary || $props.untitledLabel), 1 /* TEXT */),
103056
103206
  ($options.statusLabel(ev))
103057
103207
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnStatusBadge, {
103058
103208
  key: 0,
@@ -103062,7 +103212,7 @@ function render$7t(_ctx, _cache, $props, $setup, $data, $options) {
103062
103212
  }, null, 8 /* PROPS */, ["label", "variant"]))
103063
103213
  : vue$1.createCommentVNode("v-if", true)
103064
103214
  ]),
103065
- vue$1.createElementVNode("div", _hoisted_29$p, [
103215
+ vue$1.createElementVNode("div", _hoisted_29$r, [
103066
103216
  vue$1.createVNode(_component_ClockOutline, {
103067
103217
  size: 14,
103068
103218
  class: "cn-calendar-tab__meta-icon"
@@ -103070,16 +103220,16 @@ function render$7t(_ctx, _cache, $props, $setup, $data, $options) {
103070
103220
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($options.formatTimeRange(ev)), 1 /* TEXT */)
103071
103221
  ]),
103072
103222
  (ev.location)
103073
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_30$o, [
103223
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_30$p, [
103074
103224
  vue$1.createVNode(_component_MapMarkerOutline, {
103075
103225
  size: 14,
103076
103226
  class: "cn-calendar-tab__meta-icon"
103077
103227
  }),
103078
- vue$1.createElementVNode("span", _hoisted_31$m, vue$1.toDisplayString(ev.location), 1 /* TEXT */)
103228
+ vue$1.createElementVNode("span", _hoisted_31$n, vue$1.toDisplayString(ev.location), 1 /* TEXT */)
103079
103229
  ]))
103080
103230
  : vue$1.createCommentVNode("v-if", true),
103081
103231
  ($options.attendeeList(ev).length > 0)
103082
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$m, [
103232
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$n, [
103083
103233
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.visibleAttendees(ev), (att, idx) => {
103084
103234
  return (vue$1.openBlock(), vue$1.createElementBlock("span", {
103085
103235
  key: idx,
@@ -103157,7 +103307,7 @@ function render$7t(_ctx, _cache, $props, $setup, $data, $options) {
103157
103307
  }
103158
103308
 
103159
103309
  script$7u.render = render$7t;
103160
- script$7u.__scopeId = "data-v-d6947736";
103310
+ script$7u.__scopeId = "data-v-44e2340e";
103161
103311
  const __sfc_main$7o = script$7u;
103162
103312
 
103163
103313
  /**
@@ -103543,7 +103693,7 @@ const _hoisted_15$1V = {
103543
103693
  key: 1,
103544
103694
  class: "cn-collectives-card__view-all"
103545
103695
  };
103546
- const _hoisted_16$1I = ["href"];
103696
+ const _hoisted_16$1J = ["href"];
103547
103697
  const _hoisted_17$1v = {
103548
103698
  key: 0,
103549
103699
  class: "cn-collectives-card__empty"
@@ -103562,15 +103712,15 @@ const _hoisted_20$13 = {
103562
103712
  };
103563
103713
  const _hoisted_21$11 = { class: "cn-collectives-card__row-main" };
103564
103714
  const _hoisted_22$10 = ["href"];
103565
- const _hoisted_23$T = {
103715
+ const _hoisted_23$U = {
103566
103716
  key: 0,
103567
103717
  class: "cn-collectives-card__row-collective"
103568
103718
  };
103569
- const _hoisted_24$O = {
103719
+ const _hoisted_24$P = {
103570
103720
  key: 3,
103571
103721
  class: "cn-collectives-card__view-all"
103572
103722
  };
103573
- const _hoisted_25$G = ["href"];
103723
+ const _hoisted_25$H = ["href"];
103574
103724
 
103575
103725
  function render$7s(_ctx, _cache, $props, $setup, $data, $options) {
103576
103726
  const _component_NcLoadingIcon = vue$1.resolveComponent("NcLoadingIcon");
@@ -103657,7 +103807,7 @@ function render$7s(_ctx, _cache, $props, $setup, $data, $options) {
103657
103807
  href: $props.collectivesAppUrl,
103658
103808
  target: "_blank",
103659
103809
  rel: "noopener"
103660
- }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_16$1I)
103810
+ }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_16$1J)
103661
103811
  ]))
103662
103812
  : vue$1.createCommentVNode("v-if", true)
103663
103813
  ]))
@@ -103691,19 +103841,19 @@ function render$7s(_ctx, _cache, $props, $setup, $data, $options) {
103691
103841
  class: "cn-collectives-card__title"
103692
103842
  }, vue$1.toDisplayString($options.pageTitle(page)), 9 /* TEXT, PROPS */, _hoisted_22$10),
103693
103843
  ($options.collectiveLabel(page))
103694
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$T, vue$1.toDisplayString($options.collectiveLabel(page)), 1 /* TEXT */))
103844
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$U, vue$1.toDisplayString($options.collectiveLabel(page)), 1 /* TEXT */))
103695
103845
  : vue$1.createCommentVNode("v-if", true)
103696
103846
  ])
103697
103847
  ]))
103698
103848
  }), 128 /* KEYED_FRAGMENT */))
103699
103849
  ])),
103700
103850
  ($data.pages.length > $data.COMPACT_LIMIT)
103701
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$O, [
103851
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$P, [
103702
103852
  vue$1.createElementVNode("a", {
103703
103853
  href: $props.collectivesAppUrl,
103704
103854
  target: "_blank",
103705
103855
  rel: "noopener"
103706
- }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_25$G)
103856
+ }, vue$1.toDisplayString($props.viewAllLabel), 9 /* TEXT, PROPS */, _hoisted_25$H)
103707
103857
  ]))
103708
103858
  : vue$1.createCommentVNode("v-if", true)
103709
103859
  ], 64 /* STABLE_FRAGMENT */))
@@ -106839,7 +106989,7 @@ const _hoisted_15$1T = {
106839
106989
  key: 1,
106840
106990
  class: "cn-contacts-tab__sub"
106841
106991
  };
106842
- const _hoisted_16$1H = { class: "cn-contacts-tab__sub-text" };
106992
+ const _hoisted_16$1I = { class: "cn-contacts-tab__sub-text" };
106843
106993
  const _hoisted_17$1u = {
106844
106994
  key: 2,
106845
106995
  class: "cn-contacts-tab__sub"
@@ -106856,12 +107006,12 @@ const _hoisted_21$10 = {
106856
107006
  class: "cn-contacts-tab__sub"
106857
107007
  };
106858
107008
  const _hoisted_22$$ = { class: "cn-contacts-tab__sub-text" };
106859
- const _hoisted_23$S = {
107009
+ const _hoisted_23$T = {
106860
107010
  key: 0,
106861
107011
  class: "cn-contacts-tab__period",
106862
107012
  "data-testid": "cn-contacts-tab-board-period"
106863
107013
  };
106864
- const _hoisted_24$N = ["aria-label", "title", "onClick"];
107014
+ const _hoisted_24$O = ["aria-label", "title", "onClick"];
106865
107015
 
106866
107016
  function render$7j(_ctx, _cache, $props, $setup, $data, $options) {
106867
107017
  const _component_LinkVariant = vue$1.resolveComponent("LinkVariant");
@@ -107013,7 +107163,7 @@ function render$7j(_ctx, _cache, $props, $setup, $data, $options) {
107013
107163
  size: 14,
107014
107164
  class: "cn-contacts-tab__sub-icon"
107015
107165
  }),
107016
- vue$1.createElementVNode("span", _hoisted_16$1H, vue$1.toDisplayString(contact.phone), 1 /* TEXT */)
107166
+ vue$1.createElementVNode("span", _hoisted_16$1I, vue$1.toDisplayString(contact.phone), 1 /* TEXT */)
107017
107167
  ]))
107018
107168
  : vue$1.createCommentVNode("v-if", true),
107019
107169
  (contact.org)
@@ -107045,7 +107195,7 @@ function render$7j(_ctx, _cache, $props, $setup, $data, $options) {
107045
107195
  ($options.isBoard)
107046
107196
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 0 }, [
107047
107197
  ($options.boardPeriodOf(contact))
107048
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$S, vue$1.toDisplayString($options.boardPeriodOf(contact)), 1 /* TEXT */))
107198
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$T, vue$1.toDisplayString($options.boardPeriodOf(contact)), 1 /* TEXT */))
107049
107199
  : vue$1.createCommentVNode("v-if", true),
107050
107200
  vue$1.createVNode(_component_NcActions, {
107051
107201
  class: "cn-contacts-tab__menu",
@@ -107080,7 +107230,7 @@ function render$7j(_ctx, _cache, $props, $setup, $data, $options) {
107080
107230
  onClick: vue$1.withModifiers($event => ($options.unlink(contact)), ["stop"])
107081
107231
  }, [
107082
107232
  vue$1.createVNode(_component_Close, { size: 18 })
107083
- ], 8 /* PROPS */, _hoisted_24$N))
107233
+ ], 8 /* PROPS */, _hoisted_24$O))
107084
107234
  ], 8 /* PROPS */, _hoisted_7$46))
107085
107235
  }), 128 /* KEYED_FRAGMENT */))
107086
107236
  ])
@@ -107468,7 +107618,7 @@ const _hoisted_15$1S = {
107468
107618
  key: 2,
107469
107619
  class: "cn-cospend-card__rows"
107470
107620
  };
107471
- const _hoisted_16$1G = ["href"];
107621
+ const _hoisted_16$1H = ["href"];
107472
107622
  const _hoisted_17$1t = {
107473
107623
  key: 0,
107474
107624
  class: "cn-cospend-card__amount"
@@ -107561,7 +107711,7 @@ function render$7i(_ctx, _cache, $props, $setup, $data, $options) {
107561
107711
  target: "_blank",
107562
107712
  rel: "noopener",
107563
107713
  class: "cn-cospend-card__title"
107564
- }, vue$1.toDisplayString($options.rowTitle(row)), 9 /* TEXT, PROPS */, _hoisted_16$1G),
107714
+ }, vue$1.toDisplayString($options.rowTitle(row)), 9 /* TEXT, PROPS */, _hoisted_16$1H),
107565
107715
  vue$1.createElementVNode("span", {
107566
107716
  class: vue$1.normalizeClass(["cn-cospend-card__chip-pill", $options.typeChipClass(row)])
107567
107717
  }, vue$1.toDisplayString($options.typeLabel(row)), 3 /* TEXT, CLASS */),
@@ -109239,6 +109389,63 @@ script$7e.render = render$7d;
109239
109389
  script$7e.__scopeId = "data-v-7861e746";
109240
109390
  const __sfc_main$78 = script$7e;
109241
109391
 
109392
+ /**
109393
+ * SPDX-FileCopyrightText: 2026 Conduction B.V.
109394
+ * SPDX-License-Identifier: EUPL-1.2
109395
+ *
109396
+ * The parts of a linked Deck card a row shows, shared by the Deck tab and
109397
+ * the Deck card: its board, its stack, its assignees and its labels.
109398
+ */
109399
+
109400
+ /**
109401
+ * @param {object} card The card row.
109402
+ * @return {string} The board's title, or ''.
109403
+ */
109404
+ function cardBoardTitle(card) {
109405
+ return card?.boardTitle ?? card?.board?.title ?? ''
109406
+ }
109407
+
109408
+ /**
109409
+ * @param {object} card The card row.
109410
+ * @return {string} The stack's title, or ''.
109411
+ */
109412
+ function cardStackTitle(card) {
109413
+ return card?.stackTitle ?? card?.stack?.title ?? ''
109414
+ }
109415
+
109416
+ /**
109417
+ * Deck's `assignedUsers` (each with a nested `participant`), or a plain
109418
+ * `assignees` / `users` list of strings or objects.
109419
+ *
109420
+ * @param {object} card The card row.
109421
+ * @return {Array} The assignee entries.
109422
+ */
109423
+ function cardAssignees(card) {
109424
+ const raw = card?.assignedUsers ?? card?.assignees ?? card?.users ?? [];
109425
+ return Array.isArray(raw) ? raw : []
109426
+ }
109427
+
109428
+ /**
109429
+ * @param {object|string} assignee An assignee entry.
109430
+ * @return {string} Its display name, or ''.
109431
+ */
109432
+ function assigneeDisplayName(assignee) {
109433
+ if (typeof assignee === 'string') {
109434
+ return assignee
109435
+ }
109436
+ const p = assignee?.participant ?? assignee ?? {};
109437
+ return p.displayname ?? p.displayName ?? p.uid ?? p.id ?? ''
109438
+ }
109439
+
109440
+ /**
109441
+ * @param {object} card The card row.
109442
+ * @return {Array<object>} Its labels.
109443
+ */
109444
+ function cardLabels(card) {
109445
+ const labels = card?.labels ?? card?.tags ?? [];
109446
+ return Array.isArray(labels) ? labels : []
109447
+ }
109448
+
109242
109449
  const VALID_SURFACES$e = ['user-dashboard', 'app-dashboard', 'detail-page', 'single-entity'];
109243
109450
 
109244
109451
  /**
@@ -109252,6 +109459,10 @@ var script$7d = {
109252
109459
 
109253
109460
  components: { CnDeckCardCreate: __sfc_main$79, CnDeckCardPicker: __sfc_main$78, CnDetailCard: __sfc_main$7F, LinkVariant, NcButton: vue.NcButton, NcLoadingIcon: vue.NcLoadingIcon, Plus, ViewColumnOutline },
109254
109461
 
109462
+ inject: {
109463
+ cnLook: { default: 'nextcloud' },
109464
+ },
109465
+
109255
109466
  props: {
109256
109467
  /** Stable integration id (forwarded from the registry — always `'deck'`). */
109257
109468
  integrationId: { type: String, default: 'deck' },
@@ -109294,6 +109505,8 @@ var script$7d = {
109294
109505
  linkLabel: { type: String, default: () => l10n.translate('nextcloud-vue', 'Link an existing card') },
109295
109506
  /** Label of the `create` button. */
109296
109507
  createLabel: { type: String, default: () => l10n.translate('nextcloud-vue', 'New card') },
109508
+ /** Label of the link to Deck under the rows (board look). */
109509
+ openDeckLabel: { type: String, default: () => l10n.translate('nextcloud-vue', 'Open Deck') },
109297
109510
  },
109298
109511
 
109299
109512
  data() {
@@ -109322,6 +109535,11 @@ var script$7d = {
109322
109535
  return this.headerActions.filter((action, index, all) => ['create', 'link'].includes(action) && all.indexOf(action) === index)
109323
109536
  },
109324
109537
 
109538
+ /** @return {boolean} The board look draws ruled rows instead of the mini-kanban. */
109539
+ isBoard() {
109540
+ return normalizeLook(this.cnLook) === 'board'
109541
+ },
109542
+
109325
109543
  cardHeaderTitle() {
109326
109544
  return this.title || this.integrationId
109327
109545
  },
@@ -109416,6 +109634,32 @@ var script$7d = {
109416
109634
  },
109417
109635
 
109418
109636
  methods: {
109637
+ /**
109638
+ * A card's meta line in the board look: its board, its list and its
109639
+ * assignees, separated by middots.
109640
+ *
109641
+ * @param {object} card The card row.
109642
+ * @return {string}
109643
+ */
109644
+ boardMetaOf(card) {
109645
+ const board = cardBoardTitle(card);
109646
+ const stack = cardStackTitle(card);
109647
+ return [
109648
+ board ? l10n.translate('nextcloud-vue', 'Board {name}', { name: board }) : '',
109649
+ stack ? l10n.translate('nextcloud-vue', 'list {name}', { name: stack }) : '',
109650
+ ...cardAssignees(card).map(assigneeDisplayName),
109651
+ ].filter(Boolean).join(' · ')
109652
+ },
109653
+
109654
+ /**
109655
+ * @param {object} card The card row.
109656
+ * @return {string} Its first label's title, or ''.
109657
+ */
109658
+ firstLabel(card) {
109659
+ const label = cardLabels(card)[0];
109660
+ return label ? String(label.title ?? label.name ?? '') : ''
109661
+ },
109662
+
109419
109663
  /** @return {string} The object's Deck endpoint the link and create flows post to. */
109420
109664
  deckEndpoint() {
109421
109665
  return `${this.apiBase}/objects/${this.register}/${this.schema}/${this.objectId}/deck`
@@ -109611,16 +109855,33 @@ const _hoisted_15$1R = {
109611
109855
  key: 1,
109612
109856
  class: "cn-deck-card__empty"
109613
109857
  };
109614
- const _hoisted_16$1F = {
109858
+ const _hoisted_16$1G = {
109615
109859
  key: 2,
109860
+ class: "cn-deck-card__rows"
109861
+ };
109862
+ const _hoisted_17$1s = { class: "cn-deck-card__row-list" };
109863
+ const _hoisted_18$1f = { class: "cn-deck-card__row-main" };
109864
+ const _hoisted_19$19 = ["href"];
109865
+ const _hoisted_20$11 = {
109866
+ class: "cn-deck-card__row-meta",
109867
+ "data-testid": "cn-deck-card-meta"
109868
+ };
109869
+ const _hoisted_21$$ = {
109870
+ key: 0,
109871
+ class: "cn-status-badge cn-status-badge--purple",
109872
+ "data-testid": "cn-deck-card-label"
109873
+ };
109874
+ const _hoisted_22$_ = ["href"];
109875
+ const _hoisted_23$S = {
109876
+ key: 3,
109616
109877
  class: "cn-deck-card__kanban"
109617
109878
  };
109618
- const _hoisted_17$1s = { class: "cn-deck-card__column-header" };
109619
- const _hoisted_18$1f = { class: "cn-deck-card__column-title" };
109620
- const _hoisted_19$19 = { class: "cn-deck-card__column-count" };
109621
- const _hoisted_20$11 = { class: "cn-deck-card__column-list" };
109622
- const _hoisted_21$$ = ["href"];
109623
- const _hoisted_22$_ = {
109879
+ const _hoisted_24$N = { class: "cn-deck-card__column-header" };
109880
+ const _hoisted_25$G = { class: "cn-deck-card__column-title" };
109881
+ const _hoisted_26$C = { class: "cn-deck-card__column-count" };
109882
+ const _hoisted_27$u = { class: "cn-deck-card__column-list" };
109883
+ const _hoisted_28$s = ["href"];
109884
+ const _hoisted_29$q = {
109624
109885
  key: 4,
109625
109886
  class: "cn-deck-card__action-error",
109626
109887
  role: "alert"
@@ -109704,37 +109965,69 @@ function render$7c(_ctx, _cache, $props, $setup, $data, $options) {
109704
109965
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$1_, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
109705
109966
  : ($data.cards.length === 0)
109706
109967
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$1R, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
109707
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1F, [
109708
- (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.miniColumns, (stack) => {
109709
- return (vue$1.openBlock(), vue$1.createElementBlock("section", {
109710
- key: stack.key,
109711
- class: "cn-deck-card__column"
109712
- }, [
109713
- vue$1.createElementVNode("header", _hoisted_17$1s, [
109714
- vue$1.createElementVNode("span", _hoisted_18$1f, vue$1.toDisplayString(stack.label), 1 /* TEXT */),
109715
- vue$1.createElementVNode("span", _hoisted_19$19, vue$1.toDisplayString(stack.cards.length), 1 /* TEXT */)
109716
- ]),
109717
- vue$1.createElementVNode("ul", _hoisted_20$11, [
109718
- (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(stack.cards, (card) => {
109719
- return (vue$1.openBlock(), vue$1.createElementBlock("li", {
109720
- key: $options.cardKey(card),
109721
- class: vue$1.normalizeClass(["cn-deck-card__row", { 'cn-deck-card__row--highlight': $options.isLinked(card) }])
109722
- }, [
109968
+ : ($options.isBoard)
109969
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1G, [
109970
+ vue$1.createElementVNode("ul", _hoisted_17$1s, [
109971
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($data.cards, (card) => {
109972
+ return (vue$1.openBlock(), vue$1.createElementBlock("li", {
109973
+ key: $options.cardKey(card),
109974
+ class: "cn-deck-card__row",
109975
+ "data-testid": "cn-deck-card-row"
109976
+ }, [
109977
+ vue$1.createElementVNode("span", _hoisted_18$1f, [
109723
109978
  vue$1.createElementVNode("a", {
109979
+ class: "cn-deck-card__row-title",
109724
109980
  href: $options.cardUrl(card),
109725
109981
  target: "_blank",
109726
- rel: "noopener",
109727
- class: "cn-deck-card__title"
109728
- }, vue$1.toDisplayString($options.cardTitle(card)), 9 /* TEXT, PROPS */, _hoisted_21$$)
109729
- ], 2 /* CLASS */))
109730
- }), 128 /* KEYED_FRAGMENT */))
109731
- ])
109732
- ]))
109733
- }), 128 /* KEYED_FRAGMENT */))
109734
- ]))
109982
+ rel: "noopener"
109983
+ }, vue$1.toDisplayString($options.cardTitle(card)), 9 /* TEXT, PROPS */, _hoisted_19$19),
109984
+ vue$1.createElementVNode("span", _hoisted_20$11, vue$1.toDisplayString($options.boardMetaOf(card)), 1 /* TEXT */)
109985
+ ]),
109986
+ ($options.firstLabel(card))
109987
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_21$$, vue$1.toDisplayString($options.firstLabel(card)), 1 /* TEXT */))
109988
+ : vue$1.createCommentVNode("v-if", true)
109989
+ ]))
109990
+ }), 128 /* KEYED_FRAGMENT */))
109991
+ ]),
109992
+ vue$1.createElementVNode("a", {
109993
+ class: "cn-deck-card__open",
109994
+ href: $props.deckAppUrl,
109995
+ target: "_blank",
109996
+ rel: "noopener",
109997
+ "data-testid": "cn-deck-card-open"
109998
+ }, vue$1.toDisplayString($props.openDeckLabel), 9 /* TEXT, PROPS */, _hoisted_22$_)
109999
+ ]))
110000
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_23$S, [
110001
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.miniColumns, (stack) => {
110002
+ return (vue$1.openBlock(), vue$1.createElementBlock("section", {
110003
+ key: stack.key,
110004
+ class: "cn-deck-card__column"
110005
+ }, [
110006
+ vue$1.createElementVNode("header", _hoisted_24$N, [
110007
+ vue$1.createElementVNode("span", _hoisted_25$G, vue$1.toDisplayString(stack.label), 1 /* TEXT */),
110008
+ vue$1.createElementVNode("span", _hoisted_26$C, vue$1.toDisplayString(stack.cards.length), 1 /* TEXT */)
110009
+ ]),
110010
+ vue$1.createElementVNode("ul", _hoisted_27$u, [
110011
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(stack.cards, (card) => {
110012
+ return (vue$1.openBlock(), vue$1.createElementBlock("li", {
110013
+ key: $options.cardKey(card),
110014
+ class: vue$1.normalizeClass(["cn-deck-card__row", { 'cn-deck-card__row--highlight': $options.isLinked(card) }])
110015
+ }, [
110016
+ vue$1.createElementVNode("a", {
110017
+ href: $options.cardUrl(card),
110018
+ target: "_blank",
110019
+ rel: "noopener",
110020
+ class: "cn-deck-card__title"
110021
+ }, vue$1.toDisplayString($options.cardTitle(card)), 9 /* TEXT, PROPS */, _hoisted_28$s)
110022
+ ], 2 /* CLASS */))
110023
+ }), 128 /* KEYED_FRAGMENT */))
110024
+ ])
110025
+ ]))
110026
+ }), 128 /* KEYED_FRAGMENT */))
110027
+ ]))
109735
110028
  ], 64 /* STABLE_FRAGMENT */)),
109736
110029
  ($data.actionError)
109737
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_22$_, vue$1.toDisplayString($data.actionError), 1 /* TEXT */))
110030
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_29$q, vue$1.toDisplayString($data.actionError), 1 /* TEXT */))
109738
110031
  : vue$1.createCommentVNode("v-if", true),
109739
110032
  ($data.pickerOpen)
109740
110033
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnDeckCardPicker, {
@@ -109791,7 +110084,7 @@ function render$7c(_ctx, _cache, $props, $setup, $data, $options) {
109791
110084
  }
109792
110085
 
109793
110086
  script$7d.render = render$7c;
109794
- script$7d.__scopeId = "data-v-d8cff1c2";
110087
+ script$7d.__scopeId = "data-v-68f05db0";
109795
110088
  const __sfc_main$77 = script$7d;
109796
110089
 
109797
110090
  /** Maximum assignee avatars shown before collapsing the rest into a +N overflow badge. */
@@ -109989,8 +110282,7 @@ var script$7c = {
109989
110282
  },
109990
110283
 
109991
110284
  cardLabels(card) {
109992
- const labels = card.labels ?? card.tags ?? [];
109993
- return Array.isArray(labels) ? labels : []
110285
+ return cardLabels(card)
109994
110286
  },
109995
110287
 
109996
110288
  chipText(label) {
@@ -110075,8 +110367,8 @@ var script$7c = {
110075
110367
  * @return {string} board (or board · stack) label, or '' when unknown
110076
110368
  */
110077
110369
  boardBadge(card) {
110078
- const board = card.boardTitle ?? card.board?.title ?? '';
110079
- const stack = card.stackTitle ?? card.stack?.title ?? '';
110370
+ const board = cardBoardTitle(card);
110371
+ const stack = cardStackTitle(card);
110080
110372
  if (board && stack) {
110081
110373
  return `${board} · ${stack}`
110082
110374
  }
@@ -110092,8 +110384,7 @@ var script$7c = {
110092
110384
  * @return {Array} assignee entries
110093
110385
  */
110094
110386
  cardAssignees(card) {
110095
- const raw = card.assignedUsers ?? card.assignees ?? card.users ?? [];
110096
- return Array.isArray(raw) ? raw : []
110387
+ return cardAssignees(card)
110097
110388
  },
110098
110389
 
110099
110390
  /**
@@ -110230,7 +110521,7 @@ const _hoisted_15$1Q = {
110230
110521
  key: 2,
110231
110522
  class: "cn-deck-tab__card-footer"
110232
110523
  };
110233
- const _hoisted_16$1E = {
110524
+ const _hoisted_16$1F = {
110234
110525
  key: 1,
110235
110526
  class: "cn-deck-tab__avatars"
110236
110527
  };
@@ -110366,7 +110657,7 @@ function render$7b(_ctx, _cache, $props, $setup, $data, $options) {
110366
110657
  }, 8 /* PROPS */, ["label", "variant"]))
110367
110658
  : vue$1.createCommentVNode("v-if", true),
110368
110659
  ($options.cardAssignees(card).length > 0)
110369
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1E, [
110660
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1F, [
110370
110661
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.visibleAssignees(card), (assignee) => {
110371
110662
  return (vue$1.openBlock(), vue$1.createBlock(_component_NcAvatar, {
110372
110663
  key: $options.assigneeKey(assignee),
@@ -110417,7 +110708,7 @@ function render$7b(_ctx, _cache, $props, $setup, $data, $options) {
110417
110708
  }
110418
110709
 
110419
110710
  script$7c.render = render$7b;
110420
- script$7c.__scopeId = "data-v-d4b5abb2";
110711
+ script$7c.__scopeId = "data-v-bf899238";
110421
110712
  const __sfc_main$76 = script$7c;
110422
110713
 
110423
110714
  /**
@@ -111065,7 +111356,7 @@ const _hoisted_15$1P = {
111065
111356
  key: 3,
111066
111357
  class: "cn-email-picker__panel"
111067
111358
  };
111068
- const _hoisted_16$1D = {
111359
+ const _hoisted_16$1E = {
111069
111360
  key: 2,
111070
111361
  class: "cn-email-picker__list cn-email-picker__list--messages"
111071
111362
  };
@@ -111234,7 +111525,7 @@ function render$79(_ctx, _cache, $props, $setup, $data, $options) {
111234
111525
  name: $options.t('nextcloud-vue', 'No messages'),
111235
111526
  description: $options.t('nextcloud-vue', 'This mailbox has no messages matching your filter.')
111236
111527
  }, null, 8 /* PROPS */, ["name", "description"]))
111237
- : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_16$1D, [
111528
+ : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_16$1E, [
111238
111529
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.filteredMessages, (msg) => {
111239
111530
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
111240
111531
  key: msg.id,
@@ -113113,7 +113404,7 @@ const _hoisted_13$22 = {
113113
113404
  };
113114
113405
  const _hoisted_14$1X = ["data-testid"];
113115
113406
  const _hoisted_15$1O = ["onUpdate:modelValue", "name", "data-testid"];
113116
- const _hoisted_16$1C = ["onUpdate:modelValue", "name", "data-testid"];
113407
+ const _hoisted_16$1D = ["onUpdate:modelValue", "name", "data-testid"];
113117
113408
  const _hoisted_17$1p = {
113118
113409
  key: 5,
113119
113410
  class: "cn-offline-queue__row-actions"
@@ -113247,7 +113538,7 @@ function render$77(_ctx, _cache, $props, $setup, $data, $options) {
113247
113538
  name: `merge-${operation.id}-${field.field}`,
113248
113539
  value: "server",
113249
113540
  "data-testid": `cn-offline-queue-merge-theirs-${field.field}`
113250
- }, null, 8 /* PROPS */, _hoisted_16$1C), [
113541
+ }, null, 8 /* PROPS */, _hoisted_16$1D), [
113251
113542
  [vue$1.vModelRadio, $data.mergeChoices[field.field]]
113252
113543
  ]),
113253
113544
  vue$1.createTextVNode(" " + vue$1.toDisplayString($options.t('nextcloud-vue', 'Theirs')) + ": " + vue$1.toDisplayString($options.asText(field.server)), 1 /* TEXT */)
@@ -114378,7 +114669,7 @@ const _hoisted_12$2g = ["onUpdate:modelValue", "data-testid"];
114378
114669
  const _hoisted_13$21 = { value: "" };
114379
114670
  const _hoisted_14$1W = { value: "yes" };
114380
114671
  const _hoisted_15$1N = { value: "no" };
114381
- const _hoisted_16$1B = { value: "na" };
114672
+ const _hoisted_16$1C = { value: "na" };
114382
114673
  const _hoisted_17$1o = ["onUpdate:modelValue", "data-testid"];
114383
114674
  const _hoisted_18$1c = ["data-testid"];
114384
114675
  const _hoisted_19$17 = {
@@ -114538,7 +114829,7 @@ function render$76(_ctx, _cache, $props, $setup, $data, $options) {
114538
114829
  vue$1.createElementVNode("option", _hoisted_13$21, vue$1.toDisplayString($options.t('nextcloud-vue', '— choose —')), 1 /* TEXT */),
114539
114830
  vue$1.createElementVNode("option", _hoisted_14$1W, vue$1.toDisplayString($options.t('nextcloud-vue', 'Yes')), 1 /* TEXT */),
114540
114831
  vue$1.createElementVNode("option", _hoisted_15$1N, vue$1.toDisplayString($options.t('nextcloud-vue', 'No')), 1 /* TEXT */),
114541
- vue$1.createElementVNode("option", _hoisted_16$1B, vue$1.toDisplayString($options.t('nextcloud-vue', 'N/A')), 1 /* TEXT */)
114832
+ vue$1.createElementVNode("option", _hoisted_16$1C, vue$1.toDisplayString($options.t('nextcloud-vue', 'N/A')), 1 /* TEXT */)
114542
114833
  ], 8 /* PROPS */, _hoisted_12$2g)), [
114543
114834
  [vue$1.vModelSelect, $data.answers[q.questionId].answer]
114544
114835
  ])
@@ -118327,7 +118618,8 @@ var script$71 = {
118327
118618
  const object = {
118328
118619
  ...entry,
118329
118620
  name: node.basename,
118330
- modified: node.mtime,
118621
+ // A template drops an object value, so the Date is handed over as ISO text.
118622
+ modified: node.mtime instanceof Date ? node.mtime.toISOString() : node.mtime,
118331
118623
  size: this.formatSize(node.size),
118332
118624
  type: this.typeLabelOf(node),
118333
118625
  ...(owner ? { owner } : {}),
@@ -119381,7 +119673,7 @@ const _hoisted_14$1V = {
119381
119673
  class: "cn-files-browser__review-sub"
119382
119674
  };
119383
119675
  const _hoisted_15$1M = ["aria-label"];
119384
- const _hoisted_16$1A = { class: "cn-files-browser__review-legend" };
119676
+ const _hoisted_16$1B = { class: "cn-files-browser__review-legend" };
119385
119677
  const _hoisted_17$1n = {
119386
119678
  key: 4,
119387
119679
  class: "cn-files-browser__facets",
@@ -119410,15 +119702,15 @@ const _hoisted_26$B = {
119410
119702
  class: "cn-files-browser__col-icon",
119411
119703
  scope: "col"
119412
119704
  };
119413
- const _hoisted_27$s = { class: "hidden-visually" };
119414
- const _hoisted_28$q = ["aria-sort", "data-testid"];
119415
- const _hoisted_29$o = ["onClick"];
119416
- const _hoisted_30$n = {
119705
+ const _hoisted_27$t = { class: "hidden-visually" };
119706
+ const _hoisted_28$r = ["aria-sort", "data-testid"];
119707
+ const _hoisted_29$p = ["onClick"];
119708
+ const _hoisted_30$o = {
119417
119709
  class: "cn-files-browser__col-actions",
119418
119710
  scope: "col"
119419
119711
  };
119420
- const _hoisted_31$l = { class: "hidden-visually" };
119421
- const _hoisted_32$l = {
119712
+ const _hoisted_31$m = { class: "hidden-visually" };
119713
+ const _hoisted_32$m = {
119422
119714
  key: 0,
119423
119715
  class: "cn-files-browser__group",
119424
119716
  "data-testid": "cn-files-browser-group"
@@ -119444,7 +119736,7 @@ const _hoisted_43$9 = {
119444
119736
  key: 0,
119445
119737
  class: "cn-files-browser__no-match-row"
119446
119738
  };
119447
- const _hoisted_44$9 = ["colspan"];
119739
+ const _hoisted_44$8 = ["colspan"];
119448
119740
  const _hoisted_45$7 = ["data-name", "onClick", "onAuxclick"];
119449
119741
  const _hoisted_46$7 = {
119450
119742
  key: 0,
@@ -119774,7 +120066,7 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
119774
120066
  ])
119775
120067
  }), 128 /* KEYED_FRAGMENT */))
119776
120068
  ], 8 /* PROPS */, _hoisted_15$1M),
119777
- vue$1.createElementVNode("ul", _hoisted_16$1A, [
120069
+ vue$1.createElementVNode("ul", _hoisted_16$1B, [
119778
120070
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.review.segments, (segment) => {
119779
120071
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
119780
120072
  key: segment.value,
@@ -119932,7 +120224,7 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
119932
120224
  ]))
119933
120225
  : vue$1.createCommentVNode("v-if", true),
119934
120226
  vue$1.createElementVNode("th", _hoisted_26$B, [
119935
- vue$1.createElementVNode("span", _hoisted_27$s, vue$1.toDisplayString($options.t('nextcloud-vue', 'Type')), 1 /* TEXT */)
120227
+ vue$1.createElementVNode("span", _hoisted_27$t, vue$1.toDisplayString($options.t('nextcloud-vue', 'Type')), 1 /* TEXT */)
119936
120228
  ]),
119937
120229
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.renderedColumns, (column) => {
119938
120230
  return (vue$1.openBlock(), vue$1.createElementBlock("th", {
@@ -119956,14 +120248,14 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
119956
120248
  size: 16
119957
120249
  }))
119958
120250
  : vue$1.createCommentVNode("v-if", true)
119959
- ], 8 /* PROPS */, _hoisted_29$o))
120251
+ ], 8 /* PROPS */, _hoisted_29$p))
119960
120252
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
119961
120253
  vue$1.createTextVNode(vue$1.toDisplayString($options.columnLabel(column)), 1 /* TEXT */)
119962
120254
  ], 64 /* STABLE_FRAGMENT */))
119963
- ], 10 /* CLASS, PROPS */, _hoisted_28$q))
120255
+ ], 10 /* CLASS, PROPS */, _hoisted_28$r))
119964
120256
  }), 128 /* KEYED_FRAGMENT */)),
119965
- vue$1.createElementVNode("th", _hoisted_30$n, [
119966
- vue$1.createElementVNode("span", _hoisted_31$l, vue$1.toDisplayString($options.t('nextcloud-vue', 'Actions')), 1 /* TEXT */)
120257
+ vue$1.createElementVNode("th", _hoisted_30$o, [
120258
+ vue$1.createElementVNode("span", _hoisted_31$m, vue$1.toDisplayString($options.t('nextcloud-vue', 'Actions')), 1 /* TEXT */)
119967
120259
  ])
119968
120260
  ])
119969
120261
  ]),
@@ -119971,7 +120263,7 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
119971
120263
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.displayRows, ({ key, group, node }) => {
119972
120264
  return (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: key }, [
119973
120265
  group
119974
- ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_32$l, [
120266
+ ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_32$m, [
119975
120267
  vue$1.createElementVNode("th", {
119976
120268
  colspan: $options.columnCount,
119977
120269
  scope: "rowgroup",
@@ -120216,7 +120508,7 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
120216
120508
  colspan: $options.columnCount,
120217
120509
  class: "cn-files-browser__no-match",
120218
120510
  "data-testid": "cn-files-browser-no-match"
120219
- }, vue$1.toDisplayString($options.t('nextcloud-vue', 'No files match the filter.')), 9 /* TEXT, PROPS */, _hoisted_44$9)
120511
+ }, vue$1.toDisplayString($options.t('nextcloud-vue', 'No files match the filter.')), 9 /* TEXT, PROPS */, _hoisted_44$8)
120220
120512
  ]))
120221
120513
  : vue$1.createCommentVNode("v-if", true),
120222
120514
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($props.linkedItems, (item) => {
@@ -120553,7 +120845,7 @@ function render$70(_ctx, _cache, $props, $setup, $data, $options) {
120553
120845
  }
120554
120846
 
120555
120847
  script$71.render = render$70;
120556
- script$71.__scopeId = "data-v-23ff0221";
120848
+ script$71.__scopeId = "data-v-5246192c";
120557
120849
  const __sfc_main$6X = script$71;
120558
120850
 
120559
120851
  /**
@@ -122306,7 +122598,7 @@ const _hoisted_13$1$ = {
122306
122598
  };
122307
122599
  const _hoisted_14$1U = { class: "cn-flow-card__row-header" };
122308
122600
  const _hoisted_15$1L = ["href"];
122309
- const _hoisted_16$1z = ["aria-label"];
122601
+ const _hoisted_16$1A = ["aria-label"];
122310
122602
  const _hoisted_17$1m = {
122311
122603
  key: 0,
122312
122604
  class: "cn-flow-card__subtitle"
@@ -122395,7 +122687,7 @@ function render$6_(_ctx, _cache, $props, $setup, $data, $options) {
122395
122687
  vue$1.createElementVNode("span", {
122396
122688
  class: vue$1.normalizeClass(["cn-flow-card__enabled", $options.enabledClass(op)]),
122397
122689
  "aria-label": $options.enabledLabel(op)
122398
- }, null, 10 /* CLASS, PROPS */, _hoisted_16$1z)
122690
+ }, null, 10 /* CLASS, PROPS */, _hoisted_16$1A)
122399
122691
  ]),
122400
122692
  ($options.rowMeta(op))
122401
122693
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$1m, vue$1.toDisplayString($options.rowMeta(op)), 1 /* TEXT */))
@@ -123630,7 +123922,7 @@ const _hoisted_13$1_ = {
123630
123922
  };
123631
123923
  const _hoisted_14$1T = { class: "cn-forms-card__row-header" };
123632
123924
  const _hoisted_15$1K = ["href"];
123633
- const _hoisted_16$1y = {
123925
+ const _hoisted_16$1z = {
123634
123926
  key: 0,
123635
123927
  class: "cn-forms-card__subtitle"
123636
123928
  };
@@ -123718,7 +124010,7 @@ function render$6X(_ctx, _cache, $props, $setup, $data, $options) {
123718
124010
  }, vue$1.toDisplayString($options.statusLabel(form)), 3 /* TEXT, CLASS */)
123719
124011
  ]),
123720
124012
  ($options.rowMeta(form))
123721
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1y, vue$1.toDisplayString($options.rowMeta(form)), 1 /* TEXT */))
124013
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1z, vue$1.toDisplayString($options.rowMeta(form)), 1 /* TEXT */))
123722
124014
  : vue$1.createCommentVNode("v-if", true)
123723
124015
  ], 2 /* CLASS */))
123724
124016
  }), 128 /* KEYED_FRAGMENT */))
@@ -124169,7 +124461,7 @@ const _hoisted_12$2c = { class: "cn-form-picker__mode-row" };
124169
124461
  const _hoisted_13$1Z = ["model-value"];
124170
124462
  const _hoisted_14$1S = { class: "cn-form-picker__mode-row" };
124171
124463
  const _hoisted_15$1J = ["model-value", "disabled"];
124172
- const _hoisted_16$1x = {
124464
+ const _hoisted_16$1y = {
124173
124465
  key: 0,
124174
124466
  class: "cn-form-picker__mode-hint"
124175
124467
  };
@@ -124296,7 +124588,7 @@ function render$6V(_ctx, _cache, $props, $setup, $data, $options) {
124296
124588
  }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_15$1J),
124297
124589
  vue$1.createTextVNode(" " + vue$1.toDisplayString($props.linkSubmissionModeLabel) + " ", 1 /* TEXT */),
124298
124590
  ($options.submissionsAvailable === 0)
124299
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1x, vue$1.toDisplayString($props.noSubmissionsHintLabel), 1 /* TEXT */))
124591
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$1y, vue$1.toDisplayString($props.noSubmissionsHintLabel), 1 /* TEXT */))
124300
124592
  : vue$1.createCommentVNode("v-if", true)
124301
124593
  ])
124302
124594
  ]))
@@ -125264,7 +125556,7 @@ const _hoisted_14$1R = {
125264
125556
  class: "cn-maps-card__view-all"
125265
125557
  };
125266
125558
  const _hoisted_15$1I = ["href"];
125267
- const _hoisted_16$1w = {
125559
+ const _hoisted_16$1x = {
125268
125560
  key: 0,
125269
125561
  class: "cn-maps-card__empty"
125270
125562
  };
@@ -125373,7 +125665,7 @@ function render$6T(_ctx, _cache, $props, $setup, $data, $options) {
125373
125665
  ], 64 /* STABLE_FRAGMENT */))
125374
125666
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 3 }, [
125375
125667
  ($data.degraded)
125376
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1w, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
125668
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$1x, vue$1.toDisplayString($data.degraded), 1 /* TEXT */))
125377
125669
  : ($data.points.length === 0)
125378
125670
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_17$1l, vue$1.toDisplayString($props.emptyLabel), 1 /* TEXT */))
125379
125671
  : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_18$1a, [
@@ -126216,7 +126508,7 @@ const _hoisted_15$1H = {
126216
126508
  key: 0,
126217
126509
  class: "cn-maps-tab__comment"
126218
126510
  };
126219
- const _hoisted_16$1v = ["title"];
126511
+ const _hoisted_16$1w = ["title"];
126220
126512
 
126221
126513
  function render$6Q(_ctx, _cache, $props, $setup, $data, $options) {
126222
126514
  const _component_AlertCircleOutline = vue$1.resolveComponent("AlertCircleOutline");
@@ -126385,7 +126677,7 @@ function render$6Q(_ctx, _cache, $props, $setup, $data, $options) {
126385
126677
  }, [
126386
126678
  vue$1.createVNode(_component_MapMarker, { size: 11 }),
126387
126679
  vue$1.createTextVNode(" " + vue$1.toDisplayString($options.coordsLabel(point)), 1 /* TEXT */)
126388
- ], 8 /* PROPS */, _hoisted_16$1v)
126680
+ ], 8 /* PROPS */, _hoisted_16$1w)
126389
126681
  ]),
126390
126682
  key: "0"
126391
126683
  }
@@ -128229,6 +128521,8 @@ var script$6N = {
128229
128521
  return note.actorId || note.author || ''
128230
128522
  },
128231
128523
 
128524
+ initialsOf: initialsOf$2,
128525
+
128232
128526
  getNoteAuthorName(note) {
128233
128527
  return note.actorDisplayName || note.author || 'Unknown'
128234
128528
  },
@@ -128441,23 +128735,27 @@ const _hoisted_7$3J = {
128441
128735
  class: "cn-notes-card__list"
128442
128736
  };
128443
128737
  const _hoisted_8$3l = ["aria-label"];
128444
- const _hoisted_9$32 = { class: "cn-notes-card__note-header" };
128445
- const _hoisted_10$2I = { class: "cn-notes-card__author" };
128446
- const _hoisted_11$2q = {
128738
+ const _hoisted_9$32 = {
128739
+ class: "cn-notes-card__initials",
128740
+ "aria-hidden": "true"
128741
+ };
128742
+ const _hoisted_10$2I = { class: "cn-notes-card__note-header" };
128743
+ const _hoisted_11$2q = { class: "cn-notes-card__author" };
128744
+ const _hoisted_12$29 = {
128447
128745
  key: 1,
128448
128746
  class: "cn-notes-card__author cn-notes-card__author--self"
128449
128747
  };
128450
- const _hoisted_12$29 = { class: "cn-notes-card__time" };
128451
- const _hoisted_13$1W = {
128748
+ const _hoisted_13$1W = { class: "cn-notes-card__time" };
128749
+ const _hoisted_14$1P = {
128452
128750
  key: 0,
128453
128751
  class: "cn-notes-card__visibility"
128454
128752
  };
128455
- const _hoisted_14$1P = {
128753
+ const _hoisted_15$1G = {
128456
128754
  key: 1,
128457
128755
  class: "cn-notes-card__quote",
128458
128756
  "data-testid": "cn-notes-card-quote"
128459
128757
  };
128460
- const _hoisted_15$1G = { class: "cn-notes-card__body" };
128758
+ const _hoisted_16$1v = { class: "cn-notes-card__body" };
128461
128759
 
128462
128760
  function render$6M(_ctx, _cache, $props, $setup, $data, $options) {
128463
128761
  const _component_NotePlusOutline = vue$1.resolveComponent("NotePlusOutline");
@@ -128557,7 +128855,8 @@ function render$6M(_ctx, _cache, $props, $setup, $data, $options) {
128557
128855
  key: row.note.id,
128558
128856
  class: vue$1.normalizeClass(["cn-notes-card__note", { 'cn-notes-card__note--reply': row.isReply }])
128559
128857
  }, [
128560
- vue$1.createElementVNode("div", _hoisted_9$32, [
128858
+ vue$1.createElementVNode("span", _hoisted_9$32, vue$1.toDisplayString($options.initialsOf($options.getNoteAuthorName(row.note))), 1 /* TEXT */),
128859
+ vue$1.createElementVNode("div", _hoisted_10$2I, [
128561
128860
  (!$options.isCurrentUser(row.note))
128562
128861
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnUserActionMenu, {
128563
128862
  key: 0,
@@ -128565,15 +128864,15 @@ function render$6M(_ctx, _cache, $props, $setup, $data, $options) {
128565
128864
  displayName: $options.getNoteAuthorName(row.note)
128566
128865
  }, {
128567
128866
  default: vue$1.withCtx(() => [
128568
- vue$1.createElementVNode("strong", _hoisted_10$2I, vue$1.toDisplayString($options.getNoteAuthorName(row.note)), 1 /* TEXT */)
128867
+ vue$1.createElementVNode("strong", _hoisted_11$2q, vue$1.toDisplayString($options.getNoteAuthorName(row.note)), 1 /* TEXT */)
128569
128868
  ]),
128570
128869
  _: 2 /* DYNAMIC */
128571
128870
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["userId", "displayName"]))
128572
- : (vue$1.openBlock(), vue$1.createElementBlock("strong", _hoisted_11$2q, vue$1.toDisplayString($options.getNoteAuthorName(row.note)), 1 /* TEXT */)),
128573
- vue$1.createElementVNode("span", _hoisted_12$29, vue$1.toDisplayString($options.formatDate(row.note.creationDateTime || row.note.created || row.note.createdAt)), 1 /* TEXT */)
128871
+ : (vue$1.openBlock(), vue$1.createElementBlock("strong", _hoisted_12$29, vue$1.toDisplayString($options.getNoteAuthorName(row.note)), 1 /* TEXT */)),
128872
+ vue$1.createElementVNode("span", _hoisted_13$1W, vue$1.toDisplayString($options.formatDate(row.note.creationDateTime || row.note.created || row.note.createdAt)), 1 /* TEXT */)
128574
128873
  ]),
128575
128874
  ($options.visibilityShown)
128576
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_13$1W, [
128875
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$1P, [
128577
128876
  vue$1.createVNode(_component_CnVisibilityChip, {
128578
128877
  visibility: row.note.visibility
128579
128878
  }, null, 8 /* PROPS */, ["visibility"]),
@@ -128594,9 +128893,9 @@ function render$6M(_ctx, _cache, $props, $setup, $data, $options) {
128594
128893
  ]))
128595
128894
  : vue$1.createCommentVNode("v-if", true),
128596
128895
  (row.quote)
128597
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_14$1P, vue$1.toDisplayString(row.quote), 1 /* TEXT */))
128896
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_15$1G, vue$1.toDisplayString(row.quote), 1 /* TEXT */))
128598
128897
  : vue$1.createCommentVNode("v-if", true),
128599
- vue$1.createElementVNode("p", _hoisted_15$1G, [
128898
+ vue$1.createElementVNode("p", _hoisted_16$1v, [
128600
128899
  vue$1.createVNode(_component_CnNoteBody, {
128601
128900
  message: row.note.message || row.note.content || '',
128602
128901
  record: $options.isFileSource || $options.isSourceMode ? null : $options.record
@@ -128678,7 +128977,7 @@ function render$6M(_ctx, _cache, $props, $setup, $data, $options) {
128678
128977
  }
128679
128978
 
128680
128979
  script$6N.render = render$6M;
128681
- script$6N.__scopeId = "data-v-c992fa30";
128980
+ script$6N.__scopeId = "data-v-b206c0bc";
128682
128981
  const __sfc_main$6H = script$6N;
128683
128982
 
128684
128983
  var script$6M = {
@@ -138010,20 +138309,33 @@ function ocsData(res) {
138010
138309
  return (res && res.data && res.data.ocs && res.data.ocs.data) || null
138011
138310
  }
138012
138311
 
138312
+ /** The most groups read, so a server that ignores the offset cannot loop forever. */
138313
+ const MAX_GROUPS = 5000;
138314
+
138013
138315
  /**
138014
138316
  * The groups, with their member counts.
138015
138317
  *
138016
138318
  * @param {object} axios The axios instance.
138017
- * @param {{search?: string, limit?: number}} [options] Narrowing.
138319
+ * @param {{search?: string, limit?: number}} [options] Narrowing; `limit` is the page size.
138018
138320
  * @return {Promise<Array<{id: string, name: string, count: number}>>}
138019
138321
  * @spec openspec/changes/index-groups-users-source/specs/index-page/spec.md#requirement-an-index-page-can-list-nextcloud-groups-and-their-members
138020
138322
  */
138021
138323
  async function fetchGroups(axios, options = {}) {
138022
- const res = await axios.get(router.generateOcsUrl('cloud/groups/details'), {
138023
- params: { search: options.search || '', limit: options.limit || 200, format: 'json' },
138024
- headers: OCS_HEADERS,
138025
- });
138026
- const groups = (ocsData(res) && ocsData(res).groups) || [];
138324
+ const limit = options.limit || 200;
138325
+ // Every page, while a page comes back full: one page cut an instance with
138326
+ // more groups than the limit off before its last ones (DqAfdelingen).
138327
+ const groups = [];
138328
+ for (let offset = 0; offset < MAX_GROUPS; offset += limit) {
138329
+ const res = await axios.get(router.generateOcsUrl('cloud/groups/details'), {
138330
+ params: { search: options.search || '', limit, offset, format: 'json' },
138331
+ headers: OCS_HEADERS,
138332
+ });
138333
+ const batch = (ocsData(res) && ocsData(res).groups) || [];
138334
+ groups.push(...batch);
138335
+ if (batch.length < limit) {
138336
+ break
138337
+ }
138338
+ }
138027
138339
  return groups.map((group) => ({
138028
138340
  id: String(group.id),
138029
138341
  name: group.displayname || String(group.id),
@@ -154984,18 +155296,18 @@ const _hoisted_25$D = {
154984
155296
  class: "cn-form-dialog__select-wrapper"
154985
155297
  };
154986
155298
  const _hoisted_26$A = { class: "cn-form-dialog__option" };
154987
- const _hoisted_27$r = { class: "cn-form-dialog__option" };
154988
- const _hoisted_28$p = {
155299
+ const _hoisted_27$s = { class: "cn-form-dialog__option" };
155300
+ const _hoisted_28$q = {
154989
155301
  key: 11,
154990
155302
  class: "cn-form-dialog__select-wrapper"
154991
155303
  };
154992
- const _hoisted_29$n = { class: "cn-form-dialog__option" };
154993
- const _hoisted_30$m = { class: "cn-form-dialog__option" };
154994
- const _hoisted_31$k = {
155304
+ const _hoisted_29$o = { class: "cn-form-dialog__option" };
155305
+ const _hoisted_30$n = { class: "cn-form-dialog__option" };
155306
+ const _hoisted_31$l = {
154995
155307
  key: 12,
154996
155308
  class: "cn-form-dialog__switch-wrapper"
154997
155309
  };
154998
- const _hoisted_32$k = {
155310
+ const _hoisted_32$l = {
154999
155311
  key: 13,
155000
155312
  class: "cn-form-dialog__select-wrapper"
155001
155313
  };
@@ -155034,7 +155346,7 @@ const _hoisted_43$8 = {
155034
155346
  key: 21,
155035
155347
  class: "cn-form-dialog__icon-wrapper"
155036
155348
  };
155037
- const _hoisted_44$8 = ["for"];
155349
+ const _hoisted_44$7 = ["for"];
155038
155350
  const _hoisted_45$6 = {
155039
155351
  key: 23,
155040
155352
  class: "cn-form-dialog__assigned",
@@ -155771,7 +156083,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155771
156083
  : {
155772
156084
  name: "selected-option",
155773
156085
  fn: vue$1.withCtx((optionProps) => [
155774
- vue$1.createElementVNode("span", _hoisted_27$r, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
156086
+ vue$1.createElementVNode("span", _hoisted_27$s, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
155775
156087
  ]),
155776
156088
  key: "3"
155777
156089
  }
@@ -155788,7 +156100,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155788
156100
  }, null, 8 /* PROPS */, ["id", "text", "more", "help", "label", "error"])
155789
156101
  ]))
155790
156102
  : (field.widget === 'tags')
155791
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$p, [
156103
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$q, [
155792
156104
  vue$1.withDirectives((vue$1.openBlock(), vue$1.createBlock(_component_NcSelect, {
155793
156105
  inputId: 'cn-form-' + field.key,
155794
156106
  inputLabel: $options.fieldLabelText(field),
@@ -155816,7 +156128,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155816
156128
  : {
155817
156129
  name: "option",
155818
156130
  fn: vue$1.withCtx((optionProps) => [
155819
- vue$1.createElementVNode("span", _hoisted_29$n, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
156131
+ vue$1.createElementVNode("span", _hoisted_29$o, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
155820
156132
  ]),
155821
156133
  key: "1"
155822
156134
  },
@@ -155831,7 +156143,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155831
156143
  : {
155832
156144
  name: "selected-option",
155833
156145
  fn: vue$1.withCtx((optionProps) => [
155834
- vue$1.createElementVNode("span", _hoisted_30$m, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
156146
+ vue$1.createElementVNode("span", _hoisted_30$n, vue$1.toDisplayString($options.optionText(optionProps)), 1 /* TEXT */)
155835
156147
  ]),
155836
156148
  key: "3"
155837
156149
  }
@@ -155848,7 +156160,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155848
156160
  }, null, 8 /* PROPS */, ["id", "text", "more", "help", "label", "error"])
155849
156161
  ]))
155850
156162
  : (field.widget === 'checkbox')
155851
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$k, [
156163
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_31$l, [
155852
156164
  vue$1.createVNode(_component_NcCheckboxRadioSwitch, {
155853
156165
  modelValue: !!$data.formData[field.key],
155854
156166
  disabled: field.readOnly,
@@ -155870,7 +156182,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
155870
156182
  }, null, 8 /* PROPS */, ["id", "text", "more", "help", "label", "error"])
155871
156183
  ]))
155872
156184
  : (field.widget === 'date' || field.widget === 'datetime')
155873
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$k, [
156185
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$l, [
155874
156186
  (!$options.showsOuterLabel(field))
155875
156187
  ? (vue$1.openBlock(), vue$1.createElementBlock("label", {
155876
156188
  key: 0,
@@ -156055,7 +156367,7 @@ function render$6c(_ctx, _cache, $props, $setup, $data, $options) {
156055
156367
  key: 0,
156056
156368
  for: 'cn-form-' + field.key,
156057
156369
  class: "cn-form-dialog__label"
156058
- }, vue$1.toDisplayString(field.label) + vue$1.toDisplayString($options.requiredSuffix(field)), 9 /* TEXT, PROPS */, _hoisted_44$8))
156370
+ }, vue$1.toDisplayString(field.label) + vue$1.toDisplayString($options.requiredSuffix(field)), 9 /* TEXT, PROPS */, _hoisted_44$7))
156059
156371
  : vue$1.createCommentVNode("v-if", true),
156060
156372
  vue$1.createVNode(_component_CnIconBrowser, {
156061
156373
  value: $data.formData[field.key] != null ? String($data.formData[field.key]) : null,
@@ -165876,21 +166188,21 @@ const _hoisted_25$C = {
165876
166188
  "data-testid": "cn-related-static-row"
165877
166189
  };
165878
166190
  const _hoisted_26$z = { class: "cn-related-objects-widget__label" };
165879
- const _hoisted_27$q = {
166191
+ const _hoisted_27$r = {
165880
166192
  key: 0,
165881
166193
  class: "cn-related-objects-widget__meta"
165882
166194
  };
165883
- const _hoisted_28$o = ["onClick", "onKeydown"];
165884
- const _hoisted_29$m = { class: "cn-related-objects-widget__label" };
165885
- const _hoisted_30$l = {
166195
+ const _hoisted_28$p = ["onClick", "onKeydown"];
166196
+ const _hoisted_29$n = { class: "cn-related-objects-widget__label" };
166197
+ const _hoisted_30$m = {
165886
166198
  key: 0,
165887
166199
  class: "cn-related-objects-widget__meta"
165888
166200
  };
165889
- const _hoisted_31$j = {
166201
+ const _hoisted_31$k = {
165890
166202
  key: 1,
165891
166203
  class: "cn-related-objects-widget__detail"
165892
166204
  };
165893
- const _hoisted_32$j = {
166205
+ const _hoisted_32$k = {
165894
166206
  key: 3,
165895
166207
  class: "cn-related-objects-widget__children",
165896
166208
  "data-testid": "cn-related-children"
@@ -165923,7 +166235,7 @@ const _hoisted_43$7 = {
165923
166235
  key: 0,
165924
166236
  class: "cn-related-objects-widget__meta"
165925
166237
  };
165926
- const _hoisted_44$7 = {
166238
+ const _hoisted_44$6 = {
165927
166239
  key: 1,
165928
166240
  class: "cn-related-objects-widget__group"
165929
166241
  };
@@ -166148,7 +166460,7 @@ function render$64(_ctx, _cache, $props, $setup, $data, $options) {
166148
166460
  }, null, 8 /* PROPS */, ["name"]),
166149
166461
  vue$1.createElementVNode("span", _hoisted_26$z, vue$1.toDisplayString(item.label), 1 /* TEXT */),
166150
166462
  (item.meta)
166151
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$q, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
166463
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$r, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
166152
166464
  : vue$1.createCommentVNode("v-if", true)
166153
166465
  ]))
166154
166466
  : (vue$1.openBlock(), vue$1.createElementBlock("div", {
@@ -166164,16 +166476,16 @@ function render$64(_ctx, _cache, $props, $setup, $data, $options) {
166164
166476
  size: 20,
166165
166477
  class: "cn-related-objects-widget__icon"
166166
166478
  }, null, 8 /* PROPS */, ["name"]),
166167
- vue$1.createElementVNode("span", _hoisted_29$m, vue$1.toDisplayString(item.label), 1 /* TEXT */),
166479
+ vue$1.createElementVNode("span", _hoisted_29$n, vue$1.toDisplayString(item.label), 1 /* TEXT */),
166168
166480
  (item.meta)
166169
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$l, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
166481
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$m, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
166170
166482
  : vue$1.createCommentVNode("v-if", true),
166171
166483
  (item.detail && $options.isExpanded($options.activeGroup.key, item))
166172
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_31$j, vue$1.toDisplayString(item.detail), 1 /* TEXT */))
166484
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_31$k, vue$1.toDisplayString(item.detail), 1 /* TEXT */))
166173
166485
  : vue$1.createCommentVNode("v-if", true)
166174
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_28$o)),
166486
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_28$p)),
166175
166487
  (item.children && item.children.length)
166176
- ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_32$j, [
166488
+ ? (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_32$k, [
166177
166489
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(item.children, (child) => {
166178
166490
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
166179
166491
  key: child.key
@@ -166278,7 +166590,7 @@ function render$64(_ctx, _cache, $props, $setup, $data, $options) {
166278
166590
  ]))
166279
166591
  : vue$1.createCommentVNode("v-if", true),
166280
166592
  ($props.showFiles && $data.fileItems.length)
166281
- ? (vue$1.openBlock(), vue$1.createElementBlock("section", _hoisted_44$7, [
166593
+ ? (vue$1.openBlock(), vue$1.createElementBlock("section", _hoisted_44$6, [
166282
166594
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent(_ctx.innerHeadingTag), { class: "cn-related-objects-widget__group-title cn-inner-heading" }, {
166283
166595
  default: vue$1.withCtx(() => [
166284
166596
  vue$1.createTextVNode(vue$1.toDisplayString($props.filesLabel) + " ", 1 /* TEXT */),
@@ -167361,7 +167673,7 @@ const _hoisted_26$y = {
167361
167673
  class: "cn-retention__outcome",
167362
167674
  "data-testid": "cn-retention-outcome"
167363
167675
  };
167364
- const _hoisted_27$p = { key: 0 };
167676
+ const _hoisted_27$q = { key: 0 };
167365
167677
 
167366
167678
  function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167367
167679
  const _component_Refresh = vue$1.resolveComponent("Refresh");
@@ -167505,6 +167817,10 @@ function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167505
167817
  key: hold.id,
167506
167818
  class: "cn-retention__row"
167507
167819
  }, [
167820
+ _cache[2] || (_cache[2] = vue$1.createElementVNode("span", {
167821
+ class: "cn-retention__mark cn-retention__mark--hold",
167822
+ "aria-hidden": "true"
167823
+ }, "LH", -1 /* CACHED */)),
167508
167824
  vue$1.createElementVNode("span", _hoisted_13$1D, [
167509
167825
  vue$1.createElementVNode("span", _hoisted_14$1x, vue$1.toDisplayString(hold.reason || $options.t('nextcloud-vue', 'Legal hold')), 1 /* TEXT */),
167510
167826
  vue$1.createElementVNode("span", _hoisted_15$1r, vue$1.toDisplayString($options.t('nextcloud-vue', 'Placed on {date} by {by}', { date: hold.placedDate, by: hold.placedBy })), 1 /* TEXT */)
@@ -167517,6 +167833,10 @@ function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167517
167833
  }), 128 /* KEYED_FRAGMENT */)),
167518
167834
  ($options.holds.length === 0)
167519
167835
  ? (vue$1.openBlock(), vue$1.createElementBlock("li", _hoisted_16$1h, [
167836
+ _cache[3] || (_cache[3] = vue$1.createElementVNode("span", {
167837
+ class: "cn-retention__mark cn-retention__mark--hold",
167838
+ "aria-hidden": "true"
167839
+ }, "LH", -1 /* CACHED */)),
167520
167840
  vue$1.createElementVNode("span", _hoisted_17$19, [
167521
167841
  vue$1.createElementVNode("span", _hoisted_18$$, vue$1.toDisplayString($options.t('nextcloud-vue', 'No legal hold')), 1 /* TEXT */),
167522
167842
  vue$1.createElementVNode("span", _hoisted_19$Y, vue$1.toDisplayString($options.t('nextcloud-vue', 'If an objection or appeal runs, destruction is suspended')), 1 /* TEXT */)
@@ -167539,6 +167859,10 @@ function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167539
167859
  })),
167540
167860
  vue$1.createElementVNode("ul", _hoisted_21$Q, [
167541
167861
  vue$1.createElementVNode("li", _hoisted_22$P, [
167862
+ _cache[4] || (_cache[4] = vue$1.createElementVNode("span", {
167863
+ class: "cn-retention__mark",
167864
+ "aria-hidden": "true"
167865
+ }, "ED", -1 /* CACHED */)),
167542
167866
  vue$1.createElementVNode("span", _hoisted_23$L, [
167543
167867
  vue$1.createElementVNode("span", _hoisted_24$H, vue$1.toDisplayString($options.transfers ? $options.t('nextcloud-vue', 'Goes to the e-Depot') : $options.t('nextcloud-vue', 'Not applicable')), 1 /* TEXT */),
167544
167868
  vue$1.createElementVNode("span", _hoisted_25$B, vue$1.toDisplayString($options.transfers ? $options.t('nextcloud-vue', 'After the retention period the record is transferred') : $options.t('nextcloud-vue', 'Only records appraised to keep go to the e-Depot')), 1 /* TEXT */)
@@ -167561,7 +167885,7 @@ function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167561
167885
  })),
167562
167886
  vue$1.createElementVNode("p", null, vue$1.toDisplayString($options.t('nextcloud-vue', 'Handed over as {kind} on {at} by {by}.', { kind: String($options.outcome.kind ?? ''), at: String($options.outcome.at ?? ''), by: String($options.outcome.by ?? '') })), 1 /* TEXT */),
167563
167887
  ($options.outcome.transferListUuid)
167564
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_27$p, vue$1.toDisplayString($options.t('nextcloud-vue', 'Transfer list')) + ": " + vue$1.toDisplayString($options.outcome.transferListUuid), 1 /* TEXT */))
167888
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_27$q, vue$1.toDisplayString($options.t('nextcloud-vue', 'Transfer list')) + ": " + vue$1.toDisplayString($options.outcome.transferListUuid), 1 /* TEXT */))
167565
167889
  : vue$1.createCommentVNode("v-if", true)
167566
167890
  ]))
167567
167891
  : vue$1.createCommentVNode("v-if", true)
@@ -167570,7 +167894,7 @@ function render$61(_ctx, _cache, $props, $setup, $data, $options) {
167570
167894
  }
167571
167895
 
167572
167896
  script$62.render = render$61;
167573
- script$62.__scopeId = "data-v-5415dbb4";
167897
+ script$62.__scopeId = "data-v-912351be";
167574
167898
  const __sfc_main$5Y = script$62;
167575
167899
 
167576
167900
  // SPDX-FileCopyrightText: 2026 Conduction B.V.
@@ -175638,10 +175962,13 @@ function singleEqualityOf(filter) {
175638
175962
  * @param {Array<{key: (string|number), filter: object}>} options.entries The filters to count, each under its own key.
175639
175963
  * @param {object} [options.baseFilter] A filter every count is narrowed by (the page's fixed filter).
175640
175964
  * @param {object} [options.ctx] Token-resolution context for the filters.
175965
+ * @param {string} [options.via] `'list'` counts every entry through the list endpoint, the request a list sends, so a
175966
+ * count beside a list cannot disagree with it; else the aggregation endpoints where they apply.
175641
175967
  * @return {Promise<{[key: string]: number}>} The count per entry key. An entry whose count failed is left out.
175642
175968
  * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
175969
+ * @spec openspec/changes/index-counts-read-the-list-endpoint/specs/index-page/spec.md#requirement-an-index-pages-counts-come-from-the-list-request
175643
175970
  */
175644
- async function fetchFilterCounts({ register, schema, entries, baseFilter, ctx } = {}) {
175971
+ async function fetchFilterCounts({ register, schema, entries, baseFilter, ctx, via = '' } = {}) {
175645
175972
  const counts = {};
175646
175973
  if (!register || !schema || !Array.isArray(entries) || entries.length === 0) {
175647
175974
  return counts
@@ -175653,7 +175980,7 @@ async function fetchFilterCounts({ register, schema, entries, baseFilter, ctx }
175653
175980
  // and `/value` returns exactly its number.
175654
175981
  // A list of values anywhere in a request rules the aggregation endpoints
175655
175982
  // out for it. A base filter with one rules them out for every entry.
175656
- const baseHasList = needsListEndpoint(base);
175983
+ const baseHasList = via === 'list' || needsListEndpoint(base);
175657
175984
  const byField = {};
175658
175985
  const single = [];
175659
175986
  const viaList = [];
@@ -191917,12 +192244,12 @@ const _hoisted_23$J = {
191917
192244
  const _hoisted_24$F = { class: "cn-timeline-manage__heading" };
191918
192245
  const _hoisted_25$z = { class: "cn-timeline-manage__title" };
191919
192246
  const _hoisted_26$w = { class: "cn-timeline-manage__subtitle" };
191920
- const _hoisted_27$o = { class: "cn-timeline-manage__composer-title" };
191921
- const _hoisted_28$n = { class: "cn-timeline-manage__composer-hint" };
191922
- const _hoisted_29$l = ["for"];
191923
- const _hoisted_30$k = ["for"];
191924
- const _hoisted_31$i = ["id", "placeholder"];
191925
- const _hoisted_32$i = { class: "cn-timeline-manage__composer-foot" };
192247
+ const _hoisted_27$p = { class: "cn-timeline-manage__composer-title" };
192248
+ const _hoisted_28$o = { class: "cn-timeline-manage__composer-hint" };
192249
+ const _hoisted_29$m = ["for"];
192250
+ const _hoisted_30$l = ["for"];
192251
+ const _hoisted_31$j = ["id", "placeholder"];
192252
+ const _hoisted_32$j = { class: "cn-timeline-manage__composer-foot" };
191926
192253
 
191927
192254
  function render$5r(_ctx, _cache, $props, $setup, $data, $options) {
191928
192255
  const _component_Plus = vue$1.resolveComponent("Plus");
@@ -192174,8 +192501,8 @@ function render$5r(_ctx, _cache, $props, $setup, $data, $options) {
192174
192501
  }, [
192175
192502
  (!$options.composerOnly)
192176
192503
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 0 }, [
192177
- vue$1.createElementVNode("h3", _hoisted_27$o, vue$1.toDisplayString($options.t('nextcloud-vue', 'Add note')), 1 /* TEXT */),
192178
- vue$1.createElementVNode("p", _hoisted_28$n, vue$1.toDisplayString($options.t('nextcloud-vue', 'Goes on the timeline above, internal unless you make it visible')), 1 /* TEXT */)
192504
+ vue$1.createElementVNode("h3", _hoisted_27$p, vue$1.toDisplayString($options.t('nextcloud-vue', 'Add note')), 1 /* TEXT */),
192505
+ vue$1.createElementVNode("p", _hoisted_28$o, vue$1.toDisplayString($options.t('nextcloud-vue', 'Goes on the timeline above, internal unless you make it visible')), 1 /* TEXT */)
192179
192506
  ], 64 /* STABLE_FRAGMENT */))
192180
192507
  : vue$1.createCommentVNode("v-if", true),
192181
192508
  ($data.textBlocks.length)
@@ -192183,7 +192510,7 @@ function render$5r(_ctx, _cache, $props, $setup, $data, $options) {
192183
192510
  key: 1,
192184
192511
  class: "cn-timeline-manage__draft-label",
192185
192512
  for: $options.blockId
192186
- }, vue$1.toDisplayString($options.t('nextcloud-vue', 'Template')), 9 /* TEXT, PROPS */, _hoisted_29$l))
192513
+ }, vue$1.toDisplayString($options.t('nextcloud-vue', 'Template')), 9 /* TEXT, PROPS */, _hoisted_29$m))
192187
192514
  : vue$1.createCommentVNode("v-if", true),
192188
192515
  ($data.textBlocks.length)
192189
192516
  ? (vue$1.openBlock(), vue$1.createBlock(_component_NcSelect, {
@@ -192207,17 +192534,17 @@ function render$5r(_ctx, _cache, $props, $setup, $data, $options) {
192207
192534
  vue$1.createElementVNode("label", {
192208
192535
  class: "cn-timeline-manage__draft-label",
192209
192536
  for: $options.draftId
192210
- }, vue$1.toDisplayString($options.t('nextcloud-vue', 'Note')), 9 /* TEXT, PROPS */, _hoisted_30$k),
192537
+ }, vue$1.toDisplayString($options.t('nextcloud-vue', 'Note')), 9 /* TEXT, PROPS */, _hoisted_30$l),
192211
192538
  vue$1.withDirectives(vue$1.createElementVNode("textarea", {
192212
192539
  id: $options.draftId,
192213
192540
  "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (($data.draft) = $event)),
192214
192541
  class: "cn-timeline-manage__draft",
192215
192542
  placeholder: $options.t('nextcloud-vue', 'Write a note on this record'),
192216
192543
  "data-testid": "cn-timeline-draft"
192217
- }, null, 8 /* PROPS */, _hoisted_31$i), [
192544
+ }, null, 8 /* PROPS */, _hoisted_31$j), [
192218
192545
  [vue$1.vModelText, $data.draft]
192219
192546
  ]),
192220
- vue$1.createElementVNode("div", _hoisted_32$i, [
192547
+ vue$1.createElementVNode("div", _hoisted_32$j, [
192221
192548
  vue$1.createVNode(_component_NcCheckboxRadioSwitch, {
192222
192549
  modelValue: $data.draftIsPublic,
192223
192550
  "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => (($data.draftIsPublic) = $event)),
@@ -217328,12 +217655,12 @@ const _hoisted_23$F = { value: "inline" };
217328
217655
  const _hoisted_24$B = { value: "icon-only" };
217329
217656
  const _hoisted_25$w = { class: "cn-links-form__option" };
217330
217657
  const _hoisted_26$u = ["value"];
217331
- const _hoisted_27$n = { value: "small" };
217332
- const _hoisted_28$m = { value: "medium" };
217333
- const _hoisted_29$k = { value: "large" };
217334
- const _hoisted_30$j = { class: "cn-links-form__option cn-links-form__option--checkbox" };
217335
- const _hoisted_31$h = ["checked"];
217336
- const _hoisted_32$h = { class: "cn-links-form__option cn-links-form__option--checkbox" };
217658
+ const _hoisted_27$o = { value: "small" };
217659
+ const _hoisted_28$n = { value: "medium" };
217660
+ const _hoisted_29$l = { value: "large" };
217661
+ const _hoisted_30$k = { class: "cn-links-form__option cn-links-form__option--checkbox" };
217662
+ const _hoisted_31$i = ["checked"];
217663
+ const _hoisted_32$i = { class: "cn-links-form__option cn-links-form__option--checkbox" };
217337
217664
  const _hoisted_33$g = ["checked"];
217338
217665
  const _hoisted_34$g = { class: "cn-links-form__option cn-links-form__option--checkbox" };
217339
217666
  const _hoisted_35$f = ["checked", "disabled"];
@@ -217486,20 +217813,20 @@ function render$4I(_ctx, _cache, $props, $setup, $data, $options) {
217486
217813
  class: "cn-links-form__input",
217487
217814
  onChange: _cache[3] || (_cache[3] = $event => ($options.updateOption('iconSize', $event.target.value)))
217488
217815
  }, [
217489
- vue$1.createElementVNode("option", _hoisted_27$n, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Small (24 px)')), 1 /* TEXT */),
217490
- vue$1.createElementVNode("option", _hoisted_28$m, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Medium (40 px)')), 1 /* TEXT */),
217491
- vue$1.createElementVNode("option", _hoisted_29$k, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Large (64 px)')), 1 /* TEXT */)
217816
+ vue$1.createElementVNode("option", _hoisted_27$o, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Small (24 px)')), 1 /* TEXT */),
217817
+ vue$1.createElementVNode("option", _hoisted_28$n, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Medium (40 px)')), 1 /* TEXT */),
217818
+ vue$1.createElementVNode("option", _hoisted_29$l, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Large (64 px)')), 1 /* TEXT */)
217492
217819
  ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_26$u)
217493
217820
  ]),
217494
- vue$1.createElementVNode("label", _hoisted_30$j, [
217821
+ vue$1.createElementVNode("label", _hoisted_30$k, [
217495
217822
  vue$1.createElementVNode("input", {
217496
217823
  type: "checkbox",
217497
217824
  checked: $data.openInNewTab,
217498
217825
  onChange: _cache[4] || (_cache[4] = $event => ($options.updateOption('openInNewTab', $event.target.checked)))
217499
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_31$h),
217826
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_31$i),
217500
217827
  vue$1.createElementVNode("span", null, vue$1.toDisplayString(_ctx.t('nextcloud-vue', 'Open in new tab')), 1 /* TEXT */)
217501
217828
  ]),
217502
- vue$1.createElementVNode("label", _hoisted_32$h, [
217829
+ vue$1.createElementVNode("label", _hoisted_32$i, [
217503
217830
  vue$1.createElementVNode("input", {
217504
217831
  type: "checkbox",
217505
217832
  checked: $data.showSectionTitles,
@@ -223360,9 +223687,9 @@ const _hoisted_25$v = {
223360
223687
  class: "cn-calendar-widget__agenda"
223361
223688
  };
223362
223689
  const _hoisted_26$t = { class: "cn-calendar-widget__agenda-header" };
223363
- const _hoisted_27$m = { class: "cn-calendar-widget__agenda-time" };
223364
- const _hoisted_28$l = { class: "cn-calendar-widget__agenda-title" };
223365
- const _hoisted_29$j = {
223690
+ const _hoisted_27$n = { class: "cn-calendar-widget__agenda-time" };
223691
+ const _hoisted_28$m = { class: "cn-calendar-widget__agenda-title" };
223692
+ const _hoisted_29$k = {
223366
223693
  key: 0,
223367
223694
  class: "cn-calendar-widget__agenda-cal"
223368
223695
  };
@@ -223478,10 +223805,10 @@ function render$4u(_ctx, _cache, $props, $setup, $data, $options) {
223478
223805
  class: "cn-calendar-widget__agenda-row",
223479
223806
  style: vue$1.normalizeStyle($options.eventStyle(event))
223480
223807
  }, [
223481
- vue$1.createElementVNode("span", _hoisted_27$m, vue$1.toDisplayString($options.formatTime(event)), 1 /* TEXT */),
223482
- vue$1.createElementVNode("span", _hoisted_28$l, vue$1.toDisplayString(event.title), 1 /* TEXT */),
223808
+ vue$1.createElementVNode("span", _hoisted_27$n, vue$1.toDisplayString($options.formatTime(event)), 1 /* TEXT */),
223809
+ vue$1.createElementVNode("span", _hoisted_28$m, vue$1.toDisplayString(event.title), 1 /* TEXT */),
223483
223810
  (event.calendarName)
223484
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$j, vue$1.toDisplayString(event.calendarName), 1 /* TEXT */))
223811
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$k, vue$1.toDisplayString(event.calendarName), 1 /* TEXT */))
223485
223812
  : vue$1.createCommentVNode("v-if", true)
223486
223813
  ], 4 /* STYLE */))
223487
223814
  }), 128 /* KEYED_FRAGMENT */))
@@ -224565,21 +224892,21 @@ const _hoisted_26$s = {
224565
224892
  key: 2,
224566
224893
  class: "cn-spend-analytics-widget__panel"
224567
224894
  };
224568
- const _hoisted_27$l = { class: "cn-spend-analytics-widget__panel-title" };
224569
- const _hoisted_28$k = {
224895
+ const _hoisted_27$m = { class: "cn-spend-analytics-widget__panel-title" };
224896
+ const _hoisted_28$l = {
224570
224897
  key: 0,
224571
224898
  class: "cn-spend-analytics-widget__inline-empty"
224572
224899
  };
224573
- const _hoisted_29$i = {
224900
+ const _hoisted_29$j = {
224574
224901
  key: 1,
224575
224902
  class: "cn-spend-analytics-widget__inline-empty"
224576
224903
  };
224577
- const _hoisted_30$i = {
224904
+ const _hoisted_30$j = {
224578
224905
  key: 2,
224579
224906
  class: "cn-spend-analytics-widget__rows"
224580
224907
  };
224581
- const _hoisted_31$g = ["href"];
224582
- const _hoisted_32$g = {
224908
+ const _hoisted_31$h = ["href"];
224909
+ const _hoisted_32$h = {
224583
224910
  key: 1,
224584
224911
  class: "cn-spend-analytics-widget__row cn-spend-analytics-widget__row--static"
224585
224912
  };
@@ -224680,12 +225007,12 @@ function render$4s(_ctx, _cache, $props, $setup, $data, $options) {
224680
225007
  ]))
224681
225008
  : ($options.viewMode === 'top-vendors')
224682
225009
  ? (vue$1.openBlock(), vue$1.createElementBlock("section", _hoisted_26$s, [
224683
- vue$1.createElementVNode("h3", _hoisted_27$l, vue$1.toDisplayString($options.t('nextcloud-vue', 'Top vendors')), 1 /* TEXT */),
225010
+ vue$1.createElementVNode("h3", _hoisted_27$m, vue$1.toDisplayString($options.t('nextcloud-vue', 'Top vendors')), 1 /* TEXT */),
224684
225011
  ($options.vendorMissing)
224685
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$k, vue$1.toDisplayString($options.t('nextcloud-vue', 'No vendor data — procest is not installed')), 1 /* TEXT */))
225012
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$l, vue$1.toDisplayString($options.t('nextcloud-vue', 'No vendor data — procest is not installed')), 1 /* TEXT */))
224686
225013
  : ($options.vendorEmpty)
224687
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_29$i, vue$1.toDisplayString($options.t('nextcloud-vue', 'No vendor commitments for the selected period')), 1 /* TEXT */))
224688
- : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_30$i, [
225014
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_29$j, vue$1.toDisplayString($options.t('nextcloud-vue', 'No vendor commitments for the selected period')), 1 /* TEXT */))
225015
+ : (vue$1.openBlock(), vue$1.createElementBlock("ul", _hoisted_30$j, [
224689
225016
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($data.vendor.topVendors, (row, i) => {
224690
225017
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
224691
225018
  key: row.vendor
@@ -224698,8 +225025,8 @@ function render$4s(_ctx, _cache, $props, $setup, $data, $options) {
224698
225025
  }, [
224699
225026
  vue$1.createElementVNode("span", null, vue$1.toDisplayString(row.vendor), 1 /* TEXT */),
224700
225027
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($options.formatAmount(row.committed)), 1 /* TEXT */)
224701
- ], 8 /* PROPS */, _hoisted_31$g))
224702
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$g, [
225028
+ ], 8 /* PROPS */, _hoisted_31$h))
225029
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$h, [
224703
225030
  vue$1.createElementVNode("span", null, vue$1.toDisplayString(row.vendor), 1 /* TEXT */),
224704
225031
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($options.formatAmount(row.committed)), 1 /* TEXT */)
224705
225032
  ]))
@@ -229754,12 +230081,16 @@ var script$4h = {
229754
230081
 
229755
230082
  components: {
229756
230083
  CheckCircle,
230084
+ ChevronDown,
230085
+ ChevronUp,
229757
230086
  CircleOutline,
229758
230087
  CnStatusBadge: __sfc_main$8g,
229759
230088
  CnTaskFormDialog: __sfc_main$4j,
229760
230089
  CnTaskWorkCard: __sfc_main$4i,
230090
+ FilterOutline,
229761
230091
  NcActions: vue.NcActions,
229762
230092
  NcActionButton: vue.NcActionButton,
230093
+ NcActionCheckbox: vue.NcActionCheckbox,
229763
230094
  NcAvatar: vue.NcAvatar,
229764
230095
  NcButton: vue.NcButton,
229765
230096
  NcLoadingIcon: vue.NcLoadingIcon,
@@ -229914,6 +230245,10 @@ var script$4h = {
229914
230245
  data() {
229915
230246
  return {
229916
230247
  pollTimer: null,
230248
+ /** The table's head sort, `{ key, dir }`; no key keeps open tasks first. */
230249
+ headSort: { key: '', dir: 'asc' },
230250
+ /** The table's head filters, `{ column: values[] }`. */
230251
+ headFilters: {},
229917
230252
  /** Uuids of the tasks a checkbox is completing, until the next read. */
229918
230253
  completing: [],
229919
230254
  /** Whether the table's create form is open. */
@@ -230073,7 +230408,26 @@ var script$4h = {
230073
230408
  * @spec openspec/changes/record-task-table/specs/record-task-table/spec.md#requirement-a-records-tasks-show-as-a-table-with-their-summary-and-new-task-in-the-header
230074
230409
  */
230075
230410
  tableRows() {
230076
- return [...this.rows.filter((task) => task.isTerminal !== true), ...this.rows.filter((task) => task.isTerminal === true)]
230411
+ const kept = this.rows.filter((task) => Object.entries(this.headFilters).every(([key, values]) => values.length === 0 || values.includes(this.headValue(task, key))));
230412
+ if (this.headSort.key) {
230413
+ const dir = this.headSort.dir === 'desc' ? -1 : 1;
230414
+ return [...kept].sort((a, b) => {
230415
+ const x = this.headSortValue(a, this.headSort.key);
230416
+ const y = this.headSortValue(b, this.headSort.key);
230417
+ return (x < y ? -1 : (x > y ? 1 : 0)) * dir
230418
+ })
230419
+ }
230420
+ return [...kept.filter((task) => task.isTerminal !== true), ...kept.filter((task) => task.isTerminal === true)]
230421
+ },
230422
+
230423
+ /** @return {Array<{key: string, label: string}>} The table's data columns. */
230424
+ headColumns() {
230425
+ return [
230426
+ { key: 'title', label: this.tr('Task') },
230427
+ { key: 'handler', label: this.tr('Handler') },
230428
+ { key: 'due', label: this.tr('Task deadline') },
230429
+ { key: 'state', label: this.tr('Status') },
230430
+ ]
230077
230431
  },
230078
230432
 
230079
230433
  /**
@@ -230454,6 +230808,84 @@ var script$4h = {
230454
230808
  * @param {object} task The task row.
230455
230809
  * @return {string} The name.
230456
230810
  */
230811
+ /**
230812
+ * A row's value in a column, as a head filter keeps it.
230813
+ *
230814
+ * @param {object} task The task row.
230815
+ * @param {string} key The column.
230816
+ * @return {string}
230817
+ */
230818
+ headValue(task, key) {
230819
+ if (key === 'title') {
230820
+ return this.titleOf(task)
230821
+ }
230822
+ if (key === 'handler') {
230823
+ return String(task.assignee || '')
230824
+ }
230825
+ if (key === 'due') {
230826
+ return this.content.dueFormat === 'date' ? this.dueDate(task) : this.dueLabel(task)
230827
+ }
230828
+ return String(task.state || '')
230829
+ },
230830
+
230831
+ /**
230832
+ * A row's value in a column, as its head sorts it: the deadline by date.
230833
+ *
230834
+ * @param {object} task The task row.
230835
+ * @param {string} key The column.
230836
+ * @return {string|number}
230837
+ */
230838
+ headSortValue(task, key) {
230839
+ if (key === 'due') {
230840
+ const time = Date.parse(task.dueAt || task.dueDate || '');
230841
+ return Number.isNaN(time) ? Number.POSITIVE_INFINITY : time
230842
+ }
230843
+ if (key === 'handler') {
230844
+ return this.handlerName(task).toLowerCase()
230845
+ }
230846
+ if (key === 'state') {
230847
+ return this.stateLabel(task).toLowerCase()
230848
+ }
230849
+ return this.titleOf(task).toLowerCase()
230850
+ },
230851
+
230852
+ /**
230853
+ * The values a column's head filter offers, one per value the rows hold.
230854
+ *
230855
+ * @param {string} key The column.
230856
+ * @return {Array<{value: string, label: string}>}
230857
+ */
230858
+ headOptions(key) {
230859
+ const seen = new Map();
230860
+ for (const task of this.rows) {
230861
+ const value = this.headValue(task, key);
230862
+ if (value !== '' && !seen.has(value)) {
230863
+ seen.set(value, key === 'handler' ? this.handlerName(task) : (key === 'state' ? this.stateLabel(task) : value));
230864
+ }
230865
+ }
230866
+ return [...seen].map(([value, label]) => ({ value, label }))
230867
+ },
230868
+
230869
+ /**
230870
+ * Sort by a column: ascending first, then descending.
230871
+ *
230872
+ * @param {string} key The column.
230873
+ */
230874
+ sortBy(key) {
230875
+ this.headSort = this.headSort.key === key && this.headSort.dir === 'asc' ? { key, dir: 'desc' } : { key, dir: 'asc' };
230876
+ },
230877
+
230878
+ /**
230879
+ * Keep or drop one value of a column's head filter.
230880
+ *
230881
+ * @param {string} key The column.
230882
+ * @param {string} value The value.
230883
+ */
230884
+ toggleHeadFilter(key, value) {
230885
+ const current = this.headFilters[key] || [];
230886
+ this.headFilters = { ...this.headFilters, [key]: current.includes(value) ? current.filter((v) => v !== value) : [...current, value] };
230887
+ },
230888
+
230457
230889
  handlerName(task) {
230458
230890
  return userDisplayName(task.assignee) || String(task.assignee || '')
230459
230891
  },
@@ -230888,79 +231320,81 @@ const _hoisted_4$3j = {
230888
231320
  class: "cn-tasks-widget__table",
230889
231321
  "data-testid": "cn-tasks-widget-table"
230890
231322
  };
230891
- const _hoisted_5$2W = { scope: "col" };
230892
- const _hoisted_6$2H = { scope: "col" };
230893
- const _hoisted_7$2q = { scope: "col" };
231323
+ const _hoisted_5$2W = ["aria-sort", "data-testid"];
231324
+ const _hoisted_6$2H = {
231325
+ key: 0,
231326
+ class: "cn-tasks-widget__head"
231327
+ };
231328
+ const _hoisted_7$2q = ["data-testid", "onClick"];
230894
231329
  const _hoisted_8$2b = { scope: "col" };
230895
- const _hoisted_9$1$ = { scope: "col" };
230896
- const _hoisted_10$1O = { class: "hidden-visually" };
230897
- const _hoisted_11$1B = ["data-state", "data-testid"];
230898
- const _hoisted_12$1o = { class: "cn-tasks-widget__cell-task" };
230899
- const _hoisted_13$1c = { class: "cn-tasks-widget__body" };
230900
- const _hoisted_14$18 = ["aria-expanded", "data-testid", "onClick"];
230901
- const _hoisted_15$14 = ["onClick", "onAuxclick"];
230902
- const _hoisted_16$_ = {
231330
+ const _hoisted_9$1$ = { class: "hidden-visually" };
231331
+ const _hoisted_10$1O = ["data-state", "data-testid"];
231332
+ const _hoisted_11$1B = { class: "cn-tasks-widget__cell-task" };
231333
+ const _hoisted_12$1o = { class: "cn-tasks-widget__body" };
231334
+ const _hoisted_13$1c = ["aria-expanded", "data-testid", "onClick"];
231335
+ const _hoisted_14$18 = ["onClick", "onAuxclick"];
231336
+ const _hoisted_15$14 = {
230903
231337
  key: 2,
230904
231338
  class: "cn-tasks-widget__meta"
230905
231339
  };
230906
- const _hoisted_17$U = { class: "cn-tasks-widget__cell-handler" };
230907
- const _hoisted_18$L = {
231340
+ const _hoisted_16$_ = { class: "cn-tasks-widget__cell-handler" };
231341
+ const _hoisted_17$U = {
230908
231342
  key: 0,
230909
231343
  class: "cn-tasks-widget__handler"
230910
231344
  };
230911
- const _hoisted_19$J = {
231345
+ const _hoisted_18$L = {
230912
231346
  key: 1,
230913
231347
  class: "cn-tasks-widget__meta"
230914
231348
  };
230915
- const _hoisted_20$E = {
231349
+ const _hoisted_19$J = {
230916
231350
  key: 0,
230917
231351
  class: "hidden-visually"
230918
231352
  };
230919
- const _hoisted_21$D = { class: "cn-tasks-widget__cell-actions" };
230920
- const _hoisted_22$D = {
231353
+ const _hoisted_20$E = { class: "cn-tasks-widget__cell-actions" };
231354
+ const _hoisted_21$D = {
230921
231355
  key: 1,
230922
231356
  class: "cn-tasks-widget__empty",
230923
231357
  "data-testid": "cn-tasks-widget-empty"
230924
231358
  };
230925
- const _hoisted_23$A = {
231359
+ const _hoisted_22$D = {
230926
231360
  key: 2,
230927
231361
  class: "cn-tasks-widget__others",
230928
231362
  "data-testid": "cn-tasks-widget-others"
230929
231363
  };
230930
- const _hoisted_24$x = { class: "cn-tasks-widget__others-title" };
230931
- const _hoisted_25$t = { class: "cn-tasks-widget__others-list" };
230932
- const _hoisted_26$r = ["data-testid"];
230933
- const _hoisted_27$k = { class: "cn-tasks-widget__body" };
230934
- const _hoisted_28$j = {
231364
+ const _hoisted_23$A = { class: "cn-tasks-widget__others-title" };
231365
+ const _hoisted_24$x = { class: "cn-tasks-widget__others-list" };
231366
+ const _hoisted_25$t = ["data-testid"];
231367
+ const _hoisted_26$r = { class: "cn-tasks-widget__body" };
231368
+ const _hoisted_27$l = {
230935
231369
  key: 1,
230936
231370
  class: "cn-tasks-widget__name"
230937
231371
  };
230938
- const _hoisted_29$h = { class: "cn-tasks-widget__meta" };
230939
- const _hoisted_30$h = { class: "cn-tasks-widget__others-actions" };
230940
- const _hoisted_31$f = {
231372
+ const _hoisted_28$k = { class: "cn-tasks-widget__meta" };
231373
+ const _hoisted_29$i = { class: "cn-tasks-widget__others-actions" };
231374
+ const _hoisted_30$i = {
230941
231375
  key: 4,
230942
231376
  class: "cn-tasks-widget__empty"
230943
231377
  };
230944
- const _hoisted_32$f = {
231378
+ const _hoisted_31$g = {
230945
231379
  key: 0,
230946
231380
  class: "cn-tasks-widget__count"
230947
231381
  };
230948
- const _hoisted_33$e = { class: "cn-tasks-widget__list" };
230949
- const _hoisted_34$e = ["data-state", "onClick", "onAuxclick"];
230950
- const _hoisted_35$d = ["checked", "disabled", "aria-label", "onChange"];
230951
- const _hoisted_36$d = {
231382
+ const _hoisted_32$g = { class: "cn-tasks-widget__list" };
231383
+ const _hoisted_33$e = ["data-state", "onClick", "onAuxclick"];
231384
+ const _hoisted_34$e = ["checked", "disabled", "aria-label", "onChange"];
231385
+ const _hoisted_35$d = {
230952
231386
  key: 1,
230953
231387
  class: "cn-tasks-widget__check-spacer",
230954
231388
  "aria-hidden": "true"
230955
231389
  };
230956
- const _hoisted_37$c = { class: "cn-tasks-widget__body" };
230957
- const _hoisted_38$c = { class: "cn-tasks-widget__name" };
230958
- const _hoisted_39$a = { class: "cn-tasks-widget__meta cn-tasks-widget__meta--split" };
230959
- const _hoisted_40$8 = { class: "cn-tasks-widget__subject" };
230960
- const _hoisted_41$6 = { class: "cn-tasks-widget__body" };
230961
- const _hoisted_42$6 = { class: "cn-tasks-widget__name" };
230962
- const _hoisted_43$6 = { class: "cn-tasks-widget__meta" };
230963
- const _hoisted_44$6 = {
231390
+ const _hoisted_36$d = { class: "cn-tasks-widget__body" };
231391
+ const _hoisted_37$c = { class: "cn-tasks-widget__name" };
231392
+ const _hoisted_38$c = { class: "cn-tasks-widget__meta cn-tasks-widget__meta--split" };
231393
+ const _hoisted_39$a = { class: "cn-tasks-widget__subject" };
231394
+ const _hoisted_40$8 = { class: "cn-tasks-widget__body" };
231395
+ const _hoisted_41$6 = { class: "cn-tasks-widget__name" };
231396
+ const _hoisted_42$6 = { class: "cn-tasks-widget__meta" };
231397
+ const _hoisted_43$6 = {
230964
231398
  key: 1,
230965
231399
  class: "cn-tasks-widget__more"
230966
231400
  };
@@ -230969,12 +231403,16 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
230969
231403
  const _component_NcLoadingIcon = vue$1.resolveComponent("NcLoadingIcon");
230970
231404
  const _component_NcTextField = vue$1.resolveComponent("NcTextField");
230971
231405
  const _component_NcButton = vue$1.resolveComponent("NcButton");
231406
+ const _component_ChevronUp = vue$1.resolveComponent("ChevronUp");
231407
+ const _component_ChevronDown = vue$1.resolveComponent("ChevronDown");
231408
+ const _component_FilterOutline = vue$1.resolveComponent("FilterOutline");
231409
+ const _component_NcActionCheckbox = vue$1.resolveComponent("NcActionCheckbox");
231410
+ const _component_NcActions = vue$1.resolveComponent("NcActions");
230972
231411
  const _component_CheckCircle = vue$1.resolveComponent("CheckCircle");
230973
231412
  const _component_CircleOutline = vue$1.resolveComponent("CircleOutline");
230974
231413
  const _component_NcAvatar = vue$1.resolveComponent("NcAvatar");
230975
231414
  const _component_CnStatusBadge = vue$1.resolveComponent("CnStatusBadge");
230976
231415
  const _component_NcActionButton = vue$1.resolveComponent("NcActionButton");
230977
- const _component_NcActions = vue$1.resolveComponent("NcActions");
230978
231416
  const _component_router_link = vue$1.resolveComponent("router-link");
230979
231417
  const _component_CnTaskWorkCard = vue$1.resolveComponent("CnTaskWorkCard");
230980
231418
  const _component_CnTaskFormDialog = vue$1.resolveComponent("CnTaskFormDialog");
@@ -231028,12 +231466,72 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231028
231466
  : (vue$1.openBlock(), vue$1.createElementBlock("table", _hoisted_4$3j, [
231029
231467
  vue$1.createElementVNode("thead", null, [
231030
231468
  vue$1.createElementVNode("tr", null, [
231031
- vue$1.createElementVNode("th", _hoisted_5$2W, vue$1.toDisplayString($options.tr('Task')), 1 /* TEXT */),
231032
- vue$1.createElementVNode("th", _hoisted_6$2H, vue$1.toDisplayString($options.tr('Handler')), 1 /* TEXT */),
231033
- vue$1.createElementVNode("th", _hoisted_7$2q, vue$1.toDisplayString($options.tr('Task deadline')), 1 /* TEXT */),
231034
- vue$1.createElementVNode("th", _hoisted_8$2b, vue$1.toDisplayString($options.tr('Status')), 1 /* TEXT */),
231035
- vue$1.createElementVNode("th", _hoisted_9$1$, [
231036
- vue$1.createElementVNode("span", _hoisted_10$1O, vue$1.toDisplayString($options.tr('Task actions')), 1 /* TEXT */)
231469
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.headColumns, (column) => {
231470
+ return (vue$1.openBlock(), vue$1.createElementBlock("th", {
231471
+ key: column.key,
231472
+ scope: "col",
231473
+ "aria-sort": $data.headSort.key === column.key ? ($data.headSort.dir === 'asc' ? 'ascending' : 'descending') : null,
231474
+ "data-testid": `cn-tasks-widget-head-${column.key}`
231475
+ }, [
231476
+ ($props.content.sortable === true || $props.content.filterable === true)
231477
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_6$2H, [
231478
+ ($props.content.sortable === true)
231479
+ ? (vue$1.openBlock(), vue$1.createElementBlock("button", {
231480
+ key: 0,
231481
+ type: "button",
231482
+ class: "cn-tasks-widget__head-sort",
231483
+ "data-testid": `cn-tasks-widget-sort-${column.key}`,
231484
+ onClick: $event => ($options.sortBy(column.key))
231485
+ }, [
231486
+ vue$1.createTextVNode(vue$1.toDisplayString(column.label) + " ", 1 /* TEXT */),
231487
+ ($data.headSort.key === column.key && $data.headSort.dir === 'asc')
231488
+ ? (vue$1.openBlock(), vue$1.createBlock(_component_ChevronUp, {
231489
+ key: 0,
231490
+ size: 14
231491
+ }))
231492
+ : (vue$1.openBlock(), vue$1.createBlock(_component_ChevronDown, {
231493
+ key: 1,
231494
+ size: 14
231495
+ }))
231496
+ ], 8 /* PROPS */, _hoisted_7$2q))
231497
+ : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
231498
+ vue$1.createTextVNode(vue$1.toDisplayString(column.label), 1 /* TEXT */)
231499
+ ], 64 /* STABLE_FRAGMENT */)),
231500
+ ($props.content.filterable === true)
231501
+ ? (vue$1.openBlock(), vue$1.createBlock(_component_NcActions, {
231502
+ key: 2,
231503
+ class: "cn-tasks-widget__head-filter",
231504
+ "aria-label": $options.tr('Filter by {column}').replace('{column}', column.label),
231505
+ "data-testid": `cn-tasks-widget-filter-${column.key}`
231506
+ }, {
231507
+ icon: vue$1.withCtx(() => [
231508
+ vue$1.createVNode(_component_FilterOutline, { size: 14 })
231509
+ ]),
231510
+ default: vue$1.withCtx(() => [
231511
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.headOptions(column.key), (option) => {
231512
+ return (vue$1.openBlock(), vue$1.createBlock(_component_NcActionCheckbox, {
231513
+ key: option.value,
231514
+ modelValue: ($data.headFilters[column.key] || []).includes(option.value),
231515
+ "onUpdate:modelValue": $event => ($options.toggleHeadFilter(column.key, option.value))
231516
+ }, {
231517
+ default: vue$1.withCtx(() => [
231518
+ vue$1.createTextVNode(vue$1.toDisplayString(option.label), 1 /* TEXT */)
231519
+ ]),
231520
+ _: 2 /* DYNAMIC */
231521
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["modelValue", "onUpdate:modelValue"]))
231522
+ }), 128 /* KEYED_FRAGMENT */))
231523
+ ]),
231524
+ _: 2 /* DYNAMIC */
231525
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["aria-label", "data-testid"]))
231526
+ : vue$1.createCommentVNode("v-if", true)
231527
+ ]))
231528
+ : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
231529
+ vue$1.createTextVNode(vue$1.toDisplayString(column.label), 1 /* TEXT */)
231530
+ ], 64 /* STABLE_FRAGMENT */))
231531
+ ], 8 /* PROPS */, _hoisted_5$2W))
231532
+ }), 128 /* KEYED_FRAGMENT */)),
231533
+ vue$1.createElementVNode("th", _hoisted_8$2b, [
231534
+ vue$1.createElementVNode("span", _hoisted_9$1$, vue$1.toDisplayString($options.tr('Task actions')), 1 /* TEXT */)
231037
231535
  ])
231038
231536
  ])
231039
231537
  ]),
@@ -231045,7 +231543,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231045
231543
  "data-state": task.state,
231046
231544
  "data-testid": `cn-tasks-widget-row-${task.uuid}`
231047
231545
  }, [
231048
- vue$1.createElementVNode("td", _hoisted_12$1o, [
231546
+ vue$1.createElementVNode("td", _hoisted_11$1B, [
231049
231547
  (task.isTerminal === true)
231050
231548
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CheckCircle, {
231051
231549
  key: 0,
@@ -231057,7 +231555,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231057
231555
  size: 20,
231058
231556
  class: "cn-tasks-widget__state-icon"
231059
231557
  })),
231060
- vue$1.createElementVNode("span", _hoisted_13$1c, [
231558
+ vue$1.createElementVNode("span", _hoisted_12$1o, [
231061
231559
  ($options.expandRows)
231062
231560
  ? (vue$1.openBlock(), vue$1.createElementBlock("button", {
231063
231561
  key: 0,
@@ -231066,22 +231564,22 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231066
231564
  "aria-expanded": task.uuid === $data.expandedId ? 'true' : 'false',
231067
231565
  "data-testid": `cn-tasks-widget-expand-${task.uuid}`,
231068
231566
  onClick: $event => ($options.toggleExpanded(task))
231069
- }, vue$1.toDisplayString($options.titleOf(task)), 9 /* TEXT, PROPS */, _hoisted_14$18))
231567
+ }, vue$1.toDisplayString($options.titleOf(task)), 9 /* TEXT, PROPS */, _hoisted_13$1c))
231070
231568
  : (vue$1.openBlock(), vue$1.createElementBlock("button", {
231071
231569
  key: 1,
231072
231570
  type: "button",
231073
231571
  class: "cn-tasks-widget__name",
231074
231572
  onClick: $event => ($options.onRowClick(task, $event)),
231075
231573
  onAuxclick: $event => ($options.onRowAuxClick(task, $event))
231076
- }, vue$1.toDisplayString($options.titleOf(task)), 41 /* TEXT, PROPS, NEED_HYDRATION */, _hoisted_15$14)),
231574
+ }, vue$1.toDisplayString($options.titleOf(task)), 41 /* TEXT, PROPS, NEED_HYDRATION */, _hoisted_14$18)),
231077
231575
  ($options.tableMeta(task))
231078
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_16$_, vue$1.toDisplayString($options.tableMeta(task)), 1 /* TEXT */))
231576
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_15$14, vue$1.toDisplayString($options.tableMeta(task)), 1 /* TEXT */))
231079
231577
  : vue$1.createCommentVNode("v-if", true)
231080
231578
  ])
231081
231579
  ]),
231082
- vue$1.createElementVNode("td", _hoisted_17$U, [
231580
+ vue$1.createElementVNode("td", _hoisted_16$_, [
231083
231581
  (task.assignee)
231084
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$L, [
231582
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_17$U, [
231085
231583
  vue$1.createVNode(_component_NcAvatar, {
231086
231584
  user: String(task.assignee),
231087
231585
  displayName: $options.handlerName(task),
@@ -231090,7 +231588,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231090
231588
  }, null, 8 /* PROPS */, ["user", "displayName"]),
231091
231589
  vue$1.createTextVNode(" " + vue$1.toDisplayString($options.handlerName(task)), 1 /* TEXT */)
231092
231590
  ]))
231093
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_19$J, vue$1.toDisplayString($options.tr('Unassigned')), 1 /* TEXT */))
231591
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_18$L, vue$1.toDisplayString($options.tr('Unassigned')), 1 /* TEXT */))
231094
231592
  ]),
231095
231593
  vue$1.createElementVNode("td", {
231096
231594
  class: vue$1.normalizeClass(["cn-tasks-widget__cell-due", { 'cn-tasks-widget__due--overdue': task.overdue === true && task.isTerminal !== true }])
@@ -231099,7 +231597,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231099
231597
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 0 }, [
231100
231598
  vue$1.createTextVNode(vue$1.toDisplayString($options.dueDate(task)) + " ", 1 /* TEXT */),
231101
231599
  (task.overdue === true && task.isTerminal !== true)
231102
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_20$E, vue$1.toDisplayString($options.tr('Overdue')), 1 /* TEXT */))
231600
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_19$J, vue$1.toDisplayString($options.tr('Overdue')), 1 /* TEXT */))
231103
231601
  : vue$1.createCommentVNode("v-if", true)
231104
231602
  ], 64 /* STABLE_FRAGMENT */))
231105
231603
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
@@ -231114,7 +231612,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231114
231612
  colorKey: String(task.state || '')
231115
231613
  }, null, 8 /* PROPS */, ["label", "variant", "colorMap", "colorKey"])
231116
231614
  ]),
231117
- vue$1.createElementVNode("td", _hoisted_21$D, [
231615
+ vue$1.createElementVNode("td", _hoisted_20$E, [
231118
231616
  ($options.canClaim(task))
231119
231617
  ? (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
231120
231618
  key: 0,
@@ -231179,7 +231677,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231179
231677
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["aria-label"]))
231180
231678
  : vue$1.createCommentVNode("v-if", true)
231181
231679
  ])
231182
- ], 10 /* CLASS, PROPS */, _hoisted_11$1B))
231680
+ ], 10 /* CLASS, PROPS */, _hoisted_10$1O))
231183
231681
  }), 128 /* KEYED_FRAGMENT */))
231184
231682
  ])
231185
231683
  ])),
@@ -231232,18 +231730,18 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231232
231730
  onComplete: _cache[9] || (_cache[9] = $event => ($options.completeInPlace($options.focusTask))),
231233
231731
  onCancel: _cache[10] || (_cache[10] = $event => ($options.cancel($options.focusTask)))
231234
231732
  }, null, 8 /* PROPS */, ["task", "values", "claimable", "claimAvailable", "cancelable", "busy", "openRoute", "tr"]))
231235
- : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_22$D, vue$1.toDisplayString($options.emptyLabel), 1 /* TEXT */)),
231733
+ : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_21$D, vue$1.toDisplayString($options.emptyLabel), 1 /* TEXT */)),
231236
231734
  ($options.otherOpenTasks.length > 0)
231237
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_23$A, [
231238
- vue$1.createElementVNode("h5", _hoisted_24$x, vue$1.toDisplayString($options.tr('Other open tasks')), 1 /* TEXT */),
231239
- vue$1.createElementVNode("ul", _hoisted_25$t, [
231735
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_22$D, [
231736
+ vue$1.createElementVNode("h5", _hoisted_23$A, vue$1.toDisplayString($options.tr('Other open tasks')), 1 /* TEXT */),
231737
+ vue$1.createElementVNode("ul", _hoisted_24$x, [
231240
231738
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.otherOpenTasks, (task) => {
231241
231739
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
231242
231740
  key: task.uuid,
231243
231741
  class: "cn-tasks-widget__others-row",
231244
231742
  "data-testid": `cn-tasks-widget-other-${task.uuid}`
231245
231743
  }, [
231246
- vue$1.createElementVNode("span", _hoisted_27$k, [
231744
+ vue$1.createElementVNode("span", _hoisted_26$r, [
231247
231745
  ($options.openRouteFor(task) && _ctx.$router)
231248
231746
  ? (vue$1.openBlock(), vue$1.createBlock(_component_router_link, {
231249
231747
  key: 0,
@@ -231255,10 +231753,10 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231255
231753
  ]),
231256
231754
  _: 2 /* DYNAMIC */
231257
231755
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["to"]))
231258
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$j, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */)),
231259
- vue$1.createElementVNode("span", _hoisted_29$h, vue$1.toDisplayString($options.dueLabel(task) || $options.tr('No due date')), 1 /* TEXT */)
231756
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$l, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */)),
231757
+ vue$1.createElementVNode("span", _hoisted_28$k, vue$1.toDisplayString($options.dueLabel(task) || $options.tr('No due date')), 1 /* TEXT */)
231260
231758
  ]),
231261
- vue$1.createElementVNode("span", _hoisted_30$h, [
231759
+ vue$1.createElementVNode("span", _hoisted_29$i, [
231262
231760
  ($options.canClaim(task))
231263
231761
  ? (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
231264
231762
  key: 0,
@@ -231299,7 +231797,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231299
231797
  }, 8 /* PROPS */, ["disabled", "data-testid", "onClick"]))
231300
231798
  : vue$1.createCommentVNode("v-if", true)
231301
231799
  ])
231302
- ], 8 /* PROPS */, _hoisted_26$r))
231800
+ ], 8 /* PROPS */, _hoisted_25$t))
231303
231801
  }), 128 /* KEYED_FRAGMENT */))
231304
231802
  ])
231305
231803
  ]))
@@ -231319,12 +231817,12 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231319
231817
  : vue$1.createCommentVNode("v-if", true)
231320
231818
  ], 64 /* STABLE_FRAGMENT */))
231321
231819
  : ($options.rows.length === 0)
231322
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_31$f, vue$1.toDisplayString($options.emptyLabel), 1 /* TEXT */))
231820
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_30$i, vue$1.toDisplayString($options.emptyLabel), 1 /* TEXT */))
231323
231821
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 5 }, [
231324
231822
  (!$options.isList)
231325
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_32$f, vue$1.toDisplayString($options.countLabel), 1 /* TEXT */))
231823
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_31$g, vue$1.toDisplayString($options.countLabel), 1 /* TEXT */))
231326
231824
  : vue$1.createCommentVNode("v-if", true),
231327
- vue$1.createElementVNode("ul", _hoisted_33$e, [
231825
+ vue$1.createElementVNode("ul", _hoisted_32$g, [
231328
231826
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.rows, (task) => {
231329
231827
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
231330
231828
  key: task.uuid,
@@ -231347,12 +231845,12 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231347
231845
  "data-testid": "cn-tasks-widget-check",
231348
231846
  onClick: _cache[11] || (_cache[11] = vue$1.withModifiers(() => {}, ["stop"])),
231349
231847
  onChange: $event => ($options.check(task))
231350
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_35$d))
231351
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_36$d)),
231352
- vue$1.createElementVNode("span", _hoisted_37$c, [
231353
- vue$1.createElementVNode("span", _hoisted_38$c, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */),
231354
- vue$1.createElementVNode("span", _hoisted_39$a, [
231355
- vue$1.createElementVNode("span", _hoisted_40$8, vue$1.toDisplayString($options.subjectOf(task)), 1 /* TEXT */),
231848
+ }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_34$e))
231849
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_35$d)),
231850
+ vue$1.createElementVNode("span", _hoisted_36$d, [
231851
+ vue$1.createElementVNode("span", _hoisted_37$c, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */),
231852
+ vue$1.createElementVNode("span", _hoisted_38$c, [
231853
+ vue$1.createElementVNode("span", _hoisted_39$a, vue$1.toDisplayString($options.subjectOf(task)), 1 /* TEXT */),
231356
231854
  vue$1.createElementVNode("span", {
231357
231855
  class: vue$1.normalizeClass(["cn-tasks-widget__due", { 'cn-tasks-widget__due--overdue': task.overdue === true }])
231358
231856
  }, vue$1.toDisplayString($options.dueLabel(task)), 3 /* TEXT, CLASS */)
@@ -231360,9 +231858,9 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231360
231858
  ])
231361
231859
  ], 64 /* STABLE_FRAGMENT */))
231362
231860
  : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
231363
- vue$1.createElementVNode("span", _hoisted_41$6, [
231364
- vue$1.createElementVNode("span", _hoisted_42$6, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */),
231365
- vue$1.createElementVNode("span", _hoisted_43$6, vue$1.toDisplayString($options.metaLine(task)), 1 /* TEXT */)
231861
+ vue$1.createElementVNode("span", _hoisted_40$8, [
231862
+ vue$1.createElementVNode("span", _hoisted_41$6, vue$1.toDisplayString($options.titleOf(task)), 1 /* TEXT */),
231863
+ vue$1.createElementVNode("span", _hoisted_42$6, vue$1.toDisplayString($options.metaLine(task)), 1 /* TEXT */)
231366
231864
  ]),
231367
231865
  vue$1.createElementVNode("span", {
231368
231866
  class: vue$1.normalizeClass(["cn-tasks-widget__due", { 'cn-tasks-widget__due--overdue': task.overdue === true }])
@@ -231407,11 +231905,11 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231407
231905
  _: 2 /* DYNAMIC */
231408
231906
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["aria-label"]))
231409
231907
  : vue$1.createCommentVNode("v-if", true)
231410
- ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_34$e))
231908
+ ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_33$e))
231411
231909
  }), 128 /* KEYED_FRAGMENT */))
231412
231910
  ]),
231413
231911
  ($options.hiddenCount > 0)
231414
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_44$6, vue$1.toDisplayString($options.moreLabel), 1 /* TEXT */))
231912
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_43$6, vue$1.toDisplayString($options.moreLabel), 1 /* TEXT */))
231415
231913
  : vue$1.createCommentVNode("v-if", true)
231416
231914
  ], 64 /* STABLE_FRAGMENT */)),
231417
231915
  ($data.formTask)
@@ -231428,7 +231926,7 @@ function render$4g(_ctx, _cache, $props, $setup, $data, $options) {
231428
231926
  }
231429
231927
 
231430
231928
  script$4h.render = render$4g;
231431
- script$4h.__scopeId = "data-v-9804876c";
231929
+ script$4h.__scopeId = "data-v-7dc074ce";
231432
231930
  const __sfc_main$4h = script$4h;
231433
231931
 
231434
231932
  /**
@@ -238967,8 +239465,8 @@ const _hoisted_23$z = { class: "cn-facts-widget__meter-value" };
238967
239465
  const _hoisted_24$w = ["aria-label", "aria-valuenow", "aria-valuemax", "aria-valuetext", "data-testid"];
238968
239466
  const _hoisted_25$s = ["data-testid"];
238969
239467
  const _hoisted_26$q = ["aria-label", "aria-valuenow", "data-testid"];
238970
- const _hoisted_27$j = { class: "cn-facts-widget__line" };
238971
- const _hoisted_28$i = { key: 7 };
239468
+ const _hoisted_27$k = { class: "cn-facts-widget__line" };
239469
+ const _hoisted_28$j = { key: 7 };
238972
239470
 
238973
239471
  function render$47(_ctx, _cache, $props, $setup, $data, $options) {
238974
239472
  const _component_NcLoadingIcon = vue$1.resolveComponent("NcLoadingIcon");
@@ -239224,10 +239722,10 @@ function render$47(_ctx, _cache, $props, $setup, $data, $options) {
239224
239722
  }, null, 4 /* STYLE */)
239225
239723
  ], 8 /* PROPS */, _hoisted_26$q))
239226
239724
  : vue$1.createCommentVNode("v-if", true),
239227
- vue$1.createElementVNode("span", _hoisted_27$j, vue$1.toDisplayString(block.value), 1 /* TEXT */)
239725
+ vue$1.createElementVNode("span", _hoisted_27$k, vue$1.toDisplayString(block.value), 1 /* TEXT */)
239228
239726
  ], 8 /* PROPS */, _hoisted_25$s))
239229
239727
  : (block.kind === 'pill')
239230
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$i, [
239728
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$j, [
239231
239729
  vue$1.createVNode(_component_CnStatusBadge, {
239232
239730
  label: block.value,
239233
239731
  variant: block.variant,
@@ -246114,16 +246612,16 @@ const _hoisted_26$o = {
246114
246612
  key: 1,
246115
246613
  class: "cn-field-list-widget__copies"
246116
246614
  };
246117
- const _hoisted_27$i = {
246615
+ const _hoisted_27$j = {
246118
246616
  key: 6,
246119
246617
  class: "cn-field-list-widget__hint"
246120
246618
  };
246121
- const _hoisted_28$h = {
246619
+ const _hoisted_28$i = {
246122
246620
  key: 7,
246123
246621
  class: "cn-field-list-widget__toolbar"
246124
246622
  };
246125
- const _hoisted_29$g = ["data-testid"];
246126
- const _hoisted_30$g = {
246623
+ const _hoisted_29$h = ["data-testid"];
246624
+ const _hoisted_30$h = {
246127
246625
  class: "cn-field-list-widget__sr",
246128
246626
  "aria-live": "polite",
246129
246627
  "data-testid": "cn-field-list-copied"
@@ -246479,10 +246977,10 @@ function render$3Z(_ctx, _cache, $props, $setup, $data, $options) {
246479
246977
  }), 128 /* KEYED_FRAGMENT */))
246480
246978
  ])),
246481
246979
  ($options.hint)
246482
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_27$i, vue$1.toDisplayString($options.hint), 1 /* TEXT */))
246980
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_27$j, vue$1.toDisplayString($options.hint), 1 /* TEXT */))
246483
246981
  : vue$1.createCommentVNode("v-if", true),
246484
246982
  ($options.canAdd && $options.addTrigger && $options.addPlacement === 'footer' && !$data.adding)
246485
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$h, [
246983
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$i, [
246486
246984
  vue$1.createVNode(_component_NcButton, {
246487
246985
  variant: "secondary",
246488
246986
  disabled: $data.busy !== '',
@@ -246551,7 +247049,7 @@ function render$3Z(_ctx, _cache, $props, $setup, $data, $options) {
246551
247049
  error: Boolean($data.errors[field.key]),
246552
247050
  helperText: $data.errors[field.key] || ''
246553
247051
  }, null, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue", "label", "error", "helperText"]))
246554
- ], 8 /* PROPS */, _hoisted_29$g))
247052
+ ], 8 /* PROPS */, _hoisted_29$h))
246555
247053
  }), 128 /* KEYED_FRAGMENT */)),
246556
247054
  vue$1.createVNode(_component_NcButton, {
246557
247055
  type: "submit",
@@ -246579,7 +247077,7 @@ function render$3Z(_ctx, _cache, $props, $setup, $data, $options) {
246579
247077
  : vue$1.createCommentVNode("v-if", true)
246580
247078
  ], 32 /* NEED_HYDRATION */))
246581
247079
  : vue$1.createCommentVNode("v-if", true),
246582
- vue$1.createElementVNode("span", _hoisted_30$g, vue$1.toDisplayString($data.copied), 1 /* TEXT */),
247080
+ vue$1.createElementVNode("span", _hoisted_30$h, vue$1.toDisplayString($data.copied), 1 /* TEXT */),
246583
247081
  ($data.notice)
246584
247082
  ? (vue$1.openBlock(), vue$1.createBlock(_component_NcNoteCard, {
246585
247083
  key: 9,
@@ -254007,25 +254505,25 @@ const _hoisted_26$m = {
254007
254505
  "aria-hidden": "true",
254008
254506
  "data-testid": "cn-record-list-avatar"
254009
254507
  };
254010
- const _hoisted_27$h = { class: "cn-record-list__main" };
254011
- const _hoisted_28$g = {
254508
+ const _hoisted_27$i = { class: "cn-record-list__main" };
254509
+ const _hoisted_28$h = {
254012
254510
  key: 1,
254013
254511
  class: "cn-record-list__meta"
254014
254512
  };
254015
- const _hoisted_29$f = {
254513
+ const _hoisted_29$g = {
254016
254514
  key: 3,
254017
254515
  class: "cn-record-list__flag",
254018
254516
  "data-testid": "cn-record-list-flag"
254019
254517
  };
254020
- const _hoisted_30$f = {
254518
+ const _hoisted_30$g = {
254021
254519
  key: 4,
254022
254520
  class: "cn-record-list__pills"
254023
254521
  };
254024
- const _hoisted_31$e = {
254522
+ const _hoisted_31$f = {
254025
254523
  key: 6,
254026
254524
  class: "cn-record-list__trailing"
254027
254525
  };
254028
- const _hoisted_32$e = {
254526
+ const _hoisted_32$f = {
254029
254527
  key: 0,
254030
254528
  class: "cn-record-list__leading",
254031
254529
  "data-testid": "cn-record-list-leading"
@@ -254444,7 +254942,7 @@ function render$3P(_ctx, _cache, $props, $setup, $data, $options) {
254444
254942
  "data-testid": "cn-record-list-dot"
254445
254943
  }, null, 4 /* STYLE */))
254446
254944
  : vue$1.createCommentVNode("v-if", true),
254447
- vue$1.createElementVNode("span", _hoisted_27$h, [
254945
+ vue$1.createElementVNode("span", _hoisted_27$i, [
254448
254946
  (item.title)
254449
254947
  ? (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent(item.tag), vue$1.mergeProps({
254450
254948
  key: 0,
@@ -254457,14 +254955,14 @@ function render$3P(_ctx, _cache, $props, $setup, $data, $options) {
254457
254955
  }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */, ["class"]))
254458
254956
  : vue$1.createCommentVNode("v-if", true),
254459
254957
  (item.meta)
254460
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$g, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
254958
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$h, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
254461
254959
  : vue$1.createCommentVNode("v-if", true)
254462
254960
  ]),
254463
254961
  (item.flag)
254464
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$f, vue$1.toDisplayString(item.flag), 1 /* TEXT */))
254962
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$g, vue$1.toDisplayString(item.flag), 1 /* TEXT */))
254465
254963
  : vue$1.createCommentVNode("v-if", true),
254466
254964
  (item.pill || item.badges.length > 0)
254467
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$f, [
254965
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$g, [
254468
254966
  (item.pill)
254469
254967
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnStatusBadge, {
254470
254968
  key: 0,
@@ -254492,7 +254990,7 @@ function render$3P(_ctx, _cache, $props, $setup, $data, $options) {
254492
254990
  }, vue$1.toDisplayString(item.due.text), 3 /* TEXT, CLASS */))
254493
254991
  : vue$1.createCommentVNode("v-if", true),
254494
254992
  (item.trailing)
254495
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_31$e, vue$1.toDisplayString(item.trailing), 1 /* TEXT */))
254993
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_31$f, vue$1.toDisplayString(item.trailing), 1 /* TEXT */))
254496
254994
  : vue$1.createCommentVNode("v-if", true),
254497
254995
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent(item.action.tag), vue$1.mergeProps({
254498
254996
  class: ["cn-record-list__action", { 'cn-record-list__action--outlined': $options.rowActionOutlined }]
@@ -254510,7 +255008,7 @@ function render$3P(_ctx, _cache, $props, $setup, $data, $options) {
254510
255008
  }, { ref_for: true }, item.attrs), {
254511
255009
  default: vue$1.withCtx(() => [
254512
255010
  (item.leading)
254513
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_32$e, vue$1.toDisplayString(item.leading), 1 /* TEXT */))
255011
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_32$f, vue$1.toDisplayString(item.leading), 1 /* TEXT */))
254514
255012
  : vue$1.createCommentVNode("v-if", true),
254515
255013
  ($options.pillFirst && item.pill)
254516
255014
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_33$d, [
@@ -260932,6 +261430,7 @@ var script$3B = {
260932
261430
 
260933
261431
  inject: {
260934
261432
  cnTranslate: { default: () => (key) => key },
261433
+ cnLook: { default: 'nextcloud' },
260935
261434
  },
260936
261435
 
260937
261436
  props: {
@@ -260992,6 +261491,11 @@ var script$3B = {
260992
261491
  },
260993
261492
 
260994
261493
  computed: {
261494
+ /** @return {boolean} The board look draws one ruled row per party. */
261495
+ isBoard() {
261496
+ return normalizeLook(this.cnLook) === 'board'
261497
+ },
261498
+
260995
261499
  /** @return {Array<object>} The role groups, primary first. */
260996
261500
  groups() {
260997
261501
  return rolesInOrder(this.listing, this.translatedMap(this.content?.roleLabels))
@@ -261561,6 +262065,29 @@ var script$3B = {
261561
262065
  * @param {object} party The listing row.
261562
262066
  * @return {Array<object>}
261563
262067
  */
262068
+ /**
262069
+ * The board row's meta line: the primary mark, the role, the kind,
262070
+ * whom the party represents, its extra lines, e-mail and documents,
262071
+ * separated by middots.
262072
+ *
262073
+ * @param {object} party The party.
262074
+ * @param {object} group Its role group.
262075
+ * @return {string}
262076
+ */
262077
+ boardMetaOf(party, group) {
262078
+ const parts = [];
262079
+ if (this.primary && party.partyUuid === this.primary) {
262080
+ parts.push(this.label('primary'));
262081
+ }
262082
+ parts.push(group.label, this.kindOf(party));
262083
+ const represented = this.representedBy(party);
262084
+ if (represented) {
262085
+ parts.push(`${this.label('representedBy')}: ${represented}`);
262086
+ }
262087
+ parts.push(...this.extraLinesOf(party), party.email, this.correspondenceOf(party));
262088
+ return parts.filter((part) => typeof part === 'string' && part !== '').join(' · ')
262089
+ },
262090
+
261564
262091
  indicatorsFor(party) {
261565
262092
  const record = this.partyRecords[party.partyUuid];
261566
262093
  if (!record) {
@@ -261591,81 +262118,94 @@ var script$3B = {
261591
262118
  };
261592
262119
 
261593
262120
  const _hoisted_1$3B = {
261594
- class: "cn-object-parties",
261595
- "data-testid": "cn-object-parties"
261596
- };
261597
- const _hoisted_2$3v = {
261598
262121
  key: 0,
261599
262122
  class: "cn-object-parties__manage"
261600
262123
  };
261601
- const _hoisted_3$35 = {
262124
+ const _hoisted_2$3v = {
261602
262125
  key: 4,
261603
262126
  class: "cn-object-parties__main-card",
261604
262127
  "data-testid": "cn-object-parties-main-card"
261605
262128
  };
261606
- const _hoisted_4$2P = ["data-party"];
261607
- const _hoisted_5$2q = {
262129
+ const _hoisted_3$35 = ["data-party"];
262130
+ const _hoisted_4$2P = {
261608
262131
  class: "cn-object-parties__main-initials",
261609
262132
  "aria-hidden": "true",
261610
262133
  "data-testid": "cn-object-parties-main-initials"
261611
262134
  };
261612
- const _hoisted_6$2f = { class: "cn-object-parties__main-text" };
261613
- const _hoisted_7$1_ = {
262135
+ const _hoisted_5$2q = { class: "cn-object-parties__main-text" };
262136
+ const _hoisted_6$2f = {
261614
262137
  class: "cn-object-parties__main-name",
261615
262138
  "data-testid": "cn-object-parties-main-name"
261616
262139
  };
261617
- const _hoisted_8$1N = {
262140
+ const _hoisted_7$1_ = {
261618
262141
  key: 0,
261619
262142
  class: "cn-object-parties__muted cn-object-parties__main-role",
261620
262143
  "data-testid": "cn-object-parties-main-role"
261621
262144
  };
261622
- const _hoisted_9$1C = {
262145
+ const _hoisted_8$1N = {
261623
262146
  key: 1,
261624
262147
  class: "cn-object-parties__muted",
261625
262148
  "data-testid": "cn-object-parties-main-none"
261626
262149
  };
262150
+ const _hoisted_9$1C = ["href"];
261627
262151
  const _hoisted_10$1t = ["href"];
261628
- const _hoisted_11$1h = ["href"];
261629
- const _hoisted_12$17 = ["data-source"];
261630
- const _hoisted_13$Y = { class: "cn-object-parties__accepted-label" };
261631
- const _hoisted_14$W = {
262152
+ const _hoisted_11$1h = ["data-source"];
262153
+ const _hoisted_12$17 = { class: "cn-object-parties__accepted-label" };
262154
+ const _hoisted_13$Y = {
261632
262155
  key: 0,
261633
262156
  class: "cn-object-parties__muted"
261634
262157
  };
261635
- const _hoisted_15$S = {
262158
+ const _hoisted_14$W = {
261636
262159
  key: 1,
261637
262160
  class: "cn-object-parties__verdicts",
261638
262161
  "data-testid": "cn-object-parties-verdicts"
261639
262162
  };
261640
- const _hoisted_16$O = ["data-role", "aria-labelledby"];
261641
- const _hoisted_17$K = { class: "cn-object-parties__list" };
261642
- const _hoisted_18$D = ["data-party"];
261643
- const _hoisted_19$B = { class: "cn-object-parties__name" };
261644
- const _hoisted_20$w = {
262163
+ const _hoisted_15$S = ["data-role", "aria-labelledby"];
262164
+ const _hoisted_16$O = { class: "cn-object-parties__list" };
262165
+ const _hoisted_17$K = ["data-party"];
262166
+ const _hoisted_18$D = {
262167
+ class: "cn-object-parties__tile",
262168
+ "aria-hidden": "true"
262169
+ };
262170
+ const _hoisted_19$B = { class: "cn-object-parties__text" };
262171
+ const _hoisted_20$w = { class: "cn-object-parties__name" };
262172
+ const _hoisted_21$w = {
262173
+ class: "cn-object-parties__meta",
262174
+ "data-testid": "cn-object-parties-meta"
262175
+ };
262176
+ const _hoisted_22$w = { class: "cn-object-parties__end" };
262177
+ const _hoisted_23$t = {
262178
+ key: 0,
262179
+ class: "cn-status-badge cn-status-badge--warning",
262180
+ "data-testid": "cn-object-parties-not-accepted"
262181
+ };
262182
+ const _hoisted_24$r = ["data-effect", "title"];
262183
+ const _hoisted_25$n = { class: "cn-object-parties__name" };
262184
+ const _hoisted_26$l = {
261645
262185
  key: 0,
261646
262186
  class: "cn-status-badge cn-status-badge--primary",
261647
262187
  "data-testid": "cn-object-parties-primary"
261648
262188
  };
261649
- const _hoisted_21$w = {
262189
+ const _hoisted_27$h = {
261650
262190
  key: 1,
261651
262191
  class: "cn-object-parties__muted"
261652
262192
  };
261653
- const _hoisted_22$w = {
262193
+ const _hoisted_28$g = {
261654
262194
  key: 2,
261655
262195
  class: "cn-status-badge cn-status-badge--warning",
261656
262196
  "data-testid": "cn-object-parties-not-accepted"
261657
262197
  };
261658
- const _hoisted_23$t = {
262198
+ const _hoisted_29$f = {
261659
262199
  key: 3,
261660
262200
  class: "cn-object-parties__muted"
261661
262201
  };
261662
- const _hoisted_24$r = {
262202
+ const _hoisted_30$f = {
261663
262203
  key: 4,
261664
262204
  class: "cn-object-parties__muted",
261665
262205
  "data-testid": "cn-object-parties-represented"
261666
262206
  };
261667
- const _hoisted_25$n = ["data-party-documents"];
261668
- const _hoisted_26$l = ["data-effect", "title"];
262207
+ const _hoisted_31$e = ["data-party-documents"];
262208
+ const _hoisted_32$e = ["data-effect", "title"];
261669
262209
 
261670
262210
  function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261671
262211
  const _component_Plus = vue$1.resolveComponent("Plus");
@@ -261678,9 +262218,12 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261678
262218
  const _component_CnPartyAddDialog = vue$1.resolveComponent("CnPartyAddDialog");
261679
262219
  const _component_CnConfirmDialog = vue$1.resolveComponent("CnConfirmDialog");
261680
262220
 
261681
- return (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_1$3B, [
262221
+ return (vue$1.openBlock(), vue$1.createElementBlock("div", {
262222
+ class: vue$1.normalizeClass(["cn-object-parties", { 'cn-object-parties--board': $options.isBoard }]),
262223
+ "data-testid": "cn-object-parties"
262224
+ }, [
261682
262225
  ($options.canAdd)
261683
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_2$3v, [
262226
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_1$3B, [
261684
262227
  vue$1.createVNode(_component_NcButton, {
261685
262228
  "data-testid": "cn-object-parties-add",
261686
262229
  onClick: _cache[0] || (_cache[0] = $event => ($data.adding = true))
@@ -261721,7 +262264,7 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261721
262264
  "data-testid": "cn-object-parties-failed"
261722
262265
  }, null, 8 /* PROPS */, ["name", "description"]))
261723
262266
  : ($options.isPrimaryPresentation)
261724
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_3$35, [
262267
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_2$3v, [
261725
262268
  ($options.mainParty)
261726
262269
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", {
261727
262270
  key: 0,
@@ -261729,15 +262272,15 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261729
262272
  "data-party": $options.mainParty.partyUuid,
261730
262273
  "data-testid": "cn-object-parties-main"
261731
262274
  }, [
261732
- vue$1.createElementVNode("span", _hoisted_5$2q, vue$1.toDisplayString($options.initialsOf($options.nameOf($options.mainParty))), 1 /* TEXT */),
261733
- vue$1.createElementVNode("span", _hoisted_6$2f, [
261734
- vue$1.createElementVNode("strong", _hoisted_7$1_, vue$1.toDisplayString($options.nameOf($options.mainParty)), 1 /* TEXT */),
262275
+ vue$1.createElementVNode("span", _hoisted_4$2P, vue$1.toDisplayString($options.initialsOf($options.nameOf($options.mainParty))), 1 /* TEXT */),
262276
+ vue$1.createElementVNode("span", _hoisted_5$2q, [
262277
+ vue$1.createElementVNode("strong", _hoisted_6$2f, vue$1.toDisplayString($options.nameOf($options.mainParty)), 1 /* TEXT */),
261735
262278
  ($options.mainRole)
261736
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_8$1N, vue$1.toDisplayString($options.mainRole), 1 /* TEXT */))
262279
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_7$1_, vue$1.toDisplayString($options.mainRole), 1 /* TEXT */))
261737
262280
  : vue$1.createCommentVNode("v-if", true)
261738
262281
  ])
261739
- ], 8 /* PROPS */, _hoisted_4$2P))
261740
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_9$1C, vue$1.toDisplayString($options.label('noPrimary')), 1 /* TEXT */)),
262282
+ ], 8 /* PROPS */, _hoisted_3$35))
262283
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_8$1N, vue$1.toDisplayString($options.label('noPrimary')), 1 /* TEXT */)),
261741
262284
  ($options.mainParty && $options.mainParty.email)
261742
262285
  ? (vue$1.openBlock(), vue$1.createElementBlock("a", {
261743
262286
  key: 2,
@@ -261750,7 +262293,7 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261750
262293
  "aria-hidden": "true"
261751
262294
  }),
261752
262295
  vue$1.createTextVNode(vue$1.toDisplayString($options.mainParty.email), 1 /* TEXT */)
261753
- ], 8 /* PROPS */, _hoisted_10$1t))
262296
+ ], 8 /* PROPS */, _hoisted_9$1C))
261754
262297
  : vue$1.createCommentVNode("v-if", true),
261755
262298
  ($options.footLink)
261756
262299
  ? (vue$1.openBlock(), vue$1.createElementBlock("a", {
@@ -261758,7 +262301,7 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261758
262301
  class: "cn-object-parties__main-link",
261759
262302
  href: $options.footLink.href,
261760
262303
  "data-testid": "cn-object-parties-main-link"
261761
- }, vue$1.toDisplayString($options.footLink.label), 9 /* TEXT, PROPS */, _hoisted_11$1h))
262304
+ }, vue$1.toDisplayString($options.footLink.label), 9 /* TEXT, PROPS */, _hoisted_10$1t))
261762
262305
  : vue$1.createCommentVNode("v-if", true)
261763
262306
  ]))
261764
262307
  : ($options.groups.length === 0)
@@ -261776,7 +262319,7 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261776
262319
  "data-source": $data.kinds.source,
261777
262320
  "data-testid": "cn-object-parties-accepted"
261778
262321
  }, [
261779
- vue$1.createElementVNode("span", _hoisted_13$Y, vue$1.toDisplayString($options.label('accepted')), 1 /* TEXT */),
262322
+ vue$1.createElementVNode("span", _hoisted_12$17, vue$1.toDisplayString($options.label('accepted')), 1 /* TEXT */),
261780
262323
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($data.kinds.kinds, (kind, index) => {
261781
262324
  return (vue$1.openBlock(), vue$1.createElementBlock("span", {
261782
262325
  key: $options.kindCode(kind),
@@ -261785,12 +262328,12 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261785
262328
  }, vue$1.toDisplayString(index + 1) + ". " + vue$1.toDisplayString(kind.label || $options.kindCode(kind)), 1 /* TEXT */))
261786
262329
  }), 128 /* KEYED_FRAGMENT */)),
261787
262330
  ($options.kindsSourceText)
261788
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_14$W, vue$1.toDisplayString($options.kindsSourceText), 1 /* TEXT */))
262331
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_13$Y, vue$1.toDisplayString($options.kindsSourceText), 1 /* TEXT */))
261789
262332
  : vue$1.createCommentVNode("v-if", true)
261790
- ], 8 /* PROPS */, _hoisted_12$17))
262333
+ ], 8 /* PROPS */, _hoisted_11$1h))
261791
262334
  : vue$1.createCommentVNode("v-if", true),
261792
262335
  ($options.verdicts.length > 0)
261793
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_15$S, [
262336
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_14$W, [
261794
262337
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.verdicts, (verdict) => {
261795
262338
  return (vue$1.openBlock(), vue$1.createBlock(_component_NcNoteCard, {
261796
262339
  key: `${verdict.party}-${verdict.key}`,
@@ -261824,7 +262367,7 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261824
262367
  ]),
261825
262368
  _: 2 /* DYNAMIC */
261826
262369
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["id"])),
261827
- vue$1.createElementVNode("ul", _hoisted_17$K, [
262370
+ vue$1.createElementVNode("ul", _hoisted_16$O, [
261828
262371
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList(group.parties, (party) => {
261829
262372
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
261830
262373
  key: `${group.key}-${party.partyUuid || party.contactUid}`,
@@ -261832,66 +262375,106 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261832
262375
  "data-party": party.partyUuid || party.contactUid,
261833
262376
  "data-testid": "cn-object-parties-party"
261834
262377
  }, [
261835
- vue$1.createElementVNode("span", _hoisted_19$B, vue$1.toDisplayString($options.nameOf(party)), 1 /* TEXT */),
261836
- ($options.primary && party.partyUuid === $options.primary)
261837
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_20$w, vue$1.toDisplayString($options.label('primary')), 1 /* TEXT */))
261838
- : vue$1.createCommentVNode("v-if", true),
261839
- ($options.kindOf(party))
261840
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_21$w, vue$1.toDisplayString($options.kindOf(party)), 1 /* TEXT */))
261841
- : vue$1.createCommentVNode("v-if", true),
261842
- ($options.notAccepted(party))
261843
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_22$w, vue$1.toDisplayString($options.label('notAccepted')), 1 /* TEXT */))
261844
- : vue$1.createCommentVNode("v-if", true),
261845
- (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.extraLinesOf(party), (line, index) => {
261846
- return (vue$1.openBlock(), vue$1.createElementBlock("span", {
261847
- key: `line-${index}`,
261848
- class: "cn-object-parties__muted",
261849
- "data-testid": "cn-object-parties-extra-line"
261850
- }, vue$1.toDisplayString(line), 1 /* TEXT */))
261851
- }), 128 /* KEYED_FRAGMENT */)),
261852
- (party.email)
261853
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$t, vue$1.toDisplayString(party.email), 1 /* TEXT */))
261854
- : vue$1.createCommentVNode("v-if", true),
261855
- ($options.representedBy(party))
261856
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_24$r, vue$1.toDisplayString($options.label('representedBy')) + ": " + vue$1.toDisplayString($options.representedBy(party)), 1 /* TEXT */))
261857
- : vue$1.createCommentVNode("v-if", true),
261858
- ($options.correspondenceOf(party))
261859
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", {
261860
- key: 5,
261861
- class: "cn-object-parties__muted",
261862
- "data-party-documents": party.partyUuid || party.contactUid,
261863
- "data-testid": "cn-object-parties-documents"
261864
- }, vue$1.toDisplayString($options.correspondenceOf(party)), 9 /* TEXT, PROPS */, _hoisted_25$n))
261865
- : vue$1.createCommentVNode("v-if", true),
261866
- (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.indicatorsFor(party), (indicator) => {
261867
- return (vue$1.openBlock(), vue$1.createElementBlock("span", {
261868
- key: `${party.partyUuid}-${indicator.key}`,
261869
- class: vue$1.normalizeClass(["cn-status-badge cn-status-badge--default", `cn-object-parties__indicator--${indicator.severity}`]),
261870
- "data-effect": indicator.effect,
261871
- title: indicator.verdict,
261872
- "data-testid": "cn-object-parties-indicator"
261873
- }, vue$1.toDisplayString(indicator.label) + " · " + vue$1.toDisplayString(indicator.verdict), 11 /* TEXT, CLASS, PROPS */, _hoisted_26$l))
261874
- }), 128 /* KEYED_FRAGMENT */)),
261875
- ($options.canRemove && party.partyUuid)
261876
- ? (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
261877
- key: 6,
261878
- class: "cn-object-parties__remove",
261879
- variant: "tertiary",
261880
- "aria-label": $options.removeLabel(party, group),
261881
- title: $options.removeLabel(party, group),
261882
- "data-testid": "cn-object-parties-remove",
261883
- onClick: $event => ($data.removing = { party, group })
261884
- }, {
261885
- icon: vue$1.withCtx(() => [
261886
- vue$1.createVNode(_component_TrashCanOutline, { size: 20 })
262378
+ ($options.isBoard)
262379
+ ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 0 }, [
262380
+ vue$1.createElementVNode("span", _hoisted_18$D, vue$1.toDisplayString($options.initialsOf($options.nameOf(party))), 1 /* TEXT */),
262381
+ vue$1.createElementVNode("span", _hoisted_19$B, [
262382
+ vue$1.createElementVNode("span", _hoisted_20$w, vue$1.toDisplayString($options.nameOf(party)), 1 /* TEXT */),
262383
+ vue$1.createElementVNode("span", _hoisted_21$w, vue$1.toDisplayString($options.boardMetaOf(party, group)), 1 /* TEXT */)
261887
262384
  ]),
261888
- _: 1 /* STABLE */
261889
- }, 8 /* PROPS */, ["aria-label", "title", "onClick"]))
261890
- : vue$1.createCommentVNode("v-if", true)
261891
- ], 8 /* PROPS */, _hoisted_18$D))
262385
+ vue$1.createElementVNode("span", _hoisted_22$w, [
262386
+ ($options.notAccepted(party))
262387
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_23$t, vue$1.toDisplayString($options.label('notAccepted')), 1 /* TEXT */))
262388
+ : vue$1.createCommentVNode("v-if", true),
262389
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.indicatorsFor(party), (indicator) => {
262390
+ return (vue$1.openBlock(), vue$1.createElementBlock("span", {
262391
+ key: `${party.partyUuid}-${indicator.key}`,
262392
+ class: vue$1.normalizeClass(["cn-status-badge cn-status-badge--default", `cn-object-parties__indicator--${indicator.severity}`]),
262393
+ "data-effect": indicator.effect,
262394
+ title: indicator.verdict,
262395
+ "data-testid": "cn-object-parties-indicator"
262396
+ }, vue$1.toDisplayString(indicator.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_24$r))
262397
+ }), 128 /* KEYED_FRAGMENT */)),
262398
+ ($options.canRemove && party.partyUuid)
262399
+ ? (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
262400
+ key: 1,
262401
+ class: "cn-object-parties__remove",
262402
+ variant: "tertiary",
262403
+ "aria-label": $options.removeLabel(party, group),
262404
+ title: $options.removeLabel(party, group),
262405
+ "data-testid": "cn-object-parties-remove",
262406
+ onClick: $event => ($data.removing = { party, group })
262407
+ }, {
262408
+ icon: vue$1.withCtx(() => [
262409
+ vue$1.createVNode(_component_TrashCanOutline, { size: 20 })
262410
+ ]),
262411
+ _: 1 /* STABLE */
262412
+ }, 8 /* PROPS */, ["aria-label", "title", "onClick"]))
262413
+ : vue$1.createCommentVNode("v-if", true)
262414
+ ])
262415
+ ], 64 /* STABLE_FRAGMENT */))
262416
+ : (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 1 }, [
262417
+ vue$1.createElementVNode("span", _hoisted_25$n, vue$1.toDisplayString($options.nameOf(party)), 1 /* TEXT */),
262418
+ ($options.primary && party.partyUuid === $options.primary)
262419
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_26$l, vue$1.toDisplayString($options.label('primary')), 1 /* TEXT */))
262420
+ : vue$1.createCommentVNode("v-if", true),
262421
+ ($options.kindOf(party))
262422
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_27$h, vue$1.toDisplayString($options.kindOf(party)), 1 /* TEXT */))
262423
+ : vue$1.createCommentVNode("v-if", true),
262424
+ ($options.notAccepted(party))
262425
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_28$g, vue$1.toDisplayString($options.label('notAccepted')), 1 /* TEXT */))
262426
+ : vue$1.createCommentVNode("v-if", true),
262427
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.extraLinesOf(party), (line, index) => {
262428
+ return (vue$1.openBlock(), vue$1.createElementBlock("span", {
262429
+ key: `line-${index}`,
262430
+ class: "cn-object-parties__muted",
262431
+ "data-testid": "cn-object-parties-extra-line"
262432
+ }, vue$1.toDisplayString(line), 1 /* TEXT */))
262433
+ }), 128 /* KEYED_FRAGMENT */)),
262434
+ (party.email)
262435
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_29$f, vue$1.toDisplayString(party.email), 1 /* TEXT */))
262436
+ : vue$1.createCommentVNode("v-if", true),
262437
+ ($options.representedBy(party))
262438
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_30$f, vue$1.toDisplayString($options.label('representedBy')) + ": " + vue$1.toDisplayString($options.representedBy(party)), 1 /* TEXT */))
262439
+ : vue$1.createCommentVNode("v-if", true),
262440
+ ($options.correspondenceOf(party))
262441
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", {
262442
+ key: 5,
262443
+ class: "cn-object-parties__muted",
262444
+ "data-party-documents": party.partyUuid || party.contactUid,
262445
+ "data-testid": "cn-object-parties-documents"
262446
+ }, vue$1.toDisplayString($options.correspondenceOf(party)), 9 /* TEXT, PROPS */, _hoisted_31$e))
262447
+ : vue$1.createCommentVNode("v-if", true),
262448
+ (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.indicatorsFor(party), (indicator) => {
262449
+ return (vue$1.openBlock(), vue$1.createElementBlock("span", {
262450
+ key: `${party.partyUuid}-${indicator.key}`,
262451
+ class: vue$1.normalizeClass(["cn-status-badge cn-status-badge--default", `cn-object-parties__indicator--${indicator.severity}`]),
262452
+ "data-effect": indicator.effect,
262453
+ title: indicator.verdict,
262454
+ "data-testid": "cn-object-parties-indicator"
262455
+ }, vue$1.toDisplayString(indicator.label) + " · " + vue$1.toDisplayString(indicator.verdict), 11 /* TEXT, CLASS, PROPS */, _hoisted_32$e))
262456
+ }), 128 /* KEYED_FRAGMENT */)),
262457
+ ($options.canRemove && party.partyUuid)
262458
+ ? (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
262459
+ key: 6,
262460
+ class: "cn-object-parties__remove",
262461
+ variant: "tertiary",
262462
+ "aria-label": $options.removeLabel(party, group),
262463
+ title: $options.removeLabel(party, group),
262464
+ "data-testid": "cn-object-parties-remove",
262465
+ onClick: $event => ($data.removing = { party, group })
262466
+ }, {
262467
+ icon: vue$1.withCtx(() => [
262468
+ vue$1.createVNode(_component_TrashCanOutline, { size: 20 })
262469
+ ]),
262470
+ _: 1 /* STABLE */
262471
+ }, 8 /* PROPS */, ["aria-label", "title", "onClick"]))
262472
+ : vue$1.createCommentVNode("v-if", true)
262473
+ ], 64 /* STABLE_FRAGMENT */))
262474
+ ], 8 /* PROPS */, _hoisted_17$K))
261892
262475
  }), 128 /* KEYED_FRAGMENT */))
261893
262476
  ])
261894
- ], 8 /* PROPS */, _hoisted_16$O))
262477
+ ], 8 /* PROPS */, _hoisted_15$S))
261895
262478
  }), 128 /* KEYED_FRAGMENT */))
261896
262479
  ], 64 /* STABLE_FRAGMENT */)),
261897
262480
  ($data.adding)
@@ -261922,11 +262505,11 @@ function render$3A(_ctx, _cache, $props, $setup, $data, $options) {
261922
262505
  onConfirm: $options.removeParty
261923
262506
  }, null, 8 /* PROPS */, ["dialogTitle", "message", "confirmLabel", "onConfirm"]))
261924
262507
  : vue$1.createCommentVNode("v-if", true)
261925
- ]))
262508
+ ], 2 /* CLASS */))
261926
262509
  }
261927
262510
 
261928
262511
  script$3B.render = render$3A;
261929
- script$3B.__scopeId = "data-v-0c4e5c0c";
262512
+ script$3B.__scopeId = "data-v-44731ec4";
261930
262513
  const __sfc_main$3B = script$3B;
261931
262514
 
261932
262515
  /**
@@ -360980,7 +361563,7 @@ var script$20 = {
360980
361563
  ];
360981
361564
  let counts;
360982
361565
  try {
360983
- counts = await fetchFilterCounts({ register: this.register, schema, entries, baseFilter: base, ctx });
361566
+ counts = await fetchFilterCounts({ register: this.register, schema, entries, baseFilter: base, ctx, via: 'list' });
360984
361567
  } catch {
360985
361568
  counts = {};
360986
361569
  }
@@ -361037,6 +361620,8 @@ var script$20 = {
361037
361620
  })),
361038
361621
  baseFilter: resolveFilterMap(this.filter, params, ctx),
361039
361622
  ctx,
361623
+ // The chips count what the list shows: the list's own request.
361624
+ via: 'list',
361040
361625
  });
361041
361626
  if (requestKey !== this.countRequestKey) {
361042
361627
  return
@@ -376869,7 +377454,8 @@ let reasonSeq = 0;
376869
377454
  * `eyebrow` a template filled from the record ("Close off · {identifier}").
376870
377455
  * - `summary`: `{ source?, title, meta?, badge?, icon? }`: templates filled from
376871
377456
  * the record (`source` an endpointSource to read it from, else `object`).
376872
- * - `facts`: `[{ title?, items: [{ label, value }] }]`, `value` a template.
377457
+ * - `facts`: `[{ title?, items: [{ label, value }] }]`, `value` a template; a
377458
+ * `{path|<formatter>}` token reads through the built-in and app formatters.
376873
377459
  * - `checklist`: `{ title?, source, itemsPath?, labels?, required? }`: items
376874
377460
  * `{ id, met, label?, detail? }` read from `source`; `labels[id]` gives an
376875
377461
  * item's `{ label, detail?, unmetDetail? }`; the ids in `required` must be
@@ -376912,6 +377498,8 @@ var script$1M = {
376912
377498
  cnTranslate: { default: () => (key) => key },
376913
377499
  /** The page's pre-bound action dispatcher (CnPageRenderer), for `confirm.action`. */
376914
377500
  cnDispatchAction: { default: null },
377501
+ /** The app's named formatters (CnAppRoot), for `{path|<formatter>}` in a template. */
377502
+ cnFormatters: { default: () => ({}) },
376915
377503
  },
376916
377504
 
376917
377505
  props: {
@@ -377244,7 +377832,8 @@ var script$1M = {
377244
377832
  if (typeof template !== 'string' || template === '') {
377245
377833
  return ''
377246
377834
  }
377247
- return fillTemplate(this.cnTranslate(template), row || this.record || {}).trim()
377835
+ const formatters = { ...BUILT_IN_FORMATTERS, ...(this.cnFormatters || {}) };
377836
+ return fillTemplate(this.cnTranslate(template), row || this.record || {}, new Date(), { formatters }).trim()
377248
377837
  },
377249
377838
 
377250
377839
  /**
@@ -377816,7 +378405,7 @@ function render$1L(_ctx, _cache, $props, $setup, $data, $options) {
377816
378405
  }
377817
378406
 
377818
378407
  script$1M.render = render$1L;
377819
- script$1M.__scopeId = "data-v-a3810b54";
378408
+ script$1M.__scopeId = "data-v-60a1dc8f";
377820
378409
  const __sfc_main$1M = script$1M;
377821
378410
 
377822
378411
  var CnActionDialog = /*#__PURE__*/Object.freeze({