@conduction/nextcloud-vue 2.150.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 (67) 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/CnConversationThread/CnConversationThread.vue.js +1 -1
  7. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +6 -3
  8. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  9. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +13 -1
  10. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  11. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +1 -1
  12. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +5 -1
  13. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  14. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  15. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  16. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +46 -0
  17. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  18. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +64 -64
  19. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  20. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  21. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +15 -1
  22. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  23. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  24. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue.js +1 -1
  25. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue2.js.map +1 -1
  26. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js +16 -5
  27. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js.map +1 -1
  28. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  29. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +25 -2
  30. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  31. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +82 -68
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  33. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  34. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  36. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
  37. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
  38. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +1 -1
  39. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
  40. package/dist/esm/integrations/builtin/calendar/eventStatus.js +43 -2
  41. package/dist/esm/integrations/builtin/calendar/eventStatus.js.map +1 -1
  42. package/dist/esm/l10n/en.json.js +4 -1
  43. package/dist/esm/l10n/en.json.js.map +1 -1
  44. package/dist/esm/l10n/nl.json.js +5 -2
  45. package/dist/esm/l10n/nl.json.js.map +1 -1
  46. package/dist/esm/library-style.js +1 -1
  47. package/dist/esm/nextcloud-vue.css +623 -362
  48. package/dist/nextcloud-vue.cjs.js +894 -720
  49. package/dist/nextcloud-vue.cjs.js.map +2 -2
  50. package/dist/nextcloud-vue.css +623 -362
  51. package/l10n/en.json +4 -1
  52. package/l10n/nl.json +5 -2
  53. package/package.json +1 -1
  54. package/src/components/CnActionDialog/CnActionDialog.vue +17 -4
  55. package/src/components/CnConversationThread/CnConversationThread.vue +16 -2
  56. package/src/components/CnConversationThread/CnConversationWidget.vue +5 -1
  57. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +47 -2
  58. package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
  59. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +15 -1
  60. package/src/components/CnPlanWidget/CnPlanWidgetRow.vue +17 -2
  61. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +45 -2
  62. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +8 -1
  63. package/src/components/CnTimelineWidget/CnTimelineManage.vue +1 -1
  64. package/src/css/dialog.css +6 -0
  65. package/src/css/look-board-detail.css +137 -0
  66. package/src/css/look-board.css +78 -2
  67. package/src/integrations/builtin/calendar/eventStatus.js +42 -1
@@ -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',