classcard-ui 0.2.1068 → 0.2.1069
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/README.md +24 -24
- package/dist/classcard-ui.common.js +76 -65
- package/dist/classcard-ui.common.js.map +1 -1
- package/dist/classcard-ui.umd.js +76 -65
- package/dist/classcard-ui.umd.js.map +1 -1
- package/dist/classcard-ui.umd.min.js +1 -1
- package/dist/classcard-ui.umd.min.js.map +1 -1
- package/package.json +82 -82
- package/src/App.vue +16 -16
- package/src/components/CAlerts/CAlerts.vue +70 -70
- package/src/components/CAlerts/index.js +2 -2
- package/src/components/CAnchorTabs/CAnchorTabs.vue +96 -96
- package/src/components/CAnchorTabs/index.js +2 -2
- package/src/components/CAnchorTag/CAnchorTag.vue +62 -62
- package/src/components/CAnchorTag/index.js +2 -2
- package/src/components/CAvatar/CAvatar.vue +212 -212
- package/src/components/CAvatar/index.js +2 -2
- package/src/components/CAvatarGroup/CAvatarGroup.vue +145 -145
- package/src/components/CAvatarGroup/index.js +2 -2
- package/src/components/CBasicTable/CBasicTable.vue +184 -184
- package/src/components/CBasicTable/index.js +2 -2
- package/src/components/CBreadcrumbs/CBreadcrumbs.vue +38 -38
- package/src/components/CBreadcrumbs/index.js +2 -2
- package/src/components/CButton/CButton.vue +152 -152
- package/src/components/CButton/index.js +2 -2
- package/src/components/CButtonGroup/CButtonGroup.vue +118 -118
- package/src/components/CButtonGroup/index.js +2 -2
- package/src/components/CButtonIcon/CButtonIcon.vue +117 -117
- package/src/components/CButtonIcon/index.js +2 -2
- package/src/components/CButtonLink/CButtonLink.vue +39 -39
- package/src/components/CButtonLink/index.js +2 -2
- package/src/components/CButtonSelect/CButtonSelect.vue +134 -134
- package/src/components/CButtonSelect/index.js +2 -2
- package/src/components/CButtonSelectBorder/CButtonSelectBorder.vue +135 -135
- package/src/components/CButtonSelectBorder/index.js +3 -3
- package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +135 -135
- package/src/components/CButtonWithDropdown/index.js +2 -2
- package/src/components/CCalendar/CCalendar.vue +410 -410
- package/src/components/CCalendar/index.js +3 -3
- package/src/components/CCard/CCard.vue +49 -49
- package/src/components/CCard/index.js +2 -2
- package/src/components/CCheckbox/CCheckbox.vue +123 -123
- package/src/components/CCheckbox/index.js +2 -2
- package/src/components/CCircularButton/CCircularButton.vue +53 -53
- package/src/components/CCircularButton/index.js +2 -2
- package/src/components/CCollapsibleSection/CCollapsibleSection.vue +101 -101
- package/src/components/CCollapsibleSection/index.js +2 -2
- package/src/components/CColorDots/CColorDots.vue +51 -51
- package/src/components/CColorDots/index.js +3 -3
- package/src/components/CConfirmActionModal/CConfirmActionModal.vue +180 -180
- package/src/components/CConfirmActionModal/index.js +3 -3
- package/src/components/CDatepicker/CDatepicker.vue +201 -201
- package/src/components/CDatepicker/index.js +2 -2
- package/src/components/CDualSelect/CDualSelect.vue +193 -193
- package/src/components/CDualSelect/index.js +2 -2
- package/src/components/CEditor/CEditor.vue +98 -98
- package/src/components/CEditor/index.js +2 -2
- package/src/components/CFormSectionHeading/CFormSectionHeading.vue +53 -53
- package/src/components/CFormSectionHeading/index.js +2 -2
- package/src/components/CGroupedSelect/CGroupedSelect.vue +245 -245
- package/src/components/CGroupedSelect/index.js +3 -3
- package/src/components/CIcon/CIcon.vue +91 -91
- package/src/components/CIcon/index.js +2 -2
- package/src/components/CIconDropdown/CIconDropdown.vue +146 -146
- package/src/components/CIconDropdown/index.js +2 -2
- package/src/components/CInput/CInput.vue +134 -134
- package/src/components/CInput/index.js +2 -2
- package/src/components/CInputAddon/CInputAddon.vue +228 -228
- package/src/components/CInputAddon/index.js +2 -2
- package/src/components/CInputEmail/CInputEmail.vue +93 -93
- package/src/components/CInputEmail/index.js +2 -2
- package/src/components/CInsetTabs/CInsetTabs.vue +88 -88
- package/src/components/CInsetTabs/index.js +3 -3
- package/src/components/CModalHeading/CModalHeading.vue +22 -22
- package/src/components/CModalHeading/index.js +2 -2
- package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +70 -70
- package/src/components/CModuleHelpLinks/index.js +3 -3
- package/src/components/CMultiselect/CMultiselect.vue +615 -615
- package/src/components/CMultiselect/index.js +2 -2
- package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
- package/src/components/CMultiselectr/index.js +2 -2
- package/src/components/CPageHeading/CPageHeading.vue +56 -56
- package/src/components/CPageHeading/index.js +2 -2
- package/src/components/CPagination/CPagination.vue +233 -233
- package/src/components/CPagination/index.js +2 -2
- package/src/components/CPhoneNumber/CPhoneNumber.vue +114 -114
- package/src/components/CPhoneNumber/index.js +2 -2
- package/src/components/CProgress/CProgress.vue +57 -57
- package/src/components/CProgress/index.js +2 -2
- package/src/components/CRadio/CRadio.vue +126 -126
- package/src/components/CRadio/index.js +2 -2
- package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
- package/src/components/CRangeSlider/index.js +2 -2
- package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
- package/src/components/CReorderableStackedList/index.js +2 -2
- package/src/components/CSelect/CSelect.vue +539 -530
- package/src/components/CSelect/index.js +2 -2
- package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
- package/src/components/CSmallTimeline/index.js +2 -2
- package/src/components/CStackedList/CStackedList.vue +150 -150
- package/src/components/CStackedList/index.js +2 -2
- package/src/components/CStats/CStats.vue +116 -116
- package/src/components/CStats/index.js +2 -2
- package/src/components/CSwitch/CSwitch.vue +176 -176
- package/src/components/CSwitch/index.js +2 -2
- package/src/components/CTabLazy/CTabLazy.vue +63 -63
- package/src/components/CTabLazy/index.js +2 -2
- package/src/components/CTable/CTable.vue +671 -671
- package/src/components/CTable/index.js +2 -2
- package/src/components/CTabs/CTabs.vue +169 -169
- package/src/components/CTabs/index.js +2 -2
- package/src/components/CTag/CTag.vue +59 -59
- package/src/components/CTag/index.js +2 -2
- package/src/components/CTextarea/CTextarea.vue +107 -107
- package/src/components/CTextarea/index.js +2 -2
- package/src/components/CTimeline/CTimeline.vue +237 -237
- package/src/components/CTimeline/index.js +2 -2
- package/src/components/CUpload/CUpload.vue +267 -267
- package/src/components/CUpload/index.js +2 -2
- package/src/components/index.js +53 -53
- package/src/icons.js +453 -453
- package/src/main.js +22 -22
- package/src/stories/CAlerts.stories.js +37 -37
- package/src/stories/CAnchorTabs.stories.js +29 -29
- package/src/stories/CAnchorTag.stories.js +36 -36
- package/src/stories/CAvatar.stories.js +38 -38
- package/src/stories/CAvatarGroup.stories.js +100 -100
- package/src/stories/CBasicTable.stories.js +316 -316
- package/src/stories/CBreadcrumbs.stories.js +24 -24
- package/src/stories/CButton.stories.js +47 -47
- package/src/stories/CButtonGroup.stories.js +33 -33
- package/src/stories/CButtonIcon.stories.js +27 -27
- package/src/stories/CButtonLink.stories.js +24 -24
- package/src/stories/CButtonSelect.stories.js +41 -41
- package/src/stories/CButtonSelectBorder.stories.js +48 -48
- package/src/stories/CButtonWithDropdown.stories.js +41 -41
- package/src/stories/CCalendar.stories.js +16 -16
- package/src/stories/CCard.stories.js +30 -30
- package/src/stories/CCheckbox.stories.js +29 -29
- package/src/stories/CCircularButton.stories.js +29 -29
- package/src/stories/CCollapsibleSection.stories.js +28 -28
- package/src/stories/CColorDots.stories.js +28 -28
- package/src/stories/CConfirmActionModal.stories.js +59 -59
- package/src/stories/CDatepicker.stories.js +30 -30
- package/src/stories/CDualSelect.stories.js +29 -29
- package/src/stories/CEditor.stories.js +30 -30
- package/src/stories/CFormSectionHeading.stories.js +34 -34
- package/src/stories/CGroupedSelect.stories.js +71 -71
- package/src/stories/CIcon.stories.js +28 -28
- package/src/stories/CIconDropdown.stories.js +45 -45
- package/src/stories/CInput.stories.js +36 -36
- package/src/stories/CInputAddon.stories.js +37 -37
- package/src/stories/CInputEmail.stories.js +27 -27
- package/src/stories/CInsetTabs.stories.js +38 -38
- package/src/stories/CModalHeading.stories.js +25 -25
- package/src/stories/CModuleHelpLinks.stories.js +25 -25
- package/src/stories/CMultiselect.stories.js +167 -167
- package/src/stories/CMultiselectr.stories.js +23 -23
- package/src/stories/CPageHeading.stories.js +32 -32
- package/src/stories/CPagination.stories.js +30 -30
- package/src/stories/CPhoneNumber.stories.js +29 -29
- package/src/stories/CProgress.stories.js +23 -23
- package/src/stories/CRadio.stories.js +36 -36
- package/src/stories/CRangeSlider.stories.js +23 -23
- package/src/stories/CReorderableStackedList.stories.js +23 -23
- package/src/stories/CSelect.stories.js +109 -109
- package/src/stories/CSmallTimeline.stories.js +26 -26
- package/src/stories/CStackedList.stories.js +37 -37
- package/src/stories/CStats.stories.js +33 -33
- package/src/stories/CSwitch.stories.js +28 -28
- package/src/stories/CTabLazy.stories.js +26 -26
- package/src/stories/CTable.stories.js +169 -169
- package/src/stories/CTabs.stories.js +36 -36
- package/src/stories/CTag.stories.js +34 -34
- package/src/stories/CTextarea.stories.js +32 -32
- package/src/stories/CTimeline.stories.js +26 -26
- package/src/stories/CUpload.stories.js +36 -36
- package/src/stories/Introduction.stories.mdx +207 -207
- package/src/stories/Page.vue +88 -88
- package/src/stories/assets/code-brackets.svg +0 -0
- package/src/stories/assets/colors.svg +0 -0
- package/src/stories/assets/comments.svg +0 -0
- package/src/stories/assets/direction.svg +0 -0
- package/src/stories/assets/flow.svg +0 -0
- package/src/stories/assets/plugin.svg +0 -0
- package/src/stories/assets/repo.svg +0 -0
- package/src/stories/assets/stackalt.svg +0 -0
- package/src/stories/header.css +26 -26
- package/src/stories/page.css +69 -69
- package/src/stories/utils.css +17 -17
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<slot></slot>
|
|
4
|
-
<div
|
|
5
|
-
:class="[isDisabled ? 'opacity-50' : '']"
|
|
6
|
-
class="relative inline-block text-left"
|
|
7
|
-
>
|
|
8
|
-
<button
|
|
9
|
-
:type="type"
|
|
10
|
-
:class="classes"
|
|
11
|
-
class="focus:outline-none inline-flex w-full justify-center border px-4 py-2 text-sm font-medium shadow-sm"
|
|
12
|
-
aria-haspopup="listbox"
|
|
13
|
-
aria-expanded="true"
|
|
14
|
-
aria-labelledby="listbox-label"
|
|
15
|
-
:disabled="isDisabled"
|
|
16
|
-
@click="toggleDropdown = !toggleDropdown"
|
|
17
|
-
@blur="close()"
|
|
18
|
-
>
|
|
19
|
-
<c-icon v-if="isLoading" class="mr-2 h-5 w-5" name="loader"></c-icon>
|
|
20
|
-
{{ label }}
|
|
21
|
-
<c-icon name="chevron-down" type="solid" class="ml-2 h-5 w-5"></c-icon>
|
|
22
|
-
</button>
|
|
23
|
-
|
|
24
|
-
<div
|
|
25
|
-
v-if="toggleDropdown"
|
|
26
|
-
:class="dropdownPositionClass"
|
|
27
|
-
class="absolute z-10 mt-2 -mr-1 w-56 rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
|
|
28
|
-
>
|
|
29
|
-
<ul
|
|
30
|
-
class="py-1"
|
|
31
|
-
tabindex="-1"
|
|
32
|
-
role="listbox"
|
|
33
|
-
aria-labelledby="listbox-label"
|
|
34
|
-
>
|
|
35
|
-
<div v-for="(item, index) in items" :key="index">
|
|
36
|
-
<!-- to have a border pass a object { hasNoData: true } after the object
|
|
37
|
-
below which the border is required -->
|
|
38
|
-
<hr
|
|
39
|
-
v-if="item.hasNoData"
|
|
40
|
-
class="border-1 mt-1 h-1 w-full border-gray-200 pt-1"
|
|
41
|
-
/>
|
|
42
|
-
<!-- item.isDisabled will make the list item unclickable and reduce the opacity -->
|
|
43
|
-
<li
|
|
44
|
-
v-else
|
|
45
|
-
:class="[
|
|
46
|
-
item.isDisabled ? 'pointer-events-none opacity-50 ' : '',
|
|
47
|
-
]"
|
|
48
|
-
class="flex cursor-pointer px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
|
|
49
|
-
@mousedown="emitOption(item)"
|
|
50
|
-
>
|
|
51
|
-
<c-icon
|
|
52
|
-
v-if="item.icon"
|
|
53
|
-
:type="item.iconType"
|
|
54
|
-
class="mr-2 h-5 w-5 text-gray-500"
|
|
55
|
-
:name="item.icon"
|
|
56
|
-
></c-icon>
|
|
57
|
-
<slot name="customIcon" v-if="item.customIcon"></slot>
|
|
58
|
-
{{ item.text }}
|
|
59
|
-
</li>
|
|
60
|
-
</div>
|
|
61
|
-
</ul>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
</template>
|
|
66
|
-
|
|
67
|
-
<script>
|
|
68
|
-
import CIcon from "../CIcon/CIcon.vue";
|
|
69
|
-
export default {
|
|
70
|
-
name: "CButtonSelectBorder",
|
|
71
|
-
components: { CIcon },
|
|
72
|
-
props: {
|
|
73
|
-
label: {
|
|
74
|
-
type: String,
|
|
75
|
-
required: true,
|
|
76
|
-
},
|
|
77
|
-
type: {
|
|
78
|
-
type: String,
|
|
79
|
-
default: "primary",
|
|
80
|
-
},
|
|
81
|
-
items: {
|
|
82
|
-
type: Array,
|
|
83
|
-
required: true,
|
|
84
|
-
},
|
|
85
|
-
isLoading: {
|
|
86
|
-
type: Boolean,
|
|
87
|
-
default: false,
|
|
88
|
-
},
|
|
89
|
-
dropdownPositionClass: {
|
|
90
|
-
type: String,
|
|
91
|
-
},
|
|
92
|
-
isDisabled: {
|
|
93
|
-
type: Boolean,
|
|
94
|
-
default: false,
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
data() {
|
|
98
|
-
return {
|
|
99
|
-
toggleDropdown: false,
|
|
100
|
-
};
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
computed: {
|
|
104
|
-
classes() {
|
|
105
|
-
return {
|
|
106
|
-
"text-gray-700 border-gray-300 rounded-md border-transparent hover:bg-gray-50 focus:ring-indigo-600":
|
|
107
|
-
this.type == "secondary",
|
|
108
|
-
"text-white rounded-md hover:bg-indigo-800 bg-indigo-700 border-transparent focus:ring-indigo-600":
|
|
109
|
-
this.type == "primary",
|
|
110
|
-
"text-white rounded-md hover:bg-red-800 bg-red-700 border-transparent focus:ring-red-600":
|
|
111
|
-
this.type == "danger",
|
|
112
|
-
"text-white rounded-md hover:bg-green-800 bg-green-700 border-transparent focus:ring-green-600":
|
|
113
|
-
this.type == "success",
|
|
114
|
-
"cursor-default rounded-md border-transparent pointer-events-none": this.isLoading,
|
|
115
|
-
//the type-white property contains the class rounded-r-md that would only round the button corner in the right direction
|
|
116
|
-
//while the other type property will round the button corners for all 4 direction
|
|
117
|
-
"text-gray-700 border-gray-300 rounded-r-md border-transparent hover:bg-gray-50 focus:ring-indigo-600 bg-white":
|
|
118
|
-
this.type == "white-rounded-right",
|
|
119
|
-
"text-gray-700 border bg-white border-gray-300 rounded-md hover:bg-gray-50 focus:ring-indigo-600":
|
|
120
|
-
this.type == "white",
|
|
121
|
-
};
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
methods: {
|
|
125
|
-
emitOption(item) {
|
|
126
|
-
this.$emit("buttonActions", item);
|
|
127
|
-
},
|
|
128
|
-
close() {
|
|
129
|
-
this.toggleDropdown = false;
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
</script>
|
|
134
|
-
|
|
135
|
-
<style></style>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<slot></slot>
|
|
4
|
+
<div
|
|
5
|
+
:class="[isDisabled ? 'opacity-50' : '']"
|
|
6
|
+
class="relative inline-block text-left"
|
|
7
|
+
>
|
|
8
|
+
<button
|
|
9
|
+
:type="type"
|
|
10
|
+
:class="classes"
|
|
11
|
+
class="focus:outline-none inline-flex w-full justify-center border px-4 py-2 text-sm font-medium shadow-sm"
|
|
12
|
+
aria-haspopup="listbox"
|
|
13
|
+
aria-expanded="true"
|
|
14
|
+
aria-labelledby="listbox-label"
|
|
15
|
+
:disabled="isDisabled"
|
|
16
|
+
@click="toggleDropdown = !toggleDropdown"
|
|
17
|
+
@blur="close()"
|
|
18
|
+
>
|
|
19
|
+
<c-icon v-if="isLoading" class="mr-2 h-5 w-5" name="loader"></c-icon>
|
|
20
|
+
{{ label }}
|
|
21
|
+
<c-icon name="chevron-down" type="solid" class="ml-2 h-5 w-5"></c-icon>
|
|
22
|
+
</button>
|
|
23
|
+
|
|
24
|
+
<div
|
|
25
|
+
v-if="toggleDropdown"
|
|
26
|
+
:class="dropdownPositionClass"
|
|
27
|
+
class="absolute z-10 mt-2 -mr-1 w-56 rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
|
|
28
|
+
>
|
|
29
|
+
<ul
|
|
30
|
+
class="py-1"
|
|
31
|
+
tabindex="-1"
|
|
32
|
+
role="listbox"
|
|
33
|
+
aria-labelledby="listbox-label"
|
|
34
|
+
>
|
|
35
|
+
<div v-for="(item, index) in items" :key="index">
|
|
36
|
+
<!-- to have a border pass a object { hasNoData: true } after the object
|
|
37
|
+
below which the border is required -->
|
|
38
|
+
<hr
|
|
39
|
+
v-if="item.hasNoData"
|
|
40
|
+
class="border-1 mt-1 h-1 w-full border-gray-200 pt-1"
|
|
41
|
+
/>
|
|
42
|
+
<!-- item.isDisabled will make the list item unclickable and reduce the opacity -->
|
|
43
|
+
<li
|
|
44
|
+
v-else
|
|
45
|
+
:class="[
|
|
46
|
+
item.isDisabled ? 'pointer-events-none opacity-50 ' : '',
|
|
47
|
+
]"
|
|
48
|
+
class="flex cursor-pointer px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
|
|
49
|
+
@mousedown="emitOption(item)"
|
|
50
|
+
>
|
|
51
|
+
<c-icon
|
|
52
|
+
v-if="item.icon"
|
|
53
|
+
:type="item.iconType"
|
|
54
|
+
class="mr-2 h-5 w-5 text-gray-500"
|
|
55
|
+
:name="item.icon"
|
|
56
|
+
></c-icon>
|
|
57
|
+
<slot name="customIcon" v-if="item.customIcon"></slot>
|
|
58
|
+
{{ item.text }}
|
|
59
|
+
</li>
|
|
60
|
+
</div>
|
|
61
|
+
</ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
<script>
|
|
68
|
+
import CIcon from "../CIcon/CIcon.vue";
|
|
69
|
+
export default {
|
|
70
|
+
name: "CButtonSelectBorder",
|
|
71
|
+
components: { CIcon },
|
|
72
|
+
props: {
|
|
73
|
+
label: {
|
|
74
|
+
type: String,
|
|
75
|
+
required: true,
|
|
76
|
+
},
|
|
77
|
+
type: {
|
|
78
|
+
type: String,
|
|
79
|
+
default: "primary",
|
|
80
|
+
},
|
|
81
|
+
items: {
|
|
82
|
+
type: Array,
|
|
83
|
+
required: true,
|
|
84
|
+
},
|
|
85
|
+
isLoading: {
|
|
86
|
+
type: Boolean,
|
|
87
|
+
default: false,
|
|
88
|
+
},
|
|
89
|
+
dropdownPositionClass: {
|
|
90
|
+
type: String,
|
|
91
|
+
},
|
|
92
|
+
isDisabled: {
|
|
93
|
+
type: Boolean,
|
|
94
|
+
default: false,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
data() {
|
|
98
|
+
return {
|
|
99
|
+
toggleDropdown: false,
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
computed: {
|
|
104
|
+
classes() {
|
|
105
|
+
return {
|
|
106
|
+
"text-gray-700 border-gray-300 rounded-md border-transparent hover:bg-gray-50 focus:ring-indigo-600":
|
|
107
|
+
this.type == "secondary",
|
|
108
|
+
"text-white rounded-md hover:bg-indigo-800 bg-indigo-700 border-transparent focus:ring-indigo-600":
|
|
109
|
+
this.type == "primary",
|
|
110
|
+
"text-white rounded-md hover:bg-red-800 bg-red-700 border-transparent focus:ring-red-600":
|
|
111
|
+
this.type == "danger",
|
|
112
|
+
"text-white rounded-md hover:bg-green-800 bg-green-700 border-transparent focus:ring-green-600":
|
|
113
|
+
this.type == "success",
|
|
114
|
+
"cursor-default rounded-md border-transparent pointer-events-none": this.isLoading,
|
|
115
|
+
//the type-white property contains the class rounded-r-md that would only round the button corner in the right direction
|
|
116
|
+
//while the other type property will round the button corners for all 4 direction
|
|
117
|
+
"text-gray-700 border-gray-300 rounded-r-md border-transparent hover:bg-gray-50 focus:ring-indigo-600 bg-white":
|
|
118
|
+
this.type == "white-rounded-right",
|
|
119
|
+
"text-gray-700 border bg-white border-gray-300 rounded-md hover:bg-gray-50 focus:ring-indigo-600":
|
|
120
|
+
this.type == "white",
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
methods: {
|
|
125
|
+
emitOption(item) {
|
|
126
|
+
this.$emit("buttonActions", item);
|
|
127
|
+
},
|
|
128
|
+
close() {
|
|
129
|
+
this.toggleDropdown = false;
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
</script>
|
|
134
|
+
|
|
135
|
+
<style></style>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CButtonSelectBorder from "./CButtonSelectBorder.vue";
|
|
2
|
-
|
|
3
|
-
export default CButtonSelectBorder;
|
|
1
|
+
import CButtonSelectBorder from "./CButtonSelectBorder.vue";
|
|
2
|
+
|
|
3
|
+
export default CButtonSelectBorder;
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<span class="relative inline-flex rounded-md shadow-sm">
|
|
4
|
-
<button
|
|
5
|
-
:type="type"
|
|
6
|
-
@click="handleButtonClick"
|
|
7
|
-
:class="[classes, isDisabled ? 'opacity-50' : '']"
|
|
8
|
-
class="relative inline-flex items-center rounded-l-md px-4 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
|
|
9
|
-
:disabled="isDisabled"
|
|
10
|
-
>
|
|
11
|
-
<c-icon v-if="isLoading" class="mr-2 h-4 w-4" name="loader"></c-icon>
|
|
12
|
-
{{ selectedValue ? selectedValue : label }}
|
|
13
|
-
</button>
|
|
14
|
-
<span class="relative -ml-px block">
|
|
15
|
-
<button
|
|
16
|
-
@click="toggleDropdown = !toggleDropdown"
|
|
17
|
-
@blur="close()"
|
|
18
|
-
:type="type"
|
|
19
|
-
:class="[classes, isDisabled ? 'opacity-50' : '']"
|
|
20
|
-
class="relative inline-flex items-center rounded-r-md px-2 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
|
|
21
|
-
:disabled="isDisabled"
|
|
22
|
-
>
|
|
23
|
-
<span class="sr-only">Open options</span>
|
|
24
|
-
<c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
|
|
25
|
-
</button>
|
|
26
|
-
<div
|
|
27
|
-
v-if="toggleDropdown"
|
|
28
|
-
:class="dropdownPositionClass"
|
|
29
|
-
class="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
|
|
30
|
-
>
|
|
31
|
-
<div
|
|
32
|
-
class="py-1"
|
|
33
|
-
role="menu"
|
|
34
|
-
aria-orientation="vertical"
|
|
35
|
-
aria-labelledby="option-menu"
|
|
36
|
-
>
|
|
37
|
-
<li
|
|
38
|
-
v-for="item in items"
|
|
39
|
-
v-bind:key="item.items"
|
|
40
|
-
@mousedown="selectOption($event, item.value)"
|
|
41
|
-
class="block cursor-pointer px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
|
|
42
|
-
role="menuitem"
|
|
43
|
-
>
|
|
44
|
-
{{ item.text }}
|
|
45
|
-
</li>
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
</span>
|
|
49
|
-
</span>
|
|
50
|
-
</div>
|
|
51
|
-
</template>
|
|
52
|
-
|
|
53
|
-
<script>
|
|
54
|
-
import CIcon from "../CIcon/CIcon.vue";
|
|
55
|
-
export default {
|
|
56
|
-
name: "CButtonWithDropdown",
|
|
57
|
-
components: { CIcon },
|
|
58
|
-
props: {
|
|
59
|
-
label: {
|
|
60
|
-
type: String,
|
|
61
|
-
required: true,
|
|
62
|
-
},
|
|
63
|
-
type: {
|
|
64
|
-
type: String,
|
|
65
|
-
default: "secondary",
|
|
66
|
-
},
|
|
67
|
-
value: {
|
|
68
|
-
type: String,
|
|
69
|
-
},
|
|
70
|
-
items: {
|
|
71
|
-
type: Array,
|
|
72
|
-
required: true,
|
|
73
|
-
},
|
|
74
|
-
dropdownPositionClass: {
|
|
75
|
-
type: String,
|
|
76
|
-
},
|
|
77
|
-
isLoading: {
|
|
78
|
-
type: Boolean,
|
|
79
|
-
default: false,
|
|
80
|
-
},
|
|
81
|
-
isDisabled: {
|
|
82
|
-
type: Boolean,
|
|
83
|
-
default: false,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
data() {
|
|
87
|
-
return {
|
|
88
|
-
toggleDropdown: false,
|
|
89
|
-
isSelected: false,
|
|
90
|
-
selectedValue: this.value,
|
|
91
|
-
};
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
computed: {
|
|
95
|
-
classes() {
|
|
96
|
-
return {
|
|
97
|
-
"border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
|
|
98
|
-
this.type == "primary",
|
|
99
|
-
"border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
|
|
100
|
-
this.type == "secondary",
|
|
101
|
-
"border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
|
|
102
|
-
this.type == "success",
|
|
103
|
-
"border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
|
|
104
|
-
this.type == "danger",
|
|
105
|
-
"border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
|
|
106
|
-
this.type == "light-green",
|
|
107
|
-
"border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
|
|
108
|
-
this.type == "light-red",
|
|
109
|
-
"cursor-default pointer-events-none": this.isLoading,
|
|
110
|
-
};
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
methods: {
|
|
114
|
-
selectOption(event, value) {
|
|
115
|
-
this.selectedValue = event.target.innerText;
|
|
116
|
-
this.$emit("onSelectOption", value);
|
|
117
|
-
this.toggleDropdown = false;
|
|
118
|
-
this.isSelected = true;
|
|
119
|
-
},
|
|
120
|
-
close() {
|
|
121
|
-
this.toggleDropdown = false;
|
|
122
|
-
},
|
|
123
|
-
handleButtonClick() {
|
|
124
|
-
this.$emit("action", this.selectedValue);
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
watch: {
|
|
128
|
-
value() {
|
|
129
|
-
this.selectedValue = this.value;
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
</script>
|
|
134
|
-
|
|
135
|
-
<style></style>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<span class="relative inline-flex rounded-md shadow-sm">
|
|
4
|
+
<button
|
|
5
|
+
:type="type"
|
|
6
|
+
@click="handleButtonClick"
|
|
7
|
+
:class="[classes, isDisabled ? 'opacity-50' : '']"
|
|
8
|
+
class="relative inline-flex items-center rounded-l-md px-4 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
|
|
9
|
+
:disabled="isDisabled"
|
|
10
|
+
>
|
|
11
|
+
<c-icon v-if="isLoading" class="mr-2 h-4 w-4" name="loader"></c-icon>
|
|
12
|
+
{{ selectedValue ? selectedValue : label }}
|
|
13
|
+
</button>
|
|
14
|
+
<span class="relative -ml-px block">
|
|
15
|
+
<button
|
|
16
|
+
@click="toggleDropdown = !toggleDropdown"
|
|
17
|
+
@blur="close()"
|
|
18
|
+
:type="type"
|
|
19
|
+
:class="[classes, isDisabled ? 'opacity-50' : '']"
|
|
20
|
+
class="relative inline-flex items-center rounded-r-md px-2 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
|
|
21
|
+
:disabled="isDisabled"
|
|
22
|
+
>
|
|
23
|
+
<span class="sr-only">Open options</span>
|
|
24
|
+
<c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
|
|
25
|
+
</button>
|
|
26
|
+
<div
|
|
27
|
+
v-if="toggleDropdown"
|
|
28
|
+
:class="dropdownPositionClass"
|
|
29
|
+
class="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
|
|
30
|
+
>
|
|
31
|
+
<div
|
|
32
|
+
class="py-1"
|
|
33
|
+
role="menu"
|
|
34
|
+
aria-orientation="vertical"
|
|
35
|
+
aria-labelledby="option-menu"
|
|
36
|
+
>
|
|
37
|
+
<li
|
|
38
|
+
v-for="item in items"
|
|
39
|
+
v-bind:key="item.items"
|
|
40
|
+
@mousedown="selectOption($event, item.value)"
|
|
41
|
+
class="block cursor-pointer px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
|
|
42
|
+
role="menuitem"
|
|
43
|
+
>
|
|
44
|
+
{{ item.text }}
|
|
45
|
+
</li>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</span>
|
|
49
|
+
</span>
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<script>
|
|
54
|
+
import CIcon from "../CIcon/CIcon.vue";
|
|
55
|
+
export default {
|
|
56
|
+
name: "CButtonWithDropdown",
|
|
57
|
+
components: { CIcon },
|
|
58
|
+
props: {
|
|
59
|
+
label: {
|
|
60
|
+
type: String,
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
type: {
|
|
64
|
+
type: String,
|
|
65
|
+
default: "secondary",
|
|
66
|
+
},
|
|
67
|
+
value: {
|
|
68
|
+
type: String,
|
|
69
|
+
},
|
|
70
|
+
items: {
|
|
71
|
+
type: Array,
|
|
72
|
+
required: true,
|
|
73
|
+
},
|
|
74
|
+
dropdownPositionClass: {
|
|
75
|
+
type: String,
|
|
76
|
+
},
|
|
77
|
+
isLoading: {
|
|
78
|
+
type: Boolean,
|
|
79
|
+
default: false,
|
|
80
|
+
},
|
|
81
|
+
isDisabled: {
|
|
82
|
+
type: Boolean,
|
|
83
|
+
default: false,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
data() {
|
|
87
|
+
return {
|
|
88
|
+
toggleDropdown: false,
|
|
89
|
+
isSelected: false,
|
|
90
|
+
selectedValue: this.value,
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
computed: {
|
|
95
|
+
classes() {
|
|
96
|
+
return {
|
|
97
|
+
"border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
|
|
98
|
+
this.type == "primary",
|
|
99
|
+
"border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
|
|
100
|
+
this.type == "secondary",
|
|
101
|
+
"border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
|
|
102
|
+
this.type == "success",
|
|
103
|
+
"border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
|
|
104
|
+
this.type == "danger",
|
|
105
|
+
"border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
|
|
106
|
+
this.type == "light-green",
|
|
107
|
+
"border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
|
|
108
|
+
this.type == "light-red",
|
|
109
|
+
"cursor-default pointer-events-none": this.isLoading,
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
methods: {
|
|
114
|
+
selectOption(event, value) {
|
|
115
|
+
this.selectedValue = event.target.innerText;
|
|
116
|
+
this.$emit("onSelectOption", value);
|
|
117
|
+
this.toggleDropdown = false;
|
|
118
|
+
this.isSelected = true;
|
|
119
|
+
},
|
|
120
|
+
close() {
|
|
121
|
+
this.toggleDropdown = false;
|
|
122
|
+
},
|
|
123
|
+
handleButtonClick() {
|
|
124
|
+
this.$emit("action", this.selectedValue);
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
watch: {
|
|
128
|
+
value() {
|
|
129
|
+
this.selectedValue = this.value;
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
</script>
|
|
134
|
+
|
|
135
|
+
<style></style>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CButtonWithDropdown from './CButtonWithDropdown.vue'
|
|
2
|
-
|
|
1
|
+
import CButtonWithDropdown from './CButtonWithDropdown.vue'
|
|
2
|
+
|
|
3
3
|
export default CButtonWithDropdown
|