@conduction/nextcloud-vue 2.135.0 → 2.137.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/CnActionDialog/CnActionDialog.vue.js +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +2 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +65 -50
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +9 -0
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +4 -3
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +4 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +61 -28
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +6 -0
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js +9 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +4 -11
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +32 -0
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +34 -26
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +24 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -2
- 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.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +2 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +39 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +6 -5
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +11 -0
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +10 -2
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +18 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +38 -23
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +1 -0
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue.js +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue2.js +14 -4
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue3.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js +10 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +29 -13
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js +3 -1
- package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js.map +1 -1
- package/dist/esm/composables/indexSources.js +69 -3
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/l10n/en.json.js +20 -20
- package/dist/esm/l10n/nl.json.js +21 -21
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +580 -324
- package/dist/esm/utils/contentHeaderLink.js +7 -1
- package/dist/esm/utils/contentHeaderLink.js.map +1 -1
- package/dist/esm/utils/savedViewMenu.js +4 -1
- package/dist/esm/utils/savedViewMenu.js.map +1 -1
- package/dist/esm/utils/savedViewSummary.js +11 -4
- package/dist/esm/utils/savedViewSummary.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +3 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +1159 -812
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +580 -324
- package/l10n/en.json +20 -20
- package/l10n/nl.json +21 -21
- package/package.json +1 -1
- package/src/components/CnActionDialog/CnActionDialog.vue +45 -4
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +13 -1
- package/src/components/CnAppNav/CnAppNav.vue +28 -3
- package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +15 -0
- package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +2 -10
- package/src/components/CnDataTable/CnDataTable.md +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +38 -1
- package/src/components/CnDetailPage/CnDetailPage.md +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +26 -2
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +1 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +44 -6
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -0
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +21 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +38 -2
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +7 -0
- package/src/components/CnRetentionWidget/CnRetentionWidget.vue +13 -0
- package/src/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue +14 -4
- package/src/components/CnTimelineWidget/CnTimelineManage.vue +23 -0
- package/src/components/CnTimelineWidget/dashboardRegistration.js +3 -1
- package/src/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue +7 -0
- package/src/composables/indexSources.js +69 -3
- package/src/css/look-board-detail.css +57 -1
- package/src/css/look-board-index.css +76 -1
- package/src/css/look-board.css +51 -4
- package/src/css/table.css +5 -0
- package/src/schemas/app-manifest-v2.schema.json +4 -2
- package/src/utils/contentHeaderLink.js +7 -1
- package/src/utils/savedViewMenu.js +4 -1
- package/src/utils/savedViewSummary.js +11 -4
- package/src/utils/validateManifestV2.compiled.js +2 -2
- package/src/utils/widgetDispatch.js +3 -1
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--secondary:hover,
|
|
92
|
-
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item .button-vue:hover {
|
|
92
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item:not(.action-item--open) .button-vue:hover {
|
|
93
93
|
background: var(--color-background-hover) !important;
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -1368,6 +1368,7 @@
|
|
|
1368
1368
|
margin-inline-start: auto;
|
|
1369
1369
|
color: var(--color-text-maxcontrast);
|
|
1370
1370
|
font-size: 13px;
|
|
1371
|
+
white-space: nowrap;
|
|
1371
1372
|
}
|
|
1372
1373
|
|
|
1373
1374
|
.cn-look-board .cn-object-card--board .cn-object-card__record .cn-object-card__title {
|
|
@@ -1380,12 +1381,19 @@
|
|
|
1380
1381
|
}
|
|
1381
1382
|
|
|
1382
1383
|
.cn-look-board .cn-object-card--board .cn-object-card__record-meta {
|
|
1384
|
+
--nldesign-component-paragraph-font-size: 14px;
|
|
1385
|
+
--nldesign-component-paragraph-color: var(--color-text-maxcontrast);
|
|
1383
1386
|
margin: 0;
|
|
1384
1387
|
color: var(--color-text-maxcontrast);
|
|
1385
1388
|
font-size: 14px;
|
|
1386
1389
|
}
|
|
1387
1390
|
|
|
1391
|
+
/* The meta line, note and description are paragraphs: each hands the theme,
|
|
1392
|
+
which sets paragraphs with `!important`, its own size and ink. */
|
|
1388
1393
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note {
|
|
1394
|
+
--nldesign-component-paragraph-font-size: 13px;
|
|
1395
|
+
--nldesign-component-paragraph-font-weight: 600;
|
|
1396
|
+
--nldesign-component-paragraph-color: var(--cn-board-text-soft);
|
|
1389
1397
|
margin: 0;
|
|
1390
1398
|
color: var(--cn-board-text-soft);
|
|
1391
1399
|
font-size: 13px;
|
|
@@ -1393,10 +1401,12 @@
|
|
|
1393
1401
|
}
|
|
1394
1402
|
|
|
1395
1403
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note--purple {
|
|
1404
|
+
--nldesign-component-paragraph-color: var(--cn-status-purple-text);
|
|
1396
1405
|
color: var(--cn-status-purple-text);
|
|
1397
1406
|
}
|
|
1398
1407
|
|
|
1399
1408
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note--teal {
|
|
1409
|
+
--nldesign-component-paragraph-color: var(--cn-status-teal-text);
|
|
1400
1410
|
color: var(--cn-status-teal-text);
|
|
1401
1411
|
}
|
|
1402
1412
|
|
|
@@ -1433,6 +1443,9 @@
|
|
|
1433
1443
|
}
|
|
1434
1444
|
|
|
1435
1445
|
.cn-look-board .cn-object-card--board .cn-object-card__record-description {
|
|
1446
|
+
--nldesign-component-paragraph-font-size: 14px;
|
|
1447
|
+
--nldesign-component-paragraph-line-height: 1.4;
|
|
1448
|
+
--nldesign-component-paragraph-color: var(--color-text-maxcontrast);
|
|
1436
1449
|
margin: 0;
|
|
1437
1450
|
color: var(--color-text-maxcontrast);
|
|
1438
1451
|
font-size: 14px;
|
|
@@ -1869,6 +1882,22 @@
|
|
|
1869
1882
|
font-weight: 700;
|
|
1870
1883
|
}
|
|
1871
1884
|
|
|
1885
|
+
/* A pill in a trailing cell stays inside the cell's width and ends in an
|
|
1886
|
+
ellipsis, instead of running over the next cell (DqTeamwachtrij). */
|
|
1887
|
+
.cn-look-board .cn-object-row__trail .cn-cell-renderer:not(.cn-look-nextcloud *) {
|
|
1888
|
+
display: block;
|
|
1889
|
+
max-width: 100%;
|
|
1890
|
+
}
|
|
1891
|
+
|
|
1892
|
+
.cn-look-board .cn-object-row__trail .cn-status-badge:not(.cn-look-nextcloud *) {
|
|
1893
|
+
display: inline-block;
|
|
1894
|
+
box-sizing: border-box;
|
|
1895
|
+
max-width: 100%;
|
|
1896
|
+
overflow: hidden;
|
|
1897
|
+
text-overflow: ellipsis;
|
|
1898
|
+
vertical-align: middle;
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1872
1901
|
/* ---- The map view's missing-address card (DqZakenKaart) ---------------- */
|
|
1873
1902
|
/* The board draws "3 zaken zonder adres" as a 15px title at its normal line
|
|
1874
1903
|
height with "Toon ze in de tabel" under it as a link flush with the title,
|
|
@@ -1943,6 +1972,31 @@
|
|
|
1943
1972
|
border-radius: 50%;
|
|
1944
1973
|
}
|
|
1945
1974
|
|
|
1975
|
+
/* The panel's words (DqFilterBeheren): a group heading at 15px/700 in the
|
|
1976
|
+
main ink, the group's note and a view's description at 13px in the muted
|
|
1977
|
+
ink, never bold.
|
|
1978
|
+
@spec openspec/changes/board-saved-views-panel-type/specs/board-saved-views-panel-type/spec.md */
|
|
1979
|
+
.cn-look-board .cn-saved-views-panel:not(.cn-look-nextcloud *) .cn-saved-views-panel__section {
|
|
1980
|
+
margin: 12px 0 0;
|
|
1981
|
+
font-size: 15px;
|
|
1982
|
+
font-weight: 700;
|
|
1983
|
+
line-height: 1.2;
|
|
1984
|
+
color: var(--color-main-text);
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
.cn-look-board .cn-saved-views-panel:not(.cn-look-nextcloud *) .cn-saved-views-panel__note {
|
|
1988
|
+
font-size: 13px;
|
|
1989
|
+
font-weight: 400;
|
|
1990
|
+
line-height: 1.3;
|
|
1991
|
+
color: var(--color-text-maxcontrast);
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
.cn-look-board .cn-saved-views-panel:not(.cn-look-nextcloud *) .cn-saved-views-panel__subline {
|
|
1995
|
+
font-size: 13px;
|
|
1996
|
+
font-weight: 400;
|
|
1997
|
+
color: var(--color-text-maxcontrast);
|
|
1998
|
+
}
|
|
1999
|
+
|
|
1946
2000
|
/* ---- A saved view row's menu ------------------------------------------- */
|
|
1947
2001
|
/* The menu trigger on a saved view row ("Beheer Termijn deze week") is a
|
|
1948
2002
|
round 34px button (DqFilterBeheren, DqFilterInMenu); NcActions drew the
|
|
@@ -2005,3 +2059,24 @@
|
|
|
2005
2059
|
.cn-look-board .cn-saved-views-panel:not(.cn-look-nextcloud *) .cn-saved-views-panel__row:is(.cn-saved-views-panel__row--selected, :has(.action-item--open)) .cn-saved-views-panel__name-text {
|
|
2006
2060
|
color: var(--color-primary-element-light-text);
|
|
2007
2061
|
}
|
|
2062
|
+
|
|
2063
|
+
/* ---- The side-panel grid's row spacing --------------------------------- */
|
|
2064
|
+
/* The side-panel page is a grid of seven rows; a row-gap opens between every
|
|
2065
|
+
pair, empty or not, so a page without below-header, stat row or chip row
|
|
2066
|
+
drew 60px of nothing under its header (DqZoekresultaten). The grid has no
|
|
2067
|
+
row gap here; each part that is present carries the section gap under it.
|
|
2068
|
+
@spec openspec/changes/side-panel-grid-no-empty-row-gaps/specs/side-panel-grid-no-empty-row-gaps/spec.md */
|
|
2069
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) {
|
|
2070
|
+
row-gap: 0;
|
|
2071
|
+
}
|
|
2072
|
+
|
|
2073
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) > :first-child,
|
|
2074
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) > .cn-index-page__below-header,
|
|
2075
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) > .cn-index-page__stat-row,
|
|
2076
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) > .cn-actions-bar {
|
|
2077
|
+
margin-bottom: var(--cn-board-section-gap);
|
|
2078
|
+
}
|
|
2079
|
+
|
|
2080
|
+
.cn-look-board .cn-index-page--with-side-panel:not(.cn-look-nextcloud *) > .cn-index-page__quick-filter-row {
|
|
2081
|
+
margin-bottom: calc(var(--cn-board-section-gap) + 12px);
|
|
2082
|
+
}
|
package/src/css/look-board.css
CHANGED
|
@@ -582,6 +582,31 @@
|
|
|
582
582
|
background: var(--color-background-hover);
|
|
583
583
|
}
|
|
584
584
|
|
|
585
|
+
/* ---- An ordered list field ----------------------------------------------- */
|
|
586
|
+
/* DqPersoonlijkeInstellingen "Weergaven in mijn menu": a row's labelled remove
|
|
587
|
+
button ("Uit menu halen") is an outlined secondary button, and the select
|
|
588
|
+
that adds a row runs the field's full width.
|
|
589
|
+
@spec openspec/changes/board-ordered-list-field/specs/board-ordered-list-field/spec.md */
|
|
590
|
+
.cn-look-board .cn-ordered-list-field__button--text:not(.cn-look-nextcloud *) {
|
|
591
|
+
box-sizing: border-box;
|
|
592
|
+
height: 34px;
|
|
593
|
+
min-height: 34px;
|
|
594
|
+
padding: 0 14px;
|
|
595
|
+
border: 1px solid var(--cn-board-control-border);
|
|
596
|
+
background: var(--color-main-background);
|
|
597
|
+
color: var(--color-main-text);
|
|
598
|
+
font-size: 14px;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.cn-look-board .cn-ordered-list-field__button--text:not(.cn-look-nextcloud *):hover:not(:disabled) {
|
|
602
|
+
background: var(--color-background-hover);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
.cn-look-board .cn-ordered-list-field__add .v-select:not(.cn-look-nextcloud *) {
|
|
606
|
+
width: 100%;
|
|
607
|
+
max-width: none;
|
|
608
|
+
}
|
|
609
|
+
|
|
585
610
|
/* ---- A secondary button --------------------------------------------------- */
|
|
586
611
|
/* The boards draw every secondary button neutral: the main background, a 1px
|
|
587
612
|
control border, the main text, the hover ground on hover (DqFlow "Testen
|
|
@@ -1407,6 +1432,15 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1407
1432
|
color: var(--color-text-maxcontrast);
|
|
1408
1433
|
}
|
|
1409
1434
|
|
|
1435
|
+
/* A linked cell in a settings card's table reads in the text ink, as the index
|
|
1436
|
+
tables do, not in the settings page's link blue (DqInstellingen: a
|
|
1437
|
+
connection's name opens its settings card). The underline marks the link.
|
|
1438
|
+
@spec openspec/changes/settings-table-link-ink/specs/settings-board-look/spec.md */
|
|
1439
|
+
.cn-look-board .settings-section .cn-data-table a.cn-cell-renderer__link:not(.cn-look-nextcloud *) {
|
|
1440
|
+
color: var(--color-main-text);
|
|
1441
|
+
text-decoration: underline;
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1410
1444
|
/* Section actions sit at the end of the title row. The row is a grid, so a
|
|
1411
1445
|
long title wraps beside the buttons instead of running under them. A
|
|
1412
1446
|
half-width card keeps them there (DqVthInstellingen "Inspectiechecklists",
|
|
@@ -1801,14 +1835,16 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1801
1835
|
line-height: 1.5;
|
|
1802
1836
|
}
|
|
1803
1837
|
|
|
1838
|
+
/* `!important` on the size: a theme that sizes every paragraph with
|
|
1839
|
+
`!important` (thematiq's paragraph token, 15px) would win otherwise. */
|
|
1804
1840
|
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) p {
|
|
1805
1841
|
color: var(--color-primary-element-light-text) !important;
|
|
1806
|
-
font-size: inherit;
|
|
1842
|
+
font-size: inherit !important;
|
|
1807
1843
|
line-height: inherit;
|
|
1808
1844
|
}
|
|
1809
1845
|
|
|
1810
1846
|
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) .notecard__heading {
|
|
1811
|
-
font-size: inherit;
|
|
1847
|
+
font-size: inherit !important;
|
|
1812
1848
|
font-weight: 700 !important;
|
|
1813
1849
|
}
|
|
1814
1850
|
|
|
@@ -2850,8 +2886,12 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
2850
2886
|
font-size: 14px;
|
|
2851
2887
|
}
|
|
2852
2888
|
|
|
2889
|
+
/* The version card's title follows its board: 17px on DqInstellingenAlgemeen
|
|
2890
|
+
and LrBeheerinstellingen; an app whose board draws another size passes the
|
|
2891
|
+
shell's `versionTitleSize`.
|
|
2892
|
+
@spec openspec/changes/board-version-title-size/specs/board-settings-card-controls/spec.md */
|
|
2853
2893
|
.cn-look-board .settings-section:not(.cn-look-nextcloud *):has(.cn-version-info--compact) > .settings-section__name {
|
|
2854
|
-
font-size:
|
|
2894
|
+
font-size: var(--cn-board-version-title-size, 17px);
|
|
2855
2895
|
}
|
|
2856
2896
|
|
|
2857
2897
|
/* ---- A card titled as a side card (`titleTone: "side"`) ------------------ */
|
|
@@ -2886,9 +2926,16 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
2886
2926
|
gives the second pixel back so the words stay put. The board draws no
|
|
2887
2927
|
option icon, only the radio and the words.
|
|
2888
2928
|
@spec openspec/changes/board-setup-choice-rows/specs/board-setup-choice-rows/spec.md */
|
|
2929
|
+
/* The radio sits 21px inside the option's edge (DqInstellen): 1px border and
|
|
2930
|
+
20px padding, or 2px and 19px on the chosen option.
|
|
2931
|
+
@spec openspec/changes/board-setup-choice-inset/specs/board-setup-choice-rows/spec.md */
|
|
2932
|
+
.cn-look-board .cn-setup-step .cn-choice-cards .cn-choice-cards__row:not(.cn-look-nextcloud *) {
|
|
2933
|
+
padding: 12px 20px;
|
|
2934
|
+
}
|
|
2935
|
+
|
|
2889
2936
|
.cn-look-board .cn-setup-step .cn-choice-cards .cn-choice-cards__row--selected:not(.cn-look-nextcloud *),
|
|
2890
2937
|
.cn-look-board .cn-setup-step .cn-choice-cards .cn-choice-cards__row--selected:hover:not(.cn-look-nextcloud *) {
|
|
2891
|
-
padding: 11px
|
|
2938
|
+
padding: 11px 19px;
|
|
2892
2939
|
border-width: 2px;
|
|
2893
2940
|
box-shadow: none;
|
|
2894
2941
|
}
|
package/src/css/table.css
CHANGED
|
@@ -203,6 +203,11 @@
|
|
|
203
203
|
/* The overline of a cell (`columns[].overline` / `overlineText`): muted and
|
|
204
204
|
smaller, on its own line above the value. Same theme hooks as the
|
|
205
205
|
secondary line. */
|
|
206
|
+
/* A count column's zero label as text (`aggregate.zeroAs: "text"`): "Geen" in the muted ink. */
|
|
207
|
+
.cn-data-table .cn-table-cell__zero {
|
|
208
|
+
color: var(--color-text-maxcontrast);
|
|
209
|
+
}
|
|
210
|
+
|
|
206
211
|
.cn-data-table .cn-table-cell__overline {
|
|
207
212
|
display: block;
|
|
208
213
|
color: var(--cn-table-secondary-color, var(--color-text-maxcontrast));
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"$id": "https://raw.githubusercontent.com/ConductionNL/nextcloud-vue/main/src/schemas/app-manifest-v2.schema.json",
|
|
4
4
|
"title": "Conduction App Manifest v2",
|
|
5
5
|
"description": "v2 schema for the JSON-driven page and navigation manifest consumed by @conduction/nextcloud-vue. Introduces a uniform widgets[] array on every page type with a per-slot grid coordinate system, a typed actions[] discriminator, and the required $schema field for version detection. v1 manifests continue to validate against app-manifest.schema.json (unchanged).",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.155.0",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"required": ["$schema", "version"],
|
|
9
9
|
"allOf": [
|
|
@@ -3609,7 +3609,9 @@
|
|
|
3609
3609
|
"else": {
|
|
3610
3610
|
"$ref": "#/$defs/actionFields",
|
|
3611
3611
|
"properties": {
|
|
3612
|
-
"children": { "items": { "$ref": "#/$defs/headerAction" } }
|
|
3612
|
+
"children": { "items": { "$ref": "#/$defs/headerAction" } },
|
|
3613
|
+
"tabs": { "type": "array", "items": { "type": "string", "minLength": 1 }, "description": "As a `primaryActionByStage` entry: the body tabs beside which its header button shows (2.155.0)." },
|
|
3614
|
+
"notTabs": { "type": "array", "items": { "type": "string", "minLength": 1 }, "description": "As a `primaryActionByStage` entry: the body tabs beside which its header button stands aside; it stays in the Actions menu (2.155.0)." }
|
|
3613
3615
|
},
|
|
3614
3616
|
"unevaluatedProperties": false
|
|
3615
3617
|
}
|
|
@@ -52,6 +52,8 @@ export function contentHeaderLink(content) {
|
|
|
52
52
|
/**
|
|
53
53
|
* The header link a widget DEFINITION declares: `headerLink` on the
|
|
54
54
|
* definition itself, else what its content asks for (see contentHeaderLink).
|
|
55
|
+
* A view-all the widget draws under its own content
|
|
56
|
+
* (`viewAllPlacement: "footer"`) is not a header link.
|
|
55
57
|
*
|
|
56
58
|
* @param {object|null|undefined} widget A widget definition.
|
|
57
59
|
* @return {{label: string, route?: string, params?: object, query?: object, href?: string}|null}
|
|
@@ -64,7 +66,11 @@ export function widgetHeaderLink(widget) {
|
|
|
64
66
|
if (declared && typeof declared === 'object' && typeof declared.label === 'string' && declared.label !== '') {
|
|
65
67
|
return declared
|
|
66
68
|
}
|
|
67
|
-
|
|
69
|
+
const content = widget.content
|
|
70
|
+
if (content && content.viewAllPlacement === 'footer' && !content.headerLink) {
|
|
71
|
+
return null
|
|
72
|
+
}
|
|
73
|
+
return contentHeaderLink(content)
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
/**
|
|
@@ -198,6 +198,9 @@ export const SAVED_VIEW_MENU_EMPTY = 'saved-views-empty'
|
|
|
198
198
|
* An entry with a badge carries it as the menu entry's `count` (and
|
|
199
199
|
* `counterVariant`), which CnAppRoot fetches like any filtered menu count.
|
|
200
200
|
*
|
|
201
|
+
* The caption carries a pencil that opens the user settings, where the views
|
|
202
|
+
* in the menu are reordered, removed and added.
|
|
203
|
+
*
|
|
201
204
|
* With `showEmpty`, an app that offers saved views shows the group also while
|
|
202
205
|
* the user pinned none, with one line saying how to add one, so the group can
|
|
203
206
|
* be found.
|
|
@@ -215,7 +218,7 @@ export function withSavedViewMenu(menu, entries, options = {}) {
|
|
|
215
218
|
}
|
|
216
219
|
const sorted = menu.map((item, index) => ({ item, index })).sort((a, b) => byOrder(a.item, b.item) || a.index - b.index).map(({ item }) => item)
|
|
217
220
|
const group = [
|
|
218
|
-
{ id: SAVED_VIEW_MENU_CAPTION, type: 'caption', label: t('nextcloud-vue', 'My views') },
|
|
221
|
+
{ id: SAVED_VIEW_MENU_CAPTION, type: 'caption', label: t('nextcloud-vue', 'My views'), action: 'user-settings' },
|
|
219
222
|
...(list.length > 0
|
|
220
223
|
? list.map((e) => ({
|
|
221
224
|
id: `${SAVED_VIEW_MENU_PREFIX}${e.id}`,
|
|
@@ -69,17 +69,23 @@ export function summarizeViewFilters(state, options = {}) {
|
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
71
|
* The ids a view's filters hold per reference property, for a label lookup.
|
|
72
|
+
* A filter on a value that identifies a record without being its id (a case
|
|
73
|
+
* type's `identifier`) is a reference too when the page's `filterLabels`
|
|
74
|
+
* entry names it: `reference: { register?, schema, matchField, labelField }`.
|
|
72
75
|
*
|
|
73
76
|
* @param {{filters?: object}} state The view's state.
|
|
74
77
|
* @param {Array<object>} fields The page schema's fields (`fieldsFromSchema`).
|
|
75
|
-
* @
|
|
78
|
+
* @param {{[key: string]: {reference?: object}}} [filterLabels] The page's `config.filterLabels`.
|
|
79
|
+
* @return {Array<{key: string, register: string, schema: string, labelField: string, matchField?: string, ids: Array<string>}>} One entry per reference filter.
|
|
80
|
+
* @spec openspec/changes/saved-view-summary-match-field-labels/specs/saved-view-menu-settings/spec.md#requirement-a-filter-on-a-records-identifier-reads-as-the-records-name
|
|
76
81
|
*/
|
|
77
|
-
export function viewFilterReferences(state, fields) {
|
|
82
|
+
export function viewFilterReferences(state, fields, filterLabels = {}) {
|
|
78
83
|
const filters = (state && state.filters && typeof state.filters === 'object') ? state.filters : {}
|
|
79
84
|
const out = []
|
|
80
85
|
for (const [key, raw] of Object.entries(filters)) {
|
|
81
86
|
const field = (Array.isArray(fields) ? fields : []).find((f) => f && f.key === key)
|
|
82
|
-
const
|
|
87
|
+
const named = filterLabels && filterLabels[key] && filterLabels[key].reference && typeof filterLabels[key].reference === 'object' ? filterLabels[key].reference : null
|
|
88
|
+
const ref = (field && field.reference) || named
|
|
83
89
|
if (!ref || ref.schema === undefined || ref.schema === null) {
|
|
84
90
|
continue
|
|
85
91
|
}
|
|
@@ -87,7 +93,8 @@ export function viewFilterReferences(state, fields) {
|
|
|
87
93
|
.filter((id) => (typeof id === 'string' || typeof id === 'number') && id !== '' && id !== MISSING_VALUE)
|
|
88
94
|
.map(String)
|
|
89
95
|
if (ids.length > 0) {
|
|
90
|
-
|
|
96
|
+
const matchField = ref === named && typeof ref.matchField === 'string' && ref.matchField !== '' ? { matchField: ref.matchField } : {}
|
|
97
|
+
out.push({ key, register: ref.register || '', schema: String(ref.schema), labelField: ref.labelField || '', ...matchField, ids })
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
100
|
return out
|