@pure-ds/core 0.5.32 → 0.5.33

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.
@@ -1,8 +1,14 @@
1
- var ke=Object.defineProperty;var De=(e,t)=>()=>(e&&(t=e(e=0)),t);var ae=(e,t)=>{for(var n in t)ke(e,n,{get:t[n],enumerable:!0})};var ye={};ae(ye,{AutoDefiner:()=>ee});async function He(...e){let t={};e.length&&typeof e[e.length-1]=="object"&&(t=e.pop()||{});let n=e,{baseURL:r,mapper:o=l=>`${l}.js`,onError:s=(l,d)=>console.error(`[defineWebComponents] ${l}:`,d)}=t,a=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),u=l=>l.toLowerCase().replace(/(^|-)([a-z])/g,(d,i,f)=>f.toUpperCase()),c=async l=>{try{if(customElements.get(l))return{tag:l,status:"already-defined"};let d=o(l),f=await import(d instanceof URL?d.href:new URL(d,a).href),m=f?.default??f?.[u(l)];if(!m){if(customElements.get(l))return{tag:l,status:"self-defined"};throw new Error(`No export found for ${l}. Expected default export or named export "${u(l)}".`)}return customElements.get(l)?{tag:l,status:"race-already-defined"}:(customElements.define(l,m),{tag:l,status:"defined"})}catch(d){throw s(l,d),d}};return Promise.all(n.map(c))}var ee,ge=De(()=>{ee=class{constructor(t={}){let{baseURL:n,mapper:r,onError:o,predicate:s=()=>!0,attributeModule:a="data-module",root:u=document,scanExisting:c=!0,debounceMs:l=16,observeShadows:d=!0,enhancers:i=[],patchAttachShadow:f=!0}=t,m=new Set,w=new Set,S=new Set,g=new Map,E=new WeakMap,T=new WeakMap,v=0,R=!1,C=null,j=p=>{if(!p||!i.length)return;let y=T.get(p);y||(y=new Set,T.set(p,y));for(let h of i)if(!(!h.selector||!h.run)&&!y.has(h.selector))try{p.matches&&p.matches(h.selector)&&(h.run(p),y.add(h.selector))}catch(x){console.warn(`[AutoDefiner] Error applying enhancer for selector "${h.selector}":`,x)}},P=(p,y)=>{if(!R&&!(!p||!p.includes("-"))&&!customElements.get(p)&&!w.has(p)&&!S.has(p)){if(y&&y.getAttribute){let h=y.getAttribute(a);h&&!g.has(p)&&g.set(p,h)}m.add(p),z()}},z=()=>{v||(v=setTimeout($,l))},A=p=>{if(p){if(p.nodeType===1){let y=p,h=y.tagName?.toLowerCase();h&&h.includes("-")&&!customElements.get(h)&&s(h,y)&&P(h,y),j(y),d&&y.shadowRoot&&_(y.shadowRoot)}p.querySelectorAll&&p.querySelectorAll("*").forEach(y=>{let h=y.tagName?.toLowerCase();h&&h.includes("-")&&!customElements.get(h)&&s(h,y)&&P(h,y),j(y),d&&y.shadowRoot&&_(y.shadowRoot)})}},_=p=>{if(!p||E.has(p))return;A(p);let y=new MutationObserver(h=>{for(let x of h)x.addedNodes?.forEach(U=>{A(U)}),x.type==="attributes"&&x.target&&A(x.target)});y.observe(p,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[a,...i.map(h=>h.selector).filter(h=>h.startsWith("data-"))]}),E.set(p,y)};async function $(){if(clearTimeout(v),v=0,!m.size)return;let p=Array.from(m);m.clear(),p.forEach(y=>w.add(y));try{let y=h=>g.get(h)??(r?r(h):`${h}.js`);await He(...p,{baseURL:n,mapper:y,onError:(h,x)=>{S.add(h),o?.(h,x)}})}catch{}finally{p.forEach(y=>w.delete(y))}}let L=u===document?document.documentElement:u,D=new MutationObserver(p=>{for(let y of p)y.addedNodes?.forEach(h=>{A(h)}),y.type==="attributes"&&y.target&&A(y.target)});if(D.observe(L,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[a,...i.map(p=>p.selector).filter(p=>p.startsWith("data-"))]}),d&&f&&Element.prototype.attachShadow){let p=Element.prototype.attachShadow;Element.prototype.attachShadow=function(h){let x=p.call(this,h);if(h&&h.mode==="open"){_(x);let U=this.tagName?.toLowerCase();U&&U.includes("-")&&!customElements.get(U)&&P(U,this)}return x},C=()=>Element.prototype.attachShadow=p}return c&&A(L),{stop(){R=!0,D.disconnect(),C&&C(),v&&(clearTimeout(v),v=0),E.forEach(p=>p.disconnect())},flush:$}}static async define(...t){let n={};t.length&&typeof t[t.length-1]=="object"&&(n=t.pop()||{});let r=t,{baseURL:o,mapper:s=d=>`${d}.js`,onError:a=(d,i)=>console.error(`[defineWebComponents] ${d}:`,i)}=n,u=o?new URL(o,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),c=d=>d.toLowerCase().replace(/(^|-)([a-z])/g,(i,f,m)=>m.toUpperCase()),l=async d=>{try{if(customElements.get(d))return{tag:d,status:"already-defined"};let i=s(d),m=await import(i instanceof URL?i.href:new URL(i,u).href),w=m?.default??m?.[c(d)];if(!w){if(customElements.get(d))return{tag:d,status:"self-defined"};throw new Error(`No export found for ${d}. Expected default export or named export "${c(d)}".`)}return customElements.get(d)?{tag:d,status:"race-already-defined"}:(customElements.define(d,w),{tag:d,status:"defined"})}catch(i){throw a(d,i),i}};return Promise.all(r.map(l))}}});var K=class{constructor(){this._mode="static",this._staticPaths={tokens:"/assets/pds/styles/pds-tokens.css.js",primitives:"/assets/pds/styles/pds-primitives.css.js",components:"/assets/pds/styles/pds-components.css.js",utilities:"/assets/pds/styles/pds-utilities.css.js",styles:"/assets/pds/styles/pds-styles.css.js"}}setLiveMode(){this._mode="live"}setStaticMode(t={}){this._mode="static",this._staticPaths={...this._staticPaths,...t}}async getStylesheet(t){if(this._mode==="live")return null;try{return(await import(this._staticPaths[t]))[t]}catch(n){console.error(`[PDS Registry] Failed to load static ${t}:`,n),console.error(`[PDS Registry] Looking for: ${this._staticPaths[t]}`),console.error("[PDS Registry] Make sure you've run 'npm run pds:build' and configured PDS.start() with the correct static.root path");let r=new CSSStyleSheet;return r.replaceSync("/* Failed to load "+t+" */"),r}}get mode(){return this._mode}get isLive(){return this._mode==="live"}},q=new K;async function ie(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await q.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let o=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${o}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function ce(e,t=["primitives"],n=[],r=null){try{let s=(await Promise.all(t.map(async a=>{if(r)switch(a){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return q.getStylesheet(a)}))).filter(a=>a!==null);e.adoptedStyleSheets=[...s,...n]}catch(o){let s=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt layers:`,o),e.adoptedStyleSheets=n}}function de(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var le={FontWeights:{light:300,normal:400,medium:500,semibold:600,bold:700},LineHeights:{tight:1.25,normal:1.5,relaxed:1.75},BorderWidths:{hairline:.5,thin:1,medium:2,thick:3},RadiusSizes:{none:0,small:4,medium:8,large:16,xlarge:24,xxlarge:32},ShadowDepths:{none:"none",light:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",medium:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",deep:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",extreme:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},TransitionSpeeds:{fast:150,normal:250,slow:350},AnimationEasings:{linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",bounce:"cubic-bezier(0.68, -0.55, 0.265, 1.55)"},TouchTargetSizes:{compact:36,standard:44,comfortable:48,spacious:56},LinkStyles:{inline:"inline",block:"block",button:"button"},FocusStyles:{ring:"ring",outline:"outline",border:"border",glow:"glow"},TabSizes:{compact:2,standard:4,wide:8},SelectIcons:{chevron:"chevron",arrow:"arrow",caret:"caret",none:"none"},IconSizes:{xs:16,sm:20,md:24,lg:32,xl:48,"2xl":64,"3xl":96}};var ue={mode:"live",preset:"default",autoDefine:{predefine:["pds-icon","pds-drawer","pds-toaster"]},log(e,t,...n){console[e](t,...n)}};var J={};ae(J,{deepMerge:()=>pe,fragmentFromTemplateLike:()=>Q,isObject:()=>B});function B(e){return e&&typeof e=="object"&&!Array.isArray(e)}function pe(e,t){let n={...e};return B(e)&&B(t)&&Object.keys(t).forEach(r=>{B(t[r])?r in e?n[r]=pe(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function Q(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,o=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let i=0;i<t.length;i+=1){let f=t[i]??"",m=f.match(s);if(m&&i<n.length){let S=m[2].slice(1),g=`pds-val-${i}`;f=f.replace(s,`$1data-pds-prop="${S}:${g}"`),r.add(i)}o.push(f),i<n.length&&!r.has(i)&&o.push(`<!--pds-val-${i}-->`)}let a=document.createElement("template");a.innerHTML=o.join("");let u=(i,f)=>{let m=i.parentNode;if(!m)return;if(f==null){m.removeChild(i);return}let w=S=>{if(S!=null){if(S instanceof Node){m.insertBefore(S,i);return}if(Array.isArray(S)){S.forEach(g=>w(g));return}m.insertBefore(document.createTextNode(String(S)),i)}};w(f),m.removeChild(i)},c=document.createTreeWalker(a.content,NodeFilter.SHOW_COMMENT),l=[];for(;c.nextNode();){let i=c.currentNode;i?.nodeValue?.startsWith("pds-val-")&&l.push(i)}return l.forEach(i=>{let f=Number(i.nodeValue.replace("pds-val-",""));u(i,n[f])}),a.content.querySelectorAll("*").forEach(i=>{let f=i.getAttribute("data-pds-prop");if(!f)return;let[m,w]=f.split(":"),S=Number(String(w).replace("pds-val-",""));m&&Number.isInteger(S)&&(i[m]=n[S]),i.removeAttribute("data-pds-prop")}),a.content}function X(e,t){if(t==null)return;if(typeof t=="object"&&Array.isArray(t.strings)&&Array.isArray(t.values)){e.appendChild(Q(t));return}if(t instanceof Node){e.appendChild(t);return}if(Array.isArray(t)){t.forEach(r=>X(e,r));return}let n=typeof t=="string"?t:String(t);e.appendChild(document.createTextNode(n))}async function fe(e,t={}){return t={...{title:"Confirm",type:"confirm",buttons:{ok:{name:"OK",primary:!0},cancel:{name:"Cancel",cancel:!0}}},...t},new Promise(r=>{let o=document.createElement("dialog");ue.options?.liquidGlassEffects&&o.classList.add("liquid-glass"),t.size&&o.classList.add(`dialog-${t.size}`),t.type&&o.classList.add(`dialog-${t.type}`),t.class&&(Array.isArray(t.class)?o.classList.add(...t.class):o.classList.add(t.class)),t.maxHeight&&o.style.setProperty("--dialog-max-height",t.maxHeight);let s=Object.entries(t.buttons).map(([u,c])=>{let l=c.primary?"btn-primary btn-sm":"btn-outline btn-sm";return`<button type="${c.cancel?"button":"submit"}" class="${l}" value="${u}">${c.name}</button>`});if(t.useForm){let u=document.createElement("div");X(u,e);let c=u.querySelector("form");if(c){o.innerHTML=`
1
+ var Ne=Object.defineProperty;var Z=(e,t)=>()=>(e&&(t=e(e=0)),t);var J=(e,t)=>{for(var n in t)Ne(e,n,{get:t[n],enumerable:!0})};var ve={};J(ve,{AutoDefiner:()=>se});async function tt(...e){let t={};e.length&&typeof e[e.length-1]=="object"&&(t=e.pop()||{});let n=e,{baseURL:r,mapper:o=d=>`${d}.js`,onError:s=(d,l)=>console.error(`[defineWebComponents] ${d}:`,l)}=t,i=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),u=d=>d.toLowerCase().replace(/(^|-)([a-z])/g,(l,a,p)=>p.toUpperCase()),c=async d=>{try{if(customElements.get(d))return{tag:d,status:"already-defined"};let l=o(d),p=await import(l instanceof URL?l.href:new URL(l,i).href),f=p?.default??p?.[u(d)];if(!f){if(customElements.get(d))return{tag:d,status:"self-defined"};throw new Error(`No export found for ${d}. Expected default export or named export "${u(d)}".`)}return customElements.get(d)?{tag:d,status:"race-already-defined"}:(customElements.define(d,f),{tag:d,status:"defined"})}catch(l){throw s(d,l),l}};return Promise.all(n.map(c))}var se,xe=Z(()=>{se=class{constructor(t={}){let{baseURL:n,mapper:r,onError:o,predicate:s=()=>!0,attributeModule:i="data-module",root:u=document,scanExisting:c=!0,debounceMs:d=16,observeShadows:l=!0,enhancers:a=[],patchAttachShadow:p=!0}=t,f=new Set,w=new Set,v=new Set,g=new Map,x=new WeakMap,M=new WeakMap,E=0,R=!1,C=null,N=h=>{if(!h||!a.length)return;let y=M.get(h);y||(y=new Set,M.set(h,y));for(let m of a)if(!(!m.selector||!m.run)&&!y.has(m.selector))try{h.matches&&h.matches(m.selector)&&(m.run(h),y.add(m.selector))}catch(L){console.warn(`[AutoDefiner] Error applying enhancer for selector "${m.selector}":`,L)}},I=(h,y)=>{if(!R&&!(!h||!h.includes("-"))&&!customElements.get(h)&&!w.has(h)&&!v.has(h)){if(y&&y.getAttribute){let m=y.getAttribute(i);m&&!g.has(h)&&g.set(h,m)}f.add(h),H()}},H=()=>{E||(E=setTimeout(P,d))},A=h=>{if(h){if(h.nodeType===1){let y=h,m=y.tagName?.toLowerCase();m&&m.includes("-")&&!customElements.get(m)&&s(m,y)&&I(m,y),N(y),l&&y.shadowRoot&&$(y.shadowRoot)}h.querySelectorAll&&h.querySelectorAll("*").forEach(y=>{let m=y.tagName?.toLowerCase();m&&m.includes("-")&&!customElements.get(m)&&s(m,y)&&I(m,y),N(y),l&&y.shadowRoot&&$(y.shadowRoot)})}},$=h=>{if(!h||x.has(h))return;A(h);let y=new MutationObserver(m=>{for(let L of m)L.addedNodes?.forEach(_=>{A(_)}),L.type==="attributes"&&L.target&&A(L.target)});y.observe(h,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...a.map(m=>m.selector).filter(m=>m.startsWith("data-"))]}),x.set(h,y)};async function P(){if(clearTimeout(E),E=0,!f.size)return;let h=Array.from(f);f.clear(),h.forEach(y=>w.add(y));try{let y=m=>g.get(m)??(r?r(m):`${m}.js`);await tt(...h,{baseURL:n,mapper:y,onError:(m,L)=>{v.add(m),o?.(m,L)}})}catch{}finally{h.forEach(y=>w.delete(y))}}let S=u===document?document.documentElement:u,k=new MutationObserver(h=>{for(let y of h)y.addedNodes?.forEach(m=>{A(m)}),y.type==="attributes"&&y.target&&A(y.target)});if(k.observe(S,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...a.map(h=>h.selector).filter(h=>h.startsWith("data-"))]}),l&&p&&Element.prototype.attachShadow){let h=Element.prototype.attachShadow;Element.prototype.attachShadow=function(m){let L=h.call(this,m);if(m&&m.mode==="open"){$(L);let _=this.tagName?.toLowerCase();_&&_.includes("-")&&!customElements.get(_)&&I(_,this)}return L},C=()=>Element.prototype.attachShadow=h}return c&&A(S),{stop(){R=!0,k.disconnect(),C&&C(),E&&(clearTimeout(E),E=0),x.forEach(h=>h.disconnect())},flush:P}}static async define(...t){let n={};t.length&&typeof t[t.length-1]=="object"&&(n=t.pop()||{});let r=t,{baseURL:o,mapper:s=l=>`${l}.js`,onError:i=(l,a)=>console.error(`[defineWebComponents] ${l}:`,a)}=n,u=o?new URL(o,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),c=l=>l.toLowerCase().replace(/(^|-)([a-z])/g,(a,p,f)=>f.toUpperCase()),d=async l=>{try{if(customElements.get(l))return{tag:l,status:"already-defined"};let a=s(l),f=await import(a instanceof URL?a.href:new URL(a,u).href),w=f?.default??f?.[c(l)];if(!w){if(customElements.get(l))return{tag:l,status:"self-defined"};throw new Error(`No export found for ${l}. Expected default export or named export "${c(l)}".`)}return customElements.get(l)?{tag:l,status:"race-already-defined"}:(customElements.define(l,w),{tag:l,status:"defined"})}catch(a){throw i(l,a),a}};return Promise.all(r.map(d))}}});function Re(e){return new DOMParser().parseFromString(e,"text/html").body.childNodes}function $e(e,t=100){let n;return function(...o){let s=()=>{clearTimeout(n),e(...o)};clearTimeout(n),n=setTimeout(s,t)}}function V(e){setTimeout(e,0)}function Te(e){try{if(typeof e!="string"||e.indexOf(`
2
+ `)!==-1||e.indexOf(" ")!==-1||e.startsWith("#/"))return!1;let t=new URL(e,window.location.origin);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function Me(e,t,n){let r=window.screen.width/2-t/2,o=window.screen.height/2-n/2;return window.open(e,"",`toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${t}, height=${n}, top=${o}, left=${r}`)}var Ie=Z(()=>{});var Pe={};J(Pe,{AutoComplete:()=>ce});var ae,ce,_e=Z(()=>{Ie();ae={result:"ac-suggestion",item:"ac-itm"},ce=class e extends EventTarget{constructor(t,n,r){super(),this.settings={emptyResultsText:"",...r},this.container=t,this.input=n,this.input.setAttribute("autocomplete","off"),this.categories=r.categories||{},this.caches=new Map,V(this.attach.bind(this))}static connect(t,n){let r=t.target;if(!r._autoComplete){if(!n?.categories)throw Error("Missing autocomplete settings");r._autoComplete=new e(r.parentNode,r,n),t.type==="focus"&&setTimeout(()=>{r._autoComplete.focusHandler(t)},100)}return r._autoComplete}on(t,n){return this.input.addEventListener(t,n),this}attach(){this.resultsDiv=document.createElement("div"),this.resultsDiv.title="",this.resultsDiv.classList.add(ae.result),this.container.offsetWidth>100&&(this.resultsDiv.style.width=this.container.offsetWidth),this.resultsDiv.addEventListener("mousedown",this.resultClick.bind(this)),this.container.classList.add("ac-container"),this.input.classList.add("ac-input");let t=getComputedStyle(this.input);this.container.style.setProperty("--ac-bg-default",t.backgroundColor),this.container.style.setProperty("--ac-color-default",t.color);let n=getComputedStyle(this.input).accentColor;n!=="auto"&&this.container.style.setProperty("--ac-accent-color",n),(this.container?.shadowRoot??this.container).appendChild(this.resultsDiv),this.controller().clear("attach"),this.on("input",$e(this.inputHandler.bind(this),this.settings.throttleInputMs??300)).on("focus",this.focusHandler.bind(this)).on("focusout",this.blurHandler.bind(this)).on("keyup",this.keyUpHandler.bind(this)).on("keydown",this.keyDownHandler.bind(this))}controller(){let t=this.internalController();return typeof this.settings.controller=="function"&&(t=this.settings.controller(this)??t),t}internalController(){return{show:this.show.bind(this),hide:this.hide.bind(this),clear:this.clear.bind(this),empty:()=>{}}}moveResult(t){this.controller().show();let n=this.acItems.length;this.rowIndex=this.rowIndex+t,this.rowIndex<=0?this.rowIndex=0:this.rowIndex>n-1&&(this.rowIndex=0);for(let o of this.acItems)o.classList.remove("selected");let r=this.getSelectedDiv();r?(r.classList.add("selected"),r.scrollIntoView({behavior:"smooth",block:"end",inline:"nearest"})):this.focusHandler({target:this.input})}getSelectedDiv(){return this.resultsDiv.querySelector(`div:nth-child(${this.rowIndex+1})`)}selectResult(t){if(t=t||this.getSelectedDiv(),t){let n=parseInt(t.getAttribute("data-index"));this.resultClicked=!0;let r=this.results[n],o=this.categories[r.category]??{};o.action=o.action??this.setText.bind(this),o.newTab&&(this.tabWindow=Me("about:blank"));let s={...r,search:this.input.value};t.classList.add("ac-active"),setTimeout(()=>{this.controller().hide("result-selected"),s.action?s.action(s):(o.action(s),o.newTab&&(s.url?this.tabWindow.location.href=s.url:this.tabWindow.close()));var i=new Event("change",{bubbles:!0});this.input.dispatchEvent(i),this.controller().clear("result-selected");let u=new Event("result-selected");u.detail=s,this.input.dispatchEvent(u)},0)}}setText(t){this.container.autoCompleteInput||(this.container.value=t.text),this.controller().hide("settext")}resultClick(t){this.selectResult(t.target.closest(`.${ae.item}`))}blurHandler(){setTimeout(()=>{this.resultClicked||this.controller().clear("blurred"),this.resultClicked=!1},100)}clear(){this.settings.debug||this.resultsDiv&&(this.resultsDiv.innerHTML="",this.controller().hide("clear"),this.cacheTmr&&clearTimeout(this.cacheTmr),this.cacheTmr=setTimeout(()=>{this.caches.clear()},60*1e3*5))}show(){if(!this.resultsDiv.classList.contains("ac-active")){let t=this.getViewBounds();this.resultsDiv.style.position="absolute",t.rect.width>100&&(this.resultsDiv.style.width=`${t.rect.width}px`),this.settings.direction=this.settings.direction??t.suggestedDirection,this.resultsDiv.setAttribute("data-direction",this.settings.direction),this.settings.direction==="up"?(this.resultsDiv.style.top="unset",this.resultsDiv.style.bottom=`${t.rect.height+20}px`,this.rowIndex=this.acItems.length):(this.resultsDiv.style.bottom="unset",this.resultsDiv.style.top=`${t.rect.height}px`,this.rowIndex=-1),this.resultsDiv.style.maxWidth="unset",this.resultsDiv.classList.toggle("ac-active",!0)}}getViewBounds(){let t=this.input.getBoundingClientRect();return{rect:t,suggestedDirection:t.top+t.height+500>window.innerHeight?"up":"down"}}hide(){this.resultsDiv.classList.toggle("ac-active",!1)}empty(){this.resultsDiv.innerHTML=`<div class="ac-empty">${this.settings.emptyResultsText}</div>`,this.controller().show()}inputHandler(t){this.cacheTmr&&clearTimeout(this.cacheTmr);let n={search:t.target.value,categories:this.categories};this.container.classList.add("search-running"),this.getItems(n,t).then(r=>{this.controller().clear("new-results"),this.resultsHandler(r,n),this.container.classList.remove("search-running")})}keyDownHandler(t){switch(t.key){case"Enter":t.stopPropagation(),t.preventDefault();break;case"ArrowDown":V(this.moveResult(1));break;case"ArrowUp":V(this.moveResult(-1));break}}keyUpHandler(t){switch(t.key){case"Escape":this.controller().hide("escape");break;case"Enter":this.getSelectedDiv()&&(this.container.preventEnter=!0,t.stopPropagation(),t.preventDefault(),this.selectResult(),setTimeout(()=>{this.container.preventEnter=!1},10));break;default:break}}focusHandler(t){this.controller().clear("focus");let n=t.target.value;this.suggest(n,t)}suggest(t,n){this.input.focus();let r={suggest:!0,search:t||"",categories:this.categories};this.getItems(r,n).then(o=>{this.input.dispatchEvent(new CustomEvent("show-results",{detail:{results:o}})),this.resultsHandler(o,r)})}sort(t,n){return t.sort((r,o)=>{let s=n.categories[r.category],i=n.categories[o.category],u=typeof s.sortIndex=="function"?s.sortIndex(n):s.sortIndex??0;return(typeof i.sortIndex=="function"?i.sortIndex(n):i.sortIndex??0)>u?1:-1})}resultsHandler(t,n){this.results=t,this.rowIndex=-1;let r=0,o=(s,i)=>`
3
+ <div title="${i.tooltip||""}" data-index="${r}" class="${`${ae.item} cat-${i.category} ${i.class??""}`.trim()}">
4
+ ${this.handleImageOrIcon(i)}
5
+ <span class="text">${this.formatResultItem(i,n,s)}</span>
6
+ ${this.settings.hideCategory?"":`<span class="category">${i.category||""}</span>`}
7
+ </div>`;t.forEach(s=>{let i=n.categories[s.category]||{};s.element?this.resultsDiv.appendChild(s.element):(s=typeof s=="string"?{text:s}:s,this.resultsDiv.appendChild(Re(o(i,s))[0])),r++}),t.length?(this.acItems=this.resultsDiv.querySelectorAll(".ac-itm"),this.controller().show()):n.search.length&&this.controller().empty()}handleImageOrIcon(t){return t.image?`<img src="${t.image}"/>`:typeof this.settings.iconHandler=="function"?this.settings.iconHandler(t):`<svg-icon icon="${t.icon}"></svg-icon>`}formatResultItem(t,n,r){let o=typeof t=="string"?{text:t}:t,s=o.text;return n.search&&(s=s.replace("%search%",n.search),o.description=o.description?.replace("%search%",n.search)),s=this.highlight(s,n.search),o.description&&(s=`<div>${s}</div><small>${o.description}</small>`),r.format&&(s=r.format({item:o,result:s,options:n})),s}highlight(t,n){var r=new RegExp("("+n+")","gi");return t.replace(r,'<span class="txt-hl">$1</span>')}async getItems(t,n){this.aborter&&this.aborter.abort();let r=this.caches.get(t.search);if(r)return r;let o=this.settings.map,s=c=>(typeof c=="string"&&(c={text:c}),c),i=c=>o?c.map(d=>({text:d[o]})):c.map(d=>s(d)),u=c=>(this.settings.max&&this.settings.max>0&&(c.length=this.settings.max),c);return this.aborter=new AbortController,this.aborterSignal=this.aborter.signal,new Promise(c=>{let d=l=>{l=this.sort(l,t),this.settings.cache!==!1&&this.caches.set(t.search,l),c(l)};if(Te(this.items)){if(this.settings.minlength>0&&(!t.search||t.search.length<this.settings.minlength)){d([]);return}let l=this.formatSearch(this.items,t);fetch(l).then(a=>{if(a.status===200){a.json().then(p=>{p=i(p),d(u(p.filter(f=>this.isMatch(t,f))))});return}throw Error(`HTTP error ${a.status} - ${l}`)})}else if(Array.isArray(this.items)){let l=!0;this.items=this.items.map(a=>typeof a=="string"?{text:a}:(l=!1,a)),l&&this.container.classList.add("simple"),d(u(i(this.items)))}else if(typeof this.items=="function")t.control=this.container,Promise.resolve(this.items(t,n)).then(a=>{a=a.map(p=>s(p)),a=i(a),d(a)});else return d(Promise.resolve(this.items.apply(this,t)))})}async items(t){let n=[];t.results=[],t.signal=this.aborterSignal;for(var r in t.categories){let o=t.categories[r];if(o.trigger=o.trigger??(()=>!0),t.results=n,o.trigger(t)){let s=[];try{s=await o.getItems(t)}catch(i){console.warn(`Error loading items for omniBox category '${r}'.`,i)}n=n.concat(s.map(i=>(i.category=r,i)))}}return n}formatSearch(t,n){return t.indexOf("%search%")?t.replace("%search%",n.search||""):t+"?"+this.createQueryParam(n)}createQueryParam(t){let n=t.suggest?"&suggest=true":"";return`q=${t.text}${n}`}isMatch(t,n){return n.text?.indexOf("%search%")>=0?!0:t.search?n.text?.toLowerCase().indexOf(t.search.toLowerCase())>=0:t.suggest}static textFilter(t,n){return function(r){if(!t.search)return!0;if(r.hidden)return!1;let s=(n?r[n]:r).match(new RegExp(t.search,"gi"));if(s)return s;if(r.config?.tags)return r.config.tags.some(i=>i.match(new RegExp(t.search,"gi")))}}}});var X=class{constructor(){this._mode="static",this._staticPaths={tokens:"/assets/pds/styles/pds-tokens.css.js",primitives:"/assets/pds/styles/pds-primitives.css.js",components:"/assets/pds/styles/pds-components.css.js",utilities:"/assets/pds/styles/pds-utilities.css.js",styles:"/assets/pds/styles/pds-styles.css.js"}}setLiveMode(){this._mode="live"}setStaticMode(t={}){this._mode="static",this._staticPaths={...this._staticPaths,...t}}async getStylesheet(t){if(this._mode==="live")return null;try{return(await import(this._staticPaths[t]))[t]}catch(n){console.error(`[PDS Registry] Failed to load static ${t}:`,n),console.error(`[PDS Registry] Looking for: ${this._staticPaths[t]}`),console.error("[PDS Registry] Make sure you've run 'npm run pds:build' and configured PDS.start() with the correct static.root path");let r=new CSSStyleSheet;return r.replaceSync("/* Failed to load "+t+" */"),r}}get mode(){return this._mode}get isLive(){return this._mode==="live"}},U=new X;async function ue(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await U.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let o=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${o}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function pe(e,t=["primitives"],n=[],r=null){try{let s=(await Promise.all(t.map(async i=>{if(r)switch(i){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return U.getStylesheet(i)}))).filter(i=>i!==null);e.adoptedStyleSheets=[...s,...n]}catch(o){let s=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt layers:`,o),e.adoptedStyleSheets=n}}function he(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var fe={FontWeights:{light:300,normal:400,medium:500,semibold:600,bold:700},LineHeights:{tight:1.25,normal:1.5,relaxed:1.75},BorderWidths:{hairline:.5,thin:1,medium:2,thick:3},RadiusSizes:{none:0,small:4,medium:8,large:16,xlarge:24,xxlarge:32},ShadowDepths:{none:"none",light:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",medium:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",deep:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",extreme:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},TransitionSpeeds:{fast:150,normal:250,slow:350},AnimationEasings:{linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",bounce:"cubic-bezier(0.68, -0.55, 0.265, 1.55)"},TouchTargetSizes:{compact:36,standard:44,comfortable:48,spacious:56},LinkStyles:{inline:"inline",block:"block",button:"button"},FocusStyles:{ring:"ring",outline:"outline",border:"border",glow:"glow"},TabSizes:{compact:2,standard:4,wide:8},SelectIcons:{chevron:"chevron",arrow:"arrow",caret:"caret",none:"none"},IconSizes:{xs:16,sm:20,md:24,lg:32,xl:48,"2xl":64,"3xl":96}};var me={mode:"live",preset:"default",autoDefine:{predefine:["pds-icon","pds-drawer","pds-toaster"]},log(e,t,...n){console[e](t,...n)}};var ee={};J(ee,{deepMerge:()=>ye,fragmentFromTemplateLike:()=>Y,isObject:()=>W});function W(e){return e&&typeof e=="object"&&!Array.isArray(e)}function ye(e,t){let n={...e};return W(e)&&W(t)&&Object.keys(t).forEach(r=>{W(t[r])?r in e?n[r]=ye(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function Y(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,o=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let a=0;a<t.length;a+=1){let p=t[a]??"",f=p.match(s);if(f&&a<n.length){let v=f[2].slice(1),g=`pds-val-${a}`;p=p.replace(s,`$1data-pds-prop="${v}:${g}"`),r.add(a)}o.push(p),a<n.length&&!r.has(a)&&o.push(`<!--pds-val-${a}-->`)}let i=document.createElement("template");i.innerHTML=o.join("");let u=(a,p)=>{let f=a.parentNode;if(!f)return;if(p==null){f.removeChild(a);return}let w=v=>{if(v!=null){if(v instanceof Node){f.insertBefore(v,a);return}if(Array.isArray(v)){v.forEach(g=>w(g));return}f.insertBefore(document.createTextNode(String(v)),a)}};w(p),f.removeChild(a)},c=document.createTreeWalker(i.content,NodeFilter.SHOW_COMMENT),d=[];for(;c.nextNode();){let a=c.currentNode;a?.nodeValue?.startsWith("pds-val-")&&d.push(a)}return d.forEach(a=>{let p=Number(a.nodeValue.replace("pds-val-",""));u(a,n[p])}),i.content.querySelectorAll("*").forEach(a=>{let p=a.getAttribute("data-pds-prop");if(!p)return;let[f,w]=p.split(":"),v=Number(String(w).replace("pds-val-",""));f&&Number.isInteger(v)&&(a[f]=n[v]),a.removeAttribute("data-pds-prop")}),i.content}function te(e,t){if(t==null)return;if(typeof t=="object"&&Array.isArray(t.strings)&&Array.isArray(t.values)){e.appendChild(Y(t));return}if(t instanceof Node){e.appendChild(t);return}if(Array.isArray(t)){t.forEach(r=>te(e,r));return}let n=typeof t=="string"?t:String(t);e.appendChild(document.createTextNode(n))}async function ge(e,t={}){return t={...{title:"Confirm",type:"confirm",buttons:{ok:{name:"OK",primary:!0},cancel:{name:"Cancel",cancel:!0}}},...t},new Promise(r=>{let o=document.createElement("dialog");me.options?.liquidGlassEffects&&o.classList.add("liquid-glass"),t.size&&o.classList.add(`dialog-${t.size}`),t.type&&o.classList.add(`dialog-${t.type}`),t.class&&(Array.isArray(t.class)?o.classList.add(...t.class):o.classList.add(t.class)),t.maxHeight&&o.style.setProperty("--dialog-max-height",t.maxHeight);let s=Object.entries(t.buttons).map(([u,c])=>{let d=c.primary?"btn-primary btn-sm":"btn-outline btn-sm";return`<button type="${c.cancel?"button":"submit"}" class="${d}" value="${u}">${c.name}</button>`});if(t.useForm){let u=document.createElement("div");te(u,e);let c=u.querySelector("form");if(c){o.innerHTML=`
2
8
  <header>
3
9
  <h2>${t.title}</h2>
4
10
  </header>
5
- `;let l=document.createElement("article");for(l.className="dialog-body";c.firstChild;)l.appendChild(c.firstChild);c.appendChild(l);let d=document.createElement("footer");d.innerHTML=s.join(""),c.appendChild(d),o.appendChild(c)}else o.innerHTML=`
11
+ `;let d=document.createElement("article");for(d.className="dialog-body";c.firstChild;)d.appendChild(c.firstChild);c.appendChild(d);let l=document.createElement("footer");l.innerHTML=s.join(""),c.appendChild(l),o.appendChild(c)}else o.innerHTML=`
6
12
  <header>
7
13
  <h2>${t.title}</h2>
8
14
  </header>
@@ -22,5 +28,5 @@ var ke=Object.defineProperty;var De=(e,t)=>()=>(e&&(t=e(e=0)),t);var ae=(e,t)=>{
22
28
  ${s.join("")}
23
29
  </footer>
24
30
  </form>
25
- `;let u=o.querySelector("#msg-container");X(u,e)}o.addEventListener("click",u=>{u.target.closest('button[value="cancel"]')&&(o.close(),r(!1))});let a=()=>{let u=o.querySelector("form");u?u.addEventListener("submit",c=>{c.preventDefault();let l;t.useForm&&c.submitter.value==="ok"?(console.log("Found form:",u),console.log("Form elements:",u?Array.from(u.elements):"no form"),l=new FormData(u),console.log("FormData entries:",Array.from(l.entries()))):l=c.submitter.value==="ok",o.close(),r(l)}):requestAnimationFrame(a)};a(),o.addEventListener("close",()=>{setTimeout(()=>o.remove(),200)}),document.body.appendChild(o),typeof t.rendered=="function"&&t.rendered(o),o.showModal()})}async function Re(){let e=document.querySelector("pds-toaster");return e||(e=document.createElement("pds-toaster"),document.body.appendChild(e),await customElements.whenDefined("pds-toaster")),e}async function k(e,t={}){return(await Re()).toast(e,t)}k.success=async function(e,t={}){return k(e,{...t,type:"success"})};k.error=async function(e,t={}){return k(e,{...t,type:"error"})};k.warning=async function(e,t={}){return k(e,{...t,type:"warning"})};k.info=async function(e,t={}){return k(e,{...t,type:"information"})};var _e=[{selector:".accordion"},{selector:"nav[data-dropdown]"},{selector:"label[data-toggle]"},{selector:'input[type="range"]'},{selector:"form[data-required]"},{selector:"fieldset[role=group][data-open]"},{selector:"[data-clip]"},{selector:"button, a[class*='btn-']"}];function Me(e){e.dataset.enhancedAccordion||(e.dataset.enhancedAccordion="true",e.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===e&&e.querySelectorAll(":scope > details[open]").forEach(n=>{n!==t.target&&(n.open=!1)})},!0))}function Te(e){if(e.dataset.enhancedDropdown)return;e.dataset.enhancedDropdown="true";let t=e.lastElementChild;if(!t)return;let n=e.querySelector("[data-dropdown-toggle]")||e.querySelector("button");n&&!n.hasAttribute("type")&&n.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.tagName?.toLowerCase()==="menu"&&!t.hasAttribute("role")&&t.setAttribute("role","menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),n&&(n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-controls",t.id),n.setAttribute("aria-expanded","false"));let o=()=>{let c=(e.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let l=e.getBoundingClientRect(),d=Math.max(0,window.innerHeight-l.bottom);return Math.max(0,l.top)>d?"up":"down"},s=()=>{e.dataset.dropdownDirection=o(),t.setAttribute("aria-hidden","false"),n?.setAttribute("aria-expanded","true")},a=()=>{t.setAttribute("aria-hidden","true"),n?.setAttribute("aria-expanded","false")},u=()=>{t.getAttribute("aria-hidden")==="false"?a():s()};n?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),u()}),document.addEventListener("click",c=>{e.contains(c.target)||a()}),e.addEventListener("keydown",c=>{c.key==="Escape"&&(a(),n?.focus())}),e.addEventListener("focusout",c=>{(!c.relatedTarget||!e.contains(c.relatedTarget))&&a()})}function Pe(e){if(e.dataset.enhancedToggle)return;e.dataset.enhancedToggle="true";let t=e.querySelector('input[type="checkbox"]');if(!t)return;e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","switch"),e.setAttribute("aria-checked",t.checked?"true":"false");let n=document.createElement("span");n.className="toggle-switch",n.setAttribute("role","presentation"),n.setAttribute("aria-hidden","true");let r=document.createElement("span");r.className="toggle-knob",n.appendChild(r),e.insertBefore(n,t.nextSibling);let o=()=>{e.setAttribute("aria-checked",t.checked?"true":"false")},s=()=>{t.disabled||(t.checked=!t.checked,o(),t.dispatchEvent(new Event("change",{bubbles:!0})))};e.addEventListener("click",a=>{a.preventDefault(),s()}),e.addEventListener("keydown",a=>{(a.key===" "||a.key==="Enter")&&(a.preventDefault(),s())}),t.addEventListener("change",o)}function $e(e){if(e.dataset.enhancedRange)return;let t=e.closest("label"),n=t?.classList.contains("range-output"),r=e.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${r}-output`;if(e.id=r,n){let s=t.querySelector("span");if(s&&!s.classList.contains("range-output-wrapper")){let a=document.createElement("span");a.className="range-output-wrapper",a.style.display="flex",a.style.justifyContent="space-between",a.style.alignItems="center";let u=document.createElement("span");u.textContent=s.textContent,a.appendChild(u);let c=document.createElement("output");c.id=o,c.setAttribute("for",r),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=e.value,a.appendChild(c),s.textContent="",s.appendChild(a);let l=()=>{c.textContent=e.value};e.addEventListener("input",l)}}else{let s=e.closest(".range-container");s||(s=document.createElement("div"),s.className="range-container",e.parentNode?.insertBefore(s,e),s.appendChild(e)),s.style.position="relative";let a=document.createElement("output");a.id=o,a.setAttribute("for",r),a.className="range-bubble",a.setAttribute("aria-live","polite"),s.appendChild(a);let u=()=>{let d=parseFloat(e.min)||0,i=parseFloat(e.max)||100,f=parseFloat(e.value),m=(f-d)/(i-d);a.style.left=`calc(${m*100}% )`,a.textContent=String(f)},c=()=>a.classList.add("visible"),l=()=>a.classList.remove("visible");e.addEventListener("input",u),e.addEventListener("pointerdown",c),e.addEventListener("pointerup",l),e.addEventListener("pointerleave",l),e.addEventListener("focus",c),e.addEventListener("blur",l),u()}e.dataset.enhancedRange="1"}function Ue(e){if(e.dataset.enhancedRequired)return;e.dataset.enhancedRequired="true";let t=n=>{let r=n.closest("label");if(!r||r.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",r.querySelector("span").appendChild(o);let s=n.closest("form");if(s&&!s.querySelector(".required-legend")){let a=document.createElement("small");a.classList.add("required-legend"),a.textContent="* Required fields",s.insertBefore(a,s.querySelector(".form-actions")||s.lastElementChild)}};e.querySelectorAll("[required]").forEach(n=>{t(n)})}function qe(e){if(e.dataset.enhancedOpenGroup)return;e.dataset.enhancedOpenGroup="true",e.classList.add("flex","flex-wrap","buttons");let t=document.createElement("input");t.type="text",t.placeholder="Add item...",t.classList.add("input-text","input-sm"),t.style.width="auto";let n=e.querySelector('input[type="radio"], input[type="checkbox"]');e.appendChild(t),t.addEventListener("keydown",r=>{if(r.key==="Enter"||r.key==="Tab"){let o=t.value.trim();if(o){r.preventDefault();let s=n.type==="radio"?"radio":"checkbox",a=`open-group-${Math.random().toString(36).substring(2,11)}`,u=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let l=document.createElement("input");l.type=s,l.name=n.name||e.getAttribute("data-name")||"open-group",l.value=o,l.id=a,u.appendChild(c),u.appendChild(l),e.insertBefore(u,t),t.value=""}}else if(r.key==="Backspace"&&t.value===""){r.preventDefault();let o=e.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Oe(e){if(e.dataset.enhancedClip)return;e.dataset.enhancedClip="true",e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.hasAttribute("role")||e.setAttribute("role","button");let t=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("aria-expanded",r?"true":"false")},n=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("data-clip-open",r?"false":"true"),t()};e.addEventListener("click",r=>{r.defaultPrevented||n()}),e.addEventListener("keydown",r=>{(r.key===" "||r.key==="Enter")&&(r.preventDefault(),n())}),t()}function je(e){if(e.dataset.enhancedBtnWorking)return;e.dataset.enhancedBtnWorking="true";let t=null,n=!1;new MutationObserver(o=>{o.forEach(s=>{if(s.attributeName==="class"){let a=e.classList.contains("btn-working"),u=e.querySelector("pds-icon");if(a)if(u)t||(t=u.getAttribute("icon")),u.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),e.insertBefore(c,e.firstChild),n=!0}else s.oldValue?.includes("btn-working")&&u&&(n?(u.remove(),n=!1):t&&(u.setAttribute("icon",t),t=null))}})}).observe(e,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Ne=new Map([[".accordion",Me],["nav[data-dropdown]",Te],["label[data-toggle]",Pe],['input[type="range"]',$e],["form[data-required]",Ue],["fieldset[role=group][data-open]",qe],["[data-clip]",Oe],["button, a[class*='btn-']",je]]),Y=_e.map(e=>({...e,run:Ne.get(e.selector)||(()=>{})}));var he="pds",Fe=/^([a-z][a-z0-9+\-.]*:)?\/\//i,me=/^[a-z]:/i;function N(e=""){return e.endsWith("/")?e:`${e}/`}function Ie(e="",t=he){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function ze(e){return e.replace(/^\.\/+/,"")}function Be(e){return me.test(e)?e.replace(me,"").replace(/^\/+/,""):e}function We(e){return e.startsWith("public/")?e.substring(7):e}function Z(e,t={}){let n=t.segment||he,r=t.defaultRoot||`/assets/${n}/`,o=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!o||typeof o!="string")return N(r);let s=o.trim();return s?(s=s.replace(/\\/g,"/"),s=Ie(s,n),s=N(s),Fe.test(s)?s:(s=ze(s),s=Be(s),s.startsWith("/")||(s=We(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(a,u)=>u===0?a:"/")),N(s))):N(r)}var Ve=/^[a-z][a-z0-9+\-.]*:\/\//i,F=(()=>{try{return import.meta.url}catch{return}})(),W=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function H(e,t={}){if(!e||Ve.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!F)return null;try{return new URL(e,F).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||o():o()||r())||e}var be=(()=>{if(F)try{let e=new URL(F);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",F).href}catch{return}})(),we=!1;function Se(e){we||typeof document>"u"||(we=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Ee(e={},t={}){if(!t||typeof t!="object")return e;let n=Array.isArray(e)?[...e]:{...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)?n[r]=Ee(n[r]&&typeof n[r]=="object"?n[r]:{},o):n[r]=o;return n}function te(e=""){return String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function O(e){if(e==null)return e;if(typeof e=="function")return;if(typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>O(n)).filter(n=>n!==void 0);let t={};for(let n in e)if(e.hasOwnProperty(n)){let r=e[n];if(typeof r!="function"){let o=O(r);o!==void 0&&(t[n]=o)}}return t}function Le(e={},t={},{presets:n,defaultLog:r}){let o=typeof e=="object"&&("colors"in e||"typography"in e||"spatialRhythm"in e||"shape"in e||"behavior"in e||"layout"in e||"advanced"in e||"a11y"in e||"components"in e||"icons"in e),s=e&&e.enhancers;s&&!Array.isArray(s)&&(s=Object.values(s));let a=s??t.enhancers??[],u=e&&e.preset,c=e&&e.design,l="preset"in(e||{})||"design"in(e||{})||"enhancers"in(e||{}),d,i=null;if(l){let f=String(u||"default").toLowerCase(),m=n?.[f]||Object.values(n||{}).find(D=>te(D.name)===f||String(D.name||"").toLowerCase()===f);if(!m)throw new Error(`PDS preset not found: "${u||"default"}"`);i={id:m.id||te(m.name),name:m.name||m.id||String(f)};let w=structuredClone(m);if(c&&typeof c=="object"){let D=O(c);w=Ee(w,structuredClone(D))}let{mode:S,autoDefine:g,applyGlobalStyles:E,manageTheme:T,themeStorageKey:v,preloadStyles:R,criticalLayers:C,managerURL:j,manager:P,preset:z,design:A,enhancers:_,log:$,...L}=e;d={...L,design:w,preset:i.name,log:$||r}}else if(o){let{log:f,...m}=e;d={design:structuredClone(m),log:f||r}}else{let f=n?.default||Object.values(n||{}).find(m=>te(m.name)==="default");if(!f)throw new Error("PDS default preset not available");i={id:f.id||"default",name:f.name||"Default"},d={design:structuredClone(f),preset:i.name,log:r}}return{generatorConfig:d,enhancers:a,presetInfo:i}}function ve({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let o="light",s=null;if(e&&typeof window<"u"){try{s=localStorage.getItem(t)||null}catch{s=null}try{n?.(s),r?.(s)}catch{}s?s==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=s:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:s}}function ne(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&be&&(r=be),W(H(r))}async function Ae(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:o=null,enhancers:s=[],autoDefineOverrides:a=null,autoDefinePreferModule:u=!0}=e,c=(()=>{let d=new Map;return(t||[]).forEach(i=>d.set(i.selector,i)),(s||[]).forEach(i=>d.set(i.selector,i)),Array.from(d.values())})(),l=null;if(typeof window<"u"&&typeof document<"u"){let d=null;try{let g=await Promise.resolve().then(()=>(ge(),ye));d=g?.AutoDefiner||g?.default?.AutoDefiner||g?.default||null}catch(g){console.warn("AutoDefiner not available:",g?.message||g)}let i=g=>{switch(g){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${g}.js`}},{mapper:f,...m}=a&&typeof a=="object"?a:{},S={baseURL:n&&W(H(n,{preferModule:u})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(g,E)=>{if(typeof g=="string"&&g.startsWith("pds-")){let v=["pds-form","pds-drawer"].includes(g),R=E?.message?.includes("#pds/lit")||E?.message?.includes("Failed to resolve module specifier");v&&R?console.error(`\u274C PDS component <${g}> requires Lit but #pds/lit is not in import map.
26
- See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`):console.warn(`\u26A0\uFE0F PDS component <${g}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${g}>:`,E)},...m,mapper:g=>{if(customElements.get(g))return null;if(typeof o=="function")try{let E=o(g);return E===void 0?i(g):E}catch(E){return console.warn("Custom autoDefine.mapper error; falling back to default:",E?.message||E),i(g)}return i(g)}};d&&(l=new d(S),r.length>0&&typeof d.define=="function"&&await d.define(...r,{baseURL:n,mapper:S.mapper,onError:S.onError}))}return{autoDefiner:l,mergedEnhancers:c}}var oe=class extends EventTarget{},b=new oe;b.initializing=!1;b.currentPreset=null;b.debug=!1;var xe=(e="")=>String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),re=function(e="log",t,...n){let r=!!(b.registry&&!b.registry.isLive),o=(this?.debug||this?.design?.debug||b.debug||!1)===!0;if(r){if(!b.debug)return}else if(!o&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};async function Ge(e,t={}){if(t?.runtimeConfig===!1||typeof fetch!="function")return null;let n=t?.runtimeConfigURL||`${e}pds-runtime-config.json`;try{let r=await fetch(n,{cache:"no-store"});return r.ok?await r.json():null}catch{return null}}b.registry=q;b.enums=le;b.adoptLayers=ce;b.adoptPrimitives=ie;b.createStylesheet=de;b.isLiveMode=()=>q.isLive;b.ask=fe;b.toast=k;b.common=J;function Ce(e){let t=typeof CustomEvent=="function";try{let n=t?new CustomEvent("pds:ready",{detail:e}):new Event("pds:ready");b.dispatchEvent(n)}catch{}if(typeof document<"u")if(t){let n={detail:e,bubbles:!0,composed:!0};try{document.dispatchEvent(new CustomEvent("pds:ready",n))}catch{}try{document.dispatchEvent(new CustomEvent("pds-ready",n))}catch{}}else{try{document.dispatchEvent(new Event("pds:ready"))}catch{}try{document.dispatchEvent(new Event("pds-ready"))}catch{}}}typeof window<"u"&&(window.PDS=b);var se="pure-ds-theme",M=null,I=null;function V(e){try{if(typeof document>"u")return;let t="light";e?e==="system"?t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":t=e:t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",document.documentElement.setAttribute("data-theme",t)}catch{}}function G(e){try{if(M&&I){try{typeof M.removeEventListener=="function"?M.removeEventListener("change",I):typeof M.removeListener=="function"&&M.removeListener(I)}catch{}M=null,I=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let o=r?.matches===void 0?t.matches:r.matches;try{let s=o?"dark":"light";document.documentElement.setAttribute("data-theme",s),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};M=t,I=n,typeof t.addEventListener=="function"?t.addEventListener("change",n):typeof t.addListener=="function"&&t.addListener(n)}}catch{}}Object.defineProperty(b,"theme",{get(){try{return typeof window>"u"?null:localStorage.getItem(se)||null}catch{return null}},set(e){try{if(typeof window>"u")return;e==null?localStorage.removeItem(se):localStorage.setItem(se,e),V(e),G(e),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});b.defaultEnhancers=Y;async function Ke(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return Qe(r);let o=ne(r,{resolvePublicAssetURL:Z}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",o).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:a}=await import(s);return a(b,r,{emitReady:Ce,applyResolvedTheme:V,setupSystemListenerIfNeeded:G})}b.start=Ke;async function Qe(e){if(!e||typeof e!="object")throw new Error("PDS.start({ mode: 'static', ... }) requires a valid configuration object");let t=e.applyGlobalStyles??!0,n=e.manageTheme??!0,r=e.themeStorageKey??"pure-ds-theme",o=e.staticPaths??{},s=ne(e,{resolvePublicAssetURL:Z}),a=e&&e.autoDefine||null,u;a&&a.baseURL?u=W(H(a.baseURL,{preferModule:!1})):u=`${s}components/`;let c=a&&Array.isArray(a.predefine)&&a.predefine||[],l=a&&typeof a.mapper=="function"&&a.mapper||null;try{Se(b);let{resolvedTheme:d}=ve({manageTheme:n,themeStorageKey:r,applyResolvedTheme:V,setupSystemListenerIfNeeded:G}),i=await Ge(s,e),f=i?.config?.design||i?.design||null,m=i?.config?.preset||i?.preset||"default",w=i?.presetId||xe(m)||"default",S=f?{[String(w).toLowerCase()]:f,...String(w).toLowerCase()!=="default"?{default:f}:{}}:null,g=e?.design&&typeof e.design=="object"?O(e.design):null,E=xe(e?.preset||"default")||"default",T=g?{[String(E).toLowerCase()]:g,...String(E).toLowerCase()!=="default"?{default:g}:{}}:null,v=S||e?.presets||T||{};if(!Object.keys(v||{}).length)throw new Error("PDS static mode requires preset data. Run pds:build or provide config.presets/config.design.");let R=i?.config?{...i.config,...e,preset:e?.preset||w,design:g||f||i?.config?.design}:e,C=Le(R,{},{presets:v,defaultLog:re}),j=C.enhancers,P={tokens:`${s}styles/pds-tokens.css.js`,primitives:`${s}styles/pds-primitives.css.js`,components:`${s}styles/pds-components.css.js`,utilities:`${s}styles/pds-utilities.css.js`,styles:`${s}styles/pds-styles.css.js`},z=i?.paths||{};if(o={...P,...z,...o},b.registry.setStaticMode(o),t&&typeof document<"u")try{let L=await b.registry.getStylesheet("styles");if(L){L._pds=!0;let D=(document.adoptedStyleSheets||[]).filter(p=>p._pds!==!0);document.adoptedStyleSheets=[...D,L]}}catch(L){re.call(b,"warn","Failed to apply static styles:",L)}let A=null,_=[];try{let L=await Ae({autoDefineBaseURL:u,autoDefinePreload:c,autoDefineMapper:l,enhancers:j,autoDefineOverrides:a||null,autoDefinePreferModule:!(a&&a.baseURL)},{baseEnhancers:Y});A=L.autoDefiner,_=L.mergedEnhancers||[]}catch(L){re.call(b,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",L)}let $=O(e);return b.currentConfig=Object.freeze({mode:"static",...structuredClone($),design:structuredClone(C.generatorConfig.design),preset:C.generatorConfig.preset,theme:d,enhancers:_}),Ce({mode:"static",config:C.generatorConfig,theme:d,autoDefiner:A}),{config:C.generatorConfig,theme:d,autoDefiner:A}}catch(d){throw b.dispatchEvent(new CustomEvent("pds:error",{detail:{error:d}})),d}}var gt=V,bt=G;export{b as PDS,gt as applyResolvedTheme,bt as setupSystemListenerIfNeeded};
31
+ `;let u=o.querySelector("#msg-container");te(u,e)}o.addEventListener("click",u=>{u.target.closest('button[value="cancel"]')&&(o.close(),r(!1))});let i=()=>{let u=o.querySelector("form");u?u.addEventListener("submit",c=>{c.preventDefault();let d;t.useForm&&c.submitter.value==="ok"?(console.log("Found form:",u),console.log("Form elements:",u?Array.from(u.elements):"no form"),d=new FormData(u),console.log("FormData entries:",Array.from(d.entries()))):d=c.submitter.value==="ok",o.close(),r(d)}):requestAnimationFrame(i)};i(),o.addEventListener("close",()=>{setTimeout(()=>o.remove(),200)}),document.body.appendChild(o),typeof t.rendered=="function"&&t.rendered(o),o.showModal()})}async function Oe(){let e=document.querySelector("pds-toaster");return e||(e=document.createElement("pds-toaster"),document.body.appendChild(e),await customElements.whenDefined("pds-toaster")),e}async function D(e,t={}){return(await Oe()).toast(e,t)}D.success=async function(e,t={}){return D(e,{...t,type:"success"})};D.error=async function(e,t={}){return D(e,{...t,type:"error"})};D.warning=async function(e,t={}){return D(e,{...t,type:"warning"})};D.info=async function(e,t={}){return D(e,{...t,type:"information"})};var je=[{selector:".accordion"},{selector:"nav[data-dropdown]"},{selector:"label[data-toggle]"},{selector:'input[type="range"]'},{selector:"form[data-required]"},{selector:"fieldset[role=group][data-open]"},{selector:"[data-clip]"},{selector:"button, a[class*='btn-']"}];function Fe(e){e.dataset.enhancedAccordion||(e.dataset.enhancedAccordion="true",e.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===e&&e.querySelectorAll(":scope > details[open]").forEach(n=>{n!==t.target&&(n.open=!1)})},!0))}function He(e){if(e.dataset.enhancedDropdown)return;e.dataset.enhancedDropdown="true";let t=e.lastElementChild;if(!t)return;let n=e.querySelector("[data-dropdown-toggle]")||e.querySelector("button");n&&!n.hasAttribute("type")&&n.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.tagName?.toLowerCase()==="menu"&&!t.hasAttribute("role")&&t.setAttribute("role","menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),n&&(n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-controls",t.id),n.setAttribute("aria-expanded","false"));let o=()=>{let c=(e.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let d=e.getBoundingClientRect(),l=Math.max(0,window.innerHeight-d.bottom);return Math.max(0,d.top)>l?"up":"down"},s=()=>{e.dataset.dropdownDirection=o(),t.setAttribute("aria-hidden","false"),n?.setAttribute("aria-expanded","true")},i=()=>{t.setAttribute("aria-hidden","true"),n?.setAttribute("aria-expanded","false")},u=()=>{t.getAttribute("aria-hidden")==="false"?i():s()};n?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),u()}),document.addEventListener("click",c=>{e.contains(c.target)||i()}),e.addEventListener("keydown",c=>{c.key==="Escape"&&(i(),n?.focus())}),e.addEventListener("focusout",c=>{(!c.relatedTarget||!e.contains(c.relatedTarget))&&i()})}function We(e){if(e.dataset.enhancedToggle)return;e.dataset.enhancedToggle="true";let t=e.querySelector('input[type="checkbox"]');if(!t)return;e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","switch"),e.setAttribute("aria-checked",t.checked?"true":"false");let n=document.createElement("span");n.className="toggle-switch",n.setAttribute("role","presentation"),n.setAttribute("aria-hidden","true");let r=document.createElement("span");r.className="toggle-knob",n.appendChild(r),e.insertBefore(n,t.nextSibling);let o=()=>{e.setAttribute("aria-checked",t.checked?"true":"false")},s=()=>{t.disabled||(t.checked=!t.checked,o(),t.dispatchEvent(new Event("change",{bubbles:!0})))};e.addEventListener("click",i=>{i.preventDefault(),s()}),e.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),s())}),t.addEventListener("change",o)}function ze(e){if(e.dataset.enhancedRange)return;let t=e.closest("label"),n=t?.classList.contains("range-output"),r=e.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${r}-output`;if(e.id=r,n){let s=t.querySelector("span");if(s&&!s.classList.contains("range-output-wrapper")){let i=document.createElement("span");i.className="range-output-wrapper",i.style.display="flex",i.style.justifyContent="space-between",i.style.alignItems="center";let u=document.createElement("span");u.textContent=s.textContent,i.appendChild(u);let c=document.createElement("output");c.id=o,c.setAttribute("for",r),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=e.value,i.appendChild(c),s.textContent="",s.appendChild(i);let d=()=>{c.textContent=e.value};e.addEventListener("input",d)}}else{let s=e.closest(".range-container");s||(s=document.createElement("div"),s.className="range-container",e.parentNode?.insertBefore(s,e),s.appendChild(e)),s.style.position="relative";let i=document.createElement("output");i.id=o,i.setAttribute("for",r),i.className="range-bubble",i.setAttribute("aria-live","polite"),s.appendChild(i);let u=()=>{let l=parseFloat(e.min)||0,a=parseFloat(e.max)||100,p=parseFloat(e.value),f=(p-l)/(a-l);i.style.left=`calc(${f*100}% )`,i.textContent=String(p)},c=()=>i.classList.add("visible"),d=()=>i.classList.remove("visible");e.addEventListener("input",u),e.addEventListener("pointerdown",c),e.addEventListener("pointerup",d),e.addEventListener("pointerleave",d),e.addEventListener("focus",c),e.addEventListener("blur",d),u()}e.dataset.enhancedRange="1"}function Be(e){if(e.dataset.enhancedRequired)return;e.dataset.enhancedRequired="true";let t=n=>{let r=n.closest("label");if(!r||r.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",r.querySelector("span").appendChild(o);let s=n.closest("form");if(s&&!s.querySelector(".required-legend")){let i=document.createElement("small");i.classList.add("required-legend"),i.textContent="* Required fields",s.insertBefore(i,s.querySelector(".form-actions")||s.lastElementChild)}};e.querySelectorAll("[required]").forEach(n=>{t(n)})}function Ve(e){if(e.dataset.enhancedOpenGroup)return;e.dataset.enhancedOpenGroup="true",e.classList.add("flex","flex-wrap","buttons");let t=document.createElement("input");t.type="text",t.placeholder="Add item...",t.classList.add("input-text","input-sm"),t.style.width="auto";let n=e.querySelector('input[type="radio"], input[type="checkbox"]');e.appendChild(t),t.addEventListener("keydown",r=>{if(r.key==="Enter"||r.key==="Tab"){let o=t.value.trim();if(o){r.preventDefault();let s=n.type==="radio"?"radio":"checkbox",i=`open-group-${Math.random().toString(36).substring(2,11)}`,u=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let d=document.createElement("input");d.type=s,d.name=n.name||e.getAttribute("data-name")||"open-group",d.value=o,d.id=i,u.appendChild(c),u.appendChild(d),e.insertBefore(u,t),t.value=""}}else if(r.key==="Backspace"&&t.value===""){r.preventDefault();let o=e.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Ge(e){if(e.dataset.enhancedClip)return;e.dataset.enhancedClip="true",e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.hasAttribute("role")||e.setAttribute("role","button");let t=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("aria-expanded",r?"true":"false")},n=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("data-clip-open",r?"false":"true"),t()};e.addEventListener("click",r=>{r.defaultPrevented||n()}),e.addEventListener("keydown",r=>{(r.key===" "||r.key==="Enter")&&(r.preventDefault(),n())}),t()}function Ke(e){if(e.dataset.enhancedBtnWorking)return;e.dataset.enhancedBtnWorking="true";let t=null,n=!1;new MutationObserver(o=>{o.forEach(s=>{if(s.attributeName==="class"){let i=e.classList.contains("btn-working"),u=e.querySelector("pds-icon");if(i)if(u)t||(t=u.getAttribute("icon")),u.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),e.insertBefore(c,e.firstChild),n=!0}else s.oldValue?.includes("btn-working")&&u&&(n?(u.remove(),n=!1):t&&(u.setAttribute("icon",t),t=null))}})}).observe(e,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Qe=new Map([[".accordion",Fe],["nav[data-dropdown]",He],["label[data-toggle]",We],['input[type="range"]',ze],["form[data-required]",Be],["fieldset[role=group][data-open]",Ve],["[data-clip]",Ge],["button, a[class*='btn-']",Ke]]),ne=je.map(e=>({...e,run:Qe.get(e.selector)||(()=>{})}));var we="pds",Ze=/^([a-z][a-z0-9+\-.]*:)?\/\//i,be=/^[a-z]:/i;function O(e=""){return e.endsWith("/")?e:`${e}/`}function Je(e="",t=we){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Xe(e){return e.replace(/^\.\/+/,"")}function Ye(e){return be.test(e)?e.replace(be,"").replace(/^\/+/,""):e}function et(e){return e.startsWith("public/")?e.substring(7):e}function re(e,t={}){let n=t.segment||we,r=t.defaultRoot||`/assets/${n}/`,o=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!o||typeof o!="string")return O(r);let s=o.trim();return s?(s=s.replace(/\\/g,"/"),s=Je(s,n),s=O(s),Ze.test(s)?s:(s=Xe(s),s=Ye(s),s.startsWith("/")||(s=et(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(i,u)=>u===0?i:"/")),O(s))):O(r)}var nt=/^[a-z][a-z0-9+\-.]*:\/\//i,j=(()=>{try{return import.meta.url}catch{return}})(),z=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function B(e,t={}){if(!e||nt.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!j)return null;try{return new URL(e,j).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||o():o()||r())||e}var Se=(()=>{if(j)try{let e=new URL(j);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",j).href}catch{return}})(),Ee=!1;function Ae(e){Ee||typeof document>"u"||(Ee=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Le(e={},t={}){if(!t||typeof t!="object")return e;let n=Array.isArray(e)?[...e]:{...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)?n[r]=Le(n[r]&&typeof n[r]=="object"?n[r]:{},o):n[r]=o;return n}function oe(e=""){return String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function q(e){if(e==null)return e;if(typeof e=="function")return;if(typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>q(n)).filter(n=>n!==void 0);let t={};for(let n in e)if(e.hasOwnProperty(n)){let r=e[n];if(typeof r!="function"){let o=q(r);o!==void 0&&(t[n]=o)}}return t}function Ce(e={},t={},{presets:n,defaultLog:r}){let o=typeof e=="object"&&("colors"in e||"typography"in e||"spatialRhythm"in e||"shape"in e||"behavior"in e||"layout"in e||"advanced"in e||"a11y"in e||"components"in e||"icons"in e),s=e&&e.enhancers;s&&!Array.isArray(s)&&(s=Object.values(s));let i=s??t.enhancers??[],u=e&&e.preset,c=e&&e.design,d="preset"in(e||{})||"design"in(e||{})||"enhancers"in(e||{}),l,a=null;if(d){let p=String(u||"default").toLowerCase(),f=n?.[p]||Object.values(n||{}).find(k=>oe(k.name)===p||String(k.name||"").toLowerCase()===p);if(!f)throw new Error(`PDS preset not found: "${u||"default"}"`);a={id:f.id||oe(f.name),name:f.name||f.id||String(p)};let w=structuredClone(f);if(c&&typeof c=="object"){let k=q(c);w=Le(w,structuredClone(k))}let{mode:v,autoDefine:g,applyGlobalStyles:x,manageTheme:M,themeStorageKey:E,preloadStyles:R,criticalLayers:C,managerURL:N,manager:I,preset:H,design:A,enhancers:$,log:P,...S}=e;l={...S,design:w,preset:a.name,log:P||r}}else if(o){let{log:p,...f}=e;l={design:structuredClone(f),log:p||r}}else{let p=n?.default||Object.values(n||{}).find(f=>oe(f.name)==="default");if(!p)throw new Error("PDS default preset not available");a={id:p.id||"default",name:p.name||"Default"},l={design:structuredClone(p),preset:a.name,log:r}}return{generatorConfig:l,enhancers:i,presetInfo:a}}function De({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let o="light",s=null;if(e&&typeof window<"u"){try{s=localStorage.getItem(t)||null}catch{s=null}try{n?.(s),r?.(s)}catch{}s?s==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=s:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:s}}function ie(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&Se&&(r=Se),z(B(r))}async function ke(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:o=null,enhancers:s=[],autoDefineOverrides:i=null,autoDefinePreferModule:u=!0}=e,c=(()=>{let l=new Map;return(t||[]).forEach(a=>l.set(a.selector,a)),(s||[]).forEach(a=>l.set(a.selector,a)),Array.from(l.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let l=null;try{let g=await Promise.resolve().then(()=>(xe(),ve));l=g?.AutoDefiner||g?.default?.AutoDefiner||g?.default||null}catch(g){console.warn("AutoDefiner not available:",g?.message||g)}let a=g=>{switch(g){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${g}.js`}},{mapper:p,...f}=i&&typeof i=="object"?i:{},v={baseURL:n&&z(B(n,{preferModule:u})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(g,x)=>{if(typeof g=="string"&&g.startsWith("pds-")){let E=["pds-form","pds-drawer"].includes(g),R=x?.message?.includes("#pds/lit")||x?.message?.includes("Failed to resolve module specifier");E&&R?console.error(`\u274C PDS component <${g}> requires Lit but #pds/lit is not in import map.
32
+ See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`):console.warn(`\u26A0\uFE0F PDS component <${g}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${g}>:`,x)},...f,mapper:g=>{if(customElements.get(g))return null;if(typeof o=="function")try{let x=o(g);return x===void 0?a(g):x}catch(x){return console.warn("Custom autoDefine.mapper error; falling back to default:",x?.message||x),a(g)}return a(g)}};l&&(d=new l(v),r.length>0&&typeof l.define=="function"&&await l.define(...r,{baseURL:n,mapper:v.mapper,onError:v.onError}))}return{autoDefiner:d,mergedEnhancers:c}}var de=class extends EventTarget{},b=new de;b.initializing=!1;b.currentPreset=null;b.debug=!1;var Ue=(e="")=>String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),G=function(e="log",t,...n){let r=!!(b.registry&&!b.registry.isLive),o=(this?.debug||this?.design?.debug||b.debug||!1)===!0;if(r){if(!b.debug)return}else if(!o&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};async function rt(e,t={}){if(t?.runtimeConfig===!1||typeof fetch!="function")return null;let n=t?.runtimeConfigURL||`${e}pds-runtime-config.json`;try{let r=await fetch(n,{cache:"no-store"});return r.ok?await r.json():null}catch{return null}}b.registry=U;b.enums=fe;b.adoptLayers=pe;b.adoptPrimitives=ue;b.createStylesheet=he;b.isLiveMode=()=>U.isLive;b.ask=ge;b.toast=D;b.common=ee;b.AutoComplete=null;b.loadAutoComplete=async()=>{if(b.AutoComplete)return b.AutoComplete;try{let e=await Promise.resolve().then(()=>(_e(),Pe)),t=e?.AutoComplete||e?.default||e;if(t)return b.AutoComplete=t,t}catch(e){G("warn","PDS.loadAutoComplete failed",e)}return null};function qe(e){let t=typeof CustomEvent=="function";try{let n=t?new CustomEvent("pds:ready",{detail:e}):new Event("pds:ready");b.dispatchEvent(n)}catch{}if(typeof document<"u")if(t){let n={detail:e,bubbles:!0,composed:!0};try{document.dispatchEvent(new CustomEvent("pds:ready",n))}catch{}try{document.dispatchEvent(new CustomEvent("pds-ready",n))}catch{}}else{try{document.dispatchEvent(new Event("pds:ready"))}catch{}try{document.dispatchEvent(new Event("pds-ready"))}catch{}}}typeof window<"u"&&(window.PDS=b);var le="pure-ds-theme",T=null,F=null;function K(e){try{if(typeof document>"u")return;let t="light";e?e==="system"?t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":t=e:t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",document.documentElement.setAttribute("data-theme",t)}catch{}}function Q(e){try{if(T&&F){try{typeof T.removeEventListener=="function"?T.removeEventListener("change",F):typeof T.removeListener=="function"&&T.removeListener(F)}catch{}T=null,F=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let o=r?.matches===void 0?t.matches:r.matches;try{let s=o?"dark":"light";document.documentElement.setAttribute("data-theme",s),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};T=t,F=n,typeof t.addEventListener=="function"?t.addEventListener("change",n):typeof t.addListener=="function"&&t.addListener(n)}}catch{}}Object.defineProperty(b,"theme",{get(){try{return typeof window>"u"?null:localStorage.getItem(le)||null}catch{return null}},set(e){try{if(typeof window>"u")return;e==null?localStorage.removeItem(le):localStorage.setItem(le,e),K(e),Q(e),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});b.defaultEnhancers=ne;async function st(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return ot(r);let o=ie(r,{resolvePublicAssetURL:re}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",o).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:i}=await import(s);return i(b,r,{emitReady:qe,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q})}b.start=st;async function ot(e){if(!e||typeof e!="object")throw new Error("PDS.start({ mode: 'static', ... }) requires a valid configuration object");let t=e.applyGlobalStyles??!0,n=e.manageTheme??!0,r=e.themeStorageKey??"pure-ds-theme",o=e.staticPaths??{},s=ie(e,{resolvePublicAssetURL:re}),i=e&&e.autoDefine||null,u;i&&i.baseURL?u=z(B(i.baseURL,{preferModule:!1})):u=`${s}components/`;let c=i&&Array.isArray(i.predefine)&&i.predefine||[],d=i&&typeof i.mapper=="function"&&i.mapper||null;try{Ae(b);let{resolvedTheme:l}=De({manageTheme:n,themeStorageKey:r,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q}),a=await rt(s,e),p=a?.config?.design||a?.design||null,f=a?.config?.preset||a?.preset||"default",w=a?.presetId||Ue(f)||"default",v=p?{[String(w).toLowerCase()]:p,...String(w).toLowerCase()!=="default"?{default:p}:{}}:null,g=e?.design&&typeof e.design=="object"?q(e.design):null,x=Ue(e?.preset||"default")||"default",M=g?{[String(x).toLowerCase()]:g,...String(x).toLowerCase()!=="default"?{default:g}:{}}:null,E=v||e?.presets||M||{};if(!Object.keys(E||{}).length)throw new Error("PDS static mode requires preset data. Run pds:build or provide config.presets/config.design.");let R=a?.config?{...a.config,...e,preset:e?.preset||w,design:g||p||a?.config?.design}:e,C=Ce(R,{},{presets:E,defaultLog:G}),N=C.enhancers,I={tokens:`${s}styles/pds-tokens.css.js`,primitives:`${s}styles/pds-primitives.css.js`,components:`${s}styles/pds-components.css.js`,utilities:`${s}styles/pds-utilities.css.js`,styles:`${s}styles/pds-styles.css.js`},H=a?.paths||{};if(o={...I,...H,...o},b.registry.setStaticMode(o),t&&typeof document<"u")try{let S=await b.registry.getStylesheet("styles");if(S){S._pds=!0;let k=(document.adoptedStyleSheets||[]).filter(h=>h._pds!==!0);document.adoptedStyleSheets=[...k,S]}}catch(S){G.call(b,"warn","Failed to apply static styles:",S)}let A=null,$=[];try{let S=await ke({autoDefineBaseURL:u,autoDefinePreload:c,autoDefineMapper:d,enhancers:N,autoDefineOverrides:i||null,autoDefinePreferModule:!(i&&i.baseURL)},{baseEnhancers:ne});A=S.autoDefiner,$=S.mergedEnhancers||[]}catch(S){G.call(b,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",S)}let P=q(e);return b.currentConfig=Object.freeze({mode:"static",...structuredClone(P),design:structuredClone(C.generatorConfig.design),preset:C.generatorConfig.preset,theme:l,enhancers:$}),qe({mode:"static",config:C.generatorConfig,theme:l,autoDefiner:A}),{config:C.generatorConfig,theme:l,autoDefiner:A}}catch(l){throw b.dispatchEvent(new CustomEvent("pds:error",{detail:{error:l}})),l}}var Rt=K,$t=Q;export{b as PDS,Rt as applyResolvedTheme,$t as setupSystemListenerIfNeeded};
@@ -0,0 +1,430 @@
1
+ /**
2
+ * Omnibox search input with PDS styling and form-associated behavior.
3
+ *
4
+ * @element pds-omnibox
5
+ * @formAssociated
6
+ *
7
+ * @attr {string} name - Form field name for submitted data
8
+ * @attr {string} placeholder - Placeholder text for the search input
9
+ * @attr {string} value - Current input value
10
+ * @attr {boolean} disabled - Disable the input
11
+ * @attr {boolean} required - Mark the input as required
12
+ * @attr {string} autocomplete - Native autocomplete attribute (default: off)
13
+ *
14
+ * @property {Object} settings - AutoComplete settings object (required by consumer)
15
+ */
16
+ const LAYERS = ["tokens", "primitives", "components", "utilities"];
17
+ const DEFAULT_PLACEHOLDER = "Search...";
18
+
19
+ export class PdsOmnibox extends HTMLElement {
20
+ static formAssociated = true;
21
+
22
+ static get observedAttributes() {
23
+ return ["name", "placeholder", "value", "disabled", "required", "autocomplete"];
24
+ }
25
+
26
+ #root;
27
+ #internals;
28
+ #input;
29
+ #settings;
30
+ #defaultValue = "";
31
+
32
+ constructor() {
33
+ super();
34
+ this.#root = this.attachShadow({ mode: "open" });
35
+ this.#internals = this.attachInternals();
36
+ this.#renderStructure();
37
+ void this.#adoptStyles();
38
+ }
39
+
40
+ connectedCallback() {
41
+ this.#defaultValue = this.getAttribute("value") || "";
42
+ this.#syncAttributes();
43
+ this.#updateFormValue(this.#input.value || "");
44
+ }
45
+
46
+ attributeChangedCallback(name, oldValue, newValue) {
47
+ if (oldValue === newValue) return;
48
+ this.#syncAttributes();
49
+ }
50
+
51
+ get settings() {
52
+ return this.#settings;
53
+ }
54
+
55
+ set settings(value) {
56
+ this.#settings = value;
57
+ console.log('settings set', this.#settings);
58
+ }
59
+
60
+ get name() {
61
+ return this.getAttribute("name") || "";
62
+ }
63
+
64
+ set name(value) {
65
+ if (value == null || value === "") this.removeAttribute("name");
66
+ else this.setAttribute("name", value);
67
+ }
68
+
69
+ get placeholder() {
70
+ return this.getAttribute("placeholder") || DEFAULT_PLACEHOLDER;
71
+ }
72
+
73
+ set placeholder(value) {
74
+ if (value == null || value === "") this.removeAttribute("placeholder");
75
+ else this.setAttribute("placeholder", value);
76
+ }
77
+
78
+ get value() {
79
+ return this.#input?.value || "";
80
+ }
81
+
82
+ set value(value) {
83
+ const next = value == null ? "" : String(value);
84
+ if (this.#input) this.#input.value = next;
85
+ this.#updateFormValue(next);
86
+ }
87
+
88
+ get disabled() {
89
+ return this.hasAttribute("disabled");
90
+ }
91
+
92
+ set disabled(value) {
93
+ if (value) this.setAttribute("disabled", "");
94
+ else this.removeAttribute("disabled");
95
+ }
96
+
97
+ get required() {
98
+ return this.hasAttribute("required");
99
+ }
100
+
101
+ set required(value) {
102
+ if (value) this.setAttribute("required", "");
103
+ else this.removeAttribute("required");
104
+ }
105
+
106
+ get autocomplete() {
107
+ return this.getAttribute("autocomplete") || "off";
108
+ }
109
+
110
+ set autocomplete(value) {
111
+ if (value == null || value === "") this.removeAttribute("autocomplete");
112
+ else this.setAttribute("autocomplete", value);
113
+ }
114
+
115
+ formAssociatedCallback() {}
116
+
117
+ formDisabledCallback(disabled) {
118
+ if (!this.#input) return;
119
+ this.#input.disabled = disabled;
120
+ }
121
+
122
+ formResetCallback() {
123
+ this.value = this.#defaultValue;
124
+ }
125
+
126
+ formStateRestoreCallback(state) {
127
+ this.value = state ?? "";
128
+ }
129
+
130
+ checkValidity() {
131
+ return this.#input?.checkValidity?.() ?? true;
132
+ }
133
+
134
+ reportValidity() {
135
+ return this.#input?.reportValidity?.() ?? true;
136
+ }
137
+
138
+ #renderStructure() {
139
+ this.#root.innerHTML = `
140
+ <div class="ac-container input-icon">
141
+ <pds-icon icon="magnifying-glass"></pds-icon>
142
+ <input class="ac-input" type="search" placeholder="${DEFAULT_PLACEHOLDER}" autocomplete="off" />
143
+ </div>
144
+ `;
145
+
146
+ this.#input = this.#root.querySelector("input");
147
+ this.#input.addEventListener("input", () => {
148
+ this.#updateFormValue(this.#input.value);
149
+ this.dispatchEvent(new Event("input", { bubbles: true, composed: true }));
150
+ });
151
+ this.#input.addEventListener("change", () => {
152
+ this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
153
+ });
154
+ this.#input.addEventListener("focus", (e) => {
155
+ this.#handleAutoComplete(e);
156
+ });
157
+ }
158
+
159
+ async #adoptStyles() {
160
+ const componentStyles = PDS.createStylesheet(/*css*/`
161
+ @layer omnibox {
162
+ :host {
163
+ display: block;
164
+ --ac-grid-default: 45px 1fr 80px;
165
+ --ac-bg-default: var(--color-surface-subtle);
166
+ --ac-color-default: var(--color-text-primary);
167
+ --ac-accent-color-default: var(--color-accent-500);
168
+ --ac-rad: var(--radius-lg);
169
+ --ac-box-shadow: var(--shadow-md);
170
+ --ac-color-muted: var(--color-text-muted);
171
+ --ac-margin: var(--spacing-0);
172
+ --icon-size: var(--spacing-6);
173
+ --ac-itm-height-default: 5rem;
174
+ --ac-max-height-default: 300px;
175
+ }
176
+
177
+ .ac-container {
178
+ position: relative;
179
+ width: 100%;
180
+
181
+ .ac-input {
182
+ width: 100%;
183
+ }
184
+
185
+ .ac-suggestion {
186
+ background-color: var(--color-surface-base);
187
+ max-height: var(--ac-max-height, var(--ac-max-height-default));
188
+ position: absolute;
189
+ z-index: var(--z-dropdown);
190
+ left: 0;
191
+ padding: var(--ac-margin);
192
+ border-radius: 0 0 var(--ac-rad) var(--ac-rad);
193
+ box-shadow: var(--ac-box-shadow);
194
+ overflow-y: auto;
195
+
196
+ &.ac-active {
197
+ box-shadow: var(--shadow-sm);
198
+ }
199
+
200
+ .ac-empty {
201
+ padding: var(--spacing-4);
202
+ border-radius: var(--ac-rad);
203
+ }
204
+
205
+ .ac-itm {
206
+ display: grid;
207
+ grid-template-columns: var(--ac-grid, var(--ac-grid-default));
208
+ align-items: center;
209
+ column-gap: var(--spacing-2);
210
+ border-color: var(--color-border);
211
+ background-color: var(--ac-bg, var(--ac-bg-default));
212
+ color: var(--ac-color, var(--ac-color-default));
213
+ cursor: pointer;
214
+ transition: background-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast);
215
+ max-height: var(--ac-itm-height, var(--ac-itm-height-default));
216
+ border-radius: 0;
217
+ padding: var(--spacing-2) var(--spacing-3);
218
+
219
+ > pds-icon,
220
+ > svg-icon,
221
+ > img {
222
+ grid-column: 1;
223
+ justify-self: center;
224
+ }
225
+
226
+ > .text {
227
+ grid-column: 2;
228
+ min-width: var(--spacing-0);
229
+ }
230
+
231
+ > .category {
232
+ grid-column: 3;
233
+ justify-self: end;
234
+ font-size: var(--font-size-sm);
235
+ }
236
+
237
+ .text {
238
+ overflow: hidden;
239
+ text-overflow: ellipsis;
240
+ white-space: nowrap;
241
+ }
242
+
243
+ img {
244
+ width: var(--icon-size);
245
+ height: var(--icon-size);
246
+ }
247
+
248
+ .category {
249
+
250
+ color: var(--ac-color, var(--ac-color-muted));
251
+ }
252
+
253
+
254
+ svg-icon,
255
+ pds-icon {
256
+ --icon-fill-color: var(--ac-icon-fill, var(--ac-accent-color-default));
257
+ color: var(--ac-icon-fill, var(--ac-accent-color-default));
258
+ }
259
+
260
+ small {
261
+ color: var(--ac-color-description, var(--ac-color-default));
262
+ }
263
+
264
+ &:hover,
265
+ &.selected {
266
+ background-color: var(--accent-color, var(--ac-accent-color-default));
267
+ color: var(--ac-bg, var(--ac-bg-default));
268
+
269
+ svg-icon,
270
+ pds-icon {
271
+ --icon-fill-color: var(--color-surface-base);
272
+ color: var(--color-surface-base);
273
+ }
274
+
275
+ small,
276
+ .category {
277
+ color: inherit;
278
+ }
279
+ }
280
+ }
281
+
282
+ .text {
283
+ overflow: visible;
284
+ text-overflow: unset;
285
+ white-space: unset;
286
+ height: auto !important;
287
+ }
288
+ }
289
+
290
+ &.ac-active[data-direction="down"] {
291
+ .ac-input {
292
+ border-bottom-left-radius: 0;
293
+ border-bottom-right-radius: 0;
294
+ }
295
+
296
+ .ac-itm:first-child {
297
+ border-top-left-radius: 0;
298
+ border-top-right-radius: 0;
299
+ }
300
+
301
+ .ac-itm:last-child {
302
+ border-bottom-left-radius: var(--ac-rad);
303
+ border-bottom-right-radius: var(--ac-rad);
304
+ }
305
+ }
306
+
307
+ &.ac-active[data-direction="up"] {
308
+ .ac-input {
309
+ border-top-left-radius: 0;
310
+ border-top-right-radius: 0;
311
+ }
312
+
313
+ .ac-itm:last-child {
314
+ border-bottom-left-radius: 0;
315
+ border-bottom-right-radius: 0;
316
+ }
317
+
318
+ .ac-itm:first-child {
319
+ border-top-left-radius: var(--ac-rad);
320
+ border-top-right-radius: var(--ac-rad);
321
+ }
322
+ }
323
+ }
324
+
325
+ @media (max-width: var(--breakpoint-sm)) {
326
+ .ac-container {
327
+ .ac-suggestion.full-mobile {
328
+ padding: var(--spacing-4);
329
+ display: flex;
330
+ flex-direction: column-reverse;
331
+ grid-area: suggest;
332
+ position: relative;
333
+ max-height: unset;
334
+ max-width: unset;
335
+
336
+ .ac-itm {
337
+ padding: var(--spacing-3) 0;
338
+ background-color: var(--color-surface-base);
339
+ margin: var(--spacing-0) var(--spacing-1) var(--spacing-1) var(--spacing-0);
340
+ border-radius: var(--radius-sm);
341
+ }
342
+
343
+ .ac-itm:hover,
344
+ .ac-itm.selected {
345
+ background-color: var(--color-accent-300);
346
+ color: var(--color-surface-base);
347
+ }
348
+ }
349
+ }
350
+ }
351
+ }
352
+ `);
353
+
354
+ await PDS.adoptLayers(this.#root, LAYERS, [componentStyles]);
355
+ }
356
+
357
+ #syncAttributes() {
358
+ if (!this.#input) return;
359
+
360
+ this.#input.placeholder = this.placeholder;
361
+ this.#input.autocomplete = this.autocomplete;
362
+
363
+ if (this.hasAttribute("value")) {
364
+ const v = this.getAttribute("value") || "";
365
+ if (this.#input.value !== v) this.#input.value = v;
366
+ }
367
+
368
+ if (this.disabled) this.#input.setAttribute("disabled", "");
369
+ else this.#input.removeAttribute("disabled");
370
+
371
+ if (this.required) this.#input.setAttribute("required", "");
372
+ else this.#input.removeAttribute("required");
373
+
374
+ this.#updateFormValue(this.#input.value);
375
+ }
376
+
377
+ #updateFormValue(value) {
378
+ this.#internals.setFormValue(value);
379
+ this.#syncValidity();
380
+ }
381
+
382
+ #syncValidity() {
383
+ if (!this.#input) return;
384
+ if (this.#input.checkValidity()) {
385
+ this.#internals.setValidity({}, "", this.#input);
386
+ return;
387
+ }
388
+ this.#internals.setValidity(
389
+ { customError: true },
390
+ this.#input.validationMessage || "Invalid value",
391
+ this.#input
392
+ );
393
+ }
394
+
395
+ async #handleAutoComplete(e) {
396
+
397
+ if (!this.settings) return;
398
+
399
+ const AutoComplete =
400
+ (PDS && PDS.AutoComplete) ||
401
+ (PDS && typeof PDS.loadAutoComplete === "function"
402
+ ? await PDS.loadAutoComplete()
403
+ : null);
404
+
405
+ if (AutoComplete && typeof AutoComplete.connect === "function") {
406
+ const settings = {
407
+ //debug: true,
408
+ iconHandler: (item) => {
409
+ return item.icon ? `<pds-icon icon="${item.icon}"></pds-icon>` : null;
410
+ },
411
+ ...this.settings
412
+ };
413
+ // const ev = {
414
+ // ...e,
415
+ // target: this.#input
416
+ // }
417
+ //AutoComplete.connect(ev, settings, this.#root);
418
+
419
+ this.#input._autoComplete = new AutoComplete(this.#input.parentNode, this.#input, settings);
420
+ setTimeout(() => {
421
+ this.#input._autoComplete.focusHandler(e);
422
+ }, 100);
423
+
424
+ }
425
+ }
426
+ }
427
+
428
+ if (!customElements.get("pds-omnibox")) {
429
+ customElements.define("pds-omnibox", PdsOmnibox);
430
+ }
package/src/js/pds.d.ts CHANGED
@@ -174,6 +174,8 @@ export class PDS extends EventTarget {
174
174
  static enums?: Record<string, any>;
175
175
  static common?: Record<string, any>;
176
176
  static query?: (question: string) => Promise<any[]>;
177
+ static AutoComplete?: any;
178
+ static loadAutoComplete?: () => Promise<any>;
177
179
 
178
180
  /**
179
181
  * Display a toast notification.