@conduction/nextcloud-vue 2.121.0 → 2.123.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.
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +1 -0
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue.js +1 -1
- package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue2.js +18 -4
- package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue3.js +63 -32
- package/dist/esm/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +35 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +11 -5
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +13 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +37 -5
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +40 -0
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +71 -65
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue.js +1 -1
- package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue2.js +20 -0
- package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue3.js +2 -1
- package/dist/esm/components/CnFlowDetail/CnFlowDetail.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue.js +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js +2 -0
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js +49 -44
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js +10 -0
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js +2 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js.map +1 -1
- package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue2.js +31 -0
- package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue2.js.map +1 -1
- package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue3.js +4 -3
- package/dist/esm/components/CnGraphCanvas/CnGraphCanvas.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +34 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +1 -0
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +2 -0
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +2 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +1 -1
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +31 -1
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +14 -4
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -1
- package/dist/esm/composables/flowGraphLayout.js +36 -7
- package/dist/esm/composables/flowGraphLayout.js.map +1 -1
- package/dist/esm/composables/useFlowStore.js +7 -3
- package/dist/esm/composables/useFlowStore.js.map +1 -1
- package/dist/esm/l10n/en.json.js +3 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +3 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +670 -316
- package/dist/esm/utils/manifestTranslate.js +12 -3
- package/dist/esm/utils/manifestTranslate.js.map +1 -1
- package/dist/esm/utils/routeFilters.js +3 -3
- package/dist/esm/utils/routeFilters.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +1218 -847
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +670 -316
- package/l10n/en.json +3 -1
- package/l10n/nl.json +3 -1
- package/package.json +1 -1
- package/src/components/CnAppRoot/CnAppRoot.vue +1 -0
- package/src/components/CnAttentionFlagWidget/CnAttentionFlagWidget.vue +50 -5
- package/src/components/CnChartWidget/CnChartWidget.vue +10 -8
- package/src/components/CnDetailPage/CnDetailPage.md +10 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +42 -1
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +39 -0
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +95 -37
- package/src/components/CnFlowDetail/CnFlowDetail.vue +21 -0
- package/src/components/CnFlowsPage/CnFlowBoard.vue +35 -18
- package/src/components/CnFlowsPage/CnFlowEditorPage.vue +11 -0
- package/src/components/CnGraphCanvas/CnGraphCanvas.vue +34 -2
- package/src/components/CnIndexPage/CnIndexPage.vue +34 -2
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +1 -0
- package/src/components/CnObjectSidebar/CnFilesTab.vue +3 -0
- package/src/components/CnSectionsWidget/CnSectionsWidget.vue +53 -2
- package/src/composables/flowGraphLayout.js +35 -6
- package/src/composables/useFlowStore.js +7 -3
- package/src/css/detail-page.css +6 -0
- package/src/css/look-board-detail.css +53 -6
- package/src/css/look-board-index.css +151 -12
- package/src/css/look-board.css +116 -4
- package/src/utils/manifestTranslate.js +12 -3
- package/src/utils/routeFilters.js +3 -3
|
@@ -321,6 +321,29 @@
|
|
|
321
321
|
font-weight: 600;
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
+
/* With the sidebar open the Filter button is pressed: the board draws it on
|
|
325
|
+
the light primary ground with a primary edge and the main ink, not as a
|
|
326
|
+
filled primary button (DqFilterBeheren). Its count badge stays the filled
|
|
327
|
+
primary pill. NcButton redefines the main text inside the button, so the ink is taken
|
|
328
|
+
on the bar; the theme's forced primary ink and edge read the button's own
|
|
329
|
+
properties.
|
|
330
|
+
@spec openspec/changes/board-index-sidebar/specs/board-index-sidebar/spec.md#requirement-the-pressed-filter-button-is-the-boards-light-toggle */
|
|
331
|
+
.cn-look-board .cn-actions-bar {
|
|
332
|
+
--cn-filter-pressed-ink: var(--color-main-text);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.cn-look-board .cn-actions-bar__filter-button.button-vue[aria-pressed='true'] {
|
|
336
|
+
--nldesign-component-button-primary-action-color: var(--cn-filter-pressed-ink);
|
|
337
|
+
--nldesign-component-button-primary-action-border-color: var(--color-primary-element);
|
|
338
|
+
border-color: var(--color-primary-element);
|
|
339
|
+
background-color: var(--color-primary-element-light);
|
|
340
|
+
color: var(--cn-filter-pressed-ink);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.cn-look-board .cn-actions-bar__filter-button.button-vue[aria-pressed='true']:hover {
|
|
344
|
+
background-color: var(--color-primary-element-light-hover);
|
|
345
|
+
}
|
|
346
|
+
|
|
324
347
|
.cn-look-board .cn-actions-bar__filter-badge {
|
|
325
348
|
display: inline-flex;
|
|
326
349
|
align-items: center;
|
|
@@ -634,16 +657,36 @@
|
|
|
634
657
|
width: 18%;
|
|
635
658
|
}
|
|
636
659
|
|
|
637
|
-
/*
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
660
|
+
/* An index table pads every cell 16px at the sides (DqZaken). The plain-title
|
|
661
|
+
table (`rowTitle: "plain"`: PqTickets, OcPublicaties) sets its data cells
|
|
662
|
+
12px apart and its title column 18px from the selection column; the
|
|
663
|
+
selection and menu columns keep 16px. The title column is left out of the
|
|
664
|
+
12px rule, which would otherwise outrank the 18px one.
|
|
665
|
+
@spec openspec/changes/board-table-density/specs/board-table-density/spec.md#requirement-a-board-table-pads-its-cells-as-the-boards-draw-them */
|
|
666
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board.cn-table-container--title-plain .cn-data-table th:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon):not(.cn-table-head--title),
|
|
667
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board.cn-table-container--title-plain .cn-data-table td:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon):not(.cn-table-col--title) {
|
|
641
668
|
padding-inline: 12px;
|
|
642
669
|
}
|
|
643
670
|
|
|
644
|
-
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th.cn-table-head--title,
|
|
645
|
-
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td.cn-table-col--title {
|
|
646
|
-
padding-inline
|
|
671
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board.cn-table-container--title-plain .cn-data-table th.cn-table-head--title,
|
|
672
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title {
|
|
673
|
+
padding-inline: 18px 12px;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/* A table that is not an index page's main list sits in a card and is the
|
|
677
|
+
compact one: 10px 12px in the header, 11px 12px in the cells
|
|
678
|
+
(DqInstellingen, DqVthInstellingen, DqZaaktype, DqTermijnen). The selection
|
|
679
|
+
column keeps its 16px, so it stays 60px wide. */
|
|
680
|
+
.cn-look-board .cn-table-container--board:not(.cn-index-page__main--table > *) .cn-data-table th {
|
|
681
|
+
padding: 10px 12px;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.cn-look-board .cn-table-container--board:not(.cn-index-page__main--table > *) .cn-data-table td {
|
|
685
|
+
padding: 11px 12px;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.cn-look-board .cn-table-container--board:not(.cn-index-page__main--table > *) .cn-data-table .cn-table-col--checkbox {
|
|
689
|
+
padding-inline: 16px;
|
|
647
690
|
}
|
|
648
691
|
|
|
649
692
|
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td > .cn-cell-renderer {
|
|
@@ -873,12 +916,15 @@
|
|
|
873
916
|
}
|
|
874
917
|
|
|
875
918
|
/* A page link is a <button>: Nextcloud's `button` rule sets it bold, the
|
|
876
|
-
boards set the links at the regular weight and only the current page at 600.
|
|
919
|
+
boards set the links at the regular weight and only the current page at 600.
|
|
920
|
+
The boards size a link's content box at 34px, so a bordered link is 36px
|
|
921
|
+
and the borderless current page 34px (DqZaken "2", "Volgende", "1").
|
|
922
|
+
@spec openspec/changes/board-pagination-links/specs/board-pagination-links/spec.md#requirement-a-board-page-link-is-sized-as-the-boards-draw-it */
|
|
877
923
|
.cn-look-board .cn-pagination--board .cn-pagination__board-link {
|
|
878
924
|
box-sizing: border-box;
|
|
879
|
-
min-width:
|
|
880
|
-
height:
|
|
881
|
-
min-height:
|
|
925
|
+
min-width: 36px;
|
|
926
|
+
height: 36px;
|
|
927
|
+
min-height: 36px;
|
|
882
928
|
margin: 0;
|
|
883
929
|
padding: 0 8px;
|
|
884
930
|
border: 1px solid var(--color-border);
|
|
@@ -903,7 +949,10 @@
|
|
|
903
949
|
}
|
|
904
950
|
|
|
905
951
|
.cn-look-board .cn-pagination--board .cn-pagination__board-link--current {
|
|
906
|
-
|
|
952
|
+
min-width: 34px;
|
|
953
|
+
height: 34px;
|
|
954
|
+
min-height: 34px;
|
|
955
|
+
border: 0;
|
|
907
956
|
background: var(--color-primary-element);
|
|
908
957
|
color: var(--color-primary-element-text);
|
|
909
958
|
font-weight: 600;
|
|
@@ -1271,6 +1320,26 @@
|
|
|
1271
1320
|
display: none;
|
|
1272
1321
|
}
|
|
1273
1322
|
|
|
1323
|
+
/* The index sidebar as the board draws it (IndexZijpaneel, DqFilterBeheren):
|
|
1324
|
+
360px wide, the line under the title 14px muted, and a round close button.
|
|
1325
|
+
The title and the tab row are the `.cn-index-sidebar-panel` rules.
|
|
1326
|
+
NcAppSidebar renders as the root's direct child, so the rules reach it
|
|
1327
|
+
through the root, as the toggle rule above does.
|
|
1328
|
+
@spec openspec/changes/board-index-sidebar/specs/board-index-sidebar/spec.md#requirement-the-board-index-sidebar-draws-the-boards-side-panel */
|
|
1329
|
+
.cn-look-board:has(.cn-index-page) > .app-sidebar {
|
|
1330
|
+
--app-sidebar-width: 360px;
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
.cn-look-board:has(.cn-index-page) > .app-sidebar .app-sidebar-header__subname {
|
|
1334
|
+
color: var(--color-text-maxcontrast);
|
|
1335
|
+
font-size: 14px;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
.cn-look-board:has(.cn-index-page) > .app-sidebar .app-sidebar__close {
|
|
1339
|
+
border-radius: 50%;
|
|
1340
|
+
color: var(--cn-board-text-soft);
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1274
1343
|
/* The folder pane as a card (DqAfdelingen): 280px, a hairline border, 12px
|
|
1275
1344
|
corners, with each folder's count in a grey pill. */
|
|
1276
1345
|
.cn-look-board .cn-index-page__folder-pane {
|
|
@@ -1406,3 +1475,73 @@
|
|
|
1406
1475
|
border-bottom: none;
|
|
1407
1476
|
padding-block: 2px;
|
|
1408
1477
|
}
|
|
1478
|
+
|
|
1479
|
+
/* ---- The index side panel (CnIndexSidebar, board IndexZijpaneel) -------- */
|
|
1480
|
+
/* The panel's title is 20px bold without the schema icon, and its tabs are
|
|
1481
|
+
one row of 40px labels, 14px weight 600 in the soft ink, the open one in
|
|
1482
|
+
the deep primary ink and underlined 2px in the primary colour on the
|
|
1483
|
+
strip's rule (DqFilterBeheren). NcAppSidebar stacks the icon over the
|
|
1484
|
+
label in a 54px tile with a highlight bar; the board does neither. The
|
|
1485
|
+
header rule repeats NcAppSidebar's own chain to outrank it.
|
|
1486
|
+
@spec openspec/changes/board-index-sidebar-tabs/specs/board-index-sidebar-tabs/spec.md#requirement-the-board-index-side-panel-draws-the-boards-header-and-tab-row */
|
|
1487
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-header__desc .app-sidebar-header__name-container .app-sidebar-header__mainname-container h2.app-sidebar-header__mainname {
|
|
1488
|
+
font-size: 20px;
|
|
1489
|
+
font-weight: 700;
|
|
1490
|
+
line-height: 1.2;
|
|
1491
|
+
min-height: 0;
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-header__figure:has(> .cn-index-sidebar__header-icon) {
|
|
1495
|
+
display: none;
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__nav[role="tablist"] {
|
|
1499
|
+
justify-content: flex-start;
|
|
1500
|
+
gap: 4px;
|
|
1501
|
+
margin: 0;
|
|
1502
|
+
padding: 14px 12px 0;
|
|
1503
|
+
border-bottom: 1px solid var(--color-border);
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__highlight {
|
|
1507
|
+
display: none;
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__tab[role="tab"] {
|
|
1511
|
+
flex: 0 0 auto;
|
|
1512
|
+
flex-direction: row;
|
|
1513
|
+
align-items: center;
|
|
1514
|
+
gap: 6px;
|
|
1515
|
+
box-sizing: border-box;
|
|
1516
|
+
height: 40px;
|
|
1517
|
+
min-height: 40px;
|
|
1518
|
+
margin: 0 0 -1px;
|
|
1519
|
+
padding: 0 10px;
|
|
1520
|
+
border: 0;
|
|
1521
|
+
border-bottom: 2px solid transparent;
|
|
1522
|
+
border-radius: 0;
|
|
1523
|
+
background: transparent;
|
|
1524
|
+
color: var(--cn-board-text-soft);
|
|
1525
|
+
font-size: 14px;
|
|
1526
|
+
font-weight: 600;
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__tab[role="tab"] * {
|
|
1530
|
+
font-weight: inherit;
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1533
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__tab[role="tab"]::after {
|
|
1534
|
+
content: none;
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__tab[role="tab"]:hover {
|
|
1538
|
+
background: transparent;
|
|
1539
|
+
border-bottom-color: var(--color-border-dark);
|
|
1540
|
+
color: var(--color-main-text);
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
.cn-look-board .cn-index-sidebar-panel .app-sidebar-tabs__tab[role="tab"][aria-selected="true"] {
|
|
1544
|
+
background: transparent;
|
|
1545
|
+
border-bottom-color: var(--color-primary-element);
|
|
1546
|
+
color: var(--color-primary-element-light-text);
|
|
1547
|
+
}
|
package/src/css/look-board.css
CHANGED
|
@@ -187,8 +187,8 @@
|
|
|
187
187
|
/* ---- Dashboard switch row --------------------------------------------- */
|
|
188
188
|
/* The switch row under a board dashboard's header (DqMijnWerk, DqMijnTeam).
|
|
189
189
|
The link pills take the deep primary ink of the boards' primary pills: the
|
|
190
|
-
light primary text
|
|
191
|
-
|
|
190
|
+
light primary text, the ink a theme pairs with the light primary ground
|
|
191
|
+
(DqMijnWerk #234a78 on #eaf0f7, 8:1). A theme that forces the link ink onto
|
|
192
192
|
every `a` reads it from --nldesign-color-on-surface, so the pill hands it
|
|
193
193
|
its own. The view switch is the board's segmented control: 14px labels, the
|
|
194
194
|
others in the soft ink, the chosen one raised on white without an edge;
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
@spec openspec/changes/board-dashboard-switch-row/specs/board-dashboard-switch-row/spec.md#requirement-the-link-pills-take-the-deep-primary-ink
|
|
197
197
|
@spec openspec/changes/board-dashboard-switch-row/specs/board-dashboard-switch-row/spec.md#requirement-the-view-switch-is-the-boards-segmented-control */
|
|
198
198
|
.cn-look-board .cn-dashboard-page__switch-row .cn-dashboard-page__view-link:not(.cn-look-nextcloud *) {
|
|
199
|
-
--cn-view-link-ink:
|
|
199
|
+
--cn-view-link-ink: var(--color-primary-element-light-text);
|
|
200
200
|
--nldesign-color-on-surface: var(--cn-view-link-ink);
|
|
201
201
|
color: var(--cn-view-link-ink);
|
|
202
202
|
}
|
|
@@ -221,6 +221,25 @@
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
+
/* ---- Period group ------------------------------------------------------- */
|
|
225
|
+
/* The boards' compact segmented group (the period switch on DqDoorlooptijd
|
|
226
|
+
and DqTermijnen, Gemiddeld / Mediaan on DqProcesanalyse) pads a label 14px
|
|
227
|
+
on each side and draws the options not chosen in the soft ink; the chosen
|
|
228
|
+
one is raised on white in the main ink. An icon-only option stays square.
|
|
229
|
+
@spec openspec/changes/board-period-group-soft-ink/specs/board-period-group-soft-ink/spec.md#requirement-a-board-period-group-draws-the-options-not-chosen-in-the-soft-ink */
|
|
230
|
+
.cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option:not(.cn-look-nextcloud *) {
|
|
231
|
+
padding: 0 14px;
|
|
232
|
+
color: var(--cn-board-text-soft);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option--checked:not(.cn-look-nextcloud *) {
|
|
236
|
+
color: var(--color-main-text);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.cn-look-board .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option--icon-only:not(.cn-look-nextcloud *) {
|
|
240
|
+
padding: 0;
|
|
241
|
+
}
|
|
242
|
+
|
|
224
243
|
/* ---- Button weight ------------------------------------------------------ */
|
|
225
244
|
/* The boards draw a labelled button at 600 (DqZaken "Downloaden", DqZaak's
|
|
226
245
|
header, dialog footers, toolbar and row actions). An NcButton reads its
|
|
@@ -228,9 +247,15 @@
|
|
|
228
247
|
look sets 600 on each button, so every NcButton on a board page draws the
|
|
229
248
|
board's weight without a rule per surface. Breadcrumb buttons keep the
|
|
230
249
|
crumb weight.
|
|
231
|
-
|
|
250
|
+
The boards also draw a button's text at 14px, against Nextcloud's 15px.
|
|
251
|
+
NcButton reads its size from --default-font-size, so the look sets that
|
|
252
|
+
variable on the button: a surface that sets its own `font-size` (the next
|
|
253
|
+
step card's 15px) keeps it.
|
|
254
|
+
@spec openspec/changes/board-button-weight/specs/board-button-weight/spec.md#requirement-a-board-button-draws-at-600
|
|
255
|
+
@spec openspec/changes/board-control-text/specs/board-control-text/spec.md#requirement-a-board-button-draws-its-text-at-14px */
|
|
232
256
|
.cn-look-board .button-vue:not(.cn-look-nextcloud *):not(.vue-crumb *) {
|
|
233
257
|
--font-weight-element: 600;
|
|
258
|
+
--default-font-size: 14px;
|
|
234
259
|
}
|
|
235
260
|
|
|
236
261
|
/* ---- A button with an icon and a label --------------------------------- */
|
|
@@ -393,6 +418,26 @@
|
|
|
393
418
|
background: var(--color-background-hover);
|
|
394
419
|
}
|
|
395
420
|
|
|
421
|
+
/* ---- A secondary button --------------------------------------------------- */
|
|
422
|
+
/* The boards draw every secondary button neutral: the main background, a 1px
|
|
423
|
+
control border, the main text, the hover ground on hover (DqFlow "Testen
|
|
424
|
+
met een zaak", DqFunctionaliteiten "Documentatie", DqTaak "Afronden").
|
|
425
|
+
NcButton draws its secondary from the primary-light variables, on a 2px
|
|
426
|
+
bottom edge; the look points those variables at the neutral colours on the
|
|
427
|
+
button itself. The selector weighs (0,3,0): it outranks NcButton's border
|
|
428
|
+
(0,2,0), and a surface rule of the same weight later in the cascade (a
|
|
429
|
+
dialog's cancel) still decides for its surface.
|
|
430
|
+
@spec openspec/changes/board-secondary-neutral/specs/board-secondary-neutral/spec.md#requirement-a-board-secondary-button-is-neutral */
|
|
431
|
+
.cn-look-board .button-vue.button-vue--secondary:where(:not(.cn-look-nextcloud *):not(.vue-crumb *)),
|
|
432
|
+
.cn-look-board .button-vue.button-vue--vue-secondary:where(:not(.cn-look-nextcloud *):not(.vue-crumb *)) {
|
|
433
|
+
--color-primary-element-light: var(--color-main-background);
|
|
434
|
+
--color-primary-element-light-hover: var(--color-background-hover);
|
|
435
|
+
--color-primary-element-light-text: var(--color-main-text);
|
|
436
|
+
--nldesign-color-on-surface: var(--color-main-text);
|
|
437
|
+
border: 1px solid var(--cn-board-control-border);
|
|
438
|
+
color: var(--color-main-text);
|
|
439
|
+
}
|
|
440
|
+
|
|
396
441
|
/* ---- Header action buttons (CnActionButtons) ----------------------------- */
|
|
397
442
|
/* The board draws a page's secondary actions as neutral 40px buttons: the
|
|
398
443
|
main background, a grey border, the main text at 600 (DqZaak "Bericht",
|
|
@@ -1611,6 +1656,11 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1611
1656
|
padding: 0 var(--cn-board-dashboard-card-inset) 10px;
|
|
1612
1657
|
}
|
|
1613
1658
|
|
|
1659
|
+
/* DqMijnWerk "Mijn archiefbeoordelingen": its rows and its empty line. */
|
|
1660
|
+
.cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-decision-list {
|
|
1661
|
+
padding: 0 var(--cn-board-dashboard-card-inset) 20px;
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1614
1664
|
.cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-stacked-bar,
|
|
1615
1665
|
.cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-week-strip {
|
|
1616
1666
|
box-sizing: border-box;
|
|
@@ -1656,6 +1706,29 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1656
1706
|
padding-inline-end: var(--cn-board-dashboard-card-inset);
|
|
1657
1707
|
}
|
|
1658
1708
|
|
|
1709
|
+
/* ---- A card of cards (DqDoorlooptijd "Naleving") ------------------------- */
|
|
1710
|
+
/* A sections widget laid out in columns on a dashboard card keeps the card's
|
|
1711
|
+
side inset and 20px below. Each section is a small card: a hairline edge,
|
|
1712
|
+
a 10px corner, 14px 16px of padding and its heading at 15px 700, 10px above
|
|
1713
|
+
the content.
|
|
1714
|
+
@spec openspec/changes/sections-card-grid/specs/sections-card-grid/spec.md#requirement-a-board-card-of-cards-draws-the-boards-small-cards */
|
|
1715
|
+
.cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-sections-widget--grid {
|
|
1716
|
+
padding: 0 var(--cn-board-dashboard-card-inset) 20px;
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
.cn-look-board .cn-sections-widget--grid.cn-sections-widget--cards .cn-sections-widget__section:not(.cn-look-nextcloud *) {
|
|
1720
|
+
padding: 14px 16px;
|
|
1721
|
+
border: 1px solid var(--cn-board-hairline);
|
|
1722
|
+
border-radius: 10px;
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
.cn-look-board .cn-sections-widget--grid.cn-sections-widget--cards .cn-sections-widget__heading:not(.cn-look-nextcloud *) {
|
|
1726
|
+
margin: 0 0 10px;
|
|
1727
|
+
font-size: 15px;
|
|
1728
|
+
font-weight: 700;
|
|
1729
|
+
line-height: normal;
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1659
1732
|
/* ---- Week strip (DqMijnWerk "Termijnen deze week") ---------------------- */
|
|
1660
1733
|
/* The days wrap inside the card instead of scrolling sideways: a row holds
|
|
1661
1734
|
as many days of at least 120px as the card fits, and the rest go to the
|
|
@@ -1673,6 +1746,45 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1673
1746
|
|
|
1674
1747
|
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__head {
|
|
1675
1748
|
flex-wrap: wrap;
|
|
1749
|
+
font-size: 13px;
|
|
1750
|
+
font-weight: 700;
|
|
1751
|
+
color: var(--cn-board-text-soft);
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
/* A board day is a tinted box without an edge, at least 132px high so a week
|
|
1755
|
+
of empty days still reads as a week (DqMijnWerk "Termijnen deze week"): the
|
|
1756
|
+
workspace grey, and today the light primary ground in its own ink. Forced
|
|
1757
|
+
colours drop the grounds, so the box keeps an edge there. */
|
|
1758
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day {
|
|
1759
|
+
min-height: 132px;
|
|
1760
|
+
padding: 12px;
|
|
1761
|
+
border-color: transparent;
|
|
1762
|
+
border-radius: 10px;
|
|
1763
|
+
background: var(--nldesign-component-content-surface-background-color, var(--color-background-hover));
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day--today {
|
|
1767
|
+
background: var(--color-primary-element-light);
|
|
1768
|
+
}
|
|
1769
|
+
|
|
1770
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day--today .cn-week-strip__head {
|
|
1771
|
+
color: var(--color-primary-element-light-text);
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__today {
|
|
1775
|
+
border-radius: 10px;
|
|
1776
|
+
font-size: 11px;
|
|
1777
|
+
line-height: 13px;
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__empty {
|
|
1781
|
+
font-size: 13px;
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
@media (forced-colors: active) {
|
|
1785
|
+
.cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__day {
|
|
1786
|
+
border-color: CanvasText;
|
|
1787
|
+
}
|
|
1676
1788
|
}
|
|
1677
1789
|
|
|
1678
1790
|
/* ---- A card of boxed stat tiles (DcRapportages "Vergaderingen en efficiëntie") -- */
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
* for the language, then for its base (`en_GB` falls back to `en`);
|
|
13
13
|
* 2. otherwise the host's `translate(text, vars)`, whose answer is the text
|
|
14
14
|
* itself when it has no translation;
|
|
15
|
-
* 3. the
|
|
15
|
+
* 3. the library's own catalog (`library`), for the strings a library
|
|
16
|
+
* component asks through `cnTranslate` and the app never translates;
|
|
17
|
+
* 4. the text as written.
|
|
16
18
|
*
|
|
17
19
|
* The fallback is per label, never per page. The manifest is read through a
|
|
18
20
|
* getter on every call, so an edit to the working copy shows at once.
|
|
@@ -52,9 +54,10 @@ function fill(text, vars) {
|
|
|
52
54
|
* @param {() => (object|null|undefined)} options.getManifest The live manifest (the editor's working copy while editing).
|
|
53
55
|
* @param {() => string} options.getLanguage The language to show.
|
|
54
56
|
* @param {(text: string, vars?: object) => string} [options.translate] The host's translate.
|
|
57
|
+
* @param {(text: string, vars?: object) => string} [options.library] The library's translate, asked when the host has no translation.
|
|
55
58
|
* @return {Function} `(text, vars) => string`, with `lookup`, `fellBack` and `sourceLanguage` attached.
|
|
56
59
|
*/
|
|
57
|
-
export function createManifestTranslate({ getManifest, getLanguage, translate }) {
|
|
60
|
+
export function createManifestTranslate({ getManifest, getLanguage, translate, library }) {
|
|
58
61
|
const host = typeof translate === 'function' ? translate : (text) => text
|
|
59
62
|
|
|
60
63
|
const i18n = () => {
|
|
@@ -79,7 +82,13 @@ export function createManifestTranslate({ getManifest, getLanguage, translate })
|
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
84
|
const answer = host(text, vars)
|
|
82
|
-
|
|
85
|
+
let shown = typeof answer === 'string' && answer !== '' ? answer : fill(text, vars)
|
|
86
|
+
if (shown === fill(text, vars) && typeof library === 'function') {
|
|
87
|
+
const own = library(text, vars)
|
|
88
|
+
if (typeof own === 'string' && own !== '') {
|
|
89
|
+
shown = own
|
|
90
|
+
}
|
|
91
|
+
}
|
|
83
92
|
return { text: shown, fellBack: !!block && !inSource && shown === fill(text, vars) }
|
|
84
93
|
}
|
|
85
94
|
|
|
@@ -123,9 +123,9 @@ export function resolveQueryFilters(query, ctx) {
|
|
|
123
123
|
}
|
|
124
124
|
const out = {}
|
|
125
125
|
for (const [k, v] of Object.entries(query)) {
|
|
126
|
-
// `contentSearch` is the index page's own "search inside files" switch
|
|
127
|
-
//
|
|
128
|
-
if (k.startsWith('_') || k === 'contentSearch') {
|
|
126
|
+
// `contentSearch` is the index page's own "search inside files" switch
|
|
127
|
+
// and `savedView` names the applied saved view: neither filters the records.
|
|
128
|
+
if (k.startsWith('_') || k === 'contentSearch' || k === 'savedView') {
|
|
129
129
|
continue
|
|
130
130
|
}
|
|
131
131
|
if (v === undefined || v === null || v === '') {
|