@conduction/nextcloud-vue 2.114.0 → 2.115.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 (118) hide show
  1. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue.js +1 -1
  2. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js +1 -1
  3. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue3.js.map +1 -1
  5. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue.js +1 -1
  6. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +6 -2
  7. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  8. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  9. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue.js +1 -1
  10. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js +2 -1
  11. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
  12. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
  13. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  14. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +19 -2
  15. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -3
  17. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  18. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  19. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +2 -2
  20. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  21. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  22. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +37 -1
  23. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  25. package/dist/esm/components/CnIndexPage/rowsToCsv.js +90 -0
  26. package/dist/esm/components/CnIndexPage/rowsToCsv.js.map +1 -0
  27. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue.js +9 -0
  28. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue.js.map +1 -0
  29. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue2.js +161 -0
  30. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue2.js.map +1 -0
  31. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue3.js +97 -0
  32. package/dist/esm/components/CnMacrosWidget/CnMacrosWidget.vue3.js.map +1 -0
  33. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue.js +9 -0
  34. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue.js.map +1 -0
  35. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue2.js +63 -0
  36. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue2.js.map +1 -0
  37. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue3.js +54 -0
  38. package/dist/esm/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue3.js.map +1 -0
  39. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  40. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js +15 -9
  41. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  42. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js +55 -63
  43. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  44. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue.js +1 -1
  45. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js +2 -1
  46. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
  47. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
  48. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue.js +1 -1
  49. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +13 -4
  50. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  51. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +2 -1
  52. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  53. package/dist/esm/components/CnStepper/CnStepper.vue.js +1 -1
  54. package/dist/esm/components/CnStepper/CnStepper.vue2.js.map +1 -1
  55. package/dist/esm/components/CnStepper/CnStepper.vue3.js.map +1 -1
  56. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  57. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +10 -5
  58. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  59. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +1 -1
  60. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  61. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue.js +1 -1
  62. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  63. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +2 -2
  64. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  65. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +32 -20
  66. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  67. package/dist/esm/composables/indexSources.js +43 -11
  68. package/dist/esm/composables/indexSources.js.map +1 -1
  69. package/dist/esm/composables/useTaskInboxStore.js +41 -0
  70. package/dist/esm/composables/useTaskInboxStore.js.map +1 -1
  71. package/dist/esm/index.js +1 -0
  72. package/dist/esm/index.js.map +1 -1
  73. package/dist/esm/l10n/en.json.js +4 -1
  74. package/dist/esm/l10n/en.json.js.map +1 -1
  75. package/dist/esm/l10n/nl.json.js +9 -1
  76. package/dist/esm/l10n/nl.json.js.map +1 -1
  77. package/dist/esm/library-style.js +1 -1
  78. package/dist/esm/nextcloud-vue.css +482 -330
  79. package/dist/esm/utils/contentHeaderLink.js +37 -1
  80. package/dist/esm/utils/contentHeaderLink.js.map +1 -1
  81. package/dist/esm/utils/declaredMacros.js +31 -0
  82. package/dist/esm/utils/declaredMacros.js.map +1 -0
  83. package/dist/esm/utils/libraryWidgetKeys.js +1 -0
  84. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  85. package/dist/nextcloud-vue.cjs.js +2673 -1977
  86. package/dist/nextcloud-vue.cjs.js.map +2 -2
  87. package/dist/nextcloud-vue.css +482 -330
  88. package/l10n/en.json +4 -1
  89. package/l10n/nl.json +9 -1
  90. package/package.json +1 -1
  91. package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +1 -1
  92. package/src/components/CnCellRenderer/CnCellRenderer.vue +6 -2
  93. package/src/components/CnChoiceCards/CnChoiceCards.vue +2 -1
  94. package/src/components/CnDashboardPage/CnDashboardPage.vue +45 -3
  95. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +2 -2
  96. package/src/components/CnIndexPage/CnIndexPage.vue +37 -1
  97. package/src/components/CnIndexPage/rowsToCsv.js +87 -0
  98. package/src/components/CnMacrosWidget/CnMacrosWidget.md +30 -0
  99. package/src/components/CnMacrosWidget/CnMacrosWidget.vue +266 -0
  100. package/src/components/CnMacrosWidget/index.js +6 -0
  101. package/src/components/CnRetentionWidget/CnRetentionRecomputeDialog.vue +104 -0
  102. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +53 -38
  103. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +2 -1
  104. package/src/components/CnSetupWizard/CnSetupWizard.vue +28 -4
  105. package/src/components/CnStepper/CnStepper.vue +2 -1
  106. package/src/components/CnTabsWidget/CnTabsWidget.vue +11 -6
  107. package/src/components/CnTasksWidget/CnTasksWidget.vue +2 -2
  108. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +12 -0
  109. package/src/components/index.js +1 -0
  110. package/src/composables/indexSources.js +43 -11
  111. package/src/composables/useTaskInboxStore.js +41 -0
  112. package/src/css/look-board-detail.css +4 -3
  113. package/src/css/look-board-index.css +62 -0
  114. package/src/css/look-board.css +20 -0
  115. package/src/index.js +1 -0
  116. package/src/utils/contentHeaderLink.js +35 -0
  117. package/src/utils/declaredMacros.js +28 -0
  118. package/src/utils/libraryWidgetKeys.js +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useTaskInboxStore.js","sources":["../../../src/composables/useTaskInboxStore.js"],"sourcesContent":["/**\n * SPDX-License-Identifier: EUPL-1.2\n * SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { defineStore } from 'pinia'\n\n/**\n * The OpenRegister inbox read behind the `tasks` entity source.\n *\n * One endpoint for the whole fleet (ADR-098): every Conduction app runs its\n * human tasks on OpenRegister's one task store, so \"what is waiting for me\"\n * has a single answer per viewer and this store can be app-agnostic.\n *\n * @type {string}\n */\nexport const FLOW_TASKS_URL = '/apps/openregister/api/flow-tasks'\n\n/**\n * The query parameters the inbox read accepts, and the ONLY ones this store\n * forwards. The list is an allowlist on purpose: the endpoint decides whose\n * inbox it answers from the session, and no config key may widen that. A\n * `uid` or `assignee` smuggled into the loader config is dropped here, so\n * \"the source resolves the CURRENT user's inbox\" is enforced structurally\n * rather than by convention.\n *\n * @type {string[]}\n */\n// `isTerminal` is in the list because the SERVER has always accepted it\n// (`TaskController`: \"'true'|'false' to restrict on terminality\") and only\n// this allowlist withheld it. Without it an app cannot express \"closed\" or\n// \"my open work\" as a scope tab: dossiq's task lenses are\n// All / Mine / Unclaimed / Closed / Overdue, and two of those are exactly\n// this filter. Boolean-ish, like `overdue`, so it is stringified on the way\n// out.\n// `kind` is in the list for the same reason `isTerminal` is: the server\n// accepts it (`TaskController`: \"Restrict to one kind of work\") and only this\n// allowlist would withhold it. A kind is what sort of work a task is, as the\n// creating app named it, so it is the one filter that lets a Tasks page say\n// \"the reminders\" without the engine learning what a reminder is. It widens\n// nothing: it narrows within the inbox the session already decides.\nconst ALLOWED_PARAMS = ['scope', 'state', 'isTerminal', 'priority', 'kind', 'overdue', 'dueAfter', 'dueBefore', 'objectUuid', 'sort', 'limit', 'offset']\n\n/**\n * The flat body `POST /api/flow-tasks` takes for a task on a record.\n *\n * Only the task entity's own keys are ever sent, and never `requester` or\n * `state`: OpenRegister pins the requester to the caller and refuses a\n * terminal state. A user task carries `assignee`; a group task carries\n * `performerType: \"group\"` with `candidateGroups` (a pool until someone claims\n * it), because the server defaults `performerType` to `user`.\n *\n * @param {object} data The task to create.\n * @param {string} data.title Required title.\n * @param {string} [data.description] Optional description.\n * @param {string} [data.dueAt] Optional due date, ISO 8601.\n * @param {{objectUuid: string, registerId: string, schemaId: string}} data.anchor The record the task hangs on.\n * @param {{kind: ('user'|'group'), id: string}|null} [data.assignee] A user, or a group as a pool.\n * @return {object} The request body.\n * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n */\nexport function buildFlowTaskBody(data) {\n\tconst body = { title: String(data.title || '').trim() }\n\tif (data.description) {\n\t\tbody.description = data.description\n\t}\n\tif (data.dueAt) {\n\t\tbody.dueAt = data.dueAt\n\t}\n\tconst anchor = data.anchor || {}\n\tbody.objectUuid = anchor.objectUuid\n\tbody.registerId = anchor.registerId\n\tbody.schemaId = anchor.schemaId\n\tif (data.assignee && data.assignee.id) {\n\t\tif (data.assignee.kind === 'group') {\n\t\t\tbody.performerType = 'group'\n\t\t\tbody.candidateGroups = [data.assignee.id]\n\t\t} else {\n\t\t\tbody.assignee = data.assignee.id\n\t\t}\n\t}\n\treturn body\n}\n\n/**\n * Read the server's message off a failed axios call.\n *\n * @param {object} error The axios error.\n * @return {string} The message, or ''.\n */\nfunction serverMessage(error) {\n\tconst data = error && error.response && error.response.data\n\tif (typeof data === 'string') {\n\t\treturn data\n\t}\n\treturn (data && (data.error || data.message)) || (error && error.message) || ''\n}\n\n/**\n * Internal Pinia store for the `tasks` index source (cn-tasks-entity-source).\n *\n * Deliberately NOT a public export: the public surface is the manifest line\n * (`entitySource: \"tasks\"`), and the adapter in `indexSources.js` is its only\n * consumer. Keeping the store internal leaves the HTTP contract in one file\n * should the endpoint move.\n *\n * @spec openspec/changes/cn-tasks-entity-source/specs/cn-tasks-entity-source/spec.md\n */\nexport const useTaskInboxStore = defineStore('cnTaskInbox', {\n\tstate: () => ({\n\t\t/** @type {Array<object>} The inbox rows as the endpoint returned them. */\n\t\ttasks: [],\n\t\t/** @type {number} The datastore total, independent of the page size. */\n\t\ttotal: 0,\n\t\t/** @type {boolean} Whether a load is in flight. */\n\t\tloading: false,\n\t\t/** @type {string|null} The last load failure, for the console trail. */\n\t\terror: null,\n\t}),\n\n\tactions: {\n\t\t/**\n\t\t * Read one inbox page WITHOUT touching the store's state, so a surface\n\t\t * that lists a different slice (the Tasks tab of one record) cannot\n\t\t * overwrite what an inbox page on the same screen shows.\n\t\t *\n\t\t * @param {object} [config] Loader config, as for `load`.\n\t\t * @return {Promise<{results: Array<object>, total: number}>} The rows and the total.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync fetchFor(config = {}) {\n\t\t\tconst params = { scope: 'assigned', sort: '-dueAt' }\n\t\t\tfor (const key of ALLOWED_PARAMS) {\n\t\t\t\tconst value = config ? config[key] : undefined\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tparams[key] = (key === 'overdue' || key === 'isTerminal') ? String(value) : value\n\t\t\t}\n\t\t\tconst response = await axios.get(generateUrl(FLOW_TASKS_URL), { params })\n\t\t\tconst results = response.data?.results || []\n\t\t\treturn { results, total: Number(response.data?.total ?? results.length) || 0 }\n\t\t},\n\n\t\t/**\n\t\t * Create a flow task. A refusal is returned, not thrown, with the\n\t\t * server's message and the HTTP status (404: the creator may not read\n\t\t * the record).\n\t\t *\n\t\t * @param {object} data See `buildFlowTaskBody`.\n\t\t * @return {Promise<{ok: boolean, status: (number|null), task: (object|null), message: string}>} The outcome.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync createTask(data) {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(generateUrl(FLOW_TASKS_URL), buildFlowTaskBody(data))\n\t\t\t\treturn { ok: true, status: response.status || 201, task: response.data?.task || response.data || null, message: '' }\n\t\t\t} catch (error) {\n\t\t\t\treturn { ok: false, status: error?.response?.status ?? null, task: null, message: serverMessage(error) }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Run one lifecycle verb on a task (`claim`, `unclaim`, `reassign`,\n\t\t * `complete`, `cancel`). A refusal is returned, not thrown, with the\n\t\t * server's message, so the row can show it and stay as it was.\n\t\t *\n\t\t * @param {string} uuid The task uuid.\n\t\t * @param {string} verb The verb.\n\t\t * @param {object} [body] Optional body (for `reassign`: `{ assignee }`).\n\t\t * @return {Promise<{ok: boolean, status: (number|null), task: (object|null), message: string}>} The outcome.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync runVerb(uuid, verb, body = {}) {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(generateUrl(`${FLOW_TASKS_URL}/${encodeURIComponent(uuid)}/${encodeURIComponent(verb)}`), body || {})\n\t\t\t\treturn { ok: true, status: response.status || 200, task: response.data?.task || response.data || null, message: '' }\n\t\t\t} catch (error) {\n\t\t\t\treturn { ok: false, status: error?.response?.status ?? null, task: null, message: serverMessage(error) }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load one inbox page.\n\t\t *\n\t\t * Defaults are the inbox's resting shape: the viewer's ASSIGNED tasks,\n\t\t * most urgent due date first (`-dueAt`). Every key is optional and\n\t\t * only allowlisted keys are forwarded; filtering, sorting and paging\n\t\t * are the server's, never applied over a returned page.\n\t\t *\n\t\t * @param {object} [config] Loader config from the page (`sourceConfig`\n\t\t * merged with the active quick-filter tab): `scope`, `state`,\n\t\t * `priority`, `kind`, `overdue`, `objectUuid`, `sort`, `limit`,\n\t\t * `offset`.\n\t\t *\n\t\t * @return {Promise<void>} Resolves when the rows are in the store.\n\t\t *\n\t\t * @spec openspec/changes/cn-tasks-entity-source/specs/cn-tasks-entity-source/spec.md\n\t\t */\n\t\tasync load(config = {}) {\n\t\t\tconst params = { scope: 'assigned', sort: '-dueAt' }\n\t\t\tfor (const key of ALLOWED_PARAMS) {\n\t\t\t\tconst value = config ? config[key] : undefined\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// The endpoint reads `overdue` as a boolean-ish string; a quick\n\t\t\t\t// filter authors it as `true` for legibility.\n\t\t\t\tparams[key] = (key === 'overdue' || key === 'isTerminal') ? String(value) : value\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tthis.error = null\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl(FLOW_TASKS_URL), { params })\n\t\t\t\tthis.tasks = response.data?.results || []\n\t\t\t\tthis.total = Number(response.data?.total ?? this.tasks.length) || 0\n\t\t\t} catch (error) {\n\t\t\t\t// Surfaced, not swallowed: an empty inbox with no trace of why is\n\t\t\t\t// indistinguishable from a healthy quiet one.\n\t\t\t\tthis.error = error?.message || String(error)\n\t\t\t\tthis.tasks = []\n\t\t\t\tthis.total = 0\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[useTaskInboxStore] Loading the task inbox failed', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n})\n"],"names":["axios"],"mappings":"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"}
1
+ {"version":3,"file":"useTaskInboxStore.js","sources":["../../../src/composables/useTaskInboxStore.js"],"sourcesContent":["/**\n * SPDX-License-Identifier: EUPL-1.2\n * SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { defineStore } from 'pinia'\n\n/**\n * The OpenRegister inbox read behind the `tasks` entity source.\n *\n * One endpoint for the whole fleet (ADR-098): every Conduction app runs its\n * human tasks on OpenRegister's one task store, so \"what is waiting for me\"\n * has a single answer per viewer and this store can be app-agnostic.\n *\n * @type {string}\n */\nexport const FLOW_TASKS_URL = '/apps/openregister/api/flow-tasks'\n\n/**\n * The query parameters the inbox read accepts, and the ONLY ones this store\n * forwards. The list is an allowlist on purpose: the endpoint decides whose\n * inbox it answers from the session, and no config key may widen that. A\n * `uid` or `assignee` smuggled into the loader config is dropped here, so\n * \"the source resolves the CURRENT user's inbox\" is enforced structurally\n * rather than by convention.\n *\n * @type {string[]}\n */\n// `isTerminal` is in the list because the SERVER has always accepted it\n// (`TaskController`: \"'true'|'false' to restrict on terminality\") and only\n// this allowlist withheld it. Without it an app cannot express \"closed\" or\n// \"my open work\" as a scope tab: dossiq's task lenses are\n// All / Mine / Unclaimed / Closed / Overdue, and two of those are exactly\n// this filter. Boolean-ish, like `overdue`, so it is stringified on the way\n// out.\n// `kind` is in the list for the same reason `isTerminal` is: the server\n// accepts it (`TaskController`: \"Restrict to one kind of work\") and only this\n// allowlist would withhold it. A kind is what sort of work a task is, as the\n// creating app named it, so it is the one filter that lets a Tasks page say\n// \"the reminders\" without the engine learning what a reminder is. It widens\n// nothing: it narrows within the inbox the session already decides.\nconst ALLOWED_PARAMS = ['scope', 'state', 'isTerminal', 'priority', 'kind', 'overdue', 'dueAfter', 'dueBefore', 'objectUuid', 'sort', 'limit', 'offset']\n\n/**\n * The flat body `POST /api/flow-tasks` takes for a task on a record.\n *\n * Only the task entity's own keys are ever sent, and never `requester` or\n * `state`: OpenRegister pins the requester to the caller and refuses a\n * terminal state. A user task carries `assignee`; a group task carries\n * `performerType: \"group\"` with `candidateGroups` (a pool until someone claims\n * it), because the server defaults `performerType` to `user`.\n *\n * @param {object} data The task to create.\n * @param {string} data.title Required title.\n * @param {string} [data.description] Optional description.\n * @param {string} [data.dueAt] Optional due date, ISO 8601.\n * @param {{objectUuid: string, registerId: string, schemaId: string}} data.anchor The record the task hangs on.\n * @param {{kind: ('user'|'group'), id: string}|null} [data.assignee] A user, or a group as a pool.\n * @return {object} The request body.\n * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n */\nexport function buildFlowTaskBody(data) {\n\tconst body = { title: String(data.title || '').trim() }\n\tif (data.description) {\n\t\tbody.description = data.description\n\t}\n\tif (data.dueAt) {\n\t\tbody.dueAt = data.dueAt\n\t}\n\tconst anchor = data.anchor || {}\n\tbody.objectUuid = anchor.objectUuid\n\tbody.registerId = anchor.registerId\n\tbody.schemaId = anchor.schemaId\n\tif (data.assignee && data.assignee.id) {\n\t\tif (data.assignee.kind === 'group') {\n\t\t\tbody.performerType = 'group'\n\t\t\tbody.candidateGroups = [data.assignee.id]\n\t\t} else {\n\t\t\tbody.assignee = data.assignee.id\n\t\t}\n\t}\n\treturn body\n}\n\n/**\n * Read the server's message off a failed axios call.\n *\n * @param {object} error The axios error.\n * @return {string} The message, or ''.\n */\nfunction serverMessage(error) {\n\tconst data = error && error.response && error.response.data\n\tif (typeof data === 'string') {\n\t\treturn data\n\t}\n\treturn (data && (data.error || data.message)) || (error && error.message) || ''\n}\n\n/**\n * Internal Pinia store for the `tasks` index source (cn-tasks-entity-source).\n *\n * Deliberately NOT a public export: the public surface is the manifest line\n * (`entitySource: \"tasks\"`), and the adapter in `indexSources.js` is its only\n * consumer. Keeping the store internal leaves the HTTP contract in one file\n * should the endpoint move.\n *\n * @spec openspec/changes/cn-tasks-entity-source/specs/cn-tasks-entity-source/spec.md\n */\nexport const useTaskInboxStore = defineStore('cnTaskInbox', {\n\tstate: () => ({\n\t\t/** @type {Array<object>} The inbox rows as the endpoint returned them. */\n\t\ttasks: [],\n\t\t/** @type {number} The datastore total, independent of the page size. */\n\t\ttotal: 0,\n\t\t/** @type {boolean} Whether a load is in flight. */\n\t\tloading: false,\n\t\t/** @type {string|null} The last load failure, for the console trail. */\n\t\terror: null,\n\t\t/** @type {Object<string, object>} Single tasks read for a detail page, keyed on their uuid. */\n\t\trecords: {},\n\t\t/** @type {Object<string, number|null>} The HTTP status of a failed single read, keyed on the uuid. */\n\t\trecordErrors: {},\n\t}),\n\n\tactions: {\n\t\t/**\n\t\t * Read one task into `records`, for a `type: \"detail\"` page on the\n\t\t * `tasks` source. A refusal (403) or a missing task (404) leaves no\n\t\t * record and keeps the status in `recordErrors`, so the page can tell\n\t\t * \"not found\" from \"still loading\". The engine decides what the caller\n\t\t * may read; nothing here widens that.\n\t\t *\n\t\t * @param {string} uuid The task uuid.\n\t\t * @return {Promise<object|null>} The task, or null when it could not be read.\n\t\t * @spec openspec/changes/tasks-record-source/specs/tasks-record-source/spec.md#requirement-the-tasks-source-reads-one-task\n\t\t */\n\t\tasync fetchRecord(uuid) {\n\t\t\tconst key = String(uuid || '').trim()\n\t\t\tif (key === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl(`${FLOW_TASKS_URL}/${encodeURIComponent(key)}`))\n\t\t\t\tconst data = response.data\n\t\t\t\tconst task = data && typeof data === 'object' && data.results && !Array.isArray(data.results) ? data.results : data\n\t\t\t\tconst { [key]: dropped, ...errors } = this.recordErrors\n\t\t\t\tthis.recordErrors = errors\n\t\t\t\tif (!task || typeof task !== 'object' || Array.isArray(task)) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tthis.records = { ...this.records, [key]: task }\n\t\t\t\treturn task\n\t\t\t} catch (error) {\n\t\t\t\tconst { [key]: dropped, ...records } = this.records\n\t\t\t\tthis.records = records\n\t\t\t\tthis.recordErrors = { ...this.recordErrors, [key]: error?.response?.status ?? null }\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(`[useTaskInboxStore] Loading task \"${key}\" failed`, error)\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read one inbox page WITHOUT touching the store's state, so a surface\n\t\t * that lists a different slice (the Tasks tab of one record) cannot\n\t\t * overwrite what an inbox page on the same screen shows.\n\t\t *\n\t\t * @param {object} [config] Loader config, as for `load`.\n\t\t * @return {Promise<{results: Array<object>, total: number}>} The rows and the total.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync fetchFor(config = {}) {\n\t\t\tconst params = { scope: 'assigned', sort: '-dueAt' }\n\t\t\tfor (const key of ALLOWED_PARAMS) {\n\t\t\t\tconst value = config ? config[key] : undefined\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tparams[key] = (key === 'overdue' || key === 'isTerminal') ? String(value) : value\n\t\t\t}\n\t\t\tconst response = await axios.get(generateUrl(FLOW_TASKS_URL), { params })\n\t\t\tconst results = response.data?.results || []\n\t\t\treturn { results, total: Number(response.data?.total ?? results.length) || 0 }\n\t\t},\n\n\t\t/**\n\t\t * Create a flow task. A refusal is returned, not thrown, with the\n\t\t * server's message and the HTTP status (404: the creator may not read\n\t\t * the record).\n\t\t *\n\t\t * @param {object} data See `buildFlowTaskBody`.\n\t\t * @return {Promise<{ok: boolean, status: (number|null), task: (object|null), message: string}>} The outcome.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync createTask(data) {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(generateUrl(FLOW_TASKS_URL), buildFlowTaskBody(data))\n\t\t\t\treturn { ok: true, status: response.status || 201, task: response.data?.task || response.data || null, message: '' }\n\t\t\t} catch (error) {\n\t\t\t\treturn { ok: false, status: error?.response?.status ?? null, task: null, message: serverMessage(error) }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Run one lifecycle verb on a task (`claim`, `unclaim`, `reassign`,\n\t\t * `complete`, `cancel`). A refusal is returned, not thrown, with the\n\t\t * server's message, so the row can show it and stay as it was.\n\t\t *\n\t\t * @param {string} uuid The task uuid.\n\t\t * @param {string} verb The verb.\n\t\t * @param {object} [body] Optional body (for `reassign`: `{ assignee }`).\n\t\t * @return {Promise<{ok: boolean, status: (number|null), task: (object|null), message: string}>} The outcome.\n\t\t * @spec openspec/changes/tasks-tab-flow-task-source/tasks.md#task-1\n\t\t */\n\t\tasync runVerb(uuid, verb, body = {}) {\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(generateUrl(`${FLOW_TASKS_URL}/${encodeURIComponent(uuid)}/${encodeURIComponent(verb)}`), body || {})\n\t\t\t\treturn { ok: true, status: response.status || 200, task: response.data?.task || response.data || null, message: '' }\n\t\t\t} catch (error) {\n\t\t\t\treturn { ok: false, status: error?.response?.status ?? null, task: null, message: serverMessage(error) }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load one inbox page.\n\t\t *\n\t\t * Defaults are the inbox's resting shape: the viewer's ASSIGNED tasks,\n\t\t * most urgent due date first (`-dueAt`). Every key is optional and\n\t\t * only allowlisted keys are forwarded; filtering, sorting and paging\n\t\t * are the server's, never applied over a returned page.\n\t\t *\n\t\t * @param {object} [config] Loader config from the page (`sourceConfig`\n\t\t * merged with the active quick-filter tab): `scope`, `state`,\n\t\t * `priority`, `kind`, `overdue`, `objectUuid`, `sort`, `limit`,\n\t\t * `offset`.\n\t\t *\n\t\t * @return {Promise<void>} Resolves when the rows are in the store.\n\t\t *\n\t\t * @spec openspec/changes/cn-tasks-entity-source/specs/cn-tasks-entity-source/spec.md\n\t\t */\n\t\tasync load(config = {}) {\n\t\t\tconst params = { scope: 'assigned', sort: '-dueAt' }\n\t\t\tfor (const key of ALLOWED_PARAMS) {\n\t\t\t\tconst value = config ? config[key] : undefined\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// The endpoint reads `overdue` as a boolean-ish string; a quick\n\t\t\t\t// filter authors it as `true` for legibility.\n\t\t\t\tparams[key] = (key === 'overdue' || key === 'isTerminal') ? String(value) : value\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tthis.error = null\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl(FLOW_TASKS_URL), { params })\n\t\t\t\tthis.tasks = response.data?.results || []\n\t\t\t\tthis.total = Number(response.data?.total ?? this.tasks.length) || 0\n\t\t\t} catch (error) {\n\t\t\t\t// Surfaced, not swallowed: an empty inbox with no trace of why is\n\t\t\t\t// indistinguishable from a healthy quiet one.\n\t\t\t\tthis.error = error?.message || String(error)\n\t\t\t\tthis.tasks = []\n\t\t\t\tthis.total = 0\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[useTaskInboxStore] Loading the task inbox failed', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n})\n"],"names":["axios"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -222,6 +222,7 @@ export { default as CnLinksWidgetForm } from './components/CnLinksWidgetForm/CnL
222
222
  export { default as CnLockedBanner } from './components/CnLockedBanner/CnLockedBanner.vue.js';
223
223
  export { default as CnLockIndicator } from './components/CnLockIndicator/CnLockIndicator.vue.js';
224
224
  export { default as CnLogsPage } from './components/CnLogsPage/CnLogsPage.vue.js';
225
+ export { default as CnMacrosWidget } from './components/CnMacrosWidget/CnMacrosWidget.vue.js';
225
226
  export { default as CnMailTab } from './components/CnMailTab/CnMailTab.vue.js';
226
227
  export { default as CnMapWidget } from './components/CnMapWidget/CnMapWidget.vue.js';
227
228
  export { default as CnMarkdownEditor } from './components/CnMarkdownEditor/CnMarkdownEditor.vue.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1928,7 +1928,10 @@ var translations = {
1928
1928
  or: "or",
1929
1929
  "no value": "no value",
1930
1930
  yes: "yes",
1931
- no: "no"
1931
+ no: "no",
1932
+ "Recompute nomination": "Recompute nomination",
1933
+ Recompute: "Recompute",
1934
+ "Task deadline": "Deadline"
1932
1935
  };
1933
1936
  var plurals = {
1934
1937
  "{count} member": [
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2140,7 +2140,15 @@ var translations = {
2140
2140
  or: "of",
2141
2141
  "no value": "geen waarde",
2142
2142
  yes: "ja",
2143
- no: "nee"
2143
+ no: "nee",
2144
+ "Recompute nomination": "Nominatie herberekenen",
2145
+ Recompute: "Herberekenen",
2146
+ "Task deadline": "Deadline",
2147
+ "The macro did not run: {error}": "De macro is niet uitgevoerd: {error}",
2148
+ "Last run: {name}, {date}": "Laatst uitgevoerd: {name}, {date}",
2149
+ "This record has no macros": "Er zijn geen macro's voor dit item",
2150
+ "Running …": "Bezig …",
2151
+ Execute: "Uitvoeren"
2144
2152
  };
2145
2153
  var plurals = {
2146
2154
  "{count} member": [
@@ -1 +1 @@
1
- {"version":3,"file":"nl.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"nl.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}