zero-to-app 3.2.1 → 3.2.3

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 (213) hide show
  1. package/dist/brand/brand-config.d.ts +65 -0
  2. package/dist/brand/brand-config.d.ts.map +1 -0
  3. package/dist/brand/brand-config.js +68 -0
  4. package/dist/brand/brand-config.js.map +1 -0
  5. package/dist/brand/brand-context.d.ts +55 -0
  6. package/dist/brand/brand-context.d.ts.map +1 -0
  7. package/dist/brand/brand-context.js +76 -0
  8. package/dist/brand/brand-context.js.map +1 -0
  9. package/dist/brand/brand-types.d.ts +92 -0
  10. package/dist/brand/brand-types.d.ts.map +1 -0
  11. package/dist/brand/brand-types.js +2 -0
  12. package/dist/brand/brand-types.js.map +1 -0
  13. package/dist/brand/default-brand.d.ts +11 -0
  14. package/dist/brand/default-brand.d.ts.map +1 -0
  15. package/dist/brand/default-brand.js +32 -0
  16. package/dist/brand/default-brand.js.map +1 -0
  17. package/dist/brand/index.d.ts +6 -0
  18. package/dist/brand/index.d.ts.map +1 -0
  19. package/dist/brand/index.js +8 -0
  20. package/dist/brand/index.js.map +1 -0
  21. package/dist/brand/palette-generator.d.ts +64 -0
  22. package/dist/brand/palette-generator.d.ts.map +1 -0
  23. package/dist/brand/palette-generator.js +291 -0
  24. package/dist/brand/palette-generator.js.map +1 -0
  25. package/dist/components/index.d.ts +3 -0
  26. package/dist/components/index.d.ts.map +1 -0
  27. package/dist/components/index.js +3 -0
  28. package/dist/components/index.js.map +1 -0
  29. package/dist/components/navigation/app-tabs/app-tabs.d.ts +63 -0
  30. package/dist/components/navigation/app-tabs/app-tabs.d.ts.map +1 -0
  31. package/dist/components/navigation/app-tabs/app-tabs.js +13 -0
  32. package/dist/components/navigation/app-tabs/app-tabs.js.map +1 -0
  33. package/dist/components/navigation/app-tabs/app-tabs.web.d.ts +47 -0
  34. package/dist/components/navigation/app-tabs/app-tabs.web.d.ts.map +1 -0
  35. package/dist/components/navigation/app-tabs/app-tabs.web.js +104 -0
  36. package/dist/components/navigation/app-tabs/app-tabs.web.js.map +1 -0
  37. package/dist/components/navigation/app-tabs/index.d.ts +3 -0
  38. package/dist/components/navigation/app-tabs/index.d.ts.map +1 -0
  39. package/dist/components/navigation/app-tabs/index.js +3 -0
  40. package/dist/components/navigation/app-tabs/index.js.map +1 -0
  41. package/dist/components/navigation/drawer/drawer.d.ts +24 -0
  42. package/dist/components/navigation/drawer/drawer.d.ts.map +1 -0
  43. package/dist/components/navigation/drawer/drawer.js +82 -0
  44. package/dist/components/navigation/drawer/drawer.js.map +1 -0
  45. package/dist/components/navigation/index.d.ts +10 -0
  46. package/dist/components/navigation/index.d.ts.map +1 -0
  47. package/dist/components/navigation/index.js +11 -0
  48. package/dist/components/navigation/index.js.map +1 -0
  49. package/dist/components/navigation/native-header.d.ts +25 -0
  50. package/dist/components/navigation/native-header.d.ts.map +1 -0
  51. package/dist/components/navigation/native-header.js +32 -0
  52. package/dist/components/navigation/native-header.js.map +1 -0
  53. package/dist/components/navigation/shared/sidebar-styles.d.ts +34 -0
  54. package/dist/components/navigation/shared/sidebar-styles.d.ts.map +1 -0
  55. package/dist/components/navigation/shared/sidebar-styles.js +34 -0
  56. package/dist/components/navigation/shared/sidebar-styles.js.map +1 -0
  57. package/dist/components/navigation/sidebar/index.d.ts +10 -0
  58. package/dist/components/navigation/sidebar/index.d.ts.map +1 -0
  59. package/dist/components/navigation/sidebar/index.js +7 -0
  60. package/dist/components/navigation/sidebar/index.js.map +1 -0
  61. package/dist/components/navigation/sidebar/sidebar-footer.d.ts +18 -0
  62. package/dist/components/navigation/sidebar/sidebar-footer.d.ts.map +1 -0
  63. package/dist/components/navigation/sidebar/sidebar-footer.js +27 -0
  64. package/dist/components/navigation/sidebar/sidebar-footer.js.map +1 -0
  65. package/dist/components/navigation/sidebar/sidebar-header.d.ts +26 -0
  66. package/dist/components/navigation/sidebar/sidebar-header.d.ts.map +1 -0
  67. package/dist/components/navigation/sidebar/sidebar-header.js +38 -0
  68. package/dist/components/navigation/sidebar/sidebar-header.js.map +1 -0
  69. package/dist/components/navigation/sidebar/sidebar-item.d.ts +36 -0
  70. package/dist/components/navigation/sidebar/sidebar-item.d.ts.map +1 -0
  71. package/dist/components/navigation/sidebar/sidebar-item.js +63 -0
  72. package/dist/components/navigation/sidebar/sidebar-item.js.map +1 -0
  73. package/dist/components/navigation/sidebar/sidebar-section.d.ts +34 -0
  74. package/dist/components/navigation/sidebar/sidebar-section.d.ts.map +1 -0
  75. package/dist/components/navigation/sidebar/sidebar-section.js +56 -0
  76. package/dist/components/navigation/sidebar/sidebar-section.js.map +1 -0
  77. package/dist/components/navigation/sidebar/sidebar.d.ts +2 -0
  78. package/dist/components/navigation/sidebar/sidebar.d.ts.map +1 -0
  79. package/dist/components/navigation/sidebar/sidebar.js +4 -0
  80. package/dist/components/navigation/sidebar/sidebar.js.map +1 -0
  81. package/dist/components/navigation/sidebar/sidebar.native.d.ts +23 -0
  82. package/dist/components/navigation/sidebar/sidebar.native.d.ts.map +1 -0
  83. package/dist/components/navigation/sidebar/sidebar.native.js +80 -0
  84. package/dist/components/navigation/sidebar/sidebar.native.js.map +1 -0
  85. package/dist/components/navigation/sidebar/sidebar.web.d.ts +26 -0
  86. package/dist/components/navigation/sidebar/sidebar.web.d.ts.map +1 -0
  87. package/dist/components/navigation/sidebar/sidebar.web.js +90 -0
  88. package/dist/components/navigation/sidebar/sidebar.web.js.map +1 -0
  89. package/dist/components/navigation/themed-stack.d.ts +25 -0
  90. package/dist/components/navigation/themed-stack.d.ts.map +1 -0
  91. package/dist/components/navigation/themed-stack.js +37 -0
  92. package/dist/components/navigation/themed-stack.js.map +1 -0
  93. package/dist/components/shared/index.d.ts +3 -0
  94. package/dist/components/shared/index.d.ts.map +1 -0
  95. package/dist/components/shared/index.js +2 -0
  96. package/dist/components/shared/index.js.map +1 -0
  97. package/dist/components/shared/types.d.ts +82 -0
  98. package/dist/components/shared/types.d.ts.map +1 -0
  99. package/dist/components/shared/types.js +2 -0
  100. package/dist/components/shared/types.js.map +1 -0
  101. package/dist/components/shared/utils.d.ts +19 -0
  102. package/dist/components/shared/utils.d.ts.map +1 -0
  103. package/dist/components/shared/utils.js +23 -0
  104. package/dist/components/shared/utils.js.map +1 -0
  105. package/dist/components/ui/button.d.ts +132 -0
  106. package/dist/components/ui/button.d.ts.map +1 -0
  107. package/dist/components/ui/button.js +252 -0
  108. package/dist/components/ui/button.js.map +1 -0
  109. package/dist/components/ui/chip.d.ts +88 -0
  110. package/dist/components/ui/chip.d.ts.map +1 -0
  111. package/dist/components/ui/chip.js +129 -0
  112. package/dist/components/ui/chip.js.map +1 -0
  113. package/dist/components/ui/collapsible.d.ts +88 -0
  114. package/dist/components/ui/collapsible.d.ts.map +1 -0
  115. package/dist/components/ui/collapsible.js +66 -0
  116. package/dist/components/ui/collapsible.js.map +1 -0
  117. package/dist/components/ui/container.d.ts +31 -0
  118. package/dist/components/ui/container.d.ts.map +1 -0
  119. package/dist/components/ui/container.js +46 -0
  120. package/dist/components/ui/container.js.map +1 -0
  121. package/dist/components/ui/fab.d.ts +51 -0
  122. package/dist/components/ui/fab.d.ts.map +1 -0
  123. package/dist/components/ui/fab.js +142 -0
  124. package/dist/components/ui/fab.js.map +1 -0
  125. package/dist/components/ui/index.d.ts +23 -0
  126. package/dist/components/ui/index.d.ts.map +1 -0
  127. package/dist/components/ui/index.js +22 -0
  128. package/dist/components/ui/index.js.map +1 -0
  129. package/dist/components/ui/screen.d.ts +40 -0
  130. package/dist/components/ui/screen.d.ts.map +1 -0
  131. package/dist/components/ui/screen.js +57 -0
  132. package/dist/components/ui/screen.js.map +1 -0
  133. package/dist/components/ui/slider.d.ts +47 -0
  134. package/dist/components/ui/slider.d.ts.map +1 -0
  135. package/dist/components/ui/slider.js +41 -0
  136. package/dist/components/ui/slider.js.map +1 -0
  137. package/dist/components/ui/themed-image.d.ts +7 -0
  138. package/dist/components/ui/themed-image.d.ts.map +1 -0
  139. package/dist/components/ui/themed-image.js +9 -0
  140. package/dist/components/ui/themed-image.js.map +1 -0
  141. package/dist/components/ui/themed-view.d.ts +20 -0
  142. package/dist/components/ui/themed-view.d.ts.map +1 -0
  143. package/dist/components/ui/themed-view.js +75 -0
  144. package/dist/components/ui/themed-view.js.map +1 -0
  145. package/dist/components/ui/typography.d.ts +110 -0
  146. package/dist/components/ui/typography.d.ts.map +1 -0
  147. package/dist/components/ui/typography.js +69 -0
  148. package/dist/components/ui/typography.js.map +1 -0
  149. package/dist/context/layout-context.d.ts +66 -0
  150. package/dist/context/layout-context.d.ts.map +1 -0
  151. package/dist/context/layout-context.js +83 -0
  152. package/dist/context/layout-context.js.map +1 -0
  153. package/dist/context/scroll-context.d.ts +8 -0
  154. package/dist/context/scroll-context.d.ts.map +1 -0
  155. package/dist/context/scroll-context.js +16 -0
  156. package/dist/context/scroll-context.js.map +1 -0
  157. package/dist/context/sidebar-context.d.ts +74 -0
  158. package/dist/context/sidebar-context.d.ts.map +1 -0
  159. package/dist/context/sidebar-context.js +95 -0
  160. package/dist/context/sidebar-context.js.map +1 -0
  161. package/dist/hooks/index.d.ts +4 -0
  162. package/dist/hooks/index.d.ts.map +1 -0
  163. package/dist/hooks/index.js +5 -0
  164. package/dist/hooks/index.js.map +1 -0
  165. package/dist/hooks/use-breakpoint.d.ts +8 -0
  166. package/dist/hooks/use-breakpoint.d.ts.map +1 -0
  167. package/dist/hooks/use-breakpoint.js +10 -0
  168. package/dist/hooks/use-breakpoint.js.map +1 -0
  169. package/dist/hooks/use-dimensions.d.ts +31 -0
  170. package/dist/hooks/use-dimensions.d.ts.map +1 -0
  171. package/dist/hooks/use-dimensions.js +44 -0
  172. package/dist/hooks/use-dimensions.js.map +1 -0
  173. package/dist/hooks/use-route-navigation.d.ts +19 -0
  174. package/dist/hooks/use-route-navigation.d.ts.map +1 -0
  175. package/dist/hooks/use-route-navigation.js +25 -0
  176. package/dist/hooks/use-route-navigation.js.map +1 -0
  177. package/dist/icons/icon-utils.d.ts +24 -0
  178. package/dist/icons/icon-utils.d.ts.map +1 -0
  179. package/dist/icons/icon-utils.js +57 -0
  180. package/dist/icons/icon-utils.js.map +1 -0
  181. package/dist/icons/index.d.ts +13 -0
  182. package/dist/icons/index.d.ts.map +1 -0
  183. package/dist/icons/index.js +12 -0
  184. package/dist/icons/index.js.map +1 -0
  185. package/dist/index.d.ts +9 -0
  186. package/dist/index.d.ts.map +1 -0
  187. package/dist/index.js +12 -0
  188. package/dist/index.js.map +1 -0
  189. package/dist/theme/high-contrast-theme.d.ts +19 -0
  190. package/dist/theme/high-contrast-theme.d.ts.map +1 -0
  191. package/dist/theme/high-contrast-theme.js +257 -0
  192. package/dist/theme/high-contrast-theme.js.map +1 -0
  193. package/dist/theme/index.d.ts +5 -0
  194. package/dist/theme/index.d.ts.map +1 -0
  195. package/dist/theme/index.js +6 -0
  196. package/dist/theme/index.js.map +1 -0
  197. package/dist/theme/theme-config.d.ts +150 -0
  198. package/dist/theme/theme-config.d.ts.map +1 -0
  199. package/dist/theme/theme-config.js +318 -0
  200. package/dist/theme/theme-config.js.map +1 -0
  201. package/dist/theme/theme.d.ts +106 -0
  202. package/dist/theme/theme.d.ts.map +1 -0
  203. package/dist/theme/theme.js +135 -0
  204. package/dist/theme/theme.js.map +1 -0
  205. package/dist/utils/contrast-checker.d.ts +51 -0
  206. package/dist/utils/contrast-checker.d.ts.map +1 -0
  207. package/dist/utils/contrast-checker.js +97 -0
  208. package/dist/utils/contrast-checker.js.map +1 -0
  209. package/dist/utils/index.d.ts +2 -0
  210. package/dist/utils/index.d.ts.map +1 -0
  211. package/dist/utils/index.js +3 -0
  212. package/dist/utils/index.js.map +1 -0
  213. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ import type { BaseComponentProps } from '../shared/types';
2
+ /**
3
+ * Props for the Slider component.
4
+ *
5
+ * @example
6
+ * ```tsx
7
+ * // Basic slider
8
+ * <Slider value={0.5} onValueChange={setValue} />
9
+ *
10
+ * // With step and range
11
+ * <Slider value={volume} minimumValue={0} maximumValue={100} step={10} onValueChange={setVolume} />
12
+ *
13
+ * // Controlled with complete callback
14
+ * <Slider value={value} onValueChange={setValue} onSlidingComplete={onCommit} />
15
+ * ```
16
+ */
17
+ export interface SliderProps extends BaseComponentProps {
18
+ /** Current value of the slider */
19
+ value?: number;
20
+ /** Minimum value. @default 0 */
21
+ minimumValue?: number;
22
+ /** Maximum value. @default 1 */
23
+ maximumValue?: number;
24
+ /** Step increment between values. @default 0 (continuous) */
25
+ step?: number;
26
+ /** Called continuously as the slider moves */
27
+ onValueChange?: (value: number) => void;
28
+ /** Called when the user finishes sliding */
29
+ onSlidingComplete?: (value: number) => void;
30
+ /** Whether the slider is disabled */
31
+ disabled?: boolean;
32
+ /** Accessibility label read by screen readers */
33
+ accessibilityLabel?: string;
34
+ }
35
+ /**
36
+ * Material Design 3 Slider component
37
+ * https://m3.material.io/components/sliders
38
+ *
39
+ * Wraps @react-native-community/slider with M3 theme colors.
40
+ * Active track: primary. Inactive track: surfaceContainerHighest. Thumb: primary.
41
+ */
42
+ declare const Slider: {
43
+ ({ value, minimumValue, maximumValue, step, onValueChange, onSlidingComplete, disabled, style, testID, accessibilityLabel, }: SliderProps): import("react/jsx-runtime").JSX.Element;
44
+ displayName: string;
45
+ };
46
+ export { Slider };
47
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../components/ui/slider.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;GAMG;AACH,QAAA,MAAM,MAAM;kIAWT,WAAW;;CA6Bb,CAAC;AAgBF,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { View, StyleSheet } from 'react-native';
3
+ import { useTheme } from '../../theme';
4
+ let RNSlider = null;
5
+ try {
6
+ RNSlider = require('@react-native-community/slider').default;
7
+ }
8
+ catch {
9
+ // optional peer dependency not installed
10
+ }
11
+ // 3. COMPONENT
12
+ /**
13
+ * Material Design 3 Slider component
14
+ * https://m3.material.io/components/sliders
15
+ *
16
+ * Wraps @react-native-community/slider with M3 theme colors.
17
+ * Active track: primary. Inactive track: surfaceContainerHighest. Thumb: primary.
18
+ */
19
+ const Slider = ({ value = 0, minimumValue = 0, maximumValue = 1, step = 0, onValueChange, onSlidingComplete, disabled = false, style, testID, accessibilityLabel, }) => {
20
+ if (!RNSlider) {
21
+ throw new Error('[zero-to-app] <Slider> requires @react-native-community/slider. ' +
22
+ 'Install it with: npx expo install @react-native-community/slider');
23
+ }
24
+ const theme = useTheme();
25
+ const t = theme.tokens.slider;
26
+ return (_jsx(View, { style: [styles.container, style], testID: testID, children: _jsx(RNSlider, { value: value, minimumValue: minimumValue, maximumValue: maximumValue, step: step, disabled: disabled, onValueChange: onValueChange, onSlidingComplete: onSlidingComplete, minimumTrackTintColor: disabled ? theme.onSurfaceVariant : t.activeTrack, maximumTrackTintColor: t.inactiveTrack, thumbTintColor: disabled ? theme.onSurfaceVariant : t.thumb, style: styles.slider, accessibilityLabel: accessibilityLabel }) }));
27
+ };
28
+ Slider.displayName = 'Slider';
29
+ // 4. STYLES
30
+ const styles = StyleSheet.create({
31
+ container: {
32
+ width: '100%',
33
+ },
34
+ slider: {
35
+ width: '100%',
36
+ height: 40,
37
+ },
38
+ });
39
+ // 5. EXPORTS
40
+ export { Slider };
41
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.js","sourceRoot":"","sources":["../../../components/ui/slider.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,IAAI,QAAQ,GAAoC,IAAI,CAAC;AACrD,IAAI,CAAC;IACH,QAAQ,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC,OAAO,CAAC;AAC/D,CAAC;AAAC,MAAM,CAAC;IACP,yCAAyC;AAC3C,CAAC;AAuCD,eAAe;AAEf;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,CAAC,EACd,KAAK,GAAG,CAAC,EACT,YAAY,GAAG,CAAC,EAChB,YAAY,GAAG,CAAC,EAChB,IAAI,GAAG,CAAC,EACR,aAAa,EACb,iBAAiB,EACjB,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,MAAM,EACN,kBAAkB,GACN,EAAE,EAAE;IAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,kEAAkE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAE9B,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,YACpD,KAAC,QAAQ,IACP,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EACxE,qBAAqB,EAAE,CAAC,CAAC,aAAa,EACtC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAC3D,KAAK,EAAE,MAAM,CAAC,MAAM,EACpB,kBAAkB,EAAE,kBAAkB,GACtC,GACG,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;AAE9B,YAAY;AACZ,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,KAAK,EAAE,MAAM;KACd;IACD,MAAM,EAAE;QACN,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,EAAE;KACX;CACF,CAAC,CAAC;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ImageProps, ImageSource } from 'expo-image';
2
+ export interface ThemedImageProps extends Omit<ImageProps, 'source'> {
3
+ lightSource: ImageSource;
4
+ darkSource: ImageSource;
5
+ }
6
+ export declare function ThemedImage({ lightSource, darkSource, ...props }: ThemedImageProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=themed-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themed-image.d.ts","sourceRoot":"","sources":["../../../components/ui/themed-image.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;IAClE,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAKlF"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Image } from 'expo-image';
3
+ import { useThemeMode } from '../../theme';
4
+ export function ThemedImage({ lightSource, darkSource, ...props }) {
5
+ const { mode } = useThemeMode();
6
+ const source = mode === 'dark' ? darkSource : lightSource;
7
+ return _jsx(Image, { source: source, ...props });
8
+ }
9
+ //# sourceMappingURL=themed-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themed-image.js","sourceRoot":"","sources":["../../../components/ui/themed-image.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAA2B,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,UAAU,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,EAAoB;IACjF,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAE1D,OAAO,KAAC,KAAK,IAAC,MAAM,EAAE,MAAM,KAAM,KAAK,GAAI,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type ViewProps } from 'react-native';
2
+ export type ThemedViewVariant = 'surface' | 'surfaceContainer' | 'card' | 'appbar' | 'primary' | 'background';
3
+ export interface ThemedViewProps extends ViewProps {
4
+ /** Variant selects a semantic background from the theme */
5
+ variant?: ThemedViewVariant;
6
+ /** Override with a specific color */
7
+ color?: string;
8
+ /** Apply border radius from theme. @default true */
9
+ rounded?: boolean;
10
+ /** Number of columns on medium+ screens (1 column on small). Enables responsive grid layout. */
11
+ columns?: number;
12
+ /** Gap between items when columns is set */
13
+ gap?: number;
14
+ }
15
+ export declare const ThemedView: {
16
+ ({ variant, color, rounded, columns, gap, style, children, onLayout, ...rest }: ThemedViewProps): import("react/jsx-runtime").JSX.Element;
17
+ displayName: string;
18
+ };
19
+ export default ThemedView;
20
+ //# sourceMappingURL=themed-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themed-view.d.ts","sourceRoot":"","sources":["../../../components/ui/themed-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAA0C,MAAM,cAAc,CAAC;AAIlH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9G,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,2DAA2D;IAC3D,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,UAAU;oFAAsG,eAAe;;CAkF3I,CAAC;AAIF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { useState } from 'react';
3
+ import { View, Platform, StyleSheet } from 'react-native';
4
+ import { useTheme } from '../../theme';
5
+ import { useDimensions, breakpoints } from '../../hooks';
6
+ export const ThemedView = ({ variant = 'surface', color, rounded = true, columns, gap, style, children, onLayout, ...rest }) => {
7
+ const theme = useTheme();
8
+ const { width } = useDimensions();
9
+ const isMid = width >= breakpoints.medium;
10
+ const [containerWidth, setContainerWidth] = useState(0);
11
+ const variantMap = {
12
+ surface: theme.surface,
13
+ surfaceContainer: theme.surfaceContainer ?? theme.surface,
14
+ card: theme.tokens.card.background,
15
+ appbar: theme.tokens.appbar.background,
16
+ primary: theme.primary,
17
+ background: theme.surface,
18
+ };
19
+ const backgroundColor = color ?? variantMap[variant] ?? theme.surface;
20
+ const viewStyle = [
21
+ { backgroundColor },
22
+ ...(rounded ? [{ borderRadius: theme.shape.surfaceBorderRadius }] : []),
23
+ ];
24
+ // Handle responsive grid layout
25
+ if (columns && columns > 1) {
26
+ // Resolve gap from prop, falling back to gap in style
27
+ const flatStyle = style ? StyleSheet.flatten(style) : undefined;
28
+ const effectiveGap = gap ?? flatStyle?.gap ?? 0;
29
+ const gapOffset = effectiveGap * (columns - 1) / columns;
30
+ const containerStyle = {
31
+ flexDirection: 'row',
32
+ flexWrap: 'wrap',
33
+ gap: effectiveGap,
34
+ };
35
+ const handleLayout = (e) => {
36
+ setContainerWidth(e.nativeEvent.layout.width);
37
+ onLayout?.(e);
38
+ };
39
+ const responsiveChildren = React.Children.map(children, (child) => {
40
+ if (!React.isValidElement(child))
41
+ return child;
42
+ let itemStyle;
43
+ if (!isMid) {
44
+ // Small screens: single column
45
+ itemStyle = { width: '100%' };
46
+ }
47
+ else if (Platform.OS === 'web') {
48
+ // Web: use calc() for precise sizing
49
+ itemStyle = {
50
+ flexBasis: `calc(${100 / columns}% - ${gapOffset}px)`,
51
+ flexGrow: 0,
52
+ flexShrink: 0,
53
+ maxWidth: `calc(${100 / columns}% - ${gapOffset}px)`,
54
+ };
55
+ }
56
+ else if (containerWidth > 0) {
57
+ // Native: use measured width for pixel-perfect sizing
58
+ const itemWidth = (containerWidth - effectiveGap * (columns - 1)) / columns;
59
+ itemStyle = { width: itemWidth, flexGrow: 0, flexShrink: 0 };
60
+ }
61
+ else {
62
+ // Native fallback before layout measurement
63
+ itemStyle = { flexBasis: `${Math.floor(100 / columns)}%`, flexShrink: 1 };
64
+ }
65
+ return React.cloneElement(child, {
66
+ style: [child.props.style, itemStyle],
67
+ });
68
+ });
69
+ return (_jsx(View, { style: [viewStyle, containerStyle, style], onLayout: handleLayout, ...rest, children: responsiveChildren }));
70
+ }
71
+ return (_jsx(View, { style: [viewStyle, style], onLayout: onLayout, ...rest, children: children }));
72
+ };
73
+ ThemedView.displayName = 'ThemedView';
74
+ export default ThemedView;
75
+ //# sourceMappingURL=themed-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themed-view.js","sourceRoot":"","sources":["../../../components/ui/themed-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import React from 'react';
2
+ import { Text, type TextStyle, type StyleProp, type TextProps as RNTextProps } from 'react-native';
3
+ /**
4
+ * Material Design 3 typography variants.
5
+ *
6
+ * **Display** (57-36px): Hero text, large promotional content
7
+ * **Headline** (32-24px): Page titles, section headers
8
+ * **Title** (22-14px): Card titles, list headers
9
+ * **Body** (16-12px): Main content text
10
+ * **Label** (14-11px): Buttons, captions, metadata
11
+ */
12
+ export type TypographyVariant = 'displayLarge' | 'displayMedium' | 'displaySmall' | 'headlineLarge' | 'headlineMedium' | 'headlineSmall' | 'titleLarge' | 'titleMedium' | 'titleSmall' | 'bodyLarge' | 'bodyMedium' | 'bodySmall' | 'labelLarge' | 'labelMedium' | 'labelSmall';
13
+ /**
14
+ * Font weight options.
15
+ * Can use semantic names or numeric values (100-900).
16
+ */
17
+ export type TypographyWeight = 'light' | 'regular' | 'medium' | 'bold' | number;
18
+ /** Text alignment options */
19
+ export type TypographyAlign = 'left' | 'center' | 'right' | 'justify';
20
+ /**
21
+ * Props for the Typography component.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * // Basic usage with default body text
26
+ * <Typography>Hello, world!</Typography>
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * // Page title
32
+ * <Typography variant="headlineLarge" weight="bold">
33
+ * Welcome Back
34
+ * </Typography>
35
+ * ```
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * // Card title with custom color
40
+ * <Typography variant="titleMedium" color="#6750A4">
41
+ * Featured Article
42
+ * </Typography>
43
+ * ```
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * // Muted secondary text
48
+ * <Typography variant="bodySmall" muted>
49
+ * Last updated 2 hours ago
50
+ * </Typography>
51
+ * ```
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * // Button label (uppercase)
56
+ * <Typography variant="labelLarge" weight="medium" uppercase>
57
+ * Submit
58
+ * </Typography>
59
+ * ```
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * // Centered hero text
64
+ * <Typography variant="displayMedium" align="center">
65
+ * Build Something Amazing
66
+ * </Typography>
67
+ * ```
68
+ */
69
+ export interface TypographyProps extends Omit<RNTextProps, 'style'> {
70
+ /** Text content to render */
71
+ children: React.ReactNode;
72
+ /**
73
+ * Typography scale variant following M3 type system.
74
+ * @default 'bodyMedium'
75
+ */
76
+ variant?: TypographyVariant;
77
+ /**
78
+ * Font weight. Use semantic names or numeric values.
79
+ * @default 'regular'
80
+ */
81
+ weight?: TypographyWeight;
82
+ /**
83
+ * Text alignment.
84
+ * @default 'left'
85
+ */
86
+ align?: TypographyAlign;
87
+ /**
88
+ * Custom text color. Defaults to theme's `onSurface` color.
89
+ */
90
+ color?: string;
91
+ /**
92
+ * Transform text to uppercase.
93
+ * @default false
94
+ */
95
+ uppercase?: boolean;
96
+ /**
97
+ * Apply muted styling using theme's `onSurfaceVariant` color.
98
+ * Useful for secondary or supporting text.
99
+ * @default false
100
+ */
101
+ muted?: boolean;
102
+ /** Additional text styles to merge */
103
+ style?: StyleProp<TextStyle>;
104
+ }
105
+ /**
106
+ * Typography component following Material Design 3 type system
107
+ * https://m3.material.io/styles/typography/type-scale-tokens
108
+ */
109
+ export declare const Typography: React.ForwardRefExoticComponent<TypographyProps & React.RefAttributes<Text>>;
110
+ //# sourceMappingURL=typography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography.d.ts","sourceRoot":"","sources":["../../../components/ui/typography.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAAc,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,IAAI,WAAW,EAAE,MAAM,cAAc,CAAC;AAG/G;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,eAAe,GACf,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,aAAa,GACb,YAAY,CAAC;AAEjB;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhF,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IACjE,6BAA6B;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,8EAqFtB,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useMemo } from 'react';
3
+ import { StyleSheet, Text } from 'react-native';
4
+ import { useTheme } from '../../theme';
5
+ /**
6
+ * Typography component following Material Design 3 type system
7
+ * https://m3.material.io/styles/typography/type-scale-tokens
8
+ */
9
+ export const Typography = forwardRef(({ children, variant = 'bodyMedium', weight = 'regular', align = 'left', color, uppercase = false, muted = false, style, numberOfLines, accessibilityRole, ...rest }, ref) => {
10
+ const theme = useTheme();
11
+ const textStyle = useMemo(() => {
12
+ const tokens = theme.tokens.typography;
13
+ // Resolve font size from variant
14
+ const fontSize = tokens[variant] ?? tokens.bodyMedium;
15
+ // Resolve font weight
16
+ let fontWeight;
17
+ if (typeof weight === 'number') {
18
+ fontWeight = weight;
19
+ }
20
+ else {
21
+ switch (weight) {
22
+ case 'light':
23
+ fontWeight = tokens.weightLight;
24
+ break;
25
+ case 'medium':
26
+ fontWeight = tokens.weightMedium;
27
+ break;
28
+ case 'bold':
29
+ fontWeight = tokens.weightBold;
30
+ break;
31
+ case 'regular':
32
+ default:
33
+ fontWeight = tokens.weightRegular;
34
+ break;
35
+ }
36
+ }
37
+ // Resolve color
38
+ const textColor = muted
39
+ ? theme.onSurfaceVariant
40
+ : color ?? theme.onSurface;
41
+ // Compute line height based on variant
42
+ let lineHeight;
43
+ if (variant.startsWith('display') || variant.startsWith('headline')) {
44
+ lineHeight = fontSize * tokens.lineHeightTight;
45
+ }
46
+ else if (variant.startsWith('title')) {
47
+ lineHeight = fontSize * tokens.lineHeightNormal;
48
+ }
49
+ else {
50
+ lineHeight = fontSize * tokens.lineHeightNormal;
51
+ }
52
+ return {
53
+ fontSize,
54
+ fontWeight,
55
+ lineHeight,
56
+ textAlign: align,
57
+ color: textColor,
58
+ ...(style ? StyleSheet.flatten(style) : undefined),
59
+ };
60
+ }, [variant, weight, align, color, muted, theme, style]);
61
+ const content = uppercase && typeof children === 'string'
62
+ ? children.toUpperCase()
63
+ : children;
64
+ const resolvedRole = accessibilityRole ??
65
+ ((variant.startsWith('display') || variant.startsWith('headline')) ? 'header' : undefined);
66
+ return (_jsx(Text, { ref: ref, style: textStyle, numberOfLines: numberOfLines, accessibilityRole: resolvedRole, ...rest, children: content }));
67
+ });
68
+ Typography.displayName = 'Typography';
69
+ //# sourceMappingURL=typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typography.js","sourceRoot":"","sources":["../../../components/ui/typography.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAiE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2HvC;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAClC,CACE,EACE,QAAQ,EACR,OAAO,GAAG,YAAY,EACtB,MAAM,GAAG,SAAS,EAClB,KAAK,GAAG,MAAM,EACd,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,KAAK,EACb,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,SAAS,GAAc,OAAO,CAAC,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;QAEvC,iCAAiC;QACjC,MAAM,QAAQ,GAAI,MAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC;QAE/D,sBAAsB;QACtB,IAAI,UAAmC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,UAAU,GAAG,MAAiC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,OAAO;oBACV,UAAU,GAAG,MAAM,CAAC,WAAsC,CAAC;oBAC3D,MAAM;gBACR,KAAK,QAAQ;oBACX,UAAU,GAAG,MAAM,CAAC,YAAuC,CAAC;oBAC5D,MAAM;gBACR,KAAK,MAAM;oBACT,UAAU,GAAG,MAAM,CAAC,UAAqC,CAAC;oBAC1D,MAAM;gBACR,KAAK,SAAS,CAAC;gBACf;oBACE,UAAU,GAAG,MAAM,CAAC,aAAwC,CAAC;oBAC7D,MAAM;YACV,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,SAAS,GAAG,KAAK;YACrB,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACxB,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;QAE7B,uCAAuC;QACvC,IAAI,UAAkB,CAAC;QACvB,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;QACjD,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAClD,CAAC;QAED,OAAO;YACL,QAAQ;YACR,UAAU;YACV,UAAU;YACV,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACnD,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ;QACvD,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE;QACxB,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,YAAY,GAAG,iBAAiB;QACpC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEtG,OAAO,CACL,KAAC,IAAI,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,KAAM,IAAI,YACtG,OAAO,GACH,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ /**
3
+ * Layout context state for app-level dimensions
4
+ */
5
+ export interface LayoutContextType {
6
+ /** Height of the app bar in pixels */
7
+ appBarHeight: number;
8
+ /** Set the app bar height */
9
+ setAppBarHeight: (height: number) => void;
10
+ }
11
+ export interface LayoutProviderProps {
12
+ children: React.ReactNode;
13
+ /** Initial app bar height. @default 64 */
14
+ defaultAppBarHeight?: number;
15
+ }
16
+ /**
17
+ * Layout state provider component.
18
+ * Provides app-level layout information like AppBar height.
19
+ *
20
+ * Note: This is automatically included in ZeroToApp provider,
21
+ * so you typically don't need to wrap your app with this directly.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <LayoutProvider>
26
+ * <App />
27
+ * </LayoutProvider>
28
+ * ```
29
+ */
30
+ export declare const LayoutProvider: React.FC<LayoutProviderProps>;
31
+ /**
32
+ * Hook to access layout information (AppBar height, etc).
33
+ * Must be used within a LayoutProvider (automatically included in ZeroToApp).
34
+ *
35
+ * @returns Layout context with appBarHeight and setter
36
+ * @throws Error if used outside of LayoutProvider
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * function MyComponent() {
41
+ * const { appBarHeight } = useLayout();
42
+ *
43
+ * return (
44
+ * <View style={{ marginTop: appBarHeight }}>
45
+ * <Text>Content below app bar</Text>
46
+ * </View>
47
+ * );
48
+ * }
49
+ * ```
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * // Setting the app bar height (typically done by AppTabs)
54
+ * function MyAppBar() {
55
+ * const { setAppBarHeight } = useLayout();
56
+ *
57
+ * useEffect(() => {
58
+ * setAppBarHeight(72); // Custom height
59
+ * }, []);
60
+ *
61
+ * return <AppBar />;
62
+ * }
63
+ * ```
64
+ */
65
+ export declare const useLayout: () => LayoutContextType;
66
+ //# sourceMappingURL=layout-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-context.d.ts","sourceRoot":"","sources":["../../context/layout-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAQD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAoBxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,SAAS,QAAO,iBAoB5B,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useState, useContext, useCallback } from 'react';
3
+ // Sentinel value to detect missing provider
4
+ const MISSING_PROVIDER = Symbol('MISSING_PROVIDER');
5
+ // Create context with sentinel
6
+ const LayoutContext = createContext(MISSING_PROVIDER);
7
+ /**
8
+ * Layout state provider component.
9
+ * Provides app-level layout information like AppBar height.
10
+ *
11
+ * Note: This is automatically included in ZeroToApp provider,
12
+ * so you typically don't need to wrap your app with this directly.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <LayoutProvider>
17
+ * <App />
18
+ * </LayoutProvider>
19
+ * ```
20
+ */
21
+ export const LayoutProvider = ({ children, defaultAppBarHeight = 64, }) => {
22
+ const [appBarHeight, setAppBarHeightState] = useState(defaultAppBarHeight);
23
+ const setAppBarHeight = useCallback((height) => {
24
+ setAppBarHeightState(height);
25
+ }, []);
26
+ const value = {
27
+ appBarHeight,
28
+ setAppBarHeight,
29
+ };
30
+ return (_jsx(LayoutContext.Provider, { value: value, children: children }));
31
+ };
32
+ /**
33
+ * Hook to access layout information (AppBar height, etc).
34
+ * Must be used within a LayoutProvider (automatically included in ZeroToApp).
35
+ *
36
+ * @returns Layout context with appBarHeight and setter
37
+ * @throws Error if used outside of LayoutProvider
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * function MyComponent() {
42
+ * const { appBarHeight } = useLayout();
43
+ *
44
+ * return (
45
+ * <View style={{ marginTop: appBarHeight }}>
46
+ * <Text>Content below app bar</Text>
47
+ * </View>
48
+ * );
49
+ * }
50
+ * ```
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * // Setting the app bar height (typically done by AppTabs)
55
+ * function MyAppBar() {
56
+ * const { setAppBarHeight } = useLayout();
57
+ *
58
+ * useEffect(() => {
59
+ * setAppBarHeight(72); // Custom height
60
+ * }, []);
61
+ *
62
+ * return <AppBar />;
63
+ * }
64
+ * ```
65
+ */
66
+ export const useLayout = () => {
67
+ const context = useContext(LayoutContext);
68
+ if (context === MISSING_PROVIDER) {
69
+ throw new Error('useLayout must be used within a LayoutProvider.\n\n' +
70
+ 'LayoutProvider is automatically included in ZeroToApp:\n\n' +
71
+ ' import { ZeroToApp, createBrand } from "zero-to-app";\n\n' +
72
+ ' const brand = createBrand({ ... });\n\n' +
73
+ ' function App() {\n' +
74
+ ' return (\n' +
75
+ ' <ZeroToApp brand={brand}>\n' +
76
+ ' <YourComponent />\n' +
77
+ ' </ZeroToApp>\n' +
78
+ ' );\n' +
79
+ ' }');
80
+ }
81
+ return context;
82
+ };
83
+ //# sourceMappingURL=layout-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-context.js","sourceRoot":"","sources":["../../context/layout-context.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAYhF,4CAA4C;AAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEpD,+BAA+B;AAC/B,MAAM,aAAa,GAAG,aAAa,CAA8C,gBAAgB,CAAC,CAAC;AAQnG;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,QAAQ,EACR,mBAAmB,GAAG,EAAE,GACzB,EAAE,EAAE;IACH,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE3E,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,EAAE;QACrD,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAsB;QAC/B,YAAY;QACZ,eAAe;KAChB,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACjC,QAAQ,GACc,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAsB,EAAE;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,qDAAqD;YACnD,4DAA4D;YAC5D,6DAA6D;YAC7D,2CAA2C;YAC3C,sBAAsB;YACtB,gBAAgB;YAChB,mCAAmC;YACnC,6BAA6B;YAC7B,sBAAsB;YACtB,UAAU;YACV,KAAK,CACR,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { type SharedValue } from 'react-native-reanimated';
3
+ export declare const ScrollContext: React.Context<SharedValue<number> | null>;
4
+ export declare function ScrollProvider({ children }: {
5
+ children: React.ReactNode;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function useScrollContext(): SharedValue<number>;
8
+ //# sourceMappingURL=scroll-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-context.d.ts","sourceRoot":"","sources":["../../context/scroll-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,yBAAyB,CAAC;AAE3E,eAAO,MAAM,aAAa,2CAAkD,CAAC;AAE7E,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAQzE;AAED,wBAAgB,gBAAgB,wBAM/B"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useContext, createContext } from 'react';
3
+ import { useSharedValue } from 'react-native-reanimated';
4
+ export const ScrollContext = createContext(null);
5
+ export function ScrollProvider({ children }) {
6
+ const scrollY = useSharedValue(0);
7
+ return (_jsx(ScrollContext.Provider, { value: scrollY, children: children }));
8
+ }
9
+ export function useScrollContext() {
10
+ const context = useContext(ScrollContext);
11
+ if (context === null) {
12
+ throw new Error('useScrollContext must be used within a ScrollProvider');
13
+ }
14
+ return context;
15
+ }
16
+ //# sourceMappingURL=scroll-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-context.js","sourceRoot":"","sources":["../../context/scroll-context.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAoB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAE7E,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAiC;IACxE,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElC,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACnC,QAAQ,GACc,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}