classcard-ui 0.2.1473 → 0.2.1475

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 (209) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +413 -135
  3. package/dist/classcard-ui.common.js.map +1 -1
  4. package/dist/classcard-ui.css +2 -2
  5. package/dist/classcard-ui.umd.js +413 -135
  6. package/dist/classcard-ui.umd.js.map +1 -1
  7. package/dist/classcard-ui.umd.min.js +3 -3
  8. package/dist/classcard-ui.umd.min.js.map +1 -1
  9. package/package.json +83 -83
  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 +230 -230
  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 +221 -221
  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 +263 -263
  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 +134 -134
  81. package/src/components/CInsetTabs/index.js +3 -3
  82. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  83. package/src/components/CModalHeading/index.js +2 -2
  84. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +88 -88
  85. package/src/components/CModuleHelpLinks/index.js +3 -3
  86. package/src/components/CMultiselect/CMultiselect.vue +1170 -937
  87. package/src/components/CMultiselect/index.js +2 -2
  88. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  89. package/src/components/CMultiselectr/index.js +2 -2
  90. package/src/components/CPageHeading/CPageHeading.vue +83 -83
  91. package/src/components/CPageHeading/index.js +2 -2
  92. package/src/components/CPagination/CPagination.vue +239 -239
  93. package/src/components/CPagination/index.js +2 -2
  94. package/src/components/CPhoneNumber/CPhoneNumber.vue +213 -213
  95. package/src/components/CPhoneNumber/index.js +2 -2
  96. package/src/components/CProgress/CProgress.vue +91 -91
  97. package/src/components/CProgress/index.js +2 -2
  98. package/src/components/CRadio/CRadio.vue +197 -197
  99. package/src/components/CRadio/index.js +2 -2
  100. package/src/components/CRadioGroup/CRadioGroup.vue +96 -96
  101. package/src/components/CRadioGroup/index.js +2 -2
  102. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  103. package/src/components/CRangeSlider/index.js +2 -2
  104. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  105. package/src/components/CReorderableStackedList/index.js +2 -2
  106. package/src/components/CSelect/CSelect.vue +1210 -1165
  107. package/src/components/CSelect/index.js +2 -2
  108. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  109. package/src/components/CSmallTimeline/index.js +2 -2
  110. package/src/components/CStackedList/CStackedList.vue +162 -162
  111. package/src/components/CStackedList/index.js +2 -2
  112. package/src/components/CStats/CStats.vue +157 -157
  113. package/src/components/CStats/index.js +2 -2
  114. package/src/components/CSwitch/CSwitch.vue +200 -200
  115. package/src/components/CSwitch/index.js +2 -2
  116. package/src/components/CTabLazy/CTabLazy.vue +83 -83
  117. package/src/components/CTabLazy/index.js +2 -2
  118. package/src/components/CTable/CTable.vue +1114 -1114
  119. package/src/components/CTable/index.js +2 -2
  120. package/src/components/CTabs/CTabs.vue +250 -250
  121. package/src/components/CTabs/index.js +2 -2
  122. package/src/components/CTag/CTag.vue +109 -109
  123. package/src/components/CTag/index.js +2 -2
  124. package/src/components/CTextarea/CTextarea.vue +118 -118
  125. package/src/components/CTextarea/index.js +2 -2
  126. package/src/components/CTimeline/CTimeline.vue +237 -237
  127. package/src/components/CTimeline/index.js +2 -2
  128. package/src/components/CToolTip/CToolTip.vue +108 -108
  129. package/src/components/CToolTip/index.js +3 -3
  130. package/src/components/CUpload/CUpload.vue +331 -331
  131. package/src/components/CUpload/index.js +2 -2
  132. package/src/components/NumberAnimator.vue +112 -112
  133. package/src/components/index.js +57 -57
  134. package/src/helper.js +8 -8
  135. package/src/icons.js +830 -830
  136. package/src/main.js +22 -22
  137. package/src/stories/CAlertModal.stories.js +30 -30
  138. package/src/stories/CAlerts.stories.js +39 -39
  139. package/src/stories/CAnchorTabs.stories.js +29 -29
  140. package/src/stories/CAnchorTag.stories.js +38 -38
  141. package/src/stories/CAvatar.stories.js +38 -38
  142. package/src/stories/CAvatarGroup.stories.js +136 -136
  143. package/src/stories/CBasicTable.stories.js +316 -316
  144. package/src/stories/CBreadcrumbs.stories.js +24 -24
  145. package/src/stories/CButton.stories.js +49 -49
  146. package/src/stories/CButtonGroup.stories.js +43 -43
  147. package/src/stories/CButtonIcon.stories.js +27 -27
  148. package/src/stories/CButtonLink.stories.js +24 -24
  149. package/src/stories/CButtonSelect.stories.js +44 -44
  150. package/src/stories/CButtonSelectBorder.stories.js +56 -56
  151. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  152. package/src/stories/CCalendar.stories.js +16 -16
  153. package/src/stories/CCard.stories.js +30 -30
  154. package/src/stories/CCheckbox.stories.js +38 -38
  155. package/src/stories/CCircularButton.stories.js +29 -29
  156. package/src/stories/CCollapsibleSection.stories.js +29 -29
  157. package/src/stories/CColorDots.stories.js +37 -37
  158. package/src/stories/CConfirmActionModal.stories.js +60 -60
  159. package/src/stories/CDatepicker.stories.js +31 -31
  160. package/src/stories/CDualSelect.stories.js +29 -29
  161. package/src/stories/CEditor.stories.js +30 -30
  162. package/src/stories/CFormSectionHeading.stories.js +37 -37
  163. package/src/stories/CGroupedFilterDropdown.stories.js +176 -176
  164. package/src/stories/CGroupedSelect.stories.js +103 -103
  165. package/src/stories/CIcon.stories.js +31 -31
  166. package/src/stories/CIconDropdown.stories.js +52 -52
  167. package/src/stories/CIconSelect.stories.js +45 -45
  168. package/src/stories/CInput.stories.js +36 -36
  169. package/src/stories/CInputAddon.stories.js +37 -37
  170. package/src/stories/CInputEmail.stories.js +27 -27
  171. package/src/stories/CInsetTabs.stories.js +48 -48
  172. package/src/stories/CModalHeading.stories.js +25 -25
  173. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  174. package/src/stories/CMultiselect.stories.js +136 -136
  175. package/src/stories/CMultiselectr.stories.js +23 -23
  176. package/src/stories/CPageHeading.stories.js +32 -32
  177. package/src/stories/CPagination.stories.js +30 -30
  178. package/src/stories/CPhoneNumber.stories.js +37 -37
  179. package/src/stories/CProgress.stories.js +23 -23
  180. package/src/stories/CRadio.stories.js +44 -44
  181. package/src/stories/CRadioGroup.stories.js +51 -51
  182. package/src/stories/CRangeSlider.stories.js +23 -23
  183. package/src/stories/CReorderableStackedList.stories.js +23 -23
  184. package/src/stories/CSelect.stories.js +157 -157
  185. package/src/stories/CSmallTimeline.stories.js +26 -26
  186. package/src/stories/CStackedList.stories.js +37 -37
  187. package/src/stories/CStats.stories.js +53 -53
  188. package/src/stories/CSwitch.stories.js +28 -28
  189. package/src/stories/CTabLazy.stories.js +42 -42
  190. package/src/stories/CTable.stories.js +203 -203
  191. package/src/stories/CTabs.stories.js +36 -36
  192. package/src/stories/CTag.stories.js +37 -37
  193. package/src/stories/CTextarea.stories.js +32 -32
  194. package/src/stories/CTimeline.stories.js +26 -26
  195. package/src/stories/CToolTip.stories.js +27 -27
  196. package/src/stories/CUpload.stories.js +36 -36
  197. package/src/stories/Introduction.stories.mdx +207 -207
  198. package/src/stories/Page.vue +88 -88
  199. package/src/stories/assets/code-brackets.svg +0 -0
  200. package/src/stories/assets/colors.svg +0 -0
  201. package/src/stories/assets/comments.svg +0 -0
  202. package/src/stories/assets/direction.svg +0 -0
  203. package/src/stories/assets/flow.svg +0 -0
  204. package/src/stories/assets/plugin.svg +0 -0
  205. package/src/stories/assets/repo.svg +0 -0
  206. package/src/stories/assets/stackalt.svg +0 -0
  207. package/src/stories/header.css +26 -26
  208. package/src/stories/page.css +69 -69
  209. package/src/stories/utils.css +32 -32
@@ -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,112 +1,112 @@
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 : '')"
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 : '')"
33
- :viewBox="viewBoxOutline"
34
- fill="none"
35
- stroke="currentColor"
36
- >
37
- <path
38
- stroke-linecap="round"
39
- stroke-linejoin="round"
40
- stroke-width="2"
41
- :d="path"
42
- />
43
- </svg>
44
- <svg
45
- v-if="name !== 'loader' && type == 'outline-v2'"
46
- :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
47
- :viewBox="viewBoxOutline"
48
- fill="none"
49
- stroke="currentColor"
50
- >
51
- <path
52
- stroke-linecap="round"
53
- stroke-linejoin="round"
54
- stroke-width="1.5"
55
- :d="path"
56
- />
57
- </svg>
58
- <svg
59
- v-if="name !== 'loader' && type == 'mini'"
60
- :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
61
- :viewBox="viewBox"
62
- fill="currentColor"
63
- fill-rule="evenodd"
64
- >
65
- <path :d="path" />
66
- </svg>
67
- <svg
68
- v-if="name !== 'loader' && type == 'micro'"
69
- viewBox="0 0 16 16"
70
- fill="currentColor"
71
- :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
72
- >
73
- <path fillRule="evenodd" :d="path" clipRule="evenodd" />
74
- </svg>
75
- </div>
76
- </template>
77
-
78
- <script>
79
- import icons from "../../icons.js";
80
- export default {
81
- name: "CIcon",
82
- props: {
83
- name: {
84
- type: String,
85
- required: true,
86
- },
87
- classes: {
88
- type: String,
89
- },
90
- type: {
91
- type: String,
92
- },
93
- viewBox: {
94
- type: String,
95
- default: "0 0 20 20",
96
- },
97
- viewBoxOutline: {
98
- type: String,
99
- default: "0 0 24 24",
100
- },
101
- cursorType: {
102
- type: String,
103
- default: "cursor-default",
104
- },
105
- },
106
- computed: {
107
- path() {
108
- return icons[this.name];
109
- },
110
- },
111
- };
112
- </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 : '')"
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 : '')"
33
+ :viewBox="viewBoxOutline"
34
+ fill="none"
35
+ stroke="currentColor"
36
+ >
37
+ <path
38
+ stroke-linecap="round"
39
+ stroke-linejoin="round"
40
+ stroke-width="2"
41
+ :d="path"
42
+ />
43
+ </svg>
44
+ <svg
45
+ v-if="name !== 'loader' && type == 'outline-v2'"
46
+ :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
47
+ :viewBox="viewBoxOutline"
48
+ fill="none"
49
+ stroke="currentColor"
50
+ >
51
+ <path
52
+ stroke-linecap="round"
53
+ stroke-linejoin="round"
54
+ stroke-width="1.5"
55
+ :d="path"
56
+ />
57
+ </svg>
58
+ <svg
59
+ v-if="name !== 'loader' && type == 'mini'"
60
+ :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
61
+ :viewBox="viewBox"
62
+ fill="currentColor"
63
+ fill-rule="evenodd"
64
+ >
65
+ <path :d="path" />
66
+ </svg>
67
+ <svg
68
+ v-if="name !== 'loader' && type == 'micro'"
69
+ viewBox="0 0 16 16"
70
+ fill="currentColor"
71
+ :class="(classes ? classes : '') + (cursorType ? cursorType : '')"
72
+ >
73
+ <path fillRule="evenodd" :d="path" clipRule="evenodd" />
74
+ </svg>
75
+ </div>
76
+ </template>
77
+
78
+ <script>
79
+ import icons from "../../icons.js";
80
+ export default {
81
+ name: "CIcon",
82
+ props: {
83
+ name: {
84
+ type: String,
85
+ required: true,
86
+ },
87
+ classes: {
88
+ type: String,
89
+ },
90
+ type: {
91
+ type: String,
92
+ },
93
+ viewBox: {
94
+ type: String,
95
+ default: "0 0 20 20",
96
+ },
97
+ viewBoxOutline: {
98
+ type: String,
99
+ default: "0 0 24 24",
100
+ },
101
+ cursorType: {
102
+ type: String,
103
+ default: "cursor-default",
104
+ },
105
+ },
106
+ computed: {
107
+ path() {
108
+ return icons[this.name];
109
+ },
110
+ },
111
+ };
112
+ </script>
@@ -1,3 +1,3 @@
1
- import CIcon from './CIcon.vue'
2
-
1
+ import CIcon from './CIcon.vue'
2
+
3
3
  export default CIcon
@@ -1,206 +1,206 @@
1
- <template>
2
- <div>
3
- <slot></slot>
4
- <div
5
- :class="`${isDropDownRelative ? 'relative' : ''} inline-block text-left`"
6
- >
7
- <div>
8
- <button
9
- type="white"
10
- @click.stop="toggle($event)"
11
- @blur="close()"
12
- :class="
13
- customClasses
14
- ? iconClasses
15
- : 'inline-flex w-full justify-center rounded-full border-none p-2 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2'
16
- "
17
- :id="id"
18
- aria-haspopup="true"
19
- aria-expanded="true"
20
- >
21
- <div class="flex items-center gap-1">
22
- <c-icon
23
- :name="icon.name"
24
- :type="icon.type"
25
- :class="icon.class"
26
- :cursorType="cursorType"
27
- :viewBox="icon.viewBox"
28
- ></c-icon>
29
- <p v-if="label" :class="['text-sm text-gray-500', labelClass]">
30
- {{ label }}
31
- </p>
32
- </div>
33
- </button>
34
- </div>
35
- <div
36
- v-show="toggleDropdown"
37
- :class="classes"
38
- class="absolute z-10 mt-2 -mr-1 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
39
- >
40
- <div
41
- class="w-max py-1"
42
- role="menu"
43
- aria-orientation="vertical"
44
- aria-labelledby="option-menu"
45
- >
46
- <div
47
- v-for="(item, index) in items"
48
- v-bind:key="item.text"
49
- @mouseenter="showTooltipIndex = index"
50
- @mouseleave="showTooltipIndex = null"
51
- >
52
- <a
53
- @mousedown.stop.prevent="dropdownAction(item)"
54
- class="flex cursor-pointer justify-between px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 disabled:pointer-events-none disabled:opacity-50"
55
- :class="[
56
- item.class,
57
- item.disabled ? 'pointer-events-none opacity-50' : '',
58
- item.isLoading ? 'pointer-events-none cursor-default' : '',
59
- ]"
60
- :id="getActionIDFn(item.text)"
61
- role="menuitem"
62
- :disabled="item.disabled"
63
- :aria-disabled="item.disabled ? 'true' : 'false'"
64
- >
65
- <div class="flex items-center">
66
- <c-icon
67
- v-if="item.isLoading"
68
- :class="dropdownIcons[index].class"
69
- name="loader"
70
- ></c-icon>
71
-
72
- <c-icon
73
- v-if="item.icon && !item.isLoading"
74
- :name="dropdownIcons[index].name"
75
- :type="dropdownIcons[index].type"
76
- :class="dropdownIcons[index].class"
77
- :viewBox="dropdownIcons[index].viewBox"
78
- :cursorType="cursorType"
79
- ></c-icon>
80
-
81
- <div class="flex items-center gap-1">
82
- {{ item.text }}
83
- <c-icon
84
- v-if="item.shouldShowHoverIcon && !item.isLoading"
85
- :name="item.hoverIcon.name"
86
- :type="item.hoverIcon.type"
87
- :class="[
88
- item.hoverIcon.class,
89
- 'invisible group-hover:visible',
90
- ]"
91
- :viewBox="item.hoverIcon.viewBox"
92
- :cursorType="cursorType"
93
- ></c-icon>
94
- </div>
95
- </div>
96
- <slot v-if="item.name" :name="item.name"></slot>
97
- <c-tooltip
98
- v-if="item.tooltip && showTooltipIndex === index"
99
- :tooltipText="item.tooltip.text"
100
- :isTopAligned="true"
101
- :classes="item.tooltip.classes"
102
- :color="item.tooltip.color"
103
- ></c-tooltip>
104
- </a>
105
- <hr v-if="item.border" class="my-1" />
106
- </div>
107
- </div>
108
- </div>
109
- </div>
110
- </div>
111
- </template>
112
-
113
- <script>
114
- import { getActionID } from "../../helper";
115
- import CIcon from "../CIcon/CIcon.vue";
116
- import CTooltip from "../CToolTip/CToolTip.vue";
117
-
118
- export default {
119
- name: "CIconDropdown",
120
- components: { CIcon, CTooltip },
121
- props: {
122
- id: {
123
- type: String,
124
- },
125
- label: {
126
- type: String,
127
- },
128
- labelClass: {
129
- type: String,
130
- },
131
- items: {
132
- type: Array,
133
- required: true,
134
- },
135
- customClasses: {
136
- type: Boolean,
137
- default: false,
138
- },
139
- iconClasses: {
140
- type: String,
141
- },
142
- icon: {
143
- type: Object,
144
- },
145
- dropdownIcons: {
146
- type: Array,
147
- },
148
- classes: {
149
- type: String,
150
- },
151
- action: {
152
- type: Function,
153
- },
154
- isDropDownRelative: {
155
- type: Boolean,
156
- default: true,
157
- },
158
- cursorType: {
159
- type: String,
160
- default: "cursor-pointer",
161
- },
162
- },
163
- data() {
164
- return {
165
- toggleDropdown: false,
166
- showTooltipIndex: false,
167
- };
168
- },
169
- methods: {
170
- getActionIDFn(name) {
171
- return getActionID(name, this.id);
172
- },
173
- toggle(event) {
174
- this.toggleDropdown = !this.toggleDropdown;
175
- if (event.target.tagName == "path") {
176
- if (this.toggleDropdown) {
177
- event.target.parentElement.parentElement.parentElement.parentElement.focus();
178
- } else {
179
- event.target.parentElement.parentElement.parentElement.parentElement.blur();
180
- }
181
- } else if (event.target.tagName == "svg") {
182
- if (this.toggleDropdown) {
183
- event.target.parentElement.parentElement.parentElement.focus();
184
- } else {
185
- event.target.parentElement.parentElement.parentElement.blur();
186
- }
187
- } else {
188
- if (this.toggleDropdown) {
189
- event.target.focus();
190
- } else {
191
- event.target.blur();
192
- }
193
- }
194
- },
195
- dropdownAction(item) {
196
- this.$emit("action", item);
197
- this.close();
198
- },
199
- close() {
200
- this.toggleDropdown = false;
201
- },
202
- },
203
- };
204
- </script>
205
-
206
- <style></style>
1
+ <template>
2
+ <div>
3
+ <slot></slot>
4
+ <div
5
+ :class="`${isDropDownRelative ? 'relative' : ''} inline-block text-left`"
6
+ >
7
+ <div>
8
+ <button
9
+ type="white"
10
+ @click.stop="toggle($event)"
11
+ @blur="close()"
12
+ :class="
13
+ customClasses
14
+ ? iconClasses
15
+ : 'inline-flex w-full justify-center rounded-full border-none p-2 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2'
16
+ "
17
+ :id="id"
18
+ aria-haspopup="true"
19
+ aria-expanded="true"
20
+ >
21
+ <div class="flex items-center gap-1">
22
+ <c-icon
23
+ :name="icon.name"
24
+ :type="icon.type"
25
+ :class="icon.class"
26
+ :cursorType="cursorType"
27
+ :viewBox="icon.viewBox"
28
+ ></c-icon>
29
+ <p v-if="label" :class="['text-sm text-gray-500', labelClass]">
30
+ {{ label }}
31
+ </p>
32
+ </div>
33
+ </button>
34
+ </div>
35
+ <div
36
+ v-show="toggleDropdown"
37
+ :class="classes"
38
+ class="absolute z-10 mt-2 -mr-1 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-gray-900 ring-opacity-5"
39
+ >
40
+ <div
41
+ class="w-max py-1"
42
+ role="menu"
43
+ aria-orientation="vertical"
44
+ aria-labelledby="option-menu"
45
+ >
46
+ <div
47
+ v-for="(item, index) in items"
48
+ v-bind:key="item.text"
49
+ @mouseenter="showTooltipIndex = index"
50
+ @mouseleave="showTooltipIndex = null"
51
+ >
52
+ <a
53
+ @mousedown.stop.prevent="dropdownAction(item)"
54
+ class="flex cursor-pointer justify-between px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 disabled:pointer-events-none disabled:opacity-50"
55
+ :class="[
56
+ item.class,
57
+ item.disabled ? 'pointer-events-none opacity-50' : '',
58
+ item.isLoading ? 'pointer-events-none cursor-default' : '',
59
+ ]"
60
+ :id="getActionIDFn(item.text)"
61
+ role="menuitem"
62
+ :disabled="item.disabled"
63
+ :aria-disabled="item.disabled ? 'true' : 'false'"
64
+ >
65
+ <div class="flex items-center">
66
+ <c-icon
67
+ v-if="item.isLoading"
68
+ :class="dropdownIcons[index].class"
69
+ name="loader"
70
+ ></c-icon>
71
+
72
+ <c-icon
73
+ v-if="item.icon && !item.isLoading"
74
+ :name="dropdownIcons[index].name"
75
+ :type="dropdownIcons[index].type"
76
+ :class="dropdownIcons[index].class"
77
+ :viewBox="dropdownIcons[index].viewBox"
78
+ :cursorType="cursorType"
79
+ ></c-icon>
80
+
81
+ <div class="flex items-center gap-1">
82
+ {{ item.text }}
83
+ <c-icon
84
+ v-if="item.shouldShowHoverIcon && !item.isLoading"
85
+ :name="item.hoverIcon.name"
86
+ :type="item.hoverIcon.type"
87
+ :class="[
88
+ item.hoverIcon.class,
89
+ 'invisible group-hover:visible',
90
+ ]"
91
+ :viewBox="item.hoverIcon.viewBox"
92
+ :cursorType="cursorType"
93
+ ></c-icon>
94
+ </div>
95
+ </div>
96
+ <slot v-if="item.name" :name="item.name"></slot>
97
+ </a>
98
+ <c-tooltip
99
+ v-if="item.tooltip && item.tooltip.text && showTooltipIndex === index"
100
+ :tooltipText="item.tooltip.text"
101
+ :isTopAligned="true"
102
+ :classes="item.tooltip.classes"
103
+ :color="item.tooltip.color"
104
+ ></c-tooltip>
105
+ <hr v-if="item.border" class="my-1" />
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </template>
112
+
113
+ <script>
114
+ import { getActionID } from "../../helper";
115
+ import CIcon from "../CIcon/CIcon.vue";
116
+ import CTooltip from "../CToolTip/CToolTip.vue";
117
+
118
+ export default {
119
+ name: "CIconDropdown",
120
+ components: { CIcon, CTooltip },
121
+ props: {
122
+ id: {
123
+ type: String,
124
+ },
125
+ label: {
126
+ type: String,
127
+ },
128
+ labelClass: {
129
+ type: String,
130
+ },
131
+ items: {
132
+ type: Array,
133
+ required: true,
134
+ },
135
+ customClasses: {
136
+ type: Boolean,
137
+ default: false,
138
+ },
139
+ iconClasses: {
140
+ type: String,
141
+ },
142
+ icon: {
143
+ type: Object,
144
+ },
145
+ dropdownIcons: {
146
+ type: Array,
147
+ },
148
+ classes: {
149
+ type: String,
150
+ },
151
+ action: {
152
+ type: Function,
153
+ },
154
+ isDropDownRelative: {
155
+ type: Boolean,
156
+ default: true,
157
+ },
158
+ cursorType: {
159
+ type: String,
160
+ default: "cursor-pointer",
161
+ },
162
+ },
163
+ data() {
164
+ return {
165
+ toggleDropdown: false,
166
+ showTooltipIndex: null,
167
+ };
168
+ },
169
+ methods: {
170
+ getActionIDFn(name) {
171
+ return getActionID(name, this.id);
172
+ },
173
+ toggle(event) {
174
+ this.toggleDropdown = !this.toggleDropdown;
175
+ if (event.target.tagName == "path") {
176
+ if (this.toggleDropdown) {
177
+ event.target.parentElement.parentElement.parentElement.parentElement.focus();
178
+ } else {
179
+ event.target.parentElement.parentElement.parentElement.parentElement.blur();
180
+ }
181
+ } else if (event.target.tagName == "svg") {
182
+ if (this.toggleDropdown) {
183
+ event.target.parentElement.parentElement.parentElement.focus();
184
+ } else {
185
+ event.target.parentElement.parentElement.parentElement.blur();
186
+ }
187
+ } else {
188
+ if (this.toggleDropdown) {
189
+ event.target.focus();
190
+ } else {
191
+ event.target.blur();
192
+ }
193
+ }
194
+ },
195
+ dropdownAction(item) {
196
+ this.$emit("action", item);
197
+ this.close();
198
+ },
199
+ close() {
200
+ this.toggleDropdown = false;
201
+ },
202
+ },
203
+ };
204
+ </script>
205
+
206
+ <style></style>
@@ -1,3 +1,3 @@
1
- import CIconDropdown from './CIconDropdown.vue'
2
-
1
+ import CIconDropdown from './CIconDropdown.vue'
2
+
3
3
  export default CIconDropdown