classcard-ui 0.2.501 → 0.2.504

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 (175) hide show
  1. package/README.md +24 -24
  2. package/dist/classcard-ui.common.js +425 -53
  3. package/dist/classcard-ui.common.js.map +1 -1
  4. package/dist/classcard-ui.umd.js +425 -53
  5. package/dist/classcard-ui.umd.js.map +1 -1
  6. package/dist/classcard-ui.umd.min.js +7 -7
  7. package/dist/classcard-ui.umd.min.js.map +1 -1
  8. package/package.json +81 -81
  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 +104 -104
  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 +89 -89
  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 +150 -150
  25. package/src/components/CButton/index.js +2 -2
  26. package/src/components/CButtonGroup/CButtonGroup.vue +116 -116
  27. package/src/components/CButtonGroup/index.js +2 -2
  28. package/src/components/CButtonIcon/CButtonIcon.vue +91 -91
  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 +103 -103
  33. package/src/components/CButtonSelect/index.js +2 -2
  34. package/src/components/CButtonWithDropdown/CButtonWithDropdown.vue +168 -168
  35. package/src/components/CButtonWithDropdown/index.js +2 -2
  36. package/src/components/CCalendar/CCalendar.vue +287 -0
  37. package/src/components/CCalendar/index.js +3 -0
  38. package/src/components/CCard/CCard.vue +49 -49
  39. package/src/components/CCard/index.js +2 -2
  40. package/src/components/CCheckbox/CCheckbox.vue +70 -70
  41. package/src/components/CCheckbox/index.js +2 -2
  42. package/src/components/CCollapsibleSection/CCollapsibleSection.vue +99 -99
  43. package/src/components/CCollapsibleSection/index.js +2 -2
  44. package/src/components/CColorDots/CColorDots.vue +35 -35
  45. package/src/components/CColorDots/index.js +3 -3
  46. package/src/components/CConfirmActionModal/CConfirmActionModal.vue +120 -120
  47. package/src/components/CConfirmActionModal/index.js +3 -3
  48. package/src/components/CDatepicker/CDatepicker.vue +134 -134
  49. package/src/components/CDatepicker/index.js +2 -2
  50. package/src/components/CDualSelect/CDualSelect.vue +193 -193
  51. package/src/components/CDualSelect/index.js +2 -2
  52. package/src/components/CEditor/CEditor.vue +91 -91
  53. package/src/components/CEditor/index.js +2 -2
  54. package/src/components/CFormSectionHeading/CFormSectionHeading.vue +52 -52
  55. package/src/components/CFormSectionHeading/index.js +2 -2
  56. package/src/components/CGroupedSelect/CGroupedSelect.vue +217 -217
  57. package/src/components/CGroupedSelect/index.js +3 -3
  58. package/src/components/CIcon/CIcon.vue +72 -72
  59. package/src/components/CIcon/index.js +2 -2
  60. package/src/components/CIconDropdown/CIconDropdown.vue +94 -94
  61. package/src/components/CIconDropdown/index.js +2 -2
  62. package/src/components/CInput/CInput.vue +115 -115
  63. package/src/components/CInput/index.js +2 -2
  64. package/src/components/CInputAddon/CInputAddon.vue +199 -199
  65. package/src/components/CInputAddon/index.js +2 -2
  66. package/src/components/CInputEmail/CInputEmail.vue +84 -84
  67. package/src/components/CInputEmail/index.js +2 -2
  68. package/src/components/CModalHeading/CModalHeading.vue +22 -22
  69. package/src/components/CModalHeading/index.js +2 -2
  70. package/src/components/CModuleHelpLinks/CModuleHelpLinks.vue +39 -39
  71. package/src/components/CModuleHelpLinks/index.js +3 -3
  72. package/src/components/CMultiselect/CMultiselect.vue +313 -313
  73. package/src/components/CMultiselect/index.js +2 -2
  74. package/src/components/CMultiselectr/CMultiselectr.vue +44 -44
  75. package/src/components/CMultiselectr/index.js +2 -2
  76. package/src/components/CPageHeading/CPageHeading.vue +56 -56
  77. package/src/components/CPageHeading/index.js +2 -2
  78. package/src/components/CPagination/CPagination.vue +202 -202
  79. package/src/components/CPagination/index.js +2 -2
  80. package/src/components/CPhoneNumber/CPhoneNumber.vue +62 -62
  81. package/src/components/CPhoneNumber/index.js +2 -2
  82. package/src/components/CRadio/CRadio.vue +70 -70
  83. package/src/components/CRadio/index.js +2 -2
  84. package/src/components/CRangeSlider/CRangeSlider.vue +55 -55
  85. package/src/components/CRangeSlider/index.js +2 -2
  86. package/src/components/CReorderableStackedList/CReorderableStackedList.vue +94 -94
  87. package/src/components/CReorderableStackedList/index.js +2 -2
  88. package/src/components/CSelect/CSelect.vue +305 -286
  89. package/src/components/CSelect/index.js +2 -2
  90. package/src/components/CSmallTimeline/CSmallTimeline.vue +40 -40
  91. package/src/components/CSmallTimeline/index.js +2 -2
  92. package/src/components/CStackedList/CStackedList.vue +87 -87
  93. package/src/components/CStackedList/index.js +2 -2
  94. package/src/components/CStats/CStats.vue +88 -88
  95. package/src/components/CStats/index.js +2 -2
  96. package/src/components/CSwitch/CSwitch.vue +132 -132
  97. package/src/components/CSwitch/index.js +2 -2
  98. package/src/components/CTable/CTable.vue +501 -501
  99. package/src/components/CTable/index.js +2 -2
  100. package/src/components/CTabs/CTabs.vue +107 -107
  101. package/src/components/CTabs/index.js +2 -2
  102. package/src/components/CTag/CTag.vue +36 -36
  103. package/src/components/CTag/index.js +2 -2
  104. package/src/components/CTextarea/CTextarea.vue +85 -85
  105. package/src/components/CTextarea/index.js +2 -2
  106. package/src/components/CTimeline/CTimeline.vue +237 -237
  107. package/src/components/CTimeline/index.js +2 -2
  108. package/src/components/CUpload/CUpload.vue +196 -196
  109. package/src/components/CUpload/index.js +2 -2
  110. package/src/components/index.js +48 -47
  111. package/src/icons.js +254 -254
  112. package/src/main.js +22 -22
  113. package/src/stories/CAlerts.stories.js +37 -37
  114. package/src/stories/CAnchorTabs.stories.js +29 -29
  115. package/src/stories/CAnchorTag.stories.js +36 -36
  116. package/src/stories/CAvatar.stories.js +38 -38
  117. package/src/stories/CAvatarGroup.stories.js +100 -100
  118. package/src/stories/CBasicTable.stories.js +316 -316
  119. package/src/stories/CBreadcrumbs.stories.js +24 -24
  120. package/src/stories/CButton.stories.js +46 -46
  121. package/src/stories/CButtonGroup.stories.js +33 -33
  122. package/src/stories/CButtonIcon.stories.js +27 -27
  123. package/src/stories/CButtonLink.stories.js +24 -24
  124. package/src/stories/CButtonSelect.stories.js +32 -32
  125. package/src/stories/CButtonWithDropdown.stories.js +41 -41
  126. package/src/stories/CCalendar.stories.js +16 -0
  127. package/src/stories/CCard.stories.js +30 -30
  128. package/src/stories/CCheckbox.stories.js +29 -29
  129. package/src/stories/CCollapsibleSection.stories.js +28 -28
  130. package/src/stories/CColorDots.stories.js +28 -28
  131. package/src/stories/CConfirmActionModal.stories.js +59 -59
  132. package/src/stories/CDatepicker.stories.js +30 -30
  133. package/src/stories/CDualSelect.stories.js +29 -29
  134. package/src/stories/CEditor.stories.js +30 -30
  135. package/src/stories/CFormSectionHeading.stories.js +34 -34
  136. package/src/stories/CGroupedSelect.stories.js +69 -69
  137. package/src/stories/CIcon.stories.js +26 -26
  138. package/src/stories/CIconDropdown.stories.js +39 -39
  139. package/src/stories/CInput.stories.js +36 -36
  140. package/src/stories/CInputAddon.stories.js +37 -37
  141. package/src/stories/CInputEmail.stories.js +27 -27
  142. package/src/stories/CModalHeading.stories.js +25 -25
  143. package/src/stories/CModuleHelpLinks.stories.js +25 -25
  144. package/src/stories/CMultiselect.stories.js +97 -97
  145. package/src/stories/CMultiselectr.stories.js +23 -23
  146. package/src/stories/CPageHeading.stories.js +32 -32
  147. package/src/stories/CPagination.stories.js +30 -30
  148. package/src/stories/CPhoneNumber.stories.js +29 -29
  149. package/src/stories/CRadio.stories.js +36 -36
  150. package/src/stories/CRangeSlider.stories.js +23 -23
  151. package/src/stories/CReorderableStackedList.stories.js +23 -23
  152. package/src/stories/CSelect.stories.js +50 -50
  153. package/src/stories/CSmallTimeline.stories.js +26 -26
  154. package/src/stories/CStackedList.stories.js +37 -37
  155. package/src/stories/CStats.stories.js +33 -33
  156. package/src/stories/CSwitch.stories.js +28 -28
  157. package/src/stories/CTable.stories.js +77 -77
  158. package/src/stories/CTabs.stories.js +29 -29
  159. package/src/stories/CTag.stories.js +23 -23
  160. package/src/stories/CTextarea.stories.js +32 -32
  161. package/src/stories/CTimeline.stories.js +26 -26
  162. package/src/stories/CUpload.stories.js +36 -36
  163. package/src/stories/Introduction.stories.mdx +207 -207
  164. package/src/stories/Page.vue +88 -88
  165. package/src/stories/assets/code-brackets.svg +0 -0
  166. package/src/stories/assets/colors.svg +0 -0
  167. package/src/stories/assets/comments.svg +0 -0
  168. package/src/stories/assets/direction.svg +0 -0
  169. package/src/stories/assets/flow.svg +0 -0
  170. package/src/stories/assets/plugin.svg +0 -0
  171. package/src/stories/assets/repo.svg +0 -0
  172. package/src/stories/assets/stackalt.svg +0 -0
  173. package/src/stories/header.css +26 -26
  174. package/src/stories/page.css +69 -69
  175. package/src/stories/utils.css +17 -17
@@ -1,168 +1,168 @@
1
- <template>
2
- <div>
3
- <span class="relative inline-flex shadow-sm rounded-md">
4
- <button
5
- :class="classes"
6
- :type="type"
7
- @click="handleButtonClick"
8
- class="
9
- relative
10
- inline-flex
11
- items-center
12
- px-4
13
- py-2
14
- rounded-l-md
15
- text-sm
16
- font-medium
17
- focus:z-10
18
- focus:outline-none
19
- focus:ring-1
20
- "
21
- >
22
- {{ selectedValue ? selectedValue : label }}
23
- </button>
24
- <span class="-ml-px relative block">
25
- <button
26
- @click="toggleDropdown = !toggleDropdown"
27
- @blur="close()"
28
- :type="type"
29
- :class="classes"
30
- class="
31
- relative
32
- inline-flex
33
- items-center
34
- px-2
35
- py-2
36
- rounded-r-md
37
- text-sm
38
- font-medium
39
- t
40
- focus:z-10
41
- focus:outline-none
42
- focus:ring-1
43
- "
44
- >
45
- <span class="sr-only">Open options</span>
46
- <c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
47
- </button>
48
- <div
49
- v-if="toggleDropdown"
50
- :class="dropdownPositionClass"
51
- class="
52
- origin-top-right
53
- absolute
54
- right-0
55
- z-10
56
- mt-2
57
- w-56
58
- rounded-md
59
- shadow-lg
60
- bg-white
61
- ring-1 ring-gray-900 ring-opacity-5
62
- "
63
- >
64
- <div
65
- class="py-1"
66
- role="menu"
67
- aria-orientation="vertical"
68
- aria-labelledby="option-menu"
69
- >
70
- <li
71
- v-for="item in items"
72
- v-bind:key="item.items"
73
- @mousedown="selectOption($event, item.value)"
74
- class="
75
- block
76
- px-4
77
- py-2
78
- text-sm text-left text-gray-700
79
- hover:bg-gray-100
80
- hover:text-gray-900
81
- cursor-pointer
82
- "
83
- role="menuitem"
84
- >
85
- {{ item.text }}
86
- </li>
87
- </div>
88
- </div>
89
- </span>
90
- </span>
91
- </div>
92
- </template>
93
-
94
- <script>
95
- import CIcon from "../CIcon/CIcon.vue";
96
- export default {
97
- name: "CButtonWithDropdown",
98
- components: { CIcon },
99
- props: {
100
- label: {
101
- type: String,
102
- required: true,
103
- },
104
- type: {
105
- type: String,
106
- default: "secondary",
107
- },
108
- value: {
109
- type: String,
110
- },
111
- items: {
112
- type: Array,
113
- required: true,
114
- },
115
- dropdownPositionClass: {
116
- type: String,
117
- },
118
- },
119
- data() {
120
- return {
121
- toggleDropdown: false,
122
- isSelected: false,
123
- selectedValue: this.value,
124
- };
125
- },
126
-
127
- computed: {
128
- classes() {
129
- return {
130
- "border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
131
- this.type == "primary",
132
- "border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
133
- this.type == "secondary",
134
- "border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
135
- this.type == "success",
136
- "border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
137
- this.type == "danger",
138
- "border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
139
- this.type == "light-green",
140
- "border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
141
- this.type == "light-red",
142
- "cursor-default pointer-events-none": this.isLoading,
143
- };
144
- },
145
- },
146
- methods: {
147
- selectOption(event, value) {
148
- this.selectedValue = event.target.innerText;
149
- this.$emit("onSelectOption", value);
150
- this.toggleDropdown = false;
151
- this.isSelected = true;
152
- },
153
- close() {
154
- this.toggleDropdown = false;
155
- },
156
- handleButtonClick() {
157
- this.$emit("action", this.selectedValue);
158
- },
159
- },
160
- watch: {
161
- value() {
162
- this.selectedValue = this.value;
163
- },
164
- },
165
- };
166
- </script>
167
-
168
- <style></style>
1
+ <template>
2
+ <div>
3
+ <span class="relative inline-flex shadow-sm rounded-md">
4
+ <button
5
+ :class="classes"
6
+ :type="type"
7
+ @click="handleButtonClick"
8
+ class="
9
+ relative
10
+ inline-flex
11
+ items-center
12
+ px-4
13
+ py-2
14
+ rounded-l-md
15
+ text-sm
16
+ font-medium
17
+ focus:z-10
18
+ focus:outline-none
19
+ focus:ring-1
20
+ "
21
+ >
22
+ {{ selectedValue ? selectedValue : label }}
23
+ </button>
24
+ <span class="-ml-px relative block">
25
+ <button
26
+ @click="toggleDropdown = !toggleDropdown"
27
+ @blur="close()"
28
+ :type="type"
29
+ :class="classes"
30
+ class="
31
+ relative
32
+ inline-flex
33
+ items-center
34
+ px-2
35
+ py-2
36
+ rounded-r-md
37
+ text-sm
38
+ font-medium
39
+ t
40
+ focus:z-10
41
+ focus:outline-none
42
+ focus:ring-1
43
+ "
44
+ >
45
+ <span class="sr-only">Open options</span>
46
+ <c-icon name="chevron-down" type="solid" class="h-5 w-5"></c-icon>
47
+ </button>
48
+ <div
49
+ v-if="toggleDropdown"
50
+ :class="dropdownPositionClass"
51
+ class="
52
+ origin-top-right
53
+ absolute
54
+ right-0
55
+ z-10
56
+ mt-2
57
+ w-56
58
+ rounded-md
59
+ shadow-lg
60
+ bg-white
61
+ ring-1 ring-gray-900 ring-opacity-5
62
+ "
63
+ >
64
+ <div
65
+ class="py-1"
66
+ role="menu"
67
+ aria-orientation="vertical"
68
+ aria-labelledby="option-menu"
69
+ >
70
+ <li
71
+ v-for="item in items"
72
+ v-bind:key="item.items"
73
+ @mousedown="selectOption($event, item.value)"
74
+ class="
75
+ block
76
+ px-4
77
+ py-2
78
+ text-sm text-left text-gray-700
79
+ hover:bg-gray-100
80
+ hover:text-gray-900
81
+ cursor-pointer
82
+ "
83
+ role="menuitem"
84
+ >
85
+ {{ item.text }}
86
+ </li>
87
+ </div>
88
+ </div>
89
+ </span>
90
+ </span>
91
+ </div>
92
+ </template>
93
+
94
+ <script>
95
+ import CIcon from "../CIcon/CIcon.vue";
96
+ export default {
97
+ name: "CButtonWithDropdown",
98
+ components: { CIcon },
99
+ props: {
100
+ label: {
101
+ type: String,
102
+ required: true,
103
+ },
104
+ type: {
105
+ type: String,
106
+ default: "secondary",
107
+ },
108
+ value: {
109
+ type: String,
110
+ },
111
+ items: {
112
+ type: Array,
113
+ required: true,
114
+ },
115
+ dropdownPositionClass: {
116
+ type: String,
117
+ },
118
+ },
119
+ data() {
120
+ return {
121
+ toggleDropdown: false,
122
+ isSelected: false,
123
+ selectedValue: this.value,
124
+ };
125
+ },
126
+
127
+ computed: {
128
+ classes() {
129
+ return {
130
+ "border text-white hover:bg-indigo-800 bg-indigo-700 focus:ring-indigo-600":
131
+ this.type == "primary",
132
+ "border text-gray-700 border-gray-300 hover:bg-gray-50 focus:ring-indigo-600":
133
+ this.type == "secondary",
134
+ "border text-white hover:bg-green-800 bg-green-700 focus:ring-green-600":
135
+ this.type == "success",
136
+ "border text-white hover:bg-red-800 bg-red-700 focus:ring-red-600":
137
+ this.type == "danger",
138
+ "border border-green-800 bg-green-100 text-green-800 hover:bg-green-200 focus:ring-green-200":
139
+ this.type == "light-green",
140
+ "border border-red-800 bg-red-100 text-red-800 hover:bg-red-200 focus:ring-red-200":
141
+ this.type == "light-red",
142
+ "cursor-default pointer-events-none": this.isLoading,
143
+ };
144
+ },
145
+ },
146
+ methods: {
147
+ selectOption(event, value) {
148
+ this.selectedValue = event.target.innerText;
149
+ this.$emit("onSelectOption", value);
150
+ this.toggleDropdown = false;
151
+ this.isSelected = true;
152
+ },
153
+ close() {
154
+ this.toggleDropdown = false;
155
+ },
156
+ handleButtonClick() {
157
+ this.$emit("action", this.selectedValue);
158
+ },
159
+ },
160
+ watch: {
161
+ value() {
162
+ this.selectedValue = this.value;
163
+ },
164
+ },
165
+ };
166
+ </script>
167
+
168
+ <style></style>
@@ -1,3 +1,3 @@
1
- import CButtonWithDropdown from './CButtonWithDropdown.vue'
2
-
1
+ import CButtonWithDropdown from './CButtonWithDropdown.vue'
2
+
3
3
  export default CButtonWithDropdown
@@ -0,0 +1,287 @@
1
+ <template>
2
+ <!-- This example requires Tailwind CSS v2.0+ -->
3
+ <div>
4
+ <div
5
+ class="relative z-20 flex items-center justify-between border-b border-gray-200 py-4"
6
+ >
7
+ <h2 class="flex-auto font-semibold text-gray-900">
8
+ {{ currentMonthAndYear }}
9
+ </h2>
10
+ <button
11
+ type="button"
12
+ @click="handlePreviousMonthClick"
13
+ class="-my-1.5 flex flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500"
14
+ >
15
+ <span class="sr-only">Previous month</span>
16
+ <!-- Heroicon name: solid/chevron-left -->
17
+ <svg
18
+ class="h-5 w-5"
19
+ xmlns="http://www.w3.org/2000/svg"
20
+ viewBox="0 0 20 20"
21
+ fill="currentColor"
22
+ aria-hidden="true"
23
+ >
24
+ <path
25
+ fill-rule="evenodd"
26
+ d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z"
27
+ clip-rule="evenodd"
28
+ />
29
+ </svg>
30
+ </button>
31
+ <button
32
+ type="button"
33
+ @click="handleNextMonthClick"
34
+ class="-my-1.5 -mr-1.5 ml-2 flex flex-none items-center justify-center p-1.5 text-gray-400 hover:text-gray-500"
35
+ >
36
+ <span class="sr-only">Next month</span>
37
+ <!-- Heroicon name: solid/chevron-right -->
38
+ <svg
39
+ class="h-5 w-5"
40
+ xmlns="http://www.w3.org/2000/svg"
41
+ viewBox="0 0 20 20"
42
+ fill="currentColor"
43
+ aria-hidden="true"
44
+ >
45
+ <path
46
+ fill-rule="evenodd"
47
+ d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"
48
+ clip-rule="evenodd"
49
+ />
50
+ </svg>
51
+ </button>
52
+ </div>
53
+ <div class="shadow ring-1 ring-gray-200">
54
+ <div
55
+ class="grid grid-cols-7 gap-px border-b border-gray-300 bg-gray-200 text-center text-xs font-semibold leading-6 text-gray-700"
56
+ >
57
+ <div class="bg-white py-2">M<span class="sr-only">on</span></div>
58
+ <div class="bg-white py-2">T<span class="sr-only">ue</span></div>
59
+ <div class="bg-white py-2">W<span class="sr-only">ed</span></div>
60
+ <div class="bg-white py-2">T<span class="sr-only">hu</span></div>
61
+ <div class="bg-white py-2">F<span class="sr-only">ri</span></div>
62
+ <div class="bg-white py-2">S<span class="sr-only">at</span></div>
63
+ <div class="bg-white py-2">S<span class="sr-only">un</span></div>
64
+ </div>
65
+ <div class="flex bg-gray-200 text-xs leading-6 text-gray-700">
66
+ <div class="isolate grid w-full grid-cols-7 grid-rows-6 gap-px">
67
+ <button
68
+ v-for="date in daysArray"
69
+ :key="getDateKey(date)"
70
+ type="button"
71
+ :class="{
72
+ 'flex h-14 flex-col py-2 px-3 hover:bg-gray-100 focus:z-10': true,
73
+ 'bg-white': isCurrentMonth(date),
74
+ 'bg-gray-50': !isCurrentMonth(date),
75
+ 'font-semibold': isSelected(date) || isToday(date),
76
+ 'text-white': isSelected(date),
77
+ 'text-indigo-600': !isSelected(date) && isToday(date),
78
+ 'text-gray-900':
79
+ !isSelected(date) && isCurrentMonth(date) && !isToday(date),
80
+ 'text-gray-500':
81
+ !isSelected(date) && !isCurrentMonth(date) && !isToday(date),
82
+ }"
83
+ >
84
+ <time
85
+ :datetime="formatForDateTime(date)"
86
+ :class="{
87
+ 'ml-auto': true,
88
+ 'bg-indigo-600': isSelected(date) && isToday(date),
89
+ 'bg-gray-900': isSelected(date) && !isToday(date),
90
+ }"
91
+ >{{ getDayFromDate(date) }}</time
92
+ >
93
+ <span v-if="eventsArray" class="sr-only">0 events</span>
94
+ <span
95
+ v-if="eventsArray"
96
+ class="-mx-0.5 mt-auto flex flex-wrap-reverse"
97
+ >
98
+ <span
99
+ class="mx-0.5 mb-1 h-1.5 w-1.5 rounded-full bg-gray-400"
100
+ ></span>
101
+ </span>
102
+ </button>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ <section class="mt-12">
107
+ <h2 class="font-semibold text-gray-900">
108
+ Schedule for <time datetime="2022-01-21">January 21, 2022</time>
109
+ </h2>
110
+ <ol class="mt-4 space-y-1 text-sm leading-6 text-gray-500">
111
+ <li
112
+ class="group flex items-center space-x-4 rounded-xl py-2 px-4 focus-within:bg-gray-100 hover:bg-gray-100"
113
+ >
114
+ <img
115
+ src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80"
116
+ alt=""
117
+ class="h-10 w-10 flex-none rounded-full"
118
+ />
119
+ <div class="flex-auto">
120
+ <p class="text-gray-900">Leslie Alexander</p>
121
+ <p class="mt-0.5">
122
+ <time datetime="2022-01-21T13:00">1:00 PM</time> -
123
+ <time datetime="2022-01-21T14:30">2:30 PM</time>
124
+ </p>
125
+ </div>
126
+ <div
127
+ class="relative opacity-0 focus-within:opacity-100 group-hover:opacity-100"
128
+ >
129
+ <div>
130
+ <button
131
+ type="button"
132
+ class="-m-2 flex items-center rounded-full p-1.5 text-gray-500 hover:text-gray-600"
133
+ id="menu-0-button"
134
+ aria-expanded="false"
135
+ aria-haspopup="true"
136
+ >
137
+ <span class="sr-only">Open options</span>
138
+ <!-- Heroicon name: outline/dots-vertical -->
139
+ <svg
140
+ class="h-6 w-6"
141
+ xmlns="http://www.w3.org/2000/svg"
142
+ fill="none"
143
+ viewBox="0 0 24 24"
144
+ stroke-width="2"
145
+ stroke="currentColor"
146
+ aria-hidden="true"
147
+ >
148
+ <path
149
+ stroke-linecap="round"
150
+ stroke-linejoin="round"
151
+ d="M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z"
152
+ />
153
+ </svg>
154
+ </button>
155
+ </div>
156
+
157
+ <!--
158
+ Dropdown menu, show/hide based on menu state.
159
+
160
+ Entering: "transition ease-out duration-100"
161
+ From: "transform opacity-0 scale-95"
162
+ To: "transform opacity-100 scale-100"
163
+ Leaving: "transition ease-in duration-75"
164
+ From: "transform opacity-100 scale-100"
165
+ To: "transform opacity-0 scale-95"
166
+ -->
167
+ <div
168
+ class="absolute right-0 z-10 mt-2 w-36 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none"
169
+ role="menu"
170
+ aria-orientation="vertical"
171
+ aria-labelledby="menu-0-button"
172
+ tabindex="-1"
173
+ >
174
+ <div class="py-1" role="none">
175
+ <!-- Active: "bg-gray-100 text-gray-900", Not Active: "text-gray-700" -->
176
+ <a
177
+ href="#"
178
+ class="block px-4 py-2 text-sm text-gray-700"
179
+ role="menuitem"
180
+ tabindex="-1"
181
+ id="menu-0-item-0"
182
+ >Edit</a
183
+ >
184
+ <a
185
+ href="#"
186
+ class="block px-4 py-2 text-sm text-gray-700"
187
+ role="menuitem"
188
+ tabindex="-1"
189
+ id="menu-0-item-1"
190
+ >Cancel</a
191
+ >
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </li>
196
+
197
+ <!-- More meetings... -->
198
+ </ol>
199
+ </section>
200
+ </div>
201
+ </template>
202
+
203
+ <script>
204
+ import * as dayjs from "dayjs";
205
+
206
+ export default {
207
+ name: "CCalendar",
208
+ props: {
209
+ value: {
210
+ type: [String, Date],
211
+ default: () => null,
212
+ },
213
+ eventsArray: {
214
+ type: Array,
215
+ default: () => null,
216
+ },
217
+ },
218
+ data() {
219
+ return {
220
+ activeDate: dayjs(),
221
+ };
222
+ },
223
+ methods: {
224
+ handlePreviousMonthClick() {
225
+ this.activeDate = this.activeDate.subtract(1, "month");
226
+ },
227
+ handleNextMonthClick() {
228
+ this.activeDate = this.activeDate.add(1, "month");
229
+ },
230
+ getDayFromDate(date) {
231
+ return dayjs(date).format("D");
232
+ },
233
+ isSelected(date) {
234
+ return dayjs(date).isSame(this.value, "day");
235
+ },
236
+ isToday(date) {
237
+ return dayjs(date).isSame(dayjs(), "day");
238
+ },
239
+ isCurrentMonth(date) {
240
+ return dayjs(date).isSame(this.activeDate, "month");
241
+ },
242
+ getDateKey(date) {
243
+ return dayjs(date).format();
244
+ },
245
+ formatForDateTime(date) {
246
+ return dayjs(date).format("YYYY-MM-DD");
247
+ },
248
+ },
249
+ computed: {
250
+ currentMonthAndYear() {
251
+ return dayjs(this.activeDate).format("MMMM YYYY");
252
+ },
253
+ daysArray() {
254
+ let dates = [];
255
+ let firstDayOfmonth = dayjs(this.activeDate).startOf("month");
256
+ let lastDayOfmonth = dayjs(this.activeDate).endOf("month");
257
+ let firstDayOfMonthInWeek = firstDayOfmonth.day();
258
+ let lastDayOfMonthInWeek = lastDayOfmonth.day();
259
+ if (firstDayOfMonthInWeek === 0) {
260
+ firstDayOfMonthInWeek = 7;
261
+ }
262
+ if (lastDayOfMonthInWeek === 0) {
263
+ lastDayOfMonthInWeek = 7;
264
+ }
265
+ for (let i = 0; i < firstDayOfMonthInWeek - 1; i++) {
266
+ dates.unshift(firstDayOfmonth.subtract(i + 1, "day"));
267
+ }
268
+ for (let i = 0; i < dayjs(this.activeDate).daysInMonth(); i++) {
269
+ dates.push(firstDayOfmonth.add(i, "day"));
270
+ }
271
+ let cursor = 1;
272
+ for (let i = lastDayOfMonthInWeek; i < 7; i++) {
273
+ dates.push(lastDayOfmonth.add(cursor, "day"));
274
+ cursor++;
275
+ }
276
+ return dates;
277
+ },
278
+ },
279
+ mounted() {
280
+ if (this.value) {
281
+ this.activeDate = dayjs(this.value);
282
+ }
283
+ },
284
+ };
285
+ </script>
286
+
287
+ <style></style>
@@ -0,0 +1,3 @@
1
+ import CCalendar from "./CCalendar.vue";
2
+
3
+ export default CCalendar;