@conduction/nextcloud-vue 2.150.0 → 2.151.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 (67) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +7 -2
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +40 -41
  5. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
  6. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  7. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +6 -3
  8. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  9. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +13 -1
  10. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  11. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +1 -1
  12. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +5 -1
  13. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  14. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  15. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  16. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +46 -0
  17. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  18. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +64 -64
  19. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  20. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  21. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +15 -1
  22. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  23. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  24. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue.js +1 -1
  25. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue2.js.map +1 -1
  26. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js +16 -5
  27. package/dist/esm/components/CnPlanWidget/CnPlanWidgetRow.vue3.js.map +1 -1
  28. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  29. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +25 -2
  30. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  31. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +82 -68
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  33. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
  34. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
  36. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
  37. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
  38. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +1 -1
  39. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
  40. package/dist/esm/integrations/builtin/calendar/eventStatus.js +43 -2
  41. package/dist/esm/integrations/builtin/calendar/eventStatus.js.map +1 -1
  42. package/dist/esm/l10n/en.json.js +4 -1
  43. package/dist/esm/l10n/en.json.js.map +1 -1
  44. package/dist/esm/l10n/nl.json.js +5 -2
  45. package/dist/esm/l10n/nl.json.js.map +1 -1
  46. package/dist/esm/library-style.js +1 -1
  47. package/dist/esm/nextcloud-vue.css +623 -362
  48. package/dist/nextcloud-vue.cjs.js +894 -720
  49. package/dist/nextcloud-vue.cjs.js.map +2 -2
  50. package/dist/nextcloud-vue.css +623 -362
  51. package/l10n/en.json +4 -1
  52. package/l10n/nl.json +5 -2
  53. package/package.json +1 -1
  54. package/src/components/CnActionDialog/CnActionDialog.vue +17 -4
  55. package/src/components/CnConversationThread/CnConversationThread.vue +16 -2
  56. package/src/components/CnConversationThread/CnConversationWidget.vue +5 -1
  57. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +47 -2
  58. package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
  59. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +15 -1
  60. package/src/components/CnPlanWidget/CnPlanWidgetRow.vue +17 -2
  61. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +45 -2
  62. package/src/components/CnRetentionWidget/CnRetentionWidget.vue +8 -1
  63. package/src/components/CnTimelineWidget/CnTimelineManage.vue +1 -1
  64. package/src/css/dialog.css +6 -0
  65. package/src/css/look-board-detail.css +137 -0
  66. package/src/css/look-board.css +78 -2
  67. package/src/integrations/builtin/calendar/eventStatus.js +42 -1
@@ -317,6 +317,17 @@
317
317
  font-size: 14px;
318
318
  }
319
319
 
320
+ /* A link action is drawn as a button action: the board's 40px, no outer
321
+ margin (DqMijnWerk "Vandaag eerst": live links grew to the theme's 44px
322
+ link target and the button kept Nextcloud's 3px margin, 46px tall and
323
+ 13px apart where the board draws 40 to 42 and 10).
324
+ @spec openspec/changes/board-banner-actions-as-drawn/specs/board-banner-actions-as-drawn/spec.md#requirement-a-board-banners-actions-are-drawn-alike */
325
+ .cn-look-board .cn-banner-widget__action.cn-banner-widget__action:not(.cn-look-nextcloud *) {
326
+ height: var(--cn-board-control-height);
327
+ min-height: 0;
328
+ margin: 0;
329
+ }
330
+
320
331
  .cn-look-board .cn-banner-widget__action--primary:not(.cn-look-nextcloud *) {
321
332
  border: 0;
322
333
  }
@@ -346,7 +357,10 @@
346
357
  min-height: var(--cn-board-control-height);
347
358
  }
348
359
 
349
- .cn-look-board .cn-workspace-filter-widget__form:not(.cn-look-nextcloud *) .button-vue {
360
+ /* `.button-vue.button-vue`: NcButton sets its own padding on a button
361
+ without an icon (`.button-vue:has(.button-vue__icon:empty)`), as strong as
362
+ a single class here, and loads later. */
363
+ .cn-look-board .cn-workspace-filter-widget__form:not(.cn-look-nextcloud *) .button-vue.button-vue {
350
364
  --button-size: var(--cn-board-control-height);
351
365
  --button-padding: 16px;
352
366
  }
@@ -760,7 +774,7 @@
760
774
  /* "CSV exporteren" beside "Rapport laden" is the neutral secondary at the
761
775
  40px control height, 14px in (DqTermijnen).
762
776
  @spec openspec/changes/workspace-filter-export-table/specs/workspace-filter-export-table/spec.md#requirement-a-workspace-filter-input-can-export-the-table-it-loads */
763
- .cn-look-board .cn-workspace-filter-widget__form:not(.cn-look-nextcloud *) .button-vue.cn-workspace-filter-widget__export {
777
+ .cn-look-board .cn-workspace-filter-widget__form:not(.cn-look-nextcloud *) .button-vue.button-vue.cn-workspace-filter-widget__export {
764
778
  --button-size: var(--cn-board-control-height);
765
779
  --button-padding: 14px;
766
780
  }
@@ -813,6 +827,29 @@
813
827
  background: var(--color-background-hover);
814
828
  }
815
829
 
830
+ /* ---- A card table's head controls -------------------------------------- */
831
+ /* The head of a card's table (CnTasksWidget, CnRecordListWidget) draws its
832
+ sort control as the bare label, square, and the funnel after it 4px on as a
833
+ 22px button with a 4px radius, as CnDataTable's board head does
834
+ (DqZaakTaken). Nextcloud's `button` rule gave the label an 8px radius and a
835
+ 3px end margin (7px to the funnel) and NcActions its 8px trigger radius;
836
+ the extra class outranks both. */
837
+ .cn-look-board .cn-tasks-widget__head .cn-tasks-widget__head-sort:not(.cn-look-nextcloud *),
838
+ .cn-look-board .cn-record-list__head .cn-record-list__sort:not(.cn-look-nextcloud *) {
839
+ margin: 0;
840
+ border-radius: 0;
841
+ }
842
+
843
+ .cn-look-board .cn-tasks-widget__head .cn-tasks-widget__head-filter .button-vue:not(.cn-look-nextcloud *),
844
+ .cn-look-board .cn-record-list__head .cn-record-list__head-filter .button-vue:not(.cn-look-nextcloud *) {
845
+ --button-size: 22px;
846
+ width: 22px;
847
+ min-width: 22px;
848
+ height: 22px;
849
+ min-height: 22px;
850
+ border-radius: 4px;
851
+ }
852
+
816
853
  /* ---- The buildiq square ------------------------------------------------ */
817
854
  /* The board square's size. Its orange is set in patches.css, beside the
818
855
  brand orange it replaces, since this sheet names no colour literal. */
@@ -2593,6 +2630,7 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
2593
2630
  color: var(--color-main-text);
2594
2631
  font-size: 15px;
2595
2632
  font-weight: 600;
2633
+ line-height: normal;
2596
2634
  }
2597
2635
 
2598
2636
  /* A row whose one action is outlined (`rowAction.variant: "outlined"`,
@@ -2621,9 +2659,13 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
2621
2659
  background: var(--color-background-hover);
2622
2660
  }
2623
2661
 
2662
+ /* Title and meta lines at the font's normal line height: a two-line row is
2663
+ 60px, as every Dq dashboard board draws it (r31: 69 at Nextcloud's 1.5).
2664
+ @spec openspec/changes/board-dashboard-rows-normal-leading/specs/board-dashboard-rows-normal-leading/spec.md#requirement-a-board-dashboard-row-is-set-at-the-normal-line-height */
2624
2665
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__meta {
2625
2666
  color: var(--color-text-maxcontrast);
2626
2667
  font-size: 13px;
2668
+ line-height: normal;
2627
2669
  }
2628
2670
 
2629
2671
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__trailing {
@@ -2680,6 +2722,25 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
2680
2722
  border-top: 1px solid var(--color-border);
2681
2723
  }
2682
2724
 
2725
+ /* Note rows (DqDagAfsluiten "Nog open van vandaag"): the kind pill 12px
2726
+ from the title, the record button and the closing buttons at the board's
2727
+ 40px, and the closing pair at the two ends of their line (Annuleren left,
2728
+ Dag afsluiten right).
2729
+ @spec openspec/changes/board-record-notes-controls/specs/board-record-notes-controls/spec.md#requirement-board-note-rows-draw-the-boards-controls */
2730
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-notes__head {
2731
+ gap: 8px 12px;
2732
+ }
2733
+
2734
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-notes__fields .button-vue,
2735
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-notes__all-actions .button-vue {
2736
+ --button-size: var(--cn-board-control-height);
2737
+ }
2738
+
2739
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-notes__all-actions {
2740
+ flex: 1 1 100%;
2741
+ justify-content: space-between;
2742
+ }
2743
+
2683
2744
  /* Hover: the whole row takes the hover ground, 8px beyond the text so the
2684
2745
  text does not move. */
2685
2746
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link {
@@ -2766,6 +2827,21 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .v-popper__popper.action-
2766
2827
  padding: 0 var(--cn-board-dashboard-card-inset) 10px;
2767
2828
  }
2768
2829
 
2830
+ /* The stacked bar's legend in the board's type: the label 14px and the
2831
+ count 22px, both at the font's normal line height, 2px apart: a 46px item
2832
+ (DqMijnWerk "Mijn 14 zaken per stap"; live drew 14.25/22.5px at 1.5 and
2833
+ 1.2, a 50.4px item).
2834
+ @spec openspec/changes/board-stacked-bar-legend-type/specs/board-stacked-bar-legend-type/spec.md#requirement-a-board-stacked-bar-legend-is-set-in-the-boards-type */
2835
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-stacked-bar:not(.cn-stacked-bar--compact) .cn-stacked-bar__label {
2836
+ font-size: 14px;
2837
+ line-height: normal;
2838
+ }
2839
+
2840
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-stacked-bar:not(.cn-stacked-bar--compact) .cn-stacked-bar__count {
2841
+ font-size: 22px;
2842
+ line-height: normal;
2843
+ }
2844
+
2769
2845
  /* DqMijnWerk "Mijn archiefbeoordelingen": its rows and its empty line. */
2770
2846
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--borderless) .cn-decision-list {
2771
2847
  padding: 0 var(--cn-board-dashboard-card-inset) 20px;
@@ -25,9 +25,43 @@ export function eventStatusLabel(ev) {
25
25
  if (status === 'cancelled') {
26
26
  return t('nextcloud-vue', 'Cancelled')
27
27
  }
28
+ const answer = inviteeAnswer(ev)
29
+ if (answer === 'needs-action') {
30
+ return t('nextcloud-vue', 'Invited')
31
+ }
32
+ if (answer === 'accepted') {
33
+ return t('nextcloud-vue', 'Accepted')
34
+ }
35
+ if (answer === 'declined') {
36
+ return t('nextcloud-vue', 'Declined')
37
+ }
38
+ if (answer === 'tentative') {
39
+ return t('nextcloud-vue', 'Tentative')
40
+ }
28
41
  return ''
29
42
  }
30
43
 
44
+ /**
45
+ * Where the invitees stand when the event itself has no status: a decline
46
+ * first, then anyone still to answer, then a tentative answer, else accepted
47
+ * when all accepted; '' without invitees that answered or were asked.
48
+ *
49
+ * @param {object} ev The event.
50
+ * @return {string} `declined`, `needs-action`, `tentative`, `accepted` or ''.
51
+ * @spec openspec/changes/calendar-invitee-answer/specs/calendar-integration/spec.md#requirement-an-appointment-without-a-status-shows-where-its-invitees-stand
52
+ */
53
+ export function inviteeAnswer(ev) {
54
+ const answers = (Array.isArray(ev?.attendees) ? ev.attendees : [])
55
+ .map((att) => (att && typeof att === 'object' ? String(att.partstat || '').toLowerCase() : ''))
56
+ .filter(Boolean)
57
+ for (const answer of ['declined', 'needs-action', 'tentative']) {
58
+ if (answers.includes(answer)) {
59
+ return answer
60
+ }
61
+ }
62
+ return answers.length > 0 && answers.every((answer) => answer === 'accepted') ? 'accepted' : ''
63
+ }
64
+
31
65
  /**
32
66
  * The badge tone of the event's status.
33
67
  *
@@ -45,7 +79,14 @@ export function eventStatusVariant(ev) {
45
79
  if (status === 'cancelled') {
46
80
  return 'error'
47
81
  }
48
- return 'default'
82
+ const answer = inviteeAnswer(ev)
83
+ if (answer === 'accepted') {
84
+ return 'success'
85
+ }
86
+ if (answer === 'declined') {
87
+ return 'error'
88
+ }
89
+ return answer === '' ? 'default' : 'info'
49
90
  }
50
91
 
51
92
  /**