classcard-ui 0.2.1485 → 0.2.1486

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 (213) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +106 -93
  3. package/dist/classcard-ui.common.js.map +1 -1
  4. package/dist/classcard-ui.css +1 -1
  5. package/dist/classcard-ui.umd.js +106 -93
  6. package/dist/classcard-ui.umd.js.map +1 -1
  7. package/dist/classcard-ui.umd.min.js +1 -1
  8. package/dist/classcard-ui.umd.min.js.map +1 -1
  9. package/package.json +84 -84
  10. package/src/App.vue +16 -16
  11. package/src/colorConfig.js +52 -52
  12. package/src/components/CAlertModal/CAlertModal.vue +179 -179
  13. package/src/components/CAlertModal/index.js +3 -3
  14. package/src/components/CAlerts/CAlerts.vue +114 -114
  15. package/src/components/CAlerts/index.js +2 -2
  16. package/src/components/CAnchorTabs/CAnchorTabs.vue +100 -100
  17. package/src/components/CAnchorTabs/index.js +2 -2
  18. package/src/components/CAnchorTag/CAnchorTag.vue +84 -84
  19. package/src/components/CAnchorTag/index.js +2 -2
  20. package/src/components/CAvatar/CAvatar.vue +232 -225
  21. package/src/components/CAvatar/index.js +2 -2
  22. package/src/components/CAvatarGroup/CAvatarGroup.vue +213 -213
  23. package/src/components/CAvatarGroup/index.js +2 -2
  24. package/src/components/CBasicTable/CBasicTable.vue +184 -184
  25. package/src/components/CBasicTable/index.js +2 -2
  26. package/src/components/CBreadcrumbs/CBreadcrumbs.vue +38 -38
  27. package/src/components/CBreadcrumbs/index.js +2 -2
  28. package/src/components/CButton/CButton.vue +239 -239
  29. package/src/components/CButton/index.js +2 -2
  30. package/src/components/CButtonGroup/CButtonGroup.vue +155 -155
  31. package/src/components/CButtonGroup/index.js +2 -2
  32. package/src/components/CButtonIcon/CButtonIcon.vue +166 -166
  33. package/src/components/CButtonIcon/index.js +2 -2
  34. package/src/components/CButtonLink/CButtonLink.vue +43 -43
  35. package/src/components/CButtonLink/index.js +2 -2
  36. package/src/components/CButtonSelect/CButtonSelect.vue +186 -186
  37. package/src/components/CButtonSelect/index.js +2 -2
  38. package/src/components/CButtonSelectBorder/CButtonSelectBorder.vue +265 -265
  39. package/src/components/CButtonSelectBorder/index.js +3 -3
  40. package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +152 -152
  41. package/src/components/CButtonWithDropdown/index.js +2 -2
  42. package/src/components/CCalendar/CCalendar.vue +443 -443
  43. package/src/components/CCalendar/index.js +3 -3
  44. package/src/components/CCard/CCard.vue +53 -53
  45. package/src/components/CCard/index.js +2 -2
  46. package/src/components/CCheckbox/CCheckbox.vue +200 -200
  47. package/src/components/CCheckbox/index.js +2 -2
  48. package/src/components/CCircularButton/CCircularButton.vue +57 -57
  49. package/src/components/CCircularButton/index.js +2 -2
  50. package/src/components/CCollapsibleSection/CCollapsibleSection.vue +121 -121
  51. package/src/components/CCollapsibleSection/index.js +2 -2
  52. package/src/components/CColorDots/CColorDots.vue +52 -52
  53. package/src/components/CColorDots/index.js +3 -3
  54. package/src/components/CConfirmActionModal/CConfirmActionModal.vue +253 -253
  55. package/src/components/CConfirmActionModal/index.js +3 -3
  56. package/src/components/CDatepicker/CDatepicker.vue +235 -235
  57. package/src/components/CDatepicker/index.js +2 -2
  58. package/src/components/CDualSelect/CDualSelect.vue +193 -193
  59. package/src/components/CDualSelect/index.js +2 -2
  60. package/src/components/CEditor/CEditor.vue +114 -114
  61. package/src/components/CEditor/index.js +2 -2
  62. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +76 -76
  63. package/src/components/CFormSectionHeading/index.js +2 -2
  64. package/src/components/CGroupedFilterDropdown/CGroupedFilterDropdown.vue +331 -331
  65. package/src/components/CGroupedFilterDropdown/index.js +2 -2
  66. package/src/components/CGroupedSelect/CGroupedSelect.vue +366 -366
  67. package/src/components/CGroupedSelect/index.js +3 -3
  68. package/src/components/CIcon/CIcon.vue +112 -112
  69. package/src/components/CIcon/index.js +2 -2
  70. package/src/components/CIconDropdown/CIconDropdown.vue +206 -206
  71. package/src/components/CIconDropdown/index.js +2 -2
  72. package/src/components/CIconSelect/CIconSelect.vue +182 -182
  73. package/src/components/CIconSelect/index.js +3 -3
  74. package/src/components/CInput/CInput.vue +173 -173
  75. package/src/components/CInput/index.js +2 -2
  76. package/src/components/CInputAddon/CInputAddon.vue +297 -297
  77. package/src/components/CInputAddon/index.js +2 -2
  78. package/src/components/CInputEmail/CInputEmail.vue +107 -107
  79. package/src/components/CInputEmail/index.js +2 -2
  80. package/src/components/CInsetTabs/CInsetTabs.vue +141 -141
  81. package/src/components/CInsetTabs/index.js +3 -3
  82. package/src/components/CLinearProgressBar/CLinearProgressBar.vue +35 -35
  83. package/src/components/CLinearProgressBar/index.js +2 -2
  84. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  85. package/src/components/CModalHeading/index.js +2 -2
  86. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +88 -88
  87. package/src/components/CModuleHelpLinks/index.js +3 -3
  88. package/src/components/CMultiselect/CMultiselect.vue +1298 -1298
  89. package/src/components/CMultiselect/index.js +2 -2
  90. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  91. package/src/components/CMultiselectr/index.js +2 -2
  92. package/src/components/CPageHeading/CPageHeading.vue +83 -83
  93. package/src/components/CPageHeading/index.js +2 -2
  94. package/src/components/CPagination/CPagination.vue +239 -239
  95. package/src/components/CPagination/index.js +2 -2
  96. package/src/components/CPhoneNumber/CPhoneNumber.vue +213 -213
  97. package/src/components/CPhoneNumber/index.js +2 -2
  98. package/src/components/CProgress/CProgress.vue +91 -91
  99. package/src/components/CProgress/index.js +2 -2
  100. package/src/components/CRadio/CRadio.vue +197 -197
  101. package/src/components/CRadio/index.js +2 -2
  102. package/src/components/CRadioGroup/CRadioGroup.vue +96 -96
  103. package/src/components/CRadioGroup/index.js +2 -2
  104. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  105. package/src/components/CRangeSlider/index.js +2 -2
  106. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  107. package/src/components/CReorderableStackedList/index.js +2 -2
  108. package/src/components/CSelect/CSelect.vue +1216 -1216
  109. package/src/components/CSelect/index.js +2 -2
  110. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  111. package/src/components/CSmallTimeline/index.js +2 -2
  112. package/src/components/CStackedList/CStackedList.vue +162 -162
  113. package/src/components/CStackedList/index.js +2 -2
  114. package/src/components/CStats/CStats.vue +157 -157
  115. package/src/components/CStats/index.js +2 -2
  116. package/src/components/CSwitch/CSwitch.vue +200 -200
  117. package/src/components/CSwitch/index.js +2 -2
  118. package/src/components/CTabLazy/CTabLazy.vue +83 -83
  119. package/src/components/CTabLazy/index.js +2 -2
  120. package/src/components/CTable/CTable.vue +1114 -1114
  121. package/src/components/CTable/index.js +2 -2
  122. package/src/components/CTabs/CTabs.vue +250 -250
  123. package/src/components/CTabs/index.js +2 -2
  124. package/src/components/CTag/CTag.vue +109 -109
  125. package/src/components/CTag/index.js +2 -2
  126. package/src/components/CTextarea/CTextarea.vue +118 -118
  127. package/src/components/CTextarea/index.js +2 -2
  128. package/src/components/CTimeline/CTimeline.vue +237 -237
  129. package/src/components/CTimeline/index.js +2 -2
  130. package/src/components/CToolTip/CToolTip.vue +108 -108
  131. package/src/components/CToolTip/index.js +3 -3
  132. package/src/components/CUpload/CUpload.vue +332 -332
  133. package/src/components/CUpload/index.js +2 -2
  134. package/src/components/NumberAnimator.vue +112 -112
  135. package/src/components/index.js +58 -58
  136. package/src/helper.js +8 -8
  137. package/src/icons.js +833 -833
  138. package/src/main.js +22 -22
  139. package/src/stories/CAlertModal.stories.js +30 -30
  140. package/src/stories/CAlerts.stories.js +39 -39
  141. package/src/stories/CAnchorTabs.stories.js +29 -29
  142. package/src/stories/CAnchorTag.stories.js +38 -38
  143. package/src/stories/CAvatar.stories.js +38 -38
  144. package/src/stories/CAvatarGroup.stories.js +136 -136
  145. package/src/stories/CBasicTable.stories.js +316 -316
  146. package/src/stories/CBreadcrumbs.stories.js +24 -24
  147. package/src/stories/CButton.stories.js +49 -49
  148. package/src/stories/CButtonGroup.stories.js +43 -43
  149. package/src/stories/CButtonIcon.stories.js +27 -27
  150. package/src/stories/CButtonLink.stories.js +24 -24
  151. package/src/stories/CButtonSelect.stories.js +44 -44
  152. package/src/stories/CButtonSelectBorder.stories.js +56 -56
  153. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  154. package/src/stories/CCalendar.stories.js +16 -16
  155. package/src/stories/CCard.stories.js +30 -30
  156. package/src/stories/CCheckbox.stories.js +38 -38
  157. package/src/stories/CCircularButton.stories.js +29 -29
  158. package/src/stories/CCollapsibleSection.stories.js +29 -29
  159. package/src/stories/CColorDots.stories.js +37 -37
  160. package/src/stories/CConfirmActionModal.stories.js +67 -67
  161. package/src/stories/CDatepicker.stories.js +31 -31
  162. package/src/stories/CDualSelect.stories.js +29 -29
  163. package/src/stories/CEditor.stories.js +30 -30
  164. package/src/stories/CFormSectionHeading.stories.js +37 -37
  165. package/src/stories/CGroupedFilterDropdown.stories.js +131 -131
  166. package/src/stories/CGroupedSelect.stories.js +103 -103
  167. package/src/stories/CIcon.stories.js +31 -31
  168. package/src/stories/CIconDropdown.stories.js +52 -52
  169. package/src/stories/CIconSelect.stories.js +45 -45
  170. package/src/stories/CInput.stories.js +36 -36
  171. package/src/stories/CInputAddon.stories.js +37 -37
  172. package/src/stories/CInputEmail.stories.js +27 -27
  173. package/src/stories/CInsetTabs.stories.js +48 -48
  174. package/src/stories/CLinearProgressBar.stories.js +22 -22
  175. package/src/stories/CModalHeading.stories.js +25 -25
  176. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  177. package/src/stories/CMultiselect.stories.js +146 -146
  178. package/src/stories/CMultiselectr.stories.js +23 -23
  179. package/src/stories/CPageHeading.stories.js +32 -32
  180. package/src/stories/CPagination.stories.js +30 -30
  181. package/src/stories/CPhoneNumber.stories.js +37 -37
  182. package/src/stories/CProgress.stories.js +23 -23
  183. package/src/stories/CRadio.stories.js +44 -44
  184. package/src/stories/CRadioGroup.stories.js +51 -51
  185. package/src/stories/CRangeSlider.stories.js +23 -23
  186. package/src/stories/CReorderableStackedList.stories.js +23 -23
  187. package/src/stories/CSelect.stories.js +157 -157
  188. package/src/stories/CSmallTimeline.stories.js +26 -26
  189. package/src/stories/CStackedList.stories.js +37 -37
  190. package/src/stories/CStats.stories.js +53 -53
  191. package/src/stories/CSwitch.stories.js +28 -28
  192. package/src/stories/CTabLazy.stories.js +42 -42
  193. package/src/stories/CTable.stories.js +203 -203
  194. package/src/stories/CTabs.stories.js +36 -36
  195. package/src/stories/CTag.stories.js +37 -37
  196. package/src/stories/CTextarea.stories.js +32 -32
  197. package/src/stories/CTimeline.stories.js +26 -26
  198. package/src/stories/CToolTip.stories.js +27 -27
  199. package/src/stories/CUpload.stories.js +36 -36
  200. package/src/stories/Introduction.stories.mdx +207 -207
  201. package/src/stories/Page.vue +88 -88
  202. package/src/stories/assets/code-brackets.svg +0 -0
  203. package/src/stories/assets/colors.svg +0 -0
  204. package/src/stories/assets/comments.svg +0 -0
  205. package/src/stories/assets/direction.svg +0 -0
  206. package/src/stories/assets/flow.svg +0 -0
  207. package/src/stories/assets/plugin.svg +0 -0
  208. package/src/stories/assets/repo.svg +0 -0
  209. package/src/stories/assets/stackalt.svg +0 -0
  210. package/src/stories/header.css +26 -26
  211. package/src/stories/page.css +69 -69
  212. package/src/stories/utils.css +32 -32
  213. package/src/.DS_Store +0 -0
@@ -1,332 +1,332 @@
1
- <template>
2
- <div :class="`flex h-full ${isCol ? '' : 'flex-col'}`">
3
- <div class="flex items-center 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
- <label v-if="!isUploaded" class="text-sm text-gray-500">
13
- {{ hint }}
14
- </label>
15
- </div>
16
- <button
17
- type="button"
18
- class="inline-flex items-center rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
19
- @click="initFilestack()"
20
- :id="id"
21
- v-if="displayMode == 'overlay' && icon"
22
- >
23
- <c-icon
24
- :type="icon.type"
25
- :class="icon.class"
26
- :name="icon.name"
27
- :viewBox="icon.viewBox"
28
- ></c-icon>
29
- {{ buttonText }}
30
- </button>
31
- <button
32
- type="button"
33
- class="mt-1.5 flex h-full w-auto items-center justify-center rounded-lg border-2 border-dashed border-gray-300 px-9 py-14 text-center hover:border-gray-400 focus:outline-none"
34
- @click="initFilestack()"
35
- :id="id"
36
- v-if="displayMode == 'overlay' && !icon && !isAvatar && !isIconBtn"
37
- >
38
- <c-icon
39
- name="arrow-up"
40
- type="solid"
41
- cursorType="cursor-pointer"
42
- class="mr-1 h-5 w-5 flex-none text-indigo-600"
43
- viewBox="0 0 20 20"
44
- ></c-icon>
45
- <span class="text-sm font-medium text-indigo-900"> Upload </span>
46
- </button>
47
- <button
48
- type="button"
49
- class="group rounded-full p-2 text-gray-400 hover:bg-gray-200 hover:text-gray-500"
50
- @click="initFilestack()"
51
- :id="id"
52
- v-if="displayMode == 'overlay' && !icon && !isAvatar && isIconBtn"
53
- >
54
- <c-icon
55
- :name="isIconBtnName"
56
- :type="iconBtnType"
57
- class="h-5 w-5 flex-none text-gray-400 group-hover:text-gray-500"
58
- viewBox="0 0 20 20"
59
- cursorType="cursor-pointer"
60
- ></c-icon>
61
- </button>
62
- <div
63
- class="relative hidden h-full w-full overflow-hidden rounded-full lg:block"
64
- @click="initFilestack()"
65
- :id="id"
66
- v-if="displayMode == 'overlay' && !icon && isAvatar"
67
- >
68
- <img
69
- v-if="imageUrl"
70
- class="relative h-full w-full rounded-full object-cover"
71
- :src="imageUrl"
72
- />
73
- <c-avatar
74
- v-else
75
- size="very large"
76
- :nameInitials="shortName"
77
- :isDynamicallyColored="coloredAvatars"
78
- :rounded="true"
79
- ></c-avatar>
80
- <label
81
- class="absolute inset-0 flex h-full w-full cursor-pointer items-center justify-center bg-gray-900 bg-opacity-75 text-sm font-medium text-white opacity-0 focus-within:opacity-100 hover:opacity-100"
82
- >
83
- <c-icon
84
- v-if="openIcon"
85
- :name="openIcon.name"
86
- :type="openIcon.type"
87
- :class="openIcon.class"
88
- ></c-icon>
89
- <span>{{ uploadText }}</span>
90
- <span class="sr-only"> user photo</span>
91
- </label>
92
- </div>
93
- <div :class="filestackClasses" :id="filestackId"></div>
94
- <p v-if="!isValidate" class="mt-2 text-sm text-red-600">
95
- {{ errorMessage }}
96
- </p>
97
- <!-- description about the input field -->
98
- <p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
99
- {{ helpText }}
100
- </p>
101
- </div>
102
- </template>
103
-
104
- <script>
105
- import * as filestack from "filestack-js";
106
- import CIcon from "../CIcon/CIcon.vue";
107
- import CAvatar from "../CAvatar/CAvatar.vue";
108
-
109
- export default {
110
- name: "CUpload",
111
- components: {
112
- CIcon,
113
- CAvatar,
114
- },
115
- props: {
116
- id: {
117
- type: String,
118
- },
119
- buttonText: {
120
- type: String,
121
- default: "Upload",
122
- },
123
- isAvatar: {
124
- type: Boolean,
125
- default: false,
126
- },
127
- isIconBtn: {
128
- type: Boolean,
129
- default: false,
130
- },
131
- isIconBtnName: {
132
- type: String,
133
- default: "attachment-solid",
134
- },
135
- iconBtnType: {
136
- type: String,
137
- default: "solid",
138
- },
139
- shortName: {
140
- type: String,
141
- },
142
- imageUrl: {
143
- type: String,
144
- default: "",
145
- },
146
- icon: {
147
- type: Object,
148
- },
149
- fileSize: {
150
- type: String,
151
- },
152
- filestackId: {
153
- type: String,
154
- default: "filestack-uploader",
155
- },
156
- openIcon: {
157
- type: Object,
158
- },
159
- uploadText: {
160
- type: String,
161
- default: "Change",
162
- },
163
- hint: {
164
- type: String,
165
- default: "",
166
- },
167
- helpText: {
168
- type: String,
169
- },
170
- label: {
171
- type: String,
172
- default: "",
173
- },
174
- isValidate: { type: Boolean },
175
- errorMessage: {
176
- type: String,
177
- },
178
- filestackApiKey: {
179
- type: String,
180
- default: "",
181
- },
182
- filestackClasses: {
183
- type: String,
184
- default: "w-96 h-96",
185
- },
186
- url: {
187
- type: String,
188
- },
189
- maxFiles: {
190
- type: Number,
191
- default: 1,
192
- },
193
- onUploadSuccess: {
194
- type: Function,
195
- },
196
- aspectRatio: {
197
- type: Number,
198
- default: null,
199
- },
200
- onUploadOpen: {
201
- type: Function,
202
- },
203
- displayMode: {
204
- type: String,
205
- default: "inline",
206
- },
207
- isUploaded: {
208
- type: Boolean,
209
- default: false,
210
- },
211
- isCircle: {
212
- type: Boolean,
213
- default: false,
214
- },
215
- coloredAvatars: {
216
- type: Boolean,
217
- default: false,
218
- },
219
- uploadSources: {
220
- type: Array,
221
- default: () => ["local_file_system", "unsplash"],
222
- },
223
- isRequired: {
224
- type: Boolean,
225
- },
226
- isCol: {
227
- type: Boolean,
228
- },
229
- disableTransformer: {
230
- type: Boolean,
231
- default: false,
232
- },
233
- maxSize: {
234
- type: Number,
235
- default: null,
236
- },
237
- fileTypes: {
238
- type: Array,
239
- default: () => [],
240
- },
241
- policy: {
242
- type: String,
243
- default: "",
244
- },
245
- signature: {
246
- type: String,
247
- default: "",
248
- },
249
- hasSecureInitialisation: {
250
- type: Boolean,
251
- default: false,
252
- },
253
- },
254
- data() {
255
- return {};
256
- },
257
- methods: {
258
- initFilestack() {
259
- if (this.hasSecureInitialisation && !this.policy.length) {
260
- if (this.displayMode == "overlay") {
261
- this.$emit("fetchPolicyDetails");
262
- }
263
- return;
264
- }
265
- const client = this.hasSecureInitialisation
266
- ? filestack.init(this.filestackApiKey, {
267
- security: {
268
- policy: this.policy,
269
- signature: this.signature,
270
- },
271
- })
272
- : filestack.init(this.filestackApiKey);
273
-
274
- const options = {
275
- displayMode: this.displayMode,
276
- container: `#${this.filestackId}`,
277
- uploadInBackground: false,
278
- maxFiles: this.maxFiles,
279
- onOpen: (param) => this.$emit("onUploadOpen", param, "open"),
280
- onClose: (param) => this.$emit("onUploadOpen", param, "close"),
281
- onUploadDone: (res) => this.$emit("filestack-uploaded", res),
282
- fromSources: this.uploadSources,
283
- disableTransformer: this.disableTransformer,
284
- transformations: {
285
- crop: {
286
- aspectRatio: this.aspectRatio ? this.aspectRatio : 0,
287
- force: this.aspectRatio ? true : false,
288
- },
289
- circle: this.isCircle,
290
- },
291
- };
292
- if (this.maxSize) {
293
- options["maxSize"] = this.maxSize;
294
- }
295
- if (this.fileTypes && this.fileTypes.length > 0) {
296
- options["accept"] = this.fileTypes;
297
- }
298
- const picker = client.picker(options);
299
- picker.open();
300
- },
301
- },
302
- computed: {
303
- errorClasses() {
304
- return {
305
- "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
306
- this.isValidate == false,
307
- "border-gray-300 border-dashed": this.isValidate == true,
308
- };
309
- },
310
- },
311
- watch: {
312
- policy: {
313
- handler(newVal, oldVal) {
314
- if (
315
- this.hasSecureInitialisation &&
316
- newVal.length &&
317
- newVal !== oldVal
318
- ) {
319
- this.initFilestack();
320
- }
321
- },
322
- },
323
- },
324
- mounted() {
325
- if (this.displayMode == "inline") {
326
- this.initFilestack();
327
- }
328
- },
329
- };
330
- </script>
331
-
332
- <style></style>
1
+ <template>
2
+ <div :class="`flex h-full ${isCol ? '' : 'flex-col'}`">
3
+ <div class="flex items-center 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
+ <label v-if="!isUploaded" class="text-sm text-gray-500">
13
+ {{ hint }}
14
+ </label>
15
+ </div>
16
+ <button
17
+ type="button"
18
+ class="inline-flex items-center rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 shadow-sm hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
19
+ @click="initFilestack()"
20
+ :id="id"
21
+ v-if="displayMode == 'overlay' && icon"
22
+ >
23
+ <c-icon
24
+ :type="icon.type"
25
+ :class="icon.class"
26
+ :name="icon.name"
27
+ :viewBox="icon.viewBox"
28
+ ></c-icon>
29
+ {{ buttonText }}
30
+ </button>
31
+ <button
32
+ type="button"
33
+ class="mt-1.5 flex h-full w-auto items-center justify-center rounded-lg border-2 border-dashed border-gray-300 px-9 py-14 text-center hover:border-gray-400 focus:outline-none"
34
+ @click="initFilestack()"
35
+ :id="id"
36
+ v-if="displayMode == 'overlay' && !icon && !isAvatar && !isIconBtn"
37
+ >
38
+ <c-icon
39
+ name="arrow-up"
40
+ type="solid"
41
+ cursorType="cursor-pointer"
42
+ class="mr-1 h-5 w-5 flex-none text-indigo-600"
43
+ viewBox="0 0 20 20"
44
+ ></c-icon>
45
+ <span class="text-sm font-medium text-indigo-900"> Upload </span>
46
+ </button>
47
+ <button
48
+ type="button"
49
+ class="group rounded-full p-2 text-gray-400 hover:bg-gray-200 hover:text-gray-500"
50
+ @click="initFilestack()"
51
+ :id="id"
52
+ v-if="displayMode == 'overlay' && !icon && !isAvatar && isIconBtn"
53
+ >
54
+ <c-icon
55
+ :name="isIconBtnName"
56
+ :type="iconBtnType"
57
+ class="h-5 w-5 flex-none text-gray-400 group-hover:text-gray-500"
58
+ viewBox="0 0 20 20"
59
+ cursorType="cursor-pointer"
60
+ ></c-icon>
61
+ </button>
62
+ <div
63
+ class="relative hidden h-full w-full overflow-hidden rounded-full lg:block"
64
+ @click="initFilestack()"
65
+ :id="id"
66
+ v-if="displayMode == 'overlay' && !icon && isAvatar"
67
+ >
68
+ <img
69
+ v-if="imageUrl"
70
+ class="relative h-full w-full rounded-full object-cover"
71
+ :src="imageUrl"
72
+ />
73
+ <c-avatar
74
+ v-else
75
+ size="very large"
76
+ :nameInitials="shortName"
77
+ :isDynamicallyColored="coloredAvatars"
78
+ :rounded="true"
79
+ ></c-avatar>
80
+ <label
81
+ class="absolute inset-0 flex h-full w-full cursor-pointer items-center justify-center bg-gray-900 bg-opacity-75 text-sm font-medium text-white opacity-0 focus-within:opacity-100 hover:opacity-100"
82
+ >
83
+ <c-icon
84
+ v-if="openIcon"
85
+ :name="openIcon.name"
86
+ :type="openIcon.type"
87
+ :class="openIcon.class"
88
+ ></c-icon>
89
+ <span>{{ uploadText }}</span>
90
+ <span class="sr-only"> user photo</span>
91
+ </label>
92
+ </div>
93
+ <div :class="filestackClasses" :id="filestackId"></div>
94
+ <p v-if="!isValidate" class="mt-2 text-sm text-red-600">
95
+ {{ errorMessage }}
96
+ </p>
97
+ <!-- description about the input field -->
98
+ <p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
99
+ {{ helpText }}
100
+ </p>
101
+ </div>
102
+ </template>
103
+
104
+ <script>
105
+ import * as filestack from "filestack-js";
106
+ import CIcon from "../CIcon/CIcon.vue";
107
+ import CAvatar from "../CAvatar/CAvatar.vue";
108
+
109
+ export default {
110
+ name: "CUpload",
111
+ components: {
112
+ CIcon,
113
+ CAvatar,
114
+ },
115
+ props: {
116
+ id: {
117
+ type: String,
118
+ },
119
+ buttonText: {
120
+ type: String,
121
+ default: "Upload",
122
+ },
123
+ isAvatar: {
124
+ type: Boolean,
125
+ default: false,
126
+ },
127
+ isIconBtn: {
128
+ type: Boolean,
129
+ default: false,
130
+ },
131
+ isIconBtnName: {
132
+ type: String,
133
+ default: "attachment-solid",
134
+ },
135
+ iconBtnType: {
136
+ type: String,
137
+ default: "solid",
138
+ },
139
+ shortName: {
140
+ type: String,
141
+ },
142
+ imageUrl: {
143
+ type: String,
144
+ default: "",
145
+ },
146
+ icon: {
147
+ type: Object,
148
+ },
149
+ fileSize: {
150
+ type: String,
151
+ },
152
+ filestackId: {
153
+ type: String,
154
+ default: "filestack-uploader",
155
+ },
156
+ openIcon: {
157
+ type: Object,
158
+ },
159
+ uploadText: {
160
+ type: String,
161
+ default: "Change",
162
+ },
163
+ hint: {
164
+ type: String,
165
+ default: "",
166
+ },
167
+ helpText: {
168
+ type: String,
169
+ },
170
+ label: {
171
+ type: String,
172
+ default: "",
173
+ },
174
+ isValidate: { type: Boolean },
175
+ errorMessage: {
176
+ type: String,
177
+ },
178
+ filestackApiKey: {
179
+ type: String,
180
+ default: "",
181
+ },
182
+ filestackClasses: {
183
+ type: String,
184
+ default: "w-96 h-96",
185
+ },
186
+ url: {
187
+ type: String,
188
+ },
189
+ maxFiles: {
190
+ type: Number,
191
+ default: 1,
192
+ },
193
+ onUploadSuccess: {
194
+ type: Function,
195
+ },
196
+ aspectRatio: {
197
+ type: Number,
198
+ default: null,
199
+ },
200
+ onUploadOpen: {
201
+ type: Function,
202
+ },
203
+ displayMode: {
204
+ type: String,
205
+ default: "inline",
206
+ },
207
+ isUploaded: {
208
+ type: Boolean,
209
+ default: false,
210
+ },
211
+ isCircle: {
212
+ type: Boolean,
213
+ default: false,
214
+ },
215
+ coloredAvatars: {
216
+ type: Boolean,
217
+ default: false,
218
+ },
219
+ uploadSources: {
220
+ type: Array,
221
+ default: () => ["local_file_system", "unsplash"],
222
+ },
223
+ isRequired: {
224
+ type: Boolean,
225
+ },
226
+ isCol: {
227
+ type: Boolean,
228
+ },
229
+ disableTransformer: {
230
+ type: Boolean,
231
+ default: false,
232
+ },
233
+ maxSize: {
234
+ type: Number,
235
+ default: null,
236
+ },
237
+ fileTypes: {
238
+ type: Array,
239
+ default: () => [],
240
+ },
241
+ policy: {
242
+ type: String,
243
+ default: "",
244
+ },
245
+ signature: {
246
+ type: String,
247
+ default: "",
248
+ },
249
+ hasSecureInitialisation: {
250
+ type: Boolean,
251
+ default: false,
252
+ },
253
+ },
254
+ data() {
255
+ return {};
256
+ },
257
+ methods: {
258
+ initFilestack() {
259
+ if (this.hasSecureInitialisation && !this.policy.length) {
260
+ if (this.displayMode == "overlay") {
261
+ this.$emit("fetchPolicyDetails");
262
+ }
263
+ return;
264
+ }
265
+ const client = this.hasSecureInitialisation
266
+ ? filestack.init(this.filestackApiKey, {
267
+ security: {
268
+ policy: this.policy,
269
+ signature: this.signature,
270
+ },
271
+ })
272
+ : filestack.init(this.filestackApiKey);
273
+
274
+ const options = {
275
+ displayMode: this.displayMode,
276
+ container: `#${this.filestackId}`,
277
+ uploadInBackground: false,
278
+ maxFiles: this.maxFiles,
279
+ onOpen: (param) => this.$emit("onUploadOpen", param, "open"),
280
+ onClose: (param) => this.$emit("onUploadOpen", param, "close"),
281
+ onUploadDone: (res) => this.$emit("filestack-uploaded", res),
282
+ fromSources: this.uploadSources,
283
+ disableTransformer: this.disableTransformer,
284
+ transformations: {
285
+ crop: {
286
+ aspectRatio: this.aspectRatio ? this.aspectRatio : 0,
287
+ force: this.aspectRatio ? true : false,
288
+ },
289
+ circle: this.isCircle,
290
+ },
291
+ };
292
+ if (this.maxSize) {
293
+ options["maxSize"] = this.maxSize;
294
+ }
295
+ if (this.fileTypes && this.fileTypes.length > 0) {
296
+ options["accept"] = this.fileTypes;
297
+ }
298
+ const picker = client.picker(options);
299
+ picker.open();
300
+ },
301
+ },
302
+ computed: {
303
+ errorClasses() {
304
+ return {
305
+ "border-red-300 text-red-900 placeholder-red-300 focus:ring-red-500 focus:border-red-500":
306
+ this.isValidate == false,
307
+ "border-gray-300 border-dashed": this.isValidate == true,
308
+ };
309
+ },
310
+ },
311
+ watch: {
312
+ policy: {
313
+ handler(newVal, oldVal) {
314
+ if (
315
+ this.hasSecureInitialisation &&
316
+ newVal.length &&
317
+ newVal !== oldVal
318
+ ) {
319
+ this.initFilestack();
320
+ }
321
+ },
322
+ },
323
+ },
324
+ mounted() {
325
+ if (this.displayMode == "inline") {
326
+ this.initFilestack();
327
+ }
328
+ },
329
+ };
330
+ </script>
331
+
332
+ <style></style>
@@ -1,3 +1,3 @@
1
- import CUpload from './CUpload.vue'
2
-
1
+ import CUpload from './CUpload.vue'
2
+
3
3
  export default CUpload