@conduction/nextcloud-vue 2.77.0 → 2.79.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/bundled-packages.json +0 -2
- package/dist/esm/bundled-packages.json +0 -2
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +113 -104
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js +23 -0
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +12 -2
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +2 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +117 -0
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +122 -97
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +37 -0
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js +2 -2
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +168 -5
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +140 -92
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +84 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +4 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue.js +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js +45 -2
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js.map +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +61 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +173 -5
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +181 -99
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js +29 -11
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js +252 -0
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js.map +1 -0
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +8 -2
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +4 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +31 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +3 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +100 -3
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -2
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +3 -2
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +36 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +35 -23
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js +6 -2
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js.map +1 -1
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +30 -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/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/composables/useAppManifest.js +8 -3
- package/dist/esm/composables/useAppManifest.js.map +1 -1
- package/dist/esm/composables/useFormDraft.js +11 -1
- package/dist/esm/composables/useFormDraft.js.map +1 -1
- package/dist/esm/composables/useObjectPresence.js +15 -4
- package/dist/esm/composables/useObjectPresence.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +68 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +113 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +526 -16
- package/dist/esm/utils/badgeVariants.js +32 -0
- package/dist/esm/utils/badgeVariants.js.map +1 -0
- package/dist/esm/utils/boardDate.js +193 -0
- package/dist/esm/utils/boardDate.js.map +1 -0
- package/dist/esm/utils/dynamicProperties.js +5 -1
- package/dist/esm/utils/dynamicProperties.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +57 -6
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +2569 -811
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +526 -16
- package/l10n/en.json +68 -1
- package/l10n/nl.json +113 -2
- package/package.json +1 -1
- package/scripts/build-validators.js +26 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +48 -39
- package/src/components/CnAiCompanion/CnAiCompanion.vue +23 -0
- package/src/components/CnAppRoot/CnAppRoot.vue +12 -2
- package/src/components/CnBoardView/CnBoardView.vue +2 -1
- package/src/components/CnCellRenderer/CnCellRenderer.md +1 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +169 -10
- package/src/components/CnChartWidget/CnChartWidget.vue +39 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +248 -8
- package/src/components/CnDataTable/CnDataTable.md +2 -0
- package/src/components/CnDataTable/CnDataTable.vue +88 -4
- package/src/components/CnDateRangePicker/CnDateRangePicker.vue +44 -1
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +61 -1
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +232 -11
- package/src/components/CnFilesBrowser/filesBrowser.js +43 -2
- package/src/components/CnFilesBrowser/index.js +1 -0
- package/src/components/CnFilesBrowser/openRegisterSource.js +248 -0
- package/src/components/CnFormDialog/CnFormDialog.vue +8 -2
- package/src/components/CnFormPage/CnFormPage.vue +4 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +33 -3
- package/src/components/CnObjectSidebar/CnFilesTab.vue +103 -4
- package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +3 -2
- package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +1 -1
- package/src/components/CnStatWidget/CnStatWidget.vue +52 -2
- package/src/components/CnStatusBadge/CnStatusBadge.vue +6 -2
- package/src/components/CnTabsWidget/CnTabsWidget.vue +30 -1
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
- package/src/components/index.js +1 -1
- package/src/composables/__tests__/useObjectPresence.spec.js +24 -0
- package/src/composables/useAppManifest.js +8 -3
- package/src/composables/useFormDraft.js +11 -1
- package/src/composables/useObjectPresence.js +15 -4
- package/src/css/badge.css +31 -0
- package/src/css/kpi-card.css +51 -0
- package/src/css/look-board-detail.css +10 -0
- package/src/css/look-board-index.css +128 -14
- package/src/css/look-board.css +85 -0
- package/src/css/table.css +37 -0
- package/src/index.js +4 -0
- package/src/schemas/app-manifest-v2.schema.json +50 -5
- package/src/utils/badgeVariants.js +29 -0
- package/src/utils/boardDate.js +189 -0
- package/src/utils/dynamicProperties.js +5 -1
- package/src/utils/validateManifestV2.compiled.js +57 -2
- package/dist/esm/_virtual/equal.js +0 -4
- package/dist/esm/_virtual/equal.js.map +0 -1
- package/dist/esm/_virtual/ucs2length.js +0 -4
- package/dist/esm/_virtual/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js +0 -9
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/fast-deep-equal/index.js +0 -47
- package/dist/esm/node_modules/fast-deep-equal/index.js.map +0 -1
package/dist/nextcloud-vue.css
CHANGED
|
@@ -213,6 +213,14 @@
|
|
|
213
213
|
margin-inline-start: -264px;
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
+
/* The navigation draws the line between it and the content. NcContent draws a
|
|
217
|
+
second one on the content while the navigation is open, which doubled the
|
|
218
|
+
line and put the page 1px further from the navigation than the board's 28px.
|
|
219
|
+
Outranks NcContent's rule (six classes) with seven. */
|
|
220
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"]:not(.app-navigation--closed):not(.app-navigation--close) ~ .app-content.app-content {
|
|
221
|
+
border-inline-start: none;
|
|
222
|
+
}
|
|
223
|
+
|
|
216
224
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__content {
|
|
217
225
|
box-sizing: border-box;
|
|
218
226
|
gap: 20px;
|
|
@@ -222,6 +230,31 @@
|
|
|
222
230
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list {
|
|
223
231
|
height: auto;
|
|
224
232
|
flex: 1 1 auto;
|
|
233
|
+
margin: 0;
|
|
234
|
+
gap: 2px;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* The board's vertical rhythm (AppZijbalk): the primary action 20px from the
|
|
238
|
+
top, the list 20px under it, entries 2px apart. An empty search slot is a
|
|
239
|
+
flex child too and pushed everything 20px down, so it goes. */
|
|
240
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__search:empty {
|
|
241
|
+
display: none;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* A caption is a 12px label with 6px under it, 20px after the group above
|
|
245
|
+
and 2px before its first entry. NcAppNavigationCaption gives its name a
|
|
246
|
+
15px font on a 34px line, which made it 44px high. */
|
|
247
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list > .app-navigation-caption:not(:first-child) {
|
|
248
|
+
margin-top: 18px;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__name {
|
|
252
|
+
margin: 0;
|
|
253
|
+
padding: 0;
|
|
254
|
+
font-size: inherit;
|
|
255
|
+
font-weight: inherit;
|
|
256
|
+
line-height: normal;
|
|
257
|
+
color: inherit;
|
|
225
258
|
}
|
|
226
259
|
|
|
227
260
|
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry,
|
|
@@ -306,6 +339,43 @@
|
|
|
306
339
|
font-size: 15px;
|
|
307
340
|
}
|
|
308
341
|
|
|
342
|
+
/* The footer of the board: Help and Advanced as two 40px rows at weight 400,
|
|
343
|
+
2px apart. The Help row kept the 42px of a list entry, and the Advanced
|
|
344
|
+
foldout drew a 34px button inside 4px of padding, 20px under Help. */
|
|
345
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list {
|
|
346
|
+
gap: 2px;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list .app-navigation-entry,
|
|
350
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list .app-navigation-entry-link {
|
|
351
|
+
min-height: 40px;
|
|
352
|
+
font-weight: 400;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] {
|
|
356
|
+
padding: 0;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .cn-app-nav__footer-list + [data-testid="cn-nav-settings"] {
|
|
360
|
+
margin-top: -18px;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] > :first-child {
|
|
364
|
+
margin: 0;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] [data-testid="cn-nav-settings"] > :first-child .button-vue {
|
|
368
|
+
box-sizing: border-box;
|
|
369
|
+
width: 100%;
|
|
370
|
+
height: 40px;
|
|
371
|
+
min-height: 40px;
|
|
372
|
+
padding: 0 10px;
|
|
373
|
+
border-radius: 8px;
|
|
374
|
+
font-size: 15px;
|
|
375
|
+
font-weight: 400;
|
|
376
|
+
justify-content: flex-start;
|
|
377
|
+
}
|
|
378
|
+
|
|
309
379
|
/* The card above the footer, pushed down. */
|
|
310
380
|
.cn-look-board .cn-app-nav__card {
|
|
311
381
|
order: 0;
|
|
@@ -502,6 +572,21 @@
|
|
|
502
572
|
color: var(--color-main-text);
|
|
503
573
|
opacity: 1;
|
|
504
574
|
}
|
|
575
|
+
|
|
576
|
+
/* ---- Status pills (screens-cell-pill-parity) ---------------------------- */
|
|
577
|
+
/* The board draws a primary pill in the deep primary ink on the light primary
|
|
578
|
+
ground ("Verzoek", "Nieuw"); the default look keeps the brighter
|
|
579
|
+
primary-element text. The other tones already match the board. */
|
|
580
|
+
.cn-look-board .cn-status-badge--primary:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
|
|
581
|
+
color: var(--color-primary-element-light-text);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/* ---- Date and age cells (screens-cell-date-parity) ---------------------- */
|
|
585
|
+
/* The board sets every waiting time ("3 dagen", "4 uur") in weight 600; a
|
|
586
|
+
late one is red through its variant class. */
|
|
587
|
+
.cn-look-board .cn-cell-renderer__age:not(.cn-look-nextcloud *) {
|
|
588
|
+
font-weight: 600;
|
|
589
|
+
}
|
|
505
590
|
/*
|
|
506
591
|
* The board dialog (screens-dialog-parity, canon section 5).
|
|
507
592
|
*
|
|
@@ -1192,6 +1277,42 @@
|
|
|
1192
1277
|
margin-inline-start: 0;
|
|
1193
1278
|
}
|
|
1194
1279
|
|
|
1280
|
+
/* The header buttons keep the board's button under a theme that styles every
|
|
1281
|
+
secondary or primary button with `!important` (the nldesign theme: a
|
|
1282
|
+
primary border, 8px 16px padding): Download and the Actions menu are 40px,
|
|
1283
|
+
a grey border on the main background (PqTickets, DqZaken), the primary
|
|
1284
|
+
button is the primary fill without a border. The buildiq square is not a
|
|
1285
|
+
direct child button and keeps its own rule. */
|
|
1286
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--secondary,
|
|
1287
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item .button-vue {
|
|
1288
|
+
height: var(--cn-board-control-height) !important;
|
|
1289
|
+
min-height: var(--cn-board-control-height) !important;
|
|
1290
|
+
padding: 0 14px !important;
|
|
1291
|
+
border: 1px solid var(--color-border-dark) !important;
|
|
1292
|
+
border-radius: var(--cn-board-control-radius) !important;
|
|
1293
|
+
background: var(--color-main-background) !important;
|
|
1294
|
+
color: var(--color-main-text) !important;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--secondary:hover,
|
|
1298
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item .button-vue:hover {
|
|
1299
|
+
background: var(--color-background-hover) !important;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--primary {
|
|
1303
|
+
height: var(--cn-board-control-height) !important;
|
|
1304
|
+
min-height: var(--cn-board-control-height) !important;
|
|
1305
|
+
padding: 0 16px !important;
|
|
1306
|
+
border: 0 !important;
|
|
1307
|
+
border-radius: var(--cn-board-control-radius) !important;
|
|
1308
|
+
background: var(--color-primary-element) !important;
|
|
1309
|
+
color: var(--color-primary-element-text) !important;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
.cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--primary:hover {
|
|
1313
|
+
background: var(--color-primary-element-hover) !important;
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1195
1316
|
/* ----------------------------------------------------------------- toolbar */
|
|
1196
1317
|
|
|
1197
1318
|
/* No band, no padding, no radius. The DOM is already in reading order (row 1,
|
|
@@ -1218,16 +1339,27 @@
|
|
|
1218
1339
|
margin-inline-start: 0;
|
|
1219
1340
|
}
|
|
1220
1341
|
|
|
1221
|
-
/* The first of Save view
|
|
1222
|
-
the
|
|
1223
|
-
|
|
1342
|
+
/* The first of Save view and the Filter + view switch unit takes the free
|
|
1343
|
+
space (the board's `flex: 1` spacer), so they sit at the end of row 1.
|
|
1344
|
+
When the line is full the unit wraps as one to the START of the next line
|
|
1345
|
+
while Save view stays at the end of row 1 (DqZaken); without Save view the
|
|
1346
|
+
unit sits at the end of row 1 (PqTickets, PqLeads, PtPortals). */
|
|
1347
|
+
.cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > :is(.cn-saved-views__save, .cn-actions-bar__view-controls) {
|
|
1224
1348
|
margin-inline-start: auto;
|
|
1225
1349
|
}
|
|
1226
1350
|
|
|
1227
|
-
.cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views >
|
|
1351
|
+
.cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--views > .cn-saved-views__save ~ .cn-actions-bar__view-controls {
|
|
1228
1352
|
margin-inline-start: 0;
|
|
1229
1353
|
}
|
|
1230
1354
|
|
|
1355
|
+
.cn-look-board .cn-actions-bar--board .cn-actions-bar__view-controls {
|
|
1356
|
+
display: flex;
|
|
1357
|
+
flex: 0 0 auto;
|
|
1358
|
+
flex-wrap: nowrap;
|
|
1359
|
+
align-items: center;
|
|
1360
|
+
gap: 8px;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1231
1363
|
/* Row 2: the search field and the active filters on a line of their own. */
|
|
1232
1364
|
.cn-look-board .cn-actions-bar--board > .cn-actions-bar__row--search {
|
|
1233
1365
|
display: flex;
|
|
@@ -1313,16 +1445,39 @@
|
|
|
1313
1445
|
color: var(--color-primary-element-text);
|
|
1314
1446
|
}
|
|
1315
1447
|
|
|
1316
|
-
/* Save view: 34px, radius 17, on the light primary
|
|
1448
|
+
/* Save view: a ghost button, 34px, radius 17, no border, on the light primary
|
|
1449
|
+
tint, a 14px icon 6px before the label, on one line. */
|
|
1317
1450
|
.cn-look-board .cn-saved-views__save .button-vue {
|
|
1318
1451
|
min-height: 34px;
|
|
1319
1452
|
height: 34px;
|
|
1320
|
-
padding: 0
|
|
1453
|
+
padding: 0 12px;
|
|
1454
|
+
border: 0;
|
|
1321
1455
|
border-radius: 17px;
|
|
1322
1456
|
background: var(--color-primary-element-light);
|
|
1323
1457
|
color: var(--color-primary-element-light-text);
|
|
1324
1458
|
font-size: 13px;
|
|
1325
1459
|
font-weight: 600;
|
|
1460
|
+
white-space: nowrap;
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
.cn-look-board .cn-saved-views__save .button-vue:hover {
|
|
1464
|
+
background: var(--color-primary-element-light-hover);
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
.cn-look-board .cn-saved-views__save .button-vue .button-vue__wrapper {
|
|
1468
|
+
gap: 6px;
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
.cn-look-board .cn-saved-views__save .button-vue .button-vue__icon {
|
|
1472
|
+
width: auto;
|
|
1473
|
+
min-width: 0;
|
|
1474
|
+
height: auto;
|
|
1475
|
+
min-height: 0;
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
.cn-look-board .cn-saved-views__save .button-vue .button-vue__text {
|
|
1479
|
+
margin: 0;
|
|
1480
|
+
padding: 0;
|
|
1326
1481
|
}
|
|
1327
1482
|
|
|
1328
1483
|
/* Filter: a labelled secondary button, 36px, radius 8, with the active count. */
|
|
@@ -1554,6 +1709,29 @@
|
|
|
1554
1709
|
text-decoration: none;
|
|
1555
1710
|
}
|
|
1556
1711
|
|
|
1712
|
+
/* Only the title is underlined (DqZaken). An underline set on the cell
|
|
1713
|
+
reaches every in-flow child whatever its own text-decoration, so the
|
|
1714
|
+
secondary lines become inline blocks on a line of their own: an atomic
|
|
1715
|
+
inline box is the one thing the underline does not reach. */
|
|
1716
|
+
.cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-table-cell__secondary {
|
|
1717
|
+
display: inline-block;
|
|
1718
|
+
width: 100%;
|
|
1719
|
+
vertical-align: top;
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
/* `rowTitle: "plain"` (PqTickets, OcPublicaties): the title is bold text in
|
|
1723
|
+
the main text colour without an underline, the secondary line 13px muted,
|
|
1724
|
+
2px under it. The row stays clickable through its stretched row link. */
|
|
1725
|
+
.cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title {
|
|
1726
|
+
font-weight: 700;
|
|
1727
|
+
text-decoration: none;
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
.cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title .cn-table-cell__secondary {
|
|
1731
|
+
margin-top: 2px;
|
|
1732
|
+
font-size: 13px;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1557
1735
|
/* A status pill: 3px 10px, radius 12, 13px weight 600. The colours stay the
|
|
1558
1736
|
status colour map's. */
|
|
1559
1737
|
.cn-look-board .cn-table-container--board .cn-data-table .cn-status-badge {
|
|
@@ -1576,15 +1754,36 @@
|
|
|
1576
1754
|
--default-clickable-area: 34px;
|
|
1577
1755
|
}
|
|
1578
1756
|
|
|
1757
|
+
/* The row menu: a 34px square, three dots, a grey border on the main
|
|
1758
|
+
background (DqZaken, PqTickets). A theme that styles every secondary button
|
|
1759
|
+
with `!important` (the nldesign theme: a primary border, 8px 16px padding,
|
|
1760
|
+
`min-width: max-content`) would otherwise turn it into a 64px wide button
|
|
1761
|
+
with a blue border, so the board values are `!important` too. */
|
|
1762
|
+
.cn-look-board .cn-row-actions--board .button-vue,
|
|
1763
|
+
.cn-look-board .cn-row-actions--board .button-vue:hover,
|
|
1764
|
+
.cn-look-board .cn-row-actions--board .button-vue:focus {
|
|
1765
|
+
box-sizing: border-box !important;
|
|
1766
|
+
width: 34px !important;
|
|
1767
|
+
min-width: 34px !important;
|
|
1768
|
+
height: 34px !important;
|
|
1769
|
+
min-height: 34px !important;
|
|
1770
|
+
padding: 0 !important;
|
|
1771
|
+
border: 1px solid var(--color-border-dark) !important;
|
|
1772
|
+
border-radius: 8px !important;
|
|
1773
|
+
color: var(--cn-board-text-soft) !important;
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1579
1776
|
.cn-look-board .cn-row-actions--board .button-vue {
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1777
|
+
background: var(--color-main-background) !important;
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
.cn-look-board .cn-row-actions--board .button-vue:hover {
|
|
1781
|
+
background: var(--color-background-hover) !important;
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
.cn-look-board .cn-row-actions--board .button-vue:focus-visible {
|
|
1785
|
+
outline: 2px solid var(--color-main-text);
|
|
1786
|
+
outline-offset: 2px;
|
|
1588
1787
|
}
|
|
1589
1788
|
|
|
1590
1789
|
/* ------------------------------------------------------------------ footer */
|
|
@@ -2144,6 +2343,34 @@
|
|
|
2144
2343
|
min-width: 0;
|
|
2145
2344
|
}
|
|
2146
2345
|
|
|
2346
|
+
/* Fit to the container (CnDataTable's `fitWidth`, on in CnWidgetObjectTable).
|
|
2347
|
+
|
|
2348
|
+
In a narrow tile the auto layout made the table as wide as its one-line
|
|
2349
|
+
cells, so it ran past the tile and clipped the trailing column (a date).
|
|
2350
|
+
Here every column but one takes the width of its content (`width: 1%` asks
|
|
2351
|
+
for as little as the content allows), and the grow column takes what is
|
|
2352
|
+
left. `max-width: 0` is what lets that column go below its content's width:
|
|
2353
|
+
the table no longer counts its text, so the text is cut with an ellipsis
|
|
2354
|
+
instead of widening the table. The full value stays in the cell's tooltip. */
|
|
2355
|
+
.cn-data-table--fit {
|
|
2356
|
+
width: 100%;
|
|
2357
|
+
}
|
|
2358
|
+
|
|
2359
|
+
.cn-data-table--fit th,
|
|
2360
|
+
.cn-data-table--fit td {
|
|
2361
|
+
width: 1%;
|
|
2362
|
+
}
|
|
2363
|
+
|
|
2364
|
+
.cn-data-table--fit th.cn-table-col--grow,
|
|
2365
|
+
.cn-data-table--fit td.cn-table-col--grow {
|
|
2366
|
+
width: auto;
|
|
2367
|
+
min-width: 0;
|
|
2368
|
+
max-width: 0;
|
|
2369
|
+
overflow: hidden;
|
|
2370
|
+
text-overflow: ellipsis;
|
|
2371
|
+
white-space: nowrap;
|
|
2372
|
+
}
|
|
2373
|
+
|
|
2147
2374
|
.cn-data-table th {
|
|
2148
2375
|
background: var(--color-background-dark);
|
|
2149
2376
|
font-weight: 500;
|
|
@@ -2492,6 +2719,15 @@
|
|
|
2492
2719
|
color: var(--color-text-maxcontrast);
|
|
2493
2720
|
}
|
|
2494
2721
|
|
|
2722
|
+
/* The empty row holds a sentence (the empty text, or why a lens cannot
|
|
2723
|
+
answer), not a cell value: it wraps instead of being cut to one line. The
|
|
2724
|
+
selector carries the table class so it outranks the one-line cell rule. */
|
|
2725
|
+
.cn-data-table .cn-table-empty td {
|
|
2726
|
+
max-width: none;
|
|
2727
|
+
white-space: normal;
|
|
2728
|
+
overflow-wrap: anywhere;
|
|
2729
|
+
}
|
|
2730
|
+
|
|
2495
2731
|
/* ========================================
|
|
2496
2732
|
Backwards compatibility aliases
|
|
2497
2733
|
(legacy OpenRegister CSS class names)
|
|
@@ -3346,6 +3582,57 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
3346
3582
|
gap: 6px;
|
|
3347
3583
|
}
|
|
3348
3584
|
|
|
3585
|
+
/* A linked board tile is one link: the label is not underlined link text, in
|
|
3586
|
+
any layout (screens-stat-tile-parity). The NL Design theme underlines every
|
|
3587
|
+
`a` with `!important`, so the opt-out needs it too. */
|
|
3588
|
+
a.cn-kpi-card--board,
|
|
3589
|
+
a.cn-kpi-card--board:hover,
|
|
3590
|
+
a.cn-kpi-card--board:focus-visible,
|
|
3591
|
+
a.cn-kpi-card--board * {
|
|
3592
|
+
text-decoration: none !important;
|
|
3593
|
+
}
|
|
3594
|
+
|
|
3595
|
+
/* `content.iconPlacement: "end"` (DqDashboard): label left, the icon in a
|
|
3596
|
+
32px circle right, tinted by the tile's state. */
|
|
3597
|
+
.cn-kpi-card--board .cn-kpi-card__title--badge-end {
|
|
3598
|
+
justify-content: space-between;
|
|
3599
|
+
gap: 8px;
|
|
3600
|
+
}
|
|
3601
|
+
|
|
3602
|
+
.cn-kpi-card__badge {
|
|
3603
|
+
display: inline-flex;
|
|
3604
|
+
flex: 0 0 auto;
|
|
3605
|
+
align-items: center;
|
|
3606
|
+
justify-content: center;
|
|
3607
|
+
width: 32px;
|
|
3608
|
+
height: 32px;
|
|
3609
|
+
margin-inline-start: auto;
|
|
3610
|
+
border-radius: 50%;
|
|
3611
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
3612
|
+
background: var(--color-primary-element-light, color-mix(in srgb, var(--color-primary-element) 12%, transparent));
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3615
|
+
.cn-kpi-card__badge svg {
|
|
3616
|
+
width: 18px;
|
|
3617
|
+
height: 18px;
|
|
3618
|
+
fill: currentcolor;
|
|
3619
|
+
}
|
|
3620
|
+
|
|
3621
|
+
.cn-kpi-card__badge--success {
|
|
3622
|
+
color: var(--color-text-success, var(--color-success-text));
|
|
3623
|
+
background: color-mix(in srgb, var(--color-text-success, var(--color-success-text)) 12%, var(--color-main-background));
|
|
3624
|
+
}
|
|
3625
|
+
|
|
3626
|
+
.cn-kpi-card__badge--warning {
|
|
3627
|
+
color: var(--color-element-warning, var(--color-warning-text));
|
|
3628
|
+
background: color-mix(in srgb, var(--color-element-warning, var(--color-warning-text)) 12%, var(--color-main-background));
|
|
3629
|
+
}
|
|
3630
|
+
|
|
3631
|
+
.cn-kpi-card__badge--error {
|
|
3632
|
+
color: var(--color-text-error, var(--color-error-text));
|
|
3633
|
+
background: color-mix(in srgb, var(--color-text-error, var(--color-error-text)) 10%, var(--color-main-background));
|
|
3634
|
+
}
|
|
3635
|
+
|
|
3349
3636
|
.cn-kpi-card__glyph {
|
|
3350
3637
|
display: inline-flex;
|
|
3351
3638
|
flex: 0 0 auto;
|
|
@@ -3592,6 +3879,15 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
3592
3879
|
@conduction/nextcloud-vue — Status Badge
|
|
3593
3880
|
======================================== */
|
|
3594
3881
|
|
|
3882
|
+
/* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
|
|
3883
|
+
A theme may redefine them; the six role variants below use Nextcloud's own. */
|
|
3884
|
+
:root {
|
|
3885
|
+
--cn-status-purple-bg: #e8e6f6;
|
|
3886
|
+
--cn-status-purple-text: #4a3f8f;
|
|
3887
|
+
--cn-status-teal-bg: #e3f1f3;
|
|
3888
|
+
--cn-status-teal-text: #1d5e66;
|
|
3889
|
+
}
|
|
3890
|
+
|
|
3595
3891
|
.cn-status-badge {
|
|
3596
3892
|
display: inline-flex;
|
|
3597
3893
|
align-items: center;
|
|
@@ -3641,6 +3937,18 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
3641
3937
|
color: var(--color-info-text, var(--color-info, #0082c9));
|
|
3642
3938
|
}
|
|
3643
3939
|
|
|
3940
|
+
/* Work in progress ("In behandeling"), a board tone. */
|
|
3941
|
+
.cn-status-badge--purple {
|
|
3942
|
+
background-color: var(--cn-status-purple-bg);
|
|
3943
|
+
color: var(--cn-status-purple-text);
|
|
3944
|
+
}
|
|
3945
|
+
|
|
3946
|
+
/* Handed on ("Omgezet naar een zaak"), a board tone. */
|
|
3947
|
+
.cn-status-badge--teal {
|
|
3948
|
+
background-color: var(--cn-status-teal-bg);
|
|
3949
|
+
color: var(--cn-status-teal-text);
|
|
3950
|
+
}
|
|
3951
|
+
|
|
3644
3952
|
/* Solid variants — solid background with white text for use on colored backgrounds */
|
|
3645
3953
|
.cn-status-badge--solid.cn-status-badge--default {
|
|
3646
3954
|
background-color: var(--color-background-dark);
|
|
@@ -3671,6 +3979,16 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
3671
3979
|
background-color: var(--color-info, #0082c9);
|
|
3672
3980
|
color: white;
|
|
3673
3981
|
}
|
|
3982
|
+
|
|
3983
|
+
.cn-status-badge--solid.cn-status-badge--purple {
|
|
3984
|
+
background-color: var(--cn-status-purple-text);
|
|
3985
|
+
color: white;
|
|
3986
|
+
}
|
|
3987
|
+
|
|
3988
|
+
.cn-status-badge--solid.cn-status-badge--teal {
|
|
3989
|
+
background-color: var(--cn-status-teal-text);
|
|
3990
|
+
color: white;
|
|
3991
|
+
}
|
|
3674
3992
|
/* ========================================
|
|
3675
3993
|
@conduction/nextcloud-vue — Layout & Filter Utility Styles
|
|
3676
3994
|
======================================== */
|
|
@@ -5566,6 +5884,16 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
5566
5884
|
gap: 20px;
|
|
5567
5885
|
}
|
|
5568
5886
|
|
|
5887
|
+
/* GridStack insets every cell by its 12px margin, the outer edge included, so
|
|
5888
|
+
the tab strip started 12px below the top of the body column and stopped 12px
|
|
5889
|
+
short of its end, while the side column started at the top. Pulling the grid
|
|
5890
|
+
out by that margin puts its first card on the column's edges: the side column
|
|
5891
|
+
is level with the strip, and the strip ends where the body column ends. */
|
|
5892
|
+
.cn-look-board.cn-detail-page--with-side > .cn-detail-page__body > .cn-detail-page__grid {
|
|
5893
|
+
margin: -12px;
|
|
5894
|
+
width: auto;
|
|
5895
|
+
}
|
|
5896
|
+
|
|
5569
5897
|
/* ---- Folder tabs ------------------------------------------------------- */
|
|
5570
5898
|
|
|
5571
5899
|
/* The strip draws no line of its own (design-system pull request 147). The card under it
|
|
@@ -9110,9 +9438,24 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9110
9438
|
does not rest on colour alone. */
|
|
9111
9439
|
.cn-cell-renderer__date--success[data-v-37d7b88f],
|
|
9112
9440
|
.cn-cell-renderer__date--warning[data-v-37d7b88f],
|
|
9113
|
-
.cn-cell-renderer__date--error[data-v-37d7b88f]
|
|
9441
|
+
.cn-cell-renderer__date--error[data-v-37d7b88f],
|
|
9442
|
+
.cn-cell-renderer__age--success[data-v-37d7b88f],
|
|
9443
|
+
.cn-cell-renderer__age--warning[data-v-37d7b88f],
|
|
9444
|
+
.cn-cell-renderer__age--error[data-v-37d7b88f] {
|
|
9114
9445
|
font-weight: 600;
|
|
9115
9446
|
}
|
|
9447
|
+
.cn-cell-renderer__age[data-v-37d7b88f] {
|
|
9448
|
+
white-space: nowrap;
|
|
9449
|
+
}
|
|
9450
|
+
.cn-cell-renderer__age--success[data-v-37d7b88f] {
|
|
9451
|
+
color: var(--color-text-success, var(--color-success-text));
|
|
9452
|
+
}
|
|
9453
|
+
.cn-cell-renderer__age--warning[data-v-37d7b88f] {
|
|
9454
|
+
color: var(--color-text-warning, var(--color-warning-text));
|
|
9455
|
+
}
|
|
9456
|
+
.cn-cell-renderer__age--error[data-v-37d7b88f] {
|
|
9457
|
+
color: var(--color-text-error, var(--color-error-text));
|
|
9458
|
+
}
|
|
9116
9459
|
.cn-cell-renderer__date--success[data-v-37d7b88f] {
|
|
9117
9460
|
color: var(--color-text-success, var(--color-success-text));
|
|
9118
9461
|
}
|
|
@@ -9122,8 +9465,11 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9122
9465
|
.cn-cell-renderer__date--error[data-v-37d7b88f] {
|
|
9123
9466
|
color: var(--color-text-error, var(--color-error-text));
|
|
9124
9467
|
}
|
|
9468
|
+
|
|
9469
|
+
/* The text variant, not the fill: from Nextcloud 32 `--color-success` is a
|
|
9470
|
+
background colour and too pale for a 16px glyph on a light theme. */
|
|
9125
9471
|
.cn-cell-renderer__icon--success[data-v-37d7b88f] {
|
|
9126
|
-
color: var(--color-success);
|
|
9472
|
+
color: var(--color-text-success, var(--color-success-text, var(--color-success)));
|
|
9127
9473
|
}
|
|
9128
9474
|
.cn-cell-renderer__swatch-wrap[data-v-37d7b88f] {
|
|
9129
9475
|
display: inline-flex;
|
|
@@ -9405,6 +9751,34 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9405
9751
|
min-width: 0;
|
|
9406
9752
|
}
|
|
9407
9753
|
|
|
9754
|
+
/* Fit to the container (CnDataTable's `fitWidth`, on in CnWidgetObjectTable).
|
|
9755
|
+
|
|
9756
|
+
In a narrow tile the auto layout made the table as wide as its one-line
|
|
9757
|
+
cells, so it ran past the tile and clipped the trailing column (a date).
|
|
9758
|
+
Here every column but one takes the width of its content (`width: 1%` asks
|
|
9759
|
+
for as little as the content allows), and the grow column takes what is
|
|
9760
|
+
left. `max-width: 0` is what lets that column go below its content's width:
|
|
9761
|
+
the table no longer counts its text, so the text is cut with an ellipsis
|
|
9762
|
+
instead of widening the table. The full value stays in the cell's tooltip. */
|
|
9763
|
+
.cn-data-table--fit {
|
|
9764
|
+
width: 100%;
|
|
9765
|
+
}
|
|
9766
|
+
|
|
9767
|
+
.cn-data-table--fit th,
|
|
9768
|
+
.cn-data-table--fit td {
|
|
9769
|
+
width: 1%;
|
|
9770
|
+
}
|
|
9771
|
+
|
|
9772
|
+
.cn-data-table--fit th.cn-table-col--grow,
|
|
9773
|
+
.cn-data-table--fit td.cn-table-col--grow {
|
|
9774
|
+
width: auto;
|
|
9775
|
+
min-width: 0;
|
|
9776
|
+
max-width: 0;
|
|
9777
|
+
overflow: hidden;
|
|
9778
|
+
text-overflow: ellipsis;
|
|
9779
|
+
white-space: nowrap;
|
|
9780
|
+
}
|
|
9781
|
+
|
|
9408
9782
|
.cn-data-table th {
|
|
9409
9783
|
background: var(--color-background-dark);
|
|
9410
9784
|
font-weight: 500;
|
|
@@ -9753,6 +10127,15 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9753
10127
|
color: var(--color-text-maxcontrast);
|
|
9754
10128
|
}
|
|
9755
10129
|
|
|
10130
|
+
/* The empty row holds a sentence (the empty text, or why a lens cannot
|
|
10131
|
+
answer), not a cell value: it wraps instead of being cut to one line. The
|
|
10132
|
+
selector carries the table class so it outranks the one-line cell rule. */
|
|
10133
|
+
.cn-data-table .cn-table-empty td {
|
|
10134
|
+
max-width: none;
|
|
10135
|
+
white-space: normal;
|
|
10136
|
+
overflow-wrap: anywhere;
|
|
10137
|
+
}
|
|
10138
|
+
|
|
9756
10139
|
/* ========================================
|
|
9757
10140
|
Backwards compatibility aliases
|
|
9758
10141
|
(legacy OpenRegister CSS class names)
|
|
@@ -14416,6 +14799,13 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
|
|
|
14416
14799
|
min-width: 0;
|
|
14417
14800
|
flex: 1 1 auto;
|
|
14418
14801
|
}
|
|
14802
|
+
|
|
14803
|
+
/* The crumbs give way, the controls do not: a long crumb (a folder named
|
|
14804
|
+
after a uuid) shrank the upload button to "Bestanden..." while the crumbs
|
|
14805
|
+
kept their width. */
|
|
14806
|
+
.cn-files-browser__bar[data-v-f5bdd9e2] > :not(.cn-files-browser__crumbs) {
|
|
14807
|
+
flex-shrink: 0;
|
|
14808
|
+
}
|
|
14419
14809
|
.cn-files-browser__file-input[data-v-f5bdd9e2] {
|
|
14420
14810
|
display: none;
|
|
14421
14811
|
}
|
|
@@ -20833,6 +21223,57 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
20833
21223
|
gap: 6px;
|
|
20834
21224
|
}
|
|
20835
21225
|
|
|
21226
|
+
/* A linked board tile is one link: the label is not underlined link text, in
|
|
21227
|
+
any layout (screens-stat-tile-parity). The NL Design theme underlines every
|
|
21228
|
+
`a` with `!important`, so the opt-out needs it too. */
|
|
21229
|
+
a.cn-kpi-card--board,
|
|
21230
|
+
a.cn-kpi-card--board:hover,
|
|
21231
|
+
a.cn-kpi-card--board:focus-visible,
|
|
21232
|
+
a.cn-kpi-card--board * {
|
|
21233
|
+
text-decoration: none !important;
|
|
21234
|
+
}
|
|
21235
|
+
|
|
21236
|
+
/* `content.iconPlacement: "end"` (DqDashboard): label left, the icon in a
|
|
21237
|
+
32px circle right, tinted by the tile's state. */
|
|
21238
|
+
.cn-kpi-card--board .cn-kpi-card__title--badge-end {
|
|
21239
|
+
justify-content: space-between;
|
|
21240
|
+
gap: 8px;
|
|
21241
|
+
}
|
|
21242
|
+
|
|
21243
|
+
.cn-kpi-card__badge {
|
|
21244
|
+
display: inline-flex;
|
|
21245
|
+
flex: 0 0 auto;
|
|
21246
|
+
align-items: center;
|
|
21247
|
+
justify-content: center;
|
|
21248
|
+
width: 32px;
|
|
21249
|
+
height: 32px;
|
|
21250
|
+
margin-inline-start: auto;
|
|
21251
|
+
border-radius: 50%;
|
|
21252
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
21253
|
+
background: var(--color-primary-element-light, color-mix(in srgb, var(--color-primary-element) 12%, transparent));
|
|
21254
|
+
}
|
|
21255
|
+
|
|
21256
|
+
.cn-kpi-card__badge svg {
|
|
21257
|
+
width: 18px;
|
|
21258
|
+
height: 18px;
|
|
21259
|
+
fill: currentcolor;
|
|
21260
|
+
}
|
|
21261
|
+
|
|
21262
|
+
.cn-kpi-card__badge--success {
|
|
21263
|
+
color: var(--color-text-success, var(--color-success-text));
|
|
21264
|
+
background: color-mix(in srgb, var(--color-text-success, var(--color-success-text)) 12%, var(--color-main-background));
|
|
21265
|
+
}
|
|
21266
|
+
|
|
21267
|
+
.cn-kpi-card__badge--warning {
|
|
21268
|
+
color: var(--color-element-warning, var(--color-warning-text));
|
|
21269
|
+
background: color-mix(in srgb, var(--color-element-warning, var(--color-warning-text)) 12%, var(--color-main-background));
|
|
21270
|
+
}
|
|
21271
|
+
|
|
21272
|
+
.cn-kpi-card__badge--error {
|
|
21273
|
+
color: var(--color-text-error, var(--color-error-text));
|
|
21274
|
+
background: color-mix(in srgb, var(--color-text-error, var(--color-error-text)) 10%, var(--color-main-background));
|
|
21275
|
+
}
|
|
21276
|
+
|
|
20836
21277
|
.cn-kpi-card__glyph {
|
|
20837
21278
|
display: inline-flex;
|
|
20838
21279
|
flex: 0 0 auto;
|
|
@@ -26550,6 +26991,15 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
|
|
|
26550
26991
|
@conduction/nextcloud-vue — Status Badge
|
|
26551
26992
|
======================================== */
|
|
26552
26993
|
|
|
26994
|
+
/* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
|
|
26995
|
+
A theme may redefine them; the six role variants below use Nextcloud's own. */
|
|
26996
|
+
:root {
|
|
26997
|
+
--cn-status-purple-bg: #e8e6f6;
|
|
26998
|
+
--cn-status-purple-text: #4a3f8f;
|
|
26999
|
+
--cn-status-teal-bg: #e3f1f3;
|
|
27000
|
+
--cn-status-teal-text: #1d5e66;
|
|
27001
|
+
}
|
|
27002
|
+
|
|
26553
27003
|
.cn-status-badge {
|
|
26554
27004
|
display: inline-flex;
|
|
26555
27005
|
align-items: center;
|
|
@@ -26599,6 +27049,18 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
|
|
|
26599
27049
|
color: var(--color-info-text, var(--color-info, #0082c9));
|
|
26600
27050
|
}
|
|
26601
27051
|
|
|
27052
|
+
/* Work in progress ("In behandeling"), a board tone. */
|
|
27053
|
+
.cn-status-badge--purple {
|
|
27054
|
+
background-color: var(--cn-status-purple-bg);
|
|
27055
|
+
color: var(--cn-status-purple-text);
|
|
27056
|
+
}
|
|
27057
|
+
|
|
27058
|
+
/* Handed on ("Omgezet naar een zaak"), a board tone. */
|
|
27059
|
+
.cn-status-badge--teal {
|
|
27060
|
+
background-color: var(--cn-status-teal-bg);
|
|
27061
|
+
color: var(--cn-status-teal-text);
|
|
27062
|
+
}
|
|
27063
|
+
|
|
26602
27064
|
/* Solid variants — solid background with white text for use on colored backgrounds */
|
|
26603
27065
|
.cn-status-badge--solid.cn-status-badge--default {
|
|
26604
27066
|
background-color: var(--color-background-dark);
|
|
@@ -26630,6 +27092,16 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
|
|
|
26630
27092
|
color: white;
|
|
26631
27093
|
}
|
|
26632
27094
|
|
|
27095
|
+
.cn-status-badge--solid.cn-status-badge--purple {
|
|
27096
|
+
background-color: var(--cn-status-purple-text);
|
|
27097
|
+
color: white;
|
|
27098
|
+
}
|
|
27099
|
+
|
|
27100
|
+
.cn-status-badge--solid.cn-status-badge--teal {
|
|
27101
|
+
background-color: var(--cn-status-teal-text);
|
|
27102
|
+
color: white;
|
|
27103
|
+
}
|
|
27104
|
+
|
|
26633
27105
|
|
|
26634
27106
|
/*
|
|
26635
27107
|
* The card itself — its box, body stack, icon circle, title and value
|
|
@@ -34810,6 +35282,44 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
34810
35282
|
height: var(--cn-board-control-height, 40px);
|
|
34811
35283
|
}
|
|
34812
35284
|
|
|
35285
|
+
/* The switch row under the header (screens-dashboard-greeting-header): the
|
|
35286
|
+
view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
|
|
35287
|
+
radius 17, 13px/600, a 14px icon, primary light on primary deep). */
|
|
35288
|
+
.cn-dashboard-page__switch-row[data-v-824052fe] {
|
|
35289
|
+
display: flex;
|
|
35290
|
+
flex-wrap: wrap;
|
|
35291
|
+
align-items: center;
|
|
35292
|
+
gap: 10px;
|
|
35293
|
+
margin-bottom: var(--cn-board-section-gap, 20px);
|
|
35294
|
+
}
|
|
35295
|
+
.cn-dashboard-page__switch-row-spacer[data-v-824052fe] {
|
|
35296
|
+
flex: 1 1 auto;
|
|
35297
|
+
}
|
|
35298
|
+
.cn-dashboard-page__view-link[data-v-824052fe] {
|
|
35299
|
+
display: inline-flex;
|
|
35300
|
+
align-items: center;
|
|
35301
|
+
gap: 6px;
|
|
35302
|
+
height: 34px;
|
|
35303
|
+
padding: 0 12px;
|
|
35304
|
+
border-radius: 17px;
|
|
35305
|
+
background: var(--color-primary-element-light);
|
|
35306
|
+
color: var(--color-primary-element-light-text);
|
|
35307
|
+
font-size: 13px;
|
|
35308
|
+
font-weight: 600;
|
|
35309
|
+
white-space: nowrap;
|
|
35310
|
+
text-decoration: none !important;
|
|
35311
|
+
}
|
|
35312
|
+
.cn-dashboard-page__view-link[data-v-824052fe]:hover {
|
|
35313
|
+
background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
|
|
35314
|
+
}
|
|
35315
|
+
.cn-dashboard-page__view-link[data-v-824052fe]:focus-visible {
|
|
35316
|
+
outline: 2px solid var(--color-main-text);
|
|
35317
|
+
outline-offset: 2px;
|
|
35318
|
+
}
|
|
35319
|
+
.cn-dashboard-page__view-link-icon[data-v-824052fe] {
|
|
35320
|
+
display: inline-flex;
|
|
35321
|
+
}
|
|
35322
|
+
|
|
34813
35323
|
/* The period group, in a row of its own between the header and the KPI row. */
|
|
34814
35324
|
.cn-dashboard-page__date-range--segmented[data-v-824052fe] {
|
|
34815
35325
|
margin-bottom: 16px;
|