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
@@ -5,31 +5,49 @@
5
5
  >
6
6
  <span v-if="manuallyPublished && draft.modified && draft.lastPublishedAt">
7
7
  <AposLabel
8
- label="apostrophe:pendingUpdates" class="apos-table__cell-field__label"
8
+ label="apostrophe:pendingUpdates"
9
+ class="apos-table__cell-field__label"
9
10
  tooltip="apostrophe:thereAreActiveChanges"
10
11
  :modifiers="[ 'apos-is-success', 'apos-is-filled' ]"
11
12
  />
12
13
  </span>
13
14
  <span v-else-if="draft.submitted">
14
15
  <AposLabel
15
- label="apostrophe:pending" class="apos-table__cell-field__label"
16
+ label="apostrophe:pending"
17
+ class="apos-table__cell-field__label"
16
18
  tooltip="apostrophe:changesAwaitingApproval"
17
19
  :modifiers="[ 'apos-is-filled' ]"
18
20
  />
19
21
  </span>
20
22
  <span v-if="manuallyPublished && !draft.lastPublishedAt">
21
23
  <AposLabel
22
- label="apostrophe:draft" class="apos-table__cell-field__label"
24
+ label="apostrophe:draft"
25
+ class="apos-table__cell-field__label"
23
26
  :modifiers="[ 'apos-is-warning', 'apos-is-filled' ]"
24
27
  tooltip="apostrophe:notYetPublished"
25
28
  />
26
29
  </span>
27
30
  <span v-if="draft.archived">
28
31
  <AposLabel
29
- label="apostrophe:archived" class="apos-table__cell-field__label"
32
+ label="apostrophe:archived"
33
+ class="apos-table__cell-field__label"
30
34
  :modifiers="[ 'apos-is-filled', 'apos-is-danger' ]"
31
35
  />
32
36
  </span>
37
+ <span
38
+ v-for="({component, props, if: conditions}, index) in customCellIndicators"
39
+ :key="index"
40
+ >
41
+ <component
42
+ :is="component"
43
+ v-if="evaluateConditions(conditions)"
44
+ class="apos-table__cell-field__label"
45
+ v-bind="props"
46
+ :header="header"
47
+ :draft="draft"
48
+ :published="published"
49
+ />
50
+ </span>
33
51
  </div>
34
52
  </template>
35
53
 
@@ -38,7 +56,33 @@ import AposCellMixin from 'Modules/@apostrophecms/ui/mixins/AposCellMixin';
38
56
 
39
57
  export default {
40
58
  name: 'AposCellLabels',
41
- mixins: [ AposCellMixin ]
59
+ mixins: [ AposCellMixin ],
60
+ data() {
61
+ return {
62
+ customCellIndicators: apos.schema.customCellIndicators
63
+ };
64
+ },
65
+ methods: {
66
+ evaluateConditions(conditions = {}) {
67
+ try {
68
+ return Object.entries(conditions).every(([ property, expected ]) => {
69
+ const properties = property.split('.');
70
+
71
+ const draftProp = properties.reduce((acc, cur) => {
72
+ if (Object.hasOwn(acc, cur)) {
73
+ return acc[cur];
74
+ }
75
+
76
+ throw new Error(`Property not found in draft document: ${property}`);
77
+ }, this.draft);
78
+
79
+ return draftProp === expected;
80
+ });
81
+ } catch (err) {
82
+ return false;
83
+ }
84
+ }
85
+ }
42
86
  };
43
87
  </script>
44
88
 
@@ -1,30 +1,35 @@
1
1
  <template>
2
2
  <label
3
- class="apos-choice-label" :for="id"
3
+ class="apos-choice-label"
4
+ :for="id"
4
5
  :class="{'apos-choice-label--disabled': field.readOnly}"
5
6
  :tabindex="{'-1' : field.hideLabel}"
6
7
  >
7
8
  <input
9
+ :id="id"
8
10
  v-model="checkProxy"
9
- type="checkbox" class="apos-sr-only apos-input--choice apos-input--checkbox"
11
+ type="checkbox"
12
+ class="apos-sr-only apos-input--choice apos-input--checkbox"
10
13
  :value="choice.value"
11
14
  :name="field.name"
12
- :id="id" :aria-label="choice.label || field.label"
13
- :tabindex="tabindex" :disabled="field.readOnly || choice.readOnly"
15
+ :aria-label="choice.label || field.label"
16
+ :tabindex="tabindex"
17
+ :disabled="field.readOnly || choice.readOnly"
14
18
  :is-indeterminate="choice.indeterminate === true ? 'true' : 'false'"
15
19
  @change="update"
16
20
  >
17
21
  <span class="apos-input-indicator" aria-hidden="true">
18
22
  <component
19
- v-if="isChecked(checked)"
20
23
  :is="`${
21
24
  choice.indeterminate ? 'minus-icon' : 'check-bold-icon'
22
25
  }`"
26
+ v-if="isChecked(modelValue)"
23
27
  :size="10"
24
28
  />
25
29
  </span>
26
30
  <span
27
- :class="{'apos-sr-only': field.hideLabel }" v-if="choice.label"
31
+ v-if="choice.label"
32
+ :class="{'apos-sr-only': field.hideLabel }"
28
33
  class="apos-choice-label-text"
29
34
  >
30
35
  {{ $t(choice.label) }}
@@ -35,13 +40,8 @@
35
40
  <script>
36
41
 
37
42
  export default {
38
- // Custom model to handle the v-model connection on the parent.
39
- model: {
40
- prop: 'checked',
41
- event: 'change'
42
- },
43
43
  props: {
44
- checked: {
44
+ modelValue: {
45
45
  type: [ Array, Boolean ],
46
46
  default: false
47
47
  },
@@ -64,7 +64,7 @@ export default {
64
64
  default: null
65
65
  }
66
66
  },
67
- emits: [ 'change', 'updated' ],
67
+ emits: [ 'update:modelValue', 'updated' ],
68
68
  data() {
69
69
  return {
70
70
  tabindex: this.field.disableFocus ? '-1' : '0'
@@ -74,21 +74,21 @@ export default {
74
74
  // Handle the local check state within this component.
75
75
  checkProxy: {
76
76
  get() {
77
- return this.checked;
77
+ return this.modelValue;
78
78
  },
79
79
  set(val) {
80
80
  if (!this.choice.indeterminate || this.choice.triggerIndeterminateEvent) {
81
81
  // Only update the model if the box was *not* indeterminate.
82
- this.$emit('change', val);
82
+ this.$emit('update:modelValue', val);
83
83
  }
84
84
  }
85
85
  }
86
86
  },
87
87
  methods: {
88
- isChecked(checked) {
89
- return Array.isArray(checked)
90
- ? checked.includes(this.choice.value)
91
- : checked;
88
+ isChecked(value) {
89
+ return Array.isArray(value)
90
+ ? value.includes(this.choice.value)
91
+ : value;
92
92
  },
93
93
  // This event is only necessary if the parent needs to do *more* than simply
94
94
  // keep track of an array of checkbox values. For example, AposTagApply
@@ -1,13 +1,18 @@
1
1
  <template>
2
2
  <svg
3
- width="64px" height="42.6px"
4
- viewBox="0 4.008 64 42.613" xmlns="http://www.w3.org/2000/svg"
3
+ width="64px"
4
+ height="42.6px"
5
+ viewBox="0 4.008 64 42.613"
6
+ xmlns="http://www.w3.org/2000/svg"
5
7
  >
6
8
  <defs>
7
9
  <linearGradient
8
- gradientUnits="userSpaceOnUse" x1="12"
9
- y1="4" x2="12"
10
- y2="20" id="apos-upload-gradient"
10
+ id="apos-upload-gradient"
11
+ gradientUnits="userSpaceOnUse"
12
+ x1="12"
13
+ y1="4"
14
+ x2="12"
15
+ y2="20"
11
16
  gradientTransform="matrix(1.848483, 1.922034, -2.33985, 2.250314, 31.445274, -24.099256)"
12
17
  >
13
18
  <stop offset="0" style="stop-color: rgb(50, 197, 255);" />
@@ -6,21 +6,21 @@
6
6
  >
7
7
  <ul
8
8
  ref="select"
9
+ v-click-outside-element="closeList"
9
10
  role="button"
10
11
  :aria-expanded="showedList.toString()"
11
12
  :aria-controls="`${field._id}-combo`"
12
- v-click-outside-element="closeList"
13
13
  class="apos-input-wrapper apos-combo__select"
14
- @click="toggleList"
15
14
  :tabindex="field.readOnly ? null : 0"
15
+ @click="toggleList"
16
16
  @keydown.prevent.space="toggleList"
17
17
  @keydown.prevent.up="toggleList"
18
18
  @keydown.prevent.down="toggleList"
19
19
  >
20
20
  <li
21
- class="apos-combo__selected"
22
21
  v-for="checked in selectedItems"
23
22
  :key="objectValues ? checked.value : checked"
23
+ class="apos-combo__selected"
24
24
  @click.stop="selectOption(getSelectedOption(checked))"
25
25
  >
26
26
  {{ getSelectedOption(checked)?.label }}
@@ -49,16 +49,16 @@
49
49
  >
50
50
  <li
51
51
  v-if="typehead"
52
- class="apos-combo__list-typehead"
53
52
  key="__typehead"
53
+ class="apos-combo__list-typehead"
54
54
  @click.stop="$refs.input.focus()"
55
55
  >
56
56
  <input
57
+ ref="input"
57
58
  class="apos-combo__typehead"
58
59
  type="text"
59
60
  :placeholder="$t('apostrophe:search')"
60
61
  :value="thInput"
61
- ref="input"
62
62
  @input="onTypeheadInput"
63
63
  @keydown="onTypeheadKey"
64
64
  >
@@ -69,11 +69,11 @@
69
69
  />
70
70
  </li>
71
71
  <li
72
+ v-for="(choice, i) in options"
72
73
  :key="choice.value"
73
74
  class="apos-combo__list-item"
74
75
  role="menuitemcheckbox"
75
76
  :class="{focused: focusedItemIndex === i}"
76
- v-for="(choice, i) in options"
77
77
  @click.stop="selectOption(choice)"
78
78
  @mouseover="focusedItemIndex = i"
79
79
  >
@@ -101,7 +101,7 @@ export default {
101
101
  type: Object,
102
102
  required: true
103
103
  },
104
- value: {
104
+ modelValue: {
105
105
  type: Object,
106
106
  required: true
107
107
  },
@@ -121,7 +121,7 @@ export default {
121
121
  }
122
122
  },
123
123
 
124
- emits: [ 'select-items', 'toggle', 'input' ],
124
+ emits: [ 'select-items', 'toggle', 'update:modelValue' ],
125
125
  data () {
126
126
 
127
127
  return {
@@ -142,7 +142,7 @@ export default {
142
142
  },
143
143
  selectedItems() {
144
144
  if (!this.showSelectAll || !this.allItemsSelected()) {
145
- return this.value.data;
145
+ return this.modelValue.data;
146
146
  }
147
147
  if (this.objectValues) {
148
148
  const { listLabel } = this.getSelectAllLabel();
@@ -157,13 +157,13 @@ export default {
157
157
  mounted() {
158
158
  this.boxResizeObserver.observe(this.$refs.select);
159
159
  },
160
- beforeDestroy() {
160
+ beforeUnmount() {
161
161
  this.boxResizeObserver.unobserve(this.$refs.select);
162
162
  },
163
163
  methods: {
164
164
  onTypeheadInput(e) {
165
165
  this.thInput = e.target.value;
166
- this.$emit('input', this.thInput);
166
+ this.$emit('update:modelValue', this.thInput);
167
167
  },
168
168
  onTypeheadKey(e) {
169
169
  const stop = () => {
@@ -276,7 +276,7 @@ export default {
276
276
  this.focusedItemIndex = null;
277
277
  this.$refs.list.scrollTo({ top: 0 });
278
278
  this.thInput = '';
279
- this.$emit('input', this.thInput);
279
+ this.$emit('update:modelValue', this.thInput);
280
280
  },
281
281
  getBoxResizeObserver() {
282
282
  return new ResizeObserver(([ { target } ]) => {
@@ -307,10 +307,10 @@ export default {
307
307
  : entry === choice.value
308
308
  );
309
309
 
310
- return this.value.data.some(condition);
310
+ return this.modelValue.data.some(condition);
311
311
  },
312
312
  allItemsSelected () {
313
- return this.choices.length && this.value.data.length === this.choices.length;
313
+ return this.choices.length && this.modelValue.data.length === this.choices.length;
314
314
  },
315
315
  getSelectedOption(checked) {
316
316
  if (this.objectValues) {
@@ -475,7 +475,7 @@ export default {
475
475
  cursor: not-allowed;
476
476
  }
477
477
 
478
- ::v-deep .apos-indicator {
478
+ :deep(.apos-indicator) {
479
479
  width: 10px;
480
480
  height: 10px;
481
481
  }