apostrophe 3.63.3 → 4.1.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 (184) hide show
  1. package/.eslintrc +13 -4
  2. package/CHANGELOG.md +37 -5
  3. package/defaults.js +2 -1
  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 +16 -16
  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/attachment/index.js +2 -1
  26. package/modules/@apostrophecms/attachment/public/img/missing-icon.svg +14 -0
  27. package/modules/@apostrophecms/busy/ui/apos/apps/AposBusy.js +8 -7
  28. package/modules/@apostrophecms/busy/ui/apos/components/TheAposBusy.vue +1 -1
  29. package/modules/@apostrophecms/command-menu/ui/apos/apps/AposCommandMenu.js +11 -29
  30. package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuKey.vue +1 -1
  31. package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuShortcut.vue +6 -6
  32. package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +10 -7
  33. package/modules/@apostrophecms/doc-type/index.js +34 -13
  34. package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocContextMenu.vue +3 -3
  35. package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocEditor.vue +20 -15
  36. package/modules/@apostrophecms/doc-type/ui/apos/logic/AposDocContextMenu.js +1 -1
  37. package/modules/@apostrophecms/i18n/i18n/en.json +13 -0
  38. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalize.vue +209 -33
  39. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalizeErrors.vue +3 -3
  40. package/modules/@apostrophecms/image/ui/apos/components/AposImageCropper.vue +5 -5
  41. package/modules/@apostrophecms/image/ui/apos/components/AposImageRelationshipEditor.vue +6 -6
  42. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +23 -16
  43. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerDisplay.vue +11 -11
  44. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerEditor.vue +28 -21
  45. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerSelections.vue +4 -3
  46. package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +5 -4
  47. package/modules/@apostrophecms/login/index.js +18 -1
  48. package/modules/@apostrophecms/login/ui/apos/apps/AposLogin.js +6 -7
  49. package/modules/@apostrophecms/login/ui/apos/components/AposForgotPasswordForm.vue +3 -3
  50. package/modules/@apostrophecms/login/ui/apos/components/AposLoginForm.vue +10 -10
  51. package/modules/@apostrophecms/login/ui/apos/components/AposResetPasswordForm.vue +3 -3
  52. package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +2 -2
  53. package/modules/@apostrophecms/login/ui/apos/logic/AposLoginForm.js +1 -16
  54. package/modules/@apostrophecms/modal/ui/apos/apps/AposModals.js +60 -87
  55. package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +15 -11
  56. package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +17 -11
  57. package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +7 -4
  58. package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +9 -9
  59. package/modules/@apostrophecms/modal/ui/apos/components/AposModalLip.vue +2 -2
  60. package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +8 -8
  61. package/modules/@apostrophecms/modal/ui/apos/components/AposModalTabs.vue +4 -3
  62. package/modules/@apostrophecms/modal/ui/apos/components/AposModalToolbar.vue +7 -7
  63. package/modules/@apostrophecms/modal/ui/apos/components/TheAposModals.vue +22 -4
  64. package/modules/@apostrophecms/modal/ui/apos/composables/AposFocus.js +95 -0
  65. package/modules/@apostrophecms/modal/ui/apos/mixins/AposDocsManagerMixin.js +2 -3
  66. package/modules/@apostrophecms/modal/ui/apos/mixins/AposEditorMixin.js +6 -0
  67. package/modules/@apostrophecms/notification/index.js +4 -4
  68. package/modules/@apostrophecms/notification/ui/apos/apps/AposNotification.js +6 -9
  69. package/modules/@apostrophecms/notification/ui/apos/components/AposNotification.vue +12 -8
  70. package/modules/@apostrophecms/notification/ui/apos/components/TheAposNotifications.vue +4 -2
  71. package/modules/@apostrophecms/oembed-field/ui/apos/components/AposInputOembed.vue +12 -10
  72. package/modules/@apostrophecms/page/index.js +1 -0
  73. package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +15 -11
  74. package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +1 -1
  75. package/modules/@apostrophecms/permission/ui/apos/components/AposInputRole.vue +3 -3
  76. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +25 -17
  77. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerDisplay.vue +24 -20
  78. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerSelectBox.vue +9 -5
  79. package/modules/@apostrophecms/piece-type/ui/apos/components/AposRelationshipEditor.vue +15 -11
  80. package/modules/@apostrophecms/rich-text-widget/index.js +1 -0
  81. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposImageControlDialog.vue +7 -6
  82. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +31 -30
  83. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapAnchor.vue +12 -10
  84. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapButton.vue +1 -1
  85. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapImage.vue +1 -1
  86. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapLink.vue +9 -8
  87. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapStyles.vue +3 -3
  88. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapTable.vue +3 -3
  89. package/modules/@apostrophecms/schema/index.js +69 -8
  90. package/modules/@apostrophecms/schema/lib/addFieldTypes.js +1 -1
  91. package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +10 -8
  92. package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +5 -3
  93. package/modules/@apostrophecms/schema/ui/apos/components/AposInputArray.vue +81 -277
  94. package/modules/@apostrophecms/schema/ui/apos/components/AposInputAttachment.vue +4 -2
  95. package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +24 -14
  96. package/modules/@apostrophecms/schema/ui/apos/components/AposInputCheckboxes.vue +7 -6
  97. package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +10 -7
  98. package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +3 -3
  99. package/modules/@apostrophecms/schema/ui/apos/components/AposInputPassword.vue +6 -4
  100. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +5 -4
  101. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRange.vue +9 -6
  102. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +15 -12
  103. package/modules/@apostrophecms/schema/ui/apos/components/AposInputSelect.vue +1 -1
  104. package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +16 -12
  105. package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +19 -11
  106. package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +15 -12
  107. package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +75 -22
  108. package/modules/@apostrophecms/schema/ui/apos/components/AposSearchList.vue +1 -1
  109. package/modules/@apostrophecms/schema/ui/apos/components/AposSubform.vue +2 -2
  110. package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +0 -4
  111. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArea.js +3 -3
  112. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputArray.js +15 -4
  113. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputAttachment.js +3 -3
  114. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +7 -7
  115. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputColor.js +5 -8
  116. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputDateAndTime.js +1 -1
  117. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputObject.js +1 -1
  118. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +1 -1
  119. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +12 -9
  120. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputSelect.js +3 -3
  121. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +7 -9
  122. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputWrapper.js +4 -4
  123. package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +42 -13
  124. package/modules/@apostrophecms/schema/ui/apos/logic/AposSubform.js +1 -1
  125. package/modules/@apostrophecms/schema/ui/apos/mixins/AposInputMixin.js +9 -9
  126. package/modules/@apostrophecms/schema/ui/apos/scss/AposInputArray.scss +205 -0
  127. package/modules/@apostrophecms/settings/ui/apos/components/AposSettingsManager.vue +5 -5
  128. package/modules/@apostrophecms/settings/ui/apos/logic/AposSettingsManager.js +4 -4
  129. package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +5 -4
  130. package/modules/@apostrophecms/task/index.js +2 -0
  131. package/modules/@apostrophecms/translation/index.js +233 -0
  132. package/modules/@apostrophecms/translation/ui/apos/components/AposTranslationIndicator.vue +84 -0
  133. package/modules/@apostrophecms/ui/ui/apos/components/AposAvatar.vue +2 -1
  134. package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +4 -4
  135. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonGroup.vue +6 -6
  136. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonSplit.vue +120 -113
  137. package/modules/@apostrophecms/ui/ui/apos/components/AposCellButton.vue +2 -1
  138. package/modules/@apostrophecms/ui/ui/apos/components/AposCellLabels.vue +49 -5
  139. package/modules/@apostrophecms/ui/ui/apos/components/AposCheckbox.vue +19 -19
  140. package/modules/@apostrophecms/ui/ui/apos/components/AposCloudUploadIcon.vue +10 -5
  141. package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +15 -15
  142. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +214 -191
  143. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +77 -65
  144. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +1 -1
  145. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuTip.vue +28 -50
  146. package/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue +3 -3
  147. package/modules/@apostrophecms/ui/ui/apos/components/AposFile.vue +5 -5
  148. package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +4 -4
  149. package/modules/@apostrophecms/ui/ui/apos/components/AposIndicator.vue +1 -1
  150. package/modules/@apostrophecms/ui/ui/apos/components/AposLabel.vue +1 -1
  151. package/modules/@apostrophecms/ui/ui/apos/components/AposMinMaxCount.vue +5 -5
  152. package/modules/@apostrophecms/ui/ui/apos/components/AposPager.vue +14 -8
  153. package/modules/@apostrophecms/ui/ui/apos/components/AposPagerDots.vue +2 -1
  154. package/modules/@apostrophecms/ui/ui/apos/components/AposSlat.vue +13 -12
  155. package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +53 -59
  156. package/modules/@apostrophecms/ui/ui/apos/components/AposSpinner.vue +2 -2
  157. package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +2 -2
  158. package/modules/@apostrophecms/ui/ui/apos/components/AposTag.vue +3 -2
  159. package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +40 -35
  160. package/modules/@apostrophecms/ui/ui/apos/components/AposTagListItem.vue +2 -1
  161. package/modules/@apostrophecms/ui/ui/apos/components/AposToggle.vue +2 -2
  162. package/modules/@apostrophecms/ui/ui/apos/components/AposTree.vue +9 -11
  163. package/modules/@apostrophecms/ui/ui/apos/components/AposTreeHeader.vue +5 -3
  164. package/modules/@apostrophecms/ui/ui/apos/components/AposTreeRows.vue +129 -129
  165. package/modules/@apostrophecms/ui/ui/apos/composables/AposTheme.js +11 -0
  166. package/modules/@apostrophecms/ui/ui/apos/lib/click-outside-element.js +4 -4
  167. package/modules/@apostrophecms/ui/ui/apos/lib/i18next.js +56 -50
  168. package/modules/@apostrophecms/ui/ui/apos/lib/tooltip.js +191 -0
  169. package/modules/@apostrophecms/ui/ui/apos/lib/vue.js +19 -10
  170. package/modules/@apostrophecms/ui/ui/apos/mixins/AposAdvisoryLockMixin.js +1 -1
  171. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tables.scss +1 -1
  172. package/modules/@apostrophecms/ui/ui/apos/scss/global/_theme.scss +1 -0
  173. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tooltips.scss +6 -22
  174. package/modules/@apostrophecms/ui/ui/apos/scss/shared/_table-rows.scss +1 -1
  175. package/modules/@apostrophecms/widget-type/index.js +8 -2
  176. package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +26 -22
  177. package/modules/@apostrophecms/widget-type/ui/apos/mixins/AposWidgetMixin.js +4 -4
  178. package/package.json +31 -44
  179. package/test/attachments.js +5 -0
  180. package/test/schemas.js +138 -0
  181. package/test/translation.js +538 -0
  182. package/test-lib/util.js +21 -0
  183. package/modules/@apostrophecms/ui/ui/apos/lib/localized-v-tooltip.js +0 -63
  184. package/modules/@apostrophecms/ui/ui/apos/lib/tooltip-options.js +0 -13
@@ -2,13 +2,14 @@
2
2
  <div role="alert" :class="classList">
3
3
  <span class="apos-notification__indicator">
4
4
  <AposIndicator
5
- :icon="iconComponent" class="apos-notification__indicator__icon"
5
+ :icon="iconComponent"
6
+ class="apos-notification__indicator__icon"
6
7
  :icon-size="notification.icon ? 16 : 12"
7
8
  />
8
9
  </span>
9
10
  <span
10
- class="apos-notification__label"
11
11
  ref="label"
12
+ class="apos-notification__label"
12
13
  >
13
14
  {{ localize(notification.message) }}
14
15
  <!-- OK to use index as key because buttons are constant for the lifetime of the notification -->
@@ -24,15 +25,17 @@
24
25
  </button>
25
26
  </span>
26
27
  <div
27
- class="apos-notification__progress"
28
28
  v-if="job && job.total"
29
+ class="apos-notification__progress"
29
30
  >
30
31
  <div class="apos-notification__progress-bar">
31
32
  <div
32
- class="apos-notification__progress-now" role="progressbar"
33
+ class="apos-notification__progress-now"
34
+ role="progressbar"
33
35
  :aria-valuenow="job.processed || 0"
34
36
  :style="`width: ${job.percentage + '%'}`"
35
- aria-valuemin="0" :aria-valuemax="job.total"
37
+ aria-valuemin="0"
38
+ :aria-valuemax="job.total"
36
39
  />
37
40
  </div>
38
41
  <span class="apos-notification__progress-value">
@@ -41,7 +44,8 @@
41
44
  </div>
42
45
  <button
43
46
  v-if="!job"
44
- @click="close" class="apos-notification__button"
47
+ class="apos-notification__button"
48
+ @click="close"
45
49
  >
46
50
  <Close
47
51
  class="apos-notification__close-icon"
@@ -53,7 +57,7 @@
53
57
  </template>
54
58
 
55
59
  <script>
56
- import Close from 'vue-material-design-icons/Close.vue';
60
+ import Close from '@apostrophecms/vue-material-design-icons/Close.vue';
57
61
 
58
62
  export default {
59
63
  name: 'AposNotification',
@@ -290,7 +294,7 @@ export default {
290
294
  line-height: var(--a-line-tallest);
291
295
  }
292
296
 
293
- .apos-notification__label ::v-deep button {
297
+ .apos-notification__label :deep(button) {
294
298
  @include apos-button-reset();
295
299
  text-decoration: underline;
296
300
  text-decoration-color: var(--a-success);
@@ -1,7 +1,9 @@
1
1
  <template>
2
2
  <transition-group
3
- name="list" tag="div"
4
- class="apos-notifications" :class="themeClass"
3
+ name="list"
4
+ tag="div"
5
+ class="apos-notifications"
6
+ :class="themeClass"
5
7
  >
6
8
  <AposNotification
7
9
  v-for="notification in notifications"
@@ -1,35 +1,37 @@
1
1
  <template>
2
2
  <AposInputWrapper
3
- :modifiers="modifiers" :field="field"
4
- :error="effectiveError" :uid="uid"
3
+ :modifiers="modifiers"
4
+ :field="field"
5
+ :error="effectiveError"
6
+ :uid="uid"
5
7
  :display-options="displayOptions"
6
8
  >
7
9
  <template #body>
8
10
  <div class="apos-input-wrapper">
9
11
  <input
10
- :class="classes"
12
+ :id="uid"
11
13
  v-model="next.url"
14
+ :class="classes"
12
15
  type="url"
13
16
  :placeholder="$t(field.placeholder)"
14
17
  :disabled="field.readOnly"
15
18
  :readonly="tempReadOnly"
16
19
  :required="field.required"
17
- :id="uid"
18
20
  :tabindex="tabindex"
19
21
  >
20
22
  <component
23
+ :is="icon"
21
24
  v-if="icon"
22
25
  :size="iconSize"
23
26
  class="apos-input-icon"
24
- :is="icon"
25
27
  />
26
28
  <!-- eslint-disable vue/no-v-html -->
27
29
  <div
28
30
  v-if="!error && oembedResult.html"
29
- v-html="oembedResult.html"
30
31
  class="apos-input__embed"
31
32
  :class="{ 'apos-is-dynamic': !!dynamicRatio }"
32
33
  :style="{ paddingTop: dynamicRatio && `${(dynamicRatio * 100)}%` }"
34
+ v-html="oembedResult.html"
33
35
  />
34
36
  </div>
35
37
  <!-- eslint-enable vue/no-v-html -->
@@ -46,8 +48,8 @@ export default {
46
48
  emits: [ 'return' ],
47
49
  data () {
48
50
  return {
49
- next: (this.value && this.value.data)
50
- ? { ...this.value.data } : {},
51
+ next: (this.modelValue && this.modelValue.data)
52
+ ? { ...this.modelValue.data } : {},
51
53
  oembedResult: {},
52
54
  dynamicRatio: '',
53
55
  oembedError: null,
@@ -149,7 +151,7 @@ export default {
149
151
 
150
152
  <style lang="scss" scoped>
151
153
  .apos-input__embed {
152
- ::v-deep iframe {
154
+ :deep(iframe) {
153
155
  max-width: 100%;
154
156
  }
155
157
 
@@ -158,7 +160,7 @@ export default {
158
160
  width: 100%;
159
161
  height: 0;
160
162
 
161
- ::v-deep iframe {
163
+ :deep(iframe) {
162
164
  position: absolute;
163
165
  top: 0;
164
166
  left: 0;
@@ -702,6 +702,7 @@ database.`);
702
702
  editRole: 'admin',
703
703
  publishRole: 'admin'
704
704
  },
705
+ permissions: {},
705
706
  find(req) {
706
707
  return [];
707
708
  },
@@ -10,12 +10,14 @@
10
10
  <template #secondaryControls>
11
11
  <AposButton
12
12
  v-if="relationshipField"
13
- type="default" label="apostrophe:cancel"
13
+ type="default"
14
+ label="apostrophe:cancel"
14
15
  @click="confirmAndCancel"
15
16
  />
16
17
  <AposButton
17
18
  v-else
18
- type="default" label="apostrophe:exit"
19
+ type="default"
20
+ label="apostrophe:exit"
19
21
  @click="confirmAndCancel"
20
22
  />
21
23
  </template>
@@ -28,12 +30,14 @@
28
30
  v-if="relationshipField"
29
31
  :menu="moreMenu"
30
32
  menu-placement="bottom-end"
31
- @item-clicked="moreMenuHandler"
32
33
  :button="moreMenuButton"
34
+ @item-clicked="moreMenuHandler"
33
35
  />
34
36
  <AposButton
35
- v-else-if="canCreate" type="primary"
36
- label="apostrophe:newPage" @click="create()"
37
+ v-else-if="canCreate"
38
+ type="primary"
39
+ label="apostrophe:newPage"
40
+ @click="create()"
37
41
  />
38
42
  <AposButton
39
43
  v-if="relationshipField"
@@ -49,37 +53,37 @@
49
53
  <div class="apos-pages-manager__relationship__counts">
50
54
  <AposMinMaxCount
51
55
  :field="relationshipField"
52
- :value="checkedDocs"
56
+ :model-value="checkedDocs"
53
57
  />
54
58
  </div>
55
59
  <AposSlatList
56
60
  class="apos-pages-manager__relationship__items"
57
- @input="setCheckedDocs"
58
- :value="checkedDocs"
61
+ :model-value="checkedDocs"
62
+ @update:model-value="setCheckedDocs"
59
63
  />
60
64
  </div>
61
65
  </AposModalRail>
62
66
  </template>
63
67
  <template #main>
64
68
  <AposModalBody>
65
- <template #bodyHeader v-if="!relationshipField">
69
+ <template v-if="!relationshipField" #bodyHeader>
66
70
  <AposModalToolbar>
67
71
  <template #rightControls>
68
72
  <AposContextMenu
69
73
  :menu="pageSetMenu"
70
74
  menu-placement="bottom-end"
71
- @item-clicked="pageSetMenuSelection = $event"
72
75
  :button="pageSetMenuButton"
76
+ @item-clicked="pageSetMenuSelection = $event"
73
77
  />
74
78
  </template>
75
79
  </AposModalToolbar>
76
80
  </template>
77
81
  <template #bodyMain>
78
82
  <AposTree
83
+ v-model:checked="checked"
79
84
  :items="items"
80
85
  :headers="headers"
81
86
  :icons="icons"
82
- v-model="checked"
83
87
  :options="treeOptions"
84
88
  :module-options="moduleOptions"
85
89
  @update="update"
@@ -152,7 +152,7 @@ export default {
152
152
  apos.bus.$on('command-menu-manager-create-new', this.create);
153
153
  apos.bus.$on('command-menu-manager-close', this.confirmAndCancel);
154
154
  },
155
- destroyed() {
155
+ unmounted() {
156
156
  apos.bus.$off('content-changed', this.getPages);
157
157
  apos.bus.$off('command-menu-manager-create-new', this.create);
158
158
  apos.bus.$off('command-menu-manager-close', this.confirmAndCancel);
@@ -8,10 +8,10 @@
8
8
  >
9
9
  <template #body>
10
10
  <AposSelect
11
+ :id="uid"
11
12
  :choices="choices"
12
13
  :disabled="field.readOnly"
13
- :selected="value.data"
14
- :id="uid"
14
+ :selected="modelValue.data"
15
15
  :classes="[ 'apos-input__role' ]"
16
16
  :wrapper-classes="[ 'apos-input__role' ]"
17
17
  @change="change"
@@ -29,7 +29,7 @@ export default {
29
29
  mixins: [ AposInputMixin ],
30
30
  data() {
31
31
  return {
32
- next: (this.value.data == null) ? null : this.value.data,
32
+ next: (this.modelValue.data == null) ? null : this.modelValue.data,
33
33
  choices: []
34
34
  };
35
35
  },
@@ -1,19 +1,24 @@
1
1
  <template>
2
2
  <AposModal
3
- :modal="modal" :modal-title="modalTitle"
4
3
  ref="modal"
5
- @esc="confirmAndCancel" @no-modal="$emit('safe-close')"
6
- @inactive="modal.active = false" @show-modal="modal.showModal = true"
4
+ :modal="modal"
5
+ :modal-title="modalTitle"
6
+ @esc="confirmAndCancel"
7
+ @no-modal="$emit('safe-close')"
8
+ @inactive="modal.active = false"
9
+ @show-modal="modal.showModal = true"
7
10
  >
8
11
  <template #secondaryControls>
9
12
  <AposButton
10
13
  v-if="relationshipField"
11
- type="default" label="apostrophe:cancel"
14
+ type="default"
15
+ label="apostrophe:cancel"
12
16
  @click="confirmAndCancel"
13
17
  />
14
18
  <AposButton
15
19
  v-else
16
- type="default" label="apostrophe:exit"
20
+ type="default"
21
+ label="apostrophe:exit"
17
22
  @click="confirmAndCancel"
18
23
  />
19
24
  </template>
@@ -34,7 +39,8 @@
34
39
  :label="{
35
40
  key: 'apostrophe:newDocType',
36
41
  type: $t(moduleOptions.label)
37
- }" type="primary"
42
+ }"
43
+ type="primary"
38
44
  @click="create"
39
45
  />
40
46
  </template>
@@ -44,15 +50,15 @@
44
50
  <div class="apos-pieces-manager__relationship__counts">
45
51
  <AposMinMaxCount
46
52
  :field="relationshipField"
47
- :value="checkedDocs"
53
+ :model-value="checkedDocs"
48
54
  />
49
55
  </div>
50
56
  <AposSlatList
51
57
  class="apos-pieces-manager__relationship__items"
52
- @input="setCheckedDocs"
53
- @item-clicked="editRelationship"
54
- :value="checkedDocs"
58
+ :model-value="checkedDocs"
55
59
  :relationship-schema="relationshipField?.schema"
60
+ @update:model-value="setCheckedDocs"
61
+ @item-clicked="editRelationship"
56
62
  />
57
63
  </div>
58
64
  </AposModalRail>
@@ -74,14 +80,14 @@
74
80
  :checked-count="checked.length"
75
81
  :batch-operations="moduleOptions.batchOperations"
76
82
  :module-name="moduleName"
83
+ :options="{
84
+ disableUnchecked: maxReached()
85
+ }"
77
86
  @select-click="selectAll"
78
87
  @search="onSearch"
79
88
  @page-change="updatePage"
80
89
  @filter="filter"
81
90
  @batch="handleBatchAction"
82
- :options="{
83
- disableUnchecked: maxReached()
84
- }"
85
91
  />
86
92
  <AposDocsManagerSelectBox
87
93
  :selected-state="selectAllState"
@@ -97,16 +103,16 @@
97
103
  <template #bodyMain>
98
104
  <AposDocsManagerDisplay
99
105
  v-if="items.length > 0"
106
+ v-model:checked="checked"
100
107
  :items="items"
101
108
  :headers="headers"
102
- v-model="checked"
103
- @open="edit"
104
109
  :options="{
105
110
  ...moduleOptions,
106
111
  disableUnchecked: maxReached(),
107
112
  disableUnpublished: disableUnpublished,
108
113
  manuallyPublished: manuallyPublished
109
114
  }"
115
+ @open="edit"
110
116
  />
111
117
  <div v-else class="apos-pieces-manager__empty">
112
118
  <AposEmptyState :empty-state="emptyDisplay" />
@@ -239,7 +245,7 @@ export default {
239
245
  apos.bus.$on('command-menu-manager-create-new', this.create);
240
246
  apos.bus.$on('command-menu-manager-close', this.confirmAndCancel);
241
247
  },
242
- destroyed() {
248
+ unmounted() {
243
249
  this.destroyShortcuts();
244
250
  apos.bus.$off('content-changed', this.getPieces);
245
251
  apos.bus.$off('command-menu-manager-create-new', this.create);
@@ -429,7 +435,9 @@ export default {
429
435
  });
430
436
  if (result) {
431
437
  const index = this.checkedDocs.findIndex(_item => _item._id === item._id);
432
- this.$set(this.checkedDocs, index, {
438
+ // TODO verify it's still reactive, should be based on the doc
439
+ // Or use a filter here
440
+ this.checkedDocs.splice(index, 1, {
433
441
  ...this.checkedDocs[index],
434
442
  _fields: result
435
443
  });
@@ -6,23 +6,26 @@
6
6
  class="apos-table__header"
7
7
  />
8
8
  <th
9
- v-for="header in headers" scope="col"
10
- class="apos-table__header" :key="header.label"
9
+ v-for="header in headers"
10
+ :key="header.label"
11
+ scope="col"
12
+ class="apos-table__header"
11
13
  :class="`apos-table__header--${header.name}`"
12
14
  >
13
15
  <component
14
- :is="getEl(header)" class="apos-table__header-label"
16
+ :is="getEl(header)"
17
+ class="apos-table__header-label"
15
18
  >
16
19
  <component
17
- v-if="header.labelIcon"
18
20
  :is="icons[header.labelIcon]"
21
+ v-if="header.labelIcon"
19
22
  :size="iconSize(header)"
20
23
  class="apos-table__header-icon"
21
24
  />
22
25
  {{ $t(header.label) }}
23
26
  </component>
24
27
  </th>
25
- <th class="apos-table__header" key="contextMenu">
28
+ <th key="contextMenu" class="apos-table__header">
26
29
  <component
27
30
  :is="getEl({})"
28
31
  class="apos-table__header-label apos-is-hidden"
@@ -32,17 +35,20 @@
32
35
  </th>
33
36
  </tr>
34
37
  <tr
35
- class="apos-table__row"
36
38
  v-for="item in items"
37
39
  :key="item._id"
40
+ class="apos-table__row"
38
41
  :class="{'apos-is-selected': false }"
39
- @mouseover="over(item._id)" @mouseout="out(item._id)"
42
+ @mouseover="over(item._id)"
43
+ @mouseout="out(item._id)"
40
44
  >
41
45
  <td
42
46
  class="apos-table__cell"
43
47
  >
44
48
  <AposCheckbox
45
49
  v-if="item._id"
50
+ v-model="checkProxy"
51
+ v-apos-tooltip="options.disableUnpublished && !item.lastPublishedAt ? 'apostrophe:publishBeforeUsingTooltip' : null"
46
52
  :field="{
47
53
  name: item._id,
48
54
  hideLabel: true,
@@ -51,23 +57,24 @@
51
57
  (options.disableUnchecked && !checkProxy.includes(item._id)) ||
52
58
  (options.disableUnpublished && !item.lastPublishedAt)
53
59
  }"
54
- v-apos-tooltip="options.disableUnpublished && !item.lastPublishedAt ? 'apostrophe:publishBeforeUsingTooltip' : null"
55
60
  :choice="{ value: item._id }"
56
- v-model="checkProxy"
57
61
  @updated="emitUpdated(item._id)"
58
62
  />
59
63
  </td>
60
64
  <td
61
65
  v-for="header in headers"
66
+ :key="header.name"
62
67
  class="apos-table__cell apos-table__cell--pointer"
63
68
  :class="`apos-table__cell--${header.name}`"
64
- :key="header.name"
65
69
  @click="canEdit(item) && $emit('open', item)"
66
70
  >
67
71
  <component
68
- v-if="header.component" :is="header.component"
69
- :header="header" :item="item._publishedDoc || item"
70
- :draft="item" :published="item._publishedDoc"
72
+ :is="header.component"
73
+ v-if="header.component"
74
+ :header="header"
75
+ :item="item._publishedDoc || item"
76
+ :draft="item"
77
+ :published="item._publishedDoc"
71
78
  :manually-published="options.manuallyPublished"
72
79
  />
73
80
  <AposCellBasic
@@ -80,7 +87,8 @@
80
87
  <!-- append the context menu -->
81
88
  <td class="apos-table__cell apos-table__cell--context-menu">
82
89
  <AposCellContextMenu
83
- :state="state[item._id]" :item="item"
90
+ :state="state[item._id]"
91
+ :item="item"
84
92
  :draft="item"
85
93
  :published="item._publishedDoc"
86
94
  :header="{
@@ -99,10 +107,6 @@
99
107
  <script>
100
108
  import { klona } from 'klona';
101
109
  export default {
102
- model: {
103
- prop: 'checked',
104
- event: 'change'
105
- },
106
110
  props: {
107
111
  headers: {
108
112
  type: Array,
@@ -126,8 +130,8 @@ export default {
126
130
  }
127
131
  },
128
132
  emits: [
133
+ 'update:checked',
129
134
  'open',
130
- 'change',
131
135
  'updated'
132
136
  ],
133
137
  data() {
@@ -149,7 +153,7 @@ export default {
149
153
  return this.checked;
150
154
  },
151
155
  set(val) {
152
- this.$emit('change', val);
156
+ this.$emit('update:checked', val);
153
157
  }
154
158
  },
155
159
  contextMenuOptions() {
@@ -12,15 +12,19 @@
12
12
  {{ selectBoxMessage }}
13
13
  <AposButton
14
14
  v-if="!allPiecesSelection.isSelected"
15
- type="subtle" :modifiers="['inline', 'small', 'no-motion']"
16
- :label="selectBoxMessageButton" class="apos-select-box__select-all"
17
- @click="$emit('select-all')"
15
+ type="subtle"
16
+ :modifiers="['inline', 'small', 'no-motion']"
17
+ :label="selectBoxMessageButton"
18
+ class="apos-select-box__select-all"
18
19
  text-color="var(--a-primary)"
20
+ @click="$emit('select-all')"
19
21
  />
20
22
  <AposButton
21
23
  v-else
22
- type="subtle" :modifiers="['inline', 'small', 'no-motion']"
23
- label="apostrophe:clearSelection" class="apos-select-box__select-all"
24
+ type="subtle"
25
+ :modifiers="['inline', 'small', 'no-motion']"
26
+ label="apostrophe:clearSelection"
27
+ class="apos-select-box__select-all"
24
28
  text-color="var(--a-primary)"
25
29
  @click="clearSelection"
26
30
  />
@@ -1,13 +1,17 @@
1
1
  <template>
2
2
  <AposModal
3
- class="apos-doc-editor" :modal="modal"
3
+ class="apos-doc-editor"
4
+ :modal="modal"
4
5
  :modal-title="modalTitle"
5
- @inactive="modal.active = false" @show-modal="modal.showModal = true"
6
- @esc="confirmAndCancel" @no-modal="$emit('safe-close')"
6
+ @inactive="modal.active = false"
7
+ @show-modal="modal.showModal = true"
8
+ @esc="confirmAndCancel"
9
+ @no-modal="$emit('safe-close')"
7
10
  >
8
11
  <template #secondaryControls>
9
12
  <AposButton
10
- type="default" label="apostrophe:cancel"
13
+ type="default"
14
+ label="apostrophe:cancel"
11
15
  @click="confirmAndCancel"
12
16
  />
13
17
  </template>
@@ -23,8 +27,8 @@
23
27
  <template #leftRail>
24
28
  <AposModalRail>
25
29
  <AposModalTabs
26
- :key="tabKey"
27
30
  v-if="tabs.length"
31
+ :key="tabKey"
28
32
  :current="currentTab"
29
33
  :tabs="tabs"
30
34
  :errors="fieldErrors"
@@ -41,12 +45,12 @@
41
45
  v-for="tab in tabs"
42
46
  v-show="tab.name === currentTab"
43
47
  :key="tab.name"
48
+ :ref="tab.name"
44
49
  :schema="groups[tab.name].schema"
45
50
  :current-fields="groups[tab.name].fields"
46
- :value="docFields"
51
+ :model-value="docFields"
47
52
  :trigger-validation="triggerValidation"
48
- :ref="tab.name"
49
- @input="updateDocFields"
53
+ @update:model-value="updateDocFields"
50
54
  />
51
55
  </div>
52
56
  </AposModalTabsBody>
@@ -78,7 +82,7 @@ export default {
78
82
  return [];
79
83
  }
80
84
  },
81
- value: {
85
+ modelValue: {
82
86
  type: Object,
83
87
  default() {
84
88
  return null;
@@ -93,10 +97,10 @@ export default {
93
97
  data() {
94
98
  return {
95
99
  docReady: false,
96
- original: this.value,
100
+ original: this.modelValue,
97
101
  docFields: {
98
102
  data: {
99
- ...((this.value != null) ? this.value
103
+ ...((this.modelValue != null) ? this.modelValue
100
104
  : Object.fromEntries(
101
105
  this.schema.map(field =>
102
106
  [ field.name, (field.def !== undefined) ? klona(field.def) : null ]
@@ -331,6 +331,7 @@ module.exports = {
331
331
  blockquote: [ 'blockquote' ],
332
332
  superscript: [ 'sup' ],
333
333
  subscript: [ 'sub' ],
334
+ textStyle: [ 'span' ],
334
335
  // Generic div type, usually used with classes,
335
336
  // and for A2 content migration. Intentionally not
336
337
  // given a nicer-sounding name
@@ -13,21 +13,22 @@
13
13
  menu-placement="bottom-start"
14
14
  >
15
15
  <AposSchema
16
+ :key="lastSelectionTime"
17
+ v-model="docFields"
16
18
  :schema="schema"
17
19
  :trigger-validation="triggerValidation"
18
- v-model="docFields"
19
20
  :modifiers="formModifiers"
20
- :key="lastSelectionTime"
21
21
  :generation="generation"
22
22
  :following-values="followingValues()"
23
23
  :conditional-fields="conditionalFields"
24
- @input="evaluateConditions()"
24
+ @update:model-value="evaluateConditions()"
25
25
  />
26
26
  <footer class="apos-image-control__footer">
27
27
  <AposButton
28
- type="default" label="apostrophe:cancel"
29
- @click="close"
28
+ type="default"
29
+ label="apostrophe:cancel"
30
30
  :modifiers="formModifiers"
31
+ @click="close"
31
32
  />
32
33
  <AposButton
33
34
  type="primary"
@@ -266,7 +267,7 @@ function getOptions() {
266
267
  }
267
268
 
268
269
  // special schema style for this use
269
- .apos-image-control ::v-deep .apos-field--target {
270
+ .apos-image-control :deep(.apos-field--target) {
270
271
  .apos-field__label {
271
272
  display: none;
272
273
  }