@pure-ds/core 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"pds-start-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-start-helpers.js"],"names":[],"mappings":"AAmBA,sEAgCC;AAiBD,mDAYC;AA6BD,8CAsBC;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuGC;AAGD;;;;;;;;EAmCC;AAED;;QASC;AAGD;;;;;GAmIC;AAtZM,qDAGI"}
1
+ {"version":3,"file":"pds-start-helpers.d.ts","sourceRoot":"","sources":["../../../../../src/js/pds-core/pds-start-helpers.js"],"names":[],"mappings":"AAmBA,sEAgCC;AAiBD,mDASC;AA6BD,8CAsBC;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuGC;AAGD;;;;;;;;EAmCC;AAED;;QASC;AAGD;;;;;GAmIC;AAnZM,qDAGI"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pure-ds/core",
3
3
  "shortname": "pds",
4
- "version": "0.5.3",
4
+ "version": "0.5.4",
5
5
  "description": "Pure Design System - Why develop a Design System when you can generate one?",
6
6
  "repository": {
7
7
  "type": "git",
@@ -3246,7 +3246,7 @@ export const ${e}CSS = \`${a}\`;
3246
3246
  <button class="btn-primary btn-working">
3247
3247
  <span>Saving</span>
3248
3248
  </button>
3249
- `.trim()}];function Vr(r){r.dataset.enhancedAccordion||(r.dataset.enhancedAccordion="true",r.addEventListener("toggle",e=>{e.target.open&&e.target.parentElement===r&&r.querySelectorAll(":scope > details[open]").forEach(t=>{t!==e.target&&(t.open=!1)})},!0))}function Jr(r){if(r.dataset.enhancedDropdown)return;r.dataset.enhancedDropdown="true";let e=r.querySelector("menu");if(!e)return;let t=r.querySelector("[data-dropdown-toggle]")||r.querySelector("button");t&&!t.hasAttribute("type")&&t.setAttribute("type","button"),e.id||(e.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),e.setAttribute("role",e.getAttribute("role")||"menu"),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true"),t&&(t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-expanded","false"));let a=()=>{let n=(r.getAttribute("data-mode")||"auto").toLowerCase();if(n==="up"||n==="down")return n;let c=r.getBoundingClientRect(),p=Math.max(0,window.innerHeight-c.bottom);return Math.max(0,c.top)>p?"up":"down"},o=()=>{r.dataset.dropdownDirection=a(),e.setAttribute("aria-hidden","false"),t?.setAttribute("aria-expanded","true")},i=()=>{e.setAttribute("aria-hidden","true"),t?.setAttribute("aria-expanded","false")},s=()=>{e.getAttribute("aria-hidden")==="false"?i():o()};t?.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),s()}),document.addEventListener("click",n=>{r.contains(n.target)||i()}),r.addEventListener("keydown",n=>{n.key==="Escape"&&(i(),t?.focus())}),r.addEventListener("focusout",n=>{(!n.relatedTarget||!r.contains(n.relatedTarget))&&i()})}function Kr(r){if(r.dataset.enhancedToggle)return;r.dataset.enhancedToggle="true";let e=r.querySelector('input[type="checkbox"]');if(!e)return;r.hasAttribute("tabindex")||r.setAttribute("tabindex","0"),r.setAttribute("role","switch"),r.setAttribute("aria-checked",e.checked?"true":"false");let t=document.createElement("span");t.className="toggle-switch",t.setAttribute("role","presentation"),t.setAttribute("aria-hidden","true");let a=document.createElement("span");a.className="toggle-knob",t.appendChild(a),r.insertBefore(t,e.nextSibling);let o=()=>{r.setAttribute("aria-checked",e.checked?"true":"false")},i=()=>{e.disabled||(e.checked=!e.checked,o(),e.dispatchEvent(new Event("change",{bubbles:!0})))};r.addEventListener("click",s=>{s.preventDefault(),i()}),r.addEventListener("keydown",s=>{(s.key===" "||s.key==="Enter")&&(s.preventDefault(),i())}),e.addEventListener("change",o)}function Yr(r){if(r.dataset.enhancedRange)return;let e=r.closest("label"),t=e?.classList.contains("range-output"),a=r.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${a}-output`;if(r.id=a,t){let i=e.querySelector("span");if(i&&!i.classList.contains("range-output-wrapper")){let s=document.createElement("span");s.className="range-output-wrapper",s.style.display="flex",s.style.justifyContent="space-between",s.style.alignItems="center";let n=document.createElement("span");n.textContent=i.textContent,s.appendChild(n);let c=document.createElement("output");c.id=o,c.setAttribute("for",a),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=r.value,s.appendChild(c),i.textContent="",i.appendChild(s);let p=()=>{c.textContent=r.value};r.addEventListener("input",p)}}else{let i=r.closest(".range-container");i||(i=document.createElement("div"),i.className="range-container",r.parentNode?.insertBefore(i,r),i.appendChild(r)),i.style.position="relative";let s=document.createElement("output");s.id=o,s.setAttribute("for",a),s.className="range-bubble",s.setAttribute("aria-live","polite"),i.appendChild(s);let n=()=>{let d=parseFloat(r.min)||0,l=parseFloat(r.max)||100,h=parseFloat(r.value),g=(h-d)/(l-d);s.style.left=`calc(${g*100}% )`,s.textContent=String(h)},c=()=>s.classList.add("visible"),p=()=>s.classList.remove("visible");r.addEventListener("input",n),r.addEventListener("pointerdown",c),r.addEventListener("pointerup",p),r.addEventListener("pointerleave",p),r.addEventListener("focus",c),r.addEventListener("blur",p),n()}r.dataset.enhancedRange="1"}function Zr(r){if(r.dataset.enhancedRequired)return;r.dataset.enhancedRequired="true";let e=t=>{let a=t.closest("label");if(!a||a.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",a.querySelector("span").appendChild(o);let i=t.closest("form");if(i&&!i.querySelector(".required-legend")){let s=document.createElement("small");s.classList.add("required-legend"),s.textContent="* Required fields",i.insertBefore(s,i.querySelector(".form-actions")||i.lastElementChild)}};r.querySelectorAll("[required]").forEach(t=>{e(t)})}function Qr(r){if(r.dataset.enhancedOpenGroup)return;r.dataset.enhancedOpenGroup="true",r.classList.add("flex","flex-wrap","buttons");let e=document.createElement("input");e.type="text",e.placeholder="Add item...",e.classList.add("input-text","input-sm"),e.style.width="auto";let t=r.querySelector('input[type="radio"], input[type="checkbox"]');r.appendChild(e),e.addEventListener("keydown",a=>{if(a.key==="Enter"||a.key==="Tab"){let o=e.value.trim();if(o){a.preventDefault();let i=t.type==="radio"?"radio":"checkbox",s=`open-group-${Math.random().toString(36).substring(2,11)}`,n=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let p=document.createElement("input");p.type=i,p.name=t.name||r.getAttribute("data-name")||"open-group",p.value=o,p.id=s,n.appendChild(c),n.appendChild(p),r.insertBefore(n,e),e.value=""}}else if(a.key==="Backspace"&&e.value===""){a.preventDefault();let o=r.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Xr(r){if(r.dataset.enhancedBtnWorking)return;r.dataset.enhancedBtnWorking="true";let e=null,t=!1;new MutationObserver(o=>{o.forEach(i=>{if(i.attributeName==="class"){let s=r.classList.contains("btn-working"),n=r.querySelector("pds-icon");if(s)if(n)e||(e=n.getAttribute("icon")),n.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),r.insertBefore(c,r.firstChild),t=!0}else i.oldValue?.includes("btn-working")&&n&&(t?(n.remove(),t=!1):e&&(n.setAttribute("icon",e),e=null))}})}).observe(r,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var eo=new Map([[".accordion",Vr],["nav[data-dropdown]",Jr],["label[data-toggle]",Kr],['input[type="range"]',Yr],["form[data-required]",Zr],["fieldset[role=group][data-open]",Qr],["button, a[class*='btn-']",Xr]]),ct=Gr.map(r=>({...r,run:eo.get(r.selector)||(()=>{})}));var er="pds",to=/^([a-z][a-z0-9+\-.]*:)?\/\//i,Xt=/^[a-z]:/i;function pe(r=""){return r.endsWith("/")?r:`${r}/`}function ro(r="",e=er){let t=r.replace(/\/+$/,"");return new RegExp(`(?:^|/)${e}$`,"i").test(t)?t:`${t}/${e}`}function oo(r){return r.replace(/^\.\/+/,"")}function ao(r){return Xt.test(r)?r.replace(Xt,"").replace(/^\/+/,""):r}function io(r){return r.startsWith("public/")?r.substring(7):r}function lt(r,e={}){let t=e.segment||er,a=e.defaultRoot||`/assets/${t}/`,o=r?.public&&r.public?.root||r?.static&&r.static?.root||null;if(!o||typeof o!="string")return pe(a);let i=o.trim();return i?(i=i.replace(/\\/g,"/"),i=ro(i,t),i=pe(i),to.test(i)?i:(i=oo(i),i=ao(i),i.startsWith("/")||(i=io(i),i.startsWith("/")||(i=`/${i}`),i=i.replace(/\/+/g,(s,n)=>n===0?s:"/")),pe(i))):pe(a)}var no=/^[a-z][a-z0-9+\-.]*:\/\//i,ue=(()=>{try{return import.meta.url}catch{return}})(),Be=r=>typeof r=="string"&&r.length&&!r.endsWith("/")?`${r}/`:r;function Oe(r,e={}){if(!r||no.test(r))return r;let{preferModule:t=!0}=e,a=()=>{if(!ue)return null;try{return new URL(r,ue).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(r,window.location.origin).href}catch{return null}};return(t?a()||o():o()||a())||r}var or=(()=>{if(ue)try{let r=new URL(ue);if(/\/public\/assets\/js\//.test(r.pathname))return new URL("../pds/",ue).href}catch{return}})(),ar=!1;function ir(r){ar||typeof document>"u"||(ar=!0,r.addEventListener("pds:ready",e=>{let t=e.detail?.mode;t&&(document.documentElement.classList.add(`pds-${t}`),t==="live"&&document.documentElement.classList.add("pds-ready"))}))}function sr(r={},e={}){if(!e||typeof e!="object")return r;let t=Array.isArray(r)?[...r]:{...r};for(let[a,o]of Object.entries(e))o&&typeof o=="object"&&!Array.isArray(o)?t[a]=sr(t[a]&&typeof t[a]=="object"?t[a]:{},o):t[a]=o;return t}function pt(r=""){return String(r).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function he(r){if(r==null)return r;if(typeof r=="function")return;if(typeof r!="object")return r;if(Array.isArray(r))return r.map(t=>he(t)).filter(t=>t!==void 0);let e={};for(let t in r)if(r.hasOwnProperty(t)){let a=r[t];if(typeof a!="function"){let o=he(a);o!==void 0&&(e[t]=o)}}return e}function nr(r={},e={},{presets:t,defaultLog:a}){let o=typeof r=="object"&&("colors"in r||"typography"in r||"spatialRhythm"in r||"shape"in r||"behavior"in r||"layout"in r||"advanced"in r||"a11y"in r||"components"in r||"icons"in r),i=r&&r.enhancers;i&&!Array.isArray(i)&&(i=Object.values(i));let s=i??e.enhancers??[],n=r&&r.preset,c=r&&r.design,p="preset"in(r||{})||"design"in(r||{})||"enhancers"in(r||{}),d,l=null;if(p){let h=String(n||"default").toLowerCase(),g=t?.[h]||Object.values(t||{}).find(O=>pt(O.name)===h||String(O.name||"").toLowerCase()===h);if(!g)throw new Error(`PDS preset not found: "${n||"default"}"`);l={id:g.id||pt(g.name),name:g.name||g.id||String(h)};let y=structuredClone(g);if(c&&typeof c=="object"){let O=he(c);y=sr(y,structuredClone(O))}let{mode:k,autoDefine:f,applyGlobalStyles:$,manageTheme:J,themeStorageKey:C,preloadStyles:N,criticalLayers:K,managerURL:Ue,manager:me,preset:bt,design:B,enhancers:fe,log:be,...ye}=r;d={...ye,design:y,preset:l.name,log:be||a}}else if(o){let{log:h,...g}=r;d={design:structuredClone(g),log:h||a}}else{let h=t?.default||Object.values(t||{}).find(g=>pt(g.name)==="default");if(!h)throw new Error("PDS default preset not available");l={id:h.id||"default",name:h.name||"Default"},d={design:structuredClone(h),preset:l.name,log:a}}return{generatorConfig:d,enhancers:s,presetInfo:l}}function cr({manageTheme:r,themeStorageKey:e,applyResolvedTheme:t,setupSystemListenerIfNeeded:a}){let o="light",i=null;if(r&&typeof window<"u"){try{i=localStorage.getItem(e)||null}catch{i=null}try{t?.(i),a?.(i)}catch{}i?i==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=i:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:i}}function ut(r,{resolvePublicAssetURL:e}){let t=!!(r?.public?.root||r?.static?.root),a=e(r);return!t&&or&&(a=or),Be(Oe(a))}async function lr(r,{baseEnhancers:e=[]}={}){let{autoDefineBaseURL:t="/auto-define/",autoDefinePreload:a=[],autoDefineMapper:o=null,enhancers:i=[],autoDefineOverrides:s=null,autoDefinePreferModule:n=!0}=r,c=(()=>{let d=new Map;return(e||[]).forEach(l=>d.set(l.selector,l)),(i||[]).forEach(l=>d.set(l.selector,l)),Array.from(d.values())})(),p=null;if(typeof window<"u"&&typeof document<"u"){let d=null;try{let f=await Promise.resolve().then(()=>(rr(),tr));d=f?.AutoDefiner||f?.default?.AutoDefiner||f?.default||null}catch(f){console.warn("AutoDefiner not available:",f?.message||f)}let l=f=>{switch(f){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${f}.js`}},{mapper:h,...g}=s&&typeof s=="object"?s:{},k={baseURL:t&&Be(Oe(t,{preferModule:n})),predefine:a,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(f,$)=>{if(typeof f=="string"&&f.startsWith("pds-")){let C=["pds-form","pds-drawer"].includes(f),N=$?.message?.includes("#pds/lit")||$?.message?.includes("Failed to resolve module specifier");C&&N?console.error(`\u274C PDS component <${f}> requires Lit but #pds/lit is not in import map.
3249
+ `.trim()}];function Vr(r){r.dataset.enhancedAccordion||(r.dataset.enhancedAccordion="true",r.addEventListener("toggle",e=>{e.target.open&&e.target.parentElement===r&&r.querySelectorAll(":scope > details[open]").forEach(t=>{t!==e.target&&(t.open=!1)})},!0))}function Jr(r){if(r.dataset.enhancedDropdown)return;r.dataset.enhancedDropdown="true";let e=r.querySelector("menu");if(!e)return;let t=r.querySelector("[data-dropdown-toggle]")||r.querySelector("button");t&&!t.hasAttribute("type")&&t.setAttribute("type","button"),e.id||(e.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),e.setAttribute("role",e.getAttribute("role")||"menu"),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true"),t&&(t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-expanded","false"));let a=()=>{let n=(r.getAttribute("data-mode")||"auto").toLowerCase();if(n==="up"||n==="down")return n;let c=r.getBoundingClientRect(),p=Math.max(0,window.innerHeight-c.bottom);return Math.max(0,c.top)>p?"up":"down"},o=()=>{r.dataset.dropdownDirection=a(),e.setAttribute("aria-hidden","false"),t?.setAttribute("aria-expanded","true")},i=()=>{e.setAttribute("aria-hidden","true"),t?.setAttribute("aria-expanded","false")},s=()=>{e.getAttribute("aria-hidden")==="false"?i():o()};t?.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),s()}),document.addEventListener("click",n=>{r.contains(n.target)||i()}),r.addEventListener("keydown",n=>{n.key==="Escape"&&(i(),t?.focus())}),r.addEventListener("focusout",n=>{(!n.relatedTarget||!r.contains(n.relatedTarget))&&i()})}function Kr(r){if(r.dataset.enhancedToggle)return;r.dataset.enhancedToggle="true";let e=r.querySelector('input[type="checkbox"]');if(!e)return;r.hasAttribute("tabindex")||r.setAttribute("tabindex","0"),r.setAttribute("role","switch"),r.setAttribute("aria-checked",e.checked?"true":"false");let t=document.createElement("span");t.className="toggle-switch",t.setAttribute("role","presentation"),t.setAttribute("aria-hidden","true");let a=document.createElement("span");a.className="toggle-knob",t.appendChild(a),r.insertBefore(t,e.nextSibling);let o=()=>{r.setAttribute("aria-checked",e.checked?"true":"false")},i=()=>{e.disabled||(e.checked=!e.checked,o(),e.dispatchEvent(new Event("change",{bubbles:!0})))};r.addEventListener("click",s=>{s.preventDefault(),i()}),r.addEventListener("keydown",s=>{(s.key===" "||s.key==="Enter")&&(s.preventDefault(),i())}),e.addEventListener("change",o)}function Yr(r){if(r.dataset.enhancedRange)return;let e=r.closest("label"),t=e?.classList.contains("range-output"),a=r.id||`range-${Math.random().toString(36).substring(2,11)}`,o=`${a}-output`;if(r.id=a,t){let i=e.querySelector("span");if(i&&!i.classList.contains("range-output-wrapper")){let s=document.createElement("span");s.className="range-output-wrapper",s.style.display="flex",s.style.justifyContent="space-between",s.style.alignItems="center";let n=document.createElement("span");n.textContent=i.textContent,s.appendChild(n);let c=document.createElement("output");c.id=o,c.setAttribute("for",a),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=r.value,s.appendChild(c),i.textContent="",i.appendChild(s);let p=()=>{c.textContent=r.value};r.addEventListener("input",p)}}else{let i=r.closest(".range-container");i||(i=document.createElement("div"),i.className="range-container",r.parentNode?.insertBefore(i,r),i.appendChild(r)),i.style.position="relative";let s=document.createElement("output");s.id=o,s.setAttribute("for",a),s.className="range-bubble",s.setAttribute("aria-live","polite"),i.appendChild(s);let n=()=>{let d=parseFloat(r.min)||0,l=parseFloat(r.max)||100,h=parseFloat(r.value),g=(h-d)/(l-d);s.style.left=`calc(${g*100}% )`,s.textContent=String(h)},c=()=>s.classList.add("visible"),p=()=>s.classList.remove("visible");r.addEventListener("input",n),r.addEventListener("pointerdown",c),r.addEventListener("pointerup",p),r.addEventListener("pointerleave",p),r.addEventListener("focus",c),r.addEventListener("blur",p),n()}r.dataset.enhancedRange="1"}function Zr(r){if(r.dataset.enhancedRequired)return;r.dataset.enhancedRequired="true";let e=t=>{let a=t.closest("label");if(!a||a.querySelector(".required-asterisk"))return;let o=document.createElement("span");o.classList.add("required-asterisk"),o.textContent="*",o.style.marginLeft="4px",a.querySelector("span").appendChild(o);let i=t.closest("form");if(i&&!i.querySelector(".required-legend")){let s=document.createElement("small");s.classList.add("required-legend"),s.textContent="* Required fields",i.insertBefore(s,i.querySelector(".form-actions")||i.lastElementChild)}};r.querySelectorAll("[required]").forEach(t=>{e(t)})}function Qr(r){if(r.dataset.enhancedOpenGroup)return;r.dataset.enhancedOpenGroup="true",r.classList.add("flex","flex-wrap","buttons");let e=document.createElement("input");e.type="text",e.placeholder="Add item...",e.classList.add("input-text","input-sm"),e.style.width="auto";let t=r.querySelector('input[type="radio"], input[type="checkbox"]');r.appendChild(e),e.addEventListener("keydown",a=>{if(a.key==="Enter"||a.key==="Tab"){let o=e.value.trim();if(o){a.preventDefault();let i=t.type==="radio"?"radio":"checkbox",s=`open-group-${Math.random().toString(36).substring(2,11)}`,n=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=o;let p=document.createElement("input");p.type=i,p.name=t.name||r.getAttribute("data-name")||"open-group",p.value=o,p.id=s,n.appendChild(c),n.appendChild(p),r.insertBefore(n,e),e.value=""}}else if(a.key==="Backspace"&&e.value===""){a.preventDefault();let o=r.querySelectorAll("label");o.length>0&&o[o.length-1].remove()}})}function Xr(r){if(r.dataset.enhancedBtnWorking)return;r.dataset.enhancedBtnWorking="true";let e=null,t=!1;new MutationObserver(o=>{o.forEach(i=>{if(i.attributeName==="class"){let s=r.classList.contains("btn-working"),n=r.querySelector("pds-icon");if(s)if(n)e||(e=n.getAttribute("icon")),n.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),r.insertBefore(c,r.firstChild),t=!0}else i.oldValue?.includes("btn-working")&&n&&(t?(n.remove(),t=!1):e&&(n.setAttribute("icon",e),e=null))}})}).observe(r,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var eo=new Map([[".accordion",Vr],["nav[data-dropdown]",Jr],["label[data-toggle]",Kr],['input[type="range"]',Yr],["form[data-required]",Zr],["fieldset[role=group][data-open]",Qr],["button, a[class*='btn-']",Xr]]),ct=Gr.map(r=>({...r,run:eo.get(r.selector)||(()=>{})}));var er="pds",to=/^([a-z][a-z0-9+\-.]*:)?\/\//i,Xt=/^[a-z]:/i;function pe(r=""){return r.endsWith("/")?r:`${r}/`}function ro(r="",e=er){let t=r.replace(/\/+$/,"");return new RegExp(`(?:^|/)${e}$`,"i").test(t)?t:`${t}/${e}`}function oo(r){return r.replace(/^\.\/+/,"")}function ao(r){return Xt.test(r)?r.replace(Xt,"").replace(/^\/+/,""):r}function io(r){return r.startsWith("public/")?r.substring(7):r}function lt(r,e={}){let t=e.segment||er,a=e.defaultRoot||`/assets/${t}/`,o=r?.public&&r.public?.root||r?.static&&r.static?.root||null;if(!o||typeof o!="string")return pe(a);let i=o.trim();return i?(i=i.replace(/\\/g,"/"),i=ro(i,t),i=pe(i),to.test(i)?i:(i=oo(i),i=ao(i),i.startsWith("/")||(i=io(i),i.startsWith("/")||(i=`/${i}`),i=i.replace(/\/+/g,(s,n)=>n===0?s:"/")),pe(i))):pe(a)}var no=/^[a-z][a-z0-9+\-.]*:\/\//i,ue=(()=>{try{return import.meta.url}catch{return}})(),Be=r=>typeof r=="string"&&r.length&&!r.endsWith("/")?`${r}/`:r;function Oe(r,e={}){if(!r||no.test(r))return r;let{preferModule:t=!0}=e,a=()=>{if(!ue)return null;try{return new URL(r,ue).href}catch{return null}},o=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(r,window.location.origin).href}catch{return null}};return(t?a()||o():o()||a())||r}var or=(()=>{if(ue)try{let r=new URL(ue);if(/\/public\/assets\/js\//.test(r.pathname))return new URL("../pds/",ue).href}catch{return}})(),ar=!1;function ir(r){ar||typeof document>"u"||(ar=!0,r.addEventListener("pds:ready",e=>{let t=e.detail?.mode;t&&document.documentElement.classList.add(`pds-${t}`,"pds-ready")}))}function sr(r={},e={}){if(!e||typeof e!="object")return r;let t=Array.isArray(r)?[...r]:{...r};for(let[a,o]of Object.entries(e))o&&typeof o=="object"&&!Array.isArray(o)?t[a]=sr(t[a]&&typeof t[a]=="object"?t[a]:{},o):t[a]=o;return t}function pt(r=""){return String(r).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function he(r){if(r==null)return r;if(typeof r=="function")return;if(typeof r!="object")return r;if(Array.isArray(r))return r.map(t=>he(t)).filter(t=>t!==void 0);let e={};for(let t in r)if(r.hasOwnProperty(t)){let a=r[t];if(typeof a!="function"){let o=he(a);o!==void 0&&(e[t]=o)}}return e}function nr(r={},e={},{presets:t,defaultLog:a}){let o=typeof r=="object"&&("colors"in r||"typography"in r||"spatialRhythm"in r||"shape"in r||"behavior"in r||"layout"in r||"advanced"in r||"a11y"in r||"components"in r||"icons"in r),i=r&&r.enhancers;i&&!Array.isArray(i)&&(i=Object.values(i));let s=i??e.enhancers??[],n=r&&r.preset,c=r&&r.design,p="preset"in(r||{})||"design"in(r||{})||"enhancers"in(r||{}),d,l=null;if(p){let h=String(n||"default").toLowerCase(),g=t?.[h]||Object.values(t||{}).find(O=>pt(O.name)===h||String(O.name||"").toLowerCase()===h);if(!g)throw new Error(`PDS preset not found: "${n||"default"}"`);l={id:g.id||pt(g.name),name:g.name||g.id||String(h)};let y=structuredClone(g);if(c&&typeof c=="object"){let O=he(c);y=sr(y,structuredClone(O))}let{mode:k,autoDefine:f,applyGlobalStyles:$,manageTheme:J,themeStorageKey:C,preloadStyles:N,criticalLayers:K,managerURL:Ue,manager:me,preset:bt,design:B,enhancers:fe,log:be,...ye}=r;d={...ye,design:y,preset:l.name,log:be||a}}else if(o){let{log:h,...g}=r;d={design:structuredClone(g),log:h||a}}else{let h=t?.default||Object.values(t||{}).find(g=>pt(g.name)==="default");if(!h)throw new Error("PDS default preset not available");l={id:h.id||"default",name:h.name||"Default"},d={design:structuredClone(h),preset:l.name,log:a}}return{generatorConfig:d,enhancers:s,presetInfo:l}}function cr({manageTheme:r,themeStorageKey:e,applyResolvedTheme:t,setupSystemListenerIfNeeded:a}){let o="light",i=null;if(r&&typeof window<"u"){try{i=localStorage.getItem(e)||null}catch{i=null}try{t?.(i),a?.(i)}catch{}i?i==="system"?o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":o=i:o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:o,storedTheme:i}}function ut(r,{resolvePublicAssetURL:e}){let t=!!(r?.public?.root||r?.static?.root),a=e(r);return!t&&or&&(a=or),Be(Oe(a))}async function lr(r,{baseEnhancers:e=[]}={}){let{autoDefineBaseURL:t="/auto-define/",autoDefinePreload:a=[],autoDefineMapper:o=null,enhancers:i=[],autoDefineOverrides:s=null,autoDefinePreferModule:n=!0}=r,c=(()=>{let d=new Map;return(e||[]).forEach(l=>d.set(l.selector,l)),(i||[]).forEach(l=>d.set(l.selector,l)),Array.from(d.values())})(),p=null;if(typeof window<"u"&&typeof document<"u"){let d=null;try{let f=await Promise.resolve().then(()=>(rr(),tr));d=f?.AutoDefiner||f?.default?.AutoDefiner||f?.default||null}catch(f){console.warn("AutoDefiner not available:",f?.message||f)}let l=f=>{switch(f){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${f}.js`}},{mapper:h,...g}=s&&typeof s=="object"?s:{},k={baseURL:t&&Be(Oe(t,{preferModule:n})),predefine:a,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(f,$)=>{if(typeof f=="string"&&f.startsWith("pds-")){let C=["pds-form","pds-drawer"].includes(f),N=$?.message?.includes("#pds/lit")||$?.message?.includes("Failed to resolve module specifier");C&&N?console.error(`\u274C PDS component <${f}> requires Lit but #pds/lit is not in import map.
3250
3250
  Add this to your HTML <head>:
3251
3251
  <script type="importmap">
3252
3252
  { "imports": { "#pds/lit": "./path/to/lit.js" } }
@@ -3238,7 +3238,7 @@ export const ${t}CSS = \`${a}\`;
3238
3238
  <button class="btn-primary btn-working">
3239
3239
  <span>Saving</span>
3240
3240
  </button>
3241
- `.trim()}];function Ie(n){n.dataset.enhancedAccordion||(n.dataset.enhancedAccordion="true",n.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===n&&n.querySelectorAll(":scope > details[open]").forEach(e=>{e!==t.target&&(e.open=!1)})},!0))}function Ue(n){if(n.dataset.enhancedDropdown)return;n.dataset.enhancedDropdown="true";let t=n.querySelector("menu");if(!t)return;let e=n.querySelector("[data-dropdown-toggle]")||n.querySelector("button");e&&!e.hasAttribute("type")&&e.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.setAttribute("role",t.getAttribute("role")||"menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),e&&(e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-controls",t.id),e.setAttribute("aria-expanded","false"));let a=()=>{let c=(n.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let l=n.getBoundingClientRect(),d=Math.max(0,window.innerHeight-l.bottom);return Math.max(0,l.top)>d?"up":"down"},r=()=>{n.dataset.dropdownDirection=a(),t.setAttribute("aria-hidden","false"),e?.setAttribute("aria-expanded","true")},o=()=>{t.setAttribute("aria-hidden","true"),e?.setAttribute("aria-expanded","false")},i=()=>{t.getAttribute("aria-hidden")==="false"?o():r()};e?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),i()}),document.addEventListener("click",c=>{n.contains(c.target)||o()}),n.addEventListener("keydown",c=>{c.key==="Escape"&&(o(),e?.focus())}),n.addEventListener("focusout",c=>{(!c.relatedTarget||!n.contains(c.relatedTarget))&&o()})}function Oe(n){if(n.dataset.enhancedToggle)return;n.dataset.enhancedToggle="true";let t=n.querySelector('input[type="checkbox"]');if(!t)return;n.hasAttribute("tabindex")||n.setAttribute("tabindex","0"),n.setAttribute("role","switch"),n.setAttribute("aria-checked",t.checked?"true":"false");let e=document.createElement("span");e.className="toggle-switch",e.setAttribute("role","presentation"),e.setAttribute("aria-hidden","true");let a=document.createElement("span");a.className="toggle-knob",e.appendChild(a),n.insertBefore(e,t.nextSibling);let r=()=>{n.setAttribute("aria-checked",t.checked?"true":"false")},o=()=>{t.disabled||(t.checked=!t.checked,r(),t.dispatchEvent(new Event("change",{bubbles:!0})))};n.addEventListener("click",i=>{i.preventDefault(),o()}),n.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),o())}),t.addEventListener("change",r)}function He(n){if(n.dataset.enhancedRange)return;let t=n.closest("label"),e=t?.classList.contains("range-output"),a=n.id||`range-${Math.random().toString(36).substring(2,11)}`,r=`${a}-output`;if(n.id=a,e){let o=t.querySelector("span");if(o&&!o.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 c=document.createElement("span");c.textContent=o.textContent,i.appendChild(c);let l=document.createElement("output");l.id=r,l.setAttribute("for",a),l.style.color="var(--surface-text-secondary, var(--color-text-secondary))",l.style.fontSize="0.875rem",l.textContent=n.value,i.appendChild(l),o.textContent="",o.appendChild(i);let d=()=>{l.textContent=n.value};n.addEventListener("input",d)}}else{let o=n.closest(".range-container");o||(o=document.createElement("div"),o.className="range-container",n.parentNode?.insertBefore(o,n),o.appendChild(n)),o.style.position="relative";let i=document.createElement("output");i.id=r,i.setAttribute("for",a),i.className="range-bubble",i.setAttribute("aria-live","polite"),o.appendChild(i);let c=()=>{let s=parseFloat(n.min)||0,p=parseFloat(n.max)||100,g=parseFloat(n.value),h=(g-s)/(p-s);i.style.left=`calc(${h*100}% )`,i.textContent=String(g)},l=()=>i.classList.add("visible"),d=()=>i.classList.remove("visible");n.addEventListener("input",c),n.addEventListener("pointerdown",l),n.addEventListener("pointerup",d),n.addEventListener("pointerleave",d),n.addEventListener("focus",l),n.addEventListener("blur",d),c()}n.dataset.enhancedRange="1"}function qe(n){if(n.dataset.enhancedRequired)return;n.dataset.enhancedRequired="true";let t=e=>{let a=e.closest("label");if(!a||a.querySelector(".required-asterisk"))return;let r=document.createElement("span");r.classList.add("required-asterisk"),r.textContent="*",r.style.marginLeft="4px",a.querySelector("span").appendChild(r);let o=e.closest("form");if(o&&!o.querySelector(".required-legend")){let i=document.createElement("small");i.classList.add("required-legend"),i.textContent="* Required fields",o.insertBefore(i,o.querySelector(".form-actions")||o.lastElementChild)}};n.querySelectorAll("[required]").forEach(e=>{t(e)})}function Ge(n){if(n.dataset.enhancedOpenGroup)return;n.dataset.enhancedOpenGroup="true",n.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 e=n.querySelector('input[type="radio"], input[type="checkbox"]');n.appendChild(t),t.addEventListener("keydown",a=>{if(a.key==="Enter"||a.key==="Tab"){let r=t.value.trim();if(r){a.preventDefault();let o=e.type==="radio"?"radio":"checkbox",i=`open-group-${Math.random().toString(36).substring(2,11)}`,c=document.createElement("label"),l=document.createElement("span");l.setAttribute("data-label",""),l.textContent=r;let d=document.createElement("input");d.type=o,d.name=e.name||n.getAttribute("data-name")||"open-group",d.value=r,d.id=i,c.appendChild(l),c.appendChild(d),n.insertBefore(c,t),t.value=""}}else if(a.key==="Backspace"&&t.value===""){a.preventDefault();let r=n.querySelectorAll("label");r.length>0&&r[r.length-1].remove()}})}function _e(n){if(n.dataset.enhancedBtnWorking)return;n.dataset.enhancedBtnWorking="true";let t=null,e=!1;new MutationObserver(r=>{r.forEach(o=>{if(o.attributeName==="class"){let i=n.classList.contains("btn-working"),c=n.querySelector("pds-icon");if(i)if(c)t||(t=c.getAttribute("icon")),c.setAttribute("icon","circle-notch");else{let l=document.createElement("pds-icon");l.setAttribute("icon","circle-notch"),l.setAttribute("size","sm"),n.insertBefore(l,n.firstChild),e=!0}else o.oldValue?.includes("btn-working")&&c&&(e?(c.remove(),e=!1):t&&(c.setAttribute("icon",t),t=null))}})}).observe(n,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Ve=new Map([[".accordion",Ie],["nav[data-dropdown]",Ue],["label[data-toggle]",Oe],['input[type="range"]',He],["form[data-required]",qe],["fieldset[role=group][data-open]",Ge],["button, a[class*='btn-']",_e]]),pe=Pe.map(n=>({...n,run:Ve.get(n.selector)||(()=>{})}));var ge="pds",Qe=/^([a-z][a-z0-9+\-.]*:)?\/\//i,ue=/^[a-z]:/i;function U(n=""){return n.endsWith("/")?n:`${n}/`}function Ze(n="",t=ge){let e=n.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(e)?e:`${e}/${t}`}function Je(n){return n.replace(/^\.\/+/,"")}function Ye(n){return ue.test(n)?n.replace(ue,"").replace(/^\/+/,""):n}function Ke(n){return n.startsWith("public/")?n.substring(7):n}function me(n,t={}){let e=t.segment||ge,a=t.defaultRoot||`/assets/${e}/`,r=n?.public&&n.public?.root||n?.static&&n.static?.root||null;if(!r||typeof r!="string")return U(a);let o=r.trim();return o?(o=o.replace(/\\/g,"/"),o=Ze(o,e),o=U(o),Qe.test(o)?o:(o=Je(o),o=Ye(o),o.startsWith("/")||(o=Ke(o),o.startsWith("/")||(o=`/${o}`),o=o.replace(/\/+/g,(i,c)=>c===0?i:"/")),U(o))):U(a)}function he(n){let t=n.replace(/['"]/g,"").trim();if(["system-ui","-apple-system","sans-serif","serif","monospace","cursive","fantasy","ui-sans-serif","ui-serif","ui-monospace","ui-rounded"].includes(t.toLowerCase()))return!0;let r=document.createElement("canvas").getContext("2d");if(!r)return!1;let o="mmmmmmmmmmlli",i="72px",c="monospace";r.font=`${i} ${c}`;let l=r.measureText(o).width;r.font=`${i} "${t}", ${c}`;let d=r.measureText(o).width;return l!==d}function Xe(n){return n?n.split(",").map(a=>a.trim())[0].replace(/['"]/g,"").trim():null}async function et(n,t={}){if(!n)return Promise.resolve();let{weights:e=[400,500,600,700],italic:a=!1}=t,r=Xe(n);if(!r||he(r))return Promise.resolve();let o=encodeURIComponent(r);return document.querySelector(`link[href*="fonts.googleapis.com"][href*="${o}"]`)?(console.log(`Font "${r}" is already loading or loaded`),Promise.resolve()):(console.log(`Loading font "${r}" from Google Fonts...`),new Promise((c,l)=>{let d=document.createElement("link");d.rel="stylesheet";let s=a?`ital,wght@0,${e.join(";0,")};1,${e.join(";1,")}`:`wght@${e.join(";")}`;d.href=`https://fonts.googleapis.com/css2?family=${o}:${s}&display=swap`,d.setAttribute("data-font-loader",r),d.onload=()=>{console.log(`Successfully loaded font "${r}"`),c()},d.onerror=()=>{console.warn(`Failed to load font "${r}" from Google Fonts`),l(new Error(`Failed to load font: ${r}`))},document.head.appendChild(d),setTimeout(()=>{he(r)||console.warn(`Font "${r}" did not load within timeout`),c()},5e3)}))}async function fe(n){if(!n)return Promise.resolve();let t=new Set;n.fontFamilyHeadings&&t.add(n.fontFamilyHeadings),n.fontFamilyBody&&t.add(n.fontFamilyBody),n.fontFamilyMono&&t.add(n.fontFamilyMono);let e=Array.from(t).map(a=>et(a).catch(r=>{console.warn(`Could not load font: ${a}`,r)}));await Promise.all(e)}var rt=/^[a-z][a-z0-9+\-.]*:\/\//i,O=(()=>{try{return import.meta.url}catch{return}})(),Q=n=>typeof n=="string"&&n.length&&!n.endsWith("/")?`${n}/`:n;function Z(n,t={}){if(!n||rt.test(n))return n;let{preferModule:e=!0}=t,a=()=>{if(!O)return null;try{return new URL(n,O).href}catch{return null}},r=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(n,window.location.origin).href}catch{return null}};return(e?a()||r():r()||a())||n}var ve=(()=>{if(O)try{let n=new URL(O);if(/\/public\/assets\/js\//.test(n.pathname))return new URL("../pds/",O).href}catch{return}})(),xe=!1;function we(n){xe||typeof document>"u"||(xe=!0,n.addEventListener("pds:ready",t=>{let e=t.detail?.mode;e&&(document.documentElement.classList.add(`pds-${e}`),e==="live"&&document.documentElement.classList.add("pds-ready"))}))}function ke(n={},t={}){if(!t||typeof t!="object")return n;let e=Array.isArray(n)?[...n]:{...n};for(let[a,r]of Object.entries(t))r&&typeof r=="object"&&!Array.isArray(r)?e[a]=ke(e[a]&&typeof e[a]=="object"?e[a]:{},r):e[a]=r;return e}function te(n=""){return String(n).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function H(n){if(n==null)return n;if(typeof n=="function")return;if(typeof n!="object")return n;if(Array.isArray(n))return n.map(e=>H(e)).filter(e=>e!==void 0);let t={};for(let e in n)if(n.hasOwnProperty(e)){let a=n[e];if(typeof a!="function"){let r=H(a);r!==void 0&&(t[e]=r)}}return t}function Se(n={},t={},{presets:e,defaultLog:a}){let r=typeof n=="object"&&("colors"in n||"typography"in n||"spatialRhythm"in n||"shape"in n||"behavior"in n||"layout"in n||"advanced"in n||"a11y"in n||"components"in n||"icons"in n),o=n&&n.enhancers;o&&!Array.isArray(o)&&(o=Object.values(o));let i=o??t.enhancers??[],c=n&&n.preset,l=n&&n.design,d="preset"in(n||{})||"design"in(n||{})||"enhancers"in(n||{}),s,p=null;if(d){let g=String(c||"default").toLowerCase(),h=e?.[g]||Object.values(e||{}).find(A=>te(A.name)===g||String(A.name||"").toLowerCase()===g);if(!h)throw new Error(`PDS preset not found: "${c||"default"}"`);p={id:h.id||te(h.name),name:h.name||h.id||String(g)};let v=structuredClone(h);if(l&&typeof l=="object"){let A=H(l);v=ke(v,structuredClone(A))}let{mode:x,autoDefine:m,applyGlobalStyles:w,manageTheme:F,themeStorageKey:k,preloadStyles:T,criticalLayers:R,managerURL:B,manager:j,preset:$,design:S,enhancers:E,log:L,...G}=n;s={...G,design:v,preset:p.name,log:L||a}}else if(r){let{log:g,...h}=n;s={design:structuredClone(h),log:g||a}}else{let g=e?.default||Object.values(e||{}).find(h=>te(h.name)==="default");if(!g)throw new Error("PDS default preset not available");p={id:g.id||"default",name:g.name||"Default"},s={design:structuredClone(g),preset:p.name,log:a}}return{generatorConfig:s,enhancers:i,presetInfo:p}}function $e({manageTheme:n,themeStorageKey:t,applyResolvedTheme:e,setupSystemListenerIfNeeded:a}){let r="light",o=null;if(n&&typeof window<"u"){try{o=localStorage.getItem(t)||null}catch{o=null}try{e?.(o),a?.(o)}catch{}o?o==="system"?r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":r=o:r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:r,storedTheme:o}}function ze(n,{resolvePublicAssetURL:t}){let e=!!(n?.public?.root||n?.static?.root),a=t(n);return!e&&ve&&(a=ve),Q(Z(a))}async function Me(n,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:e="/auto-define/",autoDefinePreload:a=[],autoDefineMapper:r=null,enhancers:o=[],autoDefineOverrides:i=null,autoDefinePreferModule:c=!0}=n,l=(()=>{let s=new Map;return(t||[]).forEach(p=>s.set(p.selector,p)),(o||[]).forEach(p=>s.set(p.selector,p)),Array.from(s.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let s=null;try{let m=await Promise.resolve().then(()=>(ye(),be));s=m?.AutoDefiner||m?.default?.AutoDefiner||m?.default||null}catch(m){console.warn("AutoDefiner not available:",m?.message||m)}let p=m=>{switch(m){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${m}.js`}},{mapper:g,...h}=i&&typeof i=="object"?i:{},x={baseURL:e&&Q(Z(e,{preferModule:c})),predefine:a,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:l,onError:(m,w)=>{if(typeof m=="string"&&m.startsWith("pds-")){let k=["pds-form","pds-drawer"].includes(m),T=w?.message?.includes("#pds/lit")||w?.message?.includes("Failed to resolve module specifier");k&&T?console.error(`\u274C PDS component <${m}> requires Lit but #pds/lit is not in import map.
3241
+ `.trim()}];function Ie(n){n.dataset.enhancedAccordion||(n.dataset.enhancedAccordion="true",n.addEventListener("toggle",t=>{t.target.open&&t.target.parentElement===n&&n.querySelectorAll(":scope > details[open]").forEach(e=>{e!==t.target&&(e.open=!1)})},!0))}function Ue(n){if(n.dataset.enhancedDropdown)return;n.dataset.enhancedDropdown="true";let t=n.querySelector("menu");if(!t)return;let e=n.querySelector("[data-dropdown-toggle]")||n.querySelector("button");e&&!e.hasAttribute("type")&&e.setAttribute("type","button"),t.id||(t.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),t.setAttribute("role",t.getAttribute("role")||"menu"),t.hasAttribute("aria-hidden")||t.setAttribute("aria-hidden","true"),e&&(e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-controls",t.id),e.setAttribute("aria-expanded","false"));let a=()=>{let c=(n.getAttribute("data-mode")||"auto").toLowerCase();if(c==="up"||c==="down")return c;let l=n.getBoundingClientRect(),d=Math.max(0,window.innerHeight-l.bottom);return Math.max(0,l.top)>d?"up":"down"},r=()=>{n.dataset.dropdownDirection=a(),t.setAttribute("aria-hidden","false"),e?.setAttribute("aria-expanded","true")},o=()=>{t.setAttribute("aria-hidden","true"),e?.setAttribute("aria-expanded","false")},i=()=>{t.getAttribute("aria-hidden")==="false"?o():r()};e?.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),i()}),document.addEventListener("click",c=>{n.contains(c.target)||o()}),n.addEventListener("keydown",c=>{c.key==="Escape"&&(o(),e?.focus())}),n.addEventListener("focusout",c=>{(!c.relatedTarget||!n.contains(c.relatedTarget))&&o()})}function Oe(n){if(n.dataset.enhancedToggle)return;n.dataset.enhancedToggle="true";let t=n.querySelector('input[type="checkbox"]');if(!t)return;n.hasAttribute("tabindex")||n.setAttribute("tabindex","0"),n.setAttribute("role","switch"),n.setAttribute("aria-checked",t.checked?"true":"false");let e=document.createElement("span");e.className="toggle-switch",e.setAttribute("role","presentation"),e.setAttribute("aria-hidden","true");let a=document.createElement("span");a.className="toggle-knob",e.appendChild(a),n.insertBefore(e,t.nextSibling);let r=()=>{n.setAttribute("aria-checked",t.checked?"true":"false")},o=()=>{t.disabled||(t.checked=!t.checked,r(),t.dispatchEvent(new Event("change",{bubbles:!0})))};n.addEventListener("click",i=>{i.preventDefault(),o()}),n.addEventListener("keydown",i=>{(i.key===" "||i.key==="Enter")&&(i.preventDefault(),o())}),t.addEventListener("change",r)}function He(n){if(n.dataset.enhancedRange)return;let t=n.closest("label"),e=t?.classList.contains("range-output"),a=n.id||`range-${Math.random().toString(36).substring(2,11)}`,r=`${a}-output`;if(n.id=a,e){let o=t.querySelector("span");if(o&&!o.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 c=document.createElement("span");c.textContent=o.textContent,i.appendChild(c);let l=document.createElement("output");l.id=r,l.setAttribute("for",a),l.style.color="var(--surface-text-secondary, var(--color-text-secondary))",l.style.fontSize="0.875rem",l.textContent=n.value,i.appendChild(l),o.textContent="",o.appendChild(i);let d=()=>{l.textContent=n.value};n.addEventListener("input",d)}}else{let o=n.closest(".range-container");o||(o=document.createElement("div"),o.className="range-container",n.parentNode?.insertBefore(o,n),o.appendChild(n)),o.style.position="relative";let i=document.createElement("output");i.id=r,i.setAttribute("for",a),i.className="range-bubble",i.setAttribute("aria-live","polite"),o.appendChild(i);let c=()=>{let s=parseFloat(n.min)||0,p=parseFloat(n.max)||100,g=parseFloat(n.value),h=(g-s)/(p-s);i.style.left=`calc(${h*100}% )`,i.textContent=String(g)},l=()=>i.classList.add("visible"),d=()=>i.classList.remove("visible");n.addEventListener("input",c),n.addEventListener("pointerdown",l),n.addEventListener("pointerup",d),n.addEventListener("pointerleave",d),n.addEventListener("focus",l),n.addEventListener("blur",d),c()}n.dataset.enhancedRange="1"}function qe(n){if(n.dataset.enhancedRequired)return;n.dataset.enhancedRequired="true";let t=e=>{let a=e.closest("label");if(!a||a.querySelector(".required-asterisk"))return;let r=document.createElement("span");r.classList.add("required-asterisk"),r.textContent="*",r.style.marginLeft="4px",a.querySelector("span").appendChild(r);let o=e.closest("form");if(o&&!o.querySelector(".required-legend")){let i=document.createElement("small");i.classList.add("required-legend"),i.textContent="* Required fields",o.insertBefore(i,o.querySelector(".form-actions")||o.lastElementChild)}};n.querySelectorAll("[required]").forEach(e=>{t(e)})}function Ge(n){if(n.dataset.enhancedOpenGroup)return;n.dataset.enhancedOpenGroup="true",n.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 e=n.querySelector('input[type="radio"], input[type="checkbox"]');n.appendChild(t),t.addEventListener("keydown",a=>{if(a.key==="Enter"||a.key==="Tab"){let r=t.value.trim();if(r){a.preventDefault();let o=e.type==="radio"?"radio":"checkbox",i=`open-group-${Math.random().toString(36).substring(2,11)}`,c=document.createElement("label"),l=document.createElement("span");l.setAttribute("data-label",""),l.textContent=r;let d=document.createElement("input");d.type=o,d.name=e.name||n.getAttribute("data-name")||"open-group",d.value=r,d.id=i,c.appendChild(l),c.appendChild(d),n.insertBefore(c,t),t.value=""}}else if(a.key==="Backspace"&&t.value===""){a.preventDefault();let r=n.querySelectorAll("label");r.length>0&&r[r.length-1].remove()}})}function _e(n){if(n.dataset.enhancedBtnWorking)return;n.dataset.enhancedBtnWorking="true";let t=null,e=!1;new MutationObserver(r=>{r.forEach(o=>{if(o.attributeName==="class"){let i=n.classList.contains("btn-working"),c=n.querySelector("pds-icon");if(i)if(c)t||(t=c.getAttribute("icon")),c.setAttribute("icon","circle-notch");else{let l=document.createElement("pds-icon");l.setAttribute("icon","circle-notch"),l.setAttribute("size","sm"),n.insertBefore(l,n.firstChild),e=!0}else o.oldValue?.includes("btn-working")&&c&&(e?(c.remove(),e=!1):t&&(c.setAttribute("icon",t),t=null))}})}).observe(n,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var Ve=new Map([[".accordion",Ie],["nav[data-dropdown]",Ue],["label[data-toggle]",Oe],['input[type="range"]',He],["form[data-required]",qe],["fieldset[role=group][data-open]",Ge],["button, a[class*='btn-']",_e]]),pe=Pe.map(n=>({...n,run:Ve.get(n.selector)||(()=>{})}));var ge="pds",Qe=/^([a-z][a-z0-9+\-.]*:)?\/\//i,ue=/^[a-z]:/i;function U(n=""){return n.endsWith("/")?n:`${n}/`}function Ze(n="",t=ge){let e=n.replace(/\/+$/,"");return new RegExp(`(?:^|/)${t}$`,"i").test(e)?e:`${e}/${t}`}function Je(n){return n.replace(/^\.\/+/,"")}function Ye(n){return ue.test(n)?n.replace(ue,"").replace(/^\/+/,""):n}function Ke(n){return n.startsWith("public/")?n.substring(7):n}function me(n,t={}){let e=t.segment||ge,a=t.defaultRoot||`/assets/${e}/`,r=n?.public&&n.public?.root||n?.static&&n.static?.root||null;if(!r||typeof r!="string")return U(a);let o=r.trim();return o?(o=o.replace(/\\/g,"/"),o=Ze(o,e),o=U(o),Qe.test(o)?o:(o=Je(o),o=Ye(o),o.startsWith("/")||(o=Ke(o),o.startsWith("/")||(o=`/${o}`),o=o.replace(/\/+/g,(i,c)=>c===0?i:"/")),U(o))):U(a)}function he(n){let t=n.replace(/['"]/g,"").trim();if(["system-ui","-apple-system","sans-serif","serif","monospace","cursive","fantasy","ui-sans-serif","ui-serif","ui-monospace","ui-rounded"].includes(t.toLowerCase()))return!0;let r=document.createElement("canvas").getContext("2d");if(!r)return!1;let o="mmmmmmmmmmlli",i="72px",c="monospace";r.font=`${i} ${c}`;let l=r.measureText(o).width;r.font=`${i} "${t}", ${c}`;let d=r.measureText(o).width;return l!==d}function Xe(n){return n?n.split(",").map(a=>a.trim())[0].replace(/['"]/g,"").trim():null}async function et(n,t={}){if(!n)return Promise.resolve();let{weights:e=[400,500,600,700],italic:a=!1}=t,r=Xe(n);if(!r||he(r))return Promise.resolve();let o=encodeURIComponent(r);return document.querySelector(`link[href*="fonts.googleapis.com"][href*="${o}"]`)?(console.log(`Font "${r}" is already loading or loaded`),Promise.resolve()):(console.log(`Loading font "${r}" from Google Fonts...`),new Promise((c,l)=>{let d=document.createElement("link");d.rel="stylesheet";let s=a?`ital,wght@0,${e.join(";0,")};1,${e.join(";1,")}`:`wght@${e.join(";")}`;d.href=`https://fonts.googleapis.com/css2?family=${o}:${s}&display=swap`,d.setAttribute("data-font-loader",r),d.onload=()=>{console.log(`Successfully loaded font "${r}"`),c()},d.onerror=()=>{console.warn(`Failed to load font "${r}" from Google Fonts`),l(new Error(`Failed to load font: ${r}`))},document.head.appendChild(d),setTimeout(()=>{he(r)||console.warn(`Font "${r}" did not load within timeout`),c()},5e3)}))}async function fe(n){if(!n)return Promise.resolve();let t=new Set;n.fontFamilyHeadings&&t.add(n.fontFamilyHeadings),n.fontFamilyBody&&t.add(n.fontFamilyBody),n.fontFamilyMono&&t.add(n.fontFamilyMono);let e=Array.from(t).map(a=>et(a).catch(r=>{console.warn(`Could not load font: ${a}`,r)}));await Promise.all(e)}var rt=/^[a-z][a-z0-9+\-.]*:\/\//i,O=(()=>{try{return import.meta.url}catch{return}})(),Q=n=>typeof n=="string"&&n.length&&!n.endsWith("/")?`${n}/`:n;function Z(n,t={}){if(!n||rt.test(n))return n;let{preferModule:e=!0}=t,a=()=>{if(!O)return null;try{return new URL(n,O).href}catch{return null}},r=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(n,window.location.origin).href}catch{return null}};return(e?a()||r():r()||a())||n}var ve=(()=>{if(O)try{let n=new URL(O);if(/\/public\/assets\/js\//.test(n.pathname))return new URL("../pds/",O).href}catch{return}})(),xe=!1;function we(n){xe||typeof document>"u"||(xe=!0,n.addEventListener("pds:ready",t=>{let e=t.detail?.mode;e&&document.documentElement.classList.add(`pds-${e}`,"pds-ready")}))}function ke(n={},t={}){if(!t||typeof t!="object")return n;let e=Array.isArray(n)?[...n]:{...n};for(let[a,r]of Object.entries(t))r&&typeof r=="object"&&!Array.isArray(r)?e[a]=ke(e[a]&&typeof e[a]=="object"?e[a]:{},r):e[a]=r;return e}function te(n=""){return String(n).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function H(n){if(n==null)return n;if(typeof n=="function")return;if(typeof n!="object")return n;if(Array.isArray(n))return n.map(e=>H(e)).filter(e=>e!==void 0);let t={};for(let e in n)if(n.hasOwnProperty(e)){let a=n[e];if(typeof a!="function"){let r=H(a);r!==void 0&&(t[e]=r)}}return t}function Se(n={},t={},{presets:e,defaultLog:a}){let r=typeof n=="object"&&("colors"in n||"typography"in n||"spatialRhythm"in n||"shape"in n||"behavior"in n||"layout"in n||"advanced"in n||"a11y"in n||"components"in n||"icons"in n),o=n&&n.enhancers;o&&!Array.isArray(o)&&(o=Object.values(o));let i=o??t.enhancers??[],c=n&&n.preset,l=n&&n.design,d="preset"in(n||{})||"design"in(n||{})||"enhancers"in(n||{}),s,p=null;if(d){let g=String(c||"default").toLowerCase(),h=e?.[g]||Object.values(e||{}).find(A=>te(A.name)===g||String(A.name||"").toLowerCase()===g);if(!h)throw new Error(`PDS preset not found: "${c||"default"}"`);p={id:h.id||te(h.name),name:h.name||h.id||String(g)};let v=structuredClone(h);if(l&&typeof l=="object"){let A=H(l);v=ke(v,structuredClone(A))}let{mode:x,autoDefine:m,applyGlobalStyles:w,manageTheme:F,themeStorageKey:k,preloadStyles:T,criticalLayers:R,managerURL:B,manager:j,preset:$,design:S,enhancers:E,log:L,...G}=n;s={...G,design:v,preset:p.name,log:L||a}}else if(r){let{log:g,...h}=n;s={design:structuredClone(h),log:g||a}}else{let g=e?.default||Object.values(e||{}).find(h=>te(h.name)==="default");if(!g)throw new Error("PDS default preset not available");p={id:g.id||"default",name:g.name||"Default"},s={design:structuredClone(g),preset:p.name,log:a}}return{generatorConfig:s,enhancers:i,presetInfo:p}}function $e({manageTheme:n,themeStorageKey:t,applyResolvedTheme:e,setupSystemListenerIfNeeded:a}){let r="light",o=null;if(n&&typeof window<"u"){try{o=localStorage.getItem(t)||null}catch{o=null}try{e?.(o),a?.(o)}catch{}o?o==="system"?r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":r=o:r=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:r,storedTheme:o}}function ze(n,{resolvePublicAssetURL:t}){let e=!!(n?.public?.root||n?.static?.root),a=t(n);return!e&&ve&&(a=ve),Q(Z(a))}async function Me(n,{baseEnhancers:t=[]}={}){let{autoDefineBaseURL:e="/auto-define/",autoDefinePreload:a=[],autoDefineMapper:r=null,enhancers:o=[],autoDefineOverrides:i=null,autoDefinePreferModule:c=!0}=n,l=(()=>{let s=new Map;return(t||[]).forEach(p=>s.set(p.selector,p)),(o||[]).forEach(p=>s.set(p.selector,p)),Array.from(s.values())})(),d=null;if(typeof window<"u"&&typeof document<"u"){let s=null;try{let m=await Promise.resolve().then(()=>(ye(),be));s=m?.AutoDefiner||m?.default?.AutoDefiner||m?.default||null}catch(m){console.warn("AutoDefiner not available:",m?.message||m)}let p=m=>{switch(m){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${m}.js`}},{mapper:g,...h}=i&&typeof i=="object"?i:{},x={baseURL:e&&Q(Z(e,{preferModule:c})),predefine:a,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:l,onError:(m,w)=>{if(typeof m=="string"&&m.startsWith("pds-")){let k=["pds-form","pds-drawer"].includes(m),T=w?.message?.includes("#pds/lit")||w?.message?.includes("Failed to resolve module specifier");k&&T?console.error(`\u274C PDS component <${m}> requires Lit but #pds/lit is not in import map.
3242
3242
  Add this to your HTML <head>:
3243
3243
  <script type="importmap">
3244
3244
  { "imports": { "#pds/lit": "./path/to/lit.js" } }
@@ -78,7 +78,7 @@ var Et=Object.defineProperty;var me=(t,e)=>()=>(t&&(e=t(t=0)),e);var De=(t,e)=>{
78
78
  <button class="btn-primary btn-working">
79
79
  <span>Saving</span>
80
80
  </button>
81
- `.trim()}];function Ft(t){t.dataset.enhancedAccordion||(t.dataset.enhancedAccordion="true",t.addEventListener("toggle",e=>{e.target.open&&e.target.parentElement===t&&t.querySelectorAll(":scope > details[open]").forEach(s=>{s!==e.target&&(s.open=!1)})},!0))}function Ht(t){if(t.dataset.enhancedDropdown)return;t.dataset.enhancedDropdown="true";let e=t.querySelector("menu");if(!e)return;let s=t.querySelector("[data-dropdown-toggle]")||t.querySelector("button");s&&!s.hasAttribute("type")&&s.setAttribute("type","button"),e.id||(e.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),e.setAttribute("role",e.getAttribute("role")||"menu"),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true"),s&&(s.setAttribute("aria-haspopup","true"),s.setAttribute("aria-controls",e.id),s.setAttribute("aria-expanded","false"));let n=()=>{let a=(t.getAttribute("data-mode")||"auto").toLowerCase();if(a==="up"||a==="down")return a;let c=t.getBoundingClientRect(),u=Math.max(0,window.innerHeight-c.bottom);return Math.max(0,c.top)>u?"up":"down"},i=()=>{t.dataset.dropdownDirection=n(),e.setAttribute("aria-hidden","false"),s?.setAttribute("aria-expanded","true")},r=()=>{e.setAttribute("aria-hidden","true"),s?.setAttribute("aria-expanded","false")},o=()=>{e.getAttribute("aria-hidden")==="false"?r():i()};s?.addEventListener("click",a=>{a.preventDefault(),a.stopPropagation(),o()}),document.addEventListener("click",a=>{t.contains(a.target)||r()}),t.addEventListener("keydown",a=>{a.key==="Escape"&&(r(),s?.focus())}),t.addEventListener("focusout",a=>{(!a.relatedTarget||!t.contains(a.relatedTarget))&&r()})}function Bt(t){if(t.dataset.enhancedToggle)return;t.dataset.enhancedToggle="true";let e=t.querySelector('input[type="checkbox"]');if(!e)return;t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","switch"),t.setAttribute("aria-checked",e.checked?"true":"false");let s=document.createElement("span");s.className="toggle-switch",s.setAttribute("role","presentation"),s.setAttribute("aria-hidden","true");let n=document.createElement("span");n.className="toggle-knob",s.appendChild(n),t.insertBefore(s,e.nextSibling);let i=()=>{t.setAttribute("aria-checked",e.checked?"true":"false")},r=()=>{e.disabled||(e.checked=!e.checked,i(),e.dispatchEvent(new Event("change",{bubbles:!0})))};t.addEventListener("click",o=>{o.preventDefault(),r()}),t.addEventListener("keydown",o=>{(o.key===" "||o.key==="Enter")&&(o.preventDefault(),r())}),e.addEventListener("change",i)}function Nt(t){if(t.dataset.enhancedRange)return;let e=t.closest("label"),s=e?.classList.contains("range-output"),n=t.id||`range-${Math.random().toString(36).substring(2,11)}`,i=`${n}-output`;if(t.id=n,s){let r=e.querySelector("span");if(r&&!r.classList.contains("range-output-wrapper")){let o=document.createElement("span");o.className="range-output-wrapper",o.style.display="flex",o.style.justifyContent="space-between",o.style.alignItems="center";let a=document.createElement("span");a.textContent=r.textContent,o.appendChild(a);let c=document.createElement("output");c.id=i,c.setAttribute("for",n),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=t.value,o.appendChild(c),r.textContent="",r.appendChild(o);let u=()=>{c.textContent=t.value};t.addEventListener("input",u)}}else{let r=t.closest(".range-container");r||(r=document.createElement("div"),r.className="range-container",t.parentNode?.insertBefore(r,t),r.appendChild(t)),r.style.position="relative";let o=document.createElement("output");o.id=i,o.setAttribute("for",n),o.className="range-bubble",o.setAttribute("aria-live","polite"),r.appendChild(o);let a=()=>{let l=parseFloat(t.min)||0,p=parseFloat(t.max)||100,g=parseFloat(t.value),h=(g-l)/(p-l);o.style.left=`calc(${h*100}% )`,o.textContent=String(g)},c=()=>o.classList.add("visible"),u=()=>o.classList.remove("visible");t.addEventListener("input",a),t.addEventListener("pointerdown",c),t.addEventListener("pointerup",u),t.addEventListener("pointerleave",u),t.addEventListener("focus",c),t.addEventListener("blur",u),a()}t.dataset.enhancedRange="1"}function It(t){if(t.dataset.enhancedRequired)return;t.dataset.enhancedRequired="true";let e=s=>{let n=s.closest("label");if(!n||n.querySelector(".required-asterisk"))return;let i=document.createElement("span");i.classList.add("required-asterisk"),i.textContent="*",i.style.marginLeft="4px",n.querySelector("span").appendChild(i);let r=s.closest("form");if(r&&!r.querySelector(".required-legend")){let o=document.createElement("small");o.classList.add("required-legend"),o.textContent="* Required fields",r.insertBefore(o,r.querySelector(".form-actions")||r.lastElementChild)}};t.querySelectorAll("[required]").forEach(s=>{e(s)})}function Ot(t){if(t.dataset.enhancedOpenGroup)return;t.dataset.enhancedOpenGroup="true",t.classList.add("flex","flex-wrap","buttons");let e=document.createElement("input");e.type="text",e.placeholder="Add item...",e.classList.add("input-text","input-sm"),e.style.width="auto";let s=t.querySelector('input[type="radio"], input[type="checkbox"]');t.appendChild(e),e.addEventListener("keydown",n=>{if(n.key==="Enter"||n.key==="Tab"){let i=e.value.trim();if(i){n.preventDefault();let r=s.type==="radio"?"radio":"checkbox",o=`open-group-${Math.random().toString(36).substring(2,11)}`,a=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=i;let u=document.createElement("input");u.type=r,u.name=s.name||t.getAttribute("data-name")||"open-group",u.value=i,u.id=o,a.appendChild(c),a.appendChild(u),t.insertBefore(a,e),e.value=""}}else if(n.key==="Backspace"&&e.value===""){n.preventDefault();let i=t.querySelectorAll("label");i.length>0&&i[i.length-1].remove()}})}function qt(t){if(t.dataset.enhancedBtnWorking)return;t.dataset.enhancedBtnWorking="true";let e=null,s=!1;new MutationObserver(i=>{i.forEach(r=>{if(r.attributeName==="class"){let o=t.classList.contains("btn-working"),a=t.querySelector("pds-icon");if(o)if(a)e||(e=a.getAttribute("icon")),a.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),t.insertBefore(c,t.firstChild),s=!0}else r.oldValue?.includes("btn-working")&&a&&(s?(a.remove(),s=!1):e&&(a.setAttribute("icon",e),e=null))}})}).observe(t,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var jt=new Map([[".accordion",Ft],["nav[data-dropdown]",Ht],["label[data-toggle]",Bt],['input[type="range"]',Nt],["form[data-required]",It],["fieldset[role=group][data-open]",Ot],["button, a[class*='btn-']",qt]]),Ce=Dt.map(t=>({...t,run:jt.get(t.selector)||(()=>{})}));var at="pds",Gt=/^([a-z][a-z0-9+\-.]*:)?\/\//i,ot=/^[a-z]:/i;function Z(t=""){return t.endsWith("/")?t:`${t}/`}function Vt(t="",e=at){let s=t.replace(/\/+$/,"");return new RegExp(`(?:^|/)${e}$`,"i").test(s)?s:`${s}/${e}`}function Kt(t){return t.replace(/^\.\/+/,"")}function Jt(t){return ot.test(t)?t.replace(ot,"").replace(/^\/+/,""):t}function Qt(t){return t.startsWith("public/")?t.substring(7):t}function Le(t,e={}){let s=e.segment||at,n=e.defaultRoot||`/assets/${s}/`,i=t?.public&&t.public?.root||t?.static&&t.static?.root||null;if(!i||typeof i!="string")return Z(n);let r=i.trim();return r?(r=r.replace(/\\/g,"/"),r=Vt(r,s),r=Z(r),Gt.test(r)?r:(r=Kt(r),r=Jt(r),r.startsWith("/")||(r=Qt(r),r.startsWith("/")||(r=`/${r}`),r=r.replace(/\/+/g,(o,a)=>a===0?o:"/")),Z(r))):Z(n)}var Xt=/^[a-z][a-z0-9+\-.]*:\/\//i,X=(()=>{try{return import.meta.url}catch{return}})(),le=t=>typeof t=="string"&&t.length&&!t.endsWith("/")?`${t}/`:t;function ue(t,e={}){if(!t||Xt.test(t))return t;let{preferModule:s=!0}=e,n=()=>{if(!X)return null;try{return new URL(t,X).href}catch{return null}},i=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(t,window.location.origin).href}catch{return null}};return(s?n()||i():i()||n())||t}var lt=(()=>{if(X)try{let t=new URL(X);if(/\/public\/assets\/js\//.test(t.pathname))return new URL("../pds/",X).href}catch{return}})(),ut=!1;function pt(t){ut||typeof document>"u"||(ut=!0,t.addEventListener("pds:ready",e=>{let s=e.detail?.mode;s&&(document.documentElement.classList.add(`pds-${s}`),s==="live"&&document.documentElement.classList.add("pds-ready"))}))}function ht(t={},e={}){if(!e||typeof e!="object")return t;let s=Array.isArray(t)?[...t]:{...t};for(let[n,i]of Object.entries(e))i&&typeof i=="object"&&!Array.isArray(i)?s[n]=ht(s[n]&&typeof s[n]=="object"?s[n]:{},i):s[n]=i;return s}function Ue(t=""){return String(t).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Y(t){if(t==null)return t;if(typeof t=="function")return;if(typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>Y(s)).filter(s=>s!==void 0);let e={};for(let s in t)if(t.hasOwnProperty(s)){let n=t[s];if(typeof n!="function"){let i=Y(n);i!==void 0&&(e[s]=i)}}return e}function ft(t={},e={},{presets:s,defaultLog:n}){let i=typeof t=="object"&&("colors"in t||"typography"in t||"spatialRhythm"in t||"shape"in t||"behavior"in t||"layout"in t||"advanced"in t||"a11y"in t||"components"in t||"icons"in t),r=t&&t.enhancers;r&&!Array.isArray(r)&&(r=Object.values(r));let o=r??e.enhancers??[],a=t&&t.preset,c=t&&t.design,u="preset"in(t||{})||"design"in(t||{})||"enhancers"in(t||{}),l,p=null;if(u){let g=String(a||"default").toLowerCase(),h=s?.[g]||Object.values(s||{}).find(M=>Ue(M.name)===g||String(M.name||"").toLowerCase()===g);if(!h)throw new Error(`PDS preset not found: "${a||"default"}"`);p={id:h.id||Ue(h.name),name:h.name||h.id||String(g)};let v=structuredClone(h);if(c&&typeof c=="object"){let M=Y(c);v=ht(v,structuredClone(M))}let{mode:k,autoDefine:b,applyGlobalStyles:A,manageTheme:F,themeStorageKey:w,preloadStyles:C,criticalLayers:H,managerURL:fe,manager:te,preset:ze,design:L,enhancers:se,log:ne,...ie}=t;l={...ie,design:v,preset:p.name,log:ne||n}}else if(i){let{log:g,...h}=t;l={design:structuredClone(h),log:g||n}}else{let g=s?.default||Object.values(s||{}).find(h=>Ue(h.name)==="default");if(!g)throw new Error("PDS default preset not available");p={id:g.id||"default",name:g.name||"Default"},l={design:structuredClone(g),preset:p.name,log:n}}return{generatorConfig:l,enhancers:o,presetInfo:p}}function mt({manageTheme:t,themeStorageKey:e,applyResolvedTheme:s,setupSystemListenerIfNeeded:n}){let i="light",r=null;if(t&&typeof window<"u"){try{r=localStorage.getItem(e)||null}catch{r=null}try{s?.(r),n?.(r)}catch{}r?r==="system"?i=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":i=r:i=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:i,storedTheme:r}}function Pe(t,{resolvePublicAssetURL:e}){let s=!!(t?.public?.root||t?.static?.root),n=e(t);return!s&&lt&&(n=lt),le(ue(n))}async function yt(t,{baseEnhancers:e=[]}={}){let{autoDefineBaseURL:s="/auto-define/",autoDefinePreload:n=[],autoDefineMapper:i=null,enhancers:r=[],autoDefineOverrides:o=null,autoDefinePreferModule:a=!0}=t,c=(()=>{let l=new Map;return(e||[]).forEach(p=>l.set(p.selector,p)),(r||[]).forEach(p=>l.set(p.selector,p)),Array.from(l.values())})(),u=null;if(typeof window<"u"&&typeof document<"u"){let l=null;try{let b=await Promise.resolve().then(()=>(dt(),ct));l=b?.AutoDefiner||b?.default?.AutoDefiner||b?.default||null}catch(b){console.warn("AutoDefiner not available:",b?.message||b)}let p=b=>{switch(b){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${b}.js`}},{mapper:g,...h}=o&&typeof o=="object"?o:{},k={baseURL:s&&le(ue(s,{preferModule:a})),predefine:n,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(b,A)=>{if(typeof b=="string"&&b.startsWith("pds-")){let w=["pds-form","pds-drawer"].includes(b),C=A?.message?.includes("#pds/lit")||A?.message?.includes("Failed to resolve module specifier");w&&C?console.error(`\u274C PDS component <${b}> requires Lit but #pds/lit is not in import map.
81
+ `.trim()}];function Ft(t){t.dataset.enhancedAccordion||(t.dataset.enhancedAccordion="true",t.addEventListener("toggle",e=>{e.target.open&&e.target.parentElement===t&&t.querySelectorAll(":scope > details[open]").forEach(s=>{s!==e.target&&(s.open=!1)})},!0))}function Ht(t){if(t.dataset.enhancedDropdown)return;t.dataset.enhancedDropdown="true";let e=t.querySelector("menu");if(!e)return;let s=t.querySelector("[data-dropdown-toggle]")||t.querySelector("button");s&&!s.hasAttribute("type")&&s.setAttribute("type","button"),e.id||(e.id=`dropdown-${Math.random().toString(36).slice(2,9)}`),e.setAttribute("role",e.getAttribute("role")||"menu"),e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden","true"),s&&(s.setAttribute("aria-haspopup","true"),s.setAttribute("aria-controls",e.id),s.setAttribute("aria-expanded","false"));let n=()=>{let a=(t.getAttribute("data-mode")||"auto").toLowerCase();if(a==="up"||a==="down")return a;let c=t.getBoundingClientRect(),u=Math.max(0,window.innerHeight-c.bottom);return Math.max(0,c.top)>u?"up":"down"},i=()=>{t.dataset.dropdownDirection=n(),e.setAttribute("aria-hidden","false"),s?.setAttribute("aria-expanded","true")},r=()=>{e.setAttribute("aria-hidden","true"),s?.setAttribute("aria-expanded","false")},o=()=>{e.getAttribute("aria-hidden")==="false"?r():i()};s?.addEventListener("click",a=>{a.preventDefault(),a.stopPropagation(),o()}),document.addEventListener("click",a=>{t.contains(a.target)||r()}),t.addEventListener("keydown",a=>{a.key==="Escape"&&(r(),s?.focus())}),t.addEventListener("focusout",a=>{(!a.relatedTarget||!t.contains(a.relatedTarget))&&r()})}function Bt(t){if(t.dataset.enhancedToggle)return;t.dataset.enhancedToggle="true";let e=t.querySelector('input[type="checkbox"]');if(!e)return;t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","switch"),t.setAttribute("aria-checked",e.checked?"true":"false");let s=document.createElement("span");s.className="toggle-switch",s.setAttribute("role","presentation"),s.setAttribute("aria-hidden","true");let n=document.createElement("span");n.className="toggle-knob",s.appendChild(n),t.insertBefore(s,e.nextSibling);let i=()=>{t.setAttribute("aria-checked",e.checked?"true":"false")},r=()=>{e.disabled||(e.checked=!e.checked,i(),e.dispatchEvent(new Event("change",{bubbles:!0})))};t.addEventListener("click",o=>{o.preventDefault(),r()}),t.addEventListener("keydown",o=>{(o.key===" "||o.key==="Enter")&&(o.preventDefault(),r())}),e.addEventListener("change",i)}function Nt(t){if(t.dataset.enhancedRange)return;let e=t.closest("label"),s=e?.classList.contains("range-output"),n=t.id||`range-${Math.random().toString(36).substring(2,11)}`,i=`${n}-output`;if(t.id=n,s){let r=e.querySelector("span");if(r&&!r.classList.contains("range-output-wrapper")){let o=document.createElement("span");o.className="range-output-wrapper",o.style.display="flex",o.style.justifyContent="space-between",o.style.alignItems="center";let a=document.createElement("span");a.textContent=r.textContent,o.appendChild(a);let c=document.createElement("output");c.id=i,c.setAttribute("for",n),c.style.color="var(--surface-text-secondary, var(--color-text-secondary))",c.style.fontSize="0.875rem",c.textContent=t.value,o.appendChild(c),r.textContent="",r.appendChild(o);let u=()=>{c.textContent=t.value};t.addEventListener("input",u)}}else{let r=t.closest(".range-container");r||(r=document.createElement("div"),r.className="range-container",t.parentNode?.insertBefore(r,t),r.appendChild(t)),r.style.position="relative";let o=document.createElement("output");o.id=i,o.setAttribute("for",n),o.className="range-bubble",o.setAttribute("aria-live","polite"),r.appendChild(o);let a=()=>{let l=parseFloat(t.min)||0,p=parseFloat(t.max)||100,g=parseFloat(t.value),h=(g-l)/(p-l);o.style.left=`calc(${h*100}% )`,o.textContent=String(g)},c=()=>o.classList.add("visible"),u=()=>o.classList.remove("visible");t.addEventListener("input",a),t.addEventListener("pointerdown",c),t.addEventListener("pointerup",u),t.addEventListener("pointerleave",u),t.addEventListener("focus",c),t.addEventListener("blur",u),a()}t.dataset.enhancedRange="1"}function It(t){if(t.dataset.enhancedRequired)return;t.dataset.enhancedRequired="true";let e=s=>{let n=s.closest("label");if(!n||n.querySelector(".required-asterisk"))return;let i=document.createElement("span");i.classList.add("required-asterisk"),i.textContent="*",i.style.marginLeft="4px",n.querySelector("span").appendChild(i);let r=s.closest("form");if(r&&!r.querySelector(".required-legend")){let o=document.createElement("small");o.classList.add("required-legend"),o.textContent="* Required fields",r.insertBefore(o,r.querySelector(".form-actions")||r.lastElementChild)}};t.querySelectorAll("[required]").forEach(s=>{e(s)})}function Ot(t){if(t.dataset.enhancedOpenGroup)return;t.dataset.enhancedOpenGroup="true",t.classList.add("flex","flex-wrap","buttons");let e=document.createElement("input");e.type="text",e.placeholder="Add item...",e.classList.add("input-text","input-sm"),e.style.width="auto";let s=t.querySelector('input[type="radio"], input[type="checkbox"]');t.appendChild(e),e.addEventListener("keydown",n=>{if(n.key==="Enter"||n.key==="Tab"){let i=e.value.trim();if(i){n.preventDefault();let r=s.type==="radio"?"radio":"checkbox",o=`open-group-${Math.random().toString(36).substring(2,11)}`,a=document.createElement("label"),c=document.createElement("span");c.setAttribute("data-label",""),c.textContent=i;let u=document.createElement("input");u.type=r,u.name=s.name||t.getAttribute("data-name")||"open-group",u.value=i,u.id=o,a.appendChild(c),a.appendChild(u),t.insertBefore(a,e),e.value=""}}else if(n.key==="Backspace"&&e.value===""){n.preventDefault();let i=t.querySelectorAll("label");i.length>0&&i[i.length-1].remove()}})}function qt(t){if(t.dataset.enhancedBtnWorking)return;t.dataset.enhancedBtnWorking="true";let e=null,s=!1;new MutationObserver(i=>{i.forEach(r=>{if(r.attributeName==="class"){let o=t.classList.contains("btn-working"),a=t.querySelector("pds-icon");if(o)if(a)e||(e=a.getAttribute("icon")),a.setAttribute("icon","circle-notch");else{let c=document.createElement("pds-icon");c.setAttribute("icon","circle-notch"),c.setAttribute("size","sm"),t.insertBefore(c,t.firstChild),s=!0}else r.oldValue?.includes("btn-working")&&a&&(s?(a.remove(),s=!1):e&&(a.setAttribute("icon",e),e=null))}})}).observe(t,{attributes:!0,attributeFilter:["class"],attributeOldValue:!0})}var jt=new Map([[".accordion",Ft],["nav[data-dropdown]",Ht],["label[data-toggle]",Bt],['input[type="range"]',Nt],["form[data-required]",It],["fieldset[role=group][data-open]",Ot],["button, a[class*='btn-']",qt]]),Ce=Dt.map(t=>({...t,run:jt.get(t.selector)||(()=>{})}));var at="pds",Gt=/^([a-z][a-z0-9+\-.]*:)?\/\//i,ot=/^[a-z]:/i;function Z(t=""){return t.endsWith("/")?t:`${t}/`}function Vt(t="",e=at){let s=t.replace(/\/+$/,"");return new RegExp(`(?:^|/)${e}$`,"i").test(s)?s:`${s}/${e}`}function Kt(t){return t.replace(/^\.\/+/,"")}function Jt(t){return ot.test(t)?t.replace(ot,"").replace(/^\/+/,""):t}function Qt(t){return t.startsWith("public/")?t.substring(7):t}function Le(t,e={}){let s=e.segment||at,n=e.defaultRoot||`/assets/${s}/`,i=t?.public&&t.public?.root||t?.static&&t.static?.root||null;if(!i||typeof i!="string")return Z(n);let r=i.trim();return r?(r=r.replace(/\\/g,"/"),r=Vt(r,s),r=Z(r),Gt.test(r)?r:(r=Kt(r),r=Jt(r),r.startsWith("/")||(r=Qt(r),r.startsWith("/")||(r=`/${r}`),r=r.replace(/\/+/g,(o,a)=>a===0?o:"/")),Z(r))):Z(n)}var Xt=/^[a-z][a-z0-9+\-.]*:\/\//i,X=(()=>{try{return import.meta.url}catch{return}})(),le=t=>typeof t=="string"&&t.length&&!t.endsWith("/")?`${t}/`:t;function ue(t,e={}){if(!t||Xt.test(t))return t;let{preferModule:s=!0}=e,n=()=>{if(!X)return null;try{return new URL(t,X).href}catch{return null}},i=()=>{if(typeof window>"u"||!window.location?.origin)return null;try{return new URL(t,window.location.origin).href}catch{return null}};return(s?n()||i():i()||n())||t}var lt=(()=>{if(X)try{let t=new URL(X);if(/\/public\/assets\/js\//.test(t.pathname))return new URL("../pds/",X).href}catch{return}})(),ut=!1;function pt(t){ut||typeof document>"u"||(ut=!0,t.addEventListener("pds:ready",e=>{let s=e.detail?.mode;s&&document.documentElement.classList.add(`pds-${s}`,"pds-ready")}))}function ht(t={},e={}){if(!e||typeof e!="object")return t;let s=Array.isArray(t)?[...t]:{...t};for(let[n,i]of Object.entries(e))i&&typeof i=="object"&&!Array.isArray(i)?s[n]=ht(s[n]&&typeof s[n]=="object"?s[n]:{},i):s[n]=i;return s}function Ue(t=""){return String(t).toLowerCase().replace(/&/g," and ").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Y(t){if(t==null)return t;if(typeof t=="function")return;if(typeof t!="object")return t;if(Array.isArray(t))return t.map(s=>Y(s)).filter(s=>s!==void 0);let e={};for(let s in t)if(t.hasOwnProperty(s)){let n=t[s];if(typeof n!="function"){let i=Y(n);i!==void 0&&(e[s]=i)}}return e}function ft(t={},e={},{presets:s,defaultLog:n}){let i=typeof t=="object"&&("colors"in t||"typography"in t||"spatialRhythm"in t||"shape"in t||"behavior"in t||"layout"in t||"advanced"in t||"a11y"in t||"components"in t||"icons"in t),r=t&&t.enhancers;r&&!Array.isArray(r)&&(r=Object.values(r));let o=r??e.enhancers??[],a=t&&t.preset,c=t&&t.design,u="preset"in(t||{})||"design"in(t||{})||"enhancers"in(t||{}),l,p=null;if(u){let g=String(a||"default").toLowerCase(),h=s?.[g]||Object.values(s||{}).find(M=>Ue(M.name)===g||String(M.name||"").toLowerCase()===g);if(!h)throw new Error(`PDS preset not found: "${a||"default"}"`);p={id:h.id||Ue(h.name),name:h.name||h.id||String(g)};let v=structuredClone(h);if(c&&typeof c=="object"){let M=Y(c);v=ht(v,structuredClone(M))}let{mode:k,autoDefine:b,applyGlobalStyles:A,manageTheme:F,themeStorageKey:w,preloadStyles:C,criticalLayers:H,managerURL:fe,manager:te,preset:ze,design:L,enhancers:se,log:ne,...ie}=t;l={...ie,design:v,preset:p.name,log:ne||n}}else if(i){let{log:g,...h}=t;l={design:structuredClone(h),log:g||n}}else{let g=s?.default||Object.values(s||{}).find(h=>Ue(h.name)==="default");if(!g)throw new Error("PDS default preset not available");p={id:g.id||"default",name:g.name||"Default"},l={design:structuredClone(g),preset:p.name,log:n}}return{generatorConfig:l,enhancers:o,presetInfo:p}}function mt({manageTheme:t,themeStorageKey:e,applyResolvedTheme:s,setupSystemListenerIfNeeded:n}){let i="light",r=null;if(t&&typeof window<"u"){try{r=localStorage.getItem(e)||null}catch{r=null}try{s?.(r),n?.(r)}catch{}r?r==="system"?i=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":i=r:i=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}return{resolvedTheme:i,storedTheme:r}}function Pe(t,{resolvePublicAssetURL:e}){let s=!!(t?.public?.root||t?.static?.root),n=e(t);return!s&&lt&&(n=lt),le(ue(n))}async function yt(t,{baseEnhancers:e=[]}={}){let{autoDefineBaseURL:s="/auto-define/",autoDefinePreload:n=[],autoDefineMapper:i=null,enhancers:r=[],autoDefineOverrides:o=null,autoDefinePreferModule:a=!0}=t,c=(()=>{let l=new Map;return(e||[]).forEach(p=>l.set(p.selector,p)),(r||[]).forEach(p=>l.set(p.selector,p)),Array.from(l.values())})(),u=null;if(typeof window<"u"&&typeof document<"u"){let l=null;try{let b=await Promise.resolve().then(()=>(dt(),ct));l=b?.AutoDefiner||b?.default?.AutoDefiner||b?.default||null}catch(b){console.warn("AutoDefiner not available:",b?.message||b)}let p=b=>{switch(b){case"pds-tabpanel":return"pds-tabstrip.js";default:return`${b}.js`}},{mapper:g,...h}=o&&typeof o=="object"?o:{},k={baseURL:s&&le(ue(s,{preferModule:a})),predefine:n,scanExisting:!0,observeShadows:!0,patchAttachShadow:!0,debounceMs:16,enhancers:c,onError:(b,A)=>{if(typeof b=="string"&&b.startsWith("pds-")){let w=["pds-form","pds-drawer"].includes(b),C=A?.message?.includes("#pds/lit")||A?.message?.includes("Failed to resolve module specifier");w&&C?console.error(`\u274C PDS component <${b}> requires Lit but #pds/lit is not in import map.
82
82
  Add this to your HTML <head>:
83
83
  <script type="importmap">
84
84
  { "imports": { "#pds/lit": "./path/to/lit.js" } }
@@ -72,10 +72,7 @@ export function attachFoucListener(PDS) {
72
72
  PDS.addEventListener("pds:ready", (event) => {
73
73
  const mode = event.detail?.mode;
74
74
  if (mode) {
75
- document.documentElement.classList.add(`pds-${mode}`);
76
- if (mode === "live") {
77
- document.documentElement.classList.add("pds-ready");
78
- }
75
+ document.documentElement.classList.add(`pds-${mode}`, "pds-ready");
79
76
  }
80
77
  });
81
78
  }