@conduction/nextcloud-vue 2.120.0 → 2.122.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/CnIndexPage/CnIndexPage.vue2.js +53 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +546 -523
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useNamedSource.js +9 -0
- package/dist/esm/components/CnIndexPage/useNamedSource.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +1 -0
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue.js +9 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue.js.map +1 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js +214 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js.map +1 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js +125 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js +9 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js +163 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js +131 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js +127 -0
- package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js +9 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js +82 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js +61 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js +60 -0
- package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js +10 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js +226 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js +126 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +42 -32
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/composables/indexSources.js +116 -16
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +42 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +42 -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 +309 -13
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +14136 -12578
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +309 -13
- package/l10n/en.json +42 -1
- package/l10n/nl.json +42 -1
- package/package.json +1 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +74 -3
- package/src/components/CnIndexPage/useNamedSource.js +9 -0
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +1 -0
- package/src/components/CnReadinessChecklist/CnReadinessChecklist.vue +335 -0
- package/src/components/CnReadinessChecklist/index.js +9 -0
- package/src/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue +300 -0
- package/src/components/CnSchemaRulesWidget/index.js +10 -0
- package/src/components/CnSchemaRulesWidget/schemaRules.js +123 -0
- package/src/components/CnSearchIndexStatus/CnSearchIndexStatus.vue +160 -0
- package/src/components/CnSearchIndexStatus/index.js +10 -0
- package/src/components/CnSearchIndexStatus/searchIndexStatus.js +56 -0
- package/src/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue +328 -0
- package/src/components/CnShippedConfigurationSection/index.js +9 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +10 -0
- package/src/components/index.js +4 -0
- package/src/composables/indexSources.js +116 -16
- package/src/css/index-page.css +7 -0
- package/src/css/look-board-detail.css +27 -0
- package/src/css/look-board-index.css +108 -12
- package/src/css/look-board.css +27 -1
- package/src/index.js +4 -0
- package/src/utils/libraryWidgetKeys.js +1 -0
package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnShippedConfigurationSection.vue2.js","sources":["../../../../src/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div class=\"cn-shipped-configuration\" data-testid=\"cn-shipped-configuration\">\n\t\t<p v-if=\"description\" class=\"cn-shipped-configuration__intro\">\n\t\t\t{{ text(description) }}\n\t\t</p>\n\n\t\t<NcSelect v-if=\"schemas.length > 1\"\n\t\t\tv-model=\"schemaOption\"\n\t\t\tclass=\"cn-shipped-configuration__picker\"\n\t\t\t:options=\"schemaOptions\"\n\t\t\t:inputLabel=\"t('nextcloud-vue', 'Show')\"\n\t\t\t:clearable=\"false\"\n\t\t\tdata-testid=\"cn-shipped-schema\" />\n\n\t\t<table class=\"cn-shipped-configuration__table\" data-testid=\"cn-shipped-configuration-table\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Name') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'State') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Shipped set') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Version') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Newer version') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr v-for=\"row in rows\" :key=\"row.targetObject\">\n\t\t\t\t\t<td>{{ row.title || row.targetObject }}</td>\n\t\t\t\t\t<td :data-testid=\"'cn-shipped-state-' + row.targetObject\">\n\t\t\t\t\t\t{{ stateLabel(row) }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td>{{ row.set }}</td>\n\t\t\t\t\t<td>{{ row.setVersion }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<NcButton v-if=\"updatable(row)\"\n\t\t\t\t\t\t\t:data-testid=\"'cn-shipped-adopt-' + row.targetObject\"\n\t\t\t\t\t\t\t:disabled=\"adopting === row.targetObject\"\n\t\t\t\t\t\t\t@click=\"adopt(row)\">\n\t\t\t\t\t\t\t{{ adoptLabel(row) }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<span v-else class=\"cn-shipped-configuration__muted\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Up to date') }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr v-if=\"!rows.length\">\n\t\t\t\t\t<td colspan=\"5\"\n\t\t\t\t\t\tclass=\"cn-shipped-configuration__muted\"\n\t\t\t\t\t\tdata-testid=\"cn-shipped-configuration-empty\">\n\t\t\t\t\t\t{{ emptyLine }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<NcNoteCard v-if=\"loadError\" type=\"error\" data-testid=\"cn-shipped-configuration-error\">\n\t\t\t{{ loadError }}\n\t\t</NcNoteCard>\n\t\t<NcNoteCard v-if=\"adoptError\" type=\"error\" data-testid=\"cn-shipped-configuration-adopt-error\">\n\t\t\t{{ adoptError }}\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { showSuccess } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcButton, NcNoteCard, NcSelect } from '@nextcloud/vue'\n\n/**\n * The states a seeded object can be in.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SHIPPED_STATES = Object.freeze({\n\tshipped: 'shipped',\n\tchanged: 'changed',\n\tlocal: 'local',\n\tremoved: 'removed',\n})\n\n/**\n * CnShippedConfigurationSection: what an app shipped, what this instance\n * changed, and what it authored. One row per seeded object with the set and\n * version it came from, its state, and the newer version offered per object.\n * Taking a newer version over a local change says so on the button, because\n * the change goes.\n *\n * The app's endpoint answers `GET {endpoint}/{schema}` with `{ items: [{\n * targetObject, title, state, set, setVersion, latestVersion, updateAvailable\n * }] }` and takes `POST {endpoint}/{schema}/{targetObject}/adopt` with `{ set,\n * acceptLocalChangeLoss }`, refusing with `{ reason }`. An empty ledger beside\n * a register that holds objects is said as such (`countUrl`), not as \"nothing\n * seeded\".\n *\n * @spec openspec/changes/shipped-configuration-section/specs/shipped-configuration-section/spec.md\n */\nexport default {\n\tname: 'CnShippedConfigurationSection',\n\n\tcomponents: { NcButton, NcNoteCard, NcSelect },\n\n\tinject: {\n\t\t/** The host app's translate, for the texts the page declares. */\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/** The app path of the shipped ledger (`/apps/<app>/api/starter/shipped`). */\n\t\tendpoint: { type: String, required: true },\n\t\t/** The schemas to show, `[{ slug, label }]`; the first is shown first. */\n\t\tschemas: { type: Array, default: () => [] },\n\t\t/**\n\t\t * An app path that counts a schema's objects, `{schema}` filled in\n\t\t * (`/apps/openregister/api/objects/<register>/{schema}`), read with\n\t\t * `_limit=1` for its `total`.\n\t\t */\n\t\tcountUrl: { type: String, default: '' },\n\t\t/** A line above the table. */\n\t\tdescription: { type: String, default: '' },\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tschema: this.schemas.length > 0 ? String(this.schemas[0].slug) : '',\n\t\t\trows: [],\n\t\t\tpresent: null,\n\t\t\tloadError: '',\n\t\t\tadoptError: '',\n\t\t\tadopting: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Array<{id: string, label: string}>} The picker's options. */\n\t\tschemaOptions() {\n\t\t\treturn this.schemas.map((option) => ({ id: String(option.slug), label: this.text(option.label || option.slug) }))\n\t\t},\n\n\t\tschemaOption: {\n\t\t\t/** @return {object|null} The chosen schema. */\n\t\t\tget() {\n\t\t\t\treturn this.schemaOptions.find((option) => option.id === this.schema) || null\n\t\t\t},\n\n\t\t\t/** @param {object|null} option The chosen schema. */\n\t\t\tset(option) {\n\t\t\t\tif (option) {\n\t\t\t\t\tthis.schema = option.id\n\t\t\t\t\tthis.reload()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/** @return {string} What the empty table says, which depends on what the register holds. */\n\t\temptyLine() {\n\t\t\tif (typeof this.present === 'number' && this.present > 0) {\n\t\t\t\treturn t('nextcloud-vue', 'The register holds {count} of these. None came from a shipped set, so there is no shipped version to compare with.', { count: this.present })\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Nothing has been seeded yet.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.reload()\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * @param {string} value A declared text.\n\t\t * @return {string} It, translated by the host.\n\t\t */\n\t\ttext(value) {\n\t\t\treturn value ? String(this.cnTranslate(String(value))) : ''\n\t\t},\n\n\t\t/**\n\t\t * Read what shipped for the shown schema. A failed read empties the\n\t\t * table: rows left beside an error would read as the current state.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync reload() {\n\t\t\tif (!this.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(`${this.endpoint}/${encodeURIComponent(this.schema)}`))\n\t\t\t\tthis.rows = Array.isArray(data && data.items) ? data.items : []\n\t\t\t\tthis.loadError = ''\n\t\t\t\tthis.present = null\n\t\t\t\tif (this.rows.length === 0) {\n\t\t\t\t\tthis.present = await this.count()\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.present = null\n\t\t\t\tthis.loadError = t('nextcloud-vue', 'Could not read the shipped configuration.')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * How many objects of the shown schema the register holds, whatever\n\t\t * brought them.\n\t\t *\n\t\t * @return {Promise<number|null>} The count, or null when it cannot be read.\n\t\t */\n\t\tasync count() {\n\t\t\tif (!this.countUrl) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(this.countUrl.replace('{schema}', encodeURIComponent(this.schema))), { params: { _limit: 1 } })\n\t\t\t\tconst total = Number(data && data.total)\n\t\t\t\treturn Number.isFinite(total) ? total : null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {string} What an administrator reads beside the object.\n\t\t */\n\t\tstateLabel(row) {\n\t\t\tconst state = (row && row.state) || SHIPPED_STATES.local\n\t\t\treturn {\n\t\t\t\t[SHIPPED_STATES.shipped]: t('nextcloud-vue', 'Shipped, unchanged'),\n\t\t\t\t[SHIPPED_STATES.changed]: t('nextcloud-vue', 'Shipped, changed here'),\n\t\t\t\t[SHIPPED_STATES.removed]: t('nextcloud-vue', 'Shipped, removed here'),\n\t\t\t}[state] || t('nextcloud-vue', 'Yours')\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {boolean} Whether a newer shipped version can be taken.\n\t\t */\n\t\tupdatable(row) {\n\t\t\treturn Boolean(row && row.updateAvailable && row.state !== SHIPPED_STATES.removed)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {boolean} Whether taking the newer version overwrites a local change.\n\t\t */\n\t\tlosesLocalChange(row) {\n\t\t\treturn Boolean(row && row.state === SHIPPED_STATES.changed)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {string} The button's words, which say when a local change goes.\n\t\t */\n\t\tadoptLabel(row) {\n\t\t\treturn this.losesLocalChange(row)\n\t\t\t\t? t('nextcloud-vue', 'Take {version} and lose your change', { version: row.latestVersion })\n\t\t\t\t: t('nextcloud-vue', 'Take {version}', { version: row.latestVersion })\n\t\t},\n\n\t\t/**\n\t\t * Take the newer shipped version of one object, then read the ledger again.\n\t\t *\n\t\t * @param {object} row A ledger row.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync adopt(row) {\n\t\t\tthis.adopting = row.targetObject\n\t\t\tthis.adoptError = ''\n\t\t\ttry {\n\t\t\t\tawait axios.post(\n\t\t\t\t\tgenerateUrl(`${this.endpoint}/${encodeURIComponent(this.schema)}/${encodeURIComponent(row.targetObject)}/adopt`),\n\t\t\t\t\t{ set: row.set, acceptLocalChangeLoss: this.losesLocalChange(row) },\n\t\t\t\t)\n\t\t\t\tshowSuccess(t('nextcloud-vue', 'The newer version was taken.'))\n\t\t\t\tawait this.reload()\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error && error.response && error.response.data\n\t\t\t\tthis.adoptError = String((data && (data.reason || data.message)) || t('nextcloud-vue', 'The newer version was not taken.'))\n\t\t\t} finally {\n\t\t\t\tthis.adopting = ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-shipped-configuration__intro,\n.cn-shipped-configuration__muted {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-shipped-configuration__picker {\n\tmax-width: 320px;\n}\n\n.cn-shipped-configuration__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tmargin-top: 12px;\n\t/* Nextcloud sets `table { white-space: nowrap }`; a cell here can be a sentence. */\n\twhite-space: normal;\n}\n\n.cn-shipped-configuration__table th,\n.cn-shipped-configuration__table td {\n\tpadding: 6px 8px;\n\tborder-bottom: 1px solid var(--color-border);\n\ttext-align: start;\n}\n</style>\n"],"names":["t","axios"],"mappings":"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"}
|
package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, toDisplayString, createCommentVNode, createBlock, createElementVNode, Fragment, renderList, withCtx, createTextVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = {
|
|
4
|
+
class: "cn-shipped-configuration",
|
|
5
|
+
"data-testid": "cn-shipped-configuration"
|
|
6
|
+
};
|
|
7
|
+
const _hoisted_2 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "cn-shipped-configuration__intro"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_3 = {
|
|
12
|
+
class: "cn-shipped-configuration__table",
|
|
13
|
+
"data-testid": "cn-shipped-configuration-table"
|
|
14
|
+
};
|
|
15
|
+
const _hoisted_4 = { scope: "col" };
|
|
16
|
+
const _hoisted_5 = { scope: "col" };
|
|
17
|
+
const _hoisted_6 = { scope: "col" };
|
|
18
|
+
const _hoisted_7 = { scope: "col" };
|
|
19
|
+
const _hoisted_8 = { scope: "col" };
|
|
20
|
+
const _hoisted_9 = ["data-testid"];
|
|
21
|
+
const _hoisted_10 = {
|
|
22
|
+
key: 1,
|
|
23
|
+
class: "cn-shipped-configuration__muted"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_11 = { key: 0 };
|
|
26
|
+
const _hoisted_12 = {
|
|
27
|
+
colspan: "5",
|
|
28
|
+
class: "cn-shipped-configuration__muted",
|
|
29
|
+
"data-testid": "cn-shipped-configuration-empty"
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
33
|
+
const _component_NcSelect = resolveComponent("NcSelect");
|
|
34
|
+
const _component_NcButton = resolveComponent("NcButton");
|
|
35
|
+
const _component_NcNoteCard = resolveComponent("NcNoteCard");
|
|
36
|
+
|
|
37
|
+
return (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
38
|
+
($props.description)
|
|
39
|
+
? (openBlock(), createElementBlock("p", _hoisted_2, toDisplayString($options.text($props.description)), 1 /* TEXT */))
|
|
40
|
+
: createCommentVNode("v-if", true),
|
|
41
|
+
($props.schemas.length > 1)
|
|
42
|
+
? (openBlock(), createBlock(_component_NcSelect, {
|
|
43
|
+
key: 1,
|
|
44
|
+
modelValue: $options.schemaOption,
|
|
45
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($options.schemaOption) = $event)),
|
|
46
|
+
class: "cn-shipped-configuration__picker",
|
|
47
|
+
options: $options.schemaOptions,
|
|
48
|
+
inputLabel: $options.t('nextcloud-vue', 'Show'),
|
|
49
|
+
clearable: false,
|
|
50
|
+
"data-testid": "cn-shipped-schema"
|
|
51
|
+
}, null, 8 /* PROPS */, ["modelValue", "options", "inputLabel"]))
|
|
52
|
+
: createCommentVNode("v-if", true),
|
|
53
|
+
createElementVNode("table", _hoisted_3, [
|
|
54
|
+
createElementVNode("thead", null, [
|
|
55
|
+
createElementVNode("tr", null, [
|
|
56
|
+
createElementVNode("th", _hoisted_4, toDisplayString($options.t('nextcloud-vue', 'Name')), 1 /* TEXT */),
|
|
57
|
+
createElementVNode("th", _hoisted_5, toDisplayString($options.t('nextcloud-vue', 'State')), 1 /* TEXT */),
|
|
58
|
+
createElementVNode("th", _hoisted_6, toDisplayString($options.t('nextcloud-vue', 'Shipped set')), 1 /* TEXT */),
|
|
59
|
+
createElementVNode("th", _hoisted_7, toDisplayString($options.t('nextcloud-vue', 'Version')), 1 /* TEXT */),
|
|
60
|
+
createElementVNode("th", _hoisted_8, toDisplayString($options.t('nextcloud-vue', 'Newer version')), 1 /* TEXT */)
|
|
61
|
+
])
|
|
62
|
+
]),
|
|
63
|
+
createElementVNode("tbody", null, [
|
|
64
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($data.rows, (row) => {
|
|
65
|
+
return (openBlock(), createElementBlock("tr", {
|
|
66
|
+
key: row.targetObject
|
|
67
|
+
}, [
|
|
68
|
+
createElementVNode("td", null, toDisplayString(row.title || row.targetObject), 1 /* TEXT */),
|
|
69
|
+
createElementVNode("td", {
|
|
70
|
+
"data-testid": 'cn-shipped-state-' + row.targetObject
|
|
71
|
+
}, toDisplayString($options.stateLabel(row)), 9 /* TEXT, PROPS */, _hoisted_9),
|
|
72
|
+
createElementVNode("td", null, toDisplayString(row.set), 1 /* TEXT */),
|
|
73
|
+
createElementVNode("td", null, toDisplayString(row.setVersion), 1 /* TEXT */),
|
|
74
|
+
createElementVNode("td", null, [
|
|
75
|
+
($options.updatable(row))
|
|
76
|
+
? (openBlock(), createBlock(_component_NcButton, {
|
|
77
|
+
key: 0,
|
|
78
|
+
"data-testid": 'cn-shipped-adopt-' + row.targetObject,
|
|
79
|
+
disabled: $data.adopting === row.targetObject,
|
|
80
|
+
onClick: $event => ($options.adopt(row))
|
|
81
|
+
}, {
|
|
82
|
+
default: withCtx(() => [
|
|
83
|
+
createTextVNode(toDisplayString($options.adoptLabel(row)), 1 /* TEXT */)
|
|
84
|
+
]),
|
|
85
|
+
_: 2 /* DYNAMIC */
|
|
86
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["data-testid", "disabled", "onClick"]))
|
|
87
|
+
: (openBlock(), createElementBlock("span", _hoisted_10, toDisplayString($options.t('nextcloud-vue', 'Up to date')), 1 /* TEXT */))
|
|
88
|
+
])
|
|
89
|
+
]))
|
|
90
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
91
|
+
(!$data.rows.length)
|
|
92
|
+
? (openBlock(), createElementBlock("tr", _hoisted_11, [
|
|
93
|
+
createElementVNode("td", _hoisted_12, toDisplayString($options.emptyLine), 1 /* TEXT */)
|
|
94
|
+
]))
|
|
95
|
+
: createCommentVNode("v-if", true)
|
|
96
|
+
])
|
|
97
|
+
]),
|
|
98
|
+
($data.loadError)
|
|
99
|
+
? (openBlock(), createBlock(_component_NcNoteCard, {
|
|
100
|
+
key: 2,
|
|
101
|
+
type: "error",
|
|
102
|
+
"data-testid": "cn-shipped-configuration-error"
|
|
103
|
+
}, {
|
|
104
|
+
default: withCtx(() => [
|
|
105
|
+
createTextVNode(toDisplayString($data.loadError), 1 /* TEXT */)
|
|
106
|
+
]),
|
|
107
|
+
_: 1 /* STABLE */
|
|
108
|
+
}))
|
|
109
|
+
: createCommentVNode("v-if", true),
|
|
110
|
+
($data.adoptError)
|
|
111
|
+
? (openBlock(), createBlock(_component_NcNoteCard, {
|
|
112
|
+
key: 3,
|
|
113
|
+
type: "error",
|
|
114
|
+
"data-testid": "cn-shipped-configuration-adopt-error"
|
|
115
|
+
}, {
|
|
116
|
+
default: withCtx(() => [
|
|
117
|
+
createTextVNode(toDisplayString($data.adoptError), 1 /* TEXT */)
|
|
118
|
+
]),
|
|
119
|
+
_: 1 /* STABLE */
|
|
120
|
+
}))
|
|
121
|
+
: createCommentVNode("v-if", true)
|
|
122
|
+
]))
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export { render };
|
|
126
|
+
//# sourceMappingURL=CnShippedConfigurationSection.vue3.js.map
|
package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnShippedConfigurationSection.vue3.js","sources":["../../../../src/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue?vue&type=template&id=fd515054&lang.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div class=\"cn-shipped-configuration\" data-testid=\"cn-shipped-configuration\">\n\t\t<p v-if=\"description\" class=\"cn-shipped-configuration__intro\">\n\t\t\t{{ text(description) }}\n\t\t</p>\n\n\t\t<NcSelect v-if=\"schemas.length > 1\"\n\t\t\tv-model=\"schemaOption\"\n\t\t\tclass=\"cn-shipped-configuration__picker\"\n\t\t\t:options=\"schemaOptions\"\n\t\t\t:inputLabel=\"t('nextcloud-vue', 'Show')\"\n\t\t\t:clearable=\"false\"\n\t\t\tdata-testid=\"cn-shipped-schema\" />\n\n\t\t<table class=\"cn-shipped-configuration__table\" data-testid=\"cn-shipped-configuration-table\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Name') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'State') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Shipped set') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Version') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th scope=\"col\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Newer version') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr v-for=\"row in rows\" :key=\"row.targetObject\">\n\t\t\t\t\t<td>{{ row.title || row.targetObject }}</td>\n\t\t\t\t\t<td :data-testid=\"'cn-shipped-state-' + row.targetObject\">\n\t\t\t\t\t\t{{ stateLabel(row) }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td>{{ row.set }}</td>\n\t\t\t\t\t<td>{{ row.setVersion }}</td>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<NcButton v-if=\"updatable(row)\"\n\t\t\t\t\t\t\t:data-testid=\"'cn-shipped-adopt-' + row.targetObject\"\n\t\t\t\t\t\t\t:disabled=\"adopting === row.targetObject\"\n\t\t\t\t\t\t\t@click=\"adopt(row)\">\n\t\t\t\t\t\t\t{{ adoptLabel(row) }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<span v-else class=\"cn-shipped-configuration__muted\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Up to date') }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr v-if=\"!rows.length\">\n\t\t\t\t\t<td colspan=\"5\"\n\t\t\t\t\t\tclass=\"cn-shipped-configuration__muted\"\n\t\t\t\t\t\tdata-testid=\"cn-shipped-configuration-empty\">\n\t\t\t\t\t\t{{ emptyLine }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<NcNoteCard v-if=\"loadError\" type=\"error\" data-testid=\"cn-shipped-configuration-error\">\n\t\t\t{{ loadError }}\n\t\t</NcNoteCard>\n\t\t<NcNoteCard v-if=\"adoptError\" type=\"error\" data-testid=\"cn-shipped-configuration-adopt-error\">\n\t\t\t{{ adoptError }}\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { showSuccess } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcButton, NcNoteCard, NcSelect } from '@nextcloud/vue'\n\n/**\n * The states a seeded object can be in.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SHIPPED_STATES = Object.freeze({\n\tshipped: 'shipped',\n\tchanged: 'changed',\n\tlocal: 'local',\n\tremoved: 'removed',\n})\n\n/**\n * CnShippedConfigurationSection: what an app shipped, what this instance\n * changed, and what it authored. One row per seeded object with the set and\n * version it came from, its state, and the newer version offered per object.\n * Taking a newer version over a local change says so on the button, because\n * the change goes.\n *\n * The app's endpoint answers `GET {endpoint}/{schema}` with `{ items: [{\n * targetObject, title, state, set, setVersion, latestVersion, updateAvailable\n * }] }` and takes `POST {endpoint}/{schema}/{targetObject}/adopt` with `{ set,\n * acceptLocalChangeLoss }`, refusing with `{ reason }`. An empty ledger beside\n * a register that holds objects is said as such (`countUrl`), not as \"nothing\n * seeded\".\n *\n * @spec openspec/changes/shipped-configuration-section/specs/shipped-configuration-section/spec.md\n */\nexport default {\n\tname: 'CnShippedConfigurationSection',\n\n\tcomponents: { NcButton, NcNoteCard, NcSelect },\n\n\tinject: {\n\t\t/** The host app's translate, for the texts the page declares. */\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/** The app path of the shipped ledger (`/apps/<app>/api/starter/shipped`). */\n\t\tendpoint: { type: String, required: true },\n\t\t/** The schemas to show, `[{ slug, label }]`; the first is shown first. */\n\t\tschemas: { type: Array, default: () => [] },\n\t\t/**\n\t\t * An app path that counts a schema's objects, `{schema}` filled in\n\t\t * (`/apps/openregister/api/objects/<register>/{schema}`), read with\n\t\t * `_limit=1` for its `total`.\n\t\t */\n\t\tcountUrl: { type: String, default: '' },\n\t\t/** A line above the table. */\n\t\tdescription: { type: String, default: '' },\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tschema: this.schemas.length > 0 ? String(this.schemas[0].slug) : '',\n\t\t\trows: [],\n\t\t\tpresent: null,\n\t\t\tloadError: '',\n\t\t\tadoptError: '',\n\t\t\tadopting: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Array<{id: string, label: string}>} The picker's options. */\n\t\tschemaOptions() {\n\t\t\treturn this.schemas.map((option) => ({ id: String(option.slug), label: this.text(option.label || option.slug) }))\n\t\t},\n\n\t\tschemaOption: {\n\t\t\t/** @return {object|null} The chosen schema. */\n\t\t\tget() {\n\t\t\t\treturn this.schemaOptions.find((option) => option.id === this.schema) || null\n\t\t\t},\n\n\t\t\t/** @param {object|null} option The chosen schema. */\n\t\t\tset(option) {\n\t\t\t\tif (option) {\n\t\t\t\t\tthis.schema = option.id\n\t\t\t\t\tthis.reload()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/** @return {string} What the empty table says, which depends on what the register holds. */\n\t\temptyLine() {\n\t\t\tif (typeof this.present === 'number' && this.present > 0) {\n\t\t\t\treturn t('nextcloud-vue', 'The register holds {count} of these. None came from a shipped set, so there is no shipped version to compare with.', { count: this.present })\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Nothing has been seeded yet.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.reload()\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * @param {string} value A declared text.\n\t\t * @return {string} It, translated by the host.\n\t\t */\n\t\ttext(value) {\n\t\t\treturn value ? String(this.cnTranslate(String(value))) : ''\n\t\t},\n\n\t\t/**\n\t\t * Read what shipped for the shown schema. A failed read empties the\n\t\t * table: rows left beside an error would read as the current state.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync reload() {\n\t\t\tif (!this.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(`${this.endpoint}/${encodeURIComponent(this.schema)}`))\n\t\t\t\tthis.rows = Array.isArray(data && data.items) ? data.items : []\n\t\t\t\tthis.loadError = ''\n\t\t\t\tthis.present = null\n\t\t\t\tif (this.rows.length === 0) {\n\t\t\t\t\tthis.present = await this.count()\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.present = null\n\t\t\t\tthis.loadError = t('nextcloud-vue', 'Could not read the shipped configuration.')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * How many objects of the shown schema the register holds, whatever\n\t\t * brought them.\n\t\t *\n\t\t * @return {Promise<number|null>} The count, or null when it cannot be read.\n\t\t */\n\t\tasync count() {\n\t\t\tif (!this.countUrl) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(this.countUrl.replace('{schema}', encodeURIComponent(this.schema))), { params: { _limit: 1 } })\n\t\t\t\tconst total = Number(data && data.total)\n\t\t\t\treturn Number.isFinite(total) ? total : null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {string} What an administrator reads beside the object.\n\t\t */\n\t\tstateLabel(row) {\n\t\t\tconst state = (row && row.state) || SHIPPED_STATES.local\n\t\t\treturn {\n\t\t\t\t[SHIPPED_STATES.shipped]: t('nextcloud-vue', 'Shipped, unchanged'),\n\t\t\t\t[SHIPPED_STATES.changed]: t('nextcloud-vue', 'Shipped, changed here'),\n\t\t\t\t[SHIPPED_STATES.removed]: t('nextcloud-vue', 'Shipped, removed here'),\n\t\t\t}[state] || t('nextcloud-vue', 'Yours')\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {boolean} Whether a newer shipped version can be taken.\n\t\t */\n\t\tupdatable(row) {\n\t\t\treturn Boolean(row && row.updateAvailable && row.state !== SHIPPED_STATES.removed)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {boolean} Whether taking the newer version overwrites a local change.\n\t\t */\n\t\tlosesLocalChange(row) {\n\t\t\treturn Boolean(row && row.state === SHIPPED_STATES.changed)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} row A ledger row.\n\t\t * @return {string} The button's words, which say when a local change goes.\n\t\t */\n\t\tadoptLabel(row) {\n\t\t\treturn this.losesLocalChange(row)\n\t\t\t\t? t('nextcloud-vue', 'Take {version} and lose your change', { version: row.latestVersion })\n\t\t\t\t: t('nextcloud-vue', 'Take {version}', { version: row.latestVersion })\n\t\t},\n\n\t\t/**\n\t\t * Take the newer shipped version of one object, then read the ledger again.\n\t\t *\n\t\t * @param {object} row A ledger row.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync adopt(row) {\n\t\t\tthis.adopting = row.targetObject\n\t\t\tthis.adoptError = ''\n\t\t\ttry {\n\t\t\t\tawait axios.post(\n\t\t\t\t\tgenerateUrl(`${this.endpoint}/${encodeURIComponent(this.schema)}/${encodeURIComponent(row.targetObject)}/adopt`),\n\t\t\t\t\t{ set: row.set, acceptLocalChangeLoss: this.losesLocalChange(row) },\n\t\t\t\t)\n\t\t\t\tshowSuccess(t('nextcloud-vue', 'The newer version was taken.'))\n\t\t\t\tawait this.reload()\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error && error.response && error.response.data\n\t\t\t\tthis.adoptError = String((data && (data.reason || data.message)) || t('nextcloud-vue', 'The newer version was not taken.'))\n\t\t\t} finally {\n\t\t\t\tthis.adopting = ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-shipped-configuration__intro,\n.cn-shipped-configuration__muted {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-shipped-configuration__picker {\n\tmax-width: 320px;\n}\n\n.cn-shipped-configuration__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tmargin-top: 12px;\n\t/* Nextcloud sets `table { white-space: nowrap }`; a cell here can be a sentence. */\n\twhite-space: normal;\n}\n\n.cn-shipped-configuration__table th,\n.cn-shipped-configuration__table td {\n\tpadding: 6px 8px;\n\tborder-bottom: 1px solid var(--color-border);\n\ttext-align: start;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_toDisplayString","_createBlock","_createElementVNode","_Fragment","_renderList","_createTextVNode"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import __sfc_main$
|
|
1
|
+
import __sfc_main$m from '../CnAiCompanion/CnAiChatWidget.vue.js';
|
|
2
2
|
import __sfc_main from '../CnChartWidget/CnChartWidget.vue.js';
|
|
3
3
|
import __sfc_main$1 from '../CnChartWidgetForm/CnChartWidgetForm.vue.js';
|
|
4
|
-
import __sfc_main$
|
|
4
|
+
import __sfc_main$p from '../CnConversationThread/CnConversationWidget.vue.js';
|
|
5
5
|
import __sfc_main$e from '../CnCountdownWidget/CnCountdownWidget.vue.js';
|
|
6
6
|
import __sfc_main$f from '../CnCountdownWidgetForm/CnCountdownWidgetForm.vue.js';
|
|
7
|
-
import __sfc_main$
|
|
8
|
-
import __sfc_main$
|
|
9
|
-
import __sfc_main$
|
|
7
|
+
import __sfc_main$l from '../CnDocumentReviewList/CnDocumentReviewWidget.vue.js';
|
|
8
|
+
import __sfc_main$o from '../CnEventsCard/CnEventsCard.vue.js';
|
|
9
|
+
import __sfc_main$n from '../CnMacrosWidget/CnMacrosWidget.vue.js';
|
|
10
10
|
import __sfc_main$c from '../CnMapWidget/CnMapWidget.vue.js';
|
|
11
11
|
import __sfc_main$d from '../CnMapWidgetForm/CnMapWidgetForm.vue.js';
|
|
12
12
|
import __sfc_main$8 from '../CnMarkdownWidget/CnMarkdownWidget.vue.js';
|
|
@@ -14,24 +14,25 @@ import __sfc_main$9 from '../CnMarkdownWidgetForm/CnMarkdownWidgetForm.vue.js';
|
|
|
14
14
|
import __sfc_main$g from '../CnNextStepCard/CnNextStepWidget.vue.js';
|
|
15
15
|
import __sfc_main$4 from '../CnObjectListWidget/CnObjectListWidget.vue.js';
|
|
16
16
|
import __sfc_main$5 from '../CnObjectListWidgetForm/CnObjectListWidgetForm.vue.js';
|
|
17
|
-
import __sfc_main$
|
|
17
|
+
import __sfc_main$j from '../CnPlanWidget/CnPlanWidget.vue.js';
|
|
18
18
|
import __sfc_main$a from '../CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue.js';
|
|
19
19
|
import __sfc_main$b from '../CnRelatedObjectsWidgetForm/CnRelatedObjectsWidgetForm.vue.js';
|
|
20
20
|
import __sfc_main$h from '../CnRetentionWidget/CnRetentionWidget.vue.js';
|
|
21
21
|
import __sfc_main$6 from '../CnSavedViewWidget/CnSavedViewWidget.vue.js';
|
|
22
22
|
import __sfc_main$7 from '../CnSavedViewWidgetForm/CnSavedViewWidgetForm.vue.js';
|
|
23
|
-
import __sfc_main$
|
|
24
|
-
import __sfc_main$w from '../
|
|
25
|
-
import __sfc_main$
|
|
26
|
-
import __sfc_main$q from '../
|
|
23
|
+
import __sfc_main$i from '../CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js';
|
|
24
|
+
import __sfc_main$w from '../CnStackedBarWidget/CnStackedBarWidget.vue.js';
|
|
25
|
+
import __sfc_main$x from '../CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue.js';
|
|
26
|
+
import __sfc_main$q from '../CnStagesWidget/CnStagesWidget.vue.js';
|
|
27
|
+
import __sfc_main$r from '../CnStagesWidgetForm/CnStagesWidgetForm.vue.js';
|
|
27
28
|
import __sfc_main$2 from '../CnStatsBlockWidget/CnStatsBlockWidget.vue.js';
|
|
28
29
|
import __sfc_main$3 from '../CnStatsBlockWidgetForm/CnStatsBlockWidgetForm.vue.js';
|
|
29
|
-
import __sfc_main$
|
|
30
|
-
import __sfc_main$
|
|
31
|
-
import __sfc_main$
|
|
32
|
-
import __sfc_main$
|
|
33
|
-
import __sfc_main$
|
|
34
|
-
import __sfc_main$
|
|
30
|
+
import __sfc_main$s from '../CnTabsWidget/CnTabsWidget.vue.js';
|
|
31
|
+
import __sfc_main$t from '../CnTabsWidgetForm/CnTabsWidgetForm.vue.js';
|
|
32
|
+
import __sfc_main$y from '../CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue.js';
|
|
33
|
+
import __sfc_main$u from '../CnWeekStripWidget/CnWeekStripWidget.vue.js';
|
|
34
|
+
import __sfc_main$v from '../CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue.js';
|
|
35
|
+
import __sfc_main$k from '../CnWorkQueue/CnWorkQueue.vue.js';
|
|
35
36
|
import { registerDashboardWidget } from './dashboardWidgetRegistry.js';
|
|
36
37
|
import '../CnLabelWidget/index.js';
|
|
37
38
|
import '../CnTextWidget/index.js';
|
|
@@ -304,9 +305,18 @@ registerDashboardWidget('retention', {
|
|
|
304
305
|
ownsTitle: true,
|
|
305
306
|
});
|
|
306
307
|
|
|
307
|
-
registerDashboardWidget('
|
|
308
|
+
registerDashboardWidget('schema-rules', {
|
|
308
309
|
renderer: __sfc_main$i,
|
|
309
310
|
form: null,
|
|
311
|
+
defaultContent: { register: '', schema: '', objectId: '' },
|
|
312
|
+
displayName: 'Schema rules',
|
|
313
|
+
icon: 'ScaleBalance',
|
|
314
|
+
surfaces: ['detail-page'],
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
registerDashboardWidget('plan', {
|
|
318
|
+
renderer: __sfc_main$j,
|
|
319
|
+
form: null,
|
|
310
320
|
defaultContent: { emptyText: '' },
|
|
311
321
|
displayName: 'Plan',
|
|
312
322
|
icon: 'FormatListChecks',
|
|
@@ -315,7 +325,7 @@ registerDashboardWidget('plan', {
|
|
|
315
325
|
});
|
|
316
326
|
|
|
317
327
|
registerDashboardWidget('work-queue', {
|
|
318
|
-
renderer: __sfc_main$
|
|
328
|
+
renderer: __sfc_main$k,
|
|
319
329
|
form: null,
|
|
320
330
|
defaultContent: { source: null },
|
|
321
331
|
displayName: 'Work queue',
|
|
@@ -323,7 +333,7 @@ registerDashboardWidget('work-queue', {
|
|
|
323
333
|
});
|
|
324
334
|
|
|
325
335
|
registerDashboardWidget('document-review', {
|
|
326
|
-
renderer: __sfc_main$
|
|
336
|
+
renderer: __sfc_main$l,
|
|
327
337
|
form: null,
|
|
328
338
|
defaultContent: { field: 'documents', statusField: 'reviewStatus', statuses: [] },
|
|
329
339
|
displayName: 'Document review',
|
|
@@ -335,7 +345,7 @@ registerDashboardWidget('document-review', {
|
|
|
335
345
|
// The AI Chat Companion embedded in the page: the assistant as a tab or card
|
|
336
346
|
// rather than the launcher's floating window (DqZaakAssistent).
|
|
337
347
|
registerDashboardWidget('ai-chat', {
|
|
338
|
-
renderer: __sfc_main$
|
|
348
|
+
renderer: __sfc_main$m,
|
|
339
349
|
form: null,
|
|
340
350
|
defaultContent: { chatAppId: '' },
|
|
341
351
|
displayName: 'Assistant',
|
|
@@ -347,7 +357,7 @@ registerDashboardWidget('ai-chat', {
|
|
|
347
357
|
// The macros the record's schema declares, each run by a button
|
|
348
358
|
// (DqZaakAssistent "Macro's").
|
|
349
359
|
registerDashboardWidget('macros', {
|
|
350
|
-
renderer: __sfc_main$
|
|
360
|
+
renderer: __sfc_main$n,
|
|
351
361
|
form: null,
|
|
352
362
|
defaultContent: { description: '', emptyText: '' },
|
|
353
363
|
displayName: 'Macros',
|
|
@@ -358,7 +368,7 @@ registerDashboardWidget('macros', {
|
|
|
358
368
|
// The appointments booked on a record that is not an object (a flow task),
|
|
359
369
|
// read from a source or an endpoint.
|
|
360
370
|
registerDashboardWidget('events', {
|
|
361
|
-
renderer: __sfc_main$
|
|
371
|
+
renderer: __sfc_main$o,
|
|
362
372
|
form: null,
|
|
363
373
|
defaultContent: { source: null, endpoint: '', emptyText: '' },
|
|
364
374
|
displayName: 'Appointments',
|
|
@@ -367,7 +377,7 @@ registerDashboardWidget('events', {
|
|
|
367
377
|
});
|
|
368
378
|
|
|
369
379
|
registerDashboardWidget('conversation', {
|
|
370
|
-
renderer: __sfc_main$
|
|
380
|
+
renderer: __sfc_main$p,
|
|
371
381
|
form: null,
|
|
372
382
|
defaultContent: { field: 'messages', endpoint: '' },
|
|
373
383
|
displayName: 'Conversation',
|
|
@@ -379,8 +389,8 @@ registerDashboardWidget('conversation', {
|
|
|
379
389
|
// The record's stages, where clicking a stage moves the record there.
|
|
380
390
|
// Registered inline for the same tree-shaking reason as `map` above.
|
|
381
391
|
registerDashboardWidget('stages', {
|
|
382
|
-
renderer: __sfc_main$
|
|
383
|
-
form: __sfc_main$
|
|
392
|
+
renderer: __sfc_main$q,
|
|
393
|
+
form: __sfc_main$r,
|
|
384
394
|
defaultContent: {
|
|
385
395
|
currentField: 'status',
|
|
386
396
|
orientation: 'horizontal',
|
|
@@ -400,8 +410,8 @@ registerDashboardWidget('stages', {
|
|
|
400
410
|
});
|
|
401
411
|
|
|
402
412
|
registerDashboardWidget('tabs', {
|
|
403
|
-
renderer: __sfc_main$
|
|
404
|
-
form: __sfc_main$
|
|
413
|
+
renderer: __sfc_main$s,
|
|
414
|
+
form: __sfc_main$t,
|
|
405
415
|
defaultContent: {
|
|
406
416
|
tabs: [],
|
|
407
417
|
ariaLabel: '',
|
|
@@ -420,8 +430,8 @@ registerDashboardWidget('tabs', {
|
|
|
420
430
|
// The current week as day columns, with the dated items under each day.
|
|
421
431
|
// Registered inline for the same tree-shaking reason as `map` above.
|
|
422
432
|
registerDashboardWidget('week-strip', {
|
|
423
|
-
renderer: __sfc_main$
|
|
424
|
-
form: __sfc_main$
|
|
433
|
+
renderer: __sfc_main$u,
|
|
434
|
+
form: __sfc_main$v,
|
|
425
435
|
defaultContent: {
|
|
426
436
|
source: { register: '', schema: '', filter: {} },
|
|
427
437
|
dateField: '',
|
|
@@ -437,8 +447,8 @@ registerDashboardWidget('week-strip', {
|
|
|
437
447
|
|
|
438
448
|
// One segmented bar with a legend that carries the numbers.
|
|
439
449
|
registerDashboardWidget('stacked-bar', {
|
|
440
|
-
renderer: __sfc_main$
|
|
441
|
-
form: __sfc_main$
|
|
450
|
+
renderer: __sfc_main$w,
|
|
451
|
+
form: __sfc_main$x,
|
|
442
452
|
defaultContent: {
|
|
443
453
|
source: { register: '', schema: '', groupBy: '', filter: {} },
|
|
444
454
|
order: [],
|
|
@@ -453,7 +463,7 @@ registerDashboardWidget('stacked-bar', {
|
|
|
453
463
|
// person's open count from the app (DqTeamwachtrij "Team vandaag"). Placed
|
|
454
464
|
// from the manifest: there is no config form yet.
|
|
455
465
|
registerDashboardWidget('team-workload', {
|
|
456
|
-
renderer: __sfc_main$
|
|
466
|
+
renderer: __sfc_main$y,
|
|
457
467
|
form: null,
|
|
458
468
|
defaultContent: { source: { url: '', responsePath: '', userField: 'userId', nameField: 'displayName', countField: 'count' } },
|
|
459
469
|
displayName: 'Team workload',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerDashboardWidgets.js","sources":["../../../../src/components/CnWidgetGrid/registerDashboardWidgets.js"],"sourcesContent":["/**\n * Side-effect aggregator for the cn-widget-library dashboard widget catalog.\n *\n * Importing this module imports every migrated widget's `index.js`, each of\n * which self-registers its `{ renderer, form, defaultContent, displayName,\n * icon }` into `dashboardWidgetRegistry` at load time. The library barrel\n * imports this module so the catalog is populated whenever a consuming app\n * imports `@conduction/nextcloud-vue`; `CnWidgetGrid` then resolves widgets by\n * type key and `CnAddWidgetModal` lists the addable types.\n *\n * The individual widget components are intentionally NOT public exports — they\n * are resolved by their registry type key (the whole point of the registry),\n * so consumers reference them via the manifest `widgetKey`, not by import.\n *\n * @module components/CnWidgetGrid/registerDashboardWidgets\n */\n\nimport CnAiChatWidget from '../CnAiCompanion/CnAiChatWidget.vue'\nimport CnChartWidget from '../CnChartWidget/CnChartWidget.vue'\nimport CnChartWidgetForm from '../CnChartWidgetForm/CnChartWidgetForm.vue'\nimport CnConversationWidget from '../CnConversationThread/CnConversationWidget.vue'\nimport CnCountdownWidget from '../CnCountdownWidget/CnCountdownWidget.vue'\nimport CnCountdownWidgetForm from '../CnCountdownWidgetForm/CnCountdownWidgetForm.vue'\nimport CnDocumentReviewWidget from '../CnDocumentReviewList/CnDocumentReviewWidget.vue'\nimport CnEventsCard from '../CnEventsCard/CnEventsCard.vue'\nimport CnMacrosWidget from '../CnMacrosWidget/CnMacrosWidget.vue'\nimport CnMapWidget from '../CnMapWidget/CnMapWidget.vue'\nimport CnMapWidgetForm from '../CnMapWidgetForm/CnMapWidgetForm.vue'\nimport CnMarkdownWidget2 from '../CnMarkdownWidget/CnMarkdownWidget.vue'\nimport CnMarkdownWidgetForm2 from '../CnMarkdownWidgetForm/CnMarkdownWidgetForm.vue'\nimport CnNextStepWidget from '../CnNextStepCard/CnNextStepWidget.vue'\nimport CnObjectListWidget2 from '../CnObjectListWidget/CnObjectListWidget.vue'\nimport CnObjectListWidgetForm2 from '../CnObjectListWidgetForm/CnObjectListWidgetForm.vue'\nimport CnPlanWidget from '../CnPlanWidget/CnPlanWidget.vue'\nimport CnRelatedObjectsWidget from '../CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue'\nimport CnRelatedObjectsWidgetForm from '../CnRelatedObjectsWidgetForm/CnRelatedObjectsWidgetForm.vue'\nimport CnRetentionWidget from '../CnRetentionWidget/CnRetentionWidget.vue'\nimport CnSavedViewWidget2 from '../CnSavedViewWidget/CnSavedViewWidget.vue'\nimport CnSavedViewWidgetForm2 from '../CnSavedViewWidgetForm/CnSavedViewWidgetForm.vue'\nimport CnStackedBarWidget from '../CnStackedBarWidget/CnStackedBarWidget.vue'\nimport CnStackedBarWidgetForm from '../CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue'\nimport CnStagesWidget from '../CnStagesWidget/CnStagesWidget.vue'\nimport CnStagesWidgetForm from '../CnStagesWidgetForm/CnStagesWidgetForm.vue'\nimport CnStatsBlockWidget from '../CnStatsBlockWidget/CnStatsBlockWidget.vue'\nimport CnStatsBlockWidgetForm from '../CnStatsBlockWidgetForm/CnStatsBlockWidgetForm.vue'\nimport CnTabsWidget from '../CnTabsWidget/CnTabsWidget.vue'\nimport CnTabsWidgetForm from '../CnTabsWidgetForm/CnTabsWidgetForm.vue'\nimport CnTeamWorkloadWidget from '../CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue'\nimport CnWeekStripWidget from '../CnWeekStripWidget/CnWeekStripWidget.vue'\nimport CnWeekStripWidgetForm from '../CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue'\nimport CnWorkQueue from '../CnWorkQueue/CnWorkQueue.vue'\n// Typed widgets registered with an explicit renderer + config FORM. chart /\n// stats-block render through CnDashboardPage's own isChart()/isStatsBlock()\n// branches and `related` through CnDetailPage's isRelatedWidget() branch — the\n// registry entry exists so the cog editor + Add-widget picker get a form (and,\n// for `related`, the detail-page surface). `table` aliases the object-list\n// renderer/form for legacy manifests using type:'table'.\nimport { registerDashboardWidget } from './dashboardWidgetRegistry.js'\n\nimport '../CnLabelWidget/index.js'\nimport '../CnTextWidget/index.js'\nimport '../CnImageWidget/index.js'\nimport '../CnLinkButtonWidget/index.js'\nimport '../CnDividerWidget/index.js'\nimport '../CnHeaderWidget/index.js'\nimport '../CnQuicklinksWidget/index.js'\nimport '../CnVideoWidget/index.js'\nimport '../CnDashTileWidget/index.js'\nimport '../CnLinksWidget/index.js'\nimport '../CnMenuWidget/index.js'\nimport '../CnContainerWidget/index.js'\nimport '../CnFilesWidget/index.js'\nimport '../CnPeopleWidget/index.js'\nimport '../CnCalendarWidget/index.js'\nimport '../CnNcWidgetWidget/index.js'\nimport '../CnSpendAnalyticsWidget/index.js'\nimport '../CnStatWidget/index.js'\nimport '../CnDeltaWidget/index.js'\nimport '../CnGaugeWidget/index.js'\nimport '../CnFlowRunsWidget/index.js'\nimport '../CnTasksWidget/index.js'\nimport '../CnSectionsWidget/index.js'\nimport '../CnFactsWidget/index.js'\nimport '../CnLinkedWidget/index.js'\nimport '../CnDeviceFramesWidget/index.js'\nimport '../CnGroupedCardsWidget/index.js'\nimport '../CnChecklistRunWidget/index.js'\nimport '../CnChecklistWidget/index.js'\nimport '../CnMailTab/index.js'\nimport '../CnWorkingCalendarWidget/index.js'\nimport '../CnPartyActionsWidget/index.js'\nimport '../CnFieldListWidget/index.js'\nimport '../CnSettingsFormWidget/index.js'\nimport '../CnSwitchRowsWidget/index.js'\nimport '../CnRadioCardsWidget/index.js'\nimport '../CnChipsFieldWidget/index.js'\nimport '../CnToggleTableWidget/index.js'\nimport '../CnChoicePickerWidget/index.js'\nimport '../CnRecordListWidget/index.js'\nimport '../CnSavedViewsWidget/index.js'\nimport '../CnNotepadWidget/index.js'\nimport '../CnObjectDataWidget/dashboardRegistration.js'\nimport '../CnObjectGeoWidget/dashboardRegistration.js'\nimport '../CnWidgetObjectTable/dashboardRegistration.js'\nimport '../CnAuditTrailWidget/dashboardRegistration.js'\nimport '../CnTimelineWidget/dashboardRegistration.js'\nimport '../CnKbSearchWidget/index.js'\nimport '../CnInteractionFormWidget/index.js'\nimport '../CnBannerWidget/index.js'\nimport '../CnAttentionFlagWidget/index.js'\nimport '../CnStatusExplainerWidget/index.js'\nimport '../CnObjectPartiesWidget/index.js'\nimport '../CnWorkspaceFilterWidget/index.js'\n\nregisterDashboardWidget('chart', {\n\trenderer: CnChartWidget,\n\tform: CnChartWidgetForm,\n\tdefaultContent: {\n\t\tchartKind: 'area',\n\t\tdataSource: { register: '', schema: '', filter: {}, bucket: { field: '', interval: 'month', metric: 'count', metricField: '' } },\n\t},\n\tdisplayName: 'Chart',\n\ticon: 'ChartLine',\n})\n\nregisterDashboardWidget('stats-block', {\n\trenderer: CnStatsBlockWidget,\n\tform: CnStatsBlockWidgetForm,\n\tdefaultContent: {\n\t\ttitle: '',\n\t\tprops: { countLabel: '', variant: 'default', iconClass: '' },\n\t\tdataSource: { register: '', schema: '', metric: 'count', field: '', filter: {} },\n\t},\n\tdisplayName: 'Statistic card',\n\ticon: 'ChartBar',\n\t// Card family (docs/architecture/cards-and-widgets.md), like `stat` and\n\t// `delta`: the tile headlines itself with its own title, so the wrapper\n\t// renders no header of its own and would otherwise show the title twice.\n\tcard: true,\n})\n\n// `table` and `object-list` (below) are legacy aliases of `object-table` — same\n// config form (CnObjectListWidgetForm), same job. They stay registered so\n// existing placements keep rendering, but are hidden from every Add-widget\n// picker via a sentinel surface no picker queries (see widgetTypeAllowsSurface):\n// `object-table` is the one to add now. Rendering resolves through\n// getWidgetTypeEntry, which ignores `surfaces`, so hidden ≠ broken.\nregisterDashboardWidget('table', {\n\trenderer: CnObjectListWidget2,\n\tform: CnObjectListWidgetForm2,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\tfilter: {},\n\t\tsort: { field: '', dir: 'asc' },\n\t\tlimit: 10,\n\t\tcolumns: [],\n\t},\n\tdisplayName: 'Table',\n\ticon: 'ClipboardList',\n\tsurfaces: ['legacy'],\n})\n\n// `object-list` is registered HERE and only here. Registering it from\n// CnObjectListWidget/index.js instead is not enough: package.json declares\n// `sideEffects: [\"**/*.css\"]` (ADR-061 tree-shaking), which lets\n// rollup/webpack legally DROP bare imports of side-effect-free JS modules —\n// the dist bundle shipped without the object-list registration and every\n// manifest `type:\"object-list\"` widget rendered blank. Inline calls in this\n// module survive because consumers import live bindings from the registry.\n//\n// That index.js ALSO self-registered, with a divergent entry (limit 5, no\n// `surfaces`), so both ran in a consumer's build — components/index.js\n// re-exports it, so it was never tree-shaken — and last-registration-wins\n// decided whether this legacy alias stayed hidden from the Add-widget picker.\n// The self-registration is gone; this entry is the one that already won.\nregisterDashboardWidget('object-list', {\n\trenderer: CnObjectListWidget2,\n\tform: CnObjectListWidgetForm2,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\tfilter: {},\n\t\tsort: { field: '', dir: 'asc' },\n\t\tlimit: 25,\n\t\tcolumns: [],\n\t},\n\tdisplayName: 'Object list',\n\ticon: 'ClipboardList',\n\tsurfaces: ['legacy'],\n})\n\n// `saved-view`: a list driven by one of the reader's saved views. The only data\n// widget a user may add themselves, because the view carries the register and\n// schema a user would otherwise have to name. Registered inline for the same\n// tree-shaking reason as `object-list` above.\n// @spec openspec/changes/a-saved-view-drives-a-widget/tasks.md#task-1.1\nregisterDashboardWidget('saved-view', {\n\trenderer: CnSavedViewWidget2,\n\tform: CnSavedViewWidgetForm2,\n\tdefaultContent: { viewId: '', limit: 10 },\n\tdisplayName: 'Saved view',\n\ticon: 'ClipboardList',\n\tuserAddable: true,\n})\n\n// `markdown`: prose inside a grid page, through the one shared renderer. The\n// only catalog widget a PUBLIC host may mount so far: every other entry is\n// `public: false` until its author opts in deliberately.\n// @spec openspec/changes/widget-registry-public-flag/tasks.md#task-4\nregisterDashboardWidget('markdown', {\n\trenderer: CnMarkdownWidget2,\n\tform: CnMarkdownWidgetForm2,\n\tdefaultContent: { markdown: '' },\n\tdisplayName: 'Markdown',\n\ticon: 'FormatTitle',\n\tpublic: true,\n})\n\nregisterDashboardWidget('related', {\n\trenderer: CnRelatedObjectsWidget,\n\tform: CnRelatedObjectsWidgetForm,\n\tdefaultContent: { title: '', groups: [], hideSingleTabTitle: true, showTotalCount: true },\n\tdisplayName: 'Object relations',\n\ticon: 'FileTreeOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// `map` is registered here for the same tree-shaking reason as `object-list`\n// above — a bare `import '../CnMapWidget/index.js'` is a side-effect-free JS module\n// as far as the bundler is concerned, so it may legally be dropped and the widget\n// would silently never appear in Add Widget. CnMapWidget/index.js carried a\n// byte-identical copy of this entry, which only produced a duplicate-registration\n// warning on every consumer's boot; it no longer registers.\nregisterDashboardWidget('map', {\n\trenderer: CnMapWidget,\n\tform: CnMapWidgetForm,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\t// The Netherlands, roughly — only visible until autoFit frames the objects.\n\t\tcenter: [52.13, 5.29],\n\t\tzoom: 7,\n\t\theight: '400px',\n\t\tpopupField: '',\n\t\tclustering: false,\n\t\tautoFit: true,\n\t\t// A map with no tile layer renders as a grey box. `basemaps` is opt-in and\n\t\t// empty by default (so consumers declaring a `tile` entry in `layers` are\n\t\t// unaffected), which meant a freshly-placed Map widget had NO background at\n\t\t// all. Ship OpenStreetMap — the Nextcloud CSP already allows *.tile.openstreetmap.org.\n\t\tbasemaps: [\n\t\t\t{\n\t\t\t\tname: 'OpenStreetMap',\n\t\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t\tattribution: '© OpenStreetMap contributors',\n\t\t\t\toptions: { maxZoom: 19 },\n\t\t\t},\n\t\t],\n\t\tmarkers: {\n\t\t\tdataSource: { register: '', schema: '' },\n\t\t\tpopupField: '',\n\t\t\tclustering: false,\n\t\t},\n\t},\n\tdisplayName: 'Map',\n\ticon: 'Map',\n})\n\nregisterDashboardWidget('countdown', {\n\trenderer: CnCountdownWidget,\n\tform: CnCountdownWidgetForm,\n\tdefaultContent: {\n\t\tlabel: '',\n\t\tfield: '',\n\t\ticon: 'ClockOutline',\n\t\tthresholds: {},\n\t\tshowDate: true,\n\t},\n\tdisplayName: 'Countdown',\n\ticon: 'ClockOutline',\n\t// Card family: the tile headlines itself, so the wrapper draws no header.\n\tcard: true,\n\t// It reads a date off the BOUND RECORD, which only a detail page has.\n\tsurfaces: ['detail-page'],\n})\n\n// The case surfaces (detail-action-model-and-case-surfaces). Each reads the\n// BOUND RECORD, which only a detail page has, and none has a config form yet,\n// so `form: null` keeps them out of the Add-widget picker: they are placed\n// from the manifest. Registered inline for the same tree-shaking reason as\n// `map` above.\nregisterDashboardWidget('next-step', {\n\trenderer: CnNextStepWidget,\n\tform: null,\n\tdefaultContent: { field: 'status', stages: {} },\n\tdisplayName: 'Next step',\n\ticon: 'CheckCircleOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('retention', {\n\trenderer: CnRetentionWidget,\n\tform: null,\n\tdefaultContent: { statusField: '', archivedValues: [], archivistGroups: ['archivaris'] },\n\tdisplayName: 'Retention',\n\ticon: 'ArchiveOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('plan', {\n\trenderer: CnPlanWidget,\n\tform: null,\n\tdefaultContent: { emptyText: '' },\n\tdisplayName: 'Plan',\n\ticon: 'FormatListChecks',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('work-queue', {\n\trenderer: CnWorkQueue,\n\tform: null,\n\tdefaultContent: { source: null },\n\tdisplayName: 'Work queue',\n\ticon: 'TrayFull',\n})\n\nregisterDashboardWidget('document-review', {\n\trenderer: CnDocumentReviewWidget,\n\tform: null,\n\tdefaultContent: { field: 'documents', statusField: 'reviewStatus', statuses: [] },\n\tdisplayName: 'Document review',\n\ticon: 'FileDocumentCheckOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The AI Chat Companion embedded in the page: the assistant as a tab or card\n// rather than the launcher's floating window (DqZaakAssistent).\nregisterDashboardWidget('ai-chat', {\n\trenderer: CnAiChatWidget,\n\tform: null,\n\tdefaultContent: { chatAppId: '' },\n\tdisplayName: 'Assistant',\n\ticon: 'Creation',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The macros the record's schema declares, each run by a button\n// (DqZaakAssistent \"Macro's\").\nregisterDashboardWidget('macros', {\n\trenderer: CnMacrosWidget,\n\tform: null,\n\tdefaultContent: { description: '', emptyText: '' },\n\tdisplayName: 'Macros',\n\ticon: 'PlayBoxMultipleOutline',\n\tsurfaces: ['detail-page'],\n})\n\n// The appointments booked on a record that is not an object (a flow task),\n// read from a source or an endpoint.\nregisterDashboardWidget('events', {\n\trenderer: CnEventsCard,\n\tform: null,\n\tdefaultContent: { source: null, endpoint: '', emptyText: '' },\n\tdisplayName: 'Appointments',\n\ticon: 'CalendarClock',\n\tsurfaces: ['detail-page'],\n})\n\nregisterDashboardWidget('conversation', {\n\trenderer: CnConversationWidget,\n\tform: null,\n\tdefaultContent: { field: 'messages', endpoint: '' },\n\tdisplayName: 'Conversation',\n\ticon: 'ForumOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The record's stages, where clicking a stage moves the record there.\n// Registered inline for the same tree-shaking reason as `map` above.\nregisterDashboardWidget('stages', {\n\trenderer: CnStagesWidget,\n\tform: CnStagesWidgetForm,\n\tdefaultContent: {\n\t\tcurrentField: 'status',\n\t\torientation: 'horizontal',\n\t\tsize: 'medium',\n\t\tstagesEndpoint: { url: '', path: '' },\n\t\t// The LIFECYCLE, not a record write. OpenRegister decides what is\n\t\t// reachable and re-validates the move; a field write has neither.\n\t\ttransition: { kind: 'lifecycle' },\n\t},\n\tdisplayName: 'Stages',\n\ticon: 'Timeline',\n\t// Card family on the detail grid: a titled wrapper around a self-contained\n\t// strip, like the KPI tiles it usually sits beside.\n\tcard: true,\n\t// It reads and moves the BOUND RECORD, which only a detail page has.\n\tsurfaces: ['detail-page'],\n})\n\nregisterDashboardWidget('tabs', {\n\trenderer: CnTabsWidget,\n\tform: CnTabsWidgetForm,\n\tdefaultContent: {\n\t\ttabs: [],\n\t\tariaLabel: '',\n\t},\n\tdisplayName: 'Tabs',\n\ticon: 'TabPlus',\n\t// Renders OTHER widgets, so CnDetailWidgetHost hands it the surface's\n\t// sibling definitions and the context its children will need.\n\tcontainer: true,\n\t// The strip's labels ARE the titles, so a card header above them would name\n\t// the group twice.\n\townsTitle: true,\n\tsurfaces: ['detail-page'],\n})\n\n// The current week as day columns, with the dated items under each day.\n// Registered inline for the same tree-shaking reason as `map` above.\nregisterDashboardWidget('week-strip', {\n\trenderer: CnWeekStripWidget,\n\tform: CnWeekStripWidgetForm,\n\tdefaultContent: {\n\t\tsource: { register: '', schema: '', filter: {} },\n\t\tdateField: '',\n\t\ttitleField: '',\n\t\tmetaFields: [],\n\t\tdays: 5,\n\t\titemRoute: '',\n\t\temptyText: '',\n\t},\n\tdisplayName: 'Week strip',\n\ticon: 'Calendar',\n})\n\n// One segmented bar with a legend that carries the numbers.\nregisterDashboardWidget('stacked-bar', {\n\trenderer: CnStackedBarWidget,\n\tform: CnStackedBarWidgetForm,\n\tdefaultContent: {\n\t\tsource: { register: '', schema: '', groupBy: '', filter: {} },\n\t\torder: [],\n\t\tlabels: {},\n\t\temptyText: '',\n\t},\n\tdisplayName: 'Stacked bar',\n\ticon: 'ChartBar',\n})\n\n// The team today: availability from the Nextcloud user status and each\n// person's open count from the app (DqTeamwachtrij \"Team vandaag\"). Placed\n// from the manifest: there is no config form yet.\nregisterDashboardWidget('team-workload', {\n\trenderer: CnTeamWorkloadWidget,\n\tform: null,\n\tdefaultContent: { source: { url: '', responsePath: '', userField: 'userId', nameField: 'displayName', countField: 'count' } },\n\tdisplayName: 'Team workload',\n\ticon: 'AccountGroup',\n})\n\n/**\n * Explicit no-op that guarantees this module (and therefore every widget's\n * self-registration side effect) is evaluated. Now optional: `CnDashboardPage`\n * and `CnDetailPage` import this module themselves, and a second call changes\n * nothing because the module body runs once.\n *\n * @return {void}\n */\nexport function registerBuiltinDashboardWidgets() {}\n"],"names":["CnChartWidget","CnChartWidgetForm","CnStatsBlockWidget","CnStatsBlockWidgetForm","CnObjectListWidget2","CnObjectListWidgetForm2","CnSavedViewWidget2","CnSavedViewWidgetForm2","CnMarkdownWidget2","CnMarkdownWidgetForm2","CnRelatedObjectsWidget","CnRelatedObjectsWidgetForm","CnMapWidget","CnMapWidgetForm","CnCountdownWidget","CnCountdownWidgetForm","CnNextStepWidget","CnRetentionWidget","CnPlanWidget","CnWorkQueue","CnDocumentReviewWidget","CnAiChatWidget","CnMacrosWidget","CnEventsCard","CnConversationWidget","CnStagesWidget","CnStagesWidgetForm","CnTabsWidget","CnTabsWidgetForm","CnWeekStripWidget","CnWeekStripWidgetForm","CnStackedBarWidget","CnStackedBarWidgetForm","CnTeamWorkloadWidget"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerDashboardWidgets.js","sources":["../../../../src/components/CnWidgetGrid/registerDashboardWidgets.js"],"sourcesContent":["/**\n * Side-effect aggregator for the cn-widget-library dashboard widget catalog.\n *\n * Importing this module imports every migrated widget's `index.js`, each of\n * which self-registers its `{ renderer, form, defaultContent, displayName,\n * icon }` into `dashboardWidgetRegistry` at load time. The library barrel\n * imports this module so the catalog is populated whenever a consuming app\n * imports `@conduction/nextcloud-vue`; `CnWidgetGrid` then resolves widgets by\n * type key and `CnAddWidgetModal` lists the addable types.\n *\n * The individual widget components are intentionally NOT public exports — they\n * are resolved by their registry type key (the whole point of the registry),\n * so consumers reference them via the manifest `widgetKey`, not by import.\n *\n * @module components/CnWidgetGrid/registerDashboardWidgets\n */\n\nimport CnAiChatWidget from '../CnAiCompanion/CnAiChatWidget.vue'\nimport CnChartWidget from '../CnChartWidget/CnChartWidget.vue'\nimport CnChartWidgetForm from '../CnChartWidgetForm/CnChartWidgetForm.vue'\nimport CnConversationWidget from '../CnConversationThread/CnConversationWidget.vue'\nimport CnCountdownWidget from '../CnCountdownWidget/CnCountdownWidget.vue'\nimport CnCountdownWidgetForm from '../CnCountdownWidgetForm/CnCountdownWidgetForm.vue'\nimport CnDocumentReviewWidget from '../CnDocumentReviewList/CnDocumentReviewWidget.vue'\nimport CnEventsCard from '../CnEventsCard/CnEventsCard.vue'\nimport CnMacrosWidget from '../CnMacrosWidget/CnMacrosWidget.vue'\nimport CnMapWidget from '../CnMapWidget/CnMapWidget.vue'\nimport CnMapWidgetForm from '../CnMapWidgetForm/CnMapWidgetForm.vue'\nimport CnMarkdownWidget2 from '../CnMarkdownWidget/CnMarkdownWidget.vue'\nimport CnMarkdownWidgetForm2 from '../CnMarkdownWidgetForm/CnMarkdownWidgetForm.vue'\nimport CnNextStepWidget from '../CnNextStepCard/CnNextStepWidget.vue'\nimport CnObjectListWidget2 from '../CnObjectListWidget/CnObjectListWidget.vue'\nimport CnObjectListWidgetForm2 from '../CnObjectListWidgetForm/CnObjectListWidgetForm.vue'\nimport CnPlanWidget from '../CnPlanWidget/CnPlanWidget.vue'\nimport CnRelatedObjectsWidget from '../CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue'\nimport CnRelatedObjectsWidgetForm from '../CnRelatedObjectsWidgetForm/CnRelatedObjectsWidgetForm.vue'\nimport CnRetentionWidget from '../CnRetentionWidget/CnRetentionWidget.vue'\nimport CnSavedViewWidget2 from '../CnSavedViewWidget/CnSavedViewWidget.vue'\nimport CnSavedViewWidgetForm2 from '../CnSavedViewWidgetForm/CnSavedViewWidgetForm.vue'\nimport CnSchemaRulesWidget from '../CnSchemaRulesWidget/CnSchemaRulesWidget.vue'\nimport CnStackedBarWidget from '../CnStackedBarWidget/CnStackedBarWidget.vue'\nimport CnStackedBarWidgetForm from '../CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue'\nimport CnStagesWidget from '../CnStagesWidget/CnStagesWidget.vue'\nimport CnStagesWidgetForm from '../CnStagesWidgetForm/CnStagesWidgetForm.vue'\nimport CnStatsBlockWidget from '../CnStatsBlockWidget/CnStatsBlockWidget.vue'\nimport CnStatsBlockWidgetForm from '../CnStatsBlockWidgetForm/CnStatsBlockWidgetForm.vue'\nimport CnTabsWidget from '../CnTabsWidget/CnTabsWidget.vue'\nimport CnTabsWidgetForm from '../CnTabsWidgetForm/CnTabsWidgetForm.vue'\nimport CnTeamWorkloadWidget from '../CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue'\nimport CnWeekStripWidget from '../CnWeekStripWidget/CnWeekStripWidget.vue'\nimport CnWeekStripWidgetForm from '../CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue'\nimport CnWorkQueue from '../CnWorkQueue/CnWorkQueue.vue'\n// Typed widgets registered with an explicit renderer + config FORM. chart /\n// stats-block render through CnDashboardPage's own isChart()/isStatsBlock()\n// branches and `related` through CnDetailPage's isRelatedWidget() branch — the\n// registry entry exists so the cog editor + Add-widget picker get a form (and,\n// for `related`, the detail-page surface). `table` aliases the object-list\n// renderer/form for legacy manifests using type:'table'.\nimport { registerDashboardWidget } from './dashboardWidgetRegistry.js'\n\nimport '../CnLabelWidget/index.js'\nimport '../CnTextWidget/index.js'\nimport '../CnImageWidget/index.js'\nimport '../CnLinkButtonWidget/index.js'\nimport '../CnDividerWidget/index.js'\nimport '../CnHeaderWidget/index.js'\nimport '../CnQuicklinksWidget/index.js'\nimport '../CnVideoWidget/index.js'\nimport '../CnDashTileWidget/index.js'\nimport '../CnLinksWidget/index.js'\nimport '../CnMenuWidget/index.js'\nimport '../CnContainerWidget/index.js'\nimport '../CnFilesWidget/index.js'\nimport '../CnPeopleWidget/index.js'\nimport '../CnCalendarWidget/index.js'\nimport '../CnNcWidgetWidget/index.js'\nimport '../CnSpendAnalyticsWidget/index.js'\nimport '../CnStatWidget/index.js'\nimport '../CnDeltaWidget/index.js'\nimport '../CnGaugeWidget/index.js'\nimport '../CnFlowRunsWidget/index.js'\nimport '../CnTasksWidget/index.js'\nimport '../CnSectionsWidget/index.js'\nimport '../CnFactsWidget/index.js'\nimport '../CnLinkedWidget/index.js'\nimport '../CnDeviceFramesWidget/index.js'\nimport '../CnGroupedCardsWidget/index.js'\nimport '../CnChecklistRunWidget/index.js'\nimport '../CnChecklistWidget/index.js'\nimport '../CnMailTab/index.js'\nimport '../CnWorkingCalendarWidget/index.js'\nimport '../CnPartyActionsWidget/index.js'\nimport '../CnFieldListWidget/index.js'\nimport '../CnSettingsFormWidget/index.js'\nimport '../CnSwitchRowsWidget/index.js'\nimport '../CnRadioCardsWidget/index.js'\nimport '../CnChipsFieldWidget/index.js'\nimport '../CnToggleTableWidget/index.js'\nimport '../CnChoicePickerWidget/index.js'\nimport '../CnRecordListWidget/index.js'\nimport '../CnSavedViewsWidget/index.js'\nimport '../CnNotepadWidget/index.js'\nimport '../CnObjectDataWidget/dashboardRegistration.js'\nimport '../CnObjectGeoWidget/dashboardRegistration.js'\nimport '../CnWidgetObjectTable/dashboardRegistration.js'\nimport '../CnAuditTrailWidget/dashboardRegistration.js'\nimport '../CnTimelineWidget/dashboardRegistration.js'\nimport '../CnKbSearchWidget/index.js'\nimport '../CnInteractionFormWidget/index.js'\nimport '../CnBannerWidget/index.js'\nimport '../CnAttentionFlagWidget/index.js'\nimport '../CnStatusExplainerWidget/index.js'\nimport '../CnObjectPartiesWidget/index.js'\nimport '../CnWorkspaceFilterWidget/index.js'\n\nregisterDashboardWidget('chart', {\n\trenderer: CnChartWidget,\n\tform: CnChartWidgetForm,\n\tdefaultContent: {\n\t\tchartKind: 'area',\n\t\tdataSource: { register: '', schema: '', filter: {}, bucket: { field: '', interval: 'month', metric: 'count', metricField: '' } },\n\t},\n\tdisplayName: 'Chart',\n\ticon: 'ChartLine',\n})\n\nregisterDashboardWidget('stats-block', {\n\trenderer: CnStatsBlockWidget,\n\tform: CnStatsBlockWidgetForm,\n\tdefaultContent: {\n\t\ttitle: '',\n\t\tprops: { countLabel: '', variant: 'default', iconClass: '' },\n\t\tdataSource: { register: '', schema: '', metric: 'count', field: '', filter: {} },\n\t},\n\tdisplayName: 'Statistic card',\n\ticon: 'ChartBar',\n\t// Card family (docs/architecture/cards-and-widgets.md), like `stat` and\n\t// `delta`: the tile headlines itself with its own title, so the wrapper\n\t// renders no header of its own and would otherwise show the title twice.\n\tcard: true,\n})\n\n// `table` and `object-list` (below) are legacy aliases of `object-table` — same\n// config form (CnObjectListWidgetForm), same job. They stay registered so\n// existing placements keep rendering, but are hidden from every Add-widget\n// picker via a sentinel surface no picker queries (see widgetTypeAllowsSurface):\n// `object-table` is the one to add now. Rendering resolves through\n// getWidgetTypeEntry, which ignores `surfaces`, so hidden ≠ broken.\nregisterDashboardWidget('table', {\n\trenderer: CnObjectListWidget2,\n\tform: CnObjectListWidgetForm2,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\tfilter: {},\n\t\tsort: { field: '', dir: 'asc' },\n\t\tlimit: 10,\n\t\tcolumns: [],\n\t},\n\tdisplayName: 'Table',\n\ticon: 'ClipboardList',\n\tsurfaces: ['legacy'],\n})\n\n// `object-list` is registered HERE and only here. Registering it from\n// CnObjectListWidget/index.js instead is not enough: package.json declares\n// `sideEffects: [\"**/*.css\"]` (ADR-061 tree-shaking), which lets\n// rollup/webpack legally DROP bare imports of side-effect-free JS modules —\n// the dist bundle shipped without the object-list registration and every\n// manifest `type:\"object-list\"` widget rendered blank. Inline calls in this\n// module survive because consumers import live bindings from the registry.\n//\n// That index.js ALSO self-registered, with a divergent entry (limit 5, no\n// `surfaces`), so both ran in a consumer's build — components/index.js\n// re-exports it, so it was never tree-shaken — and last-registration-wins\n// decided whether this legacy alias stayed hidden from the Add-widget picker.\n// The self-registration is gone; this entry is the one that already won.\nregisterDashboardWidget('object-list', {\n\trenderer: CnObjectListWidget2,\n\tform: CnObjectListWidgetForm2,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\tfilter: {},\n\t\tsort: { field: '', dir: 'asc' },\n\t\tlimit: 25,\n\t\tcolumns: [],\n\t},\n\tdisplayName: 'Object list',\n\ticon: 'ClipboardList',\n\tsurfaces: ['legacy'],\n})\n\n// `saved-view`: a list driven by one of the reader's saved views. The only data\n// widget a user may add themselves, because the view carries the register and\n// schema a user would otherwise have to name. Registered inline for the same\n// tree-shaking reason as `object-list` above.\n// @spec openspec/changes/a-saved-view-drives-a-widget/tasks.md#task-1.1\nregisterDashboardWidget('saved-view', {\n\trenderer: CnSavedViewWidget2,\n\tform: CnSavedViewWidgetForm2,\n\tdefaultContent: { viewId: '', limit: 10 },\n\tdisplayName: 'Saved view',\n\ticon: 'ClipboardList',\n\tuserAddable: true,\n})\n\n// `markdown`: prose inside a grid page, through the one shared renderer. The\n// only catalog widget a PUBLIC host may mount so far: every other entry is\n// `public: false` until its author opts in deliberately.\n// @spec openspec/changes/widget-registry-public-flag/tasks.md#task-4\nregisterDashboardWidget('markdown', {\n\trenderer: CnMarkdownWidget2,\n\tform: CnMarkdownWidgetForm2,\n\tdefaultContent: { markdown: '' },\n\tdisplayName: 'Markdown',\n\ticon: 'FormatTitle',\n\tpublic: true,\n})\n\nregisterDashboardWidget('related', {\n\trenderer: CnRelatedObjectsWidget,\n\tform: CnRelatedObjectsWidgetForm,\n\tdefaultContent: { title: '', groups: [], hideSingleTabTitle: true, showTotalCount: true },\n\tdisplayName: 'Object relations',\n\ticon: 'FileTreeOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// `map` is registered here for the same tree-shaking reason as `object-list`\n// above — a bare `import '../CnMapWidget/index.js'` is a side-effect-free JS module\n// as far as the bundler is concerned, so it may legally be dropped and the widget\n// would silently never appear in Add Widget. CnMapWidget/index.js carried a\n// byte-identical copy of this entry, which only produced a duplicate-registration\n// warning on every consumer's boot; it no longer registers.\nregisterDashboardWidget('map', {\n\trenderer: CnMapWidget,\n\tform: CnMapWidgetForm,\n\tdefaultContent: {\n\t\tregister: '',\n\t\tschema: '',\n\t\t// The Netherlands, roughly — only visible until autoFit frames the objects.\n\t\tcenter: [52.13, 5.29],\n\t\tzoom: 7,\n\t\theight: '400px',\n\t\tpopupField: '',\n\t\tclustering: false,\n\t\tautoFit: true,\n\t\t// A map with no tile layer renders as a grey box. `basemaps` is opt-in and\n\t\t// empty by default (so consumers declaring a `tile` entry in `layers` are\n\t\t// unaffected), which meant a freshly-placed Map widget had NO background at\n\t\t// all. Ship OpenStreetMap — the Nextcloud CSP already allows *.tile.openstreetmap.org.\n\t\tbasemaps: [\n\t\t\t{\n\t\t\t\tname: 'OpenStreetMap',\n\t\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t\tattribution: '© OpenStreetMap contributors',\n\t\t\t\toptions: { maxZoom: 19 },\n\t\t\t},\n\t\t],\n\t\tmarkers: {\n\t\t\tdataSource: { register: '', schema: '' },\n\t\t\tpopupField: '',\n\t\t\tclustering: false,\n\t\t},\n\t},\n\tdisplayName: 'Map',\n\ticon: 'Map',\n})\n\nregisterDashboardWidget('countdown', {\n\trenderer: CnCountdownWidget,\n\tform: CnCountdownWidgetForm,\n\tdefaultContent: {\n\t\tlabel: '',\n\t\tfield: '',\n\t\ticon: 'ClockOutline',\n\t\tthresholds: {},\n\t\tshowDate: true,\n\t},\n\tdisplayName: 'Countdown',\n\ticon: 'ClockOutline',\n\t// Card family: the tile headlines itself, so the wrapper draws no header.\n\tcard: true,\n\t// It reads a date off the BOUND RECORD, which only a detail page has.\n\tsurfaces: ['detail-page'],\n})\n\n// The case surfaces (detail-action-model-and-case-surfaces). Each reads the\n// BOUND RECORD, which only a detail page has, and none has a config form yet,\n// so `form: null` keeps them out of the Add-widget picker: they are placed\n// from the manifest. Registered inline for the same tree-shaking reason as\n// `map` above.\nregisterDashboardWidget('next-step', {\n\trenderer: CnNextStepWidget,\n\tform: null,\n\tdefaultContent: { field: 'status', stages: {} },\n\tdisplayName: 'Next step',\n\ticon: 'CheckCircleOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('retention', {\n\trenderer: CnRetentionWidget,\n\tform: null,\n\tdefaultContent: { statusField: '', archivedValues: [], archivistGroups: ['archivaris'] },\n\tdisplayName: 'Retention',\n\ticon: 'ArchiveOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('schema-rules', {\n\trenderer: CnSchemaRulesWidget,\n\tform: null,\n\tdefaultContent: { register: '', schema: '', objectId: '' },\n\tdisplayName: 'Schema rules',\n\ticon: 'ScaleBalance',\n\tsurfaces: ['detail-page'],\n})\n\nregisterDashboardWidget('plan', {\n\trenderer: CnPlanWidget,\n\tform: null,\n\tdefaultContent: { emptyText: '' },\n\tdisplayName: 'Plan',\n\ticon: 'FormatListChecks',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\nregisterDashboardWidget('work-queue', {\n\trenderer: CnWorkQueue,\n\tform: null,\n\tdefaultContent: { source: null },\n\tdisplayName: 'Work queue',\n\ticon: 'TrayFull',\n})\n\nregisterDashboardWidget('document-review', {\n\trenderer: CnDocumentReviewWidget,\n\tform: null,\n\tdefaultContent: { field: 'documents', statusField: 'reviewStatus', statuses: [] },\n\tdisplayName: 'Document review',\n\ticon: 'FileDocumentCheckOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The AI Chat Companion embedded in the page: the assistant as a tab or card\n// rather than the launcher's floating window (DqZaakAssistent).\nregisterDashboardWidget('ai-chat', {\n\trenderer: CnAiChatWidget,\n\tform: null,\n\tdefaultContent: { chatAppId: '' },\n\tdisplayName: 'Assistant',\n\ticon: 'Creation',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The macros the record's schema declares, each run by a button\n// (DqZaakAssistent \"Macro's\").\nregisterDashboardWidget('macros', {\n\trenderer: CnMacrosWidget,\n\tform: null,\n\tdefaultContent: { description: '', emptyText: '' },\n\tdisplayName: 'Macros',\n\ticon: 'PlayBoxMultipleOutline',\n\tsurfaces: ['detail-page'],\n})\n\n// The appointments booked on a record that is not an object (a flow task),\n// read from a source or an endpoint.\nregisterDashboardWidget('events', {\n\trenderer: CnEventsCard,\n\tform: null,\n\tdefaultContent: { source: null, endpoint: '', emptyText: '' },\n\tdisplayName: 'Appointments',\n\ticon: 'CalendarClock',\n\tsurfaces: ['detail-page'],\n})\n\nregisterDashboardWidget('conversation', {\n\trenderer: CnConversationWidget,\n\tform: null,\n\tdefaultContent: { field: 'messages', endpoint: '' },\n\tdisplayName: 'Conversation',\n\ticon: 'ForumOutline',\n\tsurfaces: ['detail-page'],\n\townsTitle: true,\n})\n\n// The record's stages, where clicking a stage moves the record there.\n// Registered inline for the same tree-shaking reason as `map` above.\nregisterDashboardWidget('stages', {\n\trenderer: CnStagesWidget,\n\tform: CnStagesWidgetForm,\n\tdefaultContent: {\n\t\tcurrentField: 'status',\n\t\torientation: 'horizontal',\n\t\tsize: 'medium',\n\t\tstagesEndpoint: { url: '', path: '' },\n\t\t// The LIFECYCLE, not a record write. OpenRegister decides what is\n\t\t// reachable and re-validates the move; a field write has neither.\n\t\ttransition: { kind: 'lifecycle' },\n\t},\n\tdisplayName: 'Stages',\n\ticon: 'Timeline',\n\t// Card family on the detail grid: a titled wrapper around a self-contained\n\t// strip, like the KPI tiles it usually sits beside.\n\tcard: true,\n\t// It reads and moves the BOUND RECORD, which only a detail page has.\n\tsurfaces: ['detail-page'],\n})\n\nregisterDashboardWidget('tabs', {\n\trenderer: CnTabsWidget,\n\tform: CnTabsWidgetForm,\n\tdefaultContent: {\n\t\ttabs: [],\n\t\tariaLabel: '',\n\t},\n\tdisplayName: 'Tabs',\n\ticon: 'TabPlus',\n\t// Renders OTHER widgets, so CnDetailWidgetHost hands it the surface's\n\t// sibling definitions and the context its children will need.\n\tcontainer: true,\n\t// The strip's labels ARE the titles, so a card header above them would name\n\t// the group twice.\n\townsTitle: true,\n\tsurfaces: ['detail-page'],\n})\n\n// The current week as day columns, with the dated items under each day.\n// Registered inline for the same tree-shaking reason as `map` above.\nregisterDashboardWidget('week-strip', {\n\trenderer: CnWeekStripWidget,\n\tform: CnWeekStripWidgetForm,\n\tdefaultContent: {\n\t\tsource: { register: '', schema: '', filter: {} },\n\t\tdateField: '',\n\t\ttitleField: '',\n\t\tmetaFields: [],\n\t\tdays: 5,\n\t\titemRoute: '',\n\t\temptyText: '',\n\t},\n\tdisplayName: 'Week strip',\n\ticon: 'Calendar',\n})\n\n// One segmented bar with a legend that carries the numbers.\nregisterDashboardWidget('stacked-bar', {\n\trenderer: CnStackedBarWidget,\n\tform: CnStackedBarWidgetForm,\n\tdefaultContent: {\n\t\tsource: { register: '', schema: '', groupBy: '', filter: {} },\n\t\torder: [],\n\t\tlabels: {},\n\t\temptyText: '',\n\t},\n\tdisplayName: 'Stacked bar',\n\ticon: 'ChartBar',\n})\n\n// The team today: availability from the Nextcloud user status and each\n// person's open count from the app (DqTeamwachtrij \"Team vandaag\"). Placed\n// from the manifest: there is no config form yet.\nregisterDashboardWidget('team-workload', {\n\trenderer: CnTeamWorkloadWidget,\n\tform: null,\n\tdefaultContent: { source: { url: '', responsePath: '', userField: 'userId', nameField: 'displayName', countField: 'count' } },\n\tdisplayName: 'Team workload',\n\ticon: 'AccountGroup',\n})\n\n/**\n * Explicit no-op that guarantees this module (and therefore every widget's\n * self-registration side effect) is evaluated. Now optional: `CnDashboardPage`\n * and `CnDetailPage` import this module themselves, and a second call changes\n * nothing because the module body runs once.\n *\n * @return {void}\n */\nexport function registerBuiltinDashboardWidgets() {}\n"],"names":["CnChartWidget","CnChartWidgetForm","CnStatsBlockWidget","CnStatsBlockWidgetForm","CnObjectListWidget2","CnObjectListWidgetForm2","CnSavedViewWidget2","CnSavedViewWidgetForm2","CnMarkdownWidget2","CnMarkdownWidgetForm2","CnRelatedObjectsWidget","CnRelatedObjectsWidgetForm","CnMapWidget","CnMapWidgetForm","CnCountdownWidget","CnCountdownWidgetForm","CnNextStepWidget","CnRetentionWidget","CnSchemaRulesWidget","CnPlanWidget","CnWorkQueue","CnDocumentReviewWidget","CnAiChatWidget","CnMacrosWidget","CnEventsCard","CnConversationWidget","CnStagesWidget","CnStagesWidgetForm","CnTabsWidget","CnTabsWidgetForm","CnWeekStripWidget","CnWeekStripWidgetForm","CnStackedBarWidget","CnStackedBarWidgetForm","CnTeamWorkloadWidget"],"mappings":"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"}
|