@techzyapp/ui-library 1.0.31 → 1.0.33

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 (457) hide show
  1. package/dist/AdminRoot-CwUHa2us.js +107 -0
  2. package/dist/AdminRoot-CwUHa2us.js.map +1 -0
  3. package/dist/AdminRoot-cjP_Ad4r.cjs +2 -0
  4. package/dist/AdminRoot-cjP_Ad4r.cjs.map +1 -0
  5. package/dist/{Alert-BM5WOI_u.cjs → Alert-CfjDmLR8.cjs} +2 -2
  6. package/dist/{Alert-BM5WOI_u.cjs.map → Alert-CfjDmLR8.cjs.map} +1 -1
  7. package/dist/{Alert-BLqAcEoT.js → Alert-LJDrtkJy.js} +3 -3
  8. package/dist/{Alert-BLqAcEoT.js.map → Alert-LJDrtkJy.js.map} +1 -1
  9. package/dist/{Breadcrumbs-Di4-Acfb.cjs → Breadcrumbs-COb2zmDk.cjs} +2 -2
  10. package/dist/{Breadcrumbs-Di4-Acfb.cjs.map → Breadcrumbs-COb2zmDk.cjs.map} +1 -1
  11. package/dist/{Breadcrumbs-CzHGbN2c.js → Breadcrumbs-DYeVrOns.js} +3 -3
  12. package/dist/{Breadcrumbs-CzHGbN2c.js.map → Breadcrumbs-DYeVrOns.js.map} +1 -1
  13. package/dist/{Button-BQhiJq8e.cjs → Button-BD5wpg-t.cjs} +2 -2
  14. package/dist/{Button-BQhiJq8e.cjs.map → Button-BD5wpg-t.cjs.map} +1 -1
  15. package/dist/{Button-9Qcdkw-y.js → Button-PBZnkRNn.js} +2 -2
  16. package/dist/{Button-9Qcdkw-y.js.map → Button-PBZnkRNn.js.map} +1 -1
  17. package/dist/{Calendar-dXhLgOUH.cjs → Calendar-842vjtdN.cjs} +2 -2
  18. package/dist/{Calendar-dXhLgOUH.cjs.map → Calendar-842vjtdN.cjs.map} +1 -1
  19. package/dist/{Calendar-BB-C0qXO.js → Calendar-Bb5Ekbpr.js} +3 -3
  20. package/dist/{Calendar-BB-C0qXO.js.map → Calendar-Bb5Ekbpr.js.map} +1 -1
  21. package/dist/{Card-BERQfyhJ.js → Card-CV_rHego.js} +2 -2
  22. package/dist/{Card-BERQfyhJ.js.map → Card-CV_rHego.js.map} +1 -1
  23. package/dist/{Card-DULpoOfj.cjs → Card-DL7XnkOA.cjs} +2 -2
  24. package/dist/{Card-DULpoOfj.cjs.map → Card-DL7XnkOA.cjs.map} +1 -1
  25. package/dist/{Chip-BuydTI6V.cjs → Chip-CLPIPC9a.cjs} +2 -2
  26. package/dist/{Chip-BuydTI6V.cjs.map → Chip-CLPIPC9a.cjs.map} +1 -1
  27. package/dist/{Chip-DZ5Fz7jx.js → Chip-DdOUVF0Z.js} +2 -2
  28. package/dist/{Chip-DZ5Fz7jx.js.map → Chip-DdOUVF0Z.js.map} +1 -1
  29. package/dist/{CodeBlock-BySsTAtY.js → CodeBlock-B35NXZzd.js} +3 -3
  30. package/dist/{CodeBlock-BySsTAtY.js.map → CodeBlock-B35NXZzd.js.map} +1 -1
  31. package/dist/{CodeBlock-BPraYPoS.cjs → CodeBlock-C0dbyxcl.cjs} +2 -2
  32. package/dist/{CodeBlock-BPraYPoS.cjs.map → CodeBlock-C0dbyxcl.cjs.map} +1 -1
  33. package/dist/{ColorPicker-DJow7m2v.js → ColorPicker-6UraVYFy.js} +3 -3
  34. package/dist/{ColorPicker-DJow7m2v.js.map → ColorPicker-6UraVYFy.js.map} +1 -1
  35. package/dist/{ColorPicker-BTBTQD39.cjs → ColorPicker-DmLGKaYF.cjs} +2 -2
  36. package/dist/{ColorPicker-BTBTQD39.cjs.map → ColorPicker-DmLGKaYF.cjs.map} +1 -1
  37. package/dist/{ColorPickerPanel-D6agWM6y.js → ColorPickerPanel-DZ-W_wOI.js} +2 -2
  38. package/dist/{ColorPickerPanel-D6agWM6y.js.map → ColorPickerPanel-DZ-W_wOI.js.map} +1 -1
  39. package/dist/{ColorPickerPanel-DXIYwUoE.cjs → ColorPickerPanel-WuxwwfCI.cjs} +2 -2
  40. package/dist/{ColorPickerPanel-DXIYwUoE.cjs.map → ColorPickerPanel-WuxwwfCI.cjs.map} +1 -1
  41. package/dist/{ColorRamp-Bhj28c_6.js → ColorRamp-CSqzzHZx.js} +2 -2
  42. package/dist/{ColorRamp-Bhj28c_6.js.map → ColorRamp-CSqzzHZx.js.map} +1 -1
  43. package/dist/{ColorRamp-B45Rtwgw.cjs → ColorRamp-D_9gsqJl.cjs} +2 -2
  44. package/dist/{ColorRamp-B45Rtwgw.cjs.map → ColorRamp-D_9gsqJl.cjs.map} +1 -1
  45. package/dist/ConfigProvider-CVLHPXQm.cjs +2 -0
  46. package/dist/ConfigProvider-CVLHPXQm.cjs.map +1 -0
  47. package/dist/ConfigProvider-tvLbKiqu.js +347 -0
  48. package/dist/ConfigProvider-tvLbKiqu.js.map +1 -0
  49. package/dist/{CopyButton-Bfte6TJF.cjs → CopyButton-0w4OToIy.cjs} +2 -2
  50. package/dist/{CopyButton-Bfte6TJF.cjs.map → CopyButton-0w4OToIy.cjs.map} +1 -1
  51. package/dist/{CopyButton-CBk85MQ7.js → CopyButton-B_mYxcXV.js} +3 -3
  52. package/dist/{CopyButton-CBk85MQ7.js.map → CopyButton-B_mYxcXV.js.map} +1 -1
  53. package/dist/{DatePicker-eAzDnO2Y.js → DatePicker-Bt-M87zX.js} +4 -4
  54. package/dist/{DatePicker-eAzDnO2Y.js.map → DatePicker-Bt-M87zX.js.map} +1 -1
  55. package/dist/{DatePicker-DBiU4Mb6.cjs → DatePicker-D1uFIm3M.cjs} +2 -2
  56. package/dist/{DatePicker-DBiU4Mb6.cjs.map → DatePicker-D1uFIm3M.cjs.map} +1 -1
  57. package/dist/{DateTimePicker-CvaD8IkF.cjs → DateTimePicker-DPt-LDVJ.cjs} +2 -2
  58. package/dist/{DateTimePicker-CvaD8IkF.cjs.map → DateTimePicker-DPt-LDVJ.cjs.map} +1 -1
  59. package/dist/{DateTimePicker-M2UBjFVc.js → DateTimePicker-zJUc9crs.js} +7 -7
  60. package/dist/{DateTimePicker-M2UBjFVc.js.map → DateTimePicker-zJUc9crs.js.map} +1 -1
  61. package/dist/{DescriptionList-BhsmdtS1.js → DescriptionList-BLx9NfAW.js} +4 -4
  62. package/dist/{DescriptionList-BhsmdtS1.js.map → DescriptionList-BLx9NfAW.js.map} +1 -1
  63. package/dist/{DescriptionList-DQHNOTWl.cjs → DescriptionList-CPCbzU9b.cjs} +2 -2
  64. package/dist/{DescriptionList-DQHNOTWl.cjs.map → DescriptionList-CPCbzU9b.cjs.map} +1 -1
  65. package/dist/{Dropdown-BbaU1WDC.cjs → Dropdown-CMqWq6J_.cjs} +2 -2
  66. package/dist/{Dropdown-BbaU1WDC.cjs.map → Dropdown-CMqWq6J_.cjs.map} +1 -1
  67. package/dist/{Dropdown-BlmbYp1X.js → Dropdown-zlv96RLy.js} +2 -2
  68. package/dist/{Dropdown-BlmbYp1X.js.map → Dropdown-zlv96RLy.js.map} +1 -1
  69. package/dist/{EmptyState-2pA3XlOX.js → EmptyState-BEVEGcLx.js} +2 -2
  70. package/dist/{EmptyState-2pA3XlOX.js.map → EmptyState-BEVEGcLx.js.map} +1 -1
  71. package/dist/{EmptyState-ByBpy2vN.cjs → EmptyState-C54C0Qwc.cjs} +2 -2
  72. package/dist/{EmptyState-ByBpy2vN.cjs.map → EmptyState-C54C0Qwc.cjs.map} +1 -1
  73. package/dist/ErrorBoundary-8iu-mR5Y.cjs +2 -0
  74. package/dist/ErrorBoundary-8iu-mR5Y.cjs.map +1 -0
  75. package/dist/ErrorBoundary-BSJL381Y.js +49 -0
  76. package/dist/ErrorBoundary-BSJL381Y.js.map +1 -0
  77. package/dist/ErrorState-BXMjBWav.cjs +4 -0
  78. package/dist/ErrorState-BXMjBWav.cjs.map +1 -0
  79. package/dist/ErrorState-DKhZ4aJh.js +142 -0
  80. package/dist/ErrorState-DKhZ4aJh.js.map +1 -0
  81. package/dist/{FileCard-BYNJVmp0.cjs → FileCard-B3dfdTVN.cjs} +2 -2
  82. package/dist/{FileCard-BYNJVmp0.cjs.map → FileCard-B3dfdTVN.cjs.map} +1 -1
  83. package/dist/{FileCard-BNfUAgsF.js → FileCard-R_sB8Qbx.js} +3 -3
  84. package/dist/{FileCard-BNfUAgsF.js.map → FileCard-R_sB8Qbx.js.map} +1 -1
  85. package/dist/{FileUploader-DdICa5UC.cjs → FileUploader-4UMy0urx.cjs} +2 -2
  86. package/dist/{FileUploader-DdICa5UC.cjs.map → FileUploader-4UMy0urx.cjs.map} +1 -1
  87. package/dist/{FileUploader-TOWwDOSS.js → FileUploader-B55atuxq.js} +5 -5
  88. package/dist/{FileUploader-TOWwDOSS.js.map → FileUploader-B55atuxq.js.map} +1 -1
  89. package/dist/{Flag-DXPQ2t8z.cjs → Flag-CFvJHC0u.cjs} +2 -2
  90. package/dist/{Flag-DXPQ2t8z.cjs.map → Flag-CFvJHC0u.cjs.map} +1 -1
  91. package/dist/{Flag-DDR6OANA.js → Flag-D7fmMqqy.js} +2 -2
  92. package/dist/{Flag-DDR6OANA.js.map → Flag-D7fmMqqy.js.map} +1 -1
  93. package/dist/{FullscreenToggle-DmH1541W.js → FullscreenToggle-CXmPqxJv.js} +3 -3
  94. package/dist/{FullscreenToggle-DmH1541W.js.map → FullscreenToggle-CXmPqxJv.js.map} +1 -1
  95. package/dist/{FullscreenToggle-BKo1lDSE.cjs → FullscreenToggle-D7tUPCNI.cjs} +2 -2
  96. package/dist/{FullscreenToggle-BKo1lDSE.cjs.map → FullscreenToggle-D7tUPCNI.cjs.map} +1 -1
  97. package/dist/{IconButton-CvIXSFsr.cjs → IconButton-BVrO9TBP.cjs} +2 -2
  98. package/dist/{IconButton-CvIXSFsr.cjs.map → IconButton-BVrO9TBP.cjs.map} +1 -1
  99. package/dist/{IconButton-CL_6iMQh.js → IconButton-sC_E_TXd.js} +2 -2
  100. package/dist/{IconButton-CL_6iMQh.js.map → IconButton-sC_E_TXd.js.map} +1 -1
  101. package/dist/List-CXHlAI5w.js +38 -0
  102. package/dist/List-CXHlAI5w.js.map +1 -0
  103. package/dist/List-DOsh6w-d.cjs +2 -0
  104. package/dist/List-DOsh6w-d.cjs.map +1 -0
  105. package/dist/ListItem-CUeIBhOF.cjs +2 -0
  106. package/dist/ListItem-CUeIBhOF.cjs.map +1 -0
  107. package/dist/ListItem-ehFB7TUW.js +77 -0
  108. package/dist/ListItem-ehFB7TUW.js.map +1 -0
  109. package/dist/{Loader-Czzb450N.js → Loader-ChrouvaR.js} +2 -2
  110. package/dist/{Loader-Czzb450N.js.map → Loader-ChrouvaR.js.map} +1 -1
  111. package/dist/{Loader-CI1j71X8.cjs → Loader-DNCEHqZb.cjs} +2 -2
  112. package/dist/{Loader-CI1j71X8.cjs.map → Loader-DNCEHqZb.cjs.map} +1 -1
  113. package/dist/LocationPicker-CJ6bCJC4.cjs +2 -0
  114. package/dist/LocationPicker-CJ6bCJC4.cjs.map +1 -0
  115. package/dist/LocationPicker-DxiQ27k6.js +781 -0
  116. package/dist/LocationPicker-DxiQ27k6.js.map +1 -0
  117. package/dist/{Modal-DPObz0b-.cjs → Modal-BL_XihC8.cjs} +2 -2
  118. package/dist/{Modal-DPObz0b-.cjs.map → Modal-BL_XihC8.cjs.map} +1 -1
  119. package/dist/{Modal-DMJMw6kT.js → Modal-Do8pzyMl.js} +3 -3
  120. package/dist/{Modal-DMJMw6kT.js.map → Modal-Do8pzyMl.js.map} +1 -1
  121. package/dist/{MultiSelect-BTR6w5Ot.js → MultiSelect-BfsEdXNa.js} +4 -4
  122. package/dist/{MultiSelect-BTR6w5Ot.js.map → MultiSelect-BfsEdXNa.js.map} +1 -1
  123. package/dist/{MultiSelect-IDAJ5a5K.cjs → MultiSelect-WS5YNGRD.cjs} +2 -2
  124. package/dist/{MultiSelect-IDAJ5a5K.cjs.map → MultiSelect-WS5YNGRD.cjs.map} +1 -1
  125. package/dist/{NumberField-Cg0XEDgW.cjs → NumberField-CxiEfRAi.cjs} +2 -2
  126. package/dist/{NumberField-Cg0XEDgW.cjs.map → NumberField-CxiEfRAi.cjs.map} +1 -1
  127. package/dist/{NumberField-DlaW-g3Z.js → NumberField-P68n6q5m.js} +3 -3
  128. package/dist/{NumberField-DlaW-g3Z.js.map → NumberField-P68n6q5m.js.map} +1 -1
  129. package/dist/{OtpField-vxQuo-uR.js → OtpField-DjTJH4Kh.js} +2 -2
  130. package/dist/{OtpField-vxQuo-uR.js.map → OtpField-DjTJH4Kh.js.map} +1 -1
  131. package/dist/{OtpField-DsedK1nQ.cjs → OtpField-XieJfl1y.cjs} +2 -2
  132. package/dist/{OtpField-DsedK1nQ.cjs.map → OtpField-XieJfl1y.cjs.map} +1 -1
  133. package/dist/PageError-ClR7k0Zb.js +69 -0
  134. package/dist/PageError-ClR7k0Zb.js.map +1 -0
  135. package/dist/PageError-D7_Q8wz8.cjs +2 -0
  136. package/dist/PageError-D7_Q8wz8.cjs.map +1 -0
  137. package/dist/{PageLayout-BPbjTYS3.cjs → PageLayout-DTG83hLL.cjs} +2 -2
  138. package/dist/{PageLayout-BPbjTYS3.cjs.map → PageLayout-DTG83hLL.cjs.map} +1 -1
  139. package/dist/{PageLayout-Rk6KSxmn.js → PageLayout-XQ_aQTf5.js} +2 -2
  140. package/dist/{PageLayout-Rk6KSxmn.js.map → PageLayout-XQ_aQTf5.js.map} +1 -1
  141. package/dist/PageNotFound-CpwHMTxG.js +24 -0
  142. package/dist/PageNotFound-CpwHMTxG.js.map +1 -0
  143. package/dist/PageNotFound-D3wJ4Job.cjs +2 -0
  144. package/dist/PageNotFound-D3wJ4Job.cjs.map +1 -0
  145. package/dist/{Pagination-DNGKNQy0.cjs → Pagination-BF8cmQMi.cjs} +2 -2
  146. package/dist/{Pagination-DNGKNQy0.cjs.map → Pagination-BF8cmQMi.cjs.map} +1 -1
  147. package/dist/{Pagination-CNdkfXp2.js → Pagination-Df-F9i2o.js} +2 -2
  148. package/dist/{Pagination-CNdkfXp2.js.map → Pagination-Df-F9i2o.js.map} +1 -1
  149. package/dist/{PaletteField-BSIF5jI6.cjs → PaletteField-BFRPv7AC.cjs} +2 -2
  150. package/dist/{PaletteField-BSIF5jI6.cjs.map → PaletteField-BFRPv7AC.cjs.map} +1 -1
  151. package/dist/{PaletteField-Bp5Fgygh.js → PaletteField-DUu4jz1c.js} +3 -3
  152. package/dist/{PaletteField-Bp5Fgygh.js.map → PaletteField-DUu4jz1c.js.map} +1 -1
  153. package/dist/{PhoneField-BdmvslXQ.js → PhoneField-CXIQX_hR.js} +4 -4
  154. package/dist/{PhoneField-BdmvslXQ.js.map → PhoneField-CXIQX_hR.js.map} +1 -1
  155. package/dist/{PhoneField-BMhZeZkW.cjs → PhoneField-O5syyH7u.cjs} +2 -2
  156. package/dist/{PhoneField-BMhZeZkW.cjs.map → PhoneField-O5syyH7u.cjs.map} +1 -1
  157. package/dist/{Popconfirm-Cyaeybtj.js → Popconfirm-D4J7tlk_.js} +3 -3
  158. package/dist/{Popconfirm-Cyaeybtj.js.map → Popconfirm-D4J7tlk_.js.map} +1 -1
  159. package/dist/{Popconfirm-IhlIINtZ.cjs → Popconfirm-bEoOPmZY.cjs} +2 -2
  160. package/dist/{Popconfirm-IhlIINtZ.cjs.map → Popconfirm-bEoOPmZY.cjs.map} +1 -1
  161. package/dist/{Progress-T7PLrJ0Y.js → Progress-BxvqmmGS.js} +2 -2
  162. package/dist/{Progress-T7PLrJ0Y.js.map → Progress-BxvqmmGS.js.map} +1 -1
  163. package/dist/{Progress-CAY1p06_.cjs → Progress-CqXX0rRp.cjs} +2 -2
  164. package/dist/{Progress-CAY1p06_.cjs.map → Progress-CqXX0rRp.cjs.map} +1 -1
  165. package/dist/{RemoveDialog-DdGsqaWV.js → RemoveDialog-DH3eNUxC.js} +5 -5
  166. package/dist/{RemoveDialog-DdGsqaWV.js.map → RemoveDialog-DH3eNUxC.js.map} +1 -1
  167. package/dist/{RemoveDialog-D12B4x80.cjs → RemoveDialog-FrieNcjL.cjs} +2 -2
  168. package/dist/{RemoveDialog-D12B4x80.cjs.map → RemoveDialog-FrieNcjL.cjs.map} +1 -1
  169. package/dist/{RichTextEditor-DL4y5xVv.js → RichTextEditor-6frB2C5G.js} +9 -9
  170. package/dist/{RichTextEditor-DL4y5xVv.js.map → RichTextEditor-6frB2C5G.js.map} +1 -1
  171. package/dist/RichTextEditor-B-C4NPDk.cjs +2 -0
  172. package/dist/{RichTextEditor-BVXY25sz.cjs.map → RichTextEditor-B-C4NPDk.cjs.map} +1 -1
  173. package/dist/{RootLayout-BK3t6Mm0.js → RootLayout-C7n79JjM.js} +219 -202
  174. package/dist/RootLayout-C7n79JjM.js.map +1 -0
  175. package/dist/RootLayout-CtkpgPGV.cjs +2 -0
  176. package/dist/RootLayout-CtkpgPGV.cjs.map +1 -0
  177. package/dist/{Select-DlFDOZtn.cjs → Select-Bjq_p8_e.cjs} +2 -2
  178. package/dist/{Select-DlFDOZtn.cjs.map → Select-Bjq_p8_e.cjs.map} +1 -1
  179. package/dist/{Select-tVI_qer3.js → Select-DO3zDQYV.js} +3 -3
  180. package/dist/{Select-tVI_qer3.js.map → Select-DO3zDQYV.js.map} +1 -1
  181. package/dist/Sidebar-2oH285Xs.cjs +2 -0
  182. package/dist/{Sidebar-gB-X4VLX.cjs.map → Sidebar-2oH285Xs.cjs.map} +1 -1
  183. package/dist/{Sidebar-CjrD3nNp.js → Sidebar-CKbSWc5q.js} +33 -32
  184. package/dist/{Sidebar-CjrD3nNp.js.map → Sidebar-CKbSWc5q.js.map} +1 -1
  185. package/dist/{SpeedDial-xQr4JH0x.js → SpeedDial-BZK-z_r9.js} +2 -2
  186. package/dist/{SpeedDial-xQr4JH0x.js.map → SpeedDial-BZK-z_r9.js.map} +1 -1
  187. package/dist/{SpeedDial-BIOkkLKO.cjs → SpeedDial-KGf8b4Gq.cjs} +2 -2
  188. package/dist/{SpeedDial-BIOkkLKO.cjs.map → SpeedDial-KGf8b4Gq.cjs.map} +1 -1
  189. package/dist/{Stepper-CkYcIc15.js → Stepper-BI3pjWf_.js} +13 -13
  190. package/dist/{Stepper-CkYcIc15.js.map → Stepper-BI3pjWf_.js.map} +1 -1
  191. package/dist/{Stepper-CBdhvPoz.cjs → Stepper-s9Vah5R2.cjs} +2 -2
  192. package/dist/{Stepper-CBdhvPoz.cjs.map → Stepper-s9Vah5R2.cjs.map} +1 -1
  193. package/dist/Table-CLjLsYYS.cjs +2 -0
  194. package/dist/Table-CLjLsYYS.cjs.map +1 -0
  195. package/dist/{Table-CwQKfXGn.js → Table-PsNnKn_j.js} +174 -173
  196. package/dist/Table-PsNnKn_j.js.map +1 -0
  197. package/dist/{Tabs-Bztnezt9.js → Tabs-B2WzlRXI.js} +10 -10
  198. package/dist/{Tabs-Bztnezt9.js.map → Tabs-B2WzlRXI.js.map} +1 -1
  199. package/dist/{Tabs-651xbRe4.cjs → Tabs-DQoNP0QT.cjs} +2 -2
  200. package/dist/{Tabs-651xbRe4.cjs.map → Tabs-DQoNP0QT.cjs.map} +1 -1
  201. package/dist/{TagsField-B7ZARHzD.cjs → TagsField-CLfAAz4N.cjs} +2 -2
  202. package/dist/{TagsField-B7ZARHzD.cjs.map → TagsField-CLfAAz4N.cjs.map} +1 -1
  203. package/dist/{TagsField-CdymON69.js → TagsField-pdvQU4zh.js} +4 -4
  204. package/dist/{TagsField-CdymON69.js.map → TagsField-pdvQU4zh.js.map} +1 -1
  205. package/dist/{TextField-B22NRQ91.cjs → TextField-CgPfN-4d.cjs} +2 -2
  206. package/dist/{TextField-B22NRQ91.cjs.map → TextField-CgPfN-4d.cjs.map} +1 -1
  207. package/dist/{TextField-DkaYK1DI.js → TextField-LONfx4jy.js} +3 -3
  208. package/dist/{TextField-DkaYK1DI.js.map → TextField-LONfx4jy.js.map} +1 -1
  209. package/dist/{ThemeToggle-D5dWHQFb.cjs → ThemeToggle-9RBaRALj.cjs} +2 -2
  210. package/dist/{ThemeToggle-D5dWHQFb.cjs.map → ThemeToggle-9RBaRALj.cjs.map} +1 -1
  211. package/dist/ThemeToggle-DTkFppOd.js +28 -0
  212. package/dist/{ThemeToggle-DqzUvcK5.js.map → ThemeToggle-DTkFppOd.js.map} +1 -1
  213. package/dist/{TimeColumns-BEoHh961.js → TimeColumns-B7af5Cbj.js} +2 -2
  214. package/dist/{TimeColumns-BEoHh961.js.map → TimeColumns-B7af5Cbj.js.map} +1 -1
  215. package/dist/{TimeColumns-o2xhvSGE.cjs → TimeColumns-CJ13uf3K.cjs} +2 -2
  216. package/dist/{TimeColumns-o2xhvSGE.cjs.map → TimeColumns-CJ13uf3K.cjs.map} +1 -1
  217. package/dist/{TimePicker-DCryZCmh.js → TimePicker-BitZ7wv-.js} +5 -5
  218. package/dist/{TimePicker-DCryZCmh.js.map → TimePicker-BitZ7wv-.js.map} +1 -1
  219. package/dist/{TimePicker-CACmHwNn.cjs → TimePicker-Dshko7IJ.cjs} +2 -2
  220. package/dist/{TimePicker-CACmHwNn.cjs.map → TimePicker-Dshko7IJ.cjs.map} +1 -1
  221. package/dist/{Toaster-BwREV06e.cjs → Toaster-8ynQTcc0.cjs} +2 -2
  222. package/dist/{Toaster-BwREV06e.cjs.map → Toaster-8ynQTcc0.cjs.map} +1 -1
  223. package/dist/{Toaster-DwVLab3k.js → Toaster-CYVETXVZ.js} +2 -2
  224. package/dist/{Toaster-DwVLab3k.js.map → Toaster-CYVETXVZ.js.map} +1 -1
  225. package/dist/{TranslatedFields-sio1Qfy7.cjs → TranslatedFields-BKI3jrNd.cjs} +2 -2
  226. package/dist/{TranslatedFields-sio1Qfy7.cjs.map → TranslatedFields-BKI3jrNd.cjs.map} +1 -1
  227. package/dist/{TranslatedFields-B0LMXgiu.js → TranslatedFields-dmb-0Yn7.js} +13 -13
  228. package/dist/{TranslatedFields-B0LMXgiu.js.map → TranslatedFields-dmb-0Yn7.js.map} +1 -1
  229. package/dist/{UserCard-Dzc4zmPj.cjs → UserCard-ah6K1y0H.cjs} +2 -2
  230. package/dist/{UserCard-Dzc4zmPj.cjs.map → UserCard-ah6K1y0H.cjs.map} +1 -1
  231. package/dist/{UserCard-B5FVcJaK.js → UserCard-pEJZqiDF.js} +3 -3
  232. package/dist/{UserCard-B5FVcJaK.js.map → UserCard-pEJZqiDF.js.map} +1 -1
  233. package/dist/app/AdminRoot.d.cts +75 -4
  234. package/dist/app/AdminRoot.d.ts +75 -4
  235. package/dist/components/Alert/index.cjs +1 -1
  236. package/dist/components/Alert/index.js +1 -1
  237. package/dist/components/Breadcrumbs/index.cjs +1 -1
  238. package/dist/components/Breadcrumbs/index.js +1 -1
  239. package/dist/components/Button/index.cjs +1 -1
  240. package/dist/components/Button/index.js +1 -1
  241. package/dist/components/Card/index.cjs +1 -1
  242. package/dist/components/Card/index.js +1 -1
  243. package/dist/components/Chip/index.cjs +1 -1
  244. package/dist/components/Chip/index.js +1 -1
  245. package/dist/components/CodeBlock/index.cjs +1 -1
  246. package/dist/components/CodeBlock/index.js +1 -1
  247. package/dist/components/ColorPicker/index.cjs +1 -1
  248. package/dist/components/ColorPicker/index.js +1 -1
  249. package/dist/components/ColorRamp/index.cjs +1 -1
  250. package/dist/components/ColorRamp/index.js +1 -1
  251. package/dist/components/CopyButton/index.cjs +1 -1
  252. package/dist/components/CopyButton/index.js +1 -1
  253. package/dist/components/DatePicker/index.cjs +1 -1
  254. package/dist/components/DatePicker/index.js +1 -1
  255. package/dist/components/DateTimePicker/index.cjs +1 -1
  256. package/dist/components/DateTimePicker/index.js +1 -1
  257. package/dist/components/DescriptionList/index.cjs +1 -1
  258. package/dist/components/DescriptionList/index.js +1 -1
  259. package/dist/components/Dropdown/index.cjs +1 -1
  260. package/dist/components/Dropdown/index.js +1 -1
  261. package/dist/components/EmptyState/index.cjs +1 -1
  262. package/dist/components/EmptyState/index.js +1 -1
  263. package/dist/components/ErrorState/ErrorBoundary.d.cts +3 -3
  264. package/dist/components/ErrorState/ErrorBoundary.d.ts +3 -3
  265. package/dist/components/ErrorState/ErrorState.d.cts +37 -9
  266. package/dist/components/ErrorState/ErrorState.d.ts +37 -9
  267. package/dist/components/ErrorState/errorMessage.d.cts +35 -3
  268. package/dist/components/ErrorState/errorMessage.d.ts +35 -3
  269. package/dist/components/ErrorState/index.cjs +1 -1
  270. package/dist/components/ErrorState/index.d.cts +2 -2
  271. package/dist/components/ErrorState/index.d.ts +2 -2
  272. package/dist/components/ErrorState/index.js +15 -10
  273. package/dist/components/ErrorState/index.js.map +1 -1
  274. package/dist/components/FileCard/index.cjs +1 -1
  275. package/dist/components/FileCard/index.js +1 -1
  276. package/dist/components/FileUploader/index.cjs +1 -1
  277. package/dist/components/FileUploader/index.js +1 -1
  278. package/dist/components/Flag/index.cjs +1 -1
  279. package/dist/components/Flag/index.js +1 -1
  280. package/dist/components/FullscreenToggle/index.cjs +1 -1
  281. package/dist/components/FullscreenToggle/index.js +1 -1
  282. package/dist/components/IconButton/index.cjs +1 -1
  283. package/dist/components/IconButton/index.js +1 -1
  284. package/dist/components/List/index.cjs +1 -1
  285. package/dist/components/List/index.js +5 -4
  286. package/dist/components/List/index.js.map +1 -1
  287. package/dist/components/Loader/index.cjs +1 -1
  288. package/dist/components/Loader/index.js +1 -1
  289. package/dist/components/LocationPicker/LocationPicker.d.cts +87 -0
  290. package/dist/components/LocationPicker/LocationPicker.d.ts +87 -0
  291. package/dist/components/LocationPicker/PlaceSearch.d.cts +20 -0
  292. package/dist/components/LocationPicker/PlaceSearch.d.ts +20 -0
  293. package/dist/components/LocationPicker/googleMaps.d.cts +89 -0
  294. package/dist/components/LocationPicker/googleMaps.d.ts +89 -0
  295. package/dist/components/LocationPicker/index.cjs +2 -0
  296. package/dist/components/LocationPicker/index.cjs.map +1 -0
  297. package/dist/components/LocationPicker/index.d.cts +2 -0
  298. package/dist/components/LocationPicker/index.d.ts +2 -0
  299. package/dist/components/LocationPicker/index.js +7 -0
  300. package/dist/components/LocationPicker/index.js.map +1 -0
  301. package/dist/components/Modal/index.cjs +1 -1
  302. package/dist/components/Modal/index.js +1 -1
  303. package/dist/components/MultiSelect/MultiSelect.d.cts +1 -1
  304. package/dist/components/MultiSelect/MultiSelect.d.ts +1 -1
  305. package/dist/components/MultiSelect/index.cjs +1 -1
  306. package/dist/components/MultiSelect/index.js +1 -1
  307. package/dist/components/NumberField/index.cjs +1 -1
  308. package/dist/components/NumberField/index.js +1 -1
  309. package/dist/components/OptionMenu/OptionMenu.d.cts +1 -1
  310. package/dist/components/OptionMenu/OptionMenu.d.ts +1 -1
  311. package/dist/components/OtpField/index.cjs +1 -1
  312. package/dist/components/OtpField/index.js +1 -1
  313. package/dist/components/PageError/PageError.d.cts +53 -0
  314. package/dist/components/PageError/PageError.d.ts +53 -0
  315. package/dist/components/PageError/index.cjs +2 -0
  316. package/dist/components/PageError/index.cjs.map +1 -0
  317. package/dist/components/PageError/index.d.cts +2 -0
  318. package/dist/components/PageError/index.d.ts +2 -0
  319. package/dist/components/PageError/index.js +6 -0
  320. package/dist/components/PageError/index.js.map +1 -0
  321. package/dist/components/PageLayout/index.cjs +1 -1
  322. package/dist/components/PageLayout/index.js +1 -1
  323. package/dist/components/PageNotFound/index.cjs +1 -1
  324. package/dist/components/PageNotFound/index.js +1 -1
  325. package/dist/components/PageNotFound/useHomeTo.d.cts +10 -0
  326. package/dist/components/PageNotFound/useHomeTo.d.ts +10 -0
  327. package/dist/components/Pagination/index.cjs +1 -1
  328. package/dist/components/Pagination/index.js +1 -1
  329. package/dist/components/PaletteField/index.cjs +1 -1
  330. package/dist/components/PaletteField/index.js +1 -1
  331. package/dist/components/PhoneField/index.cjs +1 -1
  332. package/dist/components/PhoneField/index.js +1 -1
  333. package/dist/components/Popconfirm/index.cjs +1 -1
  334. package/dist/components/Popconfirm/index.js +1 -1
  335. package/dist/components/Progress/index.cjs +1 -1
  336. package/dist/components/Progress/index.js +1 -1
  337. package/dist/components/RemoveDialog/index.cjs +1 -1
  338. package/dist/components/RemoveDialog/index.js +1 -1
  339. package/dist/components/RichTextEditor/index.cjs +1 -1
  340. package/dist/components/RichTextEditor/index.js +1 -1
  341. package/dist/components/RootLayout/index.cjs +1 -1
  342. package/dist/components/RootLayout/index.js +1 -1
  343. package/dist/components/Select/Select.d.cts +1 -1
  344. package/dist/components/Select/Select.d.ts +1 -1
  345. package/dist/components/Select/index.cjs +1 -1
  346. package/dist/components/Select/index.js +1 -1
  347. package/dist/components/Sidebar/index.cjs +1 -1
  348. package/dist/components/Sidebar/index.js +1 -1
  349. package/dist/components/SpeedDial/index.cjs +1 -1
  350. package/dist/components/SpeedDial/index.js +1 -1
  351. package/dist/components/Stepper/index.cjs +1 -1
  352. package/dist/components/Stepper/index.js +1 -1
  353. package/dist/components/Table/Table.d.cts +1 -1
  354. package/dist/components/Table/Table.d.ts +1 -1
  355. package/dist/components/Table/index.cjs +1 -1
  356. package/dist/components/Table/index.js +1 -1
  357. package/dist/components/Tabs/index.cjs +1 -1
  358. package/dist/components/Tabs/index.js +1 -1
  359. package/dist/components/TagsField/TagsField.d.cts +1 -1
  360. package/dist/components/TagsField/TagsField.d.ts +1 -1
  361. package/dist/components/TagsField/index.cjs +1 -1
  362. package/dist/components/TagsField/index.js +1 -1
  363. package/dist/components/TextField/TextField.d.cts +1 -1
  364. package/dist/components/TextField/TextField.d.ts +1 -1
  365. package/dist/components/TextField/index.cjs +1 -1
  366. package/dist/components/TextField/index.js +1 -1
  367. package/dist/components/ThemeToggle/index.cjs +1 -1
  368. package/dist/components/ThemeToggle/index.js +1 -1
  369. package/dist/components/TimePicker/index.cjs +1 -1
  370. package/dist/components/TimePicker/index.js +1 -1
  371. package/dist/components/Toast/index.cjs +1 -1
  372. package/dist/components/Toast/index.js +1 -1
  373. package/dist/components/TranslatedFields/index.cjs +1 -1
  374. package/dist/components/TranslatedFields/index.js +1 -1
  375. package/dist/components/UserCard/UserCard.d.cts +1 -1
  376. package/dist/components/UserCard/UserCard.d.ts +1 -1
  377. package/dist/components/UserCard/index.cjs +1 -1
  378. package/dist/components/UserCard/index.js +1 -1
  379. package/dist/components/index.d.cts +2 -0
  380. package/dist/components/index.d.ts +2 -0
  381. package/dist/entries/app.cjs +1 -1
  382. package/dist/entries/app.d.cts +1 -1
  383. package/dist/entries/app.d.ts +1 -1
  384. package/dist/entries/app.js +1 -1
  385. package/dist/entries/components.cjs +1 -1
  386. package/dist/entries/components.js +172 -161
  387. package/dist/entries/components.js.map +1 -1
  388. package/dist/entries/i18n.cjs +1 -1
  389. package/dist/entries/i18n.js +2 -2
  390. package/dist/entries/theme.cjs +1 -1
  391. package/dist/entries/theme.d.cts +2 -2
  392. package/dist/entries/theme.d.ts +2 -2
  393. package/dist/entries/theme.js +15 -13
  394. package/dist/errorMessage-C7N4KvUS.cjs +2 -0
  395. package/dist/errorMessage-C7N4KvUS.cjs.map +1 -0
  396. package/dist/errorMessage-C83fB2h5.js +98 -0
  397. package/dist/errorMessage-C83fB2h5.js.map +1 -0
  398. package/dist/i18n/messages.d.cts +56 -0
  399. package/dist/i18n/messages.d.ts +56 -0
  400. package/dist/index.cjs +1 -1
  401. package/dist/index.css +1 -1
  402. package/dist/index.js +229 -216
  403. package/dist/index.js.map +1 -1
  404. package/dist/{messages-DswDgGe2.js → messages-C1eTrGJy.js} +286 -90
  405. package/dist/messages-C1eTrGJy.js.map +1 -0
  406. package/dist/messages-DCr7iFmv.cjs +36 -0
  407. package/dist/messages-DCr7iFmv.cjs.map +1 -0
  408. package/dist/theme/ConfigProvider.d.cts +39 -3
  409. package/dist/theme/ConfigProvider.d.ts +39 -3
  410. package/dist/theme/index.d.cts +2 -2
  411. package/dist/theme/index.d.ts +2 -2
  412. package/dist/useHomeTo-Cr6Usr_D.cjs +2 -0
  413. package/dist/useHomeTo-Cr6Usr_D.cjs.map +1 -0
  414. package/dist/useHomeTo-yTXajO22.js +25 -0
  415. package/dist/useHomeTo-yTXajO22.js.map +1 -0
  416. package/dist/useOptionMenu-DHGSbQmS.cjs +2 -0
  417. package/dist/{useOptionMenu-BYeSUee6.cjs.map → useOptionMenu-DHGSbQmS.cjs.map} +1 -1
  418. package/dist/{useOptionMenu-DtTvY9EC.js → useOptionMenu-DK0ixg-p.js} +9 -8
  419. package/dist/{useOptionMenu-DtTvY9EC.js.map → useOptionMenu-DK0ixg-p.js.map} +1 -1
  420. package/package.json +1 -1
  421. package/dist/AdminRoot-BYkmCGNx.js +0 -57
  422. package/dist/AdminRoot-BYkmCGNx.js.map +0 -1
  423. package/dist/AdminRoot-BbkfFQEn.cjs +0 -2
  424. package/dist/AdminRoot-BbkfFQEn.cjs.map +0 -1
  425. package/dist/ConfigProvider-Ct0Pe3Ku.js +0 -335
  426. package/dist/ConfigProvider-Ct0Pe3Ku.js.map +0 -1
  427. package/dist/ConfigProvider-CtpfSy1i.cjs +0 -2
  428. package/dist/ConfigProvider-CtpfSy1i.cjs.map +0 -1
  429. package/dist/ErrorBoundary-B-37hGZW.js +0 -163
  430. package/dist/ErrorBoundary-B-37hGZW.js.map +0 -1
  431. package/dist/ErrorBoundary-gRGxeuM1.cjs +0 -2
  432. package/dist/ErrorBoundary-gRGxeuM1.cjs.map +0 -1
  433. package/dist/List-BLPB3-B8.js +0 -107
  434. package/dist/List-BLPB3-B8.js.map +0 -1
  435. package/dist/List-ah2PNWeY.cjs +0 -2
  436. package/dist/List-ah2PNWeY.cjs.map +0 -1
  437. package/dist/PageNotFound-CBNhKZ9Y.js +0 -39
  438. package/dist/PageNotFound-CBNhKZ9Y.js.map +0 -1
  439. package/dist/PageNotFound-PUQ1o9R4.cjs +0 -2
  440. package/dist/PageNotFound-PUQ1o9R4.cjs.map +0 -1
  441. package/dist/QueryError-DP22IUnp.cjs +0 -2
  442. package/dist/QueryError-DP22IUnp.cjs.map +0 -1
  443. package/dist/QueryError-Dtspj9l4.js +0 -19
  444. package/dist/QueryError-Dtspj9l4.js.map +0 -1
  445. package/dist/RichTextEditor-BVXY25sz.cjs +0 -2
  446. package/dist/RootLayout-BK3t6Mm0.js.map +0 -1
  447. package/dist/RootLayout-DDuzPlJe.cjs +0 -2
  448. package/dist/RootLayout-DDuzPlJe.cjs.map +0 -1
  449. package/dist/Sidebar-gB-X4VLX.cjs +0 -2
  450. package/dist/Table-CwQKfXGn.js.map +0 -1
  451. package/dist/Table-Cwxqo7Br.cjs +0 -2
  452. package/dist/Table-Cwxqo7Br.cjs.map +0 -1
  453. package/dist/ThemeToggle-DqzUvcK5.js +0 -28
  454. package/dist/messages-DS38X5W2.cjs +0 -36
  455. package/dist/messages-DS38X5W2.cjs.map +0 -1
  456. package/dist/messages-DswDgGe2.js.map +0 -1
  457. package/dist/useOptionMenu-BYeSUee6.cjs +0 -2
@@ -1,7 +1,7 @@
1
1
  import { jsx as c } from "react/jsx-runtime";
2
2
  import { forwardRef as x, isValidElement as B, cloneElement as g } from "react";
3
3
  import { clsx as v } from "clsx";
4
- import { L as z } from "./Loader-Czzb450N.js";
4
+ import { L as z } from "./Loader-ChrouvaR.js";
5
5
  const I = "_iconButton_10018_1", y = "_sm_10018_22", k = "_md_10018_27", C = "_lg_10018_32", E = "_contained_10018_38", L = "_filled_10018_48", $ = "_outlined_10018_57", j = "_text_10018_68", w = "_rounded_10018_78", N = "_disabled_10018_86", R = "_loading_10018_90", V = "_nonClickable_10018_95", t = {
6
6
  iconButton: I,
7
7
  sm: y,
@@ -65,4 +65,4 @@ const I = "_iconButton_10018_1", y = "_sm_10018_22", k = "_md_10018_27", C = "_l
65
65
  export {
66
66
  H as I
67
67
  };
68
- //# sourceMappingURL=IconButton-CL_6iMQh.js.map
68
+ //# sourceMappingURL=IconButton-sC_E_TXd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton-CL_6iMQh.js","sources":["../src/components/IconButton/IconButton.tsx"],"sourcesContent":["import {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Loader } from '../Loader'\nimport styles from './IconButton.module.css'\n\nexport type IconButtonVariant = 'contained' | 'filled' | 'outlined' | 'text'\nexport type IconButtonSize = 'sm' | 'md' | 'lg'\n\nexport interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {\n /** Visual style. `contained` solid · `filled` soft tint · `outlined` border · `text` bare. */\n variant?: IconButtonVariant\n /** Theme palette token that tints the button. Defaults to `accent`. */\n color?: ThemeColor\n /** Preset size — square: width === height === `--tz-control-height-*` (matches `Button` heights). */\n size?: IconButtonSize\n /** Shows the loader in the icon's place and blocks interaction (also sets the native `disabled`). */\n loading?: boolean\n /** Circular shape instead of the default rounded square. */\n rounded?: boolean\n /** Ignores all interaction (no clicks, hover or focus) while keeping the normal look — unlike `disabled`, it's not dimmed. */\n nonClickable?: boolean\n /** The icon to render — typically an `<Icon />`. Swapped for the loader while `loading`. */\n children?: ReactNode\n}\n\n/**\n * A square, text-less button for a single icon. Shares `Button`'s variants,\n * colors and sizing, but its width equals its height (the matching\n * `--tz-control-height-*`). Pass an `<Icon />` (or any node) as the child;\n * while `loading` it's replaced by the `Loader`. Provide an `aria-label` since\n * there's no visible text.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n {\n variant = 'contained',\n color = 'accent',\n size = 'md',\n loading = false,\n rounded = false,\n disabled = false,\n nonClickable = false,\n className,\n style,\n type = 'button',\n tabIndex,\n children,\n ...props\n },\n ref,\n) {\n // size the icon child to match the button (an explicit icon `size` still wins)\n const icon =\n isValidElement(children) && !loading\n ? cloneElement(children as ReactElement<{ size?: IconButtonSize }>, {\n size: (children.props as { size?: IconButtonSize }).size ?? size,\n })\n : children\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n aria-disabled={nonClickable || undefined}\n tabIndex={nonClickable ? -1 : tabIndex}\n className={clsx(\n styles.iconButton,\n styles[variant],\n styles[size],\n rounded && styles.rounded,\n loading && styles.loading,\n disabled && styles.disabled,\n nonClickable && styles.nonClickable,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {loading ? <Loader size={size} aria-hidden=\"true\" /> : icon}\n </button>\n )\n})\n"],"names":["IconButton","forwardRef","variant","color","size","loading","rounded","disabled","nonClickable","className","style","type","tabIndex","children","props","ref","icon","isValidElement","cloneElement","jsx","clsx","styles","Loader"],"mappings":";;;;;;;;;;;;;;;;;GAyCaA,IAAaC,EAA+C,SACvE;AAAA,EACE,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,cAAAC,IAAe;AAAA,EACf,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AAEA,QAAMC,IACJC,EAAeJ,CAAQ,KAAK,CAACR,IACzBa,EAAaL,GAAqD;AAAA,IAChE,MAAOA,EAAS,MAAoC,QAAQT;AAAA,EAAA,CAC7D,IACDS;AAEN,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAAJ;AAAA,MACA,UAAUJ,KAAYF;AAAA,MACtB,aAAWA,KAAW;AAAA,MACtB,iBAAeG,KAAgB;AAAA,MAC/B,UAAUA,IAAe,KAAKI;AAAA,MAC9B,WAAWQ;AAAA,QACTC,EAAO;AAAA,QACPA,EAAOnB,CAAO;AAAA,QACdmB,EAAOjB,CAAI;AAAA,QACXE,KAAWe,EAAO;AAAA,QAClBhB,KAAWgB,EAAO;AAAA,QAClBd,KAAYc,EAAO;AAAA,QACnBb,KAAgBa,EAAO;AAAA,QACvBZ;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACE,gBAAgB,kBAAkBN,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGO;AAAA,MAAA;AAAA,MAGN,GAAGI;AAAA,MAEH,cAAU,gBAAAK,EAACG,GAAA,EAAO,MAAAlB,GAAY,eAAY,QAAO,IAAKY;AAAA,IAAA;AAAA,EAAA;AAG7D,CAAC;"}
1
+ {"version":3,"file":"IconButton-sC_E_TXd.js","sources":["../src/components/IconButton/IconButton.tsx"],"sourcesContent":["import {\n cloneElement,\n forwardRef,\n isValidElement,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { Loader } from '../Loader'\nimport styles from './IconButton.module.css'\n\nexport type IconButtonVariant = 'contained' | 'filled' | 'outlined' | 'text'\nexport type IconButtonSize = 'sm' | 'md' | 'lg'\n\nexport interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {\n /** Visual style. `contained` solid · `filled` soft tint · `outlined` border · `text` bare. */\n variant?: IconButtonVariant\n /** Theme palette token that tints the button. Defaults to `accent`. */\n color?: ThemeColor\n /** Preset size — square: width === height === `--tz-control-height-*` (matches `Button` heights). */\n size?: IconButtonSize\n /** Shows the loader in the icon's place and blocks interaction (also sets the native `disabled`). */\n loading?: boolean\n /** Circular shape instead of the default rounded square. */\n rounded?: boolean\n /** Ignores all interaction (no clicks, hover or focus) while keeping the normal look — unlike `disabled`, it's not dimmed. */\n nonClickable?: boolean\n /** The icon to render — typically an `<Icon />`. Swapped for the loader while `loading`. */\n children?: ReactNode\n}\n\n/**\n * A square, text-less button for a single icon. Shares `Button`'s variants,\n * colors and sizing, but its width equals its height (the matching\n * `--tz-control-height-*`). Pass an `<Icon />` (or any node) as the child;\n * while `loading` it's replaced by the `Loader`. Provide an `aria-label` since\n * there's no visible text.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n {\n variant = 'contained',\n color = 'accent',\n size = 'md',\n loading = false,\n rounded = false,\n disabled = false,\n nonClickable = false,\n className,\n style,\n type = 'button',\n tabIndex,\n children,\n ...props\n },\n ref,\n) {\n // size the icon child to match the button (an explicit icon `size` still wins)\n const icon =\n isValidElement(children) && !loading\n ? cloneElement(children as ReactElement<{ size?: IconButtonSize }>, {\n size: (children.props as { size?: IconButtonSize }).size ?? size,\n })\n : children\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n aria-disabled={nonClickable || undefined}\n tabIndex={nonClickable ? -1 : tabIndex}\n className={clsx(\n styles.iconButton,\n styles[variant],\n styles[size],\n rounded && styles.rounded,\n loading && styles.loading,\n disabled && styles.disabled,\n nonClickable && styles.nonClickable,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${color}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n {loading ? <Loader size={size} aria-hidden=\"true\" /> : icon}\n </button>\n )\n})\n"],"names":["IconButton","forwardRef","variant","color","size","loading","rounded","disabled","nonClickable","className","style","type","tabIndex","children","props","ref","icon","isValidElement","cloneElement","jsx","clsx","styles","Loader"],"mappings":";;;;;;;;;;;;;;;;;GAyCaA,IAAaC,EAA+C,SACvE;AAAA,EACE,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,cAAAC,IAAe;AAAA,EACf,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AAEA,QAAMC,IACJC,EAAeJ,CAAQ,KAAK,CAACR,IACzBa,EAAaL,GAAqD;AAAA,IAChE,MAAOA,EAAS,MAAoC,QAAQT;AAAA,EAAA,CAC7D,IACDS;AAEN,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,MAAAJ;AAAA,MACA,UAAUJ,KAAYF;AAAA,MACtB,aAAWA,KAAW;AAAA,MACtB,iBAAeG,KAAgB;AAAA,MAC/B,UAAUA,IAAe,KAAKI;AAAA,MAC9B,WAAWQ;AAAA,QACTC,EAAO;AAAA,QACPA,EAAOnB,CAAO;AAAA,QACdmB,EAAOjB,CAAI;AAAA,QACXE,KAAWe,EAAO;AAAA,QAClBhB,KAAWgB,EAAO;AAAA,QAClBd,KAAYc,EAAO;AAAA,QACnBb,KAAgBa,EAAO;AAAA,QACvBZ;AAAA,MAAA;AAAA,MAEF,OACE;AAAA,QACE,gBAAgB,kBAAkBN,CAAK;AAAA,QACvC,eAAe,kBAAkBA,CAAK;AAAA,QACtC,GAAGO;AAAA,MAAA;AAAA,MAGN,GAAGI;AAAA,MAEH,cAAU,gBAAAK,EAACG,GAAA,EAAO,MAAAlB,GAAY,eAAY,QAAO,IAAKY;AAAA,IAAA;AAAA,EAAA;AAG7D,CAAC;"}
@@ -0,0 +1,38 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { forwardRef as v, useMemo as y } from "react";
3
+ import { s as n } from "./Flex-BFn4P1tJ.js";
4
+ import { S as o } from "./Skeleton-_-uGax2j.js";
5
+ import { a as w, L as b } from "./ListItem-ehFB7TUW.js";
6
+ const I = v(function({ as: m, gap: a = 2, padding: c, role: p = "list", size: i, flush: s, loading: e = !1, style: f, children: d, ...l }, h) {
7
+ const u = m ?? "div", x = y(() => ({ size: i, flush: s }), [i, s]), L = typeof e == "number" ? e : e ? 3 : 0;
8
+ return /* @__PURE__ */ t(
9
+ u,
10
+ {
11
+ ref: h,
12
+ role: p,
13
+ "aria-busy": e ? !0 : void 0,
14
+ style: {
15
+ display: "flex",
16
+ flexDirection: "column",
17
+ gap: n(a),
18
+ padding: n(c),
19
+ ...f
20
+ },
21
+ ...l,
22
+ children: /* @__PURE__ */ t(w.Provider, { value: x, children: e ? Array.from({ length: L }, (C, r) => /* @__PURE__ */ t(
23
+ b,
24
+ {
25
+ "aria-hidden": "true",
26
+ icon: /* @__PURE__ */ t(o, { variant: "circle", height: "1.25em" }),
27
+ description: /* @__PURE__ */ t(o, { width: r % 2 ? "45%" : "60%" }),
28
+ children: /* @__PURE__ */ t(o, { width: r % 2 ? "30%" : "40%" })
29
+ },
30
+ r
31
+ )) : d })
32
+ }
33
+ );
34
+ });
35
+ export {
36
+ I as L
37
+ };
38
+ //# sourceMappingURL=List-CXHlAI5w.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List-CXHlAI5w.js","sources":["../src/components/List/List.tsx"],"sourcesContent":["import {\n forwardRef,\n useMemo,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { space, type Spacing } from '../Flex/Flex'\nimport { Skeleton } from '../Skeleton'\nimport { ListContext } from './listContext'\nimport { ListItem, type ListItemSize } from './ListItem'\n\nexport interface ListProps extends HTMLAttributes<HTMLElement> {\n /** Render a different element — e.g. `'ul'`, `'nav'`, `'menu'`. Defaults to `div`. */\n as?: ElementType\n /** Gap between items (token key, px number, or CSS value). Defaults to `2px`. */\n gap?: Spacing\n /** Padding around the list (token key, px number, or CSS value). */\n padding?: Spacing\n /** Default size for the contained `ListItem`s — each item can still override its own `size`. */\n size?: ListItemSize\n /**\n * Default `flush` for the contained `ListItem`s — drops their left / right padding so rows sit flush with\n * the list's edges (e.g. inside a padded `Card`). Each item can still override its own `flush`.\n */\n flush?: boolean\n /**\n * Render skeleton rows instead of `children` — `true` shows 3, a number sets the count. Each row is a\n * `ListItem` with an icon disc, a label line and a description line. Defaults to `false`.\n */\n loading?: boolean | number\n children?: ReactNode\n}\n\n/**\n * A thin semantic container for `ListItem`s — a vertical stack with a configurable `gap`/`padding`\n * and `role=\"list\"` (override `role` to `\"menu\"` for a dropdown, etc.). `size` and `flush` set defaults\n * for all contained `ListItem`s (an explicit item prop wins). `loading` swaps the items for skeleton rows. Layout is set via inline style, matching the `Flex`/`Grid` primitives.\n */\nexport const List = forwardRef<HTMLElement, ListProps>(function List(\n { as, gap = 2, padding, role = 'list', size, flush, loading = false, style, children, ...props },\n ref,\n) {\n const Component = (as ?? 'div') as ElementType\n // one stable object per (size, flush) so items don't re-render on every List render\n const ctx = useMemo(() => ({ size, flush }), [size, flush])\n const skeletonRows = typeof loading === 'number' ? loading : loading ? 3 : 0\n return (\n <Component\n ref={ref}\n role={role}\n aria-busy={loading ? true : undefined}\n style={\n {\n display: 'flex',\n flexDirection: 'column',\n gap: space(gap),\n padding: space(padding),\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n <ListContext.Provider value={ctx}>\n {loading\n ? Array.from({ length: skeletonRows }, (_, i) => (\n <ListItem\n key={i}\n aria-hidden=\"true\"\n icon={<Skeleton variant=\"circle\" height=\"1.25em\" />}\n description={<Skeleton width={i % 2 ? '45%' : '60%'} />}\n >\n <Skeleton width={i % 2 ? '30%' : '40%'} />\n </ListItem>\n ))\n : children}\n </ListContext.Provider>\n </Component>\n )\n})\n"],"names":["List","forwardRef","as","gap","padding","role","size","flush","loading","style","children","props","ref","Component","ctx","useMemo","skeletonRows","jsx","space","ListContext","_","i","ListItem","Skeleton"],"mappings":";;;;;AAwCO,MAAMA,IAAOC,EAAmC,SACrD,EAAE,IAAAC,GAAI,KAAAC,IAAM,GAAG,SAAAC,GAAS,MAAAC,IAAO,QAAQ,MAAAC,GAAM,OAAAC,GAAO,SAAAC,IAAU,IAAO,OAAAC,GAAO,UAAAC,GAAU,GAAGC,EAAA,GACzFC,GACA;AACA,QAAMC,IAAaX,KAAM,OAEnBY,IAAMC,EAAQ,OAAO,EAAE,MAAAT,GAAM,OAAAC,MAAU,CAACD,GAAMC,CAAK,CAAC,GACpDS,IAAe,OAAOR,KAAY,WAAWA,IAAUA,IAAU,IAAI;AAC3E,SACE,gBAAAS;AAAA,IAACJ;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAAP;AAAA,MACA,aAAWG,IAAU,KAAO;AAAA,MAC5B,OACE;AAAA,QACE,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAKU,EAAMf,CAAG;AAAA,QACd,SAASe,EAAMd,CAAO;AAAA,QACtB,GAAGK;AAAA,MAAA;AAAA,MAGN,GAAGE;AAAA,MAEJ,UAAA,gBAAAM,EAACE,EAAY,UAAZ,EAAqB,OAAOL,GAC1B,UAAAN,IACG,MAAM,KAAK,EAAE,QAAQQ,EAAA,GAAgB,CAACI,GAAGC,MACvC,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UAEC,eAAY;AAAA,UACZ,MAAM,gBAAAL,EAACM,GAAA,EAAS,SAAQ,UAAS,QAAO,UAAS;AAAA,UACjD,aAAa,gBAAAN,EAACM,GAAA,EAAS,OAAOF,IAAI,IAAI,QAAQ,OAAO;AAAA,UAErD,4BAACE,GAAA,EAAS,OAAOF,IAAI,IAAI,QAAQ,MAAA,CAAO;AAAA,QAAA;AAAA,QALnCA;AAAA,MAAA,CAOR,IACDX,EAAA,CACN;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),o=require("react"),c=require("./Flex-C6tHC8n7.cjs"),s=require("./Skeleton-DK0lAjS9.cjs"),u=require("./ListItem-CUeIBhOF.cjs"),q=o.forwardRef(function({as:l,gap:a=2,padding:x,role:d="list",size:i,flush:n,loading:t=!1,style:m,children:h,...p},f){const j=l??"div",L=o.useMemo(()=>({size:i,flush:n}),[i,n]),k=typeof t=="number"?t:t?3:0;return e.jsx(j,{ref:f,role:d,"aria-busy":t?!0:void 0,style:{display:"flex",flexDirection:"column",gap:c.space(a),padding:c.space(x),...m},...p,children:e.jsx(u.ListContext.Provider,{value:L,children:t?Array.from({length:k},(y,r)=>e.jsx(u.ListItem,{"aria-hidden":"true",icon:e.jsx(s.Skeleton,{variant:"circle",height:"1.25em"}),description:e.jsx(s.Skeleton,{width:r%2?"45%":"60%"}),children:e.jsx(s.Skeleton,{width:r%2?"30%":"40%"})},r)):h})})});exports.List=q;
2
+ //# sourceMappingURL=List-DOsh6w-d.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List-DOsh6w-d.cjs","sources":["../src/components/List/List.tsx"],"sourcesContent":["import {\n forwardRef,\n useMemo,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { space, type Spacing } from '../Flex/Flex'\nimport { Skeleton } from '../Skeleton'\nimport { ListContext } from './listContext'\nimport { ListItem, type ListItemSize } from './ListItem'\n\nexport interface ListProps extends HTMLAttributes<HTMLElement> {\n /** Render a different element — e.g. `'ul'`, `'nav'`, `'menu'`. Defaults to `div`. */\n as?: ElementType\n /** Gap between items (token key, px number, or CSS value). Defaults to `2px`. */\n gap?: Spacing\n /** Padding around the list (token key, px number, or CSS value). */\n padding?: Spacing\n /** Default size for the contained `ListItem`s — each item can still override its own `size`. */\n size?: ListItemSize\n /**\n * Default `flush` for the contained `ListItem`s — drops their left / right padding so rows sit flush with\n * the list's edges (e.g. inside a padded `Card`). Each item can still override its own `flush`.\n */\n flush?: boolean\n /**\n * Render skeleton rows instead of `children` — `true` shows 3, a number sets the count. Each row is a\n * `ListItem` with an icon disc, a label line and a description line. Defaults to `false`.\n */\n loading?: boolean | number\n children?: ReactNode\n}\n\n/**\n * A thin semantic container for `ListItem`s — a vertical stack with a configurable `gap`/`padding`\n * and `role=\"list\"` (override `role` to `\"menu\"` for a dropdown, etc.). `size` and `flush` set defaults\n * for all contained `ListItem`s (an explicit item prop wins). `loading` swaps the items for skeleton rows. Layout is set via inline style, matching the `Flex`/`Grid` primitives.\n */\nexport const List = forwardRef<HTMLElement, ListProps>(function List(\n { as, gap = 2, padding, role = 'list', size, flush, loading = false, style, children, ...props },\n ref,\n) {\n const Component = (as ?? 'div') as ElementType\n // one stable object per (size, flush) so items don't re-render on every List render\n const ctx = useMemo(() => ({ size, flush }), [size, flush])\n const skeletonRows = typeof loading === 'number' ? loading : loading ? 3 : 0\n return (\n <Component\n ref={ref}\n role={role}\n aria-busy={loading ? true : undefined}\n style={\n {\n display: 'flex',\n flexDirection: 'column',\n gap: space(gap),\n padding: space(padding),\n ...style,\n } as CSSProperties\n }\n {...props}\n >\n <ListContext.Provider value={ctx}>\n {loading\n ? Array.from({ length: skeletonRows }, (_, i) => (\n <ListItem\n key={i}\n aria-hidden=\"true\"\n icon={<Skeleton variant=\"circle\" height=\"1.25em\" />}\n description={<Skeleton width={i % 2 ? '45%' : '60%'} />}\n >\n <Skeleton width={i % 2 ? '30%' : '40%'} />\n </ListItem>\n ))\n : children}\n </ListContext.Provider>\n </Component>\n )\n})\n"],"names":["List","forwardRef","as","gap","padding","role","size","flush","loading","style","children","props","ref","Component","ctx","useMemo","skeletonRows","jsx","space","ListContext","_","i","ListItem","Skeleton"],"mappings":"gLAwCaA,EAAOC,EAAAA,WAAmC,SACrD,CAAE,GAAAC,EAAI,IAAAC,EAAM,EAAG,QAAAC,EAAS,KAAAC,EAAO,OAAQ,KAAAC,EAAM,MAAAC,EAAO,QAAAC,EAAU,GAAO,MAAAC,EAAO,SAAAC,EAAU,GAAGC,CAAA,EACzFC,EACA,CACA,MAAMC,EAAaX,GAAM,MAEnBY,EAAMC,UAAQ,KAAO,CAAE,KAAAT,EAAM,MAAAC,IAAU,CAACD,EAAMC,CAAK,CAAC,EACpDS,EAAe,OAAOR,GAAY,SAAWA,EAAUA,EAAU,EAAI,EAC3E,OACES,EAAAA,IAACJ,EAAA,CACC,IAAAD,EACA,KAAAP,EACA,YAAWG,EAAU,GAAO,OAC5B,MACE,CACE,QAAS,OACT,cAAe,SACf,IAAKU,EAAAA,MAAMf,CAAG,EACd,QAASe,EAAAA,MAAMd,CAAO,EACtB,GAAGK,CAAA,EAGN,GAAGE,EAEJ,SAAAM,EAAAA,IAACE,cAAY,SAAZ,CAAqB,MAAOL,EAC1B,SAAAN,EACG,MAAM,KAAK,CAAE,OAAQQ,CAAA,EAAgB,CAACI,EAAGC,IACvCJ,EAAAA,IAACK,EAAAA,SAAA,CAEC,cAAY,OACZ,KAAML,EAAAA,IAACM,WAAA,CAAS,QAAQ,SAAS,OAAO,SAAS,EACjD,YAAaN,EAAAA,IAACM,EAAAA,SAAA,CAAS,MAAOF,EAAI,EAAI,MAAQ,MAAO,EAErD,eAACE,EAAAA,SAAA,CAAS,MAAOF,EAAI,EAAI,MAAQ,KAAA,CAAO,CAAA,EALnCA,CAAA,CAOR,EACDX,CAAA,CACN,CAAA,CAAA,CAGN,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),_=require("react"),q=require("clsx"),v=require("./Icon-BUP5_kRs.cjs"),y=require("./names-YOCJ4B5J.cjs"),b=_.createContext({}),E=()=>_.useContext(b),O="_item_16twt_3",S="_sm_16twt_25",D="_md_16twt_31",A="_lg_16twt_36",M="_flush_16twt_43",R="_itemIcon_16twt_49",B="_itemText_16twt_57",Z="_itemLabel_16twt_65",$="_itemDescription_16twt_72",F="_itemTrailing_16twt_82",G="_clickable_16twt_92",H="_selected_16twt_109",J="_disabled_16twt_130",t={item:O,sm:S,md:D,lg:A,flush:M,itemIcon:R,itemText:B,itemLabel:Z,itemDescription:$,itemTrailing:F,clickable:G,selected:H,disabled:J},P=new Set(y.ICON_NAMES),Q={sm:"sm",md:"md",lg:"md"},U=_.forwardRef(function({icon:s,description:o,trailing:u,selected:d=!1,clickable:m=!1,disabled:n=!1,size:h,flush:w,color:p="primary",as:i,className:g,style:C,children:a,onClick:N,onKeyDown:l,...L},T){const x=E(),f=h??x.size??"md",j=w??x.flush??!1,k=i??"div",r=m&&!(i==="a"||i==="button"||typeof i=="function"||typeof i=="object"),I=s==null?null:typeof s=="string"&&P.has(s)?e.jsx(v.Icon,{name:s,size:Q[f]}):s,z=c=>{r&&!n&&(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),c.currentTarget.click()),l==null||l(c)};return e.jsxs(k,{ref:T,className:q.clsx(t.item,t[f],j&&t.flush,d&&t.selected,m&&t.clickable,n&&t.disabled,g),style:{"--tz-btn-rgb":`var(--tz-color-${p}-rgb)`,...C},role:r?"button":void 0,tabIndex:r?n?-1:0:void 0,"aria-disabled":n||void 0,"aria-current":d||void 0,onClick:n?void 0:N,onKeyDown:m?z:l,...L,children:[I!=null&&e.jsx("span",{className:t.itemIcon,children:I}),(a!=null||o!=null)&&e.jsxs("span",{className:t.itemText,children:[a!=null&&e.jsx("span",{className:t.itemLabel,children:a}),o!=null&&e.jsx("span",{className:t.itemDescription,children:o})]}),u!=null&&e.jsx("span",{className:t.itemTrailing,children:u})]})});exports.ListContext=b;exports.ListItem=U;
2
+ //# sourceMappingURL=ListItem-CUeIBhOF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem-CUeIBhOF.cjs","sources":["../src/components/List/listContext.ts","../src/components/List/ListItem.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ListItemSize } from './ListItem'\n\n/** Defaults a `List` hands to its `ListItem`s — an explicit item prop still wins. */\nexport interface ListContextValue {\n size?: ListItemSize\n flush?: boolean\n}\n\nexport const ListContext = createContext<ListContextValue>({})\n\n/** Read the defaults provided by a surrounding `List`, if any. */\nexport const useListContext = (): ListContextValue => useContext(ListContext)\n\n/** @deprecated internal — use `useListContext().size`. Kept so older call sites keep compiling. */\nexport const useListSize = (): ListItemSize | undefined => useListContext().size\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useListContext } from './listContext'\nimport styles from './List.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ListItemSize = 'sm' | 'md' | 'lg'\n\n/** Leading `<Icon>` size per row size. */\nconst ICON_SIZE: Record<ListItemSize, 'sm' | 'md'> = { sm: 'sm', md: 'md', lg: 'md' }\n\nexport interface ListItemProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'color'>,\n Pick<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'target' | 'rel' | 'download'> {\n /** Leading element — a known `IconName` (rendered as `<Icon>`) or any node (e.g. an `Avatar`). */\n icon?: IconName | ReactNode\n /** Secondary muted line shown under the label. */\n description?: ReactNode\n /** Trailing content pinned to the right (icon, `Badge`, shortcut text, chevron, …). */\n trailing?: ReactNode\n /** Highlights the row as selected/active (menu selection, current nav route). */\n selected?: boolean\n /** Makes the row interactive (hover + cursor; adds `role`/`tabIndex`/keyboard when rendered plain). */\n clickable?: boolean\n /** Dims and inerts the row. */\n disabled?: boolean\n /** Row size — height / padding / font. Defaults to `md`. */\n size?: ListItemSize\n /**\n * Drops the row's left / right padding so it sits flush with its container's edges (vertical padding\n * and min-height stay). Defaults to `false`; a surrounding `List flush` sets the default for all its rows.\n */\n flush?: boolean\n /** Theme color for the selected tint and clickable hover. Defaults to `primary`. */\n color?: ThemeColor\n /** Render a different element/component — e.g. `'a'`, `'button'`, or a router `Link`. Defaults to `div`. */\n as?: ElementType\n /** Primary label / content. */\n children?: ReactNode\n}\n\n/**\n * A flexible, reusable list row: leading `icon`, a label (`children`) with optional `description`, and\n * a `trailing` slot. `clickable` turns it interactive (hover + keyboard when rendered as a plain\n * element), `selected` highlights it, `disabled` inerts it. Render as a link/button/router `Link` via\n * `as`. Designed to compose inside `List` — for menus, the sidebar, or a standalone styled list.\n */\nexport const ListItem = forwardRef<HTMLElement, ListItemProps>(function ListItem(\n {\n icon,\n description,\n trailing,\n selected = false,\n clickable = false,\n disabled = false,\n size: sizeProp,\n flush: flushProp,\n color = 'primary',\n as,\n className,\n style,\n children,\n onClick,\n onKeyDown,\n ...props\n },\n ref,\n) {\n // explicit props win; otherwise inherit the surrounding `List`'s defaults (size falls back to `md`)\n const listCtx = useListContext()\n const size = sizeProp ?? listCtx.size ?? 'md'\n const flush = flushProp ?? listCtx.flush ?? false\n const Component = (as ?? 'div') as ElementType\n // Anchors, buttons, and custom components (e.g. a router Link) carry their own click + keyboard\n // semantics — only a plain element needs the button role/tabIndex/Enter-Space shim.\n const handlesOwnInteraction =\n as === 'a' || as === 'button' || typeof as === 'function' || typeof as === 'object'\n const isDivButton = clickable && !handlesOwnInteraction\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={ICON_SIZE[size]} />\n ) : (\n icon\n )\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (isDivButton && !disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n event.currentTarget.click()\n }\n onKeyDown?.(event)\n }\n\n return (\n <Component\n ref={ref}\n className={clsx(\n styles.item,\n styles[size],\n flush && styles.flush,\n selected && styles.selected,\n clickable && styles.clickable,\n disabled && styles.disabled,\n className,\n )}\n style={{ '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`, ...style } as CSSProperties}\n role={isDivButton ? 'button' : undefined}\n tabIndex={isDivButton ? (disabled ? -1 : 0) : undefined}\n aria-disabled={disabled || undefined}\n aria-current={selected || undefined}\n onClick={disabled ? undefined : onClick}\n onKeyDown={clickable ? handleKeyDown : onKeyDown}\n {...props}\n >\n {renderedIcon != null && <span className={styles.itemIcon}>{renderedIcon}</span>}\n {(children != null || description != null) && (\n <span className={styles.itemText}>\n {children != null && <span className={styles.itemLabel}>{children}</span>}\n {description != null && <span className={styles.itemDescription}>{description}</span>}\n </span>\n )}\n {trailing != null && <span className={styles.itemTrailing}>{trailing}</span>}\n </Component>\n )\n})\n"],"names":["ListContext","createContext","useListContext","useContext","ICON_NAME_SET","ICON_NAMES","ICON_SIZE","ListItem","forwardRef","icon","description","trailing","selected","clickable","disabled","sizeProp","flushProp","color","as","className","style","children","onClick","onKeyDown","props","ref","listCtx","size","flush","Component","isDivButton","renderedIcon","jsx","Icon","handleKeyDown","event","jsxs","clsx","styles"],"mappings":"0JASaA,EAAcC,EAAAA,cAAgC,CAAA,CAAE,EAGhDC,EAAiB,IAAwBC,EAAAA,WAAWH,CAAW,yaCItEI,EAAgB,IAAI,IAAYC,YAAU,EAK1CC,EAA+C,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,IAAA,EAuClEC,EAAWC,EAAAA,WAAuC,SAC7D,CACE,KAAAC,EACA,YAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EAAY,GACZ,SAAAC,EAAW,GACX,KAAMC,EACN,MAAOC,EACP,MAAAC,EAAQ,UACR,GAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,UAAAC,EACA,GAAGC,CACL,EACAC,EACA,CAEA,MAAMC,EAAUxB,EAAA,EACVyB,EAAOZ,GAAYW,EAAQ,MAAQ,KACnCE,EAAQZ,GAAaU,EAAQ,OAAS,GACtCG,EAAaX,GAAM,MAKnBY,EAAcjB,GAAa,EAD/BK,IAAO,KAAOA,IAAO,UAAY,OAAOA,GAAO,YAAc,OAAOA,GAAO,UAGvEa,EACJtB,GAAQ,KAAO,KAAO,OAAOA,GAAS,UAAYL,EAAc,IAAIK,CAAI,EACtEuB,MAACC,EAAAA,MAAK,KAAMxB,EAAkB,KAAMH,EAAUqB,CAAI,EAAG,EAErDlB,EAGEyB,EAAiBC,GAAsC,CACvDL,GAAe,CAAChB,IAAaqB,EAAM,MAAQ,SAAWA,EAAM,MAAQ,OACtEA,EAAM,eAAA,EACNA,EAAM,cAAc,MAAA,GAEtBZ,GAAA,MAAAA,EAAYY,EACd,EAEA,OACEC,EAAAA,KAACP,EAAA,CACC,IAAAJ,EACA,UAAWY,EAAAA,KACTC,EAAO,KACPA,EAAOX,CAAI,EACXC,GAASU,EAAO,MAChB1B,GAAY0B,EAAO,SACnBzB,GAAayB,EAAO,UACpBxB,GAAYwB,EAAO,SACnBnB,CAAA,EAEF,MAAO,CAAE,eAAgB,kBAAkBF,CAAK,QAAS,GAAGG,CAAA,EAC5D,KAAMU,EAAc,SAAW,OAC/B,SAAUA,EAAehB,EAAW,GAAK,EAAK,OAC9C,gBAAeA,GAAY,OAC3B,eAAcF,GAAY,OAC1B,QAASE,EAAW,OAAYQ,EAChC,UAAWT,EAAYqB,EAAgBX,EACtC,GAAGC,EAEH,SAAA,CAAAO,GAAgB,MAAQC,EAAAA,IAAC,OAAA,CAAK,UAAWM,EAAO,SAAW,SAAAP,EAAa,GACvEV,GAAY,MAAQX,GAAe,cAClC,OAAA,CAAK,UAAW4B,EAAO,SACrB,SAAA,CAAAjB,GAAY,MAAQW,EAAAA,IAAC,OAAA,CAAK,UAAWM,EAAO,UAAY,SAAAjB,EAAS,EACjEX,GAAe,MAAQsB,EAAAA,IAAC,QAAK,UAAWM,EAAO,gBAAkB,SAAA5B,CAAA,CAAY,CAAA,EAChF,EAEDC,GAAY,MAAQqB,EAAAA,IAAC,QAAK,UAAWM,EAAO,aAAe,SAAA3B,CAAA,CAAS,CAAA,CAAA,CAAA,CAG3E,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { jsx as l, jsxs as I } from "react/jsx-runtime";
2
+ import { createContext as v, useContext as y, forwardRef as E } from "react";
3
+ import { clsx as O } from "clsx";
4
+ import { I as S } from "./Icon-CGQ5yGSZ.js";
5
+ import { a as j } from "./names-BR1uJs0-.js";
6
+ const D = v({}), A = () => y(D), M = "_item_16twt_3", B = "_sm_16twt_25", R = "_md_16twt_31", Z = "_lg_16twt_36", $ = "_flush_16twt_43", q = "_itemIcon_16twt_49", F = "_itemText_16twt_57", G = "_itemLabel_16twt_65", H = "_itemDescription_16twt_72", J = "_itemTrailing_16twt_82", P = "_clickable_16twt_92", Q = "_selected_16twt_109", U = "_disabled_16twt_130", t = {
7
+ item: M,
8
+ sm: B,
9
+ md: R,
10
+ lg: Z,
11
+ flush: $,
12
+ itemIcon: q,
13
+ itemText: F,
14
+ itemLabel: G,
15
+ itemDescription: H,
16
+ itemTrailing: J,
17
+ clickable: P,
18
+ selected: Q,
19
+ disabled: U
20
+ }, V = new Set(j), W = { sm: "sm", md: "md", lg: "md" }, it = E(function({
21
+ icon: e,
22
+ description: c,
23
+ trailing: _,
24
+ selected: d = !1,
25
+ clickable: m = !1,
26
+ disabled: s = !1,
27
+ size: b,
28
+ flush: h,
29
+ color: w = "primary",
30
+ as: n,
31
+ className: x,
32
+ style: g,
33
+ children: a,
34
+ onClick: N,
35
+ onKeyDown: o,
36
+ ...C
37
+ }, T) {
38
+ const u = A(), f = b ?? u.size ?? "md", L = h ?? u.flush ?? !1, k = n ?? "div", r = m && !(n === "a" || n === "button" || typeof n == "function" || typeof n == "object"), p = e == null ? null : typeof e == "string" && V.has(e) ? /* @__PURE__ */ l(S, { name: e, size: W[f] }) : e, z = (i) => {
39
+ r && !s && (i.key === "Enter" || i.key === " ") && (i.preventDefault(), i.currentTarget.click()), o == null || o(i);
40
+ };
41
+ return /* @__PURE__ */ I(
42
+ k,
43
+ {
44
+ ref: T,
45
+ className: O(
46
+ t.item,
47
+ t[f],
48
+ L && t.flush,
49
+ d && t.selected,
50
+ m && t.clickable,
51
+ s && t.disabled,
52
+ x
53
+ ),
54
+ style: { "--tz-btn-rgb": `var(--tz-color-${w}-rgb)`, ...g },
55
+ role: r ? "button" : void 0,
56
+ tabIndex: r ? s ? -1 : 0 : void 0,
57
+ "aria-disabled": s || void 0,
58
+ "aria-current": d || void 0,
59
+ onClick: s ? void 0 : N,
60
+ onKeyDown: m ? z : o,
61
+ ...C,
62
+ children: [
63
+ p != null && /* @__PURE__ */ l("span", { className: t.itemIcon, children: p }),
64
+ (a != null || c != null) && /* @__PURE__ */ I("span", { className: t.itemText, children: [
65
+ a != null && /* @__PURE__ */ l("span", { className: t.itemLabel, children: a }),
66
+ c != null && /* @__PURE__ */ l("span", { className: t.itemDescription, children: c })
67
+ ] }),
68
+ _ != null && /* @__PURE__ */ l("span", { className: t.itemTrailing, children: _ })
69
+ ]
70
+ }
71
+ );
72
+ });
73
+ export {
74
+ it as L,
75
+ D as a
76
+ };
77
+ //# sourceMappingURL=ListItem-ehFB7TUW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem-ehFB7TUW.js","sources":["../src/components/List/listContext.ts","../src/components/List/ListItem.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ListItemSize } from './ListItem'\n\n/** Defaults a `List` hands to its `ListItem`s — an explicit item prop still wins. */\nexport interface ListContextValue {\n size?: ListItemSize\n flush?: boolean\n}\n\nexport const ListContext = createContext<ListContextValue>({})\n\n/** Read the defaults provided by a surrounding `List`, if any. */\nexport const useListContext = (): ListContextValue => useContext(ListContext)\n\n/** @deprecated internal — use `useListContext().size`. Kept so older call sites keep compiling. */\nexport const useListSize = (): ListItemSize | undefined => useListContext().size\n","import {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ElementType,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { Icon } from '../Icon'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { useListContext } from './listContext'\nimport styles from './List.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ListItemSize = 'sm' | 'md' | 'lg'\n\n/** Leading `<Icon>` size per row size. */\nconst ICON_SIZE: Record<ListItemSize, 'sm' | 'md'> = { sm: 'sm', md: 'md', lg: 'md' }\n\nexport interface ListItemProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'color'>,\n Pick<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'target' | 'rel' | 'download'> {\n /** Leading element — a known `IconName` (rendered as `<Icon>`) or any node (e.g. an `Avatar`). */\n icon?: IconName | ReactNode\n /** Secondary muted line shown under the label. */\n description?: ReactNode\n /** Trailing content pinned to the right (icon, `Badge`, shortcut text, chevron, …). */\n trailing?: ReactNode\n /** Highlights the row as selected/active (menu selection, current nav route). */\n selected?: boolean\n /** Makes the row interactive (hover + cursor; adds `role`/`tabIndex`/keyboard when rendered plain). */\n clickable?: boolean\n /** Dims and inerts the row. */\n disabled?: boolean\n /** Row size — height / padding / font. Defaults to `md`. */\n size?: ListItemSize\n /**\n * Drops the row's left / right padding so it sits flush with its container's edges (vertical padding\n * and min-height stay). Defaults to `false`; a surrounding `List flush` sets the default for all its rows.\n */\n flush?: boolean\n /** Theme color for the selected tint and clickable hover. Defaults to `primary`. */\n color?: ThemeColor\n /** Render a different element/component — e.g. `'a'`, `'button'`, or a router `Link`. Defaults to `div`. */\n as?: ElementType\n /** Primary label / content. */\n children?: ReactNode\n}\n\n/**\n * A flexible, reusable list row: leading `icon`, a label (`children`) with optional `description`, and\n * a `trailing` slot. `clickable` turns it interactive (hover + keyboard when rendered as a plain\n * element), `selected` highlights it, `disabled` inerts it. Render as a link/button/router `Link` via\n * `as`. Designed to compose inside `List` — for menus, the sidebar, or a standalone styled list.\n */\nexport const ListItem = forwardRef<HTMLElement, ListItemProps>(function ListItem(\n {\n icon,\n description,\n trailing,\n selected = false,\n clickable = false,\n disabled = false,\n size: sizeProp,\n flush: flushProp,\n color = 'primary',\n as,\n className,\n style,\n children,\n onClick,\n onKeyDown,\n ...props\n },\n ref,\n) {\n // explicit props win; otherwise inherit the surrounding `List`'s defaults (size falls back to `md`)\n const listCtx = useListContext()\n const size = sizeProp ?? listCtx.size ?? 'md'\n const flush = flushProp ?? listCtx.flush ?? false\n const Component = (as ?? 'div') as ElementType\n // Anchors, buttons, and custom components (e.g. a router Link) carry their own click + keyboard\n // semantics — only a plain element needs the button role/tabIndex/Enter-Space shim.\n const handlesOwnInteraction =\n as === 'a' || as === 'button' || typeof as === 'function' || typeof as === 'object'\n const isDivButton = clickable && !handlesOwnInteraction\n\n const renderedIcon =\n icon == null ? null : typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={ICON_SIZE[size]} />\n ) : (\n icon\n )\n\n const handleKeyDown = (event: KeyboardEvent<HTMLElement>) => {\n if (isDivButton && !disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n event.currentTarget.click()\n }\n onKeyDown?.(event)\n }\n\n return (\n <Component\n ref={ref}\n className={clsx(\n styles.item,\n styles[size],\n flush && styles.flush,\n selected && styles.selected,\n clickable && styles.clickable,\n disabled && styles.disabled,\n className,\n )}\n style={{ '--tz-btn-rgb': `var(--tz-color-${color}-rgb)`, ...style } as CSSProperties}\n role={isDivButton ? 'button' : undefined}\n tabIndex={isDivButton ? (disabled ? -1 : 0) : undefined}\n aria-disabled={disabled || undefined}\n aria-current={selected || undefined}\n onClick={disabled ? undefined : onClick}\n onKeyDown={clickable ? handleKeyDown : onKeyDown}\n {...props}\n >\n {renderedIcon != null && <span className={styles.itemIcon}>{renderedIcon}</span>}\n {(children != null || description != null) && (\n <span className={styles.itemText}>\n {children != null && <span className={styles.itemLabel}>{children}</span>}\n {description != null && <span className={styles.itemDescription}>{description}</span>}\n </span>\n )}\n {trailing != null && <span className={styles.itemTrailing}>{trailing}</span>}\n </Component>\n )\n})\n"],"names":["ListContext","createContext","useListContext","useContext","ICON_NAME_SET","ICON_NAMES","ICON_SIZE","ListItem","forwardRef","icon","description","trailing","selected","clickable","disabled","sizeProp","flushProp","color","as","className","style","children","onClick","onKeyDown","props","ref","listCtx","size","flush","Component","isDivButton","renderedIcon","jsx","Icon","handleKeyDown","event","jsxs","clsx","styles"],"mappings":";;;;;AASO,MAAMA,IAAcC,EAAgC,CAAA,CAAE,GAGhDC,IAAiB,MAAwBC,EAAWH,CAAW;;;;;;;;;;;;;;GCItEI,IAAgB,IAAI,IAAYC,CAAU,GAK1CC,IAA+C,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,KAAA,GAuClEC,KAAWC,EAAuC,SAC7D;AAAA,EACE,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,MAAMC;AAAA,EACN,OAAOC;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,IAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AAEA,QAAMC,IAAUxB,EAAA,GACVyB,IAAOZ,KAAYW,EAAQ,QAAQ,MACnCE,IAAQZ,KAAaU,EAAQ,SAAS,IACtCG,IAAaX,KAAM,OAKnBY,IAAcjB,KAAa,EAD/BK,MAAO,OAAOA,MAAO,YAAY,OAAOA,KAAO,cAAc,OAAOA,KAAO,WAGvEa,IACJtB,KAAQ,OAAO,OAAO,OAAOA,KAAS,YAAYL,EAAc,IAAIK,CAAI,IACtE,gBAAAuB,EAACC,KAAK,MAAMxB,GAAkB,MAAMH,EAAUqB,CAAI,GAAG,IAErDlB,GAGEyB,IAAgB,CAACC,MAAsC;AAC3D,IAAIL,KAAe,CAAChB,MAAaqB,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACtEA,EAAM,eAAA,GACNA,EAAM,cAAc,MAAA,IAEtBZ,KAAA,QAAAA,EAAYY;AAAA,EACd;AAEA,SACE,gBAAAC;AAAA,IAACP;AAAA,IAAA;AAAA,MACC,KAAAJ;AAAA,MACA,WAAWY;AAAA,QACTC,EAAO;AAAA,QACPA,EAAOX,CAAI;AAAA,QACXC,KAASU,EAAO;AAAA,QAChB1B,KAAY0B,EAAO;AAAA,QACnBzB,KAAayB,EAAO;AAAA,QACpBxB,KAAYwB,EAAO;AAAA,QACnBnB;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,gBAAgB,kBAAkBF,CAAK,SAAS,GAAGG,EAAA;AAAA,MAC5D,MAAMU,IAAc,WAAW;AAAA,MAC/B,UAAUA,IAAehB,IAAW,KAAK,IAAK;AAAA,MAC9C,iBAAeA,KAAY;AAAA,MAC3B,gBAAcF,KAAY;AAAA,MAC1B,SAASE,IAAW,SAAYQ;AAAA,MAChC,WAAWT,IAAYqB,IAAgBX;AAAA,MACtC,GAAGC;AAAA,MAEH,UAAA;AAAA,QAAAO,KAAgB,QAAQ,gBAAAC,EAAC,QAAA,EAAK,WAAWM,EAAO,UAAW,UAAAP,GAAa;AAAA,SACvEV,KAAY,QAAQX,KAAe,2BAClC,QAAA,EAAK,WAAW4B,EAAO,UACrB,UAAA;AAAA,UAAAjB,KAAY,QAAQ,gBAAAW,EAAC,QAAA,EAAK,WAAWM,EAAO,WAAY,UAAAjB,GAAS;AAAA,UACjEX,KAAe,QAAQ,gBAAAsB,EAAC,UAAK,WAAWM,EAAO,iBAAkB,UAAA5B,EAAA,CAAY;AAAA,QAAA,GAChF;AAAA,QAEDC,KAAY,QAAQ,gBAAAqB,EAAC,UAAK,WAAWM,EAAO,cAAe,UAAA3B,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG3E,CAAC;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
2
  import { forwardRef as _ } from "react";
3
3
  import { clsx as d } from "clsx";
4
- import { a as n } from "./ConfigProvider-Ct0Pe3Ku.js";
4
+ import { a as n } from "./ConfigProvider-tvLbKiqu.js";
5
5
  const c = "_loader_166pp_2", i = "_sm_166pp_18", f = "_md_166pp_24", u = "_lg_166pp_30", s = {
6
6
  loader: c,
7
7
  "tz-loader-spin": "_tz-loader-spin_166pp_1",
@@ -25,4 +25,4 @@ const c = "_loader_166pp_2", i = "_sm_166pp_18", f = "_md_166pp_24", u = "_lg_16
25
25
  export {
26
26
  j as L
27
27
  };
28
- //# sourceMappingURL=Loader-Czzb450N.js.map
28
+ //# sourceMappingURL=Loader-ChrouvaR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Loader-Czzb450N.js","sources":["../src/components/Loader/Loader.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { clsx } from 'clsx'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Loader.module.css'\n\nexport type LoaderSize = 'sm' | 'md' | 'lg'\n\nexport interface LoaderProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Preset size — matches the Icon sizes: `sm` 14px · `md` 18px · `lg` 22px. Defaults to `md`. */\n size?: LoaderSize\n /** Theme palette token used to color the spinner. Omit to inherit the surrounding text color (`currentColor`). */\n color?: ThemeColor\n}\n\n/**\n * A circular spinner. Works standalone as a loading indicator or inside a\n * `Button`, where it inherits the button color via `currentColor` unless an\n * explicit `color` is given.\n */\nexport const Loader = forwardRef<HTMLSpanElement, LoaderProps>(function Loader(\n { size = 'md', color, className, style, ...props },\n ref,\n) {\n const t = useT()\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={t('loader.label')}\n {...props}\n className={clsx(styles.loader, styles[size], className)}\n style={color ? ({ color: `var(--tz-color-${color})`, ...style } as CSSProperties) : style}\n />\n )\n})\n"],"names":["Loader","forwardRef","size","color","className","style","props","ref","t","useT","jsx","clsx","styles"],"mappings":";;;;;;;;;;GAmBaA,IAASC,EAAyC,SAC7D,EAAE,MAAAC,IAAO,MAAM,OAAAC,GAAO,WAAAC,GAAW,OAAAC,GAAO,GAAGC,EAAA,GAC3CC,GACA;AACA,QAAMC,IAAIC,EAAA;AACV,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAH;AAAA,MACA,MAAK;AAAA,MACL,cAAYC,EAAE,cAAc;AAAA,MAC3B,GAAGF;AAAA,MACJ,WAAWK,EAAKC,EAAO,QAAQA,EAAOV,CAAI,GAAGE,CAAS;AAAA,MACtD,OAAOD,IAAS,EAAE,OAAO,kBAAkBA,CAAK,KAAK,GAAGE,MAA4BA;AAAA,IAAA;AAAA,EAAA;AAG1F,CAAC;"}
1
+ {"version":3,"file":"Loader-ChrouvaR.js","sources":["../src/components/Loader/Loader.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { clsx } from 'clsx'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Loader.module.css'\n\nexport type LoaderSize = 'sm' | 'md' | 'lg'\n\nexport interface LoaderProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Preset size — matches the Icon sizes: `sm` 14px · `md` 18px · `lg` 22px. Defaults to `md`. */\n size?: LoaderSize\n /** Theme palette token used to color the spinner. Omit to inherit the surrounding text color (`currentColor`). */\n color?: ThemeColor\n}\n\n/**\n * A circular spinner. Works standalone as a loading indicator or inside a\n * `Button`, where it inherits the button color via `currentColor` unless an\n * explicit `color` is given.\n */\nexport const Loader = forwardRef<HTMLSpanElement, LoaderProps>(function Loader(\n { size = 'md', color, className, style, ...props },\n ref,\n) {\n const t = useT()\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={t('loader.label')}\n {...props}\n className={clsx(styles.loader, styles[size], className)}\n style={color ? ({ color: `var(--tz-color-${color})`, ...style } as CSSProperties) : style}\n />\n )\n})\n"],"names":["Loader","forwardRef","size","color","className","style","props","ref","t","useT","jsx","clsx","styles"],"mappings":";;;;;;;;;;GAmBaA,IAASC,EAAyC,SAC7D,EAAE,MAAAC,IAAO,MAAM,OAAAC,GAAO,WAAAC,GAAW,OAAAC,GAAO,GAAGC,EAAA,GAC3CC,GACA;AACA,QAAMC,IAAIC,EAAA;AACV,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAH;AAAA,MACA,MAAK;AAAA,MACL,cAAYC,EAAE,cAAc;AAAA,MAC3B,GAAGF;AAAA,MACJ,WAAWK,EAAKC,EAAO,QAAQA,EAAOV,CAAI,GAAGE,CAAS;AAAA,MACtD,OAAOD,IAAS,EAAE,OAAO,kBAAkBA,CAAK,KAAK,GAAGE,MAA4BA;AAAA,IAAA;AAAA,EAAA;AAG1F,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";const c=require("react/jsx-runtime"),d=require("react"),_=require("clsx"),p=require("./ConfigProvider-CtpfSy1i.cjs"),i="_loader_166pp_2",u="_sm_166pp_18",m="_md_166pp_24",f="_lg_166pp_30",s={loader:i,"tz-loader-spin":"_tz-loader-spin_166pp_1",sm:u,md:m,lg:f},g=d.forwardRef(function({size:o="md",color:e,className:t,style:r,...a},l){const n=p.useT();return c.jsx("span",{ref:l,role:"status","aria-label":n("loader.label"),...a,className:_.clsx(s.loader,s[o],t),style:e?{color:`var(--tz-color-${e})`,...r}:r})});exports.Loader=g;
2
- //# sourceMappingURL=Loader-CI1j71X8.cjs.map
1
+ "use strict";const c=require("react/jsx-runtime"),d=require("react"),_=require("clsx"),p=require("./ConfigProvider-CVLHPXQm.cjs"),i="_loader_166pp_2",u="_sm_166pp_18",m="_md_166pp_24",f="_lg_166pp_30",s={loader:i,"tz-loader-spin":"_tz-loader-spin_166pp_1",sm:u,md:m,lg:f},g=d.forwardRef(function({size:o="md",color:e,className:t,style:r,...a},l){const n=p.useT();return c.jsx("span",{ref:l,role:"status","aria-label":n("loader.label"),...a,className:_.clsx(s.loader,s[o],t),style:e?{color:`var(--tz-color-${e})`,...r}:r})});exports.Loader=g;
2
+ //# sourceMappingURL=Loader-DNCEHqZb.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Loader-CI1j71X8.cjs","sources":["../src/components/Loader/Loader.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { clsx } from 'clsx'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Loader.module.css'\n\nexport type LoaderSize = 'sm' | 'md' | 'lg'\n\nexport interface LoaderProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Preset size — matches the Icon sizes: `sm` 14px · `md` 18px · `lg` 22px. Defaults to `md`. */\n size?: LoaderSize\n /** Theme palette token used to color the spinner. Omit to inherit the surrounding text color (`currentColor`). */\n color?: ThemeColor\n}\n\n/**\n * A circular spinner. Works standalone as a loading indicator or inside a\n * `Button`, where it inherits the button color via `currentColor` unless an\n * explicit `color` is given.\n */\nexport const Loader = forwardRef<HTMLSpanElement, LoaderProps>(function Loader(\n { size = 'md', color, className, style, ...props },\n ref,\n) {\n const t = useT()\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={t('loader.label')}\n {...props}\n className={clsx(styles.loader, styles[size], className)}\n style={color ? ({ color: `var(--tz-color-${color})`, ...style } as CSSProperties) : style}\n />\n )\n})\n"],"names":["Loader","forwardRef","size","color","className","style","props","ref","t","useT","jsx","clsx","styles"],"mappings":"gRAmBaA,EAASC,EAAAA,WAAyC,SAC7D,CAAE,KAAAC,EAAO,KAAM,MAAAC,EAAO,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAA,EAC3CC,EACA,CACA,MAAMC,EAAIC,EAAAA,KAAA,EACV,OACEC,EAAAA,IAAC,OAAA,CACC,IAAAH,EACA,KAAK,SACL,aAAYC,EAAE,cAAc,EAC3B,GAAGF,EACJ,UAAWK,EAAAA,KAAKC,EAAO,OAAQA,EAAOV,CAAI,EAAGE,CAAS,EACtD,MAAOD,EAAS,CAAE,MAAO,kBAAkBA,CAAK,IAAK,GAAGE,GAA4BA,CAAA,CAAA,CAG1F,CAAC"}
1
+ {"version":3,"file":"Loader-DNCEHqZb.cjs","sources":["../src/components/Loader/Loader.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react'\nimport { clsx } from 'clsx'\nimport { useT, type ThemeColor } from '../../theme'\nimport styles from './Loader.module.css'\n\nexport type LoaderSize = 'sm' | 'md' | 'lg'\n\nexport interface LoaderProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Preset size — matches the Icon sizes: `sm` 14px · `md` 18px · `lg` 22px. Defaults to `md`. */\n size?: LoaderSize\n /** Theme palette token used to color the spinner. Omit to inherit the surrounding text color (`currentColor`). */\n color?: ThemeColor\n}\n\n/**\n * A circular spinner. Works standalone as a loading indicator or inside a\n * `Button`, where it inherits the button color via `currentColor` unless an\n * explicit `color` is given.\n */\nexport const Loader = forwardRef<HTMLSpanElement, LoaderProps>(function Loader(\n { size = 'md', color, className, style, ...props },\n ref,\n) {\n const t = useT()\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={t('loader.label')}\n {...props}\n className={clsx(styles.loader, styles[size], className)}\n style={color ? ({ color: `var(--tz-color-${color})`, ...style } as CSSProperties) : style}\n />\n )\n})\n"],"names":["Loader","forwardRef","size","color","className","style","props","ref","t","useT","jsx","clsx","styles"],"mappings":"gRAmBaA,EAASC,EAAAA,WAAyC,SAC7D,CAAE,KAAAC,EAAO,KAAM,MAAAC,EAAO,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAA,EAC3CC,EACA,CACA,MAAMC,EAAIC,EAAAA,KAAA,EACV,OACEC,EAAAA,IAAC,OAAA,CACC,IAAAH,EACA,KAAK,SACL,aAAYC,EAAE,cAAc,EAC3B,GAAGF,EACJ,UAAWK,EAAAA,KAAKC,EAAO,OAAQA,EAAOV,CAAI,EAAGE,CAAS,EACtD,MAAOD,EAAS,CAAE,MAAO,kBAAkBA,CAAK,IAAK,GAAGE,GAA4BA,CAAA,CAAA,CAG1F,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";const t=require("react/jsx-runtime"),r=require("react"),je=require("clsx"),Tt=require("./formContext-bTWrqdEV.cjs"),Pt=require("./CopyButton-0w4OToIy.cjs"),z=require("./Icon-BUP5_kRs.cjs"),ge=require("./IconButton-BVrO9TBP.cjs"),Lt=require("./Skeleton-DK0lAjS9.cjs"),Be=require("./TextField-CgPfN-4d.cjs"),fe=require("./Tooltip-Bw-1Xk2Z.cjs"),K=require("./Typography-B6ASPrzT.cjs"),Et=require("./FloatingPanel-tGCG2nhA.cjs"),qt=require("./ListItem-CUeIBhOF.cjs"),mt=require("./Loader-DNCEHqZb.cjs"),he=require("./ConfigProvider-CVLHPXQm.cjs"),yt="tz-google-maps",gt="__tzGoogleMapsReady";let Z=null,ft=!1,xt=!1;const $e=new Set;function Mt(){const n=globalThis;if(n.__tzAuthHooked)return;n.__tzAuthHooked=!0;const a=n.gm_authFailure;n.gm_authFailure=()=>{xt=!0,$e.forEach(d=>d()),a==null||a()}}function Nt(n){return xt&&n(),$e.add(n),()=>{$e.delete(n)}}const Oe=()=>globalThis.google,ze=n=>typeof n.lat=="function"?{lat:n.lat(),lng:n.lng()}:n;function Rt(n,a){return new Promise((d,y)=>{const i=new URLSearchParams({key:n,v:"weekly",loading:"async",callback:gt});a&&i.set("language",a),globalThis[gt]=()=>d();const v=document.createElement("script");v.id=yt,v.async=!0,v.src=`https://maps.googleapis.com/maps/api/js?${i.toString()}`,v.onerror=()=>{v.remove(),y(new Error("The Google Maps script failed to load"))},document.head.appendChild(v)})}async function Ct(){var I,C;const n=Oe();if(!((I=n==null?void 0:n.maps)!=null&&I.importLibrary))throw new Error("Google Maps is unavailable");const[a,d,y]=await Promise.all([n.maps.importLibrary("core"),n.maps.importLibrary("maps"),n.maps.importLibrary("marker")]),i={...a,...d,...y},v=(C=n.maps.Animation)==null?void 0:C.DROP,w=l=>`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`,j=l=>({url:w(l.svg),scaledSize:i.Size?new i.Size(l.width,l.height):{width:l.width,height:l.height},anchor:i.Point?new i.Point(l.anchorX,l.anchorY):{x:l.anchorX,y:l.anchorY}}),E=l=>{const m=document.createElement("img");return m.src=w(l.svg),m.width=l.width,m.height=l.height,m.alt="",m.style.display="block",m.style.transform=`translate(${l.width/2-l.anchorX}px, ${l.height-l.anchorY}px)`,m};let k=null,N=null;const F=()=>k??(k=n.maps.importLibrary("places")),R=()=>N??(N=n.maps.importLibrary("geocoding"));return{colorScheme:l=>i.ColorScheme?i.ColorScheme[l==="dark"?"DARK":"LIGHT"]:l.toUpperCase(),createPlacesSession:()=>{let l=null,m=new Map;return{async suggest(T,{language:b,bias:g,regions:f}){const u=await F();l??(l=new u.AutocompleteSessionToken);const{suggestions:ee}=await u.AutocompleteSuggestion.fetchAutocompleteSuggestions({input:T,sessionToken:l,...b?{language:b}:{},...g?{locationBias:{center:g,radius:5e4}}:{},...f!=null&&f.length?{includedRegionCodes:f}:{}});return m=new Map,ee.flatMap((te,G)=>{var Y,p,_;const q=te.placePrediction;if(!q)return[];const X=q.placeId??String(G);m.set(X,q);const H=((Y=q.mainText)==null?void 0:Y.text)??((p=q.text)==null?void 0:p.text)??"";return[{id:X,primary:H,secondary:((_=q.secondaryText)==null?void 0:_.text)??void 0}]})},async resolve(T){const b=m.get(T);if(!b)return null;const g=b.toPlace();return await g.fetchFields({fields:["location","formattedAddress"]}),l=null,g.location?{location:ze(g.location),address:g.formattedAddress??void 0}:null}}},reverseGeocode:async(l,m)=>{var b;const T=await R();try{const{results:g}=await new T.Geocoder().geocode({location:l,...m?{language:m}:{}});return((b=g[0])==null?void 0:b.formatted_address)??null}catch(g){return(g==null?void 0:g.code)==="REQUEST_DENIED"&&!ft&&(ft=!0,console.warn("[LocationPicker] Address lookup was denied — enable the Geocoding API for this Google Maps key (and allow it in the key's API restrictions).")),null}},createMap:(l,m)=>new i.Map(l,m),createPin:(l,{position:m,advanced:T,icon:b})=>{if(T&&i.AdvancedMarkerElement){const f=new i.AdvancedMarkerElement({map:l,position:m,gmpDraggable:!0,...b?{content:E(b)}:{}});return{setPosition:u=>{f.position=u},setIcon:u=>{f.content=E(u)},setDraggable:u=>{f.gmpDraggable=u},onDragEnd:u=>f.addListener("dragend",()=>f.position&&u(ze(f.position))),remove:()=>{f.map=null}}}const g=new i.Marker({map:l,position:m,draggable:!0,animation:v,...b?{icon:j(b)}:{}});return{setPosition:f=>g.setPosition(f),setIcon:f=>g.setIcon(j(f)),setDraggable:f=>g.setDraggable(f),onDragEnd:f=>g.addListener("dragend",()=>{const u=g.getPosition();u&&f(ze(u))}),remove:()=>g.setMap(null)}}}}function Dt(n,a){if(Mt(),Z&&Z.key===n)return Z.promise;const d=(async()=>{var y,i;if(!((i=(y=Oe())==null?void 0:y.maps)!=null&&i.importLibrary)){if(typeof document>"u")throw new Error("Google Maps needs a browser");document.getElementById(yt)?await new Promise(v=>{const w=()=>{var j,E;return(E=(j=Oe())==null?void 0:j.maps)!=null&&E.importLibrary?v():setTimeout(w,50)};w()}):await Rt(n,a)}return Ct()})();return Z={key:n,promise:d},d.catch(()=>{(Z==null?void 0:Z.promise)===d&&(Z=null)}),d}const At="_root_1ykqa_4",zt="_label_1ykqa_12",Ft="_required_1ykqa_18",Bt="_helper_1ykqa_21",$t="_frame_1ykqa_27",Ot="_error_1ykqa_46",Gt="_map_1ykqa_53",Ht="_mapHost_1ykqa_58",Ut="_cover_1ykqa_64",Zt="_message_1ykqa_70",Kt="_messageIcon_1ykqa_78",Xt="_controls_1ykqa_90",Yt="_control_1ykqa_90",Vt="_zoomControls_1ykqa_106",Wt="_badge_1ykqa_114",Qt="_badgeIcon_1ykqa_137",Jt="_coords_1ykqa_141",eo="_copy_1ykqa_147",to="_search_1ykqa_155",oo="_searchPanel_1ykqa_158",no="_searchStatus_1ykqa_163",ro="_address_1ykqa_171",so="_addressIcon_1ykqa_178",ao="_addressText_1ykqa_183",lo="_fields_1ykqa_189",co="_disabled_1ykqa_202",c={root:At,label:zt,required:Ft,helper:Bt,frame:$t,error:Ot,map:Gt,mapHost:Ht,cover:Ut,message:Zt,messageIcon:Kt,controls:Xt,control:Yt,zoomControls:Vt,badge:Wt,badgeIcon:Qt,coords:Jt,copy:eo,search:to,searchPanel:oo,searchStatus:no,address:ro,addressIcon:so,addressText:ao,fields:lo,disabled:co},io=250,pt=2;function uo({api:n,language:a,bias:d,regions:y,size:i,disabled:v,onPick:w}){const j=he.useT(),E=r.useId(),k=r.useRef(null),N=r.useRef(null),F=r.useRef(0),[R,I]=r.useState(""),[C,l]=r.useState([]),[m,T]=r.useState("idle"),[b,g]=r.useState(!1),[f,u]=r.useState(-1),[ee,te]=r.useState(!1),G=()=>N.current??(N.current=n.createPlacesSession());r.useEffect(()=>{const p=R.trim();if(p.length<pt){l([]),T("idle");return}const _=++F.current;T("loading");const h=window.setTimeout(()=>{G().suggest(p,{language:a,bias:d==null?void 0:d(),regions:y}).then(V=>{_===F.current&&(l(V),u(V.length?0:-1),T("ready"))}).catch(()=>{_===F.current&&(l([]),T("error"))})},io);return()=>window.clearTimeout(h)},[R,a,y==null?void 0:y.join(",")]);const q=async p=>{te(!0);try{const _=await G().resolve(p.id);if(N.current=null,!_)return;I(_.address??[p.primary,p.secondary].filter(Boolean).join(", ")),g(!1),l([]),T("idle"),F.current++,w(_)}catch{T("error")}finally{te(!1)}},X=p=>{if(p.key==="ArrowDown"||p.key==="ArrowUp"){if(!C.length)return;p.preventDefault(),g(!0);const _=p.key==="ArrowDown"?1:-1;u(h=>(h+_+C.length)%C.length)}else if(p.key==="Enter"){p.preventDefault();const _=C[f];b&&_&&q(_)}else p.key==="Escape"&&b&&(p.stopPropagation(),g(!1))},H=b&&R.trim().length>=pt&&m!=="idle",Y=p=>`${E}-option-${p}`;return t.jsxs("div",{ref:k,className:c.search,children:[t.jsx(Be.TextField,{size:i,disabled:v,value:R,placeholder:j("location.searchPlaceholder"),adornment:ee?t.jsx(mt.Loader,{size:"sm"}):t.jsx(z.Icon,{name:"SearchNormal"}),role:"combobox","aria-label":j("location.searchPlaceholder"),"aria-autocomplete":"list","aria-expanded":H,"aria-controls":H?E:void 0,"aria-activedescendant":H&&f>=0?Y(f):void 0,autoComplete:"off",onChange:p=>{I(p.target.value),g(!0)},onFocus:()=>g(!0),onKeyDown:X}),t.jsx(Et.FloatingPanel,{open:H,triggerRef:k,matchTriggerWidth:!0,onClose:()=>g(!1),className:c.searchPanel,children:m==="loading"&&!C.length?t.jsxs("div",{className:c.searchStatus,children:[t.jsx(mt.Loader,{size:"sm"}),t.jsx(K.Typography,{variant:"bodySmall",color:"muted",children:j("location.searching")})]}):m==="error"?t.jsxs("div",{className:c.searchStatus,children:[t.jsx(z.Icon,{name:"Danger",color:"error"}),t.jsx(K.Typography,{variant:"bodySmall",color:"muted",children:j("location.searchUnavailable")})]}):C.length===0?t.jsx("div",{className:c.searchStatus,children:t.jsx(K.Typography,{variant:"bodySmall",color:"muted",children:j("location.searchEmpty")})}):t.jsx("div",{role:"listbox",id:E,"aria-label":j("location.searchPlaceholder"),children:C.map((p,_)=>t.jsx(qt.ListItem,{id:Y(_),role:"option","aria-selected":_===f,selected:_===f,clickable:!0,icon:t.jsx(z.Icon,{name:"Location"}),description:p.secondary,onMouseDown:h=>h.preventDefault(),onMouseEnter:()=>u(_),onClick:()=>void q(p),children:p.primary},p.id))})})]})}const Pe={lat:41.7151,lng:44.8271},mo=12,go=0,fo=22,ht=16,O=(n,a)=>Number(n.toFixed(a)),pe=(n,a)=>Math.abs(n.lat-a.lat)<1e-7&&Math.abs(n.lng-a.lng)<1e-7,Te=(n,a)=>n==null?"":String(O(n,a));function se(n,a){const d=n.trim().replace(",",".");if(d==="")return null;if(!/^[-+]?\d+(\.\d*)?$/.test(d))return;const y=Number(d);return Math.abs(y)<=a?y:void 0}function po(n){const a=n.trim().match(/^\(?\s*([-+]?\d+(?:\.\d+)?)\s*[,;\s]\s*([-+]?\d+(?:\.\d+)?)\s*\)?$/);if(!a)return null;const d=Number(a[1]),y=Number(a[2]);return Math.abs(d)<=90&&Math.abs(y)<=180?{lat:d,lng:y}:null}function Ge(n,a){const d=getComputedStyle(document.documentElement).getPropertyValue(`--tz-color-${n}-rgb`).trim();if(!d)return a;const[y,i,v]=d.split(",").map(w=>Number(w.trim()));return[y,i,v].some(w=>Number.isNaN(w))?a:`#${[y,i,v].map(w=>w.toString(16).padStart(2,"0")).join("")}`}const J={width:40,height:52,tipX:20,tipY:45},Fe={width:34,height:44};function vt(n){const a=Fe.width/J.width;return{svg:`<svg xmlns="http://www.w3.org/2000/svg" width="${J.width}" height="${J.height}" viewBox="0 0 ${J.width} ${J.height}"><defs><filter id="s" x="-40%" y="-20%" width="180%" height="160%"><feDropShadow dx="0" dy="2" stdDeviation="1.8" flood-color="#000" flood-opacity=".3"/></filter></defs><path filter="url(#s)" fill="${n}" stroke="#fff" stroke-width="2.2" stroke-linejoin="round" d="M20 3C11.2 3 4 10 4 18.7c0 10.9 13.3 24 14.7 25.3a1.9 1.9 0 0 0 2.6 0C22.7 42.7 36 29.6 36 18.7 36 10 28.8 3 20 3Z"/><circle cx="20" cy="18.5" r="6.2" fill="#fff"/></svg>`,width:Fe.width,height:Fe.height,anchorX:J.tipX*a,anchorY:J.tipY*a}}const ho=()=>vt(Ge("accent","#056472"));function yo(){const n=getComputedStyle(document.documentElement),a=(w,j)=>{const E=n.getPropertyValue(`--tz-color-${w}-rgb`).trim();if(!E)return j;const[k,N,F]=E.split(",").map(R=>Number(R.trim()));return`#${[k,N,F].map(R=>R.toString(16).padStart(2,"0")).join("")}`},d=a("surface","#191919"),y=a("background","#0f0f0f"),i=a("primary","#e6e8eb"),v=a("accent","#16a6b4");return[{elementType:"geometry",stylers:[{color:d}]},{elementType:"labels.text.fill",stylers:[{color:i},{lightness:-35}]},{elementType:"labels.text.stroke",stylers:[{color:y}]},{featureType:"road",elementType:"geometry",stylers:[{color:y}]},{featureType:"road",elementType:"geometry.stroke",stylers:[{color:d}]},{featureType:"water",elementType:"geometry",stylers:[{color:v},{lightness:-55}]},{featureType:"poi",elementType:"geometry",stylers:[{color:d},{lightness:4}]},{featureType:"transit",stylers:[{visibility:"off"}]}]}const xo=r.forwardRef(function({value:a,defaultValue:d=null,onChange:y,name:i,label:v,helperText:w,error:j,required:E=!1,disabled:k=!1,size:N="md",apiKey:F,mapId:R,center:I,defaultCenter:C,onCenterChange:l,zoom:m,defaultZoom:T=mo,onZoomChange:b,mapHeight:g=300,locateButton:f=!0,precision:u=6,search:ee=!1,searchRegions:te,geocode:G=!1,onAddressChange:q,addressName:X,className:H,style:Y,...p},_){const h=he.useT(),{language:V}=he.useLanguage(),Le=he.useColorMode(),He=he.useMapsConfig(),ye=F??He.apiKey,W=R??He.mapId,Ue=`${r.useId()}-label`,Q=Tt.useFormContext(),ae=!!(Q&&i),D=ae?Q.field(i):void 0,[_t,bt]=r.useState(d),s=a!==void 0?a:ae?Q.values[i]??null:_t,xe=j??(D==null?void 0:D.error)??!1,Ze=w??(D==null?void 0:D.helperText),Ke=r.useRef(!1),[Ee,le]=r.useState(null),[Xe,ce]=r.useState(!1),Ye=r.useRef(null),Ve=r.useRef(0),U=r.useCallback(e=>{const o=e&&{lat:O(e.lat,u),lng:O(e.lng,u)};Ke.current=!0,a===void 0&&!ae&&bt(o),ae&&Q.setValue(i,o),y==null||y(o)},[a,ae,Q,i,y,u]),qe=r.useRef(U);qe.current=U;const[ie,Me]=r.useState(()=>Te(s==null?void 0:s.lat,u)),[ue,Ne]=r.useState(()=>Te(s==null?void 0:s.lng,u)),Re=r.useRef({lat:ie,lng:ue});Re.current={lat:ie,lng:ue},r.useEffect(()=>{const e=se(Re.current.lat,90),o=se(Re.current.lng,180),x=e!=null&&o!=null?{lat:e,lng:o}:null;(s?x!=null&&pe(x,s):x==null)||(Me(Te(s==null?void 0:s.lat,u)),Ne(Te(s==null?void 0:s.lng,u)))},[s==null?void 0:s.lat,s==null?void 0:s.lng,u]);const ve=se(ie,90),_e=se(ue,180),[We,be]=r.useState({lat:!1,lng:!1}),Qe=ve===null&&_e!=null&&We.lat,Je=_e===null&&ve!=null&&We.lng,et=r.useRef(null);r.useEffect(()=>{const e=et.current;e&&(i?e.setAttribute("name",i):e.removeAttribute("name"))},[i]);const Ce=r.useRef(null),B=r.useRef(null),oe=r.useRef(null),ne=r.useRef(null),[L,de]=r.useState(ye?"loading":"missingKey"),[kt,De]=r.useState(!1),[tt,ot]=r.useState(!1),wt=I??C??s??Pe,It=m??T,P=r.useRef({center:wt,zoom:It}),ke=r.useRef(l);ke.current=l;const we=r.useRef(b);we.current=b;const Ie=r.useRef(k);Ie.current=k;const nt=r.useRef(s);nt.current=s;const rt=W?Le:null;r.useEffect(()=>{if(!ye){de("missingKey");return}let e=!1;const o=[];let x=null;ne.current||de("loading");const $=Nt(()=>{e||de("authError")});return Dt(ye,V.split("-")[0]).then(M=>{if(e||!Ce.current)return;ne.current=M,x=document.createElement("div"),x.className=c.mapHost,Ce.current.appendChild(x);const A=M.createMap(x,{center:P.current.center,zoom:P.current.zoom,...W?{mapId:W,colorScheme:M.colorScheme(rt??"light")}:{},disableDefaultUI:!0,zoomControl:!1,clickableIcons:!1,gestureHandling:"cooperative",draggableCursor:Ie.current?void 0:"crosshair"});B.current=A;const Ae=M.createPin(A,{position:nt.current,advanced:!!W,icon:ho()});Ae.setDraggable(!Ie.current),oe.current=Ae,o.push(A.addListener("click",S=>{Ie.current||!S.latLng||qe.current({lat:S.latLng.lat(),lng:S.latLng.lng()})}),Ae.onDragEnd(S=>qe.current(S)),A.addListener("zoom_changed",()=>{var re;const S=A.getZoom();S==null||S===P.current.zoom||(P.current={...P.current,zoom:S},(re=we.current)==null||re.call(we,S))}),A.addListener("idle",()=>{var dt;const S=A.getCenter();if(!S)return;const re={lat:S.lat(),lng:S.lng()};pe(re,P.current.center)||(P.current={...P.current,center:re},(dt=ke.current)==null||dt.call(ke,re))})),de(S=>S==="authError"?S:"ready")}).catch(()=>{e||de("error")}),()=>{var M;e=!0,$(),o.forEach(A=>A.remove()),(M=oe.current)==null||M.remove(),oe.current=null,B.current=null,x==null||x.remove()}},[ye,W,rt]),r.useEffect(()=>{var e;(e=oe.current)==null||e.setPosition(s)},[s,L]),r.useEffect(()=>{var e,o;(e=oe.current)==null||e.setDraggable(!k),(o=B.current)==null||o.setOptions({draggableCursor:k?void 0:"crosshair"})},[k,L]),r.useEffect(()=>{const e=B.current;!e||!I||pe(I,P.current.center)||(P.current={...P.current,center:I},e.setCenter(I))},[I==null?void 0:I.lat,I==null?void 0:I.lng,L]),r.useEffect(()=>{const e=B.current;!e||m==null||m===P.current.zoom||(P.current={...P.current,zoom:m},e.setZoom(m))},[m,L]),r.useEffect(()=>{if(L!=="ready"||typeof MutationObserver>"u")return;let e=Ge("accent","#056472");const o=new MutationObserver(()=>{var $;const x=Ge("accent","#056472");x!==e&&(e=x,($=oe.current)==null||$.setIcon(vt(x)))});return o.observe(document.documentElement,{attributes:!0,attributeFilter:["style","data-tz-theme"]}),()=>o.disconnect()},[L]),r.useEffect(()=>{!B.current||W||B.current.setOptions({styles:Le==="dark"?yo():null})},[Le,W,L]);const st=e=>{const o=B.current;o&&o.setZoom(Math.min(fo,Math.max(go,(o.getZoom()??P.current.zoom)+e)))},at=e=>{Ke.current&&(q==null||q(e),Q&&X&&Q.setValue(X,e??""))},Se=r.useRef(at);Se.current=at,r.useEffect(()=>{const e=++Ve.current;if(!s){le(null),ce(!1),Se.current(null);return}const o=Ye.current;if(o&&pe(o,s)){le(o.address),ce(!1),Se.current(o.address);return}if(!G||L!=="ready"||!ne.current){le(null),ce(!1);return}le(null),ce(!0);const x=ne.current,$=s,M=window.setTimeout(()=>{x.reverseGeocode($,V.split("-")[0]).then(A=>{e===Ve.current&&(le(A),ce(!1),Se.current(A))})},400);return()=>window.clearTimeout(M)},[s==null?void 0:s.lat,s==null?void 0:s.lng,G,L,V]);const St=e=>{const o={lat:O(e.location.lat,u),lng:O(e.location.lng,u)};Ye.current=e.address?{...o,address:e.address}:null,U(o),me(o,ht)},me=(e,o)=>{const x=B.current;x&&(x.panTo(e),o!=null&&(x.getZoom()??0)<o&&x.setZoom(o))},lt=(e,o)=>{const x=se(e,90),$=se(o,180);if(x==null||$==null){s&&U(null);return}const M={lat:x,lng:$};s&&pe(M,s)||(U(M),me(M))},ct=e=>{const o=po(e.clipboardData.getData("text"));o&&(e.preventDefault(),Me(String(O(o.lat,u))),Ne(String(O(o.lng,u))),U(o),me(o))},jt=()=>{navigator.geolocation&&(De(!0),ot(!1),navigator.geolocation.getCurrentPosition(e=>{De(!1);const o={lat:e.coords.latitude,lng:e.coords.longitude};U(o),me(o,ht)},()=>{De(!1),ot(!0)},{enableHighAccuracy:!0,timeout:1e4}))},it=s?`${O(s.lat,u)}, ${O(s.lng,u)}`:"",ut=L==="missingKey"?h("location.missingKey"):L==="authError"?h("location.authError"):L==="error"?h("location.loadError"):null;return t.jsxs("div",{ref:_,role:"group","aria-labelledby":v!=null?Ue:void 0,className:je.clsx(c.root,k&&c.disabled,H),style:{"--tz-location-map-height":`${g}px`,...Y},...p,children:[v!=null&&t.jsxs("div",{className:c.label,id:Ue,children:[t.jsx(K.Typography,{as:"span",variant:"bodySmall",color:"muted",children:v}),E&&t.jsx("span",{className:c.required,"aria-hidden":"true",children:"*"})]}),ee&&L==="ready"&&ne.current&&!k&&t.jsx(uo,{api:ne.current,language:V.split("-")[0],bias:()=>{var o;const e=(o=B.current)==null?void 0:o.getCenter();return e?{lat:e.lat(),lng:e.lng()}:P.current.center},regions:te,size:N,onPick:St}),t.jsxs("div",{ref:et,tabIndex:-1,className:je.clsx(c.frame,xe&&c.error),children:[t.jsx("div",{ref:Ce,className:c.map,role:"application","aria-label":h("location.mapLabel"),"data-testid":"location-map"}),L==="loading"&&t.jsx("div",{className:c.cover,"aria-hidden":"true",children:t.jsx(Lt.Skeleton,{variant:"rect",width:"100%",height:"100%",radius:"xxs"})}),ut&&t.jsxs("div",{className:je.clsx(c.cover,c.message),role:"status",children:[t.jsx("span",{className:c.messageIcon,children:t.jsx(z.Icon,{name:"Map"})}),t.jsx(K.Typography,{variant:"bodySmall",color:"muted",align:"center",children:ut})]}),L==="ready"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:c.controls,children:[f&&!k&&typeof navigator<"u"&&navigator.geolocation&&t.jsx(fe.Tooltip,{content:h(tt?"location.locateFailed":"location.locate"),placement:"left",children:t.jsx(ge.IconButton,{size:"sm",color:"surface",className:c.control,"aria-label":h("location.locate"),loading:kt,onClick:jt,children:t.jsx(z.Icon,{name:tt?"GpsSlash":"Gps"})})}),s&&t.jsx(fe.Tooltip,{content:h("location.centerOnPin"),placement:"left",children:t.jsx(ge.IconButton,{size:"sm",color:"surface",className:c.control,"aria-label":h("location.centerOnPin"),onClick:()=>me(s),children:t.jsx(z.Icon,{name:"Location"})})}),s&&!k&&t.jsx(fe.Tooltip,{content:h("location.removePin"),placement:"left",children:t.jsx(ge.IconButton,{size:"sm",color:"surface",className:c.control,"aria-label":h("location.removePin"),onClick:()=>U(null),children:t.jsx(z.Icon,{name:"LocationCross"})})})]}),t.jsxs("div",{className:je.clsx(c.controls,c.zoomControls),children:[t.jsx(fe.Tooltip,{content:h("location.zoomIn"),placement:"left",children:t.jsx(ge.IconButton,{size:"sm",color:"surface",className:c.control,"aria-label":h("location.zoomIn"),onClick:()=>st(1),children:t.jsx(z.Icon,{name:"Add"})})}),t.jsx(fe.Tooltip,{content:h("location.zoomOut"),placement:"left",children:t.jsx(ge.IconButton,{size:"sm",color:"surface",className:c.control,"aria-label":h("location.zoomOut"),onClick:()=>st(-1),children:t.jsx(z.Icon,{name:"Minus"})})})]}),t.jsx("div",{className:c.badge,"aria-live":"polite",children:s?t.jsxs(t.Fragment,{children:[t.jsx(z.Icon,{name:"Location",size:"sm",className:c.badgeIcon}),t.jsx("span",{className:c.coords,children:it}),t.jsx(Pt.CopyButton,{value:it,size:"sm",className:c.copy})]}):!k&&t.jsxs(t.Fragment,{children:[t.jsx(z.Icon,{name:"LocationAdd",size:"sm",className:c.badgeIcon}),t.jsx("span",{children:h("location.hint")})]})})]})]}),(G||ee)&&s&&(Ee||Xe)&&t.jsxs("div",{className:c.address,"aria-live":"polite",children:[t.jsx(z.Icon,{name:"Location",size:"sm",className:c.addressIcon}),Xe&&!Ee?t.jsx(K.Typography,{as:"span",variant:"bodySmall",color:"muted",children:h("location.addressLoading")}):t.jsx(K.Typography,{as:"span",variant:"bodySmall",className:c.addressText,children:Ee})]}),t.jsxs("div",{className:c.fields,children:[t.jsx(Be.TextField,{label:h("location.latitude"),size:N,inputMode:"decimal",placeholder:String(Pe.lat),value:ie,disabled:k,error:xe||ve===void 0||Qe,helperText:ve===void 0?h("location.latitudeRange"):Qe?h("location.pairIncomplete"):void 0,onChange:e=>{Me(e.target.value),be(o=>o.lat?o:{...o,lat:!0}),lt(e.target.value,ue)},onPaste:ct,onBlur:e=>{be(o=>o.lat?o:{...o,lat:!0}),D==null||D.onBlur(e)}}),t.jsx(Be.TextField,{label:h("location.longitude"),size:N,inputMode:"decimal",placeholder:String(Pe.lng),value:ue,disabled:k,error:xe||_e===void 0||Je,helperText:_e===void 0?h("location.longitudeRange"):Je?h("location.pairIncomplete"):void 0,onChange:e=>{Ne(e.target.value),be(o=>o.lng?o:{...o,lng:!0}),lt(ie,e.target.value)},onPaste:ct,onBlur:e=>{be(o=>o.lng?o:{...o,lng:!0}),D==null||D.onBlur(e)}})]}),Ze!=null&&t.jsx(K.Typography,{as:"span",variant:"bodySmall",color:xe?"error":"muted",className:c.helper,children:Ze})]})});exports.LocationPicker=xo;exports.TBILISI=Pe;
2
+ //# sourceMappingURL=LocationPicker-CJ6bCJC4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationPicker-CJ6bCJC4.cjs","sources":["../src/components/LocationPicker/googleMaps.ts","../src/components/LocationPicker/PlaceSearch.tsx","../src/components/LocationPicker/LocationPicker.tsx"],"sourcesContent":["// Google Maps JavaScript API — loaded on demand with Google's own `<script>` (no npm dependency, so an app that\n// never renders a map neither installs nor downloads anything), once per page, then reused. The types below are\n// the small slice `LocationPicker` touches, so the library's public typings don't depend on `@types/google.maps`.\n\nexport interface LatLngLiteral {\n lat: number\n lng: number\n}\n\nexport interface MapsLatLng {\n lat(): number\n lng(): number\n}\n\nexport interface MapsEventListener {\n remove(): void\n}\n\nexport interface MapsMouseEvent {\n latLng: MapsLatLng | null\n}\n\nexport interface MapsMap {\n setCenter(center: LatLngLiteral): void\n panTo(center: LatLngLiteral): void\n setZoom(zoom: number): void\n getZoom(): number | undefined\n getCenter(): MapsLatLng | undefined\n setOptions(options: Record<string, unknown>): void\n addListener(event: string, handler: (event: MapsMouseEvent) => void): MapsEventListener\n}\n\n/** A custom pin image: an SVG string, its rendered size and the anchor (the tip) in that size's px. */\nexport interface PinIcon {\n svg: string\n width: number\n height: number\n anchorX: number\n anchorY: number\n}\n\n/** The pin — a classic `Marker` or an `AdvancedMarkerElement`, adapted to one shape. */\nexport interface MapsPin {\n setPosition(position: LatLngLiteral | null): void\n /** Swap the pin image (e.g. a new accent color). */\n setIcon(icon: PinIcon): void\n setDraggable(draggable: boolean): void\n onDragEnd(handler: (position: LatLngLiteral) => void): MapsEventListener\n remove(): void\n}\n\n/** One autocomplete suggestion — a place's main text (name / street) and its secondary text (city, country). */\nexport interface PlaceSuggestion {\n id: string\n primary: string\n secondary?: string\n}\n\n/** A picked place, resolved to a point (+ its formatted address when Google has one). */\nexport interface PlaceResult {\n location: LatLngLiteral\n address?: string\n}\n\n/**\n * An address / place search session (Places API (New)). Suggestions share one session token until a place is\n * resolved — that's how Google bills a search as one session, not per keystroke.\n */\nexport interface PlacesSession {\n suggest(\n input: string,\n options: { language?: string; bias?: LatLngLiteral; regions?: string[] },\n ): Promise<PlaceSuggestion[]>\n /** Resolve a suggestion to its point + address (ends the session). */\n resolve(id: string): Promise<PlaceResult | null>\n}\n\nexport interface GoogleMapsApi {\n /** Google's `ColorScheme` value for a mode (the Map ID light / dark option; set when a map is created). */\n colorScheme(mode: 'light' | 'dark'): unknown\n /** Start an address / place search session (loads the `places` library on first use). */\n createPlacesSession(): PlacesSession\n /** The formatted address at a point (Geocoding API; loads `geocoding` on first use), or `null`. */\n reverseGeocode(position: LatLngLiteral, language?: string): Promise<string | null>\n /** Create a map in `element`. */\n createMap(element: HTMLElement, options: Record<string, unknown>): MapsMap\n /** Create the pin on `map` (an `AdvancedMarkerElement` when the map has a `mapId`). */\n createPin(\n map: MapsMap,\n options: { position: LatLngLiteral | null; advanced: boolean; icon?: PinIcon },\n ): MapsPin\n}\n\ninterface RawLibraries {\n Map: new (element: HTMLElement, options: Record<string, unknown>) => MapsMap\n Marker: new (options: Record<string, unknown>) => {\n setPosition(position: LatLngLiteral | null): void\n setMap(map: MapsMap | null): void\n setDraggable(draggable: boolean): void\n setIcon(icon: unknown): void\n getPosition(): MapsLatLng | null | undefined\n addListener(event: string, handler: () => void): MapsEventListener\n }\n AdvancedMarkerElement?: new (options: Record<string, unknown>) => {\n position: LatLngLiteral | MapsLatLng | null\n map: MapsMap | null\n gmpDraggable: boolean\n content: HTMLElement | null\n addListener(event: string, handler: () => void): MapsEventListener\n }\n ColorScheme?: { LIGHT: unknown; DARK: unknown }\n Size?: new (width: number, height: number) => unknown\n Point?: new (x: number, y: number) => unknown\n}\n\ninterface GoogleNamespace {\n maps: {\n importLibrary(name: string): Promise<Record<string, unknown>>\n Animation?: { DROP: unknown }\n }\n}\n\nconst SCRIPT_ID = 'tz-google-maps'\nconst CALLBACK = '__tzGoogleMapsReady'\n\nlet pending: { key: string; promise: Promise<GoogleMapsApi> } | null = null\nlet geocodeDeniedWarned = false\n\n// ── key rejected ─────────────────────────────────────────────────────────────────────────────────────\n// Google reports an authentication failure (key restricted to other referrers, Maps JavaScript API not enabled,\n// no billing…) only by calling a global `gm_authFailure()` and painting its own grey \"Oops!\" over the map. We\n// hook it so `LocationPicker` can cover that with its own, localized message. Any app-defined handler still runs.\nlet authFailed = false\nconst authListeners = new Set<() => void>()\nfunction installAuthFailureHook() {\n const g = globalThis as { gm_authFailure?: () => void; __tzAuthHooked?: boolean }\n if (g.__tzAuthHooked) return\n g.__tzAuthHooked = true\n const previous = g.gm_authFailure\n g.gm_authFailure = () => {\n authFailed = true\n authListeners.forEach((listener) => listener())\n previous?.()\n }\n}\n\n/** Call `listener` when Google rejects the API key (immediately if it already has). Returns an unsubscribe. */\nexport function onMapsAuthFailure(listener: () => void): () => void {\n if (authFailed) listener()\n authListeners.add(listener)\n return () => {\n authListeners.delete(listener)\n }\n}\n\nconst googleNs = (): GoogleNamespace | undefined =>\n (globalThis as { google?: GoogleNamespace }).google\n\nconst toLiteral = (p: LatLngLiteral | MapsLatLng): LatLngLiteral =>\n typeof (p as MapsLatLng).lat === 'function'\n ? { lat: (p as MapsLatLng).lat(), lng: (p as MapsLatLng).lng() }\n : (p as LatLngLiteral)\n\n/** Inject Google's script tag (first map on the page) and resolve once its namespace is ready. */\nfunction injectScript(apiKey: string, language?: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const params = new URLSearchParams({\n key: apiKey,\n v: 'weekly',\n loading: 'async',\n callback: CALLBACK,\n })\n if (language) params.set('language', language)\n ;(globalThis as Record<string, unknown>)[CALLBACK] = () => resolve()\n const script = document.createElement('script')\n script.id = SCRIPT_ID\n script.async = true\n script.src = `https://maps.googleapis.com/maps/api/js?${params.toString()}`\n script.onerror = () => {\n script.remove()\n reject(new Error('The Google Maps script failed to load'))\n }\n document.head.appendChild(script)\n })\n}\n\nasync function buildApi(): Promise<GoogleMapsApi> {\n const ns = googleNs()\n if (!ns?.maps?.importLibrary) throw new Error('Google Maps is unavailable')\n const [core, maps, marker] = await Promise.all([\n ns.maps.importLibrary('core'),\n ns.maps.importLibrary('maps'),\n ns.maps.importLibrary('marker'),\n ])\n const lib = { ...core, ...maps, ...marker } as unknown as RawLibraries\n const drop = ns.maps.Animation?.DROP\n const svgUrl = (svg: string) => `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`\n\n // classic marker icon — Google wants its own Size / Point instances\n const markerIcon = (icon: PinIcon) => ({\n url: svgUrl(icon.svg),\n scaledSize: lib.Size\n ? new lib.Size(icon.width, icon.height)\n : { width: icon.width, height: icon.height },\n anchor: lib.Point\n ? new lib.Point(icon.anchorX, icon.anchorY)\n : { x: icon.anchorX, y: icon.anchorY },\n })\n // advanced marker content — the element's bottom-centre sits on the position, so shift the tip down onto it\n const pinElement = (icon: PinIcon) => {\n const img = document.createElement('img')\n img.src = svgUrl(icon.svg)\n img.width = icon.width\n img.height = icon.height\n img.alt = ''\n img.style.display = 'block'\n img.style.transform = `translate(${icon.width / 2 - icon.anchorX}px, ${icon.height - icon.anchorY}px)`\n return img\n }\n\n // the search / address libraries are only fetched the first time they're used\n let placesLib: Promise<Record<string, unknown>> | null = null\n let geocodingLib: Promise<Record<string, unknown>> | null = null\n const places = () => (placesLib ??= ns.maps.importLibrary('places'))\n const geocoding = () => (geocodingLib ??= ns.maps.importLibrary('geocoding'))\n\n interface RawPrediction {\n placeId?: string\n text?: { text: string }\n mainText?: { text: string } | null\n secondaryText?: { text: string } | null\n toPlace(): {\n fetchFields(options: { fields: string[] }): Promise<unknown>\n location?: MapsLatLng | null\n formattedAddress?: string | null\n }\n }\n\n return {\n colorScheme: (mode) =>\n lib.ColorScheme ? lib.ColorScheme[mode === 'dark' ? 'DARK' : 'LIGHT'] : mode.toUpperCase(),\n createPlacesSession: () => {\n let token: unknown = null\n let predictions = new Map<string, RawPrediction>()\n return {\n async suggest(input, { language, bias, regions }) {\n const lib = (await places()) as {\n AutocompleteSessionToken: new () => unknown\n AutocompleteSuggestion: {\n fetchAutocompleteSuggestions(\n request: Record<string, unknown>,\n ): Promise<{ suggestions: { placePrediction?: RawPrediction | null }[] }>\n }\n }\n token ??= new lib.AutocompleteSessionToken()\n const { suggestions } = await lib.AutocompleteSuggestion.fetchAutocompleteSuggestions({\n input,\n sessionToken: token,\n ...(language ? { language } : {}),\n ...(bias ? { locationBias: { center: bias, radius: 50000 } } : {}),\n ...(regions?.length ? { includedRegionCodes: regions } : {}),\n })\n predictions = new Map()\n return suggestions.flatMap((s, i) => {\n const p = s.placePrediction\n if (!p) return []\n const id = p.placeId ?? String(i)\n predictions.set(id, p)\n const primary = p.mainText?.text ?? p.text?.text ?? ''\n return [{ id, primary, secondary: p.secondaryText?.text ?? undefined }]\n })\n },\n async resolve(id) {\n const prediction = predictions.get(id)\n if (!prediction) return null\n const place = prediction.toPlace()\n await place.fetchFields({ fields: ['location', 'formattedAddress'] })\n token = null // the details call closes the session\n if (!place.location) return null\n return {\n location: toLiteral(place.location),\n address: place.formattedAddress ?? undefined,\n }\n },\n }\n },\n reverseGeocode: async (position, language) => {\n const lib = (await geocoding()) as {\n Geocoder: new () => {\n geocode(request: Record<string, unknown>): Promise<{\n results: { formatted_address?: string }[]\n }>\n }\n }\n try {\n const { results } = await new lib.Geocoder().geocode({\n location: position,\n ...(language ? { language } : {}),\n })\n return results[0]?.formatted_address ?? null\n } catch (error) {\n // ZERO_RESULTS (sea, desert…) is just \"no address\"; a denied request means the Geocoding API isn't\n // enabled / allowed for the key — say so once, so a silently missing address has a visible cause\n const code = (error as { code?: string } | null)?.code\n if (code === 'REQUEST_DENIED' && !geocodeDeniedWarned) {\n geocodeDeniedWarned = true\n console.warn(\n \"[LocationPicker] Address lookup was denied — enable the Geocoding API for this Google Maps key (and allow it in the key's API restrictions).\",\n )\n }\n return null\n }\n },\n createMap: (element, options) => new lib.Map(element, options),\n createPin: (map, { position, advanced, icon }) => {\n if (advanced && lib.AdvancedMarkerElement) {\n const pin = new lib.AdvancedMarkerElement({\n map,\n position,\n gmpDraggable: true,\n ...(icon ? { content: pinElement(icon) } : {}),\n })\n return {\n setPosition: (p) => {\n pin.position = p\n },\n setIcon: (next) => {\n pin.content = pinElement(next)\n },\n setDraggable: (d) => {\n pin.gmpDraggable = d\n },\n onDragEnd: (handler) =>\n pin.addListener('dragend', () => pin.position && handler(toLiteral(pin.position))),\n remove: () => {\n pin.map = null\n },\n }\n }\n const pin = new lib.Marker({\n map,\n position,\n draggable: true,\n animation: drop,\n ...(icon ? { icon: markerIcon(icon) } : {}),\n })\n return {\n setPosition: (p) => pin.setPosition(p),\n setIcon: (next) => pin.setIcon(markerIcon(next)),\n setDraggable: (d) => pin.setDraggable(d),\n onDragEnd: (handler) =>\n pin.addListener('dragend', () => {\n const p = pin.getPosition()\n if (p) handler(toLiteral(p))\n }),\n remove: () => pin.setMap(null),\n }\n },\n }\n}\n\n/**\n * Load the Maps JavaScript API (once per page) and return the small adapter `LocationPicker` uses. Reuses an\n * already-present `google.maps` (an app that loads Maps itself, or tests); a failed load can be retried.\n */\nexport function loadGoogleMaps(apiKey: string, language?: string): Promise<GoogleMapsApi> {\n installAuthFailureHook()\n if (pending && pending.key === apiKey) return pending.promise\n const promise = (async () => {\n if (!googleNs()?.maps?.importLibrary) {\n if (typeof document === 'undefined') throw new Error('Google Maps needs a browser')\n if (!document.getElementById(SCRIPT_ID)) await injectScript(apiKey, language)\n else {\n // another key's script is already on the page — Maps can't be loaded twice; wait for it\n await new Promise<void>((resolve) => {\n const check = () => (googleNs()?.maps?.importLibrary ? resolve() : setTimeout(check, 50))\n check()\n })\n }\n }\n return buildApi()\n })()\n pending = { key: apiKey, promise }\n promise.catch(() => {\n if (pending?.promise === promise) pending = null // let a later render retry\n })\n return promise\n}\n\n/** Test hook: forget the cached loader and any recorded key rejection. */\nexport function resetGoogleMapsLoader(): void {\n pending = null\n authFailed = false\n}\n","import { useEffect, useId, useRef, useState, type KeyboardEvent } from 'react'\nimport { useT } from '../../theme'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Icon } from '../Icon'\nimport { ListItem } from '../List'\nimport { Loader } from '../Loader'\nimport { TextField } from '../TextField'\nimport { Typography } from '../Typography'\nimport type {\n GoogleMapsApi,\n LatLngLiteral,\n PlaceResult,\n PlaceSuggestion,\n PlacesSession,\n} from './googleMaps'\nimport styles from './LocationPicker.module.css'\n\nconst DEBOUNCE_MS = 250\nconst MIN_CHARS = 2\n\ntype SearchState = 'idle' | 'loading' | 'ready' | 'error'\n\nexport interface PlaceSearchProps {\n api: GoogleMapsApi\n /** UI language for the suggestions. */\n language?: string\n /** Bias results towards this point (the map's centre). */\n bias?: () => LatLngLiteral | undefined\n /** Restrict results to these regions (ISO 3166-1 alpha-2, e.g. `['ge']`). */\n regions?: string[]\n size: 'sm' | 'md' | 'lg'\n disabled?: boolean\n /** Fires with the picked place's point + address. */\n onPick: (place: PlaceResult) => void\n}\n\n/**\n * The address / place search above the map — our own field + listbox (so it looks and behaves like the rest of\n * the library), fed by Google's Places API (New): debounced suggestions biased to the map centre, keyboard\n * navigation (↑ ↓ Enter Escape), and a pick that resolves the place to a point. Internal to `LocationPicker`.\n */\nexport function PlaceSearch({\n api,\n language,\n bias,\n regions,\n size,\n disabled,\n onPick,\n}: PlaceSearchProps) {\n const t = useT()\n const listId = useId()\n const anchorRef = useRef<HTMLDivElement | null>(null)\n const sessionRef = useRef<PlacesSession | null>(null)\n const requestRef = useRef(0)\n const [query, setQuery] = useState('')\n const [suggestions, setSuggestions] = useState<PlaceSuggestion[]>([])\n const [state, setState] = useState<SearchState>('idle')\n const [open, setOpen] = useState(false)\n const [active, setActive] = useState(-1)\n const [resolving, setResolving] = useState(false)\n\n const session = () => (sessionRef.current ??= api.createPlacesSession())\n\n // debounced suggestions — only the latest request's answer is shown\n useEffect(() => {\n const input = query.trim()\n if (input.length < MIN_CHARS) {\n setSuggestions([])\n setState('idle')\n return\n }\n const id = ++requestRef.current\n setState('loading')\n const timer = window.setTimeout(() => {\n session()\n .suggest(input, { language, bias: bias?.(), regions })\n .then((list) => {\n if (id !== requestRef.current) return\n setSuggestions(list)\n setActive(list.length ? 0 : -1)\n setState('ready')\n })\n .catch(() => {\n if (id !== requestRef.current) return\n setSuggestions([])\n setState('error')\n })\n }, DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query, language, regions?.join(',')])\n\n const pick = async (suggestion: PlaceSuggestion) => {\n setResolving(true)\n try {\n const place = await session().resolve(suggestion.id)\n sessionRef.current = null // the next search is a new session\n if (!place) return\n setQuery(\n place.address ?? [suggestion.primary, suggestion.secondary].filter(Boolean).join(', '),\n )\n setOpen(false)\n setSuggestions([])\n setState('idle')\n requestRef.current++ // drop any in-flight suggestion answer for the old text\n onPick(place)\n } catch {\n setState('error')\n } finally {\n setResolving(false)\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!suggestions.length) return\n event.preventDefault()\n setOpen(true)\n const step = event.key === 'ArrowDown' ? 1 : -1\n setActive((i) => (i + step + suggestions.length) % suggestions.length)\n } else if (event.key === 'Enter') {\n // never submit the surrounding form from the search box\n event.preventDefault()\n const suggestion = suggestions[active]\n if (open && suggestion) void pick(suggestion)\n } else if (event.key === 'Escape' && open) {\n event.stopPropagation() // close the list, not an enclosing Modal\n setOpen(false)\n }\n }\n\n const showPanel = open && query.trim().length >= MIN_CHARS && state !== 'idle'\n const optionId = (i: number) => `${listId}-option-${i}`\n\n return (\n <div ref={anchorRef} className={styles.search}>\n <TextField\n size={size}\n disabled={disabled}\n value={query}\n placeholder={t('location.searchPlaceholder')}\n adornment={resolving ? <Loader size=\"sm\" /> : <Icon name=\"SearchNormal\" />}\n role=\"combobox\"\n aria-label={t('location.searchPlaceholder')}\n aria-autocomplete=\"list\"\n aria-expanded={showPanel}\n aria-controls={showPanel ? listId : undefined}\n aria-activedescendant={showPanel && active >= 0 ? optionId(active) : undefined}\n autoComplete=\"off\"\n onChange={(e) => {\n setQuery(e.target.value)\n setOpen(true)\n }}\n onFocus={() => setOpen(true)}\n onKeyDown={handleKeyDown}\n />\n <FloatingPanel\n open={showPanel}\n triggerRef={anchorRef}\n matchTriggerWidth\n onClose={() => setOpen(false)}\n className={styles.searchPanel}\n >\n {state === 'loading' && !suggestions.length ? (\n <div className={styles.searchStatus}>\n <Loader size=\"sm\" />\n <Typography variant=\"bodySmall\" color=\"muted\">\n {t('location.searching')}\n </Typography>\n </div>\n ) : state === 'error' ? (\n <div className={styles.searchStatus}>\n <Icon name=\"Danger\" color=\"error\" />\n <Typography variant=\"bodySmall\" color=\"muted\">\n {t('location.searchUnavailable')}\n </Typography>\n </div>\n ) : suggestions.length === 0 ? (\n <div className={styles.searchStatus}>\n <Typography variant=\"bodySmall\" color=\"muted\">\n {t('location.searchEmpty')}\n </Typography>\n </div>\n ) : (\n <div role=\"listbox\" id={listId} aria-label={t('location.searchPlaceholder')}>\n {suggestions.map((s, i) => (\n <ListItem\n key={s.id}\n id={optionId(i)}\n role=\"option\"\n aria-selected={i === active}\n selected={i === active}\n clickable\n icon={<Icon name=\"Location\" />}\n description={s.secondary}\n // keep focus in the input while choosing\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setActive(i)}\n onClick={() => void pick(s)}\n >\n {s.primary}\n </ListItem>\n ))}\n </div>\n )}\n </FloatingPanel>\n </div>\n )\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type ClipboardEvent,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useColorMode, useLanguage, useMapsConfig, useT } from '../../theme'\nimport { useFormContext } from '../../form/formContext'\nimport { CopyButton } from '../CopyButton'\nimport { Icon } from '../Icon'\nimport { IconButton } from '../IconButton'\nimport { Skeleton } from '../Skeleton'\nimport { TextField } from '../TextField'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport {\n loadGoogleMaps,\n onMapsAuthFailure,\n type GoogleMapsApi,\n type LatLngLiteral,\n type MapsMap,\n type MapsPin,\n type PinIcon,\n} from './googleMaps'\nimport { PlaceSearch } from './PlaceSearch'\nimport styles from './LocationPicker.module.css'\n\nexport type LocationPickerSize = 'sm' | 'md' | 'lg'\n\n/** A point on the map — the field's value (`null` while no pin is placed). */\nexport interface LocationValue {\n /** Latitude (განედი), `-90`…`90`. */\n lat: number\n /** Longitude (გრძედი), `-180`…`180`. */\n lng: number\n}\n\n/** The map view — where it's centred and how far it's zoomed. */\nexport interface LocationView {\n center: LocationValue\n zoom: number\n}\n\n/** Tbilisi — the default view when there's no pin. */\nexport const TBILISI: LocationValue = { lat: 41.7151, lng: 44.8271 }\nconst DEFAULT_ZOOM = 12\n/** Google's zoom range (world … building). */\nconst MIN_ZOOM = 0\nconst MAX_ZOOM = 22\n/** Zoom used when \"my location\" jumps to the user. */\nconst LOCATE_ZOOM = 16\n\nexport interface LocationPickerProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'color'\n> {\n /** Controlled value — `{ lat, lng }`, or `null` for no pin. */\n value?: LocationValue | null\n /** Initial value for uncontrolled use. */\n defaultValue?: LocationValue | null\n /** Fires with the new point (map click, pin drag, typed coordinates, \"my location\") or `null` when cleared. */\n onChange?: (value: LocationValue | null) => void\n /** Form field name — binds the value to a surrounding `<Form>` (value = `{ lat, lng } | null`). */\n name?: string\n /** Label above the map. */\n label?: ReactNode\n /** Helper / validation text under the fields. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Error state — red frame + helper. */\n error?: boolean\n /** Shows a required asterisk after the label. */\n required?: boolean\n /** Read-only: the map can be looked at but not pinned, the fields are disabled. */\n disabled?: boolean\n /** Size of the latitude / longitude fields. Defaults to `md`. */\n size?: LocationPickerSize\n /** Google Maps API key. Defaults to `config.maps.apiKey`. */\n apiKey?: string\n /** Google Map ID (cloud styling + advanced marker). Defaults to `config.maps.mapId`. */\n mapId?: string\n /** Controlled map centre. Defaults to the pin, else Tbilisi. */\n center?: LocationValue\n /** Initial map centre (uncontrolled). Defaults to the value's pin, else Tbilisi. */\n defaultCenter?: LocationValue\n /** Fires after the map is panned (once it settles) with the new centre. */\n onCenterChange?: (center: LocationValue) => void\n /** Controlled zoom level. */\n zoom?: number\n /** Initial zoom level (uncontrolled). Defaults to `12` (a city). */\n defaultZoom?: number\n /** Fires with the new zoom level. */\n onZoomChange?: (zoom: number) => void\n /** Height of the map in px. Defaults to `300`. */\n mapHeight?: number\n /** Show the \"my location\" button (browser geolocation). Defaults to `true`. */\n locateButton?: boolean\n /** Decimal places the coordinates are kept to. Defaults to `6` (~0.1 m). */\n precision?: number\n /**\n * Show an **address / place search** above the map (Google **Places API (New)** — enable it for the key).\n * Picking a result drops the pin there and moves the map to it. Defaults to `false`.\n */\n search?: boolean\n /** Restrict the search to these regions (ISO 3166-1 alpha-2 codes, e.g. `['ge']`). Default: worldwide. */\n searchRegions?: string[]\n /**\n * Look up the **address of the pin** (Google **Geocoding API** — enable it for the key) and show it under the\n * map; reported through `onAddressChange` / `addressName`. A place picked from the search brings its own\n * address (no extra lookup). Defaults to `false`.\n */\n geocode?: boolean\n /** Fires with the pin's address after a user change (`null` when there's no pin / no address). */\n onAddressChange?: (address: string | null) => void\n /** Inside a `<Form>`: the field the pin's address is written to (e.g. `\"address\"`), alongside the coordinates. */\n addressName?: string\n}\n\ntype MapStatus = 'missingKey' | 'loading' | 'ready' | 'error' | 'authError'\n\nconst round = (n: number, precision: number) => Number(n.toFixed(precision))\nconst sameCenter = (a: LocationValue, b: LocationValue) =>\n Math.abs(a.lat - b.lat) < 1e-7 && Math.abs(a.lng - b.lng) < 1e-7\nconst formatCoord = (n: number | undefined, precision: number) =>\n n == null ? '' : String(round(n, precision))\n\n/** Parse one coordinate draft → a number in range, `null` for empty, `undefined` for invalid. */\nfunction parseCoord(draft: string, limit: number): number | null | undefined {\n const s = draft.trim().replace(',', '.')\n if (s === '') return null\n if (!/^[-+]?\\d+(\\.\\d*)?$/.test(s)) return undefined // a trailing '.' while typing is fine\n const n = Number(s)\n return Math.abs(n) <= limit ? n : undefined\n}\n\n/** A pasted \"41.7151, 44.8271\" (or \"41.7151 44.8271\") → both coordinates. */\nfunction parsePair(text: string): LocationValue | null {\n const m = text.trim().match(/^\\(?\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*[,;\\s]\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)?$/)\n if (!m) return null\n const lat = Number(m[1])\n const lng = Number(m[2])\n return Math.abs(lat) <= 90 && Math.abs(lng) <= 180 ? { lat, lng } : null\n}\n\n/** A theme color token (`--tz-color-<name>-rgb`) as `#rrggbb`, read live from `<html>`. */\nfunction tokenHex(name: string, fallback: string): string {\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(`--tz-color-${name}-rgb`)\n .trim()\n if (!raw) return fallback\n const [r, g, b] = raw.split(',').map((v) => Number(v.trim()))\n if ([r, g, b].some((v) => Number.isNaN(v))) return fallback\n return `#${[r, g, b].map((v) => v.toString(16).padStart(2, '0')).join('')}`\n}\n\n/**\n * The pin: a teardrop in the theme's **accent** color with a white rim, a white centre dot and a soft drop\n * shadow (so it reads on light and dark tiles alike). Drawn on a 40×52 grid — the tip at (20, 45), the rest\n * of the box is the shadow's room — and rendered at 34×44.\n */\nconst PIN_VIEW = { width: 40, height: 52, tipX: 20, tipY: 45 }\nconst PIN_SIZE = { width: 34, height: 44 }\nfunction pinIcon(color: string): PinIcon {\n const scale = PIN_SIZE.width / PIN_VIEW.width\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${PIN_VIEW.width}\" height=\"${PIN_VIEW.height}\" viewBox=\"0 0 ${PIN_VIEW.width} ${PIN_VIEW.height}\">` +\n `<defs><filter id=\"s\" x=\"-40%\" y=\"-20%\" width=\"180%\" height=\"160%\">` +\n `<feDropShadow dx=\"0\" dy=\"2\" stdDeviation=\"1.8\" flood-color=\"#000\" flood-opacity=\".3\"/></filter></defs>` +\n `<path filter=\"url(#s)\" fill=\"${color}\" stroke=\"#fff\" stroke-width=\"2.2\" stroke-linejoin=\"round\" ` +\n `d=\"M20 3C11.2 3 4 10 4 18.7c0 10.9 13.3 24 14.7 25.3a1.9 1.9 0 0 0 2.6 0C22.7 42.7 36 29.6 36 18.7 36 10 28.8 3 20 3Z\"/>` +\n `<circle cx=\"20\" cy=\"18.5\" r=\"6.2\" fill=\"#fff\"/>` +\n `</svg>`\n return {\n svg,\n width: PIN_SIZE.width,\n height: PIN_SIZE.height,\n anchorX: PIN_VIEW.tipX * scale,\n anchorY: PIN_VIEW.tipY * scale,\n }\n}\n/** The accent the pin is painted with right now (the brand teal before a theme has been applied). */\nconst accentPin = () => pinIcon(tokenHex('accent', '#056472'))\n\n/** A dark map built from the live theme tokens, so it matches the panel (classic styling, no `mapId`). */\nfunction darkMapStyles(): Record<string, unknown>[] {\n const css = getComputedStyle(document.documentElement)\n const rgb = (name: string, fallback: string) => {\n const raw = css.getPropertyValue(`--tz-color-${name}-rgb`).trim()\n if (!raw) return fallback\n const [r, g, b] = raw.split(',').map((v) => Number(v.trim()))\n return `#${[r, g, b].map((v) => v.toString(16).padStart(2, '0')).join('')}`\n }\n const surface = rgb('surface', '#191919')\n const background = rgb('background', '#0f0f0f')\n const text = rgb('primary', '#e6e8eb')\n const accent = rgb('accent', '#16a6b4')\n return [\n { elementType: 'geometry', stylers: [{ color: surface }] },\n { elementType: 'labels.text.fill', stylers: [{ color: text }, { lightness: -35 }] },\n { elementType: 'labels.text.stroke', stylers: [{ color: background }] },\n { featureType: 'road', elementType: 'geometry', stylers: [{ color: background }] },\n { featureType: 'road', elementType: 'geometry.stroke', stylers: [{ color: surface }] },\n {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [{ color: accent }, { lightness: -55 }],\n },\n {\n featureType: 'poi',\n elementType: 'geometry',\n stylers: [{ color: surface }, { lightness: 4 }],\n },\n { featureType: 'transit', stylers: [{ visibility: 'off' }] },\n ]\n}\n\n/**\n * A location picker: a **Google Map** you click to drop a pin (drag it to adjust), with **latitude / longitude**\n * fields below that stay in sync both ways — pasting `\"41.7151, 44.8271\"` into either fills both. The value is\n * `{ lat, lng } | null`; binds to a `<Form>` by `name`. The map shows **Tbilisi** by default, doesn't hijack the\n * page scroll (Ctrl / ⌘ + scroll zooms), offers **my location**, **centre on pin** and **remove pin**, and a\n * copyable coordinate pill. Its **view is controllable** (`center` / `zoom` + `onCenterChange` / `onZoomChange`,\n * or `defaultCenter` / `defaultZoom`). The Maps JavaScript API is loaded on demand with the `apiKey` prop or\n * `config.maps.apiKey`; without a key (or if loading fails) the fields keep working and the map says why.\n */\nexport const LocationPicker = forwardRef<HTMLDivElement, LocationPickerProps>(\n function LocationPicker(\n {\n value,\n defaultValue = null,\n onChange,\n name,\n label,\n helperText,\n error,\n required = false,\n disabled = false,\n size = 'md',\n apiKey: apiKeyProp,\n mapId: mapIdProp,\n center,\n defaultCenter,\n onCenterChange,\n zoom,\n defaultZoom = DEFAULT_ZOOM,\n onZoomChange,\n mapHeight = 300,\n locateButton = true,\n precision = 6,\n search = false,\n searchRegions,\n geocode = false,\n onAddressChange,\n addressName,\n className,\n style,\n ...props\n },\n ref,\n ) {\n const t = useT()\n const { language } = useLanguage()\n const colorMode = useColorMode()\n const mapsConfig = useMapsConfig()\n const apiKey = apiKeyProp ?? mapsConfig.apiKey\n const mapId = mapIdProp ?? mapsConfig.mapId\n const reactId = useId()\n const labelId = `${reactId}-label`\n\n // ── value: controlled / form-bound / uncontrolled ──\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = isFormBound ? form!.field(name!) : undefined\n const [internal, setInternal] = useState<LocationValue | null>(defaultValue)\n const current: LocationValue | null =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as LocationValue | null | undefined) ?? null)\n : internal\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n // ── the pin's address (search result or reverse geocode) ──\n const userChangedRef = useRef(false)\n const [address, setAddress] = useState<string | null>(null)\n const [addressLoading, setAddressLoading] = useState(false)\n // a place picked from the search brings its address — remembered for that exact point, so it isn't re-looked up\n const knownAddressRef = useRef<(LocationValue & { address: string }) | null>(null)\n const geocodeRequestRef = useRef(0)\n\n const commit = useCallback(\n (next: LocationValue | null) => {\n const rounded = next && { lat: round(next.lat, precision), lng: round(next.lng, precision) }\n userChangedRef.current = true // from here on, address changes are reported (not on the initial load)\n if (value === undefined && !isFormBound) setInternal(rounded)\n if (isFormBound) form!.setValue(name!, rounded as never)\n onChange?.(rounded)\n },\n [value, isFormBound, form, name, onChange, precision],\n )\n const commitRef = useRef(commit)\n commitRef.current = commit\n\n // ── the two coordinate drafts (strings while typing; synced from the value when it changes) ──\n const [latDraft, setLatDraft] = useState(() => formatCoord(current?.lat, precision))\n const [lngDraft, setLngDraft] = useState(() => formatCoord(current?.lng, precision))\n // rewrite the drafts only when they no longer describe the value (a map click, \"remove pin\", an outside\n // change) — never for a change that came from the fields themselves: clearing one of a pair makes the value\n // `null`, and the half-typed other field must stay as the user left it\n const draftsRef = useRef({ lat: latDraft, lng: lngDraft })\n draftsRef.current = { lat: latDraft, lng: lngDraft }\n useEffect(() => {\n const la = parseCoord(draftsRef.current.lat, 90)\n const ln = parseCoord(draftsRef.current.lng, 180)\n const pair = la != null && ln != null ? { lat: la, lng: ln } : null\n const inSync = current ? pair != null && sameCenter(pair, current) : pair == null\n if (inSync) return\n setLatDraft(formatCoord(current?.lat, precision))\n setLngDraft(formatCoord(current?.lng, precision))\n }, [current?.lat, current?.lng, precision]) // eslint-disable-line react-hooks/exhaustive-deps\n const latParsed = parseCoord(latDraft, 90)\n const lngParsed = parseCoord(lngDraft, 180)\n // which field the user has typed in / left — a half-filled pair is only flagged on a field they've touched\n const [touched, setTouched] = useState({ lat: false, lng: false })\n const latMissing = latParsed === null && lngParsed != null && touched.lat\n const lngMissing = lngParsed === null && latParsed != null && touched.lng\n\n // ── the map ──\n // a `<Form>`'s scroll-to-error looks for `[name=\"…\"]` and focuses it — mirror the field name onto the map\n // frame (focusable via tabIndex -1), so an invalid location scrolls the map into view and rings it. Not on\n // the inputs: React re-sets an <input>'s `name` on every update, and passing `name` to a TextField would\n // bind it to the form as a plain string field.\n const frameRef = useRef<HTMLDivElement | null>(null)\n useEffect(() => {\n const el = frameRef.current\n if (!el) return\n if (name) el.setAttribute('name', name)\n else el.removeAttribute('name')\n }, [name])\n\n const mapEl = useRef<HTMLDivElement | null>(null)\n const mapRef = useRef<MapsMap | null>(null)\n const pinRef = useRef<MapsPin | null>(null)\n const apiRef = useRef<GoogleMapsApi | null>(null)\n const [status, setStatus] = useState<MapStatus>(apiKey ? 'loading' : 'missingKey')\n const [locating, setLocating] = useState(false)\n const [locateFailed, setLocateFailed] = useState(false)\n\n const initialCenter = center ?? defaultCenter ?? current ?? TBILISI\n const initialZoom = zoom ?? defaultZoom\n const viewRef = useRef({ center: initialCenter, zoom: initialZoom })\n const onCenterChangeRef = useRef(onCenterChange)\n onCenterChangeRef.current = onCenterChange\n const onZoomChangeRef = useRef(onZoomChange)\n onZoomChangeRef.current = onZoomChange\n const disabledRef = useRef(disabled)\n disabledRef.current = disabled\n const currentRef = useRef(current)\n currentRef.current = current\n\n // with a Map ID, light / dark is Google's `colorScheme` — fixed when the map is created, so a mode change\n // rebuilds the map (view + pin carry over via the refs). Without one the JSON styles below switch in place.\n const mapScheme = mapId ? colorMode : null\n\n // load the API + build the map (once per key / map id / scheme)\n useEffect(() => {\n if (!apiKey) {\n setStatus('missingKey')\n return\n }\n let cancelled = false\n const listeners: { remove(): void }[] = []\n // a fresh host per build — a new Map in a node that already holds one would stack them\n let host: HTMLDivElement | null = null\n // only the first build shows the skeleton; a rebuild (scheme change) keeps the controls in place\n if (!apiRef.current) setStatus('loading')\n // Google rejected the key (referrer restriction, API not enabled, billing…) — cover its grey \"Oops!\" with ours\n const stopAuth = onMapsAuthFailure(() => {\n if (!cancelled) setStatus('authError')\n })\n loadGoogleMaps(apiKey, language.split('-')[0])\n .then((api) => {\n if (cancelled || !mapEl.current) return\n apiRef.current = api\n host = document.createElement('div')\n host.className = styles.mapHost\n mapEl.current.appendChild(host)\n const map = api.createMap(host, {\n center: viewRef.current.center,\n zoom: viewRef.current.zoom,\n ...(mapId ? { mapId, colorScheme: api.colorScheme(mapScheme ?? 'light') } : {}),\n disableDefaultUI: true,\n zoomControl: false, // our own + / − (styled like the other map buttons)\n clickableIcons: false,\n gestureHandling: 'cooperative',\n draggableCursor: disabledRef.current ? undefined : 'crosshair',\n })\n mapRef.current = map\n const pin = api.createPin(map, {\n position: currentRef.current,\n advanced: Boolean(mapId),\n icon: accentPin(),\n })\n pin.setDraggable(!disabledRef.current)\n pinRef.current = pin\n listeners.push(\n map.addListener('click', (e) => {\n if (disabledRef.current || !e.latLng) return\n commitRef.current({ lat: e.latLng.lat(), lng: e.latLng.lng() })\n }),\n pin.onDragEnd((p) => commitRef.current(p)),\n map.addListener('zoom_changed', () => {\n const z = map.getZoom()\n if (z == null || z === viewRef.current.zoom) return\n viewRef.current = { ...viewRef.current, zoom: z }\n onZoomChangeRef.current?.(z)\n }),\n map.addListener('idle', () => {\n const c = map.getCenter()\n if (!c) return\n const next = { lat: c.lat(), lng: c.lng() }\n if (sameCenter(next, viewRef.current.center)) return\n viewRef.current = { ...viewRef.current, center: next }\n onCenterChangeRef.current?.(next)\n }),\n )\n setStatus((s) => (s === 'authError' ? s : 'ready'))\n })\n .catch(() => {\n if (!cancelled) setStatus('error')\n })\n return () => {\n cancelled = true\n stopAuth()\n listeners.forEach((l) => l.remove())\n pinRef.current?.remove()\n pinRef.current = null\n mapRef.current = null\n host?.remove()\n }\n // the map is rebuilt only for a new key / map id / (Map ID) color scheme; everything else syncs below\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiKey, mapId, mapScheme])\n\n // pin follows the value\n useEffect(() => {\n pinRef.current?.setPosition(current)\n }, [current, status])\n\n // read-only toggles\n useEffect(() => {\n pinRef.current?.setDraggable(!disabled)\n mapRef.current?.setOptions({ draggableCursor: disabled ? undefined : 'crosshair' })\n }, [disabled, status])\n\n // controlled view: apply `center` / `zoom` when they change from outside\n useEffect(() => {\n const map = mapRef.current\n if (!map || !center || sameCenter(center, viewRef.current.center)) return\n viewRef.current = { ...viewRef.current, center }\n map.setCenter(center)\n }, [center?.lat, center?.lng, status]) // eslint-disable-line react-hooks/exhaustive-deps\n useEffect(() => {\n const map = mapRef.current\n if (!map || zoom == null || zoom === viewRef.current.zoom) return\n viewRef.current = { ...viewRef.current, zoom }\n map.setZoom(zoom)\n }, [zoom, status])\n\n // the pin follows the accent — repaint it when the theme on <html> changes (Settings: accent / light-dark)\n useEffect(() => {\n if (status !== 'ready' || typeof MutationObserver === 'undefined') return\n let color = tokenHex('accent', '#056472')\n const observer = new MutationObserver(() => {\n const next = tokenHex('accent', '#056472')\n if (next === color) return\n color = next\n pinRef.current?.setIcon(pinIcon(next))\n })\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-tz-theme'],\n })\n return () => observer.disconnect()\n }, [status])\n\n // dark map in dark mode (classic styling only — a `mapId` brings its own cloud style)\n useEffect(() => {\n if (!mapRef.current || mapId) return\n mapRef.current.setOptions({ styles: colorMode === 'dark' ? darkMapStyles() : null })\n }, [colorMode, mapId, status])\n\n const zoomBy = (delta: number) => {\n const map = mapRef.current\n if (!map) return\n map.setZoom(\n Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, (map.getZoom() ?? viewRef.current.zoom) + delta)),\n )\n }\n\n const reportAddress = (next: string | null) => {\n if (!userChangedRef.current) return // the initial load just displays it\n onAddressChange?.(next)\n if (form && addressName) form.setValue(addressName, (next ?? '') as never)\n }\n const reportAddressRef = useRef(reportAddress)\n reportAddressRef.current = reportAddress\n\n // resolve the address whenever the pin moves: the search's own address, else (with `geocode`) a debounced\n // reverse geocode — only the latest answer counts\n useEffect(() => {\n const id = ++geocodeRequestRef.current\n if (!current) {\n setAddress(null)\n setAddressLoading(false)\n reportAddressRef.current(null)\n return\n }\n const known = knownAddressRef.current\n if (known && sameCenter(known, current)) {\n setAddress(known.address)\n setAddressLoading(false)\n reportAddressRef.current(known.address)\n return\n }\n if (!geocode || status !== 'ready' || !apiRef.current) {\n setAddress(null)\n setAddressLoading(false)\n return\n }\n setAddress(null) // the old point's address would be wrong while the new one loads\n setAddressLoading(true)\n const api = apiRef.current\n const point = current\n const timer = window.setTimeout(() => {\n api.reverseGeocode(point, language.split('-')[0]).then((resolved) => {\n if (id !== geocodeRequestRef.current) return\n setAddress(resolved)\n setAddressLoading(false)\n reportAddressRef.current(resolved)\n })\n }, 400)\n return () => window.clearTimeout(timer)\n }, [current?.lat, current?.lng, geocode, status, language]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const handlePlacePick = (place: { location: LatLngLiteral; address?: string }) => {\n const point = {\n lat: round(place.location.lat, precision),\n lng: round(place.location.lng, precision),\n }\n knownAddressRef.current = place.address ? { ...point, address: place.address } : null\n commit(point)\n panToPin(point, LOCATE_ZOOM)\n }\n\n const panToPin = (point: LatLngLiteral, zoomTo?: number) => {\n const map = mapRef.current\n if (!map) return\n map.panTo(point)\n if (zoomTo != null && (map.getZoom() ?? 0) < zoomTo) map.setZoom(zoomTo)\n }\n\n // ── fields ──\n const commitDrafts = (lat: string, lng: string) => {\n const la = parseCoord(lat, 90)\n const ln = parseCoord(lng, 180)\n // the value mirrors the fields exactly: a pin only while BOTH are filled and valid — clear / break either\n // one and the pin goes (and a required rule fires)\n if (la == null || ln == null) {\n if (current) commit(null)\n return\n }\n const next = { lat: la, lng: ln }\n if (current && sameCenter(next, current)) return\n commit(next)\n panToPin(next)\n }\n const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {\n const pair = parsePair(event.clipboardData.getData('text'))\n if (!pair) return\n event.preventDefault()\n setLatDraft(String(round(pair.lat, precision)))\n setLngDraft(String(round(pair.lng, precision)))\n commit(pair)\n panToPin(pair)\n }\n\n const locate = () => {\n if (!navigator.geolocation) return\n setLocating(true)\n setLocateFailed(false)\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n setLocating(false)\n const point = { lat: pos.coords.latitude, lng: pos.coords.longitude }\n commit(point)\n panToPin(point, LOCATE_ZOOM)\n },\n () => {\n setLocating(false)\n setLocateFailed(true)\n },\n { enableHighAccuracy: true, timeout: 10000 },\n )\n }\n\n const pinText = current\n ? `${round(current.lat, precision)}, ${round(current.lng, precision)}`\n : ''\n const statusMessage =\n status === 'missingKey'\n ? t('location.missingKey')\n : status === 'authError'\n ? t('location.authError')\n : status === 'error'\n ? t('location.loadError')\n : null\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={label != null ? labelId : undefined}\n className={clsx(styles.root, disabled && styles.disabled, className)}\n style={{ '--tz-location-map-height': `${mapHeight}px`, ...style } as CSSProperties}\n {...props}\n >\n {label != null && (\n <div className={styles.label} id={labelId}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </div>\n )}\n\n {search && status === 'ready' && apiRef.current && !disabled && (\n <PlaceSearch\n api={apiRef.current}\n language={language.split('-')[0]}\n bias={() => {\n const c = mapRef.current?.getCenter()\n return c ? { lat: c.lat(), lng: c.lng() } : viewRef.current.center\n }}\n regions={searchRegions}\n size={size}\n onPick={handlePlacePick}\n />\n )}\n\n <div\n ref={frameRef}\n tabIndex={-1}\n className={clsx(styles.frame, resolvedError && styles.error)}\n >\n <div\n ref={mapEl}\n className={styles.map}\n role=\"application\"\n aria-label={t('location.mapLabel')}\n data-testid=\"location-map\"\n />\n\n {status === 'loading' && (\n <div className={styles.cover} aria-hidden=\"true\">\n <Skeleton variant=\"rect\" width=\"100%\" height=\"100%\" radius=\"xxs\" />\n </div>\n )}\n\n {statusMessage && (\n <div className={clsx(styles.cover, styles.message)} role=\"status\">\n <span className={styles.messageIcon}>\n <Icon name=\"Map\" />\n </span>\n <Typography variant=\"bodySmall\" color=\"muted\" align=\"center\">\n {statusMessage}\n </Typography>\n </div>\n )}\n\n {status === 'ready' && (\n <>\n <div className={styles.controls}>\n {locateButton &&\n !disabled &&\n typeof navigator !== 'undefined' &&\n navigator.geolocation && (\n <Tooltip\n content={locateFailed ? t('location.locateFailed') : t('location.locate')}\n placement=\"left\"\n >\n <IconButton\n size=\"sm\"\n color=\"surface\"\n className={styles.control}\n aria-label={t('location.locate')}\n loading={locating}\n onClick={locate}\n >\n <Icon name={locateFailed ? 'GpsSlash' : 'Gps'} />\n </IconButton>\n </Tooltip>\n )}\n {current && (\n <Tooltip content={t('location.centerOnPin')} placement=\"left\">\n <IconButton\n size=\"sm\"\n color=\"surface\"\n className={styles.control}\n aria-label={t('location.centerOnPin')}\n onClick={() => panToPin(current)}\n >\n <Icon name=\"Location\" />\n </IconButton>\n </Tooltip>\n )}\n {current && !disabled && (\n <Tooltip content={t('location.removePin')} placement=\"left\">\n <IconButton\n size=\"sm\"\n color=\"surface\"\n className={styles.control}\n aria-label={t('location.removePin')}\n onClick={() => commit(null)}\n >\n <Icon name=\"LocationCross\" />\n </IconButton>\n </Tooltip>\n )}\n </div>\n\n <div className={clsx(styles.controls, styles.zoomControls)}>\n <Tooltip content={t('location.zoomIn')} placement=\"left\">\n <IconButton\n size=\"sm\"\n color=\"surface\"\n className={styles.control}\n aria-label={t('location.zoomIn')}\n onClick={() => zoomBy(1)}\n >\n <Icon name=\"Add\" />\n </IconButton>\n </Tooltip>\n <Tooltip content={t('location.zoomOut')} placement=\"left\">\n <IconButton\n size=\"sm\"\n color=\"surface\"\n className={styles.control}\n aria-label={t('location.zoomOut')}\n onClick={() => zoomBy(-1)}\n >\n <Icon name=\"Minus\" />\n </IconButton>\n </Tooltip>\n </div>\n\n <div className={styles.badge} aria-live=\"polite\">\n {current ? (\n <>\n <Icon name=\"Location\" size=\"sm\" className={styles.badgeIcon} />\n <span className={styles.coords}>{pinText}</span>\n <CopyButton value={pinText} size=\"sm\" className={styles.copy} />\n </>\n ) : (\n !disabled && (\n <>\n <Icon name=\"LocationAdd\" size=\"sm\" className={styles.badgeIcon} />\n <span>{t('location.hint')}</span>\n </>\n )\n )}\n </div>\n </>\n )}\n </div>\n\n {(geocode || search) && current && (address || addressLoading) && (\n <div className={styles.address} aria-live=\"polite\">\n <Icon name=\"Location\" size=\"sm\" className={styles.addressIcon} />\n {addressLoading && !address ? (\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {t('location.addressLoading')}\n </Typography>\n ) : (\n <Typography as=\"span\" variant=\"bodySmall\" className={styles.addressText}>\n {address}\n </Typography>\n )}\n </div>\n )}\n\n <div className={styles.fields}>\n <TextField\n label={t('location.latitude')}\n size={size}\n inputMode=\"decimal\"\n placeholder={String(TBILISI.lat)}\n value={latDraft}\n disabled={disabled}\n error={resolvedError || latParsed === undefined || latMissing}\n helperText={\n latParsed === undefined\n ? t('location.latitudeRange')\n : latMissing\n ? t('location.pairIncomplete')\n : undefined\n }\n onChange={(e) => {\n setLatDraft(e.target.value)\n setTouched((s) => (s.lat ? s : { ...s, lat: true }))\n commitDrafts(e.target.value, lngDraft)\n }}\n onPaste={handlePaste}\n onBlur={(e) => {\n setTouched((s) => (s.lat ? s : { ...s, lat: true }))\n bound?.onBlur(e as never)\n }}\n />\n <TextField\n label={t('location.longitude')}\n size={size}\n inputMode=\"decimal\"\n placeholder={String(TBILISI.lng)}\n value={lngDraft}\n disabled={disabled}\n error={resolvedError || lngParsed === undefined || lngMissing}\n helperText={\n lngParsed === undefined\n ? t('location.longitudeRange')\n : lngMissing\n ? t('location.pairIncomplete')\n : undefined\n }\n onChange={(e) => {\n setLngDraft(e.target.value)\n setTouched((s) => (s.lng ? s : { ...s, lng: true }))\n commitDrafts(latDraft, e.target.value)\n }}\n onPaste={handlePaste}\n onBlur={(e) => {\n setTouched((s) => (s.lng ? s : { ...s, lng: true }))\n bound?.onBlur(e as never)\n }}\n />\n </div>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n },\n)\n"],"names":["SCRIPT_ID","CALLBACK","pending","geocodeDeniedWarned","authFailed","authListeners","installAuthFailureHook","g","previous","listener","onMapsAuthFailure","googleNs","toLiteral","p","injectScript","apiKey","language","resolve","reject","params","script","buildApi","ns","_a","core","maps","marker","lib","drop","_b","svgUrl","svg","markerIcon","icon","pinElement","img","placesLib","geocodingLib","places","geocoding","mode","token","predictions","input","bias","regions","suggestions","s","i","id","primary","_c","prediction","place","position","results","error","element","options","map","advanced","pin","next","d","handler","loadGoogleMaps","promise","check","DEBOUNCE_MS","MIN_CHARS","PlaceSearch","api","size","disabled","onPick","t","useT","listId","useId","anchorRef","useRef","sessionRef","requestRef","query","setQuery","useState","setSuggestions","state","setState","open","setOpen","active","setActive","resolving","setResolving","session","useEffect","timer","list","pick","suggestion","handleKeyDown","event","step","showPanel","optionId","styles","jsx","TextField","Loader","Icon","e","FloatingPanel","jsxs","Typography","ListItem","TBILISI","DEFAULT_ZOOM","MIN_ZOOM","MAX_ZOOM","LOCATE_ZOOM","round","precision","sameCenter","a","b","formatCoord","parseCoord","draft","limit","n","parsePair","text","m","lat","lng","tokenHex","name","fallback","raw","r","v","PIN_VIEW","PIN_SIZE","pinIcon","color","scale","accentPin","darkMapStyles","css","rgb","surface","background","accent","LocationPicker","forwardRef","value","defaultValue","onChange","label","helperText","required","apiKeyProp","mapIdProp","center","defaultCenter","onCenterChange","zoom","defaultZoom","onZoomChange","mapHeight","locateButton","search","searchRegions","geocode","onAddressChange","addressName","className","style","props","ref","useLanguage","colorMode","useColorMode","mapsConfig","useMapsConfig","mapId","labelId","form","useFormContext","isFormBound","bound","internal","setInternal","current","resolvedError","resolvedHelperText","userChangedRef","address","setAddress","addressLoading","setAddressLoading","knownAddressRef","geocodeRequestRef","commit","useCallback","rounded","commitRef","latDraft","setLatDraft","lngDraft","setLngDraft","draftsRef","la","ln","pair","latParsed","lngParsed","touched","setTouched","latMissing","lngMissing","frameRef","el","mapEl","mapRef","pinRef","apiRef","status","setStatus","locating","setLocating","locateFailed","setLocateFailed","initialCenter","initialZoom","viewRef","onCenterChangeRef","onZoomChangeRef","disabledRef","currentRef","mapScheme","cancelled","listeners","host","stopAuth","z","c","l","observer","zoomBy","delta","reportAddress","reportAddressRef","known","point","resolved","handlePlacePick","panToPin","zoomTo","commitDrafts","handlePaste","locate","pos","pinText","statusMessage","clsx","Skeleton","Fragment","Tooltip","IconButton","CopyButton"],"mappings":"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"}