@conduction/nextcloud-vue 2.98.0 → 2.100.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/CnActionsMenu/CnActionsMenu.vue2.js +12 -0
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +11 -2
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +6 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +2 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +1 -1
- package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +25 -8
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +7 -4
- 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 +11 -8
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +13 -4
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +54 -3
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +16 -2
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue.js +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js +42 -7
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js +121 -57
- package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js +10 -0
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js +2 -1
- package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +136 -7
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +1 -1
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +26 -7
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -1
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +78 -17
- package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +68 -7
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +256 -240
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js +9 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js +265 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js +191 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js +9 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js +537 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js +99 -0
- package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +18 -70
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js +6 -44
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue.js +1 -1
- package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +16 -2
- package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
- package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +40 -25
- package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue.js +1 -1
- package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js +7 -7
- package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js +9 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js +472 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js +231 -0
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnWorkingCalendarWidget/index.js +27 -0
- package/dist/esm/components/CnWorkingCalendarWidget/index.js.map +1 -0
- package/dist/esm/composables/useFlowStore.js +2 -1
- package/dist/esm/composables/useFlowStore.js.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +101 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +115 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +999 -233
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/workingCalendarMonth.js +85 -0
- package/dist/esm/utils/workingCalendarMonth.js.map +1 -0
- package/dist/nextcloud-vue.cjs.js +10314 -7778
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +999 -233
- package/l10n/en.json +101 -1
- package/l10n/nl.json +115 -1
- package/package.json +1 -1
- package/src/components/CnActionsMenu/CnActionsMenu.vue +14 -1
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +7 -1
- package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +29 -9
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +13 -4
- package/src/components/CnFactsWidget/CnFactsWidget.vue +65 -3
- package/src/components/CnFlowsPage/CnFlowBoard.vue +77 -2
- package/src/components/CnFlowsPage/CnFlowEditorPage.vue +11 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +136 -7
- package/src/components/CnOrderedListField/CnOrderedListField.vue +81 -9
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +114 -7
- package/src/components/CnSettingsField/CnSettingsField.vue +449 -0
- package/src/components/CnSettingsField/index.js +4 -0
- package/src/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue +642 -0
- package/src/components/CnSettingsFieldsSection/index.js +4 -0
- package/src/components/CnSettingsPage/CnSettingsPage.vue +6 -86
- package/src/components/CnSetupWizard/CnSetupWizard.vue +37 -3
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/src/components/CnWizardDialog/CnWizardDialog.vue +7 -7
- package/src/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue +725 -0
- package/src/components/CnWorkingCalendarWidget/index.js +26 -0
- package/src/components/index.js +3 -0
- package/src/composables/useFlowStore.js +2 -1
- package/src/css/badge.css +32 -16
- package/src/css/detail-page.css +15 -0
- package/src/css/dialog.css +48 -0
- package/src/css/look-board-detail.css +80 -8
- package/src/css/look-board-index.css +52 -8
- package/src/css/look-board.css +301 -1
- package/src/index.js +3 -0
- package/src/schemas/app-manifest-v2.schema.json +25 -1
- package/src/utils/libraryWidgetKeys.js +1 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/workingCalendarMonth.js +82 -0
package/src/css/look-board.css
CHANGED
|
@@ -141,6 +141,50 @@
|
|
|
141
141
|
color: var(--color-primary-element-text);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
+
/* ---- Header action buttons (CnActionButtons) ----------------------------- */
|
|
145
|
+
/* The board draws a page's secondary actions as neutral 40px buttons: the
|
|
146
|
+
main background, a grey border, the main text at 600 (DqZaak "Bericht",
|
|
147
|
+
"Document", "Contact vastleggen", "Bewerken"). Nextcloud's secondary button
|
|
148
|
+
is a primary tint. The label hands its ink to --nldesign-color-on-surface,
|
|
149
|
+
which a theme that forces the body ink onto every span (thematiq) reads. */
|
|
150
|
+
.cn-look-board .cn-action-buttons .button-vue--secondary:not(.cn-look-nextcloud *),
|
|
151
|
+
.cn-look-board .cn-action-buttons .button-vue--vue-secondary:not(.cn-look-nextcloud *) {
|
|
152
|
+
--nldesign-color-on-surface: var(--color-main-text);
|
|
153
|
+
height: var(--cn-board-control-height);
|
|
154
|
+
min-height: var(--cn-board-control-height);
|
|
155
|
+
padding: 0 14px;
|
|
156
|
+
border: 1px solid var(--color-border-dark);
|
|
157
|
+
border-radius: var(--cn-board-control-radius);
|
|
158
|
+
background: var(--color-main-background);
|
|
159
|
+
color: var(--color-main-text);
|
|
160
|
+
font-size: 14px;
|
|
161
|
+
font-weight: 600;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Buttons 10px apart, each icon 16px with 8px to its label (DqZaak's header,
|
|
165
|
+
DqZaken's "Downloaden"); NcButton draws a 20px icon in a 30px slot. */
|
|
166
|
+
.cn-look-board .cn-action-buttons:not(.cn-look-nextcloud *) {
|
|
167
|
+
gap: 10px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) {
|
|
171
|
+
width: 16px;
|
|
172
|
+
min-width: 16px;
|
|
173
|
+
height: 16px;
|
|
174
|
+
min-height: 16px;
|
|
175
|
+
margin-inline-end: 8px;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) svg {
|
|
179
|
+
width: 16px;
|
|
180
|
+
height: 16px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.cn-look-board .cn-action-buttons .button-vue--secondary:not(.cn-look-nextcloud *):hover,
|
|
184
|
+
.cn-look-board .cn-action-buttons .button-vue--vue-secondary:not(.cn-look-nextcloud *):hover {
|
|
185
|
+
background: var(--color-background-hover);
|
|
186
|
+
}
|
|
187
|
+
|
|
144
188
|
/* ---- The buildiq square ------------------------------------------------ */
|
|
145
189
|
.cn-look-board .cn-buildiq-edit .cn-buildiq-edit__actions .button-vue {
|
|
146
190
|
box-sizing: border-box;
|
|
@@ -153,6 +197,34 @@
|
|
|
153
197
|
border-radius: var(--cn-board-control-radius);
|
|
154
198
|
}
|
|
155
199
|
|
|
200
|
+
/* ---- The Actions menu trigger (CnActionsMenu) ---------------------------- */
|
|
201
|
+
/* A menu asked for as `secondary` ("Meer" in a detail header, "Acties" at the
|
|
202
|
+
end of a tab strip) is the board's neutral control: the main background, a
|
|
203
|
+
grey border, the main text at 600 (DqZaak), not Nextcloud's primary tint.
|
|
204
|
+
NcActions marks a secondary menu `action-item--secondary` on its root and
|
|
205
|
+
keeps a class given to it off, so the rule reads that marker. The label
|
|
206
|
+
hands its ink to --nldesign-color-on-surface for a theme that forces the
|
|
207
|
+
body ink onto every span (thematiq). */
|
|
208
|
+
.cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *) {
|
|
209
|
+
--nldesign-color-on-surface: var(--color-main-text);
|
|
210
|
+
border: 1px solid var(--color-border-dark);
|
|
211
|
+
border-radius: var(--cn-board-control-radius);
|
|
212
|
+
background: var(--color-main-background);
|
|
213
|
+
color: var(--color-main-text);
|
|
214
|
+
font-size: 14px;
|
|
215
|
+
font-weight: 600;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *):hover {
|
|
219
|
+
background: var(--color-background-hover);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* A trailing chevron ("Meer ⌄") follows the label, 6px after it. */
|
|
223
|
+
.cn-look-board .action-item.action-item--secondary .action-item__menutoggle:has(.chevron-down-icon) .button-vue__wrapper:not(.cn-look-nextcloud *) {
|
|
224
|
+
flex-direction: row-reverse;
|
|
225
|
+
gap: 6px;
|
|
226
|
+
}
|
|
227
|
+
|
|
156
228
|
/* ---- The navigation ---------------------------------------------------- */
|
|
157
229
|
.cn-look-board .app-navigation[data-testid="cn-nav"] {
|
|
158
230
|
--app-navigation-padding: 0px;
|
|
@@ -230,6 +302,40 @@
|
|
|
230
302
|
color: inherit;
|
|
231
303
|
}
|
|
232
304
|
|
|
305
|
+
/* A caption's edit pencil ("Mijn zaaktypen") sits on the caption's line at
|
|
306
|
+
its end, 4px in: a 28px round muted button with a 16px icon that adds no
|
|
307
|
+
height (DqZijbalk). It is placed absolutely because a theme may force the
|
|
308
|
+
caption to `display: block` at id strength (thematiq's Zuiddrecht sheet),
|
|
309
|
+
which put the pencil on a line of its own. */
|
|
310
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption:has(.app-navigation-caption__actions) {
|
|
311
|
+
position: relative;
|
|
312
|
+
padding-inline-end: 36px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions {
|
|
316
|
+
--default-clickable-area: 28px;
|
|
317
|
+
position: absolute;
|
|
318
|
+
inset-block-start: -6px;
|
|
319
|
+
inset-inline-end: 4px;
|
|
320
|
+
margin: 0;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions .button-vue {
|
|
324
|
+
--nldesign-color-on-surface: var(--color-text-maxcontrast);
|
|
325
|
+
width: 28px;
|
|
326
|
+
min-width: 28px;
|
|
327
|
+
height: 28px;
|
|
328
|
+
min-height: 28px;
|
|
329
|
+
padding: 0;
|
|
330
|
+
border-radius: 14px;
|
|
331
|
+
color: var(--color-text-maxcontrast);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions .button-vue svg {
|
|
335
|
+
width: 16px;
|
|
336
|
+
height: 16px;
|
|
337
|
+
}
|
|
338
|
+
|
|
233
339
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry,
|
|
234
340
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry-link {
|
|
235
341
|
min-height: 42px;
|
|
@@ -244,7 +350,15 @@
|
|
|
244
350
|
color: var(--color-main-text);
|
|
245
351
|
}
|
|
246
352
|
|
|
353
|
+
/* The open entry sits on the tonal primary. NcAppNavigationItem paints an
|
|
354
|
+
active entry with a 16% (22% hovered) primary mix at `!important`, so the
|
|
355
|
+
board value needs `!important` too; the selector is the more specific one.
|
|
356
|
+
The link carries the same ground. */
|
|
247
357
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active,
|
|
358
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active:hover {
|
|
359
|
+
background-color: var(--color-primary-element-light) !important;
|
|
360
|
+
}
|
|
361
|
+
|
|
248
362
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active .app-navigation-entry-link {
|
|
249
363
|
background: var(--color-primary-element-light);
|
|
250
364
|
color: var(--color-primary-element-light-text);
|
|
@@ -290,9 +404,11 @@
|
|
|
290
404
|
font-weight: 700;
|
|
291
405
|
}
|
|
292
406
|
|
|
407
|
+
/* White on the error colour: --color-error-text is the error colour for text on
|
|
408
|
+
a light ground (#8A0000 under thematiq), not the text on an error pill. */
|
|
293
409
|
.cn-look-board .cn-app-nav__count--attention {
|
|
294
410
|
background: var(--color-error);
|
|
295
|
-
color: var(--color-
|
|
411
|
+
color: var(--color-primary-element-text);
|
|
296
412
|
}
|
|
297
413
|
|
|
298
414
|
/* The footer: Help, then Advanced, whatever the declared order. */
|
|
@@ -374,6 +490,71 @@
|
|
|
374
490
|
font-weight: 600;
|
|
375
491
|
}
|
|
376
492
|
|
|
493
|
+
/* ---- Breadcrumbs (CnBreadcrumbs) ----------------------------------------- */
|
|
494
|
+
/* The board draws a trail as a line of 14px text, 8px apart: the crumbs that
|
|
495
|
+
lead somewhere as underlined links in the primary colour, the current one
|
|
496
|
+
as plain muted text (DqZaak "Alle zaken / 2026-0082"). NcBreadcrumbs draws
|
|
497
|
+
each crumb as a 34px tertiary button. The doubled classes outrank its
|
|
498
|
+
scoped rules; the ink goes through --nldesign-color-on-surface as well, for
|
|
499
|
+
a theme that forces the body ink onto every link and span (thematiq). */
|
|
500
|
+
.cn-look-board .cn-breadcrumbs.cn-breadcrumbs:not(.cn-look-nextcloud *) {
|
|
501
|
+
min-height: 0;
|
|
502
|
+
height: auto;
|
|
503
|
+
color: var(--color-text-maxcontrast);
|
|
504
|
+
font-size: 14px;
|
|
505
|
+
line-height: normal;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
.cn-look-board .cn-breadcrumbs .breadcrumb__crumbs:not(.cn-look-nextcloud *) {
|
|
509
|
+
gap: 8px;
|
|
510
|
+
min-height: 0;
|
|
511
|
+
margin: 0;
|
|
512
|
+
padding: 0;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb.vue-crumb:not(.cn-look-nextcloud *) {
|
|
516
|
+
gap: 8px;
|
|
517
|
+
min-width: 0;
|
|
518
|
+
min-height: 0;
|
|
519
|
+
height: auto;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue:not(.cn-look-nextcloud *) {
|
|
523
|
+
--nldesign-color-on-surface: var(--color-primary-element);
|
|
524
|
+
min-width: 0;
|
|
525
|
+
min-height: 0;
|
|
526
|
+
height: auto;
|
|
527
|
+
padding: 0;
|
|
528
|
+
border: 0;
|
|
529
|
+
background: transparent;
|
|
530
|
+
color: var(--color-primary-element);
|
|
531
|
+
font-size: 14px;
|
|
532
|
+
font-weight: 400;
|
|
533
|
+
line-height: inherit;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue:not(.cn-look-nextcloud *) .button-vue__text {
|
|
537
|
+
padding: 0;
|
|
538
|
+
font-weight: inherit;
|
|
539
|
+
line-height: inherit;
|
|
540
|
+
text-decoration: underline;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue[aria-current='page']:not(.cn-look-nextcloud *) {
|
|
544
|
+
--nldesign-color-on-surface: var(--color-text-maxcontrast);
|
|
545
|
+
color: var(--color-text-maxcontrast);
|
|
546
|
+
cursor: default;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue[aria-current='page']:not(.cn-look-nextcloud *) .button-vue__text {
|
|
550
|
+
text-decoration: none;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.cn-look-board .cn-breadcrumbs .vue-crumb__separator:not(.cn-look-nextcloud *) {
|
|
554
|
+
margin: 0;
|
|
555
|
+
color: var(--color-text-maxcontrast);
|
|
556
|
+
}
|
|
557
|
+
|
|
377
558
|
/* ---- Settings: header, cards in a grid, version card ------------------- */
|
|
378
559
|
.cn-look-board .cn-admin-settings-shell__header:not(.cn-look-nextcloud *),
|
|
379
560
|
.cn-look-board .cn-settings-page__header:not(.cn-look-nextcloud *) {
|
|
@@ -792,6 +973,63 @@
|
|
|
792
973
|
ground ("Verzoek", "Nieuw"); the default look keeps the brighter
|
|
793
974
|
primary-element text. The other tones already match the board. */
|
|
794
975
|
.cn-look-board .cn-status-badge--primary:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
|
|
976
|
+
--cn-status-badge-ink: var(--color-primary-element-light-text);
|
|
977
|
+
color: var(--cn-status-badge-ink);
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
/* Every board pill is 13px at 600 on a 3px 10px pad with a 12px corner
|
|
981
|
+
(DqZaak's header pills, DqZaken's status column). */
|
|
982
|
+
.cn-look-board .cn-status-badge:not(.cn-status-badge--small):not(.cn-look-nextcloud *) {
|
|
983
|
+
padding: 3px 10px;
|
|
984
|
+
border-radius: 12px;
|
|
985
|
+
font-size: 13px;
|
|
986
|
+
font-weight: 600;
|
|
987
|
+
line-height: normal;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/* A pill paints its own pairing of ink and fill. A theme that forces the body
|
|
991
|
+
ink onto every span (thematiq's text rule, `!important` at id level) reads
|
|
992
|
+
that ink from --nldesign-color-on-surface when the surface sets it, so the
|
|
993
|
+
pill hands it its own ink: "In behandeling" stays purple on purple. */
|
|
994
|
+
.cn-look-board .cn-status-badge:not(.cn-look-nextcloud *) {
|
|
995
|
+
--nldesign-color-on-surface: var(--cn-status-badge-ink);
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/* ---- Info notes (NcNoteCard type="info") -------------------------------- */
|
|
999
|
+
/* The board's info note is a light-blue rounded box: no edge bar, 12px 14px
|
|
1000
|
+
of padding, radius 8, an 18px icon 10px before the text, 14px text in the
|
|
1001
|
+
deep primary ink at 1.5, and a bold heading line (DqBesluit and 13 other
|
|
1002
|
+
boards). NcNoteCard paints its ground and ink with `!important`, and a
|
|
1003
|
+
theme forces the body ink onto every p and span (thematiq), so the ground,
|
|
1004
|
+
the ink and the paragraph colour carry `!important` here too, scoped to
|
|
1005
|
+
the board look; the ink also goes to --nldesign-color-on-surface. */
|
|
1006
|
+
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) {
|
|
1007
|
+
--nldesign-color-on-surface: var(--color-primary-element-light-text);
|
|
1008
|
+
--note-card-icon-size: 18px;
|
|
1009
|
+
--note-theme: var(--color-primary-element-light-text);
|
|
1010
|
+
gap: 10px;
|
|
1011
|
+
padding: 12px 14px;
|
|
1012
|
+
border-inline-start: 0;
|
|
1013
|
+
border-radius: 8px;
|
|
1014
|
+
background-color: var(--color-primary-element-light) !important;
|
|
1015
|
+
color: var(--color-primary-element-light-text) !important;
|
|
1016
|
+
font-size: 14px;
|
|
1017
|
+
line-height: 1.5;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) p {
|
|
1021
|
+
color: var(--color-primary-element-light-text) !important;
|
|
1022
|
+
font-size: inherit;
|
|
1023
|
+
line-height: inherit;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) .notecard__heading {
|
|
1027
|
+
font-size: inherit;
|
|
1028
|
+
font-weight: 700 !important;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) .notecard__icon {
|
|
1032
|
+
padding-top: 1px;
|
|
795
1033
|
color: var(--color-primary-element-light-text);
|
|
796
1034
|
}
|
|
797
1035
|
|
|
@@ -802,6 +1040,68 @@
|
|
|
802
1040
|
font-weight: 600;
|
|
803
1041
|
}
|
|
804
1042
|
|
|
1043
|
+
/* ---- Label and value pairs (CnDetailGrid) -------------------------------- */
|
|
1044
|
+
/* The board draws pairs as plain text, not as grey cards with an accent bar:
|
|
1045
|
+
the grid as a 13px muted label over a 15px value at weight 500 with a
|
|
1046
|
+
hairline under each pair (DqZaak "Zaakgegevens"), the horizontal layout as
|
|
1047
|
+
two columns of 14px text, the label column as wide as its longest label
|
|
1048
|
+
(the side cards). Both at the board's line height, 1.2, not Nextcloud's 1.5:
|
|
1049
|
+
a pair is 47px tall on the board. The muted label also hands its ink to
|
|
1050
|
+
--nldesign-color-on-surface, which a theme that forces the body ink onto
|
|
1051
|
+
every div (thematiq) reads. */
|
|
1052
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--grid:not(.cn-look-nextcloud *) {
|
|
1053
|
+
gap: 12px 24px;
|
|
1054
|
+
font-size: 15px;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--horizontal:not(.cn-look-nextcloud *) {
|
|
1058
|
+
display: grid;
|
|
1059
|
+
grid-template-columns: max-content 1fr;
|
|
1060
|
+
gap: 8px 16px;
|
|
1061
|
+
font-size: 14px;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.cn-look-board .cn-detail-grid .cn-detail-grid__item:not(.cn-look-nextcloud *) {
|
|
1065
|
+
gap: 3px;
|
|
1066
|
+
padding: 0;
|
|
1067
|
+
border-inline-start: none;
|
|
1068
|
+
border-radius: 0;
|
|
1069
|
+
background: none;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--grid .cn-detail-grid__item:not(.cn-look-nextcloud *) {
|
|
1073
|
+
padding-bottom: 10px;
|
|
1074
|
+
border-bottom: 1px solid var(--cn-board-hairline);
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__item:not(.cn-look-nextcloud *) {
|
|
1078
|
+
display: contents;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
.cn-look-board .cn-detail-grid .cn-detail-grid__label:not(.cn-look-nextcloud *) {
|
|
1082
|
+
--nldesign-color-on-surface: var(--color-text-maxcontrast);
|
|
1083
|
+
min-width: 0;
|
|
1084
|
+
color: var(--color-text-maxcontrast);
|
|
1085
|
+
font-size: 13px;
|
|
1086
|
+
font-weight: 400;
|
|
1087
|
+
line-height: 1.2;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__label:not(.cn-look-nextcloud *) {
|
|
1091
|
+
font-size: inherit;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
.cn-look-board .cn-detail-grid .cn-detail-grid__value:not(.cn-look-nextcloud *) {
|
|
1095
|
+
margin: 0;
|
|
1096
|
+
font-size: inherit;
|
|
1097
|
+
font-weight: 500;
|
|
1098
|
+
line-height: 1.2;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
.cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__value:not(.cn-look-nextcloud *) {
|
|
1102
|
+
font-weight: 400;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
805
1105
|
/* ---- Dashboard card titles --------------------------------------------- */
|
|
806
1106
|
/* A card's title on a dashboard (and on the widgets under a reports page) is
|
|
807
1107
|
the board's card h2: 17px weight 700 (boards PqMijnWerk, DcRapportages and
|
package/src/index.js
CHANGED
|
@@ -280,6 +280,8 @@ export {
|
|
|
280
280
|
CnSearchPage,
|
|
281
281
|
CnSectionsWidget,
|
|
282
282
|
CnSettingsCard,
|
|
283
|
+
CnSettingsField,
|
|
284
|
+
CnSettingsFieldsSection,
|
|
283
285
|
CnSettingsFormWidget,
|
|
284
286
|
CnSettingsPage,
|
|
285
287
|
CnSettingsSection,
|
|
@@ -344,6 +346,7 @@ export {
|
|
|
344
346
|
CnWidgetVisibilityRulesModal,
|
|
345
347
|
CnWidgetWrapper,
|
|
346
348
|
CnWizardDialog,
|
|
349
|
+
CnWorkingCalendarWidget,
|
|
347
350
|
CnWorkspaceFilterWidget,
|
|
348
351
|
DEFAULT_DATE_RANGE_PRESETS,
|
|
349
352
|
defaultPageTypes,
|
|
@@ -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.123.0",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"required": ["$schema", "version"],
|
|
9
9
|
"allOf": [
|
|
@@ -97,6 +97,8 @@
|
|
|
97
97
|
"type": { "type": "string", "enum": ["info", "config-fields", "choice", "run-action", "summary", "component"], "description": "Built-in step renderer." },
|
|
98
98
|
"title": { "type": "string" },
|
|
99
99
|
"body": { "type": "string", "description": "info: explanatory copy." },
|
|
100
|
+
"note": { "type": "string", "minLength": 1, "description": "choice: a footnote under the options, translated like body." },
|
|
101
|
+
"footnote": { "type": "string", "minLength": 1, "description": "choice: the same footnote under another name; note wins when both are set." },
|
|
100
102
|
"required": { "type": "boolean", "default": false, "description": "When true the step gates the app until done." },
|
|
101
103
|
"schema": { "description": "config-fields: a JSON Schema ref (string) or inline object rendered via fieldsFromSchema." },
|
|
102
104
|
"configKey": { "type": "string", "description": "choice: app-config key the selection is written to." },
|
|
@@ -4024,6 +4026,14 @@
|
|
|
4024
4026
|
"type": "boolean",
|
|
4025
4027
|
"description": "false removes Request a feature, Report a bug and Documentation, for an app that offers them in its own help menu."
|
|
4026
4028
|
},
|
|
4029
|
+
"showMarkUnread": {
|
|
4030
|
+
"type": "boolean",
|
|
4031
|
+
"description": "false removes the built-in Mark as unread entry."
|
|
4032
|
+
},
|
|
4033
|
+
"showOpenSidebar": {
|
|
4034
|
+
"type": "boolean",
|
|
4035
|
+
"description": "false removes the built-in Open sidebar entry of the board look."
|
|
4036
|
+
},
|
|
4027
4037
|
"label": {
|
|
4028
4038
|
"type": "string",
|
|
4029
4039
|
"minLength": 1,
|
|
@@ -4333,6 +4343,20 @@
|
|
|
4333
4343
|
"minLength": 1,
|
|
4334
4344
|
"description": "type='detail', board look: the meta line on row 2 of the header, after the breadcrumb and a middle dot (screens-detail-page-parity). A field template such as `\"via {channel}\"`: every `{path}` is read from the record, and a line with an empty value is dropped. Maps to CnDetailPage `headerMeta`. type='index' | 'dashboard' | 'settings' (page-header-breadcrumb): the note after the breadcrumb and a middle dot under the title; on an index page `{total}` and `{shown}` are the list's counts."
|
|
4335
4345
|
},
|
|
4346
|
+
"headerMetaCounts": {
|
|
4347
|
+
"type": "object",
|
|
4348
|
+
"description": "type='index': the other lists headerMeta counts, by name. Each is read as one list total and fills `{count:<name>}` in headerMeta (\"{total} contracten bij {count:suppliers} leveranciers\"); while a count loads or when it fails, the note is left out.",
|
|
4349
|
+
"additionalProperties": {
|
|
4350
|
+
"type": "object",
|
|
4351
|
+
"required": ["register", "schema"],
|
|
4352
|
+
"additionalProperties": false,
|
|
4353
|
+
"properties": {
|
|
4354
|
+
"register": { "type": "string", "minLength": 1 },
|
|
4355
|
+
"schema": { "type": "string", "minLength": 1 },
|
|
4356
|
+
"filter": { "type": "object" }
|
|
4357
|
+
}
|
|
4358
|
+
}
|
|
4359
|
+
},
|
|
4336
4360
|
"tabsLabel": {
|
|
4337
4361
|
"type": "string",
|
|
4338
4362
|
"minLength": 1,
|