-
-
Notifications
You must be signed in to change notification settings - Fork 367
/
Copy pathheadless-ui.ts
83 lines (80 loc) · 1.58 KB
/
headless-ui.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import type { ComponentResolver } from '../../types'
// @keep-sorted
const components = [
'Combobox',
'ComboboxButton',
'ComboboxInput',
'ComboboxLabel',
'ComboboxOption',
'ComboboxOptions',
'Dialog',
'DialogDescription',
'DialogOverlay',
'DialogPanel',
'DialogTitle',
'Disclosure',
'DisclosureButton',
'DisclosurePanel',
'FocusTrap',
'Listbox',
'ListboxButton',
'ListboxLabel',
'ListboxOption',
'ListboxOptions',
'Menu',
'MenuButton',
'MenuItem',
'MenuItems',
'Popover',
'PopoverButton',
'PopoverGroup',
'PopoverOverlay',
'PopoverPanel',
'Portal',
'PortalGroup',
'RadioGroup',
'RadioGroupDescription',
'RadioGroupLabel',
'RadioGroupOption',
'Switch',
'SwitchDescription',
'SwitchGroup',
'SwitchLabel',
'Tab',
'TabGroup',
'TabList',
'TabPanel',
'TabPanels',
'TransitionChild',
'TransitionRoot',
]
export interface HeadlessUiResolverOptions {
/**
* prefix for headless ui components used in templates
*
* @default ""
*/
prefix?: string
}
/**
* Resolver for headlessui
*
* @link https://github.com/tailwindlabs/headlessui
*/
export function HeadlessUiResolver(options: HeadlessUiResolverOptions = {}): ComponentResolver {
const { prefix = '' } = options
return {
type: 'component',
resolve: (name: string) => {
if (name.startsWith(prefix)) {
const componentName = name.substring(prefix.length)
if (components.includes(componentName)) {
return {
name: componentName,
from: '@headlessui/vue',
}
}
}
},
}
}