@sincpro/mobile-ui 3.0.1 → 3.2.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 (314) hide show
  1. package/dist/Actions/Actions.Button.d.ts +6 -6
  2. package/dist/Actions/Actions.Button.js +650 -180
  3. package/dist/Actions/Actions.Dock.d.ts +1 -1
  4. package/dist/Actions/Actions.Dock.js +297 -18
  5. package/dist/Actions/Actions.FAB.js +100 -12
  6. package/dist/Actions/Actions.FilterButton.d.ts +17 -0
  7. package/dist/Actions/Actions.FilterButton.js +263 -33
  8. package/dist/Actions/Actions.IconButton.d.ts +1 -0
  9. package/dist/Actions/Actions.IconButton.js +196 -33
  10. package/dist/Actions/index.js +13 -13
  11. package/dist/Dialog/Confirmation.context.js +82 -16
  12. package/dist/Dialog/Dialog.ActionSheet.js +200 -41
  13. package/dist/Dialog/Dialog.Confirmation.js +168 -31
  14. package/dist/Dialog/Dialog.EditValue.js +437 -62
  15. package/dist/Dialog/Dialog.Sheet.d.ts +7 -3
  16. package/dist/Dialog/Dialog.Sheet.js +267 -15
  17. package/dist/Dialog/OverlayHost.d.ts +24 -0
  18. package/dist/Dialog/OverlayHost.js +230 -0
  19. package/dist/Dialog/SheetSurface.d.ts +43 -0
  20. package/dist/Dialog/SheetSurface.js +495 -0
  21. package/dist/Dialog/dialog-actions.d.ts +17 -0
  22. package/dist/Dialog/dialog-actions.js +59 -0
  23. package/dist/Dialog/index.d.ts +4 -1
  24. package/dist/Dialog/index.js +8 -7
  25. package/dist/Dialog/overlay.store.d.ts +24 -0
  26. package/dist/Dialog/overlay.store.js +59 -0
  27. package/dist/Dialog/requestConfirmation.js +20 -10
  28. package/dist/Display/Display.Accordion.js +185 -13
  29. package/dist/Display/Display.AmountSummary.js +206 -15
  30. package/dist/Display/Display.Avatar.js +93 -31
  31. package/dist/Display/Display.AvatarGroup.js +132 -17
  32. package/dist/Display/Display.Badge.d.ts +18 -2
  33. package/dist/Display/Display.Badge.js +117 -49
  34. package/dist/Display/Display.Card.js +163 -26
  35. package/dist/Display/Display.Carousel.js +459 -105
  36. package/dist/Display/Display.Chip.d.ts +4 -1
  37. package/dist/Display/Display.Chip.js +165 -31
  38. package/dist/Display/Display.CircleButton.d.ts +1 -0
  39. package/dist/Display/Display.CircleButton.js +86 -27
  40. package/dist/Display/Display.CopyableText.js +289 -66
  41. package/dist/Display/Display.CountRecords.js +60 -3
  42. package/dist/Display/Display.DataTable.js +123 -13
  43. package/dist/Display/Display.Date.js +243 -33
  44. package/dist/Display/Display.Divider.d.ts +10 -10
  45. package/dist/Display/Display.Divider.js +67 -20
  46. package/dist/Display/Display.ExpoImage.js +97 -8
  47. package/dist/Display/Display.GradientSurface.d.ts +9 -4
  48. package/dist/Display/Display.GradientSurface.js +196 -46
  49. package/dist/Display/Display.Icon.js +129 -15
  50. package/dist/Display/Display.IconBadge.js +95 -25
  51. package/dist/Display/Display.Image.d.ts +7 -1
  52. package/dist/Display/Display.Image.js +344 -39
  53. package/dist/Display/Display.KeyValue.js +90 -5
  54. package/dist/Display/Display.ListGroup.js +181 -9
  55. package/dist/Display/Display.ListItem.js +324 -28
  56. package/dist/Display/Display.Logo.js +84 -29
  57. package/dist/Display/Display.MediaCard.js +125 -4
  58. package/dist/Display/Display.MediaEmbed.d.ts +0 -5
  59. package/dist/Display/Display.MediaEmbed.js +170 -26
  60. package/dist/Display/Display.MenuButton.d.ts +2 -2
  61. package/dist/Display/Display.MenuButton.js +380 -94
  62. package/dist/Display/Display.MenuCard.js +122 -18
  63. package/dist/Display/Display.MenuGrid.js +43 -3
  64. package/dist/Display/Display.Monetary.js +90 -5
  65. package/dist/Display/Display.Pattern.js +306 -47
  66. package/dist/Display/Display.PriceTag.js +117 -14
  67. package/dist/Display/Display.ProductCard.js +154 -4
  68. package/dist/Display/Display.Rating.js +92 -11
  69. package/dist/Display/Display.SearchHistory.js +132 -6
  70. package/dist/Display/Display.SectionHeader.d.ts +5 -1
  71. package/dist/Display/Display.SectionHeader.js +125 -12
  72. package/dist/Display/Display.Stat.js +62 -3
  73. package/dist/Display/Display.StatCard.js +131 -7
  74. package/dist/Display/Display.StatusBadge.d.ts +29 -0
  75. package/dist/Display/Display.StatusBadge.js +68 -0
  76. package/dist/Display/Display.StatusDot.js +93 -18
  77. package/dist/Display/Display.Story.js +285 -35
  78. package/dist/Display/Display.StoryTray.js +354 -34
  79. package/dist/Display/Display.StoryViewer.js +571 -72
  80. package/dist/Display/Display.SwipeableRow.js +148 -20
  81. package/dist/Display/Display.Tag.d.ts +4 -1
  82. package/dist/Display/Display.Tag.js +66 -4
  83. package/dist/Display/Display.Timeline.js +102 -13
  84. package/dist/Display/Display.Tooltip.js +122 -26
  85. package/dist/Display/chevron.d.ts +6 -0
  86. package/dist/Display/chevron.js +32 -0
  87. package/dist/Display/count-badge.d.ts +21 -0
  88. package/dist/Display/count-badge.js +124 -0
  89. package/dist/Display/group-title.d.ts +10 -0
  90. package/dist/Display/group-title.js +53 -0
  91. package/dist/Display/icon-font.d.ts +3 -0
  92. package/dist/Display/icon-font.ios.d.ts +3 -0
  93. package/dist/Display/icon-font.ios.js +4 -0
  94. package/dist/Display/icon-font.js +7 -0
  95. package/dist/Display/icon-glyphs.d.ts +2 -0
  96. package/dist/Display/icon-glyphs.js +87 -0
  97. package/dist/Display/icon-map.d.ts +15 -11
  98. package/dist/Display/icon-map.js +344 -84
  99. package/dist/Display/icon-registry.d.ts +21 -0
  100. package/dist/Display/icon-registry.js +21 -0
  101. package/dist/Display/index.d.ts +6 -1
  102. package/dist/Display/index.js +53 -48
  103. package/dist/Display/pill.d.ts +16 -0
  104. package/dist/Display/pill.js +47 -0
  105. package/dist/Feedback/ErrorBoundary.js +35 -23
  106. package/dist/Feedback/Feedback.Banner.js +202 -24
  107. package/dist/Feedback/Feedback.DomainSplashScreen.js +246 -70
  108. package/dist/Feedback/Feedback.Empty.js +54 -3
  109. package/dist/Feedback/Feedback.EmptyState.js +114 -5
  110. package/dist/Feedback/Feedback.Error.d.ts +1 -1
  111. package/dist/Feedback/Feedback.Error.js +130 -5
  112. package/dist/Feedback/Feedback.Loading.d.ts +1 -1
  113. package/dist/Feedback/Feedback.Loading.js +70 -3
  114. package/dist/Feedback/Feedback.PermissionCard.js +161 -5
  115. package/dist/Feedback/Feedback.Progress.js +199 -41
  116. package/dist/Feedback/Feedback.ProgressCircle.js +184 -12
  117. package/dist/Feedback/Feedback.Skeleton.js +149 -36
  118. package/dist/Feedback/Feedback.Spinner.js +407 -79
  119. package/dist/Feedback/Feedback.Splash.js +240 -33
  120. package/dist/Feedback/Feedback.State.d.ts +17 -0
  121. package/dist/Feedback/Feedback.State.js +104 -0
  122. package/dist/Feedback/Toast.context.js +883 -167
  123. package/dist/Feedback/index.d.ts +3 -0
  124. package/dist/Feedback/index.js +15 -13
  125. package/dist/Form/Form.Checkbox.js +212 -22
  126. package/dist/Form/Form.ControlledCheckbox.d.ts +1 -1
  127. package/dist/Form/Form.ControlledCheckbox.js +46 -4
  128. package/dist/Form/Form.ControlledDropdown.d.ts +1 -1
  129. package/dist/Form/Form.ControlledDropdown.js +62 -4
  130. package/dist/Form/Form.ControlledInput.d.ts +4 -3
  131. package/dist/Form/Form.ControlledInput.js +72 -4
  132. package/dist/Form/Form.ControlledMonetaryInput.d.ts +6 -3
  133. package/dist/Form/Form.ControlledMonetaryInput.js +50 -4
  134. package/dist/Form/Form.ControlledRadioButton.d.ts +2 -2
  135. package/dist/Form/Form.ControlledRadioButton.js +45 -4
  136. package/dist/Form/Form.DatePicker.js +507 -107
  137. package/dist/Form/Form.Dropdown.js +303 -52
  138. package/dist/Form/Form.ErrorSummary.js +236 -44
  139. package/dist/Form/Form.Field.d.ts +24 -0
  140. package/dist/Form/Form.Field.js +55 -0
  141. package/dist/Form/Form.FractionalQuantityInput.js +508 -96
  142. package/dist/Form/Form.Input.d.ts +17 -3
  143. package/dist/Form/Form.Input.js +497 -29
  144. package/dist/Form/Form.KeyboardForm.d.ts +22 -8
  145. package/dist/Form/Form.KeyboardForm.js +83 -8
  146. package/dist/Form/Form.KeyboardToolbarHost.d.ts +14 -0
  147. package/dist/Form/Form.KeyboardToolbarHost.js +223 -0
  148. package/dist/Form/Form.MonetaryInput.js +164 -17
  149. package/dist/Form/Form.PickerField.d.ts +31 -0
  150. package/dist/Form/Form.PickerField.js +539 -0
  151. package/dist/Form/Form.PinInput.js +150 -15
  152. package/dist/Form/Form.QuantitySelector.js +229 -25
  153. package/dist/Form/Form.RadioButton.d.ts +1 -0
  154. package/dist/Form/Form.RadioButton.js +26 -29
  155. package/dist/Form/Form.Select.d.ts +2 -1
  156. package/dist/Form/Form.Select.js +388 -60
  157. package/dist/Form/Form.Slider.js +133 -10
  158. package/dist/Form/Form.Switch.js +99 -4
  159. package/dist/Form/choice-row.d.ts +15 -0
  160. package/dist/Form/choice-row.js +236 -0
  161. package/dist/Form/index.d.ts +11 -6
  162. package/dist/Form/index.js +26 -27
  163. package/dist/Form/input-text.d.ts +7 -0
  164. package/dist/Form/input-text.js +18 -0
  165. package/dist/Navigation/Navigation.AppBar.d.ts +3 -4
  166. package/dist/Navigation/Navigation.AppBar.js +535 -99
  167. package/dist/Navigation/Navigation.BottomNav.js +363 -98
  168. package/dist/Navigation/Navigation.CollapsingHeader.d.ts +28 -13
  169. package/dist/Navigation/Navigation.CollapsingHeader.js +369 -36
  170. package/dist/Navigation/Navigation.FloatingBar.js +71 -11
  171. package/dist/Navigation/Navigation.Menu.js +309 -95
  172. package/dist/Navigation/Navigation.MenuSection.js +80 -11
  173. package/dist/Navigation/Navigation.RowItem.d.ts +4 -2
  174. package/dist/Navigation/Navigation.RowItem.js +93 -8
  175. package/dist/Navigation/Navigation.Search.js +241 -27
  176. package/dist/Navigation/Navigation.SearchBar.d.ts +7 -1
  177. package/dist/Navigation/Navigation.SearchBar.js +218 -29
  178. package/dist/Navigation/Navigation.SearchSuggestions.js +77 -3
  179. package/dist/Navigation/Navigation.SegmentedControl.js +152 -14
  180. package/dist/Navigation/Navigation.Steps.js +105 -11
  181. package/dist/Navigation/Navigation.Tabs.js +449 -41
  182. package/dist/Navigation/index.d.ts +9 -4
  183. package/dist/Navigation/index.js +13 -13
  184. package/dist/Typography/Typography.Heading.js +33 -3
  185. package/dist/Typography/Typography.SelectableText.js +95 -7
  186. package/dist/Typography/Typography.Text.d.ts +4 -2
  187. package/dist/Typography/Typography.Text.js +217 -7
  188. package/dist/Typography/index.js +3 -3
  189. package/dist/branding.js +29 -13
  190. package/dist/icons/AddItemIcon.js +76 -2
  191. package/dist/icons/ArrangeCircle.js +82 -2
  192. package/dist/icons/ArrowDownIcon.js +63 -3
  193. package/dist/icons/ArrowUpIcon.js +63 -3
  194. package/dist/icons/BoxIcon.js +64 -2
  195. package/dist/icons/BoxTimeIcon.js +63 -2
  196. package/dist/icons/CalendarIcon.js +145 -2
  197. package/dist/icons/CardIcon.js +80 -2
  198. package/dist/icons/CashierIcon.js +39 -2
  199. package/dist/icons/CreditIcon.js +76 -3
  200. package/dist/icons/DuoIcon.js +75 -2
  201. package/dist/icons/HomeIcon.js +39 -2
  202. package/dist/icons/HomeIconOutlined.js +53 -2
  203. package/dist/icons/LogoIcon.js +87 -2
  204. package/dist/icons/MoneyReceiveIcon.js +86 -2
  205. package/dist/icons/PinIcon.js +39 -2
  206. package/dist/icons/ProfileIcon.js +47 -2
  207. package/dist/icons/SettingsIcon.js +114 -2
  208. package/dist/icons/SinpeIcon.js +60 -2
  209. package/dist/icons/ToggleOffIcon.js +53 -2
  210. package/dist/icons/WalletMoneyIcon.js +81 -2
  211. package/dist/index.d.ts +1 -0
  212. package/dist/index.js +8 -2
  213. package/dist/layouts/AuthContainer.d.ts +4 -5
  214. package/dist/layouts/AuthContainer.js +231 -7
  215. package/dist/layouts/BottomInset.js +4 -1
  216. package/dist/layouts/Container.d.ts +2 -2
  217. package/dist/layouts/Container.js +45 -3
  218. package/dist/layouts/GradientContainer.js +37 -5
  219. package/dist/layouts/PlainLayout.js +19 -3
  220. package/dist/layouts/ScrollContainer.d.ts +14 -9
  221. package/dist/layouts/ScrollContainer.js +125 -4
  222. package/dist/layouts/edges.d.ts +2 -0
  223. package/dist/layouts/edges.js +1 -0
  224. package/dist/primitives/AspectRatio.js +75 -3
  225. package/dist/primitives/Box.js +45 -3
  226. package/dist/primitives/Pressable.js +95 -5
  227. package/dist/primitives/Row.js +84 -13
  228. package/dist/primitives/Spacer.js +42 -5
  229. package/dist/primitives/Stack.js +66 -7
  230. package/dist/primitives/index.js +1 -1
  231. package/dist/theme/active.d.ts +2 -0
  232. package/dist/theme/active.js +33 -18
  233. package/dist/theme/build.js +118 -87
  234. package/dist/theme/color.js +87 -87
  235. package/dist/theme/components/ThemedActivityIndicator.d.ts +2 -15
  236. package/dist/theme/components/ThemedActivityIndicator.js +35 -3
  237. package/dist/theme/components/index.js +1 -0
  238. package/dist/theme/contrast.js +32 -33
  239. package/dist/theme/css-vars.js +71 -75
  240. package/dist/theme/dark.js +116 -97
  241. package/dist/theme/default.js +116 -97
  242. package/dist/theme/define.js +16 -12
  243. package/dist/theme/index.d.ts +1 -0
  244. package/dist/theme/index.js +7 -6
  245. package/dist/theme/on-dark-surface.d.ts +12 -0
  246. package/dist/theme/on-dark-surface.js +13 -0
  247. package/dist/theme/theme.js +1 -0
  248. package/dist/theme/tw.js +3 -1
  249. package/dist/theme/types.js +0 -18
  250. package/dist/theme/typography.d.ts +1 -1
  251. package/dist/theme/typography.js +337 -303
  252. package/dist/theme/useTheme.d.ts +4 -0
  253. package/dist/theme/useTheme.js +7 -3
  254. package/dist/theme/useThemeVars.d.ts +9 -0
  255. package/dist/theme/useThemeVars.js +23 -0
  256. package/dist/theme/validate.js +175 -166
  257. package/dist/tokens/index.js +1 -1
  258. package/dist/tokens/motion.js +30 -13
  259. package/dist/utils/async.d.ts +14 -0
  260. package/dist/utils/async.js +22 -0
  261. package/dist/utils/criteria.js +66 -85
  262. package/dist/utils/date.d.ts +8 -2
  263. package/dist/utils/date.js +63 -50
  264. package/dist/utils/image.js +8 -8
  265. package/dist/utils/intl.d.ts +1 -0
  266. package/dist/utils/intl.js +13 -0
  267. package/dist/utils/keys.js +3 -5
  268. package/dist/utils/monetary.d.ts +1 -0
  269. package/dist/utils/monetary.js +28 -24
  270. package/dist/utils/progress.js +2 -3
  271. package/dist/utils/quantity.js +25 -26
  272. package/dist/utils/reorder.js +11 -20
  273. package/dist/utils/search.d.ts +4 -0
  274. package/dist/utils/search.js +12 -0
  275. package/dist/utils/serializer.js +38 -38
  276. package/dist/utils/useReducedMotion.js +32 -30
  277. package/dist/views/AppSplashView.js +117 -3
  278. package/dist/views/AuthFormView.d.ts +4 -5
  279. package/dist/views/AuthFormView.js +119 -11
  280. package/dist/views/FormViewV2.context.js +75 -23
  281. package/dist/views/FormViewV2.d.ts +4 -5
  282. package/dist/views/FormViewV2.js +658 -92
  283. package/dist/views/ListViewV2.context.js +91 -47
  284. package/dist/views/ListViewV2.d.ts +84 -43
  285. package/dist/views/ListViewV2.js +1350 -200
  286. package/dist/views/Wizard/Wizard.context.js +248 -84
  287. package/dist/views/Wizard/Wizard.js +260 -67
  288. package/dist/views/types/IListView.js +34 -31
  289. package/dist/widgets/CollectionOptions.js +557 -138
  290. package/dist/widgets/FilterBar.js +159 -7
  291. package/dist/widgets/FilterBuilder.js +375 -102
  292. package/dist/widgets/JSONViewer.js +275 -129
  293. package/dist/widgets/PromoBanner.js +336 -42
  294. package/dist/widgets/PromoModal.d.ts +2 -2
  295. package/dist/widgets/PromoModal.js +389 -62
  296. package/dist/widgets/QueryChoice.js +150 -8
  297. package/dist/widgets/QuickActions.js +120 -31
  298. package/dist/widgets/ReorderableList.js +399 -128
  299. package/dist/widgets/TimeZoneSelectorModal.js +458 -51
  300. package/dist/widgets/index.js +3 -3
  301. package/package.json +6 -1
  302. package/tailwind.preset.js +7 -5
  303. package/dist/Form/Form.InputField.d.ts +0 -10
  304. package/dist/Form/Form.InputField.js +0 -38
  305. package/dist/Form/Form.KeyboardToolbar.d.ts +0 -22
  306. package/dist/Form/Form.KeyboardToolbar.js +0 -66
  307. package/dist/Form/Form.PasswordInput.d.ts +0 -9
  308. package/dist/Form/Form.PasswordInput.js +0 -17
  309. package/dist/Form/Form.TextInput.d.ts +0 -8
  310. package/dist/Form/Form.TextInput.js +0 -8
  311. package/dist/primitives/BaseButton.d.ts +0 -150
  312. package/dist/primitives/BaseButton.js +0 -229
  313. package/dist/utils/useSheetTranslation.d.ts +0 -5
  314. package/dist/utils/useSheetTranslation.js +0 -23
@@ -1,47 +1,261 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "nativewind/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import Button from "../Actions/Actions.Button.js";
3
- import { FilterButtonGroup } from "../Actions/Actions.FilterButton.js";
3
+ import { FilterButtonGroup, FilterChip } from "../Actions/Actions.FilterButton.js";
4
4
  import Sheet from "../Dialog/Dialog.Sheet.js";
5
- import Icon from "../Display/Display.Icon.js";
6
5
  import SearchHistory from "../Display/Display.SearchHistory.js";
7
- import Pressable from "../primitives/Pressable.js";
8
- import { useTheme } from "../theme/index.js";
9
6
  import { cn } from "../theme/tw.js";
10
- import { Typography } from "../Typography/index.js";
11
7
  import { useState } from "react";
12
8
  import { View } from "react-native";
13
9
  import SearchBar from "./Navigation.SearchBar";
14
10
  import SearchSuggestions from "./Navigation.SearchSuggestions";
15
- function Root({ children, className, testID }) {
16
- return (_jsx(View, { className: cn("gap-3", className), testID: testID, children: children }));
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "nativewind/jsx-runtime";
12
+ function Root(t0) {
13
+ const $ = _c(6);
14
+ const {
15
+ children,
16
+ className,
17
+ testID
18
+ } = t0;
19
+ let t1;
20
+ if ($[0] !== className) {
21
+ t1 = cn("gap-3", className);
22
+ $[0] = className;
23
+ $[1] = t1;
24
+ } else {
25
+ t1 = $[1];
26
+ }
27
+ let t2;
28
+ if ($[2] !== children || $[3] !== t1 || $[4] !== testID) {
29
+ t2 = _jsx(View, {
30
+ className: t1,
31
+ testID: testID,
32
+ children: children
33
+ });
34
+ $[2] = children;
35
+ $[3] = t1;
36
+ $[4] = testID;
37
+ $[5] = t2;
38
+ } else {
39
+ t2 = $[5];
40
+ }
41
+ return t2;
17
42
  }
18
43
  function Field(props) {
19
- return _jsx(SearchBar, { ...props });
44
+ const $ = _c(2);
45
+ let t0;
46
+ if ($[0] !== props) {
47
+ t0 = _jsx(SearchBar, {
48
+ ...props
49
+ });
50
+ $[0] = props;
51
+ $[1] = t0;
52
+ } else {
53
+ t0 = $[1];
54
+ }
55
+ return t0;
20
56
  }
21
- function Filters({ children, className, testID }) {
22
- return (_jsx(FilterButtonGroup, { className: className, layout: "scroll", testID: testID, children: children }));
57
+ function Filters(t0) {
58
+ const $ = _c(4);
59
+ const {
60
+ children,
61
+ className,
62
+ testID
63
+ } = t0;
64
+ let t1;
65
+ if ($[0] !== children || $[1] !== className || $[2] !== testID) {
66
+ t1 = _jsx(FilterButtonGroup, {
67
+ className: className,
68
+ layout: "scroll",
69
+ testID: testID,
70
+ children: children
71
+ });
72
+ $[0] = children;
73
+ $[1] = className;
74
+ $[2] = testID;
75
+ $[3] = t1;
76
+ } else {
77
+ t1 = $[3];
78
+ }
79
+ return t1;
23
80
  }
24
- function FilterSheet({ children, activeCount = 0, title = "Filtros", triggerLabel = "Filtros", applyLabel = "Aplicar", clearLabel = "Limpiar", onApply, onClear, testID, }) {
25
- const [visible, setVisible] = useState(false);
26
- const theme = useTheme();
27
- const countLabel = activeCount > 0 ? `, ${activeCount} activos` : "";
28
- return (_jsxs(_Fragment, { children: [_jsxs(Pressable, { accessibilityLabel: `${triggerLabel}${countLabel}`, accessibilityRole: "button", className: "min-h-11 flex-row items-center justify-center gap-2 self-start rounded-full bg-bg-muted px-4", onPress: () => setVisible(true), style: { minHeight: 44 }, testID: testID ? `${testID}-trigger` : undefined, children: [_jsx(Icon, { color: theme.icon.secondary, name: "filter", size: 18 }), _jsx(Typography.Text, { className: "text-text-primary", variant: "buttonSmall", children: triggerLabel }), activeCount > 0 ? (_jsx(Typography.Text, { accessibilityLabel: `${activeCount} filtros activos`, className: "text-text-accent", variant: "caption", children: activeCount })) : null] }), _jsx(Sheet, { footer: _jsxs(View, { className: "flex-row gap-3", children: [onClear ? (_jsx(View, { className: "flex-1", children: _jsx(Button, { onPress: onClear, title: clearLabel, variant: "secondary" }) })) : null, _jsx(View, { className: "flex-1", children: _jsx(Button, { onPress: () => {
29
- onApply();
30
- setVisible(false);
31
- }, title: applyLabel }) })] }), onClose: () => setVisible(false), testID: testID ? `${testID}-sheet` : undefined, title: title, visible: visible, children: children })] }));
81
+ function FilterSheet(t0) {
82
+ const $ = _c(28);
83
+ const {
84
+ children,
85
+ activeCount: t1,
86
+ title: t2,
87
+ triggerLabel: t3,
88
+ applyLabel: t4,
89
+ clearLabel: t5,
90
+ onApply,
91
+ onClear,
92
+ testID
93
+ } = t0;
94
+ const activeCount = t1 === undefined ? 0 : t1;
95
+ const title = t2 === undefined ? "Filtros" : t2;
96
+ const triggerLabel = t3 === undefined ? "Filtros" : t3;
97
+ const applyLabel = t4 === undefined ? "Aplicar" : t4;
98
+ const clearLabel = t5 === undefined ? "Limpiar" : t5;
99
+ const [visible, setVisible] = useState(false);
100
+ const countLabel = activeCount > 0 ? `, ${activeCount} activos` : "";
101
+ const t6 = `${triggerLabel}${countLabel}`;
102
+ const t7 = activeCount > 0;
103
+ let t8;
104
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
105
+ t8 = () => setVisible(true);
106
+ $[0] = t8;
107
+ } else {
108
+ t8 = $[0];
109
+ }
110
+ const t9 = testID ? `${testID}-trigger` : undefined;
111
+ let t10;
112
+ if ($[1] !== activeCount || $[2] !== t6 || $[3] !== t7 || $[4] !== t9 || $[5] !== triggerLabel) {
113
+ t10 = _jsx(FilterChip, {
114
+ accessibilityLabel: t6,
115
+ active: t7,
116
+ count: activeCount,
117
+ icon: "filter",
118
+ label: triggerLabel,
119
+ onPress: t8,
120
+ testID: t9
121
+ });
122
+ $[1] = activeCount;
123
+ $[2] = t6;
124
+ $[3] = t7;
125
+ $[4] = t9;
126
+ $[5] = triggerLabel;
127
+ $[6] = t10;
128
+ } else {
129
+ t10 = $[6];
130
+ }
131
+ let t11;
132
+ if ($[7] !== clearLabel || $[8] !== onClear) {
133
+ t11 = onClear ? _jsx(View, {
134
+ className: "flex-1",
135
+ children: _jsx(Button, {
136
+ onPress: onClear,
137
+ title: clearLabel,
138
+ variant: "secondary"
139
+ })
140
+ }) : null;
141
+ $[7] = clearLabel;
142
+ $[8] = onClear;
143
+ $[9] = t11;
144
+ } else {
145
+ t11 = $[9];
146
+ }
147
+ let t12;
148
+ if ($[10] !== onApply) {
149
+ t12 = () => {
150
+ onApply();
151
+ setVisible(false);
152
+ };
153
+ $[10] = onApply;
154
+ $[11] = t12;
155
+ } else {
156
+ t12 = $[11];
157
+ }
158
+ let t13;
159
+ if ($[12] !== applyLabel || $[13] !== t12) {
160
+ t13 = _jsx(View, {
161
+ className: "flex-1",
162
+ children: _jsx(Button, {
163
+ onPress: t12,
164
+ title: applyLabel
165
+ })
166
+ });
167
+ $[12] = applyLabel;
168
+ $[13] = t12;
169
+ $[14] = t13;
170
+ } else {
171
+ t13 = $[14];
172
+ }
173
+ let t14;
174
+ if ($[15] !== t11 || $[16] !== t13) {
175
+ t14 = _jsxs(View, {
176
+ className: "flex-row gap-3",
177
+ children: [t11, t13]
178
+ });
179
+ $[15] = t11;
180
+ $[16] = t13;
181
+ $[17] = t14;
182
+ } else {
183
+ t14 = $[17];
184
+ }
185
+ let t15;
186
+ if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
187
+ t15 = () => setVisible(false);
188
+ $[18] = t15;
189
+ } else {
190
+ t15 = $[18];
191
+ }
192
+ const t16 = testID ? `${testID}-sheet` : undefined;
193
+ let t17;
194
+ if ($[19] !== children || $[20] !== t14 || $[21] !== t16 || $[22] !== title || $[23] !== visible) {
195
+ t17 = _jsx(Sheet, {
196
+ footer: t14,
197
+ onClose: t15,
198
+ testID: t16,
199
+ title: title,
200
+ visible: visible,
201
+ children: children
202
+ });
203
+ $[19] = children;
204
+ $[20] = t14;
205
+ $[21] = t16;
206
+ $[22] = title;
207
+ $[23] = visible;
208
+ $[24] = t17;
209
+ } else {
210
+ t17 = $[24];
211
+ }
212
+ let t18;
213
+ if ($[25] !== t10 || $[26] !== t17) {
214
+ t18 = _jsxs(_Fragment, {
215
+ children: [t10, t17]
216
+ });
217
+ $[25] = t10;
218
+ $[26] = t17;
219
+ $[27] = t18;
220
+ } else {
221
+ t18 = $[27];
222
+ }
223
+ return t18;
32
224
  }
33
225
  function History(props) {
34
- return _jsx(SearchHistory, { ...props });
226
+ const $ = _c(2);
227
+ let t0;
228
+ if ($[0] !== props) {
229
+ t0 = _jsx(SearchHistory, {
230
+ ...props
231
+ });
232
+ $[0] = props;
233
+ $[1] = t0;
234
+ } else {
235
+ t0 = $[1];
236
+ }
237
+ return t0;
35
238
  }
36
239
  function Suggestions(props) {
37
- return _jsx(SearchSuggestions, { ...props });
240
+ const $ = _c(2);
241
+ let t0;
242
+ if ($[0] !== props) {
243
+ t0 = _jsx(SearchSuggestions, {
244
+ ...props
245
+ });
246
+ $[0] = props;
247
+ $[1] = t0;
248
+ } else {
249
+ t0 = $[1];
250
+ }
251
+ return t0;
38
252
  }
39
253
  const Search = {
40
- Root,
41
- Field,
42
- Filters,
43
- FilterSheet,
44
- History,
45
- Suggestions,
254
+ Root,
255
+ Field,
256
+ Filters,
257
+ FilterSheet,
258
+ History,
259
+ Suggestions
46
260
  };
47
261
  export default Search;
@@ -1,4 +1,5 @@
1
1
  import { type SearchSuggestionsProps } from "./Navigation.SearchSuggestions.js";
2
+ import { type typographyVariants } from "../theme/typography.js";
2
3
  export interface SearchBarProps {
3
4
  value: string;
4
5
  onChangeText: (value: string) => void;
@@ -13,10 +14,15 @@ export interface SearchBarProps {
13
14
  accessibilityLabel?: string;
14
15
  clearAccessibilityLabel?: string;
15
16
  suggestions?: SearchSuggestionsProps;
17
+ /**
18
+ * Typography variant of the query. Defaults to `bodyReadable` (17), the size of the native
19
+ * iOS search field; pass `body` (14) to match the other fields of a dense screen.
20
+ */
21
+ textVariant?: keyof typeof typographyVariants;
16
22
  }
17
23
  /**
18
24
  * **Pill** search bar (rounded-full), 2026 style (merge of Material 3 + iOS 26).
19
25
  * Use `editable={false}` + `onPress` for a trigger that navigates to the search screen.
20
26
  */
21
- declare function SearchBar({ value, onChangeText, placeholder, onSubmit, onClear, autoFocus, editable, onPress, className, testID, accessibilityLabel, clearAccessibilityLabel, suggestions, }: SearchBarProps): import("react").JSX.Element;
27
+ declare function SearchBar({ value, onChangeText, placeholder, onSubmit, onClear, autoFocus, editable, onPress, className, testID, accessibilityLabel, clearAccessibilityLabel, suggestions, textVariant, }: SearchBarProps): import("react").JSX.Element;
22
28
  export default SearchBar;
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import Icon from "../Display/Display.Icon.js";
3
3
  import SearchSuggestions from "./Navigation.SearchSuggestions.js";
4
4
  import Pressable from "../primitives/Pressable.js";
@@ -8,38 +8,227 @@ import { appliedTextStyle } from "../theme/typography.js";
8
8
  import { Typography } from "../Typography/index.js";
9
9
  import { useState } from "react";
10
10
  import { Keyboard, TextInput, View } from "react-native";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
11
12
  /**
12
13
  * **Pill** search bar (rounded-full), 2026 style (merge of Material 3 + iOS 26).
13
14
  * Use `editable={false}` + `onPress` for a trigger that navigates to the search screen.
14
15
  */
15
- function SearchBar({ value, onChangeText, placeholder = "Buscar", onSubmit, onClear, autoFocus, editable = true, onPress, className, testID, accessibilityLabel, clearAccessibilityLabel = "Limpiar", suggestions, }) {
16
- const theme = useTheme();
17
- const [focused, setFocused] = useState(false);
18
- const body = (_jsxs(View, { className: cn("flex-row items-center gap-2 rounded-full px-4", focused ? "bg-bg-card" : "bg-bg-muted", className), style: {
19
- minHeight: 48,
20
- minWidth: 48,
21
- borderWidth: 1,
22
- borderColor: focused ? theme.border.focus : "transparent",
23
- }, children: [_jsx(View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: _jsx(Icon, { color: focused ? theme.border.focus : theme.icon.tertiary, name: "search", size: 18 }) }), editable ? (_jsx(TextInput, { accessibilityLabel: accessibilityLabel ?? placeholder, autoFocus: autoFocus, className: "flex-1 text-text-primary", onBlur: () => setFocused(false), onChangeText: onChangeText, onFocus: () => setFocused(true), onSubmitEditing: (e) => onSubmit?.(e.nativeEvent.text), placeholder: placeholder, placeholderTextColor: theme.text.tertiary, returnKeyType: "search", selectionColor: theme.primary, style: {
24
- ...appliedTextStyle("bodyReadable"),
25
- minHeight: 48,
26
- paddingVertical: 8,
27
- }, testID: testID ? `${testID}-input` : undefined, underlineColorAndroid: "transparent", value: value })) : (_jsx(Typography.Text, { className: "flex-1 text-text-tertiary", variant: "bodyReadable", children: value || placeholder })), editable && value.length > 0 ? (_jsx(Pressable, { accessibilityLabel: clearAccessibilityLabel, hitSlop: 8, onPress: () => {
28
- onChangeText("");
29
- onClear?.();
30
- }, style: {
31
- minHeight: 48,
32
- minWidth: 48,
33
- alignItems: "center",
34
- justifyContent: "center",
35
- }, children: _jsx(Icon, { color: theme.icon.tertiary, name: "dismiss", size: 18 }) })) : null] }));
36
- if (!editable && onPress) {
37
- return (_jsx(Pressable, { accessibilityLabel: accessibilityLabel ?? placeholder, accessibilityRole: "search", onPress: onPress, style: { minHeight: 48, minWidth: 48 }, testID: testID, children: body }));
16
+ function SearchBar(t0) {
17
+ const $ = _c(45);
18
+ const {
19
+ value,
20
+ onChangeText,
21
+ placeholder: t1,
22
+ onSubmit,
23
+ onClear,
24
+ autoFocus,
25
+ editable: t2,
26
+ onPress,
27
+ className,
28
+ testID,
29
+ accessibilityLabel,
30
+ clearAccessibilityLabel: t3,
31
+ suggestions,
32
+ textVariant: t4
33
+ } = t0;
34
+ const placeholder = t1 === undefined ? "Buscar" : t1;
35
+ const editable = t2 === undefined ? true : t2;
36
+ const clearAccessibilityLabel = t3 === undefined ? "Limpiar" : t3;
37
+ const textVariant = t4 === undefined ? "bodyReadable" : t4;
38
+ const theme = useTheme();
39
+ const [focused, setFocused] = useState(false);
40
+ const t5 = focused ? "bg-bg-card" : "bg-bg-muted";
41
+ let t6;
42
+ if ($[0] !== className || $[1] !== t5) {
43
+ t6 = cn("flex-row items-center gap-2 rounded-full px-4", t5, className);
44
+ $[0] = className;
45
+ $[1] = t5;
46
+ $[2] = t6;
47
+ } else {
48
+ t6 = $[2];
49
+ }
50
+ const t7 = focused ? theme.border.focus : "transparent";
51
+ let t8;
52
+ if ($[3] !== t7) {
53
+ t8 = {
54
+ minHeight: 48,
55
+ minWidth: 48,
56
+ borderWidth: 1,
57
+ borderColor: t7
58
+ };
59
+ $[3] = t7;
60
+ $[4] = t8;
61
+ } else {
62
+ t8 = $[4];
63
+ }
64
+ const t9 = focused ? theme.border.focus : theme.icon.tertiary;
65
+ let t10;
66
+ if ($[5] !== t9) {
67
+ t10 = _jsx(View, {
68
+ accessibilityElementsHidden: true,
69
+ importantForAccessibility: "no-hide-descendants",
70
+ children: _jsx(Icon, {
71
+ color: t9,
72
+ name: "search",
73
+ size: 18
74
+ })
75
+ });
76
+ $[5] = t9;
77
+ $[6] = t10;
78
+ } else {
79
+ t10 = $[6];
80
+ }
81
+ let t11;
82
+ if ($[7] !== accessibilityLabel || $[8] !== autoFocus || $[9] !== editable || $[10] !== onChangeText || $[11] !== onSubmit || $[12] !== placeholder || $[13] !== testID || $[14] !== textVariant || $[15] !== theme.primary || $[16] !== theme.text || $[17] !== value) {
83
+ t11 = editable ? _jsx(TextInput, {
84
+ accessibilityLabel: accessibilityLabel ?? placeholder,
85
+ autoFocus: autoFocus,
86
+ className: "flex-1 text-text-primary",
87
+ onBlur: () => setFocused(false),
88
+ onChangeText: onChangeText,
89
+ onFocus: () => setFocused(true),
90
+ onSubmitEditing: e => onSubmit?.(e.nativeEvent.text),
91
+ placeholder: placeholder,
92
+ placeholderTextColor: theme.text.tertiary,
93
+ returnKeyType: "search",
94
+ selectionColor: theme.primary,
95
+ style: {
96
+ ...appliedTextStyle(textVariant),
97
+ minHeight: 48,
98
+ paddingVertical: 8
99
+ },
100
+ testID: testID ? `${testID}-input` : undefined,
101
+ underlineColorAndroid: "transparent",
102
+ value: value
103
+ }) : _jsx(Typography.Text, {
104
+ className: "flex-1 text-text-tertiary",
105
+ variant: textVariant,
106
+ children: value || placeholder
107
+ });
108
+ $[7] = accessibilityLabel;
109
+ $[8] = autoFocus;
110
+ $[9] = editable;
111
+ $[10] = onChangeText;
112
+ $[11] = onSubmit;
113
+ $[12] = placeholder;
114
+ $[13] = testID;
115
+ $[14] = textVariant;
116
+ $[15] = theme.primary;
117
+ $[16] = theme.text;
118
+ $[17] = value;
119
+ $[18] = t11;
120
+ } else {
121
+ t11 = $[18];
122
+ }
123
+ let t12;
124
+ if ($[19] !== clearAccessibilityLabel || $[20] !== editable || $[21] !== onChangeText || $[22] !== onClear || $[23] !== theme.icon || $[24] !== value) {
125
+ t12 = editable && value.length > 0 ? _jsx(Pressable, {
126
+ accessibilityLabel: clearAccessibilityLabel,
127
+ hitSlop: 8,
128
+ onPress: () => {
129
+ onChangeText("");
130
+ onClear?.();
131
+ },
132
+ style: {
133
+ minHeight: 48,
134
+ minWidth: 48,
135
+ alignItems: "center",
136
+ justifyContent: "center"
137
+ },
138
+ children: _jsx(Icon, {
139
+ color: theme.icon.tertiary,
140
+ name: "dismiss",
141
+ size: 18
142
+ })
143
+ }) : null;
144
+ $[19] = clearAccessibilityLabel;
145
+ $[20] = editable;
146
+ $[21] = onChangeText;
147
+ $[22] = onClear;
148
+ $[23] = theme.icon;
149
+ $[24] = value;
150
+ $[25] = t12;
151
+ } else {
152
+ t12 = $[25];
153
+ }
154
+ let t13;
155
+ if ($[26] !== t10 || $[27] !== t11 || $[28] !== t12 || $[29] !== t6 || $[30] !== t8) {
156
+ t13 = _jsxs(View, {
157
+ className: t6,
158
+ style: t8,
159
+ children: [t10, t11, t12]
160
+ });
161
+ $[26] = t10;
162
+ $[27] = t11;
163
+ $[28] = t12;
164
+ $[29] = t6;
165
+ $[30] = t8;
166
+ $[31] = t13;
167
+ } else {
168
+ t13 = $[31];
169
+ }
170
+ const body = t13;
171
+ if (!editable && onPress) {
172
+ const t14 = accessibilityLabel ?? placeholder;
173
+ let t15;
174
+ if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
175
+ t15 = {
176
+ minHeight: 48,
177
+ minWidth: 48
178
+ };
179
+ $[32] = t15;
180
+ } else {
181
+ t15 = $[32];
182
+ }
183
+ let t16;
184
+ if ($[33] !== body || $[34] !== onPress || $[35] !== t14 || $[36] !== testID) {
185
+ t16 = _jsx(Pressable, {
186
+ accessibilityLabel: t14,
187
+ accessibilityRole: "search",
188
+ onPress: onPress,
189
+ style: t15,
190
+ testID: testID,
191
+ children: body
192
+ });
193
+ $[33] = body;
194
+ $[34] = onPress;
195
+ $[35] = t14;
196
+ $[36] = testID;
197
+ $[37] = t16;
198
+ } else {
199
+ t16 = $[37];
38
200
  }
39
- return (_jsxs(View, { testID: testID, children: [body, focused && suggestions ? (_jsx(SearchSuggestions, { ...suggestions, onSelect: (suggestion) => {
40
- suggestions.onSelect(suggestion);
41
- setFocused(false);
42
- Keyboard.dismiss();
43
- } })) : null] }));
201
+ return t16;
202
+ }
203
+ let t14;
204
+ if ($[38] !== focused || $[39] !== suggestions) {
205
+ t14 = focused && suggestions ? _jsx(SearchSuggestions, {
206
+ ...suggestions,
207
+ onSelect: suggestion => {
208
+ suggestions.onSelect(suggestion);
209
+ setFocused(false);
210
+ Keyboard.dismiss();
211
+ }
212
+ }) : null;
213
+ $[38] = focused;
214
+ $[39] = suggestions;
215
+ $[40] = t14;
216
+ } else {
217
+ t14 = $[40];
218
+ }
219
+ let t15;
220
+ if ($[41] !== body || $[42] !== t14 || $[43] !== testID) {
221
+ t15 = _jsxs(View, {
222
+ testID: testID,
223
+ children: [body, t14]
224
+ });
225
+ $[41] = body;
226
+ $[42] = t14;
227
+ $[43] = testID;
228
+ $[44] = t15;
229
+ } else {
230
+ t15 = $[44];
231
+ }
232
+ return t15;
44
233
  }
45
234
  export default SearchBar;
@@ -1,7 +1,81 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "nativewind/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import Pressable from "../primitives/Pressable.js";
3
3
  import { Typography } from "../Typography/index.js";
4
4
  import { View } from "react-native";
5
- export default function SearchSuggestions({ items, onSelect, loading, error, onRetry, emptyLabel = "Sin sugerencias", }) {
6
- return (_jsx(View, { className: "gap-1 border-b border-border-light py-2", children: loading ? (_jsx(Typography.Text, { accessibilityLiveRegion: "polite", children: "Buscando sugerencias\u2026" })) : error ? (_jsxs(_Fragment, { children: [_jsx(Typography.Text, { accessibilityLiveRegion: "polite", className: "text-danger", children: error }), onRetry ? (_jsx(Pressable, { onPress: onRetry, style: { minHeight: 48, justifyContent: "center" }, children: _jsx(Typography.Text, { className: "text-text-accent", children: "Reintentar sugerencias" }) })) : null] })) : !items.length ? (_jsx(Typography.Text, { accessibilityLiveRegion: "polite", className: "text-text-secondary", children: emptyLabel })) : (items.map((item) => (_jsxs(Pressable, { accessibilityLabel: item.description ? `${item.label}. ${item.description}` : item.label, className: "px-3 py-2", onPress: () => onSelect(item), style: { minHeight: 48, justifyContent: "center" }, children: [_jsx(Typography.Text, { variant: "bodyReadable", children: item.label }), item.description ? (_jsx(Typography.Text, { className: "text-text-secondary", variant: "bodyLarge", children: item.description })) : null] }, item.id)))) }));
5
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "nativewind/jsx-runtime";
6
+ export default function SearchSuggestions(t0) {
7
+ const $ = _c(9);
8
+ const {
9
+ items,
10
+ onSelect,
11
+ loading,
12
+ error,
13
+ onRetry,
14
+ emptyLabel: t1
15
+ } = t0;
16
+ const emptyLabel = t1 === undefined ? "Sin sugerencias" : t1;
17
+ let t2;
18
+ if ($[0] !== emptyLabel || $[1] !== error || $[2] !== items || $[3] !== loading || $[4] !== onRetry || $[5] !== onSelect) {
19
+ t2 = loading ? _jsx(Typography.Text, {
20
+ accessibilityLiveRegion: "polite",
21
+ children: "Buscando sugerencias\u2026"
22
+ }) : error ? _jsxs(_Fragment, {
23
+ children: [_jsx(Typography.Text, {
24
+ accessibilityLiveRegion: "polite",
25
+ className: "text-danger",
26
+ children: error
27
+ }), onRetry ? _jsx(Pressable, {
28
+ onPress: onRetry,
29
+ style: {
30
+ minHeight: 48,
31
+ justifyContent: "center"
32
+ },
33
+ children: _jsx(Typography.Text, {
34
+ className: "text-text-accent",
35
+ children: "Reintentar sugerencias"
36
+ })
37
+ }) : null]
38
+ }) : !items.length ? _jsx(Typography.Text, {
39
+ accessibilityLiveRegion: "polite",
40
+ className: "text-text-secondary",
41
+ children: emptyLabel
42
+ }) : items.map(item => _jsxs(Pressable, {
43
+ accessibilityLabel: item.description ? `${item.label}. ${item.description}` : item.label,
44
+ className: "px-3 py-2",
45
+ onPress: () => onSelect(item),
46
+ style: {
47
+ minHeight: 48,
48
+ justifyContent: "center"
49
+ },
50
+ children: [_jsx(Typography.Text, {
51
+ variant: "body",
52
+ children: item.label
53
+ }), item.description ? _jsx(Typography.Text, {
54
+ className: "text-text-secondary",
55
+ variant: "bodySmall",
56
+ children: item.description
57
+ }) : null]
58
+ }, item.id));
59
+ $[0] = emptyLabel;
60
+ $[1] = error;
61
+ $[2] = items;
62
+ $[3] = loading;
63
+ $[4] = onRetry;
64
+ $[5] = onSelect;
65
+ $[6] = t2;
66
+ } else {
67
+ t2 = $[6];
68
+ }
69
+ let t3;
70
+ if ($[7] !== t2) {
71
+ t3 = _jsx(View, {
72
+ className: "gap-1 border-b border-border-light py-2",
73
+ children: t2
74
+ });
75
+ $[7] = t2;
76
+ $[8] = t3;
77
+ } else {
78
+ t3 = $[8];
79
+ }
80
+ return t3;
7
81
  }