arvue-ui 0.5.0 → 0.7.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 (156) hide show
  1. package/dist/all.css +1 -1
  2. package/dist/aspect-ratio/aspectRatio.js +24 -0
  3. package/dist/aspect-ratio/aspectRatio.js.map +1 -0
  4. package/dist/autocomplete/autocomplete.js +1 -1
  5. package/dist/autocomplete/autocompleteContent.js +38 -13
  6. package/dist/autocomplete/autocompleteContent.js.map +1 -1
  7. package/dist/autocomplete/autocompleteEmpty.js +1 -1
  8. package/dist/autocomplete/autocompleteInput.js +1 -1
  9. package/dist/autocomplete/autocompleteItem.js +3 -1
  10. package/dist/autocomplete/autocompleteItem.js.map +1 -1
  11. package/dist/autocomplete/autocompleteLabel.js +1 -1
  12. package/dist/autocomplete/autocompleteSeparator.js +1 -1
  13. package/dist/combobox/combobox.js +1 -1
  14. package/dist/combobox/comboboxContent.js +38 -13
  15. package/dist/combobox/comboboxContent.js.map +1 -1
  16. package/dist/combobox/comboboxEmpty.js +1 -1
  17. package/dist/combobox/comboboxInput.js +1 -1
  18. package/dist/combobox/comboboxItem.js +3 -1
  19. package/dist/combobox/comboboxItem.js.map +1 -1
  20. package/dist/combobox/comboboxLabel.js +1 -1
  21. package/dist/combobox/comboboxSeparator.js +1 -1
  22. package/dist/dialog/dialogContent.js +1 -1
  23. package/dist/dialog/dialogDescription.js +1 -1
  24. package/dist/dialog/dialogFooter.js +1 -1
  25. package/dist/dialog/dialogHeader.js +1 -1
  26. package/dist/dialog/dialogOverlay.js +1 -1
  27. package/dist/dialog/dialogTitle.js +1 -1
  28. package/dist/drawer/drawerContent.js +1 -1
  29. package/dist/drawer/drawerDescription.js +1 -1
  30. package/dist/drawer/drawerFooter.js +1 -1
  31. package/dist/drawer/drawerHeader.js +1 -1
  32. package/dist/drawer/drawerOverlay.js +1 -1
  33. package/dist/drawer/drawerTitle.js +1 -1
  34. package/dist/dropdown-menu/dropdownMenu.js +26 -0
  35. package/dist/dropdown-menu/dropdownMenu.js.map +1 -0
  36. package/dist/dropdown-menu/dropdownMenuCheckboxItem.js +42 -0
  37. package/dist/dropdown-menu/dropdownMenuCheckboxItem.js.map +1 -0
  38. package/dist/dropdown-menu/dropdownMenuContent.js +92 -0
  39. package/dist/dropdown-menu/dropdownMenuContent.js.map +1 -0
  40. package/dist/{autocomplete/autocompleteArrow.js → dropdown-menu/dropdownMenuGroup.js} +5 -8
  41. package/dist/dropdown-menu/dropdownMenuGroup.js.map +1 -0
  42. package/dist/dropdown-menu/dropdownMenuItem.js +36 -0
  43. package/dist/dropdown-menu/dropdownMenuItem.js.map +1 -0
  44. package/dist/dropdown-menu/dropdownMenuLabel.js +34 -0
  45. package/dist/dropdown-menu/dropdownMenuLabel.js.map +1 -0
  46. package/dist/dropdown-menu/dropdownMenuPortal.js +25 -0
  47. package/dist/dropdown-menu/dropdownMenuPortal.js.map +1 -0
  48. package/dist/dropdown-menu/dropdownMenuRadioGroup.js +25 -0
  49. package/dist/dropdown-menu/dropdownMenuRadioGroup.js.map +1 -0
  50. package/dist/dropdown-menu/dropdownMenuRadioItem.js +42 -0
  51. package/dist/dropdown-menu/dropdownMenuRadioItem.js.map +1 -0
  52. package/dist/dropdown-menu/dropdownMenuSeparator.js +30 -0
  53. package/dist/dropdown-menu/dropdownMenuSeparator.js.map +1 -0
  54. package/dist/dropdown-menu/dropdownMenuShortcut.js +33 -0
  55. package/dist/dropdown-menu/dropdownMenuShortcut.js.map +1 -0
  56. package/dist/dropdown-menu/dropdownMenuSub.js +24 -0
  57. package/dist/dropdown-menu/dropdownMenuSub.js.map +1 -0
  58. package/dist/dropdown-menu/dropdownMenuSubContent.js +92 -0
  59. package/dist/dropdown-menu/dropdownMenuSubContent.js.map +1 -0
  60. package/dist/dropdown-menu/dropdownMenuSubTrigger.js +36 -0
  61. package/dist/dropdown-menu/dropdownMenuSubTrigger.js.map +1 -0
  62. package/dist/dropdown-menu/dropdownMenuTrigger.js +24 -0
  63. package/dist/dropdown-menu/dropdownMenuTrigger.js.map +1 -0
  64. package/dist/index.d.ts +579 -163
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +40 -14
  67. package/dist/index.js.map +1 -1
  68. package/dist/select/select.js +37 -0
  69. package/dist/select/select.js.map +1 -0
  70. package/dist/select/selectContent.js +101 -0
  71. package/dist/select/selectContent.js.map +1 -0
  72. package/dist/select/selectGroup.js +23 -0
  73. package/dist/select/selectGroup.js.map +1 -0
  74. package/dist/select/selectItem.js +43 -0
  75. package/dist/select/selectItem.js.map +1 -0
  76. package/dist/select/selectItemText.js +23 -0
  77. package/dist/select/selectItemText.js.map +1 -0
  78. package/dist/select/selectLabel.js +34 -0
  79. package/dist/select/selectLabel.js.map +1 -0
  80. package/dist/select/selectRootPatch.js +24 -0
  81. package/dist/select/selectRootPatch.js.map +1 -0
  82. package/dist/select/selectScrollDownButton.js +33 -0
  83. package/dist/select/selectScrollDownButton.js.map +1 -0
  84. package/dist/select/selectScrollUpButton.js +33 -0
  85. package/dist/select/selectScrollUpButton.js.map +1 -0
  86. package/dist/select/selectSeparator.js +30 -0
  87. package/dist/select/selectSeparator.js.map +1 -0
  88. package/dist/select/selectTrigger.js +41 -0
  89. package/dist/select/selectTrigger.js.map +1 -0
  90. package/dist/select/selectValue.js +34 -0
  91. package/dist/select/selectValue.js.map +1 -0
  92. package/dist/sheet/sheetContent.js +1 -1
  93. package/dist/sheet/sheetFooter.js +1 -1
  94. package/dist/sheet/sheetHeader.js +1 -1
  95. package/dist/style.css +34 -0
  96. package/package.json +1 -1
  97. package/src/aspect-ratio/AspectRatio.vue +20 -0
  98. package/src/aspect-ratio/index.ts +4 -0
  99. package/src/autocomplete/AutocompleteContent.vue +38 -10
  100. package/src/autocomplete/AutocompleteItem.vue +4 -1
  101. package/src/autocomplete/autocomplete-content.css +5 -6
  102. package/src/autocomplete/autocomplete-label.css +4 -3
  103. package/src/autocomplete/index.ts +0 -4
  104. package/src/combobox/ComboboxContent.vue +38 -10
  105. package/src/combobox/ComboboxItem.vue +4 -1
  106. package/src/combobox/combobox-content.css +5 -6
  107. package/src/combobox/combobox-label.css +4 -3
  108. package/src/dropdown-menu/DropdownMenu.vue +24 -0
  109. package/src/dropdown-menu/DropdownMenuCheckboxItem.vue +47 -0
  110. package/src/dropdown-menu/DropdownMenuContent.vue +75 -0
  111. package/src/dropdown-menu/DropdownMenuGroup.vue +17 -0
  112. package/src/dropdown-menu/DropdownMenuItem.vue +38 -0
  113. package/src/dropdown-menu/DropdownMenuLabel.vue +37 -0
  114. package/src/dropdown-menu/DropdownMenuPortal.vue +17 -0
  115. package/src/dropdown-menu/DropdownMenuRadioGroup.vue +27 -0
  116. package/src/dropdown-menu/DropdownMenuRadioItem.vue +48 -0
  117. package/src/dropdown-menu/DropdownMenuSeparator.vue +29 -0
  118. package/src/dropdown-menu/DropdownMenuShortcut.vue +33 -0
  119. package/src/dropdown-menu/DropdownMenuSub.vue +31 -0
  120. package/src/dropdown-menu/DropdownMenuSubContent.vue +74 -0
  121. package/src/dropdown-menu/DropdownMenuSubTrigger.vue +41 -0
  122. package/src/dropdown-menu/DropdownMenuTrigger.vue +19 -0
  123. package/src/dropdown-menu/dropdown-menu-checkbox-item.css +33 -0
  124. package/src/dropdown-menu/dropdown-menu-content.css +9 -0
  125. package/src/dropdown-menu/dropdown-menu-item.css +27 -0
  126. package/src/dropdown-menu/dropdown-menu-label.css +12 -0
  127. package/src/dropdown-menu/dropdown-menu-radio-item.css +33 -0
  128. package/src/dropdown-menu/dropdown-menu-separator.css +5 -0
  129. package/src/dropdown-menu/dropdown-menu-shortcut.css +7 -0
  130. package/src/dropdown-menu/dropdown-menu-sub-content.css +8 -0
  131. package/src/dropdown-menu/dropdown-menu-sub-trigger.css +33 -0
  132. package/src/dropdown-menu/index.ts +66 -0
  133. package/src/index.ts +3 -0
  134. package/src/select/Select.vue +27 -0
  135. package/src/select/SelectContent.vue +77 -0
  136. package/src/select/SelectGroup.vue +17 -0
  137. package/src/select/SelectItem.vue +46 -0
  138. package/src/select/SelectItemText.vue +17 -0
  139. package/src/select/SelectLabel.vue +31 -0
  140. package/src/select/SelectRootPatch.vue +24 -0
  141. package/src/select/SelectScrollDownButton.vue +33 -0
  142. package/src/select/SelectScrollUpButton.vue +33 -0
  143. package/src/select/SelectSeparator.vue +29 -0
  144. package/src/select/SelectTrigger.vue +40 -0
  145. package/src/select/SelectValue.vue +33 -0
  146. package/src/select/index.ts +46 -0
  147. package/src/select/select-content.css +16 -0
  148. package/src/select/select-item.css +39 -0
  149. package/src/select/select-label.css +7 -0
  150. package/src/select/select-scroll-button.css +8 -0
  151. package/src/select/select-separator.css +5 -0
  152. package/src/select/select-trigger.css +71 -0
  153. package/src/select/select-value.css +6 -0
  154. package/src/sonner/sonner.css +0 -1
  155. package/dist/autocomplete/autocompleteArrow.js.map +0 -1
  156. package/src/autocomplete/AutocompleteArrow.vue +0 -17
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <DropdownMenuTrigger v-bind="forwardedProps">
3
+ <slot/>
4
+ </DropdownMenuTrigger>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { DropdownMenuTriggerProps as RekaDropdownMenuTriggerProps } from 'reka-ui'
9
+
10
+ export interface DropdownMenuTriggerProps extends RekaDropdownMenuTriggerProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { DropdownMenuTrigger, useForwardProps } from 'reka-ui'
15
+
16
+ const props = defineProps<DropdownMenuTriggerProps>()
17
+
18
+ const forwardedProps = useForwardProps(props)
19
+ </script>
@@ -0,0 +1,33 @@
1
+ .arvue-dropdown-menu-checkbox-item {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ font-size: 0.875rem;
7
+ outline: none;
8
+ user-select: none;
9
+ -webkit-user-select: none;
10
+ color: var(--menu-link-color);
11
+ padding: 0.5rem 0.75rem 0.5rem 1.5rem;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .arvue-dropdown-menu-checkbox-item:focus, .arvue-dropdown-menu-checkbox-item:hover{
16
+ background: var(--menu-background-color-hover);
17
+ color: var(--menu-link-color-hover);
18
+ }
19
+
20
+ .arvue-dropdown-menu-checkbox-item[data-disabled] {
21
+ pointer-events: none;
22
+ opacity: 0.5;
23
+ }
24
+
25
+ .arvue-dropdown-menu-checkbox-item .arvue-dropdown-menu-checkbox-item-indicator-wrapper {
26
+ pointer-events: none;
27
+ justify-content: center;
28
+ align-items: center;
29
+ font-size: 0.75rem;
30
+ display: flex;
31
+ position: absolute;
32
+ left: .5rem;
33
+ }
@@ -0,0 +1,9 @@
1
+ .arvue-dropdown-menu-content {
2
+ background: var(--background-color-blank);
3
+ border: 1px solid rgba(0, 0, 0, 0.1);
4
+ border-radius: 0.5rem; box-shadow: 0 0.25rem 1rem -0.25rem rgba(0, 0, 0, 0.1);
5
+ z-index: 110;
6
+ max-height: var(--reka-dropdown-menu-content-available-height);
7
+ transform-origin: var(--reka-dropdown-menu-content-transform-origin);
8
+ overflow: auto;
9
+ }
@@ -0,0 +1,27 @@
1
+ .arvue-dropdown-menu-item {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ font-size: 0.875rem;
7
+ outline: none;
8
+ user-select: none;
9
+ -webkit-user-select: none;
10
+ color: var(--menu-link-color);
11
+ padding: 0.5rem 0.75rem;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .arvue-dropdown-menu-item:focus, .arvue-dropdown-menu-item:hover {
16
+ background: var(--menu-background-color-hover);
17
+ color: var(--menu-link-color-hover);
18
+ }
19
+
20
+ .arvue-dropdown-menu-item[data-disabled] {
21
+ pointer-events: none;
22
+ opacity: 0.5;
23
+ }
24
+
25
+ .arvue-dropdown-menu-item.arvue-dropdown-menu-item-inset {
26
+ padding-left: 1.5rem;
27
+ }
@@ -0,0 +1,12 @@
1
+ .arvue-dropdown-menu-label {
2
+ color: var(--text-color-hint-strong);
3
+ padding: 0.5rem 0.75rem;
4
+ font-size: .75em;
5
+ line-height: 1rem;
6
+ font-weight: bold;
7
+ }
8
+
9
+ .arvue-dropdown-menu-label.arvue-dropdown-menu-label-inset {
10
+ padding-left: 1.5rem;
11
+ }
12
+
@@ -0,0 +1,33 @@
1
+ .arvue-dropdown-menu-radio-item {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ font-size: 0.875rem;
7
+ outline: none;
8
+ user-select: none;
9
+ -webkit-user-select: none;
10
+ color: var(--menu-link-color);
11
+ padding: 0.5rem 0.75rem 0.5rem 1.5rem;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .arvue-dropdown-menu-radio-item:focus, .arvue-dropdown-menu-radio-item:hover{
16
+ background: var(--menu-background-color-hover);
17
+ color: var(--menu-link-color-hover);
18
+ }
19
+
20
+ .arvue-dropdown-menu-radio-item[data-disabled] {
21
+ pointer-events: none;
22
+ opacity: 0.5;
23
+ }
24
+
25
+ .arvue-dropdown-menu-radio-item .arvue-dropdown-menu-radio-item-indicator-wrapper {
26
+ pointer-events: none;
27
+ justify-content: center;
28
+ align-items: center;
29
+ font-size: 0.75rem;
30
+ display: flex;
31
+ position: absolute;
32
+ left: .5rem;
33
+ }
@@ -0,0 +1,5 @@
1
+ .arvue-dropdown-menu-separator {
2
+ height: 1px;
3
+ background-color: var(--border-color-hr);
4
+ margin: 5px;
5
+ }
@@ -0,0 +1,7 @@
1
+ .arvue-dropdown-menu-shortcut {
2
+ color: var(--text-color-hint-strong);
3
+ margin-left: auto;
4
+ font-size: 0.75rem;
5
+ line-height: 1rem;
6
+ letter-spacing: 0.1em;
7
+ }
@@ -0,0 +1,8 @@
1
+ .arvue-dropdown-menu-sub-content {
2
+ background: var(--background-color-blank);
3
+ border: 1px solid rgba(0, 0, 0, 0.1);
4
+ border-radius: 0.5rem; box-shadow: 0 0.25rem 1rem -0.25rem rgba(0, 0, 0, 0.1);
5
+ z-index: 110;
6
+ transform-origin: var(--reka-dropdown-menu-content-transform-origin);
7
+ overflow: auto;
8
+ }
@@ -0,0 +1,33 @@
1
+ .arvue-dropdown-menu-sub-trigger {
2
+ position: relative;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ font-size: 0.875rem;
7
+ outline: none;
8
+ user-select: none;
9
+ -webkit-user-select: none;
10
+ color: var(--menu-link-color);
11
+ padding: 0.5rem 0.75rem;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .arvue-dropdown-menu-sub-trigger:focus, .arvue-dropdown-menu-sub-trigger[data-state="open"] {
16
+ background: var(--menu-background-color-hover);
17
+ color: var(--menu-link-color-hover);
18
+ }
19
+
20
+ .arvue-dropdown-menu-sub-trigger[data-disabled] {
21
+ pointer-events: none;
22
+ opacity: 0.5;
23
+ }
24
+
25
+ .arvue-dropdown-menu-sub-trigger .arvue-dropdown-menu-sub-trigger-icon {
26
+ margin-left: auto;
27
+ width: 1rem;
28
+ height: 1rem
29
+ }
30
+
31
+ .arvue-dropdown-menu-sub-trigger.arvue-dropdown-menu-sub-trigger-inset {
32
+ padding-left: 1.5rem;
33
+ }
@@ -0,0 +1,66 @@
1
+ export {
2
+ default as DropdownMenu,
3
+ type DropdownMenuEmits,
4
+ type DropdownMenuProps,
5
+ } from './DropdownMenu.vue'
6
+ export {
7
+ default as DropdownMenuCheckboxItem,
8
+ type DropdownMenuCheckboxItemEmits,
9
+ type DropdownMenuCheckboxItemProps,
10
+ } from './DropdownMenuCheckboxItem.vue'
11
+ export {
12
+ default as DropdownMenuContent,
13
+ type DropdownMenuContentEmits,
14
+ type DropdownMenuContentProps,
15
+ } from './DropdownMenuContent.vue'
16
+ export {
17
+ default as DropdownMenuGroup,
18
+ type DropdownMenuGroupProps,
19
+ } from './DropdownMenuGroup.vue'
20
+ export {
21
+ default as DropdownMenuItem,
22
+ type DropdownMenuItemProps,
23
+ } from './DropdownMenuItem.vue'
24
+ export {
25
+ default as DropdownMenuLabel,
26
+ type DropdownMenuLabelProps,
27
+ } from './DropdownMenuLabel.vue'
28
+ export {
29
+ default as DropdownMenuPortal,
30
+ type DropdownMenuPortalProps,
31
+ } from './DropdownMenuPortal.vue'
32
+ export {
33
+ default as DropdownMenuRadioGroup,
34
+ type DropdownMenuRadioGroupEmits,
35
+ type DropdownMenuRadioGroupProps,
36
+ } from './DropdownMenuRadioGroup.vue'
37
+ export {
38
+ default as DropdownMenuRadioItem,
39
+ type DropdownMenuRadioItemEmits,
40
+ type DropdownMenuRadioItemProps,
41
+ } from './DropdownMenuRadioItem.vue'
42
+ export {
43
+ default as DropdownMenuSeparator,
44
+ type DropdownMenuSeparatorProps,
45
+ } from './DropdownMenuSeparator.vue'
46
+ export {
47
+ default as DropdownMenuShortcut,
48
+ type DropdownMenuShortcutProps,
49
+ } from './DropdownMenuShortcut.vue'
50
+ export {
51
+ default as DropdownMenuSub,
52
+ type DropdownMenuSubProps,
53
+ } from './DropdownMenuSub.vue'
54
+ export {
55
+ default as DropdownMenuSubContent,
56
+ type DropdownMenuSubContentEmits,
57
+ type DropdownMenuSubContentProps,
58
+ } from './DropdownMenuSubContent.vue'
59
+ export {
60
+ default as DropdownMenuSubTrigger,
61
+ type DropdownMenuSubTriggerProps,
62
+ } from './DropdownMenuSubTrigger.vue'
63
+ export {
64
+ default as DropdownMenuTrigger,
65
+ type DropdownMenuTriggerProps,
66
+ } from './DropdownMenuTrigger.vue'
package/src/index.ts CHANGED
@@ -1,6 +1,9 @@
1
+ export * from './aspect-ratio'
1
2
  export * from './autocomplete'
2
3
  export * from './combobox'
3
4
  export * from './dialog'
4
5
  export * from './drawer'
6
+ export * from './dropdown-menu'
7
+ export * from './select'
5
8
  export * from './sheet'
6
9
  export * from './sonner'
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <SelectRoot
3
+ v-slot="slotProps"
4
+ v-bind="forwarded"
5
+ >
6
+ <SelectRootPatch>
7
+ <slot v-bind="slotProps"/>
8
+ </SelectRootPatch>
9
+ </SelectRoot>
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ import type { SelectRootEmits, SelectRootProps } from 'reka-ui'
14
+
15
+ export interface SelectProps extends SelectRootProps {}
16
+ export interface SelectEmits extends SelectRootEmits {}
17
+ </script>
18
+
19
+ <script setup lang="ts">
20
+ import { SelectRoot, useForwardPropsEmits } from 'reka-ui'
21
+ import SelectRootPatch from './SelectRootPatch.vue'
22
+
23
+ const props = defineProps<SelectProps>()
24
+ const emits = defineEmits<SelectEmits>()
25
+
26
+ const forwarded = useForwardPropsEmits(props, emits)
27
+ </script>
@@ -0,0 +1,77 @@
1
+ <style>
2
+ @import './select-content.css';
3
+ </style>
4
+
5
+ <template>
6
+ <AnimatePresence>
7
+ <SelectContent
8
+ v-bind="{ ...$attrs, ...forwarded }"
9
+ :class="clsx('arvue-select-content', props.class)"
10
+ position="popper"
11
+ as-child
12
+ >
13
+ <Motion
14
+ :initial="{
15
+ y: '-5px',
16
+ opacity: 0,
17
+ }"
18
+ :animate="{
19
+ y: 0,
20
+ opacity: 1,
21
+ }"
22
+ :exit="{
23
+ y: '-5px',
24
+ opacity: 0,
25
+ }"
26
+ :transition="{
27
+ duration: .15,
28
+ ease: 'easeInOut',
29
+ }"
30
+ >
31
+ <SelectScrollUpButton/>
32
+ <SelectViewport class="arvue-select-content-viewport">
33
+ <slot/>
34
+ </SelectViewport>
35
+ <SelectScrollDownButton/>
36
+ </Motion>
37
+ </SelectContent>
38
+ </AnimatePresence>
39
+ </template>
40
+
41
+ <script lang="ts">
42
+ import type {
43
+ SelectContentEmits as RekaSelectContentEmits,
44
+ SelectContentProps as RekaSelectContentProps,
45
+ } from 'reka-ui'
46
+ import type { HTMLAttributes } from 'vue'
47
+
48
+ export interface SelectContentProps extends Omit<RekaSelectContentProps, 'position'> {
49
+ class?: HTMLAttributes['class']
50
+ }
51
+ export interface SelectContentEmits extends RekaSelectContentEmits {}
52
+ </script>
53
+
54
+ <script setup lang="ts">
55
+ import { reactiveOmit } from '@vueuse/core'
56
+ import { clsx } from 'clsx'
57
+ import { AnimatePresence, Motion } from 'motion-v'
58
+ import {
59
+ SelectContent,
60
+ SelectViewport,
61
+ useForwardPropsEmits,
62
+ } from 'reka-ui'
63
+ import { SelectScrollDownButton, SelectScrollUpButton } from '.'
64
+
65
+ defineOptions({
66
+ inheritAttrs: false,
67
+ })
68
+
69
+ const props = withDefaults(defineProps<SelectContentProps>(), {
70
+ sideOffset: 8,
71
+ })
72
+ const emits = defineEmits<SelectContentEmits>()
73
+
74
+ const delegatedProps = reactiveOmit(props, 'class')
75
+
76
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
77
+ </script>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <SelectGroup v-bind="props">
3
+ <slot/>
4
+ </SelectGroup>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { SelectGroupProps as RekaSelectGroupProps } from 'reka-ui'
9
+
10
+ export interface SelectGroupProps extends RekaSelectGroupProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { SelectGroup } from 'reka-ui'
15
+
16
+ const props = defineProps<SelectGroupProps>()
17
+ </script>
@@ -0,0 +1,46 @@
1
+ <style>
2
+ @import './select-item.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectItem
7
+ v-bind="forwardedProps"
8
+ :class="clsx('arvue-select-item', props.class)"
9
+ >
10
+ <span class="arvue-select-item-indicator-wrapper">
11
+ <SelectItemIndicator>
12
+ <i class="fas fa-check"/>
13
+ </SelectItemIndicator>
14
+ </span>
15
+
16
+ <SelectItemText>
17
+ <slot/>
18
+ </SelectItemText>
19
+ </SelectItem>
20
+ </template>
21
+
22
+ <script lang="ts">
23
+ import type { SelectItemProps as RekaSelectItemProps } from 'reka-ui'
24
+ import type { HTMLAttributes } from 'vue'
25
+
26
+ export interface SelectItemProps extends RekaSelectItemProps {
27
+ class?: HTMLAttributes['class']
28
+ }
29
+ </script>
30
+
31
+ <script setup lang="ts">
32
+ import { reactiveOmit } from '@vueuse/core'
33
+ import { clsx } from 'clsx'
34
+ import {
35
+ SelectItem,
36
+ SelectItemIndicator,
37
+ SelectItemText,
38
+ useForwardProps,
39
+ } from 'reka-ui'
40
+
41
+ const props = defineProps<SelectItemProps>()
42
+
43
+ const delegatedProps = reactiveOmit(props, 'class')
44
+
45
+ const forwardedProps = useForwardProps(delegatedProps)
46
+ </script>
@@ -0,0 +1,17 @@
1
+ <template>
2
+ <SelectItemText v-bind="props">
3
+ <slot/>
4
+ </SelectItemText>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import type { SelectItemTextProps as RekaSelectItemTextProps } from 'reka-ui'
9
+
10
+ export interface SelectItemTextProps extends RekaSelectItemTextProps {}
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { SelectItemText } from 'reka-ui'
15
+
16
+ const props = defineProps<SelectItemTextProps>()
17
+ </script>
@@ -0,0 +1,31 @@
1
+ <style>
2
+ @import './select-label.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectLabel
7
+ :class="clsx('arvue-select-label', props.class)"
8
+ v-bind="delegatedProps"
9
+ >
10
+ <slot/>
11
+ </SelectLabel>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { SelectLabelProps as RekaSelectLabelProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface SelectLabelProps extends RekaSelectLabelProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { SelectLabel } from 'reka-ui'
27
+
28
+ const props = defineProps<SelectLabelProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+ </script>
@@ -0,0 +1,24 @@
1
+ <!-- Фиксит мерцание SelectValue при закрытии -->
2
+ <!-- TODO удалить после фикса https://github.com/unovue/reka-ui/issues/2160 -->
3
+ <template>
4
+ <slot/>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { injectSelectRootContext } from 'reka-ui'
9
+ import { onBeforeUnmount } from 'vue'
10
+
11
+ const ctx = injectSelectRootContext()
12
+ const original = ctx.onOptionRemove
13
+
14
+ ctx.onOptionRemove = (option) => {
15
+ if (!ctx.open.value) {
16
+ return
17
+ }
18
+ original(option)
19
+ }
20
+
21
+ onBeforeUnmount(() => {
22
+ ctx.onOptionRemove = original
23
+ })
24
+ </script>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ @import './select-scroll-button.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectScrollDownButton
7
+ v-bind="forwardedProps"
8
+ :class="clsx('arvue-select-scroll-button', props.class)"
9
+ >
10
+ <i class="fas fa-chevron-down"/>
11
+ </SelectScrollDownButton>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { SelectScrollDownButtonProps as RekaSelectScrollDownButtonProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface SelectScrollDownButtonProps extends RekaSelectScrollDownButtonProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { SelectScrollDownButton, useForwardProps } from 'reka-ui'
27
+
28
+ const props = defineProps<SelectScrollDownButtonProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+
32
+ const forwardedProps = useForwardProps(delegatedProps)
33
+ </script>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ @import './select-scroll-button.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectScrollUpButton
7
+ v-bind="forwardedProps"
8
+ :class="clsx('arvue-select-scroll-button', props.class)"
9
+ >
10
+ <i class="fas fa-chevron-up"/>
11
+ </SelectScrollUpButton>
12
+ </template>
13
+
14
+ <script lang="ts">
15
+ import type { SelectScrollUpButtonProps as RekaSelectScrollUpButtonProps } from 'reka-ui'
16
+ import type { HTMLAttributes } from 'vue'
17
+
18
+ export interface SelectScrollUpButtonProps extends RekaSelectScrollUpButtonProps {
19
+ class?: HTMLAttributes['class']
20
+ }
21
+ </script>
22
+
23
+ <script setup lang="ts">
24
+ import { reactiveOmit } from '@vueuse/core'
25
+ import { clsx } from 'clsx'
26
+ import { SelectScrollUpButton, useForwardProps } from 'reka-ui'
27
+
28
+ const props = defineProps<SelectScrollUpButtonProps>()
29
+
30
+ const delegatedProps = reactiveOmit(props, 'class')
31
+
32
+ const forwardedProps = useForwardProps(delegatedProps)
33
+ </script>
@@ -0,0 +1,29 @@
1
+ <style>
2
+ @import './select-separator.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectSeparator
7
+ v-bind="delegatedProps"
8
+ :class="clsx('arvue-select-separator', props.class)"
9
+ />
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ import type { SelectSeparatorProps as RekaSelectSeparatorProps } from 'reka-ui'
14
+ import type { HTMLAttributes } from 'vue'
15
+
16
+ export interface SelectSeparatorProps extends RekaSelectSeparatorProps {
17
+ class?: HTMLAttributes['class']
18
+ }
19
+ </script>
20
+
21
+ <script setup lang="ts">
22
+ import { reactiveOmit } from '@vueuse/core'
23
+ import { clsx } from 'clsx'
24
+ import { SelectSeparator } from 'reka-ui'
25
+
26
+ const props = defineProps<SelectSeparatorProps>()
27
+
28
+ const delegatedProps = reactiveOmit(props, 'class')
29
+ </script>
@@ -0,0 +1,40 @@
1
+ <style>
2
+ @import './select-trigger.css';
3
+ </style>
4
+
5
+ <template>
6
+ <SelectTrigger
7
+ v-bind="forwardedProps"
8
+ :class="clsx('arvue-select-trigger', props.class)"
9
+ :tabindex="disabled ? -1 : 0"
10
+ >
11
+ <slot/>
12
+ <SelectIcon as-child>
13
+ <span class="arvue-select-trigger-icon">
14
+ <i class="fas fa-chevron-down"/>
15
+ </span>
16
+ </SelectIcon>
17
+ </SelectTrigger>
18
+ </template>
19
+
20
+ <script lang="ts">
21
+ import type { SelectTriggerProps as RekaSelectTriggerProps } from 'reka-ui'
22
+ import type { HTMLAttributes } from 'vue'
23
+
24
+ export interface SelectTriggerProps extends RekaSelectTriggerProps {
25
+ class?: HTMLAttributes['class']
26
+ }
27
+ </script>
28
+
29
+ <script setup lang="ts">
30
+ import { reactiveOmit } from '@vueuse/core'
31
+ import { clsx } from 'clsx'
32
+ import { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui'
33
+
34
+ const props = withDefaults(defineProps<SelectTriggerProps>(), {
35
+ as: 'div',
36
+ })
37
+
38
+ const delegatedProps = reactiveOmit(props, 'class')
39
+ const forwardedProps = useForwardProps(delegatedProps)
40
+ </script>