@conduction/nextcloud-vue 2.127.0 → 2.128.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 (45) hide show
  1. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  2. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +3 -113
  3. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  4. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +12 -12
  5. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  6. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +34 -1
  7. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  8. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +16 -8
  9. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  10. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +153 -8
  11. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  12. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +169 -58
  13. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  14. package/dist/esm/components/CnTileWidget/CnTileWidget.vue.js +1 -1
  15. package/dist/esm/components/CnTileWidget/CnTileWidget.vue2.js +11 -0
  16. package/dist/esm/components/CnTileWidget/CnTileWidget.vue2.js.map +1 -1
  17. package/dist/esm/components/CnTileWidget/CnTileWidget.vue3.js +14 -4
  18. package/dist/esm/components/CnTileWidget/CnTileWidget.vue3.js.map +1 -1
  19. package/dist/esm/library-style.js +1 -1
  20. package/dist/esm/mixins/pageFilters.js +142 -0
  21. package/dist/esm/mixins/pageFilters.js.map +1 -0
  22. package/dist/esm/nextcloud-vue.css +269 -74
  23. package/dist/esm/utils/actionLink.js +9 -3
  24. package/dist/esm/utils/actionLink.js.map +1 -1
  25. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  26. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  27. package/dist/nextcloud-vue.cjs.js +1176 -828
  28. package/dist/nextcloud-vue.cjs.js.map +2 -2
  29. package/dist/nextcloud-vue.css +269 -74
  30. package/package.json +1 -1
  31. package/src/components/CnDashboardPage/CnDashboardPage.vue +3 -113
  32. package/src/components/CnDataTable/CnDataTable.vue +40 -1
  33. package/src/components/CnDetailPage/CnDetailPage.md +2 -0
  34. package/src/components/CnDetailPage/CnDetailPage.vue +237 -8
  35. package/src/components/CnTileWidget/CnTileWidget.vue +30 -2
  36. package/src/css/detail-page.css +42 -0
  37. package/src/css/dialog.css +13 -0
  38. package/src/css/look-board-detail.css +1 -1
  39. package/src/css/look-board-index.css +8 -0
  40. package/src/css/look-board.css +97 -0
  41. package/src/css/table.css +12 -0
  42. package/src/mixins/pageFilters.js +138 -0
  43. package/src/schemas/app-manifest-v2.schema.json +41 -3
  44. package/src/utils/actionLink.js +9 -3
  45. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -1726,6 +1726,103 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
1726
1726
  align-self: flex-start;
1727
1727
  }
1728
1728
 
1729
+ /* ---- Warning and error banners (CnBannerWidget) ------------------------- */
1730
+ /* The boards draw a warning or error banner as a tinted box with a 1px edge
1731
+ in its own tone, radius 10, 12px 14px of padding, the text in the main ink
1732
+ (PtInzending "De ontvangstbevestiging kwam niet aan.", PtAccounts
1733
+ "aanmeldingen wachten op goedkeuring"), not NcNoteCard's 4px edge bar. A
1734
+ settings card's notes take the same box, success included
1735
+ (PtBeheerinstellingen "Er is een eigen ondertekeningssleutel ingesteld").
1736
+ @spec openspec/changes/board-banner-note-tone/specs/board-banner-note-tone/spec.md#requirement-a-board-warning-or-error-banner-is-a-tinted-box-with-an-edge-in-its-tone */
1737
+ .cn-look-board .cn-banner-widget .notecard.notecard--warning:not(.cn-look-nextcloud *),
1738
+ .cn-look-board .settings-section .notecard.notecard--warning:not(.cn-look-nextcloud *) {
1739
+ --cn-banner-ground: color-mix(in srgb, var(--color-warning) 13%, var(--color-main-background));
1740
+ --cn-banner-edge: color-mix(in srgb, var(--color-warning) 50%, var(--color-main-background));
1741
+ }
1742
+
1743
+ .cn-look-board .cn-banner-widget .notecard.notecard--error:not(.cn-look-nextcloud *),
1744
+ .cn-look-board .settings-section .notecard.notecard--error:not(.cn-look-nextcloud *) {
1745
+ --cn-banner-ground: color-mix(in srgb, var(--color-error) 7%, var(--color-main-background));
1746
+ --cn-banner-edge: color-mix(in srgb, var(--color-error) 30%, var(--color-main-background));
1747
+ }
1748
+
1749
+ .cn-look-board .settings-section .notecard.notecard--success:not(.cn-look-nextcloud *) {
1750
+ --cn-banner-ground: color-mix(in srgb, var(--color-success) 9%, var(--color-main-background));
1751
+ --cn-banner-edge: color-mix(in srgb, var(--color-success) 30%, var(--color-main-background));
1752
+ }
1753
+
1754
+ .cn-look-board .cn-banner-widget .notecard.notecard--warning:not(.cn-look-nextcloud *),
1755
+ .cn-look-board .cn-banner-widget .notecard.notecard--error:not(.cn-look-nextcloud *),
1756
+ .cn-look-board .settings-section .notecard.notecard--warning:not(.cn-look-nextcloud *),
1757
+ .cn-look-board .settings-section .notecard.notecard--error:not(.cn-look-nextcloud *),
1758
+ .cn-look-board .settings-section .notecard.notecard--success:not(.cn-look-nextcloud *) {
1759
+ --note-card-icon-size: 18px;
1760
+ gap: 10px;
1761
+ margin: 0;
1762
+ padding: 12px 14px;
1763
+ border: 1px solid var(--cn-banner-edge);
1764
+ border-radius: 10px;
1765
+ background-color: var(--cn-banner-ground) !important;
1766
+ color: var(--color-main-text) !important;
1767
+ font-size: 14px;
1768
+ line-height: 1.5;
1769
+ }
1770
+
1771
+ /* A stat-row cell that holds only a banner is the banner: no card around it. */
1772
+ .cn-look-board .cn-index-page-widgets__cell .cn-widget-wrapper:has(.cn-banner-widget):not(:has(.cn-widget-wrapper__header)):not(.cn-look-nextcloud *) {
1773
+ border: none;
1774
+ background: transparent;
1775
+ }
1776
+
1777
+ .cn-look-board .cn-index-page-widgets__cell .cn-widget-wrapper:has(.cn-banner-widget):not(:has(.cn-widget-wrapper__header)):not(.cn-look-nextcloud *) > .cn-widget-wrapper__content {
1778
+ padding: 0;
1779
+ }
1780
+
1781
+ /* ---- Link tiles (CnTileWidget) ------------------------------------------ */
1782
+ /* The board draws a link tile as a rounded card, its icon on the left beside
1783
+ a 15px bold title and a 13px line under it, all left-aligned (PtThemas
1784
+ "Themacatalogus", "Portalen en hun thema's"), not a square with a centred
1785
+ 48px icon.
1786
+ @spec openspec/changes/board-link-tile/specs/board-link-tile/spec.md#requirement-a-board-link-tile-is-a-rounded-card-with-its-icon-beside-the-title */
1787
+ .cn-look-board .cn-tile-widget:not(.cn-look-nextcloud *) {
1788
+ border-radius: var(--cn-board-card-radius, 12px);
1789
+ }
1790
+
1791
+ .cn-look-board .cn-tile-widget .cn-tile-widget__link:not(.cn-look-nextcloud *) {
1792
+ flex-direction: row;
1793
+ justify-content: flex-start;
1794
+ gap: 14px;
1795
+ padding: 20px 22px;
1796
+ }
1797
+
1798
+ .cn-look-board .cn-tile-widget .cn-tile-widget__link:not(.cn-look-nextcloud *):hover {
1799
+ transform: none;
1800
+ }
1801
+
1802
+ .cn-look-board .cn-tile-widget .cn-tile-widget__icon:not(.cn-look-nextcloud *),
1803
+ .cn-look-board .cn-tile-widget .cn-tile-widget__icon--svg:not(.cn-look-nextcloud *) {
1804
+ width: 24px;
1805
+ height: 24px;
1806
+ font-size: 24px;
1807
+ }
1808
+
1809
+ .cn-look-board .cn-tile-widget .cn-tile-widget__text:not(.cn-look-nextcloud *) {
1810
+ display: flex;
1811
+ flex-direction: column;
1812
+ gap: 2px;
1813
+ min-width: 0;
1814
+ }
1815
+
1816
+ .cn-look-board .cn-tile-widget .cn-tile-widget__title:not(.cn-look-nextcloud *),
1817
+ .cn-look-board .cn-tile-widget .cn-tile-widget__subtitle:not(.cn-look-nextcloud *) {
1818
+ text-align: start;
1819
+ }
1820
+
1821
+ .cn-look-board .cn-tile-widget .cn-tile-widget__title:not(.cn-look-nextcloud *) {
1822
+ font-size: 15px;
1823
+ line-height: 1.2;
1824
+ }
1825
+
1729
1826
  /* A record list's notice is the board's note box too: 10px 14px, radius 10
1730
1827
  (DqZaaktypeOverzicht).
1731
1828
  @spec openspec/changes/board-record-list-notice-box/specs/board-record-list-notice-box/spec.md#requirement-a-board-record-list-notice-is-the-boards-note-box */
@@ -2740,6 +2837,19 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
2740
2837
  border-radius: 8px;
2741
2838
  }
2742
2839
 
2840
+ /* A field's help line sits right under the control in 13px muted ink, flush
2841
+ with the label, as the boards draw it (PtUitnodigen "De uitnodiging met een
2842
+ eenmalige code gaat naar dit adres.", PtAccountUitgeven). The ink carries
2843
+ `!important` against a theme that colours every span and p (thematiq).
2844
+ @spec openspec/changes/board-dialog-field-help/specs/board-dialog-field-help/spec.md#requirement-a-board-dialog-fields-help-line-is-13px-muted-under-the-control */
2845
+ .cn-dialog-board .dialog__content .input-field__helper-text-message,
2846
+ .cn-dialog-board .dialog__content .textarea__helper-text-message {
2847
+ padding: 4px 0 0;
2848
+ color: var(--color-text-maxcontrast) !important;
2849
+ font-size: 13px;
2850
+ line-height: 1.3;
2851
+ }
2852
+
2743
2853
  .cn-dialog-board .dialog__content .input-field:has(.input-field__label) .input-field__input:not(:focus)::placeholder,
2744
2854
  .cn-dialog-board .dialog__content .textarea__input:not(:focus)::placeholder {
2745
2855
  opacity: 1 !important;
@@ -4983,6 +5093,14 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
4983
5093
  color: var(--color-primary-element-light-text);
4984
5094
  }
4985
5095
 
5096
+ /* A row the manifest marks as asking for attention (`config.rowClass` with
5097
+ `class: "cn-row--attention"`) is tinted warm, as the boards draw the open
5098
+ requests on top of a list (PtToegangsverzoeken, PtUitnodigingen).
5099
+ @spec openspec/changes/board-attention-row/specs/board-attention-row/spec.md#requirement-a-board-table-row-marked-for-attention-is-tinted-warm */
5100
+ .cn-look-board .cn-data-table tr.cn-row--attention > td:not(.cn-look-nextcloud *) {
5101
+ background: color-mix(in srgb, var(--color-warning) 4%, var(--color-main-background));
5102
+ }
5103
+
4986
5104
  /* ---- A kanban column's show-more button ---------------------------------- */
4987
5105
  /* The board draws "Toon 12 meer" in the soft ink, its dashed edge in the 3:1
4988
5106
  control colour, 6px in at the sides (DqWerkbord); the view draws the main
@@ -5181,6 +5299,18 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
5181
5299
  text-overflow: ellipsis;
5182
5300
  }
5183
5301
 
5302
+ /* The overline of a cell (`columns[].overline` / `overlineText`): muted and
5303
+ smaller, on its own line above the value. Same theme hooks as the
5304
+ secondary line. */
5305
+ .cn-data-table .cn-table-cell__overline {
5306
+ display: block;
5307
+ color: var(--cn-table-secondary-color, var(--color-text-maxcontrast));
5308
+ font-size: var(--cn-table-secondary-size, 0.9em);
5309
+ line-height: 1.35;
5310
+ overflow: hidden;
5311
+ text-overflow: ellipsis;
5312
+ }
5313
+
5184
5314
  /* Back to wrapping, for a column holding prose rather than a label:
5185
5315
  `columns: [{ key: 'description', cellClass: 'cn-cell--wrap' }]`. */
5186
5316
  .cn-data-table th.cn-cell--wrap,
@@ -9195,6 +9325,48 @@ a.cn-kpi-card--board * {
9195
9325
  flex: 1 1 300px;
9196
9326
  }
9197
9327
 
9328
+ /* The band (`config.band`): a wrapping row across the page, above the body
9329
+ and the side column. An entry takes `--cn-band-span` twelfths of the row,
9330
+ less its share of the gaps, and wraps under 220px. It is a full line in the
9331
+ with-side flex row, like every child but the body and the column. */
9332
+ .cn-detail-page__band {
9333
+ display: flex;
9334
+ flex-wrap: wrap;
9335
+ gap: calc(5 * var(--default-grid-baseline));
9336
+ margin-block-end: calc(5 * var(--default-grid-baseline));
9337
+ }
9338
+
9339
+ /* The page filters: a right-aligned row above the band's widgets, a label
9340
+ before each control. */
9341
+ .cn-detail-page__page-filters {
9342
+ display: flex;
9343
+ flex: 1 1 100%;
9344
+ flex-wrap: wrap;
9345
+ justify-content: flex-end;
9346
+ align-items: center;
9347
+ gap: calc(2 * var(--default-grid-baseline)) calc(4 * var(--default-grid-baseline));
9348
+ }
9349
+
9350
+ .cn-detail-page__page-filter {
9351
+ display: inline-flex;
9352
+ align-items: center;
9353
+ gap: calc(2 * var(--default-grid-baseline));
9354
+ }
9355
+
9356
+ .cn-detail-page__page-filter-label {
9357
+ color: var(--color-text-maxcontrast);
9358
+ font-size: 14px;
9359
+ }
9360
+
9361
+ .cn-detail-page__band-item {
9362
+ flex: 1 1 calc(var(--cn-band-span, 12) / 12 * 100% - calc(5 * var(--default-grid-baseline)));
9363
+ min-width: min(220px, 100%);
9364
+ }
9365
+
9366
+ .cn-detail-page__band-item--full {
9367
+ flex-basis: 100%;
9368
+ }
9369
+
9198
9370
  .cn-detail-page__side {
9199
9371
  display: flex;
9200
9372
  flex-direction: column;
@@ -9855,7 +10027,7 @@ li[data-cn-admin-tag] > .action-link::after {
9855
10027
  }
9856
10028
 
9857
10029
  /* The same for a CnDetailCard (DqTaak "Notities", DqZaakEmail "E-mail",
9858
- DqZaakTaken "Afspraken", DqHandhaving "Historie"). */
10030
+ DqZaakTaken "Afspraken", DqHandhaving "Historie", PtInzending "Bewijslog"). */
9859
10031
  .cn-look-board.cn-detail-page .cn-detail-card__header .cn-detail-card__icon {
9860
10032
  display: none;
9861
10033
  }
@@ -15938,6 +16110,18 @@ svg.leaflet-image-layer.leaflet-interactive path {
15938
16110
  text-overflow: ellipsis;
15939
16111
  }
15940
16112
 
16113
+ /* The overline of a cell (`columns[].overline` / `overlineText`): muted and
16114
+ smaller, on its own line above the value. Same theme hooks as the
16115
+ secondary line. */
16116
+ .cn-data-table .cn-table-cell__overline {
16117
+ display: block;
16118
+ color: var(--cn-table-secondary-color, var(--color-text-maxcontrast));
16119
+ font-size: var(--cn-table-secondary-size, 0.9em);
16120
+ line-height: 1.35;
16121
+ overflow: hidden;
16122
+ text-overflow: ellipsis;
16123
+ }
16124
+
15941
16125
  /* Back to wrapping, for a column holding prose rather than a label:
15942
16126
  `columns: [{ key: 'description', cellClass: 'cn-cell--wrap' }]`. */
15943
16127
  .cn-data-table th.cn-cell--wrap,
@@ -47201,7 +47385,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47201
47385
  }
47202
47386
 
47203
47387
 
47204
- .cn-tile-widget[data-v-28963e83] {
47388
+ .cn-tile-widget[data-v-a62ef4d8] {
47205
47389
  height: 100%;
47206
47390
  width: 100%;
47207
47391
  position: absolute;
@@ -47210,7 +47394,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47210
47394
  overflow: hidden;
47211
47395
  background-color: var(--cn-tile-bg);
47212
47396
  }
47213
- .cn-tile-widget__link[data-v-28963e83] {
47397
+ .cn-tile-widget__link[data-v-a62ef4d8] {
47214
47398
  display: flex;
47215
47399
  flex-direction: column;
47216
47400
  align-items: center;
@@ -47224,11 +47408,11 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47224
47408
  background-color: var(--cn-tile-bg);
47225
47409
  color: var(--cn-tile-text);
47226
47410
  }
47227
- .cn-tile-widget__link[data-v-28963e83]:hover {
47411
+ .cn-tile-widget__link[data-v-a62ef4d8]:hover {
47228
47412
  transform: scale(1.02);
47229
47413
  opacity: 0.95;
47230
47414
  }
47231
- .cn-tile-widget__icon[data-v-28963e83] {
47415
+ .cn-tile-widget__icon[data-v-a62ef4d8] {
47232
47416
  font-size: 48px;
47233
47417
  width: 48px;
47234
47418
  height: 48px;
@@ -47237,11 +47421,11 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47237
47421
  justify-content: center;
47238
47422
  flex-shrink: 0;
47239
47423
  }
47240
- .cn-tile-widget__icon--svg[data-v-28963e83] {
47424
+ .cn-tile-widget__icon--svg[data-v-a62ef4d8] {
47241
47425
  width: 48px;
47242
47426
  height: 48px;
47243
47427
  }
47244
- .cn-tile-widget__icon span.icon[data-v-28963e83] {
47428
+ .cn-tile-widget__icon span.icon[data-v-a62ef4d8] {
47245
47429
  display: inline-block;
47246
47430
  width: 48px;
47247
47431
  height: 48px;
@@ -47251,18 +47435,29 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47251
47435
  /* A CSS-class icon is a dark background-image, so it is inverted to white to
47252
47436
  read against the tint. An untinted tile sits on the page background, where
47253
47437
  white would be invisible in a light theme, so it keeps its own colour. */
47254
- .cn-tile-widget--tinted .cn-tile-widget__icon span.icon[data-v-28963e83] {
47438
+ .cn-tile-widget--tinted .cn-tile-widget__icon span.icon[data-v-a62ef4d8] {
47255
47439
  filter: brightness(0) invert(1);
47256
47440
  }
47257
- .cn-tile-widget__icon img[data-v-28963e83] {
47441
+ .cn-tile-widget__icon img[data-v-a62ef4d8] {
47258
47442
  width: 100%;
47259
47443
  height: 100%;
47260
47444
  object-fit: contain;
47261
47445
  }
47262
- .cn-tile-widget__emoji[data-v-28963e83] {
47446
+ .cn-tile-widget__emoji[data-v-a62ef4d8] {
47263
47447
  font-size: 48px;
47264
47448
  }
47265
- .cn-tile-widget__title[data-v-28963e83] {
47449
+
47450
+ /* The text block takes no box of its own outside the board look, so the
47451
+ title stays a direct flex item of the link. */
47452
+ .cn-tile-widget__text[data-v-a62ef4d8] {
47453
+ display: contents;
47454
+ }
47455
+ .cn-tile-widget__subtitle[data-v-a62ef4d8] {
47456
+ font-size: 13px;
47457
+ text-align: center;
47458
+ opacity: 0.85;
47459
+ }
47460
+ .cn-tile-widget__title[data-v-a62ef4d8] {
47266
47461
  font-size: 16px;
47267
47462
  font-weight: 700;
47268
47463
  text-align: center;
@@ -47298,7 +47493,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47298
47493
  }
47299
47494
 
47300
47495
 
47301
- .cn-dashboard-page[data-v-61fc1aa7] {
47496
+ .cn-dashboard-page[data-v-2853e370] {
47302
47497
  padding: 20px;
47303
47498
  max-width: 1800px;
47304
47499
  /* Centre the leftover space once the cap engages, so a wide screen shows
@@ -47312,7 +47507,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47312
47507
  overflow-y: auto;
47313
47508
  box-sizing: border-box;
47314
47509
  }
47315
- .cn-dashboard-page__header[data-v-61fc1aa7] {
47510
+ .cn-dashboard-page__header[data-v-2853e370] {
47316
47511
  display: flex;
47317
47512
  justify-content: space-between;
47318
47513
  align-items: flex-start;
@@ -47324,21 +47519,21 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47324
47519
  room. Only the HEADER shifts right — body widgets keep full width. */
47325
47520
  padding-inline-start: 56px;
47326
47521
  }
47327
- .cn-dashboard-page__header-left[data-v-61fc1aa7] {
47522
+ .cn-dashboard-page__header-left[data-v-2853e370] {
47328
47523
  min-width: 0;
47329
47524
  }
47330
- .cn-dashboard-page__title-row[data-v-61fc1aa7] {
47525
+ .cn-dashboard-page__title-row[data-v-2853e370] {
47331
47526
  display: flex;
47332
47527
  align-items: center;
47333
47528
  flex-wrap: wrap;
47334
47529
  gap: 12px;
47335
47530
  }
47336
- .cn-dashboard-page__title[data-v-61fc1aa7] {
47531
+ .cn-dashboard-page__title[data-v-2853e370] {
47337
47532
  margin: 0;
47338
47533
  font-size: 20px;
47339
47534
  font-weight: 700;
47340
47535
  }
47341
- .cn-dashboard-page__description[data-v-61fc1aa7] {
47536
+ .cn-dashboard-page__description[data-v-2853e370] {
47342
47537
  margin: 4px 0 0;
47343
47538
  font-size: 14px;
47344
47539
  color: var(--color-text-maxcontrast);
@@ -47346,19 +47541,19 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47346
47541
 
47347
47542
  /* Board look (screens-dashboard-parity): h1 28/700, a 15px grey subtitle 6px
47348
47543
  under it, and 40px buttons with a 10px gap. */
47349
- .cn-dashboard-page--board .cn-dashboard-page__title[data-v-61fc1aa7] {
47544
+ .cn-dashboard-page--board .cn-dashboard-page__title[data-v-2853e370] {
47350
47545
  font-size: 28px;
47351
47546
  font-weight: 700;
47352
47547
  line-height: 1.2;
47353
47548
  }
47354
- .cn-dashboard-page--board .cn-dashboard-page__description[data-v-61fc1aa7] {
47549
+ .cn-dashboard-page--board .cn-dashboard-page__description[data-v-2853e370] {
47355
47550
  margin: 6px 0 0;
47356
47551
  font-size: 15px;
47357
47552
  }
47358
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-61fc1aa7] {
47553
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-2853e370] {
47359
47554
  gap: 10px;
47360
47555
  }
47361
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-61fc1aa7] .button-vue {
47556
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-2853e370] .button-vue {
47362
47557
  min-height: var(--cn-board-control-height, 40px);
47363
47558
  height: var(--cn-board-control-height, 40px);
47364
47559
  }
@@ -47366,17 +47561,17 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47366
47561
  /* The switch row under the header (screens-dashboard-greeting-header): the
47367
47562
  view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
47368
47563
  radius 17, 13px/600, a 14px icon, primary light on primary deep). */
47369
- .cn-dashboard-page__switch-row[data-v-61fc1aa7] {
47564
+ .cn-dashboard-page__switch-row[data-v-2853e370] {
47370
47565
  display: flex;
47371
47566
  flex-wrap: wrap;
47372
47567
  align-items: center;
47373
47568
  gap: 10px;
47374
47569
  margin-bottom: var(--cn-board-section-gap, 20px);
47375
47570
  }
47376
- .cn-dashboard-page__switch-row-spacer[data-v-61fc1aa7] {
47571
+ .cn-dashboard-page__switch-row-spacer[data-v-2853e370] {
47377
47572
  flex: 1 1 auto;
47378
47573
  }
47379
- .cn-dashboard-page__view-link[data-v-61fc1aa7] {
47574
+ .cn-dashboard-page__view-link[data-v-2853e370] {
47380
47575
  display: inline-flex;
47381
47576
  align-items: center;
47382
47577
  gap: 6px;
@@ -47390,24 +47585,24 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47390
47585
  white-space: nowrap;
47391
47586
  text-decoration: none !important;
47392
47587
  }
47393
- .cn-dashboard-page__view-link[data-v-61fc1aa7]:hover {
47588
+ .cn-dashboard-page__view-link[data-v-2853e370]:hover {
47394
47589
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
47395
47590
  }
47396
- .cn-dashboard-page__view-link[data-v-61fc1aa7]:focus-visible {
47591
+ .cn-dashboard-page__view-link[data-v-2853e370]:focus-visible {
47397
47592
  outline: 2px solid var(--color-main-text);
47398
47593
  outline-offset: 2px;
47399
47594
  }
47400
- .cn-dashboard-page__view-link-icon[data-v-61fc1aa7] {
47595
+ .cn-dashboard-page__view-link-icon[data-v-2853e370] {
47401
47596
  display: inline-flex;
47402
47597
  }
47403
47598
 
47404
47599
  /* The period group, in a row of its own between the header and the KPI row. */
47405
- .cn-dashboard-page__date-range--segmented[data-v-61fc1aa7] {
47600
+ .cn-dashboard-page__date-range--segmented[data-v-2853e370] {
47406
47601
  margin-bottom: 16px;
47407
47602
  }
47408
47603
 
47409
47604
  /* The period group at the end of the description line. */
47410
- .cn-dashboard-page__description--with-period[data-v-61fc1aa7] {
47605
+ .cn-dashboard-page__description--with-period[data-v-2853e370] {
47411
47606
  align-items: center;
47412
47607
  display: flex;
47413
47608
  flex-wrap: wrap;
@@ -47416,19 +47611,19 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47416
47611
 
47417
47612
  /* A select on the description line takes the width of its choice, not a
47418
47613
  form field's, and no margin of its own. */
47419
- .cn-dashboard-page__description-select[data-v-61fc1aa7] {
47614
+ .cn-dashboard-page__description-select[data-v-2853e370] {
47420
47615
  min-width: 180px;
47421
47616
  max-width: 280px;
47422
47617
  margin: 0;
47423
47618
  }
47424
- .cn-dashboard-page__date-segmented[data-v-61fc1aa7] {
47619
+ .cn-dashboard-page__date-segmented[data-v-2853e370] {
47425
47620
  display: flex;
47426
47621
  align-items: center;
47427
47622
  gap: 8px;
47428
47623
  }
47429
47624
 
47430
47625
  /* The KPI row above the grid: tiles are cells of the auto-fit grid. */
47431
- .cn-dashboard-page__kpi-row[data-v-61fc1aa7] {
47626
+ .cn-dashboard-page__kpi-row[data-v-2853e370] {
47432
47627
  margin-bottom: var(--cn-board-section-gap, 16px);
47433
47628
  }
47434
47629
 
@@ -47436,15 +47631,15 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47436
47631
  the cards started a margin to the right of the KPI row and the header. The
47437
47632
  grid reaches out by that margin, so the card edges line up with the page's
47438
47633
  (dashboard-grid-flush). */
47439
- .cn-dashboard-page--board[data-v-61fc1aa7] .cn-dashboard-grid {
47634
+ .cn-dashboard-page--board[data-v-2853e370] .cn-dashboard-grid {
47440
47635
  width: auto;
47441
47636
  margin-inline: calc(-1 * var(--cn-dashboard-grid-margin, 12px));
47442
47637
  }
47443
- .cn-dashboard-page__kpi-cell[data-v-61fc1aa7] {
47638
+ .cn-dashboard-page__kpi-cell[data-v-2853e370] {
47444
47639
  display: flex;
47445
47640
  min-width: 0;
47446
47641
  }
47447
- .cn-dashboard-page__kpi-cell[data-v-61fc1aa7] > * {
47642
+ .cn-dashboard-page__kpi-cell[data-v-2853e370] > * {
47448
47643
  flex: 1 1 auto;
47449
47644
  min-width: 0;
47450
47645
  }
@@ -47457,7 +47652,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47457
47652
  scoped chip rules then silently don't match and the chip collapses into
47458
47653
  NcActions' ~30px icon slot (text wraps to "Last / 30 / days"). The
47459
47654
  data-testid is stable across chunks, so those rules match regardless. */
47460
- .cn-dashboard-page__header-actions[data-v-61fc1aa7] {
47655
+ .cn-dashboard-page__header-actions[data-v-2853e370] {
47461
47656
  display: flex;
47462
47657
  align-items: center;
47463
47658
  gap: 8px;
@@ -47473,19 +47668,19 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47473
47668
 
47474
47669
  /* Date-range header band. Kept compact so it doesn't open a tall gap
47475
47670
  above the grid; the pills variant is a single tidy toggle row. */
47476
- .cn-dashboard-page__date-range[data-v-61fc1aa7] {
47671
+ .cn-dashboard-page__date-range[data-v-2853e370] {
47477
47672
  margin-bottom: 12px;
47478
47673
  }
47479
- .cn-dashboard-page__date-range--pills[data-v-61fc1aa7] {
47674
+ .cn-dashboard-page__date-range--pills[data-v-2853e370] {
47480
47675
  margin-bottom: 8px;
47481
47676
  }
47482
- .cn-dashboard-page__date-pills[data-v-61fc1aa7] {
47677
+ .cn-dashboard-page__date-pills[data-v-2853e370] {
47483
47678
  display: flex;
47484
47679
  align-items: center;
47485
47680
  flex-wrap: wrap;
47486
47681
  gap: 6px;
47487
47682
  }
47488
- .cn-dashboard-page__date-pill[data-v-61fc1aa7] {
47683
+ .cn-dashboard-page__date-pill[data-v-2853e370] {
47489
47684
  display: inline-flex;
47490
47685
  align-items: center;
47491
47686
  padding: 5px 14px;
@@ -47500,77 +47695,77 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47500
47695
  cursor: pointer;
47501
47696
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
47502
47697
  }
47503
- .cn-dashboard-page__date-pill[data-v-61fc1aa7]:hover {
47698
+ .cn-dashboard-page__date-pill[data-v-2853e370]:hover {
47504
47699
  background: var(--color-background-hover);
47505
47700
  }
47506
- .cn-dashboard-page__date-pill[data-v-61fc1aa7]:focus-visible {
47701
+ .cn-dashboard-page__date-pill[data-v-2853e370]:focus-visible {
47507
47702
  outline: 2px solid var(--color-primary-element);
47508
47703
  outline-offset: 2px;
47509
47704
  }
47510
- .cn-dashboard-page__date-pill--active[data-v-61fc1aa7] {
47705
+ .cn-dashboard-page__date-pill--active[data-v-2853e370] {
47511
47706
  background: var(--color-primary-element);
47512
47707
  border-color: var(--color-primary-element);
47513
47708
  color: var(--color-primary-element-text);
47514
47709
  }
47515
- .cn-dashboard-page__date-pill--active[data-v-61fc1aa7]:hover {
47710
+ .cn-dashboard-page__date-pill--active[data-v-2853e370]:hover {
47516
47711
  background: var(--color-primary-element-hover, var(--color-primary-element));
47517
47712
  }
47518
47713
 
47519
47714
  /* The custom-range pill is de-emphasised — dashed outline, muted text —
47520
47715
  so it reads as an escape hatch rather than a primary option. */
47521
- .cn-dashboard-page__date-pill--custom[data-v-61fc1aa7] {
47716
+ .cn-dashboard-page__date-pill--custom[data-v-2853e370] {
47522
47717
  border-style: dashed;
47523
47718
  color: var(--color-text-maxcontrast);
47524
47719
  }
47525
- .cn-dashboard-page__date-pill-custom[data-v-61fc1aa7] .action-item__menutoggle {
47720
+ .cn-dashboard-page__date-pill-custom[data-v-2853e370] .action-item__menutoggle {
47526
47721
  min-width: 0;
47527
47722
  min-height: 0;
47528
47723
  padding: 0;
47529
47724
  background: transparent;
47530
47725
  border: none;
47531
47726
  }
47532
- .cn-dashboard-page__date-pill-custom[data-v-61fc1aa7] .button-vue,
47533
- .cn-dashboard-page__date-pill-custom[data-v-61fc1aa7] .button-vue__wrapper,
47534
- .cn-dashboard-page__date-pill-custom[data-v-61fc1aa7] .button-vue__icon {
47727
+ .cn-dashboard-page__date-pill-custom[data-v-2853e370] .button-vue,
47728
+ .cn-dashboard-page__date-pill-custom[data-v-2853e370] .button-vue__wrapper,
47729
+ .cn-dashboard-page__date-pill-custom[data-v-2853e370] .button-vue__icon {
47535
47730
  width: auto !important;
47536
47731
  min-width: 0 !important;
47537
47732
  overflow: visible !important;
47538
47733
  }
47539
- .cn-dashboard-page__empty[data-v-61fc1aa7] {
47734
+ .cn-dashboard-page__empty[data-v-2853e370] {
47540
47735
  padding: 60px 20px;
47541
47736
  }
47542
47737
 
47543
47738
  /* The page's view switch on a page without a header row: at the end of its
47544
47739
  own row, above the grids, where the header would have put it. */
47545
- .cn-dashboard-page__view-switch[data-v-61fc1aa7] {
47740
+ .cn-dashboard-page__view-switch[data-v-2853e370] {
47546
47741
  display: flex;
47547
47742
  justify-content: flex-end;
47548
47743
  margin-bottom: 12px;
47549
47744
  }
47550
47745
 
47551
47746
  /* A view the switch shows with nothing to draw. */
47552
- .cn-page-view-region--empty[data-v-61fc1aa7] {
47747
+ .cn-page-view-region--empty[data-v-2853e370] {
47553
47748
  padding: 40px 20px;
47554
47749
  }
47555
- .cn-dashboard-page__page-filters[data-v-61fc1aa7] {
47750
+ .cn-dashboard-page__page-filters[data-v-2853e370] {
47556
47751
  display: flex;
47557
47752
  flex-wrap: wrap;
47558
47753
  gap: 16px;
47559
47754
  align-items: flex-end;
47560
47755
  margin-bottom: 12px;
47561
47756
  }
47562
- .cn-dashboard-page__page-filter[data-v-61fc1aa7] {
47757
+ .cn-dashboard-page__page-filter[data-v-2853e370] {
47563
47758
  display: flex;
47564
47759
  flex-direction: column;
47565
47760
  gap: 4px;
47566
47761
  min-width: 200px;
47567
47762
  }
47568
- .cn-dashboard-page__page-filter-label[data-v-61fc1aa7] {
47763
+ .cn-dashboard-page__page-filter-label[data-v-2853e370] {
47569
47764
  font-size: 0.85em;
47570
47765
  font-weight: 600;
47571
47766
  color: var(--color-text-maxcontrast);
47572
47767
  }
47573
- .cn-dashboard-page__widget-edit[data-v-61fc1aa7] {
47768
+ .cn-dashboard-page__widget-edit[data-v-2853e370] {
47574
47769
  position: absolute;
47575
47770
  top: 4px;
47576
47771
  inset-inline-end: 4px;
@@ -47589,8 +47784,8 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47589
47784
  and centre the card. */
47590
47785
  /* `safe` centre so an overflowing tile does not spill out of the top, where
47591
47786
  flex overflow cannot be scrolled back to. Same as detail-page.css. */
47592
- .cn-dashboard-page__card-fit[data-v-61fc1aa7] .cn-widget-wrapper__content,
47593
- .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-61fc1aa7] .cn-widget-wrapper__content {
47787
+ .cn-dashboard-page__card-fit[data-v-2853e370] .cn-widget-wrapper__content,
47788
+ .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-2853e370] .cn-widget-wrapper__content {
47594
47789
  overflow: hidden;
47595
47790
  display: flex;
47596
47791
  flex-direction: column;
@@ -47606,7 +47801,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47606
47801
  shows up as a scrollbar the user has to drag to see the whole graph. Same
47607
47802
  shape as the card-fit rule above, minus the padding: chart tiles render
47608
47803
  `flush`, and apexcharts already draws its own margins. */
47609
- .cn-dashboard-page__chart-fit[data-v-61fc1aa7] .cn-widget-wrapper__content {
47804
+ .cn-dashboard-page__chart-fit[data-v-2853e370] .cn-widget-wrapper__content {
47610
47805
  overflow: hidden;
47611
47806
  display: flex;
47612
47807
  flex-direction: column;
@@ -47616,13 +47811,13 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47616
47811
  /* Card content (stat / gauge / delta) must fit the tile width: let the
47617
47812
  widget shrink and its value/label truncate instead of pushing past the
47618
47813
  tile edge (the horizontal clip on long currency values). */
47619
- .cn-dashboard-page__card-fit[data-v-61fc1aa7] .cn-stat-widget,
47620
- .cn-dashboard-page__card-fit[data-v-61fc1aa7] .cn-gauge-widget,
47621
- .cn-dashboard-page__card-fit[data-v-61fc1aa7] .cn-delta-widget {
47814
+ .cn-dashboard-page__card-fit[data-v-2853e370] .cn-stat-widget,
47815
+ .cn-dashboard-page__card-fit[data-v-2853e370] .cn-gauge-widget,
47816
+ .cn-dashboard-page__card-fit[data-v-2853e370] .cn-delta-widget {
47622
47817
  min-width: 0;
47623
47818
  max-width: 100%;
47624
47819
  }
47625
- .cn-dashboard-page__unknown[data-v-61fc1aa7] {
47820
+ .cn-dashboard-page__unknown[data-v-2853e370] {
47626
47821
  display: flex;
47627
47822
  align-items: center;
47628
47823
  justify-content: center;
@@ -47633,31 +47828,31 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47633
47828
  }
47634
47829
 
47635
47830
  /* widget-ref content items */
47636
- .cn-dashboard-page__content[data-v-61fc1aa7] {
47831
+ .cn-dashboard-page__content[data-v-2853e370] {
47637
47832
  display: flex;
47638
47833
  flex-direction: column;
47639
47834
  gap: 16px;
47640
47835
  }
47641
- .cn-dashboard-page__content-item[data-v-61fc1aa7] {
47836
+ .cn-dashboard-page__content-item[data-v-2853e370] {
47642
47837
  width: 100%;
47643
47838
  }
47644
47839
  /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
47645
47840
  are 44px: the widget Actions menu and the KPI tiles. */
47646
47841
  @media (max-width: 640px) {
47647
- .cn-dashboard-page--board[data-v-61fc1aa7] .cn-widget-wrapper__actions .action-item__menutoggle,
47648
- .cn-dashboard-page--board[data-v-61fc1aa7] .cn-widget-wrapper__actions .button-vue {
47842
+ .cn-dashboard-page--board[data-v-2853e370] .cn-widget-wrapper__actions .action-item__menutoggle,
47843
+ .cn-dashboard-page--board[data-v-2853e370] .cn-widget-wrapper__actions .button-vue {
47649
47844
  min-height: 44px;
47650
47845
  }
47651
- .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-61fc1aa7] {
47846
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-2853e370] {
47652
47847
  min-height: 44px;
47653
47848
  }
47654
47849
 
47655
47850
  /* The widget Actions menu shows its icon only, so the card title keeps
47656
47851
  the room; the name stays for assistive tech. */
47657
- .cn-dashboard-page--board[data-v-61fc1aa7] .cn-widget-wrapper__actions .action-item__menutoggle {
47852
+ .cn-dashboard-page--board[data-v-2853e370] .cn-widget-wrapper__actions .action-item__menutoggle {
47658
47853
  min-width: 44px;
47659
47854
  }
47660
- .cn-dashboard-page--board[data-v-61fc1aa7] .cn-widget-wrapper__actions .action-item__menutoggle .button-vue__text {
47855
+ .cn-dashboard-page--board[data-v-2853e370] .cn-widget-wrapper__actions .action-item__menutoggle .button-vue__text {
47661
47856
  position: absolute;
47662
47857
  width: 1px;
47663
47858
  height: 1px;
@@ -47669,7 +47864,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47669
47864
 
47670
47865
  /* What a registry widget reports for its card header (`header` event): the
47671
47866
  note beside the link ("3 in total") and one action, as on a detail page. */
47672
- .cn-dashboard-page__widget-count[data-v-61fc1aa7] {
47867
+ .cn-dashboard-page__widget-count[data-v-2853e370] {
47673
47868
  align-self: center;
47674
47869
  padding: 1px 8px;
47675
47870
  border-radius: 10px;
@@ -47678,13 +47873,13 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47678
47873
  font-size: 13px;
47679
47874
  font-weight: 600;
47680
47875
  }
47681
- .cn-dashboard-page__widget-note[data-v-61fc1aa7] {
47876
+ .cn-dashboard-page__widget-note[data-v-2853e370] {
47682
47877
  align-self: center;
47683
47878
  color: var(--color-text-maxcontrast);
47684
47879
  font-size: 14px;
47685
47880
  white-space: nowrap;
47686
47881
  }
47687
- .cn-dashboard-page__widget-action[data-v-61fc1aa7] {
47882
+ .cn-dashboard-page__widget-action[data-v-2853e370] {
47688
47883
  display: inline-flex;
47689
47884
  align-items: center;
47690
47885
  align-self: center;
@@ -47700,7 +47895,7 @@ textarea.cn-sm-field__input[data-v-3e23dab3] {
47700
47895
  white-space: nowrap;
47701
47896
  cursor: pointer;
47702
47897
  }
47703
- .cn-dashboard-page__widget-action[data-v-61fc1aa7]:focus-visible {
47898
+ .cn-dashboard-page__widget-action[data-v-2853e370]:focus-visible {
47704
47899
  outline: 2px solid var(--color-primary-element);
47705
47900
  outline-offset: 2px;
47706
47901
  }