@brycks/core-front 0.3.5 → 0.3.6
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/components/data/List/List.cjs +1 -1
- package/dist/components/data/List/List.cjs.map +1 -1
- package/dist/components/data/List/List.js +1 -1
- package/dist/components/data/List/List.js.map +1 -1
- package/dist/components/data/Table/Table.cjs +1 -1
- package/dist/components/data/Table/Table.cjs.map +1 -1
- package/dist/components/data/Table/Table.js +141 -124
- package/dist/components/data/Table/Table.js.map +1 -1
- package/dist/components/data/TreeView/TreeView.cjs +1 -1
- package/dist/components/data/TreeView/TreeView.cjs.map +1 -1
- package/dist/components/data/TreeView/TreeView.js +1 -1
- package/dist/components/data/TreeView/TreeView.js.map +1 -1
- package/dist/components/feedback/Alert/Alert.cjs +1 -1
- package/dist/components/feedback/Alert/Alert.cjs.map +1 -1
- package/dist/components/feedback/Alert/Alert.js +20 -19
- package/dist/components/feedback/Alert/Alert.js.map +1 -1
- package/dist/components/feedback/Drawer/Drawer.cjs +2 -2
- package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -1
- package/dist/components/feedback/Drawer/Drawer.js +58 -57
- package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
- package/dist/components/feedback/Modal/Modal.cjs +1 -1
- package/dist/components/feedback/Modal/Modal.cjs.map +1 -1
- package/dist/components/feedback/Modal/Modal.js +63 -61
- package/dist/components/feedback/Modal/Modal.js.map +1 -1
- package/dist/components/feedback/Popover/Popover.cjs +2 -2
- package/dist/components/feedback/Popover/Popover.cjs.map +1 -1
- package/dist/components/feedback/Popover/Popover.js +88 -79
- package/dist/components/feedback/Popover/Popover.js.map +1 -1
- package/dist/components/feedback/Toast/Toast.cjs +2 -2
- package/dist/components/feedback/Toast/Toast.cjs.map +1 -1
- package/dist/components/feedback/Toast/Toast.js +102 -93
- package/dist/components/feedback/Toast/Toast.js.map +1 -1
- package/dist/components/form/Combobox/Combobox.cjs +2 -2
- package/dist/components/form/Combobox/Combobox.cjs.map +1 -1
- package/dist/components/form/Combobox/Combobox.js +139 -139
- package/dist/components/form/Combobox/Combobox.js.map +1 -1
- package/dist/components/form/DateInput/DateInput.cjs +1 -1
- package/dist/components/form/DateInput/DateInput.cjs.map +1 -1
- package/dist/components/form/DateInput/DateInput.js +2 -2
- package/dist/components/form/DateInput/DateInput.js.map +1 -1
- package/dist/components/form/DateRangePicker/DateRangePicker.cjs +1 -1
- package/dist/components/form/DateRangePicker/DateRangePicker.cjs.map +1 -1
- package/dist/components/form/DateRangePicker/DateRangePicker.js +34 -34
- package/dist/components/form/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/form/DropZone/DropZone.cjs +1 -1
- package/dist/components/form/DropZone/DropZone.cjs.map +1 -1
- package/dist/components/form/DropZone/DropZone.js +10 -10
- package/dist/components/form/DropZone/DropZone.js.map +1 -1
- package/dist/components/form/FileInput/FileInput.cjs +1 -1
- package/dist/components/form/FileInput/FileInput.cjs.map +1 -1
- package/dist/components/form/FileInput/FileInput.js +1 -1
- package/dist/components/form/FileInput/FileInput.js.map +1 -1
- package/dist/components/form/FormCard/FormCard.cjs +1 -1
- package/dist/components/form/FormCard/FormCard.cjs.map +1 -1
- package/dist/components/form/FormCard/FormCard.js +9 -9
- package/dist/components/form/FormCard/FormCard.js.map +1 -1
- package/dist/components/form/FormField/FormField.cjs +1 -1
- package/dist/components/form/FormField/FormField.cjs.map +1 -1
- package/dist/components/form/FormField/FormField.js +67 -55
- package/dist/components/form/FormField/FormField.js.map +1 -1
- package/dist/components/form/MultiSelect/MultiSelect.cjs +1 -1
- package/dist/components/form/MultiSelect/MultiSelect.cjs.map +1 -1
- package/dist/components/form/MultiSelect/MultiSelect.js +2 -3
- package/dist/components/form/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/components/form/Radio/Radio.cjs +1 -1
- package/dist/components/form/Radio/Radio.cjs.map +1 -1
- package/dist/components/form/Radio/Radio.js +20 -20
- package/dist/components/form/Radio/Radio.js.map +1 -1
- package/dist/components/form/TagInput/TagInput.cjs +1 -1
- package/dist/components/form/TagInput/TagInput.cjs.map +1 -1
- package/dist/components/form/TagInput/TagInput.js +104 -102
- package/dist/components/form/TagInput/TagInput.js.map +1 -1
- package/dist/components/form/TimePicker/TimePicker.cjs +1 -1
- package/dist/components/form/TimePicker/TimePicker.cjs.map +1 -1
- package/dist/components/form/TimePicker/TimePicker.js +29 -30
- package/dist/components/form/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/layout/Collapse/Collapse.cjs.map +1 -1
- package/dist/components/layout/Collapse/Collapse.js.map +1 -1
- package/dist/components/media/Image/Image.cjs +1 -1
- package/dist/components/media/Image/Image.cjs.map +1 -1
- package/dist/components/media/Image/Image.js +9 -9
- package/dist/components/media/Image/Image.js.map +1 -1
- package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +1 -1
- package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -1
- package/dist/components/media/ImageThumbnail/ImageThumbnail.js +6 -6
- package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -1
- package/dist/components/navigation/Accordion/Accordion.cjs +1 -1
- package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -1
- package/dist/components/navigation/Accordion/Accordion.js +0 -1
- package/dist/components/navigation/Accordion/Accordion.js.map +1 -1
- package/dist/components/navigation/Menu/Menu.cjs +1 -1
- package/dist/components/navigation/Menu/Menu.cjs.map +1 -1
- package/dist/components/navigation/Menu/Menu.js +87 -86
- package/dist/components/navigation/Menu/Menu.js.map +1 -1
- package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
- package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +107 -99
- package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
- package/dist/components/utility/Avatar/Avatar.cjs +1 -1
- package/dist/components/utility/Avatar/Avatar.cjs.map +1 -1
- package/dist/components/utility/Avatar/Avatar.js +10 -10
- package/dist/components/utility/Avatar/Avatar.js.map +1 -1
- package/dist/components/utility/Logo/Logo.cjs +1 -1
- package/dist/components/utility/Logo/Logo.cjs.map +1 -1
- package/dist/components/utility/Logo/Logo.js +10 -10
- package/dist/components/utility/Logo/Logo.js.map +1 -1
- package/dist/design-system/themes/ThemeProvider.cjs +1 -1
- package/dist/design-system/themes/ThemeProvider.cjs.map +1 -1
- package/dist/design-system/themes/ThemeProvider.js +46 -46
- package/dist/design-system/themes/ThemeProvider.js.map +1 -1
- package/dist/design-system/tokens/zIndex.cjs +1 -1
- package/dist/design-system/tokens/zIndex.cjs.map +1 -1
- package/dist/design-system/tokens/zIndex.js +2 -0
- package/dist/design-system/tokens/zIndex.js.map +1 -1
- package/dist/feedback.d.ts +8 -0
- package/dist/form.d.ts +10 -0
- package/dist/index.d.ts +29 -0
- package/dist/navigation.d.ts +19 -0
- package/dist/styles.css +1 -1
- package/dist/tokens.d.ts +2 -0
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logo.js","sources":["../../../../src/components/utility/Logo/Logo.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type LogoSize = 'sm' | 'md' | 'lg' | 'xl'\n\nconst sizeMap: Record<LogoSize, number> = {\n sm: 32,\n md: 40,\n lg: 56,\n xl: 64,\n}\n\nconst fontSizeMap: Record<LogoSize, number> = {\n sm: 14,\n md: 18,\n lg: 24,\n xl: 28,\n}\n\nconst radiusMap: Record<LogoSize, number> = {\n sm: 8,\n md: 10,\n lg: 14,\n xl: 16,\n}\n\nexport interface LogoProps extends HTMLAttributes<HTMLDivElement> {\n /** Size of the logo */\n size?: LogoSize\n /** Content to display (usually a letter or icon) */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Logo = forwardRef<HTMLDivElement, LogoProps>(\n function Logo(\n {\n size = 'md',\n children,\n className,\n testId,\n style,\n ...props\n },\n ref\n ) {\n const dimension = sizeMap[size]\n const fontSize = fontSizeMap[size]\n const radius = radiusMap[size]\n\n const logoStyle: CSSProperties = {\n width: dimension,\n height: dimension,\n minWidth: dimension,\n borderRadius: radius,\n background: 'linear-gradient(135deg, var(--brycks-primary-default) 0%, var(--brycks-primary-
|
|
1
|
+
{"version":3,"file":"Logo.js","sources":["../../../../src/components/utility/Logo/Logo.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type ReactNode, type HTMLAttributes } from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type LogoSize = 'sm' | 'md' | 'lg' | 'xl'\n\nconst sizeMap: Record<LogoSize, number> = {\n sm: 32,\n md: 40,\n lg: 56,\n xl: 64,\n}\n\nconst fontSizeMap: Record<LogoSize, number> = {\n sm: 14,\n md: 18,\n lg: 24,\n xl: 28,\n}\n\nconst radiusMap: Record<LogoSize, number> = {\n sm: 8,\n md: 10,\n lg: 14,\n xl: 16,\n}\n\nexport interface LogoProps extends HTMLAttributes<HTMLDivElement> {\n /** Size of the logo */\n size?: LogoSize\n /** Content to display (usually a letter or icon) */\n children?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Logo = forwardRef<HTMLDivElement, LogoProps>(\n function Logo(\n {\n size = 'md',\n children,\n className,\n testId,\n style,\n ...props\n },\n ref\n ) {\n const dimension = sizeMap[size]\n const fontSize = fontSizeMap[size]\n const radius = radiusMap[size]\n\n const logoStyle: CSSProperties = {\n width: dimension,\n height: dimension,\n minWidth: dimension,\n borderRadius: radius,\n background: 'linear-gradient(135deg, var(--brycks-primary-default) 0%, var(--brycks-primary-hover) 100%)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontWeight: 700,\n fontSize,\n boxShadow: '0 2px 8px rgba(59, 92, 233, 0.3)',\n ...style,\n }\n\n return (\n <div\n ref={ref}\n className={cx('brycks-logo', className)}\n style={logoStyle}\n data-testid={testId}\n aria-hidden=\"true\"\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nLogo.displayName = 'Logo'\n"],"names":["sizeMap","fontSizeMap","radiusMap","Logo","forwardRef","size","children","className","testId","style","props","ref","dimension","fontSize","radius","logoStyle","jsx","cx"],"mappings":";;;AAKA,MAAMA,IAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAaaC,IAAOC;AAAA,EAClB,SACE;AAAA,IACE,MAAAC,IAAO;AAAA,IACP,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,GACA;AACA,UAAMC,IAAYZ,EAAQK,CAAI,GACxBQ,IAAWZ,EAAYI,CAAI,GAC3BS,IAASZ,EAAUG,CAAI,GAEvBU,IAA2B;AAAA,MAC/B,OAAOH;AAAA,MACP,QAAQA;AAAA,MACR,UAAUA;AAAA,MACV,cAAcE;AAAA,MACd,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAAD;AAAA,MACA,WAAW;AAAA,MACX,GAAGJ;AAAA,IAAA;AAGL,WACE,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAL;AAAA,QACA,WAAWM,EAAG,eAAeV,CAAS;AAAA,QACtC,OAAOQ;AAAA,QACP,eAAaP;AAAA,QACb,eAAY;AAAA,QACX,GAAGE;AAAA,QAEH,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAH,EAAK,cAAc;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime"),s=require("react"),x=require("./lightTheme.cjs"),O=require("./darkTheme.cjs"),y=s.createContext(null),M="brycks-theme-mode";function P(o,n){return n?Object.keys(o).reduce((c,r)=>{const m=o[r],u=n[r];return typeof m=="object"&&typeof u=="object"?c[r]={...m,...u}:u!==void 0?c[r]=u:c[r]=m,c},{}):o}function L({children:o,config:n,skipCSSVariables:c=!1}){const[r,m]=s.useState(()=>typeof window>"u"?n?.defaultMode??"system":localStorage.getItem(M)??n?.defaultMode??"system"),[u,C]=s.useState(()=>typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light");s.useEffect(()=>{const e=window.matchMedia("(prefers-color-scheme: dark)"),d=T=>{C(T.matches?"dark":"light")};return e.addEventListener("change",d),()=>e.removeEventListener("change",d)},[]);const t=r==="system"?u:r,h=s.useMemo(()=>{const e=t==="dark"?O.darkTheme:x.lightTheme,d=t==="dark"?n?.dark:n?.light;return d?{name:e.name,colors:P(e.colors,d)}:e},[t,n]),f=s.useCallback(e=>{m(e),typeof window<"u"&&localStorage.setItem(M,e)},[]),b=s.useCallback(()=>{f(t==="dark"?"light":"dark")},[t,f]);s.useEffect(()=>{if(c||typeof document>"u")return;const e=document.documentElement;e.style.colorScheme=t,e.dataset.theme=t,t==="dark"?e.classList.add("dark"):e.classList.remove("dark");const d=i=>i.replace(/[A-Z]/g,a=>`-${a.toLowerCase()}`),T=(i,a="")=>Object.entries(i).reduce((g,[v,l])=>{const k=d(v),w=a?`${a}-${k}`:k;return typeof l=="object"&&l!==null?Object.assign(g,T(l,w)):typeof l=="string"&&(g[`--brycks-${w}`]=l),g},{}),j=T(h.colors);Object.entries(j).forEach(([i,a])=>{e.style.setProperty(i,a)})},[h,t,c]);const E=s.useMemo(()=>({theme:h,mode:r,resolvedMode:t,setMode:f,toggleMode:b}),[h,r,t,f,b]);return S.jsx(y.Provider,{value:E,children:o})}function p(){const o=s.useContext(y);if(!o)throw new Error("useTheme must be used within a ThemeProvider");return o}function q(){const{theme:o}=p();return o.colors}exports.ThemeContext=y;exports.ThemeProvider=L;exports.useTheme=p;exports.useThemeColors=q;
|
|
2
2
|
//# sourceMappingURL=ThemeProvider.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.cjs","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"sourcesContent":["/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${
|
|
1
|
+
{"version":3,"file":"ThemeProvider.cjs","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"sourcesContent":["/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables.\r\n // Keys are converted to kebab-case so generated names match the ones the\r\n // stylesheets consume (e.g. softHover -> --brycks-primary-soft-hover).\r\n const toKebab = (key: string) => key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const segment = toKebab(key)\r\n const varName = prefix ? `${prefix}-${segment}` : segment\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n"],"names":["ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","darkTheme","lightTheme","setMode","useCallback","newMode","toggleMode","root","toKebab","m","flattenColors","obj","prefix","value","segment","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors"],"mappings":"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"}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { createContext as
|
|
3
|
-
import { lightTheme as
|
|
4
|
-
import { darkTheme as
|
|
5
|
-
const j =
|
|
6
|
-
function
|
|
7
|
-
return s ? Object.keys(o).reduce((
|
|
8
|
-
const
|
|
9
|
-
return typeof
|
|
1
|
+
import { jsx as O } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as S, useState as b, useEffect as k, useMemo as T, useCallback as M, useContext as P } from "react";
|
|
3
|
+
import { lightTheme as $ } from "./lightTheme.js";
|
|
4
|
+
import { darkTheme as V } from "./darkTheme.js";
|
|
5
|
+
const j = S(null), E = "brycks-theme-mode";
|
|
6
|
+
function A(o, s) {
|
|
7
|
+
return s ? Object.keys(o).reduce((n, r) => {
|
|
8
|
+
const a = o[r], c = s[r];
|
|
9
|
+
return typeof a == "object" && typeof c == "object" ? n[r] = { ...a, ...c } : c !== void 0 ? n[r] = c : n[r] = a, n;
|
|
10
10
|
}, {}) : o;
|
|
11
11
|
}
|
|
12
|
-
function
|
|
12
|
+
function N({
|
|
13
13
|
children: o,
|
|
14
14
|
config: s,
|
|
15
|
-
skipCSSVariables:
|
|
15
|
+
skipCSSVariables: n = !1
|
|
16
16
|
}) {
|
|
17
|
-
const [r,
|
|
17
|
+
const [r, a] = b(() => typeof window > "u" ? s?.defaultMode ?? "system" : localStorage.getItem(E) ?? s?.defaultMode ?? "system"), [c, v] = b(() => typeof window > "u" ? "light" : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
18
18
|
k(() => {
|
|
19
|
-
const e = window.matchMedia("(prefers-color-scheme: dark)"),
|
|
20
|
-
v(
|
|
19
|
+
const e = window.matchMedia("(prefers-color-scheme: dark)"), d = (h) => {
|
|
20
|
+
v(h.matches ? "dark" : "light");
|
|
21
21
|
};
|
|
22
|
-
return e.addEventListener("change",
|
|
22
|
+
return e.addEventListener("change", d), () => e.removeEventListener("change", d);
|
|
23
23
|
}, []);
|
|
24
|
-
const t = r === "system" ? c : r,
|
|
25
|
-
const e = t === "dark" ?
|
|
26
|
-
return
|
|
24
|
+
const t = r === "system" ? c : r, l = T(() => {
|
|
25
|
+
const e = t === "dark" ? V : $, d = t === "dark" ? s?.dark : s?.light;
|
|
26
|
+
return d ? {
|
|
27
27
|
name: e.name,
|
|
28
|
-
colors:
|
|
28
|
+
colors: A(e.colors, d)
|
|
29
29
|
} : e;
|
|
30
|
-
}, [t, s]),
|
|
31
|
-
|
|
32
|
-
}, []),
|
|
33
|
-
|
|
34
|
-
}, [t,
|
|
30
|
+
}, [t, s]), f = M((e) => {
|
|
31
|
+
a(e), typeof window < "u" && localStorage.setItem(E, e);
|
|
32
|
+
}, []), g = M(() => {
|
|
33
|
+
f(t === "dark" ? "light" : "dark");
|
|
34
|
+
}, [t, f]);
|
|
35
35
|
k(() => {
|
|
36
|
-
if (
|
|
36
|
+
if (n || typeof document > "u") return;
|
|
37
37
|
const e = document.documentElement;
|
|
38
38
|
e.style.colorScheme = t, e.dataset.theme = t, t === "dark" ? e.classList.add("dark") : e.classList.remove("dark");
|
|
39
|
-
const
|
|
40
|
-
(y, [
|
|
41
|
-
const w =
|
|
42
|
-
return typeof
|
|
39
|
+
const d = (i) => i.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`), h = (i, m = "") => Object.entries(i).reduce(
|
|
40
|
+
(y, [L, u]) => {
|
|
41
|
+
const p = d(L), w = m ? `${m}-${p}` : p;
|
|
42
|
+
return typeof u == "object" && u !== null ? Object.assign(y, h(u, w)) : typeof u == "string" && (y[`--brycks-${w}`] = u), y;
|
|
43
43
|
},
|
|
44
44
|
{}
|
|
45
|
-
),
|
|
46
|
-
Object.entries(
|
|
47
|
-
e.style.setProperty(
|
|
45
|
+
), x = h(l.colors);
|
|
46
|
+
Object.entries(x).forEach(([i, m]) => {
|
|
47
|
+
e.style.setProperty(i, m);
|
|
48
48
|
});
|
|
49
|
-
}, [
|
|
50
|
-
const C =
|
|
49
|
+
}, [l, t, n]);
|
|
50
|
+
const C = T(
|
|
51
51
|
() => ({
|
|
52
|
-
theme:
|
|
52
|
+
theme: l,
|
|
53
53
|
mode: r,
|
|
54
54
|
resolvedMode: t,
|
|
55
|
-
setMode:
|
|
56
|
-
toggleMode:
|
|
55
|
+
setMode: f,
|
|
56
|
+
toggleMode: g
|
|
57
57
|
}),
|
|
58
|
-
[
|
|
58
|
+
[l, r, t, f, g]
|
|
59
59
|
);
|
|
60
|
-
return /* @__PURE__ */
|
|
60
|
+
return /* @__PURE__ */ O(j.Provider, { value: C, children: o });
|
|
61
61
|
}
|
|
62
|
-
function
|
|
63
|
-
const o =
|
|
62
|
+
function I() {
|
|
63
|
+
const o = P(j);
|
|
64
64
|
if (!o)
|
|
65
65
|
throw new Error("useTheme must be used within a ThemeProvider");
|
|
66
66
|
return o;
|
|
67
67
|
}
|
|
68
|
-
function
|
|
69
|
-
const { theme: o } =
|
|
68
|
+
function Q() {
|
|
69
|
+
const { theme: o } = I();
|
|
70
70
|
return o.colors;
|
|
71
71
|
}
|
|
72
72
|
export {
|
|
73
73
|
j as ThemeContext,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
N as ThemeProvider,
|
|
75
|
+
I as useTheme,
|
|
76
|
+
Q as useThemeColors
|
|
77
77
|
};
|
|
78
78
|
//# sourceMappingURL=ThemeProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.js","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"sourcesContent":["/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const varName = prefix ? `${prefix}-${
|
|
1
|
+
{"version":3,"file":"ThemeProvider.js","sources":["../../../src/design-system/themes/ThemeProvider.tsx"],"sourcesContent":["/**\r\n * Brycks Design System - Theme Provider\r\n *\r\n * React context provider for theme management.\r\n * Handles light/dark mode switching and system preference detection.\r\n */\r\n\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react'\r\nimport { lightTheme } from './lightTheme'\r\nimport { darkTheme } from './darkTheme'\r\nimport type { Theme, ThemeContextValue, ThemeMode, ThemeConfig, ThemeColors } from './types'\r\n\r\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\r\n\r\n/** Storage key for persisting theme preference */\r\nconst THEME_STORAGE_KEY = 'brycks-theme-mode'\r\n\r\n/** Deep merge theme colors */\r\nfunction mergeThemeColors(base: ThemeColors, overrides?: Partial<ThemeColors>): ThemeColors {\r\n if (!overrides) return base\r\n\r\n return Object.keys(base).reduce((acc, key) => {\r\n const baseValue = base[key as keyof ThemeColors]\r\n const overrideValue = overrides[key as keyof ThemeColors]\r\n\r\n if (typeof baseValue === 'object' && typeof overrideValue === 'object') {\r\n acc[key as keyof ThemeColors] = { ...baseValue, ...overrideValue } as never\r\n } else if (overrideValue !== undefined) {\r\n acc[key as keyof ThemeColors] = overrideValue as never\r\n } else {\r\n acc[key as keyof ThemeColors] = baseValue as never\r\n }\r\n\r\n return acc\r\n }, {} as ThemeColors)\r\n}\r\n\r\ninterface ThemeProviderProps {\r\n /** Child components */\r\n children: ReactNode\r\n /** Theme configuration for customization */\r\n config?: ThemeConfig\r\n /** Skip injecting CSS variables (for SSR or custom handling) */\r\n skipCSSVariables?: boolean\r\n}\r\n\r\nexport function ThemeProvider({\r\n children,\r\n config,\r\n skipCSSVariables = false,\r\n}: ThemeProviderProps) {\r\n const [mode, setModeState] = useState<ThemeMode>(() => {\r\n if (typeof window === 'undefined') return config?.defaultMode ?? 'system'\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY) as ThemeMode | null\r\n return stored ?? config?.defaultMode ?? 'system'\r\n })\r\n\r\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => {\r\n if (typeof window === 'undefined') return 'light'\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\r\n })\r\n\r\n // Listen to system preference changes\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n const handleChange = (e: MediaQueryListEvent) => {\r\n setSystemMode(e.matches ? 'dark' : 'light')\r\n }\r\n\r\n mediaQuery.addEventListener('change', handleChange)\r\n return () => mediaQuery.removeEventListener('change', handleChange)\r\n }, [])\r\n\r\n // Resolve actual mode (never 'system')\r\n const resolvedMode = mode === 'system' ? systemMode : mode\r\n\r\n // Build theme with any config overrides\r\n const theme = useMemo<Theme>(() => {\r\n const baseTheme = resolvedMode === 'dark' ? darkTheme : lightTheme\r\n const overrides = resolvedMode === 'dark' ? config?.dark : config?.light\r\n\r\n if (!overrides) return baseTheme\r\n\r\n return {\r\n name: baseTheme.name,\r\n colors: mergeThemeColors(baseTheme.colors, overrides),\r\n }\r\n }, [resolvedMode, config])\r\n\r\n // Persist mode to localStorage\r\n const setMode = useCallback((newMode: ThemeMode) => {\r\n setModeState(newMode)\r\n if (typeof window !== 'undefined') {\r\n localStorage.setItem(THEME_STORAGE_KEY, newMode)\r\n }\r\n }, [])\r\n\r\n const toggleMode = useCallback(() => {\r\n setMode(resolvedMode === 'dark' ? 'light' : 'dark')\r\n }, [resolvedMode, setMode])\r\n\r\n // Inject CSS variables\r\n useEffect(() => {\r\n if (skipCSSVariables || typeof document === 'undefined') return\r\n\r\n const root = document.documentElement\r\n\r\n // Set color scheme for native browser support\r\n root.style.colorScheme = resolvedMode\r\n\r\n // Set data attribute for CSS selectors\r\n root.dataset.theme = resolvedMode\r\n\r\n // Add/remove dark class for Tailwind CSS dark mode\r\n if (resolvedMode === 'dark') {\r\n root.classList.add('dark')\r\n } else {\r\n root.classList.remove('dark')\r\n }\r\n\r\n // Flatten and inject CSS variables.\r\n // Keys are converted to kebab-case so generated names match the ones the\r\n // stylesheets consume (e.g. softHover -> --brycks-primary-soft-hover).\r\n const toKebab = (key: string) => key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)\r\n const flattenColors = (obj: Record<string, unknown>, prefix = ''): Record<string, string> => {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n const segment = toKebab(key)\r\n const varName = prefix ? `${prefix}-${segment}` : segment\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n Object.assign(acc, flattenColors(value as Record<string, unknown>, varName))\r\n } else if (typeof value === 'string') {\r\n acc[`--brycks-${varName}`] = value\r\n }\r\n\r\n return acc\r\n },\r\n {} as Record<string, string>\r\n )\r\n }\r\n\r\n const cssVars = flattenColors(theme.colors as unknown as Record<string, unknown>)\r\n Object.entries(cssVars).forEach(([key, value]) => {\r\n root.style.setProperty(key, value)\r\n })\r\n\r\n // Clean up function not needed as we just overwrite values\r\n }, [theme, resolvedMode, skipCSSVariables])\r\n\r\n const contextValue = useMemo<ThemeContextValue>(\r\n () => ({\r\n theme,\r\n mode,\r\n resolvedMode,\r\n setMode,\r\n toggleMode,\r\n }),\r\n [theme, mode, resolvedMode, setMode, toggleMode]\r\n )\r\n\r\n return <ThemeContext.Provider value={contextValue}>{children}</ThemeContext.Provider>\r\n}\r\n\r\n/** Hook to access theme context */\r\nexport function useTheme(): ThemeContextValue {\r\n const context = useContext(ThemeContext)\r\n\r\n if (!context) {\r\n throw new Error('useTheme must be used within a ThemeProvider')\r\n }\r\n\r\n return context\r\n}\r\n\r\n/** Hook to get current theme colors */\r\nexport function useThemeColors() {\r\n const { theme } = useTheme()\r\n return theme.colors\r\n}\r\n\r\nexport { ThemeContext }\r\n"],"names":["ThemeContext","createContext","THEME_STORAGE_KEY","mergeThemeColors","base","overrides","acc","key","baseValue","overrideValue","ThemeProvider","children","config","skipCSSVariables","mode","setModeState","useState","systemMode","setSystemMode","useEffect","mediaQuery","handleChange","e","resolvedMode","theme","useMemo","baseTheme","darkTheme","lightTheme","setMode","useCallback","newMode","toggleMode","root","toKebab","flattenColors","obj","prefix","value","segment","varName","cssVars","contextValue","useTheme","context","useContext","useThemeColors"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e={hide:-1,auto:"auto",base:0,docked:10,dropdown:1e3,sticky:1100,banner:1200,overlay:1300,modal:1400,drawer:1400,popover:1500,skipLink:1600,toast:1700,tooltip:1800};exports.zIndex=e;
|
|
2
2
|
//# sourceMappingURL=zIndex.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zIndex.cjs","sources":["../../../src/design-system/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Z-Index Tokens\r\n *\r\n * Layering system for consistent stacking context management.\r\n */\r\n\r\n/** Z-index scale */\r\nexport const zIndex = {\r\n /** Hidden - below everything */\r\n hide: -1,\r\n /** Auto - default stacking */\r\n auto: 'auto',\r\n /** Base - normal content */\r\n base: 0,\r\n /** Docked - sticky elements */\r\n docked: 10,\r\n /** Dropdown - menus, selects */\r\n dropdown: 1000,\r\n /** Sticky - sticky headers */\r\n sticky: 1100,\r\n /** Banner - notification banners */\r\n banner: 1200,\r\n /** Overlay - backdrop overlays */\r\n overlay: 1300,\r\n /** Modal - dialog windows */\r\n modal: 1400,\r\n /** Popover - popovers, tooltips */\r\n popover: 1500,\r\n /** Skiplink - accessibility skip links */\r\n skipLink: 1600,\r\n /** Toast - notification toasts */\r\n toast: 1700,\r\n /** Tooltip - tooltips (highest) */\r\n tooltip: 1800,\r\n} as const\r\n\r\nexport type ZIndex = keyof typeof zIndex\r\n"],"names":["zIndex"],"mappings":"gFAOO,MAAMA,EAAS,CAEpB,KAAM,GAEN,KAAM,OAEN,KAAM,EAEN,OAAQ,GAER,SAAU,IAEV,OAAQ,KAER,OAAQ,KAER,QAAS,KAET,MAAO,KAEP,QAAS,KAET,SAAU,KAEV,MAAO,KAEP,QAAS,IACX"}
|
|
1
|
+
{"version":3,"file":"zIndex.cjs","sources":["../../../src/design-system/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Z-Index Tokens\r\n *\r\n * Layering system for consistent stacking context management.\r\n */\r\n\r\n/** Z-index scale */\r\nexport const zIndex = {\r\n /** Hidden - below everything */\r\n hide: -1,\r\n /** Auto - default stacking */\r\n auto: 'auto',\r\n /** Base - normal content */\r\n base: 0,\r\n /** Docked - sticky elements */\r\n docked: 10,\r\n /** Dropdown - menus, selects */\r\n dropdown: 1000,\r\n /** Sticky - sticky headers */\r\n sticky: 1100,\r\n /** Banner - notification banners */\r\n banner: 1200,\r\n /** Overlay - backdrop overlays */\r\n overlay: 1300,\r\n /** Modal - dialog windows */\r\n modal: 1400,\r\n /** Drawer - side panels (same layer as modal) */\r\n drawer: 1400,\r\n /** Popover - popovers, tooltips */\r\n popover: 1500,\r\n /** Skiplink - accessibility skip links */\r\n skipLink: 1600,\r\n /** Toast - notification toasts */\r\n toast: 1700,\r\n /** Tooltip - tooltips (highest) */\r\n tooltip: 1800,\r\n} as const\r\n\r\nexport type ZIndex = keyof typeof zIndex\r\n"],"names":["zIndex"],"mappings":"gFAOO,MAAMA,EAAS,CAEpB,KAAM,GAEN,KAAM,OAEN,KAAM,EAEN,OAAQ,GAER,SAAU,IAEV,OAAQ,KAER,OAAQ,KAER,QAAS,KAET,MAAO,KAEP,OAAQ,KAER,QAAS,KAET,SAAU,KAEV,MAAO,KAEP,QAAS,IACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zIndex.js","sources":["../../../src/design-system/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Z-Index Tokens\r\n *\r\n * Layering system for consistent stacking context management.\r\n */\r\n\r\n/** Z-index scale */\r\nexport const zIndex = {\r\n /** Hidden - below everything */\r\n hide: -1,\r\n /** Auto - default stacking */\r\n auto: 'auto',\r\n /** Base - normal content */\r\n base: 0,\r\n /** Docked - sticky elements */\r\n docked: 10,\r\n /** Dropdown - menus, selects */\r\n dropdown: 1000,\r\n /** Sticky - sticky headers */\r\n sticky: 1100,\r\n /** Banner - notification banners */\r\n banner: 1200,\r\n /** Overlay - backdrop overlays */\r\n overlay: 1300,\r\n /** Modal - dialog windows */\r\n modal: 1400,\r\n /** Popover - popovers, tooltips */\r\n popover: 1500,\r\n /** Skiplink - accessibility skip links */\r\n skipLink: 1600,\r\n /** Toast - notification toasts */\r\n toast: 1700,\r\n /** Tooltip - tooltips (highest) */\r\n tooltip: 1800,\r\n} as const\r\n\r\nexport type ZIndex = keyof typeof zIndex\r\n"],"names":["zIndex"],"mappings":"AAOO,MAAMA,IAAS;AAAA;AAAA,EAEpB,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA;AAAA,EAEN,QAAQ;AAAA;AAAA,EAER,UAAU;AAAA;AAAA,EAEV,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,SAAS;AAAA;AAAA,EAET,UAAU;AAAA;AAAA,EAEV,OAAO;AAAA;AAAA,EAEP,SAAS;AACX;"}
|
|
1
|
+
{"version":3,"file":"zIndex.js","sources":["../../../src/design-system/tokens/zIndex.ts"],"sourcesContent":["/**\r\n * Brycks Design System - Z-Index Tokens\r\n *\r\n * Layering system for consistent stacking context management.\r\n */\r\n\r\n/** Z-index scale */\r\nexport const zIndex = {\r\n /** Hidden - below everything */\r\n hide: -1,\r\n /** Auto - default stacking */\r\n auto: 'auto',\r\n /** Base - normal content */\r\n base: 0,\r\n /** Docked - sticky elements */\r\n docked: 10,\r\n /** Dropdown - menus, selects */\r\n dropdown: 1000,\r\n /** Sticky - sticky headers */\r\n sticky: 1100,\r\n /** Banner - notification banners */\r\n banner: 1200,\r\n /** Overlay - backdrop overlays */\r\n overlay: 1300,\r\n /** Modal - dialog windows */\r\n modal: 1400,\r\n /** Drawer - side panels (same layer as modal) */\r\n drawer: 1400,\r\n /** Popover - popovers, tooltips */\r\n popover: 1500,\r\n /** Skiplink - accessibility skip links */\r\n skipLink: 1600,\r\n /** Toast - notification toasts */\r\n toast: 1700,\r\n /** Tooltip - tooltips (highest) */\r\n tooltip: 1800,\r\n} as const\r\n\r\nexport type ZIndex = keyof typeof zIndex\r\n"],"names":["zIndex"],"mappings":"AAOO,MAAMA,IAAS;AAAA;AAAA,EAEpB,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA;AAAA,EAEN,QAAQ;AAAA;AAAA,EAER,UAAU;AAAA;AAAA,EAEV,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA,EAER,SAAS;AAAA;AAAA,EAET,UAAU;AAAA;AAAA,EAEV,OAAO;AAAA;AAAA,EAEP,SAAS;AACX;"}
|
package/dist/feedback.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export declare interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
27
27
|
isDismissible?: boolean;
|
|
28
28
|
/** Callback when dismissed */
|
|
29
29
|
onDismiss?: () => void;
|
|
30
|
+
/** Accessible label of the dismiss button */
|
|
31
|
+
dismissLabel?: string;
|
|
30
32
|
/** Custom class name */
|
|
31
33
|
className?: string;
|
|
32
34
|
/** Test ID */
|
|
@@ -58,6 +60,8 @@ export declare interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>
|
|
|
58
60
|
closeOnEscape?: boolean;
|
|
59
61
|
/** Whether to show close button */
|
|
60
62
|
showCloseButton?: boolean;
|
|
63
|
+
/** Accessible label of the close button */
|
|
64
|
+
closeLabel?: string;
|
|
61
65
|
/** Whether to show overlay */
|
|
62
66
|
showOverlay?: boolean;
|
|
63
67
|
/** Custom class name */
|
|
@@ -87,6 +91,8 @@ export declare interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
87
91
|
closeOnEscape?: boolean;
|
|
88
92
|
/** Whether to show close button */
|
|
89
93
|
showCloseButton?: boolean;
|
|
94
|
+
/** Accessible label of the close button */
|
|
95
|
+
closeLabel?: string;
|
|
90
96
|
/** Custom class name */
|
|
91
97
|
className?: string;
|
|
92
98
|
/** Test ID */
|
|
@@ -200,6 +206,8 @@ export declare interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
200
206
|
onClose?: () => void;
|
|
201
207
|
/** Whether to show close button */
|
|
202
208
|
showCloseButton?: boolean;
|
|
209
|
+
/** Accessible label of the close button */
|
|
210
|
+
closeLabel?: string;
|
|
203
211
|
/** Action button */
|
|
204
212
|
action?: ReactNode;
|
|
205
213
|
/** Custom icon */
|
package/dist/form.d.ts
CHANGED
|
@@ -81,6 +81,12 @@ export declare interface ComboboxProps {
|
|
|
81
81
|
creatable?: boolean;
|
|
82
82
|
/** Callback when creating new option */
|
|
83
83
|
onCreate?: (inputValue: string) => void;
|
|
84
|
+
/** Label of the create-option button */
|
|
85
|
+
createLabel?: (inputValue: string) => ReactNode;
|
|
86
|
+
/** Accessible label of the clear button */
|
|
87
|
+
clearLabel?: string;
|
|
88
|
+
/** Accessible label of the options listbox (when no aria-label is given) */
|
|
89
|
+
listboxLabel?: string;
|
|
84
90
|
/** Custom class name */
|
|
85
91
|
className?: string;
|
|
86
92
|
/** Test ID */
|
|
@@ -609,6 +615,10 @@ export declare interface TagInputProps {
|
|
|
609
615
|
suggestions?: TagItem[];
|
|
610
616
|
/** Custom tag renderer */
|
|
611
617
|
renderTag?: (tag: TagItem, onRemove: () => void) => ReactNode;
|
|
618
|
+
/** Message shown when the tag limit is reached */
|
|
619
|
+
maxTagsMessage?: (maxTags: number) => string;
|
|
620
|
+
/** Message shown when a duplicate tag is rejected */
|
|
621
|
+
duplicateMessage?: string;
|
|
612
622
|
/** Label for accessibility */
|
|
613
623
|
'aria-label'?: string;
|
|
614
624
|
/** Custom class name */
|
package/dist/index.d.ts
CHANGED
|
@@ -110,6 +110,8 @@ export declare interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
110
110
|
isDismissible?: boolean;
|
|
111
111
|
/** Callback when dismissed */
|
|
112
112
|
onDismiss?: () => void;
|
|
113
|
+
/** Accessible label of the dismiss button */
|
|
114
|
+
dismissLabel?: string;
|
|
113
115
|
/** Custom class name */
|
|
114
116
|
className?: string;
|
|
115
117
|
/** Test ID */
|
|
@@ -1202,6 +1204,8 @@ export declare interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>
|
|
|
1202
1204
|
closeOnEscape?: boolean;
|
|
1203
1205
|
/** Whether to show close button */
|
|
1204
1206
|
showCloseButton?: boolean;
|
|
1207
|
+
/** Accessible label of the close button */
|
|
1208
|
+
closeLabel?: string;
|
|
1205
1209
|
/** Whether to show overlay */
|
|
1206
1210
|
showOverlay?: boolean;
|
|
1207
1211
|
/** Custom class name */
|
|
@@ -2518,6 +2522,8 @@ export declare interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
2518
2522
|
closeOnEscape?: boolean;
|
|
2519
2523
|
/** Whether to show close button */
|
|
2520
2524
|
showCloseButton?: boolean;
|
|
2525
|
+
/** Accessible label of the close button */
|
|
2526
|
+
closeLabel?: string;
|
|
2521
2527
|
/** Custom class name */
|
|
2522
2528
|
className?: string;
|
|
2523
2529
|
/** Test ID */
|
|
@@ -2640,6 +2646,23 @@ export declare const pageHeaderSpacing: {
|
|
|
2640
2646
|
|
|
2641
2647
|
export declare const Pagination: ForwardRefExoticComponent<PaginationProps & RefAttributes<HTMLElement>>;
|
|
2642
2648
|
|
|
2649
|
+
declare interface PaginationLabels {
|
|
2650
|
+
/** aria-label of the nav landmark */
|
|
2651
|
+
navigation?: string;
|
|
2652
|
+
/** aria-label of the first-page button */
|
|
2653
|
+
first?: string;
|
|
2654
|
+
/** aria-label of the previous-page button */
|
|
2655
|
+
previous?: string;
|
|
2656
|
+
/** aria-label of the next-page button */
|
|
2657
|
+
next?: string;
|
|
2658
|
+
/** aria-label of the last-page button */
|
|
2659
|
+
last?: string;
|
|
2660
|
+
/** aria-label of a numbered page button */
|
|
2661
|
+
page?: (page: number) => string;
|
|
2662
|
+
/** Visible text of the `simple` variant */
|
|
2663
|
+
of?: (page: number, totalPages: number) => string;
|
|
2664
|
+
}
|
|
2665
|
+
|
|
2643
2666
|
export declare interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
2644
2667
|
/** Current page (1-indexed) */
|
|
2645
2668
|
page: number;
|
|
@@ -2659,6 +2682,8 @@ export declare interface PaginationProps extends Omit<HTMLAttributes<HTMLElement
|
|
|
2659
2682
|
showPrevNext?: boolean;
|
|
2660
2683
|
/** Whether the component is disabled */
|
|
2661
2684
|
disabled?: boolean;
|
|
2685
|
+
/** Localizable labels (merged over English defaults) */
|
|
2686
|
+
labels?: PaginationLabels;
|
|
2662
2687
|
/** Custom class name */
|
|
2663
2688
|
className?: string;
|
|
2664
2689
|
/** Test ID */
|
|
@@ -3933,6 +3958,8 @@ export declare interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
3933
3958
|
onClose?: () => void;
|
|
3934
3959
|
/** Whether to show close button */
|
|
3935
3960
|
showCloseButton?: boolean;
|
|
3961
|
+
/** Accessible label of the close button */
|
|
3962
|
+
closeLabel?: string;
|
|
3936
3963
|
/** Action button */
|
|
3937
3964
|
action?: ReactNode;
|
|
3938
3965
|
/** Custom icon */
|
|
@@ -4298,6 +4325,8 @@ export declare const zIndex: {
|
|
|
4298
4325
|
readonly overlay: 1300;
|
|
4299
4326
|
/** Modal - dialog windows */
|
|
4300
4327
|
readonly modal: 1400;
|
|
4328
|
+
/** Drawer - side panels (same layer as modal) */
|
|
4329
|
+
readonly drawer: 1400;
|
|
4301
4330
|
/** Popover - popovers, tooltips */
|
|
4302
4331
|
readonly popover: 1500;
|
|
4303
4332
|
/** Skiplink - accessibility skip links */
|
package/dist/navigation.d.ts
CHANGED
|
@@ -237,6 +237,23 @@ export declare type MenuSize = 'sm' | 'md' | 'lg';
|
|
|
237
237
|
|
|
238
238
|
export declare const Pagination: ForwardRefExoticComponent<PaginationProps & RefAttributes<HTMLElement>>;
|
|
239
239
|
|
|
240
|
+
declare interface PaginationLabels {
|
|
241
|
+
/** aria-label of the nav landmark */
|
|
242
|
+
navigation?: string;
|
|
243
|
+
/** aria-label of the first-page button */
|
|
244
|
+
first?: string;
|
|
245
|
+
/** aria-label of the previous-page button */
|
|
246
|
+
previous?: string;
|
|
247
|
+
/** aria-label of the next-page button */
|
|
248
|
+
next?: string;
|
|
249
|
+
/** aria-label of the last-page button */
|
|
250
|
+
last?: string;
|
|
251
|
+
/** aria-label of a numbered page button */
|
|
252
|
+
page?: (page: number) => string;
|
|
253
|
+
/** Visible text of the `simple` variant */
|
|
254
|
+
of?: (page: number, totalPages: number) => string;
|
|
255
|
+
}
|
|
256
|
+
|
|
240
257
|
export declare interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
241
258
|
/** Current page (1-indexed) */
|
|
242
259
|
page: number;
|
|
@@ -256,6 +273,8 @@ export declare interface PaginationProps extends Omit<HTMLAttributes<HTMLElement
|
|
|
256
273
|
showPrevNext?: boolean;
|
|
257
274
|
/** Whether the component is disabled */
|
|
258
275
|
disabled?: boolean;
|
|
276
|
+
/** Localizable labels (merged over English defaults) */
|
|
277
|
+
labels?: PaginationLabels;
|
|
259
278
|
/** Custom class name */
|
|
260
279
|
className?: string;
|
|
261
280
|
/** Test ID */
|