HMR support

This commit is contained in:
Chris Wanstrath 2026-01-13 15:24:03 -08:00
parent e30f8c8a68
commit 1e013287cf

View File

@ -10,6 +10,8 @@ let registeredThemeKeys: Set<string> = new Set()
// Clear all registered styles
export function clearStyles() {
for (const key in styles) delete styles[key]
for (const key in themes) delete themes[key]
registeredThemeKeys.clear()
}
// Register a theme with CSS custom properties
@ -286,7 +288,11 @@ export function define(nameOrDef: string | TagDef, defIfNamed?: TagDef) {
const def = defIfNamed ?? nameOrDef as TagDef
const name = defIfNamed ? (nameOrDef as string) : anonName(def)
if (styles[name]) throw `${name} is already defined! Must use unique names.`
// Clear any existing styles for this component (supports HMR/hot reload)
for (const key in styles) {
if (key === name || key.startsWith(`${name}_`) || key.startsWith(`${name}.`) || key.startsWith(`${name}:`))
delete styles[key]
}
registerStyles(name, def)
return (props: Record<string, any>) => {