apostrophe 3.63.1 → 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.
Files changed (150) hide show
  1. package/.eslintrc +13 -4
  2. package/CHANGELOG.md +35 -0
  3. package/defaults.js +1 -0
  4. package/modules/@apostrophecms/admin-bar/ui/apos/apps/AposAdminBar.js +7 -17
  5. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBar.vue +14 -16
  6. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarLocale.vue +1 -1
  7. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarMenu.vue +22 -15
  8. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarUser.vue +2 -2
  9. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextBar.vue +13 -8
  10. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextModeAndSettings.vue +18 -10
  11. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +4 -4
  12. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextUndoRedo.vue +14 -8
  13. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposSavingIndicator.vue +2 -1
  14. package/modules/@apostrophecms/area/ui/apos/apps/AposAreas.js +36 -54
  15. package/modules/@apostrophecms/area/ui/apos/components/AposAreaContextualMenu.vue +20 -25
  16. package/modules/@apostrophecms/area/ui/apos/components/AposAreaEditor.vue +5 -12
  17. package/modules/@apostrophecms/area/ui/apos/components/AposAreaExpandedMenu.vue +11 -3
  18. package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenu.vue +6 -6
  19. package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenuItem.vue +3 -2
  20. package/modules/@apostrophecms/area/ui/apos/components/AposAreaWidget.vue +31 -44
  21. package/modules/@apostrophecms/area/ui/apos/components/AposWidgetControls.vue +6 -6
  22. package/modules/@apostrophecms/asset/index.js +25 -12
  23. package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.config.js +3 -3
  24. package/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js +7 -1
  25. package/modules/@apostrophecms/busy/ui/apos/apps/AposBusy.js +8 -7
  26. package/modules/@apostrophecms/busy/ui/apos/components/TheAposBusy.vue +1 -1
  27. package/modules/@apostrophecms/command-menu/ui/apos/apps/AposCommandMenu.js +11 -29
  28. package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuShortcut.vue +6 -6
  29. package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +10 -7
  30. package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocEditor.vue +20 -15
  31. package/modules/@apostrophecms/doc-type/ui/apos/logic/AposDocContextMenu.js +1 -1
  32. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalize.vue +36 -27
  33. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalizeErrors.vue +3 -3
  34. package/modules/@apostrophecms/image/ui/apos/components/AposImageCropper.vue +5 -5
  35. package/modules/@apostrophecms/image/ui/apos/components/AposImageRelationshipEditor.vue +6 -6
  36. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +23 -16
  37. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerDisplay.vue +11 -11
  38. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerEditor.vue +28 -21
  39. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerSelections.vue +1 -1
  40. package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +5 -4
  41. package/modules/@apostrophecms/login/ui/apos/apps/AposLogin.js +6 -7
  42. package/modules/@apostrophecms/login/ui/apos/components/AposForgotPasswordForm.vue +3 -3
  43. package/modules/@apostrophecms/login/ui/apos/components/AposLoginForm.vue +10 -10
  44. package/modules/@apostrophecms/login/ui/apos/components/AposResetPasswordForm.vue +1 -1
  45. package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +2 -2
  46. package/modules/@apostrophecms/modal/ui/apos/apps/AposModals.js +60 -87
  47. package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +15 -11
  48. package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +8 -2
  49. package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +7 -4
  50. package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +5 -5
  51. package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +8 -8
  52. package/modules/@apostrophecms/modal/ui/apos/components/AposModalToolbar.vue +7 -7
  53. package/modules/@apostrophecms/modal/ui/apos/components/TheAposModals.vue +22 -4
  54. package/modules/@apostrophecms/modal/ui/apos/composables/AposFocus.js +95 -0
  55. package/modules/@apostrophecms/modal/ui/apos/mixins/AposDocsManagerMixin.js +2 -3
  56. package/modules/@apostrophecms/modal/ui/apos/mixins/AposEditorMixin.js +6 -0
  57. package/modules/@apostrophecms/multisite-i18n/i18n/aposMultisite/en.json +48 -0
  58. package/modules/@apostrophecms/multisite-i18n/index.js +7 -0
  59. package/modules/@apostrophecms/notification/index.js +4 -4
  60. package/modules/@apostrophecms/notification/ui/apos/apps/AposNotification.js +6 -9
  61. package/modules/@apostrophecms/notification/ui/apos/components/AposNotification.vue +12 -8
  62. package/modules/@apostrophecms/oembed/index.js +10 -3
  63. package/modules/@apostrophecms/oembed-field/ui/apos/components/AposInputOembed.vue +4 -4
  64. package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +15 -11
  65. package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +1 -1
  66. package/modules/@apostrophecms/permission/ui/apos/components/AposInputRole.vue +3 -3
  67. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +25 -17
  68. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerDisplay.vue +24 -20
  69. package/modules/@apostrophecms/piece-type/ui/apos/components/AposRelationshipEditor.vue +15 -11
  70. package/modules/@apostrophecms/polymorphic-type/index.js +0 -19
  71. package/modules/@apostrophecms/rich-text-widget/index.js +1 -0
  72. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposImageControlDialog.vue +7 -6
  73. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +31 -30
  74. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapAnchor.vue +12 -10
  75. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapLink.vue +9 -8
  76. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapStyles.vue +3 -3
  77. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapTable.vue +3 -3
  78. package/modules/@apostrophecms/schema/index.js +30 -1
  79. package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +10 -8
  80. package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +5 -3
  81. package/modules/@apostrophecms/schema/ui/apos/components/AposInputArray.vue +81 -277
  82. package/modules/@apostrophecms/schema/ui/apos/components/AposInputAttachment.vue +4 -2
  83. package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +24 -14
  84. package/modules/@apostrophecms/schema/ui/apos/components/AposInputCheckboxes.vue +7 -6
  85. package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +10 -7
  86. package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +3 -3
  87. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +5 -4
  88. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +15 -12
  89. package/modules/@apostrophecms/schema/ui/apos/components/AposInputSelect.vue +1 -1
  90. package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +16 -12
  91. package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +19 -11
  92. package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +1 -1
  93. package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +65 -21
  94. package/modules/@apostrophecms/schema/ui/apos/components/AposSubform.vue +2 -2
  95. package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +0 -4
  96. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArea.js +3 -3
  97. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArray.js +15 -4
  98. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputAttachment.js +3 -3
  99. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +7 -7
  100. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputColor.js +5 -8
  101. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputDateAndTime.js +1 -1
  102. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputObject.js +1 -1
  103. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +1 -1
  104. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +12 -9
  105. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSelect.js +2 -2
  106. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +6 -8
  107. package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +39 -13
  108. package/modules/@apostrophecms/schema/ui/apos/logic/AposSubform.js +1 -1
  109. package/modules/@apostrophecms/schema/ui/apos/mixins/AposInputMixin.js +9 -9
  110. package/modules/@apostrophecms/schema/ui/apos/scss/AposInputArray.scss +205 -0
  111. package/modules/@apostrophecms/settings/ui/apos/components/AposSettingsManager.vue +4 -4
  112. package/modules/@apostrophecms/settings/ui/apos/logic/AposSettingsManager.js +4 -4
  113. package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +5 -4
  114. package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +4 -4
  115. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonGroup.vue +6 -6
  116. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonSplit.vue +120 -113
  117. package/modules/@apostrophecms/ui/ui/apos/components/AposCheckbox.vue +19 -19
  118. package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +15 -15
  119. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +216 -191
  120. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +77 -65
  121. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +1 -1
  122. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuTip.vue +28 -50
  123. package/modules/@apostrophecms/ui/ui/apos/components/AposFile.vue +5 -5
  124. package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +4 -4
  125. package/modules/@apostrophecms/ui/ui/apos/components/AposMinMaxCount.vue +5 -5
  126. package/modules/@apostrophecms/ui/ui/apos/components/AposPager.vue +14 -8
  127. package/modules/@apostrophecms/ui/ui/apos/components/AposSlat.vue +2 -2
  128. package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +53 -59
  129. package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +2 -2
  130. package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +40 -35
  131. package/modules/@apostrophecms/ui/ui/apos/components/AposToggle.vue +2 -2
  132. package/modules/@apostrophecms/ui/ui/apos/components/AposTree.vue +9 -11
  133. package/modules/@apostrophecms/ui/ui/apos/components/AposTreeHeader.vue +5 -3
  134. package/modules/@apostrophecms/ui/ui/apos/components/AposTreeRows.vue +129 -129
  135. package/modules/@apostrophecms/ui/ui/apos/composables/AposTheme.js +11 -0
  136. package/modules/@apostrophecms/ui/ui/apos/lib/click-outside-element.js +4 -4
  137. package/modules/@apostrophecms/ui/ui/apos/lib/i18next.js +56 -50
  138. package/modules/@apostrophecms/ui/ui/apos/lib/tooltip.js +191 -0
  139. package/modules/@apostrophecms/ui/ui/apos/lib/vue.js +19 -10
  140. package/modules/@apostrophecms/ui/ui/apos/mixins/AposAdvisoryLockMixin.js +1 -1
  141. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tables.scss +1 -1
  142. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tooltips.scss +6 -22
  143. package/modules/@apostrophecms/ui/ui/apos/scss/shared/_table-rows.scss +1 -1
  144. package/modules/@apostrophecms/widget-type/index.js +8 -2
  145. package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +26 -22
  146. package/modules/@apostrophecms/widget-type/ui/apos/mixins/AposWidgetMixin.js +4 -4
  147. package/package.json +31 -44
  148. package/test/schemas.js +10 -4
  149. package/modules/@apostrophecms/ui/ui/apos/lib/localized-v-tooltip.js +0 -63
  150. package/modules/@apostrophecms/ui/ui/apos/lib/tooltip-options.js +0 -13
@@ -1,15 +1,15 @@
1
1
  <template>
2
2
  <div
3
3
  class="apos-image-cropper"
4
- @click="onImageClick"
5
4
  :style="{
6
5
  height: cropperHeight
7
6
  }"
7
+ @click="onImageClick"
8
8
  >
9
9
  <span
10
- class="apos-image-focal-point"
11
10
  ref="focalPoint"
12
11
  v-apos-tooltip="'apostrophe:focalPoint'"
12
+ class="apos-image-focal-point"
13
13
  @mousedown="onFocalPointMouseDown"
14
14
  />
15
15
  <cropper
@@ -18,13 +18,13 @@
18
18
  ? attachment._urls.uncropped.original
19
19
  : attachment._urls.original"
20
20
  :debounce="0"
21
- @ready="onCropperReady"
22
- @change="onCropperChange"
23
21
  :default-size="defaultSize"
24
22
  :default-position="defaultPosition"
25
23
  :stencil-props="stencilProps"
26
24
  :min-width="minSize[0]"
27
25
  :min-height="minSize[1]"
26
+ @ready="onCropperReady"
27
+ @change="onCropperChange"
28
28
  />
29
29
  </div>
30
30
  </template>
@@ -127,7 +127,7 @@ export default {
127
127
  left: this.docFields.data.left
128
128
  };
129
129
  },
130
- beforeDestroy() {
130
+ beforeUnmount() {
131
131
  this.$refs.focalPoint.removeEventListener('mousedown', this.onFocalPointMouseDown);
132
132
  window.removeEventListener('resize', this.onScreenResizeDebounced);
133
133
  },
@@ -65,12 +65,12 @@
65
65
  </label>
66
66
  <input
67
67
  :value="docFields.data.width"
68
- @input="inputWidth"
69
- @blur="blurInput"
70
68
  class="apos-input apos-input--text"
71
69
  type="number"
72
70
  :min="minWidth"
73
71
  :max="maxWidth"
72
+ @input="inputWidth"
73
+ @blur="blurInput"
74
74
  >
75
75
  </div>
76
76
  <div class="apos-field">
@@ -79,12 +79,12 @@
79
79
  </label>
80
80
  <input
81
81
  :value="docFields.data.height"
82
- @input="inputHeight"
83
- @blur="blurInput"
84
82
  class="apos-input apos-input--text"
85
83
  type="number"
86
84
  :min="minHeight"
87
85
  :max="maxHeight"
86
+ @input="inputHeight"
87
+ @blur="blurInput"
88
88
  >
89
89
  </div>
90
90
  </div>
@@ -122,7 +122,7 @@ export default {
122
122
  type: Array,
123
123
  default: () => ([])
124
124
  },
125
- value: {
125
+ modelValue: {
126
126
  type: Object,
127
127
  default: null
128
128
  },
@@ -141,7 +141,7 @@ export default {
141
141
  const minSize = this.getMinSize();
142
142
 
143
143
  return {
144
- original: this.value,
144
+ original: this.modelValue,
145
145
  docFields: {
146
146
  data: this.setDataValues()
147
147
  },
@@ -6,20 +6,25 @@
6
6
 
7
7
  <template>
8
8
  <AposModal
9
- :modal="modal" :modal-title="modalTitle"
9
+ :modal="modal"
10
+ :modal-title="modalTitle"
10
11
  class="apos-media-manager"
11
- @inactive="modal.active = false" @show-modal="modal.showModal = true"
12
- @esc="confirmAndCancel" @no-modal="$emit('safe-close')"
12
+ @inactive="modal.active = false"
13
+ @show-modal="modal.showModal = true"
14
+ @esc="confirmAndCancel"
15
+ @no-modal="$emit('safe-close')"
13
16
  >
14
17
  <template v-if="relationshipField" #secondaryControls>
15
18
  <AposButton
16
- type="default" label="apostrophe:cancel"
19
+ type="default"
20
+ label="apostrophe:cancel"
17
21
  @click="confirmAndCancel"
18
22
  />
19
23
  </template>
20
24
  <template v-else #secondaryControls>
21
25
  <AposButton
22
- type="default" label="apostrophe:exit"
26
+ type="default"
27
+ label="apostrophe:exit"
23
28
  @click="confirmAndCancel"
24
29
  />
25
30
  </template>
@@ -68,22 +73,22 @@
68
73
  <template #bodyMain>
69
74
  <AposMediaManagerDisplay
70
75
  ref="display"
76
+ v-model:checked="checked"
71
77
  :accept="accept"
72
78
  :items="items"
73
79
  :module-options="moduleOptions"
80
+ :max-reached="maxReached()"
81
+ :options="{
82
+ disableUnchecked: maxReached(),
83
+ hideCheckboxes: !relationshipField
84
+ }"
74
85
  @edit="updateEditing"
75
- v-model="checked"
76
86
  @select="select"
77
87
  @select-series="selectSeries"
78
88
  @select-another="selectAnother"
79
89
  @upload-started="uploading = true"
80
90
  @upload-complete="completeUploading"
81
91
  @create-placeholder="createPlaceholder"
82
- :max-reached="maxReached()"
83
- :options="{
84
- disableUnchecked: maxReached(),
85
- hideCheckboxes: !relationshipField
86
- }"
87
92
  />
88
93
  </template>
89
94
  </AposModalBody>
@@ -100,13 +105,15 @@
100
105
  :selected="selected"
101
106
  :is-modified="isModified"
102
107
  :module-labels="moduleLabels"
103
- @back="updateEditing(null)" @saved="updateMedia"
108
+ @back="updateEditing(null)"
109
+ @saved="updateMedia"
104
110
  @modified="editorModified"
105
111
  />
106
112
  <AposMediaManagerSelections
107
- :items="selected"
108
- @clear="clearSelected" @edit="updateEditing"
109
113
  v-show="!editing"
114
+ :items="selected"
115
+ @clear="clearSelected"
116
+ @edit="updateEditing"
110
117
  />
111
118
  </div>
112
119
  </AposModalRail>
@@ -233,7 +240,7 @@ export default {
233
240
  apos.bus.$on('content-changed', this.onContentChanged);
234
241
  apos.bus.$on('command-menu-manager-close', this.confirmAndCancel);
235
242
  },
236
- destroyed() {
243
+ unmounted() {
237
244
  apos.bus.$off('content-changed', this.onContentChanged);
238
245
  apos.bus.$off('command-menu-manager-close', this.confirmAndCancel);
239
246
  },
@@ -451,7 +458,7 @@ export default {
451
458
  </script>
452
459
 
453
460
  <style lang="scss" scoped>
454
- .apos-media-manager ::v-deep .apos-media-manager-toolbar {
461
+ .apos-media-manager :deep(.apos-media-manager-toolbar) {
455
462
  z-index: $z-index-manager-toolbar;
456
463
  position: relative;
457
464
  }
@@ -11,14 +11,16 @@
11
11
  @create-placeholder="$emit('create-placeholder', $event)"
12
12
  />
13
13
  <div
14
- class="apos-media-manager-display__cell" v-for="item in items"
14
+ v-for="item in items"
15
15
  :key="idFor(item)"
16
+ class="apos-media-manager-display__cell"
16
17
  :class="{'apos-is-selected': checked.includes(item._id)}"
17
18
  :style="getCellStyles(item)"
18
19
  >
19
20
  <div class="apos-media-manager-display__checkbox">
20
21
  <AposCheckbox
21
22
  v-show="item._id !== 'placeholder' && !options.hideCheckboxes"
23
+ v-model="checkedProxy"
22
24
  tabindex="-1"
23
25
  :field="{
24
26
  name: item._id,
@@ -28,10 +30,10 @@
28
30
  disabled: options.disableUnchecked && !checked.includes(item._id)
29
31
  }"
30
32
  :choice="{ value: item._id }"
31
- v-model="checkedProxy"
32
33
  />
33
34
  </div>
34
35
  <button
36
+ :id="`btn-${item._id}`"
35
37
  :disabled="
36
38
  item._id === 'placeholder' ||
37
39
  (options.disableUnchecked && !checked.includes(item._id))
@@ -40,7 +42,6 @@
40
42
  @click.exact="$emit('select', item._id)"
41
43
  @click.shift="$emit('select-series', item._id)"
42
44
  @click.meta="$emit('select-another', item._id)"
43
- ref="btns"
44
45
  >
45
46
  <div
46
47
  v-if="item.dimensions"
@@ -66,7 +67,6 @@
66
67
  <button
67
68
  disabled="true"
68
69
  class="apos-media-manager-display__select"
69
- ref="btns"
70
70
  />
71
71
  </div>
72
72
  </div>
@@ -78,10 +78,6 @@ import cuid from 'cuid';
78
78
 
79
79
  export default {
80
80
  // Custom model to handle the v-model connection on the parent.
81
- model: {
82
- prop: 'checked',
83
- event: 'change'
84
- },
85
81
  props: {
86
82
  maxReached: {
87
83
  type: Boolean,
@@ -118,10 +114,10 @@ export default {
118
114
  }
119
115
  },
120
116
  emits: [
117
+ 'update:checked',
121
118
  'select',
122
119
  'select-series',
123
120
  'select-another',
124
- 'change',
125
121
  'upload-started',
126
122
  'upload-complete',
127
123
  'create-placeholder'
@@ -133,7 +129,7 @@ export default {
133
129
  return this.checked;
134
130
  },
135
131
  set(val) {
136
- this.$emit('change', val);
132
+ this.$emit('update:checked', val);
137
133
  }
138
134
  }
139
135
  },
@@ -141,7 +137,11 @@ export default {
141
137
  getPlaceholderStyles(item) {
142
138
  // Account for whether the refs have been set by the v-for or if on the
143
139
  // placeholder.
144
- const btn = Array.isArray(this.$refs.btns) ? this.$refs.btns[0] : this.$refs.btns;
140
+ /* const btn = Array.isArray(this.$refs.btns) ? this.$refs.btns[0] : this.$refs.btns; */
141
+ const btn = this.items.length && this.$el.querySelector(`#btn-${this.items[0]._id}`);
142
+ if (!btn) {
143
+ return {};
144
+ }
145
145
  const {
146
146
  width: parentWidth,
147
147
  height: parentHeight
@@ -5,24 +5,25 @@
5
5
  'apos-is-replacing': showReplace
6
6
  }"
7
7
  >
8
- <div class="apos-media-editor__inner" v-if="activeMedia">
8
+ <div v-if="activeMedia" class="apos-media-editor__inner">
9
9
  <div class="apos-media-editor__thumb-wrapper">
10
10
  <img
11
11
  v-if="activeMedia.attachment && activeMedia.attachment._urls"
12
12
  class="apos-media-editor__thumb"
13
- :src="activeMedia.attachment._urls[restoreOnly ? 'one-sixth' : 'one-third']" :alt="activeMedia.description"
13
+ :src="activeMedia.attachment._urls[restoreOnly ? 'one-sixth' : 'one-third']"
14
+ :alt="activeMedia.description"
14
15
  >
15
16
  </div>
16
17
  <ul class="apos-media-editor__details">
17
- <li class="apos-media-editor__detail" v-if="createdDate">
18
+ <li v-if="createdDate" class="apos-media-editor__detail">
18
19
  {{ $t('apostrophe:mediaCreatedDate', { createdDate }) }}
19
20
  </li>
20
- <li class="apos-media-editor__detail" v-if="fileSize">
21
+ <li v-if="fileSize" class="apos-media-editor__detail">
21
22
  {{ $t('apostrophe:mediaFileSize', { fileSize }) }}
22
23
  </li>
23
24
  <li
24
- class="apos-media-editor__detail"
25
25
  v-if="activeMedia.attachment && activeMedia.attachment.width"
26
+ class="apos-media-editor__detail"
26
27
  >
27
28
  {{
28
29
  $t('apostrophe:mediaDimensions', {
@@ -35,21 +36,24 @@
35
36
  <ul class="apos-media-editor__links">
36
37
  <li class="apos-media-editor__link" aria-hidden="true">
37
38
  <AposButton
38
- type="quiet" label="apostrophe:replace"
39
- @click="showReplace = true"
39
+ type="quiet"
40
+ label="apostrophe:replace"
40
41
  :disabled="isArchived"
42
+ @click="showReplace = true"
41
43
  />
42
44
  </li>
43
- <li class="apos-media-editor__link" v-if="activeMedia.attachment && activeMedia.attachment._urls">
45
+ <li v-if="activeMedia.attachment && activeMedia.attachment._urls" class="apos-media-editor__link">
44
46
  <AposButton
45
- type="quiet" label="apostrophe:view"
46
- @click="viewMedia"
47
+ type="quiet"
48
+ label="apostrophe:view"
47
49
  :disabled="isArchived"
50
+ @click="viewMedia"
48
51
  />
49
52
  </li>
50
- <li class="apos-media-editor__link" v-if="activeMedia.attachment && activeMedia.attachment._urls">
53
+ <li v-if="activeMedia.attachment && activeMedia.attachment._urls" class="apos-media-editor__link">
51
54
  <AposButton
52
- type="quiet" label="apostrophe:download"
55
+ type="quiet"
56
+ label="apostrophe:download"
53
57
  :href="!isArchived ? activeMedia.attachment._urls.original : false"
54
58
  :disabled="isArchived"
55
59
  download
@@ -58,16 +62,16 @@
58
62
  </ul>
59
63
  <AposSchema
60
64
  v-if="docFields.data.title !== undefined"
61
- :schema="schema"
65
+ ref="schema"
62
66
  v-model="docFields"
67
+ :schema="schema"
63
68
  :modifiers="['small', 'inverted']"
64
69
  :trigger-validation="triggerValidation"
65
70
  :doc-id="docFields.data._id"
66
71
  :following-values="followingValues()"
72
+ :server-errors="serverErrors"
67
73
  @validate="triggerValidate"
68
74
  @reset="$emit('modified', false)"
69
- ref="schema"
70
- :server-errors="serverErrors"
71
75
  />
72
76
  </div>
73
77
  <AposModalLip :refresh="lipKey">
@@ -84,13 +88,15 @@
84
88
  modifiers: [ 'small', 'no-motion' ]
85
89
  }"
86
90
  :menu="moreMenu"
87
- @item-clicked="moreMenuHandler"
88
91
  menu-placement="top-end"
92
+ @item-clicked="moreMenuHandler"
89
93
  />
90
94
  <AposButton
91
- @click="save" class="apos-media-editor__save"
95
+ class="apos-media-editor__save"
92
96
  :disabled="docFields.hasErrors"
93
- :label="restoreOnly ? 'apostrophe:restore' : 'apostrophe:save'" type="primary"
97
+ :label="restoreOnly ? 'apostrophe:restore' : 'apostrophe:save'"
98
+ type="primary"
99
+ @click="save"
94
100
  />
95
101
  </div>
96
102
  </AposModalLip>
@@ -216,6 +222,7 @@ export default {
216
222
  },
217
223
  watch: {
218
224
  'docFields.data': {
225
+ deep: true,
219
226
  handler(newData, oldData) {
220
227
  this.$nextTick(() => {
221
228
  // If either old or new state are an empty object, it's not "modified."
@@ -401,7 +408,7 @@ export default {
401
408
  max-height: 100%;
402
409
  }
403
410
 
404
- .apos-media-editor ::v-deep .apos-field {
411
+ .apos-media-editor :deep(.apos-field) {
405
412
  margin-bottom: $spacing-double;
406
413
  }
407
414
 
@@ -421,7 +428,7 @@ export default {
421
428
  display: flex;
422
429
  margin-bottom: $spacing-triple;
423
430
 
424
- ::v-deep .apos-button--quiet {
431
+ :deep(.apos-button--quiet) {
425
432
  display: inline;
426
433
  }
427
434
  }
@@ -433,7 +440,7 @@ export default {
433
440
  }
434
441
  }
435
442
 
436
- ::v-deep [data-apos-field='attachment'] {
443
+ :deep([data-apos-field='attachment']) {
437
444
  .apos-media-editor:not(.apos-is-replacing) & {
438
445
  position: absolute;
439
446
  left: -999rem;
@@ -91,7 +91,7 @@ export default {
91
91
  margin-bottom: $spacing-double;
92
92
  }
93
93
 
94
- .apos-media-manager-selections__heading ::v-deep .apos-button {
94
+ .apos-media-manager-selections__heading :deep(.apos-button) {
95
95
  margin-left: $spacing-base;
96
96
  }
97
97
 
@@ -28,13 +28,14 @@
28
28
  </div>
29
29
  </div>
30
30
  <input
31
- type="file" class="apos-sr-only"
32
31
  ref="upload"
33
- @input="uploadMedia"
32
+ type="file"
33
+ class="apos-sr-only"
34
34
  :accept="accept"
35
35
  multiple="true"
36
36
  :disabled="disabled"
37
37
  tabindex="-1"
38
+ @input="uploadMedia"
38
39
  >
39
40
  </label>
40
41
  </template>
@@ -49,7 +50,7 @@ export default {
49
50
  },
50
51
  disabled: {
51
52
  type: Boolean,
52
- required: false
53
+ default: false
53
54
  },
54
55
  accept: {
55
56
  type: String,
@@ -82,7 +83,7 @@ export default {
82
83
  mounted() {
83
84
  apos.bus.$on('command-menu-manager-create-new', this.create);
84
85
  },
85
- destroyed() {
86
+ unmounted() {
86
87
  apos.bus.$off('command-menu-manager-create-new', this.create);
87
88
  },
88
89
  methods: {
@@ -1,15 +1,14 @@
1
- import Vue from 'Modules/@apostrophecms/ui/lib/vue';
1
+ import createApp from 'Modules/@apostrophecms/ui/lib/vue';
2
2
 
3
3
  export default function() {
4
+ const component = apos.vueComponents.TheAposLogin;
4
5
  const el = document.querySelector('#apos-login');
5
6
  if (el) {
6
- return new Vue({
7
- el,
8
- render: function (h) {
9
- return h('TheAposLogin');
10
- }
11
- });
7
+ const app = createApp(component);
8
+
9
+ app.mount(el);
12
10
  }
11
+
13
12
  apos.bus.$on('admin-menu-click', async (item) => {
14
13
  if (item !== '@apostrophecms/login-logout') {
15
14
  return;
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
- class="apos-login-form"
4
3
  v-if="passwordResetEnabled"
4
+ class="apos-login-form"
5
5
  >
6
6
  <TheAposLoginHeader
7
7
  :env="context.env"
@@ -23,8 +23,8 @@
23
23
  />
24
24
  <form v-else @submit.prevent="submit">
25
25
  <AposSchema
26
- :schema="schema"
27
26
  v-model="doc"
27
+ :schema="schema"
28
28
  />
29
29
  <AposButton
30
30
  data-apos-test="pwdResetRequestSubmit"
@@ -61,7 +61,7 @@ export default {
61
61
  }
62
62
  }
63
63
 
64
- .apos-login-form__submit ::v-deep .apos-button {
64
+ .apos-login-form__submit :deep(.apos-button) {
65
65
  height: 47px;
66
66
  }
67
67
  </style>
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <div
3
+ v-if="phase === 'beforeSubmit' || phase === 'uponSubmit'"
3
4
  key="1"
4
5
  class="apos-login-form"
5
- v-if="phase === 'beforeSubmit' || phase === 'uponSubmit'"
6
6
  >
7
7
  <TheAposLoginHeader
8
8
  :env="context.env"
@@ -11,30 +11,30 @@
11
11
  />
12
12
 
13
13
  <div class="apos-login-form__body">
14
- <form @submit.prevent="submit" data-apos-test="loginForm">
14
+ <form data-apos-test="loginForm" @submit.prevent="submit">
15
15
  <AposSchema
16
- :schema="schema"
17
16
  v-model="doc"
17
+ :schema="schema"
18
18
  />
19
19
  <a
20
- href="#"
21
20
  v-if="passwordResetEnabled"
21
+ href="#"
22
22
  class="apos-login-form__link"
23
23
  @click.prevent="$emit('set-stage', 'forgotPassword')"
24
24
  >{{ $t('apostrophe:loginResetPassword') }}</a>
25
25
  <Component
26
+ v-bind="getRequirementProps(requirement.name)"
27
+ :is="requirement.component"
26
28
  v-for="requirement in beforeSubmitRequirements"
27
29
  :key="requirement.name"
28
- :is="requirement.component"
29
- v-bind="getRequirementProps(requirement.name)"
30
30
  @done="requirementDone(requirement, $event)"
31
31
  @block="requirementBlock(requirement)"
32
32
  />
33
33
  <template v-if="phase === 'uponSubmit'">
34
34
  <Component
35
+ :is="requirement.component"
35
36
  v-for="requirement in uponSubmitRequirements"
36
37
  :key="requirement.name"
37
- :is="requirement.component"
38
38
  v-bind="getRequirementProps(requirement.name)"
39
39
  @done="requirementDone(requirement, $event)"
40
40
  @block="requirementBlock(requirement)"
@@ -55,9 +55,9 @@
55
55
  </div>
56
56
  </div>
57
57
  <div
58
+ v-else-if="activeSoloRequirement"
58
59
  key="2"
59
60
  class="apos-login-form"
60
- v-else-if="activeSoloRequirement"
61
61
  >
62
62
  <TheAposLoginHeader
63
63
  :env="context.env"
@@ -67,9 +67,9 @@
67
67
  />
68
68
  <div class="apos-login-form__body">
69
69
  <Component
70
- v-if="!fetchingRequirementProps"
71
70
  v-bind="getRequirementProps(activeSoloRequirement.name)"
72
71
  :is="activeSoloRequirement.component"
72
+ v-if="!fetchingRequirementProps"
73
73
  :success="activeSoloRequirement.success"
74
74
  :error="activeSoloRequirement.error"
75
75
  @done="requirementDone(activeSoloRequirement, $event)"
@@ -115,7 +115,7 @@ export default {
115
115
  }
116
116
  }
117
117
 
118
- .apos-login-form__submit ::v-deep .apos-button {
118
+ .apos-login-form__submit :deep(.apos-button) {
119
119
  height: 47px;
120
120
  }
121
121
  </style>
@@ -64,7 +64,7 @@ export default {
64
64
  flex-direction: column;
65
65
  }
66
66
  }
67
- .apos-login-form__submit ::v-deep .apos-button {
67
+ .apos-login-form__submit :deep(.apos-button) {
68
68
  height: 47px;
69
69
  }
70
70
  </style>
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <transition name="fade-stage">
3
3
  <div
4
+ v-show="loaded"
4
5
  class="apos-login apos-theme-dark"
5
6
  data-apos-test="loginForm"
6
- v-show="loaded"
7
7
  :class="themeClass"
8
8
  >
9
9
  <transition name="fade-outer">
@@ -46,7 +46,7 @@
46
46
  </transition>
47
47
  </div>
48
48
  <transition name="fade-outer">
49
- <div class="apos-login__footer" v-show="loaded">
49
+ <div v-show="loaded" class="apos-login__footer">
50
50
  <AposLogo class="apos-login__logo" />
51
51
  <label class="apos-login__project-version">
52
52
  Version {{ context.version }}