@veritree/ui 0.20.0 → 0.21.0-0

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 (79) hide show
  1. package/.prettierrc +2 -1
  2. package/index.js +64 -68
  3. package/mixins/floating-ui-content.js +81 -0
  4. package/mixins/floating-ui-item.js +266 -0
  5. package/mixins/floating-ui.js +67 -0
  6. package/mixins/form-control-icon.js +53 -0
  7. package/mixins/form-control.js +71 -0
  8. package/nuxt.js +30 -23
  9. package/package.json +9 -4
  10. package/src/components/Alert/VTAlert.vue +55 -14
  11. package/src/components/Avatar/VTAvatar.vue +32 -29
  12. package/src/components/Button/VTButton.vue +20 -7
  13. package/src/components/Checkbox/VTCheckbox.vue +134 -0
  14. package/src/components/Checkbox/VTCheckboxLabel.vue +3 -0
  15. package/src/components/Checkbox/VTCheckboxText.vue +20 -0
  16. package/src/components/Dialog/VTDialog.vue +22 -32
  17. package/src/components/Dialog/VTDialogClose.vue +19 -25
  18. package/src/components/Dialog/VTDialogContent.vue +24 -19
  19. package/src/components/Dialog/VTDialogFooter.vue +11 -16
  20. package/src/components/Dialog/VTDialogHeader.vue +16 -18
  21. package/src/components/Dialog/VTDialogMain.vue +11 -18
  22. package/src/components/Dialog/VTDialogOverlay.vue +14 -18
  23. package/src/components/Dialog/VTDialogTitle.vue +10 -7
  24. package/src/components/Disclosure/VTDisclosureContent.vue +1 -1
  25. package/src/components/Disclosure/VTDisclosureDetails.vue +1 -1
  26. package/src/components/Disclosure/VTDisclosureHeader.vue +2 -2
  27. package/src/components/Disclosure/VTDisclosureIcon.vue +1 -1
  28. package/src/components/Drawer/VTDrawer.vue +6 -15
  29. package/src/components/Drawer/VTDrawerClose.vue +5 -5
  30. package/src/components/Drawer/VTDrawerContent.vue +8 -8
  31. package/src/components/Drawer/VTDrawerFooter.vue +3 -3
  32. package/src/components/Drawer/VTDrawerHeader.vue +4 -4
  33. package/src/components/Drawer/VTDrawerMain.vue +5 -5
  34. package/src/components/Drawer/VTDrawerOverlay.vue +6 -6
  35. package/src/components/Drawer/VTDrawerTitle.vue +5 -5
  36. package/src/components/DropdownMenu/VTDropdownMenu.vue +45 -28
  37. package/src/components/DropdownMenu/VTDropdownMenuContent.vue +29 -64
  38. package/src/components/DropdownMenu/VTDropdownMenuDivider.vue +8 -14
  39. package/src/components/DropdownMenu/VTDropdownMenuItem.vue +11 -124
  40. package/src/components/DropdownMenu/VTDropdownMenuLabel.vue +3 -12
  41. package/src/components/DropdownMenu/VTDropdownMenuTrigger.vue +91 -121
  42. package/src/components/Form/VTFormFeedback.vue +39 -22
  43. package/src/components/Form/VTFormGroup.vue +5 -7
  44. package/src/components/Form/VTFormLabel.vue +22 -0
  45. package/src/components/Form/VTFormRow.vue +5 -0
  46. package/src/components/Form/VTInput.vue +40 -0
  47. package/src/components/Form/VTInputIcon.vue +35 -0
  48. package/src/components/Form/VTInputPassword.vue +55 -0
  49. package/src/components/Form/VTTextarea.vue +22 -0
  50. package/src/components/Listbox/VTListbox.vue +122 -50
  51. package/src/components/Listbox/VTListboxContent.vue +20 -116
  52. package/src/components/Listbox/VTListboxItem.vue +115 -166
  53. package/src/components/Listbox/VTListboxLabel.vue +3 -14
  54. package/src/components/Listbox/VTListboxList.vue +10 -40
  55. package/src/components/Listbox/VTListboxSearch.vue +76 -68
  56. package/src/components/Listbox/VTListboxTrigger.vue +75 -86
  57. package/src/components/Popover/VTPopover.vue +42 -29
  58. package/src/components/Popover/VTPopoverContent.vue +24 -59
  59. package/src/components/Popover/VTPopoverDivider.vue +4 -11
  60. package/src/components/Popover/VTPopoverItem.vue +21 -14
  61. package/src/components/Popover/VTPopoverTrigger.vue +126 -21
  62. package/src/components/ProgressBar/VTProgressBar.vue +21 -3
  63. package/src/components/Skeleton/VTSkeleton.vue +11 -0
  64. package/src/components/Skeleton/VTSkeletonItem.vue +9 -0
  65. package/src/components/Tabs/VTTab.vue +4 -3
  66. package/src/components/Tabs/VTTabGroup.vue +9 -7
  67. package/src/components/Tabs/VTTabPanel.vue +4 -5
  68. package/src/components/Tooltip/VTTooltip.vue +65 -0
  69. package/src/components/Tooltip/VTTooltipContent.vue +59 -0
  70. package/src/components/Tooltip/VTTooltipTrigger.vue +98 -0
  71. package/src/components/Transitions/FadeInOut.vue +2 -2
  72. package/src/components/Utils/FloatingUi.vue +93 -0
  73. package/package-lock.json +0 -13
  74. package/src/components/Input/VTInput.vue +0 -82
  75. package/src/components/Input/VTInputDate.vue +0 -36
  76. package/src/components/Input/VTInputFile.vue +0 -60
  77. package/src/components/Input/VTInputUpload.vue +0 -54
  78. package/src/components/Modal/VTModal.vue +0 -69
  79. package/src/utils/genId.js +0 -13
@@ -1,38 +1,34 @@
1
1
  <template>
2
- <Portal>
2
+ <Teleport to="body">
3
3
  <div
4
- v-if="visible"
4
+ v-if="modelValue"
5
5
  :id="id"
6
- :class="{
7
- Dialog: headless,
8
- 'fixed inset-0 z-50 grid grid-cols-1 grid-rows-1 p-4 md:p-8': !headless,
9
- }"
6
+ :class="
7
+ headless
8
+ ? 'dialog'
9
+ : `fixed inset-0 z-50 grid grid-cols-1 grid-rows-1 ${classes}`
10
+ "
10
11
  aria-modal="true"
12
+ v-bind="$attrs"
11
13
  @click="onClick"
12
14
  >
13
15
  <slot></slot>
14
16
  </div>
15
- </Portal>
17
+ </Teleport>
16
18
  </template>
17
19
 
18
20
  <script>
19
- import { Portal } from '@linusborg/vue-simple-portal';
20
21
  import { genId } from '../../utils/ids';
21
22
 
22
23
  export default {
23
24
  name: 'VTDialog',
24
25
 
25
- components: {
26
- Portal,
27
- },
26
+ inheritAttrs: false,
28
27
 
29
28
  provide() {
30
29
  return {
31
- api: () => {
32
- const id = this.id;
30
+ apiDialog: () => {
33
31
  const componentId = this.componentId;
34
- const isDark = this.dark;
35
- const isHeadless = this.headless;
36
32
 
37
33
  const registerContent = (content) => {
38
34
  if (!content) return;
@@ -48,26 +44,22 @@ export default {
48
44
 
49
45
  const emit = () => this.emit();
50
46
 
47
+ const full = this.full;
48
+
51
49
  return {
52
- id,
53
50
  componentId,
54
- isDark,
55
- isHeadless,
56
51
  hide,
57
52
  emit,
58
53
  registerContent,
59
54
  registerOverlay,
55
+ full,
60
56
  };
61
57
  },
62
58
  };
63
59
  },
64
60
 
65
- model: {
66
- prop: 'visible',
67
- },
68
-
69
61
  props: {
70
- visible: {
62
+ modelValue: {
71
63
  type: Boolean,
72
64
  default: false,
73
65
  },
@@ -75,7 +67,7 @@ export default {
75
67
  type: Boolean,
76
68
  default: false,
77
69
  },
78
- dark: {
70
+ full: {
79
71
  type: Boolean,
80
72
  default: false,
81
73
  },
@@ -94,6 +86,10 @@ export default {
94
86
  return `dialog-${this.componentId}`;
95
87
  },
96
88
 
89
+ classes() {
90
+ return !this.full ? 'p-4 md:p-6' : '';
91
+ },
92
+
97
93
  hasContent() {
98
94
  return this.content !== null;
99
95
  },
@@ -103,15 +99,9 @@ export default {
103
99
  },
104
100
  },
105
101
 
106
- watch: {
107
- visible(isVisible) {
108
- if (!isVisible) this.hide();
109
- },
110
- },
111
-
112
102
  mounted() {
113
103
  if (this.hasContent) this.content.show();
114
- if (this.hasOverlay) this.overlay.show();
104
+ // if (this.hasOverlay) this.overlay.show();
115
105
  },
116
106
 
117
107
  methods: {
@@ -122,7 +112,7 @@ export default {
122
112
 
123
113
  emit() {
124
114
  this.$nextTick(() => {
125
- this.$emit('input', false);
115
+ this.$emit('update:modelValue', false);
126
116
  this.$emit('hidden');
127
117
  });
128
118
  },
@@ -2,48 +2,42 @@
2
2
  <VTButton
3
3
  variant="icon"
4
4
  :id="id"
5
- :class="{
6
- 'Dialog-close': headless,
7
- }"
8
- :theme="theme"
5
+ :class="[headless ? 'dialog-close' : null]"
9
6
  @click.prevent="hide"
10
- ><slot><IconClose class="h-5 w-5" /></slot
11
- ></VTButton>
7
+ >
8
+ <slot>
9
+ <IconClose class="h-4 w-4" />
10
+ </slot>
11
+ </VTButton>
12
12
  </template>
13
13
 
14
14
  <script>
15
- import { IconClose } from "@veritree/icons";
16
- import VTButton from "../Button/VTButton.vue";
15
+ import { IconClose } from '@veritree/icons';
16
+ import VTButton from '../Button/VTButton.vue';
17
17
 
18
18
  export default {
19
- name: "VTDialogClose",
19
+ name: 'VTDialogClose',
20
20
 
21
21
  components: { IconClose, VTButton },
22
22
 
23
- inject: ["api"],
23
+ inject: ['apiDialog'],
24
24
 
25
- computed: {
26
- id() {
27
- return `dialog-close-${this.api().componentId}`;
28
- },
29
-
30
- dark() {
31
- return this.api().isDark;
32
- },
33
-
34
- headless() {
35
- return this.api().isHeadless;
25
+ props: {
26
+ headless: {
27
+ type: Boolean,
28
+ default: false,
36
29
  },
30
+ },
37
31
 
38
- // temporary till button theme is implemented
39
- theme() {
40
- return this.dark ? "dark" : null;
32
+ computed: {
33
+ id() {
34
+ return `dialog-close-${this.apiDialog().componentId}`;
41
35
  },
42
36
  },
43
37
 
44
38
  methods: {
45
39
  hide() {
46
- this.api().hide();
40
+ this.apiDialog().hide();
47
41
  },
48
42
  },
49
43
  };
@@ -1,25 +1,23 @@
1
1
  <template>
2
2
  <transition
3
3
  enter-active-class="duration-300 ease-out"
4
- enter-class="translate-y-[50px] opacity-0"
4
+ enter-from-class="translate-y-[50px] opacity-0"
5
5
  enter-to-class="translate-y-0 opacity-100"
6
6
  leave-active-class="duration-300 ease-out"
7
- leave-class="translate-y-0 opacity-100"
7
+ leave-from-class="translate-y-0 opacity-100"
8
8
  leave-to-class="translate-y-[50px] opacity-0"
9
9
  @after-leave="hideDialog"
10
10
  >
11
11
  <div
12
12
  v-show="visible"
13
13
  :id="id"
14
- :class="{
15
- 'Dialog-content': headless,
16
- 'relative m-auto max-h-full max-w-full overflow-auto rounded p-6 focus:outline-none sm:p-10 flex flex-col':
17
- !headless,
18
- 'bg-white': !dark,
19
- 'bg-fd-600': dark,
20
- }"
14
+ :class="
15
+ headless
16
+ ? 'dialog-content'
17
+ : `relative m-auto flex flex-col overflow-auto rounded bg-white p-4 focus:outline-none lg:p-6 ${classes}`
18
+ "
21
19
  tabindex="-1"
22
- @keyup.esc="hide"
20
+ @keydown.esc.stop="hide"
23
21
  >
24
22
  <slot></slot>
25
23
  </div>
@@ -28,9 +26,16 @@
28
26
 
29
27
  <script>
30
28
  export default {
31
- name: "VTDialogContent",
29
+ name: 'VTDialogContent',
32
30
 
33
- inject: ["api"],
31
+ inject: ['apiDialog'],
32
+
33
+ props: {
34
+ headless: {
35
+ type: Boolean,
36
+ default: false,
37
+ },
38
+ },
34
39
 
35
40
  data() {
36
41
  return {
@@ -40,20 +45,20 @@ export default {
40
45
 
41
46
  computed: {
42
47
  id() {
43
- return `dialog-content-${this.api().componentId}`;
48
+ return `dialog-content-${this.apiDialog().componentId}`;
44
49
  },
45
50
 
46
- dark() {
47
- return this.api().isDark;
51
+ classes() {
52
+ return this.full ? 'h-screen w-screen' : 'max-h-full max-w-full';
48
53
  },
49
54
 
50
- headless() {
51
- return this.api().isHeadless;
55
+ full() {
56
+ return this.apiDialog().full;
52
57
  },
53
58
  },
54
59
 
55
60
  mounted() {
56
- this.api().registerContent(this);
61
+ this.apiDialog().registerContent(this);
57
62
  this.show();
58
63
 
59
64
  this.$nextTick(() => this.$el.focus());
@@ -69,7 +74,7 @@ export default {
69
74
  },
70
75
 
71
76
  hideDialog() {
72
- this.api().emit();
77
+ this.apiDialog().emit();
73
78
  },
74
79
  },
75
80
  };
@@ -1,7 +1,11 @@
1
1
  <template>
2
2
  <component
3
3
  :is="as"
4
- :class="{ 'Dialog-footer': headless, 'w-full': !headless }"
4
+ :class="[
5
+ headless
6
+ ? 'dialog-footer'
7
+ : '-mx-4 -mb-4 flex items-center justify-between gap-x-3 p-4 md:-mx-6 md:-mb-6 md:p-6',
8
+ ]"
5
9
  >
6
10
  <slot></slot>
7
11
  </component>
@@ -9,24 +13,15 @@
9
13
 
10
14
  <script>
11
15
  export default {
12
- name: "VTDialogFooter",
13
-
14
- inject: ["api"],
15
-
16
+ name: 'VTDialogFooter',
16
17
  props: {
18
+ headless: {
19
+ type: Boolean,
20
+ default: false,
21
+ },
17
22
  as: {
18
23
  type: String,
19
- default: "footer",
20
- },
21
- },
22
-
23
- computed: {
24
- dark() {
25
- return this.api().isDark;
26
- },
27
-
28
- headless() {
29
- return this.api().isHeadless;
24
+ default: 'footer',
30
25
  },
31
26
  },
32
27
  };
@@ -2,10 +2,12 @@
2
2
  <component
3
3
  :is="as"
4
4
  :id="id"
5
- :class="{
6
- 'Dialog-header': headless,
7
- 'mb-8 flex justify-between gap-x-3 items-center w-full': !headless,
8
- }"
5
+ :class="[
6
+ headless
7
+ ? 'dialog-header'
8
+ : '-mx-4 -mt-4 flex items-center justify-between gap-x-3 p-4 md:-mx-6 md:-mt-6 md:p-6',
9
+ ]"
10
+ @click.stop
9
11
  >
10
12
  <slot></slot>
11
13
  </component>
@@ -13,28 +15,24 @@
13
15
 
14
16
  <script>
15
17
  export default {
16
- name: "VTDialogHeader",
18
+ name: 'VTDialogHeader',
17
19
 
18
- inject: ["api"],
20
+ inject: ['apiDialog'],
19
21
 
20
22
  props: {
23
+ headless: {
24
+ type: Boolean,
25
+ default: false,
26
+ },
21
27
  as: {
22
28
  type: String,
23
- default: "header",
29
+ default: 'header',
24
30
  },
25
31
  },
26
32
 
27
33
  computed: {
28
- dark() {
29
- return this.api().isDark;
30
- },
31
-
32
- headless() {
33
- return this.api().isHeadless;
34
- },
35
-
36
34
  id() {
37
- return `${this.api().id}-header`;
35
+ return `dialog-header-${this.apiDialog().componentId}`;
38
36
  },
39
37
  },
40
38
 
@@ -45,10 +43,10 @@ export default {
45
43
  methods: {
46
44
  // In here because if there is no header, the dialog will not be labelled by
47
45
  setDialogLabelledby() {
48
- const dialog = document.getElementById(this.api().id);
46
+ const dialog = document.getElementById(this.apiDialog().id);
49
47
 
50
48
  if (dialog) {
51
- dialog.setAttribute("aria-labelledby", this.id);
49
+ dialog.setAttribute('aria-labelledby', this.id);
52
50
  }
53
51
  },
54
52
  },
@@ -2,10 +2,7 @@
2
2
  <component
3
3
  :is="as"
4
4
  :id="id"
5
- :class="{
6
- 'Dialog-body': headless,
7
- 'flex-1 w-full h-full overflow-y-auto': !headless,
8
- }"
5
+ :class="[headless ? 'dialog-body' : 'h-full flex-1 overflow-y-auto']"
9
6
  >
10
7
  <slot></slot>
11
8
  </component>
@@ -13,28 +10,24 @@
13
10
 
14
11
  <script>
15
12
  export default {
16
- name: "VTDialogMain",
13
+ name: 'VTDialogMain',
17
14
 
18
- inject: ["api"],
15
+ inject: ['apiDialog'],
19
16
 
20
17
  props: {
18
+ headless: {
19
+ type: Boolean,
20
+ default: false,
21
+ },
21
22
  as: {
22
23
  type: String,
23
- default: "main",
24
+ default: 'main',
24
25
  },
25
26
  },
26
27
 
27
28
  computed: {
28
- dark() {
29
- return this.api().isDark;
30
- },
31
-
32
- headless() {
33
- return this.api().isHeadless;
34
- },
35
-
36
29
  id() {
37
- return `${this.api().id}-desc`;
30
+ return `dialog-main-${this.apiDialog().componentId}`;
38
31
  },
39
32
  },
40
33
 
@@ -45,10 +38,10 @@ export default {
45
38
  methods: {
46
39
  // In here because if there is no body, the dialog will not be described by
47
40
  setDialogDescribedby() {
48
- const dialog = document.getElementById(this.api().id);
41
+ const dialog = document.getElementById(this.apiDialog().id);
49
42
 
50
43
  if (dialog) {
51
- dialog.setAttribute("aria-describedby", this.id);
44
+ dialog.setAttribute('aria-describedby', this.id);
52
45
  }
53
46
  },
54
47
  },
@@ -3,25 +3,29 @@
3
3
  <div
4
4
  v-if="visible"
5
5
  :id="id"
6
- :class="{
7
- 'Dialog-overlay': headless,
8
- 'fixed inset-0 bg-fd-450/80': !headless,
9
- }"
10
- ></div>
6
+ :class="[headless ? 'dialog-overlay' : 'bg-primary-200/80 fixed inset-0']"
7
+ />
11
8
  </FadeInOut>
12
9
  </template>
13
10
 
14
11
  <script>
15
- import FadeInOut from "../Transitions/FadeInOut.vue";
12
+ import FadeInOut from '../Transitions/FadeInOut.vue';
16
13
 
17
14
  export default {
18
- name: "VTDialogOverlay",
15
+ name: 'VTDialogOverlay',
19
16
 
20
17
  components: {
21
18
  FadeInOut,
22
19
  },
23
20
 
24
- inject: ["api"],
21
+ inject: ['apiDialog'],
22
+
23
+ props: {
24
+ headless: {
25
+ type: Boolean,
26
+ default: false,
27
+ },
28
+ },
25
29
 
26
30
  data() {
27
31
  return {
@@ -31,21 +35,13 @@ export default {
31
35
 
32
36
  computed: {
33
37
  id() {
34
- return `dialog-overlay-${this.api().componentId}`;
35
- },
36
-
37
- dark() {
38
- return this.api().isDark;
39
- },
40
-
41
- headless() {
42
- return this.api().isHeadless;
38
+ return `dialog-overlay-${this.apiDialog().componentId}`;
43
39
  },
44
40
  },
45
41
 
46
42
  mounted() {
47
43
  this.visible = true;
48
- this.api().registerOverlay(this);
44
+ this.apiDialog().registerOverlay(this);
49
45
  },
50
46
 
51
47
  methods: {
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <span
3
3
  :id="id"
4
- :class="{ 'Dialog-header': headless, 'text-2xl font-semibold': !headless }"
4
+ :class="[headless ? 'dialog-header' : 'text-2xl font-semibold']"
5
5
  >
6
6
  <slot></slot
7
7
  ></span>
@@ -9,17 +9,20 @@
9
9
 
10
10
  <script>
11
11
  export default {
12
- name: "VTDialogTitle",
12
+ name: 'VTDialogTitle',
13
13
 
14
- inject: ["api"],
14
+ inject: ['apiDialog'],
15
15
 
16
- computed: {
17
- headless() {
18
- return this.api().isHeadless;
16
+ props: {
17
+ headless: {
18
+ type: Boolean,
19
+ default: false,
19
20
  },
21
+ },
20
22
 
23
+ computed: {
21
24
  id() {
22
- return `${this.api().id}-title`;
25
+ return `dialog-overlay-${this.apiDialog().componentId}`;
23
26
  },
24
27
  },
25
28
  };
@@ -59,7 +59,7 @@ export default {
59
59
  this.apiDisclosure().register('contents', content);
60
60
  },
61
61
 
62
- beforeDestroy() {
62
+ beforeUnmount() {
63
63
  this.apiDisclosure().unregister('contents', this.id);
64
64
  },
65
65
 
@@ -63,7 +63,7 @@ export default {
63
63
  this.apiDisclosure().register('details', detail);
64
64
  },
65
65
 
66
- beforeDestroy() {
66
+ beforeUnmount() {
67
67
  this.apiDisclosure().unregister('details', this.id);
68
68
  },
69
69
 
@@ -4,7 +4,7 @@
4
4
  :class="[
5
5
  headless
6
6
  ? 'details-header'
7
- : 'flex cursor-pointer justify-between gap-3 text-body font-semibold',
7
+ : 'text-body flex cursor-pointer justify-between gap-3 font-semibold',
8
8
  ]"
9
9
  :aria-controls="ariaControls"
10
10
  :aria-expanded="String(ariaExpanded)"
@@ -78,7 +78,7 @@ export default {
78
78
  this.apiDisclosure().register('headers', header);
79
79
  },
80
80
 
81
- beforeDestroy() {
81
+ beforeUnmount() {
82
82
  this.apiDisclosure().unregister('headers', this.id);
83
83
  },
84
84
 
@@ -50,7 +50,7 @@ export default {
50
50
  this.apiDisclosure().register('icons', icon);
51
51
  },
52
52
 
53
- beforeDestroy() {
53
+ beforeUnmount() {
54
54
  this.apiDisclosure().unregister('icons', this.id);
55
55
  },
56
56
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <Portal>
2
+ <Teleport to="body">
3
3
  <div
4
- v-if="visible"
4
+ v-if="modelValue"
5
5
  :id="id"
6
6
  :class="{ Drawer: headless, 'fixed inset-0 z-50 h-screen': !headless }"
7
7
  aria-modal="true"
@@ -9,23 +9,18 @@
9
9
  >
10
10
  <slot></slot>
11
11
  </div>
12
- </Portal>
12
+ </Teleport>
13
13
  </template>
14
14
 
15
15
  <script>
16
- import { Portal } from '@linusborg/vue-simple-portal';
17
16
  import { genId } from '../../utils/ids';
18
17
 
19
18
  export default {
20
19
  name: 'VTDrawer',
21
20
 
22
- components: {
23
- Portal,
24
- },
25
-
26
21
  provide() {
27
22
  return {
28
- api: () => {
23
+ apiDrawer: () => {
29
24
  const id = this.id;
30
25
  const isDark = this.dark;
31
26
  const isHeadless = this.headless;
@@ -58,12 +53,8 @@ export default {
58
53
  };
59
54
  },
60
55
 
61
- model: {
62
- prop: 'visible',
63
- },
64
-
65
56
  props: {
66
- visible: {
57
+ modelValue: {
67
58
  type: Boolean,
68
59
  default: false,
69
60
  },
@@ -117,7 +108,7 @@ export default {
117
108
 
118
109
  emit() {
119
110
  this.$nextTick(() => {
120
- this.$emit('input', false);
111
+ this.$emit('update:modelValue', false);
121
112
  this.$emit('hidden');
122
113
  });
123
114
  },
@@ -20,19 +20,19 @@ export default {
20
20
 
21
21
  components: { IconLeft, VTButton },
22
22
 
23
- inject: ['api'],
23
+ inject: ['apiDrawer'],
24
24
 
25
25
  computed: {
26
26
  dark() {
27
- return this.api().isDark;
27
+ return this.apiDrawer().isDark;
28
28
  },
29
29
 
30
30
  headless() {
31
- return this.api().isHeadless;
31
+ return this.apiDrawer().isHeadless;
32
32
  },
33
33
 
34
34
  right() {
35
- return this.api().isRight;
35
+ return this.apiDrawer().isRight;
36
36
  },
37
37
 
38
38
  // temporary till button theme is implemented
@@ -43,7 +43,7 @@ export default {
43
43
 
44
44
  methods: {
45
45
  hide() {
46
- this.api().hide();
46
+ this.apiDrawer().hide();
47
47
  },
48
48
  },
49
49
  };