@conduction/nextcloud-vue 2.145.0 → 2.146.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/CnAiCompanion/CnAiChatPanel.vue2.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue3.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +12 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +42 -30
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +22 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +46 -8
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +3 -3
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js +1 -0
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue.js +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js +21 -2
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js.map +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.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/CnTabsWidget/CnTabsWidget.vue.js +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +601 -280
- package/dist/esm/utils/detailObjectContext.js +7 -2
- package/dist/esm/utils/detailObjectContext.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/visibleWhen.js +6 -0
- package/dist/esm/utils/visibleWhen.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +175 -63
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +601 -280
- package/package.json +1 -1
- package/src/components/CnAiCompanion/CnAiChatPanel.vue +3 -0
- package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +4 -2
- package/src/components/CnDataTable/CnDataTable.vue +19 -2
- package/src/components/CnDetailPage/CnDetailPage.md +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +23 -0
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue +1 -0
- package/src/components/CnFactsWidget/CnFactsWidget.vue +74 -9
- package/src/components/CnNotesCard/CnNotesCard.vue +7 -2
- package/src/components/CnNotificationMatrix/CnNotificationMatrix.vue +21 -2
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +1 -0
- package/src/components/CnRetentionWidget/CnRetentionWidget.vue +2 -0
- package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -1
- package/src/css/dialog.css +7 -0
- package/src/css/look-board-detail.css +152 -8
- package/src/css/look-board-index.css +78 -0
- package/src/css/look-board.css +33 -3
- package/src/css/table.css +9 -0
- package/src/schemas/app-manifest-v2.schema.json +2 -2
- package/src/utils/detailObjectContext.js +7 -2
- package/src/utils/validateManifestV2.compiled.js +2 -2
- package/src/utils/visibleWhen.js +6 -0
|
@@ -481,6 +481,26 @@
|
|
|
481
481
|
padding: var(--cn-board-card-padding);
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
+
/* A panel's own heading (DqZaaktypeRegels "Regels op de zaak"): title and
|
|
485
|
+
subtitle on their natural leading 2px apart, actions that wrap 8px under
|
|
486
|
+
them, and the card's 12px gap before the content. */
|
|
487
|
+
.cn-look-board .cn-tabs-widget__tabs .cn-tabs-widget__panel-heading {
|
|
488
|
+
margin-bottom: 12px;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.cn-look-board .cn-tabs-widget__tabs .cn-tabs-widget__panel-heading--actions {
|
|
492
|
+
row-gap: 8px;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.cn-look-board .cn-tabs-widget__tabs .cn-tabs-widget__panel-heading-text {
|
|
496
|
+
gap: 2px;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.cn-look-board .cn-tabs-widget__tabs .cn-tabs-widget__panel-title,
|
|
500
|
+
.cn-look-board .cn-tabs-widget__tabs .cn-tabs-widget__panel-subtitle {
|
|
501
|
+
line-height: normal;
|
|
502
|
+
}
|
|
503
|
+
|
|
484
504
|
/* A list's footer Add bleeds to the panel's edges, so it bleeds the card
|
|
485
505
|
padding (CnTabsWidget bleeds the Nextcloud look's 12px). */
|
|
486
506
|
.cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
|
|
@@ -740,17 +760,19 @@
|
|
|
740
760
|
}
|
|
741
761
|
|
|
742
762
|
/* A data card (labels over values) starts 14px below its title (DqZaak
|
|
743
|
-
"Zaakgegevens", DqContact "Contact")
|
|
763
|
+
"Zaakgegevens", DqContact "Contact"); its first label sits at the top of
|
|
764
|
+
its line box, so no leading comes off. A side card keeps its 10px.
|
|
744
765
|
@spec openspec/changes/board-data-card-gap/specs/board-data-card-gap/spec.md#requirement-a-board-data-cards-body-starts-14px-below-its-title */
|
|
745
766
|
.cn-look-board .cn-detail-page .cn-widget-wrapper__content:has(> .cn-object-data-widget__grid-wrap):not(.cn-detail-page__side *) {
|
|
746
|
-
padding-top:
|
|
767
|
+
padding-top: 14px;
|
|
747
768
|
}
|
|
748
769
|
|
|
749
770
|
/* Facts that open on the column grid are a data card too (DqContact
|
|
750
|
-
"Contact", DqOrganisatie "Organisatie").
|
|
771
|
+
"Contact", DqOrganisatie "Organisatie"). Their labels sit on the normal
|
|
772
|
+
line height in the board look, so no leading is taken off the 14px.
|
|
751
773
|
@spec openspec/changes/board-card-title-gap-variants/specs/board-card-title-gap-variants/spec.md#requirement-a-board-card-starts-its-body-as-drawn-for-its-kind-of-body */
|
|
752
774
|
.cn-look-board .cn-detail-page .cn-widget-wrapper__content:has(> .cn-facts-widget > .cn-facts-widget__rows--columns:first-child):not(.cn-detail-page__side *) {
|
|
753
|
-
padding-top:
|
|
775
|
+
padding-top: 14px;
|
|
754
776
|
}
|
|
755
777
|
|
|
756
778
|
/* A table (an object list) starts 12px below the title's box: its head has
|
|
@@ -819,6 +841,47 @@
|
|
|
819
841
|
font-weight: 500;
|
|
820
842
|
}
|
|
821
843
|
|
|
844
|
+
/* A labelled select in a page card is the board's field, as in a board
|
|
845
|
+
dialog (dialog.css): its label above the control at 14px/600 on the normal
|
|
846
|
+
line (the theme's label weight token set to 600 here), the control 40px,
|
|
847
|
+
21px of room above it so the raised label does not rise over what stands
|
|
848
|
+
above (DqZaakEmail "E-mailsjabloon": NcSelect drew
|
|
849
|
+
the label inside a 44px field, 15px/700). The quick filter bar's dropdown
|
|
850
|
+
keeps NcSelect's own look.
|
|
851
|
+
@spec openspec/changes/board-page-select-label-above/specs/board-page-select-label-above/spec.md#requirement-a-labelled-select-in-a-board-page-card-carries-its-label-above */
|
|
852
|
+
.cn-look-board .cn-detail-widget-host .v-select:not(.cn-quick-filter-bar__select):has(.input-field__label):not(.cn-look-nextcloud *) {
|
|
853
|
+
--nldesign-component-form-field-label-font-weight: 600;
|
|
854
|
+
margin-block: 21px 0;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
.cn-look-board .cn-detail-widget-host .v-select:not(.cn-quick-filter-bar__select) .input-field__input + .input-field__label.input-field__label:not(.cn-look-nextcloud *),
|
|
858
|
+
.cn-look-board .cn-detail-widget-host .nc-select.v-select.select:not(.cn-quick-filter-bar__select) .vs__selected-options:has(.vs__selected) .vs__search .input-field__input + .input-field__label.input-field__label:not(.cn-look-nextcloud *) {
|
|
859
|
+
inset-block-start: auto;
|
|
860
|
+
inset-block-end: calc(100% + 4px);
|
|
861
|
+
inset-inline: 0 auto;
|
|
862
|
+
max-width: 100%;
|
|
863
|
+
margin: 0;
|
|
864
|
+
padding: 0;
|
|
865
|
+
background: none;
|
|
866
|
+
color: var(--color-main-text);
|
|
867
|
+
font-size: var(--cn-field-label-size, 14px);
|
|
868
|
+
font-weight: 600;
|
|
869
|
+
line-height: normal;
|
|
870
|
+
pointer-events: auto;
|
|
871
|
+
transition: none;
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
.cn-look-board .cn-detail-widget-host .v-select:not(.cn-quick-filter-bar__select):has(.input-field__label) .input-field__main-wrapper:not(.cn-look-nextcloud *) {
|
|
875
|
+
height: calc(var(--cn-field-height, 40px) + 2 * var(--border-width-input-focused, 2px));
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/* The mail card's template buttons stand beside the field at its 40px
|
|
879
|
+
height, their bottom on the field's edge (inside its 2px focus inset). */
|
|
880
|
+
.cn-look-board .cn-mail-tab__template-row .button-vue:where(:not(.cn-look-nextcloud *)) {
|
|
881
|
+
--button-size: var(--cn-board-control-height);
|
|
882
|
+
margin-block-end: var(--border-width-input-focused, 2px);
|
|
883
|
+
}
|
|
884
|
+
|
|
822
885
|
/* A data card's label and value sit 3px apart on the normal line height, as
|
|
823
886
|
the boards draw their facts (194 of 212 dt/dd pairs: gap 3px, no line
|
|
824
887
|
height); live ran them at 1.5 with a 2px gap (DqZaakContact
|
|
@@ -946,6 +1009,12 @@
|
|
|
946
1009
|
padding: 0;
|
|
947
1010
|
}
|
|
948
1011
|
|
|
1012
|
+
/* Its Actions menu is the board's 34px header control. */
|
|
1013
|
+
.cn-look-board .cn-detail-page__side .cn-widget-wrapper:has(.cn-ai-chat-widget) .cn-widget-wrapper__actions .action-item .button-vue {
|
|
1014
|
+
height: 34px;
|
|
1015
|
+
min-height: 34px;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
949
1018
|
/* A widget-reported card header action in the main column is a neutral 40px
|
|
950
1019
|
control: the main background, the control border, the main text at
|
|
951
1020
|
14px/600, a 16px icon 8px before the label (DqZaakBesluiten "Document
|
|
@@ -1032,6 +1101,24 @@
|
|
|
1032
1101
|
width: 18px;
|
|
1033
1102
|
}
|
|
1034
1103
|
|
|
1104
|
+
/* NcNoteCard renders a slotted icon (the banner's own, DqSociaalDomein
|
|
1105
|
+
"Bijzondere persoonsgegevens") as a bare 22px material icon without the
|
|
1106
|
+
`notecard__icon` wrapper; it takes the same 18px box on the first line, so
|
|
1107
|
+
the text starts 44px in.
|
|
1108
|
+
@spec openspec/changes/board-notice-slotted-icon/specs/board-notice-slotted-icon/spec.md#requirement-a-side-notices-slotted-icon-is-18px */
|
|
1109
|
+
.cn-look-board .cn-detail-page__side-item--notice .cn-banner-widget__card > .material-design-icon:not(.cn-look-nextcloud *) {
|
|
1110
|
+
align-self: flex-start;
|
|
1111
|
+
color: var(--cn-board-notice-ink);
|
|
1112
|
+
margin-top: 2px;
|
|
1113
|
+
width: 18px;
|
|
1114
|
+
height: 18px;
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
.cn-look-board .cn-detail-page__side-item--notice .cn-banner-widget__card > .material-design-icon svg:not(.cn-look-nextcloud *) {
|
|
1118
|
+
height: 18px;
|
|
1119
|
+
width: 18px;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1035
1122
|
/* A notice whose condition does not hold renders no banner; its slot then
|
|
1036
1123
|
takes no room instead of standing as an empty tinted block. */
|
|
1037
1124
|
.cn-look-board .cn-detail-page__side-item--notice:not(:has(.cn-banner-widget)) {
|
|
@@ -1497,6 +1584,12 @@
|
|
|
1497
1584
|
|
|
1498
1585
|
/* The buttons above the groups are the card's 34px controls ("Bekijken als
|
|
1499
1586
|
flow", "Taak toevoegen"), not the page's 40px ones. */
|
|
1587
|
+
/* The buttons sit 14px under the subtitle and 14px above the groups, the
|
|
1588
|
+
card's gap (the content's own 12px top padding plus 2px). */
|
|
1589
|
+
.cn-look-board .cn-grouped-cards__actions.cn-grouped-cards__actions:not(.cn-look-nextcloud *) {
|
|
1590
|
+
margin-block: 2px 14px;
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1500
1593
|
.cn-look-board .cn-grouped-cards__actions:not(.cn-look-nextcloud *) .button-vue {
|
|
1501
1594
|
min-height: 34px;
|
|
1502
1595
|
height: 34px;
|
|
@@ -1938,6 +2031,11 @@
|
|
|
1938
2031
|
line-height: 1.2;
|
|
1939
2032
|
}
|
|
1940
2033
|
|
|
2034
|
+
.cn-look-board .cn-object-parties .cn-object-parties__accepted .cn-object-parties__muted {
|
|
2035
|
+
font-size: 13px;
|
|
2036
|
+
line-height: 1.2;
|
|
2037
|
+
}
|
|
2038
|
+
|
|
1941
2039
|
.cn-look-board .cn-object-parties .cn-object-parties__accepted-kind {
|
|
1942
2040
|
padding: 2px 8px;
|
|
1943
2041
|
border: 1px solid var(--color-border-maxcontrast);
|
|
@@ -1986,11 +2084,16 @@
|
|
|
1986
2084
|
.cn-look-board .cn-events-card__event:not(.cn-look-nextcloud *):last-child,
|
|
1987
2085
|
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *),
|
|
1988
2086
|
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *):last-child {
|
|
1989
|
-
padding: 12px
|
|
2087
|
+
padding-block: 12px;
|
|
1990
2088
|
border-top: 1px solid var(--cn-board-hairline);
|
|
1991
2089
|
border-bottom: none;
|
|
1992
2090
|
}
|
|
1993
2091
|
|
|
2092
|
+
.cn-look-board .cn-events-card__event:not(.cn-look-nextcloud *),
|
|
2093
|
+
.cn-look-board .cn-events-card__event:not(.cn-look-nextcloud *):last-child {
|
|
2094
|
+
padding-inline: 0;
|
|
2095
|
+
}
|
|
2096
|
+
|
|
1994
2097
|
.cn-look-board .cn-events-card__day:not(.cn-look-nextcloud *),
|
|
1995
2098
|
.cn-look-board .cn-notes-card__initials:not(.cn-look-nextcloud *) {
|
|
1996
2099
|
display: inline-flex;
|
|
@@ -2015,7 +2118,7 @@
|
|
|
2015
2118
|
.cn-look-board .cn-notes-card__body:not(.cn-look-nextcloud *) {
|
|
2016
2119
|
font-size: 15px;
|
|
2017
2120
|
font-weight: 600;
|
|
2018
|
-
line-height:
|
|
2121
|
+
line-height: normal;
|
|
2019
2122
|
}
|
|
2020
2123
|
|
|
2021
2124
|
.cn-look-board .cn-events-card__summary:not(.cn-look-nextcloud *) {
|
|
@@ -2037,11 +2140,29 @@
|
|
|
2037
2140
|
white-space: pre;
|
|
2038
2141
|
}
|
|
2039
2142
|
|
|
2040
|
-
|
|
2143
|
+
/* Each note sits alone in its thread, so it is also a :last-child; the
|
|
2144
|
+
padding above is set per side so the 44px room for the tile holds. */
|
|
2145
|
+
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *),
|
|
2146
|
+
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *):last-child {
|
|
2041
2147
|
display: flex;
|
|
2042
2148
|
flex-direction: column;
|
|
2043
2149
|
gap: 2px;
|
|
2044
|
-
padding-inline
|
|
2150
|
+
padding-inline: 44px 0;
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
/* Reply stays on the row as Delete does: at its end, shown on hover and on
|
|
2154
|
+
keyboard focus, so the row keeps the board's two lines.
|
|
2155
|
+
@spec openspec/changes/board-note-rows-tile-room/specs/task-cards/spec.md#requirement-a-board-note-row-keeps-its-tile-room-and-two-lines */
|
|
2156
|
+
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *) > .cn-notes-card__reply-btn {
|
|
2157
|
+
position: absolute;
|
|
2158
|
+
top: 8px;
|
|
2159
|
+
inset-inline-end: 32px;
|
|
2160
|
+
opacity: 0;
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *):hover > .cn-notes-card__reply-btn,
|
|
2164
|
+
.cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *):focus-within > .cn-notes-card__reply-btn {
|
|
2165
|
+
opacity: 1;
|
|
2045
2166
|
}
|
|
2046
2167
|
|
|
2047
2168
|
.cn-look-board .cn-notes-card__initials:not(.cn-look-nextcloud *) {
|
|
@@ -2057,6 +2178,7 @@
|
|
|
2057
2178
|
.cn-look-board .cn-notes-card__note-header:not(.cn-look-nextcloud *) {
|
|
2058
2179
|
justify-content: flex-start;
|
|
2059
2180
|
margin-bottom: 0;
|
|
2181
|
+
line-height: normal;
|
|
2060
2182
|
}
|
|
2061
2183
|
|
|
2062
2184
|
.cn-look-board .cn-notes-card__time:not(.cn-look-nextcloud *) {
|
|
@@ -2217,6 +2339,13 @@
|
|
|
2217
2339
|
padding: 12px 0;
|
|
2218
2340
|
}
|
|
2219
2341
|
|
|
2342
|
+
/* Under a title with a subtitle the rule sits 8px below the subtitle
|
|
2343
|
+
(DqZaakBesluiten "Adviezen", DqZaakArchivering "Bewaring"). A custom
|
|
2344
|
+
widget that opens on a ruled list opts in with `cn-rule-above` on its root. */
|
|
2345
|
+
.cn-look-board .cn-detail-page .cn-widget-wrapper:not(.cn-detail-page__side *):has(> .cn-widget-wrapper__header .cn-widget-wrapper__subtitle) > .cn-widget-wrapper__content:has(> .cn-record-list--rows.cn-record-list--rule-above, > .cn-rule-above) {
|
|
2346
|
+
padding-top: 8px;
|
|
2347
|
+
}
|
|
2348
|
+
|
|
2220
2349
|
/* A side list row with initials stays one line: a 28px circle 8px before
|
|
2221
2350
|
the regular-weight text (DqSociaalDomein "Wie"). The library stacks side
|
|
2222
2351
|
rows into a column, which put the initials above the name.
|
|
@@ -2230,8 +2359,23 @@
|
|
|
2230
2359
|
.cn-look-board .cn-detail-page__side .cn-record-list__row:not(.cn-look-nextcloud *) > .cn-record-list__avatar {
|
|
2231
2360
|
width: 28px;
|
|
2232
2361
|
height: 28px;
|
|
2362
|
+
background: var(--color-primary-element-light);
|
|
2363
|
+
color: var(--color-primary-element-light-text);
|
|
2233
2364
|
}
|
|
2234
2365
|
|
|
2235
2366
|
.cn-look-board .cn-detail-page__side .cn-record-list__row:has(> .cn-record-list__avatar):not(.cn-look-nextcloud *) .cn-record-list__title {
|
|
2236
2367
|
font-weight: 400;
|
|
2237
2368
|
}
|
|
2369
|
+
|
|
2370
|
+
/* The history card's kind chips sit on the header's 16px gap, 8px apart, as
|
|
2371
|
+
DqZaakHistorie draws them: the server's 3px button margin pushed the row
|
|
2372
|
+
3px down and made it 42px tall. The composer's field labels run on a 1.2
|
|
2373
|
+
line, so "Sjabloon" starts 12px under the subtitle as drawn.
|
|
2374
|
+
@spec openspec/changes/board-history-chips-and-labels/specs/timeline/spec.md */
|
|
2375
|
+
.cn-look-board .cn-timeline-manage__chips .cn-timeline-manage__chip:not(.cn-look-nextcloud *) {
|
|
2376
|
+
margin: 0;
|
|
2377
|
+
}
|
|
2378
|
+
|
|
2379
|
+
.cn-look-board .cn-timeline-manage__draft-label:not(.cn-look-nextcloud *) {
|
|
2380
|
+
line-height: 1.2;
|
|
2381
|
+
}
|
|
@@ -907,6 +907,16 @@
|
|
|
907
907
|
max-width: calc(100% - 26px);
|
|
908
908
|
}
|
|
909
909
|
|
|
910
|
+
/* A plain (unsortable) label wraps by word beside its funnel, as a sort
|
|
911
|
+
button does, instead of the funnel dropping onto a line of its own
|
|
912
|
+
("Lopende / zaken", DqOrganisaties: head 64 -> 59, board 58.5).
|
|
913
|
+
@spec openspec/changes/board-head-label-beside-funnel/specs/data-table/spec.md#requirement-a-board-heads-plain-label-wraps-beside-its-filter */
|
|
914
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th > span:first-child:has(~ .cn-table-header__filter) {
|
|
915
|
+
display: inline-block;
|
|
916
|
+
max-width: calc(100% - 26px);
|
|
917
|
+
vertical-align: middle;
|
|
918
|
+
}
|
|
919
|
+
|
|
910
920
|
/* The board's funnel: a 22px button 4px after the sort chevron. */
|
|
911
921
|
.cn-look-board .cn-table-container--board .cn-data-table th .cn-table-header__filter {
|
|
912
922
|
width: 22px;
|
|
@@ -989,6 +999,16 @@
|
|
|
989
999
|
width: 100%;
|
|
990
1000
|
}
|
|
991
1001
|
|
|
1002
|
+
/* A wrapping title column (`cn-cell--wrap`, DqZoekresultaten) runs its
|
|
1003
|
+
secondary line at a normal line height over its lines, 2px under the
|
|
1004
|
+
title, as the board draws it; a single-line secondary keeps the table's
|
|
1005
|
+
1.35.
|
|
1006
|
+
@spec openspec/changes/board-wrapped-secondary-line-height/specs/board-wrapped-secondary-line-height/spec.md */
|
|
1007
|
+
.cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title.cn-cell--wrap .cn-table-cell__secondary {
|
|
1008
|
+
margin-top: 2px;
|
|
1009
|
+
line-height: normal;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
992
1012
|
/* `rowTitle: "plain"` (PqTickets, OcPublicaties): the title is bold text in
|
|
993
1013
|
the main text colour without an underline, the secondary line 13px muted,
|
|
994
1014
|
2px under it. The row stays clickable through its stretched row link. */
|
|
@@ -1097,6 +1117,22 @@
|
|
|
1097
1117
|
line-height: 16px;
|
|
1098
1118
|
}
|
|
1099
1119
|
|
|
1120
|
+
/* The grey person chip with a second line (DqContacten): 14px above and
|
|
1121
|
+
under, the name 2px above a 14px address on its normal line, a 66px row.
|
|
1122
|
+
@spec openspec/changes/board-person-chip-row-height/specs/data-table/spec.md#requirement-a-board-person-chip-row-is-66px */
|
|
1123
|
+
.cn-look-board .cn-table-container--board .cn-data-table td:has(.cn-cell-renderer__avatar-initials--neutral + .cn-cell-renderer__avatar-text .cn-cell-renderer__avatar-secondary) {
|
|
1124
|
+
padding-block: 14px;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
.cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials--neutral + .cn-cell-renderer__avatar-text:has(.cn-cell-renderer__avatar-secondary) {
|
|
1128
|
+
gap: 2px;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
.cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials--neutral + .cn-cell-renderer__avatar-text .cn-cell-renderer__avatar-secondary {
|
|
1132
|
+
font-size: 14px;
|
|
1133
|
+
line-height: normal;
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1100
1136
|
/* A status pill: 3px 10px, radius 12, 13px weight 600, 21px tall on a
|
|
1101
1137
|
normal line (a 1.4 line made it 24.2). The colours stay the status colour
|
|
1102
1138
|
map's.
|
|
@@ -2326,3 +2362,45 @@
|
|
|
2326
2362
|
.cn-look-board .cn-data-table th.cn-table-col--icon + th {
|
|
2327
2363
|
padding-inline-start: 12px;
|
|
2328
2364
|
}
|
|
2365
|
+
|
|
2366
|
+
/* ---- The table beside the open side panel (DqZakenSorteren, DqFilterBeheren) */
|
|
2367
|
+
/* The table takes its column's width: its configured column widths make way
|
|
2368
|
+
for the content, titles and names wrap (a long word hyphenated, an
|
|
2369
|
+
unbreakable token such as an id anywhere), a pill
|
|
2370
|
+
wraps before the row scrolls, and each header keeps its label and icons on
|
|
2371
|
+
one line. No sideways scroll.
|
|
2372
|
+
@spec openspec/changes/board-table-fits-beside-side-panel/specs/board-table-fits-beside-side-panel/spec.md#requirement-the-table-fits-its-column-beside-the-open-side-panel */
|
|
2373
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table {
|
|
2374
|
+
table-layout: auto;
|
|
2375
|
+
width: 100% !important;
|
|
2376
|
+
min-width: 0 !important;
|
|
2377
|
+
}
|
|
2378
|
+
|
|
2379
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table th:not(.cn-table-col--checkbox):not(.cn-table-col--actions) {
|
|
2380
|
+
width: auto !important;
|
|
2381
|
+
min-width: 0 !important;
|
|
2382
|
+
max-width: none !important;
|
|
2383
|
+
white-space: nowrap;
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2386
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table td:not(.cn-table-col--checkbox):not(.cn-table-col--actions) {
|
|
2387
|
+
width: auto !important;
|
|
2388
|
+
min-width: 0 !important;
|
|
2389
|
+
max-width: none !important;
|
|
2390
|
+
white-space: normal;
|
|
2391
|
+
hyphens: auto;
|
|
2392
|
+
overflow-wrap: anywhere;
|
|
2393
|
+
}
|
|
2394
|
+
|
|
2395
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table td :is(.cn-cell-renderer, .cn-cell-renderer__avatar-text, .cn-cell-renderer__avatar-name, .cn-table-row__link) {
|
|
2396
|
+
min-width: 0;
|
|
2397
|
+
white-space: normal;
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table td .cn-status-badge {
|
|
2401
|
+
white-space: normal;
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2404
|
+
.cn-look-board .cn-index-page--sidebar-open .cn-table-container--board .cn-data-table th .cn-table-header__sort {
|
|
2405
|
+
min-width: max-content;
|
|
2406
|
+
}
|
package/src/css/look-board.css
CHANGED
|
@@ -671,6 +671,13 @@
|
|
|
671
671
|
gap: 8px;
|
|
672
672
|
}
|
|
673
673
|
|
|
674
|
+
/* A card's own header items (a count note, a status pill) stand before the
|
|
675
|
+
manifest's title-row buttons, as the boards draw them (DqZaakTaken "Wat
|
|
676
|
+
hierna komt": "2 gepland", then "+ Toevoegen"). */
|
|
677
|
+
.cn-look-board .cn-widget-wrapper__actions > .cn-detail-widget-header-items:not(.cn-look-nextcloud *) {
|
|
678
|
+
order: -1;
|
|
679
|
+
}
|
|
680
|
+
|
|
674
681
|
.cn-look-board .cn-detail-card__header-right:not(.cn-look-nextcloud *) {
|
|
675
682
|
gap: 8px;
|
|
676
683
|
}
|
|
@@ -1485,7 +1492,7 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1485
1492
|
line-height: 1.2;
|
|
1486
1493
|
}
|
|
1487
1494
|
|
|
1488
|
-
.cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) th {
|
|
1495
|
+
.cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) thead th {
|
|
1489
1496
|
--nldesign-component-table-header-background-color: var(--cn-board-table-head-bg, color-mix(in srgb, var(--color-background-hover) 40%, var(--color-main-background)));
|
|
1490
1497
|
--nldesign-component-table-header-color: var(--color-text-maxcontrast);
|
|
1491
1498
|
--nldesign-component-table-header-font-weight: 600;
|
|
@@ -1513,15 +1520,28 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
|
|
|
1513
1520
|
text-align: start;
|
|
1514
1521
|
}
|
|
1515
1522
|
|
|
1516
|
-
|
|
1523
|
+
/* Body rows are 42px as on the boards (10px, a 21px line, 10px, the rule).
|
|
1524
|
+
A row header (dossiq's prerequisites) reads as a strong cell, not as a
|
|
1525
|
+
head: the theme paints every th, so its tokens are handed the cell's. */
|
|
1526
|
+
.cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) td,
|
|
1527
|
+
.cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) tbody th {
|
|
1517
1528
|
padding: 10px 12px;
|
|
1518
1529
|
border-bottom: 1px solid var(--color-background-dark);
|
|
1519
1530
|
color: var(--color-main-text);
|
|
1520
1531
|
font-size: 14px;
|
|
1521
|
-
line-height: 1.
|
|
1532
|
+
line-height: 1.5;
|
|
1522
1533
|
vertical-align: middle;
|
|
1523
1534
|
}
|
|
1524
1535
|
|
|
1536
|
+
.cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) tbody th {
|
|
1537
|
+
--nldesign-component-table-header-background-color: transparent;
|
|
1538
|
+
--nldesign-component-table-header-color: var(--color-main-text);
|
|
1539
|
+
--nldesign-component-table-header-font-weight: 600;
|
|
1540
|
+
background: transparent;
|
|
1541
|
+
font-weight: 600;
|
|
1542
|
+
text-align: start;
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1525
1545
|
/* A strong cell's name in a settings card reads 15px bold over its muted
|
|
1526
1546
|
second line, as the boards draw a connection's name (DqInstellingen
|
|
1527
1547
|
"Koppelingen": <strong> 15px), not the index tables' 14px 500.
|
|
@@ -3440,3 +3460,13 @@ html :where(.cn-look-board) :is(h2, h3, h5, h6):where(.cn-inner-heading) {
|
|
|
3440
3460
|
.cn-look-board .cn-timeline-manage__draft-label:first-child:not(.cn-look-nextcloud *) {
|
|
3441
3461
|
margin-block-start: 0;
|
|
3442
3462
|
}
|
|
3463
|
+
|
|
3464
|
+
/* ---- The share dialog's audience rows ----------------------------------- */
|
|
3465
|
+
/* A person or group the view is shared with sits on the page's own ground at
|
|
3466
|
+
radius 8, as DqFilterDelen draws it; Nextcloud's look keeps its hover grey
|
|
3467
|
+
and large radius.
|
|
3468
|
+
@spec openspec/changes/board-share-rows-ground/specs/board-share-rows-ground/spec.md */
|
|
3469
|
+
.cn-look-board .cn-saved-view-share__mode:not(.cn-look-nextcloud *) {
|
|
3470
|
+
border-radius: 8px;
|
|
3471
|
+
background: var(--cn-board-sunken-ground);
|
|
3472
|
+
}
|
package/src/css/table.css
CHANGED
|
@@ -616,6 +616,15 @@
|
|
|
616
616
|
cursor: grab;
|
|
617
617
|
}
|
|
618
618
|
|
|
619
|
+
/* The handle before a reorderable row's name: a muted 16px grip 10px before it. */
|
|
620
|
+
.cn-table-row__handle {
|
|
621
|
+
display: inline-flex;
|
|
622
|
+
vertical-align: middle;
|
|
623
|
+
margin-inline-end: 10px;
|
|
624
|
+
color: var(--color-text-maxcontrast);
|
|
625
|
+
cursor: grab;
|
|
626
|
+
}
|
|
627
|
+
|
|
619
628
|
.cn-table-row--drop-target {
|
|
620
629
|
box-shadow: inset 0 2px 0 var(--color-primary-element);
|
|
621
630
|
}
|
|
@@ -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.156.0",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"required": ["$schema", "version"],
|
|
9
9
|
"allOf": [
|
|
@@ -5533,7 +5533,7 @@
|
|
|
5533
5533
|
"gridFloat": {
|
|
5534
5534
|
"type": "boolean",
|
|
5535
5535
|
"default": true,
|
|
5536
|
-
"description": "type='dashboard': `false` packs widgets upward (GridStack `float: false`), so a size-to-content widget that shrinks closes the gap under it instead of leaving an empty band (zuiddrecht-pixel-gaps-3). Maps to CnDashboardPage `gridFloat`."
|
|
5536
|
+
"description": "type='dashboard' and type='detail': `false` packs widgets upward (GridStack `float: false`), so a size-to-content widget that shrinks closes the gap under it instead of leaving an empty band (zuiddrecht-pixel-gaps-3). Maps to CnDashboardPage and CnDetailPage `gridFloat`."
|
|
5537
5537
|
},
|
|
5538
5538
|
"showTitle": {
|
|
5539
5539
|
"type": "boolean",
|
|
@@ -47,8 +47,10 @@ function unwrap(v) {
|
|
|
47
47
|
*
|
|
48
48
|
* @param {object|null} objectCtx The `cnObjectContext` inject (ref or plain object).
|
|
49
49
|
* @param {object|null} detailCtx The `cnDetailObjectContext` inject (`{ value }` holder).
|
|
50
|
-
* @return {{objectId: (string|number|null), object: (object|null), register: string, schema: (string|object)}|null}
|
|
51
|
-
* The merged context, or null when neither inject resolves.
|
|
50
|
+
* @return {{objectId: (string|number|null), object: (object|null), register: string, schema: (string|object), context?: object}|null}
|
|
51
|
+
* The merged context, or null when neither inject resolves. `context` is the
|
|
52
|
+
* records the page's conditions name (`@context.<name>`), when the primary
|
|
53
|
+
* inject carries them.
|
|
52
54
|
*/
|
|
53
55
|
export function resolveObjectTokenContext(objectCtx, detailCtx) {
|
|
54
56
|
const primary = unwrap(objectCtx)
|
|
@@ -81,6 +83,9 @@ export function resolveObjectTokenContext(objectCtx, detailCtx) {
|
|
|
81
83
|
if (primary.schema) {
|
|
82
84
|
out.schema = primary.schema
|
|
83
85
|
}
|
|
86
|
+
if (primary.context && typeof primary.context === 'object') {
|
|
87
|
+
out.context = primary.context
|
|
88
|
+
}
|
|
84
89
|
}
|
|
85
90
|
return out
|
|
86
91
|
}
|