@conduction/nextcloud-vue 2.99.0 → 2.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +6 -1
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +2 -1
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  6. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +25 -8
  7. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  8. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +5 -3
  9. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  10. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  11. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +11 -8
  12. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  13. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +13 -4
  14. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  15. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  16. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +54 -3
  17. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  18. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +16 -2
  19. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  20. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue.js +1 -1
  21. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js +42 -7
  22. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js.map +1 -1
  23. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js +121 -57
  24. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js.map +1 -1
  25. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js +10 -0
  26. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js +2 -1
  28. package/dist/esm/components/CnFlowsPage/CnFlowEditorPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +136 -7
  30. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  31. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  33. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +68 -7
  34. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +256 -240
  36. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  37. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js +1 -1
  38. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js +38 -9
  39. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js.map +1 -1
  40. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js.map +1 -1
  41. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue.js +1 -1
  42. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +16 -2
  43. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  44. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +40 -25
  45. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  46. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue.js +1 -1
  47. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js +7 -7
  48. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js.map +1 -1
  49. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js.map +1 -1
  50. package/dist/esm/l10n/en.json.js +7 -1
  51. package/dist/esm/l10n/en.json.js.map +1 -1
  52. package/dist/esm/l10n/nl.json.js +7 -1
  53. package/dist/esm/l10n/nl.json.js.map +1 -1
  54. package/dist/esm/library-style.js +1 -1
  55. package/dist/esm/nextcloud-vue.css +348 -161
  56. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  57. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  58. package/dist/nextcloud-vue.cjs.js +1482 -998
  59. package/dist/nextcloud-vue.cjs.js.map +2 -2
  60. package/dist/nextcloud-vue.css +348 -161
  61. package/l10n/en.json +7 -1
  62. package/l10n/nl.json +7 -1
  63. package/package.json +1 -1
  64. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +7 -1
  65. package/src/components/CnDetailPage/CnDetailPage.vue +28 -9
  66. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +13 -4
  67. package/src/components/CnFactsWidget/CnFactsWidget.vue +65 -3
  68. package/src/components/CnFlowsPage/CnFlowBoard.vue +77 -2
  69. package/src/components/CnFlowsPage/CnFlowEditorPage.vue +11 -0
  70. package/src/components/CnIndexPage/CnIndexPage.vue +136 -7
  71. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +114 -7
  72. package/src/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue +38 -9
  73. package/src/components/CnSetupWizard/CnSetupWizard.vue +37 -3
  74. package/src/components/CnWizardDialog/CnWizardDialog.vue +7 -7
  75. package/src/css/detail-page.css +15 -0
  76. package/src/css/dialog.css +48 -0
  77. package/src/css/look-board.css +83 -1
  78. package/src/schemas/app-manifest-v2.schema.json +25 -1
  79. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -173,6 +173,54 @@
173
173
  color: var(--color-main-text);
174
174
  }
175
175
 
176
+ /* A Nextcloud text field or text area in a board dialog is the board's field:
177
+ its label above the control at 14px/600, the control 40px with a 1px grey
178
+ border and radius 8 (PlanItemDialog, DqWerkvoorraad). NcInputField draws
179
+ its border as a 65%-transparent shadow, which on the white dialog read as
180
+ an empty band, and floats its label inside the border. A field with
181
+ `labelOutside` keeps the app's own label and takes the same control. */
182
+ .cn-dialog-board .dialog__content .input-field:has(.input-field__label),
183
+ .cn-dialog-board .dialog__content .textarea:has(.textarea__label) {
184
+ margin-block-start: 26px;
185
+ }
186
+
187
+ /* The doubled class outranks NcInputField's raised-label rule (focused or
188
+ filled), which would pin the label's top as well and squash it. */
189
+ .cn-dialog-board .dialog__content .input-field__input + .input-field__label.input-field__label,
190
+ .cn-dialog-board .dialog__content .textarea__input + .textarea__label.textarea__label {
191
+ inset-block-start: auto;
192
+ inset-block-end: calc(100% + 4px);
193
+ inset-inline: 0 auto;
194
+ max-width: 100%;
195
+ margin: 0;
196
+ padding: 0;
197
+ background: none;
198
+ color: var(--color-main-text);
199
+ font-size: var(--cn-field-label-size, 14px);
200
+ font-weight: 600;
201
+ line-height: 20px;
202
+ pointer-events: auto;
203
+ transition: none;
204
+ }
205
+
206
+ .cn-dialog-board .dialog__content .input-field__main-wrapper {
207
+ height: calc(var(--cn-field-height, 40px) + 2 * var(--border-width-input-focused, 2px));
208
+ }
209
+
210
+ .cn-dialog-board .dialog__content .input-field__input,
211
+ .cn-dialog-board .dialog__content .input-field__input:hover:not([disabled]),
212
+ .cn-dialog-board .dialog__content .textarea__input,
213
+ .cn-dialog-board .dialog__content .textarea__input:hover:not([disabled]) {
214
+ border-radius: 8px;
215
+ box-shadow: 0 0 0 1px var(--color-border-dark);
216
+ font-size: var(--cn-field-text-size, 15px);
217
+ }
218
+
219
+ .cn-dialog-board .dialog__content .input-field:has(.input-field__label) .input-field__input:not(:focus)::placeholder,
220
+ .cn-dialog-board .dialog__content .textarea__input:not(:focus)::placeholder {
221
+ opacity: 1 !important;
222
+ }
223
+
176
224
  /* Type-to-confirm: a labelled 40px field with a monospace value and a hint. */
177
225
  .cn-dialog__confirm-field {
178
226
  display: flex;
@@ -302,6 +302,40 @@
302
302
  color: inherit;
303
303
  }
304
304
 
305
+ /* A caption's edit pencil ("Mijn zaaktypen") sits on the caption's line at
306
+ its end, 4px in: a 28px round muted button with a 16px icon that adds no
307
+ height (DqZijbalk). It is placed absolutely because a theme may force the
308
+ caption to `display: block` at id strength (thematiq's Zuiddrecht sheet),
309
+ which put the pencil on a line of its own. */
310
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption:has(.app-navigation-caption__actions) {
311
+ position: relative;
312
+ padding-inline-end: 36px;
313
+ }
314
+
315
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions {
316
+ --default-clickable-area: 28px;
317
+ position: absolute;
318
+ inset-block-start: -6px;
319
+ inset-inline-end: 4px;
320
+ margin: 0;
321
+ }
322
+
323
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions .button-vue {
324
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
325
+ width: 28px;
326
+ min-width: 28px;
327
+ height: 28px;
328
+ min-height: 28px;
329
+ padding: 0;
330
+ border-radius: 14px;
331
+ color: var(--color-text-maxcontrast);
332
+ }
333
+
334
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-caption .app-navigation-caption__actions .button-vue svg {
335
+ width: 16px;
336
+ height: 16px;
337
+ }
338
+
305
339
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry,
306
340
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry-link {
307
341
  min-height: 42px;
@@ -316,7 +350,15 @@
316
350
  color: var(--color-main-text);
317
351
  }
318
352
 
353
+ /* The open entry sits on the tonal primary. NcAppNavigationItem paints an
354
+ active entry with a 16% (22% hovered) primary mix at `!important`, so the
355
+ board value needs `!important` too; the selector is the more specific one.
356
+ The link carries the same ground. */
319
357
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active,
358
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active:hover {
359
+ background-color: var(--color-primary-element-light) !important;
360
+ }
361
+
320
362
  .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation-entry.active .app-navigation-entry-link {
321
363
  background: var(--color-primary-element-light);
322
364
  color: var(--color-primary-element-light-text);
@@ -362,9 +404,11 @@
362
404
  font-weight: 700;
363
405
  }
364
406
 
407
+ /* White on the error colour: --color-error-text is the error colour for text on
408
+ a light ground (#8A0000 under thematiq), not the text on an error pill. */
365
409
  .cn-look-board .cn-app-nav__count--attention {
366
410
  background: var(--color-error);
367
- color: var(--color-error-text, var(--color-primary-element-text));
411
+ color: var(--color-primary-element-text);
368
412
  }
369
413
 
370
414
  /* The footer: Help, then Advanced, whatever the declared order. */
@@ -951,6 +995,44 @@
951
995
  --nldesign-color-on-surface: var(--cn-status-badge-ink);
952
996
  }
953
997
 
998
+ /* ---- Info notes (NcNoteCard type="info") -------------------------------- */
999
+ /* The board's info note is a light-blue rounded box: no edge bar, 12px 14px
1000
+ of padding, radius 8, an 18px icon 10px before the text, 14px text in the
1001
+ deep primary ink at 1.5, and a bold heading line (DqBesluit and 13 other
1002
+ boards). NcNoteCard paints its ground and ink with `!important`, and a
1003
+ theme forces the body ink onto every p and span (thematiq), so the ground,
1004
+ the ink and the paragraph colour carry `!important` here too, scoped to
1005
+ the board look; the ink also goes to --nldesign-color-on-surface. */
1006
+ .cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) {
1007
+ --nldesign-color-on-surface: var(--color-primary-element-light-text);
1008
+ --note-card-icon-size: 18px;
1009
+ --note-theme: var(--color-primary-element-light-text);
1010
+ gap: 10px;
1011
+ padding: 12px 14px;
1012
+ border-inline-start: 0;
1013
+ border-radius: 8px;
1014
+ background-color: var(--color-primary-element-light) !important;
1015
+ color: var(--color-primary-element-light-text) !important;
1016
+ font-size: 14px;
1017
+ line-height: 1.5;
1018
+ }
1019
+
1020
+ .cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) p {
1021
+ color: var(--color-primary-element-light-text) !important;
1022
+ font-size: inherit;
1023
+ line-height: inherit;
1024
+ }
1025
+
1026
+ .cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) .notecard__heading {
1027
+ font-size: inherit;
1028
+ font-weight: 700 !important;
1029
+ }
1030
+
1031
+ .cn-look-board .notecard.notecard--info:not(.cn-look-nextcloud *) .notecard__icon {
1032
+ padding-top: 1px;
1033
+ color: var(--color-primary-element-light-text);
1034
+ }
1035
+
954
1036
  /* ---- Date and age cells (screens-cell-date-parity) ---------------------- */
955
1037
  /* The board sets every waiting time ("3 dagen", "4 uur") in weight 600; a
956
1038
  late one is red through its variant class. */
@@ -3,7 +3,7 @@
3
3
  "$id": "https://raw.githubusercontent.com/ConductionNL/nextcloud-vue/main/src/schemas/app-manifest-v2.schema.json",
4
4
  "title": "Conduction App Manifest v2",
5
5
  "description": "v2 schema for the JSON-driven page and navigation manifest consumed by @conduction/nextcloud-vue. Introduces a uniform widgets[] array on every page type with a per-slot grid coordinate system, a typed actions[] discriminator, and the required $schema field for version detection. v1 manifests continue to validate against app-manifest.schema.json (unchanged).",
6
- "version": "2.122.0",
6
+ "version": "2.123.0",
7
7
  "type": "object",
8
8
  "required": ["$schema", "version"],
9
9
  "allOf": [
@@ -97,6 +97,8 @@
97
97
  "type": { "type": "string", "enum": ["info", "config-fields", "choice", "run-action", "summary", "component"], "description": "Built-in step renderer." },
98
98
  "title": { "type": "string" },
99
99
  "body": { "type": "string", "description": "info: explanatory copy." },
100
+ "note": { "type": "string", "minLength": 1, "description": "choice: a footnote under the options, translated like body." },
101
+ "footnote": { "type": "string", "minLength": 1, "description": "choice: the same footnote under another name; note wins when both are set." },
100
102
  "required": { "type": "boolean", "default": false, "description": "When true the step gates the app until done." },
101
103
  "schema": { "description": "config-fields: a JSON Schema ref (string) or inline object rendered via fieldsFromSchema." },
102
104
  "configKey": { "type": "string", "description": "choice: app-config key the selection is written to." },
@@ -4024,6 +4026,14 @@
4024
4026
  "type": "boolean",
4025
4027
  "description": "false removes Request a feature, Report a bug and Documentation, for an app that offers them in its own help menu."
4026
4028
  },
4029
+ "showMarkUnread": {
4030
+ "type": "boolean",
4031
+ "description": "false removes the built-in Mark as unread entry."
4032
+ },
4033
+ "showOpenSidebar": {
4034
+ "type": "boolean",
4035
+ "description": "false removes the built-in Open sidebar entry of the board look."
4036
+ },
4027
4037
  "label": {
4028
4038
  "type": "string",
4029
4039
  "minLength": 1,
@@ -4333,6 +4343,20 @@
4333
4343
  "minLength": 1,
4334
4344
  "description": "type='detail', board look: the meta line on row 2 of the header, after the breadcrumb and a middle dot (screens-detail-page-parity). A field template such as `\"via {channel}\"`: every `{path}` is read from the record, and a line with an empty value is dropped. Maps to CnDetailPage `headerMeta`. type='index' | 'dashboard' | 'settings' (page-header-breadcrumb): the note after the breadcrumb and a middle dot under the title; on an index page `{total}` and `{shown}` are the list's counts."
4335
4345
  },
4346
+ "headerMetaCounts": {
4347
+ "type": "object",
4348
+ "description": "type='index': the other lists headerMeta counts, by name. Each is read as one list total and fills `{count:<name>}` in headerMeta (\"{total} contracten bij {count:suppliers} leveranciers\"); while a count loads or when it fails, the note is left out.",
4349
+ "additionalProperties": {
4350
+ "type": "object",
4351
+ "required": ["register", "schema"],
4352
+ "additionalProperties": false,
4353
+ "properties": {
4354
+ "register": { "type": "string", "minLength": 1 },
4355
+ "schema": { "type": "string", "minLength": 1 },
4356
+ "filter": { "type": "object" }
4357
+ }
4358
+ }
4359
+ },
4336
4360
  "tabsLabel": {
4337
4361
  "type": "string",
4338
4362
  "minLength": 1,