@sky.ui/core 0.0.57 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auto-import.js +1 -0
- package/dist/custom-elements.json +2270 -1694
- package/dist/helper/controllers/popover-controller.d.ts +4 -0
- package/dist/helper/controllers/popover-controller.js +1 -1
- package/dist/helper/controllers/popover-controller.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/sky-button/sky-button.js +6 -1
- package/dist/sky-button/sky-button.js.map +1 -1
- package/dist/sky-color-picker/color-model.d.ts +26 -0
- package/dist/sky-color-picker/color-model.js +2 -0
- package/dist/sky-color-picker/color-model.js.map +1 -0
- package/dist/sky-color-picker/index.d.ts +1 -0
- package/dist/sky-color-picker/index.js +1 -0
- package/dist/sky-color-picker/index.js.map +1 -0
- package/dist/sky-color-picker/sky-color-picker.d.ts +101 -0
- package/dist/sky-color-picker/sky-color-picker.js +417 -0
- package/dist/sky-color-picker/sky-color-picker.js.map +1 -0
- package/dist/sky-input/sky-input.d.ts +3 -0
- package/dist/sky-input/sky-input.js +36 -11
- package/dist/sky-input/sky-input.js.map +1 -1
- package/dist/sky-theme-provider/sky-theme-provider.js +1 -1
- package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -1
- package/package.json +11 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{css as e,LitElement as r,html as t}from"lit";import{property as o,state as s,customElement as a}from"lit/decorators.js";import{createContext as i,provide as n}from"@lit/context";var c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,y=(e,r,t,o)=>{for(var s,a=o>1?void 0:o?l(r,t):r,i=e.length-1;i>=0;i--)(s=e[i])&&(a=(o?s(r,t,a):s(a))||a);return o&&a&&c(r,t,a),a};const m={light:{glass:{baseColor:"#FFFFFF",baseShades:{secondary:"#F1F5F9",tertiary:"#E2E8F0"},opacities:{primary:.1,secondary:.12,tertiary:.16,solid:.18}},overlay:{color:"#E8EEF6",opacities:{primary:.75,secondary:.33,tertiary:.19,solid:1}},glassHover:{color:"#0F172A",opacity:{primary:.06,secondary:.08,tertiary:.1,solid:1}},fontFamily:"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontFamilyMono:"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},fontWeight:{thin:"100",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800"},lineHeight:{tight:"1.1",snug:"1.25",normal:"1.5",relaxed:"1.75",loose:"2"},letterSpacing:{tighter:"-0.03em",tight:"-0.015em",normal:"0em",wide:"0.02em",wider:"0.04em"},spacing:{0:"0px",px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",10:"2.5rem",12:"3rem",16:"4rem",20:"5rem",24:"6rem",32:"8rem",40:"10rem",48:"12rem",56:"14rem",64:"16rem"},color:{background:"#E8EEF6",foreground:"#0F172A",active:"#2563EB",success:"#17C964",warning:"#F5A524",danger:"#FF383C",info:"#6366F1"},blur:{primary:"12px",secondary:"24px",tertiary:"32px"},radius:{primary:"8px",secondary:"12px",tertiary:"16px",full:"9999px"},boxshadow:{primary:"0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 8px rgba(15, 23, 42, 0.04)",secondary:"0 2px 4px rgba(15, 23, 42, 0.04), 0 4px 12px rgba(15, 23, 42, 0.05)",tertiary:"0 4px 8px rgba(15, 23, 42, 0.05), 0 8px 20px rgba(15, 23, 42, 0.06)",inset:"inset 0 1px 0 rgba(255, 255, 255, 0.55), inset 0 -1px 0 rgba(15, 23, 42, 0.03)",hover:"0 2px 6px rgba(15, 23, 42, 0.06), 0 6px 16px rgba(15, 23, 42, 0.07)"},brightness:{primary:"1.04",secondary:"1.08",tertiary:"1.10"},saturation:{primary:"1.08",secondary:"1.14",tertiary:"1.20"},separator:"rgba(15, 23, 42, 0.12)",border:{primary:"1px solid rgba(15, 23, 42, 0.14)",secondary:"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 72%, transparent)",tertiary:"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 52%, transparent)"},glassSurface:{top:.14,bottom:.03},motion:{duration:{instant:"0ms",fast:"120ms",normal:"200ms",slow:"300ms"},ease:{default:"cubic-bezier(0.4, 0, 0.2, 1)",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)",inOut:"cubic-bezier(0.4, 0, 0.2, 1)",bounce:"cubic-bezier(0.34, 1.56, 0.64, 1)"}},zIndex:{base:0,dropdown:1e3,sticky:1100,fixed:1200,modal:1300,popover:1400,toast:1500,max:9999},opacity:{disabled:.5,muted:.7,subtle:.85},scrollbar:{track:"transparent",thumb:"color-mix(in oklch, color-mix(in oklch, #2563EB 36%, #0F172A 20%), transparent)",thumbHover:"color-mix(in oklch, color-mix(in oklch, #2563EB 54%, #0F172A 16%), transparent)"}},dark:{glass:{baseColor:"#141B2D",baseShades:{secondary:"#1A2235",tertiary:"#222C42"},opacities:{primary:.16,secondary:.18,tertiary:.22,solid:.24}},overlay:{color:"#0B1020",opacities:{primary:.75,secondary:.33,tertiary:.19,solid:1}},glassHover:{color:"#E2E8F0",opacity:{primary:.08,secondary:.1,tertiary:.12,solid:1}},fontFamily:"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontFamilyMono:"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},fontWeight:{thin:"100",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800"},lineHeight:{tight:"1.1",snug:"1.25",normal:"1.5",relaxed:"1.75",loose:"2"},letterSpacing:{tighter:"-0.03em",tight:"-0.015em",normal:"0em",wide:"0.02em",wider:"0.04em"},spacing:{0:"0px",px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",10:"2.5rem",12:"3rem",16:"4rem",20:"5rem",24:"6rem",32:"8rem",40:"10rem",48:"12rem",56:"14rem",64:"16rem"},color:{background:"#0B1020",foreground:"#E2E8F0",active:"#2563EB",success:"#17C964",warning:"#F7B750",danger:"#DB3B3E",info:"#818CF8"},blur:{primary:"12px",secondary:"24px",tertiary:"32px"},radius:{primary:"8px",secondary:"12px",tertiary:"16px",full:"9999px"},boxshadow:{primary:"0 1px 2px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.22)",secondary:"0 2px 4px rgba(0, 0, 0, 0.22), 0 4px 14px rgba(0, 0, 0, 0.26)",tertiary:"0 4px 8px rgba(0, 0, 0, 0.24), 0 8px 20px rgba(0, 0, 0, 0.3)",inset:"inset 0 1px 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.18)",hover:"0 2px 6px rgba(0, 0, 0, 0.26), 0 6px 16px rgba(0, 0, 0, 0.32)"},brightness:{primary:"1.04",secondary:"1.08",tertiary:"1.10"},saturation:{primary:"1.08",secondary:"1.14",tertiary:"1.20"},separator:"rgba(226, 232, 240, 0.1)",border:{primary:"1px solid rgba(226, 232, 240, 0.14)",secondary:"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 72%, transparent)",tertiary:"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 52%, transparent)"},glassSurface:{top:.16,bottom:.05},motion:{duration:{instant:"0ms",fast:"120ms",normal:"200ms",slow:"300ms"},ease:{default:"cubic-bezier(0.4, 0, 0.2, 1)",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)",inOut:"cubic-bezier(0.4, 0, 0.2, 1)",bounce:"cubic-bezier(0.34, 1.56, 0.64, 1)"}},zIndex:{base:0,dropdown:1e3,sticky:1100,fixed:1200,modal:1300,popover:1400,toast:1500,max:9999},opacity:{disabled:.5,muted:.7,subtle:.85},scrollbar:{track:"transparent",thumb:"color-mix(in oklch, color-mix(in oklch, #2563EB 44%, #E2E8F0 16%), transparent)",thumbHover:"color-mix(in oklch, color-mix(in oklch, #2563EB 62%, #E2E8F0 12%), transparent)"}}};function h(){try{if("undefined"!=typeof localStorage){const e=localStorage.getItem("theme");return"light"===e||"dark"===e||"system"===e?e:"system"}}catch{}return"system"}function d(e){if("undefined"==typeof window)return"light";if("system"===e){try{if(window.matchMedia)return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}catch{}return"light"}return e}function p(){if("undefined"==typeof document)return"light";const e=document.documentElement.getAttribute("data-theme");return"light"===e||"dark"===e?e:"undefined"!=typeof matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function k(e){if("undefined"==typeof window)return()=>{};const r=r=>{const{mode:t,preference:o}=r.detail||{};"light"===t||"dark"===t?e(t,o):e(p(),void 0)};return window.addEventListener("sky-theme",r),queueMicrotask(()=>e(p(),void 0)),()=>window.removeEventListener("sky-theme",r)}function u(e,r){const t=Array.isArray(e)?[...e]:{...e};for(const o in r){const s=r[o];s&&"object"==typeof s&&!Array.isArray(s)?t[o]=u(e[o],s):t[o]=s??e[o]}return t}let b,g;function x(e){return e===b&&g||(g={light:u(m.light,e.light??{}),dark:u(m.dark,e.dark??{})},b=e),g}function f(e,r=1){const t="number"==typeof e&&Number.isFinite(e)?e:r;return Math.max(0,Math.min(1,t))}function v(e){return Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):100}function $(e){return/^oklch\(\s*[\d.]+\s+[\d.]+\s+[\d.]+(?:deg)?(?:\s*\/\s*[\d.]+%?)?\s*\)$/i.test(e.trim())}function S(e){return $(e),e}function E(e,r){const t=f(r),o=v(100*t);if(t<=0)return"transparent";if(t>=1)return S(e);if($(e)){const r=e.trim();return r.includes("/")?r:r.replace(/\)$/,` / ${o}%)`)}return`color-mix(in oklch, ${e} ${o}%, transparent)`}function w(e,r,t){return`color-mix(in oklch, ${e} ${v(r)}%, ${t})`}function F(e,r){return e.split(",").map(e=>`${e.trim()}${r}`).join(",\n")}function z(e){return`\n${e} {\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n}\n${F(e,"::-webkit-scrollbar-track")} {\n background: var(--sky-scrollbar-track);\n}\n${F(e,"::-webkit-scrollbar-thumb")} {\n background-color: var(--sky-scrollbar-thumb);\n}\n${F(e,"::-webkit-scrollbar-thumb:hover")} {\n background-color: var(--sky-scrollbar-thumb-hover);\n}\n`.trim()}function C(e,r){return`${r}{${Object.entries(e).map(([e,r])=>`${e.replace(/\./g,"\\.")}:${r};`).join("")}}`}function j(e,r){let t=document.getElementById(e);return t||(t=document.createElement("style"),t.id=e,document.head.appendChild(t)),t.textContent=r,t}const O=i("sky/theme");let B=class extends r{constructor(){super(...arguments),this.scope="root",this.preference=h(),this.mode="light",this.persist=!0,this.broadcast=!0,this.media=null,this.globalStyleId="sky-theme-provider-global-style",this.hostScrollbarStyleId="sky-theme-provider-host-scrollbar",this.hostSheet=null,this.hostStyleEl=null,this.rootVarsStyleId="sky-theme-vars-root",this.onSystemChange=()=>{"system"===(this.preference??h())&&(this.mode=d("system"),this.applyVariables(),this.pushContext(),this.dispatchEvent(new CustomEvent("theme-change-global",{bubbles:!0,composed:!0})))}}connectedCallback(){super.connectedCallback(),this.mode=d(this.preference),this.pushContext(),this.setupSystemWatcher(),"host"===this.scope&&this.applyVariables()}disconnectedCallback(){if(super.disconnectedCallback(),this.media?.removeEventListener("change",this.onSystemChange),this.hostStyleEl&&this.hostStyleEl.parentNode&&(this.hostStyleEl.parentNode.removeChild(this.hostStyleEl),this.hostStyleEl=null),"host"===this.scope){const e=document.getElementById(this.globalStyleId);e&&e.remove();const r=document.getElementById(this.hostScrollbarStyleId);r&&r.remove()}}firstUpdated(){"root"!==this.scope&&"both"!==this.scope||this.applyVariables()}updated(e){super.updated(e),(e.has("userTheme")||e.has("mode")||e.has("preference")||e.has("scope"))&&this.pushContext()}willUpdate(e){const r=e.has("preference"),t=e.has("scope"),o=e.has("userTheme");let s=!1;if(r||t){const e=d(this.preference);e!==this.mode&&(this.mode=e,s=!0)}const a=!!this.hasUpdated;if(("host"===this.scope||a)&&(s||t||o)&&this.applyVariables(),r||s||o||t){this.pushContext();const e="host"===this.scope&&a&&(o||r||s||t);this.broadcast&&("root"===this.scope||"both"===this.scope||e)&&this.broadcastTheme()}}setRootThemeAttrs(){const e=document.documentElement;e.toggleAttribute("data-theme-light","light"===this.mode),e.toggleAttribute("data-theme-dark","dark"===this.mode),e.setAttribute("data-theme",this.mode),e.style.colorScheme=this.mode,e.classList.toggle("dark","dark"===this.mode)}broadcastTheme(){const e={mode:this.mode,preference:this.preference};window.dispatchEvent(new CustomEvent("sky-theme",{detail:e})),window.dispatchEvent(new CustomEvent("theme-change-global",{detail:e}))}setPreference(e){try{!this.persist||"root"!==this.scope&&"both"!==this.scope||localStorage.setItem("theme",e)}catch{}this.preference=e,!this.broadcast||"root"!==this.scope&&"both"!==this.scope||this.dispatchEvent(new CustomEvent("theme-change-global",{bubbles:!0,composed:!0}))}togglePreference(){const e=this.preference??h(),r="light"===e?"dark":"dark"===e?"system":"light";return this.setPreference(r),r}setupSystemWatcher(){"undefined"!=typeof window&&window.matchMedia&&(this.media=window.matchMedia("(prefers-color-scheme: dark)"),this.media.addEventListener("change",this.onSystemChange))}ensureGlobalStyle(){if("undefined"==typeof document)return;const e=`\n body {\n font-family: var(--sky-font);\n margin: 0;\n padding: 0;\n background: var(--sky-background-color);\n color: var(--sky-text-primary);\n }\n\n html[data-sky-dialog-open="true"] {\n overflow: hidden !important;\n position: relative;\n height: 100%;\n }\n\n ${z("html, body, *")}\n `.trim();let r=document.getElementById(this.globalStyleId);r?r.textContent=e:(r=document.createElement("style"),r.id=this.globalStyleId,r.textContent=e,document.head.appendChild(r))}applyHostNativeScrollbars(e){if("undefined"!=typeof document){if(this.toggleAttribute("sky-native-scrollbars",e),!e){const e=document.getElementById(this.hostScrollbarStyleId);return void(e&&e.remove())}j(this.hostScrollbarStyleId,z("sky-theme-provider[sky-native-scrollbars], sky-theme-provider[sky-native-scrollbars] *"))}}applyVariables(){const e=function(e,r){const t={},o=(e,r)=>{null!=r&&(t[`--${e}`]=r)};o("sky-text-dark",S(r?"#FFFFFF":"#0B1020")),o("sky-text-light",S(r?"#030712":"#FFFFFF"));const s=e.fontFamily,a=e.fontFamilyMono??"ui-monospace, monospace";o("sky-font",s),o("sky-font-sans",s),o("sky-font-mono",a),o("sky-background-color",S(e.color.background)),o("sky-text-primary",S(e.color.foreground));const i=r?{secondary:82,tertiary:66,quaternary:50,quinary:36}:{secondary:76,tertiary:60,quaternary:44,quinary:30};Object.entries(i).forEach(([e,r])=>{o(`sky-text-${e}`,`color-mix(in oklch, var(--sky-text-primary) ${r}%, var(--sky-background-color))`)}),["primary","secondary","tertiary","quaternary","quinary"].forEach(e=>{o(`sky-text-${e}-hover`,`color-mix(in oklch, var(--sky-text-${e}) 86%, var(--sky-text-dark))`)});const{baseColor:n,baseShades:c,opacities:l}=e.glass,y=e.color.foreground,m=r?{primary:96,secondary:88,tertiary:78}:{primary:96,secondary:90,tertiary:82},h=c?.primary??w(n,m.primary,y),d=c?.secondary??w(n,m.secondary,y),p=c?.tertiary??w(n,m.tertiary,y),k=r?.4:.34,u={primary:f(l.primary,k),secondary:f(l.secondary??l.primary,k),tertiary:f(l.tertiary??l.primary,k),solid:f(l.solid,1)};o("sky-glass-primary",E(h,u.primary)),o("sky-glass-secondary",E(d,u.secondary)),o("sky-glass-tertiary",E(p,u.tertiary)),o("sky-glass-solid",E(n,u.solid));const b=f(e.glassSurface?.top,r?.26:.24),g=f(e.glassSurface?.bottom,r?.08:.06);o("sky-glass-surface",`linear-gradient(\n 180deg,\n ${E(d,b)},\n ${E(h,g)}\n )`),Object.entries(e.overlay.opacities).forEach(([r,t])=>{o(`sky-overlay-${r}`,E(e.overlay.color,t))}),Object.entries(e.glassHover.opacity).forEach(([r,t])=>{o(`sky-hover-${r}`,E(e.glassHover.color,t))}),Object.entries(e.border).forEach(([e,r])=>{o(`sky-border-${e}`,r)}),Object.entries(e.radius).forEach(([e,r])=>{o(`sky-radius-${e}`,r)}),Object.entries(e.blur).forEach(([e,r])=>{o(`sky-blur-${e}`,`blur(${r})`)}),Object.entries(e.brightness).forEach(([e,r])=>{o(`sky-brightness-${e}`,`brightness(${r})`)}),Object.entries(e.saturation).forEach(([e,r])=>{o(`sky-saturation-${e}`,`saturate(${r})`)}),Object.entries(e.boxshadow).forEach(([e,r])=>{o(`sky-box-shadow-${e}`,r)}),o("sky-border-light",e.separator),Object.entries(e.motion?.duration??{}).forEach(([e,r])=>{o(`sky-duration-${e}`,r)}),Object.entries(e.motion?.ease??{}).forEach(([e,r])=>{o(`sky-ease-${e}`,r)}),o("sky-transition-default",["background-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","border-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","box-shadow var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","transform var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","opacity var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))"].join(", ")),o("sky-transition-fast",["background-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","border-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","box-shadow var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","opacity var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))"].join(", ")),Object.entries(e.zIndex??{}).forEach(([e,r])=>{o(`sky-z-${e}`,String(r))}),Object.entries(e.opacity??{}).forEach(([e,r])=>{o(`sky-opacity-${e}`,String(r))});const x=e.scrollbar;o("sky-scrollbar-track",x?.track??"transparent"),o("sky-scrollbar-thumb",x?.thumb??(r?"color-mix(in oklch, var(--sky-text-tertiary) 78%, transparent)":"color-mix(in oklch, var(--sky-text-tertiary) 68%, transparent)")),o("sky-scrollbar-thumb-hover",x?.thumbHover??(r?"color-mix(in oklch, var(--sky-text-secondary) 52%, var(--sky-active-primary))":"color-mix(in oklch, var(--sky-text-secondary) 44%, var(--sky-active-primary))")),o("sky-text-shadow-on-glass",r?"0 1px 2px rgba(0,0,0,0.45)":"0 1px 1px rgba(255,255,255,0.55)");const v=["active","success","warning","danger","info"];v.forEach(r=>{const t=e.color[r];o(`sky-${r}-primary`,t),o(`sky-${r}-secondary`,`color-mix(in oklch, var(--sky-${r}-primary) 82%, var(--sky-background-color))`),o(`sky-${r}-tertiary`,`color-mix(in oklch, var(--sky-${r}-primary) 62%, var(--sky-background-color))`),o(`sky-${r}-quaternary`,`color-mix(in oklch, var(--sky-${r}-primary) 42%, var(--sky-background-color))`),o(`sky-${r}-quinary`,`color-mix(in oklch, var(--sky-${r}-primary) 24%, var(--sky-background-color))`),o(`sky-${r}-primary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 88%, var(--sky-text-dark))`),o(`sky-${r}-secondary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 72%, var(--sky-text-dark))`),o(`sky-${r}-tertiary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 56%, var(--sky-text-dark))`),o(`sky-${r}-quaternary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 40%, var(--sky-text-dark))`),o(`sky-${r}-quinary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 28%, var(--sky-text-dark))`),o(`sky-${r}-g0`,`color-mix(in oklch, var(--sky-${r}-primary) 12%, transparent)`),o(`sky-${r}-g1`,`color-mix(in oklch, var(--sky-${r}-primary) 24%, transparent)`),o(`sky-${r}-g2`,`color-mix(in oklch, var(--sky-${r}-primary) 48%, transparent)`)}),v.forEach(e=>{o(`sky-${e}-primary-hover`,`color-mix(in oklch, var(--sky-${e}-primary) 86%, var(--sky-text-dark))`),o(`sky-${e}-secondary-hover`,`color-mix(in oklch, var(--sky-${e}-secondary) 86%, var(--sky-text-dark))`),o(`sky-${e}-tertiary-hover`,`color-mix(in oklch, var(--sky-${e}-tertiary) 86%, var(--sky-text-dark))`),o(`sky-${e}-quaternary-hover`,`color-mix(in oklch, var(--sky-${e}-quaternary) 86%, var(--sky-text-dark))`),o(`sky-${e}-quinary-hover`,`color-mix(in oklch, var(--sky-${e}-quinary) 86%, var(--sky-text-dark))`)}),v.forEach(e=>{o(`sky-ring-${e}-1`,`0 0 0 1px var(--sky-${e}-primary)`),o(`sky-ring-${e}-2`,`0 0 0 2px var(--sky-${e}-primary)`),o(`sky-ring-${e}-3`,`0 0 0 3px var(--sky-${e}-primary)`),o(`sky-ring-${e}-4`,`0 0 0 4px var(--sky-${e}-primary)`),o(`sky-ring-${e}-5`,`0 0 0 5px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-1`,`inset 0 0 0 1px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-2`,`inset 0 0 0 2px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-3`,`inset 0 0 0 3px var(--sky-${e}-primary)`)}),o("sky-focus-ring-color","var(--sky-active-primary)"),o("sky-focus-ring","0 0 0 3px color-mix(in oklch, var(--sky-focus-ring-color, var(--sky-active-primary)) 42%, transparent)"),o("sky-focus-ring-offset","2px"),o("sky-text-white","oklch(1 0 0)"),o("sky-text-black","oklch(0 0 0)"),o("sky-on-color-fallback-light","var(--sky-text-white)"),o("sky-on-color-fallback-dark","var(--sky-text-black)"),o("sky-on-active-primary","var(--sky-on-color-fallback-light)"),o("sky-on-success-primary","var(--sky-on-color-fallback-light)"),o("sky-on-warning-primary","var(--sky-on-color-fallback-light)"),o("sky-on-danger-primary","var(--sky-on-color-fallback-light)"),o("sky-on-info-primary","var(--sky-on-color-fallback-light)"),Object.entries(e.fontSize??{}).forEach(([e,r])=>{o(`sky-font-size-${e}`,r)}),Object.entries(e.fontWeight??{}).forEach(([e,r])=>{o(`sky-font-weight-${e}`,r)}),Object.entries(e.lineHeight??{}).forEach(([e,r])=>{o(`sky-line-height-${e}`,r)}),Object.entries(e.letterSpacing??{}).forEach(([e,r])=>{o(`sky-letter-spacing-${e}`,r)});const $=(r,t)=>e.fontSize?.[r]??t,F=(r,t)=>e.lineHeight?.[r]??t,z=[{key:"xs",size:"xs",line:"tight"},{key:"sm",size:"sm",line:"snug"},{key:"md",size:"md",line:"normal"},{key:"lg",size:"lg",line:"snug"},{key:"xl",size:"xl",line:"snug"},{key:"2xl",size:"2xl",line:"tight"},{key:"3xl",size:"3xl",line:"tight"},{key:"4xl",size:"4xl",line:"tight"}];for(const{key:e,size:r,line:t}of z){const s=$(r,"1rem"),a=F(t,"1.5");o(`sky-font-${e}`,`${s} / ${a} var(--sky-font-sans)`),o(`sky-font-mono-${e}`,`${s} / ${a} var(--sky-font-mono)`)}Object.entries(e.spacing??{}).forEach(([e,r])=>{o(`sky-space-${e}`,r)});const C={body:{size:"md",weight:"normal",line:"normal"},label:{size:"sm",weight:"medium",line:"snug"},caption:{size:"xs",weight:"normal",line:"tight"},title:{size:"lg",weight:"semibold",line:"snug"},heading:{size:"2xl",weight:"bold",line:"tight"},display:{size:"4xl",weight:"bold",line:"tight"}},j=(r,t)=>e.fontWeight?.[r]??t;for(const[e,r]of Object.entries(C)){const t=$(r.size,"1rem"),s=j(r.weight,"400"),a=F(r.line,"1.5");o(`sky-text-${e}`,`${s} ${t}/${a} var(--sky-font-sans)`)}return t}(x(this.userTheme||{})[this.mode],"dark"===this.mode);if(this.toggleAttribute("data-theme-light","light"===this.mode),this.toggleAttribute("data-theme-dark","dark"===this.mode),"host"===this.scope||"both"===this.scope){const r=C(e,":host");if("adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype){if(!this.hostSheet){this.hostSheet=new CSSStyleSheet;const e=this.renderRoot.adoptedStyleSheets??[];this.renderRoot.adoptedStyleSheets=[...e,this.hostSheet]}this.hostSheet.replaceSync(r)}else this.hostStyleEl||(this.hostStyleEl=document.createElement("style"),this.renderRoot.appendChild(this.hostStyleEl)),this.hostStyleEl.textContent=r;this.style.removeProperty("color"),this.style.removeProperty("background"),this.applyHostNativeScrollbars(!0)}else this.applyHostNativeScrollbars(!1);if("root"===this.scope||"both"===this.scope){const r=C(e,":root");j(this.rootVarsStyleId,r),this.setRootThemeAttrs(),this.ensureGlobalStyle(),document.body&&(document.body.style.removeProperty("color"),document.body.style.removeProperty("background"),document.body.style.removeProperty("font-family")),this.broadcastTheme()}}pushContext(){const e=x(this.userTheme??{});this._ctx={mode:this.mode,preference:this.preference,theme:e,setPreference:e=>this.setPreference(e),togglePreference:()=>this.togglePreference()}}render(){return t`<slot></slot>`}};B.styles=e`
|
|
1
|
+
import{css as e,LitElement as r,html as t}from"lit";import{property as o,state as s,customElement as a}from"lit/decorators.js";import{createContext as i,provide as n}from"@lit/context";var c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,y=(e,r,t,o)=>{for(var s,a=o>1?void 0:o?l(r,t):r,i=e.length-1;i>=0;i--)(s=e[i])&&(a=(o?s(r,t,a):s(a))||a);return o&&a&&c(r,t,a),a};const m={light:{glass:{baseColor:"#FFFFFF",baseShades:{secondary:"#F1F5F9",tertiary:"#E2E8F0"},opacities:{primary:.1,secondary:.12,tertiary:.16,solid:.18}},overlay:{color:"#E8EEF6",opacities:{primary:.75,secondary:.33,tertiary:.19,solid:1}},glassHover:{color:"#0F172A",opacity:{primary:.06,secondary:.08,tertiary:.1,solid:1}},fontFamily:"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontFamilyMono:"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},fontWeight:{thin:"100",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800"},lineHeight:{tight:"1.1",snug:"1.25",normal:"1.5",relaxed:"1.75",loose:"2"},letterSpacing:{tighter:"-0.03em",tight:"-0.015em",normal:"0em",wide:"0.02em",wider:"0.04em"},spacing:{0:"0px",px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",10:"2.5rem",12:"3rem",16:"4rem",20:"5rem",24:"6rem",32:"8rem",40:"10rem",48:"12rem",56:"14rem",64:"16rem"},color:{background:"#E8EEF6",foreground:"#0F172A",active:"#2563EB",success:"#17C964",warning:"#F5A524",danger:"#FF383C",info:"#6366F1"},blur:{primary:"12px",secondary:"24px",tertiary:"32px"},radius:{primary:"8px",secondary:"12px",tertiary:"16px",full:"9999px"},boxshadow:{primary:"0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 8px rgba(15, 23, 42, 0.04)",secondary:"0 2px 4px rgba(15, 23, 42, 0.04), 0 4px 12px rgba(15, 23, 42, 0.05)",tertiary:"0 4px 8px rgba(15, 23, 42, 0.05), 0 8px 20px rgba(15, 23, 42, 0.06)",inset:"inset 0 1px 0 rgba(255, 255, 255, 0.55), inset 0 -1px 0 rgba(15, 23, 42, 0.03)",hover:"0 2px 6px rgba(15, 23, 42, 0.06), 0 6px 16px rgba(15, 23, 42, 0.07)"},brightness:{primary:"1.04",secondary:"1.08",tertiary:"1.10"},saturation:{primary:"1.08",secondary:"1.14",tertiary:"1.20"},separator:"rgba(15, 23, 42, 0.12)",border:{primary:"1px solid rgba(15, 23, 42, 0.14)",secondary:"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 72%, transparent)",tertiary:"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 52%, transparent)"},glassSurface:{top:.11,bottom:.08},motion:{duration:{instant:"0ms",fast:"120ms",normal:"200ms",slow:"300ms"},ease:{default:"cubic-bezier(0.4, 0, 0.2, 1)",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)",inOut:"cubic-bezier(0.4, 0, 0.2, 1)",bounce:"cubic-bezier(0.34, 1.56, 0.64, 1)"}},zIndex:{base:0,dropdown:1e3,sticky:1100,fixed:1200,modal:1300,popover:1400,toast:1500,max:9999},opacity:{disabled:.5,muted:.7,subtle:.85},scrollbar:{track:"transparent",thumb:"color-mix(in oklch, color-mix(in oklch, #2563EB 36%, #0F172A 20%), transparent)",thumbHover:"color-mix(in oklch, color-mix(in oklch, #2563EB 54%, #0F172A 16%), transparent)"}},dark:{glass:{baseColor:"#141B2D",baseShades:{secondary:"#1A2235",tertiary:"#222C42"},opacities:{primary:.16,secondary:.18,tertiary:.22,solid:.24}},overlay:{color:"#0B1020",opacities:{primary:.75,secondary:.33,tertiary:.19,solid:1}},glassHover:{color:"#E2E8F0",opacity:{primary:.08,secondary:.1,tertiary:.12,solid:1}},fontFamily:"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontFamilyMono:"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace",fontSize:{xs:"0.75rem",sm:"0.875rem",md:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},fontWeight:{thin:"100",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800"},lineHeight:{tight:"1.1",snug:"1.25",normal:"1.5",relaxed:"1.75",loose:"2"},letterSpacing:{tighter:"-0.03em",tight:"-0.015em",normal:"0em",wide:"0.02em",wider:"0.04em"},spacing:{0:"0px",px:"1px",.5:"0.125rem",1:"0.25rem",1.5:"0.375rem",2:"0.5rem",2.5:"0.625rem",3:"0.75rem",3.5:"0.875rem",4:"1rem",5:"1.25rem",6:"1.5rem",8:"2rem",10:"2.5rem",12:"3rem",16:"4rem",20:"5rem",24:"6rem",32:"8rem",40:"10rem",48:"12rem",56:"14rem",64:"16rem"},color:{background:"#0B1020",foreground:"#E2E8F0",active:"#2563EB",success:"#17C964",warning:"#F7B750",danger:"#DB3B3E",info:"#818CF8"},blur:{primary:"12px",secondary:"24px",tertiary:"32px"},radius:{primary:"8px",secondary:"12px",tertiary:"16px",full:"9999px"},boxshadow:{primary:"0 1px 2px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.22)",secondary:"0 2px 4px rgba(0, 0, 0, 0.22), 0 4px 14px rgba(0, 0, 0, 0.26)",tertiary:"0 4px 8px rgba(0, 0, 0, 0.24), 0 8px 20px rgba(0, 0, 0, 0.3)",inset:"inset 0 1px 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.18)",hover:"0 2px 6px rgba(0, 0, 0, 0.26), 0 6px 16px rgba(0, 0, 0, 0.32)"},brightness:{primary:"1.04",secondary:"1.08",tertiary:"1.10"},saturation:{primary:"1.08",secondary:"1.14",tertiary:"1.20"},separator:"rgba(226, 232, 240, 0.1)",border:{primary:"1px solid rgba(226, 232, 240, 0.14)",secondary:"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 72%, transparent)",tertiary:"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 52%, transparent)"},glassSurface:{top:.16,bottom:.14},motion:{duration:{instant:"0ms",fast:"120ms",normal:"200ms",slow:"300ms"},ease:{default:"cubic-bezier(0.4, 0, 0.2, 1)",in:"cubic-bezier(0.4, 0, 1, 1)",out:"cubic-bezier(0, 0, 0.2, 1)",inOut:"cubic-bezier(0.4, 0, 0.2, 1)",bounce:"cubic-bezier(0.34, 1.56, 0.64, 1)"}},zIndex:{base:0,dropdown:1e3,sticky:1100,fixed:1200,modal:1300,popover:1400,toast:1500,max:9999},opacity:{disabled:.5,muted:.7,subtle:.85},scrollbar:{track:"transparent",thumb:"color-mix(in oklch, color-mix(in oklch, #2563EB 44%, #E2E8F0 16%), transparent)",thumbHover:"color-mix(in oklch, color-mix(in oklch, #2563EB 62%, #E2E8F0 12%), transparent)"}}};function h(){try{if("undefined"!=typeof localStorage){const e=localStorage.getItem("theme");return"light"===e||"dark"===e||"system"===e?e:"system"}}catch{}return"system"}function d(e){if("undefined"==typeof window)return"light";if("system"===e){try{if(window.matchMedia)return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}catch{}return"light"}return e}function p(){if("undefined"==typeof document)return"light";const e=document.documentElement.getAttribute("data-theme");return"light"===e||"dark"===e?e:"undefined"!=typeof matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function k(e){if("undefined"==typeof window)return()=>{};const r=r=>{const{mode:t,preference:o}=r.detail||{};"light"===t||"dark"===t?e(t,o):e(p(),void 0)};return window.addEventListener("sky-theme",r),queueMicrotask(()=>e(p(),void 0)),()=>window.removeEventListener("sky-theme",r)}function u(e,r){const t=Array.isArray(e)?[...e]:{...e};for(const o in r){const s=r[o];s&&"object"==typeof s&&!Array.isArray(s)?t[o]=u(e[o],s):t[o]=s??e[o]}return t}let b,g;function x(e){return e===b&&g||(g={light:u(m.light,e.light??{}),dark:u(m.dark,e.dark??{})},b=e),g}function f(e,r=1){const t="number"==typeof e&&Number.isFinite(e)?e:r;return Math.max(0,Math.min(1,t))}function v(e){return Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):100}function $(e){return/^oklch\(\s*[\d.]+\s+[\d.]+\s+[\d.]+(?:deg)?(?:\s*\/\s*[\d.]+%?)?\s*\)$/i.test(e.trim())}function S(e){return $(e),e}function E(e,r){const t=f(r),o=v(100*t);if(t<=0)return"transparent";if(t>=1)return S(e);if($(e)){const r=e.trim();return r.includes("/")?r:r.replace(/\)$/,` / ${o}%)`)}return`color-mix(in oklch, ${e} ${o}%, transparent)`}function w(e,r,t){return`color-mix(in oklch, ${e} ${v(r)}%, ${t})`}function F(e,r){return e.split(",").map(e=>`${e.trim()}${r}`).join(",\n")}function z(e){return`\n${e} {\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n}\n${F(e,"::-webkit-scrollbar-track")} {\n background: var(--sky-scrollbar-track);\n}\n${F(e,"::-webkit-scrollbar-thumb")} {\n background-color: var(--sky-scrollbar-thumb);\n}\n${F(e,"::-webkit-scrollbar-thumb:hover")} {\n background-color: var(--sky-scrollbar-thumb-hover);\n}\n`.trim()}function C(e,r){return`${r}{${Object.entries(e).map(([e,r])=>`${e.replace(/\./g,"\\.")}:${r};`).join("")}}`}function j(e,r){let t=document.getElementById(e);return t||(t=document.createElement("style"),t.id=e,document.head.appendChild(t)),t.textContent=r,t}const O=i("sky/theme");let B=class extends r{constructor(){super(...arguments),this.scope="root",this.preference=h(),this.mode="light",this.persist=!0,this.broadcast=!0,this.media=null,this.globalStyleId="sky-theme-provider-global-style",this.hostScrollbarStyleId="sky-theme-provider-host-scrollbar",this.hostSheet=null,this.hostStyleEl=null,this.rootVarsStyleId="sky-theme-vars-root",this.onSystemChange=()=>{"system"===(this.preference??h())&&(this.mode=d("system"),this.applyVariables(),this.pushContext(),this.dispatchEvent(new CustomEvent("theme-change-global",{bubbles:!0,composed:!0})))}}connectedCallback(){super.connectedCallback(),this.mode=d(this.preference),this.pushContext(),this.setupSystemWatcher(),"host"===this.scope&&this.applyVariables()}disconnectedCallback(){if(super.disconnectedCallback(),this.media?.removeEventListener("change",this.onSystemChange),this.hostStyleEl&&this.hostStyleEl.parentNode&&(this.hostStyleEl.parentNode.removeChild(this.hostStyleEl),this.hostStyleEl=null),"host"===this.scope){const e=document.getElementById(this.globalStyleId);e&&e.remove();const r=document.getElementById(this.hostScrollbarStyleId);r&&r.remove()}}firstUpdated(){"root"!==this.scope&&"both"!==this.scope||this.applyVariables()}updated(e){super.updated(e),(e.has("userTheme")||e.has("mode")||e.has("preference")||e.has("scope"))&&this.pushContext()}willUpdate(e){const r=e.has("preference"),t=e.has("scope"),o=e.has("userTheme");let s=!1;if(r||t){const e=d(this.preference);e!==this.mode&&(this.mode=e,s=!0)}const a=!!this.hasUpdated;if(("host"===this.scope||a)&&(s||t||o)&&this.applyVariables(),r||s||o||t){this.pushContext();const e="host"===this.scope&&a&&(o||r||s||t);this.broadcast&&("root"===this.scope||"both"===this.scope||e)&&this.broadcastTheme()}}setRootThemeAttrs(){const e=document.documentElement;e.toggleAttribute("data-theme-light","light"===this.mode),e.toggleAttribute("data-theme-dark","dark"===this.mode),e.setAttribute("data-theme",this.mode),e.style.colorScheme=this.mode,e.classList.toggle("dark","dark"===this.mode)}broadcastTheme(){const e={mode:this.mode,preference:this.preference};window.dispatchEvent(new CustomEvent("sky-theme",{detail:e})),window.dispatchEvent(new CustomEvent("theme-change-global",{detail:e}))}setPreference(e){try{!this.persist||"root"!==this.scope&&"both"!==this.scope||localStorage.setItem("theme",e)}catch{}this.preference=e,!this.broadcast||"root"!==this.scope&&"both"!==this.scope||this.dispatchEvent(new CustomEvent("theme-change-global",{bubbles:!0,composed:!0}))}togglePreference(){const e=this.preference??h(),r="light"===e?"dark":"dark"===e?"system":"light";return this.setPreference(r),r}setupSystemWatcher(){"undefined"!=typeof window&&window.matchMedia&&(this.media=window.matchMedia("(prefers-color-scheme: dark)"),this.media.addEventListener("change",this.onSystemChange))}ensureGlobalStyle(){if("undefined"==typeof document)return;const e=`\n body {\n font-family: var(--sky-font);\n margin: 0;\n padding: 0;\n background: var(--sky-background-color);\n color: var(--sky-text-primary);\n }\n\n html[data-sky-dialog-open="true"] {\n overflow: hidden !important;\n position: relative;\n height: 100%;\n }\n\n ${z("html, body, *")}\n `.trim();let r=document.getElementById(this.globalStyleId);r?r.textContent=e:(r=document.createElement("style"),r.id=this.globalStyleId,r.textContent=e,document.head.appendChild(r))}applyHostNativeScrollbars(e){if("undefined"!=typeof document){if(this.toggleAttribute("sky-native-scrollbars",e),!e){const e=document.getElementById(this.hostScrollbarStyleId);return void(e&&e.remove())}j(this.hostScrollbarStyleId,z("sky-theme-provider[sky-native-scrollbars], sky-theme-provider[sky-native-scrollbars] *"))}}applyVariables(){const e=function(e,r){const t={},o=(e,r)=>{null!=r&&(t[`--${e}`]=r)};o("sky-text-dark",S(r?"#FFFFFF":"#0B1020")),o("sky-text-light",S(r?"#030712":"#FFFFFF"));const s=e.fontFamily,a=e.fontFamilyMono??"ui-monospace, monospace";o("sky-font",s),o("sky-font-sans",s),o("sky-font-mono",a),o("sky-background-color",S(e.color.background)),o("sky-text-primary",S(e.color.foreground));const i=r?{secondary:82,tertiary:66,quaternary:50,quinary:36}:{secondary:76,tertiary:60,quaternary:44,quinary:30};Object.entries(i).forEach(([e,r])=>{o(`sky-text-${e}`,`color-mix(in oklch, var(--sky-text-primary) ${r}%, var(--sky-background-color))`)}),["primary","secondary","tertiary","quaternary","quinary"].forEach(e=>{o(`sky-text-${e}-hover`,`color-mix(in oklch, var(--sky-text-${e}) 86%, var(--sky-text-dark))`)});const{baseColor:n,baseShades:c,opacities:l}=e.glass,y=e.color.foreground,m=r?{primary:96,secondary:88,tertiary:78}:{primary:96,secondary:90,tertiary:82},h=c?.primary??w(n,m.primary,y),d=c?.secondary??w(n,m.secondary,y),p=c?.tertiary??w(n,m.tertiary,y),k=r?.4:.34,u={primary:f(l.primary,k),secondary:f(l.secondary??l.primary,k),tertiary:f(l.tertiary??l.primary,k),solid:f(l.solid,1)};o("sky-glass-primary",E(h,u.primary)),o("sky-glass-secondary",E(d,u.secondary)),o("sky-glass-tertiary",E(p,u.tertiary)),o("sky-glass-solid",E(n,u.solid));const b=f(e.glassSurface?.top,r?.16:.11),g=f(e.glassSurface?.bottom,r?.14:.08);o("sky-glass-surface",`linear-gradient(\n 180deg,\n ${E(r?h:d,b)},\n ${E(h,g)}\n )`),Object.entries(e.overlay.opacities).forEach(([r,t])=>{o(`sky-overlay-${r}`,E(e.overlay.color,t))}),Object.entries(e.glassHover.opacity).forEach(([r,t])=>{o(`sky-hover-${r}`,E(e.glassHover.color,t))}),Object.entries(e.border).forEach(([e,r])=>{o(`sky-border-${e}`,r)}),Object.entries(e.radius).forEach(([e,r])=>{o(`sky-radius-${e}`,r)}),Object.entries(e.blur).forEach(([e,r])=>{o(`sky-blur-${e}`,`blur(${r})`)}),Object.entries(e.brightness).forEach(([e,r])=>{o(`sky-brightness-${e}`,`brightness(${r})`)}),Object.entries(e.saturation).forEach(([e,r])=>{o(`sky-saturation-${e}`,`saturate(${r})`)}),Object.entries(e.boxshadow).forEach(([e,r])=>{o(`sky-box-shadow-${e}`,r)}),o("sky-border-light",e.separator),Object.entries(e.motion?.duration??{}).forEach(([e,r])=>{o(`sky-duration-${e}`,r)}),Object.entries(e.motion?.ease??{}).forEach(([e,r])=>{o(`sky-ease-${e}`,r)}),o("sky-transition-default",["background-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","border-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","box-shadow var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","transform var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","opacity var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))"].join(", ")),o("sky-transition-fast",["background-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","border-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","box-shadow var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))","opacity var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))"].join(", ")),Object.entries(e.zIndex??{}).forEach(([e,r])=>{o(`sky-z-${e}`,String(r))}),Object.entries(e.opacity??{}).forEach(([e,r])=>{o(`sky-opacity-${e}`,String(r))});const x=e.scrollbar;o("sky-scrollbar-track",x?.track??"transparent"),o("sky-scrollbar-thumb",x?.thumb??(r?"color-mix(in oklch, var(--sky-text-tertiary) 78%, transparent)":"color-mix(in oklch, var(--sky-text-tertiary) 68%, transparent)")),o("sky-scrollbar-thumb-hover",x?.thumbHover??(r?"color-mix(in oklch, var(--sky-text-secondary) 52%, var(--sky-active-primary))":"color-mix(in oklch, var(--sky-text-secondary) 44%, var(--sky-active-primary))")),o("sky-text-shadow-on-glass",r?"0 1px 2px rgba(0,0,0,0.45)":"0 1px 1px rgba(255,255,255,0.55)");const v=["active","success","warning","danger","info"];v.forEach(r=>{const t=e.color[r];o(`sky-${r}-primary`,t),o(`sky-${r}-secondary`,`color-mix(in oklch, var(--sky-${r}-primary) 82%, var(--sky-background-color))`),o(`sky-${r}-tertiary`,`color-mix(in oklch, var(--sky-${r}-primary) 62%, var(--sky-background-color))`),o(`sky-${r}-quaternary`,`color-mix(in oklch, var(--sky-${r}-primary) 42%, var(--sky-background-color))`),o(`sky-${r}-quinary`,`color-mix(in oklch, var(--sky-${r}-primary) 24%, var(--sky-background-color))`),o(`sky-${r}-primary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 88%, var(--sky-text-dark))`),o(`sky-${r}-secondary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 72%, var(--sky-text-dark))`),o(`sky-${r}-tertiary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 56%, var(--sky-text-dark))`),o(`sky-${r}-quaternary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 40%, var(--sky-text-dark))`),o(`sky-${r}-quinary-dark`,`color-mix(in oklch, var(--sky-${r}-primary) 28%, var(--sky-text-dark))`),o(`sky-${r}-g0`,`color-mix(in oklch, var(--sky-${r}-primary) 12%, transparent)`),o(`sky-${r}-g1`,`color-mix(in oklch, var(--sky-${r}-primary) 24%, transparent)`),o(`sky-${r}-g2`,`color-mix(in oklch, var(--sky-${r}-primary) 48%, transparent)`)}),v.forEach(e=>{o(`sky-${e}-primary-hover`,`color-mix(in oklch, var(--sky-${e}-primary) 86%, var(--sky-text-dark))`),o(`sky-${e}-secondary-hover`,`color-mix(in oklch, var(--sky-${e}-secondary) 86%, var(--sky-text-dark))`),o(`sky-${e}-tertiary-hover`,`color-mix(in oklch, var(--sky-${e}-tertiary) 86%, var(--sky-text-dark))`),o(`sky-${e}-quaternary-hover`,`color-mix(in oklch, var(--sky-${e}-quaternary) 86%, var(--sky-text-dark))`),o(`sky-${e}-quinary-hover`,`color-mix(in oklch, var(--sky-${e}-quinary) 86%, var(--sky-text-dark))`)}),v.forEach(e=>{o(`sky-ring-${e}-1`,`0 0 0 1px var(--sky-${e}-primary)`),o(`sky-ring-${e}-2`,`0 0 0 2px var(--sky-${e}-primary)`),o(`sky-ring-${e}-3`,`0 0 0 3px var(--sky-${e}-primary)`),o(`sky-ring-${e}-4`,`0 0 0 4px var(--sky-${e}-primary)`),o(`sky-ring-${e}-5`,`0 0 0 5px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-1`,`inset 0 0 0 1px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-2`,`inset 0 0 0 2px var(--sky-${e}-primary)`),o(`sky-ring-${e}-inset-3`,`inset 0 0 0 3px var(--sky-${e}-primary)`)}),o("sky-focus-ring-color","var(--sky-active-primary)"),o("sky-focus-ring","0 0 0 3px color-mix(in oklch, var(--sky-focus-ring-color, var(--sky-active-primary)) 42%, transparent)"),o("sky-focus-ring-offset","2px"),o("sky-text-white","oklch(1 0 0)"),o("sky-text-black","oklch(0 0 0)"),o("sky-on-color-fallback-light","var(--sky-text-white)"),o("sky-on-color-fallback-dark","var(--sky-text-black)"),o("sky-on-active-primary","var(--sky-on-color-fallback-light)"),o("sky-on-success-primary","var(--sky-on-color-fallback-light)"),o("sky-on-warning-primary","var(--sky-on-color-fallback-light)"),o("sky-on-danger-primary","var(--sky-on-color-fallback-light)"),o("sky-on-info-primary","var(--sky-on-color-fallback-light)"),Object.entries(e.fontSize??{}).forEach(([e,r])=>{o(`sky-font-size-${e}`,r)}),Object.entries(e.fontWeight??{}).forEach(([e,r])=>{o(`sky-font-weight-${e}`,r)}),Object.entries(e.lineHeight??{}).forEach(([e,r])=>{o(`sky-line-height-${e}`,r)}),Object.entries(e.letterSpacing??{}).forEach(([e,r])=>{o(`sky-letter-spacing-${e}`,r)});const $=(r,t)=>e.fontSize?.[r]??t,F=(r,t)=>e.lineHeight?.[r]??t,z=[{key:"xs",size:"xs",line:"tight"},{key:"sm",size:"sm",line:"snug"},{key:"md",size:"md",line:"normal"},{key:"lg",size:"lg",line:"snug"},{key:"xl",size:"xl",line:"snug"},{key:"2xl",size:"2xl",line:"tight"},{key:"3xl",size:"3xl",line:"tight"},{key:"4xl",size:"4xl",line:"tight"}];for(const{key:e,size:r,line:t}of z){const s=$(r,"1rem"),a=F(t,"1.5");o(`sky-font-${e}`,`${s} / ${a} var(--sky-font-sans)`),o(`sky-font-mono-${e}`,`${s} / ${a} var(--sky-font-mono)`)}Object.entries(e.spacing??{}).forEach(([e,r])=>{o(`sky-space-${e}`,r)});const C={body:{size:"md",weight:"normal",line:"normal"},label:{size:"sm",weight:"medium",line:"snug"},caption:{size:"xs",weight:"normal",line:"tight"},title:{size:"lg",weight:"semibold",line:"snug"},heading:{size:"2xl",weight:"bold",line:"tight"},display:{size:"4xl",weight:"bold",line:"tight"}},j=(r,t)=>e.fontWeight?.[r]??t;for(const[e,r]of Object.entries(C)){const t=$(r.size,"1rem"),s=j(r.weight,"400"),a=F(r.line,"1.5");o(`sky-text-${e}`,`${s} ${t}/${a} var(--sky-font-sans)`)}return t}(x(this.userTheme||{})[this.mode],"dark"===this.mode);if(this.toggleAttribute("data-theme-light","light"===this.mode),this.toggleAttribute("data-theme-dark","dark"===this.mode),"host"===this.scope||"both"===this.scope){const r=C(e,":host");if("adoptedStyleSheets"in Document.prototype&&"replaceSync"in CSSStyleSheet.prototype){if(!this.hostSheet){this.hostSheet=new CSSStyleSheet;const e=this.renderRoot.adoptedStyleSheets??[];this.renderRoot.adoptedStyleSheets=[...e,this.hostSheet]}this.hostSheet.replaceSync(r)}else this.hostStyleEl||(this.hostStyleEl=document.createElement("style"),this.renderRoot.appendChild(this.hostStyleEl)),this.hostStyleEl.textContent=r;this.style.removeProperty("color"),this.style.removeProperty("background"),this.applyHostNativeScrollbars(!0)}else this.applyHostNativeScrollbars(!1);if("root"===this.scope||"both"===this.scope){const r=C(e,":root");j(this.rootVarsStyleId,r),this.setRootThemeAttrs(),this.ensureGlobalStyle(),document.body&&(document.body.style.removeProperty("color"),document.body.style.removeProperty("background"),document.body.style.removeProperty("font-family")),this.broadcastTheme()}}pushContext(){const e=x(this.userTheme??{});this._ctx={mode:this.mode,preference:this.preference,theme:e,setPreference:e=>this.setPreference(e),togglePreference:()=>this.togglePreference()}}render(){return t`<slot></slot>`}};B.styles=e`
|
|
2
2
|
:host {
|
|
3
3
|
display: contents;
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sky-theme-provider.js","sources":["../../src/sky-theme-provider/sky-theme-provider.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { createContext, provide } from \"@lit/context\";\n\nexport interface ThemeConfig {\n light: ThemeModeConfig;\n dark: ThemeModeConfig;\n}\nexport type ThemePreference = \"light\" | \"dark\" | \"system\";\nexport type PartialTheme = Partial<ThemeConfig>;\n\n/** Extended ThemeModeConfig: added typography & spacing tokens */\nexport interface ThemeModeConfig {\n glass: {\n baseColor: string;\n /** Optional per-level base shades; if omitted, secondary/tertiary are derived by mixing baseColor with foreground */\n baseShades?: {\n primary?: string;\n secondary?: string;\n tertiary?: string;\n };\n opacities: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n glassHover: {\n color: string;\n opacity: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n overlay: {\n color: string;\n opacities: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n\n fontFamily: string;\n /** Monospace font stack; used for --sky-font-mono and bounded mono presets */\n fontFamilyMono?: string;\n\n /* typography scales & spacing */\n fontSize?: Record<\n \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\",\n string\n >;\n fontWeight?: Record<\n \"thin\" | \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\" | \"extrabold\",\n string\n >;\n lineHeight?: Record<\n \"tight\" | \"snug\" | \"normal\" | \"relaxed\" | \"loose\",\n string\n >;\n letterSpacing?: Record<\n \"tighter\" | \"tight\" | \"normal\" | \"wide\" | \"wider\",\n string\n >;\n glassSurface?: {\n top: number;\n bottom: number;\n };\n spacing?: Record<\n | \"0\"\n | \"px\"\n | \"0.5\"\n | \"1\"\n | \"1.5\"\n | \"2\"\n | \"2.5\"\n | \"3\"\n | \"3.5\"\n | \"4\"\n | \"5\"\n | \"6\"\n | \"8\"\n | \"10\"\n | \"12\"\n | \"16\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"40\"\n | \"48\"\n | \"56\"\n | \"64\",\n string\n >;\n\n /* Simplified color system - only primaries needed */\n color: {\n /* Only primary colors needed - everything else auto-generated */\n background: string;\n foreground: string;\n active: string;\n success: string;\n warning: string;\n danger: string;\n info: string;\n };\n\n /* Existing properties */\n blur: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n radius: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"full\", string>;\n boxshadow: Record<\n \"primary\" | \"secondary\" | \"tertiary\" | \"inset\" | \"hover\",\n string\n >;\n brightness: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n saturation: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n border: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n separator: string;\n\n /** Motion: duration and easing for consistent, themeable transitions */\n motion?: {\n duration?: Record<\"instant\" | \"fast\" | \"normal\" | \"slow\", string>;\n ease?: Record<\"default\" | \"in\" | \"out\" | \"inOut\" | \"bounce\", string>;\n };\n /** Z-index scale for predictable stacking (dropdown, modal, toast, etc.) */\n zIndex?: Record<\n \"base\" | \"dropdown\" | \"sticky\" | \"fixed\" | \"modal\" | \"popover\" | \"toast\" | \"max\",\n number\n >;\n /** Opacity tokens for disabled/muted states */\n opacity?: Record<\"disabled\" | \"muted\" | \"subtle\", number>;\n /** Optional native scrollbar color tints; sizing stays platform-native. */\n scrollbar?: {\n thumb?: string;\n thumbHover?: string;\n track?: string;\n };\n}\n\nconst THEME_KEY = \"theme\";\n\n/* default theme: Pure Glass (sky-ui-example DEFAULT_SITE_THEME_ID) */\nexport const defaultTheme: ThemeConfig = {\n light: {\n glass: {\n baseColor: \"#FFFFFF\",\n baseShades: {\n secondary: \"#F1F5F9\",\n tertiary: \"#E2E8F0\",\n },\n /* Ultra-thin frosted fill — hierarchy via shade + blur */\n opacities: { primary: 0.1, secondary: 0.12, tertiary: 0.16, solid: 0.18 },\n },\n overlay: {\n color: \"#E8EEF6\",\n opacities: { primary: 0.75, secondary: 0.33, tertiary: 0.19, solid: 1.0 },\n },\n glassHover: {\n color: \"#0F172A\",\n opacity: { primary: 0.06, secondary: 0.08, tertiary: 0.1, solid: 1.0 },\n },\n fontFamily:\n \"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyMono:\n \"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace\",\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n },\n fontWeight: {\n thin: \"100\",\n light: \"300\",\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n extrabold: \"800\",\n },\n lineHeight: {\n tight: \"1.1\",\n snug: \"1.25\",\n normal: \"1.5\",\n relaxed: \"1.75\",\n loose: \"2\",\n },\n letterSpacing: {\n tighter: \"-0.03em\",\n tight: \"-0.015em\",\n normal: \"0em\",\n wide: \"0.02em\",\n wider: \"0.04em\",\n },\n spacing: {\n \"0\": \"0px\",\n px: \"1px\",\n \"0.5\": \"0.125rem\",\n \"1\": \"0.25rem\",\n \"1.5\": \"0.375rem\",\n \"2\": \"0.5rem\",\n \"2.5\": \"0.625rem\",\n \"3\": \"0.75rem\",\n \"3.5\": \"0.875rem\",\n \"4\": \"1rem\",\n \"5\": \"1.25rem\",\n \"6\": \"1.5rem\",\n \"8\": \"2rem\",\n \"10\": \"2.5rem\",\n \"12\": \"3rem\",\n \"16\": \"4rem\",\n \"20\": \"5rem\",\n \"24\": \"6rem\",\n \"32\": \"8rem\",\n \"40\": \"10rem\",\n \"48\": \"12rem\",\n \"56\": \"14rem\",\n \"64\": \"16rem\",\n },\n\n color: {\n background: \"#E8EEF6\",\n foreground: \"#0F172A\",\n active: \"#2563EB\",\n success: \"#17C964\",\n warning: \"#F5A524\",\n danger: \"#FF383C\",\n info: \"#6366F1\",\n },\n\n blur: { primary: \"12px\", secondary: \"24px\", tertiary: \"32px\" },\n radius: {\n primary: \"8px\",\n secondary: \"12px\",\n tertiary: \"16px\",\n full: \"9999px\",\n },\n boxshadow: {\n primary: \"0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 8px rgba(15, 23, 42, 0.04)\",\n secondary: \"0 2px 4px rgba(15, 23, 42, 0.04), 0 4px 12px rgba(15, 23, 42, 0.05)\",\n tertiary: \"0 4px 8px rgba(15, 23, 42, 0.05), 0 8px 20px rgba(15, 23, 42, 0.06)\",\n inset:\n \"inset 0 1px 0 rgba(255, 255, 255, 0.55), inset 0 -1px 0 rgba(15, 23, 42, 0.03)\",\n hover: \"0 2px 6px rgba(15, 23, 42, 0.06), 0 6px 16px rgba(15, 23, 42, 0.07)\",\n },\n brightness: { primary: \"1.04\", secondary: \"1.08\", tertiary: \"1.10\" },\n saturation: { primary: \"1.08\", secondary: \"1.14\", tertiary: \"1.20\" },\n separator: \"rgba(15, 23, 42, 0.12)\",\n border: {\n primary: \"1px solid rgba(15, 23, 42, 0.14)\",\n secondary:\n \"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 72%, transparent)\",\n tertiary:\n \"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 52%, transparent)\",\n },\n glassSurface: { top: 0.14, bottom: 0.03 },\n motion: {\n duration: { instant: \"0ms\", fast: \"120ms\", normal: \"200ms\", slow: \"300ms\" },\n ease: {\n default: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n in: \"cubic-bezier(0.4, 0, 1, 1)\",\n out: \"cubic-bezier(0, 0, 0.2, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n bounce: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n },\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1100,\n fixed: 1200,\n modal: 1300,\n popover: 1400,\n toast: 1500,\n max: 9999,\n },\n opacity: { disabled: 0.5, muted: 0.7, subtle: 0.85 },\n scrollbar: {\n track: \"transparent\",\n thumb:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 36%, #0F172A 20%), transparent)\",\n thumbHover:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 54%, #0F172A 16%), transparent)\",\n },\n },\n\n dark: {\n glass: {\n baseColor: \"#141B2D\",\n baseShades: {\n secondary: \"#1A2235\",\n tertiary: \"#222C42\",\n },\n opacities: { primary: 0.16, secondary: 0.18, tertiary: 0.22, solid: 0.24 },\n },\n overlay: {\n color: \"#0B1020\",\n opacities: { primary: 0.75, secondary: 0.33, tertiary: 0.19, solid: 1.0 },\n },\n glassHover: {\n color: \"#E2E8F0\",\n opacity: { primary: 0.08, secondary: 0.1, tertiary: 0.12, solid: 1.0 },\n },\n fontFamily:\n \"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyMono:\n \"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace\",\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n },\n fontWeight: {\n thin: \"100\",\n light: \"300\",\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n extrabold: \"800\",\n },\n lineHeight: {\n tight: \"1.1\",\n snug: \"1.25\",\n normal: \"1.5\",\n relaxed: \"1.75\",\n loose: \"2\",\n },\n letterSpacing: {\n tighter: \"-0.03em\",\n tight: \"-0.015em\",\n normal: \"0em\",\n wide: \"0.02em\",\n wider: \"0.04em\",\n },\n spacing: {\n \"0\": \"0px\",\n px: \"1px\",\n \"0.5\": \"0.125rem\",\n \"1\": \"0.25rem\",\n \"1.5\": \"0.375rem\",\n \"2\": \"0.5rem\",\n \"2.5\": \"0.625rem\",\n \"3\": \"0.75rem\",\n \"3.5\": \"0.875rem\",\n \"4\": \"1rem\",\n \"5\": \"1.25rem\",\n \"6\": \"1.5rem\",\n \"8\": \"2rem\",\n \"10\": \"2.5rem\",\n \"12\": \"3rem\",\n \"16\": \"4rem\",\n \"20\": \"5rem\",\n \"24\": \"6rem\",\n \"32\": \"8rem\",\n \"40\": \"10rem\",\n \"48\": \"12rem\",\n \"56\": \"14rem\",\n \"64\": \"16rem\",\n },\n\n color: {\n background: \"#0B1020\",\n foreground: \"#E2E8F0\",\n active: \"#2563EB\",\n success: \"#17C964\",\n warning: \"#F7B750\",\n danger: \"#DB3B3E\",\n info: \"#818CF8\",\n },\n\n blur: { primary: \"12px\", secondary: \"24px\", tertiary: \"32px\" },\n radius: {\n primary: \"8px\",\n secondary: \"12px\",\n tertiary: \"16px\",\n full: \"9999px\",\n },\n boxshadow: {\n primary: \"0 1px 2px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.22)\",\n secondary: \"0 2px 4px rgba(0, 0, 0, 0.22), 0 4px 14px rgba(0, 0, 0, 0.26)\",\n tertiary: \"0 4px 8px rgba(0, 0, 0, 0.24), 0 8px 20px rgba(0, 0, 0, 0.3)\",\n inset:\n \"inset 0 1px 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.18)\",\n hover: \"0 2px 6px rgba(0, 0, 0, 0.26), 0 6px 16px rgba(0, 0, 0, 0.32)\",\n },\n brightness: { primary: \"1.04\", secondary: \"1.08\", tertiary: \"1.10\" },\n saturation: { primary: \"1.08\", secondary: \"1.14\", tertiary: \"1.20\" },\n separator: \"rgba(226, 232, 240, 0.1)\",\n border: {\n primary: \"1px solid rgba(226, 232, 240, 0.14)\",\n secondary:\n \"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 72%, transparent)\",\n tertiary:\n \"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 52%, transparent)\",\n },\n glassSurface: { top: 0.16, bottom: 0.05 },\n motion: {\n duration: { instant: \"0ms\", fast: \"120ms\", normal: \"200ms\", slow: \"300ms\" },\n ease: {\n default: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n in: \"cubic-bezier(0.4, 0, 1, 1)\",\n out: \"cubic-bezier(0, 0, 0.2, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n bounce: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n },\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1100,\n fixed: 1200,\n modal: 1300,\n popover: 1400,\n toast: 1500,\n max: 9999,\n },\n opacity: { disabled: 0.5, muted: 0.7, subtle: 0.85 },\n scrollbar: {\n track: \"transparent\",\n thumb:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 44%, #E2E8F0 16%), transparent)\",\n thumbHover:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 62%, #E2E8F0 12%), transparent)\",\n },\n },\n};\n\nexport function getThemePreference(): ThemePreference {\n try {\n if (typeof localStorage !== \"undefined\") {\n const v = localStorage.getItem(THEME_KEY) as ThemePreference | null;\n return v === \"light\" || v === \"dark\" || v === \"system\" ? v : \"system\";\n }\n } catch { }\n return \"system\";\n}\n\nexport function resolveActualTheme(pref: ThemePreference): \"light\" | \"dark\" {\n if (typeof window === \"undefined\") return \"light\";\n if (pref === \"system\") {\n try {\n if (window.matchMedia) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n } catch { }\n return \"light\";\n }\n return pref;\n}\n\n/** Returns \"light\" | \"dark\" (prefers provider, falls back to system). SSR-safe: returns \"light\" when document is undefined. */\nexport function getCurrentTheme(): \"light\" | \"dark\" {\n if (typeof document === \"undefined\") return \"light\";\n const de = document.documentElement;\n const v = de.getAttribute(\"data-theme\");\n if (v === \"light\" || v === \"dark\") return v;\n return typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n}\n\n/** Subscribe to theme changes. Returns an unsubscribe function. SSR-safe: returns no-op when window is undefined. */\nexport function onThemeChange(\n cb: (mode: \"light\" | \"dark\", preference?: ThemePreference) => void,\n) {\n if (typeof window === \"undefined\") return () => {};\n const handler = (e: Event) => {\n const { mode, preference } = (e as CustomEvent).detail || {};\n if (mode === \"light\" || mode === \"dark\") cb(mode, preference);\n else cb(getCurrentTheme(), undefined);\n };\n window.addEventListener(\"sky-theme\", handler);\n\n queueMicrotask(() => cb(getCurrentTheme(), undefined));\n return () => window.removeEventListener(\"sky-theme\", handler);\n}\n\nfunction deepMerge<T>(target: T, source: Partial<T>): T {\n const t: any = Array.isArray(target)\n ? [...(target as any)]\n : { ...(target as any) };\n for (const k in source) {\n const sv: any = (source as any)[k];\n if (sv && typeof sv === \"object\" && !Array.isArray(sv)) {\n t[k] = deepMerge((target as any)[k], sv);\n } else {\n t[k] = sv ?? (target as any)[k];\n }\n }\n return t;\n}\n\nlet lastMergeUser: Partial<ThemeConfig> | undefined;\nlet lastMergeResult: ThemeConfig | undefined;\n\nexport function mergeTheme(userTheme: Partial<ThemeConfig>): ThemeConfig {\n if (userTheme === lastMergeUser && lastMergeResult) return lastMergeResult;\n lastMergeResult = {\n light: deepMerge(defaultTheme.light, userTheme.light ?? {}),\n dark: deepMerge(defaultTheme.dark, userTheme.dark ?? {}),\n };\n lastMergeUser = userTheme;\n return lastMergeResult;\n}\n\n/* color & glass helpers */\n\nfunction clampAlpha(alpha: number | undefined, fallback = 1): number {\n const value =\n typeof alpha === \"number\" && Number.isFinite(alpha) ? alpha : fallback;\n\n return Math.max(0, Math.min(1, value));\n}\n\nfunction clampPercent(value: number): number {\n if (!Number.isFinite(value)) return 100;\n return Math.max(0, Math.min(100, Math.round(value)));\n}\n\nfunction isOKLCH(value: string): boolean {\n return /^oklch\\(\\s*[\\d.]+\\s+[\\d.]+\\s+[\\d.]+(?:deg)?(?:\\s*\\/\\s*[\\d.]+%?)?\\s*\\)$/i.test(\n value.trim(),\n );\n}\n\nfunction toOKLCH(hexOrOKLCH: string): string {\n if (isOKLCH(hexOrOKLCH)) return hexOrOKLCH;\n return hexOrOKLCH;\n}\n\nfunction toOKLCHAlpha(hexOrOKLCH: string, alpha: number): string {\n const safeAlpha = clampAlpha(alpha);\n const alphaPct = clampPercent(safeAlpha * 100);\n\n if (safeAlpha <= 0) return \"transparent\";\n if (safeAlpha >= 1) return toOKLCH(hexOrOKLCH);\n\n if (isOKLCH(hexOrOKLCH)) {\n const value = hexOrOKLCH.trim();\n\n return value.includes(\"/\")\n ? value\n : value.replace(/\\)$/, ` / ${alphaPct}%)`);\n }\n\n return `color-mix(in oklch, ${hexOrOKLCH} ${alphaPct}%, transparent)`;\n}\n\nfunction mixOKLCH(colorA: string, amountA: number, colorB: string): string {\n return `color-mix(in oklch, ${colorA} ${clampPercent(amountA)}%, ${colorB})`;\n}\n\n/**\n * generateVarMap emits typography & spacing tokens and semantic role tokens.\n *\n * Glass hierarchy is shade-based with optional per-tier fill opacity:\n * - primary = base/default glass shade\n * - secondary = raised/elevated glass shade\n * - tertiary = floating/modal/popover glass shade\n * - Fill strength: glass.opacities.primary | secondary | tertiary\n * (secondary/tertiary fall back to primary when omitted).\n */\nfunction generateVarMap(\n theme: ThemeModeConfig,\n isDark: boolean,\n): Record<string, string> {\n const out: Record<string, string> = {};\n\n const set = (k: string, v?: string) => {\n if (v != null) out[`--${k}`] = v;\n };\n\n /* base contrast tokens */\n\n set(\"sky-text-dark\", toOKLCH(isDark ? \"#FFFFFF\" : \"#0B1020\"));\n set(\"sky-text-light\", toOKLCH(isDark ? \"#030712\" : \"#FFFFFF\"));\n\n /* font family tokens */\n\n const fontSans = theme.fontFamily;\n const fontMono = theme.fontFamilyMono ?? \"ui-monospace, monospace\";\n\n set(\"sky-font\", fontSans);\n set(\"sky-font-sans\", fontSans);\n set(\"sky-font-mono\", fontMono);\n\n /* background + text tokens */\n\n set(\"sky-background-color\", toOKLCH(theme.color.background));\n set(\"sky-text-primary\", toOKLCH(theme.color.foreground));\n\n const textSteps: Record<\n \"secondary\" | \"tertiary\" | \"quaternary\" | \"quinary\",\n number\n > = isDark\n ? {\n secondary: 82,\n tertiary: 66,\n quaternary: 50,\n quinary: 36,\n }\n : {\n secondary: 76,\n tertiary: 60,\n quaternary: 44,\n quinary: 30,\n };\n\n Object.entries(textSteps).forEach(([level, pct]) => {\n set(\n `sky-text-${level}`,\n `color-mix(in oklch, var(--sky-text-primary) ${pct}%, var(--sky-background-color))`,\n );\n });\n\n [\"primary\", \"secondary\", \"tertiary\", \"quaternary\", \"quinary\"].forEach(\n (level) => {\n set(\n `sky-text-${level}-hover`,\n `color-mix(in oklch, var(--sky-text-${level}) 86%, var(--sky-text-dark))`,\n );\n },\n );\n\n /* shade-based glass generation */\n\n const { baseColor, baseShades, opacities: op } = theme.glass;\n\n const glassShadeAnchor = theme.color.foreground;\n\n const glassShadeSteps = isDark\n ? {\n primary: 96,\n secondary: 88,\n tertiary: 78,\n }\n : {\n primary: 96,\n secondary: 90,\n tertiary: 82,\n };\n\n const glassPrimaryShade =\n baseShades?.primary ??\n mixOKLCH(\n baseColor,\n glassShadeSteps.primary,\n glassShadeAnchor,\n );\n\n const glassSecondaryShade =\n baseShades?.secondary ??\n mixOKLCH(baseColor, glassShadeSteps.secondary, glassShadeAnchor);\n\n const glassTertiaryShade =\n baseShades?.tertiary ??\n mixOKLCH(baseColor, glassShadeSteps.tertiary, glassShadeAnchor);\n\n const glassStrengthFallback = isDark ? 0.4 : 0.34;\n const glassStrength = {\n primary: clampAlpha(op.primary, glassStrengthFallback),\n secondary: clampAlpha(\n op.secondary ?? op.primary,\n glassStrengthFallback\n ),\n tertiary: clampAlpha(op.tertiary ?? op.primary, glassStrengthFallback),\n // Solid surface fill (inputs / actions). Defaults fully opaque, but themes\n // can lower `opacities.solid` for a translucent \"frosted solid\" look.\n solid: clampAlpha(op.solid, 1),\n };\n\n set(\n \"sky-glass-primary\",\n toOKLCHAlpha(glassPrimaryShade, glassStrength.primary)\n );\n set(\n \"sky-glass-secondary\",\n toOKLCHAlpha(glassSecondaryShade, glassStrength.secondary)\n );\n set(\n \"sky-glass-tertiary\",\n toOKLCHAlpha(glassTertiaryShade, glassStrength.tertiary)\n );\n\n set(\"sky-glass-solid\", toOKLCHAlpha(baseColor, glassStrength.solid));\n\n const glassSurfaceTopAlpha = clampAlpha(\n theme.glassSurface?.top,\n isDark ? 0.26 : 0.24,\n );\n\n const glassSurfaceBottomAlpha = clampAlpha(\n theme.glassSurface?.bottom,\n isDark ? 0.08 : 0.06,\n );\n\n set(\n \"sky-glass-surface\",\n `linear-gradient(\n 180deg,\n ${toOKLCHAlpha(glassSecondaryShade, glassSurfaceTopAlpha)},\n ${toOKLCHAlpha(glassPrimaryShade, glassSurfaceBottomAlpha)}\n )`,\n );\n\n /* overlay tokens */\n\n Object.entries(theme.overlay.opacities).forEach(([k, v]) => {\n set(`sky-overlay-${k}`, toOKLCHAlpha(theme.overlay.color, v));\n });\n\n /* hover overlay tokens */\n\n Object.entries(theme.glassHover.opacity).forEach(([k, v]) => {\n set(`sky-hover-${k}`, toOKLCHAlpha(theme.glassHover.color, v));\n });\n\n /* border / radius / blur / effects */\n\n Object.entries(theme.border).forEach(([k, v]) => {\n set(`sky-border-${k}`, v);\n });\n\n Object.entries(theme.radius).forEach(([k, v]) => {\n set(`sky-radius-${k}`, v);\n });\n\n Object.entries(theme.blur).forEach(([k, v]) => {\n set(`sky-blur-${k}`, `blur(${v})`);\n });\n\n Object.entries(theme.brightness).forEach(([k, v]) => {\n set(`sky-brightness-${k}`, `brightness(${v})`);\n });\n\n Object.entries(theme.saturation).forEach(([k, v]) => {\n set(`sky-saturation-${k}`, `saturate(${v})`);\n });\n\n Object.entries(theme.boxshadow).forEach(([k, v]) => {\n set(`sky-box-shadow-${k}`, v);\n });\n\n set(\"sky-border-light\", theme.separator);\n\n /* motion tokens */\n\n Object.entries(theme.motion?.duration ?? {}).forEach(([k, v]) => {\n set(`sky-duration-${k}`, v);\n });\n\n Object.entries(theme.motion?.ease ?? {}).forEach(([k, v]) => {\n set(`sky-ease-${k}`, v);\n });\n\n set(\n \"sky-transition-default\",\n [\n \"background-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"border-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"box-shadow var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"transform var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"opacity var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n ].join(\", \"),\n );\n\n set(\n \"sky-transition-fast\",\n [\n \"background-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"border-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"box-shadow var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"opacity var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n ].join(\", \"),\n );\n\n /* z-index tokens */\n\n Object.entries(theme.zIndex ?? {}).forEach(([k, v]) => {\n set(`sky-z-${k}`, String(v));\n });\n\n /* opacity tokens */\n\n Object.entries(theme.opacity ?? {}).forEach(([k, v]) => {\n set(`sky-opacity-${k}`, String(v));\n });\n\n /* native scrollbar color tokens (size stays OS-native) */\n\n const scrollbar = theme.scrollbar;\n set(\"sky-scrollbar-track\", scrollbar?.track ?? \"transparent\");\n set(\n \"sky-scrollbar-thumb\",\n scrollbar?.thumb ??\n (isDark\n ? \"color-mix(in oklch, var(--sky-text-tertiary) 78%, transparent)\"\n : \"color-mix(in oklch, var(--sky-text-tertiary) 68%, transparent)\"),\n );\n set(\n \"sky-scrollbar-thumb-hover\",\n scrollbar?.thumbHover ??\n (isDark\n ? \"color-mix(in oklch, var(--sky-text-secondary) 52%, var(--sky-active-primary))\"\n : \"color-mix(in oklch, var(--sky-text-secondary) 44%, var(--sky-active-primary))\"),\n );\n\n /* text shadow */\n\n set(\n \"sky-text-shadow-on-glass\",\n isDark\n ? \"0 1px 2px rgba(0,0,0,0.45)\"\n : \"0 1px 1px rgba(255,255,255,0.55)\",\n );\n\n /* semantic color scales */\n\n const semanticColors = [\n \"active\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n ] as const;\n\n semanticColors.forEach((key) => {\n const baseColor = theme.color[key];\n\n set(`sky-${key}-primary`, baseColor);\n\n set(\n `sky-${key}-secondary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 82%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-tertiary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 62%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-quaternary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 42%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-quinary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 24%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-primary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 88%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-secondary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 72%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-tertiary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 56%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quaternary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 40%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quinary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 28%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-g0`,\n `color-mix(in oklch, var(--sky-${key}-primary) 12%, transparent)`,\n );\n\n set(\n `sky-${key}-g1`,\n `color-mix(in oklch, var(--sky-${key}-primary) 24%, transparent)`,\n );\n\n set(\n `sky-${key}-g2`,\n `color-mix(in oklch, var(--sky-${key}-primary) 48%, transparent)`,\n );\n });\n\n /* semantic hover tokens */\n\n semanticColors.forEach((key) => {\n set(\n `sky-${key}-primary-hover`,\n `color-mix(in oklch, var(--sky-${key}-primary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-secondary-hover`,\n `color-mix(in oklch, var(--sky-${key}-secondary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-tertiary-hover`,\n `color-mix(in oklch, var(--sky-${key}-tertiary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quaternary-hover`,\n `color-mix(in oklch, var(--sky-${key}-quaternary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quinary-hover`,\n `color-mix(in oklch, var(--sky-${key}-quinary) 86%, var(--sky-text-dark))`,\n );\n });\n\n /* ring tokens */\n\n semanticColors.forEach((key) => {\n set(`sky-ring-${key}-1`, `0 0 0 1px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-2`, `0 0 0 2px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-3`, `0 0 0 3px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-4`, `0 0 0 4px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-5`, `0 0 0 5px var(--sky-${key}-primary)`);\n\n set(\n `sky-ring-${key}-inset-1`,\n `inset 0 0 0 1px var(--sky-${key}-primary)`,\n );\n\n set(\n `sky-ring-${key}-inset-2`,\n `inset 0 0 0 2px var(--sky-${key}-primary)`,\n );\n\n set(\n `sky-ring-${key}-inset-3`,\n `inset 0 0 0 3px var(--sky-${key}-primary)`,\n );\n });\n\n // Focus ring: nested var() resolves on this host, then inherits substituted.\n // Components that set `--sky-focus-ring-color` must also redeclare `--sky-focus-ring`\n // (see `helper/styles/focus-ring.ts`).\n set(\"sky-focus-ring-color\", \"var(--sky-active-primary)\");\n set(\n \"sky-focus-ring\",\n \"0 0 0 3px color-mix(in oklch, var(--sky-focus-ring-color, var(--sky-active-primary)) 42%, transparent)\",\n );\n\n set(\"sky-focus-ring-offset\", \"2px\");\n\n set(\"sky-text-white\", \"oklch(1 0 0)\");\n set(\"sky-text-black\", \"oklch(0 0 0)\");\n\n /* on-color fallbacks (solid fills; prefer CSS contrast-color() when supported) */\n set(\"sky-on-color-fallback-light\", \"var(--sky-text-white)\");\n set(\"sky-on-color-fallback-dark\", \"var(--sky-text-black)\");\n\n // Static no-@supports fallbacks (assume dark fill → light FG). Components that\n // paint solid fills should enhance with contrast-color(var(--_fill)).\n set(\"sky-on-active-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-success-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-warning-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-danger-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-info-primary\", \"var(--sky-on-color-fallback-light)\");\n\n /* typography scale tokens */\n\n Object.entries(theme.fontSize ?? {}).forEach(([k, v]) => {\n set(`sky-font-size-${k}`, v);\n });\n\n Object.entries(theme.fontWeight ?? {}).forEach(([k, v]) => {\n set(`sky-font-weight-${k}`, v);\n });\n\n Object.entries(theme.lineHeight ?? {}).forEach(([k, v]) => {\n set(`sky-line-height-${k}`, v);\n });\n\n Object.entries(theme.letterSpacing ?? {}).forEach(([k, v]) => {\n set(`sky-letter-spacing-${k}`, v);\n });\n\n /* font shorthand presets */\n\n const getFontSize = (key: string, fallback: string) =>\n (theme.fontSize as Record<string, string> | undefined)?.[key] ?? fallback;\n\n const getLineHeight = (key: string, fallback: string) =>\n (theme.lineHeight as Record<string, string> | undefined)?.[key] ??\n fallback;\n\n const fontPresets: Array<{ key: string; size: string; line: string }> = [\n { key: \"xs\", size: \"xs\", line: \"tight\" },\n { key: \"sm\", size: \"sm\", line: \"snug\" },\n { key: \"md\", size: \"md\", line: \"normal\" },\n { key: \"lg\", size: \"lg\", line: \"snug\" },\n { key: \"xl\", size: \"xl\", line: \"snug\" },\n { key: \"2xl\", size: \"2xl\", line: \"tight\" },\n { key: \"3xl\", size: \"3xl\", line: \"tight\" },\n { key: \"4xl\", size: \"4xl\", line: \"tight\" },\n ];\n\n for (const { key, size, line } of fontPresets) {\n const sizeVal = getFontSize(size, \"1rem\");\n const lineVal = getLineHeight(line, \"1.5\");\n\n set(`sky-font-${key}`, `${sizeVal} / ${lineVal} var(--sky-font-sans)`);\n set(`sky-font-mono-${key}`, `${sizeVal} / ${lineVal} var(--sky-font-mono)`);\n }\n\n /* spacing tokens */\n\n Object.entries(theme.spacing ?? {}).forEach(([k, v]) => {\n set(`sky-space-${k}`, v);\n });\n\n /* semantic typography role tokens */\n\n const roleMap = {\n body: { size: \"md\", weight: \"normal\", line: \"normal\" },\n label: { size: \"sm\", weight: \"medium\", line: \"snug\" },\n caption: { size: \"xs\", weight: \"normal\", line: \"tight\" },\n title: { size: \"lg\", weight: \"semibold\", line: \"snug\" },\n heading: { size: \"2xl\", weight: \"bold\", line: \"tight\" },\n display: { size: \"4xl\", weight: \"bold\", line: \"tight\" },\n } as const;\n\n const getFontWeight = (key: string, fallback: string) =>\n (theme.fontWeight as Record<string, string> | undefined)?.[key] ??\n fallback;\n\n for (const [role, cfg] of Object.entries(roleMap)) {\n const sizeVal = getFontSize(cfg.size, \"1rem\");\n const weightVal = getFontWeight(cfg.weight, \"400\");\n const lineVal = getLineHeight(cfg.line, \"1.5\");\n\n set(\n `sky-text-${role}`,\n `${weightVal} ${sizeVal}/${lineVal} var(--sky-font-sans)`,\n );\n }\n\n return out;\n}\n\n/** Expand comma-separated selectors so pseudo-elements attach to each branch. */\nfunction withPseudoSelectors(selector: string, pseudo: string): string {\n return selector\n .split(\",\")\n .map((part) => `${part.trim()}${pseudo}`)\n .join(\",\\n\");\n}\n\n/** Tints native scrollbars from `--sky-scrollbar-*` tokens; width/thickness stay OS-native. */\nfunction buildNativeScrollbarCSS(selector: string): string {\n const webkitTrack = withPseudoSelectors(selector, \"::-webkit-scrollbar-track\");\n const webkitThumb = withPseudoSelectors(selector, \"::-webkit-scrollbar-thumb\");\n const webkitThumbHover = withPseudoSelectors(\n selector,\n \"::-webkit-scrollbar-thumb:hover\",\n );\n\n return `\n${selector} {\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n}\n${webkitTrack} {\n background: var(--sky-scrollbar-track);\n}\n${webkitThumb} {\n background-color: var(--sky-scrollbar-thumb);\n}\n${webkitThumbHover} {\n background-color: var(--sky-scrollbar-thumb-hover);\n}\n`.trim();\n}\n\nconst NATIVE_SCROLLBAR_ROOT_SELECTOR = \"html, body, *\";\nconst NATIVE_SCROLLBAR_HOST_SELECTOR =\n \"sky-theme-provider[sky-native-scrollbars], sky-theme-provider[sky-native-scrollbars] *\";\n\n/* buildVarCSS keeps same semantics */\nfunction buildVarCSS(vars: Record<string, string>, selector: string) {\n // Custom-property names containing \".\" (e.g. --sky-space-2.5) are invalid CSS\n // idents unless the dot is escaped. Without this, fractional spacing tokens are\n // dropped by the parser and never defined. Escape the dot in the name only.\n const body = Object.entries(vars)\n .map(([k, v]) => `${k.replace(/\\./g, \"\\\\.\")}:${v};`)\n .join(\"\");\n return `${selector}{${body}}`;\n}\n\nfunction ensureStyleTag(id: string, cssText: string): HTMLStyleElement {\n let tag = document.getElementById(id) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement(\"style\");\n tag.id = id;\n document.head.appendChild(tag);\n }\n tag.textContent = cssText;\n return tag;\n}\n\n/* context + provider implementation (unchanged except for token emission) */\nexport interface ThemeContextValue {\n mode: \"light\" | \"dark\";\n preference: ThemePreference;\n theme: ThemeConfig;\n setPreference: (pref: ThemePreference) => void;\n togglePreference: () => ThemePreference;\n}\nexport const themeContext = createContext<ThemeContextValue>(\"sky/theme\");\ntype ThemeScope = \"root\" | \"host\" | \"both\";\nexport type SkyThemeProviderScope = ThemeScope;\nexport type SkyThemeProviderGlobalChangeDetail = {\n mode: \"light\" | \"dark\";\n preference: ThemePreference;\n};\n\n\n/**\n * @element sky-theme-provider\n *\n * @summary Theme provider for light, dark, and system preferences with CSS variable generation.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://sky-ui.com/components/theme-provider\n *\n * @slot - Default slot for content that will receive theme context.\n *\n * @csspart container - The theme provider container element.\n *\n * @property {Partial<ThemeConfig>} userTheme - Custom theme overrides.\n * @property {SkyThemeProviderScope} scope - Where CSS variables are applied.\n * @property {\"light\"|\"dark\"|\"system\"} preference - Theme preference.\n * @property {boolean} persist - Persists preference in localStorage.\n * @property {boolean} broadcast - Broadcasts theme changes through events.\n *\n * @fires {CustomEvent<SkyThemeProviderGlobalChangeDetail>} theme-change-global - Fired when theme changes globally.\n * @fires {CustomEvent<SkyThemeProviderGlobalChangeDetail>} sky-theme - Fired on global theme updates.\n *\n * @Behavior\n * - Resolves light/dark mode from explicit or system preference.\n * - Emits CSS custom properties for color, typography, spacing, and motion tokens.\n * - Provides theme context for descendant components.\n *\n * @example\n * ```html\n * <sky-theme-provider preference=\"system\" scope=\"both\">\n * <app-content></app-content>\n * </sky-theme-provider>\n * ```\n * ```vue\n * <template>\n * <sky-theme-provider :user-theme=\"theme\" preference=\"dark\" scope=\"both\">\n * <app-content />\n * </sky-theme-provider>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return <sky-theme-provider userTheme={theme} preference=\"dark\" scope=\"both\"><app-content /></sky-theme-provider>;\n * }\n * ```\n */\n@customElement(\"sky-theme-provider\")\nexport class SkyThemeProvider extends LitElement {\n /** User theme overrides. From HTML pass JSON, e.g. usertheme='{\"primary\":\"#0af\"}'. */\n @property({ type: Object }) userTheme?: PartialTheme;\n\n /** Where to apply CSS vars and global CSS. Default: \"root\". */\n @property({ type: String, reflect: true }) scope: ThemeScope = \"root\";\n\n @property({ type: String, reflect: true })\n preference: ThemePreference = getThemePreference();\n\n @state() private mode: \"light\" | \"dark\" = \"light\";\n\n @provide({ context: themeContext })\n private _ctx!: ThemeContextValue;\n\n @property({ type: Boolean }) persist: boolean = true;\n @property({ type: Boolean }) broadcast: boolean = true;\n\n private media: MediaQueryList | null = null;\n private globalStyleId = \"sky-theme-provider-global-style\";\n private hostScrollbarStyleId = \"sky-theme-provider-host-scrollbar\";\n private hostSheet: CSSStyleSheet | null = null;\n private hostStyleEl: HTMLStyleElement | null = null;\n private rootVarsStyleId = \"sky-theme-vars-root\";\n\n static styles = css`\n :host {\n display: contents;\n }\n\n :host {\n font-family: var(--sky-font);\n color: var(--sky-text-primary);\n background: var(--sky-background-color);\n }\n `;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.mode = resolveActualTheme(this.preference);\n this.pushContext();\n this.setupSystemWatcher();\n if (this.scope === \"host\") {\n this.applyVariables();\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.media?.removeEventListener(\"change\", this.onSystemChange);\n\n if (this.hostStyleEl && this.hostStyleEl.parentNode) {\n this.hostStyleEl.parentNode.removeChild(this.hostStyleEl);\n this.hostStyleEl = null;\n }\n\n if (this.scope === \"host\") {\n const s = document.getElementById(this.globalStyleId);\n if (s) s.remove();\n const hostScrollbar = document.getElementById(this.hostScrollbarStyleId);\n if (hostScrollbar) hostScrollbar.remove();\n }\n }\n\n protected firstUpdated(): void {\n if (this.scope === \"root\" || this.scope === \"both\") {\n this.applyVariables();\n }\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>): void {\n super.updated(changedProperties);\n\n // Ensure context is updated after DOM updates\n if (\n changedProperties.has(\"userTheme\") ||\n changedProperties.has(\"mode\") ||\n changedProperties.has(\"preference\") ||\n changedProperties.has(\"scope\")\n ) {\n this.pushContext();\n }\n }\n\n protected override willUpdate(changed: Map<string, unknown>): void {\n const prefChanged = changed.has(\"preference\");\n const scopeChanged = changed.has(\"scope\");\n const userThemeChanged = changed.has(\"userTheme\");\n\n let modeChanged = false;\n\n if (prefChanged || scopeChanged) {\n const nextMode = resolveActualTheme(this.preference);\n if (nextMode !== this.mode) {\n this.mode = nextMode;\n modeChanged = true;\n }\n }\n\n const hydrated = !!this.hasUpdated;\n const canApplyNow = this.scope === \"host\" || hydrated;\n if (canApplyNow && (modeChanged || scopeChanged || userThemeChanged)) {\n this.applyVariables();\n }\n\n if (prefChanged || modeChanged || userThemeChanged || scopeChanged) {\n this.pushContext();\n\n // Avoid broadcasting before hydration when scope touches root. Host-only providers still broadcast\n // when userTheme / mode / preference updates so consumers (e.g. sky-chart mono palette) can refresh.\n const hostThemeChanged =\n this.scope === \"host\" &&\n hydrated &&\n (userThemeChanged || prefChanged || modeChanged || scopeChanged);\n if (\n this.broadcast &&\n ((this.scope === \"root\" || this.scope === \"both\") || hostThemeChanged)\n ) {\n this.broadcastTheme();\n }\n }\n }\n\n private setRootThemeAttrs() {\n const de = document.documentElement;\n de.toggleAttribute(\"data-theme-light\", this.mode === \"light\");\n de.toggleAttribute(\"data-theme-dark\", this.mode === \"dark\");\n de.setAttribute(\"data-theme\", this.mode);\n (de.style as any).colorScheme = this.mode;\n de.classList.toggle(\"dark\", this.mode === \"dark\");\n }\n\n private broadcastTheme() {\n const detail = { mode: this.mode, preference: this.preference };\n window.dispatchEvent(new CustomEvent(\"sky-theme\", { detail }));\n\n window.dispatchEvent(new CustomEvent(\"theme-change-global\", { detail }));\n }\n\n public setPreference(pref: ThemePreference) {\n try {\n if (this.persist && (this.scope === \"root\" || this.scope === \"both\")) {\n localStorage.setItem(\"theme\", pref);\n }\n } catch { }\n this.preference = pref;\n\n if (this.broadcast && (this.scope === \"root\" || this.scope === \"both\")) {\n this.dispatchEvent(\n new CustomEvent(\"theme-change-global\", {\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n\n public togglePreference(): ThemePreference {\n const current = this.preference ?? getThemePreference();\n const next: ThemePreference =\n current === \"light\" ? \"dark\" : current === \"dark\" ? \"system\" : \"light\";\n this.setPreference(next);\n return next;\n }\n\n private onSystemChange = () => {\n if ((this.preference ?? getThemePreference()) === \"system\") {\n this.mode = resolveActualTheme(\"system\");\n this.applyVariables();\n this.pushContext();\n this.dispatchEvent(\n new CustomEvent(\"theme-change-global\", {\n bubbles: true,\n composed: true,\n }),\n );\n }\n };\n\n private setupSystemWatcher() {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n this.media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.media.addEventListener(\"change\", this.onSystemChange);\n }\n\n /** Ensure global body + dialog + native scrollbar rules when scope touches root. */\n private ensureGlobalStyle() {\n if (typeof document === \"undefined\") return;\n const cssText = `\n body {\n font-family: var(--sky-font);\n margin: 0;\n padding: 0;\n background: var(--sky-background-color);\n color: var(--sky-text-primary);\n }\n\n html[data-sky-dialog-open=\"true\"] {\n overflow: hidden !important;\n position: relative;\n height: 100%;\n }\n\n ${buildNativeScrollbarCSS(NATIVE_SCROLLBAR_ROOT_SELECTOR)}\n `.trim();\n\n let tag = document.getElementById(\n this.globalStyleId,\n ) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement(\"style\");\n tag.id = this.globalStyleId;\n tag.textContent = cssText;\n document.head.appendChild(tag);\n } else {\n tag.textContent = cssText;\n }\n }\n\n private applyHostNativeScrollbars(enabled: boolean) {\n if (typeof document === \"undefined\") return;\n this.toggleAttribute(\"sky-native-scrollbars\", enabled);\n if (!enabled) {\n const tag = document.getElementById(this.hostScrollbarStyleId);\n if (tag) tag.remove();\n return;\n }\n ensureStyleTag(\n this.hostScrollbarStyleId,\n buildNativeScrollbarCSS(NATIVE_SCROLLBAR_HOST_SELECTOR),\n );\n }\n\n private applyVariables() {\n const full = mergeTheme(this.userTheme || {});\n const modeTheme = full[this.mode];\n const isDark = this.mode === \"dark\";\n const vars = generateVarMap(modeTheme, isDark);\n\n this.toggleAttribute(\"data-theme-light\", this.mode === \"light\");\n this.toggleAttribute(\"data-theme-dark\", this.mode === \"dark\");\n\n if (this.scope === \"host\" || this.scope === \"both\") {\n const cssText = buildVarCSS(vars, \":host\");\n\n if (\n \"adoptedStyleSheets\" in Document.prototype &&\n \"replaceSync\" in CSSStyleSheet.prototype\n ) {\n if (!this.hostSheet) {\n this.hostSheet = new CSSStyleSheet();\n\n const current =\n (this.renderRoot as ShadowRoot).adoptedStyleSheets ?? [];\n (this.renderRoot as ShadowRoot).adoptedStyleSheets = [\n ...current,\n this.hostSheet,\n ];\n }\n this.hostSheet.replaceSync(cssText);\n } else {\n if (!this.hostStyleEl) {\n this.hostStyleEl = document.createElement(\"style\");\n this.renderRoot.appendChild(this.hostStyleEl);\n }\n this.hostStyleEl.textContent = cssText;\n }\n\n this.style.removeProperty(\"color\");\n this.style.removeProperty(\"background\");\n\n this.applyHostNativeScrollbars(true);\n } else {\n this.applyHostNativeScrollbars(false);\n }\n\n if (this.scope === \"root\" || this.scope === \"both\") {\n const cssText = buildVarCSS(vars, \":root\");\n ensureStyleTag(this.rootVarsStyleId, cssText);\n\n this.setRootThemeAttrs();\n this.ensureGlobalStyle();\n\n if (document.body) {\n document.body.style.removeProperty(\"color\");\n document.body.style.removeProperty(\"background\");\n document.body.style.removeProperty(\"font-family\");\n }\n\n this.broadcastTheme();\n }\n }\n\n private pushContext() {\n const mergedTheme = mergeTheme(this.userTheme ?? {});\n\n this._ctx = {\n mode: this.mode,\n preference: this.preference,\n theme: mergedTheme,\n setPreference: (pref: ThemePreference) => this.setPreference(pref),\n togglePreference: () => this.togglePreference(),\n };\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n"],"names":["defaultTheme","light","glass","baseColor","baseShades","secondary","tertiary","opacities","primary","solid","overlay","color","glassHover","opacity","fontFamily","fontFamilyMono","fontSize","xs","sm","md","lg","xl","fontWeight","thin","normal","medium","semibold","bold","extrabold","lineHeight","tight","snug","relaxed","loose","letterSpacing","tighter","wide","wider","spacing","px","background","foreground","active","success","warning","danger","info","blur","radius","full","boxshadow","inset","hover","brightness","saturation","separator","border","glassSurface","top","bottom","motion","duration","instant","fast","slow","ease","default","in","out","inOut","bounce","zIndex","base","dropdown","sticky","fixed","modal","popover","toast","max","disabled","muted","subtle","scrollbar","track","thumb","thumbHover","dark","getThemePreference","localStorage","v","getItem","resolveActualTheme","pref","window","matchMedia","matches","getCurrentTheme","document","documentElement","getAttribute","onThemeChange","cb","handler","e","mode","preference","detail","addEventListener","queueMicrotask","removeEventListener","deepMerge","target","source","t","Array","isArray","k","sv","lastMergeUser","lastMergeResult","mergeTheme","userTheme","clampAlpha","alpha","fallback","value","Number","isFinite","Math","min","clampPercent","round","isOKLCH","test","trim","toOKLCH","hexOrOKLCH","toOKLCHAlpha","safeAlpha","alphaPct","includes","replace","mixOKLCH","colorA","amountA","colorB","withPseudoSelectors","selector","pseudo","split","map","part","join","buildNativeScrollbarCSS","buildVarCSS","vars","Object","entries","ensureStyleTag","id","cssText","tag","getElementById","createElement","head","appendChild","textContent","themeContext","createContext","SkyThemeProvider","LitElement","constructor","super","arguments","this","scope","persist","broadcast","media","globalStyleId","hostScrollbarStyleId","hostSheet","hostStyleEl","rootVarsStyleId","onSystemChange","applyVariables","pushContext","dispatchEvent","CustomEvent","bubbles","composed","connectedCallback","setupSystemWatcher","disconnectedCallback","parentNode","removeChild","s","remove","hostScrollbar","firstUpdated","updated","changedProperties","has","willUpdate","changed","prefChanged","scopeChanged","userThemeChanged","modeChanged","nextMode","hydrated","hasUpdated","hostThemeChanged","broadcastTheme","setRootThemeAttrs","de","toggleAttribute","setAttribute","style","colorScheme","classList","toggle","setPreference","setItem","togglePreference","current","next","ensureGlobalStyle","applyHostNativeScrollbars","enabled","theme","isDark","set","fontSans","fontMono","textSteps","quaternary","quinary","forEach","level","pct","op","glassShadeAnchor","glassShadeSteps","glassPrimaryShade","glassSecondaryShade","glassTertiaryShade","glassStrengthFallback","glassStrength","glassSurfaceTopAlpha","glassSurfaceBottomAlpha","String","semanticColors","key","getFontSize","getLineHeight","fontPresets","size","line","sizeVal","lineVal","roleMap","body","weight","label","caption","title","heading","display","getFontWeight","role","cfg","weightVal","generateVarMap","Document","prototype","CSSStyleSheet","renderRoot","adoptedStyleSheets","replaceSync","removeProperty","mergedTheme","_ctx","render","html","styles","css","__decorateClass","property","type","reflect","state","provide","context","Boolean","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sky-theme-provider.js","sources":["../../src/sky-theme-provider/sky-theme-provider.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { createContext, provide } from \"@lit/context\";\n\nexport interface ThemeConfig {\n light: ThemeModeConfig;\n dark: ThemeModeConfig;\n}\nexport type ThemePreference = \"light\" | \"dark\" | \"system\";\nexport type PartialTheme = Partial<ThemeConfig>;\n\n/** Extended ThemeModeConfig: added typography & spacing tokens */\nexport interface ThemeModeConfig {\n glass: {\n baseColor: string;\n /** Optional per-level base shades; if omitted, secondary/tertiary are derived by mixing baseColor with foreground */\n baseShades?: {\n primary?: string;\n secondary?: string;\n tertiary?: string;\n };\n opacities: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n glassHover: {\n color: string;\n opacity: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n overlay: {\n color: string;\n opacities: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"solid\", number>;\n };\n\n fontFamily: string;\n /** Monospace font stack; used for --sky-font-mono and bounded mono presets */\n fontFamilyMono?: string;\n\n /* typography scales & spacing */\n fontSize?: Record<\n \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"6xl\",\n string\n >;\n fontWeight?: Record<\n \"thin\" | \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\" | \"extrabold\",\n string\n >;\n lineHeight?: Record<\n \"tight\" | \"snug\" | \"normal\" | \"relaxed\" | \"loose\",\n string\n >;\n letterSpacing?: Record<\n \"tighter\" | \"tight\" | \"normal\" | \"wide\" | \"wider\",\n string\n >;\n glassSurface?: {\n top: number;\n bottom: number;\n };\n spacing?: Record<\n | \"0\"\n | \"px\"\n | \"0.5\"\n | \"1\"\n | \"1.5\"\n | \"2\"\n | \"2.5\"\n | \"3\"\n | \"3.5\"\n | \"4\"\n | \"5\"\n | \"6\"\n | \"8\"\n | \"10\"\n | \"12\"\n | \"16\"\n | \"20\"\n | \"24\"\n | \"32\"\n | \"40\"\n | \"48\"\n | \"56\"\n | \"64\",\n string\n >;\n\n /* Simplified color system - only primaries needed */\n color: {\n /* Only primary colors needed - everything else auto-generated */\n background: string;\n foreground: string;\n active: string;\n success: string;\n warning: string;\n danger: string;\n info: string;\n };\n\n /* Existing properties */\n blur: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n radius: Record<\"primary\" | \"secondary\" | \"tertiary\" | \"full\", string>;\n boxshadow: Record<\n \"primary\" | \"secondary\" | \"tertiary\" | \"inset\" | \"hover\",\n string\n >;\n brightness: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n saturation: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n border: Record<\"primary\" | \"secondary\" | \"tertiary\", string>;\n separator: string;\n\n /** Motion: duration and easing for consistent, themeable transitions */\n motion?: {\n duration?: Record<\"instant\" | \"fast\" | \"normal\" | \"slow\", string>;\n ease?: Record<\"default\" | \"in\" | \"out\" | \"inOut\" | \"bounce\", string>;\n };\n /** Z-index scale for predictable stacking (dropdown, modal, toast, etc.) */\n zIndex?: Record<\n \"base\" | \"dropdown\" | \"sticky\" | \"fixed\" | \"modal\" | \"popover\" | \"toast\" | \"max\",\n number\n >;\n /** Opacity tokens for disabled/muted states */\n opacity?: Record<\"disabled\" | \"muted\" | \"subtle\", number>;\n /** Optional native scrollbar color tints; sizing stays platform-native. */\n scrollbar?: {\n thumb?: string;\n thumbHover?: string;\n track?: string;\n };\n}\n\nconst THEME_KEY = \"theme\";\n\n/* default theme: Pure Glass (sky-ui-example DEFAULT_SITE_THEME_ID) */\nexport const defaultTheme: ThemeConfig = {\n light: {\n glass: {\n baseColor: \"#FFFFFF\",\n baseShades: {\n secondary: \"#F1F5F9\",\n tertiary: \"#E2E8F0\",\n },\n /* Ultra-thin frosted fill — hierarchy via shade + blur */\n opacities: { primary: 0.1, secondary: 0.12, tertiary: 0.16, solid: 0.18 },\n },\n overlay: {\n color: \"#E8EEF6\",\n opacities: { primary: 0.75, secondary: 0.33, tertiary: 0.19, solid: 1.0 },\n },\n glassHover: {\n color: \"#0F172A\",\n opacity: { primary: 0.06, secondary: 0.08, tertiary: 0.1, solid: 1.0 },\n },\n fontFamily:\n \"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyMono:\n \"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace\",\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n },\n fontWeight: {\n thin: \"100\",\n light: \"300\",\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n extrabold: \"800\",\n },\n lineHeight: {\n tight: \"1.1\",\n snug: \"1.25\",\n normal: \"1.5\",\n relaxed: \"1.75\",\n loose: \"2\",\n },\n letterSpacing: {\n tighter: \"-0.03em\",\n tight: \"-0.015em\",\n normal: \"0em\",\n wide: \"0.02em\",\n wider: \"0.04em\",\n },\n spacing: {\n \"0\": \"0px\",\n px: \"1px\",\n \"0.5\": \"0.125rem\",\n \"1\": \"0.25rem\",\n \"1.5\": \"0.375rem\",\n \"2\": \"0.5rem\",\n \"2.5\": \"0.625rem\",\n \"3\": \"0.75rem\",\n \"3.5\": \"0.875rem\",\n \"4\": \"1rem\",\n \"5\": \"1.25rem\",\n \"6\": \"1.5rem\",\n \"8\": \"2rem\",\n \"10\": \"2.5rem\",\n \"12\": \"3rem\",\n \"16\": \"4rem\",\n \"20\": \"5rem\",\n \"24\": \"6rem\",\n \"32\": \"8rem\",\n \"40\": \"10rem\",\n \"48\": \"12rem\",\n \"56\": \"14rem\",\n \"64\": \"16rem\",\n },\n\n color: {\n background: \"#E8EEF6\",\n foreground: \"#0F172A\",\n active: \"#2563EB\",\n success: \"#17C964\",\n warning: \"#F5A524\",\n danger: \"#FF383C\",\n info: \"#6366F1\",\n },\n\n blur: { primary: \"12px\", secondary: \"24px\", tertiary: \"32px\" },\n radius: {\n primary: \"8px\",\n secondary: \"12px\",\n tertiary: \"16px\",\n full: \"9999px\",\n },\n boxshadow: {\n primary: \"0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 8px rgba(15, 23, 42, 0.04)\",\n secondary: \"0 2px 4px rgba(15, 23, 42, 0.04), 0 4px 12px rgba(15, 23, 42, 0.05)\",\n tertiary: \"0 4px 8px rgba(15, 23, 42, 0.05), 0 8px 20px rgba(15, 23, 42, 0.06)\",\n inset:\n \"inset 0 1px 0 rgba(255, 255, 255, 0.55), inset 0 -1px 0 rgba(15, 23, 42, 0.03)\",\n hover: \"0 2px 6px rgba(15, 23, 42, 0.06), 0 6px 16px rgba(15, 23, 42, 0.07)\",\n },\n brightness: { primary: \"1.04\", secondary: \"1.08\", tertiary: \"1.10\" },\n saturation: { primary: \"1.08\", secondary: \"1.14\", tertiary: \"1.20\" },\n separator: \"rgba(15, 23, 42, 0.12)\",\n border: {\n primary: \"1px solid rgba(15, 23, 42, 0.14)\",\n secondary:\n \"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 72%, transparent)\",\n tertiary:\n \"1px solid color-mix(in srgb, rgba(15, 23, 42, 0.14) 52%, transparent)\",\n },\n glassSurface: { top: 0.11, bottom: 0.08 },\n motion: {\n duration: { instant: \"0ms\", fast: \"120ms\", normal: \"200ms\", slow: \"300ms\" },\n ease: {\n default: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n in: \"cubic-bezier(0.4, 0, 1, 1)\",\n out: \"cubic-bezier(0, 0, 0.2, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n bounce: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n },\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1100,\n fixed: 1200,\n modal: 1300,\n popover: 1400,\n toast: 1500,\n max: 9999,\n },\n opacity: { disabled: 0.5, muted: 0.7, subtle: 0.85 },\n scrollbar: {\n track: \"transparent\",\n thumb:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 36%, #0F172A 20%), transparent)\",\n thumbHover:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 54%, #0F172A 16%), transparent)\",\n },\n },\n\n dark: {\n glass: {\n baseColor: \"#141B2D\",\n baseShades: {\n secondary: \"#1A2235\",\n tertiary: \"#222C42\",\n },\n opacities: { primary: 0.16, secondary: 0.18, tertiary: 0.22, solid: 0.24 },\n },\n overlay: {\n color: \"#0B1020\",\n opacities: { primary: 0.75, secondary: 0.33, tertiary: 0.19, solid: 1.0 },\n },\n glassHover: {\n color: \"#E2E8F0\",\n opacity: { primary: 0.08, secondary: 0.1, tertiary: 0.12, solid: 1.0 },\n },\n fontFamily:\n \"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyMono:\n \"'JetBrains Mono', 'SF Mono', ui-monospace, Consolas, monospace\",\n fontSize: {\n xs: \"0.75rem\",\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.25rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"3.75rem\",\n },\n fontWeight: {\n thin: \"100\",\n light: \"300\",\n normal: \"400\",\n medium: \"500\",\n semibold: \"600\",\n bold: \"700\",\n extrabold: \"800\",\n },\n lineHeight: {\n tight: \"1.1\",\n snug: \"1.25\",\n normal: \"1.5\",\n relaxed: \"1.75\",\n loose: \"2\",\n },\n letterSpacing: {\n tighter: \"-0.03em\",\n tight: \"-0.015em\",\n normal: \"0em\",\n wide: \"0.02em\",\n wider: \"0.04em\",\n },\n spacing: {\n \"0\": \"0px\",\n px: \"1px\",\n \"0.5\": \"0.125rem\",\n \"1\": \"0.25rem\",\n \"1.5\": \"0.375rem\",\n \"2\": \"0.5rem\",\n \"2.5\": \"0.625rem\",\n \"3\": \"0.75rem\",\n \"3.5\": \"0.875rem\",\n \"4\": \"1rem\",\n \"5\": \"1.25rem\",\n \"6\": \"1.5rem\",\n \"8\": \"2rem\",\n \"10\": \"2.5rem\",\n \"12\": \"3rem\",\n \"16\": \"4rem\",\n \"20\": \"5rem\",\n \"24\": \"6rem\",\n \"32\": \"8rem\",\n \"40\": \"10rem\",\n \"48\": \"12rem\",\n \"56\": \"14rem\",\n \"64\": \"16rem\",\n },\n\n color: {\n background: \"#0B1020\",\n foreground: \"#E2E8F0\",\n active: \"#2563EB\",\n success: \"#17C964\",\n warning: \"#F7B750\",\n danger: \"#DB3B3E\",\n info: \"#818CF8\",\n },\n\n blur: { primary: \"12px\", secondary: \"24px\", tertiary: \"32px\" },\n radius: {\n primary: \"8px\",\n secondary: \"12px\",\n tertiary: \"16px\",\n full: \"9999px\",\n },\n boxshadow: {\n primary: \"0 1px 2px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.22)\",\n secondary: \"0 2px 4px rgba(0, 0, 0, 0.22), 0 4px 14px rgba(0, 0, 0, 0.26)\",\n tertiary: \"0 4px 8px rgba(0, 0, 0, 0.24), 0 8px 20px rgba(0, 0, 0, 0.3)\",\n inset:\n \"inset 0 1px 0 rgba(255, 255, 255, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.18)\",\n hover: \"0 2px 6px rgba(0, 0, 0, 0.26), 0 6px 16px rgba(0, 0, 0, 0.32)\",\n },\n brightness: { primary: \"1.04\", secondary: \"1.08\", tertiary: \"1.10\" },\n saturation: { primary: \"1.08\", secondary: \"1.14\", tertiary: \"1.20\" },\n separator: \"rgba(226, 232, 240, 0.1)\",\n border: {\n primary: \"1px solid rgba(226, 232, 240, 0.14)\",\n secondary:\n \"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 72%, transparent)\",\n tertiary:\n \"1px solid color-mix(in srgb, rgba(226, 232, 240, 0.14) 52%, transparent)\",\n },\n glassSurface: { top: 0.16, bottom: 0.14 },\n motion: {\n duration: { instant: \"0ms\", fast: \"120ms\", normal: \"200ms\", slow: \"300ms\" },\n ease: {\n default: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n in: \"cubic-bezier(0.4, 0, 1, 1)\",\n out: \"cubic-bezier(0, 0, 0.2, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n bounce: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n },\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1100,\n fixed: 1200,\n modal: 1300,\n popover: 1400,\n toast: 1500,\n max: 9999,\n },\n opacity: { disabled: 0.5, muted: 0.7, subtle: 0.85 },\n scrollbar: {\n track: \"transparent\",\n thumb:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 44%, #E2E8F0 16%), transparent)\",\n thumbHover:\n \"color-mix(in oklch, color-mix(in oklch, #2563EB 62%, #E2E8F0 12%), transparent)\",\n },\n },\n};\n\nexport function getThemePreference(): ThemePreference {\n try {\n if (typeof localStorage !== \"undefined\") {\n const v = localStorage.getItem(THEME_KEY) as ThemePreference | null;\n return v === \"light\" || v === \"dark\" || v === \"system\" ? v : \"system\";\n }\n } catch { }\n return \"system\";\n}\n\nexport function resolveActualTheme(pref: ThemePreference): \"light\" | \"dark\" {\n if (typeof window === \"undefined\") return \"light\";\n if (pref === \"system\") {\n try {\n if (window.matchMedia) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n } catch { }\n return \"light\";\n }\n return pref;\n}\n\n/** Returns \"light\" | \"dark\" (prefers provider, falls back to system). SSR-safe: returns \"light\" when document is undefined. */\nexport function getCurrentTheme(): \"light\" | \"dark\" {\n if (typeof document === \"undefined\") return \"light\";\n const de = document.documentElement;\n const v = de.getAttribute(\"data-theme\");\n if (v === \"light\" || v === \"dark\") return v;\n return typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n}\n\n/** Subscribe to theme changes. Returns an unsubscribe function. SSR-safe: returns no-op when window is undefined. */\nexport function onThemeChange(\n cb: (mode: \"light\" | \"dark\", preference?: ThemePreference) => void,\n) {\n if (typeof window === \"undefined\") return () => {};\n const handler = (e: Event) => {\n const { mode, preference } = (e as CustomEvent).detail || {};\n if (mode === \"light\" || mode === \"dark\") cb(mode, preference);\n else cb(getCurrentTheme(), undefined);\n };\n window.addEventListener(\"sky-theme\", handler);\n\n queueMicrotask(() => cb(getCurrentTheme(), undefined));\n return () => window.removeEventListener(\"sky-theme\", handler);\n}\n\nfunction deepMerge<T>(target: T, source: Partial<T>): T {\n const t: any = Array.isArray(target)\n ? [...(target as any)]\n : { ...(target as any) };\n for (const k in source) {\n const sv: any = (source as any)[k];\n if (sv && typeof sv === \"object\" && !Array.isArray(sv)) {\n t[k] = deepMerge((target as any)[k], sv);\n } else {\n t[k] = sv ?? (target as any)[k];\n }\n }\n return t;\n}\n\nlet lastMergeUser: Partial<ThemeConfig> | undefined;\nlet lastMergeResult: ThemeConfig | undefined;\n\nexport function mergeTheme(userTheme: Partial<ThemeConfig>): ThemeConfig {\n if (userTheme === lastMergeUser && lastMergeResult) return lastMergeResult;\n lastMergeResult = {\n light: deepMerge(defaultTheme.light, userTheme.light ?? {}),\n dark: deepMerge(defaultTheme.dark, userTheme.dark ?? {}),\n };\n lastMergeUser = userTheme;\n return lastMergeResult;\n}\n\n/* color & glass helpers */\n\nfunction clampAlpha(alpha: number | undefined, fallback = 1): number {\n const value =\n typeof alpha === \"number\" && Number.isFinite(alpha) ? alpha : fallback;\n\n return Math.max(0, Math.min(1, value));\n}\n\nfunction clampPercent(value: number): number {\n if (!Number.isFinite(value)) return 100;\n return Math.max(0, Math.min(100, Math.round(value)));\n}\n\nfunction isOKLCH(value: string): boolean {\n return /^oklch\\(\\s*[\\d.]+\\s+[\\d.]+\\s+[\\d.]+(?:deg)?(?:\\s*\\/\\s*[\\d.]+%?)?\\s*\\)$/i.test(\n value.trim(),\n );\n}\n\nfunction toOKLCH(hexOrOKLCH: string): string {\n if (isOKLCH(hexOrOKLCH)) return hexOrOKLCH;\n return hexOrOKLCH;\n}\n\nfunction toOKLCHAlpha(hexOrOKLCH: string, alpha: number): string {\n const safeAlpha = clampAlpha(alpha);\n const alphaPct = clampPercent(safeAlpha * 100);\n\n if (safeAlpha <= 0) return \"transparent\";\n if (safeAlpha >= 1) return toOKLCH(hexOrOKLCH);\n\n if (isOKLCH(hexOrOKLCH)) {\n const value = hexOrOKLCH.trim();\n\n return value.includes(\"/\")\n ? value\n : value.replace(/\\)$/, ` / ${alphaPct}%)`);\n }\n\n return `color-mix(in oklch, ${hexOrOKLCH} ${alphaPct}%, transparent)`;\n}\n\nfunction mixOKLCH(colorA: string, amountA: number, colorB: string): string {\n return `color-mix(in oklch, ${colorA} ${clampPercent(amountA)}%, ${colorB})`;\n}\n\n/**\n * generateVarMap emits typography & spacing tokens and semantic role tokens.\n *\n * Glass hierarchy is shade-based with optional per-tier fill opacity:\n * - primary = base/default glass shade\n * - secondary = raised/elevated glass shade\n * - tertiary = floating/modal/popover glass shade\n * - Fill strength: glass.opacities.primary | secondary | tertiary\n * (secondary/tertiary fall back to primary when omitted).\n */\nfunction generateVarMap(\n theme: ThemeModeConfig,\n isDark: boolean,\n): Record<string, string> {\n const out: Record<string, string> = {};\n\n const set = (k: string, v?: string) => {\n if (v != null) out[`--${k}`] = v;\n };\n\n /* base contrast tokens */\n\n set(\"sky-text-dark\", toOKLCH(isDark ? \"#FFFFFF\" : \"#0B1020\"));\n set(\"sky-text-light\", toOKLCH(isDark ? \"#030712\" : \"#FFFFFF\"));\n\n /* font family tokens */\n\n const fontSans = theme.fontFamily;\n const fontMono = theme.fontFamilyMono ?? \"ui-monospace, monospace\";\n\n set(\"sky-font\", fontSans);\n set(\"sky-font-sans\", fontSans);\n set(\"sky-font-mono\", fontMono);\n\n /* background + text tokens */\n\n set(\"sky-background-color\", toOKLCH(theme.color.background));\n set(\"sky-text-primary\", toOKLCH(theme.color.foreground));\n\n const textSteps: Record<\n \"secondary\" | \"tertiary\" | \"quaternary\" | \"quinary\",\n number\n > = isDark\n ? {\n secondary: 82,\n tertiary: 66,\n quaternary: 50,\n quinary: 36,\n }\n : {\n secondary: 76,\n tertiary: 60,\n quaternary: 44,\n quinary: 30,\n };\n\n Object.entries(textSteps).forEach(([level, pct]) => {\n set(\n `sky-text-${level}`,\n `color-mix(in oklch, var(--sky-text-primary) ${pct}%, var(--sky-background-color))`,\n );\n });\n\n [\"primary\", \"secondary\", \"tertiary\", \"quaternary\", \"quinary\"].forEach(\n (level) => {\n set(\n `sky-text-${level}-hover`,\n `color-mix(in oklch, var(--sky-text-${level}) 86%, var(--sky-text-dark))`,\n );\n },\n );\n\n /* shade-based glass generation */\n\n const { baseColor, baseShades, opacities: op } = theme.glass;\n\n const glassShadeAnchor = theme.color.foreground;\n\n const glassShadeSteps = isDark\n ? {\n primary: 96,\n secondary: 88,\n tertiary: 78,\n }\n : {\n primary: 96,\n secondary: 90,\n tertiary: 82,\n };\n\n const glassPrimaryShade =\n baseShades?.primary ??\n mixOKLCH(\n baseColor,\n glassShadeSteps.primary,\n glassShadeAnchor,\n );\n\n const glassSecondaryShade =\n baseShades?.secondary ??\n mixOKLCH(baseColor, glassShadeSteps.secondary, glassShadeAnchor);\n\n const glassTertiaryShade =\n baseShades?.tertiary ??\n mixOKLCH(baseColor, glassShadeSteps.tertiary, glassShadeAnchor);\n\n const glassStrengthFallback = isDark ? 0.4 : 0.34;\n const glassStrength = {\n primary: clampAlpha(op.primary, glassStrengthFallback),\n secondary: clampAlpha(\n op.secondary ?? op.primary,\n glassStrengthFallback\n ),\n tertiary: clampAlpha(op.tertiary ?? op.primary, glassStrengthFallback),\n // Solid surface fill (inputs / actions). Defaults fully opaque, but themes\n // can lower `opacities.solid` for a translucent \"frosted solid\" look.\n solid: clampAlpha(op.solid, 1),\n };\n\n set(\n \"sky-glass-primary\",\n toOKLCHAlpha(glassPrimaryShade, glassStrength.primary)\n );\n set(\n \"sky-glass-secondary\",\n toOKLCHAlpha(glassSecondaryShade, glassStrength.secondary)\n );\n set(\n \"sky-glass-tertiary\",\n toOKLCHAlpha(glassTertiaryShade, glassStrength.tertiary)\n );\n\n set(\"sky-glass-solid\", toOKLCHAlpha(baseColor, glassStrength.solid));\n\n const glassSurfaceTopAlpha = clampAlpha(\n theme.glassSurface?.top,\n isDark ? 0.16 : 0.11,\n );\n\n const glassSurfaceBottomAlpha = clampAlpha(\n theme.glassSurface?.bottom,\n isDark ? 0.14 : 0.08,\n );\n\n // Light: secondary→primary sheen (specular highlight).\n // Dark: primary shade on both stops so floating UI frosts with dark glass\n // instead of a milky foreground wash that wrecks dialogs and popovers.\n const glassSurfaceTopShade = isDark ? glassPrimaryShade : glassSecondaryShade;\n\n set(\n \"sky-glass-surface\",\n `linear-gradient(\n 180deg,\n ${toOKLCHAlpha(glassSurfaceTopShade, glassSurfaceTopAlpha)},\n ${toOKLCHAlpha(glassPrimaryShade, glassSurfaceBottomAlpha)}\n )`,\n );\n\n /* overlay tokens */\n\n Object.entries(theme.overlay.opacities).forEach(([k, v]) => {\n set(`sky-overlay-${k}`, toOKLCHAlpha(theme.overlay.color, v));\n });\n\n /* hover overlay tokens */\n\n Object.entries(theme.glassHover.opacity).forEach(([k, v]) => {\n set(`sky-hover-${k}`, toOKLCHAlpha(theme.glassHover.color, v));\n });\n\n /* border / radius / blur / effects */\n\n Object.entries(theme.border).forEach(([k, v]) => {\n set(`sky-border-${k}`, v);\n });\n\n Object.entries(theme.radius).forEach(([k, v]) => {\n set(`sky-radius-${k}`, v);\n });\n\n Object.entries(theme.blur).forEach(([k, v]) => {\n set(`sky-blur-${k}`, `blur(${v})`);\n });\n\n Object.entries(theme.brightness).forEach(([k, v]) => {\n set(`sky-brightness-${k}`, `brightness(${v})`);\n });\n\n Object.entries(theme.saturation).forEach(([k, v]) => {\n set(`sky-saturation-${k}`, `saturate(${v})`);\n });\n\n Object.entries(theme.boxshadow).forEach(([k, v]) => {\n set(`sky-box-shadow-${k}`, v);\n });\n\n set(\"sky-border-light\", theme.separator);\n\n /* motion tokens */\n\n Object.entries(theme.motion?.duration ?? {}).forEach(([k, v]) => {\n set(`sky-duration-${k}`, v);\n });\n\n Object.entries(theme.motion?.ease ?? {}).forEach(([k, v]) => {\n set(`sky-ease-${k}`, v);\n });\n\n set(\n \"sky-transition-default\",\n [\n \"background-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"border-color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"color var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"box-shadow var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"transform var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"opacity var(--sky-duration-normal, 200ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n ].join(\", \"),\n );\n\n set(\n \"sky-transition-fast\",\n [\n \"background-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"border-color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"color var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"box-shadow var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n \"opacity var(--sky-duration-fast, 120ms) var(--sky-ease-default, cubic-bezier(0.4, 0, 0.2, 1))\",\n ].join(\", \"),\n );\n\n /* z-index tokens */\n\n Object.entries(theme.zIndex ?? {}).forEach(([k, v]) => {\n set(`sky-z-${k}`, String(v));\n });\n\n /* opacity tokens */\n\n Object.entries(theme.opacity ?? {}).forEach(([k, v]) => {\n set(`sky-opacity-${k}`, String(v));\n });\n\n /* native scrollbar color tokens (size stays OS-native) */\n\n const scrollbar = theme.scrollbar;\n set(\"sky-scrollbar-track\", scrollbar?.track ?? \"transparent\");\n set(\n \"sky-scrollbar-thumb\",\n scrollbar?.thumb ??\n (isDark\n ? \"color-mix(in oklch, var(--sky-text-tertiary) 78%, transparent)\"\n : \"color-mix(in oklch, var(--sky-text-tertiary) 68%, transparent)\"),\n );\n set(\n \"sky-scrollbar-thumb-hover\",\n scrollbar?.thumbHover ??\n (isDark\n ? \"color-mix(in oklch, var(--sky-text-secondary) 52%, var(--sky-active-primary))\"\n : \"color-mix(in oklch, var(--sky-text-secondary) 44%, var(--sky-active-primary))\"),\n );\n\n /* text shadow */\n\n set(\n \"sky-text-shadow-on-glass\",\n isDark\n ? \"0 1px 2px rgba(0,0,0,0.45)\"\n : \"0 1px 1px rgba(255,255,255,0.55)\",\n );\n\n /* semantic color scales */\n\n const semanticColors = [\n \"active\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n ] as const;\n\n semanticColors.forEach((key) => {\n const baseColor = theme.color[key];\n\n set(`sky-${key}-primary`, baseColor);\n\n set(\n `sky-${key}-secondary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 82%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-tertiary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 62%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-quaternary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 42%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-quinary`,\n `color-mix(in oklch, var(--sky-${key}-primary) 24%, var(--sky-background-color))`,\n );\n\n set(\n `sky-${key}-primary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 88%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-secondary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 72%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-tertiary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 56%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quaternary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 40%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quinary-dark`,\n `color-mix(in oklch, var(--sky-${key}-primary) 28%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-g0`,\n `color-mix(in oklch, var(--sky-${key}-primary) 12%, transparent)`,\n );\n\n set(\n `sky-${key}-g1`,\n `color-mix(in oklch, var(--sky-${key}-primary) 24%, transparent)`,\n );\n\n set(\n `sky-${key}-g2`,\n `color-mix(in oklch, var(--sky-${key}-primary) 48%, transparent)`,\n );\n });\n\n /* semantic hover tokens */\n\n semanticColors.forEach((key) => {\n set(\n `sky-${key}-primary-hover`,\n `color-mix(in oklch, var(--sky-${key}-primary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-secondary-hover`,\n `color-mix(in oklch, var(--sky-${key}-secondary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-tertiary-hover`,\n `color-mix(in oklch, var(--sky-${key}-tertiary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quaternary-hover`,\n `color-mix(in oklch, var(--sky-${key}-quaternary) 86%, var(--sky-text-dark))`,\n );\n\n set(\n `sky-${key}-quinary-hover`,\n `color-mix(in oklch, var(--sky-${key}-quinary) 86%, var(--sky-text-dark))`,\n );\n });\n\n /* ring tokens */\n\n semanticColors.forEach((key) => {\n set(`sky-ring-${key}-1`, `0 0 0 1px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-2`, `0 0 0 2px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-3`, `0 0 0 3px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-4`, `0 0 0 4px var(--sky-${key}-primary)`);\n set(`sky-ring-${key}-5`, `0 0 0 5px var(--sky-${key}-primary)`);\n\n set(\n `sky-ring-${key}-inset-1`,\n `inset 0 0 0 1px var(--sky-${key}-primary)`,\n );\n\n set(\n `sky-ring-${key}-inset-2`,\n `inset 0 0 0 2px var(--sky-${key}-primary)`,\n );\n\n set(\n `sky-ring-${key}-inset-3`,\n `inset 0 0 0 3px var(--sky-${key}-primary)`,\n );\n });\n\n // Focus ring: nested var() resolves on this host, then inherits substituted.\n // Components that set `--sky-focus-ring-color` must also redeclare `--sky-focus-ring`\n // (see `helper/styles/focus-ring.ts`).\n set(\"sky-focus-ring-color\", \"var(--sky-active-primary)\");\n set(\n \"sky-focus-ring\",\n \"0 0 0 3px color-mix(in oklch, var(--sky-focus-ring-color, var(--sky-active-primary)) 42%, transparent)\",\n );\n\n set(\"sky-focus-ring-offset\", \"2px\");\n\n set(\"sky-text-white\", \"oklch(1 0 0)\");\n set(\"sky-text-black\", \"oklch(0 0 0)\");\n\n /* on-color fallbacks (solid fills; prefer CSS contrast-color() when supported) */\n set(\"sky-on-color-fallback-light\", \"var(--sky-text-white)\");\n set(\"sky-on-color-fallback-dark\", \"var(--sky-text-black)\");\n\n // Static no-@supports fallbacks (assume dark fill → light FG). Components that\n // paint solid fills should enhance with contrast-color(var(--_fill)).\n set(\"sky-on-active-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-success-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-warning-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-danger-primary\", \"var(--sky-on-color-fallback-light)\");\n set(\"sky-on-info-primary\", \"var(--sky-on-color-fallback-light)\");\n\n /* typography scale tokens */\n\n Object.entries(theme.fontSize ?? {}).forEach(([k, v]) => {\n set(`sky-font-size-${k}`, v);\n });\n\n Object.entries(theme.fontWeight ?? {}).forEach(([k, v]) => {\n set(`sky-font-weight-${k}`, v);\n });\n\n Object.entries(theme.lineHeight ?? {}).forEach(([k, v]) => {\n set(`sky-line-height-${k}`, v);\n });\n\n Object.entries(theme.letterSpacing ?? {}).forEach(([k, v]) => {\n set(`sky-letter-spacing-${k}`, v);\n });\n\n /* font shorthand presets */\n\n const getFontSize = (key: string, fallback: string) =>\n (theme.fontSize as Record<string, string> | undefined)?.[key] ?? fallback;\n\n const getLineHeight = (key: string, fallback: string) =>\n (theme.lineHeight as Record<string, string> | undefined)?.[key] ??\n fallback;\n\n const fontPresets: Array<{ key: string; size: string; line: string }> = [\n { key: \"xs\", size: \"xs\", line: \"tight\" },\n { key: \"sm\", size: \"sm\", line: \"snug\" },\n { key: \"md\", size: \"md\", line: \"normal\" },\n { key: \"lg\", size: \"lg\", line: \"snug\" },\n { key: \"xl\", size: \"xl\", line: \"snug\" },\n { key: \"2xl\", size: \"2xl\", line: \"tight\" },\n { key: \"3xl\", size: \"3xl\", line: \"tight\" },\n { key: \"4xl\", size: \"4xl\", line: \"tight\" },\n ];\n\n for (const { key, size, line } of fontPresets) {\n const sizeVal = getFontSize(size, \"1rem\");\n const lineVal = getLineHeight(line, \"1.5\");\n\n set(`sky-font-${key}`, `${sizeVal} / ${lineVal} var(--sky-font-sans)`);\n set(`sky-font-mono-${key}`, `${sizeVal} / ${lineVal} var(--sky-font-mono)`);\n }\n\n /* spacing tokens */\n\n Object.entries(theme.spacing ?? {}).forEach(([k, v]) => {\n set(`sky-space-${k}`, v);\n });\n\n /* semantic typography role tokens */\n\n const roleMap = {\n body: { size: \"md\", weight: \"normal\", line: \"normal\" },\n label: { size: \"sm\", weight: \"medium\", line: \"snug\" },\n caption: { size: \"xs\", weight: \"normal\", line: \"tight\" },\n title: { size: \"lg\", weight: \"semibold\", line: \"snug\" },\n heading: { size: \"2xl\", weight: \"bold\", line: \"tight\" },\n display: { size: \"4xl\", weight: \"bold\", line: \"tight\" },\n } as const;\n\n const getFontWeight = (key: string, fallback: string) =>\n (theme.fontWeight as Record<string, string> | undefined)?.[key] ??\n fallback;\n\n for (const [role, cfg] of Object.entries(roleMap)) {\n const sizeVal = getFontSize(cfg.size, \"1rem\");\n const weightVal = getFontWeight(cfg.weight, \"400\");\n const lineVal = getLineHeight(cfg.line, \"1.5\");\n\n set(\n `sky-text-${role}`,\n `${weightVal} ${sizeVal}/${lineVal} var(--sky-font-sans)`,\n );\n }\n\n return out;\n}\n\n/** Expand comma-separated selectors so pseudo-elements attach to each branch. */\nfunction withPseudoSelectors(selector: string, pseudo: string): string {\n return selector\n .split(\",\")\n .map((part) => `${part.trim()}${pseudo}`)\n .join(\",\\n\");\n}\n\n/** Tints native scrollbars from `--sky-scrollbar-*` tokens; width/thickness stay OS-native. */\nfunction buildNativeScrollbarCSS(selector: string): string {\n const webkitTrack = withPseudoSelectors(selector, \"::-webkit-scrollbar-track\");\n const webkitThumb = withPseudoSelectors(selector, \"::-webkit-scrollbar-thumb\");\n const webkitThumbHover = withPseudoSelectors(\n selector,\n \"::-webkit-scrollbar-thumb:hover\",\n );\n\n return `\n${selector} {\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n}\n${webkitTrack} {\n background: var(--sky-scrollbar-track);\n}\n${webkitThumb} {\n background-color: var(--sky-scrollbar-thumb);\n}\n${webkitThumbHover} {\n background-color: var(--sky-scrollbar-thumb-hover);\n}\n`.trim();\n}\n\nconst NATIVE_SCROLLBAR_ROOT_SELECTOR = \"html, body, *\";\nconst NATIVE_SCROLLBAR_HOST_SELECTOR =\n \"sky-theme-provider[sky-native-scrollbars], sky-theme-provider[sky-native-scrollbars] *\";\n\n/* buildVarCSS keeps same semantics */\nfunction buildVarCSS(vars: Record<string, string>, selector: string) {\n // Custom-property names containing \".\" (e.g. --sky-space-2.5) are invalid CSS\n // idents unless the dot is escaped. Without this, fractional spacing tokens are\n // dropped by the parser and never defined. Escape the dot in the name only.\n const body = Object.entries(vars)\n .map(([k, v]) => `${k.replace(/\\./g, \"\\\\.\")}:${v};`)\n .join(\"\");\n return `${selector}{${body}}`;\n}\n\nfunction ensureStyleTag(id: string, cssText: string): HTMLStyleElement {\n let tag = document.getElementById(id) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement(\"style\");\n tag.id = id;\n document.head.appendChild(tag);\n }\n tag.textContent = cssText;\n return tag;\n}\n\n/* context + provider implementation (unchanged except for token emission) */\nexport interface ThemeContextValue {\n mode: \"light\" | \"dark\";\n preference: ThemePreference;\n theme: ThemeConfig;\n setPreference: (pref: ThemePreference) => void;\n togglePreference: () => ThemePreference;\n}\nexport const themeContext = createContext<ThemeContextValue>(\"sky/theme\");\ntype ThemeScope = \"root\" | \"host\" | \"both\";\nexport type SkyThemeProviderScope = ThemeScope;\nexport type SkyThemeProviderGlobalChangeDetail = {\n mode: \"light\" | \"dark\";\n preference: ThemePreference;\n};\n\n\n/**\n * @element sky-theme-provider\n *\n * @summary Theme provider for light, dark, and system preferences with CSS variable generation.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://sky-ui.com/components/theme-provider\n *\n * @slot - Default slot for content that will receive theme context.\n *\n * @csspart container - The theme provider container element.\n *\n * @property {Partial<ThemeConfig>} userTheme - Custom theme overrides.\n * @property {SkyThemeProviderScope} scope - Where CSS variables are applied.\n * @property {\"light\"|\"dark\"|\"system\"} preference - Theme preference.\n * @property {boolean} persist - Persists preference in localStorage.\n * @property {boolean} broadcast - Broadcasts theme changes through events.\n *\n * @fires {CustomEvent<SkyThemeProviderGlobalChangeDetail>} theme-change-global - Fired when theme changes globally.\n * @fires {CustomEvent<SkyThemeProviderGlobalChangeDetail>} sky-theme - Fired on global theme updates.\n *\n * @Behavior\n * - Resolves light/dark mode from explicit or system preference.\n * - Emits CSS custom properties for color, typography, spacing, and motion tokens.\n * - Provides theme context for descendant components.\n *\n * @example\n * ```html\n * <sky-theme-provider preference=\"system\" scope=\"both\">\n * <app-content></app-content>\n * </sky-theme-provider>\n * ```\n * ```vue\n * <template>\n * <sky-theme-provider :user-theme=\"theme\" preference=\"dark\" scope=\"both\">\n * <app-content />\n * </sky-theme-provider>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return <sky-theme-provider userTheme={theme} preference=\"dark\" scope=\"both\"><app-content /></sky-theme-provider>;\n * }\n * ```\n */\n@customElement(\"sky-theme-provider\")\nexport class SkyThemeProvider extends LitElement {\n /** User theme overrides. From HTML pass JSON, e.g. usertheme='{\"primary\":\"#0af\"}'. */\n @property({ type: Object }) userTheme?: PartialTheme;\n\n /** Where to apply CSS vars and global CSS. Default: \"root\". */\n @property({ type: String, reflect: true }) scope: ThemeScope = \"root\";\n\n @property({ type: String, reflect: true })\n preference: ThemePreference = getThemePreference();\n\n @state() private mode: \"light\" | \"dark\" = \"light\";\n\n @provide({ context: themeContext })\n private _ctx!: ThemeContextValue;\n\n @property({ type: Boolean }) persist: boolean = true;\n @property({ type: Boolean }) broadcast: boolean = true;\n\n private media: MediaQueryList | null = null;\n private globalStyleId = \"sky-theme-provider-global-style\";\n private hostScrollbarStyleId = \"sky-theme-provider-host-scrollbar\";\n private hostSheet: CSSStyleSheet | null = null;\n private hostStyleEl: HTMLStyleElement | null = null;\n private rootVarsStyleId = \"sky-theme-vars-root\";\n\n static styles = css`\n :host {\n display: contents;\n }\n\n :host {\n font-family: var(--sky-font);\n color: var(--sky-text-primary);\n background: var(--sky-background-color);\n }\n `;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.mode = resolveActualTheme(this.preference);\n this.pushContext();\n this.setupSystemWatcher();\n if (this.scope === \"host\") {\n this.applyVariables();\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.media?.removeEventListener(\"change\", this.onSystemChange);\n\n if (this.hostStyleEl && this.hostStyleEl.parentNode) {\n this.hostStyleEl.parentNode.removeChild(this.hostStyleEl);\n this.hostStyleEl = null;\n }\n\n if (this.scope === \"host\") {\n const s = document.getElementById(this.globalStyleId);\n if (s) s.remove();\n const hostScrollbar = document.getElementById(this.hostScrollbarStyleId);\n if (hostScrollbar) hostScrollbar.remove();\n }\n }\n\n protected firstUpdated(): void {\n if (this.scope === \"root\" || this.scope === \"both\") {\n this.applyVariables();\n }\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>): void {\n super.updated(changedProperties);\n\n // Ensure context is updated after DOM updates\n if (\n changedProperties.has(\"userTheme\") ||\n changedProperties.has(\"mode\") ||\n changedProperties.has(\"preference\") ||\n changedProperties.has(\"scope\")\n ) {\n this.pushContext();\n }\n }\n\n protected override willUpdate(changed: Map<string, unknown>): void {\n const prefChanged = changed.has(\"preference\");\n const scopeChanged = changed.has(\"scope\");\n const userThemeChanged = changed.has(\"userTheme\");\n\n let modeChanged = false;\n\n if (prefChanged || scopeChanged) {\n const nextMode = resolveActualTheme(this.preference);\n if (nextMode !== this.mode) {\n this.mode = nextMode;\n modeChanged = true;\n }\n }\n\n const hydrated = !!this.hasUpdated;\n const canApplyNow = this.scope === \"host\" || hydrated;\n if (canApplyNow && (modeChanged || scopeChanged || userThemeChanged)) {\n this.applyVariables();\n }\n\n if (prefChanged || modeChanged || userThemeChanged || scopeChanged) {\n this.pushContext();\n\n // Avoid broadcasting before hydration when scope touches root. Host-only providers still broadcast\n // when userTheme / mode / preference updates so consumers (e.g. sky-chart mono palette) can refresh.\n const hostThemeChanged =\n this.scope === \"host\" &&\n hydrated &&\n (userThemeChanged || prefChanged || modeChanged || scopeChanged);\n if (\n this.broadcast &&\n ((this.scope === \"root\" || this.scope === \"both\") || hostThemeChanged)\n ) {\n this.broadcastTheme();\n }\n }\n }\n\n private setRootThemeAttrs() {\n const de = document.documentElement;\n de.toggleAttribute(\"data-theme-light\", this.mode === \"light\");\n de.toggleAttribute(\"data-theme-dark\", this.mode === \"dark\");\n de.setAttribute(\"data-theme\", this.mode);\n (de.style as any).colorScheme = this.mode;\n de.classList.toggle(\"dark\", this.mode === \"dark\");\n }\n\n private broadcastTheme() {\n const detail = { mode: this.mode, preference: this.preference };\n window.dispatchEvent(new CustomEvent(\"sky-theme\", { detail }));\n\n window.dispatchEvent(new CustomEvent(\"theme-change-global\", { detail }));\n }\n\n public setPreference(pref: ThemePreference) {\n try {\n if (this.persist && (this.scope === \"root\" || this.scope === \"both\")) {\n localStorage.setItem(\"theme\", pref);\n }\n } catch { }\n this.preference = pref;\n\n if (this.broadcast && (this.scope === \"root\" || this.scope === \"both\")) {\n this.dispatchEvent(\n new CustomEvent(\"theme-change-global\", {\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n\n public togglePreference(): ThemePreference {\n const current = this.preference ?? getThemePreference();\n const next: ThemePreference =\n current === \"light\" ? \"dark\" : current === \"dark\" ? \"system\" : \"light\";\n this.setPreference(next);\n return next;\n }\n\n private onSystemChange = () => {\n if ((this.preference ?? getThemePreference()) === \"system\") {\n this.mode = resolveActualTheme(\"system\");\n this.applyVariables();\n this.pushContext();\n this.dispatchEvent(\n new CustomEvent(\"theme-change-global\", {\n bubbles: true,\n composed: true,\n }),\n );\n }\n };\n\n private setupSystemWatcher() {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n this.media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.media.addEventListener(\"change\", this.onSystemChange);\n }\n\n /** Ensure global body + dialog + native scrollbar rules when scope touches root. */\n private ensureGlobalStyle() {\n if (typeof document === \"undefined\") return;\n const cssText = `\n body {\n font-family: var(--sky-font);\n margin: 0;\n padding: 0;\n background: var(--sky-background-color);\n color: var(--sky-text-primary);\n }\n\n html[data-sky-dialog-open=\"true\"] {\n overflow: hidden !important;\n position: relative;\n height: 100%;\n }\n\n ${buildNativeScrollbarCSS(NATIVE_SCROLLBAR_ROOT_SELECTOR)}\n `.trim();\n\n let tag = document.getElementById(\n this.globalStyleId,\n ) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement(\"style\");\n tag.id = this.globalStyleId;\n tag.textContent = cssText;\n document.head.appendChild(tag);\n } else {\n tag.textContent = cssText;\n }\n }\n\n private applyHostNativeScrollbars(enabled: boolean) {\n if (typeof document === \"undefined\") return;\n this.toggleAttribute(\"sky-native-scrollbars\", enabled);\n if (!enabled) {\n const tag = document.getElementById(this.hostScrollbarStyleId);\n if (tag) tag.remove();\n return;\n }\n ensureStyleTag(\n this.hostScrollbarStyleId,\n buildNativeScrollbarCSS(NATIVE_SCROLLBAR_HOST_SELECTOR),\n );\n }\n\n private applyVariables() {\n const full = mergeTheme(this.userTheme || {});\n const modeTheme = full[this.mode];\n const isDark = this.mode === \"dark\";\n const vars = generateVarMap(modeTheme, isDark);\n\n this.toggleAttribute(\"data-theme-light\", this.mode === \"light\");\n this.toggleAttribute(\"data-theme-dark\", this.mode === \"dark\");\n\n if (this.scope === \"host\" || this.scope === \"both\") {\n const cssText = buildVarCSS(vars, \":host\");\n\n if (\n \"adoptedStyleSheets\" in Document.prototype &&\n \"replaceSync\" in CSSStyleSheet.prototype\n ) {\n if (!this.hostSheet) {\n this.hostSheet = new CSSStyleSheet();\n\n const current =\n (this.renderRoot as ShadowRoot).adoptedStyleSheets ?? [];\n (this.renderRoot as ShadowRoot).adoptedStyleSheets = [\n ...current,\n this.hostSheet,\n ];\n }\n this.hostSheet.replaceSync(cssText);\n } else {\n if (!this.hostStyleEl) {\n this.hostStyleEl = document.createElement(\"style\");\n this.renderRoot.appendChild(this.hostStyleEl);\n }\n this.hostStyleEl.textContent = cssText;\n }\n\n this.style.removeProperty(\"color\");\n this.style.removeProperty(\"background\");\n\n this.applyHostNativeScrollbars(true);\n } else {\n this.applyHostNativeScrollbars(false);\n }\n\n if (this.scope === \"root\" || this.scope === \"both\") {\n const cssText = buildVarCSS(vars, \":root\");\n ensureStyleTag(this.rootVarsStyleId, cssText);\n\n this.setRootThemeAttrs();\n this.ensureGlobalStyle();\n\n if (document.body) {\n document.body.style.removeProperty(\"color\");\n document.body.style.removeProperty(\"background\");\n document.body.style.removeProperty(\"font-family\");\n }\n\n this.broadcastTheme();\n }\n }\n\n private pushContext() {\n const mergedTheme = mergeTheme(this.userTheme ?? {});\n\n this._ctx = {\n mode: this.mode,\n preference: this.preference,\n theme: mergedTheme,\n setPreference: (pref: ThemePreference) => this.setPreference(pref),\n togglePreference: () => this.togglePreference(),\n };\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n"],"names":["defaultTheme","light","glass","baseColor","baseShades","secondary","tertiary","opacities","primary","solid","overlay","color","glassHover","opacity","fontFamily","fontFamilyMono","fontSize","xs","sm","md","lg","xl","fontWeight","thin","normal","medium","semibold","bold","extrabold","lineHeight","tight","snug","relaxed","loose","letterSpacing","tighter","wide","wider","spacing","px","background","foreground","active","success","warning","danger","info","blur","radius","full","boxshadow","inset","hover","brightness","saturation","separator","border","glassSurface","top","bottom","motion","duration","instant","fast","slow","ease","default","in","out","inOut","bounce","zIndex","base","dropdown","sticky","fixed","modal","popover","toast","max","disabled","muted","subtle","scrollbar","track","thumb","thumbHover","dark","getThemePreference","localStorage","v","getItem","resolveActualTheme","pref","window","matchMedia","matches","getCurrentTheme","document","documentElement","getAttribute","onThemeChange","cb","handler","e","mode","preference","detail","addEventListener","queueMicrotask","removeEventListener","deepMerge","target","source","t","Array","isArray","k","sv","lastMergeUser","lastMergeResult","mergeTheme","userTheme","clampAlpha","alpha","fallback","value","Number","isFinite","Math","min","clampPercent","round","isOKLCH","test","trim","toOKLCH","hexOrOKLCH","toOKLCHAlpha","safeAlpha","alphaPct","includes","replace","mixOKLCH","colorA","amountA","colorB","withPseudoSelectors","selector","pseudo","split","map","part","join","buildNativeScrollbarCSS","buildVarCSS","vars","Object","entries","ensureStyleTag","id","cssText","tag","getElementById","createElement","head","appendChild","textContent","themeContext","createContext","SkyThemeProvider","LitElement","constructor","super","arguments","this","scope","persist","broadcast","media","globalStyleId","hostScrollbarStyleId","hostSheet","hostStyleEl","rootVarsStyleId","onSystemChange","applyVariables","pushContext","dispatchEvent","CustomEvent","bubbles","composed","connectedCallback","setupSystemWatcher","disconnectedCallback","parentNode","removeChild","s","remove","hostScrollbar","firstUpdated","updated","changedProperties","has","willUpdate","changed","prefChanged","scopeChanged","userThemeChanged","modeChanged","nextMode","hydrated","hasUpdated","hostThemeChanged","broadcastTheme","setRootThemeAttrs","de","toggleAttribute","setAttribute","style","colorScheme","classList","toggle","setPreference","setItem","togglePreference","current","next","ensureGlobalStyle","applyHostNativeScrollbars","enabled","theme","isDark","set","fontSans","fontMono","textSteps","quaternary","quinary","forEach","level","pct","op","glassShadeAnchor","glassShadeSteps","glassPrimaryShade","glassSecondaryShade","glassTertiaryShade","glassStrengthFallback","glassStrength","glassSurfaceTopAlpha","glassSurfaceBottomAlpha","String","semanticColors","key","getFontSize","getLineHeight","fontPresets","size","line","sizeVal","lineVal","roleMap","body","weight","label","caption","title","heading","display","getFontWeight","role","cfg","weightVal","generateVarMap","Document","prototype","CSSStyleSheet","renderRoot","adoptedStyleSheets","replaceSync","removeProperty","mergedTheme","_ctx","render","html","styles","css","__decorateClass","property","type","reflect","state","provide","context","Boolean","customElement"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sky.ui/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.59",
|
|
4
4
|
"description": "Sky UI web components built with Lit — 70+ components, bundler plugins, and custom elements.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sky-ui",
|
|
@@ -124,6 +124,11 @@
|
|
|
124
124
|
"types": "./dist/sky-col/sky-col.d.ts",
|
|
125
125
|
"module": "./dist/sky-col/index.js"
|
|
126
126
|
},
|
|
127
|
+
"./sky-color-picker": {
|
|
128
|
+
"import": "./dist/sky-color-picker/index.js",
|
|
129
|
+
"types": "./dist/sky-color-picker/sky-color-picker.d.ts",
|
|
130
|
+
"module": "./dist/sky-color-picker/index.js"
|
|
131
|
+
},
|
|
127
132
|
"./sky-combobox": {
|
|
128
133
|
"import": "./dist/sky-combobox/index.js",
|
|
129
134
|
"types": "./dist/sky-combobox/sky-combobox.d.ts",
|
|
@@ -214,6 +219,11 @@
|
|
|
214
219
|
"types": "./dist/helper/*.d.ts",
|
|
215
220
|
"module": "./dist/helper/*.js"
|
|
216
221
|
},
|
|
222
|
+
"./sky-color-picker/*": {
|
|
223
|
+
"import": "./dist/sky-color-picker/*.js",
|
|
224
|
+
"types": "./dist/sky-color-picker/*.d.ts",
|
|
225
|
+
"module": "./dist/sky-color-picker/*.js"
|
|
226
|
+
},
|
|
217
227
|
"./sky-icon/*": {
|
|
218
228
|
"import": "./dist/sky-icon/*.js",
|
|
219
229
|
"types": "./dist/sky-icon/*.d.ts",
|