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