@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,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 DateTimePicker from "@expo/ui/community/datetime-picker";
3
3
  import { Actions } from "../Actions/index.js";
4
4
  import Sheet from "../Dialog/Dialog.Sheet.js";
@@ -7,128 +7,528 @@ import Pressable from "../primitives/Pressable.js";
7
7
  import { relativeLuminance, useTheme } from "../theme/index.js";
8
8
  import { cn } from "../theme/tw.js";
9
9
  import { Typography } from "../Typography/index.js";
10
+ import { attempt, errorMessage } from "../utils/async.js";
11
+ import { dateTimeFormat } from "../utils/intl.js";
10
12
  import { useLayoutEffect, useRef, useState } from "react";
11
13
  import { Platform, View } from "react-native";
14
+ import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
15
+ // Same output as toLocale{Time,,Date}String("es-BO"), with shared formatters.
16
+ const DEFAULT_FORMATS = {
17
+ time: {
18
+ hour: "2-digit",
19
+ minute: "2-digit"
20
+ },
21
+ datetime: {
22
+ year: "numeric",
23
+ month: "numeric",
24
+ day: "numeric",
25
+ hour: "numeric",
26
+ minute: "numeric",
27
+ second: "numeric"
28
+ },
29
+ date: {
30
+ year: "numeric",
31
+ month: "numeric",
32
+ day: "numeric"
33
+ }
34
+ };
12
35
  function defaultFormat(value, mode) {
13
- if (mode === "time")
14
- return value.toLocaleTimeString("es-BO", { hour: "2-digit", minute: "2-digit" });
15
- if (mode === "datetime")
16
- return value.toLocaleString("es-BO");
17
- return value.toLocaleDateString("es-BO");
36
+ const shape = mode === "time" || mode === "datetime" ? mode : "date";
37
+ return dateTimeFormat("es-BO", DEFAULT_FORMATS[shape]).format(value);
18
38
  }
19
39
  function comparableDate(value, mode) {
20
- return mode === "date"
21
- ? new Date(value.getFullYear(), value.getMonth(), value.getDate()).getTime()
22
- : value.getTime();
40
+ return mode === "date" ? new Date(value.getFullYear(), value.getMonth(), value.getDate()).getTime() : value.getTime();
23
41
  }
24
42
  function withCalendarDay(base, day) {
25
- const next = new Date(base);
26
- next.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());
27
- return next;
43
+ const next = new Date(base);
44
+ next.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());
45
+ return next;
28
46
  }
29
47
  function withClockTime(base, time) {
30
- const next = new Date(base);
31
- next.setHours(time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
32
- return next;
48
+ const next = new Date(base);
49
+ next.setHours(time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
50
+ return next;
33
51
  }
34
- function DatePicker({ value, onChange, mode = "date", label, placeholder = "Seleccionar…", format, minimumDate, maximumDate, disabled = false, readOnly = false, className, testID, }) {
35
- const theme = useTheme();
36
- const appearance = relativeLuminance(theme.bg.card) < 0.179 ? "dark" : "light";
37
- const saving = useRef(false);
38
- const dialogSession = useRef(0);
39
- const visibleOwner = useRef(0);
40
- const [open, setOpen] = useState(false);
41
- const [phase, setPhase] = useState("date");
42
- const [draft, setDraft] = useState(() => value ?? new Date());
43
- const [pending, setPending] = useState(false);
44
- const [error, setError] = useState();
45
- const blocked = disabled || readOnly || pending;
46
- const android = Platform.OS === "android";
47
- useLayoutEffect(() => {
48
- if (!android || !open)
49
- return;
50
- visibleOwner.current = dialogSession.current;
51
- }, [android, open, phase]);
52
- const fmt = format ?? ((date) => defaultFormat(date, mode));
53
- const close = () => {
54
- if (!saving.current)
55
- setOpen(false);
52
+ const CALENDAR_SNAP_POINTS = ["90%"];
53
+ function DatePicker(t0) {
54
+ const $ = _c(107);
55
+ const {
56
+ value,
57
+ onChange,
58
+ mode: t1,
59
+ label,
60
+ placeholder: t2,
61
+ format,
62
+ minimumDate,
63
+ maximumDate,
64
+ disabled: t3,
65
+ readOnly: t4,
66
+ className,
67
+ testID
68
+ } = t0;
69
+ const mode = t1 === undefined ? "date" : t1;
70
+ const placeholder = t2 === undefined ? "Seleccionar\u2026" : t2;
71
+ const disabled = t3 === undefined ? false : t3;
72
+ const readOnly = t4 === undefined ? false : t4;
73
+ const theme = useTheme();
74
+ const appearance = relativeLuminance(theme.bg.card) < 0.179 ? "dark" : "light";
75
+ const saving = useRef(false);
76
+ const dialogSession = useRef(0);
77
+ const visibleOwner = useRef(0);
78
+ const [open, setOpen] = useState(false);
79
+ const [phase, setPhase] = useState("date");
80
+ let t5;
81
+ if ($[0] !== value) {
82
+ t5 = () => value ?? new Date();
83
+ $[0] = value;
84
+ $[1] = t5;
85
+ } else {
86
+ t5 = $[1];
87
+ }
88
+ const [draft, setDraft] = useState(t5);
89
+ const [pending, setPending] = useState(false);
90
+ const [error, setError] = useState();
91
+ const blocked = disabled || readOnly || pending;
92
+ const android = Platform.OS === "android";
93
+ let t6;
94
+ if ($[2] !== open) {
95
+ t6 = () => {
96
+ if (!android || !open) {
97
+ return;
98
+ }
99
+ visibleOwner.current = dialogSession.current;
56
100
  };
57
- const outOfRange = (next) => (minimumDate !== undefined &&
58
- comparableDate(next, mode) < comparableDate(minimumDate, mode)) ||
59
- (maximumDate !== undefined &&
60
- comparableDate(next, mode) > comparableDate(maximumDate, mode));
61
- const apply = async (next) => {
62
- if (android)
63
- setOpen(false);
64
- if (blocked || saving.current)
65
- return;
66
- if (outOfRange(next)) {
67
- setError("Selecciona una fecha y hora dentro del rango permitido.");
68
- setDraft(next);
69
- return;
70
- }
71
- saving.current = true;
72
- setPending(true);
73
- setError(undefined);
74
- try {
75
- await onChange(next);
76
- setOpen(false);
77
- }
78
- catch (cause) {
79
- setDraft(next);
80
- setError(cause instanceof Error && cause.message.trim()
81
- ? cause.message
82
- : "No se pudo aplicar la fecha. Vuelve a intentarlo.");
83
- }
84
- finally {
85
- saving.current = false;
86
- setPending(false);
87
- }
101
+ $[2] = open;
102
+ $[3] = t6;
103
+ } else {
104
+ t6 = $[3];
105
+ }
106
+ let t7;
107
+ if ($[4] !== open || $[5] !== phase) {
108
+ t7 = [android, open, phase];
109
+ $[4] = open;
110
+ $[5] = phase;
111
+ $[6] = t7;
112
+ } else {
113
+ t7 = $[6];
114
+ }
115
+ useLayoutEffect(t6, t7);
116
+ let t8;
117
+ if ($[7] !== format || $[8] !== mode) {
118
+ t8 = format ?? (date => defaultFormat(date, mode));
119
+ $[7] = format;
120
+ $[8] = mode;
121
+ $[9] = t8;
122
+ } else {
123
+ t8 = $[9];
124
+ }
125
+ const fmt = t8;
126
+ let t9;
127
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
128
+ t9 = () => {
129
+ if (!saving.current) {
130
+ setOpen(false);
131
+ }
132
+ };
133
+ $[10] = t9;
134
+ } else {
135
+ t9 = $[10];
136
+ }
137
+ const close = t9;
138
+ let t10;
139
+ if ($[11] !== maximumDate || $[12] !== minimumDate || $[13] !== mode) {
140
+ t10 = next => minimumDate !== undefined && comparableDate(next, mode) < comparableDate(minimumDate, mode) || maximumDate !== undefined && comparableDate(next, mode) > comparableDate(maximumDate, mode);
141
+ $[11] = maximumDate;
142
+ $[12] = minimumDate;
143
+ $[13] = mode;
144
+ $[14] = t10;
145
+ } else {
146
+ t10 = $[14];
147
+ }
148
+ const outOfRange = t10;
149
+ let t11;
150
+ if ($[15] !== blocked || $[16] !== onChange || $[17] !== outOfRange) {
151
+ t11 = async next_0 => {
152
+ if (android) {
153
+ setOpen(false);
154
+ }
155
+ if (blocked || saving.current) {
156
+ return;
157
+ }
158
+ if (outOfRange(next_0)) {
159
+ setError("Selecciona una fecha y hora dentro del rango permitido.");
160
+ setDraft(next_0);
161
+ return;
162
+ }
163
+ saving.current = true;
164
+ setPending(true);
165
+ setError(undefined);
166
+ const result = await attempt(async () => {
167
+ await onChange(next_0);
168
+ setOpen(false);
169
+ });
170
+ saving.current = false;
171
+ setPending(false);
172
+ if (!result.ok) {
173
+ setDraft(next_0);
174
+ setError(errorMessage(result.error, "No se pudo aplicar la fecha. Vuelve a intentarlo."));
175
+ }
88
176
  };
89
- const update = (date) => {
90
- if (!date || blocked || saving.current)
91
- return;
92
- setDraft(date);
177
+ $[15] = blocked;
178
+ $[16] = onChange;
179
+ $[17] = outOfRange;
180
+ $[18] = t11;
181
+ } else {
182
+ t11 = $[18];
183
+ }
184
+ const apply = t11;
185
+ let t12;
186
+ if ($[19] !== blocked) {
187
+ t12 = date_0 => {
188
+ if (!date_0 || blocked || saving.current) {
189
+ return;
190
+ }
191
+ setDraft(date_0);
192
+ setError(undefined);
193
+ };
194
+ $[19] = blocked;
195
+ $[20] = t12;
196
+ } else {
197
+ t12 = $[20];
198
+ }
199
+ const update = t12;
200
+ let t13;
201
+ if ($[21] !== apply || $[22] !== blocked || $[23] !== draft || $[24] !== mode || $[25] !== phase) {
202
+ t13 = date_1 => {
203
+ if (!date_1 || blocked || saving.current) {
204
+ return;
205
+ }
206
+ if (mode === "datetime" && phase === "date") {
207
+ dialogSession.current = dialogSession.current + 1;
208
+ setDraft(current => withCalendarDay(current, date_1));
209
+ setPhase("time");
93
210
  setError(undefined);
211
+ return;
212
+ }
213
+ const next_1 = mode === "datetime" ? withClockTime(draft, date_1) : date_1;
214
+ apply(next_1);
94
215
  };
95
- const confirmAndroid = (date) => {
96
- if (!date || blocked || saving.current)
97
- return;
98
- if (mode === "datetime" && phase === "date") {
99
- dialogSession.current += 1;
100
- setDraft((current) => withCalendarDay(current, date));
101
- setPhase("time");
102
- setError(undefined);
103
- return;
104
- }
105
- const next = mode === "datetime" ? withClockTime(draft, date) : date;
106
- void apply(next);
216
+ $[21] = apply;
217
+ $[22] = blocked;
218
+ $[23] = draft;
219
+ $[24] = mode;
220
+ $[25] = phase;
221
+ $[26] = t13;
222
+ } else {
223
+ t13 = $[26];
224
+ }
225
+ const confirmAndroid = t13;
226
+ let t14;
227
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
228
+ t14 = () => {
229
+ if (dialogSession.current !== visibleOwner.current) {
230
+ return;
231
+ }
232
+ setOpen(false);
107
233
  };
108
- const dismissAndroid = () => {
109
- if (dialogSession.current !== visibleOwner.current)
110
- return;
111
- setOpen(false);
234
+ $[27] = t14;
235
+ } else {
236
+ t14 = $[27];
237
+ }
238
+ const dismissAndroid = t14;
239
+ let t15;
240
+ if ($[28] !== draft || $[29] !== error || $[30] !== maximumDate || $[31] !== minimumDate || $[32] !== mode || $[33] !== value) {
241
+ t15 = () => {
242
+ const initial = error ? draft : value ?? new Date();
243
+ const clamped = minimumDate && comparableDate(initial, mode) < comparableDate(minimumDate, mode) ? minimumDate : maximumDate && comparableDate(initial, mode) > comparableDate(maximumDate, mode) ? maximumDate : initial;
244
+ dialogSession.current = dialogSession.current + 1;
245
+ visibleOwner.current = dialogSession.current;
246
+ setDraft(clamped);
247
+ setPhase("date");
248
+ setError(undefined);
249
+ setOpen(true);
112
250
  };
113
- const openPicker = () => {
114
- const initial = error ? draft : (value ?? new Date());
115
- const clamped = minimumDate && comparableDate(initial, mode) < comparableDate(minimumDate, mode)
116
- ? minimumDate
117
- : maximumDate && comparableDate(initial, mode) > comparableDate(maximumDate, mode)
118
- ? maximumDate
119
- : initial;
120
- dialogSession.current += 1;
121
- visibleOwner.current = dialogSession.current;
122
- setDraft(clamped);
123
- setPhase("date");
124
- setError(undefined);
125
- setOpen(true);
251
+ $[28] = draft;
252
+ $[29] = error;
253
+ $[30] = maximumDate;
254
+ $[31] = minimumDate;
255
+ $[32] = mode;
256
+ $[33] = value;
257
+ $[34] = t15;
258
+ } else {
259
+ t15 = $[34];
260
+ }
261
+ const openPicker = t15;
262
+ const androidMode = mode === "datetime" ? phase : mode;
263
+ let t16;
264
+ if ($[35] !== className) {
265
+ t16 = cn("gap-1", className);
266
+ $[35] = className;
267
+ $[36] = t16;
268
+ } else {
269
+ t16 = $[36];
270
+ }
271
+ let t17;
272
+ if ($[37] !== label) {
273
+ t17 = label ? _jsx(Typography.Text, {
274
+ className: "text-text-primary",
275
+ semibold: true,
276
+ variant: "bodySmall",
277
+ children: label
278
+ }) : null;
279
+ $[37] = label;
280
+ $[38] = t17;
281
+ } else {
282
+ t17 = $[38];
283
+ }
284
+ const t18 = label ?? placeholder;
285
+ let t19;
286
+ if ($[39] !== blocked || $[40] !== open) {
287
+ t19 = {
288
+ disabled: blocked,
289
+ expanded: open
290
+ };
291
+ $[39] = blocked;
292
+ $[40] = open;
293
+ $[41] = t19;
294
+ } else {
295
+ t19 = $[41];
296
+ }
297
+ let t20;
298
+ if ($[42] !== fmt || $[43] !== placeholder || $[44] !== value) {
299
+ t20 = value ? fmt(value) : placeholder;
300
+ $[42] = fmt;
301
+ $[43] = placeholder;
302
+ $[44] = value;
303
+ $[45] = t20;
304
+ } else {
305
+ t20 = $[45];
306
+ }
307
+ let t21;
308
+ if ($[46] !== t20) {
309
+ t21 = {
310
+ text: t20
311
+ };
312
+ $[46] = t20;
313
+ $[47] = t21;
314
+ } else {
315
+ t21 = $[47];
316
+ }
317
+ let t22;
318
+ if ($[48] === Symbol.for("react.memo_cache_sentinel")) {
319
+ t22 = {
320
+ minHeight: 48,
321
+ minWidth: 48
322
+ };
323
+ $[48] = t22;
324
+ } else {
325
+ t22 = $[48];
326
+ }
327
+ const t23 = value ? "text-text-primary" : "text-text-tertiary";
328
+ let t24;
329
+ if ($[49] !== t23) {
330
+ t24 = cn("flex-1", t23);
331
+ $[49] = t23;
332
+ $[50] = t24;
333
+ } else {
334
+ t24 = $[50];
335
+ }
336
+ let t25;
337
+ if ($[51] === Symbol.for("react.memo_cache_sentinel")) {
338
+ t25 = {
339
+ paddingVertical: 12
126
340
  };
127
- const androidMode = mode === "datetime" ? phase : mode;
128
- return (_jsxs(View, { className: cn("gap-1", className), testID: testID, children: [label ? (_jsx(Typography.Text, { className: "text-text-primary", semibold: true, variant: "bodySmall", children: label })) : null, _jsxs(Pressable, { accessibilityHint: "Abre el selector de fecha y hora", accessibilityLabel: label ?? placeholder, accessibilityRole: "button", accessibilityState: { disabled: blocked, expanded: open }, accessibilityValue: { text: value ? fmt(value) : placeholder }, className: "flex-row items-center gap-3 rounded-lg border border-input bg-bg-card px-3", disabled: blocked, onPress: openPicker, style: { minHeight: 48, minWidth: 48 }, children: [_jsx(Typography.Text, { className: cn("flex-1", value ? "text-text-primary" : "text-text-tertiary"), style: { paddingVertical: 12 }, children: value ? fmt(value) : placeholder }), _jsx(Icon, { color: theme.icon.secondary, name: mode === "time" ? "time" : "calendar", size: 18 })] }), android && error ? (_jsx(Typography.Text, { accessibilityLiveRegion: "polite", accessibilityRole: "alert", className: "text-danger", selectable: true, children: error })) : null, android && open ? (_jsx(DateTimePicker, { accentColor: theme.primary, display: "default", maximumDate: maximumDate, minimumDate: minimumDate, mode: androidMode, negativeButton: { label: "Cancelar" }, onDismiss: dismissAndroid, onValueChange: (_event, date) => confirmAndroid(date), positiveButton: {
129
- label: mode === "datetime" && phase === "date" ? "Continuar" : "Aplicar",
130
- }, presentation: "dialog", testID: testID
131
- ? `${testID}-${androidMode === "time" ? "time" : "date"}-picker`
132
- : undefined, themeVariant: appearance, value: draft }, androidMode)) : null, android ? null : (_jsxs(Sheet, { dismissible: !pending, footer: _jsx(Actions.Button, { disabled: blocked, loading: pending, onPress: () => void apply(draft), title: "Aplicar" }), onClose: close, title: label ?? (mode === "time" ? "Seleccionar hora" : "Seleccionar fecha"), visible: open, children: [open ? (_jsx(View, { accessibilityElementsHidden: blocked, importantForAccessibility: blocked ? "no-hide-descendants" : "auto", pointerEvents: blocked ? "none" : "auto", children: _jsx(DateTimePicker, { accentColor: theme.primary, disabled: blocked, display: mode === "time" || mode === "datetime" ? "spinner" : "inline", maximumDate: maximumDate, minimumDate: minimumDate, mode: mode, onValueChange: (_event, date) => update(date), presentation: "inline", testID: testID ? `${testID}-date-picker` : undefined, themeVariant: appearance, value: draft }) })) : null, error ? (_jsx(Typography.Text, { accessibilityLiveRegion: "polite", accessibilityRole: "alert", className: "pt-3 text-danger", selectable: true, children: error })) : null] }))] }));
341
+ $[51] = t25;
342
+ } else {
343
+ t25 = $[51];
344
+ }
345
+ let t26;
346
+ if ($[52] !== fmt || $[53] !== placeholder || $[54] !== value) {
347
+ t26 = value ? fmt(value) : placeholder;
348
+ $[52] = fmt;
349
+ $[53] = placeholder;
350
+ $[54] = value;
351
+ $[55] = t26;
352
+ } else {
353
+ t26 = $[55];
354
+ }
355
+ let t27;
356
+ if ($[56] !== t24 || $[57] !== t26) {
357
+ t27 = _jsx(Typography.Text, {
358
+ className: t24,
359
+ style: t25,
360
+ children: t26
361
+ });
362
+ $[56] = t24;
363
+ $[57] = t26;
364
+ $[58] = t27;
365
+ } else {
366
+ t27 = $[58];
367
+ }
368
+ const t28 = mode === "time" ? "time" : "calendar";
369
+ let t29;
370
+ if ($[59] !== t28 || $[60] !== theme.icon.secondary) {
371
+ t29 = _jsx(Icon, {
372
+ color: theme.icon.secondary,
373
+ name: t28,
374
+ size: 18
375
+ });
376
+ $[59] = t28;
377
+ $[60] = theme.icon.secondary;
378
+ $[61] = t29;
379
+ } else {
380
+ t29 = $[61];
381
+ }
382
+ let t30;
383
+ if ($[62] !== blocked || $[63] !== openPicker || $[64] !== t18 || $[65] !== t19 || $[66] !== t21 || $[67] !== t27 || $[68] !== t29) {
384
+ t30 = _jsxs(Pressable, {
385
+ accessibilityHint: "Abre el selector de fecha y hora",
386
+ accessibilityLabel: t18,
387
+ accessibilityRole: "button",
388
+ accessibilityState: t19,
389
+ accessibilityValue: t21,
390
+ className: "flex-row items-center gap-3 rounded-lg border border-input bg-bg-card px-3",
391
+ disabled: blocked,
392
+ onPress: openPicker,
393
+ style: t22,
394
+ children: [t27, t29]
395
+ });
396
+ $[62] = blocked;
397
+ $[63] = openPicker;
398
+ $[64] = t18;
399
+ $[65] = t19;
400
+ $[66] = t21;
401
+ $[67] = t27;
402
+ $[68] = t29;
403
+ $[69] = t30;
404
+ } else {
405
+ t30 = $[69];
406
+ }
407
+ let t31;
408
+ if ($[70] !== error) {
409
+ t31 = android && error ? _jsx(Typography.Text, {
410
+ accessibilityLiveRegion: "polite",
411
+ accessibilityRole: "alert",
412
+ className: "text-danger",
413
+ selectable: true,
414
+ children: error
415
+ }) : null;
416
+ $[70] = error;
417
+ $[71] = t31;
418
+ } else {
419
+ t31 = $[71];
420
+ }
421
+ let t32;
422
+ if ($[72] !== androidMode || $[73] !== appearance || $[74] !== confirmAndroid || $[75] !== draft || $[76] !== maximumDate || $[77] !== minimumDate || $[78] !== mode || $[79] !== open || $[80] !== phase || $[81] !== testID || $[82] !== theme.primary) {
423
+ t32 = android && open ? _jsx(DateTimePicker, {
424
+ accentColor: theme.primary,
425
+ display: "default",
426
+ maximumDate: maximumDate,
427
+ minimumDate: minimumDate,
428
+ mode: androidMode,
429
+ negativeButton: {
430
+ label: "Cancelar"
431
+ },
432
+ onDismiss: dismissAndroid,
433
+ onValueChange: (_event, date_2) => confirmAndroid(date_2),
434
+ positiveButton: {
435
+ label: mode === "datetime" && phase === "date" ? "Continuar" : "Aplicar"
436
+ },
437
+ presentation: "dialog",
438
+ testID: testID ? `${testID}-${androidMode === "time" ? "time" : "date"}-picker` : undefined,
439
+ themeVariant: appearance,
440
+ value: draft
441
+ }, androidMode) : null;
442
+ $[72] = androidMode;
443
+ $[73] = appearance;
444
+ $[74] = confirmAndroid;
445
+ $[75] = draft;
446
+ $[76] = maximumDate;
447
+ $[77] = minimumDate;
448
+ $[78] = mode;
449
+ $[79] = open;
450
+ $[80] = phase;
451
+ $[81] = testID;
452
+ $[82] = theme.primary;
453
+ $[83] = t32;
454
+ } else {
455
+ t32 = $[83];
456
+ }
457
+ let t33;
458
+ if ($[84] !== appearance || $[85] !== apply || $[86] !== blocked || $[87] !== draft || $[88] !== error || $[89] !== label || $[90] !== maximumDate || $[91] !== minimumDate || $[92] !== mode || $[93] !== open || $[94] !== pending || $[95] !== testID || $[96] !== theme.primary || $[97] !== update) {
459
+ t33 = android ? null : _jsxs(Sheet, {
460
+ dismissible: !pending,
461
+ footer: _jsx(Actions.Button, {
462
+ disabled: blocked,
463
+ loading: pending,
464
+ onPress: () => void apply(draft),
465
+ title: "Aplicar"
466
+ }),
467
+ onClose: close,
468
+ snapPoints: mode === "date" ? CALENDAR_SNAP_POINTS : undefined,
469
+ title: label ?? (mode === "time" ? "Seleccionar hora" : "Seleccionar fecha"),
470
+ visible: open,
471
+ children: [open ? _jsx(View, {
472
+ accessibilityElementsHidden: blocked,
473
+ importantForAccessibility: blocked ? "no-hide-descendants" : "auto",
474
+ pointerEvents: blocked ? "none" : "auto",
475
+ children: _jsx(DateTimePicker, {
476
+ accentColor: theme.primary,
477
+ disabled: blocked,
478
+ display: mode === "time" || mode === "datetime" ? "spinner" : "inline",
479
+ maximumDate: maximumDate,
480
+ minimumDate: minimumDate,
481
+ mode: mode,
482
+ onValueChange: (_event_0, date_3) => update(date_3),
483
+ presentation: "inline",
484
+ testID: testID ? `${testID}-date-picker` : undefined,
485
+ themeVariant: appearance,
486
+ value: draft
487
+ })
488
+ }) : null, error ? _jsx(Typography.Text, {
489
+ accessibilityLiveRegion: "polite",
490
+ accessibilityRole: "alert",
491
+ className: "pt-3 text-danger",
492
+ selectable: true,
493
+ children: error
494
+ }) : null]
495
+ });
496
+ $[84] = appearance;
497
+ $[85] = apply;
498
+ $[86] = blocked;
499
+ $[87] = draft;
500
+ $[88] = error;
501
+ $[89] = label;
502
+ $[90] = maximumDate;
503
+ $[91] = minimumDate;
504
+ $[92] = mode;
505
+ $[93] = open;
506
+ $[94] = pending;
507
+ $[95] = testID;
508
+ $[96] = theme.primary;
509
+ $[97] = update;
510
+ $[98] = t33;
511
+ } else {
512
+ t33 = $[98];
513
+ }
514
+ let t34;
515
+ if ($[99] !== t16 || $[100] !== t17 || $[101] !== t30 || $[102] !== t31 || $[103] !== t32 || $[104] !== t33 || $[105] !== testID) {
516
+ t34 = _jsxs(View, {
517
+ className: t16,
518
+ testID: testID,
519
+ children: [t17, t30, t31, t32, t33]
520
+ });
521
+ $[99] = t16;
522
+ $[100] = t17;
523
+ $[101] = t30;
524
+ $[102] = t31;
525
+ $[103] = t32;
526
+ $[104] = t33;
527
+ $[105] = testID;
528
+ $[106] = t34;
529
+ } else {
530
+ t34 = $[106];
531
+ }
532
+ return t34;
133
533
  }
134
534
  export default DatePicker;