@mieweb/ui 0.10.0-dev.1 → 0.10.0-dev.11

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 (423) hide show
  1. package/agent/mieweb-ui.instructions.md +13 -1
  2. package/dist/CsvBlock-ROJCKJDP.cjs +16 -0
  3. package/dist/{CsvBlock-CVYA3HYS.cjs.map → CsvBlock-ROJCKJDP.cjs.map} +1 -1
  4. package/dist/CsvBlock-UWPMTLE2.js +7 -0
  5. package/dist/{CsvBlock-SM4NKSHA.js.map → CsvBlock-UWPMTLE2.js.map} +1 -1
  6. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +16 -0
  7. package/dist/{HtmlPreviewBlock-JF454L2L.cjs.map → HtmlPreviewBlock-DWFN6EUB.cjs.map} +1 -1
  8. package/dist/HtmlPreviewBlock-ME5U3XNS.js +7 -0
  9. package/dist/{HtmlPreviewBlock-FAMF4W24.js.map → HtmlPreviewBlock-ME5U3XNS.js.map} +1 -1
  10. package/dist/MermaidBlock-2B6CPD6Y.js +7 -0
  11. package/dist/{MermaidBlock-7V5G4K5A.js.map → MermaidBlock-2B6CPD6Y.js.map} +1 -1
  12. package/dist/MermaidBlock-D2UC5M55.cjs +16 -0
  13. package/dist/{MermaidBlock-FR5SQX4Q.cjs.map → MermaidBlock-D2UC5M55.cjs.map} +1 -1
  14. package/dist/SurveyBlock-4CD4AYMJ.cjs +16 -0
  15. package/dist/{SurveyBlock-MCJVWR7H.cjs.map → SurveyBlock-4CD4AYMJ.cjs.map} +1 -1
  16. package/dist/SurveyBlock-4DO62RBT.js +7 -0
  17. package/dist/{SurveyBlock-6K2POV7S.js.map → SurveyBlock-4DO62RBT.js.map} +1 -1
  18. package/dist/brands/index.cjs +20 -20
  19. package/dist/brands/index.js +4 -4
  20. package/dist/brands/types.cjs +4 -4
  21. package/dist/brands/types.d.cts +9 -0
  22. package/dist/brands/types.d.ts +9 -0
  23. package/dist/brands/types.js +1 -1
  24. package/dist/{chunk-XTHMC76F.cjs → chunk-2G75X6TS.cjs} +4 -4
  25. package/dist/{chunk-XTHMC76F.cjs.map → chunk-2G75X6TS.cjs.map} +1 -1
  26. package/dist/chunk-2IZLKPUW.js +412 -0
  27. package/dist/chunk-2IZLKPUW.js.map +1 -0
  28. package/dist/{chunk-VSVGMMNO.js → chunk-3M7TAXNR.js} +3 -3
  29. package/dist/{chunk-VSVGMMNO.js.map → chunk-3M7TAXNR.js.map} +1 -1
  30. package/dist/{chunk-5Z6UPVGC.cjs → chunk-3QEVGSFG.cjs} +5 -5
  31. package/dist/{chunk-5Z6UPVGC.cjs.map → chunk-3QEVGSFG.cjs.map} +1 -1
  32. package/dist/{chunk-PYHFVYVZ.js → chunk-3QGS6CXD.js} +3 -3
  33. package/dist/{chunk-PYHFVYVZ.js.map → chunk-3QGS6CXD.js.map} +1 -1
  34. package/dist/chunk-3YBS4WUQ.js +52 -0
  35. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  36. package/dist/chunk-462XSCP3.cjs +199 -0
  37. package/dist/chunk-462XSCP3.cjs.map +1 -0
  38. package/dist/{chunk-X5YM3KXY.js → chunk-4A3W4TQF.js} +201 -4
  39. package/dist/chunk-4A3W4TQF.js.map +1 -0
  40. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  41. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  42. package/dist/chunk-4NCDU5IG.cjs +56 -0
  43. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  44. package/dist/{chunk-WOYUQ4AT.js → chunk-5GOWFNQ6.js} +9 -3
  45. package/dist/chunk-5GOWFNQ6.js.map +1 -0
  46. package/dist/chunk-5GUOOLPR.cjs +436 -0
  47. package/dist/chunk-5GUOOLPR.cjs.map +1 -0
  48. package/dist/{chunk-WUBMDOTG.js → chunk-5JJ2DAE4.js} +4 -4
  49. package/dist/{chunk-WUBMDOTG.js.map → chunk-5JJ2DAE4.js.map} +1 -1
  50. package/dist/{chunk-RSCA5AZW.cjs → chunk-5MCBWTIF.cjs} +4 -4
  51. package/dist/{chunk-RSCA5AZW.cjs.map → chunk-5MCBWTIF.cjs.map} +1 -1
  52. package/dist/chunk-6EN3IQQI.cjs +332 -0
  53. package/dist/chunk-6EN3IQQI.cjs.map +1 -0
  54. package/dist/chunk-74ENCTIK.js +162 -0
  55. package/dist/chunk-74ENCTIK.js.map +1 -0
  56. package/dist/chunk-76TBQDED.js +166 -0
  57. package/dist/chunk-76TBQDED.js.map +1 -0
  58. package/dist/{chunk-OAZUDUGX.js → chunk-7IBZA7G6.js} +4 -4
  59. package/dist/{chunk-OAZUDUGX.js.map → chunk-7IBZA7G6.js.map} +1 -1
  60. package/dist/{chunk-AUOTJQGO.cjs → chunk-7ZDPD5ZX.cjs} +4 -4
  61. package/dist/{chunk-AUOTJQGO.cjs.map → chunk-7ZDPD5ZX.cjs.map} +1 -1
  62. package/dist/{chunk-IB54SKWB.cjs → chunk-7ZXAQTV4.cjs} +8 -8
  63. package/dist/{chunk-IB54SKWB.cjs.map → chunk-7ZXAQTV4.cjs.map} +1 -1
  64. package/dist/{chunk-IIFQ6BSJ.js → chunk-ACCAXVOG.js} +6 -6
  65. package/dist/{chunk-IIFQ6BSJ.js.map → chunk-ACCAXVOG.js.map} +1 -1
  66. package/dist/{chunk-QO6PRHDX.cjs → chunk-AR7AKDM2.cjs} +2 -2
  67. package/dist/{chunk-QO6PRHDX.cjs.map → chunk-AR7AKDM2.cjs.map} +1 -1
  68. package/dist/{chunk-PY7XAG4D.cjs → chunk-ASSDGS4F.cjs} +201 -4
  69. package/dist/chunk-ASSDGS4F.cjs.map +1 -0
  70. package/dist/{chunk-24SEAAOH.js → chunk-AWJBOND5.js} +2 -2
  71. package/dist/{chunk-24SEAAOH.js.map → chunk-AWJBOND5.js.map} +1 -1
  72. package/dist/chunk-BM35CACB.js +148 -0
  73. package/dist/chunk-BM35CACB.js.map +1 -0
  74. package/dist/chunk-CR2SDI23.cjs +322 -0
  75. package/dist/chunk-CR2SDI23.cjs.map +1 -0
  76. package/dist/{chunk-OSPTA4UR.js → chunk-DEDN5HAG.js} +3 -3
  77. package/dist/{chunk-OSPTA4UR.js.map → chunk-DEDN5HAG.js.map} +1 -1
  78. package/dist/chunk-DZ5HFLRC.js +258 -0
  79. package/dist/chunk-DZ5HFLRC.js.map +1 -0
  80. package/dist/{chunk-PKD3JLS2.cjs → chunk-E4IBHYJ7.cjs} +9 -9
  81. package/dist/{chunk-PKD3JLS2.cjs.map → chunk-E4IBHYJ7.cjs.map} +1 -1
  82. package/dist/{chunk-QSVQABXD.js → chunk-ENKFJJZX.js} +7 -7
  83. package/dist/{chunk-QSVQABXD.js.map → chunk-ENKFJJZX.js.map} +1 -1
  84. package/dist/{chunk-MUIDWFYJ.js → chunk-FJ7YPVKV.js} +3 -3
  85. package/dist/{chunk-MUIDWFYJ.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  86. package/dist/{chunk-3LHICE4I.cjs → chunk-FXO5ARBB.cjs} +5 -5
  87. package/dist/{chunk-3LHICE4I.cjs.map → chunk-FXO5ARBB.cjs.map} +1 -1
  88. package/dist/{chunk-QKAYRHWP.cjs → chunk-G3JX3UAU.cjs} +12 -12
  89. package/dist/{chunk-QKAYRHWP.cjs.map → chunk-G3JX3UAU.cjs.map} +1 -1
  90. package/dist/chunk-G4D6CLBT.js +333 -0
  91. package/dist/chunk-G4D6CLBT.js.map +1 -0
  92. package/dist/{chunk-OMAACCFW.cjs → chunk-GD7EBGC4.cjs} +19 -19
  93. package/dist/{chunk-OMAACCFW.cjs.map → chunk-GD7EBGC4.cjs.map} +1 -1
  94. package/dist/{chunk-KREUYVMZ.js → chunk-GOALNQZ2.js} +13 -4
  95. package/dist/chunk-GOALNQZ2.js.map +1 -0
  96. package/dist/{chunk-CK3KLRNF.js → chunk-H4ZXMQQW.js} +3 -3
  97. package/dist/{chunk-CK3KLRNF.js.map → chunk-H4ZXMQQW.js.map} +1 -1
  98. package/dist/chunk-IT775BYG.js +179 -0
  99. package/dist/chunk-IT775BYG.js.map +1 -0
  100. package/dist/{chunk-AHINB2TP.cjs → chunk-IX6KFB3K.cjs} +9 -9
  101. package/dist/{chunk-AHINB2TP.cjs.map → chunk-IX6KFB3K.cjs.map} +1 -1
  102. package/dist/chunk-IXFC7LK2.cjs +174 -0
  103. package/dist/chunk-IXFC7LK2.cjs.map +1 -0
  104. package/dist/{chunk-VNAREBLV.cjs → chunk-J5CSLNCN.cjs} +3 -3
  105. package/dist/{chunk-VNAREBLV.cjs.map → chunk-J5CSLNCN.cjs.map} +1 -1
  106. package/dist/{chunk-MM7QKUE3.cjs → chunk-JID7AZTO.cjs} +5 -5
  107. package/dist/{chunk-MM7QKUE3.cjs.map → chunk-JID7AZTO.cjs.map} +1 -1
  108. package/dist/{chunk-E3KC2XLN.cjs → chunk-KQUI4BGS.cjs} +51 -51
  109. package/dist/{chunk-E3KC2XLN.cjs.map → chunk-KQUI4BGS.cjs.map} +1 -1
  110. package/dist/{chunk-ZB54MTMQ.js → chunk-KZFBQ7GY.js} +3 -3
  111. package/dist/{chunk-ZB54MTMQ.js.map → chunk-KZFBQ7GY.js.map} +1 -1
  112. package/dist/{chunk-XBXDUAIM.js → chunk-LL6IWKI3.js} +4 -4
  113. package/dist/{chunk-XBXDUAIM.js.map → chunk-LL6IWKI3.js.map} +1 -1
  114. package/dist/{chunk-ON4JULCA.js → chunk-LMBXJZLG.js} +3 -3
  115. package/dist/{chunk-ON4JULCA.js.map → chunk-LMBXJZLG.js.map} +1 -1
  116. package/dist/{chunk-ZX2XRFE5.js → chunk-MNILXWVY.js} +7 -7
  117. package/dist/{chunk-ZX2XRFE5.js.map → chunk-MNILXWVY.js.map} +1 -1
  118. package/dist/chunk-MWVW4APN.cjs +260 -0
  119. package/dist/chunk-MWVW4APN.cjs.map +1 -0
  120. package/dist/{chunk-WIAQQNFU.cjs → chunk-MYHV2ND3.cjs} +37 -3
  121. package/dist/chunk-MYHV2ND3.cjs.map +1 -0
  122. package/dist/{chunk-BZAGP5W6.cjs → chunk-N6IY47YA.cjs} +8 -8
  123. package/dist/{chunk-BZAGP5W6.cjs.map → chunk-N6IY47YA.cjs.map} +1 -1
  124. package/dist/{chunk-OCV33S5Q.cjs → chunk-NFKX6QJP.cjs} +3 -3
  125. package/dist/{chunk-OCV33S5Q.cjs.map → chunk-NFKX6QJP.cjs.map} +1 -1
  126. package/dist/{chunk-J644FU54.cjs → chunk-NGQRS7AW.cjs} +9 -3
  127. package/dist/chunk-NGQRS7AW.cjs.map +1 -0
  128. package/dist/{chunk-QAKASRE6.js → chunk-NJ6MY6V5.js} +4 -4
  129. package/dist/{chunk-QAKASRE6.js.map → chunk-NJ6MY6V5.js.map} +1 -1
  130. package/dist/{chunk-P52GA3GJ.cjs → chunk-NM7O7RY5.cjs} +4 -2
  131. package/dist/chunk-NM7O7RY5.cjs.map +1 -0
  132. package/dist/chunk-OCSCBB52.cjs +188 -0
  133. package/dist/chunk-OCSCBB52.cjs.map +1 -0
  134. package/dist/{chunk-OFUKTVBN.cjs → chunk-OD47TTAW.cjs} +9 -9
  135. package/dist/{chunk-OFUKTVBN.cjs.map → chunk-OD47TTAW.cjs.map} +1 -1
  136. package/dist/{chunk-QKFJDQEK.js → chunk-OE5CKRUC.js} +4 -4
  137. package/dist/{chunk-QKFJDQEK.js.map → chunk-OE5CKRUC.js.map} +1 -1
  138. package/dist/chunk-OGNADPM4.cjs +170 -0
  139. package/dist/chunk-OGNADPM4.cjs.map +1 -0
  140. package/dist/{chunk-MBWF36DJ.js → chunk-P2CA3XGI.js} +3 -3
  141. package/dist/{chunk-MBWF36DJ.js.map → chunk-P2CA3XGI.js.map} +1 -1
  142. package/dist/chunk-POWS35OT.js +152 -0
  143. package/dist/chunk-POWS35OT.js.map +1 -0
  144. package/dist/chunk-PYJDVWXM.js +237 -0
  145. package/dist/chunk-PYJDVWXM.js.map +1 -0
  146. package/dist/{chunk-MTZPVOP6.js → chunk-Q77TE5DZ.js} +4 -2
  147. package/dist/chunk-Q77TE5DZ.js.map +1 -0
  148. package/dist/{chunk-L5W7TJQ5.js → chunk-RJ6NTJHC.js} +4 -4
  149. package/dist/{chunk-L5W7TJQ5.js.map → chunk-RJ6NTJHC.js.map} +1 -1
  150. package/dist/{chunk-C3DUS2VE.cjs → chunk-RS5VA6QU.cjs} +3 -3
  151. package/dist/{chunk-C3DUS2VE.cjs.map → chunk-RS5VA6QU.cjs.map} +1 -1
  152. package/dist/{chunk-IGNWT6RP.js → chunk-S7WCHDBO.js} +4 -4
  153. package/dist/{chunk-IGNWT6RP.js.map → chunk-S7WCHDBO.js.map} +1 -1
  154. package/dist/{chunk-RXPEZXAB.cjs → chunk-SGFYA22I.cjs} +5 -5
  155. package/dist/{chunk-RXPEZXAB.cjs.map → chunk-SGFYA22I.cjs.map} +1 -1
  156. package/dist/chunk-SQJFBZ42.js +297 -0
  157. package/dist/chunk-SQJFBZ42.js.map +1 -0
  158. package/dist/chunk-SUS3WFY3.js +156 -0
  159. package/dist/chunk-SUS3WFY3.js.map +1 -0
  160. package/dist/{chunk-H4AVMUOC.cjs → chunk-TAXD5ADA.cjs} +4 -4
  161. package/dist/{chunk-H4AVMUOC.cjs.map → chunk-TAXD5ADA.cjs.map} +1 -1
  162. package/dist/{chunk-NHN6A3ZO.js → chunk-TMMVIUUN.js} +4 -4
  163. package/dist/{chunk-NHN6A3ZO.js.map → chunk-TMMVIUUN.js.map} +1 -1
  164. package/dist/chunk-TPWKM7JH.js +196 -0
  165. package/dist/chunk-TPWKM7JH.js.map +1 -0
  166. package/dist/chunk-TU63764L.cjs +158 -0
  167. package/dist/chunk-TU63764L.cjs.map +1 -0
  168. package/dist/{chunk-7KWNY3HG.js → chunk-TVTIGV7Q.js} +9 -9
  169. package/dist/{chunk-7KWNY3HG.js.map → chunk-TVTIGV7Q.js.map} +1 -1
  170. package/dist/{chunk-22CYDCXA.js → chunk-TZJQB4P2.js} +37 -4
  171. package/dist/chunk-TZJQB4P2.js.map +1 -0
  172. package/dist/{chunk-X5QRRMGB.cjs → chunk-UAMXCMST.cjs} +4 -4
  173. package/dist/{chunk-X5QRRMGB.cjs.map → chunk-UAMXCMST.cjs.map} +1 -1
  174. package/dist/{chunk-QAQOCS2J.js → chunk-UBOVDAD7.js} +3 -3
  175. package/dist/{chunk-QAQOCS2J.js.map → chunk-UBOVDAD7.js.map} +1 -1
  176. package/dist/{chunk-IGSIWNX3.cjs → chunk-UQ3VVR6A.cjs} +4 -4
  177. package/dist/{chunk-IGSIWNX3.cjs.map → chunk-UQ3VVR6A.cjs.map} +1 -1
  178. package/dist/chunk-URAQIF67.cjs +356 -0
  179. package/dist/chunk-URAQIF67.cjs.map +1 -0
  180. package/dist/{chunk-6QKMMKRY.cjs → chunk-UV2FVNWT.cjs} +5 -5
  181. package/dist/{chunk-6QKMMKRY.cjs.map → chunk-UV2FVNWT.cjs.map} +1 -1
  182. package/dist/{chunk-EG7XFZ3W.js → chunk-V7D3YGUV.js} +4 -4
  183. package/dist/{chunk-EG7XFZ3W.js.map → chunk-V7D3YGUV.js.map} +1 -1
  184. package/dist/{chunk-Y6DFMDMH.js → chunk-VILW53UZ.js} +3 -3
  185. package/dist/{chunk-Y6DFMDMH.js.map → chunk-VILW53UZ.js.map} +1 -1
  186. package/dist/chunk-VINZZQBD.cjs +323 -0
  187. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  188. package/dist/{chunk-5WOB4UBD.js → chunk-VKELAMAZ.js} +3 -3
  189. package/dist/{chunk-5WOB4UBD.js.map → chunk-VKELAMAZ.js.map} +1 -1
  190. package/dist/{chunk-IINZWUGK.cjs → chunk-VNYW4C4J.cjs} +13 -4
  191. package/dist/chunk-VNYW4C4J.cjs.map +1 -0
  192. package/dist/{chunk-RD3JDFYJ.js → chunk-VOKVG3ER.js} +4 -4
  193. package/dist/{chunk-RD3JDFYJ.js.map → chunk-VOKVG3ER.js.map} +1 -1
  194. package/dist/chunk-VPTASZ2O.cjs +171 -0
  195. package/dist/chunk-VPTASZ2O.cjs.map +1 -0
  196. package/dist/{chunk-37UZHCLM.cjs → chunk-VPWJCJCX.cjs} +3 -3
  197. package/dist/{chunk-37UZHCLM.cjs.map → chunk-VPWJCJCX.cjs.map} +1 -1
  198. package/dist/{chunk-3RB35GYK.js → chunk-VU6UTJRM.js} +4 -4
  199. package/dist/{chunk-3RB35GYK.js.map → chunk-VU6UTJRM.js.map} +1 -1
  200. package/dist/{chunk-6SAYPXHX.js → chunk-WGPLUCBD.js} +4 -4
  201. package/dist/{chunk-6SAYPXHX.js.map → chunk-WGPLUCBD.js.map} +1 -1
  202. package/dist/{chunk-KLJGJJHN.cjs → chunk-WNZAYBVB.cjs} +49 -49
  203. package/dist/{chunk-KLJGJJHN.cjs.map → chunk-WNZAYBVB.cjs.map} +1 -1
  204. package/dist/{chunk-BVMABVC4.cjs → chunk-WWJIW2IH.cjs} +3 -3
  205. package/dist/{chunk-BVMABVC4.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  206. package/dist/{chunk-OYQ7GYAA.cjs → chunk-X4XPNTCZ.cjs} +12 -12
  207. package/dist/{chunk-OYQ7GYAA.cjs.map → chunk-X4XPNTCZ.cjs.map} +1 -1
  208. package/dist/chunk-XDIMTPZU.cjs +202 -0
  209. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  210. package/dist/{chunk-IFDC4TXM.cjs → chunk-XEAT7XJG.cjs} +4 -4
  211. package/dist/{chunk-IFDC4TXM.cjs.map → chunk-XEAT7XJG.cjs.map} +1 -1
  212. package/dist/{chunk-S3BCHPXT.cjs → chunk-XI34EGK5.cjs} +9 -9
  213. package/dist/{chunk-S3BCHPXT.cjs.map → chunk-XI34EGK5.cjs.map} +1 -1
  214. package/dist/chunk-XVW5DPPP.js +429 -0
  215. package/dist/chunk-XVW5DPPP.js.map +1 -0
  216. package/dist/chunk-XZNN3S3S.cjs +281 -0
  217. package/dist/chunk-XZNN3S3S.cjs.map +1 -0
  218. package/dist/chunk-Y4QNLW7W.js +300 -0
  219. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  220. package/dist/chunk-Y5HFM7LO.js +310 -0
  221. package/dist/chunk-Y5HFM7LO.js.map +1 -0
  222. package/dist/{chunk-LECJMLNE.js → chunk-YQDA366U.js} +3 -3
  223. package/dist/{chunk-LECJMLNE.js.map → chunk-YQDA366U.js.map} +1 -1
  224. package/dist/{chunk-PHK4XBO5.js → chunk-Z5V7SAZ4.js} +4 -4
  225. package/dist/{chunk-PHK4XBO5.js.map → chunk-Z5V7SAZ4.js.map} +1 -1
  226. package/dist/{chunk-TZX76ZNZ.js → chunk-ZGRCSNPK.js} +5 -5
  227. package/dist/{chunk-TZX76ZNZ.js.map → chunk-ZGRCSNPK.js.map} +1 -1
  228. package/dist/{chunk-AZP3DDBT.cjs → chunk-ZPSJ2UV6.cjs} +8 -8
  229. package/dist/{chunk-AZP3DDBT.cjs.map → chunk-ZPSJ2UV6.cjs.map} +1 -1
  230. package/dist/{chunk-SRA2L3SQ.cjs → chunk-ZSGEGISB.cjs} +4 -4
  231. package/dist/{chunk-SRA2L3SQ.cjs.map → chunk-ZSGEGISB.cjs.map} +1 -1
  232. package/dist/components/AlertDialog/index.cjs +6 -6
  233. package/dist/components/AlertDialog/index.js +5 -5
  234. package/dist/components/Autocomplete/index.cjs +3 -3
  235. package/dist/components/Autocomplete/index.js +2 -2
  236. package/dist/components/BoardView/index.cjs +24 -0
  237. package/dist/components/BoardView/index.cjs.map +1 -0
  238. package/dist/components/BoardView/index.d.cts +42 -0
  239. package/dist/components/BoardView/index.d.ts +42 -0
  240. package/dist/components/BoardView/index.js +7 -0
  241. package/dist/components/BoardView/index.js.map +1 -0
  242. package/dist/components/Button/index.cjs +3 -3
  243. package/dist/components/Button/index.d.cts +3 -0
  244. package/dist/components/Button/index.d.ts +3 -0
  245. package/dist/components/Button/index.js +1 -1
  246. package/dist/components/CalendarView/index.cjs +22 -0
  247. package/dist/components/CalendarView/index.cjs.map +1 -0
  248. package/dist/components/CalendarView/index.d.cts +40 -0
  249. package/dist/components/CalendarView/index.d.ts +40 -0
  250. package/dist/components/CalendarView/index.js +9 -0
  251. package/dist/components/CalendarView/index.js.map +1 -0
  252. package/dist/components/Collapsible/index.cjs +5 -5
  253. package/dist/components/Collapsible/index.js +2 -2
  254. package/dist/components/CountryCodeDropdown/index.cjs +6 -6
  255. package/dist/components/CountryCodeDropdown/index.js +3 -3
  256. package/dist/components/CustomizableDashboard/index.cjs +11 -11
  257. package/dist/components/CustomizableDashboard/index.js +4 -4
  258. package/dist/components/DateInput/index.cjs +4 -4
  259. package/dist/components/DateInput/index.js +3 -3
  260. package/dist/components/Dropdown/index.cjs +11 -11
  261. package/dist/components/Dropdown/index.js +4 -4
  262. package/dist/components/FloatingWindow/index.cjs +4 -4
  263. package/dist/components/FloatingWindow/index.js +2 -2
  264. package/dist/components/GanttView/index.cjs +20 -0
  265. package/dist/components/GanttView/index.cjs.map +1 -0
  266. package/dist/components/GanttView/index.d.cts +37 -0
  267. package/dist/components/GanttView/index.d.ts +37 -0
  268. package/dist/components/GanttView/index.js +7 -0
  269. package/dist/components/GanttView/index.js.map +1 -0
  270. package/dist/components/GlossaryTooltip/index.cjs +4 -4
  271. package/dist/components/GlossaryTooltip/index.js +3 -3
  272. package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -6
  273. package/dist/components/KeyboardShortcutsOverlay/index.js +4 -4
  274. package/dist/components/ListView/index.cjs +22 -0
  275. package/dist/components/ListView/index.cjs.map +1 -0
  276. package/dist/components/ListView/index.d.cts +37 -0
  277. package/dist/components/ListView/index.d.ts +37 -0
  278. package/dist/components/ListView/index.js +9 -0
  279. package/dist/components/ListView/index.js.map +1 -0
  280. package/dist/components/Markdown/index.cjs +19 -19
  281. package/dist/components/Markdown/index.js +7 -7
  282. package/dist/components/MediaEditor/index.cjs +16 -16
  283. package/dist/components/MediaEditor/index.js +11 -11
  284. package/dist/components/MediaPlayer/index.cjs +6 -6
  285. package/dist/components/MediaPlayer/index.js +3 -3
  286. package/dist/components/MegaMenu/index.cjs +23 -0
  287. package/dist/components/MegaMenu/index.cjs.map +1 -0
  288. package/dist/components/MegaMenu/index.d.cts +106 -0
  289. package/dist/components/MegaMenu/index.d.ts +106 -0
  290. package/dist/components/MegaMenu/index.js +6 -0
  291. package/dist/components/MegaMenu/index.js.map +1 -0
  292. package/dist/components/Modal/index.cjs +11 -11
  293. package/dist/components/Modal/index.js +3 -3
  294. package/dist/components/OrbitRing/index.cjs +14 -0
  295. package/dist/components/OrbitRing/index.cjs.map +1 -0
  296. package/dist/components/OrbitRing/index.d.cts +64 -0
  297. package/dist/components/OrbitRing/index.d.ts +64 -0
  298. package/dist/components/OrbitRing/index.js +5 -0
  299. package/dist/components/OrbitRing/index.js.map +1 -0
  300. package/dist/components/QuickAction/index.d.cts +1 -1
  301. package/dist/components/QuickAction/index.d.ts +1 -1
  302. package/dist/components/RadialExplorer/index.cjs +18 -0
  303. package/dist/components/RadialExplorer/index.cjs.map +1 -0
  304. package/dist/components/RadialExplorer/index.d.cts +83 -0
  305. package/dist/components/RadialExplorer/index.d.ts +83 -0
  306. package/dist/components/RadialExplorer/index.js +9 -0
  307. package/dist/components/RadialExplorer/index.js.map +1 -0
  308. package/dist/components/RichTextEditor/index.cjs +9 -9
  309. package/dist/components/RichTextEditor/index.js +6 -6
  310. package/dist/components/SectionSpyNav/index.cjs +4 -4
  311. package/dist/components/SectionSpyNav/index.js +3 -3
  312. package/dist/components/Select/index.cjs +5 -5
  313. package/dist/components/Select/index.js +3 -3
  314. package/dist/components/Sheet/index.cjs +11 -11
  315. package/dist/components/Sheet/index.js +2 -2
  316. package/dist/components/SliderCalculator/index.cjs +20 -0
  317. package/dist/components/SliderCalculator/index.cjs.map +1 -0
  318. package/dist/components/SliderCalculator/index.d.cts +100 -0
  319. package/dist/components/SliderCalculator/index.d.ts +100 -0
  320. package/dist/components/SliderCalculator/index.js +7 -0
  321. package/dist/components/SliderCalculator/index.js.map +1 -0
  322. package/dist/components/SourceTip/index.cjs +4 -4
  323. package/dist/components/SourceTip/index.js +3 -3
  324. package/dist/components/SuperChat/index.cjs +454 -279
  325. package/dist/components/SuperChat/index.cjs.map +1 -1
  326. package/dist/components/SuperChat/index.js +444 -269
  327. package/dist/components/SuperChat/index.js.map +1 -1
  328. package/dist/components/SuperChat/plugins/index.cjs +8 -8
  329. package/dist/components/SuperChat/plugins/index.js +7 -7
  330. package/dist/components/ThemeProvider/index.cjs +9 -9
  331. package/dist/components/ThemeProvider/index.js +3 -3
  332. package/dist/components/Tooltip/index.cjs +3 -3
  333. package/dist/components/Tooltip/index.js +2 -2
  334. package/dist/components/VideoCard/index.cjs +21 -0
  335. package/dist/components/VideoCard/index.cjs.map +1 -0
  336. package/dist/components/VideoCard/index.d.cts +75 -0
  337. package/dist/components/VideoCard/index.d.ts +75 -0
  338. package/dist/components/VideoCard/index.js +8 -0
  339. package/dist/components/VideoCard/index.js.map +1 -0
  340. package/dist/components/ViewSet/index.cjs +23 -0
  341. package/dist/components/ViewSet/index.cjs.map +1 -0
  342. package/dist/components/ViewSet/index.d.cts +89 -0
  343. package/dist/components/ViewSet/index.d.ts +89 -0
  344. package/dist/components/ViewSet/index.js +14 -0
  345. package/dist/components/ViewSet/index.js.map +1 -0
  346. package/dist/components/ViewSwitcher/index.cjs +20 -0
  347. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  348. package/dist/components/ViewSwitcher/index.d.cts +40 -0
  349. package/dist/components/ViewSwitcher/index.d.ts +40 -0
  350. package/dist/components/ViewSwitcher/index.js +7 -0
  351. package/dist/components/ViewSwitcher/index.js.map +1 -0
  352. package/dist/components/YearTimeline/index.cjs +26 -0
  353. package/dist/components/YearTimeline/index.cjs.map +1 -0
  354. package/dist/components/YearTimeline/index.d.cts +82 -0
  355. package/dist/components/YearTimeline/index.d.ts +82 -0
  356. package/dist/components/YearTimeline/index.js +5 -0
  357. package/dist/components/YearTimeline/index.js.map +1 -0
  358. package/dist/datavis.cjs +2 -2
  359. package/dist/datavis.js +1 -1
  360. package/dist/enterprise-health-ITUNXDIW.js +4 -0
  361. package/dist/{enterprise-health-CWLUB77O.js.map → enterprise-health-ITUNXDIW.js.map} +1 -1
  362. package/dist/enterprise-health-UHHPVPU6.cjs +19 -0
  363. package/dist/{enterprise-health-75VYWAVG.cjs.map → enterprise-health-UHHPVPU6.cjs.map} +1 -1
  364. package/dist/esheet.cjs +18 -18
  365. package/dist/esheet.js +15 -15
  366. package/dist/globe.cjs +306 -0
  367. package/dist/globe.cjs.map +1 -0
  368. package/dist/globe.d.cts +99 -0
  369. package/dist/globe.d.ts +99 -0
  370. package/dist/globe.js +279 -0
  371. package/dist/globe.js.map +1 -0
  372. package/dist/hooks/index.cjs +38 -24
  373. package/dist/hooks/index.d.cts +141 -1
  374. package/dist/hooks/index.d.ts +141 -1
  375. package/dist/hooks/index.js +6 -4
  376. package/dist/index.cjs +1510 -1205
  377. package/dist/index.cjs.map +1 -1
  378. package/dist/index.d.cts +97 -25
  379. package/dist/index.d.ts +97 -25
  380. package/dist/index.js +546 -379
  381. package/dist/index.js.map +1 -1
  382. package/dist/kerebron.cjs +58 -19
  383. package/dist/kerebron.cjs.map +1 -1
  384. package/dist/kerebron.d.cts +37 -0
  385. package/dist/kerebron.d.ts +37 -0
  386. package/dist/kerebron.js +58 -19
  387. package/dist/kerebron.js.map +1 -1
  388. package/dist/{speaker-verify-5GTWAN5Y.cjs → speaker-verify-4NEJAK6C.cjs} +57 -90
  389. package/dist/speaker-verify-4NEJAK6C.cjs.map +1 -0
  390. package/dist/{speaker-verify-R67P433H.js → speaker-verify-AWSKI6DI.js} +57 -90
  391. package/dist/speaker-verify-AWSKI6DI.js.map +1 -0
  392. package/dist/styles/effects.css +128 -0
  393. package/dist/styles/init.css +15 -0
  394. package/dist/styles.css +1 -1
  395. package/dist/tailwind-preset.cjs +4 -4
  396. package/dist/tailwind-preset.js +1 -1
  397. package/dist/types-CbWXIKbe.d.cts +119 -0
  398. package/dist/types-CbWXIKbe.d.ts +119 -0
  399. package/dist/utils/index.cjs +5 -5
  400. package/dist/utils/index.js +1 -1
  401. package/package.json +28 -2
  402. package/dist/CsvBlock-CVYA3HYS.cjs +0 -16
  403. package/dist/CsvBlock-SM4NKSHA.js +0 -7
  404. package/dist/HtmlPreviewBlock-FAMF4W24.js +0 -7
  405. package/dist/HtmlPreviewBlock-JF454L2L.cjs +0 -16
  406. package/dist/MermaidBlock-7V5G4K5A.js +0 -7
  407. package/dist/MermaidBlock-FR5SQX4Q.cjs +0 -16
  408. package/dist/SurveyBlock-6K2POV7S.js +0 -7
  409. package/dist/SurveyBlock-MCJVWR7H.cjs +0 -16
  410. package/dist/chunk-22CYDCXA.js.map +0 -1
  411. package/dist/chunk-IINZWUGK.cjs.map +0 -1
  412. package/dist/chunk-J644FU54.cjs.map +0 -1
  413. package/dist/chunk-KREUYVMZ.js.map +0 -1
  414. package/dist/chunk-MTZPVOP6.js.map +0 -1
  415. package/dist/chunk-P52GA3GJ.cjs.map +0 -1
  416. package/dist/chunk-PY7XAG4D.cjs.map +0 -1
  417. package/dist/chunk-WIAQQNFU.cjs.map +0 -1
  418. package/dist/chunk-WOYUQ4AT.js.map +0 -1
  419. package/dist/chunk-X5YM3KXY.js.map +0 -1
  420. package/dist/enterprise-health-75VYWAVG.cjs +0 -19
  421. package/dist/enterprise-health-CWLUB77O.js +0 -4
  422. package/dist/speaker-verify-5GTWAN5Y.cjs.map +0 -1
  423. package/dist/speaker-verify-R67P433H.js.map +0 -1
package/dist/globe.js ADDED
@@ -0,0 +1,279 @@
1
+ import { usePrefersReducedMotion } from './chunk-HB7C7NB5.js';
2
+ import { cn } from './chunk-TQONQSJO.js';
3
+ import './chunk-PX6F3LHL.js';
4
+ import * as React from 'react';
5
+ import ReactGlobe from 'react-globe.gl';
6
+ import { MeshPhongMaterial } from 'three';
7
+ import { X } from 'lucide-react';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ var DEFAULT_GEO_URL = "https://raw.githubusercontent.com/vasturiano/react-globe.gl/master/example/datasets/ne_110m_admin_0_countries.geojson";
11
+ var DEFAULT_THEME = {
12
+ surface: "#0a1322",
13
+ emissive: "#0a1b2e",
14
+ atmosphere: "#5b8fb0",
15
+ land: "rgba(123,156,201,0.5)",
16
+ hub: "#ffe7b0",
17
+ city: "rgba(201,168,116,0.72)",
18
+ backbone: ["rgba(63,169,155,0.12)", "rgba(160,235,224,0.95)"],
19
+ spoke: ["rgba(63,169,155,0)", "rgba(150,225,214,0.5)"]
20
+ };
21
+ function haversine(a, b) {
22
+ const toRad = (d) => d * Math.PI / 180;
23
+ const dLat = toRad(b.lat - a.lat);
24
+ const dLng = toRad(b.lng - a.lng);
25
+ const h = Math.sin(dLat / 2) ** 2 + Math.cos(toRad(a.lat)) * Math.cos(toRad(b.lat)) * Math.sin(dLng / 2) ** 2;
26
+ return 2 * Math.asin(Math.sqrt(h));
27
+ }
28
+ function escapeHtml(s) {
29
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
30
+ }
31
+ function buildArcs(points, connectHubs = true) {
32
+ const hubs = points.filter((p) => p.hub);
33
+ if (hubs.length === 0) return [];
34
+ const spokes = points.filter((p) => !p.hub).map((c, i) => {
35
+ const hub = hubs.reduce(
36
+ (best, h) => haversine(c, h) < haversine(c, best) ? h : best,
37
+ hubs[0]
38
+ );
39
+ return {
40
+ startLat: c.lat,
41
+ startLng: c.lng,
42
+ endLat: hub.lat,
43
+ endLng: hub.lng,
44
+ kind: "spoke",
45
+ speed: 4200 + i * 137 % 2800,
46
+ gap: i * 13 % 100 / 100
47
+ };
48
+ });
49
+ const ring = connectHubs && hubs.length > 1 ? hubs.map((h, i) => {
50
+ const next = hubs[(i + 1) % hubs.length];
51
+ return {
52
+ startLat: h.lat,
53
+ startLng: h.lng,
54
+ endLat: next.lat,
55
+ endLng: next.lng,
56
+ kind: "backbone",
57
+ speed: 4600,
58
+ gap: i * 33 / 100
59
+ };
60
+ }) : [];
61
+ return [...spokes, ...ring];
62
+ }
63
+ function pointId(p) {
64
+ return p.id ?? `${p.lat},${p.lng}`;
65
+ }
66
+ function Globe({
67
+ points = [],
68
+ arcs,
69
+ connectHubs = true,
70
+ geoUrl = DEFAULT_GEO_URL,
71
+ hexResolution = 3,
72
+ theme,
73
+ pointOfView = { lat: 18, lng: -22, altitude: 2.35 },
74
+ autoRotateSpeed = 0.5,
75
+ enableZoom = false,
76
+ callout = true,
77
+ selectedId,
78
+ onSelect,
79
+ onPointHover,
80
+ pointLabel,
81
+ height = "clamp(360px, 54vw, 560px)",
82
+ className
83
+ }) {
84
+ const t = { ...DEFAULT_THEME, ...theme };
85
+ const reduced = usePrefersReducedMotion();
86
+ const globeRef = React.useRef(void 0);
87
+ const frameRef = React.useRef(null);
88
+ const [size, setSize] = React.useState({ w: 0, h: 0 });
89
+ const [countries, setCountries] = React.useState([]);
90
+ const [innerSel, setInnerSel] = React.useState(null);
91
+ const sel = selectedId !== void 0 ? selectedId : innerSel;
92
+ const selected = sel ? points.find((p) => pointId(p) === sel) ?? null : null;
93
+ const material = React.useMemo(
94
+ () => new MeshPhongMaterial({
95
+ color: t.surface,
96
+ emissive: t.emissive,
97
+ emissiveIntensity: 0.32,
98
+ shininess: 4
99
+ }),
100
+ [t.surface, t.emissive]
101
+ );
102
+ const arcData = React.useMemo(
103
+ () => arcs ? arcs.map((a) => ({ kind: "spoke", speed: 4600, gap: 0, ...a })) : buildArcs(points, connectHubs),
104
+ [arcs, points, connectHubs]
105
+ );
106
+ React.useEffect(() => {
107
+ const el = frameRef.current;
108
+ if (!el || typeof globalThis.ResizeObserver === "undefined") return;
109
+ const ro = new globalThis.ResizeObserver(([e]) => {
110
+ const { width, height: h } = e.contentRect;
111
+ setSize({ w: Math.round(width), h: Math.round(h) });
112
+ });
113
+ ro.observe(el);
114
+ return () => ro.disconnect();
115
+ }, []);
116
+ React.useEffect(() => {
117
+ if (!geoUrl) return;
118
+ let live = true;
119
+ fetch(geoUrl).then((r) => r.json()).then(
120
+ (geo) => live && setCountries(geo.features ?? [])
121
+ ).catch(() => live && setCountries([]));
122
+ return () => {
123
+ live = false;
124
+ };
125
+ }, [geoUrl]);
126
+ const onReady = React.useCallback(() => {
127
+ const g = globeRef.current;
128
+ if (!g) return;
129
+ const c = g.controls();
130
+ c.enableZoom = enableZoom;
131
+ c.enablePan = false;
132
+ c.autoRotate = !reduced && autoRotateSpeed > 0;
133
+ c.autoRotateSpeed = autoRotateSpeed;
134
+ c.minPolarAngle = Math.PI * 0.16;
135
+ c.maxPolarAngle = Math.PI * 0.84;
136
+ g.pointOfView(pointOfView);
137
+ g.renderer().domElement.style.touchAction = "pan-y";
138
+ }, [enableZoom, reduced, autoRotateSpeed, pointOfView]);
139
+ const select = (p) => {
140
+ if (selectedId === void 0) setInnerSel(p ? pointId(p) : null);
141
+ onSelect?.(p);
142
+ };
143
+ return /* @__PURE__ */ jsxs(
144
+ "div",
145
+ {
146
+ ref: frameRef,
147
+ "data-slot": "globe",
148
+ style: { height },
149
+ className: cn("relative w-full overflow-hidden", className),
150
+ children: [
151
+ size.w > 0 && /* @__PURE__ */ jsx(
152
+ ReactGlobe,
153
+ {
154
+ ref: globeRef,
155
+ width: size.w,
156
+ height: size.h,
157
+ onGlobeReady: onReady,
158
+ backgroundColor: "rgba(0,0,0,0)",
159
+ globeMaterial: material,
160
+ showAtmosphere: true,
161
+ atmosphereColor: t.atmosphere,
162
+ atmosphereAltitude: 0.16,
163
+ hexPolygonsData: countries,
164
+ hexPolygonResolution: hexResolution,
165
+ hexPolygonMargin: 0.4,
166
+ hexPolygonUseDots: true,
167
+ hexPolygonColor: () => t.land,
168
+ pointsData: points,
169
+ pointLat: "lat",
170
+ pointLng: "lng",
171
+ pointAltitude: (d) => d.hub ? 0.013 : 6e-3,
172
+ pointRadius: (d) => d.hub ? 0.48 : 0.3,
173
+ pointResolution: 18,
174
+ pointColor: (d) => {
175
+ const p = d;
176
+ return p.color ?? (p.hub ? t.hub : t.city);
177
+ },
178
+ pointLabel: (d) => {
179
+ const p = d;
180
+ if (pointLabel) return pointLabel(p);
181
+ return `<b>${escapeHtml(p.name)}</b>${p.sub ? ` &middot; ${escapeHtml(p.sub)}` : ""}`;
182
+ },
183
+ onPointHover: (d) => onPointHover?.(d ?? null),
184
+ onPointClick: (d) => select(d),
185
+ onGlobeClick: () => select(null),
186
+ arcsData: arcData,
187
+ arcStartLat: "startLat",
188
+ arcStartLng: "startLng",
189
+ arcEndLat: "endLat",
190
+ arcEndLng: "endLng",
191
+ arcColor: (d) => d.kind === "backbone" ? t.backbone : t.spoke,
192
+ arcStroke: (d) => d.kind === "backbone" ? 0.5 : 0.3,
193
+ arcAltitudeAutoScale: 0.45,
194
+ arcDashLength: (d) => reduced ? 1 : d.kind === "backbone" ? 0.5 : 0.35,
195
+ arcDashGap: (d) => reduced ? 0 : d.kind === "backbone" ? 0.2 : 0.7,
196
+ arcDashInitialGap: (d) => reduced ? 0 : d.gap,
197
+ arcDashAnimateTime: (d) => reduced ? 0 : d.speed
198
+ }
199
+ ),
200
+ callout && selected && /* @__PURE__ */ jsx(Callout, { point: selected, onClose: () => select(null) })
201
+ ]
202
+ }
203
+ );
204
+ }
205
+ function useLocalTime(timeZone) {
206
+ const fmt = React.useMemo(
207
+ () => timeZone ? new Intl.DateTimeFormat(void 0, {
208
+ hour: "2-digit",
209
+ minute: "2-digit",
210
+ timeZone,
211
+ timeZoneName: "short"
212
+ }) : null,
213
+ [timeZone]
214
+ );
215
+ const [now, setNow] = React.useState(() => /* @__PURE__ */ new Date());
216
+ React.useEffect(() => {
217
+ if (!fmt) return;
218
+ const t = window.setInterval(() => setNow(/* @__PURE__ */ new Date()), 15e3);
219
+ return () => window.clearInterval(t);
220
+ }, [fmt]);
221
+ return fmt ? fmt.format(now) : null;
222
+ }
223
+ function Callout({
224
+ point,
225
+ onClose
226
+ }) {
227
+ const time = useLocalTime(point.timeZone);
228
+ const Body = point.href ? "a" : "span";
229
+ return /* @__PURE__ */ jsxs(
230
+ "div",
231
+ {
232
+ role: "status",
233
+ "aria-live": "polite",
234
+ "data-slot": "globe-callout",
235
+ className: "absolute bottom-4 left-1/2 z-10 inline-flex max-w-[min(90%,360px)] -translate-x-1/2 items-center gap-2.5 rounded-full border border-white/15 bg-neutral-950/70 py-1.5 ps-3.5 pe-1.5 text-white shadow-xl backdrop-blur-md motion-safe:animate-[mie-fade-in_0.28s_ease]",
236
+ children: [
237
+ /* @__PURE__ */ jsx(
238
+ "span",
239
+ {
240
+ "aria-hidden": true,
241
+ className: "h-2 w-2 shrink-0 rounded-full bg-[var(--mieweb-accent,#ffe7b0)] shadow-[0_0_8px_var(--mieweb-accent,#ffe7b0)]"
242
+ }
243
+ ),
244
+ /* @__PURE__ */ jsxs(
245
+ Body,
246
+ {
247
+ href: point.href,
248
+ className: "flex min-w-0 flex-col leading-tight no-underline",
249
+ children: [
250
+ /* @__PURE__ */ jsxs("b", { className: "truncate text-sm", children: [
251
+ point.flag && /* @__PURE__ */ jsx("span", { className: "me-1.5", children: point.flag }),
252
+ point.name
253
+ ] }),
254
+ (point.sub || time) && /* @__PURE__ */ jsxs("span", { className: "truncate text-[11px] tracking-wider text-white/70 uppercase", children: [
255
+ point.sub,
256
+ point.sub && time && " \xB7 ",
257
+ time && /* @__PURE__ */ jsx("span", { className: "tracking-normal normal-case tabular-nums", children: time })
258
+ ] })
259
+ ]
260
+ }
261
+ ),
262
+ /* @__PURE__ */ jsx(
263
+ "button",
264
+ {
265
+ type: "button",
266
+ onClick: onClose,
267
+ "aria-label": "Dismiss",
268
+ className: "ms-1 grid h-7 w-7 shrink-0 place-items-center rounded-full text-white/70 hover:bg-white/10 hover:text-white",
269
+ children: /* @__PURE__ */ jsx(X, { size: 14, "aria-hidden": true })
270
+ }
271
+ )
272
+ ]
273
+ }
274
+ );
275
+ }
276
+
277
+ export { DEFAULT_GEO_URL, Globe, buildArcs };
278
+ //# sourceMappingURL=globe.js.map
279
+ //# sourceMappingURL=globe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Globe/Globe.tsx"],"names":[],"mappings":"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","file":"globe.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport ReactGlobe, { type GlobeMethods } from 'react-globe.gl';\nimport { MeshPhongMaterial } from 'three';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { usePrefersReducedMotion } from '../../hooks/usePrefersReducedMotion';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface GlobePoint {\n id?: string;\n lat: number;\n lng: number;\n name: string;\n /** Secondary line in tooltip/callout, e.g. \"Distribution\". */\n sub?: string;\n /** Hubs are drawn larger, raised, and become arc anchors. */\n hub?: boolean;\n /** Per-point dot colour. */\n color?: string;\n /** IANA zone, e.g. `America/Sao_Paulo` — shows a live local clock in the callout. */\n timeZone?: string;\n /** Emoji flag or short code shown before the name in the callout. */\n flag?: string;\n /** Destination when the callout is clicked. */\n href?: string;\n}\n\nexport interface GlobeArc {\n startLat: number;\n startLng: number;\n endLat: number;\n endLng: number;\n /** `backbone` arcs are brighter and thicker than `spoke` arcs. */\n kind?: 'backbone' | 'spoke';\n /** Dash cycle time in ms. */\n speed?: number;\n /** Dash start offset 0–1. */\n gap?: number;\n}\n\nexport interface GlobeTheme {\n /** Globe body. */\n surface?: string;\n emissive?: string;\n atmosphere?: string;\n /** Dotted-continent colour. */\n land?: string;\n /** Hub dot / city dot. */\n hub?: string;\n city?: string;\n /** Arc gradients, start → end. */\n backbone?: [string, string];\n spoke?: [string, string];\n}\n\nexport interface GlobeProps {\n points?: GlobePoint[];\n /** Explicit arcs. Omit to auto-connect every non-hub point to its nearest hub. */\n arcs?: GlobeArc[];\n /** Also connect hubs to each other in a ring. Default true when ≥2 hubs. */\n connectHubs?: boolean;\n /**\n * GeoJSON FeatureCollection URL for the dotted continents. Defaults to the\n * Natural Earth 110m countries file shipped with react-globe.gl's examples.\n */\n geoUrl?: string | null;\n /** Hex resolution (2 coarse … 4 fine). Default 3. */\n hexResolution?: number;\n theme?: GlobeTheme;\n /** Initial camera. Default lat 18 / lng −22 / altitude 2.35. */\n pointOfView?: { lat?: number; lng?: number; altitude?: number };\n /** Auto-rotate speed; 0 disables. Default 0.5. Off under reduced motion. */\n autoRotateSpeed?: number;\n enableZoom?: boolean;\n /** Show the pill callout for the selected point. Default true. */\n callout?: boolean;\n /** Controlled selection. */\n selectedId?: string | null;\n onSelect?: (point: GlobePoint | null) => void;\n onPointHover?: (point: GlobePoint | null) => void;\n /** Custom hover tooltip HTML. */\n pointLabel?: (point: GlobePoint) => string;\n /** Fixed height. Default `clamp(360px, 54vw, 560px)`. */\n height?: string;\n className?: string;\n}\n\n// =============================================================================\n// Defaults\n// =============================================================================\n\nexport const DEFAULT_GEO_URL =\n 'https://raw.githubusercontent.com/vasturiano/react-globe.gl/master/example/datasets/ne_110m_admin_0_countries.geojson';\n\nconst DEFAULT_THEME: Required<GlobeTheme> = {\n surface: '#0a1322',\n emissive: '#0a1b2e',\n atmosphere: '#5b8fb0',\n land: 'rgba(123,156,201,0.5)',\n hub: '#ffe7b0',\n city: 'rgba(201,168,116,0.72)',\n backbone: ['rgba(63,169,155,0.12)', 'rgba(160,235,224,0.95)'],\n spoke: ['rgba(63,169,155,0)', 'rgba(150,225,214,0.5)'],\n};\n\ntype Arc = Required<\n Pick<\n GlobeArc,\n 'startLat' | 'startLng' | 'endLat' | 'endLng' | 'kind' | 'speed' | 'gap'\n >\n>;\n\nfunction haversine(a: GlobePoint, b: GlobePoint): number {\n const toRad = (d: number) => (d * Math.PI) / 180;\n const dLat = toRad(b.lat - a.lat);\n const dLng = toRad(b.lng - a.lng);\n const h =\n Math.sin(dLat / 2) ** 2 +\n Math.cos(toRad(a.lat)) * Math.cos(toRad(b.lat)) * Math.sin(dLng / 2) ** 2;\n return 2 * Math.asin(Math.sqrt(h));\n}\n\n/** Escape a string for interpolation into tooltip HTML. */\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\n/** Spokes from each city to its nearest hub, plus an optional hub ring. */\nexport function buildArcs(points: GlobePoint[], connectHubs = true): Arc[] {\n const hubs = points.filter((p) => p.hub);\n if (hubs.length === 0) return [];\n const spokes: Arc[] = points\n .filter((p) => !p.hub)\n .map((c, i) => {\n const hub = hubs.reduce(\n (best, h) => (haversine(c, h) < haversine(c, best) ? h : best),\n hubs[0]\n );\n return {\n startLat: c.lat,\n startLng: c.lng,\n endLat: hub.lat,\n endLng: hub.lng,\n kind: 'spoke',\n speed: 4200 + ((i * 137) % 2800),\n gap: ((i * 13) % 100) / 100,\n };\n });\n const ring: Arc[] =\n connectHubs && hubs.length > 1\n ? hubs.map((h, i) => {\n const next = hubs[(i + 1) % hubs.length];\n return {\n startLat: h.lat,\n startLng: h.lng,\n endLat: next.lat,\n endLng: next.lng,\n kind: 'backbone',\n speed: 4600,\n gap: (i * 33) / 100,\n };\n })\n : [];\n return [...spokes, ...ring];\n}\n\nfunction pointId(p: GlobePoint): string {\n return p.id ?? `${p.lat},${p.lng}`;\n}\n\n// =============================================================================\n// Globe\n// =============================================================================\n\n/**\n * A branded WebGL globe on react-globe.gl: dotted-hex continents, hub and\n * city dots with hover tooltips, animated hub-and-spoke arcs, slow\n * auto-rotation (paused while dragging, off under reduced motion), and a\n * pill callout for the selected point with an optional live local clock.\n * Transparent background so it sits on any surface. Ported from the\n * Enterprise Health global-reach section.\n *\n * Client-only — import from `@mieweb/ui/globe` behind `ssr: false`.\n * Requires the optional peers `react-globe.gl` and `three`.\n */\nexport function Globe({\n points = [],\n arcs,\n connectHubs = true,\n geoUrl = DEFAULT_GEO_URL,\n hexResolution = 3,\n theme,\n pointOfView = { lat: 18, lng: -22, altitude: 2.35 },\n autoRotateSpeed = 0.5,\n enableZoom = false,\n callout = true,\n selectedId,\n onSelect,\n onPointHover,\n pointLabel,\n height = 'clamp(360px, 54vw, 560px)',\n className,\n}: GlobeProps) {\n const t = { ...DEFAULT_THEME, ...theme };\n const reduced = usePrefersReducedMotion();\n const globeRef = React.useRef<GlobeMethods | undefined>(undefined);\n const frameRef = React.useRef<HTMLDivElement>(null);\n const [size, setSize] = React.useState({ w: 0, h: 0 });\n const [countries, setCountries] = React.useState<object[]>([]);\n const [innerSel, setInnerSel] = React.useState<string | null>(null);\n const sel = selectedId !== undefined ? selectedId : innerSel;\n const selected = sel\n ? (points.find((p) => pointId(p) === sel) ?? null)\n : null;\n\n const material = React.useMemo(\n () =>\n new MeshPhongMaterial({\n color: t.surface,\n emissive: t.emissive,\n emissiveIntensity: 0.32,\n shininess: 4,\n }),\n [t.surface, t.emissive]\n );\n\n const arcData = React.useMemo<Arc[]>(\n () =>\n arcs\n ? arcs.map((a) => ({ kind: 'spoke', speed: 4600, gap: 0, ...a }))\n : buildArcs(points, connectHubs),\n [arcs, points, connectHubs]\n );\n\n // Size to the frame.\n React.useEffect(() => {\n const el = frameRef.current;\n if (!el || typeof globalThis.ResizeObserver === 'undefined') return;\n const ro = new globalThis.ResizeObserver(([e]) => {\n const { width, height: h } = e.contentRect;\n setSize({ w: Math.round(width), h: Math.round(h) });\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n React.useEffect(() => {\n if (!geoUrl) return;\n let live = true;\n fetch(geoUrl)\n .then((r) => r.json())\n .then(\n (geo: { features?: object[] }) =>\n live && setCountries(geo.features ?? [])\n )\n .catch(() => live && setCountries([]));\n return () => {\n live = false;\n };\n }, [geoUrl]);\n\n const onReady = React.useCallback(() => {\n const g = globeRef.current;\n if (!g) return;\n const c = g.controls();\n c.enableZoom = enableZoom;\n c.enablePan = false;\n c.autoRotate = !reduced && autoRotateSpeed > 0;\n c.autoRotateSpeed = autoRotateSpeed;\n c.minPolarAngle = Math.PI * 0.16;\n c.maxPolarAngle = Math.PI * 0.84;\n g.pointOfView(pointOfView);\n // let the page still scroll vertically over the canvas on touch\n g.renderer().domElement.style.touchAction = 'pan-y';\n }, [enableZoom, reduced, autoRotateSpeed, pointOfView]);\n\n const select = (p: GlobePoint | null) => {\n if (selectedId === undefined) setInnerSel(p ? pointId(p) : null);\n onSelect?.(p);\n };\n\n return (\n <div\n ref={frameRef}\n data-slot=\"globe\"\n style={{ height }}\n className={cn('relative w-full overflow-hidden', className)}\n >\n {size.w > 0 && (\n <ReactGlobe\n ref={globeRef}\n width={size.w}\n height={size.h}\n onGlobeReady={onReady}\n backgroundColor=\"rgba(0,0,0,0)\"\n globeMaterial={material}\n showAtmosphere\n atmosphereColor={t.atmosphere}\n atmosphereAltitude={0.16}\n hexPolygonsData={countries}\n hexPolygonResolution={hexResolution}\n hexPolygonMargin={0.4}\n hexPolygonUseDots\n hexPolygonColor={() => t.land}\n pointsData={points}\n pointLat=\"lat\"\n pointLng=\"lng\"\n pointAltitude={(d: object) => ((d as GlobePoint).hub ? 0.013 : 0.006)}\n pointRadius={(d: object) => ((d as GlobePoint).hub ? 0.48 : 0.3)}\n pointResolution={18}\n pointColor={(d: object) => {\n const p = d as GlobePoint;\n return p.color ?? (p.hub ? t.hub : t.city);\n }}\n pointLabel={(d: object) => {\n const p = d as GlobePoint;\n if (pointLabel) return pointLabel(p);\n // react-globe.gl renders this as tooltip HTML, so caller-provided\n // strings must be escaped or `<img onerror=…>` in a name executes.\n return `<b>${escapeHtml(p.name)}</b>${p.sub ? ` &middot; ${escapeHtml(p.sub)}` : ''}`;\n }}\n onPointHover={(d: object | null) =>\n onPointHover?.((d as GlobePoint) ?? null)\n }\n onPointClick={(d: object) => select(d as GlobePoint)}\n onGlobeClick={() => select(null)}\n arcsData={arcData}\n arcStartLat=\"startLat\"\n arcStartLng=\"startLng\"\n arcEndLat=\"endLat\"\n arcEndLng=\"endLng\"\n arcColor={(d: object) =>\n (d as Arc).kind === 'backbone' ? t.backbone : t.spoke\n }\n arcStroke={(d: object) =>\n (d as Arc).kind === 'backbone' ? 0.5 : 0.3\n }\n arcAltitudeAutoScale={0.45}\n arcDashLength={(d: object) =>\n reduced ? 1 : (d as Arc).kind === 'backbone' ? 0.5 : 0.35\n }\n arcDashGap={(d: object) =>\n reduced ? 0 : (d as Arc).kind === 'backbone' ? 0.2 : 0.7\n }\n arcDashInitialGap={(d: object) => (reduced ? 0 : (d as Arc).gap)}\n arcDashAnimateTime={(d: object) => (reduced ? 0 : (d as Arc).speed)}\n />\n )}\n\n {callout && selected && (\n <Callout point={selected} onClose={() => select(null)} />\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Callout\n// =============================================================================\n\nfunction useLocalTime(timeZone?: string) {\n const fmt = React.useMemo(\n () =>\n timeZone\n ? new Intl.DateTimeFormat(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n timeZone,\n timeZoneName: 'short',\n })\n : null,\n [timeZone]\n );\n const [now, setNow] = React.useState(() => new Date());\n React.useEffect(() => {\n if (!fmt) return;\n const t = window.setInterval(() => setNow(new Date()), 15_000);\n return () => window.clearInterval(t);\n }, [fmt]);\n return fmt ? fmt.format(now) : null;\n}\n\nfunction Callout({\n point,\n onClose,\n}: {\n point: GlobePoint;\n onClose: () => void;\n}) {\n const time = useLocalTime(point.timeZone);\n const Body = point.href ? 'a' : 'span';\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"globe-callout\"\n className=\"absolute bottom-4 left-1/2 z-10 inline-flex max-w-[min(90%,360px)] -translate-x-1/2 items-center gap-2.5 rounded-full border border-white/15 bg-neutral-950/70 py-1.5 ps-3.5 pe-1.5 text-white shadow-xl backdrop-blur-md motion-safe:animate-[mie-fade-in_0.28s_ease]\"\n >\n <span\n aria-hidden\n className=\"h-2 w-2 shrink-0 rounded-full bg-[var(--mieweb-accent,#ffe7b0)] shadow-[0_0_8px_var(--mieweb-accent,#ffe7b0)]\"\n />\n <Body\n href={point.href}\n className=\"flex min-w-0 flex-col leading-tight no-underline\"\n >\n <b className=\"truncate text-sm\">\n {point.flag && <span className=\"me-1.5\">{point.flag}</span>}\n {point.name}\n </b>\n {(point.sub || time) && (\n <span className=\"truncate text-[11px] tracking-wider text-white/70 uppercase\">\n {point.sub}\n {point.sub && time && ' · '}\n {time && (\n <span className=\"tracking-normal normal-case tabular-nums\">\n {time}\n </span>\n )}\n </span>\n )}\n </Body>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Dismiss\"\n className=\"ms-1 grid h-7 w-7 shrink-0 place-items-center rounded-full text-white/70 hover:bg-white/10 hover:text-white\"\n >\n <X size={14} aria-hidden />\n </button>\n </div>\n );\n}\n"]}
@@ -1,18 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkQO6PRHDX_cjs = require('../chunk-QO6PRHDX.cjs');
3
+ var chunkAR7AKDM2_cjs = require('../chunk-AR7AKDM2.cjs');
4
+ var chunkIXFC7LK2_cjs = require('../chunk-IXFC7LK2.cjs');
4
5
  var chunk2O7D6F67_cjs = require('../chunk-2O7D6F67.cjs');
6
+ var chunkVPTASZ2O_cjs = require('../chunk-VPTASZ2O.cjs');
5
7
  var chunk7IKLGH3Z_cjs = require('../chunk-7IKLGH3Z.cjs');
6
8
  var chunkNPKPCYAT_cjs = require('../chunk-NPKPCYAT.cjs');
7
9
  require('../chunk-NUFUV43P.cjs');
8
10
  var chunkJYZW2PZS_cjs = require('../chunk-JYZW2PZS.cjs');
9
11
  var chunkYVPC65ZJ_cjs = require('../chunk-YVPC65ZJ.cjs');
10
- var chunk6HFFWEM3_cjs = require('../chunk-6HFFWEM3.cjs');
12
+ var chunkFSGEDDF2_cjs = require('../chunk-FSGEDDF2.cjs');
13
+ var chunkAOHJILLU_cjs = require('../chunk-AOHJILLU.cjs');
11
14
  var chunkNNEFAUHV_cjs = require('../chunk-NNEFAUHV.cjs');
12
15
  var chunkFHY3K6PL_cjs = require('../chunk-FHY3K6PL.cjs');
13
16
  require('../chunk-SCV7C55E.cjs');
14
- var chunkFSGEDDF2_cjs = require('../chunk-FSGEDDF2.cjs');
15
- var chunkAOHJILLU_cjs = require('../chunk-AOHJILLU.cjs');
17
+ var chunk6HFFWEM3_cjs = require('../chunk-6HFFWEM3.cjs');
16
18
  var chunkNMBYU7D7_cjs = require('../chunk-NMBYU7D7.cjs');
17
19
  require('../chunk-EUAMEVVI.cjs');
18
20
 
@@ -20,56 +22,68 @@ require('../chunk-EUAMEVVI.cjs');
20
22
 
21
23
  Object.defineProperty(exports, "RTL_LOCALES", {
22
24
  enumerable: true,
23
- get: function () { return chunkQO6PRHDX_cjs.RTL_LOCALES; }
25
+ get: function () { return chunkAR7AKDM2_cjs.RTL_LOCALES; }
24
26
  });
25
27
  Object.defineProperty(exports, "isRtlLocale", {
26
28
  enumerable: true,
27
- get: function () { return chunkQO6PRHDX_cjs.isRtlLocale; }
29
+ get: function () { return chunkAR7AKDM2_cjs.isRtlLocale; }
28
30
  });
29
31
  Object.defineProperty(exports, "useCommandK", {
30
32
  enumerable: true,
31
- get: function () { return chunkQO6PRHDX_cjs.useCommandK; }
33
+ get: function () { return chunkAR7AKDM2_cjs.useCommandK; }
32
34
  });
33
35
  Object.defineProperty(exports, "useDirection", {
34
36
  enumerable: true,
35
- get: function () { return chunkQO6PRHDX_cjs.useDirection; }
37
+ get: function () { return chunkAR7AKDM2_cjs.useDirection; }
36
38
  });
37
39
  Object.defineProperty(exports, "useIsDesktop", {
38
40
  enumerable: true,
39
- get: function () { return chunkQO6PRHDX_cjs.useIsDesktop; }
41
+ get: function () { return chunkAR7AKDM2_cjs.useIsDesktop; }
40
42
  });
41
43
  Object.defineProperty(exports, "useIsLargeDesktop", {
42
44
  enumerable: true,
43
- get: function () { return chunkQO6PRHDX_cjs.useIsLargeDesktop; }
45
+ get: function () { return chunkAR7AKDM2_cjs.useIsLargeDesktop; }
44
46
  });
45
47
  Object.defineProperty(exports, "useIsMobile", {
46
48
  enumerable: true,
47
- get: function () { return chunkQO6PRHDX_cjs.useIsMobile; }
49
+ get: function () { return chunkAR7AKDM2_cjs.useIsMobile; }
48
50
  });
49
51
  Object.defineProperty(exports, "useIsMobileOrTablet", {
50
52
  enumerable: true,
51
- get: function () { return chunkQO6PRHDX_cjs.useIsMobileOrTablet; }
53
+ get: function () { return chunkAR7AKDM2_cjs.useIsMobileOrTablet; }
52
54
  });
53
55
  Object.defineProperty(exports, "useIsSmallTablet", {
54
56
  enumerable: true,
55
- get: function () { return chunkQO6PRHDX_cjs.useIsSmallTablet; }
57
+ get: function () { return chunkAR7AKDM2_cjs.useIsSmallTablet; }
56
58
  });
57
59
  Object.defineProperty(exports, "useIsTablet", {
58
60
  enumerable: true,
59
- get: function () { return chunkQO6PRHDX_cjs.useIsTablet; }
61
+ get: function () { return chunkAR7AKDM2_cjs.useIsTablet; }
60
62
  });
61
63
  Object.defineProperty(exports, "useKeyboardShortcut", {
62
64
  enumerable: true,
63
- get: function () { return chunkQO6PRHDX_cjs.useKeyboardShortcut; }
65
+ get: function () { return chunkAR7AKDM2_cjs.useKeyboardShortcut; }
64
66
  });
65
67
  Object.defineProperty(exports, "useMediaQuery", {
66
68
  enumerable: true,
67
- get: function () { return chunkQO6PRHDX_cjs.useMediaQuery; }
69
+ get: function () { return chunkAR7AKDM2_cjs.useMediaQuery; }
70
+ });
71
+ Object.defineProperty(exports, "useYouTubeHoverPreview", {
72
+ enumerable: true,
73
+ get: function () { return chunkIXFC7LK2_cjs.useYouTubeHoverPreview; }
68
74
  });
69
75
  Object.defineProperty(exports, "useTheme", {
70
76
  enumerable: true,
71
77
  get: function () { return chunk2O7D6F67_cjs.useTheme; }
72
78
  });
79
+ Object.defineProperty(exports, "useStickToBottom", {
80
+ enumerable: true,
81
+ get: function () { return chunkVPTASZ2O_cjs.useStickToBottom; }
82
+ });
83
+ Object.defineProperty(exports, "useStreamEndedBelowFold", {
84
+ enumerable: true,
85
+ get: function () { return chunkVPTASZ2O_cjs.useStreamEndedBelowFold; }
86
+ });
73
87
  Object.defineProperty(exports, "useScrollSpy", {
74
88
  enumerable: true,
75
89
  get: function () { return chunk7IKLGH3Z_cjs.useScrollSpy; }
@@ -126,9 +140,13 @@ Object.defineProperty(exports, "useLiveAnnouncement", {
126
140
  enumerable: true,
127
141
  get: function () { return chunkYVPC65ZJ_cjs.useLiveAnnouncement; }
128
142
  });
129
- Object.defineProperty(exports, "usePrefersReducedMotion", {
143
+ Object.defineProperty(exports, "useClickOutside", {
130
144
  enumerable: true,
131
- get: function () { return chunk6HFFWEM3_cjs.usePrefersReducedMotion; }
145
+ get: function () { return chunkFSGEDDF2_cjs.useClickOutside; }
146
+ });
147
+ Object.defineProperty(exports, "useAnchoredPosition", {
148
+ enumerable: true,
149
+ get: function () { return chunkAOHJILLU_cjs.useAnchoredPosition; }
132
150
  });
133
151
  Object.defineProperty(exports, "useFocusTrap", {
134
152
  enumerable: true,
@@ -138,13 +156,9 @@ Object.defineProperty(exports, "useEscapeKey", {
138
156
  enumerable: true,
139
157
  get: function () { return chunkFHY3K6PL_cjs.useEscapeKey; }
140
158
  });
141
- Object.defineProperty(exports, "useClickOutside", {
142
- enumerable: true,
143
- get: function () { return chunkFSGEDDF2_cjs.useClickOutside; }
144
- });
145
- Object.defineProperty(exports, "useAnchoredPosition", {
159
+ Object.defineProperty(exports, "usePrefersReducedMotion", {
146
160
  enumerable: true,
147
- get: function () { return chunkAOHJILLU_cjs.useAnchoredPosition; }
161
+ get: function () { return chunk6HFFWEM3_cjs.usePrefersReducedMotion; }
148
162
  });
149
163
  Object.defineProperty(exports, "isDarkMode", {
150
164
  enumerable: true,
@@ -319,6 +319,146 @@ declare function dragIndicatorClasses(drag: Pick<UseDragReorderReturn, 'dragging
319
319
  */
320
320
  declare function useLiveAnnouncement(): [string, (message: string) => void];
321
321
 
322
+ /**
323
+ * Options for {@link useStickToBottom}.
324
+ */
325
+ interface UseStickToBottomOptions {
326
+ /**
327
+ * Distance from the bottom (px) within which the user still counts as "at
328
+ * the bottom" — small offsets from rounding or momentum scrolling shouldn't
329
+ * break pinning.
330
+ */
331
+ threshold?: number;
332
+ /**
333
+ * Disable all behavior (listeners and observers detach). Useful when the
334
+ * scroll container anchors somewhere other than the bottom (e.g. a
335
+ * newest-first feed).
336
+ */
337
+ disabled?: boolean;
338
+ }
339
+ interface UseStickToBottomReturn {
340
+ /** Attach to the scrollable container. */
341
+ containerRef: React.RefObject<HTMLDivElement | null>;
342
+ /**
343
+ * Attach to the element wrapping the container's content. Its growth (e.g.
344
+ * a streaming message) re-pins the scroll while the user is at the bottom.
345
+ */
346
+ contentRef: React.RefObject<HTMLDivElement | null>;
347
+ /** Whether the user is currently at (or within `threshold` of) the bottom. */
348
+ isAtBottom: boolean;
349
+ /** Scroll to the bottom and resume pinning. */
350
+ scrollToBottom: (behavior?: ScrollBehavior) => void;
351
+ /**
352
+ * Scroll so `target`'s top aligns with the viewport top and enter “reading”
353
+ * mode: content growing past the fold no longer auto-follows, so the reader
354
+ * consumes the response at their own pace (the ChatGPT/Claude send UX).
355
+ * Following resumes when they explicitly return to the bottom — a
356
+ * jump-to-bottom click (`scrollToBottom`) or scrolling there by hand.
357
+ */
358
+ anchorToTurnStart: (target: HTMLElement, behavior?: ScrollBehavior) => void;
359
+ /**
360
+ * Scroll to the bottom only while actually following (at the bottom and not
361
+ * in reading mode). Returns whether it scrolled — hosts use this to decide
362
+ * between following an appended message and raising a “new messages” hint.
363
+ */
364
+ followIfPinned: (behavior?: ScrollBehavior) => boolean;
365
+ /**
366
+ * Hold the current position: enter reading mode without scrolling, so an
367
+ * incoming stream fills below the fold instead of pushing the view up.
368
+ * Call right after a streaming message appends (optionally after revealing
369
+ * its first line with `followIfPinned`). Following resumes exactly as after
370
+ * `anchorToTurnStart`: an explicit `scrollToBottom` or the reader returning
371
+ * to the bottom by hand.
372
+ */
373
+ stopFollowing: () => void;
374
+ }
375
+ /**
376
+ * Keeps a scroll container pinned to its bottom edge while the user is there,
377
+ * and — crucially — leaves the scroll position alone once they scroll up.
378
+ *
379
+ * Designed for chat threads with streaming responses:
380
+ * - While the user is at the bottom, content growth (new tokens, new
381
+ * messages) and container resizes (on-screen keyboard, growing composer)
382
+ * keep the newest content in view via a `ResizeObserver` on both the
383
+ * content and the container.
384
+ * - Once the user scrolls up, nothing moves until they return to the bottom
385
+ * themselves or the host calls `scrollToBottom` (e.g. a jump-to-bottom
386
+ * button, or an outgoing message from the local user).
387
+ *
388
+ * The hook only pins; *when* to force a scroll (own message sent, thread
389
+ * switched) stays a host decision through `scrollToBottom`,
390
+ * `anchorToTurnStart` (ChatGPT-style: scroll a fresh turn to the viewport top
391
+ * and pause following while the reader digests the reply), and
392
+ * `followIfPinned` (follow an append only while actually at the bottom).
393
+ *
394
+ * @example
395
+ * ```tsx
396
+ * const { containerRef, contentRef, isAtBottom, scrollToBottom } =
397
+ * useStickToBottom();
398
+ * return (
399
+ * <div className="relative min-h-0 flex-1">
400
+ * <div ref={containerRef} className="h-full overflow-y-auto">
401
+ * <div ref={contentRef}>{rows}</div>
402
+ * </div>
403
+ * {!isAtBottom && <JumpToBottom onClick={() => scrollToBottom('smooth')} />}
404
+ * </div>
405
+ * );
406
+ * ```
407
+ */
408
+ declare function useStickToBottom({ threshold, disabled, }?: UseStickToBottomOptions): UseStickToBottomReturn;
409
+ /**
410
+ * Companion to {@link useStickToBottom}: fires `onEnded` when the newest
411
+ * message finishes streaming while the reader is away from the bottom — the
412
+ * end of the reply landed below the fold, so the jump-to-bottom button should
413
+ * upgrade to its “new messages” hint. When the whole reply fit above the fold
414
+ * (the reader is still at the bottom), `onEndedAtBottom` fires instead so the
415
+ * host can exit the stream's hold and resume following (`scrollToBottom`).
416
+ */
417
+ declare function useStreamEndedBelowFold(newest: {
418
+ id: string;
419
+ status?: string;
420
+ } | undefined, isAtBottom: boolean, onEnded: () => void, onEndedAtBottom?: () => void): void;
421
+
422
+ type HoverPreviewState = 'idle' | 'loading' | 'playing';
423
+ interface UseYouTubeHoverPreviewOptions {
424
+ /** Hover dwell before the player mounts. Default 600ms. */
425
+ dwellMs?: number;
426
+ /** Player host. Default `https://www.youtube-nocookie.com`. */
427
+ host?: string;
428
+ /** Disable entirely (e.g. when the card has no YouTube id). */
429
+ enabled?: boolean;
430
+ }
431
+ interface UseYouTubeHoverPreviewReturn {
432
+ /** Lifecycle phase of the muted preview. */
433
+ preview: HoverPreviewState;
434
+ /** Normalised playback position (0–1) for a timeline bar. */
435
+ progress: number;
436
+ /** Attach to the element the muted iframe should fill. */
437
+ hostRef: React.RefObject<HTMLDivElement | null>;
438
+ /** Wire to the hover target's `onMouseEnter` / `onFocus`. */
439
+ handleEnter: () => void;
440
+ /** Wire to the hover target's `onMouseLeave` / `onBlur` (and any manual reset). */
441
+ stopPreview: () => void;
442
+ }
443
+ /**
444
+ * Drives a muted, looping YouTube hover preview for a single `youtubeId` — the
445
+ * "silent autoplay on dwell" pattern from YouTube's own grid. After a short
446
+ * hover dwell a muted player is mounted lazily inside `hostRef`; `progress`
447
+ * tracks playback for a timeline bar; everything tears down on leave so only
448
+ * one preview is ever live. Honours `prefers-reduced-motion` and skips
449
+ * pointer-less (touch) inputs.
450
+ *
451
+ * @example
452
+ * ```tsx
453
+ * const { preview, progress, hostRef, handleEnter, stopPreview } =
454
+ * useYouTubeHoverPreview('dQw4w9WgXcQ');
455
+ * <a onMouseEnter={handleEnter} onMouseLeave={stopPreview}>
456
+ * <div ref={hostRef} className={preview === 'playing' ? 'opacity-100' : 'opacity-0'} />
457
+ * </a>
458
+ * ```
459
+ */
460
+ declare function useYouTubeHoverPreview(youtubeId: string | undefined, { dwellMs, host, enabled, }?: UseYouTubeHoverPreviewOptions): UseYouTubeHoverPreviewReturn;
461
+
322
462
  type MediaTransportState = 'idle' | 'loading' | 'playing' | 'paused' | 'error';
323
463
  interface UseMediaTransportOptions {
324
464
  /** Fired on every native `timeupdate` and on metadata load, in milliseconds. */
@@ -404,4 +544,4 @@ interface UseMediaTransportReturn {
404
544
  */
405
545
  declare function useMediaTransport(options?: UseMediaTransportOptions): UseMediaTransportReturn;
406
546
 
407
- export { type Direction, type DragOverState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy };
547
+ export { type Direction, type DragOverState, type HoverPreviewState, type KeyboardShortcutOptions, type MediaTransportState, RTL_LOCALES, type UseDragReorderOptions, type UseDragReorderReturn, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, dragIndicatorClasses, isDarkMode, isRtlLocale, reorderIds, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useYouTubeHoverPreview };