@newtonedev/components 0.1.4 → 0.1.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.
Files changed (255) hide show
  1. package/dist/composites/actions/Button/Button.d.ts +37 -0
  2. package/dist/composites/actions/Button/Button.d.ts.map +1 -0
  3. package/dist/composites/actions/Button/Button.styles.d.ts +65 -0
  4. package/dist/composites/actions/Button/Button.styles.d.ts.map +1 -0
  5. package/dist/{Button → composites/actions/Button}/Button.types.d.ts +12 -3
  6. package/dist/composites/actions/Button/Button.types.d.ts.map +1 -0
  7. package/dist/composites/actions/Button/index.d.ts.map +1 -0
  8. package/dist/composites/form-controls/Select/Select.d.ts.map +1 -0
  9. package/dist/{Select → composites/form-controls/Select}/Select.styles.d.ts +1 -1
  10. package/dist/composites/form-controls/Select/Select.styles.d.ts.map +1 -0
  11. package/dist/composites/form-controls/Select/Select.types.d.ts.map +1 -0
  12. package/dist/composites/form-controls/Select/SelectOption.d.ts.map +1 -0
  13. package/dist/composites/form-controls/Select/index.d.ts.map +1 -0
  14. package/dist/composites/form-controls/Select/useSelect.d.ts.map +1 -0
  15. package/dist/composites/form-controls/TextInput/TextInput.d.ts.map +1 -0
  16. package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.styles.d.ts +1 -1
  17. package/dist/composites/form-controls/TextInput/TextInput.styles.d.ts.map +1 -0
  18. package/dist/composites/form-controls/TextInput/TextInput.types.d.ts.map +1 -0
  19. package/dist/composites/form-controls/TextInput/index.d.ts.map +1 -0
  20. package/dist/composites/form-controls/Toggle/Toggle.d.ts.map +1 -0
  21. package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.styles.d.ts +1 -1
  22. package/dist/composites/form-controls/Toggle/Toggle.styles.d.ts.map +1 -0
  23. package/dist/composites/form-controls/Toggle/Toggle.types.d.ts.map +1 -0
  24. package/dist/composites/form-controls/Toggle/index.d.ts.map +1 -0
  25. package/dist/composites/layout/AppShell/AppShell.d.ts.map +1 -0
  26. package/dist/{AppShell → composites/layout/AppShell}/AppShell.styles.d.ts +1 -1
  27. package/dist/composites/layout/AppShell/AppShell.styles.d.ts.map +1 -0
  28. package/dist/composites/layout/AppShell/AppShell.types.d.ts.map +1 -0
  29. package/dist/composites/layout/AppShell/index.d.ts.map +1 -0
  30. package/dist/composites/layout/Card/Card.d.ts.map +1 -0
  31. package/dist/{Card → composites/layout/Card}/Card.styles.d.ts +1 -1
  32. package/dist/composites/layout/Card/Card.styles.d.ts.map +1 -0
  33. package/dist/{Card → composites/layout/Card}/Card.types.d.ts +1 -1
  34. package/dist/composites/layout/Card/Card.types.d.ts.map +1 -0
  35. package/dist/composites/layout/Card/index.d.ts.map +1 -0
  36. package/dist/composites/layout/Navbar/Navbar.d.ts.map +1 -0
  37. package/dist/{Navbar → composites/layout/Navbar}/Navbar.styles.d.ts +1 -1
  38. package/dist/composites/layout/Navbar/Navbar.styles.d.ts.map +1 -0
  39. package/dist/composites/layout/Navbar/Navbar.types.d.ts.map +1 -0
  40. package/dist/composites/layout/Navbar/index.d.ts.map +1 -0
  41. package/dist/composites/layout/Sidebar/Sidebar.d.ts.map +1 -0
  42. package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.styles.d.ts +1 -1
  43. package/dist/composites/layout/Sidebar/Sidebar.styles.d.ts.map +1 -0
  44. package/dist/composites/layout/Sidebar/Sidebar.types.d.ts.map +1 -0
  45. package/dist/composites/layout/Sidebar/index.d.ts.map +1 -0
  46. package/dist/composites/overlays/Popover/Popover.d.ts.map +1 -0
  47. package/dist/{Popover → composites/overlays/Popover}/Popover.styles.d.ts +1 -1
  48. package/dist/composites/overlays/Popover/Popover.styles.d.ts.map +1 -0
  49. package/dist/composites/overlays/Popover/Popover.types.d.ts.map +1 -0
  50. package/dist/composites/overlays/Popover/index.d.ts.map +1 -0
  51. package/dist/composites/overlays/Popover/usePopover.d.ts.map +1 -0
  52. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.d.ts.map +1 -0
  53. package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.styles.d.ts +1 -1
  54. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.styles.d.ts.map +1 -0
  55. package/dist/composites/range-inputs/ColorScaleSlider/ColorScaleSlider.types.d.ts.map +1 -0
  56. package/dist/composites/range-inputs/ColorScaleSlider/index.d.ts.map +1 -0
  57. package/dist/composites/range-inputs/HueSlider/HueSlider.d.ts.map +1 -0
  58. package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.styles.d.ts +1 -1
  59. package/dist/composites/range-inputs/HueSlider/HueSlider.styles.d.ts.map +1 -0
  60. package/dist/composites/range-inputs/HueSlider/HueSlider.types.d.ts.map +1 -0
  61. package/dist/composites/range-inputs/HueSlider/index.d.ts.map +1 -0
  62. package/dist/composites/range-inputs/Slider/Slider.d.ts.map +1 -0
  63. package/dist/{Slider → composites/range-inputs/Slider}/Slider.styles.d.ts +1 -1
  64. package/dist/composites/range-inputs/Slider/Slider.styles.d.ts.map +1 -0
  65. package/dist/composites/range-inputs/Slider/Slider.types.d.ts.map +1 -0
  66. package/dist/composites/range-inputs/Slider/index.d.ts.map +1 -0
  67. package/dist/index.cjs +1277 -764
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/index.d.ts +30 -29
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +1234 -726
  72. package/dist/index.js.map +1 -1
  73. package/dist/primitives/Frame/Frame.d.ts +2 -3
  74. package/dist/primitives/Frame/Frame.d.ts.map +1 -1
  75. package/dist/primitives/Frame/Frame.types.d.ts +4 -15
  76. package/dist/primitives/Frame/Frame.types.d.ts.map +1 -1
  77. package/dist/primitives/Icon/Icon.d.ts.map +1 -1
  78. package/dist/primitives/Text/Text.d.ts.map +1 -1
  79. package/dist/primitives/Text/Text.types.d.ts +9 -4
  80. package/dist/primitives/Text/Text.types.d.ts.map +1 -1
  81. package/dist/primitives/Wrapper/Wrapper.d.ts +1 -1
  82. package/dist/primitives/Wrapper/Wrapper.types.d.ts +1 -1
  83. package/dist/registry/registry.d.ts.map +1 -1
  84. package/dist/theme/FrameContext.d.ts +7 -5
  85. package/dist/theme/FrameContext.d.ts.map +1 -1
  86. package/dist/theme/NewtoneProvider.d.ts +5 -6
  87. package/dist/theme/NewtoneProvider.d.ts.map +1 -1
  88. package/dist/theme/defaults.d.ts.map +1 -1
  89. package/dist/theme/types.d.ts +38 -24
  90. package/dist/theme/types.d.ts.map +1 -1
  91. package/dist/tokens/computeTokens.d.ts +82 -7
  92. package/dist/tokens/computeTokens.d.ts.map +1 -1
  93. package/dist/tokens/types.d.ts +66 -14
  94. package/dist/tokens/types.d.ts.map +1 -1
  95. package/dist/tokens/useTokens.d.ts +11 -14
  96. package/dist/tokens/useTokens.d.ts.map +1 -1
  97. package/package.json +1 -1
  98. package/src/composites/actions/Button/Button.styles.ts +338 -0
  99. package/src/composites/actions/Button/Button.tsx +119 -0
  100. package/src/{Button → composites/actions/Button}/Button.types.ts +14 -3
  101. package/src/{Select → composites/form-controls/Select}/Select.styles.ts +1 -1
  102. package/src/{Select → composites/form-controls/Select}/Select.tsx +4 -4
  103. package/src/{Select → composites/form-controls/Select}/SelectOption.tsx +4 -4
  104. package/src/{TextInput → composites/form-controls/TextInput}/TextInput.styles.ts +1 -1
  105. package/src/{TextInput → composites/form-controls/TextInput}/TextInput.tsx +1 -1
  106. package/src/{Toggle → composites/form-controls/Toggle}/Toggle.styles.ts +2 -2
  107. package/src/{Toggle → composites/form-controls/Toggle}/Toggle.tsx +1 -1
  108. package/src/{AppShell → composites/layout/AppShell}/AppShell.styles.ts +1 -1
  109. package/src/{AppShell → composites/layout/AppShell}/AppShell.tsx +1 -1
  110. package/src/{Card → composites/layout/Card}/Card.styles.ts +1 -1
  111. package/src/{Card → composites/layout/Card}/Card.tsx +1 -1
  112. package/src/{Card → composites/layout/Card}/Card.types.ts +1 -1
  113. package/src/{Navbar → composites/layout/Navbar}/Navbar.styles.ts +1 -1
  114. package/src/{Navbar → composites/layout/Navbar}/Navbar.tsx +1 -1
  115. package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.styles.ts +1 -1
  116. package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.tsx +1 -1
  117. package/src/{Popover → composites/overlays/Popover}/Popover.styles.ts +1 -1
  118. package/src/{Popover → composites/overlays/Popover}/Popover.tsx +1 -1
  119. package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.styles.ts +2 -2
  120. package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.tsx +1 -1
  121. package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.styles.ts +1 -1
  122. package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.tsx +1 -1
  123. package/src/{Slider → composites/range-inputs/Slider}/Slider.styles.ts +3 -3
  124. package/src/{Slider → composites/range-inputs/Slider}/Slider.tsx +1 -1
  125. package/src/index.ts +40 -33
  126. package/src/primitives/Frame/Frame.tsx +10 -18
  127. package/src/primitives/Frame/Frame.types.ts +5 -17
  128. package/src/primitives/Icon/Icon.tsx +16 -1
  129. package/src/primitives/Text/Text.tsx +18 -8
  130. package/src/primitives/Text/Text.types.ts +9 -4
  131. package/src/primitives/Wrapper/Wrapper.tsx +1 -1
  132. package/src/primitives/Wrapper/Wrapper.types.ts +1 -1
  133. package/src/registry/registry.ts +239 -6
  134. package/src/theme/FrameContext.tsx +7 -5
  135. package/src/theme/NewtoneProvider.tsx +5 -10
  136. package/src/theme/defaults.ts +0 -9
  137. package/src/theme/types.ts +53 -26
  138. package/src/tokens/computeTokens.ts +351 -113
  139. package/src/tokens/types.ts +82 -14
  140. package/src/tokens/useTokens.ts +29 -24
  141. package/dist/AppShell/AppShell.d.ts.map +0 -1
  142. package/dist/AppShell/AppShell.styles.d.ts.map +0 -1
  143. package/dist/AppShell/AppShell.types.d.ts.map +0 -1
  144. package/dist/AppShell/index.d.ts.map +0 -1
  145. package/dist/Button/Button.d.ts +0 -28
  146. package/dist/Button/Button.d.ts.map +0 -1
  147. package/dist/Button/Button.styles.d.ts +0 -46
  148. package/dist/Button/Button.styles.d.ts.map +0 -1
  149. package/dist/Button/Button.types.d.ts.map +0 -1
  150. package/dist/Button/index.d.ts.map +0 -1
  151. package/dist/Card/Card.d.ts.map +0 -1
  152. package/dist/Card/Card.styles.d.ts.map +0 -1
  153. package/dist/Card/Card.types.d.ts.map +0 -1
  154. package/dist/Card/index.d.ts.map +0 -1
  155. package/dist/ColorScaleSlider/ColorScaleSlider.d.ts.map +0 -1
  156. package/dist/ColorScaleSlider/ColorScaleSlider.styles.d.ts.map +0 -1
  157. package/dist/ColorScaleSlider/ColorScaleSlider.types.d.ts.map +0 -1
  158. package/dist/ColorScaleSlider/index.d.ts.map +0 -1
  159. package/dist/HueSlider/HueSlider.d.ts.map +0 -1
  160. package/dist/HueSlider/HueSlider.styles.d.ts.map +0 -1
  161. package/dist/HueSlider/HueSlider.types.d.ts.map +0 -1
  162. package/dist/HueSlider/index.d.ts.map +0 -1
  163. package/dist/Navbar/Navbar.d.ts.map +0 -1
  164. package/dist/Navbar/Navbar.styles.d.ts.map +0 -1
  165. package/dist/Navbar/Navbar.types.d.ts.map +0 -1
  166. package/dist/Navbar/index.d.ts.map +0 -1
  167. package/dist/Popover/Popover.d.ts.map +0 -1
  168. package/dist/Popover/Popover.styles.d.ts.map +0 -1
  169. package/dist/Popover/Popover.types.d.ts.map +0 -1
  170. package/dist/Popover/index.d.ts.map +0 -1
  171. package/dist/Popover/usePopover.d.ts.map +0 -1
  172. package/dist/Select/Select.d.ts.map +0 -1
  173. package/dist/Select/Select.styles.d.ts.map +0 -1
  174. package/dist/Select/Select.types.d.ts.map +0 -1
  175. package/dist/Select/SelectOption.d.ts.map +0 -1
  176. package/dist/Select/index.d.ts.map +0 -1
  177. package/dist/Select/useSelect.d.ts.map +0 -1
  178. package/dist/Sidebar/Sidebar.d.ts.map +0 -1
  179. package/dist/Sidebar/Sidebar.styles.d.ts.map +0 -1
  180. package/dist/Sidebar/Sidebar.types.d.ts.map +0 -1
  181. package/dist/Sidebar/index.d.ts.map +0 -1
  182. package/dist/Slider/Slider.d.ts.map +0 -1
  183. package/dist/Slider/Slider.styles.d.ts.map +0 -1
  184. package/dist/Slider/Slider.types.d.ts.map +0 -1
  185. package/dist/Slider/index.d.ts.map +0 -1
  186. package/dist/TextInput/TextInput.d.ts.map +0 -1
  187. package/dist/TextInput/TextInput.styles.d.ts.map +0 -1
  188. package/dist/TextInput/TextInput.types.d.ts.map +0 -1
  189. package/dist/TextInput/index.d.ts.map +0 -1
  190. package/dist/Toggle/Toggle.d.ts.map +0 -1
  191. package/dist/Toggle/Toggle.styles.d.ts.map +0 -1
  192. package/dist/Toggle/Toggle.types.d.ts.map +0 -1
  193. package/dist/Toggle/index.d.ts.map +0 -1
  194. package/src/Button/Button.styles.ts +0 -133
  195. package/src/Button/Button.tsx +0 -86
  196. /package/dist/{Button → composites/actions/Button}/index.d.ts +0 -0
  197. /package/dist/{Select → composites/form-controls/Select}/Select.d.ts +0 -0
  198. /package/dist/{Select → composites/form-controls/Select}/Select.types.d.ts +0 -0
  199. /package/dist/{Select → composites/form-controls/Select}/SelectOption.d.ts +0 -0
  200. /package/dist/{Select → composites/form-controls/Select}/index.d.ts +0 -0
  201. /package/dist/{Select → composites/form-controls/Select}/useSelect.d.ts +0 -0
  202. /package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.d.ts +0 -0
  203. /package/dist/{TextInput → composites/form-controls/TextInput}/TextInput.types.d.ts +0 -0
  204. /package/dist/{TextInput → composites/form-controls/TextInput}/index.d.ts +0 -0
  205. /package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.d.ts +0 -0
  206. /package/dist/{Toggle → composites/form-controls/Toggle}/Toggle.types.d.ts +0 -0
  207. /package/dist/{Toggle → composites/form-controls/Toggle}/index.d.ts +0 -0
  208. /package/dist/{AppShell → composites/layout/AppShell}/AppShell.d.ts +0 -0
  209. /package/dist/{AppShell → composites/layout/AppShell}/AppShell.types.d.ts +0 -0
  210. /package/dist/{AppShell → composites/layout/AppShell}/index.d.ts +0 -0
  211. /package/dist/{Card → composites/layout/Card}/Card.d.ts +0 -0
  212. /package/dist/{Card → composites/layout/Card}/index.d.ts +0 -0
  213. /package/dist/{Navbar → composites/layout/Navbar}/Navbar.d.ts +0 -0
  214. /package/dist/{Navbar → composites/layout/Navbar}/Navbar.types.d.ts +0 -0
  215. /package/dist/{Navbar → composites/layout/Navbar}/index.d.ts +0 -0
  216. /package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.d.ts +0 -0
  217. /package/dist/{Sidebar → composites/layout/Sidebar}/Sidebar.types.d.ts +0 -0
  218. /package/dist/{Sidebar → composites/layout/Sidebar}/index.d.ts +0 -0
  219. /package/dist/{Popover → composites/overlays/Popover}/Popover.d.ts +0 -0
  220. /package/dist/{Popover → composites/overlays/Popover}/Popover.types.d.ts +0 -0
  221. /package/dist/{Popover → composites/overlays/Popover}/index.d.ts +0 -0
  222. /package/dist/{Popover → composites/overlays/Popover}/usePopover.d.ts +0 -0
  223. /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.d.ts +0 -0
  224. /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.types.d.ts +0 -0
  225. /package/dist/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/index.d.ts +0 -0
  226. /package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.d.ts +0 -0
  227. /package/dist/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.types.d.ts +0 -0
  228. /package/dist/{HueSlider → composites/range-inputs/HueSlider}/index.d.ts +0 -0
  229. /package/dist/{Slider → composites/range-inputs/Slider}/Slider.d.ts +0 -0
  230. /package/dist/{Slider → composites/range-inputs/Slider}/Slider.types.d.ts +0 -0
  231. /package/dist/{Slider → composites/range-inputs/Slider}/index.d.ts +0 -0
  232. /package/src/{Button → composites/actions/Button}/index.ts +0 -0
  233. /package/src/{Select → composites/form-controls/Select}/Select.types.ts +0 -0
  234. /package/src/{Select → composites/form-controls/Select}/index.ts +0 -0
  235. /package/src/{Select → composites/form-controls/Select}/useSelect.ts +0 -0
  236. /package/src/{TextInput → composites/form-controls/TextInput}/TextInput.types.ts +0 -0
  237. /package/src/{TextInput → composites/form-controls/TextInput}/index.ts +0 -0
  238. /package/src/{Toggle → composites/form-controls/Toggle}/Toggle.types.ts +0 -0
  239. /package/src/{Toggle → composites/form-controls/Toggle}/index.ts +0 -0
  240. /package/src/{AppShell → composites/layout/AppShell}/AppShell.types.ts +0 -0
  241. /package/src/{AppShell → composites/layout/AppShell}/index.ts +0 -0
  242. /package/src/{Card → composites/layout/Card}/index.ts +0 -0
  243. /package/src/{Navbar → composites/layout/Navbar}/Navbar.types.ts +0 -0
  244. /package/src/{Navbar → composites/layout/Navbar}/index.ts +0 -0
  245. /package/src/{Sidebar → composites/layout/Sidebar}/Sidebar.types.ts +0 -0
  246. /package/src/{Sidebar → composites/layout/Sidebar}/index.ts +0 -0
  247. /package/src/{Popover → composites/overlays/Popover}/Popover.types.ts +0 -0
  248. /package/src/{Popover → composites/overlays/Popover}/index.ts +0 -0
  249. /package/src/{Popover → composites/overlays/Popover}/usePopover.ts +0 -0
  250. /package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/ColorScaleSlider.types.ts +0 -0
  251. /package/src/{ColorScaleSlider → composites/range-inputs/ColorScaleSlider}/index.ts +0 -0
  252. /package/src/{HueSlider → composites/range-inputs/HueSlider}/HueSlider.types.ts +0 -0
  253. /package/src/{HueSlider → composites/range-inputs/HueSlider}/index.ts +0 -0
  254. /package/src/{Slider → composites/range-inputs/Slider}/Slider.types.ts +0 -0
  255. /package/src/{Slider → composites/range-inputs/Slider}/index.ts +0 -0
@@ -1,5 +1,12 @@
1
1
  import type { ElevationLevel } from '../theme/types';
2
2
  import type { ResolvedTokens } from './types';
3
+ /**
4
+ * Extended tokens result that includes the resolved elevation level.
5
+ * This allows components to make elevation-aware styling decisions.
6
+ */
7
+ export interface UseTokensResult extends ResolvedTokens {
8
+ elevation: ElevationLevel;
9
+ }
3
10
  /**
4
11
  * Hook to compute design tokens for the current theme/mode/elevation.
5
12
  *
@@ -8,22 +15,12 @@ import type { ResolvedTokens } from './types';
8
15
  * 2. FrameContext values (from nearest parent Frame) are used when elevation is omitted
9
16
  * 3. Falls back to NewtoneProvider theme + elevation 1
10
17
  *
11
- * Theme always reads from FrameContext if present, falling back to NewtoneProvider.
18
+ * When inside a Frame and no explicit elevation override is given, reuses the
19
+ * Frame's pre-computed tokens to avoid redundant computeTokens calls.
12
20
  *
13
21
  * @param elevation - Elevation level (0=sunken, 1=default, 2=elevated).
14
22
  * When omitted, reads from FrameContext or defaults to 1.
15
- * @returns Resolved design tokens with all necessary colors
16
- *
17
- * @example
18
- * ```tsx
19
- * // Inside a <Frame theme="primary" elevation={1}>:
20
- * function MyComponent() {
21
- * const tokens = useTokens(); // Gets primary theme, elevation 2 (mapped from Frame's 1)
22
- * return (
23
- * <View style={{ backgroundColor: srgbToHex(tokens.background.srgb) }} />
24
- * );
25
- * }
26
- * ```
23
+ * @returns Resolved design tokens with all necessary colors + resolved elevation
27
24
  */
28
- export declare function useTokens(elevation?: ElevationLevel): ResolvedTokens;
25
+ export declare function useTokens(elevation?: ElevationLevel): UseTokensResult;
29
26
  //# sourceMappingURL=useTokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTokens.d.ts","sourceRoot":"","sources":["../../src/tokens/useTokens.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,CAwBpE"}
1
+ {"version":3,"file":"useTokens.d.ts","sourceRoot":"","sources":["../../src/tokens/useTokens.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,eAAe,CA+BrE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newtonedev/components",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "React + React Native Web component library for Newtone",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -0,0 +1,338 @@
1
+ import { srgbToHex } from 'newtone';
2
+ import type { UseTokensResult } from '../../../tokens/useTokens';
3
+ import type { PaletteTokens } from '../../../tokens/types';
4
+ import type { ButtonVariant, ButtonSemantic, ButtonSize } from './Button.types';
5
+ import type { TextSize } from '../../../primitives/Text/Text.types';
6
+
7
+ /**
8
+ * Configuration returned by getButtonConfig
9
+ */
10
+ export interface ButtonConfig {
11
+ variantColors: {
12
+ bg: string;
13
+ hoveredBg: string;
14
+ pressedBg: string;
15
+ textColor: string;
16
+ iconColor: string;
17
+ borderWidth: number;
18
+ borderColor?: string;
19
+ };
20
+ sizeTokens: {
21
+ padding: number;
22
+ gap: number;
23
+ borderRadius: number;
24
+ textSize: TextSize;
25
+ iconSize: number;
26
+ };
27
+ }
28
+
29
+ /**
30
+ * Padding object for asymmetric horizontal padding
31
+ */
32
+ export interface ButtonPadding {
33
+ paddingLeft: number;
34
+ paddingRight: number;
35
+ paddingTop: number;
36
+ paddingBottom: number;
37
+ }
38
+
39
+ /**
40
+ * Compute asymmetric button padding based on icon/text presence.
41
+ *
42
+ * Text appears visually closer to borders than icons, so we add 8px extra
43
+ * horizontal padding on the text side for optical balance.
44
+ *
45
+ * @param size - Button size (determines base padding)
46
+ * @param hasIcon - Whether button has an icon
47
+ * @param hasText - Whether button has text
48
+ * @param iconPosition - Icon position relative to text
49
+ * @returns Padding object with all four sides
50
+ */
51
+ export function computeButtonPadding(
52
+ size: ButtonSize,
53
+ hasIcon: boolean,
54
+ hasText: boolean,
55
+ iconPosition: 'left' | 'right'
56
+ ): ButtonPadding {
57
+ // Size-specific base padding
58
+ const basePadding: Record<ButtonSize, number> = {
59
+ sm: 8,
60
+ md: 12,
61
+ lg: 16,
62
+ };
63
+
64
+ const base = basePadding[size];
65
+ const textExtra = 8; // Optical correction for text vs icon
66
+
67
+ // Icon-only: square button
68
+ if (!hasText && hasIcon) {
69
+ return {
70
+ paddingLeft: base,
71
+ paddingRight: base,
72
+ paddingTop: base,
73
+ paddingBottom: base,
74
+ };
75
+ }
76
+
77
+ // Text-only: extra padding on both sides
78
+ if (hasText && !hasIcon) {
79
+ return {
80
+ paddingLeft: base + textExtra,
81
+ paddingRight: base + textExtra,
82
+ paddingTop: base,
83
+ paddingBottom: base,
84
+ };
85
+ }
86
+
87
+ // Icon + text: extra padding on text side only
88
+ if (hasText && hasIcon) {
89
+ if (iconPosition === 'left') {
90
+ return {
91
+ paddingLeft: base,
92
+ paddingRight: base + textExtra,
93
+ paddingTop: base,
94
+ paddingBottom: base,
95
+ };
96
+ } else {
97
+ return {
98
+ paddingLeft: base + textExtra,
99
+ paddingRight: base,
100
+ paddingTop: base,
101
+ paddingBottom: base,
102
+ };
103
+ }
104
+ }
105
+
106
+ // Fallback: symmetric base padding
107
+ return {
108
+ paddingLeft: base,
109
+ paddingRight: base,
110
+ paddingTop: base,
111
+ paddingBottom: base,
112
+ };
113
+ }
114
+
115
+ /**
116
+ * Resolve the PaletteTokens for a given semantic.
117
+ * Returns undefined for 'neutral' (handled separately).
118
+ */
119
+ function getPaletteTokens(semantic: ButtonSemantic, tokens: UseTokensResult): PaletteTokens | undefined {
120
+ switch (semantic) {
121
+ case 'accent': return tokens.accent;
122
+ case 'success': return tokens.success;
123
+ case 'error': return tokens.error;
124
+ case 'warning': return tokens.warning;
125
+ default: return undefined;
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Compute button configuration based on variant, semantic, size, and state.
131
+ *
132
+ * This function ONLY computes variant colors + size tokens.
133
+ * Layout concerns (flexbox, spacing, alignment) are handled by Wrapper primitive.
134
+ * Typography concerns (font, size, weight) are handled by Text primitive.
135
+ *
136
+ * Elevation-aware: neutral primary uses backgroundInteractive for consistent contrast.
137
+ * Semantic variants use proper PaletteTokens — no opacity hacks.
138
+ *
139
+ * @param variant - Button type (primary, secondary, tertiary)
140
+ * @param semantic - Button semantic meaning (neutral, accent, success, error, warning)
141
+ * @param size - Button size (sm, md, lg)
142
+ * @param disabled - Whether button is disabled
143
+ * @param tokens - Resolved tokens for current elevation
144
+ * @returns ButtonConfig with variantColors and sizeTokens
145
+ */
146
+ export function getButtonConfig(
147
+ variant: ButtonVariant,
148
+ semantic: ButtonSemantic,
149
+ size: ButtonSize,
150
+ disabled: boolean,
151
+ tokens: UseTokensResult
152
+ ): ButtonConfig {
153
+ // Get size configuration
154
+ const sizeConfig = getSizeConfig(size, tokens);
155
+
156
+ // Get variant-specific colors
157
+ const variantColors = getVariantColors(variant, semantic, disabled, tokens);
158
+
159
+ return {
160
+ variantColors,
161
+ sizeTokens: {
162
+ padding: sizeConfig.padding,
163
+ gap: sizeConfig.gap,
164
+ borderRadius: sizeConfig.borderRadius,
165
+ textSize: sizeConfig.textSize,
166
+ iconSize: sizeConfig.iconSize,
167
+ },
168
+ };
169
+ }
170
+
171
+ /**
172
+ * Get size configuration with unified icon/text sizes across all sizes.
173
+ * Only padding and radius scale with size.
174
+ */
175
+ function getSizeConfig(size: ButtonSize, tokens: UseTokensResult) {
176
+ const configs: Record<ButtonSize, {
177
+ padding: number;
178
+ gap: number;
179
+ borderRadius: number;
180
+ textSize: TextSize;
181
+ iconSize: number;
182
+ }> = {
183
+ sm: {
184
+ padding: 8,
185
+ gap: tokens.spacing['08'],
186
+ borderRadius: 8,
187
+ textSize: 'base', // 16px
188
+ iconSize: 24,
189
+ },
190
+ md: {
191
+ padding: 12,
192
+ gap: tokens.spacing['08'],
193
+ borderRadius: 12,
194
+ textSize: 'base', // 16px
195
+ iconSize: 24,
196
+ },
197
+ lg: {
198
+ padding: 16,
199
+ gap: tokens.spacing['08'],
200
+ borderRadius: 16,
201
+ textSize: 'base', // 16px
202
+ iconSize: 24,
203
+ },
204
+ };
205
+
206
+ return configs[size];
207
+ }
208
+
209
+ /**
210
+ * Get variant-specific colors from theme tokens.
211
+ * Handles disabled state override for all variants.
212
+ */
213
+ function getVariantColors(
214
+ variant: ButtonVariant,
215
+ semantic: ButtonSemantic,
216
+ disabled: boolean,
217
+ tokens: UseTokensResult
218
+ ) {
219
+ // Disabled state overrides for all variants
220
+ if (disabled) {
221
+ const baseColors = getVariantColorsForState(variant, semantic, tokens);
222
+ const disabledBg = srgbToHex(tokens.backgroundSunken.srgb);
223
+ return {
224
+ ...baseColors,
225
+ bg: disabledBg,
226
+ hoveredBg: disabledBg,
227
+ pressedBg: disabledBg,
228
+ textColor: srgbToHex(tokens.textSecondary.srgb),
229
+ iconColor: srgbToHex(tokens.textSecondary.srgb),
230
+ };
231
+ }
232
+
233
+ return getVariantColorsForState(variant, semantic, tokens);
234
+ }
235
+
236
+ /**
237
+ * Get variant colors for non-disabled state.
238
+ * Implements 3 types × 5 semantics = 15 combinations.
239
+ * Uses proper PaletteTokens for all semantic variants — no opacity hacks.
240
+ */
241
+ function getVariantColorsForState(
242
+ variant: ButtonVariant,
243
+ semantic: ButtonSemantic,
244
+ tokens: UseTokensResult
245
+ ) {
246
+ const paletteTokens = getPaletteTokens(semantic, tokens);
247
+
248
+ // PRIMARY VARIANT: Filled background
249
+ if (variant === 'primary') {
250
+ if (semantic === 'neutral') {
251
+ // Neutral primary - uses backgroundInteractive tokens for consistent contrast across elevations
252
+ return {
253
+ bg: srgbToHex(tokens.backgroundInteractive.srgb),
254
+ hoveredBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),
255
+ pressedBg: srgbToHex(tokens.backgroundInteractiveActive.srgb),
256
+ textColor: srgbToHex(tokens.textPrimary.srgb),
257
+ iconColor: srgbToHex(tokens.textPrimary.srgb),
258
+ borderWidth: 1,
259
+ borderColor: 'transparent',
260
+ };
261
+ }
262
+
263
+ // Semantic primary (accent, success, error, warning) — uses palette fill tokens
264
+ return {
265
+ bg: srgbToHex(paletteTokens!.fill.srgb),
266
+ hoveredBg: srgbToHex(paletteTokens!.fillHover.srgb),
267
+ pressedBg: srgbToHex(paletteTokens!.fillActive.srgb),
268
+ textColor: srgbToHex(paletteTokens!.onFill.srgb),
269
+ iconColor: srgbToHex(paletteTokens!.onFill.srgb),
270
+ borderWidth: 1,
271
+ borderColor: 'transparent',
272
+ };
273
+ }
274
+
275
+ // SECONDARY VARIANT: Outlined (border + subtle background for non-neutral)
276
+ if (variant === 'secondary') {
277
+ if (semantic === 'neutral') {
278
+ // Shifted action scale: transparent → 01 (hover) → 02 (pressed)
279
+ return {
280
+ bg: 'transparent',
281
+ hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),
282
+ pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),
283
+ textColor: srgbToHex(tokens.textPrimary.srgb),
284
+ iconColor: srgbToHex(tokens.textPrimary.srgb),
285
+ borderWidth: 1,
286
+ borderColor: srgbToHex(tokens.border.srgb),
287
+ };
288
+ }
289
+
290
+ // Semantic secondary — uses palette surface tokens for subtle bg
291
+ return {
292
+ bg: srgbToHex(paletteTokens!.background.srgb),
293
+ hoveredBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),
294
+ pressedBg: srgbToHex(paletteTokens!.backgroundInteractiveHover.srgb),
295
+ textColor: srgbToHex(paletteTokens!.fill.srgb),
296
+ iconColor: srgbToHex(paletteTokens!.fill.srgb),
297
+ borderWidth: 1,
298
+ borderColor: 'transparent',
299
+ };
300
+ }
301
+
302
+ // TERTIARY VARIANT: Ghost (text-only, no visible border)
303
+ if (variant === 'tertiary') {
304
+ if (semantic === 'neutral') {
305
+ // Shifted action scale: transparent → 01 (hover) → 02 (pressed)
306
+ return {
307
+ bg: 'transparent',
308
+ hoveredBg: srgbToHex(tokens.backgroundInteractive.srgb),
309
+ pressedBg: srgbToHex(tokens.backgroundInteractiveHover.srgb),
310
+ textColor: srgbToHex(tokens.textPrimary.srgb),
311
+ iconColor: srgbToHex(tokens.textPrimary.srgb),
312
+ borderWidth: 1,
313
+ borderColor: 'transparent',
314
+ };
315
+ }
316
+
317
+ // Semantic tertiary — uses palette surface tokens for hover/pressed
318
+ return {
319
+ bg: 'transparent',
320
+ hoveredBg: srgbToHex(paletteTokens!.background.srgb),
321
+ pressedBg: srgbToHex(paletteTokens!.backgroundInteractive.srgb),
322
+ textColor: srgbToHex(paletteTokens!.fill.srgb),
323
+ iconColor: srgbToHex(paletteTokens!.fill.srgb),
324
+ borderWidth: 1,
325
+ borderColor: 'transparent',
326
+ };
327
+ }
328
+
329
+ // Fallback (should never reach here with proper types)
330
+ return {
331
+ bg: 'transparent',
332
+ hoveredBg: 'transparent',
333
+ pressedBg: 'transparent',
334
+ textColor: srgbToHex(tokens.textPrimary.srgb),
335
+ iconColor: srgbToHex(tokens.textPrimary.srgb),
336
+ borderWidth: 0,
337
+ };
338
+ }
@@ -0,0 +1,119 @@
1
+ import React from 'react';
2
+ import { Pressable } from 'react-native';
3
+ import type { ButtonProps } from './Button.types';
4
+ import { getButtonConfig, computeButtonPadding } from './Button.styles';
5
+ import { useTokens } from '../../../tokens/useTokens';
6
+ import { Icon } from '../../../primitives/Icon/Icon';
7
+ import { Text } from '../../../primitives/Text/Text';
8
+ import { Wrapper } from '../../../primitives/Wrapper/Wrapper';
9
+
10
+ /**
11
+ * Button — A composite component demonstrating the primitive composition pattern.
12
+ *
13
+ * **Composition Architecture:**
14
+ * - Pressable (RN primitive) — handles interaction
15
+ * - Wrapper (primitive) — handles layout (direction, gap, padding, alignment)
16
+ * - Icon (primitive) — handles icon rendering with theme tokens
17
+ * - Text (primitive) — handles typography with theme tokens
18
+ *
19
+ * This component does NOT manually compute flexbox, spacing, or typography styles.
20
+ * Instead, it delegates to primitives which already handle these concerns.
21
+ *
22
+ * Automatically adapts to the current theme and mode from NewtoneProvider.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * <Button variant="primary" semantic="accent" size="md" onPress={() => console.log('Pressed')}>
27
+ * Click me
28
+ * </Button>
29
+ * ```
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <Button icon="add" variant="primary" semantic="accent" onPress={handleAdd}>
34
+ * New Item
35
+ * </Button>
36
+ * ```
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * <Button icon="delete" variant="tertiary" semantic="neutral" size="sm" onPress={handleDelete} />
41
+ * ```
42
+ */
43
+ export function Button({
44
+ children,
45
+ icon,
46
+ iconPosition = 'left',
47
+ variant = 'primary',
48
+ semantic = 'neutral',
49
+ size = 'md',
50
+ disabled = false,
51
+ style,
52
+ textStyle,
53
+ ...pressableProps
54
+ }: ButtonProps) {
55
+ // Read tokens from current elevation context
56
+ // backgroundInteractive provides consistent contrast across all elevations
57
+ const tokens = useTokens();
58
+
59
+ // Get color tokens + size config (now using backgroundInteractive for consistent contrast)
60
+ const { variantColors, sizeTokens } = React.useMemo(
61
+ () => getButtonConfig(variant, semantic, size, disabled, tokens),
62
+ [variant, semantic, size, disabled, tokens]
63
+ );
64
+
65
+ // Compute asymmetric padding (+8px on text side for optical balance)
66
+ const padding = React.useMemo(
67
+ () => computeButtonPadding(size, !!icon, !!children, iconPosition),
68
+ [size, icon, children, iconPosition]
69
+ );
70
+
71
+ return (
72
+ <Pressable disabled={disabled} {...pressableProps}>
73
+ {({ pressed, hovered }: { pressed: boolean; hovered?: boolean }) => (
74
+ // Wrapper handles layout: direction, gap, alignment (padding via style)
75
+ <Wrapper
76
+ direction="horizontal"
77
+ align="center"
78
+ justify="center"
79
+ gap={sizeTokens.gap}
80
+ style={[
81
+ {
82
+ ...padding, // Asymmetric horizontal padding for text optical balance
83
+ backgroundColor: pressed && !disabled
84
+ ? variantColors.pressedBg
85
+ : hovered && !disabled
86
+ ? variantColors.hoveredBg
87
+ : variantColors.bg,
88
+ borderRadius: sizeTokens.borderRadius,
89
+ borderWidth: variantColors.borderWidth, // Always 1 for consistent sizing
90
+ borderColor: variantColors.borderColor || 'transparent',
91
+ opacity: disabled ? 0.4 : 1,
92
+ },
93
+ ...(Array.isArray(style) ? style : style ? [style] : []),
94
+ ]}
95
+ >
96
+ {icon && iconPosition === 'left' && (
97
+ <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />
98
+ )}
99
+ {children && (
100
+ // Text primitive with semantic props + color style override
101
+ <Text
102
+ size={sizeTokens.textSize}
103
+ weight="semibold"
104
+ style={[
105
+ { color: variantColors.textColor },
106
+ ...(Array.isArray(textStyle) ? textStyle : textStyle ? [textStyle] : []),
107
+ ]}
108
+ >
109
+ {children}
110
+ </Text>
111
+ )}
112
+ {icon && iconPosition === 'right' && (
113
+ <Icon name={icon} size={sizeTokens.iconSize} color={variantColors.iconColor} />
114
+ )}
115
+ </Wrapper>
116
+ )}
117
+ </Pressable>
118
+ );
119
+ }
@@ -1,9 +1,14 @@
1
1
  import type { PressableProps, ViewStyle, TextStyle } from 'react-native';
2
2
 
3
3
  /**
4
- * Visual variants for the Button component
4
+ * Visual type for the Button component (describes visual weight)
5
5
  */
6
- export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline';
6
+ export type ButtonVariant = 'primary' | 'secondary' | 'tertiary';
7
+
8
+ /**
9
+ * Semantic meaning for the Button component (describes color purpose)
10
+ */
11
+ export type ButtonSemantic = 'neutral' | 'accent' | 'success' | 'error' | 'warning';
7
12
 
8
13
  /**
9
14
  * Size presets for the Button component
@@ -38,11 +43,17 @@ export interface ButtonProps extends Omit<PressableProps, 'children' | 'style'>
38
43
  readonly iconPosition?: ButtonIconPosition;
39
44
 
40
45
  /**
41
- * Visual variant
46
+ * Visual type (describes visual weight: filled, outlined, ghost)
42
47
  * @default 'primary'
43
48
  */
44
49
  readonly variant?: ButtonVariant;
45
50
 
51
+ /**
52
+ * Semantic meaning (describes color purpose: neutral, accent, success, error, warning)
53
+ * @default 'neutral'
54
+ */
55
+ readonly semantic?: ButtonSemantic;
56
+
46
57
  /**
47
58
  * Size preset
48
59
  * @default 'md'
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { srgbToHex } from 'newtone';
3
- import type { ResolvedTokens } from '../tokens/types';
3
+ import type { ResolvedTokens } from '../../../tokens/types';
4
4
 
5
5
  export function getSelectStyles(
6
6
  tokens: ResolvedTokens,
@@ -2,11 +2,11 @@ import React, { useMemo } from 'react';
2
2
  import { View, Text, Pressable, ScrollView } from 'react-native';
3
3
  import type { SelectProps, SelectOption } from './Select.types';
4
4
  import { isOptionGroup } from './Select.types';
5
- import { useTokens } from '../tokens/useTokens';
5
+ import { useTokens } from '../../../tokens/useTokens';
6
6
  import { getSelectStyles } from './Select.styles';
7
- import { Icon } from '../primitives/Icon/Icon';
8
- import { Popover } from '../Popover/Popover';
9
- import { usePopover } from '../Popover/usePopover';
7
+ import { Icon } from '../../../primitives/Icon/Icon';
8
+ import { Popover } from '../../overlays/Popover/Popover';
9
+ import { usePopover } from '../../overlays/Popover/usePopover';
10
10
  import { useSelect } from './useSelect';
11
11
  import { SelectOptionRow } from './SelectOption';
12
12
  import { srgbToHex } from 'newtone';
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { Pressable, Text, View } from 'react-native';
3
3
  import type { SelectOption as SelectOptionType, SelectProps } from './Select.types';
4
- import { useTokens } from '../tokens/useTokens';
5
- import { Icon } from '../primitives/Icon/Icon';
4
+ import { useTokens } from '../../../tokens/useTokens';
5
+ import { Icon } from '../../../primitives/Icon/Icon';
6
6
  import { srgbToHex } from 'newtone';
7
7
 
8
8
  interface SelectOptionRowProps {
@@ -80,7 +80,7 @@ export function SelectOptionRow({
80
80
  },
81
81
  isSelected && {
82
82
  fontWeight: tokens.typography.weight.semibold as any,
83
- color: srgbToHex(tokens.interactive.srgb),
83
+ color: srgbToHex(tokens.accent.fill.srgb),
84
84
  },
85
85
  option.disabled && {
86
86
  color: srgbToHex(tokens.textSecondary.srgb),
@@ -95,7 +95,7 @@ export function SelectOptionRow({
95
95
  <Icon
96
96
  name="check"
97
97
  size={fontSize}
98
- color={srgbToHex(tokens.interactive.srgb)}
98
+ color={srgbToHex(tokens.accent.fill.srgb)}
99
99
  />
100
100
  </View>
101
101
  )}
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { srgbToHex } from 'newtone';
3
- import type { ResolvedTokens } from '../tokens/types';
3
+ import type { ResolvedTokens } from '../../../tokens/types';
4
4
 
5
5
  export function getTextInputStyles(tokens: ResolvedTokens, disabled: boolean) {
6
6
  return StyleSheet.create({
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { View, Text, TextInput as RNTextInput } from 'react-native';
3
3
  import type { TextInputProps } from './TextInput.types';
4
- import { useTokens } from '../tokens/useTokens';
4
+ import { useTokens } from '../../../tokens/useTokens';
5
5
  import { getTextInputStyles } from './TextInput.styles';
6
6
  import { srgbToHex } from 'newtone';
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { srgbToHex } from 'newtone';
3
- import type { ResolvedTokens } from '../tokens/types';
3
+ import type { ResolvedTokens } from '../../../tokens/types';
4
4
 
5
5
  const TRACK_WIDTH = 40;
6
6
  const TRACK_HEIGHT = 22;
@@ -30,7 +30,7 @@ export function getToggleStyles(
30
30
  height: TRACK_HEIGHT,
31
31
  borderRadius: TRACK_HEIGHT / 2,
32
32
  backgroundColor: value
33
- ? srgbToHex(tokens.interactive.srgb)
33
+ ? srgbToHex(tokens.accent.fill.srgb)
34
34
  : srgbToHex(tokens.border.srgb),
35
35
  justifyContent: 'center',
36
36
  paddingHorizontal: THUMB_OFFSET,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { View, Text, Pressable } from 'react-native';
3
3
  import type { ToggleProps } from './Toggle.types';
4
- import { useTokens } from '../tokens/useTokens';
4
+ import { useTokens } from '../../../tokens/useTokens';
5
5
  import { getToggleStyles } from './Toggle.styles';
6
6
 
7
7
  export function Toggle({
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { srgbToHex } from 'newtone';
3
- import type { ResolvedTokens } from '../tokens/types';
3
+ import type { ResolvedTokens } from '../../../tokens/types';
4
4
 
5
5
  export function getAppShellStyles(tokens: ResolvedTokens) {
6
6
  return StyleSheet.create({
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { View } from 'react-native';
3
3
  import type { AppShellProps } from './AppShell.types';
4
- import { useTokens } from '../tokens/useTokens';
4
+ import { useTokens } from '../../../tokens/useTokens';
5
5
  import { getAppShellStyles } from './AppShell.styles';
6
6
 
7
7
  export function AppShell({ sidebar, children }: AppShellProps) {
@@ -1,6 +1,6 @@
1
1
  import { StyleSheet } from 'react-native';
2
2
  import { srgbToHex } from 'newtone';
3
- import type { ResolvedTokens } from '../tokens/types';
3
+ import type { ResolvedTokens } from '../../../tokens/types';
4
4
 
5
5
  export function getCardStyles(tokens: ResolvedTokens, disabled: boolean) {
6
6
  return StyleSheet.create({