@xanui/core 1.3.16 → 1.3.17

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.
Files changed (76) hide show
  1. package/AppRoot/AppRootProvider.cjs.map +1 -1
  2. package/AppRoot/AppRootProvider.js.map +1 -1
  3. package/AppRoot/Renderar.cjs.map +1 -1
  4. package/AppRoot/Renderar.js.map +1 -1
  5. package/AppRoot/index.cjs.map +1 -1
  6. package/AppRoot/index.js.map +1 -1
  7. package/Document/index.cjs.map +1 -1
  8. package/Document/index.js.map +1 -1
  9. package/Iframe/index.cjs.map +1 -1
  10. package/Iframe/index.js.map +1 -1
  11. package/Portal/index.cjs.map +1 -1
  12. package/Portal/index.js.map +1 -1
  13. package/Tag/ServerStyleTag.cjs.map +1 -1
  14. package/Tag/ServerStyleTag.js.map +1 -1
  15. package/Tag/cssPropList.cjs.map +1 -1
  16. package/Tag/cssPropList.js.map +1 -1
  17. package/Tag/index.cjs.map +1 -1
  18. package/Tag/index.js.map +1 -1
  19. package/Tag/useTagProps.cjs.map +1 -1
  20. package/Tag/useTagProps.js.map +1 -1
  21. package/Transition/index.cjs.map +1 -1
  22. package/Transition/index.js.map +1 -1
  23. package/Transition/variants.cjs.map +1 -1
  24. package/Transition/variants.js.map +1 -1
  25. package/animate/easing.cjs.map +1 -1
  26. package/animate/easing.js.map +1 -1
  27. package/animate/index.cjs.map +1 -1
  28. package/animate/index.js.map +1 -1
  29. package/breakpoint/BreakpointProvider.cjs.map +1 -1
  30. package/breakpoint/BreakpointProvider.js.map +1 -1
  31. package/breakpoint/useBreakpoint.cjs.map +1 -1
  32. package/breakpoint/useBreakpoint.js.map +1 -1
  33. package/breakpoint/useBreakpointProps.cjs.map +1 -1
  34. package/breakpoint/useBreakpointProps.js.map +1 -1
  35. package/cookie.cjs.map +1 -1
  36. package/cookie.js.map +1 -1
  37. package/css/CSSCacheProvider.cjs.map +1 -1
  38. package/css/CSSCacheProvider.js.map +1 -1
  39. package/css/aliases.cjs.map +1 -1
  40. package/css/aliases.js.map +1 -1
  41. package/css/getProps.cjs.map +1 -1
  42. package/css/getProps.js.map +1 -1
  43. package/css/getValue.cjs.map +1 -1
  44. package/css/getValue.js.map +1 -1
  45. package/css/index.cjs.map +1 -1
  46. package/css/index.js.map +1 -1
  47. package/hooks/useColorTemplate.cjs.map +1 -1
  48. package/hooks/useColorTemplate.js.map +1 -1
  49. package/hooks/useInView.cjs.map +1 -1
  50. package/hooks/useInView.js.map +1 -1
  51. package/hooks/useInterface.cjs.map +1 -1
  52. package/hooks/useInterface.js.map +1 -1
  53. package/hooks/useMergeRefs.cjs.map +1 -1
  54. package/hooks/useMergeRefs.js.map +1 -1
  55. package/hooks/useTransition.cjs.map +1 -1
  56. package/hooks/useTransition.js.map +1 -1
  57. package/hooks/useTransitionGroup.cjs.map +1 -1
  58. package/hooks/useTransitionGroup.js.map +1 -1
  59. package/package.json +1 -1
  60. package/readme.md +109 -109
  61. package/theme/ThemeCssVars.cjs.map +1 -1
  62. package/theme/ThemeCssVars.js.map +1 -1
  63. package/theme/ThemeDefaultOptions.cjs +4 -4
  64. package/theme/ThemeDefaultOptions.cjs.map +1 -1
  65. package/theme/ThemeDefaultOptions.js +4 -4
  66. package/theme/ThemeDefaultOptions.js.map +1 -1
  67. package/theme/ThemeProvider.cjs.map +1 -1
  68. package/theme/ThemeProvider.js.map +1 -1
  69. package/theme/core.cjs.map +1 -1
  70. package/theme/core.js.map +1 -1
  71. package/theme/index.cjs.map +1 -1
  72. package/theme/index.js.map +1 -1
  73. package/theme/oklch.cjs +16 -5
  74. package/theme/oklch.cjs.map +1 -1
  75. package/theme/oklch.js +16 -5
  76. package/theme/oklch.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\r\nimport * as React from \"react\"\r\nimport { ThemeOptionInput, ThemeOptions } from \"./types\"\r\nimport Tag from \"../Tag\"\r\nimport { TagComponentType, TagProps } from \"../Tag/types\"\r\nimport { createTheme, ThemeContext } from \"./core\"\r\nimport ThemeCssVars from \"./ThemeCssVars\"\r\nimport { css } from \"../css\"\r\nimport ServerStyleTag from \"../Tag/ServerStyleTag\"\r\nimport { useDocument } from \"../Document\";\r\nimport { themeRootClass } from \".\";\r\nimport { useCSSCacheId } from \"../css/CSSCacheProvider\";\r\n\r\nexport type ThemeProviderProps<T extends TagComponentType = 'div'> = TagProps<T> & {\r\n theme: ThemeOptionInput;\r\n onThemeChange?: (theme: ThemeOptions) => void\r\n isRoot?: boolean;\r\n noScrollbarCss?: boolean;\r\n scrollbar?: {\r\n size?: number;\r\n thumbColor?: string;\r\n trackColor?: string;\r\n }\r\n}\r\n\r\nconst ThemeProvider = <T extends TagComponentType = 'div'>({ children, theme: THEME, scrollbar, onThemeChange, isRoot, noScrollbarCss, ...props }: ThemeProviderProps<T>) => {\r\n const doc = useDocument()\r\n const cacheId = useCSSCacheId()\r\n\r\n const theme = React.useMemo(() => createTheme(THEME), [THEME])\r\n\r\n const themeGlobalStyle: any = React.useMemo(() => {\r\n const root_cls = `.xui-${theme.name}-theme-root`\r\n let gkeys = Object.keys(theme.globalStyle || {})\r\n let gstyles: any = {}\r\n gkeys.forEach((key) => {\r\n gstyles[`${root_cls} ${key}`] = theme.globalStyle[key as any]\r\n })\r\n\r\n return css({\r\n \"@global\": {\r\n ...gstyles,\r\n [root_cls]: ThemeCssVars(theme)\r\n }\r\n }, {\r\n injectStyle: typeof window !== 'undefined',\r\n container: doc?.document,\r\n cacheId\r\n })\r\n }, [theme, doc])\r\n\r\n const resetCss = React.useMemo(() => {\r\n if (!isRoot) return\r\n return css({\r\n \"@global\": {\r\n \"*\": {\r\n m: 0,\r\n p: 0,\r\n outline: \"none\",\r\n boxSizing: \"border-box\",\r\n verticalAlign: \"baseline\",\r\n },\r\n \"html, body\": {\r\n height: \"100%\",\r\n \"-webkit-font-smoothing\": \"antialiased\",\r\n \"-moz-osx-font-smoothing\": \"grayscale\",\r\n } as any,\r\n \"img, picture, video, canvas, svg\": {\r\n maxWidth: \"100%\",\r\n display: \"block\"\r\n },\r\n \"input, button, textarea, select\": {\r\n font: \"inherit\"\r\n },\r\n \"table\": {\r\n borderCollapse: \"collapse\",\r\n borderSpacing: 0,\r\n },\r\n \"ol, ul\": {\r\n listStyle: \"none\",\r\n padding: 0,\r\n margin: 0,\r\n },\r\n \"a\": {\r\n display: \"inline-block\",\r\n color: \"inherit\",\r\n textDecoration: \"none\",\r\n cursor: \"pointer\",\r\n \"&:hover\": {\r\n textDecoration: \"underline\"\r\n }\r\n },\r\n \"p, h1, h2, h3, h4, h5, h6\": {\r\n overflowWrap: \"break-word\",\r\n },\r\n }\r\n }, {\r\n injectStyle: typeof window !== 'undefined',\r\n container: doc?.document,\r\n cacheId\r\n })\r\n }, [])\r\n\r\n const scrollbarCss: any = React.useMemo(() => {\r\n if (noScrollbarCss) return;\r\n const cls = (cls: string) => `${themeRootClass(theme.name)} ${cls}`\r\n let thumbSize = scrollbar?.size ?? 7\r\n let thumbColor = scrollbar?.thumbColor ?? \"var(--color-default-muted)\"\r\n let trackColor = scrollbar?.trackColor ?? \"var(--color-default-divider)\"\r\n\r\n return css({\r\n \"@global\": {\r\n [cls('*::-webkit-scrollbar')]: {\r\n width: thumbSize,\r\n height: thumbSize,\r\n },\r\n [cls(\"*::-webkit-scrollbar-thumb\")]: {\r\n backgroundColor: thumbColor,\r\n borderRadius: \"6px\",\r\n },\r\n [cls(\"*::-webkit-scrollbar-thumb:hover\")]: {\r\n backgroundColor: thumbColor,\r\n },\r\n [cls(\"*::-webkit-scrollbar-track\")]: {\r\n backgroundColor: trackColor,\r\n borderRadius: \"6px\",\r\n },\r\n }\r\n }, {\r\n injectStyle: typeof window !== 'undefined',\r\n container: doc?.document,\r\n cacheId\r\n }) as any\r\n }, [noScrollbarCss, theme])\r\n\r\n return (\r\n <ThemeContext.Provider\r\n value={{\r\n theme,\r\n onChange: (t) => {\r\n onThemeChange && onThemeChange(t)\r\n }\r\n }}\r\n >\r\n {\r\n isRoot && <>\r\n <ServerStyleTag factory={resetCss as any} />\r\n {\r\n !noScrollbarCss && <ServerStyleTag factory={scrollbarCss} />\r\n }\r\n </>\r\n }\r\n <ServerStyleTag factory={themeGlobalStyle} />\r\n <Tag\r\n minHeight=\"100%\"\r\n bgcolor={\"default.surface\"}\r\n color=\"default.contrast\"\r\n fontSize=\"text\"\r\n fontWeight=\"text\"\r\n lineHeight=\"text\"\r\n fontFamily={`system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif`}\r\n {...props}\r\n sxr={{\r\n \"& a\": {\r\n color: \"primary.base\",\r\n },\r\n }}\r\n baseClass={`${theme.name}-theme-root`}\r\n direction={theme.rtl ? \"rtl\" : \"ltr\"}\r\n >\r\n {children}\r\n </Tag>\r\n </ThemeContext.Provider>\r\n )\r\n}\r\n\r\nexport default ThemeProvider"],"names":[],"mappings":";;;;;;;;;;;;;AAyBA;AAA2D;AACxD;AACA;AAEA;AAEA;AACG;AACA;;AAEA;AACG;AACH;AAEA;;;AAMG;AACA;;AAEF;AACJ;AAEA;AACG;;AACA;AACG;AACG;AACG;AACA;AACA;AACA;AACA;AACF;AACD;AACG;AACA;AACA;AACK;AACR;AACG;AACA;AACF;AACD;AACG;AACF;AACD;AACG;AACA;AACF;AACD;AACG;AACA;AACA;AACF;AACD;AACG;AACA;AACA;AACA;AACA;AACG;AACF;AACH;AACD;AACG;AACF;AACH;;AAED;AACA;;AAEF;;AAGJ;;AACG;;AACA;AACA;AACA;AACA;AAEA;AACG;AACG;AACG;AACA;AACF;AACD;AACG;AACA;AACF;AACD;AACG;AACF;AACD;AACG;AACA;AACF;AACH;;AAED;AACA;;AAEF;AACJ;AAEA;;AAIS;AACG;;AAEL;AAqBK;AACG;AACF;;AAShB;;"}
1
+ {"version":3,"file":"ThemeProvider.js","sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\"\nimport { ThemeOptionInput, ThemeOptions } from \"./types\"\nimport Tag from \"../Tag\"\nimport { TagComponentType, TagProps } from \"../Tag/types\"\nimport { createTheme, ThemeContext } from \"./core\"\nimport ThemeCssVars from \"./ThemeCssVars\"\nimport { css } from \"../css\"\nimport ServerStyleTag from \"../Tag/ServerStyleTag\"\nimport { useDocument } from \"../Document\";\nimport { themeRootClass } from \".\";\nimport { useCSSCacheId } from \"../css/CSSCacheProvider\";\n\nexport type ThemeProviderProps<T extends TagComponentType = 'div'> = TagProps<T> & {\n theme: ThemeOptionInput;\n onThemeChange?: (theme: ThemeOptions) => void\n isRoot?: boolean;\n noScrollbarCss?: boolean;\n scrollbar?: {\n size?: number;\n thumbColor?: string;\n trackColor?: string;\n }\n}\n\nconst ThemeProvider = <T extends TagComponentType = 'div'>({ children, theme: THEME, scrollbar, onThemeChange, isRoot, noScrollbarCss, ...props }: ThemeProviderProps<T>) => {\n const doc = useDocument()\n const cacheId = useCSSCacheId()\n\n const theme = React.useMemo(() => createTheme(THEME), [THEME])\n\n const themeGlobalStyle: any = React.useMemo(() => {\n const root_cls = `.xui-${theme.name}-theme-root`\n let gkeys = Object.keys(theme.globalStyle || {})\n let gstyles: any = {}\n gkeys.forEach((key) => {\n gstyles[`${root_cls} ${key}`] = theme.globalStyle[key as any]\n })\n\n return css({\n \"@global\": {\n ...gstyles,\n [root_cls]: ThemeCssVars(theme)\n }\n }, {\n injectStyle: typeof window !== 'undefined',\n container: doc?.document,\n cacheId\n })\n }, [theme, doc])\n\n const resetCss = React.useMemo(() => {\n if (!isRoot) return\n return css({\n \"@global\": {\n \"*\": {\n m: 0,\n p: 0,\n outline: \"none\",\n boxSizing: \"border-box\",\n verticalAlign: \"baseline\",\n },\n \"html, body\": {\n height: \"100%\",\n \"-webkit-font-smoothing\": \"antialiased\",\n \"-moz-osx-font-smoothing\": \"grayscale\",\n } as any,\n \"img, picture, video, canvas, svg\": {\n maxWidth: \"100%\",\n display: \"block\"\n },\n \"input, button, textarea, select\": {\n font: \"inherit\"\n },\n \"table\": {\n borderCollapse: \"collapse\",\n borderSpacing: 0,\n },\n \"ol, ul\": {\n listStyle: \"none\",\n padding: 0,\n margin: 0,\n },\n \"a\": {\n display: \"inline-block\",\n color: \"inherit\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n \"&:hover\": {\n textDecoration: \"underline\"\n }\n },\n \"p, h1, h2, h3, h4, h5, h6\": {\n overflowWrap: \"break-word\",\n },\n }\n }, {\n injectStyle: typeof window !== 'undefined',\n container: doc?.document,\n cacheId\n })\n }, [])\n\n const scrollbarCss: any = React.useMemo(() => {\n if (noScrollbarCss) return;\n const cls = (cls: string) => `${themeRootClass(theme.name)} ${cls}`\n let thumbSize = scrollbar?.size ?? 7\n let thumbColor = scrollbar?.thumbColor ?? \"var(--color-default-muted)\"\n let trackColor = scrollbar?.trackColor ?? \"var(--color-default-divider)\"\n\n return css({\n \"@global\": {\n [cls('*::-webkit-scrollbar')]: {\n width: thumbSize,\n height: thumbSize,\n },\n [cls(\"*::-webkit-scrollbar-thumb\")]: {\n backgroundColor: thumbColor,\n borderRadius: \"6px\",\n },\n [cls(\"*::-webkit-scrollbar-thumb:hover\")]: {\n backgroundColor: thumbColor,\n },\n [cls(\"*::-webkit-scrollbar-track\")]: {\n backgroundColor: trackColor,\n borderRadius: \"6px\",\n },\n }\n }, {\n injectStyle: typeof window !== 'undefined',\n container: doc?.document,\n cacheId\n }) as any\n }, [noScrollbarCss, theme])\n\n return (\n <ThemeContext.Provider\n value={{\n theme,\n onChange: (t) => {\n onThemeChange && onThemeChange(t)\n }\n }}\n >\n {\n isRoot && <>\n <ServerStyleTag factory={resetCss as any} />\n {\n !noScrollbarCss && <ServerStyleTag factory={scrollbarCss} />\n }\n </>\n }\n <ServerStyleTag factory={themeGlobalStyle} />\n <Tag\n minHeight=\"100%\"\n bgcolor={\"default.surface\"}\n color=\"default.contrast\"\n fontSize=\"text\"\n fontWeight=\"text\"\n lineHeight=\"text\"\n fontFamily={`system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif`}\n {...props}\n sxr={{\n \"& a\": {\n color: \"primary.base\",\n },\n }}\n baseClass={`${theme.name}-theme-root`}\n direction={theme.rtl ? \"rtl\" : \"ltr\"}\n >\n {children}\n </Tag>\n </ThemeContext.Provider>\n )\n}\n\nexport default ThemeProvider"],"names":[],"mappings":";;;;;;;;;;;;;AAyBA;AAA2D;AACxD;AACA;AAEA;AAEA;AACG;AACA;;AAEA;AACG;AACH;AAEA;;;AAMG;AACA;;AAEF;AACJ;AAEA;AACG;;AACA;AACG;AACG;AACG;AACA;AACA;AACA;AACA;AACF;AACD;AACG;AACA;AACA;AACK;AACR;AACG;AACA;AACF;AACD;AACG;AACF;AACD;AACG;AACA;AACF;AACD;AACG;AACA;AACA;AACF;AACD;AACG;AACA;AACA;AACA;AACA;AACG;AACF;AACH;AACD;AACG;AACF;AACH;;AAED;AACA;;AAEF;;AAGJ;;AACG;;AACA;AACA;AACA;AACA;AAEA;AACG;AACG;AACG;AACA;AACF;AACD;AACG;AACA;AACF;AACD;AACG;AACF;AACD;AACG;AACA;AACF;AACH;;AAED;AACA;;AAEF;AACJ;AAEA;;AAIS;AACG;;AAEL;AAqBK;AACG;AACF;;AAShB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.cjs","sources":["../../src/theme/core.ts"],"sourcesContent":["\"use client\"\r\nimport React, { useContext } from \"react\"\r\nimport { ObjectType, ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { breakpoints } from \"../css\"\r\nimport { darkThemeOptions, lightThemeOptions } from \"./ThemeDefaultOptions\"\r\nimport { createPalette } from \"./oklch\"\r\n\r\n\r\nexport const mergeObject = (a: ObjectType, b: ObjectType) => {\r\n a = { ...a }\r\n b = { ...b }\r\n for (const key in b) {\r\n const v = (b as any)[key]\r\n if (typeof v === 'object' && !Array.isArray(v) && !React.isValidElement(v)) {\r\n a[key] = mergeObject(a[key], b[key])\r\n } else {\r\n a[key] = v\r\n }\r\n }\r\n return a\r\n}\r\n\r\n\r\nexport const createTheme = (options: ThemeOptionInput): ThemeOptions => {\r\n let mode = options?.mode ?? \"light\"\r\n const defaultOptions = mode === \"dark\" ? darkThemeOptions : lightThemeOptions\r\n\r\n for (let key in options?.colors) {\r\n const color = (options as any)?.colors[key] as any\r\n if (typeof color === \"string\") {\r\n (options as any).colors[key] = createPalette(color)\r\n } else {\r\n const main = color.base\r\n if (main) {\r\n const pallate = createPalette(main);\r\n (options as any).colors[key] = {\r\n ...pallate,\r\n ...(options as any).colors[key],\r\n main: pallate.base\r\n }\r\n }\r\n }\r\n }\r\n\r\n let theme: any = mergeObject(defaultOptions, {\r\n name: mode === \"dark\" ? \"dark\" : \"light\",\r\n mode: mode === \"dark\" ? \"dark\" : \"light\",\r\n ...options,\r\n breakpoints: breakpoints\r\n })\r\n\r\n return theme as ThemeOptions\r\n}\r\n\r\nexport type ThemeCntextProps = {\r\n theme: ThemeOptions,\r\n onChange: (theme: ThemeOptions) => void\r\n}\r\n\r\nexport const ThemeContext = React.createContext<ThemeCntextProps>({\r\n theme: createTheme({\r\n mode: \"light\"\r\n }),\r\n onChange(theme) { },\r\n})\r\n\r\nexport const useTheme = () => {\r\n const ctx = useContext(ThemeContext)\r\n const theme = ctx.theme\r\n theme.change = (theme: ThemeOptionInput) => ctx.onChange(createTheme(theme))\r\n return theme\r\n}\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;AAWG;AACG;;AAEG;;;AAEA;;;AAGN;AACH;AAGO;;AACJ;AACA;;AAGG;AACA;;;;AAGG;;AAEG;;;;;AAUT;AAOA;AACH;AAOO;;AAED;;;AAGL;AAEM;AACJ;AACA;AACA;AACA;AACH;;;;;"}
1
+ {"version":3,"file":"core.cjs","sources":["../../src/theme/core.ts"],"sourcesContent":["\"use client\"\nimport React, { useContext } from \"react\"\nimport { ObjectType, ThemeOptions, ThemeOptionInput } from \"./types\"\nimport { breakpoints } from \"../css\"\nimport { darkThemeOptions, lightThemeOptions } from \"./ThemeDefaultOptions\"\nimport { createPalette } from \"./oklch\"\n\n\nexport const mergeObject = (a: ObjectType, b: ObjectType) => {\n a = { ...a }\n b = { ...b }\n for (const key in b) {\n const v = (b as any)[key]\n if (typeof v === 'object' && !Array.isArray(v) && !React.isValidElement(v)) {\n a[key] = mergeObject(a[key], b[key])\n } else {\n a[key] = v\n }\n }\n return a\n}\n\n\nexport const createTheme = (options: ThemeOptionInput): ThemeOptions => {\n let mode = options?.mode ?? \"light\"\n const defaultOptions = mode === \"dark\" ? darkThemeOptions : lightThemeOptions\n\n for (let key in options?.colors) {\n const color = (options as any)?.colors[key] as any\n if (typeof color === \"string\") {\n (options as any).colors[key] = createPalette(color)\n } else {\n const main = color.base\n if (main) {\n const pallate = createPalette(main);\n (options as any).colors[key] = {\n ...pallate,\n ...(options as any).colors[key],\n main: pallate.base\n }\n }\n }\n }\n\n let theme: any = mergeObject(defaultOptions, {\n name: mode === \"dark\" ? \"dark\" : \"light\",\n mode: mode === \"dark\" ? \"dark\" : \"light\",\n ...options,\n breakpoints: breakpoints\n })\n\n return theme as ThemeOptions\n}\n\nexport type ThemeCntextProps = {\n theme: ThemeOptions,\n onChange: (theme: ThemeOptions) => void\n}\n\nexport const ThemeContext = React.createContext<ThemeCntextProps>({\n theme: createTheme({\n mode: \"light\"\n }),\n onChange(theme) { },\n})\n\nexport const useTheme = () => {\n const ctx = useContext(ThemeContext)\n const theme = ctx.theme\n theme.change = (theme: ThemeOptionInput) => ctx.onChange(createTheme(theme))\n return theme\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;AAWG;AACG;;AAEG;;;AAEA;;;AAGN;AACH;AAGO;;AACJ;AACA;;AAGG;AACA;;;;AAGG;;AAEG;;;;;AAUT;AAOA;AACH;AAOO;;AAED;;;AAGL;AAEM;AACJ;AACA;AACA;AACA;AACH;;;;;"}
package/theme/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../../src/theme/core.ts"],"sourcesContent":["\"use client\"\r\nimport React, { useContext } from \"react\"\r\nimport { ObjectType, ThemeOptions, ThemeOptionInput } from \"./types\"\r\nimport { breakpoints } from \"../css\"\r\nimport { darkThemeOptions, lightThemeOptions } from \"./ThemeDefaultOptions\"\r\nimport { createPalette } from \"./oklch\"\r\n\r\n\r\nexport const mergeObject = (a: ObjectType, b: ObjectType) => {\r\n a = { ...a }\r\n b = { ...b }\r\n for (const key in b) {\r\n const v = (b as any)[key]\r\n if (typeof v === 'object' && !Array.isArray(v) && !React.isValidElement(v)) {\r\n a[key] = mergeObject(a[key], b[key])\r\n } else {\r\n a[key] = v\r\n }\r\n }\r\n return a\r\n}\r\n\r\n\r\nexport const createTheme = (options: ThemeOptionInput): ThemeOptions => {\r\n let mode = options?.mode ?? \"light\"\r\n const defaultOptions = mode === \"dark\" ? darkThemeOptions : lightThemeOptions\r\n\r\n for (let key in options?.colors) {\r\n const color = (options as any)?.colors[key] as any\r\n if (typeof color === \"string\") {\r\n (options as any).colors[key] = createPalette(color)\r\n } else {\r\n const main = color.base\r\n if (main) {\r\n const pallate = createPalette(main);\r\n (options as any).colors[key] = {\r\n ...pallate,\r\n ...(options as any).colors[key],\r\n main: pallate.base\r\n }\r\n }\r\n }\r\n }\r\n\r\n let theme: any = mergeObject(defaultOptions, {\r\n name: mode === \"dark\" ? \"dark\" : \"light\",\r\n mode: mode === \"dark\" ? \"dark\" : \"light\",\r\n ...options,\r\n breakpoints: breakpoints\r\n })\r\n\r\n return theme as ThemeOptions\r\n}\r\n\r\nexport type ThemeCntextProps = {\r\n theme: ThemeOptions,\r\n onChange: (theme: ThemeOptions) => void\r\n}\r\n\r\nexport const ThemeContext = React.createContext<ThemeCntextProps>({\r\n theme: createTheme({\r\n mode: \"light\"\r\n }),\r\n onChange(theme) { },\r\n})\r\n\r\nexport const useTheme = () => {\r\n const ctx = useContext(ThemeContext)\r\n const theme = ctx.theme\r\n theme.change = (theme: ThemeOptionInput) => ctx.onChange(createTheme(theme))\r\n return theme\r\n}\r\n\r\n"],"names":[],"mappings":";;;;;;;;;AAWG;AACG;;AAEG;;;AAEA;;;AAGN;AACH;AAGO;;AACJ;AACA;;AAGG;AACA;;;;AAGG;;AAEG;;;;;AAUT;AAOA;AACH;AAOO;;AAED;;;AAGL;AAEM;AACJ;AACA;AACA;AACA;AACH;;"}
1
+ {"version":3,"file":"core.js","sources":["../../src/theme/core.ts"],"sourcesContent":["\"use client\"\nimport React, { useContext } from \"react\"\nimport { ObjectType, ThemeOptions, ThemeOptionInput } from \"./types\"\nimport { breakpoints } from \"../css\"\nimport { darkThemeOptions, lightThemeOptions } from \"./ThemeDefaultOptions\"\nimport { createPalette } from \"./oklch\"\n\n\nexport const mergeObject = (a: ObjectType, b: ObjectType) => {\n a = { ...a }\n b = { ...b }\n for (const key in b) {\n const v = (b as any)[key]\n if (typeof v === 'object' && !Array.isArray(v) && !React.isValidElement(v)) {\n a[key] = mergeObject(a[key], b[key])\n } else {\n a[key] = v\n }\n }\n return a\n}\n\n\nexport const createTheme = (options: ThemeOptionInput): ThemeOptions => {\n let mode = options?.mode ?? \"light\"\n const defaultOptions = mode === \"dark\" ? darkThemeOptions : lightThemeOptions\n\n for (let key in options?.colors) {\n const color = (options as any)?.colors[key] as any\n if (typeof color === \"string\") {\n (options as any).colors[key] = createPalette(color)\n } else {\n const main = color.base\n if (main) {\n const pallate = createPalette(main);\n (options as any).colors[key] = {\n ...pallate,\n ...(options as any).colors[key],\n main: pallate.base\n }\n }\n }\n }\n\n let theme: any = mergeObject(defaultOptions, {\n name: mode === \"dark\" ? \"dark\" : \"light\",\n mode: mode === \"dark\" ? \"dark\" : \"light\",\n ...options,\n breakpoints: breakpoints\n })\n\n return theme as ThemeOptions\n}\n\nexport type ThemeCntextProps = {\n theme: ThemeOptions,\n onChange: (theme: ThemeOptions) => void\n}\n\nexport const ThemeContext = React.createContext<ThemeCntextProps>({\n theme: createTheme({\n mode: \"light\"\n }),\n onChange(theme) { },\n})\n\nexport const useTheme = () => {\n const ctx = useContext(ThemeContext)\n const theme = ctx.theme\n theme.change = (theme: ThemeOptionInput) => ctx.onChange(createTheme(theme))\n return theme\n}\n\n"],"names":[],"mappings":";;;;;;;;;AAWG;AACG;;AAEG;;;AAEA;;;AAGN;AACH;AAGO;;AACJ;AACA;;AAGG;AACA;;;;AAGG;;AAEG;;;;;AAUT;AAOA;AACH;AAOO;;AAED;;;AAGL;AAEM;AACJ;AACA;AACA;AACA;AACH;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport { useTheme, createTheme } from './core'\r\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createTheme,\r\n useTheme,\r\n lightThemeOptions,\r\n darkThemeOptions,\r\n}\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAMO;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\nimport ThemeProvider from './ThemeProvider'\nimport { useTheme, createTheme } from './core'\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\nexport type { ThemeProviderProps } from './ThemeProvider'\n\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\n\nexport {\n ThemeProvider,\n createTheme,\n useTheme,\n lightThemeOptions,\n darkThemeOptions,\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAMO;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\r\nimport ThemeProvider from './ThemeProvider'\r\nimport { useTheme, createTheme } from './core'\r\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\r\nexport type { ThemeProviderProps } from './ThemeProvider'\r\n\r\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\r\n\r\nexport {\r\n ThemeProvider,\r\n createTheme,\r\n useTheme,\r\n lightThemeOptions,\r\n darkThemeOptions,\r\n}\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;;AAMO;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/theme/index.tsx"],"sourcesContent":["\"use client\"\nimport ThemeProvider from './ThemeProvider'\nimport { useTheme, createTheme } from './core'\nimport { lightThemeOptions, darkThemeOptions } from './ThemeDefaultOptions'\nexport type { ThemeProviderProps } from './ThemeProvider'\n\nexport const themeRootClass = (theme: string) => `.xui-${theme}-theme-root`\n\nexport {\n ThemeProvider,\n createTheme,\n useTheme,\n lightThemeOptions,\n darkThemeOptions,\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;AAMO;;"}
package/theme/oklch.cjs CHANGED
@@ -74,10 +74,21 @@ const SCALE = {
74
74
  elevated: -0.1,
75
75
  emphasis: -0.18
76
76
  };
77
+ // function shift(base: OKLCH, amount: number): OKLCH {
78
+ // return {
79
+ // l: clamp(base.l + amount),
80
+ // c: base.c,
81
+ // h: base.h
82
+ // };
83
+ // }
77
84
  function shift(base, amount) {
85
+ const nextL = clamp(base.l + amount);
86
+ // reduce chroma when moving away from middle lightness
87
+ const distanceFromMid = Math.abs(nextL - 0.6);
88
+ const chromaScale = 1 - distanceFromMid * 0.7;
78
89
  return {
79
- l: clamp(base.l + amount),
80
- c: base.c,
90
+ l: nextL,
91
+ c: clamp(base.c * chromaScale, 0, 0.18),
81
92
  h: base.h
82
93
  };
83
94
  }
@@ -85,7 +96,7 @@ function createDarkThemePalette(input) {
85
96
  const raw = toOKLCH(input);
86
97
  const base = {
87
98
  l: clamp(raw.l, 0.05, 0.95),
88
- c: Math.min(raw.c, 0.22),
99
+ c: Math.min(raw.c, 0.16),
89
100
  h: raw.h,
90
101
  };
91
102
  return {
@@ -116,7 +127,7 @@ function createLightThemePalette(input) {
116
127
  const raw = toOKLCH(input);
117
128
  const base = {
118
129
  l: clamp(raw.l, 0.05, 0.95),
119
- c: Math.min(raw.c, 0.22),
130
+ c: Math.min(raw.c, 0.16),
120
131
  h: raw.h,
121
132
  };
122
133
  return {
@@ -147,7 +158,7 @@ function createPalette(input, mode = "light") {
147
158
  const base = toOKLCH(input);
148
159
  const isDark = mode === "dark";
149
160
  const isLightColor = base.l > 0.75;
150
- const safeC = Math.min(base.c, 0.25);
161
+ const safeC = Math.min(base.c, 0.16);
151
162
  const main = {
152
163
  l: base.l,
153
164
  c: safeC,
@@ -1 +1 @@
1
- {"version":3,"file":"oklch.cjs","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\r\n l: number;\r\n c: number;\r\n h: number;\r\n};\r\n\r\ntype ColorRole = {\r\n base: string;\r\n surface: string;\r\n subtle: string;\r\n elevated: string;\r\n emphasis: string;\r\n contrast: string;\r\n muted: string;\r\n ghost: string;\r\n divider: string;\r\n};\r\n\r\n/* ---------------- PARSERS ---------------- */\r\n\r\nexport function toOKLCH(input: string): OKLCH {\r\n if (input.startsWith(\"oklch\")) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid OKLCH format\");\r\n }\r\n\r\n let [l, c, h] = values.map(Number);\r\n\r\n return {\r\n l: l > 1 ? l / 100 : l,\r\n c,\r\n h,\r\n };\r\n }\r\n\r\n const rgb = parseToRgb(input);\r\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\r\n return oklabToOklch(lab.L, lab.a, lab.b);\r\n}\r\n\r\nfunction parseToRgb(input: string) {\r\n input = input.trim().toLowerCase();\r\n\r\n if (input.startsWith(\"#\")) return parseHex(input);\r\n if (input.startsWith(\"rgb\")) return parseRgb(input);\r\n if (input.startsWith(\"hsl\")) return parseHsl(input);\r\n\r\n throw new Error(\"Unsupported format\");\r\n}\r\n\r\n/* ---------------- CORE MATH ---------------- */\r\n\r\nfunction srgbToLinear(c: number) {\r\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction rgbToOklab(r: number, g: number, b: number) {\r\n r = srgbToLinear(r);\r\n g = srgbToLinear(g);\r\n b = srgbToLinear(b);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n return {\r\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\r\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\r\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\r\n };\r\n}\r\n\r\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\r\n const c = Math.sqrt(a * a + b * b);\r\n let h = Math.atan2(b, a) * (180 / Math.PI);\r\n\r\n if (h < 0) h += 360;\r\n\r\n return { l: L, c, h };\r\n}\r\n\r\n/* ---------------- FORMAT ---------------- */\r\n\r\nfunction formatOklch(color: OKLCH, alpha = 1): string {\r\n const l = (color.l * 100).toFixed(2) + \"%\";\r\n const c = color.c.toFixed(4);\r\n const h = color.h.toFixed(2);\r\n\r\n return alpha === 1\r\n ? `oklch(${l} ${c} ${h})`\r\n : `oklch(${l} ${c} ${h} / ${alpha})`;\r\n}\r\n\r\n/* ---------------- UTILS ---------------- */\r\n\r\nfunction clamp(v: number, min = 0, max = 1) {\r\n return Math.min(max, Math.max(min, v));\r\n}\r\n\r\n\r\nconst SCALE = {\r\n subtle: 0.18,\r\n surface: 0.09,\r\n elevated: -0.10,\r\n emphasis: -0.18\r\n}\r\n\r\nfunction shift(base: OKLCH, amount: number): OKLCH {\r\n return {\r\n l: clamp(base.l + amount),\r\n c: base.c,\r\n h: base.h\r\n };\r\n}\r\n\r\n\r\nexport function createDarkThemePalette(input: string): ColorRole {\r\n const raw = toOKLCH(input);\r\n\r\n const base: OKLCH = {\r\n l: clamp(raw.l, 0.05, 0.95),\r\n c: Math.min(raw.c, 0.22),\r\n h: raw.h,\r\n };\r\n\r\n return {\r\n base: formatOklch(base),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n contrast: formatOklch({\r\n l: 0.94,\r\n c: 0.01,\r\n h: base.h\r\n }),\r\n\r\n muted: formatOklch({\r\n l: 0.72,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: 0.40,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.14)\r\n };\r\n}\r\n\r\nexport function createLightThemePalette(input: string): ColorRole {\r\n const raw = toOKLCH(input);\r\n\r\n const base: OKLCH = {\r\n l: clamp(raw.l, 0.05, 0.95),\r\n c: Math.min(raw.c, 0.22),\r\n h: raw.h,\r\n };\r\n\r\n return {\r\n base: formatOklch(base),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n contrast: formatOklch({\r\n l: 0.20,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n muted: formatOklch({\r\n l: 0.50,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: 0.88,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.2)\r\n };\r\n}\r\n\r\nexport function createPalette(input: string, mode: \"light\" | \"dark\" = \"light\"): ColorRole {\r\n const base = toOKLCH(input);\r\n const isDark = mode === \"dark\";\r\n const isLightColor = base.l > 0.75;\r\n const safeC = Math.min(base.c, 0.25);\r\n\r\n const main: OKLCH = {\r\n l: base.l,\r\n c: safeC,\r\n h: base.h\r\n };\r\n\r\n const contrast = {\r\n l: isLightColor ? 0.1 : 0.95,\r\n c: 0.02,\r\n h: base.h\r\n }\r\n\r\n return {\r\n\r\n base: formatOklch(main),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n ghost: formatOklch({\r\n l: base.l,\r\n c: safeC * 0.45,\r\n h: base.h\r\n }, isDark ? 0.14 : 0.18),\r\n\r\n contrast: formatOklch(contrast),\r\n\r\n muted: formatOklch({\r\n l: isDark ? 0.72 : 0.50,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: clamp(main.l + (isDark ? -0.15 : 0.15)),\r\n c: Math.min(main.c * 0.15, 0.02),\r\n h: main.h\r\n })\r\n };\r\n}\r\n/* ---------------- PARSERS ---------------- */\r\n\r\nfunction parseHex(hex: string) {\r\n hex = hex.replace(\"#\", \"\").trim();\r\n\r\n if (hex.length === 3) {\r\n hex = hex.split(\"\").map(c => c + c).join(\"\");\r\n }\r\n\r\n const num = parseInt(hex, 16);\r\n\r\n return {\r\n r: ((num >> 16) & 255) / 255,\r\n g: ((num >> 8) & 255) / 255,\r\n b: (num & 255) / 255,\r\n };\r\n}\r\n\r\nfunction parseRgb(input: string) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid RGB format\");\r\n }\r\n\r\n const [r, g, b] = values.map(Number);\r\n\r\n return {\r\n r: r / 255,\r\n g: g / 255,\r\n b: b / 255,\r\n };\r\n}\r\n\r\nfunction parseHsl(input: string) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid HSL format\");\r\n }\r\n\r\n let [h, s, l] = values.map(Number);\r\n\r\n h /= 360;\r\n s /= 100;\r\n l /= 100;\r\n\r\n const hue2rgb = (p: number, q: number, t: number) => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n };\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n const p = 2 * l - q;\r\n\r\n return {\r\n r: hue2rgb(p, q, h + 1 / 3),\r\n g: hue2rgb(p, q, h),\r\n b: hue2rgb(p, q, h - 1 / 3),\r\n };\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oklch.cjs","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\n l: number;\n c: number;\n h: number;\n};\n\ntype ColorRole = {\n base: string;\n surface: string;\n subtle: string;\n elevated: string;\n emphasis: string;\n contrast: string;\n muted: string;\n ghost: string;\n divider: string;\n};\n\n/* ---------------- PARSERS ---------------- */\n\nexport function toOKLCH(input: string): OKLCH {\n if (input.startsWith(\"oklch\")) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid OKLCH format\");\n }\n\n let [l, c, h] = values.map(Number);\n\n return {\n l: l > 1 ? l / 100 : l,\n c,\n h,\n };\n }\n\n const rgb = parseToRgb(input);\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\n return oklabToOklch(lab.L, lab.a, lab.b);\n}\n\nfunction parseToRgb(input: string) {\n input = input.trim().toLowerCase();\n\n if (input.startsWith(\"#\")) return parseHex(input);\n if (input.startsWith(\"rgb\")) return parseRgb(input);\n if (input.startsWith(\"hsl\")) return parseHsl(input);\n\n throw new Error(\"Unsupported format\");\n}\n\n/* ---------------- CORE MATH ---------------- */\n\nfunction srgbToLinear(c: number) {\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\nfunction rgbToOklab(r: number, g: number, b: number) {\n r = srgbToLinear(r);\n g = srgbToLinear(g);\n b = srgbToLinear(b);\n\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n}\n\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\n const c = Math.sqrt(a * a + b * b);\n let h = Math.atan2(b, a) * (180 / Math.PI);\n\n if (h < 0) h += 360;\n\n return { l: L, c, h };\n}\n\n/* ---------------- FORMAT ---------------- */\n\nfunction formatOklch(color: OKLCH, alpha = 1): string {\n const l = (color.l * 100).toFixed(2) + \"%\";\n const c = color.c.toFixed(4);\n const h = color.h.toFixed(2);\n\n return alpha === 1\n ? `oklch(${l} ${c} ${h})`\n : `oklch(${l} ${c} ${h} / ${alpha})`;\n}\n\n/* ---------------- UTILS ---------------- */\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(max, Math.max(min, v));\n}\n\n\nconst SCALE = {\n subtle: 0.18,\n surface: 0.09,\n elevated: -0.10,\n emphasis: -0.18\n}\n\n// function shift(base: OKLCH, amount: number): OKLCH {\n// return {\n// l: clamp(base.l + amount),\n// c: base.c,\n// h: base.h\n// };\n// }\n\nfunction shift(base: OKLCH, amount: number): OKLCH {\n const nextL = clamp(base.l + amount);\n\n // reduce chroma when moving away from middle lightness\n const distanceFromMid = Math.abs(nextL - 0.6);\n\n const chromaScale = 1 - distanceFromMid * 0.7;\n\n return {\n l: nextL,\n c: clamp(base.c * chromaScale, 0, 0.18),\n h: base.h\n };\n}\n\n\nexport function createDarkThemePalette(input: string): ColorRole {\n const raw = toOKLCH(input);\n\n const base: OKLCH = {\n l: clamp(raw.l, 0.05, 0.95),\n c: Math.min(raw.c, 0.16),\n h: raw.h,\n };\n\n return {\n base: formatOklch(base),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n contrast: formatOklch({\n l: 0.94,\n c: 0.01,\n h: base.h\n }),\n\n muted: formatOklch({\n l: 0.72,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: 0.40,\n c: 0,\n h: 0\n }),\n\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.14)\n };\n}\n\nexport function createLightThemePalette(input: string): ColorRole {\n const raw = toOKLCH(input);\n\n const base: OKLCH = {\n l: clamp(raw.l, 0.05, 0.95),\n c: Math.min(raw.c, 0.16),\n h: raw.h,\n };\n\n return {\n base: formatOklch(base),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n contrast: formatOklch({\n l: 0.20,\n c: 0,\n h: 0\n }),\n\n muted: formatOklch({\n l: 0.50,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: 0.88,\n c: 0,\n h: 0\n }),\n\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.2)\n };\n}\n\nexport function createPalette(input: string, mode: \"light\" | \"dark\" = \"light\"): ColorRole {\n const base = toOKLCH(input);\n const isDark = mode === \"dark\";\n const isLightColor = base.l > 0.75;\n const safeC = Math.min(base.c, 0.16);\n\n const main: OKLCH = {\n l: base.l,\n c: safeC,\n h: base.h\n };\n\n const contrast = {\n l: isLightColor ? 0.1 : 0.95,\n c: 0.02,\n h: base.h\n }\n\n return {\n\n base: formatOklch(main),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n ghost: formatOklch({\n l: base.l,\n c: safeC * 0.45,\n h: base.h\n }, isDark ? 0.14 : 0.18),\n\n contrast: formatOklch(contrast),\n\n muted: formatOklch({\n l: isDark ? 0.72 : 0.50,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: clamp(main.l + (isDark ? -0.15 : 0.15)),\n c: Math.min(main.c * 0.15, 0.02),\n h: main.h\n })\n };\n}\n/* ---------------- PARSERS ---------------- */\n\nfunction parseHex(hex: string) {\n hex = hex.replace(\"#\", \"\").trim();\n\n if (hex.length === 3) {\n hex = hex.split(\"\").map(c => c + c).join(\"\");\n }\n\n const num = parseInt(hex, 16);\n\n return {\n r: ((num >> 16) & 255) / 255,\n g: ((num >> 8) & 255) / 255,\n b: (num & 255) / 255,\n };\n}\n\nfunction parseRgb(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid RGB format\");\n }\n\n const [r, g, b] = values.map(Number);\n\n return {\n r: r / 255,\n g: g / 255,\n b: b / 255,\n };\n}\n\nfunction parseHsl(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid HSL format\");\n }\n\n let [h, s, l] = values.map(Number);\n\n h /= 360;\n s /= 100;\n l /= 100;\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: hue2rgb(p, q, h + 1 / 3),\n g: hue2rgb(p, q, h),\n b: hue2rgb(p, q, h - 1 / 3),\n };\n}\n"],"names":[],"mappings":"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"}
package/theme/oklch.js CHANGED
@@ -72,10 +72,21 @@ const SCALE = {
72
72
  elevated: -0.1,
73
73
  emphasis: -0.18
74
74
  };
75
+ // function shift(base: OKLCH, amount: number): OKLCH {
76
+ // return {
77
+ // l: clamp(base.l + amount),
78
+ // c: base.c,
79
+ // h: base.h
80
+ // };
81
+ // }
75
82
  function shift(base, amount) {
83
+ const nextL = clamp(base.l + amount);
84
+ // reduce chroma when moving away from middle lightness
85
+ const distanceFromMid = Math.abs(nextL - 0.6);
86
+ const chromaScale = 1 - distanceFromMid * 0.7;
76
87
  return {
77
- l: clamp(base.l + amount),
78
- c: base.c,
88
+ l: nextL,
89
+ c: clamp(base.c * chromaScale, 0, 0.18),
79
90
  h: base.h
80
91
  };
81
92
  }
@@ -83,7 +94,7 @@ function createDarkThemePalette(input) {
83
94
  const raw = toOKLCH(input);
84
95
  const base = {
85
96
  l: clamp(raw.l, 0.05, 0.95),
86
- c: Math.min(raw.c, 0.22),
97
+ c: Math.min(raw.c, 0.16),
87
98
  h: raw.h,
88
99
  };
89
100
  return {
@@ -114,7 +125,7 @@ function createLightThemePalette(input) {
114
125
  const raw = toOKLCH(input);
115
126
  const base = {
116
127
  l: clamp(raw.l, 0.05, 0.95),
117
- c: Math.min(raw.c, 0.22),
128
+ c: Math.min(raw.c, 0.16),
118
129
  h: raw.h,
119
130
  };
120
131
  return {
@@ -145,7 +156,7 @@ function createPalette(input, mode = "light") {
145
156
  const base = toOKLCH(input);
146
157
  const isDark = mode === "dark";
147
158
  const isLightColor = base.l > 0.75;
148
- const safeC = Math.min(base.c, 0.25);
159
+ const safeC = Math.min(base.c, 0.16);
149
160
  const main = {
150
161
  l: base.l,
151
162
  c: safeC,
@@ -1 +1 @@
1
- {"version":3,"file":"oklch.js","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\r\n l: number;\r\n c: number;\r\n h: number;\r\n};\r\n\r\ntype ColorRole = {\r\n base: string;\r\n surface: string;\r\n subtle: string;\r\n elevated: string;\r\n emphasis: string;\r\n contrast: string;\r\n muted: string;\r\n ghost: string;\r\n divider: string;\r\n};\r\n\r\n/* ---------------- PARSERS ---------------- */\r\n\r\nexport function toOKLCH(input: string): OKLCH {\r\n if (input.startsWith(\"oklch\")) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid OKLCH format\");\r\n }\r\n\r\n let [l, c, h] = values.map(Number);\r\n\r\n return {\r\n l: l > 1 ? l / 100 : l,\r\n c,\r\n h,\r\n };\r\n }\r\n\r\n const rgb = parseToRgb(input);\r\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\r\n return oklabToOklch(lab.L, lab.a, lab.b);\r\n}\r\n\r\nfunction parseToRgb(input: string) {\r\n input = input.trim().toLowerCase();\r\n\r\n if (input.startsWith(\"#\")) return parseHex(input);\r\n if (input.startsWith(\"rgb\")) return parseRgb(input);\r\n if (input.startsWith(\"hsl\")) return parseHsl(input);\r\n\r\n throw new Error(\"Unsupported format\");\r\n}\r\n\r\n/* ---------------- CORE MATH ---------------- */\r\n\r\nfunction srgbToLinear(c: number) {\r\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction rgbToOklab(r: number, g: number, b: number) {\r\n r = srgbToLinear(r);\r\n g = srgbToLinear(g);\r\n b = srgbToLinear(b);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n return {\r\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\r\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\r\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\r\n };\r\n}\r\n\r\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\r\n const c = Math.sqrt(a * a + b * b);\r\n let h = Math.atan2(b, a) * (180 / Math.PI);\r\n\r\n if (h < 0) h += 360;\r\n\r\n return { l: L, c, h };\r\n}\r\n\r\n/* ---------------- FORMAT ---------------- */\r\n\r\nfunction formatOklch(color: OKLCH, alpha = 1): string {\r\n const l = (color.l * 100).toFixed(2) + \"%\";\r\n const c = color.c.toFixed(4);\r\n const h = color.h.toFixed(2);\r\n\r\n return alpha === 1\r\n ? `oklch(${l} ${c} ${h})`\r\n : `oklch(${l} ${c} ${h} / ${alpha})`;\r\n}\r\n\r\n/* ---------------- UTILS ---------------- */\r\n\r\nfunction clamp(v: number, min = 0, max = 1) {\r\n return Math.min(max, Math.max(min, v));\r\n}\r\n\r\n\r\nconst SCALE = {\r\n subtle: 0.18,\r\n surface: 0.09,\r\n elevated: -0.10,\r\n emphasis: -0.18\r\n}\r\n\r\nfunction shift(base: OKLCH, amount: number): OKLCH {\r\n return {\r\n l: clamp(base.l + amount),\r\n c: base.c,\r\n h: base.h\r\n };\r\n}\r\n\r\n\r\nexport function createDarkThemePalette(input: string): ColorRole {\r\n const raw = toOKLCH(input);\r\n\r\n const base: OKLCH = {\r\n l: clamp(raw.l, 0.05, 0.95),\r\n c: Math.min(raw.c, 0.22),\r\n h: raw.h,\r\n };\r\n\r\n return {\r\n base: formatOklch(base),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n contrast: formatOklch({\r\n l: 0.94,\r\n c: 0.01,\r\n h: base.h\r\n }),\r\n\r\n muted: formatOklch({\r\n l: 0.72,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: 0.40,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.14)\r\n };\r\n}\r\n\r\nexport function createLightThemePalette(input: string): ColorRole {\r\n const raw = toOKLCH(input);\r\n\r\n const base: OKLCH = {\r\n l: clamp(raw.l, 0.05, 0.95),\r\n c: Math.min(raw.c, 0.22),\r\n h: raw.h,\r\n };\r\n\r\n return {\r\n base: formatOklch(base),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n contrast: formatOklch({\r\n l: 0.20,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n muted: formatOklch({\r\n l: 0.50,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: 0.88,\r\n c: 0,\r\n h: 0\r\n }),\r\n\r\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.2)\r\n };\r\n}\r\n\r\nexport function createPalette(input: string, mode: \"light\" | \"dark\" = \"light\"): ColorRole {\r\n const base = toOKLCH(input);\r\n const isDark = mode === \"dark\";\r\n const isLightColor = base.l > 0.75;\r\n const safeC = Math.min(base.c, 0.25);\r\n\r\n const main: OKLCH = {\r\n l: base.l,\r\n c: safeC,\r\n h: base.h\r\n };\r\n\r\n const contrast = {\r\n l: isLightColor ? 0.1 : 0.95,\r\n c: 0.02,\r\n h: base.h\r\n }\r\n\r\n return {\r\n\r\n base: formatOklch(main),\r\n\r\n surface: formatOklch(shift(base, SCALE.surface)),\r\n subtle: formatOklch(shift(base, SCALE.subtle)),\r\n\r\n elevated: formatOklch(shift(base, SCALE.elevated)),\r\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\r\n\r\n ghost: formatOklch({\r\n l: base.l,\r\n c: safeC * 0.45,\r\n h: base.h\r\n }, isDark ? 0.14 : 0.18),\r\n\r\n contrast: formatOklch(contrast),\r\n\r\n muted: formatOklch({\r\n l: isDark ? 0.72 : 0.50,\r\n c: 0.015,\r\n h: base.h\r\n }),\r\n\r\n divider: formatOklch({\r\n l: clamp(main.l + (isDark ? -0.15 : 0.15)),\r\n c: Math.min(main.c * 0.15, 0.02),\r\n h: main.h\r\n })\r\n };\r\n}\r\n/* ---------------- PARSERS ---------------- */\r\n\r\nfunction parseHex(hex: string) {\r\n hex = hex.replace(\"#\", \"\").trim();\r\n\r\n if (hex.length === 3) {\r\n hex = hex.split(\"\").map(c => c + c).join(\"\");\r\n }\r\n\r\n const num = parseInt(hex, 16);\r\n\r\n return {\r\n r: ((num >> 16) & 255) / 255,\r\n g: ((num >> 8) & 255) / 255,\r\n b: (num & 255) / 255,\r\n };\r\n}\r\n\r\nfunction parseRgb(input: string) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid RGB format\");\r\n }\r\n\r\n const [r, g, b] = values.map(Number);\r\n\r\n return {\r\n r: r / 255,\r\n g: g / 255,\r\n b: b / 255,\r\n };\r\n}\r\n\r\nfunction parseHsl(input: string) {\r\n const values = input.match(/[\\d.]+/g);\r\n if (!values || values.length < 3) {\r\n throw new Error(\"Invalid HSL format\");\r\n }\r\n\r\n let [h, s, l] = values.map(Number);\r\n\r\n h /= 360;\r\n s /= 100;\r\n l /= 100;\r\n\r\n const hue2rgb = (p: number, q: number, t: number) => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n };\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n const p = 2 * l - q;\r\n\r\n return {\r\n r: hue2rgb(p, q, h + 1 / 3),\r\n g: hue2rgb(p, q, h),\r\n b: hue2rgb(p, q, h - 1 / 3),\r\n };\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oklch.js","sources":["../../src/theme/oklch.ts"],"sourcesContent":["type OKLCH = {\n l: number;\n c: number;\n h: number;\n};\n\ntype ColorRole = {\n base: string;\n surface: string;\n subtle: string;\n elevated: string;\n emphasis: string;\n contrast: string;\n muted: string;\n ghost: string;\n divider: string;\n};\n\n/* ---------------- PARSERS ---------------- */\n\nexport function toOKLCH(input: string): OKLCH {\n if (input.startsWith(\"oklch\")) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid OKLCH format\");\n }\n\n let [l, c, h] = values.map(Number);\n\n return {\n l: l > 1 ? l / 100 : l,\n c,\n h,\n };\n }\n\n const rgb = parseToRgb(input);\n const lab = rgbToOklab(rgb.r, rgb.g, rgb.b);\n return oklabToOklch(lab.L, lab.a, lab.b);\n}\n\nfunction parseToRgb(input: string) {\n input = input.trim().toLowerCase();\n\n if (input.startsWith(\"#\")) return parseHex(input);\n if (input.startsWith(\"rgb\")) return parseRgb(input);\n if (input.startsWith(\"hsl\")) return parseHsl(input);\n\n throw new Error(\"Unsupported format\");\n}\n\n/* ---------------- CORE MATH ---------------- */\n\nfunction srgbToLinear(c: number) {\n return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\nfunction rgbToOklab(r: number, g: number, b: number) {\n r = srgbToLinear(r);\n g = srgbToLinear(g);\n b = srgbToLinear(b);\n\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n\n const l_ = Math.cbrt(l);\n const m_ = Math.cbrt(m);\n const s_ = Math.cbrt(s);\n\n return {\n L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,\n a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,\n b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_,\n };\n}\n\nfunction oklabToOklch(L: number, a: number, b: number): OKLCH {\n const c = Math.sqrt(a * a + b * b);\n let h = Math.atan2(b, a) * (180 / Math.PI);\n\n if (h < 0) h += 360;\n\n return { l: L, c, h };\n}\n\n/* ---------------- FORMAT ---------------- */\n\nfunction formatOklch(color: OKLCH, alpha = 1): string {\n const l = (color.l * 100).toFixed(2) + \"%\";\n const c = color.c.toFixed(4);\n const h = color.h.toFixed(2);\n\n return alpha === 1\n ? `oklch(${l} ${c} ${h})`\n : `oklch(${l} ${c} ${h} / ${alpha})`;\n}\n\n/* ---------------- UTILS ---------------- */\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(max, Math.max(min, v));\n}\n\n\nconst SCALE = {\n subtle: 0.18,\n surface: 0.09,\n elevated: -0.10,\n emphasis: -0.18\n}\n\n// function shift(base: OKLCH, amount: number): OKLCH {\n// return {\n// l: clamp(base.l + amount),\n// c: base.c,\n// h: base.h\n// };\n// }\n\nfunction shift(base: OKLCH, amount: number): OKLCH {\n const nextL = clamp(base.l + amount);\n\n // reduce chroma when moving away from middle lightness\n const distanceFromMid = Math.abs(nextL - 0.6);\n\n const chromaScale = 1 - distanceFromMid * 0.7;\n\n return {\n l: nextL,\n c: clamp(base.c * chromaScale, 0, 0.18),\n h: base.h\n };\n}\n\n\nexport function createDarkThemePalette(input: string): ColorRole {\n const raw = toOKLCH(input);\n\n const base: OKLCH = {\n l: clamp(raw.l, 0.05, 0.95),\n c: Math.min(raw.c, 0.16),\n h: raw.h,\n };\n\n return {\n base: formatOklch(base),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n contrast: formatOklch({\n l: 0.94,\n c: 0.01,\n h: base.h\n }),\n\n muted: formatOklch({\n l: 0.72,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: 0.40,\n c: 0,\n h: 0\n }),\n\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.14)\n };\n}\n\nexport function createLightThemePalette(input: string): ColorRole {\n const raw = toOKLCH(input);\n\n const base: OKLCH = {\n l: clamp(raw.l, 0.05, 0.95),\n c: Math.min(raw.c, 0.16),\n h: raw.h,\n };\n\n return {\n base: formatOklch(base),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n contrast: formatOklch({\n l: 0.20,\n c: 0,\n h: 0\n }),\n\n muted: formatOklch({\n l: 0.50,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: 0.88,\n c: 0,\n h: 0\n }),\n\n ghost: formatOklch(shift(base, SCALE.emphasis), 0.2)\n };\n}\n\nexport function createPalette(input: string, mode: \"light\" | \"dark\" = \"light\"): ColorRole {\n const base = toOKLCH(input);\n const isDark = mode === \"dark\";\n const isLightColor = base.l > 0.75;\n const safeC = Math.min(base.c, 0.16);\n\n const main: OKLCH = {\n l: base.l,\n c: safeC,\n h: base.h\n };\n\n const contrast = {\n l: isLightColor ? 0.1 : 0.95,\n c: 0.02,\n h: base.h\n }\n\n return {\n\n base: formatOklch(main),\n\n surface: formatOklch(shift(base, SCALE.surface)),\n subtle: formatOklch(shift(base, SCALE.subtle)),\n\n elevated: formatOklch(shift(base, SCALE.elevated)),\n emphasis: formatOklch(shift(base, SCALE.emphasis)),\n\n ghost: formatOklch({\n l: base.l,\n c: safeC * 0.45,\n h: base.h\n }, isDark ? 0.14 : 0.18),\n\n contrast: formatOklch(contrast),\n\n muted: formatOklch({\n l: isDark ? 0.72 : 0.50,\n c: 0.015,\n h: base.h\n }),\n\n divider: formatOklch({\n l: clamp(main.l + (isDark ? -0.15 : 0.15)),\n c: Math.min(main.c * 0.15, 0.02),\n h: main.h\n })\n };\n}\n/* ---------------- PARSERS ---------------- */\n\nfunction parseHex(hex: string) {\n hex = hex.replace(\"#\", \"\").trim();\n\n if (hex.length === 3) {\n hex = hex.split(\"\").map(c => c + c).join(\"\");\n }\n\n const num = parseInt(hex, 16);\n\n return {\n r: ((num >> 16) & 255) / 255,\n g: ((num >> 8) & 255) / 255,\n b: (num & 255) / 255,\n };\n}\n\nfunction parseRgb(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid RGB format\");\n }\n\n const [r, g, b] = values.map(Number);\n\n return {\n r: r / 255,\n g: g / 255,\n b: b / 255,\n };\n}\n\nfunction parseHsl(input: string) {\n const values = input.match(/[\\d.]+/g);\n if (!values || values.length < 3) {\n throw new Error(\"Invalid HSL format\");\n }\n\n let [h, s, l] = values.map(Number);\n\n h /= 360;\n s /= 100;\n l /= 100;\n\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: hue2rgb(p, q, h + 1 / 3),\n g: hue2rgb(p, q, h),\n b: hue2rgb(p, q, h - 1 / 3),\n };\n}\n"],"names":[],"mappings":"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"}