@nordhealth/components 1.0.0-alpha.33 → 1.0.0-alpha.34
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/custom-elements.json
CHANGED
|
@@ -872,6 +872,11 @@
|
|
|
872
872
|
"name": "inputRef",
|
|
873
873
|
"privacy": "private"
|
|
874
874
|
},
|
|
875
|
+
{
|
|
876
|
+
"kind": "field",
|
|
877
|
+
"name": "listRef",
|
|
878
|
+
"privacy": "private"
|
|
879
|
+
},
|
|
875
880
|
{
|
|
876
881
|
"kind": "field",
|
|
877
882
|
"name": "previousFocus",
|
|
@@ -2932,7 +2937,7 @@
|
|
|
2932
2937
|
},
|
|
2933
2938
|
{
|
|
2934
2939
|
"kind": "field",
|
|
2935
|
-
"name": "
|
|
2940
|
+
"name": "handleClickOut",
|
|
2936
2941
|
"privacy": "private"
|
|
2937
2942
|
}
|
|
2938
2943
|
]
|
package/lib/CommandMenu.js
CHANGED
|
@@ -3,5 +3,5 @@ import{b as e,r as t,D as o,p as s,T as n,_ as i,n as r,s as a}from"./DraftCompo
|
|
|
3
3
|
* @license
|
|
4
4
|
* Copyright 2017 Google LLC
|
|
5
5
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
6
|
-
*/const M=(e,t,o)=>{const s=new Map;for(let n=t;n<=o;n++)s.set(e[n],n);return s},S=p(class extends h{constructor(e){if(super(e),e.type!==m.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,o){let s;void 0===o?o=t:void 0!==t&&(s=t);const n=[],i=[];let r=0;for(const t of e)n[r]=s?s(t,r):r,i[r]=o(t,r),r++;return{values:i,keys:n}}render(e,t,o){return this.dt(e,t,o).values}update(t,[o,s,n]){var i;const r=v(t),{values:a,keys:l}=this.dt(o,s,n);if(!Array.isArray(r))return this.ct=l,a;const d=null!==(i=this.ct)&&void 0!==i?i:this.ct=[],c=[];let p,h,m=0,b=r.length-1,w=0,y=a.length-1;for(;m<=b&&w<=y;)if(null===r[m])m++;else if(null===r[b])b--;else if(d[m]===l[w])c[w]=u(r[m],a[w]),m++,w++;else if(d[b]===l[y])c[y]=u(r[b],a[y]),b--,y--;else if(d[m]===l[y])c[y]=u(r[m],a[y]),f(t,c[y+1],r[m]),m++,y--;else if(d[b]===l[w])c[w]=u(r[b],a[w]),f(t,r[m],r[b]),b--,w++;else if(void 0===p&&(p=M(l,w,y),h=M(d,m,b)),p.has(d[m]))if(p.has(d[b])){const e=h.get(l[w]),o=void 0!==e?r[e]:null;if(null===o){const e=f(t,r[m]);u(e,a[w]),c[w]=e}else c[w]=u(o,a[w]),f(t,r[m],o),r[e]=null;w++}else x(r[b]),b--;else x(r[m]),m++;for(;w<=y;){const e=f(t,c[y+1]);u(e,a[w]),c[w++]=e}for(;m<=b;){const e=r[m++];null!==e&&x(e)}return this.ct=l,g(t,c),e}});class A{constructor(e,t){this.handleFocusOut=e=>{const t=e.relatedTarget;!this.host.contains(t)&&this.onDismiss(e)},this.host=e,e.addController(this),this.onDismiss=t,this.shortcut=new I(this.host,{Escape:t})}hostConnected(){this.host.addEventListener("focusout",this.handleFocusOut)}hostDisconnected(){this.host.removeEventListener("focusout",this.handleFocusOut)}}const B=t`:host{--n-command-menu-width:640px;--n-command-menu-top:16%;--n-command-menu-height:290px;all:initial;font-family:var(--n-font-family);line-height:var(--n-line-height);font-feature-settings:var(--n-font-features)}.n-modal{display:none;position:fixed;z-index:var(--n-index-modal);inset-inline-start:0;inset-block-start:0;inline-size:100%;block-size:100%;overflow:auto}.n-modal.n-visible{display:block}.n-modal-content{position:relative;inset-block-start:var(--n-command-menu-top);margin:auto;display:flex;flex-direction:column;min-inline-size:0;background:var(--n-color-surface);border-radius:var(--n-border-radius);box-shadow:var(--n-box-shadow-modal);max-inline-size:var(--n-command-menu-width);overflow:hidden}.n-bump{animation:zoom-in-zoom-out var(--n-transition-slowly)}@keyframes zoom-in-zoom-out{0%{transform:translateY(-10px) scale(.97);opacity:0}100%{transform:translateY(0) scale(1.0001);opacity:1}}.n-modal-footer{display:flex;gap:var(--n-space-s);padding:var(--n-space-s) var(--n-space-m);font-size:calc(var(--n-font-size-s) - 1px);color:var(--n-color-text-weaker)}.n-help{display:flex;align-items:center;gap:2px}.n-help+.n-help{padding-inline-start:var(--n-space-s);border-inline-start:1px solid var(--n-color-border-strong)}.n-help svg{padding:3px 4px;inline-size:10px}.n-help.n-backspace svg{inline-size:12px}.n-search-wrapper{display:flex;border-block-end:1px solid var(--n-color-border)}[role=combobox]{flex:1;font-size:var(--n-font-size-l);font-weight:var(--n-font-weight);font-family:inherit;background:0 0;color:var(--n-color-text);border:none;border-radius:0;appearance:none;outline:0;margin:0;padding:var(--n-space-m)}[role=combobox]::-webkit-input-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=combobox]::-moz-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=combobox]:-ms-input-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=listbox]{max-block-size:var(--n-command-menu-height);overflow:auto;scroll-behavior:smooth;margin:0;padding:0}.n-group-header{line-height:var(--n-line-height);border-block-end:1px solid var(--n-color-border);padding:calc(var(--n-space-s)/ 1.4) var(--n-space-m);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:var(--n-font-size-s);background:var(--n-color-surface-raised);font-weight:var(--n-font-weight-active);color:var(--n-color-text-weaker)}.n-command-empty{display:flex;flex:1;flex-direction:column;border-inline-start:2px solid transparent;align-items:flex-start;color:var(--n-color-text);border-block-end:1px solid var(--n-color-border);padding:calc(var(--n-space-m)/ 1.5) var(--n-space-m)}.n-command-empty .n-title{flex:1;margin-block-start:var(--n-space-s);margin-inline-end:calc(var(--n-space-s)/ 2);max-inline-size:100%;font-size:var(--n-font-size-m);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.n-command-empty .n-tip{flex:1;margin-block-start:var(--n-space-s);margin-block-end:var(--n-space-m);font-size:var(--n-font-size-s);color:var(--n-color-text-weaker)}`;let D=class extends(o(a)){constructor(){super(...arguments),this.inputRef=b(),this.dismissController=new A(this,(()=>this.close())),this.keyboardController=new L(this,{trigger:()=>this.select(),goBack:()=>this.goBack(),end:()=>this.end(),start:()=>this.start(),next:()=>this.next(),previous:()=>this.previous(),toggleOpen:()=>this.toggleOpen()}),this.open=!1,this.placeholder="Type a command or search...",this.commands=[],this.search="",this.bump=!0,this.selectedIndex=0,this.filteredCommands=[]}get selected(){return this.filteredCommands[this.selectedIndex]}show(e={}){this.open=!0,this.setParent(e.parent),this.dispatchEvent(new $("open"))}close(){var e;this.open=!1,this.dispatchEvent(new $("close")),null===(e=this.previousFocus)||void 0===e||e.focus(),this.previousFocus=void 0}toggleOpen(){this.open?this.close():this.show()}focus(){var e;null===(e=this.inputRef.value)||void 0===e||e.focus()}willUpdate(e){e.has("commands")&&this.keyboardController.registerCommandShortcuts(),e.has("open")&&this.open&&(this.bump=!0),(e.has("search")||e.has("parent")||e.has("commands"))&&this.filterCommands()}updated(e){e.has("open")&&this.open&&(this.previousFocus=j(document),this.focus()),super.updated(e)}render(){var e;const t=C(this.filteredCommands,"section"),o=0===this.filteredCommands.length?"no-results":null===(e=this.selected)||void 0===e?void 0:e.id;return s`<div class="${y({"n-visible":this.open,"n-modal":!0})}"><div @animationend="${this.handleAnimationEnd}" class="${y({"n-bump":this.bump,"n-modal-content":!0})}"><div class="n-search-wrapper"><nord-visually-hidden id="instructions">Press 'Enter' to confirm your input or 'Escape' to cancel</nord-visually-hidden><input type="text" id="search" @input="${this.handleInput}" ${w(this.inputRef)} placeholder="${this.placeholder}" .value="${this.search}" spellcheck="false" autocomplete="off" autocapitalize="off" aria-label="Type the name of a command to run." aria-autocomplete="list" aria-haspopup="listbox" role="combobox" aria-controls="list" aria-expanded="true" aria-activedescendant="${k(o)}" aria-describedby="instructions"></div><div class="n-modal-body"><div id="list" role="listbox" aria-label="Commands" tabindex="0">${0===this.filteredCommands.length?s`<div id="no-results" class="n-command-empty" role="option" aria-selected="true"><div class="n-title">No results for “${this.search}”</div><div class="n-tip">Search tips: some search terms require exact match. Try typing the entire command name, or use a different word or phrase.</div></div>`:Array.from(t,(([e,t])=>this.renderSection(e,t)))}</div></div><slot name="footer"><div class="n-modal-footer" slot="footer"><span class="n-help">${c('<svg viewBox="0 0 140 140" xmlns="http://www.w3.org/2000/svg"><path d="M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167" fill="none" stroke="currentColor" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/></svg>')} Navigate</span> <span class="n-help">${c('<svg viewBox="0 0 140 140" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="14"><path d="M35 133 7 105l28-28"/><path d="M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77"/></g></svg>')} Select</span> <span class="n-help">Esc to dismiss</span> <span class="n-help n-backspace">${c('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z" clip-rule="evenodd"/></svg>')} Move to parent</span></div></slot></div></div>`}renderSection(e,t){const o=`section-${e}`;return s`<div role="group" aria-labelledby="${k(e?o:void 0)}">${e?s`<div class="n-group-header" role="presentation" id="${k(o)}">${e}</div>`:n} ${S(t,(e=>e.id),(e=>{var t,o;return s`<nord-command-menu-action id="${e.id}" .command="${e}" ?selected="${e.id===(null===(t=this.selected)||void 0===t?void 0:t.id)}" @click="${()=>this.select(e)}" role="option" aria-selected="${k(e.id===(null===(o=this.selected)||void 0===o?void 0:o.id)||void 0)}"></nord-command-menu-action>`}))}</div>`}handleAnimationEnd(){this.bump=!1}async handleInput(e){const t=e.target;this.setSearch(t.value)}select(e=this.selected){var t;this.commands.some((t=>t.parent===e.id))?(this.setParent(e.id),this.bump=!0,this.focus()):this.close(),this.setSearch(""),null===(t=e.handler)||void 0===t||t.call(e,this),this.dispatchEvent(new E(e))}start(){this.selectedIndex=0}end(){this.selectedIndex=this.filteredCommands.length-1}next(){this.selectedIndex=z(this.selectedIndex+1,0,this.filteredCommands.length-1)}previous(){this.selectedIndex=z(this.selectedIndex-1,0,this.filteredCommands.length-1)}goBack(){if(!this.search&&this.parent){const e=this.commands.find((e=>e.id===this.parent));this.setParent(null==e?void 0:e.parent)}}setParent(e){this.parent=e,this.setSearch("")}setSearch(e){this.search=e,this.selectedIndex=0}filterCommands(){const e=this.search.toLocaleLowerCase().split(/\s+/);this.filteredCommands=this.commands.filter((({title:t,keywords:o="",parent:s})=>{const n=`${t} ${o}`.toLocaleLowerCase(),i=e.every((e=>n.includes(e)));return(!this.parent&&this.search||s===this.parent)&&i}))}};D.styles=B,i([l({type:Boolean})],D.prototype,"open",void 0),i([l({type:String})],D.prototype,"placeholder",void 0),i([l({type:Array})],D.prototype,"commands",void 0),i([d()],D.prototype,"parent",void 0),i([d()],D.prototype,"search",void 0),i([d()],D.prototype,"bump",void 0),i([d()],D.prototype,"selectedIndex",void 0),i([d()],D.prototype,"filteredCommands",void 0),D=i([r("nord-command-menu")],D);var F=D;export{F as default};
|
|
6
|
+
*/const M=(e,t,o)=>{const s=new Map;for(let n=t;n<=o;n++)s.set(e[n],n);return s},S=p(class extends h{constructor(e){if(super(e),e.type!==m.CHILD)throw Error("repeat() can only be used in text expressions")}dt(e,t,o){let s;void 0===o?o=t:void 0!==t&&(s=t);const n=[],i=[];let r=0;for(const t of e)n[r]=s?s(t,r):r,i[r]=o(t,r),r++;return{values:i,keys:n}}render(e,t,o){return this.dt(e,t,o).values}update(t,[o,s,n]){var i;const r=v(t),{values:a,keys:l}=this.dt(o,s,n);if(!Array.isArray(r))return this.ct=l,a;const d=null!==(i=this.ct)&&void 0!==i?i:this.ct=[],c=[];let p,h,m=0,b=r.length-1,w=0,y=a.length-1;for(;m<=b&&w<=y;)if(null===r[m])m++;else if(null===r[b])b--;else if(d[m]===l[w])c[w]=u(r[m],a[w]),m++,w++;else if(d[b]===l[y])c[y]=u(r[b],a[y]),b--,y--;else if(d[m]===l[y])c[y]=u(r[m],a[y]),f(t,c[y+1],r[m]),m++,y--;else if(d[b]===l[w])c[w]=u(r[b],a[w]),f(t,r[m],r[b]),b--,w++;else if(void 0===p&&(p=M(l,w,y),h=M(d,m,b)),p.has(d[m]))if(p.has(d[b])){const e=h.get(l[w]),o=void 0!==e?r[e]:null;if(null===o){const e=f(t,r[m]);u(e,a[w]),c[w]=e}else c[w]=u(o,a[w]),f(t,r[m],o),r[e]=null;w++}else x(r[b]),b--;else x(r[m]),m++;for(;w<=y;){const e=f(t,c[y+1]);u(e,a[w]),c[w++]=e}for(;m<=b;){const e=r[m++];null!==e&&x(e)}return this.ct=l,g(t,c),e}});class A{constructor(e,t){this.handleClickOut=e=>{const t=e.target;!this.host.contains(t)&&this.onDismiss(e)},this.host=e,e.addController(this),this.onDismiss=t,this.shortcut=new I(this.host,{Escape:t})}hostConnected(){document.addEventListener("click",this.handleClickOut,!0)}hostDisconnected(){document.removeEventListener("click",this.handleClickOut,!0)}}const B=t`:host{--n-command-menu-width:640px;--n-command-menu-top:16%;--n-command-menu-height:290px;all:initial;font-family:var(--n-font-family);line-height:var(--n-line-height);font-feature-settings:var(--n-font-features)}.n-modal{display:none;position:fixed;pointer-events:none;z-index:var(--n-index-modal);inset-inline-start:0;inset-block-start:0;inline-size:100%;block-size:100%;overflow:auto}.n-modal.n-visible{display:block}.n-modal-content{position:relative;pointer-events:all;inset-block-start:var(--n-command-menu-top);margin:auto;display:flex;flex-direction:column;min-inline-size:0;background:var(--n-color-surface);border-radius:var(--n-border-radius);box-shadow:var(--n-box-shadow-modal);max-inline-size:var(--n-command-menu-width);overflow:hidden}.n-bump{animation:zoom-in-zoom-out var(--n-transition-slowly)}@keyframes zoom-in-zoom-out{0%{transform:translateY(-10px) scale(.97);opacity:0}100%{transform:translateY(0) scale(1.0001);opacity:1}}.n-modal-footer{display:flex;gap:var(--n-space-s);padding:var(--n-space-s) var(--n-space-m);font-size:calc(var(--n-font-size-s) - 1px);color:var(--n-color-text-weaker)}.n-help{display:flex;align-items:center;gap:2px}.n-help+.n-help{padding-inline-start:var(--n-space-s);border-inline-start:1px solid var(--n-color-border-strong)}.n-help svg{padding:3px 4px;inline-size:10px}.n-help.n-backspace svg{inline-size:12px}.n-search-wrapper{display:flex;border-block-end:1px solid var(--n-color-border)}[role=combobox]{flex:1;font-size:var(--n-font-size-l);font-weight:var(--n-font-weight);font-family:inherit;background:0 0;color:var(--n-color-text);border:none;border-radius:0;appearance:none;outline:0;margin:0;padding:var(--n-space-m)}[role=combobox]::-webkit-input-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=combobox]::-moz-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=combobox]:-ms-input-placeholder{color:var(--n-color-text-weaker);opacity:.6!important}[role=listbox]{max-block-size:var(--n-command-menu-height);overflow:auto;margin:0;padding:0}.n-group-header{line-height:var(--n-line-height);border-block-end:1px solid var(--n-color-border);padding:calc(var(--n-space-s)/ 1.4) var(--n-space-m);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:var(--n-font-size-s);background:var(--n-color-surface-raised);font-weight:var(--n-font-weight-active);color:var(--n-color-text-weaker)}.n-command-empty{display:flex;flex:1;flex-direction:column;border-inline-start:2px solid transparent;align-items:flex-start;color:var(--n-color-text);border-block-end:1px solid var(--n-color-border);padding:calc(var(--n-space-m)/ 1.5) var(--n-space-m)}.n-command-empty .n-title{flex:1;margin-block-start:var(--n-space-s);margin-inline-end:calc(var(--n-space-s)/ 2);max-inline-size:100%;font-size:var(--n-font-size-m);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.n-command-empty .n-tip{flex:1;margin-block-start:var(--n-space-s);margin-block-end:var(--n-space-m);font-size:var(--n-font-size-s);color:var(--n-color-text-weaker)}`;let D=class extends(o(a)){constructor(){super(...arguments),this.inputRef=b(),this.listRef=b(),this.dismissController=new A(this,(()=>this.close())),this.keyboardController=new L(this,{trigger:()=>this.select(),goBack:()=>this.goBack(),end:()=>this.end(),start:()=>this.start(),next:()=>this.next(),previous:()=>this.previous(),toggleOpen:()=>this.toggleOpen()}),this.open=!1,this.placeholder="Type a command or search...",this.commands=[],this.search="",this.bump=!0,this.selectedIndex=0,this.filteredCommands=[]}get selected(){return this.filteredCommands[this.selectedIndex]}show(e={}){const t=this.listRef.value;this.open=!0,this.setParent(e.parent),setTimeout((()=>{t.scrollTop=0}),0),this.dispatchEvent(new $("open"))}close(){var e;this.open=!1,this.dispatchEvent(new $("close")),null===(e=this.previousFocus)||void 0===e||e.focus(),this.previousFocus=void 0}toggleOpen(){this.open?this.close():this.show()}focus(){var e;null===(e=this.inputRef.value)||void 0===e||e.focus()}willUpdate(e){e.has("commands")&&this.keyboardController.registerCommandShortcuts(),e.has("open")&&this.open&&(this.bump=!0),(e.has("search")||e.has("parent")||e.has("commands"))&&this.filterCommands()}updated(e){e.has("open")&&this.open&&(this.previousFocus=j(document),this.focus()),super.updated(e)}render(){var e;const t=C(this.filteredCommands,"section"),o=0===this.filteredCommands.length?"no-results":null===(e=this.selected)||void 0===e?void 0:e.id;return s`<div class="${y({"n-visible":this.open,"n-modal":!0})}"><div @animationend="${this.handleAnimationEnd}" class="${y({"n-bump":this.bump,"n-modal-content":!0})}"><div class="n-search-wrapper"><nord-visually-hidden id="instructions">Press 'Enter' to confirm your input or 'Escape' to cancel</nord-visually-hidden><input type="text" id="search" @input="${this.handleInput}" ${w(this.inputRef)} placeholder="${this.placeholder}" .value="${this.search}" spellcheck="false" autocomplete="off" autocapitalize="off" aria-label="Type the name of a command to run." aria-autocomplete="list" aria-haspopup="listbox" role="combobox" aria-controls="list" aria-expanded="true" aria-activedescendant="${k(o)}" aria-describedby="instructions"></div><div class="n-modal-body"><div id="list" ${w(this.listRef)} role="listbox" aria-label="Commands" tabindex="0">${0===this.filteredCommands.length?s`<div id="no-results" class="n-command-empty" role="option" aria-selected="true"><div class="n-title">No results for “${this.search}”</div><div class="n-tip">Search tips: some search terms require exact match. Try typing the entire command name, or use a different word or phrase.</div></div>`:Array.from(t,(([e,t])=>this.renderSection(e,t)))}</div></div><slot name="footer"><div class="n-modal-footer" slot="footer"><span class="n-help">${c('<svg viewBox="0 0 140 140" xmlns="http://www.w3.org/2000/svg"><path d="M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167" fill="none" stroke="currentColor" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/></svg>')} Navigate</span> <span class="n-help">${c('<svg viewBox="0 0 140 140" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="14"><path d="M35 133 7 105l28-28"/><path d="M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77"/></g></svg>')} Select</span> <span class="n-help">Esc to dismiss</span> <span class="n-help n-backspace">${c('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z" clip-rule="evenodd"/></svg>')} Move to parent</span></div></slot></div></div>`}renderSection(e,t){const o=`section-${e}`;return s`<div role="group" aria-labelledby="${k(e?o:void 0)}">${e?s`<div class="n-group-header" role="presentation" id="${k(o)}">${e}</div>`:n} ${S(t,(e=>e.id),(e=>{var t,o;return s`<nord-command-menu-action id="${e.id}" .command="${e}" ?selected="${e.id===(null===(t=this.selected)||void 0===t?void 0:t.id)}" @click="${()=>this.select(e)}" role="option" aria-selected="${k(e.id===(null===(o=this.selected)||void 0===o?void 0:o.id)||void 0)}"></nord-command-menu-action>`}))}</div>`}handleAnimationEnd(){this.bump=!1}async handleInput(e){const t=e.target;this.setSearch(t.value)}select(e=this.selected){var t;this.commands.some((t=>t.parent===e.id))?(this.setParent(e.id),this.bump=!0,this.focus()):this.close(),this.setSearch(""),null===(t=e.handler)||void 0===t||t.call(e,this),this.dispatchEvent(new E(e))}start(){this.selectedIndex=0}end(){this.selectedIndex=this.filteredCommands.length-1}next(){this.selectedIndex=z(this.selectedIndex+1,0,this.filteredCommands.length-1)}previous(){this.selectedIndex=z(this.selectedIndex-1,0,this.filteredCommands.length-1)}goBack(){if(!this.search&&this.parent){const e=this.commands.find((e=>e.id===this.parent));this.setParent(null==e?void 0:e.parent)}}setParent(e){this.parent=e,this.setSearch("")}setSearch(e){this.search=e,this.selectedIndex=0}filterCommands(){const e=this.search.toLocaleLowerCase().split(/\s+/);this.filteredCommands=this.commands.filter((({title:t,keywords:o="",parent:s})=>{const n=`${t} ${o}`.toLocaleLowerCase(),i=e.every((e=>n.includes(e)));return(!this.parent&&this.search||s===this.parent)&&i}))}};D.styles=B,i([l({type:Boolean})],D.prototype,"open",void 0),i([l({type:String})],D.prototype,"placeholder",void 0),i([l({type:Array})],D.prototype,"commands",void 0),i([d()],D.prototype,"parent",void 0),i([d()],D.prototype,"search",void 0),i([d()],D.prototype,"bump",void 0),i([d()],D.prototype,"selectedIndex",void 0),i([d()],D.prototype,"filteredCommands",void 0),D=i([r("nord-command-menu")],D);var O=D;export{O as default};
|
|
7
7
|
//# sourceMappingURL=CommandMenu.js.map
|
package/lib/CommandMenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandMenu.js","sources":["../node_modules/lit/node_modules/lit-html/directives/repeat.js","../src/common/controllers/LightDismissController.ts","../src/command-menu/CommandMenu.ts","../../icons/lib/assets/keyboard-arrow-up-down.js","../../icons/lib/assets/keyboard-return.js","../../icons/lib/assets/keyboard-backspace.js"],"sourcesContent":["import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){var d;const a=l(s),{values:p,keys:v}=this.dt(t,r,c);if(!Array.isArray(a))return this.ct=v,p;const h=null!==(d=this.ct)&&void 0!==d?d:this.ct=[],m=[];let y,x,j=0,k=a.length-1,w=0,A=p.length-1;for(;j<=k&&w<=A;)if(null===a[j])j++;else if(null===a[k])k--;else if(h[j]===v[w])m[w]=o(a[j],p[w]),j++,w++;else if(h[k]===v[A])m[A]=o(a[k],p[A]),k--,A--;else if(h[j]===v[A])m[A]=o(a[j],p[A]),i(s,m[A+1],a[j]),j++,A--;else if(h[k]===v[w])m[w]=o(a[k],p[w]),i(s,a[j],a[k]),k--,w++;else if(void 0===y&&(y=u(v,w,A),x=u(h,j,k)),y.has(h[j]))if(y.has(h[k])){const e=x.get(v[w]),t=void 0!==e?a[e]:null;if(null===t){const e=i(s,a[j]);o(e,p[w]),m[w]=e}else m[w]=o(t,p[w]),i(s,a[j],t),a[e]=null;w++}else n(a[k]),k--;else n(a[j]),j++;for(;w<=A;){const e=i(s,m[A+1]);o(e,p[w]),m[w++]=e}for(;j<=k;){const e=a[j++];null!==e&&n(e)}return this.ct=v,f(s,m),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { LitElement, ReactiveController } from \"lit\"\nimport { ShortcutController } from \"./ShortcutController.js\"\n\nexport class LightDismissController implements ReactiveController {\n private host: LitElement\n private shortcut: ShortcutController\n onDismiss: EventListener\n\n constructor(host: LitElement, onDismiss: EventListener) {\n this.host = host\n host.addController(this)\n\n this.onDismiss = onDismiss\n this.shortcut = new ShortcutController(this.host, { Escape: onDismiss })\n }\n\n hostConnected() {\n this.host.addEventListener(\"focusout\", this.handleFocusOut)\n }\n\n hostDisconnected() {\n this.host.removeEventListener(\"focusout\", this.handleFocusOut)\n }\n\n private handleFocusOut = (e: FocusEvent) => {\n const relatedTarget = e.relatedTarget as Element\n const isFocusOutside = !this.host.contains(relatedTarget)\n\n if (isFocusOutside) {\n this.onDismiss(e)\n }\n }\n}\n","import { LitElement, html, PropertyValues, nothing } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\nimport { repeat } from \"lit/directives/repeat.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport navigateIcon from \"@nordhealth/icons/lib/assets/keyboard-arrow-up-down.js\"\nimport enterIcon from \"@nordhealth/icons/lib/assets/keyboard-return.js\"\nimport backspaceIcon from \"@nordhealth/icons/lib/assets/keyboard-backspace.js\"\n\nimport { groupBy } from \"../common/collection.js\"\nimport { wrap } from \"../common/number.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { getFocusedElement } from \"../common/focus.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { KeyboardController } from \"./KeyboardController.js\"\n\nimport \"../visually-hidden/VisuallyHidden.js\"\nimport \"./CommandMenuAction.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { SelectEvent } from \"./events.js\"\nimport style from \"./CommandMenu.css\"\n\n/**\n * Command Menu allows users to navigate and use an app without touching the mouse and helps them transform into “power users” who can harness more advanced features far faster.\n *\n * @status draft\n * @category action\n * @slot footer - Used to replace the default footer contents.\n */\n@customElement(\"nord-command-menu\")\nexport default class CommandMenu extends DraftComponentMixin(LitElement) {\n static styles = style\n\n private inputRef = createRef<HTMLInputElement>()\n private previousFocus?: HTMLElement\n\n private dismissController = new LightDismissController(this, () => this.close())\n private keyboardController = new KeyboardController(this, {\n trigger: () => this.select(),\n goBack: () => this.goBack(),\n end: () => this.end(),\n start: () => this.start(),\n next: () => this.next(),\n previous: () => this.previous(),\n toggleOpen: () => this.toggleOpen(),\n })\n\n /**\n * Show or hide element.\n */\n @property({ type: Boolean }) open = false\n\n /**\n * Hint text to display in the search field.\n */\n @property({ type: String }) placeholder = \"Type a command or search...\"\n\n /**\n * Array of commands to be included in the menu.\n */\n @property({ type: Array }) commands: Array<ICommandMenuAction> = []\n\n @state() parent?: string\n @state() search: string = \"\"\n @state() private bump = true\n @state() private selectedIndex = 0\n @state() private filteredCommands: Array<ICommandMenuAction> = []\n\n private get selected(): ICommandMenuAction {\n return this.filteredCommands[this.selectedIndex]\n }\n\n /**\n * Show the command menu programmatically.\n */\n show(options: { parent?: string } = {}) {\n this.open = true\n this.setParent(options.parent)\n /**\n * The command menu was opened.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n }\n\n /**\n * Close the command menu programmatically.\n */\n close() {\n this.open = false\n /**\n * The command menu was closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n this.previousFocus?.focus()\n this.previousFocus = undefined\n }\n\n /**\n * Toggle the open state programmatically.\n */\n toggleOpen() {\n if (this.open) {\n this.close()\n } else {\n this.show()\n }\n }\n\n /**\n * Focus the command menu's input.\n */\n focus() {\n this.inputRef.value?.focus()\n }\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"commands\")) {\n this.keyboardController.registerCommandShortcuts()\n }\n\n if (changedProperties.has(\"open\") && this.open) {\n this.bump = true\n }\n\n if (changedProperties.has(\"search\") || changedProperties.has(\"parent\") || changedProperties.has(\"commands\")) {\n this.filterCommands()\n }\n }\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"open\") && this.open) {\n this.previousFocus = getFocusedElement(document) as HTMLElement\n this.focus()\n }\n\n super.updated(changedProperties)\n }\n\n override render() {\n const sections = groupBy(this.filteredCommands, \"section\")\n const activeDescendant = this.filteredCommands.length === 0 ? \"no-results\" : this.selected?.id\n\n return html`\n <div\n class=${classMap({\n \"n-visible\": this.open,\n \"n-modal\": true,\n })}\n >\n <div\n @animationend=${this.handleAnimationEnd}\n class=${classMap({\n \"n-bump\": this.bump,\n \"n-modal-content\": true,\n })}\n >\n <div class=\"n-search-wrapper\">\n <nord-visually-hidden id=\"instructions\">\n Press 'Enter' to confirm your input or 'Escape' to cancel\n </nord-visually-hidden>\n <input\n type=\"text\"\n id=\"search\"\n @input=${this.handleInput}\n ${ref(this.inputRef)}\n placeholder=${this.placeholder}\n .value=${this.search}\n spellcheck=\"false\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label=\"Type the name of a command to run.\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-controls=\"list\"\n aria-expanded=\"true\"\n aria-activedescendant=${ifDefined(activeDescendant)}\n aria-describedby=\"instructions\"\n />\n </div>\n\n <div class=\"n-modal-body\">\n <div id=\"list\" role=\"listbox\" aria-label=\"Commands\" tabindex=\"0\">\n ${this.filteredCommands.length === 0\n ? html`<div id=\"no-results\" class=\"n-command-empty\" role=\"option\" aria-selected=\"true\">\n <div class=\"n-title\">No results for “${this.search}”</div>\n <div class=\"n-tip\">\n Search tips: some search terms require exact match. Try typing the entire command name, or use\n a different word or phrase.\n </div>\n </div>`\n : Array.from(sections, ([section, commands]) => this.renderSection(section, commands))}\n </div>\n </div>\n <slot name=\"footer\">\n <div class=\"n-modal-footer\" slot=\"footer\">\n <span class=\"n-help\">${unsafeHTML(navigateIcon)} Navigate</span>\n <span class=\"n-help\">${unsafeHTML(enterIcon)} Select</span>\n <span class=\"n-help\">Esc to dismiss</span>\n <span class=\"n-help n-backspace\">${unsafeHTML(backspaceIcon)} Move to parent</span>\n </div>\n </slot>\n </div>\n </div>\n `\n }\n\n private renderSection(section: string | undefined, commands: ICommandMenuAction[]) {\n const sectionId = `section-${section}`\n\n // TODO: test on latest safari, since it seems to have issues with grouped options\n return html`\n <div role=\"group\" aria-labelledby=${ifDefined(section ? sectionId : undefined)}>\n ${section\n ? html`<div class=\"n-group-header\" role=\"presentation\" id=${ifDefined(sectionId)}>${section}</div>`\n : nothing}\n ${repeat(\n commands,\n command => command.id,\n command => html`\n <nord-command-menu-action\n id=${command.id}\n .command=${command}\n ?selected=${command.id === this.selected?.id}\n @click=${() => this.select(command)}\n role=\"option\"\n aria-selected=${ifDefined(command.id === this.selected?.id || undefined)}\n ></nord-command-menu-action>\n `\n )}\n </div>\n `\n }\n\n private handleAnimationEnd() {\n this.bump = false\n }\n\n private async handleInput(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement\n this.setSearch(input.value)\n }\n\n private select(command: ICommandMenuAction = this.selected) {\n const isParent = this.commands.some(item => item.parent === command.id)\n\n if (isParent) {\n this.setParent(command.id)\n this.bump = true\n this.focus()\n } else {\n this.close()\n }\n\n this.setSearch(\"\")\n command.handler?.(this)\n /**\n * User selected a command from the menu.\n */\n this.dispatchEvent(new SelectEvent(command))\n }\n\n private start() {\n this.selectedIndex = 0\n }\n\n private end() {\n this.selectedIndex = this.filteredCommands.length - 1\n }\n\n private next() {\n this.selectedIndex = wrap(this.selectedIndex + 1, 0, this.filteredCommands.length - 1)\n }\n\n private previous() {\n this.selectedIndex = wrap(this.selectedIndex - 1, 0, this.filteredCommands.length - 1)\n }\n\n private goBack() {\n if (this.search) {\n return\n }\n\n if (this.parent) {\n const parentCommand = this.commands.find(command => command.id === this.parent)\n this.setParent(parentCommand?.parent)\n }\n }\n\n private setParent(parent?: string) {\n this.parent = parent\n this.setSearch(\"\")\n }\n\n private setSearch(str: string) {\n this.search = str\n this.selectedIndex = 0\n }\n\n private filterCommands() {\n const searchTerms = this.search.toLocaleLowerCase().split(/\\s+/)\n\n this.filteredCommands = this.commands.filter(({ title, keywords = \"\", parent }) => {\n const searchSpace = `${title} ${keywords}`.toLocaleLowerCase()\n const matcher = searchTerms.every(term => searchSpace.includes(term))\n\n if (!this.parent && this.search) {\n // global search for items on root\n return matcher\n }\n\n return parent === this.parent && matcher\n })\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu\": CommandMenu\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"keyboard-arrow-up-down\"\nexport const tags = \"nordicon keyboard keys arrow up down shortcut\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"><path d=\"M35 133 7 105l28-28\"/><path d=\"M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77\"/></g></svg>'\nexport const title = \"keyboard-return\"\nexport const tags = \"nordicon keyboard return key shortcut\"\n","export default '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z\" clip-rule=\"evenodd\"/></svg>'\nexport const title = \"keyboard-backspace\"\nexport const tags = \"nordicon keyboard backspace back delete key shortcut\"\n"],"names":["u","e","s","t","r","Map","l","set","c","constructor","super","type","CHILD","Error","dt","o","i","values","keys","render","this","update","d","a","p","v","Array","isArray","ct","h","m","y","x","j","k","length","w","A","has","get","n","f","LightDismissController","host","onDismiss","relatedTarget","contains","addController","shortcut","ShortcutController","Escape","hostConnected","addEventListener","handleFocusOut","hostDisconnected","removeEventListener","CommandMenu","DraftComponentMixin","LitElement","createRef","close","KeyboardController","trigger","select","goBack","end","start","next","previous","toggleOpen","selected","filteredCommands","selectedIndex","show","options","open","setParent","parent","dispatchEvent","NordEvent","previousFocus","focus","undefined","inputRef","value","willUpdate","changedProperties","keyboardController","registerCommandShortcuts","bump","filterCommands","updated","getFocusedElement","document","sections","groupBy","activeDescendant","id","html","classMap","handleAnimationEnd","handleInput","ref","placeholder","search","ifDefined","from","section","commands","renderSection","unsafeHTML","sectionId","nothing","repeat","command","async","event","input","target","setSearch","some","item","handler","SelectEvent","wrap","parentCommand","find","str","searchTerms","toLocaleLowerCase","split","filter","title","keywords","searchSpace","matcher","every","term","includes","style","__decorate","property","Boolean","String","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandMenu.js","sources":["../node_modules/lit/node_modules/lit-html/directives/repeat.js","../src/common/controllers/LightDismissController.ts","../src/command-menu/CommandMenu.ts","../../icons/lib/assets/keyboard-arrow-up-down.js","../../icons/lib/assets/keyboard-return.js","../../icons/lib/assets/keyboard-backspace.js"],"sourcesContent":["import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){var d;const a=l(s),{values:p,keys:v}=this.dt(t,r,c);if(!Array.isArray(a))return this.ct=v,p;const h=null!==(d=this.ct)&&void 0!==d?d:this.ct=[],m=[];let y,x,j=0,k=a.length-1,w=0,A=p.length-1;for(;j<=k&&w<=A;)if(null===a[j])j++;else if(null===a[k])k--;else if(h[j]===v[w])m[w]=o(a[j],p[w]),j++,w++;else if(h[k]===v[A])m[A]=o(a[k],p[A]),k--,A--;else if(h[j]===v[A])m[A]=o(a[j],p[A]),i(s,m[A+1],a[j]),j++,A--;else if(h[k]===v[w])m[w]=o(a[k],p[w]),i(s,a[j],a[k]),k--,w++;else if(void 0===y&&(y=u(v,w,A),x=u(h,j,k)),y.has(h[j]))if(y.has(h[k])){const e=x.get(v[w]),t=void 0!==e?a[e]:null;if(null===t){const e=i(s,a[j]);o(e,p[w]),m[w]=e}else m[w]=o(t,p[w]),i(s,a[j],t),a[e]=null;w++}else n(a[k]),k--;else n(a[j]),j++;for(;w<=A;){const e=i(s,m[A+1]);o(e,p[w]),m[w++]=e}for(;j<=k;){const e=a[j++];null!==e&&n(e)}return this.ct=v,f(s,m),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import { LitElement, ReactiveController } from \"lit\"\nimport { ShortcutController } from \"./ShortcutController.js\"\n\nexport class LightDismissController implements ReactiveController {\n private host: LitElement\n private shortcut: ShortcutController\n onDismiss: EventListener\n\n constructor(host: LitElement, onDismiss: EventListener) {\n this.host = host\n host.addController(this)\n\n this.onDismiss = onDismiss\n this.shortcut = new ShortcutController(this.host, { Escape: onDismiss })\n }\n\n hostConnected() {\n document.addEventListener(\"click\", this.handleClickOut, true)\n }\n\n hostDisconnected() {\n document.removeEventListener(\"click\", this.handleClickOut, true)\n }\n\n private handleClickOut = (e: MouseEvent) => {\n const target = e.target as Element\n const isClickOutside = !this.host.contains(target)\n\n if (isClickOutside) {\n this.onDismiss(e)\n }\n }\n}\n","import { LitElement, html, PropertyValues, nothing } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\nimport { repeat } from \"lit/directives/repeat.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport navigateIcon from \"@nordhealth/icons/lib/assets/keyboard-arrow-up-down.js\"\nimport enterIcon from \"@nordhealth/icons/lib/assets/keyboard-return.js\"\nimport backspaceIcon from \"@nordhealth/icons/lib/assets/keyboard-backspace.js\"\n\nimport { groupBy } from \"../common/collection.js\"\nimport { wrap } from \"../common/number.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { getFocusedElement } from \"../common/focus.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { KeyboardController } from \"./KeyboardController.js\"\n\nimport \"../visually-hidden/VisuallyHidden.js\"\nimport \"./CommandMenuAction.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { SelectEvent } from \"./events.js\"\nimport style from \"./CommandMenu.css\"\n\n/**\n * Command Menu allows users to navigate and use an app without touching the mouse and helps them transform into “power users” who can harness more advanced features far faster.\n *\n * @status draft\n * @category action\n * @slot footer - Used to replace the default footer contents.\n */\n@customElement(\"nord-command-menu\")\nexport default class CommandMenu extends DraftComponentMixin(LitElement) {\n static styles = style\n\n private inputRef = createRef<HTMLInputElement>()\n private listRef = createRef<HTMLElement>()\n private previousFocus?: HTMLElement\n\n private dismissController = new LightDismissController(this, () => this.close())\n private keyboardController = new KeyboardController(this, {\n trigger: () => this.select(),\n goBack: () => this.goBack(),\n end: () => this.end(),\n start: () => this.start(),\n next: () => this.next(),\n previous: () => this.previous(),\n toggleOpen: () => this.toggleOpen(),\n })\n\n /**\n * Show or hide element.\n */\n @property({ type: Boolean }) open = false\n\n /**\n * Hint text to display in the search field.\n */\n @property({ type: String }) placeholder = \"Type a command or search...\"\n\n /**\n * Array of commands to be included in the menu.\n */\n @property({ type: Array }) commands: Array<ICommandMenuAction> = []\n\n @state() parent?: string\n @state() search: string = \"\"\n @state() private bump = true\n @state() private selectedIndex = 0\n @state() private filteredCommands: Array<ICommandMenuAction> = []\n\n private get selected(): ICommandMenuAction {\n return this.filteredCommands[this.selectedIndex]\n }\n\n /**\n * Show the command menu programmatically.\n */\n show(options: { parent?: string } = {}) {\n const list = this.listRef.value as Element\n this.open = true\n this.setParent(options.parent)\n\n /**\n * The following won’t work without 0 timeout. What\n * we do here is basically making sure that the list\n * is always scrolled to the top when opened.\n */\n setTimeout(() => {\n list.scrollTop = 0\n }, 0)\n\n /**\n * The command menu was opened.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n }\n\n /**\n * Close the command menu programmatically.\n */\n close() {\n this.open = false\n /**\n * The command menu was closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n this.previousFocus?.focus()\n this.previousFocus = undefined\n }\n\n /**\n * Toggle the open state programmatically.\n */\n toggleOpen() {\n if (this.open) {\n this.close()\n } else {\n this.show()\n }\n }\n\n /**\n * Focus the command menu's input.\n */\n focus() {\n this.inputRef.value?.focus()\n }\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"commands\")) {\n this.keyboardController.registerCommandShortcuts()\n }\n\n if (changedProperties.has(\"open\") && this.open) {\n this.bump = true\n }\n\n if (changedProperties.has(\"search\") || changedProperties.has(\"parent\") || changedProperties.has(\"commands\")) {\n this.filterCommands()\n }\n }\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"open\") && this.open) {\n this.previousFocus = getFocusedElement(document) as HTMLElement\n this.focus()\n }\n\n super.updated(changedProperties)\n }\n\n override render() {\n const sections = groupBy(this.filteredCommands, \"section\")\n const activeDescendant = this.filteredCommands.length === 0 ? \"no-results\" : this.selected?.id\n\n return html`\n <div\n class=${classMap({\n \"n-visible\": this.open,\n \"n-modal\": true,\n })}\n >\n <div\n @animationend=${this.handleAnimationEnd}\n class=${classMap({\n \"n-bump\": this.bump,\n \"n-modal-content\": true,\n })}\n >\n <div class=\"n-search-wrapper\">\n <nord-visually-hidden id=\"instructions\">\n Press 'Enter' to confirm your input or 'Escape' to cancel\n </nord-visually-hidden>\n <input\n type=\"text\"\n id=\"search\"\n @input=${this.handleInput}\n ${ref(this.inputRef)}\n placeholder=${this.placeholder}\n .value=${this.search}\n spellcheck=\"false\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label=\"Type the name of a command to run.\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-controls=\"list\"\n aria-expanded=\"true\"\n aria-activedescendant=${ifDefined(activeDescendant)}\n aria-describedby=\"instructions\"\n />\n </div>\n\n <div class=\"n-modal-body\">\n <div id=\"list\" ${ref(this.listRef)} role=\"listbox\" aria-label=\"Commands\" tabindex=\"0\">\n ${this.filteredCommands.length === 0\n ? html`<div id=\"no-results\" class=\"n-command-empty\" role=\"option\" aria-selected=\"true\">\n <div class=\"n-title\">No results for “${this.search}”</div>\n <div class=\"n-tip\">\n Search tips: some search terms require exact match. Try typing the entire command name, or use\n a different word or phrase.\n </div>\n </div>`\n : Array.from(sections, ([section, commands]) => this.renderSection(section, commands))}\n </div>\n </div>\n <slot name=\"footer\">\n <div class=\"n-modal-footer\" slot=\"footer\">\n <span class=\"n-help\">${unsafeHTML(navigateIcon)} Navigate</span>\n <span class=\"n-help\">${unsafeHTML(enterIcon)} Select</span>\n <span class=\"n-help\">Esc to dismiss</span>\n <span class=\"n-help n-backspace\">${unsafeHTML(backspaceIcon)} Move to parent</span>\n </div>\n </slot>\n </div>\n </div>\n `\n }\n\n private renderSection(section: string | undefined, commands: ICommandMenuAction[]) {\n const sectionId = `section-${section}`\n\n // TODO: test on latest safari, since it seems to have issues with grouped options\n return html`\n <div role=\"group\" aria-labelledby=${ifDefined(section ? sectionId : undefined)}>\n ${section\n ? html`<div class=\"n-group-header\" role=\"presentation\" id=${ifDefined(sectionId)}>${section}</div>`\n : nothing}\n ${repeat(\n commands,\n command => command.id,\n command => html`\n <nord-command-menu-action\n id=${command.id}\n .command=${command}\n ?selected=${command.id === this.selected?.id}\n @click=${() => this.select(command)}\n role=\"option\"\n aria-selected=${ifDefined(command.id === this.selected?.id || undefined)}\n ></nord-command-menu-action>\n `\n )}\n </div>\n `\n }\n\n private handleAnimationEnd() {\n this.bump = false\n }\n\n private async handleInput(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement\n this.setSearch(input.value)\n }\n\n private select(command: ICommandMenuAction = this.selected) {\n const isParent = this.commands.some(item => item.parent === command.id)\n\n if (isParent) {\n this.setParent(command.id)\n this.bump = true\n this.focus()\n } else {\n this.close()\n }\n\n this.setSearch(\"\")\n command.handler?.(this)\n /**\n * User selected a command from the menu.\n */\n this.dispatchEvent(new SelectEvent(command))\n }\n\n private start() {\n this.selectedIndex = 0\n }\n\n private end() {\n this.selectedIndex = this.filteredCommands.length - 1\n }\n\n private next() {\n this.selectedIndex = wrap(this.selectedIndex + 1, 0, this.filteredCommands.length - 1)\n }\n\n private previous() {\n this.selectedIndex = wrap(this.selectedIndex - 1, 0, this.filteredCommands.length - 1)\n }\n\n private goBack() {\n if (this.search) {\n return\n }\n\n if (this.parent) {\n const parentCommand = this.commands.find(command => command.id === this.parent)\n this.setParent(parentCommand?.parent)\n }\n }\n\n private setParent(parent?: string) {\n this.parent = parent\n this.setSearch(\"\")\n }\n\n private setSearch(str: string) {\n this.search = str\n this.selectedIndex = 0\n }\n\n private filterCommands() {\n const searchTerms = this.search.toLocaleLowerCase().split(/\\s+/)\n\n this.filteredCommands = this.commands.filter(({ title, keywords = \"\", parent }) => {\n const searchSpace = `${title} ${keywords}`.toLocaleLowerCase()\n const matcher = searchTerms.every(term => searchSpace.includes(term))\n\n if (!this.parent && this.search) {\n // global search for items on root\n return matcher\n }\n\n return parent === this.parent && matcher\n })\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu\": CommandMenu\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"keyboard-arrow-up-down\"\nexport const tags = \"nordicon keyboard keys arrow up down shortcut\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"><path d=\"M35 133 7 105l28-28\"/><path d=\"M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77\"/></g></svg>'\nexport const title = \"keyboard-return\"\nexport const tags = \"nordicon keyboard return key shortcut\"\n","export default '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z\" clip-rule=\"evenodd\"/></svg>'\nexport const title = \"keyboard-backspace\"\nexport const tags = \"nordicon keyboard backspace back delete key shortcut\"\n"],"names":["u","e","s","t","r","Map","l","set","c","constructor","super","type","CHILD","Error","dt","o","i","values","keys","render","this","update","d","a","p","v","Array","isArray","ct","h","m","y","x","j","k","length","w","A","has","get","n","f","LightDismissController","host","onDismiss","target","contains","addController","shortcut","ShortcutController","Escape","hostConnected","document","addEventListener","handleClickOut","hostDisconnected","removeEventListener","CommandMenu","DraftComponentMixin","LitElement","createRef","close","KeyboardController","trigger","select","goBack","end","start","next","previous","toggleOpen","selected","filteredCommands","selectedIndex","show","options","list","listRef","value","open","setParent","parent","setTimeout","scrollTop","dispatchEvent","NordEvent","previousFocus","focus","undefined","inputRef","willUpdate","changedProperties","keyboardController","registerCommandShortcuts","bump","filterCommands","updated","getFocusedElement","sections","groupBy","activeDescendant","id","html","classMap","handleAnimationEnd","handleInput","ref","placeholder","search","ifDefined","from","section","commands","renderSection","unsafeHTML","sectionId","nothing","repeat","command","async","event","input","setSearch","some","item","handler","SelectEvent","wrap","parentCommand","find","str","searchTerms","toLocaleLowerCase","split","filter","title","keywords","searchSpace","matcher","every","term","includes","style","__decorate","property","Boolean","String","state","customElement"],"mappings":";;;;;GAMA,MAAMA,EAAE,CAACC,EAAEC,EAAEC,KAAK,MAAMC,EAAE,IAAIC,IAAI,IAAI,IAAIC,EAAEJ,EAAEI,GAAGH,EAAEG,IAAIF,EAAEG,IAAIN,EAAEK,GAAGA,GAAG,OAAOF,GAAGI,EAAEN,EAAE,cAAcC,EAAEM,YAAYR,GAAG,GAAGS,MAAMT,GAAGA,EAAEU,OAAOP,EAAEQ,MAAM,MAAMC,MAAM,iDAAiDC,GAAGb,EAAEC,EAAEC,GAAG,IAAIC,OAAE,IAASD,EAAEA,EAAED,OAAE,IAASA,IAAIE,EAAEF,GAAG,MAAMI,EAAE,GAAGS,EAAE,GAAG,IAAIC,EAAE,EAAE,IAAI,MAAMd,KAAKD,EAAEK,EAAEU,GAAGZ,EAAEA,EAAEF,EAAEc,GAAGA,EAAED,EAAEC,GAAGb,EAAED,EAAEc,GAAGA,IAAI,MAAM,CAACC,OAAOF,EAAEG,KAAKZ,GAAGa,OAAOlB,EAAEC,EAAEC,GAAG,OAAOiB,KAAKN,GAAGb,EAAEC,EAAEC,GAAGc,OAAOI,OAAOnB,GAAGC,EAAEC,EAAEI,IAAI,IAAIc,EAAE,MAAMC,EAAEjB,EAAEJ,IAAIe,OAAOO,EAAEN,KAAKO,GAAGL,KAAKN,GAAGX,EAAEC,EAAEI,GAAG,IAAIkB,MAAMC,QAAQJ,GAAG,OAAOH,KAAKQ,GAAGH,EAAED,EAAE,MAAMK,EAAE,QAAQP,EAAEF,KAAKQ,UAAK,IAASN,EAAEA,EAAEF,KAAKQ,GAAG,GAAGE,EAAE,GAAG,IAAIC,EAAEC,EAAEC,EAAE,EAAEC,EAAEX,EAAEY,OAAO,EAAEC,EAAE,EAAEC,EAAEb,EAAEW,OAAO,EAAE,KAAKF,GAAGC,GAAGE,GAAGC,GAAG,GAAG,OAAOd,EAAEU,GAAGA,SAAS,GAAG,OAAOV,EAAEW,GAAGA,SAAS,GAAGL,EAAEI,KAAKR,EAAEW,GAAGN,EAAEM,GAAGrB,EAAEQ,EAAEU,GAAGT,EAAEY,IAAIH,IAAIG,SAAS,GAAGP,EAAEK,KAAKT,EAAEY,GAAGP,EAAEO,GAAGtB,EAAEQ,EAAEW,GAAGV,EAAEa,IAAIH,IAAIG,SAAS,GAAGR,EAAEI,KAAKR,EAAEY,GAAGP,EAAEO,GAAGtB,EAAEQ,EAAEU,GAAGT,EAAEa,IAAIrB,EAAEd,EAAE4B,EAAEO,EAAE,GAAGd,EAAEU,IAAIA,IAAII,SAAS,GAAGR,EAAEK,KAAKT,EAAEW,GAAGN,EAAEM,GAAGrB,EAAEQ,EAAEW,GAAGV,EAAEY,IAAIpB,EAAEd,EAAEqB,EAAEU,GAAGV,EAAEW,IAAIA,IAAIE,SAAS,QAAG,IAASL,IAAIA,EAAE/B,EAAEyB,EAAEW,EAAEC,GAAGL,EAAEhC,EAAE6B,EAAEI,EAAEC,IAAIH,EAAEO,IAAIT,EAAEI,IAAI,GAAGF,EAAEO,IAAIT,EAAEK,IAAI,CAAC,MAAMjC,EAAE+B,EAAEO,IAAId,EAAEW,IAAIjC,OAAE,IAASF,EAAEsB,EAAEtB,GAAG,KAAK,GAAG,OAAOE,EAAE,CAAC,MAAMF,EAAEe,EAAEd,EAAEqB,EAAEU,IAAIlB,EAAEd,EAAEuB,EAAEY,IAAIN,EAAEM,GAAGnC,OAAO6B,EAAEM,GAAGrB,EAAEZ,EAAEqB,EAAEY,IAAIpB,EAAEd,EAAEqB,EAAEU,GAAG9B,GAAGoB,EAAEtB,GAAG,KAAKmC,SAASI,EAAEjB,EAAEW,IAAIA,SAASM,EAAEjB,EAAEU,IAAIA,IAAI,KAAKG,GAAGC,GAAG,CAAC,MAAMpC,EAAEe,EAAEd,EAAE4B,EAAEO,EAAE,IAAItB,EAAEd,EAAEuB,EAAEY,IAAIN,EAAEM,KAAKnC,EAAE,KAAKgC,GAAGC,GAAG,CAAC,MAAMjC,EAAEsB,EAAEU,KAAK,OAAOhC,GAAGuC,EAAEvC,GAAG,OAAOmB,KAAKQ,GAAGH,EAAEgB,EAAEvC,EAAE4B,GAAG7B,WCHzsCyC,EAKXjC,YAAYkC,EAAkBC,GAgBtBxB,oBAAkBnB,IACxB,MAAM4C,EAAS5C,EAAE4C,QACOzB,KAAKuB,KAAKG,SAASD,IAGzCzB,KAAKwB,UAAU3C,IApBjBmB,KAAKuB,KAAOA,EACZA,EAAKI,cAAc3B,MAEnBA,KAAKwB,UAAYA,EACjBxB,KAAK4B,SAAW,IAAIC,EAAmB7B,KAAKuB,KAAM,CAAEO,OAAQN,IAG9DO,gBACEC,SAASC,iBAAiB,QAASjC,KAAKkC,gBAAgB,GAG1DC,mBACEH,SAASI,oBAAoB,QAASpC,KAAKkC,gBAAgB,i/FCa/D,IAAqBG,EAArB,cAAyCC,EAAoBC,IAA7DlD,kCAGUW,cAAWwC,IACXxC,aAAUwC,IAGVxC,uBAAoB,IAAIsB,EAAuBtB,MAAM,IAAMA,KAAKyC,UAChEzC,wBAAqB,IAAI0C,EAAmB1C,KAAM,CACxD2C,QAAS,IAAM3C,KAAK4C,SACpBC,OAAQ,IAAM7C,KAAK6C,SACnBC,IAAK,IAAM9C,KAAK8C,MAChBC,MAAO,IAAM/C,KAAK+C,QAClBC,KAAM,IAAMhD,KAAKgD,OACjBC,SAAU,IAAMjD,KAAKiD,WACrBC,WAAY,IAAMlD,KAAKkD,eAMIlD,WAAO,EAKRA,iBAAc,8BAKfA,cAAsC,GAGxDA,YAAiB,GACTA,WAAO,EACPA,mBAAgB,EAChBA,sBAA8C,GAEnDmD,eACV,OAAOnD,KAAKoD,iBAAiBpD,KAAKqD,eAMpCC,KAAKC,EAA+B,IAClC,MAAMC,EAAOxD,KAAKyD,QAAQC,MAC1B1D,KAAK2D,MAAO,EACZ3D,KAAK4D,UAAUL,EAAQM,QAOvBC,YAAW,KACTN,EAAKO,UAAY,IAChB,GAKH/D,KAAKgE,cAAc,IAAIC,EAAU,SAMnCxB,cACEzC,KAAK2D,MAAO,EAIZ3D,KAAKgE,cAAc,IAAIC,EAAU,oBAEjCjE,KAAKkE,8BAAeC,QACpBnE,KAAKkE,mBAAgBE,EAMvBlB,aACMlD,KAAK2D,KACP3D,KAAKyC,QAELzC,KAAKsD,OAOTa,wBACEnE,KAAKqE,SAASX,sBAAOS,QAGdG,WAAWC,GACdA,EAAkBrD,IAAI,aACxBlB,KAAKwE,mBAAmBC,2BAGtBF,EAAkBrD,IAAI,SAAWlB,KAAK2D,OACxC3D,KAAK0E,MAAO,IAGVH,EAAkBrD,IAAI,WAAaqD,EAAkBrD,IAAI,WAAaqD,EAAkBrD,IAAI,cAC9FlB,KAAK2E,iBAIAC,QAAQL,GACXA,EAAkBrD,IAAI,SAAWlB,KAAK2D,OACxC3D,KAAKkE,cAAgBW,EAAkB7C,UACvChC,KAAKmE,SAGP7E,MAAMsF,QAAQL,GAGPxE,eACP,MAAM+E,EAAWC,EAAQ/E,KAAKoD,iBAAkB,WAC1C4B,EAAoD,IAAjChF,KAAKoD,iBAAiBrC,OAAe,uBAAef,KAAKmD,+BAAU8B,GAE5F,OAAOC,CAAI,eAECC,EAAS,CACf,YAAanF,KAAK2D,KAClB,WAAW,4BAIK3D,KAAKoF,8BACbD,EAAS,CACf,SAAUnF,KAAK0E,KACf,mBAAmB,qMAUR1E,KAAKqF,gBACZC,EAAItF,KAAKqE,0BACGrE,KAAKuF,wBACVvF,KAAKwF,wPAUUC,EAAUT,sFAMnBM,EAAItF,KAAKyD,8DACW,IAAjCzD,KAAKoD,iBAAiBrC,OACpBmE,CAAI,wHACqClF,KAAKwF,yKAM9ClF,MAAMoF,KAAKZ,GAAU,EAAEa,EAASC,KAAc5F,KAAK6F,cAAcF,EAASC,sGAKvDE,ECrNtB,0UDsNsBA,EEtNtB,8WFwNkCA,EGxNlC,8fHgOLD,cAAcF,EAA6BC,GACjD,MAAMG,EAAY,WAAWJ,IAG7B,OAAOT,CAAI,sCAC2BO,EAAUE,EAAUI,OAAY3B,OAChEuB,EACET,CAAI,uDAAsDO,EAAUM,OAAcJ,UAClFK,KACFC,EACAL,GACAM,GAAWA,EAAQjB,KACnBiB,YAAW,OAAAhB,CAAI,iCAENgB,EAAQjB,iBACFiB,iBACCA,EAAQjB,gBAAOjF,KAAKmD,+BAAU8B,gBACjC,IAAMjF,KAAK4C,OAAOsD,oCAEXT,EAAUS,EAAQjB,gBAAOjF,KAAKmD,+BAAU8B,UAAMb,6CAQlEgB,qBACNpF,KAAK0E,MAAO,EAGNyB,kBAAkBC,GACxB,MAAMC,EAAQD,EAAM3E,OACpBzB,KAAKsG,UAAUD,EAAM3C,OAGfd,OAAOsD,EAA8BlG,KAAKmD,gBAC/BnD,KAAK4F,SAASW,MAAKC,GAAQA,EAAK3C,SAAWqC,EAAQjB,MAGlEjF,KAAK4D,UAAUsC,EAAQjB,IACvBjF,KAAK0E,MAAO,EACZ1E,KAAKmE,SAELnE,KAAKyC,QAGPzC,KAAKsG,UAAU,cACfJ,EAAQO,6BAARP,EAAkBlG,MAIlBA,KAAKgE,cAAc,IAAI0C,EAAYR,IAG7BnD,QACN/C,KAAKqD,cAAgB,EAGfP,MACN9C,KAAKqD,cAAgBrD,KAAKoD,iBAAiBrC,OAAS,EAG9CiC,OACNhD,KAAKqD,cAAgBsD,EAAK3G,KAAKqD,cAAgB,EAAG,EAAGrD,KAAKoD,iBAAiBrC,OAAS,GAG9EkC,WACNjD,KAAKqD,cAAgBsD,EAAK3G,KAAKqD,cAAgB,EAAG,EAAGrD,KAAKoD,iBAAiBrC,OAAS,GAG9E8B,SACN,IAAI7C,KAAKwF,QAILxF,KAAK6D,OAAQ,CACf,MAAM+C,EAAgB5G,KAAK4F,SAASiB,MAAKX,GAAWA,EAAQjB,KAAOjF,KAAK6D,SACxE7D,KAAK4D,UAAUgD,MAAAA,SAAAA,EAAe/C,SAI1BD,UAAUC,GAChB7D,KAAK6D,OAASA,EACd7D,KAAKsG,UAAU,IAGTA,UAAUQ,GAChB9G,KAAKwF,OAASsB,EACd9G,KAAKqD,cAAgB,EAGfsB,iBACN,MAAMoC,EAAc/G,KAAKwF,OAAOwB,oBAAoBC,MAAM,OAE1DjH,KAAKoD,iBAAmBpD,KAAK4F,SAASsB,QAAO,EAAGC,MAAAA,EAAOC,SAAAA,EAAW,GAAIvD,OAAAA,MACpE,MAAMwD,EAAc,GAAGF,KAASC,IAAWJ,oBACrCM,EAAUP,EAAYQ,OAAMC,GAAQH,EAAYI,SAASD,KAE/D,QAAKxH,KAAK6D,QAAU7D,KAAKwF,QAKlB3B,IAAW7D,KAAK6D,SAHdyD,OAlSNjF,SAASqF,EAoBaC,GAA5BC,EAAS,CAAErI,KAAMsI,sCAKUF,GAA3BC,EAAS,CAAErI,KAAMuI,4CAKSH,GAA1BC,EAAS,CAAErI,KAAMe,wCAETqH,GAARI,kCACQJ,GAARI,kCACQJ,GAARI,gCACQJ,GAARI,yCACQJ,GAARI,4CArCkB1F,KADpB2F,EAAc,sBACM3F,SAAAA"}
|
package/lib/Icon.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,D as i,p as s,_ as t,n as o,s as r}from"./DraftComponentMixin-4bb26f5d.js";import{e as n}from"./property-03f59dce.js";import{t as l}from"./state-70f38ceb.js";import{l as a}from"./if-defined-617ae549.js";import{o as c}from"./unsafe-html-21f62902.js";import"./directive-e9ce14b4.js";const h=e`:host{all:initial;display:inline-block;block-size:var(--n-icon-size);inline-size:var(--n-icon-size);line-height:var(--n-line-height);color:var(--n-color-text)}*,::after,::before{box-sizing:border-box;margin:0;padding:0}:host([size=xs]){--n-icon-size:var(--n-size-icon-xs)}:host([size="s"]){--n-icon-size:var(--n-size-icon-s)}:host([size="m"]){--n-icon-size:var(--n-size-icon-m)}:host([size="l"]){--n-icon-size:var(--n-size-icon-l)}:host([size=xl]){--n-icon-size:var(--n-size-icon-xl)}:host([size=xxl]){--n-icon-size:var(--n-size-icon-xxl)}.n-icon{display:block}svg{display:block}`;var d;let v=d=class extends(i(r)){constructor(){super(...arguments),this.name="",this.size="m",this.svg=""}static registerResolver(e){d.resolver=e}static registerIcon(e,i){let s,t;if("string"==typeof e?(s=e,t=i):(s=e.title,t=e.default),!s)throw new Error("name is required when registering an icon");if(!t)throw new Error("icon must not be empty");d.registeredIcons.has(s)||d.registeredIcons.set(s,t)}willUpdate(e){if(!e.has("name"))return;const i=this.resolve();"string"==typeof i?this.svg=i:i.then((e=>{this.svg=e})).catch((()=>{this.svg=""}))}render(){return s`<div role="${a(this.label?"img":void 0)}" aria-label="${a(this.label)}"><slot style="${a(this.color?`color:${this.color}`:void 0)}" aria-hidden="true">${c(this.svg)}</slot></div>`}resolve(){return this.name?d.registeredIcons.has(this.name)?d.registeredIcons.get(this.name):d.resolver(this.name):""}};v.styles=h,v.resolver=e=>fetch(`https://nordcdn.net/ds/icons/1.
|
|
1
|
+
import{r as e,D as i,p as s,_ as t,n as o,s as r}from"./DraftComponentMixin-4bb26f5d.js";import{e as n}from"./property-03f59dce.js";import{t as l}from"./state-70f38ceb.js";import{l as a}from"./if-defined-617ae549.js";import{o as c}from"./unsafe-html-21f62902.js";import"./directive-e9ce14b4.js";const h=e`:host{all:initial;display:inline-block;block-size:var(--n-icon-size);inline-size:var(--n-icon-size);line-height:var(--n-line-height);color:var(--n-color-text)}*,::after,::before{box-sizing:border-box;margin:0;padding:0}:host([size=xs]){--n-icon-size:var(--n-size-icon-xs)}:host([size="s"]){--n-icon-size:var(--n-size-icon-s)}:host([size="m"]){--n-icon-size:var(--n-size-icon-m)}:host([size="l"]){--n-icon-size:var(--n-size-icon-l)}:host([size=xl]){--n-icon-size:var(--n-size-icon-xl)}:host([size=xxl]){--n-icon-size:var(--n-size-icon-xxl)}.n-icon{display:block}svg{display:block}`;var d;let v=d=class extends(i(r)){constructor(){super(...arguments),this.name="",this.size="m",this.svg=""}static registerResolver(e){d.resolver=e}static registerIcon(e,i){let s,t;if("string"==typeof e?(s=e,t=i):(s=e.title,t=e.default),!s)throw new Error("name is required when registering an icon");if(!t)throw new Error("icon must not be empty");d.registeredIcons.has(s)||d.registeredIcons.set(s,t)}willUpdate(e){if(!e.has("name"))return;const i=this.resolve();"string"==typeof i?this.svg=i:i.then((e=>{this.svg=e})).catch((()=>{this.svg=""}))}render(){return s`<div role="${a(this.label?"img":void 0)}" aria-label="${a(this.label)}"><slot style="${a(this.color?`color:${this.color}`:void 0)}" aria-hidden="true">${c(this.svg)}</slot></div>`}resolve(){return this.name?d.registeredIcons.has(this.name)?d.registeredIcons.get(this.name):d.resolver(this.name):""}};v.styles=h,v.resolver=e=>fetch(`https://nordcdn.net/ds/icons/1.3.1/assets/${e}.svg`).then((e=>e.text())),v.registeredIcons=new Map,t([n({reflect:!0})],v.prototype,"name",void 0),t([n({reflect:!0})],v.prototype,"size",void 0),t([n({reflect:!0})],v.prototype,"color",void 0),t([n({reflect:!0})],v.prototype,"label",void 0),t([l()],v.prototype,"svg",void 0),v=d=t([o("nord-icon")],v);var p=v;export{p as default};
|
|
2
2
|
//# sourceMappingURL=Icon.js.map
|
|
@@ -13,6 +13,7 @@ declare const CommandMenu_base: typeof LitElement;
|
|
|
13
13
|
export default class CommandMenu extends CommandMenu_base {
|
|
14
14
|
static styles: import("lit").CSSResult;
|
|
15
15
|
private inputRef;
|
|
16
|
+
private listRef;
|
|
16
17
|
private previousFocus?;
|
|
17
18
|
private dismissController;
|
|
18
19
|
private keyboardController;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nordhealth/components",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.34",
|
|
4
4
|
"description": "This package includes Nord Design System web components",
|
|
5
5
|
"author": "Nordhealth <info@nordhealth.com>",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
@@ -137,5 +137,5 @@
|
|
|
137
137
|
}
|
|
138
138
|
]
|
|
139
139
|
},
|
|
140
|
-
"gitHead": "
|
|
140
|
+
"gitHead": "24bb9fcb8d5f3cd40fbcfb6b4ad48ce9b831fd84"
|
|
141
141
|
}
|