@@ -10,6 +10,7 @@ import {
1010 ComboboxItem ,
1111 ComboboxItemIndicator ,
1212 ComboboxLabel ,
13+ ComboboxPortal ,
1314 ComboboxRoot ,
1415 ComboboxSeparator ,
1516 ComboboxTrigger ,
@@ -62,69 +63,76 @@ function toDisplayValue(value: T): string {
6263 </ComboboxTrigger >
6364 </ComboboxAnchor >
6465
65- <ComboboxContent
66- :avoid-collisions =" true"
67- :class =" [
68- 'absolute z-10 w-full mt-1 min-w-[160px] overflow-hidden rounded-xl shadow-sm border will-change-[opacity,transform] max-h-50dvh',
69- 'data-[side=top]:animate-slideDownAndFade data-[side=right]:animate-slideLeftAndFade data-[side=bottom]:animate-slideUpAndFade data-[side=left]:animate-slideRightAndFade',
70- 'bg-white dark:bg-neutral-900',
71- 'border-neutral-200 dark:border-neutral-800 border-solid border-2 focus:border-neutral-300 dark:focus:border-neutral-600',
72- ]"
73- >
74- <ComboboxViewport class =" p-[2px]" >
75- <ComboboxEmpty
76- :class =" [
77- 'font-medium py-2 px-2',
78- 'text-xs text-neutral-700 dark:text-neutral-200',
79- 'transition-colors duration-200 ease-in-out',
80- ]"
81- />
66+ <ComboboxPortal >
67+ <ComboboxContent
68+ position =" popper"
69+ side =" bottom"
70+ align =" start"
71+ :side-offset =" 4"
72+ :avoid-collisions =" true"
73+ :class =" [
74+ 'z-150 w-full min-w-[160px] overflow-hidden rounded-xl shadow-sm border will-change-[opacity,transform]',
75+ 'data-[side=top]:animate-slideDownAndFade data-[side=right]:animate-slideLeftAndFade data-[side=bottom]:animate-slideUpAndFade data-[side=left]:animate-slideRightAndFade',
76+ 'bg-white dark:bg-neutral-900',
77+ 'border-neutral-200 dark:border-neutral-800 border-solid border-2 focus:border-neutral-300 dark:focus:border-neutral-600',
78+ ]"
79+ :style =" { width: 'var(--reka-combobox-trigger-width)' }"
80+ >
81+ <ComboboxViewport :class =" ['p-[2px]', 'max-h-50dvh', 'overflow-y-auto']" >
82+ <ComboboxEmpty
83+ :class =" [
84+ 'font-medium py-2 px-2',
85+ 'text-xs text-neutral-700 dark:text-neutral-200',
86+ 'transition-colors duration-200 ease-in-out',
87+ ]"
88+ />
8289
83- <template
84- v-for =" (group , index ) in options "
85- :key =" group .groupLabel "
86- >
87- <ComboboxGroup :class =" ['overflow-x-hidden']" >
88- <ComboboxSeparator
89- v-if =" index !== 0"
90- :class =" ['m-[5px]', 'h-[1px]', 'bg-neutral-400']"
91- />
90+ <template
91+ v-for =" (group , index ) in options "
92+ :key =" group .groupLabel "
93+ >
94+ <ComboboxGroup :class =" ['overflow-x-hidden']" >
95+ <ComboboxSeparator
96+ v-if =" index !== 0"
97+ :class =" ['m-[5px]', 'h-[1px]', 'bg-neutral-400']"
98+ />
9299
93- <ComboboxLabel
94- :class =" [
95- 'px-[25px] text-xs leading-[25px]',
96- 'text-neutral-500 dark:text-neutral-400',
97- 'transition-colors duration-200 ease-in-out',
98- ]"
99- >
100- {{ group.groupLabel }}
101- </ComboboxLabel >
100+ <ComboboxLabel
101+ :class =" [
102+ 'px-[25px] text-xs leading-[25px]',
103+ 'text-neutral-500 dark:text-neutral-400',
104+ 'transition-colors duration-200 ease-in-out',
105+ ]"
106+ >
107+ {{ group.groupLabel }}
108+ </ComboboxLabel >
102109
103- <ComboboxItem
104- v-for =" option in group.children"
105- :key =" option.label"
106- :text-value =" option.label"
107- :value =" option.value"
108- :class =" [
109- 'leading-none rounded-lg flex items-center h-8 pr-[0.5rem] pl-[1.5rem] relative select-none data-[disabled]:pointer-events-none data-[highlighted]:outline-none',
110- 'data-[highlighted]:bg-neutral-100 dark:data-[highlighted]:bg-neutral-800',
111- 'text-sm text-neutral-700 dark:text-neutral-200 data-[disabled]:text-neutral-400 dark:data-[disabled]:text-neutral-600 data-[highlighted]:text-grass1',
112- 'transition-colors duration-200 ease-in-out',
113- 'cursor-pointer',
114- ]"
115- >
116- <ComboboxItemIndicator
117- :class =" ['absolute', 'left-0', 'w-[25px]', 'inline-flex', 'items-center', 'justify-center', 'opacity-30']"
110+ <ComboboxItem
111+ v-for =" option in group.children"
112+ :key =" option.label"
113+ :text-value =" option.label"
114+ :value =" option.value"
115+ :class =" [
116+ 'leading-normal rounded-lg flex items-center h-8 pr-[0.5rem] pl-[1.5rem] relative select-none data-[disabled]:pointer-events-none data-[highlighted]:outline-none',
117+ 'data-[highlighted]:bg-neutral-100 dark:data-[highlighted]:bg-neutral-800',
118+ 'text-sm text-neutral-700 dark:text-neutral-200 data-[disabled]:text-neutral-400 dark:data-[disabled]:text-neutral-600 data-[highlighted]:text-grass1',
119+ 'transition-colors duration-200 ease-in-out',
120+ 'cursor-pointer',
121+ ]"
118122 >
119- <div i-solar:alt-arrow-right-outline />
120- </ComboboxItemIndicator >
121- <span :class =" ['line-clamp-1', 'overflow-hidden', 'text-ellipsis', 'whitespace-nowrap']" >
122- {{ option.label }}
123- </span >
124- </ComboboxItem >
125- </ComboboxGroup >
126- </template >
127- </ComboboxViewport >
128- </ComboboxContent >
123+ <ComboboxItemIndicator
124+ :class =" ['absolute', 'left-0', 'w-[25px]', 'inline-flex', 'items-center', 'justify-center', 'opacity-30']"
125+ >
126+ <div i-solar:alt-arrow-right-outline />
127+ </ComboboxItemIndicator >
128+ <span :class =" ['line-clamp-1', 'overflow-hidden', 'text-ellipsis', 'whitespace-nowrap']" >
129+ {{ option.label }}
130+ </span >
131+ </ComboboxItem >
132+ </ComboboxGroup >
133+ </template >
134+ </ComboboxViewport >
135+ </ComboboxContent >
136+ </ComboboxPortal >
129137 </ComboboxRoot >
130138</template >
0 commit comments