@teammodlr/ui-kit 1.0.2

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 (129) hide show
  1. package/env.d.ts +1 -0
  2. package/lib/__storybook__/argTypes.d.ts +31 -0
  3. package/lib/__storybook__/createStory.d.ts +8 -0
  4. package/lib/__storybook__/index.d.ts +2 -0
  5. package/lib/components/avatar/Avatar.vue.d.ts +70 -0
  6. package/lib/components/avatargroup/AvatarGroup.vue.d.ts +34 -0
  7. package/lib/components/breadcrumb/Breadcrumb.vue.d.ts +25 -0
  8. package/lib/components/breadcrumbitem/BreadcrumbItem.vue.d.ts +18 -0
  9. package/lib/components/breadcrumbitem/index.d.ts +1 -0
  10. package/lib/components/button/Button.vue.d.ts +121 -0
  11. package/lib/components/buttongroup/ButtonGroup.vue.d.ts +29 -0
  12. package/lib/components/checkbox/Checkbox.vue.d.ts +97 -0
  13. package/lib/components/dropdown/Dropdown.vue.d.ts +114 -0
  14. package/lib/components/dropdown/DropdownItem.vue.d.ts +61 -0
  15. package/lib/components/dropdown/DropdownList.vue.d.ts +2 -0
  16. package/lib/components/dropdown/DropdownWrapper.vue.d.ts +2 -0
  17. package/lib/components/dropdown/hooks.d.ts +2 -0
  18. package/lib/components/form/Form.vue.d.ts +67 -0
  19. package/lib/components/image/Image.vue.d.ts +50 -0
  20. package/lib/components/index.d.ts +26 -0
  21. package/lib/components/input/Input.vue.d.ts +126 -0
  22. package/lib/components/link/Link.vue.d.ts +51 -0
  23. package/lib/components/messageprovider/Message.vue.d.ts +61 -0
  24. package/lib/components/messageprovider/MessageProvider.vue.d.ts +51 -0
  25. package/lib/components/messageprovider/types.d.ts +28 -0
  26. package/lib/components/messageprovider/useMessage.d.ts +2 -0
  27. package/lib/components/select/Select.vue.d.ts +180 -0
  28. package/lib/components/skeleton/Skeleton.vue.d.ts +39 -0
  29. package/lib/components/tab/Tab.vue.d.ts +41 -0
  30. package/lib/components/tab/TabGroup.vue.d.ts +43 -0
  31. package/lib/components/table/Table.vue.d.ts +63 -0
  32. package/lib/components/table/TableBody.vue.d.ts +2 -0
  33. package/lib/components/table/TableCell.vue.d.ts +2 -0
  34. package/lib/components/table/TableHead.vue.d.ts +20 -0
  35. package/lib/components/table/TableHeadRow.vue.d.ts +2 -0
  36. package/lib/components/table/TableRow.vue.d.ts +2 -0
  37. package/lib/components/table/types/index.d.ts +5 -0
  38. package/lib/components/tooltip/Tooltip.vue.d.ts +54 -0
  39. package/lib/components/virtualscroll/VirtualScroll.vue.d.ts +43 -0
  40. package/lib/composables/element.d.ts +2 -0
  41. package/lib/composables/useCachedUid.d.ts +13 -0
  42. package/lib/composables/useEventListener.d.ts +1 -0
  43. package/lib/composables/useInput.d.ts +36 -0
  44. package/lib/composables/useIsServer.d.ts +1 -0
  45. package/lib/composables/useMount.d.ts +13 -0
  46. package/lib/composables/usePopper.d.ts +31 -0
  47. package/lib/create.d.ts +9 -0
  48. package/lib/index.cjs.js +5 -0
  49. package/lib/index.d.ts +4 -0
  50. package/lib/index.es.js +3164 -0
  51. package/lib/install.d.ts +4 -0
  52. package/lib/nuxt.js +33 -0
  53. package/lib/nuxt.plugin.js +8 -0
  54. package/lib/style.css +1 -0
  55. package/lib/types/props.d.ts +2 -0
  56. package/package.json +75 -0
  57. package/src/__storybook__/argTypes.ts +42 -0
  58. package/src/__storybook__/createStory.ts +15 -0
  59. package/src/__storybook__/index.ts +2 -0
  60. package/src/components/avatar/Avatar.css +69 -0
  61. package/src/components/avatar/Avatar.vue +102 -0
  62. package/src/components/avatargroup/AvatarGroup.css +8 -0
  63. package/src/components/avatargroup/AvatarGroup.vue +32 -0
  64. package/src/components/breadcrumb/Breadcrumb.css +46 -0
  65. package/src/components/breadcrumb/Breadcrumb.vue +51 -0
  66. package/src/components/breadcrumbitem/BreadcrumbItem.vue +66 -0
  67. package/src/components/breadcrumbitem/index.ts +1 -0
  68. package/src/components/button/Button.css +378 -0
  69. package/src/components/button/Button.vue +108 -0
  70. package/src/components/buttongroup/ButtonGroup.vue +47 -0
  71. package/src/components/checkbox/Checkbox.css +185 -0
  72. package/src/components/checkbox/Checkbox.vue +140 -0
  73. package/src/components/dropdown/Dropdown.css +68 -0
  74. package/src/components/dropdown/Dropdown.vue +237 -0
  75. package/src/components/dropdown/DropdownItem.vue +118 -0
  76. package/src/components/dropdown/DropdownList.vue +20 -0
  77. package/src/components/dropdown/DropdownWrapper.vue +17 -0
  78. package/src/components/dropdown/hooks.ts +30 -0
  79. package/src/components/form/Form.vue +141 -0
  80. package/src/components/image/Image.vue +71 -0
  81. package/src/components/index.ts +27 -0
  82. package/src/components/input/Input.css +173 -0
  83. package/src/components/input/Input.vue +176 -0
  84. package/src/components/link/Link.css +147 -0
  85. package/src/components/link/Link.vue +54 -0
  86. package/src/components/messageprovider/Message.vue +76 -0
  87. package/src/components/messageprovider/MessageProvider.css +36 -0
  88. package/src/components/messageprovider/MessageProvider.vue +142 -0
  89. package/src/components/messageprovider/types.ts +39 -0
  90. package/src/components/messageprovider/useMessage.ts +12 -0
  91. package/src/components/select/Select.css +226 -0
  92. package/src/components/select/Select.vue +474 -0
  93. package/src/components/skeleton/Skeleton.css +73 -0
  94. package/src/components/skeleton/Skeleton.vue +47 -0
  95. package/src/components/tab/Tab.css +113 -0
  96. package/src/components/tab/Tab.vue +98 -0
  97. package/src/components/tab/TabGroup.vue +90 -0
  98. package/src/components/table/Table.css +45 -0
  99. package/src/components/table/Table.vue +108 -0
  100. package/src/components/table/TableBody.vue +13 -0
  101. package/src/components/table/TableCell.vue +13 -0
  102. package/src/components/table/TableHead.vue +22 -0
  103. package/src/components/table/TableHeadRow.vue +15 -0
  104. package/src/components/table/TableRow.vue +13 -0
  105. package/src/components/table/types/index.ts +5 -0
  106. package/src/components/tooltip/Tooltip.css +49 -0
  107. package/src/components/tooltip/Tooltip.vue +85 -0
  108. package/src/components/virtualscroll/VirtualScroll.css +13 -0
  109. package/src/components/virtualscroll/VirtualScroll.vue +61 -0
  110. package/src/composables/element.ts +13 -0
  111. package/src/composables/useCachedUid.ts +48 -0
  112. package/src/composables/useEventListener.ts +14 -0
  113. package/src/composables/useInput.ts +134 -0
  114. package/src/composables/useIsServer.ts +7 -0
  115. package/src/composables/useMount.ts +43 -0
  116. package/src/composables/usePopper.ts +194 -0
  117. package/src/create.ts +34 -0
  118. package/src/css/components.css +14 -0
  119. package/src/css/index.css +4 -0
  120. package/src/css/normalize.css +379 -0
  121. package/src/css/transitions.css +40 -0
  122. package/src/css/variables.css +80 -0
  123. package/src/exports/nuxt.js +33 -0
  124. package/src/exports/nuxt.plugin.js +8 -0
  125. package/src/index.ts +5 -0
  126. package/src/install.ts +8 -0
  127. package/src/shims-vue.d.ts +6 -0
  128. package/src/types/props.ts +3 -0
  129. package/volar.d.ts +16 -0
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ install: (app: import("vue").App<any>, installOptions?: import("./create").ModlrUIOptions) => void;
3
+ };
4
+ export default _default;
package/lib/nuxt.js ADDED
@@ -0,0 +1,33 @@
1
+ import { defineNuxtModule, addPlugin, createResolver } from '@nuxt/kit'
2
+ import { fileURLToPath } from 'node:url'
3
+
4
+ export default defineNuxtModule({
5
+ meta: {
6
+ name: '@teammodlr/ui-kit',
7
+ configKey: 'modlr',
8
+ compatibility: {
9
+ nuxt: '^3.0.0-rc.1',
10
+ },
11
+ },
12
+ defaults: {
13
+ prefix: 'M',
14
+ },
15
+ async setup(options, nuxt) {
16
+ // Create resolver to resolve relative paths
17
+ const { resolve } = createResolver(import.meta.url)
18
+
19
+ nuxt.options.runtimeConfig.public.modlrUiOptions = options
20
+
21
+ // plugin install
22
+ addPlugin(resolve('./nuxt.plugin.js'))
23
+
24
+ // nuxt install
25
+ nuxt.hook('components:dirs', (dirs) => {
26
+ dirs.push({
27
+ path: fileURLToPath(new URL('../src/components', import.meta.url)),
28
+ extensions: ['vue', 'tsx'],
29
+ prefix: options?.prefix ? options?.prefix : 'M',
30
+ })
31
+ })
32
+ },
33
+ })
@@ -0,0 +1,8 @@
1
+ import { defineNuxtPlugin } from '#app'
2
+ import create from '../src/create'
3
+
4
+ export default defineNuxtPlugin((nuxtApp) => {
5
+ const UI = create(nuxtApp.$config.modlrUiOptions)
6
+
7
+ nuxtApp.vueApp.use(UI)
8
+ })
package/lib/style.css ADDED
@@ -0,0 +1 @@
1
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--font-size: 14px;--font-color: #333;--font-family: "Inter", sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;--white: #FFF;--black: #000;--blue: hsl(212, 92%, 53%);--blue-outline: hsla(212, 92%, 53%, .4);--blue-hover: hsl(212, 97%, 58%);--blue-focus: hsl(212, 97%, 45%);--blue-light: hsl(212, 92%, 51%);--blue-lighter: hsl(212, 92%, 58%);--blue-dark: hsl(212, 92%, 37%);--blue-darker: hsl(212, 92%, 27%);--blue-secondary: hsl(212, 89%, 93%);--blue-secondary-hover: hsl(212, 97%, 90%);--blue-secondary-focus: hsl(212, 97%, 88%);--green: hsl(148, 74%, 36%);--green-outline: hsla(148, 74%, 36%, .4);--green-hover: hsl(148, 52%, 45%);--green-focus: hsl(148, 52%, 37%);--green-light: hsl(148, 92%, 51%);--green-lighter: hsl(148, 92%, 58%);--green-dark: hsl(148, 92%, 29%);--green-darker: hsl(148, 92%, 25%);--green-secondary: hsl(148, 42%, 90%);--green-secondary-hover: hsl(148, 42%, 86%);--green-secondary-focus: hsl(148, 42%, 82%);--red: hsl(348, 63%, 50%);--red-outline: hsla(348, 63%, 50%, 4);--red-hover: hsl(348, 68%, 56%);--red-focus: hsl(348, 68%, 46%);--red-light: hsl(348, 64%, 50%);--red-lighter: hsl(348, 63%, 58%);--red-dark: hsl(348, 63%, 46%);--red-darker: hsl(348, 63%, 40%);--red-secondary: hsl(348, 61%, 92%);--red-secondary-hover: hsl(348, 61%, 89%);--red-secondary-focus: hsl(348, 61%, 85%);--yellow: hsl(37, 87%, 53%);--yellow-outline: hsla(37, 87%, 53%, .4);--yellow-hover: hsl(37, 87%, 59%);--yellow-focus: hsl(37, 87%, 48%);--yellow-light: hsl(37, 64%, 52%);--yellow-lighter: hsl(37, 63%, 60%);--yellow-dark: hsl(37, 63%, 48%);--yellow-darker: hsl(37, 63%, 42%);--yellow-secondary: hsl(37, 61%, 92%);--yellow-secondary-hover: hsl(37, 61%, 87%);--yellow-secondary-focus: hsl(37, 61%, 85%);--gray-50: #fafaf9;--gray-100: #f5f5f4;--gray-150: #eeeeee;--gray-200: #e7e5e4;--gray-300: #d6d3d1;--gray-400: #bdbab8;--gray-500: #78716c;--gray-600: #57534e;--gray-700: #44403c;--gray-800: #292524;--gray-900: #1c1917;--shadow: 0px 4px 10px 1px rgb(154 161 171 / 20%)}html,body{height:100%;font-family:var(--font-family)}*{box-sizing:border-box}.m-transition__fade-enter-active,.m-transition__fade-leave-active{transition:opacity .25s ease}.m-transition__fade-enter-from,.m-transition__fade-leave-to{opacity:0}.m-transition__scale-enter-active{animation:scale-in .125s}.m-transition__scale-leave-active{animation:scale-in .125s reverse}@keyframes scale-in{0%{transform:scale(0);opacity:0}25%{opacity:0}50%{opacity:.5}75%{transform:scale(1)}to{opacity:1}}.m-button{--button-height: 36px;--button-padding: 0 15px;--button-font-size: 15px;--button-border-radius: 4px;--button-font-weight: 500;--button-border-color: var(--gray-200);margin:0;white-space:nowrap;outline:none;border:1px solid var(--button-border-color);background-color:transparent;z-index:auto;padding:var(--button-padding);font-size:var(--button-font-size);font-weight:var(--button-font-weight);font-family:inherit;color:var(--gray-600);position:relative;display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;text-align:center;cursor:pointer;height:var(--button-height);line-height:1;border-radius:var(--button-border-radius);text-decoration:none;transition:color .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1)}.m-button__content{display:flex;align-items:center;flex-wrap:nowrap;min-width:0px}.m-button.m-button--strong{font-weight:500}.m-button--block{display:flex}.m-button.m-button--icon-left .m-button__content{padding-left:8px}.m-button.m-button--icon-right .m-button__content{padding-right:8px}.m-button:not(.m-button--disabled):hover{color:var(--blue);--button-border-color: var(--blue)}.m-button:not(.m-button--disabled):focus,.m-button:not(.m-button--disabled):active{color:var(--blue-dark);--button-border-color: var(--blue-dark)}.m-button.m-button--secondary{color:var(--gray-500);--button-border-color: var(--white);background-color:var(--white)}.m-button:not(.m-button--disabled).m-button--secondary:hover{color:var(--gray-600);--button-border-color: var(--gray-150);background-color:var(--gray-150)}.m-button:not(.m-button--disabled).m-button--secondary:active,.m-button:not(.m-button--disabled).m-button--secondary:focus{color:var(--gray-600);--button-border-color: var(--gray-200);background-color:var(--gray-200)}.m-button.m-button--gray.m-button--secondary{color:var(--gray-600);--button-border-color: var(--gray-100);background-color:var(--gray-100)}.m-button.m-button--gray:not(.m-button--disabled).m-button--secondary:hover{color:var(--gray-600);--button-border-color: var(--gray-150);background-color:var(--gray-150)}.m-button.m-button--gray:not(.m-button--disabled).m-button--secondary:active,.m-button.m-button--gray:not(.m-button--disabled).m-button--secondary:focus{color:var(--gray-600);--button-border-color: var(--gray-200);background-color:var(--gray-200)}.m-button--blue{color:var(--white);--button-border-color: var(--blue);background-color:var(--blue)}.m-button--blue:not(.m-button--disabled):hover{color:var(--white);--button-border-color: var(--blue-hover);background-color:var(--blue-hover)}.m-button--blue:not(.m-button--disabled):active,.m-button--blue:not(.m-button--disabled):focus{color:var(--white);--button-border-color: var(--blue-focus);background-color:var(--blue-focus)}.m-button--blue.m-button--secondary{color:var(--blue-dark);--button-border-color: var(--blue-secondary);background-color:var(--blue-secondary)}.m-button--blue.m-button--secondary:not(.m-button--disabled):hover{color:var(--blue-darker);--button-border-color: var(--blue-secondary-hover);background-color:var(--blue-secondary-hover)}.m-button--blue.m-button--secondary:not(.m-button--disabled):active,.m-button--blue.m-button--secondary:not(.m-button--disabled):focus{color:var(--blue-darker);--button-border-color: var(--blue-secondary-focus);background-color:var(--blue-secondary-focus)}.m-button--green{color:var(--white);--button-border-color: var(--green);background-color:var(--green)}.m-button--green:not(.m-button--disabled):hover{color:var(--white);--button-border-color: var(--green-hover);background-color:var(--green-hover)}.m-button--green:not(.m-button--disabled):focus,.m-button--green:not(.m-button--disabled):active{color:var(--white);--button-border-color: var(--green-focus);background-color:var(--green-focus)}.m-button--green.m-button--secondary{color:var(--green-dark);--button-border-color: var(--green-secondary);background-color:var(--green-secondary)}.m-button--green.m-button--secondary:not(.m-button--disabled):hover{color:var(--green-darker);--button-border-color: var(--green-secondary-hover);background-color:var(--green-secondary-hover)}.m-button--green.m-button--secondary:not(.m-button--disabled):focus,.m-button--green.m-button--secondary:not(.m-button--disabled):active{color:var(--green-darker);--button-border-color: var(--green-secondary-focus);background-color:var(--green-secondary-focus)}.m-button--red{color:var(--white);--button-border-color: var(--red);background-color:var(--red)}.m-button--red:not(.m-button--disabled):hover{color:var(--white);--button-border-color: var(--red-hover);background-color:var(--red-hover)}.m-button--red:not(.m-button--disabled):focus,.m-button--red:not(.m-button--disabled):active{color:var(--white);--button-border-color: var(--red-focus);background-color:var(--red-focus)}.m-button--red.m-button--secondary{color:var(--red-dark);--button-border-color: var(--red-secondary);background-color:var(--red-secondary)}.m-button--red.m-button--secondary:not(.m-button--disabled):hover{color:var(--red-darker);--button-border-color: var(--red-secondary-hover);background-color:var(--red-secondary-hover)}.m-button--red.m-button--secondary:not(.m-button--disabled):active,.m-button--red.m-button--secondary:not(.m-button--disabled):focus{color:var(--red-darker);--button-border-color: var(--red-secondary-focus);background-color:var(--red-secondary-focus)}.m-button--yellow{color:var(--white);--button-border-color: var(--yellow);background-color:var(--yellow)}.m-button--yellow:not(.m-button--disabled):hover{color:var(--white);--button-border-color: var(--yellow-hover);background-color:var(--yellow-hover)}.m-button--yellow:not(.m-button--disabled):focus,.m-button--yellow:not(.m-button--disabled):active{color:var(--white);--button-border-color: var(--yellow-focus);background-color:var(--yellow-focus)}.m-button--yellow.m-button--secondary{color:var(--yellow-dark);--button-border-color: var(--yellow-secondary);background-color:var(--yellow-secondary)}.m-button--yellow.m-button--secondary:not(.m-button--disabled):hover{color:var(--yellow-darker);--button-border-color: var(--yellow-secondary-hover);background-color:var(--yellow-secondary-hover)}.m-button--yellow.m-button--secondary:not(.m-button--disabled):active,.m-button--yellow.m-button--secondary:not(.m-button--disabled):focus{color:var(--yellow-darker);--button-border-color: var(--yellow-secondary-focus);background-color:var(--yellow-secondary-focus)}.m-button--xs{--button-height: 22px;--button-padding: 0 6px;--button-font-size: 14px}.m-button--sm{--button-height: 28px;--button-padding: 0 10px;--button-font-size: 14px}.m-button--lg{--button-height: 40px;--button-padding: 0 18px;--button-font-size: 18px}.m-button--xl{--button-height: 44px;--button-padding: 0 22px;--button-font-size: 20px}.m-button--rounded{border-radius:34px}.m-button--rounded.m-button--xs{padding:0 10px}.m-button--rounded.m-button--sm{padding:0 14px}.m-button--rounded.m-button--md{padding:0 18px}.m-button--rounded.m-button--lg{padding:0 22px}.m-button--rounded.m-button--xl{padding:0 26px}.m-button--disabled{opacity:.8;cursor:not-allowed;user-select:none}.m-button-group{display:inline-flex;vertical-align:middle;position:relative}.m-button-group .m-button:first-child{border-top-left-radius:var(--button-border-radius);border-bottom-left-radius:var(--button-border-radius);border-top-right-radius:0;border-bottom-right-radius:0}.m-button-group .m-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--button-border-radius);border-bottom-right-radius:var(--button-border-radius)}.m-button-group .m-button{border-radius:0}.m-button-group .m-button:not(:first-child){border-left:none}.m-button-group .m-button:not(:first-child):after{content:"";position:absolute;top:0;left:0;bottom:0;width:1px;background-color:transparent;transition:color .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1)}.m-button-group .m-button:hover:not(:first-child):after{background-color:var(--button-border-color)}.m-button-group--block>.m-button{flex-basis:100%}.m-button-group--block{display:flex}.m-input__container{position:relative;display:flex;flex-direction:column;width:100%}.m-input{--input-height: 40px;--input-padding: 0 8px;--input-font-size: 15px;--input-border-radius: 4px;--input-clear-size: 1.2rem;--input-background-color: var(--white);--input-border-color: var(--gray-200);position:relative;display:inline-flex;align-items:center;height:var(--input-height);font-size:var(--input-font-size);background-color:var(--input-background-color);border:1px solid var(--input-border-color);box-shadow:none;border-radius:var(--input-border-radius);outline:0;cursor:text;transition:color .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1)}.m-input.m-input--disabled{--input-border-color: var(--gray-300);--input-background-color: var(--gray-100);opacity:.6;cursor:not-allowed}.m-input.m-input--disabled input{cursor:not-allowed}.m-input:not(.m-input--disabled):focus-within{--input-border-color: var(--blue);box-shadow:0 0 0 2px var(--blue-outline)}.m-input:not(.m-input--disabled):not(:focus-within):hover{--input-border-color: var(--gray-400)}.m-input input{flex:1 0 0;min-width:0;height:100%;padding:var(--input-padding);font-size:inherit;color:var(--gray-600);background-color:transparent;border:0;outline:0;border-radius:var(--input-border-radius)}.m-input__clearable{display:flex;align-items:center;justify-content:center;padding:0 6px}.m-input .m-input__clearable i.m-icon--close{cursor:pointer;width:var(--input-clear-size);height:var(--input-clear-size);display:flex;align-items:center;justify-content:center;border-radius:100%;color:var(--gray-500);background-color:transparent;transition:background-color .125s cubic-bezier(.4,0,.2,1)}.m-input .m-input__clearable i.m-icon--close:hover{color:var(--gray-500);background-color:var(--gray-150)}.m-input i.m-icon--close:before{--close-icon-size: 16px;background-color:currentColor;content:"";width:var(--close-icon-size);height:var(--close-icon-size);-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");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");-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:var(--close-icon-size) var(--close-icon-size);mask-size:var(--close-icon-size) var(--close-icon-size)}.m-input--xs{--input-height: 32px;--input-padding: 0 8px;--input-font-size: 13px;--input-border-radius: 4px;--input-clear-size: 1.2rem}.m-input--sm{--input-height: 36px;--input-padding: 0 8px;--input-font-size: 14px;--input-border-radius: 4px;--input-clear-size: 1.2rem}.m-input--md{--input-height: 40px;--input-padding: 0 8px;--input-font-size: 15px;--input-border-radius: 4px;--input-clear-size: 1.2rem}.m-input--lg{--input-height: 42px;--input-padding: 0 8px;--input-font-size: 16px;--input-border-radius: 4px;--input-clear-size: 1.2rem}.m-input--xl{--input-height: 46px;--input-padding: 0 8px;--input-font-size: 18px;--input-border-radius: 6px;--input-clear-size: 1.2rem}.m-input__label{margin-bottom:5px;color:var(--gray-600);font-size:15px;font-weight:600}.m-input__help{margin-top:4px;color:var(--gray-500);font-size:15px;font-weight:400}.m-input__error{margin:4px 0 8px;color:var(--red);font-size:15px;font-weight:400}.m-form .m-form__input{margin-bottom:16px}.m-form .m-form__input .m-input__error{margin:4px 0 0}.m-select__container{position:relative;display:flex;flex-direction:column;width:100%}.m-select__container:focus{outline:none}.m-select{--select-height: 40px;--select-padding: 0 8px;--select-font-size: 15px;--select-border-radius: 4px;--select-clear-size: 1.2rem;--select-background-color: var(--white);--select-border-color: var(--gray-200);position:relative;display:inline-flex;align-items:center;height:var(--select-height);font-size:var(--select-font-size);background-color:var(--select-background-color);border:1px solid var(--select-border-color);box-shadow:none;border-radius:var(--select-border-radius);outline:0;cursor:text;width:100%;transition:color .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1)}.m-select:not(.m-select--disabled):not(.m-select--focused):hover{--select-border-color: var(--gray-400)}.m-select:not(.m-select--disabled):focus,.m-select:not(.m-select--disabled):focus-within,.m-select:not(.m-select--disabled).m-select--focused{--select-border-color: var(--blue);box-shadow:0 0 0 2px var(--blue-outline);outline:none}.m-select.m-select--disabled{--select-border-color: var(--gray-300);--select-background-color: var(--gray-100);opacity:.6;cursor:not-allowed}.m-select__clearable{display:flex;align-items:center;justify-content:center;padding:0 6px}.m-select .m-select__clearable i.m-icon--close{cursor:pointer;width:var(--select-clear-size);height:var(--select-clear-size);display:flex;align-items:center;justify-content:center;border-radius:100%;color:var(--gray-500);background-color:transparent;transition:background-color .125s cubic-bezier(.4,0,.2,1)}.m-select .m-select__clearable i.m-icon--close:hover{color:var(--gray-500);background-color:var(--gray-150)}.m-select i.m-icon--close:before{--close-icon-size: 16px;background-color:currentColor;content:"";width:var(--close-icon-size);height:var(--close-icon-size);-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");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");-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:var(--close-icon-size) var(--close-icon-size);mask-size:var(--close-icon-size) var(--close-icon-size)}.m-select--xs{--select-height: 32px;--select-padding: 0 8px;--select-font-size: 13px;--select-border-radius: 4px;--select-clear-size: 1.2rem}.m-select--sm{--select-height: 36px;--select-padding: 0 8px;--select-font-size: 14px;--select-border-radius: 4px;--select-clear-size: 1.2rem}.m-select--md{--select-height: 40px;--select-padding: 0 8px;--select-font-size: 15px;--select-border-radius: 4px;--select-clear-size: 1.2rem}.m-select--lg{--select-height: 42px;--select-padding: 0 8px;--select-font-size: 16px;--select-border-radius: 4px;--select-clear-size: 1.2rem}.m-select--xl{--select-height: 46px;--select-padding: 0 8px;--select-font-size: 18px;--select-border-radius: 6px;--select-clear-size: 1.2rem}.m-select__label{margin-bottom:5px;color:var(--gray-600);font-size:15px;font-weight:600}.m-select__input{padding:var(--select-padding);font-size:15px;color:var(--gray-600)}.m-select__help{margin-top:4px;color:var(--gray-500);font-size:15px;font-weight:400}.m-select__error{margin:4px 0 8px;color:var(--red);font-size:15px;font-weight:400}.m-form .m-select__form{margin-bottom:16px}.m-form .m-select__form .m-select__error{margin:4px 0 0}.m-select__dropdown{z-index:100;max-height:400px;min-width:200px;overflow-y:auto;border-radius:4px;background-color:var(--white);box-shadow:0 0 0 1px var(--gray-200),0 4px 8px #0000001a;display:flex;flex-direction:column}.m-select__dropdown[data-popper-placement^=bottom-]{margin-top:5px!important}.m-select__dropdown[data-popper-placement^=top-]{margin-bottom:5px!important}.m-select__search{position:sticky;top:0;z-index:1;background-color:var(--white);padding:6px 6px 0}.m-select__options{padding:4px 0}.m-select__option{display:flex;align-items:center;justify-content:space-between;padding:8px;margin:0 4px;font-size:15px;color:var(--gray-600);cursor:pointer;transition:background-color .125s cubic-bezier(.4,0,.2,1);border-radius:4px}.m-select__option--selected{color:var(--blue)!important}.m-select__option--focused{background-color:var(--gray-100)}.m-select__placeholder-text{color:var(--gray-500)}.m-checkbox{--checkbox-width: 22px;--checkbox-height: 22px;--checkbox-border-radius: 6px;--checkbox-border-width: 1px;--checkbox-background-color: var(--white);--checkbox-border-color: var(--gray-300);--checkbox-gap: 6px;--checkbox-tick-width: 4px;--checkbox-tick-height: 10px;--checkbox-tick-height-negative: -10px;--checkbox-tick-top: 8px;--checkbox-tick-left: 3px;--checkbox-tick-border-width: 3px;display:flex;align-items:center;position:relative;font-weight:700;cursor:pointer;gap:var(--checkbox-gap)}.m-checkbox.m-checkbox--xs{--checkbox-width: 16px;--checkbox-height: 16px;--checkbox-border-radius: 4px;--checkbox-border-width: 1px;--checkbox-tick-top: 6px;--checkbox-tick-left: 1px;--checkbox-tick-width: 3px;--checkbox-tick-height: 8px;--checkbox-tick-height-negative: -8px}.m-checkbox.m-checkbox--sm{--checkbox-width: 20px;--checkbox-height: 20px;--checkbox-border-radius: 4px;--checkbox-border-width: 1px;--checkbox-tick-top: 7px;--checkbox-tick-left: 2px}.m-checkbox.m-checkbox--lg{--checkbox-width: 26px;--checkbox-height: 26px;--checkbox-border-radius: 8px;--checkbox-border-width: 1px;--checkbox-tick-top: 10px;--checkbox-tick-left: 3px;--checkbox-tick-border-width: 4px;--checkbox-tick-width: 4px;--checkbox-tick-height: 14px;--checkbox-tick-height-negative: -14px}.m-checkbox.m-checkbox--xl{--checkbox-width: 32px;--checkbox-height: 32px;--checkbox-border-radius: 8px;--checkbox-border-width: 1px;--checkbox-tick-top: 14px;--checkbox-tick-left: 5px;--checkbox-tick-border-width: 4px;--checkbox-tick-width: 5px;--checkbox-tick-height: 16px;--checkbox-tick-height-negative: -16px}.m-checkbox.m-checkbox--blue.m-checkbox--checked{--checkbox-background-color: var(--blue);--checkbox-border-color: var(--blue)}.m-checkbox.m-checkbox--green.m-checkbox--checked{--checkbox-background-color: var(--green);--checkbox-border-color: var(--green)}.m-checkbox.m-checkbox--red.m-checkbox--checked{--checkbox-background-color: var(--red);--checkbox-border-color: var(--red)}.m-checkbox.m-checkbox--yellow.m-checkbox--checked{--checkbox-background-color: var(--yellow);--checkbox-border-color: var(--yellow)}.m-checkbox input{position:absolute;opacity:0;cursor:pointer;height:0;width:0;display:none}.m-checkbox span{display:flex;height:var(--checkbox-height);width:var(--checkbox-width);border-radius:var(--checkbox-border-radius);border:var(--checkbox-border-width) solid var(--checkbox-border-color);background-color:var(--checkbox-background-color);transition:all 125ms cubic-bezier(.4,0,.2,1);position:relative}.m-checkbox:hover:not(.m-checkbox--checked):not(.m-checkbox--disabled) span{--checkbox-border-color: var(--gray-400);--checkbox-background-color: var(--gray-100)}.m-checkbox.m-checkbox--disabled span,.m-checkbox.m-checkbox--disabled .m-checkbox__label{cursor:not-allowed}.m-checkbox.m-checkbox--disabled span{opacity:.6}.m-checkbox:not(.m-checkbox--checked).m-checkbox--disabled span{--checkbox-border-color: var(--gray-300);--checkbox-background-color: var(--gray-100)}.m-checkbox.m-checkbox--checked span{background-color:var(--checkbox-background-color);border-color:var(--checkbox-background-color)}.m-checkbox.m-checkbox--checked span:before{content:"";position:absolute;transform:rotate(45deg);border-right:var(--checkbox-tick-border-width) solid transparent;border-bottom:var(--checkbox-tick-border-width) solid transparent;top:var(--checkbox-tick-top);left:var(--checkbox-tick-left);color:#fff;transform-origin:0% 100%;animation:draw-tick 125ms .17s cubic-bezier(.4,0,.2,1) forwards}.m-checkbox .m-checkbox__label{display:inline-block;vertical-align:middle;font-size:14px;line-height:24px;color:#000;font-weight:400;user-select:none}@keyframes draw-tick{0%{height:0px;width:0px;border-color:#fff;transform:translateZ(0) rotate(45deg)}25%{height:0px;width:var(--checkbox-tick-width);transform:translateZ(0) rotate(45deg)}to{border-color:#fff;height:var(--checkbox-tick-height);width:var(--checkbox-tick-width);transform:translate3d(0,var(--checkbox-tick-height-negative),0) rotate(45deg)}}.m-breadcrumbs{display:flex;list-style:none;margin:0;padding:4px;font-variant-numeric:tabular-nums;align-items:center;position:relative}.m-breadcrumbs__item:last-child .m-breadcrumbs__item-separator{display:none}.m-breadcrumbs__item{display:flex;align-items:center;outline:none;cursor:pointer;color:var(--gray-600)}.m-breadcrumbs__link{padding:4px 10px;font-size:14px;border-radius:4px;background-color:transparent;text-decoration:none;outline:none;transition:color .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1)}.m-breadcrumbs__link:hover{color:var(--blue-dark);background-color:var(--gray-100)}.m-breadcrumbs__item-separator{display:inline-flex;padding:0 6px;cursor:default;user-select:none;color:var(--gray-300)}.m-avatar{--avatar-height: 40px;--avatar-width: 40px;--avatar-font-size: 13px;--avatar-border-radius: 4px;width:var(--avatar-width);height:var(--avatar-height);font-size:var(--avatar-font-size);position:relative;display:inline-flex;background-color:var(--gray-200);color:var(--gray-400);overflow:hidden;white-space:nowrap;vertical-align:middle;justify-content:center;align-items:center;box-sizing:content-box;border-radius:var(--avatar-border-radius);font-weight:600;user-select:none}.m-avatar img{width:100%;height:100%}.m-avatar--circle{--avatar-border-radius: 50%}.m-avatar--rounded{--avatar-border-radius: 4px}.m-avatar--square{--avatar-border-radius: 0}.m-avatar--xs{--avatar-height: 24px;--avatar-width: 24px;--avatar-font-size: 11px}.m-avatar--sm{--avatar-height: 32px;--avatar-width: 32px;--avatar-font-size: 12px}.m-avatar--md{--avatar-height: 40px;--avatar-width: 40px;--avatar-font-size: 13px}.m-avatar--lg{--avatar-height: 48px;--avatar-width: 48px;--avatar-font-size: 16px}.m-avatar--xl{--avatar-height: 56px;--avatar-width: 56px;--avatar-font-size: 17px}.m-avatar-group .m-avatar:not(:last-child){margin-right:-10px}.m-avatar-group .m-avatar{border:2px solid var(--white)}.m-message-provider__container{z-index:5000;position:fixed;height:0;overflow:visible;display:flex;flex-direction:column;align-items:center}.m-message-provider__container--top{top:12px;left:0;right:0}.m-message__wrapper{margin:0 0 8px;z-index:0;transform-origin:top center;display:flex;align-items:center}.m-message{box-sizing:border-box;display:flex;align-items:center;padding:10px 20px;border-radius:3px;flex-wrap:nowrap;max-width:720px;color:var(--gray-700);background-color:var(--white);box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.m-skeleton{--skeleton-border-radius: 4px;--skeleton-height: 100%;--skeleton-width: 100%;position:relative;display:flex;background:linear-gradient(-90deg,var(--gray-100) 0%,var(--gray-200) 50%,var(--gray-100) 100%);background-size:400% 400%;overflow:hidden;white-space:nowrap;vertical-align:middle;justify-content:center;align-items:center;box-sizing:content-box;border-radius:var(--skeleton-border-radius);font-weight:600;user-select:none;width:var(--skeleton-width);height:var(--skeleton-height)}.m-skeleton--thumb{--skeleton-border-radius: 4px;--skeleton-height: 128px;--skeleton-width: 500px}.m-skeleton--heading{--skeleton-border-radius: 4px;--skeleton-height: 32px;--skeleton-width: 500px}.m-skeleton--line{--skeleton-border-radius: 4px;--skeleton-height: 20px;--skeleton-width: 500px}.m-skeleton--circle{--skeleton-border-radius: 50%;--skeleton-height: 40px;--skeleton-width: 40px}.m-skeleton--block{--skeleton-border-radius: 4px;--skeleton-height: 100%;--skeleton-width: 100%}.m-skeleton--pulse{animation:skeleton-pulse 1.5s ease-in-out infinite;-webkit-animation:skeleton-pulse 1.5s ease-in-out infinite}@keyframes skeleton-pulse{0%{background-position:0 0}to{background-position:-135% 0}}@-webkit-keyframes skeleton-pulse{0%{background-position:0 0}to{background-position:-135% 0}}.m-link{--link-color: var(--blue);--link-color-hover: var(--blue-hover);--link-color-focus: var(--blue-focus);--link-color-visited: var(--blue-focus);color:var(--link-color);text-decoration:none;transition:color .3s cubic-bezier(.4,0,.2,1)}.m-link--underline{text-decoration:underline}.m-link--block{display:flex}.m-link:visited{color:var(--link-color-visited)}.m-link:hover{color:var(--link-color-hover);text-decoration:underline}.m-link:focus,.m-link:active{color:var(--link-color-focus)}.m-link--blue,.m-link--blue:visited{--link-color: var(--blue);--link-color-hover: var(--blue-hover);--link-color-focus: var(--blue-focus);--link-color-visited: var(--blue-focus)}.m-link--blue:hover{--link-color: var(--blue-hover);--link-color-hover: var(--blue-hover);--link-color-focus: var(--blue-focus);--link-color-visited: var(--blue-focus)}.m-link--blue:focus,.m-link--blue:active{--link-color: var(--blue-focus);--link-color-hover: var(--blue-focus);--link-color-focus: var(--blue-focus);--link-color-visited: var(--blue-focus)}.m-link--green,.m-link--green:visited{--link-color: var(--green);--link-color-hover: var(--green-hover);--link-color-focus: var(--green-focus);--link-color-visited: var(--green-focus)}.m-link--green:hover{--link-color: var(--green-hover);--link-color-hover: var(--green-hover);--link-color-focus: var(--green-focus);--link-color-visited: var(--green-focus)}.m-link--green:focus,.m-link--green:active{--link-color: var(--green-focus);--link-color-hover: var(--green-focus);--link-color-focus: var(--green-focus);--link-color-visited: var(--green-focus)}.m-link--red,.m-link--red:visited{--link-color: var(--red);--link-color-hover: var(--red-hover);--link-color-focus: var(--red-focus);--link-color-visited: var(--red-focus)}.m-link--red:hover{--link-color: var(--red-hover);--link-color-hover: var(--red-hover);--link-color-focus: var(--red-focus);--link-color-visited: var(--red-focus)}.m-link--red:focus,.m-link--red:active{--link-color: var(--red-focus);--link-color-hover: var(--red-focus);--link-color-focus: var(--red-focus);--link-color-visited: var(--red-focus)}.m-link--yellow,.m-link--yellow:visited{--link-color: var(--yellow);--link-color-hover: var(--yellow-hover);--link-color-focus: var(--yellow-focus);--link-color-visited: var(--yellow-focus)}.m-link--yellow:hover{--link-color: var(--yellow-hover);--link-color-hover: var(--yellow-hover);--link-color-focus: var(--yellow-focus);--link-color-visited: var(--yellow-focus)}.m-link--yellow:focus,.m-link--yellow:active{--link-color: var(--yellow-focus);--link-color-hover: var(--yellow-focus);--link-color-focus: var(--yellow-focus);--link-color-visited: var(--yellow-focus)}.m-tooltip--wrapper{position:relative;display:inline-block;cursor:pointer}.m-tooltip{box-sizing:border-box}.m-tooltip.m-tooltip--reverse .m-tooltip--content{background-color:#ffffffe6;color:#000}.m-tooltip .m-tooltip--content{transition:opacity .3s ease;font-size:12px;font-weight:400;color:#fff;background-color:#000000bf;border-radius:4px;padding:5px 10px;pointer-events:none;width:max-content;max-width:300px}.m-tooltip .tooltip--arrow{position:absolute;color:#000000bf;width:10px}.m-tooltip[data-popper-placement^=top]{padding:5px 0 14px}.m-tooltip[data-popper-placement^=bottom]{padding:14px 0 5px}.m-tooltip[data-popper-placement^=left]{padding:0 8px 0 5px}.m-tooltip[data-popper-placement^=right]{padding:0 5px 0 8px}.m-tab-group{--tabs-gap: 14px;--tabs-background: transparent;--tabs-border-radius: 0;--tabs-padding: 0;--tabs-border: 1px solid var(--gray-200);--tab-background: var(transparent);--tab-color: var(--gray-600);--tab-font-size: 15px;--tab-padding: 12px 8px;--tab-border-radius: 0px;--tab-font-weight: 500;--tab-box-shadow: none}.m-tab-group__tabs{background:var(--tabs-background);border-radius:var(--tabs-border-radius);position:relative;border-bottom:var(--tabs-border);display:flex;min-width:100%;width:fit-content;list-style:none;padding:var(--tabs-padding);margin:0;gap:var(--tabs-gap)}.m-tab-group__tabs .m-tab .m-tabs__button{display:flex;align-items:center;justify-content:center;font-size:var(--tab-font-size);font-weight:var(--tab-font-weight);color:var(--tab-color);background-color:var(--tab-background);padding:var(--tab-padding);border-radius:var(--tab-border-radius);box-shadow:var(--tab-box-shadow);cursor:pointer;transition:all .2s ease-in-out;border:none}.m-tab-group__tabs .m-tab:not(.m-tab--disabled) .m-tabs__button:hover{--tab-background: var(transparent);--tab-color: var(--blue)}.m-tab-group__tabs .m-tab.m-tab--active .m-tabs__button{--tab-background: var(--white);--tab-color: var(--blue);--tab-box-shadow: inset 0px -2px 0px var(--blue)}.m-tab-group__tabs .m-tab.m-tab--disabled .m-tabs__button{--tab-color: var(--gray-400);cursor:not-allowed}.m-tab-group.m-tab-group--xs{--tabs-background: transparent;--tabs-border-radius: 0;--tabs-padding: 0;--tabs-gap: 8px;--tab-font-size: 12px;--tab-padding: 10px 6px}.m-tab-group.m-tab-group--sm{--tabs-background: transparent;--tabs-border-radius: 0;--tabs-padding: 0;--tabs-gap: 10px;--tab-font-size: 13px;--tab-padding: 13px 6px}.m-tab-group.m-tab-group--lg{--tabs-background: transparent;--tabs-border-radius: 0;--tabs-padding: 0;--tab-font-size: 16px;--tab-padding: 20px 12px}.m-tab-group.m-tab-group--xl{--tabs-background: transparent;--tabs-border-radius: 0;--tabs-padding: 0;--tab-font-size: 18px;--tab-padding: 24px 16px}.m-tab-group.m-tab-group--vertical{flex-direction:column}.m-tab-group.m-tab-group--vertical .m-tab-group__tabs{flex-direction:column;gap:0;width:200px}.m-table__wrapper{width:100%;overflow-x:auto}.m-table{--table-cell-padding: 10px 15px;border-collapse:collapse;width:100%}.m-table thead tr th{padding:var(--table-cell-padding);text-align:left;font-weight:500;background-color:var(--gray-150);white-space:nowrap;color:var(--gray-700);font-size:14px;line-height:15px}.m-table tbody tr:first-child td{border-top:none}.m-table tbody tr td{padding:var(--table-cell-padding);border-top:1px solid var(--gray-150);font-size:15px;line-height:15px;vertical-align:middle}.m-table.m-table--striped tbody tr:nth-child(even) td{background-color:var(--gray-50)}.m-table.m-table--hover tbody tr:hover td{background-color:var(--gray-50)}.m-dropdown{position:relative}.m-dropdown-menu{--dropdown-menu-width: 200px;--dropdown-menu-padding: 6px;--dropdown-menu-background-color: var(--white);--dropdown-menu-box-shadow: 0px 4px 10px 1px rgb(154 161 171 / 20%);--dropdown-menu-border-radius: 4px;--dropdown-menu-border: 1px solid var(--gray-200);--dropdown-menu-item-font-size: 15px;--dropdown-menu-item-height: 34px;--dropdown-menu-item-line-height: 34px;--dropdown-menu-item-color: var(--gray-600);--dropdown-menu-item-background-color: var(--white);--dropdown-menu-item-border-radius: 4px;--dropdown-menu-item-padding: 0px 8px;--dropdown-menu-gap: 4px;position:relative;background-color:var(--dropdown-menu-background-color);box-shadow:var(--dropdown-menu-box-shadow);border-radius:var(--dropdown-menu-border-radius);min-width:var(--dropdown-menu-width);padding:var(--dropdown-menu-padding);border:var(--dropdown-menu-border)}.m-dropdown-menu ul{list-style:none;margin:0;padding:0}.m-dropdown-menu ul .m-dropdown-item{position:relative;display:flex;align-items:center;cursor:pointer;font-size:var(--dropdown-menu-item-font-size);height:var(--dropdown-menu-item-height);line-height:var(--dropdown-menu-item-line-height);color:var(--dropdown-menu-item-color);background-color:var(--dropdown-menu-item-background-color);border-radius:var(--dropdown-menu-item-border-radius);padding:var(--dropdown-menu-item-padding);gap:var(--dropdown-menu-gap)}.m-dropdown-menu ul .m-dropdown-item .m-dropdown__text{white-space:nowrap;flex:1;z-index:1}.m-dropdown-menu ul .m-dropdown-item:hover{--dropdown-menu-item-color: var(--blue);--dropdown-menu-item-background-color: var(--gray-100)}.m-dropdown__icon-right,.m-dropdown__icon-left{display:flex;align-items:center}
@@ -0,0 +1,2 @@
1
+ export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2
+ export type Color = 'white' | 'black' | 'blue' | 'green' | 'red' | 'yellow' | 'gray';
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@teammodlr/ui-kit",
3
+ "version": "1.0.2",
4
+ "description": "",
5
+ "main": "lib/index.cjs.js",
6
+ "module": "lib/index.es.js",
7
+ "typings": "lib/index.d.ts",
8
+ "files": [
9
+ "lib",
10
+ "src",
11
+ "!./src/__storybook__",
12
+ "!src/components/**/examples",
13
+ "*.d.ts"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "import": "./lib/index.es.js",
18
+ "require": "./lib/index.cjs.js"
19
+ },
20
+ "./nuxt": "./lib/nuxt.js",
21
+ "./style": "./lib/style.css",
22
+ "./styles": "./lib/style.css",
23
+ "./nuxt.plugin": "./lib/nuxt.plugin.js",
24
+ "./nuxt.plugin.js": "./lib/nuxt.plugin.js"
25
+ },
26
+ "sideEffects": false,
27
+ "scripts": {
28
+ "dev": "npm run storybook",
29
+ "storybook": "storybook dev -p 6006",
30
+ "build": "npm run build:vite && npm run gen-types",
31
+ "build:vite": "vite build",
32
+ "build:storybook": "storybook build",
33
+ "test": "",
34
+ "gen-types": "vue-tsc --declaration --emitDeclarationOnly -p tsconfig.vitest.json --composite false",
35
+ "prerelease": "npm run build",
36
+ "release": "np"
37
+ },
38
+ "keywords": [],
39
+ "author": "",
40
+ "license": "ISC",
41
+ "devDependencies": {
42
+ "@babel/core": "^7.20.5",
43
+ "@nuxt/kit": "^3.0.0",
44
+ "@nuxt/schema": "^3.0.0",
45
+ "@storybook/addon-actions": "^7.0.0-beta.29",
46
+ "@storybook/addon-essentials": "^7.0.0-beta.29",
47
+ "@storybook/addon-interactions": "^7.0.0-beta.29",
48
+ "@storybook/addon-links": "^7.0.0-beta.29",
49
+ "@storybook/addons": "^7.0.0-beta.29",
50
+ "@storybook/testing-library": "^0.0.14-next.1",
51
+ "@storybook/theming": "^7.0.0-beta.29",
52
+ "@storybook/vue3": "^7.0.0-beta.29",
53
+ "@storybook/vue3-vite": "^7.0.0-beta.29",
54
+ "@types/jsdom": "^20.0.1",
55
+ "@types/node": "^18.11.17",
56
+ "@vitejs/plugin-vue": "^4.0.0",
57
+ "@vue/tsconfig": "^0.1.3",
58
+ "babel-loader": "^8.3.0",
59
+ "jsdom": "^20.0.3",
60
+ "react": "^18.2.0",
61
+ "react-dom": "^18.2.0",
62
+ "storybook": "^7.0.0-beta.29",
63
+ "ts-node": "^10.9.1",
64
+ "typescript": "^4.9.4",
65
+ "vite": "^4.0.2",
66
+ "vue": "^3.2.45",
67
+ "vue-loader": "^16.8.3",
68
+ "vue-tsc": "^1.0.19"
69
+ },
70
+ "dependencies": {
71
+ "@popperjs/core": "^2.11.6",
72
+ "@vueuse/core": "^9.11.0",
73
+ "np": "^7.6.3"
74
+ }
75
+ }
@@ -0,0 +1,42 @@
1
+ import { placementWhileList } from "@/composables/usePopper";
2
+
3
+ export const sizeArgType = () => ({
4
+ size: {
5
+ options: ['xs', 'sm', 'md', 'lg', 'xl'],
6
+ control: {
7
+ type: 'select',
8
+ labels: {
9
+ ['Extra Small']: 'xs',
10
+ ['Small']: 'sm',
11
+ ['Medium']: 'md',
12
+ ['Large']: 'lg',
13
+ ['Extra Large']: 'xl'
14
+ }
15
+ }
16
+ }
17
+ });
18
+
19
+ export const colorArgType = () => ({
20
+ color: {
21
+ options: [
22
+ 'white',
23
+ 'black',
24
+ 'green',
25
+ 'red',
26
+ 'yellow',
27
+ 'blue',
28
+ ],
29
+ control: {
30
+ type: 'select',
31
+ }
32
+ }
33
+ });
34
+
35
+ export const popperPositionArgType = () => ({
36
+ placement: {
37
+ options: placementWhileList,
38
+ control: {
39
+ type: 'select',
40
+ }
41
+ }
42
+ })
@@ -0,0 +1,15 @@
1
+ import { h } from 'vue';
2
+ import type { Component } from 'vue';
3
+
4
+ export const createStory =
5
+ (component: Component, storyArgs: { classes?: string } = {}) =>
6
+ (args: any) => ({
7
+ setup: () => () =>
8
+ h(
9
+ 'div',
10
+ {
11
+ class: `storybook-example ${storyArgs.classes || ''}`
12
+ },
13
+ [h(component, args)]
14
+ )
15
+ });
@@ -0,0 +1,2 @@
1
+ export * from './createStory';
2
+ export * from './argTypes';
@@ -0,0 +1,69 @@
1
+ .m-avatar {
2
+ --avatar-height: 40px;
3
+ --avatar-width: 40px;
4
+ --avatar-font-size: 13px;
5
+ --avatar-border-radius: 4px;
6
+ width: var(--avatar-width);
7
+ height: var(--avatar-height);
8
+ font-size: var(--avatar-font-size);
9
+ position: relative;
10
+ display: inline-flex;
11
+ background-color: var(--gray-200);
12
+ color: var(--gray-400);
13
+ overflow: hidden;
14
+ white-space: nowrap;
15
+ vertical-align: middle;
16
+ justify-content: center;
17
+ align-items: center;
18
+ box-sizing: content-box;
19
+ border-radius: var(--avatar-border-radius);
20
+ font-weight: 600;
21
+ user-select: none;
22
+ }
23
+
24
+ .m-avatar img {
25
+ width: 100%;
26
+ height: 100%;
27
+ }
28
+
29
+ .m-avatar--circle {
30
+ --avatar-border-radius: 50%;
31
+ }
32
+
33
+ .m-avatar--rounded {
34
+ --avatar-border-radius: 4px;
35
+ }
36
+
37
+ .m-avatar--square {
38
+ --avatar-border-radius: 0;
39
+ }
40
+
41
+ .m-avatar--xs {
42
+ --avatar-height: 24px;
43
+ --avatar-width: 24px;
44
+ --avatar-font-size: 11px;
45
+ }
46
+
47
+ .m-avatar--sm {
48
+ --avatar-height: 32px;
49
+ --avatar-width: 32px;
50
+ --avatar-font-size: 12px;
51
+ }
52
+
53
+ .m-avatar--md {
54
+ --avatar-height: 40px;
55
+ --avatar-width: 40px;
56
+ --avatar-font-size: 13px;
57
+ }
58
+
59
+ .m-avatar--lg {
60
+ --avatar-height: 48px;
61
+ --avatar-width: 48px;
62
+ --avatar-font-size: 16px;
63
+ }
64
+
65
+ .m-avatar--xl {
66
+ --avatar-height: 56px;
67
+ --avatar-width: 56px;
68
+ --avatar-font-size: 17px;
69
+ }
@@ -0,0 +1,102 @@
1
+ <template>
2
+ <span
3
+ :class="classes"
4
+ :style="customSize"
5
+ ref="avatar"
6
+ >
7
+ <MImage
8
+ v-if="(src || srcSet) && imageExists"
9
+ :src="src"
10
+ :alt="src"
11
+ :srcset="srcSet"
12
+ @error="handleImageLoadError"
13
+ />
14
+ <slot v-else />
15
+ </span>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ import { defineComponent, ref, computed, inject, onMounted } from 'vue';
20
+ import MImage from '../image/Image.vue';
21
+
22
+ export default defineComponent({
23
+ name: "MAvatar",
24
+ components: {
25
+ MImage,
26
+ },
27
+ props: {
28
+ src: {
29
+ type: String,
30
+ default: ""
31
+ },
32
+ srcSet: {
33
+ type: String,
34
+ default: ""
35
+ },
36
+ size: {
37
+ type: [Number, String],
38
+ default: 'md'
39
+ },
40
+ fit: {
41
+ type: String,
42
+ default: "cover"
43
+ },
44
+ variant: {
45
+ type: String,
46
+ default: "circle"
47
+ }
48
+ },
49
+ emits: {
50
+ error: (e: Event) => true
51
+ },
52
+ setup(props, { emit }) {
53
+ const avatarGroup = inject('avatarGroup', undefined);
54
+ const avatar = ref<HTMLElement | null>(null);
55
+ const imageExists = ref(true);
56
+ const sizeValue = ref('');
57
+
58
+ const groupSize = computed(() => {
59
+ // @ts-ignore
60
+ return avatarGroup?.size
61
+ });
62
+
63
+ const isCustomSize = computed(() => {
64
+ return typeof props.size === 'number' || props.size.includes('px')
65
+ });
66
+
67
+ const customSize = computed(() => {
68
+ return isCustomSize.value ? {
69
+ width: props.size,
70
+ height: props.size
71
+ } : {}
72
+ });
73
+
74
+ const classes = computed(() => {
75
+ return {
76
+ 'm-avatar': true,
77
+ [`m-avatar--${sizeValue.value}`]: !isCustomSize.value,
78
+ [`m-avatar--${props.variant}`]: true
79
+ }
80
+ });
81
+
82
+ const handleImageLoadError = (e: Event) => {
83
+ imageExists.value = false;
84
+ emit('error', e);
85
+ };
86
+
87
+ onMounted(() => {
88
+ sizeValue.value = groupSize.value || props.size;
89
+ });
90
+
91
+ return {
92
+ avatar,
93
+ avatarGroup,
94
+ classes,
95
+ customSize,
96
+ imageExists,
97
+
98
+ handleImageLoadError
99
+ }
100
+ }
101
+ })
102
+ </script>
@@ -0,0 +1,8 @@
1
+ .m-avatar-group .m-avatar:not(:last-child) {
2
+ margin-right: calc(0px - 10px);
3
+ }
4
+
5
+
6
+ .m-avatar-group .m-avatar {
7
+ border: 2px solid var(--white);
8
+ }
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="m-avatar-group">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { defineComponent, provide } from 'vue';
9
+
10
+
11
+ export default defineComponent({
12
+ name: "MAvatarGroup",
13
+ props: {
14
+ max: {
15
+ type: Number,
16
+ default: 5
17
+ },
18
+ size: {
19
+ type: [Number, String],
20
+ default: 'md'
21
+ }
22
+ },
23
+ setup(props) {
24
+
25
+ provide('avatarGroup', props);
26
+
27
+ return {
28
+ props
29
+ }
30
+ }
31
+ })
32
+ </script>
@@ -0,0 +1,46 @@
1
+ .m-breadcrumbs {
2
+ display: flex;
3
+ list-style: none;
4
+ margin: 0;
5
+ padding: 4px;
6
+ font-variant-numeric: tabular-nums;
7
+ align-items: center;
8
+ position: relative;
9
+ }
10
+
11
+ .m-breadcrumbs__item:last-child .m-breadcrumbs__item-separator {
12
+ display: none;
13
+ }
14
+
15
+ .m-breadcrumbs__item {
16
+ display: flex;
17
+ align-items: center;
18
+ outline: none;
19
+ cursor: pointer;
20
+ color: var(--gray-600);
21
+ }
22
+
23
+ .m-breadcrumbs__link {
24
+ padding: 4px 10px;
25
+ font-size: 14px;
26
+ border-radius: 4px;
27
+ background-color: transparent;
28
+ text-decoration: none;
29
+ outline: none;
30
+ 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);
31
+ }
32
+
33
+ .m-breadcrumbs__link:hover {
34
+ color: var(--blue-dark);
35
+ background-color: var(--gray-100);
36
+ }
37
+
38
+ .m-breadcrumbs__item-separator {
39
+ display: inline-flex;
40
+ padding: 0 6px;
41
+ cursor: default;
42
+ user-select: none;
43
+ color: var(--gray-300);
44
+ /*font-style: italic;*/
45
+ /*border-right: 2px solid transparent;*/
46
+ }
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <ol :class="classes">
3
+ <slot />
4
+ </ol>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import {
9
+ defineComponent, reactive, computed, provide, toRef
10
+ } from "vue";
11
+
12
+ interface BreadcrumbState {
13
+ separator: string,
14
+ refreshItems: () => void
15
+ }
16
+
17
+ export default defineComponent({
18
+ name: "Breadcrumb",
19
+ components: {
20
+ BreadcrumbItem: () => import("../breadcrumbitem/BreadcrumbItem.vue")
21
+ },
22
+ props: {
23
+ seperator: {
24
+ type: String,
25
+ default: "/"
26
+ }
27
+ },
28
+ setup(props) {
29
+ const refreshItems = () => { };
30
+
31
+ const state: BreadcrumbState = reactive({
32
+ separator: toRef(props, 'seperator'),
33
+ refreshItems
34
+ });
35
+
36
+ const classes = computed(() => {
37
+ return {
38
+ 'm-breadcrumbs': true
39
+ }
40
+ });
41
+
42
+ provide('breadcrumb', state);
43
+
44
+ return {
45
+ props,
46
+ refreshItems,
47
+ classes
48
+ }
49
+ }
50
+ })
51
+ </script>
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <li class="m-breadcrumbs__item">
3
+ <a tabindex="0" @click="handleClick" class="m-breadcrumbs__link">
4
+ <slot>{{ label }}</slot>
5
+ </a>
6
+ <span class="m-breadcrumbs__item-separator" role="separator">
7
+ {{ separator }}
8
+ </span>
9
+ </li>
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ import {
14
+ defineComponent, ref, reactive, watch, inject, onBeforeUnmount
15
+ } from "vue";
16
+
17
+ interface BreadcrumbItemState {
18
+ label: string | number;
19
+ }
20
+
21
+ export default defineComponent({
22
+ name: 'BreadcrumbItem',
23
+ props: {
24
+ label: {
25
+ type: [String, Number],
26
+ default: null
27
+ }
28
+ },
29
+ setup(props) {
30
+ const breadcrumbState = inject("breadcrumb");
31
+
32
+ const label = ref(props.label);
33
+ const separator = ref("/");
34
+
35
+ watch(
36
+ () => props.label,
37
+ value => {
38
+ label.value = value;
39
+ // @ts-ignore
40
+ breadcrumbState?.refreshItems()
41
+ }
42
+ )
43
+
44
+ if (breadcrumbState) {
45
+ const state: BreadcrumbItemState = reactive({
46
+ label: label
47
+ })
48
+
49
+ // @ts-ignore
50
+ watch(() => breadcrumbState.separator, value => separator.value = value, { immediate: true });
51
+
52
+ onBeforeUnmount(() => { });
53
+ }
54
+
55
+ const handleClick = () => { };
56
+
57
+ return {
58
+ label,
59
+ separator,
60
+
61
+ handleClick
62
+ }
63
+ }
64
+ })
65
+ </script>
66
+
@@ -0,0 +1 @@
1
+ export { default as MBreadcrumbItem } from './MBreadcrumbItem.vue';