classcard-ui 0.2.510 → 0.2.511
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 +75 -73
- package/dist/classcard-ui.common.js.map +1 -1
- package/dist/classcard-ui.umd.js +75 -73
- 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 +81 -81
- 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 +104 -104
- 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 +89 -89
- 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 +150 -150
- package/src/components/CButton/index.js +2 -2
- package/src/components/CButtonGroup/CButtonGroup.vue +116 -116
- package/src/components/CButtonGroup/index.js +2 -2
- package/src/components/CButtonIcon/CButtonIcon.vue +91 -91
- 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 +103 -103
- package/src/components/CButtonSelect/index.js +2 -2
- package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +168 -168
- package/src/components/CButtonWithDropdown/index.js +2 -2
- package/src/components/CCalendar/CCalendar.vue +312 -312
- 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 +70 -70
- package/src/components/CCheckbox/index.js +2 -2
- package/src/components/CCollapsibleSection/CCollapsibleSection.vue +99 -99
- package/src/components/CCollapsibleSection/index.js +2 -2
- package/src/components/CColorDots/CColorDots.vue +35 -35
- package/src/components/CColorDots/index.js +3 -3
- package/src/components/CConfirmActionModal/CConfirmActionModal.vue +120 -120
- package/src/components/CConfirmActionModal/index.js +3 -3
- package/src/components/CDatepicker/CDatepicker.vue +134 -134
- 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 +91 -91
- package/src/components/CEditor/index.js +2 -2
- package/src/components/CFormSectionHeading/CFormSectionHeading.vue +52 -52
- package/src/components/CFormSectionHeading/index.js +2 -2
- package/src/components/CGroupedSelect/CGroupedSelect.vue +217 -217
- package/src/components/CGroupedSelect/index.js +3 -3
- package/src/components/CIcon/CIcon.vue +72 -72
- package/src/components/CIcon/index.js +2 -2
- package/src/components/CIconDropdown/CIconDropdown.vue +94 -94
- package/src/components/CIconDropdown/index.js +2 -2
- package/src/components/CInput/CInput.vue +115 -115
- package/src/components/CInput/index.js +2 -2
- package/src/components/CInputAddon/CInputAddon.vue +199 -199
- package/src/components/CInputAddon/index.js +2 -2
- package/src/components/CInputEmail/CInputEmail.vue +84 -84
- package/src/components/CInputEmail/index.js +2 -2
- package/src/components/CModalHeading/CModalHeading.vue +22 -22
- package/src/components/CModalHeading/index.js +2 -2
- package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +39 -39
- package/src/components/CModuleHelpLinks/index.js +3 -3
- package/src/components/CMultiselect/CMultiselect.vue +313 -313
- 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 +202 -202
- package/src/components/CPagination/index.js +2 -2
- package/src/components/CPhoneNumber/CPhoneNumber.vue +62 -62
- package/src/components/CPhoneNumber/index.js +2 -2
- package/src/components/CRadio/CRadio.vue +70 -70
- 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 +309 -313
- 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 +87 -87
- package/src/components/CStackedList/index.js +2 -2
- package/src/components/CStats/CStats.vue +88 -88
- package/src/components/CStats/index.js +2 -2
- package/src/components/CSwitch/CSwitch.vue +132 -132
- package/src/components/CSwitch/index.js +2 -2
- package/src/components/CTable/CTable.vue +501 -501
- package/src/components/CTable/index.js +2 -2
- package/src/components/CTabs/CTabs.vue +107 -107
- package/src/components/CTabs/index.js +2 -2
- package/src/components/CTag/CTag.vue +36 -36
- package/src/components/CTag/index.js +2 -2
- package/src/components/CTextarea/CTextarea.vue +85 -85
- 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 +196 -196
- package/src/components/CUpload/index.js +2 -2
- package/src/components/index.js +48 -48
- package/src/icons.js +254 -254
- 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 +46 -46
- 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 +32 -32
- 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/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 +69 -69
- package/src/stories/CIcon.stories.js +26 -26
- package/src/stories/CIconDropdown.stories.js +39 -39
- 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/CModalHeading.stories.js +25 -25
- package/src/stories/CModuleHelpLinks.stories.js +25 -25
- package/src/stories/CMultiselect.stories.js +97 -97
- 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/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 +50 -50
- 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/CTable.stories.js +77 -77
- package/src/stories/CTabs.stories.js +29 -29
- package/src/stories/CTag.stories.js +23 -23
- 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,199 +1,199 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div class="flex justify-between">
|
|
4
|
-
<div class="flex items-center">
|
|
5
|
-
<!-- label of input field -->
|
|
6
|
-
<label class="block text-sm font-medium text-gray-900">
|
|
7
|
-
{{ label }}
|
|
8
|
-
</label>
|
|
9
|
-
<!-- asterisk sign to render if field is required -->
|
|
10
|
-
<p v-if="isRequired" class="text-red-600 ml-1">*</p>
|
|
11
|
-
</div>
|
|
12
|
-
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
13
|
-
</div>
|
|
14
|
-
<div v-if="!inlineAddon && addonType == 'leading'" class="relative mt-1 flex rounded-md">
|
|
15
|
-
<span
|
|
16
|
-
:class="disabled ? 'opacity-50' : ''"
|
|
17
|
-
v-if="addon"
|
|
18
|
-
class="inline-flex items-center px-3 rounded-l-md border border-r-0 border-gray-300 bg-gray-50 text-gray-500 sm:text-sm"
|
|
19
|
-
>
|
|
20
|
-
{{ addon }}
|
|
21
|
-
</span>
|
|
22
|
-
<input
|
|
23
|
-
:type="inputType"
|
|
24
|
-
:value="inputValue"
|
|
25
|
-
@input="$emit('input', $event.target.value)"
|
|
26
|
-
@blur="$emit('blur', $event.target.value)"
|
|
27
|
-
:class="{ ...errorClasses, 'rounded-l-md': !addon }"
|
|
28
|
-
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-r-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
29
|
-
:placeholder="placeholder"
|
|
30
|
-
:disabled="disabled"
|
|
31
|
-
/>
|
|
32
|
-
<div
|
|
33
|
-
v-if="!isValidate"
|
|
34
|
-
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-red-600"
|
|
35
|
-
>
|
|
36
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
<div v-if="!inlineAddon && addonType == 'trailing'" class="relative mt-1 flex rounded-md">
|
|
40
|
-
<input
|
|
41
|
-
:type="inputType"
|
|
42
|
-
:value="inputValue"
|
|
43
|
-
@input="$emit('input', $event.target.value)"
|
|
44
|
-
@blur="$emit('blur', $event.target.value)"
|
|
45
|
-
:class="errorClasses"
|
|
46
|
-
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-l-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
47
|
-
:placeholder="placeholder"
|
|
48
|
-
:disabled="disabled"
|
|
49
|
-
/>
|
|
50
|
-
<div
|
|
51
|
-
v-if="!isValidate"
|
|
52
|
-
class="absolute inset-y-0 right-14 pr-3 flex items-center pointer-events-none text-red-600"
|
|
53
|
-
>
|
|
54
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
55
|
-
</div>
|
|
56
|
-
<span
|
|
57
|
-
:class="disabled ? 'opacity-50' : ''"
|
|
58
|
-
class="inline-flex items-center px-4 py-2 rounded-r-md border border-l-0 border-gray-300 bg-gray-50 text-gray-500 sm:text-sm"
|
|
59
|
-
>
|
|
60
|
-
{{ addon }}
|
|
61
|
-
</span>
|
|
62
|
-
</div>
|
|
63
|
-
<div v-if="inlineAddon && addonType == 'trailing'" class="relative mt-1 flex rounded-md">
|
|
64
|
-
<input
|
|
65
|
-
:type="inputType"
|
|
66
|
-
:value="inputValue"
|
|
67
|
-
@input="$emit('input', $event.target.value)"
|
|
68
|
-
@blur="$emit('blur', $event.target.value)"
|
|
69
|
-
:class="errorClasses"
|
|
70
|
-
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
71
|
-
:placeholder="placeholder"
|
|
72
|
-
:disabled="disabled"
|
|
73
|
-
/>
|
|
74
|
-
<div class="absolute inset-y-0 right-3 flex items-center pointer-events-none">
|
|
75
|
-
<div
|
|
76
|
-
v-if="!isValidate"
|
|
77
|
-
class="right-0 pr-2 flex items-center pointer-events-none text-red-600"
|
|
78
|
-
>
|
|
79
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
80
|
-
</div>
|
|
81
|
-
<span class="text-gray-500 sm:text-sm" :class="disabled ? 'opacity-50' : ''">
|
|
82
|
-
{{ addon }}
|
|
83
|
-
</span>
|
|
84
|
-
</div>
|
|
85
|
-
</div>
|
|
86
|
-
<div v-if="inlineAddon && addonType == 'leading'" class="relative mt-1 flex rounded-md">
|
|
87
|
-
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
|
88
|
-
<span class="text-gray-500 sm:text-sm">{{ addon }}</span>
|
|
89
|
-
</div>
|
|
90
|
-
<input
|
|
91
|
-
:type="inputType"
|
|
92
|
-
:value="inputValue"
|
|
93
|
-
@input="$emit('input', $event.target.value)"
|
|
94
|
-
@blur="$emit('blur', $event.target.value)"
|
|
95
|
-
:class="errorClasses"
|
|
96
|
-
:style="`padding-left:${leftPaddingStyle}`"
|
|
97
|
-
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 block w-full rounded-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
98
|
-
:placeholder="placeholder"
|
|
99
|
-
:disabled="disabled"
|
|
100
|
-
/>
|
|
101
|
-
<div
|
|
102
|
-
v-if="!isValidate"
|
|
103
|
-
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-red-600"
|
|
104
|
-
>
|
|
105
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
<p v-if="!isValidate" class="mt-2 text-sm text-red-600 text-left">
|
|
109
|
-
{{ errorMessage }}
|
|
110
|
-
</p>
|
|
111
|
-
<p v-if="helpText && isValidate == true" :class="`mt-2 text-sm ${helpTextColorStyles}`">
|
|
112
|
-
{{ helpText }}
|
|
113
|
-
</p>
|
|
114
|
-
</div>
|
|
115
|
-
</template>
|
|
116
|
-
|
|
117
|
-
<script>
|
|
118
|
-
import CIcon from "../CIcon/CIcon.vue";
|
|
119
|
-
export default {
|
|
120
|
-
name: "CInputAddon",
|
|
121
|
-
components: { CIcon },
|
|
122
|
-
props: {
|
|
123
|
-
label: {
|
|
124
|
-
type: String,
|
|
125
|
-
},
|
|
126
|
-
placeholder: {
|
|
127
|
-
type: String,
|
|
128
|
-
},
|
|
129
|
-
value: [String, Number],
|
|
130
|
-
hint: { type: String },
|
|
131
|
-
helpText: {
|
|
132
|
-
type: String,
|
|
133
|
-
},
|
|
134
|
-
addon: { type: String },
|
|
135
|
-
helpTextColor: {
|
|
136
|
-
type: String,
|
|
137
|
-
default: "gray",
|
|
138
|
-
},
|
|
139
|
-
inlineAddon: { type: Boolean },
|
|
140
|
-
addonType: {
|
|
141
|
-
type: String,
|
|
142
|
-
},
|
|
143
|
-
isValidate: { type: Boolean },
|
|
144
|
-
errorMessage: {
|
|
145
|
-
type: String,
|
|
146
|
-
},
|
|
147
|
-
disabled: {
|
|
148
|
-
type: Boolean,
|
|
149
|
-
},
|
|
150
|
-
// whether the input field is mandatory or not
|
|
151
|
-
isRequired: {
|
|
152
|
-
type: Boolean,
|
|
153
|
-
},
|
|
154
|
-
inputType: {
|
|
155
|
-
type: String,
|
|
156
|
-
default: "text",
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
computed: {
|
|
160
|
-
errorClasses() {
|
|
161
|
-
return {
|
|
162
|
-
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
163
|
-
this.isValidate == false,
|
|
164
|
-
"border-gray-300": this.isValidate == true,
|
|
165
|
-
};
|
|
166
|
-
},
|
|
167
|
-
leftPaddingStyle() {
|
|
168
|
-
var leftPadding;
|
|
169
|
-
if (this.addon.length <= 2) {
|
|
170
|
-
leftPadding = "2rem";
|
|
171
|
-
} else if (this.addon.length >= 3) {
|
|
172
|
-
leftPadding = "3.5rem";
|
|
173
|
-
}
|
|
174
|
-
return leftPadding;
|
|
175
|
-
},
|
|
176
|
-
helpTextColorStyles() {
|
|
177
|
-
switch (this.helpTextColor) {
|
|
178
|
-
case "green":
|
|
179
|
-
return "text-green-500";
|
|
180
|
-
case "red":
|
|
181
|
-
return "text-red-500";
|
|
182
|
-
default:
|
|
183
|
-
return "text-gray-500";
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
data() {
|
|
188
|
-
return {
|
|
189
|
-
inputValue: this.value,
|
|
190
|
-
};
|
|
191
|
-
},
|
|
192
|
-
methods: {},
|
|
193
|
-
watch: {
|
|
194
|
-
value() {
|
|
195
|
-
this.inputValue = this.value;
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="flex justify-between">
|
|
4
|
+
<div class="flex items-center">
|
|
5
|
+
<!-- label of input field -->
|
|
6
|
+
<label class="block text-sm font-medium text-gray-900">
|
|
7
|
+
{{ label }}
|
|
8
|
+
</label>
|
|
9
|
+
<!-- asterisk sign to render if field is required -->
|
|
10
|
+
<p v-if="isRequired" class="text-red-600 ml-1">*</p>
|
|
11
|
+
</div>
|
|
12
|
+
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div v-if="!inlineAddon && addonType == 'leading'" class="relative mt-1 flex rounded-md">
|
|
15
|
+
<span
|
|
16
|
+
:class="disabled ? 'opacity-50' : ''"
|
|
17
|
+
v-if="addon"
|
|
18
|
+
class="inline-flex items-center px-3 rounded-l-md border border-r-0 border-gray-300 bg-gray-50 text-gray-500 sm:text-sm"
|
|
19
|
+
>
|
|
20
|
+
{{ addon }}
|
|
21
|
+
</span>
|
|
22
|
+
<input
|
|
23
|
+
:type="inputType"
|
|
24
|
+
:value="inputValue"
|
|
25
|
+
@input="$emit('input', $event.target.value)"
|
|
26
|
+
@blur="$emit('blur', $event.target.value)"
|
|
27
|
+
:class="{ ...errorClasses, 'rounded-l-md': !addon }"
|
|
28
|
+
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-r-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
29
|
+
:placeholder="placeholder"
|
|
30
|
+
:disabled="disabled"
|
|
31
|
+
/>
|
|
32
|
+
<div
|
|
33
|
+
v-if="!isValidate"
|
|
34
|
+
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-red-600"
|
|
35
|
+
>
|
|
36
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div v-if="!inlineAddon && addonType == 'trailing'" class="relative mt-1 flex rounded-md">
|
|
40
|
+
<input
|
|
41
|
+
:type="inputType"
|
|
42
|
+
:value="inputValue"
|
|
43
|
+
@input="$emit('input', $event.target.value)"
|
|
44
|
+
@blur="$emit('blur', $event.target.value)"
|
|
45
|
+
:class="errorClasses"
|
|
46
|
+
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-l-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
47
|
+
:placeholder="placeholder"
|
|
48
|
+
:disabled="disabled"
|
|
49
|
+
/>
|
|
50
|
+
<div
|
|
51
|
+
v-if="!isValidate"
|
|
52
|
+
class="absolute inset-y-0 right-14 pr-3 flex items-center pointer-events-none text-red-600"
|
|
53
|
+
>
|
|
54
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
55
|
+
</div>
|
|
56
|
+
<span
|
|
57
|
+
:class="disabled ? 'opacity-50' : ''"
|
|
58
|
+
class="inline-flex items-center px-4 py-2 rounded-r-md border border-l-0 border-gray-300 bg-gray-50 text-gray-500 sm:text-sm"
|
|
59
|
+
>
|
|
60
|
+
{{ addon }}
|
|
61
|
+
</span>
|
|
62
|
+
</div>
|
|
63
|
+
<div v-if="inlineAddon && addonType == 'trailing'" class="relative mt-1 flex rounded-md">
|
|
64
|
+
<input
|
|
65
|
+
:type="inputType"
|
|
66
|
+
:value="inputValue"
|
|
67
|
+
@input="$emit('input', $event.target.value)"
|
|
68
|
+
@blur="$emit('blur', $event.target.value)"
|
|
69
|
+
:class="errorClasses"
|
|
70
|
+
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full px-3 py-2 rounded-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
71
|
+
:placeholder="placeholder"
|
|
72
|
+
:disabled="disabled"
|
|
73
|
+
/>
|
|
74
|
+
<div class="absolute inset-y-0 right-3 flex items-center pointer-events-none">
|
|
75
|
+
<div
|
|
76
|
+
v-if="!isValidate"
|
|
77
|
+
class="right-0 pr-2 flex items-center pointer-events-none text-red-600"
|
|
78
|
+
>
|
|
79
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
80
|
+
</div>
|
|
81
|
+
<span class="text-gray-500 sm:text-sm" :class="disabled ? 'opacity-50' : ''">
|
|
82
|
+
{{ addon }}
|
|
83
|
+
</span>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
<div v-if="inlineAddon && addonType == 'leading'" class="relative mt-1 flex rounded-md">
|
|
87
|
+
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
|
88
|
+
<span class="text-gray-500 sm:text-sm">{{ addon }}</span>
|
|
89
|
+
</div>
|
|
90
|
+
<input
|
|
91
|
+
:type="inputType"
|
|
92
|
+
:value="inputValue"
|
|
93
|
+
@input="$emit('input', $event.target.value)"
|
|
94
|
+
@blur="$emit('blur', $event.target.value)"
|
|
95
|
+
:class="errorClasses"
|
|
96
|
+
:style="`padding-left:${leftPaddingStyle}`"
|
|
97
|
+
class="shadow-sm focus:ring-indigo-500 focus:border-indigo-500 block w-full rounded-md sm:text-sm disabled:opacity-50 text-gray-900"
|
|
98
|
+
:placeholder="placeholder"
|
|
99
|
+
:disabled="disabled"
|
|
100
|
+
/>
|
|
101
|
+
<div
|
|
102
|
+
v-if="!isValidate"
|
|
103
|
+
class="absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-red-600"
|
|
104
|
+
>
|
|
105
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
<p v-if="!isValidate" class="mt-2 text-sm text-red-600 text-left">
|
|
109
|
+
{{ errorMessage }}
|
|
110
|
+
</p>
|
|
111
|
+
<p v-if="helpText && isValidate == true" :class="`mt-2 text-sm ${helpTextColorStyles}`">
|
|
112
|
+
{{ helpText }}
|
|
113
|
+
</p>
|
|
114
|
+
</div>
|
|
115
|
+
</template>
|
|
116
|
+
|
|
117
|
+
<script>
|
|
118
|
+
import CIcon from "../CIcon/CIcon.vue";
|
|
119
|
+
export default {
|
|
120
|
+
name: "CInputAddon",
|
|
121
|
+
components: { CIcon },
|
|
122
|
+
props: {
|
|
123
|
+
label: {
|
|
124
|
+
type: String,
|
|
125
|
+
},
|
|
126
|
+
placeholder: {
|
|
127
|
+
type: String,
|
|
128
|
+
},
|
|
129
|
+
value: [String, Number],
|
|
130
|
+
hint: { type: String },
|
|
131
|
+
helpText: {
|
|
132
|
+
type: String,
|
|
133
|
+
},
|
|
134
|
+
addon: { type: String },
|
|
135
|
+
helpTextColor: {
|
|
136
|
+
type: String,
|
|
137
|
+
default: "gray",
|
|
138
|
+
},
|
|
139
|
+
inlineAddon: { type: Boolean },
|
|
140
|
+
addonType: {
|
|
141
|
+
type: String,
|
|
142
|
+
},
|
|
143
|
+
isValidate: { type: Boolean },
|
|
144
|
+
errorMessage: {
|
|
145
|
+
type: String,
|
|
146
|
+
},
|
|
147
|
+
disabled: {
|
|
148
|
+
type: Boolean,
|
|
149
|
+
},
|
|
150
|
+
// whether the input field is mandatory or not
|
|
151
|
+
isRequired: {
|
|
152
|
+
type: Boolean,
|
|
153
|
+
},
|
|
154
|
+
inputType: {
|
|
155
|
+
type: String,
|
|
156
|
+
default: "text",
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
computed: {
|
|
160
|
+
errorClasses() {
|
|
161
|
+
return {
|
|
162
|
+
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
163
|
+
this.isValidate == false,
|
|
164
|
+
"border-gray-300": this.isValidate == true,
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
leftPaddingStyle() {
|
|
168
|
+
var leftPadding;
|
|
169
|
+
if (this.addon.length <= 2) {
|
|
170
|
+
leftPadding = "2rem";
|
|
171
|
+
} else if (this.addon.length >= 3) {
|
|
172
|
+
leftPadding = "3.5rem";
|
|
173
|
+
}
|
|
174
|
+
return leftPadding;
|
|
175
|
+
},
|
|
176
|
+
helpTextColorStyles() {
|
|
177
|
+
switch (this.helpTextColor) {
|
|
178
|
+
case "green":
|
|
179
|
+
return "text-green-500";
|
|
180
|
+
case "red":
|
|
181
|
+
return "text-red-500";
|
|
182
|
+
default:
|
|
183
|
+
return "text-gray-500";
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
data() {
|
|
188
|
+
return {
|
|
189
|
+
inputValue: this.value,
|
|
190
|
+
};
|
|
191
|
+
},
|
|
192
|
+
methods: {},
|
|
193
|
+
watch: {
|
|
194
|
+
value() {
|
|
195
|
+
this.inputValue = this.value;
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
</script>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CInputAddon from './CInputAddon.vue'
|
|
2
|
-
|
|
1
|
+
import CInputAddon from './CInputAddon.vue'
|
|
2
|
+
|
|
3
3
|
export default CInputAddon
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div class="flex justify-between">
|
|
4
|
-
<label class="block text-sm font-medium text-gray-900">
|
|
5
|
-
{{ label }}
|
|
6
|
-
</label>
|
|
7
|
-
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="relative mt-1 rounded-md">
|
|
10
|
-
<input
|
|
11
|
-
type="text"
|
|
12
|
-
:class="errorClasses"
|
|
13
|
-
class="block w-full flex-1 rounded-md px-3 py-2 text-gray-900 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
|
14
|
-
:placeholder="placeholder"
|
|
15
|
-
:value="email"
|
|
16
|
-
@blur="checkValidation"
|
|
17
|
-
@input="$emit('input', $event.target.value)"
|
|
18
|
-
/>
|
|
19
|
-
<div
|
|
20
|
-
v-if="isValidate"
|
|
21
|
-
class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
|
|
22
|
-
>
|
|
23
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
<p v-if="isValidate" class="mt-2 text-sm text-red-600">Please enter valid email address</p>
|
|
27
|
-
<p v-if="helpText && isValidate == false" class="mt-2 text-sm text-gray-500">
|
|
28
|
-
{{ helpText }}
|
|
29
|
-
</p>
|
|
30
|
-
</div>
|
|
31
|
-
</template>
|
|
32
|
-
|
|
33
|
-
<script>
|
|
34
|
-
import CIcon from "../CIcon/CIcon.vue";
|
|
35
|
-
export default {
|
|
36
|
-
name: "CInputEmail",
|
|
37
|
-
components: { CIcon },
|
|
38
|
-
props: {
|
|
39
|
-
label: {
|
|
40
|
-
type: String,
|
|
41
|
-
required: true,
|
|
42
|
-
},
|
|
43
|
-
placeholder: {
|
|
44
|
-
type: String,
|
|
45
|
-
},
|
|
46
|
-
hint: { type: String },
|
|
47
|
-
helpText: {
|
|
48
|
-
type: String,
|
|
49
|
-
},
|
|
50
|
-
// v-model of the field
|
|
51
|
-
value: {
|
|
52
|
-
type: String,
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
data() {
|
|
56
|
-
return {
|
|
57
|
-
email: this.value,
|
|
58
|
-
isValidate: false,
|
|
59
|
-
};
|
|
60
|
-
},
|
|
61
|
-
computed: {
|
|
62
|
-
errorClasses() {
|
|
63
|
-
return {
|
|
64
|
-
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
65
|
-
this.isValidate == true,
|
|
66
|
-
"border-gray-300": this.isValidate == false,
|
|
67
|
-
};
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
methods: {
|
|
71
|
-
checkValidation() {
|
|
72
|
-
this.isValidate =
|
|
73
|
-
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(this.email) || this.email == ""
|
|
74
|
-
? false
|
|
75
|
-
: true;
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
watch: {
|
|
79
|
-
value() {
|
|
80
|
-
this.email = this.value;
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div class="flex justify-between">
|
|
4
|
+
<label class="block text-sm font-medium text-gray-900">
|
|
5
|
+
{{ label }}
|
|
6
|
+
</label>
|
|
7
|
+
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="relative mt-1 rounded-md">
|
|
10
|
+
<input
|
|
11
|
+
type="text"
|
|
12
|
+
:class="errorClasses"
|
|
13
|
+
class="block w-full flex-1 rounded-md px-3 py-2 text-gray-900 focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm"
|
|
14
|
+
:placeholder="placeholder"
|
|
15
|
+
:value="email"
|
|
16
|
+
@blur="checkValidation"
|
|
17
|
+
@input="$emit('input', $event.target.value)"
|
|
18
|
+
/>
|
|
19
|
+
<div
|
|
20
|
+
v-if="isValidate"
|
|
21
|
+
class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
|
|
22
|
+
>
|
|
23
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<p v-if="isValidate" class="mt-2 text-sm text-red-600">Please enter valid email address</p>
|
|
27
|
+
<p v-if="helpText && isValidate == false" class="mt-2 text-sm text-gray-500">
|
|
28
|
+
{{ helpText }}
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<script>
|
|
34
|
+
import CIcon from "../CIcon/CIcon.vue";
|
|
35
|
+
export default {
|
|
36
|
+
name: "CInputEmail",
|
|
37
|
+
components: { CIcon },
|
|
38
|
+
props: {
|
|
39
|
+
label: {
|
|
40
|
+
type: String,
|
|
41
|
+
required: true,
|
|
42
|
+
},
|
|
43
|
+
placeholder: {
|
|
44
|
+
type: String,
|
|
45
|
+
},
|
|
46
|
+
hint: { type: String },
|
|
47
|
+
helpText: {
|
|
48
|
+
type: String,
|
|
49
|
+
},
|
|
50
|
+
// v-model of the field
|
|
51
|
+
value: {
|
|
52
|
+
type: String,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
data() {
|
|
56
|
+
return {
|
|
57
|
+
email: this.value,
|
|
58
|
+
isValidate: false,
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
computed: {
|
|
62
|
+
errorClasses() {
|
|
63
|
+
return {
|
|
64
|
+
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
65
|
+
this.isValidate == true,
|
|
66
|
+
"border-gray-300": this.isValidate == false,
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
methods: {
|
|
71
|
+
checkValidation() {
|
|
72
|
+
this.isValidate =
|
|
73
|
+
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(this.email) || this.email == ""
|
|
74
|
+
? false
|
|
75
|
+
: true;
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
watch: {
|
|
79
|
+
value() {
|
|
80
|
+
this.email = this.value;
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
</script>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CInputEmail from './CInputEmail.vue'
|
|
2
|
-
|
|
1
|
+
import CInputEmail from './CInputEmail.vue'
|
|
2
|
+
|
|
3
3
|
export default CInputEmail
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div :class="{ 'border-b-2': divider }" class="pb-2 border-gray-200">
|
|
4
|
-
<h3 class="text-lg leading-6 font-medium text-gray-700">
|
|
5
|
-
{{ title }}
|
|
6
|
-
</h3>
|
|
7
|
-
<p v-if="description" class="max-w-4xl text-sm text-gray-500">
|
|
8
|
-
{{ description }}
|
|
9
|
-
</p>
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
</template>
|
|
13
|
-
<script>
|
|
14
|
-
export default {
|
|
15
|
-
name: "CModalHeading",
|
|
16
|
-
props: {
|
|
17
|
-
title: { type: String, required: true },
|
|
18
|
-
description: { type: String },
|
|
19
|
-
divider: { type: Boolean },
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div :class="{ 'border-b-2': divider }" class="pb-2 border-gray-200">
|
|
4
|
+
<h3 class="text-lg leading-6 font-medium text-gray-700">
|
|
5
|
+
{{ title }}
|
|
6
|
+
</h3>
|
|
7
|
+
<p v-if="description" class="max-w-4xl text-sm text-gray-500">
|
|
8
|
+
{{ description }}
|
|
9
|
+
</p>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
</template>
|
|
13
|
+
<script>
|
|
14
|
+
export default {
|
|
15
|
+
name: "CModalHeading",
|
|
16
|
+
props: {
|
|
17
|
+
title: { type: String, required: true },
|
|
18
|
+
description: { type: String },
|
|
19
|
+
divider: { type: Boolean },
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
</script>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CModalHeading from './CModalHeading.vue'
|
|
2
|
-
|
|
1
|
+
import CModalHeading from './CModalHeading.vue'
|
|
2
|
+
|
|
3
3
|
export default CModalHeading
|