@conduction/nextcloud-vue 2.101.0 → 2.102.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 (74) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +22 -0
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +8 -6
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  5. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  6. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +29 -4
  7. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  8. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js +9 -1
  9. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  10. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  11. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +20 -0
  12. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  13. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +1 -1
  14. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  15. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +70 -4
  16. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  17. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +6 -4
  18. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  19. package/dist/esm/components/CnIndexPage/useNamedSource.js +26 -2
  20. package/dist/esm/components/CnIndexPage/useNamedSource.js.map +1 -1
  21. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue.js +1 -1
  22. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue2.js +25 -1
  23. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue2.js.map +1 -1
  24. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue3.js.map +1 -1
  25. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue.js +1 -1
  26. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +106 -4
  27. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  28. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js +70 -25
  29. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  30. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
  31. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +2 -23
  32. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  33. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  34. package/dist/esm/composables/indexSources.js +9 -0
  35. package/dist/esm/composables/indexSources.js.map +1 -1
  36. package/dist/esm/l10n/en.json.js +5 -1
  37. package/dist/esm/l10n/en.json.js.map +1 -1
  38. package/dist/esm/l10n/nl.json.js +5 -1
  39. package/dist/esm/l10n/nl.json.js.map +1 -1
  40. package/dist/esm/library-style.js +1 -1
  41. package/dist/esm/nextcloud-vue.css +232 -187
  42. package/dist/esm/utils/builtInFormatters.js +24 -4
  43. package/dist/esm/utils/builtInFormatters.js.map +1 -1
  44. package/dist/esm/utils/rowClassRules.js +43 -0
  45. package/dist/esm/utils/rowClassRules.js.map +1 -0
  46. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  47. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  48. package/dist/esm/utils/visibleWhen.js +19 -2
  49. package/dist/esm/utils/visibleWhen.js.map +1 -1
  50. package/dist/nextcloud-vue.cjs.js +1464 -1053
  51. package/dist/nextcloud-vue.cjs.js.map +2 -2
  52. package/dist/nextcloud-vue.css +232 -187
  53. package/l10n/en.json +5 -1
  54. package/l10n/nl.json +5 -1
  55. package/package.json +1 -1
  56. package/src/components/CnActionsBar/CnActionsBar.md +1 -0
  57. package/src/components/CnActionsBar/CnActionsBar.vue +31 -4
  58. package/src/components/CnChartWidget/CnChartWidget.md +3 -2
  59. package/src/components/CnChartWidget/CnChartWidget.vue +42 -4
  60. package/src/components/CnDashboardPage/CnDashboardPage.vue +21 -1
  61. package/src/components/CnIndexPage/CnIndexPage.md +5 -1
  62. package/src/components/CnIndexPage/CnIndexPage.vue +74 -6
  63. package/src/components/CnIndexPage/useNamedSource.js +26 -2
  64. package/src/components/CnMenuWidget/CnMenuWidget.vue +25 -1
  65. package/src/components/CnQuickFilterBar/CnQuickFilterBar.md +1 -0
  66. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +159 -5
  67. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +2 -23
  68. package/src/composables/indexSources.js +9 -0
  69. package/src/css/look-board-index.css +10 -0
  70. package/src/schemas/app-manifest-v2.schema.json +55 -3
  71. package/src/utils/builtInFormatters.js +24 -4
  72. package/src/utils/rowClassRules.js +39 -0
  73. package/src/utils/validateManifestV2.compiled.js +3 -3
  74. package/src/utils/visibleWhen.js +19 -2
@@ -50,6 +50,7 @@ import { resolveFilterMap } from '../../utils/routeFilters.js';
50
50
  import { DEFAULT_ROW_ACTION_FIELD, withoutViewWhenRowOpensDetail, availableRowActions, refusalReasonFor, undeclaredRowActions } from '../../utils/rowActionAvailability.js';
51
51
  import { isRowActionVisible, rowActionPayload } from '../../utils/rowActionItem.js';
52
52
  import { isNewTabClick, preventMiddleClickAutoscroll, isRowMiddleClick, isNewTabHandled, markNewTabHandled } from '../../utils/rowAuxClick.js';
53
+ import { compileRowClass } from '../../utils/rowClassRules.js';
53
54
  import { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js';
54
55
  import { viewMatchesScope, extractViewState, buildRouteQueryFromViewState, extractViewStateFromRouteQuery, buildViewCreatePayload, savedViewScope, normalizeSharedWith } from '../../utils/savedViewHelpers.js';
55
56
  import { fieldsFromSchema, columnsFromSchema } from '../../utils/schema.js';
@@ -700,6 +701,17 @@ var script = {
700
701
  default: '',
701
702
  },
702
703
 
704
+ /**
705
+ * Board look: draw the bulk band before anything is selected too, its
706
+ * buttons disabled until there is a selection (DqZaken, DqWerkbord).
707
+ * Manifest key `config.bulkBandAlways`. Only when the band has an
708
+ * action to offer.
709
+ */
710
+ bulkBandAlways: {
711
+ type: Boolean,
712
+ default: false,
713
+ },
714
+
703
715
  /**
704
716
  * Board look: the 13px hint after the bulk band's buttons ("See what
705
717
  * changes first, then run it"). Manifest key `config.bulkHint`.
@@ -881,6 +893,21 @@ var script = {
881
893
  default: null,
882
894
  },
883
895
 
896
+ /**
897
+ * Where the quick-filter chips sit (manifest `config.quickFilterPlacement`).
898
+ * `''` (the default) as before. `'toolbar'` keeps them on one row with
899
+ * the Filter button and the view switch, in whatever width that row has
900
+ * beside a side panel (DqTeamwachtrij): the chips take the room the
901
+ * buttons leave, and those that do not fit move into the overflow chip.
902
+ *
903
+ * @type {''|'toolbar'}
904
+ */
905
+ quickFilterPlacement: {
906
+ type: String,
907
+ default: '',
908
+ validator: (v) => ['', 'toolbar'].includes(v),
909
+ },
910
+
884
911
  /**
885
912
  * How the quick filters render: `'chips'` (pill strip, default) or
886
913
  * `'dropdown'` (a single `NcSelect`). Sourced from the manifest as
@@ -1457,9 +1484,18 @@ var script = {
1457
1484
  default: 'Loading…',
1458
1485
  },
1459
1486
 
1460
- /** Function returning CSS class(es) for a row */
1487
+ /**
1488
+ * CSS class(es) for a row: a function `(row) => string`, or (manifest
1489
+ * `config.rowClass`) rules `[{ when: { field, op?, value }, class }]`,
1490
+ * each adding its class to a row whose field compares to the value
1491
+ * (the `visibleWhen` operators, `@today` included). DqTaken marks an
1492
+ * overdue task: `{ when: { field: "dueAt", op: "lt", value: "@today" },
1493
+ * class: "cn-row--overdue" }`.
1494
+ *
1495
+ * @type {((row: object) => string)|Array<{when: {field: string, op?: string, value: unknown}, class: string}>|null}
1496
+ */
1461
1497
  rowClass: {
1462
- type: Function,
1498
+ type: [Function, Array],
1463
1499
  default: null,
1464
1500
  },
1465
1501
 
@@ -2541,6 +2577,10 @@ var script = {
2541
2577
  //
2542
2578
  // Seeded from the route query so a shared link lands filtered, the
2543
2579
  // same way `_order` and a deep-link filter already do for self-fetch.
2580
+ // The page a paging named source shows: page 1 at the source config's
2581
+ // `limit` (20 by default), moved by the pager.
2582
+ const namedPageSize = Number(props.sourceConfig && props.sourceConfig.limit) > 0 ? Number(props.sourceConfig.limit) : 20;
2583
+ const namedPaging = ref({ page: 1, limit: namedPageSize });
2544
2584
  const namedActiveFilters = ref(namedFiltersFromRoute(getCurrentInstance(), props));
2545
2585
 
2546
2586
  const {
@@ -2549,7 +2589,7 @@ var script = {
2549
2589
  namedRows,
2550
2590
  namedLoading,
2551
2591
  namedQuickFilters,
2552
- } = useNamedSource(props, { activeQuickFilterIndex, activeFilters: namedActiveFilters });
2592
+ } = useNamedSource(props, { activeQuickFilterIndex, activeFilters: namedActiveFilters, paging: namedPaging });
2553
2593
 
2554
2594
  return {
2555
2595
  isBoard: isBoardLook,
@@ -2561,6 +2601,7 @@ var script = {
2561
2601
  namedLoading,
2562
2602
  namedQuickFilters,
2563
2603
  namedActiveFilters,
2604
+ namedPaging,
2564
2605
  contextMenuOpen,
2565
2606
  contextMenuRow,
2566
2607
  openContextMenu,
@@ -3523,6 +3564,9 @@ var script = {
3523
3564
  const loaded = this.effectivePagination || {};
3524
3565
  return Number(loaded.page || 1) < Number(loaded.pages || 1)
3525
3566
  }
3567
+ if (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {
3568
+ return Number(this.effectivePagination?.pages || 1) > 1
3569
+ }
3526
3570
  return Number(this.pagination?.pages || 1) > 1
3527
3571
  },
3528
3572
 
@@ -4562,7 +4606,13 @@ var script = {
4562
4606
  // A named source that reports its own total (the search source)
4563
4607
  // gives the count line its number.
4564
4608
  if (this.isNamedSource && this.namedSource && typeof this.namedSource.total === 'function') {
4565
- return { ...(this.pagination || {}), total: this.namedSource.total() }
4609
+ const total = this.namedSource.total();
4610
+ // A source with `pages: true` gets the pager the self-fetched lists draw.
4611
+ if (this.namedSource.pages === true) {
4612
+ const { page, limit } = this.namedPaging;
4613
+ return { page, limit, total, pages: Math.max(1, Math.ceil(total / limit)) }
4614
+ }
4615
+ return { ...(this.pagination || {}), total }
4566
4616
  }
4567
4617
  return this.isSelfFetchMode ? this.list.pagination.value : this.pagination
4568
4618
  },
@@ -4815,6 +4865,16 @@ var script = {
4815
4865
  return (this.effectiveSchema && this.effectiveSchema.slug) || ''
4816
4866
  },
4817
4867
 
4868
+ /**
4869
+ * The row-class function the table takes: a function as given, or the
4870
+ * manifest's rules compiled.
4871
+ *
4872
+ * @return {?(row: object) => string}
4873
+ */
4874
+ compiledRowClass() {
4875
+ return compileRowClass(this.rowClass)
4876
+ },
4877
+
4818
4878
  /** @return {number} How many leading columns the person pinned (0 while a saved view's columns are applied). */
4819
4879
  pinnedColumnCount() {
4820
4880
  if (!this.personalColumns || Array.isArray(this.appliedViewColumns) || !this.personalLayout) {
@@ -7539,6 +7599,9 @@ var script = {
7539
7599
  if (this.isSelfFetchMode && typeof this.list.onPageChange === 'function') {
7540
7600
  this.list.onPageChange(page);
7541
7601
  }
7602
+ if (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {
7603
+ this.namedPaging = { ...this.namedPaging, page };
7604
+ }
7542
7605
  this.$emit('page-changed', page);
7543
7606
  },
7544
7607
 
@@ -7554,6 +7617,9 @@ var script = {
7554
7617
  if (this.isSelfFetchMode && typeof this.list.onPageSizeChange === 'function') {
7555
7618
  this.list.onPageSizeChange(size);
7556
7619
  }
7620
+ if (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {
7621
+ this.namedPaging = { page: 1, limit: size };
7622
+ }
7557
7623
  this.$emit('page-size-changed', size);
7558
7624
  },
7559
7625