@teammodlr/ui-kit 1.0.4 → 1.0.5

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 (147) hide show
  1. package/package.json +2 -1
  2. package/src/__storybook__/argTypes.ts +42 -0
  3. package/src/__storybook__/createStory.ts +15 -0
  4. package/src/__storybook__/index.ts +2 -0
  5. package/src/components/avatar/Avatar.css +69 -0
  6. package/src/components/avatar/Avatar.vue +102 -0
  7. package/src/components/avatar/examples/basic.vue +6 -0
  8. package/src/components/avatar/examples/custom-size.vue +7 -0
  9. package/src/components/avatar/examples/index.stories.ts +28 -0
  10. package/src/components/avatar/examples/index.ts +5 -0
  11. package/src/components/avatar/examples/sizes.vue +33 -0
  12. package/src/components/avatar/examples/slots.vue +7 -0
  13. package/src/components/avatar/examples/variants.vue +18 -0
  14. package/src/components/avatargroup/AvatarGroup.css +8 -0
  15. package/src/components/avatargroup/AvatarGroup.vue +32 -0
  16. package/src/components/avatargroup/examples/basic.vue +11 -0
  17. package/src/components/avatargroup/examples/index.stories.ts +28 -0
  18. package/src/components/avatargroup/examples/index.ts +1 -0
  19. package/src/components/breadcrumb/Breadcrumb.css +46 -0
  20. package/src/components/breadcrumb/Breadcrumb.vue +51 -0
  21. package/src/components/breadcrumb/examples/basic.vue +9 -0
  22. package/src/components/breadcrumb/examples/index.stories.ts +20 -0
  23. package/src/components/breadcrumb/examples/index.ts +1 -0
  24. package/src/components/breadcrumbitem/BreadcrumbItem.vue +66 -0
  25. package/src/components/breadcrumbitem/index.ts +1 -0
  26. package/src/components/button/Button.css +378 -0
  27. package/src/components/button/Button.vue +108 -0
  28. package/src/components/button/examples/basic.vue +3 -0
  29. package/src/components/button/examples/colors-secondary.vue +8 -0
  30. package/src/components/button/examples/colors.vue +8 -0
  31. package/src/components/button/examples/disabled.vue +3 -0
  32. package/src/components/button/examples/icon.vue +10 -0
  33. package/src/components/button/examples/index.stories.ts +33 -0
  34. package/src/components/button/examples/index.ts +7 -0
  35. package/src/components/button/examples/rounded.vue +7 -0
  36. package/src/components/button/examples/size.vue +7 -0
  37. package/src/components/buttongroup/ButtonGroup.vue +47 -0
  38. package/src/components/buttongroup/examples/basic.vue +9 -0
  39. package/src/components/buttongroup/examples/index.stories.ts +21 -0
  40. package/src/components/buttongroup/examples/index.ts +1 -0
  41. package/src/components/checkbox/Checkbox.css +185 -0
  42. package/src/components/checkbox/Checkbox.vue +140 -0
  43. package/src/components/checkbox/examples/basic.vue +9 -0
  44. package/src/components/checkbox/examples/index.stories.ts +21 -0
  45. package/src/components/checkbox/examples/index.ts +3 -0
  46. package/src/components/checkbox/examples/slot.vue +11 -0
  47. package/src/components/dropdown/Dropdown.css +68 -0
  48. package/src/components/dropdown/Dropdown.vue +237 -0
  49. package/src/components/dropdown/DropdownItem.vue +118 -0
  50. package/src/components/dropdown/DropdownList.vue +20 -0
  51. package/src/components/dropdown/DropdownWrapper.vue +17 -0
  52. package/src/components/dropdown/examples/basic.vue +73 -0
  53. package/src/components/dropdown/examples/context.vue +71 -0
  54. package/src/components/dropdown/examples/index.stories.ts +23 -0
  55. package/src/components/dropdown/examples/index.ts +2 -0
  56. package/src/components/dropdown/hooks.ts +30 -0
  57. package/src/components/form/Form.vue +141 -0
  58. package/src/components/form/examples/basic.vue +73 -0
  59. package/src/components/form/examples/index.stories.ts +23 -0
  60. package/src/components/form/examples/index.ts +1 -0
  61. package/src/components/image/Image.vue +71 -0
  62. package/src/components/image/examples/basic.vue +5 -0
  63. package/src/components/image/examples/index.stories.ts +12 -0
  64. package/src/components/image/examples/index.ts +1 -0
  65. package/src/components/index.ts +27 -0
  66. package/src/components/input/Input.css +173 -0
  67. package/src/components/input/Input.vue +176 -0
  68. package/src/components/input/examples/basic.vue +7 -0
  69. package/src/components/input/examples/index.stories.ts +24 -0
  70. package/src/components/input/examples/index.ts +4 -0
  71. package/src/components/input/examples/prefix.vue +7 -0
  72. package/src/components/input/examples/sizes.vue +9 -0
  73. package/src/components/input/examples/suffix.vue +7 -0
  74. package/src/components/link/Link.css +147 -0
  75. package/src/components/link/Link.vue +54 -0
  76. package/src/components/link/examples/basic.vue +3 -0
  77. package/src/components/link/examples/index.stories.ts +20 -0
  78. package/src/components/link/examples/index.ts +1 -0
  79. package/src/components/messageprovider/Message.vue +76 -0
  80. package/src/components/messageprovider/MessageProvider.css +36 -0
  81. package/src/components/messageprovider/MessageProvider.vue +142 -0
  82. package/src/components/messageprovider/examples/basic.vue +19 -0
  83. package/src/components/messageprovider/examples/index.stories.ts +30 -0
  84. package/src/components/messageprovider/examples/index.ts +1 -0
  85. package/src/components/messageprovider/examples/wrapper.vue +9 -0
  86. package/src/components/messageprovider/types.ts +39 -0
  87. package/src/components/messageprovider/useMessage.ts +12 -0
  88. package/src/components/select/Select.css +226 -0
  89. package/src/components/select/Select.vue +474 -0
  90. package/src/components/select/examples/basic.vue +20 -0
  91. package/src/components/select/examples/index.stories.ts +22 -0
  92. package/src/components/select/examples/index.ts +3 -0
  93. package/src/components/select/examples/multiple.vue +22 -0
  94. package/src/components/select/examples/searchable.vue +20 -0
  95. package/src/components/skeleton/Skeleton.css +73 -0
  96. package/src/components/skeleton/Skeleton.vue +47 -0
  97. package/src/components/skeleton/examples/basic.vue +3 -0
  98. package/src/components/skeleton/examples/index.stories.ts +24 -0
  99. package/src/components/skeleton/examples/index.ts +2 -0
  100. package/src/components/skeleton/examples/post.vue +8 -0
  101. package/src/components/tab/Tab.css +113 -0
  102. package/src/components/tab/Tab.vue +98 -0
  103. package/src/components/tab/TabGroup.vue +90 -0
  104. package/src/components/tab/examples/basic.vue +19 -0
  105. package/src/components/tab/examples/index.stories.ts +25 -0
  106. package/src/components/tab/examples/index.ts +2 -0
  107. package/src/components/tab/examples/vertical.vue +19 -0
  108. package/src/components/table/Table.css +45 -0
  109. package/src/components/table/Table.vue +108 -0
  110. package/src/components/table/TableBody.vue +13 -0
  111. package/src/components/table/TableCell.vue +13 -0
  112. package/src/components/table/TableHead.vue +22 -0
  113. package/src/components/table/TableHeadRow.vue +15 -0
  114. package/src/components/table/TableRow.vue +13 -0
  115. package/src/components/table/examples/basic.vue +46 -0
  116. package/src/components/table/examples/index.stories.ts +19 -0
  117. package/src/components/table/examples/index.ts +1 -0
  118. package/src/components/table/types/index.ts +5 -0
  119. package/src/components/tooltip/Tooltip.css +49 -0
  120. package/src/components/tooltip/Tooltip.vue +85 -0
  121. package/src/components/tooltip/examples/basic.vue +8 -0
  122. package/src/components/tooltip/examples/index.stories.ts +21 -0
  123. package/src/components/tooltip/examples/index.ts +1 -0
  124. package/src/components/virtualscroll/VirtualScroll.css +13 -0
  125. package/src/components/virtualscroll/VirtualScroll.vue +61 -0
  126. package/src/components/virtualscroll/examples/basic.vue +37 -0
  127. package/src/components/virtualscroll/examples/index.stories.ts +31 -0
  128. package/src/components/virtualscroll/examples/index.ts +1 -0
  129. package/src/composables/element.ts +13 -0
  130. package/src/composables/useCachedUid.ts +48 -0
  131. package/src/composables/useEventListener.ts +14 -0
  132. package/src/composables/useInput.ts +134 -0
  133. package/src/composables/useIsServer.ts +7 -0
  134. package/src/composables/useMount.ts +43 -0
  135. package/src/composables/usePopper.ts +194 -0
  136. package/src/create.ts +34 -0
  137. package/src/css/components.css +14 -0
  138. package/src/css/index.css +4 -0
  139. package/src/css/normalize.css +379 -0
  140. package/src/css/transitions.css +40 -0
  141. package/src/css/variables.css +80 -0
  142. package/src/exports/nuxt.js +33 -0
  143. package/src/exports/nuxt.plugin.js +8 -0
  144. package/src/index.ts +5 -0
  145. package/src/install.ts +8 -0
  146. package/src/shims-vue.d.ts +6 -0
  147. package/src/types/props.ts +3 -0
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div
3
+ v-if="show"
4
+ class="m-message__wrapper"
5
+ >
6
+ <div class="m-message">
7
+ {{ content }}
8
+ </div>
9
+ </div>
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ import { defineComponent, onMounted, ref } from 'vue';
14
+ import type { PropType } from 'vue';
15
+
16
+ export default defineComponent({
17
+ name: 'MMessage',
18
+ props: {
19
+ onInternalAfterLeave: Function as PropType<(key: string) => void>,
20
+ internalKey: {
21
+ type: String,
22
+ required: true
23
+ },
24
+ content: {
25
+ type: [String]
26
+ },
27
+ type: {
28
+ type: String,
29
+ default: 'default'
30
+ },
31
+ timeout: {
32
+ type: Number,
33
+ default: 10000
34
+ },
35
+ showClose: {
36
+ type: Boolean,
37
+ default: true
38
+ },
39
+ onClose: {
40
+ type: Function,
41
+ default: () => { }
42
+ }
43
+ },
44
+ setup(props) {
45
+ let timerId: number | null = null;
46
+ const showRef = ref<boolean>(true);
47
+
48
+ onMounted(() => {
49
+ setHideTimeout();
50
+ });
51
+
52
+ function setHideTimeout(): void {
53
+ const { timeout } = props;
54
+ if (timeout) {
55
+ timerId = window.setTimeout(hide, timeout);
56
+ }
57
+ }
58
+
59
+ function hide(): void {
60
+ showRef.value = false
61
+ if (timerId) {
62
+ window.clearTimeout(timerId)
63
+ timerId = null
64
+ if (props.onInternalAfterLeave) {
65
+ props.onInternalAfterLeave(props.internalKey)
66
+ }
67
+ }
68
+ }
69
+
70
+ return {
71
+ show: showRef,
72
+ hide,
73
+ }
74
+ }
75
+ })
76
+ </script>
@@ -0,0 +1,36 @@
1
+ .m-message-provider__container {
2
+ z-index: 5000;
3
+ position: fixed;
4
+ height: 0;
5
+ overflow: visible;
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ }
10
+
11
+ .m-message-provider__container--top {
12
+ top: 12px;
13
+ left: 0;
14
+ right: 0;
15
+ }
16
+
17
+ .m-message__wrapper {
18
+ margin: 0 0 8px 0;
19
+ z-index: 0;
20
+ transform-origin: top center;
21
+ display: flex;
22
+ align-items: center;
23
+ }
24
+
25
+ .m-message {
26
+ box-sizing: border-box;
27
+ display: flex;
28
+ align-items: center;
29
+ padding: 10px 20px;
30
+ border-radius: 3px;
31
+ flex-wrap: nowrap;
32
+ max-width: 720px;
33
+ color: var(--gray-700);
34
+ background-color: var(--white);
35
+ box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
36
+ }
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <slot />
3
+ <template v-if="messageList.length">
4
+ <Teleport :to="teleportTo ?? 'body'">
5
+ <div :class="[
6
+ `m-message-provider__container`,
7
+ `m-message-provider__container--${placement}`
8
+ ]">
9
+ <MMessage v-for="message in messageList"
10
+ :key="message.key"
11
+ :internalKey="message.key"
12
+ :content="message.content"
13
+ :timeout="message.timeout ?? timeout"
14
+ ref="messageRefs"
15
+ :on-internal-after-leave="onInternalAfterLeave" />
16
+ </div>
17
+
18
+ </Teleport>
19
+ </template>
20
+ </template>
21
+
22
+ <script lang="ts">
23
+ import {
24
+ ref,
25
+ reactive,
26
+ Teleport,
27
+ defineComponent,
28
+ provide
29
+ } from 'vue';
30
+ import type { MessageType, MessageReactive, MessageOptions, MessageApiInjection, ContentType } from './types';
31
+ import type { PropType } from 'vue';
32
+ import MMessage from './Message.vue';
33
+ import { useCachedUid } from '@/composables/useCachedUid';
34
+
35
+ export type MessageProviderInst = MessageApiInjection;
36
+
37
+ interface PrivateMessageReactive extends MessageReactive {
38
+ key: string
39
+ }
40
+
41
+ interface PrivateMessageRef extends MessageReactive {
42
+ key: string
43
+ hide: () => void
44
+ }
45
+
46
+ export default defineComponent({
47
+ name: 'MMessageProvider',
48
+ components: {
49
+ MMessage
50
+ },
51
+ props: {
52
+ teleportTo: {
53
+ type: String,
54
+ default: 'body'
55
+ },
56
+ placement: {
57
+ type: String as PropType<
58
+ | 'top'
59
+ | 'top-left'
60
+ | 'top-right'
61
+ | 'bottom'
62
+ | 'bottom-left'
63
+ | 'bottom-right'
64
+ >,
65
+ default: 'top'
66
+ },
67
+ timeout: {
68
+ type: Number,
69
+ default: 3000
70
+ }
71
+ },
72
+ setup(props, { slots }) {
73
+ const messageListRef = ref<PrivateMessageReactive[]>([]);
74
+ const messageRefs = ref<Record<string, PrivateMessageRef>>({});
75
+ const api: MessageApiInjection = {
76
+ create(content: ContentType, options?: MessageOptions) {
77
+ return create(content, { type: 'default', ...options })
78
+ },
79
+ info(content: ContentType, options?: MessageOptions) {
80
+ return create(content, { ...options, type: 'info' })
81
+ },
82
+ success(content: ContentType, options?: MessageOptions) {
83
+ return create(content, { ...options, type: 'success' })
84
+ },
85
+ warning(content: ContentType, options?: MessageOptions) {
86
+ return create(content, { ...options, type: 'warning' })
87
+ },
88
+ error(content: ContentType, options?: MessageOptions) {
89
+ return create(content, { ...options, type: 'error' })
90
+ },
91
+ loading(content: ContentType, options?: MessageOptions) {
92
+ return create(content, { ...options, type: 'loading' })
93
+ },
94
+ destroyAll
95
+ };
96
+
97
+ provide('m-message', api);
98
+
99
+ function create(
100
+ content: ContentType,
101
+ options: MessageOptions & { type: MessageType }
102
+ ): MessageReactive {
103
+ const { id } = useCachedUid('m-message');
104
+ const key = id.value;
105
+ const messageReactive = reactive({
106
+ ...options,
107
+ content,
108
+ key,
109
+ destroy: () => {
110
+ messageRefs.value[key].hide();
111
+ }
112
+ });
113
+
114
+ messageListRef.value.push(messageReactive);
115
+ return messageReactive;
116
+ }
117
+
118
+ function destroyAll(): void {
119
+ //@ts-ignore
120
+ Object.values(messageRefs.value).forEach((messageRef) => {
121
+ messageRef.hide();
122
+ });
123
+ }
124
+
125
+ function onInternalAfterLeave(key: string): void {
126
+ messageListRef.value = messageListRef.value.filter(
127
+ (message) => message.key !== key
128
+ );
129
+ delete messageRefs.value[key];
130
+ }
131
+
132
+ return Object.assign(
133
+ {
134
+ messageRefs,
135
+ messageList: messageListRef,
136
+ onInternalAfterLeave
137
+ },
138
+ api
139
+ )
140
+ }
141
+ });
142
+ </script>
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <button @click="showMessage">Show</button>
3
+ </template>
4
+
5
+ <script lang="ts" setup>
6
+ import { useMessage } from '../useMessage';
7
+
8
+ const message = useMessage();
9
+
10
+ const showMessage = () => {
11
+
12
+ const timeout = Math.floor(Math.random() * 10) + 1;
13
+
14
+ message.create(`Hello World - ${timeout}s`, {
15
+ timeout: timeout * 1000
16
+ });
17
+
18
+ };
19
+ </script>
@@ -0,0 +1,30 @@
1
+ import MMessageProvider from "../MessageProvider.vue";
2
+ import {
3
+ MMessageProviderBasic,
4
+
5
+ } from "./index";
6
+
7
+ const Template = (args: any) => ({
8
+ components: {
9
+ MMessageProvider,
10
+ MMessageProviderBasic
11
+ },
12
+ setup() {
13
+
14
+ return {
15
+ args,
16
+ };
17
+ },
18
+ template: `
19
+ <m-message-provider v-bind="args">
20
+ <MMessageProviderBasic />
21
+ </m-message-provider>
22
+ `
23
+ })
24
+
25
+ export default {
26
+ component: MMessageProvider,
27
+ title: 'Components/MessageProvider'
28
+ }
29
+
30
+ export const Primary = Template.bind({});
@@ -0,0 +1 @@
1
+ export { default as MMessageProviderBasic } from './basic.vue';
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <m-message-provider>
3
+ <slot />
4
+ </m-message-provider>
5
+ </template>
6
+
7
+ <script lang="ts" setup>
8
+ import MMessageProvider from '../MessageProvider.vue';
9
+ </script>
@@ -0,0 +1,39 @@
1
+ import type { VNodeChild } from 'vue';
2
+
3
+ export type ContentType = string;
4
+ export type MessageType =
5
+ | 'info'
6
+ | 'success'
7
+ | 'warning'
8
+ | 'error'
9
+ | 'loading'
10
+ | 'default'
11
+
12
+ export type MessageRenderMessage = (props: any) => VNodeChild
13
+
14
+ export interface MessageOptions {
15
+ type?: MessageType
16
+ render?: MessageRenderMessage
17
+ timeout?: number
18
+ closable?: boolean
19
+ onClose?: () => void
20
+ }
21
+
22
+ export interface MessageReactive {
23
+ content: ContentType
24
+ timeout?: number
25
+ closable?: boolean
26
+ type: MessageType
27
+ onClose?: () => void
28
+ destroy: () => void
29
+ }
30
+
31
+ export interface MessageApiInjection {
32
+ create: (content: ContentType, options?: MessageOptions) => MessageReactive
33
+ info: (content: ContentType, options?: MessageOptions) => MessageReactive
34
+ success: (content: ContentType, options?: MessageOptions) => MessageReactive
35
+ warning: (content: ContentType, options?: MessageOptions) => MessageReactive
36
+ error: (content: ContentType, options?: MessageOptions) => MessageReactive
37
+ loading: (content: ContentType, options?: MessageOptions) => MessageReactive
38
+ destroyAll: () => void
39
+ }
@@ -0,0 +1,12 @@
1
+ import { inject } from 'vue'
2
+ import type { MessageApiInjection } from './types'
3
+
4
+ export function useMessage(): MessageApiInjection {
5
+ const api = inject('m-message', null);
6
+
7
+ if(api === null) {
8
+ throw new Error('m-message api is not provided, ensure the component is wrapped in <m-message-provider />.');
9
+ }
10
+
11
+ return api;
12
+ }
@@ -0,0 +1,226 @@
1
+ .m-select__container {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ width: 100%;
6
+ }
7
+
8
+ .m-select__container:focus {
9
+ outline: none;
10
+ }
11
+
12
+ .m-select {
13
+ --select-height: 40px;
14
+ --select-padding: 0 8px;
15
+ --select-font-size: 15px;
16
+ --select-border-radius: 4px;
17
+ --select-clear-size: 1.2rem;
18
+ --select-background-color: var(--white);
19
+ --select-border-color: var(--gray-200);
20
+
21
+ position: relative;
22
+ display: inline-flex;
23
+ align-items: center;
24
+ height: var(--select-height);
25
+ font-size: var(--select-font-size);
26
+ background-color: var(--select-background-color);
27
+ border: 1px solid var(--select-border-color);
28
+ box-shadow: none;
29
+ border-radius: var(--select-border-radius);
30
+ outline: 0;
31
+ cursor: text;
32
+ width: 100%;
33
+ transition: color .3s cubic-bezier(0.4, 0, 0.2, 1), background-color .3s cubic-bezier(0.4, 0, 0.2, 1), border-color .3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow .3s cubic-bezier(0.4, 0, 0.2, 1);
34
+ }
35
+
36
+ .m-select:not(.m-select--disabled):not(.m-select--focused):hover {
37
+ --select-border-color: var(--gray-400);
38
+ }
39
+
40
+ .m-select:not(.m-select--disabled):focus,
41
+ .m-select:not(.m-select--disabled):focus-within,
42
+ .m-select:not(.m-select--disabled).m-select--focused {
43
+ --select-border-color: var(--blue);
44
+ box-shadow: 0 0 0 2px var(--blue-outline);
45
+ outline: none;
46
+ }
47
+
48
+ .m-select.m-select--disabled {
49
+ --select-border-color: var(--gray-300);
50
+ --select-background-color: var(--gray-100);
51
+ opacity: 0.6;
52
+ cursor: not-allowed;
53
+ }
54
+
55
+ .m-select__clearable {
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ padding: 0 6px;
60
+ }
61
+
62
+ .m-select .m-select__clearable i.m-icon--close {
63
+ cursor: pointer;
64
+ width: var(--select-clear-size);
65
+ height: var(--select-clear-size);
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ border-radius: 100%;
70
+ color: var(--gray-500);
71
+ background-color: transparent;
72
+ transition: background-color .125s cubic-bezier(0.4, 0, 0.2, 1);
73
+ }
74
+
75
+ .m-select .m-select__clearable i.m-icon--close:hover {
76
+ color: var(--gray-500);
77
+ background-color: var(--gray-150);
78
+ }
79
+
80
+ .m-select i.m-icon--close::before {
81
+ --close-icon-size: 16px;
82
+ background-color: currentColor;
83
+ content: "";
84
+ width: var(--close-icon-size);
85
+ height: var(--close-icon-size);
86
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='w-5 h-5'%3E%3Cpath d='M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z' /%3E%3C/svg%3E%0A");
87
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='w-5 h-5'%3E%3Cpath d='M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z' /%3E%3C/svg%3E%0A");
88
+ -webkit-mask-position: center center;
89
+ mask-position: center center;
90
+ -webkit-mask-repeat: no-repeat;
91
+ mask-repeat: no-repeat;
92
+ -webkit-mask-size: var(--close-icon-size) var(--close-icon-size);
93
+ mask-size: var(--close-icon-size) var(--close-icon-size);
94
+ }
95
+
96
+ .m-select--xs {
97
+ --select-height: 32px;
98
+ --select-padding: 0 8px;
99
+ --select-font-size: 13px;
100
+ --select-border-radius: 4px;
101
+ --select-clear-size: 1.2rem;
102
+ }
103
+
104
+ .m-select--sm {
105
+ --select-height: 36px;
106
+ --select-padding: 0 8px;
107
+ --select-font-size: 14px;
108
+ --select-border-radius: 4px;
109
+ --select-clear-size: 1.2rem;
110
+ }
111
+
112
+ .m-select--md {
113
+ --select-height: 40px;
114
+ --select-padding: 0 8px;
115
+ --select-font-size: 15px;
116
+ --select-border-radius: 4px;
117
+ --select-clear-size: 1.2rem;
118
+ }
119
+
120
+ .m-select--lg {
121
+ --select-height: 42px;
122
+ --select-padding: 0 8px;
123
+ --select-font-size: 16px;
124
+ --select-border-radius: 4px;
125
+ --select-clear-size: 1.2rem;
126
+ }
127
+
128
+ .m-select--xl {
129
+ --select-height: 46px;
130
+ --select-padding: 0 8px;
131
+ --select-font-size: 18px;
132
+ --select-border-radius: 6px;
133
+ --select-clear-size: 1.2rem;
134
+ }
135
+
136
+ .m-select__label {
137
+ margin-bottom: 5px;
138
+ color: var(--gray-600);
139
+ font-size: 15px;
140
+ font-weight: 600;
141
+ }
142
+
143
+ .m-select__input {
144
+ padding: var(--select-padding);
145
+ font-size: 15px;
146
+ color: var(--gray-600);
147
+ }
148
+
149
+ .m-select__help {
150
+ margin-top: 4px;
151
+ color: var(--gray-500);
152
+ font-size: 15px;
153
+ font-weight: 400;
154
+ }
155
+
156
+ .m-select__error {
157
+ margin: 4px 0 8px 0;
158
+ color: var(--red);
159
+ font-size: 15px;
160
+ font-weight: 400;
161
+ }
162
+
163
+ .m-form .m-select__form {
164
+ margin-bottom: 16px;
165
+ }
166
+
167
+ .m-form .m-select__form .m-select__error {
168
+ margin: 4px 0 0 0;
169
+ }
170
+
171
+ .m-select__dropdown {
172
+ z-index: 100;
173
+ max-height: 400px;
174
+ min-width: 200px;
175
+ overflow-y: auto;
176
+ border-radius: 4px;
177
+ background-color: var(--white);
178
+ box-shadow: 0 0 0 1px var(--gray-200), 0 4px 8px 0 rgba(0, 0, 0, 0.1);
179
+ display: flex;
180
+ flex-direction: column;
181
+ }
182
+
183
+ .m-select__dropdown[data-popper-placement^="bottom-"] {
184
+ margin-top: 5px!important;
185
+ }
186
+
187
+ .m-select__dropdown[data-popper-placement^="top-"] {
188
+ margin-bottom: 5px!important;
189
+ }
190
+
191
+ .m-select__search {
192
+ position: sticky;
193
+ top: 0;
194
+ z-index: 1;
195
+ background-color: var(--white);
196
+ padding: 6px 6px 0;
197
+ }
198
+
199
+ .m-select__options {
200
+ padding: 4px 0;
201
+ }
202
+
203
+ .m-select__option {
204
+ display: flex;
205
+ align-items: center;
206
+ justify-content: space-between;
207
+ padding: 8px 8px;
208
+ margin: 0 4px;
209
+ font-size: 15px;
210
+ color: var(--gray-600);
211
+ cursor: pointer;
212
+ transition: background-color .125s cubic-bezier(0.4, 0, 0.2, 1);
213
+ border-radius: 4px;
214
+ }
215
+
216
+ .m-select__option--selected {
217
+ color: var(--blue)!important;
218
+ }
219
+
220
+ .m-select__option--focused {
221
+ background-color: var(--gray-100);
222
+ }
223
+
224
+ .m-select__placeholder-text {
225
+ color: var(--gray-500);
226
+ }