@castui/cast-ui 4.1.1 → 4.2.1

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 (126) hide show
  1. package/README.md +129 -19
  2. package/dist/components/Alert/Alert.d.ts +40 -0
  3. package/dist/components/Alert/Alert.js +71 -0
  4. package/dist/components/Alert/index.d.ts +1 -0
  5. package/dist/components/Alert/index.js +5 -0
  6. package/dist/components/Avatar/Avatar.d.ts +31 -0
  7. package/dist/components/Avatar/Avatar.js +55 -0
  8. package/dist/components/Avatar/index.d.ts +1 -0
  9. package/dist/components/Avatar/index.js +5 -0
  10. package/dist/components/Badge/Badge.d.ts +41 -0
  11. package/dist/components/Badge/Badge.js +71 -0
  12. package/dist/components/Badge/index.d.ts +1 -0
  13. package/dist/components/Badge/index.js +5 -0
  14. package/dist/components/Button/Button.d.ts +0 -1
  15. package/dist/components/Button/Button.js +21 -19
  16. package/dist/components/Button/index.d.ts +0 -1
  17. package/dist/components/Button/index.js +5 -2
  18. package/dist/components/Card/Card.d.ts +41 -0
  19. package/dist/components/Card/Card.js +91 -0
  20. package/dist/components/Card/index.d.ts +1 -0
  21. package/dist/components/Card/index.js +5 -0
  22. package/dist/components/Checkbox/Checkbox.d.ts +32 -0
  23. package/dist/components/Checkbox/Checkbox.js +107 -0
  24. package/dist/components/Checkbox/index.d.ts +1 -0
  25. package/dist/components/Checkbox/index.js +5 -0
  26. package/dist/components/Chip/Chip.d.ts +46 -0
  27. package/dist/components/Chip/Chip.js +82 -0
  28. package/dist/components/Chip/index.d.ts +1 -0
  29. package/dist/components/Chip/index.js +5 -0
  30. package/dist/components/Dialog/Dialog.d.ts +0 -1
  31. package/dist/components/Dialog/Dialog.js +33 -26
  32. package/dist/components/Dialog/index.d.ts +0 -1
  33. package/dist/components/Dialog/index.js +6 -2
  34. package/dist/components/Divider/Divider.d.ts +22 -0
  35. package/dist/components/Divider/Divider.js +19 -0
  36. package/dist/components/Divider/index.d.ts +1 -0
  37. package/dist/components/Divider/index.js +5 -0
  38. package/dist/components/Icon/Icon.d.ts +26 -9
  39. package/dist/components/Icon/Icon.js +16 -6
  40. package/dist/components/Icon/index.d.ts +0 -1
  41. package/dist/components/Icon/index.js +5 -2
  42. package/dist/components/Input/Input.d.ts +62 -0
  43. package/dist/components/Input/Input.js +141 -0
  44. package/dist/components/Input/index.d.ts +1 -0
  45. package/dist/components/Input/index.js +5 -0
  46. package/dist/components/List/List.d.ts +58 -0
  47. package/dist/components/List/List.js +116 -0
  48. package/dist/components/List/index.d.ts +1 -0
  49. package/dist/components/List/index.js +8 -0
  50. package/dist/components/Popover/Popover.d.ts +34 -0
  51. package/dist/components/Popover/Popover.js +62 -0
  52. package/dist/components/Popover/index.d.ts +1 -0
  53. package/dist/components/Popover/index.js +5 -0
  54. package/dist/components/Radio/Radio.d.ts +52 -0
  55. package/dist/components/Radio/Radio.js +127 -0
  56. package/dist/components/Radio/index.d.ts +1 -0
  57. package/dist/components/Radio/index.js +6 -0
  58. package/dist/components/Select/Select.d.ts +0 -1
  59. package/dist/components/Select/Select.js +114 -96
  60. package/dist/components/Select/index.d.ts +0 -1
  61. package/dist/components/Select/index.js +10 -2
  62. package/dist/components/Skeleton/Skeleton.d.ts +33 -0
  63. package/dist/components/Skeleton/Skeleton.js +66 -0
  64. package/dist/components/Skeleton/index.d.ts +1 -0
  65. package/dist/components/Skeleton/index.js +5 -0
  66. package/dist/components/Toast/Toast.d.ts +35 -0
  67. package/dist/components/Toast/Toast.js +79 -0
  68. package/dist/components/Toast/index.d.ts +1 -0
  69. package/dist/components/Toast/index.js +5 -0
  70. package/dist/components/Toggle/Toggle.d.ts +31 -0
  71. package/dist/components/Toggle/Toggle.js +91 -0
  72. package/dist/components/Toggle/index.d.ts +1 -0
  73. package/dist/components/Toggle/index.js +5 -0
  74. package/dist/components/Tooltip/Tooltip.d.ts +34 -0
  75. package/dist/components/Tooltip/Tooltip.js +67 -0
  76. package/dist/components/Tooltip/index.d.ts +1 -0
  77. package/dist/components/Tooltip/index.js +5 -0
  78. package/dist/index.d.ts +17 -3
  79. package/dist/index.js +81 -7
  80. package/dist/theme/ThemeContext.d.ts +24 -8
  81. package/dist/theme/ThemeContext.js +41 -22
  82. package/dist/theme/index.d.ts +1 -2
  83. package/dist/theme/index.js +8 -3
  84. package/dist/theme/themes.d.ts +0 -1
  85. package/dist/theme/themes.js +214 -2
  86. package/dist/theme/types.d.ts +183 -1
  87. package/dist/theme/types.js +2 -2
  88. package/dist/tokens/colors.d.ts +294 -26
  89. package/dist/tokens/colors.js +324 -99
  90. package/dist/tokens/index.d.ts +1 -2
  91. package/dist/tokens/index.js +29 -3
  92. package/dist/tokens/typography.d.ts +0 -1
  93. package/dist/tokens/typography.js +13 -11
  94. package/package.json +13 -2
  95. package/dist/components/Button/Button.d.ts.map +0 -1
  96. package/dist/components/Button/Button.js.map +0 -1
  97. package/dist/components/Button/index.d.ts.map +0 -1
  98. package/dist/components/Button/index.js.map +0 -1
  99. package/dist/components/Dialog/Dialog.d.ts.map +0 -1
  100. package/dist/components/Dialog/Dialog.js.map +0 -1
  101. package/dist/components/Dialog/index.d.ts.map +0 -1
  102. package/dist/components/Dialog/index.js.map +0 -1
  103. package/dist/components/Icon/Icon.d.ts.map +0 -1
  104. package/dist/components/Icon/Icon.js.map +0 -1
  105. package/dist/components/Icon/index.d.ts.map +0 -1
  106. package/dist/components/Icon/index.js.map +0 -1
  107. package/dist/components/Select/Select.d.ts.map +0 -1
  108. package/dist/components/Select/Select.js.map +0 -1
  109. package/dist/components/Select/index.d.ts.map +0 -1
  110. package/dist/components/Select/index.js.map +0 -1
  111. package/dist/index.d.ts.map +0 -1
  112. package/dist/index.js.map +0 -1
  113. package/dist/theme/ThemeContext.d.ts.map +0 -1
  114. package/dist/theme/ThemeContext.js.map +0 -1
  115. package/dist/theme/index.d.ts.map +0 -1
  116. package/dist/theme/index.js.map +0 -1
  117. package/dist/theme/themes.d.ts.map +0 -1
  118. package/dist/theme/themes.js.map +0 -1
  119. package/dist/theme/types.d.ts.map +0 -1
  120. package/dist/theme/types.js.map +0 -1
  121. package/dist/tokens/colors.d.ts.map +0 -1
  122. package/dist/tokens/colors.js.map +0 -1
  123. package/dist/tokens/index.d.ts.map +0 -1
  124. package/dist/tokens/index.js.map +0 -1
  125. package/dist/tokens/typography.d.ts.map +0 -1
  126. package/dist/tokens/typography.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  /**
2
- * ThemeProvider — wraps your app to enable density theming and colour customisation.
2
+ * ThemeProvider — wraps your app to enable density theming, light/dark colour
3
+ * modes, and colour customisation.
3
4
  *
4
5
  * @example Basic usage — switch density
5
6
  * ```tsx
@@ -10,6 +11,13 @@
10
11
  * </ThemeProvider>
11
12
  * ```
12
13
  *
14
+ * @example Dark mode
15
+ * ```tsx
16
+ * <ThemeProvider colorMode="dark">
17
+ * <App />
18
+ * </ThemeProvider>
19
+ * ```
20
+ *
13
21
  * @example Rebrand — override intent colours
14
22
  * ```tsx
15
23
  * <ThemeProvider
@@ -29,31 +37,39 @@
29
37
  * ```
30
38
  */
31
39
  import React from 'react';
32
- import { intentColors as defaultIntentColors, disabledColors as defaultDisabledColors } from '../tokens/colors';
33
- import type { IntentName } from '../tokens/colors';
40
+ import { intentColors as defaultIntentColors } from '../tokens/colors';
41
+ import type { ColorMode, ColorScheme, IntentName } from '../tokens/colors';
34
42
  import type { DensityTheme, ComponentTokens, DeepPartial } from './types';
35
43
  type IntentColorMap = typeof defaultIntentColors;
36
44
  export type Theme = {
37
45
  density: DensityTheme;
38
46
  components: ComponentTokens;
47
+ /** Active colour mode — light or dark. */
48
+ colorMode: ColorMode;
49
+ /** Full resolved colour scheme for the active mode (overrides applied). */
50
+ scheme: ColorScheme;
51
+ /** Intent colours of the active scheme — kept for backwards compatibility. */
39
52
  colors: IntentColorMap;
40
- disabledColors: typeof defaultDisabledColors;
53
+ /** Disabled colours of the active scheme — kept for backwards compatibility. */
54
+ disabledColors: ColorScheme['disabled'];
41
55
  };
42
56
  export type ThemeProviderProps = {
43
57
  /** Density theme — controls spacing and padding across all components. */
44
58
  density?: DensityTheme;
59
+ /** Colour mode — switches between the light and dark colour schemes. */
60
+ colorMode?: ColorMode;
45
61
  /**
46
- * Partial colour overrides — deep-merged with the default intent colours.
47
- * Only provide the values you want to change; everything else stays default.
62
+ * Partial colour overrides — deep-merged with the active scheme's intent
63
+ * colours. Only provide the values you want to change; everything else
64
+ * stays default.
48
65
  */
49
66
  colors?: Partial<Record<IntentName, DeepPartial<IntentColorMap[IntentName]>>>;
50
67
  children: React.ReactNode;
51
68
  };
52
- export declare function ThemeProvider({ density, colors, children, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
69
+ export declare function ThemeProvider({ density, colorMode, colors, children, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
53
70
  /**
54
71
  * Access the current theme — density tokens, intent colours, and component tokens.
55
72
  * Must be called within a ThemeProvider; falls back to the "default" density if not.
56
73
  */
57
74
  export declare function useTheme(): Theme;
58
75
  export {};
59
- //# sourceMappingURL=ThemeContext.d.ts.map
@@ -1,6 +1,11 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThemeProvider = ThemeProvider;
4
+ exports.useTheme = useTheme;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
2
6
  /**
3
- * ThemeProvider — wraps your app to enable density theming and colour customisation.
7
+ * ThemeProvider — wraps your app to enable density theming, light/dark colour
8
+ * modes, and colour customisation.
4
9
  *
5
10
  * @example Basic usage — switch density
6
11
  * ```tsx
@@ -11,6 +16,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
11
16
  * </ThemeProvider>
12
17
  * ```
13
18
  *
19
+ * @example Dark mode
20
+ * ```tsx
21
+ * <ThemeProvider colorMode="dark">
22
+ * <App />
23
+ * </ThemeProvider>
24
+ * ```
25
+ *
14
26
  * @example Rebrand — override intent colours
15
27
  * ```tsx
16
28
  * <ThemeProvider
@@ -29,9 +41,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
29
41
  * </ThemeProvider>
30
42
  * ```
31
43
  */
32
- import { createContext, useContext, useMemo } from 'react';
33
- import { themes } from './themes';
34
- import { intentColors as defaultIntentColors, disabledColors as defaultDisabledColors, } from '../tokens/colors';
44
+ const react_1 = require("react");
45
+ const themes_1 = require("./themes");
46
+ const colors_1 = require("../tokens/colors");
35
47
  // ---------------------------------------------------------------------------
36
48
  // Deep merge utility (for partial colour overrides)
37
49
  // ---------------------------------------------------------------------------
@@ -60,24 +72,32 @@ function deepMerge(base, overrides) {
60
72
  // ---------------------------------------------------------------------------
61
73
  const defaultTheme = {
62
74
  density: 'default',
63
- components: themes.default,
64
- colors: defaultIntentColors,
65
- disabledColors: defaultDisabledColors,
75
+ components: themes_1.themes.default,
76
+ colorMode: 'light',
77
+ scheme: colors_1.colorSchemes.light,
78
+ colors: colors_1.colorSchemes.light.intents,
79
+ disabledColors: colors_1.colorSchemes.light.disabled,
66
80
  };
67
- const ThemeContext = createContext(defaultTheme);
68
- export function ThemeProvider({ density = 'default', colors, children, }) {
69
- const theme = useMemo(() => {
70
- const resolvedColors = colors
71
- ? deepMerge(defaultIntentColors, colors)
72
- : defaultIntentColors;
81
+ const ThemeContext = (0, react_1.createContext)(defaultTheme);
82
+ function ThemeProvider({ density = 'default', colorMode = 'light', colors, children, }) {
83
+ const theme = (0, react_1.useMemo)(() => {
84
+ const baseScheme = colors_1.colorSchemes[colorMode];
85
+ const resolvedIntents = colors
86
+ ? deepMerge(baseScheme.intents, colors)
87
+ : baseScheme.intents;
88
+ const scheme = colors
89
+ ? { ...baseScheme, intents: resolvedIntents }
90
+ : baseScheme;
73
91
  return {
74
92
  density,
75
- components: themes[density],
76
- colors: resolvedColors,
77
- disabledColors: defaultDisabledColors,
93
+ components: themes_1.themes[density],
94
+ colorMode,
95
+ scheme,
96
+ colors: resolvedIntents,
97
+ disabledColors: scheme.disabled,
78
98
  };
79
- }, [density, colors]);
80
- return (_jsx(ThemeContext.Provider, { value: theme, children: children }));
99
+ }, [density, colorMode, colors]);
100
+ return ((0, jsx_runtime_1.jsx)(ThemeContext.Provider, { value: theme, children: children }));
81
101
  }
82
102
  // ---------------------------------------------------------------------------
83
103
  // Hook
@@ -86,7 +106,6 @@ export function ThemeProvider({ density = 'default', colors, children, }) {
86
106
  * Access the current theme — density tokens, intent colours, and component tokens.
87
107
  * Must be called within a ThemeProvider; falls back to the "default" density if not.
88
108
  */
89
- export function useTheme() {
90
- return useContext(ThemeContext);
109
+ function useTheme() {
110
+ return (0, react_1.useContext)(ThemeContext);
91
111
  }
92
- //# sourceMappingURL=ThemeContext.js.map
@@ -1,4 +1,3 @@
1
1
  export { ThemeProvider, useTheme, type ThemeProviderProps, type Theme } from './ThemeContext';
2
2
  export { themes } from './themes';
3
- export type { DensityTheme, ComponentTokens, ButtonSizeTokens, ButtonThemeTokens, DialogSizeTokens, DialogThemeTokens, InputSizeTokens, InputThemeTokens, SelectContentTokens, SelectOptionTokens, SelectGroupTokens, SelectSeparatorTokens, SelectThemeTokens, DeepPartial, } from './types';
4
- //# sourceMappingURL=index.d.ts.map
3
+ export type { DensityTheme, ComponentTokens, ButtonSizeTokens, ButtonThemeTokens, DialogSizeTokens, DialogThemeTokens, InputSizeTokens, InputThemeTokens, SelectContentTokens, SelectOptionTokens, SelectGroupTokens, SelectSeparatorTokens, SelectThemeTokens, ListItemTokens, ListSubheaderTokens, ListThemeTokens, CheckboxSizeTokens, CheckboxThemeTokens, AlertSizeTokens, AlertThemeTokens, ToggleSizeTokens, ToggleThemeTokens, CardSizeTokens, CardThemeTokens, BadgeSizeTokens, BadgeThemeTokens, RadioSizeTokens, RadioThemeTokens, ToastSizeTokens, ToastThemeTokens, ChipSizeTokens, ChipThemeTokens, AvatarSizeTokens, AvatarThemeTokens, PopoverSizeTokens, PopoverThemeTokens, TooltipSizeTokens, TooltipThemeTokens, DeepPartial, } from './types';
@@ -1,3 +1,8 @@
1
- export { ThemeProvider, useTheme } from './ThemeContext';
2
- export { themes } from './themes';
3
- //# sourceMappingURL=index.js.map
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.themes = exports.useTheme = exports.ThemeProvider = void 0;
4
+ var ThemeContext_1 = require("./ThemeContext");
5
+ Object.defineProperty(exports, "ThemeProvider", { enumerable: true, get: function () { return ThemeContext_1.ThemeProvider; } });
6
+ Object.defineProperty(exports, "useTheme", { enumerable: true, get: function () { return ThemeContext_1.useTheme; } });
7
+ var themes_1 = require("./themes");
8
+ Object.defineProperty(exports, "themes", { enumerable: true, get: function () { return themes_1.themes; } });
@@ -11,4 +11,3 @@
11
11
  */
12
12
  import type { DensityTheme, ComponentTokens } from './types';
13
13
  export declare const themes: Record<DensityTheme, ComponentTokens>;
14
- //# sourceMappingURL=themes.d.ts.map
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Density theme definitions — extracted from component token files.
3
4
  *
@@ -9,7 +10,9 @@
9
10
  * Values verified against Figma variable defs.
10
11
  * Only spacing/sizing tokens live here — colours are constant across densities.
11
12
  */
12
- export const themes = {
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.themes = void 0;
15
+ exports.themes = {
13
16
  compact: {
14
17
  dialog: {
15
18
  small: { padding: 16, gap: 12, iconSize: 24 },
@@ -33,6 +36,76 @@ export const themes = {
33
36
  group: { paddingX: 8, labelPaddingY: 6 },
34
37
  separator: { marginY: 4 },
35
38
  },
39
+ list: {
40
+ sectionGap: 1,
41
+ item: { gap: 8, paddingX: 8, paddingY: 4, borderRadius: 4, iconSize: 16 },
42
+ subheader: { paddingX: 8, paddingY: 4 },
43
+ },
44
+ checkbox: {
45
+ gap: 4, borderRadius: 4, focusRingWidth: 2,
46
+ small: { indicatorSize: 16, iconSize: 10 },
47
+ default: { indicatorSize: 20, iconSize: 12 },
48
+ large: { indicatorSize: 24, iconSize: 14 },
49
+ },
50
+ alert: {
51
+ borderRadius: 8,
52
+ small: { padding: 8, gap: 8, iconSize: 16, closeSize: 16 },
53
+ default: { padding: 12, gap: 12, iconSize: 20, closeSize: 16 },
54
+ large: { padding: 16, gap: 16, iconSize: 24, closeSize: 20 },
55
+ },
56
+ toggle: {
57
+ gap: 4, thumbOffset: 2, focusRingWidth: 2,
58
+ small: { trackWidth: 32, trackHeight: 16, thumbSize: 12 },
59
+ default: { trackWidth: 40, trackHeight: 20, thumbSize: 16 },
60
+ large: { trackWidth: 48, trackHeight: 24, thumbSize: 20 },
61
+ },
62
+ card: {
63
+ borderRadius: 8,
64
+ small: { padding: 8, gap: 8, iconSize: 16, imageHeight: 120 },
65
+ default: { padding: 12, gap: 12, iconSize: 20, imageHeight: 160 },
66
+ large: { padding: 16, gap: 16, iconSize: 24, imageHeight: 200 },
67
+ },
68
+ badge: {
69
+ borderRadius: 9999,
70
+ small: { gap: 2, paddingX: 4, paddingY: 0, dotSize: 6 },
71
+ default: { gap: 4, paddingX: 6, paddingY: 1, dotSize: 6 },
72
+ large: { gap: 4, paddingX: 8, paddingY: 2, dotSize: 8 },
73
+ },
74
+ radio: {
75
+ gap: 4, borderRadius: 9999, focusRingWidth: 2,
76
+ small: { indicatorSize: 16, dotSize: 6 },
77
+ default: { indicatorSize: 20, dotSize: 8 },
78
+ large: { indicatorSize: 24, dotSize: 10 },
79
+ },
80
+ toast: {
81
+ borderRadius: 8, minWidth: 280, maxWidth: 420,
82
+ small: { padding: 8, gap: 8, iconSize: 16, closeSize: 16 },
83
+ default: { padding: 12, gap: 12, iconSize: 20, closeSize: 16 },
84
+ large: { padding: 16, gap: 16, iconSize: 24, closeSize: 20 },
85
+ },
86
+ chip: {
87
+ borderRadius: 9999,
88
+ small: { gap: 2, paddingX: 4, paddingY: 1, iconSize: 12 },
89
+ default: { gap: 4, paddingX: 6, paddingY: 2, iconSize: 14 },
90
+ large: { gap: 4, paddingX: 8, paddingY: 4, iconSize: 16 },
91
+ },
92
+ avatar: {
93
+ borderRadius: 9999,
94
+ small: { size: 24, iconSize: 12 },
95
+ default: { size: 40, iconSize: 16 },
96
+ large: { size: 64, iconSize: 24 },
97
+ },
98
+ popover: {
99
+ borderRadius: 8, arrowSize: 8,
100
+ small: { padding: 8 },
101
+ default: { padding: 12 },
102
+ large: { padding: 16 },
103
+ },
104
+ tooltip: {
105
+ borderRadius: 4, arrowSize: 6,
106
+ small: { paddingX: 4, paddingY: 1 },
107
+ default: { paddingX: 6, paddingY: 2 },
108
+ },
36
109
  },
37
110
  default: {
38
111
  dialog: {
@@ -57,6 +130,76 @@ export const themes = {
57
130
  group: { paddingX: 12, labelPaddingY: 6 },
58
131
  separator: { marginY: 4 },
59
132
  },
133
+ list: {
134
+ sectionGap: 1,
135
+ item: { gap: 12, paddingX: 12, paddingY: 6, borderRadius: 4, iconSize: 20 },
136
+ subheader: { paddingX: 12, paddingY: 6 },
137
+ },
138
+ checkbox: {
139
+ gap: 8, borderRadius: 4, focusRingWidth: 2,
140
+ small: { indicatorSize: 16, iconSize: 10 },
141
+ default: { indicatorSize: 20, iconSize: 12 },
142
+ large: { indicatorSize: 24, iconSize: 14 },
143
+ },
144
+ alert: {
145
+ borderRadius: 8,
146
+ small: { padding: 12, gap: 12, iconSize: 16, closeSize: 16 },
147
+ default: { padding: 16, gap: 16, iconSize: 20, closeSize: 16 },
148
+ large: { padding: 24, gap: 24, iconSize: 24, closeSize: 20 },
149
+ },
150
+ toggle: {
151
+ gap: 8, thumbOffset: 2, focusRingWidth: 2,
152
+ small: { trackWidth: 32, trackHeight: 16, thumbSize: 12 },
153
+ default: { trackWidth: 40, trackHeight: 20, thumbSize: 16 },
154
+ large: { trackWidth: 48, trackHeight: 24, thumbSize: 20 },
155
+ },
156
+ card: {
157
+ borderRadius: 8,
158
+ small: { padding: 12, gap: 12, iconSize: 16, imageHeight: 120 },
159
+ default: { padding: 16, gap: 16, iconSize: 20, imageHeight: 160 },
160
+ large: { padding: 24, gap: 24, iconSize: 24, imageHeight: 200 },
161
+ },
162
+ badge: {
163
+ borderRadius: 9999,
164
+ small: { gap: 2, paddingX: 4, paddingY: 0, dotSize: 6 },
165
+ default: { gap: 4, paddingX: 6, paddingY: 1, dotSize: 6 },
166
+ large: { gap: 4, paddingX: 8, paddingY: 2, dotSize: 8 },
167
+ },
168
+ radio: {
169
+ gap: 8, borderRadius: 9999, focusRingWidth: 2,
170
+ small: { indicatorSize: 16, dotSize: 6 },
171
+ default: { indicatorSize: 20, dotSize: 8 },
172
+ large: { indicatorSize: 24, dotSize: 10 },
173
+ },
174
+ toast: {
175
+ borderRadius: 8, minWidth: 280, maxWidth: 420,
176
+ small: { padding: 12, gap: 12, iconSize: 16, closeSize: 16 },
177
+ default: { padding: 16, gap: 16, iconSize: 20, closeSize: 16 },
178
+ large: { padding: 24, gap: 24, iconSize: 24, closeSize: 20 },
179
+ },
180
+ chip: {
181
+ borderRadius: 9999,
182
+ small: { gap: 4, paddingX: 6, paddingY: 2, iconSize: 12 },
183
+ default: { gap: 4, paddingX: 8, paddingY: 4, iconSize: 14 },
184
+ large: { gap: 8, paddingX: 10, paddingY: 6, iconSize: 16 },
185
+ },
186
+ avatar: {
187
+ borderRadius: 9999,
188
+ small: { size: 32, iconSize: 12 },
189
+ default: { size: 48, iconSize: 16 },
190
+ large: { size: 80, iconSize: 24 },
191
+ },
192
+ popover: {
193
+ borderRadius: 8, arrowSize: 8,
194
+ small: { padding: 12 },
195
+ default: { padding: 16 },
196
+ large: { padding: 24 },
197
+ },
198
+ tooltip: {
199
+ borderRadius: 4, arrowSize: 6,
200
+ small: { paddingX: 6, paddingY: 2 },
201
+ default: { paddingX: 8, paddingY: 4 },
202
+ },
60
203
  },
61
204
  comfortable: {
62
205
  dialog: {
@@ -81,6 +224,75 @@ export const themes = {
81
224
  group: { paddingX: 16, labelPaddingY: 6 },
82
225
  separator: { marginY: 4 },
83
226
  },
227
+ list: {
228
+ sectionGap: 1,
229
+ item: { gap: 16, paddingX: 16, paddingY: 8, borderRadius: 4, iconSize: 24 },
230
+ subheader: { paddingX: 16, paddingY: 8 },
231
+ },
232
+ checkbox: {
233
+ gap: 12, borderRadius: 4, focusRingWidth: 2,
234
+ small: { indicatorSize: 16, iconSize: 10 },
235
+ default: { indicatorSize: 20, iconSize: 12 },
236
+ large: { indicatorSize: 24, iconSize: 14 },
237
+ },
238
+ alert: {
239
+ borderRadius: 8,
240
+ small: { padding: 16, gap: 16, iconSize: 16, closeSize: 16 },
241
+ default: { padding: 24, gap: 24, iconSize: 20, closeSize: 16 },
242
+ large: { padding: 40, gap: 40, iconSize: 24, closeSize: 20 },
243
+ },
244
+ toggle: {
245
+ gap: 12, thumbOffset: 2, focusRingWidth: 2,
246
+ small: { trackWidth: 32, trackHeight: 16, thumbSize: 12 },
247
+ default: { trackWidth: 40, trackHeight: 20, thumbSize: 16 },
248
+ large: { trackWidth: 48, trackHeight: 24, thumbSize: 20 },
249
+ },
250
+ card: {
251
+ borderRadius: 8,
252
+ small: { padding: 16, gap: 16, iconSize: 16, imageHeight: 120 },
253
+ default: { padding: 24, gap: 24, iconSize: 20, imageHeight: 160 },
254
+ large: { padding: 40, gap: 40, iconSize: 24, imageHeight: 200 },
255
+ },
256
+ badge: {
257
+ borderRadius: 9999,
258
+ small: { gap: 2, paddingX: 4, paddingY: 0, dotSize: 6 },
259
+ default: { gap: 4, paddingX: 6, paddingY: 1, dotSize: 6 },
260
+ large: { gap: 4, paddingX: 8, paddingY: 2, dotSize: 8 },
261
+ },
262
+ radio: {
263
+ gap: 12, borderRadius: 9999, focusRingWidth: 2,
264
+ small: { indicatorSize: 16, dotSize: 6 },
265
+ default: { indicatorSize: 20, dotSize: 8 },
266
+ large: { indicatorSize: 24, dotSize: 10 },
267
+ },
268
+ toast: {
269
+ borderRadius: 8, minWidth: 280, maxWidth: 420,
270
+ small: { padding: 16, gap: 16, iconSize: 16, closeSize: 16 },
271
+ default: { padding: 24, gap: 24, iconSize: 20, closeSize: 16 },
272
+ large: { padding: 40, gap: 40, iconSize: 24, closeSize: 20 },
273
+ },
274
+ chip: {
275
+ borderRadius: 9999,
276
+ small: { gap: 4, paddingX: 8, paddingY: 4, iconSize: 12 },
277
+ default: { gap: 8, paddingX: 10, paddingY: 6, iconSize: 14 },
278
+ large: { gap: 8, paddingX: 12, paddingY: 8, iconSize: 16 },
279
+ },
280
+ avatar: {
281
+ borderRadius: 9999,
282
+ small: { size: 40, iconSize: 12 },
283
+ default: { size: 64, iconSize: 16 },
284
+ large: { size: 96, iconSize: 24 },
285
+ },
286
+ popover: {
287
+ borderRadius: 8, arrowSize: 8,
288
+ small: { padding: 16 },
289
+ default: { padding: 24 },
290
+ large: { padding: 40 },
291
+ },
292
+ tooltip: {
293
+ borderRadius: 4, arrowSize: 6,
294
+ small: { paddingX: 8, paddingY: 4 },
295
+ default: { paddingX: 10, paddingY: 6 },
296
+ },
84
297
  },
85
298
  };
86
- //# sourceMappingURL=themes.js.map
@@ -71,6 +71,177 @@ export type SelectThemeTokens = {
71
71
  group: SelectGroupTokens;
72
72
  separator: SelectSeparatorTokens;
73
73
  };
74
+ /** List item tokens (icon size varies by density, unlike Button/Select) */
75
+ export type ListItemTokens = {
76
+ gap: number;
77
+ paddingX: number;
78
+ paddingY: number;
79
+ borderRadius: number;
80
+ iconSize: number;
81
+ };
82
+ /** List subheader tokens */
83
+ export type ListSubheaderTokens = {
84
+ paddingX: number;
85
+ paddingY: number;
86
+ };
87
+ /** Combined list tokens */
88
+ export type ListThemeTokens = {
89
+ sectionGap: number;
90
+ item: ListItemTokens;
91
+ subheader: ListSubheaderTokens;
92
+ };
93
+ /** Checkbox indicator/icon sizes for one size variant (constant across density) */
94
+ export type CheckboxSizeTokens = {
95
+ indicatorSize: number;
96
+ iconSize: number;
97
+ };
98
+ /** Checkbox tokens — gap varies by density; sizes vary by the `size` prop */
99
+ export type CheckboxThemeTokens = {
100
+ gap: number;
101
+ borderRadius: number;
102
+ focusRingWidth: number;
103
+ small: CheckboxSizeTokens;
104
+ default: CheckboxSizeTokens;
105
+ large: CheckboxSizeTokens;
106
+ };
107
+ /** Alert tokens for a single size variant (padding/gap vary by size AND density) */
108
+ export type AlertSizeTokens = {
109
+ padding: number;
110
+ gap: number;
111
+ iconSize: number;
112
+ closeSize: number;
113
+ };
114
+ /** All three alert sizes + constant radius */
115
+ export type AlertThemeTokens = {
116
+ borderRadius: number;
117
+ small: AlertSizeTokens;
118
+ default: AlertSizeTokens;
119
+ large: AlertSizeTokens;
120
+ };
121
+ /** Toggle track/thumb sizes for one size variant (constant across density) */
122
+ export type ToggleSizeTokens = {
123
+ trackWidth: number;
124
+ trackHeight: number;
125
+ thumbSize: number;
126
+ };
127
+ /** Toggle tokens — gap varies by density; track sizes vary by the `size` prop */
128
+ export type ToggleThemeTokens = {
129
+ gap: number;
130
+ thumbOffset: number;
131
+ focusRingWidth: number;
132
+ small: ToggleSizeTokens;
133
+ default: ToggleSizeTokens;
134
+ large: ToggleSizeTokens;
135
+ };
136
+ /** Card tokens for one size variant (padding/gap vary by size AND density) */
137
+ export type CardSizeTokens = {
138
+ padding: number;
139
+ gap: number;
140
+ iconSize: number;
141
+ imageHeight: number;
142
+ };
143
+ /** All three card sizes + constant radius */
144
+ export type CardThemeTokens = {
145
+ borderRadius: number;
146
+ small: CardSizeTokens;
147
+ default: CardSizeTokens;
148
+ large: CardSizeTokens;
149
+ };
150
+ /** Badge spacing/sizing tokens for one size variant (constant across density) */
151
+ export type BadgeSizeTokens = {
152
+ gap: number;
153
+ paddingX: number;
154
+ paddingY: number;
155
+ dotSize: number;
156
+ };
157
+ /** Badge tokens — spacing varies by the `size` prop; pill radius is constant */
158
+ export type BadgeThemeTokens = {
159
+ borderRadius: number;
160
+ small: BadgeSizeTokens;
161
+ default: BadgeSizeTokens;
162
+ large: BadgeSizeTokens;
163
+ };
164
+ /** Radio indicator/dot sizes for one size variant (constant across density) */
165
+ export type RadioSizeTokens = {
166
+ indicatorSize: number;
167
+ dotSize: number;
168
+ };
169
+ /** Radio tokens — gap varies by density; sizes vary by the `size` prop */
170
+ export type RadioThemeTokens = {
171
+ gap: number;
172
+ borderRadius: number;
173
+ focusRingWidth: number;
174
+ small: RadioSizeTokens;
175
+ default: RadioSizeTokens;
176
+ large: RadioSizeTokens;
177
+ };
178
+ /** Toast tokens for a single size variant (padding/gap vary by size AND density) */
179
+ export type ToastSizeTokens = {
180
+ padding: number;
181
+ gap: number;
182
+ iconSize: number;
183
+ closeSize: number;
184
+ };
185
+ /** All three toast sizes + constant radius and width bounds */
186
+ export type ToastThemeTokens = {
187
+ borderRadius: number;
188
+ minWidth: number;
189
+ maxWidth: number;
190
+ small: ToastSizeTokens;
191
+ default: ToastSizeTokens;
192
+ large: ToastSizeTokens;
193
+ };
194
+ /** Chip spacing/sizing tokens for one size variant (padding/gap vary by density) */
195
+ export type ChipSizeTokens = {
196
+ gap: number;
197
+ paddingX: number;
198
+ paddingY: number;
199
+ iconSize: number;
200
+ };
201
+ /** Chip tokens — spacing varies by size + density; pill radius is constant */
202
+ export type ChipThemeTokens = {
203
+ borderRadius: number;
204
+ small: ChipSizeTokens;
205
+ default: ChipSizeTokens;
206
+ large: ChipSizeTokens;
207
+ };
208
+ /** Avatar tokens for one size variant. `size` varies by density; `iconSize` is
209
+ * constant across density (keyed by the `size` prop, like List/Checkbox). */
210
+ export type AvatarSizeTokens = {
211
+ size: number;
212
+ iconSize: number;
213
+ };
214
+ /** Avatar tokens — diameter varies by size AND density; pill radius is constant */
215
+ export type AvatarThemeTokens = {
216
+ borderRadius: number;
217
+ small: AvatarSizeTokens;
218
+ default: AvatarSizeTokens;
219
+ large: AvatarSizeTokens;
220
+ };
221
+ /** Popover tokens for one size variant (padding varies by size AND density) */
222
+ export type PopoverSizeTokens = {
223
+ padding: number;
224
+ };
225
+ /** All three popover sizes + constant radius and arrow size */
226
+ export type PopoverThemeTokens = {
227
+ borderRadius: number;
228
+ arrowSize: number;
229
+ small: PopoverSizeTokens;
230
+ default: PopoverSizeTokens;
231
+ large: PopoverSizeTokens;
232
+ };
233
+ /** Tooltip tokens for one size variant (padding varies by size AND density) */
234
+ export type TooltipSizeTokens = {
235
+ paddingX: number;
236
+ paddingY: number;
237
+ };
238
+ /** Tooltip sizes (small + default only) + constant radius and arrow size */
239
+ export type TooltipThemeTokens = {
240
+ borderRadius: number;
241
+ arrowSize: number;
242
+ small: TooltipSizeTokens;
243
+ default: TooltipSizeTokens;
244
+ };
74
245
  /**
75
246
  * Component-level tokens that vary by density theme.
76
247
  * Extended as new components are added to the library.
@@ -80,9 +251,20 @@ export type ComponentTokens = {
80
251
  dialog: DialogThemeTokens;
81
252
  input: InputThemeTokens;
82
253
  select: SelectThemeTokens;
254
+ list: ListThemeTokens;
255
+ checkbox: CheckboxThemeTokens;
256
+ alert: AlertThemeTokens;
257
+ toggle: ToggleThemeTokens;
258
+ card: CardThemeTokens;
259
+ badge: BadgeThemeTokens;
260
+ radio: RadioThemeTokens;
261
+ toast: ToastThemeTokens;
262
+ chip: ChipThemeTokens;
263
+ avatar: AvatarThemeTokens;
264
+ popover: PopoverThemeTokens;
265
+ tooltip: TooltipThemeTokens;
83
266
  };
84
267
  /** Utility type for partial overrides at any depth */
85
268
  export type DeepPartial<T> = {
86
269
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
87
270
  };
88
- //# sourceMappingURL=types.d.ts.map
@@ -1,8 +1,8 @@
1
+ "use strict";
1
2
  /**
2
3
  * Theme type definitions for the Cast UI density system.
3
4
  *
4
5
  * The density axis controls spacing/sizing tokens only.
5
6
  * Colours and typography are constants — they don't change with density.
6
7
  */
7
- export {};
8
- //# sourceMappingURL=types.js.map
8
+ Object.defineProperty(exports, "__esModule", { value: true });