@conduction/nextcloud-vue 2.109.0 → 2.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +115 -12
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +36 -9
  5. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +2 -1
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +20 -0
  10. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  11. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +68 -61
  12. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  13. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +37 -12
  14. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  15. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  16. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  17. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +1 -1
  18. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  19. package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue.js +1 -1
  20. package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue2.js +8 -1
  21. package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue2.js.map +1 -1
  22. package/dist/esm/components/CnWorkQueue/CnWorkQueue.vue3.js.map +1 -1
  23. package/dist/esm/library-style.js +1 -1
  24. package/dist/esm/nextcloud-vue.css +131 -64
  25. package/dist/esm/utils/actionsDispatcher.js +5 -2
  26. package/dist/esm/utils/actionsDispatcher.js.map +1 -1
  27. package/dist/esm/utils/savedViewHelpers.js +40 -3
  28. package/dist/esm/utils/savedViewHelpers.js.map +1 -1
  29. package/dist/nextcloud-vue.cjs.js +479 -251
  30. package/dist/nextcloud-vue.cjs.js.map +2 -2
  31. package/dist/nextcloud-vue.css +131 -64
  32. package/package.json +1 -1
  33. package/src/components/CnActionDialog/CnActionDialog.vue +134 -13
  34. package/src/components/CnAppRoot/CnAppRoot.vue +2 -1
  35. package/src/components/CnDetailPage/CnDetailPage.vue +35 -11
  36. package/src/components/CnIndexPage/CnIndexPage.md +1 -1
  37. package/src/components/CnIndexPage/CnIndexPage.vue +37 -12
  38. package/src/components/CnIndexSidebar/CnIndexSidebar.md +1 -1
  39. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +2 -2
  40. package/src/components/CnWorkQueue/CnWorkQueue.vue +8 -1
  41. package/src/css/board.css +5 -2
  42. package/src/css/look-board-detail.css +19 -7
  43. package/src/css/look-board-index.css +14 -10
  44. package/src/css/look-board-reports.css +1 -1
  45. package/src/css/look-board.css +54 -9
  46. package/src/utils/actionsDispatcher.js +4 -1
  47. package/src/utils/savedViewHelpers.js +39 -2
@@ -91,14 +91,19 @@
91
91
  /* Buttons and inputs. */
92
92
  --cn-board-control-height: 40px;
93
93
  --cn-board-control-radius: 8px;
94
+ /* A control's edge: 3:1 against every ground a control sits on (WCAG
95
+ 1.4.11). Nextcloud's border-dark is a hairline (#dbdbdb, 1.4:1); its
96
+ max-contrast border is the control step, and a theme sets both. */
97
+ --cn-board-control-border: var(--color-border-maxcontrast);
94
98
  /* Cards. */
95
99
  --cn-board-card-radius: 12px;
96
100
  --cn-board-card-padding: 20px 22px;
97
101
  /* The side inset of a dashboard card: its title and its rows. */
98
102
  --cn-board-dashboard-card-inset: 24px;
99
- /* Hairline inside a card, and the soft secondary text. */
103
+ /* Hairline inside a card, and the soft secondary text: the boards' #3d4047,
104
+ between the main text and the muted text, so it follows a theme's pair. */
100
105
  --cn-board-hairline: var(--color-border);
101
- --cn-board-text-soft: var(--color-main-text);
106
+ --cn-board-text-soft: color-mix(in srgb, var(--color-main-text) 45%, var(--color-text-maxcontrast));
102
107
  }
103
108
 
104
109
  /*
@@ -250,6 +255,37 @@
250
255
  --font-weight-element: 600;
251
256
  }
252
257
 
258
+ /* ---- A button with an icon and a label --------------------------------- */
259
+ /* The boards draw it 14px in at both sides with 14px text and a 16px icon
260
+ 8px from its label (DqZaakEmail "Notitie toevoegen", DqVthInstellingen
261
+ "Regel toevoegen"). NcButton pads its start 4px and its end 12px, and puts
262
+ a 20px icon in a 30px slot. The rules hold the condition in `:where()`, so
263
+ they weigh (0,3,0): enough to outrank NcButton's own (0,2,0), and less than
264
+ any surface rule (header, toolbar, follow pill, Meer chevron, tab strip),
265
+ which keeps its own value. The padding goes through NcButton's
266
+ `--button-padding`, so a surface that sets `padding` is never contested.
267
+ @spec openspec/changes/board-icon-label-button/specs/board-icon-label-button/spec.md#requirement-a-board-button-with-an-icon-and-a-label-is-padded-as-the-boards-draw-it */
268
+ .cn-look-board .button-vue.button-vue:where(:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) {
269
+ --button-padding: 14px;
270
+ font-size: 14px;
271
+ }
272
+
273
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__wrapper.button-vue__wrapper {
274
+ gap: 8px;
275
+ }
276
+
277
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__icon.button-vue__icon {
278
+ width: 16px;
279
+ min-width: 16px;
280
+ height: 16px;
281
+ min-height: 16px;
282
+ }
283
+
284
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__icon svg {
285
+ width: 16px;
286
+ height: 16px;
287
+ }
288
+
253
289
  /* ---- The header button ------------------------------------------------- */
254
290
  .cn-look-board .cn-index-page__header-buttons:not(.cn-look-nextcloud *),
255
291
  .cn-look-board .cn-detail-page__header-actions:not(.cn-look-nextcloud *),
@@ -279,7 +315,7 @@
279
315
  --nldesign-component-button-primary-action-font-weight: 600;
280
316
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
281
317
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
282
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
318
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
283
319
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
284
320
  }
285
321
 
@@ -293,7 +329,7 @@
293
329
  min-height: var(--cn-board-control-height);
294
330
  padding: 0 14px;
295
331
  gap: 8px;
296
- border: 1px solid var(--color-border-dark);
332
+ border: 1px solid var(--cn-board-control-border);
297
333
  border-radius: var(--cn-board-control-radius);
298
334
  background: var(--color-main-background);
299
335
  color: var(--color-main-text);
@@ -325,7 +361,7 @@
325
361
  height: var(--cn-board-control-height);
326
362
  min-height: var(--cn-board-control-height);
327
363
  padding: 0 14px;
328
- border: 1px solid var(--color-border-dark);
364
+ border: 1px solid var(--cn-board-control-border);
329
365
  border-radius: var(--cn-board-control-radius);
330
366
  background: var(--color-main-background);
331
367
  color: var(--color-main-text);
@@ -333,8 +369,9 @@
333
369
  font-weight: 600;
334
370
  }
335
371
 
336
- /* Buttons 10px apart, each icon 16px with 8px to its label (DqZaak's header,
337
- DqZaken's "Downloaden"); NcButton draws a 20px icon in a 30px slot. */
372
+ /* Buttons 10px apart, each icon 16px (DqZaak's header, DqZaken's
373
+ "Downloaden"); NcButton draws a 20px icon in a 30px slot. The 8px to the
374
+ label is the board's icon-and-label gap above. */
338
375
  .cn-look-board .cn-action-buttons:not(.cn-look-nextcloud *) {
339
376
  gap: 10px;
340
377
  }
@@ -344,7 +381,6 @@
344
381
  min-width: 16px;
345
382
  height: 16px;
346
383
  min-height: 16px;
347
- margin-inline-end: 8px;
348
384
  }
349
385
 
350
386
  .cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) svg {
@@ -379,7 +415,7 @@
379
415
  body ink onto every span (thematiq). */
380
416
  .cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *) {
381
417
  --nldesign-color-on-surface: var(--color-main-text);
382
- border: 1px solid var(--color-border-dark);
418
+ border: 1px solid var(--cn-board-control-border);
383
419
  border-radius: var(--cn-board-control-radius);
384
420
  background: var(--color-main-background);
385
421
  color: var(--color-main-text);
@@ -1176,6 +1212,15 @@
1176
1212
  line-height: normal;
1177
1213
  }
1178
1214
 
1215
+ /* A neutral board tag ("Normaal", "Uit") is the soft text on the chip ground,
1216
+ not the main text on the darker background a Nextcloud tag takes.
1217
+ @spec openspec/changes/board-pill-tones/specs/board-pill-tones/spec.md#requirement-a-neutral-board-tag-is-soft-text-on-the-chip-ground */
1218
+ .cn-look-board .cn-status-badge--default:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
1219
+ --cn-status-badge-ink: var(--cn-board-text-soft);
1220
+ background-color: var(--color-background-hover);
1221
+ color: var(--cn-status-badge-ink);
1222
+ }
1223
+
1179
1224
  /* A pill paints its own pairing of ink and fill. A theme that forces the body
1180
1225
  ink onto every span (thematiq's text rule, `!important` at id level) reads
1181
1226
  that ink from --nldesign-color-on-surface when the surface sets it, so the
@@ -2099,10 +2144,13 @@
2099
2144
  margin-inline-start: auto;
2100
2145
  padding: 1px 8px;
2101
2146
  border-radius: 10px;
2147
+ --nldesign-color-on-surface: var(--cn-board-text-soft, var(--color-main-text));
2102
2148
  background-color: var(--color-main-background);
2103
- color: var(--color-main-text);
2149
+ color: var(--cn-board-text-soft, var(--color-main-text));
2104
2150
  font-size: 12px;
2105
- font-weight: 400;
2151
+ font-weight: 700;
2152
+ /* 16px tall on its 1px pad (DqWerkbord's column counts). */
2153
+ line-height: 14px;
2106
2154
  }
2107
2155
 
2108
2156
  /* A column at its limit: the count in the error colour; "full" is said in words too. */
@@ -2474,7 +2522,7 @@
2474
2522
  height: var(--cn-board-control-height) !important;
2475
2523
  min-height: var(--cn-board-control-height) !important;
2476
2524
  padding: 0 14px !important;
2477
- border: 1px solid var(--color-border-dark) !important;
2525
+ border: 1px solid var(--cn-board-control-border) !important;
2478
2526
  border-radius: var(--cn-board-control-radius) !important;
2479
2527
  background: var(--color-main-background) !important;
2480
2528
  color: var(--color-main-text) !important;
@@ -2598,7 +2646,7 @@
2598
2646
  min-height: 38px;
2599
2647
  margin: 0;
2600
2648
  padding: 0 14px;
2601
- border: 1px solid var(--color-border-dark);
2649
+ border: 1px solid var(--cn-board-control-border);
2602
2650
  border-radius: 19px;
2603
2651
  background: var(--color-main-background);
2604
2652
  color: var(--color-main-text);
@@ -2640,20 +2688,22 @@
2640
2688
  padding: 1px 7px;
2641
2689
  border: 0;
2642
2690
  border-radius: 10px;
2691
+ --nldesign-color-on-surface: var(--cn-board-text-soft);
2643
2692
  background: var(--color-border);
2644
2693
  color: var(--cn-board-text-soft);
2645
2694
  font-size: 12px;
2646
2695
  font-weight: 600;
2647
- line-height: 1.4;
2696
+ /* 16px tall on its 1px pad, as the boards draw it (DqTaken, DqWerkbord).
2697
+ @spec openspec/changes/board-pill-tones/specs/board-pill-tones/spec.md#requirement-a-board-count-is-16px-tall */
2698
+ line-height: 14px;
2648
2699
  }
2649
2700
 
2650
2701
  .cn-look-board .cn-saved-views__chip--selected .cn-saved-views__chip-count,
2651
- /* On the selected chip the count is a lighter bubble on the dark chip
2652
- (DqZaken: #3d4047 on #1b1c1d); --cn-board-text-soft resolves to the main
2653
- text, the chip's own colour, which hid the bubble. */
2702
+ /* On the selected chip the count is the soft ink as a lighter bubble on the
2703
+ dark chip (DqZaken: #3d4047 on #1b1c1d). */
2654
2704
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__tab--active .cn-quick-filter-bar__count {
2655
2705
  --nldesign-color-on-surface: var(--color-primary-element-text);
2656
- background: color-mix(in srgb, var(--color-main-background) 15%, var(--color-main-text));
2706
+ background: var(--cn-board-text-soft);
2657
2707
  color: var(--color-primary-element-text);
2658
2708
  }
2659
2709
 
@@ -2702,7 +2752,7 @@
2702
2752
  --nldesign-component-button-font-weight: 600;
2703
2753
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
2704
2754
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
2705
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
2755
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
2706
2756
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
2707
2757
  }
2708
2758
 
@@ -2729,6 +2779,8 @@
2729
2779
  margin-inline-start: 6px;
2730
2780
  padding: 0 6px;
2731
2781
  border-radius: 10px;
2782
+ /* A theme that forces the body ink onto every span reads it from here. */
2783
+ --nldesign-color-on-surface: var(--color-primary-element-text);
2732
2784
  background: var(--color-primary-element);
2733
2785
  color: var(--color-primary-element-text);
2734
2786
  font-size: 12px;
@@ -2837,7 +2889,7 @@
2837
2889
  height: 40px;
2838
2890
  padding-block: 0;
2839
2891
  padding-inline: 38px 12px !important;
2840
- border: 1px solid var(--color-border-dark);
2892
+ border: 1px solid var(--cn-board-control-border);
2841
2893
  border-radius: 8px;
2842
2894
  font-size: 14px;
2843
2895
  }
@@ -3214,7 +3266,7 @@
3214
3266
  height: 34px !important;
3215
3267
  min-height: 34px !important;
3216
3268
  padding: 0 !important;
3217
- border: 1px solid var(--color-border-dark) !important;
3269
+ border: 1px solid var(--cn-board-control-border) !important;
3218
3270
  border-radius: 8px !important;
3219
3271
  color: var(--cn-board-text-soft) !important;
3220
3272
  }
@@ -8000,7 +8052,7 @@ a.cn-kpi-card--board * {
8000
8052
  height: var(--cn-board-control-height) !important;
8001
8053
  min-height: var(--cn-board-control-height) !important;
8002
8054
  padding: 0 14px !important;
8003
- border: 1px solid var(--color-border-dark) !important;
8055
+ border: 1px solid var(--cn-board-control-border) !important;
8004
8056
  border-radius: var(--cn-board-control-radius) !important;
8005
8057
  background: var(--color-main-background) !important;
8006
8058
  color: var(--color-main-text) !important;
@@ -8013,13 +8065,13 @@ a.cn-kpi-card--board * {
8013
8065
  background: var(--color-background-hover) !important;
8014
8066
  }
8015
8067
 
8016
- /* Each header icon is 16px with 8px to its label; NcButton draws 20px in a 30px slot. */
8068
+ /* Each header icon is 16px; NcButton draws 20px in a 30px slot. The 8px to
8069
+ the label is the board's icon-and-label gap (look-board.css). */
8017
8070
  .cn-look-board .cn-detail-page .cn-detail-page__header-actions > .button-vue--secondary .button-vue__icon {
8018
8071
  width: 16px;
8019
8072
  min-width: 16px;
8020
8073
  height: 16px;
8021
8074
  min-height: 16px;
8022
- margin-inline-end: 8px;
8023
8075
  }
8024
8076
 
8025
8077
  .cn-look-board .cn-detail-page .cn-detail-page__header-actions > .button-vue--secondary .button-vue__icon svg {
@@ -8027,6 +8079,17 @@ a.cn-kpi-card--board * {
8027
8079
  height: 16px;
8028
8080
  }
8029
8081
 
8082
+ /* Row 3: the Follow control under the breadcrumb, on the full width.
8083
+ @spec openspec/changes/board-follow-row/specs/board-follow-row/spec.md#requirement-the-board-follow-control-sits-under-the-breadcrumb */
8084
+ .cn-look-board .cn-detail-page__header-row3 {
8085
+ align-items: center;
8086
+ display: flex;
8087
+ flex: 1 0 100%;
8088
+ flex-wrap: wrap;
8089
+ gap: 8px;
8090
+ min-width: 0;
8091
+ }
8092
+
8030
8093
  /* Row 2: pills, breadcrumb, dot, meta, chips. */
8031
8094
  .cn-look-board .cn-detail-page__header-row2 {
8032
8095
  align-items: center;
@@ -8184,14 +8247,14 @@ a.cn-kpi-card--board * {
8184
8247
  --nldesign-component-button-border-radius: 14px;
8185
8248
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
8186
8249
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
8187
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
8250
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
8188
8251
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
8189
8252
  box-sizing: border-box;
8190
8253
  height: 28px;
8191
8254
  min-height: 28px;
8192
8255
  min-width: 0;
8193
8256
  padding: 0 10px;
8194
- border: 1px solid var(--color-border-dark);
8257
+ border: 1px solid var(--cn-board-control-border);
8195
8258
  border-radius: 14px;
8196
8259
  background: var(--color-main-background);
8197
8260
  color: var(--color-main-text);
@@ -8329,13 +8392,14 @@ a.cn-kpi-card--board * {
8329
8392
 
8330
8393
  /* The Actions button at the end of the strip: at the top, 8px in from the
8331
8394
  end and 8px clear of the card, so the tabs, aligned to the bottom, sit 6px
8332
- lower than the button (DqZaak "Acties"). */
8395
+ lower than the button, 12px in at both sides (DqZaak "Acties"). */
8333
8396
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end {
8334
8397
  align-self: flex-start;
8335
8398
  margin: 0 8px 8px 0;
8336
8399
  }
8337
8400
 
8338
8401
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end .button-vue {
8402
+ --button-padding: 12px;
8339
8403
  min-height: 34px;
8340
8404
  block-size: 34px;
8341
8405
  }
@@ -8659,7 +8723,7 @@ a.cn-kpi-card--board * {
8659
8723
  .cn-look-board .cn-activity-tab--board .cn-activity-tab__kind {
8660
8724
  align-items: center;
8661
8725
  background: var(--color-main-background);
8662
- border: 1px solid var(--color-border-dark);
8726
+ border: 1px solid var(--cn-board-control-border);
8663
8727
  border-radius: 18px;
8664
8728
  color: var(--color-main-text);
8665
8729
  cursor: pointer;
@@ -8934,7 +8998,7 @@ a.cn-kpi-card--board * {
8934
8998
  height: var(--cn-board-control-height) !important;
8935
8999
  min-height: var(--cn-board-control-height) !important;
8936
9000
  padding: 0 14px !important;
8937
- border: 1px solid var(--color-border-dark) !important;
9001
+ border: 1px solid var(--cn-board-control-border) !important;
8938
9002
  border-radius: var(--cn-board-control-radius) !important;
8939
9003
  background: var(--color-main-background) !important;
8940
9004
  color: var(--color-main-text) !important;
@@ -28366,35 +28430,35 @@ button.cn-stepper__step[data-v-776581d4] {
28366
28430
  }
28367
28431
 
28368
28432
 
28369
- .cn-work-queue[data-v-793630f4] {
28433
+ .cn-work-queue[data-v-d5bc0a42] {
28370
28434
  display: flex;
28371
28435
  flex-direction: column;
28372
28436
  gap: 24px;
28373
28437
  }
28374
- .cn-work-queue__head[data-v-793630f4],
28375
- .cn-work-queue__group-head[data-v-793630f4] {
28438
+ .cn-work-queue__head[data-v-d5bc0a42],
28439
+ .cn-work-queue__group-head[data-v-d5bc0a42] {
28376
28440
  display: flex;
28377
28441
  flex-wrap: wrap;
28378
28442
  align-items: center;
28379
28443
  justify-content: space-between;
28380
28444
  gap: 12px;
28381
28445
  }
28382
- .cn-work-queue__title[data-v-793630f4] {
28446
+ .cn-work-queue__title[data-v-d5bc0a42] {
28383
28447
  margin: 0;
28384
28448
  font-size: 28px;
28385
28449
  font-weight: 700;
28386
28450
  }
28387
- .cn-work-queue__actions[data-v-793630f4] {
28451
+ .cn-work-queue__actions[data-v-d5bc0a42] {
28388
28452
  display: flex;
28389
28453
  gap: 8px;
28390
28454
  }
28391
- .cn-work-queue__group[data-v-793630f4] {
28455
+ .cn-work-queue__group[data-v-d5bc0a42] {
28392
28456
  padding: 20px 24px;
28393
28457
  border: 1px solid var(--color-border);
28394
28458
  border-radius: var(--border-radius-large);
28395
28459
  background: var(--color-main-background);
28396
28460
  }
28397
- .cn-work-queue__group-title[data-v-793630f4] {
28461
+ .cn-work-queue__group-title[data-v-d5bc0a42] {
28398
28462
  display: flex;
28399
28463
  align-items: center;
28400
28464
  gap: 8px;
@@ -28402,33 +28466,33 @@ button.cn-stepper__step[data-v-776581d4] {
28402
28466
  font-size: 18px;
28403
28467
  font-weight: 700;
28404
28468
  }
28405
- .cn-work-queue__count[data-v-793630f4] {
28469
+ .cn-work-queue__count[data-v-d5bc0a42] {
28406
28470
  padding: 0 8px;
28407
28471
  border-radius: 10px;
28408
28472
  background: var(--color-background-dark);
28409
28473
  font-size: 12px;
28410
28474
  font-weight: 600;
28411
28475
  }
28412
- .cn-work-queue__muted[data-v-793630f4] {
28476
+ .cn-work-queue__muted[data-v-d5bc0a42] {
28413
28477
  margin: 4px 0 8px;
28414
28478
  color: var(--color-text-maxcontrast);
28415
28479
  }
28416
- .cn-work-queue__items[data-v-793630f4] {
28480
+ .cn-work-queue__items[data-v-d5bc0a42] {
28417
28481
  margin: 0;
28418
28482
  padding: 0;
28419
28483
  list-style: none;
28420
28484
  }
28421
- .cn-work-queue__item[data-v-793630f4] {
28485
+ .cn-work-queue__item[data-v-d5bc0a42] {
28422
28486
  display: flex;
28423
28487
  align-items: center;
28424
28488
  gap: 16px;
28425
28489
  padding: 12px 0;
28426
28490
  border-block-end: 1px solid var(--color-border);
28427
28491
  }
28428
- .cn-work-queue__item[data-v-793630f4]:last-child {
28492
+ .cn-work-queue__item[data-v-d5bc0a42]:last-child {
28429
28493
  border-block-end: none;
28430
28494
  }
28431
- .cn-work-queue__avatar[data-v-793630f4] {
28495
+ .cn-work-queue__avatar[data-v-d5bc0a42] {
28432
28496
  display: inline-flex;
28433
28497
  flex: none;
28434
28498
  align-items: center;
@@ -28441,24 +28505,24 @@ button.cn-stepper__step[data-v-776581d4] {
28441
28505
  font-size: 12px;
28442
28506
  font-weight: 700;
28443
28507
  }
28444
- .cn-work-queue__body[data-v-793630f4] {
28508
+ .cn-work-queue__body[data-v-d5bc0a42] {
28445
28509
  display: flex;
28446
28510
  flex: 1 1 auto;
28447
28511
  flex-direction: column;
28448
28512
  min-width: 0;
28449
28513
  }
28450
- .cn-work-queue__link[data-v-793630f4] {
28514
+ .cn-work-queue__link[data-v-d5bc0a42] {
28451
28515
  color: var(--color-main-text);
28452
28516
  font-weight: 700;
28453
28517
  text-decoration: none;
28454
28518
  }
28455
- .cn-work-queue__link[data-v-793630f4]:hover {
28519
+ .cn-work-queue__link[data-v-d5bc0a42]:hover {
28456
28520
  text-decoration: underline;
28457
28521
  }
28458
- .cn-work-queue__item--late .cn-work-queue__link[data-v-793630f4] {
28522
+ .cn-work-queue__item--late .cn-work-queue__link[data-v-d5bc0a42] {
28459
28523
  color: var(--color-error);
28460
28524
  }
28461
- .cn-work-queue__sub[data-v-793630f4] {
28525
+ .cn-work-queue__sub[data-v-d5bc0a42] {
28462
28526
  display: flex;
28463
28527
  flex-wrap: wrap;
28464
28528
  gap: 12px;
@@ -39027,10 +39091,13 @@ to {
39027
39091
  margin-inline-start: auto;
39028
39092
  padding: 1px 8px;
39029
39093
  border-radius: 10px;
39094
+ --nldesign-color-on-surface: var(--cn-board-text-soft, var(--color-main-text));
39030
39095
  background-color: var(--color-main-background);
39031
- color: var(--color-main-text);
39096
+ color: var(--cn-board-text-soft, var(--color-main-text));
39032
39097
  font-size: 12px;
39033
- font-weight: 400;
39098
+ font-weight: 700;
39099
+ /* 16px tall on its 1px pad (DqWerkbord's column counts). */
39100
+ line-height: 14px;
39034
39101
  }
39035
39102
 
39036
39103
  /* A column at its limit: the count in the error colour; "full" is said in words too. */
@@ -41817,12 +41884,12 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41817
41884
  }
41818
41885
 
41819
41886
 
41820
- .cn-action-dialog[data-v-53fea6f0] {
41887
+ .cn-action-dialog[data-v-0bb28fd1] {
41821
41888
  display: flex;
41822
41889
  flex-direction: column;
41823
41890
  gap: 16px;
41824
41891
  }
41825
- .cn-action-dialog__summary[data-v-53fea6f0] {
41892
+ .cn-action-dialog__summary[data-v-0bb28fd1] {
41826
41893
  display: flex;
41827
41894
  align-items: center;
41828
41895
  gap: 10px;
@@ -41830,13 +41897,13 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41830
41897
  border: 1px solid var(--color-border);
41831
41898
  border-radius: var(--border-radius-large, 8px);
41832
41899
  }
41833
- .cn-action-dialog__summary-text[data-v-53fea6f0] {
41900
+ .cn-action-dialog__summary-text[data-v-0bb28fd1] {
41834
41901
  display: flex;
41835
41902
  flex: 1 1 auto;
41836
41903
  flex-direction: column;
41837
41904
  min-width: 0;
41838
41905
  }
41839
- .cn-action-dialog__badge[data-v-53fea6f0] {
41906
+ .cn-action-dialog__badge[data-v-0bb28fd1] {
41840
41907
  padding: 3px 10px;
41841
41908
  border-radius: 12px;
41842
41909
  background: var(--color-background-dark);
@@ -41844,25 +41911,25 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41844
41911
  font-weight: 600;
41845
41912
  white-space: nowrap;
41846
41913
  }
41847
- .cn-action-dialog__title[data-v-53fea6f0] {
41914
+ .cn-action-dialog__title[data-v-0bb28fd1] {
41848
41915
  margin: 0 0 8px;
41849
41916
  font-size: 15px;
41850
41917
  font-weight: 700;
41851
41918
  }
41852
- .cn-action-dialog__facts[data-v-53fea6f0] {
41919
+ .cn-action-dialog__facts[data-v-0bb28fd1] {
41853
41920
  display: grid;
41854
41921
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
41855
41922
  gap: 8px 16px;
41856
41923
  margin: 0;
41857
41924
  }
41858
- .cn-action-dialog__facts dt[data-v-53fea6f0] {
41925
+ .cn-action-dialog__facts dt[data-v-0bb28fd1] {
41859
41926
  color: var(--color-text-maxcontrast);
41860
41927
  font-size: 13px;
41861
41928
  }
41862
- .cn-action-dialog__facts dd[data-v-53fea6f0] {
41929
+ .cn-action-dialog__facts dd[data-v-0bb28fd1] {
41863
41930
  margin: 0;
41864
41931
  }
41865
- .cn-action-dialog__checks[data-v-53fea6f0] {
41932
+ .cn-action-dialog__checks[data-v-0bb28fd1] {
41866
41933
  display: flex;
41867
41934
  flex-direction: column;
41868
41935
  gap: 8px;
@@ -41870,28 +41937,28 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41870
41937
  padding: 0;
41871
41938
  list-style: none;
41872
41939
  }
41873
- .cn-action-dialog__check[data-v-53fea6f0] {
41940
+ .cn-action-dialog__check[data-v-0bb28fd1] {
41874
41941
  display: flex;
41875
41942
  flex-wrap: wrap;
41876
41943
  align-items: center;
41877
41944
  gap: 8px;
41878
41945
  }
41879
- .cn-action-dialog__check-icon[data-v-53fea6f0] {
41946
+ .cn-action-dialog__check-icon[data-v-0bb28fd1] {
41880
41947
  color: var(--color-text-maxcontrast);
41881
41948
  }
41882
- .cn-action-dialog__check-icon--met[data-v-53fea6f0] {
41949
+ .cn-action-dialog__check-icon--met[data-v-0bb28fd1] {
41883
41950
  color: var(--color-success-text, var(--color-success));
41884
41951
  }
41885
- .cn-action-dialog__muted[data-v-53fea6f0] {
41952
+ .cn-action-dialog__muted[data-v-0bb28fd1] {
41886
41953
  color: var(--color-text-maxcontrast);
41887
41954
  font-size: 14px;
41888
41955
  }
41889
- .cn-action-dialog__field[data-v-53fea6f0] {
41956
+ .cn-action-dialog__field[data-v-0bb28fd1] {
41890
41957
  display: flex;
41891
41958
  flex-direction: column;
41892
41959
  gap: 4px;
41893
41960
  }
41894
- .cn-action-dialog__error[data-v-53fea6f0] {
41961
+ .cn-action-dialog__error[data-v-0bb28fd1] {
41895
41962
  margin: 0;
41896
41963
  color: var(--color-error-text, var(--color-error));
41897
41964
  }
@@ -4,7 +4,7 @@ import { parseDispositionFilename, triggerBlobDownload } from '../components/CnI
4
4
  import { interpolateUrlTokens } from '../composables/useEndpointSource.js';
5
5
  import { routeHref } from './actionLink.js';
6
6
  import { resolveModalEntry } from './builtInModals.js';
7
- import { dropOptionalUnresolvedDeep, resolveDeepTokens, dropOptionalUnresolved, resolveFilterTokens, hasUnresolvedDeepTokens, hasUnresolvedTokens } from './resolveFilterTokens.js';
7
+ import { resolveDeepTokens, dropOptionalUnresolvedDeep, dropOptionalUnresolved, resolveFilterTokens, hasUnresolvedDeepTokens, hasUnresolvedTokens } from './resolveFilterTokens.js';
8
8
  import { schemaRefSlug } from './schemaRefSlug.js';
9
9
 
10
10
  /**
@@ -851,7 +851,10 @@ function dispatchAction(action, context = {}) {
851
851
  return
852
852
  }
853
853
 
854
- context.openModal(target, action.props ?? {});
854
+ // A prop that is exactly a token (`"objectId": "@objectId"`) resolves
855
+ // against the page's object; one the page cannot answer stays as written.
856
+ const props = context.tokenCtx ? resolveDeepTokens(action.props ?? {}, context.tokenCtx) : (action.props ?? {});
857
+ context.openModal(target, props);
855
858
  break
856
859
  }
857
860