@zipify/wysiwyg 1.0.0-dev.17 → 1.0.0-dev.18

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 (98) hide show
  1. package/.github/dependabot.yaml +1 -0
  2. package/dist/wysiwyg.css +199 -12
  3. package/dist/wysiwyg.js +1 -1
  4. package/example/ExampleApp.vue +6 -2
  5. package/example/pageBlocks.js +31 -0
  6. package/example/presets.js +2 -2
  7. package/lib/Wysiwyg.vue +14 -3
  8. package/lib/assets/icons/link.svg +3 -0
  9. package/lib/assets/icons/unlink.svg +3 -0
  10. package/lib/components/base/Button.vue +21 -1
  11. package/lib/components/base/Checkbox.vue +89 -0
  12. package/lib/components/base/FieldLabel.vue +2 -1
  13. package/lib/components/base/Icon.vue +2 -2
  14. package/lib/components/base/Modal.vue +0 -1
  15. package/lib/components/base/TextField.vue +106 -0
  16. package/lib/components/base/__tests__/TextField.test.js +57 -0
  17. package/lib/components/base/__tests__/__snapshots__/TextField.test.js.snap +9 -0
  18. package/lib/components/base/composables/index.js +1 -0
  19. package/lib/components/base/composables/useValidator.js +19 -0
  20. package/lib/components/base/dropdown/Dropdown.vue +15 -3
  21. package/lib/components/base/dropdown/DropdownActivator.vue +19 -3
  22. package/lib/components/base/index.js +2 -0
  23. package/lib/components/toolbar/Toolbar.vue +5 -5
  24. package/lib/components/toolbar/ToolbarFull.vue +10 -2
  25. package/lib/components/toolbar/controls/FontSizeControl.vue +7 -0
  26. package/lib/components/toolbar/controls/UnderlineControl.vue +2 -2
  27. package/lib/components/toolbar/controls/__tests__/UnderlineControl.test.js +4 -0
  28. package/lib/components/toolbar/controls/index.js +1 -0
  29. package/lib/components/toolbar/controls/link/LinkControl.vue +152 -0
  30. package/lib/components/toolbar/controls/link/LinkControlApply.vue +35 -0
  31. package/lib/components/toolbar/controls/link/LinkControlHeader.vue +67 -0
  32. package/lib/components/toolbar/controls/link/composables/index.js +1 -0
  33. package/lib/components/toolbar/controls/link/composables/useLink.js +61 -0
  34. package/lib/components/toolbar/controls/link/destination/LinkControlDestination.vue +103 -0
  35. package/lib/components/toolbar/controls/link/destination/LinkControlPageBlock.vue +54 -0
  36. package/lib/components/toolbar/controls/link/destination/LinkControlUrl.vue +52 -0
  37. package/lib/components/toolbar/controls/link/destination/index.js +1 -0
  38. package/lib/components/toolbar/controls/link/index.js +1 -0
  39. package/lib/composables/__tests__/useEditor.test.js +2 -2
  40. package/lib/composables/useEditor.js +2 -4
  41. package/lib/enums/LinkDestinations.js +4 -0
  42. package/lib/enums/LinkTargets.js +4 -0
  43. package/lib/enums/TextSettings.js +3 -1
  44. package/lib/enums/index.js +2 -0
  45. package/lib/extensions/Alignment.js +18 -6
  46. package/lib/extensions/BackgroundColor.js +14 -6
  47. package/lib/extensions/FontColor.js +14 -6
  48. package/lib/extensions/FontFamily.js +25 -8
  49. package/lib/extensions/FontSize.js +26 -13
  50. package/lib/extensions/FontStyle.js +23 -13
  51. package/lib/extensions/FontWeight.js +22 -14
  52. package/lib/extensions/LineHeight.js +11 -3
  53. package/lib/extensions/Link.js +101 -0
  54. package/lib/extensions/StylePreset.js +4 -2
  55. package/lib/extensions/TextDecoration.js +27 -12
  56. package/lib/extensions/__tests__/Alignment.test.js +11 -5
  57. package/lib/extensions/__tests__/BackgroundColor.test.js +11 -5
  58. package/lib/extensions/__tests__/CaseStyle.test.js +3 -5
  59. package/lib/extensions/__tests__/FontColor.test.js +11 -5
  60. package/lib/extensions/__tests__/FontFamily.test.js +32 -7
  61. package/lib/extensions/__tests__/FontSize.test.js +11 -5
  62. package/lib/extensions/__tests__/FontStyle.test.js +11 -5
  63. package/lib/extensions/__tests__/FontWeight.test.js +11 -5
  64. package/lib/extensions/__tests__/LineHeight.test.js +11 -5
  65. package/lib/extensions/__tests__/StylePreset.test.js +70 -6
  66. package/lib/extensions/__tests__/TextDecoration.test.js +27 -5
  67. package/lib/extensions/__tests__/__snapshots__/Alignment.test.js.snap +26 -2
  68. package/lib/extensions/__tests__/__snapshots__/BackgroundColor.test.js.snap +30 -1
  69. package/lib/extensions/__tests__/__snapshots__/FontColor.test.js.snap +18 -1
  70. package/lib/extensions/__tests__/__snapshots__/FontFamily.test.js.snap +88 -1
  71. package/lib/extensions/__tests__/__snapshots__/FontSize.test.js.snap +33 -2
  72. package/lib/extensions/__tests__/__snapshots__/FontStyle.test.js.snap +25 -4
  73. package/lib/extensions/__tests__/__snapshots__/FontWeight.test.js.snap +30 -1
  74. package/lib/extensions/__tests__/__snapshots__/LineHeight.test.js.snap +26 -2
  75. package/lib/extensions/__tests__/__snapshots__/StylePreset.test.js.snap +6 -2
  76. package/lib/extensions/__tests__/__snapshots__/TextDecoration.test.js.snap +93 -3
  77. package/lib/extensions/core/CopyPasteProcessor.js +10 -0
  78. package/lib/extensions/core/TextProcessor.js +10 -0
  79. package/lib/extensions/core/__tests__/NodeProcessor.test.js +3 -5
  80. package/lib/extensions/core/__tests__/SelectionProcessor.test.js +3 -5
  81. package/lib/extensions/core/__tests__/TextProcessor.test.js +138 -12
  82. package/lib/extensions/core/__tests__/__snapshots__/TextProcessor.test.js.snap +26 -0
  83. package/lib/extensions/core/index.js +11 -2
  84. package/lib/extensions/core/plugins/PastePlugin.js +48 -0
  85. package/lib/extensions/core/plugins/ProseMirrorPlugin.js +20 -0
  86. package/lib/extensions/core/plugins/index.js +1 -0
  87. package/lib/extensions/index.js +41 -34
  88. package/lib/extensions/list/__tests__/List.test.js +3 -5
  89. package/lib/extensions/list/__tests__/__snapshots__/List.test.js.snap +45 -15
  90. package/lib/injectionTokens.js +2 -1
  91. package/lib/services/ContentNormalizer.js +62 -20
  92. package/lib/services/__tests__/ContentNormalizer.test.js +40 -7
  93. package/lib/styles/content.css +17 -9
  94. package/lib/styles/helpers/offsets.css +16 -0
  95. package/lib/styles/variables.css +6 -0
  96. package/lib/utils/__tests__/__snapshots__/renderInlineSetting.test.js.snap +4 -4
  97. package/lib/utils/renderInlineSetting.js +1 -1
  98. package/package.json +11 -9
@@ -11,6 +11,7 @@ updates:
11
11
  day: "monday"
12
12
  timezone: "Europe/Kiev"
13
13
  time: "09:00"
14
+ versioning-strategy: "increase"
14
15
  pull-request-branch-name:
15
16
  separator: "_"
16
17
  labels:
package/dist/wysiwyg.css CHANGED
@@ -68,6 +68,23 @@
68
68
  transition-property: background-color, color, opacity;
69
69
  will-change: background-color, color, opacity;
70
70
  }
71
+ .zw-button--primary[data-v-610825a2] {
72
+ background-color: rgb(var(--zw-color-green));
73
+ color: rgb(var(--zw-color-white));
74
+ padding: var(--zw-offset-xxs) var(--zw-offset-sm);
75
+ line-height: var(--zw-line-height-md);
76
+ }
77
+ .zw-button--primary[data-v-610825a2],
78
+ .zw-button--secondary[data-v-610825a2] {
79
+ color: rgb(var(--zw-color-white));
80
+ padding: var(--zw-offset-xxs) var(--zw-offset-sm);
81
+ font-weight: 600;
82
+ font-size: var(--zw-font-size-xs);
83
+ }
84
+ .zw-button--primary[data-v-610825a2]:not(:disabled):hover,
85
+ .zw-button--secondary[data-v-610825a2]:not(:disabled):hover {
86
+ opacity: 0.9;
87
+ }
71
88
  .zw-button--toolbar[data-v-610825a2]:not(.zw-button--icon) {
72
89
  padding: var(--zw-offset-xxs) var(--zw-offset-xs);
73
90
  }
@@ -86,7 +103,7 @@
86
103
 
87
104
 
88
105
  .zw-icon[data-v-d4624794] {
89
- display: inline-block;
106
+ display: flex;
90
107
  }
91
108
  .zw-icon--auto-color[data-v-d4624794] {
92
109
  --zw-icon-foreground: currentColor;
@@ -541,7 +558,6 @@
541
558
 
542
559
  .zw-modal[data-v-0a3c1c80] {
543
560
  border-radius: 2px;
544
- overflow: hidden;
545
561
  box-shadow: 0 0 4px rgba(var(--zw-color-black), 0.3);
546
562
  background-color: rgb(var(--zw-color-n15));
547
563
  max-height: var(--zw-modal-max-height);
@@ -574,6 +590,90 @@
574
590
  }
575
591
 
576
592
 
593
+ .zw-field[data-v-49291160] {
594
+ display: flex;
595
+ flex-direction: column;
596
+ }
597
+ .zw-field__input[data-v-49291160] {
598
+ --border-color: rgb(var(--zw-color-n60));
599
+ --text-color: rgb(var(--zw-color-n85));
600
+
601
+ border: 1px solid var(--border-color);
602
+ background-color: transparent;
603
+ color: var(--text-color);
604
+ font-size: var(--zw-font-size-xxs);
605
+ outline: none;
606
+ padding: 6px;
607
+ line-height: var(--zw-line-height-xxs);
608
+ }
609
+ .zw-field__input[data-v-49291160]:hover {
610
+ --border-color: rgb(var(--zw-color-n80));
611
+ --text-color: rgb(var(--zw-color-n85));
612
+ }
613
+ .zw-field__input[data-v-49291160]:focus,
614
+ .zw-field__input[data-v-49291160]:focus-within {
615
+ --border-color: rgb(var(--zw-color-white));
616
+ --text-color: rgb(var(--zw-color-white));
617
+ }
618
+ .zw-field__label[data-v-49291160] {
619
+ display: inline-block;
620
+ font-size: var(--zw-font-size-xxs);
621
+ padding-bottom: var(--zw-offset-xxs);
622
+ line-height: var(--zw-line-height-xxs);
623
+ }
624
+ .zw-field__label--error[data-v-49291160] {
625
+ font-size: var(--zw-font-size-xxs);
626
+ margin: var(--zw-offset-xxs) 0 0;
627
+ color: rgb(var(--zw-color-red));
628
+ }
629
+
630
+
631
+ .zw-checkbox[data-v-f7eea800] {
632
+ display: inline-flex;
633
+ align-items: center;
634
+ position: relative;
635
+ cursor: pointer;
636
+ padding: var(--zw-offset-xxs) var(--zw-offset-xxs) var(--zw-offset-xxs) 0;
637
+ }
638
+ .zw-checkbox__field + .zw-checkbox__indicator[data-v-f7eea800] {
639
+ color: var(--zw-color-n200);
640
+ box-shadow: inset 0 0 0 2px currentColor;
641
+ }
642
+ .zw-checkbox:hover .zw-checkbox__indicator[data-v-f7eea800] {
643
+ box-shadow: inset 0 0 0 2px rgb(var(--zw-color-green));
644
+ }
645
+ .zw-checkbox__field:checked + .zw-checkbox__indicator[data-v-f7eea800] {
646
+ color: rgb(var(--zw-color-green))
647
+ }
648
+ .zw-checkbox .zw-checkbox__field:checked + .zw-checkbox__indicator[data-v-f7eea800] {
649
+ background-color: rgb(var(--zw-color-green));
650
+ }
651
+ .zw-checkbox .zw-checkbox__indicator[data-v-f7eea800]::after {
652
+ content: "";
653
+ display: block;
654
+ height: 16px;
655
+ transform: scale(0.6);
656
+ transition: transform 0.2s ease-out;
657
+ width: 16px;
658
+ background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNiAyNiIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0uMyAxNGMtLjItLjItLjMtLjUtLjMtLjdzLjEtLjUuMy0uN2wxLjQtMS40Yy40LS40IDEtLjQgMS40IDBsLjEuMSA1LjUgNS45Yy4yLjIuNS4yLjcgMEwyMi44IDMuM2guMWMuNC0uNCAxLS40IDEuNCAwbDEuNCAxLjRjLjQuNC40IDEgMCAxLjRsLTE2IDE2LjZjLS4yLjItLjQuMy0uNy4zLS4zIDAtLjUtLjEtLjctLjNMLjUgMTQuMy4zIDE0eiIvPgo8L3N2Zz4K);
659
+ background-repeat: no-repeat;
660
+ background-size: 16px;
661
+ background-position: center center;
662
+ }
663
+ .zw-checkbox__field:not(:checked) + .zw-checkbox__indicator[data-v-f7eea800]::after {
664
+ transform: scale(0);
665
+ }
666
+ .zw-checkbox__field[data-v-f7eea800] {
667
+ position: absolute;
668
+ opacity: 0;
669
+ height: 0;
670
+ width: 0;
671
+ }
672
+ .zw-checkbox__label[data-v-f7eea800] {
673
+ font-size: var(--zw-font-size-xs);
674
+ }
675
+
676
+
577
677
  .zw-dropdown__activator[data-v-4865ea7a] {
578
678
  width: 100%;
579
679
  }
@@ -586,6 +686,11 @@
586
686
  .zw-dropdown__activator--active .zw-dropdown__activator-arrow[data-v-4865ea7a] {
587
687
  transform: rotateX(180deg);
588
688
  }
689
+ .zw-dropdown__activator--gray[data-v-4865ea7a] {
690
+ background-color: rgb(var(--zw-color-n20));
691
+ font-size: var(--zw-font-size-xxs);
692
+ color: rgb(var(--zw-color-white));
693
+ }
589
694
 
590
695
 
591
696
  .zw-dropdown__option[data-v-10a0f0b7] {
@@ -672,6 +777,11 @@
672
777
  }
673
778
 
674
779
 
780
+ .zw-font-size-control[data-v-a2e458ce] {
781
+ width: 64px;
782
+ }
783
+
784
+
675
785
  .zw-alignment-control__modal[data-v-9713d430] {
676
786
  padding: var(--zw-offset-xxs);
677
787
  }
@@ -702,6 +812,53 @@
702
812
  }
703
813
 
704
814
 
815
+ .zw-link-modal-header[data-v-1b67b282] {
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: space-between;
819
+ padding: var(--zw-offset-sm);
820
+ border-bottom: 2px solid rgb(var(--zw-color-n5));
821
+ }
822
+ .zw-link-modal-header__title[data-v-1b67b282] {
823
+ text-transform: uppercase;
824
+ font-weight: var(--zw-font-weight-semibold);
825
+ font-size: var(--zw-font-size-xxs);
826
+ color: rgb(var(--zw-color-white));
827
+ }
828
+ .zw-link-modal-header__unlink-icon[data-v-1b67b282] {
829
+ margin-right: var(--zw-offset-xxs);
830
+ }
831
+ .zw-link-modal-header__unlink-button[data-v-1b67b282] {
832
+ color: rgb(var(--zw-color-n80));
833
+ font-size: var(--zw-font-size-xxs);
834
+ transition: 0.1s opacity ease-out;
835
+ will-change: opacity;
836
+ }
837
+ .zw-link-modal-header__unlink-button[data-v-1b67b282]:disabled {
838
+ opacity: 0.35;
839
+ }
840
+ .zw-link-modal-header__unlink-button[data-v-1b67b282]:hover {
841
+ color: rgb(var(--zw-color-white));
842
+ }
843
+
844
+
845
+ .zw-link-modal__apply[data-v-77b6c3ac] {
846
+ display: flex;
847
+ justify-content: flex-end;
848
+ }
849
+
850
+
851
+ .zw-link-modal[data-v-30870bdc] {
852
+ width: 266px;
853
+ }
854
+ .zw-link-modal__body[data-v-30870bdc] {
855
+ padding: var(--zw-offset-sm);
856
+ }
857
+ [data-v-30870bdc] .zw-link-modal-dropdown__option {
858
+ width: 234px;
859
+ }
860
+
861
+
705
862
  .zw-toolbar[data-v-05accea6] {
706
863
  border-radius: 2px;
707
864
  background-color: rgb(var(--zw-color-n15));
@@ -725,7 +882,7 @@
725
882
  }
726
883
  .zw-toolbar--enter-active[data-v-05accea6],
727
884
  .zw-toolbar--leave-active[data-v-05accea6] {
728
- transition: opacity 0.15s ease-out;
885
+ transition: opacity 150ms ease-out;
729
886
  }
730
887
  .zw-toolbar--leave-active[data-v-05accea6] {
731
888
  transition: opacity 0s ease-in;
@@ -745,13 +902,17 @@
745
902
  --zw-color-n80: 196, 196, 196; /* #C4C4C4 */
746
903
  --zw-color-n85: 217, 217, 217; /* #D9D9D9 */
747
904
  --zw-color-n90: 230, 230, 230; /* #E6E6E6 */
905
+ --zw-color-n200: 194, 200, 209; /* #C2C8D1 */
748
906
  --zw-color-black: 0, 0, 0;
749
907
  --zw-color-white: 255, 255, 255;
908
+ --zw-color-green: 59, 180, 74; /* #3BB44A */
909
+ --zw-color-red: 234, 58, 58; /* #EA3A3A */
750
910
 
751
911
  --zw-offset-xxs: 4px;
752
912
  --zw-offset-xs: 8px;
753
913
  --zw-offset-xsm: 12px;
754
914
  --zw-offset-sm: 16px;
915
+ --zw-offset-md: 24px;
755
916
 
756
917
  --zw-font-weight-thin: 400;
757
918
  --zw-font-weight-semibold: 500;
@@ -779,6 +940,8 @@ $builder-N90: #E6E6E6;
779
940
  $builder-N94: #F0F0F0;
780
941
  $builder-N96: #F5F5F5;
781
942
  $builder-N98: #FAFAFA;
943
+ $builder-N200: #C2C8D1;
944
+ $builder-R50: #EA3A3A;
782
945
 
783
946
  $font-size-xxs: 12px;
784
947
  $font-size-xs: 14px;
@@ -797,6 +960,14 @@ $font-height--md: 1.72;
797
960
  outline: none;
798
961
  }
799
962
 
963
+ .zw-wysiwyg__placeholder:first-child:last-child::before {
964
+ content: attr(data-placeholder);
965
+ color: rgb(var(--zw-color-n70));
966
+ float: left;
967
+ height: 0;
968
+ pointer-events: none;
969
+ }
970
+
800
971
  .zw-style {
801
972
  font-weight: var(--zw-font-weight, var(--zw-preset-font-weight));
802
973
  font-family: var(--zw-font-family, var(--zw-preset-font-family));
@@ -809,27 +980,27 @@ $font-height--md: 1.72;
809
980
  @media (min-width: 1200px) {
810
981
 
811
982
  .zw-style {
812
- font-size: var(--zw-desktop-font-size, var(--zw-preset-desktop-font-size));
813
- text-align: var(--zw-desktop-text-align, var(--zw-preset-desktop-text-align));
814
- line-height: var(--zw-desktop-line-height, var(--zw-preset-desktop-line-height));
983
+ font-size: var(--zw-font-size-desktop, var(--zw-preset-desktop-font-size));
984
+ text-align: var(--zw-text-align-desktop, var(--zw-preset-desktop-text-align));
985
+ line-height: var(--zw-line-height-desktop, var(--zw-preset-desktop-line-height));
815
986
  }
816
987
  }
817
988
 
818
989
  @media (min-width: 769px) and (max-width: 1199.98px) {
819
990
 
820
991
  .zw-style {
821
- font-size: var(--zw-tablet-font-size, var(--zw-preset-tablet-font-size));
822
- text-align: var(--zw-tablet-text-align, var(--zw-preset-tablet-text-align));
823
- line-height: var(--zw-tablet-line-height, var(--zw-preset-tablet-line-height));
992
+ font-size: var(--zw-font-size-tablet, var(--zw-preset-tablet-font-size));
993
+ text-align: var(--zw-text-align-tablet, var(--zw-preset-tablet-text-align));
994
+ line-height: var(--zw-line-height-tablet, var(--zw-preset-tablet-line-height));
824
995
  }
825
996
  }
826
997
 
827
998
  @media (max-width: 768.98px) {
828
999
 
829
1000
  .zw-style {
830
- font-size: var(--zw-mobile-font-size, var(--zw-preset-mobile-font-size));
831
- text-align: var(--zw-mobile-text-align, var(--zw-preset-mobile-text-align));
832
- line-height: var(--zw-mobile-line-height, var(--zw-preset-mobile-line-height));
1001
+ font-size: var(--zw-font-size-mobile, var(--zw-preset-mobile-font-size));
1002
+ text-align: var(--zw-text-align-mobile, var(--zw-preset-mobile-text-align));
1003
+ line-height: var(--zw-line-height-mobile, var(--zw-preset-mobile-line-height));
833
1004
  }
834
1005
  }
835
1006
 
@@ -844,9 +1015,25 @@ $font-height--md: 1.72;
844
1015
  position: relative;
845
1016
  }
846
1017
 
1018
+ .zw-margin-bottom--xxs {
1019
+ margin-bottom: var(--zw-offset-xxs);
1020
+ }
1021
+
847
1022
  .zw-margin-bottom--xs {
848
1023
  margin-bottom: var(--zw-offset-xs);
849
1024
  }
850
1025
 
1026
+ .zw-margin-bottom--sm {
1027
+ margin-bottom: var(--zw-offset-sm);
1028
+ }
1029
+
1030
+ .zw-margin-bottom--md {
1031
+ margin-bottom: var(--zw-offset-md);
1032
+ }
1033
+
1034
+ .zw-margin-right--xs {
1035
+ margin-right: var(--zw-offset-xs);
1036
+ }
1037
+
851
1038
 
852
1039