@data-slot/collapsible 0.2.4 → 0.2.5
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 +17 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -57,6 +57,23 @@ const collapsible = createCollapsible(element, {
|
|
|
57
57
|
| `defaultOpen` | `boolean` | `false` | Initial open state |
|
|
58
58
|
| `onOpenChange` | `(open: boolean) => void` | `undefined` | Callback when open state changes (not called on init) |
|
|
59
59
|
|
|
60
|
+
### Data Attributes
|
|
61
|
+
|
|
62
|
+
Options can also be set via data attributes on the root element. JS options take precedence.
|
|
63
|
+
|
|
64
|
+
| Attribute | Type | Default | Description |
|
|
65
|
+
|-----------|------|---------|-------------|
|
|
66
|
+
| `data-default-open` | boolean | `false` | Initial open state |
|
|
67
|
+
|
|
68
|
+
Boolean attributes: present or `"true"` = true, `"false"` = false, absent = default.
|
|
69
|
+
|
|
70
|
+
```html
|
|
71
|
+
<!-- Start expanded -->
|
|
72
|
+
<div data-slot="collapsible" data-default-open>
|
|
73
|
+
...
|
|
74
|
+
</div>
|
|
75
|
+
```
|
|
76
|
+
|
|
60
77
|
### Controller
|
|
61
78
|
|
|
62
79
|
| Method/Property | Description |
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)];let n=
|
|
1
|
+
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=new WeakMap;function r(e,t,r){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=n.get(e);i||(i=new Set,n.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${r}`))}function i(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function a(e,t){for(let n of i(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function o(e,t){return i(t).some(t=>e.hasAttribute(t))}const s=new Set([``,`true`,`1`,`yes`]),c=new Set([`false`,`0`,`no`]);function l(e,t){if(!o(e,t))return;let n=a(e,t);if(n===null)return;let i=n.toLowerCase();if(s.has(i))return!0;if(c.has(i))return!1;r(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}let u=0;const d=(e,t)=>e.id||=`${t}-${++u}`,f=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))};function p(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const m=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),h=new WeakSet;function g(t,n={}){let r=n.defaultOpen??l(t,`defaultOpen`)??!1,i=n.onOpenChange,a=e(t,`collapsible-trigger`),o=e(t,`collapsible-content`);if(!a||!o)throw Error(`Collapsible requires trigger and content slots`);let s=r,c=[],u=d(o,`collapsible-content`),g=d(a,`collapsible-trigger`);a.setAttribute(`aria-controls`,u),o.setAttribute(`role`,`region`),o.setAttribute(`aria-labelledby`,g);let _=e=>{t.setAttribute(`data-state`,e),o.setAttribute(`data-state`,e)},v=e=>{s!==e&&(s=e,f(a,`expanded`,s),o.hidden=!s,_(s?`open`:`closed`),m(t,`collapsible:change`,{open:s}),i?.(s))};f(a,`expanded`,s),o.hidden=!s,_(s?`open`:`closed`),c.push(p(a,`click`,()=>{a.hasAttribute(`disabled`)||a.getAttribute(`aria-disabled`)===`true`||v(!s)}));let y={open:()=>v(!0),close:()=>v(!1),toggle:()=>v(!s),get isOpen(){return s},destroy:()=>{c.forEach(e=>e()),c.length=0,h.delete(t)}};return y}function _(e=document){let n=[];for(let r of t(e,`collapsible`)){if(h.has(r))continue;h.add(r),n.push(g(r))}return n}exports.create=_,exports.createCollapsible=g;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)];let n=
|
|
1
|
+
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=new WeakMap;function r(e,t,r){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=n.get(e);i||(i=new Set,n.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${r}`))}function i(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function a(e,t){for(let n of i(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function o(e,t){return i(t).some(t=>e.hasAttribute(t))}const s=new Set([``,`true`,`1`,`yes`]),c=new Set([`false`,`0`,`no`]);function l(e,t){if(!o(e,t))return;let n=a(e,t);if(n===null)return;let i=n.toLowerCase();if(s.has(i))return!0;if(c.has(i))return!1;r(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}let u=0;const d=(e,t)=>e.id||=`${t}-${++u}`,f=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))};function p(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const m=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),h=new WeakSet;function g(t,n={}){let r=n.defaultOpen??l(t,`defaultOpen`)??!1,i=n.onOpenChange,a=e(t,`collapsible-trigger`),o=e(t,`collapsible-content`);if(!a||!o)throw Error(`Collapsible requires trigger and content slots`);let s=r,c=[],u=d(o,`collapsible-content`),g=d(a,`collapsible-trigger`);a.setAttribute(`aria-controls`,u),o.setAttribute(`role`,`region`),o.setAttribute(`aria-labelledby`,g);let _=e=>{t.setAttribute(`data-state`,e),o.setAttribute(`data-state`,e)},v=e=>{s!==e&&(s=e,f(a,`expanded`,s),o.hidden=!s,_(s?`open`:`closed`),m(t,`collapsible:change`,{open:s}),i?.(s))};f(a,`expanded`,s),o.hidden=!s,_(s?`open`:`closed`),c.push(p(a,`click`,()=>{a.hasAttribute(`disabled`)||a.getAttribute(`aria-disabled`)===`true`||v(!s)}));let y={open:()=>v(!0),close:()=>v(!1),toggle:()=>v(!s),get isOpen(){return s},destroy:()=>{c.forEach(e=>e()),c.length=0,h.delete(t)}};return y}function _(e=document){let n=[];for(let r of t(e,`collapsible`)){if(h.has(r))continue;h.add(r),n.push(g(r))}return n}export{_ as create,g as createCollapsible};
|