@conduction/nextcloud-vue 2.82.0 → 2.83.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/CnActionsBar/CnActionsBar.vue2.js +2 -2
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +24 -0
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +9 -4
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +9 -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/CnIndexPage/CnIndexPage.vue2.js +96 -12
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +95 -50
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnMassActionBar/CnMassActionBar.vue2.js +2 -2
- package/dist/esm/components/CnMassActionBar/CnMassActionBar.vue2.js.map +1 -1
- package/dist/esm/components/CnMassImportDialog/CnMassImportDialog.vue2.js +2 -2
- package/dist/esm/components/CnMassImportDialog/CnMassImportDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +1 -1
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +16 -2
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +3 -3
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue.js +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js +43 -0
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js +130 -53
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +1 -1
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +70 -5
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +61 -35
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +3 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue.js +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +55 -3
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +88 -71
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +1 -1
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +18 -4
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +3 -3
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +549 -338
- package/dist/esm/utils/fetchAggregate.js +25 -2
- package/dist/esm/utils/fetchAggregate.js.map +1 -1
- package/dist/esm/utils/switchValues.js +62 -0
- package/dist/esm/utils/switchValues.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 +36086 -35536
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +549 -338
- package/l10n/nl.json +3 -3
- package/package.json +1 -1
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +31 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +9 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +125 -15
- package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +54 -3
- package/src/components/CnReportsPage/CnReportsPage.vue +84 -4
- package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +110 -18
- package/src/components/CnStatWidget/CnStatWidget.vue +3 -1
- package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +92 -5
- package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +18 -4
- package/src/css/index-page.css +11 -0
- package/src/css/index.css +1 -0
- package/src/css/look-board-reports.css +117 -0
- package/src/css/look-board.css +32 -1
- package/src/schemas/app-manifest-v2.schema.json +2 -2
- package/src/utils/fetchAggregate.js +24 -1
- package/src/utils/switchValues.js +59 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"$id": "https://raw.githubusercontent.com/ConductionNL/nextcloud-vue/main/src/schemas/app-manifest-v2.schema.json",
|
|
4
4
|
"title": "Conduction App Manifest v2",
|
|
5
5
|
"description": "v2 schema for the JSON-driven page and navigation manifest consumed by @conduction/nextcloud-vue. Introduces a uniform widgets[] array on every page type with a per-slot grid coordinate system, a typed actions[] discriminator, and the required $schema field for version detection. v1 manifests continue to validate against app-manifest.schema.json (unchanged).",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.93.0",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"required": ["$schema", "version"],
|
|
9
9
|
"allOf": [
|
|
@@ -4309,7 +4309,7 @@
|
|
|
4309
4309
|
"variant": { "type": "string", "enum": ["primary", "secondary"], "default": "secondary" },
|
|
4310
4310
|
"icon": { "type": "string", "minLength": 1, "description": "MDI icon name." },
|
|
4311
4311
|
"format": { "type": "string", "enum": ["csv", "excel"], "default": "csv", "description": "For `export`." },
|
|
4312
|
-
"items": { "type": "array", "minItems": 1, "
|
|
4312
|
+
"items": { "type": "array", "minItems": 1, "items": { "anyOf": [ { "type": "string", "minLength": 1 }, { "type": "object", "additionalProperties": false, "required": ["heading"], "properties": { "heading": { "type": "string", "minLength": 1, "description": "i18n key of a group heading." } } } ] }, "description": "For `actions-menu`: the menu's entries, in order. Each is `header-actions` (every header action), the id of one `headerActions` entry, or a built-in of the actions bar's own menu, which the bar drops while header buttons show: `import`, `export`, `refresh`, `copy-selected`, `delete-selected` (disabled until a row is selected) or `documentation` (a link to the page's documentationUrl, left out without one). An unknown name is left out. Absent: the header actions only (screens-index-header-actions-menu, 2.90.0). Entries can be grouped: `{ \"heading\": \"<i18n key>\" }` draws a group heading and `\"separator\"` a rule, each only when an entry follows it, so a group whose entries are all left out leaves no empty heading (screens-index-header-menu-headings, 2.93.0)." }
|
|
4313
4313
|
}
|
|
4314
4314
|
}
|
|
4315
4315
|
},
|
|
@@ -37,11 +37,34 @@ export function flattenAggFilter(target, filter, ctx) {
|
|
|
37
37
|
target[`filter[${k}][${op}]`] = ov
|
|
38
38
|
}
|
|
39
39
|
} else if (v !== '' && v !== null && v !== undefined) {
|
|
40
|
-
target[
|
|
40
|
+
target[aggFilterParam(k)] = v
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Matches a filter key that spells its operator, `field[op]`.
|
|
47
|
+
*
|
|
48
|
+
* @type {RegExp}
|
|
49
|
+
*/
|
|
50
|
+
const OPERATOR_KEY = /^(.+)\[([A-Za-z_]+)\]$/
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The query parameter of one plain filter key. A key that spells its operator
|
|
54
|
+
* (`scheduledDate[gte]`, the flat form a list page and a lens use) goes out as
|
|
55
|
+
* `filter[scheduledDate][gte]`, the form the aggregation endpoint reads, and
|
|
56
|
+
* not as `filter[scheduledDate[gte]]`, a field it does not have, which counted
|
|
57
|
+
* 0. Any other key goes out as `filter[key]`.
|
|
58
|
+
*
|
|
59
|
+
* @spec openspec/changes/screens-stats-block-operator-keys/specs/stats-block/spec.md#requirement-a-stats-block-filter-can-spell-its-operator-in-the-key
|
|
60
|
+
* @param {string} key The filter key.
|
|
61
|
+
* @return {string} The query parameter name.
|
|
62
|
+
*/
|
|
63
|
+
export function aggFilterParam(key) {
|
|
64
|
+
const match = OPERATOR_KEY.exec(key)
|
|
65
|
+
return match ? `filter[${match[1]}][${match[2]}]` : `filter[${key}]`
|
|
66
|
+
}
|
|
67
|
+
|
|
45
68
|
/**
|
|
46
69
|
* Fetch one aggregated scalar from OpenRegister.
|
|
47
70
|
*
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-FileCopyrightText: 2026 Conduction B.V.
|
|
3
|
+
* SPDX-License-Identifier: EUPL-1.2
|
|
4
|
+
*
|
|
5
|
+
* A switch's value map: what a switch reads as "on" and what it writes for on
|
|
6
|
+
* and off. Without a map a switch is a boolean, as before. With `values:
|
|
7
|
+
* { on, off }` it reads a field stored as `"1"`/`"0"` or `"true"`/`"false"`
|
|
8
|
+
* (an app config flag) and writes those values back.
|
|
9
|
+
*
|
|
10
|
+
* @module utils/switchValues
|
|
11
|
+
* @spec openspec/changes/screens-switch-value-map/specs/switch-rows/spec.md#requirement-a-switch-can-read-and-write-a-value-map
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The value map of a switch, or null when it has none (a boolean switch).
|
|
16
|
+
*
|
|
17
|
+
* @param {unknown} values The declared `values`.
|
|
18
|
+
* @return {{on: unknown, off: unknown}|null} The map.
|
|
19
|
+
*/
|
|
20
|
+
export function switchValueMap(values) {
|
|
21
|
+
if (!values || typeof values !== 'object' || Array.isArray(values) || values.on === undefined) {
|
|
22
|
+
return null
|
|
23
|
+
}
|
|
24
|
+
return { on: values.on, off: values.off === undefined ? null : values.off }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Whether a stored value reads as "on". Without a map only `true` does; with
|
|
29
|
+
* one, the `on` value does, compared as text so `1` and `"1"` are the same.
|
|
30
|
+
*
|
|
31
|
+
* @param {unknown} stored The stored value.
|
|
32
|
+
* @param {unknown} values The declared `values`.
|
|
33
|
+
* @return {boolean} True when the switch shows on.
|
|
34
|
+
*/
|
|
35
|
+
export function switchIsOn(stored, values) {
|
|
36
|
+
const map = switchValueMap(values)
|
|
37
|
+
if (!map) {
|
|
38
|
+
return stored === true
|
|
39
|
+
}
|
|
40
|
+
if (stored === undefined || stored === null) {
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
return stored === map.on || String(stored) === String(map.on)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The value a switch writes for a state.
|
|
48
|
+
*
|
|
49
|
+
* @param {boolean} on The switch state.
|
|
50
|
+
* @param {unknown} values The declared `values`.
|
|
51
|
+
* @return {unknown} `true`/`false` without a map, else the map's `on` / `off`.
|
|
52
|
+
*/
|
|
53
|
+
export function switchStoredValue(on, values) {
|
|
54
|
+
const map = switchValueMap(values)
|
|
55
|
+
if (!map) {
|
|
56
|
+
return on === true
|
|
57
|
+
}
|
|
58
|
+
return on ? map.on : map.off
|
|
59
|
+
}
|