@conduction/nextcloud-vue 2.79.0 → 2.80.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/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +3 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +32 -3
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +10 -8
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +39 -3
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +79 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +133 -96
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +1 -0
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +62 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +24 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +43 -4
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +11 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +736 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +238 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/index.js +30 -0
- package/dist/esm/components/CnFactsWidget/index.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +10 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +551 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +183 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/index.js +29 -0
- package/dist/esm/components/CnFieldListWidget/index.js.map +1 -0
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +65 -17
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +4 -4
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +18 -3
- 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 +305 -72
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +31 -13
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +10 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +99 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +48 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -0
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js +29 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +10 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +387 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +169 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/index.js +31 -0
- package/dist/esm/components/CnRecordListWidget/index.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +10 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +351 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +71 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/index.js +35 -0
- package/dist/esm/components/CnSectionsWidget/index.js.map +1 -0
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +81 -2
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +1 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +122 -7
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +84 -23
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +106 -2
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +105 -53
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
- package/dist/esm/composables/useFormDraft.js +140 -9
- package/dist/esm/composables/useFormDraft.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +28 -20
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js +9 -0
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection.js +21 -0
- package/dist/esm/integrations/builtin/field-inspection.js.map +1 -1
- package/dist/esm/integrations/offline/checklistSubmission.js +141 -0
- package/dist/esm/integrations/offline/checklistSubmission.js.map +1 -0
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js +70 -5
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js.map +1 -1
- package/dist/esm/integrations/offline/index.js +2 -1
- package/dist/esm/integrations/offline/index.js.map +1 -1
- package/dist/esm/integrations/offline/offlineDb.js +6 -1
- package/dist/esm/integrations/offline/offlineDb.js.map +1 -1
- package/dist/esm/integrations/offline/syncReplayService.js +8 -2
- package/dist/esm/integrations/offline/syncReplayService.js.map +1 -1
- package/dist/esm/l10n/en.json.js +12 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +16 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +1000 -59
- package/dist/esm/utils/detailActionModel.js +60 -3
- package/dist/esm/utils/detailActionModel.js.map +1 -1
- package/dist/esm/utils/fillTemplate.js +114 -0
- package/dist/esm/utils/fillTemplate.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +4 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/queryPresets.js +96 -0
- package/dist/esm/utils/queryPresets.js.map +1 -0
- package/dist/esm/utils/resolveFilterTokens.js +11 -0
- package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
- package/dist/esm/utils/schema.js +21 -0
- package/dist/esm/utils/schema.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +3 -3
- package/dist/esm/utils/sentinelTokens.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/widgetDispatch.js +7 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +12368 -7717
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1000 -59
- package/l10n/en.json +12 -1
- package/l10n/nl.json +16 -2
- package/package.json +1 -1
- package/src/components/CnActionButtons/CnActionButtons.vue +2 -0
- package/src/components/CnActionsBar/CnActionsBar.md +4 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +42 -10
- package/src/components/CnBannerWidget/CnBannerWidget.vue +39 -3
- package/src/components/CnCellRenderer/CnCellRenderer.vue +188 -1
- package/src/components/CnDataTable/CnDataTable.vue +1 -0
- package/src/components/CnDetailPage/CnDetailPage.md +1 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +63 -3
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +66 -0
- package/src/components/CnFactsWidget/CnFactsWidget.vue +1050 -0
- package/src/components/CnFactsWidget/index.js +29 -0
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +746 -0
- package/src/components/CnFieldListWidget/index.js +28 -0
- package/src/components/CnFormDialog/CnFormDialog.md +9 -3
- package/src/components/CnFormDialog/CnFormDialog.vue +69 -21
- package/src/components/CnFormPage/CnFormPage.vue +18 -3
- package/src/components/CnIndexPage/CnIndexPage.vue +254 -6
- package/src/components/CnIndexPage/CnIndexPageWidgets.vue +169 -0
- package/src/components/CnPageRenderer/CnPageRenderer.vue +29 -1
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +603 -0
- package/src/components/CnRecordListWidget/index.js +30 -0
- package/src/components/CnSectionsWidget/CnSectionsWidget.vue +489 -0
- package/src/components/CnSectionsWidget/index.js +34 -0
- package/src/components/CnStagesWidget/CnStagesWidget.vue +81 -2
- package/src/components/CnStatWidget/CnStatWidget.vue +1 -1
- package/src/components/CnTabsWidget/CnTabsWidget.vue +184 -8
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
- package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +188 -4
- package/src/components/index.js +4 -0
- package/src/composables/__tests__/useFormDraft.spec.js +69 -0
- package/src/composables/useFormDraft.js +139 -8
- package/src/css/form-field.css +14 -0
- package/src/css/index-page.css +71 -0
- package/src/css/kpi-card.css +32 -0
- package/src/css/look-board-detail.css +77 -0
- package/src/css/look-board-index.css +51 -0
- package/src/css/look-board.css +37 -2
- package/src/css/table.css +19 -0
- package/src/index.js +4 -0
- package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +35 -20
- package/src/integrations/builtin/field-inspection.js +21 -0
- package/src/integrations/offline/checklistSubmission.js +137 -0
- package/src/integrations/offline/fieldCollectionHelpers.js +69 -4
- package/src/integrations/offline/index.js +3 -0
- package/src/integrations/offline/offlineDb.js +6 -1
- package/src/integrations/offline/syncReplayService.js +8 -2
- package/src/schemas/app-manifest-v2.schema.json +104 -5
- package/src/utils/detailActionModel.js +59 -2
- package/src/utils/fillTemplate.js +110 -0
- package/src/utils/libraryWidgetKeys.js +4 -0
- package/src/utils/queryPresets.js +93 -0
- package/src/utils/resolveFilterTokens.js +11 -0
- package/src/utils/schema.js +21 -0
- package/src/utils/sentinelTokens.js +3 -3
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/widgetDispatch.js +7 -1
package/dist/nextcloud-vue.css
CHANGED
|
@@ -79,9 +79,14 @@
|
|
|
79
79
|
* counterpart default to one.
|
|
80
80
|
*/
|
|
81
81
|
.cn-look-board {
|
|
82
|
-
/* Page content area: padding, max width, gap between blocks.
|
|
82
|
+
/* Page content area: padding, max width, gap between blocks. The content
|
|
83
|
+
spans the whole content area (screens-one-scroller-parity): grids grow
|
|
84
|
+
with the window and shrink only when the sidebar takes its share. A
|
|
85
|
+
1240px cap left dead space right of the content, and on a dashboard,
|
|
86
|
+
which scrolled itself, put the scrollbar beside the content instead of
|
|
87
|
+
at the window edge. */
|
|
83
88
|
--cn-board-content-padding: 24px 28px;
|
|
84
|
-
--cn-board-content-max-width:
|
|
89
|
+
--cn-board-content-max-width: none;
|
|
85
90
|
--cn-board-section-gap: 20px;
|
|
86
91
|
/* Buttons and inputs. */
|
|
87
92
|
--cn-board-control-height: 40px;
|
|
@@ -121,6 +126,15 @@
|
|
|
121
126
|
gap: var(--cn-board-section-gap);
|
|
122
127
|
}
|
|
123
128
|
|
|
129
|
+
/* One scroller: the content area. CnDashboardPage scrolls itself
|
|
130
|
+
(`height: 100%; overflow-y: auto`), which nested a second scrollbar inside
|
|
131
|
+
NcAppContent's; under the board look the page grows with its widgets and
|
|
132
|
+
NcAppContent, which already spans to the window edge, scrolls it. */
|
|
133
|
+
.cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) {
|
|
134
|
+
height: auto;
|
|
135
|
+
overflow-y: visible;
|
|
136
|
+
}
|
|
137
|
+
|
|
124
138
|
.cn-look-board .cn-index-page:not(.cn-look-nextcloud *) .cn-page-header,
|
|
125
139
|
.cn-look-board .cn-settings-page:not(.cn-look-nextcloud *) .cn-page-header,
|
|
126
140
|
.cn-look-board .cn-index-page:not(.cn-look-nextcloud *) .cn-index-page__below-header,
|
|
@@ -234,6 +248,27 @@
|
|
|
234
248
|
gap: 2px;
|
|
235
249
|
}
|
|
236
250
|
|
|
251
|
+
/* No scrollbars inside the navigation (screens-one-scroller-parity).
|
|
252
|
+
NcAppNavigation gives the region above the list `overflow-y: scroll`, an
|
|
253
|
+
always-on track (with arrow buttons on classic scrollbars) beside the
|
|
254
|
+
primary action that has nothing to scroll. It takes its content's height
|
|
255
|
+
instead. A menu taller than the window still scrolls (wheel, touch, focus),
|
|
256
|
+
without drawing a bar of its own; the one visible scrollbar is the page's. */
|
|
257
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body:not(.app-navigation__body--no-list) {
|
|
258
|
+
flex-shrink: 0;
|
|
259
|
+
overflow: visible;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list,
|
|
263
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body--no-list {
|
|
264
|
+
scrollbar-width: none;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list::-webkit-scrollbar,
|
|
268
|
+
.cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body--no-list::-webkit-scrollbar {
|
|
269
|
+
display: none;
|
|
270
|
+
}
|
|
271
|
+
|
|
237
272
|
/* The board's vertical rhythm (AppZijbalk): the primary action 20px from the
|
|
238
273
|
top, the list 20px under it, entries 2px apart. An empty search slot is a
|
|
239
274
|
flex child too and pushed everything 20px down, so it goes. */
|
|
@@ -874,6 +909,20 @@
|
|
|
874
909
|
min-height: var(--cn-field-height);
|
|
875
910
|
}
|
|
876
911
|
|
|
912
|
+
/* NcTextField draws its input inside `.input-field__main-wrapper`, which has a
|
|
913
|
+
FIXED height (`--default-clickable-area`, 34px on Nextcloud 34) and a 2px
|
|
914
|
+
padding ring for the focus outline. The min-height above makes the input
|
|
915
|
+
40px, so without this the input overflowed its wrapper by 6px and the help
|
|
916
|
+
line under it, which starts at the wrapper's bottom edge, sat behind the
|
|
917
|
+
input's lower border. NcSelect grows with its content, which is why only
|
|
918
|
+
plain inputs showed it. The wrapper now takes the field height plus its
|
|
919
|
+
padding ring, so the input fits and the help line starts below it.
|
|
920
|
+
@spec openspec/changes/form-draft-on-change-and-help-text-spacing/specs/form-draft-on-change-and-help-text-spacing/spec.md#requirement-help-text-starts-below-every-input */
|
|
921
|
+
.cn-look-board .cn-form-dialog__field .input-field__main-wrapper,
|
|
922
|
+
.cn-look-board .cn-form-page__field .input-field__main-wrapper {
|
|
923
|
+
height: calc(var(--cn-field-height) + 2 * var(--border-width-input-focused, 2px));
|
|
924
|
+
}
|
|
925
|
+
|
|
877
926
|
.cn-look-board .cn-form-dialog__field textarea,
|
|
878
927
|
.cn-look-board .cn-form-page__field textarea {
|
|
879
928
|
padding: 10px 12px;
|
|
@@ -1533,6 +1582,15 @@
|
|
|
1533
1582
|
color: var(--color-main-text);
|
|
1534
1583
|
}
|
|
1535
1584
|
|
|
1585
|
+
/* A segment the page cannot open: drawn, as the boards do, but faded and inert. */
|
|
1586
|
+
.cn-look-board .cn-actions-bar--board .cn-actions-bar__view-toggle .cn-actions-bar__view-toggle-btn--disabled,
|
|
1587
|
+
.cn-look-board .cn-actions-bar--board .cn-actions-bar__view-toggle .cn-actions-bar__view-toggle-btn--disabled:hover {
|
|
1588
|
+
background: transparent !important;
|
|
1589
|
+
color: var(--color-text-maxcontrast);
|
|
1590
|
+
opacity: 0.5;
|
|
1591
|
+
cursor: not-allowed;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1536
1594
|
/* The search field: 40px, radius 8, not a pill. */
|
|
1537
1595
|
.cn-look-board .cn-actions-bar--board .cn-actions-bar__search {
|
|
1538
1596
|
flex: 1 1 260px;
|
|
@@ -1680,6 +1738,48 @@
|
|
|
1680
1738
|
border-bottom: 0;
|
|
1681
1739
|
}
|
|
1682
1740
|
|
|
1741
|
+
/* The table fits its card (screens-index-table-fit-parity). Under the auto
|
|
1742
|
+
layout every one-line cell asked for its whole text up to the 22rem cap, so
|
|
1743
|
+
seven text columns made a 1500px table in a 1118px card at a 1440px
|
|
1744
|
+
viewport: the last columns and the row menus sat past the card's edge. The
|
|
1745
|
+
fixed layout shares the card's width: the selection and menu columns keep
|
|
1746
|
+
their own width, the first data column takes 18%, the others split the
|
|
1747
|
+
rest, and a value that does not fit is cut with an ellipsis (its full text
|
|
1748
|
+
stays in the cell's tooltip). A column's own `width` still wins. */
|
|
1749
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table {
|
|
1750
|
+
table-layout: fixed;
|
|
1751
|
+
width: 100%;
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th.cn-table-head--title {
|
|
1755
|
+
width: 18%;
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
/* The board's data cells sit 12px apart (PqTickets), the first one 18px from
|
|
1759
|
+
the selection column; the selection and menu columns keep 16px. */
|
|
1760
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon),
|
|
1761
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon) {
|
|
1762
|
+
padding-inline: 12px;
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th.cn-table-head--title,
|
|
1766
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td.cn-table-col--title {
|
|
1767
|
+
padding-inline-start: 18px;
|
|
1768
|
+
}
|
|
1769
|
+
|
|
1770
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td > .cn-cell-renderer {
|
|
1771
|
+
display: block;
|
|
1772
|
+
min-width: 0;
|
|
1773
|
+
overflow: hidden;
|
|
1774
|
+
text-overflow: ellipsis;
|
|
1775
|
+
white-space: nowrap;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
/* A narrow header cuts its label, not its filter funnel. */
|
|
1779
|
+
.cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th .cn-table-header__sort:has(~ .cn-table-header__filter) {
|
|
1780
|
+
max-width: calc(100% - 26px);
|
|
1781
|
+
}
|
|
1782
|
+
|
|
1683
1783
|
/* The selection column: 28px, 18px checkboxes. */
|
|
1684
1784
|
.cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--checkbox {
|
|
1685
1785
|
box-sizing: content-box;
|
|
@@ -2371,6 +2471,25 @@
|
|
|
2371
2471
|
white-space: nowrap;
|
|
2372
2472
|
}
|
|
2373
2473
|
|
|
2474
|
+
/* The secondary line of the growing column ("2026-0004" under a case title)
|
|
2475
|
+
is a line of its own with its own ellipsis. The cell does not wrap, so in
|
|
2476
|
+
the board look, where the secondary line is an inline block (the title
|
|
2477
|
+
underline cannot reach an atomic inline box), it stayed on the title's line
|
|
2478
|
+
and ran out of the tile. A full-width float is a block (computed `display:
|
|
2479
|
+
block`) that always starts under the line before it, and, being out of the
|
|
2480
|
+
flow, the cell's underline does not reach it either. The cell is a table
|
|
2481
|
+
cell, which contains its floats, so the row grows to hold the line.
|
|
2482
|
+
@spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-the-secondary-line-of-a-narrow-tables-growing-column-sits-under-the-value */
|
|
2483
|
+
.cn-data-table.cn-data-table--fit td.cn-table-col--grow .cn-table-cell__secondary {
|
|
2484
|
+
float: inline-start;
|
|
2485
|
+
clear: both;
|
|
2486
|
+
box-sizing: border-box;
|
|
2487
|
+
width: 100%;
|
|
2488
|
+
overflow: hidden;
|
|
2489
|
+
text-overflow: ellipsis;
|
|
2490
|
+
white-space: nowrap;
|
|
2491
|
+
}
|
|
2492
|
+
|
|
2374
2493
|
.cn-data-table th {
|
|
2375
2494
|
background: var(--color-background-dark);
|
|
2376
2495
|
font-weight: 500;
|
|
@@ -3569,6 +3688,38 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
3569
3688
|
font-weight: 400;
|
|
3570
3689
|
}
|
|
3571
3690
|
|
|
3691
|
+
/* A caption on a line of its own wraps, up to two lines (DqDashboard: "haalden
|
|
3692
|
+
hun termijn, naar doorlooptijd" runs over two lines in a narrow tile). The
|
|
3693
|
+
one-line rule of `.cn-kpi-card__label` is for a caption BESIDE the number,
|
|
3694
|
+
where a second line would push the tile taller; this line has the width of
|
|
3695
|
+
the tile to itself. The clamp is safe here because the element is a plain
|
|
3696
|
+
span, not a flex row (compare the title note above).
|
|
3697
|
+
@spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-a-kpi-tiles-caption-and-board-label-wrap-to-two-lines */
|
|
3698
|
+
.cn-kpi-card--stacked .cn-kpi-card__caption-line {
|
|
3699
|
+
display: -webkit-box;
|
|
3700
|
+
-webkit-box-orient: vertical;
|
|
3701
|
+
-webkit-line-clamp: 2;
|
|
3702
|
+
line-clamp: 2;
|
|
3703
|
+
white-space: normal;
|
|
3704
|
+
overflow-wrap: break-word;
|
|
3705
|
+
}
|
|
3706
|
+
|
|
3707
|
+
/* Board look: the label wraps too, up to two lines, beside its icon badge
|
|
3708
|
+
("Afgehandeld deze maand"). The clamp sits on the label's own span
|
|
3709
|
+
(`cn-kpi-card__title-text`), not on the title row, which stays the flex row
|
|
3710
|
+
that carries the badge or the range select. */
|
|
3711
|
+
.cn-kpi-card--board .cn-kpi-card__title-text {
|
|
3712
|
+
flex: 1 1 auto;
|
|
3713
|
+
min-width: 0;
|
|
3714
|
+
display: -webkit-box;
|
|
3715
|
+
-webkit-box-orient: vertical;
|
|
3716
|
+
-webkit-line-clamp: 2;
|
|
3717
|
+
line-clamp: 2;
|
|
3718
|
+
overflow: hidden;
|
|
3719
|
+
white-space: normal;
|
|
3720
|
+
overflow-wrap: break-word;
|
|
3721
|
+
}
|
|
3722
|
+
|
|
3572
3723
|
/* The 18px glyph before the label, drawn only on a link tile. */
|
|
3573
3724
|
.cn-kpi-card--board .cn-kpi-card__title {
|
|
3574
3725
|
display: flex;
|
|
@@ -4861,6 +5012,77 @@ a.cn-kpi-card--board * {
|
|
|
4861
5012
|
color: var(--color-text-maxcontrast);
|
|
4862
5013
|
font-size: 0.9em;
|
|
4863
5014
|
}
|
|
5015
|
+
|
|
5016
|
+
/* An index page with cards beside its list (`sidePanel`,
|
|
5017
|
+
screens-index-stat-row): the header rows span the page, the toolbar and the
|
|
5018
|
+
list take the first column and the side panel the second (300px, 20px
|
|
5019
|
+
apart), spanning both. Every other child (dialogs, the inline sidebar) sits
|
|
5020
|
+
in a zero-height area after them. The list row is the flexible one, so a
|
|
5021
|
+
side panel taller than the toolbar never opens a gap under the toolbar.
|
|
5022
|
+
Below 1024px the panel moves above the toolbar. */
|
|
5023
|
+
.cn-index-page--with-side-panel {
|
|
5024
|
+
display: grid;
|
|
5025
|
+
grid-template-columns: minmax(0, 1fr) var(--cn-index-side-panel-width, 300px);
|
|
5026
|
+
grid-template-rows: auto auto auto auto minmax(0, 1fr) auto;
|
|
5027
|
+
grid-template-areas:
|
|
5028
|
+
"head head"
|
|
5029
|
+
"below below"
|
|
5030
|
+
"stats stats"
|
|
5031
|
+
"bar side"
|
|
5032
|
+
"body side"
|
|
5033
|
+
"extra extra";
|
|
5034
|
+
column-gap: 20px;
|
|
5035
|
+
align-content: start;
|
|
5036
|
+
}
|
|
5037
|
+
|
|
5038
|
+
.cn-index-page--with-side-panel > * {
|
|
5039
|
+
grid-area: extra;
|
|
5040
|
+
min-width: 0;
|
|
5041
|
+
}
|
|
5042
|
+
|
|
5043
|
+
.cn-index-page--with-side-panel > :first-child {
|
|
5044
|
+
grid-area: head;
|
|
5045
|
+
}
|
|
5046
|
+
|
|
5047
|
+
.cn-index-page--with-side-panel > .cn-index-page__below-header {
|
|
5048
|
+
grid-area: below;
|
|
5049
|
+
}
|
|
5050
|
+
|
|
5051
|
+
.cn-index-page--with-side-panel > .cn-index-page__stat-row {
|
|
5052
|
+
grid-area: stats;
|
|
5053
|
+
}
|
|
5054
|
+
|
|
5055
|
+
.cn-index-page--with-side-panel > .cn-actions-bar {
|
|
5056
|
+
grid-area: bar;
|
|
5057
|
+
}
|
|
5058
|
+
|
|
5059
|
+
.cn-index-page--with-side-panel > .cn-index-page__body {
|
|
5060
|
+
grid-area: body;
|
|
5061
|
+
}
|
|
5062
|
+
|
|
5063
|
+
.cn-index-page--with-side-panel > .cn-index-page__side-panel {
|
|
5064
|
+
grid-area: side;
|
|
5065
|
+
align-self: start;
|
|
5066
|
+
}
|
|
5067
|
+
|
|
5068
|
+
@media (max-width: 1024px) {
|
|
5069
|
+
.cn-index-page--with-side-panel {
|
|
5070
|
+
grid-template-columns: minmax(0, 1fr);
|
|
5071
|
+
grid-template-areas:
|
|
5072
|
+
"head"
|
|
5073
|
+
"below"
|
|
5074
|
+
"stats"
|
|
5075
|
+
"side"
|
|
5076
|
+
"bar"
|
|
5077
|
+
"body"
|
|
5078
|
+
"extra";
|
|
5079
|
+
grid-template-rows: auto auto auto auto auto minmax(0, 1fr) auto;
|
|
5080
|
+
}
|
|
5081
|
+
|
|
5082
|
+
.cn-index-page--with-side-panel > .cn-index-page__side-panel {
|
|
5083
|
+
margin-bottom: 20px;
|
|
5084
|
+
}
|
|
5085
|
+
}
|
|
4864
5086
|
/* CnIndexSidebar — NcAppSidebar wrapper styles */
|
|
4865
5087
|
|
|
4866
5088
|
/* Tab content: limit height to container so overflow shows a scrollbar */
|
|
@@ -5859,6 +6081,61 @@ a.cn-kpi-card--board * {
|
|
|
5859
6081
|
margin-bottom: 0;
|
|
5860
6082
|
}
|
|
5861
6083
|
|
|
6084
|
+
/* The breadcrumb is a line of 14px text between the pills and the meta, as
|
|
6085
|
+
the boards draw it (screens-detail-header-row-parity). NcBreadcrumbs grows to
|
|
6086
|
+
the full row and draws each crumb as a 34px tertiary button, which pushed the
|
|
6087
|
+
pills above it and the meta under it. The doubled class outranks its scoped
|
|
6088
|
+
rules. */
|
|
6089
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs.cn-detail-page__breadcrumbs {
|
|
6090
|
+
flex: 0 1 auto;
|
|
6091
|
+
height: auto;
|
|
6092
|
+
min-height: 0;
|
|
6093
|
+
min-width: 0;
|
|
6094
|
+
width: auto;
|
|
6095
|
+
}
|
|
6096
|
+
|
|
6097
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .breadcrumb__crumbs {
|
|
6098
|
+
gap: 8px;
|
|
6099
|
+
margin: 0;
|
|
6100
|
+
min-height: 0;
|
|
6101
|
+
padding: 0;
|
|
6102
|
+
vertical-align: middle;
|
|
6103
|
+
}
|
|
6104
|
+
|
|
6105
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb.vue-crumb {
|
|
6106
|
+
gap: 8px;
|
|
6107
|
+
height: auto;
|
|
6108
|
+
min-height: 0;
|
|
6109
|
+
min-width: 0;
|
|
6110
|
+
}
|
|
6111
|
+
|
|
6112
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue.button-vue {
|
|
6113
|
+
background: transparent;
|
|
6114
|
+
border: 0;
|
|
6115
|
+
font-size: 14px;
|
|
6116
|
+
font-weight: 400;
|
|
6117
|
+
height: auto;
|
|
6118
|
+
min-height: 0;
|
|
6119
|
+
min-width: 0;
|
|
6120
|
+
padding: 0;
|
|
6121
|
+
}
|
|
6122
|
+
|
|
6123
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue__text {
|
|
6124
|
+
font-weight: inherit;
|
|
6125
|
+
line-height: 20px;
|
|
6126
|
+
padding: 0;
|
|
6127
|
+
}
|
|
6128
|
+
|
|
6129
|
+
/* The list is the link; the record's own crumb is plain muted text. */
|
|
6130
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue[aria-current='page'] {
|
|
6131
|
+
color: var(--color-text-maxcontrast);
|
|
6132
|
+
cursor: default;
|
|
6133
|
+
}
|
|
6134
|
+
|
|
6135
|
+
.cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb__separator {
|
|
6136
|
+
margin: 0;
|
|
6137
|
+
}
|
|
6138
|
+
|
|
5862
6139
|
.cn-look-board .cn-detail-page__header-dot,
|
|
5863
6140
|
.cn-look-board .cn-detail-page__header-meta {
|
|
5864
6141
|
color: var(--color-text-maxcontrast);
|
|
@@ -6001,6 +6278,22 @@ a.cn-kpi-card--board * {
|
|
|
6001
6278
|
border-radius: 0;
|
|
6002
6279
|
}
|
|
6003
6280
|
|
|
6281
|
+
/* A tab that holds a stack (`widgetIds`, screens-relation-pages): the panel
|
|
6282
|
+
draws no frame and no padding; each widget is its own card. The first card
|
|
6283
|
+
joins the open tab (the first-card rule above), the next ones stand 20px
|
|
6284
|
+
apart, as the Overzicht of DqContact and PqOrganisatie draws them. */
|
|
6285
|
+
.cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content:has(> .cn-tab:not([hidden]) > .cn-tabs-widget__stack) {
|
|
6286
|
+
background: transparent;
|
|
6287
|
+
border: 0;
|
|
6288
|
+
border-radius: 0;
|
|
6289
|
+
padding: 0;
|
|
6290
|
+
}
|
|
6291
|
+
|
|
6292
|
+
/* The stack's next cards are whole cards, not joined to the strip. */
|
|
6293
|
+
.cn-look-board .cn-tabs--board .cn-tabs__content .cn-tab .cn-tabs-widget__stack-item .cn-widget-wrapper {
|
|
6294
|
+
border-radius: var(--cn-board-card-radius);
|
|
6295
|
+
}
|
|
6296
|
+
|
|
6004
6297
|
/* ---- Body cards and side cards ----------------------------------------- */
|
|
6005
6298
|
|
|
6006
6299
|
.cn-look-board .cn-detail-page .cn-widget-wrapper,
|
|
@@ -6080,6 +6373,12 @@ a.cn-kpi-card--board * {
|
|
|
6080
6373
|
display: none;
|
|
6081
6374
|
}
|
|
6082
6375
|
|
|
6376
|
+
/* A side card whose widget reports a header action (screens-relation-pages:
|
|
6377
|
+
the "+ Toevoegen" of Contactkanalen and Relaties) keeps that one button. */
|
|
6378
|
+
.cn-look-board .cn-detail-page__side .cn-widget-wrapper__actions:has(.cn-detail-page__catalog-action) {
|
|
6379
|
+
display: flex;
|
|
6380
|
+
}
|
|
6381
|
+
|
|
6083
6382
|
/* The notice at the top of the side column: radius 12, padding 14px 16px. */
|
|
6084
6383
|
.cn-look-board .cn-detail-page__side-item--notice .cn-widget-wrapper,
|
|
6085
6384
|
.cn-look-board .cn-detail-page__side-item--notice .cn-banner-widget,
|
|
@@ -9447,6 +9746,77 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9447
9746
|
.cn-cell-renderer__age[data-v-37d7b88f] {
|
|
9448
9747
|
white-space: nowrap;
|
|
9449
9748
|
}
|
|
9749
|
+
|
|
9750
|
+
/* The progress cell (abstract-progress-cell): a 56 x 8 bar, the percentage
|
|
9751
|
+
8px beside it in the bar's tone, and an optional age badge after them, as
|
|
9752
|
+
PqLeads' Winkans column. The value is bold, so the tone is not the only signal. */
|
|
9753
|
+
.cn-cell-renderer__progress[data-v-37d7b88f] {
|
|
9754
|
+
display: inline-flex;
|
|
9755
|
+
flex-wrap: wrap;
|
|
9756
|
+
align-items: center;
|
|
9757
|
+
gap: 4px 8px;
|
|
9758
|
+
}
|
|
9759
|
+
.cn-cell-renderer__progress-line[data-v-37d7b88f] {
|
|
9760
|
+
display: inline-flex;
|
|
9761
|
+
align-items: center;
|
|
9762
|
+
gap: 8px;
|
|
9763
|
+
white-space: nowrap;
|
|
9764
|
+
}
|
|
9765
|
+
.cn-cell-renderer__progress-bar[data-v-37d7b88f] {
|
|
9766
|
+
display: inline-block;
|
|
9767
|
+
width: 56px;
|
|
9768
|
+
height: 8px;
|
|
9769
|
+
border-radius: 4px;
|
|
9770
|
+
background: var(--color-background-dark);
|
|
9771
|
+
overflow: hidden;
|
|
9772
|
+
}
|
|
9773
|
+
.cn-cell-renderer__progress-fill[data-v-37d7b88f] {
|
|
9774
|
+
display: block;
|
|
9775
|
+
height: 100%;
|
|
9776
|
+
}
|
|
9777
|
+
.cn-cell-renderer__progress-fill--success[data-v-37d7b88f] {
|
|
9778
|
+
background: var(--color-element-success, var(--color-success));
|
|
9779
|
+
}
|
|
9780
|
+
.cn-cell-renderer__progress-fill--warning[data-v-37d7b88f] {
|
|
9781
|
+
background: var(--color-element-warning, var(--color-warning));
|
|
9782
|
+
}
|
|
9783
|
+
.cn-cell-renderer__progress-fill--error[data-v-37d7b88f] {
|
|
9784
|
+
background: var(--color-element-error, var(--color-error));
|
|
9785
|
+
}
|
|
9786
|
+
.cn-cell-renderer__progress-value[data-v-37d7b88f] {
|
|
9787
|
+
font-size: 14px;
|
|
9788
|
+
font-weight: 700;
|
|
9789
|
+
}
|
|
9790
|
+
.cn-cell-renderer__progress-value--success[data-v-37d7b88f] {
|
|
9791
|
+
color: var(--color-text-success, var(--color-success-text));
|
|
9792
|
+
}
|
|
9793
|
+
.cn-cell-renderer__progress-value--warning[data-v-37d7b88f] {
|
|
9794
|
+
color: var(--color-text-warning, var(--color-warning-text));
|
|
9795
|
+
}
|
|
9796
|
+
.cn-cell-renderer__progress-value--error[data-v-37d7b88f] {
|
|
9797
|
+
color: var(--color-text-error, var(--color-error-text));
|
|
9798
|
+
}
|
|
9799
|
+
.cn-cell-renderer__progress-badge[data-v-37d7b88f] {
|
|
9800
|
+
display: inline-block;
|
|
9801
|
+
padding: 3px 10px;
|
|
9802
|
+
border-radius: 12px;
|
|
9803
|
+
font-size: 13px;
|
|
9804
|
+
font-weight: 600;
|
|
9805
|
+
white-space: nowrap;
|
|
9806
|
+
}
|
|
9807
|
+
.cn-cell-renderer__progress-badge--error[data-v-37d7b88f] {
|
|
9808
|
+
color: var(--color-text-error, var(--color-error-text));
|
|
9809
|
+
background: var(--color-error-hover, var(--color-background-dark));
|
|
9810
|
+
background: color-mix(in srgb, var(--color-error) 12%, transparent);
|
|
9811
|
+
}
|
|
9812
|
+
.cn-cell-renderer__progress-badge--warning[data-v-37d7b88f] {
|
|
9813
|
+
color: var(--color-text-warning, var(--color-warning-text));
|
|
9814
|
+
background: color-mix(in srgb, var(--color-warning) 14%, transparent);
|
|
9815
|
+
}
|
|
9816
|
+
.cn-cell-renderer__progress-badge--success[data-v-37d7b88f] {
|
|
9817
|
+
color: var(--color-text-success, var(--color-success-text));
|
|
9818
|
+
background: color-mix(in srgb, var(--color-success) 12%, transparent);
|
|
9819
|
+
}
|
|
9450
9820
|
.cn-cell-renderer__age--success[data-v-37d7b88f] {
|
|
9451
9821
|
color: var(--color-text-success, var(--color-success-text));
|
|
9452
9822
|
}
|
|
@@ -9779,6 +10149,25 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9779
10149
|
white-space: nowrap;
|
|
9780
10150
|
}
|
|
9781
10151
|
|
|
10152
|
+
/* The secondary line of the growing column ("2026-0004" under a case title)
|
|
10153
|
+
is a line of its own with its own ellipsis. The cell does not wrap, so in
|
|
10154
|
+
the board look, where the secondary line is an inline block (the title
|
|
10155
|
+
underline cannot reach an atomic inline box), it stayed on the title's line
|
|
10156
|
+
and ran out of the tile. A full-width float is a block (computed `display:
|
|
10157
|
+
block`) that always starts under the line before it, and, being out of the
|
|
10158
|
+
flow, the cell's underline does not reach it either. The cell is a table
|
|
10159
|
+
cell, which contains its floats, so the row grows to hold the line.
|
|
10160
|
+
@spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-the-secondary-line-of-a-narrow-tables-growing-column-sits-under-the-value */
|
|
10161
|
+
.cn-data-table.cn-data-table--fit td.cn-table-col--grow .cn-table-cell__secondary {
|
|
10162
|
+
float: inline-start;
|
|
10163
|
+
clear: both;
|
|
10164
|
+
box-sizing: border-box;
|
|
10165
|
+
width: 100%;
|
|
10166
|
+
overflow: hidden;
|
|
10167
|
+
text-overflow: ellipsis;
|
|
10168
|
+
white-space: nowrap;
|
|
10169
|
+
}
|
|
10170
|
+
|
|
9782
10171
|
.cn-data-table th {
|
|
9783
10172
|
background: var(--color-background-dark);
|
|
9784
10173
|
font-weight: 500;
|
|
@@ -21210,6 +21599,38 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
21210
21599
|
font-weight: 400;
|
|
21211
21600
|
}
|
|
21212
21601
|
|
|
21602
|
+
/* A caption on a line of its own wraps, up to two lines (DqDashboard: "haalden
|
|
21603
|
+
hun termijn, naar doorlooptijd" runs over two lines in a narrow tile). The
|
|
21604
|
+
one-line rule of `.cn-kpi-card__label` is for a caption BESIDE the number,
|
|
21605
|
+
where a second line would push the tile taller; this line has the width of
|
|
21606
|
+
the tile to itself. The clamp is safe here because the element is a plain
|
|
21607
|
+
span, not a flex row (compare the title note above).
|
|
21608
|
+
@spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-a-kpi-tiles-caption-and-board-label-wrap-to-two-lines */
|
|
21609
|
+
.cn-kpi-card--stacked .cn-kpi-card__caption-line {
|
|
21610
|
+
display: -webkit-box;
|
|
21611
|
+
-webkit-box-orient: vertical;
|
|
21612
|
+
-webkit-line-clamp: 2;
|
|
21613
|
+
line-clamp: 2;
|
|
21614
|
+
white-space: normal;
|
|
21615
|
+
overflow-wrap: break-word;
|
|
21616
|
+
}
|
|
21617
|
+
|
|
21618
|
+
/* Board look: the label wraps too, up to two lines, beside its icon badge
|
|
21619
|
+
("Afgehandeld deze maand"). The clamp sits on the label's own span
|
|
21620
|
+
(`cn-kpi-card__title-text`), not on the title row, which stays the flex row
|
|
21621
|
+
that carries the badge or the range select. */
|
|
21622
|
+
.cn-kpi-card--board .cn-kpi-card__title-text {
|
|
21623
|
+
flex: 1 1 auto;
|
|
21624
|
+
min-width: 0;
|
|
21625
|
+
display: -webkit-box;
|
|
21626
|
+
-webkit-box-orient: vertical;
|
|
21627
|
+
-webkit-line-clamp: 2;
|
|
21628
|
+
line-clamp: 2;
|
|
21629
|
+
overflow: hidden;
|
|
21630
|
+
white-space: normal;
|
|
21631
|
+
overflow-wrap: break-word;
|
|
21632
|
+
}
|
|
21633
|
+
|
|
21213
21634
|
/* The 18px glyph before the label, drawn only on a link tile. */
|
|
21214
21635
|
.cn-kpi-card--board .cn-kpi-card__title {
|
|
21215
21636
|
display: flex;
|
|
@@ -23239,6 +23660,27 @@ button.cn-stepper__step[data-v-19697746] {
|
|
|
23239
23660
|
}
|
|
23240
23661
|
|
|
23241
23662
|
|
|
23663
|
+
.cn-detail-page__catalog-action[data-v-76c1b60f] {
|
|
23664
|
+
align-items: center;
|
|
23665
|
+
background: var(--color-primary-element-light);
|
|
23666
|
+
border: 0;
|
|
23667
|
+
border-radius: 16px;
|
|
23668
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
23669
|
+
cursor: pointer;
|
|
23670
|
+
display: inline-flex;
|
|
23671
|
+
font: inherit;
|
|
23672
|
+
font-size: 13px;
|
|
23673
|
+
font-weight: 700;
|
|
23674
|
+
gap: 6px;
|
|
23675
|
+
min-height: 32px;
|
|
23676
|
+
padding: 0 14px;
|
|
23677
|
+
white-space: nowrap;
|
|
23678
|
+
}
|
|
23679
|
+
.cn-detail-page__catalog-note[data-v-76c1b60f] {
|
|
23680
|
+
color: var(--color-text-maxcontrast);
|
|
23681
|
+
font-size: 14px;
|
|
23682
|
+
white-space: nowrap;
|
|
23683
|
+
}
|
|
23242
23684
|
.cn-detail-widget-host[data-v-76c1b60f],
|
|
23243
23685
|
.cn-detail-widget-host[data-v-76c1b60f] > * {
|
|
23244
23686
|
height: 100%;
|
|
@@ -23528,6 +23970,13 @@ button.cn-stepper__step[data-v-19697746] {
|
|
|
23528
23970
|
}
|
|
23529
23971
|
|
|
23530
23972
|
|
|
23973
|
+
/* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
|
|
23974
|
+
.cn-tabs-widget__stack[data-v-1dbd6122] {
|
|
23975
|
+
display: flex;
|
|
23976
|
+
flex-direction: column;
|
|
23977
|
+
gap: 20px;
|
|
23978
|
+
}
|
|
23979
|
+
|
|
23531
23980
|
/* The panel is the card; the strip is not inside it. There is no title bar
|
|
23532
23981
|
above the tabs either: the open tab names the panel, so a title row would
|
|
23533
23982
|
say the same thing twice and cost a row of height on a card that is mostly
|
|
@@ -27610,6 +28059,441 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
|
|
|
27610
28059
|
}
|
|
27611
28060
|
|
|
27612
28061
|
|
|
28062
|
+
.cn-sections-widget[data-v-ea4f8722] {
|
|
28063
|
+
min-width: 0;
|
|
28064
|
+
}
|
|
28065
|
+
.cn-sections-widget__column[data-v-ea4f8722] {
|
|
28066
|
+
display: flex;
|
|
28067
|
+
flex-direction: column;
|
|
28068
|
+
gap: calc(var(--default-grid-baseline, 4px) * 4);
|
|
28069
|
+
min-width: 0;
|
|
28070
|
+
}
|
|
28071
|
+
|
|
28072
|
+
/* A main and a side column (the settings boards: 1fr and 418px, 20px apart). */
|
|
28073
|
+
.cn-sections-widget--two-column[data-v-ea4f8722] {
|
|
28074
|
+
display: grid;
|
|
28075
|
+
grid-template-columns: minmax(0, 1fr) minmax(280px, 418px);
|
|
28076
|
+
gap: 20px;
|
|
28077
|
+
align-items: start;
|
|
28078
|
+
}
|
|
28079
|
+
@media (max-width: 1024px) {
|
|
28080
|
+
.cn-sections-widget--two-column[data-v-ea4f8722] {
|
|
28081
|
+
grid-template-columns: minmax(0, 1fr);
|
|
28082
|
+
}
|
|
28083
|
+
}
|
|
28084
|
+
|
|
28085
|
+
/* A host page may space every <section>; these sections are spaced by the column gap only. */
|
|
28086
|
+
.cn-sections-widget__section[data-v-ea4f8722] {
|
|
28087
|
+
margin: 0;
|
|
28088
|
+
min-width: 0;
|
|
28089
|
+
}
|
|
28090
|
+
|
|
28091
|
+
/* A rule above a section that follows a shown one. */
|
|
28092
|
+
.cn-sections-widget:not(.cn-sections-widget--cards) .cn-sections-widget__section:not(.cn-sections-widget__section--empty) ~ .cn-sections-widget__section[data-v-ea4f8722] {
|
|
28093
|
+
padding-top: calc(var(--default-grid-baseline, 4px) * 4);
|
|
28094
|
+
border-top: 1px solid var(--color-border);
|
|
28095
|
+
}
|
|
28096
|
+
|
|
28097
|
+
/*
|
|
28098
|
+
* An empty section keeps its host mounted (display: none still mounts it, so
|
|
28099
|
+
* the widget fetches and can fill later) but takes no space, gap or rule.
|
|
28100
|
+
*/
|
|
28101
|
+
.cn-sections-widget__section--empty[data-v-ea4f8722] {
|
|
28102
|
+
display: none;
|
|
28103
|
+
}
|
|
28104
|
+
.cn-sections-widget__heading[data-v-ea4f8722] {
|
|
28105
|
+
margin: 0 0 calc(var(--default-grid-baseline, 4px) * 2);
|
|
28106
|
+
font-size: 16px;
|
|
28107
|
+
font-weight: 600;
|
|
28108
|
+
color: var(--color-main-text);
|
|
28109
|
+
}
|
|
28110
|
+
.cn-sections-widget__description[data-v-ea4f8722] {
|
|
28111
|
+
margin: calc(var(--default-grid-baseline, 4px) * -1) 0 calc(var(--default-grid-baseline, 4px) * 3);
|
|
28112
|
+
color: var(--color-text-maxcontrast);
|
|
28113
|
+
}
|
|
28114
|
+
|
|
28115
|
+
/* One card per section. */
|
|
28116
|
+
.cn-sections-widget--cards .cn-sections-widget__column[data-v-ea4f8722] {
|
|
28117
|
+
gap: 20px;
|
|
28118
|
+
}
|
|
28119
|
+
.cn-sections-widget--cards .cn-sections-widget__section[data-v-ea4f8722] {
|
|
28120
|
+
background: var(--color-main-background);
|
|
28121
|
+
border: 1px solid var(--color-border);
|
|
28122
|
+
border-radius: var(--cn-board-card-radius, var(--border-radius-large, 12px));
|
|
28123
|
+
padding: var(--cn-board-card-padding, 16px 20px);
|
|
28124
|
+
}
|
|
28125
|
+
.cn-sections-widget--cards .cn-sections-widget__heading[data-v-ea4f8722] {
|
|
28126
|
+
font-size: 18px;
|
|
28127
|
+
margin-bottom: 12px;
|
|
28128
|
+
}
|
|
28129
|
+
|
|
28130
|
+
|
|
28131
|
+
.cn-facts-widget[data-v-2ca63011] {
|
|
28132
|
+
display: flex;
|
|
28133
|
+
flex-direction: column;
|
|
28134
|
+
gap: 10px;
|
|
28135
|
+
min-width: 0;
|
|
28136
|
+
}
|
|
28137
|
+
.cn-facts-widget__rows[data-v-2ca63011] {
|
|
28138
|
+
display: grid;
|
|
28139
|
+
grid-template-columns: max-content 1fr;
|
|
28140
|
+
gap: 8px 16px;
|
|
28141
|
+
margin: 0;
|
|
28142
|
+
font-size: 14px;
|
|
28143
|
+
}
|
|
28144
|
+
|
|
28145
|
+
/* Each row is a grid of its own children: the wrapper takes no box. */
|
|
28146
|
+
.cn-facts-widget__row[data-v-2ca63011] {
|
|
28147
|
+
display: contents;
|
|
28148
|
+
}
|
|
28149
|
+
.cn-facts-widget__label[data-v-2ca63011] {
|
|
28150
|
+
color: var(--color-text-maxcontrast);
|
|
28151
|
+
}
|
|
28152
|
+
.cn-facts-widget__value[data-v-2ca63011] {
|
|
28153
|
+
margin: 0;
|
|
28154
|
+
font-weight: 500;
|
|
28155
|
+
min-width: 0;
|
|
28156
|
+
overflow-wrap: anywhere;
|
|
28157
|
+
}
|
|
28158
|
+
.cn-facts-widget__title[data-v-2ca63011] {
|
|
28159
|
+
font-size: 15px;
|
|
28160
|
+
font-weight: 600;
|
|
28161
|
+
color: var(--color-main-text);
|
|
28162
|
+
}
|
|
28163
|
+
.cn-facts-widget__line[data-v-2ca63011] {
|
|
28164
|
+
font-size: 13px;
|
|
28165
|
+
color: var(--color-text-maxcontrast);
|
|
28166
|
+
}
|
|
28167
|
+
.cn-facts-widget__muted[data-v-2ca63011] {
|
|
28168
|
+
margin: 0;
|
|
28169
|
+
color: var(--color-text-maxcontrast);
|
|
28170
|
+
}
|
|
28171
|
+
.cn-facts-widget__label .hidden-visually[data-v-2ca63011] {
|
|
28172
|
+
clip-path: inset(50%);
|
|
28173
|
+
height: 1px;
|
|
28174
|
+
overflow: hidden;
|
|
28175
|
+
position: absolute;
|
|
28176
|
+
white-space: nowrap;
|
|
28177
|
+
width: 1px;
|
|
28178
|
+
}
|
|
28179
|
+
.cn-facts-widget__label--icon[data-v-2ca63011] {
|
|
28180
|
+
align-items: center;
|
|
28181
|
+
display: flex;
|
|
28182
|
+
}
|
|
28183
|
+
.cn-facts-widget__value-link[data-v-2ca63011] {
|
|
28184
|
+
color: var(--color-primary-element);
|
|
28185
|
+
text-decoration: underline;
|
|
28186
|
+
}
|
|
28187
|
+
.cn-facts-widget__inline-button[data-v-2ca63011],
|
|
28188
|
+
.cn-facts-widget__icon-button[data-v-2ca63011],
|
|
28189
|
+
.cn-facts-widget__action[data-v-2ca63011] {
|
|
28190
|
+
align-items: center;
|
|
28191
|
+
cursor: pointer;
|
|
28192
|
+
display: inline-flex;
|
|
28193
|
+
font: inherit;
|
|
28194
|
+
}
|
|
28195
|
+
.cn-facts-widget__inline-button[data-v-2ca63011] {
|
|
28196
|
+
background: var(--color-main-background);
|
|
28197
|
+
border: 1px solid var(--color-border-dark);
|
|
28198
|
+
border-radius: 16px;
|
|
28199
|
+
font-size: 13px;
|
|
28200
|
+
font-weight: 600;
|
|
28201
|
+
gap: 4px;
|
|
28202
|
+
margin-inline-start: 8px;
|
|
28203
|
+
min-height: 28px;
|
|
28204
|
+
padding: 0 10px;
|
|
28205
|
+
}
|
|
28206
|
+
.cn-facts-widget__icon-button[data-v-2ca63011] {
|
|
28207
|
+
background: transparent;
|
|
28208
|
+
border: 0;
|
|
28209
|
+
border-radius: 6px;
|
|
28210
|
+
color: var(--color-text-maxcontrast);
|
|
28211
|
+
margin-inline-start: 4px;
|
|
28212
|
+
padding: 2px;
|
|
28213
|
+
vertical-align: middle;
|
|
28214
|
+
}
|
|
28215
|
+
.cn-facts-widget__icon-button[data-v-2ca63011]:hover,
|
|
28216
|
+
.cn-facts-widget__icon-button[data-v-2ca63011]:focus-visible {
|
|
28217
|
+
background: var(--color-background-hover);
|
|
28218
|
+
color: var(--color-main-text);
|
|
28219
|
+
}
|
|
28220
|
+
.cn-facts-widget__text[data-v-2ca63011] {
|
|
28221
|
+
color: var(--color-main-text);
|
|
28222
|
+
font-size: 15px;
|
|
28223
|
+
}
|
|
28224
|
+
|
|
28225
|
+
/* A lead: an icon tile or initials beside a bold title and a muted subtitle. */
|
|
28226
|
+
.cn-facts-widget__lead[data-v-2ca63011] {
|
|
28227
|
+
align-items: center;
|
|
28228
|
+
display: flex;
|
|
28229
|
+
gap: 12px;
|
|
28230
|
+
}
|
|
28231
|
+
.cn-facts-widget__lead-tile[data-v-2ca63011] {
|
|
28232
|
+
align-items: center;
|
|
28233
|
+
background: var(--color-background-dark);
|
|
28234
|
+
border-radius: 8px;
|
|
28235
|
+
color: var(--color-main-text);
|
|
28236
|
+
display: flex;
|
|
28237
|
+
flex: none;
|
|
28238
|
+
font-size: 14px;
|
|
28239
|
+
font-weight: 700;
|
|
28240
|
+
height: 40px;
|
|
28241
|
+
justify-content: center;
|
|
28242
|
+
width: 40px;
|
|
28243
|
+
}
|
|
28244
|
+
.cn-facts-widget__lead-tile--success[data-v-2ca63011] {
|
|
28245
|
+
background: color-mix(in srgb, var(--color-success) 14%, var(--color-main-background));
|
|
28246
|
+
border-radius: 50%;
|
|
28247
|
+
color: var(--color-success-text, var(--color-success));
|
|
28248
|
+
}
|
|
28249
|
+
.cn-facts-widget__lead-tile--info[data-v-2ca63011] {
|
|
28250
|
+
background: var(--color-primary-element-light);
|
|
28251
|
+
border-radius: 50%;
|
|
28252
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
28253
|
+
}
|
|
28254
|
+
.cn-facts-widget__lead-text[data-v-2ca63011] {
|
|
28255
|
+
display: flex;
|
|
28256
|
+
flex-direction: column;
|
|
28257
|
+
min-width: 0;
|
|
28258
|
+
}
|
|
28259
|
+
.cn-facts-widget__lead-title[data-v-2ca63011] {
|
|
28260
|
+
font-size: 15px;
|
|
28261
|
+
}
|
|
28262
|
+
.cn-facts-widget__lead-subtitle[data-v-2ca63011] {
|
|
28263
|
+
color: var(--color-text-maxcontrast);
|
|
28264
|
+
font-size: 13px;
|
|
28265
|
+
}
|
|
28266
|
+
.cn-facts-widget__action[data-v-2ca63011] {
|
|
28267
|
+
align-self: flex-start;
|
|
28268
|
+
background: var(--color-primary-element-light);
|
|
28269
|
+
border: 0;
|
|
28270
|
+
border-radius: 16px;
|
|
28271
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
28272
|
+
font-size: 13px;
|
|
28273
|
+
font-weight: 700;
|
|
28274
|
+
gap: 6px;
|
|
28275
|
+
min-height: 32px;
|
|
28276
|
+
padding: 0 14px;
|
|
28277
|
+
}
|
|
28278
|
+
.cn-facts-widget__action[data-v-2ca63011]:hover,
|
|
28279
|
+
.cn-facts-widget__action[data-v-2ca63011]:focus-visible {
|
|
28280
|
+
background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
|
|
28281
|
+
}
|
|
28282
|
+
.cn-facts-widget__link[data-v-2ca63011] {
|
|
28283
|
+
font-size: 14px;
|
|
28284
|
+
font-weight: 600;
|
|
28285
|
+
color: var(--color-primary-element);
|
|
28286
|
+
text-decoration: underline;
|
|
28287
|
+
}
|
|
28288
|
+
|
|
28289
|
+
|
|
28290
|
+
.cn-field-list-widget[data-v-0f29a833] {
|
|
28291
|
+
display: flex;
|
|
28292
|
+
flex-direction: column;
|
|
28293
|
+
gap: 12px;
|
|
28294
|
+
min-width: 0;
|
|
28295
|
+
}
|
|
28296
|
+
.cn-field-list-widget__rows[data-v-0f29a833] {
|
|
28297
|
+
list-style: none;
|
|
28298
|
+
margin: 0;
|
|
28299
|
+
padding: 0;
|
|
28300
|
+
display: flex;
|
|
28301
|
+
flex-direction: column;
|
|
28302
|
+
}
|
|
28303
|
+
.cn-field-list-widget__row[data-v-0f29a833] {
|
|
28304
|
+
padding: 10px 0;
|
|
28305
|
+
border-top: 1px solid var(--color-border);
|
|
28306
|
+
}
|
|
28307
|
+
.cn-field-list-widget__row[data-v-0f29a833]:first-child {
|
|
28308
|
+
border-top: none;
|
|
28309
|
+
padding-top: 0;
|
|
28310
|
+
}
|
|
28311
|
+
.cn-field-list-widget__line[data-v-0f29a833] {
|
|
28312
|
+
display: flex;
|
|
28313
|
+
align-items: center;
|
|
28314
|
+
gap: 12px;
|
|
28315
|
+
min-width: 0;
|
|
28316
|
+
}
|
|
28317
|
+
.cn-field-list-widget__avatar[data-v-0f29a833] {
|
|
28318
|
+
flex: 0 0 auto;
|
|
28319
|
+
display: inline-flex;
|
|
28320
|
+
align-items: center;
|
|
28321
|
+
justify-content: center;
|
|
28322
|
+
width: 32px;
|
|
28323
|
+
height: 32px;
|
|
28324
|
+
border-radius: 50%;
|
|
28325
|
+
background: var(--color-primary-element-light);
|
|
28326
|
+
color: var(--color-primary-element-light-text, var(--color-main-text));
|
|
28327
|
+
font-size: 12px;
|
|
28328
|
+
font-weight: 700;
|
|
28329
|
+
}
|
|
28330
|
+
.cn-field-list-widget__main[data-v-0f29a833] {
|
|
28331
|
+
display: flex;
|
|
28332
|
+
flex-direction: column;
|
|
28333
|
+
flex: 1 1 auto;
|
|
28334
|
+
min-width: 0;
|
|
28335
|
+
}
|
|
28336
|
+
.cn-field-list-widget__title[data-v-0f29a833] {
|
|
28337
|
+
font-weight: 600;
|
|
28338
|
+
overflow-wrap: anywhere;
|
|
28339
|
+
}
|
|
28340
|
+
.cn-field-list-widget__meta[data-v-0f29a833],
|
|
28341
|
+
.cn-field-list-widget__aside[data-v-0f29a833],
|
|
28342
|
+
.cn-field-list-widget__detail[data-v-0f29a833],
|
|
28343
|
+
.cn-field-list-widget__hint[data-v-0f29a833],
|
|
28344
|
+
.cn-field-list-widget__empty[data-v-0f29a833] {
|
|
28345
|
+
color: var(--color-text-maxcontrast);
|
|
28346
|
+
}
|
|
28347
|
+
.cn-field-list-widget__meta[data-v-0f29a833],
|
|
28348
|
+
.cn-field-list-widget__aside[data-v-0f29a833],
|
|
28349
|
+
.cn-field-list-widget__detail[data-v-0f29a833] {
|
|
28350
|
+
font-size: 13px;
|
|
28351
|
+
}
|
|
28352
|
+
.cn-field-list-widget__aside[data-v-0f29a833] {
|
|
28353
|
+
white-space: nowrap;
|
|
28354
|
+
}
|
|
28355
|
+
.cn-field-list-widget__detail[data-v-0f29a833],
|
|
28356
|
+
.cn-field-list-widget__hint[data-v-0f29a833],
|
|
28357
|
+
.cn-field-list-widget__empty[data-v-0f29a833] {
|
|
28358
|
+
margin: 4px 0 0;
|
|
28359
|
+
overflow-wrap: anywhere;
|
|
28360
|
+
}
|
|
28361
|
+
.cn-field-list-widget__add[data-v-0f29a833] {
|
|
28362
|
+
display: flex;
|
|
28363
|
+
flex-wrap: wrap;
|
|
28364
|
+
align-items: flex-end;
|
|
28365
|
+
gap: 8px 12px;
|
|
28366
|
+
}
|
|
28367
|
+
.cn-field-list-widget__add[data-v-0f29a833] > * {
|
|
28368
|
+
flex: 1 1 180px;
|
|
28369
|
+
}
|
|
28370
|
+
.cn-field-list-widget__add > button[data-v-0f29a833] {
|
|
28371
|
+
flex: 0 0 auto;
|
|
28372
|
+
}
|
|
28373
|
+
|
|
28374
|
+
|
|
28375
|
+
.cn-record-list__list[data-v-7073b362] {
|
|
28376
|
+
list-style: none;
|
|
28377
|
+
margin: 0;
|
|
28378
|
+
padding: 0;
|
|
28379
|
+
}
|
|
28380
|
+
.cn-record-list__empty[data-v-7073b362],
|
|
28381
|
+
.cn-record-list__error[data-v-7073b362] {
|
|
28382
|
+
color: var(--color-text-maxcontrast);
|
|
28383
|
+
margin: 0;
|
|
28384
|
+
}
|
|
28385
|
+
.cn-record-list__loading[data-v-7073b362] {
|
|
28386
|
+
display: flex;
|
|
28387
|
+
justify-content: center;
|
|
28388
|
+
padding: 8px 0;
|
|
28389
|
+
}
|
|
28390
|
+
|
|
28391
|
+
/* rows */
|
|
28392
|
+
.cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-7073b362] {
|
|
28393
|
+
border-top: 1px solid var(--color-border);
|
|
28394
|
+
}
|
|
28395
|
+
.cn-record-list__row[data-v-7073b362] {
|
|
28396
|
+
align-items: center;
|
|
28397
|
+
color: var(--color-main-text);
|
|
28398
|
+
display: flex;
|
|
28399
|
+
gap: 16px;
|
|
28400
|
+
padding: 12px 0;
|
|
28401
|
+
text-decoration: none;
|
|
28402
|
+
}
|
|
28403
|
+
.cn-record-list__row--link:hover .cn-record-list__title[data-v-7073b362],
|
|
28404
|
+
.cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-7073b362] {
|
|
28405
|
+
text-decoration: underline;
|
|
28406
|
+
}
|
|
28407
|
+
.cn-record-list__main[data-v-7073b362] {
|
|
28408
|
+
display: flex;
|
|
28409
|
+
flex: 1 1 auto;
|
|
28410
|
+
flex-direction: column;
|
|
28411
|
+
gap: 2px;
|
|
28412
|
+
min-width: 0;
|
|
28413
|
+
}
|
|
28414
|
+
.cn-record-list__title[data-v-7073b362] {
|
|
28415
|
+
font-size: 15px;
|
|
28416
|
+
font-weight: 700;
|
|
28417
|
+
}
|
|
28418
|
+
.cn-record-list__meta[data-v-7073b362] {
|
|
28419
|
+
color: var(--color-text-maxcontrast);
|
|
28420
|
+
font-size: 13px;
|
|
28421
|
+
}
|
|
28422
|
+
.cn-record-list__aside[data-v-7073b362] {
|
|
28423
|
+
align-items: center;
|
|
28424
|
+
display: flex;
|
|
28425
|
+
flex: none;
|
|
28426
|
+
gap: 16px;
|
|
28427
|
+
}
|
|
28428
|
+
.cn-record-list__trailing[data-v-7073b362] {
|
|
28429
|
+
font-size: 14px;
|
|
28430
|
+
white-space: nowrap;
|
|
28431
|
+
}
|
|
28432
|
+
.cn-record-list__chevron[data-v-7073b362] {
|
|
28433
|
+
color: var(--color-text-maxcontrast);
|
|
28434
|
+
flex: none;
|
|
28435
|
+
}
|
|
28436
|
+
|
|
28437
|
+
/* feed */
|
|
28438
|
+
.cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-7073b362] {
|
|
28439
|
+
border-top: 1px solid var(--color-border);
|
|
28440
|
+
}
|
|
28441
|
+
.cn-record-list__feed-row[data-v-7073b362] {
|
|
28442
|
+
align-items: flex-start;
|
|
28443
|
+
display: flex;
|
|
28444
|
+
gap: 14px;
|
|
28445
|
+
padding: 12px 0;
|
|
28446
|
+
}
|
|
28447
|
+
.cn-record-list__feed-icon[data-v-7073b362] {
|
|
28448
|
+
align-items: center;
|
|
28449
|
+
background: var(--color-primary-element-light);
|
|
28450
|
+
border-radius: 50%;
|
|
28451
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
28452
|
+
display: flex;
|
|
28453
|
+
flex: none;
|
|
28454
|
+
height: 36px;
|
|
28455
|
+
justify-content: center;
|
|
28456
|
+
width: 36px;
|
|
28457
|
+
}
|
|
28458
|
+
.cn-record-list__text[data-v-7073b362] {
|
|
28459
|
+
font-size: 15px;
|
|
28460
|
+
}
|
|
28461
|
+
.cn-record-list--feed .cn-record-list__main[data-v-7073b362] {
|
|
28462
|
+
color: var(--color-main-text);
|
|
28463
|
+
text-decoration: none;
|
|
28464
|
+
}
|
|
28465
|
+
|
|
28466
|
+
/* inline */
|
|
28467
|
+
.cn-record-list__inline-row[data-v-7073b362] {
|
|
28468
|
+
padding: 4px 0;
|
|
28469
|
+
}
|
|
28470
|
+
.cn-record-list__label[data-v-7073b362] {
|
|
28471
|
+
margin-inline-end: 4px;
|
|
28472
|
+
}
|
|
28473
|
+
.cn-record-list__inline-title[data-v-7073b362] {
|
|
28474
|
+
color: var(--color-main-text);
|
|
28475
|
+
}
|
|
28476
|
+
a.cn-record-list__inline-title[data-v-7073b362] {
|
|
28477
|
+
color: var(--color-primary-element);
|
|
28478
|
+
text-decoration: underline;
|
|
28479
|
+
}
|
|
28480
|
+
|
|
28481
|
+
|
|
28482
|
+
/* In a narrow side column a row stacks: title, meta, then pill and date. */
|
|
28483
|
+
.cn-detail-page__side .cn-record-list__row {
|
|
28484
|
+
align-items: flex-start;
|
|
28485
|
+
flex-direction: column;
|
|
28486
|
+
gap: 6px;
|
|
28487
|
+
}
|
|
28488
|
+
.cn-detail-page__side .cn-record-list__row .cn-record-list__title {
|
|
28489
|
+
color: var(--color-primary-element);
|
|
28490
|
+
text-decoration: underline;
|
|
28491
|
+
}
|
|
28492
|
+
.cn-detail-page__side .cn-record-list__chevron {
|
|
28493
|
+
display: none;
|
|
28494
|
+
}
|
|
28495
|
+
|
|
28496
|
+
|
|
27613
28497
|
.cn-notepad-widget-form[data-v-c752df66] {
|
|
27614
28498
|
display: flex;
|
|
27615
28499
|
flex-direction: column;
|
|
@@ -27920,6 +28804,40 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
|
|
|
27920
28804
|
flex-direction: column;
|
|
27921
28805
|
gap: 2px;
|
|
27922
28806
|
}
|
|
28807
|
+
|
|
28808
|
+
/* The start card: text left, control (and link) right, as PqDashboard's "Contact starten". */
|
|
28809
|
+
.cn-workspace-filter-widget--start[data-v-f0d5c1c6] {
|
|
28810
|
+
flex-direction: row;
|
|
28811
|
+
flex-wrap: wrap;
|
|
28812
|
+
align-items: center;
|
|
28813
|
+
gap: 16px 24px;
|
|
28814
|
+
}
|
|
28815
|
+
.cn-workspace-filter-widget__text[data-v-f0d5c1c6] {
|
|
28816
|
+
flex: 1 1 320px;
|
|
28817
|
+
min-width: 0;
|
|
28818
|
+
}
|
|
28819
|
+
.cn-workspace-filter-widget__title[data-v-f0d5c1c6] {
|
|
28820
|
+
margin: 0 0 4px;
|
|
28821
|
+
font-size: 17px;
|
|
28822
|
+
font-weight: 700;
|
|
28823
|
+
color: var(--color-main-text);
|
|
28824
|
+
}
|
|
28825
|
+
.cn-workspace-filter-widget__description[data-v-f0d5c1c6] {
|
|
28826
|
+
margin: 0;
|
|
28827
|
+
max-width: 420px;
|
|
28828
|
+
color: var(--color-text-maxcontrast);
|
|
28829
|
+
}
|
|
28830
|
+
.cn-workspace-filter-widget--start .cn-workspace-filter-widget__control[data-v-f0d5c1c6],
|
|
28831
|
+
.cn-workspace-filter-widget--start > .v-select[data-v-f0d5c1c6] {
|
|
28832
|
+
flex: 0 1 480px;
|
|
28833
|
+
min-width: 240px;
|
|
28834
|
+
}
|
|
28835
|
+
.cn-workspace-filter-widget__link[data-v-f0d5c1c6] {
|
|
28836
|
+
font-weight: 600;
|
|
28837
|
+
color: var(--color-primary-element);
|
|
28838
|
+
text-decoration: underline;
|
|
28839
|
+
white-space: nowrap;
|
|
28840
|
+
}
|
|
27923
28841
|
.cn-workspace-filter-widget__count[data-v-f0d5c1c6] {
|
|
27924
28842
|
margin-inline-start: 6px;
|
|
27925
28843
|
padding: 0 6px;
|
|
@@ -32815,6 +33733,86 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
32815
33733
|
}
|
|
32816
33734
|
|
|
32817
33735
|
|
|
33736
|
+
/*
|
|
33737
|
+
* Layout only — this component draws no KPI of its own; the tiles inside it do
|
|
33738
|
+
* (src/css/kpi-card.css). What it DOES owe the canonical look is the rhythm
|
|
33739
|
+
* around those tiles, so the gutter is the card's own `--cn-kpi-grid-gap`
|
|
33740
|
+
* rather than a number picked here. A grid whose gutter disagrees with the
|
|
33741
|
+
* card's padding reads as a different design even when every tile is
|
|
33742
|
+
* identical.
|
|
33743
|
+
*/
|
|
33744
|
+
.cn-kpi-grid[data-v-e31696e2] {
|
|
33745
|
+
display: grid;
|
|
33746
|
+
gap: var(--cn-kpi-grid-gap, 16px);
|
|
33747
|
+
margin-bottom: 24px;
|
|
33748
|
+
}
|
|
33749
|
+
|
|
33750
|
+
/*
|
|
33751
|
+
* `minmax(0, 1fr)`, not `1fr`. A grid track's default minimum is `auto`, which
|
|
33752
|
+
* refuses to shrink below its content — and the canonical KPI value is
|
|
33753
|
+
* deliberately `white-space: nowrap`, so a long number (a formatted currency
|
|
33754
|
+
* amount, a six-figure count) pushes its track wider than its share and the
|
|
33755
|
+
* whole row overflows the page. With a 0 minimum the track holds its share and
|
|
33756
|
+
* the card's own `overflow: hidden` clips instead.
|
|
33757
|
+
*/
|
|
33758
|
+
.cn-kpi-grid--cols-2[data-v-e31696e2] {
|
|
33759
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
33760
|
+
}
|
|
33761
|
+
.cn-kpi-grid--cols-3[data-v-e31696e2] {
|
|
33762
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
33763
|
+
}
|
|
33764
|
+
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
33765
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
33766
|
+
}
|
|
33767
|
+
|
|
33768
|
+
/* Auto: as many 200px columns as fit (screens-dashboard-parity). */
|
|
33769
|
+
.cn-kpi-grid--cols-auto[data-v-e31696e2] {
|
|
33770
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
33771
|
+
}
|
|
33772
|
+
|
|
33773
|
+
/* Responsive breakpoints */
|
|
33774
|
+
@media (max-width: 1200px) {
|
|
33775
|
+
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
33776
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
33777
|
+
}
|
|
33778
|
+
}
|
|
33779
|
+
@media (max-width: 900px) {
|
|
33780
|
+
.cn-kpi-grid--cols-3[data-v-e31696e2] {
|
|
33781
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
33782
|
+
}
|
|
33783
|
+
}
|
|
33784
|
+
@media (max-width: 600px) {
|
|
33785
|
+
.cn-kpi-grid--cols-2[data-v-e31696e2],
|
|
33786
|
+
.cn-kpi-grid--cols-3[data-v-e31696e2],
|
|
33787
|
+
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
33788
|
+
grid-template-columns: minmax(0, 1fr);
|
|
33789
|
+
}
|
|
33790
|
+
}
|
|
33791
|
+
|
|
33792
|
+
|
|
33793
|
+
.cn-index-page-widgets--stat-row[data-v-5ec0c5bc] {
|
|
33794
|
+
margin-bottom: var(--cn-board-section-gap, 20px);
|
|
33795
|
+
}
|
|
33796
|
+
.cn-index-page-widgets__cell[data-v-5ec0c5bc] {
|
|
33797
|
+
display: flex;
|
|
33798
|
+
min-width: 0;
|
|
33799
|
+
}
|
|
33800
|
+
.cn-index-page-widgets__cell[data-v-5ec0c5bc] > * {
|
|
33801
|
+
flex: 1 1 auto;
|
|
33802
|
+
min-width: 0;
|
|
33803
|
+
}
|
|
33804
|
+
|
|
33805
|
+
/* The side panel column (DqTeamwachtrij: 300px, 16px between cards). Its
|
|
33806
|
+
place beside the toolbar and the list is set by CnIndexPage
|
|
33807
|
+
(`cn-index-page--with-side-panel`, index-page.css). */
|
|
33808
|
+
.cn-index-page-widgets--side-panel[data-v-5ec0c5bc] {
|
|
33809
|
+
display: flex;
|
|
33810
|
+
flex-direction: column;
|
|
33811
|
+
gap: 16px;
|
|
33812
|
+
min-width: 0;
|
|
33813
|
+
}
|
|
33814
|
+
|
|
33815
|
+
|
|
32818
33816
|
.cn-advanced-form-dialog__json-editor[data-v-733de04c] {
|
|
32819
33817
|
display: flex;
|
|
32820
33818
|
flex-direction: column;
|
|
@@ -34090,63 +35088,6 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
34090
35088
|
}
|
|
34091
35089
|
|
|
34092
35090
|
|
|
34093
|
-
/*
|
|
34094
|
-
* Layout only — this component draws no KPI of its own; the tiles inside it do
|
|
34095
|
-
* (src/css/kpi-card.css). What it DOES owe the canonical look is the rhythm
|
|
34096
|
-
* around those tiles, so the gutter is the card's own `--cn-kpi-grid-gap`
|
|
34097
|
-
* rather than a number picked here. A grid whose gutter disagrees with the
|
|
34098
|
-
* card's padding reads as a different design even when every tile is
|
|
34099
|
-
* identical.
|
|
34100
|
-
*/
|
|
34101
|
-
.cn-kpi-grid[data-v-e31696e2] {
|
|
34102
|
-
display: grid;
|
|
34103
|
-
gap: var(--cn-kpi-grid-gap, 16px);
|
|
34104
|
-
margin-bottom: 24px;
|
|
34105
|
-
}
|
|
34106
|
-
|
|
34107
|
-
/*
|
|
34108
|
-
* `minmax(0, 1fr)`, not `1fr`. A grid track's default minimum is `auto`, which
|
|
34109
|
-
* refuses to shrink below its content — and the canonical KPI value is
|
|
34110
|
-
* deliberately `white-space: nowrap`, so a long number (a formatted currency
|
|
34111
|
-
* amount, a six-figure count) pushes its track wider than its share and the
|
|
34112
|
-
* whole row overflows the page. With a 0 minimum the track holds its share and
|
|
34113
|
-
* the card's own `overflow: hidden` clips instead.
|
|
34114
|
-
*/
|
|
34115
|
-
.cn-kpi-grid--cols-2[data-v-e31696e2] {
|
|
34116
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
34117
|
-
}
|
|
34118
|
-
.cn-kpi-grid--cols-3[data-v-e31696e2] {
|
|
34119
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
34120
|
-
}
|
|
34121
|
-
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
34122
|
-
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
34123
|
-
}
|
|
34124
|
-
|
|
34125
|
-
/* Auto: as many 200px columns as fit (screens-dashboard-parity). */
|
|
34126
|
-
.cn-kpi-grid--cols-auto[data-v-e31696e2] {
|
|
34127
|
-
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
34128
|
-
}
|
|
34129
|
-
|
|
34130
|
-
/* Responsive breakpoints */
|
|
34131
|
-
@media (max-width: 1200px) {
|
|
34132
|
-
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
34133
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
34134
|
-
}
|
|
34135
|
-
}
|
|
34136
|
-
@media (max-width: 900px) {
|
|
34137
|
-
.cn-kpi-grid--cols-3[data-v-e31696e2] {
|
|
34138
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
34139
|
-
}
|
|
34140
|
-
}
|
|
34141
|
-
@media (max-width: 600px) {
|
|
34142
|
-
.cn-kpi-grid--cols-2[data-v-e31696e2],
|
|
34143
|
-
.cn-kpi-grid--cols-3[data-v-e31696e2],
|
|
34144
|
-
.cn-kpi-grid--cols-4[data-v-e31696e2] {
|
|
34145
|
-
grid-template-columns: minmax(0, 1fr);
|
|
34146
|
-
}
|
|
34147
|
-
}
|
|
34148
|
-
|
|
34149
|
-
|
|
34150
35091
|
.cn-export-wizard__description[data-v-59983562] {
|
|
34151
35092
|
color: var(--color-text-maxcontrast);
|
|
34152
35093
|
margin-bottom: 12px;
|