@pure-ds/core 0.6.11 → 0.7.2

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.
Files changed (93) hide show
  1. package/.cursorrules +38 -1
  2. package/.github/copilot-instructions.md +38 -1
  3. package/custom-elements.json +77 -46
  4. package/dist/types/public/assets/js/pds-ask.d.ts +3 -0
  5. package/dist/types/public/assets/js/pds-ask.d.ts.map +1 -0
  6. package/dist/types/public/assets/js/pds-auto-definer.d.ts +9 -0
  7. package/dist/types/public/assets/js/pds-auto-definer.d.ts.map +1 -0
  8. package/dist/types/public/assets/js/pds-autocomplete.d.ts +68 -0
  9. package/dist/types/public/assets/js/pds-autocomplete.d.ts.map +1 -0
  10. package/dist/types/public/assets/js/pds-enhancers.d.ts +7 -0
  11. package/dist/types/public/assets/js/pds-enhancers.d.ts.map +1 -0
  12. package/dist/types/public/assets/js/pds-manager.d.ts +444 -159
  13. package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
  14. package/dist/types/public/assets/js/pds-toast.d.ts +9 -0
  15. package/dist/types/public/assets/js/pds-toast.d.ts.map +1 -0
  16. package/dist/types/public/assets/js/pds.d.ts +4 -3
  17. package/dist/types/public/assets/js/pds.d.ts.map +1 -1
  18. package/dist/types/public/assets/pds/components/pds-drawer.d.ts +1 -143
  19. package/dist/types/public/assets/pds/components/pds-drawer.d.ts.map +1 -1
  20. package/dist/types/public/assets/pds/components/pds-form.d.ts.map +1 -1
  21. package/dist/types/public/assets/pds/components/pds-icon.d.ts.map +1 -1
  22. package/dist/types/public/assets/pds/components/pds-omnibox.d.ts.map +1 -1
  23. package/dist/types/public/assets/pds/components/pds-richtext.d.ts.map +1 -1
  24. package/dist/types/public/assets/pds/components/pds-scrollrow.d.ts +1 -83
  25. package/dist/types/public/assets/pds/components/pds-scrollrow.d.ts.map +1 -1
  26. package/dist/types/public/assets/pds/components/pds-splitpanel.d.ts +1 -89
  27. package/dist/types/public/assets/pds/components/pds-splitpanel.d.ts.map +1 -1
  28. package/dist/types/public/assets/pds/components/pds-theme.d.ts +1 -22
  29. package/dist/types/public/assets/pds/components/pds-theme.d.ts.map +1 -1
  30. package/dist/types/public/assets/pds/components/pds-toaster.d.ts.map +1 -1
  31. package/dist/types/public/assets/pds/components/pds-treeview.d.ts.map +1 -1
  32. package/dist/types/public/assets/pds/components/pds-upload.d.ts.map +1 -1
  33. package/dist/types/src/js/common/ask.d.ts.map +1 -1
  34. package/dist/types/src/js/pds-ask.d.ts +2 -0
  35. package/dist/types/src/js/pds-ask.d.ts.map +1 -0
  36. package/dist/types/src/js/pds-auto-definer.d.ts +2 -0
  37. package/dist/types/src/js/pds-auto-definer.d.ts.map +1 -0
  38. package/dist/types/src/js/pds-autocomplete.d.ts +2 -0
  39. package/dist/types/src/js/pds-autocomplete.d.ts.map +1 -0
  40. package/dist/types/src/js/pds-core/pds-live.d.ts.map +1 -1
  41. package/dist/types/src/js/pds-core/pds-start-helpers.d.ts.map +1 -1
  42. package/dist/types/src/js/pds-enhancers.d.ts +2 -0
  43. package/dist/types/src/js/pds-enhancers.d.ts.map +1 -0
  44. package/dist/types/src/js/pds-live-manager/conversion-service.d.ts.map +1 -1
  45. package/dist/types/src/js/pds-toast.d.ts +2 -0
  46. package/dist/types/src/js/pds-toast.d.ts.map +1 -0
  47. package/dist/types/src/js/pds.d.ts.map +1 -1
  48. package/package.json +6 -4
  49. package/packages/pds-cli/README.md +9 -0
  50. package/packages/pds-cli/bin/pds-static.js +25 -3
  51. package/packages/pds-cli/bin/sync-assets.js +34 -0
  52. package/packages/pds-cli/bin/templates/bootstrap/pds.config.js +1 -5
  53. package/packages/pds-cli/bin/templates/bootstrap/public/index.html +2 -1
  54. package/packages/pds-cli/bin/templates/starter-templates.js +1 -3
  55. package/public/assets/js/app.js +4 -34
  56. package/public/assets/js/pds-ask.js +25 -0
  57. package/public/assets/js/pds-auto-definer.js +1 -0
  58. package/public/assets/js/pds-autocomplete.js +7 -0
  59. package/public/assets/js/pds-enhancers.js +1 -0
  60. package/public/assets/js/pds-manager.js +37 -37
  61. package/public/assets/js/pds-toast.js +1 -0
  62. package/public/assets/js/pds.js +2 -32
  63. package/public/assets/pds/components/pds-calendar.js +2 -2
  64. package/public/assets/pds/components/pds-drawer.js +1 -1
  65. package/public/assets/pds/components/pds-form.js +7 -6
  66. package/public/assets/pds/components/pds-icon.js +12 -9
  67. package/public/assets/pds/components/pds-live-edit.js +5 -8
  68. package/public/assets/pds/components/pds-live-importer.js +2 -1
  69. package/public/assets/pds/components/pds-live-template-canvas.js +2 -1
  70. package/public/assets/pds/components/pds-omnibox.js +11 -1
  71. package/public/assets/pds/components/pds-richtext.js +2 -0
  72. package/public/assets/pds/components/pds-scrollrow.js +5 -1
  73. package/public/assets/pds/components/pds-splitpanel.js +3 -1
  74. package/public/assets/pds/components/pds-theme.js +2 -0
  75. package/public/assets/pds/components/pds-toaster.js +2 -0
  76. package/public/assets/pds/components/pds-treeview.js +2 -0
  77. package/public/assets/pds/components/pds-upload.js +2 -0
  78. package/public/assets/pds/core/pds-ask.js +25 -0
  79. package/public/assets/pds/core/pds-auto-definer.js +1 -0
  80. package/public/assets/pds/core/pds-autocomplete.js +7 -0
  81. package/public/assets/pds/core/pds-enhancers.js +1 -0
  82. package/public/assets/pds/core/pds-manager.js +3646 -0
  83. package/public/assets/pds/core/pds-toast.js +1 -0
  84. package/public/assets/pds/core.js +2 -0
  85. package/public/assets/pds/custom-elements.json +77 -46
  86. package/public/assets/pds/pds-css-complete.json +2 -2
  87. package/public/assets/pds/pds.css-data.json +1 -1
  88. package/public/assets/pds/vscode-custom-data.json +5 -13
  89. package/readme.md +4 -1
  90. package/src/js/pds-core/pds-live.js +3 -0
  91. package/src/js/pds-core/pds-start-helpers.js +5 -1
  92. package/src/js/pds-live-manager/conversion-service.js +1 -2
  93. package/src/js/pds.js +159 -14
@@ -0,0 +1 @@
1
+ async function r(){let t=document.querySelector("pds-toaster");return t||(t=document.createElement("pds-toaster"),document.body.appendChild(t),await customElements.whenDefined("pds-toaster")),t}async function n(t,e={}){return(await r()).toast(t,e)}n.success=async function(t,e={}){return n(t,{...e,type:"success"})};n.error=async function(t,e={}){return n(t,{...e,type:"error"})};n.warning=async function(t,e={}){return n(t,{...e,type:"warning"})};n.info=async function(t,e={}){return n(t,{...e,type:"information"})};export{n as toast};
@@ -1,32 +1,2 @@
1
- var qe=Object.defineProperty;var Ne=(t,e)=>()=>(t&&(e=t(t=0)),e);var he=(t,e)=>{for(var n in e)qe(t,n,{get:e[n],enumerable:!0})};var De={};he(De,{AutoDefiner:()=>oe});async function ot(...t){let e={};t.length&&typeof t[t.length-1]=="object"&&(e=t.pop()||{});let n=t,{baseURL:r,mapper:s=d=>`${d}.js`,onError:o=(d,a)=>console.error(`[defineWebComponents] ${d}:`,a)}=e,i=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),c=d=>d.toLowerCase().replace(/(^|-)([a-z])/g,(a,l,h)=>h.toUpperCase()),u=async d=>{try{if(customElements.get(d))return{tag:d,status:"already-defined"};let a=s(d),h=await import(a instanceof URL?a.href:new URL(a,i).href),y=h?.default??h?.[c(d)];if(!y){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,y),{tag:d,status:"defined"})}catch(a){throw o(d,a),a}};return Promise.all(n.map(u))}var oe,ke=Ne(()=>{oe=class{constructor(e={}){let{baseURL:n,mapper:r,onError:s,predicate:o=()=>!0,attributeModule:i="data-module",root:c=document,scanExisting:u=!0,debounceMs:d=16,observeShadows:a=!0,enhancers:l=[],patchAttachShadow:h=!0}=e,y=new Set,A=new Set,x=new Set,w=new Map,L=new WeakMap,R=new WeakMap,E=0,P=!1,_=null,g=p=>{if(!p||!l.length)return;let m=R.get(p);m||(m=new Set,R.set(p,m));for(let f of l)if(!(!f.selector||!f.run)&&!m.has(f.selector))try{p.matches&&p.matches(f.selector)&&(f.run(p),m.add(f.selector))}catch(T){console.warn(`[AutoDefiner] Error applying enhancer for selector "${f.selector}":`,T)}},S=(p,m)=>{if(!P&&!(!p||!p.includes("-"))&&!customElements.get(p)&&!A.has(p)&&!x.has(p)){if(m&&m.getAttribute){let f=m.getAttribute(i);f&&!w.has(p)&&w.set(p,f)}y.add(p),C()}},C=()=>{E||(E=setTimeout(M,d))},v=p=>{if(p){if(p.nodeType===1){let m=p,f=m.tagName?.toLowerCase();f&&f.includes("-")&&!customElements.get(f)&&o(f,m)&&S(f,m),g(m),a&&m.shadowRoot&&D(m.shadowRoot)}p.querySelectorAll&&p.querySelectorAll("*").forEach(m=>{let f=m.tagName?.toLowerCase();f&&f.includes("-")&&!customElements.get(f)&&o(f,m)&&S(f,m),g(m),a&&m.shadowRoot&&D(m.shadowRoot)})}},D=p=>{if(!p||L.has(p))return;v(p);let m=new MutationObserver(f=>{for(let T of f)T.addedNodes?.forEach(I=>{v(I)}),T.type==="attributes"&&T.target&&v(T.target)});m.observe(p,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...l.map(f=>f.selector).filter(f=>f.startsWith("data-"))]}),L.set(p,m)};async function M(){if(clearTimeout(E),E=0,!y.size)return;let p=Array.from(y);y.clear(),p.forEach(m=>A.add(m));try{let m=f=>w.get(f)??(r?r(f):`${f}.js`);await ot(...p,{baseURL:n,mapper:m,onError:(f,T)=>{x.add(f),s?.(f,T)}})}catch{}finally{p.forEach(m=>A.delete(m))}}let k=c===document?document.documentElement:c,j=new MutationObserver(p=>{for(let m of p)m.addedNodes?.forEach(f=>{v(f)}),m.type==="attributes"&&m.target&&v(m.target)});if(j.observe(k,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...l.map(p=>p.selector).filter(p=>p.startsWith("data-"))]}),a&&h&&Element.prototype.attachShadow){let p=Element.prototype.attachShadow;Element.prototype.attachShadow=function(f){let T=p.call(this,f);if(f&&f.mode==="open"){D(T);let I=this.tagName?.toLowerCase();I&&I.includes("-")&&!customElements.get(I)&&S(I,this)}return T},_=()=>Element.prototype.attachShadow=p}return u&&v(k),{stop(){P=!0,j.disconnect(),_&&_(),E&&(clearTimeout(E),E=0),L.forEach(p=>p.disconnect())},flush:M}}static async define(...e){let n={};e.length&&typeof e[e.length-1]=="object"&&(n=e.pop()||{});let r=e,{baseURL:s,mapper:o=a=>`${a}.js`,onError:i=(a,l)=>console.error(`[defineWebComponents] ${a}:`,l)}=n,c=s?new URL(s,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),u=a=>a.toLowerCase().replace(/(^|-)([a-z])/g,(l,h,y)=>y.toUpperCase()),d=async a=>{try{if(customElements.get(a))return{tag:a,status:"already-defined"};let l=o(a),y=await import(l instanceof URL?l.href:new URL(l,c).href),A=y?.default??y?.[u(a)];if(!A){if(customElements.get(a))return{tag:a,status:"self-defined"};throw new Error(`No export found for ${a}. Expected default export or named export "${u(a)}".`)}return customElements.get(a)?{tag:a,status:"race-already-defined"}:(customElements.define(a,A),{tag:a,status:"defined"})}catch(l){throw i(a,l),l}};return Promise.all(r.map(d))}}});function fe(t){return new DOMParser().parseFromString(t,"text/html").body.childNodes}function me(t,e=100){let n;return function(...s){let o=()=>{clearTimeout(n),t(...s)};clearTimeout(n),n=setTimeout(o,e)}}function W(t){setTimeout(t,0)}function ye(t){try{if(typeof t!="string"||t.indexOf(`
2
- `)!==-1||t.indexOf(" ")!==-1||t.startsWith("#/"))return!1;let e=new URL(t,window.location.origin);return e.protocol==="http:"||e.protocol==="https:"}catch{return!1}}function ge(t,e,n){let r=window.screen.width/2-e/2,s=window.screen.height/2-n/2;return window.open(t,"",`toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${e}, height=${n}, top=${s}, left=${r}`)}var J={result:"ac-suggestion",item:"ac-itm"},B=class t extends EventTarget{constructor(e,n,r){super(),this.settings={emptyResultsText:"",...r},this.container=e,this.input=n,this.input.setAttribute("autocomplete","off"),this.categories=r.categories||{},this.caches=new Map,W(this.attach.bind(this))}static connect(e,n){let r=e.target;if(!r._autoComplete){if(!n?.categories)throw Error("Missing autocomplete settings");r._autoComplete=new t(r.parentNode,r,n),e.type==="focus"&&setTimeout(()=>{r._autoComplete.focusHandler(e)},100)}return r._autoComplete}on(e,n){return this.input.addEventListener(e,n),this}attach(){this.resultsDiv=document.createElement("div"),this.resultsDiv.title="",this.resultsDiv.classList.add(J.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 e=getComputedStyle(this.input);this.container.style.setProperty("--ac-bg-default",e.backgroundColor),this.container.style.setProperty("--ac-color-default",e.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",me(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 e=this.internalController();return typeof this.settings.controller=="function"&&(e=this.settings.controller(this)??e),e}internalController(){return{show:this.show.bind(this),hide:this.hide.bind(this),clear:this.clear.bind(this),empty:()=>{}}}moveResult(e){this.controller().show();let n=this.acItems.length;this.rowIndex=this.rowIndex+e,this.rowIndex<=0?this.rowIndex=0:this.rowIndex>n-1&&(this.rowIndex=0);for(let s of this.acItems)s.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(e){if(e=e||this.getSelectedDiv(),e){let n=parseInt(e.getAttribute("data-index"));this.resultClicked=!0;let r=this.results[n],s=this.categories[r.category]??{};s.action=s.action??this.setText.bind(this),s.newTab&&(this.tabWindow=ge("about:blank"));let o={...r,search:this.input.value};e.classList.add("ac-active"),setTimeout(()=>{this.controller().hide("result-selected"),o.action?o.action(o):(s.action(o),s.newTab&&(o.url?this.tabWindow.location.href=o.url:this.tabWindow.close()));var i=new Event("change",{bubbles:!0});this.input.dispatchEvent(i),this.controller().clear("result-selected");let c=new Event("result-selected");c.detail=o,this.input.dispatchEvent(c)},0)}}setText(e){let n=!1;this.input?(this.input.value=e.text,n=!0):this.container?.autoCompleteInput?(this.container.autoCompleteInput.value=e.text,n=!0):"value"in this.container&&(this.container.value=e.text,n=!0),n&&this.input&&this.input.dispatchEvent(new Event("input",{bubbles:!0})),this.controller().hide("settext")}resultClick(e){this.selectResult(e.target.closest(`.${J.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 e=this.getViewBounds();this.resultsDiv.style.position="absolute",e.rect.width>100&&(this.resultsDiv.style.width=`${e.rect.width}px`),this.settings.direction=this.settings.direction??e.suggestedDirection,this.resultsDiv.setAttribute("data-direction",this.settings.direction),this.settings.direction==="up"?(this.resultsDiv.style.top="unset",this.resultsDiv.style.bottom=`${e.rect.height+20}px`,this.rowIndex=this.acItems.length):(this.resultsDiv.style.bottom="unset",this.resultsDiv.style.top=`${e.rect.height}px`,this.rowIndex=-1),this.resultsDiv.style.maxWidth="unset",this.resultsDiv.classList.toggle("ac-active",!0)}}getViewBounds(){let e=this.input.getBoundingClientRect();return{rect:e,suggestedDirection:e.top+e.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(e){this.cacheTmr&&clearTimeout(this.cacheTmr);let n={search:e.target.value,categories:this.categories};this.container.classList.add("search-running"),this.getItems(n,e).then(r=>{this.controller().clear("new-results"),this.resultsHandler(r,n),this.container.classList.remove("search-running")})}keyDownHandler(e){switch(e.key){case"Enter":e.stopPropagation(),e.preventDefault();break;case"ArrowDown":W(this.moveResult(1));break;case"ArrowUp":W(this.moveResult(-1));break}}keyUpHandler(e){switch(e.key){case"Escape":this.controller().hide("escape");break;case"Enter":this.getSelectedDiv()&&(this.container.preventEnter=!0,e.stopPropagation(),e.preventDefault(),this.selectResult(),setTimeout(()=>{this.container.preventEnter=!1},10));break;default:break}}focusHandler(e){this.controller().clear("focus");let n=e.target.value;this.suggest(n,e)}suggest(e,n){this.input.focus();let r={suggest:!0,search:e||"",categories:this.categories};this.getItems(r,n).then(s=>{this.input.dispatchEvent(new CustomEvent("show-results",{detail:{results:s}})),this.resultsHandler(s,r)})}sort(e,n){return e.sort((r,s)=>{let o=n.categories[r.category],i=n.categories[s.category],c=typeof o.sortIndex=="function"?o.sortIndex(n):o.sortIndex??0;return(typeof i.sortIndex=="function"?i.sortIndex(n):i.sortIndex??0)>c?1:-1})}resultsHandler(e,n){this.results=e,this.rowIndex=-1;let r=0,s=(o,i)=>`
3
- <div title="${i.tooltip||""}" data-index="${r}" class="${`${J.item} cat-${i.category} ${i.class??""}`.trim()}"${i.style?` style="${i.style}"`:""}>
4
- ${this.handleImageOrIcon(i)}
5
- <span class="text">${this.formatResultItem(i,n,o)}</span>
6
- ${this.settings.hideCategory?"":`<span class="category">${i.category||""}</span>`}
7
- </div>`;e.forEach(o=>{let i=n.categories[o.category]||{};o.element?this.resultsDiv.appendChild(o.element):(o=typeof o=="string"?{text:o}:o,this.resultsDiv.appendChild(fe(s(i,o))[0])),r++}),e.length?(this.acItems=this.resultsDiv.querySelectorAll(".ac-itm"),this.controller().show()):n.search.length&&this.controller().empty()}handleImageOrIcon(e){return e.image?`<img src="${e.image}"/>`:typeof this.settings.iconHandler=="function"?this.settings.iconHandler(e):`<svg-icon icon="${e.icon}"></svg-icon>`}formatResultItem(e,n,r){let s=typeof e=="string"?{text:e}:e,o=s.text;return n.search&&(o=o.replace("%search%",n.search),s.description=s.description?.replace("%search%",n.search)),o=this.highlight(o,n.search),s.description&&(o=`<div>${o}</div><small>${s.description}</small>`),r.format&&(o=r.format({item:s,result:o,options:n})),o}highlight(e,n){var r=new RegExp("("+n+")","gi");return e.replace(r,'<span class="txt-hl">$1</span>')}async getItems(e,n){this.aborter&&this.aborter.abort();let r=this.caches.get(e.search);if(r)return r;let s=this.settings.map,o=u=>(typeof u=="string"&&(u={text:u}),u),i=u=>s?u.map(d=>({text:d[s]})):u.map(d=>o(d)),c=u=>(this.settings.max&&this.settings.max>0&&(u.length=this.settings.max),u);return this.aborter=new AbortController,this.aborterSignal=this.aborter.signal,new Promise(u=>{let d=a=>{a=this.sort(a,e),this.settings.cache!==!1&&this.caches.set(e.search,a),u(a)};if(ye(this.items)){if(this.settings.minlength>0&&(!e.search||e.search.length<this.settings.minlength)){d([]);return}let a=this.formatSearch(this.items,e);fetch(a).then(l=>{if(l.status===200){l.json().then(h=>{h=i(h),d(c(h.filter(y=>this.isMatch(e,y))))});return}throw Error(`HTTP error ${l.status} - ${a}`)})}else if(Array.isArray(this.items)){let a=!0;this.items=this.items.map(l=>typeof l=="string"?{text:l}:(a=!1,l)),a&&this.container.classList.add("simple"),d(c(i(this.items)))}else if(typeof this.items=="function")e.control=this.container,Promise.resolve(this.items(e,n)).then(l=>{l=l.map(h=>o(h)),l=i(l),d(l)});else return d(Promise.resolve(this.items.apply(this,e)))})}async items(e){let n=[];e.results=[],e.signal=this.aborterSignal;for(var r in e.categories){let s=e.categories[r];if(s.trigger=s.trigger??(()=>!0),e.results=n,s.trigger(e)){let o=[];try{o=await s.getItems(e)}catch(i){console.warn(`Error loading items for omniBox category '${r}'.`,i)}n=n.concat(o.map(i=>(i.category=r,i)))}}return n}formatSearch(e,n){return e.indexOf("%search%")?e.replace("%search%",n.search||""):e+"?"+this.createQueryParam(n)}createQueryParam(e){let n=e.suggest?"&suggest=true":"";return`q=${e.text}${n}`}isMatch(e,n){return n.text?.indexOf("%search%")>=0?!0:e.search?n.text?.toLowerCase().indexOf(e.search.toLowerCase())>=0:e.suggest}static textFilter(e,n){return function(r){if(!e.search)return!0;if(r.hidden)return!1;let o=(n?r[n]:r).match(new RegExp(e.search,"gi"));if(o)return o;if(r.config?.tags)return r.config.tags.some(i=>i.match(new RegExp(e.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(e={}){this._mode="static",this._staticPaths={...this._staticPaths,...e}}async getStylesheet(e){if(this._mode==="live")return null;try{return(await import(this._staticPaths[e]))[e]}catch(n){console.error(`[PDS Registry] Failed to load static ${e}:`,n),console.error(`[PDS Registry] Looking for: ${this._staticPaths[e]}`),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 "+e+" */"),r}}get mode(){return this._mode}get isLive(){return this._mode==="live"}},U=new X;async function be(t,e=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await U.getStylesheet("primitives");t.adoptedStyleSheets=[r,...e]}catch(r){let s=t.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt primitives:`,r),t.adoptedStyleSheets=e}}async function we(t,e=["primitives"],n=[],r=null){try{let o=(await Promise.all(e.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);t.adoptedStyleSheets=[...o,...n]}catch(s){let o=t.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${o}> failed to adopt layers:`,s),t.adoptedStyleSheets=n}}function ve(t){let e=new CSSStyleSheet;return e.replaceSync(t),e}var xe={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 Ee={mode:"live",liveEdit:!0,preset:"default",autoDefine:{predefine:["pds-icon","pds-drawer","pds-toaster","pds-form"]},log(t,e,...n){console[t](e,...n)}};var te={};he(te,{deepMerge:()=>Se,fragmentFromTemplateLike:()=>Y,isObject:()=>z,parseHTML:()=>ee});function z(t){return t&&typeof t=="object"&&!Array.isArray(t)}function Se(t,e){let n={...t};return z(t)&&z(e)&&Object.keys(e).forEach(r=>{z(e[r])?r in t?n[r]=Se(t[r],e[r]):Object.assign(n,{[r]:e[r]}):Object.assign(n,{[r]:e[r]})}),n}function Y(t){let e=Array.isArray(t?.strings)?t.strings:[],n=Array.isArray(t?.values)?t.values:[],r=new Set,s=[],o=/(\s)(\.[\w-]+)=\s*$/;for(let l=0;l<e.length;l+=1){let h=e[l]??"",y=h.match(o);if(y&&l<n.length){let x=y[2].slice(1),w=`pds-val-${l}`;h=h.replace(o,`$1data-pds-prop="${x}:${w}"`),r.add(l)}s.push(h),l<n.length&&!r.has(l)&&s.push(`<!--pds-val-${l}-->`)}let i=document.createElement("template");i.innerHTML=s.join("");let c=(l,h)=>{let y=l.parentNode;if(!y)return;if(h==null){y.removeChild(l);return}let A=x=>{if(x!=null){if(x instanceof Node){y.insertBefore(x,l);return}if(Array.isArray(x)){x.forEach(w=>A(w));return}y.insertBefore(document.createTextNode(String(x)),l)}};A(h),y.removeChild(l)},u=document.createTreeWalker(i.content,NodeFilter.SHOW_COMMENT),d=[];for(;u.nextNode();){let l=u.currentNode;l?.nodeValue?.startsWith("pds-val-")&&d.push(l)}return d.forEach(l=>{let h=Number(l.nodeValue.replace("pds-val-",""));c(l,n[h])}),i.content.querySelectorAll("*").forEach(l=>{let h=l.getAttribute("data-pds-prop");if(!h)return;let[y,A]=h.split(":"),x=Number(String(A).replace("pds-val-",""));y&&Number.isInteger(x)&&(l[y]=n[x]),l.removeAttribute("data-pds-prop")}),i.content}function ee(t){return new DOMParser().parseFromString(t,"text/html").body.childNodes}function ne(t,e){if(e==null)return;if(typeof e=="object"&&Array.isArray(e.strings)&&Array.isArray(e.values)){t.appendChild(Y(e));return}if(e instanceof Node){t.appendChild(e);return}if(Array.isArray(e)){e.forEach(r=>ne(t,r));return}let n=typeof e=="string"?e:String(e);t.appendChild(document.createTextNode(n))}function He(){let t=navigator.userAgent,e=/Safari/i.test(t),n=/(Chrome|Chromium|CriOS|FxiOS|EdgiOS|OPiOS|Opera)/i.test(t);return e&&!n}function je(t){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let e=window.matchMedia?.("(max-width: 639px)").matches,n=t.classList.contains("dialog-no-scale-animation")?"pds-dialog-fade-enter":e?"pds-dialog-enter-mobile":"pds-dialog-enter";t.style.animation="none",t.offsetWidth,t.style.animation=`${n} var(--transition-normal) ease`,t.addEventListener("animationend",()=>{t.style.animation=""},{once:!0})}async function Ae(t,e={}){return e={...{title:"Confirm",type:"confirm",buttons:{ok:{name:"OK",primary:!0},cancel:{name:"Cancel",cancel:!0}}},...e},new Promise(r=>{let s=document.createElement("dialog");He()&&s.classList.add("dialog-no-scale-animation"),Ee.options?.liquidGlassEffects&&s.classList.add("liquid-glass"),e.size&&s.classList.add(`dialog-${e.size}`),e.type&&s.classList.add(`dialog-${e.type}`),e.class&&(Array.isArray(e.class)?s.classList.add(...e.class):s.classList.add(e.class)),e.maxHeight&&s.style.setProperty("--dialog-max-height",e.maxHeight);let o=Object.entries(e.buttons).map(([c,u])=>{let d=u.primary?"btn-primary btn-sm":"btn-outline btn-sm";return`<button type="${u.cancel?"button":"submit"}" class="${d}" value="${c}">${u.name}</button>`});if(e.useForm){let c=document.createElement("div");ne(c,t);let u=c.querySelector("form");if(u){s.innerHTML=`
8
- <header>
9
- <h2>${e.title}</h2>
10
- </header>
11
- `;let d=document.createElement("article");for(d.className="dialog-body";u.firstChild;)d.appendChild(u.firstChild);u.appendChild(d);let a=document.createElement("footer");a.innerHTML=o.join(""),u.appendChild(a),s.appendChild(u)}else s.innerHTML=`
12
- <header>
13
- <h2>${e.title}</h2>
14
- </header>
15
- <article id="msg-container"></article>
16
- <footer>
17
- ${o.join("")}
18
- </footer>
19
- `,s.querySelector("#msg-container").appendChild(c)}else{s.innerHTML=`
20
- <form method="dialog">
21
- <header>
22
- <h2>${e.title}</h2>
23
- </header>
24
-
25
- <article id="msg-container"></article>
26
-
27
- <footer>
28
- ${o.join("")}
29
- </footer>
30
- </form>
31
- `;let c=s.querySelector("#msg-container");ne(c,t)}s.addEventListener("click",c=>{c.target.closest('button[value="cancel"]')&&(s.close(),r(!1))});let i=()=>{let c=s.querySelector("form");c?c.addEventListener("submit",u=>{u.preventDefault();let d;e.useForm&&u.submitter.value==="ok"?(console.log("Found form:",c),console.log("Form elements:",c?Array.from(c.elements):"no form"),d=new FormData(c),console.log("FormData entries:",Array.from(d.entries()))):d=u.submitter.value==="ok",s.close(),r(d)}):requestAnimationFrame(i)};i(),s.addEventListener("close",()=>{setTimeout(()=>s.remove(),200)}),document.body.appendChild(s),typeof e.rendered=="function"&&e.rendered(s),s.showModal(),requestAnimationFrame(()=>je(s))})}async function Fe(){let t=document.querySelector("pds-toaster");return t||(t=document.createElement("pds-toaster"),document.body.appendChild(t),await customElements.whenDefined("pds-toaster")),t}async function $(t,e={}){return(await Fe()).toast(t,e)}$.success=async function(t,e={}){return $(t,{...e,type:"success"})};$.error=async function(t,e={}){return $(t,{...e,type:"error"})};$.warning=async function(t,e={}){return $(t,{...e,type:"warning"})};$.info=async function(t,e={}){return $(t,{...e,type:"information"})};var We=[{selector:".accordion"},{selector:"nav[data-dropdown]"},{selector:"label[data-toggle]"},{selector:"label[data-color]"},{selector:'input[type="range"]'},{selector:"form[data-required]"},{selector:"fieldset[role=group][data-open]"},{selector:"[data-clip]"},{selector:"button, a[class*='btn-']"}];function Be(t){t.dataset.enhancedAccordion||(t.dataset.enhancedAccordion="true",t.addEventListener("toggle",e=>{e.target.open&&e.target.parentElement===t&&t.querySelectorAll(":scope > details[open]").forEach(n=>{n!==e.target&&(n.open=!1)})},!0))}function ze(t){if(t.dataset.enhancedDropdown)return;t.dataset.enhancedDropdown="true";let e=t.lastElementChild;if(!e)return;let n=t.querySelector("[data-dropdown-toggle]")||t.querySelector("button");n&&!n.hasAttribute("type")&&n.setAttribute("type","button"),e.id||(e.id=`dropdown-${Math.random().toString(36).slice(2,9)}`);let r=e.tagName?.toLowerCase()==="menu",s=8;r&&!e.hasAttribute("role")&&e.setAttribute("role","menu"),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true"),n&&(n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-controls",e.id),n.setAttribute("aria-expanded","false"));let o=()=>{let g=e.getAttribute("style");e.style.visibility="hidden",e.style.display="inline-block",e.style.pointerEvents="none";let S=e.getBoundingClientRect(),C=Math.max(e.offsetWidth||0,e.scrollWidth||0,S.width||0,1),v=Math.max(e.offsetHeight||0,e.scrollHeight||0,S.height||0,1);return g===null?e.removeAttribute("style"):e.setAttribute("style",g),{width:C,height:v}},i=()=>{let g=(t.getAttribute("data-direction")||t.getAttribute("data-dropdown-direction")||t.getAttribute("data-mode")||"auto").toLowerCase();if(g==="up"||g==="down")return g;let S=(n||t).getBoundingClientRect(),{height:C}=o(),v=Math.max(0,window.innerHeight-S.bottom),D=Math.max(0,S.top),M=v>=C,k=D>=C;return M&&!k?"down":k&&!M?"up":M&&k?"down":D>v?"up":"down"},c=()=>{let g=(t.getAttribute("data-align")||t.getAttribute("data-dropdown-align")||"auto").toLowerCase();if(g==="left"||g==="right"||g==="start"||g==="end")return g==="start"?"left":g==="end"?"right":g;let S=(n||t).getBoundingClientRect(),{width:C}=o(),v=Math.max(0,window.innerWidth-S.left),D=Math.max(0,S.right),M=v>=C,k=D>=C;return M&&!k?"left":k&&!M?"right":M&&k?"left":D>v?"right":"left"},u=(g,S=8)=>{let C=getComputedStyle(t).getPropertyValue(g).trim();if(!C)return S;let v=document.createElement("span");v.style.position="fixed",v.style.visibility="hidden",v.style.pointerEvents="none",v.style.height=C,document.body.appendChild(v);let D=Number.parseFloat(getComputedStyle(v).height);return v.remove(),Number.isFinite(D)?D:S},d=()=>{e.style.removeProperty("position"),e.style.removeProperty("left"),e.style.removeProperty("top"),e.style.removeProperty("right"),e.style.removeProperty("bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("max-width"),e.style.removeProperty("max-inline-size"),e.style.removeProperty("max-height"),e.style.removeProperty("overflow")},a=()=>{e.getAttribute("aria-hidden")==="false"&&(d(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{l()})}))},l=()=>{if(e.getAttribute("aria-hidden")!=="false")return;let g=(n||t).getBoundingClientRect(),S=window.visualViewport,C=S?.width||document.documentElement?.clientWidth||window.innerWidth,v=S?.height||document.documentElement?.clientHeight||window.innerHeight,D=S?.offsetLeft||0,M=S?.offsetTop||0,k=Math.max(1,C-s*2),j=Math.max(1,v-s*2);e.style.maxWidth=`${Math.round(k)}px`,e.style.maxInlineSize=`${Math.round(k)}px`,e.style.maxHeight=`${Math.round(j)}px`,e.style.overflow="auto";let{width:p,height:m}=o(),f=u("--spacing-2",8),T=i(),I=c();t.dataset.dropdownDirection=T,t.dataset.dropdownAlign=I;let F=I==="right"?g.right-p:g.left;p>=k-1?F=D+s:F=Math.max(D+s,Math.min(F,D+C-p-s));let Z=T==="up"?g.top-f-m:g.bottom+f;Z=Math.max(M+s,Math.min(Z,M+v-m-s)),e.style.position="fixed",e.style.left=`${Math.round(F)}px`,e.style.top=`${Math.round(Z)}px`,e.style.right="auto",e.style.bottom="auto",e.style.marginTop="0",e.style.marginBottom="0"},h=null,y=()=>{h||(h=()=>l(),window.addEventListener("resize",h),window.addEventListener("scroll",h,!0))},A=()=>{h&&(window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0),h=null)},x=null,w=()=>{x||typeof document>"u"||(x=()=>{e.getAttribute("aria-hidden")==="false"&&(t.dataset.dropdownDirection=i(),t.dataset.dropdownAlign=c(),a(),setTimeout(()=>{e.getAttribute("aria-hidden")==="false"&&a()},50),setTimeout(()=>{e.getAttribute("aria-hidden")==="false"&&a()},150))},document.addEventListener("pds:config-changed",x))},L=()=>{!x||typeof document>"u"||(document.removeEventListener("pds:config-changed",x),x=null)},R=null,E=()=>{t.dataset.dropdownDirection=i(),t.dataset.dropdownAlign=c(),e.setAttribute("aria-hidden","false"),n?.setAttribute("aria-expanded","true"),y(),w(),a(),R||(R=g=>{(g.composedPath?g.composedPath():[g.target]).some(v=>v===t)||P()},setTimeout(()=>{document.addEventListener("click",R)},0))},P=()=>{e.setAttribute("aria-hidden","true"),n?.setAttribute("aria-expanded","false"),A(),L(),d(),R&&(document.removeEventListener("click",R),R=null)},_=()=>{e.getAttribute("aria-hidden")==="false"?P():E()};n?.addEventListener("click",g=>{g.preventDefault(),g.stopPropagation(),_()}),t.addEventListener("keydown",g=>{g.key==="Escape"&&(P(),n?.focus())}),t.addEventListener("focusout",g=>{g.relatedTarget&&((g.composedPath?g.composedPath():[g.relatedTarget]).some(v=>v===t)||P())})}function Ve(t){if(t.dataset.enhancedToggle)return;t.dataset.enhancedToggle="true";let e=t.querySelector('input[type="checkbox"]');if(!e)return;t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","switch"),t.setAttribute("aria-checked",e.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),t.insertBefore(n,e.nextSibling);let s=()=>{t.setAttribute("aria-checked",e.checked?"true":"false")},o=()=>{e.disabled||(e.checked=!e.checked,s(),e.dispatchEvent(new Event("change",{bubbles:!0})))};t.addEventListener("click",i=>{i.preventDefault(),o()}),t.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),o())}),e.addEventListener("change",s)}function Ge(t){if(t.dataset.enhancedColorInput)return;let e=t.querySelector('input[type="color"]');if(!e)return;t.dataset.enhancedColorInput="true";let n=t.querySelector(":scope > .color-control"),r=t.querySelector(":scope > .color-control > .color-swatch"),s=t.querySelector(":scope > .color-control > output");n||(n=document.createElement("span"),n.className="color-control",e.before(n)),r||(r=document.createElement("span"),r.className="color-swatch",n.appendChild(r)),e.parentElement!==r&&r.appendChild(e),s||(s=document.createElement("output"),n.appendChild(s));let o=()=>{if(e.dataset.colorUnset==="1"){s.value="",s.textContent="not set",n.dataset.value="",n.dataset.unset="1",r.dataset.unset="1";return}s.value=e.value,s.textContent=e.value,n.dataset.value=e.value,delete n.dataset.unset,delete r.dataset.unset};o();let i=()=>{e.dataset.colorUnset==="1"&&(e.dataset.colorUnset="0"),o()};e.addEventListener("input",i,{passive:!0}),e.addEventListener("change",i,{passive:!0})}function Ke(t){if(t.dataset.enhancedRange)return;let e=i=>{if(t.dataset.enhancedRangeProgrammatic)return;t.dataset.enhancedRangeProgrammatic="1";let c=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),"value")||Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");c?.get&&c?.set&&Object.defineProperty(t,"value",{configurable:!0,enumerable:c.enumerable,get(){return c.get.call(this)},set(d){c.set.call(this,d),i()}}),new MutationObserver(d=>{d.some(l=>{let h=l.attributeName;return h==="value"||h==="min"||h==="max"})&&i()}).observe(t,{attributes:!0,attributeFilter:["value","min","max"]})},n=t.closest("label"),r=n?.classList.contains("range-output"),s=t.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${s}-output`;if(t.id=s,r){let i=n.querySelector("span");if(i&&!i.classList.contains("range-output-wrapper")){let c=document.createElement("span");c.className="range-output-wrapper",c.style.display="flex",c.style.justifyContent="space-between",c.style.alignItems="center";let u=document.createElement("span");u.textContent=i.textContent,c.appendChild(u);let d=document.createElement("output");d.id=o,d.setAttribute("for",s),d.style.color="var(--surface-text-secondary, var(--color-text-secondary))",d.style.fontSize="0.875rem",d.textContent=t.value,c.appendChild(d),i.textContent="",i.appendChild(c);let a=()=>{d.textContent=t.value};t.addEventListener("input",a),t.addEventListener("change",a),e(a),a()}}else{let i=t.closest(".range-container");i||(i=document.createElement("div"),i.className="range-container",t.parentNode?.insertBefore(i,t),i.appendChild(t)),i.style.position="relative";let c=document.createElement("output");c.id=o,c.setAttribute("for",s),c.className="range-bubble",c.setAttribute("aria-live","polite"),i.appendChild(c);let u=()=>{let l=parseFloat(t.min)||0,h=parseFloat(t.max)||100,y=parseFloat(t.value),A=(y-l)/(h-l);c.style.left=`calc(${A*100}% )`,c.textContent=String(y)},d=()=>c.classList.add("visible"),a=()=>c.classList.remove("visible");t.addEventListener("input",u),t.addEventListener("pointerdown",d),t.addEventListener("pointerup",a),t.addEventListener("pointerleave",a),t.addEventListener("focus",d),t.addEventListener("blur",a),t.addEventListener("change",u),e(u),u()}t.dataset.enhancedRange="1"}function Qe(t){if(t.dataset.enhancedRequired)return;t.dataset.enhancedRequired="true";let e=n=>{let r;if(n.closest("[role$=group]")?r=n.closest("[role$=group]").querySelector("legend"):r=n.closest("label"),!r||r.querySelector(".required-asterisk"))return;let s=document.createElement("span");s.classList.add("required-asterisk"),s.textContent="*",s.style.marginLeft="4px";let o=r.querySelector("span, [data-label]");if(o)o.appendChild(s);else{let c=r.querySelector("input, select, textarea");c?r.insertBefore(s,c):r.appendChild(s)}let i=n.closest("form");if(i&&!i.querySelector(".required-legend")){let c=document.createElement("small");c.classList.add("required-legend"),c.textContent="* Required fields",i.insertBefore(c,i.querySelector(".form-actions")||i.lastElementChild)}};t.querySelectorAll("[required]").forEach(n=>{e(n)})}function Ze(t){if(t.dataset.enhancedOpenGroup)return;t.dataset.enhancedOpenGroup="true",t.classList.add("flex","flex-wrap","buttons");let e=document.createElement("input");e.type="text",e.placeholder="Add item...",e.classList.add("input-text","input-sm"),e.style.width="auto";let n=()=>t.querySelector('input[type="radio"], input[type="checkbox"]');t.appendChild(e),e.addEventListener("keydown",r=>{if(r.key==="Enter"||r.key==="Tab"){let s=e.value.trim();if(s){r.preventDefault();let o=n(),i=o?.type==="radio"?"radio":"checkbox",c=`open-group-${Math.random().toString(36).substring(2,11)}`,u=document.createElement("label"),d=document.createElement("span");d.setAttribute("data-label",""),d.textContent=s;let a=document.createElement("input");a.type=i,a.name=o?.name||t.getAttribute("data-name")||"open-group",a.value=s,a.id=c,u.appendChild(d),u.appendChild(a),t.insertBefore(u,e),e.value=""}}else if(r.key==="Backspace"&&e.value===""){r.preventDefault();let s=t.querySelectorAll("label");s.length>0&&s[s.length-1].remove()}})}function Je(t){if(t.dataset.enhancedClip)return;t.dataset.enhancedClip="true",t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.hasAttribute("role")||t.setAttribute("role","button");let e=()=>{let r=t.getAttribute("data-clip-open")==="true";t.setAttribute("aria-expanded",r?"true":"false")},n=()=>{let r=t.getAttribute("data-clip-open")==="true";t.setAttribute("data-clip-open",r?"false":"true"),e()};t.addEventListener("click",r=>{r.defaultPrevented||n()}),t.addEventListener("keydown",r=>{(r.key===" "||r.key==="Enter")&&(r.preventDefault(),n())}),e()}function Xe(t){if(t.dataset.enhancedBtnWorking)return;t.dataset.enhancedBtnWorking="true";let e=null,n=!1;new MutationObserver(s=>{s.forEach(o=>{if(o.attributeName==="class"){let i=t.classList.contains("btn-working"),c=t.querySelector("pds-icon");if(i)if(c)e||(e=c.getAttribute("icon")),c.setAttribute("icon","circle-notch");else{let u=document.createElement("pds-icon");u.setAttribute("icon","circle-notch"),u.setAttribute("size","sm"),t.insertBefore(u,t.firstChild),n=!0}else o.oldValue?.includes("btn-working")&&c&&(n?(c.remove(),n=!1):e&&(c.setAttribute("icon",e),e=null))}})}).observe(t,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Ye=new Map([[".accordion",Be],["nav[data-dropdown]",ze],["label[data-toggle]",Ve],["label[data-color]",Ge],['input[type="range"]',Ke],["form[data-required]",Qe],["fieldset[role=group][data-open]",Ze],["[data-clip]",Je],["button, a[class*='btn-']",Xe]]),re=We.map(t=>({...t,run:Ye.get(t.selector)||(()=>{})}));var Ce="pds",et=/^([a-z][a-z0-9+\-.]*:)?\/\//i,Le=/^[a-z]:/i;function q(t=""){return t.endsWith("/")?t:`${t}/`}function tt(t="",e=Ce){let n=t.replace(/\/+$/,"");return new RegExp(`(?:^|/)${e}$`,"i").test(n)?n:`${n}/${e}`}function nt(t){return t.replace(/^\.\/+/,"")}function rt(t){return Le.test(t)?t.replace(Le,"").replace(/^\/+/,""):t}function st(t){return t.startsWith("public/")?t.substring(7):t}function se(t,e={}){let n=e.segment||Ce,r=e.defaultRoot||`/assets/${n}/`,s=t?.public&&t.public?.root||t?.static&&t.static?.root||null;if(!s||typeof s!="string")return q(r);let o=s.trim();return o?(o=o.replace(/\\/g,"/"),o=tt(o,n),o=q(o),et.test(o)?o:(o=nt(o),o=rt(o),o.startsWith("/")||(o=st(o),o.startsWith("/")||(o=`/${o}`),o=o.replace(/\/+/g,(i,c)=>c===0?i:"/")),q(o))):q(r)}var it=/^[a-z][a-z0-9+\-.]*:\/\//i,N=(()=>{try{return import.meta.url}catch{return}})(),V=t=>typeof t=="string"&&t.length&&!t.endsWith("/")?`${t}/`:t;function G(t,e={}){if(!t||it.test(t))return t;let{preferModule:n=!0}=e,r=()=>{if(!N)return null;try{return new URL(t,N).href}catch{return null}},s=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(t,window.location.origin).href}catch{return null}};return(n?r()||s():s()||r())||t}var Te=(()=>{if(N)try{let t=new URL(N);if(/\/public\/assets\/js\//.test(t.pathname))return new URL("../pds/",N).href}catch{return}})(),Me=!1;function Re(t){Me||typeof document>"u"||(Me=!0,t.addEventListener("pds:ready",e=>{let n=e.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Pe({manageTheme:t,themeStorageKey:e,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let s="light",o=null;if(t&&typeof window<"u"){try{o=localStorage.getItem(e)||null}catch{o=null}try{n?.(o),r?.(o)}catch{}o?o==="system"?s=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":s=o:s=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:s,storedTheme:o}}function ie(t,{resolvePublicAssetURL:e}){let n=!!(t?.public?.root||t?.static?.root),r=e(t);return!n&&Te&&(r=Te),V(G(r))}async function $e(t,{baseEnhancers:e=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:s=null,enhancers:o=[],autoDefineOverrides:i=null,autoDefinePreferModule:c=!0}=t,u=(()=>{let a=new Map;return(e||[]).forEach(l=>a.set(l.selector,l)),(o||[]).forEach(l=>a.set(l.selector,l)),Array.from(a.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let a=null;try{let w=await Promise.resolve().then(()=>(ke(),De));a=w?.AutoDefiner||w?.default?.AutoDefiner||w?.default||null}catch(w){console.warn("AutoDefiner not available:",w?.message||w)}let l=w=>{switch(w){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${w}.js`}},{mapper:h,...y}=i&&typeof i=="object"?i:{},x={baseURL:n&&V(G(n,{preferModule:c})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:u,onError:(w,L)=>{if(typeof w=="string"&&w.startsWith("pds-")){let E=["pds-form","pds-drawer"].includes(w),P=L?.message?.includes("#pds/lit")||L?.message?.includes("Failed to resolve module specifier");E&&P?console.error(`\u274C PDS component <${w}> 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 <${w}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${w}>:`,L)},...y,mapper:w=>{if(customElements.get(w))return null;if(typeof s=="function")try{let L=s(w);return L===void 0?l(w):L}catch(L){return console.warn("Custom autoDefine.mapper error; falling back to default:",L?.message||L),l(w)}return l(w)}};a&&(d=new a(x),r.length>0&&typeof a.define=="function"&&await a.define(...r,{baseURL:n,mapper:x.mapper,onError:x.onError}))}return{autoDefiner:d,mergedEnhancers:u}}var ae=["light","dark"],ce=new Set(ae);function at(t){let n=(Array.isArray(t?.themes)?t.themes.map(r=>String(r).toLowerCase()):ae).filter(r=>ce.has(r));return n.length?n:ae}function le(t,{preferDocument:e=!0}={}){let n=String(t||"").toLowerCase();if(ce.has(n))return n;if(e&&typeof document<"u"){let r=document.documentElement?.getAttribute("data-theme");if(ce.has(r))return r}return typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function Ie(t,e){let n=le(e);return at(t).includes(n)}var ue=class extends EventTarget{},b=new ue;b.initializing=!1;b.currentPreset=null;b.debug=!1;var _e=function(t="log",e,...n){let r=!!(b.registry&&!b.registry.isLive),s=(this?.debug||this?.design?.debug||b.debug||!1)===!0;if(r){if(!b.debug)return}else if(!s&&t!=="error"&&t!=="warn")return;let o=console[t]||console.log;n.length>0?o(e,...n):o(e)};function pe(t){if(t==null)return t;if(typeof t=="function")return;if(typeof t!="object")return t;if(Array.isArray(t))return t.map(n=>pe(n)).filter(n=>n!==void 0);let e={};for(let[n,r]of Object.entries(t)){let s=pe(r);s!==void 0&&(e[n]=s)}return e}async function ct(t,e={}){if(e?.runtimeConfig===!1||typeof fetch!="function")return null;let n=e?.runtimeConfigURL||`${t}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=xe;b.adoptLayers=we;b.adoptPrimitives=be;b.parse=ee;b.createStylesheet=ve;b.isLiveMode=()=>U.isLive;b.ask=Ae;b.toast=$;b.common=te;b.AutoComplete=B;function Oe(t){let e=typeof CustomEvent=="function";try{let n=e?new CustomEvent("pds:ready",{detail:t}):new Event("pds:ready");b.dispatchEvent(n)}catch{}if(typeof document<"u")if(e){let n={detail:t,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{}}}function Ue(t={}){let e=typeof CustomEvent=="function",n={at:Date.now(),...t};try{let r=e?new CustomEvent("pds:config-changed",{detail:n}):new Event("pds:config-changed");b.dispatchEvent(r)}catch{}if(typeof document<"u")if(e){let r={detail:n,bubbles:!0,composed:!0};try{document.dispatchEvent(new CustomEvent("pds:config-changed",r))}catch{}}else try{document.dispatchEvent(new Event("pds:config-changed"))}catch{}}typeof window<"u"&&(window.PDS=b);var de="pure-ds-theme",O=null,H=null;function K(t){try{if(typeof document>"u")return;let e="light";t?t==="system"?e=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e=t:e=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",document.documentElement.setAttribute("data-theme",e)}catch{}}function Q(t){try{if(O&&H){try{typeof O.removeEventListener=="function"?O.removeEventListener("change",H):typeof O.removeListener=="function"&&O.removeListener(H)}catch{}O=null,H=null}if(t==="system"&&typeof window<"u"&&window.matchMedia){let e=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let s=r?.matches===void 0?e.matches:r.matches;try{let o=s?"dark":"light";document.documentElement.setAttribute("data-theme",o),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:o,source:"system"}}))}catch{}};O=e,H=n,typeof e.addEventListener=="function"?e.addEventListener("change",n):typeof e.addListener=="function"&&e.addListener(n)}}catch{}}Object.defineProperty(b,"theme",{get(){try{return typeof window>"u"?null:localStorage.getItem(de)||null}catch{return null}},set(t){try{if(typeof window>"u")return;let e=b.currentConfig?.design||null,n=le(t);if(e&&!Ie(e,n)){let r=e?.name||b.currentPreset?.name||b.currentConfig?.preset||"current preset";console.warn(`PDS theme "${n}" not supported by preset "${r}".`),b.dispatchEvent(new CustomEvent("pds:theme:blocked",{detail:{theme:t,resolvedTheme:n,preset:r}}));return}t==null?localStorage.removeItem(de):localStorage.setItem(de,t),K(t),Q(t),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:t,source:"api"}}))}catch{}}});b.defaultEnhancers=re;async function lt(t){let e=t&&t.mode||"live",{mode:n,...r}=t||{};if(e==="static")return dt(r);let s=ie(r,{resolvePublicAssetURL:se}),o=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",s).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:i}=await import(o);return i(b,r,{emitReady:Oe,emitConfigChanged:Ue,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q})}b.start=lt;async function dt(t){if(!t||typeof t!="object")throw new Error("PDS.start({ mode: 'static', ... }) requires a valid configuration object");let e=t.applyGlobalStyles??!0,n=t.manageTheme??!0,r=t.themeStorageKey??"pure-ds-theme",s=t.staticPaths??{},o=ie(t,{resolvePublicAssetURL:se}),i=t&&t.autoDefine||null,c;i&&i.baseURL?c=V(G(i.baseURL,{preferModule:!1})):c=`${o}components/`;let u=i&&Array.isArray(i.predefine)&&i.predefine||[],d=i&&typeof i.mapper=="function"&&i.mapper||null;try{Re(b);let{resolvedTheme:a}=Pe({manageTheme:n,themeStorageKey:r,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q}),l=await ct(o,t),h=Array.isArray(t?.enhancers)?t.enhancers:t?.enhancers&&typeof t.enhancers=="object"?Object.values(t.enhancers):[],y=l?.config?{...l.config,...t,design:t?.design||l.config.design,preset:t?.preset||l.config.preset}:{...t},A={tokens:`${o}styles/pds-tokens.css.js`,primitives:`${o}styles/pds-primitives.css.js`,components:`${o}styles/pds-components.css.js`,utilities:`${o}styles/pds-utilities.css.js`,styles:`${o}styles/pds-styles.css.js`},x=l?.paths||{};if(s={...A,...x,...s},b.registry.setStaticMode(s),e&&typeof document<"u")try{let E=await b.registry.getStylesheet("styles");if(E){E._pds=!0;let P=(document.adoptedStyleSheets||[]).filter(_=>_._pds!==!0);document.adoptedStyleSheets=[...P,E],Ue({mode:"static",source:"static:styles-applied"})}}catch(E){_e.call(b,"warn","Failed to apply static styles:",E)}let w=null,L=[];try{let E=await $e({autoDefineBaseURL:c,autoDefinePreload:u,autoDefineMapper:d,enhancers:h,autoDefineOverrides:i||null,autoDefinePreferModule:!(i&&i.baseURL)},{baseEnhancers:re});w=E.autoDefiner,L=E.mergedEnhancers||[]}catch(E){_e.call(b,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",E)}let R=pe(t);return b.currentConfig=Object.freeze({mode:"static",...structuredClone(R),design:structuredClone(y.design||{}),preset:y.preset,theme:a,enhancers:L}),Oe({mode:"static",config:y,theme:a,autoDefiner:w}),{config:y,theme:a,autoDefiner:w}}catch(a){throw b.dispatchEvent(new CustomEvent("pds:error",{detail:{error:a}})),a}}var qt=K,Nt=Q;export{b as PDS,qt as applyResolvedTheme,Nt as setupSystemListenerIfNeeded};
1
+ var me=Object.defineProperty;var he=(e,t)=>{for(var n in t)me(e,n,{get:t[n],enumerable:!0})};var W=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"}},_=new W;async function X(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await _.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let a=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${a}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function Y(e,t=["primitives"],n=[],r=null){try{let s=(await Promise.all(t.map(async c=>{if(r)switch(c){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return _.getStylesheet(c)}))).filter(c=>c!==null);e.adoptedStyleSheets=[...s,...n]}catch(a){let s=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt layers:`,a),e.adoptedStyleSheets=n}}function Z(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var ee={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 V={};he(V,{deepMerge:()=>te,fragmentFromTemplateLike:()=>ye,isObject:()=>k,parseHTML:()=>B});function k(e){return e&&typeof e=="object"&&!Array.isArray(e)}function te(e,t){let n={...e};return k(e)&&k(t)&&Object.keys(t).forEach(r=>{k(t[r])?r in e?n[r]=te(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function ye(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,a=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let i=0;i<t.length;i+=1){let d=t[i]??"",u=d.match(s);if(u&&i<n.length){let p=u[2].slice(1),m=`pds-val-${i}`;d=d.replace(s,`$1data-pds-prop="${p}:${m}"`),r.add(i)}a.push(d),i<n.length&&!r.has(i)&&a.push(`<!--pds-val-${i}-->`)}let c=document.createElement("template");c.innerHTML=a.join("");let f=(i,d)=>{let u=i.parentNode;if(!u)return;if(d==null){u.removeChild(i);return}let w=p=>{if(p!=null){if(p instanceof Node){u.insertBefore(p,i);return}if(Array.isArray(p)){p.forEach(m=>w(m));return}u.insertBefore(document.createTextNode(String(p)),i)}};w(d),u.removeChild(i)},E=document.createTreeWalker(c.content,NodeFilter.SHOW_COMMENT),S=[];for(;E.nextNode();){let i=E.currentNode;i?.nodeValue?.startsWith("pds-val-")&&S.push(i)}return S.forEach(i=>{let d=Number(i.nodeValue.replace("pds-val-",""));f(i,n[d])}),c.content.querySelectorAll("*").forEach(i=>{let d=i.getAttribute("data-pds-prop");if(!d)return;let[u,w]=d.split(":"),p=Number(String(w).replace("pds-val-",""));u&&Number.isInteger(p)&&(i[u]=n[p]),i.removeAttribute("data-pds-prop")}),c.content}function B(e){return new DOMParser().parseFromString(e,"text/html").body.childNodes}var re="pds",ge=/^([a-z][a-z0-9+\-.]*:)?\/\//i,ne=/^[a-z]:/i;function v(e=""){return e.endsWith("/")?e:`${e}/`}function we(e="",t=re){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Se(e){return e.replace(/^\.\/+/,"")}function be(e){return ne.test(e)?e.replace(ne,"").replace(/^\/+/,""):e}function Ee(e){return e.startsWith("public/")?e.substring(7):e}function M(e,t={}){let n=t.segment||re,r=t.defaultRoot||`/assets/${n}/`,a=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!a||typeof a!="string")return v(r);let s=a.trim();return s?(s=s.replace(/\\/g,"/"),s=we(s,n),s=v(s),ge.test(s)?s:(s=Se(s),s=be(s),s.startsWith("/")||(s=Ee(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(c,f)=>f===0?c:"/")),v(s))):v(r)}var Le=/^[a-z][a-z0-9+\-.]*:\/\//i,D=(()=>{try{return import.meta.url}catch{return}})(),T=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function U(e,t={}){if(!e||Le.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!D)return null;try{return new URL(e,D).href}catch{return null}},a=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||a():a()||r())||e}var se=(()=>{if(D)try{let e=new URL(D);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",D).href}catch{return}})(),oe=!1;function ie(e){oe||typeof document>"u"||(oe=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function ae({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let a="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"?a=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a=s:a=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:a,storedTheme:s}}function C(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&se&&(r=se),T(U(r))}async function ce(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:a=null,autoDefinerModuleURL:s=null,enhancers:c=[],autoDefineOverrides:f=null,autoDefinePreferModule:E=!0}=e,S=(()=>{let i=new Map;return(t||[]).forEach(d=>i.set(d.selector,d)),(c||[]).forEach(d=>i.set(d.selector,d)),Array.from(i.values())})(),y=null;if(typeof window<"u"&&typeof document<"u"){let i=null;try{if(!s||typeof s!="string")throw new Error("AutoDefiner module URL is not configured");let l=await import(s);i=l?.AutoDefiner||l?.default?.AutoDefiner||l?.default||null}catch(l){console.warn("AutoDefiner not available:",l?.message||l)}let d=l=>{switch(l){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${l}.js`}},{mapper:u,...w}=f&&typeof f=="object"?f:{},m={baseURL:n&&T(U(n,{preferModule:E})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:S,onError:(l,h)=>{if(typeof l=="string"&&l.startsWith("pds-")){let L=["pds-form","pds-drawer"].includes(l),F=h?.message?.includes("#pds/lit")||h?.message?.includes("Failed to resolve module specifier");L&&F?console.error(`\u274C PDS component <${l}> requires Lit but #pds/lit is not in import map.
2
+ See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`):console.warn(`\u26A0\uFE0F PDS component <${l}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${l}>:`,h)},...w,mapper:l=>{if(customElements.get(l))return null;if(typeof a=="function")try{let h=a(l);return h===void 0?d(l):h}catch(h){return console.warn("Custom autoDefine.mapper error; falling back to default:",h?.message||h),d(l)}return d(l)}};i&&(y=new i(m),r.length>0&&typeof i.define=="function"&&await i.define(...r,{baseURL:n,mapper:m.mapper,onError:m.onError}))}return{autoDefiner:y,mergedEnhancers:S}}var H=["light","dark"],q=new Set(H);function _e(e){let n=(Array.isArray(e?.themes)?e.themes.map(r=>String(r).toLowerCase()):H).filter(r=>q.has(r));return n.length?n:H}function K(e,{preferDocument:t=!0}={}){let n=String(e||"").toLowerCase();if(q.has(n))return n;if(t&&typeof document<"u"){let r=document.documentElement?.getAttribute("data-theme");if(q.has(r))return r}return typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function le(e,t){let n=K(t);return _e(e).includes(n)}var Q=class extends EventTarget{},o=new Q;o.initializing=!1;o.currentPreset=null;o.debug=!1;var j=null,$=null,I=null,O=null;function x(e,t){return t&&typeof t=="string"?t:`${C(o.currentConfig||{},{resolvePublicAssetURL:M})}core/${e}`}async function Ae(){return Array.isArray(o.defaultEnhancers)&&o.defaultEnhancers.length>0?o.defaultEnhancers:(O||(O=import(x("pds-enhancers.js",o.currentConfig?.enhancersURL)).then(t=>{let n=Array.isArray(t?.defaultPDSEnhancers)?t.defaultPDSEnhancers:[];return o.defaultEnhancers=n,n}).catch(t=>{throw O=null,t})),O)}async function ve(){return typeof o.ask=="function"&&o.ask!==ue?o.ask:($||($=import(x("pds-ask.js",o.currentConfig?.askURL)).then(t=>{let n=t?.ask;if(typeof n!="function")throw new Error("Failed to load ask helper");return o.ask=n,n}).catch(t=>{throw $=null,t})),$)}async function P(){return typeof o.toast=="function"&&o.toast!==A?o.toast:(I||(I=import(x("pds-toast.js",o.currentConfig?.toastURL)).then(t=>{let n=t?.toast;if(typeof n!="function")throw new Error("Failed to load toast helper");return o.toast=n,n}).catch(t=>{throw I=null,t})),I)}async function ue(...e){return(await ve())(...e)}async function A(...e){return(await P())(...e)}A.success=async(...e)=>(await P()).success(...e);A.error=async(...e)=>(await P()).error(...e);A.warning=async(...e)=>(await P()).warning(...e);A.info=async(...e)=>(await P()).info(...e);var de=function(e="log",t,...n){let r=!!(o.registry&&!o.registry.isLive),a=(this?.debug||this?.design?.debug||o.debug||!1)===!0;if(r){if(!o.debug)return}else if(!a&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};function J(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=>J(n)).filter(n=>n!==void 0);let t={};for(let[n,r]of Object.entries(e)){let a=J(r);a!==void 0&&(t[n]=a)}return t}async function De(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}}o.registry=_;o.enums=ee;o.adoptLayers=Y;o.adoptPrimitives=X;o.parse=B;o.createStylesheet=Z;o.isLiveMode=()=>_.isLive;o.ask=ue;o.toast=A;o.common=V;o.AutoComplete=null;o.loadAutoComplete=async()=>{if(o.AutoComplete&&typeof o.AutoComplete.connect=="function")return o.AutoComplete;let e=x("pds-autocomplete.js",o.currentConfig?.autoCompleteURL);return j||(j=import(e).then(t=>{let n=t?.AutoComplete||t?.default?.AutoComplete||t?.default||null;if(!n)throw new Error("AutoComplete export not found in module");return o.AutoComplete=n,n}).catch(t=>{throw j=null,t})),j};function pe(e){let t=typeof CustomEvent=="function";try{let n=t?new CustomEvent("pds:ready",{detail:e}):new Event("pds:ready");o.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{}}}function fe(e={}){let t=typeof CustomEvent=="function",n={at:Date.now(),...e};try{let r=t?new CustomEvent("pds:config-changed",{detail:n}):new Event("pds:config-changed");o.dispatchEvent(r)}catch{}if(typeof document<"u")if(t){let r={detail:n,bubbles:!0,composed:!0};try{document.dispatchEvent(new CustomEvent("pds:config-changed",r))}catch{}}else try{document.dispatchEvent(new Event("pds:config-changed"))}catch{}}var G="pure-ds-theme",b=null,R=null;function N(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 z(e){try{if(b&&R){try{typeof b.removeEventListener=="function"?b.removeEventListener("change",R):typeof b.removeListener=="function"&&b.removeListener(R)}catch{}b=null,R=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let a=r?.matches===void 0?t.matches:r.matches;try{let s=a?"dark":"light";document.documentElement.setAttribute("data-theme",s),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};b=t,R=n,typeof t.addEventListener=="function"?t.addEventListener("change",n):typeof t.addListener=="function"&&t.addListener(n)}}catch{}}Object.defineProperty(o,"theme",{get(){try{return typeof window>"u"?null:localStorage.getItem(G)||null}catch{return null}},set(e){try{if(typeof window>"u")return;let t=o.currentConfig?.design||null,n=K(e);if(t&&!le(t,n)){let r=t?.name||o.currentPreset?.name||o.currentConfig?.preset||"current preset";console.warn(`PDS theme "${n}" not supported by preset "${r}".`),o.dispatchEvent(new CustomEvent("pds:theme:blocked",{detail:{theme:e,resolvedTheme:n,preset:r}}));return}e==null?localStorage.removeItem(G):localStorage.setItem(G,e),N(e),z(e),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});o.defaultEnhancers=[];async function Re(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return xe(r);let a=C(r,{resolvePublicAssetURL:M}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",a).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:c}=await import(s);return c(o,r,{emitReady:pe,emitConfigChanged:fe,applyResolvedTheme:N,setupSystemListenerIfNeeded:z})}o.start=Re;async function xe(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",a=e.staticPaths??{},s=C(e,{resolvePublicAssetURL:M}),c=e&&e.autoDefine||null,f;c&&c.baseURL?f=T(U(c.baseURL,{preferModule:!1})):f=`${s}components/`;let E=c&&Array.isArray(c.predefine)&&c.predefine||[],S=c&&typeof c.mapper=="function"&&c.mapper||null;try{ie(o);let{resolvedTheme:y}=ae({manageTheme:n,themeStorageKey:r,applyResolvedTheme:N,setupSystemListenerIfNeeded:z}),i=await De(s,e),d=Array.isArray(e?.enhancers)?e.enhancers:e?.enhancers&&typeof e.enhancers=="object"?Object.values(e.enhancers):[],u=i?.config?{...i.config,...e,design:e?.design||i.config.design,preset:e?.preset||i.config.preset}:{...e},w={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`},p=i?.paths||{};if(a={...w,...p,...a},o.registry.setStaticMode(a),t&&typeof document<"u")try{let g=await o.registry.getStylesheet("styles");if(g){g._pds=!0;let L=(document.adoptedStyleSheets||[]).filter(F=>F._pds!==!0);document.adoptedStyleSheets=[...L,g],fe({mode:"static",source:"static:styles-applied"})}}catch(g){de.call(o,"warn","Failed to apply static styles:",g)}let m=null,l=[];try{let g=await Ae(),L=await ce({autoDefineBaseURL:f,autoDefinePreload:E,autoDefineMapper:S,autoDefinerModuleURL:x("pds-auto-definer.js",c?.moduleURL||o.currentConfig?.autoDefinerURL),enhancers:d,autoDefineOverrides:c||null,autoDefinePreferModule:!(c&&c.baseURL)},{baseEnhancers:g});m=L.autoDefiner,l=L.mergedEnhancers||[]}catch(g){de.call(o,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",g)}let h=J(e);return o.currentConfig=Object.freeze({mode:"static",...structuredClone(h),design:structuredClone(u.design||{}),preset:u.preset,theme:y,enhancers:l}),pe({mode:"static",config:u,theme:y,autoDefiner:m}),{config:u,theme:y,autoDefiner:m}}catch(y){throw o.dispatchEvent(new CustomEvent("pds:error",{detail:{error:y}})),y}}var Be=N,Ve=z;export{o as PDS,Be as applyResolvedTheme,Ve as setupSystemListenerIfNeeded};
@@ -1,8 +1,8 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  function parseHTML(html) {
2
4
  return new DOMParser().parseFromString(html, "text/html").body.childNodes;
3
5
  }
4
-
5
- const PDS = window.PDS;
6
6
  /**
7
7
  * Simple class for efficient HTML string building
8
8
  * @private
@@ -1,4 +1,4 @@
1
- const PDS = window.PDS;
1
+ import { PDS } from "#pds";
2
2
 
3
3
  /**
4
4
  * @element pds-drawer
@@ -1,4 +1,5 @@
1
1
  import { LitElement, html, nothing, ifDefined, ref, keyed } from "#pds/lit";
2
+ import { PDS } from "#pds";
2
3
 
3
4
  function getStep(value) {
4
5
  if (typeof value === "number") {
@@ -214,17 +215,17 @@ export class SchemaForm extends LitElement {
214
215
  // Start with default options
215
216
  let merged = { ...DEFAULT_OPTIONS };
216
217
 
217
- // Try to get preset options from window.PDS if available
218
- if (typeof window !== "undefined" && window.PDS?.config?.form?.options) {
219
- merged = window.PDS.common.deepMerge(
218
+ // Try to get preset options from PDS if available
219
+ if (PDS?.config?.form?.options) {
220
+ merged = PDS.common.deepMerge(
220
221
  merged,
221
- window.PDS.config.form.options
222
+ PDS.config.form.options
222
223
  );
223
224
  }
224
225
 
225
226
  // Merge instance options
226
227
  if (this.options) {
227
- merged = window.PDS.common.deepMerge(merged, this.options);
228
+ merged = PDS.common.deepMerge(merged, this.options);
228
229
  }
229
230
 
230
231
  this.#mergedOptions = merged;
@@ -946,7 +947,7 @@ export class SchemaForm extends LitElement {
946
947
 
947
948
  try {
948
949
  // Use PDS.ask to show dialog with form - it returns FormData when useForm: true
949
- const formData = await window.PDS.ask(
950
+ const formData = await PDS.ask(
950
951
  html`<pds-form
951
952
  .jsonSchema=${dialogSchema}
952
953
  .values=${currentValue}
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * SVG Icon Web Component
3
5
  *
@@ -71,9 +73,10 @@ export class SvgIcon extends HTMLElement {
71
73
 
72
74
  const docEl = document.documentElement;
73
75
  const hasNoSpriteFlag = Boolean(docEl && docEl.dataset && Object.prototype.hasOwnProperty.call(docEl.dataset, 'pdsNoSprite'));
76
+ const globalScope = typeof globalThis !== 'undefined' ? globalThis : null;
74
77
  const globalDisable = Boolean(
75
- window.__PDS_DISABLE_SVG_SPRITES === true ||
76
- window.PDS_DISABLE_SVG_SPRITES === true ||
78
+ globalScope?.__PDS_DISABLE_SVG_SPRITES === true ||
79
+ globalScope?.PDS_DISABLE_SVG_SPRITES === true ||
77
80
  hasNoSpriteFlag
78
81
  );
79
82
 
@@ -161,7 +164,7 @@ export class SvgIcon extends HTMLElement {
161
164
  const rotate = this.getAttribute('rotate') || '0';
162
165
 
163
166
  // Parse size - can be number (px) or named size (xs, sm, md, lg, xl, 2xl, 3xl)
164
- const pdsEnums = typeof window !== 'undefined' ? window.PDS?.enums : null;
167
+ const pdsEnums = PDS?.enums || null;
165
168
  const pdsIconSizes = pdsEnums?.IconSizes || {};
166
169
  const numericSize = Number(sizeAttr);
167
170
  const hasNumericSize = Number.isFinite(numericSize) && sizeAttr !== '';
@@ -580,16 +583,16 @@ export class SvgIcon extends HTMLElement {
580
583
  static getExternalIconPath() {
581
584
  try {
582
585
  // Try to get from PDS.compiled.tokens.icons.externalPath (live mode)
583
- if (typeof window !== 'undefined' && window.PDS?.compiled?.tokens?.icons?.externalPath) {
584
- return window.PDS.compiled.tokens.icons.externalPath;
586
+ if (PDS?.compiled?.tokens?.icons?.externalPath) {
587
+ return PDS.compiled.tokens.icons.externalPath;
585
588
  }
586
589
  // Fallback: check compiled.config.design.icons.externalPath
587
- if (typeof window !== 'undefined' && window.PDS?.compiled?.config?.design?.icons?.externalPath) {
588
- return window.PDS.compiled.config.design.icons.externalPath;
590
+ if (PDS?.compiled?.config?.design?.icons?.externalPath) {
591
+ return PDS.compiled.config.design.icons.externalPath;
589
592
  }
590
593
  // Fallback: check currentConfig
591
- if (typeof window !== 'undefined' && window.PDS?.currentConfig?.design?.icons?.externalPath) {
592
- return window.PDS.currentConfig.design.icons.externalPath;
594
+ if (PDS?.currentConfig?.design?.icons?.externalPath) {
595
+ return PDS.currentConfig.design.icons.externalPath;
593
596
  }
594
597
  } catch (e) {
595
598
  // Ignore errors accessing config
@@ -1,4 +1,4 @@
1
- const PDS = globalThis.PDS;
1
+ import { PDS } from "#pds";
2
2
 
3
3
  const EDITOR_TAG = "pds-live-edit";
4
4
  const STYLE_ID = "pds-live-editor-styles";
@@ -3543,17 +3543,14 @@ class PdsLiveEdit extends HTMLElement {
3543
3543
  container.id = "pds-live-edit-canvas";
3544
3544
  container.className = "card stack-md";
3545
3545
 
3546
- const heading = document.createElement("h3");
3547
- heading.textContent = "PDS Live Canvas";
3548
- const description = document.createElement("p");
3549
- description.className = "text-muted";
3550
- description.textContent = "Injected templates render here to preview config changes.";
3551
-
3546
+ const heading = document.createElement("hr");
3547
+ heading.setAttribute("data-content", "Injected HTML below");
3548
+
3552
3549
  const canvas = document.createElement("div");
3553
3550
  canvas.id = "pds-live-edit-canvas-content";
3554
3551
  canvas.className = "stack-md";
3555
3552
 
3556
- container.append(heading, description, canvas);
3553
+ container.append(heading, canvas)
3557
3554
  document.body.appendChild(container);
3558
3555
  return container;
3559
3556
  }
@@ -1,5 +1,6 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  const COMPONENT_TAG = "pds-live-importer";
2
- const PDS = globalThis.PDS;
3
4
 
4
5
  const IMPORT_MODES = [
5
6
  { id: "convert-only", label: "Convert to PDS HTML only" },
@@ -1,5 +1,6 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  const COMPONENT_TAG = "pds-live-template-canvas";
2
- const PDS = globalThis.PDS;
3
4
 
4
5
  let managerPromise = null;
5
6
 
@@ -13,6 +13,8 @@
13
13
  *
14
14
  * @property {Object} settings - AutoComplete settings object (required by consumer)
15
15
  */
16
+ import { PDS } from "#pds";
17
+
16
18
  const LAYERS = ["tokens", "primitives", "components", "utilities"];
17
19
  const DEFAULT_PLACEHOLDER = "Search...";
18
20
  const DEFAULT_ICON = "magnifying-glass";
@@ -548,7 +550,15 @@ export class PdsOmnibox extends HTMLElement {
548
550
  async #handleAutoComplete(e) {
549
551
  if (!this.settings) return;
550
552
 
551
- const AutoComplete = PDS.AutoComplete;
553
+ let AutoComplete = PDS.AutoComplete;
554
+ if ((!AutoComplete || typeof AutoComplete.connect !== "function") &&
555
+ typeof PDS.loadAutoComplete === "function") {
556
+ try {
557
+ AutoComplete = await PDS.loadAutoComplete();
558
+ } catch (error) {
559
+ return;
560
+ }
561
+ }
552
562
 
553
563
  if (AutoComplete && typeof AutoComplete.connect === "function") {
554
564
  const settings = {
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * Slack-style rich text field with a semantic output pipeline.
3
5
  *
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * Horizontal scrolling row with optional heading and snap alignment controls.
3
5
  *
@@ -14,6 +16,8 @@
14
16
  * @attr {string} tile-min - Minimum tile width (CSS length, e.g. "250px")
15
17
  * @attr {string} tile-max - Maximum tile width (CSS length, e.g. "360px")
16
18
  */
19
+ import { PDS } from "#pds";
20
+
17
21
  class PdsScrollrow extends HTMLElement {
18
22
  #viewport;
19
23
  #ro;
@@ -80,7 +84,7 @@ class PdsScrollrow extends HTMLElement {
80
84
  async #adopt() {
81
85
  if (this.#adopted || !this.shadowRoot) return;
82
86
  try {
83
- if (window.PDS && typeof PDS.createStylesheet === 'function' && typeof PDS.adoptLayers === 'function') {
87
+ if (typeof PDS.createStylesheet === 'function' && typeof PDS.adoptLayers === 'function') {
84
88
  const componentSheet = PDS.createStylesheet(PdsScrollrow.#COMPONENT_CSS);
85
89
  await PDS.adoptLayers(this.shadowRoot, ['primitives','components', 'utilities'], [componentSheet]);
86
90
  this.#adopted = true;
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * @component pds-splitpanel
3
5
  * @description A split panel component that supports horizontal and vertical layouts, resizable panels, and a responsive mobile view.
@@ -300,7 +302,7 @@ class PdsSplitpanel extends HTMLElement {
300
302
 
301
303
  // Prefer PDS layers if available
302
304
  try {
303
- if (window.PDS && typeof PDS.createStylesheet === "function" && typeof PDS.adoptLayers === "function") {
305
+ if (typeof PDS.createStylesheet === "function" && typeof PDS.adoptLayers === "function") {
304
306
  const componentStyles = PDS.createStylesheet(cssText);
305
307
  await PDS.adoptLayers(this.shadowRoot, ["primitives", "components"], [componentStyles]);
306
308
  return;
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * `<pds-theme>` exposes a zero-config theme toggle that updates `PDS.theme` and
3
5
  * keeps its UI in sync with programmatic theme changes.
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * @element pds-toaster
3
5
  * @fires pds:toast - Global event for creating toasts
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * Accessible, form-associated treeview with nested UL output.
3
5
  *
@@ -1,3 +1,5 @@
1
+ import { PDS } from "#pds";
2
+
1
3
  /**
2
4
  * Drag-and-drop file uploader that participates in native forms.
3
5
  *
@@ -0,0 +1,25 @@
1
+ function g(n){let e=Array.isArray(n?.strings)?n.strings:[],c=Array.isArray(n?.values)?n.values:[],u=new Set,t=[],f=/(\s)(\.[\w-]+)=\s*$/;for(let r=0;r<e.length;r+=1){let s=e[r]??"",l=s.match(f);if(l&&r<c.length){let d=l[2].slice(1),y=`pds-val-${r}`;s=s.replace(f,`$1data-pds-prop="${d}:${y}"`),u.add(r)}t.push(s),r<c.length&&!u.has(r)&&t.push(`<!--pds-val-${r}-->`)}let m=document.createElement("template");m.innerHTML=t.join("");let a=(r,s)=>{let l=r.parentNode;if(!l)return;if(s==null){l.removeChild(r);return}let p=d=>{if(d!=null){if(d instanceof Node){l.insertBefore(d,r);return}if(Array.isArray(d)){d.forEach(y=>p(y));return}l.insertBefore(document.createTextNode(String(d)),r)}};p(s),l.removeChild(r)},i=document.createTreeWalker(m.content,NodeFilter.SHOW_COMMENT),o=[];for(;i.nextNode();){let r=i.currentNode;r?.nodeValue?.startsWith("pds-val-")&&o.push(r)}return o.forEach(r=>{let s=Number(r.nodeValue.replace("pds-val-",""));a(r,c[s])}),m.content.querySelectorAll("*").forEach(r=>{let s=r.getAttribute("data-pds-prop");if(!s)return;let[l,p]=s.split(":"),d=Number(String(p).replace("pds-val-",""));l&&Number.isInteger(d)&&(r[l]=c[d]),r.removeAttribute("data-pds-prop")}),m.content}function b(n,e){if(e==null)return;if(typeof e=="object"&&Array.isArray(e.strings)&&Array.isArray(e.values)){n.appendChild(g(e));return}if(e instanceof Node){n.appendChild(e);return}if(Array.isArray(e)){e.forEach(u=>b(n,u));return}let c=typeof e=="string"?e:String(e);n.appendChild(document.createTextNode(c))}function A(){let n=navigator.userAgent,e=/Safari/i.test(n),c=/(Chrome|Chromium|CriOS|FxiOS|EdgiOS|OPiOS|Opera)/i.test(n);return e&&!c}function C(n){if(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)return;let e=window.matchMedia?.("(max-width: 639px)").matches,c=n.classList.contains("dialog-no-scale-animation")?"pds-dialog-fade-enter":e?"pds-dialog-enter-mobile":"pds-dialog-enter";n.style.animation="none",n.offsetWidth,n.style.animation=`${c} var(--transition-normal) ease`,n.addEventListener("animationend",()=>{n.style.animation=""},{once:!0})}function x(n={}){return n?.liquidGlassEffects===!0}async function E(n,e={}){return e={...{title:"Confirm",type:"confirm",buttons:{ok:{name:"OK",primary:!0},cancel:{name:"Cancel",cancel:!0}}},...e},new Promise(u=>{let t=document.createElement("dialog");A()&&t.classList.add("dialog-no-scale-animation"),x(e)&&t.classList.add("liquid-glass"),e.size&&t.classList.add(`dialog-${e.size}`),e.type&&t.classList.add(`dialog-${e.type}`),e.class&&(Array.isArray(e.class)?t.classList.add(...e.class):t.classList.add(e.class)),e.maxHeight&&t.style.setProperty("--dialog-max-height",e.maxHeight);let f=Object.entries(e.buttons).map(([a,i])=>{let o=i.primary?"btn-primary btn-sm":"btn-outline btn-sm";return`<button type="${i.cancel?"button":"submit"}" class="${o}" value="${a}">${i.name}</button>`});if(e.useForm){let a=document.createElement("div");b(a,n);let i=a.querySelector("form");if(i){t.innerHTML=`
2
+ <header>
3
+ <h2>${e.title}</h2>
4
+ </header>
5
+ `;let o=document.createElement("article");for(o.className="dialog-body";i.firstChild;)o.appendChild(i.firstChild);i.appendChild(o);let h=document.createElement("footer");h.innerHTML=f.join(""),i.appendChild(h),t.appendChild(i)}else t.innerHTML=`
6
+ <header>
7
+ <h2>${e.title}</h2>
8
+ </header>
9
+ <article id="msg-container"></article>
10
+ <footer>
11
+ ${f.join("")}
12
+ </footer>
13
+ `,t.querySelector("#msg-container").appendChild(a)}else{t.innerHTML=`
14
+ <form method="dialog">
15
+ <header>
16
+ <h2>${e.title}</h2>
17
+ </header>
18
+
19
+ <article id="msg-container"></article>
20
+
21
+ <footer>
22
+ ${f.join("")}
23
+ </footer>
24
+ </form>
25
+ `;let a=t.querySelector("#msg-container");b(a,n)}t.addEventListener("click",a=>{a.target.closest('button[value="cancel"]')&&(t.close(),u(!1))});let m=()=>{let a=t.querySelector("form");a?a.addEventListener("submit",i=>{i.preventDefault();let o;e.useForm&&i.submitter.value==="ok"?(console.log("Found form:",a),console.log("Form elements:",a?Array.from(a.elements):"no form"),o=new FormData(a),console.log("FormData entries:",Array.from(o.entries()))):o=i.submitter.value==="ok",t.close(),u(o)}):requestAnimationFrame(m)};m(),t.addEventListener("close",()=>{setTimeout(()=>t.remove(),200)}),document.body.appendChild(t),typeof e.rendered=="function"&&e.rendered(t),t.showModal(),requestAnimationFrame(()=>C(t))})}export{E as ask};
@@ -0,0 +1 @@
1
+ async function P(...h){let i={};h.length&&typeof h[h.length-1]=="object"&&(i=h.pop()||{});let m=h,{baseURL:f,mapper:w=n=>`${n}.js`,onError:E=(n,r)=>console.error(`[defineWebComponents] ${n}:`,r)}=i,d=f?new URL(f,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),l=n=>n.toLowerCase().replace(/(^|-)([a-z])/g,(r,s,u)=>u.toUpperCase()),b=async n=>{try{if(customElements.get(n))return{tag:n,status:"already-defined"};let r=w(n),u=await import(r instanceof URL?r.href:new URL(r,d).href),c=u?.default??u?.[l(n)];if(!c){if(customElements.get(n))return{tag:n,status:"self-defined"};throw new Error(`No export found for ${n}. Expected default export or named export "${l(n)}".`)}return customElements.get(n)?{tag:n,status:"race-already-defined"}:(customElements.define(n,c),{tag:n,status:"defined"})}catch(r){throw E(n,r),r}};return Promise.all(m.map(b))}var M=class{constructor(i={}){let{baseURL:m,mapper:f,onError:w,predicate:E=()=>!0,attributeModule:d="data-module",root:l=document,scanExisting:b=!0,debounceMs:n=16,observeShadows:r=!0,enhancers:s=[],patchAttachShadow:u=!0}=i,c=new Set,y=new Set,$=new Set,S=new Map,U=new WeakMap,v=new WeakMap,p=0,T=!1,x=null,W=e=>{if(!e||!s.length)return;let o=v.get(e);o||(o=new Set,v.set(e,o));for(let t of s)if(!(!t.selector||!t.run)&&!o.has(t.selector))try{e.matches&&e.matches(t.selector)&&(t.run(e),o.add(t.selector))}catch(a){console.warn(`[AutoDefiner] Error applying enhancer for selector "${t.selector}":`,a)}},A=(e,o)=>{if(!T&&!(!e||!e.includes("-"))&&!customElements.get(e)&&!y.has(e)&&!$.has(e)){if(o&&o.getAttribute){let t=o.getAttribute(d);t&&!S.has(e)&&S.set(e,t)}c.add(e),O()}},O=()=>{p||(p=setTimeout(N,n))},L=e=>{if(e){if(e.nodeType===1){let o=e,t=o.tagName?.toLowerCase();t&&t.includes("-")&&!customElements.get(t)&&E(t,o)&&A(t,o),W(o),r&&o.shadowRoot&&C(o.shadowRoot)}e.querySelectorAll&&e.querySelectorAll("*").forEach(o=>{let t=o.tagName?.toLowerCase();t&&t.includes("-")&&!customElements.get(t)&&E(t,o)&&A(t,o),W(o),r&&o.shadowRoot&&C(o.shadowRoot)})}},C=e=>{if(!e||U.has(e))return;L(e);let o=new MutationObserver(t=>{for(let a of t)a.addedNodes?.forEach(R=>{L(R)}),a.type==="attributes"&&a.target&&L(a.target)});o.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[d,...s.map(t=>t.selector).filter(t=>t.startsWith("data-"))]}),U.set(e,o)};async function N(){if(clearTimeout(p),p=0,!c.size)return;let e=Array.from(c);c.clear(),e.forEach(o=>y.add(o));try{let o=t=>S.get(t)??(f?f(t):`${t}.js`);await P(...e,{baseURL:m,mapper:o,onError:(t,a)=>{$.add(t),w?.(t,a)}})}catch{}finally{e.forEach(o=>y.delete(o))}}let _=l===document?document.documentElement:l,j=new MutationObserver(e=>{for(let o of e)o.addedNodes?.forEach(t=>{L(t)}),o.type==="attributes"&&o.target&&L(o.target)});if(j.observe(_,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[d,...s.map(e=>e.selector).filter(e=>e.startsWith("data-"))]}),r&&u&&Element.prototype.attachShadow){let e=Element.prototype.attachShadow;Element.prototype.attachShadow=function(t){let a=e.call(this,t);if(t&&t.mode==="open"){C(a);let R=this.tagName?.toLowerCase();R&&R.includes("-")&&!customElements.get(R)&&A(R,this)}return a},x=()=>Element.prototype.attachShadow=e}return b&&L(_),{stop(){T=!0,j.disconnect(),x&&x(),p&&(clearTimeout(p),p=0),U.forEach(e=>e.disconnect())},flush:N}}static async define(...i){let m={};i.length&&typeof i[i.length-1]=="object"&&(m=i.pop()||{});let f=i,{baseURL:w,mapper:E=r=>`${r}.js`,onError:d=(r,s)=>console.error(`[defineWebComponents] ${r}:`,s)}=m,l=w?new URL(w,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),b=r=>r.toLowerCase().replace(/(^|-)([a-z])/g,(s,u,c)=>c.toUpperCase()),n=async r=>{try{if(customElements.get(r))return{tag:r,status:"already-defined"};let s=E(r),c=await import(s instanceof URL?s.href:new URL(s,l).href),y=c?.default??c?.[b(r)];if(!y){if(customElements.get(r))return{tag:r,status:"self-defined"};throw new Error(`No export found for ${r}. Expected default export or named export "${b(r)}".`)}return customElements.get(r)?{tag:r,status:"race-already-defined"}:(customElements.define(r,y),{tag:r,status:"defined"})}catch(s){throw d(r,s),s}};return Promise.all(f.map(n))}};export{M as AutoDefiner};
@@ -0,0 +1,7 @@
1
+ function m(o){return new DOMParser().parseFromString(o,"text/html").body.childNodes}function y(o,t=100){let e;return function(...i){let r=()=>{clearTimeout(e),o(...i)};clearTimeout(e),e=setTimeout(r,t)}}function p(o){setTimeout(o,0)}function b(o){try{if(typeof o!="string"||o.indexOf(`
2
+ `)!==-1||o.indexOf(" ")!==-1||o.startsWith("#/"))return!1;let t=new URL(o,window.location.origin);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function x(o,t,e){let s=window.screen.width/2-t/2,i=window.screen.height/2-e/2;return window.open(o,"",`toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${t}, height=${e}, top=${i}, left=${s}`)}var g={result:"ac-suggestion",item:"ac-itm"},f=class o extends EventTarget{constructor(t,e,s){super(),this.settings={emptyResultsText:"",...s},this.container=t,this.input=e,this.input.setAttribute("autocomplete","off"),this.categories=s.categories||{},this.caches=new Map,p(this.attach.bind(this))}static connect(t,e){let s=t.target;if(!s._autoComplete){if(!e?.categories)throw Error("Missing autocomplete settings");s._autoComplete=new o(s.parentNode,s,e),t.type==="focus"&&setTimeout(()=>{s._autoComplete.focusHandler(t)},100)}return s._autoComplete}on(t,e){return this.input.addEventListener(t,e),this}attach(){this.resultsDiv=document.createElement("div"),this.resultsDiv.title="",this.resultsDiv.classList.add(g.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 e=getComputedStyle(this.input).accentColor;e!=="auto"&&this.container.style.setProperty("--ac-accent-color",e),(this.container?.shadowRoot??this.container).appendChild(this.resultsDiv),this.controller().clear("attach"),this.on("input",y(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 e=this.acItems.length;this.rowIndex=this.rowIndex+t,this.rowIndex<=0?this.rowIndex=0:this.rowIndex>e-1&&(this.rowIndex=0);for(let i of this.acItems)i.classList.remove("selected");let s=this.getSelectedDiv();s?(s.classList.add("selected"),s.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 e=parseInt(t.getAttribute("data-index"));this.resultClicked=!0;let s=this.results[e],i=this.categories[s.category]??{};i.action=i.action??this.setText.bind(this),i.newTab&&(this.tabWindow=x("about:blank"));let r={...s,search:this.input.value};t.classList.add("ac-active"),setTimeout(()=>{this.controller().hide("result-selected"),r.action?r.action(r):(i.action(r),i.newTab&&(r.url?this.tabWindow.location.href=r.url:this.tabWindow.close()));var n=new Event("change",{bubbles:!0});this.input.dispatchEvent(n),this.controller().clear("result-selected");let u=new Event("result-selected");u.detail=r,this.input.dispatchEvent(u)},0)}}setText(t){let e=!1;this.input?(this.input.value=t.text,e=!0):this.container?.autoCompleteInput?(this.container.autoCompleteInput.value=t.text,e=!0):"value"in this.container&&(this.container.value=t.text,e=!0),e&&this.input&&this.input.dispatchEvent(new Event("input",{bubbles:!0})),this.controller().hide("settext")}resultClick(t){this.selectResult(t.target.closest(`.${g.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 e={search:t.target.value,categories:this.categories};this.container.classList.add("search-running"),this.getItems(e,t).then(s=>{this.controller().clear("new-results"),this.resultsHandler(s,e),this.container.classList.remove("search-running")})}keyDownHandler(t){switch(t.key){case"Enter":t.stopPropagation(),t.preventDefault();break;case"ArrowDown":p(this.moveResult(1));break;case"ArrowUp":p(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 e=t.target.value;this.suggest(e,t)}suggest(t,e){this.input.focus();let s={suggest:!0,search:t||"",categories:this.categories};this.getItems(s,e).then(i=>{this.input.dispatchEvent(new CustomEvent("show-results",{detail:{results:i}})),this.resultsHandler(i,s)})}sort(t,e){return t.sort((s,i)=>{let r=e.categories[s.category],n=e.categories[i.category],u=typeof r.sortIndex=="function"?r.sortIndex(e):r.sortIndex??0;return(typeof n.sortIndex=="function"?n.sortIndex(e):n.sortIndex??0)>u?1:-1})}resultsHandler(t,e){this.results=t,this.rowIndex=-1;let s=0,i=(r,n)=>`
3
+ <div title="${n.tooltip||""}" data-index="${s}" class="${`${g.item} cat-${n.category} ${n.class??""}`.trim()}"${n.style?` style="${n.style}"`:""}>
4
+ ${this.handleImageOrIcon(n)}
5
+ <span class="text">${this.formatResultItem(n,e,r)}</span>
6
+ ${this.settings.hideCategory?"":`<span class="category">${n.category||""}</span>`}
7
+ </div>`;t.forEach(r=>{let n=e.categories[r.category]||{};r.element?this.resultsDiv.appendChild(r.element):(r=typeof r=="string"?{text:r}:r,this.resultsDiv.appendChild(m(i(n,r))[0])),s++}),t.length?(this.acItems=this.resultsDiv.querySelectorAll(".ac-itm"),this.controller().show()):e.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,e,s){let i=typeof t=="string"?{text:t}:t,r=i.text;return e.search&&(r=r.replace("%search%",e.search),i.description=i.description?.replace("%search%",e.search)),r=this.highlight(r,e.search),i.description&&(r=`<div>${r}</div><small>${i.description}</small>`),s.format&&(r=s.format({item:i,result:r,options:e})),r}highlight(t,e){var s=new RegExp("("+e+")","gi");return t.replace(s,'<span class="txt-hl">$1</span>')}async getItems(t,e){this.aborter&&this.aborter.abort();let s=this.caches.get(t.search);if(s)return s;let i=this.settings.map,r=a=>(typeof a=="string"&&(a={text:a}),a),n=a=>i?a.map(h=>({text:h[i]})):a.map(h=>r(h)),u=a=>(this.settings.max&&this.settings.max>0&&(a.length=this.settings.max),a);return this.aborter=new AbortController,this.aborterSignal=this.aborter.signal,new Promise(a=>{let h=l=>{l=this.sort(l,t),this.settings.cache!==!1&&this.caches.set(t.search,l),a(l)};if(b(this.items)){if(this.settings.minlength>0&&(!t.search||t.search.length<this.settings.minlength)){h([]);return}let l=this.formatSearch(this.items,t);fetch(l).then(c=>{if(c.status===200){c.json().then(d=>{d=n(d),h(u(d.filter(w=>this.isMatch(t,w))))});return}throw Error(`HTTP error ${c.status} - ${l}`)})}else if(Array.isArray(this.items)){let l=!0;this.items=this.items.map(c=>typeof c=="string"?{text:c}:(l=!1,c)),l&&this.container.classList.add("simple"),h(u(n(this.items)))}else if(typeof this.items=="function")t.control=this.container,Promise.resolve(this.items(t,e)).then(c=>{c=c.map(d=>r(d)),c=n(c),h(c)});else return h(Promise.resolve(this.items.apply(this,t)))})}async items(t){let e=[];t.results=[],t.signal=this.aborterSignal;for(var s in t.categories){let i=t.categories[s];if(i.trigger=i.trigger??(()=>!0),t.results=e,i.trigger(t)){let r=[];try{r=await i.getItems(t)}catch(n){console.warn(`Error loading items for omniBox category '${s}'.`,n)}e=e.concat(r.map(n=>(n.category=s,n)))}}return e}formatSearch(t,e){return t.indexOf("%search%")?t.replace("%search%",e.search||""):t+"?"+this.createQueryParam(e)}createQueryParam(t){let e=t.suggest?"&suggest=true":"";return`q=${t.text}${e}`}isMatch(t,e){return e.text?.indexOf("%search%")>=0?!0:t.search?e.text?.toLowerCase().indexOf(t.search.toLowerCase())>=0:t.suggest}static textFilter(t,e){return function(s){if(!t.search)return!0;if(s.hidden)return!1;let r=(e?s[e]:s).match(new RegExp(t.search,"gi"));if(r)return r;if(s.config?.tags)return s.config.tags.some(n=>n.match(new RegExp(t.search,"gi")))}}};export{f as AutoComplete};