@korsolutions/ui 0.0.85 → 0.0.87

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 (209) hide show
  1. package/AGENTS.md +3 -3
  2. package/dist/module/components/alert-dialog/components/alert-dialog-root.js +1 -1
  3. package/dist/module/components/alert-dialog/components/alert-dialog-root.js.map +1 -1
  4. package/dist/module/components/alert-dialog/variants/default.js +93 -85
  5. package/dist/module/components/alert-dialog/variants/default.js.map +1 -1
  6. package/dist/module/components/button/button.js +1 -1
  7. package/dist/module/components/button/button.js.map +1 -1
  8. package/dist/module/components/button/variants/default.js +48 -44
  9. package/dist/module/components/button/variants/default.js.map +1 -1
  10. package/dist/module/components/button/variants/ghost.js +64 -60
  11. package/dist/module/components/button/variants/ghost.js.map +1 -1
  12. package/dist/module/components/button/variants/secondary.js +66 -62
  13. package/dist/module/components/button/variants/secondary.js.map +1 -1
  14. package/dist/module/components/combobox/components/combobox-root.js +1 -1
  15. package/dist/module/components/combobox/components/combobox-root.js.map +1 -1
  16. package/dist/module/components/combobox/variants/default.js +91 -88
  17. package/dist/module/components/combobox/variants/default.js.map +1 -1
  18. package/dist/module/components/icon-button/icon-button.js +4 -5
  19. package/dist/module/components/icon-button/icon-button.js.map +1 -1
  20. package/dist/module/components/icon-button/variants/default.js +31 -24
  21. package/dist/module/components/icon-button/variants/default.js.map +1 -1
  22. package/dist/module/components/icon-button/variants/ghost.js +32 -25
  23. package/dist/module/components/icon-button/variants/ghost.js.map +1 -1
  24. package/dist/module/components/icon-button/variants/secondary.js +34 -27
  25. package/dist/module/components/icon-button/variants/secondary.js.map +1 -1
  26. package/dist/module/components/index.js +1 -0
  27. package/dist/module/components/index.js.map +1 -1
  28. package/dist/module/components/input/input.js +1 -1
  29. package/dist/module/components/input/input.js.map +1 -1
  30. package/dist/module/components/input/variants/default.js +39 -37
  31. package/dist/module/components/input/variants/default.js.map +1 -1
  32. package/dist/module/components/input/variants/secondary.js +39 -37
  33. package/dist/module/components/input/variants/secondary.js.map +1 -1
  34. package/dist/module/components/phone-input/components/phone-input-root.js +2 -1
  35. package/dist/module/components/phone-input/components/phone-input-root.js.map +1 -1
  36. package/dist/module/components/phone-input/variants/default.js +115 -112
  37. package/dist/module/components/phone-input/variants/default.js.map +1 -1
  38. package/dist/module/components/select/components/select-root.js +1 -1
  39. package/dist/module/components/select/components/select-root.js.map +1 -1
  40. package/dist/module/components/select/variants/default.js +75 -73
  41. package/dist/module/components/select/variants/default.js.map +1 -1
  42. package/dist/module/components/sidebar/components/sidebar-content.js +19 -0
  43. package/dist/module/components/sidebar/components/sidebar-content.js.map +1 -0
  44. package/dist/module/components/sidebar/components/sidebar-footer.js +18 -0
  45. package/dist/module/components/sidebar/components/sidebar-footer.js.map +1 -0
  46. package/dist/module/components/sidebar/components/sidebar-group-label.js +18 -0
  47. package/dist/module/components/sidebar/components/sidebar-group-label.js.map +1 -0
  48. package/dist/module/components/sidebar/components/sidebar-group.js +18 -0
  49. package/dist/module/components/sidebar/components/sidebar-group.js.map +1 -0
  50. package/dist/module/components/sidebar/components/sidebar-header.js +18 -0
  51. package/dist/module/components/sidebar/components/sidebar-header.js.map +1 -0
  52. package/dist/module/components/sidebar/components/sidebar-menu-item.js +36 -0
  53. package/dist/module/components/sidebar/components/sidebar-menu-item.js.map +1 -0
  54. package/dist/module/components/sidebar/components/sidebar-menu-sub.js +22 -0
  55. package/dist/module/components/sidebar/components/sidebar-menu-sub.js.map +1 -0
  56. package/dist/module/components/sidebar/components/sidebar-menu.js +18 -0
  57. package/dist/module/components/sidebar/components/sidebar-menu.js.map +1 -0
  58. package/dist/module/components/sidebar/components/sidebar-provider.js +47 -0
  59. package/dist/module/components/sidebar/components/sidebar-provider.js.map +1 -0
  60. package/dist/module/components/sidebar/components/sidebar-root.js +27 -0
  61. package/dist/module/components/sidebar/components/sidebar-root.js.map +1 -0
  62. package/dist/module/components/sidebar/context.js +12 -0
  63. package/dist/module/components/sidebar/context.js.map +1 -0
  64. package/dist/module/components/sidebar/index.js +26 -0
  65. package/dist/module/components/sidebar/index.js.map +1 -0
  66. package/dist/module/components/sidebar/types.js +4 -0
  67. package/dist/module/components/sidebar/types.js.map +1 -0
  68. package/dist/module/components/sidebar/variants/default.js +101 -0
  69. package/dist/module/components/sidebar/variants/default.js.map +1 -0
  70. package/dist/module/components/sidebar/variants/index.js +7 -0
  71. package/dist/module/components/sidebar/variants/index.js.map +1 -0
  72. package/dist/module/themes/default/index.js +1 -0
  73. package/dist/module/themes/default/index.js.map +1 -1
  74. package/dist/module/themes/provider.js +1 -0
  75. package/dist/module/themes/provider.js.map +1 -1
  76. package/dist/module/themes/utils.js +2 -1
  77. package/dist/module/themes/utils.js.map +1 -1
  78. package/dist/module/utils/size-scale.js +42 -0
  79. package/dist/module/utils/size-scale.js.map +1 -0
  80. package/dist/module/utils/use-themed-styles.js +4 -1
  81. package/dist/module/utils/use-themed-styles.js.map +1 -1
  82. package/dist/typescript/src/components/alert-dialog/components/alert-dialog-root.d.ts +2 -0
  83. package/dist/typescript/src/components/alert-dialog/components/alert-dialog-root.d.ts.map +1 -1
  84. package/dist/typescript/src/components/alert-dialog/variants/default.d.ts +3 -2
  85. package/dist/typescript/src/components/alert-dialog/variants/default.d.ts.map +1 -1
  86. package/dist/typescript/src/components/alert-dialog/variants/index.d.ts +1 -1
  87. package/dist/typescript/src/components/button/button.d.ts +2 -0
  88. package/dist/typescript/src/components/button/button.d.ts.map +1 -1
  89. package/dist/typescript/src/components/button/variants/default.d.ts +2 -1
  90. package/dist/typescript/src/components/button/variants/default.d.ts.map +1 -1
  91. package/dist/typescript/src/components/button/variants/ghost.d.ts +2 -1
  92. package/dist/typescript/src/components/button/variants/ghost.d.ts.map +1 -1
  93. package/dist/typescript/src/components/button/variants/index.d.ts +3 -3
  94. package/dist/typescript/src/components/button/variants/secondary.d.ts +2 -1
  95. package/dist/typescript/src/components/button/variants/secondary.d.ts.map +1 -1
  96. package/dist/typescript/src/components/combobox/components/combobox-root.d.ts +2 -0
  97. package/dist/typescript/src/components/combobox/components/combobox-root.d.ts.map +1 -1
  98. package/dist/typescript/src/components/combobox/variants/default.d.ts +2 -1
  99. package/dist/typescript/src/components/combobox/variants/default.d.ts.map +1 -1
  100. package/dist/typescript/src/components/icon-button/icon-button.d.ts +2 -1
  101. package/dist/typescript/src/components/icon-button/icon-button.d.ts.map +1 -1
  102. package/dist/typescript/src/components/icon-button/variants/default.d.ts +2 -1
  103. package/dist/typescript/src/components/icon-button/variants/default.d.ts.map +1 -1
  104. package/dist/typescript/src/components/icon-button/variants/ghost.d.ts +2 -1
  105. package/dist/typescript/src/components/icon-button/variants/ghost.d.ts.map +1 -1
  106. package/dist/typescript/src/components/icon-button/variants/index.d.ts +3 -3
  107. package/dist/typescript/src/components/icon-button/variants/secondary.d.ts +2 -1
  108. package/dist/typescript/src/components/icon-button/variants/secondary.d.ts.map +1 -1
  109. package/dist/typescript/src/components/index.d.ts +1 -0
  110. package/dist/typescript/src/components/index.d.ts.map +1 -1
  111. package/dist/typescript/src/components/input/input.d.ts +2 -0
  112. package/dist/typescript/src/components/input/input.d.ts.map +1 -1
  113. package/dist/typescript/src/components/input/variants/default.d.ts +2 -1
  114. package/dist/typescript/src/components/input/variants/default.d.ts.map +1 -1
  115. package/dist/typescript/src/components/input/variants/secondary.d.ts +3 -2
  116. package/dist/typescript/src/components/input/variants/secondary.d.ts.map +1 -1
  117. package/dist/typescript/src/components/phone-input/components/phone-input-root.d.ts +3 -1
  118. package/dist/typescript/src/components/phone-input/components/phone-input-root.d.ts.map +1 -1
  119. package/dist/typescript/src/components/phone-input/variants/default.d.ts +2 -1
  120. package/dist/typescript/src/components/phone-input/variants/default.d.ts.map +1 -1
  121. package/dist/typescript/src/components/select/components/select-root.d.ts +2 -0
  122. package/dist/typescript/src/components/select/components/select-root.d.ts.map +1 -1
  123. package/dist/typescript/src/components/select/variants/default.d.ts +3 -2
  124. package/dist/typescript/src/components/select/variants/default.d.ts.map +1 -1
  125. package/dist/typescript/src/components/sidebar/components/sidebar-content.d.ts +8 -0
  126. package/dist/typescript/src/components/sidebar/components/sidebar-content.d.ts.map +1 -0
  127. package/dist/typescript/src/components/sidebar/components/sidebar-footer.d.ts +8 -0
  128. package/dist/typescript/src/components/sidebar/components/sidebar-footer.d.ts.map +1 -0
  129. package/dist/typescript/src/components/sidebar/components/sidebar-group-label.d.ts +8 -0
  130. package/dist/typescript/src/components/sidebar/components/sidebar-group-label.d.ts.map +1 -0
  131. package/dist/typescript/src/components/sidebar/components/sidebar-group.d.ts +8 -0
  132. package/dist/typescript/src/components/sidebar/components/sidebar-group.d.ts.map +1 -0
  133. package/dist/typescript/src/components/sidebar/components/sidebar-header.d.ts +8 -0
  134. package/dist/typescript/src/components/sidebar/components/sidebar-header.d.ts.map +1 -0
  135. package/dist/typescript/src/components/sidebar/components/sidebar-menu-item.d.ts +12 -0
  136. package/dist/typescript/src/components/sidebar/components/sidebar-menu-item.d.ts.map +1 -0
  137. package/dist/typescript/src/components/sidebar/components/sidebar-menu-sub.d.ts +10 -0
  138. package/dist/typescript/src/components/sidebar/components/sidebar-menu-sub.d.ts.map +1 -0
  139. package/dist/typescript/src/components/sidebar/components/sidebar-menu.d.ts +8 -0
  140. package/dist/typescript/src/components/sidebar/components/sidebar-menu.d.ts.map +1 -0
  141. package/dist/typescript/src/components/sidebar/components/sidebar-provider.d.ts +17 -0
  142. package/dist/typescript/src/components/sidebar/components/sidebar-provider.d.ts.map +1 -0
  143. package/dist/typescript/src/components/sidebar/components/sidebar-root.d.ts +8 -0
  144. package/dist/typescript/src/components/sidebar/components/sidebar-root.d.ts.map +1 -0
  145. package/dist/typescript/src/components/sidebar/context.d.ts +12 -0
  146. package/dist/typescript/src/components/sidebar/context.d.ts.map +1 -0
  147. package/dist/typescript/src/components/sidebar/index.d.ts +35 -0
  148. package/dist/typescript/src/components/sidebar/index.d.ts.map +1 -0
  149. package/dist/typescript/src/components/sidebar/types.d.ts +29 -0
  150. package/dist/typescript/src/components/sidebar/types.d.ts.map +1 -0
  151. package/dist/typescript/src/components/sidebar/variants/default.d.ts +3 -0
  152. package/dist/typescript/src/components/sidebar/variants/default.d.ts.map +1 -0
  153. package/dist/typescript/src/components/sidebar/variants/index.d.ts +5 -0
  154. package/dist/typescript/src/components/sidebar/variants/index.d.ts.map +1 -0
  155. package/dist/typescript/src/index.d.ts +2 -0
  156. package/dist/typescript/src/index.d.ts.map +1 -1
  157. package/dist/typescript/src/themes/default/index.d.ts.map +1 -1
  158. package/dist/typescript/src/themes/provider.d.ts +1 -0
  159. package/dist/typescript/src/themes/provider.d.ts.map +1 -1
  160. package/dist/typescript/src/themes/types.d.ts +5 -0
  161. package/dist/typescript/src/themes/types.d.ts.map +1 -1
  162. package/dist/typescript/src/themes/utils.d.ts.map +1 -1
  163. package/dist/typescript/src/utils/size-scale.d.ts +20 -0
  164. package/dist/typescript/src/utils/size-scale.d.ts.map +1 -0
  165. package/dist/typescript/src/utils/use-themed-styles.d.ts +5 -0
  166. package/dist/typescript/src/utils/use-themed-styles.d.ts.map +1 -1
  167. package/package.json +2 -2
  168. package/src/components/alert-dialog/components/alert-dialog-root.tsx +3 -1
  169. package/src/components/alert-dialog/variants/default.tsx +88 -79
  170. package/src/components/button/button.tsx +3 -1
  171. package/src/components/button/variants/default.tsx +14 -10
  172. package/src/components/button/variants/ghost.tsx +14 -10
  173. package/src/components/button/variants/secondary.tsx +14 -10
  174. package/src/components/combobox/components/combobox-root.tsx +3 -1
  175. package/src/components/combobox/variants/default.tsx +17 -14
  176. package/src/components/icon-button/icon-button.tsx +6 -6
  177. package/src/components/icon-button/variants/default.tsx +12 -6
  178. package/src/components/icon-button/variants/ghost.tsx +12 -6
  179. package/src/components/icon-button/variants/secondary.tsx +12 -6
  180. package/src/components/index.ts +1 -0
  181. package/src/components/input/input.tsx +3 -1
  182. package/src/components/input/variants/default.tsx +11 -9
  183. package/src/components/input/variants/secondary.tsx +12 -10
  184. package/src/components/phone-input/components/phone-input-root.tsx +4 -1
  185. package/src/components/phone-input/variants/default.tsx +21 -18
  186. package/src/components/select/components/select-root.tsx +3 -1
  187. package/src/components/select/variants/default.tsx +16 -14
  188. package/src/components/sidebar/components/sidebar-content.tsx +19 -0
  189. package/src/components/sidebar/components/sidebar-footer.tsx +15 -0
  190. package/src/components/sidebar/components/sidebar-group-label.tsx +15 -0
  191. package/src/components/sidebar/components/sidebar-group.tsx +15 -0
  192. package/src/components/sidebar/components/sidebar-header.tsx +15 -0
  193. package/src/components/sidebar/components/sidebar-menu-item.tsx +61 -0
  194. package/src/components/sidebar/components/sidebar-menu-sub.tsx +23 -0
  195. package/src/components/sidebar/components/sidebar-menu.tsx +15 -0
  196. package/src/components/sidebar/components/sidebar-provider.tsx +73 -0
  197. package/src/components/sidebar/components/sidebar-root.tsx +19 -0
  198. package/src/components/sidebar/context.ts +21 -0
  199. package/src/components/sidebar/index.ts +37 -0
  200. package/src/components/sidebar/types.ts +31 -0
  201. package/src/components/sidebar/variants/default.tsx +96 -0
  202. package/src/components/sidebar/variants/index.ts +5 -0
  203. package/src/index.tsx +2 -0
  204. package/src/themes/default/index.ts +1 -0
  205. package/src/themes/provider.tsx +2 -0
  206. package/src/themes/types.ts +5 -0
  207. package/src/themes/utils.ts +1 -0
  208. package/src/utils/size-scale.ts +45 -0
  209. package/src/utils/use-themed-styles.ts +8 -0
@@ -0,0 +1,31 @@
1
+ import type { StyleProp, TextStyle, ViewStyle } from "react-native";
2
+ import type { IconProps } from "../icon";
3
+
4
+ export type SidebarState = "expanded" | "collapsed";
5
+
6
+ export type SidebarMenuButtonState = "default" | "active" | "hovered";
7
+
8
+ export interface SidebarStyles {
9
+ /** The sidebar container */
10
+ root?: StyleProp<ViewStyle>;
11
+ /** Header (sticky top) */
12
+ header?: StyleProp<ViewStyle>;
13
+ /** Footer (sticky bottom) */
14
+ footer?: StyleProp<ViewStyle>;
15
+ /** Scrollable content area */
16
+ content?: StyleProp<ViewStyle>;
17
+ /** Group container */
18
+ group?: StyleProp<ViewStyle>;
19
+ /** Group label text */
20
+ groupLabel?: StyleProp<TextStyle>;
21
+ /** Menu list container */
22
+ menu?: StyleProp<ViewStyle>;
23
+ /** Menu item */
24
+ menuItem?: Partial<Record<SidebarMenuButtonState, StyleProp<ViewStyle>>>;
25
+ /** Menu item text */
26
+ menuItemText?: Partial<Record<SidebarMenuButtonState, StyleProp<TextStyle>>>;
27
+ /** Menu item icon */
28
+ menuItemIcon?: Partial<Record<SidebarMenuButtonState, IconProps>>;
29
+ /** Submenu container */
30
+ menuSub?: StyleProp<ViewStyle>;
31
+ }
@@ -0,0 +1,96 @@
1
+ import { useThemedStyles } from "../../../utils/use-themed-styles";
2
+ import type { SidebarStyles } from "../types";
3
+
4
+ export function useSidebarVariantDefault(): SidebarStyles {
5
+ return useThemedStyles(
6
+ ({ colors, radius, fontFamily, fontSize, spacing }): SidebarStyles => ({
7
+ root: {
8
+ height: "100%",
9
+ flexShrink: 0,
10
+ flexDirection: "column",
11
+ backgroundColor: colors.surface,
12
+ borderColor: colors.border,
13
+ overflow: "hidden",
14
+ },
15
+ header: {
16
+ paddingHorizontal: spacing * 2,
17
+ paddingTop: spacing * 2,
18
+ paddingBottom: spacing,
19
+ },
20
+ footer: {
21
+ paddingHorizontal: spacing * 2,
22
+ paddingTop: spacing,
23
+ paddingBottom: spacing * 2,
24
+ },
25
+ content: {
26
+ flex: 1,
27
+ paddingHorizontal: spacing * 2,
28
+ },
29
+ group: {
30
+ paddingVertical: spacing,
31
+ gap: spacing * 0.5,
32
+ },
33
+ groupLabel: {
34
+ fontFamily,
35
+ fontSize: fontSize * 0.75,
36
+ fontWeight: "500",
37
+ color: colors.mutedForeground,
38
+ paddingHorizontal: spacing,
39
+ paddingVertical: spacing * 0.5,
40
+ letterSpacing: 0.5,
41
+ textTransform: "uppercase",
42
+ },
43
+ menu: {
44
+ gap: 1,
45
+ },
46
+ menuItem: {
47
+ default: {
48
+ flexDirection: "row",
49
+ alignItems: "center",
50
+ gap: spacing,
51
+ paddingVertical: spacing,
52
+ paddingHorizontal: spacing * 1.5,
53
+ borderRadius: radius,
54
+ minHeight: 36,
55
+ },
56
+ active: {
57
+ backgroundColor: colors.muted,
58
+ },
59
+ hovered: {
60
+ backgroundColor: colors.muted,
61
+ opacity: 0.8,
62
+ },
63
+ },
64
+ menuItemText: {
65
+ default: {
66
+ fontFamily,
67
+ fontSize: fontSize * 0.875,
68
+ fontWeight: "500",
69
+ color: colors.foreground,
70
+ lineHeight: fontSize * 1.25,
71
+ flex: 1,
72
+ },
73
+ active: {
74
+ color: colors.primary,
75
+ },
76
+ hovered: {},
77
+ },
78
+ menuItemIcon: {
79
+ default: {
80
+ color: colors.foreground,
81
+ size: fontSize * 1.25,
82
+ },
83
+ active: {
84
+ color: colors.primary,
85
+ },
86
+ },
87
+ menuSub: {
88
+ paddingLeft: spacing * 3,
89
+ gap: 1,
90
+ borderLeftWidth: 1,
91
+ borderLeftColor: colors.border,
92
+ marginLeft: spacing * 2,
93
+ },
94
+ }),
95
+ );
96
+ }
@@ -0,0 +1,5 @@
1
+ import { useSidebarVariantDefault } from "./default";
2
+
3
+ export const SidebarVariants = {
4
+ default: useSidebarVariantDefault,
5
+ };
package/src/index.tsx CHANGED
@@ -49,3 +49,5 @@ export * from "./themes/types";
49
49
  export * from "./components";
50
50
 
51
51
  export * from "./safe-area";
52
+ export type { Size } from "./utils/size-scale";
53
+ export type { SvgProps } from "./types/props.types";
@@ -7,6 +7,7 @@ export const defaultThemeAssets: ThemeAssets = {
7
7
  dark: darkColors,
8
8
  },
9
9
  radius: 10,
10
+ spacing: 6,
10
11
  fontFamily: "System",
11
12
  letterSpacing: 0,
12
13
  fontSize: 16,
@@ -21,6 +21,7 @@ interface ThemeContext {
21
21
  colorScheme: ColorScheme;
22
22
  letterSpacing: LetterSpacing;
23
23
  fontSize: FontSize;
24
+ spacing: number;
24
25
  setColorScheme: (scheme: ColorScheme) => void;
25
26
  components?: ComponentsConfig;
26
27
  }
@@ -52,6 +53,7 @@ export const ThemeProvider = (props: ThemeProviderProps) => {
52
53
  fontFamily: themeAssets.fontFamily,
53
54
  letterSpacing: themeAssets.letterSpacing,
54
55
  fontSize: themeAssets.fontSize,
56
+ spacing: themeAssets.spacing,
55
57
  components,
56
58
  }}
57
59
  >
@@ -30,6 +30,7 @@ export interface ThemeAssets {
30
30
  fontFamily: FontFamily;
31
31
  letterSpacing: LetterSpacing;
32
32
  fontSize: FontSize;
33
+ spacing: number;
33
34
  }
34
35
 
35
36
  export type StorageClient<T> = {
@@ -59,6 +60,7 @@ import type { ProgressStyles } from "../components/progress/types";
59
60
  import type { RadioGroupStyles } from "../components/radio-group/types";
60
61
  import type { SelectStyles } from "../components/select/types";
61
62
  import type { SeparatorStyles } from "../components/separator/types";
63
+ import type { SidebarStyles } from "../components/sidebar/types";
62
64
  import type { SpinnerStyles } from "../components/spinner/types";
63
65
  import type { TableStyles } from "../components/table/types";
64
66
  import type { TabsStyles } from "../components/tabs/types";
@@ -135,6 +137,9 @@ export interface ComponentsConfig {
135
137
  separator?: {
136
138
  styles?: SeparatorStyles;
137
139
  };
140
+ sidebar?: {
141
+ styles?: SidebarStyles;
142
+ };
138
143
  spinner?: {
139
144
  styles?: SpinnerStyles;
140
145
  };
@@ -14,5 +14,6 @@ export function mergeThemeAssets(
14
14
  fontFamily: override.fontFamily ?? base.fontFamily,
15
15
  letterSpacing: override.letterSpacing ?? base.letterSpacing,
16
16
  fontSize: override.fontSize ?? base.fontSize,
17
+ spacing: override.spacing ?? base.spacing,
17
18
  };
18
19
  }
@@ -0,0 +1,45 @@
1
+ export type Size = "sm" | "md" | "lg";
2
+
3
+ interface SizeScaleValues {
4
+ /** spacing * 1 | 1.5 | 2 */
5
+ paddingVertical: number;
6
+ /** spacing * 1.5 | 2 | 3 */
7
+ paddingHorizontal: number;
8
+ /** spacing * 0.75 | 1 | 1.25 */
9
+ gap: number;
10
+ /** fontSize * 0.875 | 1 | 1.125 */
11
+ fontSize: number;
12
+ /** fontSize * 0.875 | 1 | 1.125 (alias for icon sizing) */
13
+ iconSize: number;
14
+ /** 1.75 | 2 | 2.25 */
15
+ strokeWidth: number;
16
+ /** spacing * 4.5 | 6 | 7.5 */
17
+ height: number;
18
+ }
19
+
20
+ const scales: Record<
21
+ Size,
22
+ { pv: number; ph: number; gap: number; fontScale: number; sw: number; h: number }
23
+ > = {
24
+ sm: { pv: 1, ph: 1.5, gap: 0.75, fontScale: 0.875, sw: 1.75, h: 4.5 },
25
+ md: { pv: 1.5, ph: 2, gap: 1, fontScale: 1, sw: 2, h: 6 },
26
+ lg: { pv: 2, ph: 3, gap: 1.25, fontScale: 1.125, sw: 2.25, h: 7.5 },
27
+ };
28
+
29
+ export function getSizeScale(
30
+ size: Size = "md",
31
+ spacing: number,
32
+ fontSize: number,
33
+ ): SizeScaleValues {
34
+ const s = scales[size] ?? scales.md;
35
+ const scaledFontSize = fontSize * s.fontScale;
36
+ return {
37
+ paddingVertical: spacing * s.pv,
38
+ paddingHorizontal: spacing * s.ph,
39
+ gap: spacing * s.gap,
40
+ fontSize: scaledFontSize,
41
+ iconSize: scaledFontSize,
42
+ strokeWidth: s.sw,
43
+ height: spacing * s.h,
44
+ };
45
+ }
@@ -1,5 +1,8 @@
1
1
  import { useTheme } from "../themes";
2
2
  import type { Colors, FontFamily, FontSize, LetterSpacing, Radius } from "../themes/types";
3
+ import { getSizeScale, type Size } from "./size-scale";
4
+
5
+ type SizeScale = ReturnType<typeof getSizeScale>;
3
6
 
4
7
  interface CallbackProps {
5
8
  colors: Colors;
@@ -7,6 +10,9 @@ interface CallbackProps {
7
10
  fontFamily: FontFamily;
8
11
  letterSpacing: LetterSpacing;
9
12
  fontSize: FontSize;
13
+ spacing: number;
14
+ /** Compute spacing-based size dimensions from a Size token */
15
+ sizeScale: (size: Size) => SizeScale;
10
16
  }
11
17
 
12
18
  export const useThemedStyles = <T>(callback: (props: CallbackProps) => T): T => {
@@ -17,5 +23,7 @@ export const useThemedStyles = <T>(callback: (props: CallbackProps) => T): T =>
17
23
  fontFamily: theme.fontFamily,
18
24
  letterSpacing: theme.letterSpacing,
19
25
  fontSize: theme.fontSize,
26
+ spacing: theme.spacing,
27
+ sizeScale: (size: Size) => getSizeScale(size, theme.spacing, theme.fontSize),
20
28
  });
21
29
  };