classcard-ui 0.2.1069 → 0.2.1071

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +62 -59
  3. package/dist/classcard-ui.common.js.map +1 -1
  4. package/dist/classcard-ui.umd.js +62 -59
  5. package/dist/classcard-ui.umd.js.map +1 -1
  6. package/dist/classcard-ui.umd.min.js +1 -1
  7. package/dist/classcard-ui.umd.min.js.map +1 -1
  8. package/package.json +82 -82
  9. package/src/App.vue +16 -16
  10. package/src/components/CAlerts/CAlerts.vue +70 -70
  11. package/src/components/CAlerts/index.js +2 -2
  12. package/src/components/CAnchorTabs/CAnchorTabs.vue +96 -96
  13. package/src/components/CAnchorTabs/index.js +2 -2
  14. package/src/components/CAnchorTag/CAnchorTag.vue +62 -62
  15. package/src/components/CAnchorTag/index.js +2 -2
  16. package/src/components/CAvatar/CAvatar.vue +212 -212
  17. package/src/components/CAvatar/index.js +2 -2
  18. package/src/components/CAvatarGroup/CAvatarGroup.vue +145 -145
  19. package/src/components/CAvatarGroup/index.js +2 -2
  20. package/src/components/CBasicTable/CBasicTable.vue +184 -184
  21. package/src/components/CBasicTable/index.js +2 -2
  22. package/src/components/CBreadcrumbs/CBreadcrumbs.vue +38 -38
  23. package/src/components/CBreadcrumbs/index.js +2 -2
  24. package/src/components/CButton/CButton.vue +152 -152
  25. package/src/components/CButton/index.js +2 -2
  26. package/src/components/CButtonGroup/CButtonGroup.vue +118 -118
  27. package/src/components/CButtonGroup/index.js +2 -2
  28. package/src/components/CButtonIcon/CButtonIcon.vue +117 -117
  29. package/src/components/CButtonIcon/index.js +2 -2
  30. package/src/components/CButtonLink/CButtonLink.vue +39 -39
  31. package/src/components/CButtonLink/index.js +2 -2
  32. package/src/components/CButtonSelect/CButtonSelect.vue +134 -134
  33. package/src/components/CButtonSelect/index.js +2 -2
  34. package/src/components/CButtonSelectBorder/CButtonSelectBorder.vue +135 -135
  35. package/src/components/CButtonSelectBorder/index.js +3 -3
  36. package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +135 -135
  37. package/src/components/CButtonWithDropdown/index.js +2 -2
  38. package/src/components/CCalendar/CCalendar.vue +410 -410
  39. package/src/components/CCalendar/index.js +3 -3
  40. package/src/components/CCard/CCard.vue +49 -49
  41. package/src/components/CCard/index.js +2 -2
  42. package/src/components/CCheckbox/CCheckbox.vue +123 -123
  43. package/src/components/CCheckbox/index.js +2 -2
  44. package/src/components/CCircularButton/CCircularButton.vue +53 -53
  45. package/src/components/CCircularButton/index.js +2 -2
  46. package/src/components/CCollapsibleSection/CCollapsibleSection.vue +101 -101
  47. package/src/components/CCollapsibleSection/index.js +2 -2
  48. package/src/components/CColorDots/CColorDots.vue +51 -51
  49. package/src/components/CColorDots/index.js +3 -3
  50. package/src/components/CConfirmActionModal/CConfirmActionModal.vue +180 -180
  51. package/src/components/CConfirmActionModal/index.js +3 -3
  52. package/src/components/CDatepicker/CDatepicker.vue +201 -201
  53. package/src/components/CDatepicker/index.js +2 -2
  54. package/src/components/CDualSelect/CDualSelect.vue +193 -193
  55. package/src/components/CDualSelect/index.js +2 -2
  56. package/src/components/CEditor/CEditor.vue +98 -98
  57. package/src/components/CEditor/index.js +2 -2
  58. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +53 -53
  59. package/src/components/CFormSectionHeading/index.js +2 -2
  60. package/src/components/CGroupedSelect/CGroupedSelect.vue +245 -245
  61. package/src/components/CGroupedSelect/index.js +3 -3
  62. package/src/components/CIcon/CIcon.vue +91 -91
  63. package/src/components/CIcon/index.js +2 -2
  64. package/src/components/CIconDropdown/CIconDropdown.vue +146 -146
  65. package/src/components/CIconDropdown/index.js +2 -2
  66. package/src/components/CInput/CInput.vue +134 -134
  67. package/src/components/CInput/index.js +2 -2
  68. package/src/components/CInputAddon/CInputAddon.vue +228 -228
  69. package/src/components/CInputAddon/index.js +2 -2
  70. package/src/components/CInputEmail/CInputEmail.vue +93 -93
  71. package/src/components/CInputEmail/index.js +2 -2
  72. package/src/components/CInsetTabs/CInsetTabs.vue +88 -88
  73. package/src/components/CInsetTabs/index.js +3 -3
  74. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  75. package/src/components/CModalHeading/index.js +2 -2
  76. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +70 -70
  77. package/src/components/CModuleHelpLinks/index.js +3 -3
  78. package/src/components/CMultiselect/CMultiselect.vue +615 -615
  79. package/src/components/CMultiselect/index.js +2 -2
  80. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  81. package/src/components/CMultiselectr/index.js +2 -2
  82. package/src/components/CPageHeading/CPageHeading.vue +56 -56
  83. package/src/components/CPageHeading/index.js +2 -2
  84. package/src/components/CPagination/CPagination.vue +233 -233
  85. package/src/components/CPagination/index.js +2 -2
  86. package/src/components/CPhoneNumber/CPhoneNumber.vue +114 -114
  87. package/src/components/CPhoneNumber/index.js +2 -2
  88. package/src/components/CProgress/CProgress.vue +57 -57
  89. package/src/components/CProgress/index.js +2 -2
  90. package/src/components/CRadio/CRadio.vue +126 -126
  91. package/src/components/CRadio/index.js +2 -2
  92. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  93. package/src/components/CRangeSlider/index.js +2 -2
  94. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  95. package/src/components/CReorderableStackedList/index.js +2 -2
  96. package/src/components/CSelect/CSelect.vue +539 -539
  97. package/src/components/CSelect/index.js +2 -2
  98. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  99. package/src/components/CSmallTimeline/index.js +2 -2
  100. package/src/components/CStackedList/CStackedList.vue +150 -150
  101. package/src/components/CStackedList/index.js +2 -2
  102. package/src/components/CStats/CStats.vue +116 -116
  103. package/src/components/CStats/index.js +2 -2
  104. package/src/components/CSwitch/CSwitch.vue +176 -176
  105. package/src/components/CSwitch/index.js +2 -2
  106. package/src/components/CTabLazy/CTabLazy.vue +63 -63
  107. package/src/components/CTabLazy/index.js +2 -2
  108. package/src/components/CTable/CTable.vue +671 -671
  109. package/src/components/CTable/index.js +2 -2
  110. package/src/components/CTabs/CTabs.vue +169 -169
  111. package/src/components/CTabs/index.js +2 -2
  112. package/src/components/CTag/CTag.vue +59 -59
  113. package/src/components/CTag/index.js +2 -2
  114. package/src/components/CTextarea/CTextarea.vue +107 -107
  115. package/src/components/CTextarea/index.js +2 -2
  116. package/src/components/CTimeline/CTimeline.vue +237 -237
  117. package/src/components/CTimeline/index.js +2 -2
  118. package/src/components/CUpload/CUpload.vue +267 -267
  119. package/src/components/CUpload/index.js +2 -2
  120. package/src/components/index.js +53 -53
  121. package/src/icons.js +459 -453
  122. package/src/main.js +22 -22
  123. package/src/stories/CAlerts.stories.js +37 -37
  124. package/src/stories/CAnchorTabs.stories.js +29 -29
  125. package/src/stories/CAnchorTag.stories.js +36 -36
  126. package/src/stories/CAvatar.stories.js +38 -38
  127. package/src/stories/CAvatarGroup.stories.js +100 -100
  128. package/src/stories/CBasicTable.stories.js +316 -316
  129. package/src/stories/CBreadcrumbs.stories.js +24 -24
  130. package/src/stories/CButton.stories.js +47 -47
  131. package/src/stories/CButtonGroup.stories.js +33 -33
  132. package/src/stories/CButtonIcon.stories.js +27 -27
  133. package/src/stories/CButtonLink.stories.js +24 -24
  134. package/src/stories/CButtonSelect.stories.js +41 -41
  135. package/src/stories/CButtonSelectBorder.stories.js +48 -48
  136. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  137. package/src/stories/CCalendar.stories.js +16 -16
  138. package/src/stories/CCard.stories.js +30 -30
  139. package/src/stories/CCheckbox.stories.js +29 -29
  140. package/src/stories/CCircularButton.stories.js +29 -29
  141. package/src/stories/CCollapsibleSection.stories.js +28 -28
  142. package/src/stories/CColorDots.stories.js +28 -28
  143. package/src/stories/CConfirmActionModal.stories.js +59 -59
  144. package/src/stories/CDatepicker.stories.js +30 -30
  145. package/src/stories/CDualSelect.stories.js +29 -29
  146. package/src/stories/CEditor.stories.js +30 -30
  147. package/src/stories/CFormSectionHeading.stories.js +34 -34
  148. package/src/stories/CGroupedSelect.stories.js +71 -71
  149. package/src/stories/CIcon.stories.js +28 -28
  150. package/src/stories/CIconDropdown.stories.js +45 -45
  151. package/src/stories/CInput.stories.js +36 -36
  152. package/src/stories/CInputAddon.stories.js +37 -37
  153. package/src/stories/CInputEmail.stories.js +27 -27
  154. package/src/stories/CInsetTabs.stories.js +38 -38
  155. package/src/stories/CModalHeading.stories.js +25 -25
  156. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  157. package/src/stories/CMultiselect.stories.js +167 -167
  158. package/src/stories/CMultiselectr.stories.js +23 -23
  159. package/src/stories/CPageHeading.stories.js +32 -32
  160. package/src/stories/CPagination.stories.js +30 -30
  161. package/src/stories/CPhoneNumber.stories.js +29 -29
  162. package/src/stories/CProgress.stories.js +23 -23
  163. package/src/stories/CRadio.stories.js +36 -36
  164. package/src/stories/CRangeSlider.stories.js +23 -23
  165. package/src/stories/CReorderableStackedList.stories.js +23 -23
  166. package/src/stories/CSelect.stories.js +109 -109
  167. package/src/stories/CSmallTimeline.stories.js +26 -26
  168. package/src/stories/CStackedList.stories.js +37 -37
  169. package/src/stories/CStats.stories.js +33 -33
  170. package/src/stories/CSwitch.stories.js +28 -28
  171. package/src/stories/CTabLazy.stories.js +26 -26
  172. package/src/stories/CTable.stories.js +169 -169
  173. package/src/stories/CTabs.stories.js +36 -36
  174. package/src/stories/CTag.stories.js +34 -34
  175. package/src/stories/CTextarea.stories.js +32 -32
  176. package/src/stories/CTimeline.stories.js +26 -26
  177. package/src/stories/CUpload.stories.js +36 -36
  178. package/src/stories/Introduction.stories.mdx +207 -207
  179. package/src/stories/Page.vue +88 -88
  180. package/src/stories/assets/code-brackets.svg +0 -0
  181. package/src/stories/assets/colors.svg +0 -0
  182. package/src/stories/assets/comments.svg +0 -0
  183. package/src/stories/assets/direction.svg +0 -0
  184. package/src/stories/assets/flow.svg +0 -0
  185. package/src/stories/assets/plugin.svg +0 -0
  186. package/src/stories/assets/repo.svg +0 -0
  187. package/src/stories/assets/stackalt.svg +0 -0
  188. package/src/stories/header.css +26 -26
  189. package/src/stories/page.css +69 -69
  190. package/src/stories/utils.css +17 -17
@@ -1,228 +1,228 @@
1
- <template>
2
- <div>
3
- <div v-if="label" class="mb-1 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
- <span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
13
- </div>
14
- <div
15
- v-if="!inlineAddon && addonType == 'leading'"
16
- class="relative flex rounded-md"
17
- >
18
- <span
19
- :class="disabled ? 'opacity-50' : ''"
20
- v-if="addon"
21
- class="inline-flex items-center rounded-l-md border border-r-0 border-gray-300 bg-gray-50 px-3 text-gray-500 sm:text-sm"
22
- >
23
- {{ addon }}
24
- </span>
25
- <input
26
- :type="inputType"
27
- :value="inputValue"
28
- @input="$emit('input', $event.target.value)"
29
- @blur="$emit('blur', $event.target.value)"
30
- :class="{ ...errorClasses, 'rounded-l-md': !addon }"
31
- class="block w-full flex-1 rounded-r-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
32
- :placeholder="placeholder"
33
- :disabled="disabled"
34
- />
35
- <div
36
- v-if="!isValidate"
37
- class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
38
- >
39
- <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
40
- </div>
41
- </div>
42
- <div
43
- v-if="!inlineAddon && addonType == 'trailing'"
44
- class="relative flex rounded-md"
45
- >
46
- <input
47
- :type="inputType"
48
- :value="inputValue"
49
- @input="$emit('input', $event.target.value)"
50
- @blur="$emit('blur', $event.target.value)"
51
- :class="errorClasses"
52
- class="block w-full flex-1 rounded-l-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
53
- :placeholder="placeholder"
54
- :disabled="disabled"
55
- />
56
- <div
57
- v-if="!isValidate"
58
- class="pointer-events-none absolute inset-y-0 right-14 flex items-center pr-3 text-red-600"
59
- >
60
- <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
61
- </div>
62
- <span
63
- :class="disabled ? 'opacity-50' : ''"
64
- class="inline-flex items-center rounded-r-md border border-l-0 border-gray-300 bg-gray-50 px-4 py-2 text-gray-500 sm:text-sm"
65
- >
66
- {{ addon }}
67
- </span>
68
- </div>
69
- <div
70
- v-if="inlineAddon && addonType == 'trailing'"
71
- class="relative flex rounded-md"
72
- >
73
- <input
74
- :type="inputType"
75
- :value="inputValue"
76
- @input="$emit('input', $event.target.value)"
77
- @blur="$emit('blur', $event.target.value)"
78
- :class="errorClasses"
79
- class="block w-full flex-1 rounded-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
80
- :placeholder="placeholder"
81
- :disabled="disabled"
82
- />
83
- <div
84
- class="pointer-events-none absolute inset-y-0 right-3 flex items-center"
85
- >
86
- <div
87
- v-if="!isValidate"
88
- class="pointer-events-none right-0 flex items-center pr-2 text-red-600"
89
- >
90
- <c-icon
91
- name="exclamation-circle"
92
- type="solid"
93
- class="h-5 w-5"
94
- ></c-icon>
95
- </div>
96
- <span
97
- class="text-gray-500 sm:text-sm"
98
- :class="[
99
- disabled ? 'opacity-50' : '',
100
- inputType === 'number' ? 'mr-5' : '',
101
- ]"
102
- >
103
- {{ addon }}
104
- </span>
105
- </div>
106
- </div>
107
- <div
108
- v-if="inlineAddon && addonType == 'leading'"
109
- class="relative flex rounded-md"
110
- >
111
- <div
112
- class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"
113
- >
114
- <span class="text-gray-500 sm:text-sm">{{ addon }}</span>
115
- </div>
116
- <input
117
- :type="inputType"
118
- :value="inputValue"
119
- @input="$emit('input', $event.target.value)"
120
- @blur="$emit('blur', $event.target.value)"
121
- :class="errorClasses"
122
- :style="`padding-left:${leftPaddingStyle}`"
123
- class="block w-full rounded-md text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
124
- :placeholder="placeholder"
125
- :disabled="disabled"
126
- />
127
- <div
128
- v-if="!isValidate"
129
- class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
130
- >
131
- <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
132
- </div>
133
- </div>
134
- <p v-if="!isValidate" class="mt-2 text-left text-sm text-red-600">
135
- {{ errorMessage }}
136
- </p>
137
- <p
138
- v-if="helpText && isValidate == true"
139
- :class="`mt-2 text-left text-sm ${helpTextColorStyles}`"
140
- >
141
- {{ helpText }}
142
- </p>
143
- </div>
144
- </template>
145
-
146
- <script>
147
- import CIcon from "../CIcon/CIcon.vue";
148
- export default {
149
- name: "CInputAddon",
150
- components: { CIcon },
151
- props: {
152
- label: {
153
- type: String,
154
- },
155
- placeholder: {
156
- type: String,
157
- },
158
- value: [String, Number],
159
- hint: { type: String },
160
- helpText: {
161
- type: String,
162
- },
163
- addon: { type: String },
164
- helpTextColor: {
165
- type: String,
166
- default: "gray",
167
- },
168
- inlineAddon: { type: Boolean },
169
- addonType: {
170
- type: String,
171
- },
172
- isValidate: { type: Boolean },
173
- errorMessage: {
174
- type: String,
175
- },
176
- disabled: {
177
- type: Boolean,
178
- },
179
- // whether the input field is mandatory or not
180
- isRequired: {
181
- type: Boolean,
182
- },
183
- inputType: {
184
- type: String,
185
- default: "text",
186
- },
187
- },
188
- computed: {
189
- errorClasses() {
190
- return {
191
- "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
192
- this.isValidate == false,
193
- "border-gray-300": this.isValidate == true,
194
- };
195
- },
196
- leftPaddingStyle() {
197
- var leftPadding;
198
- if (this.addon.length <= 2) {
199
- leftPadding = "2rem";
200
- } else if (this.addon.length >= 3) {
201
- leftPadding = "3.5rem";
202
- }
203
- return leftPadding;
204
- },
205
- helpTextColorStyles() {
206
- switch (this.helpTextColor) {
207
- case "green":
208
- return "text-green-500";
209
- case "red":
210
- return "text-red-500";
211
- default:
212
- return "text-gray-500";
213
- }
214
- },
215
- },
216
- data() {
217
- return {
218
- inputValue: this.value,
219
- };
220
- },
221
- methods: {},
222
- watch: {
223
- value() {
224
- this.inputValue = this.value;
225
- },
226
- },
227
- };
228
- </script>
1
+ <template>
2
+ <div>
3
+ <div v-if="label" class="mb-1 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
+ <span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
13
+ </div>
14
+ <div
15
+ v-if="!inlineAddon && addonType == 'leading'"
16
+ class="relative flex rounded-md"
17
+ >
18
+ <span
19
+ :class="disabled ? 'opacity-50' : ''"
20
+ v-if="addon"
21
+ class="inline-flex items-center rounded-l-md border border-r-0 border-gray-300 bg-gray-50 px-3 text-gray-500 sm:text-sm"
22
+ >
23
+ {{ addon }}
24
+ </span>
25
+ <input
26
+ :type="inputType"
27
+ :value="inputValue"
28
+ @input="$emit('input', $event.target.value)"
29
+ @blur="$emit('blur', $event.target.value)"
30
+ :class="{ ...errorClasses, 'rounded-l-md': !addon }"
31
+ class="block w-full flex-1 rounded-r-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
32
+ :placeholder="placeholder"
33
+ :disabled="disabled"
34
+ />
35
+ <div
36
+ v-if="!isValidate"
37
+ class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
38
+ >
39
+ <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
40
+ </div>
41
+ </div>
42
+ <div
43
+ v-if="!inlineAddon && addonType == 'trailing'"
44
+ class="relative flex rounded-md"
45
+ >
46
+ <input
47
+ :type="inputType"
48
+ :value="inputValue"
49
+ @input="$emit('input', $event.target.value)"
50
+ @blur="$emit('blur', $event.target.value)"
51
+ :class="errorClasses"
52
+ class="block w-full flex-1 rounded-l-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
53
+ :placeholder="placeholder"
54
+ :disabled="disabled"
55
+ />
56
+ <div
57
+ v-if="!isValidate"
58
+ class="pointer-events-none absolute inset-y-0 right-14 flex items-center pr-3 text-red-600"
59
+ >
60
+ <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
61
+ </div>
62
+ <span
63
+ :class="disabled ? 'opacity-50' : ''"
64
+ class="inline-flex items-center rounded-r-md border border-l-0 border-gray-300 bg-gray-50 px-4 py-2 text-gray-500 sm:text-sm"
65
+ >
66
+ {{ addon }}
67
+ </span>
68
+ </div>
69
+ <div
70
+ v-if="inlineAddon && addonType == 'trailing'"
71
+ class="relative flex rounded-md"
72
+ >
73
+ <input
74
+ :type="inputType"
75
+ :value="inputValue"
76
+ @input="$emit('input', $event.target.value)"
77
+ @blur="$emit('blur', $event.target.value)"
78
+ :class="errorClasses"
79
+ class="block w-full flex-1 rounded-md px-3 py-2 text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
80
+ :placeholder="placeholder"
81
+ :disabled="disabled"
82
+ />
83
+ <div
84
+ class="pointer-events-none absolute inset-y-0 right-3 flex items-center"
85
+ >
86
+ <div
87
+ v-if="!isValidate"
88
+ class="pointer-events-none right-0 flex items-center pr-2 text-red-600"
89
+ >
90
+ <c-icon
91
+ name="exclamation-circle"
92
+ type="solid"
93
+ class="h-5 w-5"
94
+ ></c-icon>
95
+ </div>
96
+ <span
97
+ class="text-gray-500 sm:text-sm"
98
+ :class="[
99
+ disabled ? 'opacity-50' : '',
100
+ inputType === 'number' ? 'mr-5' : '',
101
+ ]"
102
+ >
103
+ {{ addon }}
104
+ </span>
105
+ </div>
106
+ </div>
107
+ <div
108
+ v-if="inlineAddon && addonType == 'leading'"
109
+ class="relative flex rounded-md"
110
+ >
111
+ <div
112
+ class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"
113
+ >
114
+ <span class="text-gray-500 sm:text-sm">{{ addon }}</span>
115
+ </div>
116
+ <input
117
+ :type="inputType"
118
+ :value="inputValue"
119
+ @input="$emit('input', $event.target.value)"
120
+ @blur="$emit('blur', $event.target.value)"
121
+ :class="errorClasses"
122
+ :style="`padding-left:${leftPaddingStyle}`"
123
+ class="block w-full rounded-md text-gray-900 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 disabled:opacity-50 sm:text-sm"
124
+ :placeholder="placeholder"
125
+ :disabled="disabled"
126
+ />
127
+ <div
128
+ v-if="!isValidate"
129
+ class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
130
+ >
131
+ <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
132
+ </div>
133
+ </div>
134
+ <p v-if="!isValidate" class="mt-2 text-left text-sm text-red-600">
135
+ {{ errorMessage }}
136
+ </p>
137
+ <p
138
+ v-if="helpText && isValidate == true"
139
+ :class="`mt-2 text-left text-sm ${helpTextColorStyles}`"
140
+ >
141
+ {{ helpText }}
142
+ </p>
143
+ </div>
144
+ </template>
145
+
146
+ <script>
147
+ import CIcon from "../CIcon/CIcon.vue";
148
+ export default {
149
+ name: "CInputAddon",
150
+ components: { CIcon },
151
+ props: {
152
+ label: {
153
+ type: String,
154
+ },
155
+ placeholder: {
156
+ type: String,
157
+ },
158
+ value: [String, Number],
159
+ hint: { type: String },
160
+ helpText: {
161
+ type: String,
162
+ },
163
+ addon: { type: String },
164
+ helpTextColor: {
165
+ type: String,
166
+ default: "gray",
167
+ },
168
+ inlineAddon: { type: Boolean },
169
+ addonType: {
170
+ type: String,
171
+ },
172
+ isValidate: { type: Boolean },
173
+ errorMessage: {
174
+ type: String,
175
+ },
176
+ disabled: {
177
+ type: Boolean,
178
+ },
179
+ // whether the input field is mandatory or not
180
+ isRequired: {
181
+ type: Boolean,
182
+ },
183
+ inputType: {
184
+ type: String,
185
+ default: "text",
186
+ },
187
+ },
188
+ computed: {
189
+ errorClasses() {
190
+ return {
191
+ "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
192
+ this.isValidate == false,
193
+ "border-gray-300": this.isValidate == true,
194
+ };
195
+ },
196
+ leftPaddingStyle() {
197
+ var leftPadding;
198
+ if (this.addon.length <= 2) {
199
+ leftPadding = "2rem";
200
+ } else if (this.addon.length >= 3) {
201
+ leftPadding = "3.5rem";
202
+ }
203
+ return leftPadding;
204
+ },
205
+ helpTextColorStyles() {
206
+ switch (this.helpTextColor) {
207
+ case "green":
208
+ return "text-green-500";
209
+ case "red":
210
+ return "text-red-500";
211
+ default:
212
+ return "text-gray-500";
213
+ }
214
+ },
215
+ },
216
+ data() {
217
+ return {
218
+ inputValue: this.value,
219
+ };
220
+ },
221
+ methods: {},
222
+ watch: {
223
+ value() {
224
+ this.inputValue = this.value;
225
+ },
226
+ },
227
+ };
228
+ </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,93 +1,93 @@
1
- <template>
2
- <div>
3
- <div class="flex justify-between">
4
- <div class="flex items-center">
5
- <!-- label of input field -->
6
- <label v-if="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
- <span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
13
- </div>
14
- <div class="relative mt-1 rounded-md">
15
- <input
16
- type="text"
17
- :class="errorClasses"
18
- 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"
19
- :placeholder="placeholder"
20
- :value="email"
21
- @blur="checkValidation"
22
- @input="$emit('input', $event.target.value)"
23
- />
24
- <div
25
- v-if="isValidate"
26
- class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
27
- >
28
- <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
29
- </div>
30
- </div>
31
- <p v-if="isValidate" class="mt-2 text-sm text-red-600">Please enter valid email address</p>
32
- <p v-if="helpText && isValidate == false" class="mt-2 text-sm text-gray-500">
33
- {{ helpText }}
34
- </p>
35
- </div>
36
- </template>
37
-
38
- <script>
39
- import CIcon from "../CIcon/CIcon.vue";
40
- export default {
41
- name: "CInputEmail",
42
- components: { CIcon },
43
- props: {
44
- label: {
45
- type: String,
46
- required: true,
47
- },
48
- placeholder: {
49
- type: String,
50
- },
51
- hint: { type: String },
52
- helpText: {
53
- type: String,
54
- },
55
- // v-model of the field
56
- value: {
57
- type: String,
58
- },
59
- // whether the email field is mandatory or not
60
- isRequired: {
61
- type: Boolean,
62
- },
63
- },
64
- data() {
65
- return {
66
- email: this.value,
67
- isValidate: false,
68
- };
69
- },
70
- computed: {
71
- errorClasses() {
72
- return {
73
- "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
74
- this.isValidate == true,
75
- "border-gray-300": this.isValidate == false,
76
- };
77
- },
78
- },
79
- methods: {
80
- checkValidation() {
81
- this.isValidate =
82
- /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(this.email) || this.email == ""
83
- ? false
84
- : true;
85
- },
86
- },
87
- watch: {
88
- value() {
89
- this.email = this.value;
90
- },
91
- },
92
- };
93
- </script>
1
+ <template>
2
+ <div>
3
+ <div class="flex justify-between">
4
+ <div class="flex items-center">
5
+ <!-- label of input field -->
6
+ <label v-if="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
+ <span v-if="hint" class="text-sm text-gray-500">{{ hint }}</span>
13
+ </div>
14
+ <div class="relative mt-1 rounded-md">
15
+ <input
16
+ type="text"
17
+ :class="errorClasses"
18
+ 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"
19
+ :placeholder="placeholder"
20
+ :value="email"
21
+ @blur="checkValidation"
22
+ @input="$emit('input', $event.target.value)"
23
+ />
24
+ <div
25
+ v-if="isValidate"
26
+ class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-red-600"
27
+ >
28
+ <c-icon name="exclamation-circle" type="solid" class="h-5 w-5"></c-icon>
29
+ </div>
30
+ </div>
31
+ <p v-if="isValidate" class="mt-2 text-sm text-red-600">Please enter valid email address</p>
32
+ <p v-if="helpText && isValidate == false" class="mt-2 text-sm text-gray-500">
33
+ {{ helpText }}
34
+ </p>
35
+ </div>
36
+ </template>
37
+
38
+ <script>
39
+ import CIcon from "../CIcon/CIcon.vue";
40
+ export default {
41
+ name: "CInputEmail",
42
+ components: { CIcon },
43
+ props: {
44
+ label: {
45
+ type: String,
46
+ required: true,
47
+ },
48
+ placeholder: {
49
+ type: String,
50
+ },
51
+ hint: { type: String },
52
+ helpText: {
53
+ type: String,
54
+ },
55
+ // v-model of the field
56
+ value: {
57
+ type: String,
58
+ },
59
+ // whether the email field is mandatory or not
60
+ isRequired: {
61
+ type: Boolean,
62
+ },
63
+ },
64
+ data() {
65
+ return {
66
+ email: this.value,
67
+ isValidate: false,
68
+ };
69
+ },
70
+ computed: {
71
+ errorClasses() {
72
+ return {
73
+ "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
74
+ this.isValidate == true,
75
+ "border-gray-300": this.isValidate == false,
76
+ };
77
+ },
78
+ },
79
+ methods: {
80
+ checkValidation() {
81
+ this.isValidate =
82
+ /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(this.email) || this.email == ""
83
+ ? false
84
+ : true;
85
+ },
86
+ },
87
+ watch: {
88
+ value() {
89
+ this.email = this.value;
90
+ },
91
+ },
92
+ };
93
+ </script>
@@ -1,3 +1,3 @@
1
- import CInputEmail from './CInputEmail.vue'
2
-
1
+ import CInputEmail from './CInputEmail.vue'
2
+
3
3
  export default CInputEmail