boreal-ui 0.0.30 → 0.0.31
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/dist/core/{Footer-kLL_3Qc-.cjs → Footer-B6ybz8yK.cjs} +18 -20
- package/dist/core/Footer-B6ybz8yK.cjs.map +1 -0
- package/dist/core/{Footer-CPg_4j5r.js → Footer-C0OiicSH.js} +18 -20
- package/dist/core/Footer-C0OiicSH.js.map +1 -0
- package/dist/core/Footer.cjs.js +1 -1
- package/dist/core/Footer.js +1 -1
- package/dist/core/{ThemeContext-B-z-faEj.js → ThemeContext-DJ18CFaV.js} +33 -6
- package/dist/core/ThemeContext-DJ18CFaV.js.map +1 -0
- package/dist/core/{ThemeContext-CtNdJ7LK.cjs → ThemeContext-D_SPnedS.cjs} +31 -4
- package/dist/core/ThemeContext-D_SPnedS.cjs.map +1 -0
- package/dist/core/ThemeProvider.cjs.js +1 -1
- package/dist/core/ThemeProvider.js +1 -1
- package/dist/core/index.cjs.js +2 -2
- package/dist/core/index.js +2 -2
- package/dist/next/{Footer-BvAAYL0M.cjs → Footer-DCYc1MZV.cjs} +17 -19
- package/dist/next/Footer-DCYc1MZV.cjs.map +1 -0
- package/dist/next/{Footer-D18LIc08.js → Footer-DHkI2Lbi.js} +17 -19
- package/dist/next/Footer-DHkI2Lbi.js.map +1 -0
- package/dist/next/Footer.cjs.js +1 -1
- package/dist/next/Footer.js +1 -1
- package/dist/next/{ThemeContext-B-z-faEj.js → ThemeContext-DJ18CFaV.js} +33 -6
- package/dist/next/ThemeContext-DJ18CFaV.js.map +1 -0
- package/dist/next/{ThemeContext-BHzkqvlv.cjs → ThemeContext-Iy-HHefR.cjs} +31 -4
- package/dist/next/ThemeContext-Iy-HHefR.cjs.map +1 -0
- package/dist/next/ThemeProvider.cjs.js +1 -1
- package/dist/next/ThemeProvider.js +1 -1
- package/dist/next/index.cjs.js +2 -4
- package/dist/next/index.cjs.js.map +1 -1
- package/dist/next/index.js +19 -21
- package/dist/next/index.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/components/Select/ThemeSelect/core/ThemeSelect.d.ts.map +1 -1
- package/dist/types/components/Select/ThemeSelect/next/ThemeSelect.d.ts.map +1 -1
- package/dist/types/context/ThemeContext.d.ts.map +1 -1
- package/dist/types/context/ThemeContext.types.d.ts +2 -0
- package/dist/types/context/ThemeContext.types.d.ts.map +1 -1
- package/dist/types/index.next.d.ts +0 -1
- package/dist/types/index.next.d.ts.map +1 -1
- package/package.json +1 -6
- package/dist/core/Footer-CPg_4j5r.js.map +0 -1
- package/dist/core/Footer-kLL_3Qc-.cjs.map +0 -1
- package/dist/core/ThemeContext-B-z-faEj.js.map +0 -1
- package/dist/core/ThemeContext-CtNdJ7LK.cjs.map +0 -1
- package/dist/next/Footer-BvAAYL0M.cjs.map +0 -1
- package/dist/next/Footer-D18LIc08.js.map +0 -1
- package/dist/next/ThemeContext-B-z-faEj.js.map +0 -1
- package/dist/next/ThemeContext-BHzkqvlv.cjs.map +0 -1
- package/dist/next/ThemeInitScript-B22_wzIJ.cjs +0 -37
- package/dist/next/ThemeInitScript-B22_wzIJ.cjs.map +0 -1
- package/dist/next/ThemeInitScript-D6EpWMC9.js +0 -38
- package/dist/next/ThemeInitScript-D6EpWMC9.js.map +0 -1
- package/dist/next/ThemeInitScript.cjs.js +0 -4
- package/dist/next/ThemeInitScript.cjs.js.map +0 -1
- package/dist/next/ThemeInitScript.js +0 -5
- package/dist/next/ThemeInitScript.js.map +0 -1
- package/dist/types/context/ThemeInitScript.d.ts +0 -3
- package/dist/types/context/ThemeInitScript.d.ts.map +0 -1
- package/dist/types/context/ThemeInitScript.types.d.ts +0 -7
- package/dist/types/context/ThemeInitScript.types.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ThemeSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/E,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAuCjD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Select/ThemeSelect/next/ThemeSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"ThemeSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Select/ThemeSelect/next/ThemeSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAO/E,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAuCjD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAC;AAOf,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,eAAO,MAAM,YAAY,6CAExB,CAAC;AAkBF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAC3B,kBAAkB,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAiLhD,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -27,6 +27,7 @@ export interface ThemeProviderProps {
|
|
|
27
27
|
* Context value provided by the ThemeProvider.
|
|
28
28
|
*
|
|
29
29
|
* @property {number} selectedScheme - Index of the currently active color scheme.
|
|
30
|
+
* @property {ColorScheme[]} schemes - Array of available color schemes.
|
|
30
31
|
* @property {Dispatch<SetStateAction<number>>} setSelectedScheme - Function to update the selected scheme index.
|
|
31
32
|
*
|
|
32
33
|
* @example
|
|
@@ -34,6 +35,7 @@ export interface ThemeProviderProps {
|
|
|
34
35
|
*/
|
|
35
36
|
export interface ThemeContextType {
|
|
36
37
|
selectedScheme: number;
|
|
38
|
+
schemes: ColorScheme[];
|
|
37
39
|
setSelectedScheme: React.Dispatch<React.SetStateAction<number>>;
|
|
38
40
|
}
|
|
39
41
|
//# sourceMappingURL=ThemeContext.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext.types.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeContext.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED
|
|
1
|
+
{"version":3,"file":"ThemeContext.types.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeContext.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;CACjE"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * from "./types/index";
|
|
2
2
|
export { default as ThemeProvider, ThemeContext } from "./context/ThemeContext";
|
|
3
3
|
export { registerColorScheme } from "./styles/colorSchemeRegistry";
|
|
4
|
-
export { default as ThemeInitScript } from "./context/ThemeInitScript";
|
|
5
4
|
export { colorSchemes } from "./styles/Themes";
|
|
6
5
|
export { setBorealStyleConfig } from "./config/boreal-style-config";
|
|
7
6
|
export { default as Button } from "./components/Button/next/Button";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.next.d.ts","sourceRoot":"","sources":["../../src/index.next.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.next.d.ts","sourceRoot":"","sources":["../../src/index.next.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boreal-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.31",
|
|
4
4
|
"description": "A modern, customizable React/Next.js component library",
|
|
5
5
|
"author": "Davin Chiupka",
|
|
6
6
|
"license": "ISC",
|
|
@@ -530,11 +530,6 @@
|
|
|
530
530
|
"import": "./dist/next/registerColorSheme.js",
|
|
531
531
|
"require": "./dist/next/registerColorSheme.cjs.js"
|
|
532
532
|
},
|
|
533
|
-
"./next/ThemeInitScript": {
|
|
534
|
-
"import": "./dist/next/ThemeInitScript.js",
|
|
535
|
-
"require": "./dist/next/ThemeInitScript.cjs.js",
|
|
536
|
-
"types": "./dist/types/context/ThemeInitScript.d.ts"
|
|
537
|
-
},
|
|
538
533
|
"./next/ScrollToTop": {
|
|
539
534
|
"import": "./dist/next/ScrollToTop.js",
|
|
540
535
|
"require": "./dist/next/ScrollToTop.cjs.js"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-CPg_4j5r.js","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport { RoundingType, ShadowType, StateType, ThemeType } from \"@/types/types\";\r\nimport { getAllColorSchemes } from \"../../../../styles/colorSchemeRegistry\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\n\r\ninterface ThemeSelectProps {\r\n theme?: ThemeType;\r\n shadow?: ShadowType;\r\n rounding?: RoundingType;\r\n \"data-testid\"?: string;\r\n state?: StateType;\r\n}\r\n\r\nconst UserThemeSettings: React.FC<ThemeSelectProps> = ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n}) => {\r\n const allSchemes = getAllColorSchemes();\r\n const themeContext = useContext(ThemeContext);\r\n\r\n if (!themeContext) {\r\n throw new Error(\r\n \"ThemeContext is undefined. Make sure to wrap this component with ThemeProvider.\"\r\n );\r\n }\r\n\r\n const { selectedScheme, setSelectedScheme } = themeContext;\r\n\r\n const options = allSchemes.map((scheme, index) => ({\r\n value: index.toString(),\r\n label: scheme.name,\r\n }));\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n shadow={shadow}\r\n rounding={rounding}\r\n state={state}\r\n data-testid={`${testId}-select`}\r\n options={options}\r\n value={selectedScheme.toString()}\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(value as string, 10))\r\n }\r\n ariaLabel=\"Select Theme\"\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserThemeSettings;\r\n","import React, { JSX, useMemo } from \"react\";\r\nimport { FooterProps } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nexport interface BaseFooterProps extends FooterProps {\r\n IconButton: React.ComponentType<any>;\r\n ThemeSelect: React.ComponentType<any>;\r\n ImageComponent?: React.ElementType;\r\n classMap: Record<string, string>;\r\n LinkWrapper?: (props: {\r\n href: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n [key: string]: any;\r\n }) => JSX.Element;\r\n}\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children }) => <a href={href}>{children}</a>,\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n classMap[`shadow${capitalize(shadow)}`],\r\n classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, className]\r\n );\r\n return (\r\n <footer\r\n className={footerClass}\r\n role=\"contentinfo\"\r\n aria-label=\"Footer\"\r\n data-testid={testId}\r\n >\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {logo &&\r\n (typeof logo === \"string\" ||\r\n (typeof logo === \"object\" && \"src\" in logo)) ? (\r\n <ImageComponent\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logo}\r\n alt=\"Logo\"\r\n height={20}\r\n width={20}\r\n />\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {logo}\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div className={classMap.left} data-testid={`${testId}-copyright`}>\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul role=\"list\">\r\n {links.map((link, i) => (\r\n <li key={i}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${link.label.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n ))}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n aria-label=\"Theme selector container\"\r\n >\r\n <ThemeSelect theme={\"clear\"} shadow={\"none\"} />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <div\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n role=\"navigation\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={index}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["IconButton","ThemeSelect"],"mappings":";;;;;;;;;AAmBA,MAAM,oBAAgD,CAAC;AAAA,EACrD,QAAQ,gBAAA;AAAA,EACR,SAAS,iBAAA;AAAA,EACT,WAAW,mBAAA;AAAA,EACX,eAAe,SAAS;AAAA,EACxB,QAAQ;AACV,MAAM;AACJ,QAAM,aAAa,mBAAA;AACnB,QAAM,eAAe,WAAW,YAAY;AAE5C,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,EAAE,gBAAgB,kBAAA,IAAsB;AAE9C,QAAM,UAAU,WAAW,IAAI,CAAC,QAAQ,WAAW;AAAA,IACjD,OAAO,MAAM,SAAA;AAAA,IACb,OAAO,OAAO;AAAA,EAAA,EACd;AAEF,SACE,oBAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAa,GAAG,MAAM;AAAA,MACtB;AAAA,MACA,OAAO,eAAe,SAAA;AAAA,MACtB,UAAU,CAAC,UACT,kBAAkB,SAAS,OAAiB,EAAE,CAAC;AAAA,MAEjD,WAAU;AAAA,IAAA;AAAA,EAAA,GAEd;AAEJ;ACxCA,MAAM,aAAwC,CAAC;AAAA,EAC7C,QAAQ,gBAAA;AAAA,EACR,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,eAAe,SAAS;AAAA,EACxB;AAAA,EACA,QAAQ,CAAA;AAAA,EACR;AAAA,EACA,cAAc,CAAA;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAAA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,cAAc,CAAC,EAAE,MAAM,eAAe,oBAAC,KAAA,EAAE,MAAa,SAAA,CAAS;AACjE,MAAM;AACJ,QAAM,cAAc;AAAA,IAClB,MACE;AAAA,MACE,SAAS;AAAA,MACT,SAAS,KAAK;AAAA,MACd,SAAS,SAAS,WAAW,MAAM,CAAC,EAAE;AAAA,MACtC,SAAS,QAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,MACvC,SAAS,aAAa,WAAW,UAAU,CAAC,EAAE;AAAA,MAC9C;AAAA,IAAA;AAAA,IAEJ,CAAC,UAAU,OAAO,SAAS;AAAA,EAAA;AAE7B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,MAAK;AAAA,MACL,cAAW;AAAA,MACX,eAAa;AAAA,MAEb,UAAA,qBAAC,OAAA,EAAI,WAAW,SAAS,SACvB,UAAA;AAAA,QAAA,qBAAC,SAAI,WAAW,SAAS,MAAM,eAAa,GAAG,MAAM,SAClD,UAAA;AAAA,UAAA,SACA,OAAO,SAAS,YACd,OAAO,SAAS,YAAY,SAAS,QACtC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,SAAS;AAAA,cACpB,cAAW;AAAA,cACX,MAAK;AAAA,cACL,eAAa,GAAG,MAAM;AAAA,cACtB,SAAQ;AAAA,cACR,KAAK;AAAA,cACL,KAAI;AAAA,cACJ,QAAQ;AAAA,cACR,OAAO;AAAA,YAAA;AAAA,UAAA,IAGT;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,SAAS;AAAA,cACpB,cAAW;AAAA,cACX,MAAK;AAAA,cACL,eAAa,GAAG,MAAM;AAAA,cAErB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,aACC,oBAAC,OAAA,EAAI,WAAW,SAAS,MAAM,eAAa,GAAG,MAAM,cACnD,UAAA,oBAAC,KAAA,EAAG,qBAAU,EAAA,CAChB;AAAA,QAAA,GAEJ;AAAA,QAEC,MAAM,SAAS,KACd;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,cAAW;AAAA,YACX,eAAa,GAAG,MAAM;AAAA,YAEtB,UAAA,oBAAC,MAAA,EAAG,MAAK,QACN,UAAA,MAAM,IAAI,CAAC,MAAM,MAChB,oBAAC,MAAA,EACC,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAM,KAAK;AAAA,gBACX,WAAW,SAAS;AAAA,gBACpB,eAAa,GAAG,MAAM,SAAS,KAAK,MAAM,YAAA,EAAc,QAAQ,QAAQ,GAAG,CAAC;AAAA,gBAE3E,UAAA,KAAK;AAAA,cAAA;AAAA,YAAA,EACR,GAPO,CAQT,CACD,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAIH,mBACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,eAAa,GAAG,MAAM;AAAA,YACtB,cAAW;AAAA,YAEX,UAAA,oBAAC,aAAA,EAAY,OAAO,SAAS,QAAQ,OAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIhD,YAAY,SAAS,KACpB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,cAAW;AAAA,YACX,MAAK;AAAA,YACL,eAAa,GAAG,MAAM;AAAA,YAErB,UAAA,YAAY,IAAI,CAAC,QAAQ,UACxB;AAAA,cAACA;AAAA,cAAA;AAAA,gBAEC,MAAM,OAAO;AAAA,gBACb,MAAM,OAAO;AAAA,gBACb,YAAU;AAAA,gBACV,QAAO;AAAA,gBACP,QAAO;AAAA,gBACP,KAAI;AAAA,gBACJ,WAAW,OAAO;AAAA,gBAClB,OAAO,OAAO;AAAA,gBACd,OAAM;AAAA,gBACN,eAAa,GAAG,MAAM,WAAW,OAAO,MACrC,cACA,QAAQ,QAAQ,GAAG,CAAC;AAAA,cAAA;AAAA,cAZlB;AAAA,YAAA,CAcR;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AChJA,MAAM,UAAU;AAAA,EACd,QAAQ;AAAA,EAER,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA,EAEP,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EAEf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EAEZ,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAElB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EAER,aAAa;AACf;AAEA,MAAM,SAAgC,CAAC,UAAU;AAC/C,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MAAA,aACAC;AAAAA,MACA,UAAU;AAAA,IAAA;AAAA,EAAA;AAGhB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-kLL_3Qc-.cjs","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport { RoundingType, ShadowType, StateType, ThemeType } from \"@/types/types\";\r\nimport { getAllColorSchemes } from \"../../../../styles/colorSchemeRegistry\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\n\r\ninterface ThemeSelectProps {\r\n theme?: ThemeType;\r\n shadow?: ShadowType;\r\n rounding?: RoundingType;\r\n \"data-testid\"?: string;\r\n state?: StateType;\r\n}\r\n\r\nconst UserThemeSettings: React.FC<ThemeSelectProps> = ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n}) => {\r\n const allSchemes = getAllColorSchemes();\r\n const themeContext = useContext(ThemeContext);\r\n\r\n if (!themeContext) {\r\n throw new Error(\r\n \"ThemeContext is undefined. Make sure to wrap this component with ThemeProvider.\"\r\n );\r\n }\r\n\r\n const { selectedScheme, setSelectedScheme } = themeContext;\r\n\r\n const options = allSchemes.map((scheme, index) => ({\r\n value: index.toString(),\r\n label: scheme.name,\r\n }));\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n shadow={shadow}\r\n rounding={rounding}\r\n state={state}\r\n data-testid={`${testId}-select`}\r\n options={options}\r\n value={selectedScheme.toString()}\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(value as string, 10))\r\n }\r\n ariaLabel=\"Select Theme\"\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserThemeSettings;\r\n","import React, { JSX, useMemo } from \"react\";\r\nimport { FooterProps } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nexport interface BaseFooterProps extends FooterProps {\r\n IconButton: React.ComponentType<any>;\r\n ThemeSelect: React.ComponentType<any>;\r\n ImageComponent?: React.ElementType;\r\n classMap: Record<string, string>;\r\n LinkWrapper?: (props: {\r\n href: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n [key: string]: any;\r\n }) => JSX.Element;\r\n}\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children }) => <a href={href}>{children}</a>,\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n classMap[`shadow${capitalize(shadow)}`],\r\n classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, className]\r\n );\r\n return (\r\n <footer\r\n className={footerClass}\r\n role=\"contentinfo\"\r\n aria-label=\"Footer\"\r\n data-testid={testId}\r\n >\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {logo &&\r\n (typeof logo === \"string\" ||\r\n (typeof logo === \"object\" && \"src\" in logo)) ? (\r\n <ImageComponent\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logo}\r\n alt=\"Logo\"\r\n height={20}\r\n width={20}\r\n />\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {logo}\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div className={classMap.left} data-testid={`${testId}-copyright`}>\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul role=\"list\">\r\n {links.map((link, i) => (\r\n <li key={i}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${link.label.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n ))}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n aria-label=\"Theme selector container\"\r\n >\r\n <ThemeSelect theme={\"clear\"} shadow={\"none\"} />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <div\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n role=\"navigation\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={index}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["getDefaultTheme","getDefaultShadow","getDefaultRounding","getAllColorSchemes","useContext","ThemeContext","jsx","Select","IconButton","useMemo","combineClassNames","capitalize","jsxs","ThemeSelect"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext-B-z-faEj.js","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":[],"mappings":";;;;;AAoDO,MAAM,eAAe;AAAA,EAC1B;AACF;AAEA,MAAM,gBAAgB,aAAa;AAAA,EACjC,CAAC,WAAW,OAAO,SAAS,0BAAA;AAC9B;AACA,MAAM,eAAe,kBAAkB,KAAK,gBAAgB;AAE5D,MAAM,cAAc;AAEpB,MAAM,gBAEF,CAAC,EAAE,UAAU,gBAAgB,CAAA,GAAI,oBAAoB;AACvD,MAAI,kBAAkB,MAAM,QAAQ,IAAI,aAAa,eAAe;AAClE,YAAQ;AAAA,MACN,yBAAyB,2BAA2B;AAAA,IAAA;AAAA,EAExD;AAEA,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAiB,MAAM;AACjE,QAAI,OAAO,kBAAkB,SAAU,QAAO;AAE9C,QAAI,OAAO,WAAW,aAAa;AACjC,UAAI;AACF,cAAM,QAAQ,aAAa,QAAQ,WAAW;AAC9C,YAAI,SAAS,KAAM,QAAO,SAAS,OAAO,EAAE;AAAA,MAC9C,QAAQ;AACN,gBAAQ,MAAM,kCAAkC;AAAA,MAClD;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,YAAU,MAAM;AACd,wBAAoB,aAAa;AAAA,EACnC,GAAG,CAAC,aAAa,CAAC;AAElB,kBAAgB,MAAM;AACpB,UAAM,aAAa,mBAAA;AACnB,UAAM,SAAS,WAAW,cAAc,KAAK,WAAW,YAAY;AAEpE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE;AAEJ,UAAM,WAAW,CAAC,QAAgB;AAChC,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,GAC1B,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AACxB,UAAI,IAAI,GACN,IAAI;AACN,YAAM,KAAK,MAAM,OAAO;AACxB,UAAI,QAAQ,KAAK;AACf,cAAM,IAAI,MAAM;AAChB,YAAI,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;AAC/C,gBAAQ,KAAA;AAAA,UACN,KAAK;AACH,iBAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI;AAC/B;AAAA,UACF,KAAK;AACH,iBAAK,IAAI,KAAK,IAAI;AAClB;AAAA,UACF,KAAK;AACH,iBAAK,IAAI,KAAK,IAAI;AAClB;AAAA,QAAA;AAEJ,aAAK;AAAA,MACP;AACA,aAAO;AAAA,QACL,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,QACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,QACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,MAAA;AAAA,IAEzB;AAEA,UAAM,WAAW,CAAC,GAAW,GAAW,MAAsB;AAC5D,WAAK;AACL,WAAK;AACL,YAAM,IAAI,CAAC,OAAe,IAAI,IAAI,MAAM;AACxC,YAAM,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;AAC/B,YAAM,IAAI,CAAC,MACT,KAAK;AAAA,QACH,OACG,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,MAAA;AAErE,aAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA,IACpF;AAEA,UAAM,kBAAkB,CAAC,KAAa,YAA4B;AAChE,YAAM,EAAE,GAAG,GAAG,EAAA,IAAM,SAAS,GAAG;AAChC,aAAO,SAAS,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC;AAAA,IAC/D;AAEA,UAAM,oBAAoB,CAAC,QAAwB;AACjD,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AAC/B,cAAM,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI;AAC9C,eAAO,KAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,IAAI,SAAS,OAAO,GAAG;AAAA,MACrE,CAAC;AACD,aAAO,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,gBAAgB,CAAC,GAAW,MAAsB;AACtD,YAAM,OAAO,kBAAkB,CAAC;AAChC,YAAM,OAAO,kBAAkB,CAAC;AAChC,YAAM,UAAU,KAAK,IAAI,MAAM,IAAI;AACnC,YAAM,SAAS,KAAK,IAAI,MAAM,IAAI;AAClC,cAAQ,UAAU,SAAS,SAAS;AAAA,IACtC;AAEA,UAAM,yBAAyB,CAAC,OAC9B,cAAc,IAAI,SAAS,KAAK,MAAM,YAAY;AAEpD,UAAM,OAAO;AAAA,MACX,mBAAmB;AAAA,MACnB,yBAAyB,gBAAgB,cAAc,EAAE;AAAA,MACzD,yBAAyB,gBAAgB,cAAc,GAAG;AAAA,MAC1D,wBACE,kBAAkB,uBAAuB,YAAY;AAAA,MAEvD,qBAAqB;AAAA,MACrB,2BAA2B,gBAAgB,gBAAgB,EAAE;AAAA,MAC7D,2BAA2B,gBAAgB,gBAAgB,GAAG;AAAA,MAC9D,0BAA0B,uBAAuB,cAAc;AAAA,MAE/D,oBAAoB;AAAA,MACpB,0BAA0B,gBAAgB,eAAe,EAAE;AAAA,MAC3D,0BAA0B,gBAAgB,eAAe,GAAG;AAAA,MAC5D,yBAAyB,uBAAuB,aAAa;AAAA,MAE7D,sBAAsB;AAAA,MACtB,4BAA4B,gBAAgB,iBAAiB,EAAE;AAAA,MAC/D,4BAA4B,gBAAgB,iBAAiB,GAAG;AAAA,MAChE,2BAA2B,uBAAuB,eAAe;AAAA,MAEjE,sBAAsB;AAAA,MACtB,2BAA2B,gBAAgB,iBAAiB,GAAG;AAAA,MAC/D,6BAA6B,gBAAgB,iBAAiB,GAAG;AAAA,MACjE,4BAA4B,gBAAgB,iBAAiB,EAAE;AAAA,MAC/D,8BAA8B,gBAAgB,iBAAiB,EAAE;AAAA,MAEjE,gBAAgB,uBAAuB,eAAe;AAAA,MACtD,sBAAsB;AAAA,QACpB,uBAAuB,eAAe;AAAA,QACtC;AAAA,MAAA;AAAA,MAEF,8BAA8B,gBAAgB,cAAc,GAAG;AAAA,MAC/D,gCAAgC,gBAAgB,gBAAgB,GAAG;AAAA,IAAA;AAGrE,UAAM,YAAY,SAAS,gBAAgB;AAC3C,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAG,WAAU,YAAY,GAAG,CAAC;AAErE,QAAI;AACF,mBAAa,QAAQ,aAAa,OAAO,cAAc,CAAC;AAAA,IAC1D,QAAQ;AACN,cAAQ,MAAM,4BAA4B;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SACE,oBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,gBAAgB,qBAC7C,UACH;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext-CtNdJ7LK.cjs","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":["createContext","colorSchemes","getDefaultColorSchemeName","useState","useEffect","registerColorScheme","useLayoutEffect","getAllColorSchemes","jsx"],"mappings":";;;;;;AAoDO,MAAM,eAAeA,MAAAA;AAAAA,EAC1B;AACF;AAEA,MAAM,gBAAgBC,aAAAA,aAAa;AAAA,EACjC,CAAC,WAAW,OAAO,SAASC,kBAAAA,0BAAA;AAC9B;AACA,MAAM,eAAe,kBAAkB,KAAK,gBAAgB;AAE5D,MAAM,cAAc;AAEpB,MAAM,gBAEF,CAAC,EAAE,UAAU,gBAAgB,CAAA,GAAI,oBAAoB;AACvD,MAAI,kBAAkB,MAAM,QAAQ,IAAI,aAAa,eAAe;AAClE,YAAQ;AAAA,MACN,yBAAyBA,kBAAAA,2BAA2B;AAAA,IAAA;AAAA,EAExD;AAEA,QAAM,CAAC,gBAAgB,iBAAiB,IAAIC,MAAAA,SAAiB,MAAM;AACjE,QAAI,OAAO,kBAAkB,SAAU,QAAO;AAE9C,QAAI,OAAO,WAAW,aAAa;AACjC,UAAI;AACF,cAAM,QAAQ,aAAa,QAAQ,WAAW;AAC9C,YAAI,SAAS,KAAM,QAAO,SAAS,OAAO,EAAE;AAAA,MAC9C,QAAQ;AACN,gBAAQ,MAAM,kCAAkC;AAAA,MAClD;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAEDC,QAAAA,UAAU,MAAM;AACdC,uBAAAA,oBAAoB,aAAa;AAAA,EACnC,GAAG,CAAC,aAAa,CAAC;AAElBC,QAAAA,gBAAgB,MAAM;AACpB,UAAM,aAAaC,mBAAAA,mBAAA;AACnB,UAAM,SAAS,WAAW,cAAc,KAAK,WAAW,YAAY;AAEpE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE;AAEJ,UAAM,WAAW,CAAC,QAAgB;AAChC,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,IAAI,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAC1C,YAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,GAC1B,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AACxB,UAAI,IAAI,GACN,IAAI;AACN,YAAM,KAAK,MAAM,OAAO;AACxB,UAAI,QAAQ,KAAK;AACf,cAAM,IAAI,MAAM;AAChB,YAAI,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;AAC/C,gBAAQ,KAAA;AAAA,UACN,KAAK;AACH,iBAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI;AAC/B;AAAA,UACF,KAAK;AACH,iBAAK,IAAI,KAAK,IAAI;AAClB;AAAA,UACF,KAAK;AACH,iBAAK,IAAI,KAAK,IAAI;AAClB;AAAA,QAAA;AAEJ,aAAK;AAAA,MACP;AACA,aAAO;AAAA,QACL,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,QACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,QACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,MAAA;AAAA,IAEzB;AAEA,UAAM,WAAW,CAAC,GAAW,GAAW,MAAsB;AAC5D,WAAK;AACL,WAAK;AACL,YAAM,IAAI,CAAC,OAAe,IAAI,IAAI,MAAM;AACxC,YAAM,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;AAC/B,YAAM,IAAI,CAAC,MACT,KAAK;AAAA,QACH,OACG,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,MAAA;AAErE,aAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA,IACpF;AAEA,UAAM,kBAAkB,CAAC,KAAa,YAA4B;AAChE,YAAM,EAAE,GAAG,GAAG,EAAA,IAAM,SAAS,GAAG;AAChC,aAAO,SAAS,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC;AAAA,IAC/D;AAEA,UAAM,oBAAoB,CAAC,QAAwB;AACjD,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AAC/B,cAAM,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI;AAC9C,eAAO,KAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,IAAI,SAAS,OAAO,GAAG;AAAA,MACrE,CAAC;AACD,aAAO,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;AAAA,IAC3D;AAEA,UAAM,gBAAgB,CAAC,GAAW,MAAsB;AACtD,YAAM,OAAO,kBAAkB,CAAC;AAChC,YAAM,OAAO,kBAAkB,CAAC;AAChC,YAAM,UAAU,KAAK,IAAI,MAAM,IAAI;AACnC,YAAM,SAAS,KAAK,IAAI,MAAM,IAAI;AAClC,cAAQ,UAAU,SAAS,SAAS;AAAA,IACtC;AAEA,UAAM,yBAAyB,CAAC,OAC9B,cAAc,IAAI,SAAS,KAAK,MAAM,YAAY;AAEpD,UAAM,OAAO;AAAA,MACX,mBAAmB;AAAA,MACnB,yBAAyB,gBAAgB,cAAc,EAAE;AAAA,MACzD,yBAAyB,gBAAgB,cAAc,GAAG;AAAA,MAC1D,wBACE,kBAAkB,uBAAuB,YAAY;AAAA,MAEvD,qBAAqB;AAAA,MACrB,2BAA2B,gBAAgB,gBAAgB,EAAE;AAAA,MAC7D,2BAA2B,gBAAgB,gBAAgB,GAAG;AAAA,MAC9D,0BAA0B,uBAAuB,cAAc;AAAA,MAE/D,oBAAoB;AAAA,MACpB,0BAA0B,gBAAgB,eAAe,EAAE;AAAA,MAC3D,0BAA0B,gBAAgB,eAAe,GAAG;AAAA,MAC5D,yBAAyB,uBAAuB,aAAa;AAAA,MAE7D,sBAAsB;AAAA,MACtB,4BAA4B,gBAAgB,iBAAiB,EAAE;AAAA,MAC/D,4BAA4B,gBAAgB,iBAAiB,GAAG;AAAA,MAChE,2BAA2B,uBAAuB,eAAe;AAAA,MAEjE,sBAAsB;AAAA,MACtB,2BAA2B,gBAAgB,iBAAiB,GAAG;AAAA,MAC/D,6BAA6B,gBAAgB,iBAAiB,GAAG;AAAA,MACjE,4BAA4B,gBAAgB,iBAAiB,EAAE;AAAA,MAC/D,8BAA8B,gBAAgB,iBAAiB,EAAE;AAAA,MAEjE,gBAAgB,uBAAuB,eAAe;AAAA,MACtD,sBAAsB;AAAA,QACpB,uBAAuB,eAAe;AAAA,QACtC;AAAA,MAAA;AAAA,MAEF,8BAA8B,gBAAgB,cAAc,GAAG;AAAA,MAC/D,gCAAgC,gBAAgB,gBAAgB,GAAG;AAAA,IAAA;AAGrE,UAAM,YAAY,SAAS,gBAAgB;AAC3C,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAG,WAAU,YAAY,GAAG,CAAC;AAErE,QAAI;AACF,mBAAa,QAAQ,aAAa,OAAO,cAAc,CAAC;AAAA,IAC1D,QAAQ;AACN,cAAQ,MAAM,4BAA4B;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,SACEC,2BAAAA,IAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,gBAAgB,qBAC7C,UACH;AAEJ;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-BvAAYL0M.cjs","sources":["../../src/components/Select/ThemeSelect/next/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/next/Footer.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { useContext } from \"react\";\r\nimport { getAllColorSchemes } from \"../../../../styles/colorSchemeRegistry\";\r\nimport { Select } from \"@/index.next\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport { RoundingType, ShadowType, StateType, ThemeType } from \"@/types/types\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\n\r\ninterface ThemeSelectProps {\r\n theme?: ThemeType;\r\n shadow?: ShadowType;\r\n rounding?: RoundingType;\r\n \"data-testid\"?: string;\r\n state?: StateType;\r\n}\r\n\r\nconst UserThemeSettings: React.FC<ThemeSelectProps> = ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n state = \"\",\r\n \"data-testid\": testId = \"theme-select\",\r\n}) => {\r\n const themeContext = useContext(ThemeContext);\r\n\r\n if (!themeContext) {\r\n throw new Error(\r\n \"ThemeContext is undefined. Make sure to wrap this component with ThemeProvider.\"\r\n );\r\n }\r\n\r\n const { selectedScheme, setSelectedScheme } = themeContext;\r\n const allSchemes = getAllColorSchemes();\r\n\r\n const options = allSchemes.map((scheme, index) => ({\r\n value: index.toString(),\r\n label: scheme.name,\r\n }));\r\n\r\n return (\r\n <div className={`control-container`}>\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={`${testId}-select`}\r\n value={selectedScheme.toString()}\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(value as string, 10))\r\n }\r\n ariaLabel=\"Select Theme\"\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserThemeSettings;\r\n","import React, { JSX, useMemo } from \"react\";\r\nimport { FooterProps } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nexport interface BaseFooterProps extends FooterProps {\r\n IconButton: React.ComponentType<any>;\r\n ThemeSelect: React.ComponentType<any>;\r\n ImageComponent?: React.ElementType;\r\n classMap: Record<string, string>;\r\n LinkWrapper?: (props: {\r\n href: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n [key: string]: any;\r\n }) => JSX.Element;\r\n}\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children }) => <a href={href}>{children}</a>,\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n classMap[`shadow${capitalize(shadow)}`],\r\n classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, className]\r\n );\r\n return (\r\n <footer\r\n className={footerClass}\r\n role=\"contentinfo\"\r\n aria-label=\"Footer\"\r\n data-testid={testId}\r\n >\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {logo &&\r\n (typeof logo === \"string\" ||\r\n (typeof logo === \"object\" && \"src\" in logo)) ? (\r\n <ImageComponent\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logo}\r\n alt=\"Logo\"\r\n height={20}\r\n width={20}\r\n />\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {logo}\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div className={classMap.left} data-testid={`${testId}-copyright`}>\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul role=\"list\">\r\n {links.map((link, i) => (\r\n <li key={i}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${link.label.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n ))}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n aria-label=\"Theme selector container\"\r\n >\r\n <ThemeSelect theme={\"clear\"} shadow={\"none\"} />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <div\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n role=\"navigation\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={index}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nexport default FooterBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport { IconButton, ThemeSelect } from \"@/index.next\";\r\nimport Link from \"next/link\";\r\nimport styles from \"./Footer.module.scss\";\r\nimport Image from \"next/image\";\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ImageComponent={Image}\r\n ThemeSelect={ThemeSelect}\r\n LinkWrapper={({ href, children, className, ...rest }) => (\r\n <Link href={href} className={className} {...rest}>\r\n {children}\r\n </Link>\r\n )}\r\n classMap={styles}\r\n />\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["getDefaultTheme","getDefaultShadow","getDefaultRounding","useContext","ThemeContext","getAllColorSchemes","jsx","Select","links","logo","IconButton","useMemo","combineClassNames","capitalize","jsxs","link","social","Image","ThemeSelect","Link"],"mappings":";;;;;;;;;;;;AAqBA,MAAM,oBAAgD,CAAC;AAAA,EACrD,QAAQA,kBAAAA,gBAAA;AAAA,EACR,SAASC,kBAAAA,iBAAA;AAAA,EACT,WAAWC,kBAAAA,mBAAA;AAAA,EACX,QAAQ;AAAA,EACR,eAAe,SAAS;AAC1B,MAAM;AACJ,QAAM,eAAeC,MAAAA,WAAWC,yBAAY;AAE5C,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,EAAE,gBAAgB,kBAAA,IAAsB;AAC9C,QAAM,aAAaC,mBAAAA,mBAAA;AAEnB,QAAM,UAAU,WAAW,IAAI,CAAC,QAAQ,WAAW;AAAA,IACjD,OAAO,MAAM,SAAA;AAAA,IACb,OAAO,OAAO;AAAA,EAAA,EACd;AAEF,SACEC,2BAAAA,IAAC,OAAA,EAAI,WAAW,qBACd,UAAAA,2BAAAA;AAAAA,IAACC,OAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAa,GAAG,MAAM;AAAA,MACtB,OAAO,eAAe,SAAA;AAAA,MACtB,UAAU,CAAC,UACT,kBAAkB,SAAS,OAAiB,EAAE,CAAC;AAAA,MAEjD,WAAU;AAAA,IAAA;AAAA,EAAA,GAEd;AAEJ;AC1CA,MAAM,aAAwC,CAAC;AAAA,EAC7C,QAAQP,kBAAAA,gBAAA;AAAA,EACR,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,eAAe,SAAS;AAAA,EACxB;AAAA,EACA,OAAAQ,SAAQ,CAAA;AAAA,EACR,MAAAC;AAAA,EACA,cAAc,CAAA;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAAC;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,cAAc,CAAC,EAAE,MAAM,eAAeJ,2BAAAA,IAAC,KAAA,EAAE,MAAa,SAAA,CAAS;AACjE,MAAM;AACJ,QAAM,cAAcK,MAAAA;AAAAA,IAClB,MACEC,WAAAA;AAAAA,MACE,SAAS;AAAA,MACT,SAAS,KAAK;AAAA,MACd,SAAS,SAASC,WAAAA,WAAW,MAAM,CAAC,EAAE;AAAA,MACtC,SAAS,QAAQA,WAAAA,WAAW,QAAQ,CAAC,EAAE;AAAA,MACvC,SAAS,aAAaA,WAAAA,WAAW,UAAU,CAAC,EAAE;AAAA,MAC9C;AAAA,IAAA;AAAA,IAEJ,CAAC,UAAU,OAAO,SAAS;AAAA,EAAA;AAE7B,SACEP,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,MAAK;AAAA,MACL,cAAW;AAAA,MACX,eAAa;AAAA,MAEb,UAAAQ,2BAAAA,KAAC,OAAA,EAAI,WAAW,SAAS,SACvB,UAAA;AAAA,QAAAA,2BAAAA,KAAC,SAAI,WAAW,SAAS,MAAM,eAAa,GAAG,MAAM,SAClD,UAAA;AAAA,UAAAL,UACA,OAAOA,UAAS,YACd,OAAOA,UAAS,YAAY,SAASA,SACtCH,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,SAAS;AAAA,cACpB,cAAW;AAAA,cACX,MAAK;AAAA,cACL,eAAa,GAAG,MAAM;AAAA,cACtB,SAAQ;AAAA,cACR,KAAKG;AAAA,cACL,KAAI;AAAA,cACJ,QAAQ;AAAA,cACR,OAAO;AAAA,YAAA;AAAA,UAAA,IAGTH,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,SAAS;AAAA,cACpB,cAAW;AAAA,cACX,MAAK;AAAA,cACL,eAAa,GAAG,MAAM;AAAA,cAErB,UAAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAIJ,aACCH,2BAAAA,IAAC,OAAA,EAAI,WAAW,SAAS,MAAM,eAAa,GAAG,MAAM,cACnD,UAAAA,2BAAAA,IAAC,KAAA,EAAG,qBAAU,EAAA,CAChB;AAAA,QAAA,GAEJ;AAAA,QAECE,OAAM,SAAS,KACdF,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,cAAW;AAAA,YACX,eAAa,GAAG,MAAM;AAAA,YAEtB,UAAAA,2BAAAA,IAAC,MAAA,EAAG,MAAK,QACN,UAAAE,OAAM,IAAI,CAACO,OAAM,MAChBT,2BAAAA,IAAC,MAAA,EACC,UAAAA,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAMS,MAAK;AAAA,gBACX,WAAW,SAAS;AAAA,gBACpB,eAAa,GAAG,MAAM,SAASA,MAAK,MAAM,YAAA,EAAc,QAAQ,QAAQ,GAAG,CAAC;AAAA,gBAE3E,UAAAA,MAAK;AAAA,cAAA;AAAA,YAAA,EACR,GAPO,CAQT,CACD,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAIH,mBACCT,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,eAAa,GAAG,MAAM;AAAA,YACtB,cAAW;AAAA,YAEX,UAAAA,2BAAAA,IAAC,aAAA,EAAY,OAAO,SAAS,QAAQ,OAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIhD,YAAY,SAAS,KACpBA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,SAAS;AAAA,YACpB,cAAW;AAAA,YACX,MAAK;AAAA,YACL,eAAa,GAAG,MAAM;AAAA,YAErB,UAAA,YAAY,IAAI,CAACU,SAAQ,UACxBV,2BAAAA;AAAAA,cAACI;AAAA,cAAA;AAAA,gBAEC,MAAMM,QAAO;AAAA,gBACb,MAAMA,QAAO;AAAA,gBACb,YAAU;AAAA,gBACV,QAAO;AAAA,gBACP,QAAO;AAAA,gBACP,KAAI;AAAA,gBACJ,WAAWA,QAAO;AAAA,gBAClB,OAAOA,QAAO;AAAA,gBACd,OAAM;AAAA,gBACN,eAAa,GAAG,MAAM,WAAWA,QAAO,MACrC,cACA,QAAQ,QAAQ,GAAG,CAAC;AAAA,cAAA;AAAA,cAZlB;AAAA,YAAA,CAcR;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7IA,MAAM,SAAgC,CAAC,UAAU;AAC/C,SACEV,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MAAA,YACJI,WAAAA;AAAAA,MACA,gBAAgBO,MAAAA;AAAAA,MAAA,aAChBC;AAAAA,MACA,aAAa,CAAC,EAAE,MAAM,UAAU,WAAW,GAAG,KAAA,qCAC3CC,KAAAA,MAAA,EAAK,MAAY,WAAuB,GAAG,MACzC,SAAA,CACH;AAAA,MAEF,UAAU;AAAA,IAAA;AAAA,EAAA;AAGhB;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Footer-D18LIc08.js","sources":["../../src/components/Select/ThemeSelect/next/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/next/Footer.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { useContext } from \"react\";\r\nimport { getAllColorSchemes } from \"../../../../styles/colorSchemeRegistry\";\r\nimport { Select } from \"@/index.next\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport { RoundingType, ShadowType, StateType, ThemeType } from \"@/types/types\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\n\r\ninterface ThemeSelectProps {\r\n theme?: ThemeType;\r\n shadow?: ShadowType;\r\n rounding?: RoundingType;\r\n \"data-testid\"?: string;\r\n state?: StateType;\r\n}\r\n\r\nconst UserThemeSettings: React.FC<ThemeSelectProps> = ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n state = \"\",\r\n \"data-testid\": testId = \"theme-select\",\r\n}) => {\r\n const themeContext = useContext(ThemeContext);\r\n\r\n if (!themeContext) {\r\n throw new Error(\r\n \"ThemeContext is undefined. Make sure to wrap this component with ThemeProvider.\"\r\n );\r\n }\r\n\r\n const { selectedScheme, setSelectedScheme } = themeContext;\r\n const allSchemes = getAllColorSchemes();\r\n\r\n const options = allSchemes.map((scheme, index) => ({\r\n value: index.toString(),\r\n label: scheme.name,\r\n }));\r\n\r\n return (\r\n <div className={`control-container`}>\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={`${testId}-select`}\r\n value={selectedScheme.toString()}\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(value as string, 10))\r\n }\r\n ariaLabel=\"Select Theme\"\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default UserThemeSettings;\r\n","import React, { JSX, useMemo } from \"react\";\r\nimport { FooterProps } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nexport interface BaseFooterProps extends FooterProps {\r\n IconButton: React.ComponentType<any>;\r\n ThemeSelect: React.ComponentType<any>;\r\n ImageComponent?: React.ElementType;\r\n classMap: Record<string, string>;\r\n LinkWrapper?: (props: {\r\n href: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n [key: string]: any;\r\n }) => JSX.Element;\r\n}\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children }) => <a href={href}>{children}</a>,\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n classMap[`shadow${capitalize(shadow)}`],\r\n classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, className]\r\n );\r\n return (\r\n <footer\r\n className={footerClass}\r\n role=\"contentinfo\"\r\n aria-label=\"Footer\"\r\n data-testid={testId}\r\n >\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {logo &&\r\n (typeof logo === \"string\" ||\r\n (typeof logo === \"object\" && \"src\" in logo)) ? (\r\n <ImageComponent\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logo}\r\n alt=\"Logo\"\r\n height={20}\r\n width={20}\r\n />\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n aria-label=\"Logo\"\r\n role=\"img\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {logo}\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div className={classMap.left} data-testid={`${testId}-copyright`}>\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul role=\"list\">\r\n {links.map((link, i) => (\r\n <li key={i}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${link.label.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n ))}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n aria-label=\"Theme selector container\"\r\n >\r\n <ThemeSelect theme={\"clear\"} shadow={\"none\"} />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <div\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n role=\"navigation\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={index}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nexport default FooterBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport { IconButton, ThemeSelect } from \"@/index.next\";\r\nimport Link from \"next/link\";\r\nimport styles from \"./Footer.module.scss\";\r\nimport Image from \"next/image\";\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ImageComponent={Image}\r\n ThemeSelect={ThemeSelect}\r\n LinkWrapper={({ href, children, className, ...rest }) => (\r\n <Link href={href} className={className} {...rest}>\r\n {children}\r\n </Link>\r\n )}\r\n classMap={styles}\r\n />\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["links","logo","IconButton","social","ThemeSelect"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext-B-z-faEj.js","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext-BHzkqvlv.cjs","sources":["../../src/context/ThemeContext.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * ---------------------------------------------------------------------\r\n * ThemeProvider.tsx\r\n * ---------------------------------------------------------------------\r\n * Provides a React context for managing and applying color schemes\r\n * dynamically across the Boreal UI system.\r\n *\r\n * Responsibilities:\r\n * - Registers any custom color schemes at runtime\r\n * - Sets the active color scheme based on `localStorage` or fallback default\r\n * - Dynamically updates CSS custom properties (`--*`) on the `:root`\r\n * to reflect the selected theme's color values\r\n * - Ensures text color contrast by calculating luminance and WCAG ratios\r\n *\r\n * Includes:\r\n * - Lightness adjustment utilities for generating `*-light` and `*-hover` variants\r\n * - Contrast checking and accessible text color fallbacks\r\n * - `ThemeContext` with `selectedScheme` index and setter\r\n *\r\n * Hooks:\r\n * - `useEffect` to register schemes and sync saved theme index\r\n * - `useEffect` to apply all computed color variables to `document.documentElement`\r\n *\r\n * Usage:\r\n * ```tsx\r\n * <ThemeProvider customSchemes={[customTheme]}>\r\n * <App />\r\n * </ThemeProvider>\r\n * ```\r\n *\r\n * Access via context:\r\n * ```ts\r\n * const { selectedScheme, setSelectedScheme } = useContext(ThemeContext);\r\n * ```\r\n */\r\n\r\nimport React, {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport {\r\n getAllColorSchemes,\r\n registerColorScheme,\r\n} from \"../styles/colorSchemeRegistry\";\r\nimport { getDefaultColorSchemeName } from \"../config/boreal-style-config\";\r\nimport { colorSchemes } from \"../styles/Themes\";\r\nimport { ThemeContextType, ThemeProviderProps } from \"./ThemeContext.types\";\r\n\r\nexport const ThemeContext = createContext<ThemeContextType | undefined>(\r\n undefined\r\n);\r\n\r\nconst fallbackIndex = colorSchemes.findIndex(\r\n (scheme) => scheme.name === getDefaultColorSchemeName()\r\n);\r\nconst defaultIndex = fallbackIndex !== -1 ? fallbackIndex : 0;\r\n\r\nconst STORAGE_KEY = \"boreal:selectedScheme\";\r\n\r\nconst ThemeProvider: React.FC<\r\n ThemeProviderProps & { initialScheme?: number }\r\n> = ({ children, customSchemes = [], initialScheme }) => {\r\n if (fallbackIndex === -1 && process.env.NODE_ENV === \"development\") {\r\n console.warn(\r\n `Default color scheme \"${getDefaultColorSchemeName()}\" not found. Falling back to index 0.`\r\n );\r\n }\r\n\r\n const [selectedScheme, setSelectedScheme] = useState<number>(() => {\r\n if (typeof initialScheme === \"number\") return initialScheme;\r\n\r\n if (typeof window !== \"undefined\") {\r\n try {\r\n const saved = localStorage.getItem(STORAGE_KEY);\r\n if (saved != null) return parseInt(saved, 10);\r\n } catch {\r\n console.error(\"Failed to load saved theme index\");\r\n }\r\n }\r\n return defaultIndex;\r\n });\r\n\r\n useEffect(() => {\r\n registerColorScheme(customSchemes);\r\n }, [customSchemes]);\r\n\r\n useLayoutEffect(() => {\r\n const allSchemes = getAllColorSchemes();\r\n const scheme = allSchemes[selectedScheme] ?? allSchemes[defaultIndex];\r\n\r\n const {\r\n primaryColor,\r\n secondaryColor,\r\n tertiaryColor,\r\n quaternaryColor,\r\n backgroundColor,\r\n forceTextColor,\r\n } = scheme;\r\n\r\n const hexToHSL = (hex: string) => {\r\n const r = parseInt(hex.slice(1, 3), 16) / 255;\r\n const g = parseInt(hex.slice(3, 5), 16) / 255;\r\n const b = parseInt(hex.slice(5, 7), 16) / 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h = 0,\r\n s = 0;\r\n const l = (max + min) / 2;\r\n if (max !== min) {\r\n const d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: Math.round(h * 360),\r\n s: Math.round(s * 100),\r\n l: Math.round(l * 100),\r\n };\r\n };\r\n\r\n const hslToHex = (h: number, s: number, l: number): string => {\r\n s /= 100;\r\n l /= 100;\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n Math.round(\r\n 255 *\r\n (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))))\r\n );\r\n return `#${[f(0), f(8), f(4)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\")}`;\r\n };\r\n\r\n const adjustLightness = (hex: string, percent: number): string => {\r\n const { h, s, l } = hexToHSL(hex);\r\n return hslToHex(h, s, Math.min(100, Math.max(0, l + percent)));\r\n };\r\n\r\n const relativeLuminance = (hex: string): number => {\r\n const rgb = [1, 3, 5].map((i) => {\r\n const c = parseInt(hex.slice(i, i + 2), 16) / 255;\r\n return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\r\n });\r\n return 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];\r\n };\r\n\r\n const contrastRatio = (a: string, b: string): number => {\r\n const lum1 = relativeLuminance(a);\r\n const lum2 = relativeLuminance(b);\r\n const lighter = Math.max(lum1, lum2);\r\n const darker = Math.min(lum1, lum2);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n };\r\n\r\n const getAccessibleTextColor = (bg: string): string =>\r\n contrastRatio(bg, \"#000000\") >= 4.5 ? \"#000000\" : \"#FFFFFF\";\r\n\r\n const vars = {\r\n \"--primary-color\": primaryColor,\r\n \"--primary-color-light\": adjustLightness(primaryColor, 10),\r\n \"--primary-color-hover\": adjustLightness(primaryColor, -10),\r\n \"--text-color-primary\":\r\n forceTextColor ?? getAccessibleTextColor(primaryColor),\r\n\r\n \"--secondary-color\": secondaryColor,\r\n \"--secondary-color-light\": adjustLightness(secondaryColor, 10),\r\n \"--secondary-color-hover\": adjustLightness(secondaryColor, -10),\r\n \"--text-color-secondary\": getAccessibleTextColor(secondaryColor),\r\n\r\n \"--tertiary-color\": tertiaryColor,\r\n \"--tertiary-color-light\": adjustLightness(tertiaryColor, 10),\r\n \"--tertiary-color-hover\": adjustLightness(tertiaryColor, -10),\r\n \"--text-color-tertiary\": getAccessibleTextColor(tertiaryColor),\r\n\r\n \"--quaternary-color\": quaternaryColor,\r\n \"--quaternary-color-light\": adjustLightness(quaternaryColor, 10),\r\n \"--quaternary-color-hover\": adjustLightness(quaternaryColor, -10),\r\n \"--text-color-quaternary\": getAccessibleTextColor(quaternaryColor),\r\n\r\n \"--background-color\": backgroundColor,\r\n \"--background-color-dark\": adjustLightness(backgroundColor, -10),\r\n \"--background-color-darker\": adjustLightness(backgroundColor, -25),\r\n \"--background-color-light\": adjustLightness(backgroundColor, 10),\r\n \"--background-color-lighter\": adjustLightness(backgroundColor, 20),\r\n\r\n \"--link-color\": getAccessibleTextColor(backgroundColor),\r\n \"--link-color-hover\": adjustLightness(\r\n getAccessibleTextColor(backgroundColor),\r\n -20\r\n ),\r\n \"--link-hover-color-primary\": adjustLightness(primaryColor, -10),\r\n \"--link-hover-color-secondary\": adjustLightness(secondaryColor, -10),\r\n } as const;\r\n\r\n const rootStyle = document.documentElement.style;\r\n for (const [k, v] of Object.entries(vars)) rootStyle.setProperty(k, v);\r\n\r\n try {\r\n localStorage.setItem(STORAGE_KEY, String(selectedScheme));\r\n } catch {\r\n console.error(\"Failed to save theme index\");\r\n }\r\n }, [selectedScheme]);\r\n\r\n return (\r\n <ThemeContext.Provider value={{ selectedScheme, setSelectedScheme }}>\r\n {children}\r\n </ThemeContext.Provider>\r\n );\r\n};\r\n\r\nexport default ThemeProvider;\r\n"],"names":["createContext","colorSchemes","getDefaultColorSchemeName","useState","useEffect","registerColorScheme","useLayoutEffect","getAllColorSchemes","jsx"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const require$$2 = require("react/jsx-runtime");
|
|
3
|
-
function ThemeInit({
|
|
4
|
-
storageKeyScheme = "boreal:selectedScheme",
|
|
5
|
-
storageKeyVars = "boreal:cssVars",
|
|
6
|
-
dataAttr = "data-scheme",
|
|
7
|
-
readyAttr = "data-theme-ready"
|
|
8
|
-
}) {
|
|
9
|
-
const code = `
|
|
10
|
-
(function(){
|
|
11
|
-
try {
|
|
12
|
-
var docEl = document.documentElement;
|
|
13
|
-
var raw = localStorage.getItem(${JSON.stringify(storageKeyVars)});
|
|
14
|
-
if (raw) {
|
|
15
|
-
try {
|
|
16
|
-
var vars = JSON.parse(raw);
|
|
17
|
-
for (var k in vars) if (Object.prototype.hasOwnProperty.call(vars, k)) {
|
|
18
|
-
docEl.style.setProperty(k, vars[k]);
|
|
19
|
-
}
|
|
20
|
-
} catch(e){}
|
|
21
|
-
}
|
|
22
|
-
var idx = localStorage.getItem(${JSON.stringify(storageKeyScheme)});
|
|
23
|
-
if (idx != null) docEl.setAttribute(${JSON.stringify(dataAttr)}, String(idx));
|
|
24
|
-
docEl.setAttribute(${JSON.stringify(readyAttr)}, "true");
|
|
25
|
-
} catch(e){}
|
|
26
|
-
})();
|
|
27
|
-
`.trim();
|
|
28
|
-
return /* @__PURE__ */ require$$2.jsx(
|
|
29
|
-
"script",
|
|
30
|
-
{
|
|
31
|
-
dangerouslySetInnerHTML: { __html: code },
|
|
32
|
-
suppressHydrationWarning: true
|
|
33
|
-
}
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
exports.ThemeInit = ThemeInit;
|
|
37
|
-
//# sourceMappingURL=ThemeInitScript-B22_wzIJ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript-B22_wzIJ.cjs","sources":["../../src/context/ThemeInitScript.tsx"],"sourcesContent":["import { Props } from \"./ThemeInitScript.types\";\r\n\r\nexport default function ThemeInit({\r\n storageKeyScheme = \"boreal:selectedScheme\",\r\n storageKeyVars = \"boreal:cssVars\",\r\n dataAttr = \"data-scheme\",\r\n readyAttr = \"data-theme-ready\",\r\n}: Props) {\r\n const code = `\r\n (function(){\r\n try {\r\n var docEl = document.documentElement;\r\n var raw = localStorage.getItem(${JSON.stringify(storageKeyVars)});\r\n if (raw) {\r\n try {\r\n var vars = JSON.parse(raw);\r\n for (var k in vars) if (Object.prototype.hasOwnProperty.call(vars, k)) {\r\n docEl.style.setProperty(k, vars[k]);\r\n }\r\n } catch(e){}\r\n }\r\n var idx = localStorage.getItem(${JSON.stringify(storageKeyScheme)});\r\n if (idx != null) docEl.setAttribute(${JSON.stringify(dataAttr)}, String(idx));\r\n docEl.setAttribute(${JSON.stringify(readyAttr)}, \"true\");\r\n } catch(e){}\r\n })();\r\n `.trim();\r\n\r\n return (\r\n <script\r\n dangerouslySetInnerHTML={{ __html: code }}\r\n suppressHydrationWarning\r\n />\r\n );\r\n}\r\n"],"names":["jsx"],"mappings":";;AAEA,SAAwB,UAAU;AAAA,EAChC,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,YAAY;AACd,GAAU;AACR,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA,uCAIwB,KAAK,UAAU,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAS9B,KAAK,UAAU,gBAAgB,CAAC;AAAA,4CAC3B,KAAK,UAAU,QAAQ,CAAC;AAAA,2BACzC,KAAK,UAAU,SAAS,CAAC;AAAA;AAAA;AAAA,IAGhD,KAAA;AAEF,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,yBAAyB,EAAE,QAAQ,KAAA;AAAA,MACnC,0BAAwB;AAAA,IAAA;AAAA,EAAA;AAG9B;;"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
function ThemeInit({
|
|
3
|
-
storageKeyScheme = "boreal:selectedScheme",
|
|
4
|
-
storageKeyVars = "boreal:cssVars",
|
|
5
|
-
dataAttr = "data-scheme",
|
|
6
|
-
readyAttr = "data-theme-ready"
|
|
7
|
-
}) {
|
|
8
|
-
const code = `
|
|
9
|
-
(function(){
|
|
10
|
-
try {
|
|
11
|
-
var docEl = document.documentElement;
|
|
12
|
-
var raw = localStorage.getItem(${JSON.stringify(storageKeyVars)});
|
|
13
|
-
if (raw) {
|
|
14
|
-
try {
|
|
15
|
-
var vars = JSON.parse(raw);
|
|
16
|
-
for (var k in vars) if (Object.prototype.hasOwnProperty.call(vars, k)) {
|
|
17
|
-
docEl.style.setProperty(k, vars[k]);
|
|
18
|
-
}
|
|
19
|
-
} catch(e){}
|
|
20
|
-
}
|
|
21
|
-
var idx = localStorage.getItem(${JSON.stringify(storageKeyScheme)});
|
|
22
|
-
if (idx != null) docEl.setAttribute(${JSON.stringify(dataAttr)}, String(idx));
|
|
23
|
-
docEl.setAttribute(${JSON.stringify(readyAttr)}, "true");
|
|
24
|
-
} catch(e){}
|
|
25
|
-
})();
|
|
26
|
-
`.trim();
|
|
27
|
-
return /* @__PURE__ */ jsx(
|
|
28
|
-
"script",
|
|
29
|
-
{
|
|
30
|
-
dangerouslySetInnerHTML: { __html: code },
|
|
31
|
-
suppressHydrationWarning: true
|
|
32
|
-
}
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
export {
|
|
36
|
-
ThemeInit as T
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=ThemeInitScript-D6EpWMC9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript-D6EpWMC9.js","sources":["../../src/context/ThemeInitScript.tsx"],"sourcesContent":["import { Props } from \"./ThemeInitScript.types\";\r\n\r\nexport default function ThemeInit({\r\n storageKeyScheme = \"boreal:selectedScheme\",\r\n storageKeyVars = \"boreal:cssVars\",\r\n dataAttr = \"data-scheme\",\r\n readyAttr = \"data-theme-ready\",\r\n}: Props) {\r\n const code = `\r\n (function(){\r\n try {\r\n var docEl = document.documentElement;\r\n var raw = localStorage.getItem(${JSON.stringify(storageKeyVars)});\r\n if (raw) {\r\n try {\r\n var vars = JSON.parse(raw);\r\n for (var k in vars) if (Object.prototype.hasOwnProperty.call(vars, k)) {\r\n docEl.style.setProperty(k, vars[k]);\r\n }\r\n } catch(e){}\r\n }\r\n var idx = localStorage.getItem(${JSON.stringify(storageKeyScheme)});\r\n if (idx != null) docEl.setAttribute(${JSON.stringify(dataAttr)}, String(idx));\r\n docEl.setAttribute(${JSON.stringify(readyAttr)}, \"true\");\r\n } catch(e){}\r\n })();\r\n `.trim();\r\n\r\n return (\r\n <script\r\n dangerouslySetInnerHTML={{ __html: code }}\r\n suppressHydrationWarning\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";AAEA,SAAwB,UAAU;AAAA,EAChC,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,YAAY;AACd,GAAU;AACR,QAAM,OAAO;AAAA;AAAA;AAAA;AAAA,uCAIwB,KAAK,UAAU,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAS9B,KAAK,UAAU,gBAAgB,CAAC;AAAA,4CAC3B,KAAK,UAAU,QAAQ,CAAC;AAAA,2BACzC,KAAK,UAAU,SAAS,CAAC;AAAA;AAAA;AAAA,IAGhD,KAAA;AAEF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,yBAAyB,EAAE,QAAQ,KAAA;AAAA,MACnC,0BAAwB;AAAA,IAAA;AAAA,EAAA;AAG9B;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeInitScript.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,gBAA0C,EAC1C,cAAiC,EACjC,QAAwB,EACxB,SAA8B,GAC/B,EAAE,KAAK,2CA2BP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeInitScript.types.d.ts","sourceRoot":"","sources":["../../../src/context/ThemeInitScript.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
|