goodteditor-ui 1.0.25 → 1.0.27

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 (117) hide show
  1. package/.eslintrc.js +7 -7
  2. package/.prettierrc +14 -14
  3. package/README.md +35 -35
  4. package/babel.config.js +5 -5
  5. package/index.js +53 -53
  6. package/jsconfig.json +13 -13
  7. package/package.json +67 -67
  8. package/src/App.vue +36 -36
  9. package/src/components/ui/Avatar.md +68 -68
  10. package/src/components/ui/Avatar.vue +180 -180
  11. package/src/components/ui/Badge.md +20 -20
  12. package/src/components/ui/Badge.vue +75 -75
  13. package/src/components/ui/Collapse.md +90 -90
  14. package/src/components/ui/Collapse.vue +86 -86
  15. package/src/components/ui/ColorPicker/Alpha.vue +114 -114
  16. package/src/components/ui/ColorPicker/Colors.vue +117 -117
  17. package/src/components/ui/ColorPicker/Hue.vue +113 -113
  18. package/src/components/ui/ColorPicker/Preview.vue +55 -55
  19. package/src/components/ui/ColorPicker/Saturation.vue +123 -123
  20. package/src/components/ui/ColorPicker/mixin.js +105 -105
  21. package/src/components/ui/ColorPicker.md +17 -17
  22. package/src/components/ui/ColorPicker.vue +314 -314
  23. package/src/components/ui/Datalist.md +41 -41
  24. package/src/components/ui/Datalist.vue +164 -164
  25. package/src/components/ui/DatePicker.md +168 -168
  26. package/src/components/ui/DatePicker.vue +527 -527
  27. package/src/components/ui/FileSelector.md +105 -105
  28. package/src/components/ui/FileSelector.vue +82 -82
  29. package/src/components/ui/Grid.md +130 -130
  30. package/src/components/ui/Grid.vue +92 -92
  31. package/src/components/ui/Image.md +59 -59
  32. package/src/components/ui/Image.vue +57 -57
  33. package/src/components/ui/InputAutocomplete.md +115 -115
  34. package/src/components/ui/InputAutocomplete.vue +349 -349
  35. package/src/components/ui/InputColorPicker.md +51 -51
  36. package/src/components/ui/InputColorPicker.vue +151 -151
  37. package/src/components/ui/InputDatePicker.md +121 -121
  38. package/src/components/ui/InputDatePicker.vue +326 -326
  39. package/src/components/ui/InputTags.md +51 -51
  40. package/src/components/ui/InputTags.vue +184 -184
  41. package/src/components/ui/InputTimePicker.md +25 -25
  42. package/src/components/ui/InputTimePicker.vue +253 -253
  43. package/src/components/ui/InputUnits.md +20 -20
  44. package/src/components/ui/InputUnits.vue +257 -257
  45. package/src/components/ui/Lazy.md +37 -37
  46. package/src/components/ui/Lazy.vue +92 -92
  47. package/src/components/ui/Pagination.md +74 -74
  48. package/src/components/ui/Pagination.vue +138 -138
  49. package/src/components/ui/Paginator.md +34 -34
  50. package/src/components/ui/Paginator.vue +83 -83
  51. package/src/components/ui/Popover.md +34 -34
  52. package/src/components/ui/Popover.vue +274 -274
  53. package/src/components/ui/Popup.md +59 -59
  54. package/src/components/ui/Popup.vue +150 -150
  55. package/src/components/ui/ResponsiveContainer.md +58 -58
  56. package/src/components/ui/ResponsiveContainer.vue +99 -99
  57. package/src/components/ui/Select.md +187 -187
  58. package/src/components/ui/Select.vue +421 -421
  59. package/src/components/ui/TimePicker.md +50 -50
  60. package/src/components/ui/TimePicker.vue +252 -252
  61. package/src/components/ui/Tooltip.md +54 -54
  62. package/src/components/ui/Tooltip.vue +113 -113
  63. package/src/components/ui/WysiwygEditor/WysiwygEditor.d.ts +128 -119
  64. package/src/components/ui/WysiwygEditor/constants.js +273 -264
  65. package/src/components/ui/WysiwygEditor/extensions/blockquote.js +15 -15
  66. package/src/components/ui/WysiwygEditor/extensions/bold.js +15 -15
  67. package/src/components/ui/WysiwygEditor/extensions/bullet-list.js +15 -15
  68. package/src/components/ui/WysiwygEditor/extensions/code-block.js +13 -13
  69. package/src/components/ui/WysiwygEditor/extensions/code.js +13 -13
  70. package/src/components/ui/WysiwygEditor/extensions/font-size.js +34 -34
  71. package/src/components/ui/WysiwygEditor/extensions/formatting.js +14 -14
  72. package/src/components/ui/WysiwygEditor/extensions/heading.js +13 -13
  73. package/src/components/ui/WysiwygEditor/extensions/horizontal-rule.js +15 -15
  74. package/src/components/ui/WysiwygEditor/extensions/image.js +37 -19
  75. package/src/components/ui/WysiwygEditor/extensions/index.d.ts +32 -32
  76. package/src/components/ui/WysiwygEditor/extensions/index.js +32 -32
  77. package/src/components/ui/WysiwygEditor/extensions/italic.js +15 -15
  78. package/src/components/ui/WysiwygEditor/extensions/link.js +16 -16
  79. package/src/components/ui/WysiwygEditor/extensions/list-item.js +15 -15
  80. package/src/components/ui/WysiwygEditor/extensions/ordered-list.js +15 -15
  81. package/src/components/ui/WysiwygEditor/extensions/paragraph.js +23 -23
  82. package/src/components/ui/WysiwygEditor/extensions/strike.js +15 -15
  83. package/src/components/ui/WysiwygEditor/extensions/table-cell.js +13 -13
  84. package/src/components/ui/WysiwygEditor/extensions/table-header.js +15 -15
  85. package/src/components/ui/WysiwygEditor/extensions/table-row.js +15 -15
  86. package/src/components/ui/WysiwygEditor/extensions/table.js +29 -29
  87. package/src/components/ui/WysiwygEditor/extensions/text-align.js +6 -6
  88. package/src/components/ui/WysiwygEditor/extensions/text-style.js +12 -15
  89. package/src/components/ui/WysiwygEditor/extensions/underline.js +15 -15
  90. package/src/components/ui/WysiwygEditor/index.d.ts +4 -4
  91. package/src/components/ui/WysiwygEditor/index.js +4 -4
  92. package/src/components/ui/WysiwygEditor/renders/Button.vue +28 -28
  93. package/src/components/ui/WysiwygEditor/renders/ColorPicker.vue +41 -41
  94. package/src/components/ui/WysiwygEditor/renders/Image.vue +200 -0
  95. package/src/components/ui/WysiwygEditor/renders/InputAuto.vue +34 -34
  96. package/src/components/ui/WysiwygEditor/renders/InputUnits.vue +37 -38
  97. package/src/components/ui/WysiwygEditor/renders/Link.vue +82 -87
  98. package/src/components/ui/WysiwygEditor/renders/Select.vue +47 -47
  99. package/src/components/ui/WysiwygEditor/renders/ToolbarPopover.vue +49 -49
  100. package/src/components/ui/WysiwygEditor/renders/components/Popover.vue +15 -0
  101. package/src/components/ui/WysiwygEditor/renders/components/WithPopover.vue +35 -0
  102. package/src/components/ui/WysiwygEditor/renders/index.d.ts +8 -8
  103. package/src/components/ui/WysiwygEditor/renders/index.js +8 -8
  104. package/src/components/ui/WysiwygEditor/renders/mixins/RenderMixin.js +39 -39
  105. package/src/components/ui/WysiwygEditor/renders/mixins/index.js +1 -1
  106. package/src/components/ui/WysiwygEditor/tools-and-commands.js +709 -704
  107. package/src/components/ui/WysiwygEditor/utils.js +72 -72
  108. package/src/components/ui/WysiwygEditor.md +18 -18
  109. package/src/components/ui/WysiwygEditor.vue +266 -266
  110. package/src/components/ui/utils/FormComponent.js +107 -107
  111. package/src/components/ui/utils/Helpers.js +84 -84
  112. package/src/components/ui/utils/WithPopover.js +81 -81
  113. package/src/main.js +8 -8
  114. package/styleguide.config.js +37 -37
  115. package/vue.config.js +8 -8
  116. package/dist/js.png +0 -0
  117. package/src/components/ui/WysiwygEditor/renders/InputBrowse.vue +0 -35
@@ -1,90 +1,90 @@
1
- Example using <mark>header</mark> <mark>icon-\*</mark> slots
2
-
3
- ```vue
4
- <template>
5
- <div class="pad-l5">
6
- <ui-collapse v-bind="props">
7
- <template #header="{ toggle }">
8
- <h3 class="last cursor-pointer" @click="toggle">My header</h3>
9
- </template>
10
- <div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</div>
11
- </ui-collapse>
12
- </div>
13
- </template>
14
- <script>
15
- import UiCollapse from './Collapse.vue';
16
-
17
- export default {
18
- components: { UiCollapse },
19
- data() {
20
- return {
21
- props: {
22
- visible: true,
23
- icon: true,
24
- },
25
- };
26
- },
27
- };
28
- </script>
29
- ```
30
-
31
- Example using <mark>heading</mark> slot
32
-
33
- ```vue
34
- <template>
35
- <div class="pad-l5">
36
- <ui-collapse class="ui-collapse-custom" v-bind="props">
37
- <template #heading="{ isOpen, toggle }">
38
- <div
39
- class="ui-collapse-custom-heading pad-v-3 pad-h-5 cursor-pointer u-select-none pos-rel"
40
- :class="{ 'color-primary': isOpen, 'bg-primary-focus': isOpen }"
41
- @click="toggle"
42
- >
43
- <div class="row row-collapse">
44
- <div class="col col-vmid">My header</div>
45
- <div class="col col-auto col-vmid">
46
- <div class="icon w-auto pull-left">
47
- <i
48
- class="mdi mdi-chevron-right"
49
- :class="{ 'mdi-rotate-90': isOpen }"
50
- ></i>
51
- </div>
52
- </div>
53
- </div>
54
- </div>
55
- </template>
56
- <div class="pad-5">
57
- <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
58
- <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
59
- <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
60
- <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
61
- <p class="last">
62
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.
63
- </p>
64
- </div>
65
- </ui-collapse>
66
- </div>
67
- </template>
68
- <style lang="less" scoped>
69
- .ui-collapse-custom {
70
- overflow: hidden;
71
- border-radius: var(--border-radius);
72
- border: 1px solid var(--color-grey-light);
73
- }
74
- .ui-collapse-custom-heading {
75
- transition: all 0.5s ease;
76
- }
77
- </style>
78
- <script>
79
- import UiCollapse from './Collapse.vue';
80
-
81
- export default {
82
- components: { UiCollapse },
83
- data() {
84
- return {
85
- props: {},
86
- };
87
- },
88
- };
89
- </script>
90
- ```
1
+ Example using <mark>header</mark> <mark>icon-\*</mark> slots
2
+
3
+ ```vue
4
+ <template>
5
+ <div class="pad-l5">
6
+ <ui-collapse v-bind="props">
7
+ <template #header="{ toggle }">
8
+ <h3 class="last cursor-pointer" @click="toggle">My header</h3>
9
+ </template>
10
+ <div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</div>
11
+ </ui-collapse>
12
+ </div>
13
+ </template>
14
+ <script>
15
+ import UiCollapse from './Collapse.vue';
16
+
17
+ export default {
18
+ components: { UiCollapse },
19
+ data() {
20
+ return {
21
+ props: {
22
+ visible: true,
23
+ icon: true,
24
+ },
25
+ };
26
+ },
27
+ };
28
+ </script>
29
+ ```
30
+
31
+ Example using <mark>heading</mark> slot
32
+
33
+ ```vue
34
+ <template>
35
+ <div class="pad-l5">
36
+ <ui-collapse class="ui-collapse-custom" v-bind="props">
37
+ <template #heading="{ isOpen, toggle }">
38
+ <div
39
+ class="ui-collapse-custom-heading pad-v-3 pad-h-5 cursor-pointer u-select-none pos-rel"
40
+ :class="{ 'color-primary': isOpen, 'bg-primary-focus': isOpen }"
41
+ @click="toggle"
42
+ >
43
+ <div class="row row-collapse">
44
+ <div class="col col-vmid">My header</div>
45
+ <div class="col col-auto col-vmid">
46
+ <div class="icon w-auto pull-left">
47
+ <i
48
+ class="mdi mdi-chevron-right"
49
+ :class="{ 'mdi-rotate-90': isOpen }"
50
+ ></i>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </template>
56
+ <div class="pad-5">
57
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
58
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
59
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
60
+ <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.</p>
61
+ <p class="last">
62
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Dignissimos, natus.
63
+ </p>
64
+ </div>
65
+ </ui-collapse>
66
+ </div>
67
+ </template>
68
+ <style lang="less" scoped>
69
+ .ui-collapse-custom {
70
+ overflow: hidden;
71
+ border-radius: var(--border-radius);
72
+ border: 1px solid var(--color-grey-light);
73
+ }
74
+ .ui-collapse-custom-heading {
75
+ transition: all 0.5s ease;
76
+ }
77
+ </style>
78
+ <script>
79
+ import UiCollapse from './Collapse.vue';
80
+
81
+ export default {
82
+ components: { UiCollapse },
83
+ data() {
84
+ return {
85
+ props: {},
86
+ };
87
+ },
88
+ };
89
+ </script>
90
+ ```
@@ -1,86 +1,86 @@
1
- <template>
2
- <div class="ui-collapse">
3
- <!--
4
- @slot Heading slot contains <mark>header</mark>, <mark>icon-open</mark>, <mark>icon-close</mark> slots
5
- @binding {boolean} isOpen open flag
6
- @binding {function} toggle function which toggles the visibility of the content
7
- -->
8
- <slot name="heading" v-bind="{ isOpen: show, toggle }">
9
- <div class="row row-collapse u-select-none">
10
- <div class="col col-vmid">
11
- <!--
12
- @slot Header content
13
- @binding {function} toggle function which toggles the visibility of the content
14
- -->
15
- <slot name="header" :toggle="toggle">
16
- <span class="cursor-pointer u-select-none text-bold" @click="toggle">
17
- Header
18
- </span>
19
- </slot>
20
- </div>
21
- <div class="col col-auto col-vmid" v-if="icon">
22
- <div class="cursor-pointer" @click="toggle">
23
- <!--
24
- @slot Custom slot for the 'open' state
25
- -->
26
- <slot name="icon-open" v-if="show">
27
- <div class="icon">
28
- <i class="color-primary mdil mdil-24px mdil-minus"></i>
29
- </div>
30
- </slot>
31
- <!--
32
- @slot Custom slot for the 'close' state
33
- -->
34
- <slot name="icon-close" v-else>
35
- <div class="icon">
36
- <i class="color-primary mdil mdil-24px mdil-plus"></i>
37
- </div>
38
- </slot>
39
- </div>
40
- </div>
41
- </div>
42
- </slot>
43
- <!--
44
- @slot Content
45
- -->
46
- <slot v-if="show">Content</slot>
47
- </div>
48
- </template>
49
- <script>
50
- export default {
51
- props: {
52
- /**
53
- * Whether the content is visible
54
- */
55
- visible: {
56
- type: Boolean,
57
- default: false,
58
- },
59
- /**
60
- * Whether the icons are visible
61
- */
62
- icon: {
63
- type: Boolean,
64
- default: true,
65
- },
66
- },
67
- data() {
68
- return {
69
- show: false,
70
- };
71
- },
72
- watch: {
73
- visible: {
74
- handler(val) {
75
- this.show = val;
76
- },
77
- immediate: true,
78
- },
79
- },
80
- methods: {
81
- toggle() {
82
- this.show = !this.show;
83
- },
84
- },
85
- };
86
- </script>
1
+ <template>
2
+ <div class="ui-collapse">
3
+ <!--
4
+ @slot Heading slot contains <mark>header</mark>, <mark>icon-open</mark>, <mark>icon-close</mark> slots
5
+ @binding {boolean} isOpen open flag
6
+ @binding {function} toggle function which toggles the visibility of the content
7
+ -->
8
+ <slot name="heading" v-bind="{ isOpen: show, toggle }">
9
+ <div class="row row-collapse u-select-none">
10
+ <div class="col col-vmid">
11
+ <!--
12
+ @slot Header content
13
+ @binding {function} toggle function which toggles the visibility of the content
14
+ -->
15
+ <slot name="header" :toggle="toggle">
16
+ <span class="cursor-pointer u-select-none text-bold" @click="toggle">
17
+ Header
18
+ </span>
19
+ </slot>
20
+ </div>
21
+ <div class="col col-auto col-vmid" v-if="icon">
22
+ <div class="cursor-pointer" @click="toggle">
23
+ <!--
24
+ @slot Custom slot for the 'open' state
25
+ -->
26
+ <slot name="icon-open" v-if="show">
27
+ <div class="icon">
28
+ <i class="color-primary mdil mdil-24px mdil-minus"></i>
29
+ </div>
30
+ </slot>
31
+ <!--
32
+ @slot Custom slot for the 'close' state
33
+ -->
34
+ <slot name="icon-close" v-else>
35
+ <div class="icon">
36
+ <i class="color-primary mdil mdil-24px mdil-plus"></i>
37
+ </div>
38
+ </slot>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </slot>
43
+ <!--
44
+ @slot Content
45
+ -->
46
+ <slot v-if="show">Content</slot>
47
+ </div>
48
+ </template>
49
+ <script>
50
+ export default {
51
+ props: {
52
+ /**
53
+ * Whether the content is visible
54
+ */
55
+ visible: {
56
+ type: Boolean,
57
+ default: false,
58
+ },
59
+ /**
60
+ * Whether the icons are visible
61
+ */
62
+ icon: {
63
+ type: Boolean,
64
+ default: true,
65
+ },
66
+ },
67
+ data() {
68
+ return {
69
+ show: false,
70
+ };
71
+ },
72
+ watch: {
73
+ visible: {
74
+ handler(val) {
75
+ this.show = val;
76
+ },
77
+ immediate: true,
78
+ },
79
+ },
80
+ methods: {
81
+ toggle() {
82
+ this.show = !this.show;
83
+ },
84
+ },
85
+ };
86
+ </script>
@@ -1,114 +1,114 @@
1
- <template>
2
- <div class="ui-color-picker-color-alpha" @mousedown.prevent.stop="selectAlpha">
3
- <canvas ref="canvasAlpha" />
4
- <div :style="slideAlphaStyle" class="slide" />
5
- </div>
6
- </template>
7
- <style lang="less" scoped>
8
- .ui-color-picker-color-alpha {
9
- position: relative;
10
- cursor: pointer;
11
- .slide {
12
- position: absolute;
13
- left: 0;
14
- top: 100px;
15
- width: 100%;
16
- height: 4px;
17
- background: #fff;
18
- box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.3);
19
- pointer-events: none;
20
- }
21
- }
22
- </style>
23
- <script>
24
- import mixin from './mixin';
25
- export default {
26
- mixins: [mixin],
27
- props: {
28
- color: {
29
- type: String,
30
- default: '#000000',
31
- },
32
- rgba: {
33
- type: Object,
34
- default: null,
35
- },
36
- width: {
37
- type: Number,
38
- default: 15,
39
- },
40
- height: {
41
- type: Number,
42
- default: 152,
43
- },
44
- },
45
- data() {
46
- return {
47
- slideAlphaStyle: {},
48
- alphaSize: 5,
49
- };
50
- },
51
- watch: {
52
- color() {
53
- this.renderColor();
54
- },
55
- 'rgba.a'() {
56
- this.renderSlide();
57
- },
58
- },
59
- mounted() {
60
- this.renderColor();
61
- this.renderSlide();
62
- },
63
- methods: {
64
- renderColor() {
65
- const canvas = this.$refs.canvasAlpha;
66
- const width = this.width;
67
- const height = this.height;
68
- const size = this.alphaSize;
69
- const canvasSquare = this.createAlphaSquare(size);
70
-
71
- const ctx = canvas.getContext('2d');
72
- canvas.width = width;
73
- canvas.height = height;
74
-
75
- ctx.fillStyle = ctx.createPattern(canvasSquare, 'repeat');
76
- ctx.fillRect(0, 0, width, height);
77
-
78
- this.createLinearGradient('p', ctx, width, height, 'rgba(255,255,255,0)', this.color);
79
- },
80
- renderSlide() {
81
- this.slideAlphaStyle = {
82
- top: this.rgba.a * this.height - 2 + 'px',
83
- };
84
- },
85
- selectAlpha(e) {
86
- const { top: hueTop } = this.$el.getBoundingClientRect();
87
-
88
- const mousemove = e => {
89
- let y = e.clientY - hueTop;
90
-
91
- if (y < 0) {
92
- y = 0;
93
- }
94
- if (y > this.height) {
95
- y = this.height;
96
- }
97
-
98
- let a = parseFloat((y / this.height).toFixed(2));
99
- this.$emit('selectAlpha', a);
100
- };
101
-
102
- mousemove(e);
103
-
104
- const mouseup = () => {
105
- document.removeEventListener('mousemove', mousemove);
106
- document.removeEventListener('mouseup', mouseup);
107
- };
108
-
109
- document.addEventListener('mousemove', mousemove);
110
- document.addEventListener('mouseup', mouseup);
111
- },
112
- },
113
- };
114
- </script>
1
+ <template>
2
+ <div class="ui-color-picker-color-alpha" @mousedown.prevent.stop="selectAlpha">
3
+ <canvas ref="canvasAlpha" />
4
+ <div :style="slideAlphaStyle" class="slide" />
5
+ </div>
6
+ </template>
7
+ <style lang="less" scoped>
8
+ .ui-color-picker-color-alpha {
9
+ position: relative;
10
+ cursor: pointer;
11
+ .slide {
12
+ position: absolute;
13
+ left: 0;
14
+ top: 100px;
15
+ width: 100%;
16
+ height: 4px;
17
+ background: #fff;
18
+ box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.3);
19
+ pointer-events: none;
20
+ }
21
+ }
22
+ </style>
23
+ <script>
24
+ import mixin from './mixin';
25
+ export default {
26
+ mixins: [mixin],
27
+ props: {
28
+ color: {
29
+ type: String,
30
+ default: '#000000',
31
+ },
32
+ rgba: {
33
+ type: Object,
34
+ default: null,
35
+ },
36
+ width: {
37
+ type: Number,
38
+ default: 15,
39
+ },
40
+ height: {
41
+ type: Number,
42
+ default: 152,
43
+ },
44
+ },
45
+ data() {
46
+ return {
47
+ slideAlphaStyle: {},
48
+ alphaSize: 5,
49
+ };
50
+ },
51
+ watch: {
52
+ color() {
53
+ this.renderColor();
54
+ },
55
+ 'rgba.a'() {
56
+ this.renderSlide();
57
+ },
58
+ },
59
+ mounted() {
60
+ this.renderColor();
61
+ this.renderSlide();
62
+ },
63
+ methods: {
64
+ renderColor() {
65
+ const canvas = this.$refs.canvasAlpha;
66
+ const width = this.width;
67
+ const height = this.height;
68
+ const size = this.alphaSize;
69
+ const canvasSquare = this.createAlphaSquare(size);
70
+
71
+ const ctx = canvas.getContext('2d');
72
+ canvas.width = width;
73
+ canvas.height = height;
74
+
75
+ ctx.fillStyle = ctx.createPattern(canvasSquare, 'repeat');
76
+ ctx.fillRect(0, 0, width, height);
77
+
78
+ this.createLinearGradient('p', ctx, width, height, 'rgba(255,255,255,0)', this.color);
79
+ },
80
+ renderSlide() {
81
+ this.slideAlphaStyle = {
82
+ top: this.rgba.a * this.height - 2 + 'px',
83
+ };
84
+ },
85
+ selectAlpha(e) {
86
+ const { top: hueTop } = this.$el.getBoundingClientRect();
87
+
88
+ const mousemove = e => {
89
+ let y = e.clientY - hueTop;
90
+
91
+ if (y < 0) {
92
+ y = 0;
93
+ }
94
+ if (y > this.height) {
95
+ y = this.height;
96
+ }
97
+
98
+ let a = parseFloat((y / this.height).toFixed(2));
99
+ this.$emit('selectAlpha', a);
100
+ };
101
+
102
+ mousemove(e);
103
+
104
+ const mouseup = () => {
105
+ document.removeEventListener('mousemove', mousemove);
106
+ document.removeEventListener('mouseup', mouseup);
107
+ };
108
+
109
+ document.addEventListener('mousemove', mousemove);
110
+ document.addEventListener('mouseup', mouseup);
111
+ },
112
+ },
113
+ };
114
+ </script>