classcard-ui 0.2.471 → 0.2.472

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 (173) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +61 -65
  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 +61 -65
  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 +81 -81
  10. package/src/App.vue +16 -16
  11. package/src/components/CAlerts/CAlerts.vue +70 -70
  12. package/src/components/CAlerts/index.js +2 -2
  13. package/src/components/CAnchorTabs/CAnchorTabs.vue +104 -104
  14. package/src/components/CAnchorTabs/index.js +2 -2
  15. package/src/components/CAnchorTag/CAnchorTag.vue +62 -62
  16. package/src/components/CAnchorTag/index.js +2 -2
  17. package/src/components/CAvatar/CAvatar.vue +89 -89
  18. package/src/components/CAvatar/index.js +2 -2
  19. package/src/components/CAvatarGroup/CAvatarGroup.vue +145 -145
  20. package/src/components/CAvatarGroup/index.js +2 -2
  21. package/src/components/CBasicTable/CBasicTable.vue +184 -184
  22. package/src/components/CBasicTable/index.js +2 -2
  23. package/src/components/CBreadcrumbs/CBreadcrumbs.vue +38 -38
  24. package/src/components/CBreadcrumbs/index.js +2 -2
  25. package/src/components/CButton/CButton.vue +148 -148
  26. package/src/components/CButton/index.js +2 -2
  27. package/src/components/CButtonGroup/CButtonGroup.vue +100 -100
  28. package/src/components/CButtonGroup/index.js +2 -2
  29. package/src/components/CButtonIcon/CButtonIcon.vue +108 -108
  30. package/src/components/CButtonIcon/index.js +2 -2
  31. package/src/components/CButtonLink/CButtonLink.vue +39 -39
  32. package/src/components/CButtonLink/index.js +2 -2
  33. package/src/components/CButtonSelect/CButtonSelect.vue +103 -103
  34. package/src/components/CButtonSelect/index.js +2 -2
  35. package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +168 -168
  36. package/src/components/CButtonWithDropdown/index.js +2 -2
  37. package/src/components/CCard/CCard.vue +49 -49
  38. package/src/components/CCard/index.js +2 -2
  39. package/src/components/CCheckbox/CCheckbox.vue +70 -70
  40. package/src/components/CCheckbox/index.js +2 -2
  41. package/src/components/CCollapsibleSection/CCollapsibleSection.vue +99 -99
  42. package/src/components/CCollapsibleSection/index.js +2 -2
  43. package/src/components/CColorDots/CColorDots.vue +35 -35
  44. package/src/components/CColorDots/index.js +3 -3
  45. package/src/components/CConfirmActionModal/CConfirmActionModal.vue +118 -118
  46. package/src/components/CConfirmActionModal/index.js +3 -3
  47. package/src/components/CDatepicker/CDatepicker.vue +134 -134
  48. package/src/components/CDatepicker/index.js +2 -2
  49. package/src/components/CDualSelect/CDualSelect.vue +193 -193
  50. package/src/components/CDualSelect/index.js +2 -2
  51. package/src/components/CEditor/CEditor.vue +91 -91
  52. package/src/components/CEditor/index.js +2 -2
  53. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +52 -52
  54. package/src/components/CFormSectionHeading/index.js +2 -2
  55. package/src/components/CGroupedSelect/CGroupedSelect.vue +212 -212
  56. package/src/components/CGroupedSelect/index.js +3 -3
  57. package/src/components/CIcon/CIcon.vue +72 -72
  58. package/src/components/CIcon/index.js +2 -2
  59. package/src/components/CIconDropdown/CIconDropdown.vue +94 -94
  60. package/src/components/CIconDropdown/index.js +2 -2
  61. package/src/components/CInput/CInput.vue +115 -115
  62. package/src/components/CInput/index.js +2 -2
  63. package/src/components/CInputAddon/CInputAddon.vue +199 -199
  64. package/src/components/CInputAddon/index.js +2 -2
  65. package/src/components/CInputEmail/CInputEmail.vue +84 -84
  66. package/src/components/CInputEmail/index.js +2 -2
  67. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  68. package/src/components/CModalHeading/index.js +2 -2
  69. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +39 -39
  70. package/src/components/CModuleHelpLinks/index.js +3 -3
  71. package/src/components/CMultiselect/CMultiselect.vue +311 -318
  72. package/src/components/CMultiselect/index.js +2 -2
  73. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  74. package/src/components/CMultiselectr/index.js +2 -2
  75. package/src/components/CPageHeading/CPageHeading.vue +56 -56
  76. package/src/components/CPageHeading/index.js +2 -2
  77. package/src/components/CPagination/CPagination.vue +202 -202
  78. package/src/components/CPagination/index.js +2 -2
  79. package/src/components/CPhoneNumber/CPhoneNumber.vue +62 -62
  80. package/src/components/CPhoneNumber/index.js +2 -2
  81. package/src/components/CRadio/CRadio.vue +70 -70
  82. package/src/components/CRadio/index.js +2 -2
  83. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  84. package/src/components/CRangeSlider/index.js +2 -2
  85. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +89 -89
  86. package/src/components/CReorderableStackedList/index.js +2 -2
  87. package/src/components/CSelect/CSelect.vue +283 -283
  88. package/src/components/CSelect/index.js +2 -2
  89. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  90. package/src/components/CSmallTimeline/index.js +2 -2
  91. package/src/components/CStackedList/CStackedList.vue +87 -87
  92. package/src/components/CStackedList/index.js +2 -2
  93. package/src/components/CStats/CStats.vue +88 -88
  94. package/src/components/CStats/index.js +2 -2
  95. package/src/components/CSwitch/CSwitch.vue +132 -132
  96. package/src/components/CSwitch/index.js +2 -2
  97. package/src/components/CTable/CTable.vue +495 -495
  98. package/src/components/CTable/index.js +2 -2
  99. package/src/components/CTabs/CTabs.vue +107 -107
  100. package/src/components/CTabs/index.js +2 -2
  101. package/src/components/CTag/CTag.vue +36 -36
  102. package/src/components/CTag/index.js +2 -2
  103. package/src/components/CTextarea/CTextarea.vue +85 -85
  104. package/src/components/CTextarea/index.js +2 -2
  105. package/src/components/CTimeline/CTimeline.vue +237 -237
  106. package/src/components/CTimeline/index.js +2 -2
  107. package/src/components/CUpload/CUpload.vue +196 -194
  108. package/src/components/CUpload/index.js +2 -2
  109. package/src/components/index.js +47 -47
  110. package/src/icons.js +244 -244
  111. package/src/main.js +22 -22
  112. package/src/stories/CAlerts.stories.js +37 -37
  113. package/src/stories/CAnchorTabs.stories.js +29 -29
  114. package/src/stories/CAnchorTag.stories.js +36 -36
  115. package/src/stories/CAvatar.stories.js +38 -38
  116. package/src/stories/CAvatarGroup.stories.js +100 -100
  117. package/src/stories/CBasicTable.stories.js +316 -316
  118. package/src/stories/CBreadcrumbs.stories.js +24 -24
  119. package/src/stories/CButton.stories.js +46 -46
  120. package/src/stories/CButtonGroup.stories.js +33 -33
  121. package/src/stories/CButtonIcon.stories.js +27 -27
  122. package/src/stories/CButtonLink.stories.js +24 -24
  123. package/src/stories/CButtonSelect.stories.js +32 -32
  124. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  125. package/src/stories/CCard.stories.js +30 -30
  126. package/src/stories/CCheckbox.stories.js +29 -29
  127. package/src/stories/CCollapsibleSection.stories.js +28 -28
  128. package/src/stories/CColorDots.stories.js +28 -28
  129. package/src/stories/CConfirmActionModal.stories.js +59 -59
  130. package/src/stories/CDatepicker.stories.js +30 -30
  131. package/src/stories/CDualSelect.stories.js +29 -29
  132. package/src/stories/CEditor.stories.js +30 -30
  133. package/src/stories/CFormSectionHeading.stories.js +34 -34
  134. package/src/stories/CGroupedSelect.stories.js +69 -69
  135. package/src/stories/CIcon.stories.js +26 -26
  136. package/src/stories/CIconDropdown.stories.js +39 -39
  137. package/src/stories/CInput.stories.js +36 -36
  138. package/src/stories/CInputAddon.stories.js +37 -37
  139. package/src/stories/CInputEmail.stories.js +27 -27
  140. package/src/stories/CModalHeading.stories.js +25 -25
  141. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  142. package/src/stories/CMultiselect.stories.js +97 -97
  143. package/src/stories/CMultiselectr.stories.js +23 -23
  144. package/src/stories/CPageHeading.stories.js +32 -32
  145. package/src/stories/CPagination.stories.js +30 -30
  146. package/src/stories/CPhoneNumber.stories.js +29 -29
  147. package/src/stories/CRadio.stories.js +36 -36
  148. package/src/stories/CRangeSlider.stories.js +23 -23
  149. package/src/stories/CReorderableStackedList.stories.js +23 -23
  150. package/src/stories/CSelect.stories.js +50 -50
  151. package/src/stories/CSmallTimeline.stories.js +26 -26
  152. package/src/stories/CStackedList.stories.js +37 -37
  153. package/src/stories/CStats.stories.js +33 -33
  154. package/src/stories/CSwitch.stories.js +28 -28
  155. package/src/stories/CTable.stories.js +77 -77
  156. package/src/stories/CTabs.stories.js +29 -29
  157. package/src/stories/CTag.stories.js +23 -23
  158. package/src/stories/CTextarea.stories.js +32 -32
  159. package/src/stories/CTimeline.stories.js +26 -26
  160. package/src/stories/CUpload.stories.js +36 -36
  161. package/src/stories/Introduction.stories.mdx +207 -207
  162. package/src/stories/Page.vue +88 -88
  163. package/src/stories/assets/code-brackets.svg +0 -0
  164. package/src/stories/assets/colors.svg +0 -0
  165. package/src/stories/assets/comments.svg +0 -0
  166. package/src/stories/assets/direction.svg +0 -0
  167. package/src/stories/assets/flow.svg +0 -0
  168. package/src/stories/assets/plugin.svg +0 -0
  169. package/src/stories/assets/repo.svg +0 -0
  170. package/src/stories/assets/stackalt.svg +0 -0
  171. package/src/stories/header.css +26 -26
  172. package/src/stories/page.css +69 -69
  173. package/src/stories/utils.css +17 -17
@@ -1,212 +1,212 @@
1
- <template>
2
- <div>
3
- <div
4
- v-if="showDropDown && options.length > 0"
5
- class="fixed inset-0"
6
- @click="closeDropDown()"
7
- aria-hidden="true"
8
- ></div>
9
- <label v-if="label" class="block text-sm font-medium text-gray-700">
10
- {{ label }}
11
- </label>
12
- <div class="relative mt-1">
13
- <div class="relative">
14
- <input
15
- type="text"
16
- class="focus:outline-none relative w-full cursor-default rounded-md border border-gray-300 bg-white py-2 pl-3 pr-10 text-left shadow-sm focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 disabled:pointer-events-none disabled:opacity-50 sm:text-sm"
17
- aria-haspopup="listbox"
18
- aria-expanded="true"
19
- aria-labelledby="listbox-label"
20
- :value="inputValue"
21
- :placeholder="placeholder"
22
- @focus="openDropDown()"
23
- @input="onInput"
24
- :disabled="disabled"
25
- />
26
- <span class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
27
- <svg
28
- class="h-5 w-5 animate-spin text-gray-400"
29
- xmlns="http://www.w3.org/2000/svg"
30
- fill="none"
31
- viewBox="0 0 24 24"
32
- v-if="isSearching"
33
- >
34
- <circle
35
- class="opacity-25"
36
- cx="12"
37
- cy="12"
38
- r="10"
39
- stroke="currentColor"
40
- stroke-width="4"
41
- ></circle>
42
- <path
43
- class="opacity-75"
44
- fill="currentColor"
45
- d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
46
- ></path>
47
- </svg>
48
- <!-- Heroicon name: solid/selector -->
49
- <svg
50
- class="h-5 w-5 text-gray-400"
51
- xmlns="http://www.w3.org/2000/svg"
52
- viewBox="0 0 20 20"
53
- fill="currentColor"
54
- aria-hidden="true"
55
- v-if="!isSearching"
56
- >
57
- <path
58
- fill-rule="evenodd"
59
- d="M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z"
60
- clip-rule="evenodd"
61
- />
62
- </svg>
63
- </span>
64
- </div>
65
- <!--
66
- Select popover, show/hide based on select state.
67
-
68
- Entering: ""
69
- From: ""
70
- To: ""
71
- Leaving: "transition ease-in duration-100"
72
- From: "opacity-100"
73
- To: "opacity-0"
74
- -->
75
- <ul
76
- class="ring-black focus:outline-none absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-opacity-5 sm:text-sm"
77
- tabindex="-1"
78
- role="listbox"
79
- aria-labelledby="listbox-label"
80
- aria-activedescendant="listbox-option-3"
81
- v-if="showDropDown && options.length > 0"
82
- >
83
- <!--
84
- Select option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.
85
-
86
- Highlighted: "text-white bg-indigo-600", Not Highlighted: "text-gray-900"
87
- -->
88
-
89
- <span v-for="option in options" :key="option.id">
90
- <li
91
- class="relative cursor-default select-none py-2 pl-3 pr-9 text-left bg-gray-100 text-xs font-semibold text-gray-900"
92
- role="option"
93
- >
94
- <span class="block truncate">
95
- {{ option.label }}
96
- </span>
97
- </li>
98
- <li
99
- class="group relative cursor-default select-none py-2 pl-3 pr-9 text-left text-gray-900 hover:bg-indigo-600 hover:text-white"
100
- v-for="subOption in option.options"
101
- :key="subOption.id"
102
- role="option"
103
- @click="handleOptionClick(subOption)"
104
- >
105
- <!-- Selected: "font-semibold", Not Selected: "font-normal" -->
106
- <span
107
- :class="[
108
- subOption.label === value.label ? 'font-semibold' : 'font-normal',
109
- ' block break-words',
110
- ]"
111
- >
112
- {{ subOption.label }}
113
- </span>
114
-
115
- <!--
116
- Checkmark, only display for selected option.
117
-
118
- Highlighted: "text-white", Not Highlighted: "text-indigo-600"
119
- -->
120
- <span
121
- class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 group-hover:text-white"
122
- v-if="subOption.label === value.label"
123
- >
124
- <!-- Heroicon name: solid/check -->
125
- <svg
126
- class="h-5 w-5"
127
- xmlns="http://www.w3.org/2000/svg"
128
- viewBox="0 0 20 20"
129
- fill="currentColor"
130
- aria-hidden="true"
131
- >
132
- <path
133
- fill-rule="evenodd"
134
- d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
135
- clip-rule="evenodd"
136
- />
137
- </svg>
138
- </span>
139
- </li>
140
- </span>
141
-
142
- <!-- More items... -->
143
- </ul>
144
- </div>
145
- <p v-if="isError" class="mt-2 text-left text-sm text-red-600">
146
- {{ errorMessage }}
147
- </p>
148
- </div>
149
- </template>
150
-
151
- <script>
152
- import { debounce } from "lodash-es";
153
-
154
- export default {
155
- name: "CGroupedSelect",
156
- props: {
157
- label: String,
158
- options: Array,
159
- value: Object,
160
- placeholder: String,
161
- isSearching: Boolean,
162
- disabled: { type: Boolean, default: false },
163
- isError: { type: Boolean, default: false },
164
- errorMessage: {
165
- type: String,
166
- default: "This field cannot be empty",
167
- },
168
- },
169
- data() {
170
- return {
171
- showDropDown: false,
172
- inputValue: "",
173
- };
174
- },
175
- methods: {
176
- onInput(e) {
177
- this.inputValue = e.target.value;
178
- this.emitSearch(e.target.value);
179
- },
180
- emitSearch: debounce(function (value) {
181
- if (value !== this.value.label) {
182
- this.$emit("search", value);
183
- } else {
184
- this.$emit("search", "");
185
- }
186
- }, 500),
187
- handleOptionClick(option) {
188
- this.inputValue = option.label;
189
- this.closeDropDown();
190
- this.$emit("input", option);
191
- },
192
- closeDropDown() {
193
- this.inputValue = this.value.label;
194
- this.showDropDown = false;
195
- },
196
- openDropDown() {
197
- this.showDropDown = true;
198
- this.emitSearch("");
199
- },
200
- },
201
- watch: {
202
- value(newValue) {
203
- this.inputValue = newValue.label;
204
- },
205
- },
206
- mounted() {
207
- this.inputValue = this.value.label;
208
- },
209
- };
210
- </script>
211
-
212
- <style></style>
1
+ <template>
2
+ <div>
3
+ <div
4
+ v-if="showDropDown && options.length > 0"
5
+ class="fixed inset-0"
6
+ @click="closeDropDown()"
7
+ aria-hidden="true"
8
+ ></div>
9
+ <label v-if="label" class="block text-sm font-medium text-gray-700">
10
+ {{ label }}
11
+ </label>
12
+ <div class="relative mt-1">
13
+ <div class="relative">
14
+ <input
15
+ type="text"
16
+ class="focus:outline-none relative w-full cursor-default rounded-md border border-gray-300 bg-white py-2 pl-3 pr-10 text-left shadow-sm focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 disabled:pointer-events-none disabled:opacity-50 sm:text-sm"
17
+ aria-haspopup="listbox"
18
+ aria-expanded="true"
19
+ aria-labelledby="listbox-label"
20
+ :value="inputValue"
21
+ :placeholder="placeholder"
22
+ @focus="openDropDown()"
23
+ @input="onInput"
24
+ :disabled="disabled"
25
+ />
26
+ <span class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
27
+ <svg
28
+ class="h-5 w-5 animate-spin text-gray-400"
29
+ xmlns="http://www.w3.org/2000/svg"
30
+ fill="none"
31
+ viewBox="0 0 24 24"
32
+ v-if="isSearching"
33
+ >
34
+ <circle
35
+ class="opacity-25"
36
+ cx="12"
37
+ cy="12"
38
+ r="10"
39
+ stroke="currentColor"
40
+ stroke-width="4"
41
+ ></circle>
42
+ <path
43
+ class="opacity-75"
44
+ fill="currentColor"
45
+ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
46
+ ></path>
47
+ </svg>
48
+ <!-- Heroicon name: solid/selector -->
49
+ <svg
50
+ class="h-5 w-5 text-gray-400"
51
+ xmlns="http://www.w3.org/2000/svg"
52
+ viewBox="0 0 20 20"
53
+ fill="currentColor"
54
+ aria-hidden="true"
55
+ v-if="!isSearching"
56
+ >
57
+ <path
58
+ fill-rule="evenodd"
59
+ d="M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z"
60
+ clip-rule="evenodd"
61
+ />
62
+ </svg>
63
+ </span>
64
+ </div>
65
+ <!--
66
+ Select popover, show/hide based on select state.
67
+
68
+ Entering: ""
69
+ From: ""
70
+ To: ""
71
+ Leaving: "transition ease-in duration-100"
72
+ From: "opacity-100"
73
+ To: "opacity-0"
74
+ -->
75
+ <ul
76
+ class="ring-black focus:outline-none absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-opacity-5 sm:text-sm"
77
+ tabindex="-1"
78
+ role="listbox"
79
+ aria-labelledby="listbox-label"
80
+ aria-activedescendant="listbox-option-3"
81
+ v-if="showDropDown && options.length > 0"
82
+ >
83
+ <!--
84
+ Select option, manage highlight styles based on mouseenter/mouseleave and keyboard navigation.
85
+
86
+ Highlighted: "text-white bg-indigo-600", Not Highlighted: "text-gray-900"
87
+ -->
88
+
89
+ <span v-for="option in options" :key="option.id">
90
+ <li
91
+ class="relative cursor-default select-none py-2 pl-3 pr-9 text-left bg-gray-100 text-xs font-semibold text-gray-900"
92
+ role="option"
93
+ >
94
+ <span class="block truncate">
95
+ {{ option.label }}
96
+ </span>
97
+ </li>
98
+ <li
99
+ class="group relative cursor-default select-none py-2 pl-3 pr-9 text-left text-gray-900 hover:bg-indigo-600 hover:text-white"
100
+ v-for="subOption in option.options"
101
+ :key="subOption.id"
102
+ role="option"
103
+ @click="handleOptionClick(subOption)"
104
+ >
105
+ <!-- Selected: "font-semibold", Not Selected: "font-normal" -->
106
+ <span
107
+ :class="[
108
+ subOption.label === value.label ? 'font-semibold' : 'font-normal',
109
+ ' block break-words',
110
+ ]"
111
+ >
112
+ {{ subOption.label }}
113
+ </span>
114
+
115
+ <!--
116
+ Checkmark, only display for selected option.
117
+
118
+ Highlighted: "text-white", Not Highlighted: "text-indigo-600"
119
+ -->
120
+ <span
121
+ class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 group-hover:text-white"
122
+ v-if="subOption.label === value.label"
123
+ >
124
+ <!-- Heroicon name: solid/check -->
125
+ <svg
126
+ class="h-5 w-5"
127
+ xmlns="http://www.w3.org/2000/svg"
128
+ viewBox="0 0 20 20"
129
+ fill="currentColor"
130
+ aria-hidden="true"
131
+ >
132
+ <path
133
+ fill-rule="evenodd"
134
+ d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"
135
+ clip-rule="evenodd"
136
+ />
137
+ </svg>
138
+ </span>
139
+ </li>
140
+ </span>
141
+
142
+ <!-- More items... -->
143
+ </ul>
144
+ </div>
145
+ <p v-if="isError" class="mt-2 text-left text-sm text-red-600">
146
+ {{ errorMessage }}
147
+ </p>
148
+ </div>
149
+ </template>
150
+
151
+ <script>
152
+ import { debounce } from "lodash-es";
153
+
154
+ export default {
155
+ name: "CGroupedSelect",
156
+ props: {
157
+ label: String,
158
+ options: Array,
159
+ value: Object,
160
+ placeholder: String,
161
+ isSearching: Boolean,
162
+ disabled: { type: Boolean, default: false },
163
+ isError: { type: Boolean, default: false },
164
+ errorMessage: {
165
+ type: String,
166
+ default: "This field cannot be empty",
167
+ },
168
+ },
169
+ data() {
170
+ return {
171
+ showDropDown: false,
172
+ inputValue: "",
173
+ };
174
+ },
175
+ methods: {
176
+ onInput(e) {
177
+ this.inputValue = e.target.value;
178
+ this.emitSearch(e.target.value);
179
+ },
180
+ emitSearch: debounce(function (value) {
181
+ if (value !== this.value.label) {
182
+ this.$emit("search", value);
183
+ } else {
184
+ this.$emit("search", "");
185
+ }
186
+ }, 500),
187
+ handleOptionClick(option) {
188
+ this.inputValue = option.label;
189
+ this.closeDropDown();
190
+ this.$emit("input", option);
191
+ },
192
+ closeDropDown() {
193
+ this.inputValue = this.value.label;
194
+ this.showDropDown = false;
195
+ },
196
+ openDropDown() {
197
+ this.showDropDown = true;
198
+ this.emitSearch("");
199
+ },
200
+ },
201
+ watch: {
202
+ value(newValue) {
203
+ this.inputValue = newValue.label;
204
+ },
205
+ },
206
+ mounted() {
207
+ this.inputValue = this.value.label;
208
+ },
209
+ };
210
+ </script>
211
+
212
+ <style></style>
@@ -1,3 +1,3 @@
1
- import CGroupedSelect from "./CGroupedSelect.vue";
2
-
3
- export default CGroupedSelect;
1
+ import CGroupedSelect from "./CGroupedSelect.vue";
2
+
3
+ export default CGroupedSelect;
@@ -1,72 +1,72 @@
1
- <template>
2
- <div>
3
- <svg
4
- v-if="name == 'loader'"
5
- :class="classes"
6
- class="animate-spin"
7
- xmlns="http://www.w3.org/2000/svg"
8
- fill="none"
9
- viewBox="0 0 24 24"
10
- >
11
- <circle
12
- class="opacity-25"
13
- cx="12"
14
- cy="12"
15
- r="10"
16
- stroke="currentColor"
17
- stroke-width="4"
18
- ></circle>
19
- <path class="opacity-75" fill="currentColor" :d="path"></path>
20
- </svg>
21
- <svg
22
- v-if="name !== 'loader' && type == 'solid'"
23
- :class="(classes ? classes : '') + (cursorType ? cursorType : ' cursor-pointer')"
24
- :viewBox="viewBox"
25
- fill="currentColor"
26
- fill-rule="evenodd"
27
- >
28
- <path :d="path" />
29
- </svg>
30
- <svg
31
- v-if="name !== 'loader' && type == 'outline'"
32
- :class="(classes ? classes : '') + (cursorType ? cursorType : ' cursor-pointer')"
33
- viewBox="0 0 24 24"
34
- fill="none"
35
- stroke="currentColor"
36
- >
37
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" :d="path" />
38
- </svg>
39
- </div>
40
- </template>
41
-
42
- <script>
43
- import icons from "../../icons.js";
44
- export default {
45
- name: "CIcon",
46
- props: {
47
- name: {
48
- type: String,
49
- required: true,
50
- },
51
- classes: {
52
- type: String,
53
- },
54
- type: {
55
- type: String,
56
- },
57
- viewBox: {
58
- type: String,
59
- default: "0 0 20 20",
60
- },
61
- cursorType: {
62
- type: String,
63
- default: "cursor-pointer",
64
- },
65
- },
66
- computed: {
67
- path() {
68
- return icons[this.name];
69
- },
70
- },
71
- };
72
- </script>
1
+ <template>
2
+ <div>
3
+ <svg
4
+ v-if="name == 'loader'"
5
+ :class="classes"
6
+ class="animate-spin"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ fill="none"
9
+ viewBox="0 0 24 24"
10
+ >
11
+ <circle
12
+ class="opacity-25"
13
+ cx="12"
14
+ cy="12"
15
+ r="10"
16
+ stroke="currentColor"
17
+ stroke-width="4"
18
+ ></circle>
19
+ <path class="opacity-75" fill="currentColor" :d="path"></path>
20
+ </svg>
21
+ <svg
22
+ v-if="name !== 'loader' && type == 'solid'"
23
+ :class="(classes ? classes : '') + (cursorType ? cursorType : ' cursor-pointer')"
24
+ :viewBox="viewBox"
25
+ fill="currentColor"
26
+ fill-rule="evenodd"
27
+ >
28
+ <path :d="path" />
29
+ </svg>
30
+ <svg
31
+ v-if="name !== 'loader' && type == 'outline'"
32
+ :class="(classes ? classes : '') + (cursorType ? cursorType : ' cursor-pointer')"
33
+ viewBox="0 0 24 24"
34
+ fill="none"
35
+ stroke="currentColor"
36
+ >
37
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" :d="path" />
38
+ </svg>
39
+ </div>
40
+ </template>
41
+
42
+ <script>
43
+ import icons from "../../icons.js";
44
+ export default {
45
+ name: "CIcon",
46
+ props: {
47
+ name: {
48
+ type: String,
49
+ required: true,
50
+ },
51
+ classes: {
52
+ type: String,
53
+ },
54
+ type: {
55
+ type: String,
56
+ },
57
+ viewBox: {
58
+ type: String,
59
+ default: "0 0 20 20",
60
+ },
61
+ cursorType: {
62
+ type: String,
63
+ default: "cursor-pointer",
64
+ },
65
+ },
66
+ computed: {
67
+ path() {
68
+ return icons[this.name];
69
+ },
70
+ },
71
+ };
72
+ </script>
@@ -1,3 +1,3 @@
1
- import CIcon from './CIcon.vue'
2
-
1
+ import CIcon from './CIcon.vue'
2
+
3
3
  export default CIcon