@teammodlr/ui-kit 1.0.7 → 2.0.1

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 (260) hide show
  1. package/lib/__storybook__/argTypes.d.ts +10 -1
  2. package/lib/components/avatar/Avatar.vue.d.ts +16 -30
  3. package/lib/components/avatar/style/Avatar.css.d.ts +9 -0
  4. package/lib/components/avatar/style/index.d.ts +1 -0
  5. package/lib/components/avatargroup/AvatarGroup.vue.d.ts +28 -13
  6. package/lib/components/avatargroup/style/AvatarGroup.css.d.ts +2 -0
  7. package/lib/components/avatargroup/style/index.d.ts +1 -0
  8. package/lib/components/avatargroup/symbol.d.ts +13 -0
  9. package/lib/components/badge/Badge.vue.d.ts +30 -0
  10. package/lib/components/badge/style/Badge.css.d.ts +4 -0
  11. package/lib/components/badge/style/index.d.ts +1 -0
  12. package/lib/components/breadcrumb/Breadcrumb.vue.d.ts +12 -3
  13. package/lib/components/{breadcrumbitem → breadcrumb}/BreadcrumbItem.vue.d.ts +11 -0
  14. package/lib/components/breadcrumb/style/Breadcrumb.css.d.ts +4 -0
  15. package/lib/components/breadcrumb/style/index.d.ts +1 -0
  16. package/lib/components/breadcrumb/symbol.d.ts +13 -0
  17. package/lib/components/button/Button.vue.d.ts +39 -28
  18. package/lib/components/button/style/Button.css.d.ts +24 -0
  19. package/lib/components/button/style/index.d.ts +1 -0
  20. package/lib/components/buttongroup/ButtonGroup.vue.d.ts +2 -13
  21. package/lib/components/buttongroup/style/ButtonGroup.css.d.ts +2 -0
  22. package/lib/components/buttongroup/style/index.d.ts +1 -0
  23. package/lib/components/buttongroup/symbol.d.ts +6 -0
  24. package/lib/components/checkbox/Checkbox.vue.d.ts +17 -20
  25. package/lib/components/checkbox/style/Checkbox.css.d.ts +16 -0
  26. package/lib/components/checkbox/style/index.d.ts +1 -0
  27. package/lib/components/colorpicker/ColorPicker.vue.d.ts +75 -0
  28. package/lib/components/colorpicker/style/ColorPicker.css.d.ts +9 -0
  29. package/lib/components/colorpicker/style/index.d.ts +1 -0
  30. package/lib/components/colorpicker/utils.d.ts +16 -0
  31. package/lib/components/dropdown/Dropdown.vue.d.ts +5 -4
  32. package/lib/components/dropdown/DropdownItem.vue.d.ts +12 -5
  33. package/lib/components/dropdown/DropdownList.vue.d.ts +4 -1
  34. package/lib/components/dropdown/style/Dropdown.css.d.ts +5 -0
  35. package/lib/components/dropdown/style/index.d.ts +1 -0
  36. package/lib/components/dropdown/symbol.d.ts +6 -0
  37. package/lib/components/form/Form.vue.d.ts +12 -1
  38. package/lib/components/form/style/Form.css.d.ts +4 -0
  39. package/lib/components/form/style/index.d.ts +2 -0
  40. package/lib/components/index.d.ts +10 -1
  41. package/lib/components/input/Input.vue.d.ts +35 -19
  42. package/lib/components/input/style/Input.css.d.ts +23 -0
  43. package/lib/components/input/style/index.d.ts +1 -0
  44. package/lib/components/link/Link.vue.d.ts +2 -2
  45. package/lib/components/messageprovider/Message.vue.d.ts +13 -1
  46. package/lib/components/messageprovider/MessageProvider.vue.d.ts +6 -5
  47. package/lib/components/messageprovider/style/Message.css.d.ts +12 -0
  48. package/lib/components/messageprovider/style/index.d.ts +1 -0
  49. package/lib/components/messageprovider/types.d.ts +2 -1
  50. package/lib/components/modal/Modal.vue.d.ts +52 -0
  51. package/lib/components/modal/style/Modal.css.d.ts +21 -0
  52. package/lib/components/modal/style/index.d.ts +1 -0
  53. package/lib/components/radio/Radio.vue.d.ts +85 -0
  54. package/lib/components/radio/style/Checkbox.css.d.ts +16 -0
  55. package/lib/components/radio/style/index.d.ts +1 -0
  56. package/lib/components/radiobutton/RadioButton.vue.d.ts +98 -0
  57. package/lib/components/radiobutton/style/RadioButton.css.d.ts +14 -0
  58. package/lib/components/radiobutton/style/index.d.ts +1 -0
  59. package/lib/components/radiobuttongroup/RadioButtonGroup.vue.d.ts +48 -0
  60. package/lib/components/radiobuttongroup/style/RadioButtonGroup.css.d.ts +3 -0
  61. package/lib/components/radiobuttongroup/style/index.d.ts +1 -0
  62. package/lib/components/radiobuttongroup/symbol.d.ts +9 -0
  63. package/lib/components/select/Select.vue.d.ts +22 -13
  64. package/lib/components/select/style/Select.css.d.ts +30 -0
  65. package/lib/components/select/style/index.d.ts +1 -0
  66. package/lib/components/skeleton/Skeleton.vue.d.ts +15 -21
  67. package/lib/components/skeleton/style/Skeleton.css.d.ts +8 -0
  68. package/lib/components/skeleton/style/index.d.ts +2 -0
  69. package/lib/components/slider/Slider.vue.d.ts +32 -0
  70. package/lib/components/slider/style/Slider.css.d.ts +4 -0
  71. package/lib/components/slider/style/index.d.ts +1 -0
  72. package/lib/components/tab/TabGroup.vue.d.ts +1 -1
  73. package/lib/components/table/Table.vue.d.ts +1 -1
  74. package/lib/components/tag/Tag.vue.d.ts +44 -0
  75. package/lib/components/tag/style/Tag.css.d.ts +11 -0
  76. package/lib/components/tag/style/index.d.ts +1 -0
  77. package/lib/components/tooltip/Tooltip.vue.d.ts +17 -2
  78. package/lib/components/tooltip/style/Tooltip.css.d.ts +6 -0
  79. package/lib/components/tooltip/style/index.d.ts +1 -0
  80. package/lib/components/virtualscroll/VirtualScroll.vue.d.ts +46 -16
  81. package/lib/components/virtualscroll/style/VirtualScroll.css.d.ts +1 -0
  82. package/lib/components/virtualscroll/style/index.d.ts +1 -0
  83. package/lib/composables/useInput.d.ts +1 -1
  84. package/lib/composables/useInteractive.d.ts +15 -0
  85. package/lib/composables/useZIndex.d.ts +8 -0
  86. package/lib/index.cjs.js +8 -2
  87. package/lib/index.d.ts +0 -1
  88. package/lib/index.es.js +3699 -1694
  89. package/lib/style.css +1 -1
  90. package/lib/styles/theme.css.d.ts +147 -0
  91. package/lib/styles/typography.css.d.ts +22 -0
  92. package/lib/types/props.d.ts +1 -0
  93. package/package.json +34 -26
  94. package/src/__storybook__/argTypes.ts +19 -1
  95. package/src/components/avatar/Avatar.vue +33 -26
  96. package/src/components/avatar/examples/index.stories.ts +1 -1
  97. package/src/components/avatar/style/Avatar.css.ts +92 -0
  98. package/src/components/avatar/style/index.ts +1 -0
  99. package/src/components/avatargroup/AvatarGroup.vue +71 -32
  100. package/src/components/avatargroup/examples/basic.vue +33 -7
  101. package/src/components/avatargroup/examples/index.stories.ts +4 -8
  102. package/src/components/avatargroup/style/AvatarGroup.css.ts +21 -0
  103. package/src/components/avatargroup/style/index.ts +1 -0
  104. package/src/components/avatargroup/symbol.ts +17 -0
  105. package/src/components/badge/Badge.css +128 -0
  106. package/src/components/badge/Badge.vue +43 -0
  107. package/src/components/badge/examples/basic.vue +10 -0
  108. package/src/components/badge/examples/index.stories.ts +21 -0
  109. package/src/components/badge/examples/index.ts +1 -0
  110. package/src/components/badge/style/Badge.css.ts +124 -0
  111. package/src/components/badge/style/index.ts +1 -0
  112. package/src/components/breadcrumb/Breadcrumb.vue +22 -15
  113. package/src/components/breadcrumb/BreadcrumbItem.vue +73 -0
  114. package/src/components/breadcrumb/examples/basic.vue +5 -7
  115. package/src/components/breadcrumb/examples/index.stories.ts +2 -2
  116. package/src/components/breadcrumb/style/Breadcrumb.css.ts +40 -0
  117. package/src/components/breadcrumb/style/index.ts +1 -0
  118. package/src/components/breadcrumb/symbol.ts +17 -0
  119. package/src/components/button/Button.vue +194 -107
  120. package/src/components/button/examples/icon-left.vue +12 -0
  121. package/src/components/button/examples/icon.vue +6 -7
  122. package/src/components/button/examples/index.stories.ts +9 -7
  123. package/src/components/button/examples/index.ts +3 -2
  124. package/src/components/button/examples/variants-secondary.vue +8 -0
  125. package/src/components/button/examples/variants.vue +8 -0
  126. package/src/components/button/style/Button.css.ts +585 -0
  127. package/src/components/button/style/index.ts +1 -0
  128. package/src/components/buttongroup/ButtonGroup.vue +36 -47
  129. package/src/components/buttongroup/examples/basic.vue +2 -2
  130. package/src/components/buttongroup/examples/icon-group.vue +22 -0
  131. package/src/components/buttongroup/examples/index.stories.ts +4 -2
  132. package/src/components/buttongroup/examples/index.ts +1 -0
  133. package/src/components/buttongroup/style/ButtonGroup.css.ts +40 -0
  134. package/src/components/buttongroup/style/index.ts +1 -0
  135. package/src/components/buttongroup/symbol.ts +8 -0
  136. package/src/components/checkbox/Checkbox.vue +70 -54
  137. package/src/components/checkbox/examples/index.stories.ts +1 -1
  138. package/src/components/checkbox/style/Checkbox.css.ts +127 -0
  139. package/src/components/checkbox/style/index.ts +1 -0
  140. package/src/components/colorpicker/ColorPicker.vue +283 -0
  141. package/src/components/colorpicker/examples/basic.vue +3 -0
  142. package/src/components/colorpicker/examples/index.stories.ts +17 -0
  143. package/src/components/colorpicker/examples/index.ts +1 -0
  144. package/src/components/colorpicker/style/ColorPicker.css.ts +97 -0
  145. package/src/components/colorpicker/style/index.ts +1 -0
  146. package/src/components/colorpicker/utils.ts +188 -0
  147. package/src/components/dropdown/Dropdown.vue +45 -24
  148. package/src/components/dropdown/DropdownItem.vue +121 -118
  149. package/src/components/dropdown/DropdownList.vue +3 -3
  150. package/src/components/dropdown/DropdownWrapper.vue +2 -1
  151. package/src/components/dropdown/examples/custom.vue +13 -0
  152. package/src/components/dropdown/examples/index.stories.ts +4 -2
  153. package/src/components/dropdown/examples/index.ts +1 -0
  154. package/src/components/dropdown/style/Dropdown.css.ts +48 -0
  155. package/src/components/dropdown/style/index.ts +1 -0
  156. package/src/components/dropdown/symbol.ts +8 -0
  157. package/src/components/form/Form.vue +12 -3
  158. package/src/components/form/examples/basic.vue +4 -2
  159. package/src/components/form/examples/index.stories.ts +4 -2
  160. package/src/components/form/style/Form.css.ts +23 -0
  161. package/src/components/form/style/index.ts +2 -0
  162. package/src/components/image/examples/index.stories.ts +1 -1
  163. package/src/components/index.ts +10 -2
  164. package/src/components/input/Input.vue +84 -42
  165. package/src/components/input/examples/basic.vue +2 -1
  166. package/src/components/input/examples/index.stories.ts +1 -1
  167. package/src/components/input/examples/prefix.vue +4 -2
  168. package/src/components/input/examples/suffix.vue +4 -2
  169. package/src/components/input/style/Input.css.ts +221 -0
  170. package/src/components/input/style/index.ts +1 -0
  171. package/src/components/link/examples/index.stories.ts +1 -1
  172. package/src/components/messageprovider/Message.vue +52 -5
  173. package/src/components/messageprovider/MessageProvider.css +0 -13
  174. package/src/components/messageprovider/MessageProvider.vue +18 -16
  175. package/src/components/messageprovider/examples/basic.vue +56 -5
  176. package/src/components/messageprovider/examples/index.stories.ts +0 -1
  177. package/src/components/messageprovider/examples/index.ts +1 -0
  178. package/src/components/messageprovider/examples/update.vue +34 -0
  179. package/src/components/messageprovider/examples/wrapper.vue +1 -1
  180. package/src/components/messageprovider/style/Message.css.ts +109 -0
  181. package/src/components/messageprovider/style/index.ts +1 -0
  182. package/src/components/messageprovider/types.ts +9 -1
  183. package/src/components/modal/Modal.vue +126 -0
  184. package/src/components/modal/examples/basic.vue +40 -0
  185. package/src/components/modal/examples/index.stories.ts +20 -0
  186. package/src/components/modal/examples/index.ts +2 -0
  187. package/src/components/modal/examples/modal-form.vue +99 -0
  188. package/src/components/modal/style/Modal.css.ts +257 -0
  189. package/src/components/modal/style/index.ts +1 -0
  190. package/src/components/radio/Checkbox.css +185 -0
  191. package/src/components/radio/Radio.vue +137 -0
  192. package/src/components/radio/examples/basic.vue +9 -0
  193. package/src/components/radio/examples/index.stories.ts +19 -0
  194. package/src/components/radio/examples/index.ts +2 -0
  195. package/src/components/radio/style/Checkbox.css.ts +132 -0
  196. package/src/components/radio/style/index.ts +1 -0
  197. package/src/components/radiobutton/RadioButton.vue +131 -0
  198. package/src/components/radiobutton/style/RadioButton.css.ts +185 -0
  199. package/src/components/radiobutton/style/index.ts +1 -0
  200. package/src/components/radiobuttongroup/RadioButtonGroup.vue +75 -0
  201. package/src/components/radiobuttongroup/examples/basic.vue +17 -0
  202. package/src/components/radiobuttongroup/examples/index.stories.ts +22 -0
  203. package/src/components/radiobuttongroup/examples/index.ts +2 -0
  204. package/src/components/radiobuttongroup/style/RadioButtonGroup.css.ts +37 -0
  205. package/src/components/radiobuttongroup/style/index.ts +1 -0
  206. package/src/components/radiobuttongroup/symbol.ts +11 -0
  207. package/src/components/select/Select.css +0 -226
  208. package/src/components/select/Select.vue +116 -48
  209. package/src/components/select/examples/index.stories.ts +1 -1
  210. package/src/components/select/examples/multiple.vue +1 -2
  211. package/src/components/select/style/Select.css.ts +254 -0
  212. package/src/components/select/style/index.ts +1 -0
  213. package/src/components/skeleton/Skeleton.vue +55 -47
  214. package/src/components/skeleton/examples/index.stories.ts +1 -8
  215. package/src/components/skeleton/style/Skeleton.css.ts +57 -0
  216. package/src/components/skeleton/style/index.ts +2 -0
  217. package/src/components/slider/Slider.vue +76 -0
  218. package/src/components/slider/style/Slider.css.ts +43 -0
  219. package/src/components/slider/style/index.ts +1 -0
  220. package/src/components/tab/examples/index.stories.ts +1 -1
  221. package/src/components/table/examples/index.stories.ts +1 -1
  222. package/src/components/tag/Tag.css +0 -0
  223. package/src/components/tag/Tag.vue +66 -0
  224. package/src/components/tag/examples/basic.vue +5 -0
  225. package/src/components/tag/examples/index.stories.ts +22 -0
  226. package/src/components/tag/examples/index.ts +1 -0
  227. package/src/components/tag/style/Tag.css.ts +79 -0
  228. package/src/components/tag/style/index.ts +1 -0
  229. package/src/components/tooltip/Tooltip.css +0 -6
  230. package/src/components/tooltip/Tooltip.vue +53 -22
  231. package/src/components/tooltip/examples/basic.vue +2 -5
  232. package/src/components/tooltip/examples/index.stories.ts +1 -1
  233. package/src/components/tooltip/style/Tooltip.css.ts +48 -0
  234. package/src/components/tooltip/style/index.ts +1 -0
  235. package/src/components/virtualscroll/VirtualScroll.vue +159 -53
  236. package/src/components/virtualscroll/examples/basic.vue +21 -27
  237. package/src/components/virtualscroll/examples/index.stories.ts +2 -18
  238. package/src/components/virtualscroll/style/VirtualScroll.css.ts +18 -0
  239. package/src/components/virtualscroll/style/index.ts +1 -0
  240. package/src/composables/useInput.ts +2 -2
  241. package/src/composables/useInteractive.ts +20 -0
  242. package/src/composables/usePopper.ts +1 -1
  243. package/src/composables/useZIndex.ts +31 -0
  244. package/src/css/components.css +4 -3
  245. package/src/css/normalize.css +0 -379
  246. package/src/css/variables.css +2 -2
  247. package/src/examples/cards/cards.stories.ts +9 -0
  248. package/src/examples/cards/sidebar.vue +263 -0
  249. package/src/index.ts +1 -1
  250. package/src/styles/theme.css.ts +149 -0
  251. package/src/styles/typography.css.ts +91 -0
  252. package/src/types/props.ts +2 -0
  253. package/lib/components/breadcrumbitem/index.d.ts +0 -1
  254. package/src/components/avatar/Avatar.css +0 -69
  255. package/src/components/breadcrumbitem/BreadcrumbItem.vue +0 -66
  256. package/src/components/breadcrumbitem/index.ts +0 -1
  257. package/src/components/button/examples/colors-secondary.vue +0 -8
  258. package/src/components/button/examples/colors.vue +0 -8
  259. package/src/components/dropdown/Dropdown.css +0 -68
  260. /package/src/components/button/{Button.css → Button-old.css} +0 -0
@@ -1,13 +1,14 @@
1
1
  import MButtonGroup from "../ButtonGroup.vue";
2
2
  import MButton from "../../button/Button.vue";
3
3
  import {
4
- MButtonGroupBasic
4
+ MButtonGroupBasic,
5
+ MButtonGroupIconGroup
5
6
  } from "./index";
6
7
 
7
8
  import {
8
9
  createStory,
9
10
  sizeArgType
10
- } from "@/__storybook__";
11
+ } from "../../../__storybook__";
11
12
 
12
13
  export default {
13
14
  component: MButtonGroup,
@@ -19,3 +20,4 @@ export default {
19
20
  }
20
21
 
21
22
  export const Basic = createStory(MButtonGroupBasic);
23
+ export const IconGroup = createStory(MButtonGroupIconGroup);
@@ -1 +1,2 @@
1
1
  export { default as MButtonGroupBasic } from './basic.vue';
2
+ export { default as MButtonGroupIconGroup } from './icon-group.vue';
@@ -0,0 +1,40 @@
1
+ import {globalStyle, style} from "@vanilla-extract/css";
2
+ import {base as button} from "../../button/style/Button.css";
3
+ import {border as buttonBorder} from "../../button/style/Button.css";
4
+ import {borderState} from "../../button/style/Button.css";
5
+
6
+ export const base = style({
7
+ display: "inline-flex",
8
+ position: "relative",
9
+ flexWrap: "nowrap",
10
+ });
11
+
12
+ globalStyle(`${base} > ${button}:first-child:not(:last-child)`, {
13
+ marginRight: 0,
14
+ borderTopRightRadius: 0,
15
+ borderBottomRightRadius: 0
16
+ });
17
+
18
+ globalStyle(`${base} > ${button}:not(:first-child):not(:last-child)`, {
19
+ marginLeft: 0,
20
+ borderRadius: 0,
21
+ marginRight: 0,
22
+ });
23
+
24
+ globalStyle(`${base} > ${button}:not(:first-child) ${buttonBorder}`, {
25
+ borderLeftWidth: 0,
26
+ });
27
+
28
+ globalStyle(`${base} > ${button}:last-child:not(:first-child)`, {
29
+ marginLeft: 0,
30
+ borderTopLeftRadius: 0,
31
+ borderBottomLeftRadius: 0
32
+ });
33
+
34
+ globalStyle(`${base} > ${button}:not(:first-child) ${borderState}`, {
35
+ left: '-1px'
36
+ });
37
+
38
+ export const vertical = style({
39
+ flexDirection: "column",
40
+ });
@@ -0,0 +1 @@
1
+ export * from './ButtonGroup.css';
@@ -0,0 +1,8 @@
1
+ import type {InjectionKey} from "vue";
2
+ import type {Size} from "../../types/props";
3
+
4
+ export interface ButtonGroupState {
5
+ size: Size
6
+ }
7
+
8
+ export const BUTTON_GROUP_STATE: InjectionKey<ButtonGroupState> = Symbol('BUTTON_GROUP_STATE');
@@ -1,7 +1,6 @@
1
1
  <template>
2
- <div ref="checkboxRef" :class="wrapperComputedClasses">
3
- <div :class="checkboxComputedClass" @click.prevent="toggle">
4
- <input
2
+ <label :class="style.base" @click.prevent="toggle">
3
+ <input
5
4
  v-model="checked"
6
5
  type="checkbox"
7
6
  :aria-checked="checked ? 'true' : 'false'"
@@ -10,33 +9,47 @@
10
9
  :disabled="disabled || loading"
11
10
  :name="name"
12
11
  :id="id"
13
- />
14
- <span></span>
15
- <div class="m-checkbox__label" :id="`${id}-label`">
16
- <template v-if="hasSlot">
17
- <slot />
18
- </template>
19
- <template v-else>
20
- {{ label }}
21
- </template>
22
- </div>
23
- </div>
24
- <p v-if="inputError" class="m-input__error">
25
- {{ inputError }}
26
- </p>
27
- </div>
12
+ :class="style.input"
13
+ v-bind="$attrs"
14
+ v-on="inputListeners"
15
+ />
16
+ <span :class="classes">
17
+ <svg v-if="checked && !indeterminate" :class="style.checkmark" xmlns="http://www.w3.org/2000/svg"
18
+ fill="none" viewBox="0 0 24 24" width="24" height="24" focusable="false"><path fill="currentColor"
19
+ fill-rule="evenodd"
20
+ d="m21.042 6.855-11.34 11.17-6.398-7.178L5.096 9.25l4.72 5.294 9.542-9.399 1.684 1.71z"
21
+ clip-rule="evenodd"></path></svg>
22
+ <svg v-if="indeterminate && !checked" :class="style.checkmark" xmlns="http://www.w3.org/2000/svg"
23
+ fill="none" viewBox="0 0 24 24" width="24" height="24" focusable="false"><path fill="currentColor"
24
+ fill-rule="evenodd"
25
+ d="M21.3 13.2H2.8v-2.4h18.5v2.4z"
26
+ clip-rule="evenodd"></path></svg>
27
+ </span>
28
+ <span :class="style.label" :id="`${id}-label`">
29
+ <template v-if="hasSlot">
30
+ <slot/>
31
+ </template>
32
+ <template v-else>
33
+ {{ label }}
34
+ </template>
35
+ </span>
36
+
37
+ </label>
28
38
  </template>
29
39
 
30
40
  <script lang="ts">
31
- import { defineComponent, toRef, ref, type PropType, watch, computed } from 'vue';
32
- import { useInput } from '../../composables/useInput';
33
- import type { Size, Color } from '../../types/props';
41
+ import {computed, defineComponent, defineExpose, type PropType, ref, toRef, watch} from 'vue';
42
+ import {useInput} from '../../composables/useInput';
43
+ import {useInteractive} from "../../composables/useInteractive";
44
+ import type {Size} from '../../types/props';
45
+ import * as style from './style';
34
46
 
35
47
  export default defineComponent({
36
48
  name: "Checkbox",
37
49
  emits: useInput.emits(),
38
50
  props: {
39
51
  ...useInput.props(),
52
+ ...useInteractive.props(),
40
53
  label: {
41
54
  type: String
42
55
  },
@@ -44,10 +57,6 @@ export default defineComponent({
44
57
  type: String as PropType<Size>,
45
58
  default: 'md',
46
59
  },
47
- color: {
48
- type: String as PropType<Color>,
49
- default: 'blue',
50
- },
51
60
  disabled: {
52
61
  type: Boolean,
53
62
  default: false
@@ -55,10 +64,16 @@ export default defineComponent({
55
64
  loading: {
56
65
  type: Boolean,
57
66
  default: false
58
- }
67
+ },
68
+ indeterminate: {
69
+ type: Boolean,
70
+ default: false
71
+ },
59
72
  },
60
- setup(props, { slots, emit }) {
61
- const focus = () => { };
73
+ setup(props, {slots, emit}) {
74
+ const checkboxRef = ref<HTMLElement | null>(null);
75
+
76
+ const {focus, blur} = useInteractive(checkboxRef);
62
77
 
63
78
  const {
64
79
  id,
@@ -68,53 +83,53 @@ export default defineComponent({
68
83
  setError,
69
84
  formError,
70
85
  formDisabled,
71
- formLoading
72
- } = useInput(props, { focus, emit, withListeners: false });
86
+ formLoading,
87
+ inputListeners
88
+ } = useInput(props, {focus, emit});
73
89
 
74
- const disabled = computed(() => formDisabled || props.disabled);
75
- const loading = computed(() => formLoading || props.loading);
90
+ const disabled = computed(() => formDisabled || props.disabled || props.loading);
76
91
  const name = toRef(props, 'name');
77
92
  const checked = ref(false);
78
- const checkboxRef = ref<HTMLElement | null>(null);
79
93
  const hasSlot = computed(() => !!(slots.default));
80
94
 
81
- const wrapperComputedClasses = computed(() => {
95
+ const classes = computed(() => {
82
96
  return [
83
- 'm-checkbox__container',
97
+ style.checkbox,
98
+ [style.size[props.size]],
84
99
  {
85
- 'm-form__input': insideForm
100
+ [style.disabled]: disabled.value,
101
+ [style.checked]: checked.value,
102
+ [style.indeterminate]: props.indeterminate,
86
103
  }
87
104
  ]
88
105
  });
89
106
 
90
- const checkboxComputedClass = computed(() => {
91
- return {
92
- 'm-checkbox': true,
93
- 'm-checkbox--checked': checked.value,
94
- 'm-checkbox--disabled': disabled.value || loading.value,
95
- 'm-checkbox--error': formError.value,
96
- [`m-checkbox--${props.size}`]: true,
97
- [`m-checkbox--${props.color}`]: true,
98
- }
99
- });
100
-
101
107
  const inputError = computed(() => {
102
108
  return formError.value || props.error;
103
109
  });
104
110
 
105
111
  watch(() => props.modelValue, (value) => {
106
112
  checked.value = !!value;
107
- }, { immediate: true });
113
+ }, {immediate: true});
108
114
 
109
115
  watch(() => checked.value, (value) => {
110
116
  emit('update:modelValue', value);
111
117
  });
112
118
 
113
119
  function toggle() {
114
- if (disabled.value) return;
120
+ if (disabled.value) {
121
+ return;
122
+ }
123
+ if (props.indeterminate) {
124
+ return;
125
+ }
115
126
  checked.value = !checked.value;
116
127
  }
117
128
 
129
+ defineExpose({
130
+ focus,
131
+ blur,
132
+ })
118
133
 
119
134
  return {
120
135
  id,
@@ -124,16 +139,17 @@ export default defineComponent({
124
139
  validate,
125
140
  setError,
126
141
  disabled,
127
- loading,
128
142
  name,
129
143
  checked,
130
144
  checkboxRef,
131
145
  inputError,
132
146
  toggle,
133
-
134
- wrapperComputedClasses,
135
- checkboxComputedClass,
136
- hasSlot
147
+ style,
148
+ classes,
149
+ hasSlot,
150
+ inputListeners,
151
+ focus,
152
+ blur
137
153
  }
138
154
  }
139
155
  })
@@ -6,7 +6,7 @@ import {
6
6
 
7
7
  import {
8
8
  createStory, sizeArgType, colorArgType
9
- } from "@/__storybook__";
9
+ } from "../../../__storybook__";
10
10
 
11
11
  export default {
12
12
  component: MCheckbox,
@@ -0,0 +1,127 @@
1
+ import {createVar, globalStyle, style, styleVariants} from "@vanilla-extract/css";
2
+ import {themeVars} from "../../../styles/theme.css";
3
+ import {fonts} from "../../../styles/typography.css";
4
+
5
+ const sizes = {
6
+ xs: '16px',
7
+ sm: '18px',
8
+ md: '20px',
9
+ lg: '22px',
10
+ xl: '24px',
11
+ };
12
+
13
+ export const vars = {
14
+ height: createVar(),
15
+ radius: createVar(),
16
+ backgroundColor: createVar(),
17
+ borderColor: createVar(),
18
+ color: createVar()
19
+ }
20
+
21
+ export const base = style({
22
+ position: "relative",
23
+ display: "inline-flex",
24
+ alignItems: "center",
25
+ cursor: "pointer",
26
+ gap: themeVars.space['1.5'],
27
+ });
28
+
29
+ export const input = style({
30
+ position: 'absolute',
31
+ opacity: 0,
32
+ cursor: "pointer"
33
+ });
34
+
35
+ export const checkmark = style({
36
+ position: "absolute",
37
+ width: `calc(${vars.height} - 2px)`,
38
+ height: `calc(${vars.height} - 2px)`,
39
+ top: "50%",
40
+ left: "50%",
41
+ transform: "translate(-50%, -50%)",
42
+ color: "white",
43
+ });
44
+
45
+ export const checkbox = style({
46
+ vars: {
47
+ [vars.height]: sizes.md,
48
+ [vars.radius]: '4px',
49
+ [vars.backgroundColor]: 'white',
50
+ [vars.borderColor]: themeVars.color.gray[300],
51
+ [vars.color]: themeVars.color.gray[600],
52
+ },
53
+ position: "relative",
54
+ width: vars.height,
55
+ height: vars.height,
56
+ borderRadius: vars.radius,
57
+ backgroundColor: vars.backgroundColor,
58
+ border: `1px solid ${vars.borderColor}`,
59
+ color: vars.color,
60
+ cursor: 'pointer',
61
+ transition: `all 0.125s ${themeVars.transition.default}`
62
+ });
63
+
64
+ export const checked = style({
65
+ vars: {
66
+ [vars.borderColor]: themeVars.color.blue[500],
67
+ [vars.backgroundColor]: themeVars.color.blue[500],
68
+ },
69
+ selectors: {
70
+ ['&:after']: {
71
+ content: '""',
72
+ }
73
+ }
74
+ });
75
+
76
+ export const disabled = style({
77
+ opacity: 0.5,
78
+ cursor: 'not-allowed',
79
+ });
80
+
81
+ export const indeterminate = style({
82
+ vars: {
83
+ [vars.borderColor]: themeVars.color.blue[500],
84
+ [vars.backgroundColor]: themeVars.color.blue[500],
85
+ }
86
+ });
87
+
88
+ export const label = style({
89
+ marginLeft: themeVars.space['0.5'],
90
+ fontVariationSettings: `"wght" ${fonts.INTER.wghts[500]}`,
91
+ display: 'inline-block',
92
+ fontSize: themeVars.fontSize.base,
93
+ wordBreak: 'break-word',
94
+ cursor: 'pointer',
95
+ })
96
+
97
+ export const size = styleVariants({
98
+ xs: {
99
+ vars: {
100
+ [vars.height]: sizes.xs
101
+ }
102
+ },
103
+ sm: {
104
+ vars: {
105
+ [vars.height]: sizes.sm
106
+ }
107
+ },
108
+ md: {
109
+ vars: {
110
+ [vars.height]: sizes.md
111
+ },
112
+ },
113
+ lg: {
114
+ vars: {
115
+ [vars.height]: sizes.lg,
116
+ },
117
+ },
118
+ xl: {
119
+ vars: {
120
+ [vars.height]: sizes.xl,
121
+ },
122
+ },
123
+ });
124
+
125
+ globalStyle(`${base} ${input}:focus + ${checkbox}`, {
126
+ boxShadow: `0 0 0 2px ${themeVars.color.blue[100]}`,
127
+ });
@@ -0,0 +1 @@
1
+ export * from './Checkbox.css'