@conduction/nextcloud-vue 2.93.0 → 2.94.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 (105) hide show
  1. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +1 -1
  2. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +2 -1
  4. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  6. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +28 -8
  7. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +37 -2
  9. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  10. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  11. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +139 -3
  12. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  13. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js +60 -12
  14. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  15. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +91 -36
  17. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  18. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +115 -72
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  20. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +32 -3
  21. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  22. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +7 -7
  23. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +141 -7
  25. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  26. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +5 -2
  27. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  28. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue.js +8 -0
  29. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue.js.map +1 -0
  30. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js +114 -0
  31. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js.map +1 -0
  32. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue3.js +45 -0
  33. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue3.js.map +1 -0
  34. package/dist/esm/components/CnPageHeader/CnPageHeader.vue2.js +38 -2
  35. package/dist/esm/components/CnPageHeader/CnPageHeader.vue2.js.map +1 -1
  36. package/dist/esm/components/CnPageHeader/CnPageHeader.vue3.js +12 -2
  37. package/dist/esm/components/CnPageHeader/CnPageHeader.vue3.js.map +1 -1
  38. package/dist/esm/components/CnPagination/CnPagination.vue2.js.map +1 -1
  39. package/dist/esm/components/CnPagination/CnPagination.vue3.js +56 -51
  40. package/dist/esm/components/CnPagination/CnPagination.vue3.js.map +1 -1
  41. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  42. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +3 -3
  43. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  44. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  45. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  46. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +24 -0
  47. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  48. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js +3 -1
  49. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  50. package/dist/esm/components/CnTabs/CnTabs.vue.js +1 -1
  51. package/dist/esm/components/CnTabs/CnTabs.vue2.js +39 -2
  52. package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
  53. package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
  54. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  55. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +85 -8
  56. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  57. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +37 -9
  58. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  59. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  60. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  61. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +4 -3
  62. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  63. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
  64. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +20 -0
  65. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  66. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +31 -20
  67. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  68. package/dist/esm/composables/indexSources.js +9 -0
  69. package/dist/esm/composables/indexSources.js.map +1 -1
  70. package/dist/esm/library-style.js +1 -1
  71. package/dist/esm/nextcloud-vue.css +402 -262
  72. package/dist/esm/utils/dueText.js +49 -8
  73. package/dist/esm/utils/dueText.js.map +1 -1
  74. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  75. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  76. package/dist/nextcloud-vue.cjs.js +5779 -4827
  77. package/dist/nextcloud-vue.cjs.js.map +2 -2
  78. package/dist/nextcloud-vue.css +402 -262
  79. package/package.json +1 -1
  80. package/src/components/CnActionsMenu/CnActionsMenu.vue +3 -1
  81. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +39 -1
  82. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +222 -6
  83. package/src/components/CnDashboardPage/CnDashboardPage.vue +96 -2
  84. package/src/components/CnDataTable/CnDataTable.md +1 -0
  85. package/src/components/CnDataTable/CnDataTable.vue +39 -10
  86. package/src/components/CnIndexPage/CnIndexPage.vue +144 -7
  87. package/src/components/CnPageHeader/CnHeaderTrail.vue +140 -0
  88. package/src/components/CnPageHeader/CnPageHeader.md +11 -0
  89. package/src/components/CnPageHeader/CnPageHeader.vue +42 -0
  90. package/src/components/CnPagination/CnPagination.vue +10 -2
  91. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +3 -3
  92. package/src/components/CnSettingsPage/CnSettingsPage.vue +26 -0
  93. package/src/components/CnTabs/CnTabs.vue +39 -2
  94. package/src/components/CnTabsWidget/CnTabsWidget.vue +106 -13
  95. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +4 -3
  96. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +8 -0
  97. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +31 -2
  98. package/src/composables/indexSources.js +9 -0
  99. package/src/css/dialog.css +14 -0
  100. package/src/css/look-board-index.css +27 -1
  101. package/src/css/look-board.css +27 -0
  102. package/src/css/page-header.css +16 -0
  103. package/src/schemas/app-manifest-v2.schema.json +22 -15
  104. package/src/utils/dueText.js +49 -8
  105. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -11,24 +11,30 @@ const _hoisted_3 = {
11
11
  };
12
12
  const _hoisted_4 = ["aria-current", "onClick"];
13
13
  const _hoisted_5 = {
14
+ key: 2,
15
+ class: "cn-pagination__board-link cn-pagination__board-link--wide cn-pagination__board-link--disabled",
16
+ "aria-disabled": "true",
17
+ "data-testid": "cn-pagination-next"
18
+ };
19
+ const _hoisted_6 = {
14
20
  key: 1,
15
21
  class: "cn-pagination__info"
16
22
  };
17
- const _hoisted_6 = { class: "cn-pagination__page-info" };
18
- const _hoisted_7 = {
23
+ const _hoisted_7 = { class: "cn-pagination__page-info" };
24
+ const _hoisted_8 = {
19
25
  key: 2,
20
26
  class: "cn-pagination__nav cn-pagination__nav--compact"
21
27
  };
22
- const _hoisted_8 = {
28
+ const _hoisted_9 = {
23
29
  key: 3,
24
30
  class: "cn-pagination__nav"
25
31
  };
26
- const _hoisted_9 = { class: "cn-pagination__numbers" };
27
- const _hoisted_10 = {
32
+ const _hoisted_10 = { class: "cn-pagination__numbers" };
33
+ const _hoisted_11 = {
28
34
  key: 4,
29
35
  class: "cn-pagination__page-size"
30
36
  };
31
- const _hoisted_11 = ["for"];
37
+ const _hoisted_12 = ["for"];
32
38
 
33
39
  function render(_ctx, _cache, $props, $setup, $data, $options) {
34
40
  const _component_ChevronLeft = resolveComponent("ChevronLeft");
@@ -45,56 +51,55 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
45
51
  ($options.isBoardVariant)
46
52
  ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
47
53
  createElementVNode("span", _hoisted_1, toDisplayString($options.boardCountText), 1 /* TEXT */),
48
- ($props.totalPages > 1)
49
- ? (openBlock(), createElementBlock("nav", {
50
- key: 0,
51
- class: "cn-pagination__board-pages",
52
- "aria-label": _ctx.t('nextcloud-vue', 'Pagination')
54
+ createElementVNode("nav", {
55
+ class: "cn-pagination__board-pages",
56
+ "aria-label": _ctx.t('nextcloud-vue', 'Pagination')
57
+ }, [
58
+ ($props.currentPage > 1)
59
+ ? (openBlock(), createElementBlock("button", {
60
+ key: 0,
61
+ type: "button",
62
+ class: "cn-pagination__board-link cn-pagination__board-link--wide",
63
+ "data-testid": "cn-pagination-prev",
64
+ onClick: _cache[0] || (_cache[0] = $event => ($options.changePage($props.currentPage - 1)))
65
+ }, toDisplayString($props.previousLabel), 1 /* TEXT */))
66
+ : createCommentVNode("v-if", true),
67
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.visiblePages, (page) => {
68
+ return (openBlock(), createElementBlock(Fragment, {
69
+ key: 'board-' + page
53
70
  }, [
54
- ($props.currentPage > 1)
55
- ? (openBlock(), createElementBlock("button", {
56
- key: 0,
57
- type: "button",
58
- class: "cn-pagination__board-link cn-pagination__board-link--wide",
59
- "data-testid": "cn-pagination-prev",
60
- onClick: _cache[0] || (_cache[0] = $event => ($options.changePage($props.currentPage - 1)))
61
- }, toDisplayString($props.previousLabel), 1 /* TEXT */))
62
- : createCommentVNode("v-if", true),
63
- (openBlock(true), createElementBlock(Fragment, null, renderList($options.visiblePages, (page) => {
64
- return (openBlock(), createElementBlock(Fragment, {
65
- key: 'board-' + page
66
- }, [
67
- (page === '...')
68
- ? (openBlock(), createElementBlock("span", _hoisted_3, "..."))
69
- : (openBlock(), createElementBlock("button", {
70
- key: 1,
71
- type: "button",
72
- class: normalizeClass(["cn-pagination__board-link", { 'cn-pagination__board-link--current': page === $props.currentPage }]),
73
- "aria-current": page === $props.currentPage ? 'page' : null,
74
- onClick: $event => ($options.changePage(page))
75
- }, toDisplayString(page), 11 /* TEXT, CLASS, PROPS */, _hoisted_4))
76
- ], 64 /* STABLE_FRAGMENT */))
77
- }), 128 /* KEYED_FRAGMENT */)),
78
- ($props.currentPage < $props.totalPages)
79
- ? (openBlock(), createElementBlock("button", {
71
+ (page === '...')
72
+ ? (openBlock(), createElementBlock("span", _hoisted_3, "..."))
73
+ : (openBlock(), createElementBlock("button", {
80
74
  key: 1,
81
75
  type: "button",
82
- class: "cn-pagination__board-link cn-pagination__board-link--wide",
83
- "data-testid": "cn-pagination-next",
84
- onClick: _cache[1] || (_cache[1] = $event => ($options.changePage($props.currentPage + 1)))
85
- }, toDisplayString($props.nextLabel), 1 /* TEXT */))
86
- : createCommentVNode("v-if", true)
87
- ], 8 /* PROPS */, _hoisted_2))
88
- : createCommentVNode("v-if", true)
76
+ class: normalizeClass(["cn-pagination__board-link", { 'cn-pagination__board-link--current': page === $props.currentPage }]),
77
+ "aria-current": page === $props.currentPage ? 'page' : null,
78
+ onClick: $event => ($options.changePage(page))
79
+ }, toDisplayString(page), 11 /* TEXT, CLASS, PROPS */, _hoisted_4))
80
+ ], 64 /* STABLE_FRAGMENT */))
81
+ }), 128 /* KEYED_FRAGMENT */)),
82
+ ($props.currentPage < $props.totalPages)
83
+ ? (openBlock(), createElementBlock("button", {
84
+ key: 1,
85
+ type: "button",
86
+ class: "cn-pagination__board-link cn-pagination__board-link--wide",
87
+ "data-testid": "cn-pagination-next",
88
+ onClick: _cache[1] || (_cache[1] = $event => ($options.changePage($props.currentPage + 1)))
89
+ }, toDisplayString($props.nextLabel), 1 /* TEXT */))
90
+ : ($props.totalPages <= 1)
91
+ ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString($props.nextLabel), 1 /* TEXT */))
92
+ : createCommentVNode("v-if", true)
93
+ ], 8 /* PROPS */, _hoisted_2)
89
94
  ], 64 /* STABLE_FRAGMENT */))
90
95
  : createCommentVNode("v-if", true),
91
96
  (!$options.isBoardVariant)
92
- ? (openBlock(), createElementBlock("div", _hoisted_5, [
93
- createElementVNode("span", _hoisted_6, toDisplayString($options.pageInfoText), 1 /* TEXT */)
97
+ ? (openBlock(), createElementBlock("div", _hoisted_6, [
98
+ createElementVNode("span", _hoisted_7, toDisplayString($options.pageInfoText), 1 /* TEXT */)
94
99
  ]))
95
100
  : createCommentVNode("v-if", true),
96
101
  (!$options.isBoardVariant && $props.compact && $props.totalPages > 1)
97
- ? (openBlock(), createElementBlock("div", _hoisted_7, [
102
+ ? (openBlock(), createElementBlock("div", _hoisted_8, [
98
103
  createVNode(_component_NcButton, {
99
104
  "aria-label": $props.previousLabel,
100
105
  disabled: $props.currentPage === 1,
@@ -119,7 +124,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
119
124
  }, 8 /* PROPS */, ["aria-label", "disabled"])
120
125
  ]))
121
126
  : (!$options.isBoardVariant && $props.totalPages > 1)
122
- ? (openBlock(), createElementBlock("div", _hoisted_8, [
127
+ ? (openBlock(), createElementBlock("div", _hoisted_9, [
123
128
  createVNode(_component_NcButton, {
124
129
  disabled: $props.currentPage === 1,
125
130
  onClick: _cache[4] || (_cache[4] = $event => ($options.changePage(1)))
@@ -138,7 +143,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
138
143
  ]),
139
144
  _: 1 /* STABLE */
140
145
  }, 8 /* PROPS */, ["disabled"]),
141
- createElementVNode("div", _hoisted_9, [
146
+ createElementVNode("div", _hoisted_10, [
142
147
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.visiblePages, (page) => {
143
148
  return (openBlock(), createElementBlock(Fragment, null, [
144
149
  (page === '...')
@@ -181,8 +186,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
181
186
  ]))
182
187
  : createCommentVNode("v-if", true),
183
188
  (!$props.compact && !$options.isBoardVariant)
184
- ? (openBlock(), createElementBlock("div", _hoisted_10, [
185
- createElementVNode("label", { for: $options.pageSizeId }, toDisplayString($props.itemsPerPageLabel), 9 /* TEXT, PROPS */, _hoisted_11),
189
+ ? (openBlock(), createElementBlock("div", _hoisted_11, [
190
+ createElementVNode("label", { for: $options.pageSizeId }, toDisplayString($props.itemsPerPageLabel), 9 /* TEXT, PROPS */, _hoisted_12),
186
191
  createVNode(_component_NcSelect, {
187
192
  inputId: $options.pageSizeId,
188
193
  class: "cn-pagination__page-size-select",
@@ -1 +1 @@
1
- {"version":3,"file":"CnPagination.vue3.js","sources":["../../../../src/components/CnPagination/CnPagination.vue?vue&type=template&id=81dbade6&lang.js"],"sourcesContent":["<template>\n\t<div\n\t\tv-if=\"totalPages > 1 || totalItems > minItemsToShow || (isBoardVariant && totalItems > 0)\"\n\t\tclass=\"cn-pagination\"\n\t\t:class=\"{ 'cn-pagination--compact': compact, 'cn-pagination--board': isBoardVariant }\"\n\t\tdata-testid=\"cn-pagination\">\n\t\t<!--\n\t\t Board variant (`variant: \"board\"`): the footer of the table card as the\n\t\t screens draw it. The count text at the start, numbered 34px links at\n\t\t the end, \"Previous\" only after the first page and \"Next\" only before\n\t\t the last. No First, no Last, no page-size select.\n\t\t-->\n\t\t<template v-if=\"isBoardVariant\">\n\t\t\t<span class=\"cn-pagination__page-info cn-pagination__board-count\" data-testid=\"cn-pagination-board-count\">\n\t\t\t\t{{ boardCountText }}\n\t\t\t</span>\n\t\t\t<nav v-if=\"totalPages > 1\" class=\"cn-pagination__board-pages\" :aria-label=\"t('nextcloud-vue', 'Pagination')\">\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"currentPage > 1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-pagination__board-link cn-pagination__board-link--wide\"\n\t\t\t\t\tdata-testid=\"cn-pagination-prev\"\n\t\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t\t{{ previousLabel }}\n\t\t\t\t</button>\n\t\t\t\t<template v-for=\"page in visiblePages\" :key=\"'board-' + page\">\n\t\t\t\t\t<span v-if=\"page === '...'\" class=\"cn-pagination__ellipsis\">...</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"cn-pagination__board-link\"\n\t\t\t\t\t\t:class=\"{ 'cn-pagination__board-link--current': page === currentPage }\"\n\t\t\t\t\t\t:aria-current=\"page === currentPage ? 'page' : null\"\n\t\t\t\t\t\t@click=\"changePage(page)\">\n\t\t\t\t\t\t{{ page }}\n\t\t\t\t\t</button>\n\t\t\t\t</template>\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"currentPage < totalPages\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-pagination__board-link cn-pagination__board-link--wide\"\n\t\t\t\t\tdata-testid=\"cn-pagination-next\"\n\t\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t\t{{ nextLabel }}\n\t\t\t\t</button>\n\t\t\t</nav>\n\t\t</template>\n\n\t\t<!-- Page info -->\n\t\t<div v-if=\"!isBoardVariant\" class=\"cn-pagination__info\">\n\t\t\t<span class=\"cn-pagination__page-info\">\n\t\t\t\t{{ pageInfoText }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<!--\n\t\t Compact navigation — a single Previous / Next pair, for the inside of\n\t\t a dashboard widget. The full control (First/Last, numbered pages, a\n\t\t page-size select) is an index-page affordance; dropped into a widget\n\t\t card it is wider than the card and taller than the rows it pages.\n\t\t-->\n\t\t<div v-if=\"!isBoardVariant && compact && totalPages > 1\" class=\"cn-pagination__nav cn-pagination__nav--compact\">\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"previousLabel\"\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\tdata-testid=\"cn-pagination-prev\"\n\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ChevronLeft :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"nextLabel\"\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\tdata-testid=\"cn-pagination-next\"\n\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ChevronRight :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<!-- Page navigation -->\n\t\t<div v-else-if=\"!isBoardVariant && totalPages > 1\" class=\"cn-pagination__nav\">\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\t@click=\"changePage(1)\">\n\t\t\t\t{{ firstLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t{{ previousLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<div class=\"cn-pagination__numbers\">\n\t\t\t\t<template v-for=\"page in visiblePages\">\n\t\t\t\t\t<span v-if=\"page === '...'\" :key=\"'ellipsis-' + page\" class=\"cn-pagination__ellipsis\">...</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:key=\"page\"\n\t\t\t\t\t\t:variant=\"page === currentPage ? 'primary' : 'secondary'\"\n\t\t\t\t\t\t:disabled=\"page === currentPage\"\n\t\t\t\t\t\t@click=\"changePage(page)\">\n\t\t\t\t\t\t{{ page }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</template>\n\t\t\t</div>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t{{ nextLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\t@click=\"changePage(totalPages)\">\n\t\t\t\t{{ lastLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<!-- Page size selector -->\n\t\t<div v-if=\"!compact && !isBoardVariant\" class=\"cn-pagination__page-size\">\n\t\t\t<label :for=\"pageSizeId\">{{ itemsPerPageLabel }}</label>\n\t\t\t<NcSelect\n\t\t\t\t:inputId=\"pageSizeId\"\n\t\t\t\tclass=\"cn-pagination__page-size-select\"\n\t\t\t\t:modelValue=\"currentPageSizeOption\"\n\t\t\t\t:options=\"pageSizeOptions\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:inputLabel=\"itemsPerPageLabel\"\n\t\t\t\t@option:selected=\"changePageSize\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcSelect } from '@nextcloud/vue'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport { nextUid } from '../../utils/uid.js'\n\n/**\n * CnPagination — Full pagination with page numbers, navigation, and page size selector.\n *\n * Extracted from OpenRegister's PaginationComponent. Zero store dependencies.\n * Supports First/Previous/Next/Last buttons, smart page number display with\n * ellipsis, and configurable page size.\n *\n * NL Design tokens used:\n * - Inherits from cn-pagination CSS class (see css/pagination.css)\n *\n * ```vue\n * <CnPagination\n * :current-page=\"page\"\n * :total-pages=\"totalPages\"\n * :total-items=\"totalItems\"\n * :current-page-size=\"limit\"\n * @page-changed=\"onPageChange\"\n * @page-size-changed=\"onPageSizeChange\" />\n * ```\n */\nexport default {\n\tname: 'CnPagination',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcSelect,\n\t\tChevronLeft,\n\t\tChevronRight,\n\t},\n\n\tprops: {\n\t\t/** Current page number (1-based) */\n\t\tcurrentPage: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\n\t\t/** Total number of pages */\n\t\ttotalPages: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\n\t\t/** Total number of items across all pages */\n\t\ttotalItems: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/** Current items per page */\n\t\tcurrentPageSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 20,\n\t\t},\n\n\t\t/** Available page size options */\n\t\tpageSizeOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [\n\t\t\t\t{ value: 10, label: '10' },\n\t\t\t\t{ value: 20, label: '20' },\n\t\t\t\t{ value: 50, label: '50' },\n\t\t\t\t{ value: 100, label: '100' },\n\t\t\t\t{ value: 250, label: '250' },\n\t\t\t\t{ value: 500, label: '500' },\n\t\t\t\t{ value: 1000, label: '1000' },\n\t\t\t],\n\t\t},\n\n\t\t/**\n\t\t * Compact mode — one Previous / Next pair and the item range, sized to\n\t\t * sit inside a dashboard widget's footer. Drops the First/Last\n\t\t * buttons, the numbered pages and the page-size select, none of which\n\t\t * fit in a widget card.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tcompact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * `board` draws the footer of the board look's table card: count text\n\t\t * at the start, numbered pages with Previous and Next at the end, no\n\t\t * First, Last or page-size select. The default (`''`) renders as before.\n\t\t *\n\t\t * @type {('' | 'board')}\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-footer-sits-inside-the-card\n\t\t */\n\t\tvariant: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (value) => value === '' || value === 'board',\n\t\t},\n\n\t\t/**\n\t\t * Free text appended to the board variant's count text (\"20 of 48 ·\n\t\t * click a column header to sort\"). Manifest key `config.footerNote`.\n\t\t */\n\t\tfooterNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Minimum items before pagination is shown */\n\t\tminItemsToShow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 10,\n\t\t},\n\n\t\t/** Label for \"First\" button */\n\t\tfirstLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'First'),\n\t\t},\n\n\t\t/** Label for \"Previous\" button */\n\t\tpreviousLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Previous'),\n\t\t},\n\n\t\t/** Label for \"Next\" button */\n\t\tnextLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Next'),\n\t\t},\n\n\t\t/** Label for \"Last\" button */\n\t\tlastLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Last'),\n\t\t},\n\n\t\t/** Label for \"Items per page:\" */\n\t\titemsPerPageLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Items per page:'),\n\t\t},\n\n\t\t/**\n\t\t * Page info format string. Use {current} and {total} as placeholders.\n\t\t * \"Page {current} of {total}\"\n\t\t */\n\t\tpageInfoFormat: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Page {current} of {total}'),\n\t\t},\n\n\t\t/**\n\t\t * Page info format used in `compact` mode. Placeholders: {from}, {to},\n\t\t * {total} — the item range rather than the page number.\n\t\t */\n\t\tcompactInfoFormat: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', '{from}–{to} of {total}'),\n\t\t},\n\t},\n\n\temits: ['page-changed', 'page-size-changed'],\n\n\tdata() {\n\t\treturn {\n\t\t\t// Per-instance id suffix. In `data()` rather than a computed so it is\n\t\t\t// fixed for the instance's lifetime — the value is referenced by a\n\t\t\t// `<label for>`, which breaks if the id changes between renders.\n\t\t\tuid: nextUid(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Whether the board variant is drawn.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisBoardVariant() {\n\t\t\treturn this.variant === 'board'\n\t\t},\n\n\t\t/**\n\t\t * The board variant's count text: the rows on this page of the total,\n\t\t * `\"{shown} of {total}\"`, plus the page's footer note when it has one.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tboardCountText() {\n\t\t\tconst before = (this.currentPage - 1) * this.currentPageSize\n\t\t\tconst shown = Math.max(0, Math.min(this.currentPageSize, this.totalItems - before))\n\t\t\tconst base = t('nextcloud-vue', '{shown} of {total}', { shown, total: this.totalItems })\n\t\t\treturn this.footerNote ? `${base} · ${this.footerNote}` : base\n\t\t},\n\n\t\tpageSizeId() {\n\t\t\treturn 'cn-page-size-' + this.uid\n\t\t},\n\n\t\tcurrentPageSizeOption() {\n\t\t\treturn this.pageSizeOptions.find((option) => option.value === this.currentPageSize) || this.pageSizeOptions[1]\n\t\t},\n\n\t\tpageInfoText() {\n\t\t\t// Compact mode names the ITEMS, not the pages: in a widget the row\n\t\t\t// range (\"1–5 of 137\") is what the reader is actually looking at,\n\t\t\t// and it is the only honest statement of how much is off-screen.\n\t\t\tif (this.compact) {\n\t\t\t\tconst from = this.totalItems === 0 ? 0 : ((this.currentPage - 1) * this.currentPageSize) + 1\n\t\t\t\tconst to = Math.min(this.currentPage * this.currentPageSize, this.totalItems)\n\t\t\t\treturn this.compactInfoFormat\n\t\t\t\t\t.replace('{from}', from)\n\t\t\t\t\t.replace('{to}', to)\n\t\t\t\t\t.replace('{total}', this.totalItems)\n\t\t\t}\n\t\t\treturn this.pageInfoFormat\n\t\t\t\t.replace('{current}', this.currentPage)\n\t\t\t\t.replace('{total}', this.totalPages)\n\t\t},\n\n\t\t/**\n\t\t * Calculate visible page numbers with ellipsis for large page counts.\n\t\t * Shows up to 7 page numbers at a time.\n\t\t */\n\t\tvisiblePages() {\n\t\t\tconst current = this.currentPage\n\t\t\tconst total = this.totalPages\n\t\t\tconst pages = []\n\n\t\t\tif (total <= 7) {\n\t\t\t\tfor (let i = 1; i <= total; i++) {\n\t\t\t\t\tpages.push(i)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpages.push(1)\n\n\t\t\t\tif (current <= 4) {\n\t\t\t\t\tfor (let i = 2; i <= 5; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tpages.push(total)\n\t\t\t\t} else if (current >= total - 3) {\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tfor (let i = total - 4; i <= total; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tfor (let i = current - 1; i <= current + 1; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tpages.push(total)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pages\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Navigate to a specific page.\n\t\t *\n\t\t * @param {number} page Target page number\n\t\t */\n\t\tchangePage(page) {\n\t\t\tif (page !== this.currentPage && page >= 1 && page <= this.totalPages) {\n\t\t\t\t/** @event page-changed Emitted when page changes. Payload: new page number. */\n\t\t\t\tthis.$emit('page-changed', page)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Change the page size.\n\t\t *\n\t\t * @param {object} option Selected page size option { value, label }\n\t\t */\n\t\tchangePageSize(option) {\n\t\t\tif (option.value !== this.currentPageSize) {\n\t\t\t\t/** @event page-size-changed Emitted when page size changes. Payload: new page size. */\n\t\t\t\tthis.$emit('page-size-changed', option.value)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_Fragment","_createElementVNode","_toDisplayString","_renderList","_openBlock","_createVNode","_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"CnPagination.vue3.js","sources":["../../../../src/components/CnPagination/CnPagination.vue?vue&type=template&id=39f3869d&lang.js"],"sourcesContent":["<template>\n\t<div\n\t\tv-if=\"totalPages > 1 || totalItems > minItemsToShow || (isBoardVariant && totalItems > 0)\"\n\t\tclass=\"cn-pagination\"\n\t\t:class=\"{ 'cn-pagination--compact': compact, 'cn-pagination--board': isBoardVariant }\"\n\t\tdata-testid=\"cn-pagination\">\n\t\t<!--\n\t\t Board variant (`variant: \"board\"`): the footer of the table card as the\n\t\t screens draw it. The count text at the start, numbered 34px links at\n\t\t the end, \"Previous\" only after the first page and \"Next\" only before\n\t\t the last (inert on a single page). No First, no Last, no page-size select.\n\t\t-->\n\t\t<template v-if=\"isBoardVariant\">\n\t\t\t<span class=\"cn-pagination__page-info cn-pagination__board-count\" data-testid=\"cn-pagination-board-count\">\n\t\t\t\t{{ boardCountText }}\n\t\t\t</span>\n\t\t\t<nav class=\"cn-pagination__board-pages\" :aria-label=\"t('nextcloud-vue', 'Pagination')\">\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"currentPage > 1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-pagination__board-link cn-pagination__board-link--wide\"\n\t\t\t\t\tdata-testid=\"cn-pagination-prev\"\n\t\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t\t{{ previousLabel }}\n\t\t\t\t</button>\n\t\t\t\t<template v-for=\"page in visiblePages\" :key=\"'board-' + page\">\n\t\t\t\t\t<span v-if=\"page === '...'\" class=\"cn-pagination__ellipsis\">...</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"cn-pagination__board-link\"\n\t\t\t\t\t\t:class=\"{ 'cn-pagination__board-link--current': page === currentPage }\"\n\t\t\t\t\t\t:aria-current=\"page === currentPage ? 'page' : null\"\n\t\t\t\t\t\t@click=\"changePage(page)\">\n\t\t\t\t\t\t{{ page }}\n\t\t\t\t\t</button>\n\t\t\t\t</template>\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"currentPage < totalPages\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-pagination__board-link cn-pagination__board-link--wide\"\n\t\t\t\t\tdata-testid=\"cn-pagination-next\"\n\t\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t\t{{ nextLabel }}\n\t\t\t\t</button>\n\t\t\t\t<!-- A single page still draws its \"1\" and an inert Next, as the boards do. -->\n\t\t\t\t<span\n\t\t\t\t\tv-else-if=\"totalPages <= 1\"\n\t\t\t\t\tclass=\"cn-pagination__board-link cn-pagination__board-link--wide cn-pagination__board-link--disabled\"\n\t\t\t\t\taria-disabled=\"true\"\n\t\t\t\t\tdata-testid=\"cn-pagination-next\">\n\t\t\t\t\t{{ nextLabel }}\n\t\t\t\t</span>\n\t\t\t</nav>\n\t\t</template>\n\n\t\t<!-- Page info -->\n\t\t<div v-if=\"!isBoardVariant\" class=\"cn-pagination__info\">\n\t\t\t<span class=\"cn-pagination__page-info\">\n\t\t\t\t{{ pageInfoText }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<!--\n\t\t Compact navigation — a single Previous / Next pair, for the inside of\n\t\t a dashboard widget. The full control (First/Last, numbered pages, a\n\t\t page-size select) is an index-page affordance; dropped into a widget\n\t\t card it is wider than the card and taller than the rows it pages.\n\t\t-->\n\t\t<div v-if=\"!isBoardVariant && compact && totalPages > 1\" class=\"cn-pagination__nav cn-pagination__nav--compact\">\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"previousLabel\"\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\tdata-testid=\"cn-pagination-prev\"\n\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ChevronLeft :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"nextLabel\"\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\tdata-testid=\"cn-pagination-next\"\n\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ChevronRight :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<!-- Page navigation -->\n\t\t<div v-else-if=\"!isBoardVariant && totalPages > 1\" class=\"cn-pagination__nav\">\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\t@click=\"changePage(1)\">\n\t\t\t\t{{ firstLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === 1\"\n\t\t\t\t@click=\"changePage(currentPage - 1)\">\n\t\t\t\t{{ previousLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<div class=\"cn-pagination__numbers\">\n\t\t\t\t<template v-for=\"page in visiblePages\">\n\t\t\t\t\t<span v-if=\"page === '...'\" :key=\"'ellipsis-' + page\" class=\"cn-pagination__ellipsis\">...</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:key=\"page\"\n\t\t\t\t\t\t:variant=\"page === currentPage ? 'primary' : 'secondary'\"\n\t\t\t\t\t\t:disabled=\"page === currentPage\"\n\t\t\t\t\t\t@click=\"changePage(page)\">\n\t\t\t\t\t\t{{ page }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</template>\n\t\t\t</div>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\t@click=\"changePage(currentPage + 1)\">\n\t\t\t\t{{ nextLabel }}\n\t\t\t</NcButton>\n\n\t\t\t<NcButton\n\t\t\t\t:disabled=\"currentPage === totalPages\"\n\t\t\t\t@click=\"changePage(totalPages)\">\n\t\t\t\t{{ lastLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<!-- Page size selector -->\n\t\t<div v-if=\"!compact && !isBoardVariant\" class=\"cn-pagination__page-size\">\n\t\t\t<label :for=\"pageSizeId\">{{ itemsPerPageLabel }}</label>\n\t\t\t<NcSelect\n\t\t\t\t:inputId=\"pageSizeId\"\n\t\t\t\tclass=\"cn-pagination__page-size-select\"\n\t\t\t\t:modelValue=\"currentPageSizeOption\"\n\t\t\t\t:options=\"pageSizeOptions\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:inputLabel=\"itemsPerPageLabel\"\n\t\t\t\t@option:selected=\"changePageSize\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcSelect } from '@nextcloud/vue'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport { nextUid } from '../../utils/uid.js'\n\n/**\n * CnPagination — Full pagination with page numbers, navigation, and page size selector.\n *\n * Extracted from OpenRegister's PaginationComponent. Zero store dependencies.\n * Supports First/Previous/Next/Last buttons, smart page number display with\n * ellipsis, and configurable page size.\n *\n * NL Design tokens used:\n * - Inherits from cn-pagination CSS class (see css/pagination.css)\n *\n * ```vue\n * <CnPagination\n * :current-page=\"page\"\n * :total-pages=\"totalPages\"\n * :total-items=\"totalItems\"\n * :current-page-size=\"limit\"\n * @page-changed=\"onPageChange\"\n * @page-size-changed=\"onPageSizeChange\" />\n * ```\n */\nexport default {\n\tname: 'CnPagination',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcSelect,\n\t\tChevronLeft,\n\t\tChevronRight,\n\t},\n\n\tprops: {\n\t\t/** Current page number (1-based) */\n\t\tcurrentPage: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\n\t\t/** Total number of pages */\n\t\ttotalPages: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\n\t\t/** Total number of items across all pages */\n\t\ttotalItems: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/** Current items per page */\n\t\tcurrentPageSize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 20,\n\t\t},\n\n\t\t/** Available page size options */\n\t\tpageSizeOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [\n\t\t\t\t{ value: 10, label: '10' },\n\t\t\t\t{ value: 20, label: '20' },\n\t\t\t\t{ value: 50, label: '50' },\n\t\t\t\t{ value: 100, label: '100' },\n\t\t\t\t{ value: 250, label: '250' },\n\t\t\t\t{ value: 500, label: '500' },\n\t\t\t\t{ value: 1000, label: '1000' },\n\t\t\t],\n\t\t},\n\n\t\t/**\n\t\t * Compact mode — one Previous / Next pair and the item range, sized to\n\t\t * sit inside a dashboard widget's footer. Drops the First/Last\n\t\t * buttons, the numbered pages and the page-size select, none of which\n\t\t * fit in a widget card.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tcompact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * `board` draws the footer of the board look's table card: count text\n\t\t * at the start, numbered pages with Previous and Next at the end, no\n\t\t * First, Last or page-size select. The default (`''`) renders as before.\n\t\t *\n\t\t * @type {('' | 'board')}\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-footer-sits-inside-the-card\n\t\t */\n\t\tvariant: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (value) => value === '' || value === 'board',\n\t\t},\n\n\t\t/**\n\t\t * Free text appended to the board variant's count text (\"20 of 48 ·\n\t\t * click a column header to sort\"). Manifest key `config.footerNote`.\n\t\t */\n\t\tfooterNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Minimum items before pagination is shown */\n\t\tminItemsToShow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 10,\n\t\t},\n\n\t\t/** Label for \"First\" button */\n\t\tfirstLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'First'),\n\t\t},\n\n\t\t/** Label for \"Previous\" button */\n\t\tpreviousLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Previous'),\n\t\t},\n\n\t\t/** Label for \"Next\" button */\n\t\tnextLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Next'),\n\t\t},\n\n\t\t/** Label for \"Last\" button */\n\t\tlastLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Last'),\n\t\t},\n\n\t\t/** Label for \"Items per page:\" */\n\t\titemsPerPageLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Items per page:'),\n\t\t},\n\n\t\t/**\n\t\t * Page info format string. Use {current} and {total} as placeholders.\n\t\t * \"Page {current} of {total}\"\n\t\t */\n\t\tpageInfoFormat: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Page {current} of {total}'),\n\t\t},\n\n\t\t/**\n\t\t * Page info format used in `compact` mode. Placeholders: {from}, {to},\n\t\t * {total} — the item range rather than the page number.\n\t\t */\n\t\tcompactInfoFormat: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', '{from}–{to} of {total}'),\n\t\t},\n\t},\n\n\temits: ['page-changed', 'page-size-changed'],\n\n\tdata() {\n\t\treturn {\n\t\t\t// Per-instance id suffix. In `data()` rather than a computed so it is\n\t\t\t// fixed for the instance's lifetime — the value is referenced by a\n\t\t\t// `<label for>`, which breaks if the id changes between renders.\n\t\t\tuid: nextUid(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Whether the board variant is drawn.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisBoardVariant() {\n\t\t\treturn this.variant === 'board'\n\t\t},\n\n\t\t/**\n\t\t * The board variant's count text: the rows on this page of the total,\n\t\t * `\"{shown} of {total}\"`, plus the page's footer note when it has one.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tboardCountText() {\n\t\t\tconst before = (this.currentPage - 1) * this.currentPageSize\n\t\t\tconst shown = Math.max(0, Math.min(this.currentPageSize, this.totalItems - before))\n\t\t\tconst base = t('nextcloud-vue', '{shown} of {total}', { shown, total: this.totalItems })\n\t\t\treturn this.footerNote ? `${base} · ${this.footerNote}` : base\n\t\t},\n\n\t\tpageSizeId() {\n\t\t\treturn 'cn-page-size-' + this.uid\n\t\t},\n\n\t\tcurrentPageSizeOption() {\n\t\t\treturn this.pageSizeOptions.find((option) => option.value === this.currentPageSize) || this.pageSizeOptions[1]\n\t\t},\n\n\t\tpageInfoText() {\n\t\t\t// Compact mode names the ITEMS, not the pages: in a widget the row\n\t\t\t// range (\"1–5 of 137\") is what the reader is actually looking at,\n\t\t\t// and it is the only honest statement of how much is off-screen.\n\t\t\tif (this.compact) {\n\t\t\t\tconst from = this.totalItems === 0 ? 0 : ((this.currentPage - 1) * this.currentPageSize) + 1\n\t\t\t\tconst to = Math.min(this.currentPage * this.currentPageSize, this.totalItems)\n\t\t\t\treturn this.compactInfoFormat\n\t\t\t\t\t.replace('{from}', from)\n\t\t\t\t\t.replace('{to}', to)\n\t\t\t\t\t.replace('{total}', this.totalItems)\n\t\t\t}\n\t\t\treturn this.pageInfoFormat\n\t\t\t\t.replace('{current}', this.currentPage)\n\t\t\t\t.replace('{total}', this.totalPages)\n\t\t},\n\n\t\t/**\n\t\t * Calculate visible page numbers with ellipsis for large page counts.\n\t\t * Shows up to 7 page numbers at a time.\n\t\t */\n\t\tvisiblePages() {\n\t\t\tconst current = this.currentPage\n\t\t\tconst total = this.totalPages\n\t\t\tconst pages = []\n\n\t\t\tif (total <= 7) {\n\t\t\t\tfor (let i = 1; i <= total; i++) {\n\t\t\t\t\tpages.push(i)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpages.push(1)\n\n\t\t\t\tif (current <= 4) {\n\t\t\t\t\tfor (let i = 2; i <= 5; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tpages.push(total)\n\t\t\t\t} else if (current >= total - 3) {\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tfor (let i = total - 4; i <= total; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tfor (let i = current - 1; i <= current + 1; i++) {\n\t\t\t\t\t\tpages.push(i)\n\t\t\t\t\t}\n\t\t\t\t\tpages.push('...')\n\t\t\t\t\tpages.push(total)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn pages\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Navigate to a specific page.\n\t\t *\n\t\t * @param {number} page Target page number\n\t\t */\n\t\tchangePage(page) {\n\t\t\tif (page !== this.currentPage && page >= 1 && page <= this.totalPages) {\n\t\t\t\t/** @event page-changed Emitted when page changes. Payload: new page number. */\n\t\t\t\tthis.$emit('page-changed', page)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Change the page size.\n\t\t *\n\t\t * @param {object} option Selected page size option { value, label }\n\t\t */\n\t\tchangePageSize(option) {\n\t\t\tif (option.value !== this.currentPageSize) {\n\t\t\t\t/** @event page-size-changed Emitted when page size changes. Payload: new page size. */\n\t\t\t\tthis.$emit('page-size-changed', option.value)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_Fragment","_createElementVNode","_toDisplayString","_renderList","_openBlock","_createVNode","_createBlock"],"mappings":";;;AAaS,EAAA,KAAK,EAAC,qDAAsD;AAAA,EAAA,aAAW,EAAC,2BAA2B;;;;;AAa3E,EAAA,KAAK,EAAC,yBAAyB;;;;;AAsB3D,EAAA,KAAK,EAAC,+FAA8F;AACpG,EAAA,eAAa,EAAC,MAAK;AACnB,EAAA,aAAW,EAAC,oBAAoB;;;;AAOP,EAAA,KAAK,EAAC,qBAAqB;;AAChD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,0BAA0B,GAAA;;;AAWkB,EAAA,KAAK,EAAC,gDAAgD;;;;AAsB5D,EAAA,KAAK,EAAC,oBAAoB;;AAavE,MAAA,WAAA,GAAA,EAAA,KAAK,EAAC,wBAAwB,GAAA;;;AA4BI,EAAA,KAAK,EAAC,0BAA0B;;;;;;;;;;AAlIlE,EAAA,OAAA,CAAA,MAAA,CAAA,kBAAkB,MAAS,CAAA,UAAA,GAAI,qBAAa,KAAM,QAAA,CAAA,cAAe,IAAG,MAAW,CAAA,UAAA,GAAA,CAAA,CAAA;oBADtFA,kBA8IK,CAAA,KAAA,EAAA;;AA5IJ,QAAA,KAAK,EAACC,cAAA,CAAA,CAAA,eAAc,EACgB,EAAA,wBAAA,EAAA,MAAA,CAAA,OAAO,0BAA0B;AACrE,QAAA,aAAW,EAAC,eAAe;;SAOX,QAAc,CAAA,cAAA;0BAA9BD,kBA0CU,CAAAE,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;cAzCTC,kBAEM,CAAA,MAAA,EAFN,UAEM,EAAAC,eAAA,CADF;cAEJD,kBAqCK,CAAA,KAAA,EAAA;AArCA,gBAAA,KAAK,EAAC,4BAA2B;AAAG,gBAAA,YAAU,EAAE,IAAC,CAAA,CAAA,CAAA,eAAA,EAAA,YAAA,CAAA;;iBAE9C,MAAU,CAAA,WAAA,GAAA,CAAA;kCADjBH,kBAOQ,CAAA,QAAA,EAAA;;AALP,sBAAA,IAAI,EAAC,QAAO;AACZ,sBAAA,KAAK,EAAC,2DAA0D;AAChE,sBAAA,aAAW,EAAC,oBAAmB;sBAC9B,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;uCAC1B;;kCAEJA,kBAWU,CAAAE,QAAA,EAAA,IAAA,EAAAG,UAAA,CAXe,QAAY,CAAA,YAAA,EAAA,CAApB,IAAG,KAAA;;oCAAoC,IAAI;;qBAC/C,IAAG,KAAA,KAAA;sCAAfL,kBAAqE,CAAA,MAAA,EAArE,UAAqE,EAAT,KAAG,CAAA;sCAC/DA,kBAQQ,CAAA,QAAA,EAAA;;AANP,0BAAA,IAAI,EAAC,QAAO;AACZ,0BAAA,KAAK,EAACC,cAAA,CAAA,CAAA,2BAA0B,EACgB,EAAA,oCAAA,EAAA,IAAK,KAAI;0BACxD,cAAY,EAAE,IAAG,KAAM,MAAY,CAAA,WAAA,GAAA,MAAA,GAAA,IAAA;0BACnC,OAAK,EAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,IAAI,CAAA,CAAA;2CACpB;;;AAIE,gBAAA,CAAA,MAAA,CAAA,WAAU,GAAI,MAAU,CAAA,UAAA;kCAD/BD,kBAOQ,CAAA,QAAA,EAAA;;AALP,sBAAA,IAAI,EAAC,QAAO;AACZ,sBAAA,KAAK,EAAC,2DAA0D;AAChE,sBAAA,aAAW,EAAC,oBAAmB;sBAC9B,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;uCAC1B,MAAQ,CAAA,SAAA,CAAA,EAAA,CAAA,YAAA;qBAIA,MAAS,CAAA,UAAA,IAAA,CAAA;oCADrBA,kBAMM,CAAA,MAAA,EANN,UAMM,EAAAI,eAAA,CADF,MAAQ,CAAA,SAAA,CAAA,EAAA,CAAA,YAAA;;;;;UAMF,QAAc,CAAA,cAAA;AAA1B,aAAAE,SAAA,EAAA,EAAAN,kBAAA,CAIK,OAJL,UAIK,EAAA;cAHJG,kBAEM,CAAA,MAAA,EAFN,UAEM,EAAAC,eAAA,CADF;;;UAUO,QAAa,CAAA,cAAA,IAAK,MAAM,CAAA,OAAA,IAAK,MAAW,CAAA,UAAA,GAAA,CAAA;AAApD,aAAAE,SAAA,EAAA,EAAAN,kBAAA,CAmBK,OAnBL,UAmBK,EAAA;cAlBJO,WAQU,CAAA,mBAAA,EAAA;AAPR,gBAAA,YAAU,EAAE,MAAa,CAAA,aAAA;AACzB,gBAAA,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAA,CAAA;AACvB,gBAAA,aAAW,EAAC,oBAAmB;gBAC9B,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;;AAClB,gBAAA,IAAI,UACd,MAAyB;kBAAzBA,WAAyB,CAAA,sBAAA,EAAA,EAAX,IAAI,EAAE,EAAE,EAAA,CAAA;;;;cAGxBA,WAQU,CAAA,mBAAA,EAAA;AAPR,gBAAA,YAAU,EAAE,MAAS,CAAA,SAAA;gBACrB,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAI,MAAU,CAAA,UAAA;AACrC,gBAAA,aAAW,EAAC,oBAAmB;gBAC9B,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;;AAClB,gBAAA,IAAI,UACd,MAA0B;kBAA1BA,WAA0B,CAAA,uBAAA,EAAA,EAAX,IAAI,EAAE,EAAE,EAAA,CAAA;;;;;AAMT,YAAA,CAAA,CAAA,QAAA,CAAA,cAAa,IAAK;AAAnC,eAAAD,SAAA,EAAA,EAAAN,kBAAA,CAsCK,OAtCL,UAsCK,EAAA;gBArCJO,WAIU,CAAA,mBAAA,EAAA;AAHR,kBAAA,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAA,CAAA;AACtB,kBAAA,OAAK,uCAAE,QAAU,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;mCAClB,MAAe;oDAAZ,MAAS,CAAA,UAAA,CAAA,EAAA,CAAA,YAAA;;;;gBAGbA,WAIU,CAAA,mBAAA,EAAA;AAHR,kBAAA,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAA,CAAA;kBACtB,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;;mCAC7B,MAAkB;oDAAf;;;;AAGJ,gBAAAJ,kBAAA,CAYK,OAZL,WAYK,EAAA;oCAXJH,kBAUU,CAAAE,QAAA,EAAA,IAAA,EAAAG,UAAA,CAVe,QAAY,CAAA,YAAA,EAAA,CAApB,IAAK,KAAA;;uBACT,IAAG,KAAA,KAAA;wCAAfL,kBAA+F,CAAA,MAAA,EAAA;AAAlE,4BAAA,GAAG,gBAAgB,IAAI;AAAE,4BAAA,KAAK,EAAC,yBAAyB;6BAAC,KAAG,CAAA;wCACzFQ,WAOU,CAAA,mBAAA,EAAA;AALR,4BAAA,GAAG,EAAE,IAAI;4BACT,OAAO,EAAE,IAAK,KAAI,MAAU,CAAA,WAAA,GAAA,SAAA,GAAA,WAAA;4BAC5B,QAAQ,EAAE,IAAK,KAAI,MAAW,CAAA,WAAA;4BAC9B,OAAK,EAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,IAAI,CAAA,CAAA;;6CACvB,MAAS;8DAAN;;;;;;;gBAKND,WAIU,CAAA,mBAAA,EAAA;kBAHR,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAI,MAAU,CAAA,UAAA;kBACpC,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,WAAA,GAAA,CAAA,CAAA,CAAA,CAAA;;mCAC7B,MAAc;oDAAX,MAAQ,CAAA,SAAA,CAAA,EAAA,CAAA,YAAA;;;;gBAGZA,WAIU,CAAA,mBAAA,EAAA;kBAHR,QAAQ,EAAE,MAAY,CAAA,WAAA,KAAI,MAAU,CAAA,UAAA;kBACpC,OAAK,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,MAAA,KAAE,QAAU,CAAA,UAAA,CAAC,MAAU,CAAA,UAAA,CAAA,CAAA,CAAA;;mCAC7B,MAAc;oDAAX,MAAQ,CAAA,SAAA,CAAA,EAAA,CAAA,YAAA;;;;;;AAKD,QAAA,CAAA,CAAA,MAAA,CAAA,OAAM,KAAM,QAAc,CAAA,cAAA;AAAtC,aAAAD,SAAA,EAAA,EAAAN,kBAAA,CAUK,OAVL,WAUK,EAAA;AATJ,cAAAG,kBAAA,CAAuD,OAA/C,EAAA,EAAA,GAAG,EAAE,QAAA,CAAA,UAAU,oBAAK,MAAkB,CAAA,iBAAA,CAAA,EAAA,CAAA,oBAAA,WAAA,CAAA;cAC9CI,WAOoC,CAAA,mBAAA,EAAA;AANlC,gBAAA,OAAO,EAAE,QAAU,CAAA,UAAA;AACpB,gBAAA,KAAK,EAAC,iCAAgC;AACrC,gBAAA,UAAU,EAAE,QAAqB,CAAA,qBAAA;AACjC,gBAAA,OAAO,EAAE,MAAe,CAAA,eAAA;AACxB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,UAAU,EAAE,MAAiB,CAAA,iBAAA;AAC7B,gBAAA,mBAAe,EAAE,QAAc,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-d793cb0e";
5
+ script.__scopeId = "data-v-695c835e";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -550,9 +550,9 @@ var script = {
550
550
  },
551
551
 
552
552
  /**
553
- * The row's due text (`due`: `{ field, todayLabel?, overdueLabel?, emptyText? }`):
554
- * "3 dagen te laat" in the danger tone, "Vandaag", the date otherwise,
555
- * `emptyText` when the field is empty.
553
+ * The row's due text (`due`: `{ field, todayLabel?, overdueLabel?, upcomingLabel?, upcomingWeeksLabel?, upcomingWeeksFrom?, emptyText? }`):
554
+ * "3 dagen te laat" in the danger tone, "Vandaag", the date or the time
555
+ * left ("nog 4 dagen") otherwise, `emptyText` when the field is empty.
556
556
  *
557
557
  * @param {object} row The row.
558
558
  * @return {{text: string, tone: string}|null} The text and tone, or null.