@pure-ds/core 0.5.35 → 0.5.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/public/assets/js/pds-manager.d.ts +141 -426
- package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
- package/dist/types/public/assets/js/pds.d.ts +3 -4
- package/dist/types/public/assets/js/pds.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-start-helpers.d.ts.map +1 -1
- package/package.json +1 -1
- package/packages/pds-cli/bin/pds-bootstrap.js +29 -14
- package/packages/pds-cli/bin/pds-static.js +13 -3
- package/public/assets/js/app.js +62 -49
- package/public/assets/js/pds-manager.js +12 -12
- package/public/assets/js/pds.js +6 -6
- package/src/js/pds-core/pds-start-helpers.js +23 -3
package/public/assets/js/pds.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var
|
|
2
|
-
`)!==-1||e.indexOf(" ")!==-1||e.startsWith("#/"))return!1;let t=new URL(e,window.location.origin);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function Me(e,t,n){let r=window.screen.width/2-t/2,o=window.screen.height/2-n/2;return window.open(e,"",`toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${t}, height=${n}, top=${o}, left=${r}`)}var Ie=Z(()=>{});var Pe={};J(Pe,{AutoComplete:()=>
|
|
3
|
-
<div title="${i.tooltip||""}" data-index="${r}" class="${`${
|
|
1
|
+
var Oe=Object.defineProperty;var Z=(e,t)=>()=>(e&&(t=e(e=0)),t);var J=(e,t)=>{for(var n in t)Oe(e,n,{get:t[n],enumerable:!0})};var xe={};J(xe,{AutoDefiner:()=>se});async function tt(...e){let t={};e.length&&typeof e[e.length-1]=="object"&&(t=e.pop()||{});let n=e,{baseURL:r,mapper:o=d=>`${d}.js`,onError:s=(d,l)=>console.error(`[defineWebComponents] ${d}:`,l)}=t,i=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),u=d=>d.toLowerCase().replace(/(^|-)([a-z])/g,(l,a,m)=>m.toUpperCase()),c=async d=>{try{if(customElements.get(d))return{tag:d,status:"already-defined"};let l=o(d),m=await import(l instanceof URL?l.href:new URL(l,i).href),h=m?.default??m?.[u(d)];if(!h){if(customElements.get(d))return{tag:d,status:"self-defined"};throw new Error(`No export found for ${d}. Expected default export or named export "${u(d)}".`)}return customElements.get(d)?{tag:d,status:"race-already-defined"}:(customElements.define(d,h),{tag:d,status:"defined"})}catch(l){throw s(d,l),l}};return Promise.all(n.map(c))}var se,Se=Z(()=>{se=class{constructor(t={}){let{baseURL:n,mapper:r,onError:o,predicate:s=()=>!0,attributeModule:i="data-module",root:u=document,scanExisting:c=!0,debounceMs:d=16,observeShadows:l=!0,enhancers:a=[],patchAttachShadow:m=!0}=t,h=new Set,w=new Set,v=new Set,g=new Map,x=new WeakMap,M=new WeakMap,E=0,k=!1,C=null,q=p=>{if(!p||!a.length)return;let y=M.get(p);y||(y=new Set,M.set(p,y));for(let f of a)if(!(!f.selector||!f.run)&&!y.has(f.selector))try{p.matches&&p.matches(f.selector)&&(f.run(p),y.add(f.selector))}catch(L){console.warn(`[AutoDefiner] Error applying enhancer for selector "${f.selector}":`,L)}},I=(p,y)=>{if(!k&&!(!p||!p.includes("-"))&&!customElements.get(p)&&!w.has(p)&&!v.has(p)){if(y&&y.getAttribute){let f=y.getAttribute(i);f&&!g.has(p)&&g.set(p,f)}h.add(p),H()}},H=()=>{E||(E=setTimeout(O,d))},A=p=>{if(p){if(p.nodeType===1){let y=p,f=y.tagName?.toLowerCase();f&&f.includes("-")&&!customElements.get(f)&&s(f,y)&&I(f,y),q(y),l&&y.shadowRoot&&R(y.shadowRoot)}p.querySelectorAll&&p.querySelectorAll("*").forEach(y=>{let f=y.tagName?.toLowerCase();f&&f.includes("-")&&!customElements.get(f)&&s(f,y)&&I(f,y),q(y),l&&y.shadowRoot&&R(y.shadowRoot)})}},R=p=>{if(!p||x.has(p))return;A(p);let y=new MutationObserver(f=>{for(let L of f)L.addedNodes?.forEach(_=>{A(_)}),L.type==="attributes"&&L.target&&A(L.target)});y.observe(p,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...a.map(f=>f.selector).filter(f=>f.startsWith("data-"))]}),x.set(p,y)};async function O(){if(clearTimeout(E),E=0,!h.size)return;let p=Array.from(h);h.clear(),p.forEach(y=>w.add(y));try{let y=f=>g.get(f)??(r?r(f):`${f}.js`);await tt(...p,{baseURL:n,mapper:y,onError:(f,L)=>{v.add(f),o?.(f,L)}})}catch{}finally{p.forEach(y=>w.delete(y))}}let S=u===document?document.documentElement:u,P=new MutationObserver(p=>{for(let y of p)y.addedNodes?.forEach(f=>{A(f)}),y.type==="attributes"&&y.target&&A(y.target)});if(P.observe(S,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[i,...a.map(p=>p.selector).filter(p=>p.startsWith("data-"))]}),l&&m&&Element.prototype.attachShadow){let p=Element.prototype.attachShadow;Element.prototype.attachShadow=function(f){let L=p.call(this,f);if(f&&f.mode==="open"){R(L);let _=this.tagName?.toLowerCase();_&&_.includes("-")&&!customElements.get(_)&&I(_,this)}return L},C=()=>Element.prototype.attachShadow=p}return c&&A(S),{stop(){k=!0,P.disconnect(),C&&C(),E&&(clearTimeout(E),E=0),x.forEach(p=>p.disconnect())},flush:O}}static async define(...t){let n={};t.length&&typeof t[t.length-1]=="object"&&(n=t.pop()||{});let r=t,{baseURL:o,mapper:s=l=>`${l}.js`,onError:i=(l,a)=>console.error(`[defineWebComponents] ${l}:`,a)}=n,u=o?new URL(o,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),c=l=>l.toLowerCase().replace(/(^|-)([a-z])/g,(a,m,h)=>h.toUpperCase()),d=async l=>{try{if(customElements.get(l))return{tag:l,status:"already-defined"};let a=s(l),h=await import(a instanceof URL?a.href:new URL(a,u).href),w=h?.default??h?.[c(l)];if(!w){if(customElements.get(l))return{tag:l,status:"self-defined"};throw new Error(`No export found for ${l}. Expected default export or named export "${c(l)}".`)}return customElements.get(l)?{tag:l,status:"race-already-defined"}:(customElements.define(l,w),{tag:l,status:"defined"})}catch(a){throw i(l,a),a}};return Promise.all(r.map(d))}}});function Re(e){return new DOMParser().parseFromString(e,"text/html").body.childNodes}function $e(e,t=100){let n;return function(...o){let s=()=>{clearTimeout(n),e(...o)};clearTimeout(n),n=setTimeout(s,t)}}function V(e){setTimeout(e,0)}function Te(e){try{if(typeof e!="string"||e.indexOf(`
|
|
2
|
+
`)!==-1||e.indexOf(" ")!==-1||e.startsWith("#/"))return!1;let t=new URL(e,window.location.origin);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}function Me(e,t,n){let r=window.screen.width/2-t/2,o=window.screen.height/2-n/2;return window.open(e,"",`toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${t}, height=${n}, top=${o}, left=${r}`)}var Ie=Z(()=>{});var Pe={};J(Pe,{AutoComplete:()=>le});var ce,le,_e=Z(()=>{Ie();ce={result:"ac-suggestion",item:"ac-itm"},le=class e extends EventTarget{constructor(t,n,r){super(),this.settings={emptyResultsText:"",...r},this.container=t,this.input=n,this.input.setAttribute("autocomplete","off"),this.categories=r.categories||{},this.caches=new Map,V(this.attach.bind(this))}static connect(t,n){let r=t.target;if(!r._autoComplete){if(!n?.categories)throw Error("Missing autocomplete settings");r._autoComplete=new e(r.parentNode,r,n),t.type==="focus"&&setTimeout(()=>{r._autoComplete.focusHandler(t)},100)}return r._autoComplete}on(t,n){return this.input.addEventListener(t,n),this}attach(){this.resultsDiv=document.createElement("div"),this.resultsDiv.title="",this.resultsDiv.classList.add(ce.result),this.container.offsetWidth>100&&(this.resultsDiv.style.width=this.container.offsetWidth),this.resultsDiv.addEventListener("mousedown",this.resultClick.bind(this)),this.container.classList.add("ac-container"),this.input.classList.add("ac-input");let t=getComputedStyle(this.input);this.container.style.setProperty("--ac-bg-default",t.backgroundColor),this.container.style.setProperty("--ac-color-default",t.color);let n=getComputedStyle(this.input).accentColor;n!=="auto"&&this.container.style.setProperty("--ac-accent-color",n),(this.container?.shadowRoot??this.container).appendChild(this.resultsDiv),this.controller().clear("attach"),this.on("input",$e(this.inputHandler.bind(this),this.settings.throttleInputMs??300)).on("focus",this.focusHandler.bind(this)).on("focusout",this.blurHandler.bind(this)).on("keyup",this.keyUpHandler.bind(this)).on("keydown",this.keyDownHandler.bind(this))}controller(){let t=this.internalController();return typeof this.settings.controller=="function"&&(t=this.settings.controller(this)??t),t}internalController(){return{show:this.show.bind(this),hide:this.hide.bind(this),clear:this.clear.bind(this),empty:()=>{}}}moveResult(t){this.controller().show();let n=this.acItems.length;this.rowIndex=this.rowIndex+t,this.rowIndex<=0?this.rowIndex=0:this.rowIndex>n-1&&(this.rowIndex=0);for(let o of this.acItems)o.classList.remove("selected");let r=this.getSelectedDiv();r?(r.classList.add("selected"),r.scrollIntoView({behavior:"smooth",block:"end",inline:"nearest"})):this.focusHandler({target:this.input})}getSelectedDiv(){return this.resultsDiv.querySelector(`div:nth-child(${this.rowIndex+1})`)}selectResult(t){if(t=t||this.getSelectedDiv(),t){let n=parseInt(t.getAttribute("data-index"));this.resultClicked=!0;let r=this.results[n],o=this.categories[r.category]??{};o.action=o.action??this.setText.bind(this),o.newTab&&(this.tabWindow=Me("about:blank"));let s={...r,search:this.input.value};t.classList.add("ac-active"),setTimeout(()=>{this.controller().hide("result-selected"),s.action?s.action(s):(o.action(s),o.newTab&&(s.url?this.tabWindow.location.href=s.url:this.tabWindow.close()));var i=new Event("change",{bubbles:!0});this.input.dispatchEvent(i),this.controller().clear("result-selected");let u=new Event("result-selected");u.detail=s,this.input.dispatchEvent(u)},0)}}setText(t){this.container.autoCompleteInput||(this.container.value=t.text),this.controller().hide("settext")}resultClick(t){this.selectResult(t.target.closest(`.${ce.item}`))}blurHandler(){setTimeout(()=>{this.resultClicked||this.controller().clear("blurred"),this.resultClicked=!1},100)}clear(){this.settings.debug||this.resultsDiv&&(this.resultsDiv.innerHTML="",this.controller().hide("clear"),this.cacheTmr&&clearTimeout(this.cacheTmr),this.cacheTmr=setTimeout(()=>{this.caches.clear()},60*1e3*5))}show(){if(!this.resultsDiv.classList.contains("ac-active")){let t=this.getViewBounds();this.resultsDiv.style.position="absolute",t.rect.width>100&&(this.resultsDiv.style.width=`${t.rect.width}px`),this.settings.direction=this.settings.direction??t.suggestedDirection,this.resultsDiv.setAttribute("data-direction",this.settings.direction),this.settings.direction==="up"?(this.resultsDiv.style.top="unset",this.resultsDiv.style.bottom=`${t.rect.height+20}px`,this.rowIndex=this.acItems.length):(this.resultsDiv.style.bottom="unset",this.resultsDiv.style.top=`${t.rect.height}px`,this.rowIndex=-1),this.resultsDiv.style.maxWidth="unset",this.resultsDiv.classList.toggle("ac-active",!0)}}getViewBounds(){let t=this.input.getBoundingClientRect();return{rect:t,suggestedDirection:t.top+t.height+500>window.innerHeight?"up":"down"}}hide(){this.resultsDiv.classList.toggle("ac-active",!1)}empty(){this.resultsDiv.innerHTML=`<div class="ac-empty">${this.settings.emptyResultsText}</div>`,this.controller().show()}inputHandler(t){this.cacheTmr&&clearTimeout(this.cacheTmr);let n={search:t.target.value,categories:this.categories};this.container.classList.add("search-running"),this.getItems(n,t).then(r=>{this.controller().clear("new-results"),this.resultsHandler(r,n),this.container.classList.remove("search-running")})}keyDownHandler(t){switch(t.key){case"Enter":t.stopPropagation(),t.preventDefault();break;case"ArrowDown":V(this.moveResult(1));break;case"ArrowUp":V(this.moveResult(-1));break}}keyUpHandler(t){switch(t.key){case"Escape":this.controller().hide("escape");break;case"Enter":this.getSelectedDiv()&&(this.container.preventEnter=!0,t.stopPropagation(),t.preventDefault(),this.selectResult(),setTimeout(()=>{this.container.preventEnter=!1},10));break;default:break}}focusHandler(t){this.controller().clear("focus");let n=t.target.value;this.suggest(n,t)}suggest(t,n){this.input.focus();let r={suggest:!0,search:t||"",categories:this.categories};this.getItems(r,n).then(o=>{this.input.dispatchEvent(new CustomEvent("show-results",{detail:{results:o}})),this.resultsHandler(o,r)})}sort(t,n){return t.sort((r,o)=>{let s=n.categories[r.category],i=n.categories[o.category],u=typeof s.sortIndex=="function"?s.sortIndex(n):s.sortIndex??0;return(typeof i.sortIndex=="function"?i.sortIndex(n):i.sortIndex??0)>u?1:-1})}resultsHandler(t,n){this.results=t,this.rowIndex=-1;let r=0,o=(s,i)=>`
|
|
3
|
+
<div title="${i.tooltip||""}" data-index="${r}" class="${`${ce.item} cat-${i.category} ${i.class??""}`.trim()}">
|
|
4
4
|
${this.handleImageOrIcon(i)}
|
|
5
5
|
<span class="text">${this.formatResultItem(i,n,s)}</span>
|
|
6
6
|
${this.settings.hideCategory?"":`<span class="category">${i.category||""}</span>`}
|
|
7
|
-
</div>`;t.forEach(s=>{let i=n.categories[s.category]||{};s.element?this.resultsDiv.appendChild(s.element):(s=typeof s=="string"?{text:s}:s,this.resultsDiv.appendChild(Re(o(i,s))[0])),r++}),t.length?(this.acItems=this.resultsDiv.querySelectorAll(".ac-itm"),this.controller().show()):n.search.length&&this.controller().empty()}handleImageOrIcon(t){return t.image?`<img src="${t.image}"/>`:typeof this.settings.iconHandler=="function"?this.settings.iconHandler(t):`<svg-icon icon="${t.icon}"></svg-icon>`}formatResultItem(t,n,r){let o=typeof t=="string"?{text:t}:t,s=o.text;return n.search&&(s=s.replace("%search%",n.search),o.description=o.description?.replace("%search%",n.search)),s=this.highlight(s,n.search),o.description&&(s=`<div>${s}</div><small>${o.description}</small>`),r.format&&(s=r.format({item:o,result:s,options:n})),s}highlight(t,n){var r=new RegExp("("+n+")","gi");return t.replace(r,'<span class="txt-hl">$1</span>')}async getItems(t,n){this.aborter&&this.aborter.abort();let r=this.caches.get(t.search);if(r)return r;let o=this.settings.map,s=c=>(typeof c=="string"&&(c={text:c}),c),i=c=>o?c.map(d=>({text:d[o]})):c.map(d=>s(d)),u=c=>(this.settings.max&&this.settings.max>0&&(c.length=this.settings.max),c);return this.aborter=new AbortController,this.aborterSignal=this.aborter.signal,new Promise(c=>{let d=l=>{l=this.sort(l,t),this.settings.cache!==!1&&this.caches.set(t.search,l),c(l)};if(Te(this.items)){if(this.settings.minlength>0&&(!t.search||t.search.length<this.settings.minlength)){d([]);return}let l=this.formatSearch(this.items,t);fetch(l).then(a=>{if(a.status===200){a.json().then(
|
|
7
|
+
</div>`;t.forEach(s=>{let i=n.categories[s.category]||{};s.element?this.resultsDiv.appendChild(s.element):(s=typeof s=="string"?{text:s}:s,this.resultsDiv.appendChild(Re(o(i,s))[0])),r++}),t.length?(this.acItems=this.resultsDiv.querySelectorAll(".ac-itm"),this.controller().show()):n.search.length&&this.controller().empty()}handleImageOrIcon(t){return t.image?`<img src="${t.image}"/>`:typeof this.settings.iconHandler=="function"?this.settings.iconHandler(t):`<svg-icon icon="${t.icon}"></svg-icon>`}formatResultItem(t,n,r){let o=typeof t=="string"?{text:t}:t,s=o.text;return n.search&&(s=s.replace("%search%",n.search),o.description=o.description?.replace("%search%",n.search)),s=this.highlight(s,n.search),o.description&&(s=`<div>${s}</div><small>${o.description}</small>`),r.format&&(s=r.format({item:o,result:s,options:n})),s}highlight(t,n){var r=new RegExp("("+n+")","gi");return t.replace(r,'<span class="txt-hl">$1</span>')}async getItems(t,n){this.aborter&&this.aborter.abort();let r=this.caches.get(t.search);if(r)return r;let o=this.settings.map,s=c=>(typeof c=="string"&&(c={text:c}),c),i=c=>o?c.map(d=>({text:d[o]})):c.map(d=>s(d)),u=c=>(this.settings.max&&this.settings.max>0&&(c.length=this.settings.max),c);return this.aborter=new AbortController,this.aborterSignal=this.aborter.signal,new Promise(c=>{let d=l=>{l=this.sort(l,t),this.settings.cache!==!1&&this.caches.set(t.search,l),c(l)};if(Te(this.items)){if(this.settings.minlength>0&&(!t.search||t.search.length<this.settings.minlength)){d([]);return}let l=this.formatSearch(this.items,t);fetch(l).then(a=>{if(a.status===200){a.json().then(m=>{m=i(m),d(u(m.filter(h=>this.isMatch(t,h))))});return}throw Error(`HTTP error ${a.status} - ${l}`)})}else if(Array.isArray(this.items)){let l=!0;this.items=this.items.map(a=>typeof a=="string"?{text:a}:(l=!1,a)),l&&this.container.classList.add("simple"),d(u(i(this.items)))}else if(typeof this.items=="function")t.control=this.container,Promise.resolve(this.items(t,n)).then(a=>{a=a.map(m=>s(m)),a=i(a),d(a)});else return d(Promise.resolve(this.items.apply(this,t)))})}async items(t){let n=[];t.results=[],t.signal=this.aborterSignal;for(var r in t.categories){let o=t.categories[r];if(o.trigger=o.trigger??(()=>!0),t.results=n,o.trigger(t)){let s=[];try{s=await o.getItems(t)}catch(i){console.warn(`Error loading items for omniBox category '${r}'.`,i)}n=n.concat(s.map(i=>(i.category=r,i)))}}return n}formatSearch(t,n){return t.indexOf("%search%")?t.replace("%search%",n.search||""):t+"?"+this.createQueryParam(n)}createQueryParam(t){let n=t.suggest?"&suggest=true":"";return`q=${t.text}${n}`}isMatch(t,n){return n.text?.indexOf("%search%")>=0?!0:t.search?n.text?.toLowerCase().indexOf(t.search.toLowerCase())>=0:t.suggest}static textFilter(t,n){return function(r){if(!t.search)return!0;if(r.hidden)return!1;let s=(n?r[n]:r).match(new RegExp(t.search,"gi"));if(s)return s;if(r.config?.tags)return r.config.tags.some(i=>i.match(new RegExp(t.search,"gi")))}}}});var X=class{constructor(){this._mode="static",this._staticPaths={tokens:"/assets/pds/styles/pds-tokens.css.js",primitives:"/assets/pds/styles/pds-primitives.css.js",components:"/assets/pds/styles/pds-components.css.js",utilities:"/assets/pds/styles/pds-utilities.css.js",styles:"/assets/pds/styles/pds-styles.css.js"}}setLiveMode(){this._mode="live"}setStaticMode(t={}){this._mode="static",this._staticPaths={...this._staticPaths,...t}}async getStylesheet(t){if(this._mode==="live")return null;try{return(await import(this._staticPaths[t]))[t]}catch(n){console.error(`[PDS Registry] Failed to load static ${t}:`,n),console.error(`[PDS Registry] Looking for: ${this._staticPaths[t]}`),console.error("[PDS Registry] Make sure you've run 'npm run pds:build' and configured PDS.start() with the correct static.root path");let r=new CSSStyleSheet;return r.replaceSync("/* Failed to load "+t+" */"),r}}get mode(){return this._mode}get isLive(){return this._mode==="live"}},U=new X;async function pe(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await U.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let o=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${o}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function he(e,t=["primitives"],n=[],r=null){try{let s=(await Promise.all(t.map(async i=>{if(r)switch(i){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return U.getStylesheet(i)}))).filter(i=>i!==null);e.adoptedStyleSheets=[...s,...n]}catch(o){let s=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt layers:`,o),e.adoptedStyleSheets=n}}function fe(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var me={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 ye={mode:"live",preset:"default",autoDefine:{predefine:["pds-icon","pds-drawer","pds-toaster"]},log(e,t,...n){console[e](t,...n)}};var ee={};J(ee,{deepMerge:()=>ge,fragmentFromTemplateLike:()=>Y,isObject:()=>W});function W(e){return e&&typeof e=="object"&&!Array.isArray(e)}function ge(e,t){let n={...e};return W(e)&&W(t)&&Object.keys(t).forEach(r=>{W(t[r])?r in e?n[r]=ge(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function Y(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,o=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let a=0;a<t.length;a+=1){let m=t[a]??"",h=m.match(s);if(h&&a<n.length){let v=h[2].slice(1),g=`pds-val-${a}`;m=m.replace(s,`$1data-pds-prop="${v}:${g}"`),r.add(a)}o.push(m),a<n.length&&!r.has(a)&&o.push(`<!--pds-val-${a}-->`)}let i=document.createElement("template");i.innerHTML=o.join("");let u=(a,m)=>{let h=a.parentNode;if(!h)return;if(m==null){h.removeChild(a);return}let w=v=>{if(v!=null){if(v instanceof Node){h.insertBefore(v,a);return}if(Array.isArray(v)){v.forEach(g=>w(g));return}h.insertBefore(document.createTextNode(String(v)),a)}};w(m),h.removeChild(a)},c=document.createTreeWalker(i.content,NodeFilter.SHOW_COMMENT),d=[];for(;c.nextNode();){let a=c.currentNode;a?.nodeValue?.startsWith("pds-val-")&&d.push(a)}return d.forEach(a=>{let m=Number(a.nodeValue.replace("pds-val-",""));u(a,n[m])}),i.content.querySelectorAll("*").forEach(a=>{let m=a.getAttribute("data-pds-prop");if(!m)return;let[h,w]=m.split(":"),v=Number(String(w).replace("pds-val-",""));h&&Number.isInteger(v)&&(a[h]=n[v]),a.removeAttribute("data-pds-prop")}),i.content}function te(e,t){if(t==null)return;if(typeof t=="object"&&Array.isArray(t.strings)&&Array.isArray(t.values)){e.appendChild(Y(t));return}if(t instanceof Node){e.appendChild(t);return}if(Array.isArray(t)){t.forEach(r=>te(e,r));return}let n=typeof t=="string"?t:String(t);e.appendChild(document.createTextNode(n))}async function be(e,t={}){return t={...{title:"Confirm",type:"confirm",buttons:{ok:{name:"OK",primary:!0},cancel:{name:"Cancel",cancel:!0}}},...t},new Promise(r=>{let o=document.createElement("dialog");ye.options?.liquidGlassEffects&&o.classList.add("liquid-glass"),t.size&&o.classList.add(`dialog-${t.size}`),t.type&&o.classList.add(`dialog-${t.type}`),t.class&&(Array.isArray(t.class)?o.classList.add(...t.class):o.classList.add(t.class)),t.maxHeight&&o.style.setProperty("--dialog-max-height",t.maxHeight);let s=Object.entries(t.buttons).map(([u,c])=>{let d=c.primary?"btn-primary btn-sm":"btn-outline btn-sm";return`<button type="${c.cancel?"button":"submit"}" class="${d}" value="${u}">${c.name}</button>`});if(t.useForm){let u=document.createElement("div");te(u,e);let c=u.querySelector("form");if(c){o.innerHTML=`
|
|
8
8
|
<header>
|
|
9
9
|
<h2>${t.title}</h2>
|
|
10
10
|
</header>
|
|
@@ -28,5 +28,5 @@ var Ne=Object.defineProperty;var Z=(e,t)=>()=>(e&&(t=e(e=0)),t);var J=(e,t)=>{fo
|
|
|
28
28
|
${s.join("")}
|
|
29
29
|
</footer>
|
|
30
30
|
</form>
|
|
31
|
-
`;let u=o.querySelector("#msg-container");te(u,e)}o.addEventListener("click",u=>{u.target.closest('button[value="cancel"]')&&(o.close(),r(!1))});let i=()=>{let u=o.querySelector("form");u?u.addEventListener("submit",c=>{c.preventDefault();let d;t.useForm&&c.submitter.value==="ok"?(console.log("Found form:",u),console.log("Form elements:",u?Array.from(u.elements):"no form"),d=new FormData(u),console.log("FormData entries:",Array.from(d.entries()))):d=c.submitter.value==="ok",o.close(),r(d)}):requestAnimationFrame(i)};i(),o.addEventListener("close",()=>{setTimeout(()=>o.remove(),200)}),document.body.appendChild(o),typeof t.rendered=="function"&&t.rendered(o),o.showModal()})}async function Oe(){let e=document.querySelector("pds-toaster");return e||(e=document.createElement("pds-toaster"),document.body.appendChild(e),await customElements.whenDefined("pds-toaster")),e}async function D(e,t={}){return(await Oe()).toast(e,t)}D.success=async function(e,t={}){return D(e,{...t,type:"success"})};D.error=async function(e,t={}){return D(e,{...t,type:"error"})};D.warning=async function(e,t={}){return D(e,{...t,type:"warning"})};D.info=async function(e,t={}){return D(e,{...t,type:"information"})};var je=[{selector:".accordion"},{selector:"nav[data-dropdown]"},{selector:"label[data-toggle]"},{selector:'input[type="range"]'},{selector:"form[data-required]"},{selector:"fieldset[role=group][data-open]"},{selector:"[data-clip]"},{selector:"button, a[class*='btn-']"}];function Fe(e){e.dataset.enhancedAccordion||(e.dataset.enhancedAccordion="true",e.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===e&&e.querySelectorAll(":scope > details[open]").forEach(n=>{n!==t.target&&(n.open=!1)})},!0))}function He(e){if(e.dataset.enhancedDropdown)return;e.dataset.enhancedDropdown="true";let t=e.lastElementChild;if(!t)return;let n=e.querySelector("[data-dropdown-toggle]")||e.querySelector("button");n&&!n.hasAttribute("type")&&n.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.tagName?.toLowerCase()==="menu"&&!t.hasAttribute("role")&&t.setAttribute("role","menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),n&&(n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-controls",t.id),n.setAttribute("aria-expanded","false"));let o=()=>{let c=(e.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let d=e.getBoundingClientRect(),l=Math.max(0,window.innerHeight-d.bottom);return Math.max(0,d.top)>l?"up":"down"},s=()=>{e.dataset.dropdownDirection=o(),t.setAttribute("aria-hidden","false"),n?.setAttribute("aria-expanded","true")},i=()=>{t.setAttribute("aria-hidden","true"),n?.setAttribute("aria-expanded","false")},u=()=>{t.getAttribute("aria-hidden")==="false"?i():s()};n?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),u()}),document.addEventListener("click",c=>{e.contains(c.target)||i()}),e.addEventListener("keydown",c=>{c.key==="Escape"&&(i(),n?.focus())}),e.addEventListener("focusout",c=>{(!c.relatedTarget||!e.contains(c.relatedTarget))&&i()})}function We(e){if(e.dataset.enhancedToggle)return;e.dataset.enhancedToggle="true";let t=e.querySelector('input[type="checkbox"]');if(!t)return;e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","switch"),e.setAttribute("aria-checked",t.checked?"true":"false");let n=document.createElement("span");n.className="toggle-switch",n.setAttribute("role","presentation"),n.setAttribute("aria-hidden","true");let r=document.createElement("span");r.className="toggle-knob",n.appendChild(r),e.insertBefore(n,t.nextSibling);let o=()=>{e.setAttribute("aria-checked",t.checked?"true":"false")},s=()=>{t.disabled||(t.checked=!t.checked,o(),t.dispatchEvent(new Event("change",{bubbles:!0})))};e.addEventListener("click",i=>{i.preventDefault(),s()}),e.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),s())}),t.addEventListener("change",o)}function ze(e){if(e.dataset.enhancedRange)return;let t=e.closest("label"),n=t?.classList.contains("range-output"),r=e.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${r}-output`;if(e.id=r,n){let s=t.querySelector("span");if(s&&!s.classList.contains("range-output-wrapper")){let i=document.createElement("span");i.className="range-output-wrapper",i.style.display="flex",i.style.justifyContent="space-between",i.style.alignItems="center";let u=document.createElement("span");u.textContent=s.textContent,i.appendChild(u);let c=document.createElement("output");c.id=o,c.setAttribute("for",r),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=e.value,i.appendChild(c),s.textContent="",s.appendChild(i);let d=()=>{c.textContent=e.value};e.addEventListener("input",d)}}else{let s=e.closest(".range-container");s||(s=document.createElement("div"),s.className="range-container",e.parentNode?.insertBefore(s,e),s.appendChild(e)),s.style.position="relative";let i=document.createElement("output");i.id=o,i.setAttribute("for",r),i.className="range-bubble",i.setAttribute("aria-live","polite"),s.appendChild(i);let u=()=>{let l=parseFloat(e.min)||0,a=parseFloat(e.max)||100,p=parseFloat(e.value),f=(p-l)/(a-l);i.style.left=`calc(${f*100}% )`,i.textContent=String(p)},c=()=>i.classList.add("visible"),d=()=>i.classList.remove("visible");e.addEventListener("input",u),e.addEventListener("pointerdown",c),e.addEventListener("pointerup",d),e.addEventListener("pointerleave",d),e.addEventListener("focus",c),e.addEventListener("blur",d),u()}e.dataset.enhancedRange="1"}function Be(e){if(e.dataset.enhancedRequired)return;e.dataset.enhancedRequired="true";let t=n=>{let r=n.closest("label");if(!r||r.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",r.querySelector("span").appendChild(o);let s=n.closest("form");if(s&&!s.querySelector(".required-legend")){let i=document.createElement("small");i.classList.add("required-legend"),i.textContent="* Required fields",s.insertBefore(i,s.querySelector(".form-actions")||s.lastElementChild)}};e.querySelectorAll("[required]").forEach(n=>{t(n)})}function Ve(e){if(e.dataset.enhancedOpenGroup)return;e.dataset.enhancedOpenGroup="true",e.classList.add("flex","flex-wrap","buttons");let t=document.createElement("input");t.type="text",t.placeholder="Add item...",t.classList.add("input-text","input-sm"),t.style.width="auto";let n=e.querySelector('input[type="radio"], input[type="checkbox"]');e.appendChild(t),t.addEventListener("keydown",r=>{if(r.key==="Enter"||r.key==="Tab"){let o=t.value.trim();if(o){r.preventDefault();let s=n.type==="radio"?"radio":"checkbox",i=`open-group-${Math.random().toString(36).substring(2,11)}`,u=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let d=document.createElement("input");d.type=s,d.name=n.name||e.getAttribute("data-name")||"open-group",d.value=o,d.id=i,u.appendChild(c),u.appendChild(d),e.insertBefore(u,t),t.value=""}}else if(r.key==="Backspace"&&t.value===""){r.preventDefault();let o=e.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Ge(e){if(e.dataset.enhancedClip)return;e.dataset.enhancedClip="true",e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.hasAttribute("role")||e.setAttribute("role","button");let t=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("aria-expanded",r?"true":"false")},n=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("data-clip-open",r?"false":"true"),t()};e.addEventListener("click",r=>{r.defaultPrevented||n()}),e.addEventListener("keydown",r=>{(r.key===" "||r.key==="Enter")&&(r.preventDefault(),n())}),t()}function Ke(e){if(e.dataset.enhancedBtnWorking)return;e.dataset.enhancedBtnWorking="true";let t=null,n=!1;new MutationObserver(o=>{o.forEach(s=>{if(s.attributeName==="class"){let i=e.classList.contains("btn-working"),u=e.querySelector("pds-icon");if(i)if(u)t||(t=u.getAttribute("icon")),u.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),e.insertBefore(c,e.firstChild),n=!0}else s.oldValue?.includes("btn-working")&&u&&(n?(u.remove(),n=!1):t&&(u.setAttribute("icon",t),t=null))}})}).observe(e,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Qe=new Map([[".accordion",Fe],["nav[data-dropdown]",He],["label[data-toggle]",We],['input[type="range"]',ze],["form[data-required]",Be],["fieldset[role=group][data-open]",Ve],["[data-clip]",Ge],["button, a[class*='btn-']",Ke]]),ne=je.map(e=>({...e,run:Qe.get(e.selector)||(()=>{})}));var we="pds",Ze=/^([a-z][a-z0-9+\-.]*:)?\/\//i,be=/^[a-z]:/i;function O(e=""){return e.endsWith("/")?e:`${e}/`}function Je(e="",t=we){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Xe(e){return e.replace(/^\.\/+/,"")}function Ye(e){return be.test(e)?e.replace(be,"").replace(/^\/+/,""):e}function et(e){return e.startsWith("public/")?e.substring(7):e}function re(e,t={}){let n=t.segment||we,r=t.defaultRoot||`/assets/${n}/`,o=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!o||typeof o!="string")return O(r);let s=o.trim();return s?(s=s.replace(/\\/g,"/"),s=Je(s,n),s=O(s),Ze.test(s)?s:(s=Xe(s),s=Ye(s),s.startsWith("/")||(s=et(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(i,u)=>u===0?i:"/")),O(s))):O(r)}var nt=/^[a-z][a-z0-9+\-.]*:\/\//i,j=(()=>{try{return import.meta.url}catch{return}})(),z=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function B(e,t={}){if(!e||nt.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!j)return null;try{return new URL(e,j).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||o():o()||r())||e}var Se=(()=>{if(j)try{let e=new URL(j);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",j).href}catch{return}})(),Ee=!1;function Ae(e){Ee||typeof document>"u"||(Ee=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Le(e={},t={}){if(!t||typeof t!="object")return e;let n=Array.isArray(e)?[...e]:{...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)?n[r]=Le(n[r]&&typeof n[r]=="object"?n[r]:{},o):n[r]=o;return n}function oe(e=""){return String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function q(e){if(e==null)return e;if(typeof e=="function")return;if(typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>q(n)).filter(n=>n!==void 0);let t={};for(let n in e)if(e.hasOwnProperty(n)){let r=e[n];if(typeof r!="function"){let o=q(r);o!==void 0&&(t[n]=o)}}return t}function Ce(e={},t={},{presets:n,defaultLog:r}){let o=typeof e=="object"&&("colors"in e||"typography"in e||"spatialRhythm"in e||"shape"in e||"behavior"in e||"layout"in e||"advanced"in e||"a11y"in e||"components"in e||"icons"in e),s=e&&e.enhancers;s&&!Array.isArray(s)&&(s=Object.values(s));let i=s??t.enhancers??[],u=e&&e.preset,c=e&&e.design,d="preset"in(e||{})||"design"in(e||{})||"enhancers"in(e||{}),l,a=null;if(d){let p=String(u||"default").toLowerCase(),f=n?.[p]||Object.values(n||{}).find(k=>oe(k.name)===p||String(k.name||"").toLowerCase()===p);if(!f)throw new Error(`PDS preset not found: "${u||"default"}"`);a={id:f.id||oe(f.name),name:f.name||f.id||String(p)};let w=structuredClone(f);if(c&&typeof c=="object"){let k=q(c);w=Le(w,structuredClone(k))}let{mode:v,autoDefine:g,applyGlobalStyles:x,manageTheme:M,themeStorageKey:E,preloadStyles:R,criticalLayers:C,managerURL:N,manager:I,preset:H,design:A,enhancers:$,log:P,...S}=e;l={...S,design:w,preset:a.name,log:P||r}}else if(o){let{log:p,...f}=e;l={design:structuredClone(f),log:p||r}}else{let p=n?.default||Object.values(n||{}).find(f=>oe(f.name)==="default");if(!p)throw new Error("PDS default preset not available");a={id:p.id||"default",name:p.name||"Default"},l={design:structuredClone(p),preset:a.name,log:r}}return{generatorConfig:l,enhancers:i,presetInfo:a}}function De({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let o="light",s=null;if(e&&typeof window<"u"){try{s=localStorage.getItem(t)||null}catch{s=null}try{n?.(s),r?.(s)}catch{}s?s==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=s:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:s}}function ie(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&Se&&(r=Se),z(B(r))}async function ke(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:o=null,enhancers:s=[],autoDefineOverrides:i=null,autoDefinePreferModule:u=!0}=e,c=(()=>{let l=new Map;return(t||[]).forEach(a=>l.set(a.selector,a)),(s||[]).forEach(a=>l.set(a.selector,a)),Array.from(l.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let l=null;try{let g=await Promise.resolve().then(()=>(xe(),ve));l=g?.AutoDefiner||g?.default?.AutoDefiner||g?.default||null}catch(g){console.warn("AutoDefiner not available:",g?.message||g)}let a=g=>{switch(g){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${g}.js`}},{mapper:p,...f}=i&&typeof i=="object"?i:{},v={baseURL:n&&z(B(n,{preferModule:u})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(g,x)=>{if(typeof g=="string"&&g.startsWith("pds-")){let E=["pds-form","pds-drawer"].includes(g),R=x?.message?.includes("#pds/lit")||x?.message?.includes("Failed to resolve module specifier");E&&R?console.error(`\u274C PDS component <${g}> requires Lit but #pds/lit is not in import map.
|
|
32
|
-
See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`):console.warn(`\u26A0\uFE0F PDS component <${g}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${g}>:`,x)},...
|
|
31
|
+
`;let u=o.querySelector("#msg-container");te(u,e)}o.addEventListener("click",u=>{u.target.closest('button[value="cancel"]')&&(o.close(),r(!1))});let i=()=>{let u=o.querySelector("form");u?u.addEventListener("submit",c=>{c.preventDefault();let d;t.useForm&&c.submitter.value==="ok"?(console.log("Found form:",u),console.log("Form elements:",u?Array.from(u.elements):"no form"),d=new FormData(u),console.log("FormData entries:",Array.from(d.entries()))):d=c.submitter.value==="ok",o.close(),r(d)}):requestAnimationFrame(i)};i(),o.addEventListener("close",()=>{setTimeout(()=>o.remove(),200)}),document.body.appendChild(o),typeof t.rendered=="function"&&t.rendered(o),o.showModal()})}async function Ne(){let e=document.querySelector("pds-toaster");return e||(e=document.createElement("pds-toaster"),document.body.appendChild(e),await customElements.whenDefined("pds-toaster")),e}async function D(e,t={}){return(await Ne()).toast(e,t)}D.success=async function(e,t={}){return D(e,{...t,type:"success"})};D.error=async function(e,t={}){return D(e,{...t,type:"error"})};D.warning=async function(e,t={}){return D(e,{...t,type:"warning"})};D.info=async function(e,t={}){return D(e,{...t,type:"information"})};var je=[{selector:".accordion"},{selector:"nav[data-dropdown]"},{selector:"label[data-toggle]"},{selector:'input[type="range"]'},{selector:"form[data-required]"},{selector:"fieldset[role=group][data-open]"},{selector:"[data-clip]"},{selector:"button, a[class*='btn-']"}];function Fe(e){e.dataset.enhancedAccordion||(e.dataset.enhancedAccordion="true",e.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===e&&e.querySelectorAll(":scope > details[open]").forEach(n=>{n!==t.target&&(n.open=!1)})},!0))}function He(e){if(e.dataset.enhancedDropdown)return;e.dataset.enhancedDropdown="true";let t=e.lastElementChild;if(!t)return;let n=e.querySelector("[data-dropdown-toggle]")||e.querySelector("button");n&&!n.hasAttribute("type")&&n.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.tagName?.toLowerCase()==="menu"&&!t.hasAttribute("role")&&t.setAttribute("role","menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),n&&(n.setAttribute("aria-haspopup","true"),n.setAttribute("aria-controls",t.id),n.setAttribute("aria-expanded","false"));let o=()=>{let c=(e.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let d=e.getBoundingClientRect(),l=Math.max(0,window.innerHeight-d.bottom);return Math.max(0,d.top)>l?"up":"down"},s=()=>{e.dataset.dropdownDirection=o(),t.setAttribute("aria-hidden","false"),n?.setAttribute("aria-expanded","true")},i=()=>{t.setAttribute("aria-hidden","true"),n?.setAttribute("aria-expanded","false")},u=()=>{t.getAttribute("aria-hidden")==="false"?i():s()};n?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),u()}),document.addEventListener("click",c=>{e.contains(c.target)||i()}),e.addEventListener("keydown",c=>{c.key==="Escape"&&(i(),n?.focus())}),e.addEventListener("focusout",c=>{(!c.relatedTarget||!e.contains(c.relatedTarget))&&i()})}function We(e){if(e.dataset.enhancedToggle)return;e.dataset.enhancedToggle="true";let t=e.querySelector('input[type="checkbox"]');if(!t)return;e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.setAttribute("role","switch"),e.setAttribute("aria-checked",t.checked?"true":"false");let n=document.createElement("span");n.className="toggle-switch",n.setAttribute("role","presentation"),n.setAttribute("aria-hidden","true");let r=document.createElement("span");r.className="toggle-knob",n.appendChild(r),e.insertBefore(n,t.nextSibling);let o=()=>{e.setAttribute("aria-checked",t.checked?"true":"false")},s=()=>{t.disabled||(t.checked=!t.checked,o(),t.dispatchEvent(new Event("change",{bubbles:!0})))};e.addEventListener("click",i=>{i.preventDefault(),s()}),e.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),s())}),t.addEventListener("change",o)}function ze(e){if(e.dataset.enhancedRange)return;let t=e.closest("label"),n=t?.classList.contains("range-output"),r=e.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${r}-output`;if(e.id=r,n){let s=t.querySelector("span");if(s&&!s.classList.contains("range-output-wrapper")){let i=document.createElement("span");i.className="range-output-wrapper",i.style.display="flex",i.style.justifyContent="space-between",i.style.alignItems="center";let u=document.createElement("span");u.textContent=s.textContent,i.appendChild(u);let c=document.createElement("output");c.id=o,c.setAttribute("for",r),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=e.value,i.appendChild(c),s.textContent="",s.appendChild(i);let d=()=>{c.textContent=e.value};e.addEventListener("input",d)}}else{let s=e.closest(".range-container");s||(s=document.createElement("div"),s.className="range-container",e.parentNode?.insertBefore(s,e),s.appendChild(e)),s.style.position="relative";let i=document.createElement("output");i.id=o,i.setAttribute("for",r),i.className="range-bubble",i.setAttribute("aria-live","polite"),s.appendChild(i);let u=()=>{let l=parseFloat(e.min)||0,a=parseFloat(e.max)||100,m=parseFloat(e.value),h=(m-l)/(a-l);i.style.left=`calc(${h*100}% )`,i.textContent=String(m)},c=()=>i.classList.add("visible"),d=()=>i.classList.remove("visible");e.addEventListener("input",u),e.addEventListener("pointerdown",c),e.addEventListener("pointerup",d),e.addEventListener("pointerleave",d),e.addEventListener("focus",c),e.addEventListener("blur",d),u()}e.dataset.enhancedRange="1"}function Be(e){if(e.dataset.enhancedRequired)return;e.dataset.enhancedRequired="true";let t=n=>{let r=n.closest("label");if(!r||r.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",r.querySelector("span").appendChild(o);let s=n.closest("form");if(s&&!s.querySelector(".required-legend")){let i=document.createElement("small");i.classList.add("required-legend"),i.textContent="* Required fields",s.insertBefore(i,s.querySelector(".form-actions")||s.lastElementChild)}};e.querySelectorAll("[required]").forEach(n=>{t(n)})}function Ve(e){if(e.dataset.enhancedOpenGroup)return;e.dataset.enhancedOpenGroup="true",e.classList.add("flex","flex-wrap","buttons");let t=document.createElement("input");t.type="text",t.placeholder="Add item...",t.classList.add("input-text","input-sm"),t.style.width="auto";let n=e.querySelector('input[type="radio"], input[type="checkbox"]');e.appendChild(t),t.addEventListener("keydown",r=>{if(r.key==="Enter"||r.key==="Tab"){let o=t.value.trim();if(o){r.preventDefault();let s=n.type==="radio"?"radio":"checkbox",i=`open-group-${Math.random().toString(36).substring(2,11)}`,u=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let d=document.createElement("input");d.type=s,d.name=n.name||e.getAttribute("data-name")||"open-group",d.value=o,d.id=i,u.appendChild(c),u.appendChild(d),e.insertBefore(u,t),t.value=""}}else if(r.key==="Backspace"&&t.value===""){r.preventDefault();let o=e.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Ge(e){if(e.dataset.enhancedClip)return;e.dataset.enhancedClip="true",e.hasAttribute("tabindex")||e.setAttribute("tabindex","0"),e.hasAttribute("role")||e.setAttribute("role","button");let t=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("aria-expanded",r?"true":"false")},n=()=>{let r=e.getAttribute("data-clip-open")==="true";e.setAttribute("data-clip-open",r?"false":"true"),t()};e.addEventListener("click",r=>{r.defaultPrevented||n()}),e.addEventListener("keydown",r=>{(r.key===" "||r.key==="Enter")&&(r.preventDefault(),n())}),t()}function Ke(e){if(e.dataset.enhancedBtnWorking)return;e.dataset.enhancedBtnWorking="true";let t=null,n=!1;new MutationObserver(o=>{o.forEach(s=>{if(s.attributeName==="class"){let i=e.classList.contains("btn-working"),u=e.querySelector("pds-icon");if(i)if(u)t||(t=u.getAttribute("icon")),u.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),e.insertBefore(c,e.firstChild),n=!0}else s.oldValue?.includes("btn-working")&&u&&(n?(u.remove(),n=!1):t&&(u.setAttribute("icon",t),t=null))}})}).observe(e,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Qe=new Map([[".accordion",Fe],["nav[data-dropdown]",He],["label[data-toggle]",We],['input[type="range"]',ze],["form[data-required]",Be],["fieldset[role=group][data-open]",Ve],["[data-clip]",Ge],["button, a[class*='btn-']",Ke]]),ne=je.map(e=>({...e,run:Qe.get(e.selector)||(()=>{})}));var ve="pds",Ze=/^([a-z][a-z0-9+\-.]*:)?\/\//i,we=/^[a-z]:/i;function N(e=""){return e.endsWith("/")?e:`${e}/`}function Je(e="",t=ve){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Xe(e){return e.replace(/^\.\/+/,"")}function Ye(e){return we.test(e)?e.replace(we,"").replace(/^\/+/,""):e}function et(e){return e.startsWith("public/")?e.substring(7):e}function re(e,t={}){let n=t.segment||ve,r=t.defaultRoot||`/assets/${n}/`,o=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!o||typeof o!="string")return N(r);let s=o.trim();return s?(s=s.replace(/\\/g,"/"),s=Je(s,n),s=N(s),Ze.test(s)?s:(s=Xe(s),s=Ye(s),s.startsWith("/")||(s=et(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(i,u)=>u===0?i:"/")),N(s))):N(r)}var nt=/^[a-z][a-z0-9+\-.]*:\/\//i,j=(()=>{try{return import.meta.url}catch{return}})(),z=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function B(e,t={}){if(!e||nt.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!j)return null;try{return new URL(e,j).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||o():o()||r())||e}var Ee=(()=>{if(j)try{let e=new URL(j);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",j).href}catch{return}})(),Ae=!1;function Le(e){Ae||typeof document>"u"||(Ae=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function ie(e={},t={}){if(!t||typeof t!="object")return e;let n=Array.isArray(e)?[...e]:{...e};for(let[r,o]of Object.entries(t))o&&typeof o=="object"&&!Array.isArray(o)?n[r]=ie(n[r]&&typeof n[r]=="object"?n[r]:{},o):n[r]=o;return n}function oe(e=""){return String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function $(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=>$(n)).filter(n=>n!==void 0);let t={};for(let n in e)if(e.hasOwnProperty(n)){let r=e[n];if(typeof r!="function"){let o=$(r);o!==void 0&&(t[n]=o)}}return t}function Ce(e={},t={},{presets:n,defaultLog:r}){let o=typeof e=="object"&&("colors"in e||"typography"in e||"spatialRhythm"in e||"shape"in e||"behavior"in e||"layout"in e||"advanced"in e||"a11y"in e||"components"in e||"icons"in e),s=e&&e.enhancers;s&&!Array.isArray(s)&&(s=Object.values(s));let i=s??t.enhancers??[],u=e&&e.preset,c=e&&e.design,d=e&&e.icons&&typeof e.icons=="object"?e.icons:null,l="preset"in(e||{})||"design"in(e||{})||"enhancers"in(e||{}),a,m=null;if(l){let h=String(u||"default").toLowerCase(),w=n?.[h]||Object.values(n||{}).find(p=>oe(p.name)===h||String(p.name||"").toLowerCase()===h);if(!w)throw new Error(`PDS preset not found: "${u||"default"}"`);m={id:w.id||oe(w.name),name:w.name||w.id||String(h)};let v=structuredClone(w);if(c&&typeof c=="object"||d){let p=c?$(c):{},y=d?$(d):null,f=y?ie(p,{icons:y}):p;v=ie(v,structuredClone(f))}let{mode:g,autoDefine:x,applyGlobalStyles:M,manageTheme:E,themeStorageKey:k,preloadStyles:C,criticalLayers:q,managerURL:I,manager:H,preset:A,design:R,enhancers:O,log:S,...P}=e;a={...P,design:v,preset:m.name,log:S||r}}else if(o){let{log:h,...w}=e;a={design:structuredClone(w),log:h||r}}else{let h=n?.default||Object.values(n||{}).find(w=>oe(w.name)==="default");if(!h)throw new Error("PDS default preset not available");m={id:h.id||"default",name:h.name||"Default"},a={design:structuredClone(h),preset:m.name,log:r}}return{generatorConfig:a,enhancers:i,presetInfo:m}}function De({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let o="light",s=null;if(e&&typeof window<"u"){try{s=localStorage.getItem(t)||null}catch{s=null}try{n?.(s),r?.(s)}catch{}s?s==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=s:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:s}}function ae(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&Ee&&(r=Ee),z(B(r))}async function ke(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:o=null,enhancers:s=[],autoDefineOverrides:i=null,autoDefinePreferModule:u=!0}=e,c=(()=>{let l=new Map;return(t||[]).forEach(a=>l.set(a.selector,a)),(s||[]).forEach(a=>l.set(a.selector,a)),Array.from(l.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let l=null;try{let g=await Promise.resolve().then(()=>(Se(),xe));l=g?.AutoDefiner||g?.default?.AutoDefiner||g?.default||null}catch(g){console.warn("AutoDefiner not available:",g?.message||g)}let a=g=>{switch(g){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${g}.js`}},{mapper:m,...h}=i&&typeof i=="object"?i:{},v={baseURL:n&&z(B(n,{preferModule:u})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(g,x)=>{if(typeof g=="string"&&g.startsWith("pds-")){let E=["pds-form","pds-drawer"].includes(g),k=x?.message?.includes("#pds/lit")||x?.message?.includes("Failed to resolve module specifier");E&&k?console.error(`\u274C PDS component <${g}> requires Lit but #pds/lit is not in import map.
|
|
32
|
+
See: https://github.com/Pure-Web-Foundation/pure-ds/blob/main/readme.md#lit-components-not-working`):console.warn(`\u26A0\uFE0F PDS component <${g}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${g}>:`,x)},...h,mapper:g=>{if(customElements.get(g))return null;if(typeof o=="function")try{let x=o(g);return x===void 0?a(g):x}catch(x){return console.warn("Custom autoDefine.mapper error; falling back to default:",x?.message||x),a(g)}return a(g)}};l&&(d=new l(v),r.length>0&&typeof l.define=="function"&&await l.define(...r,{baseURL:n,mapper:v.mapper,onError:v.onError}))}return{autoDefiner:d,mergedEnhancers:c}}var ue=class extends EventTarget{},b=new ue;b.initializing=!1;b.currentPreset=null;b.debug=!1;var Ue=(e="")=>String(e).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),G=function(e="log",t,...n){let r=!!(b.registry&&!b.registry.isLive),o=(this?.debug||this?.design?.debug||b.debug||!1)===!0;if(r){if(!b.debug)return}else if(!o&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};async function rt(e,t={}){if(t?.runtimeConfig===!1||typeof fetch!="function")return null;let n=t?.runtimeConfigURL||`${e}pds-runtime-config.json`;try{let r=await fetch(n,{cache:"no-store"});return r.ok?await r.json():null}catch{return null}}b.registry=U;b.enums=me;b.adoptLayers=he;b.adoptPrimitives=pe;b.createStylesheet=fe;b.isLiveMode=()=>U.isLive;b.ask=be;b.toast=D;b.common=ee;b.AutoComplete=null;b.loadAutoComplete=async()=>{if(b.AutoComplete)return b.AutoComplete;try{let e=await Promise.resolve().then(()=>(_e(),Pe)),t=e?.AutoComplete||e?.default||e;if(t)return b.AutoComplete=t,t}catch(e){G("warn","PDS.loadAutoComplete failed",e)}return null};function qe(e){let t=typeof CustomEvent=="function";try{let n=t?new CustomEvent("pds:ready",{detail:e}):new Event("pds:ready");b.dispatchEvent(n)}catch{}if(typeof document<"u")if(t){let n={detail:e,bubbles:!0,composed:!0};try{document.dispatchEvent(new CustomEvent("pds:ready",n))}catch{}try{document.dispatchEvent(new CustomEvent("pds-ready",n))}catch{}}else{try{document.dispatchEvent(new Event("pds:ready"))}catch{}try{document.dispatchEvent(new Event("pds-ready"))}catch{}}}typeof window<"u"&&(window.PDS=b);var de="pure-ds-theme",T=null,F=null;function K(e){try{if(typeof document>"u")return;let t="light";e?e==="system"?t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":t=e:t=typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",document.documentElement.setAttribute("data-theme",t)}catch{}}function Q(e){try{if(T&&F){try{typeof T.removeEventListener=="function"?T.removeEventListener("change",F):typeof T.removeListener=="function"&&T.removeListener(F)}catch{}T=null,F=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let o=r?.matches===void 0?t.matches:r.matches;try{let s=o?"dark":"light";document.documentElement.setAttribute("data-theme",s),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};T=t,F=n,typeof t.addEventListener=="function"?t.addEventListener("change",n):typeof t.addListener=="function"&&t.addListener(n)}}catch{}}Object.defineProperty(b,"theme",{get(){try{return typeof window>"u"?null:localStorage.getItem(de)||null}catch{return null}},set(e){try{if(typeof window>"u")return;e==null?localStorage.removeItem(de):localStorage.setItem(de,e),K(e),Q(e),b.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});b.defaultEnhancers=ne;async function st(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return ot(r);let o=ae(r,{resolvePublicAssetURL:re}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",o).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:i}=await import(s);return i(b,r,{emitReady:qe,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q})}b.start=st;async function ot(e){if(!e||typeof e!="object")throw new Error("PDS.start({ mode: 'static', ... }) requires a valid configuration object");let t=e.applyGlobalStyles??!0,n=e.manageTheme??!0,r=e.themeStorageKey??"pure-ds-theme",o=e.staticPaths??{},s=ae(e,{resolvePublicAssetURL:re}),i=e&&e.autoDefine||null,u;i&&i.baseURL?u=z(B(i.baseURL,{preferModule:!1})):u=`${s}components/`;let c=i&&Array.isArray(i.predefine)&&i.predefine||[],d=i&&typeof i.mapper=="function"&&i.mapper||null;try{Le(b);let{resolvedTheme:l}=De({manageTheme:n,themeStorageKey:r,applyResolvedTheme:K,setupSystemListenerIfNeeded:Q}),a=await rt(s,e),m=a?.config?.design||a?.design||null,h=a?.config?.preset||a?.preset||"default",w=a?.presetId||Ue(h)||"default",v=m?{[String(w).toLowerCase()]:m,...String(w).toLowerCase()!=="default"?{default:m}:{}}:null,g=e?.design&&typeof e.design=="object"?$(e.design):null,x=Ue(e?.preset||"default")||"default",M=g?{[String(x).toLowerCase()]:g,...String(x).toLowerCase()!=="default"?{default:g}:{}}:null,E=v||e?.presets||M||{};if(!Object.keys(E||{}).length)throw new Error("PDS static mode requires preset data. Run pds:build or provide config.presets/config.design.");let k=a?.config?{...a.config,...e,preset:e?.preset||w,design:g||m||a?.config?.design}:e,C=Ce(k,{},{presets:E,defaultLog:G}),q=C.enhancers,I={tokens:`${s}styles/pds-tokens.css.js`,primitives:`${s}styles/pds-primitives.css.js`,components:`${s}styles/pds-components.css.js`,utilities:`${s}styles/pds-utilities.css.js`,styles:`${s}styles/pds-styles.css.js`},H=a?.paths||{};if(o={...I,...H,...o},b.registry.setStaticMode(o),t&&typeof document<"u")try{let S=await b.registry.getStylesheet("styles");if(S){S._pds=!0;let P=(document.adoptedStyleSheets||[]).filter(p=>p._pds!==!0);document.adoptedStyleSheets=[...P,S]}}catch(S){G.call(b,"warn","Failed to apply static styles:",S)}let A=null,R=[];try{let S=await ke({autoDefineBaseURL:u,autoDefinePreload:c,autoDefineMapper:d,enhancers:q,autoDefineOverrides:i||null,autoDefinePreferModule:!(i&&i.baseURL)},{baseEnhancers:ne});A=S.autoDefiner,R=S.mergedEnhancers||[]}catch(S){G.call(b,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",S)}let O=$(e);return b.currentConfig=Object.freeze({mode:"static",...structuredClone(O),design:structuredClone(C.generatorConfig.design),preset:C.generatorConfig.preset,theme:l,enhancers:R}),qe({mode:"static",config:C.generatorConfig,theme:l,autoDefiner:A}),{config:C.generatorConfig,theme:l,autoDefiner:A}}catch(l){throw b.dispatchEvent(new CustomEvent("pds:error",{detail:{error:l}})),l}}var Rt=K,$t=Q;export{b as PDS,Rt as applyResolvedTheme,$t as setupSystemListenerIfNeeded};
|
|
@@ -155,6 +155,12 @@ export function normalizeInitConfig(inputConfig = {}, options = {}, { presets, d
|
|
|
155
155
|
// New API: { preset?: string, design?: object }
|
|
156
156
|
const presetId = inputConfig && inputConfig.preset;
|
|
157
157
|
const designOverrides = inputConfig && inputConfig.design;
|
|
158
|
+
const iconOverrides =
|
|
159
|
+
inputConfig &&
|
|
160
|
+
inputConfig.icons &&
|
|
161
|
+
typeof inputConfig.icons === "object"
|
|
162
|
+
? inputConfig.icons
|
|
163
|
+
: null;
|
|
158
164
|
|
|
159
165
|
const hasNewShape =
|
|
160
166
|
"preset" in (inputConfig || {}) ||
|
|
@@ -184,10 +190,24 @@ export function normalizeInitConfig(inputConfig = {}, options = {}, { presets, d
|
|
|
184
190
|
|
|
185
191
|
// Merge preset with design overrides
|
|
186
192
|
let mergedDesign = structuredClone(found);
|
|
187
|
-
if (
|
|
193
|
+
if (
|
|
194
|
+
(designOverrides && typeof designOverrides === "object") ||
|
|
195
|
+
iconOverrides
|
|
196
|
+
) {
|
|
188
197
|
// Strip functions before cloning to avoid DataCloneError
|
|
189
|
-
const cloneableDesign =
|
|
190
|
-
|
|
198
|
+
const cloneableDesign = designOverrides
|
|
199
|
+
? stripFunctions(designOverrides)
|
|
200
|
+
: {};
|
|
201
|
+
const cloneableIcons = iconOverrides
|
|
202
|
+
? stripFunctions(iconOverrides)
|
|
203
|
+
: null;
|
|
204
|
+
const mergedOverrides = cloneableIcons
|
|
205
|
+
? __deepMerge(cloneableDesign, { icons: cloneableIcons })
|
|
206
|
+
: cloneableDesign;
|
|
207
|
+
mergedDesign = __deepMerge(
|
|
208
|
+
mergedDesign,
|
|
209
|
+
structuredClone(mergedOverrides)
|
|
210
|
+
);
|
|
191
211
|
}
|
|
192
212
|
|
|
193
213
|
// Build structured config with design nested
|