@primitiv-ui/web 0.1.55 → 0.1.56
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.
- package/README.md +36 -3
- package/dist/cdn/tooltip.js +1 -0
- package/dist/custom-elements.json +357 -0
- package/dist/define/index.d.ts +1 -0
- package/dist/define/index.js +1 -0
- package/dist/define/tooltip.d.ts +1 -0
- package/dist/define/tooltip.js +11 -0
- package/dist/frameworks/events.d.ts +4 -0
- package/dist/frameworks/react.d.ts +18 -2
- package/dist/frameworks/svelte.d.ts +15 -1
- package/dist/frameworks/vue.d.ts +15 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/primitiv-web.js +1 -1
- package/dist/tags.d.ts +6 -0
- package/dist/tooltip/TooltipController.d.ts +66 -0
- package/dist/tooltip/TooltipController.js +115 -0
- package/dist/tooltip/TooltipGroup.d.ts +23 -0
- package/dist/tooltip/TooltipGroup.js +44 -0
- package/dist/tooltip/elements.d.ts +83 -0
- package/dist/tooltip/elements.js +222 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/index.js +3 -0
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ framework and no runtime dependencies beyond
|
|
|
6
6
|
server-rendered stack (HTMX, Rails, Django, Laravel, Spring …), and inside
|
|
7
7
|
React, Vue, Angular or any other framework.
|
|
8
8
|
|
|
9
|
-
> **Status: published.** Tabs, Accordion, Collapsible, Modal and
|
|
9
|
+
> **Status: published.** Tabs, Accordion, Collapsible, Modal, Popover and Tooltip so far. See
|
|
10
10
|
> [RFC 0033](../../docs/rfcs/0033-web-components.md) for the design.
|
|
11
11
|
|
|
12
12
|
## Components
|
|
@@ -18,6 +18,7 @@ React, Vue, Angular or any other framework.
|
|
|
18
18
|
| Collapsible | `primitiv-collapsible`, `-trigger`, `-content`, `-trigger-icon` | `primitiv-collapsible-change` | 0.1.47 |
|
|
19
19
|
| Modal | `primitiv-modal`, `-trigger`, `-content`, `-title`, `-description`, `-close` | `primitiv-modal-change` | 0.1.54 |
|
|
20
20
|
| Popover | `primitiv-popover`, `-trigger`, `-anchor`, `-content`, `-title`, `-description`, `-close` | `primitiv-popover-change` | 0.1.55 |
|
|
21
|
+
| Tooltip | `primitiv-tooltip`, `-provider`, `-trigger`, `-content`, `-arrow` | `primitiv-tooltip-change` | 0.1.56 |
|
|
21
22
|
|
|
22
23
|
## Use it
|
|
23
24
|
|
|
@@ -50,9 +51,10 @@ downloads it once. `dist/primitiv-web.js` is the alternative: every element in
|
|
|
50
51
|
one file. Per-component files ship from 0.1.43.
|
|
51
52
|
|
|
52
53
|
The main entry (`@primitiv-ui/web`, `/tabs`, `/accordion`, `/collapsible`,
|
|
53
|
-
`/modal`, `/popover`) exports the classes and `defineTabs(registry?)` /
|
|
54
|
+
`/modal`, `/popover`, `/tooltip`) exports the classes and `defineTabs(registry?)` /
|
|
54
55
|
`defineAccordion(registry?)` / `defineCollapsible(registry?)` /
|
|
55
|
-
`defineModal(registry?)` / `definePopover(registry?)`
|
|
56
|
+
`defineModal(registry?)` / `definePopover(registry?)` / `defineTooltip(registry?)`
|
|
57
|
+
with **no side effects**.
|
|
56
58
|
|
|
57
59
|
**Render `hidden` on inactive panels yourself.** Until the module loads, CSS
|
|
58
60
|
cannot tell which panel is active, so markup that omits it shows every panel.
|
|
@@ -183,6 +185,37 @@ on a panel as it becomes active, for lazy loading.
|
|
|
183
185
|
**Listen with `primitiv-popover-change`** (bubbles, cancelable, `detail: {
|
|
184
186
|
open }`), fired before every user-driven change, a light dismiss included.
|
|
185
187
|
|
|
188
|
+
### Tooltip
|
|
189
|
+
|
|
190
|
+
```html
|
|
191
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@primitiv-ui/web@<version>/dist/cdn/tooltip.js"></script>
|
|
192
|
+
|
|
193
|
+
<primitiv-tooltip>
|
|
194
|
+
<primitiv-tooltip-trigger><button type="button">Save</button></primitiv-tooltip-trigger>
|
|
195
|
+
<primitiv-tooltip-content popover="manual">
|
|
196
|
+
Saves your work
|
|
197
|
+
<primitiv-tooltip-arrow></primitiv-tooltip-arrow>
|
|
198
|
+
</primitiv-tooltip-content>
|
|
199
|
+
</primitiv-tooltip>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
- **It opens on hover after `delay-duration` (700 ms) and on focus at once**,
|
|
203
|
+
and closes when the pointer leaves (after a short grace period, so the pointer
|
|
204
|
+
can reach the bubble — `disable-hoverable-content` turns that off), on blur,
|
|
205
|
+
on Escape and on a press outside. The element gives the bubble
|
|
206
|
+
`role="tooltip"` and the trigger's button `aria-describedby`.
|
|
207
|
+
- **It is a native `popover="manual"`** in the top layer, shown with the
|
|
208
|
+
trigger as its source, so CSS anchor positioning places it with no
|
|
209
|
+
`anchor-name` / `position-anchor` pair. Write `popover="manual"` yourself so
|
|
210
|
+
the bubble is hidden before the script loads.
|
|
211
|
+
- **Moving from one trigger to the next opens each next tooltip at once** (the
|
|
212
|
+
skip delay, 300 ms). Tooltips inside a `<primitiv-tooltip-provider>` share its
|
|
213
|
+
`delay-duration` and `skip-delay-duration`; the rest share a document-wide
|
|
214
|
+
window.
|
|
215
|
+
- **`open` on the root is the state**; the `open` property reads and sets it.
|
|
216
|
+
**Listen with `primitiv-tooltip-change`** (bubbles, cancelable, `detail: {
|
|
217
|
+
open }`), fired before every user-driven change.
|
|
218
|
+
|
|
186
219
|
**TypeScript** — opt into the tag map so DOM queries return the element classes:
|
|
187
220
|
`import type {} from "@primitiv-ui/web/tags"` (npm only).
|
|
188
221
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as l,b as s,c as f,d as E,f as T}from"./chunks/chunk-QVNDDONZ.js";function b({groupOpen:n,delay:t}){return n?0:t}var d=class{#t;#o=null;#e=null;#n=t=>this.#r(t);#i=t=>this.#p(t);constructor(t){this.#t=t}openNow(){this.#l(),this.#t.change(!0),this.#t.tooltipGroup().opened()}hoverStart(){let t=b({groupOpen:this.#t.tooltipGroup().isOpen(),delay:this.#t.delay()});if(t===0){this.openNow();return}this.#o=setTimeout(()=>{this.openNow(),this.#o=null},t)}closeNow(){this.holdOpen(),this.#t.change(!1),this.#t.tooltipGroup().closed()}hoverEnd(){this.#l(),this.#e=setTimeout(()=>{this.#t.change(!1),this.#t.tooltipGroup().closed(),this.#e=null},100)}holdOpen(){this.#e!==null&&(clearTimeout(this.#e),this.#e=null)}sync(){let{open:t}=this.#t.state();t?(document.addEventListener("keydown",this.#n),document.addEventListener("pointerdown",this.#i)):this.#s()}#s(){document.removeEventListener("keydown",this.#n),document.removeEventListener("pointerdown",this.#i)}disconnect(){this.#l(),this.holdOpen(),this.#s()}#l(){this.#o!==null&&(clearTimeout(this.#o),this.#o=null)}#r(t){t.key==="Escape"&&(this.#t.escapeKeyDown?.(t),t.defaultPrevented||this.closeNow())}#p(t){this.#t.content()?.contains(t.target)||(this.#t.pointerDownOutside?.(t),t.defaultPrevented||this.closeNow())}};var r=class{#t;#o=!1;#e=null;constructor(t){this.#t=t}isOpen(){return this.#o}opened(){this.#e!==null&&(clearTimeout(this.#e),this.#e=null),this.#o=!0}closed(){clearTimeout(this.#e??void 0),this.#e=setTimeout(()=>{this.#o=!1,this.#e=null},this.#t())}dispose(){clearTimeout(this.#e??void 0)}};var G="primitiv-tooltip",L="primitiv-tooltip-provider",y="primitiv-tooltip-trigger",O="primitiv-tooltip-content",H="primitiv-tooltip-arrow",w=700,g=300;function u(n,t,e){let i=Number(n.getAttribute(t)??Number.NaN);return Number.isNaN(i)?e:i}var R=new r(()=>g),h=class extends l{#t;get group(){return this.#t??=new r(()=>u(this,"skip-delay-duration",g))}},a=class extends T{#t=null;#o=null;#e=null;#n=null;#i=new d(this.#s());controller={connect:()=>{},disconnect:()=>this.#l()};reconcileOn=["open"];get open(){return this.hasAttribute("open")}set open(t){this.toggleAttribute("open",t)}#s(){let t=()=>this.closest(L);return{state:()=>({open:this.open}),change:e=>{e!==this.open&&this.announce("primitiv-tooltip-change",{open:e})&&(this.open=e)},delay:()=>{let e=t();return u(this,"delay-duration",e?u(e,"delay-duration",w):w)},tooltipGroup:()=>t()?.group??R,content:()=>this.#o}}#l(){this.open&&this.#s().tooltipGroup().closed(),this.#n?.abort(),this.#n=null,this.#t=null,this.#o=null,this.#e=null,this.#i.disconnect()}#r(t,e){if(t===this.#t&&e===this.#o)return;this.#n?.abort(),this.#n=new AbortController,this.#t=t,this.#o=e;let i={signal:this.#n.signal},o=this.#i;t?.addEventListener("pointerenter",()=>o.hoverStart(),i),t?.addEventListener("pointerleave",()=>this.hasAttribute("disable-hoverable-content")?o.closeNow():o.hoverEnd(),i),t?.addEventListener("focus",()=>o.openNow(),i),t?.addEventListener("blur",()=>o.closeNow(),i),e?.addEventListener("pointerenter",()=>o.holdOpen(),i),e?.addEventListener("pointerleave",()=>o.closeNow(),i)}reconcile(){let t=this.open,e=t?"open":"closed";s(this,"data-state",e);let[i]=this.parts(y),[o=null]=this.parts(O),p=i?A(i):null;o&&(o.id||(o.id=`${this.rootId()}-content`),s(o,"role","tooltip"),o.hasAttribute("popover")||o.setAttribute("popover","manual"),s(o,"data-state",e)),p&&(s(p,"aria-describedby",o?o.id:null),s(p,"data-state",e)),this.#r(p,o),this.#p(t?o:null),this.#i.sync()}#p(t){if(t===this.#e)return;if(this.#e)try{this.#e.hidePopover()}catch{}if(this.#e=t,!t)return;let e=t;this.#t?e.showPopover({source:this.#t}):e.showPopover()}};function A(n){return n.childElementCount===1?n.firstElementChild:(f(n,`<${y}> needs exactly one element child (a <button>) to decorate.`),null)}var c=class extends l{},m=class extends l{},v=class extends l{};function N(n=globalThis.customElements){E(n,[[G,a],[L,h],[y,c],[O,m],[H,v]])}N();
|
|
@@ -1548,6 +1548,363 @@
|
|
|
1548
1548
|
}
|
|
1549
1549
|
}
|
|
1550
1550
|
]
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
"kind": "javascript-module",
|
|
1554
|
+
"path": "src/tooltip/elements.ts",
|
|
1555
|
+
"declarations": [
|
|
1556
|
+
{
|
|
1557
|
+
"kind": "class",
|
|
1558
|
+
"description": "`<primitiv-tooltip-provider>` — optional. The tooltips inside it share one\nskip-delay window and its default delay, as inside React's\n`Tooltip.Provider`; tooltips outside any provider share a document-wide one.",
|
|
1559
|
+
"name": "PrimitivTooltipProviderElement",
|
|
1560
|
+
"members": [
|
|
1561
|
+
{
|
|
1562
|
+
"kind": "field",
|
|
1563
|
+
"name": "#group",
|
|
1564
|
+
"privacy": "private",
|
|
1565
|
+
"type": {
|
|
1566
|
+
"text": "TooltipGroup | undefined"
|
|
1567
|
+
}
|
|
1568
|
+
},
|
|
1569
|
+
{
|
|
1570
|
+
"kind": "field",
|
|
1571
|
+
"name": "group",
|
|
1572
|
+
"type": {
|
|
1573
|
+
"text": "TooltipGroup"
|
|
1574
|
+
},
|
|
1575
|
+
"description": "The skip-delay window this provider's tooltips share, created on first use.",
|
|
1576
|
+
"readonly": true
|
|
1577
|
+
}
|
|
1578
|
+
],
|
|
1579
|
+
"attributes": [
|
|
1580
|
+
{
|
|
1581
|
+
"type": {
|
|
1582
|
+
"text": "number"
|
|
1583
|
+
},
|
|
1584
|
+
"description": "How long, in milliseconds, a pointer rests on a trigger before its tooltip opens. Default 700. A tooltip's own `delay-duration` overrides it.",
|
|
1585
|
+
"name": "delay-duration"
|
|
1586
|
+
},
|
|
1587
|
+
{
|
|
1588
|
+
"type": {
|
|
1589
|
+
"text": "number"
|
|
1590
|
+
},
|
|
1591
|
+
"description": "How long, in milliseconds, after one tooltip closes that hovering another opens it at once. Default 300.",
|
|
1592
|
+
"name": "skip-delay-duration"
|
|
1593
|
+
}
|
|
1594
|
+
],
|
|
1595
|
+
"superclass": {
|
|
1596
|
+
"name": "ElementBase",
|
|
1597
|
+
"module": "/src/internal/element.ts"
|
|
1598
|
+
},
|
|
1599
|
+
"tagName": "primitiv-tooltip-provider",
|
|
1600
|
+
"customElement": true
|
|
1601
|
+
},
|
|
1602
|
+
{
|
|
1603
|
+
"kind": "class",
|
|
1604
|
+
"description": "`<primitiv-tooltip>` — the state owner of a tooltip: a short description of\nits trigger that appears on hover after a delay, and at once on focus. It\ncloses when the pointer leaves (after a moment, so it can be reached),\non blur, on Escape and on a press outside. Moving from one trigger to the\nnext opens each next tooltip at once (the skip delay). The tooltip is shown\nas a `popover=\"manual\"` in the top layer, with the trigger as its source,\nwhich makes the trigger its implicit anchor for CSS anchor positioning.\n\nThe root finds its own parts and reconciles their ARIA from its reflected\nstate whenever a part arrives, leaves, or changes an attribute the root\nreads (the lifecycle is `PrimitivRootElement`'s).",
|
|
1605
|
+
"name": "PrimitivTooltipElement",
|
|
1606
|
+
"members": [
|
|
1607
|
+
{
|
|
1608
|
+
"kind": "field",
|
|
1609
|
+
"name": "#trigger",
|
|
1610
|
+
"privacy": "private",
|
|
1611
|
+
"type": {
|
|
1612
|
+
"text": "HTMLElement | null"
|
|
1613
|
+
},
|
|
1614
|
+
"default": "null",
|
|
1615
|
+
"description": "The decorated trigger button and the tooltip, as of the last reconcile."
|
|
1616
|
+
},
|
|
1617
|
+
{
|
|
1618
|
+
"kind": "field",
|
|
1619
|
+
"name": "#content",
|
|
1620
|
+
"privacy": "private",
|
|
1621
|
+
"type": {
|
|
1622
|
+
"text": "HTMLElement | null"
|
|
1623
|
+
},
|
|
1624
|
+
"default": "null"
|
|
1625
|
+
},
|
|
1626
|
+
{
|
|
1627
|
+
"kind": "field",
|
|
1628
|
+
"name": "#shown",
|
|
1629
|
+
"privacy": "private",
|
|
1630
|
+
"type": {
|
|
1631
|
+
"text": "HTMLElement | null"
|
|
1632
|
+
},
|
|
1633
|
+
"default": "null",
|
|
1634
|
+
"description": "The tooltip this root has shown, while it shows."
|
|
1635
|
+
},
|
|
1636
|
+
{
|
|
1637
|
+
"kind": "field",
|
|
1638
|
+
"name": "#bindings",
|
|
1639
|
+
"privacy": "private",
|
|
1640
|
+
"type": {
|
|
1641
|
+
"text": "AbortController | null"
|
|
1642
|
+
},
|
|
1643
|
+
"default": "null",
|
|
1644
|
+
"description": "The listeners on the trigger and the tooltip, rebuilt when either changes."
|
|
1645
|
+
},
|
|
1646
|
+
{
|
|
1647
|
+
"kind": "field",
|
|
1648
|
+
"name": "#tooltip",
|
|
1649
|
+
"privacy": "private",
|
|
1650
|
+
"readonly": true,
|
|
1651
|
+
"default": "new TooltipController(this.#host())"
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
"kind": "field",
|
|
1655
|
+
"name": "controller",
|
|
1656
|
+
"type": {
|
|
1657
|
+
"text": "{ connect(): void; disconnect(): void }"
|
|
1658
|
+
},
|
|
1659
|
+
"privacy": "protected",
|
|
1660
|
+
"readonly": true,
|
|
1661
|
+
"default": "{ connect: (): void => {}, disconnect: (): void => this.#disconnect(), }"
|
|
1662
|
+
},
|
|
1663
|
+
{
|
|
1664
|
+
"kind": "field",
|
|
1665
|
+
"name": "reconcileOn",
|
|
1666
|
+
"type": {
|
|
1667
|
+
"text": "readonly string[]"
|
|
1668
|
+
},
|
|
1669
|
+
"privacy": "protected",
|
|
1670
|
+
"readonly": true,
|
|
1671
|
+
"default": "[\"open\"]"
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"kind": "field",
|
|
1675
|
+
"name": "open",
|
|
1676
|
+
"type": {
|
|
1677
|
+
"text": "boolean"
|
|
1678
|
+
},
|
|
1679
|
+
"description": "Whether the tooltip is showing, reflected as the boolean `open` attribute."
|
|
1680
|
+
},
|
|
1681
|
+
{
|
|
1682
|
+
"kind": "method",
|
|
1683
|
+
"name": "#host",
|
|
1684
|
+
"privacy": "private",
|
|
1685
|
+
"return": {
|
|
1686
|
+
"type": {
|
|
1687
|
+
"text": "TooltipControllerHost"
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
"description": "The controller's view of this element: state lives in the reflected attribute."
|
|
1691
|
+
},
|
|
1692
|
+
{
|
|
1693
|
+
"kind": "method",
|
|
1694
|
+
"name": "#disconnect",
|
|
1695
|
+
"privacy": "private",
|
|
1696
|
+
"return": {
|
|
1697
|
+
"type": {
|
|
1698
|
+
"text": "void"
|
|
1699
|
+
}
|
|
1700
|
+
}
|
|
1701
|
+
},
|
|
1702
|
+
{
|
|
1703
|
+
"kind": "method",
|
|
1704
|
+
"name": "#bind",
|
|
1705
|
+
"privacy": "private",
|
|
1706
|
+
"return": {
|
|
1707
|
+
"type": {
|
|
1708
|
+
"text": "void"
|
|
1709
|
+
}
|
|
1710
|
+
},
|
|
1711
|
+
"parameters": [
|
|
1712
|
+
{
|
|
1713
|
+
"name": "trigger",
|
|
1714
|
+
"type": {
|
|
1715
|
+
"text": "HTMLElement | null"
|
|
1716
|
+
}
|
|
1717
|
+
},
|
|
1718
|
+
{
|
|
1719
|
+
"name": "content",
|
|
1720
|
+
"type": {
|
|
1721
|
+
"text": "HTMLElement | null"
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
],
|
|
1725
|
+
"description": "Listen on `trigger` and `content`, rebinding only when either changed."
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
"kind": "method",
|
|
1729
|
+
"name": "reconcile",
|
|
1730
|
+
"privacy": "protected",
|
|
1731
|
+
"return": {
|
|
1732
|
+
"type": {
|
|
1733
|
+
"text": "void"
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
},
|
|
1737
|
+
{
|
|
1738
|
+
"kind": "method",
|
|
1739
|
+
"name": "#show",
|
|
1740
|
+
"privacy": "private",
|
|
1741
|
+
"return": {
|
|
1742
|
+
"type": {
|
|
1743
|
+
"text": "void"
|
|
1744
|
+
}
|
|
1745
|
+
},
|
|
1746
|
+
"parameters": [
|
|
1747
|
+
{
|
|
1748
|
+
"name": "content",
|
|
1749
|
+
"type": {
|
|
1750
|
+
"text": "HTMLElement | null"
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
],
|
|
1754
|
+
"description": "Show `content` (anchored to the trigger), or hide what is showing when it is `null`."
|
|
1755
|
+
}
|
|
1756
|
+
],
|
|
1757
|
+
"events": [
|
|
1758
|
+
{
|
|
1759
|
+
"type": {
|
|
1760
|
+
"text": "CustomEvent<{ open: boolean }>"
|
|
1761
|
+
},
|
|
1762
|
+
"description": "Bubbles, cancelable, fired before a user-driven change is applied — hover, focus, blur, Escape or a press outside — with the open state afterwards. Call `preventDefault()` to veto it.",
|
|
1763
|
+
"name": "primitiv-tooltip-change"
|
|
1764
|
+
}
|
|
1765
|
+
],
|
|
1766
|
+
"attributes": [
|
|
1767
|
+
{
|
|
1768
|
+
"type": {
|
|
1769
|
+
"text": "boolean"
|
|
1770
|
+
},
|
|
1771
|
+
"description": "Whether the tooltip is showing. Reflected: it changes as the user hovers, focuses and dismisses it. Set it (or the `open` property) to show or hide it from script.",
|
|
1772
|
+
"name": "open"
|
|
1773
|
+
},
|
|
1774
|
+
{
|
|
1775
|
+
"type": {
|
|
1776
|
+
"text": "number"
|
|
1777
|
+
},
|
|
1778
|
+
"description": "How long, in milliseconds, a pointer rests on the trigger before the tooltip opens. Defaults to the provider's, or 700. Focus always opens it at once.",
|
|
1779
|
+
"name": "delay-duration"
|
|
1780
|
+
},
|
|
1781
|
+
{
|
|
1782
|
+
"type": {
|
|
1783
|
+
"text": "boolean"
|
|
1784
|
+
},
|
|
1785
|
+
"description": "Close as soon as the pointer leaves the trigger, rather than giving it a moment to reach the tooltip.",
|
|
1786
|
+
"name": "disable-hoverable-content"
|
|
1787
|
+
}
|
|
1788
|
+
],
|
|
1789
|
+
"superclass": {
|
|
1790
|
+
"name": "PrimitivRootElement",
|
|
1791
|
+
"module": "/src/internal/RootElement.ts"
|
|
1792
|
+
},
|
|
1793
|
+
"tagName": "primitiv-tooltip",
|
|
1794
|
+
"customElement": true,
|
|
1795
|
+
"summary": "The state owner of a tooltip, shown on hover and focus."
|
|
1796
|
+
},
|
|
1797
|
+
{
|
|
1798
|
+
"kind": "class",
|
|
1799
|
+
"description": "`<primitiv-tooltip-trigger>` — an interactive part. It decorates exactly one\nchild the consumer writes, a `<button>`, which opens the tooltip on hover and\nfocus and is described by it (`aria-describedby`), so the rendered DOM\nmatches React's (RFC 0033 D24).",
|
|
1800
|
+
"name": "PrimitivTooltipTriggerElement",
|
|
1801
|
+
"superclass": {
|
|
1802
|
+
"name": "ElementBase",
|
|
1803
|
+
"module": "/src/internal/element.ts"
|
|
1804
|
+
},
|
|
1805
|
+
"tagName": "primitiv-tooltip-trigger",
|
|
1806
|
+
"customElement": true
|
|
1807
|
+
},
|
|
1808
|
+
{
|
|
1809
|
+
"kind": "class",
|
|
1810
|
+
"description": "`<primitiv-tooltip-content>` — the tooltip itself. Structural: the root\ngives it an id, `role=\"tooltip\"`, `popover=\"manual\"` (write it in your markup\ntoo, so it is hidden before the script loads) and `data-state`.",
|
|
1811
|
+
"name": "PrimitivTooltipContentElement",
|
|
1812
|
+
"superclass": {
|
|
1813
|
+
"name": "ElementBase",
|
|
1814
|
+
"module": "/src/internal/element.ts"
|
|
1815
|
+
},
|
|
1816
|
+
"tagName": "primitiv-tooltip-content",
|
|
1817
|
+
"customElement": true
|
|
1818
|
+
},
|
|
1819
|
+
{
|
|
1820
|
+
"kind": "class",
|
|
1821
|
+
"description": "`<primitiv-tooltip-arrow>` — an optional, decorative pointer, inside the\ncontent. The element writes nothing on it; style it as you like.",
|
|
1822
|
+
"name": "PrimitivTooltipArrowElement",
|
|
1823
|
+
"superclass": {
|
|
1824
|
+
"name": "ElementBase",
|
|
1825
|
+
"module": "/src/internal/element.ts"
|
|
1826
|
+
},
|
|
1827
|
+
"tagName": "primitiv-tooltip-arrow",
|
|
1828
|
+
"customElement": true
|
|
1829
|
+
},
|
|
1830
|
+
{
|
|
1831
|
+
"kind": "function",
|
|
1832
|
+
"name": "defineTooltip",
|
|
1833
|
+
"return": {
|
|
1834
|
+
"type": {
|
|
1835
|
+
"text": "void"
|
|
1836
|
+
}
|
|
1837
|
+
},
|
|
1838
|
+
"parameters": [
|
|
1839
|
+
{
|
|
1840
|
+
"name": "registry",
|
|
1841
|
+
"default": "globalThis.customElements",
|
|
1842
|
+
"type": {
|
|
1843
|
+
"text": "ElementRegistry | undefined"
|
|
1844
|
+
}
|
|
1845
|
+
}
|
|
1846
|
+
],
|
|
1847
|
+
"description": "Define the five Tooltip elements on `registry` (the global `customElements`\nby default). Safe to call more than once, and a no-op where there is no\nregistry (a server render)."
|
|
1848
|
+
}
|
|
1849
|
+
],
|
|
1850
|
+
"exports": [
|
|
1851
|
+
{
|
|
1852
|
+
"kind": "js",
|
|
1853
|
+
"name": "ElementRegistry",
|
|
1854
|
+
"declaration": {
|
|
1855
|
+
"name": "ElementRegistry",
|
|
1856
|
+
"module": "src/tooltip/elements.ts"
|
|
1857
|
+
}
|
|
1858
|
+
},
|
|
1859
|
+
{
|
|
1860
|
+
"kind": "js",
|
|
1861
|
+
"name": "PrimitivTooltipProviderElement",
|
|
1862
|
+
"declaration": {
|
|
1863
|
+
"name": "PrimitivTooltipProviderElement",
|
|
1864
|
+
"module": "src/tooltip/elements.ts"
|
|
1865
|
+
}
|
|
1866
|
+
},
|
|
1867
|
+
{
|
|
1868
|
+
"kind": "js",
|
|
1869
|
+
"name": "PrimitivTooltipElement",
|
|
1870
|
+
"declaration": {
|
|
1871
|
+
"name": "PrimitivTooltipElement",
|
|
1872
|
+
"module": "src/tooltip/elements.ts"
|
|
1873
|
+
}
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
"kind": "js",
|
|
1877
|
+
"name": "PrimitivTooltipTriggerElement",
|
|
1878
|
+
"declaration": {
|
|
1879
|
+
"name": "PrimitivTooltipTriggerElement",
|
|
1880
|
+
"module": "src/tooltip/elements.ts"
|
|
1881
|
+
}
|
|
1882
|
+
},
|
|
1883
|
+
{
|
|
1884
|
+
"kind": "js",
|
|
1885
|
+
"name": "PrimitivTooltipContentElement",
|
|
1886
|
+
"declaration": {
|
|
1887
|
+
"name": "PrimitivTooltipContentElement",
|
|
1888
|
+
"module": "src/tooltip/elements.ts"
|
|
1889
|
+
}
|
|
1890
|
+
},
|
|
1891
|
+
{
|
|
1892
|
+
"kind": "js",
|
|
1893
|
+
"name": "PrimitivTooltipArrowElement",
|
|
1894
|
+
"declaration": {
|
|
1895
|
+
"name": "PrimitivTooltipArrowElement",
|
|
1896
|
+
"module": "src/tooltip/elements.ts"
|
|
1897
|
+
}
|
|
1898
|
+
},
|
|
1899
|
+
{
|
|
1900
|
+
"kind": "js",
|
|
1901
|
+
"name": "defineTooltip",
|
|
1902
|
+
"declaration": {
|
|
1903
|
+
"name": "defineTooltip",
|
|
1904
|
+
"module": "src/tooltip/elements.ts"
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1907
|
+
]
|
|
1551
1908
|
}
|
|
1552
1909
|
]
|
|
1553
1910
|
}
|
package/dist/define/index.d.ts
CHANGED
package/dist/define/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-effect entry: importing this module defines the five Tooltip elements
|
|
3
|
+
* (`<primitiv-tooltip>`, `-provider`, `-trigger`, `-content`, `-arrow`) on the
|
|
4
|
+
* global `customElements` registry.
|
|
5
|
+
*
|
|
6
|
+
* ```html
|
|
7
|
+
* <script type="module">import "@primitiv-ui/web/define/tooltip";</script>
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
import { defineTooltip } from "../tooltip/elements.js";
|
|
11
|
+
defineTooltip();
|
|
@@ -23,3 +23,7 @@ export type PrimitivModalChangeEvent = CustomEvent<{
|
|
|
23
23
|
export type PrimitivPopoverChangeEvent = CustomEvent<{
|
|
24
24
|
open: boolean;
|
|
25
25
|
}>;
|
|
26
|
+
/** The `primitiv-tooltip-change` event: bubbles, cancelable, fired before the change applies, with the open state afterwards. */
|
|
27
|
+
export type PrimitivTooltipChangeEvent = CustomEvent<{
|
|
28
|
+
open: boolean;
|
|
29
|
+
}>;
|
|
@@ -23,12 +23,13 @@ import type { PrimitivCollapsibleContentElement, PrimitivCollapsibleElement, Pri
|
|
|
23
23
|
import type { PrimitivModalCloseElement, PrimitivModalContentElement, PrimitivModalDescriptionElement, PrimitivModalElement, PrimitivModalTitleElement, PrimitivModalTriggerElement } from "../modal/elements.js";
|
|
24
24
|
import type { PrimitivPopoverAnchorElement, PrimitivPopoverCloseElement, PrimitivPopoverContentElement, PrimitivPopoverDescriptionElement, PrimitivPopoverElement, PrimitivPopoverTitleElement, PrimitivPopoverTriggerElement } from "../popover/elements.js";
|
|
25
25
|
import type { PrimitivTabsContentElement, PrimitivTabsElement, PrimitivTabsListElement, PrimitivTabsTriggerElement } from "../tabs/elements.js";
|
|
26
|
-
import type {
|
|
26
|
+
import type { PrimitivTooltipArrowElement, PrimitivTooltipContentElement, PrimitivTooltipElement, PrimitivTooltipProviderElement, PrimitivTooltipTriggerElement } from "../tooltip/elements.js";
|
|
27
|
+
import type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent, PrimitivTooltipChangeEvent } from "./events.js";
|
|
27
28
|
/** React's own props for an element, plus `class`, which React 19 passes to custom elements. */
|
|
28
29
|
type ElementProps<E extends HTMLElement> = DetailedHTMLProps<HTMLAttributes<E>, E> & {
|
|
29
30
|
class?: string;
|
|
30
31
|
};
|
|
31
|
-
export type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent, };
|
|
32
|
+
export type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent, PrimitivTooltipChangeEvent, };
|
|
32
33
|
declare module "react" {
|
|
33
34
|
namespace JSX {
|
|
34
35
|
interface IntrinsicElements {
|
|
@@ -99,6 +100,21 @@ declare module "react" {
|
|
|
99
100
|
value: string;
|
|
100
101
|
"onprimitiv-tabs-show"?: (event: CustomEvent) => void;
|
|
101
102
|
};
|
|
103
|
+
"primitiv-tooltip": ElementProps<PrimitivTooltipElement> & {
|
|
104
|
+
open?: boolean;
|
|
105
|
+
"delay-duration"?: number | string;
|
|
106
|
+
"disable-hoverable-content"?: boolean;
|
|
107
|
+
"onprimitiv-tooltip-change"?: (event: PrimitivTooltipChangeEvent) => void;
|
|
108
|
+
};
|
|
109
|
+
"primitiv-tooltip-provider": ElementProps<PrimitivTooltipProviderElement> & {
|
|
110
|
+
"delay-duration"?: number | string;
|
|
111
|
+
"skip-delay-duration"?: number | string;
|
|
112
|
+
};
|
|
113
|
+
"primitiv-tooltip-trigger": ElementProps<PrimitivTooltipTriggerElement>;
|
|
114
|
+
"primitiv-tooltip-content": ElementProps<PrimitivTooltipContentElement> & {
|
|
115
|
+
popover?: "auto" | "manual" | "";
|
|
116
|
+
};
|
|
117
|
+
"primitiv-tooltip-arrow": ElementProps<PrimitivTooltipArrowElement>;
|
|
102
118
|
}
|
|
103
119
|
}
|
|
104
120
|
}
|
|
@@ -22,7 +22,8 @@ import type { PrimitivCollapsibleContentElement, PrimitivCollapsibleElement, Pri
|
|
|
22
22
|
import type { PrimitivModalCloseElement, PrimitivModalContentElement, PrimitivModalDescriptionElement, PrimitivModalElement, PrimitivModalTitleElement, PrimitivModalTriggerElement } from "../modal/elements.js";
|
|
23
23
|
import type { PrimitivPopoverAnchorElement, PrimitivPopoverCloseElement, PrimitivPopoverContentElement, PrimitivPopoverDescriptionElement, PrimitivPopoverElement, PrimitivPopoverTitleElement, PrimitivPopoverTriggerElement } from "../popover/elements.js";
|
|
24
24
|
import type { PrimitivTabsContentElement, PrimitivTabsElement, PrimitivTabsListElement, PrimitivTabsTriggerElement } from "../tabs/elements.js";
|
|
25
|
-
import type {
|
|
25
|
+
import type { PrimitivTooltipArrowElement, PrimitivTooltipContentElement, PrimitivTooltipElement, PrimitivTooltipProviderElement, PrimitivTooltipTriggerElement } from "../tooltip/elements.js";
|
|
26
|
+
import type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent, PrimitivTooltipChangeEvent } from "./events.js";
|
|
26
27
|
/** Svelte's own attributes and events for an element. */
|
|
27
28
|
type Attributes<E extends HTMLElement> = HTMLAttributes<E>;
|
|
28
29
|
declare module "svelte/elements" {
|
|
@@ -92,6 +93,19 @@ declare module "svelte/elements" {
|
|
|
92
93
|
value: string;
|
|
93
94
|
"onprimitiv-tabs-show"?: (event: CustomEvent) => void;
|
|
94
95
|
};
|
|
96
|
+
"primitiv-tooltip": Attributes<PrimitivTooltipElement> & {
|
|
97
|
+
open?: boolean;
|
|
98
|
+
"delay-duration"?: number | string;
|
|
99
|
+
"disable-hoverable-content"?: boolean;
|
|
100
|
+
"onprimitiv-tooltip-change"?: (event: PrimitivTooltipChangeEvent) => void;
|
|
101
|
+
};
|
|
102
|
+
"primitiv-tooltip-provider": Attributes<PrimitivTooltipProviderElement> & {
|
|
103
|
+
"delay-duration"?: number | string;
|
|
104
|
+
"skip-delay-duration"?: number | string;
|
|
105
|
+
};
|
|
106
|
+
"primitiv-tooltip-trigger": Attributes<PrimitivTooltipTriggerElement>;
|
|
107
|
+
"primitiv-tooltip-content": Attributes<PrimitivTooltipContentElement>;
|
|
108
|
+
"primitiv-tooltip-arrow": Attributes<PrimitivTooltipArrowElement>;
|
|
95
109
|
}
|
|
96
110
|
}
|
|
97
111
|
export {};
|
package/dist/frameworks/vue.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* JSR does not allow a published module to do.
|
|
20
20
|
*/
|
|
21
21
|
import type { DefineComponent, EmitsOptions } from "vue";
|
|
22
|
-
import type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent } from "./events.js";
|
|
22
|
+
import type { PrimitivAccordionChangeEvent, PrimitivCollapsibleChangeEvent, PrimitivModalChangeEvent, PrimitivPopoverChangeEvent, PrimitivTabsChangeEvent, PrimitivTooltipChangeEvent } from "./events.js";
|
|
23
23
|
/** A tag as Vue's template checker sees it: its props, and the events it emits. */
|
|
24
24
|
type Tag<Props, Events extends EmitsOptions = Record<never, never>> = DefineComponent<Props, Record<never, never>, Record<never, never>, Record<never, never>, Record<never, never>, Record<never, never>, Record<never, never>, Events>;
|
|
25
25
|
declare module "vue" {
|
|
@@ -97,6 +97,20 @@ declare module "vue" {
|
|
|
97
97
|
}, {
|
|
98
98
|
"primitiv-tabs-show": (event: CustomEvent) => void;
|
|
99
99
|
}>;
|
|
100
|
+
"primitiv-tooltip": Tag<{
|
|
101
|
+
open?: boolean | "";
|
|
102
|
+
delayDuration?: number | string;
|
|
103
|
+
disableHoverableContent?: boolean | "";
|
|
104
|
+
}, {
|
|
105
|
+
"primitiv-tooltip-change": (event: PrimitivTooltipChangeEvent) => void;
|
|
106
|
+
}>;
|
|
107
|
+
"primitiv-tooltip-provider": Tag<{
|
|
108
|
+
delayDuration?: number | string;
|
|
109
|
+
skipDelayDuration?: number | string;
|
|
110
|
+
}>;
|
|
111
|
+
"primitiv-tooltip-trigger": Tag<Record<never, never>>;
|
|
112
|
+
"primitiv-tooltip-content": Tag<Record<never, never>>;
|
|
113
|
+
"primitiv-tooltip-arrow": Tag<Record<never, never>>;
|
|
100
114
|
}
|
|
101
115
|
}
|
|
102
116
|
export {};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED