@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.
Files changed (71) hide show
  1. package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue2.js.map +1 -1
  2. package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue3.js.map +1 -1
  3. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +1 -1
  4. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -1
  5. package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -1
  6. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +12 -2
  7. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  8. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +42 -30
  9. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  10. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +22 -0
  11. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  12. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -1
  13. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  14. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js +1 -1
  15. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js.map +1 -1
  17. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  18. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +46 -8
  19. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  20. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +3 -3
  21. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  22. package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
  23. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
  24. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js +1 -0
  25. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
  26. package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue.js +1 -1
  27. package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js +21 -2
  28. package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js.map +1 -1
  29. package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue3.js.map +1 -1
  30. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  31. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  33. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  34. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  36. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  37. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  39. package/dist/esm/library-style.js +1 -1
  40. package/dist/esm/nextcloud-vue.css +601 -280
  41. package/dist/esm/utils/detailObjectContext.js +7 -2
  42. package/dist/esm/utils/detailObjectContext.js.map +1 -1
  43. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  44. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  45. package/dist/esm/utils/visibleWhen.js +6 -0
  46. package/dist/esm/utils/visibleWhen.js.map +1 -1
  47. package/dist/nextcloud-vue.cjs.js +175 -63
  48. package/dist/nextcloud-vue.cjs.js.map +2 -2
  49. package/dist/nextcloud-vue.css +601 -280
  50. package/package.json +1 -1
  51. package/src/components/CnAiCompanion/CnAiChatPanel.vue +3 -0
  52. package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +4 -2
  53. package/src/components/CnDataTable/CnDataTable.vue +19 -2
  54. package/src/components/CnDetailPage/CnDetailPage.md +1 -0
  55. package/src/components/CnDetailPage/CnDetailPage.vue +23 -0
  56. package/src/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue +1 -0
  57. package/src/components/CnFactsWidget/CnFactsWidget.vue +74 -9
  58. package/src/components/CnNotesCard/CnNotesCard.vue +7 -2
  59. package/src/components/CnNotificationMatrix/CnNotificationMatrix.vue +21 -2
  60. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +1 -0
  61. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +2 -0
  62. package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -1
  63. package/src/css/dialog.css +7 -0
  64. package/src/css/look-board-detail.css +152 -8
  65. package/src/css/look-board-index.css +78 -0
  66. package/src/css/look-board.css +33 -3
  67. package/src/css/table.css +9 -0
  68. package/src/schemas/app-manifest-v2.schema.json +2 -2
  69. package/src/utils/detailObjectContext.js +7 -2
  70. package/src/utils/validateManifestV2.compiled.js +2 -2
  71. 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"). A side card keeps its 10px.
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: calc(14px - var(--cn-board-first-line-leading));
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: calc(14px - var(--cn-board-first-line-leading));
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 0;
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: 1.35;
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
- .cn-look-board .cn-notes-card__note:not(.cn-look-nextcloud *) {
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-start: 44px;
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
+ }
@@ -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
- .cn-look-board .settings-section table:not(.cn-data-table):not(.cn-look-nextcloud *) td {
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.2;
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.155.0",
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
  }