@conduction/nextcloud-vue 2.64.0 → 2.65.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/CnAppNav/CnAppNav.vue2.js +99 -3
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +23 -7
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js +13 -0
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +2 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +26 -2
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +6 -3
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +64 -5
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +66 -28
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +22 -5
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +22 -3
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +10 -3
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +164 -0
- package/dist/esm/store/useObjectStore.js +118 -33
- package/dist/esm/store/useObjectStore.js.map +1 -1
- package/dist/esm/utils/actionsDispatcher.js +14 -0
- package/dist/esm/utils/actionsDispatcher.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +488 -96
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +164 -0
- package/package.json +1 -1
- package/src/components/CnAppNav/CnAppNav.vue +148 -7
- package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +14 -0
- package/src/components/CnDashboardPage/CnDashboardPage.vue +29 -2
- package/src/components/CnDetailPage/CnDetailPage.md +5 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +114 -6
- package/src/components/CnHeaderWidget/CnHeaderWidget.vue +34 -6
- package/src/components/CnStagesWidget/CnStagesWidget.vue +9 -0
- package/src/components/CnStatWidget/CnStatWidget.vue +33 -5
- package/src/css/detail-page.css +22 -0
- package/src/css/kpi-card.css +47 -0
- package/src/schemas/app-manifest-v2.schema.json +23 -2
- package/src/store/useObjectStore.js +118 -33
- package/src/utils/actionsDispatcher.js +14 -0
- package/src/utils/validateManifestV2.compiled.js +2 -2
|
@@ -9,6 +9,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9
9
|
? (openBlock(), createBlock(_component_NcBreadcrumbs, {
|
|
10
10
|
key: 0,
|
|
11
11
|
"aria-label": $props.ariaLabel,
|
|
12
|
+
rootIcon: $props.rootText ? '' : undefined,
|
|
12
13
|
"data-testid": "cn-breadcrumbs"
|
|
13
14
|
}, {
|
|
14
15
|
default: withCtx(() => [
|
|
@@ -37,7 +38,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
37
38
|
}), 128 /* KEYED_FRAGMENT */))
|
|
38
39
|
]),
|
|
39
40
|
_: 1 /* STABLE */
|
|
40
|
-
}, 8 /* PROPS */, ["aria-label"]))
|
|
41
|
+
}, 8 /* PROPS */, ["aria-label", "rootIcon"]))
|
|
41
42
|
: createCommentVNode("v-if", true)
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CnBreadcrumbs.vue3.js","sources":["../../../../src/components/CnBreadcrumbs/CnBreadcrumbs.vue?vue&type=template&id=296fde9b&lang.js"],"sourcesContent":["<!--\n CnBreadcrumbs — declarative breadcrumb trail wrapping NcBreadcrumbs.\n\n Renders a `crumbs` array as NcBreadcrumb entries: every crumb but the\n last navigates via `to` (router target) or `href` (plain anchor); the\n LAST crumb is the current location — rendered without a link target and\n carrying aria-current=\"page\" so assistive tech announces the position\n in the trail. Crumb icons resolve by PascalCase MDI name through the\n shared CnIcon registry, so a home crumb is `{ icon: 'Home', to: … }`\n without the consumer importing an icon component.\n\n NcBreadcrumbs supplies the nav landmark, the chevron separators and the\n responsive collapse of middle crumbs into an overflow menu; this wrapper\n only owns the array-in API and the last-crumb semantics, keeping fleet\n apps from hand-rolling the same v-for.\n-->\n<template>\n\t<NcBreadcrumbs\n\t\tv-if=\"crumbs.length > 0\"\n\t\t:aria-label=\"ariaLabel\"\n\t\tdata-testid=\"cn-breadcrumbs\">\n\t\t<!-- `name` falls back to '' because NcBreadcrumb declares it a REQUIRED\n\t\t String and warns per render on the label-less icon-only crumb. The\n\t\t empty string never shows: NcBreadcrumb prints `name` only for\n\t\t crumbs without an icon slot. -->\n\t\t<NcBreadcrumb\n\t\t\tv-for=\"(crumb, index) in crumbs\"\n\t\t\t:key=\"`${index}-${crumb.label ?? crumb.icon}`\"\n\t\t\t:name=\"crumb.label ?? ''\"\n\t\t\t:to=\"isCurrent(index) ? undefined : crumb.to\"\n\t\t\t:href=\"isCurrent(index) ? undefined : crumb.href\"\n\t\t\t:aria-current=\"isCurrent(index) ? 'page' : undefined\"\n\t\t\t:data-testid=\"`cn-breadcrumbs-crumb-${index}`\">\n\t\t\t<template v-if=\"crumb.icon\" #icon>\n\t\t\t\t<CnIcon :name=\"crumb.icon\" :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcBreadcrumb, NcBreadcrumbs } from '@nextcloud/vue'\nimport { CnIcon } from '../CnIcon/index.js'\n\n/**\n * CnBreadcrumbs — declarative breadcrumb trail wrapping NcBreadcrumbs.\n *\n * Feed it the whole trail as one `crumbs` array — first entry is the root\n * (typically a Home crumb), last entry is the CURRENT location. Every crumb\n * but the last links via its `to` (router) or `href` (anchor); the last one\n * is rendered unlinked with `aria-current=\"page\"`, per the WAI-ARIA\n * breadcrumb pattern.\n *\n * ```vue\n * <CnBreadcrumbs\n * :crumbs=\"[\n * { icon: 'Home', to: { name: 'SecretList' } },\n * { label: 'Team vault', to: { name: 'SecretListFolder', params: { folderId: '7' } } },\n * { label: 'Production' },\n * ]\" />\n * ```\n */\nexport default {\n\tname: 'CnBreadcrumbs',\n\n\tcomponents: {\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t\tCnIcon,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The trail, root first, current location LAST. Each crumb:\n\t\t * `{ label, to?, href?, icon? }` — `label` is the visible (already\n\t\t * translated) text, `to` a vue-router target, `href` a plain URL\n\t\t * (use one or the other; both are ignored on the last crumb), and\n\t\t * `icon` a PascalCase MDI name resolved via the CnIcon registry\n\t\t * (register it with `registerIcons()` at boot).\n\t\t *\n\t\t * @type {Array<{label: string, to?: (object|string), href?: string, icon?: string}>}\n\t\t */\n\t\tcrumbs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\tvalidator: (value) => value.every((crumb) => crumb && typeof crumb === 'object'\n\t\t\t\t&& (typeof crumb.label === 'string' || typeof crumb.icon === 'string')),\n\t\t},\n\n\t\t/**\n\t\t * Accessible name of the breadcrumb nav landmark. Defaults to the\n\t\t * lib's translation of \"Breadcrumbs\"; override per surface when a\n\t\t * page carries more than one trail.\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Breadcrumbs'),\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Whether the crumb at `index` is the trail's last entry — the\n\t\t * current location, which renders unlinked with aria-current.\n\t\t *\n\t\t * @param {number} index Crumb position in `crumbs`.\n\t\t * @return {boolean}\n\t\t */\n\t\tisCurrent(index) {\n\t\t\treturn index === this.crumbs.length - 1\n\t\t},\n\t},\n}\n</script>\n"],"names":[
|
|
1
|
+
{"version":3,"file":"CnBreadcrumbs.vue3.js","sources":["../../../../src/components/CnBreadcrumbs/CnBreadcrumbs.vue?vue&type=template&id=296fde9b&lang.js"],"sourcesContent":["<!--\n CnBreadcrumbs — declarative breadcrumb trail wrapping NcBreadcrumbs.\n\n Renders a `crumbs` array as NcBreadcrumb entries: every crumb but the\n last navigates via `to` (router target) or `href` (plain anchor); the\n LAST crumb is the current location — rendered without a link target and\n carrying aria-current=\"page\" so assistive tech announces the position\n in the trail. Crumb icons resolve by PascalCase MDI name through the\n shared CnIcon registry, so a home crumb is `{ icon: 'Home', to: … }`\n without the consumer importing an icon component.\n\n NcBreadcrumbs supplies the nav landmark, the chevron separators and the\n responsive collapse of middle crumbs into an overflow menu; this wrapper\n only owns the array-in API and the last-crumb semantics, keeping fleet\n apps from hand-rolling the same v-for.\n-->\n<template>\n\t<NcBreadcrumbs\n\t\tv-if=\"crumbs.length > 0\"\n\t\t:aria-label=\"ariaLabel\"\n\t\t:rootIcon=\"rootText ? '' : undefined\"\n\t\tdata-testid=\"cn-breadcrumbs\">\n\t\t<!-- `name` falls back to '' because NcBreadcrumb declares it a REQUIRED\n\t\t String and warns per render on the label-less icon-only crumb. The\n\t\t empty string never shows: NcBreadcrumb prints `name` only for\n\t\t crumbs without an icon slot. -->\n\t\t<NcBreadcrumb\n\t\t\tv-for=\"(crumb, index) in crumbs\"\n\t\t\t:key=\"`${index}-${crumb.label ?? crumb.icon}`\"\n\t\t\t:name=\"crumb.label ?? ''\"\n\t\t\t:to=\"isCurrent(index) ? undefined : crumb.to\"\n\t\t\t:href=\"isCurrent(index) ? undefined : crumb.href\"\n\t\t\t:aria-current=\"isCurrent(index) ? 'page' : undefined\"\n\t\t\t:data-testid=\"`cn-breadcrumbs-crumb-${index}`\">\n\t\t\t<template v-if=\"crumb.icon\" #icon>\n\t\t\t\t<CnIcon :name=\"crumb.icon\" :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcBreadcrumb, NcBreadcrumbs } from '@nextcloud/vue'\nimport { CnIcon } from '../CnIcon/index.js'\n\n/**\n * CnBreadcrumbs — declarative breadcrumb trail wrapping NcBreadcrumbs.\n *\n * Feed it the whole trail as one `crumbs` array — first entry is the root\n * (typically a Home crumb), last entry is the CURRENT location. Every crumb\n * but the last links via its `to` (router) or `href` (anchor); the last one\n * is rendered unlinked with `aria-current=\"page\"`, per the WAI-ARIA\n * breadcrumb pattern.\n *\n * ```vue\n * <CnBreadcrumbs\n * :crumbs=\"[\n * { icon: 'Home', to: { name: 'SecretList' } },\n * { label: 'Team vault', to: { name: 'SecretListFolder', params: { folderId: '7' } } },\n * { label: 'Production' },\n * ]\" />\n * ```\n */\nexport default {\n\tname: 'CnBreadcrumbs',\n\n\tcomponents: {\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t\tCnIcon,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The trail, root first, current location LAST. Each crumb:\n\t\t * `{ label, to?, href?, icon? }` — `label` is the visible (already\n\t\t * translated) text, `to` a vue-router target, `href` a plain URL\n\t\t * (use one or the other; both are ignored on the last crumb), and\n\t\t * `icon` a PascalCase MDI name resolved via the CnIcon registry\n\t\t * (register it with `registerIcons()` at boot).\n\t\t *\n\t\t * @type {Array<{label: string, to?: (object|string), href?: string, icon?: string}>}\n\t\t */\n\t\tcrumbs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\tvalidator: (value) => value.every((crumb) => crumb && typeof crumb === 'object'\n\t\t\t\t&& (typeof crumb.label === 'string' || typeof crumb.icon === 'string')),\n\t\t},\n\n\t\t/**\n\t\t * Accessible name of the breadcrumb nav landmark. Defaults to the\n\t\t * lib's translation of \"Breadcrumbs\"; override per surface when a\n\t\t * page carries more than one trail.\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Breadcrumbs'),\n\t\t},\n\n\t\t/**\n\t\t * Draw the FIRST crumb's label as text. NcBreadcrumbs gives the root\n\t\t * crumb a home icon and prints its `label` only as the accessible\n\t\t * name, so \"All cases\" read as a house. Off by default, which keeps\n\t\t * the home icon. A first crumb with its own `icon` keeps that icon.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-declared-breadcrumb-label-shows-as-text\n\t\t */\n\t\trootText: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Whether the crumb at `index` is the trail's last entry — the\n\t\t * current location, which renders unlinked with aria-current.\n\t\t *\n\t\t * @param {number} index Crumb position in `crumbs`.\n\t\t * @return {boolean}\n\t\t */\n\t\tisCurrent(index) {\n\t\t\treturn index === this.crumbs.length - 1\n\t\t},\n\t},\n}\n</script>\n"],"names":[],"mappings":";;;;;;;AAkCQ,EAAA,OAAA,CAAA,MAAA,CAAA,MAAM,CAAC,MAAM,GAAA,CAAA;;;AACjB,QAAA,YAAS,EAAE,MAAS,CAAA,SAAA;QACrB,QAAQ,EAAE,MAAA,CAAA,QAAA,GAAA,EAAA,GAAA,SAAA;AACX,QAAA,aAAW,EAAC,gBAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -249,6 +249,21 @@ var script = {
|
|
|
249
249
|
default: true,
|
|
250
250
|
},
|
|
251
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Whether a widget draws its overflow Actions menu when neither its
|
|
254
|
+
* placement nor its definition says (`showActions`). `false` (manifest
|
|
255
|
+
* `config.showWidgetActions: false`) drops the menu from every such
|
|
256
|
+
* widget, for a dashboard whose widgets carry a header link and
|
|
257
|
+
* nothing else. A widget that sets `showActions: true` keeps its menu.
|
|
258
|
+
* Card widgets have no menu either way.
|
|
259
|
+
*
|
|
260
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-dashboard-can-drop-the-widget-actions-menu
|
|
261
|
+
*/
|
|
262
|
+
showWidgetActions: {
|
|
263
|
+
type: Boolean,
|
|
264
|
+
default: true,
|
|
265
|
+
},
|
|
266
|
+
|
|
252
267
|
/**
|
|
253
268
|
* Widget definitions array. Each widget defines metadata for rendering.
|
|
254
269
|
*
|
|
@@ -2683,11 +2698,20 @@ var script = {
|
|
|
2683
2698
|
* exactly that reason; there is now one rule for every family, so a
|
|
2684
2699
|
* custom slot and a registered widget cannot disagree about it.
|
|
2685
2700
|
*
|
|
2701
|
+
* A greeting header that declares `content.ground: true` sits on the
|
|
2702
|
+
* page ground, so it asks for no card either: one key on the widget
|
|
2703
|
+
* instead of a second one on its placement.
|
|
2704
|
+
*
|
|
2705
|
+
* @spec openspec/changes/zuiddrecht-pixel-gaps-2/specs/zuiddrecht-pixel-gaps-2/spec.md#requirement-a-greeting-can-sit-on-the-page-ground
|
|
2686
2706
|
* @param {object} item the layout placement.
|
|
2687
2707
|
* @return {boolean}
|
|
2688
2708
|
*/
|
|
2689
2709
|
widgetBorderless(item) {
|
|
2690
|
-
|
|
2710
|
+
if (item.borderless === true) {
|
|
2711
|
+
return true
|
|
2712
|
+
}
|
|
2713
|
+
const def = this.getWidgetDef(item.widgetId);
|
|
2714
|
+
return Boolean(def && def.type === 'header' && this.getWidgetContent(item).ground === true)
|
|
2691
2715
|
},
|
|
2692
2716
|
|
|
2693
2717
|
/**
|
|
@@ -2704,7 +2728,7 @@ var script = {
|
|
|
2704
2728
|
const def = this.getWidgetDef(item.widgetId);
|
|
2705
2729
|
const value = item.showActions !== undefined ? item.showActions : def?.showActions;
|
|
2706
2730
|
if (value === undefined || value === null) {
|
|
2707
|
-
return !this.isCardWidget(item)
|
|
2731
|
+
return this.showWidgetActions && !this.isCardWidget(item)
|
|
2708
2732
|
}
|
|
2709
2733
|
return value !== false
|
|
2710
2734
|
},
|