@conduction/nextcloud-vue 2.101.0 → 2.103.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 (140) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +22 -0
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +8 -6
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  5. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  6. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +29 -4
  7. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  8. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js +9 -1
  9. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  10. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  11. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +73 -0
  12. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  13. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +99 -64
  14. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  15. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +1 -1
  16. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +46 -0
  17. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  18. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js +37 -2
  19. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  20. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  21. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +49 -6
  22. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +1 -1
  24. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  25. package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
  26. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +113 -20
  27. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  28. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +387 -359
  29. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  30. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +84 -4
  31. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  32. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +8 -6
  33. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  34. package/dist/esm/components/CnIndexPage/useNamedSource.js +26 -2
  35. package/dist/esm/components/CnIndexPage/useNamedSource.js.map +1 -1
  36. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue.js +1 -1
  37. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue2.js +25 -1
  38. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue2.js.map +1 -1
  39. package/dist/esm/components/CnMenuWidget/CnMenuWidget.vue3.js.map +1 -1
  40. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue.js +1 -1
  41. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +10 -1
  42. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  43. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  44. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue.js +1 -1
  45. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +106 -4
  46. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  47. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js +70 -25
  48. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  49. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  50. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +97 -3
  51. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  52. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +46 -2
  53. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  54. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue.js +9 -0
  55. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue.js.map +1 -0
  56. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue2.js +165 -0
  57. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue2.js.map +1 -0
  58. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue3.js +85 -0
  59. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue3.js.map +1 -0
  60. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue.js +1 -1
  61. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +54 -6
  62. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  63. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +3 -1
  64. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  65. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  66. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +8 -1
  67. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  68. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  69. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
  70. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +2 -23
  71. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  72. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  73. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue.js +1 -1
  74. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js +19 -0
  75. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js.map +1 -1
  76. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js +1 -1
  77. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js.map +1 -1
  78. package/dist/esm/composables/indexSources.js +9 -0
  79. package/dist/esm/composables/indexSources.js.map +1 -1
  80. package/dist/esm/index.js +1 -0
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/l10n/en.json.js +5 -1
  83. package/dist/esm/l10n/en.json.js.map +1 -1
  84. package/dist/esm/l10n/nl.json.js +5 -1
  85. package/dist/esm/l10n/nl.json.js.map +1 -1
  86. package/dist/esm/library-style.js +1 -1
  87. package/dist/esm/mixins/pageViews.js +8 -1
  88. package/dist/esm/mixins/pageViews.js.map +1 -1
  89. package/dist/esm/nextcloud-vue.css +593 -459
  90. package/dist/esm/utils/builtInFormatters.js +24 -4
  91. package/dist/esm/utils/builtInFormatters.js.map +1 -1
  92. package/dist/esm/utils/rowClassRules.js +43 -0
  93. package/dist/esm/utils/rowClassRules.js.map +1 -0
  94. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  95. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  96. package/dist/esm/utils/visibleWhen.js +32 -4
  97. package/dist/esm/utils/visibleWhen.js.map +1 -1
  98. package/dist/nextcloud-vue.cjs.js +10093 -8858
  99. package/dist/nextcloud-vue.cjs.js.map +2 -2
  100. package/dist/nextcloud-vue.css +593 -459
  101. package/l10n/en.json +5 -1
  102. package/l10n/nl.json +5 -1
  103. package/package.json +1 -1
  104. package/src/components/CnActionsBar/CnActionsBar.md +1 -0
  105. package/src/components/CnActionsBar/CnActionsBar.vue +31 -4
  106. package/src/components/CnChartWidget/CnChartWidget.md +3 -2
  107. package/src/components/CnChartWidget/CnChartWidget.vue +42 -4
  108. package/src/components/CnConversationThread/CnConversationThread.md +17 -0
  109. package/src/components/CnConversationThread/CnConversationThread.vue +113 -8
  110. package/src/components/CnConversationThread/CnConversationWidget.vue +60 -1
  111. package/src/components/CnDashboardPage/CnDashboardPage.md +4 -1
  112. package/src/components/CnDashboardPage/CnDashboardPage.vue +50 -7
  113. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  114. package/src/components/CnFormDialog/CnFormDialog.md +1 -1
  115. package/src/components/CnFormDialog/CnFormDialog.vue +127 -0
  116. package/src/components/CnIndexPage/CnIndexPage.md +15 -1
  117. package/src/components/CnIndexPage/CnIndexPage.vue +92 -9
  118. package/src/components/CnIndexPage/useNamedSource.js +26 -2
  119. package/src/components/CnMenuWidget/CnMenuWidget.vue +25 -1
  120. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +10 -1
  121. package/src/components/CnQuickFilterBar/CnQuickFilterBar.md +1 -0
  122. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +159 -5
  123. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +134 -2
  124. package/src/components/CnSearchSelect/CnSearchSelect.vue +283 -0
  125. package/src/components/CnSearchSelect/index.js +12 -0
  126. package/src/components/CnSetupWizard/CnSetupWizard.vue +56 -6
  127. package/src/components/CnTabsWidget/CnTabsWidget.vue +8 -1
  128. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +2 -23
  129. package/src/components/CnWizardDialog/CnWizardDialog.vue +20 -1
  130. package/src/components/index.js +1 -0
  131. package/src/composables/indexSources.js +9 -0
  132. package/src/css/dialog.css +5 -3
  133. package/src/css/look-board-index.css +10 -0
  134. package/src/index.js +1 -0
  135. package/src/mixins/pageViews.js +8 -1
  136. package/src/schemas/app-manifest-v2.schema.json +107 -8
  137. package/src/utils/builtInFormatters.js +24 -4
  138. package/src/utils/rowClassRules.js +39 -0
  139. package/src/utils/validateManifestV2.compiled.js +3 -3
  140. package/src/utils/visibleWhen.js +32 -4
@@ -2,7 +2,7 @@ import script from './CnFormDialog.vue2.js';
2
2
  import { render } from './CnFormDialog.vue3.js';
3
3
 
4
4
  script.render = render;
5
- script.__scopeId = "data-v-65a5754f";
5
+ script.__scopeId = "data-v-6927cedc";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -4,19 +4,20 @@ import { generateUrl } from '@nextcloud/router';
4
4
  import { NcButton, NcNoteCard, NcLoadingIcon, NcTextField, NcSelect, NcSelectUsers, NcDateTimePickerNative, NcCheckboxRadioSwitch } from '@nextcloud/vue';
5
5
  import ContentSaveOutline from 'vue-material-design-icons/ContentSaveOutline.vue';
6
6
  import Plus from 'vue-material-design-icons/Plus.vue';
7
- import __sfc_main$3 from '../../dialogs/CnReplaceValuesDialog.vue.js';
8
- import __sfc_main$5 from '../CnChildRecordsField/CnChildRecordsField.vue.js';
9
- import __sfc_main$6 from '../CnDialog/CnDialog.vue.js';
7
+ import __sfc_main$4 from '../../dialogs/CnReplaceValuesDialog.vue.js';
8
+ import __sfc_main$6 from '../CnChildRecordsField/CnChildRecordsField.vue.js';
9
+ import __sfc_main$7 from '../CnDialog/CnDialog.vue.js';
10
10
  import __sfc_main$1 from '../CnDurationField/CnDurationField.vue.js';
11
- import __sfc_main$c from '../CnFieldHelper/CnFieldHelper.vue.js';
11
+ import __sfc_main$d from '../CnFieldHelper/CnFieldHelper.vue.js';
12
12
  import __sfc_main from '../CnFileField/CnFileField.vue.js';
13
- import __sfc_main$8 from '../CnFormField/CnFormField.vue.js';
14
- import __sfc_main$7 from '../CnIcon/CnIcon.vue.js';
15
- import __sfc_main$a from '../CnIconBrowser/CnIconBrowser.vue.js';
16
- import __sfc_main$9 from '../CnJsonViewer/CnJsonViewer.vue.js';
13
+ import __sfc_main$9 from '../CnFormField/CnFormField.vue.js';
14
+ import __sfc_main$8 from '../CnIcon/CnIcon.vue.js';
15
+ import __sfc_main$b from '../CnIconBrowser/CnIconBrowser.vue.js';
16
+ import __sfc_main$a from '../CnJsonViewer/CnJsonViewer.vue.js';
17
17
  import __sfc_main$2 from '../CnPropertySourceField/CnPropertySourceField.vue.js';
18
- import __sfc_main$b from '../CnResourceSelect/CnResourceSelect.vue.js';
19
- import __sfc_main$4 from '../CnSubObjectsField/CnSubObjectsField.vue.js';
18
+ import __sfc_main$c from '../CnResourceSelect/CnResourceSelect.vue.js';
19
+ import __sfc_main$3 from '../CnSearchSelect/CnSearchSelect.vue.js';
20
+ import __sfc_main$5 from '../CnSubObjectsField/CnSubObjectsField.vue.js';
20
21
  import { describeRowProblem, useChildRecords } from '../../composables/useChildRecords.js';
21
22
  import { formDraftMixin, draftKey, resolveDraftUserId, draftIndicatorText, hasDraftChanges, clearAnonymousDrafts, readDraft } from '../../composables/useFormDraft.js';
22
23
  import { splitHeldFiles, uploadHeldFiles, heldFromFailures } from '../../composables/useHeldFileUpload.js';
@@ -30,6 +31,7 @@ import { resolveCreateOverrideHandler } from '../../utils/actionsDispatcher.js';
30
31
  import { loadCurrentUserProfile } from '../../utils/currentUserProfile.js';
31
32
  import { extendsFormDeclarations, prefillDeclarations, definitionQueryParams, propertiesFromDefinitions, prefillValues, splitDynamicFormData, DYNAMIC_KEY_PREFIX } from '../../utils/dynamicProperties.js';
32
33
  import { shouldShow } from '../../utils/fieldCondition.js';
34
+ import { fillTemplate } from '../../utils/fillTemplate.js';
33
35
  import { computeAssignments } from '../../utils/formAssign.js';
34
36
  import { resolveNextcloudGroup, searchNextcloudGroups } from '../../utils/groupAutocomplete.js';
35
37
  import { durationSeconds } from '../../utils/isoDuration.js';
@@ -52,6 +54,36 @@ import { resolveNextcloudUser, searchNextcloudUsers } from '../../utils/userAuto
52
54
  */
53
55
  const WIDE_WIDGETS = ['textarea', 'json', 'code'];
54
56
 
57
+ // The widget names the form draws itself; a registered component cannot take one over.
58
+ const BUILT_IN_WIDGETS = new Set([
59
+ 'text',
60
+ 'email',
61
+ 'url',
62
+ 'number',
63
+ 'textarea',
64
+ 'switch',
65
+ 'select',
66
+ 'user',
67
+ 'group',
68
+ 'multiselect',
69
+ 'user-multiselect',
70
+ 'group-multiselect',
71
+ 'tags',
72
+ 'checkbox',
73
+ 'date',
74
+ 'datetime',
75
+ 'json',
76
+ 'code',
77
+ 'file',
78
+ 'duration',
79
+ 'child-records',
80
+ 'sub-objects',
81
+ 'property-source',
82
+ 'icon',
83
+ 'language',
84
+ 'timezone',
85
+ ]);
86
+
55
87
  /** Largest file carried inline in the saved payload; bigger ones upload after save. */
56
88
  const INLINE_FILE_CAP = 1024 * 1024;
57
89
 
@@ -241,12 +273,13 @@ var script = {
241
273
  CnFileField: __sfc_main,
242
274
  CnDurationField: __sfc_main$1,
243
275
  CnPropertySourceField: __sfc_main$2,
244
- CnReplaceValuesDialog: __sfc_main$3,
245
- CnSubObjectsField: __sfc_main$4,
246
- CnChildRecordsField: __sfc_main$5,
247
- CnDialog: __sfc_main$6,
248
- CnIcon: __sfc_main$7,
249
- CnFormField: __sfc_main$8,
276
+ CnSearchSelect: __sfc_main$3,
277
+ CnReplaceValuesDialog: __sfc_main$4,
278
+ CnSubObjectsField: __sfc_main$5,
279
+ CnChildRecordsField: __sfc_main$6,
280
+ CnDialog: __sfc_main$7,
281
+ CnIcon: __sfc_main$8,
282
+ CnFormField: __sfc_main$9,
250
283
  NcButton,
251
284
  NcNoteCard,
252
285
  NcLoadingIcon,
@@ -255,10 +288,10 @@ var script = {
255
288
  NcSelectUsers,
256
289
  NcDateTimePickerNative,
257
290
  NcCheckboxRadioSwitch,
258
- CnJsonViewer: __sfc_main$9,
259
- CnIconBrowser: __sfc_main$a,
260
- CnResourceSelect: __sfc_main$b,
261
- CnFieldHelper: __sfc_main$c,
291
+ CnJsonViewer: __sfc_main$a,
292
+ CnIconBrowser: __sfc_main$b,
293
+ CnResourceSelect: __sfc_main$c,
294
+ CnFieldHelper: __sfc_main$d,
262
295
  Plus,
263
296
  ContentSaveOutline,
264
297
  },
@@ -1237,6 +1270,28 @@ var script = {
1237
1270
  },
1238
1271
 
1239
1272
  methods: {
1273
+ /**
1274
+ * Resolve the registered component a field's `widget` names: the v2
1275
+ * registry (any entry with a `component`) first, then the legacy
1276
+ * customComponents map. Built-in widget names never resolve here.
1277
+ *
1278
+ * @param {object} field A resolved field descriptor.
1279
+ * @return {object|null} Vue component, or null.
1280
+ */
1281
+ resolveFieldComponent(field) {
1282
+ const name = field && field.widget;
1283
+ if (typeof name !== 'string' || name === '' || BUILT_IN_WIDGETS.has(name)) {
1284
+ return null
1285
+ }
1286
+ const entry = this.cnRegistry && this.cnRegistry[name];
1287
+ if (entry && entry.component) {
1288
+ return entry.component
1289
+ }
1290
+ const legacy = this.cnCustomComponents && this.cnCustomComponents[name];
1291
+ // A bare function in the legacy map is a handler, not a component.
1292
+ return legacy && typeof legacy === 'object' ? legacy : null
1293
+ },
1294
+
1240
1295
  /**
1241
1296
  * Resolve a field's reference integration widget, if any.
1242
1297
  * Returns the integration's single-entity widget component
@@ -3545,6 +3600,44 @@ var script = {
3545
3600
  * @param {object} field The field definition
3546
3601
  * @return {Array}
3547
3602
  */
3603
+ /**
3604
+ * The options of a `look: "search"` field as CnSearchSelect rows: each
3605
+ * option's own `secondary` / `icon` / `avatar`, else the field's
3606
+ * `optionSecondary` template (filled from the option), `optionIcon` and
3607
+ * `optionAvatar`.
3608
+ *
3609
+ * @spec openspec/changes/search-select-look/specs/search-select/spec.md#requirement-a-single-picker-can-take-the-search-look
3610
+ * @param {object} field The field definition.
3611
+ * @return {Array<object>}
3612
+ */
3613
+ searchSelectOptions(field) {
3614
+ const template = typeof field.optionSecondary === 'string' ? field.optionSecondary : '';
3615
+ return this.getEffectiveOptions(field).map((option) => ({
3616
+ ...option,
3617
+ secondary: option.secondary || (template ? fillTemplate(template, option).trim() : ''),
3618
+ icon: option.icon || field.optionIcon || '',
3619
+ avatar: option.avatar ?? (field.optionAvatar === true),
3620
+ }))
3621
+ },
3622
+
3623
+ /**
3624
+ * Pick the option a CnSearchSelect field emitted by its id, and hand
3625
+ * it to the select change handler.
3626
+ *
3627
+ * @spec openspec/changes/search-select-look/specs/search-select/spec.md#requirement-a-single-picker-can-take-the-search-look
3628
+ * @param {object} field The field definition.
3629
+ * @param {string|number|null} id The chosen option's id.
3630
+ */
3631
+ onSearchSelectChange(field, id) {
3632
+ if (id === null || id === undefined) {
3633
+ this.onEffectiveSelectChange(field, null);
3634
+ return
3635
+ }
3636
+ const option = this.searchSelectOptions(field).find((o) => String(o.id ?? o.value) === String(id)) || { id, label: String(id) };
3637
+ const { secondary, icon, avatar, ...plain } = option;
3638
+ this.onEffectiveSelectChange(field, plain);
3639
+ },
3640
+
3548
3641
  getEffectiveOptions(field) {
3549
3642
  if (this.isAsyncEnum(field)) {
3550
3643
  // TODO: restore to `this.asyncState[field.key]?.options || []` once on Vue 3 (buble doesn't support optional chaining)