apostrophe 4.3.3 → 4.4.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 (158) hide show
  1. package/.stylelintrc +1 -93
  2. package/CHANGELOG.md +51 -1
  3. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBar.vue +7 -1
  4. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarLocale.vue +6 -3
  5. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarUser.vue +2 -1
  6. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextModeAndSettings.vue +1 -0
  7. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +3 -2
  8. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposSavingIndicator.vue +6 -2
  9. package/modules/@apostrophecms/any-page-type/index.js +2 -2
  10. package/modules/@apostrophecms/area/ui/apos/components/AposAreaContextualMenu.vue +13 -7
  11. package/modules/@apostrophecms/area/ui/apos/components/AposAreaEditor.vue +4 -4
  12. package/modules/@apostrophecms/area/ui/apos/components/AposAreaExpandedMenu.vue +17 -11
  13. package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenu.vue +13 -7
  14. package/modules/@apostrophecms/area/ui/apos/components/AposAreaMenuItem.vue +3 -0
  15. package/modules/@apostrophecms/area/ui/apos/components/AposAreaWidget.vue +36 -20
  16. package/modules/@apostrophecms/area/ui/apos/components/AposWidgetControls.vue +18 -11
  17. package/modules/@apostrophecms/busy/ui/apos/components/TheAposBusy.vue +6 -8
  18. package/modules/@apostrophecms/command-menu/index.js +12 -7
  19. package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuKey.vue +9 -7
  20. package/modules/@apostrophecms/command-menu/ui/apos/components/AposCommandMenuShortcut.vue +28 -15
  21. package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +44 -42
  22. package/modules/@apostrophecms/doc-type/index.js +2 -1
  23. package/modules/@apostrophecms/doc-type/ui/apos/components/AposDocEditor.vue +4 -3
  24. package/modules/@apostrophecms/file-tag/index.js +1 -1
  25. package/modules/@apostrophecms/global/index.js +29 -0
  26. package/modules/@apostrophecms/i18n/i18n/de.json +20 -0
  27. package/modules/@apostrophecms/i18n/i18n/en.json +1 -0
  28. package/modules/@apostrophecms/i18n/i18n/es.json +1 -0
  29. package/modules/@apostrophecms/i18n/i18n/fr.json +1 -0
  30. package/modules/@apostrophecms/i18n/i18n/it.json +1 -0
  31. package/modules/@apostrophecms/i18n/i18n/pt-BR.json +1 -0
  32. package/modules/@apostrophecms/i18n/i18n/sk.json +1 -0
  33. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalize.vue +25 -17
  34. package/modules/@apostrophecms/i18n/ui/apos/components/AposI18nLocalizeErrors.vue +5 -4
  35. package/modules/@apostrophecms/image/index.js +2 -1
  36. package/modules/@apostrophecms/image/ui/apos/components/AposImageCropper.vue +1 -1
  37. package/modules/@apostrophecms/image/ui/apos/components/AposImageRelationshipEditor.vue +9 -8
  38. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManager.vue +13 -10
  39. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerDisplay.vue +11 -7
  40. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerEditor.vue +12 -2
  41. package/modules/@apostrophecms/image/ui/apos/components/AposMediaManagerSelections.vue +8 -5
  42. package/modules/@apostrophecms/image/ui/apos/components/AposMediaUploader.vue +17 -8
  43. package/modules/@apostrophecms/image-tag/index.js +1 -1
  44. package/modules/@apostrophecms/login/ui/apos/components/AposLoginForm.vue +1 -0
  45. package/modules/@apostrophecms/login/ui/apos/components/AposResetPasswordForm.vue +1 -0
  46. package/modules/@apostrophecms/login/ui/apos/components/TheAposLogin.vue +16 -14
  47. package/modules/@apostrophecms/login/ui/apos/components/TheAposLoginHeader.vue +9 -4
  48. package/modules/@apostrophecms/modal/ui/apos/apps/AposModals.js +11 -59
  49. package/modules/@apostrophecms/modal/ui/apos/components/AposDocsManagerToolbar.vue +1 -0
  50. package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +59 -55
  51. package/modules/@apostrophecms/modal/ui/apos/components/AposModalBody.vue +1 -0
  52. package/modules/@apostrophecms/modal/ui/apos/components/AposModalBreadcrumbs.vue +5 -0
  53. package/modules/@apostrophecms/modal/ui/apos/components/AposModalConfirm.vue +6 -10
  54. package/modules/@apostrophecms/modal/ui/apos/components/AposModalShareDraft.vue +14 -16
  55. package/modules/@apostrophecms/modal/ui/apos/components/AposModalTabs.vue +68 -5
  56. package/modules/@apostrophecms/modal/ui/apos/components/AposWidgetModalTabs.vue +15 -9
  57. package/modules/@apostrophecms/modal/ui/apos/components/TheAposModals.vue +48 -122
  58. package/modules/@apostrophecms/modal/ui/apos/composables/AposFocus.js +9 -6
  59. package/modules/@apostrophecms/modal/ui/apos/mixins/AposDocsManagerMixin.js +38 -36
  60. package/modules/@apostrophecms/notification/ui/apos/components/AposNotification.vue +15 -9
  61. package/modules/@apostrophecms/notification/ui/apos/components/TheAposNotifications.vue +2 -2
  62. package/modules/@apostrophecms/page/index.js +9 -6
  63. package/modules/@apostrophecms/page/ui/apos/components/AposPagesManager.vue +3 -4
  64. package/modules/@apostrophecms/page/ui/apos/logic/AposPagesManager.js +5 -10
  65. package/modules/@apostrophecms/page/views/notFound.html +5 -5
  66. package/modules/@apostrophecms/permission/ui/apos/components/AposPermissionGrid.vue +6 -2
  67. package/modules/@apostrophecms/piece-page-type/index.js +1 -0
  68. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManager.vue +8 -12
  69. package/modules/@apostrophecms/piece-type/ui/apos/components/AposDocsManagerSelectBox.vue +2 -2
  70. package/modules/@apostrophecms/piece-type/ui/apos/components/AposRelationshipEditor.vue +1 -2
  71. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposRichTextWidgetEditor.vue +59 -41
  72. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapDivider.vue +1 -0
  73. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapMarks.vue +3 -1
  74. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapStyles.vue +3 -1
  75. package/modules/@apostrophecms/rich-text-widget/ui/apos/components/AposTiptapTable.vue +2 -0
  76. package/modules/@apostrophecms/rich-text-widget/ui/apos/tiptap-extensions/Classes.js +1 -7
  77. package/modules/@apostrophecms/rich-text-widget/ui/apos/tiptap-extensions/Heading.js +10 -0
  78. package/modules/@apostrophecms/schema/lib/addFieldTypes.js +8 -3
  79. package/modules/@apostrophecms/schema/ui/apos/components/AposArrayEditor.vue +4 -6
  80. package/modules/@apostrophecms/schema/ui/apos/components/AposInputArea.vue +1 -0
  81. package/modules/@apostrophecms/schema/ui/apos/components/AposInputBoolean.vue +5 -2
  82. package/modules/@apostrophecms/schema/ui/apos/components/AposInputColor.vue +1 -0
  83. package/modules/@apostrophecms/schema/ui/apos/components/AposInputDateAndTime.vue +1 -1
  84. package/modules/@apostrophecms/schema/ui/apos/components/AposInputObject.vue +2 -0
  85. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRadio.vue +1 -0
  86. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRange.vue +14 -8
  87. package/modules/@apostrophecms/schema/ui/apos/components/AposInputRelationship.vue +4 -2
  88. package/modules/@apostrophecms/schema/ui/apos/components/AposInputSlug.vue +7 -1
  89. package/modules/@apostrophecms/schema/ui/apos/components/AposInputString.vue +3 -1
  90. package/modules/@apostrophecms/schema/ui/apos/components/AposInputWrapper.vue +35 -5
  91. package/modules/@apostrophecms/schema/ui/apos/components/AposSchema.vue +6 -3
  92. package/modules/@apostrophecms/schema/ui/apos/components/AposSearchList.vue +50 -15
  93. package/modules/@apostrophecms/schema/ui/apos/components/AposSubform.vue +5 -10
  94. package/modules/@apostrophecms/schema/ui/apos/logic/AposArrayEditor.js +17 -17
  95. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRelationship.js +3 -0
  96. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputString.js +9 -0
  97. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputWrapper.js +7 -0
  98. package/modules/@apostrophecms/schema/ui/apos/logic/AposSchema.js +8 -3
  99. package/modules/@apostrophecms/schema/ui/apos/logic/AposSearchList.js +3 -0
  100. package/modules/@apostrophecms/schema/ui/apos/mixins/AposInputMixin.js +5 -0
  101. package/modules/@apostrophecms/schema/ui/apos/scss/AposInputArray.scss +42 -9
  102. package/modules/@apostrophecms/search/index.js +1 -0
  103. package/modules/@apostrophecms/settings/index.js +33 -0
  104. package/modules/@apostrophecms/settings/ui/apos/components/AposSettingsManager.vue +6 -7
  105. package/modules/@apostrophecms/settings/ui/apos/logic/AposSettingsManager.js +0 -1
  106. package/modules/@apostrophecms/submitted-draft/index.js +26 -0
  107. package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +4 -4
  108. package/modules/@apostrophecms/template/views/templateError.html +4 -4
  109. package/modules/@apostrophecms/translation/ui/apos/components/AposTranslationIndicator.vue +2 -1
  110. package/modules/@apostrophecms/ui/ui/apos/components/AposAvatar.vue +3 -2
  111. package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +62 -15
  112. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonGroup.vue +8 -0
  113. package/modules/@apostrophecms/ui/ui/apos/components/AposButtonSplit.vue +9 -3
  114. package/modules/@apostrophecms/ui/ui/apos/components/AposCellContextMenu.vue +2 -0
  115. package/modules/@apostrophecms/ui/ui/apos/components/AposCellLabels.vue +1 -0
  116. package/modules/@apostrophecms/ui/ui/apos/components/AposCloudUploadIcon.vue +5 -5
  117. package/modules/@apostrophecms/ui/ui/apos/components/AposCombo.vue +7 -5
  118. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +8 -5
  119. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +5 -3
  120. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +22 -2
  121. package/modules/@apostrophecms/ui/ui/apos/components/AposEmptyState.vue +3 -1
  122. package/modules/@apostrophecms/ui/ui/apos/components/AposFile.vue +5 -1
  123. package/modules/@apostrophecms/ui/ui/apos/components/AposFilterMenu.vue +2 -1
  124. package/modules/@apostrophecms/ui/ui/apos/components/AposLabel.vue +1 -0
  125. package/modules/@apostrophecms/ui/ui/apos/components/AposMinMaxCount.vue +1 -0
  126. package/modules/@apostrophecms/ui/ui/apos/components/AposPager.vue +1 -0
  127. package/modules/@apostrophecms/ui/ui/apos/components/AposPagerDots.vue +3 -1
  128. package/modules/@apostrophecms/ui/ui/apos/components/AposSlat.vue +15 -2
  129. package/modules/@apostrophecms/ui/ui/apos/components/AposSlatList.vue +3 -1
  130. package/modules/@apostrophecms/ui/ui/apos/components/AposSpinner.vue +33 -7
  131. package/modules/@apostrophecms/ui/ui/apos/components/AposSubformPreview.vue +3 -2
  132. package/modules/@apostrophecms/ui/ui/apos/components/AposTag.vue +5 -3
  133. package/modules/@apostrophecms/ui/ui/apos/components/AposTagApply.vue +5 -2
  134. package/modules/@apostrophecms/ui/ui/apos/components/AposTagList.vue +5 -1
  135. package/modules/@apostrophecms/ui/ui/apos/components/AposTagListItem.vue +9 -1
  136. package/modules/@apostrophecms/ui/ui/apos/components/AposToggle.vue +13 -13
  137. package/modules/@apostrophecms/ui/ui/apos/components/AposTree.vue +1 -0
  138. package/modules/@apostrophecms/ui/ui/apos/components/AposTreeRows.vue +17 -7
  139. package/modules/@apostrophecms/ui/ui/apos/lib/vue.js +4 -0
  140. package/modules/@apostrophecms/ui/ui/apos/scss/global/_admin.scss +1 -1
  141. package/modules/@apostrophecms/ui/ui/apos/scss/global/_inputs.scss +28 -5
  142. package/modules/@apostrophecms/ui/ui/apos/scss/global/_scrollbars.scss +16 -0
  143. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tables.scss +8 -3
  144. package/modules/@apostrophecms/ui/ui/apos/scss/global/_theme.scss +9 -8
  145. package/modules/@apostrophecms/ui/ui/apos/scss/global/_tooltips.scss +13 -7
  146. package/modules/@apostrophecms/ui/ui/apos/scss/global/import-all.scss +1 -1
  147. package/modules/@apostrophecms/ui/ui/apos/scss/mixins/_input_mixins.scss +5 -3
  148. package/modules/@apostrophecms/ui/ui/apos/scss/mixins/_mixins.scss +1 -0
  149. package/modules/@apostrophecms/ui/ui/apos/scss/mixins/_responsive.scss +4 -3
  150. package/modules/@apostrophecms/ui/ui/apos/scss/mixins/_theme_mixins.scss +6 -0
  151. package/modules/@apostrophecms/ui/ui/apos/scss/shared/_table-rows.scss +6 -3
  152. package/modules/@apostrophecms/ui/ui/apos/stores/modal.js +180 -0
  153. package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +2 -2
  154. package/package.json +4 -4
  155. package/test/modules/@apostrophecms/search/views/index.html +1 -0
  156. package/test/pages.js +227 -0
  157. package/test/schemas.js +184 -0
  158. package/test/search.js +49 -13
@@ -1,5 +1,8 @@
1
1
  <template>
2
- <div :aria-controls="`insert-menu-${modelValue._id}`" @keydown="handleUIKeydown">
2
+ <div
3
+ :aria-controls="`insert-menu-${modelValue._id}`"
4
+ @keydown="handleUIKeydown"
5
+ >
3
6
  <bubble-menu
4
7
  v-if="editor"
5
8
  class="bubble-menu"
@@ -9,7 +12,8 @@
9
12
  zIndex: 2000,
10
13
  animation: 'fade',
11
14
  inertia: true,
12
- placement: 'bottom'
15
+ placement: 'bottom',
16
+ hideOnClick: true
13
17
  }"
14
18
  :editor="editor"
15
19
  >
@@ -713,7 +717,6 @@ function traverseNextNode(node) {
713
717
  }
714
718
 
715
719
  :deep(.apos-rich-text-toolbar) {
716
-
717
720
  & > .apos-context-menu__pane {
718
721
  padding: 8px;
719
722
  border: 1px solid var(--a-primary-transparent-25);
@@ -721,24 +724,24 @@ function traverseNextNode(node) {
721
724
  border-radius: var(--a-border-radius-large);
722
725
  }
723
726
 
724
- .apos-is-active .apos-button--rich-text:after,
725
- .apos-button--rich-text:hover:after,
726
- .apos-button--rich-text:active:after,
727
- .apos-button--rich-text:focus:after {
727
+ .apos-is-active .apos-button--rich-text::after,
728
+ .apos-button--rich-text:hover::after,
729
+ .apos-button--rich-text:active::after,
730
+ .apos-button--rich-text:focus::after {
728
731
  opacity: 1;
729
732
  transform: scale(1.15) translateY(0);
730
733
  }
731
734
 
732
- .apos-is-active .apos-button--rich-text:after {
735
+ .apos-is-active .apos-button--rich-text::after {
733
736
  background-color: var(--a-primary-transparent-10);
734
737
  }
735
738
 
736
- .apos-is-active .apos-button--rich-text:hover:after {
739
+ .apos-is-active .apos-button--rich-text:hover::after {
737
740
  background-color: var(--a-primary-transparent-15);
738
741
  }
739
742
 
740
743
  .apos-button--rich-text .apos-button__icon {
741
- transition: all 0.3s var(--a-transition-timing-bounce);
744
+ transition: all 300ms var(--a-transition-timing-bounce);
742
745
  }
743
746
 
744
747
  .apos-button--rich-text {
@@ -749,26 +752,33 @@ function traverseNextNode(node) {
749
752
  border-radius: var(--a-border-radius);
750
753
  background-color: transparent;
751
754
  color: var(--a-base-1);
755
+
752
756
  &.apos-button--icon-only {
753
757
  width: 24px;
754
758
  padding: 0;
755
759
  }
760
+
756
761
  &:hover {
757
762
  background-color: transparent;
758
763
  }
759
- &:hover:after {
764
+
765
+ &:hover::after {
760
766
  background-color: var(--a-base-9);
761
767
  }
768
+
762
769
  &:active {
763
770
  background-color: transparent;
764
771
  }
772
+
765
773
  &:active .apos-button__icon {
766
774
  transform: scale(0.8);
767
775
  }
768
- &:active:after, &:focus:after {
776
+
777
+ &:active::after, &:focus::after {
769
778
  background-color: var(--a-primary-transparent-25);
770
779
  }
771
- &:after {
780
+
781
+ &::after {
772
782
  content: '';
773
783
  z-index: $z-index-button-background;
774
784
  position: absolute;
@@ -779,9 +789,9 @@ function traverseNextNode(node) {
779
789
  height: 100%;
780
790
  background-color: transparent;
781
791
  transition:
782
- opacity 0.5s var(--a-transition-timing-bounce),
783
- transform 0.5s var(--a-transition-timing-bounce),
784
- background-color 0.5s ease;
792
+ opacity 500ms var(--a-transition-timing-bounce),
793
+ transform 500ms var(--a-transition-timing-bounce),
794
+ background-color 500ms ease;
785
795
  opacity: 0;
786
796
  transform: scale(0.3) translateY(-4px);
787
797
  }
@@ -811,43 +821,42 @@ function traverseNextNode(node) {
811
821
  gap: 6px;
812
822
  }
813
823
 
814
- .apos-rich-text-editor__editor :deep(.ProseMirror) {
824
+ .apos-rich-text-editor__editor :deep(.ProseMirror) { /* stylelint-disable-line selector-class-pattern */
815
825
  @include apos-transition();
816
826
  }
817
827
 
818
- .apos-rich-text-editor__editor :deep(.ProseMirror:focus) {
828
+ .apos-rich-text-editor__editor :deep(.ProseMirror:focus) { /* stylelint-disable-line selector-class-pattern */
819
829
  outline: none;
820
830
  }
821
831
 
822
- .apos-rich-text-editor__editor :deep(.ProseMirror) {
832
+ .apos-rich-text-editor__editor :deep(.ProseMirror) { /* stylelint-disable-line selector-class-pattern */
823
833
  padding: 10px 0;
824
834
  }
825
835
 
826
- .apos-rich-text-editor__editor :deep(.ProseMirror:focus p.apos-is-empty::after) {
836
+ .apos-rich-text-editor__editor :deep(.ProseMirror:focus p.apos-is-empty::after) { /* stylelint-disable-line selector-class-pattern, selector-no-qualifying-type */
827
837
  display: block;
828
838
  margin: 5px 0 10px;
839
+ padding-top: 5px;
840
+ border-top: 1px solid var(--a-primary-transparent-50);
829
841
  color: var(--a-primary-transparent-50);
830
842
  font-size: var(--a-type-smaller);
831
843
  text-transform: uppercase;
832
844
  letter-spacing: 0.5px;
833
845
  font-weight: 600;
834
- border-top: 1px solid var(--a-primary-transparent-50);
835
- padding-top: 5px;
836
846
  content: attr(data-placeholder);
837
847
  pointer-events: none;
838
848
  }
839
849
 
840
850
  .apos-rich-text-editor__editor {
841
851
  @include apos-transition();
852
+
842
853
  position: relative;
843
854
  border-radius: var(--a-border-radius);
844
855
  background-color: transparent;
845
856
  }
846
857
 
847
858
  .apos-rich-text-editor__editor :deep([data-tippy-root]) {
848
- transition: all 0.4s var(--a-transition-timing-bounce);
849
- /* stylelint-disable-next-line time-min-milliseconds */
850
- transition-delay: 0.1s;
859
+ transition: transform 400ms var(--a-transition-timing-bounce) 100ms;
851
860
  }
852
861
 
853
862
  .apos-rich-text-editor__editor :deep(.tippy-box[data-animation='fade'][data-state='hidden']) {
@@ -859,13 +868,12 @@ function traverseNextNode(node) {
859
868
  background-color: var(--a-primary-transparent-10);
860
869
  min-height: 50px;
861
870
  }
871
+
862
872
  .apos-rich-text-editor__editor_after {
863
873
  @include type-small;
874
+
864
875
  position: absolute;
865
- top: 0;
866
- right: 0;
867
- bottom: 0;
868
- left: 0;
876
+ inset: 0;
869
877
  display: block;
870
878
  width: 200px;
871
879
  height: 10px;
@@ -878,11 +886,13 @@ function traverseNextNode(node) {
878
886
  text-transform: uppercase;
879
887
  letter-spacing: 1px;
880
888
  text-align: center;
889
+
881
890
  &.apos-is-visually-empty {
882
891
  opacity: 1;
883
892
  visibility: visible;
884
893
  }
885
894
  }
895
+
886
896
  :deep(.apos-rich-text-toolbar__inner > .apos-rich-text-editor__control) {
887
897
  /* Addresses a Safari-only situation where it inherits the
888
898
  `::-webkit-scrollbar-button` 2px margin. */
@@ -907,12 +917,12 @@ function traverseNextNode(node) {
907
917
 
908
918
  // So editors can identify the cells that would take part
909
919
  // in a merge operation
910
- .apos-rich-text-editor__editor :deep(.selectedCell) {
920
+ .apos-rich-text-editor__editor :deep(.selectedCell) { /* stylelint-disable-line selector-class-pattern */
911
921
  // Should be visible on any background, light mode or dark mode
912
922
  backdrop-filter: invert(0.1);
913
923
  }
914
924
 
915
- .apos-rich-text-editor__editor :deep(figure.ProseMirror-selectednode) {
925
+ .apos-rich-text-editor__editor :deep(figure.ProseMirror-selectednode) { /* stylelint-disable-line selector-no-qualifying-type, selector-class-pattern */
916
926
  opacity: 0.5;
917
927
  }
918
928
 
@@ -939,6 +949,8 @@ function traverseNextNode(node) {
939
949
  }
940
950
 
941
951
  .apos-rich-text-insert-menu-item {
952
+ @include apos-transition();
953
+
942
954
  all: unset;
943
955
  display: flex;
944
956
  flex-direction: row;
@@ -946,13 +958,15 @@ function traverseNextNode(node) {
946
958
  gap: 12px;
947
959
  padding: 14px 16px;
948
960
  border-bottom: 1px solid var(--a-base-9);
949
- @include apos-transition();
961
+
950
962
  &:last-of-type {
951
963
  border-bottom: none;
952
964
  }
965
+
953
966
  &:hover {
954
967
  background-color: var(--a-primary-transparent-10);
955
968
  }
969
+
956
970
  &:active, &:focus {
957
971
  background-color: var(--a-primary);
958
972
  color: var(--a-white);
@@ -963,25 +977,29 @@ function traverseNextNode(node) {
963
977
  display: flex;
964
978
  flex-direction: column;
965
979
  gap: 5px;
980
+
966
981
  h4, p {
967
982
  margin: 0;
968
983
  font-family: var(--a-family-default);
969
984
  }
985
+
970
986
  h4 {
971
987
  font-weight: 500;
972
988
  font-size: var(--a-type-large);
973
989
  }
990
+
974
991
  p {
975
992
  font-size: var(--a-type-label);
976
993
  }
977
994
  }
995
+
978
996
  .apos-rich-text-insert-menu-icon {
979
997
  position: relative;
980
998
  display: flex;
981
- width: 40px;
982
- height: 40px;
983
999
  align-items: center;
984
1000
  justify-content: center;
1001
+ width: 40px;
1002
+ height: 40px;
985
1003
  border: 1px solid var(--a-base-8);
986
1004
  color: var(--a-text-primary);
987
1005
  background-color: var(--a-white);
@@ -990,30 +1008,30 @@ function traverseNextNode(node) {
990
1008
 
991
1009
  .apos-rich-text-insert-menu-heading {
992
1010
  padding: 12px 16px;
993
- background-color: var(--a-base-9);
994
- color: var(--a-base-2);
995
- font-weight: 500;
996
1011
  border-bottom: 1px solid var(--a-base-7);
1012
+ color: var(--a-base-2);
997
1013
  font-size: var(--a-type-label);
1014
+ background-color: var(--a-base-9);
1015
+ font-weight: 500;
998
1016
  letter-spacing: 0.25px;
999
1017
  }
1000
1018
 
1001
- :deep(.ProseMirror) {
1019
+ :deep(.ProseMirror) { /* stylelint-disable-line selector-class-pattern */
1002
1020
  > * + * {
1003
1021
  margin-top: 0.75em;
1004
1022
  }
1005
1023
  }
1006
1024
 
1007
- :deep(.ProseMirror-gapcursor) {
1025
+ :deep(.ProseMirror-gapcursor) { /* stylelint-disable-line selector-class-pattern */
1008
1026
  position: relative;
1009
1027
  display: block;
1010
1028
  height: 20px;
1011
1029
 
1012
- &:after {
1030
+ &::after {
1013
1031
  width: 1px;
1014
1032
  height: 20px;
1015
- border-left: 1px solid #000;
1016
1033
  border-top: 0 none;
1034
+ border-left: 1px solid #000;
1017
1035
  }
1018
1036
  }
1019
1037
  </style>
@@ -20,6 +20,7 @@ export default {
20
20
  <style lang="scss" scoped>
21
21
  .apos-rich-text-editor__control--divider {
22
22
  @include type-help;
23
+
23
24
  padding: 10px;
24
25
  opacity: 0.3;
25
26
  }
@@ -152,7 +152,7 @@ export default {
152
152
  }
153
153
 
154
154
  .apos-marks-control__button:deep(.apos-button--rich-text) {
155
- &:active:after, &:focus:after {
155
+ &:active::after, &:focus::after {
156
156
  background-color: var(--a-base-8);
157
157
  }
158
158
 
@@ -210,6 +210,7 @@ export default {
210
210
 
211
211
  &--is-active {
212
212
  background-color: var(--a-base-10);
213
+
213
214
  &:hover {
214
215
  background-color: var(--a-base-9);
215
216
  }
@@ -217,6 +218,7 @@ export default {
217
218
 
218
219
  .apos-marks-control__button {
219
220
  @include apos-button-reset();
221
+
220
222
  display: block;
221
223
  width: 100%;
222
224
  padding: $spacing-base;
@@ -156,6 +156,7 @@ export default {
156
156
  .apos-tiptap-control--select {
157
157
  @include apos-button-reset();
158
158
  @include apos-transition();
159
+
159
160
  height: 100%;
160
161
  padding: 0 $spacing-half;
161
162
  font-size: var(--a-type-smaller);
@@ -172,7 +173,8 @@ export default {
172
173
  padding: 0 $spacing-half;
173
174
  color: var(--a-base-1);
174
175
  border-radius: var(--a-border-radius);
175
- transition: all 0.5s ease;
176
+ transition: all 500ms ease;
177
+
176
178
  &:hover {
177
179
  color: var(--a-text-primary);
178
180
  background-color: var(--a-base-9);
@@ -146,6 +146,7 @@ export default {
146
146
  .apos-tiptap-control--select {
147
147
  @include apos-button-reset();
148
148
  @include type-small;
149
+
149
150
  height: 100%;
150
151
  padding: 0 15px 0 10px;
151
152
 
@@ -153,6 +154,7 @@ export default {
153
154
  background-color: var(--a-base-9);
154
155
  outline: none;
155
156
  }
157
+
156
158
  &:hover {
157
159
  background-color: var(--a-base-8);
158
160
  }
@@ -93,16 +93,10 @@ export default (options) => {
93
93
  .filter(c => allow[tag].includes(c));
94
94
 
95
95
  // If we have valid classes, join and return them.
96
- // If no valid classes for this parse, default to the
97
- // the first setting for this tag (including null for tags defined without classes).
98
96
  // else, remove classes.
99
- const defaultOrNull =
100
- options.nodes.find(s => s.tag === tag)?.class ||
101
- options.marks.find(s => s.tag === tag)?.class ||
102
- null;
103
97
  return classes.length
104
98
  ? classes.join(' ')
105
- : defaultOrNull;
99
+ : null;
106
100
  }
107
101
  }
108
102
  }
@@ -22,6 +22,16 @@ export default (options) => {
22
22
  rendered: false
23
23
  }
24
24
  };
25
+ },
26
+ addKeyboardShortcuts() {
27
+ const marks = Object.keys(this.editor.schema.marks);
28
+ return this.options.levels.reduce((items, level) => ({
29
+ ...items,
30
+ ...{
31
+ [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level }),
32
+ Enter: () => marks.forEach(mark => this.editor.commands.unsetMark(mark))
33
+ }
34
+ }), {});
25
35
  }
26
36
  });
27
37
  };
@@ -786,8 +786,12 @@ module.exports = (self) => {
786
786
  }
787
787
  const errors = [];
788
788
  for (const datum of data) {
789
- const result = {};
790
- result._id = self.apos.launder.id(datum._id) || self.apos.util.generateId();
789
+ const _id = self.apos.launder.id(datum._id) || self.apos.util.generateId();
790
+ const [ found ] = destination[field.name]?.filter?.(item => item._id === _id) || [];
791
+ const result = {
792
+ ...(found || {}),
793
+ _id
794
+ };
791
795
  result.metaType = 'arrayItem';
792
796
  result.scopedArrayName = field.scopedArrayName;
793
797
  try {
@@ -876,6 +880,7 @@ module.exports = (self) => {
876
880
  const schema = field.schema;
877
881
  const errors = [];
878
882
  const result = {
883
+ ...(destination[field.name] || {}),
879
884
  _id: self.apos.launder.id(data && data._id) || self.apos.util.generateId()
880
885
  };
881
886
  if (data == null || typeof data !== 'object' || Array.isArray(data)) {
@@ -1027,7 +1032,7 @@ module.exports = (self) => {
1027
1032
  const result = results.find(doc => (doc._id === item._id));
1028
1033
  if (result) {
1029
1034
  if (field.schema) {
1030
- result._fields = {};
1035
+ result._fields = { ...(destination[field.name]?.find?.(doc => doc._id === item._id)?._fields || {}) };
1031
1036
  if (item && ((typeof item._fields === 'object'))) {
1032
1037
  await self.convert(req, field.schema, item._fields || {}, result._fields);
1033
1038
  }
@@ -6,7 +6,6 @@
6
6
  @inactive="modal.active = false"
7
7
  @show-modal="modal.showModal = true"
8
8
  @esc="confirmAndCancel"
9
- @no-modal="emitSafeClose"
10
9
  >
11
10
  <template #secondaryControls>
12
11
  <AposButton
@@ -66,7 +65,7 @@
66
65
  <div class="apos-modal-array-item__pane">
67
66
  <div class="apos-array-item__body">
68
67
  <AposSchema
69
- v-if="currentId"
68
+ v-show="currentId"
70
69
  ref="schema"
71
70
  :schema="schema"
72
71
  :trigger-validation="triggerValidation"
@@ -94,8 +93,7 @@ import AposArrayEditorLogic from '../logic/AposArrayEditor';
94
93
 
95
94
  export default {
96
95
  name: 'AposArrayEditor',
97
- mixins: [ AposArrayEditorLogic ],
98
- emits: [ 'safe-close' ]
96
+ mixins: [ AposArrayEditorLogic ]
99
97
  };
100
98
  </script>
101
99
 
@@ -116,10 +114,10 @@ export default {
116
114
  }
117
115
 
118
116
  .apos-array-item__body {
119
- padding-top: 20px;
120
- max-width: 90%;
121
117
  margin-right: auto;
122
118
  margin-left: auto;
119
+ padding-top: 20px;
120
+ max-width: 90%;
123
121
  }
124
122
 
125
123
  .apos-modal-array-min-error, .apos-modal-array-max-error {
@@ -47,6 +47,7 @@ export default {
47
47
  <style lang="scss" scoped>
48
48
  .apos-field--area {
49
49
  max-width: $input-max-width;
50
+
50
51
  .apos-input-wrapper:not(.apos-is-empty) {
51
52
  padding: $spacing-base;
52
53
  border: 1px solid var(--a-base-8);
@@ -71,12 +71,12 @@ export default {
71
71
  }
72
72
 
73
73
  .apos-boolean__label {
74
- min-width: 0;
75
74
  position: relative;
76
75
  display: flex;
77
- justify-content: center;
78
76
  align-items: center;
77
+ justify-content: center;
79
78
  padding: math.div($boolean-padding, 2) $boolean-padding;
79
+ min-width: 0;
80
80
 
81
81
  &:first-of-type {
82
82
  border-top-right-radius: 0;
@@ -117,6 +117,7 @@ export default {
117
117
  border-color: var(--a-base-4);
118
118
  }
119
119
  }
120
+
120
121
  .apos-boolean__input + & {
121
122
  &:hover {
122
123
  cursor: pointer;
@@ -144,6 +145,7 @@ export default {
144
145
  top: 1px;
145
146
  }
146
147
  }
148
+
147
149
  .apos-boolean__input:focus + .apos-boolean__label {
148
150
  border-color: var(--a-base-2);
149
151
  box-shadow: 0 0 5px var(--a-base-6);
@@ -156,6 +158,7 @@ export default {
156
158
  color: var(--a-base-4);
157
159
  background: var(--a-base-7);
158
160
  border-color: var(--a-base-4);
161
+
159
162
  &:hover {
160
163
  cursor: not-allowed;
161
164
  border-color: var(--a-base-4);
@@ -61,6 +61,7 @@ export default {
61
61
 
62
62
  .apos-color__info {
63
63
  @include type-base;
64
+
64
65
  margin-left: 15px;
65
66
  color: var(--a-text-primary);
66
67
  }
@@ -46,8 +46,8 @@ export default {
46
46
  <style scoped lang='scss'>
47
47
  .apos-input-wrapper {
48
48
  display: flex;
49
- justify-content: space-around;
50
49
  align-items: center;
50
+ justify-content: space-around;
51
51
  }
52
52
 
53
53
  .apos-toggle {
@@ -42,9 +42,11 @@ export default {
42
42
  .apos-input-object {
43
43
  border-left: 1px solid var(--a-base-9);
44
44
  }
45
+
45
46
  .apos-input-wrapper {
46
47
  margin: 20px 0 0 19px;
47
48
  }
49
+
48
50
  .apos-input-object :deep(.apos-schema .apos-field) {
49
51
  margin-bottom: 30px;
50
52
  }
@@ -61,6 +61,7 @@ export default {
61
61
  border-radius: 50%;
62
62
  }
63
63
  }
64
+
64
65
  .apos-choice-label-info {
65
66
  position: relative;
66
67
  top: 3px;
@@ -64,18 +64,20 @@ export default {
64
64
  <style lang="scss" scoped>
65
65
  .apos-input-wrapper {
66
66
  @include type-base;
67
+
67
68
  display: flex;
68
- justify-content: space-between;
69
- align-content: flex-start;
69
+ place-content: flex-start space-between;
70
70
  }
71
71
 
72
72
  .apos-range__value {
73
73
  padding-top: 7px;
74
74
  min-width: 100px;
75
+
75
76
  &.apos-is-unset {
76
77
  opacity: 0;
77
78
  pointer-events: none;
78
79
  }
80
+
79
81
  .apos-range__clear {
80
82
  margin-left: 5px;
81
83
  }
@@ -94,8 +96,9 @@ export default {
94
96
 
95
97
  .apos-range__scale {
96
98
  @include type-small;
99
+
97
100
  color: var(--a-base-4);
98
- transition: color 0.5s ease;
101
+ transition: color 500ms ease;
99
102
  }
100
103
 
101
104
  // adapted from http://danielstern.ca/range.css/#/
@@ -105,9 +108,11 @@ export default {
105
108
  background-color: transparent;
106
109
  /* stylelint-disable-next-line property-no-vendor-prefix */
107
110
  -webkit-appearance: none;
108
- transition: all 0.3s ease;
111
+ transition: all 300ms ease;
112
+
109
113
  &:focus {
110
114
  outline: none;
115
+
111
116
  & + .apos-range__scale {
112
117
  color: var(--a-text-primary);
113
118
  }
@@ -136,16 +141,17 @@ export default {
136
141
  }
137
142
 
138
143
  .apos-range__input::-webkit-slider-thumb {
139
- margin-top: -6px;
140
144
  width: 15px;
141
145
  height: 15px;
146
+ margin-top: -6px;
142
147
  border: 1px solid var(--a-primary-dark-15);
143
- border-radius: 50%;
144
148
  background: var(--a-primary);
149
+ border-radius: 50%;
145
150
  cursor: pointer;
146
151
  /* stylelint-disable-next-line property-no-vendor-prefix */
147
152
  -webkit-appearance: none;
148
153
  }
154
+
149
155
  .apos-range__input[disabled]::-webkit-slider-thumb {
150
156
  background: var(--a-primary-light-40);
151
157
  }
@@ -203,11 +209,11 @@ export default {
203
209
  .apos-range__input::-ms-thumb {
204
210
  width: 15px;
205
211
  height: 15px;
212
+ margin-top: 0;
206
213
  border: 1px solid var(--a-primary-dark-15);
207
- border-radius: 1px;
208
214
  background: var(--a-primary);
215
+ border-radius: 1px;
209
216
  cursor: pointer;
210
- margin-top: 0;
211
217
  }
212
218
 
213
219
  .apos-range__input[disabled]::-ms-thumb {
@@ -45,7 +45,7 @@
45
45
  <AposButton
46
46
  v-if="field.browse !== false"
47
47
  class="apos-input-relationship__button"
48
- :disabled="field.readOnly || limitReached"
48
+ :disabled="field.readOnly"
49
49
  :label="browseLabel"
50
50
  :modifiers="buttonModifiers"
51
51
  type="input"
@@ -69,7 +69,7 @@
69
69
  :selected-items="next"
70
70
  :icon="field.suggestionIcon"
71
71
  :icon-size="field.suggestionIconSize"
72
- :fields="field.suggestionFields"
72
+ :fields="suggestionFields"
73
73
  disabled-tooltip="apostrophe:publishBeforeUsingTooltip"
74
74
  @select="updateSelected"
75
75
  />
@@ -114,6 +114,7 @@ export default {
114
114
  padding: $spacing-half;
115
115
  }
116
116
  }
117
+
117
118
  .apos-field--no-search {
118
119
  .apos-input-relationship__button {
119
120
  position: relative;
@@ -124,6 +125,7 @@ export default {
124
125
 
125
126
  .apos-field__min-size {
126
127
  @include type-help;
128
+
127
129
  display: flex;
128
130
  flex-grow: 1;
129
131
  margin-bottom: $spacing-base;