apostrophe 3.63.2 → 4.0.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/.eslintrc +13 -4
- package/CHANGELOG.md +21 -0
- package/defaults.js +1 -0
- package/modules/@apostrophecms/admin-bar/ui/apos/apps/AposAdminBar.js +7 -17
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBar.vue +14 -16
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarLocale.vue +1 -1
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarMenu.vue +22 -15
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarUser.vue +2 -2
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextBar.vue +13 -8
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextModeAndSettings.vue +18 -10
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +4 -4
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextUndoRedo.vue +14 -8
- package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposSavingIndicator.vue +2 -1
- package/modules/@apostrophecms/area/ui/apos/apps/AposAreas.js +36 -54
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaContextualMenu.vue +20 -25
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaEditor.vue +5 -12
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaExpandedMenu.vue +11 -3
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenu.vue +6 -6
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenuItem.vue +3 -2
- package/modules/@apostrophecms/area/ui/apos/components/AposAreaWidget.vue +31 -44
- package/modules/@apostrophecms/area/ui/apos/components/AposWidgetControls.vue +6 -6
- package/modules/@apostrophecms/asset/index.js +25 -12
- package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.config.js +3 -3
- package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js +7 -1
- package/modules/@apostrophecms/busy/ui/apos/apps/AposBusy.js +8 -7
- package/modules/@apostrophecms/busy/ui/apos/components/TheAposBusy.vue +1 -1
- package/modules/@apostrophecms/command-menu/ui/apos/apps/AposCommandMenu.js +11 -29
- package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuShortcut.vue +6 -6
- package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +10 -7
- package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocEditor.vue +20 -15
- package/modules/@apostrophecms/doc-type/ui/apos/logic/AposDocContextMenu.js +1 -1
- package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalize.vue +36 -27
- package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalizeErrors.vue +3 -3
- package/modules/@apostrophecms/image/ui/apos/components/AposImageCropper.vue +5 -5
- package/modules/@apostrophecms/image/ui/apos/components/AposImageRelationshipEditor.vue +6 -6
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +23 -16
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerDisplay.vue +11 -11
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerEditor.vue +28 -21
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerSelections.vue +1 -1
- package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +5 -4
- package/modules/@apostrophecms/login/ui/apos/apps/AposLogin.js +6 -7
- package/modules/@apostrophecms/login/ui/apos/components/AposForgotPasswordForm.vue +3 -3
- package/modules/@apostrophecms/login/ui/apos/components/AposLoginForm.vue +10 -10
- package/modules/@apostrophecms/login/ui/apos/components/AposResetPasswordForm.vue +1 -1
- package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +2 -2
- package/modules/@apostrophecms/modal/ui/apos/apps/AposModals.js +60 -87
- package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +15 -11
- package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +8 -2
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +7 -4
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +5 -5
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +8 -8
- package/modules/@apostrophecms/modal/ui/apos/components/AposModalToolbar.vue +7 -7
- package/modules/@apostrophecms/modal/ui/apos/components/TheAposModals.vue +22 -4
- package/modules/@apostrophecms/modal/ui/apos/composables/AposFocus.js +95 -0
- package/modules/@apostrophecms/modal/ui/apos/mixins/AposDocsManagerMixin.js +2 -3
- package/modules/@apostrophecms/modal/ui/apos/mixins/AposEditorMixin.js +6 -0
- package/modules/@apostrophecms/multisite-i18n/i18n/aposMultisite/en.json +48 -0
- package/modules/@apostrophecms/multisite-i18n/index.js +7 -0
- package/modules/@apostrophecms/notification/index.js +4 -4
- package/modules/@apostrophecms/notification/ui/apos/apps/AposNotification.js +6 -9
- package/modules/@apostrophecms/notification/ui/apos/components/AposNotification.vue +12 -8
- package/modules/@apostrophecms/oembed-field/ui/apos/components/AposInputOembed.vue +4 -4
- package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +15 -11
- package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +1 -1
- package/modules/@apostrophecms/permission/ui/apos/components/AposInputRole.vue +3 -3
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +25 -17
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerDisplay.vue +24 -20
- package/modules/@apostrophecms/piece-type/ui/apos/components/AposRelationshipEditor.vue +15 -11
- package/modules/@apostrophecms/rich-text-widget/index.js +1 -0
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposImageControlDialog.vue +7 -6
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +31 -30
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapAnchor.vue +12 -10
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapLink.vue +9 -8
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapStyles.vue +3 -3
- package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapTable.vue +3 -3
- package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +10 -8
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +5 -3
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputArray.vue +81 -277
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputAttachment.vue +4 -2
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +24 -14
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputCheckboxes.vue +7 -6
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +10 -7
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +3 -3
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +5 -4
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +15 -12
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSelect.vue +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +16 -12
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +19 -11
- package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +1 -1
- package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +65 -21
- package/modules/@apostrophecms/schema/ui/apos/components/AposSubform.vue +2 -2
- package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +0 -4
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArea.js +3 -3
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArray.js +15 -4
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputAttachment.js +3 -3
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +7 -7
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputColor.js +5 -8
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputDateAndTime.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputObject.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +12 -9
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSelect.js +2 -2
- package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +6 -8
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +39 -13
- package/modules/@apostrophecms/schema/ui/apos/logic/AposSubform.js +1 -1
- package/modules/@apostrophecms/schema/ui/apos/mixins/AposInputMixin.js +9 -9
- package/modules/@apostrophecms/schema/ui/apos/scss/AposInputArray.scss +205 -0
- package/modules/@apostrophecms/settings/ui/apos/components/AposSettingsManager.vue +4 -4
- package/modules/@apostrophecms/settings/ui/apos/logic/AposSettingsManager.js +4 -4
- package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +5 -4
- package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +4 -4
- package/modules/@apostrophecms/ui/ui/apos/components/AposButtonGroup.vue +6 -6
- package/modules/@apostrophecms/ui/ui/apos/components/AposButtonSplit.vue +120 -113
- package/modules/@apostrophecms/ui/ui/apos/components/AposCheckbox.vue +19 -19
- package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +15 -15
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +216 -191
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +77 -65
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +1 -1
- package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuTip.vue +28 -50
- package/modules/@apostrophecms/ui/ui/apos/components/AposFile.vue +5 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +4 -4
- package/modules/@apostrophecms/ui/ui/apos/components/AposMinMaxCount.vue +5 -5
- package/modules/@apostrophecms/ui/ui/apos/components/AposPager.vue +14 -8
- package/modules/@apostrophecms/ui/ui/apos/components/AposSlat.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +53 -59
- package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +40 -35
- package/modules/@apostrophecms/ui/ui/apos/components/AposToggle.vue +2 -2
- package/modules/@apostrophecms/ui/ui/apos/components/AposTree.vue +9 -11
- package/modules/@apostrophecms/ui/ui/apos/components/AposTreeHeader.vue +5 -3
- package/modules/@apostrophecms/ui/ui/apos/components/AposTreeRows.vue +129 -129
- package/modules/@apostrophecms/ui/ui/apos/composables/AposTheme.js +11 -0
- package/modules/@apostrophecms/ui/ui/apos/lib/click-outside-element.js +4 -4
- package/modules/@apostrophecms/ui/ui/apos/lib/i18next.js +56 -50
- package/modules/@apostrophecms/ui/ui/apos/lib/tooltip.js +191 -0
- package/modules/@apostrophecms/ui/ui/apos/lib/vue.js +19 -10
- package/modules/@apostrophecms/ui/ui/apos/mixins/AposAdvisoryLockMixin.js +1 -1
- package/modules/@apostrophecms/ui/ui/apos/scss/global/_tables.scss +1 -1
- package/modules/@apostrophecms/ui/ui/apos/scss/global/_tooltips.scss +6 -22
- package/modules/@apostrophecms/ui/ui/apos/scss/shared/_table-rows.scss +1 -1
- package/modules/@apostrophecms/widget-type/index.js +8 -2
- package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +26 -22
- package/modules/@apostrophecms/widget-type/ui/apos/mixins/AposWidgetMixin.js +4 -4
- package/package.json +31 -44
- package/modules/@apostrophecms/ui/ui/apos/lib/localized-v-tooltip.js +0 -63
- package/modules/@apostrophecms/ui/ui/apos/lib/tooltip-options.js +0 -13
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<AposInputWrapper
|
|
3
|
-
:field="field"
|
|
4
|
-
:
|
|
3
|
+
:field="field"
|
|
4
|
+
:error="effectiveError"
|
|
5
|
+
:uid="uid"
|
|
6
|
+
:items="next"
|
|
5
7
|
:display-options="displayOptions"
|
|
6
8
|
:modifiers="modifiers"
|
|
7
9
|
>
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
<AposMinMaxCount
|
|
21
23
|
v-if="field.max > 1"
|
|
22
24
|
:field="field"
|
|
23
|
-
:value="next"
|
|
25
|
+
:model-value="next"
|
|
24
26
|
/>
|
|
25
27
|
</template>
|
|
26
28
|
<template #body>
|
|
@@ -28,20 +30,21 @@
|
|
|
28
30
|
<div class="apos-input-relationship__input-wrapper">
|
|
29
31
|
<input
|
|
30
32
|
v-if="!modifiers.includes('no-search')"
|
|
33
|
+
:id="uid"
|
|
34
|
+
v-model="searchTerm"
|
|
31
35
|
class="apos-input apos-input--text apos-input--relationship"
|
|
32
|
-
|
|
36
|
+
type="text"
|
|
33
37
|
:placeholder="$t(placeholder)"
|
|
34
38
|
:disabled="field.readOnly || limitReached"
|
|
35
39
|
:required="field.required"
|
|
36
|
-
|
|
40
|
+
tabindex="0"
|
|
37
41
|
@input="input"
|
|
38
42
|
@focus="input"
|
|
39
43
|
@focusout="handleFocusOut"
|
|
40
|
-
tabindex="0"
|
|
41
44
|
>
|
|
42
45
|
<AposButton
|
|
43
|
-
class="apos-input-relationship__button"
|
|
44
46
|
v-if="field.browse !== false"
|
|
47
|
+
class="apos-input-relationship__button"
|
|
45
48
|
:disabled="field.readOnly || limitReached"
|
|
46
49
|
:label="browseLabel"
|
|
47
50
|
:modifiers="buttonModifiers"
|
|
@@ -50,25 +53,25 @@
|
|
|
50
53
|
/>
|
|
51
54
|
</div>
|
|
52
55
|
<AposSlatList
|
|
53
|
-
class="apos-input-relationship__items"
|
|
54
56
|
v-if="next.length"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
:value="next"
|
|
57
|
+
class="apos-input-relationship__items"
|
|
58
|
+
:model-value="next"
|
|
58
59
|
:duplicate="duplicate"
|
|
59
60
|
:disabled="field.readOnly"
|
|
60
61
|
:relationship-schema="field.schema"
|
|
61
62
|
:editor-label="field.editorLabel"
|
|
62
63
|
:editor-icon="field.editorIcon"
|
|
64
|
+
@update:model-value="updateSelected"
|
|
65
|
+
@item-clicked="editRelationship"
|
|
63
66
|
/>
|
|
64
67
|
<AposSearchList
|
|
65
68
|
:list="searchList"
|
|
66
|
-
@select="updateSelected"
|
|
67
69
|
:selected-items="next"
|
|
68
70
|
:icon="field.suggestionIcon"
|
|
69
71
|
:icon-size="field.suggestionIconSize"
|
|
70
72
|
:fields="field.suggestionFields"
|
|
71
73
|
disabled-tooltip="apostrophe:publishBeforeUsingTooltip"
|
|
74
|
+
@select="updateSelected"
|
|
72
75
|
/>
|
|
73
76
|
</div>
|
|
74
77
|
</template>
|
|
@@ -1,35 +1,40 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<AposInputWrapper
|
|
3
|
-
:modifiers="modifiers"
|
|
4
|
-
:
|
|
3
|
+
:modifiers="modifiers"
|
|
4
|
+
:field="field"
|
|
5
|
+
:error="effectiveError"
|
|
6
|
+
:uid="uid"
|
|
5
7
|
:display-options="displayOptions"
|
|
6
8
|
:meta="fieldMeta"
|
|
7
9
|
>
|
|
8
10
|
<template #body>
|
|
9
11
|
<div :class="wrapperClasses">
|
|
10
12
|
<span
|
|
11
|
-
class="apos-input__slug-locale-prefix"
|
|
12
13
|
v-if="localePrefix"
|
|
13
|
-
@click="passFocus"
|
|
14
14
|
v-apos-tooltip="'apostrophe:cannotChangeSlugPrefix'"
|
|
15
|
+
class="apos-input__slug-locale-prefix"
|
|
16
|
+
@click="passFocus"
|
|
15
17
|
>
|
|
16
18
|
{{ localePrefix }}
|
|
17
19
|
</span>
|
|
18
20
|
<input
|
|
21
|
+
:id="uid"
|
|
22
|
+
ref="input"
|
|
23
|
+
v-model="next"
|
|
19
24
|
:class="classes"
|
|
20
|
-
|
|
25
|
+
:type="type"
|
|
21
26
|
:placeholder="$t(field.placeholder)"
|
|
22
|
-
|
|
23
|
-
:
|
|
24
|
-
:
|
|
25
|
-
ref="input"
|
|
27
|
+
:disabled="field.readOnly"
|
|
28
|
+
:required="field.required"
|
|
29
|
+
:tabindex="tabindex"
|
|
26
30
|
:autocomplete="field.autocomplete"
|
|
31
|
+
@keydown.enter="emitReturn"
|
|
27
32
|
>
|
|
28
33
|
<component
|
|
34
|
+
:is="icon"
|
|
29
35
|
v-if="icon"
|
|
30
36
|
:size="iconSize"
|
|
31
37
|
class="apos-input-icon"
|
|
32
|
-
:is="icon"
|
|
33
38
|
/>
|
|
34
39
|
</div>
|
|
35
40
|
</template>
|
|
@@ -40,8 +45,7 @@
|
|
|
40
45
|
import AposInputSlugLogic from '../logic/AposInputSlug';
|
|
41
46
|
export default {
|
|
42
47
|
name: 'AposInputSlug',
|
|
43
|
-
mixins: [ AposInputSlugLogic ]
|
|
44
|
-
emits: [ 'return' ]
|
|
48
|
+
mixins: [ AposInputSlugLogic ]
|
|
45
49
|
};
|
|
46
50
|
</script>
|
|
47
51
|
|
|
@@ -1,38 +1,46 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<AposInputWrapper
|
|
3
|
-
:modifiers="modifiers"
|
|
4
|
-
:
|
|
3
|
+
:modifiers="modifiers"
|
|
4
|
+
:field="field"
|
|
5
|
+
:error="effectiveError"
|
|
6
|
+
:uid="uid"
|
|
5
7
|
:display-options="displayOptions"
|
|
6
8
|
:meta="fieldMeta"
|
|
7
9
|
>
|
|
8
10
|
<template #body>
|
|
9
11
|
<div class="apos-input-wrapper">
|
|
10
12
|
<textarea
|
|
13
|
+
v-if="field.textarea && field.type === 'string'"
|
|
14
|
+
v-model="next"
|
|
15
|
+
rows="5"
|
|
16
|
+
:id="uid"
|
|
11
17
|
:class="classes"
|
|
12
|
-
|
|
13
|
-
v-model="next" :placeholder="$t(field.placeholder)"
|
|
14
|
-
@keydown.enter="enterEmit"
|
|
18
|
+
:placeholder="$t(field.placeholder)"
|
|
15
19
|
:disabled="field.readOnly"
|
|
16
20
|
:required="field.required"
|
|
17
|
-
:
|
|
21
|
+
:tabindex="tabindex"
|
|
18
22
|
:autocomplete="field.autocomplete"
|
|
23
|
+
@keydown.enter="enterEmit"
|
|
19
24
|
/>
|
|
20
25
|
<input
|
|
21
|
-
v-else
|
|
22
|
-
|
|
26
|
+
v-else
|
|
27
|
+
:id="uid"
|
|
28
|
+
v-model="next"
|
|
29
|
+
:class="classes"
|
|
30
|
+
:type="type"
|
|
23
31
|
:placeholder="$t(field.placeholder)"
|
|
24
|
-
@keydown.enter="enterEmit"
|
|
25
32
|
:disabled="field.readOnly || field.disabled"
|
|
26
33
|
:required="field.required"
|
|
27
|
-
:
|
|
34
|
+
:tabindex="tabindex"
|
|
28
35
|
:step="step"
|
|
29
36
|
:autocomplete="field.autocomplete"
|
|
37
|
+
@keydown.enter="enterEmit"
|
|
30
38
|
>
|
|
31
39
|
<component
|
|
40
|
+
:is="icon"
|
|
32
41
|
v-if="icon"
|
|
33
42
|
:size="iconSize"
|
|
34
43
|
class="apos-input-icon"
|
|
35
|
-
:is="icon"
|
|
36
44
|
/>
|
|
37
45
|
</div>
|
|
38
46
|
</template>
|
|
@@ -24,21 +24,23 @@
|
|
|
24
24
|
-->
|
|
25
25
|
<template>
|
|
26
26
|
<component
|
|
27
|
-
class="apos-schema"
|
|
28
27
|
:is="fieldStyle === 'table' ? 'tr' : 'div'"
|
|
28
|
+
class="apos-schema"
|
|
29
|
+
:class="classes"
|
|
29
30
|
>
|
|
30
31
|
<slot name="before" />
|
|
31
32
|
<component
|
|
32
|
-
v-for="field in schema" :key="field.name.concat(field._id ?? '')"
|
|
33
|
-
:data-apos-field="field.name"
|
|
34
33
|
:is="fieldStyle === 'table' ? 'td' : 'div'"
|
|
34
|
+
v-for="field in schema"
|
|
35
|
+
:key="field.name.concat(field._id ?? '')"
|
|
36
|
+
:data-apos-field="field.name"
|
|
35
37
|
:style="(fieldStyle === 'table' && field.columnStyle) || {}"
|
|
36
|
-
|
|
38
|
+
:class="{'apos-field--hidden': !displayComponent(field)}"
|
|
37
39
|
>
|
|
38
40
|
<component
|
|
39
|
-
v-show="displayComponent(field)"
|
|
40
|
-
v-model="fieldState[field.name]"
|
|
41
41
|
:is="fieldComponentMap[field.type]"
|
|
42
|
+
:ref="field.name"
|
|
43
|
+
v-model="fieldState[field.name]"
|
|
42
44
|
:following-values="followingValues[field.name]"
|
|
43
45
|
:condition-met="conditionalFields?.if[field.name]"
|
|
44
46
|
:field="fields[field.name].field"
|
|
@@ -48,7 +50,25 @@
|
|
|
48
50
|
:trigger-validation="triggerValidation"
|
|
49
51
|
:server-error="fields[field.name].serverError"
|
|
50
52
|
:doc-id="docId"
|
|
53
|
+
:generation="generation"
|
|
54
|
+
@update-doc-data="onUpdateDocData"
|
|
55
|
+
@validate="emitValidate()"
|
|
56
|
+
/>
|
|
57
|
+
<component
|
|
58
|
+
:is="fieldComponentMap[field.type]"
|
|
59
|
+
v-if="hasCompareMeta"
|
|
60
|
+
v-show="displayComponent(field)"
|
|
51
61
|
:ref="field.name"
|
|
62
|
+
v-model="compareMetaState[field.name]"
|
|
63
|
+
:following-values="followingValues[field.name]"
|
|
64
|
+
:condition-met="conditionalFields?.if[field.name]"
|
|
65
|
+
:field="fields[field.name].field"
|
|
66
|
+
:meta="meta"
|
|
67
|
+
:modifiers="fields[field.name].modifiers"
|
|
68
|
+
:display-options="getDisplayOptions(field.name)"
|
|
69
|
+
:trigger-validation="triggerValidation"
|
|
70
|
+
:server-error="fields[field.name].serverError"
|
|
71
|
+
:doc-id="docId"
|
|
52
72
|
:generation="generation"
|
|
53
73
|
@update-doc-data="onUpdateDocData"
|
|
54
74
|
@validate="emitValidate()"
|
|
@@ -67,33 +87,57 @@ export default {
|
|
|
67
87
|
</script>
|
|
68
88
|
|
|
69
89
|
<style lang="scss" scoped>
|
|
70
|
-
.apos-schema
|
|
90
|
+
.apos-schema :deep(.apos-field__wrapper) {
|
|
71
91
|
max-width: $input-max-width;
|
|
72
92
|
}
|
|
73
93
|
|
|
74
|
-
.apos-schema
|
|
94
|
+
.apos-schema :deep(.apos-field__wrapper.apos-field__wrapper--full-width) {
|
|
75
95
|
max-width: inherit;
|
|
76
96
|
}
|
|
77
97
|
|
|
78
|
-
.apos-schema
|
|
98
|
+
.apos-schema :deep(img) {
|
|
79
99
|
max-width: 100%;
|
|
80
100
|
}
|
|
81
101
|
|
|
82
|
-
.apos-field {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
102
|
+
.apos-schema .apos-field--hidden {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.apos-schema :deep(.apos-field) {
|
|
107
|
+
margin-bottom: $spacing-quadruple;
|
|
108
|
+
&.apos-field--small,
|
|
109
|
+
&.apos-field--micro,
|
|
110
|
+
&.apos-field--margin-micro {
|
|
111
|
+
margin-bottom: $spacing-double;
|
|
112
|
+
}
|
|
113
|
+
&.apos-field--margin-none {
|
|
114
|
+
margin-bottom: 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.apos-field .apos-schema :deep(.apos-toolbar) {
|
|
119
|
+
margin-bottom: 0;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.apos-schema.apos-schema--compare {
|
|
123
|
+
& > ::v-deep [data-apos-field] {
|
|
124
|
+
display: flex;
|
|
125
|
+
|
|
126
|
+
& > .apos-field__wrapper {
|
|
127
|
+
flex-grow: 1;
|
|
128
|
+
flex-basis: 50%;
|
|
129
|
+
border-right: 1px solid var(--a-base-9);
|
|
130
|
+
padding-right: 20px;
|
|
89
131
|
}
|
|
90
|
-
|
|
91
|
-
|
|
132
|
+
& > .apos-field__wrapper + .apos-field__wrapper {
|
|
133
|
+
border-right: none;
|
|
134
|
+
padding-right: 0;
|
|
135
|
+
padding-left: 20px;
|
|
92
136
|
}
|
|
93
|
-
}
|
|
94
137
|
|
|
95
|
-
|
|
96
|
-
|
|
138
|
+
& .apos-field__label {
|
|
139
|
+
word-break: break-all;
|
|
140
|
+
}
|
|
97
141
|
}
|
|
98
142
|
}
|
|
99
143
|
</style>
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
:data-apos-test-name="subform.name"
|
|
14
14
|
:trigger-validation="triggerValidation"
|
|
15
15
|
:schema="schema"
|
|
16
|
-
:value="docFields"
|
|
16
|
+
:model-value="docFields"
|
|
17
17
|
:following-values="followingValues()"
|
|
18
18
|
:conditional-fields="conditionalFields"
|
|
19
19
|
:server-errors="serverErrors"
|
|
20
20
|
:modifiers="['small']"
|
|
21
|
-
@
|
|
21
|
+
@update:model-value="updateDocFields"
|
|
22
22
|
@validate="triggerValidate"
|
|
23
23
|
/>
|
|
24
24
|
<div class="apos-subform__controls">
|
|
@@ -16,7 +16,7 @@ export default {
|
|
|
16
16
|
},
|
|
17
17
|
data () {
|
|
18
18
|
return {
|
|
19
|
-
next: this.
|
|
19
|
+
next: this.modelValue.data || this.getEmptyValue(),
|
|
20
20
|
error: false,
|
|
21
21
|
// This is just meant to be sufficient to prevent unintended collisions
|
|
22
22
|
// in the UI between id attributes
|
|
@@ -70,8 +70,8 @@ export default {
|
|
|
70
70
|
};
|
|
71
71
|
},
|
|
72
72
|
watchValue () {
|
|
73
|
-
this.error = this.
|
|
74
|
-
this.next = this.
|
|
73
|
+
this.error = this.modelValue.error;
|
|
74
|
+
this.next = this.modelValue.data || this.getEmptyValue();
|
|
75
75
|
},
|
|
76
76
|
validate(value) {
|
|
77
77
|
if (this.field.required) {
|
|
@@ -6,11 +6,11 @@ import { getConditionTypesObject } from 'Modules/@apostrophecms/schema/lib/condi
|
|
|
6
6
|
import cuid from 'cuid';
|
|
7
7
|
import { klona } from 'klona';
|
|
8
8
|
import { get } from 'lodash';
|
|
9
|
-
import
|
|
9
|
+
import { Sortable } from 'sortablejs-vue3';
|
|
10
10
|
|
|
11
11
|
export default {
|
|
12
12
|
name: 'AposInputArray',
|
|
13
|
-
components: { draggable },
|
|
13
|
+
components: { draggable: Sortable },
|
|
14
14
|
mixins: [
|
|
15
15
|
AposInputMixin,
|
|
16
16
|
AposInputFollowingMixin,
|
|
@@ -124,6 +124,17 @@ export default {
|
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
methods: {
|
|
127
|
+
moveUpdate({
|
|
128
|
+
oldIndex, newIndex
|
|
129
|
+
}) {
|
|
130
|
+
if (oldIndex !== newIndex) {
|
|
131
|
+
this.items = this.items.map((elem, index) => {
|
|
132
|
+
return index === oldIndex
|
|
133
|
+
? this.items[newIndex]
|
|
134
|
+
: (index === newIndex && this.items[oldIndex]) || elem;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
},
|
|
127
138
|
getItemsSchema(_id) {
|
|
128
139
|
return (this.items.find((item) => item._id === _id))?.schemaInput.data;
|
|
129
140
|
},
|
|
@@ -199,8 +210,8 @@ export default {
|
|
|
199
210
|
},
|
|
200
211
|
getNext() {
|
|
201
212
|
// Next should consistently be an array.
|
|
202
|
-
return (this.
|
|
203
|
-
? this.
|
|
213
|
+
return (this.modelValue && Array.isArray(this.modelValue.data))
|
|
214
|
+
? this.modelValue.data
|
|
204
215
|
: (this.field.def || []);
|
|
205
216
|
},
|
|
206
217
|
disableAdd() {
|
|
@@ -9,8 +9,8 @@ export default {
|
|
|
9
9
|
return {
|
|
10
10
|
// Next should consistently be an object or null (an attachment field with
|
|
11
11
|
// no value yet is null, per server side).
|
|
12
|
-
next: (this.
|
|
13
|
-
? this.
|
|
12
|
+
next: (this.modelValue && (typeof this.modelValue.data === 'object'))
|
|
13
|
+
? this.modelValue.data : (this.field.def || null),
|
|
14
14
|
disabled: false,
|
|
15
15
|
uploading: false
|
|
16
16
|
};
|
|
@@ -61,7 +61,7 @@ export default {
|
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
this.$emit('upload-complete');
|
|
64
|
-
this.
|
|
64
|
+
this.modelValue.data = attachment;
|
|
65
65
|
} catch (error) {
|
|
66
66
|
console.error('Error uploading file.', error);
|
|
67
67
|
const msg = error.body && error.body.message ? error.body.message : this.$t('apostrophe:uploadError');
|
|
@@ -6,15 +6,15 @@ export default {
|
|
|
6
6
|
name: 'AposInputCheckboxes',
|
|
7
7
|
mixins: [ AposInputMixin, AposInputChoicesMixin ],
|
|
8
8
|
beforeMount () {
|
|
9
|
-
this.
|
|
9
|
+
this.modelValue.data = Array.isArray(this.modelValue.data) ? this.modelValue.data : [];
|
|
10
10
|
},
|
|
11
11
|
methods: {
|
|
12
12
|
getChoiceId(uid, value) {
|
|
13
13
|
return uid + value.replace(/\s/g, '');
|
|
14
14
|
},
|
|
15
15
|
watchValue () {
|
|
16
|
-
this.error = this.
|
|
17
|
-
this.next = this.
|
|
16
|
+
this.error = this.modelValue.error;
|
|
17
|
+
this.next = this.modelValue.data || [];
|
|
18
18
|
},
|
|
19
19
|
validate(values) {
|
|
20
20
|
// The choices and values should always be arrays.
|
|
@@ -51,17 +51,17 @@ export default {
|
|
|
51
51
|
},
|
|
52
52
|
selectItems(choice) {
|
|
53
53
|
if (choice.value === '__all') {
|
|
54
|
-
this.
|
|
54
|
+
this.modelValue.data = this.choices.length === this.modelValue.data.length
|
|
55
55
|
? []
|
|
56
56
|
: this.choices.map(({ value }) => value);
|
|
57
57
|
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
if (this.
|
|
62
|
-
this.
|
|
61
|
+
if (this.modelValue.data.includes(choice.value)) {
|
|
62
|
+
this.modelValue.data = this.modelValue.data.filter((val) => val !== choice.value);
|
|
63
63
|
} else {
|
|
64
|
-
this.
|
|
64
|
+
this.modelValue.data.push(choice.value);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import AposInputMixin from 'Modules/@apostrophecms/schema/mixins/AposInputMixin';
|
|
3
|
-
import Picker from '@
|
|
3
|
+
import { Sketch as Picker } from '@ckpack/vue-color';
|
|
4
4
|
import tinycolor from 'tinycolor2';
|
|
5
5
|
|
|
6
6
|
export default {
|
|
@@ -31,7 +31,7 @@ export default {
|
|
|
31
31
|
return {
|
|
32
32
|
label: this.field.label,
|
|
33
33
|
type: 'color',
|
|
34
|
-
color: this.
|
|
34
|
+
color: this.modelValue.data || ''
|
|
35
35
|
};
|
|
36
36
|
},
|
|
37
37
|
format() {
|
|
@@ -40,10 +40,7 @@ export default {
|
|
|
40
40
|
: this.defaultFormat;
|
|
41
41
|
},
|
|
42
42
|
pickerOptions() {
|
|
43
|
-
|
|
44
|
-
if (this.field.options && this.field.options.pickerOptions) {
|
|
45
|
-
fieldOptions = this.field.options.pickerOptions;
|
|
46
|
-
}
|
|
43
|
+
const fieldOptions = this.field.options?.pickerOptions || {};
|
|
47
44
|
return Object.assign(this.defaultPickerOptions, fieldOptions);
|
|
48
45
|
},
|
|
49
46
|
|
|
@@ -63,7 +60,7 @@ export default {
|
|
|
63
60
|
},
|
|
64
61
|
mounted() {
|
|
65
62
|
if (!this.next) {
|
|
66
|
-
this.next =
|
|
63
|
+
this.next = '';
|
|
67
64
|
}
|
|
68
65
|
},
|
|
69
66
|
methods: {
|
|
@@ -92,7 +89,7 @@ export default {
|
|
|
92
89
|
return color.isValid() ? false : 'Error';
|
|
93
90
|
},
|
|
94
91
|
clear() {
|
|
95
|
-
this.next =
|
|
92
|
+
this.next = '';
|
|
96
93
|
}
|
|
97
94
|
}
|
|
98
95
|
};
|
|
@@ -106,7 +106,7 @@ export default {
|
|
|
106
106
|
},
|
|
107
107
|
// Return next at mount or when generation changes
|
|
108
108
|
getNext() {
|
|
109
|
-
return this.
|
|
109
|
+
return this.modelValue?.data ? this.modelValue.data : (this.field.def || {});
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import AposInputMixin from 'Modules/@apostrophecms/schema/mixins/AposInputMixin';
|
|
2
2
|
import AposInputChoicesMixin from 'Modules/@apostrophecms/schema/mixins/AposInputChoicesMixin';
|
|
3
|
-
import InformationIcon from 'vue-material-design-icons/Information.vue';
|
|
3
|
+
import InformationIcon from '@apostrophecms/vue-material-design-icons/Information.vue';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
name: 'AposInputRadio',
|
|
@@ -6,8 +6,8 @@ export default {
|
|
|
6
6
|
mixins: [ AposInputMixin ],
|
|
7
7
|
emits: [ 'input' ],
|
|
8
8
|
data () {
|
|
9
|
-
const next = (this.
|
|
10
|
-
? klona(this.
|
|
9
|
+
const next = (this.modelValue && Array.isArray(this.modelValue.data))
|
|
10
|
+
? klona(this.modelValue.data) : (klona(this.field.def) || []);
|
|
11
11
|
|
|
12
12
|
// Remember relationship subfield values even if a document
|
|
13
13
|
// is temporarily deselected, easing the user's pain if they
|
|
@@ -99,7 +99,7 @@ export default {
|
|
|
99
99
|
return widgetOptions.minSize || [];
|
|
100
100
|
},
|
|
101
101
|
duplicate () {
|
|
102
|
-
return this.
|
|
102
|
+
return this.modelValue.duplicate ? 'apos-input--error' : null;
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
watch: {
|
|
@@ -209,9 +209,9 @@ export default {
|
|
|
209
209
|
}, 200);
|
|
210
210
|
},
|
|
211
211
|
watchValue () {
|
|
212
|
-
this.error = this.
|
|
212
|
+
this.error = this.modelValue.error;
|
|
213
213
|
// Ensure the internal state is an array.
|
|
214
|
-
this.next = Array.isArray(this.
|
|
214
|
+
this.next = Array.isArray(this.modelValue.data) ? this.modelValue.data : [];
|
|
215
215
|
},
|
|
216
216
|
async choose () {
|
|
217
217
|
const result = await apos.modal.execute(this.chooserComponent, {
|
|
@@ -231,14 +231,17 @@ export default {
|
|
|
231
231
|
schema: this.field.schema,
|
|
232
232
|
item,
|
|
233
233
|
title: item.title,
|
|
234
|
-
value: item._fields
|
|
234
|
+
'model-value': item._fields
|
|
235
235
|
});
|
|
236
236
|
|
|
237
237
|
if (result) {
|
|
238
238
|
const index = this.next.findIndex(_item => _item._id === item._id);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
239
|
+
|
|
240
|
+
this.next = this.next.map((item, i) => {
|
|
241
|
+
return i === index ? {
|
|
242
|
+
...item,
|
|
243
|
+
_fields: result
|
|
244
|
+
} : item;
|
|
242
245
|
});
|
|
243
246
|
}
|
|
244
247
|
},
|
|
@@ -12,13 +12,13 @@ export default {
|
|
|
12
12
|
},
|
|
13
13
|
data() {
|
|
14
14
|
return {
|
|
15
|
-
next: (this.
|
|
15
|
+
next: (this.modelValue.data == null) ? null : this.modelValue.data,
|
|
16
16
|
choices: []
|
|
17
17
|
};
|
|
18
18
|
},
|
|
19
19
|
computed: {
|
|
20
20
|
classes () {
|
|
21
|
-
return [ this.
|
|
21
|
+
return [ this.modelValue.duplicate && 'apos-input--error' ];
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
methods: {
|