@campxdev/react-native-blueprint 0.1.0

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 (178) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +358 -0
  3. package/lib/module/app/_layout.js +23 -0
  4. package/lib/module/app/_layout.js.map +1 -0
  5. package/lib/module/assets/icons/weather_icons/drizzle.png +0 -0
  6. package/lib/module/assets/icons/weather_icons/foggy.png +0 -0
  7. package/lib/module/assets/icons/weather_icons/freezing_rain.png +0 -0
  8. package/lib/module/assets/icons/weather_icons/partly_cloudy.png +0 -0
  9. package/lib/module/assets/icons/weather_icons/rainy.png +0 -0
  10. package/lib/module/assets/icons/weather_icons/showers.png +0 -0
  11. package/lib/module/assets/icons/weather_icons/sunny_weather.png +0 -0
  12. package/lib/module/assets/icons/weather_icons/thunderstorm.png +0 -0
  13. package/lib/module/assets/icons/weather_icons/thunderstorm_hail.png +0 -0
  14. package/lib/module/components/theme-config.js +265 -0
  15. package/lib/module/components/theme-config.js.map +1 -0
  16. package/lib/module/components/ui/Accordion.js +228 -0
  17. package/lib/module/components/ui/Accordion.js.map +1 -0
  18. package/lib/module/components/ui/Alert-Dialog.js +266 -0
  19. package/lib/module/components/ui/Alert-Dialog.js.map +1 -0
  20. package/lib/module/components/ui/Alert.js +107 -0
  21. package/lib/module/components/ui/Alert.js.map +1 -0
  22. package/lib/module/components/ui/AppBar.js +403 -0
  23. package/lib/module/components/ui/AppBar.js.map +1 -0
  24. package/lib/module/components/ui/Aspect-Ratio.js +27 -0
  25. package/lib/module/components/ui/Aspect-Ratio.js.map +1 -0
  26. package/lib/module/components/ui/Avatar.js +97 -0
  27. package/lib/module/components/ui/Avatar.js.map +1 -0
  28. package/lib/module/components/ui/Badge.js +127 -0
  29. package/lib/module/components/ui/Badge.js.map +1 -0
  30. package/lib/module/components/ui/Bottom-Sheet.js +144 -0
  31. package/lib/module/components/ui/Bottom-Sheet.js.map +1 -0
  32. package/lib/module/components/ui/Button.js +88 -0
  33. package/lib/module/components/ui/Button.js.map +1 -0
  34. package/lib/module/components/ui/Card.js +176 -0
  35. package/lib/module/components/ui/Card.js.map +1 -0
  36. package/lib/module/components/ui/Checkbox.js +65 -0
  37. package/lib/module/components/ui/Checkbox.js.map +1 -0
  38. package/lib/module/components/ui/Collapsible.js +42 -0
  39. package/lib/module/components/ui/Collapsible.js.map +1 -0
  40. package/lib/module/components/ui/Context-Menu.js +287 -0
  41. package/lib/module/components/ui/Context-Menu.js.map +1 -0
  42. package/lib/module/components/ui/Custom-Card.js +202 -0
  43. package/lib/module/components/ui/Custom-Card.js.map +1 -0
  44. package/lib/module/components/ui/Dialog.js +202 -0
  45. package/lib/module/components/ui/Dialog.js.map +1 -0
  46. package/lib/module/components/ui/Dropdown-Menu.js +421 -0
  47. package/lib/module/components/ui/Dropdown-Menu.js.map +1 -0
  48. package/lib/module/components/ui/Floating-Action.js +50 -0
  49. package/lib/module/components/ui/Floating-Action.js.map +1 -0
  50. package/lib/module/components/ui/Greeting-Card.js +392 -0
  51. package/lib/module/components/ui/Greeting-Card.js.map +1 -0
  52. package/lib/module/components/ui/Hover-Card.js +96 -0
  53. package/lib/module/components/ui/Hover-Card.js.map +1 -0
  54. package/lib/module/components/ui/Icon.js +73 -0
  55. package/lib/module/components/ui/Icon.js.map +1 -0
  56. package/lib/module/components/ui/Input.js +74 -0
  57. package/lib/module/components/ui/Input.js.map +1 -0
  58. package/lib/module/components/ui/Label.js +44 -0
  59. package/lib/module/components/ui/Label.js.map +1 -0
  60. package/lib/module/components/ui/Menubar.js +375 -0
  61. package/lib/module/components/ui/Menubar.js.map +1 -0
  62. package/lib/module/components/ui/Native-Only-Animated-View.js +41 -0
  63. package/lib/module/components/ui/Native-Only-Animated-View.js.map +1 -0
  64. package/lib/module/components/ui/NavBar.js +352 -0
  65. package/lib/module/components/ui/NavBar.js.map +1 -0
  66. package/lib/module/components/ui/Popover.js +101 -0
  67. package/lib/module/components/ui/Popover.js.map +1 -0
  68. package/lib/module/components/ui/Progress.js +124 -0
  69. package/lib/module/components/ui/Progress.js.map +1 -0
  70. package/lib/module/components/ui/Radio-Group.js +75 -0
  71. package/lib/module/components/ui/Radio-Group.js.map +1 -0
  72. package/lib/module/components/ui/Select.js +269 -0
  73. package/lib/module/components/ui/Select.js.map +1 -0
  74. package/lib/module/components/ui/Separator.js +58 -0
  75. package/lib/module/components/ui/Separator.js.map +1 -0
  76. package/lib/module/components/ui/SizedBox.js +101 -0
  77. package/lib/module/components/ui/SizedBox.js.map +1 -0
  78. package/lib/module/components/ui/Skeleton.js +57 -0
  79. package/lib/module/components/ui/Skeleton.js.map +1 -0
  80. package/lib/module/components/ui/Slider.js +169 -0
  81. package/lib/module/components/ui/Slider.js.map +1 -0
  82. package/lib/module/components/ui/Switch.js +55 -0
  83. package/lib/module/components/ui/Switch.js.map +1 -0
  84. package/lib/module/components/ui/Table.js +150 -0
  85. package/lib/module/components/ui/Table.js.map +1 -0
  86. package/lib/module/components/ui/Tabs.js +106 -0
  87. package/lib/module/components/ui/Tabs.js.map +1 -0
  88. package/lib/module/components/ui/Text.js +69 -0
  89. package/lib/module/components/ui/Text.js.map +1 -0
  90. package/lib/module/components/ui/Textarea.js +88 -0
  91. package/lib/module/components/ui/Textarea.js.map +1 -0
  92. package/lib/module/components/ui/Theme-Toggle.js +156 -0
  93. package/lib/module/components/ui/Theme-Toggle.js.map +1 -0
  94. package/lib/module/components/ui/Toast.js +101 -0
  95. package/lib/module/components/ui/Toast.js.map +1 -0
  96. package/lib/module/components/ui/Toggle-Group.js +129 -0
  97. package/lib/module/components/ui/Toggle-Group.js.map +1 -0
  98. package/lib/module/components/ui/Toggle.js +106 -0
  99. package/lib/module/components/ui/Toggle.js.map +1 -0
  100. package/lib/module/components/ui/Tooltip.js +106 -0
  101. package/lib/module/components/ui/Tooltip.js.map +1 -0
  102. package/lib/module/components/ui/index.js +45 -0
  103. package/lib/module/components/ui/index.js.map +1 -0
  104. package/lib/module/index.js +19 -0
  105. package/lib/module/index.js.map +1 -0
  106. package/lib/module/lib/ThemeProvider.js +173 -0
  107. package/lib/module/lib/ThemeProvider.js.map +1 -0
  108. package/lib/module/lib/cornerRadius.js +164 -0
  109. package/lib/module/lib/cornerRadius.js.map +1 -0
  110. package/lib/module/lib/fonts.js +25 -0
  111. package/lib/module/lib/fonts.js.map +1 -0
  112. package/lib/module/lib/theme.js +212 -0
  113. package/lib/module/lib/theme.js.map +1 -0
  114. package/lib/module/lib/utils.js +137 -0
  115. package/lib/module/lib/utils.js.map +1 -0
  116. package/lib/module/package.json +1 -0
  117. package/package.json +208 -0
  118. package/src/app/_layout.tsx +25 -0
  119. package/src/assets/icons/weather_icons/drizzle.png +0 -0
  120. package/src/assets/icons/weather_icons/foggy.png +0 -0
  121. package/src/assets/icons/weather_icons/freezing_rain.png +0 -0
  122. package/src/assets/icons/weather_icons/partly_cloudy.png +0 -0
  123. package/src/assets/icons/weather_icons/rainy.png +0 -0
  124. package/src/assets/icons/weather_icons/showers.png +0 -0
  125. package/src/assets/icons/weather_icons/sunny_weather.png +0 -0
  126. package/src/assets/icons/weather_icons/thunderstorm.png +0 -0
  127. package/src/assets/icons/weather_icons/thunderstorm_hail.png +0 -0
  128. package/src/components/theme-config.ts +331 -0
  129. package/src/components/ui/Accordion.tsx +253 -0
  130. package/src/components/ui/Alert-Dialog.tsx +295 -0
  131. package/src/components/ui/Alert.tsx +137 -0
  132. package/src/components/ui/AppBar.tsx +551 -0
  133. package/src/components/ui/Aspect-Ratio.tsx +25 -0
  134. package/src/components/ui/Avatar.tsx +103 -0
  135. package/src/components/ui/Badge.tsx +121 -0
  136. package/src/components/ui/Bottom-Sheet.tsx +224 -0
  137. package/src/components/ui/Button.tsx +100 -0
  138. package/src/components/ui/Card.tsx +185 -0
  139. package/src/components/ui/Checkbox.tsx +81 -0
  140. package/src/components/ui/Collapsible.tsx +40 -0
  141. package/src/components/ui/Context-Menu.tsx +407 -0
  142. package/src/components/ui/Custom-Card.tsx +226 -0
  143. package/src/components/ui/Dialog.tsx +240 -0
  144. package/src/components/ui/Dropdown-Menu.tsx +544 -0
  145. package/src/components/ui/Floating-Action.tsx +54 -0
  146. package/src/components/ui/Greeting-Card.tsx +471 -0
  147. package/src/components/ui/Hover-Card.tsx +101 -0
  148. package/src/components/ui/Icon.tsx +75 -0
  149. package/src/components/ui/Input.tsx +90 -0
  150. package/src/components/ui/Label.tsx +48 -0
  151. package/src/components/ui/Menubar.tsx +509 -0
  152. package/src/components/ui/Native-Only-Animated-View.tsx +37 -0
  153. package/src/components/ui/NavBar.tsx +397 -0
  154. package/src/components/ui/Popover.tsx +110 -0
  155. package/src/components/ui/Progress.tsx +138 -0
  156. package/src/components/ui/Radio-Group.tsx +79 -0
  157. package/src/components/ui/Select.tsx +344 -0
  158. package/src/components/ui/Separator.tsx +68 -0
  159. package/src/components/ui/SizedBox.tsx +116 -0
  160. package/src/components/ui/Skeleton.tsx +55 -0
  161. package/src/components/ui/Slider.tsx +222 -0
  162. package/src/components/ui/Switch.tsx +67 -0
  163. package/src/components/ui/Table.tsx +170 -0
  164. package/src/components/ui/Tabs.tsx +119 -0
  165. package/src/components/ui/Text.tsx +73 -0
  166. package/src/components/ui/Textarea.tsx +93 -0
  167. package/src/components/ui/Theme-Toggle.tsx +204 -0
  168. package/src/components/ui/Toast.tsx +127 -0
  169. package/src/components/ui/Toggle-Group.tsx +160 -0
  170. package/src/components/ui/Toggle.tsx +122 -0
  171. package/src/components/ui/Tooltip.tsx +117 -0
  172. package/src/components/ui/index.ts +42 -0
  173. package/src/index.tsx +24 -0
  174. package/src/lib/ThemeProvider.tsx +204 -0
  175. package/src/lib/cornerRadius.ts +160 -0
  176. package/src/lib/fonts.ts +28 -0
  177. package/src/lib/theme.ts +151 -0
  178. package/src/lib/utils.ts +146 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Platform","View","Gesture","GestureDetector","Animated","runOnJS","useAnimatedStyle","useSharedValue","withSpring","cn","jsx","_jsx","jsxs","_jsxs","Slider","forwardRef","value","onValueChange","min","max","step","disabled","className","style","props","ref","sliderWidth","translationX","startPosition","sliderDimensions","setSliderDimensions","useState","width","x","getThumbPosition","useCallback","val","range","percentage","getValueFromPosition","position","Math","newValue","round","useEffect","newPosition","useImperativeHandle","reset","handleValueChange","pan","Pan","enabled","onBegin","onUpdate","event","onEnd","tap","Tap","composed","Race","thumbAnimatedStyle","transform","translateX","rangeAnimatedStyle","children","gesture","onLayout","nativeEvent","layout","select","web","displayName"],"sourceRoot":"../../../../src","sources":["components/ui/Slider.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ import { cn } from "../../lib/utils.js";
4
+ import * as SwitchPrimitives from '@rn-primitives/switch';
5
+ import { Platform } from 'react-native';
6
+
7
+ /**
8
+ * A toggle switch component for binary on/off states
9
+ *
10
+ * Provides a visual toggle control with smooth animations and platform-specific styling.
11
+ * Automatically handles checked/unchecked states and disabled interactions.
12
+ *
13
+ * @component
14
+ * @example
15
+ * ```tsx
16
+ * const [enabled, setEnabled] = useState(false);
17
+ *
18
+ * <Switch
19
+ * checked={enabled}
20
+ * onCheckedChange={setEnabled}
21
+ * />
22
+ *
23
+ * // Disabled switch
24
+ * <Switch checked={true} disabled />
25
+ * ```
26
+ *
27
+ * @param {boolean} checked - Current state of the switch
28
+ * @param {(checked: boolean) => void} onCheckedChange - Callback when switch is toggled
29
+ * @param {boolean} [disabled] - Whether the switch is disabled
30
+ * @param {string} [className] - Additional Tailwind classes
31
+ *
32
+ * @accessibility
33
+ * - Proper focus states on web for keyboard navigation
34
+ * - Disabled state prevents interaction
35
+ * - Visual feedback for checked/unchecked states
36
+ */
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ function Switch({
39
+ className,
40
+ ...props
41
+ }) {
42
+ return /*#__PURE__*/_jsx(SwitchPrimitives.Root, {
43
+ className: cn('flex h-[1.15rem] w-8 shrink-0 flex-row items-center rounded-full border border-transparent shadow-sm shadow-black/5', Platform.select({
44
+ web: 'focus-visible:border-ring focus-visible:ring-ring/50 peer inline-flex outline-none transition-all focus-visible:ring-[3px] disabled:cursor-not-allowed'
45
+ }), props.checked ? 'bg-primary' : 'bg-input dark:bg-input/80', props.disabled && 'opacity-50', className),
46
+ ...props,
47
+ children: /*#__PURE__*/_jsx(SwitchPrimitives.Thumb, {
48
+ className: cn('bg-background size-4 rounded-full transition-transform', Platform.select({
49
+ web: 'pointer-events-none block ring-0'
50
+ }), props.checked ? 'dark:bg-primary-foreground translate-x-3.5' : 'dark:bg-foreground translate-x-0')
51
+ })
52
+ });
53
+ }
54
+ export { Switch };
55
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cn","SwitchPrimitives","Platform","jsx","_jsx","Switch","className","props","Root","select","web","checked","disabled","children","Thumb"],"sourceRoot":"../../../../src","sources":["components/ui/Switch.tsx"],"mappings":";;AAAA,SAASA,EAAE,QAAQ,oBAAiB;AACpC,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AACzD,SAASC,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA7BA,SAAAC,GAAA,IAAAC,IAAA;AA8BA,SAASC,MAAMA,CAAC;EACdC,SAAS;EACT,GAAGC;AACuE,CAAC,EAAE;EAC7E,oBACEH,IAAA,CAACH,gBAAgB,CAACO,IAAI;IACpBF,SAAS,EAAEN,EAAE,CACX,qHAAqH,EACrHE,QAAQ,CAACO,MAAM,CAAC;MACdC,GAAG,EAAE;IACP,CAAC,CAAC,EACFH,KAAK,CAACI,OAAO,GAAG,YAAY,GAAG,2BAA2B,EAC1DJ,KAAK,CAACK,QAAQ,IAAI,YAAY,EAC9BN,SACF,CAAE;IAAA,GACEC,KAAK;IAAAM,QAAA,eAETT,IAAA,CAACH,gBAAgB,CAACa,KAAK;MACrBR,SAAS,EAAEN,EAAE,CACX,wDAAwD,EACxDE,QAAQ,CAACO,MAAM,CAAC;QACdC,GAAG,EAAE;MACP,CAAC,CAAC,EACFH,KAAK,CAACI,OAAO,GACT,4CAA4C,GAC5C,kCACN;IAAE,CACH;EAAC,CACmB,CAAC;AAE5B;AAEA,SAASN,MAAM","ignoreList":[]}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ import { cn } from "../../lib/utils.js";
4
+ import { Text } from "./Text.js";
5
+ import { View } from 'react-native';
6
+ import { cssInterop } from 'nativewind';
7
+ import * as React from 'react';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ cssInterop(View, {
10
+ className: 'style'
11
+ });
12
+
13
+ /**
14
+ * Root table container component
15
+ *
16
+ * @component
17
+ * @example
18
+ * ```tsx
19
+ * <Table>
20
+ * <TableHeader>
21
+ * <TableRow>
22
+ * <TableHead><Text>Name</Text></TableHead>
23
+ * <TableHead><Text>Email</Text></TableHead>
24
+ * </TableRow>
25
+ * </TableHeader>
26
+ * <TableBody>
27
+ * <TableRow>
28
+ * <TableCell><Text>John Doe</Text></TableCell>
29
+ * <TableCell><Text>john@example.com</Text></TableCell>
30
+ * </TableRow>
31
+ * </TableBody>
32
+ * </Table>
33
+ * ```
34
+ */
35
+ function Table({
36
+ className,
37
+ ...props
38
+ }) {
39
+ return /*#__PURE__*/_jsx(View, {
40
+ className: cn('w-full', className),
41
+ ...props
42
+ });
43
+ }
44
+
45
+ /**
46
+ * Table header container
47
+ *
48
+ * @component
49
+ */
50
+ function TableHeader({
51
+ className,
52
+ ...props
53
+ }) {
54
+ return /*#__PURE__*/_jsx(View, {
55
+ className: cn('border-border flex-row border-b', className),
56
+ ...props
57
+ });
58
+ }
59
+
60
+ /**
61
+ * Table body container for data rows
62
+ *
63
+ * @component
64
+ */
65
+ function TableBody({
66
+ className,
67
+ ...props
68
+ }) {
69
+ return /*#__PURE__*/_jsx(View, {
70
+ className: cn('flex-col', className),
71
+ ...props
72
+ });
73
+ }
74
+
75
+ /**
76
+ * Table footer container
77
+ *
78
+ * @component
79
+ */
80
+ function TableFooter({
81
+ className,
82
+ ...props
83
+ }) {
84
+ return /*#__PURE__*/_jsx(View, {
85
+ className: cn('border-border bg-muted/50 flex-row border-t font-medium', className),
86
+ ...props
87
+ });
88
+ }
89
+
90
+ /**
91
+ * Table row component
92
+ *
93
+ * @component
94
+ */
95
+ function TableRow({
96
+ className,
97
+ ...props
98
+ }) {
99
+ return /*#__PURE__*/_jsx(View, {
100
+ className: cn('border-border flex-row border-b', className),
101
+ ...props
102
+ });
103
+ }
104
+
105
+ /**
106
+ * Table header cell component
107
+ *
108
+ * @component
109
+ */
110
+ function TableHead({
111
+ className,
112
+ ...props
113
+ }) {
114
+ return /*#__PURE__*/_jsx(Text, {
115
+ className: cn('text-muted-foreground flex-1 p-2 text-left align-middle text-xs font-medium', className),
116
+ ...props
117
+ });
118
+ }
119
+
120
+ /**
121
+ * Table data cell component
122
+ *
123
+ * @component
124
+ */
125
+ function TableCell({
126
+ className,
127
+ ...props
128
+ }) {
129
+ return /*#__PURE__*/_jsx(Text, {
130
+ className: cn('flex-1 p-2 align-middle text-sm', className),
131
+ ...props
132
+ });
133
+ }
134
+
135
+ /**
136
+ * Table caption for describing the table
137
+ *
138
+ * @component
139
+ */
140
+ function TableCaption({
141
+ className,
142
+ ...props
143
+ }) {
144
+ return /*#__PURE__*/_jsx(Text, {
145
+ className: cn('text-muted-foreground mt-2 text-center text-sm', className),
146
+ ...props
147
+ });
148
+ }
149
+ export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };
150
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cn","Text","View","cssInterop","React","jsx","_jsx","className","Table","props","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],"sourceRoot":"../../../../src","sources":["components/ui/Table.tsx"],"mappings":";;AAAA,SAASA,EAAE,QAAQ,oBAAiB;AACpC,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,UAAU,QAAQ,YAAY;AACvC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE/BH,UAAU,CAACD,IAAI,EAAE;EAAEK,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,KAAKA,CAAC;EACbD,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBAAOH,IAAA,CAACJ,IAAI;IAACK,SAAS,EAAEP,EAAE,CAAC,QAAQ,EAAEO,SAAS,CAAE;IAAA,GAAKE;EAAK,CAAG,CAAC;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAAC;EACnBH,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACJ,IAAI;IACHK,SAAS,EAAEP,EAAE,CAAC,iCAAiC,EAAEO,SAAS,CAAE;IAAA,GACxDE;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,SAASA,CAAC;EACjBJ,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBAAOH,IAAA,CAACJ,IAAI;IAACK,SAAS,EAAEP,EAAE,CAAC,UAAU,EAAEO,SAAS,CAAE;IAAA,GAAKE;EAAK,CAAG,CAAC;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASG,WAAWA,CAAC;EACnBL,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACJ,IAAI;IACHK,SAAS,EAAEP,EAAE,CACX,yDAAyD,EACzDO,SACF,CAAE;IAAA,GACEE;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASI,QAAQA,CAAC;EAChBN,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACJ,IAAI;IACHK,SAAS,EAAEP,EAAE,CAAC,iCAAiC,EAAEO,SAAS,CAAE;IAAA,GACxDE;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASK,SAASA,CAAC;EACjBP,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACL,IAAI;IACHM,SAAS,EAAEP,EAAE,CACX,6EAA6E,EAC7EO,SACF,CAAE;IAAA,GACEE;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASM,SAASA,CAAC;EACjBR,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACL,IAAI;IACHM,SAAS,EAAEP,EAAE,CAAC,iCAAiC,EAAEO,SAAS,CAAE;IAAA,GACxDE;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASO,YAAYA,CAAC;EACpBT,SAAS;EACT,GAAGE;AAC0D,CAAC,EAAE;EAChE,oBACEH,IAAA,CAACL,IAAI;IACHM,SAAS,EAAEP,EAAE,CACX,gDAAgD,EAChDO,SACF,CAAE;IAAA,GACEE;EAAK,CACV,CAAC;AAEN;AAEA,SACED,KAAK,EACLG,SAAS,EACTK,YAAY,EACZD,SAAS,EACTH,WAAW,EACXE,SAAS,EACTJ,WAAW,EACXG,QAAQ","ignoreList":[]}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ import { TextClassContext } from "./Text.js";
4
+ import { cn } from "../../lib/utils.js";
5
+ import * as TabsPrimitive from '@rn-primitives/tabs';
6
+ import { Platform } from 'react-native';
7
+
8
+ /**
9
+ * Root tabs component for organizing content into panels
10
+ *
11
+ * @component
12
+ * @example
13
+ * ```tsx
14
+ * <Tabs value={activeTab} onValueChange={setActiveTab}>
15
+ * <TabsList>
16
+ * <TabsTrigger value="account">
17
+ * <Text>Account</Text>
18
+ * </TabsTrigger>
19
+ * <TabsTrigger value="password">
20
+ * <Text>Password</Text>
21
+ * </TabsTrigger>
22
+ * </TabsList>
23
+ * <TabsContent value="account">
24
+ * <Text>Account settings content</Text>
25
+ * </TabsContent>
26
+ * <TabsContent value="password">
27
+ * <Text>Password settings content</Text>
28
+ * </TabsContent>
29
+ * </Tabs>
30
+ * ```
31
+ *
32
+ * @accessibility
33
+ * - Keyboard navigation support (arrow keys)
34
+ * - Proper ARIA attributes for tab structure
35
+ * - Screen reader friendly
36
+ */
37
+ import { jsx as _jsx } from "react/jsx-runtime";
38
+ function Tabs({
39
+ className,
40
+ ...props
41
+ }) {
42
+ return /*#__PURE__*/_jsx(TabsPrimitive.Root, {
43
+ className: cn('flex flex-col gap-2', className),
44
+ ...props
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Container for tab triggers
50
+ *
51
+ * @component
52
+ */
53
+ function TabsList({
54
+ className,
55
+ ...props
56
+ }) {
57
+ return /*#__PURE__*/_jsx(TabsPrimitive.List, {
58
+ className: cn('bg-muted flex h-9 flex-row items-center justify-center rounded-lg p-[3px]', Platform.select({
59
+ web: 'inline-flex w-fit',
60
+ native: 'mr-auto'
61
+ }), className),
62
+ ...props
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Individual tab trigger button
68
+ *
69
+ * @component
70
+ */
71
+ function TabsTrigger({
72
+ className,
73
+ ...props
74
+ }) {
75
+ const {
76
+ value
77
+ } = TabsPrimitive.useRootContext();
78
+ return /*#__PURE__*/_jsx(TextClassContext.Provider, {
79
+ value: cn('text-foreground dark:text-muted-foreground text-sm font-medium', value === props.value && 'dark:text-foreground'),
80
+ children: /*#__PURE__*/_jsx(TabsPrimitive.Trigger, {
81
+ className: cn('flex h-[calc(100%-1px)] flex-row items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 shadow-none shadow-black/5', Platform.select({
82
+ web: 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex cursor-default whitespace-nowrap transition-[color,box-shadow] focus-visible:outline-1 focus-visible:ring-[3px] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0'
83
+ }), props.disabled && 'opacity-50', props.value === value && 'bg-background dark:border-foreground/10 dark:bg-input/30', className),
84
+ ...props
85
+ })
86
+ });
87
+ }
88
+
89
+ /**
90
+ * Tab content panel
91
+ *
92
+ * @component
93
+ */
94
+ function TabsContent({
95
+ className,
96
+ ...props
97
+ }) {
98
+ return /*#__PURE__*/_jsx(TabsPrimitive.Content, {
99
+ className: cn(Platform.select({
100
+ web: 'flex-1 outline-none'
101
+ }), className),
102
+ ...props
103
+ });
104
+ }
105
+ export { Tabs, TabsContent, TabsList, TabsTrigger };
106
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TextClassContext","cn","TabsPrimitive","Platform","jsx","_jsx","Tabs","className","props","Root","TabsList","List","select","web","native","TabsTrigger","value","useRootContext","Provider","children","Trigger","disabled","TabsContent","Content"],"sourceRoot":"../../../../src","sources":["components/ui/Tabs.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,WAAQ;AACzC,SAASC,EAAE,QAAQ,oBAAiB;AACpC,OAAO,KAAKC,aAAa,MAAM,qBAAqB;AACpD,SAASC,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA5BA,SAAAC,GAAA,IAAAC,IAAA;AA6BA,SAASC,IAAIA,CAAC;EACZC,SAAS;EACT,GAAGC;AACiE,CAAC,EAAE;EACvE,oBACEH,IAAA,CAACH,aAAa,CAACO,IAAI;IACjBF,SAAS,EAAEN,EAAE,CAAC,qBAAqB,EAAEM,SAAS,CAAE;IAAA,GAC5CC;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,QAAQA,CAAC;EAChBH,SAAS;EACT,GAAGC;AACiE,CAAC,EAAE;EACvE,oBACEH,IAAA,CAACH,aAAa,CAACS,IAAI;IACjBJ,SAAS,EAAEN,EAAE,CACX,2EAA2E,EAC3EE,QAAQ,CAACS,MAAM,CAAC;MAAEC,GAAG,EAAE,mBAAmB;MAAEC,MAAM,EAAE;IAAU,CAAC,CAAC,EAChEP,SACF,CAAE;IAAA,GACEC;EAAK,CACV,CAAC;AAEN;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASO,WAAWA,CAAC;EACnBR,SAAS;EACT,GAAGC;AACuE,CAAC,EAAE;EAC7E,MAAM;IAAEQ;EAAM,CAAC,GAAGd,aAAa,CAACe,cAAc,CAAC,CAAC;EAChD,oBACEZ,IAAA,CAACL,gBAAgB,CAACkB,QAAQ;IACxBF,KAAK,EAAEf,EAAE,CACP,gEAAgE,EAChEe,KAAK,KAAKR,KAAK,CAACQ,KAAK,IAAI,sBAC3B,CAAE;IAAAG,QAAA,eAEFd,IAAA,CAACH,aAAa,CAACkB,OAAO;MACpBb,SAAS,EAAEN,EAAE,CACX,gJAAgJ,EAChJE,QAAQ,CAACS,MAAM,CAAC;QACdC,GAAG,EAAE;MACP,CAAC,CAAC,EACFL,KAAK,CAACa,QAAQ,IAAI,YAAY,EAC9Bb,KAAK,CAACQ,KAAK,KAAKA,KAAK,IACnB,0DAA0D,EAC5DT,SACF,CAAE;MAAA,GACEC;IAAK,CACV;EAAC,CACuB,CAAC;AAEhC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASc,WAAWA,CAAC;EACnBf,SAAS;EACT,GAAGC;AACuE,CAAC,EAAE;EAC7E,oBACEH,IAAA,CAACH,aAAa,CAACqB,OAAO;IACpBhB,SAAS,EAAEN,EAAE,CAACE,QAAQ,CAACS,MAAM,CAAC;MAAEC,GAAG,EAAE;IAAsB,CAAC,CAAC,EAAEN,SAAS,CAAE;IAAA,GACtEC;EAAK,CACV,CAAC;AAEN;AAEA,SAASF,IAAI,EAAEgB,WAAW,EAAEZ,QAAQ,EAAEK,WAAW","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ import * as Slot from '@rn-primitives/slot';
4
+ import { cssInterop } from 'nativewind';
5
+ import * as React from 'react';
6
+ import { Text as RNText } from 'react-native';
7
+ import { cn } from "../../lib/utils.js";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ cssInterop(RNText, {
10
+ className: 'style'
11
+ });
12
+
13
+ /**
14
+ * Context for sharing text class styles with child Text components
15
+ * Used by components like Button, Card, Badge to automatically style nested Text
16
+ */
17
+ const TextClassContext = /*#__PURE__*/React.createContext(undefined);
18
+
19
+ /**
20
+ * Enhanced Text component with NativeWind styling support
21
+ *
22
+ * Extends React Native's Text with:
23
+ * - Automatic style inheritance from TextClassContext
24
+ * - NativeWind className support
25
+ * - Slot pattern support for composition
26
+ * - Web-specific selection styling
27
+ *
28
+ * @component
29
+ * @example
30
+ * ```tsx
31
+ * // Basic text
32
+ * <Text>Hello World</Text>
33
+ *
34
+ * // With custom styling
35
+ * <Text className="text-lg font-bold">Title</Text>
36
+ *
37
+ * // Inside a styled context (e.g., Button)
38
+ * <Button variant="default">
39
+ * <Text>Button Text</Text> // Automatically inherits button text styling
40
+ * </Button>
41
+ *
42
+ * // Using asChild for composition
43
+ * <Text asChild>
44
+ * <Link href="/home">Home</Link>
45
+ * </Text>
46
+ * ```
47
+ *
48
+ * @property {string} [className] - Additional Tailwind classes
49
+ * @property {boolean} [asChild] - When true, merges props into immediate child
50
+ */
51
+ const Text = /*#__PURE__*/React.forwardRef(({
52
+ className,
53
+ asChild = false,
54
+ style,
55
+ ...props
56
+ }, ref) => {
57
+ const textClass = React.useContext(TextClassContext);
58
+ const Component = asChild ? Slot.Text : RNText;
59
+ const finalClassName = textClass ? cn('text-base web:select-text', textClass, className) : cn('text-base text-foreground web:select-text', className);
60
+ return /*#__PURE__*/_jsx(Component, {
61
+ className: finalClassName,
62
+ style: style,
63
+ ref: ref,
64
+ ...props
65
+ });
66
+ });
67
+ Text.displayName = 'Text';
68
+ export { Text, TextClassContext };
69
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Slot","cssInterop","React","Text","RNText","cn","jsx","_jsx","className","TextClassContext","createContext","undefined","forwardRef","asChild","style","props","ref","textClass","useContext","Component","finalClassName","displayName"],"sourceRoot":"../../../../src","sources":["components/ui/Text.tsx"],"mappings":";;AAAA,OAAO,KAAKA,IAAI,MAAM,qBAAqB;AAE3C,SAASC,UAAU,QAAQ,YAAY;AACvC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAASC,IAAI,IAAIC,MAAM,QAAQ,cAAc;AAC7C,SAASC,EAAE,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAErCN,UAAU,CAACG,MAAM,EAAE;EAAEI,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,gBAAGP,KAAK,CAACQ,aAAa,CAAqBC,SAAS,CAAC;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMR,IAAI,gBAAGD,KAAK,CAACU,UAAU,CAM3B,CAAC;EAAEJ,SAAS;EAAEK,OAAO,GAAG,KAAK;EAAEC,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EAC1D,MAAMC,SAAS,GAAGf,KAAK,CAACgB,UAAU,CAACT,gBAAgB,CAAC;EACpD,MAAMU,SAAS,GAAGN,OAAO,GAAGb,IAAI,CAACG,IAAI,GAAGC,MAAM;EAE9C,MAAMgB,cAAc,GAAGH,SAAS,GAC5BZ,EAAE,CAAC,2BAA2B,EAAEY,SAAS,EAAET,SAAS,CAAC,GACrDH,EAAE,CAAC,2CAA2C,EAAEG,SAAS,CAAC;EAE9D,oBACED,IAAA,CAACY,SAAS;IACRX,SAAS,EAAEY,cAAe;IAC1BN,KAAK,EAAEA,KAAM;IACbE,GAAG,EAAEA,GAAW;IAAA,GACZD;EAAK,CACV,CAAC;AAEN,CAAC,CAAC;AACFZ,IAAI,CAACkB,WAAW,GAAG,MAAM;AAEzB,SAASlB,IAAI,EAAEM,gBAAgB","ignoreList":[]}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ import { cn } from "../../lib/utils.js";
4
+ import { Platform, TextInput } from 'react-native';
5
+ import { cssInterop } from 'nativewind';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ cssInterop(TextInput, {
8
+ className: 'style'
9
+ });
10
+
11
+ /**
12
+ * Props for Textarea component
13
+ *
14
+ * @extends TextInputProps - All React Native TextInput properties
15
+ * @property {string} [className] - Additional Tailwind classes for styling
16
+ * @property {string} [placeholderClassName] - Tailwind classes for placeholder text styling
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <Textarea
21
+ * placeholder="Enter your message"
22
+ * value={message}
23
+ * onChangeText={setMessage}
24
+ * numberOfLines={4}
25
+ * />
26
+ * ```
27
+ */
28
+
29
+ /**
30
+ * Multi-line text input component
31
+ *
32
+ * A textarea component for longer text input with configurable height and styling.
33
+ * Automatically configured for multi-line input with appropriate platform-specific defaults.
34
+ *
35
+ * @component
36
+ * @example
37
+ * ```tsx
38
+ * // Basic textarea
39
+ * <Textarea
40
+ * placeholder="Enter description"
41
+ * value={description}
42
+ * onChangeText={setDescription}
43
+ * />
44
+ *
45
+ * // Controlled textarea with validation
46
+ * <Textarea
47
+ * value={bio}
48
+ * onChangeText={setBio}
49
+ * placeholder="Tell us about yourself"
50
+ * numberOfLines={6}
51
+ * maxLength={500}
52
+ * />
53
+ *
54
+ * // Disabled textarea
55
+ * <Textarea value={content} editable={false} />
56
+ * ```
57
+ *
58
+ * @accessibility
59
+ * - Supports standard TextInput accessibility props
60
+ * - Placeholder text with appropriate color contrast
61
+ * - Focus states on web for keyboard navigation
62
+ * - Disabled state with reduced opacity
63
+ */
64
+ function Textarea({
65
+ className,
66
+ multiline = true,
67
+ numberOfLines = Platform.select({
68
+ web: 2,
69
+ native: 8
70
+ }),
71
+ placeholderClassName,
72
+ editable = true,
73
+ ...props
74
+ }) {
75
+ return /*#__PURE__*/_jsx(TextInput, {
76
+ className: cn('text-foreground border-input dark:bg-input/30 flex min-h-16 w-full flex-row rounded-md border bg-transparent px-3 py-2 text-base shadow-sm shadow-black/5 md:text-sm', Platform.select({
77
+ web: 'placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive field-sizing-content resize-y outline-none transition-[color,box-shadow] focus-visible:ring-[3px] disabled:cursor-not-allowed'
78
+ }), !editable && 'opacity-50', className),
79
+ placeholderClassName: cn('text-muted-foreground', placeholderClassName),
80
+ multiline: multiline,
81
+ numberOfLines: numberOfLines,
82
+ textAlignVertical: "top",
83
+ editable: editable,
84
+ ...props
85
+ });
86
+ }
87
+ export { Textarea };
88
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cn","Platform","TextInput","cssInterop","jsx","_jsx","className","Textarea","multiline","numberOfLines","select","web","native","placeholderClassName","editable","props","textAlignVertical"],"sourceRoot":"../../../../src","sources":["components/ui/Textarea.tsx"],"mappings":";;AAAA,SAASA,EAAE,QAAQ,oBAAiB;AACpC,SAASC,QAAQ,EAAEC,SAAS,QAA6B,cAAc;AACvE,SAASC,UAAU,QAAQ,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAExCF,UAAU,CAACD,SAAS,EAAE;EAAEI,SAAS,EAAE;AAAQ,CAAC,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,QAAQA,CAAC;EAChBD,SAAS;EACTE,SAAS,GAAG,IAAI;EAChBC,aAAa,GAAGR,QAAQ,CAACS,MAAM,CAAC;IAAEC,GAAG,EAAE,CAAC;IAAEC,MAAM,EAAE;EAAE,CAAC,CAAC;EACtDC,oBAAoB;EACpBC,QAAQ,GAAG,IAAI;EACf,GAAGC;AAC2C,CAAC,EAAE;EACjD,oBACEV,IAAA,CAACH,SAAS;IACRI,SAAS,EAAEN,EAAE,CACX,sKAAsK,EACtKC,QAAQ,CAACS,MAAM,CAAC;MACdC,GAAG,EAAE;IACP,CAAC,CAAC,EACF,CAACG,QAAQ,IAAI,YAAY,EACzBR,SACF,CAAE;IACFO,oBAAoB,EAAEb,EAAE,CAAC,uBAAuB,EAAEa,oBAAoB,CAAE;IACxEL,SAAS,EAAEA,SAAU;IACrBC,aAAa,EAAEA,aAAc;IAC7BO,iBAAiB,EAAC,KAAK;IACvBF,QAAQ,EAAEA,QAAS;IAAA,GACfC;EAAK,CACV,CAAC;AAEN;AAEA,SAASR,QAAQ","ignoreList":[]}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ import * as React from 'react';
4
+ import { View, Pressable } from 'react-native';
5
+ import { cssInterop } from 'nativewind';
6
+ import { Moon, Sun, Monitor } from 'lucide-react-native';
7
+ import { cn } from "../../lib/utils.js";
8
+ import { useTheme } from "../../lib/ThemeProvider.js";
9
+ import { Icon } from "./Icon.js";
10
+ import { Text } from "./Text.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ cssInterop(View, {
13
+ className: 'style'
14
+ });
15
+ cssInterop(Pressable, {
16
+ className: 'style'
17
+ });
18
+
19
+ /**
20
+ * Theme toggle button variants
21
+ */
22
+
23
+ /**
24
+ * Props for ThemeToggle component
25
+ *
26
+ * @property {'icon' | 'button' | 'segmented'} [variant='icon'] - Visual style variant
27
+ * @property {boolean} [showLabel=false] - Show text label next to icon (for button variant)
28
+ * @property {string} [className] - Additional Tailwind classes
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * // Icon only (default)
33
+ * <ThemeToggle />
34
+ *
35
+ * // Button with label
36
+ * <ThemeToggle variant="button" showLabel />
37
+ *
38
+ * // Segmented control
39
+ * <ThemeToggle variant="segmented" />
40
+ * ```
41
+ */
42
+
43
+ /**
44
+ * Theme toggle component for switching between light, dark, and system themes
45
+ *
46
+ * Provides three variants:
47
+ * - **icon**: Simple icon button that cycles through themes (light → dark → system)
48
+ * - **button**: Button with icon and optional label
49
+ * - **segmented**: Segmented control showing all three options
50
+ *
51
+ * @component
52
+ * @example
53
+ * ```tsx
54
+ * // Icon toggle (minimal)
55
+ * <ThemeToggle />
56
+ *
57
+ * // Button with label
58
+ * <ThemeToggle variant="button" showLabel />
59
+ *
60
+ * // Segmented control (shows all options)
61
+ * <ThemeToggle variant="segmented" />
62
+ *
63
+ * // Custom styling
64
+ * <ThemeToggle className="my-4" />
65
+ * ```
66
+ *
67
+ * @accessibility
68
+ * - Proper button role for screen readers
69
+ * - Announces current theme state
70
+ * - Keyboard navigable on web
71
+ */
72
+ const ThemeToggle = /*#__PURE__*/React.forwardRef(({
73
+ variant = 'icon',
74
+ showLabel = false,
75
+ className,
76
+ ...props
77
+ }, ref) => {
78
+ const {
79
+ mode,
80
+ isDark,
81
+ setMode
82
+ } = useTheme();
83
+
84
+ // Cycle through themes: light → dark → system → light
85
+ const cycleTheme = () => {
86
+ const nextMode = mode === 'light' ? 'dark' : mode === 'dark' ? 'system' : 'light';
87
+ setMode(nextMode);
88
+ };
89
+ if (variant === 'segmented') {
90
+ return /*#__PURE__*/_jsx(View, {
91
+ ref: ref,
92
+ className: cn('flex-row bg-muted dark:bg-muted rounded-lg p-1', className),
93
+ ...props,
94
+ children: ['light', 'dark', 'system'].map(themeMode => {
95
+ const isActive = mode === themeMode;
96
+ const IconComponent = themeMode === 'light' ? Sun : themeMode === 'dark' ? Moon : Monitor;
97
+ return /*#__PURE__*/_jsxs(Pressable, {
98
+ onPress: () => setMode(themeMode),
99
+ className: cn('flex-1 flex-row items-center justify-center rounded-md px-3 py-2 transition-colors', isActive ? 'bg-background dark:bg-background shadow-sm' : 'active:bg-background/50 dark:active:bg-background/50'),
100
+ role: "button",
101
+ accessibilityLabel: `Switch to ${themeMode} theme`,
102
+ accessibilityState: {
103
+ selected: isActive
104
+ },
105
+ children: [/*#__PURE__*/_jsx(Icon, {
106
+ as: IconComponent,
107
+ size: 16,
108
+ className: cn(isActive ? 'text-foreground dark:text-foreground' : 'text-muted-foreground dark:text-muted-foreground')
109
+ }), /*#__PURE__*/_jsx(Text, {
110
+ className: cn('ml-2 text-sm font-medium capitalize', isActive ? 'text-foreground dark:text-foreground' : 'text-muted-foreground dark:text-muted-foreground'),
111
+ children: themeMode
112
+ })]
113
+ }, themeMode);
114
+ })
115
+ });
116
+ }
117
+ if (variant === 'button') {
118
+ const IconComponent = isDark ? Moon : Sun;
119
+ const label = mode === 'system' ? 'System' : isDark ? 'Dark' : 'Light';
120
+ return /*#__PURE__*/_jsxs(Pressable, {
121
+ ref: ref,
122
+ onPress: cycleTheme,
123
+ className: cn('flex-row items-center justify-center rounded-md px-4 py-2', 'bg-secondary dark:bg-secondary active:opacity-80', className),
124
+ role: "button",
125
+ accessibilityLabel: `Current theme: ${label}. Tap to change.`,
126
+ ...props,
127
+ children: [/*#__PURE__*/_jsx(Icon, {
128
+ as: IconComponent,
129
+ size: 16,
130
+ className: "text-secondary-foreground dark:text-secondary-foreground"
131
+ }), showLabel && /*#__PURE__*/_jsx(Text, {
132
+ className: "ml-2 text-sm font-medium text-secondary-foreground dark:text-secondary-foreground",
133
+ children: label
134
+ })]
135
+ });
136
+ }
137
+
138
+ // Default: icon variant
139
+ const IconComponent = mode === 'system' ? Monitor : isDark ? Moon : Sun;
140
+ return /*#__PURE__*/_jsx(Pressable, {
141
+ ref: ref,
142
+ onPress: cycleTheme,
143
+ className: cn('h-10 w-10 items-center justify-center rounded-md', 'active:bg-accent dark:active:bg-accent', 'web:hover:bg-accent/50 dark:web:hover:bg-accent/50', 'web:transition-colors', className),
144
+ role: "button",
145
+ accessibilityLabel: `Current theme: ${mode}. Tap to cycle themes.`,
146
+ ...props,
147
+ children: /*#__PURE__*/_jsx(Icon, {
148
+ as: IconComponent,
149
+ size: 20,
150
+ className: "text-foreground dark:text-foreground"
151
+ })
152
+ });
153
+ });
154
+ ThemeToggle.displayName = 'ThemeToggle';
155
+ export { ThemeToggle };
156
+ //# sourceMappingURL=Theme-Toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","Pressable","cssInterop","Moon","Sun","Monitor","cn","useTheme","Icon","Text","jsx","_jsx","jsxs","_jsxs","className","ThemeToggle","forwardRef","variant","showLabel","props","ref","mode","isDark","setMode","cycleTheme","nextMode","children","map","themeMode","isActive","IconComponent","onPress","role","accessibilityLabel","accessibilityState","selected","as","size","label","displayName"],"sourceRoot":"../../../../src","sources":["components/ui/Theme-Toggle.tsx"],"mappings":"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","ignoreList":[]}