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.
- package/.eslintrc.js +7 -7
- package/.prettierrc +14 -14
- package/README.md +35 -35
- package/babel.config.js +5 -5
- package/index.js +53 -53
- package/jsconfig.json +13 -13
- package/package.json +67 -67
- package/src/App.vue +36 -36
- package/src/components/ui/Avatar.md +68 -68
- package/src/components/ui/Avatar.vue +180 -180
- package/src/components/ui/Badge.md +20 -20
- package/src/components/ui/Badge.vue +75 -75
- package/src/components/ui/Collapse.md +90 -90
- package/src/components/ui/Collapse.vue +86 -86
- package/src/components/ui/ColorPicker/Alpha.vue +114 -114
- package/src/components/ui/ColorPicker/Colors.vue +117 -117
- package/src/components/ui/ColorPicker/Hue.vue +113 -113
- package/src/components/ui/ColorPicker/Preview.vue +55 -55
- package/src/components/ui/ColorPicker/Saturation.vue +123 -123
- package/src/components/ui/ColorPicker/mixin.js +105 -105
- package/src/components/ui/ColorPicker.md +17 -17
- package/src/components/ui/ColorPicker.vue +314 -314
- package/src/components/ui/Datalist.md +41 -41
- package/src/components/ui/Datalist.vue +164 -164
- package/src/components/ui/DatePicker.md +168 -168
- package/src/components/ui/DatePicker.vue +527 -527
- package/src/components/ui/FileSelector.md +105 -105
- package/src/components/ui/FileSelector.vue +82 -82
- package/src/components/ui/Grid.md +130 -130
- package/src/components/ui/Grid.vue +92 -92
- package/src/components/ui/Image.md +59 -59
- package/src/components/ui/Image.vue +57 -57
- package/src/components/ui/InputAutocomplete.md +115 -115
- package/src/components/ui/InputAutocomplete.vue +349 -349
- package/src/components/ui/InputColorPicker.md +51 -51
- package/src/components/ui/InputColorPicker.vue +151 -151
- package/src/components/ui/InputDatePicker.md +121 -121
- package/src/components/ui/InputDatePicker.vue +326 -326
- package/src/components/ui/InputTags.md +51 -51
- package/src/components/ui/InputTags.vue +184 -184
- package/src/components/ui/InputTimePicker.md +25 -25
- package/src/components/ui/InputTimePicker.vue +253 -253
- package/src/components/ui/InputUnits.md +20 -20
- package/src/components/ui/InputUnits.vue +257 -257
- package/src/components/ui/Lazy.md +37 -37
- package/src/components/ui/Lazy.vue +92 -92
- package/src/components/ui/Pagination.md +74 -74
- package/src/components/ui/Pagination.vue +138 -138
- package/src/components/ui/Paginator.md +34 -34
- package/src/components/ui/Paginator.vue +83 -83
- package/src/components/ui/Popover.md +34 -34
- package/src/components/ui/Popover.vue +274 -274
- package/src/components/ui/Popup.md +59 -59
- package/src/components/ui/Popup.vue +150 -150
- package/src/components/ui/ResponsiveContainer.md +58 -58
- package/src/components/ui/ResponsiveContainer.vue +99 -99
- package/src/components/ui/Select.md +187 -187
- package/src/components/ui/Select.vue +421 -421
- package/src/components/ui/TimePicker.md +50 -50
- package/src/components/ui/TimePicker.vue +252 -252
- package/src/components/ui/Tooltip.md +54 -54
- package/src/components/ui/Tooltip.vue +113 -113
- package/src/components/ui/WysiwygEditor/WysiwygEditor.d.ts +128 -119
- package/src/components/ui/WysiwygEditor/constants.js +273 -264
- package/src/components/ui/WysiwygEditor/extensions/blockquote.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/bold.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/bullet-list.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/code-block.js +13 -13
- package/src/components/ui/WysiwygEditor/extensions/code.js +13 -13
- package/src/components/ui/WysiwygEditor/extensions/font-size.js +34 -34
- package/src/components/ui/WysiwygEditor/extensions/formatting.js +14 -14
- package/src/components/ui/WysiwygEditor/extensions/heading.js +13 -13
- package/src/components/ui/WysiwygEditor/extensions/horizontal-rule.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/image.js +37 -19
- package/src/components/ui/WysiwygEditor/extensions/index.d.ts +32 -32
- package/src/components/ui/WysiwygEditor/extensions/index.js +32 -32
- package/src/components/ui/WysiwygEditor/extensions/italic.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/link.js +16 -16
- package/src/components/ui/WysiwygEditor/extensions/list-item.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/ordered-list.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/paragraph.js +23 -23
- package/src/components/ui/WysiwygEditor/extensions/strike.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/table-cell.js +13 -13
- package/src/components/ui/WysiwygEditor/extensions/table-header.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/table-row.js +15 -15
- package/src/components/ui/WysiwygEditor/extensions/table.js +29 -29
- package/src/components/ui/WysiwygEditor/extensions/text-align.js +6 -6
- package/src/components/ui/WysiwygEditor/extensions/text-style.js +12 -15
- package/src/components/ui/WysiwygEditor/extensions/underline.js +15 -15
- package/src/components/ui/WysiwygEditor/index.d.ts +4 -4
- package/src/components/ui/WysiwygEditor/index.js +4 -4
- package/src/components/ui/WysiwygEditor/renders/Button.vue +28 -28
- package/src/components/ui/WysiwygEditor/renders/ColorPicker.vue +41 -41
- package/src/components/ui/WysiwygEditor/renders/Image.vue +200 -0
- package/src/components/ui/WysiwygEditor/renders/InputAuto.vue +34 -34
- package/src/components/ui/WysiwygEditor/renders/InputUnits.vue +37 -38
- package/src/components/ui/WysiwygEditor/renders/Link.vue +82 -87
- package/src/components/ui/WysiwygEditor/renders/Select.vue +47 -47
- package/src/components/ui/WysiwygEditor/renders/ToolbarPopover.vue +49 -49
- package/src/components/ui/WysiwygEditor/renders/components/Popover.vue +15 -0
- package/src/components/ui/WysiwygEditor/renders/components/WithPopover.vue +35 -0
- package/src/components/ui/WysiwygEditor/renders/index.d.ts +8 -8
- package/src/components/ui/WysiwygEditor/renders/index.js +8 -8
- package/src/components/ui/WysiwygEditor/renders/mixins/RenderMixin.js +39 -39
- package/src/components/ui/WysiwygEditor/renders/mixins/index.js +1 -1
- package/src/components/ui/WysiwygEditor/tools-and-commands.js +709 -704
- package/src/components/ui/WysiwygEditor/utils.js +72 -72
- package/src/components/ui/WysiwygEditor.md +18 -18
- package/src/components/ui/WysiwygEditor.vue +266 -266
- package/src/components/ui/utils/FormComponent.js +107 -107
- package/src/components/ui/utils/Helpers.js +84 -84
- package/src/components/ui/utils/WithPopover.js +81 -81
- package/src/main.js +8 -8
- package/styleguide.config.js +37 -37
- package/vue.config.js +8 -8
- package/dist/js.png +0 -0
- 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>
|