@conduction/nextcloud-vue 2.78.0 → 2.79.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 (115) hide show
  1. package/dist/bundled-packages.json +0 -2
  2. package/dist/esm/bundled-packages.json +0 -2
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +113 -104
  5. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +12 -2
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +80 -0
  10. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  11. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +115 -91
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  13. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +139 -1
  14. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  15. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +140 -92
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  17. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +77 -0
  18. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +4 -2
  20. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  21. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +61 -1
  22. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  24. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +173 -5
  25. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  26. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +181 -99
  27. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  28. package/dist/esm/components/CnFilesBrowser/filesBrowser.js +29 -11
  29. package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
  30. package/dist/esm/components/CnFilesBrowser/openRegisterSource.js +252 -0
  31. package/dist/esm/components/CnFilesBrowser/openRegisterSource.js.map +1 -0
  32. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +1 -1
  33. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  34. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  35. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +25 -2
  36. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  37. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +3 -2
  38. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  39. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +100 -3
  40. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  41. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -2
  42. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  43. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +3 -2
  44. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  45. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  46. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
  47. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +1 -1
  48. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
  49. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +30 -1
  50. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  51. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  52. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
  53. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  54. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  55. package/dist/esm/composables/useAppManifest.js +8 -3
  56. package/dist/esm/composables/useAppManifest.js.map +1 -1
  57. package/dist/esm/index.js +1 -0
  58. package/dist/esm/index.js.map +1 -1
  59. package/dist/esm/l10n/en.json.js +61 -1
  60. package/dist/esm/l10n/en.json.js.map +1 -1
  61. package/dist/esm/l10n/nl.json.js +106 -2
  62. package/dist/esm/l10n/nl.json.js.map +1 -1
  63. package/dist/esm/nextcloud-vue.css +314 -15
  64. package/dist/esm/utils/boardDate.js +193 -0
  65. package/dist/esm/utils/boardDate.js.map +1 -0
  66. package/dist/esm/utils/dynamicProperties.js +5 -1
  67. package/dist/esm/utils/dynamicProperties.js.map +1 -1
  68. package/dist/esm/utils/validateManifestV2.compiled.js +57 -6
  69. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  70. package/dist/nextcloud-vue.cjs.js +2039 -581
  71. package/dist/nextcloud-vue.cjs.js.map +2 -2
  72. package/dist/nextcloud-vue.css +314 -15
  73. package/l10n/en.json +61 -1
  74. package/l10n/nl.json +106 -2
  75. package/package.json +1 -1
  76. package/scripts/build-validators.js +26 -0
  77. package/src/components/CnActionsBar/CnActionsBar.vue +48 -39
  78. package/src/components/CnAppRoot/CnAppRoot.vue +12 -2
  79. package/src/components/CnCellRenderer/CnCellRenderer.vue +119 -2
  80. package/src/components/CnDashboardPage/CnDashboardPage.vue +219 -4
  81. package/src/components/CnDataTable/CnDataTable.md +2 -0
  82. package/src/components/CnDataTable/CnDataTable.vue +81 -2
  83. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +61 -1
  84. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +232 -11
  85. package/src/components/CnFilesBrowser/filesBrowser.js +43 -2
  86. package/src/components/CnFilesBrowser/index.js +1 -0
  87. package/src/components/CnFilesBrowser/openRegisterSource.js +248 -0
  88. package/src/components/CnFormDialog/CnFormDialog.vue +1 -1
  89. package/src/components/CnIndexPage/CnIndexPage.vue +27 -3
  90. package/src/components/CnObjectSidebar/CnFilesTab.vue +103 -4
  91. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +3 -2
  92. package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +1 -1
  93. package/src/components/CnTabsWidget/CnTabsWidget.vue +30 -1
  94. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
  95. package/src/components/index.js +1 -1
  96. package/src/composables/useAppManifest.js +8 -3
  97. package/src/css/look-board-detail.css +10 -0
  98. package/src/css/look-board-index.css +92 -14
  99. package/src/css/look-board.css +77 -0
  100. package/src/css/table.css +37 -0
  101. package/src/index.js +4 -0
  102. package/src/schemas/app-manifest-v2.schema.json +46 -1
  103. package/src/utils/boardDate.js +189 -0
  104. package/src/utils/dynamicProperties.js +5 -1
  105. package/src/utils/validateManifestV2.compiled.js +57 -2
  106. package/dist/esm/_virtual/equal.js +0 -4
  107. package/dist/esm/_virtual/equal.js.map +0 -1
  108. package/dist/esm/_virtual/ucs2length.js +0 -4
  109. package/dist/esm/_virtual/ucs2length.js.map +0 -1
  110. package/dist/esm/node_modules/ajv/dist/runtime/equal.js +0 -9
  111. package/dist/esm/node_modules/ajv/dist/runtime/equal.js.map +0 -1
  112. package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
  113. package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
  114. package/dist/esm/node_modules/fast-deep-equal/index.js +0 -47
  115. package/dist/esm/node_modules/fast-deep-equal/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/dist/nextcloud-vue.cjs.js.map
3
- size: 38473543 bytes
4
- sha256: bad7882294f198a2cea044c31c0d5125039ff25b00c181370b03de2a63cead03
3
+ size: 38623309 bytes
4
+ sha256: 99ac0f584713637485201c9899615fdea841cf3e88d50a9db3249f51793f1dbc
@@ -213,6 +213,14 @@
213
213
  margin-inline-start: -264px;
214
214
  }
215
215
 
216
+ /* The navigation draws the line between it and the content. NcContent draws a
217
+ second one on the content while the navigation is open, which doubled the
218
+ line and put the page 1px further from the navigation than the board's 28px.
219
+ Outranks NcContent's rule (six classes) with seven. */
220
+ .cn-look-board .app-navigation[data-testid="cn-nav"]:not(.app-navigation--closed):not(.app-navigation--close) ~ .app-content.app-content {
221
+ border-inline-start: none;
222
+ }
223
+
216
224
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__content {
217
225
  box-sizing: border-box;
218
226
  gap: 20px;
@@ -222,6 +230,31 @@
222
230
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list {
223
231
  height: auto;
224
232
  flex: 1 1 auto;
233
+ margin: 0;
234
+ gap: 2px;
235
+ }
236
+
237
+ /* The board's vertical rhythm (AppZijbalk): the primary action 20px from the
238
+ top, the list 20px under it, entries 2px apart. An empty search slot is a
239
+ flex child too and pushed everything 20px down, so it goes. */
240
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__search:empty {
241
+ display: none;
242
+ }
243
+
244
+ /* A caption is a 12px label with 6px under it, 20px after the group above
245
+ and 2px before its first entry. NcAppNavigationCaption gives its name a
246
+ 15px font on a 34px line, which made it 44px high. */
247
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list > .app-navigation-caption:not(:first-child) {
248
+ margin-top: 18px;
249
+ }
250
+
251
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__name {
252
+ margin: 0;
253
+ padding: 0;
254
+ font-size: inherit;
255
+ font-weight: inherit;
256
+ line-height: normal;
257
+ color: inherit;
225
258
  }
226
259
 
227
260
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry,
@@ -306,6 +339,43 @@
306
339
  font-size: 15px;
307
340
  }
308
341
 
342
+ /* The footer of the board: Help and Advanced as two 40px rows at weight 400,
343
+ 2px apart. The Help row kept the 42px of a list entry, and the Advanced
344
+ foldout drew a 34px button inside 4px of padding, 20px under Help. */
345
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list {
346
+ gap: 2px;
347
+ }
348
+
349
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list .app-navigation-entry,
350
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list .app-navigation-entry-link {
351
+ min-height: 40px;
352
+ font-weight: 400;
353
+ }
354
+
355
+ .cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] {
356
+ padding: 0;
357
+ }
358
+
359
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list + [data-testid="cn-nav-settings"] {
360
+ margin-top: -18px;
361
+ }
362
+
363
+ .cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] > :first-child {
364
+ margin: 0;
365
+ }
366
+
367
+ .cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] > :first-child .button-vue {
368
+ box-sizing: border-box;
369
+ width: 100%;
370
+ height: 40px;
371
+ min-height: 40px;
372
+ padding: 0 10px;
373
+ border-radius: 8px;
374
+ font-size: 15px;
375
+ font-weight: 400;
376
+ justify-content: flex-start;
377
+ }
378
+
309
379
  /* The card above the footer, pushed down. */
310
380
  .cn-look-board .cn-app-nav__card {
311
381
  order: 0;
@@ -510,6 +580,13 @@
510
580
  .cn-look-board .cn-status-badge--primary:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
511
581
  color: var(--color-primary-element-light-text);
512
582
  }
583
+
584
+ /* ---- Date and age cells (screens-cell-date-parity) ---------------------- */
585
+ /* The board sets every waiting time ("3 dagen", "4 uur") in weight 600; a
586
+ late one is red through its variant class. */
587
+ .cn-look-board .cn-cell-renderer__age:not(.cn-look-nextcloud *) {
588
+ font-weight: 600;
589
+ }
513
590
  /*
514
591
  * The board dialog (screens-dialog-parity, canon section 5).
515
592
  *
@@ -1262,16 +1339,27 @@
1262
1339
  margin-inline-start: 0;
1263
1340
  }
1264
1341
 
1265
- /* The first of Save view, Filter and the view switch takes the free space, so
1266
- the three sit at the end of row 1. */
1267
- .cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > :is(.cn-saved-views__save, .cn-actions-bar__filter-button, .cn-actions-bar__view-toggle) {
1342
+ /* The first of Save view and the Filter + view switch unit takes the free
1343
+ space (the board's `flex: 1` spacer), so they sit at the end of row 1.
1344
+ When the line is full the unit wraps as one to the START of the next line
1345
+ while Save view stays at the end of row 1 (DqZaken); without Save view the
1346
+ unit sits at the end of row 1 (PqTickets, PqLeads, PtPortals). */
1347
+ .cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > :is(.cn-saved-views__save, .cn-actions-bar__view-controls) {
1268
1348
  margin-inline-start: auto;
1269
1349
  }
1270
1350
 
1271
- .cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > :is(.cn-saved-views__save, .cn-actions-bar__filter-button, .cn-actions-bar__view-toggle) ~ :is(.cn-saved-views__save, .cn-actions-bar__filter-button, .cn-actions-bar__view-toggle) {
1351
+ .cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > .cn-saved-views__save ~ .cn-actions-bar__view-controls {
1272
1352
  margin-inline-start: 0;
1273
1353
  }
1274
1354
 
1355
+ .cn-look-board .cn-actions-bar--board .cn-actions-bar__view-controls {
1356
+ display: flex;
1357
+ flex: 0 0 auto;
1358
+ flex-wrap: nowrap;
1359
+ align-items: center;
1360
+ gap: 8px;
1361
+ }
1362
+
1275
1363
  /* Row 2: the search field and the active filters on a line of their own. */
1276
1364
  .cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--search {
1277
1365
  display: flex;
@@ -1357,16 +1445,39 @@
1357
1445
  color: var(--color-primary-element-text);
1358
1446
  }
1359
1447
 
1360
- /* Save view: 34px, radius 17, on the light primary tint. */
1448
+ /* Save view: a ghost button, 34px, radius 17, no border, on the light primary
1449
+ tint, a 14px icon 6px before the label, on one line. */
1361
1450
  .cn-look-board .cn-saved-views__save .button-vue {
1362
1451
  min-height: 34px;
1363
1452
  height: 34px;
1364
- padding: 0 14px;
1453
+ padding: 0 12px;
1454
+ border: 0;
1365
1455
  border-radius: 17px;
1366
1456
  background: var(--color-primary-element-light);
1367
1457
  color: var(--color-primary-element-light-text);
1368
1458
  font-size: 13px;
1369
1459
  font-weight: 600;
1460
+ white-space: nowrap;
1461
+ }
1462
+
1463
+ .cn-look-board .cn-saved-views__save .button-vue:hover {
1464
+ background: var(--color-primary-element-light-hover);
1465
+ }
1466
+
1467
+ .cn-look-board .cn-saved-views__save .button-vue .button-vue__wrapper {
1468
+ gap: 6px;
1469
+ }
1470
+
1471
+ .cn-look-board .cn-saved-views__save .button-vue .button-vue__icon {
1472
+ width: auto;
1473
+ min-width: 0;
1474
+ height: auto;
1475
+ min-height: 0;
1476
+ }
1477
+
1478
+ .cn-look-board .cn-saved-views__save .button-vue .button-vue__text {
1479
+ margin: 0;
1480
+ padding: 0;
1370
1481
  }
1371
1482
 
1372
1483
  /* Filter: a labelled secondary button, 36px, radius 8, with the active count. */
@@ -1598,6 +1709,29 @@
1598
1709
  text-decoration: none;
1599
1710
  }
1600
1711
 
1712
+ /* Only the title is underlined (DqZaken). An underline set on the cell
1713
+ reaches every in-flow child whatever its own text-decoration, so the
1714
+ secondary lines become inline blocks on a line of their own: an atomic
1715
+ inline box is the one thing the underline does not reach. */
1716
+ .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-table-cell__secondary {
1717
+ display: inline-block;
1718
+ width: 100%;
1719
+ vertical-align: top;
1720
+ }
1721
+
1722
+ /* `rowTitle: "plain"` (PqTickets, OcPublicaties): the title is bold text in
1723
+ the main text colour without an underline, the secondary line 13px muted,
1724
+ 2px under it. The row stays clickable through its stretched row link. */
1725
+ .cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title {
1726
+ font-weight: 700;
1727
+ text-decoration: none;
1728
+ }
1729
+
1730
+ .cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title .cn-table-cell__secondary {
1731
+ margin-top: 2px;
1732
+ font-size: 13px;
1733
+ }
1734
+
1601
1735
  /* A status pill: 3px 10px, radius 12, 13px weight 600. The colours stay the
1602
1736
  status colour map's. */
1603
1737
  .cn-look-board .cn-table-container--board .cn-data-table .cn-status-badge {
@@ -1620,15 +1754,36 @@
1620
1754
  --default-clickable-area: 34px;
1621
1755
  }
1622
1756
 
1757
+ /* The row menu: a 34px square, three dots, a grey border on the main
1758
+ background (DqZaken, PqTickets). A theme that styles every secondary button
1759
+ with `!important` (the nldesign theme: a primary border, 8px 16px padding,
1760
+ `min-width: max-content`) would otherwise turn it into a 64px wide button
1761
+ with a blue border, so the board values are `!important` too. */
1762
+ .cn-look-board .cn-row-actions--board .button-vue,
1763
+ .cn-look-board .cn-row-actions--board .button-vue:hover,
1764
+ .cn-look-board .cn-row-actions--board .button-vue:focus {
1765
+ box-sizing: border-box !important;
1766
+ width: 34px !important;
1767
+ min-width: 34px !important;
1768
+ height: 34px !important;
1769
+ min-height: 34px !important;
1770
+ padding: 0 !important;
1771
+ border: 1px solid var(--color-border-dark) !important;
1772
+ border-radius: 8px !important;
1773
+ color: var(--cn-board-text-soft) !important;
1774
+ }
1775
+
1623
1776
  .cn-look-board .cn-row-actions--board .button-vue {
1624
- width: 34px;
1625
- min-width: 34px;
1626
- height: 34px;
1627
- min-height: 34px;
1628
- padding: 0;
1629
- border: 1px solid var(--color-border-dark);
1630
- border-radius: 8px;
1631
- background: var(--color-main-background);
1777
+ background: var(--color-main-background) !important;
1778
+ }
1779
+
1780
+ .cn-look-board .cn-row-actions--board .button-vue:hover {
1781
+ background: var(--color-background-hover) !important;
1782
+ }
1783
+
1784
+ .cn-look-board .cn-row-actions--board .button-vue:focus-visible {
1785
+ outline: 2px solid var(--color-main-text);
1786
+ outline-offset: 2px;
1632
1787
  }
1633
1788
 
1634
1789
  /* ------------------------------------------------------------------ footer */
@@ -2188,6 +2343,34 @@
2188
2343
  min-width: 0;
2189
2344
  }
2190
2345
 
2346
+ /* Fit to the container (CnDataTable's `fitWidth`, on in CnWidgetObjectTable).
2347
+
2348
+ In a narrow tile the auto layout made the table as wide as its one-line
2349
+ cells, so it ran past the tile and clipped the trailing column (a date).
2350
+ Here every column but one takes the width of its content (`width: 1%` asks
2351
+ for as little as the content allows), and the grow column takes what is
2352
+ left. `max-width: 0` is what lets that column go below its content's width:
2353
+ the table no longer counts its text, so the text is cut with an ellipsis
2354
+ instead of widening the table. The full value stays in the cell's tooltip. */
2355
+ .cn-data-table--fit {
2356
+ width: 100%;
2357
+ }
2358
+
2359
+ .cn-data-table--fit th,
2360
+ .cn-data-table--fit td {
2361
+ width: 1%;
2362
+ }
2363
+
2364
+ .cn-data-table--fit th.cn-table-col--grow,
2365
+ .cn-data-table--fit td.cn-table-col--grow {
2366
+ width: auto;
2367
+ min-width: 0;
2368
+ max-width: 0;
2369
+ overflow: hidden;
2370
+ text-overflow: ellipsis;
2371
+ white-space: nowrap;
2372
+ }
2373
+
2191
2374
  .cn-data-table th {
2192
2375
  background: var(--color-background-dark);
2193
2376
  font-weight: 500;
@@ -2536,6 +2719,15 @@
2536
2719
  color: var(--color-text-maxcontrast);
2537
2720
  }
2538
2721
 
2722
+ /* The empty row holds a sentence (the empty text, or why a lens cannot
2723
+ answer), not a cell value: it wraps instead of being cut to one line. The
2724
+ selector carries the table class so it outranks the one-line cell rule. */
2725
+ .cn-data-table .cn-table-empty td {
2726
+ max-width: none;
2727
+ white-space: normal;
2728
+ overflow-wrap: anywhere;
2729
+ }
2730
+
2539
2731
  /* ========================================
2540
2732
  Backwards compatibility aliases
2541
2733
  (legacy OpenRegister CSS class names)
@@ -5692,6 +5884,16 @@ a.cn-kpi-card--board * {
5692
5884
  gap: 20px;
5693
5885
  }
5694
5886
 
5887
+ /* GridStack insets every cell by its 12px margin, the outer edge included, so
5888
+ the tab strip started 12px below the top of the body column and stopped 12px
5889
+ short of its end, while the side column started at the top. Pulling the grid
5890
+ out by that margin puts its first card on the column's edges: the side column
5891
+ is level with the strip, and the strip ends where the body column ends. */
5892
+ .cn-look-board.cn-detail-page--with-side > .cn-detail-page__body > .cn-detail-page__grid {
5893
+ margin: -12px;
5894
+ width: auto;
5895
+ }
5896
+
5695
5897
  /* ---- Folder tabs ------------------------------------------------------- */
5696
5898
 
5697
5899
  /* The strip draws no line of its own (design-system pull request 147). The card under it
@@ -9236,9 +9438,24 @@ svg.leaflet-image-layer.leaflet-interactive path {
9236
9438
  does not rest on colour alone. */
9237
9439
  .cn-cell-renderer__date--success[data-v-37d7b88f],
9238
9440
  .cn-cell-renderer__date--warning[data-v-37d7b88f],
9239
- .cn-cell-renderer__date--error[data-v-37d7b88f] {
9441
+ .cn-cell-renderer__date--error[data-v-37d7b88f],
9442
+ .cn-cell-renderer__age--success[data-v-37d7b88f],
9443
+ .cn-cell-renderer__age--warning[data-v-37d7b88f],
9444
+ .cn-cell-renderer__age--error[data-v-37d7b88f] {
9240
9445
  font-weight: 600;
9241
9446
  }
9447
+ .cn-cell-renderer__age[data-v-37d7b88f] {
9448
+ white-space: nowrap;
9449
+ }
9450
+ .cn-cell-renderer__age--success[data-v-37d7b88f] {
9451
+ color: var(--color-text-success, var(--color-success-text));
9452
+ }
9453
+ .cn-cell-renderer__age--warning[data-v-37d7b88f] {
9454
+ color: var(--color-text-warning, var(--color-warning-text));
9455
+ }
9456
+ .cn-cell-renderer__age--error[data-v-37d7b88f] {
9457
+ color: var(--color-text-error, var(--color-error-text));
9458
+ }
9242
9459
  .cn-cell-renderer__date--success[data-v-37d7b88f] {
9243
9460
  color: var(--color-text-success, var(--color-success-text));
9244
9461
  }
@@ -9534,6 +9751,34 @@ svg.leaflet-image-layer.leaflet-interactive path {
9534
9751
  min-width: 0;
9535
9752
  }
9536
9753
 
9754
+ /* Fit to the container (CnDataTable's `fitWidth`, on in CnWidgetObjectTable).
9755
+
9756
+ In a narrow tile the auto layout made the table as wide as its one-line
9757
+ cells, so it ran past the tile and clipped the trailing column (a date).
9758
+ Here every column but one takes the width of its content (`width: 1%` asks
9759
+ for as little as the content allows), and the grow column takes what is
9760
+ left. `max-width: 0` is what lets that column go below its content's width:
9761
+ the table no longer counts its text, so the text is cut with an ellipsis
9762
+ instead of widening the table. The full value stays in the cell's tooltip. */
9763
+ .cn-data-table--fit {
9764
+ width: 100%;
9765
+ }
9766
+
9767
+ .cn-data-table--fit th,
9768
+ .cn-data-table--fit td {
9769
+ width: 1%;
9770
+ }
9771
+
9772
+ .cn-data-table--fit th.cn-table-col--grow,
9773
+ .cn-data-table--fit td.cn-table-col--grow {
9774
+ width: auto;
9775
+ min-width: 0;
9776
+ max-width: 0;
9777
+ overflow: hidden;
9778
+ text-overflow: ellipsis;
9779
+ white-space: nowrap;
9780
+ }
9781
+
9537
9782
  .cn-data-table th {
9538
9783
  background: var(--color-background-dark);
9539
9784
  font-weight: 500;
@@ -9882,6 +10127,15 @@ svg.leaflet-image-layer.leaflet-interactive path {
9882
10127
  color: var(--color-text-maxcontrast);
9883
10128
  }
9884
10129
 
10130
+ /* The empty row holds a sentence (the empty text, or why a lens cannot
10131
+ answer), not a cell value: it wraps instead of being cut to one line. The
10132
+ selector carries the table class so it outranks the one-line cell rule. */
10133
+ .cn-data-table .cn-table-empty td {
10134
+ max-width: none;
10135
+ white-space: normal;
10136
+ overflow-wrap: anywhere;
10137
+ }
10138
+
9885
10139
  /* ========================================
9886
10140
  Backwards compatibility aliases
9887
10141
  (legacy OpenRegister CSS class names)
@@ -14545,6 +14799,13 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
14545
14799
  min-width: 0;
14546
14800
  flex: 1 1 auto;
14547
14801
  }
14802
+
14803
+ /* The crumbs give way, the controls do not: a long crumb (a folder named
14804
+ after a uuid) shrank the upload button to "Bestanden..." while the crumbs
14805
+ kept their width. */
14806
+ .cn-files-browser__bar[data-v-f5bdd9e2] > :not(.cn-files-browser__crumbs) {
14807
+ flex-shrink: 0;
14808
+ }
14548
14809
  .cn-files-browser__file-input[data-v-f5bdd9e2] {
14549
14810
  display: none;
14550
14811
  }
@@ -35021,6 +35282,44 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
35021
35282
  height: var(--cn-board-control-height, 40px);
35022
35283
  }
35023
35284
 
35285
+ /* The switch row under the header (screens-dashboard-greeting-header): the
35286
+ view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
35287
+ radius 17, 13px/600, a 14px icon, primary light on primary deep). */
35288
+ .cn-dashboard-page__switch-row[data-v-824052fe] {
35289
+ display: flex;
35290
+ flex-wrap: wrap;
35291
+ align-items: center;
35292
+ gap: 10px;
35293
+ margin-bottom: var(--cn-board-section-gap, 20px);
35294
+ }
35295
+ .cn-dashboard-page__switch-row-spacer[data-v-824052fe] {
35296
+ flex: 1 1 auto;
35297
+ }
35298
+ .cn-dashboard-page__view-link[data-v-824052fe] {
35299
+ display: inline-flex;
35300
+ align-items: center;
35301
+ gap: 6px;
35302
+ height: 34px;
35303
+ padding: 0 12px;
35304
+ border-radius: 17px;
35305
+ background: var(--color-primary-element-light);
35306
+ color: var(--color-primary-element-light-text);
35307
+ font-size: 13px;
35308
+ font-weight: 600;
35309
+ white-space: nowrap;
35310
+ text-decoration: none !important;
35311
+ }
35312
+ .cn-dashboard-page__view-link[data-v-824052fe]:hover {
35313
+ background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
35314
+ }
35315
+ .cn-dashboard-page__view-link[data-v-824052fe]:focus-visible {
35316
+ outline: 2px solid var(--color-main-text);
35317
+ outline-offset: 2px;
35318
+ }
35319
+ .cn-dashboard-page__view-link-icon[data-v-824052fe] {
35320
+ display: inline-flex;
35321
+ }
35322
+
35024
35323
  /* The period group, in a row of its own between the header and the KPI row. */
35025
35324
  .cn-dashboard-page__date-range--segmented[data-v-824052fe] {
35026
35325
  margin-bottom: 16px;
package/l10n/en.json CHANGED
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "translations": {
3
+ "You cannot see these files": "You cannot see these files",
4
+ "Delete {name}? This cannot be undone here.": "Delete {name}? This cannot be undone here.",
3
5
  "Linked items": "Linked items",
4
6
  "Still loading: {sections}": "Still loading: {sections}",
5
7
  "Could not load {section}.": "Could not load {section}.",
@@ -572,6 +574,8 @@
572
574
  "Order": "Order",
573
575
  "Owner:": "Owner:",
574
576
  "Page {current} of {total}": "Page {current} of {total}",
577
+ "{shown} of {total}": "{shown} of {total}",
578
+ "{from}–{to} of {total}": "{from}–{to} of {total}",
575
579
  "Parent schemas:": "Parent schemas:",
576
580
  "Password": "Password",
577
581
  "Pattern (regex)": "Pattern (regex)",
@@ -771,6 +775,27 @@
771
775
  "Message input": "Message input",
772
776
  "Start new chat": "Start new chat",
773
777
  "History": "History",
778
+ "No audit entries yet": "No audit entries yet",
779
+ "Meetings": "Meetings",
780
+ "No meetings": "No meetings",
781
+ "Open in Calendar": "Open in Calendar",
782
+ "(no title)": "(no title)",
783
+ "Could not load meetings.": "Could not load meetings.",
784
+ "Could not load meeting.": "Could not load meeting.",
785
+ "Calendar is currently unavailable.": "Calendar is currently unavailable.",
786
+ "Show all {count} fields": "Show all {count} fields",
787
+ "Show less": "Show less",
788
+ "{count} more": "{count} more",
789
+ "Identifier: {identifier}": "Identifier: {identifier}",
790
+ "What happened, who did it and when, newest first": "What happened, who did it and when, newest first",
791
+ "{app} is not installed": "{app} is not installed",
792
+ "Install and enable the {app} app to see this.": "Install and enable the {app} app to see this.",
793
+ "{title} needs the {app} app. Install and enable it to see this.": "{title} needs the {app} app. Install and enable it to see this.",
794
+ "View all ({total})": "View all ({total})",
795
+ "No items": "No items",
796
+ "Nothing here yet": "Nothing here yet",
797
+ "No items match this filter": "No items match this filter",
798
+ "Could not load these records": "Could not load these records",
774
799
  "No conversations yet": "No conversations yet",
775
800
  "Connecting...": "Connecting...",
776
801
  "Loading conversations...": "Loading conversations...",
@@ -1309,7 +1334,34 @@
1309
1334
  "Filter by {column}, active": "Filter by {column}, active",
1310
1335
  "Turn notifications off": "Turn notifications off",
1311
1336
  "Turn notifications on": "Turn notifications on",
1312
- "Could not change notifications.": "Could not change notifications."
1337
+ "Could not change notifications.": "Could not change notifications.",
1338
+ "Actions for the selection": "Actions for the selection",
1339
+ "Active:": "Active:",
1340
+ "Filter": "Filter",
1341
+ "List": "List",
1342
+ "Map": "Map",
1343
+ "Remove filter: {label}": "Remove filter: {label}",
1344
+ "Search and columns": "Search and columns",
1345
+ "Sort by": "Sort by",
1346
+ "View mode": "View mode",
1347
+ "With the selected {plural}": "With the selected {plural}",
1348
+ "items": "items",
1349
+ "{count} active": "{count} active",
1350
+ "Delete \"{name}\"": "Delete \"{name}\"",
1351
+ "No saved views yet": "No saved views yet",
1352
+ "No views with this label": "No views with this label",
1353
+ "Save current view…": "Save current view…",
1354
+ "Save view": "Save view",
1355
+ "Saved views": "Saved views",
1356
+ "Show only views labelled \"{label}\"": "Show only views labelled \"{label}\"",
1357
+ "Stop filtering on \"{label}\"": "Stop filtering on \"{label}\"",
1358
+ "{name}, level {level}": "{name}, level {level}",
1359
+ "{name}. Parts of this view come from one you cannot see.": "{name}. Parts of this view come from one you cannot see.",
1360
+ "More filters": "More filters",
1361
+ "Quick filters": "Quick filters",
1362
+ "{count} filters": "{count} filters",
1363
+ "{count} more filters": "{count} more filters",
1364
+ "{label} — show the other filters": "{label} — show the other filters"
1313
1365
  },
1314
1366
  "plurals": {
1315
1367
  "%n year": [
@@ -1320,6 +1372,10 @@
1320
1372
  "%n month",
1321
1373
  "%n months"
1322
1374
  ],
1375
+ "%n hour": [
1376
+ "%n hour",
1377
+ "%n hours"
1378
+ ],
1323
1379
  "%n day": [
1324
1380
  "%n day",
1325
1381
  "%n days"
@@ -1375,6 +1431,10 @@
1375
1431
  "in {count} day": [
1376
1432
  "in {count} day",
1377
1433
  "in {count} days"
1434
+ ],
1435
+ "{count} more filter": [
1436
+ "{count} more filter",
1437
+ "{count} more filters"
1378
1438
  ]
1379
1439
  }
1380
1440
  }