classcard-ui 0.2.1506 → 0.2.1508-beta.0
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 +176 -138
- package/dist/classcard-ui.common.js.map +1 -1
- package/dist/classcard-ui.css +1 -1
- package/dist/classcard-ui.umd.js +176 -138
- package/dist/classcard-ui.umd.js.map +1 -1
- package/dist/classcard-ui.umd.min.js +2 -2
- package/dist/classcard-ui.umd.min.js.map +1 -1
- package/package.json +84 -84
- package/src/App.vue +16 -16
- package/src/colorConfig.js +52 -52
- package/src/components/CAlertModal/CAlertModal.vue +181 -181
- package/src/components/CAlertModal/index.js +3 -3
- package/src/components/CAlerts/CAlerts.vue +114 -114
- package/src/components/CAlerts/index.js +2 -2
- package/src/components/CAnchorTabs/CAnchorTabs.vue +100 -100
- package/src/components/CAnchorTabs/index.js +2 -2
- package/src/components/CAnchorTag/CAnchorTag.vue +84 -84
- package/src/components/CAnchorTag/index.js +2 -2
- package/src/components/CAvatar/CAvatar.vue +231 -231
- package/src/components/CAvatar/index.js +2 -2
- package/src/components/CAvatarGroup/CAvatarGroup.vue +213 -213
- 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 +239 -239
- package/src/components/CButton/index.js +2 -2
- package/src/components/CButtonGroup/CButtonGroup.vue +155 -155
- package/src/components/CButtonGroup/index.js +2 -2
- package/src/components/CButtonIcon/CButtonIcon.vue +166 -166
- package/src/components/CButtonIcon/index.js +2 -2
- package/src/components/CButtonLink/CButtonLink.vue +43 -43
- package/src/components/CButtonLink/index.js +2 -2
- package/src/components/CButtonSelect/CButtonSelect.vue +186 -186
- package/src/components/CButtonSelect/index.js +2 -2
- package/src/components/CButtonSelectBorder/CButtonSelectBorder.vue +265 -265
- package/src/components/CButtonSelectBorder/index.js +3 -3
- package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +208 -208
- package/src/components/CButtonWithDropdown/index.js +2 -2
- package/src/components/CCalendar/CCalendar.vue +443 -443
- package/src/components/CCalendar/index.js +3 -3
- package/src/components/CCard/CCard.vue +53 -53
- package/src/components/CCard/index.js +2 -2
- package/src/components/CCheckbox/CCheckbox.vue +200 -200
- package/src/components/CCheckbox/index.js +2 -2
- package/src/components/CCircularButton/CCircularButton.vue +57 -57
- package/src/components/CCircularButton/index.js +2 -2
- package/src/components/CCollapsibleSection/CCollapsibleSection.vue +121 -121
- package/src/components/CCollapsibleSection/index.js +2 -2
- package/src/components/CColorDots/CColorDots.vue +52 -52
- package/src/components/CColorDots/index.js +3 -3
- package/src/components/CConfirmActionModal/CConfirmActionModal.vue +290 -290
- package/src/components/CConfirmActionModal/index.js +3 -3
- package/src/components/CDatepicker/CDatepicker.vue +235 -235
- 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 +137 -137
- package/src/components/CEditor/index.js +6 -6
- package/src/components/CEditor/quill-font-setup.js +133 -133
- package/src/components/CFormSectionHeading/CFormSectionHeading.vue +76 -76
- package/src/components/CFormSectionHeading/index.js +2 -2
- package/src/components/CGroupedFilterDropdown/CGroupedFilterDropdown.vue +331 -331
- package/src/components/CGroupedFilterDropdown/index.js +2 -2
- package/src/components/CGroupedSelect/CGroupedSelect.vue +393 -393
- package/src/components/CGroupedSelect/index.js +3 -3
- package/src/components/CIcon/CIcon.vue +112 -112
- package/src/components/CIcon/index.js +2 -2
- package/src/components/CIconDropdown/CIconDropdown.vue +206 -206
- package/src/components/CIconDropdown/index.js +2 -2
- package/src/components/CIconSelect/CIconSelect.vue +182 -182
- package/src/components/CIconSelect/index.js +3 -3
- package/src/components/CInput/CInput.vue +227 -227
- package/src/components/CInput/index.js +2 -2
- package/src/components/CInputAddon/CInputAddon.vue +297 -297
- package/src/components/CInputAddon/index.js +2 -2
- package/src/components/CInputEmail/CInputEmail.vue +107 -107
- package/src/components/CInputEmail/index.js +2 -2
- package/src/components/CInsetTabs/CInsetTabs.vue +222 -222
- package/src/components/CInsetTabs/index.js +3 -3
- package/src/components/CLinearProgressBar/CLinearProgressBar.vue +35 -35
- package/src/components/CLinearProgressBar/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 +88 -88
- package/src/components/CModuleHelpLinks/index.js +3 -3
- package/src/components/CMultiselect/CMultiselect.vue +1314 -1314
- 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 +83 -83
- package/src/components/CPageHeading/index.js +2 -2
- package/src/components/CPagination/CPagination.vue +239 -239
- package/src/components/CPagination/index.js +2 -2
- package/src/components/CPhoneNumber/CPhoneNumber.vue +213 -213
- package/src/components/CPhoneNumber/index.js +2 -2
- package/src/components/CProgress/CProgress.vue +95 -95
- package/src/components/CProgress/index.js +2 -2
- package/src/components/CRadio/CRadio.vue +198 -198
- package/src/components/CRadio/index.js +2 -2
- package/src/components/CRadioGroup/CRadioGroup.vue +96 -96
- package/src/components/CRadioGroup/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 +1225 -1225
- 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 +162 -162
- package/src/components/CStackedList/index.js +2 -2
- package/src/components/CStats/CStats.vue +157 -157
- package/src/components/CStats/index.js +2 -2
- package/src/components/CSwitch/CSwitch.vue +200 -200
- package/src/components/CSwitch/index.js +2 -2
- package/src/components/CTabLazy/CTabLazy.vue +83 -83
- package/src/components/CTabLazy/index.js +2 -2
- package/src/components/CTable/CTable.vue +1114 -1114
- package/src/components/CTable/index.js +2 -2
- package/src/components/CTabs/CTabs.vue +250 -250
- package/src/components/CTabs/index.js +2 -2
- package/src/components/CTag/CTag.vue +109 -109
- package/src/components/CTag/index.js +2 -2
- package/src/components/CTextarea/CTextarea.vue +118 -118
- 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/CTokenEditor/CTokenEditor.vue +804 -804
- package/src/components/CTokenEditor/index.js +3 -3
- package/src/components/CToolTip/CToolTip.vue +108 -108
- package/src/components/CToolTip/index.js +3 -3
- package/src/components/CUpload/CUpload.vue +332 -332
- package/src/components/CUpload/index.js +2 -2
- package/src/components/NumberAnimator.vue +112 -112
- package/src/components/index.js +60 -60
- package/src/helper.js +8 -8
- package/src/icons.js +855 -850
- package/src/main.js +22 -22
- package/src/stories/CAlertModal.stories.js +30 -30
- package/src/stories/CAlerts.stories.js +39 -39
- package/src/stories/CAnchorTabs.stories.js +29 -29
- package/src/stories/CAnchorTag.stories.js +38 -38
- package/src/stories/CAvatar.stories.js +38 -38
- package/src/stories/CAvatarGroup.stories.js +136 -136
- package/src/stories/CBasicTable.stories.js +316 -316
- package/src/stories/CBreadcrumbs.stories.js +24 -24
- package/src/stories/CButton.stories.js +49 -49
- package/src/stories/CButtonGroup.stories.js +43 -43
- package/src/stories/CButtonIcon.stories.js +27 -27
- package/src/stories/CButtonLink.stories.js +24 -24
- package/src/stories/CButtonSelect.stories.js +44 -44
- package/src/stories/CButtonSelectBorder.stories.js +56 -56
- 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 +38 -38
- package/src/stories/CCircularButton.stories.js +29 -29
- package/src/stories/CCollapsibleSection.stories.js +29 -29
- package/src/stories/CColorDots.stories.js +37 -37
- package/src/stories/CConfirmActionModal.stories.js +67 -67
- package/src/stories/CDatepicker.stories.js +31 -31
- package/src/stories/CDualSelect.stories.js +29 -29
- package/src/stories/CEditor.stories.js +36 -36
- package/src/stories/CFormSectionHeading.stories.js +37 -37
- package/src/stories/CGroupedFilterDropdown.stories.js +131 -131
- package/src/stories/CGroupedSelect.stories.js +103 -103
- package/src/stories/CIcon.stories.js +31 -31
- package/src/stories/CIconDropdown.stories.js +52 -52
- package/src/stories/CIconSelect.stories.js +45 -45
- package/src/stories/CInput.stories.js +50 -50
- package/src/stories/CInputAddon.stories.js +37 -37
- package/src/stories/CInputEmail.stories.js +27 -27
- package/src/stories/CInsetTabs.stories.js +50 -50
- package/src/stories/CLinearProgressBar.stories.js +22 -22
- package/src/stories/CModalHeading.stories.js +25 -25
- package/src/stories/CModuleHelpLinks.stories.js +25 -25
- package/src/stories/CMultiselect.stories.js +146 -146
- 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 +37 -37
- package/src/stories/CProgress.stories.js +23 -23
- package/src/stories/CRadio.stories.js +44 -44
- package/src/stories/CRadioGroup.stories.js +51 -51
- package/src/stories/CRangeSlider.stories.js +23 -23
- package/src/stories/CReorderableStackedList.stories.js +23 -23
- package/src/stories/CSelect.stories.js +157 -157
- package/src/stories/CSmallTimeline.stories.js +26 -26
- package/src/stories/CStackedList.stories.js +37 -37
- package/src/stories/CStats.stories.js +53 -53
- package/src/stories/CSwitch.stories.js +28 -28
- package/src/stories/CTabLazy.stories.js +42 -42
- package/src/stories/CTable.stories.js +203 -203
- package/src/stories/CTabs.stories.js +36 -36
- package/src/stories/CTag.stories.js +37 -37
- package/src/stories/CTextarea.stories.js +32 -32
- package/src/stories/CTimeline.stories.js +26 -26
- package/src/stories/CTokenEditor.stories.js +136 -136
- package/src/stories/CToolTip.stories.js +27 -27
- 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 +32 -32
|
@@ -1,227 +1,227 @@
|
|
|
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="ml-1 text-red-600">*</p>
|
|
11
|
-
</div>
|
|
12
|
-
<!-- hint on the right side of input field -->
|
|
13
|
-
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
14
|
-
</div>
|
|
15
|
-
<div
|
|
16
|
-
:class="`relative h-9 ${
|
|
17
|
-
label || hint ? 'mt-1' : ''
|
|
18
|
-
} rounded-md ${inputWrapperClass}`"
|
|
19
|
-
>
|
|
20
|
-
<c-icon
|
|
21
|
-
v-if="isSearchEnabled"
|
|
22
|
-
name="search-outline-v2"
|
|
23
|
-
type="outline"
|
|
24
|
-
class="absolute top-2 left-2 h-5 w-5 flex-shrink-0 text-gray-400"
|
|
25
|
-
></c-icon>
|
|
26
|
-
<input
|
|
27
|
-
:readonly="readonly"
|
|
28
|
-
:type="type"
|
|
29
|
-
:value="inputValue"
|
|
30
|
-
:id="id"
|
|
31
|
-
@input="handleInput"
|
|
32
|
-
@click="handleClick"
|
|
33
|
-
@blur="
|
|
34
|
-
$emit('blur', $event.target.value);
|
|
35
|
-
$emit('blurEvent', $event);
|
|
36
|
-
"
|
|
37
|
-
@focus="$emit('focus', $event.target.value)"
|
|
38
|
-
@keyup.enter="$emit('enter')"
|
|
39
|
-
:class="[
|
|
40
|
-
errorClasses,
|
|
41
|
-
customClasses ? customClasses : 'rounded-md',
|
|
42
|
-
isSearchEnabled ? 'pl-8' : '',
|
|
43
|
-
trailingIcon && isValidate ? 'pr-9' : '',
|
|
44
|
-
]"
|
|
45
|
-
class="block w-full h-full flex-1 px-3 py-2 text-sm text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500"
|
|
46
|
-
:placeholder="placeholder"
|
|
47
|
-
:disabled="disabled"
|
|
48
|
-
:min="minValue"
|
|
49
|
-
:max="maxValue"
|
|
50
|
-
/>
|
|
51
|
-
<!-- to render to show validation is failed -->
|
|
52
|
-
<div
|
|
53
|
-
v-if="!isValidate && !customIcon"
|
|
54
|
-
class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
|
|
55
|
-
>
|
|
56
|
-
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5 bg-white"></c-icon>
|
|
57
|
-
</div>
|
|
58
|
-
<!-- trailing info icon with optional tooltip; hidden when a validation error is shown so the error icon takes priority -->
|
|
59
|
-
<div
|
|
60
|
-
v-if="trailingIcon && isValidate"
|
|
61
|
-
class="absolute inset-y-0 right-0 flex items-center pr-3"
|
|
62
|
-
>
|
|
63
|
-
<span
|
|
64
|
-
tabindex="0"
|
|
65
|
-
class="relative flex items-center text-gray-400 focus:outline-none"
|
|
66
|
-
@mouseenter="showTrailingTooltip = true"
|
|
67
|
-
@mouseleave="showTrailingTooltip = false"
|
|
68
|
-
@focus="showTrailingTooltip = true"
|
|
69
|
-
@blur="showTrailingTooltip = false"
|
|
70
|
-
>
|
|
71
|
-
<c-icon
|
|
72
|
-
:name="trailingIcon"
|
|
73
|
-
:type="trailingIconType"
|
|
74
|
-
:viewBox="trailingIconViewBox || undefined"
|
|
75
|
-
:classes="`${trailingIconClass} `"
|
|
76
|
-
cursorType="cursor-pointer"
|
|
77
|
-
></c-icon>
|
|
78
|
-
<c-tool-tip
|
|
79
|
-
v-if="showTrailingTooltip && trailingIconTooltip"
|
|
80
|
-
:tooltipText="trailingIconTooltip"
|
|
81
|
-
isTopAligned
|
|
82
|
-
classes="bottom-full left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap bg-gray-900 text-white"
|
|
83
|
-
color="#111827"
|
|
84
|
-
></c-tool-tip>
|
|
85
|
-
</span>
|
|
86
|
-
</div>
|
|
87
|
-
<slot name="customIcon" v-if="customIcon"></slot>
|
|
88
|
-
</div>
|
|
89
|
-
<!-- validation error message -->
|
|
90
|
-
<p v-if="!isValidate" class="mt-2 text-sm text-red-600">
|
|
91
|
-
{{ errorMessage }}
|
|
92
|
-
</p>
|
|
93
|
-
<!-- description about the input field -->
|
|
94
|
-
<p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
|
|
95
|
-
{{ helpText }}
|
|
96
|
-
</p>
|
|
97
|
-
</div>
|
|
98
|
-
</template>
|
|
99
|
-
|
|
100
|
-
<script>
|
|
101
|
-
import CIcon from "../CIcon/CIcon.vue";
|
|
102
|
-
import CToolTip from "../CToolTip/CToolTip.vue";
|
|
103
|
-
export default {
|
|
104
|
-
name: "CInput",
|
|
105
|
-
components: { CIcon, CToolTip },
|
|
106
|
-
props: {
|
|
107
|
-
// Label of input field
|
|
108
|
-
label: {
|
|
109
|
-
type: String,
|
|
110
|
-
},
|
|
111
|
-
// Read only of input field
|
|
112
|
-
readonly: {
|
|
113
|
-
type: Boolean,
|
|
114
|
-
},
|
|
115
|
-
// placeholder of input
|
|
116
|
-
placeholder: {
|
|
117
|
-
type: String,
|
|
118
|
-
},
|
|
119
|
-
// v-model of the field
|
|
120
|
-
value: {
|
|
121
|
-
type: String,
|
|
122
|
-
},
|
|
123
|
-
// hint on right side of input
|
|
124
|
-
hint: { type: String },
|
|
125
|
-
// description about the field
|
|
126
|
-
helpText: {
|
|
127
|
-
type: String,
|
|
128
|
-
},
|
|
129
|
-
// validation is passed or not
|
|
130
|
-
isValidate: { type: Boolean },
|
|
131
|
-
// validation error message
|
|
132
|
-
errorMessage: {
|
|
133
|
-
type: String,
|
|
134
|
-
},
|
|
135
|
-
// to disable the input field
|
|
136
|
-
disabled: {
|
|
137
|
-
type: Boolean,
|
|
138
|
-
},
|
|
139
|
-
// whether the input field is mandatory or not
|
|
140
|
-
isRequired: {
|
|
141
|
-
type: Boolean,
|
|
142
|
-
},
|
|
143
|
-
// type of input field
|
|
144
|
-
type: {
|
|
145
|
-
type: String,
|
|
146
|
-
default: "text",
|
|
147
|
-
},
|
|
148
|
-
customClasses: {
|
|
149
|
-
type: String,
|
|
150
|
-
},
|
|
151
|
-
customIcon: {
|
|
152
|
-
type: Boolean,
|
|
153
|
-
default: false,
|
|
154
|
-
},
|
|
155
|
-
minValue: {
|
|
156
|
-
type: Number,
|
|
157
|
-
},
|
|
158
|
-
maxValue: {
|
|
159
|
-
type: Number,
|
|
160
|
-
},
|
|
161
|
-
inputWrapperClass: {
|
|
162
|
-
type: String,
|
|
163
|
-
default: "",
|
|
164
|
-
},
|
|
165
|
-
id: {
|
|
166
|
-
type: String,
|
|
167
|
-
},
|
|
168
|
-
isSearchEnabled: {
|
|
169
|
-
type: Boolean,
|
|
170
|
-
default: false,
|
|
171
|
-
},
|
|
172
|
-
// c-icon name to render at the right edge of the input
|
|
173
|
-
trailingIcon: {
|
|
174
|
-
type: String,
|
|
175
|
-
},
|
|
176
|
-
// type passed through to the trailing <c-icon :type>
|
|
177
|
-
trailingIconType: {
|
|
178
|
-
type: String,
|
|
179
|
-
default: "outline",
|
|
180
|
-
},
|
|
181
|
-
// tooltip text shown on hover/focus of the trailing icon
|
|
182
|
-
trailingIconTooltip: {
|
|
183
|
-
type: String,
|
|
184
|
-
},
|
|
185
|
-
// viewBox passed through to the trailing <c-icon>; only applied when provided
|
|
186
|
-
trailingIconViewBox: {
|
|
187
|
-
type: String,
|
|
188
|
-
},
|
|
189
|
-
// class bound on the trailing <c-icon> so callers control colour/size (positioning is preserved)
|
|
190
|
-
trailingIconClass: {
|
|
191
|
-
type: String,
|
|
192
|
-
default: "h-5 w-5 text-gray-400",
|
|
193
|
-
},
|
|
194
|
-
},
|
|
195
|
-
computed: {
|
|
196
|
-
errorClasses() {
|
|
197
|
-
return {
|
|
198
|
-
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
199
|
-
this.isValidate == false,
|
|
200
|
-
"border-gray-300": this.isValidate == true,
|
|
201
|
-
};
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
methods: {
|
|
205
|
-
handleInput(event) {
|
|
206
|
-
const value = event.target.value;
|
|
207
|
-
this.inputValue = value;
|
|
208
|
-
this.$emit("input", value);
|
|
209
|
-
this.$emit("getCursorIndex", event.target.selectionStart);
|
|
210
|
-
},
|
|
211
|
-
handleClick(event) {
|
|
212
|
-
this.$emit("getCursorIndex", event.target.selectionStart);
|
|
213
|
-
},
|
|
214
|
-
},
|
|
215
|
-
data() {
|
|
216
|
-
return {
|
|
217
|
-
inputValue: this.value,
|
|
218
|
-
showTrailingTooltip: false,
|
|
219
|
-
};
|
|
220
|
-
},
|
|
221
|
-
watch: {
|
|
222
|
-
value() {
|
|
223
|
-
this.inputValue = this.value;
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
</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="ml-1 text-red-600">*</p>
|
|
11
|
+
</div>
|
|
12
|
+
<!-- hint on the right side of input field -->
|
|
13
|
+
<span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
|
|
14
|
+
</div>
|
|
15
|
+
<div
|
|
16
|
+
:class="`relative h-9 ${
|
|
17
|
+
label || hint ? 'mt-1' : ''
|
|
18
|
+
} rounded-md ${inputWrapperClass}`"
|
|
19
|
+
>
|
|
20
|
+
<c-icon
|
|
21
|
+
v-if="isSearchEnabled"
|
|
22
|
+
name="search-outline-v2"
|
|
23
|
+
type="outline"
|
|
24
|
+
class="absolute top-2 left-2 h-5 w-5 flex-shrink-0 text-gray-400"
|
|
25
|
+
></c-icon>
|
|
26
|
+
<input
|
|
27
|
+
:readonly="readonly"
|
|
28
|
+
:type="type"
|
|
29
|
+
:value="inputValue"
|
|
30
|
+
:id="id"
|
|
31
|
+
@input="handleInput"
|
|
32
|
+
@click="handleClick"
|
|
33
|
+
@blur="
|
|
34
|
+
$emit('blur', $event.target.value);
|
|
35
|
+
$emit('blurEvent', $event);
|
|
36
|
+
"
|
|
37
|
+
@focus="$emit('focus', $event.target.value)"
|
|
38
|
+
@keyup.enter="$emit('enter')"
|
|
39
|
+
:class="[
|
|
40
|
+
errorClasses,
|
|
41
|
+
customClasses ? customClasses : 'rounded-md',
|
|
42
|
+
isSearchEnabled ? 'pl-8' : '',
|
|
43
|
+
trailingIcon && isValidate ? 'pr-9' : '',
|
|
44
|
+
]"
|
|
45
|
+
class="block w-full h-full flex-1 px-3 py-2 text-sm text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500"
|
|
46
|
+
:placeholder="placeholder"
|
|
47
|
+
:disabled="disabled"
|
|
48
|
+
:min="minValue"
|
|
49
|
+
:max="maxValue"
|
|
50
|
+
/>
|
|
51
|
+
<!-- to render to show validation is failed -->
|
|
52
|
+
<div
|
|
53
|
+
v-if="!isValidate && !customIcon"
|
|
54
|
+
class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
|
|
55
|
+
>
|
|
56
|
+
<c-icon name="exclamation-circle" type="solid" class="h-5 w-5 bg-white"></c-icon>
|
|
57
|
+
</div>
|
|
58
|
+
<!-- trailing info icon with optional tooltip; hidden when a validation error is shown so the error icon takes priority -->
|
|
59
|
+
<div
|
|
60
|
+
v-if="trailingIcon && isValidate"
|
|
61
|
+
class="absolute inset-y-0 right-0 flex items-center pr-3"
|
|
62
|
+
>
|
|
63
|
+
<span
|
|
64
|
+
tabindex="0"
|
|
65
|
+
class="relative flex items-center text-gray-400 focus:outline-none"
|
|
66
|
+
@mouseenter="showTrailingTooltip = true"
|
|
67
|
+
@mouseleave="showTrailingTooltip = false"
|
|
68
|
+
@focus="showTrailingTooltip = true"
|
|
69
|
+
@blur="showTrailingTooltip = false"
|
|
70
|
+
>
|
|
71
|
+
<c-icon
|
|
72
|
+
:name="trailingIcon"
|
|
73
|
+
:type="trailingIconType"
|
|
74
|
+
:viewBox="trailingIconViewBox || undefined"
|
|
75
|
+
:classes="`${trailingIconClass} `"
|
|
76
|
+
cursorType="cursor-pointer"
|
|
77
|
+
></c-icon>
|
|
78
|
+
<c-tool-tip
|
|
79
|
+
v-if="showTrailingTooltip && trailingIconTooltip"
|
|
80
|
+
:tooltipText="trailingIconTooltip"
|
|
81
|
+
isTopAligned
|
|
82
|
+
classes="bottom-full left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap bg-gray-900 text-white"
|
|
83
|
+
color="#111827"
|
|
84
|
+
></c-tool-tip>
|
|
85
|
+
</span>
|
|
86
|
+
</div>
|
|
87
|
+
<slot name="customIcon" v-if="customIcon"></slot>
|
|
88
|
+
</div>
|
|
89
|
+
<!-- validation error message -->
|
|
90
|
+
<p v-if="!isValidate" class="mt-2 text-sm text-red-600">
|
|
91
|
+
{{ errorMessage }}
|
|
92
|
+
</p>
|
|
93
|
+
<!-- description about the input field -->
|
|
94
|
+
<p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
|
|
95
|
+
{{ helpText }}
|
|
96
|
+
</p>
|
|
97
|
+
</div>
|
|
98
|
+
</template>
|
|
99
|
+
|
|
100
|
+
<script>
|
|
101
|
+
import CIcon from "../CIcon/CIcon.vue";
|
|
102
|
+
import CToolTip from "../CToolTip/CToolTip.vue";
|
|
103
|
+
export default {
|
|
104
|
+
name: "CInput",
|
|
105
|
+
components: { CIcon, CToolTip },
|
|
106
|
+
props: {
|
|
107
|
+
// Label of input field
|
|
108
|
+
label: {
|
|
109
|
+
type: String,
|
|
110
|
+
},
|
|
111
|
+
// Read only of input field
|
|
112
|
+
readonly: {
|
|
113
|
+
type: Boolean,
|
|
114
|
+
},
|
|
115
|
+
// placeholder of input
|
|
116
|
+
placeholder: {
|
|
117
|
+
type: String,
|
|
118
|
+
},
|
|
119
|
+
// v-model of the field
|
|
120
|
+
value: {
|
|
121
|
+
type: String,
|
|
122
|
+
},
|
|
123
|
+
// hint on right side of input
|
|
124
|
+
hint: { type: String },
|
|
125
|
+
// description about the field
|
|
126
|
+
helpText: {
|
|
127
|
+
type: String,
|
|
128
|
+
},
|
|
129
|
+
// validation is passed or not
|
|
130
|
+
isValidate: { type: Boolean },
|
|
131
|
+
// validation error message
|
|
132
|
+
errorMessage: {
|
|
133
|
+
type: String,
|
|
134
|
+
},
|
|
135
|
+
// to disable the input field
|
|
136
|
+
disabled: {
|
|
137
|
+
type: Boolean,
|
|
138
|
+
},
|
|
139
|
+
// whether the input field is mandatory or not
|
|
140
|
+
isRequired: {
|
|
141
|
+
type: Boolean,
|
|
142
|
+
},
|
|
143
|
+
// type of input field
|
|
144
|
+
type: {
|
|
145
|
+
type: String,
|
|
146
|
+
default: "text",
|
|
147
|
+
},
|
|
148
|
+
customClasses: {
|
|
149
|
+
type: String,
|
|
150
|
+
},
|
|
151
|
+
customIcon: {
|
|
152
|
+
type: Boolean,
|
|
153
|
+
default: false,
|
|
154
|
+
},
|
|
155
|
+
minValue: {
|
|
156
|
+
type: Number,
|
|
157
|
+
},
|
|
158
|
+
maxValue: {
|
|
159
|
+
type: Number,
|
|
160
|
+
},
|
|
161
|
+
inputWrapperClass: {
|
|
162
|
+
type: String,
|
|
163
|
+
default: "",
|
|
164
|
+
},
|
|
165
|
+
id: {
|
|
166
|
+
type: String,
|
|
167
|
+
},
|
|
168
|
+
isSearchEnabled: {
|
|
169
|
+
type: Boolean,
|
|
170
|
+
default: false,
|
|
171
|
+
},
|
|
172
|
+
// c-icon name to render at the right edge of the input
|
|
173
|
+
trailingIcon: {
|
|
174
|
+
type: String,
|
|
175
|
+
},
|
|
176
|
+
// type passed through to the trailing <c-icon :type>
|
|
177
|
+
trailingIconType: {
|
|
178
|
+
type: String,
|
|
179
|
+
default: "outline",
|
|
180
|
+
},
|
|
181
|
+
// tooltip text shown on hover/focus of the trailing icon
|
|
182
|
+
trailingIconTooltip: {
|
|
183
|
+
type: String,
|
|
184
|
+
},
|
|
185
|
+
// viewBox passed through to the trailing <c-icon>; only applied when provided
|
|
186
|
+
trailingIconViewBox: {
|
|
187
|
+
type: String,
|
|
188
|
+
},
|
|
189
|
+
// class bound on the trailing <c-icon> so callers control colour/size (positioning is preserved)
|
|
190
|
+
trailingIconClass: {
|
|
191
|
+
type: String,
|
|
192
|
+
default: "h-5 w-5 text-gray-400",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
computed: {
|
|
196
|
+
errorClasses() {
|
|
197
|
+
return {
|
|
198
|
+
"border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
|
|
199
|
+
this.isValidate == false,
|
|
200
|
+
"border-gray-300": this.isValidate == true,
|
|
201
|
+
};
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
methods: {
|
|
205
|
+
handleInput(event) {
|
|
206
|
+
const value = event.target.value;
|
|
207
|
+
this.inputValue = value;
|
|
208
|
+
this.$emit("input", value);
|
|
209
|
+
this.$emit("getCursorIndex", event.target.selectionStart);
|
|
210
|
+
},
|
|
211
|
+
handleClick(event) {
|
|
212
|
+
this.$emit("getCursorIndex", event.target.selectionStart);
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
data() {
|
|
216
|
+
return {
|
|
217
|
+
inputValue: this.value,
|
|
218
|
+
showTrailingTooltip: false,
|
|
219
|
+
};
|
|
220
|
+
},
|
|
221
|
+
watch: {
|
|
222
|
+
value() {
|
|
223
|
+
this.inputValue = this.value;
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
</script>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import CInput from './CInput.vue'
|
|
2
|
-
|
|
1
|
+
import CInput from './CInput.vue'
|
|
2
|
+
|
|
3
3
|
export default CInput
|