Top-layer anchored popover with click-outside dismissal
Installation
$npx nnui add popover
copy
$npm install nnui-kit
copy
Interactive Preview & Code
Dimensions
Set the dimensions for the layer.
<ui-popover>
<button data-part="trigger" data-ui="button" data-variant="outline">
Open Dimensions
</button>
<div data-part="content" popover>
<h4>Dimensions</h4>
<p>Set the dimensions for the layer.</p>
</div>
</ui-popover>
import React, { useState } from 'react';
import 'nnui-kit'; // Registers universal Light-DOM elements
export default function PopoverDemo() {
const [tab, setTab] = useState('all');
const [val, setVal] = useState(50);
const [selected, setSelected] = useState('');
const [query, setQuery] = useState('');
return (
<ui-popover>
<button data-part="trigger" data-ui="button" data-variant="outline">
Open Dimensions
</button>
<div data-part="content" popover>
<h4>Dimensions</h4>
<p>Set the dimensions for the layer.</p>
</div>
</ui-popover>
);
}
<script>
import 'nnui-kit';
let activeTab = $state('all');
let sliderValue = $state(50);
let selected = $state('');
</script>
<ui-popover>
<button data-part="trigger" data-ui="button" data-variant="outline">
Open Dimensions
</button>
<div data-part="content" popover>
<h4>Dimensions</h4>
<p>Set the dimensions for the layer.</p>
</div>
</ui-popover>
How to Utilize
NNUI-KIT components live directly in the document Light DOM. You can use them via declarative HTML, with our first-class React wrapper, or platform-natively in Svelte, Vue, Astro, and HTMX:
React 18 & 19 (Next.js 15 App Router)
import 'nnui-kit/css';
import 'nnui-kit/client';
import { Popover } from 'nnui-kit/react';
Universal Web Components (Vue 3, Svelte 5, Astro, HTMX)