{"version":3,"file":"index.cjs","names":[],"sources":["../../src/theme/index.ts"],"sourcesContent":["/**\r\n * Theme system for @bquery/ui\r\n */\r\nexport { darkTheme, getDarkThemeCSS } from './dark.js';\r\nexport { defaultTheme, getDefaultThemeCSS } from './default.js';\r\n\r\nexport type ColorScheme = 'light' | 'dark' | 'auto';\r\n\r\nexport interface BqTheme {\r\n  name: string;\r\n  colorScheme: 'light' | 'dark';\r\n  tokens: Record<string, string>;\r\n}\r\n\r\nlet currentTheme: ColorScheme = 'auto';\r\nlet autoListener: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\nfunction applyAutoScheme(): void {\r\n  const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n  const root = document.documentElement;\r\n  if (prefersDark) {\r\n    root.setAttribute('data-theme', 'dark');\r\n  } else {\r\n    root.removeAttribute('data-theme');\r\n  }\r\n}\r\n\r\nfunction cleanupAutoListener(): void {\r\n  if (autoListener) {\r\n    window\r\n      .matchMedia('(prefers-color-scheme: dark)')\r\n      .removeEventListener('change', autoListener);\r\n    autoListener = null;\r\n  }\r\n}\r\n\r\n/**\r\n * Set the global color scheme. Pass 'auto' to follow the user's OS preference\r\n * (listens for changes in real time).\r\n */\r\nexport function setColorScheme(scheme: ColorScheme): void {\r\n  cleanupAutoListener();\r\n  currentTheme = scheme;\r\n  const root = document.documentElement;\r\n  if (scheme === 'dark') {\r\n    root.setAttribute('data-theme', 'dark');\r\n  } else if (scheme === 'light') {\r\n    root.removeAttribute('data-theme');\r\n  } else {\r\n    applyAutoScheme();\r\n    autoListener = () => applyAutoScheme();\r\n    window\r\n      .matchMedia('(prefers-color-scheme: dark)')\r\n      .addEventListener('change', autoListener);\r\n  }\r\n}\r\n\r\n/** Get the current color scheme setting. */\r\nexport function getColorScheme(): ColorScheme {\r\n  return currentTheme;\r\n}\r\n\r\n/**\r\n * Apply custom CSS variable overrides to the document root.\r\n */\r\nexport function applyThemeTokens(tokens: Record<string, string>): void {\r\n  const root = document.documentElement;\r\n  for (const [key, value] of Object.entries(tokens)) {\r\n    root.style.setProperty(key, value);\r\n  }\r\n}\r\n"],"mappings":";;;AAcA,IAAI,eAA4B;AAChC,IAAI,eAA0D;AAE9D,SAAS,kBAAwB;CAC/B,MAAM,cAAc,OAAO,WAAW,+BAA+B,CAAC;CACtE,MAAM,OAAO,SAAS;AACtB,KAAI,YACF,MAAK,aAAa,cAAc,OAAO;KAEvC,MAAK,gBAAgB,aAAa;;AAItC,SAAS,sBAA4B;AACnC,KAAI,cAAc;AAChB,SACG,WAAW,+BAA+B,CAC1C,oBAAoB,UAAU,aAAa;AAC9C,iBAAe;;;;;;;AAQnB,SAAgB,eAAe,QAA2B;AACxD,sBAAqB;AACrB,gBAAe;CACf,MAAM,OAAO,SAAS;AACtB,KAAI,WAAW,OACb,MAAK,aAAa,cAAc,OAAO;UAC9B,WAAW,QACpB,MAAK,gBAAgB,aAAa;MAC7B;AACL,mBAAiB;AACjB,uBAAqB,iBAAiB;AACtC,SACG,WAAW,+BAA+B,CAC1C,iBAAiB,UAAU,aAAa;;;;AAK/C,SAAgB,iBAA8B;AAC5C,QAAO;;;;;AAMT,SAAgB,iBAAiB,QAAsC;CACrE,MAAM,OAAO,SAAS;AACtB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,MAAK,MAAM,YAAY,KAAK,MAAM"}