@conduction/nextcloud-vue 2.96.0 → 2.98.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 (163) hide show
  1. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +17 -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/CnCellRenderer/CnCellRenderer.vue.js +1 -1
  5. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +33 -1
  6. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  7. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +383 -359
  8. package/dist/esm/components/CnCellRenderer/CnCellRenderer.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 +106 -2
  11. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  12. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  13. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +9 -0
  14. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js.map +1 -0
  15. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js +964 -0
  16. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -0
  17. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js +282 -0
  18. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -0
  19. package/dist/esm/components/CnChecklistRunWidget/index.js +28 -0
  20. package/dist/esm/components/CnChecklistRunWidget/index.js.map +1 -0
  21. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  22. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +17 -3
  23. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  24. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +61 -43
  25. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  26. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +1 -1
  27. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +159 -18
  28. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  29. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js +9 -7
  30. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  31. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  32. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +1 -0
  33. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  34. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  35. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +26 -8
  36. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  37. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  38. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +188 -5
  39. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  40. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  41. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  42. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +48 -3
  43. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  44. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +46 -12
  45. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  46. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
  47. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +3 -3
  48. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  49. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  50. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +1 -1
  51. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +27 -0
  52. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -1
  53. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +16 -2
  54. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -1
  55. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  56. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +144 -0
  57. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  58. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +488 -399
  59. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  60. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +8 -2
  61. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
  62. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +344 -21
  63. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  64. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +29 -7
  65. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  66. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +1 -1
  67. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +2 -2
  68. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -1
  69. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +2 -2
  70. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -1
  71. package/dist/esm/components/CnIndexPage/useNamedSource.js +1 -1
  72. package/dist/esm/components/CnIndexPage/useNamedSource.js.map +1 -1
  73. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue.js +1 -1
  74. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +13 -0
  75. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  76. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +5 -1
  77. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  78. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +9 -0
  79. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js.map +1 -0
  80. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +220 -0
  81. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -0
  82. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +121 -0
  83. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -0
  84. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js +1 -1
  85. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js +83 -9
  86. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js.map +1 -1
  87. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js +80 -11
  88. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js.map +1 -1
  89. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  90. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  91. package/dist/esm/composables/indexSources.js +420 -5
  92. package/dist/esm/composables/indexSources.js.map +1 -1
  93. package/dist/esm/composables/useOrganisationStore.js +115 -0
  94. package/dist/esm/composables/useOrganisationStore.js.map +1 -0
  95. package/dist/esm/index.js +2 -0
  96. package/dist/esm/index.js.map +1 -1
  97. package/dist/esm/l10n/en.json.js +21 -1
  98. package/dist/esm/l10n/en.json.js.map +1 -1
  99. package/dist/esm/l10n/nl.json.js +36 -1
  100. package/dist/esm/l10n/nl.json.js.map +1 -1
  101. package/dist/esm/library-style.js +1 -1
  102. package/dist/esm/nextcloud-vue.css +725 -383
  103. package/dist/esm/utils/builtInFormatters.js +34 -1
  104. package/dist/esm/utils/builtInFormatters.js.map +1 -1
  105. package/dist/esm/utils/libraryWidgetKeys.js +1 -0
  106. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  107. package/dist/esm/utils/matrixCells.js +158 -0
  108. package/dist/esm/utils/matrixCells.js.map +1 -0
  109. package/dist/esm/utils/nextcloudDirectory.js +121 -0
  110. package/dist/esm/utils/nextcloudDirectory.js.map +1 -0
  111. package/dist/esm/utils/queryPresets.js +13 -2
  112. package/dist/esm/utils/queryPresets.js.map +1 -1
  113. package/dist/esm/utils/scopeListLayout.js +37 -1
  114. package/dist/esm/utils/scopeListLayout.js.map +1 -1
  115. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  116. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  117. package/dist/nextcloud-vue.cjs.js +14443 -10519
  118. package/dist/nextcloud-vue.cjs.js.map +2 -2
  119. package/dist/nextcloud-vue.css +725 -383
  120. package/l10n/en.json +21 -1
  121. package/l10n/nl.json +36 -1
  122. package/package.json +2 -2
  123. package/scripts/merge-l10n.js +196 -0
  124. package/src/components/CnAppRoot/CnAppRoot.md +1 -0
  125. package/src/components/CnAppRoot/CnAppRoot.vue +17 -0
  126. package/src/components/CnCellRenderer/CnCellRenderer.vue +57 -1
  127. package/src/components/CnChartWidget/CnChartWidget.md +2 -1
  128. package/src/components/CnChartWidget/CnChartWidget.vue +106 -2
  129. package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +1269 -0
  130. package/src/components/CnChecklistRunWidget/index.js +27 -0
  131. package/src/components/CnConversationThread/CnConversationThread.md +12 -0
  132. package/src/components/CnConversationThread/CnConversationThread.vue +30 -4
  133. package/src/components/CnConversationThread/CnConversationWidget.vue +167 -24
  134. package/src/components/CnDashboardPage/CnDashboardPage.vue +1 -0
  135. package/src/components/CnDataTable/CnDataTable.vue +26 -8
  136. package/src/components/CnDetailPage/CnDetailPage.md +48 -0
  137. package/src/components/CnDetailPage/CnDetailPage.vue +188 -5
  138. package/src/components/CnFactsWidget/CnFactsWidget.vue +114 -3
  139. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +3 -3
  140. package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +38 -2
  141. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +508 -236
  142. package/src/components/CnFilesBrowser/filesBrowserColumns.js +8 -2
  143. package/src/components/CnIndexPage/CnIndexPage.md +28 -0
  144. package/src/components/CnIndexPage/CnIndexPage.vue +367 -27
  145. package/src/components/CnIndexPage/CnIndexPageWidgets.vue +13 -4
  146. package/src/components/CnIndexPage/useNamedSource.js +1 -1
  147. package/src/components/CnObjectSidebar/CnFilesTab.vue +17 -0
  148. package/src/components/CnOrderedListField/CnOrderedListField.vue +386 -0
  149. package/src/components/CnOrderedListField/index.js +7 -0
  150. package/src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue +139 -10
  151. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  152. package/src/components/index.js +2 -0
  153. package/src/composables/indexSources.js +419 -4
  154. package/src/composables/useOrganisationStore.js +111 -0
  155. package/src/index.js +2 -0
  156. package/src/schemas/app-manifest-v2.schema.json +42 -5
  157. package/src/utils/builtInFormatters.js +33 -0
  158. package/src/utils/libraryWidgetKeys.js +1 -0
  159. package/src/utils/matrixCells.js +154 -0
  160. package/src/utils/nextcloudDirectory.js +117 -0
  161. package/src/utils/queryPresets.js +13 -2
  162. package/src/utils/scopeListLayout.js +37 -1
  163. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -6,9 +6,11 @@ import { useDataSource } from '../../composables/useDataSource.js';
6
6
  import { useEndpointSource, getByPath } from '../../composables/useEndpointSource.js';
7
7
  import { useObjectStore } from '../../store/useObjectStore.js';
8
8
  import { resolveObjectOpType } from '../../utils/actionsDispatcher.js';
9
+ import { fetchReferenceObjects } from '../../utils/boardReferenceColumns.js';
9
10
  import { resolveObjectTokenContext } from '../../utils/detailObjectContext.js';
10
11
  import { safeCurrencyCode } from '../../utils/formatMetric.js';
11
- import { resolveFilterTokens } from '../../utils/resolveFilterTokens.js';
12
+ import { cellsFromRecord, pivotCells } from '../../utils/matrixCells.js';
13
+ import { hasUnresolvedTokens, resolveFilterTokens } from '../../utils/resolveFilterTokens.js';
12
14
  import { userLocale } from '../../utils/userLocale.js';
13
15
 
14
16
  /**
@@ -256,6 +258,26 @@ var script = {
256
258
  default: null,
257
259
  },
258
260
 
261
+ /**
262
+ * `matrix`: read the cells from records that each hold one cell, in
263
+ * a register: `{ register, schema, filter?, rowField, columnField,
264
+ * valueField, rowLabelField?, columnLabelField?, rowLabels?,
265
+ * columnLabels?, valueLabels?, rowOrder?, columnOrder?, rowOrderField?,
266
+ * columnOrderField?, limit? }`. `filter` takes tokens such as
267
+ * `@object.matrixVersion`; the list waits while one is unresolved.
268
+ * With `cellsPath` the matrix sits inside ONE record instead: the
269
+ * first record `filter` finds (else `fallbackFilter`), its array at
270
+ * `cellsPath` narrowed by `cellFilter` (tokens allowed), the axis
271
+ * order from `rowOrderPath` / `columnOrderPath` on that record.
272
+ * Wins over `series` / `categories`.
273
+ *
274
+ * @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
275
+ */
276
+ cellSource: {
277
+ type: Object,
278
+ default: null,
279
+ },
280
+
259
281
  /**
260
282
  * Chart data series. Format depends on chart type.
261
283
  * For line/area/bar: [{ name: string, data: number[] }]
@@ -668,6 +690,8 @@ var script = {
668
690
  // `drilldown` click navigates with the filterable value, not the
669
691
  // display label.
670
692
  aggregateData: null,
693
+ // The `cellSource` matrix, laid out (`{ series, categories, columnKeys }`), or null.
694
+ cellData: null,
671
695
  // Active `views[]` switcher key (null = the first view). Local
672
696
  // UI state only — never persisted.
673
697
  activeViewKey: null,
@@ -768,6 +792,9 @@ var script = {
768
792
  * and `labels`.
769
793
  */
770
794
  resolvedSeries() {
795
+ if (this.cellData) {
796
+ return this.cellData.series
797
+ }
771
798
  const ep = this.endpointChartData;
772
799
  if (ep) {
773
800
  return ep.series
@@ -781,6 +808,9 @@ var script = {
781
808
  },
782
809
 
783
810
  resolvedCategories() {
811
+ if (this.cellData) {
812
+ return this.cellData.categories
813
+ }
784
814
  const ep = this.endpointChartData;
785
815
  if (ep) {
786
816
  return ep.categories
@@ -794,6 +824,9 @@ var script = {
794
824
  },
795
825
 
796
826
  resolvedLabels() {
827
+ if (this.cellData) {
828
+ return this.cellData.categories
829
+ }
797
830
  const ep = this.endpointChartData;
798
831
  if (ep) {
799
832
  return ep.labels
@@ -1184,6 +1217,30 @@ var script = {
1184
1217
  return this.emptyLabel !== '' && !this.hasChartData
1185
1218
  },
1186
1219
 
1220
+ /**
1221
+ * The `cellSource` list as it would be asked, tokens resolved, or null
1222
+ * while there is none or a filter token is unresolved. Refetches when
1223
+ * it changes.
1224
+ *
1225
+ * @return {string|null} The key.
1226
+ * @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
1227
+ */
1228
+ cellSourceKey() {
1229
+ const src = this.cellSource;
1230
+ if (!src || typeof src !== 'object' || !src.register || !src.schema || !src.rowField || !src.columnField || !src.valueField) {
1231
+ return null
1232
+ }
1233
+ const ctx = this.chartTokenCtx();
1234
+ const resolve = (value) => resolveFilterTokens(value && typeof value === 'object' ? value : {}, ctx);
1235
+ const filter = resolve(src.filter);
1236
+ const cellFilter = resolve(src.cellFilter);
1237
+ if (hasUnresolvedTokens(filter) || hasUnresolvedTokens(cellFilter)) {
1238
+ return null
1239
+ }
1240
+ const fallbackFilter = src.fallbackFilter ? resolve(src.fallbackFilter) : null;
1241
+ return JSON.stringify({ register: src.register, schema: src.schema, filter, fallbackFilter, cellFilter, limit: src.cellsPath ? 1 : (src.limit || 500) })
1242
+ },
1243
+
1187
1244
  /**
1188
1245
  * The rows of a `bar-list`: the categories of the first displayed
1189
1246
  * series, each with its value's share of `barMax` (or the largest
@@ -1238,6 +1295,13 @@ var script = {
1238
1295
  cells: columns.map((column, index) => {
1239
1296
  const raw = Array.isArray(entry.data) ? entry.data[index] : undefined;
1240
1297
  const isCurrent = current !== null && current.row === rowIndex && current.column === index;
1298
+ const valueLabels = this.cellSource && typeof this.cellSource.valueLabels === 'object' ? this.cellSource.valueLabels : null;
1299
+ if (valueLabels && raw !== null && raw !== undefined && typeof valueLabels[String(raw)] === 'string') {
1300
+ const label = valueLabels[String(raw)];
1301
+ const tone = map[String(raw)] || map[label];
1302
+ const level = TONE_LEVELS[tone] ?? 0;
1303
+ return { text: this.hostTranslate(label), level: level || 'tone', color: level ? '' : (tone || ''), current: isCurrent }
1304
+ }
1241
1305
  if (typeof raw === 'string') {
1242
1306
  const tone = map[raw];
1243
1307
  const level = TONE_LEVELS[tone] ?? 0;
@@ -1277,7 +1341,8 @@ var script = {
1277
1341
  const series = Array.isArray(this.plottedSeries) ? this.plottedSeries : [];
1278
1342
  const rowIndex = series.findIndex((entry, i) => entry && (String(entry.key ?? '') === row || String(entry.name ?? '') === row || String(i + 1) === row));
1279
1343
  const columns = Array.isArray(this.resolvedCategories) ? this.resolvedCategories.map((c) => String(c)) : [];
1280
- const keys = Array.isArray(def.columnKeys) ? def.columnKeys.map((k) => String(k)) : [];
1344
+ const declared = Array.isArray(def.columnKeys) ? def.columnKeys : (this.cellData ? this.cellData.columnKeys : []);
1345
+ const keys = declared.map((k) => String(k));
1281
1346
  let columnIndex = keys.indexOf(column);
1282
1347
  if (columnIndex < 0) {
1283
1348
  columnIndex = columns.findIndex((c, i) => c === column || String(i + 1) === column);
@@ -1454,6 +1519,10 @@ var script = {
1454
1519
  aggregateKey() {
1455
1520
  this.fetchAggregateSource();
1456
1521
  },
1522
+
1523
+ cellSourceKey() {
1524
+ this.fetchCells();
1525
+ },
1457
1526
  },
1458
1527
 
1459
1528
  created() {
@@ -1465,6 +1534,7 @@ var script = {
1465
1534
  this.fetchGroupBy();
1466
1535
  this.fetchTimeBucket();
1467
1536
  this.fetchAggregateSource();
1537
+ this.fetchCells();
1468
1538
  // Subscribe to the widget Refresh bus (B3 event-bus opt-in mode)
1469
1539
  // FIRST, before the ResizeObserver early-return — environments
1470
1540
  // without ResizeObserver (jsdom) must still get the subscription.
@@ -1621,6 +1691,7 @@ var script = {
1621
1691
  this.fetchGroupBy(),
1622
1692
  this.fetchTimeBucket(),
1623
1693
  this.fetchAggregateSource(),
1694
+ this.fetchCells(),
1624
1695
  ])
1625
1696
  },
1626
1697
 
@@ -1841,6 +1912,39 @@ var script = {
1841
1912
  }
1842
1913
  },
1843
1914
 
1915
+ /**
1916
+ * Read the `cellSource` records and lay them out as the matrix: one
1917
+ * record per cell, or with `cellsPath` the cells inside one record. A
1918
+ * failed read leaves the matrix empty rather than showing stale
1919
+ * cells; an answer to an older request is dropped.
1920
+ *
1921
+ * @return {Promise<void>}
1922
+ * @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-records
1923
+ * @spec openspec/changes/matrix-cell-records/specs/matrix-cell-records/spec.md#requirement-a-matrix-can-read-its-cells-from-one-record
1924
+ */
1925
+ async fetchCells() {
1926
+ const key = this.cellSourceKey;
1927
+ if (key === null) {
1928
+ this.cellData = null;
1929
+ return
1930
+ }
1931
+ const { register, schema, filter, fallbackFilter, cellFilter, limit } = JSON.parse(key);
1932
+ this._cellRequest = key;
1933
+ let records = await fetchReferenceObjects({ register, schema, filter, limit }).catch(() => []);
1934
+ if (this.cellSource.cellsPath && records.length === 0 && fallbackFilter) {
1935
+ records = await fetchReferenceObjects({ register, schema, filter: fallbackFilter, limit }).catch(() => []);
1936
+ }
1937
+ if (this._cellRequest !== key) {
1938
+ return
1939
+ }
1940
+ if (this.cellSource.cellsPath) {
1941
+ const { cells, config } = cellsFromRecord(records[0] || null, this.cellSource, cellFilter);
1942
+ this.cellData = pivotCells(cells, config);
1943
+ return
1944
+ }
1945
+ this.cellData = pivotCells(records, this.cellSource);
1946
+ },
1947
+
1844
1948
  /**
1845
1949
  * Resolve the OBJECT-form `dataSource.aggregate` (Wave 3, #91) into
1846
1950
  * chart data: a categorical group-by over the schema's objects with