@zipify/wysiwyg 1.0.0-dev.5 → 1.0.0-dev.50

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 (237) hide show
  1. package/.editorconfig +1 -1
  2. package/.eslintignore +1 -0
  3. package/.eslintrc.js +2 -2
  4. package/.github/dependabot.yaml +1 -0
  5. package/.lintstagedrc +2 -2
  6. package/.release-it.json +3 -1
  7. package/.stylelintignore +1 -0
  8. package/.stylelintrc +0 -4
  9. package/README.md +2 -2
  10. package/config/jest/setupTests.js +4 -3
  11. package/config/vite/example.config.js +25 -0
  12. package/config/vite/lib.config.js +30 -0
  13. package/config/{webpack → vite}/settings.js +0 -0
  14. package/dist/wysiwyg.css +1 -0
  15. package/dist/wysiwyg.mjs +18305 -0
  16. package/dist/wysiwyg.mjs.map +1 -0
  17. package/example/ExampleApp.vue +21 -2
  18. package/example/example.js +0 -3
  19. package/example/{example.html → index.html} +1 -0
  20. package/example/pageBlocks.js +31 -0
  21. package/example/presets.js +2 -2
  22. package/jest.config.js +3 -1
  23. package/lib/Wysiwyg.vue +50 -25
  24. package/lib/__tests__/utils/NodeFactory.js +13 -0
  25. package/lib/__tests__/utils/withComponentContext.js +1 -1
  26. package/lib/assets/icons/alignment-center.svg +3 -0
  27. package/lib/assets/icons/alignment-justify.svg +3 -0
  28. package/lib/assets/icons/alignment-left.svg +3 -0
  29. package/lib/assets/icons/alignment-right.svg +3 -0
  30. package/lib/assets/icons/arrow.svg +3 -0
  31. package/lib/assets/icons/background-color.svg +3 -0
  32. package/lib/assets/icons/case-style.svg +3 -0
  33. package/lib/assets/icons/font-color.svg +5 -0
  34. package/lib/assets/icons/italic.svg +3 -0
  35. package/lib/assets/icons/line-height.svg +3 -0
  36. package/lib/assets/icons/link.svg +3 -0
  37. package/lib/assets/icons/list-circle.svg +3 -0
  38. package/lib/assets/icons/list-decimal.svg +3 -0
  39. package/lib/assets/icons/list-disc.svg +3 -0
  40. package/lib/assets/icons/list-latin.svg +3 -0
  41. package/lib/assets/icons/list-roman.svg +3 -0
  42. package/lib/assets/icons/list-square.svg +3 -0
  43. package/lib/assets/icons/remove-format.svg +3 -0
  44. package/lib/assets/icons/reset-styles.svg +3 -0
  45. package/lib/assets/icons/strike-through.svg +3 -0
  46. package/lib/assets/icons/superscript.svg +3 -0
  47. package/lib/assets/icons/underline.svg +3 -0
  48. package/lib/assets/icons/unlink.svg +3 -0
  49. package/lib/components/base/Button.vue +22 -2
  50. package/lib/components/base/Checkbox.vue +89 -0
  51. package/lib/components/base/FieldLabel.vue +2 -1
  52. package/lib/components/base/Icon.vue +19 -11
  53. package/lib/components/base/Modal.vue +1 -2
  54. package/lib/components/base/NumberField.vue +2 -2
  55. package/lib/components/base/Range.vue +1 -1
  56. package/lib/components/base/ScrollView.vue +1 -3
  57. package/lib/components/base/TextField.vue +106 -0
  58. package/lib/components/base/__tests__/Icon.test.js +6 -13
  59. package/lib/components/base/__tests__/Modal.test.js +7 -2
  60. package/lib/components/base/__tests__/TextField.test.js +57 -0
  61. package/lib/components/base/__tests__/__snapshots__/TextField.test.js.snap +9 -0
  62. package/lib/components/base/colorPicker/ColorPicker.vue +2 -2
  63. package/lib/components/base/colorPicker/composables/__tests__/usePickerApi.test.js +1 -1
  64. package/lib/components/base/colorPicker/composables/usePickerApi.js +1 -1
  65. package/lib/components/base/colorPicker/composables/usePickerHotkeys.js +3 -2
  66. package/lib/components/base/composables/__tests__/useActivatedListener.test.js +1 -1
  67. package/lib/components/base/composables/__tests__/useDeselectionLock.test.js +1 -1
  68. package/lib/components/base/composables/__tests__/useElementRef.test.js +1 -1
  69. package/lib/components/base/composables/__tests__/useModalToggler.test.js +1 -1
  70. package/lib/components/base/composables/__tests__/useNumberValue.test.js +1 -1
  71. package/lib/components/base/composables/__tests__/useScrollView.test.js +1 -1
  72. package/lib/components/base/composables/__tests__/useTempValue.test.js +1 -1
  73. package/lib/components/base/composables/__tests__/useValidator.test.js +44 -0
  74. package/lib/components/base/composables/index.js +1 -0
  75. package/lib/components/base/composables/useActivatedListener.js +1 -1
  76. package/lib/components/base/composables/useDeselectionLock.js +1 -1
  77. package/lib/components/base/composables/useElementRef.js +1 -1
  78. package/lib/components/base/composables/useModalToggler.js +1 -1
  79. package/lib/components/base/composables/useScrollView.js +1 -1
  80. package/lib/components/base/composables/useTempValue.js +1 -1
  81. package/lib/components/base/composables/useValidator.js +23 -0
  82. package/lib/components/base/dropdown/Dropdown.vue +16 -4
  83. package/lib/components/base/dropdown/DropdownActivator.vue +19 -3
  84. package/lib/components/base/dropdown/DropdownGroup.vue +1 -1
  85. package/lib/components/base/dropdown/DropdownMenu.vue +1 -1
  86. package/lib/components/base/dropdown/DropdownOption.vue +1 -1
  87. package/lib/components/base/dropdown/__tests__/DropdownActivator.test.js +1 -1
  88. package/lib/components/base/dropdown/__tests__/DropdownMenu.test.js +1 -1
  89. package/lib/components/base/dropdown/__tests__/DropdownOption.test.js +1 -1
  90. package/lib/components/base/dropdown/composables/__tests__/useActiveOptionManager.test.js +1 -1
  91. package/lib/components/base/dropdown/composables/__tests__/useDropdownEntityTitle.test.js +1 -1
  92. package/lib/components/base/dropdown/composables/useActiveOptionManager.js +1 -1
  93. package/lib/components/base/dropdown/composables/useDropdownEntityTitle.js +1 -1
  94. package/lib/components/base/index.js +3 -1
  95. package/lib/components/toolbar/Toolbar.vue +49 -9
  96. package/lib/components/toolbar/ToolbarDivider.vue +1 -1
  97. package/lib/components/toolbar/ToolbarFull.vue +10 -2
  98. package/lib/components/toolbar/__tests__/Toolbar.test.js +6 -0
  99. package/lib/components/toolbar/controls/AlignmentControl.vue +1 -1
  100. package/lib/components/toolbar/controls/AlignmentDeviceControl.vue +1 -1
  101. package/lib/components/toolbar/controls/BackgroundColorControl.vue +1 -1
  102. package/lib/components/toolbar/controls/CaseStyleControl.vue +1 -1
  103. package/lib/components/toolbar/controls/FontColorControl.vue +1 -1
  104. package/lib/components/toolbar/controls/FontFamilyControl.vue +1 -1
  105. package/lib/components/toolbar/controls/FontSizeControl.vue +8 -1
  106. package/lib/components/toolbar/controls/FontWeightControl.vue +1 -1
  107. package/lib/components/toolbar/controls/ItalicControl.vue +1 -1
  108. package/lib/components/toolbar/controls/LineHeightControl.vue +1 -1
  109. package/lib/components/toolbar/controls/ListControl.vue +2 -6
  110. package/lib/components/toolbar/controls/RemoveFormatControl.vue +1 -1
  111. package/lib/components/toolbar/controls/StrikeThroughControl.vue +1 -1
  112. package/lib/components/toolbar/controls/StylePresetControl.vue +15 -2
  113. package/lib/components/toolbar/controls/SuperscriptControl.vue +1 -1
  114. package/lib/components/toolbar/controls/UnderlineControl.vue +2 -2
  115. package/lib/components/toolbar/controls/__tests__/AlignmentControl.test.js +1 -1
  116. package/lib/components/toolbar/controls/__tests__/AlignmentDeviceControl.test.js +1 -1
  117. package/lib/components/toolbar/controls/__tests__/BackgroundColorControl.test.js +1 -1
  118. package/lib/components/toolbar/controls/__tests__/CaseStyleControl.test.js +1 -1
  119. package/lib/components/toolbar/controls/__tests__/FontColorControl.test.js +1 -1
  120. package/lib/components/toolbar/controls/__tests__/FontFamilyControl.test.js +1 -1
  121. package/lib/components/toolbar/controls/__tests__/FontSizeControl.test.js +1 -1
  122. package/lib/components/toolbar/controls/__tests__/FontWeightControl.test.js +1 -1
  123. package/lib/components/toolbar/controls/__tests__/ItalicControl.test.js +1 -1
  124. package/lib/components/toolbar/controls/__tests__/LineHeightControl.test.js +1 -1
  125. package/lib/components/toolbar/controls/__tests__/ListControl.test.js +1 -1
  126. package/lib/components/toolbar/controls/__tests__/StrikeThroughControl.test.js +1 -1
  127. package/lib/components/toolbar/controls/__tests__/StylePresetControl.test.js +17 -1
  128. package/lib/components/toolbar/controls/__tests__/UnderlineControl.test.js +5 -1
  129. package/lib/components/toolbar/controls/composables/useRecentFonts.js +1 -1
  130. package/lib/components/toolbar/controls/index.js +1 -0
  131. package/lib/components/toolbar/controls/link/LinkControl.vue +155 -0
  132. package/lib/components/toolbar/controls/link/LinkControlApply.vue +35 -0
  133. package/lib/components/toolbar/controls/link/LinkControlHeader.vue +67 -0
  134. package/lib/components/toolbar/controls/link/__tests__/LinkControl.test.js +79 -0
  135. package/lib/components/toolbar/controls/link/__tests__/LinkControlHeader.test.js +42 -0
  136. package/lib/components/toolbar/controls/link/composables/__tests__/__snapshots__/useLink.test.js.snap +8 -0
  137. package/lib/components/toolbar/controls/link/composables/__tests__/useLink.test.js +114 -0
  138. package/lib/components/toolbar/controls/link/composables/index.js +1 -0
  139. package/lib/components/toolbar/controls/link/composables/useLink.js +61 -0
  140. package/lib/components/toolbar/controls/link/destination/LinkControlDestination.vue +103 -0
  141. package/lib/components/toolbar/controls/link/destination/LinkControlPageBlock.vue +54 -0
  142. package/lib/components/toolbar/controls/link/destination/LinkControlUrl.vue +52 -0
  143. package/lib/components/toolbar/controls/link/destination/__tests__/LinkControlPageBlock.test.js +36 -0
  144. package/lib/components/toolbar/controls/link/destination/__tests__/LinkControlUrl.test.js +46 -0
  145. package/lib/components/toolbar/controls/link/destination/__tests__/__snapshots__/LinkControlPageBlock.test.js.snap +9 -0
  146. package/lib/components/toolbar/controls/link/destination/__tests__/__snapshots__/LinkControlUrl.test.js.snap +17 -0
  147. package/lib/components/toolbar/controls/link/destination/index.js +1 -0
  148. package/lib/components/toolbar/controls/link/index.js +1 -0
  149. package/lib/composables/__tests__/useEditor.test.js +3 -3
  150. package/lib/composables/useEditor.js +6 -8
  151. package/lib/composables/useToolbar.js +23 -28
  152. package/lib/directives/__tests__/outClick.test.js +6 -0
  153. package/lib/directives/outClick.js +19 -6
  154. package/lib/enums/Alignments.js +10 -1
  155. package/lib/enums/LinkDestinations.js +4 -0
  156. package/lib/enums/LinkTargets.js +4 -0
  157. package/lib/enums/TextSettings.js +3 -1
  158. package/lib/enums/index.js +2 -0
  159. package/lib/extensions/Alignment.js +22 -8
  160. package/lib/extensions/BackgroundColor.js +15 -7
  161. package/lib/extensions/DeviceManager.js +2 -5
  162. package/lib/extensions/FontColor.js +15 -7
  163. package/lib/extensions/FontFamily.js +26 -9
  164. package/lib/extensions/FontSize.js +32 -13
  165. package/lib/extensions/FontStyle.js +24 -14
  166. package/lib/extensions/FontWeight.js +25 -15
  167. package/lib/extensions/LineHeight.js +32 -29
  168. package/lib/extensions/Link.js +89 -0
  169. package/lib/extensions/StylePreset.js +20 -19
  170. package/lib/extensions/TextDecoration.js +46 -13
  171. package/lib/extensions/__tests__/Alignment.test.js +13 -7
  172. package/lib/extensions/__tests__/BackgroundColor.test.js +12 -6
  173. package/lib/extensions/__tests__/CaseStyle.test.js +3 -5
  174. package/lib/extensions/__tests__/FontColor.test.js +12 -6
  175. package/lib/extensions/__tests__/FontFamily.test.js +33 -8
  176. package/lib/extensions/__tests__/FontSize.test.js +15 -8
  177. package/lib/extensions/__tests__/FontStyle.test.js +12 -6
  178. package/lib/extensions/__tests__/FontWeight.test.js +20 -6
  179. package/lib/extensions/__tests__/LineHeight.test.js +24 -12
  180. package/lib/extensions/__tests__/Link.test.js +102 -0
  181. package/lib/extensions/__tests__/StylePreset.test.js +71 -8
  182. package/lib/extensions/__tests__/TextDecoration.test.js +52 -6
  183. package/lib/extensions/__tests__/__snapshots__/Alignment.test.js.snap +26 -2
  184. package/lib/extensions/__tests__/__snapshots__/BackgroundColor.test.js.snap +30 -1
  185. package/lib/extensions/__tests__/__snapshots__/FontColor.test.js.snap +18 -1
  186. package/lib/extensions/__tests__/__snapshots__/FontFamily.test.js.snap +88 -1
  187. package/lib/extensions/__tests__/__snapshots__/FontSize.test.js.snap +33 -2
  188. package/lib/extensions/__tests__/__snapshots__/FontStyle.test.js.snap +25 -4
  189. package/lib/extensions/__tests__/__snapshots__/FontWeight.test.js.snap +47 -1
  190. package/lib/extensions/__tests__/__snapshots__/LineHeight.test.js.snap +26 -2
  191. package/lib/extensions/__tests__/__snapshots__/Link.test.js.snap +225 -0
  192. package/lib/extensions/__tests__/__snapshots__/StylePreset.test.js.snap +6 -2
  193. package/lib/extensions/__tests__/__snapshots__/TextDecoration.test.js.snap +183 -3
  194. package/lib/extensions/core/CopyPasteProcessor.js +10 -0
  195. package/lib/extensions/core/NodeProcessor.js +1 -1
  196. package/lib/extensions/core/TextProcessor.js +10 -0
  197. package/lib/extensions/core/__tests__/NodeProcessor.test.js +3 -5
  198. package/lib/extensions/core/__tests__/SelectionProcessor.test.js +3 -5
  199. package/lib/extensions/core/__tests__/TextProcessor.test.js +138 -12
  200. package/lib/extensions/core/__tests__/__snapshots__/TextProcessor.test.js.snap +26 -0
  201. package/lib/extensions/core/index.js +11 -2
  202. package/lib/extensions/core/plugins/PastePlugin.js +57 -0
  203. package/lib/extensions/core/plugins/ProseMirrorPlugin.js +20 -0
  204. package/lib/extensions/core/plugins/index.js +1 -0
  205. package/lib/extensions/index.js +46 -34
  206. package/lib/extensions/list/List.js +1 -1
  207. package/lib/extensions/list/__tests__/List.test.js +5 -8
  208. package/lib/extensions/list/__tests__/__snapshots__/List.test.js.snap +45 -15
  209. package/lib/injectionTokens.js +2 -1
  210. package/lib/services/ContentNormalizer.js +113 -29
  211. package/lib/services/ContextWidnow.js +23 -0
  212. package/lib/services/__tests__/ContentNormalizer.test.js +75 -7
  213. package/lib/services/__tests__/FavoriteColors.test.js +1 -1
  214. package/lib/services/index.js +1 -0
  215. package/lib/styles/content.css +102 -13
  216. package/lib/styles/helpers/offsets.css +16 -0
  217. package/lib/styles/variables.css +6 -0
  218. package/lib/utils/__tests__/__snapshots__/renderInlineSetting.test.js.snap +4 -4
  219. package/lib/utils/__tests__/convertAlignment.test.js +16 -0
  220. package/lib/utils/__tests__/convertFontSize.test.js +21 -0
  221. package/lib/utils/__tests__/convertLineHeight.test.js +21 -0
  222. package/lib/utils/convertAlignment.js +12 -0
  223. package/lib/utils/convertColor.js +1 -1
  224. package/lib/utils/convertFontSize.js +8 -0
  225. package/lib/utils/convertLineHeight.js +17 -0
  226. package/lib/utils/importIcon.js +13 -0
  227. package/lib/utils/index.js +4 -0
  228. package/lib/utils/renderInlineSetting.js +1 -1
  229. package/package.json +23 -28
  230. package/config/webpack/example.config.js +0 -86
  231. package/config/webpack/loaders/index.js +0 -6
  232. package/config/webpack/loaders/js-loader.js +0 -5
  233. package/config/webpack/loaders/style-loader.js +0 -7
  234. package/config/webpack/loaders/svg-loader.js +0 -4
  235. package/config/webpack/loaders/vue-loader.js +0 -4
  236. package/lib/assets/icons.svg +0 -69
  237. package/lib/composables/__tests__/useToolbar.test.js +0 -56
package/.editorconfig CHANGED
@@ -10,7 +10,7 @@ charset = utf-8
10
10
  trim_trailing_whitespace = true
11
11
  insert_final_newline = true
12
12
 
13
- [*.{js,html,vue,scss,css,svg}]
13
+ [*.{js,html,vue,css,svg}]
14
14
  indent_size = 4
15
15
  tab_width = 4
16
16
 
package/.eslintignore ADDED
@@ -0,0 +1 @@
1
+ dist/**
package/.eslintrc.js CHANGED
@@ -12,7 +12,7 @@ module.exports = {
12
12
  settings: {
13
13
  'import/resolver': {
14
14
  node: {
15
- extensions: ['.js', '.scss', '.css', '.vue', '.html']
15
+ extensions: ['.js', '.css', '.vue', '.html']
16
16
  }
17
17
  }
18
18
  },
@@ -113,7 +113,7 @@ module.exports = {
113
113
  'import/extensions': [
114
114
  'error',
115
115
  'never',
116
- { scss: 'always', html: 'always' }
116
+ { html: 'always' }
117
117
  ],
118
118
  'import/order': [
119
119
  'error',
@@ -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/.lintstagedrc CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "*.{vue,scss}": [
3
- "stylelint --config .stylelintrc"
2
+ "*.{vue,css}": [
3
+ "stylelint --allow-empty-input --config .stylelintrc"
4
4
  ],
5
5
  "*.{vue,js}": [
6
6
  "eslint --fix --fix-type layout --fix-type suggestion --config .eslintrc.js",
package/.release-it.json CHANGED
@@ -6,7 +6,9 @@
6
6
  "git": {
7
7
  "push": true,
8
8
  "commit": true,
9
- "tag": true
9
+ "tag": true,
10
+ "addUntrackedFiles": true,
11
+ "requireCleanWorkingDir": false
10
12
  },
11
13
  "github": {
12
14
  "release": true,
@@ -0,0 +1 @@
1
+ dist/**
package/.stylelintrc CHANGED
@@ -98,10 +98,6 @@
98
98
  "keyframe-block-no-duplicate-selectors": true
99
99
  },
100
100
  "overrides": [
101
- {
102
- "files": ["**/*.scss"],
103
- "customSyntax": "postcss-scss"
104
- },
105
101
  {
106
102
  "files": ["**/*.vue"],
107
103
  "customSyntax": "postcss-html"
package/README.md CHANGED
@@ -6,9 +6,9 @@ Zipify modification of TipTap text editor
6
6
  1. Install library & dependencies
7
7
  ```shell
8
8
  # if npm
9
- npm install @zipify/wysiwyg @vue/composition-api
9
+ npm install @zipify/wysiwyg
10
10
  # if yarn
11
- yarn add @zipify/wysiwyg @vue/composition-api
11
+ yarn add @zipify/wysiwyg
12
12
  ```
13
13
  2. Use editor
14
14
 
@@ -1,13 +1,10 @@
1
1
  /* eslint-disable no-console */
2
2
 
3
3
  import Vue from 'vue';
4
- import CompositionAPI from '@vue/composition-api';
5
4
 
6
5
  console.warn = jest.fn();
7
6
  console.error = jest.fn();
8
7
 
9
- Vue.use(CompositionAPI);
10
-
11
8
  // Fail tests on vue warnings
12
9
  Vue.config.warnHandler = (error) => { throw error; };
13
10
  Vue.config.devtools = false;
@@ -32,3 +29,7 @@ Range.prototype.getClientRects = () => ({
32
29
  length: 0,
33
30
  [Symbol.iterator]: jest.fn()
34
31
  });
32
+
33
+ jest.mock('../../lib/utils/importIcon', () => ({
34
+ importIcon: () => ''
35
+ }));
@@ -0,0 +1,25 @@
1
+ import { defineConfig } from 'vite';
2
+ import { createVuePlugin } from 'vite-plugin-vue2';
3
+ import { resolvePath } from './settings';
4
+
5
+ export default defineConfig({
6
+ root: resolvePath('./example'),
7
+ base: './',
8
+
9
+ server: {
10
+ port: 7777,
11
+ host: 'localhost'
12
+ },
13
+
14
+ clearScreen: false,
15
+
16
+ resolve: {
17
+ extensions: ['*', '.js', '.vue', '.json']
18
+ },
19
+
20
+ plugins: [createVuePlugin()],
21
+
22
+ define: {
23
+ ZW_UPDATED_AT: Date.now()
24
+ }
25
+ });
@@ -0,0 +1,30 @@
1
+ import { defineConfig } from 'vite';
2
+ import { createVuePlugin } from 'vite-plugin-vue2';
3
+ import { resolvePath } from './settings';
4
+
5
+ export default defineConfig({
6
+ build: {
7
+ sourcemap: true,
8
+
9
+ lib: {
10
+ entry: resolvePath('./lib/index.js'),
11
+ fileName: 'wysiwyg',
12
+ formats: ['es']
13
+ },
14
+
15
+ rollupOptions: {
16
+ external: ['vue', '@zipify/colorpicker'],
17
+ output: {
18
+ assetFileNames: (asset) => {
19
+ return asset.name === 'style.css' ? 'wysiwyg.css' : asset.name;
20
+ }
21
+ }
22
+ }
23
+ },
24
+
25
+ resolve: {
26
+ extensions: ['*', '.js', '.vue', '.json']
27
+ },
28
+
29
+ plugins: [createVuePlugin()]
30
+ });
File without changes
@@ -0,0 +1 @@
1
+ .zw-toolbar__divider[data-v-d9845d32]{border-color:rgba(var(--zw-color-n90),.1);border-style:solid;border-width:0}.zw-toolbar__divider--vertical[data-v-d9845d32]{border-left-width:1px}.zw-toolbar__divider--horizontal[data-v-d9845d32]{border-bottom-width:1px}.zw-toolbar__row[data-v-6b424a6f]{display:flex;column-gap:var(--zw-offset-xs);padding:var(--zw-offset-xxs) var(--zw-offset-xs)}.zw-toolbar__group[data-v-25eee0ed]{display:flex;column-gap:var(--zw-offset-xxs)}.zw-button[data-v-86a41806]{display:inline-flex;align-items:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;background-color:transparent;border:0;padding:0;white-space:nowrap;appearance:none;user-select:none;text-transform:none;letter-spacing:normal;color:inherit;transition:.1s opacity ease-out;will-change:opacity}.zw-button[data-v-86a41806]::-moz-focus-inner{border:0!important}.zw-button[data-v-86a41806]:hover,.zw-button[data-v-86a41806]:focus{text-decoration:none;outline:none}.zw-button[data-v-86a41806]:disabled{user-select:none;box-shadow:none;cursor:not-allowed;opacity:.35}.zw-button--toolbar[data-v-86a41806]{border-radius:1px;min-height:28px;font-weight:var(--zw-font-weight-semibold);font-size:var(--zw-font-size-xs);line-height:var(--zw-line-height-xxs);color:rgb(var(--zw-color-n70));transition-property:background-color,color,opacity;will-change:background-color,color,opacity}.zw-button--primary[data-v-86a41806]{background-color:rgb(var(--zw-color-green));color:rgb(var(--zw-color-white));padding:var(--zw-offset-xxs) var(--zw-offset-sm);line-height:var(--zw-line-height-md)}.zw-button--primary[data-v-86a41806],.zw-button--secondary[data-v-86a41806]{color:rgb(var(--zw-color-white));padding:var(--zw-offset-xxs) var(--zw-offset-sm);font-weight:600;font-size:var(--zw-font-size-xs)}.zw-button--primary[data-v-86a41806]:not(:disabled):hover,.zw-button--secondary[data-v-86a41806]:not(:disabled):hover{opacity:.9}.zw-button--toolbar[data-v-86a41806]:not(.zw-button--icon){padding:var(--zw-offset-xxs) var(--zw-offset-xs)}.zw-button--toolbar[data-v-86a41806]:not(:disabled):hover,.zw-button--toolbar[data-v-86a41806]:not(:disabled):focus,.zw-button--toolbar.zw-button--active[data-v-86a41806]:not(:disabled){color:rgb(var(--zw-color-white));background-color:rgb(var(--zw-color-n5))}.zw-button-toggle[data-v-a02f12aa]{display:flex;column-gap:var(--zw-offset-xxs)}.zw-icon[data-v-366d6daa]{display:flex}.zw-icon--auto-color[data-v-366d6daa]{--zw-icon-foreground: currentColor}.zw-scroll-view[data-v-95e8ad00] .simplebar-placeholder{display:none}.zw-scroll-view[data-v-95e8ad00] .simplebar-track{width:4px;background-color:rgb(var(--zw-color-n20));pointer-events:initial}.zw-scroll-view[data-v-95e8ad00] .simplebar-scrollbar{width:4px}.zw-scroll-view[data-v-95e8ad00] .simplebar-scrollbar:before{top:0;left:0;background-color:rgb(var(--zw-color-n5));cursor:pointer;height:100%;width:100%;opacity:1;border-radius:0}.zw-field-label[data-v-116650c2]{font-weight:var(--zw-font-weight-thin);font-size:var(--zw-font-size-xxs);line-height:var(--zw-line-height-xxs);color:rgb(var(--zw-color-n70));display:block}.zw-range[data-v-15a6af30]{width:100%;height:32px;background:none;cursor:pointer;flex-grow:1;-webkit-appearance:none;--zw-range-track-background-color: transparent;--zw-range-track-background-image: linear-gradient(to right, #B3B3B3 var(--zw-range-progress), #3B3B3B var(--zw-range-progress));--zw-range-thumb-background: rgb(var(--zw-color-white));--zw-range-thumb-box-shadow: -1px -1px 3px rgba(59, 59, 59, .35), 1px 1px 3px rgba(59, 59, 59, .35)}.zw-range[data-v-15a6af30]::-webkit-slider-runnable-track{width:100%;height:4px;border:0;border-radius:0;background-size:100%;background-color:var(--zw-range-track-background-color);background-image:var(--zw-range-track-background-image)}.zw-range[data-v-15a6af30]::-moz-range-track{width:100%;height:4px;border:0;border-radius:0;background-size:100%;background-color:var(--zw-range-track-background-color);background-image:var(--zw-range-track-background-image)}.zw-range[data-v-15a6af30]::-ms-track{width:100%;height:4px;border:0;border-radius:0;background-size:100%;background-color:var(--zw-range-track-background-color);background-image:var(--zw-range-track-background-image)}.zw-range[data-v-15a6af30]::-webkit-slider-thumb{height:13px;width:13px;border-radius:100%;margin-top:-5px;background:var(--zw-range-thumb-background);box-shadow:var(--zw-range-thumb-box-shadow);-webkit-appearance:none;transition:box-shadow .15s cubic-bezier(0,0,.2,1)}.zw-range[data-v-15a6af30]::-moz-range-thumb{height:13px;width:13px;border-radius:100%;margin-top:-5px;background:var(--zw-range-thumb-background);box-shadow:var(--zw-range-thumb-box-shadow);-webkit-appearance:none;transition:box-shadow .15s cubic-bezier(0,0,.2,1)}.zw-range[data-v-15a6af30]::-ms-thumb{height:13px;width:13px;border-radius:100%;margin-top:-5px;background:var(--zw-range-thumb-background);box-shadow:var(--zw-range-thumb-box-shadow);-webkit-appearance:none;transition:box-shadow .15s cubic-bezier(0,0,.2,1)}.zw-range[data-v-15a6af30]::-moz-focus-outer,.zw-range[data-v-15a6af30]::-moz-range-thumb{border:0}.zw-range[data-v-15a6af30]::-ms-thumb{margin-top:-2px}.zw-range[data-v-15a6af30]:focus{outline:none}.zw-range[data-v-15a6af30]:disabled{cursor:not-allowed;opacity:.6;--zw-range-track-background-color: #3B3B3B;--zw-range-track-background-image: linear-gradient(to right, #B3B3B3 var(--zw-range-progress), #3B3B3B var(--zw-range-progress))}.zw-range[data-v-15a6af30]:disabled{--zw-range-thumb-background: #B3B3B3;--zw-range-thumb-box-shadow: 0 0 6px rgba(0, 0, 0, .35)}.zw-range[data-v-15a6af30]:not(:disabled):hover{--zw-range-thumb-box-shadow: 0 0 0 8px rgba(240, 240, 240, .15)}.zw-range[data-v-15a6af30]:not(:disabled):active{--zw-range-thumb-box-shadow: 0 0 0 12px rgba(240, 240, 240, .15)}.zw-number-field[data-v-746d73f1]{--border-color: rgb(var(--zw-color-n60));--text-color: rgb(var(--zw-color-n85));--buttons-color: rgb(var(--zw-color-n70));padding:2px 4px;border:solid 1px var(--border-color);align-items:stretch;display:flex}.zw-number-field[data-v-746d73f1]:hover{--border-color: rgb(var(--zw-color-n80));--text-color: rgb(var(--zw-color-n85))}.zw-number-field[data-v-746d73f1]:focus,.zw-number-field[data-v-746d73f1]:focus-within{--border-color: rgb(var(--zw-color-white));--text-color: rgb(var(--zw-color-white))}.zw-number-field__input[data-v-746d73f1]{color:var(--text-color);background-color:rgb(var(--zw-color-n15));border:0;display:block;width:100%;outline:none!important;line-height:var(--zw-line-height-md);font-size:var(--zw-font-size-xs);-moz-appearance:textfield}.zw-number-field__buttons[data-v-746d73f1]{display:none;flex-direction:column;height:100%}.zw-number-field:hover .zw-number-field__buttons[data-v-746d73f1],.zw-number-field:focus .zw-number-field__buttons[data-v-746d73f1],.zw-number-field:focus-within .zw-number-field__buttons[data-v-746d73f1]{display:flex}.zw-number-field__input[data-v-746d73f1]::placeholder{color:var(--text-color)}.zw-number-field__input[data-v-746d73f1]::-webkit-outer-spin-button,.zw-number-field__input[data-v-746d73f1]::-webkit-inner-spin-button{color:var(--text-color);-webkit-appearance:none}.zw-number-field__controls[data-v-746d73f1]{min-width:var(--zw-offset-sm)}.zw-number-field--disabled[data-v-746d73f1]{opacity:.5}.zw-number-field--disabled[data-v-746d73f1],.zw-number-field--disabled .zw-number-field__input[data-v-746d73f1]{cursor:not-allowed}.zw-number-field__increment-button[data-v-746d73f1],.zw-number-field__decrement-button[data-v-746d73f1]{width:100%;height:50%;display:flex;align-items:center;justify-content:center}.zw-number-field__increment-button[data-v-746d73f1]:after,.zw-number-field__decrement-button[data-v-746d73f1]:after{content:"";border-left:3px solid transparent;border-right:3px solid transparent}.zw-number-field__increment-button[data-v-746d73f1]:after{border-bottom:3px solid var(--buttons-color)}.zw-number-field__decrement-button[data-v-746d73f1]:after{border-top:3px solid var(--buttons-color)}.zw-number-field__increment-button[data-v-746d73f1]:hover,.zw-number-field__decrement-button[data-v-746d73f1]:hover{background-color:rgb(var(--zw-color-n20));--buttons-color: rgb(var(--zw-color-white))}.zw-number-field__units[data-v-746d73f1]{color:rgb(var(--zw-color-n70));font-size:var(--zw-font-size-xs);line-height:var(--zw-line-height-md);text-align:center;display:inline-block;width:100%}.zw-number-field:hover .zw-number-field__units[data-v-746d73f1],.zw-number-field:focus .zw-number-field__units[data-v-746d73f1]{display:none}.zw-modal[data-v-2c99ae29]{border-radius:2px;box-shadow:0 0 4px rgba(var(--zw-color-black),.3);background-color:rgb(var(--zw-color-n15));max-height:var(--zw-modal-max-height);max-width:var(--zw-modal-max-width);z-index:1000;will-change:transform}.zw-modal--enter-active[data-v-2c99ae29]{transition:opacity .15s ease-out}.zw-modal--enter[data-v-2c99ae29],.zw-modal--leave-to[data-v-2c99ae29]{opacity:0}.zw-modal--leave-active[data-v-2c99ae29]{transition:opacity .1s ease-in}.zw-modal[data-v-2c99ae29] .simplebar-offset,.zw-modal[data-v-2c99ae29] .simplebar-mask{position:initial}.zw-modal[data-v-2c99ae29] .simplebar-content{max-height:var(--zw-modal-max-height);padding:0!important}.zw-modal[data-v-2c99ae29] .simplebar-content-wrapper{overscroll-behavior:contain}.zw-field[data-v-7bbd0125]{display:flex;flex-direction:column}.zw-field__input[data-v-7bbd0125]{--border-color: rgb(var(--zw-color-n60));--text-color: rgb(var(--zw-color-n85));border:1px solid var(--border-color);background-color:transparent;color:var(--text-color);font-size:var(--zw-font-size-xxs);outline:none;padding:6px;line-height:var(--zw-line-height-xxs)}.zw-field__input[data-v-7bbd0125]:hover{--border-color: rgb(var(--zw-color-n80));--text-color: rgb(var(--zw-color-n85))}.zw-field__input[data-v-7bbd0125]:focus,.zw-field__input[data-v-7bbd0125]:focus-within{--border-color: rgb(var(--zw-color-white));--text-color: rgb(var(--zw-color-white))}.zw-field__label[data-v-7bbd0125]{display:inline-block;font-size:var(--zw-font-size-xxs);padding-bottom:var(--zw-offset-xxs);line-height:var(--zw-line-height-xxs)}.zw-field__label--error[data-v-7bbd0125]{font-size:var(--zw-font-size-xxs);margin:var(--zw-offset-xxs) 0 0;color:rgb(var(--zw-color-red))}.zw-checkbox[data-v-2de7f5c1]{display:inline-flex;align-items:center;position:relative;cursor:pointer;padding:var(--zw-offset-xxs) var(--zw-offset-xxs) var(--zw-offset-xxs) 0}.zw-checkbox__field+.zw-checkbox__indicator[data-v-2de7f5c1]{color:var(--zw-color-n200);box-shadow:inset 0 0 0 2px currentColor}.zw-checkbox:hover .zw-checkbox__indicator[data-v-2de7f5c1]{box-shadow:inset 0 0 0 2px rgb(var(--zw-color-green))}.zw-checkbox__field:checked+.zw-checkbox__indicator[data-v-2de7f5c1]{color:rgb(var(--zw-color-green))}.zw-checkbox .zw-checkbox__field:checked+.zw-checkbox__indicator[data-v-2de7f5c1]{background-color:rgb(var(--zw-color-green))}.zw-checkbox .zw-checkbox__indicator[data-v-2de7f5c1]:after{content:"";display:block;height:16px;transform:scale(.6);transition:transform .2s ease-out;width:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNiAyNiIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0uMyAxNGMtLjItLjItLjMtLjUtLjMtLjdzLjEtLjUuMy0uN2wxLjQtMS40Yy40LS40IDEtLjQgMS40IDBsLjEuMSA1LjUgNS45Yy4yLjIuNS4yLjcgMEwyMi44IDMuM2guMWMuNC0uNCAxLS40IDEuNCAwbDEuNCAxLjRjLjQuNC40IDEgMCAxLjRsLTE2IDE2LjZjLS4yLjItLjQuMy0uNy4zLS4zIDAtLjUtLjEtLjctLjNMLjUgMTQuMy4zIDE0eiIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-size:16px;background-position:center center}.zw-checkbox__field:not(:checked)+.zw-checkbox__indicator[data-v-2de7f5c1]:after{transform:scale(0)}.zw-checkbox__field[data-v-2de7f5c1]{position:absolute;opacity:0;height:0;width:0}.zw-checkbox__label[data-v-2de7f5c1]{font-size:var(--zw-font-size-xs)}.zw-dropdown__activator[data-v-021ac370]{width:100%}.zw-dropdown__activator-title[data-v-021ac370]{margin-right:var(--zw-offset-xs)}.zw-dropdown__activator-arrow[data-v-021ac370]{margin-left:auto}.zw-dropdown__activator--active .zw-dropdown__activator-arrow[data-v-021ac370]{transform:rotateX(180deg)}.zw-dropdown__activator--gray[data-v-021ac370]{background-color:rgb(var(--zw-color-n20));font-size:var(--zw-font-size-xxs);color:rgb(var(--zw-color-white))}.zw-dropdown__option[data-v-1355d08c]{width:100%;display:block;color:rgb(var(--zw-color-white));padding-top:var(--zw-offset-xxs);padding-right:var(--zw-offset-sm);padding-left:calc(var(--zw-offset-sm) + var(--zw-option-offset, 0px));padding-bottom:var(--zw-offset-xxs);text-align:left;transition:.1s background-color ease-out;will-change:background-color}.zw-dropdown__option[data-v-1355d08c]:hover,.zw-dropdown__option[data-v-1355d08c]:focus,.zw-dropdown__option--active[data-v-1355d08c]{background-color:rgb(var(--zw-color-n30))}.zw-dropdown__group[data-v-21efeb20]{padding-top:var(--zw-offset-xs);padding-bottom:var(--zw-offset-xs);--zw-option-offset: var(--zw-offset-xs)}.zw-dropdown__group-title[data-v-21efeb20]{color:var(--zw-color-n70);font-weight:var(--zw-font-weight-semibold);padding-left:var(--zw-offset-sm);padding-right:var(--zw-offset-sm);margin-top:0;margin-bottom:var(--zw-offset-xs)}.zw-dropdown__divider[data-v-1f5efb01]{padding:0 var(--zw-offset-sm)}.zw-dropdown__divider[data-v-1f5efb01]:before{content:"";display:block;border-bottom:1px solid rgb(var(--zw-color-n30))}.zw-dropdown__menu{padding-top:var(--zw-offset-xs);padding-bottom:var(--zw-offset-xs)}.zw-dropdown[data-v-885109ea]{position:relative;font-size:var(--zw-font-size-xs);line-height:var(--zw-line-height-xxs)}.zw-style-preset-control[data-v-39d20a0e]{display:flex;align-items:center}.zw-style-preset-control__dropdown[data-v-39d20a0e]{width:96px}.zw-style-preset-control__reset[data-v-39d20a0e]{color:rgb(var(--zw-color-n70))}.zw-style-preset-control__reset[data-v-39d20a0e]:not(:disabled):hover,.zw-style-preset-control__reset[data-v-39d20a0e]:not(:disabled):focus,.zw-style-preset-control__reset[data-v-39d20a0e]:not(:disabled):focus-within{color:rgb(var(--zw-color-white))}.zw-font-family-control[data-v-07a47462]{width:96px}.zw-font-family-control__option[data-v-07a47462]{font-weight:400;font-family:var(--zw-font-family-option);width:150px}.zw-font-size-control[data-v-71dd7ffc]{width:64px}.zw-alignment-control__modal[data-v-cef30e1a]{padding:var(--zw-offset-xxs)}.zw-alignment-control__toggle[data-v-cef30e1a]{flex-direction:column}.zw-line-height-control__modal[data-v-532367c1]{padding:var(--zw-offset-sm)}.zw-line-height-control__row[data-v-532367c1]{display:flex;align-items:center}.zw-line-height-control__range[data-v-532367c1]{width:156px}.zw-line-height-control__field[data-v-532367c1]{width:52px;margin-left:var(--zw-offset-sm)}.zw-list-control__option[data-v-1ffdf080]{padding:0 var(--zw-offset-xs);display:flex}.zw-link-modal-header[data-v-7dbfe03f]{display:flex;align-items:center;justify-content:space-between;padding:var(--zw-offset-sm);border-bottom:2px solid rgb(var(--zw-color-n5))}.zw-link-modal-header__title[data-v-7dbfe03f]{text-transform:uppercase;font-weight:var(--zw-font-weight-semibold);font-size:var(--zw-font-size-xxs);color:rgb(var(--zw-color-white))}.zw-link-modal-header__unlink-icon[data-v-7dbfe03f]{margin-right:var(--zw-offset-xxs)}.zw-link-modal-header__unlink-button[data-v-7dbfe03f]{color:rgb(var(--zw-color-n80));font-size:var(--zw-font-size-xxs);transition:.1s opacity ease-out;will-change:opacity}.zw-link-modal-header__unlink-button[data-v-7dbfe03f]:disabled{opacity:.35}.zw-link-modal-header__unlink-button[data-v-7dbfe03f]:hover{color:rgb(var(--zw-color-white))}.zw-link-modal__apply[data-v-2ad47228]{display:flex;justify-content:flex-end}.zw-link-modal[data-v-0ca87de5]{width:266px}.zw-link-modal__body[data-v-0ca87de5]{padding:var(--zw-offset-sm)}[data-v-0ca87de5] .zw-link-modal-dropdown__option{width:234px}.zw-toolbar[data-v-ad3592b8]{border-radius:2px;background-color:rgb(var(--zw-color-n15));color:rgb(var(--zw-color-n70));z-index:999999}.zw-toolbar[data-v-ad3592b8]:before,.zw-toolbar[data-v-ad3592b8]:after{content:"";display:block;width:100%;height:calc(var(--zw-toolbar-offset-y) + 4px);position:absolute;--zw-toolbar-safe-zone: calc(-1 * var(--zw-toolbar-offset-y))}.zw-toolbar[data-v-ad3592b8]:before{top:var(--zw-toolbar-safe-zone)}.zw-toolbar[data-v-ad3592b8]:after{bottom:var(--zw-toolbar-safe-zone)}.zw-toolbar--enter-active[data-v-ad3592b8],.zw-toolbar--leave-active[data-v-ad3592b8]{transition:opacity .15s ease-out}.zw-toolbar--leave-active[data-v-ad3592b8]{transition:opacity 0s ease-in}.zw-toolbar--enter[data-v-ad3592b8],.zw-toolbar--leave-to[data-v-ad3592b8]{opacity:0}.zw-wysiwyg{--zw-color-n5: 13, 13, 13;--zw-color-n15: 38, 38, 38;--zw-color-n20: 59, 59, 59;--zw-color-n30: 77, 77, 77;--zw-color-n60: 153, 153, 153;--zw-color-n70: 179, 179, 179;--zw-color-n80: 196, 196, 196;--zw-color-n85: 217, 217, 217;--zw-color-n90: 230, 230, 230;--zw-color-n200: 194, 200, 209;--zw-color-black: 0, 0, 0;--zw-color-white: 255, 255, 255;--zw-color-green: 59, 180, 74;--zw-color-red: 234, 58, 58;--zw-offset-xxs: 4px;--zw-offset-xs: 8px;--zw-offset-xsm: 12px;--zw-offset-sm: 16px;--zw-offset-md: 24px;--zw-font-weight-thin: 400;--zw-font-weight-semibold: 500;--zw-font-size-xxs: 12px;--zw-font-size-xs: 14px;--zw-line-height-xxs: 1.21;--zw-line-height-md: 1.72}.zw-wysiwyg [contenteditable]{outline:none}.zw-wysiwyg__placeholder:first-child:last-child:before{content:attr(data-placeholder);color:rgb(var(--zw-color-n70));float:left;height:0;pointer-events:none}.zw-style.zw-style.zw-style{font-weight:var(--zw-font-weight, var(--zw-preset-font-weight));font-family:var(--zw-font-family, var(--zw-preset-font-family));color:var(--zw-font-color, var(--zw-preset-color));font-style:var(--zw-font-style, var(--zw-preset-font-style));text-decoration:var(--zw-text-decoration, var(--zw-preset-text-decoration));background-color:var(--zw-background-color, var(--zw-preset-background-color))}@media (min-width: 1200px){.zw-style.zw-style.zw-style{font-size:var(--zw-font-size-desktop, var(--zw-preset-desktop-font-size));text-align:var(--zw-text-align-desktop, var(--zw-preset-desktop-text-align));line-height:var(--zw-line-height-desktop, var(--zw-preset-desktop-line-height))}}@media (min-width: 769px) and (max-width: 1199.98px){.zw-style.zw-style.zw-style{font-size:var(--zw-font-size-tablet, var(--zw-preset-tablet-font-size));text-align:var(--zw-text-align-tablet, var(--zw-preset-tablet-text-align));line-height:var(--zw-line-height-tablet, var(--zw-preset-tablet-line-height))}}@media (max-width: 768.98px){.zw-style.zw-style.zw-style{font-size:var(--zw-font-size-mobile, var(--zw-preset-mobile-font-size));text-align:var(--zw-text-align-mobile, var(--zw-preset-mobile-text-align));line-height:var(--zw-line-height-mobile, var(--zw-preset-mobile-line-height))}}.ProseMirror{position:relative}.ProseMirror{word-wrap:break-word;white-space:pre-wrap;white-space:break-spaces;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;font-feature-settings:"liga" 0}.ProseMirror [contenteditable=false]{white-space:normal}.ProseMirror [contenteditable=false] [contenteditable=true],.ProseMirror pre{white-space:pre-wrap}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important;width:1px!important;height:1px!important}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute;margin:0}.ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid #000;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection *{caret-color:transparent}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}.zw-text--truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.zw-position--relative{position:relative}.zw-margin-bottom--xxs{margin-bottom:var(--zw-offset-xxs)}.zw-margin-bottom--xs{margin-bottom:var(--zw-offset-xs)}.zw-margin-bottom--sm{margin-bottom:var(--zw-offset-sm)}.zw-margin-bottom--md{margin-bottom:var(--zw-offset-md)}.zw-margin-right--xs{margin-right:var(--zw-offset-xs)}