@conduction/nextcloud-vue 2.142.0 → 2.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +27 -0
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +1 -1
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue2.js.map +1 -1
  7. package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue3.js +2 -1
  8. package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue3.js.map +1 -1
  9. package/dist/esm/components/CnAiCompanion/CnAiInput.vue2.js +9 -0
  10. package/dist/esm/components/CnAiCompanion/CnAiInput.vue2.js.map +1 -1
  11. package/dist/esm/components/CnAiCompanion/CnAiInput.vue3.js +21 -22
  12. package/dist/esm/components/CnAiCompanion/CnAiInput.vue3.js.map +1 -1
  13. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
  14. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +29 -1
  15. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  16. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js +28 -13
  17. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  18. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue.js +1 -1
  19. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
  20. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +2 -1
  21. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
  22. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +1 -1
  23. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -1
  24. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -1
  25. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue.js +1 -1
  26. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
  27. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
  28. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  29. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  30. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +2 -1
  31. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  32. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  33. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +27 -2
  34. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  35. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +4 -2
  36. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  37. package/dist/esm/components/CnFilesBrowser/filesBrowser.js +17 -4
  38. package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
  39. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +21 -1
  40. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
  41. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +15 -1
  42. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  43. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  44. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js +6 -1
  45. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js.map +1 -1
  46. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue3.js.map +1 -1
  47. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  48. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +12 -1
  49. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  50. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +2 -2
  51. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  52. package/dist/esm/components/CnSavedViewAlertWidget/CnSavedViewAlertWidget.vue.js +1 -1
  53. package/dist/esm/components/CnSavedViewAlertWidget/CnSavedViewAlertWidget.vue2.js.map +1 -1
  54. package/dist/esm/components/CnSavedViewAlertWidget/CnSavedViewAlertWidget.vue3.js.map +1 -1
  55. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
  56. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js +4 -0
  57. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
  58. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +18 -8
  59. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
  60. package/dist/esm/l10n/nl.json.js +1 -1
  61. package/dist/esm/library-style.js +1 -1
  62. package/dist/esm/nextcloud-vue.css +537 -322
  63. package/dist/nextcloud-vue.cjs.js +300 -119
  64. package/dist/nextcloud-vue.cjs.js.map +2 -2
  65. package/dist/nextcloud-vue.css +537 -322
  66. package/l10n/nl.json +1 -1
  67. package/package.json +1 -1
  68. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +28 -1
  69. package/src/components/CnAiCompanion/CnAiChatPanel.vue +12 -0
  70. package/src/components/CnAiCompanion/CnAiInput.vue +32 -1
  71. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +34 -4
  72. package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +1 -0
  73. package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +8 -0
  74. package/src/components/CnChoiceCards/CnChoiceCards.vue +1 -0
  75. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +1 -0
  76. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +28 -3
  77. package/src/components/CnFilesBrowser/filesBrowser.js +17 -4
  78. package/src/components/CnFilesBrowser/filesBrowserColumns.js +20 -1
  79. package/src/components/CnIndexPage/CnIndexPage.vue +15 -1
  80. package/src/components/CnPageHeader/CnHeaderTrail.vue +6 -1
  81. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +21 -1
  82. package/src/components/CnSavedViewAlertWidget/CnSavedViewAlertWidget.vue +6 -0
  83. package/src/components/CnTimelineWidget/CnTimelineManage.vue +10 -1
  84. package/src/css/dialog.css +18 -0
  85. package/src/css/look-board-detail.css +31 -0
  86. package/src/css/look-board-index.css +42 -1
  87. package/src/css/look-board.css +73 -1
@@ -71,7 +71,8 @@ var script = {
71
71
 
72
72
  /**
73
73
  * The crumbs for CnBreadcrumbs: each declared crumb as a link, then the
74
- * current page. Empty without a declared crumb.
74
+ * current page, once (a last crumb that names the page is dropped).
75
+ * Empty without a declared crumb.
75
76
  *
76
77
  * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note
77
78
  * @return {Array<object>}
@@ -93,6 +94,10 @@ var script = {
93
94
  return entry
94
95
  });
95
96
  if (this.current) {
97
+ // A last crumb naming the page itself is the current one, drawn once.
98
+ if (out.length > 0 && out[out.length - 1].label === this.current) {
99
+ out.pop();
100
+ }
96
101
  out.push({ label: this.current });
97
102
  }
98
103
  return out
@@ -1 +1 @@
1
- {"version":3,"file":"CnHeaderTrail.vue2.js","sources":["../../../../src/components/CnPageHeader/CnHeaderTrail.vue"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div\n\t\tv-if=\"crumbs.length > 0 || meta\"\n\t\tclass=\"cn-header-trail cn-detail-page__header-row2\"\n\t\tdata-testid=\"cn-header-trail\">\n\t\t<CnBreadcrumbs\n\t\t\tv-if=\"crumbs.length > 0\"\n\t\t\tclass=\"cn-detail-page__breadcrumbs cn-detail-page__breadcrumbs--row2\"\n\t\t\t:crumbs=\"crumbs\"\n\t\t\t:rootText=\"crumbs[0].icon === undefined\"\n\t\t\t:separator=\"separator\"\n\t\t\tdata-testid=\"cn-header-trail-breadcrumbs\" />\n\t\t<span\n\t\t\tv-if=\"crumbs.length > 0 && meta\"\n\t\t\tclass=\"cn-detail-page__header-dot\"\n\t\t\taria-hidden=\"true\">&middot;</span>\n\t\t<span\n\t\t\tv-if=\"meta\"\n\t\t\tclass=\"cn-detail-page__header-meta\"\n\t\t\tdata-testid=\"cn-header-trail-meta\">{{ meta }}</span>\n\t</div>\n</template>\n\n<script>\nimport { CnBreadcrumbs } from '../CnBreadcrumbs/index.js'\n\n/**\n * The breadcrumb and meta line under a page title: \"Instellingen / Zaaktypen\n * · 12 zaaktypen\". It draws the same markup and classes as the board look's\n * detail header row, so a list, dashboard or settings page carries the\n * detail page's breadcrumb style rather than one of its own.\n *\n * `breadcrumb` is one crumb or a list, each `{ label, route?, params?, href?,\n * icon?, separator? }`. The page title follows as the current crumb.\n */\nexport default {\n\tname: 'CnHeaderTrail',\n\n\tcomponents: { CnBreadcrumbs },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The crumbs before the current page, one object or a list.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current crumb: the page title, already translated. */\n\t\tcurrent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The note after the crumbs and a middle dot, already resolved.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tmeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Translate function for the crumb labels; falls back to the injected\n\t\t * `cnTranslate`.\n\t\t *\n\t\t * @type {((key: string) => string)|null}\n\t\t */\n\t\ttranslate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The declared crumbs that carry a label.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdeclared() {\n\t\t\tconst list = Array.isArray(this.breadcrumb) ? this.breadcrumb : (this.breadcrumb ? [this.breadcrumb] : [])\n\t\t\treturn list.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/**\n\t\t * The crumbs for CnBreadcrumbs: each declared crumb as a link, then the\n\t\t * current page. Empty without a declared crumb.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {Array<object>}\n\t\t */\n\t\tcrumbs() {\n\t\t\tif (this.declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst out = this.declared.map((crumb) => {\n\t\t\t\tconst entry = { label: (this.translate ?? this.cnTranslate)(crumb.label) }\n\t\t\t\tif (typeof crumb.icon === 'string' && crumb.icon !== '') {\n\t\t\t\t\tentry.icon = crumb.icon\n\t\t\t\t}\n\t\t\t\tif (crumb.route) {\n\t\t\t\t\tentry.to = { name: crumb.route, ...(crumb.params ? { params: crumb.params } : {}), ...(crumb.query ? { query: crumb.query } : {}) }\n\t\t\t\t} else if (crumb.href) {\n\t\t\t\t\tentry.href = crumb.href\n\t\t\t\t}\n\t\t\t\treturn entry\n\t\t\t})\n\t\t\tif (this.current) {\n\t\t\t\tout.push({ label: this.current })\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The text between the crumbs: the first crumb's `separator`, else `/`.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tseparator() {\n\t\t\tconst declared = this.declared[0] && this.declared[0].separator\n\t\t\treturn typeof declared === 'string' && declared !== '' ? declared : '/'\n\t\t},\n\t},\n}\n</script>\n"],"names":["CnBreadcrumbs"],"mappings":"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"}
1
+ {"version":3,"file":"CnHeaderTrail.vue2.js","sources":["../../../../src/components/CnPageHeader/CnHeaderTrail.vue"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div\n\t\tv-if=\"crumbs.length > 0 || meta\"\n\t\tclass=\"cn-header-trail cn-detail-page__header-row2\"\n\t\tdata-testid=\"cn-header-trail\">\n\t\t<CnBreadcrumbs\n\t\t\tv-if=\"crumbs.length > 0\"\n\t\t\tclass=\"cn-detail-page__breadcrumbs cn-detail-page__breadcrumbs--row2\"\n\t\t\t:crumbs=\"crumbs\"\n\t\t\t:rootText=\"crumbs[0].icon === undefined\"\n\t\t\t:separator=\"separator\"\n\t\t\tdata-testid=\"cn-header-trail-breadcrumbs\" />\n\t\t<span\n\t\t\tv-if=\"crumbs.length > 0 && meta\"\n\t\t\tclass=\"cn-detail-page__header-dot\"\n\t\t\taria-hidden=\"true\">&middot;</span>\n\t\t<span\n\t\t\tv-if=\"meta\"\n\t\t\tclass=\"cn-detail-page__header-meta\"\n\t\t\tdata-testid=\"cn-header-trail-meta\">{{ meta }}</span>\n\t</div>\n</template>\n\n<script>\nimport { CnBreadcrumbs } from '../CnBreadcrumbs/index.js'\n\n/**\n * The breadcrumb and meta line under a page title: \"Instellingen / Zaaktypen\n * · 12 zaaktypen\". It draws the same markup and classes as the board look's\n * detail header row, so a list, dashboard or settings page carries the\n * detail page's breadcrumb style rather than one of its own.\n *\n * `breadcrumb` is one crumb or a list, each `{ label, route?, params?, href?,\n * icon?, separator? }`. The page title follows as the current crumb.\n */\nexport default {\n\tname: 'CnHeaderTrail',\n\n\tcomponents: { CnBreadcrumbs },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The crumbs before the current page, one object or a list.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current crumb: the page title, already translated. */\n\t\tcurrent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The note after the crumbs and a middle dot, already resolved.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tmeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Translate function for the crumb labels; falls back to the injected\n\t\t * `cnTranslate`.\n\t\t *\n\t\t * @type {((key: string) => string)|null}\n\t\t */\n\t\ttranslate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The declared crumbs that carry a label.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdeclared() {\n\t\t\tconst list = Array.isArray(this.breadcrumb) ? this.breadcrumb : (this.breadcrumb ? [this.breadcrumb] : [])\n\t\t\treturn list.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/**\n\t\t * The crumbs for CnBreadcrumbs: each declared crumb as a link, then the\n\t\t * current page, once (a last crumb that names the page is dropped).\n\t\t * Empty without a declared crumb.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {Array<object>}\n\t\t */\n\t\tcrumbs() {\n\t\t\tif (this.declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst out = this.declared.map((crumb) => {\n\t\t\t\tconst entry = { label: (this.translate ?? this.cnTranslate)(crumb.label) }\n\t\t\t\tif (typeof crumb.icon === 'string' && crumb.icon !== '') {\n\t\t\t\t\tentry.icon = crumb.icon\n\t\t\t\t}\n\t\t\t\tif (crumb.route) {\n\t\t\t\t\tentry.to = { name: crumb.route, ...(crumb.params ? { params: crumb.params } : {}), ...(crumb.query ? { query: crumb.query } : {}) }\n\t\t\t\t} else if (crumb.href) {\n\t\t\t\t\tentry.href = crumb.href\n\t\t\t\t}\n\t\t\t\treturn entry\n\t\t\t})\n\t\t\tif (this.current) {\n\t\t\t\t// A last crumb naming the page itself is the current one, drawn once.\n\t\t\t\tif (out.length > 0 && out[out.length - 1].label === this.current) {\n\t\t\t\t\tout.pop()\n\t\t\t\t}\n\t\t\t\tout.push({ label: this.current })\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The text between the crumbs: the first crumb's `separator`, else `/`.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tseparator() {\n\t\t\tconst declared = this.declared[0] && this.declared[0].separator\n\t\t\treturn typeof declared === 'string' && declared !== '' ? declared : '/'\n\t\t},\n\t},\n}\n</script>\n"],"names":["CnBreadcrumbs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CnHeaderTrail.vue3.js","sources":["../../../../src/components/CnPageHeader/CnHeaderTrail.vue?vue&type=template&id=765d3a68&lang.js"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div\n\t\tv-if=\"crumbs.length > 0 || meta\"\n\t\tclass=\"cn-header-trail cn-detail-page__header-row2\"\n\t\tdata-testid=\"cn-header-trail\">\n\t\t<CnBreadcrumbs\n\t\t\tv-if=\"crumbs.length > 0\"\n\t\t\tclass=\"cn-detail-page__breadcrumbs cn-detail-page__breadcrumbs--row2\"\n\t\t\t:crumbs=\"crumbs\"\n\t\t\t:rootText=\"crumbs[0].icon === undefined\"\n\t\t\t:separator=\"separator\"\n\t\t\tdata-testid=\"cn-header-trail-breadcrumbs\" />\n\t\t<span\n\t\t\tv-if=\"crumbs.length > 0 && meta\"\n\t\t\tclass=\"cn-detail-page__header-dot\"\n\t\t\taria-hidden=\"true\">&middot;</span>\n\t\t<span\n\t\t\tv-if=\"meta\"\n\t\t\tclass=\"cn-detail-page__header-meta\"\n\t\t\tdata-testid=\"cn-header-trail-meta\">{{ meta }}</span>\n\t</div>\n</template>\n\n<script>\nimport { CnBreadcrumbs } from '../CnBreadcrumbs/index.js'\n\n/**\n * The breadcrumb and meta line under a page title: \"Instellingen / Zaaktypen\n * · 12 zaaktypen\". It draws the same markup and classes as the board look's\n * detail header row, so a list, dashboard or settings page carries the\n * detail page's breadcrumb style rather than one of its own.\n *\n * `breadcrumb` is one crumb or a list, each `{ label, route?, params?, href?,\n * icon?, separator? }`. The page title follows as the current crumb.\n */\nexport default {\n\tname: 'CnHeaderTrail',\n\n\tcomponents: { CnBreadcrumbs },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The crumbs before the current page, one object or a list.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current crumb: the page title, already translated. */\n\t\tcurrent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The note after the crumbs and a middle dot, already resolved.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tmeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Translate function for the crumb labels; falls back to the injected\n\t\t * `cnTranslate`.\n\t\t *\n\t\t * @type {((key: string) => string)|null}\n\t\t */\n\t\ttranslate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The declared crumbs that carry a label.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdeclared() {\n\t\t\tconst list = Array.isArray(this.breadcrumb) ? this.breadcrumb : (this.breadcrumb ? [this.breadcrumb] : [])\n\t\t\treturn list.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/**\n\t\t * The crumbs for CnBreadcrumbs: each declared crumb as a link, then the\n\t\t * current page. Empty without a declared crumb.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {Array<object>}\n\t\t */\n\t\tcrumbs() {\n\t\t\tif (this.declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst out = this.declared.map((crumb) => {\n\t\t\t\tconst entry = { label: (this.translate ?? this.cnTranslate)(crumb.label) }\n\t\t\t\tif (typeof crumb.icon === 'string' && crumb.icon !== '') {\n\t\t\t\t\tentry.icon = crumb.icon\n\t\t\t\t}\n\t\t\t\tif (crumb.route) {\n\t\t\t\t\tentry.to = { name: crumb.route, ...(crumb.params ? { params: crumb.params } : {}), ...(crumb.query ? { query: crumb.query } : {}) }\n\t\t\t\t} else if (crumb.href) {\n\t\t\t\t\tentry.href = crumb.href\n\t\t\t\t}\n\t\t\t\treturn entry\n\t\t\t})\n\t\t\tif (this.current) {\n\t\t\t\tout.push({ label: this.current })\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The text between the crumbs: the first crumb's `separator`, else `/`.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tseparator() {\n\t\t\tconst declared = this.declared[0] && this.declared[0].separator\n\t\t\treturn typeof declared === 'string' && declared !== '' ? declared : '/'\n\t\t},\n\t},\n}\n</script>\n"],"names":["_createBlock","_createElementBlock"],"mappings":";;;;AAWG,EAAA,KAAI,EAAC,6CAA6C;AAClD,EAAA,aAAU,EAAC,iBAAI;;;;AAUf,EAAA,KAAK,EAAC,4BAA4B;AAClC,EAAA,aAAW,EAAC,MAAM;;;;;;;;;;;UAbb,QAAM,CAAA,MAAA,CAAC,MAAM,GAAA,CAAA,IAAK,MAAA,CAAA,IAAA;;AAIjB,QAAA,CAAA,QAAA,CAAA,MAAM,CAAC,MAAM,GAAA,CAAA;0BADnBA,WAMiC,CAAA,wBAAA,EAAA;;AAJjC,cAAA,KAAK,EAAC,+DAAqC;AAC1C,cAAA,MAAE,EAAA,QAAA,CAAA,MAAA;AACF,cAAA,QAAQ,EAAE,QAAA,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA,IAAK,KAAK,SAAC;AAC9B,cAAA,SAAS,EAAE,QAAS,CAAA,SAAA;AACrB,cAAA,aAAW,EAAC,6BAAqB;;;SAE3B,QAAI,CAAA,MAAA,CAAA,MAAA,GAAA,CAAA,IAAA,MAAA,CAAA,IAAA;0BADXC,kBAGmC,CAAA,MAAA,EAHnC,UAGmC,EAAf,GAAQ,CAAA;;;0BAC5BA,2BAAA;;;;;;;;"}
1
+ {"version":3,"file":"CnHeaderTrail.vue3.js","sources":["../../../../src/components/CnPageHeader/CnHeaderTrail.vue?vue&type=template&id=43402970&lang.js"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div\n\t\tv-if=\"crumbs.length > 0 || meta\"\n\t\tclass=\"cn-header-trail cn-detail-page__header-row2\"\n\t\tdata-testid=\"cn-header-trail\">\n\t\t<CnBreadcrumbs\n\t\t\tv-if=\"crumbs.length > 0\"\n\t\t\tclass=\"cn-detail-page__breadcrumbs cn-detail-page__breadcrumbs--row2\"\n\t\t\t:crumbs=\"crumbs\"\n\t\t\t:rootText=\"crumbs[0].icon === undefined\"\n\t\t\t:separator=\"separator\"\n\t\t\tdata-testid=\"cn-header-trail-breadcrumbs\" />\n\t\t<span\n\t\t\tv-if=\"crumbs.length > 0 && meta\"\n\t\t\tclass=\"cn-detail-page__header-dot\"\n\t\t\taria-hidden=\"true\">&middot;</span>\n\t\t<span\n\t\t\tv-if=\"meta\"\n\t\t\tclass=\"cn-detail-page__header-meta\"\n\t\t\tdata-testid=\"cn-header-trail-meta\">{{ meta }}</span>\n\t</div>\n</template>\n\n<script>\nimport { CnBreadcrumbs } from '../CnBreadcrumbs/index.js'\n\n/**\n * The breadcrumb and meta line under a page title: \"Instellingen / Zaaktypen\n * · 12 zaaktypen\". It draws the same markup and classes as the board look's\n * detail header row, so a list, dashboard or settings page carries the\n * detail page's breadcrumb style rather than one of its own.\n *\n * `breadcrumb` is one crumb or a list, each `{ label, route?, params?, href?,\n * icon?, separator? }`. The page title follows as the current crumb.\n */\nexport default {\n\tname: 'CnHeaderTrail',\n\n\tcomponents: { CnBreadcrumbs },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The crumbs before the current page, one object or a list.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current crumb: the page title, already translated. */\n\t\tcurrent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The note after the crumbs and a middle dot, already resolved.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tmeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Translate function for the crumb labels; falls back to the injected\n\t\t * `cnTranslate`.\n\t\t *\n\t\t * @type {((key: string) => string)|null}\n\t\t */\n\t\ttranslate: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The declared crumbs that carry a label.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdeclared() {\n\t\t\tconst list = Array.isArray(this.breadcrumb) ? this.breadcrumb : (this.breadcrumb ? [this.breadcrumb] : [])\n\t\t\treturn list.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/**\n\t\t * The crumbs for CnBreadcrumbs: each declared crumb as a link, then the\n\t\t * current page, once (a last crumb that names the page is dropped).\n\t\t * Empty without a declared crumb.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {Array<object>}\n\t\t */\n\t\tcrumbs() {\n\t\t\tif (this.declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst out = this.declared.map((crumb) => {\n\t\t\t\tconst entry = { label: (this.translate ?? this.cnTranslate)(crumb.label) }\n\t\t\t\tif (typeof crumb.icon === 'string' && crumb.icon !== '') {\n\t\t\t\t\tentry.icon = crumb.icon\n\t\t\t\t}\n\t\t\t\tif (crumb.route) {\n\t\t\t\t\tentry.to = { name: crumb.route, ...(crumb.params ? { params: crumb.params } : {}), ...(crumb.query ? { query: crumb.query } : {}) }\n\t\t\t\t} else if (crumb.href) {\n\t\t\t\t\tentry.href = crumb.href\n\t\t\t\t}\n\t\t\t\treturn entry\n\t\t\t})\n\t\t\tif (this.current) {\n\t\t\t\t// A last crumb naming the page itself is the current one, drawn once.\n\t\t\t\tif (out.length > 0 && out[out.length - 1].label === this.current) {\n\t\t\t\t\tout.pop()\n\t\t\t\t}\n\t\t\t\tout.push({ label: this.current })\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The text between the crumbs: the first crumb's `separator`, else `/`.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tseparator() {\n\t\t\tconst declared = this.declared[0] && this.declared[0].separator\n\t\t\treturn typeof declared === 'string' && declared !== '' ? declared : '/'\n\t\t},\n\t},\n}\n</script>\n"],"names":["_createBlock","_createElementBlock"],"mappings":";;;;AAWG,EAAA,KAAI,EAAC,6CAA6C;AAClD,EAAA,aAAU,EAAC,iBAAI;;;;AAUf,EAAA,KAAK,EAAC,4BAA4B;AAClC,EAAA,aAAW,EAAC,MAAM;;;;;;;;;;;UAbb,QAAM,CAAA,MAAA,CAAC,MAAM,GAAA,CAAA,IAAK,MAAA,CAAA,IAAA;;AAIjB,QAAA,CAAA,QAAA,CAAA,MAAM,CAAC,MAAM,GAAA,CAAA;0BADnBA,WAMiC,CAAA,wBAAA,EAAA;;AAJjC,cAAA,KAAK,EAAC,+DAAqC;AAC1C,cAAA,MAAE,EAAA,QAAA,CAAA,MAAA;AACF,cAAA,QAAQ,EAAE,QAAA,CAAA,MAAM,CAAG,CAAA,CAAA,CAAA,IAAK,KAAK,SAAC;AAC9B,cAAA,SAAS,EAAE,QAAS,CAAA,SAAA;AACrB,cAAA,aAAW,EAAC,6BAAqB;;;SAE3B,QAAI,CAAA,MAAA,CAAA,MAAA,GAAA,CAAA,IAAA,MAAA,CAAA,IAAA;0BADXC,kBAGmC,CAAA,MAAA,EAHnC,UAGmC,EAAf,GAAQ,CAAA;;;0BAC5BA,2BAAA;;;;;;;;"}
@@ -2,7 +2,7 @@ import script from './CnRecordListWidget.vue2.js';
2
2
  import { render } from './CnRecordListWidget.vue3.js';
3
3
 
4
4
  script.render = render;
5
- script.__scopeId = "data-v-2c65cbc2";
5
+ script.__scopeId = "data-v-544b79cd";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -88,7 +88,7 @@ function unwrap(value) {
88
88
  * `rowRoute`, `pageControls`), or `endpointSource` (an app endpoint whose
89
89
  * payload, after `responsePath`, is the array of rows, as on the object table), or `objectRows`
90
90
  * (`{ path, where?, valuePath? }`: rows the page record holds, such as one answer of a case); `avatar` puts a circle with the initials of a name
91
- * template before the title; what differs is the drawing: `presentation` is `rows`, `feed`
91
+ * template before the title (`{ text, size: 32 }` draws the 32px circle 12px from the title, as DqZaakBesluiten); what differs is the drawing: `presentation` is `rows`, `feed`
92
92
  * or `inline`, and each line is a template (`"{identifier} · {caseTypeName}"`,
93
93
  * `"Termijn {deadline|date}"`). `cards` draws a framed card per row in a
94
94
  * grid, with `trailing` as the large figure (board ShBank's accounts).
@@ -284,6 +284,17 @@ var script = {
284
284
  },
285
285
 
286
286
  computed: {
287
+ /**
288
+ * Whether the avatar is the 32px circle (`avatar.size: 32`).
289
+ *
290
+ * @return {boolean}
291
+ * @spec openspec/changes/record-list-avatar-size/specs/record-list-avatar/spec.md#requirement-a-record-list-avatar-can-be-the-small-circle
292
+ */
293
+ avatarSmall() {
294
+ const avatar = this.content?.avatar;
295
+ return Boolean(avatar && typeof avatar === 'object' && Number(avatar.size) === 32)
296
+ },
297
+
287
298
  /** @return {boolean} Whether a row's pill comes before its title (`pillAt: "start"`). */
288
299
  pillFirst() {
289
300
  return this.content?.pillAt === 'start'