@conduction/nextcloud-vue 2.68.0 → 2.70.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 (137) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +25 -0
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +155 -152
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  5. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +77 -0
  6. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  7. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +8 -8
  8. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  9. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js +1 -0
  10. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js.map +1 -1
  11. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js +28 -0
  12. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
  13. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +4 -2
  14. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
  15. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js +25 -1
  16. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js.map +1 -1
  17. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js +32 -17
  18. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js.map +1 -1
  19. package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue2.js +14 -1
  20. package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue2.js.map +1 -1
  21. package/dist/esm/components/CnCapabilityTable/CnCapabilityTable.vue3.js.map +1 -1
  22. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +43 -2
  23. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  24. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +3 -3
  25. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +45 -35
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +19 -1
  29. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  30. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +35 -1
  31. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  32. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +94 -6
  34. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  35. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +64 -19
  36. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  37. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +28 -0
  38. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  39. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +3 -2
  40. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  41. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js +12 -0
  42. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js.map +1 -1
  43. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +9 -0
  44. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  45. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  46. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +54 -7
  47. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
  48. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +26 -8
  49. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
  50. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +143 -0
  51. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  52. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +68 -25
  53. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  54. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js.map +1 -1
  55. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js.map +1 -1
  56. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +4 -1
  57. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  58. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  59. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js +17 -3
  60. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js.map +1 -1
  61. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js +25 -24
  62. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js.map +1 -1
  63. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  64. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  65. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +29 -2
  66. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  67. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +7 -0
  68. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  69. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +24 -1
  70. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
  71. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js +1 -1
  72. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
  73. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +81 -1
  74. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
  75. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +25 -3
  76. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
  77. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +15 -2
  78. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -1
  79. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js +31 -32
  80. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -1
  81. package/dist/esm/l10n/en.json.js +3 -0
  82. package/dist/esm/l10n/en.json.js.map +1 -1
  83. package/dist/esm/l10n/nl.json.js +3 -0
  84. package/dist/esm/l10n/nl.json.js.map +1 -1
  85. package/dist/esm/mixins/pageViews.js +278 -11
  86. package/dist/esm/mixins/pageViews.js.map +1 -1
  87. package/dist/esm/nextcloud-vue.css +145 -0
  88. package/dist/esm/store/plugins/dashboardLayouts.js +35 -1
  89. package/dist/esm/store/plugins/dashboardLayouts.js.map +1 -1
  90. package/dist/esm/utils/capabilityComparison.js +29 -1
  91. package/dist/esm/utils/capabilityComparison.js.map +1 -1
  92. package/dist/esm/utils/formatMetric.js +137 -16
  93. package/dist/esm/utils/formatMetric.js.map +1 -1
  94. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  95. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  96. package/dist/nextcloud-vue.cjs.js +2840 -1477
  97. package/dist/nextcloud-vue.cjs.js.map +2 -2
  98. package/dist/nextcloud-vue.css +145 -0
  99. package/l10n/en.json +3 -0
  100. package/l10n/nl.json +3 -0
  101. package/package.json +1 -1
  102. package/src/components/CnActionsBar/CnActionsBar.md +2 -0
  103. package/src/components/CnActionsBar/CnActionsBar.vue +28 -2
  104. package/src/components/CnAppNav/CnAppNav.vue +85 -8
  105. package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +45 -0
  106. package/src/components/CnCalendarWidget/CnCalendarWidget.vue +32 -4
  107. package/src/components/CnCapabilityTable/CnCapabilityTable.vue +14 -0
  108. package/src/components/CnDashboardGrid/CnDashboardGrid.md +2 -0
  109. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +54 -2
  110. package/src/components/CnDashboardPage/CnDashboardPage.md +2 -0
  111. package/src/components/CnDashboardPage/CnDashboardPage.vue +59 -35
  112. package/src/components/CnDataTable/CnDataTable.vue +35 -1
  113. package/src/components/CnDetailPage/CnDetailPage.md +8 -0
  114. package/src/components/CnDetailPage/CnDetailPage.vue +124 -8
  115. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +30 -1
  116. package/src/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue +12 -0
  117. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +9 -0
  118. package/src/components/CnHeaderWidget/CnHeaderWidget.vue +95 -8
  119. package/src/components/CnIndexPage/CnIndexPage.vue +171 -6
  120. package/src/components/CnNextStepCard/CnNextStepCard.vue +11 -0
  121. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +4 -1
  122. package/src/components/CnStackedBarWidget/CnStackedBarWidget.vue +34 -7
  123. package/src/components/CnStagesWidget/CnStagesWidget.vue +19 -0
  124. package/src/components/CnStatWidget/CnStatWidget.vue +38 -2
  125. package/src/components/CnStatsBlock/CnStatsBlock.md +2 -0
  126. package/src/components/CnStatsBlock/CnStatsBlock.vue +25 -2
  127. package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +95 -3
  128. package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +24 -3
  129. package/src/css/detail-page.css +10 -0
  130. package/src/css/index-page.css +12 -0
  131. package/src/css/kpi-card.css +15 -0
  132. package/src/mixins/pageViews.js +277 -10
  133. package/src/schemas/app-manifest-v2.schema.json +73 -6
  134. package/src/store/plugins/dashboardLayouts.js +34 -0
  135. package/src/utils/capabilityComparison.js +28 -0
  136. package/src/utils/formatMetric.js +143 -15
  137. package/src/utils/validateManifestV2.compiled.js +2 -2
@@ -5,6 +5,7 @@ import { NcActionButton, NcActionCaption, NcActionLink, NcActionSeparator, NcBut
5
5
  import { ref, provide, watch } from 'vue';
6
6
  import AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue';
7
7
  import ArrowLeft from 'vue-material-design-icons/ArrowLeft.vue';
8
+ import Check from 'vue-material-design-icons/Check.vue';
8
9
  import ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue';
9
10
  import ChevronRight from 'vue-material-design-icons/ChevronRight.vue';
10
11
  import Cog from 'vue-material-design-icons/Cog.vue';
@@ -13,6 +14,7 @@ import InformationOutline from 'vue-material-design-icons/InformationOutline.vue
13
14
  import Pencil from 'vue-material-design-icons/Pencil.vue';
14
15
  import Plus from 'vue-material-design-icons/Plus.vue';
15
16
  import Refresh from 'vue-material-design-icons/Refresh.vue';
17
+ import Restore from 'vue-material-design-icons/Restore.vue';
16
18
  import ViewDashboardOutline from 'vue-material-design-icons/ViewDashboardOutline.vue';
17
19
  import __sfc_main$i from '../../dialogs/CnRelationLinkModal.vue.js';
18
20
  import __sfc_main$h from '../../dialogs/CnWidgetStyleEditorModal.vue.js';
@@ -201,9 +203,11 @@ var script = {
201
203
  CnTranslatedBadge: __sfc_main$g,
202
204
  CnWidgetStyleEditorModal: __sfc_main$h,
203
205
  CnRelationLinkModal: __sfc_main$i,
206
+ Check,
204
207
  Cog,
205
208
  Plus,
206
209
  Pencil,
210
+ Restore,
207
211
  },
208
212
 
209
213
  mixins: [gridLayout, pageViews],
@@ -696,6 +700,20 @@ var script = {
696
700
  default: '',
697
701
  },
698
702
 
703
+ /**
704
+ * Whether the user arranges each view (`views`) for themselves. On,
705
+ * the header offers Arrange view next to the view switch; the
706
+ * arrangement is stored per view and per user (the server, mirrored
707
+ * in the browser) and a reset returns the view to its manifest
708
+ * layout. Off (the default), a view renders as the manifest says.
709
+ *
710
+ * @type {boolean}
711
+ */
712
+ userLayout: {
713
+ type: Boolean,
714
+ default: false,
715
+ },
716
+
699
717
  /**
700
718
  * Whether the Refresh entry renders in the page-header menu.
701
719
  * Tri-state:
@@ -1119,18 +1137,38 @@ var script = {
1119
1137
  * belongs to; the record's display name follows as the current
1120
1138
  * crumb. `label` goes through the host translate function and shows
1121
1139
  * as text; `icon` (an MDI name, e.g. `Home`) draws that icon instead,
1122
- * with the label as its accessible name. Null (the default) draws no
1140
+ * with the label as its accessible name. `currentField` names a field
1141
+ * of the record (a dotted path, e.g. `identifier`) whose value is the
1142
+ * current crumb instead of the display name; an empty value falls back
1143
+ * to the display name. `separator` draws that text (e.g. `/`) between
1144
+ * the crumbs instead of the chevron. Null (the default) draws no
1123
1145
  * trail.
1124
1146
  *
1125
1147
  * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-a-detail-page-drops-its-eyebrow-and-shows-a-breadcrumb
1126
1148
  * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-declared-breadcrumb-label-shows-as-text
1127
- * @type {{label: string, route?: string, params?: object, href?: string, icon?: string}|null}
1149
+ * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
1150
+ * @type {{label: string, route?: string, params?: object, href?: string, icon?: string, currentField?: string, separator?: string}|null}
1128
1151
  */
1129
1152
  breadcrumb: {
1130
1153
  type: Object,
1131
1154
  default: null,
1132
1155
  },
1133
1156
 
1157
+ /**
1158
+ * Whether the record's widget cards (the body grid and the side
1159
+ * column) keep their overflow Actions menu when their definition does
1160
+ * not say (`showActions`). `false` (manifest
1161
+ * `config.showWidgetActions: false`) drops it, as on a dashboard; a
1162
+ * widget with `showActions: true` keeps its menu. A card that offers
1163
+ * an Add action keeps the menu that holds it. True by default.
1164
+ *
1165
+ * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-detail-page-can-drop-the-widget-actions-menu
1166
+ */
1167
+ showWidgetActions: {
1168
+ type: Boolean,
1169
+ default: true,
1170
+ },
1171
+
1134
1172
  /**
1135
1173
  * A column of cards beside the body (manifest `config.sideColumn`),
1136
1174
  * for the record's facts: deadline, requester, handler, links. Each
@@ -1346,6 +1384,8 @@ var script = {
1346
1384
 
1347
1385
  data() {
1348
1386
  return {
1387
+ /** Whether the user is arranging the chosen view (`userLayout`). */
1388
+ arrangingView: false,
1349
1389
  /** Whether the record edit form is open. */
1350
1390
  editFormOpen: false,
1351
1391
  /**
@@ -2320,7 +2360,38 @@ var script = {
2320
2360
  } else if (crumb.href) {
2321
2361
  first.href = crumb.href;
2322
2362
  }
2323
- return [first, { label: this.displayTitle }]
2363
+ return [first, { label: this.breadcrumbCurrentLabel }]
2364
+ },
2365
+
2366
+ /**
2367
+ * The current crumb: the record's `breadcrumb.currentField` value
2368
+ * (the case number on a case page) when declared and filled, else the
2369
+ * display name.
2370
+ *
2371
+ * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
2372
+ * @return {string}
2373
+ */
2374
+ breadcrumbCurrentLabel() {
2375
+ const field = this.breadcrumb && this.breadcrumb.currentField;
2376
+ if (typeof field === 'string' && field !== '') {
2377
+ const value = stageOf(this.resolvedObject, field);
2378
+ if (value !== '') {
2379
+ return value
2380
+ }
2381
+ }
2382
+ return this.displayTitle
2383
+ },
2384
+
2385
+ /**
2386
+ * The text drawn between the crumbs (`breadcrumb.separator`), or ''
2387
+ * for the chevron.
2388
+ *
2389
+ * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-a-breadcrumb-can-name-the-record-by-a-field-and-use-a-text-separator
2390
+ * @return {string}
2391
+ */
2392
+ breadcrumbSeparator() {
2393
+ const separator = this.breadcrumb && this.breadcrumb.separator;
2394
+ return typeof separator === 'string' ? separator : ''
2324
2395
  },
2325
2396
 
2326
2397
  /**
@@ -2516,7 +2587,7 @@ var script = {
2516
2587
  viewDisplayLayout() {
2517
2588
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- reading the flag IS the effect, as in bodyGridLayout
2518
2589
  this.editingBody;
2519
- return this.activeView ? this.closeDroppedRows(this.activeView.layout) : []
2590
+ return this.activeView ? this.closeDroppedRows(this.activeViewLayout) : []
2520
2591
  },
2521
2592
 
2522
2593
  /**
@@ -2534,16 +2605,18 @@ var script = {
2534
2605
  * chosen view's grid in the region the view switch controls (left out
2535
2606
  * when the view is empty; the empty state takes the region then).
2536
2607
  *
2537
- * @return {Array<{key: string, view: boolean, layout: Array<object>, attrs: object}>}
2608
+ * @return {Array<{key: string, view: boolean, layout: Array<object>, editable: boolean, attrs: object}>}
2538
2609
  * @spec openspec/changes/view-switch-containers/specs/view-switch-containers/spec.md#requirement-a-page-declares-views-that-each-hold-a-widget-grid
2539
2610
  */
2540
2611
  bodyGridSections() {
2541
- const sections = this.hasBodyGrid ? [{ key: 'body', view: false, layout: this.bodyGridLayout, attrs: {} }] : [];
2612
+ const sections = this.hasBodyGrid ? [{ key: 'body', view: false, layout: this.bodyGridLayout, editable: this.editingBody, attrs: {} }] : [];
2542
2613
  if (this.hasViews && !this.viewIsEmpty) {
2543
2614
  sections.push({
2544
2615
  key: `view-${this.activeViewId}`,
2545
2616
  view: true,
2546
2617
  layout: this.viewDisplayLayout,
2618
+ // The user arranges the view while Arrange view is on.
2619
+ editable: this.editingBody || this.arrangingView,
2547
2620
  attrs: {
2548
2621
  id: this.viewRegionId,
2549
2622
  role: 'region',
@@ -2868,6 +2941,21 @@ var script = {
2868
2941
  },
2869
2942
 
2870
2943
  methods: {
2944
+ /**
2945
+ * Start or finish arranging the chosen view. Finishing stores the
2946
+ * arrangement of every view the user moved, once.
2947
+ *
2948
+ * @return {void}
2949
+ * @spec openspec/changes/page-view-user-layouts/specs/view-switch-containers/spec.md#requirement-a-user-arranges-each-view-for-themselves
2950
+ */
2951
+ toggleArrangeView() {
2952
+ const leaving = this.arrangingView;
2953
+ this.arrangingView = !this.arrangingView;
2954
+ if (leaving) {
2955
+ this.saveViewUserLayouts();
2956
+ }
2957
+ },
2958
+
2871
2959
  // Expose the shared grid helpers to the template (grid mode + auto-body).
2872
2960
  cnGridCellStyle,
2873
2961
  hasGridRow,