@conduction/nextcloud-vue 2.78.0 → 2.79.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 (115) hide show
  1. package/dist/bundled-packages.json +0 -2
  2. package/dist/esm/bundled-packages.json +0 -2
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +113 -104
  5. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +12 -2
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +80 -0
  10. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  11. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +115 -91
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  13. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +139 -1
  14. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  15. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +140 -92
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  17. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +77 -0
  18. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +4 -2
  20. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  21. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +61 -1
  22. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  24. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +173 -5
  25. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  26. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +181 -99
  27. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  28. package/dist/esm/components/CnFilesBrowser/filesBrowser.js +29 -11
  29. package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
  30. package/dist/esm/components/CnFilesBrowser/openRegisterSource.js +252 -0
  31. package/dist/esm/components/CnFilesBrowser/openRegisterSource.js.map +1 -0
  32. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +1 -1
  33. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  34. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  35. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +25 -2
  36. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  37. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +3 -2
  38. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  39. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +100 -3
  40. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  41. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -2
  42. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  43. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +3 -2
  44. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  45. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  46. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
  47. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +1 -1
  48. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
  49. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +30 -1
  50. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  51. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  52. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
  53. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  54. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  55. package/dist/esm/composables/useAppManifest.js +8 -3
  56. package/dist/esm/composables/useAppManifest.js.map +1 -1
  57. package/dist/esm/index.js +1 -0
  58. package/dist/esm/index.js.map +1 -1
  59. package/dist/esm/l10n/en.json.js +61 -1
  60. package/dist/esm/l10n/en.json.js.map +1 -1
  61. package/dist/esm/l10n/nl.json.js +106 -2
  62. package/dist/esm/l10n/nl.json.js.map +1 -1
  63. package/dist/esm/nextcloud-vue.css +314 -15
  64. package/dist/esm/utils/boardDate.js +193 -0
  65. package/dist/esm/utils/boardDate.js.map +1 -0
  66. package/dist/esm/utils/dynamicProperties.js +5 -1
  67. package/dist/esm/utils/dynamicProperties.js.map +1 -1
  68. package/dist/esm/utils/validateManifestV2.compiled.js +57 -6
  69. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  70. package/dist/nextcloud-vue.cjs.js +2039 -581
  71. package/dist/nextcloud-vue.cjs.js.map +2 -2
  72. package/dist/nextcloud-vue.css +314 -15
  73. package/l10n/en.json +61 -1
  74. package/l10n/nl.json +106 -2
  75. package/package.json +1 -1
  76. package/scripts/build-validators.js +26 -0
  77. package/src/components/CnActionsBar/CnActionsBar.vue +48 -39
  78. package/src/components/CnAppRoot/CnAppRoot.vue +12 -2
  79. package/src/components/CnCellRenderer/CnCellRenderer.vue +119 -2
  80. package/src/components/CnDashboardPage/CnDashboardPage.vue +219 -4
  81. package/src/components/CnDataTable/CnDataTable.md +2 -0
  82. package/src/components/CnDataTable/CnDataTable.vue +81 -2
  83. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +61 -1
  84. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +232 -11
  85. package/src/components/CnFilesBrowser/filesBrowser.js +43 -2
  86. package/src/components/CnFilesBrowser/index.js +1 -0
  87. package/src/components/CnFilesBrowser/openRegisterSource.js +248 -0
  88. package/src/components/CnFormDialog/CnFormDialog.vue +1 -1
  89. package/src/components/CnIndexPage/CnIndexPage.vue +27 -3
  90. package/src/components/CnObjectSidebar/CnFilesTab.vue +103 -4
  91. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +3 -2
  92. package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +1 -1
  93. package/src/components/CnTabsWidget/CnTabsWidget.vue +30 -1
  94. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
  95. package/src/components/index.js +1 -1
  96. package/src/composables/useAppManifest.js +8 -3
  97. package/src/css/look-board-detail.css +10 -0
  98. package/src/css/look-board-index.css +92 -14
  99. package/src/css/look-board.css +77 -0
  100. package/src/css/table.css +37 -0
  101. package/src/index.js +4 -0
  102. package/src/schemas/app-manifest-v2.schema.json +46 -1
  103. package/src/utils/boardDate.js +189 -0
  104. package/src/utils/dynamicProperties.js +5 -1
  105. package/src/utils/validateManifestV2.compiled.js +57 -2
  106. package/dist/esm/_virtual/equal.js +0 -4
  107. package/dist/esm/_virtual/equal.js.map +0 -1
  108. package/dist/esm/_virtual/ucs2length.js +0 -4
  109. package/dist/esm/_virtual/ucs2length.js.map +0 -1
  110. package/dist/esm/node_modules/ajv/dist/runtime/equal.js +0 -9
  111. package/dist/esm/node_modules/ajv/dist/runtime/equal.js.map +0 -1
  112. package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
  113. package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
  114. package/dist/esm/node_modules/fast-deep-equal/index.js +0 -47
  115. package/dist/esm/node_modules/fast-deep-equal/index.js.map +0 -1
@@ -1,4 +1,5 @@
1
- import { translate } from '@nextcloud/l10n';
1
+ import { getCurrentUser } from '@nextcloud/auth';
2
+ import { translate, getCanonicalLocale } from '@nextcloud/l10n';
2
3
  import { NcActions, NcActionButton, NcActionInput, NcActionSeparator, NcButton, NcLoadingIcon, NcSelect } from '@nextcloud/vue';
3
4
  import { ref, provide, watch } from 'vue';
4
5
  import CalendarRange from 'vue-material-design-icons/CalendarRange.vue';
@@ -19,6 +20,7 @@ import __sfc_main$g from '../CnKpiGrid/CnKpiGrid.vue.js';
19
20
  import __sfc_main$f from '../CnSegmentedControl/CnSegmentedControl.vue.js';
20
21
  import __sfc_main$6 from '../CnStatsBlockWidget/CnStatsBlockWidget.vue.js';
21
22
  import __sfc_main$4 from '../CnTileWidget/CnTileWidget.vue.js';
23
+ import __sfc_main$h from '../CnWidgetGrid/CnWidgetIcon.vue.js';
22
24
  import __sfc_main$7 from '../CnWidgetRefItem/CnWidgetRefItem.vue.js';
23
25
  import __sfc_main$3 from '../CnWidgetRenderer/CnWidgetRenderer.vue.js';
24
26
  import __sfc_main$2 from '../CnWidgetWrapper/CnWidgetWrapper.vue.js';
@@ -184,6 +186,7 @@ var script = {
184
186
  CnLeafMountHost: __sfc_main$e,
185
187
  CnSegmentedControl: __sfc_main$f,
186
188
  CnKpiGrid: __sfc_main$g,
189
+ CnWidgetIcon: __sfc_main$h,
187
190
  },
188
191
 
189
192
  mixins: [pageViews],
@@ -284,6 +287,50 @@ var script = {
284
287
  default: () => [],
285
288
  },
286
289
 
290
+ /**
291
+ * Greet the reader in the header subtitle (manifest `config.greeting`):
292
+ * `true` (or `"first"`) writes "Good afternoon, Pieter · Monday 5
293
+ * October 2026", `"full"` uses the whole display name. The page
294
+ * `description`, when set, follows after another middle dot. Off by
295
+ * default: the subtitle is the description alone, as before.
296
+ *
297
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-the-header-subtitle-can-greet-the-reader
298
+ * @type {boolean|string}
299
+ */
300
+ greeting: {
301
+ type: [Boolean, String],
302
+ default: false,
303
+ },
304
+
305
+ /**
306
+ * Links drawn as small pills on the switch row under the header
307
+ * (manifest `config.viewLinks`), as DqMijnWerk's "Uw wachtrij / Aan
308
+ * mij toegewezen / Dag afsluiten". Each `{ label, icon?, route?,
309
+ * href? }`: `route` is a route name or a `{ name, params?, query? }`
310
+ * location, `href` a plain URL; `label` goes through the host
311
+ * translate function. An entry without a label or a target is skipped.
312
+ *
313
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-a-switch-row-carries-the-view-switch-and-link-pills
314
+ * @type {Array<object>}
315
+ */
316
+ viewLinks: {
317
+ type: Array,
318
+ default: () => [],
319
+ },
320
+
321
+ /**
322
+ * Whether the header draws the page Actions menu (manifest
323
+ * `config.showActionsMenu`). `false` removes it, for a board page
324
+ * whose header carries only the buildiq square and the primary.
325
+ *
326
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-the-header-can-drop-the-page-actions-menu
327
+ * @type {boolean}
328
+ */
329
+ showActionsMenu: {
330
+ type: Boolean,
331
+ default: true,
332
+ },
333
+
287
334
  /**
288
335
  * Whether a widget draws its overflow Actions menu when neither its
289
336
  * placement nor its definition says (`showActions`). `false` (manifest
@@ -976,6 +1023,97 @@ var script = {
976
1023
  return typeof this.cnTranslate === 'function' ? this.cnTranslate : (key) => key
977
1024
  },
978
1025
 
1026
+ /**
1027
+ * The greeting for the time of day, with the reader's first (or
1028
+ * full) name when known, or '' when `greeting` is off.
1029
+ *
1030
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-the-header-subtitle-can-greet-the-reader
1031
+ * @return {string}
1032
+ */
1033
+ greetingLine() {
1034
+ if (this.greeting !== true && this.greeting !== 'first' && this.greeting !== 'full') {
1035
+ return ''
1036
+ }
1037
+ let user;
1038
+ try {
1039
+ user = getCurrentUser();
1040
+ } catch {
1041
+ user = null;
1042
+ }
1043
+ const displayName = (user && typeof user.displayName === 'string') ? user.displayName.trim() : '';
1044
+ const name = this.greeting === 'full' ? displayName : displayName.split(/\s+/)[0];
1045
+ const hour = new Date().getHours();
1046
+ if (hour < 12) {
1047
+ return name ? translate('nextcloud-vue', 'Good morning, {name}', { name }) : translate('nextcloud-vue', 'Good morning')
1048
+ }
1049
+ if (hour < 18) {
1050
+ return name ? translate('nextcloud-vue', 'Good afternoon, {name}', { name }) : translate('nextcloud-vue', 'Good afternoon')
1051
+ }
1052
+ return name ? translate('nextcloud-vue', 'Good evening, {name}', { name }) : translate('nextcloud-vue', 'Good evening')
1053
+ },
1054
+
1055
+ /**
1056
+ * The header subtitle: with `greeting` on, the greeting, today's date
1057
+ * written out and the description, joined by a middle dot; else the
1058
+ * description alone, as before.
1059
+ *
1060
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-the-header-subtitle-can-greet-the-reader
1061
+ * @return {string}
1062
+ */
1063
+ subtitleText() {
1064
+ const description = this.description ? this.resolvedDescription : '';
1065
+ const greeting = this.greetingLine;
1066
+ if (greeting === '') {
1067
+ return description
1068
+ }
1069
+ const options = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };
1070
+ let date;
1071
+ try {
1072
+ date = new Intl.DateTimeFormat(getCanonicalLocale() || undefined, options).format(new Date());
1073
+ } catch {
1074
+ date = new Intl.DateTimeFormat(undefined, options).format(new Date());
1075
+ }
1076
+ return [greeting, date, description].filter((part) => part !== '').join(' · ')
1077
+ },
1078
+
1079
+ /**
1080
+ * Whether the page's view switch sits on the switch row under the
1081
+ * header (board look) rather than among the header actions.
1082
+ *
1083
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-a-switch-row-carries-the-view-switch-and-link-pills
1084
+ * @return {boolean}
1085
+ */
1086
+ switchInRow() {
1087
+ return this.isBoardLook && this.showsPageViewSwitch
1088
+ },
1089
+
1090
+ /**
1091
+ * `viewLinks` as render descriptors: a router link for a route, an
1092
+ * anchor for an href, the label translated. Entries without a label
1093
+ * or a target are dropped.
1094
+ *
1095
+ * @spec openspec/changes/screens-dashboard-greeting-header/specs/dashboard-page/spec.md#requirement-a-switch-row-carries-the-view-switch-and-link-pills
1096
+ * @return {Array<{key: string, tag: string, attrs: object, label: string, icon: string}>}
1097
+ */
1098
+ resolvedViewLinks() {
1099
+ const links = Array.isArray(this.viewLinks) ? this.viewLinks : [];
1100
+ const out = [];
1101
+ links.forEach((link, index) => {
1102
+ if (!link || typeof link.label !== 'string' || link.label === '') {
1103
+ return
1104
+ }
1105
+ const icon = typeof link.icon === 'string' ? link.icon : '';
1106
+ const label = this.effectiveTranslate(link.label);
1107
+ if (link.route && this.$router) {
1108
+ const to = typeof link.route === 'string' ? { name: link.route } : link.route;
1109
+ out.push({ key: `route-${index}`, tag: 'router-link', attrs: { to }, label, icon });
1110
+ } else if (typeof link.href === 'string' && link.href !== '') {
1111
+ out.push({ key: `href-${index}`, tag: 'a', attrs: { href: link.href }, label, icon });
1112
+ }
1113
+ });
1114
+ return out
1115
+ },
1116
+
979
1117
  /**
980
1118
  * The page title run through the host translate function so a
981
1119
  * manifest-authored source string localises.