beacon-ui 3.1.4

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 (59) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +175 -0
  3. package/dist/components/Avatar.d.ts +20 -0
  4. package/dist/components/Avatar.d.ts.map +1 -0
  5. package/dist/components/Avatar.js +174 -0
  6. package/dist/components/Button.d.ts +21 -0
  7. package/dist/components/Button.d.ts.map +1 -0
  8. package/dist/components/Button.js +227 -0
  9. package/dist/components/Card.d.ts +40 -0
  10. package/dist/components/Card.d.ts.map +1 -0
  11. package/dist/components/Card.js +517 -0
  12. package/dist/components/Checkbox.d.ts +12 -0
  13. package/dist/components/Checkbox.d.ts.map +1 -0
  14. package/dist/components/Checkbox.js +64 -0
  15. package/dist/components/CheckboxPreview.d.ts +13 -0
  16. package/dist/components/CheckboxPreview.d.ts.map +1 -0
  17. package/dist/components/CheckboxPreview.js +155 -0
  18. package/dist/components/Chip.d.ts +15 -0
  19. package/dist/components/Chip.d.ts.map +1 -0
  20. package/dist/components/Chip.js +99 -0
  21. package/dist/components/Input.d.ts +24 -0
  22. package/dist/components/Input.d.ts.map +1 -0
  23. package/dist/components/Input.js +138 -0
  24. package/dist/components/Menu.d.ts +20 -0
  25. package/dist/components/Menu.d.ts.map +1 -0
  26. package/dist/components/Menu.js +252 -0
  27. package/dist/components/RadioButton.d.ts +13 -0
  28. package/dist/components/RadioButton.d.ts.map +1 -0
  29. package/dist/components/RadioButton.js +140 -0
  30. package/dist/components/Switch.d.ts +11 -0
  31. package/dist/components/Switch.d.ts.map +1 -0
  32. package/dist/components/Switch.js +64 -0
  33. package/dist/components/SwitchPreview.d.ts +14 -0
  34. package/dist/components/SwitchPreview.d.ts.map +1 -0
  35. package/dist/components/SwitchPreview.js +281 -0
  36. package/dist/icons/index.d.ts +97 -0
  37. package/dist/icons/index.d.ts.map +1 -0
  38. package/dist/icons/index.js +383 -0
  39. package/dist/index.d.ts +13 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +12 -0
  42. package/dist/providers/ThemeProvider.d.ts +23 -0
  43. package/dist/providers/ThemeProvider.d.ts.map +1 -0
  44. package/dist/providers/ThemeProvider.js +79 -0
  45. package/dist/tokens/types.d.ts +14 -0
  46. package/dist/tokens/types.d.ts.map +1 -0
  47. package/dist/tokens/types.js +5 -0
  48. package/dist/utils/patternPaths.d.ts +28 -0
  49. package/dist/utils/patternPaths.d.ts.map +1 -0
  50. package/dist/utils/patternPaths.js +92 -0
  51. package/package.json +51 -0
  52. package/tokens/generated/brand-dark.css +86 -0
  53. package/tokens/generated/brand-light.css +86 -0
  54. package/tokens/generated/effects.css +10 -0
  55. package/tokens/generated/index.css +804 -0
  56. package/tokens/generated/primitives.css +116 -0
  57. package/tokens/generated/responsive.css +235 -0
  58. package/tokens/generated/semantic.css +138 -0
  59. package/tokens/generated/typography.css +124 -0
@@ -0,0 +1,13 @@
1
+ export { Button } from "./components/Button";
2
+ export { Card } from "./components/Card";
3
+ export { Checkbox } from "./components/Checkbox";
4
+ export { Switch } from "./components/Switch";
5
+ export { Input } from "./components/Input";
6
+ export { Avatar } from "./components/Avatar";
7
+ export { Chip } from "./components/Chip";
8
+ export { Menu } from "./components/Menu";
9
+ export { RadioButton } from "./components/RadioButton";
10
+ export { ThemeProvider, useTheme, useThemeSafe } from "./providers/ThemeProvider";
11
+ export type { Theme, HueVariant } from "./tokens/types";
12
+ export type { ColorPrimitive, SemanticColor, SpacingToken, BackgroundToken, ForegroundToken, BorderToken, } from "./tokens/types";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGlF,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ // Components
2
+ export { Button } from "./components/Button";
3
+ export { Card } from "./components/Card";
4
+ export { Checkbox } from "./components/Checkbox";
5
+ export { Switch } from "./components/Switch";
6
+ export { Input } from "./components/Input";
7
+ export { Avatar } from "./components/Avatar";
8
+ export { Chip } from "./components/Chip";
9
+ export { Menu } from "./components/Menu";
10
+ export { RadioButton } from "./components/RadioButton";
11
+ // Providers
12
+ export { ThemeProvider, useTheme, useThemeSafe } from "./providers/ThemeProvider";
@@ -0,0 +1,23 @@
1
+ import { type ReactNode } from "react";
2
+ import type { Theme, HueVariant } from "../tokens/types";
3
+ interface ThemeContextValue {
4
+ theme: Theme;
5
+ hue: HueVariant;
6
+ setTheme: (theme: Theme) => void;
7
+ setHue: (hue: HueVariant) => void;
8
+ toggleTheme: () => void;
9
+ }
10
+ interface ThemeProviderProps {
11
+ children: ReactNode;
12
+ defaultTheme?: Theme;
13
+ defaultHue?: HueVariant;
14
+ }
15
+ export declare function ThemeProvider({ children, defaultTheme, defaultHue, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function useTheme(): ThemeContextValue;
17
+ /**
18
+ * Safe hook that returns undefined if not within provider.
19
+ * Useful for optional theme access.
20
+ */
21
+ export declare function useThemeSafe(): ThemeContextValue | null;
22
+ export {};
23
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,UAAU,iBAAiB;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAOD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAAqB,EACrB,UAAsB,GACvB,EAAE,kBAAkB,2CA+EpB;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,GAAG,IAAI,CAEvD"}
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect, useState, useCallback, } from "react";
4
+ const ThemeContext = createContext(null);
5
+ const THEME_STORAGE_KEY = "design-system-theme";
6
+ const HUE_STORAGE_KEY = "design-system-hue";
7
+ export function ThemeProvider({ children, defaultTheme = "dark", defaultHue = "hue-sky", }) {
8
+ const [theme, setThemeState] = useState(defaultTheme);
9
+ const [hue, setHueState] = useState(defaultHue);
10
+ const [mounted, setMounted] = useState(false);
11
+ // Initialize theme from storage or use default
12
+ useEffect(() => {
13
+ setMounted(true);
14
+ // Check localStorage first
15
+ const storedTheme = localStorage.getItem(THEME_STORAGE_KEY);
16
+ const storedHue = localStorage.getItem(HUE_STORAGE_KEY);
17
+ if (storedTheme) {
18
+ setThemeState(storedTheme);
19
+ }
20
+ else {
21
+ // Use default theme (dark) for first-time users
22
+ setThemeState(defaultTheme);
23
+ }
24
+ if (storedHue) {
25
+ setHueState(storedHue);
26
+ }
27
+ else {
28
+ // Use default hue (hue-indigo) for first-time users
29
+ setHueState(defaultHue);
30
+ }
31
+ }, [defaultTheme, defaultHue]);
32
+ // Apply theme to document
33
+ useEffect(() => {
34
+ if (!mounted)
35
+ return;
36
+ const root = document.documentElement;
37
+ root.setAttribute("data-theme", theme);
38
+ root.setAttribute("data-hue", hue);
39
+ // Update meta theme-color for mobile browsers
40
+ const metaThemeColor = document.querySelector('meta[name="theme-color"]');
41
+ if (metaThemeColor) {
42
+ metaThemeColor.setAttribute("content", theme === "dark" ? "#151414" : "#f7fafc");
43
+ }
44
+ }, [theme, hue, mounted]);
45
+ // Note: System preference detection removed to use dark theme as default
46
+ // Users can still manually change theme, which will be saved to localStorage
47
+ const setTheme = useCallback((newTheme) => {
48
+ setThemeState(newTheme);
49
+ localStorage.setItem(THEME_STORAGE_KEY, newTheme);
50
+ }, []);
51
+ const setHue = useCallback((newHue) => {
52
+ setHueState(newHue);
53
+ localStorage.setItem(HUE_STORAGE_KEY, newHue);
54
+ }, []);
55
+ const toggleTheme = useCallback(() => {
56
+ setTheme(theme === "light" ? "dark" : "light");
57
+ }, [theme, setTheme]);
58
+ return (_jsx(ThemeContext.Provider, { value: {
59
+ theme,
60
+ hue,
61
+ setTheme,
62
+ setHue,
63
+ toggleTheme,
64
+ }, children: _jsx("div", { style: { visibility: mounted ? "visible" : "hidden" }, children: children }) }));
65
+ }
66
+ export function useTheme() {
67
+ const context = useContext(ThemeContext);
68
+ if (context === null) {
69
+ throw new Error("useTheme must be used within a ThemeProvider");
70
+ }
71
+ return context;
72
+ }
73
+ /**
74
+ * Safe hook that returns undefined if not within provider.
75
+ * Useful for optional theme access.
76
+ */
77
+ export function useThemeSafe() {
78
+ return useContext(ThemeContext);
79
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Auto-generated token types
3
+ * Do not edit directly - regenerate with `npm run build:tokens`
4
+ */
5
+ export type ColorPrimitive = "Color.Purple.100" | "Color.Purple.200" | "Color.Purple.300" | "Color.Purple.400" | "Color.Purple.500" | "Color.Purple.600" | "Color.Purple.700" | "Color.Purple.800" | "Color.Purple.900" | "Color.Blue.100" | "Color.Blue.200" | "Color.Blue.300" | "Color.Blue.400" | "Color.Blue.500" | "Color.Blue.600" | "Color.Blue.700" | "Color.Blue.800" | "Color.Blue.900" | "Color.Chromatic.100" | "Color.Chromatic.200" | "Color.Chromatic.300" | "Color.Chromatic.400" | "Color.Chromatic.500" | "Color.Chromatic.600" | "Color.Chromatic.700" | "Color.Chromatic.800" | "Color.Chromatic.900" | "Color.Gray.50" | "Color.Gray.100" | "Color.Gray.200" | "Color.Gray.300" | "Color.Gray.400" | "Color.Gray.500" | "Color.Gray.600" | "Color.Gray.700" | "Color.Gray.800" | "Color.Gray.900" | "Color.Green.100" | "Color.Green.200" | "Color.Green.300" | "Color.Green.400" | "Color.Green.500" | "Color.Green.600" | "Color.Green.700" | "Color.Green.800" | "Color.Red.100" | "Color.Red.200" | "Color.Red.300" | "Color.Red.400" | "Color.Red.500" | "Color.Red.600" | "Color.Red.700" | "Color.Red.800" | "Color.Orange.100" | "Color.Orange.200" | "Color.Orange.300" | "Color.Orange.400" | "Color.Orange.500" | "Color.Orange.600" | "Color.Orange.700" | "Color.Orange.800" | "Color.Black.0" | "Color.Black.100" | "Color.Black.200" | "Color.Black.300" | "Color.Black.400" | "Color.Black.500" | "Color.Black.600" | "Color.Black.700" | "Color.Black.800" | "Color.Black.1000" | "Color.White.0" | "Color.White.100" | "Color.White.200" | "Color.White.300" | "Color.White.400" | "Color.White.500" | "Color.White.600" | "Color.White.700" | "Color.White.800" | "Color.White.1000";
6
+ export type ScaleToken = "Scale.0" | "Scale.25" | "Scale.50" | "Scale.100" | "Scale.150" | "Scale.200" | "Scale.300" | "Scale.400" | "Scale.450" | "Scale.500" | "Scale.550" | "Scale.600" | "Scale.650" | "Scale.700" | "Scale.800" | "Scale.900" | "Scale.1000" | "Scale.2000";
7
+ export type SemanticColor = "Color.Primary.100" | "Color.Primary.200" | "Color.Primary.300" | "Color.Primary.400" | "Color.Primary.500" | "Color.Primary.600" | "Color.Primary.700" | "Color.Primary.800" | "Color.Primary.900" | "Color.Neutral.50" | "Color.Neutral.100" | "Color.Neutral.200" | "Color.Neutral.300" | "Color.Neutral.400" | "Color.Neutral.500" | "Color.Neutral.600" | "Color.Neutral.700" | "Color.Neutral.800" | "Color.Neutral.White" | "Color.Neutral.Black" | "Color.Success.100" | "Color.Success.200" | "Color.Success.300" | "Color.Success.400" | "Color.Success.500" | "Color.Success.600" | "Color.Success.700" | "Color.Success.800" | "Color.Warning.100" | "Color.Warning.200" | "Color.Warning.300" | "Color.Warning.400" | "Color.Warning.500" | "Color.Warning.600" | "Color.Warning.700" | "Color.Warning.800" | "Color.Critical.100" | "Color.Critical.200" | "Color.Critical.300" | "Color.Critical.400" | "Color.Critical.500" | "Color.Critical.600" | "Color.Critical.700" | "Color.Critical.800" | "Color.Alpha-Neutral.White-0" | "Color.Alpha-Neutral.White-100" | "Color.Alpha-Neutral.White-200" | "Color.Alpha-Neutral.White-300" | "Color.Alpha-Neutral.White-400" | "Color.Alpha-Neutral.White-500" | "Color.Alpha-Neutral.White-600" | "Color.Alpha-Neutral.White-700" | "Color.Alpha-Neutral.White-800" | "Color.Alpha-Neutral.White-1000" | "Color.Alpha-Neutral.Black-0" | "Color.Alpha-Neutral.Black-100" | "Color.Alpha-Neutral.Black-200" | "Color.Alpha-Neutral.Black-300" | "Color.Alpha-Neutral.Black-400" | "Color.Alpha-Neutral.Black-500" | "Color.Alpha-Neutral.Black-600" | "Color.Alpha-Neutral.Black-700" | "Color.Alpha-Neutral.Black-800" | "Color.Alpha-Neutral.Black-1000";
8
+ export type SpacingToken = "Spacing.50" | "Spacing.100" | "Spacing.200" | "Spacing.300" | "Spacing.400" | "Spacing.450" | "Spacing.500" | "Spacing.600" | "Spacing.650" | "Spacing.700" | "Spacing.800" | "Spacing.900" | "Spacing.1000" | "Spacing.2000" | "Spacing.None";
9
+ export type BackgroundToken = "Background.White" | "Background.Page_Primary" | "Background.Page_Secondary" | "Background.Page_Tertiary" | "Background.Disabled" | "Background.Primary" | "Background.Primary_Tonal" | "Background.Primary_Pressed" | "Background.Primary_Disabled" | "Background.Primary_Dark" | "Background.Primary-On_Hover" | "Background.Primary_Tonal-On_Hover" | "Background.Primary-On_Focused" | "Background.Success" | "Background.Success_Tonal" | "Background.Success_Dark" | "Background.Success_Disabled" | "Background.Success-On_Hover" | "Background.Warning" | "Background.Warning_Tonal" | "Background.Warning_Dark" | "Background.Warning_Disabled" | "Background.Warning-On_Hover" | "Background.Critical" | "Background.Critical_Tonal" | "Background.Critical_Dark" | "Background.Critical_Disabled" | "Background.Critical-On_Hover" | "Background.Transparent";
10
+ export type ForegroundToken = "Foreground.Neutral" | "Foreground.Neutral_Secondary" | "Foreground.Neutral_Tertiary" | "Foreground.Primary" | "Foreground.Primary_Disabled" | "Foreground.Primary_Pressed" | "Foreground.Primary_-_On_Tonal" | "Foreground.Primary-_On_Focus" | "Foreground.Primary-_On_Hover" | "Foreground.Critical" | "Foreground.Critical_Tonal" | "Foreground.Critical-_On_Tonal" | "Foreground.Warning" | "Foreground.Warning-_On_Tonal" | "Foreground.Success" | "Foreground.Success-_On_Tonal" | "Foreground.On_Action" | "Foreground.White" | "Foreground.Disabled" | "Foreground.On_Disabled";
11
+ export type BorderToken = "Border.Strong" | "Border.Strong-100" | "Border.Strong-200" | "Border.Neutral_Primary" | "Border.Neutral_Secondary" | "Border.Neutral_Tertiary" | "Border.Primary" | "Border.Primary_Tonal" | "Border.Primary_Disabled" | "Border.Primary-_On_Hover" | "Border.Primary_Pressed" | "Border.Critical" | "Border.Critical_Tonal" | "Border.Warning" | "Border.Warning_Tonal" | "Border.Success" | "Border.Success_Tonal" | "Border.On_Action" | "Border.White" | "Border.Disabled";
12
+ export type Theme = "light" | "dark";
13
+ export type HueVariant = "chromatic-prime" | "hue-sky" | "hue-indigo";
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Auto-generated token types
3
+ * Do not edit directly - regenerate with `npm run build:tokens`
4
+ */
5
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Background pattern configurations
3
+ * Patterns are 128px x 128px frames with tiled images inside
4
+ * Images automatically tile to fill the space while maintaining pattern
5
+ */
6
+ export type PatternType = "default" | "cubes" | "mathematics" | "dots" | "diagonal" | "smudge" | "paper" | "denim" | "squares" | "mosaic" | "cotton";
7
+ export interface PatternConfig {
8
+ imageUrl: string;
9
+ backgroundSize: string;
10
+ backgroundPosition?: string;
11
+ inset?: string;
12
+ }
13
+ /**
14
+ * Pattern configurations with image URLs and tiling settings
15
+ * Note: These URLs are from Figma and expire after 7 days.
16
+ * For production, download these images and store them in public/images/patterns/
17
+ */
18
+ export declare const PATTERN_CONFIGS: Record<PatternType, PatternConfig>;
19
+ /**
20
+ * Get pattern configuration by type
21
+ */
22
+ export declare function getPatternConfig(type?: PatternType): PatternConfig;
23
+ /**
24
+ * Get pattern image URL
25
+ * For production, replace with local paths: `/images/patterns/${type}.png`
26
+ */
27
+ export declare function getPatternImageUrl(type: PatternType): string;
28
+ //# sourceMappingURL=patternPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternPaths.d.ts","sourceRoot":"","sources":["../../src/utils/patternPaths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,OAAO,GACP,aAAa,GACb,MAAM,GACN,UAAU,GACV,QAAQ,GACR,OAAO,GACP,OAAO,GACP,SAAS,GACT,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,CAgE9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,WAAuB,GAAG,aAAa,CAE7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAM5D"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Background pattern configurations
3
+ * Patterns are 128px x 128px frames with tiled images inside
4
+ * Images automatically tile to fill the space while maintaining pattern
5
+ */
6
+ /**
7
+ * Pattern configurations with image URLs and tiling settings
8
+ * Note: These URLs are from Figma and expire after 7 days.
9
+ * For production, download these images and store them in public/images/patterns/
10
+ */
11
+ export const PATTERN_CONFIGS = {
12
+ default: {
13
+ imageUrl: "", // No pattern for default
14
+ backgroundSize: "128px 128px",
15
+ },
16
+ cubes: {
17
+ imageUrl: "https://www.figma.com/api/mcp/asset/3594165a-11de-4be4-818c-90c23daf0172",
18
+ backgroundSize: "33.5px 50px",
19
+ backgroundPosition: "top left",
20
+ },
21
+ mathematics: {
22
+ imageUrl: "https://www.figma.com/api/mcp/asset/db1da532-dc86-42e2-8edb-cebd1f4583d9",
23
+ backgroundSize: "64px 128px",
24
+ backgroundPosition: "top left",
25
+ inset: "0 -322px -322px 0",
26
+ },
27
+ dots: {
28
+ imageUrl: "https://www.figma.com/api/mcp/asset/c320aab8-9413-4f04-b5d9-5dab473bf72c",
29
+ backgroundSize: "186px 186px",
30
+ backgroundPosition: "top left",
31
+ inset: "0 -322px -322px 0",
32
+ },
33
+ diagonal: {
34
+ imageUrl: "https://www.figma.com/api/mcp/asset/63f95452-d091-48c8-9315-17b2db88811f",
35
+ backgroundSize: "7px 7px",
36
+ backgroundPosition: "top left",
37
+ inset: "0 -322px -322px 0",
38
+ },
39
+ smudge: {
40
+ imageUrl: "https://www.figma.com/api/mcp/asset/953c58bc-519e-453a-801e-aa7771123bf0",
41
+ backgroundSize: "200px 200px",
42
+ backgroundPosition: "top left",
43
+ inset: "0 -322px -322px 0",
44
+ },
45
+ paper: {
46
+ imageUrl: "https://www.figma.com/api/mcp/asset/6cac21b4-e9cb-4b07-9655-9da328879b35",
47
+ backgroundSize: "158px 158px",
48
+ backgroundPosition: "top left",
49
+ inset: "0 -322px -322px 0",
50
+ },
51
+ denim: {
52
+ imageUrl: "https://www.figma.com/api/mcp/asset/df4b639a-4aa8-47b3-a356-1704c5d0e8ca",
53
+ backgroundSize: "210px 163px",
54
+ backgroundPosition: "top left",
55
+ inset: "0 -322px -322px 0",
56
+ },
57
+ squares: {
58
+ imageUrl: "https://www.figma.com/api/mcp/asset/7d44ab02-5237-4466-9957-80d02eac70a8",
59
+ backgroundSize: "32px 32px",
60
+ backgroundPosition: "top left",
61
+ inset: "0 -322px -322px 0",
62
+ },
63
+ mosaic: {
64
+ imageUrl: "https://www.figma.com/api/mcp/asset/d78c45bb-6e59-4444-a78b-740387c8d790",
65
+ backgroundSize: "355px 288px",
66
+ backgroundPosition: "top left",
67
+ inset: "0 -322px -322px 0",
68
+ },
69
+ cotton: {
70
+ imageUrl: "https://www.figma.com/api/mcp/asset/9010e582-f104-4247-9a42-450d3c28fa71",
71
+ backgroundSize: "157.5px 157.5px",
72
+ backgroundPosition: "top left",
73
+ inset: "0 -322px -322px 0",
74
+ },
75
+ };
76
+ /**
77
+ * Get pattern configuration by type
78
+ */
79
+ export function getPatternConfig(type = "default") {
80
+ return PATTERN_CONFIGS[type] || PATTERN_CONFIGS.default;
81
+ }
82
+ /**
83
+ * Get pattern image URL
84
+ * For production, replace with local paths: `/images/patterns/${type}.png`
85
+ */
86
+ export function getPatternImageUrl(type) {
87
+ const config = getPatternConfig(type);
88
+ if (type === "default" || !config.imageUrl) {
89
+ return "";
90
+ }
91
+ return config.imageUrl;
92
+ }
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "beacon-ui",
3
+ "version": "3.1.4",
4
+ "description": "Beacon Design System - Components and tokens",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "tokens",
10
+ "README.md",
11
+ "CHANGELOG.md"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ },
18
+ "./tokens": "./tokens/generated/index.css",
19
+ "./tokens/*": "./tokens/generated/*.css"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc && npm run build:tokens",
23
+ "build:tokens": "tsx ../../scripts/build-tokens.ts --output-dir=./tokens/generated --types-output=./src/tokens/types.ts",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+ "peerDependencies": {
27
+ "react": "^18.0.0 || ^19.0.0",
28
+ "react-dom": "^18.0.0 || ^19.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/react": "^19.2.7",
32
+ "@types/react-dom": "^19.2.3",
33
+ "tsx": "^4.21.0",
34
+ "typescript": "^5.9.3"
35
+ },
36
+ "keywords": [
37
+ "design-system",
38
+ "components",
39
+ "react",
40
+ "tokens"
41
+ ],
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/raza-ahmed/beacon.git"
45
+ },
46
+ "license": "MIT",
47
+ "publishConfig": {
48
+ "access": "public"
49
+ }
50
+ }
51
+
@@ -0,0 +1,86 @@
1
+ /* Brand tokens - dark theme */
2
+ [data-theme="dark"] {
3
+ --bg-white: var(--color-neutral-800);
4
+ --bg-page-primary: var(--color-neutral-800);
5
+ --bg-page-secondary: var(--color-neutral-700);
6
+ --bg-page-tertiary: var(--color-neutral-600);
7
+ --bg-disabled: var(--color-neutral-700);
8
+ --bg-primary: var(--color-primary-500);
9
+ --bg-primary-tonal: var(--color-primary-800);
10
+ --bg-primary-pressed: var(--color-primary-700);
11
+ --bg-primary-disabled: var(--color-primary-700);
12
+ --bg-primary-dark: var(--color-primary-100);
13
+ --bg-primary-on-hover: var(--color-primary-400);
14
+ --bg-primary-tonal-on-hover: var(--color-primary-700);
15
+ --bg-primary-on-focused: var(--color-primary-400);
16
+ --bg-success: var(--color-success-500);
17
+ --bg-success-tonal: var(--color-success-800);
18
+ --bg-success-dark: var(--color-success-100);
19
+ --bg-success-disabled: var(--color-success-700);
20
+ --bg-success-on-hover: var(--color-success-400);
21
+ --bg-warning: var(--color-warning-500);
22
+ --bg-warning-tonal: var(--color-warning-800);
23
+ --bg-warning-dark: var(--color-warning-100);
24
+ --bg-warning-disabled: var(--color-warning-700);
25
+ --bg-warning-on-hover: var(--color-warning-400);
26
+ --bg-critical: var(--color-critical-500);
27
+ --bg-critical-tonal: var(--color-critical-800);
28
+ --bg-critical-dark: var(--color-critical-100);
29
+ --bg-critical-disabled: var(--color-critical-700);
30
+ --bg-critical-on-hover: var(--color-critical-400);
31
+ --bg-transparent: var(--color-alpha-neutral-black-0);
32
+ --fg-neutral: var(--color-neutral-100);
33
+ --fg-neutral-secondary: var(--color-neutral-200);
34
+ --fg-neutral-tertiary: var(--color-neutral-300);
35
+ --fg-primary: var(--color-primary-500);
36
+ --fg-primary-disabled: var(--color-primary-700);
37
+ --fg-primary-pressed: var(--color-primary-400);
38
+ --fg-primary-on-tonal: var(--color-primary-300);
39
+ --fg-primary-on-focus: var(--color-primary-500);
40
+ --fg-primary-on-hover: var(--color-primary-400);
41
+ --fg-critical: var(--color-critical-500);
42
+ --fg-critical-tonal: var(--color-critical-800);
43
+ --fg-critical-on-tonal: var(--color-critical-100);
44
+ --fg-warning: var(--color-orange-500);
45
+ --fg-warning-on-tonal: var(--color-orange-100);
46
+ --fg-success: var(--color-green-500);
47
+ --fg-success-on-tonal: var(--color-green-100);
48
+ --fg-on-action: var(--color-alpha-neutral-white-1000);
49
+ --fg-white: var(--color-alpha-neutral-white-1000);
50
+ --fg-disabled: var(--color-neutral-400);
51
+ --fg-on-disabled: var(--color-neutral-300);
52
+ --border-strong: var(--color-alpha-neutral-white-1000);
53
+ --border-strong-100: var(--color-alpha-neutral-white-100);
54
+ --border-strong-200: var(--color-alpha-neutral-white-200);
55
+ --border-neutral-primary: var(--color-neutral-600);
56
+ --border-neutral-secondary: var(--color-neutral-700);
57
+ --border-neutral-tertiary: var(--color-neutral-800);
58
+ --border-primary: var(--color-primary-500);
59
+ --border-primary-tonal: var(--color-primary-800);
60
+ --border-primary-disabled: var(--color-primary-700);
61
+ --border-primary-on-hover: var(--color-primary-400);
62
+ --border-primary-pressed: var(--color-primary-400);
63
+ --border-critical: var(--color-critical-500);
64
+ --border-critical-tonal: var(--color-critical-800);
65
+ --border-warning: var(--color-orange-500);
66
+ --border-warning-tonal: var(--color-orange-800);
67
+ --border-success: var(--color-green-500);
68
+ --border-success-tonal: var(--color-green-800);
69
+ --border-on-action: var(--color-alpha-neutral-white-1000);
70
+ --border-white: var(--color-alpha-neutral-white-1000);
71
+ --border-disabled: var(--color-neutral-700);
72
+ --static-light-on-dark: var(--color-alpha-neutral-black-1000);
73
+ --static-primary: var(--color-primary-500);
74
+ --static-primary-black: var(--color-primary-900);
75
+ --static-white: var(--color-alpha-neutral-white-1000);
76
+ --static-black: var(--color-alpha-neutral-black-1000);
77
+ --util-overlay-dull: var(--color-alpha-neutral-black-200);
78
+ --util-overlay-light: var(--color-alpha-neutral-black-300);
79
+ --util-overlay-medium: var(--color-alpha-neutral-black-500);
80
+ --util-overlay-strong: var(--color-alpha-neutral-black-700);
81
+ --shadow-none: var(--color-alpha-neutral-black-0);
82
+ --shadow-subtle: var(--color-alpha-neutral-black-100);
83
+ --shadow-normal: var(--color-alpha-neutral-black-200);
84
+ --shadow-medium: var(--color-alpha-neutral-black-300);
85
+ --shadow-strong: var(--color-alpha-neutral-black-400);
86
+ }
@@ -0,0 +1,86 @@
1
+ /* Brand tokens - light theme */
2
+ :root, [data-theme="light"] {
3
+ --bg-white: var(--color-alpha-neutral-white-1000);
4
+ --bg-page-primary: var(--color-neutral-50);
5
+ --bg-page-secondary: var(--color-neutral-100);
6
+ --bg-page-tertiary: var(--color-neutral-200);
7
+ --bg-disabled: var(--color-neutral-100);
8
+ --bg-primary: var(--color-primary-500);
9
+ --bg-primary-tonal: var(--color-primary-100);
10
+ --bg-primary-pressed: var(--color-primary-700);
11
+ --bg-primary-disabled: var(--color-primary-200);
12
+ --bg-primary-dark: var(--color-primary-800);
13
+ --bg-primary-on-hover: var(--color-primary-700);
14
+ --bg-primary-tonal-on-hover: var(--color-primary-200);
15
+ --bg-primary-on-focused: var(--color-primary-600);
16
+ --bg-success: var(--color-green-500);
17
+ --bg-success-tonal: var(--color-success-100);
18
+ --bg-success-dark: var(--color-green-800);
19
+ --bg-success-disabled: var(--color-green-300);
20
+ --bg-success-on-hover: var(--color-green-600);
21
+ --bg-warning: var(--color-warning-500);
22
+ --bg-warning-tonal: var(--color-warning-100);
23
+ --bg-warning-dark: var(--color-warning-800);
24
+ --bg-warning-disabled: var(--color-warning-300);
25
+ --bg-warning-on-hover: var(--color-warning-600);
26
+ --bg-critical: var(--color-critical-500);
27
+ --bg-critical-tonal: var(--color-critical-100);
28
+ --bg-critical-dark: var(--color-critical-800);
29
+ --bg-critical-disabled: var(--color-critical-300);
30
+ --bg-critical-on-hover: var(--color-critical-600);
31
+ --bg-transparent: var(--color-alpha-neutral-white-0);
32
+ --fg-neutral: var(--color-neutral-800);
33
+ --fg-neutral-secondary: var(--color-neutral-700);
34
+ --fg-neutral-tertiary: var(--color-neutral-600);
35
+ --fg-primary: var(--color-primary-500);
36
+ --fg-primary-disabled: var(--color-primary-400);
37
+ --fg-primary-pressed: var(--color-primary-700);
38
+ --fg-primary-on-tonal: var(--color-primary-500);
39
+ --fg-primary-on-focus: var(--color-primary-500);
40
+ --fg-primary-on-hover: var(--color-primary-600);
41
+ --fg-critical: var(--color-critical-500);
42
+ --fg-critical-tonal: var(--color-critical-100);
43
+ --fg-critical-on-tonal: var(--color-critical-500);
44
+ --fg-warning: var(--color-orange-500);
45
+ --fg-warning-on-tonal: var(--color-orange-500);
46
+ --fg-success: var(--color-green-500);
47
+ --fg-success-on-tonal: var(--color-green-500);
48
+ --fg-on-action: var(--color-alpha-neutral-white-1000);
49
+ --fg-white: var(--color-alpha-neutral-white-1000);
50
+ --fg-disabled: var(--color-neutral-300);
51
+ --fg-on-disabled: var(--color-neutral-400);
52
+ --border-strong: var(--color-neutral-800);
53
+ --border-strong-100: var(--color-alpha-neutral-black-100);
54
+ --border-strong-200: var(--color-alpha-neutral-black-200);
55
+ --border-neutral-primary: var(--color-neutral-400);
56
+ --border-neutral-secondary: var(--color-neutral-300);
57
+ --border-neutral-tertiary: var(--color-neutral-200);
58
+ --border-primary: var(--color-primary-500);
59
+ --border-primary-tonal: var(--color-primary-100);
60
+ --border-primary-disabled: var(--color-primary-300);
61
+ --border-primary-on-hover: var(--color-primary-600);
62
+ --border-primary-pressed: var(--color-primary-700);
63
+ --border-critical: var(--color-critical-500);
64
+ --border-critical-tonal: var(--color-critical-100);
65
+ --border-warning: var(--color-orange-500);
66
+ --border-warning-tonal: var(--color-orange-100);
67
+ --border-success: var(--color-green-500);
68
+ --border-success-tonal: var(--color-green-100);
69
+ --border-on-action: var(--color-alpha-neutral-white-1000);
70
+ --border-white: var(--color-alpha-neutral-white-1000);
71
+ --border-disabled: var(--color-neutral-300);
72
+ --static-light-on-dark: var(--color-alpha-neutral-black-1000);
73
+ --static-primary: var(--color-primary-500);
74
+ --static-primary-black: var(--color-primary-900);
75
+ --static-white: var(--color-alpha-neutral-white-1000);
76
+ --static-black: var(--color-alpha-neutral-black-1000);
77
+ --util-overlay-dull: var(--color-alpha-neutral-black-200);
78
+ --util-overlay-light: var(--color-alpha-neutral-black-300);
79
+ --util-overlay-medium: var(--color-alpha-neutral-black-500);
80
+ --util-overlay-strong: var(--color-alpha-neutral-black-700);
81
+ --shadow-none: var(--color-alpha-neutral-black-0);
82
+ --shadow-subtle: var(--color-alpha-neutral-black-100);
83
+ --shadow-normal: var(--color-alpha-neutral-black-200);
84
+ --shadow-medium: var(--color-alpha-neutral-black-300);
85
+ --shadow-strong: var(--color-alpha-neutral-black-400);
86
+ }
@@ -0,0 +1,10 @@
1
+ /* Effect tokens - shadows */
2
+ :root {
3
+ --drop-shadow-0: 0px 2px 12px 0px var(--shadow-none);
4
+ --drop-shadow-50: 0px 1px 8px -2px var(--shadow-subtle), 0px 1px 8px -8px var(--shadow-subtle);
5
+ --drop-shadow-100: 0px 1px 4px 0px var(--shadow-subtle), 0px 1px 4px -2px var(--shadow-subtle);
6
+ --drop-shadow-200: 0px -4px 9px -6px var(--shadow-subtle), 0px 4px 6px -2px var(--shadow-subtle);
7
+ --drop-shadow-300: 0px -6px 16px -8px var(--shadow-subtle), 0px 4px 6px 0px var(--shadow-subtle);
8
+ --drop-shadow-400: 0px 12px 42px -4px var(--shadow-subtle), 0px 8px 18px -6px var(--shadow-subtle);
9
+ --drop-shadow-500: 0px 18px 88px -4px var(--shadow-subtle), 0px 8px 28px -6px var(--shadow-subtle);
10
+ }