@conduction/nextcloud-vue 2.122.0 → 2.123.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 (98) hide show
  1. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +1 -0
  2. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  4. package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue.js +1 -1
  5. package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue2.js +18 -4
  6. package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue2.js.map +1 -1
  7. package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue3.js +63 -32
  8. package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue3.js.map +1 -1
  9. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  10. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  11. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  12. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +35 -0
  13. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  14. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +11 -5
  15. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  16. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  17. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +13 -0
  18. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +37 -5
  20. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  21. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  22. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +40 -0
  23. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  24. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +71 -65
  25. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  26. package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue.js +1 -1
  27. package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue2.js +20 -0
  28. package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue2.js.map +1 -1
  29. package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue3.js +2 -1
  30. package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue3.js.map +1 -1
  31. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue.js +1 -1
  32. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js +2 -0
  33. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js.map +1 -1
  34. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js +49 -44
  35. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js.map +1 -1
  36. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js +10 -0
  37. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js.map +1 -1
  38. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js +2 -1
  39. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js.map +1 -1
  40. package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue2.js +31 -0
  41. package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue2.js.map +1 -1
  42. package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue3.js +4 -3
  43. package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue3.js.map +1 -1
  44. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +34 -2
  45. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  46. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  47. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue.js +1 -1
  48. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +2 -0
  49. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  50. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +2 -1
  51. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  52. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +1 -1
  53. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +31 -1
  54. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -1
  55. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +14 -4
  56. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -1
  57. package/dist/esm/composables/flowGraphLayout.js +36 -7
  58. package/dist/esm/composables/flowGraphLayout.js.map +1 -1
  59. package/dist/esm/composables/useFlowStore.js +7 -3
  60. package/dist/esm/composables/useFlowStore.js.map +1 -1
  61. package/dist/esm/l10n/en.json.js +3 -1
  62. package/dist/esm/l10n/en.json.js.map +1 -1
  63. package/dist/esm/l10n/nl.json.js +3 -1
  64. package/dist/esm/l10n/nl.json.js.map +1 -1
  65. package/dist/esm/library-style.js +1 -1
  66. package/dist/esm/nextcloud-vue.css +508 -303
  67. package/dist/esm/utils/manifestTranslate.js +12 -3
  68. package/dist/esm/utils/manifestTranslate.js.map +1 -1
  69. package/dist/esm/utils/routeFilters.js +3 -3
  70. package/dist/esm/utils/routeFilters.js.map +1 -1
  71. package/dist/nextcloud-vue.cjs.js +1217 -847
  72. package/dist/nextcloud-vue.cjs.js.map +2 -2
  73. package/dist/nextcloud-vue.css +508 -303
  74. package/l10n/en.json +3 -1
  75. package/l10n/nl.json +3 -1
  76. package/package.json +1 -1
  77. package/src/components/CnAppRoot/CnAppRoot.vue +1 -0
  78. package/src/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue +50 -5
  79. package/src/components/CnChartWidget/CnChartWidget.vue +10 -8
  80. package/src/components/CnDetailPage/CnDetailPage.md +10 -0
  81. package/src/components/CnDetailPage/CnDetailPage.vue +42 -1
  82. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +39 -0
  83. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +95 -37
  84. package/src/components/CnFlowDetail/CnFlowDetail.vue +21 -0
  85. package/src/components/CnFlowsPage/CnFlowBoard.vue +35 -18
  86. package/src/components/CnFlowsPage/CnFlowEditorPage.vue +11 -0
  87. package/src/components/CnGraphCanvas/CnGraphCanvas.vue +34 -2
  88. package/src/components/CnIndexPage/CnIndexPage.vue +34 -2
  89. package/src/components/CnObjectSidebar/CnFilesTab.vue +3 -0
  90. package/src/components/CnSectionsWidget/CnSectionsWidget.vue +53 -2
  91. package/src/composables/flowGraphLayout.js +35 -6
  92. package/src/composables/useFlowStore.js +7 -3
  93. package/src/css/detail-page.css +6 -0
  94. package/src/css/look-board-detail.css +26 -6
  95. package/src/css/look-board-index.css +43 -0
  96. package/src/css/look-board.css +89 -3
  97. package/src/utils/manifestTranslate.js +12 -3
  98. package/src/utils/routeFilters.js +3 -3
@@ -187,8 +187,8 @@
187
187
  /* ---- Dashboard switch row --------------------------------------------- */
188
188
  /* The switch row under a board dashboard's header (DqMijnWerk, DqMijnTeam).
189
189
  The link pills take the deep primary ink of the boards' primary pills: the
190
- light primary text mixed toward the main text, which only raises its
191
- contrast on the light primary ground. A theme that forces the link ink onto
190
+ light primary text, the ink a theme pairs with the light primary ground
191
+ (DqMijnWerk #234a78 on #eaf0f7, 8:1). A theme that forces the link ink onto
192
192
  every `a` reads it from --nldesign-color-on-surface, so the pill hands it
193
193
  its own. The view switch is the board's segmented control: 14px labels, the
194
194
  others in the soft ink, the chosen one raised on white without an edge;
@@ -196,7 +196,7 @@
196
196
  @spec openspec/changes/board-dashboard-switch-row/specs/board-dashboard-switch-row/spec.md#requirement-the-link-pills-take-the-deep-primary-ink
197
197
  @spec openspec/changes/board-dashboard-switch-row/specs/board-dashboard-switch-row/spec.md#requirement-the-view-switch-is-the-boards-segmented-control */
198
198
  .cn-look-board .cn-dashboard-page__switch-row .cn-dashboard-page__view-link:not(.cn-look-nextcloud *) {
199
- --cn-view-link-ink: color-mix(in srgb, var(--color-primary-element-light-text) 60%, var(--color-main-text));
199
+ --cn-view-link-ink: var(--color-primary-element-light-text);
200
200
  --nldesign-color-on-surface: var(--cn-view-link-ink);
201
201
  color: var(--cn-view-link-ink);
202
202
  }
@@ -221,6 +221,25 @@
221
221
  }
222
222
  }
223
223
 
224
+ /* ---- Period group ------------------------------------------------------- */
225
+ /* The boards' compact segmented group (the period switch on DqDoorlooptijd
226
+ and DqTermijnen, Gemiddeld / Mediaan on DqProcesanalyse) pads a label 14px
227
+ on each side and draws the options not chosen in the soft ink; the chosen
228
+ one is raised on white in the main ink. An icon-only option stays square.
229
+ @spec openspec/changes/board-period-group-soft-ink/specs/board-period-group-soft-ink/spec.md#requirement-a-board-period-group-draws-the-options-not-chosen-in-the-soft-ink */
230
+ .cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option:not(.cn-look-nextcloud *) {
231
+ padding: 0 14px;
232
+ color: var(--cn-board-text-soft);
233
+ }
234
+
235
+ .cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option--checked:not(.cn-look-nextcloud *) {
236
+ color: var(--color-main-text);
237
+ }
238
+
239
+ .cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option--icon-only:not(.cn-look-nextcloud *) {
240
+ padding: 0;
241
+ }
242
+
224
243
  /* ---- Button weight ------------------------------------------------------ */
225
244
  /* The boards draw a labelled button at 600 (DqZaken "Downloaden", DqZaak's
226
245
  header, dialog footers, toolbar and row actions). An NcButton reads its
@@ -1637,6 +1656,11 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
1637
1656
  padding: 0 var(--cn-board-dashboard-card-inset) 10px;
1638
1657
  }
1639
1658
 
1659
+ /* DqMijnWerk "Mijn archiefbeoordelingen": its rows and its empty line. */
1660
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-decision-list {
1661
+ padding: 0 var(--cn-board-dashboard-card-inset) 20px;
1662
+ }
1663
+
1640
1664
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-stacked-bar,
1641
1665
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-week-strip {
1642
1666
  box-sizing: border-box;
@@ -1682,6 +1706,29 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
1682
1706
  padding-inline-end: var(--cn-board-dashboard-card-inset);
1683
1707
  }
1684
1708
 
1709
+ /* ---- A card of cards (DqDoorlooptijd "Naleving") ------------------------- */
1710
+ /* A sections widget laid out in columns on a dashboard card keeps the card's
1711
+ side inset and 20px below. Each section is a small card: a hairline edge,
1712
+ a 10px corner, 14px 16px of padding and its heading at 15px 700, 10px above
1713
+ the content.
1714
+ @spec openspec/changes/sections-card-grid/specs/sections-card-grid/spec.md#requirement-a-board-card-of-cards-draws-the-boards-small-cards */
1715
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-sections-widget--grid {
1716
+ padding: 0 var(--cn-board-dashboard-card-inset) 20px;
1717
+ }
1718
+
1719
+ .cn-look-board .cn-sections-widget--grid.cn-sections-widget--cards .cn-sections-widget__section:not(.cn-look-nextcloud *) {
1720
+ padding: 14px 16px;
1721
+ border: 1px solid var(--cn-board-hairline);
1722
+ border-radius: 10px;
1723
+ }
1724
+
1725
+ .cn-look-board .cn-sections-widget--grid.cn-sections-widget--cards .cn-sections-widget__heading:not(.cn-look-nextcloud *) {
1726
+ margin: 0 0 10px;
1727
+ font-size: 15px;
1728
+ font-weight: 700;
1729
+ line-height: normal;
1730
+ }
1731
+
1685
1732
  /* ---- Week strip (DqMijnWerk "Termijnen deze week") ---------------------- */
1686
1733
  /* The days wrap inside the card instead of scrolling sideways: a row holds
1687
1734
  as many days of at least 120px as the card fits, and the rest go to the
@@ -1699,6 +1746,45 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
1699
1746
 
1700
1747
  .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__head {
1701
1748
  flex-wrap: wrap;
1749
+ font-size: 13px;
1750
+ font-weight: 700;
1751
+ color: var(--cn-board-text-soft);
1752
+ }
1753
+
1754
+ /* A board day is a tinted box without an edge, at least 132px high so a week
1755
+ of empty days still reads as a week (DqMijnWerk "Termijnen deze week"): the
1756
+ workspace grey, and today the light primary ground in its own ink. Forced
1757
+ colours drop the grounds, so the box keeps an edge there. */
1758
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day {
1759
+ min-height: 132px;
1760
+ padding: 12px;
1761
+ border-color: transparent;
1762
+ border-radius: 10px;
1763
+ background: var(--nldesign-component-content-surface-background-color, var(--color-background-hover));
1764
+ }
1765
+
1766
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day--today {
1767
+ background: var(--color-primary-element-light);
1768
+ }
1769
+
1770
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day--today .cn-week-strip__head {
1771
+ color: var(--color-primary-element-light-text);
1772
+ }
1773
+
1774
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__today {
1775
+ border-radius: 10px;
1776
+ font-size: 11px;
1777
+ line-height: 13px;
1778
+ }
1779
+
1780
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__empty {
1781
+ font-size: 13px;
1782
+ }
1783
+
1784
+ @media (forced-colors: active) {
1785
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day {
1786
+ border-color: CanvasText;
1787
+ }
1702
1788
  }
1703
1789
 
1704
1790
  /* ---- A card of boxed stat tiles (DcRapportages "Vergaderingen en efficiëntie") -- */
@@ -12,7 +12,9 @@
12
12
  * for the language, then for its base (`en_GB` falls back to `en`);
13
13
  * 2. otherwise the host's `translate(text, vars)`, whose answer is the text
14
14
  * itself when it has no translation;
15
- * 3. the text as written.
15
+ * 3. the library's own catalog (`library`), for the strings a library
16
+ * component asks through `cnTranslate` and the app never translates;
17
+ * 4. the text as written.
16
18
  *
17
19
  * The fallback is per label, never per page. The manifest is read through a
18
20
  * getter on every call, so an edit to the working copy shows at once.
@@ -52,9 +54,10 @@ function fill(text, vars) {
52
54
  * @param {() => (object|null|undefined)} options.getManifest The live manifest (the editor's working copy while editing).
53
55
  * @param {() => string} options.getLanguage The language to show.
54
56
  * @param {(text: string, vars?: object) => string} [options.translate] The host's translate.
57
+ * @param {(text: string, vars?: object) => string} [options.library] The library's translate, asked when the host has no translation.
55
58
  * @return {Function} `(text, vars) => string`, with `lookup`, `fellBack` and `sourceLanguage` attached.
56
59
  */
57
- export function createManifestTranslate({ getManifest, getLanguage, translate }) {
60
+ export function createManifestTranslate({ getManifest, getLanguage, translate, library }) {
58
61
  const host = typeof translate === 'function' ? translate : (text) => text
59
62
 
60
63
  const i18n = () => {
@@ -79,7 +82,13 @@ export function createManifestTranslate({ getManifest, getLanguage, translate })
79
82
  }
80
83
  }
81
84
  const answer = host(text, vars)
82
- const shown = typeof answer === 'string' && answer !== '' ? answer : fill(text, vars)
85
+ let shown = typeof answer === 'string' && answer !== '' ? answer : fill(text, vars)
86
+ if (shown === fill(text, vars) && typeof library === 'function') {
87
+ const own = library(text, vars)
88
+ if (typeof own === 'string' && own !== '') {
89
+ shown = own
90
+ }
91
+ }
83
92
  return { text: shown, fellBack: !!block && !inSource && shown === fill(text, vars) }
84
93
  }
85
94
 
@@ -123,9 +123,9 @@ export function resolveQueryFilters(query, ctx) {
123
123
  }
124
124
  const out = {}
125
125
  for (const [k, v] of Object.entries(query)) {
126
- // `contentSearch` is the index page's own "search inside files" switch,
127
- // not a filter on the records.
128
- if (k.startsWith('_') || k === 'contentSearch') {
126
+ // `contentSearch` is the index page's own "search inside files" switch
127
+ // and `savedView` names the applied saved view: neither filters the records.
128
+ if (k.startsWith('_') || k === 'contentSearch' || k === 'savedView') {
129
129
  continue
130
130
  }
131
131
  if (v === undefined || v === null || v === '') {