@conduction/nextcloud-vue 2.149.0 → 2.151.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 (78) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +7 -2
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +40 -41
  5. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
  6. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  7. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +12 -0
  8. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  9. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  10. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  11. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +6 -3
  12. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  13. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +13 -1
  14. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  15. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +1 -1
  16. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +5 -1
  17. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  18. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  19. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  20. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +46 -0
  21. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  22. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +64 -64
  23. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  24. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  25. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +15 -1
  26. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  27. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  28. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue.js +1 -1
  29. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue2.js.map +1 -1
  30. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js +16 -5
  31. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js.map +1 -1
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  33. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +25 -2
  34. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +82 -68
  36. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  37. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  38. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  39. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  40. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
  41. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
  42. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +1 -1
  43. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
  44. package/dist/esm/integrations/builtin/calendar/eventStatus.js +43 -2
  45. package/dist/esm/integrations/builtin/calendar/eventStatus.js.map +1 -1
  46. package/dist/esm/l10n/en.json.js +4 -1
  47. package/dist/esm/l10n/en.json.js.map +1 -1
  48. package/dist/esm/l10n/nl.json.js +5 -2
  49. package/dist/esm/l10n/nl.json.js.map +1 -1
  50. package/dist/esm/library-style.js +1 -1
  51. package/dist/esm/nextcloud-vue.css +707 -438
  52. package/dist/esm/utils/fillTemplate.js +19 -2
  53. package/dist/esm/utils/fillTemplate.js.map +1 -1
  54. package/dist/nextcloud-vue.cjs.js +926 -723
  55. package/dist/nextcloud-vue.cjs.js.map +2 -2
  56. package/dist/nextcloud-vue.css +707 -438
  57. package/l10n/en.json +4 -1
  58. package/l10n/nl.json +5 -2
  59. package/package.json +1 -1
  60. package/src/components/CnActionDialog/CnActionDialog.vue +17 -4
  61. package/src/components/CnChartWidget/CnChartWidget.md +1 -1
  62. package/src/components/CnChartWidget/CnChartWidget.vue +12 -0
  63. package/src/components/CnConversationThread/CnConversationThread.vue +16 -2
  64. package/src/components/CnConversationThread/CnConversationWidget.vue +5 -1
  65. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +47 -2
  66. package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
  67. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +15 -1
  68. package/src/components/CnPlanWidget/CnPlanWidgetRow.vue +17 -2
  69. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +45 -2
  70. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +8 -1
  71. package/src/components/CnTimelineWidget/CnTimelineManage.vue +1 -1
  72. package/src/css/board.css +2 -0
  73. package/src/css/dialog.css +6 -0
  74. package/src/css/look-board-detail.css +137 -0
  75. package/src/css/look-board-index.css +5 -1
  76. package/src/css/look-board.css +78 -2
  77. package/src/integrations/builtin/calendar/eventStatus.js +42 -1
  78. package/src/utils/fillTemplate.js +19 -2
@@ -1 +1 @@
1
- {"version":3,"file":"CnPlanWidgetRow.vue2.js","sources":["../../../../src/components/CnPlanWidget/CnPlanWidgetRow.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div class=\"cn-plan-row\" :data-testid=\"`cn-plan-row-${item.key || item.uuid}`\">\n\t\t<span class=\"cn-plan-row__name\">{{ item.name }}</span>\n\t\t<span class=\"cn-plan-row__state\" :data-state=\"item.state\">{{ stateLabel(item.state) }}</span>\n\t\t<NcButton v-if=\"item.state === 'enabled' && item.discretionary\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-enable-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('enable', item)\">\n\t\t\t{{ t('nextcloud-vue', 'Start') }}\n\t\t</NcButton>\n\t\t<NcButton v-for=\"target in targets\"\n\t\t\t:key=\"target\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-${target}-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('transition', item, target)\">\n\t\t\t{{ target === 'completed' ? t('nextcloud-vue', 'Complete') : t('nextcloud-vue', 'Stop') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport { offeredTransitions } from '../../utils/planTree.js'\n\n/**\n * One plan item in CnPlanWidget: its name, its state and the moves offered.\n */\nexport default {\n\tname: 'CnPlanWidgetRow',\n\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/**\n\t\t * The plan item (`uuid`, `key`, `name`, `state`, `type`, `discretionary`).\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** A move is running. */\n\t\tbusy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['enable', 'transition'],\n\n\tcomputed: {\n\t\t/** @return {string[]} The moves offered. */\n\t\ttargets() {\n\t\t\treturn offeredTransitions(this.item)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The word for a state.\n\t\t *\n\t\t * @param {string} state The state.\n\t\t * @return {string}\n\t\t */\n\t\tstateLabel(state) {\n\t\t\tconst labels = {\n\t\t\t\tavailable: t('nextcloud-vue', 'Waiting'),\n\t\t\t\tenabled: t('nextcloud-vue', 'Can start'),\n\t\t\t\tactive: t('nextcloud-vue', 'In progress'),\n\t\t\t\tcompleted: t('nextcloud-vue', 'Done'),\n\t\t\t\tterminated: t('nextcloud-vue', 'Stopped'),\n\t\t\t\tdisabled: t('nextcloud-vue', 'Not needed'),\n\t\t\t}\n\t\t\treturn labels[state] || String(state || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-plan-row {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 8px;\n\tpadding-block: 6px;\n}\n\n.cn-plan-row__name {\n\tflex: 1 1 auto;\n\tfont-weight: 600;\n}\n\n.cn-plan-row__state {\n\tpadding: 2px 10px;\n\tborder-radius: 12px;\n\tbackground: var(--color-background-dark);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state[data-state='active'] {\n\tbackground: var(--color-primary-element-light);\n}\n\n.cn-plan-row__state[data-state='completed'] {\n\tcolor: var(--color-success-text, var(--color-success));\n}\n</style>\n"],"names":["t"],"mappings":";;;;AA6BA;;;AAGA,aAAe;CACd,IAAI,EAAE,iBAAiB;;AAEvB,CAAA,UAAU,EAAE,EAAE,UAAU;;AAExB,CAAA,KAAK,EAAE;AACN;AACC;AACA;;;EAGD,IAAI,EAAE;GACL,IAAI,EAAE,MAAM;GACZ,QAAQ,EAAE,IAAI;GACd;;AAED;EACA,IAAI,EAAE;GACL,IAAI,EAAE,OAAO;GACb,OAAO,EAAE,KAAK;GACd;EACD;;CAED,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;;AAE/B,CAAA,QAAQ,EAAE;AACT;AACA,EAAA,OAAO,GAAG;AACT,GAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAA;GACnC;EACD;;AAED,CAAA,OAAO,EAAE;KACRA,SAAC;;AAED;AACC;AACA;;AAEA;;AAED,EAAA,UAAU,CAAC,KAAK,EAAE;GACjB,MAAM,MAAK,GAAI;AACd,IAAA,SAAS,EAAEA,SAAC,CAAC,eAAe,EAAE,SAAS,CAAC;AACxC,IAAA,OAAO,EAAEA,SAAC,CAAC,eAAe,EAAE,WAAW,CAAC;AACxC,IAAA,MAAM,EAAEA,SAAC,CAAC,eAAe,EAAE,aAAa,CAAC;AACzC,IAAA,SAAS,EAAEA,SAAC,CAAC,eAAe,EAAE,MAAM,CAAC;AACrC,IAAA,UAAU,EAAEA,SAAC,CAAC,eAAe,EAAE,SAAS,CAAC;AACzC,IAAA,QAAQ,EAAEA,SAAC,CAAC,eAAe,EAAE,YAAY,CAAC;AAC3C,KAAA;AACA,GAAA,OAAO,MAAM,CAAC,KAAK,CAAE,IAAG,MAAM,CAAC,KAAI,IAAK,EAAE,CAAA;GAC1C;EACD;AACF;;;;"}
1
+ {"version":3,"file":"CnPlanWidgetRow.vue2.js","sources":["../../../../src/components/CnPlanWidget/CnPlanWidgetRow.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<div class=\"cn-plan-row\" :data-testid=\"`cn-plan-row-${item.key || item.uuid}`\">\n\t\t<span class=\"cn-plan-row__text\">\n\t\t\t<span class=\"cn-plan-row__name\">{{ item.name }}</span>\n\t\t\t<span v-if=\"item.description\" class=\"cn-plan-row__meta\" data-testid=\"cn-plan-row-meta\">{{ item.description }}</span>\n\t\t</span>\n\t\t<span class=\"cn-plan-row__state\" :data-state=\"item.state\">{{ stateLabel(item.state) }}</span>\n\t\t<NcButton v-if=\"item.state === 'enabled' && item.discretionary\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-enable-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('enable', item)\">\n\t\t\t{{ t('nextcloud-vue', 'Start') }}\n\t\t</NcButton>\n\t\t<NcButton v-for=\"target in targets\"\n\t\t\t:key=\"target\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-${target}-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('transition', item, target)\">\n\t\t\t{{ target === 'completed' ? t('nextcloud-vue', 'Complete') : t('nextcloud-vue', 'Stop') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport { offeredTransitions } from '../../utils/planTree.js'\n\n/**\n * One plan item in CnPlanWidget: its name, its state and the moves offered.\n */\nexport default {\n\tname: 'CnPlanWidgetRow',\n\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/**\n\t\t * The plan item (`uuid`, `key`, `name`, `state`, `type`, `discretionary`).\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** A move is running. */\n\t\tbusy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['enable', 'transition'],\n\n\tcomputed: {\n\t\t/** @return {string[]} The moves offered. */\n\t\ttargets() {\n\t\t\treturn offeredTransitions(this.item)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The word for a state.\n\t\t *\n\t\t * @param {string} state The state.\n\t\t * @return {string}\n\t\t */\n\t\tstateLabel(state) {\n\t\t\tconst labels = {\n\t\t\t\tavailable: t('nextcloud-vue', 'Waiting'),\n\t\t\t\tenabled: t('nextcloud-vue', 'Can start'),\n\t\t\t\tactive: t('nextcloud-vue', 'In progress'),\n\t\t\t\tcompleted: t('nextcloud-vue', 'Done'),\n\t\t\t\tterminated: t('nextcloud-vue', 'Stopped'),\n\t\t\t\tdisabled: t('nextcloud-vue', 'Not needed'),\n\t\t\t}\n\t\t\treturn labels[state] || String(state || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-plan-row {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 8px;\n\tpadding-block: 6px;\n}\n\n.cn-plan-row__text {\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-direction: column;\n\tgap: 2px;\n\tmin-width: 0;\n}\n\n.cn-plan-row__name {\n\tfont-weight: 600;\n}\n\n.cn-plan-row__meta {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state {\n\tpadding: 2px 10px;\n\tborder-radius: 12px;\n\tbackground: var(--color-background-dark);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state[data-state='active'] {\n\tbackground: var(--color-primary-element-light);\n}\n\n.cn-plan-row__state[data-state='completed'] {\n\tcolor: var(--color-success-text, var(--color-success));\n}\n</style>\n"],"names":["t"],"mappings":";;;;AAgCA;;;AAGA,aAAe;CACd,IAAI,EAAE,iBAAiB;;AAEvB,CAAA,UAAU,EAAE,EAAE,UAAU;;AAExB,CAAA,KAAK,EAAE;AACN;AACC;AACA;;;EAGD,IAAI,EAAE;GACL,IAAI,EAAE,MAAM;GACZ,QAAQ,EAAE,IAAI;GACd;;AAED;EACA,IAAI,EAAE;GACL,IAAI,EAAE,OAAO;GACb,OAAO,EAAE,KAAK;GACd;EACD;;CAED,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;;AAE/B,CAAA,QAAQ,EAAE;AACT;AACA,EAAA,OAAO,GAAG;AACT,GAAA,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAA;GACnC;EACD;;AAED,CAAA,OAAO,EAAE;KACRA,SAAC;;AAED;AACC;AACA;;AAEA;;AAED,EAAA,UAAU,CAAC,KAAK,EAAE;GACjB,MAAM,MAAK,GAAI;AACd,IAAA,SAAS,EAAEA,SAAC,CAAC,eAAe,EAAE,SAAS,CAAC;AACxC,IAAA,OAAO,EAAEA,SAAC,CAAC,eAAe,EAAE,WAAW,CAAC;AACxC,IAAA,MAAM,EAAEA,SAAC,CAAC,eAAe,EAAE,aAAa,CAAC;AACzC,IAAA,SAAS,EAAEA,SAAC,CAAC,eAAe,EAAE,MAAM,CAAC;AACrC,IAAA,UAAU,EAAEA,SAAC,CAAC,eAAe,EAAE,SAAS,CAAC;AACzC,IAAA,QAAQ,EAAEA,SAAC,CAAC,eAAe,EAAE,YAAY,CAAC;AAC3C,KAAA;AACA,GAAA,OAAO,MAAM,CAAC,KAAK,CAAE,IAAG,MAAM,CAAC,KAAI,IAAK,EAAE,CAAA;GAC1C;EACD;AACF;;;;"}
@@ -1,8 +1,14 @@
1
- import { resolveComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createBlock, withCtx, createTextVNode, createCommentVNode, Fragment, renderList } from 'vue';
1
+ import { resolveComponent, openBlock, createElementBlock, createElementVNode, toDisplayString, createCommentVNode, createBlock, withCtx, createTextVNode, Fragment, renderList } from 'vue';
2
2
 
3
3
  const _hoisted_1 = ["data-testid"];
4
- const _hoisted_2 = { class: "cn-plan-row__name" };
5
- const _hoisted_3 = ["data-state"];
4
+ const _hoisted_2 = { class: "cn-plan-row__text" };
5
+ const _hoisted_3 = { class: "cn-plan-row__name" };
6
+ const _hoisted_4 = {
7
+ key: 0,
8
+ class: "cn-plan-row__meta",
9
+ "data-testid": "cn-plan-row-meta"
10
+ };
11
+ const _hoisted_5 = ["data-state"];
6
12
 
7
13
  function render(_ctx, _cache, $props, $setup, $data, $options) {
8
14
  const _component_NcButton = resolveComponent("NcButton");
@@ -11,11 +17,16 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
11
17
  class: "cn-plan-row",
12
18
  "data-testid": `cn-plan-row-${$props.item.key || $props.item.uuid}`
13
19
  }, [
14
- createElementVNode("span", _hoisted_2, toDisplayString($props.item.name), 1 /* TEXT */),
20
+ createElementVNode("span", _hoisted_2, [
21
+ createElementVNode("span", _hoisted_3, toDisplayString($props.item.name), 1 /* TEXT */),
22
+ ($props.item.description)
23
+ ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString($props.item.description), 1 /* TEXT */))
24
+ : createCommentVNode("v-if", true)
25
+ ]),
15
26
  createElementVNode("span", {
16
27
  class: "cn-plan-row__state",
17
28
  "data-state": $props.item.state
18
- }, toDisplayString($options.stateLabel($props.item.state)), 9 /* TEXT, PROPS */, _hoisted_3),
29
+ }, toDisplayString($options.stateLabel($props.item.state)), 9 /* TEXT, PROPS */, _hoisted_5),
19
30
  ($props.item.state === 'enabled' && $props.item.discretionary)
20
31
  ? (openBlock(), createBlock(_component_NcButton, {
21
32
  key: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"CnPlanWidgetRow.vue3.js","sources":["../../../../src/components/CnPlanWidget/CnPlanWidgetRow.vue?vue&type=template&id=06842774&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-plan-row\" :data-testid=\"`cn-plan-row-${item.key || item.uuid}`\">\n\t\t<span class=\"cn-plan-row__name\">{{ item.name }}</span>\n\t\t<span class=\"cn-plan-row__state\" :data-state=\"item.state\">{{ stateLabel(item.state) }}</span>\n\t\t<NcButton v-if=\"item.state === 'enabled' && item.discretionary\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-enable-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('enable', item)\">\n\t\t\t{{ t('nextcloud-vue', 'Start') }}\n\t\t</NcButton>\n\t\t<NcButton v-for=\"target in targets\"\n\t\t\t:key=\"target\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-${target}-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('transition', item, target)\">\n\t\t\t{{ target === 'completed' ? t('nextcloud-vue', 'Complete') : t('nextcloud-vue', 'Stop') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport { offeredTransitions } from '../../utils/planTree.js'\n\n/**\n * One plan item in CnPlanWidget: its name, its state and the moves offered.\n */\nexport default {\n\tname: 'CnPlanWidgetRow',\n\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/**\n\t\t * The plan item (`uuid`, `key`, `name`, `state`, `type`, `discretionary`).\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** A move is running. */\n\t\tbusy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['enable', 'transition'],\n\n\tcomputed: {\n\t\t/** @return {string[]} The moves offered. */\n\t\ttargets() {\n\t\t\treturn offeredTransitions(this.item)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The word for a state.\n\t\t *\n\t\t * @param {string} state The state.\n\t\t * @return {string}\n\t\t */\n\t\tstateLabel(state) {\n\t\t\tconst labels = {\n\t\t\t\tavailable: t('nextcloud-vue', 'Waiting'),\n\t\t\t\tenabled: t('nextcloud-vue', 'Can start'),\n\t\t\t\tactive: t('nextcloud-vue', 'In progress'),\n\t\t\t\tcompleted: t('nextcloud-vue', 'Done'),\n\t\t\t\tterminated: t('nextcloud-vue', 'Stopped'),\n\t\t\t\tdisabled: t('nextcloud-vue', 'Not needed'),\n\t\t\t}\n\t\t\treturn labels[state] || String(state || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-plan-row {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 8px;\n\tpadding-block: 6px;\n}\n\n.cn-plan-row__name {\n\tflex: 1 1 auto;\n\tfont-weight: 600;\n}\n\n.cn-plan-row__state {\n\tpadding: 2px 10px;\n\tborder-radius: 12px;\n\tbackground: var(--color-background-dark);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state[data-state='active'] {\n\tbackground: var(--color-primary-element-light);\n}\n\n.cn-plan-row__state[data-state='completed'] {\n\tcolor: var(--color-success-text, var(--color-success));\n}\n</style>\n"],"names":["_createElementBlock","_toDisplayString","_createBlock"],"mappings":";;;AAUQ,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,mBAAmB,GAAA;;;;;;uBAD9BA;AAAG,IAAA,KAAK,EAAC,aAAM;AAAA,IAAA,aAAA,iBAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;;uBACsC,kBAAA,EAAnBC,eAAA,CAAA,MAAA,CAAA,IAAI,CAAC,IAAK,CAAA,EAAA,CAAA,YAAA;sBACd,CAAA,MAAA,EAAA;AAAzB,MAAA,KAAK,EAAC,oBAAmB;MAAA,YAAA,EAAA,MAAA,CAAA,IAAA,CAAA,KAAA;uBAAA,QAAA,CAAA,UAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,oBAAA,UAAA,CAAA;AACf,IAAA,CAAA,MAAA,CAAA,IAAI,CAAC,KAAK,KAAO,SAAA,IAAA,MAAA,CAAA,IAAA,CAAA,aAAA;iCAKtB,CAAA,mBAAA,EAAA;;AAJT,UAAA,QAAQ,EAAA,MAAA,CAAA,IAAA;AACR,UAAA,aAAW,oBAAoB,MAAC,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;UAChC,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,IAAI,CAAA,KAAA,CAAA,QAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA;;2BACZ,MAAe;4CAAZ,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,OAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;;sBAEJD,8CAA0B,QAAM,CAAA,OAAA,EAAA,CAAhB,MAAM,KAAA;2BAAtBE;AACC,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,QAAQ,EAAA,MAAA,CAAA,IAAA;QACR,aAAE,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,CAAA,EAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"CnPlanWidgetRow.vue3.js","sources":["../../../../src/components/CnPlanWidget/CnPlanWidgetRow.vue?vue&type=template&id=45566f45&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-plan-row\" :data-testid=\"`cn-plan-row-${item.key || item.uuid}`\">\n\t\t<span class=\"cn-plan-row__text\">\n\t\t\t<span class=\"cn-plan-row__name\">{{ item.name }}</span>\n\t\t\t<span v-if=\"item.description\" class=\"cn-plan-row__meta\" data-testid=\"cn-plan-row-meta\">{{ item.description }}</span>\n\t\t</span>\n\t\t<span class=\"cn-plan-row__state\" :data-state=\"item.state\">{{ stateLabel(item.state) }}</span>\n\t\t<NcButton v-if=\"item.state === 'enabled' && item.discretionary\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-enable-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('enable', item)\">\n\t\t\t{{ t('nextcloud-vue', 'Start') }}\n\t\t</NcButton>\n\t\t<NcButton v-for=\"target in targets\"\n\t\t\t:key=\"target\"\n\t\t\t:disabled=\"busy\"\n\t\t\t:data-testid=\"`cn-plan-${target}-${item.key || item.uuid}`\"\n\t\t\t@click=\"$emit('transition', item, target)\">\n\t\t\t{{ target === 'completed' ? t('nextcloud-vue', 'Complete') : t('nextcloud-vue', 'Stop') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport { offeredTransitions } from '../../utils/planTree.js'\n\n/**\n * One plan item in CnPlanWidget: its name, its state and the moves offered.\n */\nexport default {\n\tname: 'CnPlanWidgetRow',\n\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/**\n\t\t * The plan item (`uuid`, `key`, `name`, `state`, `type`, `discretionary`).\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\titem: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** A move is running. */\n\t\tbusy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: ['enable', 'transition'],\n\n\tcomputed: {\n\t\t/** @return {string[]} The moves offered. */\n\t\ttargets() {\n\t\t\treturn offeredTransitions(this.item)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The word for a state.\n\t\t *\n\t\t * @param {string} state The state.\n\t\t * @return {string}\n\t\t */\n\t\tstateLabel(state) {\n\t\t\tconst labels = {\n\t\t\t\tavailable: t('nextcloud-vue', 'Waiting'),\n\t\t\t\tenabled: t('nextcloud-vue', 'Can start'),\n\t\t\t\tactive: t('nextcloud-vue', 'In progress'),\n\t\t\t\tcompleted: t('nextcloud-vue', 'Done'),\n\t\t\t\tterminated: t('nextcloud-vue', 'Stopped'),\n\t\t\t\tdisabled: t('nextcloud-vue', 'Not needed'),\n\t\t\t}\n\t\t\treturn labels[state] || String(state || '')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-plan-row {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 8px;\n\tpadding-block: 6px;\n}\n\n.cn-plan-row__text {\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-direction: column;\n\tgap: 2px;\n\tmin-width: 0;\n}\n\n.cn-plan-row__name {\n\tfont-weight: 600;\n}\n\n.cn-plan-row__meta {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state {\n\tpadding: 2px 10px;\n\tborder-radius: 12px;\n\tbackground: var(--color-background-dark);\n\tfont-size: 13px;\n}\n\n.cn-plan-row__state[data-state='active'] {\n\tbackground: var(--color-primary-element-light);\n}\n\n.cn-plan-row__state[data-state='completed'] {\n\tcolor: var(--color-success-text, var(--color-success));\n}\n</style>\n"],"names":["_createElementBlock","_createElementVNode","_toDisplayString","_openBlock","_createBlock"],"mappings":";;;AAUQ,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,mBAAmB,GAAA;AACxB,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,mBAAmB,GAAA;;;AAChB,EAAA,KAAA,EAAA,mBAAA;AAAA,EAAA,aAAA,EAAA,kBAAA;;;;;;;uBAHhBA;AAAI,IAAA,KAAE,EAAA,aAAA;AAAA,IAAA,aAAA,iBAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;;AACN,IAAAC,kBAAA,CAGO,QAHP,UAGO,EAAA;AAFN,MAAAA,kBAAA,CAAsD,MAAtD,EAAA,UAAsD,EAAnBC,eAAA,CAAA,MAAA,CAAA,IAAG,CAAE,IAAI,CAAA,EAAA,CAAA,YAAA;AAChC,MAAA,CAAA,MAAA,CAAA,IAAG,CAAA,WAAA;AAAf,WAAAC,SAAA,EAAA,EAAAH,kBAAA,CAAe,MAAf,EAAA,UAAe,EAAAE,eAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,CAAA,EAAA,CAAA,YAAA;;;sBAEe,CAAA,MAAA,EAAA;AAAzB,MAAA,KAAK,EAAC,oBAAmB;MAAA,YAAA,EAAA,MAAA,CAAA,IAAA,CAAA,KAAA;uBAAA,QAAA,CAAA,UAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,oBAAA,UAAA,CAAA;AACf,IAAA,CAAA,MAAA,CAAA,IAAI,CAAC,KAAK,KAAO,SAAA,IAAA,MAAA,CAAA,IAAA,CAAA,aAAA;iCAKtB,CAAA,mBAAA,EAAA;;AAJT,UAAA,QAAQ,EAAA,MAAA,CAAA,IAAA;AACR,UAAA,aAAW,oBAAoB,MAAC,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;UAChC,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,IAAI,CAAA,KAAA,CAAA,QAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA;;2BACZ,MAAe;4CAAZ,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,OAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;;sBAEJF,8CAA0B,QAAM,CAAA,OAAA,EAAA,CAAhB,MAAM,KAAA;2BAAtBI;AACC,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,QAAQ,EAAA,MAAA,CAAA,IAAA;QACR,aAAE,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,CAAA,EAAA,MAAA,CAAA,IAAA,CAAA,GAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;;;;;;;;;;;;;;"}
@@ -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-0e3cf5c3";
5
+ script.__scopeId = "data-v-60a08dcb";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -20,6 +20,7 @@ import { resolveDue } from '../../utils/dueText.js';
20
20
  import { fillCountLabel } from '../../utils/fillCountLabel.js';
21
21
  import { firstFilled, fillTemplate } from '../../utils/fillTemplate.js';
22
22
  import { unwrapAppConfig } from '../../utils/formatMetric.js';
23
+ import { variantForColor } from '../../utils/headerFieldChips.js';
23
24
  import { initialsOf } from '../../utils/initials.js';
24
25
  import { lensUnavailableText, readLensReports } from '../../utils/lensAvailability.js';
25
26
  import { isObjectRowsSpec, objectRowsOf } from '../../utils/objectRows.js';
@@ -429,6 +430,17 @@ var script = {
429
430
  return PRESENTATIONS.includes(value) ? value : 'rows'
430
431
  },
431
432
 
433
+ /**
434
+ * Whether a `rows` row leads with its icon in a round tile
435
+ * (`iconTile: true` beside `icon`), as DqZaakTaken draws "Wat hierna komt".
436
+ *
437
+ * @return {boolean}
438
+ * @spec openspec/changes/record-list-row-icon-tile/specs/record-list/spec.md#requirement-a-record-list-row-can-lead-with-an-icon-tile
439
+ */
440
+ iconTiles() {
441
+ return this.content?.iconTile === true && this.cardIcons
442
+ },
443
+
432
444
  /**
433
445
  * Whether a `cards` card leads its title with an icon: only when the
434
446
  * list declares `icon`, so a card without one has no placeholder.
@@ -2056,7 +2068,11 @@ var script = {
2056
2068
  },
2057
2069
 
2058
2070
  /**
2059
- * The row's pill: `{ field, labels?, colorMap?, variant?, hideValues? }`.
2071
+ * The row's pill: `{ field, labels?, colorMap?, colorField?, variant?, variantWhen?, hideValues? }`.
2072
+ * `variantWhen` (`[{ when, variant }]`, the first whose condition holds for the row) wins over `colorMap`.
2073
+ * `colorField` reads the tone from the row (a colour name such as a
2074
+ * status type's `colour`: purple, teal, blue ...) where `colorMap`
2075
+ * names none (DqMijnWerk "In behandeling" in the status's purple).
2060
2076
  *
2061
2077
  * @param {object} row The row.
2062
2078
  * @param {object} [config] A pill config; the widget's `pill` by default.
@@ -2081,7 +2097,14 @@ var script = {
2081
2097
  const labels = pill.labels && typeof pill.labels === 'object' ? pill.labels : {};
2082
2098
  const map = pill.colorMap && typeof pill.colorMap === 'object' ? pill.colorMap : {};
2083
2099
  const found = Object.keys(map).find((k) => k.toLowerCase() === key.toLowerCase());
2084
- const variant = found ? map[found] : pill.variant;
2100
+ // `variantWhen` colours the pill by the row rather than the value: a
2101
+ // finished case is green whatever its case type calls the final status.
2102
+ const rule = Array.isArray(pill.variantWhen)
2103
+ ? pill.variantWhen.find((entry) => entry && entry.when && evaluateVisibleWhenLocal(entry.when, row || {}))
2104
+ : null;
2105
+ const colour = pill.colorField ? readPath(row, pill.colorField) : null;
2106
+ const fromRow = typeof colour === 'string' && colour !== '' ? variantForColor(colour) : null;
2107
+ const variant = rule ? rule.variant : (found ? map[found] : (fromRow || pill.variant));
2085
2108
  return {
2086
2109
  label: labels[key] ? this.translate(labels[key]) : key,
2087
2110
  variant: isBadgeVariant(variant) ? variant : 'default',