Headless UI
A set of completely unstyled, fully accessible UI components, designed to integrate beautifully with Tailwind CSS.
Packages
Name | Version | Downloads |
---|---|---|
@headlessui/react |
||
@headlessui/vue |
A set of completely unstyled, fully accessible UI components, designed to integrate beautifully with Tailwind CSS.
Name | Version | Downloads |
---|---|---|
@headlessui/react |
||
@headlessui/vue |
@headlessui/react
1.4.1
chrome
Not now.
while we create Modal
multiple (2+) it will throw me
focus-management.esm.js?d1e3:99 Uncaught RangeError: Maximum call stack size exceeded.
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
at handler (use-window-event.esm.js?b5e3:8)
at focusElement (focus-management.esm.js?d1e3:99)
at eval (use-focus-trap.esm.js?25af:110)
BTW, can Modal
need to provider flag props to disabled focusElement
feature, in most case we don't need this, i think.
Hey there,
Just a first attempt/POC for a multi-select Listbox (see #181).
React-only at this stage.
https://user-images.githubusercontent.com/690667/123712986-af5edb00-d873-11eb-8085-10dbf11b9fc5.mov
It involves a few changes, mostly:
Listbox
state, to be able to detect selected options while the Listbox is openvalue
is an arrayAll in all, it seems to work ok, the only thing I can't get around is that when you use clickable items within Listbox.button
(ex: badges with a remove action), the button gain focus on click, and it kind of messes things up.
I've added a basic test case - just a start.
Let me know if you'd like me to explore / improve this further, or if you prefer to handle this yourself :)
What package within Headless UI are you using?
@headlessui/vue
What version of that package are you using?
"devDependencies": {
"autoprefixer": "^10.4.0",
"nuxt3": "latest",
"postcss": "^8.4.4",
"tailwindcss": "^2.2.19"
},
"dependencies": {
"@headlessui/vue": "^1.4.2",
"@heroicons/vue": "^1.0.5",
"@tailwindcss/forms": "^0.3.4"
}
Describe your issue
It works fine with development but when I build nuxt (nuxi build) and start (yarn start) it gives error. I've tried to import headless ui component from @headlessui/vue/dist/index.js instead of @headlessui/vue but its still same.
TypeError: Cannot read property 'buttonRef' of undefined
at setup (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@headlessui\vue\dist\headlessui.cjs.development.js:2622:15)
at callWithErrorHandling (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:7158:22)
at setupStatefulComponent (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:6874:29)
at setupComponent (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:6855:11)
at renderComponentVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9757:17)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9863:22)
at renderVNodeChildren (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9878:9)
at renderElementVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9929:17)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9860:17)
at renderVNodeChildren (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9878:9)
[Vue warn]: inject() can only be used inside setup() or functional components.
TypeError: Cannot read property 'menuState' of undefined
at Proxy.render$1 (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@headlessui\vue\dist\headlessui.cjs.development.js:2522:17)
at renderComponentRoot (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:2015:44)
at renderComponentSubTree (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9828:51)
at renderComponentVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9773:16)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9863:22)
at renderVNodeChildren (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9878:9)
at renderElementVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9929:17)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9860:17)
at renderVNodeChildren (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9878:9)
at renderElementVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9929:17)
[Vue warn]: inject() can only be used inside setup() or functional components.
[Vue warn]: Unhandled error during execution of watcher callback
TypeError: Cannot read property 'itemsRef' of undefined
at ReactiveEffect.fn (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@headlessui\vue\dist\headlessui.cjs.development.js:2685:24)
at ReactiveEffect.run (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\reactivity\dist\reactivity.cjs.js:164:29)
at ComputedRefImpl.get value [as value] (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\reactivity\dist\reactivity.cjs.js:1075:39)
at D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@headlessui\vue\dist\headlessui.cjs.development.js:2336:26
at callWithErrorHandling (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\runtime-core\dist\runtime-core.cjs.js:6615:22)
at callWithAsyncErrorHandling (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\runtime-core\dist\runtime-core.cjs.js:6624:21)
at ReactiveEffect.getter [as fn] (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\runtime-core\dist\runtime-core.cjs.js:6970:24)
at ReactiveEffect.run (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\reactivity\dist\reactivity.cjs.js:164:29)
at doWatch (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\runtime-core\dist\runtime-core.cjs.js:7078:16)
at Object.watchEffect (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@vue\runtime-core\dist\runtime-core.cjs.js:6890:12)
[Vue warn]: inject() can only be used inside setup() or functional components.
TypeError: Cannot read property 'menuState' of undefined
at Proxy.render$1 (D:\projects\headless-test\nuxt3-app\.output\server\node_modules\@headlessui\vue\dist\headlessui.cjs.development.js:2656:17)
at renderComponentRoot (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:2015:44)
at renderComponentSubTree (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9828:51)
at renderComponentVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9773:16)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9863:22)
at renderComponentSubTree (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9828:13)
at renderComponentVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9773:16)
at renderVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9863:22)
at renderComponentSubTree (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9780:9)
at renderComponentVNode (file:///D:/projects/headless-test/nuxt3-app/.output/server/chunks/index.mjs:9773:16)
@headlessui/react
1.0.0
Chrome
https://codesandbox.io/s/gallant-butterfly-wnxjb
When there is no focusable element inside modal, it fails with error There are no focusable elements inside the <FocusTrap />
. I don't know if it's a feature or a bug, but there isn't said in the documentation that Dialog must include at least one focusable element and I totally see a use-case when there are modals without any focusable element. I think it at least should fail with warning instead of fatal error.
Anyways I would like to thank you for the great job you all are doing with the tailwind ecosystem, we really appreciate your work!
@headlessui/vue
1.0.0
Firefox
https://codesandbox.io/s/pensive-fast-yxokp?file=/src/App.vue
When any component inside a Dialog renders itself elsewhere in the DOM using a Portal/Teleport, clicking in it closes the entire Dialog. The example above uses vue-flatpickr-component
to create a date picker inside a modal, but because it renders the actual flatpickr instance somewhere else in the DOM, clicking any date closes the entire modal.
The docs on this say:
When a Dialog is rendered, clicking the
DialogOverlay
will close the Dialog.
But that isn't exactly the case—it's not clicking the DialogOverlay
specifically that closes the Dialog, but clicking anything that is not a child of the Dialog in the DOM.
I believe the relevant part of the code is here: https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-vue/src/components/dialog/dialog.ts#L174-L184
What do you think about adding a way to disable that global mousedown
handler, or adding an option to actually only close the Dialog based on clicks directly on the DialogOverlay
component?
It appears like Transition classes are not there initially on any div(<Transition>
)
Btw I'm using ( tailwindcss(^1.8.4) , styled-components & twin-macro)
Sample code I'm trying to test on my NextJs WebApp
bugWhat package within Headless UI are you using?
@headlessui/vue
What version of that package are you using?
1.6.5
What browser are you using?
Chrome
Reproduction URL
https://headlessui.dev/vue/dialog
Describe your issue
No transitions take place when dialog initially appears or after closing/opening it again. Transition on close seems to work though. It used to work in v1.6.4.
Transition@headlessui/react
v1.1.1
Firefox
https://github.com/khuang7/headlessui-listbox-issue (yarn install then yarn start)
I am trying to populate a pretty big list (500 elements) into the Simple Custom component found in TailwindUI for my project. The hover behavior when trying to select an option becomes quite slow when you try to move the mouse around on all the options. Also generating the list can sometimes be slow as well.
My workaround this problem is to replace Listbox.Options and Listbox.Option to ul and li html elements so that I can just call 'hover:' on the li elements which improves performance significantly. But I would prefer to keep using the HeadlessUI instead of HTML because I would lose a lot of the ARIA accessibility features.
I was wondering if there is a way to deal with the performance issues in the HeadlessUI. I could only pinpoint the issue being related to ListboxOptions and ListboxOption.
@headlessui/vue
v1.0.0
Chrome
At the moment it is not possible to manually close the popover. Let's say I want to build an editable table. The editable content should be shown in the popover. When I hit the save button it should also close the popover. This is not possible, because the slots does not expose the function togglePopover.
Needs more infoI get the following error if I create a Dialog with no interactive components (just text):
Error: There are no focusable elements inside the <FocusTrap />
Hi there! I have a use case for the Menu component where I don't necessarily want the Menu to close when I click on a Menu.Item. Or, in other words, I would like to be able to control when the menu closes in some way.
Needs more infoPackage: @headlessui/vue v1.7.7 Browser: Chrome Reproduction URL: https://github.com/Kagigz/repro-tailwind-ui
I'm using sample code from Tailwind UI to add a Menu Button with Menu Items appearing in a dropdown when clicking it (cf image)
This is the sample code I'm using:
<Menu as="div" class="relative ml-5 flex-shrink-0">
<div>
<MenuButton class="flex rounded-full bg-white focus:outline-none focus:ring-2 focus:ring-redorange-500 focus:ring-offset-2">
<span class="sr-only">Open user menu</span>
<img class="h-8 w-8 rounded-full" src="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80" alt="">
</MenuButton>
</div>
<transition enter-active-class="transition ease-out duration-100" enter-from-class="transform opacity-0 scale-95" enter-to-class="transform opacity-100 scale-100" leave-active-class="transition ease-in duration-75" leave-from-class="transform opacity-100 scale-100" leave-to-class="transform opacity-0 scale-95">
<MenuItems class="absolute right-0 z-10 mt-2 w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none">
<MenuItem v-for="item in userNavigation" :key="item.name" v-slot="{ active }">
<a :href="item.href" class="block py-2 px-4 text-sm text-gray-700" :class="[active ? 'bg-gray-100' : '']">{{ item.name }}</a>
</MenuItem>
</MenuItems>
</transition>
</Menu>
I don't understand why, but all the items appear as disabled.
pnpm i
pnpm dev
src/components/layout-ui/HeaderMenu
Note: I'm using Tailwind via UnoCSS, the config is in unocss.config.ts
What package within Headless UI are you using?
@headlessui/react
What version of that package are you using?
v1.7.7
What browser are you using?
Chrome
Reproduction URL
https://codesandbox.io/s/headless-ui-tabs-order-issue-g9p9i2?file=/src/App.js
Describe your issue
When dynamically reorder tabs in tab list internal lib logic uses initial indexes for tabs. Looks like it is not correct.
What package within Headless UI are you using?
@headlessui/react
What version of that package are you using?
v1.7.1
What browser are you using?
Safari and VoiceOver (macOS)
Reproduction URL
Demo page https://headlessui.com/react/combobox or run the playground and go to http://localhost:3000/combobox/combobox-with-pure-tailwind
Describe your issue
Hello. Thank you for making headlessui components as accessible as possible, much appreciated.
I read some related issues / PRs and it seems to me there's a bit of misunderstanding about the usage of aria-selected
on the combobox listbox. See for example https://github.com/tailwindlabs/headlessui/pull/1812, https://github.com/tailwindlabs/headlessui/issues/1599, and https://github.com/tailwindlabs/headlessui/pull/1243.
Safari and VoiceOver (macOS) don't read the Combobox.Option because the aria-selected
usage in a combobox listbox is supposed to be a bit different from the one in a standard listbox. It's a subtle difference but in all the comboboxes I've helped to build in the past it always turned out that other screen readers (NVDA, JAWS) are happy with aria-activedescendant
and do not care much about aria-selected
. Instead, VoiceOver refuses to read the options if aria-selected
is omitted or used incorrectly.
In the ARIA authoring practices, the example that is closest to the headlessui Combobox (single selection) is the Editable Combobox with List Autocomplete.
Quoting from the Listbox Popup Role, Property, State section of the W3C combobox example:
- [aria-selected="true"] Specified on an option in the listbox when it is visually highlighted as selected.
- [aria-selected="true"] Occurs only when an option in the list is referenced by aria-activedescendant.
That is: in this pattern, aria-selected
needs to be only set on the currently 'highlighted' option. It doesn't have anything to do with the 'selection' state, which is a concept that is extraneous to the W3C combobox pattern.
This is also mentioned in the main page of the Combobox pattern: https://www.w3.org/WAI/ARIA/apg/patterns/combobox/#wai-aria-roles-states-and-properties-6
For a combobox that controls a listbox, grid, or tree popup, when a suggested value is visually indicated as the currently selected value, the option, gridcell, row, or treeitem containing that value has aria-selected set to true.
This is different from the (stand alone) Listbox pattern, where aria-selected
is indeed used for the selection state.
In short: in the Combobox Listbox, aria-selected
should be based on the active
prop rather than the selected
prop. Of course, the multiselectable pattern needs to be handled differently as well as the stand-alone Listbox.
Note: in https://github.com/tailwindlabs/headlessui/issues/1599#issuecomment-1235421018 it is mentioned that this woudl make VoiceOver announce every active option as selected
. While slightly annoying, this is up to the screen reader implementation and it's in a way the expected behavior. Other screen readers opted to not announce selected
, for example NVDA doesn't, but again this is a vendor's choice. Regardless, aria-selected=true
needs to be set only on the highlighted option referenced by aria-activedescendant.
To reproduce the bug:
W3C example:
What package within Headless UI are you using?
@headlessui/react
What version of that package are you using?
v1.7.7
What browser are you using?
Chrome v108
Reproduction URL
https://headlessui.com/react/dialog 's main example
My screenshots below used totally the same copy-pasted code without any modification
Describe your issue
TypeScript version: ^4.9.4, Vite: ^4.0.2, All packages' versions are the latest
className
throwing TypeError if as
has been set (it works if as
is not defined)
tsc --noEmit
result
Hey there, I'm using latest tailwindcss & headlessui. I've just implemented the first responsive header example of TailwindUI (https://tailwindui.com/components/marketing/elements/headers). It also works just fine, but whenever I open the responsive mobile menu popover and then enlarge the screen (so that it gets hidden), it throws the following error:
TypeError: Failed to execute 'contains' on 'Node': parameter 1 is not of type 'Node'.
A minimal codesandbox that reproduces the bug described in https://github.com/tailwindlabs/headlessui/issues/1391 and https://github.com/tailwindlabs/headlessui/issues/1417, as requested by @adamwathan and @RobinMalfait.
What package within Headless UI are you using?
@headlessui/react
What version of that package are you using?
v1.7.7
What browser are you using?
Chrome
Reproduction URL
https://codesandbox.io/s/headlessui-dialog-bug-704xe7?file=/src/App.js
I copied and pasted the first Dialog example and changed the Transition of the backdrop.
Describe your issue
It appears that when using a backdrop with a Transition that doesn't fade from opacity-100 to opacity-0, the dialog still is somewhat present in the DOM. Since the backdrop is still in the DOM, the whole app is unusable.
In the codesandbox, after the dialog is closed, we can no longer click on the button that open's it since the backdrop is still there.
Hope it helps!
Dialog
closes (b20e48dd)Dialog
closes (b20e48dd)displayValue
crashes (#2087)displayValue
syncing when Combobox.Input
is unmounted and re-mounted in different trees (#2090)displayValue
crashes (#2087)displayValue
syncing when Combobox.Input
is unmounted and re-mounted in different trees (#2090)<form>
resets (#2004)focus
is going to window
(#2019)shift+home
and shift+end
works as expected in the ComboboxInput
component (#2024)ComboboxInput
value (#2042)multiple
mode without value
prop (uncontrolled) for Listbox
and Combobox
components (#2058)id
prop (#2060)null
as a valid type for Listbox and Combobox in Vue (#2064, #2067)<form>
resets (#2004)<Popover.Button />
multiple times (#2007)focus
is going to window
(#2019)shift+home
and shift+end
works as expected in the Combobox.Input
component (#2024)Combobox.Input
value (#2042)multiple
mode without value
prop (uncontrolled) for Listbox
and Combobox
components (#2058)enter
and enterFrom
classes in SSR for Transition
component (#2059)id
prop (#2060)Dialog
unmounting problem due to incorrect transitioncancel
event in the Transition
component on Android (#2071)tailwindcss
to devDependencies
(#2040)close
function for Menu
and MenuItem
components (#1897)useOutsideClick
, add improvements for ShadowDOM (#1914)as
prop (#1915)<ComboboxInput>
's @change
handler when changing the value internally (#1916)<Popover.Button as={Fragment} />
crash (#1889)close
function for Menu
and Menu.Item
components (#1897)useOutsideClick
, add improvements for ShadowDOM (#1914)<Combobox.Input>
's onChange
handler when changing the value internally (#1916)client-only
to mark everything as client components (#1981)displayValue
with a v-model of ref(undefined)
on ComboboxInput
(#1865)Portal
detection for Popover
components (#1842)children
are undefined
(#1885)useOutsideClick
swallowing events inside ShadowDOM (#1876)Tab
incorrectly activating on focus
event (#1887)Portal
detection for Popover
components (#1842)useOutsideClick
swallowing events inside ShadowDOM (#1876)Tab
incorrectly activating on focus
event (#1887)ComboboxInput
while composing (#1850)static
prop in TabPanel
components correctly (#1856)Combobox.Input
while composing (#1850)static
prop in Tab.Panel
components correctly (#1856)Tab
order stays consistent, and the currently active Tab
stays active (#1837)<fieldset disabled>
check to radio group options in React (#1835)Tab
order stays consistent, and the currently active Tab
stays active (#1837)Combobox.Label
is properly linked when rendered after Combobox.Button
and Combobox.Input
components (#1838)forceRerender
from Tab
component (#1846)by
prop for Listbox
, Combobox
and RadioGroup
(#1482, #1717, #1814, #1815)@headlessui/tailwindcss
plugin (#1487)Menu
component when using tab
key (#1673)Tabs
don't change automagically (#1680)Dialog
(#1716)element.focus()
on <PopoverPanel>
(#1719)Combobox
re-opening keyboard issue on mobile (#1732)<tab>
in the Combobox
component (#1750)MenuButton
if necessary when activating a MenuOption
(#1782)ListboxOption
and ComboboxOption
components (#1812)value
from the Combobox
and Listbox
components slot (#1822)scroll lock
on iOS (#1824)not
variants (#1621)by
prop for Listbox
, Combobox
and RadioGroup
(#1482, #1717, #1814, #1815)@headlessui/tailwindcss
plugin (#1487)Menu
component when using tab
key (#1673)Tabs
don't change automagically (#1680)Popover
close
to be passed directly to onClick
handlers (#1696)Dialog
(#1716)Combobox
re-opening keyboard issue on mobile (#1732)Disclosure.Panel
is properly linked (#1747)<tab>
in the Combobox
component (#1750)Combobox
component (#1761)Menu.Button
if necessary when activating a Menu.Option
(#1782)Transition
component's incorrect cleanup and order of events (#1803)unmount={false}
(#1811)Listbox.Option
and Combobox.Option
components (#1812)ref
stealing from children (#1820)value
from the Combobox
and Listbox
components render prop (#1822)scroll lock
on iOS (#1824)Tab
component when using as={Fragment}
(#1826)Transition
component (#1823)CMD
+Backspace
works in nullable mode for Combobox
component (#1617)PopoverPanel
can be used inside <transition>
(#1653)CMD
+Backspace
works in nullable mode for Combobox
component (#1617)<slot>
children when using as="template"
(#1548)Dialog
component (#1546)<iframe>
elements (#1552)Dialog
on the client (#1566)Tab
component when using arrow keys (#1584)aria-expanded
for ComboboxInput
component (#1605)Dialog
component (#1546)<iframe>
elements (#1552)Tab
component when using arrow keys (#1584)Escape
propagates correctly in Combobox
component (#1511)Escape
propagates correctly in Combobox
component (#1511)enter
bug (#1519)RadioGroup
component (#1522)type
on the ComboboxInput
(#1476)<PopoverPanel focus>
closes correctly (#1477)FocusSentinel
if required in the Tabs
component (#1493)type
on the Combobox.Input
(#1476)<Popover.Panel focus>
closes correctly (#1477)FocusSentinel
if required in the Tabs
component (#1493)@headlessui/tailwindcss
plugin (#1487)DialogPanel
exposes its ref (#1404)Escape
when event got prevented in Dialog
component (#1424)FocusTrap
behaviour (#1432)Popover
Tab logic by using sentinel nodes instead of keydown event interception (#1440)PopoverPanel
is clickable without closing the Popover
(#1443)Dialog
component (#1457)Popover.Panel
in React 18 (#1409)Escape
when event got prevented in Dialog
component (#1424)FocusTrap
behaviour (#1432)Popover
Tab logic by using sentinel nodes instead of keydown event interception (#1440)Popover.Panel
is clickable without closing the Popover
(#1443)Dialog
component (#1457)ref
optional in the Popover
component (#1465)ref
is forwarded on the Transition.Child
component (#1473)Nuxt 3 Starter This repo contains a fully configured nuxt 3 instance supporting TypeScript and several considered as useful libraries, fully configure
Clarity is an open source design system that brings together UX guidelines, design resources, and coding implementations with Web Components
vite-plugin-tauri Integrate Tauri in a Vite project to build cross-platform apps Install Make sure to setup your environment for Tauri development. Th
vite-plugin-electron Integrate Vite and Electron Example ?? vite-plugin-electron-quick-start Usage vite.config.ts import electron from 'vite-plugin-el
Mobile UI Components, based on Vue.js and ionic CSS
AnimXYZ animxyz.com AnimXYZ helps you create, customize, and compose animations for your website. Powered by CSS variables to allow a nearly limitless
Build bulletproof UI components faster Storybook is a development environment for UI components. It allows you to browse a component library, view the
Be Cool with Vue@^2.3.0 and WeUI. Live Demo >> Sponsors 我们的产品 Requirements 暂未适配 [email protected],请注意。 vue@^2.3.0(for .sync modifier) webpack@^2.0 node@^7.6
Vant Mobile UI Components built on Vue ?? 文档网站(国内) ?? 文档网站(GitHub) ???? 中文版介绍 Features 65+ Reusable components 1kb Component average size (min+gzip) 9
Ant Design Vue An enterprise-class UI components based on Ant Design and Vue. English | 简体中文 Features An enterprise-class UI design system for desktop
Buefy is a lightweight library of responsive UI components for Vue.js based on Bulma framework and design. Features Keep your current Bulma theme / va
Onsen UI - Cross-Platform Hybrid App and PWA Framework Onsen UI is an open source framework that makes it easy to create native-feeling Progressive We
Supporting through Patreon Vuesax is an open source MIT project if you want to contribute to keep improving, If you are interested in supporting this
✌️ ?? Check the next branch for Vue3 support Manage HTML metadata in Vue.js components with SSR support <template> ... </template> <script> expor
Isolated Vue component development environment with a living style guide Start documenting now on codesandbox.io Sponsors A big thank you to our spons
tsParticles - TypeScript Particles A lightweight TypeScript library for creating particles. Dependency free (*) and browser ready! Particles.js conver
vite-plugin-autoimport Automatically detect and import components or modules. Motivation It's very common to have many components in one file as the p
Carpatin Dashboard Free Carpatin is a React Js Admin Dashboard Template that focuses on the management flows of a back-office application. We leverage
Web Component Library Starter Kit "Why create components for a specific framework when it can be written to be understood by all — including browsers?