classcard-ui 0.2.1069 → 0.2.1071

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +62 -59
  3. package/dist/classcard-ui.common.js.map +1 -1
  4. package/dist/classcard-ui.umd.js +62 -59
  5. package/dist/classcard-ui.umd.js.map +1 -1
  6. package/dist/classcard-ui.umd.min.js +1 -1
  7. package/dist/classcard-ui.umd.min.js.map +1 -1
  8. package/package.json +82 -82
  9. package/src/App.vue +16 -16
  10. package/src/components/CAlerts/CAlerts.vue +70 -70
  11. package/src/components/CAlerts/index.js +2 -2
  12. package/src/components/CAnchorTabs/CAnchorTabs.vue +96 -96
  13. package/src/components/CAnchorTabs/index.js +2 -2
  14. package/src/components/CAnchorTag/CAnchorTag.vue +62 -62
  15. package/src/components/CAnchorTag/index.js +2 -2
  16. package/src/components/CAvatar/CAvatar.vue +212 -212
  17. package/src/components/CAvatar/index.js +2 -2
  18. package/src/components/CAvatarGroup/CAvatarGroup.vue +145 -145
  19. package/src/components/CAvatarGroup/index.js +2 -2
  20. package/src/components/CBasicTable/CBasicTable.vue +184 -184
  21. package/src/components/CBasicTable/index.js +2 -2
  22. package/src/components/CBreadcrumbs/CBreadcrumbs.vue +38 -38
  23. package/src/components/CBreadcrumbs/index.js +2 -2
  24. package/src/components/CButton/CButton.vue +152 -152
  25. package/src/components/CButton/index.js +2 -2
  26. package/src/components/CButtonGroup/CButtonGroup.vue +118 -118
  27. package/src/components/CButtonGroup/index.js +2 -2
  28. package/src/components/CButtonIcon/CButtonIcon.vue +117 -117
  29. package/src/components/CButtonIcon/index.js +2 -2
  30. package/src/components/CButtonLink/CButtonLink.vue +39 -39
  31. package/src/components/CButtonLink/index.js +2 -2
  32. package/src/components/CButtonSelect/CButtonSelect.vue +134 -134
  33. package/src/components/CButtonSelect/index.js +2 -2
  34. package/src/components/CButtonSelectBorder/CButtonSelectBorder.vue +135 -135
  35. package/src/components/CButtonSelectBorder/index.js +3 -3
  36. package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +135 -135
  37. package/src/components/CButtonWithDropdown/index.js +2 -2
  38. package/src/components/CCalendar/CCalendar.vue +410 -410
  39. package/src/components/CCalendar/index.js +3 -3
  40. package/src/components/CCard/CCard.vue +49 -49
  41. package/src/components/CCard/index.js +2 -2
  42. package/src/components/CCheckbox/CCheckbox.vue +123 -123
  43. package/src/components/CCheckbox/index.js +2 -2
  44. package/src/components/CCircularButton/CCircularButton.vue +53 -53
  45. package/src/components/CCircularButton/index.js +2 -2
  46. package/src/components/CCollapsibleSection/CCollapsibleSection.vue +101 -101
  47. package/src/components/CCollapsibleSection/index.js +2 -2
  48. package/src/components/CColorDots/CColorDots.vue +51 -51
  49. package/src/components/CColorDots/index.js +3 -3
  50. package/src/components/CConfirmActionModal/CConfirmActionModal.vue +180 -180
  51. package/src/components/CConfirmActionModal/index.js +3 -3
  52. package/src/components/CDatepicker/CDatepicker.vue +201 -201
  53. package/src/components/CDatepicker/index.js +2 -2
  54. package/src/components/CDualSelect/CDualSelect.vue +193 -193
  55. package/src/components/CDualSelect/index.js +2 -2
  56. package/src/components/CEditor/CEditor.vue +98 -98
  57. package/src/components/CEditor/index.js +2 -2
  58. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +53 -53
  59. package/src/components/CFormSectionHeading/index.js +2 -2
  60. package/src/components/CGroupedSelect/CGroupedSelect.vue +245 -245
  61. package/src/components/CGroupedSelect/index.js +3 -3
  62. package/src/components/CIcon/CIcon.vue +91 -91
  63. package/src/components/CIcon/index.js +2 -2
  64. package/src/components/CIconDropdown/CIconDropdown.vue +146 -146
  65. package/src/components/CIconDropdown/index.js +2 -2
  66. package/src/components/CInput/CInput.vue +134 -134
  67. package/src/components/CInput/index.js +2 -2
  68. package/src/components/CInputAddon/CInputAddon.vue +228 -228
  69. package/src/components/CInputAddon/index.js +2 -2
  70. package/src/components/CInputEmail/CInputEmail.vue +93 -93
  71. package/src/components/CInputEmail/index.js +2 -2
  72. package/src/components/CInsetTabs/CInsetTabs.vue +88 -88
  73. package/src/components/CInsetTabs/index.js +3 -3
  74. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  75. package/src/components/CModalHeading/index.js +2 -2
  76. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +70 -70
  77. package/src/components/CModuleHelpLinks/index.js +3 -3
  78. package/src/components/CMultiselect/CMultiselect.vue +615 -615
  79. package/src/components/CMultiselect/index.js +2 -2
  80. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  81. package/src/components/CMultiselectr/index.js +2 -2
  82. package/src/components/CPageHeading/CPageHeading.vue +56 -56
  83. package/src/components/CPageHeading/index.js +2 -2
  84. package/src/components/CPagination/CPagination.vue +233 -233
  85. package/src/components/CPagination/index.js +2 -2
  86. package/src/components/CPhoneNumber/CPhoneNumber.vue +114 -114
  87. package/src/components/CPhoneNumber/index.js +2 -2
  88. package/src/components/CProgress/CProgress.vue +57 -57
  89. package/src/components/CProgress/index.js +2 -2
  90. package/src/components/CRadio/CRadio.vue +126 -126
  91. package/src/components/CRadio/index.js +2 -2
  92. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  93. package/src/components/CRangeSlider/index.js +2 -2
  94. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  95. package/src/components/CReorderableStackedList/index.js +2 -2
  96. package/src/components/CSelect/CSelect.vue +539 -539
  97. package/src/components/CSelect/index.js +2 -2
  98. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  99. package/src/components/CSmallTimeline/index.js +2 -2
  100. package/src/components/CStackedList/CStackedList.vue +150 -150
  101. package/src/components/CStackedList/index.js +2 -2
  102. package/src/components/CStats/CStats.vue +116 -116
  103. package/src/components/CStats/index.js +2 -2
  104. package/src/components/CSwitch/CSwitch.vue +176 -176
  105. package/src/components/CSwitch/index.js +2 -2
  106. package/src/components/CTabLazy/CTabLazy.vue +63 -63
  107. package/src/components/CTabLazy/index.js +2 -2
  108. package/src/components/CTable/CTable.vue +671 -671
  109. package/src/components/CTable/index.js +2 -2
  110. package/src/components/CTabs/CTabs.vue +169 -169
  111. package/src/components/CTabs/index.js +2 -2
  112. package/src/components/CTag/CTag.vue +59 -59
  113. package/src/components/CTag/index.js +2 -2
  114. package/src/components/CTextarea/CTextarea.vue +107 -107
  115. package/src/components/CTextarea/index.js +2 -2
  116. package/src/components/CTimeline/CTimeline.vue +237 -237
  117. package/src/components/CTimeline/index.js +2 -2
  118. package/src/components/CUpload/CUpload.vue +267 -267
  119. package/src/components/CUpload/index.js +2 -2
  120. package/src/components/index.js +53 -53
  121. package/src/icons.js +459 -453
  122. package/src/main.js +22 -22
  123. package/src/stories/CAlerts.stories.js +37 -37
  124. package/src/stories/CAnchorTabs.stories.js +29 -29
  125. package/src/stories/CAnchorTag.stories.js +36 -36
  126. package/src/stories/CAvatar.stories.js +38 -38
  127. package/src/stories/CAvatarGroup.stories.js +100 -100
  128. package/src/stories/CBasicTable.stories.js +316 -316
  129. package/src/stories/CBreadcrumbs.stories.js +24 -24
  130. package/src/stories/CButton.stories.js +47 -47
  131. package/src/stories/CButtonGroup.stories.js +33 -33
  132. package/src/stories/CButtonIcon.stories.js +27 -27
  133. package/src/stories/CButtonLink.stories.js +24 -24
  134. package/src/stories/CButtonSelect.stories.js +41 -41
  135. package/src/stories/CButtonSelectBorder.stories.js +48 -48
  136. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  137. package/src/stories/CCalendar.stories.js +16 -16
  138. package/src/stories/CCard.stories.js +30 -30
  139. package/src/stories/CCheckbox.stories.js +29 -29
  140. package/src/stories/CCircularButton.stories.js +29 -29
  141. package/src/stories/CCollapsibleSection.stories.js +28 -28
  142. package/src/stories/CColorDots.stories.js +28 -28
  143. package/src/stories/CConfirmActionModal.stories.js +59 -59
  144. package/src/stories/CDatepicker.stories.js +30 -30
  145. package/src/stories/CDualSelect.stories.js +29 -29
  146. package/src/stories/CEditor.stories.js +30 -30
  147. package/src/stories/CFormSectionHeading.stories.js +34 -34
  148. package/src/stories/CGroupedSelect.stories.js +71 -71
  149. package/src/stories/CIcon.stories.js +28 -28
  150. package/src/stories/CIconDropdown.stories.js +45 -45
  151. package/src/stories/CInput.stories.js +36 -36
  152. package/src/stories/CInputAddon.stories.js +37 -37
  153. package/src/stories/CInputEmail.stories.js +27 -27
  154. package/src/stories/CInsetTabs.stories.js +38 -38
  155. package/src/stories/CModalHeading.stories.js +25 -25
  156. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  157. package/src/stories/CMultiselect.stories.js +167 -167
  158. package/src/stories/CMultiselectr.stories.js +23 -23
  159. package/src/stories/CPageHeading.stories.js +32 -32
  160. package/src/stories/CPagination.stories.js +30 -30
  161. package/src/stories/CPhoneNumber.stories.js +29 -29
  162. package/src/stories/CProgress.stories.js +23 -23
  163. package/src/stories/CRadio.stories.js +36 -36
  164. package/src/stories/CRangeSlider.stories.js +23 -23
  165. package/src/stories/CReorderableStackedList.stories.js +23 -23
  166. package/src/stories/CSelect.stories.js +109 -109
  167. package/src/stories/CSmallTimeline.stories.js +26 -26
  168. package/src/stories/CStackedList.stories.js +37 -37
  169. package/src/stories/CStats.stories.js +33 -33
  170. package/src/stories/CSwitch.stories.js +28 -28
  171. package/src/stories/CTabLazy.stories.js +26 -26
  172. package/src/stories/CTable.stories.js +169 -169
  173. package/src/stories/CTabs.stories.js +36 -36
  174. package/src/stories/CTag.stories.js +34 -34
  175. package/src/stories/CTextarea.stories.js +32 -32
  176. package/src/stories/CTimeline.stories.js +26 -26
  177. package/src/stories/CUpload.stories.js +36 -36
  178. package/src/stories/Introduction.stories.mdx +207 -207
  179. package/src/stories/Page.vue +88 -88
  180. package/src/stories/assets/code-brackets.svg +0 -0
  181. package/src/stories/assets/colors.svg +0 -0
  182. package/src/stories/assets/comments.svg +0 -0
  183. package/src/stories/assets/direction.svg +0 -0
  184. package/src/stories/assets/flow.svg +0 -0
  185. package/src/stories/assets/plugin.svg +0 -0
  186. package/src/stories/assets/repo.svg +0 -0
  187. package/src/stories/assets/stackalt.svg +0 -0
  188. package/src/stories/header.css +26 -26
  189. package/src/stories/page.css +69 -69
  190. package/src/stories/utils.css +17 -17
@@ -1,114 +1,114 @@
1
- <template>
2
- <div>
3
- <div class="flex items-center">
4
- <!-- label of phone field -->
5
- <label
6
- class="text-sm text-gray-900"
7
- :class="[isBlock ? ' font-medium' : '']"
8
- >{{ label }}</label
9
- >
10
- <!-- asterisk sign to render if field is required -->
11
- <p v-if="isRequired" class="ml-1 text-red-600">*</p>
12
- </div>
13
- <div class="mt-1 w-full shadow-sm">
14
- <vue-tel-input
15
- v-bind="bindProps"
16
- :autoFormat="false"
17
- v-model="value"
18
- @blur="handleBlur"
19
- ></vue-tel-input>
20
- </div>
21
- <p v-if="!isValidate" class="mt-1 text-sm text-red-600">
22
- {{ errorMessage }}
23
- </p>
24
- <!-- description about the input field -->
25
- <p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
26
- {{ helpText }}
27
- </p>
28
- </div>
29
- </template>
30
- <script>
31
- import { VueTelInput } from "vue-tel-input";
32
- export default {
33
- name: "CPhoneNumber",
34
- components: {
35
- VueTelInput,
36
- },
37
- props: {
38
- // eslint-disable-next-line vue/require-prop-type-constructor
39
- phone: {
40
- type: String,
41
- },
42
- label: String,
43
- isValidate: {
44
- type: Boolean,
45
- default: true,
46
- },
47
- isRequired: {
48
- type: Boolean,
49
- default: false,
50
- },
51
- errorMessage: {
52
- type: String,
53
- },
54
- // description about the field
55
- helpText: {
56
- type: String,
57
- },
58
- //label font-weight medium
59
- isBlock: {
60
- type: Boolean,
61
- default: false,
62
- },
63
- },
64
- data() {
65
- return {
66
- value: this.phone,
67
- bindProps: {
68
- placeholder: "",
69
- inputClasses: ["px-3", "py-2", "text-sm"],
70
- inputId: "c-phone",
71
- wrapperClasses: "c-phone-wrapper",
72
- showDialCode: false,
73
- enabledCountryCode: false,
74
- mode: "international",
75
- validCharactersOnly: true,
76
- },
77
- };
78
- },
79
- methods: {
80
- handleBlur() {
81
- this.$emit("blur", this.value);
82
- },
83
- },
84
- watch: {
85
- phone: {
86
- handler(newValue) {
87
- this.value = newValue;
88
- },
89
- deep: true,
90
- },
91
- value(newVal) {
92
- this.$emit("onChange", newVal);
93
- },
94
- },
95
- };
96
- </script>
97
- <style>
98
- .vue-tel-input {
99
- border: 1px solid #d1d5db !important;
100
- @apply text-gray-900;
101
- }
102
-
103
- #c-phone {
104
- border-top-right-radius: 0.375rem;
105
- border-bottom-right-radius: 0.375rem;
106
- }
107
- .c-phone-wrapper {
108
- border-radius: 0.375rem !important;
109
- }
110
- .vti__dropdown:hover {
111
- border-top-left-radius: 0.375rem;
112
- border-bottom-left-radius: 0.375rem;
113
- }
114
- </style>
1
+ <template>
2
+ <div>
3
+ <div class="flex items-center">
4
+ <!-- label of phone field -->
5
+ <label
6
+ class="text-sm text-gray-900"
7
+ :class="[isBlock ? ' font-medium' : '']"
8
+ >{{ label }}</label
9
+ >
10
+ <!-- asterisk sign to render if field is required -->
11
+ <p v-if="isRequired" class="ml-1 text-red-600">*</p>
12
+ </div>
13
+ <div class="mt-1 w-full shadow-sm">
14
+ <vue-tel-input
15
+ v-bind="bindProps"
16
+ :autoFormat="false"
17
+ v-model="value"
18
+ @blur="handleBlur"
19
+ ></vue-tel-input>
20
+ </div>
21
+ <p v-if="!isValidate" class="mt-1 text-sm text-red-600">
22
+ {{ errorMessage }}
23
+ </p>
24
+ <!-- description about the input field -->
25
+ <p v-if="helpText && isValidate == true" class="mt-2 text-sm text-gray-500">
26
+ {{ helpText }}
27
+ </p>
28
+ </div>
29
+ </template>
30
+ <script>
31
+ import { VueTelInput } from "vue-tel-input";
32
+ export default {
33
+ name: "CPhoneNumber",
34
+ components: {
35
+ VueTelInput,
36
+ },
37
+ props: {
38
+ // eslint-disable-next-line vue/require-prop-type-constructor
39
+ phone: {
40
+ type: String,
41
+ },
42
+ label: String,
43
+ isValidate: {
44
+ type: Boolean,
45
+ default: true,
46
+ },
47
+ isRequired: {
48
+ type: Boolean,
49
+ default: false,
50
+ },
51
+ errorMessage: {
52
+ type: String,
53
+ },
54
+ // description about the field
55
+ helpText: {
56
+ type: String,
57
+ },
58
+ //label font-weight medium
59
+ isBlock: {
60
+ type: Boolean,
61
+ default: false,
62
+ },
63
+ },
64
+ data() {
65
+ return {
66
+ value: this.phone,
67
+ bindProps: {
68
+ placeholder: "",
69
+ inputClasses: ["px-3", "py-2", "text-sm"],
70
+ inputId: "c-phone",
71
+ wrapperClasses: "c-phone-wrapper",
72
+ showDialCode: false,
73
+ enabledCountryCode: false,
74
+ mode: "international",
75
+ validCharactersOnly: true,
76
+ },
77
+ };
78
+ },
79
+ methods: {
80
+ handleBlur() {
81
+ this.$emit("blur", this.value);
82
+ },
83
+ },
84
+ watch: {
85
+ phone: {
86
+ handler(newValue) {
87
+ this.value = newValue;
88
+ },
89
+ deep: true,
90
+ },
91
+ value(newVal) {
92
+ this.$emit("onChange", newVal);
93
+ },
94
+ },
95
+ };
96
+ </script>
97
+ <style>
98
+ .vue-tel-input {
99
+ border: 1px solid #d1d5db !important;
100
+ @apply text-gray-900;
101
+ }
102
+
103
+ #c-phone {
104
+ border-top-right-radius: 0.375rem;
105
+ border-bottom-right-radius: 0.375rem;
106
+ }
107
+ .c-phone-wrapper {
108
+ border-radius: 0.375rem !important;
109
+ }
110
+ .vti__dropdown:hover {
111
+ border-top-left-radius: 0.375rem;
112
+ border-bottom-left-radius: 0.375rem;
113
+ }
114
+ </style>
@@ -1,3 +1,3 @@
1
- import CPhoneNumber from './CPhoneNumber.vue'
2
-
1
+ import CPhoneNumber from './CPhoneNumber.vue'
2
+
3
3
  export default CPhoneNumber
@@ -1,57 +1,57 @@
1
- <template>
2
- <div class="flex items-center justify-center">
3
- <p class="text-sm font-medium text-gray-900">
4
- {{ steps[currentStep - 1].name }}
5
- </p>
6
- <ol role="list" class="ml-4 flex items-center space-x-5">
7
- <li v-for="step in steps" :key="step.name">
8
- <!-- completed steps -->
9
- <div
10
- v-if="step.number < currentStep"
11
- @click="$emit('goStepBack', step.number)"
12
- class="block h-2.5 w-2.5 cursor-pointer rounded-full bg-indigo-600 hover:bg-indigo-900"
13
- >
14
- <span class="sr-only">{{ step.name }}</span>
15
- </div>
16
- <!-- current step -->
17
- <div
18
- v-else-if="step.number === currentStep"
19
- class="relative flex items-center justify-center"
20
- aria-current="step"
21
- >
22
- <span class="absolute flex h-5 w-5 p-px" aria-hidden="true">
23
- <span class="h-full w-full rounded-full bg-indigo-200" />
24
- </span>
25
- <span
26
- class="relative block h-2.5 w-2.5 rounded-full bg-indigo-600"
27
- aria-hidden="true"
28
- />
29
- <span class="sr-only">{{ step.name }}</span>
30
- </div>
31
- <!-- this is upcoming step so we don't have a emit from here -->
32
- <div
33
- v-else
34
- class="block h-2.5 w-2.5 rounded-full bg-gray-200 hover:bg-gray-400"
35
- >
36
- <span class="sr-only">{{ step.name }}</span>
37
- </div>
38
- </li>
39
- </ol>
40
- </div>
41
- </template>
42
-
43
- <script>
44
- export default {
45
- name: "CProgress",
46
- props: {
47
- steps: {
48
- type: Array,
49
- required: true,
50
- },
51
- currentStep: {
52
- type: Number,
53
- require: true,
54
- },
55
- },
56
- };
57
- </script>
1
+ <template>
2
+ <div class="flex items-center justify-center">
3
+ <p class="text-sm font-medium text-gray-900">
4
+ {{ steps[currentStep - 1].name }}
5
+ </p>
6
+ <ol role="list" class="ml-4 flex items-center space-x-5">
7
+ <li v-for="step in steps" :key="step.name">
8
+ <!-- completed steps -->
9
+ <div
10
+ v-if="step.number < currentStep"
11
+ @click="$emit('goStepBack', step.number)"
12
+ class="block h-2.5 w-2.5 cursor-pointer rounded-full bg-indigo-600 hover:bg-indigo-900"
13
+ >
14
+ <span class="sr-only">{{ step.name }}</span>
15
+ </div>
16
+ <!-- current step -->
17
+ <div
18
+ v-else-if="step.number === currentStep"
19
+ class="relative flex items-center justify-center"
20
+ aria-current="step"
21
+ >
22
+ <span class="absolute flex h-5 w-5 p-px" aria-hidden="true">
23
+ <span class="h-full w-full rounded-full bg-indigo-200" />
24
+ </span>
25
+ <span
26
+ class="relative block h-2.5 w-2.5 rounded-full bg-indigo-600"
27
+ aria-hidden="true"
28
+ />
29
+ <span class="sr-only">{{ step.name }}</span>
30
+ </div>
31
+ <!-- this is upcoming step so we don't have a emit from here -->
32
+ <div
33
+ v-else
34
+ class="block h-2.5 w-2.5 rounded-full bg-gray-200 hover:bg-gray-400"
35
+ >
36
+ <span class="sr-only">{{ step.name }}</span>
37
+ </div>
38
+ </li>
39
+ </ol>
40
+ </div>
41
+ </template>
42
+
43
+ <script>
44
+ export default {
45
+ name: "CProgress",
46
+ props: {
47
+ steps: {
48
+ type: Array,
49
+ required: true,
50
+ },
51
+ currentStep: {
52
+ type: Number,
53
+ require: true,
54
+ },
55
+ },
56
+ };
57
+ </script>
@@ -1,3 +1,3 @@
1
- import CProgress from './CProgress.vue'
2
-
1
+ import CProgress from './CProgress.vue'
2
+
3
3
  export default CProgress
@@ -1,126 +1,126 @@
1
- <template>
2
- <div>
3
- <div class="-space-y-px rounded-md bg-white" :class="customWrapperClasses">
4
- <div
5
- v-for="(item, index) in items"
6
- :class="`relative ${index != items.length - 1 ? 'pb-4' : ''} ${
7
- customClasses ? classes(item, index) : ''
8
- } first:rounded-t-md last:rounded-b-md`"
9
- v-bind:key="item[labelName]"
10
- >
11
- <div class="flex items-start">
12
- <input
13
- type="radio"
14
- :value="item.value"
15
- :name="name"
16
- v-model="selectedItem"
17
- @click="onChange(item.value)"
18
- class="mt-0.5 h-4 w-4 cursor-pointer border-gray-300 text-indigo-600 focus:ring-indigo-500 disabled:opacity-50"
19
- :disabled="isDisabled"
20
- />
21
- <label
22
- :class="`ml-3 flex cursor-pointer flex-col ${
23
- isDisabled ? 'opacity-60' : ''
24
- }`"
25
- @click="onChange(item.value)"
26
- >
27
- <span
28
- class="block text-sm font-medium text-gray-900"
29
- :class="
30
- customClasses && item.value === selectedItem
31
- ? 'text-indigo-900'
32
- : ''
33
- "
34
- >
35
- {{ item[labelName] }}
36
- </span>
37
- <span
38
- class="block text-sm"
39
- :class="
40
- customClasses && item.value === selectedItem
41
- ? 'text-indigo-700'
42
- : 'text-gray-500'
43
- "
44
- >
45
- {{ item.description }}
46
- </span>
47
- </label>
48
- </div>
49
- <slot v-if="item.value === selectedItem" :name="item.value" />
50
- </div>
51
- </div>
52
- </div>
53
- </template>
54
-
55
- <script>
56
- export default {
57
- name: "CRadio",
58
- props: {
59
- items: {
60
- type: Array,
61
- required: true,
62
- },
63
- selectedOption: {
64
- type: String,
65
- },
66
- isDisabled: {
67
- type: Boolean,
68
- },
69
- customClasses: {
70
- type: Boolean,
71
- default: false,
72
- },
73
- customWrapperClasses: {
74
- type: String,
75
- },
76
- name: {
77
- type: String,
78
- required: true,
79
- },
80
- labelName: {
81
- type: String,
82
- default: "label",
83
- },
84
- },
85
- data() {
86
- return {
87
- selectedItem: this.selectedOption,
88
- };
89
- },
90
- methods: {
91
- onChange(selectedValue) {
92
- if (!this.isDisabled) {
93
- this.$emit("onChange", selectedValue);
94
- this.selectedItem = selectedValue;
95
- }
96
- },
97
- classes(item, index) {
98
- let classForRadio = "";
99
- if (item.value === this.selectedItem && index === 0) {
100
- classForRadio =
101
- "border p-4 border-indigo-200 rounded-t-md bg-indigo-50";
102
- } else if (
103
- item.value === this.selectedItem &&
104
- index === this.items.length - 1
105
- ) {
106
- classForRadio =
107
- "border p-4 border-indigo-200 rounded-b-md bg-indigo-50";
108
- } else if (
109
- item.value === this.selectedItem &&
110
- 0 < index < this.items.length - 1
111
- ) {
112
- classForRadio = "border p-4 border-indigo-200 bg-indigo-50";
113
- } else {
114
- classForRadio = "border p-4 border-gray-200";
115
- }
116
-
117
- return classForRadio;
118
- },
119
- },
120
- watch: {
121
- selectedOption() {
122
- this.selectedItem = this.selectedOption;
123
- },
124
- },
125
- };
126
- </script>
1
+ <template>
2
+ <div>
3
+ <div class="-space-y-px rounded-md bg-white" :class="customWrapperClasses">
4
+ <div
5
+ v-for="(item, index) in items"
6
+ :class="`relative ${index != items.length - 1 ? 'pb-4' : ''} ${
7
+ customClasses ? classes(item, index) : ''
8
+ } first:rounded-t-md last:rounded-b-md`"
9
+ v-bind:key="item[labelName]"
10
+ >
11
+ <div class="flex items-start">
12
+ <input
13
+ type="radio"
14
+ :value="item.value"
15
+ :name="name"
16
+ v-model="selectedItem"
17
+ @click="onChange(item.value)"
18
+ class="mt-0.5 h-4 w-4 cursor-pointer border-gray-300 text-indigo-600 focus:ring-indigo-500 disabled:opacity-50"
19
+ :disabled="isDisabled"
20
+ />
21
+ <label
22
+ :class="`ml-3 flex cursor-pointer flex-col ${
23
+ isDisabled ? 'opacity-60' : ''
24
+ }`"
25
+ @click="onChange(item.value)"
26
+ >
27
+ <span
28
+ class="block text-sm font-medium text-gray-900"
29
+ :class="
30
+ customClasses && item.value === selectedItem
31
+ ? 'text-indigo-900'
32
+ : ''
33
+ "
34
+ >
35
+ {{ item[labelName] }}
36
+ </span>
37
+ <span
38
+ class="block text-sm"
39
+ :class="
40
+ customClasses && item.value === selectedItem
41
+ ? 'text-indigo-700'
42
+ : 'text-gray-500'
43
+ "
44
+ >
45
+ {{ item.description }}
46
+ </span>
47
+ </label>
48
+ </div>
49
+ <slot v-if="item.value === selectedItem" :name="item.value" />
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </template>
54
+
55
+ <script>
56
+ export default {
57
+ name: "CRadio",
58
+ props: {
59
+ items: {
60
+ type: Array,
61
+ required: true,
62
+ },
63
+ selectedOption: {
64
+ type: String,
65
+ },
66
+ isDisabled: {
67
+ type: Boolean,
68
+ },
69
+ customClasses: {
70
+ type: Boolean,
71
+ default: false,
72
+ },
73
+ customWrapperClasses: {
74
+ type: String,
75
+ },
76
+ name: {
77
+ type: String,
78
+ required: true,
79
+ },
80
+ labelName: {
81
+ type: String,
82
+ default: "label",
83
+ },
84
+ },
85
+ data() {
86
+ return {
87
+ selectedItem: this.selectedOption,
88
+ };
89
+ },
90
+ methods: {
91
+ onChange(selectedValue) {
92
+ if (!this.isDisabled) {
93
+ this.$emit("onChange", selectedValue);
94
+ this.selectedItem = selectedValue;
95
+ }
96
+ },
97
+ classes(item, index) {
98
+ let classForRadio = "";
99
+ if (item.value === this.selectedItem && index === 0) {
100
+ classForRadio =
101
+ "border p-4 border-indigo-200 rounded-t-md bg-indigo-50";
102
+ } else if (
103
+ item.value === this.selectedItem &&
104
+ index === this.items.length - 1
105
+ ) {
106
+ classForRadio =
107
+ "border p-4 border-indigo-200 rounded-b-md bg-indigo-50";
108
+ } else if (
109
+ item.value === this.selectedItem &&
110
+ 0 < index < this.items.length - 1
111
+ ) {
112
+ classForRadio = "border p-4 border-indigo-200 bg-indigo-50";
113
+ } else {
114
+ classForRadio = "border p-4 border-gray-200";
115
+ }
116
+
117
+ return classForRadio;
118
+ },
119
+ },
120
+ watch: {
121
+ selectedOption() {
122
+ this.selectedItem = this.selectedOption;
123
+ },
124
+ },
125
+ };
126
+ </script>
@@ -1,3 +1,3 @@
1
- import CRadio from './CRadio.vue'
2
-
1
+ import CRadio from './CRadio.vue'
2
+
3
3
  export default CRadio