tempest-react-sdk 0.17.0 → 0.19.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 (249) hide show
  1. package/bin/tempest.mjs +445 -35
  2. package/dist/AC-Brw7ZrEs.cjs +2 -0
  3. package/dist/AC-Brw7ZrEs.cjs.map +1 -0
  4. package/dist/AC-DLl3Z4oj.js +12 -0
  5. package/dist/AC-DLl3Z4oj.js.map +1 -0
  6. package/dist/AL-DPGoZjht.cjs +2 -0
  7. package/dist/AL-DPGoZjht.cjs.map +1 -0
  8. package/dist/AL-gswGaWlj.js +12 -0
  9. package/dist/AL-gswGaWlj.js.map +1 -0
  10. package/dist/AM-QN1eL4Tn.js +12 -0
  11. package/dist/AM-QN1eL4Tn.js.map +1 -0
  12. package/dist/AM-VqNWvsI-.cjs +2 -0
  13. package/dist/AM-VqNWvsI-.cjs.map +1 -0
  14. package/dist/AP-CPvBa_FK.cjs +2 -0
  15. package/dist/AP-CPvBa_FK.cjs.map +1 -0
  16. package/dist/AP-CRAbh1js.js +12 -0
  17. package/dist/AP-CRAbh1js.js.map +1 -0
  18. package/dist/BA-CKy_HnnV.js +12 -0
  19. package/dist/BA-CKy_HnnV.js.map +1 -0
  20. package/dist/BA-DoMQ6slK.cjs +2 -0
  21. package/dist/BA-DoMQ6slK.cjs.map +1 -0
  22. package/dist/CE-Ca-XMDFW.js +12 -0
  23. package/dist/CE-Ca-XMDFW.js.map +1 -0
  24. package/dist/CE-as-pGPQa.cjs +2 -0
  25. package/dist/CE-as-pGPQa.cjs.map +1 -0
  26. package/dist/DF-8kzFoovF.js +12 -0
  27. package/dist/DF-8kzFoovF.js.map +1 -0
  28. package/dist/DF-Wr8WNxSX.cjs +2 -0
  29. package/dist/DF-Wr8WNxSX.cjs.map +1 -0
  30. package/dist/ES-B4uWNG6s.js +12 -0
  31. package/dist/ES-B4uWNG6s.js.map +1 -0
  32. package/dist/ES-wKVjD_TM.cjs +2 -0
  33. package/dist/ES-wKVjD_TM.cjs.map +1 -0
  34. package/dist/GO-D4m4rOqy.cjs +2 -0
  35. package/dist/GO-D4m4rOqy.cjs.map +1 -0
  36. package/dist/GO-DuaAgIfo.js +12 -0
  37. package/dist/GO-DuaAgIfo.js.map +1 -0
  38. package/dist/MA-BmaUZZKe.cjs +2 -0
  39. package/dist/MA-BmaUZZKe.cjs.map +1 -0
  40. package/dist/MA-wOyPxG_M.js +12 -0
  41. package/dist/MA-wOyPxG_M.js.map +1 -0
  42. package/dist/MG-BYsqJd-S.js +12 -0
  43. package/dist/MG-BYsqJd-S.js.map +1 -0
  44. package/dist/MG-BchdfJXp.cjs +2 -0
  45. package/dist/MG-BchdfJXp.cjs.map +1 -0
  46. package/dist/MS-DZkgtN_7.js +12 -0
  47. package/dist/MS-DZkgtN_7.js.map +1 -0
  48. package/dist/MS-Dz9lDw37.cjs +2 -0
  49. package/dist/MS-Dz9lDw37.cjs.map +1 -0
  50. package/dist/MT-BkVchoah.cjs +2 -0
  51. package/dist/MT-BkVchoah.cjs.map +1 -0
  52. package/dist/MT-GmMwFWw2.js +12 -0
  53. package/dist/MT-GmMwFWw2.js.map +1 -0
  54. package/dist/PA-C2FpT6Ew.cjs +2 -0
  55. package/dist/PA-C2FpT6Ew.cjs.map +1 -0
  56. package/dist/PA-DgyDzDFi.js +12 -0
  57. package/dist/PA-DgyDzDFi.js.map +1 -0
  58. package/dist/PB-BGkzbQup.cjs +2 -0
  59. package/dist/PB-BGkzbQup.cjs.map +1 -0
  60. package/dist/PB-D-6NE6KM.js +12 -0
  61. package/dist/PB-D-6NE6KM.js.map +1 -0
  62. package/dist/PE-D8V7gWY-.cjs +2 -0
  63. package/dist/PE-D8V7gWY-.cjs.map +1 -0
  64. package/dist/PE-vqm-t7Nh.js +12 -0
  65. package/dist/PE-vqm-t7Nh.js.map +1 -0
  66. package/dist/PI-CILuGJlW.js +12 -0
  67. package/dist/PI-CILuGJlW.js.map +1 -0
  68. package/dist/PI-dJYCbXQM.cjs +2 -0
  69. package/dist/PI-dJYCbXQM.cjs.map +1 -0
  70. package/dist/PR-DN8AV__r.js +12 -0
  71. package/dist/PR-DN8AV__r.js.map +1 -0
  72. package/dist/PR-P17oBdNH.cjs +2 -0
  73. package/dist/PR-P17oBdNH.cjs.map +1 -0
  74. package/dist/RJ-Bccz05Em.js +12 -0
  75. package/dist/RJ-Bccz05Em.js.map +1 -0
  76. package/dist/RJ-Budqx7QP.cjs +2 -0
  77. package/dist/RJ-Budqx7QP.cjs.map +1 -0
  78. package/dist/RN-DLcJBxo3.cjs +2 -0
  79. package/dist/RN-DLcJBxo3.cjs.map +1 -0
  80. package/dist/RN-DTqFP-Nm.js +12 -0
  81. package/dist/RN-DTqFP-Nm.js.map +1 -0
  82. package/dist/RO-BCC54UTU.js +12 -0
  83. package/dist/RO-BCC54UTU.js.map +1 -0
  84. package/dist/RO-B_IDyci4.cjs +2 -0
  85. package/dist/RO-B_IDyci4.cjs.map +1 -0
  86. package/dist/RR-CDGUEyla.cjs +2 -0
  87. package/dist/RR-CDGUEyla.cjs.map +1 -0
  88. package/dist/RR-OCnI_XpU.js +12 -0
  89. package/dist/RR-OCnI_XpU.js.map +1 -0
  90. package/dist/RS-DiBeY_u5.cjs +2 -0
  91. package/dist/RS-DiBeY_u5.cjs.map +1 -0
  92. package/dist/RS-Dy7gBbbH.js +12 -0
  93. package/dist/RS-Dy7gBbbH.js.map +1 -0
  94. package/dist/SC-CEMoj8g2.cjs +2 -0
  95. package/dist/SC-CEMoj8g2.cjs.map +1 -0
  96. package/dist/SC-trCqQDXz.js +12 -0
  97. package/dist/SC-trCqQDXz.js.map +1 -0
  98. package/dist/SE-DAfFbZcK.cjs +2 -0
  99. package/dist/SE-DAfFbZcK.cjs.map +1 -0
  100. package/dist/SE-DBdfSrGk.js +12 -0
  101. package/dist/SE-DBdfSrGk.js.map +1 -0
  102. package/dist/SP-Cse4d68i.cjs +2 -0
  103. package/dist/SP-Cse4d68i.cjs.map +1 -0
  104. package/dist/SP-qPZjJDOT.js +12 -0
  105. package/dist/SP-qPZjJDOT.js.map +1 -0
  106. package/dist/TO-CZtMDVug.js +12 -0
  107. package/dist/TO-CZtMDVug.js.map +1 -0
  108. package/dist/TO-Dwi5zIyF.cjs +2 -0
  109. package/dist/TO-Dwi5zIyF.cjs.map +1 -0
  110. package/dist/br-centroids--O7-1KXz.cjs +2 -0
  111. package/dist/br-centroids--O7-1KXz.cjs.map +1 -0
  112. package/dist/br-centroids-IHN7PIzD.js +10 -0
  113. package/dist/br-centroids-IHN7PIzD.js.map +1 -0
  114. package/dist/br-geo-BYynYOwK.cjs +2 -0
  115. package/dist/br-geo-BYynYOwK.cjs.map +1 -0
  116. package/dist/br-geo-DFRuvjuU.js +8 -0
  117. package/dist/br-geo-DFRuvjuU.js.map +1 -0
  118. package/dist/br.cjs +1 -1
  119. package/dist/br.cjs.map +1 -1
  120. package/dist/br.d.ts +356 -6
  121. package/dist/br.js +825 -348
  122. package/dist/br.js.map +1 -1
  123. package/dist/projection-CILVBdpd.cjs +2 -0
  124. package/dist/projection-CILVBdpd.cjs.map +1 -0
  125. package/dist/projection-Wnqr_svy.js +215 -0
  126. package/dist/projection-Wnqr_svy.js.map +1 -0
  127. package/dist/styles.css +1 -1
  128. package/dist/tempest-react-sdk.cjs +3 -3
  129. package/dist/tempest-react-sdk.cjs.map +1 -1
  130. package/dist/tempest-react-sdk.d.ts +21 -1
  131. package/dist/tempest-react-sdk.js +2790 -2848
  132. package/dist/tempest-react-sdk.js.map +1 -1
  133. package/package.json +2 -1
  134. package/dist/AC-BQUmmKrw.cjs +0 -2
  135. package/dist/AC-BQUmmKrw.cjs.map +0 -1
  136. package/dist/AC-DOvYXax1.js +0 -12
  137. package/dist/AC-DOvYXax1.js.map +0 -1
  138. package/dist/AL-DH1wKIxj.js +0 -12
  139. package/dist/AL-DH1wKIxj.js.map +0 -1
  140. package/dist/AL-oN2X02DP.cjs +0 -2
  141. package/dist/AL-oN2X02DP.cjs.map +0 -1
  142. package/dist/AM-Cn_JOc_u.cjs +0 -2
  143. package/dist/AM-Cn_JOc_u.cjs.map +0 -1
  144. package/dist/AM-D-l4ioxq.js +0 -12
  145. package/dist/AM-D-l4ioxq.js.map +0 -1
  146. package/dist/AP-B8H3590m.cjs +0 -2
  147. package/dist/AP-B8H3590m.cjs.map +0 -1
  148. package/dist/AP-pl_IXUrz.js +0 -12
  149. package/dist/AP-pl_IXUrz.js.map +0 -1
  150. package/dist/BA-DsPuESbp.cjs +0 -2
  151. package/dist/BA-DsPuESbp.cjs.map +0 -1
  152. package/dist/BA-HvFNaSvC.js +0 -12
  153. package/dist/BA-HvFNaSvC.js.map +0 -1
  154. package/dist/CE-BhzlM8v8.cjs +0 -2
  155. package/dist/CE-BhzlM8v8.cjs.map +0 -1
  156. package/dist/CE-C4VCDB2_.js +0 -12
  157. package/dist/CE-C4VCDB2_.js.map +0 -1
  158. package/dist/DF-CdR_I7qu.cjs +0 -2
  159. package/dist/DF-CdR_I7qu.cjs.map +0 -1
  160. package/dist/DF-DCepvNQG.js +0 -12
  161. package/dist/DF-DCepvNQG.js.map +0 -1
  162. package/dist/ES-BNECOgN8.js +0 -12
  163. package/dist/ES-BNECOgN8.js.map +0 -1
  164. package/dist/ES-CzZdWdcw.cjs +0 -2
  165. package/dist/ES-CzZdWdcw.cjs.map +0 -1
  166. package/dist/GO-CTgkFwbh.js +0 -12
  167. package/dist/GO-CTgkFwbh.js.map +0 -1
  168. package/dist/GO-VqQUIkMG.cjs +0 -2
  169. package/dist/GO-VqQUIkMG.cjs.map +0 -1
  170. package/dist/MA-CwpNlEs4.cjs +0 -2
  171. package/dist/MA-CwpNlEs4.cjs.map +0 -1
  172. package/dist/MA-DC3zmbpX.js +0 -12
  173. package/dist/MA-DC3zmbpX.js.map +0 -1
  174. package/dist/MG-DLTyPn6U.js +0 -12
  175. package/dist/MG-DLTyPn6U.js.map +0 -1
  176. package/dist/MG-P3ePmTdM.cjs +0 -2
  177. package/dist/MG-P3ePmTdM.cjs.map +0 -1
  178. package/dist/MS-Crc916be.js +0 -12
  179. package/dist/MS-Crc916be.js.map +0 -1
  180. package/dist/MS-MikLSXO-.cjs +0 -2
  181. package/dist/MS-MikLSXO-.cjs.map +0 -1
  182. package/dist/MT-BzUTgqTr.cjs +0 -2
  183. package/dist/MT-BzUTgqTr.cjs.map +0 -1
  184. package/dist/MT-DEqs4lmz.js +0 -12
  185. package/dist/MT-DEqs4lmz.js.map +0 -1
  186. package/dist/PA-BmFg98qS.cjs +0 -2
  187. package/dist/PA-BmFg98qS.cjs.map +0 -1
  188. package/dist/PA-DCJkLLiT.js +0 -12
  189. package/dist/PA-DCJkLLiT.js.map +0 -1
  190. package/dist/PB-_6qWqUQe.js +0 -12
  191. package/dist/PB-_6qWqUQe.js.map +0 -1
  192. package/dist/PB-cCwnP4jh.cjs +0 -2
  193. package/dist/PB-cCwnP4jh.cjs.map +0 -1
  194. package/dist/PE-BCeDGzmC.cjs +0 -2
  195. package/dist/PE-BCeDGzmC.cjs.map +0 -1
  196. package/dist/PE-DhAJD50w.js +0 -12
  197. package/dist/PE-DhAJD50w.js.map +0 -1
  198. package/dist/PI-8mJVmMWn.cjs +0 -2
  199. package/dist/PI-8mJVmMWn.cjs.map +0 -1
  200. package/dist/PI-BBpuVgnF.js +0 -12
  201. package/dist/PI-BBpuVgnF.js.map +0 -1
  202. package/dist/PR-Ck8PsNQr.cjs +0 -2
  203. package/dist/PR-Ck8PsNQr.cjs.map +0 -1
  204. package/dist/PR-DIU_pEzX.js +0 -12
  205. package/dist/PR-DIU_pEzX.js.map +0 -1
  206. package/dist/RJ-BM_31L8v.js +0 -12
  207. package/dist/RJ-BM_31L8v.js.map +0 -1
  208. package/dist/RJ-RO2nzm45.cjs +0 -2
  209. package/dist/RJ-RO2nzm45.cjs.map +0 -1
  210. package/dist/RN-CGDsj5y7.cjs +0 -2
  211. package/dist/RN-CGDsj5y7.cjs.map +0 -1
  212. package/dist/RN-Cb6kQMBf.js +0 -12
  213. package/dist/RN-Cb6kQMBf.js.map +0 -1
  214. package/dist/RO-DQlMmLkh.js +0 -12
  215. package/dist/RO-DQlMmLkh.js.map +0 -1
  216. package/dist/RO-bBzN2q3e.cjs +0 -2
  217. package/dist/RO-bBzN2q3e.cjs.map +0 -1
  218. package/dist/RR-27xmMYjp.cjs +0 -2
  219. package/dist/RR-27xmMYjp.cjs.map +0 -1
  220. package/dist/RR-DT5Iz7pA.js +0 -12
  221. package/dist/RR-DT5Iz7pA.js.map +0 -1
  222. package/dist/RS-Ax08xnx2.cjs +0 -2
  223. package/dist/RS-Ax08xnx2.cjs.map +0 -1
  224. package/dist/RS-Be6-eibq.js +0 -12
  225. package/dist/RS-Be6-eibq.js.map +0 -1
  226. package/dist/SC-CR4B6n9K.js +0 -12
  227. package/dist/SC-CR4B6n9K.js.map +0 -1
  228. package/dist/SC-D7CvUmBl.cjs +0 -2
  229. package/dist/SC-D7CvUmBl.cjs.map +0 -1
  230. package/dist/SE-DYnzRCQV.js +0 -12
  231. package/dist/SE-DYnzRCQV.js.map +0 -1
  232. package/dist/SE-fXsuEuvK.cjs +0 -2
  233. package/dist/SE-fXsuEuvK.cjs.map +0 -1
  234. package/dist/SP-Cks7QGPk.cjs +0 -2
  235. package/dist/SP-Cks7QGPk.cjs.map +0 -1
  236. package/dist/SP-D7R54yvO.js +0 -12
  237. package/dist/SP-D7R54yvO.js.map +0 -1
  238. package/dist/TO-CWXJNpx2.js +0 -12
  239. package/dist/TO-CWXJNpx2.js.map +0 -1
  240. package/dist/TO-DyvJcNhT.cjs +0 -2
  241. package/dist/TO-DyvJcNhT.cjs.map +0 -1
  242. package/dist/br-geo-Q_VQpVMX.js +0 -8
  243. package/dist/br-geo-Q_VQpVMX.js.map +0 -1
  244. package/dist/br-geo-rADqOFQL.cjs +0 -2
  245. package/dist/br-geo-rADqOFQL.cjs.map +0 -1
  246. package/dist/projection-C2VXUKZJ.js +0 -124
  247. package/dist/projection-C2VXUKZJ.js.map +0 -1
  248. package/dist/projection-CkMNK7HA.cjs +0 -2
  249. package/dist/projection-CkMNK7HA.cjs.map +0 -1
@@ -0,0 +1,215 @@
1
+ import { jsxs as _, jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as R, useId as z, useState as S, useEffect as w } from "react";
3
+ import { c as I } from "./cn-C0Sxc9eb.js";
4
+ const T = "tempest_wrapper_iHNUs", j = "tempest_label_-OEBL", $ = "tempest_required_CTss-", P = "tempest_field_65yGJ", C = "tempest_input_WjT81", E = "tempest_sizeSm_cgds6", q = "tempest_sizeMd_EPFGy", v = "tempest_sizeLg_5Cq8k", K = "tempest_hasLeftIcon_xYO-v", V = "tempest_hasRightIcon_C7uyr", D = "tempest_iconLeft_KrUhI", k = "tempest_iconRight_Ssr47", A = "tempest_error_VLISa", F = "tempest_helper_7Vc-s", O = "tempest_errorText_xz4xS", c = {
5
+ wrapper: T,
6
+ label: j,
7
+ required: $,
8
+ field: P,
9
+ input: C,
10
+ sizeSm: E,
11
+ sizeMd: q,
12
+ sizeLg: v,
13
+ hasLeftIcon: K,
14
+ hasRightIcon: V,
15
+ iconLeft: D,
16
+ iconRight: k,
17
+ error: A,
18
+ helper: F,
19
+ errorText: O
20
+ }, ot = R(function({
21
+ label: e,
22
+ helperText: s,
23
+ error: n,
24
+ leftIcon: a,
25
+ rightIcon: r,
26
+ wrapperClassName: o,
27
+ className: m,
28
+ id: g,
29
+ required: f,
30
+ size: h = "md",
31
+ ...d
32
+ }, L) {
33
+ const b = z(), l = g ?? b, p = n ? `${l}-error` : s ? `${l}-helper` : void 0, x = h === "sm" ? c.sizeSm : h === "lg" ? c.sizeLg : c.sizeMd;
34
+ return /* @__PURE__ */ _("div", { className: I(c.wrapper, n && c.error, o), children: [
35
+ e && /* @__PURE__ */ _("label", { htmlFor: l, className: c.label, children: [
36
+ e,
37
+ f && /* @__PURE__ */ i("span", { className: c.required, children: "*" })
38
+ ] }),
39
+ /* @__PURE__ */ _("div", { className: c.field, children: [
40
+ a && /* @__PURE__ */ i("span", { className: c.iconLeft, children: a }),
41
+ /* @__PURE__ */ i(
42
+ "input",
43
+ {
44
+ ref: L,
45
+ id: l,
46
+ "aria-invalid": !!n,
47
+ "aria-describedby": p,
48
+ required: f,
49
+ className: I(
50
+ c.input,
51
+ x,
52
+ a && c.hasLeftIcon,
53
+ r && c.hasRightIcon,
54
+ m
55
+ ),
56
+ ...d
57
+ }
58
+ ),
59
+ r && /* @__PURE__ */ i("span", { className: c.iconRight, children: r })
60
+ ] }),
61
+ n ? /* @__PURE__ */ i("span", { id: `${l}-error`, className: c.errorText, children: n }) : s ? /* @__PURE__ */ i("span", { id: `${l}-helper`, className: c.helper, children: s }) : null
62
+ ] });
63
+ }), U = "tempest_wrapper_KS2K3", B = "tempest_label_Lmgos", H = "tempest_required_PvDVJ", W = "tempest_field_h-wBy", X = "tempest_select_cjdcr", Y = "tempest_caret_MdCao", G = "tempest_error_sw9MU", J = "tempest_helper_frosK", Q = "tempest_errorText_-zd6i", u = {
64
+ wrapper: U,
65
+ label: B,
66
+ required: H,
67
+ field: W,
68
+ select: X,
69
+ caret: Y,
70
+ error: G,
71
+ helper: J,
72
+ errorText: Q
73
+ }, lt = R(function({
74
+ label: e,
75
+ helperText: s,
76
+ error: n,
77
+ options: a,
78
+ placeholder: r,
79
+ wrapperClassName: o,
80
+ className: m,
81
+ children: g,
82
+ id: f,
83
+ required: h,
84
+ ...d
85
+ }, L) {
86
+ const b = z(), l = f ?? b;
87
+ return /* @__PURE__ */ _("div", { className: I(u.wrapper, n && u.error, o), children: [
88
+ e && /* @__PURE__ */ _("label", { htmlFor: l, className: u.label, children: [
89
+ e,
90
+ h && /* @__PURE__ */ i("span", { className: u.required, children: "*" })
91
+ ] }),
92
+ /* @__PURE__ */ _("div", { className: u.field, children: [
93
+ /* @__PURE__ */ _(
94
+ "select",
95
+ {
96
+ ref: L,
97
+ id: l,
98
+ "aria-invalid": !!n,
99
+ required: h,
100
+ className: I(u.select, m),
101
+ ...d,
102
+ children: [
103
+ r && /* @__PURE__ */ i("option", { value: "", disabled: !0, hidden: !0, children: r }),
104
+ a?.map((p) => /* @__PURE__ */ i("option", { value: p.value, disabled: p.disabled, children: p.label }, p.value)),
105
+ g
106
+ ]
107
+ }
108
+ ),
109
+ /* @__PURE__ */ i("span", { className: u.caret, "aria-hidden": !0, children: /* @__PURE__ */ i(Z, {}) })
110
+ ] }),
111
+ n ? /* @__PURE__ */ i("span", { className: u.errorText, children: n }) : s ? /* @__PURE__ */ i("span", { className: u.helper, children: s }) : null
112
+ ] });
113
+ });
114
+ function Z() {
115
+ return /* @__PURE__ */ i("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ i(
116
+ "path",
117
+ {
118
+ d: "M6 9l6 6 6-6",
119
+ stroke: "currentColor",
120
+ strokeWidth: "2",
121
+ strokeLinecap: "round",
122
+ strokeLinejoin: "round"
123
+ }
124
+ ) });
125
+ }
126
+ function dt(t, e = 300) {
127
+ const [s, n] = S(t);
128
+ return w(() => {
129
+ const a = setTimeout(() => n(t), e);
130
+ return () => clearTimeout(a);
131
+ }, [t, e]), s;
132
+ }
133
+ function tt(t) {
134
+ return Number.isFinite(t) && t >= -90 && t <= 90;
135
+ }
136
+ function et(t) {
137
+ return Number.isFinite(t) && t >= -180 && t <= 180;
138
+ }
139
+ function ut(t) {
140
+ if (typeof t != "object" || t === null) return !1;
141
+ const e = t;
142
+ return typeof e.latitude == "number" && typeof e.longitude == "number" && tt(e.latitude) && et(e.longitude);
143
+ }
144
+ function st(t) {
145
+ return Math.min(90, Math.max(-90, t));
146
+ }
147
+ function ht(t) {
148
+ return ((t + 180) % 360 + 360) % 360 - 180;
149
+ }
150
+ const nt = 6371.0088;
151
+ function M(t) {
152
+ return t * Math.PI / 180;
153
+ }
154
+ function at(t, e) {
155
+ const s = M(t.latitude), n = M(e.latitude), a = M(e.latitude - t.latitude), r = M(e.longitude - t.longitude), o = Math.sin(a / 2) ** 2 + Math.cos(s) * Math.cos(n) * Math.sin(r / 2) ** 2;
156
+ return 2 * nt * Math.asin(Math.sqrt(o));
157
+ }
158
+ function pt(t) {
159
+ let e = 0;
160
+ for (let s = 1; s < t.length; s += 1)
161
+ e += at(t[s - 1], t[s]);
162
+ return e;
163
+ }
164
+ function mt(t, e) {
165
+ const s = M(t.latitude), n = M(e.latitude), a = M(e.longitude - t.longitude), r = Math.sin(a) * Math.cos(n), o = Math.cos(s) * Math.sin(n) - Math.sin(s) * Math.cos(n) * Math.cos(a);
166
+ return (Math.atan2(r, o) * 180 / Math.PI + 360) % 360;
167
+ }
168
+ const y = 85.05112878;
169
+ function N(t) {
170
+ const s = Math.max(
171
+ -y,
172
+ Math.min(y, st(t.latitude))
173
+ ) * Math.PI / 180, n = (t.longitude + 180) / 360, a = (1 - Math.log(Math.tan(s) + 1 / Math.cos(s)) / Math.PI) / 2;
174
+ return { x: n, y: a };
175
+ }
176
+ function ft(t) {
177
+ const e = t.x * 360 - 180, s = Math.PI * (1 - 2 * t.y);
178
+ return { latitude: Math.atan(Math.sinh(s)) * 180 / Math.PI, longitude: e };
179
+ }
180
+ function _t(t, e, s, n = {}) {
181
+ const { padding: a = 16 } = n, r = N({
182
+ latitude: t.maxLatitude,
183
+ longitude: t.minLongitude
184
+ }), o = N({
185
+ latitude: t.minLatitude,
186
+ longitude: t.maxLongitude
187
+ }), m = o.x - r.x || Number.EPSILON, g = o.y - r.y || Number.EPSILON, f = Math.max(1, e - a * 2), h = Math.max(1, s - a * 2), d = Math.min(f / m, h / g), L = a + (f - m * d) / 2, b = a + (h - g * d) / 2;
188
+ return { project: (p) => {
189
+ const x = N(p);
190
+ return {
191
+ x: L + (x.x - r.x) * d,
192
+ y: b + (x.y - r.y) * d
193
+ };
194
+ }, scale: d, width: e, height: s };
195
+ }
196
+ export {
197
+ nt as E,
198
+ ot as I,
199
+ y as M,
200
+ lt as S,
201
+ tt as a,
202
+ mt as b,
203
+ st as c,
204
+ et as d,
205
+ N as e,
206
+ _t as f,
207
+ dt as g,
208
+ at as h,
209
+ ut as i,
210
+ ht as n,
211
+ pt as p,
212
+ M as t,
213
+ ft as u
214
+ };
215
+ //# sourceMappingURL=projection-Wnqr_svy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-Wnqr_svy.js","sources":["../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/hooks/use-debounce.ts","../src/geo/types.ts","../src/geo/distance.ts","../src/geo/projection.ts"],"sourcesContent":["import { forwardRef, useId } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Input.module.css\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n label?: string;\n helperText?: string;\n error?: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n wrapperClassName?: string;\n /** Visual size — drives height, padding and font via density-aware tokens. */\n size?: InputSize;\n}\n\n/**\n * Labelled text input with helper/error slots and optional adornment icons.\n * Forwards refs to the underlying `<input>` for integration with form libraries.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n label,\n helperText,\n error,\n leftIcon,\n rightIcon,\n wrapperClassName,\n className,\n id,\n required,\n size = \"md\",\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const describedById = error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined;\n const sizeClass = size === \"sm\" ? styles.sizeSm : size === \"lg\" ? styles.sizeLg : styles.sizeMd;\n\n return (\n <div className={cn(styles.wrapper, error && styles.error, wrapperClassName)}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <div className={styles.field}>\n {leftIcon && <span className={styles.iconLeft}>{leftIcon}</span>}\n <input\n ref={ref}\n id={inputId}\n aria-invalid={!!error}\n aria-describedby={describedById}\n required={required}\n className={cn(\n styles.input,\n sizeClass,\n leftIcon && styles.hasLeftIcon,\n rightIcon && styles.hasRightIcon,\n className,\n )}\n {...props}\n />\n {rightIcon && <span className={styles.iconRight}>{rightIcon}</span>}\n </div>\n {error ? (\n <span id={`${inputId}-error`} className={styles.errorText}>\n {error}\n </span>\n ) : helperText ? (\n <span id={`${inputId}-helper`} className={styles.helper}>\n {helperText}\n </span>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useId } from \"react\";\nimport type { SelectHTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Select.module.css\";\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n helperText?: string;\n error?: string;\n options?: SelectOption[];\n placeholder?: string;\n wrapperClassName?: string;\n}\n\n/**\n * Native `<select>` wrapper with label/helper/error slots. Either provide\n * `options` for a quick render, or pass `<option>` children directly.\n */\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n label,\n helperText,\n error,\n options,\n placeholder,\n wrapperClassName,\n className,\n children,\n id,\n required,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const selectId = id ?? generatedId;\n\n return (\n <div className={cn(styles.wrapper, error && styles.error, wrapperClassName)}>\n {label && (\n <label htmlFor={selectId} className={styles.label}>\n {label}\n {required && <span className={styles.required}>*</span>}\n </label>\n )}\n <div className={styles.field}>\n <select\n ref={ref}\n id={selectId}\n aria-invalid={!!error}\n required={required}\n className={cn(styles.select, className)}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n )}\n {options?.map((opt) => (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </option>\n ))}\n {children}\n </select>\n <span className={styles.caret} aria-hidden>\n <CaretIcon />\n </span>\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n});\n\nfunction CaretIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M6 9l6 6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n","import { useEffect, useState } from \"react\";\n\n/**\n * Debounce a fast-changing value. Returns the latest value once `delay` ms\n * have elapsed without further changes.\n *\n * @param value - The value to debounce.\n * @param delay - Delay in milliseconds (default 300).\n * @returns The debounced value.\n */\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n}\n","/**\n * WGS84 geographic coordinate. Mirrors the `Coordinate` schema from\n * `tempest-fastapi-sdk` (`geo/schemas.py`) — `latitude` in `[-90, 90]`,\n * `longitude` in `[-180, 180]`, serialized snake_case on the wire.\n */\nexport interface Coordinate {\n /** WGS84 latitude in degrees, `[-90, 90]`. E.g. `-23.5505`. */\n latitude: number;\n /** WGS84 longitude in degrees, `[-180, 180]`. E.g. `-46.6333`. */\n longitude: number;\n}\n\n/**\n * A pin plotted on a map: a {@link Coordinate} plus optional presentation and\n * an identity used for click callbacks. Shared by `TrajectoryMap` and the\n * Brazil maps' `markers` prop.\n */\nexport interface GeoMarker extends Coordinate {\n /** Stable identity (returned by click handlers). Falls back to the index. */\n id?: string;\n /** Tooltip / accessible label for the pin. */\n label?: string;\n /** Fill color. Defaults to the primary token. */\n color?: string;\n /** Radius in pixels. Default: 6. */\n radius?: number;\n}\n\n/**\n * A single sample in a recorded trajectory: a {@link Coordinate} stamped with\n * the epoch millisecond it was captured, plus the optional accuracy radius\n * reported by the Geolocation API.\n */\nexport interface TrackPoint extends Coordinate {\n /** Capture time in epoch milliseconds (`GeolocationPosition.timestamp`). */\n timestamp: number;\n /** Horizontal accuracy radius in meters, if the device reported one. */\n accuracy?: number;\n}\n\n/**\n * Travel mode. Mirrors the `TravelMode` string enum from `tempest-fastapi-sdk`\n * (`geo/enums.py`) — the on-the-wire value is the raw string.\n */\nexport type TravelMode = \"car\" | \"motorcycle\" | \"bus\";\n\n/**\n * Estimated travel between two coordinates. Mirrors the `TravelEstimate`\n * schema from `tempest-fastapi-sdk` (`geo/schemas.py`), snake_case preserved so\n * a response deserializes straight into this type.\n */\nexport interface TravelEstimate {\n /** Travel mode the estimate was computed for. */\n mode: TravelMode;\n /** Great-circle distance scaled by circuity, in kilometers (`>= 0`). */\n distance_km: number;\n /** Estimated duration in minutes (`>= 0`). */\n duration_minutes: number;\n /** How the estimate was produced. `\"heuristic\"` (offline) or `\"osrm\"`. */\n source: \"heuristic\" | \"osrm\";\n}\n\n/**\n * Axis-aligned geographic bounding box. `min`/`max` follow the same degree\n * ranges as {@link Coordinate}.\n */\nexport interface GeoBounds {\n minLatitude: number;\n maxLatitude: number;\n minLongitude: number;\n maxLongitude: number;\n}\n\n/** True when `value` is a finite latitude in `[-90, 90]`. */\nexport function isValidLatitude(value: number): boolean {\n return Number.isFinite(value) && value >= -90 && value <= 90;\n}\n\n/** True when `value` is a finite longitude in `[-180, 180]`. */\nexport function isValidLongitude(value: number): boolean {\n return Number.isFinite(value) && value >= -180 && value <= 180;\n}\n\n/**\n * Type guard for {@link Coordinate}: an object with finite, in-range\n * `latitude` and `longitude`.\n */\nexport function isCoordinate(value: unknown): value is Coordinate {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.latitude === \"number\" &&\n typeof candidate.longitude === \"number\" &&\n isValidLatitude(candidate.latitude) &&\n isValidLongitude(candidate.longitude)\n );\n}\n\n/** Clamp a latitude into the valid `[-90, 90]` range. */\nexport function clampLatitude(latitude: number): number {\n return Math.min(90, Math.max(-90, latitude));\n}\n\n/**\n * Normalize a longitude into the `[-180, 180]` range, wrapping values that\n * cross the antimeridian (e.g. `190` → `-170`).\n */\nexport function normalizeLongitude(longitude: number): number {\n const wrapped = ((((longitude + 180) % 360) + 360) % 360) - 180;\n return wrapped;\n}\n","import type { Coordinate } from \"./types\";\n\n/**\n * Mean Earth radius in kilometers. Same value used by `tempest-fastapi-sdk`\n * (`geo/distance.py`) so client and server distances agree.\n */\nexport const EARTH_RADIUS_KM = 6371.0088;\n\n/** Convert degrees to radians. */\nexport function toRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Great-circle distance between two coordinates using the haversine formula\n * (spherical Earth). Mirrors `haversine_km` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Distance in kilometers (`>= 0`).\n *\n * @example\n * haversineKm(\n * { latitude: -23.5505, longitude: -46.6333 }, // São Paulo\n * { latitude: -22.9068, longitude: -43.1729 }, // Rio de Janeiro\n * ); // ≈ 360.9\n */\nexport function haversineKm(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLat = toRadians(destination.latitude - origin.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const a =\n Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2;\n\n return 2 * EARTH_RADIUS_KM * Math.asin(Math.sqrt(a));\n}\n\n/**\n * Total length of a trajectory: the sum of haversine distances between each\n * consecutive pair of points. Returns `0` for an empty or single-point path.\n *\n * @param points - Ordered coordinates along the path.\n * @returns Cumulative distance in kilometers.\n */\nexport function pathLengthKm(points: readonly Coordinate[]): number {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += haversineKm(points[i - 1], points[i]);\n }\n return total;\n}\n\n/**\n * Initial bearing (forward azimuth) from `origin` to `destination`, in degrees\n * clockwise from true north, normalized to `[0, 360)`. Useful for orienting a\n * heading arrow on a trajectory.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Bearing in degrees, `[0, 360)`.\n */\nexport function bearingDeg(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const y = Math.sin(deltaLon) * Math.cos(lat2);\n const x =\n Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);\n\n const bearing = (Math.atan2(y, x) * 180) / Math.PI;\n return (bearing + 360) % 360;\n}\n","import { clampLatitude } from \"./types\";\nimport type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * A point projected onto the unit Web Mercator plane. Both axes are in `[0, 1]`\n * — `x` grows east, `y` grows south (screen convention).\n */\nexport interface MercatorPoint {\n x: number;\n y: number;\n}\n\n/** A pixel coordinate inside the plotting viewport. */\nexport interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Web Mercator (EPSG:3857) latitude clamp. Latitudes beyond this diverge to\n * infinity in the projection, so tile maps cap here.\n */\nexport const MERCATOR_MAX_LATITUDE = 85.05112878;\n\n/**\n * Project a geographic coordinate onto the unit Web Mercator plane. This is the\n * same projection tile servers use, so a self-hosted tile layer and the\n * tile-free SVG plot line up pixel-for-pixel.\n *\n * @param coord - Coordinate to project.\n * @returns `{ x, y }` in `[0, 1]`.\n */\nexport function projectMercator(coord: Coordinate): MercatorPoint {\n const lat = Math.max(\n -MERCATOR_MAX_LATITUDE,\n Math.min(MERCATOR_MAX_LATITUDE, clampLatitude(coord.latitude)),\n );\n const latRad = (lat * Math.PI) / 180;\n const x = (coord.longitude + 180) / 360;\n const y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2;\n return { x, y };\n}\n\n/**\n * Inverse of {@link projectMercator}: recover a coordinate from a unit-plane\n * point.\n *\n * @param point - `{ x, y }` in `[0, 1]`.\n * @returns The geographic coordinate.\n */\nexport function unprojectMercator(point: MercatorPoint): Coordinate {\n const longitude = point.x * 360 - 180;\n const n = Math.PI * (1 - 2 * point.y);\n const latitude = (Math.atan(Math.sinh(n)) * 180) / Math.PI;\n return { latitude, longitude };\n}\n\n/** A ready-to-use mapping from coordinates to viewport pixels. */\nexport interface FittedProjection {\n /** Project a coordinate to a pixel inside the viewport. */\n project: (coord: Coordinate) => PixelPoint;\n /** Uniform scale (unit-plane → pixels) actually used, after aspect fit. */\n scale: number;\n /** Viewport width in pixels. */\n width: number;\n /** Viewport height in pixels. */\n height: number;\n}\n\n/** Options for {@link fitProjection}. */\nexport interface FitProjectionOptions {\n /** Inner padding in pixels kept clear on every edge. Default: `16`. */\n padding?: number;\n}\n\n/**\n * Build a projection that fits `bounds` into a `width × height` viewport while\n * preserving aspect ratio (uniform scale, centered). This is what powers the\n * tile-free trajectory plot: project the bounds, scale to the SVG box, keep\n * shapes undistorted.\n *\n * @param bounds - Geographic extent to fit.\n * @param width - Viewport width in pixels.\n * @param height - Viewport height in pixels.\n * @param options - Padding tuning.\n * @returns A {@link FittedProjection} with a `project(coord)` mapper.\n */\nexport function fitProjection(\n bounds: GeoBounds,\n width: number,\n height: number,\n options: FitProjectionOptions = {},\n): FittedProjection {\n const { padding = 16 } = options;\n\n const topLeft = projectMercator({\n latitude: bounds.maxLatitude,\n longitude: bounds.minLongitude,\n });\n const bottomRight = projectMercator({\n latitude: bounds.minLatitude,\n longitude: bounds.maxLongitude,\n });\n\n const spanX = bottomRight.x - topLeft.x || Number.EPSILON;\n const spanY = bottomRight.y - topLeft.y || Number.EPSILON;\n\n const innerWidth = Math.max(1, width - padding * 2);\n const innerHeight = Math.max(1, height - padding * 2);\n\n // Uniform scale keeps the trajectory undistorted; fit the tighter axis.\n const scale = Math.min(innerWidth / spanX, innerHeight / spanY);\n\n // Center the projected content within the padded box.\n const offsetX = padding + (innerWidth - spanX * scale) / 2;\n const offsetY = padding + (innerHeight - spanY * scale) / 2;\n\n const project = (coord: Coordinate): PixelPoint => {\n const projected = projectMercator(coord);\n return {\n x: offsetX + (projected.x - topLeft.x) * scale,\n y: offsetY + (projected.y - topLeft.y) * scale,\n };\n };\n\n return { project, scale, width, height };\n}\n"],"names":["Input","forwardRef","label","helperText","error","leftIcon","rightIcon","wrapperClassName","className","id","required","size","props","ref","generatedId","useId","inputId","describedById","sizeClass","styles","jsxs","cn","jsx","Select","options","placeholder","children","selectId","opt","CaretIcon","useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","isValidLatitude","isValidLongitude","isCoordinate","candidate","clampLatitude","latitude","normalizeLongitude","longitude","EARTH_RADIUS_KM","toRadians","degrees","haversineKm","origin","destination","lat1","lat2","deltaLat","deltaLon","a","pathLengthKm","points","total","i","bearingDeg","y","x","MERCATOR_MAX_LATITUDE","projectMercator","coord","latRad","unprojectMercator","point","n","fitProjection","bounds","width","height","padding","topLeft","bottomRight","spanX","spanY","innerWidth","innerHeight","scale","offsetX","offsetY","projected"],"mappings":"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"}