tempest-react-sdk 0.46.0 → 0.48.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 (371) hide show
  1. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  2. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  3. package/dist/components/AppBar/use-sticky-body-warning.js +5 -8
  4. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  5. package/dist/components/DataTable/use-dev-warnings.cjs +1 -1
  6. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  7. package/dist/components/DataTable/use-dev-warnings.js +8 -7
  8. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  9. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  10. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  11. package/dist/components/Sidebar/Sidebar.js +91 -38
  12. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  13. package/dist/components/Sidebar/Sidebar.module.cjs +1 -1
  14. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  15. package/dist/components/Sidebar/Sidebar.module.js +12 -8
  16. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  17. package/dist/http/api-client.cjs +1 -1
  18. package/dist/http/api-client.cjs.map +1 -1
  19. package/dist/http/api-client.js +45 -31
  20. package/dist/http/api-client.js.map +1 -1
  21. package/dist/http/describe-api-error.cjs +1 -1
  22. package/dist/http/describe-api-error.cjs.map +1 -1
  23. package/dist/http/describe-api-error.js +11 -7
  24. package/dist/http/describe-api-error.js.map +1 -1
  25. package/dist/http/errors.cjs +1 -1
  26. package/dist/http/errors.cjs.map +1 -1
  27. package/dist/http/errors.js +38 -21
  28. package/dist/http/errors.js.map +1 -1
  29. package/dist/http/use-describe-api-error.cjs +1 -1
  30. package/dist/http/use-describe-api-error.cjs.map +1 -1
  31. package/dist/http/use-describe-api-error.js +14 -10
  32. package/dist/http/use-describe-api-error.js.map +1 -1
  33. package/dist/icons/Icon.cjs +1 -1
  34. package/dist/icons/Icon.cjs.map +1 -1
  35. package/dist/icons/Icon.js +17 -18
  36. package/dist/icons/Icon.js.map +1 -1
  37. package/dist/icons/IconPicker.cjs +2 -0
  38. package/dist/icons/IconPicker.cjs.map +1 -0
  39. package/dist/icons/IconPicker.js +49 -0
  40. package/dist/icons/IconPicker.js.map +1 -0
  41. package/dist/icons/IconPicker.module.cjs +2 -0
  42. package/dist/icons/IconPicker.module.cjs.map +1 -0
  43. package/dist/icons/IconPicker.module.js +10 -0
  44. package/dist/icons/IconPicker.module.js.map +1 -0
  45. package/dist/icons/alias.cjs +2 -0
  46. package/dist/icons/alias.cjs.map +1 -0
  47. package/dist/icons/alias.js +9 -0
  48. package/dist/icons/alias.js.map +1 -0
  49. package/dist/icons/generated/loaders.cjs +1 -1
  50. package/dist/icons/generated/loaders.cjs.map +1 -1
  51. package/dist/icons/generated/loaders.js +273 -28
  52. package/dist/icons/generated/loaders.js.map +1 -1
  53. package/dist/icons/generated/shard-00.cjs +2 -0
  54. package/dist/icons/generated/shard-00.cjs.map +1 -0
  55. package/dist/icons/generated/shard-00.js +48 -0
  56. package/dist/icons/generated/shard-00.js.map +1 -0
  57. package/dist/icons/generated/shard-01.cjs +2 -0
  58. package/dist/icons/generated/shard-01.cjs.map +1 -0
  59. package/dist/icons/generated/shard-01.js +48 -0
  60. package/dist/icons/generated/shard-01.js.map +1 -0
  61. package/dist/icons/generated/shard-02.cjs +2 -0
  62. package/dist/icons/generated/shard-02.cjs.map +1 -0
  63. package/dist/icons/generated/shard-02.js +48 -0
  64. package/dist/icons/generated/shard-02.js.map +1 -0
  65. package/dist/icons/generated/shard-03.cjs +2 -0
  66. package/dist/icons/generated/shard-03.cjs.map +1 -0
  67. package/dist/icons/generated/shard-03.js +48 -0
  68. package/dist/icons/generated/shard-03.js.map +1 -0
  69. package/dist/icons/generated/shard-04.cjs +2 -0
  70. package/dist/icons/generated/shard-04.cjs.map +1 -0
  71. package/dist/icons/generated/shard-04.js +48 -0
  72. package/dist/icons/generated/shard-04.js.map +1 -0
  73. package/dist/icons/generated/shard-05.cjs +2 -0
  74. package/dist/icons/generated/shard-05.cjs.map +1 -0
  75. package/dist/icons/generated/shard-05.js +48 -0
  76. package/dist/icons/generated/shard-05.js.map +1 -0
  77. package/dist/icons/generated/shard-06.cjs +2 -0
  78. package/dist/icons/generated/shard-06.cjs.map +1 -0
  79. package/dist/icons/generated/shard-06.js +48 -0
  80. package/dist/icons/generated/shard-06.js.map +1 -0
  81. package/dist/icons/generated/shard-07.cjs +2 -0
  82. package/dist/icons/generated/shard-07.cjs.map +1 -0
  83. package/dist/icons/generated/shard-07.js +48 -0
  84. package/dist/icons/generated/shard-07.js.map +1 -0
  85. package/dist/icons/generated/shard-08.cjs +2 -0
  86. package/dist/icons/generated/shard-08.cjs.map +1 -0
  87. package/dist/icons/generated/shard-08.js +48 -0
  88. package/dist/icons/generated/shard-08.js.map +1 -0
  89. package/dist/icons/generated/shard-09.cjs +2 -0
  90. package/dist/icons/generated/shard-09.cjs.map +1 -0
  91. package/dist/icons/generated/shard-09.js +48 -0
  92. package/dist/icons/generated/shard-09.js.map +1 -0
  93. package/dist/icons/generated/shard-10.cjs +2 -0
  94. package/dist/icons/generated/shard-10.cjs.map +1 -0
  95. package/dist/icons/generated/shard-10.js +48 -0
  96. package/dist/icons/generated/shard-10.js.map +1 -0
  97. package/dist/icons/generated/shard-11.cjs +2 -0
  98. package/dist/icons/generated/shard-11.cjs.map +1 -0
  99. package/dist/icons/generated/shard-11.js +48 -0
  100. package/dist/icons/generated/shard-11.js.map +1 -0
  101. package/dist/icons/generated/shard-12.cjs +2 -0
  102. package/dist/icons/generated/shard-12.cjs.map +1 -0
  103. package/dist/icons/generated/shard-12.js +48 -0
  104. package/dist/icons/generated/shard-12.js.map +1 -0
  105. package/dist/icons/generated/shard-13.cjs +2 -0
  106. package/dist/icons/generated/shard-13.cjs.map +1 -0
  107. package/dist/icons/generated/shard-13.js +48 -0
  108. package/dist/icons/generated/shard-13.js.map +1 -0
  109. package/dist/icons/generated/shard-14.cjs +2 -0
  110. package/dist/icons/generated/shard-14.cjs.map +1 -0
  111. package/dist/icons/generated/shard-14.js +48 -0
  112. package/dist/icons/generated/shard-14.js.map +1 -0
  113. package/dist/icons/generated/shard-15.cjs +2 -0
  114. package/dist/icons/generated/shard-15.cjs.map +1 -0
  115. package/dist/icons/generated/shard-15.js +48 -0
  116. package/dist/icons/generated/shard-15.js.map +1 -0
  117. package/dist/icons/generated/shard-16.cjs +2 -0
  118. package/dist/icons/generated/shard-16.cjs.map +1 -0
  119. package/dist/icons/generated/shard-16.js +48 -0
  120. package/dist/icons/generated/shard-16.js.map +1 -0
  121. package/dist/icons/generated/shard-17.cjs +2 -0
  122. package/dist/icons/generated/shard-17.cjs.map +1 -0
  123. package/dist/icons/generated/shard-17.js +48 -0
  124. package/dist/icons/generated/shard-17.js.map +1 -0
  125. package/dist/icons/generated/shard-18.cjs +2 -0
  126. package/dist/icons/generated/shard-18.cjs.map +1 -0
  127. package/dist/icons/generated/shard-18.js +48 -0
  128. package/dist/icons/generated/shard-18.js.map +1 -0
  129. package/dist/icons/generated/shard-19.cjs +2 -0
  130. package/dist/icons/generated/shard-19.cjs.map +1 -0
  131. package/dist/icons/generated/shard-19.js +48 -0
  132. package/dist/icons/generated/shard-19.js.map +1 -0
  133. package/dist/icons/generated/shard-20.cjs +2 -0
  134. package/dist/icons/generated/shard-20.cjs.map +1 -0
  135. package/dist/icons/generated/shard-20.js +48 -0
  136. package/dist/icons/generated/shard-20.js.map +1 -0
  137. package/dist/icons/generated/shard-21.cjs +2 -0
  138. package/dist/icons/generated/shard-21.cjs.map +1 -0
  139. package/dist/icons/generated/shard-21.js +48 -0
  140. package/dist/icons/generated/shard-21.js.map +1 -0
  141. package/dist/icons/generated/shard-22.cjs +2 -0
  142. package/dist/icons/generated/shard-22.cjs.map +1 -0
  143. package/dist/icons/generated/shard-22.js +48 -0
  144. package/dist/icons/generated/shard-22.js.map +1 -0
  145. package/dist/icons/generated/shard-23.cjs +2 -0
  146. package/dist/icons/generated/shard-23.cjs.map +1 -0
  147. package/dist/icons/generated/shard-23.js +48 -0
  148. package/dist/icons/generated/shard-23.js.map +1 -0
  149. package/dist/icons/generated/shard-24.cjs +2 -0
  150. package/dist/icons/generated/shard-24.cjs.map +1 -0
  151. package/dist/icons/generated/shard-24.js +48 -0
  152. package/dist/icons/generated/shard-24.js.map +1 -0
  153. package/dist/icons/generated/shard-25.cjs +2 -0
  154. package/dist/icons/generated/shard-25.cjs.map +1 -0
  155. package/dist/icons/generated/shard-25.js +48 -0
  156. package/dist/icons/generated/shard-25.js.map +1 -0
  157. package/dist/icons/generated/shard-26.cjs +2 -0
  158. package/dist/icons/generated/shard-26.cjs.map +1 -0
  159. package/dist/icons/generated/shard-26.js +48 -0
  160. package/dist/icons/generated/shard-26.js.map +1 -0
  161. package/dist/icons/generated/shard-27.cjs +2 -0
  162. package/dist/icons/generated/shard-27.cjs.map +1 -0
  163. package/dist/icons/generated/shard-27.js +48 -0
  164. package/dist/icons/generated/shard-27.js.map +1 -0
  165. package/dist/icons/generated/shard-28.cjs +2 -0
  166. package/dist/icons/generated/shard-28.cjs.map +1 -0
  167. package/dist/icons/generated/shard-28.js +48 -0
  168. package/dist/icons/generated/shard-28.js.map +1 -0
  169. package/dist/icons/generated/shard-29.cjs +2 -0
  170. package/dist/icons/generated/shard-29.cjs.map +1 -0
  171. package/dist/icons/generated/shard-29.js +48 -0
  172. package/dist/icons/generated/shard-29.js.map +1 -0
  173. package/dist/icons/generated/shard-30.cjs +2 -0
  174. package/dist/icons/generated/shard-30.cjs.map +1 -0
  175. package/dist/icons/generated/shard-30.js +48 -0
  176. package/dist/icons/generated/shard-30.js.map +1 -0
  177. package/dist/icons/generated/shard-31.cjs +2 -0
  178. package/dist/icons/generated/shard-31.cjs.map +1 -0
  179. package/dist/icons/generated/shard-31.js +48 -0
  180. package/dist/icons/generated/shard-31.js.map +1 -0
  181. package/dist/icons/generated/shard-32.cjs +2 -0
  182. package/dist/icons/generated/shard-32.cjs.map +1 -0
  183. package/dist/icons/generated/shard-32.js +48 -0
  184. package/dist/icons/generated/shard-32.js.map +1 -0
  185. package/dist/icons/generated/shard-33.cjs +2 -0
  186. package/dist/icons/generated/shard-33.cjs.map +1 -0
  187. package/dist/icons/generated/shard-33.js +48 -0
  188. package/dist/icons/generated/shard-33.js.map +1 -0
  189. package/dist/icons/generated/shard-34.cjs +2 -0
  190. package/dist/icons/generated/shard-34.cjs.map +1 -0
  191. package/dist/icons/generated/shard-34.js +48 -0
  192. package/dist/icons/generated/shard-34.js.map +1 -0
  193. package/dist/icons/generated/shard-35.cjs +2 -0
  194. package/dist/icons/generated/shard-35.cjs.map +1 -0
  195. package/dist/icons/generated/shard-35.js +48 -0
  196. package/dist/icons/generated/shard-35.js.map +1 -0
  197. package/dist/icons/generated/shard-36.cjs +2 -0
  198. package/dist/icons/generated/shard-36.cjs.map +1 -0
  199. package/dist/icons/generated/shard-36.js +48 -0
  200. package/dist/icons/generated/shard-36.js.map +1 -0
  201. package/dist/icons/generated/shard-37.cjs +2 -0
  202. package/dist/icons/generated/shard-37.cjs.map +1 -0
  203. package/dist/icons/generated/shard-37.js +48 -0
  204. package/dist/icons/generated/shard-37.js.map +1 -0
  205. package/dist/icons/generated/shard-38.cjs +2 -0
  206. package/dist/icons/generated/shard-38.cjs.map +1 -0
  207. package/dist/icons/generated/shard-38.js +48 -0
  208. package/dist/icons/generated/shard-38.js.map +1 -0
  209. package/dist/icons/generated/shard-39.cjs +2 -0
  210. package/dist/icons/generated/shard-39.cjs.map +1 -0
  211. package/dist/icons/generated/shard-39.js +48 -0
  212. package/dist/icons/generated/shard-39.js.map +1 -0
  213. package/dist/icons/generated/shard-40.cjs +2 -0
  214. package/dist/icons/generated/shard-40.cjs.map +1 -0
  215. package/dist/icons/generated/shard-40.js +48 -0
  216. package/dist/icons/generated/shard-40.js.map +1 -0
  217. package/dist/icons/generated/shard-41.cjs +2 -0
  218. package/dist/icons/generated/shard-41.cjs.map +1 -0
  219. package/dist/icons/generated/shard-41.js +48 -0
  220. package/dist/icons/generated/shard-41.js.map +1 -0
  221. package/dist/icons/generated/shard-42.cjs +2 -0
  222. package/dist/icons/generated/shard-42.cjs.map +1 -0
  223. package/dist/icons/generated/shard-42.js +48 -0
  224. package/dist/icons/generated/shard-42.js.map +1 -0
  225. package/dist/icons/generated/shard-43.cjs +2 -0
  226. package/dist/icons/generated/shard-43.cjs.map +1 -0
  227. package/dist/icons/generated/shard-43.js +48 -0
  228. package/dist/icons/generated/shard-43.js.map +1 -0
  229. package/dist/icons/generated/shard-44.cjs +2 -0
  230. package/dist/icons/generated/shard-44.cjs.map +1 -0
  231. package/dist/icons/generated/shard-44.js +15 -0
  232. package/dist/icons/generated/shard-44.js.map +1 -0
  233. package/dist/icons/material-symbols.cjs +1 -1
  234. package/dist/icons/material-symbols.cjs.map +1 -1
  235. package/dist/icons/material-symbols.js +109 -1
  236. package/dist/icons/material-symbols.js.map +1 -1
  237. package/dist/icons/normalize-icon-name.cjs +2 -0
  238. package/dist/icons/normalize-icon-name.cjs.map +1 -0
  239. package/dist/icons/normalize-icon-name.js +9 -0
  240. package/dist/icons/normalize-icon-name.js.map +1 -0
  241. package/dist/icons/shard-cache.cjs +1 -1
  242. package/dist/icons/shard-cache.cjs.map +1 -1
  243. package/dist/icons/shard-cache.js +85 -32
  244. package/dist/icons/shard-cache.js.map +1 -1
  245. package/dist/icons/validate-icon-name.cjs +2 -0
  246. package/dist/icons/validate-icon-name.cjs.map +1 -0
  247. package/dist/icons/validate-icon-name.js +11 -0
  248. package/dist/icons/validate-icon-name.js.map +1 -0
  249. package/dist/icons-virtual-id.d.ts +24 -0
  250. package/dist/icons-virtual.cjs +2 -0
  251. package/dist/icons-virtual.cjs.map +1 -0
  252. package/dist/icons-virtual.d.ts +30 -22
  253. package/dist/icons-virtual.js +6 -0
  254. package/dist/icons-virtual.js.map +1 -0
  255. package/dist/icons.cjs +1 -1
  256. package/dist/icons.d.ts +269 -32
  257. package/dist/icons.js +11 -7
  258. package/dist/styles.css +1 -1
  259. package/dist/tempest-react-sdk.cjs +1 -1
  260. package/dist/tempest-react-sdk.d.ts +95 -28
  261. package/dist/tempest-react-sdk.js +106 -106
  262. package/dist/utils/dev-mode.cjs +2 -0
  263. package/dist/utils/dev-mode.cjs.map +1 -0
  264. package/dist/utils/dev-mode.js +12 -0
  265. package/dist/utils/dev-mode.js.map +1 -0
  266. package/dist/vite/tempest-icons.cjs +4 -4
  267. package/dist/vite/tempest-icons.cjs.map +1 -1
  268. package/dist/vite/tempest-icons.js +26 -26
  269. package/dist/vite/tempest-icons.js.map +1 -1
  270. package/dist/vite.d.ts +1 -1
  271. package/package.json +5 -2
  272. package/dist/icons/generated/shard-a.cjs +0 -2
  273. package/dist/icons/generated/shard-a.cjs.map +0 -1
  274. package/dist/icons/generated/shard-a.js +0 -114
  275. package/dist/icons/generated/shard-a.js.map +0 -1
  276. package/dist/icons/generated/shard-b.cjs +0 -2
  277. package/dist/icons/generated/shard-b.cjs.map +0 -1
  278. package/dist/icons/generated/shard-b.js +0 -158
  279. package/dist/icons/generated/shard-b.js.map +0 -1
  280. package/dist/icons/generated/shard-c.cjs +0 -2
  281. package/dist/icons/generated/shard-c.cjs.map +0 -1
  282. package/dist/icons/generated/shard-c.js +0 -269
  283. package/dist/icons/generated/shard-c.js.map +0 -1
  284. package/dist/icons/generated/shard-d.cjs +0 -2
  285. package/dist/icons/generated/shard-d.cjs.map +0 -1
  286. package/dist/icons/generated/shard-d.js +0 -62
  287. package/dist/icons/generated/shard-d.js.map +0 -1
  288. package/dist/icons/generated/shard-e.cjs +0 -2
  289. package/dist/icons/generated/shard-e.cjs.map +0 -1
  290. package/dist/icons/generated/shard-e.js +0 -33
  291. package/dist/icons/generated/shard-e.js.map +0 -1
  292. package/dist/icons/generated/shard-f.cjs +0 -2
  293. package/dist/icons/generated/shard-f.cjs.map +0 -1
  294. package/dist/icons/generated/shard-f.js +0 -145
  295. package/dist/icons/generated/shard-f.js.map +0 -1
  296. package/dist/icons/generated/shard-g.cjs +0 -2
  297. package/dist/icons/generated/shard-g.cjs.map +0 -1
  298. package/dist/icons/generated/shard-g.js +0 -61
  299. package/dist/icons/generated/shard-g.js.map +0 -1
  300. package/dist/icons/generated/shard-h.cjs +0 -2
  301. package/dist/icons/generated/shard-h.cjs.map +0 -1
  302. package/dist/icons/generated/shard-h.js +0 -62
  303. package/dist/icons/generated/shard-h.js.map +0 -1
  304. package/dist/icons/generated/shard-i.cjs +0 -2
  305. package/dist/icons/generated/shard-i.cjs.map +0 -1
  306. package/dist/icons/generated/shard-i.js +0 -30
  307. package/dist/icons/generated/shard-i.js.map +0 -1
  308. package/dist/icons/generated/shard-j.cjs +0 -2
  309. package/dist/icons/generated/shard-j.cjs.map +0 -1
  310. package/dist/icons/generated/shard-j.js +0 -10
  311. package/dist/icons/generated/shard-j.js.map +0 -1
  312. package/dist/icons/generated/shard-k.cjs +0 -2
  313. package/dist/icons/generated/shard-k.cjs.map +0 -1
  314. package/dist/icons/generated/shard-k.js +0 -16
  315. package/dist/icons/generated/shard-k.js.map +0 -1
  316. package/dist/icons/generated/shard-l.cjs +0 -2
  317. package/dist/icons/generated/shard-l.cjs.map +0 -1
  318. package/dist/icons/generated/shard-l.js +0 -92
  319. package/dist/icons/generated/shard-l.js.map +0 -1
  320. package/dist/icons/generated/shard-m.cjs +0 -2
  321. package/dist/icons/generated/shard-m.cjs.map +0 -1
  322. package/dist/icons/generated/shard-m.js +0 -143
  323. package/dist/icons/generated/shard-m.js.map +0 -1
  324. package/dist/icons/generated/shard-n.cjs +0 -2
  325. package/dist/icons/generated/shard-n.cjs.map +0 -1
  326. package/dist/icons/generated/shard-n.js +0 -24
  327. package/dist/icons/generated/shard-n.js.map +0 -1
  328. package/dist/icons/generated/shard-o.cjs +0 -2
  329. package/dist/icons/generated/shard-o.cjs.map +0 -1
  330. package/dist/icons/generated/shard-o.js +0 -17
  331. package/dist/icons/generated/shard-o.js.map +0 -1
  332. package/dist/icons/generated/shard-p.cjs +0 -2
  333. package/dist/icons/generated/shard-p.cjs.map +0 -1
  334. package/dist/icons/generated/shard-p.js +0 -114
  335. package/dist/icons/generated/shard-p.js.map +0 -1
  336. package/dist/icons/generated/shard-q.cjs +0 -2
  337. package/dist/icons/generated/shard-q.cjs.map +0 -1
  338. package/dist/icons/generated/shard-q.js +0 -10
  339. package/dist/icons/generated/shard-q.js.map +0 -1
  340. package/dist/icons/generated/shard-r.cjs +0 -2
  341. package/dist/icons/generated/shard-r.cjs.map +0 -1
  342. package/dist/icons/generated/shard-r.js +0 -79
  343. package/dist/icons/generated/shard-r.js.map +0 -1
  344. package/dist/icons/generated/shard-s.cjs +0 -2
  345. package/dist/icons/generated/shard-s.cjs.map +0 -1
  346. package/dist/icons/generated/shard-s.js +0 -256
  347. package/dist/icons/generated/shard-s.js.map +0 -1
  348. package/dist/icons/generated/shard-t.cjs +0 -2
  349. package/dist/icons/generated/shard-t.cjs.map +0 -1
  350. package/dist/icons/generated/shard-t.js +0 -109
  351. package/dist/icons/generated/shard-t.js.map +0 -1
  352. package/dist/icons/generated/shard-u.cjs +0 -2
  353. package/dist/icons/generated/shard-u.cjs.map +0 -1
  354. package/dist/icons/generated/shard-u.js +0 -50
  355. package/dist/icons/generated/shard-u.js.map +0 -1
  356. package/dist/icons/generated/shard-v.cjs +0 -2
  357. package/dist/icons/generated/shard-v.cjs.map +0 -1
  358. package/dist/icons/generated/shard-v.js +0 -30
  359. package/dist/icons/generated/shard-v.js.map +0 -1
  360. package/dist/icons/generated/shard-w.cjs +0 -2
  361. package/dist/icons/generated/shard-w.cjs.map +0 -1
  362. package/dist/icons/generated/shard-w.js +0 -48
  363. package/dist/icons/generated/shard-w.js.map +0 -1
  364. package/dist/icons/generated/shard-x.cjs +0 -2
  365. package/dist/icons/generated/shard-x.cjs.map +0 -1
  366. package/dist/icons/generated/shard-x.js +0 -10
  367. package/dist/icons/generated/shard-x.js.map +0 -1
  368. package/dist/icons/generated/shard-z.cjs +0 -2
  369. package/dist/icons/generated/shard-z.cjs.map +0 -1
  370. package/dist/icons/generated/shard-z.js +0 -25
  371. package/dist/icons/generated/shard-z.js.map +0 -1
@@ -225,109 +225,109 @@ import { buildApiUrl as Ni } from "./http/build-url.js";
225
225
  import { TempestApiError as Pi, isApiError as Fi } from "./http/errors.js";
226
226
  import { retry as Ii } from "./http/retry.js";
227
227
  import { createApiClient as Li } from "./http/api-client.js";
228
- import { API_ERROR_OFFLINE_KEY as Ri, DEFAULT_API_ERROR_STRINGS as zi, describeApiError as Bi } from "./http/describe-api-error.js";
229
- import { createI18n as Vi } from "./i18n/create-i18n.js";
230
- import { I18nProvider as Hi, useI18n as Ui, useOptionalI18n as Wi, useTranslate as Gi } from "./i18n/I18nProvider.js";
231
- import { useDescribeApiError as Ki } from "./http/use-describe-api-error.js";
232
- import { parseResponse as qi } from "./http/parse-response.js";
233
- import { uploadWithProgress as Ji } from "./http/upload-with-progress.js";
234
- import { generateIdempotencyKey as Yi } from "./http/idempotency.js";
235
- import { DEFAULT_CHUNK_SIZE as Xi, createLocalUploadStorage as Zi, createResumableUpload as Qi, uploadFingerprint as $i } from "./http/resumable-upload.js";
236
- import { usePoll as ea } from "./http/use-poll.js";
237
- import { createAuthStore as ta } from "./auth/create-auth-store.js";
238
- import { AuthGuard as na } from "./auth/AuthGuard.js";
239
- import { decodeJWT as ra, isJWTExpired as ia } from "./auth/jwt.js";
240
- import { lazyWithRetry as aa } from "./auth/lazy-with-retry.js";
241
- import { createRefreshQueue as oa } from "./auth/refresh-queue.js";
242
- import { DEFAULT_PUB_KEY_CRED_PARAMS as sa, PasskeyError as ca, base64UrlToBytes as la, bytesToBase64Url as ua, classifyPasskeyError as da, createPasskeyClient as fa, isConditionalMediationAvailable as pa, isPasskeySupported as ma, isPlatformAuthenticatorAvailable as ha } from "./auth/passkey.js";
243
- import { usePasskeyCapabilities as ga, usePasskeyRegistration as _a, usePasskeySignIn as va } from "./auth/use-passkey.js";
244
- import { createTempestAuth as ya } from "./auth/create-tempest-auth.js";
245
- import { AccessControlProvider as ba, useAccessControl as xa } from "./access/access-control-context.js";
246
- import { useCan as Sa } from "./access/use-can.js";
247
- import { Can as Ca } from "./access/Can.js";
248
- import { createRoleAccessControl as wa } from "./access/create-role-access-control.js";
249
- import { permissionsFromToken as Ta } from "./access/permissions-from-token.js";
250
- import { GoogleSignIn as Ea } from "./oauth/GoogleSignIn.js";
251
- import { useOAuthCallback as Da } from "./oauth/use-oauth-callback.js";
252
- import { CACHE_TIME as Oa, REFETCH_TIME as ka, STALE_TIME as Aa } from "./query/constants.js";
253
- import { createQueryKeys as ja } from "./query/create-query-keys.js";
254
- import { shouldRetryQuery as Ma } from "./query/retry-policy.js";
255
- import { QueryProvider as Na } from "./query/QueryProvider.js";
256
- import { emptyOffsetPage as Pa, isCursorPage as Fa, isOffsetPage as Ia } from "./query/pagination.js";
257
- import { usePaginatedQuery as La } from "./query/use-paginated-query.js";
258
- import { useCursorQuery as Ra } from "./query/use-cursor-query.js";
259
- import { useOfflineMutation as za } from "./query/use-offline-mutation.js";
260
- import { removeById as Ba, upsertById as Va } from "./query/optimistic.js";
261
- import { createOfflineStore as Ha } from "./offline/create-offline-store.js";
262
- import { persistQueryClientOffline as Ua } from "./query/offline-persistence.js";
263
- import { createDataProvider as Wa } from "./data/create-data-provider.js";
264
- import { TempestDataProvider as Ga, useDataProvider as Ka } from "./data/data-provider-context.js";
265
- import { listQueryKey as qa, oneQueryKey as Ja, useCreate as Ya, useDelete as Xa, useList as Za, useOne as Qa, useUpdate as $a } from "./data/use-resource.js";
266
- import { RouteGuard as eo } from "./router/RouteGuard.js";
267
- import { AppRouter as to, defineRoutes as no } from "./router/AppRouter.js";
268
- import { BrowserRouter as ro, HashRouter as io, Link as ao, MemoryRouter as oo, NavLink as so, Navigate as co, Outlet as lo, Route as uo, Routes as fo, redirect as po, useLocation as mo, useMatch as ho, useNavigate as go, useParams as _o, useRouteError as vo, useSearchParams as yo } from "./router/index.js";
269
- import { createStore as bo } from "./store/create-store.js";
270
- import { createSelectors as xo } from "./store/create-selectors.js";
271
- import { ThemeProvider as So, useTheme as Co } from "./theme/ThemeProvider.js";
272
- import { ErrorBoundary as wo } from "./error-boundary/ErrorBoundary.js";
273
- import { AppProviders as To } from "./app/AppProviders.js";
274
- import { createEventStream as Eo } from "./sse/create-event-stream.js";
275
- import { useEventStream as Do } from "./sse/use-event-stream.js";
276
- import { isPushSupported as Oo, urlBase64ToUint8Array as ko } from "./push/utils.js";
277
- import { WebPushClient as Ao, WebPushPermissionDeniedError as jo, WebPushUnsupportedError as Mo } from "./push/web-push-client.js";
278
- import { usePushSubscription as No } from "./push/use-push-subscription.js";
279
- import { installNotificationClickHandler as Po, installPushHandler as Fo, installSkipWaitingListener as Io } from "./sw/create-push-handler.js";
280
- import { createPartialResponse as Lo, installPrecache as Ro, installRuntimeCache as zo } from "./sw/cache.js";
281
- import { installBackgroundSync as Bo } from "./sw/background-sync.js";
282
- import { registerPeriodicSync as Vo } from "./sw/periodic-sync.js";
283
- import { clearCaches as Ho, inspectCaches as Uo } from "./sw/cache-inspect.js";
284
- import { createAudioPlayer as Wo, playAudio as Go, stopAudio as Ko } from "./audio/audio-player.js";
285
- import { useAudio as qo } from "./audio/use-audio.js";
286
- import { createSfxPool as Jo } from "./audio/sfx-pool.js";
287
- import { useSfxPool as Yo } from "./audio/use-sfx-pool.js";
288
- import { createVideoRecorder as Xo, isVideoRecordingSupported as Zo, pickVideoMimeType as Qo } from "./capture/video-recorder.js";
289
- import { useVideoRecorder as $o } from "./capture/use-video-recorder.js";
290
- import { isScreenCaptureSupported as es, useScreenCapture as ts } from "./capture/use-screen-capture.js";
291
- import { isSpeechRecognitionSupported as ns, useSpeechRecognition as rs } from "./capture/use-speech-recognition.js";
292
- import { createOfflineSync as is } from "./offline/create-offline-sync.js";
293
- import { higherVersionWins as as, lastWriteWins as os } from "./offline/conflict.js";
294
- import { useErrorHandler as ss } from "./error-boundary/use-error-handler.js";
295
- import { FormField as cs } from "./forms/FormField.js";
296
- import { validateForm as ls } from "./forms/validate-form.js";
297
- import { zodResolver as us } from "./forms/zod-resolver.js";
298
- import { useZodForm as ds } from "./forms/use-zod-form.js";
299
- import { formatCEP as fs, formatCNPJ as ps, unmask as ms, validateCNPJ as hs, validateCPF as gs } from "./forms/br-validators.js";
300
- import { CEPInput as _s, CNPJInput as vs, CPFInput as ys, MoneyInput as bs, PhoneInput as xs } from "./forms/masked-inputs.js";
301
- import { useViaCEP as Ss } from "./forms/use-viacep.js";
302
- import { Controller as Cs, FormProvider as ws, useFieldArray as Ts, useForm as Es, useFormContext as Ds, useFormState as Os, useWatch as ks } from "./forms/index.js";
303
- import { createWebSocket as As } from "./ws/create-web-socket.js";
304
- import { useWebSocket as js } from "./ws/use-web-socket.js";
305
- import { clampLatitude as Ms, isCoordinate as Ns, isValidLatitude as Ps, isValidLongitude as Fs, normalizeLongitude as Is } from "./geo/types.js";
306
- import { EARTH_RADIUS_KM as Ls, bearingDeg as Rs, haversineKm as zs, pathLengthKm as Bs, toRadians as Vs } from "./geo/distance.js";
307
- import { DEFAULT_CAR_SPEED_KMH as Hs, DEFAULT_CIRCUITY_FACTOR as Us, DEFAULT_MODE_DURATION_FACTORS as Ws, estimateTravel as Gs } from "./geo/estimate.js";
308
- import { boundingBox as Ks, boundsCenter as qs, expandBounds as Js } from "./geo/bounds.js";
309
- import { fitProjection as Ys, projectMercator as Xs, unprojectMercator as Zs } from "./geo/projection.js";
310
- import { createOSRMBackend as Qs } from "./geo/routing.js";
311
- import { createPositionTracker as $s } from "./geo/create-position-tracker.js";
312
- import { usePositionTracker as ec } from "./geo/use-position-tracker.js";
313
- import { TrajectoryMap as tc } from "./geo/TrajectoryMap.js";
314
- import { applyTheme as nc, readThemeToken as rc } from "./theme/apply-theme.js";
315
- import { contrastRatio as ic, createColorScale as ac, hexToOklch as oc, hexToRgb as sc, hexToRgbaString as cc, oklchToHex as lc, readableForeground as uc, relativeLuminance as dc, rgbToHex as fc } from "./theme/color.js";
316
- import { createTheme as pc, themeContrast as mc } from "./theme/create-theme.js";
317
- import { getThemePreset as hc, themePresets as gc } from "./theme/theme-presets.js";
318
- import { getInitialTheme as _c, themeInitScript as vc } from "./theme/initial-theme.js";
319
- import { consoleSink as yc, createLogger as bc } from "./logger/logger.js";
320
- import { TelemetryProvider as xc, useTelemetry as Sc } from "./telemetry/TelemetryProvider.js";
321
- import { consoleTelemetryAdapter as Cc } from "./telemetry/console-adapter.js";
322
- import { createSentryTelemetryAdapter as wc } from "./telemetry/sentry-adapter.js";
323
- import { createPostHogTelemetryAdapter as Tc } from "./telemetry/posthog-adapter.js";
324
- import { FeatureFlagsProvider as Ec, useFeatureFlag as Dc, useFlagValue as Oc } from "./feature-flags/FeatureFlagsProvider.js";
325
- import { createInMemoryFlags as kc } from "./feature-flags/in-memory-adapter.js";
326
- import { createGrowthBookFeatureFlagsAdapter as Ac } from "./feature-flags/growthbook-adapter.js";
327
- import { createLaunchDarklyFeatureFlagsAdapter as jc } from "./feature-flags/launchdarkly-adapter.js";
328
- import { DIVERGING_STEP_COUNT as Mc, ORDINAL_START_STEP as Nc, SEQUENTIAL_STEP_COUNT as Pc, divergingScale as Fc, scaleSteps as Ic, sequentialScale as Lc } from "./charts/scales.js";
329
- import { cachedResponseBytes as Rc } from "./perf/cache-size.js";
330
- import { readDeviceProfile as zc } from "./perf/device.js";
331
- import { formatDurationMs as Bc } from "./perf/format.js";
332
- import { createInferenceProfiler as Vc } from "./perf/profiler.js";
333
- export { Ar as AIChat, Dr as AIChatComposer, kr as AIChatTurn, dr as ALL_BARCODE_FORMATS, Ri as API_ERROR_OFFLINE_KEY, er as AUDIO_MIME_CANDIDATES, ba as AccessControlProvider, t as Accordion, n as Alert, r as AppBar, To as AppProviders, to as AppRouter, o as AppShell, s as AspectRatio, Qn as AudioPlayer, ur as AudioRecorder, na as AuthGuard, c as Avatar, l as AvatarGroup, i as BREAKPOINTS, u as Badge, d as Banner, Fr as BarList, yr as BarcodeScanner, f as BottomNavigation, p as BottomSheet, m as Breadcrumbs, ro as BrowserRouter, h as Button, Oa as CACHE_TIME, _s as CEPInput, vs as CNPJInput, ys as CPFInput, Mn as Calendar, Ca as Can, g as Card, Rn as Carousel, _ as Center, Yn as Chat, Jn as ChatComposer, v as Checkbox, y as ChipInput, hn as ClickOutside, ln as CodeBlock, En as Collapsible, b as Combobox, kn as Command, gn as ConditionalWrapper, S as ConfirmDialog, I as Container, Dn as ContextMenu, Cs as Controller, cn as CopyButton, zi as DEFAULT_API_ERROR_STRINGS, fr as DEFAULT_BARCODE_FORMATS, Hs as DEFAULT_CAR_SPEED_KMH, Xi as DEFAULT_CHUNK_SIZE, Us as DEFAULT_CIRCUITY_FACTOR, Ws as DEFAULT_MODE_DURATION_FACTORS, sa as DEFAULT_PUB_KEY_CRED_PARAMS, Mc as DIVERGING_STEP_COUNT, bn as DataList, zn as DataTable, w as DatePicker, Fn as DateRangePicker, xn as DescriptionList, T as Divider, E as Drawer, D as DropdownMenu, O as Dropzone, Ls as EARTH_RADIUS_KM, k as EmptyState, wo as ErrorBoundary, A as ErrorState, vn as ErrorText, Ec as FeatureFlagsProvider, j as FileUpload, Br as FilterBar, Vn as FloatingActionButton, _n as For, M as Form, N as FormActions, cs as FormField, ws as FormProvider, P as FormRow, F as FormSection, Ea as GoogleSignIn, L as Grid, io as HashRouter, St as Hide, On as HoverCard, Hi as I18nProvider, yn as Image, Jt as ImageCropper, C as Input, B as InstallBanner, V as InstallButton, rt as Kanban, at as Kbd, Tn as Label, Kn as Lightbox, ao as Link, Bn as ListTile, Or as Markdown, Mr as Masonry, oo as MemoryRouter, Ln as Menubar, x as Modal, ot as ModalsProvider, dn as Money, bs as MoneyInput, Pn as MultiSelect, lt as NProgressBar, so as NavLink, ct as Navbar, co as Navigate, In as NavigationMenu, Hn as NavigationRail, Qt as NotificationCenter, Nc as ORDINAL_START_STEP, Ze as OfflineIndicator, lo as Outlet, dt as Page, ft as Pagination, ca as PasskeyError, pt as PasswordInput, xs as PhoneInput, ht as PinInput, gt as Popover, mn as Portal, _t as Progress, rn as QRCapacityError, sn as QRCode, Na as QueryProvider, ka as REFETCH_TIME, vt as Radio, yt as RadioGroup, bt as RangeSlider, xt as RatingStars, Wn as RefreshIndicator, un as RelativeTime, jn as Resizable, uo as Route, eo as RouteGuard, fo as Routes, Pc as SEQUENTIAL_STEP_COUNT, Aa as STALE_TIME, wt as SafeArea, Xt as Scheduler, An as ScrollArea, Tt as SearchBar, Et as SegmentedControl, Dt as Select, Ct as Show, Ot as Sidebar, qn as SignaturePad, kt as Skeleton, Nn as Slider, At as Spacer, Yt as Sparkline, jt as Spinner, R as Stack, Mt as Stat, Nt as Stepper, Rt as StepperInput, zt as Switch, tt as SyncStatusBadge, Vt as Table, Ht as Tabs, Bt as Tag, xc as TelemetryProvider, Pi as TempestApiError, Ga as TempestDataProvider, Ut as Textarea, So as ThemeProvider, Un as TimePicker, Wt as Timeline, Kt as ToastProvider, Sn as Toggle, Cn as ToggleGroup, wn as ToggleGroupItem, Gt as Tooltip, Nr as Tour, tc as TrajectoryMap, jr as Transfer, fn as TreeView, pn as TruncateText, nt as UpdatePrompt, en as VirtualList, nn as VirtualTable, et as VisuallyHidden, Ao as WebPushClient, jo as WebPushPermissionDeniedError, Mo as WebPushUnsupportedError, Gn as Wizard, br as aiChatStrings, oe as announce, Vr as applyFilters, it as applyKanbanMove, nc as applyTheme, hi as assertNever, la as base64UrlToBytes, Rs as bearingDeg, cr as blobToWav, Ks as boundingBox, qs as boundsCenter, Ni as buildApiUrl, Pr as buildBarListRows, Ne as buildOpenInChromeIntent, ua as bytesToBase64Url, Rc as cachedResponseBytes, ti as camelCase, ni as capitalize, si as chunk, Pt as clamp, Ms as clampLatitude, da as classifyPasskeyError, se as clearAnnouncer, Ho as clearCaches, e as cn, tn as compareValues, Zr as compressToString, Qr as compressedStorage, $r as compressedStorageCodec, yc as consoleSink, Cc as consoleTelemetryAdapter, ic as contrastRatio, Li as createApiClient, Wo as createAudioPlayer, tr as createAudioRecorder, ta as createAuthStore, pr as createBarcodeDetector, ac as createColorScale, Wa as createDataProvider, Eo as createEventStream, Ac as createGrowthBookFeatureFlagsAdapter, Vi as createI18n, kc as createInMemoryFlags, Vc as createInferenceProfiler, jc as createLaunchDarklyFeatureFlagsAdapter, ir as createLevelMeter, Zi as createLocalUploadStorage, bc as createLogger, $n as createMediaRecorder, Qs as createOSRMBackend, Ha as createOfflineStore, is as createOfflineSync, Lo as createPartialResponse, fa as createPasskeyClient, $s as createPositionTracker, Tc as createPostHogTelemetryAdapter, ja as createQueryKeys, oa as createRefreshQueue, Qi as createResumableUpload, wa as createRoleAccessControl, xo as createSelectors, wc as createSentryTelemetryAdapter, Jo as createSfxPool, bo as createStore, ya as createTempestAuth, pc as createTheme, Xo as createVideoRecorder, As as createWebSocket, bi as debounce, ra as decodeJWT, ei as decompressFromString, di as deepMerge, no as defineRoutes, Bi as describeApiError, Ir as describeFilter, Fc as divergingScale, ji as downloadCsv, Pa as emptyOffsetPage, an as encodeQR, lr as encodeWav, mt as estimatePasswordStrength, Ue as estimateStorage, Gs as estimateTravel, Js as expandBounds, Lr as filtersFromSearchParams, Hr as filtersToQueryParams, Rr as filtersToSearchParams, Ys as fitProjection, Ft as formatBytes, fs as formatCEP, ps as formatCNPJ, Ur as formatCPF, It as formatCompactNumber, Wr as formatCurrency, Gr as formatDate, Kr as formatDateForInput, qr as formatDateTime, Bc as formatDurationMs, Jr as formatPercent, Yr as formatPhone, Yi as generateIdempotencyKey, _c as getInitialTheme, mr as getSupportedBarcodeFormats, hc as getThemePreset, ci as groupBy, zs as haversineKm, oc as hexToOklch, sc as hexToRgb, cc as hexToRgbaString, as as higherVersionWins, Uo as inspectCaches, Bo as installBackgroundSync, Po as installNotificationClickHandler, Ro as installPrecache, Fo as installPushHandler, zo as installRuntimeCache, Io as installSkipWaitingListener, Pe as isAndroid, Fe as isAndroidWithoutPromptApi, Fi as isApiError, Xn as isAudioOutputSelectionSupported, nr as isAudioRecordingSupported, hr as isBarcodeDetectionSupported, pa as isConditionalMediationAvailable, Ns as isCoordinate, Fa as isCursorPage, gi as isDefined, fi as isEmpty, xr as isGenerating, Ie as isIOS, ia as isJWTExpired, or as isMediaCaptureSupported, _i as isNumber, Ia as isOffsetPage, ma as isPasskeySupported, vi as isPlainObject, ha as isPlatformAuthenticatorAvailable, Oo as isPushSupported, es as isScreenCaptureSupported, Oi as isShareSupported, ns as isSpeechRecognitionSupported, Le as isStandalone, yi as isString, Ps as isValidLatitude, Fs as isValidLongitude, Zo as isVideoRecordingSupported, ri as kebabCase, Sr as lastAssistantId, os as lastWriteWins, aa as lazyWithRetry, qa as listQueryKey, on as matrixToPath, xi as memoizeOne, Ke as moveItem, gr as normalizeBarcode, Is as normalizeLongitude, ut as nprogress, lc as oklchToHex, pi as omit, Si as once, Ja as oneQueryKey, zr as operatorsFor, qi as parseResponse, Bs as pathLengthKm, Lt as percentOf, Ta as permissionsFromToken, Ua as persistQueryClientOffline, mi as pick, rr as pickAudioMimeType, Qo as pickVideoMimeType, Go as playAudio, ii as pluralize, Xs as projectMercator, Ei as randomId, li as range, zc as readDeviceProfile, rc as readThemeToken, uc as readableForeground, po as redirect, Vo as registerPeriodicSync, ze as registerServiceWorker, dc as relativeLuminance, Zt as relativeTime, Ba as removeById, We as requestPersistentStorage, Ii as retry, fc as rgbToHex, Cr as roleLabel, Ic as scaleSteps, Lc as sequentialScale, Zn as setAudioOutput, ki as share, Ai as shareOrDownloadBlob, Ma as shouldRetryQuery, Be as skipWaiting, wi as sleep, ai as slugify, Ko as stopAudio, Xr as storage, wr as tailSignature, mc as themeContrast, vc as themeInitScript, gc as themePresets, Ci as throttle, Mi as toCsv, Vs as toRadians, oi as truncate, Tr as turnTime, ui as uniqueBy, ms as unmask, Zs as unprojectMercator, Ve as unregisterAllServiceWorkers, $i as uploadFingerprint, Ji as uploadWithProgress, Va as upsertById, ko as urlBase64ToUint8Array, xa as useAccessControl, ce as useAnnounce, Y as useAsync, qo as useAudio, ar as useAudioRecorder, vr as useBarcodeScanner, z as useBeforeInstallPrompt, a as useBreakpoint, Sa as useCan, ke as useClickOutside, W as useClientFilter, ee as useClipboard, Se as useCountdown, xe as useCounter, Ya as useCreate, Ra as useCursorQuery, Ka as useDataProvider, H as useDebounce, de as useDeepMemo, Xa as useDelete, Ki as useDescribeApiError, ye as useDisclosure, we as useDocumentTitle, Z as useDocumentVisibility, ss as useErrorHandler, K as useEventListener, Do as useEventStream, Te as useFavicon, Dc as useFeatureFlag, Ts as useFieldArray, Oc as useFlagValue, ae as useFocusTrap, Es as useForm, Ds as useFormContext, Os as useFormState, re as useGeolocation, _e as useHover, Ui as useI18n, ne as useIdle, Re as useInstallPrompt, Q as useIntersectionObserver, pe as useInterval, Ae as useIsFirstRender, te as useKeyboardShortcut, ue as useLatestRef, Za as useList, be as useListState, q as useLocalStorage, mo as useLocation, ve as useLongPress, Me as useLongPressHandlers, Ee as useMap, ho as useMatch, Xe as useMediaDevices, Ye as useMediaPermission, G as useMediaQuery, sr as useMicrophone, st as useModals, go as useNavigate, $t as useNotificationInbox, Da as useOAuthCallback, je as useObjectUrl, za as useOfflineMutation, Qe as useOfflineSync, Qa as useOne, X as useOnline, Wi as useOptionalI18n, La as usePaginatedQuery, U as usePagination, _o as useParams, ga as usePasskeyCapabilities, _a as usePasskeyRegistration, va as usePasskeySignIn, ea as usePoll, ec as usePositionTracker, fe as usePrevious, No as usePushSubscription, Oe as useQueue, $ as useResizeObserver, vo as useRouteError, ts as useScreenCapture, ie as useScrollLock, Je as useScrollOverflow, yo as useSearchParams, He as useServiceWorkerUpdate, De as useSet, Yo as useSfxPool, qe as useSortable, rs as useSpeechRecognition, le as useStableCallback, Ge as useStorageEstimate, $e as useSyncStatus, Sc as useTelemetry, Co as useTheme, he as useThrottle, me as useTimeout, qt as useToast, J as useToggle, _r as useTorch, Gi as useTranslate, Ce as useTypewriter, $a as useUpdate, Ss as useViaCEP, $o as useVideoRecorder, ks as useWatch, js as useWebSocket, ge as useWindowSize, ds as useZodForm, hs as validateCNPJ, gs as validateCPF, ls as validateForm, Er as visibleTurns, Ti as withTimeout, Di as writeXlsx, us as zodResolver };
228
+ import { API_ERROR_OFFLINE_KEY as Ri, API_ERROR_VALIDATION_KEY as zi, DEFAULT_API_ERROR_STRINGS as Bi, describeApiError as Vi } from "./http/describe-api-error.js";
229
+ import { createI18n as Hi } from "./i18n/create-i18n.js";
230
+ import { I18nProvider as Ui, useI18n as Wi, useOptionalI18n as Gi, useTranslate as Ki } from "./i18n/I18nProvider.js";
231
+ import { useDescribeApiError as qi } from "./http/use-describe-api-error.js";
232
+ import { parseResponse as Ji } from "./http/parse-response.js";
233
+ import { uploadWithProgress as Yi } from "./http/upload-with-progress.js";
234
+ import { generateIdempotencyKey as Xi } from "./http/idempotency.js";
235
+ import { DEFAULT_CHUNK_SIZE as Zi, createLocalUploadStorage as Qi, createResumableUpload as $i, uploadFingerprint as ea } from "./http/resumable-upload.js";
236
+ import { usePoll as ta } from "./http/use-poll.js";
237
+ import { createAuthStore as na } from "./auth/create-auth-store.js";
238
+ import { AuthGuard as ra } from "./auth/AuthGuard.js";
239
+ import { decodeJWT as ia, isJWTExpired as aa } from "./auth/jwt.js";
240
+ import { lazyWithRetry as oa } from "./auth/lazy-with-retry.js";
241
+ import { createRefreshQueue as sa } from "./auth/refresh-queue.js";
242
+ import { DEFAULT_PUB_KEY_CRED_PARAMS as ca, PasskeyError as la, base64UrlToBytes as ua, bytesToBase64Url as da, classifyPasskeyError as fa, createPasskeyClient as pa, isConditionalMediationAvailable as ma, isPasskeySupported as ha, isPlatformAuthenticatorAvailable as ga } from "./auth/passkey.js";
243
+ import { usePasskeyCapabilities as _a, usePasskeyRegistration as va, usePasskeySignIn as ya } from "./auth/use-passkey.js";
244
+ import { createTempestAuth as ba } from "./auth/create-tempest-auth.js";
245
+ import { AccessControlProvider as xa, useAccessControl as Sa } from "./access/access-control-context.js";
246
+ import { useCan as Ca } from "./access/use-can.js";
247
+ import { Can as wa } from "./access/Can.js";
248
+ import { createRoleAccessControl as Ta } from "./access/create-role-access-control.js";
249
+ import { permissionsFromToken as Ea } from "./access/permissions-from-token.js";
250
+ import { GoogleSignIn as Da } from "./oauth/GoogleSignIn.js";
251
+ import { useOAuthCallback as Oa } from "./oauth/use-oauth-callback.js";
252
+ import { CACHE_TIME as ka, REFETCH_TIME as Aa, STALE_TIME as ja } from "./query/constants.js";
253
+ import { createQueryKeys as Ma } from "./query/create-query-keys.js";
254
+ import { shouldRetryQuery as Na } from "./query/retry-policy.js";
255
+ import { QueryProvider as Pa } from "./query/QueryProvider.js";
256
+ import { emptyOffsetPage as Fa, isCursorPage as Ia, isOffsetPage as La } from "./query/pagination.js";
257
+ import { usePaginatedQuery as Ra } from "./query/use-paginated-query.js";
258
+ import { useCursorQuery as za } from "./query/use-cursor-query.js";
259
+ import { useOfflineMutation as Ba } from "./query/use-offline-mutation.js";
260
+ import { removeById as Va, upsertById as Ha } from "./query/optimistic.js";
261
+ import { createOfflineStore as Ua } from "./offline/create-offline-store.js";
262
+ import { persistQueryClientOffline as Wa } from "./query/offline-persistence.js";
263
+ import { createDataProvider as Ga } from "./data/create-data-provider.js";
264
+ import { TempestDataProvider as Ka, useDataProvider as qa } from "./data/data-provider-context.js";
265
+ import { listQueryKey as Ja, oneQueryKey as Ya, useCreate as Xa, useDelete as Za, useList as Qa, useOne as $a, useUpdate as eo } from "./data/use-resource.js";
266
+ import { RouteGuard as to } from "./router/RouteGuard.js";
267
+ import { AppRouter as no, defineRoutes as ro } from "./router/AppRouter.js";
268
+ import { BrowserRouter as io, HashRouter as ao, Link as oo, MemoryRouter as so, NavLink as co, Navigate as lo, Outlet as uo, Route as fo, Routes as po, redirect as mo, useLocation as ho, useMatch as go, useNavigate as _o, useParams as vo, useRouteError as yo, useSearchParams as bo } from "./router/index.js";
269
+ import { createStore as xo } from "./store/create-store.js";
270
+ import { createSelectors as So } from "./store/create-selectors.js";
271
+ import { ThemeProvider as Co, useTheme as wo } from "./theme/ThemeProvider.js";
272
+ import { ErrorBoundary as To } from "./error-boundary/ErrorBoundary.js";
273
+ import { AppProviders as Eo } from "./app/AppProviders.js";
274
+ import { createEventStream as Do } from "./sse/create-event-stream.js";
275
+ import { useEventStream as Oo } from "./sse/use-event-stream.js";
276
+ import { isPushSupported as ko, urlBase64ToUint8Array as Ao } from "./push/utils.js";
277
+ import { WebPushClient as jo, WebPushPermissionDeniedError as Mo, WebPushUnsupportedError as No } from "./push/web-push-client.js";
278
+ import { usePushSubscription as Po } from "./push/use-push-subscription.js";
279
+ import { installNotificationClickHandler as Fo, installPushHandler as Io, installSkipWaitingListener as Lo } from "./sw/create-push-handler.js";
280
+ import { createPartialResponse as Ro, installPrecache as zo, installRuntimeCache as Bo } from "./sw/cache.js";
281
+ import { installBackgroundSync as Vo } from "./sw/background-sync.js";
282
+ import { registerPeriodicSync as Ho } from "./sw/periodic-sync.js";
283
+ import { clearCaches as Uo, inspectCaches as Wo } from "./sw/cache-inspect.js";
284
+ import { createAudioPlayer as Go, playAudio as Ko, stopAudio as qo } from "./audio/audio-player.js";
285
+ import { useAudio as Jo } from "./audio/use-audio.js";
286
+ import { createSfxPool as Yo } from "./audio/sfx-pool.js";
287
+ import { useSfxPool as Xo } from "./audio/use-sfx-pool.js";
288
+ import { createVideoRecorder as Zo, isVideoRecordingSupported as Qo, pickVideoMimeType as $o } from "./capture/video-recorder.js";
289
+ import { useVideoRecorder as es } from "./capture/use-video-recorder.js";
290
+ import { isScreenCaptureSupported as ts, useScreenCapture as ns } from "./capture/use-screen-capture.js";
291
+ import { isSpeechRecognitionSupported as rs, useSpeechRecognition as is } from "./capture/use-speech-recognition.js";
292
+ import { createOfflineSync as as } from "./offline/create-offline-sync.js";
293
+ import { higherVersionWins as os, lastWriteWins as ss } from "./offline/conflict.js";
294
+ import { useErrorHandler as cs } from "./error-boundary/use-error-handler.js";
295
+ import { FormField as ls } from "./forms/FormField.js";
296
+ import { validateForm as us } from "./forms/validate-form.js";
297
+ import { zodResolver as ds } from "./forms/zod-resolver.js";
298
+ import { useZodForm as fs } from "./forms/use-zod-form.js";
299
+ import { formatCEP as ps, formatCNPJ as ms, unmask as hs, validateCNPJ as gs, validateCPF as _s } from "./forms/br-validators.js";
300
+ import { CEPInput as vs, CNPJInput as ys, CPFInput as bs, MoneyInput as xs, PhoneInput as Ss } from "./forms/masked-inputs.js";
301
+ import { useViaCEP as Cs } from "./forms/use-viacep.js";
302
+ import { Controller as ws, FormProvider as Ts, useFieldArray as Es, useForm as Ds, useFormContext as Os, useFormState as ks, useWatch as As } from "./forms/index.js";
303
+ import { createWebSocket as js } from "./ws/create-web-socket.js";
304
+ import { useWebSocket as Ms } from "./ws/use-web-socket.js";
305
+ import { clampLatitude as Ns, isCoordinate as Ps, isValidLatitude as Fs, isValidLongitude as Is, normalizeLongitude as Ls } from "./geo/types.js";
306
+ import { EARTH_RADIUS_KM as Rs, bearingDeg as zs, haversineKm as Bs, pathLengthKm as Vs, toRadians as Hs } from "./geo/distance.js";
307
+ import { DEFAULT_CAR_SPEED_KMH as Us, DEFAULT_CIRCUITY_FACTOR as Ws, DEFAULT_MODE_DURATION_FACTORS as Gs, estimateTravel as Ks } from "./geo/estimate.js";
308
+ import { boundingBox as qs, boundsCenter as Js, expandBounds as Ys } from "./geo/bounds.js";
309
+ import { fitProjection as Xs, projectMercator as Zs, unprojectMercator as Qs } from "./geo/projection.js";
310
+ import { createOSRMBackend as $s } from "./geo/routing.js";
311
+ import { createPositionTracker as ec } from "./geo/create-position-tracker.js";
312
+ import { usePositionTracker as tc } from "./geo/use-position-tracker.js";
313
+ import { TrajectoryMap as nc } from "./geo/TrajectoryMap.js";
314
+ import { applyTheme as rc, readThemeToken as ic } from "./theme/apply-theme.js";
315
+ import { contrastRatio as ac, createColorScale as oc, hexToOklch as sc, hexToRgb as cc, hexToRgbaString as lc, oklchToHex as uc, readableForeground as dc, relativeLuminance as fc, rgbToHex as pc } from "./theme/color.js";
316
+ import { createTheme as mc, themeContrast as hc } from "./theme/create-theme.js";
317
+ import { getThemePreset as gc, themePresets as _c } from "./theme/theme-presets.js";
318
+ import { getInitialTheme as vc, themeInitScript as yc } from "./theme/initial-theme.js";
319
+ import { consoleSink as bc, createLogger as xc } from "./logger/logger.js";
320
+ import { TelemetryProvider as Sc, useTelemetry as Cc } from "./telemetry/TelemetryProvider.js";
321
+ import { consoleTelemetryAdapter as wc } from "./telemetry/console-adapter.js";
322
+ import { createSentryTelemetryAdapter as Tc } from "./telemetry/sentry-adapter.js";
323
+ import { createPostHogTelemetryAdapter as Ec } from "./telemetry/posthog-adapter.js";
324
+ import { FeatureFlagsProvider as Dc, useFeatureFlag as Oc, useFlagValue as kc } from "./feature-flags/FeatureFlagsProvider.js";
325
+ import { createInMemoryFlags as Ac } from "./feature-flags/in-memory-adapter.js";
326
+ import { createGrowthBookFeatureFlagsAdapter as jc } from "./feature-flags/growthbook-adapter.js";
327
+ import { createLaunchDarklyFeatureFlagsAdapter as Mc } from "./feature-flags/launchdarkly-adapter.js";
328
+ import { DIVERGING_STEP_COUNT as Nc, ORDINAL_START_STEP as Pc, SEQUENTIAL_STEP_COUNT as Fc, divergingScale as Ic, scaleSteps as Lc, sequentialScale as Rc } from "./charts/scales.js";
329
+ import { cachedResponseBytes as zc } from "./perf/cache-size.js";
330
+ import { readDeviceProfile as Bc } from "./perf/device.js";
331
+ import { formatDurationMs as Vc } from "./perf/format.js";
332
+ import { createInferenceProfiler as Hc } from "./perf/profiler.js";
333
+ export { Ar as AIChat, Dr as AIChatComposer, kr as AIChatTurn, dr as ALL_BARCODE_FORMATS, Ri as API_ERROR_OFFLINE_KEY, zi as API_ERROR_VALIDATION_KEY, er as AUDIO_MIME_CANDIDATES, xa as AccessControlProvider, t as Accordion, n as Alert, r as AppBar, Eo as AppProviders, no as AppRouter, o as AppShell, s as AspectRatio, Qn as AudioPlayer, ur as AudioRecorder, ra as AuthGuard, c as Avatar, l as AvatarGroup, i as BREAKPOINTS, u as Badge, d as Banner, Fr as BarList, yr as BarcodeScanner, f as BottomNavigation, p as BottomSheet, m as Breadcrumbs, io as BrowserRouter, h as Button, ka as CACHE_TIME, vs as CEPInput, ys as CNPJInput, bs as CPFInput, Mn as Calendar, wa as Can, g as Card, Rn as Carousel, _ as Center, Yn as Chat, Jn as ChatComposer, v as Checkbox, y as ChipInput, hn as ClickOutside, ln as CodeBlock, En as Collapsible, b as Combobox, kn as Command, gn as ConditionalWrapper, S as ConfirmDialog, I as Container, Dn as ContextMenu, ws as Controller, cn as CopyButton, Bi as DEFAULT_API_ERROR_STRINGS, fr as DEFAULT_BARCODE_FORMATS, Us as DEFAULT_CAR_SPEED_KMH, Zi as DEFAULT_CHUNK_SIZE, Ws as DEFAULT_CIRCUITY_FACTOR, Gs as DEFAULT_MODE_DURATION_FACTORS, ca as DEFAULT_PUB_KEY_CRED_PARAMS, Nc as DIVERGING_STEP_COUNT, bn as DataList, zn as DataTable, w as DatePicker, Fn as DateRangePicker, xn as DescriptionList, T as Divider, E as Drawer, D as DropdownMenu, O as Dropzone, Rs as EARTH_RADIUS_KM, k as EmptyState, To as ErrorBoundary, A as ErrorState, vn as ErrorText, Dc as FeatureFlagsProvider, j as FileUpload, Br as FilterBar, Vn as FloatingActionButton, _n as For, M as Form, N as FormActions, ls as FormField, Ts as FormProvider, P as FormRow, F as FormSection, Da as GoogleSignIn, L as Grid, ao as HashRouter, St as Hide, On as HoverCard, Ui as I18nProvider, yn as Image, Jt as ImageCropper, C as Input, B as InstallBanner, V as InstallButton, rt as Kanban, at as Kbd, Tn as Label, Kn as Lightbox, oo as Link, Bn as ListTile, Or as Markdown, Mr as Masonry, so as MemoryRouter, Ln as Menubar, x as Modal, ot as ModalsProvider, dn as Money, xs as MoneyInput, Pn as MultiSelect, lt as NProgressBar, co as NavLink, ct as Navbar, lo as Navigate, In as NavigationMenu, Hn as NavigationRail, Qt as NotificationCenter, Pc as ORDINAL_START_STEP, Ze as OfflineIndicator, uo as Outlet, dt as Page, ft as Pagination, la as PasskeyError, pt as PasswordInput, Ss as PhoneInput, ht as PinInput, gt as Popover, mn as Portal, _t as Progress, rn as QRCapacityError, sn as QRCode, Pa as QueryProvider, Aa as REFETCH_TIME, vt as Radio, yt as RadioGroup, bt as RangeSlider, xt as RatingStars, Wn as RefreshIndicator, un as RelativeTime, jn as Resizable, fo as Route, to as RouteGuard, po as Routes, Fc as SEQUENTIAL_STEP_COUNT, ja as STALE_TIME, wt as SafeArea, Xt as Scheduler, An as ScrollArea, Tt as SearchBar, Et as SegmentedControl, Dt as Select, Ct as Show, Ot as Sidebar, qn as SignaturePad, kt as Skeleton, Nn as Slider, At as Spacer, Yt as Sparkline, jt as Spinner, R as Stack, Mt as Stat, Nt as Stepper, Rt as StepperInput, zt as Switch, tt as SyncStatusBadge, Vt as Table, Ht as Tabs, Bt as Tag, Sc as TelemetryProvider, Pi as TempestApiError, Ka as TempestDataProvider, Ut as Textarea, Co as ThemeProvider, Un as TimePicker, Wt as Timeline, Kt as ToastProvider, Sn as Toggle, Cn as ToggleGroup, wn as ToggleGroupItem, Gt as Tooltip, Nr as Tour, nc as TrajectoryMap, jr as Transfer, fn as TreeView, pn as TruncateText, nt as UpdatePrompt, en as VirtualList, nn as VirtualTable, et as VisuallyHidden, jo as WebPushClient, Mo as WebPushPermissionDeniedError, No as WebPushUnsupportedError, Gn as Wizard, br as aiChatStrings, oe as announce, Vr as applyFilters, it as applyKanbanMove, rc as applyTheme, hi as assertNever, ua as base64UrlToBytes, zs as bearingDeg, cr as blobToWav, qs as boundingBox, Js as boundsCenter, Ni as buildApiUrl, Pr as buildBarListRows, Ne as buildOpenInChromeIntent, da as bytesToBase64Url, zc as cachedResponseBytes, ti as camelCase, ni as capitalize, si as chunk, Pt as clamp, Ns as clampLatitude, fa as classifyPasskeyError, se as clearAnnouncer, Uo as clearCaches, e as cn, tn as compareValues, Zr as compressToString, Qr as compressedStorage, $r as compressedStorageCodec, bc as consoleSink, wc as consoleTelemetryAdapter, ac as contrastRatio, Li as createApiClient, Go as createAudioPlayer, tr as createAudioRecorder, na as createAuthStore, pr as createBarcodeDetector, oc as createColorScale, Ga as createDataProvider, Do as createEventStream, jc as createGrowthBookFeatureFlagsAdapter, Hi as createI18n, Ac as createInMemoryFlags, Hc as createInferenceProfiler, Mc as createLaunchDarklyFeatureFlagsAdapter, ir as createLevelMeter, Qi as createLocalUploadStorage, xc as createLogger, $n as createMediaRecorder, $s as createOSRMBackend, Ua as createOfflineStore, as as createOfflineSync, Ro as createPartialResponse, pa as createPasskeyClient, ec as createPositionTracker, Ec as createPostHogTelemetryAdapter, Ma as createQueryKeys, sa as createRefreshQueue, $i as createResumableUpload, Ta as createRoleAccessControl, So as createSelectors, Tc as createSentryTelemetryAdapter, Yo as createSfxPool, xo as createStore, ba as createTempestAuth, mc as createTheme, Zo as createVideoRecorder, js as createWebSocket, bi as debounce, ia as decodeJWT, ei as decompressFromString, di as deepMerge, ro as defineRoutes, Vi as describeApiError, Ir as describeFilter, Ic as divergingScale, ji as downloadCsv, Fa as emptyOffsetPage, an as encodeQR, lr as encodeWav, mt as estimatePasswordStrength, Ue as estimateStorage, Ks as estimateTravel, Ys as expandBounds, Lr as filtersFromSearchParams, Hr as filtersToQueryParams, Rr as filtersToSearchParams, Xs as fitProjection, Ft as formatBytes, ps as formatCEP, ms as formatCNPJ, Ur as formatCPF, It as formatCompactNumber, Wr as formatCurrency, Gr as formatDate, Kr as formatDateForInput, qr as formatDateTime, Vc as formatDurationMs, Jr as formatPercent, Yr as formatPhone, Xi as generateIdempotencyKey, vc as getInitialTheme, mr as getSupportedBarcodeFormats, gc as getThemePreset, ci as groupBy, Bs as haversineKm, sc as hexToOklch, cc as hexToRgb, lc as hexToRgbaString, os as higherVersionWins, Wo as inspectCaches, Vo as installBackgroundSync, Fo as installNotificationClickHandler, zo as installPrecache, Io as installPushHandler, Bo as installRuntimeCache, Lo as installSkipWaitingListener, Pe as isAndroid, Fe as isAndroidWithoutPromptApi, Fi as isApiError, Xn as isAudioOutputSelectionSupported, nr as isAudioRecordingSupported, hr as isBarcodeDetectionSupported, ma as isConditionalMediationAvailable, Ps as isCoordinate, Ia as isCursorPage, gi as isDefined, fi as isEmpty, xr as isGenerating, Ie as isIOS, aa as isJWTExpired, or as isMediaCaptureSupported, _i as isNumber, La as isOffsetPage, ha as isPasskeySupported, vi as isPlainObject, ga as isPlatformAuthenticatorAvailable, ko as isPushSupported, ts as isScreenCaptureSupported, Oi as isShareSupported, rs as isSpeechRecognitionSupported, Le as isStandalone, yi as isString, Fs as isValidLatitude, Is as isValidLongitude, Qo as isVideoRecordingSupported, ri as kebabCase, Sr as lastAssistantId, ss as lastWriteWins, oa as lazyWithRetry, Ja as listQueryKey, on as matrixToPath, xi as memoizeOne, Ke as moveItem, gr as normalizeBarcode, Ls as normalizeLongitude, ut as nprogress, uc as oklchToHex, pi as omit, Si as once, Ya as oneQueryKey, zr as operatorsFor, Ji as parseResponse, Vs as pathLengthKm, Lt as percentOf, Ea as permissionsFromToken, Wa as persistQueryClientOffline, mi as pick, rr as pickAudioMimeType, $o as pickVideoMimeType, Ko as playAudio, ii as pluralize, Zs as projectMercator, Ei as randomId, li as range, Bc as readDeviceProfile, ic as readThemeToken, dc as readableForeground, mo as redirect, Ho as registerPeriodicSync, ze as registerServiceWorker, fc as relativeLuminance, Zt as relativeTime, Va as removeById, We as requestPersistentStorage, Ii as retry, pc as rgbToHex, Cr as roleLabel, Lc as scaleSteps, Rc as sequentialScale, Zn as setAudioOutput, ki as share, Ai as shareOrDownloadBlob, Na as shouldRetryQuery, Be as skipWaiting, wi as sleep, ai as slugify, qo as stopAudio, Xr as storage, wr as tailSignature, hc as themeContrast, yc as themeInitScript, _c as themePresets, Ci as throttle, Mi as toCsv, Hs as toRadians, oi as truncate, Tr as turnTime, ui as uniqueBy, hs as unmask, Qs as unprojectMercator, Ve as unregisterAllServiceWorkers, ea as uploadFingerprint, Yi as uploadWithProgress, Ha as upsertById, Ao as urlBase64ToUint8Array, Sa as useAccessControl, ce as useAnnounce, Y as useAsync, Jo as useAudio, ar as useAudioRecorder, vr as useBarcodeScanner, z as useBeforeInstallPrompt, a as useBreakpoint, Ca as useCan, ke as useClickOutside, W as useClientFilter, ee as useClipboard, Se as useCountdown, xe as useCounter, Xa as useCreate, za as useCursorQuery, qa as useDataProvider, H as useDebounce, de as useDeepMemo, Za as useDelete, qi as useDescribeApiError, ye as useDisclosure, we as useDocumentTitle, Z as useDocumentVisibility, cs as useErrorHandler, K as useEventListener, Oo as useEventStream, Te as useFavicon, Oc as useFeatureFlag, Es as useFieldArray, kc as useFlagValue, ae as useFocusTrap, Ds as useForm, Os as useFormContext, ks as useFormState, re as useGeolocation, _e as useHover, Wi as useI18n, ne as useIdle, Re as useInstallPrompt, Q as useIntersectionObserver, pe as useInterval, Ae as useIsFirstRender, te as useKeyboardShortcut, ue as useLatestRef, Qa as useList, be as useListState, q as useLocalStorage, ho as useLocation, ve as useLongPress, Me as useLongPressHandlers, Ee as useMap, go as useMatch, Xe as useMediaDevices, Ye as useMediaPermission, G as useMediaQuery, sr as useMicrophone, st as useModals, _o as useNavigate, $t as useNotificationInbox, Oa as useOAuthCallback, je as useObjectUrl, Ba as useOfflineMutation, Qe as useOfflineSync, $a as useOne, X as useOnline, Gi as useOptionalI18n, Ra as usePaginatedQuery, U as usePagination, vo as useParams, _a as usePasskeyCapabilities, va as usePasskeyRegistration, ya as usePasskeySignIn, ta as usePoll, tc as usePositionTracker, fe as usePrevious, Po as usePushSubscription, Oe as useQueue, $ as useResizeObserver, yo as useRouteError, ns as useScreenCapture, ie as useScrollLock, Je as useScrollOverflow, bo as useSearchParams, He as useServiceWorkerUpdate, De as useSet, Xo as useSfxPool, qe as useSortable, is as useSpeechRecognition, le as useStableCallback, Ge as useStorageEstimate, $e as useSyncStatus, Cc as useTelemetry, wo as useTheme, he as useThrottle, me as useTimeout, qt as useToast, J as useToggle, _r as useTorch, Ki as useTranslate, Ce as useTypewriter, eo as useUpdate, Cs as useViaCEP, es as useVideoRecorder, As as useWatch, Ms as useWebSocket, ge as useWindowSize, fs as useZodForm, gs as validateCNPJ, _s as validateCPF, us as validateForm, Er as visibleTurns, Ti as withTimeout, Di as writeXlsx, ds as zodResolver };
@@ -0,0 +1,2 @@
1
+ function e(){try{return process.env.NODE_ENV!==`production`}catch{return!1}}exports.isDevBuild=e;
2
+ //# sourceMappingURL=dev-mode.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.cjs","names":[],"sources":["../../src/utils/dev-mode.ts"],"sourcesContent":["/**\n * Internal, and imported by path (`../utils/dev-mode`) rather than through the\n * `utils` barrel: re-exporting it would make a one-line env read part of the\n * package's public API, with the semver weight that carries, for something no\n * consumer asked for. The three call sites are `<Icon>`, `useStickyBodyWarning`\n * and the `DataTable` dev warnings.\n */\n\n/**\n * Whether the consuming app was built for development.\n *\n * Reads `process.env.NODE_ENV`, which every supported bundler (Vite, webpack,\n * Rspack, Parcel) replaces with a literal **while building the app**. That\n * timing is the whole point: `import.meta.env.DEV` looks equivalent and is not,\n * because Vite replaces it while building *this package*, so a published\n * artifact carries the constant `false` and every guard behind it becomes dead\n * code the app's own dev server can no longer switch on.\n *\n * The expression is written out in full, and the failure is caught rather than\n * guarded against. A `typeof process === \"undefined\"` check would read as the\n * careful version and quietly reintroduce the bug: bundlers substitute the\n * member expression `process.env.NODE_ENV` and nothing else, so in a browser —\n * where the identifier `process` does not exist — the guard would return early\n * while the literal right after it had already been replaced with\n * `\"development\"`.\n *\n * Returns `false` when the read throws, which is the environment that defines\n * neither symbol: a raw service-worker context, a plain\n * `<script type=\"module\">`, a bundler substituting nothing. Staying quiet there\n * is deliberate — a dev-only warning that cannot prove it is in development is\n * better silent than shouting in someone's production console.\n *\n * @returns Whether development-only diagnostics should run.\n *\n * @example\n * if (isDevBuild()) console.warn(\"[my-app] this prop combination does nothing\");\n *\n * @tempest-limits empty-catch — the only thing the read can throw is the\n * environment answering \"not defined\", which is the return value, not an error\n * worth reporting. Logging it would print on every call in exactly the context\n * that has nowhere to print.\n */\nexport function isDevBuild(): boolean {\n try {\n return process.env.NODE_ENV !== \"production\";\n } catch {\n return false;\n }\n}\n"],"mappings":"AA0CA,SAAgB,GAAsB,CAClC,GAAI,CACA,OAAA,QAAA,IAAA,WAAgC,YACpC,MAAQ,CACJ,MAAO,EACX,CACJ"}
@@ -0,0 +1,12 @@
1
+ //#region src/utils/dev-mode.ts
2
+ function e() {
3
+ try {
4
+ return process.env.NODE_ENV !== "production";
5
+ } catch {
6
+ return !1;
7
+ }
8
+ }
9
+ //#endregion
10
+ export { e as isDevBuild };
11
+
12
+ //# sourceMappingURL=dev-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-mode.js","names":[],"sources":["../../src/utils/dev-mode.ts"],"sourcesContent":["/**\n * Internal, and imported by path (`../utils/dev-mode`) rather than through the\n * `utils` barrel: re-exporting it would make a one-line env read part of the\n * package's public API, with the semver weight that carries, for something no\n * consumer asked for. The three call sites are `<Icon>`, `useStickyBodyWarning`\n * and the `DataTable` dev warnings.\n */\n\n/**\n * Whether the consuming app was built for development.\n *\n * Reads `process.env.NODE_ENV`, which every supported bundler (Vite, webpack,\n * Rspack, Parcel) replaces with a literal **while building the app**. That\n * timing is the whole point: `import.meta.env.DEV` looks equivalent and is not,\n * because Vite replaces it while building *this package*, so a published\n * artifact carries the constant `false` and every guard behind it becomes dead\n * code the app's own dev server can no longer switch on.\n *\n * The expression is written out in full, and the failure is caught rather than\n * guarded against. A `typeof process === \"undefined\"` check would read as the\n * careful version and quietly reintroduce the bug: bundlers substitute the\n * member expression `process.env.NODE_ENV` and nothing else, so in a browser —\n * where the identifier `process` does not exist — the guard would return early\n * while the literal right after it had already been replaced with\n * `\"development\"`.\n *\n * Returns `false` when the read throws, which is the environment that defines\n * neither symbol: a raw service-worker context, a plain\n * `<script type=\"module\">`, a bundler substituting nothing. Staying quiet there\n * is deliberate — a dev-only warning that cannot prove it is in development is\n * better silent than shouting in someone's production console.\n *\n * @returns Whether development-only diagnostics should run.\n *\n * @example\n * if (isDevBuild()) console.warn(\"[my-app] this prop combination does nothing\");\n *\n * @tempest-limits empty-catch — the only thing the read can throw is the\n * environment answering \"not defined\", which is the return value, not an error\n * worth reporting. Logging it would print on every call in exactly the context\n * that has nowhere to print.\n */\nexport function isDevBuild(): boolean {\n try {\n return process.env.NODE_ENV !== \"production\";\n } catch {\n return false;\n }\n}\n"],"mappings":";AA0CA,SAAgB,IAAsB;CAClC,IAAI;EACA,OAAA,QAAA,IAAA,aAAgC;CACpC,QAAQ;EACJ,OAAO;CACX;AACJ"}
@@ -1,9 +1,9 @@
1
- const e=require("../icons/generated/aliases.cjs"),t=require("../icons/generated/icon-names.cjs");let n=require("node:path"),r=require("node:fs/promises");var i=`virtual:tempest-icons`,a=`\0${i}`,o=[/\bname\s*=\s*["']([a-z0-9-]+)["']/g,/\bname\s*=\s*\{\s*["']([a-z0-9-]+)["']\s*\}/g,/\bname\s*:\s*["']([a-z0-9-]+)["']/g],s=/\.[cm]?[jt]sx?$/,c=new Set([`node_modules`,`dist`,`build`,`coverage`]);function l(e,t){let n=new Set;for(let r of o){r.lastIndex=0;let i;for(;(i=r.exec(e))!==null;)t.has(i[1])&&n.add(i[1])}return[...n]}function u(e,t){let n=[...new Set(e)].sort();if(!n.length)return`export const staticIcons = {};
2
- `;let r=new Map;for(let e of n)r.set(e,d(t[e]??e));return`import { ${[...new Set(r.values())].sort().map(e=>p(e)===e?e:`${e} as ${p(e)}`).join(`, `)} } from "lucide-react";
1
+ const e=require("../icons/generated/aliases.cjs"),t=require("../icons/generated/icon-names.cjs");let n=require("node:path"),r=require("node:fs/promises");var i=`tempest-react-sdk/icons/virtual`,a=`virtual:tempest-icons`,o=`\0${a}`,s=[/\bname\s*=\s*["']([a-z0-9-]+)["']/g,/\bname\s*=\s*\{\s*["']([a-z0-9-]+)["']\s*\}/g,/\bname\s*:\s*["']([a-z0-9-]+)["']/g],c=/\.[cm]?[jt]sx?$/,l=new Set([`node_modules`,`dist`,`build`,`coverage`]);function u(e,t){let n=new Set;for(let r of s){r.lastIndex=0;let i;for(;(i=r.exec(e))!==null;)t.has(i[1])&&n.add(i[1])}return[...n]}function d(e,t){let n=[...new Set(e)].sort();if(!n.length)return`export const staticIcons = {};
2
+ `;let r=new Map;for(let e of n)r.set(e,f(t[e]??e));return`import { ${[...new Set(r.values())].sort().map(e=>m(e)===e?e:`${e} as ${m(e)}`).join(`, `)} } from "lucide-react";
3
3
 
4
4
  export const staticIcons = {
5
- ${n.map(e=>` "${e}": ${p(r.get(e))},`).join(`
5
+ ${n.map(e=>` "${e}": ${m(r.get(e))},`).join(`
6
6
  `)}
7
7
  };
8
- `}function d(e){return e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}var f=new Set([`Infinity`,`NaN`,`undefined`,`eval`,`arguments`]);function p(e){return f.has(e)?`${e}Icon`:e}async function m(e,t){let i=[],a;try{a=await(0,r.readdir)(e,{withFileTypes:!0})}catch{return i}for(let r of a)if(r.isDirectory()){if(t.has(r.name)||r.name.startsWith(`.`))continue;i.push(...await m((0,n.join)(e,r.name),t))}else r.isFile()&&s.test(r.name)&&i.push((0,n.join)(e,r.name));return i}function h(i={}){let{dir:o=`src`,include:d=[],skipDirs:f}=i,p=new Set(t.iconNames),h=new Set(f??c),g=new Set(d.filter(e=>p.has(e))),_=process.cwd(),v=async()=>{let e=await m((0,n.resolve)(_,o),h);for(let t of e)try{let e=await(0,r.readFile)(t,`utf8`);for(let t of l(e,p))g.add(t)}catch{}};return{name:`tempest-icons`,enforce:`pre`,configResolved(e){_=e.root??_},async buildStart(){await v()},resolveId(e){return e===`virtual:tempest-icons`?a:null},load(t){return t===a?u([...g],e.iconAliases):null},async handleHotUpdate(e){if(!s.test(e.file))return;let t=g.size;for(let t of l(await e.read(),p))g.add(t);if(g.size===t)return;let n=e.server.moduleGraph.getModuleById(a);if(n)return[n]}}}exports.TEMPEST_ICONS_ID=i,exports.buildIconsModule=u,exports.scanIconSlugs=l,exports.tempestIcons=h;
8
+ `}function f(e){return e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}var p=new Set([`Infinity`,`NaN`,`undefined`,`eval`,`arguments`]);function m(e){return p.has(e)?`${e}Icon`:e}async function h(e,t){let i=[],a;try{a=await(0,r.readdir)(e,{withFileTypes:!0})}catch{return i}for(let r of a)if(r.isDirectory()){if(t.has(r.name)||r.name.startsWith(`.`))continue;i.push(...await h((0,n.join)(e,r.name),t))}else r.isFile()&&c.test(r.name)&&i.push((0,n.join)(e,r.name));return i}function g(i={}){let{dir:a=`src`,include:s=[],skipDirs:f}=i,p=new Set(t.iconNames),m=new Set(f??l),g=new Set(s.filter(e=>p.has(e))),_=process.cwd(),v=async()=>{let e=await h((0,n.resolve)(_,a),m);for(let t of e)try{let e=await(0,r.readFile)(t,`utf8`);for(let t of u(e,p))g.add(t)}catch{}};return{name:`tempest-icons`,enforce:`pre`,configResolved(e){_=e.root??_},async buildStart(){await v()},resolveId(e){return e===`tempest-react-sdk/icons/virtual`||e===`virtual:tempest-icons`?o:null},load(t){return t===o?d([...g],e.iconAliases):null},async handleHotUpdate(e){if(!c.test(e.file))return;let t=g.size;for(let t of u(await e.read(),p))g.add(t);if(g.size===t)return;let n=e.server.moduleGraph.getModuleById(o);if(n)return[n]}}}exports.TEMPEST_ICONS_ID=i,exports.TEMPEST_ICONS_VIRTUAL_ID=a,exports.buildIconsModule=d,exports.scanIconSlugs=u,exports.tempestIcons=g;
9
9
  //# sourceMappingURL=tempest-icons.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tempest-icons.cjs","names":[],"sources":["../../src/vite/tempest-icons.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { iconAliases } from \"@/icons/generated/aliases\";\nimport { iconNames } from \"@/icons/generated/icon-names\";\n\nimport type { TempestVitePlugin } from \"./tempest-pwa-manifest\";\n\n/** The module id an app imports to get its static registry. */\nexport const TEMPEST_ICONS_ID = \"virtual:tempest-icons\";\n\nconst RESOLVED_ID = `\\0${TEMPEST_ICONS_ID}`;\n\n/**\n * Slugs written as a literal `name` prop or a literal `name:` field.\n *\n * Matching the *attribute* rather than any kebab-case string is what keeps the\n * scan from sweeping in unrelated text — a CSS class, a translation key and a\n * route segment all look like slugs otherwise. Everything matched is still\n * validated against lucide's real slug list before it reaches the module.\n */\nconst NAME_PATTERNS = [\n /\\bname\\s*=\\s*[\"']([a-z0-9-]+)[\"']/g,\n /\\bname\\s*=\\s*\\{\\s*[\"']([a-z0-9-]+)[\"']\\s*\\}/g,\n /\\bname\\s*:\\s*[\"']([a-z0-9-]+)[\"']/g,\n];\n\nconst SOURCE_FILE = /\\.[cm]?[jt]sx?$/;\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \"build\", \"coverage\"]);\n\nexport interface TempestIconsOptions {\n /**\n * Directory to scan, relative to the Vite root. Default: `\"src\"`.\n */\n dir?: string;\n /**\n * Extra slugs to include even when the scan cannot see them — a name built by\n * concatenation, or one that only ever arrives from the API but is worth\n * paying for statically because it is on the first screen.\n */\n include?: readonly string[];\n /** Directory names to skip. Default: `node_modules`, `dist`, `build`, `coverage`. */\n skipDirs?: readonly string[];\n}\n\n/**\n * Collect the icon slugs a source file references literally.\n *\n * @param code - File contents.\n * @param known - The set of real lucide slugs, aliases included.\n * @returns The slugs found, validated against `known`.\n */\nexport function scanIconSlugs(code: string, known: ReadonlySet<string>): string[] {\n const found = new Set<string>();\n for (const pattern of NAME_PATTERNS) {\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(code)) !== null) {\n if (known.has(match[1])) found.add(match[1]);\n }\n }\n return [...found];\n}\n\n/**\n * Build the virtual module source for a set of slugs.\n *\n * Aliases resolve to their canonical slug before importing, because only the\n * canonical name is a real lucide export — but the alias key still points at the\n * component, so `<Icon name=\"alert-circle\" />` stays a zero-request lookup.\n *\n * @param slugs - Validated slugs to include.\n * @param aliases - Alias slug → canonical slug.\n * @returns ES module source.\n */\nexport function buildIconsModule(\n slugs: readonly string[],\n aliases: Record<string, string>,\n): string {\n const sorted = [...new Set(slugs)].sort();\n if (!sorted.length) return \"export const staticIcons = {};\\n\";\n\n const componentOf = new Map<string, string>();\n for (const slug of sorted) componentOf.set(slug, pascalCase(aliases[slug] ?? slug));\n\n const named = [...new Set(componentOf.values())]\n .sort()\n .map((name) => (localName(name) === name ? name : `${name} as ${localName(name)}`))\n .join(\", \");\n const entries = sorted\n .map((slug) => ` \"${slug}\": ${localName(componentOf.get(slug) as string)},`)\n .join(\"\\n\");\n return `import { ${named} } from \"lucide-react\";\n\nexport const staticIcons = {\n${entries}\n};\n`;\n}\n\n/** `circle-alert` → `CircleAlert`; `a-arrow-down` → `AArrowDown`. */\nfunction pascalCase(slug: string): string {\n return slug\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Export names that would shadow a restricted global if bound directly.\n *\n * Lucide ships an icon literally called `infinity`, whose export is `Infinity`.\n * Binding that at module scope shadows the global, so the import is aliased.\n */\nconst RESERVED_NAMES = new Set([\"Infinity\", \"NaN\", \"undefined\", \"eval\", \"arguments\"]);\n\n/** The local binding to use for a lucide export name. */\nfunction localName(name: string): string {\n return RESERVED_NAMES.has(name) ? `${name}Icon` : name;\n}\n\n/**\n * Walk a directory and collect every source file path.\n *\n * @param dir - Absolute directory to walk.\n * @param skip - Directory names to skip.\n * @returns Absolute file paths.\n */\nasync function collectSourceFiles(dir: string, skip: ReadonlySet<string>): Promise<string[]> {\n const out: string[] = [];\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (skip.has(entry.name) || entry.name.startsWith(\".\")) continue;\n out.push(...(await collectSourceFiles(join(dir, entry.name), skip)));\n } else if (entry.isFile() && SOURCE_FILE.test(entry.name)) {\n out.push(join(dir, entry.name));\n }\n }\n return out;\n}\n\n/**\n * Generate a static icon registry from the slugs your source mentions.\n *\n * Removes the reason to reach for `lucide-react`'s `DynamicIcon`: the slugs an app\n * writes as literals become ordinary static imports, so the bundler keeps exactly\n * those icons and the browser makes **no** extra request for them. A slug that only\n * exists at runtime still works — `<Icon>` falls back to fetching one shard per\n * initial letter.\n *\n * The scan reads the source tree directly at `buildStart` rather than harvesting\n * modules as they pass through `transform`: relying on transform order would let\n * the virtual module load before every consumer had been seen, and the registry\n * would come out short on a cold dev start — silently, since the missing slugs\n * would still render via the lazy path.\n *\n * @example\n * // vite.config.ts\n * import { createViteConfig, tempestIcons } from \"tempest-react-sdk/vite\";\n *\n * export default createViteConfig({ plugins: [tempestIcons()] });\n *\n * @example\n * // src/main.tsx\n * import { IconProvider } from \"tempest-react-sdk/icons\";\n * import { staticIcons } from \"virtual:tempest-icons\";\n *\n * <IconProvider registry={staticIcons}>\n * <App />\n * </IconProvider>\n */\nexport function tempestIcons(options: TempestIconsOptions = {}): TempestVitePlugin {\n const { dir = \"src\", include = [], skipDirs } = options;\n const known = new Set<string>(iconNames);\n const skip = new Set<string>(skipDirs ?? SKIP_DIRS);\n const slugs = new Set<string>(include.filter((slug) => known.has(slug)));\n let root = process.cwd();\n\n /**\n * Rescan the source tree, keeping the explicitly included slugs.\n *\n * @tempest-limits empty-catch — the scan races the editor and the file system:\n * a file listed a moment ago can be renamed, deleted, or held by another process\n * by the time it is read. An unreadable file contributes no slugs and the build\n * continues; failing the whole scan would break `vite dev` over a temp file that\n * no longer exists.\n */\n const rescan = async (): Promise<void> => {\n const files = await collectSourceFiles(resolve(root, dir), skip);\n for (const file of files) {\n try {\n const code = await readFile(file, \"utf8\");\n for (const slug of scanIconSlugs(code, known)) slugs.add(slug);\n } catch {\n /* empty */\n }\n }\n };\n\n return {\n name: \"tempest-icons\",\n enforce: \"pre\",\n\n configResolved(config: { root?: string }) {\n root = config.root ?? root;\n },\n\n async buildStart() {\n await rescan();\n },\n\n resolveId(id: string) {\n return id === TEMPEST_ICONS_ID ? RESOLVED_ID : null;\n },\n\n load(id: string) {\n return id === RESOLVED_ID ? buildIconsModule([...slugs], iconAliases) : null;\n },\n\n /**\n * Pick up a slug added while the dev server is running.\n *\n * A newly written `<Icon name=\"save\" />` would otherwise only render via\n * the lazy path until the next restart. Rescanning the changed file and\n * invalidating the virtual module keeps dev and build agreeing on what the\n * static registry contains.\n */\n async handleHotUpdate(ctx: {\n file: string;\n read: () => Promise<string>;\n server: { moduleGraph: { getModuleById: (id: string) => unknown } };\n }) {\n if (!SOURCE_FILE.test(ctx.file)) return;\n const before = slugs.size;\n for (const slug of scanIconSlugs(await ctx.read(), known)) slugs.add(slug);\n if (slugs.size === before) return;\n const mod = ctx.server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) return [mod];\n },\n } as TempestVitePlugin;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tempest-icons.cjs","names":[],"sources":["../../src/vite/tempest-icons.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { iconAliases } from \"@/icons/generated/aliases\";\nimport { iconNames } from \"@/icons/generated/icon-names\";\n\nimport type { TempestVitePlugin } from \"./tempest-pwa-manifest\";\n\n/** The module id an app imports to get its static registry. */\nexport const TEMPEST_ICONS_ID = \"tempest-react-sdk/icons/virtual\";\n\n/**\n * The original virtual id, still honoured.\n *\n * Published as the documented import before the subpath existed, so apps have it\n * written in their entrypoints. It resolves to the same generated module — but it\n * only ever resolves *with the plugin*, which is the reason the subpath above\n * replaced it: that one also resolves without it, to an empty stub.\n */\nexport const TEMPEST_ICONS_VIRTUAL_ID = \"virtual:tempest-icons\";\n\nconst RESOLVED_ID = `\\0${TEMPEST_ICONS_VIRTUAL_ID}`;\n\n/**\n * Slugs written as a literal `name` prop or a literal `name:` field.\n *\n * Matching the *attribute* rather than any kebab-case string is what keeps the\n * scan from sweeping in unrelated text — a CSS class, a translation key and a\n * route segment all look like slugs otherwise. Everything matched is still\n * validated against lucide's real slug list before it reaches the module.\n */\nconst NAME_PATTERNS = [\n /\\bname\\s*=\\s*[\"']([a-z0-9-]+)[\"']/g,\n /\\bname\\s*=\\s*\\{\\s*[\"']([a-z0-9-]+)[\"']\\s*\\}/g,\n /\\bname\\s*:\\s*[\"']([a-z0-9-]+)[\"']/g,\n];\n\nconst SOURCE_FILE = /\\.[cm]?[jt]sx?$/;\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \"build\", \"coverage\"]);\n\nexport interface TempestIconsOptions {\n /**\n * Directory to scan, relative to the Vite root. Default: `\"src\"`.\n */\n dir?: string;\n /**\n * Extra slugs to include even when the scan cannot see them — a name built by\n * concatenation, or one that only ever arrives from the API but is worth\n * paying for statically because it is on the first screen.\n */\n include?: readonly string[];\n /** Directory names to skip. Default: `node_modules`, `dist`, `build`, `coverage`. */\n skipDirs?: readonly string[];\n}\n\n/**\n * Collect the icon slugs a source file references literally.\n *\n * @param code - File contents.\n * @param known - The set of real lucide slugs, aliases included.\n * @returns The slugs found, validated against `known`.\n */\nexport function scanIconSlugs(code: string, known: ReadonlySet<string>): string[] {\n const found = new Set<string>();\n for (const pattern of NAME_PATTERNS) {\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(code)) !== null) {\n if (known.has(match[1])) found.add(match[1]);\n }\n }\n return [...found];\n}\n\n/**\n * Build the virtual module source for a set of slugs.\n *\n * Aliases resolve to their canonical slug before importing, because only the\n * canonical name is a real lucide export — but the alias key still points at the\n * component, so `<Icon name=\"alert-circle\" />` stays a zero-request lookup.\n *\n * @param slugs - Validated slugs to include.\n * @param aliases - Alias slug → canonical slug.\n * @returns ES module source.\n */\nexport function buildIconsModule(\n slugs: readonly string[],\n aliases: Record<string, string>,\n): string {\n const sorted = [...new Set(slugs)].sort();\n if (!sorted.length) return \"export const staticIcons = {};\\n\";\n\n const componentOf = new Map<string, string>();\n for (const slug of sorted) componentOf.set(slug, pascalCase(aliases[slug] ?? slug));\n\n const named = [...new Set(componentOf.values())]\n .sort()\n .map((name) => (localName(name) === name ? name : `${name} as ${localName(name)}`))\n .join(\", \");\n const entries = sorted\n .map((slug) => ` \"${slug}\": ${localName(componentOf.get(slug) as string)},`)\n .join(\"\\n\");\n return `import { ${named} } from \"lucide-react\";\n\nexport const staticIcons = {\n${entries}\n};\n`;\n}\n\n/** `circle-alert` → `CircleAlert`; `a-arrow-down` → `AArrowDown`. */\nfunction pascalCase(slug: string): string {\n return slug\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Export names that would shadow a restricted global if bound directly.\n *\n * Lucide ships an icon literally called `infinity`, whose export is `Infinity`.\n * Binding that at module scope shadows the global, so the import is aliased.\n */\nconst RESERVED_NAMES = new Set([\"Infinity\", \"NaN\", \"undefined\", \"eval\", \"arguments\"]);\n\n/** The local binding to use for a lucide export name. */\nfunction localName(name: string): string {\n return RESERVED_NAMES.has(name) ? `${name}Icon` : name;\n}\n\n/**\n * Walk a directory and collect every source file path.\n *\n * @param dir - Absolute directory to walk.\n * @param skip - Directory names to skip.\n * @returns Absolute file paths.\n */\nasync function collectSourceFiles(dir: string, skip: ReadonlySet<string>): Promise<string[]> {\n const out: string[] = [];\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (skip.has(entry.name) || entry.name.startsWith(\".\")) continue;\n out.push(...(await collectSourceFiles(join(dir, entry.name), skip)));\n } else if (entry.isFile() && SOURCE_FILE.test(entry.name)) {\n out.push(join(dir, entry.name));\n }\n }\n return out;\n}\n\n/**\n * Generate a static icon registry from the slugs your source mentions.\n *\n * Removes the reason to reach for `lucide-react`'s `DynamicIcon`: the slugs an app\n * writes as literals become ordinary static imports, so the bundler keeps exactly\n * those icons and the browser makes **no** extra request for them. A slug that only\n * exists at runtime still works — `<Icon>` falls back to fetching one shard per\n * initial letter.\n *\n * The scan reads the source tree directly at `buildStart` rather than harvesting\n * modules as they pass through `transform`: relying on transform order would let\n * the virtual module load before every consumer had been seen, and the registry\n * would come out short on a cold dev start — silently, since the missing slugs\n * would still render via the lazy path.\n *\n * @example\n * // vite.config.ts\n * import { createViteConfig, tempestIcons } from \"tempest-react-sdk/vite\";\n *\n * export default createViteConfig({ plugins: [tempestIcons()] });\n *\n * @example\n * // src/main.tsx\n * import { IconProvider } from \"tempest-react-sdk/icons\";\n * import { staticIcons } from \"tempest-react-sdk/icons/virtual\";\n *\n * <IconProvider registry={staticIcons}>\n * <App />\n * </IconProvider>\n */\nexport function tempestIcons(options: TempestIconsOptions = {}): TempestVitePlugin {\n const { dir = \"src\", include = [], skipDirs } = options;\n const known = new Set<string>(iconNames);\n const skip = new Set<string>(skipDirs ?? SKIP_DIRS);\n const slugs = new Set<string>(include.filter((slug) => known.has(slug)));\n let root = process.cwd();\n\n /**\n * Rescan the source tree, keeping the explicitly included slugs.\n *\n * @tempest-limits empty-catch — the scan races the editor and the file system:\n * a file listed a moment ago can be renamed, deleted, or held by another process\n * by the time it is read. An unreadable file contributes no slugs and the build\n * continues; failing the whole scan would break `vite dev` over a temp file that\n * no longer exists.\n */\n const rescan = async (): Promise<void> => {\n const files = await collectSourceFiles(resolve(root, dir), skip);\n for (const file of files) {\n try {\n const code = await readFile(file, \"utf8\");\n for (const slug of scanIconSlugs(code, known)) slugs.add(slug);\n } catch {\n /* empty */\n }\n }\n };\n\n return {\n name: \"tempest-icons\",\n enforce: \"pre\",\n\n configResolved(config: { root?: string }) {\n root = config.root ?? root;\n },\n\n async buildStart() {\n await rescan();\n },\n\n /**\n * Claim both spellings of the registry module.\n *\n * The subpath is a real file in the installed package, so returning the\n * virtual id here is what overrides the empty stub with the generated\n * table. Letting Vite resolve it normally would silently ship the stub.\n */\n resolveId(id: string) {\n return id === TEMPEST_ICONS_ID || id === TEMPEST_ICONS_VIRTUAL_ID ? RESOLVED_ID : null;\n },\n\n load(id: string) {\n return id === RESOLVED_ID ? buildIconsModule([...slugs], iconAliases) : null;\n },\n\n /**\n * Pick up a slug added while the dev server is running.\n *\n * A newly written `<Icon name=\"save\" />` would otherwise only render via\n * the lazy path until the next restart. Rescanning the changed file and\n * invalidating the virtual module keeps dev and build agreeing on what the\n * static registry contains.\n */\n async handleHotUpdate(ctx: {\n file: string;\n read: () => Promise<string>;\n server: { moduleGraph: { getModuleById: (id: string) => unknown } };\n }) {\n if (!SOURCE_FILE.test(ctx.file)) return;\n const before = slugs.size;\n for (const slug of scanIconSlugs(await ctx.read(), known)) slugs.add(slug);\n if (slugs.size === before) return;\n const mod = ctx.server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) return [mod];\n },\n } as TempestVitePlugin;\n}\n"],"mappings":"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"}
@@ -3,51 +3,51 @@ import { iconNames as t } from "../icons/generated/icon-names.js";
3
3
  import { join as n, resolve as r } from "node:path";
4
4
  import { readFile as i, readdir as a } from "node:fs/promises";
5
5
  //#region src/vite/tempest-icons.ts
6
- var o = "virtual:tempest-icons", s = `\0${o}`, c = [
6
+ var o = "tempest-react-sdk/icons/virtual", s = "virtual:tempest-icons", c = `\0${s}`, l = [
7
7
  /\bname\s*=\s*["']([a-z0-9-]+)["']/g,
8
8
  /\bname\s*=\s*\{\s*["']([a-z0-9-]+)["']\s*\}/g,
9
9
  /\bname\s*:\s*["']([a-z0-9-]+)["']/g
10
- ], l = /\.[cm]?[jt]sx?$/, u = /* @__PURE__ */ new Set([
10
+ ], u = /\.[cm]?[jt]sx?$/, d = /* @__PURE__ */ new Set([
11
11
  "node_modules",
12
12
  "dist",
13
13
  "build",
14
14
  "coverage"
15
15
  ]);
16
- function d(e, t) {
16
+ function f(e, t) {
17
17
  let n = /* @__PURE__ */ new Set();
18
- for (let r of c) {
18
+ for (let r of l) {
19
19
  r.lastIndex = 0;
20
20
  let i;
21
21
  for (; (i = r.exec(e)) !== null;) t.has(i[1]) && n.add(i[1]);
22
22
  }
23
23
  return [...n];
24
24
  }
25
- function f(e, t) {
25
+ function p(e, t) {
26
26
  let n = [...new Set(e)].sort();
27
27
  if (!n.length) return "export const staticIcons = {};\n";
28
28
  let r = /* @__PURE__ */ new Map();
29
- for (let e of n) r.set(e, p(t[e] ?? e));
30
- return `import { ${[...new Set(r.values())].sort().map((e) => h(e) === e ? e : `${e} as ${h(e)}`).join(", ")} } from "lucide-react";
29
+ for (let e of n) r.set(e, m(t[e] ?? e));
30
+ return `import { ${[...new Set(r.values())].sort().map((e) => g(e) === e ? e : `${e} as ${g(e)}`).join(", ")} } from "lucide-react";
31
31
 
32
32
  export const staticIcons = {
33
- ${n.map((e) => ` "${e}": ${h(r.get(e))},`).join("\n")}
33
+ ${n.map((e) => ` "${e}": ${g(r.get(e))},`).join("\n")}
34
34
  };
35
35
  `;
36
36
  }
37
- function p(e) {
37
+ function m(e) {
38
38
  return e.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("");
39
39
  }
40
- var m = /* @__PURE__ */ new Set([
40
+ var h = /* @__PURE__ */ new Set([
41
41
  "Infinity",
42
42
  "NaN",
43
43
  "undefined",
44
44
  "eval",
45
45
  "arguments"
46
46
  ]);
47
- function h(e) {
48
- return m.has(e) ? `${e}Icon` : e;
47
+ function g(e) {
48
+ return h.has(e) ? `${e}Icon` : e;
49
49
  }
50
- async function g(e, t) {
50
+ async function _(e, t) {
51
51
  let r = [], i;
52
52
  try {
53
53
  i = await a(e, { withFileTypes: !0 });
@@ -56,44 +56,44 @@ async function g(e, t) {
56
56
  }
57
57
  for (let a of i) if (a.isDirectory()) {
58
58
  if (t.has(a.name) || a.name.startsWith(".")) continue;
59
- r.push(...await g(n(e, a.name), t));
60
- } else a.isFile() && l.test(a.name) && r.push(n(e, a.name));
59
+ r.push(...await _(n(e, a.name), t));
60
+ } else a.isFile() && u.test(a.name) && r.push(n(e, a.name));
61
61
  return r;
62
62
  }
63
- function _(n = {}) {
64
- let { dir: a = "src", include: o = [], skipDirs: c } = n, p = new Set(t), m = new Set(c ?? u), h = new Set(o.filter((e) => p.has(e))), _ = process.cwd(), v = async () => {
65
- let e = await g(r(_, a), m);
63
+ function v(n = {}) {
64
+ let { dir: a = "src", include: o = [], skipDirs: s } = n, l = new Set(t), m = new Set(s ?? d), h = new Set(o.filter((e) => l.has(e))), g = process.cwd(), v = async () => {
65
+ let e = await _(r(g, a), m);
66
66
  for (let t of e) try {
67
67
  let e = await i(t, "utf8");
68
- for (let t of d(e, p)) h.add(t);
68
+ for (let t of f(e, l)) h.add(t);
69
69
  } catch {}
70
70
  };
71
71
  return {
72
72
  name: "tempest-icons",
73
73
  enforce: "pre",
74
74
  configResolved(e) {
75
- _ = e.root ?? _;
75
+ g = e.root ?? g;
76
76
  },
77
77
  async buildStart() {
78
78
  await v();
79
79
  },
80
80
  resolveId(e) {
81
- return e === "virtual:tempest-icons" ? s : null;
81
+ return e === "tempest-react-sdk/icons/virtual" || e === "virtual:tempest-icons" ? c : null;
82
82
  },
83
83
  load(t) {
84
- return t === s ? f([...h], e) : null;
84
+ return t === c ? p([...h], e) : null;
85
85
  },
86
86
  async handleHotUpdate(e) {
87
- if (!l.test(e.file)) return;
87
+ if (!u.test(e.file)) return;
88
88
  let t = h.size;
89
- for (let t of d(await e.read(), p)) h.add(t);
89
+ for (let t of f(await e.read(), l)) h.add(t);
90
90
  if (h.size === t) return;
91
- let n = e.server.moduleGraph.getModuleById(s);
91
+ let n = e.server.moduleGraph.getModuleById(c);
92
92
  if (n) return [n];
93
93
  }
94
94
  };
95
95
  }
96
96
  //#endregion
97
- export { o as TEMPEST_ICONS_ID, f as buildIconsModule, d as scanIconSlugs, _ as tempestIcons };
97
+ export { o as TEMPEST_ICONS_ID, s as TEMPEST_ICONS_VIRTUAL_ID, p as buildIconsModule, f as scanIconSlugs, v as tempestIcons };
98
98
 
99
99
  //# sourceMappingURL=tempest-icons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tempest-icons.js","names":[],"sources":["../../src/vite/tempest-icons.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { iconAliases } from \"@/icons/generated/aliases\";\nimport { iconNames } from \"@/icons/generated/icon-names\";\n\nimport type { TempestVitePlugin } from \"./tempest-pwa-manifest\";\n\n/** The module id an app imports to get its static registry. */\nexport const TEMPEST_ICONS_ID = \"virtual:tempest-icons\";\n\nconst RESOLVED_ID = `\\0${TEMPEST_ICONS_ID}`;\n\n/**\n * Slugs written as a literal `name` prop or a literal `name:` field.\n *\n * Matching the *attribute* rather than any kebab-case string is what keeps the\n * scan from sweeping in unrelated text — a CSS class, a translation key and a\n * route segment all look like slugs otherwise. Everything matched is still\n * validated against lucide's real slug list before it reaches the module.\n */\nconst NAME_PATTERNS = [\n /\\bname\\s*=\\s*[\"']([a-z0-9-]+)[\"']/g,\n /\\bname\\s*=\\s*\\{\\s*[\"']([a-z0-9-]+)[\"']\\s*\\}/g,\n /\\bname\\s*:\\s*[\"']([a-z0-9-]+)[\"']/g,\n];\n\nconst SOURCE_FILE = /\\.[cm]?[jt]sx?$/;\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \"build\", \"coverage\"]);\n\nexport interface TempestIconsOptions {\n /**\n * Directory to scan, relative to the Vite root. Default: `\"src\"`.\n */\n dir?: string;\n /**\n * Extra slugs to include even when the scan cannot see them — a name built by\n * concatenation, or one that only ever arrives from the API but is worth\n * paying for statically because it is on the first screen.\n */\n include?: readonly string[];\n /** Directory names to skip. Default: `node_modules`, `dist`, `build`, `coverage`. */\n skipDirs?: readonly string[];\n}\n\n/**\n * Collect the icon slugs a source file references literally.\n *\n * @param code - File contents.\n * @param known - The set of real lucide slugs, aliases included.\n * @returns The slugs found, validated against `known`.\n */\nexport function scanIconSlugs(code: string, known: ReadonlySet<string>): string[] {\n const found = new Set<string>();\n for (const pattern of NAME_PATTERNS) {\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(code)) !== null) {\n if (known.has(match[1])) found.add(match[1]);\n }\n }\n return [...found];\n}\n\n/**\n * Build the virtual module source for a set of slugs.\n *\n * Aliases resolve to their canonical slug before importing, because only the\n * canonical name is a real lucide export — but the alias key still points at the\n * component, so `<Icon name=\"alert-circle\" />` stays a zero-request lookup.\n *\n * @param slugs - Validated slugs to include.\n * @param aliases - Alias slug → canonical slug.\n * @returns ES module source.\n */\nexport function buildIconsModule(\n slugs: readonly string[],\n aliases: Record<string, string>,\n): string {\n const sorted = [...new Set(slugs)].sort();\n if (!sorted.length) return \"export const staticIcons = {};\\n\";\n\n const componentOf = new Map<string, string>();\n for (const slug of sorted) componentOf.set(slug, pascalCase(aliases[slug] ?? slug));\n\n const named = [...new Set(componentOf.values())]\n .sort()\n .map((name) => (localName(name) === name ? name : `${name} as ${localName(name)}`))\n .join(\", \");\n const entries = sorted\n .map((slug) => ` \"${slug}\": ${localName(componentOf.get(slug) as string)},`)\n .join(\"\\n\");\n return `import { ${named} } from \"lucide-react\";\n\nexport const staticIcons = {\n${entries}\n};\n`;\n}\n\n/** `circle-alert` → `CircleAlert`; `a-arrow-down` → `AArrowDown`. */\nfunction pascalCase(slug: string): string {\n return slug\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Export names that would shadow a restricted global if bound directly.\n *\n * Lucide ships an icon literally called `infinity`, whose export is `Infinity`.\n * Binding that at module scope shadows the global, so the import is aliased.\n */\nconst RESERVED_NAMES = new Set([\"Infinity\", \"NaN\", \"undefined\", \"eval\", \"arguments\"]);\n\n/** The local binding to use for a lucide export name. */\nfunction localName(name: string): string {\n return RESERVED_NAMES.has(name) ? `${name}Icon` : name;\n}\n\n/**\n * Walk a directory and collect every source file path.\n *\n * @param dir - Absolute directory to walk.\n * @param skip - Directory names to skip.\n * @returns Absolute file paths.\n */\nasync function collectSourceFiles(dir: string, skip: ReadonlySet<string>): Promise<string[]> {\n const out: string[] = [];\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (skip.has(entry.name) || entry.name.startsWith(\".\")) continue;\n out.push(...(await collectSourceFiles(join(dir, entry.name), skip)));\n } else if (entry.isFile() && SOURCE_FILE.test(entry.name)) {\n out.push(join(dir, entry.name));\n }\n }\n return out;\n}\n\n/**\n * Generate a static icon registry from the slugs your source mentions.\n *\n * Removes the reason to reach for `lucide-react`'s `DynamicIcon`: the slugs an app\n * writes as literals become ordinary static imports, so the bundler keeps exactly\n * those icons and the browser makes **no** extra request for them. A slug that only\n * exists at runtime still works — `<Icon>` falls back to fetching one shard per\n * initial letter.\n *\n * The scan reads the source tree directly at `buildStart` rather than harvesting\n * modules as they pass through `transform`: relying on transform order would let\n * the virtual module load before every consumer had been seen, and the registry\n * would come out short on a cold dev start — silently, since the missing slugs\n * would still render via the lazy path.\n *\n * @example\n * // vite.config.ts\n * import { createViteConfig, tempestIcons } from \"tempest-react-sdk/vite\";\n *\n * export default createViteConfig({ plugins: [tempestIcons()] });\n *\n * @example\n * // src/main.tsx\n * import { IconProvider } from \"tempest-react-sdk/icons\";\n * import { staticIcons } from \"virtual:tempest-icons\";\n *\n * <IconProvider registry={staticIcons}>\n * <App />\n * </IconProvider>\n */\nexport function tempestIcons(options: TempestIconsOptions = {}): TempestVitePlugin {\n const { dir = \"src\", include = [], skipDirs } = options;\n const known = new Set<string>(iconNames);\n const skip = new Set<string>(skipDirs ?? SKIP_DIRS);\n const slugs = new Set<string>(include.filter((slug) => known.has(slug)));\n let root = process.cwd();\n\n /**\n * Rescan the source tree, keeping the explicitly included slugs.\n *\n * @tempest-limits empty-catch — the scan races the editor and the file system:\n * a file listed a moment ago can be renamed, deleted, or held by another process\n * by the time it is read. An unreadable file contributes no slugs and the build\n * continues; failing the whole scan would break `vite dev` over a temp file that\n * no longer exists.\n */\n const rescan = async (): Promise<void> => {\n const files = await collectSourceFiles(resolve(root, dir), skip);\n for (const file of files) {\n try {\n const code = await readFile(file, \"utf8\");\n for (const slug of scanIconSlugs(code, known)) slugs.add(slug);\n } catch {\n /* empty */\n }\n }\n };\n\n return {\n name: \"tempest-icons\",\n enforce: \"pre\",\n\n configResolved(config: { root?: string }) {\n root = config.root ?? root;\n },\n\n async buildStart() {\n await rescan();\n },\n\n resolveId(id: string) {\n return id === TEMPEST_ICONS_ID ? RESOLVED_ID : null;\n },\n\n load(id: string) {\n return id === RESOLVED_ID ? buildIconsModule([...slugs], iconAliases) : null;\n },\n\n /**\n * Pick up a slug added while the dev server is running.\n *\n * A newly written `<Icon name=\"save\" />` would otherwise only render via\n * the lazy path until the next restart. Rescanning the changed file and\n * invalidating the virtual module keeps dev and build agreeing on what the\n * static registry contains.\n */\n async handleHotUpdate(ctx: {\n file: string;\n read: () => Promise<string>;\n server: { moduleGraph: { getModuleById: (id: string) => unknown } };\n }) {\n if (!SOURCE_FILE.test(ctx.file)) return;\n const before = slugs.size;\n for (const slug of scanIconSlugs(await ctx.read(), known)) slugs.add(slug);\n if (slugs.size === before) return;\n const mod = ctx.server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) return [mod];\n },\n } as TempestVitePlugin;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tempest-icons.js","names":[],"sources":["../../src/vite/tempest-icons.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { iconAliases } from \"@/icons/generated/aliases\";\nimport { iconNames } from \"@/icons/generated/icon-names\";\n\nimport type { TempestVitePlugin } from \"./tempest-pwa-manifest\";\n\n/** The module id an app imports to get its static registry. */\nexport const TEMPEST_ICONS_ID = \"tempest-react-sdk/icons/virtual\";\n\n/**\n * The original virtual id, still honoured.\n *\n * Published as the documented import before the subpath existed, so apps have it\n * written in their entrypoints. It resolves to the same generated module — but it\n * only ever resolves *with the plugin*, which is the reason the subpath above\n * replaced it: that one also resolves without it, to an empty stub.\n */\nexport const TEMPEST_ICONS_VIRTUAL_ID = \"virtual:tempest-icons\";\n\nconst RESOLVED_ID = `\\0${TEMPEST_ICONS_VIRTUAL_ID}`;\n\n/**\n * Slugs written as a literal `name` prop or a literal `name:` field.\n *\n * Matching the *attribute* rather than any kebab-case string is what keeps the\n * scan from sweeping in unrelated text — a CSS class, a translation key and a\n * route segment all look like slugs otherwise. Everything matched is still\n * validated against lucide's real slug list before it reaches the module.\n */\nconst NAME_PATTERNS = [\n /\\bname\\s*=\\s*[\"']([a-z0-9-]+)[\"']/g,\n /\\bname\\s*=\\s*\\{\\s*[\"']([a-z0-9-]+)[\"']\\s*\\}/g,\n /\\bname\\s*:\\s*[\"']([a-z0-9-]+)[\"']/g,\n];\n\nconst SOURCE_FILE = /\\.[cm]?[jt]sx?$/;\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \"build\", \"coverage\"]);\n\nexport interface TempestIconsOptions {\n /**\n * Directory to scan, relative to the Vite root. Default: `\"src\"`.\n */\n dir?: string;\n /**\n * Extra slugs to include even when the scan cannot see them — a name built by\n * concatenation, or one that only ever arrives from the API but is worth\n * paying for statically because it is on the first screen.\n */\n include?: readonly string[];\n /** Directory names to skip. Default: `node_modules`, `dist`, `build`, `coverage`. */\n skipDirs?: readonly string[];\n}\n\n/**\n * Collect the icon slugs a source file references literally.\n *\n * @param code - File contents.\n * @param known - The set of real lucide slugs, aliases included.\n * @returns The slugs found, validated against `known`.\n */\nexport function scanIconSlugs(code: string, known: ReadonlySet<string>): string[] {\n const found = new Set<string>();\n for (const pattern of NAME_PATTERNS) {\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(code)) !== null) {\n if (known.has(match[1])) found.add(match[1]);\n }\n }\n return [...found];\n}\n\n/**\n * Build the virtual module source for a set of slugs.\n *\n * Aliases resolve to their canonical slug before importing, because only the\n * canonical name is a real lucide export — but the alias key still points at the\n * component, so `<Icon name=\"alert-circle\" />` stays a zero-request lookup.\n *\n * @param slugs - Validated slugs to include.\n * @param aliases - Alias slug → canonical slug.\n * @returns ES module source.\n */\nexport function buildIconsModule(\n slugs: readonly string[],\n aliases: Record<string, string>,\n): string {\n const sorted = [...new Set(slugs)].sort();\n if (!sorted.length) return \"export const staticIcons = {};\\n\";\n\n const componentOf = new Map<string, string>();\n for (const slug of sorted) componentOf.set(slug, pascalCase(aliases[slug] ?? slug));\n\n const named = [...new Set(componentOf.values())]\n .sort()\n .map((name) => (localName(name) === name ? name : `${name} as ${localName(name)}`))\n .join(\", \");\n const entries = sorted\n .map((slug) => ` \"${slug}\": ${localName(componentOf.get(slug) as string)},`)\n .join(\"\\n\");\n return `import { ${named} } from \"lucide-react\";\n\nexport const staticIcons = {\n${entries}\n};\n`;\n}\n\n/** `circle-alert` → `CircleAlert`; `a-arrow-down` → `AArrowDown`. */\nfunction pascalCase(slug: string): string {\n return slug\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\n/**\n * Export names that would shadow a restricted global if bound directly.\n *\n * Lucide ships an icon literally called `infinity`, whose export is `Infinity`.\n * Binding that at module scope shadows the global, so the import is aliased.\n */\nconst RESERVED_NAMES = new Set([\"Infinity\", \"NaN\", \"undefined\", \"eval\", \"arguments\"]);\n\n/** The local binding to use for a lucide export name. */\nfunction localName(name: string): string {\n return RESERVED_NAMES.has(name) ? `${name}Icon` : name;\n}\n\n/**\n * Walk a directory and collect every source file path.\n *\n * @param dir - Absolute directory to walk.\n * @param skip - Directory names to skip.\n * @returns Absolute file paths.\n */\nasync function collectSourceFiles(dir: string, skip: ReadonlySet<string>): Promise<string[]> {\n const out: string[] = [];\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return out;\n }\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (skip.has(entry.name) || entry.name.startsWith(\".\")) continue;\n out.push(...(await collectSourceFiles(join(dir, entry.name), skip)));\n } else if (entry.isFile() && SOURCE_FILE.test(entry.name)) {\n out.push(join(dir, entry.name));\n }\n }\n return out;\n}\n\n/**\n * Generate a static icon registry from the slugs your source mentions.\n *\n * Removes the reason to reach for `lucide-react`'s `DynamicIcon`: the slugs an app\n * writes as literals become ordinary static imports, so the bundler keeps exactly\n * those icons and the browser makes **no** extra request for them. A slug that only\n * exists at runtime still works — `<Icon>` falls back to fetching one shard per\n * initial letter.\n *\n * The scan reads the source tree directly at `buildStart` rather than harvesting\n * modules as they pass through `transform`: relying on transform order would let\n * the virtual module load before every consumer had been seen, and the registry\n * would come out short on a cold dev start — silently, since the missing slugs\n * would still render via the lazy path.\n *\n * @example\n * // vite.config.ts\n * import { createViteConfig, tempestIcons } from \"tempest-react-sdk/vite\";\n *\n * export default createViteConfig({ plugins: [tempestIcons()] });\n *\n * @example\n * // src/main.tsx\n * import { IconProvider } from \"tempest-react-sdk/icons\";\n * import { staticIcons } from \"tempest-react-sdk/icons/virtual\";\n *\n * <IconProvider registry={staticIcons}>\n * <App />\n * </IconProvider>\n */\nexport function tempestIcons(options: TempestIconsOptions = {}): TempestVitePlugin {\n const { dir = \"src\", include = [], skipDirs } = options;\n const known = new Set<string>(iconNames);\n const skip = new Set<string>(skipDirs ?? SKIP_DIRS);\n const slugs = new Set<string>(include.filter((slug) => known.has(slug)));\n let root = process.cwd();\n\n /**\n * Rescan the source tree, keeping the explicitly included slugs.\n *\n * @tempest-limits empty-catch — the scan races the editor and the file system:\n * a file listed a moment ago can be renamed, deleted, or held by another process\n * by the time it is read. An unreadable file contributes no slugs and the build\n * continues; failing the whole scan would break `vite dev` over a temp file that\n * no longer exists.\n */\n const rescan = async (): Promise<void> => {\n const files = await collectSourceFiles(resolve(root, dir), skip);\n for (const file of files) {\n try {\n const code = await readFile(file, \"utf8\");\n for (const slug of scanIconSlugs(code, known)) slugs.add(slug);\n } catch {\n /* empty */\n }\n }\n };\n\n return {\n name: \"tempest-icons\",\n enforce: \"pre\",\n\n configResolved(config: { root?: string }) {\n root = config.root ?? root;\n },\n\n async buildStart() {\n await rescan();\n },\n\n /**\n * Claim both spellings of the registry module.\n *\n * The subpath is a real file in the installed package, so returning the\n * virtual id here is what overrides the empty stub with the generated\n * table. Letting Vite resolve it normally would silently ship the stub.\n */\n resolveId(id: string) {\n return id === TEMPEST_ICONS_ID || id === TEMPEST_ICONS_VIRTUAL_ID ? RESOLVED_ID : null;\n },\n\n load(id: string) {\n return id === RESOLVED_ID ? buildIconsModule([...slugs], iconAliases) : null;\n },\n\n /**\n * Pick up a slug added while the dev server is running.\n *\n * A newly written `<Icon name=\"save\" />` would otherwise only render via\n * the lazy path until the next restart. Rescanning the changed file and\n * invalidating the virtual module keeps dev and build agreeing on what the\n * static registry contains.\n */\n async handleHotUpdate(ctx: {\n file: string;\n read: () => Promise<string>;\n server: { moduleGraph: { getModuleById: (id: string) => unknown } };\n }) {\n if (!SOURCE_FILE.test(ctx.file)) return;\n const before = slugs.size;\n for (const slug of scanIconSlugs(await ctx.read(), known)) slugs.add(slug);\n if (slugs.size === before) return;\n const mod = ctx.server.moduleGraph.getModuleById(RESOLVED_ID);\n if (mod) return [mod];\n },\n } as TempestVitePlugin;\n}\n"],"mappings":"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"}