@sincpro/mobile-ui 0.7.2 → 1.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 (313) hide show
  1. package/README.md +575 -230
  2. package/dist/Actions/Actions.Button.d.ts +98 -93
  3. package/dist/Actions/Actions.Button.js +58 -52
  4. package/dist/Actions/Actions.FAB.d.ts +3 -1
  5. package/dist/Actions/Actions.FAB.js +12 -8
  6. package/dist/Actions/Actions.FilterButton.d.ts +10 -2
  7. package/dist/Actions/Actions.FilterButton.js +23 -8
  8. package/dist/Actions/Actions.IconButton.d.ts +36 -33
  9. package/dist/Actions/Actions.IconButton.js +10 -6
  10. package/dist/Actions/index.d.ts +12 -12
  11. package/dist/Actions/index.js +6 -6
  12. package/dist/Dialog/BottomSheet/BottomSheet.Root.js +1 -1
  13. package/dist/Dialog/BottomSheet/index.d.ts +1 -1
  14. package/dist/Dialog/BottomSheet/index.js +1 -1
  15. package/dist/Dialog/Confirmation.context.js +3 -3
  16. package/dist/Dialog/Dialog.ActionSheet.d.ts +2 -1
  17. package/dist/Dialog/Dialog.ActionSheet.js +19 -9
  18. package/dist/Dialog/Dialog.Confirmation.js +7 -7
  19. package/dist/Dialog/Dialog.EditValue.js +4 -4
  20. package/dist/Dialog/Dialog.NativeSheet.d.ts +10 -0
  21. package/dist/Dialog/Dialog.NativeSheet.js +21 -0
  22. package/dist/Dialog/Dialog.Sheet.d.ts +5 -1
  23. package/dist/Dialog/Dialog.Sheet.js +19 -11
  24. package/dist/Dialog/index.d.ts +5 -5
  25. package/dist/Dialog/index.js +5 -5
  26. package/dist/Display/Display.Accordion.js +5 -5
  27. package/dist/Display/Display.Avatar.d.ts +30 -30
  28. package/dist/Display/Display.Avatar.js +2 -2
  29. package/dist/Display/Display.AvatarGroup.js +3 -3
  30. package/dist/Display/Display.Badge.d.ts +3 -3
  31. package/dist/Display/Display.Badge.js +1 -1
  32. package/dist/Display/Display.Card.d.ts +15 -15
  33. package/dist/Display/Display.Card.js +4 -4
  34. package/dist/Display/Display.Carousel.js +2 -2
  35. package/dist/Display/Display.Chip.d.ts +3 -3
  36. package/dist/Display/Display.Chip.js +12 -12
  37. package/dist/Display/Display.CircleButton.d.ts +1 -1
  38. package/dist/Display/Display.CircleButton.js +3 -3
  39. package/dist/Display/Display.CopyableText.d.ts +9 -2
  40. package/dist/Display/Display.CopyableText.js +76 -8
  41. package/dist/Display/Display.CountRecords.js +2 -2
  42. package/dist/Display/Display.DataTable.js +2 -2
  43. package/dist/Display/Display.Date.d.ts +1 -1
  44. package/dist/Display/Display.Date.js +5 -5
  45. package/dist/Display/Display.Divider.d.ts +24 -24
  46. package/dist/Display/Display.Divider.js +1 -1
  47. package/dist/Display/Display.GradientSurface.d.ts +58 -39
  48. package/dist/Display/Display.GradientSurface.js +31 -15
  49. package/dist/Display/Display.Icon.d.ts +1 -1
  50. package/dist/Display/Display.Icon.js +2 -1
  51. package/dist/Display/Display.IconBadge.js +3 -3
  52. package/dist/Display/Display.Image.js +4 -4
  53. package/dist/Display/Display.KeyValue.d.ts +11 -4
  54. package/dist/Display/Display.KeyValue.js +8 -6
  55. package/dist/Display/Display.ListGroup.d.ts +23 -0
  56. package/dist/Display/Display.ListGroup.js +17 -0
  57. package/dist/Display/Display.ListItem.d.ts +16 -2
  58. package/dist/Display/Display.ListItem.js +29 -12
  59. package/dist/Display/Display.Logo.d.ts +3 -3
  60. package/dist/Display/Display.Logo.js +2 -2
  61. package/dist/Display/Display.MediaCard.js +4 -4
  62. package/dist/Display/Display.MediaEmbed.js +7 -7
  63. package/dist/Display/Display.MenuButton.d.ts +4 -4
  64. package/dist/Display/Display.MenuButton.js +6 -6
  65. package/dist/Display/Display.MenuCard.d.ts +1 -1
  66. package/dist/Display/Display.MenuCard.js +3 -3
  67. package/dist/Display/Display.MenuGrid.d.ts +1 -1
  68. package/dist/Display/Display.MenuGrid.js +1 -1
  69. package/dist/Display/Display.Monetary.d.ts +1 -1
  70. package/dist/Display/Display.Monetary.js +2 -2
  71. package/dist/Display/Display.Pattern.d.ts +33 -12
  72. package/dist/Display/Display.Pattern.js +60 -14
  73. package/dist/Display/Display.PriceTag.js +2 -2
  74. package/dist/Display/Display.ProductCard.js +7 -7
  75. package/dist/Display/Display.Rating.js +3 -3
  76. package/dist/Display/Display.SearchHistory.js +6 -6
  77. package/dist/Display/Display.SectionHeader.d.ts +11 -1
  78. package/dist/Display/Display.SectionHeader.js +14 -5
  79. package/dist/Display/Display.Stat.js +2 -2
  80. package/dist/Display/Display.StatCard.js +4 -4
  81. package/dist/Display/Display.StatusDot.js +3 -3
  82. package/dist/Display/Display.Story.js +3 -3
  83. package/dist/Display/Display.StoryTray.js +5 -5
  84. package/dist/Display/Display.StoryViewer.js +4 -4
  85. package/dist/Display/Display.SwipeableRow.d.ts +3 -1
  86. package/dist/Display/Display.SwipeableRow.js +7 -7
  87. package/dist/Display/Display.Tag.js +2 -2
  88. package/dist/Display/Display.Timeline.js +4 -4
  89. package/dist/Display/Display.Tooltip.js +3 -3
  90. package/dist/Display/index.d.ts +49 -45
  91. package/dist/Display/index.js +44 -42
  92. package/dist/Feedback/ErrorBoundary.d.ts +1 -1
  93. package/dist/Feedback/ErrorBoundary.js +1 -1
  94. package/dist/Feedback/Feedback.Banner.d.ts +3 -3
  95. package/dist/Feedback/Feedback.Banner.js +6 -6
  96. package/dist/Feedback/Feedback.DomainSplashScreen.js +5 -4
  97. package/dist/Feedback/Feedback.Empty.js +3 -3
  98. package/dist/Feedback/Feedback.EmptyState.d.ts +2 -1
  99. package/dist/Feedback/Feedback.EmptyState.js +7 -7
  100. package/dist/Feedback/Feedback.Error.d.ts +3 -1
  101. package/dist/Feedback/Feedback.Error.js +7 -6
  102. package/dist/Feedback/Feedback.Loading.d.ts +1 -1
  103. package/dist/Feedback/Feedback.Loading.js +2 -2
  104. package/dist/Feedback/Feedback.PermissionCard.js +5 -5
  105. package/dist/Feedback/Feedback.Progress.js +2 -2
  106. package/dist/Feedback/Feedback.ProgressCircle.js +1 -1
  107. package/dist/Feedback/Feedback.Skeleton.js +2 -2
  108. package/dist/Feedback/Feedback.Spinner.js +3 -3
  109. package/dist/Feedback/Feedback.Splash.d.ts +1 -1
  110. package/dist/Feedback/Feedback.Splash.js +7 -6
  111. package/dist/Feedback/Toast.context.js +7 -7
  112. package/dist/Feedback/index.d.ts +13 -13
  113. package/dist/Feedback/index.js +13 -13
  114. package/dist/Form/Form.Button.d.ts +2 -2
  115. package/dist/Form/Form.Button.js +1 -1
  116. package/dist/Form/Form.Checkbox.d.ts +4 -1
  117. package/dist/Form/Form.Checkbox.js +5 -5
  118. package/dist/Form/Form.ControlledCheckbox.js +1 -1
  119. package/dist/Form/Form.ControlledInput.js +1 -1
  120. package/dist/Form/Form.ControlledMonetaryInput.js +1 -1
  121. package/dist/Form/Form.ControlledRadioButton.js +1 -1
  122. package/dist/Form/Form.DatePicker.d.ts +2 -1
  123. package/dist/Form/Form.DatePicker.js +8 -7
  124. package/dist/Form/Form.Dropdown.js +7 -7
  125. package/dist/Form/Form.FAB.d.ts +2 -2
  126. package/dist/Form/Form.FAB.js +1 -1
  127. package/dist/Form/Form.FilterButton.d.ts +2 -2
  128. package/dist/Form/Form.FilterButton.js +1 -1
  129. package/dist/Form/Form.FractionalQuantityInput.js +4 -4
  130. package/dist/Form/Form.IconButton.d.ts +2 -2
  131. package/dist/Form/Form.IconButton.js +1 -1
  132. package/dist/Form/Form.Input.d.ts +5 -3
  133. package/dist/Form/Form.Input.js +5 -5
  134. package/dist/Form/Form.InputField.d.ts +1 -1
  135. package/dist/Form/Form.InputField.js +3 -3
  136. package/dist/Form/Form.KeyboardForm.d.ts +11 -0
  137. package/dist/Form/Form.KeyboardForm.js +9 -0
  138. package/dist/Form/Form.KeyboardToolbar.d.ts +21 -0
  139. package/dist/Form/Form.KeyboardToolbar.js +70 -0
  140. package/dist/Form/Form.MonetaryInput.js +5 -4
  141. package/dist/Form/Form.PasswordInput.d.ts +1 -1
  142. package/dist/Form/Form.PasswordInput.js +3 -3
  143. package/dist/Form/Form.PinInput.js +5 -5
  144. package/dist/Form/Form.QuantitySelector.js +3 -3
  145. package/dist/Form/Form.RadioButton.js +4 -4
  146. package/dist/Form/Form.SearchBar.js +4 -4
  147. package/dist/Form/Form.Select.d.ts +3 -1
  148. package/dist/Form/Form.Select.js +27 -14
  149. package/dist/Form/Form.Slider.js +3 -3
  150. package/dist/Form/Form.Switch.js +4 -4
  151. package/dist/Form/Form.TextInput.js +3 -3
  152. package/dist/Form/index.d.ts +33 -27
  153. package/dist/Form/index.js +29 -25
  154. package/dist/Navigation/Navigation.AppBar.d.ts +11 -6
  155. package/dist/Navigation/Navigation.AppBar.js +16 -16
  156. package/dist/Navigation/Navigation.BottomNav.d.ts +4 -2
  157. package/dist/Navigation/Navigation.BottomNav.js +34 -21
  158. package/dist/Navigation/Navigation.CollapsingHeader.d.ts +1 -1
  159. package/dist/Navigation/Navigation.CollapsingHeader.js +3 -3
  160. package/dist/Navigation/Navigation.FloatingBar.js +2 -2
  161. package/dist/Navigation/Navigation.Header.js +6 -6
  162. package/dist/Navigation/Navigation.HeaderToolbar.js +5 -5
  163. package/dist/Navigation/Navigation.Menu.js +6 -6
  164. package/dist/Navigation/Navigation.MenuSection.js +2 -2
  165. package/dist/Navigation/Navigation.RowItem.d.ts +2 -2
  166. package/dist/Navigation/Navigation.RowItem.js +4 -4
  167. package/dist/Navigation/Navigation.SearchBar.d.ts +6 -1
  168. package/dist/Navigation/Navigation.SearchBar.js +33 -12
  169. package/dist/Navigation/Navigation.SearchSuggestions.d.ts +14 -0
  170. package/dist/Navigation/Navigation.SearchSuggestions.js +7 -0
  171. package/dist/Navigation/Navigation.SegmentedControl.d.ts +3 -1
  172. package/dist/Navigation/Navigation.SegmentedControl.js +6 -5
  173. package/dist/Navigation/Navigation.Steps.js +5 -5
  174. package/dist/Navigation/Navigation.TabIcon.js +2 -2
  175. package/dist/Navigation/Navigation.TabItem.js +2 -2
  176. package/dist/Navigation/Navigation.Tabs.js +5 -5
  177. package/dist/Navigation/index.d.ts +23 -19
  178. package/dist/Navigation/index.js +17 -15
  179. package/dist/Typography/Typography.Heading.d.ts +1 -1
  180. package/dist/Typography/Typography.Heading.js +2 -2
  181. package/dist/Typography/Typography.SelectableText.d.ts +10 -0
  182. package/dist/Typography/Typography.SelectableText.js +16 -0
  183. package/dist/Typography/Typography.Text.d.ts +2 -2
  184. package/dist/Typography/Typography.Text.js +5 -19
  185. package/dist/Typography/index.d.ts +5 -2
  186. package/dist/Typography/index.js +5 -2
  187. package/dist/branding.d.ts +22 -0
  188. package/dist/branding.js +20 -3
  189. package/dist/icons/AddItemIcon.d.ts +1 -1
  190. package/dist/icons/ArrangeCircle.d.ts +1 -1
  191. package/dist/icons/ArrowDownIcon.d.ts +1 -1
  192. package/dist/icons/ArrowUpIcon.d.ts +1 -1
  193. package/dist/icons/BoxIcon.d.ts +1 -1
  194. package/dist/icons/BoxTimeIcon.d.ts +1 -1
  195. package/dist/icons/CalendarIcon.d.ts +1 -1
  196. package/dist/icons/CardIcon.d.ts +1 -1
  197. package/dist/icons/CashierIcon.d.ts +1 -1
  198. package/dist/icons/DuoIcon.d.ts +1 -1
  199. package/dist/icons/HomeIcon.d.ts +1 -1
  200. package/dist/icons/HomeIconOutlined.d.ts +1 -1
  201. package/dist/icons/LogoIcon.d.ts +1 -1
  202. package/dist/icons/MoneyReceiveIcon.d.ts +1 -1
  203. package/dist/icons/PinIcon.d.ts +1 -1
  204. package/dist/icons/PrinterIcon.d.ts +1 -1
  205. package/dist/icons/ProfileIcon.d.ts +1 -1
  206. package/dist/icons/SettingsIcon.d.ts +1 -1
  207. package/dist/icons/SinpeIcon.d.ts +1 -1
  208. package/dist/icons/ToggleOffIcon.d.ts +1 -1
  209. package/dist/icons/WalletMoneyIcon.d.ts +1 -1
  210. package/dist/index.d.ts +24 -23
  211. package/dist/index.js +26 -24
  212. package/dist/layouts/AuthContainer.d.ts +9 -3
  213. package/dist/layouts/AuthContainer.js +8 -8
  214. package/dist/layouts/Container.js +1 -1
  215. package/dist/layouts/GradientContainer.js +1 -1
  216. package/dist/layouts/ScrollContainer.js +1 -1
  217. package/dist/layouts/TabNavigatorLayout.js +4 -4
  218. package/dist/primitives/AspectRatio.js +1 -1
  219. package/dist/primitives/BaseButton.d.ts +92 -87
  220. package/dist/primitives/BaseButton.js +52 -54
  221. package/dist/primitives/Box.js +1 -1
  222. package/dist/primitives/Pressable.js +1 -1
  223. package/dist/primitives/Row.js +1 -1
  224. package/dist/primitives/Stack.js +1 -1
  225. package/dist/primitives/index.d.ts +6 -6
  226. package/dist/primitives/index.js +6 -6
  227. package/dist/theme/active.d.ts +1 -1
  228. package/dist/theme/active.js +14 -1
  229. package/dist/theme/build.d.ts +33 -0
  230. package/dist/theme/build.js +118 -0
  231. package/dist/theme/color.d.ts +26 -0
  232. package/dist/theme/color.js +109 -0
  233. package/dist/theme/components/index.d.ts +1 -1
  234. package/dist/theme/components/index.js +1 -1
  235. package/dist/theme/contrast.d.ts +29 -0
  236. package/dist/theme/contrast.js +57 -0
  237. package/dist/theme/css-vars.d.ts +3 -1
  238. package/dist/theme/css-vars.js +29 -3
  239. package/dist/theme/dark.d.ts +3 -4
  240. package/dist/theme/dark.js +91 -48
  241. package/dist/theme/default.d.ts +5 -1
  242. package/dist/theme/default.js +89 -41
  243. package/dist/theme/define.d.ts +4 -1
  244. package/dist/theme/define.js +4 -1
  245. package/dist/theme/globals.css +61 -46
  246. package/dist/theme/index.d.ts +14 -10
  247. package/dist/theme/index.js +13 -9
  248. package/dist/theme/theme.d.ts +1 -1
  249. package/dist/theme/theme.js +2 -2
  250. package/dist/theme/types.d.ts +77 -16
  251. package/dist/theme/types.js +13 -3
  252. package/dist/theme/typography.d.ts +19 -4
  253. package/dist/theme/typography.js +45 -28
  254. package/dist/theme/useTheme.d.ts +1 -1
  255. package/dist/theme/useTheme.js +1 -1
  256. package/dist/theme/validate.d.ts +16 -0
  257. package/dist/theme/validate.js +200 -0
  258. package/dist/tokens/index.d.ts +2 -2
  259. package/dist/tokens/index.js +2 -2
  260. package/dist/utils/criteria.d.ts +56 -0
  261. package/dist/utils/criteria.js +99 -0
  262. package/dist/utils/reorder.d.ts +4 -0
  263. package/dist/utils/reorder.js +32 -0
  264. package/dist/views/AppSplashView.d.ts +2 -2
  265. package/dist/views/AppSplashView.js +3 -3
  266. package/dist/views/AuthFormView.d.ts +5 -2
  267. package/dist/views/AuthFormView.js +5 -5
  268. package/dist/views/FormViewV2.d.ts +9 -4
  269. package/dist/views/FormViewV2.js +44 -25
  270. package/dist/views/ListViewV2.d.ts +12 -9
  271. package/dist/views/ListViewV2.js +49 -36
  272. package/dist/views/Wizard/Wizard.context.js +1 -1
  273. package/dist/views/Wizard/Wizard.d.ts +1 -1
  274. package/dist/views/Wizard/Wizard.js +1 -1
  275. package/dist/views/Wizard/index.d.ts +4 -4
  276. package/dist/views/Wizard/index.js +2 -2
  277. package/dist/views/types/IFormView.d.ts +1 -1
  278. package/dist/views/types/IListView.d.ts +1 -1
  279. package/dist/widgets/CircleButton.d.ts +2 -2
  280. package/dist/widgets/CircleButton.js +1 -1
  281. package/dist/widgets/CollectionOptions.d.ts +15 -0
  282. package/dist/widgets/CollectionOptions.js +127 -0
  283. package/dist/widgets/FilterBar.d.ts +21 -0
  284. package/dist/widgets/FilterBar.js +14 -0
  285. package/dist/widgets/FilterBuilder.d.ts +10 -0
  286. package/dist/widgets/FilterBuilder.js +115 -0
  287. package/dist/widgets/GeoPermissionCard.js +3 -3
  288. package/dist/widgets/HomeHeader.js +3 -3
  289. package/dist/widgets/JSONViewer.js +2 -2
  290. package/dist/widgets/MenuCard.d.ts +2 -2
  291. package/dist/widgets/MenuCard.js +1 -1
  292. package/dist/widgets/MenuGrid.d.ts +3 -3
  293. package/dist/widgets/MenuGrid.js +1 -1
  294. package/dist/widgets/MenuSection.d.ts +2 -2
  295. package/dist/widgets/MenuSection.js +1 -1
  296. package/dist/widgets/PromoBanner.js +3 -3
  297. package/dist/widgets/PromoModal.js +3 -3
  298. package/dist/widgets/QueryChoice.d.ts +10 -0
  299. package/dist/widgets/QueryChoice.js +13 -0
  300. package/dist/widgets/QuickActions.js +3 -3
  301. package/dist/widgets/ReorderableList.d.ts +51 -0
  302. package/dist/widgets/ReorderableList.js +138 -0
  303. package/dist/widgets/ScreenHeader.js +2 -2
  304. package/dist/widgets/TimeZoneSelector.d.ts +1 -1
  305. package/dist/widgets/TimeZoneSelector.js +4 -4
  306. package/dist/widgets/TimeZoneSelectorModal.d.ts +1 -1
  307. package/dist/widgets/TimeZoneSelectorModal.js +5 -5
  308. package/dist/widgets/index.d.ts +20 -16
  309. package/dist/widgets/index.js +13 -10
  310. package/package.json +70 -50
  311. package/tailwind.preset.js +19 -0
  312. package/dist/icons/icon_getters.d.ts +0 -6
  313. package/dist/icons/icon_getters.js +0 -23
@@ -1,134 +1,135 @@
1
- import { type VariantProps } from "../theme/tw";
1
+ import { type VariantProps } from "../theme/tw.js";
2
2
  import type React from "react";
3
+ import type { AccessibilityProps } from "react-native";
3
4
  declare const button: import("tailwind-variants").TVReturnType<{
4
5
  variant: {
5
- primary: string;
6
- accent: string;
7
- cta: string;
8
- secondary: string;
9
- outline: string;
10
- outlineDanger: string;
11
- outlineBlack: string;
12
- flat: string;
13
- link: string;
14
- transparent: string;
6
+ primary: "bg-accent";
7
+ accent: "bg-transparent";
8
+ cta: "bg-accent";
9
+ secondary: "bg-bg-muted border border-border-strong";
10
+ outline: "bg-transparent border border-primary";
11
+ outlineDanger: "bg-transparent border border-danger";
12
+ outlineBlack: "bg-transparent border border-border-strong";
13
+ flat: "bg-text-primary/10";
14
+ link: "bg-transparent min-h-0";
15
+ transparent: "bg-transparent border border-border-light";
15
16
  };
16
17
  size: {
17
- small: string;
18
- medium: string;
19
- large: string;
18
+ small: "py-1.5 px-3 min-h-[36px]";
19
+ medium: "py-2.5 px-4 min-h-[44px]";
20
+ large: "py-3 px-5 min-h-[48px]";
20
21
  };
21
22
  disabled: {
22
- true: string;
23
+ true: "opacity-70";
23
24
  };
24
- }, undefined, "rounded-[13px] items-center justify-center flex-row min-h-[44px]", {
25
+ }, undefined, "rounded-md items-center justify-center flex-row min-h-[44px]", {
25
26
  variant: {
26
- primary: string;
27
- accent: string;
28
- cta: string;
29
- secondary: string;
30
- outline: string;
31
- outlineDanger: string;
32
- outlineBlack: string;
33
- flat: string;
34
- link: string;
35
- transparent: string;
27
+ primary: "bg-accent";
28
+ accent: "bg-transparent";
29
+ cta: "bg-accent";
30
+ secondary: "bg-bg-muted border border-border-strong";
31
+ outline: "bg-transparent border border-primary";
32
+ outlineDanger: "bg-transparent border border-danger";
33
+ outlineBlack: "bg-transparent border border-border-strong";
34
+ flat: "bg-text-primary/10";
35
+ link: "bg-transparent min-h-0";
36
+ transparent: "bg-transparent border border-border-light";
36
37
  };
37
38
  size: {
38
- small: string;
39
- medium: string;
40
- large: string;
39
+ small: "py-1.5 px-3 min-h-[36px]";
40
+ medium: "py-2.5 px-4 min-h-[44px]";
41
+ large: "py-3 px-5 min-h-[48px]";
41
42
  };
42
43
  disabled: {
43
- true: string;
44
+ true: "opacity-70";
44
45
  };
45
- }, undefined, import("tailwind-variants").TVReturnType<{
46
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
46
47
  variant: {
47
- primary: string;
48
- accent: string;
49
- cta: string;
50
- secondary: string;
51
- outline: string;
52
- outlineDanger: string;
53
- outlineBlack: string;
54
- flat: string;
55
- link: string;
56
- transparent: string;
48
+ primary: "bg-accent";
49
+ accent: "bg-transparent";
50
+ cta: "bg-accent";
51
+ secondary: "bg-bg-muted border border-border-strong";
52
+ outline: "bg-transparent border border-primary";
53
+ outlineDanger: "bg-transparent border border-danger";
54
+ outlineBlack: "bg-transparent border border-border-strong";
55
+ flat: "bg-text-primary/10";
56
+ link: "bg-transparent min-h-0";
57
+ transparent: "bg-transparent border border-border-light";
57
58
  };
58
59
  size: {
59
- small: string;
60
- medium: string;
61
- large: string;
60
+ small: "py-1.5 px-3 min-h-[36px]";
61
+ medium: "py-2.5 px-4 min-h-[44px]";
62
+ large: "py-3 px-5 min-h-[48px]";
62
63
  };
63
64
  disabled: {
64
- true: string;
65
+ true: "opacity-70";
65
66
  };
66
- }, undefined, "rounded-[13px] items-center justify-center flex-row min-h-[44px]", unknown, unknown, undefined>>;
67
+ }, undefined>>;
67
68
  declare const buttonIcon: import("tailwind-variants").TVReturnType<{
68
69
  variant: {
69
- primary: string;
70
- accent: string;
71
- cta: string;
72
- secondary: string;
73
- outline: string;
74
- outlineDanger: string;
75
- outlineBlack: string;
76
- flat: string;
77
- link: string;
78
- transparent: string;
70
+ primary: "bg-accent";
71
+ accent: "bg-transparent";
72
+ cta: "bg-accent";
73
+ secondary: "bg-bg-muted border border-border-strong";
74
+ outline: "bg-transparent border border-primary";
75
+ outlineDanger: "bg-transparent border border-danger";
76
+ outlineBlack: "bg-transparent border border-border-strong";
77
+ flat: "bg-text-primary/10";
78
+ link: "bg-transparent";
79
+ transparent: "bg-transparent border border-border-light";
79
80
  };
80
81
  size: {
81
- small: string;
82
- medium: string;
83
- large: string;
82
+ small: "w-9 h-9";
83
+ medium: "w-11 h-11";
84
+ large: "w-[52px] h-[52px]";
84
85
  };
85
86
  disabled: {
86
- true: string;
87
+ true: "opacity-70";
87
88
  };
88
- }, undefined, "rounded-[13px] items-center justify-center aspect-square", {
89
+ }, undefined, "rounded-md items-center justify-center aspect-square", {
89
90
  variant: {
90
- primary: string;
91
- accent: string;
92
- cta: string;
93
- secondary: string;
94
- outline: string;
95
- outlineDanger: string;
96
- outlineBlack: string;
97
- flat: string;
98
- link: string;
99
- transparent: string;
91
+ primary: "bg-accent";
92
+ accent: "bg-transparent";
93
+ cta: "bg-accent";
94
+ secondary: "bg-bg-muted border border-border-strong";
95
+ outline: "bg-transparent border border-primary";
96
+ outlineDanger: "bg-transparent border border-danger";
97
+ outlineBlack: "bg-transparent border border-border-strong";
98
+ flat: "bg-text-primary/10";
99
+ link: "bg-transparent";
100
+ transparent: "bg-transparent border border-border-light";
100
101
  };
101
102
  size: {
102
- small: string;
103
- medium: string;
104
- large: string;
103
+ small: "w-9 h-9";
104
+ medium: "w-11 h-11";
105
+ large: "w-[52px] h-[52px]";
105
106
  };
106
107
  disabled: {
107
- true: string;
108
+ true: "opacity-70";
108
109
  };
109
- }, undefined, import("tailwind-variants").TVReturnType<{
110
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
110
111
  variant: {
111
- primary: string;
112
- accent: string;
113
- cta: string;
114
- secondary: string;
115
- outline: string;
116
- outlineDanger: string;
117
- outlineBlack: string;
118
- flat: string;
119
- link: string;
120
- transparent: string;
112
+ primary: "bg-accent";
113
+ accent: "bg-transparent";
114
+ cta: "bg-accent";
115
+ secondary: "bg-bg-muted border border-border-strong";
116
+ outline: "bg-transparent border border-primary";
117
+ outlineDanger: "bg-transparent border border-danger";
118
+ outlineBlack: "bg-transparent border border-border-strong";
119
+ flat: "bg-text-primary/10";
120
+ link: "bg-transparent";
121
+ transparent: "bg-transparent border border-border-light";
121
122
  };
122
123
  size: {
123
- small: string;
124
- medium: string;
125
- large: string;
124
+ small: "w-9 h-9";
125
+ medium: "w-11 h-11";
126
+ large: "w-[52px] h-[52px]";
126
127
  };
127
128
  disabled: {
128
- true: string;
129
+ true: "opacity-70";
129
130
  };
130
- }, undefined, "rounded-[13px] items-center justify-center aspect-square", unknown, unknown, undefined>>;
131
- export interface ButtonProps extends VariantProps<typeof button> {
131
+ }, undefined>>;
132
+ export interface ButtonProps extends VariantProps<typeof button>, AccessibilityProps {
132
133
  title: string;
133
134
  onPress?: () => void;
134
135
  confirm?: string;
@@ -136,14 +137,18 @@ export interface ButtonProps extends VariantProps<typeof button> {
136
137
  disabled?: boolean;
137
138
  className?: string;
138
139
  icon?: React.ReactNode;
140
+ testID?: string;
141
+ accessibleSizing?: boolean;
139
142
  }
140
- export interface ButtonIconProps extends VariantProps<typeof buttonIcon> {
143
+ export interface ButtonIconProps extends VariantProps<typeof buttonIcon>, AccessibilityProps {
141
144
  icon: string;
142
145
  onPress?: () => void;
143
146
  confirm?: string;
144
147
  loading?: boolean;
145
148
  disabled?: boolean;
146
149
  className?: string;
150
+ testID?: string;
151
+ accessibleSizing?: boolean;
147
152
  }
148
153
  declare const ButtonWithIcon: React.FC<ButtonProps> & {
149
154
  Icon: React.FC<ButtonIconProps>;
@@ -1,22 +1,20 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "nativewind/jsx-runtime";
2
- import { useConfirmationContext } from "../Dialog/Confirmation.context";
3
- import Icon from "../Display/Display.Icon";
4
- import { theme } from "../theme";
5
- import { tv } from "../theme/tw";
6
- import { Typography } from "../Typography";
7
- import { LinearGradient } from "expo-linear-gradient";
2
+ import { useConfirmationContext } from "../Dialog/Confirmation.context.js";
3
+ import Icon from "../Display/Display.Icon.js";
4
+ import { theme } from "../theme/index.js";
5
+ import { tv } from "../theme/tw.js";
6
+ import { Typography } from "../Typography/index.js";
8
7
  import { useCallback } from "react";
9
8
  import { ActivityIndicator, TouchableOpacity, View } from "react-native";
10
- import { runOnJS } from "react-native-reanimated";
11
9
  // ─── Style variants ───────────────────────────────────────────────────────────
12
10
  const button = tv({
13
- base: "rounded-[13px] items-center justify-center flex-row min-h-[44px]",
11
+ base: "rounded-md items-center justify-center flex-row min-h-[44px]",
14
12
  variants: {
15
13
  variant: {
16
- primary: "shadow-sm",
17
- accent: "shadow-sm",
18
- cta: "shadow-sm",
19
- secondary: "bg-bg-muted",
14
+ primary: "bg-accent",
15
+ accent: "bg-transparent",
16
+ cta: "bg-accent",
17
+ secondary: "bg-bg-muted border border-border-strong",
20
18
  outline: "bg-transparent border border-primary",
21
19
  outlineDanger: "bg-transparent border border-danger",
22
20
  outlineBlack: "bg-transparent border border-border-strong",
@@ -39,13 +37,13 @@ const button = tv({
39
37
  },
40
38
  });
41
39
  const buttonIcon = tv({
42
- base: "rounded-[13px] items-center justify-center aspect-square",
40
+ base: "rounded-md items-center justify-center aspect-square",
43
41
  variants: {
44
42
  variant: {
45
- primary: "shadow-sm",
46
- accent: "shadow-sm",
47
- cta: "shadow-sm",
48
- secondary: "bg-bg-muted",
43
+ primary: "bg-accent",
44
+ accent: "bg-transparent",
45
+ cta: "bg-accent",
46
+ secondary: "bg-bg-muted border border-border-strong",
49
47
  outline: "bg-transparent border border-primary",
50
48
  outlineDanger: "bg-transparent border border-danger",
51
49
  outlineBlack: "bg-transparent border border-border-strong",
@@ -70,26 +68,26 @@ const buttonIcon = tv({
70
68
  const textColor = tv({
71
69
  variants: {
72
70
  variant: {
73
- primary: "text-white",
74
- accent: "text-text-on-accent",
71
+ primary: "text-text-on-accent",
72
+ accent: "text-text-accent",
75
73
  cta: "text-text-on-accent",
76
74
  secondary: "text-text-primary",
77
- outline: "text-primary",
75
+ outline: "text-text-accent",
78
76
  outlineDanger: "text-danger",
79
77
  outlineBlack: "text-text-primary",
80
78
  flat: "text-text-primary",
81
- link: "text-primary",
82
- transparent: "text-white",
79
+ link: "text-text-accent",
80
+ transparent: "text-text-inverse",
83
81
  },
84
82
  disabled: {
85
83
  true: "opacity-50",
86
84
  },
87
85
  },
88
86
  compoundVariants: [
89
- { variant: "primary", disabled: true, className: "text-white/70" },
90
- { variant: "accent", disabled: true, className: "text-text-on-accent" },
87
+ { variant: "primary", disabled: true, className: "text-text-on-accent" },
88
+ { variant: "accent", disabled: true, className: "text-text-accent" },
91
89
  { variant: "cta", disabled: true, className: "text-text-on-accent" },
92
- { variant: "transparent", disabled: true, className: "text-white/70" },
90
+ { variant: "transparent", disabled: true, className: "text-text-inverse/70" },
93
91
  {
94
92
  variant: ["secondary", "outline", "link"],
95
93
  disabled: true,
@@ -104,15 +102,15 @@ const textColor = tv({
104
102
  // ─── Color / size helpers ─────────────────────────────────────────────────────
105
103
  function getLoadingColor(variant) {
106
104
  const map = {
107
- primary: theme.text.inverse,
108
- accent: theme.text.inverse,
109
- cta: theme.text.inverse,
105
+ primary: theme.text.onAccent,
106
+ accent: theme.text.accent,
107
+ cta: theme.text.onAccent,
110
108
  secondary: theme.text.primary,
111
- outline: theme.primary,
109
+ outline: theme.text.accent,
112
110
  outlineDanger: theme.danger,
113
111
  outlineBlack: theme.text.primary,
114
112
  flat: theme.text.primary,
115
- link: theme.primary,
113
+ link: theme.text.accent,
116
114
  transparent: theme.text.inverse,
117
115
  };
118
116
  return map[variant] ?? theme.text.inverse;
@@ -120,8 +118,8 @@ function getLoadingColor(variant) {
120
118
  function getIconColor(variant, disabled) {
121
119
  if (disabled) {
122
120
  const map = {
123
- primary: theme.icon.inverse + "70",
124
- accent: theme.text.onAccent + "70",
121
+ primary: theme.text.onAccent + "70",
122
+ accent: theme.text.accent + "70",
125
123
  cta: theme.text.onAccent + "70",
126
124
  secondary: theme.text.disabled,
127
125
  outline: theme.icon.disabled,
@@ -134,15 +132,15 @@ function getIconColor(variant, disabled) {
134
132
  return map[variant] ?? theme.icon.disabled;
135
133
  }
136
134
  const map = {
137
- primary: theme.icon.inverse,
138
- accent: theme.text.onAccent,
135
+ primary: theme.text.onAccent,
136
+ accent: theme.text.accent,
139
137
  cta: theme.text.onAccent,
140
138
  secondary: theme.text.primary,
141
- outline: theme.primary,
139
+ outline: theme.text.accent,
142
140
  outlineDanger: theme.danger,
143
141
  outlineBlack: theme.text.primary,
144
142
  flat: theme.text.primary,
145
- link: theme.primary,
143
+ link: theme.text.accent,
146
144
  transparent: theme.icon.inverse,
147
145
  };
148
146
  return map[variant] ?? theme.icon.inverse;
@@ -153,7 +151,7 @@ const textVariantMap = {
153
151
  medium: "button",
154
152
  large: "buttonLarge",
155
153
  };
156
- const Button = ({ title, onPress, confirm, variant = "primary", size = "medium", loading = false, disabled = false, className, icon, }) => {
154
+ const Button = ({ title, onPress, confirm, variant = "primary", size = "medium", loading = false, disabled = false, className, icon, testID, accessibleSizing = false, accessibilityLabel, accessibilityState, ...accessibilityProps }) => {
157
155
  const { show, hide } = useConfirmationContext();
158
156
  const textColorClass = textColor({ variant: variant, disabled });
159
157
  const loadingColorValue = getLoadingColor(variant);
@@ -167,25 +165,32 @@ const Button = ({ title, onPress, confirm, variant = "primary", size = "medium",
167
165
  cancelText: "Cancelar",
168
166
  onConfirm: () => {
169
167
  hide();
170
- runOnJS(onPress)();
168
+ onPress();
171
169
  },
172
170
  onCancel: () => hide(),
173
171
  });
174
172
  }
175
173
  else if (onPress) {
176
- runOnJS(onPress)();
174
+ onPress();
177
175
  }
178
176
  }, [onPress, confirm, show, hide]);
179
177
  if (variant === "link") {
180
- return (_jsx(TouchableOpacity, { activeOpacity: 0.7, className: className, disabled: disabled || loading, onPress: handlePress, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsx(Typography.Text, { className: textColorClass, variant: textVariantValue, children: title })) }));
181
- }
182
- if (variant === "primary" || variant === "accent" || variant === "cta") {
183
- const gradientColors = variant === "primary" ? theme.gradient.primary : theme.gradient.accent;
184
- return (_jsx(LinearGradient, { colors: gradientColors, end: { x: 1, y: 1 }, start: { x: 0, y: 0 }, style: { borderRadius: 13, opacity: disabled ? 0.7 : 1 }, children: _jsx(TouchableOpacity, { activeOpacity: 0.8, disabled: disabled || loading, onPress: handlePress, children: _jsx(View, { className: button({ size, disabled }), style: { backgroundColor: "transparent" }, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsxs(_Fragment, { children: [icon ? _jsx(View, { className: "mr-2", children: icon }) : null, _jsx(Typography.Text, { allowFontScaling: false, bold: true, className: textColorClass, ellipsizeMode: "tail", numberOfLines: 1, variant: textVariantValue, children: title })] })) }) }) }));
178
+ return (_jsx(TouchableOpacity, { activeOpacity: 0.7, className: className, disabled: disabled || loading, onPress: handlePress, ...accessibilityProps, accessibilityLabel: accessibilityLabel ?? title, accessibilityRole: "button", accessibilityState: {
179
+ ...accessibilityState,
180
+ disabled: disabled || loading,
181
+ busy: loading,
182
+ }, style: accessibleSizing
183
+ ? { minHeight: 48, minWidth: 48, justifyContent: "center" }
184
+ : undefined, testID: testID, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsx(Typography.Text, { className: textColorClass, variant: textVariantValue, children: title })) }));
185
185
  }
186
- return (_jsx(TouchableOpacity, { activeOpacity: 0.8, className: button({ variant, size, disabled, className }), disabled: disabled || loading, onPress: handlePress, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsxs(_Fragment, { children: [icon ? _jsx(View, { className: "mr-2", children: icon }) : null, _jsx(Typography.Text, { allowFontScaling: false, bold: true, className: textColorClass, ellipsizeMode: "tail", numberOfLines: 1, variant: textVariantValue, children: title })] })) }));
186
+ const emphasize = variant === "primary" || variant === "cta";
187
+ return (_jsx(TouchableOpacity, { activeOpacity: 0.8, className: button({ variant, size, disabled, className }), disabled: disabled || loading, onPress: handlePress, ...accessibilityProps, accessibilityLabel: accessibilityLabel ?? title, accessibilityRole: "button", accessibilityState: {
188
+ ...accessibilityState,
189
+ disabled: disabled || loading,
190
+ busy: loading,
191
+ }, style: accessibleSizing ? { minHeight: 48, minWidth: 48 } : undefined, testID: testID, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsxs(_Fragment, { children: [icon ? _jsx(View, { className: "mr-2", children: icon }) : null, _jsx(Typography.Text, { allowFontScaling: accessibleSizing, className: textColorClass, ellipsizeMode: "tail", numberOfLines: accessibleSizing ? undefined : 1, semibold: emphasize, variant: textVariantValue, children: title })] })) }));
187
192
  };
188
- const ButtonIcon = ({ icon, onPress, confirm, variant = "primary", size = "medium", loading = false, disabled = false, className, }) => {
193
+ const ButtonIcon = ({ icon, onPress, confirm, variant = "primary", size = "medium", loading = false, disabled = false, className, testID, accessibleSizing = false, accessibilityState, ...accessibilityProps }) => {
189
194
  const { show, hide } = useConfirmationContext();
190
195
  const iconColorValue = getIconColor(variant, disabled);
191
196
  const iconSizeValue = iconSizeMap[size] ?? 20;
@@ -199,19 +204,20 @@ const ButtonIcon = ({ icon, onPress, confirm, variant = "primary", size = "mediu
199
204
  cancelText: "Cancelar",
200
205
  onConfirm: () => {
201
206
  hide();
202
- runOnJS(onPress)();
207
+ onPress();
203
208
  },
204
209
  onCancel: () => hide(),
205
210
  });
206
211
  }
207
212
  else if (onPress) {
208
- runOnJS(onPress)();
213
+ onPress();
209
214
  }
210
215
  }, [onPress, confirm, show, hide]);
211
- if (variant === "primary") {
212
- return (_jsx(LinearGradient, { colors: theme.gradient.primary, end: { x: 1, y: 1 }, start: { x: 0, y: 0 }, style: { borderRadius: 13, opacity: disabled ? 0.7 : 1 }, children: _jsx(TouchableOpacity, { activeOpacity: 0.8, disabled: disabled || loading, onPress: handlePress, children: _jsx(View, { className: buttonIcon({ size, disabled }), style: { backgroundColor: "transparent" }, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsx(Icon, { color: iconColorValue, name: icon, size: iconSizeValue })) }) }) }));
213
- }
214
- return (_jsx(TouchableOpacity, { activeOpacity: 0.8, className: buttonIcon({ variant, size, disabled, className }), disabled: disabled || loading, onPress: handlePress, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsx(Icon, { color: iconColorValue, name: icon, size: iconSizeValue })) }));
216
+ return (_jsx(TouchableOpacity, { activeOpacity: 0.8, className: buttonIcon({ variant, size, disabled, className }), disabled: disabled || loading, onPress: handlePress, ...accessibilityProps, accessibilityRole: "button", accessibilityState: {
217
+ ...accessibilityState,
218
+ disabled: disabled || loading,
219
+ busy: loading,
220
+ }, style: accessibleSizing ? { minHeight: 48, minWidth: 48 } : undefined, testID: testID, children: loading ? (_jsx(ActivityIndicator, { color: loadingColorValue, size: "small" })) : (_jsx(Icon, { color: iconColorValue, name: icon, size: iconSizeValue })) }));
215
221
  };
216
222
  const ButtonWithIcon = Object.assign(Button, { Icon: ButtonIcon });
217
223
  export default ButtonWithIcon;
@@ -5,6 +5,8 @@ export interface FABProps {
5
5
  position?: "bottom-right" | "bottom-left";
6
6
  className?: string;
7
7
  testID?: string;
8
+ accessibilityLabel?: string;
9
+ accessibleSizing?: boolean;
8
10
  }
9
- declare function FAB({ icon, onPress, label, position, className, testID, }: FABProps): import("react").JSX.Element;
11
+ declare function FAB({ icon, onPress, label, position, className, testID, accessibilityLabel, accessibleSizing, }: FABProps): import("react").JSX.Element;
10
12
  export default FAB;
@@ -1,17 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
2
- import Icon from "../Display/Display.Icon";
3
- import Pressable from "../primitives/Pressable";
4
- import { theme } from "../theme";
5
- import { cn } from "../theme/tw";
6
- import { Typography } from "../Typography";
2
+ import Icon from "../Display/Display.Icon.js";
3
+ import Pressable from "../primitives/Pressable.js";
4
+ import { theme } from "../theme/index.js";
5
+ import { cn } from "../theme/tw.js";
6
+ import { Typography } from "../Typography/index.js";
7
7
  import { useSafeAreaInsets } from "react-native-safe-area-context";
8
- function FAB({ icon, onPress, label, position = "bottom-right", className, testID, }) {
8
+ function FAB({ icon, onPress, label, position = "bottom-right", className, testID, accessibilityLabel, accessibleSizing = false, }) {
9
9
  const insets = useSafeAreaInsets();
10
- return (_jsxs(Pressable, { accessibilityLabel: label ?? "Acción", accessibilityRole: "button", className: cn("absolute flex-row items-center justify-center rounded-full bg-primary", label ? "h-14 px-5 gap-2" : "w-14 h-14", className), onPress: onPress, style: {
10
+ return (_jsxs(Pressable, { accessibilityLabel: accessibilityLabel ?? label ?? "Acción", accessibilityRole: "button", className: cn("absolute flex-row items-center justify-center rounded-full bg-primary", label
11
+ ? accessibleSizing
12
+ ? "min-h-14 px-5 py-3 gap-2"
13
+ : "h-14 px-5 gap-2"
14
+ : "w-14 h-14", className), onPress: onPress, style: {
11
15
  bottom: insets.bottom + 16,
12
16
  right: position === "bottom-right" ? 16 : undefined,
13
17
  left: position === "bottom-left" ? 16 : undefined,
14
18
  ...theme.shadow.lg,
15
- }, testID: testID, children: [_jsx(Icon, { color: theme.icon.inverse, name: icon, size: 24 }), label ? (_jsx(Typography.Text, { className: "text-text-on-primary font-semibold", children: label })) : null] }));
19
+ }, testID: testID, children: [_jsx(Icon, { color: theme.icon.inverse, name: icon, size: 24 }), label ? (_jsx(Typography.Text, { className: "text-text-on-primary font-semibold", style: accessibleSizing ? { flexShrink: 1 } : undefined, children: label })) : null] }));
16
20
  }
17
21
  export default FAB;
@@ -3,8 +3,16 @@ export interface FilterButtonProps {
3
3
  title: string;
4
4
  active: boolean;
5
5
  onPress: () => void;
6
+ variant?: "default" | "mobile";
7
+ disabled?: boolean;
8
+ className?: string;
9
+ testID?: string;
6
10
  }
7
11
  export declare const FilterButton: FC<FilterButtonProps>;
8
- export declare function FilterButtonGroup({ children }: {
12
+ export interface FilterButtonGroupProps {
9
13
  children: ReactNode;
10
- }): import("react").JSX.Element;
14
+ layout?: "row" | "scroll" | "wrap";
15
+ className?: string;
16
+ testID?: string;
17
+ }
18
+ export declare function FilterButtonGroup({ children, layout, className, testID, }: FilterButtonGroupProps): import("react").JSX.Element;
@@ -1,7 +1,10 @@
1
- import { jsx as _jsx } from "nativewind/jsx-runtime";
2
- import { tv } from "../theme/tw";
3
- import { Typography } from "../Typography";
4
- import { TouchableOpacity, View } from "react-native";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
2
+ import Icon from "../Display/Display.Icon.js";
3
+ import Pressable from "../primitives/Pressable.js";
4
+ import { useTheme } from "../theme/index.js";
5
+ import { cn, tv } from "../theme/tw.js";
6
+ import { Typography } from "../Typography/index.js";
7
+ import { ScrollView, TouchableOpacity, View } from "react-native";
5
8
  const filterButton = tv({
6
9
  base: "rounded-lg items-center justify-center py-2 px-3 min-h-[36px]",
7
10
  variants: {
@@ -17,12 +20,24 @@ const filterText = tv({
17
20
  variants: {
18
21
  active: {
19
22
  true: "text-white",
20
- false: "text-primary",
23
+ false: "text-text-accent",
21
24
  },
22
25
  },
23
26
  defaultVariants: { active: false },
24
27
  });
25
- export const FilterButton = ({ title, active, onPress }) => (_jsx(TouchableOpacity, { activeOpacity: 0.8, className: filterButton({ active }), onPress: onPress, children: _jsx(Typography.Text, { className: filterText({ active }), variant: "buttonSmall", children: title }) }));
26
- export function FilterButtonGroup({ children }) {
27
- return _jsx(View, { className: "flex-row gap-2 p-3", children: children });
28
+ export const FilterButton = ({ title, active, onPress, variant = "default", disabled = false, className, testID, }) => {
29
+ const theme = useTheme();
30
+ if (variant === "mobile") {
31
+ return (_jsxs(Pressable, { accessibilityLabel: title, accessibilityRole: "button", accessibilityState: { selected: active, disabled }, activeOpacity: 1 - theme.state.press, className: cn("flex-row items-center self-start rounded-full px-3 py-2 gap-2 max-w-full", active ? "bg-container-primary" : "bg-bg-muted", className), disabled: disabled, onPress: onPress, style: {
32
+ minHeight: 48,
33
+ minWidth: 48,
34
+ }, testID: testID, children: [active ? (_jsx(View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: _jsx(Icon, { color: theme.container.onPrimary, name: "checkmark", size: 18 }) })) : null, _jsx(Typography.Text, { className: cn("flex-shrink", active ? "text-container-on-primary" : "text-text-primary"), variant: "bodyLarge", children: title })] }));
35
+ }
36
+ return (_jsx(TouchableOpacity, { accessibilityLabel: title, accessibilityRole: "button", accessibilityState: { selected: active, disabled }, activeOpacity: 0.8, className: filterButton({ active, className }), disabled: disabled, onPress: onPress, testID: testID, children: _jsx(Typography.Text, { className: filterText({ active }), variant: "buttonSmall", children: title }) }));
37
+ };
38
+ export function FilterButtonGroup({ children, layout = "row", className, testID, }) {
39
+ if (layout === "scroll") {
40
+ return (_jsx(ScrollView, { className: cn("py-1", className), contentContainerStyle: { gap: 8 }, horizontal: true, keyboardShouldPersistTaps: "handled", showsHorizontalScrollIndicator: false, testID: testID, children: children }));
41
+ }
42
+ return (_jsx(View, { className: cn("flex-row gap-2 p-3", layout === "wrap" && "flex-wrap", className), testID: testID, children: children }));
28
43
  }