classcard-ui 0.2.1497 → 0.2.1498-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.
Files changed (216) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +181 -142
  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 +181 -142
  6. package/dist/classcard-ui.umd.js.map +1 -1
  7. package/dist/classcard-ui.umd.min.js +2 -2
  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 -232
  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 +208 -208
  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 +137 -137
  61. package/src/components/CEditor/index.js +6 -6
  62. package/src/components/CEditor/quill-font-setup.js +133 -133
  63. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +76 -76
  64. package/src/components/CFormSectionHeading/index.js +2 -2
  65. package/src/components/CGroupedFilterDropdown/CGroupedFilterDropdown.vue +331 -331
  66. package/src/components/CGroupedFilterDropdown/index.js +2 -2
  67. package/src/components/CGroupedSelect/CGroupedSelect.vue +393 -393
  68. package/src/components/CGroupedSelect/index.js +3 -3
  69. package/src/components/CIcon/CIcon.vue +112 -112
  70. package/src/components/CIcon/index.js +2 -2
  71. package/src/components/CIconDropdown/CIconDropdown.vue +206 -206
  72. package/src/components/CIconDropdown/index.js +2 -2
  73. package/src/components/CIconSelect/CIconSelect.vue +182 -182
  74. package/src/components/CIconSelect/index.js +3 -3
  75. package/src/components/CInput/CInput.vue +173 -173
  76. package/src/components/CInput/index.js +2 -2
  77. package/src/components/CInputAddon/CInputAddon.vue +302 -297
  78. package/src/components/CInputAddon/index.js +2 -2
  79. package/src/components/CInputEmail/CInputEmail.vue +107 -107
  80. package/src/components/CInputEmail/index.js +2 -2
  81. package/src/components/CInsetTabs/CInsetTabs.vue +141 -141
  82. package/src/components/CInsetTabs/index.js +3 -3
  83. package/src/components/CLinearProgressBar/CLinearProgressBar.vue +35 -35
  84. package/src/components/CLinearProgressBar/index.js +2 -2
  85. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  86. package/src/components/CModalHeading/index.js +2 -2
  87. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +88 -88
  88. package/src/components/CModuleHelpLinks/index.js +3 -3
  89. package/src/components/CMultiselect/CMultiselect.vue +1307 -1307
  90. package/src/components/CMultiselect/index.js +2 -2
  91. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  92. package/src/components/CMultiselectr/index.js +2 -2
  93. package/src/components/CPageHeading/CPageHeading.vue +83 -83
  94. package/src/components/CPageHeading/index.js +2 -2
  95. package/src/components/CPagination/CPagination.vue +239 -239
  96. package/src/components/CPagination/index.js +2 -2
  97. package/src/components/CPhoneNumber/CPhoneNumber.vue +213 -213
  98. package/src/components/CPhoneNumber/index.js +2 -2
  99. package/src/components/CProgress/CProgress.vue +91 -91
  100. package/src/components/CProgress/index.js +2 -2
  101. package/src/components/CRadio/CRadio.vue +197 -197
  102. package/src/components/CRadio/index.js +2 -2
  103. package/src/components/CRadioGroup/CRadioGroup.vue +96 -96
  104. package/src/components/CRadioGroup/index.js +2 -2
  105. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  106. package/src/components/CRangeSlider/index.js +2 -2
  107. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  108. package/src/components/CReorderableStackedList/index.js +2 -2
  109. package/src/components/CSelect/CSelect.vue +1216 -1216
  110. package/src/components/CSelect/index.js +2 -2
  111. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  112. package/src/components/CSmallTimeline/index.js +2 -2
  113. package/src/components/CStackedList/CStackedList.vue +162 -162
  114. package/src/components/CStackedList/index.js +2 -2
  115. package/src/components/CStats/CStats.vue +157 -157
  116. package/src/components/CStats/index.js +2 -2
  117. package/src/components/CSwitch/CSwitch.vue +200 -200
  118. package/src/components/CSwitch/index.js +2 -2
  119. package/src/components/CTabLazy/CTabLazy.vue +83 -83
  120. package/src/components/CTabLazy/index.js +2 -2
  121. package/src/components/CTable/CTable.vue +1114 -1114
  122. package/src/components/CTable/index.js +2 -2
  123. package/src/components/CTabs/CTabs.vue +250 -250
  124. package/src/components/CTabs/index.js +2 -2
  125. package/src/components/CTag/CTag.vue +109 -109
  126. package/src/components/CTag/index.js +2 -2
  127. package/src/components/CTextarea/CTextarea.vue +118 -118
  128. package/src/components/CTextarea/index.js +2 -2
  129. package/src/components/CTimeline/CTimeline.vue +237 -237
  130. package/src/components/CTimeline/index.js +2 -2
  131. package/src/components/CTokenEditor/CTokenEditor.vue +804 -804
  132. package/src/components/CTokenEditor/index.js +3 -3
  133. package/src/components/CToolTip/CToolTip.vue +108 -108
  134. package/src/components/CToolTip/index.js +3 -3
  135. package/src/components/CUpload/CUpload.vue +332 -332
  136. package/src/components/CUpload/index.js +2 -2
  137. package/src/components/NumberAnimator.vue +112 -112
  138. package/src/components/index.js +60 -60
  139. package/src/helper.js +8 -8
  140. package/src/icons.js +833 -833
  141. package/src/main.js +22 -22
  142. package/src/stories/CAlertModal.stories.js +30 -30
  143. package/src/stories/CAlerts.stories.js +39 -39
  144. package/src/stories/CAnchorTabs.stories.js +29 -29
  145. package/src/stories/CAnchorTag.stories.js +38 -38
  146. package/src/stories/CAvatar.stories.js +38 -38
  147. package/src/stories/CAvatarGroup.stories.js +136 -136
  148. package/src/stories/CBasicTable.stories.js +316 -316
  149. package/src/stories/CBreadcrumbs.stories.js +24 -24
  150. package/src/stories/CButton.stories.js +49 -49
  151. package/src/stories/CButtonGroup.stories.js +43 -43
  152. package/src/stories/CButtonIcon.stories.js +27 -27
  153. package/src/stories/CButtonLink.stories.js +24 -24
  154. package/src/stories/CButtonSelect.stories.js +44 -44
  155. package/src/stories/CButtonSelectBorder.stories.js +56 -56
  156. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  157. package/src/stories/CCalendar.stories.js +16 -16
  158. package/src/stories/CCard.stories.js +30 -30
  159. package/src/stories/CCheckbox.stories.js +38 -38
  160. package/src/stories/CCircularButton.stories.js +29 -29
  161. package/src/stories/CCollapsibleSection.stories.js +29 -29
  162. package/src/stories/CColorDots.stories.js +37 -37
  163. package/src/stories/CConfirmActionModal.stories.js +67 -67
  164. package/src/stories/CDatepicker.stories.js +31 -31
  165. package/src/stories/CDualSelect.stories.js +29 -29
  166. package/src/stories/CEditor.stories.js +36 -36
  167. package/src/stories/CFormSectionHeading.stories.js +37 -37
  168. package/src/stories/CGroupedFilterDropdown.stories.js +131 -131
  169. package/src/stories/CGroupedSelect.stories.js +103 -103
  170. package/src/stories/CIcon.stories.js +31 -31
  171. package/src/stories/CIconDropdown.stories.js +52 -52
  172. package/src/stories/CIconSelect.stories.js +45 -45
  173. package/src/stories/CInput.stories.js +36 -36
  174. package/src/stories/CInputAddon.stories.js +37 -37
  175. package/src/stories/CInputEmail.stories.js +27 -27
  176. package/src/stories/CInsetTabs.stories.js +48 -48
  177. package/src/stories/CLinearProgressBar.stories.js +22 -22
  178. package/src/stories/CModalHeading.stories.js +25 -25
  179. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  180. package/src/stories/CMultiselect.stories.js +146 -146
  181. package/src/stories/CMultiselectr.stories.js +23 -23
  182. package/src/stories/CPageHeading.stories.js +32 -32
  183. package/src/stories/CPagination.stories.js +30 -30
  184. package/src/stories/CPhoneNumber.stories.js +37 -37
  185. package/src/stories/CProgress.stories.js +23 -23
  186. package/src/stories/CRadio.stories.js +44 -44
  187. package/src/stories/CRadioGroup.stories.js +51 -51
  188. package/src/stories/CRangeSlider.stories.js +23 -23
  189. package/src/stories/CReorderableStackedList.stories.js +23 -23
  190. package/src/stories/CSelect.stories.js +157 -157
  191. package/src/stories/CSmallTimeline.stories.js +26 -26
  192. package/src/stories/CStackedList.stories.js +37 -37
  193. package/src/stories/CStats.stories.js +53 -53
  194. package/src/stories/CSwitch.stories.js +28 -28
  195. package/src/stories/CTabLazy.stories.js +42 -42
  196. package/src/stories/CTable.stories.js +203 -203
  197. package/src/stories/CTabs.stories.js +36 -36
  198. package/src/stories/CTag.stories.js +37 -37
  199. package/src/stories/CTextarea.stories.js +32 -32
  200. package/src/stories/CTimeline.stories.js +26 -26
  201. package/src/stories/CTokenEditor.stories.js +136 -136
  202. package/src/stories/CToolTip.stories.js +27 -27
  203. package/src/stories/CUpload.stories.js +36 -36
  204. package/src/stories/Introduction.stories.mdx +207 -207
  205. package/src/stories/Page.vue +88 -88
  206. package/src/stories/assets/code-brackets.svg +0 -0
  207. package/src/stories/assets/colors.svg +0 -0
  208. package/src/stories/assets/comments.svg +0 -0
  209. package/src/stories/assets/direction.svg +0 -0
  210. package/src/stories/assets/flow.svg +0 -0
  211. package/src/stories/assets/plugin.svg +0 -0
  212. package/src/stories/assets/repo.svg +0 -0
  213. package/src/stories/assets/stackalt.svg +0 -0
  214. package/src/stories/header.css +26 -26
  215. package/src/stories/page.css +69 -69
  216. package/src/stories/utils.css +32 -32
@@ -1,208 +1,208 @@
1
- <template>
2
- <div>
3
- <span class="relative inline-flex rounded-md shadow-sm">
4
- <button
5
- :type="type"
6
- @click="handleButtonClick"
7
- :class="[classes, isDisabled ? 'opacity-50' : '']"
8
- class="relative h-9 inline-flex items-center rounded-l-md px-3 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
9
- :disabled="isDisabled"
10
- :id="id"
11
- >
12
- <c-icon v-if="isLoading" class="mr-2 h-4 w-4" name="loader"></c-icon>
13
- {{ selectedValue ? selectedValue : label }}
14
- </button>
15
- <span class="relative -ml-px block" ref="dropdownTrigger">
16
- <button
17
- @click="toggleDropdown = !toggleDropdown"
18
- @blur="close()"
19
- :type="type"
20
- :class="[
21
- classes,
22
- isDisabled || isDropdownDisabled ? 'opacity-50' : '',
23
- ]"
24
- class="relative h-9 inline-flex items-center rounded-r-md px-2 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
25
- :disabled="isDisabled || isDropdownDisabled"
26
- :id="id + '_button_dropdown'"
27
- >
28
- <span class="sr-only">Open options</span>
29
- <c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
30
- </button>
31
- <div
32
- v-if="toggleDropdown"
33
- :class="[
34
- dropdownPositionClass,
35
- dropdownMenuClass,
36
- 'absolute z-10 w-56 rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5',
37
- ]"
38
- >
39
- <div
40
- class="py-1"
41
- role="menu"
42
- aria-orientation="vertical"
43
- aria-labelledby="option-menu"
44
- >
45
- <li
46
- v-for="item in items"
47
- v-bind:key="item.items"
48
- @mousedown="selectOption($event, item.value)"
49
- class="block cursor-pointer px-3 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
50
- role="menuitem"
51
- :id="getActionIDFn(item.secondaryText)"
52
- >
53
- {{ item.text }}
54
- </li>
55
- </div>
56
- </div>
57
- </span>
58
- </span>
59
- </div>
60
- </template>
61
-
62
- <script>
63
- import { getActionID } from "../../helper";
64
- import CIcon from "../CIcon/CIcon.vue";
65
-
66
- export default {
67
- name: "CButtonWithDropdown",
68
- components: { CIcon },
69
- props: {
70
- label: {
71
- type: String,
72
- required: true,
73
- },
74
- id: {
75
- type: String,
76
- },
77
- type: {
78
- type: String,
79
- default: "secondary",
80
- },
81
- value: {
82
- type: String,
83
- },
84
- items: {
85
- type: Array,
86
- required: true,
87
- },
88
- dropdownPositionClass: {
89
- type: String,
90
- },
91
- isLoading: {
92
- type: Boolean,
93
- default: false,
94
- },
95
- isDisabled: {
96
- type: Boolean,
97
- default: false,
98
- },
99
- isDropdownDisabled: {
100
- type: Boolean,
101
- default: false,
102
- },
103
- },
104
- data() {
105
- return {
106
- toggleDropdown: false,
107
- selectedValue: this.value,
108
- dropdownMenuClass: "top-full right-0 mt-2 origin-top-right",
109
- };
110
- },
111
- computed: {
112
- classes() {
113
- return {
114
- "border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
115
- this.type == "primary",
116
- "border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
117
- this.type == "secondary",
118
- "border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
119
- this.type == "success",
120
- "border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
121
- this.type == "danger",
122
- "border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
123
- this.type == "light-green",
124
- "border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
125
- this.type == "light-red",
126
- "cursor-default pointer-events-none": this.isLoading,
127
- };
128
- },
129
- },
130
- methods: {
131
- getActionIDFn(name) {
132
- return getActionID(name, this.id);
133
- },
134
- updateDropdownPlacement() {
135
- if (this.ticking) return;
136
-
137
- const trigger = this.$refs.dropdownTrigger;
138
- if (!trigger) return;
139
-
140
- this.ticking = true;
141
- requestAnimationFrame(() => {
142
- this.ticking = false;
143
- if (!this.$refs.dropdownTrigger) return;
144
-
145
- const { top, bottom, left, right } = trigger.getBoundingClientRect();
146
- const alignRight = right >= window.innerWidth - left;
147
- const menuHeight = (this.items || []).length * 36 + 8;
148
- const openAbove =
149
- window.innerHeight - bottom < menuHeight &&
150
- top > window.innerHeight - bottom;
151
- const horizontal = alignRight ? "right-0" : "left-0";
152
-
153
- if (openAbove) {
154
- this.dropdownMenuClass = alignRight
155
- ? `bottom-full ${horizontal} mb-2 origin-bottom-right`
156
- : `bottom-full ${horizontal} mb-2 origin-bottom-left`;
157
- } else {
158
- this.dropdownMenuClass = alignRight
159
- ? `top-full ${horizontal} mt-2 origin-top-right`
160
- : `top-full ${horizontal} mt-2 origin-top-left`;
161
- }
162
- });
163
- },
164
- togglePlacementListeners(active) {
165
- if (active) {
166
- window.addEventListener("resize", this.updateDropdownPlacement, {
167
- passive: true,
168
- });
169
- window.addEventListener("scroll", this.updateDropdownPlacement, true);
170
- return;
171
- }
172
-
173
- window.removeEventListener("resize", this.updateDropdownPlacement);
174
- window.removeEventListener("scroll", this.updateDropdownPlacement, true);
175
- },
176
- selectOption(event, value) {
177
- this.selectedValue = event.target.innerText;
178
- this.$emit("onSelectOption", value);
179
- this.toggleDropdown = false;
180
- },
181
- close() {
182
- this.toggleDropdown = false;
183
- },
184
- handleButtonClick() {
185
- this.$emit("action", this.selectedValue);
186
- },
187
- },
188
- watch: {
189
- value() {
190
- this.selectedValue = this.value;
191
- },
192
- toggleDropdown(isOpen) {
193
- if (isOpen) {
194
- this.$nextTick(() => {
195
- if (!this.toggleDropdown || !this.$refs.dropdownTrigger) return;
196
- this.updateDropdownPlacement();
197
- this.togglePlacementListeners(true);
198
- });
199
- } else {
200
- this.togglePlacementListeners(false);
201
- }
202
- },
203
- },
204
- beforeDestroy() {
205
- this.togglePlacementListeners(false);
206
- },
207
- };
208
- </script>
1
+ <template>
2
+ <div>
3
+ <span class="relative inline-flex rounded-md shadow-sm">
4
+ <button
5
+ :type="type"
6
+ @click="handleButtonClick"
7
+ :class="[classes, isDisabled ? 'opacity-50' : '']"
8
+ class="relative h-9 inline-flex items-center rounded-l-md px-3 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
9
+ :disabled="isDisabled"
10
+ :id="id"
11
+ >
12
+ <c-icon v-if="isLoading" class="mr-2 h-4 w-4" name="loader"></c-icon>
13
+ {{ selectedValue ? selectedValue : label }}
14
+ </button>
15
+ <span class="relative -ml-px block" ref="dropdownTrigger">
16
+ <button
17
+ @click="toggleDropdown = !toggleDropdown"
18
+ @blur="close()"
19
+ :type="type"
20
+ :class="[
21
+ classes,
22
+ isDisabled || isDropdownDisabled ? 'opacity-50' : '',
23
+ ]"
24
+ class="relative h-9 inline-flex items-center rounded-r-md px-2 py-2 text-sm font-medium focus:z-10 focus:outline-none focus:ring-1"
25
+ :disabled="isDisabled || isDropdownDisabled"
26
+ :id="id + '_button_dropdown'"
27
+ >
28
+ <span class="sr-only">Open options</span>
29
+ <c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
30
+ </button>
31
+ <div
32
+ v-if="toggleDropdown"
33
+ :class="[
34
+ dropdownPositionClass,
35
+ dropdownMenuClass,
36
+ 'absolute z-10 w-56 rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5',
37
+ ]"
38
+ >
39
+ <div
40
+ class="py-1"
41
+ role="menu"
42
+ aria-orientation="vertical"
43
+ aria-labelledby="option-menu"
44
+ >
45
+ <li
46
+ v-for="item in items"
47
+ v-bind:key="item.items"
48
+ @mousedown="selectOption($event, item.value)"
49
+ class="block cursor-pointer px-3 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900"
50
+ role="menuitem"
51
+ :id="getActionIDFn(item.secondaryText)"
52
+ >
53
+ {{ item.text }}
54
+ </li>
55
+ </div>
56
+ </div>
57
+ </span>
58
+ </span>
59
+ </div>
60
+ </template>
61
+
62
+ <script>
63
+ import { getActionID } from "../../helper";
64
+ import CIcon from "../CIcon/CIcon.vue";
65
+
66
+ export default {
67
+ name: "CButtonWithDropdown",
68
+ components: { CIcon },
69
+ props: {
70
+ label: {
71
+ type: String,
72
+ required: true,
73
+ },
74
+ id: {
75
+ type: String,
76
+ },
77
+ type: {
78
+ type: String,
79
+ default: "secondary",
80
+ },
81
+ value: {
82
+ type: String,
83
+ },
84
+ items: {
85
+ type: Array,
86
+ required: true,
87
+ },
88
+ dropdownPositionClass: {
89
+ type: String,
90
+ },
91
+ isLoading: {
92
+ type: Boolean,
93
+ default: false,
94
+ },
95
+ isDisabled: {
96
+ type: Boolean,
97
+ default: false,
98
+ },
99
+ isDropdownDisabled: {
100
+ type: Boolean,
101
+ default: false,
102
+ },
103
+ },
104
+ data() {
105
+ return {
106
+ toggleDropdown: false,
107
+ selectedValue: this.value,
108
+ dropdownMenuClass: "top-full right-0 mt-2 origin-top-right",
109
+ };
110
+ },
111
+ computed: {
112
+ classes() {
113
+ return {
114
+ "border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
115
+ this.type == "primary",
116
+ "border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
117
+ this.type == "secondary",
118
+ "border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
119
+ this.type == "success",
120
+ "border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
121
+ this.type == "danger",
122
+ "border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
123
+ this.type == "light-green",
124
+ "border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
125
+ this.type == "light-red",
126
+ "cursor-default pointer-events-none": this.isLoading,
127
+ };
128
+ },
129
+ },
130
+ methods: {
131
+ getActionIDFn(name) {
132
+ return getActionID(name, this.id);
133
+ },
134
+ updateDropdownPlacement() {
135
+ if (this.ticking) return;
136
+
137
+ const trigger = this.$refs.dropdownTrigger;
138
+ if (!trigger) return;
139
+
140
+ this.ticking = true;
141
+ requestAnimationFrame(() => {
142
+ this.ticking = false;
143
+ if (!this.$refs.dropdownTrigger) return;
144
+
145
+ const { top, bottom, left, right } = trigger.getBoundingClientRect();
146
+ const alignRight = right >= window.innerWidth - left;
147
+ const menuHeight = (this.items || []).length * 36 + 8;
148
+ const openAbove =
149
+ window.innerHeight - bottom < menuHeight &&
150
+ top > window.innerHeight - bottom;
151
+ const horizontal = alignRight ? "right-0" : "left-0";
152
+
153
+ if (openAbove) {
154
+ this.dropdownMenuClass = alignRight
155
+ ? `bottom-full ${horizontal} mb-2 origin-bottom-right`
156
+ : `bottom-full ${horizontal} mb-2 origin-bottom-left`;
157
+ } else {
158
+ this.dropdownMenuClass = alignRight
159
+ ? `top-full ${horizontal} mt-2 origin-top-right`
160
+ : `top-full ${horizontal} mt-2 origin-top-left`;
161
+ }
162
+ });
163
+ },
164
+ togglePlacementListeners(active) {
165
+ if (active) {
166
+ window.addEventListener("resize", this.updateDropdownPlacement, {
167
+ passive: true,
168
+ });
169
+ window.addEventListener("scroll", this.updateDropdownPlacement, true);
170
+ return;
171
+ }
172
+
173
+ window.removeEventListener("resize", this.updateDropdownPlacement);
174
+ window.removeEventListener("scroll", this.updateDropdownPlacement, true);
175
+ },
176
+ selectOption(event, value) {
177
+ this.selectedValue = event.target.innerText;
178
+ this.$emit("onSelectOption", value);
179
+ this.toggleDropdown = false;
180
+ },
181
+ close() {
182
+ this.toggleDropdown = false;
183
+ },
184
+ handleButtonClick() {
185
+ this.$emit("action", this.selectedValue);
186
+ },
187
+ },
188
+ watch: {
189
+ value() {
190
+ this.selectedValue = this.value;
191
+ },
192
+ toggleDropdown(isOpen) {
193
+ if (isOpen) {
194
+ this.$nextTick(() => {
195
+ if (!this.toggleDropdown || !this.$refs.dropdownTrigger) return;
196
+ this.updateDropdownPlacement();
197
+ this.togglePlacementListeners(true);
198
+ });
199
+ } else {
200
+ this.togglePlacementListeners(false);
201
+ }
202
+ },
203
+ },
204
+ beforeDestroy() {
205
+ this.togglePlacementListeners(false);
206
+ },
207
+ };
208
+ </script>
@@ -1,3 +1,3 @@
1
- import CButtonWithDropdown from './CButtonWithDropdown.vue'
2
-
1
+ import CButtonWithDropdown from './CButtonWithDropdown.vue'
2
+
3
3
  export default CButtonWithDropdown