monochrome 0.4.0 → 0.5.0
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 +3 -3
- package/dist/index.js +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Accessible UI component library. Best-in-class performance. HTML-first, React and Vue supported.
|
|
4
4
|
|
|
5
5
|
<!-- badges -->
|
|
6
|
-
   
|
|
7
7
|
<!-- /badges -->
|
|
8
8
|
|
|
9
9
|
## Install
|
|
@@ -50,13 +50,13 @@ The Vue API is identical: `import { Accordion } from "monochrome/vue"`. Monochro
|
|
|
50
50
|
|
|
51
51
|
## Components
|
|
52
52
|
|
|
53
|
-
Four interactive UI patterns in <!-- size -->2.
|
|
53
|
+
Four interactive UI patterns in <!-- size -->2.3kB<!-- /size -->:
|
|
54
54
|
|
|
55
55
|
| Component | Description | Tests |
|
|
56
56
|
| --- | --- | ---: |
|
|
57
57
|
| **Accordion** | Grouped collapsible content sections | <!-- tests:accordion -->66<!-- /tests:accordion --> |
|
|
58
58
|
| **Collapsible** | Show and hide content with a button | <!-- tests:collapsible -->42<!-- /tests:collapsible --> |
|
|
59
|
-
| **Menu** | Dropdown menus, menubars, and submenus | <!-- tests:menu -->
|
|
59
|
+
| **Menu** | Dropdown menus, menubars, and submenus | <!-- tests:menu -->183<!-- /tests:menu --> |
|
|
60
60
|
| **Tabs** | Switch between multiple content panels | <!-- tests:tabs -->70<!-- /tests:tabs --> |
|
|
61
61
|
|
|
62
62
|
## How it works
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(typeof document<"u"){let E=null,
|
|
1
|
+
if(typeof document<"u"){let E=null,M=null,k=null,H=null,L=[],r=[],c=null,a=null,g=null,y=null,p=null,d=(e)=>e instanceof HTMLElement,u=(e,n)=>e instanceof HTMLButtonElement&&(!n||e.id.startsWith(n)),w=(e)=>d(e)&&e.role?.startsWith("menuitem")===!0&&e.ariaDisabled!=="true",T=(e)=>document.getElementById(e.getAttribute("aria-controls")||""),P=(e,n)=>{while(e){if(e.id.startsWith(n))return e;e=e.parentElement}return null},A=(e)=>{let n=(i)=>i?e(i.nextElementSibling||i.parentElement?.firstElementChild,n):null,t=(i)=>i?e(i.previousElementSibling||i.parentElement?.lastElementChild,t):null;return[n,t]},h=(e,n)=>{if(d(e)){let t=e.firstElementChild;if(k){if(d(t)){if(t===k){for(let i of L)i.ariaChecked="false";return t}if(t.role==="menuitemradio"){if(!H)t.ariaChecked="false";else L.push(t);return n(e)}}return H=!0,L=[],n(e)}if(w(t)&&(!M||t.textContent?.toLowerCase().startsWith(M)))return t.focus(),E=!0,t;else if(c!==e){if(!c)c=e;return n(e)}else c=null}return null},v=(e,n)=>{if(d(e)){if(c===e)return null;if(!c)c=e;let t=e.firstElementChild?.firstElementChild;if(u(t,"mct:a")){if(t.ariaDisabled==="true")return n(e);return E=!0,t.focus(),t}}return n(e)},R=(e,n)=>{if(u(e,"mct:t")){if(c===e)return null;if(!c)c=e;if(e.ariaDisabled==="true")return n(e);return E=!0,e.focus(),e}else return n(e)},[b,x]=A(h),[W,D]=A(v),[F,N]=A(R),C=(e)=>{let n=T(e);if(n){let t=e.ariaExpanded!=="true";e.ariaExpanded=t?"true":"false",n.ariaHidden=t?"false":"true",t?n.removeAttribute("hidden"):n.setAttribute("hidden","until-found")}},$=(e)=>{if(e.ariaDisabled==="true")return;if(e.ariaExpanded==="true")C(e);else{let n=P(e,"mcr:a");if(!n||n.getAttribute("data-mode")!=="single")C(e);else{let t=n.firstElementChild;while(t){let i=t.firstElementChild?.firstElementChild;if(d(i)&&(i===e||i.ariaExpanded==="true"))C(i);t=t.nextElementSibling}}}},S=(e)=>{if(e.ariaDisabled!=="true"&&e.ariaSelected!=="true"){let n=e.parentElement?.firstElementChild;while(d(n)){if(n===e||n.ariaSelected==="true"){let t=T(n);if(t){let i=n.ariaSelected!=="true";if(n.ariaSelected=i?"true":"false",n.tabIndex=i?0:-1,t.ariaHidden=i?"false":"true",t.hasAttribute("tabindex"))t.tabIndex=i?0:-1;i?t.removeAttribute("hidden"):t.setAttribute("hidden","until-found")}}n=n.nextElementSibling}}},f=(e,n=0)=>{if(e?.id.startsWith("mct:m")){let t=T(e);if(t)if(e.ariaExpanded==="true"){if(a)a.removeAttribute("data-safe");if(a=null,y=null,p=null,n!==3)e.focus();t.hidePopover(),e.ariaExpanded="false",t.ariaHidden="true"}else{r.push(e),t.showPopover(),e.ariaExpanded="true",t.ariaHidden="false";let i=e.getBoundingClientRect();if(t.style.setProperty("--top",`${i.top}px`),t.style.setProperty("--right",`${i.right}px`),t.style.setProperty("--bottom",`${i.bottom}px`),t.style.setProperty("--left",`${i.left}px`),r.length>1)t.dataset.placement=i.right+t.offsetWidth<=innerWidth?"right":"left";else t.dataset.placement=i.bottom+t.offsetHeight<=innerHeight?"bottom":"top";let s=e.parentElement;if(s)a=s,g=i,y=t,p=null;if(n===0)e.focus();else if(n===1)h(t.firstElementChild,b);else if(n===2)h(t.lastElementChild,x)}}},m=(e=0)=>{while(r[e])f(r.pop(),3)},B=(e)=>{if(e.role==="menuitemcheckbox")e.ariaChecked=e.ariaChecked==="true"?"false":"true";else if(e.role==="menuitemradio")k=e,H=null,L=[],b(e.parentElement),k=null,e.ariaChecked="true";else m()};addEventListener("click",(e)=>{E=null;let n=e.detail===0,t=d(e.target)?e.target:e.target instanceof Element?e.target.parentElement:null;if(t){let i=t;while(i){let s=i.id;if(s.startsWith("mct:")){if(s.startsWith("mct:m")){let l=n?1:3;if(P(i.parentElement,"mcc:m")){if(!r.includes(i))f(i,l)}else if(r[0]){let I=i!==r[0];if(m(),I)f(i,l)}else f(i,l)}else{if(r[0])m();if(s.startsWith("mct:a"))$(i);else if(s.startsWith("mct:c"))C(i);else if(s.startsWith("mct:t"))S(i)}break}else if(s.startsWith("mcc:m")&&r[0]){let l=t;while(l&&l!==i){if(w(l)&&!u(l,"mct:m")){B(l);break}l=l.parentElement}break}i=i.parentElement}if(!i&&r[0])m()}if(E)e.preventDefault()}),addEventListener("pointermove",(e)=>{if(e.pointerType==="touch")return;if(r[0]){if(r[1]&&a&&g&&y){if(e.clientX>=g.left&&e.clientX<=g.right&&e.clientY>=g.top&&e.clientY<=g.bottom){if(p=y.getBoundingClientRect(),a.style.setProperty("--left",`${p.left}px`),a.style.setProperty("--right",`${p.right}px`),a.style.setProperty("--top",`${p.top}px`),a.style.setProperty("--bottom",`${p.bottom}px`),a.style.setProperty("--x",`${e.clientX}px`),a.style.setProperty("--y",`${e.clientY}px`),!a.hasAttribute("data-safe"))a.setAttribute("data-safe","")}else if(a.hasAttribute("data-safe")&&p&&(e.target!==a||(p.left-g.right)*e.movementX<0))a.removeAttribute("data-safe")}let n=e.target;if(d(n)){let t=[],i=n,s=!1,l=!1;while(i){if(w(i))l=!0;if(!l&&i.id.startsWith("mcc:")){s=!0;break}let o=i.firstElementChild;if(u(o,"mct:m"))t.unshift(o);i=i.parentElement}if(!s&&t[0]){let o=0;while(r[o]&&r[o]===t[o])o++;if(o===0&&(t[0].role!=="menuitem"||t[0].parentElement?.parentElement!==r[0].parentElement?.parentElement))return;m(o),f(t[o],3)}}}}),addEventListener("keydown",(e)=>{E=null,M=null,c=null;let n=e.target;if(u(n,"mct:a")){let t=n.parentElement?.parentElement;if(t)switch(e.key){case"ArrowDown":W(t);break;case"ArrowUp":D(t);break;case"Home":{let i=t.parentElement;if(i)v(i.firstElementChild,W);break}case"End":{let i=t.parentElement;if(i)v(i.lastElementChild,D);break}}}else if(u(n,"mct:t")){let t=n.parentElement?.ariaOrientation==="vertical";switch(e.key){case"ArrowDown":if(t)F(n);break;case"ArrowUp":if(t)N(n);break;case"ArrowRight":if(!t)F(n);break;case"ArrowLeft":if(!t)N(n);break;case"Home":R(n.parentElement?.firstElementChild,F);break;case"End":R(n.parentElement?.lastElementChild,N);break}}else{if(u(n,"mct:m")){let t=P(n,"mcc:m")===null;switch(e.key){case"ArrowDown":if(t)if(n.ariaExpanded!=="true")f(n,1);else{let i=T(n);if(i)h(i.firstElementChild,b)}break;case"ArrowUp":if(t)if(n.ariaExpanded!=="true")f(n,2);else{let i=T(n);if(i)h(i.lastElementChild,x)}break;case"ArrowRight":if(!t)f(n,1);break}}if(!E&&d(n)&&n.role?.startsWith("menuitem")&&n.parentElement){let t=n.parentElement,i=r[0]?.parentElement||t,s=P(n.parentElement,"mcc:m");switch(e.key){case"Tab":if(r[0])r[0].focus();m();break;case"ArrowDown":if(s)b(t);break;case"ArrowUp":if(s)x(t);break;case"ArrowRight":{let l=b(i);if(l){let o=r[0];if(m(),o&&u(l,"mct:m"))f(l,3)}break}case"ArrowLeft":if(r[1])f(r.pop(),0);else{let l=x(i);if(l){let o=r[0];if(m(),o&&u(l,"mct:m"))f(l,3)}}break;case"Home":h(t.parentElement?.firstElementChild,b);break;case"End":h(t.parentElement?.lastElementChild,x);break;default:if(/^[a-zA-Z]$/.test(e.key))M=e.key.toLowerCase(),b(t);break}}}if(e.key==="Escape"&&r[0])f(r.pop(),0);if(E)e.preventDefault()}),addEventListener("scroll",(e)=>{if(r[0]&&(!d(e.target)||!e.target.id.startsWith("mcc:m")))m()},!0),addEventListener("resize",()=>{if(r[0])m()}),addEventListener("beforematch",(e)=>{if(d(e.target)){let n=e.target;while(n){let t=n.getAttribute("aria-labelledby");if(t){let i=document.getElementById(t);if(u(i,"mct:a")){if(i.ariaExpanded!=="true")$(i)}else if(u(i,"mct:c")){if(i.ariaExpanded!=="true")C(i)}else if(u(i,"mct:t"))S(i)}n=n.parentElement}}})}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monochrome",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Accessible UI component library. Best-in-class performance. HTML-first, React and Vue supported.",
|
|
5
5
|
"author": "Colin van Eenige",
|
|
6
6
|
"license": "MIT",
|
|
@@ -96,14 +96,14 @@
|
|
|
96
96
|
"vue": "3.5.29"
|
|
97
97
|
},
|
|
98
98
|
"versionMeta": {
|
|
99
|
-
"gzipSize":
|
|
99
|
+
"gzipSize": 2305,
|
|
100
100
|
"routerGzipSize": 1052,
|
|
101
101
|
"tests": {
|
|
102
|
-
"total":
|
|
102
|
+
"total": 389,
|
|
103
103
|
"collapsible": 42,
|
|
104
104
|
"router": 28,
|
|
105
105
|
"accordion": 66,
|
|
106
|
-
"menu":
|
|
106
|
+
"menu": 183,
|
|
107
107
|
"tabs": 70
|
|
108
108
|
}
|
|
109
109
|
}
|