@nisoku/sazami 0.1.0
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/README.md +261 -0
- package/dist/config/generator.d.ts +3 -0
- package/dist/config/tokens.d.ts +1 -0
- package/dist/curvomorphism/index.d.ts +10 -0
- package/dist/errors.d.ts +16 -0
- package/dist/escape.d.ts +26 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/index.cjs +9473 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.mjs +9473 -0
- package/dist/index.mjs.map +1 -0
- package/dist/primitives/accordion.d.ts +35 -0
- package/dist/primitives/avatar.d.ts +54 -0
- package/dist/primitives/badge.d.ts +34 -0
- package/dist/primitives/base.d.ts +129 -0
- package/dist/primitives/button.d.ts +55 -0
- package/dist/primitives/card.d.ts +44 -0
- package/dist/primitives/checkbox.d.ts +43 -0
- package/dist/primitives/chip.d.ts +57 -0
- package/dist/primitives/column.d.ts +24 -0
- package/dist/primitives/coverart.d.ts +34 -0
- package/dist/primitives/divider.d.ts +24 -0
- package/dist/primitives/generic.d.ts +4 -0
- package/dist/primitives/grid.d.ts +29 -0
- package/dist/primitives/heading.d.ts +35 -0
- package/dist/primitives/icon-button.d.ts +45 -0
- package/dist/primitives/icon.d.ts +32 -0
- package/dist/primitives/image.d.ts +36 -0
- package/dist/primitives/input.d.ts +53 -0
- package/dist/primitives/label.d.ts +26 -0
- package/dist/primitives/modal.d.ts +34 -0
- package/dist/primitives/modifier-map.d.ts +3 -0
- package/dist/primitives/progress.d.ts +49 -0
- package/dist/primitives/radio.d.ts +48 -0
- package/dist/primitives/registry.d.ts +2 -0
- package/dist/primitives/row.d.ts +29 -0
- package/dist/primitives/section.d.ts +39 -0
- package/dist/primitives/select.d.ts +58 -0
- package/dist/primitives/shared.d.ts +15 -0
- package/dist/primitives/slider.d.ts +60 -0
- package/dist/primitives/spacer.d.ts +14 -0
- package/dist/primitives/spinner.d.ts +29 -0
- package/dist/primitives/stack.d.ts +19 -0
- package/dist/primitives/switch.d.ts +53 -0
- package/dist/primitives/tabs.d.ts +30 -0
- package/dist/primitives/tag.d.ts +25 -0
- package/dist/primitives/text.d.ts +39 -0
- package/dist/primitives/toast.d.ts +45 -0
- package/dist/primitives/toggle.d.ts +51 -0
- package/dist/runtime/renderer.d.ts +2 -0
- package/dist/runtime/transformer.d.ts +8 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/config/tokens.ts","../src/config/generator.ts","../src/primitives/modifier-map.ts","../src/errors.ts","../node_modules/@nisoku/sairin/dist/index.mjs","../src/primitives/base.ts","../src/primitives/shared.ts","../src/primitives/row.ts","../src/primitives/column.ts","../src/primitives/grid.ts","../src/primitives/stack.ts","../src/primitives/card.ts","../src/primitives/text.ts","../src/primitives/heading.ts","../src/primitives/label.ts","../src/primitives/button.ts","../src/icons/back.svg?raw","../src/icons/bell.svg?raw","../src/icons/bookmark.svg?raw","../src/icons/calendar.svg?raw","../src/icons/camera.svg?raw","../src/icons/check.svg?raw","../src/icons/chevron-down.svg?raw","../src/icons/clock.svg?raw","../src/icons/close.svg?raw","../src/icons/copy.svg?raw","../src/icons/down.svg?raw","../src/icons/download.svg?raw","../src/icons/edit.svg?raw","../src/icons/file.svg?raw","../src/icons/folder.svg?raw","../src/icons/forward.svg?raw","../src/icons/globe.svg?raw","../src/icons/heart.svg?raw","../src/icons/home.svg?raw","../src/icons/image.svg?raw","../src/icons/link.svg?raw","../src/icons/lock.svg?raw","../src/icons/mail.svg?raw","../src/icons/menu.svg?raw","../src/icons/minus.svg?raw","../src/icons/next.svg?raw","../src/icons/pause.svg?raw","../src/icons/phone.svg?raw","../src/icons/pin.svg?raw","../src/icons/play.svg?raw","../src/icons/plus.svg?raw","../src/icons/previous.svg?raw","../src/icons/refresh.svg?raw","../src/icons/search.svg?raw","../src/icons/settings.svg?raw","../src/icons/share.svg?raw","../src/icons/skip.svg?raw","../src/icons/spinner.svg?raw","../src/icons/star.svg?raw","../src/icons/stop.svg?raw","../src/icons/trash.svg?raw","../src/icons/up.svg?raw","../src/icons/upload.svg?raw","../src/icons/user.svg?raw","../src/icons/users.svg?raw","../src/icons/index.ts","../src/primitives/icon-button.ts","../src/escape.ts","../src/primitives/input.ts","../src/primitives/checkbox.ts","../src/primitives/toggle.ts","../src/primitives/image.ts","../src/primitives/coverart.ts","../src/primitives/icon.ts","../src/primitives/badge.ts","../src/primitives/tag.ts","../src/primitives/divider.ts","../src/primitives/spacer.ts","../src/primitives/section.ts","../src/primitives/generic.ts","../src/primitives/modal.ts","../src/primitives/select.ts","../src/primitives/tabs.ts","../src/primitives/slider.ts","../src/primitives/radio.ts","../src/primitives/switch.ts","../src/primitives/toast.ts","../src/primitives/avatar.ts","../src/primitives/chip.ts","../src/primitives/spinner.ts","../src/primitives/progress.ts","../src/primitives/accordion.ts","../src/primitives/registry.ts","../src/runtime/transformer.ts","../src/runtime/renderer.ts","../src/curvomorphism/index.ts","../node_modules/@nisoku/sakko/dist/index.mjs","../src/index.ts"],"sourcesContent":["export const defaultTokens: Record<string, string> = {\n \"color.background\": \"#ffffff\",\n \"color.surface\": \"#f8f9fa\",\n \"color.surface-hover\": \"#d6d6d6ff\",\n \"color.surface-active\": \"#b0b0b09c\",\n \"color.border\": \"#e0e0e0\",\n\n \"color.primary\": \"#2563eb\",\n \"color.accent\": \"#ff4d8a\",\n \"color.success\": \"#10b981\",\n \"color.danger\": \"#ef4444\",\n \"color.secondary\": \"#6b7280\",\n\n \"color.text\": \"#1f2937\",\n \"color.text-dim\": \"#6b7280\",\n \"color.text-dimmer\": \"#9ca3af\",\n\n \"color.on-accent\": \"#ffffff\",\n \"color.on-primary\": \"#ffffff\",\n \"color.on-secondary\": \"#1f2937\",\n \"color.on-success\": \"#ffffff\",\n \"color.on-danger\": \"#ffffff\",\n\n \"space.xsmall\": \"2px\",\n \"space.tiny\": \"4px\",\n \"space.small\": \"8px\",\n \"space.medium\": \"12px\",\n \"space.large\": \"16px\",\n \"space.xlarge\": \"24px\",\n \"space.xxlarge\": \"32px\",\n\n \"font.family\":\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n\n \"text.size.small\": \"12px\",\n \"text.size.medium\": \"14px\",\n \"text.size.large\": \"16px\",\n \"text.size.xlarge\": \"20px\",\n \"text.size.xsmall\": \"10px\",\n \"text.size.tiny\": \"11px\",\n\n \"text.weight.light\": \"300\",\n \"text.weight.normal\": \"400\",\n \"text.weight.medium\": \"500\",\n \"text.weight.bold\": \"700\",\n\n \"text.leading.tight\": \"1.25\",\n \"text.leading.normal\": \"1.5\",\n \"text.leading.loose\": \"1.75\",\n\n \"radius.none\": \"0px\",\n \"radius.soft\": \"4px\",\n \"radius.medium\": \"8px\",\n \"radius.strong\": \"12px\",\n \"radius.round\": \"9999px\",\n\n \"shadow.soft\": \"0 1px 3px rgba(0,0,0,0.1)\",\n \"shadow.medium\": \"0 4px 6px rgba(0,0,0,0.1)\",\n \"shadow.strong\": \"0 10px 15px rgba(0,0,0,0.1)\",\n\n \"icon.size.small\": \"16px\",\n \"icon.size.medium\": \"20px\",\n \"icon.size.large\": \"24px\",\n \"icon.size.xlarge\": \"32px\",\n \"icon.size.xsmall\": \"12px\",\n};\n","import { defaultTokens } from \"./tokens\";\n\nexport function generateCSSVariables(tokens: Record<string, string>): string {\n const entries = Object.entries(tokens);\n if (entries.length === 0) return \"\";\n\n const lines = entries.map(([key, value]) => {\n const cssVar = `--saz-${key.replace(/\\./g, \"-\")}`;\n return ` ${cssVar}: ${value};`;\n });\n\n return `:root {\\n${lines.join(\"\\n\")}\\n}`;\n}\n\nexport function generateThemeCSS(\n customTokens?: Record<string, string>,\n): string {\n const merged = { ...defaultTokens, ...(customTokens || {}) };\n return generateCSSVariables(merged);\n}\n\nexport function getTokenValue(\n key: string,\n customTokens?: Record<string, string>,\n): string | undefined {\n if (customTokens && key in customTokens) {\n return customTokens[key];\n }\n return defaultTokens[key];\n}\n","import type { Modifier } from \"@nisoku/sakko\";\n\nexport const MODIFIER_MAP: Record<string, Record<string, any>> = {\n accent: { variant: \"accent\" },\n primary: { variant: \"primary\" },\n secondary: { variant: \"secondary\" },\n danger: { variant: \"danger\" },\n success: { variant: \"success\" },\n dim: { tone: \"dim\", variant: \"dim\" },\n\n small: { size: \"small\" },\n medium: { size: \"medium\" },\n large: { size: \"large\" },\n xlarge: { size: \"xlarge\" },\n tiny: { size: \"tiny\" },\n\n bold: { weight: \"bold\" },\n normal: { weight: \"normal\" },\n light: { weight: \"light\" },\n\n round: { shape: \"round\" },\n square: { shape: \"square\" },\n pill: { shape: \"pill\" },\n\n row: { layout: \"row\" },\n column: { layout: \"column\" },\n center: { align: \"center\" },\n \"space-between\": { justify: \"space-between\" },\n\n curved: { curved: true },\n flat: { curved: false },\n\n disabled: { disabled: true },\n active: { active: true },\n loading: { loading: true },\n checked: { checked: true },\n selected: { selected: true },\n removable: { removable: true },\n\n \"center-point\": { \"center-point\": true },\n vertical: { vertical: true },\n wrap: { wrap: true },\n\n indeterminate: { indeterminate: true },\n\n heading: { heading: true },\n open: { open: true },\n};\n\nexport function parseModifiers(modifiers: Modifier[]): Record<string, any> {\n const props: Record<string, any> = {};\n\n modifiers.forEach((mod) => {\n if (mod.type === \"flag\") {\n const mapping = MODIFIER_MAP[mod.value];\n if (mapping) {\n Object.assign(props, mapping);\n } else {\n throw new Error(\n `Unknown modifier \"${mod.value}\". ` +\n `Valid modifiers: ${Object.keys(MODIFIER_MAP).join(\", \")}`,\n );\n }\n } else if (mod.type === \"pair\") {\n props[mod.key] = mod.value;\n } else {\n throw new Error(\n `Unknown modifier type \"${mod.type}\". ` +\n `Expected \"flag\" or \"pair\". Modifier: ${JSON.stringify(mod)}`,\n );\n }\n });\n\n return props;\n}\n","let logger: any = null;\n\nfunction getLogger(scope: string) {\n if (!logger) {\n try {\n const satori = require(\"@nisoku/satori-log\");\n const s = satori.createSatori({ logLevel: \"error\", enableConsole: true });\n logger = s.createLogger(scope);\n } catch {\n logger = {\n info: (msg: string, opts?: any) =>\n console.log(`[${scope}] ${msg}`, opts),\n warn: (msg: string, opts?: any) =>\n console.warn(`[${scope}] ${msg}`, opts),\n error: (msg: string, opts?: any) =>\n console.error(`[${scope}] ${msg}`, opts),\n };\n }\n }\n return logger;\n}\n\nexport interface ComponentErrorOptions {\n tag?: string;\n suggestion?: string;\n cause?: string;\n}\n\nexport function unknownComponentError(\n component: string,\n suggestion?: string,\n): void {\n const log = getLogger(\"sazami\");\n log.warn(`Unknown component \"${component}\", using saz-${component}`, {\n suggest: suggestion,\n tags: [\"registry\", \"warning\"],\n });\n}\n\nexport function propertyError(\n message: string,\n options: ComponentErrorOptions,\n): void {\n const log = getLogger(\"sazami\");\n log.error(message, {\n state: { tag: options.tag },\n suggest: options.suggestion,\n cause: options.cause,\n tags: [\"component\", \"error\"],\n });\n}\n\nexport function eventError(\n message: string,\n options: ComponentErrorOptions,\n): void {\n const log = getLogger(\"sazami\");\n log.error(message, {\n state: { tag: options.tag },\n suggest: options.suggestion,\n cause: options.cause,\n tags: [\"events\", \"error\"],\n });\n}\n\nexport function renderError(\n message: string,\n options: { suggestion?: string; cause?: string },\n): void {\n const log = getLogger(\"sazami\");\n log.error(message, {\n suggest: options.suggestion,\n cause: options.cause,\n tags: [\"renderer\", \"error\"],\n });\n}\n\nexport function bindingError(\n message: string,\n options: { property?: string; suggestion?: string },\n): void {\n const log = getLogger(\"sazami\");\n log.error(message, {\n state: { property: options.property },\n suggest: options.suggestion,\n tags: [\"binding\", \"error\"],\n });\n}\n","// src/kernel/dependency.ts\nvar globalActiveComputation = null;\nvar globalIdCounter = 0;\nfunction getGlobalActiveComputation() {\n return globalActiveComputation;\n}\nfunction setGlobalActiveComputation(computation) {\n globalActiveComputation = computation;\n}\nfunction generateId() {\n return ++globalIdCounter;\n}\nvar uniqueIdCounter = 0;\nvar uniqueIdRandom = Math.random().toString(36).slice(2, 8);\nfunction generateUniqueId() {\n uniqueIdCounter++;\n return `${uniqueIdRandom}${uniqueIdCounter.toString(36)}`;\n}\nfunction trackDependency(signal2) {\n if (globalActiveComputation) {\n signal2.subscribe(globalActiveComputation);\n }\n}\n\n// src/kernel/path.ts\nfunction serializePath(segments) {\n return \"/\" + segments.join(\"/\");\n}\nfunction path(...parts) {\n const segments = [];\n let globType = \"none\";\n for (const part of parts) {\n const str = String(part);\n if (str === \"*\") {\n if (globType === \"deep\") {\n throw new Error(\"Cannot use * after ** in path\");\n }\n globType = \"shallow\";\n segments.push(\"*\");\n } else if (str === \"**\") {\n if (globType === \"shallow\") {\n throw new Error(\"Cannot use ** after * in path\");\n }\n globType = \"deep\";\n segments.push(\"**\");\n } else if (str === \"\") {\n throw new Error(\"Path segment cannot be empty\");\n } else {\n if (str.includes(\"/\")) {\n throw new Error(\"Path segment cannot contain '/'\");\n }\n segments.push(str);\n }\n }\n return {\n segments,\n raw: serializePath(segments),\n isGlob: globType !== \"none\",\n globType\n };\n}\nfunction isPathKey(value) {\n return typeof value === \"object\" && value !== null && \"segments\" in value && \"raw\" in value;\n}\nfunction matchesPath(pattern, target) {\n if (pattern.globType === \"none\") {\n return pattern.raw === target.raw;\n }\n if (pattern.globType === \"deep\") {\n let match2 = function(pi, ti) {\n if (pi >= p2.length && ti >= t.length) return true;\n if (pi >= p2.length) return false;\n if (ti >= t.length) {\n if (p2[pi] === \"**\") return match2(pi + 1, ti);\n return false;\n }\n const pSeg = p2[pi];\n if (pSeg === \"*\") {\n return match2(pi + 1, ti + 1);\n }\n if (pSeg === \"**\") {\n if (match2(pi + 1, ti)) return true;\n return match2(pi, ti + 1);\n }\n if (pSeg === t[ti]) {\n return match2(pi + 1, ti + 1);\n }\n return false;\n };\n var match = match2;\n const p2 = pattern.segments;\n const t = target.segments;\n return match2(0, 0);\n }\n if (pattern.globType === \"shallow\") {\n if (pattern.segments.length !== target.segments.length) {\n return false;\n }\n for (let i = 0; i < pattern.segments.length; i++) {\n const pSeg = pattern.segments[i];\n if (pSeg !== \"*\" && pSeg !== target.segments[i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\nfunction getParentPath(p2) {\n const nonGlobSegments = p2.segments.filter((s) => s !== \"*\" && s !== \"**\");\n if (nonGlobSegments.length === 0) {\n return null;\n }\n if (nonGlobSegments.length === 1) {\n return path(...nonGlobSegments);\n }\n return path(...nonGlobSegments.slice(0, -1));\n}\nfunction joinPath(base, ...parts) {\n const nonGlobSegments = base.segments.filter((s) => s !== \"*\" && s !== \"**\");\n return path(...nonGlobSegments, ...parts);\n}\n\n// node_modules/@nisoku/satori/dist/satori.mjs\nvar M = class {\n constructor(e) {\n this.config = e;\n }\n eventTimestamps = [];\n buffer = [];\n droppedCount = 0;\n sampledCount = 0;\n /**\n * Check if an event should be allowed through\n * Returns: { allowed: boolean, sampled?: boolean }\n */\n shouldAllow(e) {\n if (!this.config.enabled)\n return { allowed: true, sampled: false };\n const t = Date.now();\n if (this.eventTimestamps = this.eventTimestamps.filter((r) => t - r < 1e3), this.eventTimestamps.length < this.config.maxEventsPerSecond)\n return this.eventTimestamps.push(t), { allowed: true, sampled: false };\n switch (this.config.strategy) {\n case \"drop\":\n return this.droppedCount++, { allowed: false, sampled: false };\n case \"sample\":\n return Math.random() < this.config.samplingRate ? (this.eventTimestamps.push(t), this.sampledCount++, { allowed: true, sampled: true }) : (this.droppedCount++, { allowed: false, sampled: false });\n case \"buffer\":\n return this.buffer.length < (this.config.bufferSize || 100) ? this.buffer.push(e) : this.droppedCount++, { allowed: false, sampled: false };\n default:\n return { allowed: true, sampled: false };\n }\n }\n /**\n * Get buffered events and clear the buffer\n */\n flushBuffer() {\n const e = [...this.buffer];\n return this.buffer = [], e;\n }\n /**\n * Get current rate (events per second)\n */\n getCurrentRate() {\n const e = Date.now();\n return this.eventTimestamps = this.eventTimestamps.filter((t) => e - t < 1e3), this.eventTimestamps.length;\n }\n /**\n * Get statistics\n */\n getStats() {\n return {\n dropped: this.droppedCount,\n sampled: this.sampledCount,\n buffered: this.buffer.length,\n currentRate: this.getCurrentRate()\n };\n }\n /**\n * Reset statistics\n */\n reset() {\n this.eventTimestamps = [], this.buffer = [], this.droppedCount = 0, this.sampledCount = 0;\n }\n /**\n * Update configuration\n */\n updateConfig(e) {\n this.config = { ...this.config, ...e };\n }\n};\nfunction g(s, e, t = /* @__PURE__ */ new WeakMap()) {\n if (s === e) return true;\n if (typeof s == \"number\" && typeof e == \"number\")\n return Number.isNaN(s) && Number.isNaN(e) ? true : s === e;\n if (s === null || e === null || s === void 0 || e === void 0) return s === e;\n if (typeof s != typeof e || typeof s != \"object\") return false;\n const i = s, r = e;\n if (t.has(i))\n return t.get(i) === r;\n if (t.set(i, r), s instanceof Date && e instanceof Date)\n return s.getTime() === e.getTime();\n if (s instanceof Date || e instanceof Date) return false;\n if (s instanceof RegExp && e instanceof RegExp)\n return s.source === e.source && s.flags === e.flags;\n if (s instanceof RegExp || e instanceof RegExp) return false;\n if (s instanceof Map && e instanceof Map) {\n if (s.size !== e.size) return false;\n for (const [c, l] of s)\n if (!e.has(c) || !g(l, e.get(c), t)) return false;\n return true;\n }\n if (s instanceof Map || e instanceof Map) return false;\n if (s instanceof Set && e instanceof Set) {\n if (s.size !== e.size) return false;\n const c = Array.from(s), l = Array.from(e);\n for (const u of c) {\n let d = false;\n for (const h of l)\n if (g(u, h, t)) {\n d = true;\n break;\n }\n if (!d) return false;\n }\n return true;\n }\n if (s instanceof Set || e instanceof Set) return false;\n if (Array.isArray(s) && Array.isArray(e)) {\n if (s.length !== e.length) return false;\n const c = Object.keys(s).filter((h) => /^\\d+$/.test(h)).map(Number), l = Object.keys(e).filter((h) => /^\\d+$/.test(h)).map(Number);\n if (c.length !== l.length) return false;\n for (const h of c)\n if (!l.includes(h)) return false;\n for (let h = 0; h < s.length; h++) {\n const T = Object.prototype.hasOwnProperty.call(s, h), $ = Object.prototype.hasOwnProperty.call(e, h);\n if (T !== $ || T && !g(s[h], e[h], t)) return false;\n }\n const u = Object.keys(s).filter((h) => !/^\\d+$/.test(h)), d = Object.keys(e).filter((h) => !/^\\d+$/.test(h));\n if (u.length !== d.length) return false;\n for (const h of u)\n if (!Object.prototype.hasOwnProperty.call(e, h) || !g(s[h], e[h], t)) return false;\n return true;\n }\n if (Array.isArray(s) !== Array.isArray(e)) return false;\n const n = s, o = e, a = Object.keys(n), f = Object.keys(o);\n if (a.length !== f.length) return false;\n for (const c of a)\n if (!Object.prototype.hasOwnProperty.call(o, c) || !g(n[c], o[c], t)) return false;\n return true;\n}\nfunction p(s, e = /* @__PURE__ */ new WeakMap()) {\n if (s == null || typeof s != \"object\") return s;\n const t = s;\n if (e.has(t))\n return e.get(t);\n if (s instanceof Date)\n return new Date(s.getTime());\n if (s instanceof RegExp)\n return new RegExp(s.source, s.flags);\n if (s instanceof Map) {\n const r = /* @__PURE__ */ new Map();\n e.set(t, r);\n for (const [n, o] of s)\n r.set(p(n, e), p(o, e));\n return r;\n }\n if (s instanceof Set) {\n const r = /* @__PURE__ */ new Set();\n e.set(t, r);\n for (const n of s)\n r.add(p(n, e));\n return r;\n }\n if (Array.isArray(s)) {\n const r = [];\n e.set(t, r);\n for (let n = 0; n < s.length; n++)\n Object.prototype.hasOwnProperty.call(s, n) && (r[n] = p(s[n], e));\n for (const n of Object.keys(s))\n /^\\d+$/.test(n) || (r[n] = p(s[n], e));\n return r;\n }\n const i = {};\n e.set(t, i);\n for (const r of Object.keys(s))\n i[r] = p(s[r], e);\n return i;\n}\nfunction b(s, e = /* @__PURE__ */ new WeakSet()) {\n return s === null ? \"null\" : s === void 0 ? \"undefined\" : typeof s == \"string\" ? `s:${s}` : typeof s == \"number\" ? Number.isNaN(s) ? \"n:NaN\" : `n:${s}` : typeof s == \"boolean\" ? `b:${s}` : typeof s != \"object\" ? String(s) : e.has(s) ? \"[Circular]\" : (e.add(s), s instanceof Date ? `d:${s.getTime()}` : s instanceof RegExp ? `r:${s.source}:${s.flags}` : s instanceof Map ? `m:{${Array.from(s.entries()).map(([r, n]) => `${b(r, e)}=>${b(n, e)}`).sort().join(\",\")}}` : s instanceof Set ? `set:{${Array.from(s).map((r) => b(r, e)).sort().join(\",\")}}` : Array.isArray(s) ? `a:[${s.map((r, n) => Object.prototype.hasOwnProperty.call(s, n) ? b(r, e) : \"<empty>\").join(\",\")}]` : `o:{${Object.entries(s).sort(([i], [r]) => i.localeCompare(r)).map(([i, r]) => `${i}:${b(r, e)}`).join(\",\")}}`);\n}\nvar F = class {\n constructor(e) {\n this.config = e;\n }\n cache = /* @__PURE__ */ new Map();\n deduplicatedCount = 0;\n /**\n * Compute a deduplication key for an entry based on configured fields\n */\n computeDedupKey(e) {\n const t = [];\n for (const i of this.config.fields)\n switch (i) {\n case \"message\":\n t.push(`m:${e.message}`);\n break;\n case \"scope\":\n t.push(`s:${e.scope}`);\n break;\n case \"level\":\n t.push(`l:${e.level}`);\n break;\n case \"tags\":\n t.push(`t:${e.tags.sort().join(\",\")}`);\n break;\n case \"state\":\n e.state && t.push(`st:${b(e.state)}`);\n break;\n }\n return t.join(\"|\");\n }\n /**\n * Check if an event is a duplicate\n * Returns: { isDuplicate: boolean, originalId?: string, duplicateCount: number }\n */\n isDuplicate(e) {\n if (!this.config.enabled)\n return { isDuplicate: false, duplicateCount: 0 };\n const t = Date.now(), i = this.computeDedupKey(e);\n this.cleanExpired(t);\n const r = this.cache.get(i);\n return r && t - r.timestamp < this.config.windowMs ? (r.count++, this.deduplicatedCount++, { isDuplicate: true, duplicateCount: r.count }) : (this.cache.set(i, {\n hash: i,\n timestamp: t,\n count: 1\n }), this.cache.size > this.config.maxCacheSize && this.evictOldest(), { isDuplicate: false, duplicateCount: 1 });\n }\n /**\n * Clean expired entries from cache\n */\n cleanExpired(e) {\n for (const [t, i] of this.cache.entries())\n e - i.timestamp >= this.config.windowMs && this.cache.delete(t);\n }\n /**\n * Evict oldest entries when cache is full\n */\n evictOldest() {\n let e = null, t = 1 / 0;\n for (const [i, r] of this.cache.entries())\n r.timestamp < t && (t = r.timestamp, e = i);\n e && this.cache.delete(e);\n }\n /**\n * Get statistics\n */\n getStats() {\n return {\n cacheSize: this.cache.size,\n deduplicatedCount: this.deduplicatedCount\n };\n }\n /**\n * Reset the deduplicator\n */\n reset() {\n this.cache.clear(), this.deduplicatedCount = 0;\n }\n /**\n * Update configuration\n */\n updateConfig(e) {\n this.config = { ...this.config, ...e };\n }\n};\nvar I = class {\n constructor(e, t = {}) {\n this.config = e, this.events = t;\n }\n state = \"closed\";\n failureCount = 0;\n successCount = 0;\n lastFailureTime = 0;\n totalFailures = 0;\n totalSuccesses = 0;\n /**\n * Execute a function with circuit breaker protection\n */\n async execute(e) {\n if (!this.config.enabled)\n return e();\n if (!this.canExecute())\n throw new L(\"Circuit breaker is open\");\n try {\n const t = await e();\n return this.recordSuccess(), t;\n } catch (t) {\n throw this.recordFailure(\n t instanceof Error ? t : new Error(String(t))\n ), t;\n }\n }\n /**\n * Execute synchronously with circuit breaker protection\n */\n executeSync(e) {\n if (!this.config.enabled)\n return e();\n if (!this.canExecute())\n throw new L(\"Circuit breaker is open\");\n try {\n const t = e();\n return this.recordSuccess(), t;\n } catch (t) {\n throw this.recordFailure(\n t instanceof Error ? t : new Error(String(t))\n ), t;\n }\n }\n /**\n * Check if execution is allowed\n */\n canExecute() {\n return this.state === \"closed\" ? true : this.state === \"open\" ? Date.now() - this.lastFailureTime >= this.config.resetTimeout ? (this.transitionTo(\"half-open\"), true) : false : true;\n }\n /**\n * Record a successful execution\n */\n recordSuccess() {\n this.totalSuccesses++, this.events.onSuccess?.(this.successCount + 1), this.state === \"half-open\" ? (this.successCount++, this.successCount >= this.config.successThreshold && this.transitionTo(\"closed\")) : this.state === \"closed\" && (this.failureCount = 0);\n }\n /**\n * Record a failed execution\n */\n recordFailure(e) {\n this.totalFailures++, this.failureCount++, this.lastFailureTime = Date.now(), this.events.onFailure?.(e, this.failureCount), this.state === \"half-open\" ? this.transitionTo(\"open\") : this.state === \"closed\" && this.failureCount >= this.config.failureThreshold && this.transitionTo(\"open\");\n }\n /**\n * Transition to a new state\n */\n transitionTo(e) {\n const t = this.state;\n this.state = e, e === \"closed\" ? (this.failureCount = 0, this.successCount = 0, this.events.onClose?.()) : e === \"open\" ? (this.successCount = 0, this.events.onOpen?.()) : e === \"half-open\" && (this.successCount = 0, this.events.onHalfOpen?.()), this.events.onStateChange?.(e, t);\n }\n /**\n * Get current state\n */\n getState() {\n return this.state;\n }\n /**\n * Get statistics\n */\n getStats() {\n return {\n state: this.state,\n failureCount: this.failureCount,\n successCount: this.successCount,\n totalFailures: this.totalFailures,\n totalSuccesses: this.totalSuccesses,\n lastFailureTime: this.lastFailureTime\n };\n }\n /**\n * Manually reset the circuit breaker\n */\n reset() {\n this.transitionTo(\"closed\"), this.failureCount = 0, this.successCount = 0, this.totalFailures = 0, this.totalSuccesses = 0, this.lastFailureTime = 0;\n }\n /**\n * Force the circuit open (for testing/manual intervention)\n */\n forceOpen() {\n this.transitionTo(\"open\"), this.lastFailureTime = Date.now();\n }\n /**\n * Force the circuit closed (for testing/manual intervention)\n */\n forceClose() {\n this.transitionTo(\"closed\");\n }\n};\nvar L = class extends Error {\n constructor(e) {\n super(e), this.name = \"CircuitOpenError\";\n }\n};\nvar C = class {\n startTime;\n totalPublished = 0;\n totalDropped = 0;\n totalSampled = 0;\n totalDeduplicated = 0;\n recentEvents = [];\n loggerCount = 0;\n watcherCount = 0;\n subscriberCount = 0;\n bufferSize = 0;\n circuitState = \"closed\";\n // For tracking events per second\n eventTimestamps = [];\n // Historical snapshots for trending\n snapshots = [];\n maxSnapshots = 60;\n // Keep last 60 snapshots (e.g., 1 per second = 1 minute)\n constructor() {\n this.startTime = Date.now();\n }\n /**\n * Record a published event\n */\n recordPublished() {\n this.totalPublished++;\n const e = Date.now();\n this.eventTimestamps.push(e), this.eventTimestamps = this.eventTimestamps.filter((t) => e - t < 1e3);\n }\n /**\n * Record a dropped event\n */\n recordDropped() {\n this.totalDropped++;\n }\n /**\n * Record a sampled event\n */\n recordSampled() {\n this.totalSampled++;\n }\n /**\n * Record a deduplicated event\n */\n recordDeduplicated() {\n this.totalDeduplicated++;\n }\n /**\n * Update logger count\n */\n setLoggerCount(e) {\n this.loggerCount = e;\n }\n /**\n * Update watcher count\n */\n setWatcherCount(e) {\n this.watcherCount = e;\n }\n /**\n * Update subscriber count\n */\n setSubscriberCount(e) {\n this.subscriberCount = e;\n }\n /**\n * Update buffer size\n */\n setBufferSize(e) {\n this.bufferSize = e;\n }\n /**\n * Update circuit state\n */\n setCircuitState(e) {\n this.circuitState = e;\n }\n /**\n * Get current events per second\n */\n getEventsPerSecond() {\n const e = Date.now();\n return this.eventTimestamps = this.eventTimestamps.filter((t) => e - t < 1e3), this.eventTimestamps.length;\n }\n /**\n * Get current bus metrics\n */\n getBusMetrics() {\n return {\n totalPublished: this.totalPublished,\n totalDropped: this.totalDropped,\n totalSampled: this.totalSampled,\n totalDeduplicated: this.totalDeduplicated,\n eventsPerSecond: this.getEventsPerSecond(),\n bufferSize: this.bufferSize,\n subscriberCount: this.subscriberCount\n };\n }\n /**\n * Get full Satori metrics\n */\n getMetrics() {\n return {\n bus: this.getBusMetrics(),\n loggerCount: this.loggerCount,\n watcherCount: this.watcherCount,\n circuitState: this.circuitState,\n uptime: Date.now() - this.startTime\n };\n }\n /**\n * Take a snapshot for historical tracking\n */\n takeSnapshot() {\n const e = {\n timestamp: Date.now(),\n bus: this.getBusMetrics(),\n loggerCount: this.loggerCount,\n watcherCount: this.watcherCount,\n circuitState: this.circuitState,\n uptime: Date.now() - this.startTime\n };\n return this.snapshots.push(e), this.snapshots.length > this.maxSnapshots && (this.snapshots = this.snapshots.slice(-this.maxSnapshots)), e;\n }\n /**\n * Get historical snapshots\n */\n getSnapshots() {\n return [...this.snapshots];\n }\n /**\n * Get average events per second over time\n */\n getAverageEventsPerSecond() {\n return this.snapshots.length === 0 ? 0 : this.snapshots.reduce(\n (t, i) => t + i.bus.eventsPerSecond,\n 0\n ) / this.snapshots.length;\n }\n /**\n * Reset all metrics\n */\n reset() {\n this.startTime = Date.now(), this.totalPublished = 0, this.totalDropped = 0, this.totalSampled = 0, this.totalDeduplicated = 0, this.eventTimestamps = [], this.snapshots = [];\n }\n};\nvar k = {\n enabled: false,\n maxEventsPerSecond: 1e3,\n samplingRate: 0.1,\n strategy: \"sample\",\n bufferSize: 100\n};\nvar B = {\n enabled: false,\n windowMs: 5e3,\n fields: [\"message\", \"scope\", \"level\"],\n maxCacheSize: 1e3\n};\nvar E = {\n enabled: false,\n failureThreshold: 5,\n resetTimeout: 3e4,\n successThreshold: 3\n};\nvar y = {\n enableCallsite: true,\n enableEnvInfo: true,\n enableStateSnapshot: false,\n enableCausalLinks: true,\n enableMetrics: true,\n enableConsole: true,\n stateSelectors: [],\n maxBufferSize: 1e3,\n logLevel: \"info\",\n appVersion: \"1.0.0\",\n pollingInterval: 250,\n // More reasonable default\n customLevels: [],\n rateLimiting: k,\n deduplication: B,\n circuitBreaker: E\n};\nvar R = class {\n subscribers = [];\n middleware = [];\n buffer = [];\n maxBufferSize;\n rateLimiter;\n deduplicator;\n circuitBreaker;\n metrics;\n enableMetrics;\n constructor(e = {}) {\n typeof e == \"number\" && (e = { maxBufferSize: e }), this.maxBufferSize = e.maxBufferSize || 1e3, this.enableMetrics = e.enableMetrics ?? true, this.rateLimiter = new M({\n ...k,\n ...e.rateLimiting\n }), this.deduplicator = new F({\n ...B,\n ...e.deduplication\n }), this.circuitBreaker = new I(\n {\n ...E,\n ...e.circuitBreaker\n },\n {\n onStateChange: (t) => {\n this.enableMetrics && this.metrics.setCircuitState(t);\n }\n }\n ), this.metrics = new C();\n }\n publish(e) {\n if (!e.__internal?.isReplay && !e.skipDedup && this.deduplicator.isDuplicate(e).isDuplicate) {\n this.enableMetrics && this.metrics.recordDeduplicated();\n return;\n }\n if (!e.__internal?.isReplay && !e.skipRateLimit) {\n const t = this.rateLimiter.shouldAllow(e);\n if (!t.allowed) {\n this.enableMetrics && this.metrics.recordDropped();\n return;\n }\n t.sampled && (e.__internal = e.__internal || {}, e.__internal.sampled = true, this.enableMetrics && this.metrics.recordSampled());\n }\n try {\n this.circuitBreaker.executeSync(() => {\n this.doPublish(e);\n }), this.enableMetrics && (this.metrics.recordPublished(), this.metrics.setBufferSize(this.buffer.length), this.metrics.setSubscriberCount(this.subscribers.length));\n } catch {\n this.enableMetrics && this.metrics.recordDropped();\n }\n }\n doPublish(e) {\n let t = 0;\n const i = () => {\n if (t >= this.middleware.length) {\n this.subscribers.forEach((n) => n(e)), this.addToBuffer(e);\n return;\n }\n const r = this.middleware[t];\n t++, r(e, i);\n };\n i();\n }\n subscribe(e) {\n return this.subscribers.push(e), this.enableMetrics && this.metrics.setSubscriberCount(this.subscribers.length), () => {\n const t = this.subscribers.indexOf(e);\n t >= 0 && (this.subscribers.splice(t, 1), this.enableMetrics && this.metrics.setSubscriberCount(this.subscribers.length));\n };\n }\n use(e) {\n this.middleware.push(e);\n }\n getReplayBuffer() {\n return [...this.buffer];\n }\n getMetrics() {\n return this.metrics.getBusMetrics();\n }\n /**\n * Get the rate limiter instance for advanced configuration\n */\n getRateLimiter() {\n return this.rateLimiter;\n }\n /**\n * Get the deduplicator instance for advanced configuration\n */\n getDeduplicator() {\n return this.deduplicator;\n }\n /**\n * Get the circuit breaker instance for advanced configuration\n */\n getCircuitBreaker() {\n return this.circuitBreaker;\n }\n /**\n * Clear the event buffer\n */\n clearBuffer() {\n this.buffer.length = 0, this.enableMetrics && this.metrics.setBufferSize(0);\n }\n /**\n * Reset all state\n */\n reset() {\n this.buffer.length = 0, this.middleware.length = 0, this.rateLimiter.reset(), this.deduplicator.reset(), this.circuitBreaker.reset(), this.metrics.reset();\n }\n addToBuffer(e) {\n this.buffer.push(e), this.buffer.length > this.maxBufferSize && this.buffer.shift();\n }\n};\nvar A = 0;\nvar N = Date.now().toString(36);\nfunction O() {\n return `${N}-${++A}`;\n}\nfunction z() {\n return Date.now();\n}\nfunction j(s = 2) {\n try {\n const e = new Error().stack;\n if (!e) return;\n const i = e.split(`\n`)[s];\n if (!i) return;\n const r = i.match(/at\\s+(.+?)\\s+\\((.+?):(\\d+):(\\d+)\\)/) || i.match(/at\\s+(.+?):(\\d+):(\\d+)/);\n if (r) {\n const [, n, o, a, f] = r;\n return `${o}:${a}:${f}${n ? ` (${n})` : \"\"}`;\n }\n return i.trim();\n } catch {\n return;\n }\n}\nfunction P() {\n return typeof globalThis < \"u\" && \"Deno\" in globalThis ? \"deno\" : typeof globalThis < \"u\" && \"Bun\" in globalThis ? \"bun\" : typeof globalThis < \"u\" && \"caches\" in globalThis && typeof globalThis.caches == \"object\" && !(\"window\" in globalThis) ? \"cloudflare-workers\" : typeof globalThis < \"u\" && \"EdgeRuntime\" in globalThis ? \"edge\" : typeof window < \"u\" && typeof document < \"u\" ? \"browser\" : typeof process < \"u\" && process.versions && process.versions.node ? \"node\" : \"unknown\";\n}\nfunction V(s) {\n const e = P(), t = {\n platform: e,\n appVersion: s.appVersion\n };\n switch (e) {\n case \"browser\":\n typeof navigator < \"u\" && (t.userAgent = navigator.userAgent), typeof window < \"u\" && (t.url = window.location?.href, typeof document < \"u\" && (t.referrer = document.referrer));\n break;\n case \"node\":\n typeof process < \"u\" && (t.nodeVersion = process.version, t.arch = process.arch, process.env.NODE_ENV && (t.nodeEnv = process.env.NODE_ENV));\n break;\n case \"deno\":\n try {\n const i = globalThis.Deno;\n i?.version && (t.denoVersion = i.version.deno, t.v8Version = i.version.v8, t.typescriptVersion = i.version.typescript), i?.build && (t.os = i.build.os, t.arch = i.build.arch);\n } catch {\n }\n break;\n case \"bun\":\n try {\n const i = globalThis.Bun;\n i?.version && (t.bunVersion = i.version), i?.revision && (t.bunRevision = i.revision);\n } catch {\n }\n break;\n case \"cloudflare-workers\":\n t.runtime = \"cloudflare-workers\";\n break;\n case \"edge\":\n try {\n const i = globalThis.EdgeRuntime;\n t.edgeRuntime = i;\n } catch {\n }\n break;\n }\n return t;\n}\nfunction _(s) {\n if (!s.stateSelectors || s.stateSelectors.length === 0)\n return;\n const e = {};\n for (let t = 0; t < s.stateSelectors.length; t++) {\n const i = s.stateSelectors[t], r = typeof i == \"function\" ? i : i.selector, n = typeof i == \"function\" ? `selector_${t}` : i.name || `selector_${t}`;\n try {\n const o = r();\n o != null && (e[n] = p(o));\n } catch (o) {\n e[`${n}_error`] = o instanceof Error ? o.message : String(o);\n }\n }\n return Object.keys(e).length > 0 ? e : void 0;\n}\nvar W = class {\n nodes = /* @__PURE__ */ new Map();\n scopeLastEvent = /* @__PURE__ */ new Map();\n globalLastEvent;\n maxNodes = 1e4;\n /**\n * Add a new event to the causal graph\n */\n addEvent(e, t, i) {\n const r = {\n eventId: e,\n scope: t,\n timestamp: Date.now(),\n causes: i || [],\n effects: []\n };\n if (i)\n for (const n of i) {\n const o = this.nodes.get(n);\n o && o.effects.push(e);\n }\n this.nodes.set(e, r), this.scopeLastEvent.set(t, e), this.globalLastEvent = e, this.nodes.size > this.maxNodes && this.pruneOldest(Math.floor(this.maxNodes * 0.1));\n }\n /**\n * Get the causal link for a new event\n */\n getCausalLink(e, t) {\n return t || this.scopeLastEvent.get(e) || this.globalLastEvent;\n }\n /**\n * Get all causes (direct and transitive) for an event\n */\n getCauses(e, t = 1 / 0) {\n const i = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), n = (o, a) => {\n if (r.has(o) || a > t) return;\n r.add(o);\n const f = this.nodes.get(o);\n if (f)\n for (const c of f.causes)\n i.add(c), n(c, a + 1);\n };\n return n(e, 0), Array.from(i);\n }\n /**\n * Get all effects (direct and transitive) for an event\n */\n getEffects(e, t = 1 / 0) {\n const i = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), n = (o, a) => {\n if (r.has(o) || a > t) return;\n r.add(o);\n const f = this.nodes.get(o);\n if (f)\n for (const c of f.effects)\n i.add(c), n(c, a + 1);\n };\n return n(e, 0), Array.from(i);\n }\n /**\n * Get the causal chain from root to an event\n */\n getCausalChain(e) {\n const t = [];\n let i = e;\n const r = /* @__PURE__ */ new Set();\n for (; i && !r.has(i); ) {\n r.add(i), t.unshift(i);\n const n = this.nodes.get(i);\n if (!n || n.causes.length === 0) break;\n i = n.causes[0];\n }\n return t;\n }\n /**\n * Get node information\n */\n getNode(e) {\n return this.nodes.get(e);\n }\n /**\n * Check if two events are causally related\n */\n areCausallyRelated(e, t) {\n const i = this.getCauses(e), r = this.getEffects(e);\n return i.includes(t) || r.includes(t);\n }\n /**\n * Get events in the same scope\n */\n getEventsByScope(e) {\n const t = [];\n for (const [i, r] of this.nodes)\n r.scope === e && t.push(i);\n return t;\n }\n /**\n * Prune oldest nodes to stay within memory limits\n */\n pruneOldest(e) {\n const t = Array.from(this.nodes.entries()).sort(([, i], [, r]) => i.timestamp - r.timestamp).slice(0, e);\n for (const [i] of t) {\n const r = this.nodes.get(i);\n if (r) {\n for (const n of r.causes) {\n const o = this.nodes.get(n);\n o && (o.effects = o.effects.filter((a) => a !== i));\n }\n for (const n of r.effects) {\n const o = this.nodes.get(n);\n o && (o.causes = o.causes.filter((a) => a !== i));\n }\n }\n this.nodes.delete(i);\n }\n }\n /**\n * Clear all causal links\n */\n clear() {\n this.nodes.clear(), this.scopeLastEvent.clear(), this.globalLastEvent = void 0;\n }\n /**\n * Get statistics about the causal graph\n */\n getStats() {\n let e = 0, t = 0;\n for (const r of this.nodes.values())\n e += r.causes.length, t += r.effects.length;\n const i = this.nodes.size || 1;\n return {\n nodeCount: this.nodes.size,\n avgCauses: e / i,\n avgEffects: t / i\n };\n }\n};\nvar m = new W();\nvar x = /* @__PURE__ */ new Map();\nfunction K(s, e) {\n return m.getCausalLink(s, e);\n}\nfunction H(s, e, t) {\n m.addEvent(e, s, t), x.set(s, e);\n}\nfunction G(s, e, t) {\n const i = O(), r = z(), n = [...s.inheritedTags || [], ...s.options?.tags || []], o = {\n id: i,\n timestamp: r,\n level: s.level,\n scope: s.scope,\n message: s.message,\n tags: n,\n cause: s.inheritedCause || s.options?.cause,\n causeEventId: s.inheritedCauseEventId || s.options?.causeEventId,\n suggest: s.options?.suggest\n };\n if (s.options?.state && (o.state = { ...s.options.state }), e.enableCallsite && !o.__internal?.isReplay && (o.callsite = j(4)), e.enableEnvInfo && !o.__internal?.isReplay && (o.env = V(e)), e.enableStateSnapshot && !o.__internal?.isReplay) {\n const a = _(e);\n a && (o.state = { ...o.state, ...a });\n }\n if (e.enableCausalLinks && !o.__internal?.isReplay) {\n const a = K(s.scope, t);\n a && (o.previousEventId = a);\n }\n return o;\n}\nvar U = class {\n constructor(e, t) {\n this.logger = e, this.config = t, this.circuitBreaker = new I(\n {\n ...E,\n enabled: t.circuitBreaker?.enabled ?? false,\n ...t.circuitBreaker\n },\n {\n onOpen: () => {\n this.logger.warn(\n \"WatcherEngine circuit breaker opened: too many errors\",\n {\n tags: [\"watcher\", \"circuit-breaker\"]\n }\n );\n },\n onClose: () => {\n this.logger.info(\"WatcherEngine circuit breaker closed: recovered\", {\n tags: [\"watcher\", \"circuit-breaker\"]\n });\n }\n }\n );\n }\n watchers = /* @__PURE__ */ new Map();\n whenHandlers = /* @__PURE__ */ new Map();\n circuitBreaker;\n disposed = false;\n watch(e, t) {\n if (this.disposed)\n throw new Error(\"WatcherEngine has been disposed\");\n const i = this.generateId(), r = typeof e == \"function\" ? e : () => e, n = {\n id: i,\n getValue: r,\n label: t,\n lastValue: void 0,\n errorCount: 0,\n disposed: false\n }, o = () => {\n if (!(n.disposed || this.disposed))\n try {\n this.circuitBreaker.executeSync(() => {\n const f = r();\n if (!g(f, n.lastValue)) {\n const c = t || `watch_${i}`;\n let l;\n if (typeof f == \"object\" && f !== null)\n l = `${c}: state changed`;\n else {\n const u = this.formatValue(n.lastValue), d = this.formatValue(f);\n l = `${c}: ${u} -> ${d}`;\n }\n this.logger.info(l, {\n tags: [\"watch\"],\n state: {\n [`${c}_prev`]: p(n.lastValue),\n [`${c}_current`]: p(f)\n }\n }), n.lastValue = p(f);\n }\n n.errorCount = 0;\n });\n } catch (f) {\n n.errorCount++, (n.errorCount <= 3 || n.errorCount % 10 === 0) && this.logger.error(\n `Watch error for ${t || i} (count: ${n.errorCount})`,\n {\n tags: [\"watch\", \"error\"],\n state: {\n error: f instanceof Error ? f.message : String(f)\n }\n }\n ), n.errorCount >= 50 && (this.logger.error(\n `Watch ${t || i} disposed due to repeated errors`,\n {\n tags: [\"watch\", \"error\", \"auto-disposed\"]\n }\n ), this.disposeWatcher(i));\n }\n };\n o();\n const a = setInterval(o, this.config.pollingInterval || 250);\n return n.intervalId = a, this.watchers.set(i, n), {\n dispose: () => this.disposeWatcher(i)\n };\n }\n when(e, t, i) {\n if (this.disposed)\n throw new Error(\"WatcherEngine has been disposed\");\n const r = this.generateId(), n = typeof e == \"function\" ? e : () => e, o = {\n id: r,\n getValue: n,\n predicate: t,\n onTrigger: i,\n lastValue: void 0,\n intervalId: null,\n errorCount: 0,\n disposed: false\n }, f = setInterval(() => {\n if (!(o.disposed || this.disposed))\n try {\n this.circuitBreaker.executeSync(() => {\n const c = n(), l = o.lastValue !== void 0 ? p(o.lastValue) : void 0, u = p(c);\n t(l, u) && i(u, l), o.lastValue = u, o.errorCount = 0;\n });\n } catch (c) {\n o.errorCount++, (o.errorCount <= 3 || o.errorCount % 10 === 0) && this.logger.error(\n `When condition error for ${r} (count: ${o.errorCount})`,\n {\n tags: [\"when\", \"error\"],\n state: {\n error: c instanceof Error ? c.message : String(c)\n }\n }\n ), o.errorCount >= 50 && (this.logger.error(\n `When handler ${r} disposed due to repeated errors`,\n {\n tags: [\"when\", \"error\", \"auto-disposed\"]\n }\n ), this.disposeWhenHandler(r));\n }\n }, this.config.pollingInterval || 250);\n return o.intervalId = f, this.whenHandlers.set(r, o), {\n dispose: () => this.disposeWhenHandler(r)\n };\n }\n disposeWatcher(e) {\n const t = this.watchers.get(e);\n t && (t.disposed = true, t.intervalId && clearInterval(t.intervalId), this.watchers.delete(e));\n }\n disposeWhenHandler(e) {\n const t = this.whenHandlers.get(e);\n t && (t.disposed = true, t.intervalId && clearInterval(t.intervalId), this.whenHandlers.delete(e));\n }\n generateId() {\n return Math.random().toString(36).substring(2, 11);\n }\n formatValue(e) {\n return e === void 0 ? \"undefined\" : e === null ? \"null\" : typeof e == \"string\" ? `\"${e}\"` : typeof e == \"number\" || typeof e == \"boolean\" ? String(e) : Array.isArray(e) ? `Array(${e.length})` : typeof e == \"object\" ? `Object(${Object.keys(e).length} keys)` : String(e);\n }\n /**\n * Get the number of active watchers\n */\n getWatcherCount() {\n return this.watchers.size + this.whenHandlers.size;\n }\n /**\n * Get circuit breaker state\n */\n getCircuitState() {\n return this.circuitBreaker.getState();\n }\n /**\n * Dispose all watchers and clean up\n */\n dispose() {\n this.disposed || (this.disposed = true, this.watchers.forEach((e) => {\n e.disposed = true, e.intervalId && clearInterval(e.intervalId);\n }), this.whenHandlers.forEach((e) => {\n e.disposed = true, e.intervalId && clearInterval(e.intervalId);\n }), this.watchers.clear(), this.whenHandlers.clear());\n }\n /**\n * Check if the engine has been disposed\n */\n isDisposed() {\n return this.disposed;\n }\n};\nvar q = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3\n};\nvar v = class _v {\n constructor(e, t, i, r) {\n if (this.scope = e, this.config = t, this.bus = i, this.lastEventId = r, this.watcherEngine = new U(this, t), this.levelSeverities = { ...q }, t.customLevels)\n for (const n of t.customLevels)\n this.levelSeverities[n.name] = n.severity;\n }\n inheritedTags = [];\n inheritedCause;\n inheritedCauseEventId;\n watcherEngine;\n disposed = false;\n levelSeverities;\n event(e, t) {\n this.log(\"info\", e, t);\n }\n info(e, t) {\n this.log(\"info\", e, t);\n }\n warn(e, t) {\n this.log(\"warn\", e, t);\n }\n error(e, t) {\n this.log(\"error\", e, t);\n }\n debug(e, t) {\n this.log(\"debug\", e, t);\n }\n /**\n * Log with any level (built-in or custom)\n */\n log(e, t, i) {\n if (this.disposed) {\n console.warn(\n `Attempted to log on disposed logger (scope: ${this.scope})`\n );\n return;\n }\n e in this.levelSeverities || (console.warn(`Unknown log level: ${e}, defaulting to info`), e = \"info\");\n const r = this.config.logLevel || \"info\", n = this.levelSeverities[r] ?? 1;\n if ((this.levelSeverities[e] ?? 1) < n)\n return;\n const a = G(\n {\n level: e,\n scope: this.scope,\n message: t,\n options: i,\n inheritedTags: this.inheritedTags,\n inheritedCause: this.inheritedCause,\n inheritedCauseEventId: this.inheritedCauseEventId\n },\n this.config,\n this.lastEventId\n ), f = this.inheritedCauseEventId ? [this.inheritedCauseEventId] : void 0;\n H(this.scope, a.id, f), this.lastEventId = a.id, this.bus.publish(a);\n }\n tag(...e) {\n const t = new _v(\n this.scope,\n this.config,\n this.bus,\n this.lastEventId\n );\n return t.inheritedTags = [...this.inheritedTags, ...e], t.inheritedCause = this.inheritedCause, t.inheritedCauseEventId = this.inheritedCauseEventId, t;\n }\n causedBy(e) {\n const t = new _v(\n this.scope,\n this.config,\n this.bus,\n this.lastEventId\n );\n return t.inheritedTags = [...this.inheritedTags], typeof e == \"string\" ? t.inheritedCause = e : (t.inheritedCause = e.message, t.inheritedCauseEventId = e.id), t;\n }\n watch(e, t) {\n if (this.disposed)\n throw new Error(\n `Cannot create watch on disposed logger (scope: ${this.scope})`\n );\n return this.watcherEngine.watch(e, t);\n }\n when(e, t, i) {\n if (this.disposed)\n throw new Error(\n `Cannot create when handler on disposed logger (scope: ${this.scope})`\n );\n return this.watcherEngine.when(e, t, i);\n }\n /**\n * Get the number of active watchers on this logger\n */\n getWatcherCount() {\n return this.watcherEngine.getWatcherCount();\n }\n /**\n * Dispose this logger and all its watchers\n */\n dispose() {\n this.disposed || (this.disposed = true, this.watcherEngine.dispose());\n }\n /**\n * Check if this logger has been disposed\n */\n isDisposed() {\n return this.disposed;\n }\n};\nvar S = [\"debug\", \"info\", \"warn\", \"error\"];\nfunction D(s) {\n const e = [], t = [];\n if (s.enableCallsite !== void 0 && typeof s.enableCallsite != \"boolean\" && e.push(\"enableCallsite must be a boolean\"), s.enableEnvInfo !== void 0 && typeof s.enableEnvInfo != \"boolean\" && e.push(\"enableEnvInfo must be a boolean\"), s.enableStateSnapshot !== void 0 && typeof s.enableStateSnapshot != \"boolean\" && e.push(\"enableStateSnapshot must be a boolean\"), s.enableCausalLinks !== void 0 && typeof s.enableCausalLinks != \"boolean\" && e.push(\"enableCausalLinks must be a boolean\"), s.stateSelectors !== void 0 && (Array.isArray(s.stateSelectors) ? s.stateSelectors.forEach((i, r) => {\n typeof i != \"function\" && e.push(`stateSelectors[${r}] must be a function`);\n }) : e.push(\"stateSelectors must be an array\")), s.maxBufferSize !== void 0 && (typeof s.maxBufferSize != \"number\" ? e.push(\"maxBufferSize must be a number\") : s.maxBufferSize < 1 ? e.push(\"maxBufferSize must be at least 1\") : s.maxBufferSize > 1e5 && t.push(\n \"maxBufferSize is very large (>100000), this may cause memory issues\"\n )), s.logLevel !== void 0 && (S.includes(s.logLevel) || e.push(`logLevel must be one of: ${S.join(\", \")}`)), s.appVersion !== void 0 && typeof s.appVersion != \"string\" && e.push(\"appVersion must be a string\"), s.pollingInterval !== void 0 && (typeof s.pollingInterval != \"number\" ? e.push(\"pollingInterval must be a number\") : s.pollingInterval < 10 ? e.push(\"pollingInterval must be at least 10ms\") : s.pollingInterval < 50 && t.push(\n \"pollingInterval is very low (<50ms), this may impact performance\"\n )), s.rateLimiting !== void 0)\n if (typeof s.rateLimiting != \"object\" || s.rateLimiting === null)\n e.push(\"rateLimiting must be an object\");\n else {\n const i = s.rateLimiting;\n i.enabled !== void 0 && typeof i.enabled != \"boolean\" && e.push(\"rateLimiting.enabled must be a boolean\"), i.maxEventsPerSecond !== void 0 && (typeof i.maxEventsPerSecond != \"number\" ? e.push(\"rateLimiting.maxEventsPerSecond must be a number\") : i.maxEventsPerSecond < 1 && e.push(\"rateLimiting.maxEventsPerSecond must be at least 1\")), i.samplingRate !== void 0 && (typeof i.samplingRate != \"number\" ? e.push(\"rateLimiting.samplingRate must be a number\") : (i.samplingRate < 0 || i.samplingRate > 1) && e.push(\"rateLimiting.samplingRate must be between 0 and 1\"));\n }\n if (s.deduplication !== void 0)\n if (typeof s.deduplication != \"object\" || s.deduplication === null)\n e.push(\"deduplication must be an object\");\n else {\n const i = s.deduplication;\n if (i.enabled !== void 0 && typeof i.enabled != \"boolean\" && e.push(\"deduplication.enabled must be a boolean\"), i.windowMs !== void 0 && (typeof i.windowMs != \"number\" ? e.push(\"deduplication.windowMs must be a number\") : i.windowMs < 100 && e.push(\"deduplication.windowMs must be at least 100ms\")), i.fields !== void 0)\n if (!Array.isArray(i.fields))\n e.push(\"deduplication.fields must be an array\");\n else {\n const r = [\"message\", \"scope\", \"level\", \"tags\", \"state\"];\n i.fields.forEach((n, o) => {\n typeof n != \"string\" ? e.push(`deduplication.fields[${o}] must be a string`) : r.includes(n) || e.push(\n `deduplication.fields[${o}] \"${n}\" is not a valid field. Valid fields: ${r.join(\", \")}`\n );\n });\n }\n }\n if (s.customLevels !== void 0)\n if (!Array.isArray(s.customLevels))\n e.push(\"customLevels must be an array\");\n else {\n const i = /* @__PURE__ */ new Set(), r = [\"log\", \"event\"];\n s.customLevels.forEach((n, o) => {\n typeof n.name != \"string\" || n.name.trim() === \"\" ? e.push(`customLevels[${o}].name must be a non-empty string`) : (i.has(n.name) && e.push(\n `customLevels[${o}].name \"${n.name}\" is a duplicate`\n ), i.add(n.name), r.includes(n.name.toLowerCase()) && e.push(\n `customLevels[${o}].name \"${n.name}\" is a reserved method name`\n ), S.includes(n.name) && t.push(\n `customLevels[${o}].name \"${n.name}\" shadows a built-in level`\n )), typeof n.severity != \"number\" && e.push(`customLevels[${o}].severity must be a number`);\n });\n }\n return {\n valid: e.length === 0,\n errors: e,\n warnings: t\n };\n}\nvar J = class {\n buffer = [];\n flushTimer = null;\n config;\n constructor(e) {\n this.config = e, e.enabled && e.flushInterval && this.startAutoFlush();\n }\n /**\n * Add an entry to the persistence buffer\n */\n add(e) {\n this.config.enabled && (this.buffer.push(e), this.config.batchSize && this.buffer.length >= this.config.batchSize && this.flush());\n }\n /**\n * Flush the buffer to the adapter\n */\n async flush() {\n if (this.buffer.length === 0) return;\n const e = [...this.buffer];\n this.buffer = [];\n try {\n await this.config.adapter.write(e);\n } catch (t) {\n throw this.buffer.length < 1e4 && (this.buffer = [...e, ...this.buffer]), t;\n }\n }\n /**\n * Start auto-flush timer\n */\n startAutoFlush() {\n this.flushTimer || (this.flushTimer = setInterval(() => {\n this.flush().catch(console.error);\n }, this.config.flushInterval));\n }\n /**\n * Stop auto-flush and close adapter\n */\n async close() {\n this.flushTimer && (clearInterval(this.flushTimer), this.flushTimer = null), await this.flush(), await this.config.adapter.close?.();\n }\n /**\n * Get buffer size\n */\n getBufferSize() {\n return this.buffer.length;\n }\n};\nfunction Ie(s = {}) {\n const e = D(s);\n if (!e.valid)\n throw new Error(\n `Invalid Satori configuration:\n${e.errors.join(`\n`)}`\n );\n e.warnings.length > 0 && console.warn(\"Satori configuration warnings:\", e.warnings);\n const t = {\n ...y,\n ...s,\n // Merge nested configs properly\n rateLimiting: { ...y.rateLimiting, ...s.rateLimiting },\n deduplication: { ...y.deduplication, ...s.deduplication },\n circuitBreaker: {\n ...y.circuitBreaker,\n ...s.circuitBreaker\n }\n }, i = new R({\n maxBufferSize: t.maxBufferSize,\n rateLimiting: t.rateLimiting,\n deduplication: t.deduplication,\n circuitBreaker: t.circuitBreaker,\n enableMetrics: t.enableMetrics\n });\n !(typeof process < \"u\" && process.env?.NODE_ENV === \"test\") && t.enableConsole !== false && typeof console < \"u\" && i.subscribe((l) => {\n const u = l.level;\n (console[u === \"debug\" ? \"log\" : u] ?? console.log)(`[${l.scope}] ${l.message}`, l);\n });\n const n = new v(\"root\", t, i), o = /* @__PURE__ */ new Map();\n o.set(\"root\", n);\n let a = null;\n t.persistence?.enabled && (a = new J(t.persistence), i.subscribe((l) => {\n a?.add(l);\n }));\n const f = new C(), c = Date.now();\n return {\n config: t,\n bus: i,\n rootLogger: n,\n createLogger(l) {\n const u = new v(l, t, i);\n return o.set(l, u), f.setLoggerCount(o.size), u;\n },\n getMetrics() {\n let l = 0;\n for (const u of o.values())\n u.isDisposed() || (l += u.getWatcherCount());\n return f.setWatcherCount(l), {\n bus: i.getMetrics(),\n loggerCount: o.size,\n watcherCount: l,\n circuitState: i.getCircuitBreaker().getState(),\n uptime: Date.now() - c\n };\n },\n async flush() {\n a && await a.flush();\n },\n dispose() {\n for (const u of o.values())\n u.dispose();\n o.clear();\n const l = i.getReplayBuffer?.();\n l && (l.length = 0), i.reset(), a && a.close().catch(console.error);\n }\n };\n}\n\n// src/kernel/config.ts\nvar currentConfig = {\n lockViolation: \"throw\",\n satori: Ie({ logLevel: \"debug\" })\n};\nfunction configureSairin(config) {\n if (config.lockViolation !== void 0) {\n currentConfig.lockViolation = config.lockViolation;\n }\n if (config.satori !== void 0) {\n currentConfig.satori = config.satori;\n }\n}\nfunction getSairinConfig() {\n return currentConfig;\n}\nfunction getSairinLogger() {\n return currentConfig.satori.createLogger(\"sairin\");\n}\n\n// src/kernel/graph.ts\nvar nodeRegistry = /* @__PURE__ */ new Map();\nfunction pathToString(p2) {\n return p2.raw;\n}\nfunction getOrCreateNode(p2, kind) {\n const key = pathToString(p2);\n let node = nodeRegistry.get(key);\n if (!node) {\n node = createNode(p2, kind);\n nodeRegistry.set(key, node);\n }\n if (node.kind !== kind) {\n throw new TypeError(\n `Node kind mismatch for path \"${key}\": existing=${node.kind} requested=${kind}`\n );\n }\n return node;\n}\nfunction createNode(p2, kind) {\n const node = {\n path: p2,\n kind,\n version: 0,\n subscribers: /* @__PURE__ */ new Set()\n };\n if (kind === \"signal\") {\n return {\n ...node,\n kind: \"signal\",\n value: void 0\n };\n }\n if (kind === \"derived\") {\n return {\n ...node,\n kind: \"derived\",\n compute: void 0,\n cached: void 0,\n dirty: true\n };\n }\n return {\n ...node,\n kind: \"effect\",\n fn: void 0,\n cleanup: void 0,\n disposed: false\n };\n}\nfunction getNode(p2) {\n return nodeRegistry.get(pathToString(p2));\n}\nfunction hasNode(p2) {\n return nodeRegistry.has(pathToString(p2));\n}\nfunction deleteNode(p2) {\n return nodeRegistry.delete(pathToString(p2));\n}\nfunction getAllNodes() {\n return nodeRegistry.values();\n}\nfunction getNodesUnder(prefix) {\n const result = [];\n const prefixStr = prefix.raw;\n for (const node of nodeRegistry.values()) {\n const isExactMatch = node.path.raw === prefixStr;\n const hasProperPrefix = prefixStr === \"/\" ? node.path.raw.startsWith(\"/\") : node.path.raw.startsWith(prefixStr + \"/\");\n if (isExactMatch || hasProperPrefix || matchesPath(prefix, node.path)) {\n result.push(node);\n }\n }\n return result;\n}\nfunction subscribe(node, fn) {\n node.subscribers.add(fn);\n return () => {\n node.subscribers.delete(fn);\n };\n}\nfunction unsubscribe(node, fn) {\n node.subscribers.delete(fn);\n}\nfunction notifySubscribers(node) {\n node.version++;\n const called = /* @__PURE__ */ new Set();\n for (const fn of node.subscribers) {\n if (called.has(fn)) continue;\n called.add(fn);\n fn();\n }\n}\nfunction watch(pattern, callback) {\n const nodeHandlers = /* @__PURE__ */ new Map();\n const checkAndSubscribe = (node) => {\n if (matchesPath(pattern, node.path)) {\n const handler = () => callback(node.path, node.kind);\n node.subscribers.add(handler);\n const handlers = nodeHandlers.get(node);\n if (handlers) {\n handlers.add(handler);\n } else {\n nodeHandlers.set(node, /* @__PURE__ */ new Set([handler]));\n }\n }\n };\n for (const node of nodeRegistry.values()) {\n checkAndSubscribe(node);\n }\n return () => {\n for (const [node, handlers] of nodeHandlers) {\n for (const handler of handlers) {\n node.subscribers.delete(handler);\n }\n }\n nodeHandlers.clear();\n };\n}\nvar aliases = /* @__PURE__ */ new Map();\nfunction alias(aliasPath, targetPath) {\n aliases.set(aliasPath.raw, targetPath);\n}\nfunction resolveAlias(path3) {\n return aliases.get(path3.raw);\n}\nfunction unalias(aliasPath) {\n return aliases.delete(aliasPath.raw);\n}\nfunction isAlias(path3) {\n return aliases.has(path3.raw);\n}\nfunction trackNode(node) {\n const computation = getGlobalActiveComputation();\n if (computation) {\n const checked = computation.__circularCheck;\n if (!checked) {\n computation.__circularCheck = /* @__PURE__ */ new Set();\n }\n const nodes = computation.__circularCheck;\n if (nodes.has(node)) {\n const logger = getSairinLogger();\n logger.error(`Circular dependency detected: ${node.path.raw}`, {\n tags: [\"graph\", \"cycle\"]\n });\n return;\n }\n nodes.add(node);\n subscribe(node, computation);\n nodes.delete(node);\n }\n}\nfunction __resetRegistryForTesting() {\n nodeRegistry.clear();\n lockedPaths.clear();\n aliases.clear();\n scheduledCleanupNodes.length = 0;\n cleanupScheduled = false;\n cleanupIndex = 0;\n}\nvar lockedPaths = /* @__PURE__ */ new Map();\nfunction lock(path3, options) {\n const key = path3.raw;\n lockedPaths.set(key, {\n owner: options.owner,\n shallow: options.shallow ?? false\n });\n}\nfunction unlock(path3) {\n lockedPaths.delete(path3.raw);\n}\nfunction isLocked(path3) {\n const key = path3.raw;\n for (const [lockedKey, lock2] of lockedPaths) {\n if (lock2.shallow) {\n if (key === lockedKey) return true;\n } else {\n if (key.startsWith(lockedKey + \"/\") || key === lockedKey) return true;\n }\n }\n return false;\n}\nfunction checkLock(path3, owner) {\n const key = path3.raw;\n for (const [lockedKey, lock2] of lockedPaths) {\n if (lock2.owner === owner) continue;\n if (lock2.shallow) {\n if (key === lockedKey) return false;\n } else {\n if (key.startsWith(lockedKey + \"/\") || key === lockedKey) return false;\n }\n }\n return true;\n}\nfunction handleLockViolation(path3, owner, attemptedOwner) {\n const config = getSairinConfig();\n const logger = getSairinLogger();\n const message = `Lock violation: cannot write to \"${path3.raw}\", owned by different scope${attemptedOwner ? ` (attempted by: ${attemptedOwner})` : \"\"}`;\n if (config.lockViolation === \"throw\") {\n logger.error(message, { tags: [\"lock\", \"write\"] });\n } else if (config.lockViolation === \"warn\") {\n logger.warn(message, { tags: [\"lock\", \"write\"] });\n } else if (config.lockViolation === \"silent\") {\n logger.debug(message, { tags: [\"lock\", \"write\"] });\n }\n if (config.lockViolation === \"throw\") {\n throw new Error(message);\n }\n}\nfunction assertLock(path3, owner, attemptedOwner) {\n if (!checkLock(path3, owner)) {\n handleLockViolation(path3, owner, attemptedOwner);\n const config = getSairinConfig();\n return config.lockViolation === \"warn\";\n }\n return true;\n}\nvar cleanupScheduled = false;\nvar cleanupIndex = 0;\nvar scheduledCleanupNodes = [];\nvar CLEANUP_CHUNK_SIZE = 10;\nvar CLEANUP_WARN_THRESHOLD_MS = 100;\nfunction scheduleIncrementalCleanup(nodes, options = {}) {\n const chunkSize = options.chunkSize ?? CLEANUP_CHUNK_SIZE;\n scheduledCleanupNodes.push(...nodes);\n const startTime = Date.now();\n const logger = getSairinLogger();\n const cleanupChunk = () => {\n const chunk = scheduledCleanupNodes.slice(\n cleanupIndex,\n cleanupIndex + chunkSize\n );\n for (const node of chunk) {\n node.subscribers.clear();\n if (node.kind === \"derived\") {\n node.dirty = true;\n node.cached = void 0;\n }\n }\n cleanupIndex += chunkSize;\n if (cleanupIndex < scheduledCleanupNodes.length) {\n const elapsed = Date.now() - startTime;\n if (elapsed > CLEANUP_WARN_THRESHOLD_MS) {\n logger.warn(\n `Incremental cleanup falling behind: ${elapsed}ms elapsed`,\n { tags: [\"memory\", \"gc\"] }\n );\n }\n queueMicrotask(cleanupChunk);\n } else {\n scheduledCleanupNodes.length = 0;\n cleanupIndex = 0;\n cleanupScheduled = false;\n }\n };\n if (!cleanupScheduled) {\n cleanupScheduled = true;\n queueMicrotask(cleanupChunk);\n }\n}\nfunction capRetainedMemory(nodes) {\n for (const node of nodes) {\n node.subscribers.clear();\n if (node.kind === \"derived\") {\n node.cached = void 0;\n node.dirty = true;\n }\n }\n}\n\n// src/kernel/signal.ts\nvar Signal = class {\n id;\n path;\n _node;\n constructor(path3, initial, forceSet = false) {\n this.id = parseInt(generateUniqueId(), 36);\n this.path = path3;\n this._node = getOrCreateNode(path3, \"signal\");\n if (forceSet || initial !== void 0) {\n this._node.value = initial;\n }\n }\n get() {\n trackNode(this._node);\n return this._node.value;\n }\n set(next, options) {\n const pathIsLocked = isLocked(this.path);\n if (pathIsLocked) {\n const attempted = options?.owner ?? \"\";\n if (!assertLock(this.path, attempted, attempted)) return;\n }\n if (Object.is(this._node.value, next)) return;\n this._node.value = next;\n notifySubscribers(this._node);\n }\n update(fn, options) {\n this.set(fn(this._node.value), options);\n }\n subscribe(fn) {\n return subscribe(this._node, fn);\n }\n unsubscribe(fn) {\n unsubscribe(this._node, fn);\n }\n getSubscriberCount() {\n return this._node.subscribers.size;\n }\n peek() {\n return this._node.value;\n }\n get version() {\n return this._node.version;\n }\n};\nfunction signal(pathOrInitial, initial) {\n if (isPathKey(pathOrInitial)) {\n let path3 = pathOrInitial;\n const resolved = resolveAlias(path3);\n if (resolved) {\n path3 = resolved;\n }\n const existingNode = getNode(path3);\n if (existingNode && existingNode.kind === \"signal\") {\n return new Signal(path3, existingNode.value, false);\n }\n return new Signal(path3, initial, true);\n }\n throw new Error(\"signal() requires a path as first argument in Sairin\");\n}\nfunction isSignal(value) {\n return value instanceof Signal;\n}\n\n// src/kernel/derived.ts\nvar Derived = class {\n id;\n path;\n _node;\n _tracker = null;\n _sources = /* @__PURE__ */ new Set();\n _isComputing = false;\n constructor(path3, fn, options = {}) {\n this.id = parseInt(generateUniqueId(), 36);\n this.path = path3;\n this._node = getOrCreateNode(path3, \"derived\");\n this._node.compute = fn;\n if (options.eager) {\n this.recompute();\n }\n }\n recompute() {\n if (this._tracker) {\n for (const source of this._sources) {\n source.subscribers.delete(this._tracker);\n }\n }\n this._sources.clear();\n this._isComputing = true;\n let trackerInitialized = false;\n const trackedVersions = /* @__PURE__ */ new Map();\n const tracker = () => {\n if (this._isComputing || !trackerInitialized) return;\n for (const [source, prevVersion] of trackedVersions) {\n if (source.version !== prevVersion) {\n if (!this._node.dirty) {\n this._node.dirty = true;\n notifySubscribers(this._node);\n }\n return;\n }\n }\n };\n this._tracker = tracker;\n const prevComputation = getGlobalActiveComputation();\n setGlobalActiveComputation(tracker);\n try {\n this._node.cached = this._node.compute();\n this._node.dirty = false;\n } finally {\n const nodes = getAllNodes();\n const newSources = [];\n for (const node of nodes) {\n if (node.subscribers.has(tracker)) {\n newSources.push(node);\n trackedVersions.set(node, node.version);\n }\n }\n trackerInitialized = true;\n this._isComputing = false;\n for (const node of newSources) {\n this._sources.add(node);\n }\n setGlobalActiveComputation(prevComputation);\n }\n }\n get() {\n if (this._node.dirty) {\n this.recompute();\n }\n trackNode(this._node);\n return this._node.cached;\n }\n subscribe(fn) {\n return subscribe(this._node, fn);\n }\n unsubscribe(fn) {\n unsubscribe(this._node, fn);\n }\n getSubscriberCount() {\n return this._node.subscribers.size;\n }\n isDirty() {\n return this._node.dirty;\n }\n peek() {\n if (this._node.dirty) {\n this.recompute();\n }\n return this._node.cached;\n }\n get version() {\n return this._node.version;\n }\n};\nfunction derived(path3, fn, options) {\n return new Derived(path3, fn, options);\n}\n\n// src/kernel/batch.ts\nvar pendingEffects = /* @__PURE__ */ new Set();\nvar flushScheduled = false;\nvar flushGeneration = 0;\nvar batchDepth = 0;\nfunction scheduleEffect(fn) {\n pendingEffects.add(fn);\n if (!flushScheduled) {\n flushScheduled = true;\n const capturedGen = flushGeneration;\n queueMicrotask(() => {\n if (capturedGen !== flushGeneration) return;\n flushScheduled = false;\n const effects = [...pendingEffects];\n pendingEffects.clear();\n effects.forEach((effect2) => effect2());\n });\n }\n}\nfunction batch(fn) {\n const previousDepth = batchDepth;\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0 && pendingEffects.size > 0) {\n const effects = [...pendingEffects];\n pendingEffects.clear();\n effects.forEach((effect2) => effect2());\n }\n }\n}\nfunction isFlushing() {\n return flushScheduled;\n}\nfunction hasPendingEffects() {\n return pendingEffects.size > 0;\n}\nfunction __resetBatchForTesting() {\n pendingEffects.clear();\n flushScheduled = false;\n batchDepth = 0;\n flushGeneration++;\n}\n\n// src/kernel/effect.ts\nvar currentEffect = null;\nfunction onCleanup(fn) {\n if (currentEffect) {\n currentEffect.cleanups.push(fn);\n }\n}\nfunction runCleanup(cleanups) {\n while (cleanups.length > 0) {\n const fn = cleanups.pop();\n if (fn) fn();\n }\n}\nfunction createEffect(fn, schedule) {\n let cleanupFn;\n let disposed = false;\n const logger = getSairinLogger();\n const effectContext = { cleanups: [] };\n const runner = () => {\n if (disposed) return;\n runCleanup(effectContext.cleanups);\n if (typeof cleanupFn === \"function\") {\n cleanupFn();\n }\n const prev = getGlobalActiveComputation();\n const prevEffect = currentEffect;\n currentEffect = effectContext;\n effectContext.cleanups = [];\n setGlobalActiveComputation(runner);\n try {\n cleanupFn = fn();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Effect threw: ${message}`, {\n tags: [\"effect\", \"runtime\"]\n });\n } finally {\n setGlobalActiveComputation(prev);\n currentEffect = prevEffect;\n }\n };\n schedule(runner);\n return () => {\n disposed = true;\n runCleanup(effectContext.cleanups);\n if (typeof cleanupFn === \"function\") {\n cleanupFn();\n }\n };\n}\nvar effect = (fn) => createEffect(fn, scheduleEffect);\nvar effectSync = (fn) => createEffect(fn, (r) => r());\nvar effectIdle = (fn) => createEffect(fn, (runner) => {\n if (typeof requestIdleCallback !== \"undefined\") {\n requestIdleCallback(() => runner());\n } else {\n setTimeout(() => runner(), 0);\n }\n});\nfunction untracked(fn) {\n const previousComputation = getGlobalActiveComputation();\n setGlobalActiveComputation(null);\n try {\n return fn();\n } finally {\n setGlobalActiveComputation(previousComputation);\n }\n}\n\n// src/kernel/index.ts\nfunction createSignal(path3, value) {\n return new Signal(path3, value);\n}\nfunction createMemo(path3, fn, options) {\n return new Derived(path3, fn, options);\n}\nfunction createEffect2(fn) {\n return effect(fn);\n}\nfunction createEffectSync(fn) {\n return effectSync(fn);\n}\nfunction onDispose(fn) {\n onCleanup(fn);\n}\nfunction untrack(fn) {\n return untracked(fn);\n}\nfunction batched(fn) {\n batch(fn);\n}\n\n// src/store/reactive.ts\nvar storeId = 0;\nfunction nextStoreId() {\n return (++storeId).toString(36);\n}\nfunction isObject(value) {\n return value !== null && typeof value === \"object\";\n}\nfunction reactive(obj, basePath) {\n const id = nextStoreId();\n const storePath = isPathKey(basePath) ? basePath.raw : basePath || `store_${id}`;\n const result = {};\n const signal$ = signal(path(storePath, \"$\"), obj);\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n if (Array.isArray(value)) {\n const arrSignal = signal(path(storePath, String(key)), value);\n result[key] = new Proxy(arrSignal, {\n get(target, prop) {\n if (prop === \"length\") return target.get().length;\n if (typeof prop === \"number\") return target.get()[prop];\n if (prop === \"get\") return () => target.get();\n return target.get()[prop];\n },\n set(target, prop, newValue) {\n if (prop === \"length\") {\n const arr = [...target.get()];\n arr.length = newValue;\n target.set(arr);\n return true;\n }\n if (typeof prop === \"number\") {\n const arr = [...target.get()];\n arr[prop] = newValue;\n target.set(arr);\n return true;\n }\n return false;\n }\n });\n } else if (isObject(value)) {\n result[key] = reactive(value, path(storePath, String(key)));\n } else {\n result[key] = signal(path(storePath, String(key)), value);\n }\n }\n result.$ = signal$;\n result.$raw = obj;\n const proxy = new Proxy(result, {\n get(target, prop) {\n if (prop === \"$\") return target.$;\n if (prop === \"$raw\") return target.$raw;\n return target[prop];\n },\n set(target, prop, newValue) {\n if (prop === \"$\" || prop === \"$raw\") {\n throw new Error(\"Cannot set $ or $raw directly\");\n }\n const existingProp = target[prop];\n if (existingProp && existingProp instanceof Signal) {\n existingProp.set(newValue);\n } else if (isObject(newValue) && newValue !== null) {\n const parentSegments = target.$.path.segments;\n const childPath = path(...parentSegments, String(prop));\n target[prop] = reactive(newValue, childPath);\n } else {\n const parentSegments = target.$.path.segments;\n target[prop] = signal(path(...parentSegments, String(prop)), newValue);\n }\n return true;\n }\n });\n return proxy;\n}\nfunction isReactive(value) {\n return isObject(value) && \"$\" in value && value.$ instanceof Signal;\n}\nfunction toRaw(reactiveObj) {\n return reactiveObj.$raw;\n}\nfunction setReactive(reactiveObj, value) {\n for (const key of Object.keys(value)) {\n const propSignal = reactiveObj[key];\n if (propSignal && propSignal instanceof Signal) {\n propSignal.set(value[key]);\n }\n }\n reactiveObj.$.set(value);\n}\n\n// src/store/array.ts\nvar arrayId = 0;\nfunction nextArrayId() {\n return (++arrayId).toString(36);\n}\nvar ReactiveArray = class {\n id;\n itemsSignal;\n lengthSignal;\n subscribers = /* @__PURE__ */ new Set();\n constructor(initial = []) {\n this.id = nextArrayId();\n this.itemsSignal = signal(path(\"array\", this.id, \"items\"), initial);\n this.lengthSignal = signal(\n path(\"array\", this.id, \"length\"),\n initial.length\n );\n }\n notify() {\n for (const fn of this.subscribers) {\n fn();\n }\n }\n update(fn) {\n const newItems = fn(this.itemsSignal.peek());\n this.itemsSignal.set(newItems);\n this.lengthSignal.set(newItems.length);\n this.notify();\n }\n get length() {\n return this.lengthSignal.get();\n }\n get(index) {\n const items = this.itemsSignal.get();\n return items[index];\n }\n set(index, value) {\n const items = [...this.itemsSignal.peek()];\n items[index] = value;\n this.itemsSignal.set(items);\n this.lengthSignal.set(items.length);\n this.notify();\n }\n push(...values) {\n this.update((arr) => [...arr, ...values]);\n return this.lengthSignal.get();\n }\n pop() {\n let result;\n this.update((arr) => {\n result = arr[arr.length - 1];\n return arr.slice(0, -1);\n });\n return result;\n }\n shift() {\n let result;\n this.update((arr) => {\n result = arr[0];\n return arr.slice(1);\n });\n return result;\n }\n unshift(...values) {\n this.update((arr) => [...values, ...arr]);\n return this.lengthSignal.get();\n }\n clear() {\n this.update(() => []);\n }\n splice(start, deleteCount, ...items) {\n const deleted = [];\n this.update((arr) => {\n const result = [...arr];\n const effectiveDelete = deleteCount === void 0 ? Math.max(0, result.length - start) : deleteCount;\n deleted.push(...result.splice(start, effectiveDelete, ...items));\n return result;\n });\n return deleted;\n }\n filter(predicate) {\n return this.itemsSignal.get().filter(predicate);\n }\n map(fn) {\n return this.itemsSignal.get().map(fn);\n }\n reduce(fn, initial) {\n return this.itemsSignal.get().reduce(fn, initial);\n }\n find(predicate) {\n return this.itemsSignal.get().find(predicate);\n }\n findIndex(predicate) {\n return this.itemsSignal.get().findIndex(predicate);\n }\n includes(searchElement) {\n return this.itemsSignal.get().includes(searchElement);\n }\n indexOf(searchElement) {\n return this.itemsSignal.get().indexOf(searchElement);\n }\n some(predicate) {\n return this.itemsSignal.get().some(predicate);\n }\n every(predicate) {\n return this.itemsSignal.get().every(predicate);\n }\n toArray() {\n return [...this.itemsSignal.get()];\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => {\n this.subscribers.delete(fn);\n };\n }\n unsubscribe(fn) {\n this.subscribers.delete(fn);\n }\n [Symbol.iterator]() {\n return this.itemsSignal.get()[Symbol.iterator]();\n }\n};\nfunction reactiveArray(items) {\n return new ReactiveArray(items);\n}\n\n// src/store/map.ts\nvar mapId = 0;\nfunction nextMapId() {\n return (++mapId).toString(36);\n}\nvar ReactiveMap = class {\n id;\n entries = /* @__PURE__ */ new Map();\n keyIds = /* @__PURE__ */ new WeakMap();\n primKeyIds = /* @__PURE__ */ new Map();\n nextKeyId = 0;\n sizeSignal;\n subscribers = /* @__PURE__ */ new Set();\n constructor(initial = []) {\n this.id = nextMapId();\n this.sizeSignal = signal(path(\"map\", this.id, \"size\"), 0);\n for (const [key, value] of initial) {\n const kid = this.getKeyId(key);\n this.entries.set(key, signal(path(\"map\", this.id, kid), value));\n }\n this.sizeSignal.set(this.entries.size);\n }\n getKeyId(key) {\n if ((typeof key === \"object\" || typeof key === \"function\") && key !== null) {\n let id2 = this.keyIds.get(key);\n if (!id2) {\n id2 = (this.nextKeyId++).toString(36);\n this.keyIds.set(key, id2);\n }\n return id2;\n }\n const prim = key;\n let id = this.primKeyIds.get(prim);\n if (!id) {\n id = (this.nextKeyId++).toString(36);\n this.primKeyIds.set(prim, id);\n }\n return id;\n }\n removeKeyId(key) {\n if ((typeof key === \"object\" || typeof key === \"function\") && key !== null) {\n this.keyIds.delete(key);\n } else {\n const prim = key;\n this.primKeyIds.delete(prim);\n }\n }\n notify() {\n for (const fn of this.subscribers) {\n fn();\n }\n }\n get(key) {\n this.sizeSignal.get();\n return this.entries.get(key)?.get();\n }\n set(key, value) {\n const existing = this.entries.get(key);\n if (existing) {\n existing.set(value);\n } else {\n const kid = this.getKeyId(key);\n this.entries.set(key, signal(path(\"map\", this.id, kid), value));\n this.sizeSignal.set(this.entries.size);\n }\n this.notify();\n }\n has(key) {\n this.sizeSignal.get();\n return this.entries.has(key);\n }\n delete(key) {\n const result = this.entries.delete(key);\n if (result) {\n this.removeKeyId(key);\n this.sizeSignal.set(this.entries.size);\n this.notify();\n }\n return result;\n }\n clear() {\n for (const key of this.entries.keys()) {\n this.removeKeyId(key);\n }\n this.entries.clear();\n this.sizeSignal.set(0);\n this.notify();\n }\n get size() {\n return this.sizeSignal.get();\n }\n keys() {\n return this.entries.keys();\n }\n values() {\n this.sizeSignal.get();\n function* gen() {\n for (const sig of this.entries.values()) {\n yield sig.get();\n }\n }\n return gen.call(this);\n }\n entriesIterable() {\n this.sizeSignal.get();\n function* gen() {\n for (const [key, sig] of this.entries.entries()) {\n yield [key, sig.get()];\n }\n }\n return gen.call(this);\n }\n forEach(fn) {\n this.sizeSignal.get();\n for (const [key, sig] of this.entries.entries()) {\n fn(sig.get(), key, this);\n }\n }\n toArray() {\n this.sizeSignal.get();\n const result = [];\n for (const [key, sig] of this.entries.entries()) {\n result.push([key, sig.get()]);\n }\n return result;\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => {\n this.subscribers.delete(fn);\n };\n }\n unsubscribe(fn) {\n this.subscribers.delete(fn);\n }\n [Symbol.iterator]() {\n return this.entriesIterable();\n }\n};\nfunction reactiveMap(entries) {\n return new ReactiveMap(entries);\n}\n\n// src/store/index.ts\nfunction createStore(initial) {\n return reactive(initial);\n}\nfunction updateStore(store, value) {\n const current = toRaw(store);\n setReactive(store, { ...current, ...value });\n}\nfunction createList(items) {\n return reactiveArray(items);\n}\nfunction createMap(entries) {\n return reactiveMap(entries);\n}\n\n// src/flow/index.ts\nvar flowId = 0;\nfunction nextFlowId() {\n return (++flowId).toString(36);\n}\nfunction flow(fn) {\n const id = nextFlowId();\n const running = signal(path(\"flow\", id, \"running\"), false);\n const result = signal(path(\"flow\", id, \"result\"), null);\n const error = signal(path(\"flow\", id, \"error\"), null);\n let abortController = null;\n let currentPromise = null;\n return {\n running,\n result,\n error,\n start: async () => {\n if (running.peek()) {\n if (currentPromise) {\n await currentPromise;\n }\n return;\n }\n const runController = new AbortController();\n abortController = runController;\n running.set(true);\n error.set(null);\n const perform = async () => {\n try {\n const data = await fn(runController.signal);\n if (!runController.signal.aborted && abortController === runController) {\n result.set(data);\n }\n } catch (e) {\n if (!runController.signal.aborted && abortController === runController) {\n error.set(e instanceof Error ? e : new Error(String(e)));\n }\n } finally {\n if (abortController === runController) {\n running.set(false);\n }\n }\n };\n currentPromise = perform();\n try {\n await currentPromise;\n } catch (e) {\n }\n },\n cancel: () => {\n abortController?.abort();\n running.set(false);\n }\n };\n}\nfunction pipeline(fn) {\n const id = nextFlowId();\n const running = signal(path(\"pipeline\", id, \"running\"), false);\n const result = signal(path(\"pipeline\", id, \"result\"), null);\n const error = signal(path(\"pipeline\", id, \"error\"), null);\n let abortController = null;\n let currentPromise = null;\n return {\n running,\n result,\n error,\n start: async (input) => {\n if (running.peek()) {\n if (currentPromise) {\n await currentPromise;\n }\n return;\n }\n const runController = new AbortController();\n abortController = runController;\n running.set(true);\n error.set(null);\n const perform = async () => {\n try {\n const data = await fn(input, runController.signal);\n if (!runController.signal.aborted && abortController === runController) {\n result.set(data);\n }\n } catch (e) {\n if (!runController.signal.aborted && abortController === runController) {\n error.set(e instanceof Error ? e : new Error(String(e)));\n }\n } finally {\n if (abortController === runController) {\n running.set(false);\n }\n }\n };\n currentPromise = perform();\n try {\n await currentPromise;\n } catch (e) {\n }\n },\n cancel: () => {\n abortController?.abort();\n running.set(false);\n }\n };\n}\nfunction sequence(...fns) {\n const id = nextFlowId();\n const running = signal(path(\"sequence\", id, \"running\"), false);\n const results = signal(path(\"sequence\", id, \"results\"), []);\n const errors = signal(path(\"sequence\", id, \"errors\"), []);\n let abortController = null;\n return {\n running,\n results,\n errors,\n start: async () => {\n const runController = new AbortController();\n abortController = runController;\n running.set(true);\n const allResults = [];\n const allErrors = [];\n for (const fn of fns) {\n if (runController.signal.aborted) break;\n try {\n const result = await fn(runController.signal);\n allResults.push(result);\n } catch (e) {\n allErrors.push(e instanceof Error ? e : new Error(String(e)));\n }\n }\n if (abortController === runController) {\n results.set(allResults);\n errors.set(allErrors);\n running.set(false);\n }\n },\n cancel: () => {\n abortController?.abort();\n running.set(false);\n }\n };\n}\nfunction parallel(...fns) {\n const id = nextFlowId();\n const running = signal(path(\"parallel\", id, \"running\"), false);\n const results = signal(path(\"parallel\", id, \"results\"), []);\n const errors = signal(path(\"parallel\", id, \"errors\"), []);\n let abortController = null;\n return {\n running,\n results,\n errors,\n start: async () => {\n const runController = new AbortController();\n abortController = runController;\n running.set(true);\n const promises = fns.map((fn) => fn(runController.signal));\n const settled = await Promise.allSettled(promises);\n const allResults = [];\n const allErrors = [];\n for (const res of settled) {\n if (res.status === \"fulfilled\") {\n allResults.push(res.value);\n } else {\n const reason = res.reason;\n allErrors.push(\n reason instanceof Error ? reason : new Error(String(reason))\n );\n }\n }\n if (abortController === runController) {\n results.set(allResults);\n errors.set(allErrors);\n running.set(false);\n }\n },\n cancel: () => {\n abortController?.abort();\n running.set(false);\n }\n };\n}\nfunction race(...fns) {\n const id = nextFlowId();\n const running = signal(path(\"race\", id, \"running\"), false);\n const result = signal(path(\"race\", id, \"result\"), null);\n const error = signal(path(\"race\", id, \"error\"), null);\n const winner = signal(path(\"race\", id, \"winner\"), -1);\n let abortController = null;\n return {\n running,\n result,\n error,\n winner,\n start: async () => {\n const runController = new AbortController();\n abortController = runController;\n running.set(true);\n error.set(null);\n const promises = fns.map(\n (fn, index) => fn(runController.signal).then((value) => ({ index, value })).catch((e) => ({\n index,\n error: e instanceof Error ? e : new Error(String(e))\n }))\n );\n const outcome = await Promise.race(promises);\n if (abortController !== runController) return;\n if (\"error\" in outcome) {\n error.set(outcome.error);\n } else {\n result.set(outcome.value);\n winner.set(outcome.index);\n }\n abortController?.abort();\n running.set(false);\n },\n cancel: () => {\n abortController?.abort();\n running.set(false);\n }\n };\n}\n\n// src/async/resource.ts\nvar resourceId = 0;\nfunction nextResourceId() {\n return (++resourceId).toString(36);\n}\nfunction resource(loader, initialValue = null) {\n const id = nextResourceId();\n const value = signal(path(\"resource\", id, \"value\"), initialValue);\n const loading = signal(path(\"resource\", id, \"loading\"), true);\n const error = signal(path(\"resource\", id, \"error\"), null);\n let abortController = null;\n const load = () => {\n abortController?.abort();\n const currentController = new AbortController();\n abortController = currentController;\n loading.set(true);\n error.set(null);\n loader().then((data) => {\n if (!currentController.signal.aborted && abortController === currentController) {\n value.set(data);\n }\n }).catch((e) => {\n if (!currentController.signal.aborted && abortController === currentController) {\n error.set(e instanceof Error ? e : new Error(String(e)));\n }\n }).finally(() => {\n if (abortController === currentController) {\n loading.set(false);\n }\n });\n };\n load();\n return {\n value,\n loading,\n error,\n refetch: load,\n abort: () => {\n abortController?.abort();\n loading.set(false);\n error.set(null);\n }\n };\n}\nfunction resourceWithSignal(source, initialValue = null) {\n const id = nextResourceId();\n const value = signal(path(\"resource\", id, \"value\"), initialValue);\n const loading = signal(path(\"resource\", id, \"loading\"), false);\n const error = signal(path(\"resource\", id, \"error\"), null);\n let abortController = null;\n let currentLoader = null;\n const load = (loader) => {\n abortController?.abort();\n const currentController = new AbortController();\n abortController = currentController;\n currentLoader = loader;\n loading.set(true);\n error.set(null);\n loader().then((data) => {\n if (!currentController.signal.aborted && abortController === currentController && currentLoader === loader) {\n value.set(data);\n }\n }).catch((e) => {\n if (!currentController.signal.aborted && abortController === currentController && currentLoader === loader) {\n error.set(e instanceof Error ? e : new Error(String(e)));\n }\n }).finally(() => {\n if (abortController === currentController && currentLoader === loader) {\n loading.set(false);\n }\n });\n };\n effect(() => {\n const loader = source.get();\n if (loader) {\n load(loader);\n }\n });\n onCleanup(() => {\n abortController?.abort();\n });\n return {\n value,\n loading,\n error,\n refetch: () => {\n const loader = source.get();\n if (loader) load(loader);\n },\n abort: () => {\n abortController?.abort();\n abortController = null;\n loading.set(false);\n error.set(null);\n }\n };\n}\nvar SuspenseBoundary = class {\n id = nextResourceId();\n loading = signal(path(\"suspense\", this.id, \"loading\"), false);\n error = signal(\n path(\"suspense\", this.id, \"error\"),\n null\n );\n fallback;\n constructor(config) {\n this.fallback = config.fallback;\n }\n get loadingSignal() {\n return this.loading;\n }\n get errorSignal() {\n return this.error;\n }\n getFallback() {\n return this.fallback;\n }\n showFallback(show) {\n this.loading.set(show);\n }\n handleError(e) {\n this.error.set(e);\n }\n};\n\n// src/async/transition.ts\nvar isTransition = false;\nvar transitionStack = [];\nfunction startTransition(fn) {\n transitionStack.push(isTransition);\n isTransition = true;\n try {\n fn();\n } finally {\n isTransition = transitionStack.pop() ?? false;\n }\n}\nfunction getIsTransition() {\n return isTransition;\n}\nfunction useTransition(timeout = 0) {\n const pending = signal(\n path(\"transition\", \"pending\", generateUniqueId()),\n false\n );\n const start = (fn) => {\n pending.set(true);\n const performTransition = () => {\n try {\n startTransition(fn);\n } finally {\n pending.set(false);\n }\n };\n if (timeout > 0) {\n setTimeout(performTransition, timeout);\n } else {\n queueMicrotask(performTransition);\n }\n };\n return {\n pending,\n start\n };\n}\nfunction deferred(value, options = {}) {\n const { timeoutMs = 0, equals = Object.is } = options;\n const deferredValue = signal(\n path(\"transition\", \"deferred\", generateUniqueId()),\n value.peek()\n );\n const dispose = effect(() => {\n const newValue = value.get();\n if (equals(deferredValue.peek(), newValue)) {\n return;\n }\n if (timeoutMs > 0) {\n setTimeout(() => {\n if (!equals(deferredValue.peek(), newValue)) {\n deferredValue.set(newValue);\n }\n }, timeoutMs);\n } else {\n queueMicrotask(() => {\n if (!equals(deferredValue.peek(), newValue)) {\n deferredValue.set(newValue);\n }\n });\n }\n });\n return { signal: deferredValue, dispose };\n}\nfunction useDeferred(value, timeoutMs = 0) {\n let deferredSignal;\n effectSync(() => {\n const result = deferred(value, { timeoutMs });\n deferredSignal = result.signal;\n onCleanup(result.dispose);\n });\n return deferredSignal;\n}\nfunction useDeferredValue(value, timeoutMs = 0) {\n if (value instanceof Signal) {\n let deferredSignal2;\n effectSync(() => {\n const result = deferred(value, { timeoutMs });\n deferredSignal2 = result.signal;\n onCleanup(result.dispose);\n });\n return deferredSignal2;\n }\n const sig = signal(\n path(\"transition\", \"deferredValue\", generateUniqueId()),\n value\n );\n let deferredSignal;\n effectSync(() => {\n const result = deferred(sig, { timeoutMs });\n deferredSignal = result.signal;\n onCleanup(result.dispose);\n });\n return deferredSignal;\n}\n\n// src/async/index.ts\nfunction createResource(loader, initialValue) {\n return resource(loader, initialValue ?? null);\n}\nfunction createResourceFromSignal(source, initialValue) {\n return resourceWithSignal(source, initialValue ?? null);\n}\nfunction useTransitionResult() {\n return useTransition();\n}\nfunction deferValue(value, timeoutMs) {\n const sig = new Signal(path(\"async\", \"deferred\", generateUniqueId()), value);\n return useDeferredValue(sig, timeoutMs);\n}\n\n// src/context/index.ts\nvar contextStacks = /* @__PURE__ */ new Map();\nfunction createContext(defaultValue, name) {\n const contextId = Symbol(name);\n contextStacks.set(contextId, [defaultValue]);\n return {\n defaultValue,\n Provider: ({ value }) => {\n const stack = contextStacks.get(contextId);\n stack.push(value);\n return () => {\n stack.pop();\n };\n },\n consume: () => {\n const stack = contextStacks.get(contextId);\n if (!stack || stack.length === 0) {\n return defaultValue;\n }\n return stack[stack.length - 1];\n }\n };\n}\nfunction useContext(context) {\n return context.consume();\n}\nfunction useContextProvider(context, value) {\n return context.Provider({ value });\n}\nfunction createContextWithOptions(defaultValue, options) {\n return createContext(defaultValue, options?.name);\n}\n\n// src/debug/index.ts\nvar defaultHooks = {\n onSignalCreated: () => {\n },\n onSignalRead: () => {\n },\n onSignalWritten: () => {\n },\n onEffectCreated: () => {\n },\n onEffectRun: () => {\n },\n onDerivedInvalidated: () => {\n }\n};\nvar debugHooks = { ...defaultHooks };\nfunction enableDebug(hooks) {\n debugHooks = { ...defaultHooks, ...hooks };\n}\nfunction disableDebug() {\n debugHooks = { ...defaultHooks };\n}\nfunction getDebugHooks() {\n return debugHooks;\n}\nfunction notifySignalCreated(signal2, name) {\n debugHooks.onSignalCreated?.(signal2, name);\n}\nfunction notifySignalRead(signal2) {\n debugHooks.onSignalRead?.(signal2);\n}\nfunction notifySignalWritten(signal2, oldValue, newValue) {\n debugHooks.onSignalWritten?.(signal2, oldValue, newValue);\n}\nfunction notifyEffectCreated(effect2) {\n debugHooks.onEffectCreated?.(effect2);\n}\nfunction notifyEffectRun(effect2) {\n debugHooks.onEffectRun?.(effect2);\n}\nfunction notifyDerivedInvalidated(derived2) {\n debugHooks.onDerivedInvalidated?.(derived2);\n}\nvar registeredSignals = /* @__PURE__ */ new Map();\nvar registeredEffects = /* @__PURE__ */ new Map();\nvar registeredDerived = /* @__PURE__ */ new Map();\nfunction registerSignal(signal2) {\n registeredSignals.set(signal2.id, signal2);\n}\nfunction registerEffect(effect2, id) {\n registeredEffects.set(id, effect2);\n}\nfunction registerDerived(derived2) {\n registeredDerived.set(derived2.id, derived2);\n}\nfunction captureGraph() {\n const signals = [];\n const effects = [];\n const derived2 = [];\n registeredSignals.forEach((signal2) => {\n signals.push({\n id: signal2.id,\n value: signal2.peek(),\n subscriberCount: signal2.getSubscriberCount()\n });\n });\n registeredEffects.forEach((effect2) => {\n effects.push({\n id: 0,\n dependencies: []\n });\n });\n registeredDerived.forEach((d) => {\n derived2.push({\n id: d.id,\n cached: d.peek(),\n dirty: d.isDirty(),\n dependencies: []\n });\n });\n return { signals, effects, derived: derived2 };\n}\nfunction clearGraph() {\n registeredSignals.clear();\n registeredEffects.clear();\n registeredDerived.clear();\n}\n\n// src/dom/bindings.ts\nfunction bindText(el, readable) {\n const update = () => {\n const value = readable.get();\n if (el.textContent !== value) {\n el.textContent = value;\n }\n };\n return effect(() => {\n update();\n });\n}\nfunction bindHtml(el, readable) {\n return effect(() => {\n const value = readable.get();\n if (el.innerHTML !== value) {\n el.innerHTML = value;\n }\n });\n}\nfunction bindAttribute(el, attr, readable) {\n return effect(() => {\n const value = readable.get();\n if (value == null) {\n el.removeAttribute(attr);\n } else {\n el.setAttribute(attr, String(value));\n }\n });\n}\nfunction bindProperty(el, prop, readable) {\n return effect(() => {\n const value = readable.get();\n if (el[prop] !== value) {\n el[prop] = value;\n }\n });\n}\nfunction bindClass(el, readable) {\n return effect(() => {\n const value = readable.get();\n el.className = value;\n });\n}\nfunction bindStyle(el, styleProp, readable) {\n return effect(() => {\n const value = readable.get();\n el.style[styleProp] = value;\n });\n}\nfunction bindEvent(el, eventName, handler, options) {\n el.addEventListener(eventName, handler, options);\n return () => {\n el.removeEventListener(eventName, handler, options);\n };\n}\nfunction bindInputValue(input, sig) {\n const updateValue = () => {\n const value = sig.get();\n if (input.value !== value) {\n input.value = value;\n }\n };\n const handleInput = (e) => {\n const target = e.target;\n if (\"set\" in sig && typeof sig.set === \"function\") {\n sig.set(target.value);\n }\n };\n return effect(() => {\n updateValue();\n });\n}\nfunction bindInputChecked(input, sig) {\n const updateChecked = () => {\n input.checked = sig.get();\n };\n const handleChange = () => {\n if (\"set\" in sig && typeof sig.set === \"function\") {\n sig.set(input.checked);\n }\n };\n input.addEventListener(\"change\", handleChange);\n return effect(() => {\n updateChecked();\n return () => {\n input.removeEventListener(\"change\", handleChange);\n };\n });\n}\nfunction bindSelectValue(select, sig) {\n const updateValue = () => {\n const value = sig.get();\n if (select.value !== value) {\n select.value = value;\n }\n };\n const handleChange = () => {\n if (\"set\" in sig && typeof sig.set === \"function\") {\n sig.set(select.value);\n }\n };\n select.addEventListener(\"change\", handleChange);\n return effect(() => {\n updateValue();\n return () => {\n select.removeEventListener(\"change\", handleChange);\n };\n });\n}\nfunction bindVisibility(el, readable) {\n return effect(() => {\n const visible = readable.get();\n if (visible) {\n el.removeAttribute(\"hidden\");\n } else {\n el.setAttribute(\"hidden\", \"\");\n }\n });\n}\nfunction bindDisabled(el, readable) {\n return effect(() => {\n const disabled = readable.get();\n if (disabled) {\n el.setAttribute(\"disabled\", \"\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n}\nfunction bindBooleanAttribute(el, attr, readable) {\n return effect(() => {\n const value = readable.get();\n if (value) {\n el.setAttribute(attr, \"\");\n } else {\n el.removeAttribute(attr);\n }\n });\n}\nfunction bindElementSignal(el, sig, parent) {\n return effect(() => {\n const target = sig.get();\n if (target === el) {\n if (!parent.contains(el)) {\n parent.appendChild(el);\n }\n }\n });\n}\nfunction createBinding(destroyFn) {\n return { destroy: destroyFn };\n}\nexport {\n Derived,\n ReactiveArray,\n ReactiveMap,\n Signal,\n SuspenseBoundary,\n __resetBatchForTesting,\n __resetRegistryForTesting,\n alias,\n assertLock,\n batch,\n batched,\n bindAttribute,\n bindBooleanAttribute,\n bindClass,\n bindDisabled,\n bindElementSignal,\n bindEvent,\n bindHtml,\n bindInputChecked,\n bindInputValue,\n bindProperty,\n bindSelectValue,\n bindStyle,\n bindText,\n bindVisibility,\n capRetainedMemory,\n captureGraph,\n checkLock,\n clearGraph,\n configureSairin,\n createBinding,\n createContext,\n createContextWithOptions,\n createEffect2 as createEffect,\n createEffectSync,\n createList,\n createMap,\n createMemo,\n path as createPath,\n createResource,\n createResourceFromSignal,\n createSignal,\n createStore,\n deferValue,\n deferred,\n deleteNode,\n derived,\n disableDebug,\n effect,\n effectIdle,\n effectSync,\n enableDebug,\n flow,\n generateId,\n generateUniqueId,\n getAllNodes,\n getDebugHooks,\n getGlobalActiveComputation,\n getIsTransition,\n getNode,\n getNodesUnder,\n getOrCreateNode,\n getParentPath,\n getSairinConfig,\n hasNode,\n hasPendingEffects,\n isAlias,\n isFlushing,\n isLocked,\n isPathKey,\n isReactive,\n isSignal,\n joinPath,\n lock,\n matchesPath,\n notifyDerivedInvalidated,\n notifyEffectCreated,\n notifyEffectRun,\n notifySignalCreated,\n notifySignalRead,\n notifySignalWritten,\n notifySubscribers,\n onCleanup,\n onDispose,\n parallel,\n path,\n pipeline,\n race,\n reactive,\n reactiveArray,\n reactiveMap,\n registerDerived,\n registerEffect,\n registerSignal,\n resolveAlias,\n resource,\n resourceWithSignal,\n scheduleEffect,\n scheduleIncrementalCleanup,\n sequence,\n setGlobalActiveComputation,\n setReactive,\n signal,\n startTransition,\n subscribe,\n toRaw,\n trackDependency,\n trackNode,\n unalias,\n unlock,\n unsubscribe,\n untrack,\n untracked,\n updateStore,\n useContext,\n useContextProvider,\n useDeferred,\n useDeferredValue,\n useTransition,\n useTransitionResult,\n watch\n};\n//# sourceMappingURL=index.mjs.map","import {\n propertyError,\n eventError,\n bindingError,\n renderError,\n} from \"../errors\";\nimport { type Signal, type Readable, effect } from \"@nisoku/sairin\";\nimport {\n bindText,\n bindHtml,\n bindAttribute,\n bindProperty,\n bindStyle,\n bindInputValue,\n bindInputChecked,\n bindVisibility,\n bindDisabled,\n bindBooleanAttribute,\n bindSelectValue,\n} from \"@nisoku/sairin\";\n\nexport type BindTarget =\n | \"textContent\"\n | \"innerHTML\"\n | \"value\"\n | \"checked\"\n | \"disabled\"\n | \"visible\"\n | string;\n\nexport interface SazamiComponentConfig {\n observedAttributes?: readonly string[] | string[];\n properties?: Record<string, AnyPropertyConfig>;\n events?: Record<string, EventConfig>;\n binds?: Record<string, BindingType>;\n structuralRoots?: Record<string, string>;\n}\n\nexport interface PropertyConfig {\n type: \"string\";\n reflect?: boolean;\n default?: string;\n}\nexport interface PropertyConfigNumber {\n type: \"number\";\n reflect?: boolean;\n default: number;\n}\nexport interface PropertyConfigBoolean {\n type: \"boolean\";\n reflect?: boolean;\n default?: boolean;\n}\n\nexport type AnyPropertyConfig =\n | PropertyConfig\n | PropertyConfigNumber\n | PropertyConfigBoolean;\n\nexport interface EventConfig {\n name: string;\n detail?: Record<string, string>;\n}\n\nexport type BindingType = \"attribute\" | \"property\" | \"input\";\n\n// Get property config safely\ntype GetPropConfig<C extends SazamiComponentConfig, P extends string> =\n C[\"properties\"] extends Record<string, AnyPropertyConfig>\n ? P extends keyof C[\"properties\"]\n ? C[\"properties\"][P]\n : never\n : never;\n\n// Map property name -> its actual TS type\ntype PropType<C extends SazamiComponentConfig, P extends string> =\n GetPropConfig<C, P> extends AnyPropertyConfig\n ? GetPropConfig<C, P>[\"type\"] extends \"boolean\"\n ? boolean\n : GetPropConfig<C, P>[\"type\"] extends \"number\"\n ? number\n : string\n : string;\n\n// Map event's detail object -> inferred detail type\ntype EventDetail<\n C extends SazamiComponentConfig,\n D extends Record<string, string>,\n> = {\n [K in keyof D]: D[K] extends string ? PropType<C, D[K]> : never;\n};\n\n// All properties with their types\nexport type InferProps<C extends SazamiComponentConfig> =\n C[\"properties\"] extends Record<string, AnyPropertyConfig>\n ? { [P in keyof C[\"properties\"]]: PropType<C, P & string> }\n : {};\n\n// All events with their detail types\nexport type InferEvents<C extends SazamiComponentConfig> =\n C[\"events\"] extends Record<string, EventConfig>\n ? {\n [E in keyof C[\"events\"]]: C[\"events\"][E] extends EventConfig\n ? C[\"events\"][E][\"detail\"] extends Record<string, string>\n ? EventDetail<C, C[\"events\"][E][\"detail\"]>\n : {}\n : {};\n }\n : {};\n\n// Decorator stores metadata on prototype for base class to consume\nexport function component<C extends SazamiComponentConfig>(config: C) {\n return function <T extends { new (): SazamiComponent<C> }>(Constructor: T) {\n Object.defineProperty(Constructor.prototype, \"sazamiConfig\", {\n value: config,\n writable: false,\n configurable: true,\n });\n return Constructor;\n };\n}\n\nlet _nextComponentId = 0;\n\nexport class SazamiComponent<\n C extends SazamiComponentConfig = any,\n> extends HTMLElement {\n // Declare sazamiConfig, set by decorator on prototype\n declare sazamiConfig: C;\n\n componentId: string = `${this.tagName?.toLowerCase() ?? \"element\"}_${++_nextComponentId}`;\n\n protected shadow: ShadowRoot;\n protected _cleanupFns: Array<() => void> = [];\n private _rendered = false;\n private _propStorage: Map<string, string | number | boolean> = new Map();\n\n // Batching and backpressure\n private _dirty = false;\n private _pendingStyles: string | null = null;\n private _pendingTemplate: string | null = null;\n\n // Template and styles identity, skip no-op renders\n private _lastTemplate = \"\";\n private _lastStyles = \"\";\n\n // Structural change detection\n private _currentRootElement: string | null = null;\n\n // Handler registry: { type: [{ id, fn, source, target }] }\n private _handlerId = 0;\n private _handlers: Map<\n string,\n Array<{\n id: number;\n fn: EventListener;\n source: \"internal\" | \"user\";\n target: EventTarget;\n }>\n > = new Map();\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this._installPropertyReflectors();\n }\n\n // Static observedAttributes derived from properties with reflect: true\n static get observedAttributes(): string[] {\n const cfg = (this.prototype as any).sazamiConfig as\n | SazamiComponentConfig\n | undefined;\n if (!cfg) return [];\n\n // If explicitly provided, use that\n if (cfg.observedAttributes) {\n return [...cfg.observedAttributes];\n }\n\n // Otherwise derive from properties with reflect: true\n if (cfg.properties) {\n return Object.entries(cfg.properties)\n .filter(([_, prop]) => prop.reflect)\n .map(([name]) => name);\n }\n\n return [];\n }\n\n protected getStructuralRoot(): string | null {\n const cfg = (this as any).sazamiConfig as SazamiComponentConfig | undefined;\n if (cfg?.structuralRoots) {\n const mode = this.getRenderMode();\n return cfg.structuralRoots[mode] ?? null;\n }\n return this._currentRootElement;\n }\n\n protected getRenderMode(): string {\n return \"\";\n }\n\n private _extractRootElement(template: string): string {\n const match = template.match(/<([a-z][a-z0-9-]*)/i);\n return match ? match[1].toLowerCase() : \"\";\n }\n\n // Lifecycle\n connectedCallback() {\n if (!this._rendered) {\n this.render();\n this._rendered = true;\n }\n }\n\n disconnectedCallback() {\n this.removeAllHandlers();\n for (const fn of this._cleanupFns) {\n fn();\n }\n this._cleanupFns = [];\n this._rendered = false;\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (oldVal === newVal) return;\n if (this._rendered) {\n this.render();\n }\n }\n\n // Override in subclass\n render(): void {\n // no-op, subclass must implement\n }\n\n /**\n * Mounts the component's shadow DOM with the given styles and template.\n * Auto-detects structural changes and renders synchronously when needed.\n * For non-structural re-renders, defers to a microtask for batching.\n * @param styles - CSS styles to inject\n * @param template - HTML template string. Callers are responsible for escaping\n * user-provided data using escapeHtml() before interpolating into the template.\n */\n protected mount(styles: string, template: string) {\n const newRootElement = this._extractRootElement(template);\n const isStructuralChange =\n newRootElement !== \"\" && newRootElement !== this._currentRootElement;\n\n if (!this._rendered || isStructuralChange) {\n try {\n this.shadow.innerHTML = `<style>${styles}</style>${template}`;\n this._currentRootElement = newRootElement;\n } catch (e) {\n renderError(`Failed to render component: ${(e as Error).message}`, {\n suggestion: \"Check the template syntax and styles\",\n });\n }\n } else {\n this.scheduleRender(styles, template);\n }\n }\n\n /**\n * Mounts the component's shadow DOM synchronously.\n * Use this when you need to query/bind immediately after mounting.\n * @param styles - CSS styles to inject\n * @param template - HTML template string. Callers are responsible for escaping\n * user-provided data using escapeHtml() before interpolating into the template.\n */\n protected mountSync(styles: string, template: string) {\n const newRootElement = this._extractRootElement(template);\n this._pendingStyles = null;\n this._pendingTemplate = null;\n this._dirty = false;\n this._lastTemplate = template;\n this._lastStyles = styles;\n try {\n this.shadow.innerHTML = `<style>${styles}</style>${template}`;\n this._currentRootElement = newRootElement;\n } catch (e) {\n renderError(`Failed to render component: ${(e as Error).message}`, {\n suggestion: \"Check the template syntax and styles\",\n });\n }\n }\n\n /**\n * Schedules a render to occur in the next microtask.\n * Collapses multiple render() calls within the same tick into one DOM write.\n * Uses backpressure, if a render is already queued, subsequent calls are dropped.\n */\n protected scheduleRender(styles: string, template: string): void {\n this._pendingStyles = styles;\n this._pendingTemplate = template;\n if (this._dirty) return;\n this._dirty = true;\n queueMicrotask(() => {\n this._dirty = false;\n if (this._pendingTemplate !== null) {\n const currentTemplate = this._pendingTemplate;\n const currentStyles = this._pendingStyles!;\n this._pendingStyles = null;\n this._pendingTemplate = null;\n this._flush(currentStyles, currentTemplate);\n }\n });\n }\n\n /**\n * Flushes pending styles and template to the shadow DOM.\n * Called by scheduleRender when the microtask runs.\n * Skips stale renders if structural change made them obsolete.\n */\n private _flush(styles: string, template: string): void {\n const pendingRoot = this._extractRootElement(template);\n if (pendingRoot !== \"\" && pendingRoot !== this._currentRootElement) {\n return;\n }\n if (template === this._lastTemplate && styles === this._lastStyles) return;\n this._lastTemplate = template;\n this._lastStyles = styles;\n\n try {\n this.shadow.innerHTML = `<style>${styles}</style>${template}`;\n this._currentRootElement = pendingRoot || this._currentRootElement;\n } catch (e) {\n renderError(`Failed to render component: ${(e as Error).message}`, {\n suggestion: \"Check the template syntax and styles\",\n });\n }\n }\n\n // Unified binding API - delegates to Sairin's dom/bindings\n protected bind(\n selector: string,\n target: BindTarget,\n readable: Readable<any>,\n ): void {\n const element = selector === \":host\" ? this : this.$(selector);\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return;\n }\n\n let dispose: (() => void) | undefined;\n\n switch (target) {\n case \"textContent\":\n dispose = bindText(element, readable as Readable<string>);\n break;\n case \"innerHTML\":\n dispose = bindHtml(element, readable as Readable<string>);\n break;\n case \"value\":\n if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement\n ) {\n if (!(\"set\" in readable)) {\n bindingError(\n `\"value\" binding requires a writable Signal, got a read-only Readable`,\n {\n suggestion:\n \"Use Signal instead of Derived for two-way bindings\",\n },\n );\n break;\n }\n dispose = bindInputValue(element, readable as Signal<string>);\n } else if (element instanceof HTMLSelectElement) {\n if (\"set\" in readable) {\n dispose = bindSelectValue(element, readable as Signal<string>);\n } else {\n dispose = bindProperty(element, \"value\", readable);\n }\n } else {\n bindingError(\n `Cannot bind \"value\" to element type: ${element.constructor.name}`,\n {\n suggestion:\n \"Use bindAttribute or bindProperty for this element type\",\n },\n );\n }\n break;\n case \"checked\":\n if (element instanceof HTMLInputElement) {\n if (!(\"set\" in readable)) {\n bindingError(\n `\"checked\" binding requires a writable Signal, got a read-only Readable`,\n {\n suggestion:\n \"Use Signal instead of Derived for two-way bindings\",\n },\n );\n break;\n }\n dispose = bindInputChecked(element, readable as Signal<boolean>);\n } else {\n dispose = bindBooleanAttribute(\n element,\n \"checked\",\n readable as Readable<boolean>,\n );\n }\n break;\n case \"disabled\":\n dispose = bindDisabled(element, readable as Readable<boolean>);\n break;\n case \"visible\":\n dispose = bindVisibility(element, readable as Readable<boolean>);\n break;\n default:\n if (typeof target === \"string\") {\n dispose = bindAttribute(element, target, readable);\n }\n }\n\n if (dispose) {\n this._cleanupFns.push(dispose);\n }\n }\n\n protected bindText(selector: string, readable: Readable<string>): void {\n this.bind(selector, \"textContent\", readable);\n }\n\n protected bindHtml(selector: string, readable: Readable<string>): void {\n this.bind(selector, \"innerHTML\", readable);\n }\n\n protected bindValue(selector: string, readable: Readable<string>): void {\n this.bind(selector, \"value\", readable);\n }\n\n protected bindChecked(selector: string, readable: Readable<boolean>): void {\n this.bind(selector, \"checked\", readable);\n }\n\n protected bindDisabled(selector: string, readable: Readable<boolean>): void {\n this.bind(selector, \"disabled\", readable);\n }\n\n protected bindVisible(selector: string, readable: Readable<boolean>): void {\n this.bind(selector, \"visible\", readable);\n }\n\n protected bindAttribute(\n selector: string,\n attr: string,\n readable: Readable<any>,\n ): (() => void) | void {\n return this.bind(selector, attr, readable);\n }\n\n protected bindProperty<T>(\n selector: string,\n prop: string,\n readable: Readable<T>,\n ): void {\n const element = this.$(selector);\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return;\n }\n const dispose = bindProperty(element, prop as any, readable);\n this._cleanupFns.push(dispose);\n }\n\n protected bindStyle(\n selector: string,\n styleProp: string,\n readable: Readable<string>,\n ): void {\n const element = this.$(selector) as HTMLElement;\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return;\n }\n const dispose = bindStyle(element, styleProp, readable);\n this._cleanupFns.push(dispose);\n }\n\n protected bindToggleClass(\n selector: string,\n className: string,\n readable: Readable<boolean>,\n ): void {\n const element = this.$(selector);\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return;\n }\n this._cleanupFns.push(\n effect(() => {\n const active = readable.get();\n if (active) {\n element.classList.add(className);\n } else {\n element.classList.remove(className);\n }\n }),\n );\n }\n\n protected bindWidthPercent(\n selector: string,\n readable: Readable<number>,\n min: number = 0,\n max: number = 100,\n ): () => void {\n const element =\n selector === \":host\" ? this : (this.$(selector) as HTMLElement);\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return () => {};\n }\n const dispose = effect(() => {\n const value = readable.get();\n const range = max - min;\n const percent =\n range > 0\n ? Math.min(100, Math.max(0, ((value - min) / range) * 100))\n : 0;\n element.style.width = `${percent}%`;\n });\n this._cleanupFns.push(dispose);\n return dispose;\n }\n\n protected bindWidthPercentAttribute(\n selector: string,\n attr: string,\n readable: Readable<number>,\n min: number = 0,\n max: number = 100,\n ): void {\n const element = selector === \":host\" ? this : this.$(selector);\n if (!element) {\n bindingError(`Element not found: ${selector}`, {});\n return;\n }\n this._cleanupFns.push(\n effect(() => {\n const value = readable.get();\n const range = max - min;\n const percent =\n range > 0\n ? Math.min(100, Math.max(0, ((value - min) / range) * 100))\n : 0;\n element.setAttribute(attr, String(percent));\n }),\n );\n }\n\n // query stable internal nodes\n protected $<K extends keyof HTMLElementTagNameMap>(\n selector: K,\n ): HTMLElementTagNameMap[K] | null;\n protected $<E extends HTMLElement = HTMLElement>(selector: string): E | null;\n protected $(selector: string) {\n return this.shadow.querySelector(selector);\n }\n\n // Handler registry: addHandler returns an ID for later removal\n // Using Function type to accept both EventListener and specific event handlers like KeyboardEvent\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected addHandler(\n type: string,\n handler: Function,\n options?: { internal?: boolean; element?: EventTarget },\n ): number {\n const id = ++this._handlerId;\n const source: \"internal\" | \"user\" = options?.internal ? \"internal\" : \"user\";\n const target = options?.element || this;\n\n target.addEventListener(type, handler as EventListener);\n\n const handlers = this._handlers.get(type) || [];\n handlers.push({ id, fn: handler as EventListener, source, target });\n this._handlers.set(type, handlers);\n\n return id;\n }\n\n // Remove handler by ID, function reference, or type+id/type+fn\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected removeHandler(\n typeOrId: string | number,\n idOrFn?: number | Function,\n ) {\n // If only one arg and it's a number, remove by ID across all types\n if (typeof typeOrId === \"number\") {\n for (const [type, handlers] of this._handlers) {\n const index = handlers.findIndex((h) => h.id === typeOrId);\n if (index !== -1) {\n const handler = handlers[index];\n handler.target.removeEventListener(type, handler.fn);\n handlers.splice(index, 1);\n return;\n }\n }\n return;\n }\n\n // If two args, remove by ID or fn from specific type\n const handlers = this._handlers.get(typeOrId);\n if (!handlers || idOrFn === undefined) return;\n\n const index = handlers.findIndex((h) =>\n typeof idOrFn === \"number\" ? h.id === idOrFn : h.fn === idOrFn,\n );\n\n if (index !== -1) {\n const handler = handlers[index];\n handler.target.removeEventListener(typeOrId, handler.fn);\n handlers.splice(index, 1);\n }\n }\n\n // Remove handlers with filters\n protected removeAllHandlers(options?: {\n type?: string;\n source?: \"internal\" | \"user\";\n }) {\n const types = options?.type\n ? [options.type]\n : Array.from(this._handlers.keys());\n\n for (const type of types) {\n const handlers = this._handlers.get(type);\n if (!handlers) continue;\n\n const toRemove = options?.source\n ? handlers.filter((h) => h.source === options.source)\n : handlers;\n\n toRemove.forEach((h) => {\n (h.target || this).removeEventListener(type, h.fn);\n });\n\n if (options?.source) {\n this._handlers.set(\n type,\n handlers.filter((h) => h.source !== options.source),\n );\n } else {\n this._handlers.delete(type);\n }\n }\n }\n\n // dispatch custom events\n protected dispatch<T = any>(\n name: string,\n detail?: T,\n options: { bubbles?: boolean; composed?: boolean } = {},\n ) {\n this.dispatchEvent(\n new CustomEvent(name, {\n detail: detail ?? {},\n bubbles: options.bubbles ?? true,\n composed: options.composed ?? true,\n }),\n );\n }\n\n // dispatch typed events based on metadata\n protected dispatchEventTyped<E extends keyof InferEvents<C>>(\n event: E,\n detail: InferEvents<C>[E],\n ) {\n const config = this.sazamiConfig;\n const events = config.events;\n if (!events) return;\n\n // Find the event config by key\n const eventKey = event as string;\n const eventConfig = (events as any)[eventKey];\n\n if (!eventConfig) {\n eventError(`Event \"${String(event)}\" not defined in metadata`, {\n tag: this.tagName,\n suggestion: `Add \"${String(event)}\" to the events config`,\n });\n return;\n }\n\n this.dispatchEvent(\n new CustomEvent(eventConfig.name, {\n detail: detail as any,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // mount cleanup for Sairin bindings\n protected onCleanup(fn: () => void) {\n this._cleanupFns.push(fn);\n }\n\n // Auto-install property reflectors from metadata\n private _installPropertyReflectors() {\n const config = this.sazamiConfig;\n if (!config) return;\n const props = config.properties;\n\n if (!props) return;\n\n for (const [prop, cfg] of Object.entries(props)) {\n // Skip if subclass has a custom setter for this property\n const descriptor = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(this),\n prop,\n );\n if (descriptor && \"set\" in descriptor) {\n continue;\n }\n this._createReflector(prop, cfg.type, cfg.default, cfg.reflect);\n }\n }\n\n private _createReflector(\n prop: string,\n type: \"string\" | \"number\" | \"boolean\",\n defaultValue?: string | number | boolean,\n reflect?: boolean,\n ) {\n const attr = prop;\n\n Object.defineProperty(this, prop, {\n get() {\n if (type === \"boolean\") {\n return this.hasAttribute(attr);\n }\n if (this._propStorage.has(attr)) {\n return this._propStorage.get(attr);\n }\n const raw = this.getAttribute(attr);\n if (raw !== null) {\n if (type === \"number\") {\n const val = parseFloat(raw);\n return !isNaN(val) ? val : (defaultValue ?? 0);\n }\n return raw;\n }\n return defaultValue ?? (type === \"number\" ? 0 : \"\");\n },\n set(value: boolean | string | number) {\n if (type === \"boolean\") {\n if (value) {\n this.setAttribute(attr, \"\");\n } else {\n this.removeAttribute(attr);\n }\n } else {\n if (reflect && value != null && value !== \"\") {\n this.setAttribute(attr, String(value));\n } else if (reflect) {\n this.removeAttribute(attr);\n } else {\n this._propStorage.set(attr, value);\n }\n }\n },\n configurable: true,\n });\n }\n}\n","export function baseStyles(extra: string = \"\"): string {\n return `<style>\n*, *::before, *::after { box-sizing: border-box; }\n:host {\n font-family: var(--saz-font-family);\n}\n:host([hidden]) { display: none !important; }\n${extra}\n</style>`;\n}\n\n// LAYOUT\nexport const LAYOUT_FLEX = `\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n`;\n\nexport const GAP_RULES = `\n:host([gap=\"xsmall\"]) { gap: var(--saz-space-xsmall); }\n:host([gap=\"tiny\"]) { gap: var(--saz-space-tiny); }\n:host([gap=\"small\"]) { gap: var(--saz-space-small); }\n:host([gap=\"medium\"]) { gap: var(--saz-space-medium); }\n:host([gap=\"large\"]) { gap: var(--saz-space-large); }\n:host([gap=\"xlarge\"]) { gap: var(--saz-space-xlarge); }\n`;\n\n// SIZES\nexport const SIZE_RULES = `\n:host([size=\"xsmall\"]) { font-size: var(--saz-text-size-xsmall); }\n:host([size=\"tiny\"]) { font-size: var(--saz-text-size-tiny); }\n:host([size=\"small\"]) { font-size: var(--saz-text-size-small); }\n:host([size=\"medium\"]) { font-size: var(--saz-text-size-medium); }\n:host([size=\"large\"]) { font-size: var(--saz-text-size-large); }\n:host([size=\"xlarge\"]) { font-size: var(--saz-text-size-xlarge); }\n`;\n\nexport const SIZE_PADDING_RULES = `\n:host([size=\"xsmall\"]) { padding: var(--saz-space-xsmall) var(--saz-space-tiny); }\n:host([size=\"tiny\"]) { padding: var(--saz-space-tiny) var(--saz-space-small); }\n:host([size=\"small\"]) { padding: var(--saz-space-tiny) var(--saz-space-small); }\n:host([size=\"medium\"]) { padding: var(--saz-space-small) var(--saz-space-medium); }\n:host([size=\"large\"]) { padding: var(--saz-space-medium) var(--saz-space-large); min-width: 120px; width: auto; }\n:host([size=\"xlarge\"]) { padding: var(--saz-space-large) var(--saz-space-xlarge); min-width: 160px; width: auto; }\n`;\n\n// VARIANTS\nexport const VARIANT_BG_RULES = `\n:host([variant=\"accent\"]) { background: var(--saz-color-accent); color: var(--saz-color-on-accent); border-color: transparent; }\n:host([variant=\"primary\"]) { background: var(--saz-color-primary); color: var(--saz-color-on-primary); border-color: transparent; }\n:host([variant=\"secondary\"]) { background: transparent; color: var(--saz-color-text); border-color: var(--saz-color-border); }\n:host([variant=\"danger\"]) { background: var(--saz-color-danger); color: var(--saz-color-on-danger); border-color: transparent; }\n:host([variant=\"success\"]) { background: var(--saz-color-success); color: var(--saz-color-on-success); border-color: transparent; }\n:host([variant=\"warning\"]) { background: #fef3c7; color: #92400e; border-color: transparent; }\n:host([variant=\"dim\"]) { background: transparent; color: var(--saz-color-text-dim); border-color: transparent; }\n:host([variant=\"dim\"]:hover) { color: var(--saz-color-text); }\n`;\n\nexport const VARIANT_TEXT_RULES = `\n:host([variant=\"accent\"]) { color: var(--saz-color-accent); }\n:host([variant=\"primary\"]) { color: var(--saz-color-primary); }\n:host([variant=\"secondary\"]) { color: var(--saz-color-secondary); }\n:host([variant=\"danger\"]) { color: var(--saz-color-danger); }\n:host([variant=\"success\"]) { color: var(--saz-color-success); }\n:host([variant=\"dim\"]) { color: var(--saz-color-text-dim); }\n:host([variant=\"dimmer\"]) { color: var(--saz-color-text-dimmer); }\n`;\n\n// SHAPES\nexport const SHAPE_RULES = `\n:host([shape=\"round\"]) { border-radius: var(--saz-radius-round); }\n:host([shape=\"pill\"]) { border-radius: var(--saz-radius-round); }\n:host([shape=\"square\"]) { border-radius: var(--saz-radius-none); }\n:host([shape=\"rounded\"]) { border-radius: var(--saz-radius-soft); }\n:host([shape=\"circle\"]) { border-radius: 50%; }\n`;\n\n// STATES\nexport const STATE_DISABLED = `\n:host([disabled]) {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n`;\n\nexport const STATE_LOADING = `\n:host([loading]) {\n opacity: 0.7;\n cursor: wait;\n pointer-events: none;\n}\n`;\n\nexport const STATE_ACTIVE = `\n:host([active]),\n:host([checked]) {\n filter: brightness(0.9);\n}\n`;\n\n// INTERACTIVE\nexport const INTERACTIVE_FOCUS = `\n:host(:focus-visible) {\n outline: 2px solid var(--saz-color-primary);\n outline-offset: 2px;\n}\n`;\n\nexport const INTERACTIVE_HOVER = `\n:host(:hover) {\n filter: brightness(1.05);\n}\n:host(:active) {\n transform: scale(0.97);\n}\n`;\n\n// TYPOGRAPHY\nexport const TYPO_WEIGHT = `\n:host([weight=\"light\"]) { font-weight: var(--saz-text-weight-light); }\n:host([weight=\"normal\"]) { font-weight: var(--saz-text-weight-normal); }\n:host([weight=\"medium\"]) { font-weight: var(--saz-text-weight-medium); }\n:host([weight=\"bold\"]) { font-weight: var(--saz-text-weight-bold); }\n`;\n\nexport const TYPO_TONE = `\n:host([tone=\"dim\"]) { color: var(--saz-color-text-dim); }\n:host([tone=\"dimmer\"]) { color: var(--saz-color-text-dimmer); }\n`;\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: row;\n gap: var(--saz-space-medium);\n align-items: center;\n}\n${GAP_RULES}\n:host([justify=\"space-between\"]) { justify-content: space-between; }\n:host([justify=\"center\"]) { justify-content: center; }\n:host([justify=\"flex-end\"]) { justify-content: flex-end; }\n:host([justify=\"space-around\"]) { justify-content: space-around; }\n:host([justify=\"space-evenly\"]) { justify-content: space-evenly; }\n:host([align=\"center\"]) { align-items: center; }\n:host([align=\"flex-end\"]) { align-items: flex-end; }\n:host([align=\"stretch\"]) { align-items: stretch; }\n:host([align=\"baseline\"]) { align-items: baseline; }\n:host([wrap]) { flex-wrap: wrap; }\n`;\n\nconst rowConfig = {\n properties: {\n justify: { type: \"string\" as const, reflect: true },\n align: { type: \"string\" as const, reflect: true },\n wrap: { type: \"boolean\" as const, reflect: true },\n gap: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(rowConfig)\nexport class SazamiRow extends SazamiComponent<typeof rowConfig> {\n declare justify: string;\n declare align: string;\n declare wrap: boolean;\n declare gap: string;\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: column;\n gap: var(--saz-space-medium);\n}\n${GAP_RULES}\n:host([justify=\"space-between\"]) { justify-content: space-between; }\n:host([justify=\"center\"]) { justify-content: center; }\n:host([align=\"center\"]) { align-items: center; }\n:host([align=\"stretch\"]) { align-items: stretch; }\n`;\n\nconst columnConfig = {\n properties: {\n justify: { type: \"string\" as const, reflect: false },\n align: { type: \"string\" as const, reflect: false },\n gap: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(columnConfig)\nexport class SazamiColumn extends SazamiComponent<typeof columnConfig> {\n declare justify: string;\n declare align: string;\n declare gap: string;\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: var(--saz-space-medium);\n}\n${GAP_RULES}\n:host([cols=\"1\"]) { grid-template-columns: repeat(1, minmax(0, 1fr)); }\n:host([cols=\"2\"]) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n:host([cols=\"3\"]) { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n:host([cols=\"4\"]) { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n:host([cols=\"5\"]) { grid-template-columns: repeat(5, minmax(0, 1fr)); }\n:host([cols=\"6\"]) { grid-template-columns: repeat(6, minmax(0, 1fr)); }\n\n@media (min-width: 768px) {\n :host([md\\\\:cols=\"1\"]) { grid-template-columns: repeat(1, minmax(0, 1fr)); }\n :host([md\\\\:cols=\"2\"]) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n :host([md\\\\:cols=\"3\"]) { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n :host([md\\\\:cols=\"4\"]) { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n :host([md\\\\:cols=\"5\"]) { grid-template-columns: repeat(5, minmax(0, 1fr)); }\n :host([md\\\\:cols=\"6\"]) { grid-template-columns: repeat(6, minmax(0, 1fr)); }\n}\n\n@media (min-width: 1024px) {\n :host([lg\\\\:cols=\"1\"]) { grid-template-columns: repeat(1, minmax(0, 1fr)); }\n :host([lg\\\\:cols=\"2\"]) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n :host([lg\\\\:cols=\"3\"]) { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n :host([lg\\\\:cols=\"4\"]) { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n :host([lg\\\\:cols=\"5\"]) { grid-template-columns: repeat(5, minmax(0, 1fr)); }\n :host([lg\\\\:cols=\"6\"]) { grid-template-columns: repeat(6, minmax(0, 1fr)); }\n}\n`;\n\nconst gridConfig = {\n properties: {\n cols: { type: \"string\" as const, reflect: false },\n \"md:cols\": { type: \"string\" as const, reflect: false },\n \"lg:cols\": { type: \"string\" as const, reflect: false },\n gap: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(gridConfig)\nexport class SazamiGrid extends SazamiComponent<typeof gridConfig> {\n declare cols: string;\n declare \"md:cols\": string;\n declare \"lg:cols\": string;\n declare gap: string;\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: column;\n gap: var(--saz-space-medium);\n}\n${GAP_RULES}\n:host([align=\"center\"]) { align-items: center; }\n:host([align=\"stretch\"]) { align-items: stretch; }\n`;\n\nconst stackConfig = {\n properties: {\n align: { type: \"string\" as const, reflect: false },\n gap: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(stackConfig)\nexport class SazamiStack extends SazamiComponent<typeof stackConfig> {\n declare align: string;\n declare gap: string;\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES, VARIANT_BG_RULES } from \"./shared\";\nimport { Derived, isSignal, effect, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: column;\n background: var(--saz-color-surface);\n border: 1px solid var(--saz-color-border);\n padding: var(--saz-space-large);\n border-radius: var(--saz-radius-medium);\n box-shadow: var(--saz-shadow-soft);\n color: var(--saz-color-text);\n transition: box-shadow 0.25s ease, transform 0.25s ease, background 0.2s ease;\n gap: var(--saz-space-large);\n}\n:host(:hover) { box-shadow: var(--saz-shadow-medium); }\n${GAP_RULES}\n:host([layout=\"row\"]) { flex-direction: row; }\n:host([layout=\"column\"]) { flex-direction: column; }\n:host([align=\"center\"]) { align-items: center; }\n:host([align=\"stretch\"]) { align-items: stretch; }\n:host([justify=\"space-between\"]) { justify-content: space-between; }\n:host([justify=\"center\"]) { justify-content: center; }\n:host([size=\"small\"]) { padding: var(--saz-space-small); }\n:host([size=\"medium\"]) { padding: var(--saz-space-medium); }\n:host([size=\"large\"]) { padding: var(--saz-space-large); }\n:host([size=\"xlarge\"]) { padding: var(--saz-space-xlarge); }\n${VARIANT_BG_RULES}\n`;\n\nconst cardConfig = {\n properties: {\n layout: { type: \"string\" as const, reflect: false },\n align: { type: \"string\" as const, reflect: false },\n justify: { type: \"string\" as const, reflect: false },\n size: { type: \"string\" as const, reflect: false },\n variant: { type: \"string\" as const, reflect: false },\n gap: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(cardConfig)\nexport class SazamiCard extends SazamiComponent<typeof cardConfig> {\n declare layout: string;\n declare align: string;\n declare justify: string;\n declare size: string;\n declare variant: string;\n declare gap: string;\n\n private _loadingSignal: Readable<boolean> | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set loading(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._loadingSignal = value;\n this.onCleanup(\n effect(() => {\n const loading = value.get();\n if (loading) {\n this.setAttribute(\"loading\", \"\");\n } else {\n this.removeAttribute(\"loading\");\n }\n }),\n );\n } else {\n this._loadingSignal = null;\n if (value) {\n this.setAttribute(\"loading\", \"\");\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n }\n\n get loading(): boolean | Readable<boolean> {\n return this._loadingSignal || this.hasAttribute(\"loading\");\n }\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SIZE_RULES, TYPO_WEIGHT, TYPO_TONE } from \"./shared\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n font-size: var(--saz-text-size-medium);\n font-weight: var(--saz-text-weight-normal);\n line-height: var(--saz-text-leading-normal);\n color: inherit;\n}\n${SIZE_RULES}\n${TYPO_WEIGHT}\n${TYPO_TONE}\n:host([leading=\"tight\"]) { line-height: var(--saz-text-leading-tight); }\n:host([leading=\"normal\"]) { line-height: var(--saz-text-leading-normal); }\n:host([leading=\"loose\"]) { line-height: var(--saz-text-leading-loose); }\n`;\n\nconst textConfig = {\n observedAttributes: [\"content\"],\n properties: {\n size: { type: \"string\" as const, reflect: false },\n weight: { type: \"string\" as const, reflect: false },\n tone: { type: \"string\" as const, reflect: false },\n leading: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(textConfig)\nexport class SazamiText extends SazamiComponent<typeof textConfig> {\n declare size: string;\n declare weight: string;\n declare tone: string;\n declare leading: string;\n\n private _content: string | Readable<string> = \"\";\n private _textNode: Text | null = null;\n\n private _isReadable(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set content(value: string | Readable<string>) {\n this._content = value;\n\n if (this._isReadable(value)) {\n this._bindContentSignal(value);\n } else {\n this._setTextContent(value);\n }\n }\n\n get content(): string | Readable<string> {\n return this._content;\n }\n\n private _setTextContent(value: string) {\n if (this._textNode) {\n this._textNode.textContent = value ?? \"\";\n }\n }\n\n private _bindContentSignal(sig: Readable<string>) {\n const textNode = this._textNode;\n if (!textNode) return;\n\n const dispose = bindText(textNode, sig);\n this.onCleanup(dispose);\n }\n\n render() {\n this.mountSync(STYLES, `<slot></slot>`);\n\n const slot = this.shadow.querySelector(\"slot\");\n if (slot) {\n this._textNode = document.createTextNode(\"\");\n slot.replaceWith(this._textNode);\n } else {\n this._textNode = this.shadow.appendChild(document.createTextNode(\"\"));\n }\n\n if (this._isReadable(this._content)) {\n this._bindContentSignal(this._content);\n } else {\n const staticContent = this._content as string;\n if (staticContent) {\n this._setTextContent(staticContent);\n } else {\n const slottedText = this.textContent?.trim() || \"\";\n if (slottedText) {\n this._setTextContent(slottedText);\n }\n }\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"content\" && newVal !== null) {\n this.content = newVal;\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SIZE_RULES, TYPO_WEIGHT, TYPO_TONE } from \"./shared\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n font-size: var(--saz-text-size-xlarge);\n font-weight: var(--saz-text-weight-bold);\n line-height: var(--saz-text-leading-tight);\n color: inherit;\n margin: 0 0 var(--saz-space-small) 0;\n}\n${SIZE_RULES}\n${TYPO_WEIGHT}\n${TYPO_TONE}\n`;\n\nconst headingConfig = {\n observedAttributes: [\"content\"],\n properties: {\n size: { type: \"string\" as const, reflect: false },\n weight: { type: \"string\" as const, reflect: false },\n tone: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(headingConfig)\nexport class SazamiHeading extends SazamiComponent<typeof headingConfig> {\n declare size: string;\n declare weight: string;\n declare tone: string;\n\n private _content: string | Readable<string> = \"\";\n private _contentSignal: Readable<string> | null = null;\n private _textNode: Text | null = null;\n\n private _isReadable(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set content(value: string | Readable<string>) {\n this._content = value;\n\n if (this._isReadable(value)) {\n this._contentSignal = value;\n this._setupSignalBinding();\n } else {\n this._contentSignal = null;\n this._setTextContent(value);\n }\n }\n\n get content(): string | Readable<string> {\n return this._content;\n }\n\n private _setTextContent(value: string) {\n if (this._textNode) {\n this._textNode.textContent = value ?? \"\";\n }\n }\n\n private _setupSignalBinding() {\n const textNode = this._textNode;\n if (!textNode) return;\n\n const dispose = bindText(textNode, this._contentSignal!);\n this.onCleanup(dispose);\n }\n\n render() {\n this.mountSync(STYLES, `<slot></slot>`);\n\n const slot = this.shadow.querySelector(\"slot\");\n if (slot) {\n this._textNode = document.createTextNode(\"\");\n slot.replaceWith(this._textNode);\n } else {\n this._textNode = this.shadow.appendChild(document.createTextNode(\"\"));\n }\n\n if (this._contentSignal) {\n this._setupSignalBinding();\n } else {\n this._setTextContent(this._content as string);\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"content\" && newVal !== null) {\n this.content = newVal;\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n font-size: var(--saz-text-size-small);\n font-weight: var(--saz-text-weight-medium);\n color: var(--saz-color-text-dim);\n margin-bottom: var(--saz-space-tiny);\n line-height: var(--saz-text-leading-normal);\n cursor: default;\n user-select: none;\n}\n`;\n\nconst labelConfig = {\n observedAttributes: [\"content\"],\n properties: {\n for: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(labelConfig)\nexport class SazamiLabel extends SazamiComponent<typeof labelConfig> {\n declare for: string;\n\n private _content: string | Readable<string> = \"\";\n private _contentSignal: Readable<string> | null = null;\n private _textNode: Text | null = null;\n private _contentDispose: (() => void) | null = null;\n\n private _isReadable(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set content(value: string | Readable<string>) {\n this._content = value;\n\n if (this._isReadable(value)) {\n this._contentSignal = value;\n this._setupSignalBinding();\n } else {\n this._contentSignal = null;\n if (this._contentDispose) {\n this._contentDispose();\n this._contentDispose = null;\n }\n this._setTextContent(value);\n }\n }\n\n get content(): string | Readable<string> {\n return this._content;\n }\n\n private _setTextContent(value: string) {\n if (this._textNode) {\n this._textNode.textContent = value ?? \"\";\n }\n }\n\n private _setupSignalBinding() {\n const textNode = this._textNode;\n if (!textNode) return;\n\n if (this._contentDispose) {\n this._contentDispose();\n }\n const dispose = bindText(textNode, this._contentSignal!);\n this._contentDispose = dispose;\n this.onCleanup(dispose);\n }\n\n render() {\n this.mountSync(STYLES, `<label><slot></slot></label>`);\n\n const label = this.shadow.querySelector(\"label\");\n if (label) {\n if (!this._textNode) {\n this._textNode = document.createTextNode(\"\");\n label.prepend(this._textNode);\n }\n\n if (this._contentSignal) {\n this._setupSignalBinding();\n } else {\n this._setTextContent(this._content as string);\n }\n\n if (this.hasAttribute(\"for\")) {\n label.setAttribute(\"for\", this.getAttribute(\"for\") || \"\");\n }\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"content\" && newVal !== null) {\n this.content = newVal;\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport {\n SIZE_PADDING_RULES,\n VARIANT_BG_RULES,\n SHAPE_RULES,\n STATE_DISABLED,\n STATE_LOADING,\n STATE_ACTIVE,\n INTERACTIVE_FOCUS,\n INTERACTIVE_HOVER,\n TYPO_TONE,\n} from \"./shared\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindDisabled } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--saz-space-small);\n padding: var(--saz-space-small) var(--saz-space-large);\n border: 1px solid transparent;\n border-radius: var(--saz-radius-medium);\n font-size: var(--saz-text-size-medium);\n font-weight: var(--saz-text-weight-medium);\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n transition: background 0.2s ease, color 0.2s ease,\n box-shadow 0.2s ease, opacity 0.2s ease,\n transform 0.15s ease;\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n}\n${SIZE_PADDING_RULES}\n${VARIANT_BG_RULES}\n${SHAPE_RULES}\n${STATE_DISABLED}\n${STATE_LOADING}\n${STATE_ACTIVE}\n${INTERACTIVE_FOCUS}\n${INTERACTIVE_HOVER}\n${TYPO_TONE}\n`;\n\n// Config\nconst buttonConfig = {\n properties: {\n disabled: { type: \"boolean\" as const, reflect: true },\n loading: { type: \"boolean\" as const, reflect: true },\n active: { type: \"boolean\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n shape: { type: \"string\" as const, reflect: true },\n tone: { type: \"string\" as const, reflect: true },\n },\n events: {\n click: { name: \"saz-click\", detail: {} },\n },\n} as const;\n\n@component(buttonConfig)\nexport class SazamiButton extends SazamiComponent<typeof buttonConfig> {\n declare loading: boolean;\n\n private _disabledSignal: Readable<boolean> | null = null;\n private _disabledValue: boolean = false;\n private _disabledDispose: (() => void) | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._disabledDispose) {\n this._disabledDispose();\n this._disabledDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n const dispose = bindDisabled(this, value);\n this._disabledDispose = dispose;\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || this._disabledValue;\n }\n\n private _setDisabled(value: boolean) {\n this._disabledValue = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n private _getIsDisabled(): boolean {\n let baseDisabled = false;\n if (this._disabledSignal) {\n baseDisabled = this._disabledSignal.get();\n } else if (this._disabledValue) {\n baseDisabled = true;\n } else if (this.hasAttribute(\"disabled\")) {\n baseDisabled = true;\n }\n return baseDisabled || !!this.loading;\n }\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"button\");\n\n const isInert = this._getIsDisabled();\n if (isInert) {\n this.setAttribute(\"aria-disabled\", \"true\");\n this.setAttribute(\"tabindex\", \"-1\");\n } else {\n this.removeAttribute(\"aria-disabled\");\n const currentTabindex = this.getAttribute(\"tabindex\");\n if (currentTabindex === \"-1\" || !this.hasAttribute(\"tabindex\")) {\n this.setAttribute(\"tabindex\", \"0\");\n }\n }\n\n this.removeHandler(\"click\", this._handleClick);\n this.removeHandler(\"keydown\", this._handleKeydown);\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n this.dispatchEventTyped(\"click\", {});\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (this._getIsDisabled()) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this.click();\n }\n };\n}\n","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><line x1=\\\"19\\\" y1=\\\"12\\\" x2=\\\"5\\\" y2=\\\"12\\\"/><polyline points=\\\"12 19 5 12 12 5\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\\\"/><path d=\\\"M13.73 21a2 2 0 0 1-3.46 0\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><rect x=\\\"3\\\" y=\\\"4\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><line x1=\\\"16\\\" y1=\\\"2\\\" x2=\\\"16\\\" y2=\\\"6\\\"/><line x1=\\\"8\\\" y1=\\\"2\\\" x2=\\\"8\\\" y2=\\\"6\\\"/><line x1=\\\"3\\\" y1=\\\"10\\\" x2=\\\"21\\\" y2=\\\"10\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\\\"/><circle cx=\\\"12\\\" cy=\\\"13\\\" r=\\\"4\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2.5\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><polyline points=\\\"20 6 9 17 4 12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><polyline points=\\\"6 9 12 15 18 9\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><polyline points=\\\"12 6 12 12 16 14\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><line x1=\\\"18\\\" y1=\\\"6\\\" x2=\\\"6\\\" y2=\\\"18\\\"/><line x1=\\\"6\\\" y1=\\\"6\\\" x2=\\\"18\\\" y2=\\\"18\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"13\\\" height=\\\"13\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><line x1=\\\"12\\\" y1=\\\"5\\\" x2=\\\"12\\\" y2=\\\"19\\\"/><polyline points=\\\"19 12 12 19 5 12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\\\"/><polyline points=\\\"7 10 12 15 17 10\\\"/><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"3\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\\\"/><path d=\\\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"/><polyline points=\\\"14 2 14 8 20 8\\\"/><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"13\\\"/><line x1=\\\"16\\\" y1=\\\"17\\\" x2=\\\"8\\\" y2=\\\"17\\\"/><polyline points=\\\"10 9 9 9 8 9\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"/><polyline points=\\\"12 5 19 12 12 19\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"/><path d=\\\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><path d=\\\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\\\"/><polyline points=\\\"9 22 9 12 15 12 15 22\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><circle cx=\\\"8.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\"/><polyline points=\\\"21 15 16 10 5 21\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\"/><path d=\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><rect x=\\\"3\\\" y=\\\"11\\\" width=\\\"18\\\" height=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\\\"/><polyline points=\\\"22,6 12,13 2,6\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><line x1=\\\"4\\\" y1=\\\"6\\\" x2=\\\"20\\\" y2=\\\"6\\\"/><line x1=\\\"4\\\" y1=\\\"12\\\" x2=\\\"20\\\" y2=\\\"12\\\"/><line x1=\\\"4\\\" y1=\\\"18\\\" x2=\\\"20\\\" y2=\\\"18\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><polygon points=\\\"8,5 8,19 17,12\\\"/><rect x=\\\"17\\\" y=\\\"5\\\" width=\\\"2\\\" height=\\\"14\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><rect x=\\\"6\\\" y=\\\"5\\\" width=\\\"4\\\" height=\\\"14\\\" rx=\\\"1\\\"/><rect x=\\\"14\\\" y=\\\"5\\\" width=\\\"4\\\" height=\\\"14\\\" rx=\\\"1\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\\\"/><circle cx=\\\"12\\\" cy=\\\"10\\\" r=\\\"3\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><polygon points=\\\"8,5 19,12 8,19\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><line x1=\\\"12\\\" y1=\\\"5\\\" x2=\\\"12\\\" y2=\\\"19\\\"/><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><polygon points=\\\"16,5 16,19 7,12\\\"/><rect x=\\\"5\\\" y=\\\"5\\\" width=\\\"2\\\" height=\\\"14\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><polyline points=\\\"23 4 23 10 17 10\\\"/><path d=\\\"M20.49 15a9 9 0 11-2.12-9.36L23 10\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"7\\\"/><line x1=\\\"16.5\\\" y1=\\\"16.5\\\" x2=\\\"21\\\" y2=\\\"21\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/><path d=\\\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M4 12v8a2 2 0 002 2h12a2 2 0 002-2v-8\\\"/><polyline points=\\\"16 6 12 2 8 6\\\"/><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"15\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><polygon points=\\\"6,5 6,19 13,12\\\"/><polygon points=\\\"13,5 13,19 20,12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"3\\\" stroke-linecap=\\\"round\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\" stroke-opacity=\\\"0.25\\\"/><path d=\\\"M12 2a10 10 0 0 1 10 10\\\" stroke-linecap=\\\"round\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><polygon points=\\\"12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"><rect x=\\\"6\\\" y=\\\"5\\\" width=\\\"12\\\" height=\\\"14\\\" rx=\\\"1\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><polyline points=\\\"3 6 5 6 21 6\\\"/><path d=\\\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\\\"/><line x1=\\\"10\\\" y1=\\\"11\\\" x2=\\\"10\\\" y2=\\\"17\\\"/><line x1=\\\"14\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"17\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"5\\\"/><polyline points=\\\"5 12 12 5 19 12\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\\\"/><polyline points=\\\"17 8 12 3 7 8\\\"/><line x1=\\\"12\\\" y1=\\\"3\\\" x2=\\\"12\\\" y2=\\\"15\\\"/></svg>\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\\\"/><circle cx=\\\"12\\\" cy=\\\"7\\\" r=\\\"4\\\"/></svg>\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"><path d=\\\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"/><circle cx=\\\"9\\\" cy=\\\"7\\\" r=\\\"4\\\"/><path d=\\\"M23 21v-2a4 4 0 0 0-3-3.87\\\"/><path d=\\\"M16 3.13a4 4 0 0 1 0 7.75\\\"/></svg>\"","// @ts-expect-error\nconst iconModules = import.meta.glob(\"./*.svg\", {\n query: \"?raw\",\n import: \"default\",\n eager: true,\n});\n\nexport const ICON_SVGS: Record<string, string> = {};\n\nfor (const path in iconModules) {\n const name = path.replace(\"./\", \"\").replace(\".svg\", \"\");\n ICON_SVGS[name] = iconModules[path] as string;\n}\n","import { SazamiComponent, component } from \"./base\";\nimport {\n STATE_DISABLED,\n STATE_ACTIVE,\n INTERACTIVE_FOCUS,\n VARIANT_TEXT_RULES,\n} from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--saz-space-small);\n border: none;\n border-radius: var(--saz-radius-round);\n background: transparent;\n color: var(--saz-color-text);\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease, transform 0.1s ease;\n line-height: 1;\n}\n:host(:hover) {\n background: var(--saz-color-surface-hover);\n}\n:host(:active) {\n background: var(--saz-color-surface-active);\n transform: scale(0.75);\n}\n${VARIANT_TEXT_RULES}\n${STATE_DISABLED}\n${STATE_ACTIVE}\n${INTERACTIVE_FOCUS}\n:host([size=\"small\"]) { padding: var(--saz-space-tiny); }\n:host([size=\"large\"]) { padding: var(--saz-space-medium); }\n:host([size=\"xlarge\"]) { padding: var(--saz-space-large); }\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--saz-icon-size-medium);\n height: var(--saz-icon-size-medium);\n}\n:host([size=\"small\"]) .icon {\n width: var(--saz-icon-size-small);\n height: var(--saz-icon-size-small);\n}\n:host([size=\"large\"]) .icon {\n width: var(--saz-icon-size-large);\n height: var(--saz-icon-size-large);\n}\n:host([size=\"xlarge\"]) .icon {\n width: var(--saz-icon-size-xlarge);\n height: var(--saz-icon-size-xlarge);\n}\n.icon svg { width: 100%; height: 100%; pointer-events: none; }\n`;\n\n// Config\nconst iconButtonConfig = {\n properties: {\n icon: { type: \"string\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n },\n events: {\n click: { name: \"saz-click\", detail: {} },\n },\n} as const;\n\n@component(iconButtonConfig)\nexport class SazamiIconButton extends SazamiComponent<typeof iconButtonConfig> {\n declare icon: string;\n declare size: string;\n declare variant: string;\n\n private _handlersAdded = false;\n private _autoAriaLabel = false;\n private _disabledSignal: Readable<boolean> | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n this.bindDisabled(\":host\", value);\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n render() {\n const icon = this.getAttribute(\"icon\") || this.textContent?.trim() || \"\";\n const svg = ICON_SVGS[icon];\n\n if (svg) {\n this.mount(\n STYLES,\n `\n <div class=\"icon\">${svg}</div>\n `,\n );\n } else {\n this.mount(STYLES, `<div class=\"icon\"><span class=\"glyph\"></span></div>`);\n const glyph = this.$(\".glyph\");\n if (glyph) glyph.textContent = icon;\n }\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"button\");\n this._updateTabIndex();\n if (!this.hasAttribute(\"aria-label\")) {\n this.setAttribute(\"aria-label\", icon);\n this._autoAriaLabel = true;\n } else {\n this._autoAriaLabel = false;\n }\n\n if (!this._handlersAdded) {\n this._handlersAdded = true;\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n }\n\n private _updateTabIndex() {\n if (this._getIsDisabled()) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n static get observedAttributes() {\n return [\"disabled\", \"icon\", \"size\", \"variant\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (oldVal === newVal) return;\n if (name === \"disabled\") {\n this._updateTabIndex();\n }\n if (name === \"icon\") {\n if (this._autoAriaLabel) {\n this.removeAttribute(\"aria-label\");\n }\n this.render();\n } else if (name === \"size\" || name === \"variant\") {\n this.render();\n }\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n this.dispatchEventTyped(\"click\", {});\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._handlersAdded = false;\n }\n}\n","/**\n * String escaping utilities for preventing injection in various contexts.\n */\n\ntype EscapeMap = Record<string, string>;\n\nconst HTML_ESCAPE_MAP: EscapeMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n};\n\nconst HTML_UNESCAPE_MAP: EscapeMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \""\": '\"',\n \"'\": \"'\",\n};\n\n/**\n * Escape HTML special characters for safe insertion into HTML.\n * Escapes: & < > \" '\n *\n * Use this for:\n * - Text content in elements\n * - Attribute values\n * - Any context where the value will be parsed as HTML\n */\nexport function escapeHtml(str: string): string {\n return str.replace(/[&<>\"']/g, (char) => HTML_ESCAPE_MAP[char] || char);\n}\n\n/**\n * Unescape HTML entities back to characters.\n */\nexport function unescapeHtml(str: string): string {\n return str.replace(\n /&(?:amp|lt|gt|quot|#39);/g,\n (entity) => HTML_UNESCAPE_MAP[entity] || entity,\n );\n}\n\n/**\n * Escape a string for safe use in a URL (encodes special chars).\n */\nexport function escapeUrl(str: string): string {\n return encodeURIComponent(str);\n}\n\n/**\n * Escape a string for safe use in a CSS selector.\n * Escapes characters that have special meaning in CSS.\n */\nexport function escapeCss(str: string): string {\n return str.replace(/[!\"#$%&'()*+,.\\/:;<=>?@[\\\\\\]^`{|}~]/g, \"\\\\$&\");\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SIZE_PADDING_RULES, STATE_DISABLED } from \"./shared\";\nimport { escapeHtml } from \"../escape\";\nimport {\n Signal,\n Derived,\n isSignal,\n effect,\n type Readable,\n} from \"@nisoku/sairin\";\nimport { bindInputValue } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host { display: block; }\ninput {\n width: 100%;\n padding: var(--saz-space-small) var(--saz-space-large);\n border: 1px solid var(--saz-color-border);\n border-radius: var(--saz-radius-medium);\n font-size: var(--saz-text-size-medium);\n font-family: inherit;\n color: var(--saz-color-text);\n background: var(--saz-color-background);\n outline: none;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n box-sizing: border-box;\n}\ninput:focus {\n border-color: var(--saz-color-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n}\ninput::placeholder { color: var(--saz-color-text-dimmer); }\n${SIZE_PADDING_RULES}\n${STATE_DISABLED}\n:host([variant=\"accent\"]) input:focus {\n border-color: var(--saz-color-accent);\n box-shadow: 0 0 0 3px rgba(255, 77, 138, 0.15);\n}\n`;\n\n// Config\nconst inputConfig = {\n properties: {\n placeholder: { type: \"string\" as const, reflect: false },\n type: { type: \"string\" as const, reflect: false },\n size: { type: \"string\" as const, reflect: false },\n variant: { type: \"string\" as const, reflect: false },\n disabled: { type: \"boolean\" as const, reflect: false },\n },\n events: {\n input: { name: \"saz-input\", detail: { value: \"value\" } },\n },\n} as const;\n\n@component(inputConfig)\nexport class SazamiInput extends SazamiComponent<typeof inputConfig> {\n declare placeholder: string;\n declare type: string;\n declare disabled: boolean;\n declare size: string;\n declare variant: string;\n\n private _valueSignal: Readable<string> | null = null;\n private _input: HTMLInputElement | null = null;\n private _valueEffectDisposer: (() => void) | null = null;\n private _inputHandler: ((e: Event) => void) | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set value(valueOrSignal: string | Readable<string>) {\n if (this._isReadableStr(valueOrSignal)) {\n this._disposeValueBindings();\n this._valueSignal = valueOrSignal;\n if (this._input) {\n this._input.value = valueOrSignal.get();\n const dispose = effect(() => {\n const val = valueOrSignal.get();\n if (this._input && this._input.value !== val) {\n this._input.value = val;\n }\n });\n this._valueEffectDisposer = dispose;\n this.onCleanup(dispose);\n this._inputHandler = (e: Event) => {\n const target = e.target as HTMLInputElement;\n (valueOrSignal as Signal<string>).set(target.value);\n };\n this._input.addEventListener(\"input\", this._inputHandler);\n this.onCleanup(() => {\n if (this._input && this._inputHandler) {\n this._input.removeEventListener(\"input\", this._inputHandler);\n }\n });\n }\n } else {\n this._disposeValueBindings();\n this._valueSignal = null;\n (this as any)._value = valueOrSignal;\n if (this._input && this._input.value !== valueOrSignal) {\n this._input.value = valueOrSignal || \"\";\n }\n }\n }\n\n private _disposeValueBindings() {\n if (this._valueEffectDisposer) {\n this._valueEffectDisposer();\n this._valueEffectDisposer = null;\n }\n if (this._inputHandler && this._input) {\n this._input.removeEventListener(\"input\", this._inputHandler);\n this._inputHandler = null;\n }\n }\n\n get value(): string | Readable<string> {\n if (this._valueSignal) return this._valueSignal.get();\n if ((this as any)._value) return (this as any)._value;\n if (this._input) return this._input.value;\n return this.getAttribute(\"value\") || \"\";\n }\n\n render() {\n this._disposeValueBindings();\n\n const placeholder = this.getAttribute(\"placeholder\") || \"\";\n const type = this.getAttribute(\"type\") || \"text\";\n const initialValue = this._valueSignal\n ? this._valueSignal.get()\n : this.getAttribute(\"value\") || (this as any)._value || \"\";\n\n this.mount(\n STYLES,\n `\n <input type=\"${escapeHtml(type)}\" placeholder=\"${escapeHtml(placeholder)}\" value=\"${escapeHtml(initialValue)}\" ${this.disabled ? \"disabled\" : \"\"} />\n `,\n );\n\n this._input = this.$(\"input\") as HTMLInputElement;\n if (this._input) {\n this.removeAllHandlers({ type: \"input\", source: \"internal\" });\n\n if (this._valueSignal) {\n this._valueEffectDisposer = effect(() => {\n const val = this._valueSignal!.get();\n if (this._input && this._input.value !== val) {\n this._input.value = val;\n }\n });\n this.onCleanup(this._valueEffectDisposer);\n\n this._inputHandler = (e: Event) => {\n const target = e.target as HTMLInputElement;\n if (isSignal(this._valueSignal)) {\n (this._valueSignal as Signal<string>).set(target.value);\n }\n (this.dispatchEventTyped as any)(\"input\", { value: target.value });\n };\n this._input.addEventListener(\"input\", this._inputHandler);\n this.onCleanup(() => {\n if (this._input && this._inputHandler) {\n this._input.removeEventListener(\"input\", this._inputHandler);\n }\n });\n } else {\n this.addHandler(\n \"input\",\n (e: Event) => {\n const target = e.target as HTMLInputElement;\n (this as any)._value = target.value;\n (this.dispatchEventTyped as any)(\"input\", { value: target.value });\n },\n { internal: true, element: this._input },\n );\n }\n }\n }\n\n static get observedAttributes() {\n return [\"value\", \"disabled\", \"placeholder\", \"type\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (!this._input) return;\n\n if (name === \"value\") {\n if (this._valueSignal) return;\n if (newVal === null) {\n if (this._input.value !== \"\") this._input.value = \"\";\n } else if (this._input.value !== newVal) {\n this._input.value = newVal;\n }\n } else if (name === \"disabled\") {\n this._input.disabled = newVal !== null;\n } else if (name === \"placeholder\") {\n this._input.placeholder = newVal ?? \"\";\n } else if (name === \"type\") {\n this._input.type = newVal ?? \"text\";\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_FOCUS } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n align-self: center;\n vertical-align: middle;\n height: fit-content;\n gap: var(--saz-space-small);\n cursor: pointer;\n user-select: none;\n}\n.box {\n width: 18px;\n height: 18px;\n border: 2px solid var(--saz-color-border);\n border-radius: var(--saz-radius-soft);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s ease, border-color 0.15s ease;\n flex-shrink: 0;\n align-self: center;\n background: var(--saz-color-background);\n}\n:host([checked]) .box {\n background: var(--saz-color-primary);\n border-color: var(--saz-color-primary);\n}\n.check {\n color: #fff;\n width: 12px;\n height: 12px;\n opacity: 0;\n transition: opacity 0.1s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n}\n.check svg { width: 100%; height: 100%; display: block; }\n:host([checked]) .check { opacity: 1; }\n.label {\n font-size: var(--saz-text-size-medium);\n color: var(--saz-color-text);\n}\n${STATE_DISABLED}\n${INTERACTIVE_FOCUS}\n`;\n\n// Config as constant for type inference\nconst checkboxConfig = {\n // observedAttributes auto-derived from properties with reflect: true\n properties: {\n checked: { type: \"boolean\" as const, reflect: true },\n disabled: { type: \"boolean\" as const, reflect: true },\n },\n events: {\n change: { name: \"saz-change\", detail: { checked: \"checked\" } },\n },\n binds: {\n checked: \"attribute\" as const,\n disabled: \"attribute\" as const,\n },\n} as const;\n\n@component(checkboxConfig)\nexport class SazamiCheckbox extends SazamiComponent<typeof checkboxConfig> {\n private _checkedSignal: Readable<boolean> | null = null;\n private _disabledSignal: Readable<boolean> | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set checked(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._checkedSignal = value;\n this.bindAttribute(\":host\", \"checked\", value);\n } else {\n this._checkedSignal = null;\n this._setChecked(value);\n }\n }\n\n get checked(): boolean | Readable<boolean> {\n return this._checkedSignal || (this as any)._checked || false;\n }\n\n private _setChecked(value: boolean) {\n (this as any)._checked = value;\n if (value) {\n this.setAttribute(\"checked\", \"\");\n } else {\n this.removeAttribute(\"checked\");\n }\n this._updateAria();\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n this.bindDisabled(\":host\", value);\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n this._updateAria();\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n render() {\n const label = this.textContent?.trim() || \"\";\n\n this.mount(\n STYLES,\n `\n <span class=\"box\">\n <span class=\"check\">${ICON_SVGS.check || \"\"}</span>\n </span>\n ${label ? `<span class=\"label\">${escapeHtml(label)}</span>` : \"\"}\n `,\n );\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"checkbox\");\n this._updateAria();\n\n this.removeHandler(\"click\", this._handleClick);\n this.removeHandler(\"keydown\", this._handleKeydown);\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n if (this._checkedSignal) {\n if (\"set\" in this._checkedSignal) {\n const newValue = !this._checkedSignal.get();\n (this._checkedSignal as Signal<boolean>).set(newValue);\n this._updateAria(newValue);\n this.dispatchEventTyped(\"change\", { checked: newValue });\n } else {\n this._updateAria();\n }\n } else {\n const newValue = !((this as any)._checked || false);\n this._setChecked(newValue);\n this._updateAria(newValue);\n this.dispatchEventTyped(\"change\", { checked: newValue });\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n\n private _updateAria(checked?: boolean) {\n const isChecked =\n checked !== undefined\n ? checked\n : this._checkedSignal\n ? this._checkedSignal.get()\n : !!(this as any)._checked;\n const isDisabled = this._getIsDisabled();\n this.setAttribute(\"aria-checked\", isChecked ? \"true\" : \"false\");\n if (isDisabled) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_FOCUS } from \"./shared\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--saz-space-small);\n cursor: pointer;\n user-select: none;\n}\n.track {\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--saz-color-border);\n position: relative;\n transition: background 0.2s ease;\n flex-shrink: 0;\n}\n.thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: #fff;\n position: absolute;\n top: 2px;\n left: 2px;\n transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n:host([checked]) .track { background: var(--saz-color-primary); }\n:host([checked]) .thumb { transform: translateX(18px); }\n:host([variant=\"accent\"][checked]) .track { background: var(--saz-color-accent); }\n${STATE_DISABLED}\n${INTERACTIVE_FOCUS}\n`;\n\n// Config\nconst toggleConfig = {\n properties: {\n checked: { type: \"boolean\" as const, reflect: true },\n disabled: { type: \"boolean\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: false },\n },\n events: {\n change: { name: \"saz-change\", detail: { checked: \"checked\" } },\n },\n binds: {\n checked: \"attribute\" as const,\n disabled: \"attribute\" as const,\n },\n} as const;\n\n@component(toggleConfig)\nexport class SazamiToggle extends SazamiComponent<typeof toggleConfig> {\n declare variant: string;\n\n private _checkedSignal: Readable<boolean> | null = null;\n private _checkedBindingDispose: (() => void) | null = null;\n private _disabledSignal: Readable<boolean> | null = null;\n private _disabledBindingDispose: (() => void) | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set checked(value: boolean | Readable<boolean>) {\n if (this._checkedBindingDispose) {\n this._checkedBindingDispose();\n this._checkedBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._checkedSignal = value;\n const dispose = this.bindAttribute(\":host\", \"checked\", value);\n if (typeof dispose === \"function\") {\n this._checkedBindingDispose = dispose;\n }\n } else {\n this._checkedSignal = null;\n this._setChecked(value);\n }\n }\n\n get checked(): boolean | Readable<boolean> {\n return this._checkedSignal || (this as any)._checked || false;\n }\n\n private _setChecked(value: boolean) {\n (this as any)._checked = value;\n if (value) {\n this.setAttribute(\"checked\", \"\");\n } else {\n this.removeAttribute(\"checked\");\n }\n this._updateAria();\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._disabledBindingDispose) {\n this._disabledBindingDispose();\n this._disabledBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n const dispose = this.bindDisabled(\":host\", value);\n if (typeof dispose === \"function\") {\n this._disabledBindingDispose = dispose;\n }\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n this._updateAria();\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n render() {\n this.mount(\n STYLES,\n `\n <span class=\"track\"><span class=\"thumb\"></span></span>\n <slot></slot>\n `,\n );\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"switch\");\n this._updateAria();\n\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n const newValue = this._checkedSignal\n ? !this._checkedSignal.get()\n : !((this as any)._checked || false);\n if (this._checkedSignal) {\n if (\"set\" in this._checkedSignal) {\n (this._checkedSignal as Signal<boolean>).set(newValue);\n this._updateAria();\n }\n } else {\n this._setChecked(newValue);\n this._updateAria();\n }\n this.dispatchEventTyped(\"change\", { checked: newValue });\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n\n private _updateAria() {\n const isChecked = this._checkedSignal\n ? this._checkedSignal.get()\n : !!(this as any)._checked;\n const isDisabled = this._getIsDisabled();\n this.setAttribute(\"aria-checked\", isChecked ? \"true\" : \"false\");\n if (isDisabled) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n attributeChangedCallback(name: string, oldVal: string, newVal: string) {\n if (oldVal === newVal) return;\n if (name === \"checked\" || name === \"disabled\") {\n this._updateAria();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SHAPE_RULES, SIZE_RULES } from \"./shared\";\nimport { escapeHtml } from \"../escape\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindProperty } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n overflow: hidden;\n border-radius: var(--saz-radius-medium);\n line-height: 0;\n}\nimg {\n width: 100%;\n height: auto;\n display: block;\n object-fit: cover;\n}\n${SHAPE_RULES}\n:host([size=\"small\"]) { max-width: 120px; }\n:host([size=\"medium\"]) { max-width: 240px; }\n:host([size=\"large\"]) { max-width: 480px; }\n:host([size=\"xlarge\"]) { max-width: 640px; }\n`;\n\nconst imageConfig = {\n properties: {\n alt: { type: \"string\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: true },\n shape: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(imageConfig)\nexport class SazamiImage extends SazamiComponent<typeof imageConfig> {\n declare alt: string;\n declare size: string;\n declare shape: string;\n\n private _srcSignal: Readable<string> | null = null;\n private _imgElement: HTMLImageElement | null = null;\n private _pendingSrc: string | null = null;\n private _srcDispose: (() => void) | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set src(value: string | Readable<string>) {\n if (this._isReadableStr(value)) {\n this._srcSignal = value;\n this._pendingSrc = null;\n if (!this._imgElement) {\n this._createImageElement();\n }\n this._setupSrcBinding();\n } else {\n this._srcSignal = null;\n this._pendingSrc = value;\n (this as any)._src = value;\n this._updateSrc(value);\n }\n }\n\n get src(): string | Readable<string> {\n return this._srcSignal || (this as any)._src || \"\";\n }\n\n private _updateSrc(value: string) {\n if (!value) {\n if (this._srcDispose) {\n this._srcDispose();\n this._srcDispose = null;\n }\n this._imgElement = null;\n return;\n }\n if (!this._imgElement) {\n this._createImageElement();\n }\n if (this._imgElement) {\n this._imgElement.src = value;\n }\n }\n\n private _createImageElement() {\n const alt = this.alt || \"\";\n const currentSrc = this._getCurrentSrc();\n this.mountSync(\n STYLES,\n `<img src=\"${escapeHtml(currentSrc)}\" alt=\"${escapeHtml(alt)}\" />`,\n );\n this._imgElement = this.$(\"img\");\n }\n\n private _setupSrcBinding() {\n if (!this._imgElement) return;\n\n if (this._srcDispose) {\n this._srcDispose();\n }\n const dispose = bindProperty(this._imgElement, \"src\", this._srcSignal!);\n this._srcDispose = dispose;\n }\n\n private _getCurrentSrc(): string {\n if (this._srcSignal) return this._srcSignal.get();\n if (this._pendingSrc !== undefined && this._pendingSrc !== null)\n return this._pendingSrc;\n if ((this as any)._src !== undefined && (this as any)._src !== null)\n return (this as any)._src;\n return this.getAttribute(\"src\") || \"\";\n }\n\n render() {\n const currentSrc = this._getCurrentSrc();\n if (!currentSrc) {\n if (this._srcDispose) {\n this._srcDispose();\n this._srcDispose = null;\n }\n this._imgElement = null;\n this.mountSync(STYLES, \"\");\n return;\n }\n const alt = this.alt || \"\";\n\n this.mountSync(\n STYLES,\n `<img src=\"${escapeHtml(currentSrc)}\" alt=\"${escapeHtml(alt)}\" />`,\n );\n\n this._imgElement = this.$(\"img\");\n\n if (this._srcSignal) {\n this._setupSrcBinding();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SHAPE_RULES } from \"./shared\";\nimport { escapeHtml } from \"../escape\";\nimport { Derived, isSignal, effect, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n width: 64px;\n height: 64px;\n border-radius: var(--saz-radius-medium);\n overflow: hidden;\n flex-shrink: 0;\n background: var(--saz-color-border);\n}\nimg {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n${SHAPE_RULES}\n:host([size=\"small\"]) { width: 40px; height: 40px; }\n:host([size=\"medium\"]) { width: 64px; height: 64px; }\n:host([size=\"large\"]) { width: 96px; height: 96px; }\n:host([size=\"xlarge\"]) { width: 128px; height: 128px; }\n`;\n\nconst coverartConfig = {\n properties: {\n alt: { type: \"string\" as const, reflect: false },\n size: { type: \"string\" as const, reflect: false },\n shape: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(coverartConfig)\nexport class SazamiCoverart extends SazamiComponent<typeof coverartConfig> {\n declare alt: string;\n declare size: string;\n declare shape: string;\n\n private _srcSignal: Readable<string> | null = null;\n private _imgElement: HTMLImageElement | null = null;\n private _pendingSrc: string | null = null;\n private _srcEffectDispose: (() => void) | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set src(value: string | Readable<string>) {\n if (this._isReadableStr(value)) {\n if (this._srcEffectDispose) {\n this._srcEffectDispose();\n this._srcEffectDispose = null;\n }\n this._srcSignal = value;\n this._pendingSrc = null;\n if (!this._imgElement) {\n this.render();\n } else {\n this._setupSrcEffect();\n }\n } else {\n this._srcSignal = null;\n if (this._srcEffectDispose) {\n this._srcEffectDispose();\n this._srcEffectDispose = null;\n }\n this._pendingSrc = value;\n (this as any)._src = value;\n if (!this._imgElement) {\n this.render();\n } else {\n this._updateSrc(value);\n }\n }\n }\n\n get src(): string | Readable<string> {\n return this._srcSignal || (this as any)._src || \"\";\n }\n\n private _updateSrc(value: string) {\n if (this._imgElement) {\n this._imgElement.src = value;\n }\n }\n\n private _setupSrcEffect() {\n if (!this._srcSignal || !this._imgElement) return;\n\n const dispose = effect(() => {\n const src = this._srcSignal!.get();\n if (this._imgElement) {\n this._imgElement.src = src;\n }\n });\n this._srcEffectDispose = dispose;\n this.onCleanup(dispose);\n }\n\n render() {\n const currentSrc = this._srcSignal\n ? this._srcSignal.get()\n : this._pendingSrc ||\n (this as any)._src ||\n this.getAttribute(\"src\") ||\n this.textContent?.trim() ||\n \"\";\n const alt = this.getAttribute(\"alt\") || \"Cover art\";\n\n if (!currentSrc) {\n if (this._srcEffectDispose) {\n this._srcEffectDispose();\n this._srcEffectDispose = null;\n }\n this.mount(STYLES, \"\");\n this._imgElement = null;\n if (this._srcSignal) {\n this._setupSrcEffect();\n }\n return;\n }\n\n this.mount(\n STYLES,\n `<img src=\"${escapeHtml(currentSrc)}\" alt=\"${escapeHtml(alt)}\" />`,\n );\n\n this._imgElement = this.$(\"img\");\n\n if (this._pendingSrc) {\n this._updateSrc(this._pendingSrc);\n this._pendingSrc = null;\n }\n\n if (this._srcSignal && this._imgElement) {\n this._setupSrcEffect();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { VARIANT_TEXT_RULES } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { escapeHtml } from \"../escape\";\nimport {\n Signal,\n Derived,\n isSignal,\n effect,\n type Readable,\n} from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--saz-icon-size-medium);\n height: var(--saz-icon-size-medium);\n color: inherit;\n line-height: 1;\n}\n:host([size=\"small\"]) {\n width: var(--saz-icon-size-small);\n height: var(--saz-icon-size-small);\n}\n:host([size=\"large\"]) {\n width: var(--saz-icon-size-large);\n height: var(--saz-icon-size-large);\n}\n:host([size=\"xlarge\"]) {\n width: var(--saz-icon-size-xlarge);\n height: var(--saz-icon-size-xlarge);\n}\n${VARIANT_TEXT_RULES}\nsvg { width: 100%; height: 100%; }\n`;\n\nconst iconConfig = {\n properties: {\n icon: { type: \"string\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(iconConfig)\nexport class SazamiIcon extends SazamiComponent<typeof iconConfig> {\n declare size: string;\n declare variant: string;\n\n private _iconSignal: Readable<string> | null = null;\n private _iconElement: HTMLElement | null = null;\n private _iconEffectDispose: (() => void) | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set icon(value: string | Readable<string>) {\n if (this._isReadableStr(value)) {\n this._iconSignal = value;\n if (this._iconElement) {\n this._setupIconBinding();\n }\n } else {\n this._iconSignal = null;\n if (this._iconEffectDispose) {\n this._iconEffectDispose();\n this._iconEffectDispose = null;\n }\n (this as any)._icon = value;\n this._updateIcon(value);\n }\n }\n\n get icon(): string | Readable<string> {\n return this._iconSignal || (this as any)._icon || \"\";\n }\n\n private _updateIcon(iconName: string) {\n if (!this._iconElement) return;\n const svg = ICON_SVGS[iconName];\n const isSvg = !!svg;\n const currentIsSvg = this._iconElement.tagName.toLowerCase() === \"svg\";\n\n if (isSvg !== currentIsSvg) {\n const parent = this._iconElement.parentNode;\n let newElement: HTMLElement;\n if (svg) {\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = svg;\n newElement = wrapper.firstElementChild as HTMLElement;\n } else {\n newElement = document.createElement(\"span\");\n newElement.textContent = iconName;\n }\n parent?.replaceChild(newElement, this._iconElement);\n this._iconElement = newElement;\n } else if (svg) {\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = svg;\n const newSvg = wrapper.firstElementChild as HTMLElement;\n this._iconElement.innerHTML = newSvg.innerHTML;\n } else {\n this._iconElement.textContent = iconName;\n }\n }\n\n private _setupIconBinding() {\n if (!this._iconElement || !this._iconSignal) return;\n\n if (this._iconEffectDispose) {\n this._iconEffectDispose();\n }\n\n const sig = this._iconSignal;\n const dispose = effect(() => {\n const iconName = sig.get();\n const svg = ICON_SVGS[iconName];\n const isSvg = !!svg;\n const currentEl = this._iconElement;\n if (!currentEl) return;\n const currentIsSvg = currentEl.tagName.toLowerCase() === \"svg\";\n\n if (isSvg !== currentIsSvg) {\n const parent = currentEl.parentNode;\n let newElement: HTMLElement;\n if (svg) {\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = svg;\n newElement = wrapper.firstElementChild as HTMLElement;\n } else {\n newElement = document.createElement(\"span\");\n newElement.textContent = iconName;\n }\n parent?.replaceChild(newElement, currentEl);\n this._iconElement = newElement;\n } else if (svg) {\n const parent = currentEl.parentNode;\n const wrapper = document.createElement(\"div\");\n wrapper.innerHTML = svg;\n const newElement = wrapper.firstElementChild as HTMLElement;\n parent?.replaceChild(newElement, currentEl);\n this._iconElement = newElement;\n } else {\n currentEl.textContent = iconName;\n }\n });\n this._iconEffectDispose = dispose;\n this.onCleanup(dispose);\n }\n\n render() {\n const iconName = this._iconSignal\n ? this._iconSignal.get()\n : (this as any)._icon ||\n this.getAttribute(\"icon\") ||\n this.textContent?.trim() ||\n \"\";\n const svg = ICON_SVGS[iconName];\n\n if (svg) {\n this.mountSync(STYLES, svg);\n } else {\n this.mountSync(STYLES, `<span>${escapeHtml(iconName)}</span>`);\n }\n\n this._iconElement = (this.shadowRoot?.querySelector(\"svg\") ||\n this.shadowRoot?.querySelector(\"span\")) as HTMLElement | null;\n\n if (this._iconSignal) {\n this._setupIconBinding();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SIZE_PADDING_RULES, VARIANT_BG_RULES, SHAPE_RULES } from \"./shared\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n padding: var(--saz-space-tiny) var(--saz-space-small);\n border-radius: var(--saz-radius-round);\n font-size: var(--saz-text-size-small);\n font-weight: var(--saz-text-weight-medium);\n line-height: 1;\n white-space: nowrap;\n background: var(--saz-color-surface);\n color: var(--saz-color-text);\n border: 1px solid var(--saz-color-border);\n}\n${SIZE_PADDING_RULES}\n${VARIANT_BG_RULES}\n${SHAPE_RULES}\n`;\n\n// Config\nconst badgeConfig = {\n observedAttributes: [\"content\"],\n properties: {\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n shape: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(badgeConfig)\nexport class SazamiBadge extends SazamiComponent<typeof badgeConfig> {\n declare size: string;\n declare variant: string;\n declare shape: string;\n\n private _contentSignal: Readable<string> | null = null;\n private _textNode: Text | null = null;\n private _textContent: string = \"\";\n private _contentDispose: (() => void) | null = null;\n\n private _isReadable(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set content(value: string | Readable<string>) {\n if (this._contentDispose) {\n this._contentDispose();\n this._contentDispose = null;\n }\n if (this._isReadable(value)) {\n this._contentSignal = value;\n if (this._textNode) {\n const dispose = bindText(this._textNode, value);\n this._contentDispose = dispose;\n this.onCleanup(dispose);\n }\n } else {\n this._contentSignal = null;\n this._textContent = value;\n if (this._textNode) {\n this._textNode.textContent = value ?? \"\";\n }\n }\n }\n\n get content(): string | Readable<string> | undefined {\n return this._contentSignal || this._textContent;\n }\n\n render() {\n this.mountSync(STYLES, `<slot></slot>`);\n\n const slot = this.shadow.querySelector(\"slot\");\n if (slot) {\n const initialText = this._contentSignal\n ? this._contentSignal.get()\n : (this._textContent ?? \"\");\n this._textNode = document.createTextNode(initialText);\n slot.replaceWith(this._textNode);\n }\n\n if (this._contentSignal && !this._contentDispose) {\n const dispose = bindText(this._textNode!, this._contentSignal);\n this._contentDispose = dispose;\n this.onCleanup(dispose);\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"content\" && newVal !== null) {\n this.content = newVal;\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { VARIANT_BG_RULES } from \"./shared\";\nimport { Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n padding: var(--saz-space-small) var(--saz-space-medium);\n border-radius: var(--saz-radius-medium);\n font-size: var(--saz-text-size-small);\n font-weight: var(--saz-text-weight-medium);\n background: var(--saz-color-surface);\n color: var(--saz-color-text);\n border: 1px solid var(--saz-color-border);\n}\n${VARIANT_BG_RULES}\n`;\n\nconst tagConfig = {\n observedAttributes: [\"content\"],\n properties: {\n variant: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(tagConfig)\nexport class SazamiTag extends SazamiComponent<typeof tagConfig> {\n declare variant: string;\n\n private _contentSignal: Readable<string> | null = null;\n private _contentValue: string = \"\";\n private _textNode: Text | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set content(value: string | Readable<string>) {\n if (this._isReadableStr(value)) {\n this._contentSignal = value;\n this._setupContentBinding();\n } else {\n this._contentSignal = null;\n this._contentValue = value;\n this._updateContent(value);\n }\n }\n\n get content(): string | Readable<string> {\n return this._contentSignal || this._contentValue;\n }\n\n private _updateContent(value: string) {\n if (this._textNode) {\n this._textNode.textContent = value ?? \"\";\n }\n }\n\n private _setupContentBinding() {\n if (!this._textNode) return;\n\n const dispose = bindText(this._textNode, this._contentSignal!);\n this.onCleanup(dispose);\n }\n\n render() {\n this.mountSync(STYLES, `<slot></slot>`);\n\n const slot = this.shadow.querySelector(\"slot\");\n if (slot) {\n this._textNode = document.createTextNode(\"\");\n slot.replaceWith(this._textNode);\n } else {\n this._textNode = this.shadow.appendChild(document.createTextNode(\"\"));\n }\n\n if (this._contentSignal) {\n this._setupContentBinding();\n } else {\n this._updateContent(this._contentValue);\n }\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"content\" && newVal !== null) {\n this.content = newVal;\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { VARIANT_BG_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: block;\n border: none;\n background: var(--saz-color-border);\n margin: var(--saz-space-medium) 0;\n}\n:host(:not([vertical])) { height: 1px; width: 100%; }\n:host([vertical]) {\n width: 1px;\n height: 100%;\n margin: 0 var(--saz-space-medium);\n align-self: stretch;\n}\n:host([size=\"small\"]) { margin: var(--saz-space-small) 0; }\n:host([size=\"large\"]) { margin: var(--saz-space-large) 0; }\n:host([size=\"xlarge\"]) { margin: var(--saz-space-xlarge) 0; }\n:host([variant=\"dim\"]) { background: var(--saz-color-surface); }\n`;\n\nconst dividerConfig = {\n properties: {\n vertical: { type: \"boolean\" as const, reflect: false },\n size: { type: \"string\" as const, reflect: false },\n variant: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(dividerConfig)\nexport class SazamiDivider extends SazamiComponent<typeof dividerConfig> {\n declare vertical: boolean;\n declare size: string;\n declare variant: string;\n\n render() {\n this.mount(STYLES, \"\");\n }\n}\n","import { SazamiComponent, component } from \"./base\";\n\nconst STYLES = `\n:host { display: block; flex: 1; }\n:host([size=\"small\"]) { flex: none; width: var(--saz-space-small); height: var(--saz-space-small); }\n:host([size=\"medium\"]) { flex: none; width: var(--saz-space-medium); height: var(--saz-space-medium); }\n:host([size=\"large\"]) { flex: none; width: var(--saz-space-large); height: var(--saz-space-large); }\n:host([size=\"xlarge\"]) { flex: none; width: var(--saz-space-xlarge); height: var(--saz-space-xlarge); }\n`;\n\nconst spacerConfig = {\n properties: {\n size: { type: \"string\" as const, reflect: false },\n },\n} as const;\n\n@component(spacerConfig)\nexport class SazamiSpacer extends SazamiComponent<typeof spacerConfig> {\n declare size: string;\n\n render() {\n this.mount(STYLES, \"\");\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: column;\n}\n:host([layout=\"row\"]) { flex-direction: row; }\n${GAP_RULES}\n:host([align=\"center\"]) { align-items: center; }\n`;\n\nconst sectionConfig = {\n properties: {\n layout: { type: \"string\" as const, reflect: true },\n align: { type: \"string\" as const, reflect: true },\n gap: { type: \"string\" as const, reflect: true },\n \"center-point\": { type: \"boolean\" as const, reflect: false },\n },\n} as const;\n\n@component(sectionConfig)\nexport class SazamiSection extends SazamiComponent<typeof sectionConfig> {\n declare layout: string;\n declare align: string;\n declare gap: string;\n declare \"center-point\": boolean;\n\n private _resizeObserver?: ResizeObserver;\n private _boundComputeAndSetCenter = this._computeAndSetCenter.bind(this);\n private _slot?: HTMLSlotElement;\n\n private _computeAndSetCenter() {\n if (!this.hasAttribute(\"center-point\")) return;\n const rect = this.getBoundingClientRect();\n this.dataset.centerX = (rect.left + rect.width / 2).toString();\n this.dataset.centerY = (rect.top + rect.height / 2).toString();\n }\n\n private _attachSlotListener() {\n const slot = this.shadowRoot?.querySelector(\n \"slot\",\n ) as HTMLSlotElement | null;\n if (this._slot) {\n this._slot.removeEventListener(\n \"slotchange\",\n this._boundComputeAndSetCenter,\n );\n }\n if (slot) {\n slot.addEventListener(\"slotchange\", this._boundComputeAndSetCenter);\n this._slot = slot;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._attachSlotListener();\n this._setupResizeObserver();\n }\n\n private _setupResizeObserver() {\n if (!this.hasAttribute(\"center-point\")) return;\n if (this._resizeObserver) return;\n this._resizeObserver = new ResizeObserver(() => {\n this._computeAndSetCenter();\n });\n this._resizeObserver.observe(this);\n }\n\n disconnectedCallback() {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n }\n if (this._slot) {\n this._slot.removeEventListener(\n \"slotchange\",\n this._boundComputeAndSetCenter,\n );\n this._slot = undefined;\n }\n super.disconnectedCallback();\n }\n\n render() {\n this.mount(STYLES, `<slot></slot>`);\n this._attachSlotListener();\n\n if (this.hasAttribute(\"center-point\")) {\n requestAnimationFrame(() => {\n this._computeAndSetCenter();\n });\n }\n }\n\n static get observedAttributes() {\n return [\"center-point\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (name === \"center-point\" && oldVal !== newVal) {\n if (newVal !== null) {\n requestAnimationFrame(() => {\n this._computeAndSetCenter();\n });\n this._setupResizeObserver();\n } else {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = undefined;\n }\n delete this.dataset.centerX;\n delete this.dataset.centerY;\n }\n }\n }\n}\n","import { SazamiComponent, component, SazamiComponentConfig } from \"./base\";\nimport { GAP_RULES } from \"./shared\";\n\nconst STYLES = `\n:host {\n display: flex;\n flex-direction: column;\n}\n:host([layout=\"row\"]) { flex-direction: row; }\n${GAP_RULES}\n:host([align=\"center\"]) { align-items: center; }\n:host([justify=\"space-between\"]) { justify-content: space-between; }\n`;\n\nexport function createGenericClass<C extends SazamiComponentConfig = any>(\n config?: C,\n): { new (): SazamiComponent<C> } {\n class Generic extends SazamiComponent<C> {\n render() {\n this.mount(STYLES, `<slot></slot>`);\n }\n }\n\n if (config) {\n component(config)(Generic as any);\n }\n\n return Generic as { new (): SazamiComponent<C> };\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { INTERACTIVE_HOVER } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n position: fixed;\n inset: 0;\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.2s ease, visibility 0.2s ease;\n}\n:host([open]) {\n visibility: visible;\n opacity: 1;\n}\n.overlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n}\n.dialog {\n position: relative;\n background: var(--saz-color-background);\n border-radius: var(--saz-radius-medium);\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);\n max-width: 90vw;\n max-height: 90vh;\n overflow: auto;\n transform: scale(0.95);\n transition: transform 0.2s ease;\n}\n:host([open]) .dialog {\n transform: scale(1);\n}\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--saz-space-large);\n border-bottom: 1px solid var(--saz-color-border);\n}\n.title {\n font-size: var(--saz-text-size-large);\n font-weight: 600;\n color: var(--saz-color-text);\n margin: 0;\n}\n.close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--saz-radius-soft);\n cursor: pointer;\n color: var(--saz-color-text-dim);\n transition: background 0.15s ease, color 0.15s ease;\n}\n${INTERACTIVE_HOVER}\n.close-btn svg {\n width: 20px;\n height: 20px;\n}\n.content {\n padding: var(--saz-space-large);\n}\n`;\n\nconst modalConfig = {\n properties: {\n title: { type: \"string\" as const, reflect: false },\n open: { type: \"boolean\" as const, reflect: true },\n },\n events: {\n open: { name: \"saz-open\", detail: {} },\n close: { name: \"saz-close\", detail: {} },\n },\n} as const;\n\n@component(modalConfig)\nexport class SazamiModal extends SazamiComponent<typeof modalConfig> {\n declare title: string;\n declare open: boolean;\n\n openSignal: Signal<boolean> | undefined = undefined;\n\n render() {\n const title = escapeHtml(this.getAttribute(\"title\") || \"\");\n\n this.mount(\n STYLES,\n `\n <div class=\"overlay\"></div>\n <div class=\"dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"modal-title\">\n <div class=\"header\">\n <h2 class=\"title\" id=\"modal-title\">${title}</h2>\n <button class=\"close-btn\" aria-label=\"Close\">\n ${ICON_SVGS.close || \"×\"}\n </button>\n </div>\n <div class=\"content\"><slot></slot></div>\n </div>\n `,\n );\n\n const closeBtn = this.$(\".close-btn\");\n this.addHandler(\"click\", () => this._close(), {\n internal: true,\n element: closeBtn as HTMLElement,\n });\n\n const overlay = this.$(\".overlay\");\n this.addHandler(\"click\", () => this._close(), {\n internal: true,\n element: overlay as HTMLElement,\n });\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && this.hasAttribute(\"open\")) {\n this._close();\n }\n };\n document.addEventListener(\"keydown\", handleKeydown);\n this.onCleanup(() =>\n document.removeEventListener(\"keydown\", handleKeydown),\n );\n\n if (this.openSignal) {\n this.bindVisible(\":host\", this.openSignal);\n }\n }\n\n private _open() {\n this.setAttribute(\"open\", \"\");\n }\n\n private _close() {\n this.removeAttribute(\"open\");\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (oldVal === newVal) return;\n if (name === \"open\") {\n if (newVal !== null) {\n this.dispatchEventTyped(\"open\", {});\n } else {\n this.dispatchEventTyped(\"close\", {});\n }\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_FOCUS } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { escapeHtml } from \"../escape\";\nimport {\n Signal,\n Derived,\n isSignal,\n effect,\n type Readable,\n} from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n position: relative;\n width: 100%;\n box-sizing: border-box;\n overflow: visible;\n}\n.trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n box-sizing: border-box;\n padding: var(--saz-space-small) var(--saz-space-large);\n border: 1px solid var(--saz-color-border);\n border-radius: var(--saz-radius-medium);\n background: var(--saz-color-background);\n color: var(--saz-color-text);\n font-size: var(--saz-text-size-medium);\n cursor: pointer;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n.trigger:hover {\n border-color: var(--saz-color-primary);\n}\n.trigger:focus {\n outline: none;\n border-color: var(--saz-color-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n}\n.trigger svg {\n width: 16px;\n height: 16px;\n color: var(--saz-color-text-dim);\n transition: transform 0.2s ease;\n}\n.trigger svg {\n fill: none;\n stroke: currentColor;\n}\n:host([open]) .trigger svg {\n transform: rotate(180deg);\n}\n${STATE_DISABLED}\n${INTERACTIVE_FOCUS}\n.dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n margin-top: 4px;\n background: var(--saz-color-background);\n border: 1px solid var(--saz-color-border);\n border-radius: var(--saz-radius-medium);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n z-index: 100;\n visibility: hidden;\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;\n max-height: 200px;\n overflow-y: auto;\n}\n:host([open]) .dropdown {\n visibility: visible;\n opacity: 1;\n transform: translateY(0);\n}\n.option {\n padding: var(--saz-space-small) var(--saz-space-large);\n cursor: pointer;\n transition: background 0.1s ease;\n box-sizing: border-box;\n}\n.option:hover:not(.selected) {\n background: var(--saz-color-surface);\n}\n.option.selected {\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n}\n.option.selected:hover {\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n}\n`;\n\nconst selectConfig = {\n properties: {\n placeholder: { type: \"string\" as const, reflect: true },\n open: { type: \"boolean\" as const, reflect: true },\n },\n events: {\n change: { name: \"saz-change\", detail: { value: \"value\" } },\n },\n binds: {\n value: \"attribute\" as const,\n disabled: \"attribute\" as const,\n },\n} as const;\n\n@component(selectConfig)\nexport class SazamiSelect extends SazamiComponent<typeof selectConfig> {\n declare open: boolean;\n\n private _options: Array<{ value: string; label: string }> = [];\n private _valueSignal: Readable<string> | null = null;\n private _valueEffectDisposer: (() => void) | null = null;\n private _valueBindingInitialized = false;\n private _disabledSignal: Readable<boolean> | null = null;\n private _disabledEffectDisposer: (() => void) | null = null;\n private _handleDocumentClick = (e: Event) => {\n if (!this.contains(e.target as Node)) {\n this.open = false;\n }\n };\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set value(valueOrSignal: string | Readable<string>) {\n if (this._isReadableStr(valueOrSignal)) {\n this._valueSignal = valueOrSignal;\n this._setupValueBinding();\n } else {\n this._valueSignal = null;\n if (this._valueEffectDisposer) {\n this._valueEffectDisposer();\n this._valueEffectDisposer = null;\n }\n (this as any)._value = valueOrSignal;\n this._updateDisplay();\n this._updateSelectedState();\n }\n }\n\n get value(): string | Readable<string> {\n return this._valueSignal || (this as any)._value || \"\";\n }\n\n private _getValue(): string {\n if (this._valueSignal) return this._valueSignal.get();\n return (this as any)._value || this.getAttribute(\"value\") || \"\";\n }\n\n private _setupValueBinding() {\n if (this._valueEffectDisposer) {\n this._valueEffectDisposer();\n }\n const sig = this._valueSignal as Readable<string>;\n const self = this;\n const dispose = effect(() => {\n const val = sig.get();\n (self as any)._value = val;\n self._updateDisplay();\n self._updateSelectedState();\n });\n this._valueEffectDisposer = dispose;\n this._valueBindingInitialized = true;\n this.onCleanup(dispose);\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._disabledEffectDisposer) {\n this._disabledEffectDisposer();\n this._disabledEffectDisposer = null;\n }\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n const dispose = effect(() => {\n const disabled = value.get();\n if (disabled) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n this._updateTabIndex();\n });\n this._disabledEffectDisposer = dispose;\n this.onCleanup(dispose);\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n this._updateTabIndex();\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener(\"click\", this._handleDocumentClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener(\"click\", this._handleDocumentClick);\n super.disconnectedCallback();\n }\n\n render() {\n const placeholder = this.getAttribute(\"placeholder\") || \"Select...\";\n const currentValue = this._getValue();\n\n this._options = Array.from(this.querySelectorAll(\"option\")).map((opt) => ({\n value: opt.getAttribute(\"value\") || opt.textContent || \"\",\n label: opt.textContent || \"\",\n }));\n\n const selectedOption = this._options.find((o) => o.value === currentValue);\n\n this.mount(\n STYLES,\n `\n <div class=\"trigger\" role=\"combobox\" tabindex=\"${this._getIsDisabled() ? \"-1\" : \"0\"}\" aria-haspopup=\"listbox\" aria-expanded=\"${this.hasAttribute(\"open\") ? \"true\" : \"false\"}\">\n <span class=\"value\">${escapeHtml(selectedOption?.label || placeholder)}</span>\n ${ICON_SVGS[\"chevron-down\"] || \"\"}\n </div>\n <div class=\"dropdown\" role=\"listbox\">\n ${this._options.map((opt, i) => `<div class=\"option${opt.value === currentValue ? \" selected\" : \"\"}\" role=\"option\" data-value=\"${escapeHtml(opt.value)}\" aria-selected=\"${opt.value === currentValue}\">${escapeHtml(opt.label)}</div>`).join(\"\")}\n </div>\n `,\n );\n\n this._updateTabIndex();\n this._wireHandlers();\n\n if (this._valueSignal && !this._valueBindingInitialized) {\n this._setupValueBinding();\n }\n }\n\n private _wireHandlers() {\n if (this._getIsDisabled()) return;\n\n const trigger = this.$(\".trigger\");\n const dropdown = this.$(\".dropdown\");\n\n this.addHandler(\"click\", () => this.toggleOpen(), {\n internal: true,\n element: trigger as HTMLElement,\n });\n\n const handleKeydown = (e: KeyboardEvent) => {\n if (this._options.length === 0) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this.toggleOpen();\n } else if (e.key === \"Escape\" && this.hasAttribute(\"open\")) {\n e.preventDefault();\n this.open = false;\n } else if (\n this.hasAttribute(\"open\") &&\n (e.key === \"ArrowDown\" || e.key === \"ArrowUp\")\n ) {\n e.preventDefault();\n this._navigateOption(e.key === \"ArrowDown\" ? 1 : -1);\n }\n };\n this.addHandler(\"keydown\", handleKeydown, {\n internal: true,\n element: trigger as HTMLElement,\n });\n\n const handleDropdownClick = (e: Event) => {\n const target = e.target as HTMLElement;\n if (target.classList.contains(\"option\")) {\n const newValue = target.getAttribute(\"data-value\") || \"\";\n if (this._valueSignal) {\n if (\"set\" in this._valueSignal) {\n (this._valueSignal as Signal<string>).set(newValue);\n } else {\n (this as any)._value = newValue;\n this._updateDisplay();\n this._updateSelectedState();\n }\n } else {\n (this as any)._value = newValue;\n this._updateDisplay();\n this._updateSelectedState();\n }\n this.open = false;\n (this.dispatchEventTyped as any)(\"change\", { value: newValue });\n }\n };\n this.addHandler(\"click\", handleDropdownClick, {\n internal: true,\n element: dropdown as HTMLElement,\n });\n }\n\n private toggleOpen() {\n if (this._getIsDisabled()) return;\n this.open = !this.open;\n }\n\n private _navigateOption(delta: number) {\n if (!this._options || this._options.length === 0) return;\n const currentValue = this._getValue();\n const currentIndex = this._options.findIndex(\n (o) => o.value === currentValue,\n );\n let newIndex = currentIndex + delta;\n if (newIndex < 0) newIndex = this._options.length - 1;\n if (newIndex >= this._options.length) newIndex = 0;\n const newValue = this._options[newIndex].value;\n if (this._valueSignal) {\n if (\"set\" in this._valueSignal) {\n (this._valueSignal as Signal<string>).set(newValue);\n } else {\n (this as any)._value = newValue;\n this._updateDisplay();\n this._updateSelectedState();\n }\n } else {\n (this as any)._value = newValue;\n this._updateDisplay();\n this._updateSelectedState();\n }\n (this.dispatchEventTyped as any)(\"change\", { value: newValue });\n }\n\n private _updateSelectedState() {\n const currentValue = this._getValue();\n const options = this.shadow.querySelectorAll(\".option\");\n options.forEach((opt) => {\n const optValue = opt.getAttribute(\"data-value\");\n const isSelected = optValue === currentValue;\n opt.classList.toggle(\"selected\", isSelected);\n opt.setAttribute(\"aria-selected\", String(isSelected));\n });\n }\n\n private _updateDisplay() {\n const trigger = this.$(\".trigger\") as HTMLElement;\n const placeholder = this.getAttribute(\"placeholder\") || \"Select...\";\n const currentValue = this._getValue();\n const selectedOption = this._options.find((o) => o.value === currentValue);\n const valueEl = trigger?.querySelector(\".value\");\n if (valueEl) {\n valueEl.textContent = selectedOption?.label || placeholder;\n }\n }\n\n private _updateTabIndex() {\n const trigger = this.$(\".trigger\") as HTMLElement;\n if (trigger) {\n trigger.setAttribute(\"tabindex\", this._getIsDisabled() ? \"-1\" : \"0\");\n }\n }\n\n static get observedAttributes() {\n return [\"open\", \"value\", \"disabled\", \"placeholder\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (oldVal === newVal) return;\n if (name === \"open\") {\n const trigger = this.$(\".trigger\");\n const dropdown = this.$(\".dropdown\");\n if (trigger) {\n trigger.setAttribute(\n \"aria-expanded\",\n newVal !== null ? \"true\" : \"false\",\n );\n }\n }\n if (name === \"value\") {\n this._updateDisplay();\n this._updateSelectedState();\n }\n if (name === \"placeholder\") {\n this._updateDisplay();\n }\n if (name === \"disabled\") {\n this.removeAllHandlers({ type: \"click\" });\n this.removeAllHandlers({ type: \"keydown\" });\n this._updateTabIndex();\n this._wireHandlers();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host { display: block; }\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--saz-color-border);\n gap: var(--saz-space-tiny);\n}\n.tab {\n padding: var(--saz-space-small) var(--saz-space-large);\n border: none;\n background: transparent;\n color: var(--saz-color-text-dim);\n font-size: var(--saz-text-size-medium);\n font-weight: 500;\n cursor: pointer;\n position: relative;\n transition: color 0.2s ease;\n}\n.tab::after {\n content: \"\";\n position: absolute;\n bottom: -1px;\n left: 0;\n width: 100%;\n height: 2px;\n background: var(--saz-color-primary);\n transform: scaleX(0);\n transition: transform 0.25s ease;\n}\n.tab.active {\n color: var(--saz-color-primary);\n}\n.tab.active::after {\n transform: scaleX(1);\n}\n.tab:focus-visible {\n outline: 2px solid var(--saz-color-primary);\n outline-offset: -2px;\n}\n.panels {\n padding: var(--saz-space-large) 0;\n position: relative;\n overflow: hidden;\n min-height: 60px;\n}\n.panel {\n display: none;\n animation: slideIn 0.25s ease;\n}\n.panel.active {\n display: block;\n}\n@keyframes slideIn {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n}\n`;\n\nconst tabsConfig = {\n properties: {\n active: { type: \"string\" as const, reflect: true },\n },\n events: {\n change: { name: \"saz-change\", detail: { activeIndex: \"active\" } },\n },\n} as const;\n\n@component(tabsConfig)\nexport class SazamiTabs extends SazamiComponent<typeof tabsConfig> {\n declare active: string;\n activeSignal?: Signal<string>;\n\n private _tabs: Array<{ label: string; panelId: string; tabId: string }> = [];\n private _panelElements: HTMLElement[] = [];\n private _handlersAdded = false;\n\n render() {\n this._tabs = Array.from(this.querySelectorAll(':scope > [slot=\"tab\"]')).map(\n (tab, i) => ({\n label: tab.getAttribute(\"label\") || tab.textContent || `Tab ${i + 1}`,\n panelId: `panel-${i}`,\n tabId: `tab-${i}`,\n }),\n );\n\n const panels = Array.from(this.querySelectorAll(':scope > [slot=\"panel\"]'));\n const activeTab = this.getAttribute(\"active\") || \"0\";\n\n if (this._panelElements.length === 0) {\n this._panelElements = panels.map((panel, i) => {\n const el = document.createElement(\"div\");\n el.className = \"panel\";\n el.setAttribute(\"role\", \"tabpanel\");\n el.id = `panel-${i}`;\n el.setAttribute(\"aria-labelledby\", `tab-${i}`);\n while (panel.firstChild) {\n el.appendChild(panel.firstChild);\n }\n return el;\n });\n }\n\n this.mount(\n STYLES,\n `\n <div class=\"tabs\" role=\"tablist\">\n ${this._tabs.map((t, i) => `<button class=\"tab${i.toString() === activeTab ? \" active\" : \"\"}\" role=\"tab\" id=\"${t.tabId}\" aria-selected=\"${i.toString() === activeTab}\" aria-controls=\"${t.panelId}\">${escapeHtml(t.label)}</button>`).join(\"\")}\n </div>\n <div class=\"panels\"></div>\n `,\n );\n\n const panelsContainer = this.shadow.querySelector(\".panels\") as HTMLElement;\n this._panelElements.forEach((el, i) => {\n el.classList.toggle(\"active\", i.toString() === activeTab);\n el.style.display = i.toString() === activeTab ? \"block\" : \"none\";\n if (!panelsContainer.contains(el)) {\n panelsContainer.appendChild(el);\n }\n });\n\n const tabButtons = this.shadow.querySelectorAll(\".tab\");\n\n if (!this._handlersAdded) {\n this._handlersAdded = true;\n tabButtons.forEach((btn, i) => {\n this.addHandler(\"click\", () => this._activateTab(i), {\n internal: true,\n element: btn as HTMLElement,\n });\n const handleKeydown: EventListener = (e) => {\n const ke = e as KeyboardEvent;\n if (ke.key === \"ArrowRight\") {\n ke.preventDefault();\n this._activateTab((i + 1) % this._tabs.length);\n } else if (ke.key === \"ArrowLeft\") {\n ke.preventDefault();\n this._activateTab((i - 1 + this._tabs.length) % this._tabs.length);\n }\n };\n this.addHandler(\"keydown\", handleKeydown, {\n internal: true,\n element: btn as HTMLElement,\n });\n });\n }\n\n if (this.activeSignal) {\n this.bindAttribute(\":host\", \"active\", this.activeSignal);\n }\n }\n\n private _activateTab(index: number, emit = true) {\n const tabButtons = this.shadow.querySelectorAll(\".tab\");\n tabButtons.forEach((b, j) => {\n b.classList.toggle(\"active\", j === index);\n (b as HTMLElement).setAttribute(\n \"aria-selected\",\n j === index ? \"true\" : \"false\",\n );\n });\n this._panelElements.forEach((p, j) => {\n p.classList.toggle(\"active\", j === index);\n p.style.display = j === index ? \"block\" : \"none\";\n });\n if (tabButtons[index]) {\n (tabButtons[index] as HTMLElement).focus();\n }\n if (this.active !== index.toString()) {\n this.active = index.toString();\n }\n if (emit) {\n this.dispatchEventTyped(\"change\", { activeIndex: index.toString() });\n }\n }\n\n static get observedAttributes() {\n return [\"active\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (\n name === \"active\" &&\n oldVal !== newVal &&\n this.shadow.childNodes.length\n ) {\n const parsedIndex = Number(newVal ?? 0);\n const tabCount = this._tabs.length;\n const validIndex = Math.max(0, Math.min(parsedIndex, tabCount - 1));\n this._activateTab(validIndex, false);\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED } from \"./shared\";\nimport {\n Signal,\n Derived,\n isSignal,\n effect,\n type Readable,\n} from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: block;\n width: 100%;\n padding: 8px 0;\n box-sizing: border-box;\n}\n.slider-container {\n position: relative;\n width: 100%;\n height: 20px;\n display: flex;\n align-items: center;\n}\n.track {\n position: absolute;\n width: 100%;\n height: 8px;\n background: var(--saz-color-border);\n border-radius: 999px;\n overflow: hidden;\n}\n.filled {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n background: var(--saz-color-primary);\n border-radius: 999px;\n}\n.slider {\n position: relative;\n width: 100%;\n height: 20px;\n -webkit-appearance: none;\n appearance: none;\n background: transparent;\n cursor: pointer;\n z-index: 1;\n}\n.slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--saz-color-primary);\n cursor: pointer;\n box-shadow: 0 2px 6px rgba(37, 99, 235, 0.3);\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n.slider::-webkit-slider-thumb:hover {\n transform: scale(1.15);\n box-shadow: 0 4px 12px rgba(37, 99, 235, 0.4);\n}\n.slider::-moz-range-thumb {\n width: 20px;\n height: 20px;\n border: none;\n border-radius: 50%;\n background: var(--saz-color-primary);\n cursor: pointer;\n box-shadow: 0 2px 6px rgba(37, 99, 235, 0.3);\n}\n.slider:focus-visible {\n outline: none;\n}\n.slider:focus-visible::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.3), 0 2px 6px rgba(37, 99, 235, 0.3);\n}\n.labels {\n display: flex;\n justify-content: space-between;\n margin-top: var(--saz-space-small);\n font-size: var(--saz-text-size-small);\n color: var(--saz-color-text-dim);\n}\n${STATE_DISABLED}\n`;\n\nconst sliderConfig = {\n properties: {\n min: { type: \"number\" as const, reflect: false, default: 0 },\n max: { type: \"number\" as const, reflect: false, default: 100 },\n step: { type: \"number\" as const, reflect: false, default: 1 },\n size: { type: \"string\" as const, reflect: false, default: \"medium\" },\n },\n events: {\n input: { name: \"saz-input\", detail: { value: \"value\" } },\n },\n} as const;\n\n@component(sliderConfig)\nexport class SazamiSlider extends SazamiComponent<typeof sliderConfig> {\n declare min: number;\n declare max: number;\n declare step: number;\n declare size: string;\n\n private _valueSignal: Readable<number> | null = null;\n private _disabledSignal: Readable<boolean> | null = null;\n private _sliderElement: HTMLInputElement | null = null;\n private _filledElement: HTMLElement | null = null;\n private _rangeMin: number = 0;\n private _rangeMax: number = 100;\n\n private _isReadableNum(value: unknown): value is Readable<number> {\n return isSignal(value) || value instanceof Derived;\n }\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set value(valueOrSignal: number | Readable<number>) {\n if (this._isReadableNum(valueOrSignal)) {\n this._valueSignal = valueOrSignal;\n this._setupValueBinding();\n } else {\n this._valueSignal = null;\n (this as any)._value = valueOrSignal;\n this._updateSliderValue(valueOrSignal);\n }\n }\n\n get value(): number | Readable<number> {\n return this._valueSignal || (this as any)._value || 50;\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n this.bindDisabled(\":host\", value);\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n private _setupValueBinding() {\n if (!this._sliderElement || !this._filledElement) return;\n\n const slider = this._sliderElement;\n const filled = this._filledElement;\n const min = this._rangeMin;\n const max = this._rangeMax;\n const range = max - min;\n\n this.onCleanup(\n effect(() => {\n const val = this._valueSignal!.get();\n if (slider.value !== String(val)) {\n slider.value = String(val);\n }\n const percent = range !== 0 ? ((val - min) / range) * 100 : 0;\n filled.style.width = `${percent}%`;\n }),\n );\n }\n\n private _updateSliderValue(value: number) {\n if (this._sliderElement) {\n this._sliderElement.value = String(value);\n }\n if (this._filledElement) {\n const range = this._rangeMax - this._rangeMin;\n const percent =\n range !== 0 ? ((value - this._rangeMin) / range) * 100 : 0;\n this._filledElement.style.width = `${percent}%`;\n }\n }\n\n render() {\n let min = this.min;\n let max = this.max;\n let step = this.step;\n\n if (!Number.isFinite(min)) min = 0;\n if (!Number.isFinite(max)) max = 100;\n if (!Number.isFinite(step)) step = 1;\n if (step <= 0) step = 1;\n\n if (min > max) [min, max] = [max, min];\n\n this._rangeMin = min;\n this._rangeMax = max;\n\n const currentValue = this._valueSignal\n ? this._valueSignal.get()\n : (this as any)._value || 50;\n let value = Number(currentValue);\n if (!Number.isFinite(value)) value = 50;\n if (value < min) value = min;\n if (value > max) value = max;\n\n const disabled = this._getIsDisabled();\n const size = this.size || \"medium\";\n\n const sizes: Record<string, { track: string; thumb: string }> = {\n tiny: { track: \"4px\", thumb: \"16px\" },\n small: { track: \"6px\", thumb: \"18px\" },\n medium: { track: \"8px\", thumb: \"20px\" },\n large: { track: \"10px\", thumb: \"24px\" },\n xlarge: { track: \"14px\", thumb: \"28px\" },\n };\n const trackHeight = sizes[size]?.track || sizes.medium.track;\n const thumbSize = sizes[size]?.thumb || sizes.medium.thumb;\n\n const range = max - min;\n const percent = range !== 0 ? ((value - min) / range) * 100 : 0;\n\n this.mount(\n STYLES,\n `\n <div class=\"slider-container\" style=\"height: ${thumbSize}\">\n <div class=\"track\" style=\"height: ${trackHeight}\">\n <div class=\"filled\" style=\"width: ${percent}%\"></div>\n </div>\n <input type=\"range\" class=\"slider\" min=\"${min}\" max=\"${max}\" step=\"${step}\" value=\"${value}\" ${disabled ? \"disabled\" : \"\"} style=\"height: ${thumbSize}\" />\n </div>\n <div class=\"labels\">\n <span>${min}</span>\n <span>${max}</span>\n </div>\n `,\n );\n\n this._sliderElement = this.$(\".slider\") as HTMLInputElement;\n this._filledElement = this.$(\".filled\") as HTMLElement;\n\n if (this._sliderElement) {\n this.removeAllHandlers({ type: \"input\", source: \"internal\" });\n this.addHandler(\n \"input\",\n () => {\n const val = parseFloat(this._sliderElement!.value);\n const pct = range !== 0 ? ((val - min) / range) * 100 : 0;\n this._filledElement!.style.width = `${pct}%`;\n\n if (this._valueSignal && \"set\" in this._valueSignal) {\n (this._valueSignal as Signal<number>).set(val);\n } else {\n (this as any)._value = val;\n }\n (this.dispatchEventTyped as any)(\"input\", { value: val });\n },\n { internal: true, element: this._sliderElement },\n );\n }\n\n if (this._valueSignal) {\n this._setupValueBinding();\n }\n }\n\n static get observedAttributes() {\n return [...super.observedAttributes, \"value\", \"min\", \"max\", \"step\", \"size\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (\n name === \"value\" ||\n name === \"min\" ||\n name === \"max\" ||\n name === \"step\"\n ) {\n let parsed = newVal !== null ? parseFloat(newVal) : null;\n if (parsed === null || Number.isNaN(parsed)) {\n parsed =\n name === \"value\"\n ? 50\n : name === \"step\"\n ? 1\n : name === \"max\"\n ? 100\n : 0;\n }\n if (name === \"step\" && parsed <= 0) {\n parsed = 1;\n }\n (this as any)[name] = parsed;\n if (name === \"value\" || name === \"min\" || name === \"max\") {\n const min = this.min;\n const max = this.max;\n const currentVal = ((this as any)._value as number) || 50;\n if (currentVal < min) (this as any).value = min;\n if (currentVal > max) (this as any).value = max;\n }\n } else if (name === \"size\") {\n (this as any)[name] = newVal ?? \"\";\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_FOCUS } from \"./shared\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--saz-space-small);\n cursor: pointer;\n user-select: none;\n vertical-align: middle;\n}\n.radio {\n width: 18px;\n height: 18px;\n border: 2px solid var(--saz-color-border);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: border-color 0.15s ease;\n flex-shrink: 0;\n align-self: center;\n background: var(--saz-color-background);\n}\n.dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--saz-color-primary);\n opacity: 0;\n transform: scale(0);\n transition: opacity 0.15s ease, transform 0.15s ease;\n}\n:host([checked]) .radio {\n border-color: var(--saz-color-primary);\n}\n:host([checked]) .dot {\n opacity: 1;\n transform: scale(1);\n}\n.label {\n font-size: var(--saz-text-size-medium);\n color: var(--saz-color-text);\n}\n${STATE_DISABLED}\n${INTERACTIVE_FOCUS}\n`;\n\n// Config\nconst radioConfig = {\n properties: {\n name: { type: \"string\" as const, reflect: false },\n value: { type: \"string\" as const, reflect: false },\n },\n events: {\n change: { name: \"saz-change\", detail: { value: \"value\" } },\n },\n} as const;\n\n@component(radioConfig)\nexport class SazamiRadio extends SazamiComponent<typeof radioConfig> {\n declare name: string;\n declare value: string;\n\n private _handlersInstalled = false;\n private _checkedSignal: Readable<boolean> | null = null;\n private _checkedBindingDispose: (() => void) | null = null;\n private _disabledSignal: Readable<boolean> | null = null;\n private _disabledBindingDispose: (() => void) | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set checked(value: boolean | Readable<boolean>) {\n if (this._checkedBindingDispose) {\n this._checkedBindingDispose();\n this._checkedBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._checkedSignal = value;\n const dispose = this.bindAttribute(\":host\", \"checked\", value);\n if (typeof dispose === \"function\") {\n this._checkedBindingDispose = dispose;\n }\n } else {\n this._checkedSignal = null;\n this._setChecked(value);\n }\n }\n\n get checked(): boolean | Readable<boolean> {\n return this._checkedSignal || (this as any)._checked || false;\n }\n\n private _setChecked(value: boolean) {\n (this as any)._checked = value;\n if (value) {\n this.setAttribute(\"checked\", \"\");\n } else {\n this.removeAttribute(\"checked\");\n }\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._disabledBindingDispose) {\n this._disabledBindingDispose();\n this._disabledBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n const dispose = this.bindDisabled(\":host\", value);\n if (typeof dispose === \"function\") {\n this._disabledBindingDispose = dispose;\n }\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n private _getIsChecked(): boolean {\n if (this._checkedSignal) return this._checkedSignal.get();\n if (this.hasAttribute(\"checked\")) return true;\n return !!(this as any)._checked;\n }\n\n render() {\n const label = this.textContent?.trim() || \"\";\n\n this.mount(\n STYLES,\n `\n <div class=\"radio\"><div class=\"dot\"></div></div>\n ${label ? `<span class=\"label\">${escapeHtml(label)}</span>` : \"\"}\n `,\n );\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"radio\");\n this._updateAria();\n\n if (!this._handlersInstalled) {\n this._handlersInstalled = true;\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n }\n\n private _updateAria() {\n this.setAttribute(\"aria-checked\", String(this._getIsChecked()));\n if (this._getIsDisabled()) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n if (this._getIsChecked()) return;\n\n const canWrite = !this._checkedSignal || \"set\" in this._checkedSignal;\n if (!canWrite) return;\n\n const name = this.getAttribute(\"name\") || \"\";\n const value = this.getAttribute(\"value\") || \"\";\n\n const root = this.getRootNode() as ParentNode;\n if (root) {\n const escapedName = CSS.escape(name);\n root\n .querySelectorAll(`saz-radio[name=\"${escapedName}\"]`)\n .forEach((el) => {\n if (el === this) return;\n const siblingSignal = (el as any)._checkedSignal;\n if (siblingSignal && \"set\" in siblingSignal) {\n (siblingSignal as Signal<boolean>).set(false);\n } else {\n (el as any).checked = false;\n }\n });\n }\n\n if (this._checkedSignal) {\n if (\"set\" in this._checkedSignal) {\n (this._checkedSignal as Signal<boolean>).set(true);\n }\n } else {\n this._setChecked(true);\n }\n this._updateAria();\n this.dispatchEventTyped(\"change\", { value });\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n\n static get observedAttributes() {\n return [\"checked\", \"disabled\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n super.attributeChangedCallback(name, oldVal, newVal);\n if (oldVal === newVal) return;\n if (name === \"checked\" || name === \"disabled\") {\n this._updateAria();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._handlersInstalled = false;\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_FOCUS } from \"./shared\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--saz-space-small);\n cursor: pointer;\n user-select: none;\n}\n.switch {\n width: 44px;\n height: 24px;\n border-radius: 12px;\n background: var(--saz-color-border);\n position: relative;\n transition: background 0.2s ease;\n flex-shrink: 0;\n}\n.thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n transition: transform 0.2s ease;\n}\n:host([checked]) .switch {\n background: var(--saz-color-primary);\n}\n:host([checked]) .thumb {\n transform: translateX(20px);\n}\n:host([variant=\"accent\"]) .switch {\n background: var(--saz-color-border);\n}\n:host([variant=\"accent\"][checked]) .switch {\n background: var(--saz-color-accent);\n}\n:host([variant=\"success\"]) .switch {\n background: var(--saz-color-border);\n}\n:host([variant=\"success\"][checked]) .switch {\n background: var(--saz-color-success);\n}\n.label {\n font-size: var(--saz-text-size-medium);\n color: var(--saz-color-text);\n}\n${STATE_DISABLED}\n${INTERACTIVE_FOCUS}\n`;\n\n// Config\nconst switchConfig = {\n properties: {\n checked: { type: \"boolean\" as const, reflect: true },\n disabled: { type: \"boolean\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: false },\n },\n events: {\n change: { name: \"saz-change\", detail: { checked: \"checked\" } },\n },\n binds: {\n checked: \"attribute\" as const,\n disabled: \"attribute\" as const,\n },\n} as const;\n\n@component(switchConfig)\nexport class SazamiSwitch extends SazamiComponent<typeof switchConfig> {\n declare variant: string;\n\n private _checkedSignal: Readable<boolean> | null = null;\n private _checkedBindingDispose: (() => void) | null = null;\n private _disabledSignal: Readable<boolean> | null = null;\n private _disabledBindingDispose: (() => void) | null = null;\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set checked(value: boolean | Readable<boolean>) {\n if (this._checkedBindingDispose) {\n this._checkedBindingDispose();\n this._checkedBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._checkedSignal = value;\n const dispose = this.bindAttribute(\":host\", \"checked\", value);\n if (typeof dispose === \"function\") {\n this._checkedBindingDispose = dispose;\n }\n } else {\n this._checkedSignal = null;\n this._setChecked(value);\n }\n }\n\n get checked(): boolean | Readable<boolean> {\n return this._checkedSignal || (this as any)._checked || false;\n }\n\n private _setChecked(value: boolean) {\n (this as any)._checked = value;\n if (value) {\n this.setAttribute(\"checked\", \"\");\n } else {\n this.removeAttribute(\"checked\");\n }\n this._updateAria();\n }\n\n set disabled(value: boolean | Readable<boolean>) {\n if (this._disabledBindingDispose) {\n this._disabledBindingDispose();\n this._disabledBindingDispose = null;\n }\n if (this._isReadableBool(value)) {\n this._disabledSignal = value;\n const dispose = this.bindDisabled(\":host\", value);\n if (typeof dispose === \"function\") {\n this._disabledBindingDispose = dispose;\n }\n } else {\n this._disabledSignal = null;\n this._setDisabled(value);\n }\n }\n\n get disabled(): boolean | Readable<boolean> {\n return this._disabledSignal || (this as any)._disabled || false;\n }\n\n private _setDisabled(value: boolean) {\n (this as any)._disabled = value;\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n this._updateAria();\n }\n\n private _getIsDisabled(): boolean {\n if (this._disabledSignal) return this._disabledSignal.get();\n if ((this as any)._disabled !== undefined) return !!(this as any)._disabled;\n return this.hasAttribute(\"disabled\");\n }\n\n private _getIsChecked(): boolean {\n if (this._checkedSignal) return this._checkedSignal.get();\n if (this.hasAttribute(\"checked\")) return true;\n return !!(this as any)._checked;\n }\n\n render() {\n const label = this.textContent?.trim() || \"\";\n\n this.mount(\n STYLES,\n `\n <div class=\"switch\"><div class=\"thumb\"></div></div>\n ${label ? `<span class=\"label\">${escapeHtml(label)}</span>` : \"\"}\n `,\n );\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"switch\");\n this._updateAria();\n\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n }\n\n private _updateAria() {\n const isChecked = this._getIsChecked();\n const isDisabled = this._getIsDisabled();\n this.setAttribute(\"aria-checked\", String(isChecked));\n if (isDisabled) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n private _handleClick = () => {\n if (this._getIsDisabled()) return;\n const newValue = !this._getIsChecked();\n if (this._checkedSignal) {\n if (\"set\" in this._checkedSignal) {\n (this._checkedSignal as Signal<boolean>).set(newValue);\n this._updateAria();\n this.dispatchEventTyped(\"change\", { checked: newValue });\n }\n } else {\n this._setChecked(newValue);\n this.dispatchEventTyped(\"change\", { checked: newValue });\n }\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n\n static get observedAttributes() {\n return [\"checked\", \"disabled\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldVal: string | null,\n newVal: string | null,\n ) {\n if (oldVal === newVal) return;\n if (name === \"checked\" || name === \"disabled\") {\n this._updateAria();\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { INTERACTIVE_HOVER } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { Signal } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n position: fixed;\n bottom: var(--saz-space-large);\n right: var(--saz-space-large);\n z-index: 9998;\n display: flex;\n align-items: center;\n gap: var(--saz-space-small);\n padding: var(--saz-space-small) var(--saz-space-large);\n background: var(--saz-color-background);\n border-radius: var(--saz-radius-medium);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n transform: translateY(100px);\n opacity: 0;\n transition: transform 0.3s ease, opacity 0.3s ease;\n max-width: 320px;\n}\n:host([visible]) {\n transform: translateY(0);\n opacity: 1;\n}\n.icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n}\n:host([variant=\"success\"]) .icon { color: var(--saz-color-success); }\n:host([variant=\"error\"]) .icon { color: var(--saz-color-danger); }\n:host([variant=\"danger\"]) .icon { color: var(--saz-color-danger); }\n:host([variant=\"warning\"]) .icon { color: #f59e0b; }\n:host([variant=\"info\"]) .icon { color: var(--saz-color-primary); }\n\n.message {\n flex: 1;\n font-size: var(--saz-text-size-medium);\n color: var(--saz-color-text);\n}\n.close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--saz-color-text-dim);\n border-radius: var(--saz-radius-soft);\n transition: background 0.15s ease;\n}\n${INTERACTIVE_HOVER}\n.close-btn svg {\n width: 18px;\n height: 18px;\n}\n`;\n\nconst toastConfig = {\n properties: {\n message: { type: \"string\" as const, reflect: false },\n variant: { type: \"string\" as const, reflect: false },\n duration: { type: \"number\" as const, reflect: false, default: 3000 },\n visible: { type: \"boolean\" as const, reflect: false },\n },\n events: {\n close: { name: \"saz-close\", detail: {} },\n },\n} as const;\n\n@component(toastConfig)\nexport class SazamiToast extends SazamiComponent<typeof toastConfig> {\n declare message: string;\n declare variant: string;\n declare duration: number;\n declare visible: boolean;\n\n messageSignal?: Signal<string>;\n\n private _hideTimeout?: ReturnType<typeof setTimeout>;\n private _removeTimeout?: ReturnType<typeof setTimeout>;\n private _closeHandler = () => this.hide();\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n this.hide();\n }\n };\n\n disconnectedCallback() {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._removeTimeout) {\n clearTimeout(this._removeTimeout);\n }\n super.disconnectedCallback();\n }\n\n render() {\n const variant = this.getAttribute(\"variant\") || \"default\";\n const message =\n this.getAttribute(\"message\") || this.textContent?.trim() || \"\";\n const rawDuration = this.getAttribute(\"duration\");\n let duration = 3000;\n if (rawDuration !== null && rawDuration !== \"\") {\n const parsed = parseInt(rawDuration, 10);\n if (!Number.isNaN(parsed)) {\n duration = parsed;\n }\n }\n const showClose = !this.hasAttribute(\"no-close\");\n\n const icon =\n variant === \"success\"\n ? ICON_SVGS.check\n : variant === \"error\" || variant === \"danger\"\n ? ICON_SVGS.close\n : variant === \"warning\"\n ? \"⚠\"\n : \"ℹ\";\n\n const urgent = variant === \"error\" || variant === \"danger\";\n this.setAttribute(\"role\", urgent ? \"alert\" : \"status\");\n this.setAttribute(\"aria-live\", urgent ? \"assertive\" : \"polite\");\n this.setAttribute(\"aria-atomic\", \"true\");\n\n const messageEl = `<span class=\"message\"></span>`;\n const closeBtnEl = showClose\n ? `<button class=\"close-btn\" aria-label=\"Close\">${ICON_SVGS.close}</button>`\n : \"\";\n\n this.mount(\n STYLES,\n `\n <span class=\"icon\">${icon}</span>\n ${messageEl}\n ${closeBtnEl}\n `,\n );\n\n const messageSpan = this.$(\".message\");\n if (messageSpan) {\n messageSpan.textContent = message;\n }\n\n if (this.messageSignal) {\n this.bindText(\".message\", this.messageSignal);\n }\n\n if (showClose) {\n const closeBtn = this.$(\".close-btn\") as HTMLElement | null;\n this.removeHandler(\"click\", this._closeHandler);\n if (closeBtn) {\n this.addHandler(\"click\", this._closeHandler, {\n internal: true,\n element: closeBtn,\n });\n }\n }\n\n // Keyboard support: Escape to dismiss\n this.removeHandler(\"keydown\", this._handleKeydown);\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n\n if (!this.hasAttribute(\"visible\")) {\n this.setAttribute(\"visible\", \"\");\n }\n\n if (duration > 0) {\n if (this._hideTimeout) clearTimeout(this._hideTimeout);\n this._hideTimeout = setTimeout(() => this.hide(), duration);\n }\n }\n\n hide() {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = undefined;\n }\n if (this._removeTimeout) {\n clearTimeout(this._removeTimeout);\n }\n this.visible = false;\n this._removeTimeout = setTimeout(() => {\n this._removeTimeout = undefined;\n this.dispatchEventTyped(\"close\", {});\n this.remove();\n }, 300);\n }\n\n static show(message: string, variant = \"info\", duration = 3000) {\n const toast = document.createElement(\"saz-toast\");\n toast.setAttribute(\"message\", message);\n toast.setAttribute(\"variant\", variant);\n toast.setAttribute(\"duration\", duration.toString());\n document.body.appendChild(toast);\n return toast;\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { SHAPE_RULES } from \"./shared\";\nimport { Derived, isSignal, effect, type Readable } from \"@nisoku/sairin\";\nimport { bindProperty } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: hidden;\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n font-size: 14px;\n}\n:host([size=\"tiny\"]) { width: 24px; height: 24px; font-size: 10px; }\n:host([size=\"small\"]) { width: 32px; height: 32px; font-size: 12px; }\n:host([size=\"medium\"]) { width: 40px; height: 40px; font-size: 14px; }\n:host([size=\"large\"]) { width: 56px; height: 56px; font-size: 20px; }\n:host([size=\"xlarge\"]) { width: 80px; height: 80px; font-size: 28px; }\n.image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.initials {\n text-transform: uppercase;\n user-select: none;\n}\n${SHAPE_RULES}\n`;\n\nconst avatarConfig = {\n properties: {\n alt: { type: \"string\" as const, reflect: true },\n initials: { type: \"string\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: true },\n shape: { type: \"string\" as const, reflect: true },\n src: { type: \"string\" as const, reflect: true },\n },\n structuralRoots: {\n image: \"img\",\n initials: \"span\",\n },\n} as const;\n\n@component(avatarConfig)\nexport class SazamiAvatar extends SazamiComponent<typeof avatarConfig> {\n private _srcSignal: Readable<string> | null = null;\n private _imgElement: HTMLImageElement | null = null;\n private _initialsElement: HTMLElement | null = null;\n private _srcDisposer: (() => void) | null = null;\n private _modeEffectDisposer: (() => void) | null = null;\n private _altObserver: MutationObserver | null = null;\n private _isImageMode: boolean = false;\n\n protected getRenderMode(): string {\n return this._isImageMode ? \"image\" : \"initials\";\n }\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n private _disposeSrcBinding() {\n if (this._srcDisposer) {\n this._srcDisposer();\n this._srcDisposer = null;\n }\n if (this._modeEffectDisposer) {\n this._modeEffectDisposer();\n this._modeEffectDisposer = null;\n }\n if (this._altObserver) {\n this._altObserver.disconnect();\n this._altObserver = null;\n }\n }\n\n private _getCurrentSrc(): string {\n if (this._srcSignal) return this._srcSignal.get();\n if ((this as any)._src) return (this as any)._src;\n return this.getAttribute(\"src\") || \"\";\n }\n\n private _isImageModeNow(): boolean {\n return !!this._getCurrentSrc();\n }\n\n set src(value: string | Readable<string>) {\n const wasImageMode = this._isImageMode;\n const hasReadable = this._isReadableStr(value);\n\n if (hasReadable) {\n this._srcSignal = value;\n (this as any)._src = undefined;\n } else {\n this._srcSignal = null;\n (this as any)._src = value;\n }\n\n const nowImageMode = this._isImageModeNow();\n\n if (this._isImageMode !== nowImageMode) {\n this._disposeSrcBinding();\n this.render();\n return;\n }\n\n if (nowImageMode && this._imgElement) {\n this._disposeSrcBinding();\n this._setupSrcBinding();\n if (!this._srcSignal && this._imgElement) {\n this._imgElement.src = (this as any)._src || \"\";\n this._imgElement.alt = this.getAttribute(\"alt\") || \"\";\n }\n } else if (!nowImageMode && this._initialsElement) {\n this._disposeSrcBinding();\n this._updateDisplay();\n this._setupSignalWatcher();\n } else if (!this._imgElement && !this._initialsElement) {\n this.render();\n }\n }\n\n get src(): string | Readable<string> {\n return this._srcSignal || (this as any)._src || \"\";\n }\n\n private _setupSrcBinding() {\n if (!this._imgElement || !this._srcSignal) return;\n\n const img = this._imgElement;\n const sig = this._srcSignal;\n\n img.src = sig.get();\n this._srcDisposer = bindProperty(img, \"src\", sig);\n this.onCleanup(this._srcDisposer);\n\n img.alt = this.getAttribute(\"alt\") || \"\";\n\n this._altObserver = new MutationObserver(() => {\n img.alt = this.getAttribute(\"alt\") || \"\";\n });\n this._altObserver.observe(this, {\n attributes: true,\n attributeFilter: [\"alt\"],\n });\n this.onCleanup(() => this._altObserver?.disconnect());\n\n const checkModeChange = () => {\n const currentSrc = sig.get();\n const shouldBeImageMode = !!currentSrc;\n if (this._isImageMode !== shouldBeImageMode) {\n this._disposeSrcBinding();\n this.render();\n }\n };\n\n this._modeEffectDisposer = effect(() => {\n sig.get();\n checkModeChange();\n });\n this.onCleanup(this._modeEffectDisposer);\n }\n\n private _updateDisplay() {\n const currentSrc = this._getCurrentSrc();\n const alt = this.getAttribute(\"alt\") || \"\";\n const textContent = this.textContent?.trim() || \"\";\n const initialsAttr = this.getAttribute(\"initials\") || \"\";\n const initials = initialsAttr || this._getInitials(alt || textContent);\n\n if (this._isImageMode) {\n if (this._imgElement) {\n this._imgElement.src = currentSrc;\n this._imgElement.alt = alt;\n this._imgElement.style.display = \"block\";\n }\n if (this._initialsElement) {\n this._initialsElement.style.display = \"none\";\n }\n } else {\n if (this._initialsElement) {\n this._initialsElement.textContent = initials;\n this._initialsElement.style.display = \"\";\n }\n if (this._imgElement) {\n this._imgElement.style.display = \"none\";\n }\n }\n }\n\n render() {\n const currentSrc = this._getCurrentSrc();\n this._isImageMode = !!currentSrc;\n\n if (this._isImageMode) {\n this.mount(STYLES, `<img class=\"image\" alt=\"\" />`);\n this._imgElement = this.$(\".image\");\n this._initialsElement = null;\n\n if (this._srcSignal) {\n this._setupSrcBinding();\n } else {\n const currentSrc = this._getCurrentSrc();\n if (currentSrc && this._imgElement) {\n this._imgElement.src = currentSrc;\n }\n }\n } else {\n this.mount(STYLES, `<span class=\"initials\"></span>`);\n this._imgElement = null;\n this._initialsElement = this.$(\".initials\");\n this._updateDisplay();\n\n if (this._srcSignal) {\n this._setupSignalWatcher();\n }\n }\n }\n\n private _setupSignalWatcher() {\n if (!this._srcSignal) return;\n\n if (this._modeEffectDisposer) {\n this._modeEffectDisposer();\n }\n\n const sig = this._srcSignal;\n this._modeEffectDisposer = effect(() => {\n const currentSrc = sig.get();\n const shouldBeImageMode = !!currentSrc;\n if (this._isImageMode !== shouldBeImageMode) {\n this._disposeSrcBinding();\n this.render();\n }\n });\n this.onCleanup(this._modeEffectDisposer);\n }\n\n private _getInitials(name: string): string {\n return name\n .split(\" \")\n .map((n) => n[0])\n .slice(0, 2)\n .join(\"\");\n }\n\n static get observedAttributes() {\n return [\"src\", \"alt\", \"size\", \"shape\", \"initials\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (name === \"src\" && oldValue !== newValue) {\n (this as any)._src = newValue || \"\";\n if (!this._srcSignal) {\n const wasImageMode = this._isImageMode;\n const nowImageMode = !!this._getCurrentSrc();\n if (wasImageMode !== nowImageMode) {\n this.render();\n } else {\n this._updateDisplay();\n }\n }\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { STATE_DISABLED, INTERACTIVE_HOVER, VARIANT_BG_RULES } from \"./shared\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { escapeHtml } from \"../escape\";\nimport { Signal } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--saz-space-tiny);\n padding: var(--saz-space-tiny) var(--saz-space-small);\n border-radius: var(--saz-radius-round);\n font-size: var(--saz-text-size-small);\n font-weight: 500;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease, color 0.15s ease;\n}\n:host([size=\"small\"]) {\n padding: 2px var(--saz-space-tiny);\n font-size: 10px;\n}\n:host([size=\"large\"]) {\n padding: var(--saz-space-small) var(--saz-space-medium);\n font-size: var(--saz-text-size-medium);\n}\n:host([size=\"xlarge\"]) {\n padding: var(--saz-space-medium) var(--saz-space-large);\n font-size: var(--saz-text-size-large);\n}\n:host([variant=\"default\"]) {\n background: var(--saz-color-surface);\n color: var(--saz-color-text);\n}\n:host([variant=\"primary\"]) {\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n}\n:host([variant=\"accent\"]) {\n background: var(--saz-color-accent);\n color: var(--saz-color-on-accent);\n}\n:host([variant=\"success\"]) {\n background: var(--saz-color-success);\n color: #fff;\n}\n:host([variant=\"warning\"]) {\n background: #fef3c7;\n color: #92400e;\n}\n:host([variant=\"danger\"]) {\n background: var(--saz-color-danger);\n color: #fff;\n}\n:host([selected]) {\n background: var(--saz-color-primary);\n color: var(--saz-color-on-primary);\n}\n${INTERACTIVE_HOVER}\n${STATE_DISABLED}\n.remove-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 50%;\n color: inherit;\n opacity: 0.7;\n transition: opacity 0.15s ease, background 0.15s ease;\n}\n.remove-btn:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.1);\n}\n.remove-btn svg {\n width: 16px;\n height: 16px;\n}\n`;\n\nconst chipConfig = {\n properties: {\n label: { type: \"string\" as const, reflect: false },\n variant: { type: \"string\" as const, reflect: false },\n removable: { type: \"boolean\" as const, reflect: false },\n selected: { type: \"boolean\" as const, reflect: true },\n disabled: { type: \"boolean\" as const, reflect: true },\n size: { type: \"string\" as const, reflect: false },\n },\n events: {\n change: { name: \"saz-change\", detail: { selected: \"selected\" } },\n remove: { name: \"saz-remove\", detail: {} },\n },\n} as const;\n\n@component(chipConfig)\nexport class SazamiChip extends SazamiComponent<typeof chipConfig> {\n declare label: string;\n declare variant: string;\n declare removable: boolean;\n declare size: string;\n declare selected: boolean;\n declare disabled: boolean;\n\n disabledSignal?: Signal<boolean>;\n selectedSignal?: Signal<boolean>;\n\n render() {\n const label = this.getAttribute(\"label\") || this.textContent?.trim() || \"\";\n const removable = this.hasAttribute(\"removable\");\n\n this.mount(\n STYLES,\n `\n <span class=\"chip-label\">${escapeHtml(label)}</span>${removable ? `<button class=\"remove-btn\" aria-label=\"Remove\">${ICON_SVGS.close}</button>` : \"\"}\n `,\n );\n\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"aria-pressed\", String(this.selected));\n this._updateTabIndex();\n\n if (removable) {\n const btn = this.$(\".remove-btn\") as HTMLButtonElement;\n this.addHandler(\n \"click\",\n (e: Event) => {\n e.stopPropagation();\n this.dispatchEventTyped(\"remove\", {});\n this.remove();\n },\n { internal: true, element: btn },\n );\n }\n\n this.addHandler(\"click\", this._handleClick, { internal: true });\n this.addHandler(\"keydown\", this._handleKeydown, { internal: true });\n\n if (this.disabledSignal) {\n this.bindDisabled(\":host\", this.disabledSignal);\n }\n if (this.selectedSignal) {\n this.bindAttribute(\":host\", \"selected\", this.selectedSignal);\n }\n }\n\n private _updateTabIndex() {\n if (this.disabled) {\n this.setAttribute(\"tabindex\", \"-1\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.setAttribute(\"tabindex\", \"0\");\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n private _handleClick = () => {\n if (this.disabled) return;\n this.selected = !this.selected;\n this.setAttribute(\"aria-pressed\", String(this.selected));\n this.dispatchEventTyped(\"change\", { selected: this.selected });\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleClick();\n }\n };\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { ICON_SVGS } from \"../icons/index\";\nimport { Signal, Derived, isSignal, type Readable } from \"@nisoku/sairin\";\nimport { bindText } from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--saz-space-small);\n}\n.spinner {\n animation: spin 1s linear infinite;\n color: var(--saz-color-primary);\n}\n.spinner svg {\n width: 100%;\n height: 100%;\n fill: none;\n stroke: currentColor;\n}\n:host(:not([size])) .spinner,\n:host([size=\"medium\"]) .spinner { width: 24px; height: 24px; }\n:host([size=\"tiny\"]) .spinner { width: 12px; height: 12px; }\n:host([size=\"small\"]) .spinner { width: 16px; height: 16px; }\n:host([size=\"large\"]) .spinner { width: 32px; height: 32px; }\n:host([size=\"xlarge\"]) .spinner { width: 48px; height: 48px; }\n:host([variant=\"accent\"]) .spinner { color: var(--saz-color-accent); }\n:host([variant=\"light\"]) .spinner { color: #fff; }\n.label {\n font-size: var(--saz-text-size-small);\n color: var(--saz-color-text-dim);\n}\n:host([label=\"\"]) .label { display: none; }\n:host(:not([label])) .label { \n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n@keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n`;\n\nconst spinnerConfig = {\n properties: {\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n },\n} as const;\n\n@component(spinnerConfig)\nexport class SazamiSpinner extends SazamiComponent<typeof spinnerConfig> {\n private _labelSignal: Readable<string> | null = null;\n private _visibleSignal: Readable<boolean> | null = null;\n private _labelElement: HTMLElement | null = null;\n\n private _isReadableStr(value: unknown): value is Readable<string> {\n return isSignal(value) || value instanceof Derived;\n }\n\n private _isReadableBool(value: unknown): value is Readable<boolean> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set label(value: string | Readable<string>) {\n if (this._isReadableStr(value)) {\n this._labelSignal = value;\n } else {\n this._labelSignal = null;\n (this as any)._label = value;\n this._updateLabel(value);\n }\n }\n\n get label(): string | Readable<string> {\n if (this._labelSignal) return this._labelSignal;\n return (this as any)._label || \"\";\n }\n\n set visible(value: boolean | Readable<boolean>) {\n if (this._isReadableBool(value)) {\n this._visibleSignal = value;\n this.bindVisible(\":host\", value);\n } else {\n this._visibleSignal = null;\n if (value) {\n this.setAttribute(\"visible\", \"\");\n } else {\n this.removeAttribute(\"visible\");\n }\n }\n }\n\n get visible(): boolean | Readable<boolean> {\n return this._visibleSignal || this.hasAttribute(\"visible\");\n }\n\n private _updateLabel(value: string) {\n if (this._labelElement) {\n this._labelElement.textContent = value;\n }\n }\n\n private _setupLabelBinding() {\n if (!this._labelElement) return;\n\n const dispose = bindText(this._labelElement, this._labelSignal!);\n this.onCleanup(dispose);\n }\n\n render() {\n const labelText = this._labelSignal\n ? this._labelSignal.get()\n : ((this as any)._label ?? \"Loading...\");\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"status\");\n }\n if (!this.hasAttribute(\"aria-live\")) {\n this.setAttribute(\"aria-live\", \"polite\");\n }\n\n this.mount(\n STYLES,\n `\n <div class=\"spinner\">${ICON_SVGS[\"spinner\"] || \"\"}</div>\n <span class=\"label\"></span>\n `,\n );\n\n this._labelElement = this.$(\".label\");\n if (this._labelElement) {\n this._labelElement.textContent = labelText;\n if (this._labelSignal) {\n this._setupLabelBinding();\n }\n }\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport {\n Signal,\n Derived,\n isSignal,\n effect,\n type Readable,\n} from \"@nisoku/sairin\";\n\nconst STYLES = `\n:host { display: block; width: 100%; }\n.track {\n width: 100%;\n background: var(--saz-color-surface);\n border-radius: var(--saz-radius-round);\n overflow: hidden;\n border: 2px solid var(--saz-color-border);\n}\n:host(:not([size])) .track,\n:host([size=\"medium\"]) .track { height: 12px; }\n:host([size=\"tiny\"]) .track { height: 6px; }\n:host([size=\"small\"]) .track { height: 8px; }\n:host([size=\"large\"]) .track { height: 16px; }\n:host([size=\"xlarge\"]) .track { height: 20px; }\n.bar {\n height: 100%;\n background: var(--saz-color-primary);\n border-radius: var(--saz-radius-round);\n transition: width 0.3s ease;\n}\n:host([variant=\"accent\"]) .bar { background: var(--saz-color-accent); }\n:host([variant=\"success\"]) .bar { background: var(--saz-color-success); }\n:host([variant=\"danger\"]) .bar { background: var(--saz-color-danger); }\n:host([indeterminate]) .bar {\n width: 30% !important;\n animation: indeterminate 1.5s ease-in-out infinite;\n}\n@keyframes indeterminate {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n}\n`;\n\nconst progressConfig = {\n properties: {\n max: { type: \"number\" as const, reflect: true, default: 100 },\n min: { type: \"number\" as const, reflect: true, default: 0 },\n size: { type: \"string\" as const, reflect: true },\n variant: { type: \"string\" as const, reflect: true },\n indeterminate: { type: \"boolean\" as const, reflect: true },\n },\n} as const;\n\n@component(progressConfig)\nexport class SazamiProgress extends SazamiComponent<typeof progressConfig> {\n declare max: number;\n declare min: number;\n declare size: string;\n declare variant: string;\n declare indeterminate: boolean;\n\n private _valueSignal: Readable<number> | null = null;\n private _barElement: HTMLElement | null = null;\n private _rangeMin: number = 0;\n private _rangeMax: number = 100;\n private _valueBindingCleanup: (() => void) | null = null;\n\n private _isReadableNum(value: unknown): value is Readable<number> {\n return isSignal(value) || value instanceof Derived;\n }\n\n set value(valueOrSignal: number | Readable<number>) {\n if (this._isReadableNum(valueOrSignal)) {\n this._valueSignal = valueOrSignal;\n if (this._barElement) {\n this._setupValueBinding();\n }\n } else {\n this._valueSignal = null;\n if (this._valueBindingCleanup) {\n this._valueBindingCleanup();\n this._valueBindingCleanup = null;\n }\n (this as any)._value = valueOrSignal;\n this._updateBarWidth(valueOrSignal);\n }\n }\n\n get value(): number | Readable<number> {\n return this._valueSignal || (this as any)._value || 0;\n }\n\n private _setupValueBinding() {\n if (!this._barElement || !this._valueSignal) return;\n\n if (this._valueBindingCleanup) {\n this._valueBindingCleanup();\n }\n\n const cleanups: (() => void)[] = [];\n\n const widthDisposer = this.bindWidthPercent(\n \".bar\",\n this._valueSignal,\n this._rangeMin,\n this._rangeMax,\n );\n cleanups.push(widthDisposer);\n\n const ariaDisposer = effect(() => {\n const val = this._valueSignal!.get();\n if (this.hasAttribute(\"indeterminate\")) {\n this.removeAttribute(\"aria-valuenow\");\n return;\n }\n const range = this._rangeMax - this._rangeMin;\n const clamped =\n range > 0\n ? Math.min(this._rangeMax, Math.max(this._rangeMin, val))\n : undefined;\n if (clamped !== undefined) {\n this.setAttribute(\"aria-valuenow\", String(Math.round(clamped)));\n } else {\n this.removeAttribute(\"aria-valuenow\");\n }\n });\n cleanups.push(ariaDisposer);\n\n this._valueBindingCleanup = () => {\n cleanups.forEach((fn) => fn());\n };\n this.onCleanup(this._valueBindingCleanup);\n }\n\n private _updateBarWidth(value: number) {\n if (this._barElement) {\n const range = this._rangeMax - this._rangeMin;\n const percent =\n range > 0\n ? Math.min(100, Math.max(0, ((value - this._rangeMin) / range) * 100))\n : 0;\n this._barElement.style.width = `${percent}%`;\n }\n }\n\n render() {\n const rawValue = this._valueSignal\n ? this._valueSignal.get()\n : ((this as any)._value ?? Number(this.getAttribute(\"value\") || \"50\"));\n const rawMax = Number(this.getAttribute(\"max\") || \"100\");\n const rawMin = Number(this.getAttribute(\"min\") || \"0\");\n const value = Number.isFinite(rawValue) ? rawValue : 50;\n const max = Number.isFinite(rawMax) ? rawMax : 100;\n const min = Number.isFinite(rawMin) ? rawMin : 0;\n const indeterminate = this.hasAttribute(\"indeterminate\");\n\n this._rangeMin = min;\n this._rangeMax = max;\n\n const range = max - min;\n const percent =\n range > 0 ? Math.min(100, Math.max(0, ((value - min) / range) * 100)) : 0;\n\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"progressbar\");\n }\n this.setAttribute(\"aria-valuemin\", String(min));\n this.setAttribute(\"aria-valuemax\", String(max));\n if (indeterminate) {\n this.removeAttribute(\"aria-valuenow\");\n } else {\n const clamped =\n range > 0 ? Math.min(max, Math.max(min, value)) : undefined;\n if (clamped !== undefined) {\n this.setAttribute(\"aria-valuenow\", String(Math.round(clamped)));\n } else {\n this.removeAttribute(\"aria-valuenow\");\n }\n }\n\n this.mountSync(\n STYLES,\n `\n <div class=\"track\">\n <div class=\"bar\" style=\"width: ${indeterminate ? \"30%\" : percent + \"%\"}\"></div>\n </div>\n `,\n );\n\n this._barElement = this.$(\".bar\");\n\n if (this._valueSignal && this._barElement) {\n this._setupValueBinding();\n }\n }\n\n static get observedAttributes() {\n return [\"value\", \"max\", \"min\", \"indeterminate\"];\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n if (oldValue === newValue) return;\n this.render();\n }\n}\n","import { SazamiComponent, component } from \"./base\";\nimport { ICON_SVGS } from \"../icons/index\";\n\nconst STYLES = `\n:host { display: block; }\n.item {\n border-bottom: 1px solid var(--saz-color-border);\n}\n.item:first-child { border-top: 1px solid var(--saz-color-border); }\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--saz-space-medium) var(--saz-space-small);\n cursor: pointer;\n background: transparent;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n font-family: inherit;\n color: var(--saz-color-text);\n transition: background 0.15s ease;\n}\n.header:hover {\n background: var(--saz-color-surface);\n}\n.header:focus-visible {\n outline: 2px solid var(--saz-color-primary);\n outline-offset: -2px;\n}\n.title {\n font-weight: 500;\n font-size: var(--saz-text-size-medium);\n}\n.chevron {\n width: 20px;\n height: 20px;\n color: var(--saz-color-text-dim);\n transition: transform 0.2s ease;\n flex-shrink: 0;\n}\n.chevron svg {\n width: 100%;\n height: 100%;\n fill: none;\n stroke: currentColor;\n}\n.item[open] .chevron {\n transform: rotate(180deg);\n}\n.content {\n max-height: 0;\n overflow: hidden;\n transition: max-height 0.3s ease, padding 0.3s ease;\n padding: 0 var(--saz-space-small);\n}\n.item[open] .content {\n max-height: 500px;\n padding-bottom: var(--saz-space-medium);\n}\n.inner-content {\n font-size: var(--saz-text-size-medium);\n color: var(--saz-color-text-dim);\n line-height: 1.5;\n}\n`;\n\nconst accordionConfig = {\n properties: {\n \"single-open\": { type: \"boolean\" as const, reflect: false },\n index: { type: \"string\" as const, reflect: false },\n open: { type: \"boolean\" as const, reflect: false },\n },\n events: {\n change: { name: \"saz-change\", detail: { index: \"index\", open: \"open\" } },\n },\n} as const;\n\n@component(accordionConfig)\nexport class SazamiAccordion extends SazamiComponent<typeof accordionConfig> {\n declare \"single-open\": boolean;\n declare index: string;\n declare open: boolean;\n\n private _itemElements: HTMLElement[] = [];\n private _handlersAdded = false;\n\n render() {\n const items = Array.from(this.querySelectorAll(\":scope > *\")).map(\n (el, i) => ({\n title:\n (el as HTMLElement).getAttribute(\"heading\") || `Section ${i + 1}`,\n element: el as HTMLElement,\n open: el.hasAttribute(\"open\"),\n }),\n );\n\n if (this._itemElements.length === 0) {\n this._itemElements = items.map((item, i) => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"item\";\n if (item.open) wrapper.setAttribute(\"open\", \"\");\n\n const header = document.createElement(\"button\");\n header.className = \"header\";\n header.setAttribute(\"aria-expanded\", String(item.open));\n header.id = `accordion-header-${i}`;\n\n const titleSpan = document.createElement(\"span\");\n titleSpan.className = \"title\";\n titleSpan.textContent = item.title;\n\n const chevron = document.createElement(\"div\");\n chevron.className = \"chevron\";\n chevron.innerHTML = ICON_SVGS[\"chevron-down\"] || \"\";\n\n header.appendChild(titleSpan);\n header.appendChild(chevron);\n\n const content = document.createElement(\"div\");\n content.className = \"content\";\n content.id = `accordion-content-${i}`;\n\n const innerContent = document.createElement(\"div\");\n innerContent.className = \"inner-content\";\n while (item.element.firstChild) {\n innerContent.appendChild(item.element.firstChild);\n }\n content.appendChild(innerContent);\n\n wrapper.appendChild(header);\n wrapper.appendChild(content);\n\n return wrapper;\n });\n }\n\n this.mount(STYLES, \"\");\n\n const container = document.createElement(\"div\");\n container.className = \"accordion-container\";\n this._itemElements.forEach((wrapper, i) => {\n if (!container.contains(wrapper)) {\n container.appendChild(wrapper);\n }\n const header = wrapper.querySelector(\".header\") as HTMLElement;\n const isOpen = wrapper.hasAttribute(\"open\");\n header.setAttribute(\"aria-expanded\", String(isOpen));\n header.setAttribute(\"aria-controls\", `accordion-content-${i}`);\n });\n this.shadow.appendChild(container);\n\n if (!this._handlersAdded) {\n this._handlersAdded = true;\n const headers = this.shadow.querySelectorAll(\".header\");\n headers.forEach((header, i) => {\n const handleClick = () => {\n const item = header.parentElement;\n const isOpen = item?.hasAttribute(\"open\");\n\n if (this.hasAttribute(\"single-open\")) {\n this._itemElements.forEach((el) => {\n el.removeAttribute(\"open\");\n });\n headers.forEach((h) => {\n (h as HTMLElement).setAttribute(\"aria-expanded\", \"false\");\n });\n }\n\n if (isOpen) {\n item?.removeAttribute(\"open\");\n (header as HTMLElement).setAttribute(\"aria-expanded\", \"false\");\n } else {\n item?.setAttribute(\"open\", \"\");\n (header as HTMLElement).setAttribute(\"aria-expanded\", \"true\");\n }\n\n this.dispatchEventTyped(\"change\", {\n index: i.toString(),\n open: !isOpen,\n });\n };\n this.addHandler(\"click\", handleClick, {\n internal: true,\n element: header as HTMLElement,\n });\n });\n }\n }\n}\n","import { SazamiRow } from \"./row\";\nimport { SazamiColumn } from \"./column\";\nimport { SazamiGrid } from \"./grid\";\nimport { SazamiStack } from \"./stack\";\nimport { SazamiCard } from \"./card\";\nimport { SazamiText } from \"./text\";\nimport { SazamiHeading } from \"./heading\";\nimport { SazamiLabel } from \"./label\";\nimport { SazamiButton } from \"./button\";\nimport { SazamiIconButton } from \"./icon-button\";\nimport { SazamiInput } from \"./input\";\nimport { SazamiCheckbox } from \"./checkbox\";\nimport { SazamiToggle } from \"./toggle\";\nimport { SazamiImage } from \"./image\";\nimport { SazamiCoverart } from \"./coverart\";\nimport { SazamiIcon } from \"./icon\";\nimport { SazamiBadge } from \"./badge\";\nimport { SazamiTag } from \"./tag\";\nimport { SazamiDivider } from \"./divider\";\nimport { SazamiSpacer } from \"./spacer\";\nimport { SazamiSection } from \"./section\";\nimport { createGenericClass } from \"./generic\";\nimport { SazamiModal } from \"./modal\";\nimport { SazamiSelect } from \"./select\";\nimport { SazamiTabs } from \"./tabs\";\nimport { SazamiSlider } from \"./slider\";\nimport { SazamiRadio } from \"./radio\";\nimport { SazamiSwitch } from \"./switch\";\nimport { SazamiToast } from \"./toast\";\nimport { SazamiAvatar } from \"./avatar\";\nimport { SazamiChip } from \"./chip\";\nimport { SazamiSpinner } from \"./spinner\";\nimport { SazamiProgress } from \"./progress\";\nimport { SazamiAccordion } from \"./accordion\";\n\nexport const COMPONENT_REGISTRY: Record<string, typeof HTMLElement> = {\n \"saz-row\": SazamiRow,\n \"saz-column\": SazamiColumn,\n \"saz-grid\": SazamiGrid,\n \"saz-stack\": SazamiStack,\n \"saz-card\": SazamiCard,\n \"saz-text\": SazamiText,\n \"saz-heading\": SazamiHeading,\n \"saz-label\": SazamiLabel,\n \"saz-button\": SazamiButton,\n \"saz-icon-button\": SazamiIconButton,\n \"saz-input\": SazamiInput,\n \"saz-checkbox\": SazamiCheckbox,\n \"saz-toggle\": SazamiToggle,\n \"saz-image\": SazamiImage,\n \"saz-coverart\": SazamiCoverart,\n \"saz-icon\": SazamiIcon,\n \"saz-badge\": SazamiBadge,\n \"saz-tag\": SazamiTag,\n \"saz-divider\": SazamiDivider,\n \"saz-spacer\": SazamiSpacer,\n \"saz-section\": SazamiSection,\n \"saz-details\": createGenericClass(),\n \"saz-controls\": createGenericClass(),\n \"saz-modal\": SazamiModal,\n \"saz-select\": SazamiSelect,\n \"saz-tabs\": SazamiTabs,\n \"saz-slider\": SazamiSlider,\n \"saz-radio\": SazamiRadio,\n \"saz-switch\": SazamiSwitch,\n \"saz-toast\": SazamiToast,\n \"saz-avatar\": SazamiAvatar,\n \"saz-chip\": SazamiChip,\n \"saz-spinner\": SazamiSpinner,\n \"saz-progress\": SazamiProgress,\n \"saz-accordion\": SazamiAccordion,\n};\n\nexport function registerComponents(): void {\n if (typeof customElements === \"undefined\") return;\n Object.entries(COMPONENT_REGISTRY).forEach(([tag, cls]) => {\n if (!customElements.get(tag)) {\n customElements.define(tag, cls);\n }\n });\n}\n","import type { ASTNode } from \"@nisoku/sakko\";\nimport { parseModifiers } from \"../primitives/modifier-map\";\nimport { unknownComponentError } from \"../errors\";\n\nexport type VNode = {\n type: string;\n props: Record<string, any>;\n children: (VNode | string)[];\n};\n\nconst SAZAMI_REGISTRY: Record<string, { tag: string }> = {\n card: { tag: \"saz-card\" },\n text: { tag: \"saz-text\" },\n heading: { tag: \"saz-heading\" },\n label: { tag: \"saz-label\" },\n button: { tag: \"saz-button\" },\n \"icon-btn\": { tag: \"saz-icon-button\" },\n input: { tag: \"saz-input\" },\n checkbox: { tag: \"saz-checkbox\" },\n toggle: { tag: \"saz-toggle\" },\n image: { tag: \"saz-image\" },\n coverart: { tag: \"saz-coverart\" },\n icon: { tag: \"saz-icon\" },\n badge: { tag: \"saz-badge\" },\n tag: { tag: \"saz-tag\" },\n divider: { tag: \"saz-divider\" },\n spacer: { tag: \"saz-spacer\" },\n row: { tag: \"saz-row\" },\n column: { tag: \"saz-column\" },\n grid: { tag: \"saz-grid\" },\n stack: { tag: \"saz-stack\" },\n details: { tag: \"saz-details\" },\n controls: { tag: \"saz-controls\" },\n section: { tag: \"saz-section\" },\n div: { tag: \"div\" },\n span: { tag: \"span\" },\n option: { tag: \"option\" },\n tab: { tag: \"tab\" },\n panel: { tag: \"panel\" },\n modal: { tag: \"saz-modal\" },\n select: { tag: \"saz-select\" },\n tabs: { tag: \"saz-tabs\" },\n slider: { tag: \"saz-slider\" },\n radio: { tag: \"saz-radio\" },\n switch: { tag: \"saz-switch\" },\n toast: { tag: \"saz-toast\" },\n avatar: { tag: \"saz-avatar\" },\n chip: { tag: \"saz-chip\" },\n spinner: { tag: \"saz-spinner\" },\n progress: { tag: \"saz-progress\" },\n accordion: { tag: \"saz-accordion\" },\n};\n\nexport function getTag(name: string): string {\n const entry = SAZAMI_REGISTRY[name];\n if (!entry) {\n unknownComponentError(name);\n return `saz-${name}`;\n }\n return entry.tag;\n}\n\nconst ICON_COMPONENTS = new Set([\"saz-icon\", \"saz-icon-button\"]);\nconst CONTENT_SLOT_COMPONENTS = new Set([\n \"saz-heading\",\n \"saz-badge\",\n \"saz-tag\",\n \"saz-text\",\n \"saz-label\",\n]);\n\nfunction serializeValue(\n value:\n | string\n | {\n type: \"interpolated\";\n parts: Array<{ type: \"text\" | \"expr\"; value: string }>;\n },\n): string {\n if (typeof value === \"string\") return value;\n return value.parts.map((p) => p.value).join(\"\");\n}\n\nexport function transformAST(node: ASTNode): VNode | VNode[] {\n if (node.type === \"inline\") {\n const tag = getTag(node.name);\n const props = parseModifiers(node.modifiers);\n const value =\n typeof node.value === \"string\" ? node.value : serializeValue(node.value);\n if (ICON_COMPONENTS.has(tag) && node.value && !props.icon) {\n props.icon =\n typeof node.value === \"string\"\n ? node.value\n : serializeValue(node.value);\n }\n if (CONTENT_SLOT_COMPONENTS.has(tag) && node.value && !props.content) {\n props.content =\n typeof node.value === \"string\"\n ? node.value\n : serializeValue(node.value);\n }\n return {\n type: tag,\n props,\n children: CONTENT_SLOT_COMPONENTS.has(tag) ? [] : value ? [value] : [],\n };\n }\n\n if (node.type === \"element\") {\n const children: (VNode | string)[] = [];\n for (const child of node.children) {\n const result = transformAST(child);\n if (Array.isArray(result)) {\n children.push(...result);\n } else {\n children.push(result);\n }\n }\n return {\n type: getTag(node.name),\n props: parseModifiers(node.modifiers),\n children,\n };\n }\n\n if (node.type === \"list\") {\n const items: VNode[] = [];\n for (const item of node.items) {\n const result = transformAST(item);\n if (Array.isArray(result)) {\n items.push(...result);\n } else {\n items.push(result);\n }\n }\n return items;\n }\n\n throw new Error(`Unknown node type: ${(node as any).type}`);\n}\n","import { VNode } from \"./transformer\";\n\nexport function render(vnode: VNode | string, parent: HTMLElement): void {\n if (typeof vnode === \"string\") {\n parent.appendChild(document.createTextNode(vnode));\n return;\n }\n\n const element = document.createElement(vnode.type);\n\n Object.entries(vnode.props).forEach(([key, value]) => {\n if (typeof value === \"boolean\" && value) {\n element.setAttribute(key, \"\");\n } else if (value !== undefined && value !== null && value !== false) {\n element.setAttribute(key, String(value));\n }\n });\n\n vnode.children.forEach((child) => {\n if (Array.isArray(child)) {\n (child as (VNode | string)[]).forEach((item) => render(item, element));\n } else {\n render(child, element);\n }\n });\n\n parent.appendChild(element);\n}\n","export function applyCurvomorphism(\n element: HTMLElement,\n centerX: number,\n centerY: number,\n radiusValue: string = \"12px\",\n groupLeft: number = centerX,\n groupRight: number = centerX,\n groupTop: number = centerY,\n groupBottom: number = centerY,\n): void {\n const rect = element.getBoundingClientRect();\n\n const elCenterX = rect.left + rect.width / 2;\n const elCenterY = rect.top + rect.height / 2;\n\n const r = radiusValue;\n const s = \"0px\";\n\n // 2% of the group's half-span so it scales with layout density\n const tx = Math.max(1, (Math.abs(groupRight - groupLeft) / 2) * 0.02);\n const ty = Math.max(1, (Math.abs(groupBottom - groupTop) / 2) * 0.02);\n\n const leftIn = elCenterX > centerX + tx;\n const rightIn = elCenterX < centerX - tx;\n const topIn = elCenterY > centerY + ty;\n const bottomIn = elCenterY < centerY - ty;\n\n // When an element lands exactly on a center axis (within the dead zone),\n // treat both sides of that axis as inward so edge/center cards still get\n // their perpendicular corners rounded correctly.\n const xBoth = !leftIn && !rightIn;\n const yBoth = !topIn && !bottomIn;\n\n element.style.borderTopLeftRadius =\n (topIn || yBoth) && (leftIn || xBoth) ? r : s;\n element.style.borderTopRightRadius =\n (topIn || yBoth) && (rightIn || xBoth) ? r : s;\n element.style.borderBottomLeftRadius =\n (bottomIn || yBoth) && (leftIn || xBoth) ? r : s;\n element.style.borderBottomRightRadius =\n (bottomIn || yBoth) && (rightIn || xBoth) ? r : s;\n}\n\nfunction findCenter(el: HTMLElement): { x: number; y: number } {\n // First check for an explicit center-point ancestor (set by section).\n let node: HTMLElement | null = el.parentElement;\n while (node) {\n if (node.dataset.centerX && node.dataset.centerY) {\n return {\n x: parseFloat(node.dataset.centerX),\n y: parseFloat(node.dataset.centerY),\n };\n }\n node = node.parentElement;\n }\n\n // Fall back to the geometric center of the nearest ancestor that has real dimensions\n let ancestor: HTMLElement | null = el.parentElement;\n while (ancestor) {\n const rect = ancestor.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n }\n ancestor = ancestor.parentElement;\n }\n\n return {\n x: typeof window !== \"undefined\" ? window.innerWidth / 2 : 0,\n y: typeof window !== \"undefined\" ? window.innerHeight / 2 : 0,\n };\n}\n\nexport function enableCurvomorphism(\n element: HTMLElement,\n options: {\n radius?: string;\n centerX?: number;\n centerY?: number;\n groupLeft?: number;\n groupRight?: number;\n groupTop?: number;\n groupBottom?: number;\n } = {},\n): () => void {\n const radiusType = options.radius || \"medium\";\n\n let radiusValue = \"12px\";\n if (typeof window !== \"undefined\" && window.getComputedStyle) {\n const v = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(`--saz-radius-${radiusType}`);\n if (v && v.trim()) radiusValue = v.trim();\n }\n\n const apply = () => {\n const cachedCenter =\n options.centerX === undefined || options.centerY === undefined\n ? findCenter(element)\n : { x: 0, y: 0 };\n const cx = options.centerX ?? cachedCenter.x;\n const cy = options.centerY ?? cachedCenter.y;\n applyCurvomorphism(\n element,\n cx,\n cy,\n radiusValue,\n options.groupLeft,\n options.groupRight,\n options.groupTop,\n options.groupBottom,\n );\n };\n\n if (typeof window !== \"undefined\") {\n // Apply synchronously\n apply();\n window.addEventListener(\"resize\", apply);\n }\n\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"resize\", apply);\n }\n };\n}\n","function nextElementId(ctx) {\n return ctx.elementIndex++;\n}\nfunction compileStateDeclarations(declarations, ctx) {\n const lines = [];\n for (const decl of declarations) {\n if (decl.type === \"state\") {\n for (const { name, value } of decl.declarations) {\n ctx.stateVars.add(name);\n lines.push(\n `const ${name} = signal(path(\"component\", id, \"${name}\"), ${value});`\n );\n }\n }\n if (decl.type === \"derived\") {\n for (const { name, expr } of decl.declarations) {\n ctx.derivedVars.add(name);\n const transformedExpr = addGetCallsToStateVars(expr, ctx);\n lines.push(\n `const ${name} = derived(path(\"component\", id, \"${name}\"), () => ${transformedExpr});`\n );\n }\n }\n }\n return lines.join(\"\\n\");\n}\nfunction compileEffectDeclarations(declarations, ctx) {\n const lines = [];\n for (const decl of declarations) {\n if (decl.type === \"effect\") {\n const bodyWithGets = addGetCallsToStateVars(decl.body, ctx);\n lines.push(`effect(() => {\n ${bodyWithGets}\n});`);\n }\n }\n return lines.join(\"\\n\");\n}\nfunction addGetCallsToStateVars(code, ctx) {\n let result = code;\n for (const varName of [...ctx.stateVars, ...ctx.derivedVars]) {\n if (!/^[A-Za-z_]\\w*$/.test(varName)) continue;\n const escapedVarName = escapeRegExp(varName);\n const regex = new RegExp(\n `(?<![A-Za-z0-9_$.])${escapedVarName}(?![A-Za-z0-9_$])(?!\\\\.get|\\\\.set|\\\\s*=(?!=))`,\n \"g\"\n );\n result = result.replace(regex, `${varName}.get()`);\n }\n return result;\n}\nfunction compileEventHandler(modifier, ctx, elementVar) {\n const { event, handler } = modifier;\n const compiledHandler = compileHandlerBody(handler, ctx);\n const el = elementVar || \"element\";\n return `bindEvent(${el}, \"${event}\", (e) => {\n ${compiledHandler}\n});`;\n}\nfunction compileHandlerBody(code, ctx) {\n let result = code;\n for (const varName of ctx.stateVars) {\n if (!/^[A-Za-z_]\\w*$/.test(varName)) continue;\n const escapedVarName = escapeRegExp(varName);\n result = result.replace(\n new RegExp(`(?<![A-Za-z0-9_$])${escapedVarName}(?![A-Za-z0-9_$])\\\\+\\\\+`, \"g\"),\n `${varName}.set(${varName}.get() + 1)`\n );\n result = result.replace(\n new RegExp(`(?<![A-Za-z0-9_$])${escapedVarName}(?![A-Za-z0-9_$])--`, \"g\"),\n `${varName}.set(${varName}.get() - 1)`\n );\n result = result.replace(\n new RegExp(`(?<![A-Za-z0-9_$])${escapedVarName}(?![A-Za-z0-9_$])\\\\s*\\\\+=\\\\s*([^;]+)`, \"g\"),\n (match, expr) => {\n const cleanExpr = expr.trim();\n const exprWithGet = addGetCallsToStateVars(cleanExpr, ctx);\n return `${varName}.set(${varName}.get() + ${exprWithGet})`;\n }\n );\n result = result.replace(\n new RegExp(`(?<![A-Za-z0-9_$])${escapedVarName}(?![A-Za-z0-9_$])\\\\s*-=\\\\s*([^;]+)`, \"g\"),\n (match, expr) => {\n const cleanExpr = expr.trim();\n const exprWithGet = addGetCallsToStateVars(cleanExpr, ctx);\n return `${varName}.set(${varName}.get() - ${exprWithGet})`;\n }\n );\n result = result.replace(\n new RegExp(`(?<![A-Za-z0-9_$])${escapedVarName}(?![A-Za-z0-9_$])\\\\s*=(?!\\\\s*=(?!=))\\\\s*([^;]+)`, \"g\"),\n (match, expr) => {\n if (expr.includes(\".set(\")) return match;\n const cleanExpr = expr.trim();\n const exprWithGet = addGetCallsToStateVars(cleanExpr, ctx);\n return `${varName}.set(${exprWithGet})`;\n }\n );\n }\n return addGetCallsToStateVars(result, ctx);\n}\nfunction compileBindModifier(signalName, elementType, ctx, elementVar) {\n const el = elementVar || \"element\";\n if (elementType === \"checkbox\" || elementType === \"sakko-checkbox\") {\n return {\n code: `bindInputChecked(${el}, ${signalName});`,\n signalName,\n bindingType: \"two-way\"\n };\n }\n return {\n code: `bindInputValue(${el}, ${signalName});`,\n signalName,\n bindingType: \"two-way\"\n };\n}\nfunction compileClassModifier(expr, elementType, ctx, elementVar) {\n const el = elementVar || \"element\";\n const exprWithGets = addGetCallsToStateVars(expr, ctx);\n return `effect(() => {\n const classVal = ${exprWithGets};\n const el = ${el};\n const prevClasses = el[REACTIVE_CLASSES] || new Set();\n const nextClasses = new Set();\n \n if (typeof classVal === 'string') {\n classVal.split(/\\\\s+/).filter(Boolean).forEach(c => nextClasses.add(c));\n } else if (typeof classVal === 'object' && classVal !== null) {\n if (Array.isArray(classVal)) {\n classVal.filter(Boolean).forEach(c => nextClasses.add(c));\n } else {\n Object.entries(classVal).forEach(([c, active]) => {\n if (active) nextClasses.add(c);\n });\n }\n }\n \n prevClasses.forEach(c => {\n if (!nextClasses.has(c)) el.classList.remove(c);\n });\n nextClasses.forEach(c => {\n if (!prevClasses.has(c)) el.classList.add(c);\n });\n el[REACTIVE_CLASSES] = nextClasses;\n });`;\n}\nfunction escapeTemplateLiteral(str) {\n return str.replace(/\\\\/g, () => \"\\\\\\\\\").replace(/`/g, () => \"\\\\`\").replace(/\\$\\{/g, () => \"\\\\${\");\n}\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction compileInterpolation(parts, ctx, elementVar) {\n const reactiveVars = [...ctx.stateVars, ...ctx.derivedVars];\n const hasReactiveExpr = parts.some(\n (part) => part.type === \"expr\" && reactiveVars.some((v) => {\n const regex = new RegExp(`\\\\b${escapeRegExp(v)}\\\\b`);\n return regex.test(part.value);\n })\n );\n if (!hasReactiveExpr) {\n const str = parts.map((p) => p.type === \"text\" ? escapeTemplateLiteral(p.value) : `\\${${p.value}}`).join(\"\");\n return { static: true, code: `\\`${str}\\`` };\n }\n const templateParts = parts.map((p) => {\n if (p.type === \"text\") return escapeTemplateLiteral(p.value);\n let expr = p.value;\n for (const varName of [...ctx.stateVars, ...ctx.derivedVars]) {\n if (!/^[A-Za-z_]\\w*$/.test(varName)) continue;\n const escapedVarName = escapeRegExp(varName);\n expr = expr.replace(\n new RegExp(`(?<![A-Za-z0-9_$.])${escapedVarName}(?![A-Za-z0-9_$])`, \"g\"),\n `${varName}.get()`\n );\n }\n return `\\${${expr}}`;\n }).join(\"\");\n return {\n static: false,\n code: `effect(() => {\n ${elementVar}.textContent = \\`${templateParts}\\`;\n });`\n };\n}\nfunction toPascalCase(str) {\n return str.split(/[-_]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(\"\");\n}\nfunction formatCode(code) {\n const lines = code.split(\"\\n\");\n let result = [];\n let baseIndent = 0;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n if (!trimmed) {\n result.push(\"\");\n continue;\n }\n if ((trimmed === \"}\" || trimmed.startsWith(\"});\") || trimmed.startsWith(\"])\") || trimmed.startsWith(\"})\")) && baseIndent > 0) {\n const prevTrimmed = i > 0 ? lines[i - 1].trim() : \"\";\n if (!prevTrimmed.endsWith(\"{\") && !prevTrimmed.includes(\") {\")) {\n baseIndent--;\n }\n }\n result.push(\" \".repeat(baseIndent) + trimmed);\n if (trimmed.endsWith(\"{\") || trimmed.includes(\") {\") || trimmed.includes(\"=> {\")) {\n baseIndent++;\n }\n }\n return result.join(\"\\n\");\n}\nfunction hashString(str) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash);\n}\nfunction generateSairinImports(mode, globalName, modulePath) {\n switch (mode) {\n case \"global\":\n return `const { signal, effect, derived, path } = ${globalName};\nconst { bind, bindEvent, bindInputValue, bindInputChecked } = ${globalName};`;\n case \"esm\":\n return `import { signal, effect, derived, path } from '${modulePath}';\nimport { bind, bindEvent, bindInputValue, bindInputChecked } from '${modulePath}';`;\n case \"cjs\":\n return `const { signal, effect, derived, path } = require('${modulePath}');\nconst { bind, bindEvent, bindInputValue, bindInputChecked } = require('${modulePath}');`;\n }\n}\nfunction compileComponent(root, options) {\n const componentId = options?.id ? `comp_${options.id}_${hashString(root.name)}` : `comp_${hashString(root.name)}`;\n const componentName = toPascalCase(root.name);\n const importMode = options?.sairinImport ?? \"global\";\n const globalName = options?.sairinGlobal ?? \"sairin\";\n const modulePath = options?.sairinModule ?? \"sairin\";\n const ctx = {\n stateVars: /* @__PURE__ */ new Set(),\n derivedVars: /* @__PURE__ */ new Set(),\n elementIndex: 0\n };\n const imports = generateSairinImports(importMode, globalName, modulePath);\n const stateCode = compileStateDeclarations(root.declarations, ctx);\n const effectCode = compileEffectDeclarations(root.declarations, ctx);\n const renderCode = compileChildren(root.children, ctx);\n const signalPopulations = [...ctx.stateVars, ...ctx.derivedVars].map((v) => ` signals[\"${v}\"] = ${v};`).join(\"\\n\");\n const componentFn = `export function ${componentName}(id = ${JSON.stringify(componentId)}) {\n const signals = {};\n instanceSignals.set(id, signals);\n\n${stateCode}\n\n${effectCode}\n\n${signalPopulations}\n\n const root = document.createElement('div');\n root.className = ${JSON.stringify(root.name)};\n\n${renderCode}\n\n return root;\n}`;\n const getSignalFn = `export function getSignal(id, signalName) {\n const signals = instanceSignals.get(id);\n return signals ? (signals[signalName] || null) : null;\n}`;\n const disposeFn = `export function dispose(id) {\n instanceSignals.delete(id);\n}`;\n return formatCode([imports, \"const instanceSignals = new Map();\\nconst REACTIVE_CLASSES = Symbol('sakko.reactiveClasses');\", \"\", componentFn, \"\", getSignalFn, \"\", disposeFn].join(\"\\n\\n\"));\n}\nfunction compileChildren(children, ctx, parentVar = \"root\") {\n const lines = [];\n for (const child of children) {\n if (child.type === \"inline\") {\n lines.push(compileInlineNode(child, ctx, parentVar));\n } else if (child.type === \"element\") {\n lines.push(compileElementNode(child, ctx, parentVar));\n } else if (child.type === \"list\") {\n for (const item of child.items) {\n if (item.type === \"inline\") {\n lines.push(compileInlineNode(item, ctx, parentVar));\n } else if (item.type === \"element\") {\n lines.push(compileElementNode(item, ctx, parentVar));\n }\n }\n }\n }\n return lines.join(\"\\n\\n\");\n}\nfunction compileInlineNode(node, ctx, parentVar) {\n const idx = nextElementId(ctx);\n const elementVar = `${node.name}${idx}`;\n const lines = [];\n lines.push(`// ${node.name}`);\n lines.push(\n `const ${elementVar} = document.createElement('sakko-${node.name}');`\n );\n for (const mod of node.modifiers) {\n if (mod.type === \"flag\") {\n lines.push(`${elementVar}.setAttribute(${JSON.stringify(mod.value)}, '');`);\n } else if (mod.type === \"pair\") {\n lines.push(`${elementVar}.setAttribute(${JSON.stringify(mod.key)}, ${JSON.stringify(mod.value)});`);\n } else if (mod.type === \"event\") {\n const handlerCode = compileEventHandler(mod, ctx, elementVar);\n lines.push(handlerCode);\n } else if (mod.type === \"atcode\" && mod.name === \"bind\") {\n const bindResult = compileBindModifier(\n mod.body,\n node.name,\n ctx,\n elementVar\n );\n lines.push(bindResult.code);\n } else if (mod.type === \"atcode\" && mod.name === \"class\") {\n const classCode = compileClassModifier(\n mod.body,\n node.name,\n ctx,\n elementVar\n );\n lines.push(classCode);\n }\n }\n if (typeof node.value === \"string\") {\n lines.push(`${elementVar}.textContent = ${JSON.stringify(node.value)};`);\n } else if (node.value && typeof node.value === \"object\" && \"parts\" in node.value) {\n const { static: isStatic, code } = compileInterpolation(\n node.value.parts,\n ctx,\n elementVar\n );\n if (isStatic) {\n lines.push(`${elementVar}.textContent = ${code};`);\n } else {\n lines.push(code);\n }\n }\n lines.push(`${parentVar}.appendChild(${elementVar});`);\n return lines.join(\"\\n\");\n}\nfunction compileElementNode(node, ctx, parentVar) {\n const idx = nextElementId(ctx);\n const elementVar = `${node.name}${idx}`;\n const lines = [];\n lines.push(`// ${node.name} container`);\n lines.push(\n `const ${elementVar} = document.createElement('sakko-${node.name}');`\n );\n for (const mod of node.modifiers) {\n if (mod.type === \"flag\") {\n lines.push(`${elementVar}.setAttribute(${JSON.stringify(mod.value)}, '');`);\n } else if (mod.type === \"pair\") {\n lines.push(`${elementVar}.setAttribute(${JSON.stringify(mod.key)}, ${JSON.stringify(mod.value)});`);\n } else if (mod.type === \"event\") {\n const handlerCode = compileEventHandler(mod, ctx, elementVar);\n lines.push(handlerCode);\n } else if (mod.type === \"atcode\" && mod.name === \"bind\") {\n const bindResult = compileBindModifier(\n mod.body,\n node.name,\n ctx,\n elementVar\n );\n lines.push(bindResult.code);\n } else if (mod.type === \"atcode\" && mod.name === \"class\") {\n const classCode = compileClassModifier(\n mod.body,\n node.name,\n ctx,\n elementVar\n );\n lines.push(classCode);\n }\n }\n if (node.children.length > 0) {\n const childCode = compileChildren(node.children, ctx, elementVar);\n lines.push(childCode);\n }\n lines.push(`${parentVar}.appendChild(${elementVar});`);\n return lines.join(\"\\n\");\n}\nlet logger = null;\nfunction getLogger(scope) {\n if (!logger) {\n try {\n const satori = require(\"@nisoku/satori\");\n const s = satori.createSatori({ logLevel: \"error\", enableConsole: true });\n logger = s.createLogger(scope);\n } catch {\n logger = {\n info: (msg, opts) => console.log(`[${scope}] ${msg}`, opts),\n warn: (msg, opts) => console.warn(`[${scope}] ${msg}`, opts),\n error: (msg, opts) => console.error(`[${scope}] ${msg}`, opts)\n };\n }\n }\n return logger;\n}\nfunction tokenizerError(message, options) {\n const log = getLogger(\"sakko\");\n log.error(message, {\n state: {\n position: options.position,\n line: options.line,\n column: options.column\n },\n suggest: options.suggestion,\n tags: [\"tokenizer\", \"error\"]\n });\n}\nfunction parserError(message, options) {\n const log = getLogger(\"sakko\");\n log.error(message, {\n state: { line: options.line, column: options.column },\n suggest: options.suggestion,\n cause: options.cause,\n tags: [\"parser\", \"error\"]\n });\n}\nfunction handleEscapeSequence(esc) {\n switch (esc) {\n case \"n\":\n return \"\\n\";\n case \"t\":\n return \"\t\";\n case \"r\":\n return \"\\r\";\n case '\"':\n return '\"';\n case \"'\":\n return \"'\";\n case \"`\":\n return \"`\";\n case \"\\\\\":\n return \"\\\\\";\n case \"$\":\n return \"$\";\n default:\n return \"\\\\\" + esc;\n }\n}\nfunction tokenize(input) {\n const tokens = [];\n let i = 0;\n let line = 1;\n let col = 1;\n while (i < input.length) {\n const ch = input[i];\n if (ch === \"\\n\") {\n i++;\n line++;\n col = 1;\n continue;\n }\n if (ch === \"\\r\") {\n i++;\n if (input[i] === \"\\n\") i++;\n line++;\n col = 1;\n continue;\n }\n if (ch === \" \" || ch === \"\t\") {\n i++;\n col++;\n continue;\n }\n if (ch === \"/\" && i + 1 < input.length && input[i + 1] === \"/\") {\n const commentContent = input.slice(i + 2);\n const nextNewline = commentContent.indexOf(\"\\n\");\n const nextLT = commentContent.indexOf(\"<\");\n const hasNewlineBeforeLT = nextNewline !== -1 && (nextLT === -1 || nextNewline < nextLT);\n if (hasNewlineBeforeLT || nextLT === -1) {\n while (i < input.length && input[i] !== \"\\n\" && input[i] !== \"\\r\") {\n i++;\n }\n continue;\n }\n }\n const SYMBOLS = {\n \"<\": \"LT\",\n \">\": \"GT\",\n \"{\": \"LBRACE\",\n \"}\": \"RBRACE\",\n \"(\": \"LPAREN\",\n \")\": \"RPAREN\",\n \"[\": \"LBRACKET\",\n \"]\": \"RBRACKET\",\n \":\": \"COLON\",\n \";\": \"SEMI\",\n \",\": \"COMMA\",\n \"@\": \"AT\",\n \"=\": \"EQUALS\",\n \".\": \"DOT\",\n \"+\": \"PLUS\",\n \"-\": \"MINUS\",\n \"*\": \"STAR\"\n };\n if (SYMBOLS[ch]) {\n tokens.push({ type: SYMBOLS[ch], value: ch, line, col });\n i++;\n col++;\n continue;\n }\n if (ch === '\"') {\n const startCol = col;\n i++;\n col++;\n let scanEnd = i;\n while (scanEnd < input.length && input[scanEnd] !== '\"') {\n if (input[scanEnd] === \"\\\\\" && scanEnd + 1 < input.length) {\n scanEnd += 2;\n } else {\n scanEnd++;\n }\n }\n const literalContent = input.slice(i, scanEnd);\n const hasInterpolation = /\\{[\\s\\S]*?\\}/.test(literalContent);\n if (hasInterpolation) {\n const result = tokenizeStringWithInterpolation(\n input,\n i,\n line,\n col,\n startCol\n );\n tokens.push(...result.tokens);\n i = result.endIndex + 1;\n line = result.endLine;\n col = result.endCol + 1;\n continue;\n }\n let str = \"\";\n while (i < input.length && input[i] !== '\"') {\n if (input[i] === \"\\\\\" && i + 1 < input.length) {\n i++;\n col++;\n str += handleEscapeSequence(input[i]);\n i++;\n col++;\n continue;\n }\n if (input[i] === \"\\n\") {\n line++;\n col = 1;\n } else {\n col++;\n }\n str += input[i];\n i++;\n }\n if (i >= input.length) {\n tokenizerError(\"Unterminated string\", {\n position: i,\n line,\n column: startCol,\n suggestion: 'Add a closing quote \"'\n });\n throw new Error(`Unterminated string at line ${line}, col ${startCol}`);\n }\n i++;\n col++;\n tokens.push({ type: \"STRING\", value: str, line, col: startCol });\n continue;\n }\n if (/[a-zA-Z0-9_\\-]/.test(ch)) {\n const startCol = col;\n let ident = \"\";\n while (i < input.length && /[a-zA-Z0-9_\\-]/.test(input[i])) {\n ident += input[i];\n i++;\n col++;\n }\n tokens.push({ type: \"IDENT\", value: ident, line, col: startCol });\n continue;\n }\n tokenizerError(`Unexpected character: ${ch}`, {\n position: i,\n line,\n column: col,\n suggestion: `Remove or escape this character`\n });\n throw new Error(`Unexpected character: ${ch} at line ${line}, col ${col}`);\n }\n return tokens;\n}\nfunction tokenizeStringWithInterpolation(input, startIndex, line, col, originalStartCol) {\n const tokens = [];\n let i = startIndex;\n let currentLine = line;\n let currentCol = col;\n let textBuffer = \"\";\n let textStartCol = currentCol;\n while (i < input.length && input[i] !== '\"') {\n if (input[i] === \"{\") {\n if (textBuffer) {\n tokens.push({\n type: \"STRING\",\n value: textBuffer,\n line: currentLine,\n col: textStartCol\n });\n textBuffer = \"\";\n }\n tokens.push({\n type: \"INTERP_START\",\n value: \"{\",\n line: currentLine,\n col: currentCol\n });\n i++;\n currentCol++;\n let expr = \"\";\n let braceDepth = 1;\n const exprStartCol = currentCol;\n while (i < input.length && braceDepth > 0) {\n if (input[i] === \"{\") braceDepth++;\n if (input[i] === \"}\") braceDepth--;\n if (braceDepth > 0) {\n expr += input[i];\n }\n if (input[i] === \"\\n\") {\n currentLine++;\n currentCol = 1;\n } else {\n currentCol++;\n }\n i++;\n }\n if (braceDepth > 0) {\n tokenizerError(\"Unterminated interpolation expression\", {\n position: i,\n line: currentLine,\n column: exprStartCol,\n suggestion: \"Add a closing brace '}'\"\n });\n throw new Error(`Unterminated interpolation expression at line ${currentLine}, col ${exprStartCol}`);\n }\n tokens.push({\n type: \"EXPR\",\n value: expr.trim(),\n line: currentLine,\n col: exprStartCol\n });\n tokens.push({\n type: \"INTERP_END\",\n value: \"}\",\n line: currentLine,\n col: currentCol - 1\n });\n textStartCol = currentCol;\n continue;\n }\n if (input[i] === \"\\\\\" && i + 1 < input.length) {\n i++;\n currentCol++;\n textBuffer += handleEscapeSequence(input[i]);\n currentCol++;\n i++;\n continue;\n }\n textBuffer += input[i];\n if (input[i] === \"\\n\") {\n currentLine++;\n currentCol = 1;\n } else {\n currentCol++;\n }\n i++;\n }\n if (i >= input.length) {\n tokenizerError(\"Unterminated string\", {\n position: i,\n line: currentLine,\n column: originalStartCol,\n suggestion: 'Add a closing quote \"'\n });\n throw new Error(`Unterminated string at line ${currentLine}, col ${originalStartCol}`);\n }\n if (textBuffer.length > 0 || tokens.length === 0) {\n tokens.push({\n type: \"STRING\",\n value: textBuffer,\n line: currentLine,\n col: textStartCol\n });\n }\n return {\n tokens,\n endIndex: i,\n endLine: currentLine,\n endCol: currentCol\n };\n}\nfunction parseStateDeclaration(parser, atToken) {\n const hasBraces = parser.check(\"LBRACE\");\n if (hasBraces) parser.consume();\n const declarations = [];\n while (true) {\n if (!parser.peek()) break;\n if (hasBraces && parser.check(\"RBRACE\")) {\n parser.consume();\n break;\n }\n if (parser.check(\"IDENT\") && parser.peek()?.value === \"const\") {\n parser.consume();\n const nextToken = parser.peek();\n if (!nextToken || nextToken.type !== \"IDENT\") {\n throw parser.errorAt(\"Expected identifier after 'const'\", nextToken);\n }\n }\n const varToken = parser.peek();\n const isVarDecl = varToken?.type === \"IDENT\" && parser.peekAheadIs(\"EQUALS\");\n if (!isVarDecl) {\n if (declarations.length === 0) {\n throw parser.errorAt(\"Expected variable declaration\", varToken);\n }\n break;\n }\n parser.consume();\n const varName = varToken.value;\n parser.expect(\"EQUALS\");\n const valueExpr = parser.parseExpression();\n declarations.push({ name: varName, value: valueExpr });\n if (parser.check(\"SEMI\") || parser.check(\"COMMA\")) {\n parser.consume();\n }\n }\n return {\n type: \"state\",\n declarations,\n line: atToken.line,\n col: atToken.col\n };\n}\nfunction parseEffectDeclaration(parser, atToken) {\n const hasBraces = parser.check(\"LBRACE\");\n if (!hasBraces) {\n throw parser.errorAt(\"@effect requires a braced block\", atToken);\n }\n parser.consume();\n const body = parser.parseBlockBody();\n parser.expect(\"RBRACE\");\n return {\n type: \"effect\",\n body,\n line: atToken.line,\n col: atToken.col\n };\n}\nfunction parseDerivedDeclaration(parser, atToken) {\n const hasBraces = parser.check(\"LBRACE\");\n if (hasBraces) parser.consume();\n const declarations = [];\n while (true) {\n if (!parser.peek()) break;\n if (hasBraces && parser.check(\"RBRACE\")) {\n parser.consume();\n break;\n }\n if (parser.check(\"IDENT\") && parser.peek()?.value === \"const\") {\n parser.consume();\n }\n const varToken = parser.peek();\n if (!varToken || varToken.type !== \"IDENT\") {\n break;\n }\n parser.consume();\n const varName = varToken.value;\n if (parser.check(\"EQUALS\")) {\n parser.consume();\n const expr = parser.parseExpression();\n declarations.push({ name: varName, expr });\n if (parser.check(\"SEMI\") || parser.check(\"COMMA\")) {\n parser.consume();\n }\n } else {\n break;\n }\n }\n return {\n type: \"derived\",\n declarations,\n line: atToken.line,\n col: atToken.col\n };\n}\nfunction parseAtcodeDeclaration(parser, atToken) {\n const nameToken = parser.peek();\n if (!nameToken || nameToken.type !== \"IDENT\") {\n throw parser.errorAt(\"Expected identifier after @\", atToken);\n }\n const name = parser.consume().value;\n if (name === \"state\") {\n return parseStateDeclaration(parser, atToken);\n }\n if (name === \"effect\") {\n return parseEffectDeclaration(parser, atToken);\n }\n if (name === \"derived\") {\n return parseDerivedDeclaration(parser, atToken);\n }\n throw new Error(\n `Unknown atcode '@${name}' at line ${atToken.line}, col ${atToken.col}`\n );\n}\nfunction parseEventHandler(parser, eventName, eventToken) {\n if (parser.check(\"LBRACE\")) {\n parser.consume();\n const handler = parser.parseBlockBody();\n parser.expect(\"RBRACE\");\n return handler;\n }\n throw parser.errorAt(\n `Event handlers must use block syntax: @on:${eventName} { ... }`,\n eventToken || parser.peek()\n );\n}\nconst EVENT_NAMES = /* @__PURE__ */ new Set([\n \"click\",\n \"mouseenter\",\n \"mouseleave\",\n \"keydown\",\n \"keyup\",\n \"input\",\n \"change\",\n \"submit\",\n \"focus\",\n \"blur\",\n \"dblclick\",\n \"mousedown\",\n \"mouseup\",\n \"drag\",\n \"drop\",\n \"touchstart\",\n \"touchend\"\n]);\nfunction parseInlineModifier(parser) {\n const nameToken = parser.expect(\"IDENT\");\n const name = nameToken.value;\n if (name === \"on\") {\n parser.expect(\"COLON\");\n const eventToken = parser.expect(\"IDENT\");\n const event = eventToken.value;\n const handler = parseEventHandler(parser, event, eventToken);\n return {\n type: \"event\",\n event,\n handler\n };\n }\n if (EVENT_NAMES.has(name)) {\n const event = name;\n let handler = \"\";\n if (parser.check(\"IDENT\")) {\n handler = parser.consume().value;\n } else {\n handler = parseEventHandler(parser, event, nameToken);\n }\n return {\n type: \"event\",\n event,\n handler\n };\n }\n if (name === \"class\") {\n parser.expect(\"COLON\");\n const classToken = parser.expect(\"IDENT\");\n return {\n type: \"atcode\",\n name: \"class\",\n body: classToken.value\n };\n }\n if (name === \"bind\") {\n parser.expect(\"EQUALS\");\n const signal = parser.check(\"STRING\") ? parser.consume().value : parser.expect(\"IDENT\").value;\n return {\n type: \"atcode\",\n name: \"bind\",\n body: signal\n };\n }\n throw parser.errorAt(`Unknown modifier: @${name}`, nameToken);\n}\nconst KNOWN_KEYS = /* @__PURE__ */ new Set([\n \"cols\",\n \"gap\",\n \"radius\",\n \"md:cols\",\n \"lg:cols\",\n \"placeholder\",\n \"type\",\n \"size\",\n \"variant\",\n \"layout\",\n \"src\",\n \"alt\",\n \"icon\",\n \"label\",\n \"value\",\n \"center-point\",\n \"min\",\n \"max\",\n \"step\",\n \"name\",\n \"heading\",\n \"slot\",\n \"active\",\n \"open\",\n \"message\",\n \"title\"\n]);\nclass Parser {\n constructor(tokens, source) {\n this.tokens = tokens;\n this.position = 0;\n this.source = source || \"\";\n }\n errorAt(msg, token) {\n parserError(msg, {\n line: token?.line,\n column: token?.col,\n suggestion: this._getSuggestion(msg)\n });\n if (!token || !this.source) return new Error(msg);\n const lines = this.source.split(\"\\n\");\n const lineText = lines[token.line - 1] || \"\";\n const pointer = \" \".repeat(Math.max(0, token.col - 1)) + \"^\";\n return new Error(\n `${msg} at line ${token.line}, col ${token.col}\n ${lineText}\n ${pointer}`\n );\n }\n _getSuggestion(msg) {\n if (msg.includes(\"Unexpected end of input\"))\n return \"Check for missing closing brackets\";\n if (msg.includes(\"Expected\")) return \"Add the expected token\";\n if (msg.includes(\"Unexpected token\")) return \"Remove or replace this token\";\n return void 0;\n }\n peek() {\n return this.tokens[this.position];\n }\n peekAhead(offset) {\n return this.tokens[this.position + offset];\n }\n peekAheadIs(type) {\n return this.peekAhead(1)?.type === type;\n }\n consume() {\n const token = this.tokens[this.position];\n if (!token) {\n const last = this.tokens[this.tokens.length - 1];\n throw this.errorAt(\"Unexpected end of input\", last);\n }\n this.position++;\n return token;\n }\n check(type) {\n return this.peek()?.type === type;\n }\n expect(type, errorMsg) {\n const token = this.peek();\n if (!token || token.type !== type) {\n const msg = errorMsg || `Expected ${type} but got ${token?.type || \"end of input\"}`;\n throw this.errorAt(msg, token);\n }\n return this.consume();\n }\n parseRoot() {\n this.expect(\"LT\", \"Expected '<'\");\n const nameToken = this.peek();\n if (!nameToken || nameToken.type !== \"IDENT\") {\n throw this.errorAt(\"Expected identifier after '<'\", nameToken);\n }\n const name = this.consume().value;\n const modifiers = this.check(\"LPAREN\") ? this.parseModifiers() : [];\n this.expect(\"LBRACE\", \"Expected '{'\");\n const declarations = [];\n const children = [];\n while (!this.check(\"RBRACE\")) {\n if (!this.peek()) {\n throw this.errorAt(\n \"Unexpected end of input, expected '}'\",\n this.tokens[this.tokens.length - 1]\n );\n }\n if (this.check(\"AT\")) {\n const atToken = this.consume();\n declarations.push(parseAtcodeDeclaration(this, atToken));\n } else {\n children.push(this.parseNode());\n }\n if (this.check(\"SEMI\") || this.check(\"COMMA\")) {\n this.consume();\n }\n }\n this.expect(\"RBRACE\", \"Expected '}'\");\n this.expect(\"GT\", \"Expected '>'\");\n return { type: \"root\", name, modifiers, declarations, children };\n }\n _shouldInsertSpace(current, next) {\n if (!current) return false;\n const lastChar = current.slice(-1);\n const nextChar = next.value[0];\n const isWordEnd = /[a-zA-Z0-9_$]/.test(lastChar);\n const isWordStart = /[a-zA-Z0-9_$]/.test(nextChar);\n return isWordEnd && isWordStart;\n }\n parseBlockBody() {\n let body = \"\";\n let braceDepth = 0;\n while (this.peek()) {\n const token = this.peek();\n if (token.type === \"RBRACE\" && braceDepth === 0) break;\n if (token.type === \"LBRACE\") braceDepth++;\n if (token.type === \"RBRACE\") braceDepth--;\n if (this._shouldInsertSpace(body, token)) {\n body += \" \";\n }\n if (token.type === \"STRING\") {\n body += JSON.stringify(token.value);\n } else {\n body += token.value;\n }\n this.consume();\n }\n return body.trim();\n }\n parseExpression() {\n let expr = \"\";\n let parenDepth = 0;\n let braceDepth = 0;\n let bracketDepth = 0;\n while (this.peek()) {\n const token = this.peek();\n if (parenDepth === 0 && braceDepth === 0 && bracketDepth === 0) {\n if (token?.type === \"SEMI\" || token?.type === \"RBRACE\" || token?.type === \"COMMA\") {\n break;\n }\n if (token?.type === \"IDENT\" && this.peekAheadIs(\"EQUALS\")) {\n break;\n }\n }\n if (token?.type === \"LPAREN\") parenDepth++;\n if (token?.type === \"RPAREN\") parenDepth--;\n if (token?.type === \"LBRACE\") braceDepth++;\n if (token?.type === \"RBRACE\") braceDepth--;\n if (token?.type === \"LBRACKET\") bracketDepth++;\n if (token?.type === \"RBRACKET\") bracketDepth--;\n if (token) {\n if (this._shouldInsertSpace(expr, token)) {\n expr += \" \";\n }\n if (token.type === \"STRING\") {\n expr += JSON.stringify(token.value);\n } else {\n expr += token.value;\n }\n this.consume();\n }\n }\n return expr.trim();\n }\n parseNode() {\n const token = this.peek();\n if (!token || token.type !== \"IDENT\") {\n throw this.errorAt(\n `Expected identifier but got ${token?.type || \"end of input\"}`,\n token\n );\n }\n const name = this.consume().value;\n const modifiers = [];\n while (this.check(\"LPAREN\") || this.check(\"AT\")) {\n if (this.check(\"LPAREN\")) {\n modifiers.push(...this.parseModifiers());\n }\n if (this.check(\"AT\")) {\n this.consume();\n modifiers.push(parseInlineModifier(this));\n }\n }\n if (this.check(\"COLON\")) {\n this.consume();\n if (this.check(\"LBRACKET\")) {\n const list = this.parseList();\n return { type: \"element\", name, modifiers, children: [list] };\n }\n const valToken = this.peek();\n if (!valToken) {\n throw this.errorAt(\n `Expected value after ':' but got end of input`,\n this.tokens[this.tokens.length - 1]\n );\n }\n if (valToken.type === \"STRING\" || valToken.type === \"INTERP_START\") {\n const value = this.parseInterpolatedValue();\n return { type: \"inline\", name, modifiers, value };\n }\n if (valToken.type === \"IDENT\") {\n const value = this.consume().value;\n return { type: \"inline\", name, modifiers, value };\n }\n throw this.errorAt(\n `Expected value after ':' but got ${valToken.type || \"end of input\"}`,\n valToken\n );\n }\n if (this.check(\"LBRACKET\")) {\n const list = this.parseList();\n return { type: \"element\", name, modifiers, children: [list] };\n }\n if (this.check(\"LBRACE\")) {\n this.consume();\n const children = [];\n while (!this.check(\"RBRACE\")) {\n if (!this.peek()) {\n throw this.errorAt(\n \"Unexpected end of input, expected '}'\",\n this.tokens[this.tokens.length - 1]\n );\n }\n children.push(this.parseNode());\n if (this.check(\"SEMI\")) this.consume();\n if (this.check(\"COMMA\")) this.consume();\n }\n this.consume();\n return { type: \"element\", name, modifiers, children };\n }\n return { type: \"inline\", name, modifiers, value: \"\" };\n }\n parseModifiers() {\n this.consume();\n const modifiers = [];\n while (!this.check(\"RPAREN\")) {\n if (!this.peek()) {\n throw this.errorAt(\n \"Unexpected end of input, expected ')'\",\n this.tokens[this.tokens.length - 1]\n );\n }\n if (this.check(\"AT\")) {\n this.consume();\n const nameToken = this.expect(\"IDENT\");\n if (nameToken.value === \"on\") {\n this.expect(\"COLON\");\n const eventToken = this.expect(\"IDENT\");\n const event = eventToken.value;\n let handler;\n if (this.check(\"LBRACE\")) {\n this.consume();\n handler = this.parseBlockBody();\n this.expect(\"RBRACE\");\n } else {\n throw this.errorAt(\n \"Event handlers must use block syntax: @on:click { ... }\",\n this.peek()\n );\n }\n modifiers.push({\n type: \"event\",\n event,\n handler\n });\n continue;\n }\n if (nameToken.value === \"bind\") {\n this.expect(\"EQUALS\");\n const signal = this.check(\"STRING\") ? this.consume().value : this.expect(\"IDENT\").value;\n modifiers.push({\n type: \"atcode\",\n name: \"bind\",\n body: signal\n });\n continue;\n }\n throw this.errorAt(\n `Atcode @${nameToken.value} not yet supported in modifiers`,\n nameToken\n );\n }\n const token = this.peek();\n if (!token || token.type !== \"IDENT\") {\n throw this.errorAt(\n `Expected identifier in modifiers but got ${token?.type || \"end of input\"}`,\n token\n );\n }\n this.consume();\n const next = this.peek();\n if (KNOWN_KEYS.has(token.value) && next && (next.type === \"IDENT\" || next.type === \"STRING\") && !this.check(\"RPAREN\")) {\n modifiers.push({\n type: \"pair\",\n key: token.value,\n value: this.consume().value\n });\n } else {\n modifiers.push({ type: \"flag\", value: token.value });\n }\n }\n this.consume();\n return modifiers;\n }\n parseList() {\n this.consume();\n const items = [];\n while (!this.check(\"RBRACKET\")) {\n if (!this.peek()) {\n throw this.errorAt(\n \"Unexpected end of input, expected ']'\",\n this.tokens[this.tokens.length - 1]\n );\n }\n items.push(this.parseNode());\n if (this.check(\"COMMA\")) {\n this.consume();\n } else if (!this.check(\"RBRACKET\")) {\n throw this.errorAt('Expected \",\" or \"]\"', this.peek());\n }\n }\n this.consume();\n return { type: \"list\", items };\n }\n parseInterpolatedValue() {\n const parts = [];\n while (this.check(\"STRING\") || this.check(\"INTERP_START\")) {\n if (this.check(\"STRING\")) {\n const text = this.consume().value;\n if (text) {\n parts.push({ type: \"text\", value: text });\n }\n }\n if (this.check(\"INTERP_START\")) {\n this.consume();\n const expr = this.expect(\"EXPR\").value;\n parts.push({ type: \"expr\", value: expr });\n this.expect(\"INTERP_END\");\n }\n }\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1 && parts[0].type === \"text\") {\n return parts[0].value;\n }\n return { type: \"interpolated\", parts };\n }\n}\nfunction parseSakko(input) {\n const trimmed = input.trim();\n if (trimmed && !trimmed.startsWith(\"<\")) {\n input = `<__sakko_wrapper__ {\n${trimmed}\n}>`;\n }\n const tokens = tokenize(input);\n if (tokens.length === 0) {\n parserError(\"Empty input\", { suggestion: \"Add some content to parse\" });\n throw new Error(\"Empty input\");\n }\n const parser = new Parser(tokens, input);\n return parser.parseRoot();\n}\nconst componentRegistry = /* @__PURE__ */ new Map();\nfunction isBrowser() {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\nfunction hasExportDeclaration(evalCode, name) {\n const exportDeclaration = new RegExp(`export\\\\s+(?:function|const|let|class)\\\\s+${name}\\\\b`);\n const exportList = new RegExp(`export\\\\s*{\\\\s*${name}\\\\b`);\n return exportDeclaration.test(evalCode) || exportList.test(evalCode);\n}\nfunction stripExports(code) {\n return code.replace(/export\\s+function\\s+/g, \"function \").replace(/export\\s+const\\s+/g, \"const \").replace(/export\\s+let\\s+/g, \"let \").replace(/export\\s+var\\s+/g, \"var \").replace(/export\\s+class\\s+/g, \"class \").replace(/export\\s+default\\s+/g, \"\");\n}\nasync function createFactoryFromCode(evalCode, componentName, modulePath) {\n if (isBrowser()) {\n let moduleCode = evalCode;\n if (!hasExportDeclaration(evalCode, componentName) || !hasExportDeclaration(evalCode, \"dispose\")) {\n moduleCode = `${evalCode}\nexport { ${componentName}, dispose };\n`;\n }\n const blob = new Blob([moduleCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n try {\n const mod = await import(url);\n return {\n factory: mod[componentName],\n dispose: mod.dispose\n };\n } finally {\n URL.revokeObjectURL(url);\n }\n } else {\n const strippedCode = stripExports(evalCode);\n const safeRequire = typeof require !== \"undefined\" ? require : (pkg) => {\n throw new Error(`require is not available. Module '${pkg}' could not be resolved.`);\n };\n const result = new Function(\"require\", `\n const module = { exports: {} };\n const exports = module.exports;\n ${strippedCode}\n module.exports.${componentName} = ${componentName};\n module.exports.dispose = dispose;\n return { factory: module.exports.${componentName}, dispose: module.exports.dispose };\n `)(safeRequire);\n return result;\n }\n}\nasync function registerSakkoComponent(ast, options = {}) {\n const importMode = options.sairinImport ?? \"global\";\n const globalName = options.sairinGlobal ?? \"sairin\";\n const modulePath = options.sairinModule ?? \"sairin\";\n const normalizedName = ast.name.toLowerCase();\n const componentCode = compileComponent(ast, { sairinImport: importMode, sairinGlobal: globalName, sairinModule: modulePath });\n const componentName = toPascalCase(ast.name);\n if (importMode === \"esm\") {\n throw new Error(`registerSakkoComponent: ESM mode requires a bundler. Use 'global' mode or call compileComponent separately.`);\n }\n if (importMode === \"cjs\" && isBrowser()) {\n throw new Error(`registerSakkoComponent: CJS mode is not supported in browsers. Use 'global' mode or call compileComponent separately for bundler integration.`);\n }\n let evalCode = componentCode;\n if (importMode === \"cjs\") {\n evalCode = componentCode.replace(\n /import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+['\"]([^'\"]+)['\"];?/g,\n (_m, name, mod) => `const ${name} = require('${mod}');`\n ).replace(/import\\s+\\{\\s*([\\s\\S]*?)\\s*\\}\\s*from\\s+['\"]([^'\"]+)['\"];?/g, (_m, specifiers, mod) => {\n const names = specifiers.split(\",\").map((s) => {\n const trimmed = s.trim();\n const match = trimmed.match(/^(\\w+)(?:\\s+as\\s+\\w+)?$/);\n return match ? match[1] : trimmed;\n }).filter(Boolean);\n return `const {${names.join(\", \")}} = require('${mod}');`;\n }).replace(/export\\s+\\{\\s*([\\s\\S]*?)\\s*\\};?/g, (_m, specifiers) => {\n const lines = specifiers.split(\",\").map((s) => {\n const trimmed = s.trim();\n const match = trimmed.match(/^(\\w+)(?:\\s+as\\s+(\\w+))?$/);\n if (match) {\n const original = match[1];\n const alias = match[2];\n return `module.exports.${alias || original} = ${original};`;\n }\n return \"\";\n }).filter(Boolean);\n return lines.join(\"\\n\");\n }).replace(/export\\s+default\\s+function\\s+(\\w+)/g, \"module.exports = function $1\").replace(/export\\s+default\\s+/g, \"module.exports = \").replace(/export\\s+function\\s+/g, \"function \").replace(/export\\s+const\\s+/g, \"const \");\n evalCode += `\nmodule.exports.${componentName} = ${componentName};\n`;\n evalCode += `module.exports.dispose = dispose;\n`;\n }\n const { factory, dispose } = await createFactoryFromCode(evalCode, componentName);\n componentRegistry.set(normalizedName, {\n name: normalizedName,\n factory,\n dispose,\n source: componentCode\n });\n if (typeof customElements !== \"undefined\") {\n const tagName = `sakko-${normalizedName}`;\n if (!customElements.get(tagName)) {\n customElements.define(\n tagName,\n class extends HTMLElement {\n constructor() {\n super();\n this._rendered = false;\n this._component = null;\n this._componentId = null;\n this._dispose = null;\n this.attachShadow({ mode: \"open\" });\n }\n connectedCallback() {\n if (this._rendered) return;\n const entry = componentRegistry.get(normalizedName);\n if (!entry) return;\n this._componentId = `${normalizedName}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n this._component = entry.factory(this._componentId);\n this._dispose = entry.dispose;\n this.shadowRoot.appendChild(this._component);\n this._rendered = true;\n }\n disconnectedCallback() {\n if (this._component) {\n if (this._dispose && this._componentId) {\n this._dispose(this._componentId);\n }\n this.shadowRoot.innerHTML = \"\";\n this._component = null;\n this._componentId = null;\n this._dispose = null;\n }\n this._rendered = false;\n }\n }\n );\n }\n }\n}\nfunction getComponent(name) {\n const entry = componentRegistry.get(name.toLowerCase());\n if (!entry) return void 0;\n return Object.freeze({ ...entry });\n}\nfunction getAllComponents() {\n const frozen = /* @__PURE__ */ new Map();\n for (const [key, entry] of componentRegistry) {\n frozen.set(key, Object.freeze({ ...entry }));\n }\n return Object.freeze(frozen);\n}\nfunction getComponentSource(name) {\n return componentRegistry.get(name.toLowerCase())?.source;\n}\nfunction compile(code) {\n try {\n const ast = parseSakko(code);\n const compiled = compileComponent(ast);\n return { code: compiled, ast };\n } catch (e) {\n return { code: `// Error: ${e}` };\n }\n}\nfunction compileAtCode(code) {\n return compile(code);\n}\nexport {\n Parser,\n compile,\n compileAtCode,\n compileComponent,\n compileEffectDeclarations,\n compileEventHandler,\n compileStateDeclarations,\n getAllComponents,\n getComponent,\n getComponentSource,\n parseSakko,\n registerSakkoComponent,\n tokenize\n};\n//# sourceMappingURL=index.mjs.map\n","// Sazami main entry point.\n\nexport { defaultTokens } from \"./config/tokens\";\nexport {\n generateCSSVariables,\n generateThemeCSS,\n getTokenValue,\n} from \"./config/generator\";\n\nexport { parseModifiers, MODIFIER_MAP } from \"./primitives/modifier-map\";\nexport { registerComponents, COMPONENT_REGISTRY } from \"./primitives/registry\";\n\nexport { transformAST } from \"./runtime/transformer\";\nexport type { VNode } from \"./runtime/transformer\";\n\nexport { render } from \"./runtime/renderer\";\n\nexport { applyCurvomorphism, enableCurvomorphism } from \"./curvomorphism/index\";\n\nexport { ICON_SVGS } from \"./icons/index\";\n\nexport { escapeHtml, unescapeHtml, escapeUrl, escapeCss } from \"./escape\";\n\nimport { parseSakko } from \"@nisoku/sakko\";\nimport {\n transformAST,\n VNode,\n getTag as getTagName,\n} from \"./runtime/transformer\";\nimport { render } from \"./runtime/renderer\";\nimport { generateThemeCSS } from \"./config/generator\";\nimport { enableCurvomorphism } from \"./curvomorphism/index\";\nimport { registerComponents } from \"./primitives/registry\";\nimport { parseModifiers as pmParseModifiers } from \"./primitives/modifier-map\";\n\nlet themeInjected = false;\n\nexport function injectThemeCSS(customTokens?: Record<string, string>): void {\n if (typeof document === \"undefined\") return;\n\n const existing = document.querySelector(\"style[data-sazami-theme]\");\n const themeCSS = generateThemeCSS(customTokens);\n\n if (existing) {\n existing.textContent = themeCSS;\n } else {\n const style = document.createElement(\"style\");\n style.setAttribute(\"data-sazami-theme\", \"\");\n style.textContent = themeCSS;\n document.head.appendChild(style);\n }\n themeInjected = true;\n}\n\nexport function compileSakko(\n source: string,\n target: HTMLElement,\n options?: { tokens?: Record<string, string> },\n): void {\n if (typeof customElements !== \"undefined\") {\n registerComponents();\n }\n\n if (!themeInjected) {\n injectThemeCSS(options?.tokens);\n }\n\n // Auto-wrap source in angle brackets if not already wrapped.\n const trimmed = source.trim();\n const wrapped =\n trimmed.startsWith(\"<\") && trimmed.endsWith(\">\") ? trimmed : `<${trimmed}>`;\n\n const ast = parseSakko(wrapped);\n\n // Always render the root element as a component wrapper.\n const rootVNode: VNode = {\n type: getTagName(ast.name),\n props: ast.modifiers ? pmParseModifiers(ast.modifiers) : {},\n children: [],\n };\n for (const child of ast.children) {\n const result = transformAST(child);\n if (Array.isArray(result)) {\n rootVNode.children.push(...result);\n } else {\n rootVNode.children.push(result);\n }\n }\n render(rootVNode, target);\n\n if (typeof window !== \"undefined\") {\n // Disconnect any observer from a previous compileSakko call on this target\n // so re-renders (e.g. playground live preview) don't leave stale observers.\n const prev = (target as any).__sazamiRO as ResizeObserver | undefined;\n if (prev) prev.disconnect();\n\n // Dispose any previous curvomorphism listeners\n const prevDisposers = (target as any).__sazamiCurvoDisposers as\n | Array<() => void>\n | undefined;\n if (prevDisposers) {\n prevDisposers.forEach((d) => {\n d();\n });\n }\n const disposers: Array<() => void> = [];\n\n const ro = new ResizeObserver(() => {\n const elements = Array.from(target.querySelectorAll(\"[curved]\")).filter(\n (el): el is HTMLElement => el instanceof HTMLElement,\n );\n if (elements.length === 0) return;\n\n requestAnimationFrame(() => {\n // Compute a single shared center from the collective bounding box of\n // all curved elements\n const rects = elements.map((el) => el.getBoundingClientRect());\n const left = Math.min(...rects.map((r) => r.left));\n const right = Math.max(...rects.map((r) => r.right));\n const top = Math.min(...rects.map((r) => r.top));\n const bottom = Math.max(...rects.map((r) => r.bottom));\n const centerX = (left + right) / 2;\n const centerY = (top + bottom) / 2;\n\n disposers.forEach((d) => {\n d();\n });\n disposers.length = 0;\n\n elements.forEach((el) => {\n const dispose = enableCurvomorphism(el, {\n radius: el.getAttribute(\"radius\") || undefined,\n centerX,\n centerY,\n groupLeft: left,\n groupRight: right,\n groupTop: top,\n groupBottom: bottom,\n });\n disposers.push(dispose);\n });\n });\n });\n (target as any).__sazamiRO = ro;\n (target as any).__sazamiCurvoDisposers = disposers;\n ro.observe(target);\n }\n}\n"],"names":["logger","getLogger","component","_","handlers","index","_init","_a","STYLES","__decoratorStart","__decorateElement","__runInitializers","b","j","p","currentSrc","v","generateThemeCSS","registerComponents","getTagName","pmParseModifiers","transformAST","render","enableCurvomorphism"],"mappings":"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","x_google_ignoreList":[4,92]}
|