@accelint/design-toolkit 5.1.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/catalog-info.yaml +44 -0
  2. package/dist/components/accordion/index.js +1 -1
  3. package/dist/components/accordion/index.js.map +1 -1
  4. package/dist/components/accordion/styles.d.ts +3 -3
  5. package/dist/components/accordion/styles.js +1 -1
  6. package/dist/components/accordion/styles.js.map +1 -1
  7. package/dist/components/action-bar/index.d.ts +11 -0
  8. package/dist/components/action-bar/index.js.map +1 -1
  9. package/dist/components/breadcrumbs/index.d.ts +27 -0
  10. package/dist/components/breadcrumbs/index.js +4 -0
  11. package/dist/components/breadcrumbs/index.js.map +1 -0
  12. package/dist/components/breadcrumbs/styles.d.ts +48 -0
  13. package/dist/components/breadcrumbs/styles.js +2 -0
  14. package/dist/components/breadcrumbs/styles.js.map +1 -0
  15. package/dist/components/breadcrumbs/types.d.ts +20 -0
  16. package/dist/components/breadcrumbs/types.js +2 -0
  17. package/dist/components/breadcrumbs/types.js.map +1 -0
  18. package/dist/components/button/index.d.ts +2 -2
  19. package/dist/components/button/index.js +1 -1
  20. package/dist/components/button/index.js.map +1 -1
  21. package/dist/components/button/styles.d.ts +15 -15
  22. package/dist/components/button/styles.js +1 -1
  23. package/dist/components/button/styles.js.map +1 -1
  24. package/dist/components/button/types.d.ts +7 -5
  25. package/dist/components/clock/index.d.ts +39 -0
  26. package/dist/components/clock/index.js +4 -0
  27. package/dist/components/clock/index.js.map +1 -0
  28. package/dist/components/clock/types.d.ts +7 -0
  29. package/dist/components/clock/types.js +2 -0
  30. package/dist/components/clock/types.js.map +1 -0
  31. package/dist/components/color-picker/styles.d.ts +3 -3
  32. package/dist/components/combobox-field/index.d.ts +11 -0
  33. package/dist/components/combobox-field/index.js.map +1 -1
  34. package/dist/components/combobox-field/styles.js +1 -1
  35. package/dist/components/combobox-field/styles.js.map +1 -1
  36. package/dist/components/dialog/index.js +1 -1
  37. package/dist/components/dialog/index.js.map +1 -1
  38. package/dist/components/divider/index.d.ts +32 -0
  39. package/dist/components/divider/index.js +4 -0
  40. package/dist/components/divider/index.js.map +1 -0
  41. package/dist/components/divider/styles.d.ts +5 -0
  42. package/dist/components/divider/styles.js +2 -0
  43. package/dist/components/divider/styles.js.map +1 -0
  44. package/dist/components/divider/types.d.ts +11 -0
  45. package/dist/components/divider/types.js +2 -0
  46. package/dist/components/divider/types.js.map +1 -0
  47. package/dist/components/drawer/index.d.ts +48 -3
  48. package/dist/components/drawer/index.js +1 -1
  49. package/dist/components/drawer/index.js.map +1 -1
  50. package/dist/components/drawer/styles.js +1 -1
  51. package/dist/components/drawer/styles.js.map +1 -1
  52. package/dist/components/drawer/types.d.ts +13 -7
  53. package/dist/components/input/styles.js +1 -1
  54. package/dist/components/input/styles.js.map +1 -1
  55. package/dist/components/lines/index.d.ts +9 -0
  56. package/dist/components/lines/index.js.map +1 -1
  57. package/dist/components/link/index.d.ts +9 -0
  58. package/dist/components/link/index.js.map +1 -1
  59. package/dist/components/link/styles.js +1 -1
  60. package/dist/components/link/styles.js.map +1 -1
  61. package/dist/components/menu/styles.js +1 -1
  62. package/dist/components/menu/styles.js.map +1 -1
  63. package/dist/components/notice/events.d.ts +10 -0
  64. package/dist/components/notice/events.js +2 -0
  65. package/dist/components/notice/events.js.map +1 -0
  66. package/dist/components/notice/index.d.ts +20 -0
  67. package/dist/components/notice/index.js +4 -0
  68. package/dist/components/notice/index.js.map +1 -0
  69. package/dist/components/notice/styles.d.ts +60 -0
  70. package/dist/components/notice/styles.js +2 -0
  71. package/dist/components/notice/styles.js.map +1 -0
  72. package/dist/components/notice/types.d.ts +75 -0
  73. package/dist/components/notice/types.js +2 -0
  74. package/dist/components/notice/types.js.map +1 -0
  75. package/dist/components/query-builder/index.js +1 -1
  76. package/dist/components/query-builder/index.js.map +1 -1
  77. package/dist/components/search-field/styles.js +1 -1
  78. package/dist/components/search-field/styles.js.map +1 -1
  79. package/dist/components/select-field/types.d.ts +0 -1
  80. package/dist/components/sidenav/index.d.ts +57 -6
  81. package/dist/components/sidenav/index.js +1 -1
  82. package/dist/components/sidenav/index.js.map +1 -1
  83. package/dist/components/sidenav/styles.js +1 -1
  84. package/dist/components/sidenav/styles.js.map +1 -1
  85. package/dist/components/slider/index.js +1 -1
  86. package/dist/components/slider/index.js.map +1 -1
  87. package/dist/components/slider/styles.js +1 -1
  88. package/dist/components/slider/styles.js.map +1 -1
  89. package/dist/components/table/context.d.ts +11 -0
  90. package/dist/components/table/context.js +2 -0
  91. package/dist/components/table/context.js.map +1 -0
  92. package/dist/components/table/index.d.ts +36 -0
  93. package/dist/components/table/index.js +4 -0
  94. package/dist/components/table/index.js.map +1 -0
  95. package/dist/components/table/styles.d.ts +134 -0
  96. package/dist/components/table/styles.js +2 -0
  97. package/dist/components/table/styles.js.map +1 -0
  98. package/dist/components/table/table-body.d.ts +12 -0
  99. package/dist/components/table/table-body.js +2 -0
  100. package/dist/components/table/table-body.js.map +1 -0
  101. package/dist/components/table/table-cell.d.ts +12 -0
  102. package/dist/components/table/table-cell.js +2 -0
  103. package/dist/components/table/table-cell.js.map +1 -0
  104. package/dist/components/table/table-header-cell.d.ts +12 -0
  105. package/dist/components/table/table-header-cell.js +2 -0
  106. package/dist/components/table/table-header-cell.js.map +1 -0
  107. package/dist/components/table/table-header.d.ts +12 -0
  108. package/dist/components/table/table-header.js +2 -0
  109. package/dist/components/table/table-header.js.map +1 -0
  110. package/dist/components/table/table-row.d.ts +12 -0
  111. package/dist/components/table/table-row.js +2 -0
  112. package/dist/components/table/table-row.js.map +1 -0
  113. package/dist/components/table/types.d.ts +185 -0
  114. package/dist/components/table/types.js +2 -0
  115. package/dist/components/table/types.js.map +1 -0
  116. package/dist/components/tabs/styles.js +1 -1
  117. package/dist/components/tabs/styles.js.map +1 -1
  118. package/dist/components/time-field/index.d.ts +19 -0
  119. package/dist/components/time-field/index.js +4 -0
  120. package/dist/components/time-field/index.js.map +1 -0
  121. package/dist/components/time-field/styles.d.ts +69 -0
  122. package/dist/components/time-field/styles.js +2 -0
  123. package/dist/components/time-field/styles.js.map +1 -0
  124. package/dist/components/time-field/types.d.ts +23 -0
  125. package/dist/components/time-field/types.js +2 -0
  126. package/dist/components/time-field/types.js.map +1 -0
  127. package/dist/components/tooltip/index.d.ts +23 -34
  128. package/dist/components/tooltip/index.js +1 -1
  129. package/dist/components/tooltip/index.js.map +1 -1
  130. package/dist/components/tooltip/types.d.ts +5 -6
  131. package/dist/components/tree/index.d.ts +22 -1
  132. package/dist/components/tree/index.js +1 -1
  133. package/dist/components/tree/index.js.map +1 -1
  134. package/dist/components/tree/styles.js +1 -1
  135. package/dist/components/tree/styles.js.map +1 -1
  136. package/dist/components/view-stack/index.d.ts +42 -2
  137. package/dist/components/view-stack/index.js +1 -1
  138. package/dist/components/view-stack/index.js.map +1 -1
  139. package/dist/foundation/token-data.js +1 -1
  140. package/dist/foundation/token-data.js.map +1 -1
  141. package/dist/index.css +5 -3
  142. package/dist/index.d.ts +32 -6
  143. package/dist/index.js +1 -1
  144. package/dist/metafile-esm.json +1 -1
  145. package/dist/providers/portal.d.ts +9 -0
  146. package/dist/providers/portal.js +2 -0
  147. package/dist/providers/portal.js.map +1 -0
  148. package/dist/providers/theme-provider.d.ts +6 -6
  149. package/dist/providers/theme-provider.js +1 -1
  150. package/dist/providers/theme-provider.js.map +1 -1
  151. package/dist/styles.css +3355 -974
  152. package/dist/tokens/themes.css +56 -24
  153. package/dist/tokens/tokens.css +8 -8
  154. package/dist/tokens/tokens.d.ts +18 -0
  155. package/dist/tokens/tokens.js +1 -1
  156. package/dist/tokens/tokens.js.map +1 -1
  157. package/dist/tokens/types.d.ts +9 -0
  158. package/dist/variants/variants.css +3 -0
  159. package/package.json +39 -17
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { PropsWithChildren, RefObject } from 'react';
3
+
4
+ declare function PortalProvider({ parentRef, inject, children, }: PropsWithChildren<{
5
+ parentRef?: RefObject<HTMLElement | null>;
6
+ inject?: HTMLElement | null;
7
+ }>): react_jsx_runtime.JSX.Element;
8
+
9
+ export { PortalProvider };
@@ -0,0 +1,2 @@
1
+ import {jsx}from'react/jsx-runtime';import {UNSAFE_PortalProvider}from'@react-aria/overlays';import {useIsSSR}from'@react-aria/ssr';import {useState,useEffect}from'react';function S({parentRef:n,inject:l,children:i}){const e=useIsSSR(),[u,r]=useState(e?null:document.body);return useEffect(()=>{const t=n?.current,o=e?null:l;return t&&o?(t.appendChild(o),r(o)):t&&r(t),()=>{o?.remove(),r(e?null:document.body);}},[e,n,l]),jsx(UNSAFE_PortalProvider,{getContainer:()=>u,children:i})}export{S as PortalProvider};//# sourceMappingURL=portal.js.map
2
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/portal.tsx"],"names":["PortalProvider","parentRef","inject","children","isSSR","useIsSSR","portal","setPortal","useState","useEffect","node","port","jsx","UNSAFE_PortalProvider"],"mappings":"2KAqBO,SAASA,CAAAA,CAAe,CAC7B,UAAAC,CAAAA,CACA,MAAA,CAAAC,EACA,QAAA,CAAAC,CACF,EAGI,CACF,MAAMC,EAAQC,QAAAA,EAAS,CACjB,CAACC,CAAAA,CAAQC,CAAS,EAAIC,QAAAA,CAASJ,CAAAA,CAAQ,KAAO,QAAA,CAAS,IAAI,EAEjE,OAAAK,SAAAA,CAAU,IAAM,CACd,MAAMC,CAAAA,CAAOT,GAAW,OAAA,CAElBU,CAAAA,CAAOP,EAAQ,IAAA,CAAOF,CAAAA,CAE5B,OAAIQ,CAAAA,EAAQC,CAAAA,EACVD,EAAK,WAAA,CAAYC,CAAI,EAErBJ,CAAAA,CAAUI,CAAI,GACLD,CAAAA,EACTH,CAAAA,CAAUG,CAAI,CAAA,CAGT,IAAM,CACXC,CAAAA,EAAM,MAAA,GAENJ,CAAAA,CAAUH,CAAAA,CAAQ,KAAO,QAAA,CAAS,IAAI,EACxC,CACF,CAAA,CAAG,CAACA,CAAAA,CAAOH,CAAAA,CAAWC,CAAM,CAAC,CAAA,CAG3BU,IAACC,qBAAAA,CAAA,CAAsB,aAAc,IAAMP,CAAAA,CACxC,QAAA,CAAAH,CAAAA,CACH,CAEJ","file":"portal.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { UNSAFE_PortalProvider } from '@react-aria/overlays';\nimport { useIsSSR } from '@react-aria/ssr';\nimport {\n type PropsWithChildren,\n type RefObject,\n useEffect,\n useState,\n} from 'react';\n\nexport function PortalProvider({\n parentRef,\n inject,\n children,\n}: PropsWithChildren<{\n parentRef?: RefObject<HTMLElement | null>;\n inject?: HTMLElement | null;\n}>) {\n const isSSR = useIsSSR();\n const [portal, setPortal] = useState(isSSR ? null : document.body);\n\n useEffect(() => {\n const node = parentRef?.current;\n // TODO: Ensure proper ssr hydration\n const port = isSSR ? null : inject;\n\n if (node && port) {\n node.appendChild(port);\n\n setPortal(port);\n } else if (node) {\n setPortal(node);\n }\n\n return () => {\n port?.remove();\n\n setPortal(isSSR ? null : document.body);\n };\n }, [isSSR, parentRef, inject]);\n\n return (\n <UNSAFE_PortalProvider getContainer={() => portal}>\n {children}\n </UNSAFE_PortalProvider>\n );\n}\n"]}
@@ -3,20 +3,20 @@ import { PropsWithChildren } from 'react';
3
3
  import { PartialDeep } from 'type-fest';
4
4
  import { ThemeTokens, SemanticColorTokens, StaticColorTokens } from '../tokens/types.js';
5
5
 
6
- type Mode = 'dark' | 'light';
6
+ type ThemeMode = 'dark' | 'light';
7
7
  type ContextColorTokens = SemanticColorTokens & StaticColorTokens;
8
8
  type ThemeContextValue = {
9
- mode: Mode;
9
+ mode: ThemeMode;
10
10
  tokens: ContextColorTokens;
11
- toggleMode: (mode: Mode) => void;
11
+ toggleMode: (mode: ThemeMode) => void;
12
12
  };
13
13
  type ThemeProviderProps = PropsWithChildren & {
14
- defaultMode?: Mode;
15
- onChange?: (mode: Mode) => void;
14
+ defaultMode?: ThemeMode;
15
+ onChange?: (mode: ThemeMode) => void;
16
16
  /** override existing values in the theme */
17
17
  overrides?: PartialDeep<ThemeTokens>;
18
18
  };
19
19
  declare function ThemeProvider({ children, defaultMode, onChange, overrides, }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
20
20
  declare function useTheme(): ThemeContextValue;
21
21
 
22
- export { ThemeProvider, useTheme };
22
+ export { type ThemeMode, ThemeProvider, useTheme };
@@ -1,4 +1,4 @@
1
1
  'use client';
2
2
 
3
- import {jsx}from'react/jsx-runtime';import'client-only';import {merge}from'lodash';import {createContext,useState,useEffect,useMemo,useContext}from'react';import {designTokens}from'../tokens/tokens.js';const u={mode:"dark",tokens:{...designTokens.dark,...designTokens.static},toggleMode:r=>{}},s=createContext(u);function P({children:r,defaultMode:d,onChange:i,overrides:n}){const[o,m]=useState(d??"dark");useEffect(()=>{if(document){const{documentElement:e}=document;e.classList.remove("dark","light"),e.classList.add(o);}},[o]);const a=useMemo(()=>{const e=merge(designTokens,n);return {...e[o],...e.static}},[o,n]);return jsx(s.Provider,{value:{mode:o,tokens:a,toggleMode:e=>{m(e),i?.(e);}},children:r})}function v(){return useContext(s)}export{P as ThemeProvider,v as useTheme};//# sourceMappingURL=theme-provider.js.map
3
+ import {jsx}from'react/jsx-runtime';import'client-only';import {merge}from'lodash';import {createContext,useState,useEffect,useMemo,useContext}from'react';import {designTokens}from'../tokens/tokens.js';const k={mode:"dark",tokens:{...designTokens.dark,...designTokens.static},toggleMode:r=>{}},s=createContext(k);function P({children:r,defaultMode:m,onChange:d,overrides:n}){const[o,i]=useState(m??"dark");useEffect(()=>{if(document){const{documentElement:e}=document;e.classList.remove("dark","light"),e.classList.add(o);}},[o]);const T=useMemo(()=>{const e=merge(designTokens,n);return {...e[o],...e.static}},[o,n]);return jsx(s.Provider,{value:{mode:o,tokens:T,toggleMode:e=>{i(e),d?.(e);}},children:r})}function v(){return useContext(s)}export{P as ThemeProvider,v as useTheme};//# sourceMappingURL=theme-provider.js.map
4
4
  //# sourceMappingURL=theme-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/theme-provider.tsx"],"names":["designTokens","t","ThemeContext","createContext","defaultContextValue","p","useState","defaultMode","mode","T","overrides","tokensWithOverrides","h","setMode","onChange","c"],"mappings":"0MAyCA,MACE,CAAA,CAAA,CAAA,IAAM,CAAA,MACN,CAAA,MAAU,CAAGA,CAAAA,GAAaC,YAAA,CAAA,IAASD,IAAaC,YAAA,CAAA,MAChD,CAAA,CAAA,UAAuB,CAEvB,CACF,EACMC,CAAAA,CAAeC,CAAAA,CAAiCC,CAAmB,CAAAC,aAQlE,CAAA,CAAA,CAAA,CAAA,oBAEL,CAAA,CAAA,CAAA,WACA,CAAA,CAAA,CAAA,QACA,CAAA,CAAA,CAAA,SACqB,CACrB,SAAoB,CAAA,CAAIC,EAAeC,CAAAA,CAAAA,QAAe,CAAA,CAAA,EAAA,MAE5C,YAAM,IACV,CAAA,GAAA,eACM,CAAA,eAAoB,YACZ,CAAA,CAAA,CAAA,SAAU,CAAA,MAAO,CAAA,cACjB,CAAA,CAAA,CAAA,CAAA,SAAU,CAAIC,GAElC,CAAA,CAAG,EAACA,CAAI,CAAC,CAAA,CAET,CAAA,CAAA,CAAA,CAAA,MAA2C,CAAA,CAAAC,OAAA,CAAM,IAC/C,CAAA,MAAkCT,CAAAA,CAAcU,KAAS,CAAAT,YACzD,CAAA,CAAA,CAAA,CAAA,OACKU,CAAAA,GAAwB,CAC3B,GAAGA,CAAAA,GAAoB,CAAA,CAAA,MAEvBH,CAAAA,CAAME,CAAS,CAAC,CAAA,CAEpB,WACgBE,GAAA,CAAA,CAAA,CAAA,eAEV,CAAA,CAAA,IACA,CAAA,CAAA,CAAA,MACA,CAAA,CAAA,CAAA,UAA4B,CAC1BC,CAAAA,EAAY,CAAA,CACZC,CAAAA,CAAAA,CAAAA,CAAWN,CAAI,GAEnB,CAEC,EAAA,CAAA,CAAA,CAAA,QAGP,CAEO,CAAA,CAAA,CAAA,CAAA,SACL,CAAA,EAAA,CAAA,OACFO,UAAA,CAAA,CAAA,CAAA","file":"theme-provider.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { merge } from 'lodash';\nimport {\n createContext,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { designTokens } from '../tokens/tokens';\nimport type { PartialDeep } from 'type-fest';\nimport type {\n SemanticColorTokens,\n StaticColorTokens,\n ThemeTokens,\n} from '@/tokens/types';\n\ntype Mode = 'dark' | 'light';\ntype ContextColorTokens = SemanticColorTokens & StaticColorTokens;\n\ntype ThemeContextValue = {\n mode: Mode;\n tokens: ContextColorTokens;\n toggleMode: (mode: Mode) => void;\n};\n/** provide default context value to avoid optional chaining and null checks on the client */\nconst defaultContextValue: ThemeContextValue = {\n mode: 'dark',\n tokens: { ...designTokens.dark, ...designTokens.static },\n toggleMode: (_mode) => {\n // no-op\n },\n};\nconst ThemeContext = createContext<ThemeContextValue>(defaultContextValue);\n\ntype ThemeProviderProps = PropsWithChildren & {\n defaultMode?: Mode;\n onChange?: (mode: Mode) => void;\n /** override existing values in the theme */\n overrides?: PartialDeep<ThemeTokens>;\n};\nexport function ThemeProvider({\n children,\n defaultMode,\n onChange,\n overrides,\n}: ThemeProviderProps) {\n const [mode, setMode] = useState<Mode>(defaultMode ?? 'dark');\n\n useEffect(() => {\n if (document) {\n const { documentElement } = document;\n documentElement.classList.remove('dark', 'light');\n documentElement.classList.add(mode);\n }\n }, [mode]);\n\n const tokens: ContextColorTokens = useMemo(() => {\n const tokensWithOverrides = merge(designTokens, overrides);\n return {\n ...tokensWithOverrides[mode],\n ...tokensWithOverrides.static,\n };\n }, [mode, overrides]);\n\n return (\n <ThemeContext.Provider\n value={{\n mode,\n tokens,\n toggleMode: (mode: Mode) => {\n setMode(mode);\n onChange?.(mode);\n },\n }}\n >\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n return useContext(ThemeContext);\n}\n"]}
1
+ {"version":3,"sources":["../../src/providers/theme-provider.tsx"],"names":["designTokens","t","ThemeContext","createContext","defaultContextValue","l","useState","defaultMode","mode","c","overrides","tokensWithOverrides","u","setMode","onChange","h"],"mappings":"0MAyCA,MACE,CAAA,CAAA,CAAA,IAAM,CAAA,MACN,CAAA,MAAU,CAAGA,CAAAA,GAAaC,YAAA,CAAA,IAASD,IAAaC,YAAA,CAAA,MAChD,CAAA,CAAA,UAAuB,CAEvB,CACF,EACMC,CAAAA,CAAeC,CAAAA,CAAiCC,CAAmB,CAAAC,aASlE,CAAA,CAAA,CAAA,CAAA,oBAEL,CAAA,CAAA,CAAA,WACA,CAAA,CAAA,CAAA,QACA,CAAA,CAAA,CAAA,SACqB,CACrB,SAAoB,CAAA,CAAIC,EAAoBC,CAAAA,CAAAA,QAAe,CAAA,CAAA,EAAA,MAEjD,YAAM,IACV,CAAA,GAAA,eACM,CAAA,eAAoB,YACZ,CAAA,CAAA,CAAA,SAAU,CAAA,MAAO,CAAA,cACjB,CAAA,CAAA,CAAA,CAAA,SAAU,CAAIC,GAElC,CAAA,CAAG,EAACA,CAAI,CAAC,CAAA,CAET,CAAA,CAAA,CAAA,CAAA,MAA2C,CAAA,CAAAC,OAAA,CAAM,IAC/C,CAAA,MAAkCT,CAAAA,CAAcU,KAAS,CAAAT,YACzD,CAAA,CAAA,CAAA,CAAA,OACKU,CAAAA,GAAwB,CAC3B,GAAGA,CAAAA,GAAoB,CAAA,CAAA,MAEvBH,CAAAA,CAAME,CAAS,CAAC,CAAA,CAEpB,WACgBE,GAAA,CAAA,CAAA,CAAA,eAEV,CAAA,CAAA,IACA,CAAA,CAAA,CAAA,MACA,CAAA,CAAA,CAAA,UAAiC,CAC/BC,CAAAA,EAAY,CAAA,CACZC,CAAAA,CAAAA,CAAAA,CAAWN,CAAI,GAEnB,CAEC,EAAA,CAAA,CAAA,CAAA,QAGP,CAEO,CAAA,CAAA,CAAA,CAAA,SACL,CAAA,EAAA,CAAA,OACFO,UAAA,CAAA,CAAA,CAAA","file":"theme-provider.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n'use client';\n\nimport 'client-only';\nimport { merge } from 'lodash';\nimport {\n createContext,\n type PropsWithChildren,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { designTokens } from '../tokens/tokens';\nimport type { PartialDeep } from 'type-fest';\nimport type {\n SemanticColorTokens,\n StaticColorTokens,\n ThemeTokens,\n} from '@/tokens/types';\n\nexport type ThemeMode = 'dark' | 'light';\ntype ContextColorTokens = SemanticColorTokens & StaticColorTokens;\n\ntype ThemeContextValue = {\n mode: ThemeMode;\n tokens: ContextColorTokens;\n toggleMode: (mode: ThemeMode) => void;\n};\n/** provide default context value to avoid optional chaining and null checks on the client */\nconst defaultContextValue: ThemeContextValue = {\n mode: 'dark',\n tokens: { ...designTokens.dark, ...designTokens.static },\n toggleMode: (_mode) => {\n // no-op\n },\n};\nconst ThemeContext = createContext<ThemeContextValue>(defaultContextValue);\n\ntype ThemeProviderProps = PropsWithChildren & {\n defaultMode?: ThemeMode;\n onChange?: (mode: ThemeMode) => void;\n /** override existing values in the theme */\n overrides?: PartialDeep<ThemeTokens>;\n};\n\nexport function ThemeProvider({\n children,\n defaultMode,\n onChange,\n overrides,\n}: ThemeProviderProps) {\n const [mode, setMode] = useState<ThemeMode>(defaultMode ?? 'dark');\n\n useEffect(() => {\n if (document) {\n const { documentElement } = document;\n documentElement.classList.remove('dark', 'light');\n documentElement.classList.add(mode);\n }\n }, [mode]);\n\n const tokens: ContextColorTokens = useMemo(() => {\n const tokensWithOverrides = merge(designTokens, overrides);\n return {\n ...tokensWithOverrides[mode],\n ...tokensWithOverrides.static,\n };\n }, [mode, overrides]);\n\n return (\n <ThemeContext.Provider\n value={{\n mode,\n tokens,\n toggleMode: (mode: ThemeMode) => {\n setMode(mode);\n onChange?.(mode);\n },\n }}\n >\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n return useContext(ThemeContext);\n}\n"]}