@conduction/nextcloud-vue 2.97.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.
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +17 -0
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +106 -2
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +9 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js +964 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js +282 -0
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChecklistRunWidget/index.js +28 -0
- package/dist/esm/components/CnChecklistRunWidget/index.js.map +1 -0
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +1 -0
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +26 -8
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +188 -5
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +3 -3
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +27 -0
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +16 -2
- package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +43 -3
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +9 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js.map +1 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +220 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +121 -0
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -0
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js +1 -1
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js +83 -9
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js +80 -11
- package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/composables/indexSources.js +238 -2
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/composables/useOrganisationStore.js +115 -0
- package/dist/esm/composables/useOrganisationStore.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +15 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +30 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +424 -206
- package/dist/esm/utils/builtInFormatters.js +34 -1
- package/dist/esm/utils/builtInFormatters.js.map +1 -1
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/matrixCells.js +158 -0
- package/dist/esm/utils/matrixCells.js.map +1 -0
- package/dist/esm/utils/nextcloudDirectory.js +121 -0
- package/dist/esm/utils/nextcloudDirectory.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +12538 -9716
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +424 -206
- package/l10n/en.json +15 -1
- package/l10n/nl.json +30 -1
- package/package.json +2 -2
- package/scripts/merge-l10n.js +196 -0
- package/src/components/CnAppRoot/CnAppRoot.md +1 -0
- package/src/components/CnAppRoot/CnAppRoot.vue +17 -0
- package/src/components/CnChartWidget/CnChartWidget.md +2 -1
- package/src/components/CnChartWidget/CnChartWidget.vue +106 -2
- package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +1269 -0
- package/src/components/CnChecklistRunWidget/index.js +27 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +26 -8
- package/src/components/CnDetailPage/CnDetailPage.md +48 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +188 -5
- package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +3 -3
- package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +38 -2
- package/src/components/CnIndexPage/CnIndexPage.md +28 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +43 -3
- package/src/components/CnOrderedListField/CnOrderedListField.vue +386 -0
- package/src/components/CnOrderedListField/index.js +7 -0
- package/src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue +139 -10
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/src/components/index.js +2 -0
- package/src/composables/indexSources.js +237 -1
- package/src/composables/useOrganisationStore.js +111 -0
- package/src/index.js +2 -0
- package/src/schemas/app-manifest-v2.schema.json +33 -3
- package/src/utils/builtInFormatters.js +33 -0
- package/src/utils/libraryWidgetKeys.js +1 -0
- package/src/utils/matrixCells.js +154 -0
- package/src/utils/nextcloudDirectory.js +117 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
|
@@ -2,7 +2,7 @@ import script from './CnChartWidget.vue2.js';
|
|
|
2
2
|
import { render } from './CnChartWidget.vue3.js';
|
|
3
3
|
|
|
4
4
|
script.render = render;
|
|
5
|
-
script.__scopeId = "data-v-
|
|
5
|
+
script.__scopeId = "data-v-0b737464";
|
|
6
6
|
const __sfc_main = script;
|
|
7
7
|
|
|
8
8
|
export { __sfc_main as default };
|
|
@@ -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 {
|
|
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
|
|
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
|