@pure-ds/core 0.7.16 → 0.7.18

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 (32) hide show
  1. package/.cursorrules +22 -11
  2. package/.github/copilot-instructions.md +22 -11
  3. package/custom-elements.json +38 -0
  4. package/dist/types/pds.d.ts +0 -1
  5. package/dist/types/public/assets/js/pds-manager.d.ts +44 -44
  6. package/dist/types/public/assets/js/pds-manager.d.ts.map +1 -1
  7. package/dist/types/public/assets/pds/components/pds-form.d.ts.map +1 -1
  8. package/dist/types/public/assets/pds/components/pds-omnibox.d.ts.map +1 -1
  9. package/dist/types/public/assets/pds/components/pds-treeview.d.ts +9 -0
  10. package/dist/types/public/assets/pds/components/pds-treeview.d.ts.map +1 -1
  11. package/dist/types/src/js/pds-core/pds-live.d.ts.map +1 -1
  12. package/dist/types/src/js/pds-core/pds-runtime.d.ts.map +1 -1
  13. package/package.json +1 -1
  14. package/packages/pds-cli/bin/pds-mcp-health.js +2 -1
  15. package/packages/pds-cli/lib/pds-mcp-core.js +95 -3
  16. package/packages/pds-cli/lib/pds-mcp-eval-cases.json +13 -0
  17. package/public/assets/js/app.js +4 -4
  18. package/public/assets/js/pds-manager.js +144 -162
  19. package/public/assets/js/pds.js +2 -2
  20. package/public/assets/pds/components/pds-calendar.js +19 -11
  21. package/public/assets/pds/components/pds-form.js +85 -2
  22. package/public/assets/pds/components/pds-omnibox.js +9 -6
  23. package/public/assets/pds/components/pds-treeview.js +321 -24
  24. package/public/assets/pds/core/pds-manager.js +144 -162
  25. package/public/assets/pds/core.js +2 -2
  26. package/public/assets/pds/vscode-custom-data.json +4 -0
  27. package/readme.md +12 -59
  28. package/src/js/pds-core/pds-generator.js +7 -7
  29. package/src/js/pds-core/pds-live.js +1 -13
  30. package/src/js/pds-core/pds-ontology.js +2 -2
  31. package/src/js/pds-core/pds-runtime.js +18 -2
  32. package/src/js/pds.d.ts +0 -1
@@ -1,2 +1,2 @@
1
- var De=Object.defineProperty;var Pe=(e,t)=>{for(var n in t)De(e,n,{get:t[n],enumerable:!0})};var Y=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"}},M=new Y;async function ue(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await M.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let c=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${c}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function de(e,t=["primitives"],n=[],r=null){try{let s=(await Promise.all(t.map(async l=>{if(r)switch(l){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return M.getStylesheet(l)}))).filter(l=>l!==null);e.adoptedStyleSheets=[...s,...n]}catch(c){let s=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${s}> failed to adopt layers:`,c),e.adoptedStyleSheets=n}}function pe(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var fe={FontWeights:{light:300,normal:400,medium:500,semibold:600,bold:700},LineHeights:{tight:1.25,normal:1.5,relaxed:1.75},BorderWidths:{hairline:.5,thin:1,medium:2,thick:3},RadiusSizes:{none:0,small:4,medium:8,large:16,xlarge:24,xxlarge:32},ShadowDepths:{none:"none",light:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",medium:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",deep:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",extreme:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},TransitionSpeeds:{fast:150,normal:250,slow:350},AnimationEasings:{linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",bounce:"cubic-bezier(0.68, -0.55, 0.265, 1.55)"},TouchTargetSizes:{compact:36,standard:44,comfortable:48,spacious:56},LinkStyles:{inline:"inline",block:"block",button:"button"},FocusStyles:{ring:"ring",outline:"outline",border:"border",glow:"glow"},TabSizes:{compact:2,standard:4,wide:8},SelectIcons:{chevron:"chevron",arrow:"arrow",caret:"caret",none:"none"},IconSizes:{xs:16,sm:20,md:24,lg:32,xl:48,"2xl":64,"3xl":96}};var ee={};Pe(ee,{deepMerge:()=>me,fragmentFromTemplateLike:()=>Me,isObject:()=>I,parseHTML:()=>Z});function I(e){return e&&typeof e=="object"&&!Array.isArray(e)}function me(e,t){let n={...e};return I(e)&&I(t)&&Object.keys(t).forEach(r=>{I(t[r])?r in e?n[r]=me(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function Me(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,c=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let a=0;a<t.length;a+=1){let w=t[a]??"",m=w.match(s);if(m&&a<n.length){let S=m[2].slice(1),L=`pds-val-${a}`;w=w.replace(s,`$1data-pds-prop="${S}:${L}"`),r.add(a)}c.push(w),a<n.length&&!r.has(a)&&c.push(`<!--pds-val-${a}-->`)}let l=document.createElement("template");l.innerHTML=c.join("");let g=(a,w)=>{let m=a.parentNode;if(!m)return;if(w==null){m.removeChild(a);return}let E=S=>{if(S!=null){if(S instanceof Node){m.insertBefore(S,a);return}if(Array.isArray(S)){S.forEach(L=>E(L));return}m.insertBefore(document.createTextNode(String(S)),a)}};E(w),m.removeChild(a)},b=document.createTreeWalker(l.content,NodeFilter.SHOW_COMMENT),h=[];for(;b.nextNode();){let a=b.currentNode;a?.nodeValue?.startsWith("pds-val-")&&h.push(a)}return h.forEach(a=>{let w=Number(a.nodeValue.replace("pds-val-",""));g(a,n[w])}),l.content.querySelectorAll("*").forEach(a=>{let w=a.getAttribute("data-pds-prop");if(!w)return;let[m,E]=w.split(":"),S=Number(String(E).replace("pds-val-",""));m&&Number.isInteger(S)&&(a[m]=n[S]),a.removeAttribute("data-pds-prop")}),l.content}function Z(e){return new DOMParser().parseFromString(e,"text/html").body.childNodes}var ye="pds",ke=/^([a-z][a-z0-9+\-.]*:)?\/\//i,he=/^[a-z]:/i;function U(e=""){return e.endsWith("/")?e:`${e}/`}function Te(e="",t=ye){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Ue(e){return e.replace(/^\.\/+/,"")}function Ce(e){return he.test(e)?e.replace(he,"").replace(/^\/+/,""):e}function je(e){return e.startsWith("public/")?e.substring(7):e}function N(e,t={}){let n=t.segment||ye,r=t.defaultRoot||`/assets/${n}/`,c=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!c||typeof c!="string")return U(r);let s=c.trim();return s?(s=s.replace(/\\/g,"/"),s=Te(s,n),s=U(s),ke.test(s)?s:(s=Ue(s),s=Ce(s),s.startsWith("/")||(s=je(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(l,g)=>g===0?l:"/")),U(s))):U(r)}async function $e(...e){let t={};e.length&&typeof e[e.length-1]=="object"&&(t=e.pop()||{});let n=e,{baseURL:r,mapper:c=h=>`${h}.js`,onError:s=(h,i)=>console.error(`[defineWebComponents] ${h}:`,i)}=t,l=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),g=h=>h.toLowerCase().replace(/(^|-)([a-z])/g,(i,a,w)=>w.toUpperCase()),b=async h=>{try{if(customElements.get(h))return{tag:h,status:"already-defined"};let i=c(h),w=await import(i instanceof URL?i.href:new URL(i,l).href),m=w?.default??w?.[g(h)];if(!m){if(customElements.get(h))return{tag:h,status:"self-defined"};throw new Error(`No export found for ${h}. Expected default export or named export "${g(h)}".`)}return customElements.get(h)?{tag:h,status:"race-already-defined"}:(customElements.define(h,m),{tag:h,status:"defined"})}catch(i){throw s(h,i),i}};return Promise.all(n.map(b))}var z=class{constructor(t={}){let{baseURL:n,mapper:r,onError:c,predicate:s=()=>!0,attributeModule:l="data-module",root:g=document,scanExisting:b=!0,debounceMs:h=16,observeShadows:i=!0,enhancers:a=[],patchAttachShadow:w=!0}=t,m=new Set,E=new Set,S=new Set,L=new Map,R=new WeakMap,_=new WeakMap,p=0,y=!1,A=null,O=u=>{if(!u||!a.length)return;let f=_.get(u);f||(f=new Set,_.set(u,f));for(let d of a)if(!(!d.selector||!d.run)&&!f.has(d.selector))try{u.matches&&u.matches(d.selector)&&(d.run(u),f.add(d.selector))}catch(v){console.warn(`[AutoDefiner] Error applying enhancer for selector "${d.selector}":`,v)}},T=(u,f)=>{if(!y&&!(!u||!u.includes("-"))&&!customElements.get(u)&&!E.has(u)&&!S.has(u)){if(f&&f.getAttribute){let d=f.getAttribute(l);d&&!L.has(u)&&L.set(u,d)}m.add(u),xe()}},xe=()=>{p||(p=setTimeout(ie,h))},D=u=>{if(u){if(u.nodeType===1){let f=u,d=f.tagName?.toLowerCase();d&&d.includes("-")&&!customElements.get(d)&&s(d,f)&&T(d,f),O(f),i&&f.shadowRoot&&X(f.shadowRoot)}u.querySelectorAll&&u.querySelectorAll("*").forEach(f=>{let d=f.tagName?.toLowerCase();d&&d.includes("-")&&!customElements.get(d)&&s(d,f)&&T(d,f),O(f),i&&f.shadowRoot&&X(f.shadowRoot)})}},X=u=>{if(!u||R.has(u))return;D(u);let f=new MutationObserver(d=>{for(let v of d)v.addedNodes?.forEach(P=>{D(P)}),v.type==="attributes"&&v.target&&D(v.target)});f.observe(u,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[l,...a.map(d=>d.selector).filter(d=>d.startsWith("data-"))]}),R.set(u,f)};async function ie(){if(clearTimeout(p),p=0,!m.size)return;let u=Array.from(m);m.clear(),u.forEach(f=>E.add(f));try{let f=d=>L.get(d)??(r?r(d):`${d}.js`);await $e(...u,{baseURL:n,mapper:f,onError:(d,v)=>{S.add(d),c?.(d,v)}})}catch{}finally{u.forEach(f=>E.delete(f))}}let ce=g===document?document.documentElement:g,le=new MutationObserver(u=>{for(let f of u)f.addedNodes?.forEach(d=>{D(d)}),f.type==="attributes"&&f.target&&D(f.target)});if(le.observe(ce,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[l,...a.map(u=>u.selector).filter(u=>u.startsWith("data-"))]}),i&&w&&Element.prototype.attachShadow){let u=Element.prototype.attachShadow;Element.prototype.attachShadow=function(d){let v=u.call(this,d);if(d&&d.mode==="open"){X(v);let P=this.tagName?.toLowerCase();P&&P.includes("-")&&!customElements.get(P)&&T(P,this)}return v},A=()=>Element.prototype.attachShadow=u}return b&&D(ce),{stop(){y=!0,le.disconnect(),A&&A(),p&&(clearTimeout(p),p=0),R.forEach(u=>u.disconnect())},flush:ie}}static async define(...t){let n={};t.length&&typeof t[t.length-1]=="object"&&(n=t.pop()||{});let r=t,{baseURL:c,mapper:s=i=>`${i}.js`,onError:l=(i,a)=>console.error(`[defineWebComponents] ${i}:`,a)}=n,g=c?new URL(c,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),b=i=>i.toLowerCase().replace(/(^|-)([a-z])/g,(a,w,m)=>m.toUpperCase()),h=async i=>{try{if(customElements.get(i))return{tag:i,status:"already-defined"};let a=s(i),m=await import(a instanceof URL?a.href:new URL(a,g).href),E=m?.default??m?.[b(i)];if(!E){if(customElements.get(i))return{tag:i,status:"self-defined"};throw new Error(`No export found for ${i}. Expected default export or named export "${b(i)}".`)}return customElements.get(i)?{tag:i,status:"race-already-defined"}:(customElements.define(i,E),{tag:i,status:"defined"})}catch(a){throw l(i,a),a}};return Promise.all(r.map(h))}};var Oe=/^[a-z][a-z0-9+\-.]*:\/\//i,C=(()=>{try{return import.meta.url}catch{return}})(),F=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function W(e,t={}){if(!e||Oe.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!C)return null;try{return new URL(e,C).href}catch{return null}},c=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||c():c()||r())||e}var we=(()=>{if(C)try{let e=new URL(C);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",C).href}catch{return}})(),Se=!1;function ge(e){Se||typeof document>"u"||(Se=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Ee({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let c="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"?c=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":c=s:c=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:c,storedTheme:s}}function B(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&we&&(r=we),F(W(r))}async function be(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:c=null,enhancers:s=[],autoDefineOverrides:l=null,autoDefinePreferModule:g=!0}=e,b=(()=>{let i=new Map;return(t||[]).forEach(a=>i.set(a.selector,a)),(s||[]).forEach(a=>i.set(a.selector,a)),Array.from(i.values())})(),h=null;if(typeof window<"u"&&typeof document<"u"){let i=z,a=p=>{switch(p){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${p}.js`}},{mapper:w,enhancers:m,...E}=l&&typeof l=="object"?l:{},S=m?Array.isArray(m)?m:typeof m=="object"?Object.values(m):[]:[],L=(()=>{let p=new Map;return(b||[]).forEach(y=>{y?.selector&&p.set(y.selector,y)}),(S||[]).forEach(y=>{if(!y?.selector)return;let A=p.get(y.selector)||null;p.set(y.selector,{...A||{},...y,run:typeof y?.run=="function"?y.run:A?.run})}),Array.from(p.values())})(),_={baseURL:n&&F(W(n,{preferModule:g})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:L,onError:(p,y)=>{if(typeof p=="string"&&p.startsWith("pds-")){let O=["pds-form","pds-drawer"].includes(p),T=y?.message?.includes("#pds/lit")||y?.message?.includes("Failed to resolve module specifier");O&&T?console.error(`\u274C PDS component <${p}> 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 <${p}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${p}>:`,y)},...E,mapper:p=>{if(customElements.get(p))return null;if(typeof c=="function")try{let y=c(p);return y===void 0?a(p):y}catch(y){return console.warn("Custom autoDefine.mapper error; falling back to default:",y?.message||y),a(p)}return a(p)}};h=new i(_),r.length>0&&typeof i.define=="function"&&await i.define(...r,{baseURL:n,mapper:_.mapper,onError:_.onError})}return{autoDefiner:h,mergedEnhancers:b}}var te=["light","dark"],ne=new Set(te);function Ie(e){let n=(Array.isArray(e?.themes)?e.themes.map(r=>String(r).toLowerCase()):te).filter(r=>ne.has(r));return n.length?n:te}function re(e,{preferDocument:t=!0}={}){let n=String(e||"").toLowerCase();if(ne.has(n))return n;if(t&&typeof document<"u"){let r=document.documentElement?.getAttribute("data-theme");if(ne.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=re(t);return Ie(e).includes(n)}var oe=class extends EventTarget{},o=new oe;o.initializing=!1;o.currentPreset=null;o.debug=!1;var q=null,V=null,H=null,K=null;function G(e,t){return t&&typeof t=="string"?t:`${B(o.currentConfig||{},{resolvePublicAssetURL:N})}core/${e}`}async function Ne(){return Array.isArray(o.defaultEnhancers)&&o.defaultEnhancers.length>0?o.defaultEnhancers:(K||(K=import(G("pds-enhancers.js",o.currentConfig?.enhancersURL)).then(t=>{let n=Array.isArray(t?.defaultPDSEnhancers)?t.defaultPDSEnhancers:[];return o.defaultEnhancers=n,n}).catch(t=>{throw K=null,t})),K)}async function ze(){return typeof o.ask=="function"&&o.ask!==Ae?o.ask:(V||(V=import(G("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 V=null,t})),V)}async function $(){return typeof o.toast=="function"&&o.toast!==k?o.toast:(H||(H=import(G("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 H=null,t})),H)}async function Ae(...e){return(await ze())(...e)}async function k(...e){return(await $())(...e)}k.success=async(...e)=>(await $()).success(...e);k.error=async(...e)=>(await $()).error(...e);k.warning=async(...e)=>(await $()).warning(...e);k.info=async(...e)=>(await $()).info(...e);var ve=function(e="log",t,...n){let r=!!(o.registry&&!o.registry.isLive),c=(this?.debug||this?.design?.debug||o.debug||!1)===!0;if(r){if(!o.debug)return}else if(!c&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};function ae(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=>ae(n)).filter(n=>n!==void 0);let t={};for(let[n,r]of Object.entries(e)){let c=ae(r);c!==void 0&&(t[n]=c)}return t}async function Fe(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=M;o.enums=fe;o.adoptLayers=de;o.adoptPrimitives=ue;o.parse=Z;o.createStylesheet=pe;o.isLiveMode=()=>M.isLive;o.ask=Ae;o.toast=k;o.common=ee;o.AutoComplete=null;o.loadAutoComplete=async()=>{if(o.AutoComplete&&typeof o.AutoComplete.connect=="function")return o.AutoComplete;let e=G("pds-autocomplete.js",o.currentConfig?.autoCompleteURL);return q||(q=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 q=null,t})),q};function _e(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 Re(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 se="pure-ds-theme",x=null,j=null;function Q(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 J(e){try{if(x&&j){try{typeof x.removeEventListener=="function"?x.removeEventListener("change",j):typeof x.removeListener=="function"&&x.removeListener(j)}catch{}x=null,j=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let c=r?.matches===void 0?t.matches:r.matches;try{let s=c?"dark":"light";document.documentElement.setAttribute("data-theme",s),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};x=t,j=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(se)||null}catch{return null}},set(e){try{if(typeof window>"u")return;let t=o.currentConfig?.design||null,n=re(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(se):localStorage.setItem(se,e),Q(e),J(e),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});o.defaultEnhancers=[];async function We(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return Be(r);let c=B(r,{resolvePublicAssetURL:N}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",c).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:l}=await import(s);return l(o,r,{emitReady:_e,emitConfigChanged:Re,applyResolvedTheme:Q,setupSystemListenerIfNeeded:J})}o.start=We;async function Be(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",c=e.staticPaths??{},s=B(e,{resolvePublicAssetURL:N}),l=e&&e.autoDefine||null,g;l&&l.baseURL?g=F(W(l.baseURL,{preferModule:!1})):g=`${s}components/`;let b=l&&Array.isArray(l.predefine)&&l.predefine||[],h=l&&typeof l.mapper=="function"&&l.mapper||null;try{ge(o);let{resolvedTheme:i}=Ee({manageTheme:n,themeStorageKey:r,applyResolvedTheme:Q,setupSystemListenerIfNeeded:J}),a=await Fe(s,e),w=Array.isArray(e?.enhancers)?e.enhancers:e?.enhancers&&typeof e.enhancers=="object"?Object.values(e.enhancers):[],m=a?.config?{...a.config,...e,design:e?.design||a.config.design,preset:e?.preset||a.config.preset}:{...e},E={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`},S=a?.paths||{};if(c={...E,...S,...c},o.registry.setStaticMode(c),t&&typeof document<"u")try{let p=await o.registry.getStylesheet("styles");if(p){p._pds=!0;let y=(document.adoptedStyleSheets||[]).filter(A=>A._pds!==!0);document.adoptedStyleSheets=[...y,p],Re({mode:"static",source:"static:styles-applied"})}}catch(p){ve.call(o,"warn","Failed to apply static styles:",p)}let L=null,R=[];try{let p=await Ne(),y=await be({autoDefineBaseURL:g,autoDefinePreload:b,autoDefineMapper:h,enhancers:w,autoDefineOverrides:l||null,autoDefinePreferModule:!(l&&l.baseURL)},{baseEnhancers:p});L=y.autoDefiner,R=y.mergedEnhancers||[]}catch(p){ve.call(o,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",p)}let _=ae(e);return o.currentConfig=Object.freeze({mode:"static",...structuredClone(_),design:structuredClone(m.design||{}),preset:m.preset,theme:i,enhancers:R}),_e({mode:"static",config:m,theme:i,autoDefiner:L}),{config:m,theme:i,autoDefiner:L}}catch(i){throw o.dispatchEvent(new CustomEvent("pds:error",{detail:{error:i}})),i}}var at=Q,it=J;export{o as PDS,at as applyResolvedTheme,it as setupSystemListenerIfNeeded};
1
+ var De=Object.defineProperty;var Pe=(e,t)=>{for(var n in t)De(e,n,{get:t[n],enumerable:!0})};var Y=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"}},M=new Y;async function de(e,t=[],n=null){try{let r=n?.primitivesStylesheet?n.primitivesStylesheet:await M.getStylesheet("primitives");e.adoptedStyleSheets=[r,...t]}catch(r){let c=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${c}> failed to adopt primitives:`,r),e.adoptedStyleSheets=t}}async function ue(e,t=["primitives"],n=[],r=null){let c=Array.isArray(n)?n.filter(Boolean):[];if(c.length){let l=(Array.isArray(e.adoptedStyleSheets)?e.adoptedStyleSheets:[]).filter(w=>!c.includes(w));e.adoptedStyleSheets=[...l,...c]}try{let l=(await Promise.all(t.map(async w=>{if(r)switch(w){case"tokens":return r.tokensStylesheet;case"primitives":return r.primitivesStylesheet;case"components":return r.componentsStylesheet;case"utilities":return r.utilitiesStylesheet;default:break}return M.getStylesheet(w)}))).filter(w=>w!==null);e.adoptedStyleSheets=[...l,...c]}catch(s){let l=e.host?.tagName?.toLowerCase()||"unknown";console.error(`[PDS Adopter] <${l}> failed to adopt layers:`,s),e.adoptedStyleSheets=c}}function pe(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}var fe={FontWeights:{light:300,normal:400,medium:500,semibold:600,bold:700},LineHeights:{tight:1.25,normal:1.5,relaxed:1.75},BorderWidths:{hairline:.5,thin:1,medium:2,thick:3},RadiusSizes:{none:0,small:4,medium:8,large:16,xlarge:24,xxlarge:32},ShadowDepths:{none:"none",light:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",medium:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",deep:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",extreme:"0 25px 50px -12px rgba(0, 0, 0, 0.25)"},TransitionSpeeds:{fast:150,normal:250,slow:350},AnimationEasings:{linear:"linear",ease:"ease","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out",bounce:"cubic-bezier(0.68, -0.55, 0.265, 1.55)"},TouchTargetSizes:{compact:36,standard:44,comfortable:48,spacious:56},LinkStyles:{inline:"inline",block:"block",button:"button"},FocusStyles:{ring:"ring",outline:"outline",border:"border",glow:"glow"},TabSizes:{compact:2,standard:4,wide:8},SelectIcons:{chevron:"chevron",arrow:"arrow",caret:"caret",none:"none"},IconSizes:{xs:16,sm:20,md:24,lg:32,xl:48,"2xl":64,"3xl":96}};var ee={};Pe(ee,{deepMerge:()=>me,fragmentFromTemplateLike:()=>Me,isObject:()=>I,parseHTML:()=>Z});function I(e){return e&&typeof e=="object"&&!Array.isArray(e)}function me(e,t){let n={...e};return I(e)&&I(t)&&Object.keys(t).forEach(r=>{I(t[r])?r in e?n[r]=me(e[r],t[r]):Object.assign(n,{[r]:t[r]}):Object.assign(n,{[r]:t[r]})}),n}function Me(e){let t=Array.isArray(e?.strings)?e.strings:[],n=Array.isArray(e?.values)?e.values:[],r=new Set,c=[],s=/(\s)(\.[\w-]+)=\s*$/;for(let a=0;a<t.length;a+=1){let S=t[a]??"",m=S.match(s);if(m&&a<n.length){let g=m[2].slice(1),L=`pds-val-${a}`;S=S.replace(s,`$1data-pds-prop="${g}:${L}"`),r.add(a)}c.push(S),a<n.length&&!r.has(a)&&c.push(`<!--pds-val-${a}-->`)}let l=document.createElement("template");l.innerHTML=c.join("");let w=(a,S)=>{let m=a.parentNode;if(!m)return;if(S==null){m.removeChild(a);return}let E=g=>{if(g!=null){if(g instanceof Node){m.insertBefore(g,a);return}if(Array.isArray(g)){g.forEach(L=>E(L));return}m.insertBefore(document.createTextNode(String(g)),a)}};E(S),m.removeChild(a)},b=document.createTreeWalker(l.content,NodeFilter.SHOW_COMMENT),h=[];for(;b.nextNode();){let a=b.currentNode;a?.nodeValue?.startsWith("pds-val-")&&h.push(a)}return h.forEach(a=>{let S=Number(a.nodeValue.replace("pds-val-",""));w(a,n[S])}),l.content.querySelectorAll("*").forEach(a=>{let S=a.getAttribute("data-pds-prop");if(!S)return;let[m,E]=S.split(":"),g=Number(String(E).replace("pds-val-",""));m&&Number.isInteger(g)&&(a[m]=n[g]),a.removeAttribute("data-pds-prop")}),l.content}function Z(e){return new DOMParser().parseFromString(e,"text/html").body.childNodes}var ye="pds",ke=/^([a-z][a-z0-9+\-.]*:)?\/\//i,he=/^[a-z]:/i;function U(e=""){return e.endsWith("/")?e:`${e}/`}function Te(e="",t=ye){let n=e.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(n)?n:`${n}/${t}`}function Ue(e){return e.replace(/^\.\/+/,"")}function Ce(e){return he.test(e)?e.replace(he,"").replace(/^\/+/,""):e}function je(e){return e.startsWith("public/")?e.substring(7):e}function N(e,t={}){let n=t.segment||ye,r=t.defaultRoot||`/assets/${n}/`,c=e?.public&&e.public?.root||e?.static&&e.static?.root||null;if(!c||typeof c!="string")return U(r);let s=c.trim();return s?(s=s.replace(/\\/g,"/"),s=Te(s,n),s=U(s),ke.test(s)?s:(s=Ue(s),s=Ce(s),s.startsWith("/")||(s=je(s),s.startsWith("/")||(s=`/${s}`),s=s.replace(/\/+/g,(l,w)=>w===0?l:"/")),U(s))):U(r)}async function $e(...e){let t={};e.length&&typeof e[e.length-1]=="object"&&(t=e.pop()||{});let n=e,{baseURL:r,mapper:c=h=>`${h}.js`,onError:s=(h,i)=>console.error(`[defineWebComponents] ${h}:`,i)}=t,l=r?new URL(r,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),w=h=>h.toLowerCase().replace(/(^|-)([a-z])/g,(i,a,S)=>S.toUpperCase()),b=async h=>{try{if(customElements.get(h))return{tag:h,status:"already-defined"};let i=c(h),S=await import(i instanceof URL?i.href:new URL(i,l).href),m=S?.default??S?.[w(h)];if(!m){if(customElements.get(h))return{tag:h,status:"self-defined"};throw new Error(`No export found for ${h}. Expected default export or named export "${w(h)}".`)}return customElements.get(h)?{tag:h,status:"race-already-defined"}:(customElements.define(h,m),{tag:h,status:"defined"})}catch(i){throw s(h,i),i}};return Promise.all(n.map(b))}var z=class{constructor(t={}){let{baseURL:n,mapper:r,onError:c,predicate:s=()=>!0,attributeModule:l="data-module",root:w=document,scanExisting:b=!0,debounceMs:h=16,observeShadows:i=!0,enhancers:a=[],patchAttachShadow:S=!0}=t,m=new Set,E=new Set,g=new Set,L=new Map,x=new WeakMap,_=new WeakMap,p=0,y=!1,v=null,O=d=>{if(!d||!a.length)return;let f=_.get(d);f||(f=new Set,_.set(d,f));for(let u of a)if(!(!u.selector||!u.run)&&!f.has(u.selector))try{d.matches&&d.matches(u.selector)&&(u.run(d),f.add(u.selector))}catch(A){console.warn(`[AutoDefiner] Error applying enhancer for selector "${u.selector}":`,A)}},T=(d,f)=>{if(!y&&!(!d||!d.includes("-"))&&!customElements.get(d)&&!E.has(d)&&!g.has(d)){if(f&&f.getAttribute){let u=f.getAttribute(l);u&&!L.has(d)&&L.set(d,u)}m.add(d),Re()}},Re=()=>{p||(p=setTimeout(ie,h))},D=d=>{if(d){if(d.nodeType===1){let f=d,u=f.tagName?.toLowerCase();u&&u.includes("-")&&!customElements.get(u)&&s(u,f)&&T(u,f),O(f),i&&f.shadowRoot&&X(f.shadowRoot)}d.querySelectorAll&&d.querySelectorAll("*").forEach(f=>{let u=f.tagName?.toLowerCase();u&&u.includes("-")&&!customElements.get(u)&&s(u,f)&&T(u,f),O(f),i&&f.shadowRoot&&X(f.shadowRoot)})}},X=d=>{if(!d||x.has(d))return;D(d);let f=new MutationObserver(u=>{for(let A of u)A.addedNodes?.forEach(P=>{D(P)}),A.type==="attributes"&&A.target&&D(A.target)});f.observe(d,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[l,...a.map(u=>u.selector).filter(u=>u.startsWith("data-"))]}),x.set(d,f)};async function ie(){if(clearTimeout(p),p=0,!m.size)return;let d=Array.from(m);m.clear(),d.forEach(f=>E.add(f));try{let f=u=>L.get(u)??(r?r(u):`${u}.js`);await $e(...d,{baseURL:n,mapper:f,onError:(u,A)=>{g.add(u),c?.(u,A)}})}catch{}finally{d.forEach(f=>E.delete(f))}}let ce=w===document?document.documentElement:w,le=new MutationObserver(d=>{for(let f of d)f.addedNodes?.forEach(u=>{D(u)}),f.type==="attributes"&&f.target&&D(f.target)});if(le.observe(ce,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[l,...a.map(d=>d.selector).filter(d=>d.startsWith("data-"))]}),i&&S&&Element.prototype.attachShadow){let d=Element.prototype.attachShadow;Element.prototype.attachShadow=function(u){let A=d.call(this,u);if(u&&u.mode==="open"){X(A);let P=this.tagName?.toLowerCase();P&&P.includes("-")&&!customElements.get(P)&&T(P,this)}return A},v=()=>Element.prototype.attachShadow=d}return b&&D(ce),{stop(){y=!0,le.disconnect(),v&&v(),p&&(clearTimeout(p),p=0),x.forEach(d=>d.disconnect())},flush:ie}}static async define(...t){let n={};t.length&&typeof t[t.length-1]=="object"&&(n=t.pop()||{});let r=t,{baseURL:c,mapper:s=i=>`${i}.js`,onError:l=(i,a)=>console.error(`[defineWebComponents] ${i}:`,a)}=n,w=c?new URL(c,typeof location<"u"?location.href:import.meta.url):new URL("./",import.meta.url),b=i=>i.toLowerCase().replace(/(^|-)([a-z])/g,(a,S,m)=>m.toUpperCase()),h=async i=>{try{if(customElements.get(i))return{tag:i,status:"already-defined"};let a=s(i),m=await import(a instanceof URL?a.href:new URL(a,w).href),E=m?.default??m?.[b(i)];if(!E){if(customElements.get(i))return{tag:i,status:"self-defined"};throw new Error(`No export found for ${i}. Expected default export or named export "${b(i)}".`)}return customElements.get(i)?{tag:i,status:"race-already-defined"}:(customElements.define(i,E),{tag:i,status:"defined"})}catch(a){throw l(i,a),a}};return Promise.all(r.map(h))}};var Oe=/^[a-z][a-z0-9+\-.]*:\/\//i,C=(()=>{try{return import.meta.url}catch{return}})(),F=e=>typeof e=="string"&&e.length&&!e.endsWith("/")?`${e}/`:e;function W(e,t={}){if(!e||Oe.test(e))return e;let{preferModule:n=!0}=t,r=()=>{if(!C)return null;try{return new URL(e,C).href}catch{return null}},c=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(e,window.location.origin).href}catch{return null}};return(n?r()||c():c()||r())||e}var we=(()=>{if(C)try{let e=new URL(C);if(/\/public\/assets\/js\//.test(e.pathname))return new URL("../pds/",C).href}catch{return}})(),Se=!1;function ge(e){Se||typeof document>"u"||(Se=!0,e.addEventListener("pds:ready",t=>{let n=t.detail?.mode;n&&document.documentElement.classList.add(`pds-${n}`,"pds-ready")}))}function Ee({manageTheme:e,themeStorageKey:t,applyResolvedTheme:n,setupSystemListenerIfNeeded:r}){let c="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"?c=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":c=s:c=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:c,storedTheme:s}}function B(e,{resolvePublicAssetURL:t}){let n=!!(e?.public?.root||e?.static?.root),r=t(e);return!n&&we&&(r=we),F(W(r))}async function be(e,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:n="/auto-define/",autoDefinePreload:r=[],autoDefineMapper:c=null,enhancers:s=[],autoDefineOverrides:l=null,autoDefinePreferModule:w=!0}=e,b=(()=>{let i=new Map;return(t||[]).forEach(a=>i.set(a.selector,a)),(s||[]).forEach(a=>i.set(a.selector,a)),Array.from(i.values())})(),h=null;if(typeof window<"u"&&typeof document<"u"){let i=z,a=p=>{switch(p){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${p}.js`}},{mapper:S,enhancers:m,...E}=l&&typeof l=="object"?l:{},g=m?Array.isArray(m)?m:typeof m=="object"?Object.values(m):[]:[],L=(()=>{let p=new Map;return(b||[]).forEach(y=>{y?.selector&&p.set(y.selector,y)}),(g||[]).forEach(y=>{if(!y?.selector)return;let v=p.get(y.selector)||null;p.set(y.selector,{...v||{},...y,run:typeof y?.run=="function"?y.run:v?.run})}),Array.from(p.values())})(),_={baseURL:n&&F(W(n,{preferModule:w})),predefine:r,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:L,onError:(p,y)=>{if(typeof p=="string"&&p.startsWith("pds-")){let O=["pds-form","pds-drawer"].includes(p),T=y?.message?.includes("#pds/lit")||y?.message?.includes("Failed to resolve module specifier");O&&T?console.error(`\u274C PDS component <${p}> 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 <${p}> not found. Assets may not be installed.`)}else console.error(`\u274C Auto-define error for <${p}>:`,y)},...E,mapper:p=>{if(customElements.get(p))return null;if(typeof c=="function")try{let y=c(p);return y===void 0?a(p):y}catch(y){return console.warn("Custom autoDefine.mapper error; falling back to default:",y?.message||y),a(p)}return a(p)}};h=new i(_),r.length>0&&typeof i.define=="function"&&await i.define(...r,{baseURL:n,mapper:_.mapper,onError:_.onError})}return{autoDefiner:h,mergedEnhancers:b}}var te=["light","dark"],ne=new Set(te);function Ie(e){let n=(Array.isArray(e?.themes)?e.themes.map(r=>String(r).toLowerCase()):te).filter(r=>ne.has(r));return n.length?n:te}function re(e,{preferDocument:t=!0}={}){let n=String(e||"").toLowerCase();if(ne.has(n))return n;if(t&&typeof document<"u"){let r=document.documentElement?.getAttribute("data-theme");if(ne.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=re(t);return Ie(e).includes(n)}var oe=class extends EventTarget{},o=new oe;o.initializing=!1;o.currentPreset=null;o.debug=!1;var q=null,V=null,H=null,K=null;function G(e,t){return t&&typeof t=="string"?t:`${B(o.currentConfig||{},{resolvePublicAssetURL:N})}core/${e}`}async function Ne(){return Array.isArray(o.defaultEnhancers)&&o.defaultEnhancers.length>0?o.defaultEnhancers:(K||(K=import(G("pds-enhancers.js",o.currentConfig?.enhancersURL)).then(t=>{let n=Array.isArray(t?.defaultPDSEnhancers)?t.defaultPDSEnhancers:[];return o.defaultEnhancers=n,n}).catch(t=>{throw K=null,t})),K)}async function ze(){return typeof o.ask=="function"&&o.ask!==ve?o.ask:(V||(V=import(G("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 V=null,t})),V)}async function $(){return typeof o.toast=="function"&&o.toast!==k?o.toast:(H||(H=import(G("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 H=null,t})),H)}async function ve(...e){return(await ze())(...e)}async function k(...e){return(await $())(...e)}k.success=async(...e)=>(await $()).success(...e);k.error=async(...e)=>(await $()).error(...e);k.warning=async(...e)=>(await $()).warning(...e);k.info=async(...e)=>(await $()).info(...e);var Ae=function(e="log",t,...n){let r=!!(o.registry&&!o.registry.isLive),c=(this?.debug||this?.design?.debug||o.debug||!1)===!0;if(r){if(!o.debug)return}else if(!c&&e!=="error"&&e!=="warn")return;let s=console[e]||console.log;n.length>0?s(t,...n):s(t)};function ae(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=>ae(n)).filter(n=>n!==void 0);let t={};for(let[n,r]of Object.entries(e)){let c=ae(r);c!==void 0&&(t[n]=c)}return t}async function Fe(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=M;o.enums=fe;o.adoptLayers=ue;o.adoptPrimitives=de;o.parse=Z;o.createStylesheet=pe;o.isLiveMode=()=>M.isLive;o.ask=ve;o.toast=k;o.common=ee;o.AutoComplete=null;o.loadAutoComplete=async()=>{if(o.AutoComplete&&typeof o.AutoComplete.connect=="function")return o.AutoComplete;let e=G("pds-autocomplete.js",o.currentConfig?.autoCompleteURL);return q||(q=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 q=null,t})),q};function _e(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 xe(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 se="pure-ds-theme",R=null,j=null;function Q(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 J(e){try{if(R&&j){try{typeof R.removeEventListener=="function"?R.removeEventListener("change",j):typeof R.removeListener=="function"&&R.removeListener(j)}catch{}R=null,j=null}if(e==="system"&&typeof window<"u"&&window.matchMedia){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=r=>{let c=r?.matches===void 0?t.matches:r.matches;try{let s=c?"dark":"light";document.documentElement.setAttribute("data-theme",s),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:s,source:"system"}}))}catch{}};R=t,j=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(se)||null}catch{return null}},set(e){try{if(typeof window>"u")return;let t=o.currentConfig?.design||null,n=re(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(se):localStorage.setItem(se,e),Q(e),J(e),o.dispatchEvent(new CustomEvent("pds:theme:changed",{detail:{theme:e,source:"api"}}))}catch{}}});o.defaultEnhancers=[];async function We(e){let t=e&&e.mode||"live",{mode:n,...r}=e||{};if(t==="static")return Be(r);let c=B(r,{resolvePublicAssetURL:N}),s=r?.managerURL||r?.public?.managerURL||r?.manager?.url||new URL("core/pds-manager.js",c).href||new URL("./pds-manager.js",import.meta.url).href,{startLive:l}=await import(s);return l(o,r,{emitReady:_e,emitConfigChanged:xe,applyResolvedTheme:Q,setupSystemListenerIfNeeded:J})}o.start=We;async function Be(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",c=e.staticPaths??{},s=B(e,{resolvePublicAssetURL:N}),l=e&&e.autoDefine||null,w;l&&l.baseURL?w=F(W(l.baseURL,{preferModule:!1})):w=`${s}components/`;let b=l&&Array.isArray(l.predefine)&&l.predefine||[],h=l&&typeof l.mapper=="function"&&l.mapper||null;try{ge(o);let{resolvedTheme:i}=Ee({manageTheme:n,themeStorageKey:r,applyResolvedTheme:Q,setupSystemListenerIfNeeded:J}),a=await Fe(s,e),S=Array.isArray(e?.enhancers)?e.enhancers:e?.enhancers&&typeof e.enhancers=="object"?Object.values(e.enhancers):[],m=a?.config?{...a.config,...e,design:e?.design||a.config.design,preset:e?.preset||a.config.preset}:{...e},E={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`},g=a?.paths||{};if(c={...E,...g,...c},o.registry.setStaticMode(c),t&&typeof document<"u")try{let p=await o.registry.getStylesheet("styles");if(p){p._pds=!0;let y=(document.adoptedStyleSheets||[]).filter(v=>v._pds!==!0);document.adoptedStyleSheets=[...y,p],xe({mode:"static",source:"static:styles-applied"})}}catch(p){Ae.call(o,"warn","Failed to apply static styles:",p)}let L=null,x=[];try{let p=await Ne(),y=await be({autoDefineBaseURL:w,autoDefinePreload:b,autoDefineMapper:h,enhancers:S,autoDefineOverrides:l||null,autoDefinePreferModule:!(l&&l.baseURL)},{baseEnhancers:p});L=y.autoDefiner,x=y.mergedEnhancers||[]}catch(p){Ae.call(o,"error","\u274C Failed to initialize AutoDefiner/Enhancers (static):",p)}let _=ae(e);return o.currentConfig=Object.freeze({mode:"static",...structuredClone(_),design:structuredClone(m.design||{}),preset:m.preset,theme:i,enhancers:x}),_e({mode:"static",config:m,theme:i,autoDefiner:L}),{config:m,theme:i,autoDefiner:L}}catch(i){throw o.dispatchEvent(new CustomEvent("pds:error",{detail:{error:i}})),i}}var at=Q,it=J;export{o as PDS,at as applyResolvedTheme,it as setupSystemListenerIfNeeded};
@@ -218,18 +218,23 @@ class PdsCalendar extends HTMLElement {
218
218
  .calendar-header {
219
219
  display: grid;
220
220
  grid-template-columns: auto 1fr auto;
221
+ align-items: center;
221
222
 
222
- padding: var(--spacing-5) 0;
223
+ padding: var(--spacing-4) var(--spacing-4);
223
224
  border-bottom: var(--border-width-thin) solid var(--surface-border);
224
225
 
225
226
  .month-name {
226
227
  margin: 0;
227
228
  font-size: var(--font-size-lg);
228
229
  }
229
- }
230
230
 
231
- button.btn-xs {
232
- min-height: 0 !important;
231
+ .prev {
232
+ justify-self: start;
233
+ }
234
+
235
+ .next {
236
+ justify-self: end;
237
+ }
233
238
  }
234
239
 
235
240
  .day-name {
@@ -467,7 +472,7 @@ button.btn-xs {
467
472
  // Adopt primitives (buttons), components (.callout classes), and toaster-specific styles
468
473
  await PDS.adoptLayers(
469
474
  this.shadowRoot,
470
- ["primitives", "components"],
475
+ ["primitives", "components", "utilities"],
471
476
  [componentStyles]
472
477
  );
473
478
 
@@ -519,12 +524,12 @@ button.btn-xs {
519
524
  const calendarHtml = /*html*/ `
520
525
  <div class="calendar-container" part="calendar-container">
521
526
  <nav class="calendar-header" part="calendar-header">
522
- <button class="btn-outline prev btn-xs"><pds-icon icon="arrow-left" size="xs"></pds-icon></button>
527
+ <button class="prev icon-only"><pds-icon icon="arrow-left" size="xs"></pds-icon></button>
523
528
  <div class="current-month">
524
529
  <h3 class="month-name">${this.#monthNames[this.month]}</h3>
525
530
  <h4 class="year">${this.year}</h4>
526
531
  </div>
527
- <button class="btn-outline next btn-xs"><pds-icon icon="arrow-right" size="xs"></pds-icon></button>
532
+ <button class="next icon-only"><pds-icon icon="arrow-right" size="xs"></pds-icon></button>
528
533
  </nav>
529
534
 
530
535
  <div class="calendar" part="calendar">
@@ -750,12 +755,15 @@ button.btn-xs {
750
755
  month: this.month,
751
756
  fill: (data) => {
752
757
  if (!data) return;
753
- let dayDivs = this.shadowRoot.querySelectorAll(`div[data-day]`);
754
-
755
758
  for (const day of Object.keys(data)) {
756
- const dayDiv = dayDivs[parseInt(day)];
759
+ const dayNumber = Number.parseInt(day, 10);
760
+ if (!Number.isInteger(dayNumber) || dayNumber < 1) continue;
761
+
762
+ const dayDiv = this.shadowRoot.querySelector(
763
+ `div[data-day="${dayNumber}"]`
764
+ );
757
765
  const list = data[day];
758
- if (list) {
766
+ if (dayDiv && Array.isArray(list)) {
759
767
  dayDiv.classList.add("has-events");
760
768
  for (const item of list) {
761
769
  const html = /*html*/ `<div class="task task--${
@@ -633,6 +633,8 @@ export class SchemaForm extends LitElement {
633
633
  return "upload";
634
634
  }
635
635
  switch (schema.format) {
636
+ case "omnibox":
637
+ return "omnibox";
636
638
  case "data-url":
637
639
  return "upload";
638
640
  case "upload":
@@ -1732,7 +1734,7 @@ export class SchemaForm extends LitElement {
1732
1734
  min=${min}
1733
1735
  max=${max}
1734
1736
  step=${step}
1735
- .value=${visualValue}
1737
+ .value=${String(visualValue)}
1736
1738
  ?disabled=${!!attrs.disabled}
1737
1739
  @input=${(e) => set(Number(e.target.value))}
1738
1740
  />
@@ -2080,6 +2082,87 @@ export class SchemaForm extends LitElement {
2080
2082
  `;
2081
2083
  });
2082
2084
 
2085
+ // pds-omnibox: Omnibox autocomplete input
2086
+ this.defineRenderer("omnibox", ({ id, path, value, attrs, set, ui }) => {
2087
+ const omniboxOpts = ui?.["ui:options"] || {};
2088
+ const settings = omniboxOpts.settings;
2089
+ const icon = omniboxOpts.icon;
2090
+ const autocomplete = ui?.["ui:autocomplete"] ?? attrs.autocomplete;
2091
+
2092
+ return html`
2093
+ <pds-omnibox
2094
+ id=${id}
2095
+ name=${path}
2096
+ placeholder=${ifDefined(attrs.placeholder)}
2097
+ .value=${value ?? ""}
2098
+ ?disabled=${!!attrs.disabled}
2099
+ ?required=${!!attrs.required}
2100
+ autocomplete=${ifDefined(autocomplete)}
2101
+ icon=${ifDefined(icon)}
2102
+ .settings=${settings}
2103
+ @input=${(e) => set(e.target.value ?? "")}
2104
+ ></pds-omnibox>
2105
+ `;
2106
+ });
2107
+
2108
+ this.defineRenderer("treeview", ({ id, path, value, attrs, set, ui, schema }) => {
2109
+ const treeviewOpts = ui?.["ui:options"] || {};
2110
+ const isArraySchema = schema?.type === "array";
2111
+ const configuredMultiselect =
2112
+ ui?.["ui:multiselect"] ??
2113
+ treeviewOpts.multiselect ??
2114
+ (isArraySchema ? "auto" : "off");
2115
+ const normalizedMultiselect =
2116
+ configuredMultiselect === "checkboxes" || configuredMultiselect === "auto"
2117
+ ? configuredMultiselect
2118
+ : "off";
2119
+ const selectedValues = isArraySchema
2120
+ ? Array.isArray(value)
2121
+ ? value.map((item) => String(item))
2122
+ : []
2123
+ : [];
2124
+ const selectedValue = !isArraySchema && value != null ? String(value) : "";
2125
+ const settings = {
2126
+ source:
2127
+ treeviewOpts.source ??
2128
+ treeviewOpts.items ??
2129
+ treeviewOpts.data,
2130
+ items:
2131
+ treeviewOpts.items,
2132
+ data:
2133
+ treeviewOpts.data,
2134
+ getItems: treeviewOpts.getItems,
2135
+ getChildren: treeviewOpts.getChildren,
2136
+ defaultExpanded: treeviewOpts.defaultExpanded,
2137
+ expandedAll: treeviewOpts.expandedAll,
2138
+ transform: treeviewOpts.transform,
2139
+ transformChildren: treeviewOpts.transformChildren,
2140
+ fetch: treeviewOpts.fetch,
2141
+ };
2142
+
2143
+ return html`
2144
+ <pds-treeview
2145
+ id=${id}
2146
+ name=${path}
2147
+ src=${ifDefined(treeviewOpts.src)}
2148
+ multiselect=${normalizedMultiselect}
2149
+ ?disabled=${!!attrs.disabled}
2150
+ ?required=${!!attrs.required}
2151
+ .options=${settings}
2152
+ .value=${selectedValue}
2153
+ .values=${selectedValues}
2154
+ @change=${(event) => {
2155
+ const treeview = event.currentTarget;
2156
+ if (isArraySchema) {
2157
+ set(Array.isArray(treeview.values) ? [...treeview.values] : []);
2158
+ return;
2159
+ }
2160
+ set(treeview.value ?? "");
2161
+ }}
2162
+ ></pds-treeview>
2163
+ `;
2164
+ });
2165
+
2083
2166
  // pds-richtext: Rich text editor
2084
2167
  this.defineRenderer("richtext", ({ id, value, attrs, set, ui, path }) => {
2085
2168
  const richtextOpts = ui?.["ui:options"] || {};
@@ -2447,7 +2530,7 @@ export class SchemaForm extends LitElement {
2447
2530
  }
2448
2531
 
2449
2532
  #isGroupWidget(key) {
2450
- return key === "radio" || key === "checkbox-group";
2533
+ return key === "radio" || key === "checkbox-group" || key === "treeview";
2451
2534
  }
2452
2535
 
2453
2536
  /**
@@ -244,7 +244,7 @@ export class PdsOmnibox extends HTMLElement {
244
244
  --ac-itm-height-default: 5rem;
245
245
  --ac-max-height-default: 300px;
246
246
  --ac-viewport-gap: var(--spacing-4);
247
- --ac-suggest-offset: var(--spacing-1);
247
+ --ac-suggest-offset: var(--spacing-0);
248
248
  }
249
249
 
250
250
  .ac-container {
@@ -267,11 +267,11 @@ export class PdsOmnibox extends HTMLElement {
267
267
  top: calc(100% + var(--ac-suggest-offset));
268
268
  padding: var(--ac-margin);
269
269
  border-radius: 0 0 var(--ac-rad) var(--ac-rad);
270
- box-shadow: var(--ac-box-shadow);
271
- overflow-y: auto;
270
+
271
+ overflow-y: auto;\
272
272
 
273
273
  &.ac-active {
274
- box-shadow: var(--shadow-sm);
274
+ box-shadow: var(--ac-box-shadow, var(--shadow-md));
275
275
  }
276
276
 
277
277
  .ac-empty {
@@ -292,7 +292,8 @@ export class PdsOmnibox extends HTMLElement {
292
292
  max-height: var(--ac-itm-height, var(--ac-itm-height-default));
293
293
  border-radius: 0;
294
294
  padding: var(--spacing-2) var(--spacing-3);
295
-
295
+ border: 1px solid transparent;
296
+
296
297
  > pds-icon,
297
298
  > svg-icon,
298
299
  > img {
@@ -323,6 +324,8 @@ export class PdsOmnibox extends HTMLElement {
323
324
  white-space: nowrap;
324
325
  }
325
326
 
327
+
328
+
326
329
  img {
327
330
  width: var(--icon-size);
328
331
  height: var(--icon-size);
@@ -347,7 +350,7 @@ export class PdsOmnibox extends HTMLElement {
347
350
  &:hover,
348
351
  &.selected {
349
352
  background-color: var(--color-surface-elevated);
350
- border: 2px dotted var(--color-primary-500);
353
+ border: 1px dotted var(--color-primary-500);
351
354
 
352
355
  svg-icon,
353
356
  pds-icon {