@q9labsai/chalk-whiteboard 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +39 -0
  2. package/dist/chunk-4XG2ABSP.js +23 -0
  3. package/dist/chunk-FLUO6BVL.js +654 -0
  4. package/dist/collab/engine.d.ts +102 -0
  5. package/dist/collab/files.d.ts +65 -0
  6. package/dist/collab/index.d.ts +7 -0
  7. package/dist/collab/index.js +16 -0
  8. package/dist/collab/presence.d.ts +32 -0
  9. package/dist/collab/reducer.d.ts +2 -0
  10. package/dist/collab/syncable.d.ts +2 -0
  11. package/dist/collab/types.d.ts +2 -0
  12. package/dist/collab/wire.d.ts +29 -0
  13. package/dist/embedded/chalk-whiteboard/THIRD_PARTY_NOTICES.json +17 -0
  14. package/dist/embedded/chalk-whiteboard/asset-manifest.json +1228 -0
  15. package/dist/embedded/chalk-whiteboard/chalk.css +5 -0
  16. package/dist/embedded/chalk-whiteboard/compatibility-manifest.json +37 -0
  17. package/dist/embedded/chalk-whiteboard/fonts/Assistant/Assistant-Bold.woff2 +0 -0
  18. package/dist/embedded/chalk-whiteboard/fonts/Assistant/Assistant-Medium.woff2 +0 -0
  19. package/dist/embedded/chalk-whiteboard/fonts/Assistant/Assistant-Regular.woff2 +0 -0
  20. package/dist/embedded/chalk-whiteboard/fonts/Assistant/Assistant-SemiBold.woff2 +0 -0
  21. package/dist/embedded/chalk-whiteboard/fonts/Cascadia/CascadiaCode-Regular.woff2 +0 -0
  22. package/dist/embedded/chalk-whiteboard/fonts/ComicShanns/ComicShanns-Regular-279a7b317d12eb88de06167bd672b4b4.woff2 +0 -0
  23. package/dist/embedded/chalk-whiteboard/fonts/ComicShanns/ComicShanns-Regular-6e066e8de2ac57ea9283adb9c24d7f0c.woff2 +0 -0
  24. package/dist/embedded/chalk-whiteboard/fonts/ComicShanns/ComicShanns-Regular-dc6a8806fa96795d7b3be5026f989a17.woff2 +0 -0
  25. package/dist/embedded/chalk-whiteboard/fonts/ComicShanns/ComicShanns-Regular-fcb0fc02dcbee4c9846b3e2508668039.woff2 +0 -0
  26. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-349fac6ca4700ffec595a7150a0d1e1d.woff2 +0 -0
  27. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-3f2c5db56cc93c5a6873b1361d730c16.woff2 +0 -0
  28. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-41b173a47b57366892116a575a43e2b6.woff2 +0 -0
  29. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-623ccf21b21ef6b3a0d87738f77eb071.woff2 +0 -0
  30. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-a88b72a24fb54c9f94e3b5fdaa7481c9.woff2 +0 -0
  31. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-b9dcf9d2e50a1eaf42fc664b50a3fd0d.woff2 +0 -0
  32. package/dist/embedded/chalk-whiteboard/fonts/Excalifont/Excalifont-Regular-be310b9bcd4f1a43f571c46df7809174.woff2 +0 -0
  33. package/dist/embedded/chalk-whiteboard/fonts/Liberation/LiberationSans-Regular.woff2 +0 -0
  34. package/dist/embedded/chalk-whiteboard/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYE98RXi4EwSsbg.woff2 +0 -0
  35. package/dist/embedded/chalk-whiteboard/fonts/Lilita/Lilita-Regular-i7dPIFZ9Zz-WBtRtedDbYEF8RXi4EwQ.woff2 +0 -0
  36. package/dist/embedded/chalk-whiteboard/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTA3j6zbXWjgevT5.woff2 +0 -0
  37. package/dist/embedded/chalk-whiteboard/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTQ3j6zbXWjgeg.woff2 +0 -0
  38. package/dist/embedded/chalk-whiteboard/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTk3j6zbXWjgevT5.woff2 +0 -0
  39. package/dist/embedded/chalk-whiteboard/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTo3j6zbXWjgevT5.woff2 +0 -0
  40. package/dist/embedded/chalk-whiteboard/fonts/Nunito/Nunito-Regular-XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTs3j6zbXWjgevT5.woff2 +0 -0
  41. package/dist/embedded/chalk-whiteboard/fonts/Virgil/Virgil-Regular.woff2 +0 -0
  42. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-019d66dcad46dc156b162d267f981c20.woff2 +0 -0
  43. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-04b718e5623574919c8b0dea5f301444.woff2 +0 -0
  44. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-069e77aac84590e2e991d0a0176d34f2.woff2 +0 -0
  45. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-06c77b8c66e51ed6c63ccb502dd8b8af.woff2 +0 -0
  46. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-08e0dc436ad0ad61ba5558db0674d762.woff2 +0 -0
  47. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-093b9ef39a46ceae95a1df18a0a3a326.woff2 +0 -0
  48. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-095c169f3314805276f603a362766abd.woff2 +0 -0
  49. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-09850c4077f3fffe707905872e0e2460.woff2 +0 -0
  50. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0986d134c05864f5025962eef9f994a0.woff2 +0 -0
  51. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0b5d723fdc4e249c140f0909e87d03b4.woff2 +0 -0
  52. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0f626226ba1272e832aea87bafd9720e.woff2 +0 -0
  53. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0f7fb1e0d5015bb1371343153ecf7ce3.woff2 +0 -0
  54. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0fa55a080fcd0f9dc2e0b0058b793df8.woff2 +0 -0
  55. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-0facdf1ea213ba40261022f5d5ed4493.woff2 +0 -0
  56. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-10a7ae9a371830a80c3d844acf1c02d7.woff2 +0 -0
  57. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-112c051027b2d766c19a519f6ee1f4f7.woff2 +0 -0
  58. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-11c345711937f0ba4b8f7b6b919c8440.woff2 +0 -0
  59. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-12b52b58eb3df36804b9a654ec9ee194.woff2 +0 -0
  60. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-13ae07ed2e272d26d59bc0691cd7117a.woff2 +0 -0
  61. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-13d2887ec8ee73c43acdabc52a05af7b.woff2 +0 -0
  62. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-145aa02cdd91946e67dc934e1acffe75.woff2 +0 -0
  63. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-15dc6d811c9cd078f9086a740d5a1038.woff2 +0 -0
  64. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-173945821411c09f70c95f98d590e697.woff2 +0 -0
  65. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-1b611157cd46bb184d4fa4dae2d6a2b8.woff2 +0 -0
  66. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-1e6fd68f1f3902ce48ce8c69df385622.woff2 +0 -0
  67. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-1ee544f0f1dac422545c505baa788992.woff2 +0 -0
  68. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-1fdc0c67ed57263a80fd108c1f6ccf24.woff2 +0 -0
  69. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-203b0e569e3b14aac86a003dc3fa523e.woff2 +0 -0
  70. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-20cc1bbf50e7efb442756cb605672c1f.woff2 +0 -0
  71. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-20e7bf72fa05de9adf7dbcc7bf51dde6.woff2 +0 -0
  72. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-21430ee05a1248901da8d0de08744d47.woff2 +0 -0
  73. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-23686f7f29da6e8008c36dd3a80c83d6.woff2 +0 -0
  74. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-23ad2d71b280f00b1363b95b7bea94eb.woff2 +0 -0
  75. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-23f228f3999c01983860012330e4be08.woff2 +0 -0
  76. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-24476a126f129212beb33f66853ea151.woff2 +0 -0
  77. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-24a21c1e4449222e8d1898d69ff3a404.woff2 +0 -0
  78. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-25b7f38e18f035f96cb5e547bd2bd08c.woff2 +0 -0
  79. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-29cec36cd205b211da97acabaa62f055.woff2 +0 -0
  80. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2a26d20a23b00898ce82f09d2ee47c3f.woff2 +0 -0
  81. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2adbc89c11e65905393d3dfc468b9d5b.woff2 +0 -0
  82. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2b7441d46298788ac94e610ffcc709b6.woff2 +0 -0
  83. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2b77e8ebfb2367ab2662396a60e7d320.woff2 +0 -0
  84. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2cf96d082d35ea3d8106851223ad0d16.woff2 +0 -0
  85. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2d43040e86ff03ba677f6f9c04cd0805.woff2 +0 -0
  86. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-2e33e8dc771ef5e1d9127d60a6b73679.woff2 +0 -0
  87. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-33432927cd87d40cfe393c7482bf221f.woff2 +0 -0
  88. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-353f33792a8f60dc69323ddf635a269e.woff2 +0 -0
  89. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-36925dfe329a45086cbb7fc5c20d45ac.woff2 +0 -0
  90. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3717077e38f98d89eae729b6c14e56dc.woff2 +0 -0
  91. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3756e81d3e149cf6099163ee79944fec.woff2 +0 -0
  92. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-395c35dd584b56b0789f58a0559beaf1.woff2 +0 -0
  93. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3c9de2ae0ea4bc91a510942dfa4be8d2.woff2 +0 -0
  94. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3cc70dbb64df5b21f1326cc24dee2195.woff2 +0 -0
  95. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3e1f8f654357353bf0e04ba5c34b5f7f.woff2 +0 -0
  96. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3e63ed8162808a9e425ed80a8bc79114.woff2 +0 -0
  97. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-3eaa538115d76932653c21d8dc28f207.woff2 +0 -0
  98. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4095eb84ef3874e2600247bee0b04026.woff2 +0 -0
  99. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-41521fade99856108931b4768b1b2648.woff2 +0 -0
  100. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-450da755d5bcb70906e1295e559b9602.woff2 +0 -0
  101. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-452225341522a7942f0f6aab1a5c91a3.woff2 +0 -0
  102. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4535823663ad81405188a528d8f2b1a2.woff2 +0 -0
  103. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4806e761d750087c2d734fc64596eaff.woff2 +0 -0
  104. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4a0fdb40036e87b40aa08dd30584cb85.woff2 +0 -0
  105. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4a38cc3e9cf104e69ba246d37f8cf135.woff2 +0 -0
  106. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4aca6a43e59aceee2166b0c7e4e85ef1.woff2 +0 -0
  107. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4bfaa8ffa64c5ee560aa2daba7c9cbd3.woff2 +0 -0
  108. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4dc6d5f188d5c96d44815cd1e81aa885.woff2 +0 -0
  109. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4ddc14ed3eb0c3e46364317dfc0144a3.woff2 +0 -0
  110. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4ee10ae43505e2e0bc62656ced49c0fa.woff2 +0 -0
  111. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-4f50e5136e136527280bc902c5817561.woff2 +0 -0
  112. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-51502f1206be09c565f1547c406e9558.woff2 +0 -0
  113. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-51a0e808bbc8361236ac521a119758a3.woff2 +0 -0
  114. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-52a84a22fd1369bffeaf21da2d6158dc.woff2 +0 -0
  115. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5330a2119a716e4e7224ed108b085dac.woff2 +0 -0
  116. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-543fa46ace099a7099dad69123399400.woff2 +0 -0
  117. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-544fc28abe2c5c30e62383fd4dac255f.woff2 +0 -0
  118. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-54acdfc2166ad7fcbd074f75fd4a56ba.woff2 +0 -0
  119. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5572b3513ba8df57a3d5d7303ee6b11b.woff2 +0 -0
  120. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-56467a5c8840c4d23a60b2f935114848.woff2 +0 -0
  121. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-56a32a7689abd0326e57c10c6c069bb4.woff2 +0 -0
  122. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-57862b464a55b18c7bf234ce22907d73.woff2 +0 -0
  123. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-583d166e56ba0de4b77eabb47ef67839.woff2 +0 -0
  124. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5882ffa04f32584d26109137e2da4352.woff2 +0 -0
  125. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-58fd02350d0bc52cf1ca3bb32ce9766e.woff2 +0 -0
  126. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5935a5775af3d5c6307ac667bd9ae74e.woff2 +0 -0
  127. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-59e9ff77b0efaf684bc09274fb6908c9.woff2 +0 -0
  128. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5a1ce3117cfe90c48e8fb4a9a00f694d.woff2 +0 -0
  129. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5a45d991244d4c7140217e1e5f5ca4f4.woff2 +0 -0
  130. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5a7fac4b8b23a6e4e5ba0c9bf1756c91.woff2 +0 -0
  131. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5b0ed6971aaab9c8ad563230bd5471a7.woff2 +0 -0
  132. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-5d2898fbc097a7e24c6f38d80587621e.woff2 +0 -0
  133. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-603aefd23e350ba7eb124273e3c9bcf1.woff2 +0 -0
  134. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-60a3089806700d379f11827ee9843b6b.woff2 +0 -0
  135. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-60a41c7e1c68f22424e6d22df544bc82.woff2 +0 -0
  136. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-642b26e2e5f5fb780b51b593dbc8c851.woff2 +0 -0
  137. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-66493ba5a8367f2928812f446f47b56a.woff2 +0 -0
  138. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-670ba603758d94268e8606f240a42e12.woff2 +0 -0
  139. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-671a2c20b1eb9e4ef8a192833940e319.woff2 +0 -0
  140. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-684d65f1793cac449dde5d59cb3c47fb.woff2 +0 -0
  141. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-69c09cc5fa3e55c74fc4821f76909cc3.woff2 +0 -0
  142. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-6ae5b42180ad70b971c91e7eefb8eba2.woff2 +0 -0
  143. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-6e092f71c1e634059ada0e52abadce67.woff2 +0 -0
  144. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-6f3256af8454371776bc46670d33cc65.woff2 +0 -0
  145. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-6fe5c5973cc06f74b2387a631ea36b88.woff2 +0 -0
  146. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-70c2eb8d64e71a42a834eb857ea9df51.woff2 +0 -0
  147. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-70e811fd7994e61f408c923de6ddd078.woff2 +0 -0
  148. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7197d6fda6cba7c3874c53d6381ca239.woff2 +0 -0
  149. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-72252d73220fa3cd856677888cee1635.woff2 +0 -0
  150. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-72536a3d71b694a0d53dd90ddceae41e.woff2 +0 -0
  151. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-726303e0774b4e678bff8c2deb6ca603.woff2 +0 -0
  152. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-733171b4ffcd17ea1fe1c0ba627173bf.woff2 +0 -0
  153. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-739bc1a567439c7cffcd1614644593d2.woff2 +0 -0
  154. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-73e309718fd16cea44b4d54a33581811.woff2 +0 -0
  155. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7494dc504ae00ee9cd0505f990f88c5d.woff2 +0 -0
  156. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-74e2263a91439c25b91d5132ce9f4d62.woff2 +0 -0
  157. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-761d05e3cd968cf574166867998ef06a.woff2 +0 -0
  158. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7718fe60986d8b42b1be9c5ace5ccf25.woff2 +0 -0
  159. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-774d4f764a1299da5d28ec2f2ffe0d69.woff2 +0 -0
  160. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-79d494361ae093b69e74ee9dbe65bfd4.woff2 +0 -0
  161. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-79f007c1c6d07557120982951ea67998.woff2 +0 -0
  162. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7a07ddc0f0c0f5f4a9bad6ee3dda66b5.woff2 +0 -0
  163. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7ab2bed91166a9dca83a5ebfbe2a7f38.woff2 +0 -0
  164. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7ccce86603f80a099ddb0cb21d4ae3e3.woff2 +0 -0
  165. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7e4bde7e9c7f84cd34d8a845e384c746.woff2 +0 -0
  166. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7e929f262f30c8ee78bf398150b1a7cd.woff2 +0 -0
  167. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7eb9fffd1aa890d07d0f88cc82e6cfe4.woff2 +0 -0
  168. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-7f855356ab893b0d2b9c1c83b8116f0e.woff2 +0 -0
  169. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-829615148e6357d826b9242eb7fbbd1e.woff2 +0 -0
  170. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-866fa7613df6b3fd272bcfd4530c0bb9.woff2 +0 -0
  171. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-87599f94b6cc129d505b375798d0d751.woff2 +0 -0
  172. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-8c2f33cee3993174f7e87c28e4bf42ee.woff2 +0 -0
  173. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-8d3bcabb847b56243b16afe62adaaf21.woff2 +0 -0
  174. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-8de5b863cb50dfefdd07cb11c774d579.woff2 +0 -0
  175. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-8e9f97f01034820170065b2921b4fb5e.woff2 +0 -0
  176. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-8f476c4c99813d57cbe6eca4727388ad.woff2 +0 -0
  177. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-903bb6865f3452e2fda42e3a25547bc5.woff2 +0 -0
  178. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-91ddb2969bf2d31ba02ad82998d1314c.woff2 +0 -0
  179. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-938d90c10ff8c20386af7f242c05d6b0.woff2 +0 -0
  180. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-93fc8f28a33234bcadf1527cafabd502.woff2 +0 -0
  181. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-95429962233afd82db1c27df1500a28c.woff2 +0 -0
  182. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-9544732d2e62d1a429674f8ee41b5d3a.woff2 +0 -0
  183. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-9592bfc861f07bcb8d75c196b370e548.woff2 +0 -0
  184. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-95bfd249da4902577b4b7d76ebdd0b44.woff2 +0 -0
  185. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-968cffdc8ee679da094e77ebf50f58ef.woff2 +0 -0
  186. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-97f7f48ce90c9429bf32ae51469db74d.woff2 +0 -0
  187. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-982b630266d87db93d2539affb1275c6.woff2 +0 -0
  188. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-98f2ad84457de7f3740d9920b8fa8667.woff2 +0 -0
  189. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-99a16ef6a64934d5781933dbd9c46b2e.woff2 +0 -0
  190. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-9cfb2a77a4e45025105ad29a1748b90d.woff2 +0 -0
  191. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-9d81066dd2b337c938df6e90380a00dc.woff2 +0 -0
  192. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-9eb5a99df4e76ac3363453ac9ca288b1.woff2 +0 -0
  193. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a004ddfcb26e67bd6e678c8ed19e25ce.woff2 +0 -0
  194. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a0ca5df4258213d7fc9fce80f65ce760.woff2 +0 -0
  195. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a1f916d6039285c4ffb900cd654e418f.woff2 +0 -0
  196. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a203b91dad570bf05a58c3c3ddb529bf.woff2 +0 -0
  197. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a365e82ed54697a52f27adcea1315fe8.woff2 +0 -0
  198. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a4c34be6d42152e64b0df90bc4607f64.woff2 +0 -0
  199. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-a7accba310e821da5505f71c03b76bdb.woff2 +0 -0
  200. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-aa0d470430e6391eca720c7cfa44446f.woff2 +0 -0
  201. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-aa5c9ca6cf4fba00433b7aa3fa10671a.woff2 +0 -0
  202. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-ac9ceb44437becc3e9c4dbfebab7fc2d.woff2 +0 -0
  203. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b1220a3c61f85cc0408deedb4c5f57a2.woff2 +0 -0
  204. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b358f7a51ece39a3247942b1feabdb29.woff2 +0 -0
  205. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b57aaedfd8ebdf3931f25119dc6a5eb2.woff2 +0 -0
  206. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b5c1596551c256e0e9cf02028595b092.woff2 +0 -0
  207. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b6d128682ee29e471486354d486a1b90.woff2 +0 -0
  208. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b6fd38ca30869792244804b04bc058da.woff2 +0 -0
  209. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b7d203b051eff504ff59ddca7576b6a9.woff2 +0 -0
  210. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-b96d9226ce77ec94ceca043d712182e6.woff2 +0 -0
  211. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-ba3de316d63c7e339987b16f41a0b879.woff2 +0 -0
  212. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-bafff7a14c27403dcc6cf1432e8ea836.woff2 +0 -0
  213. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-bd77e3c7f9e0b072d96af37f73d1aa32.woff2 +0 -0
  214. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-be549ab72f0719d606a5c01e2c0219b6.woff2 +0 -0
  215. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c16ed9740b85badf16e86ea782a3062f.woff2 +0 -0
  216. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c1f94158256bb1f3bf665b053d895af9.woff2 +0 -0
  217. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c40533fdf4cc57177b12803598af7e59.woff2 +0 -0
  218. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c4a687ac4f0c2766eefc9f77ed99cddf.woff2 +0 -0
  219. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c69f61a4ab18d0488c8d1fc12e7028e8.woff2 +0 -0
  220. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c8b71798409ccc126ee264a00aadcf21.woff2 +0 -0
  221. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-c99eda15fc26a2941579560f76c3a5cf.woff2 +0 -0
  222. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cb17fc3db95f6d139afc9d31a8e93293.woff2 +0 -0
  223. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cbaaefaaf326668277aa24dfa93c4d28.woff2 +0 -0
  224. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cd145ce4a0ea18469358df53c207bc1b.woff2 +0 -0
  225. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cdbce89e82cc1ab53a2decbf5819278f.woff2 +0 -0
  226. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-ce4884f96f11589608b76b726a755803.woff2 +0 -0
  227. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cf2cc71752631e579e35b0e423bf2638.woff2 +0 -0
  228. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cf6ff4e0f491ca0cf3038187a997b9b4.woff2 +0 -0
  229. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-cfb211578629b7e8153b37240de6a9d5.woff2 +0 -0
  230. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-d0cf73942fea1c74edbdf0b3011f4656.woff2 +0 -0
  231. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-d2666cbed13462c5dc36fa2f15c202ca.woff2 +0 -0
  232. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-d3716376641d615e2995605b29bca7b6.woff2 +0 -0
  233. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-dac48066b5883d8b4551fc584f0c2a3e.woff2 +0 -0
  234. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-dbea1af6dcd9860be40c3d18254338f5.woff2 +0 -0
  235. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e11567fd2accf9957cd0d3c2be937d87.woff2 +0 -0
  236. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e2ead7ea7da0437f085f42ffc05f8d13.woff2 +0 -0
  237. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e3fcf5180fd466c8915c4e8069491054.woff2 +0 -0
  238. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e480d9c614742d05f0e78f274f1e69e6.woff2 +0 -0
  239. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e4bca6cfa53e499cae0a6be4894a90e9.woff2 +0 -0
  240. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e51ef413167c6e14e0c0fdcc585f2fc9.woff2 +0 -0
  241. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e5f453bb04da18eed01675eeebd88bf8.woff2 +0 -0
  242. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-e656f091b9dc4709722c9f4b84d3c797.woff2 +0 -0
  243. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-ec181b795ac1fb5a50d700b6e996d745.woff2 +0 -0
  244. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-ee8bae97908d5147b423f77ad0d3c1bb.woff2 +0 -0
  245. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f0f13b5c60e0af5553bd359f5513be1b.woff2 +0 -0
  246. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f2b54d4e7be0eaefe1c2c56836fa5368.woff2 +0 -0
  247. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f56414bf9bced67990def8660e306759.woff2 +0 -0
  248. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f5d079153c99a25b9be5b8583c4cc8a7.woff2 +0 -0
  249. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f6032fc06eb20480f096199713f70885.woff2 +0 -0
  250. package/dist/embedded/chalk-whiteboard/fonts/Xiaolai/Xiaolai-Regular-f8ee5d36068a42b51d0e4a1116cfcec1.woff2 +0 -0
  251. package/dist/embedded/chalk-whiteboard/index.css +1 -0
  252. package/dist/embedded/chalk-whiteboard/index.html +17 -0
  253. package/dist/embedded/chalk-whiteboard/licenses/Excalidraw.txt +21 -0
  254. package/dist/embedded/chalk-whiteboard/licenses/MathJax.txt +202 -0
  255. package/dist/embedded/chalk-whiteboard/mathjax/tex-svg.js +1 -0
  256. package/dist/embedded/chalk-whiteboard/mathjax-config.js +1 -0
  257. package/dist/embedded/chalk-whiteboard/renderer.js +4114 -0
  258. package/dist/embedded/controller.d.ts +123 -0
  259. package/dist/embedded/index.d.ts +5 -0
  260. package/dist/embedded/index.js +897 -0
  261. package/dist/embedded/manifest.d.ts +40 -0
  262. package/dist/embedded/protocol.d.ts +211 -0
  263. package/dist/embedded/renderer-bridge.d.ts +37 -0
  264. package/dist/embedded/renderer.d.ts +25 -0
  265. package/dist/engine-UMQR3O33.js +6 -0
  266. package/dist/index.d.ts +3 -0
  267. package/dist/index.js +14 -0
  268. package/dist/react/MathEditor.d.ts +17 -0
  269. package/dist/react/WhiteboardCanvas.d.ts +47 -0
  270. package/dist/react/index.d.ts +7 -0
  271. package/dist/react/index.js +625 -0
  272. package/dist/react/math-elements.d.ts +40 -0
  273. package/dist/react/mathjax-renderer.d.ts +34 -0
  274. package/package.json +97 -0
@@ -0,0 +1,625 @@
1
+ // src/react/WhiteboardCanvas.tsx
2
+ import { memo, useCallback, useEffect, useMemo, useRef, useState as useState2 } from "react";
3
+
4
+ // src/react/MathEditor.tsx
5
+ import { useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function MathEditor({ initialLatex, isEditing, classNames, icons, onClose, onSubmit }) {
8
+ const [latex, setLatex] = useState(initialLatex);
9
+ const [isSubmitting, setIsSubmitting] = useState(false);
10
+ const [error, setError] = useState(null);
11
+ const canSubmit = latex.trim().length > 0 && !isSubmitting;
12
+ const handleSubmit = async () => {
13
+ if (!canSubmit) return;
14
+ setIsSubmitting(true);
15
+ setError(null);
16
+ try {
17
+ await onSubmit(latex.trim());
18
+ } catch (submitError) {
19
+ setError(submitError instanceof Error ? submitError.message : "Failed to render equation");
20
+ setIsSubmitting(false);
21
+ }
22
+ };
23
+ return /* @__PURE__ */ jsx("div", { className: classNames.mathOverlay, style: { position: "absolute", inset: 0, zIndex: 40, display: "flex", alignItems: "center", justifyContent: "center", padding: 16 }, children: /* @__PURE__ */ jsxs("div", { className: classNames.mathDialog, style: { width: "100%", maxWidth: 576 }, children: [
24
+ /* @__PURE__ */ jsxs("div", { className: classNames.mathHeader, style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
25
+ /* @__PURE__ */ jsx("div", { className: classNames.mathTitle, children: isEditing ? "Edit equation" : "Math" }),
26
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: onClose, className: classNames.mathCloseButton, "aria-label": "Close math editor", children: icons.close ?? "x" })
27
+ ] }),
28
+ /* @__PURE__ */ jsxs("div", { className: classNames.mathBody, style: { display: "grid", gap: 12 }, children: [
29
+ /* @__PURE__ */ jsx("textarea", { value: latex, onChange: (event) => setLatex(event.target.value), className: classNames.mathTextarea, spellCheck: false, autoFocus: true, "aria-label": "LaTeX equation" }),
30
+ error && /* @__PURE__ */ jsx("div", { className: classNames.mathError, children: error }),
31
+ /* @__PURE__ */ jsxs("div", { className: classNames.mathActions, style: { display: "flex", justifyContent: "flex-end", gap: 8 }, children: [
32
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: onClose, className: classNames.mathCancelButton, children: "Cancel" }),
33
+ /* @__PURE__ */ jsxs("button", { type: "button", onClick: handleSubmit, disabled: !canSubmit, className: classNames.mathSubmitButton, children: [
34
+ isSubmitting ? icons.submitting : icons.submit,
35
+ "Insert"
36
+ ] })
37
+ ] })
38
+ ] })
39
+ ] }) });
40
+ }
41
+
42
+ // src/react/math-elements.ts
43
+ var CHALK_MATH_CUSTOM_DATA_KEY = "chalk";
44
+ var CHALK_MATH_RENDERER = "mathjax-svg";
45
+ var encodeBase64 = (value) => {
46
+ const bytes = new TextEncoder().encode(value);
47
+ if (typeof btoa === "function") {
48
+ let binary = "";
49
+ const chunkSize = 32768;
50
+ for (let index = 0; index < bytes.length; index += chunkSize) {
51
+ binary += String.fromCharCode(...bytes.slice(index, index + chunkSize));
52
+ }
53
+ return btoa(binary);
54
+ }
55
+ const nodeBuffer = globalThis.Buffer;
56
+ if (nodeBuffer) return nodeBuffer.from(bytes).toString("base64");
57
+ throw new Error("Base64 encoding is unavailable in this runtime");
58
+ };
59
+ var svgToDataUrl = (svg) => `data:image/svg+xml;base64,${encodeBase64(svg)}`;
60
+ var createMathFileId = () => `chalk-math-${Date.now()}-${Math.random().toString(36).slice(2)}`;
61
+ function createMathImageAsset(args) {
62
+ const created = Date.now();
63
+ const fileId = createMathFileId();
64
+ return {
65
+ file: {
66
+ id: fileId,
67
+ mimeType: "image/svg+xml",
68
+ dataURL: svgToDataUrl(args.svg),
69
+ created,
70
+ lastRetrieved: created
71
+ },
72
+ width: args.width,
73
+ height: args.height,
74
+ customData: {
75
+ [CHALK_MATH_CUSTOM_DATA_KEY]: {
76
+ kind: "math",
77
+ latex: args.latex,
78
+ renderer: CHALK_MATH_RENDERER,
79
+ version: 1,
80
+ displayMode: args.displayMode
81
+ }
82
+ }
83
+ };
84
+ }
85
+ function getChalkMathData(element) {
86
+ const data = element?.customData?.[CHALK_MATH_CUSTOM_DATA_KEY];
87
+ if (data?.kind !== "math" || typeof data.latex !== "string") return null;
88
+ return {
89
+ kind: "math",
90
+ latex: data.latex,
91
+ renderer: data.renderer === CHALK_MATH_RENDERER ? CHALK_MATH_RENDERER : CHALK_MATH_RENDERER,
92
+ version: 1,
93
+ displayMode: data.displayMode !== false
94
+ };
95
+ }
96
+ function isChalkMathElement(element) {
97
+ return element?.type === "image" && getChalkMathData(element) !== null;
98
+ }
99
+ function getSelectedMathElement(api) {
100
+ const selectedIds = api.getAppState().selectedElementIds ?? {};
101
+ const selected = api.getSceneElements().find((element) => selectedIds[element.id] && isChalkMathElement(element));
102
+ return selected ? selected : null;
103
+ }
104
+ var getZoom = (zoom) => {
105
+ const value = typeof zoom === "object" && zoom !== null && "value" in zoom ? Number(zoom.value) : 1;
106
+ return Number.isFinite(value) && value > 0 ? value : 1;
107
+ };
108
+ function getInsertionPoint(api, width, height) {
109
+ const appState = api.getAppState();
110
+ const zoom = getZoom(appState.zoom);
111
+ const viewportWidth = typeof window === "undefined" ? 1200 : window.innerWidth;
112
+ const viewportHeight = typeof window === "undefined" ? 800 : window.innerHeight;
113
+ return {
114
+ x: Math.round((-appState.scrollX + viewportWidth / 2) / zoom - width / 2),
115
+ y: Math.round((-appState.scrollY + viewportHeight / 2) / zoom - height / 2)
116
+ };
117
+ }
118
+ function replaceMathElement(args, existingElement) {
119
+ const { api, asset, excalidraw, status } = args;
120
+ const nextElement = excalidraw.newElementWith(existingElement, {
121
+ fileId: asset.file.id,
122
+ width: asset.width,
123
+ height: asset.height,
124
+ status,
125
+ customData: { ...existingElement.customData ?? {}, ...asset.customData }
126
+ });
127
+ const elements = api.getSceneElementsIncludingDeleted().map((element) => element.id === existingElement.id ? nextElement : element);
128
+ api.updateScene({ elements, captureUpdate: excalidraw.CaptureUpdateAction.IMMEDIATELY });
129
+ return nextElement;
130
+ }
131
+ function appendMathElement(args) {
132
+ const { api, asset, excalidraw, status } = args;
133
+ const point = getInsertionPoint(api, asset.width, asset.height);
134
+ const [element] = excalidraw.convertToExcalidrawElements([{ type: "image", x: point.x, y: point.y, width: asset.width, height: asset.height, fileId: asset.file.id, status, customData: asset.customData }], { regenerateIds: true });
135
+ if (!element) throw new Error("Failed to create math element");
136
+ api.updateScene({
137
+ elements: [...api.getSceneElementsIncludingDeleted(), element],
138
+ appState: { selectedElementIds: { [element.id]: true } },
139
+ captureUpdate: excalidraw.CaptureUpdateAction.IMMEDIATELY
140
+ });
141
+ return element;
142
+ }
143
+ function appendOrReplaceMathElement(args) {
144
+ const { api, asset, excalidraw, existingElement } = args;
145
+ const status = args.status ?? "pending";
146
+ api.addFiles([asset.file]);
147
+ const mutationArgs = { api, asset, excalidraw, status };
148
+ return existingElement ? replaceMathElement(mutationArgs, existingElement) : appendMathElement(mutationArgs);
149
+ }
150
+
151
+ // src/react/mathjax-renderer.ts
152
+ var MATHJAX_INPUT_EM = 16;
153
+ var MATHJAX_INPUT_EX = 8;
154
+ var MATHJAX_CONTAINER_WIDTH = 80 * MATHJAX_INPUT_EM;
155
+ var DEFAULT_MATHJAX_SCRIPT_URL = "https://cdn.jsdelivr.net/npm/mathjax@4.1.3/tex-svg-nofont.js";
156
+ var mathJaxReady = null;
157
+ var getMathJaxGlobal = () => typeof window === "undefined" ? globalThis.MathJax : window.MathJax;
158
+ async function waitForMathJaxRuntime() {
159
+ const startedAt = Date.now();
160
+ while (Date.now() - startedAt < 5e3) {
161
+ const runtime = getMathJaxGlobal();
162
+ if (runtime?.startup?.promise && typeof runtime.tex2svgPromise === "function") {
163
+ await runtime.startup.promise;
164
+ return runtime;
165
+ }
166
+ await new Promise((resolve) => setTimeout(resolve, 25));
167
+ }
168
+ throw new Error("Math renderer failed to initialize");
169
+ }
170
+ function configureMathJax(target, existing) {
171
+ target.MathJax = {
172
+ ...existing ?? {},
173
+ options: { ...existing?.options, enableMenu: false },
174
+ startup: { ...existing?.startup, typeset: false },
175
+ svg: { fontCache: "none", ...existing?.svg }
176
+ };
177
+ }
178
+ function loadMathJaxScript() {
179
+ return new Promise((resolve, reject) => {
180
+ const existingScript = document.querySelector('script[data-chalk-mathjax="true"]');
181
+ if (existingScript) {
182
+ existingScript.addEventListener("load", () => resolve(), { once: true });
183
+ existingScript.addEventListener("error", () => reject(new Error("Math renderer failed to load")), { once: true });
184
+ return;
185
+ }
186
+ const script = document.createElement("script");
187
+ script.src = DEFAULT_MATHJAX_SCRIPT_URL;
188
+ script.async = true;
189
+ script.dataset.chalkMathjax = "true";
190
+ script.onload = () => resolve();
191
+ script.onerror = () => reject(new Error("Math renderer failed to load"));
192
+ document.head.appendChild(script);
193
+ });
194
+ }
195
+ async function initializeMathJax() {
196
+ if (typeof document === "undefined") throw new Error("Math rendering is only available in the browser");
197
+ const target = typeof window === "undefined" ? globalThis : window;
198
+ const existing = getMathJaxGlobal();
199
+ if (existing?.tex2svgPromise && existing.startup?.promise) {
200
+ await existing.startup.promise;
201
+ return existing;
202
+ }
203
+ configureMathJax(target, existing);
204
+ await loadMathJaxScript();
205
+ return waitForMathJaxRuntime();
206
+ }
207
+ async function loadMathJax() {
208
+ if (mathJaxReady) return mathJaxReady;
209
+ mathJaxReady = initializeMathJax();
210
+ return mathJaxReady;
211
+ }
212
+ var parseSvgLength = (value, unitScale) => {
213
+ if (!value) return null;
214
+ const numeric = Number.parseFloat(value);
215
+ if (!Number.isFinite(numeric)) return null;
216
+ return numeric * unitScale;
217
+ };
218
+ function getRenderedSvgSize(svg) {
219
+ const widthAttr = /<svg\b[^>]*\bwidth="([^"]+)"/u.exec(svg)?.[1] ?? null;
220
+ const heightAttr = /<svg\b[^>]*\bheight="([^"]+)"/u.exec(svg)?.[1] ?? null;
221
+ const viewBox = /<svg\b[^>]*\bviewBox="([^"]+)"/u.exec(svg)?.[1] ?? null;
222
+ const width = parseSvgLength(widthAttr, widthAttr?.endsWith("ex") ? MATHJAX_INPUT_EX : 1);
223
+ const height = parseSvgLength(heightAttr, heightAttr?.endsWith("ex") ? MATHJAX_INPUT_EX : 1);
224
+ if (width && height) {
225
+ return {
226
+ width: Math.max(64, Math.ceil(width + 24)),
227
+ height: Math.max(40, Math.ceil(height + 24))
228
+ };
229
+ }
230
+ const [, , viewBoxWidth, viewBoxHeight] = viewBox?.split(/\s+/u).map(Number) ?? [];
231
+ if (viewBoxWidth && viewBoxHeight && Number.isFinite(viewBoxWidth) && Number.isFinite(viewBoxHeight)) {
232
+ return {
233
+ width: Math.max(64, Math.ceil(viewBoxWidth / 40 + 24)),
234
+ height: Math.max(40, Math.ceil(viewBoxHeight / 40 + 24))
235
+ };
236
+ }
237
+ return { width: 240, height: 96 };
238
+ }
239
+ async function renderLatexToSvg(latex, displayMode = true) {
240
+ const runtime = await loadMathJax();
241
+ const node = await runtime.tex2svgPromise(latex, {
242
+ display: displayMode,
243
+ em: MATHJAX_INPUT_EM,
244
+ ex: MATHJAX_INPUT_EX,
245
+ containerWidth: MATHJAX_CONTAINER_WIDTH
246
+ });
247
+ const svgNode = runtime.startup.adaptor.tags(node, "svg")[0];
248
+ if (!svgNode) throw new Error("Math renderer did not produce SVG");
249
+ const svg = runtime.startup.adaptor.serializeXML(svgNode);
250
+ return {
251
+ svg,
252
+ ...getRenderedSvgSize(svg)
253
+ };
254
+ }
255
+
256
+ // src/react/WhiteboardCanvas.tsx
257
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
258
+ var DEFAULT_EXCALIDRAW_CSS = "https://cdn.jsdelivr.net/npm/@excalidraw/excalidraw@0.18.1/dist/prod/index.css";
259
+ var DEFAULT_LATEX = String.raw`E = mc^2`;
260
+ var defaultClassNames = {
261
+ root: "",
262
+ toolbar: "",
263
+ toolbarButton: "",
264
+ loading: "",
265
+ loadingContent: "",
266
+ error: "",
267
+ mathOverlay: "",
268
+ mathDialog: "",
269
+ mathHeader: "",
270
+ mathTitle: "",
271
+ mathCloseButton: "",
272
+ mathBody: "",
273
+ mathTextarea: "",
274
+ mathError: "",
275
+ mathActions: "",
276
+ mathCancelButton: "",
277
+ mathSubmitButton: ""
278
+ };
279
+ function useWhiteboardCanvasConfiguration(props) {
280
+ const classNames = useMemo(() => ({ ...defaultClassNames, ...props.classNames }), [props.classNames]);
281
+ const canDraw = valueOr(props.collab?.canDraw, valueOr(props.canDraw, true));
282
+ const rootClassName = [classNames.root, valueOr(props.className, "")].filter(Boolean).join(" ");
283
+ return {
284
+ canDraw,
285
+ classNames,
286
+ excalidrawCssPath: valueOr(props.excalidrawCssPath, DEFAULT_EXCALIDRAW_CSS),
287
+ icons: valueOr(props.icons, {}),
288
+ isCollaborating: Boolean(props.collab),
289
+ isVisible: valueOr(props.isVisible, true),
290
+ rootClassName,
291
+ theme: valueOr(props.theme, "light")
292
+ };
293
+ }
294
+ function valueOr(value, fallback) {
295
+ return value === void 0 ? fallback : value;
296
+ }
297
+ function useExternalStylesheet(id, href) {
298
+ const [loaded, setLoaded] = useState2(false);
299
+ const [error, setError] = useState2(null);
300
+ useEffect(() => {
301
+ if (typeof document === "undefined") return;
302
+ const existing = document.getElementById(id);
303
+ if (existing || document.querySelector('link[href*="excalidraw"], style[data-href*="excalidraw"]')) {
304
+ setLoaded(true);
305
+ return;
306
+ }
307
+ const link = document.createElement("link");
308
+ link.id = id;
309
+ link.rel = "stylesheet";
310
+ link.href = href;
311
+ link.onload = () => setLoaded(true);
312
+ link.onerror = () => setError(`Failed to load ${href}`);
313
+ document.head.appendChild(link);
314
+ return () => {
315
+ link.onload = null;
316
+ link.onerror = null;
317
+ };
318
+ }, [href, id]);
319
+ return { error, loaded };
320
+ }
321
+ function useExcalidrawModule(onLoadError, setLoadError) {
322
+ const [excalidraw, setExcalidraw] = useState2(null);
323
+ useEffect(() => {
324
+ let mounted = true;
325
+ import("@excalidraw/excalidraw").then((module) => {
326
+ if (mounted) setExcalidraw(module);
327
+ }).catch((reason) => {
328
+ const error = reason instanceof Error ? reason : new Error("Failed to load whiteboard");
329
+ setLoadError(error.message);
330
+ onLoadError?.(error);
331
+ });
332
+ return () => {
333
+ mounted = false;
334
+ };
335
+ }, [onLoadError, setLoadError]);
336
+ return excalidraw;
337
+ }
338
+ function useWhiteboardInitialData(theme, localParticipantColor) {
339
+ return useMemo(
340
+ () => ({
341
+ appState: {
342
+ viewBackgroundColor: theme === "dark" ? "#000000" : "#ffffff",
343
+ currentItemStrokeColor: localParticipantColor ?? "#4CB9FF",
344
+ theme
345
+ }
346
+ }),
347
+ [localParticipantColor, theme]
348
+ );
349
+ }
350
+ function useWhiteboardUiOptions(canDraw) {
351
+ return useMemo(
352
+ () => ({
353
+ canvasActions: {
354
+ changeViewBackgroundColor: false,
355
+ clearCanvas: false,
356
+ export: false,
357
+ loadScene: false,
358
+ saveAsImage: false,
359
+ saveToActiveFile: false,
360
+ toggleTheme: false
361
+ },
362
+ tools: { image: canDraw },
363
+ welcomeScreen: false
364
+ }),
365
+ [canDraw]
366
+ );
367
+ }
368
+ function useWhiteboardCollaboration(options) {
369
+ const apiRef = useRef(null);
370
+ const refs = useCollaborationRefs(options.collab, options.canDraw);
371
+ const initializeEngine = useCollaborationEngineLoader(refs, options.onLoadError, options.setLoadError);
372
+ const handleApiReady = useExcalidrawApiReady(apiRef, initializeEngine, options.onExcalidrawApiReady);
373
+ const handlers = useExcalidrawSceneHandlers(apiRef, refs.engineRef, options.onSelectedLatexChange);
374
+ useCollaborationCanDraw(refs.engineRef, options.canDraw);
375
+ useCollaborationDisposal(refs.engineRef, refs.isMountedRef);
376
+ useCollaborationInitialization(options.collab, apiRef, refs.engineRef, initializeEngine);
377
+ return { apiRef, handleApiReady, ...handlers };
378
+ }
379
+ function useCollaborationRefs(collab, canDraw) {
380
+ const canDrawRef = useRef(canDraw);
381
+ const collabOptionsRef = useRef(collab);
382
+ const enginePromiseRef = useRef(null);
383
+ const engineRef = useRef(null);
384
+ const isMountedRef = useRef(true);
385
+ canDrawRef.current = canDraw;
386
+ collabOptionsRef.current = collab;
387
+ return useMemo(() => ({ canDrawRef, collabOptionsRef, enginePromiseRef, engineRef, isMountedRef }), [canDrawRef, collabOptionsRef, enginePromiseRef, engineRef, isMountedRef]);
388
+ }
389
+ function useCollaborationEngineLoader(refs, onLoadError, setLoadError) {
390
+ return useCallback(
391
+ (api) => {
392
+ if (!refs.collabOptionsRef.current || refs.engineRef.current || refs.enginePromiseRef.current) return;
393
+ refs.enginePromiseRef.current = import("../engine-UMQR3O33.js").then(({ ExcalidrawCollabEngine }) => {
394
+ const collab = refs.collabOptionsRef.current;
395
+ if (!refs.isMountedRef.current || !collab || refs.engineRef.current) return;
396
+ refs.engineRef.current = new ExcalidrawCollabEngine({
397
+ excalidrawAPI: api,
398
+ canDraw: refs.canDrawRef.current,
399
+ submitUpdate: collab.submitUpdate,
400
+ sendCursor: collab.sendCursor,
401
+ requestSnapshot: collab.requestSnapshot,
402
+ clear: collab.clear,
403
+ fileTransfer: collab.fileTransfer,
404
+ initiateUpload: collab.initiateUpload,
405
+ finalizeUpload: collab.finalizeUpload,
406
+ presignDownload: collab.presignDownload,
407
+ subscribe: collab.subscribe,
408
+ onFileSyncStateChange: collab.onFileSyncStateChange,
409
+ onSubmissionError: collab.onSubmissionError
410
+ });
411
+ }).catch((reason) => {
412
+ if (!refs.isMountedRef.current) return;
413
+ const error = reason instanceof Error ? reason : new Error("Failed to load whiteboard collaboration");
414
+ setLoadError(error.message);
415
+ onLoadError?.(error);
416
+ }).finally(() => {
417
+ refs.enginePromiseRef.current = null;
418
+ });
419
+ },
420
+ [onLoadError, refs, setLoadError]
421
+ );
422
+ }
423
+ function useExcalidrawApiReady(apiRef, initializeEngine, onExcalidrawApiReady) {
424
+ const didReportApiRef = useRef(false);
425
+ return useCallback(
426
+ (api) => {
427
+ apiRef.current = api;
428
+ initializeEngine(api);
429
+ if (!didReportApiRef.current) {
430
+ didReportApiRef.current = true;
431
+ onExcalidrawApiReady?.(api);
432
+ }
433
+ },
434
+ [apiRef, initializeEngine, onExcalidrawApiReady]
435
+ );
436
+ }
437
+ function useExcalidrawSceneHandlers(apiRef, engineRef, onSelectedLatexChange) {
438
+ const handleChange = useCallback(
439
+ (elements, appState, files) => {
440
+ engineRef.current?.handleChange(elements, appState, files);
441
+ onSelectedLatexChange(selectedMathLatex(apiRef.current));
442
+ },
443
+ [apiRef, engineRef, onSelectedLatexChange]
444
+ );
445
+ const handlePointerUpdate = useCallback(
446
+ (payload) => {
447
+ engineRef.current?.handlePointerUpdate(payload);
448
+ },
449
+ [engineRef]
450
+ );
451
+ const syncScene = useCallback(() => {
452
+ const api = apiRef.current;
453
+ if (!api) return;
454
+ engineRef.current?.handleChange(api.getSceneElementsIncludingDeleted(), api.getAppState(), api.getFiles());
455
+ }, [apiRef, engineRef]);
456
+ return { handleChange, handlePointerUpdate, syncScene };
457
+ }
458
+ function selectedMathLatex(api) {
459
+ if (!api) return null;
460
+ const selected = getSelectedMathElement(api);
461
+ if (!selected) return null;
462
+ const math = getChalkMathData(selected);
463
+ return math ? math.latex : null;
464
+ }
465
+ function useCollaborationCanDraw(engineRef, canDraw) {
466
+ useEffect(() => {
467
+ engineRef.current?.setCanDraw(canDraw);
468
+ }, [canDraw, engineRef]);
469
+ }
470
+ function useCollaborationDisposal(engineRef, isMountedRef) {
471
+ useEffect(() => {
472
+ isMountedRef.current = true;
473
+ return () => {
474
+ isMountedRef.current = false;
475
+ engineRef.current?.dispose();
476
+ engineRef.current = null;
477
+ };
478
+ }, [engineRef, isMountedRef]);
479
+ }
480
+ function useCollaborationInitialization(collab, apiRef, engineRef, initializeEngine) {
481
+ useEffect(() => {
482
+ if (!collab) {
483
+ engineRef.current?.dispose();
484
+ engineRef.current = null;
485
+ return;
486
+ }
487
+ if (apiRef.current) initializeEngine(apiRef.current);
488
+ }, [apiRef, collab, engineRef, initializeEngine]);
489
+ }
490
+ function useWhiteboardMath({ apiRef, canDraw, excalidraw, isCollaborating, selectedLatex, setSelectedLatex, syncScene }) {
491
+ const [isMathOpen, setIsMathOpen] = useState2(false);
492
+ const closeMath = useCallback(() => setIsMathOpen(false), []);
493
+ const openMath = useCallback(() => {
494
+ if (canDraw) setIsMathOpen(true);
495
+ }, [canDraw]);
496
+ const handleSubmitMath = useCallback(
497
+ async (latex) => {
498
+ const api = apiRef.current;
499
+ if (!api || !excalidraw) throw new Error("Whiteboard is still loading");
500
+ const rendered = await renderLatexToSvg(latex, true);
501
+ appendOrReplaceMathElement({
502
+ api,
503
+ excalidraw,
504
+ asset: createMathImageAsset({ ...rendered, latex, displayMode: true }),
505
+ existingElement: getSelectedMathElement(api),
506
+ status: isCollaborating ? "pending" : "saved"
507
+ });
508
+ setSelectedLatex(latex);
509
+ closeMath();
510
+ syncScene();
511
+ },
512
+ [apiRef, closeMath, excalidraw, isCollaborating, setSelectedLatex, syncScene]
513
+ );
514
+ return { closeMath, handleSubmitMath, isMathOpen, openMath, selectedLatex };
515
+ }
516
+ function useWhiteboardCanvasState(props) {
517
+ const configuration = useWhiteboardCanvasConfiguration(props);
518
+ const [loadError, setLoadError] = useState2(null);
519
+ const [selectedLatex, setSelectedLatex] = useState2(null);
520
+ const excalidraw = useExcalidrawModule(props.onLoadError, setLoadError);
521
+ const stylesheet = useExternalStylesheet("chalk-excalidraw-styles", configuration.excalidrawCssPath);
522
+ const collaboration = useWhiteboardCollaboration({
523
+ canDraw: configuration.canDraw,
524
+ collab: props.collab,
525
+ onExcalidrawApiReady: props.onExcalidrawApiReady,
526
+ onLoadError: props.onLoadError,
527
+ onSelectedLatexChange: setSelectedLatex,
528
+ setLoadError
529
+ });
530
+ const math = useWhiteboardMath({
531
+ apiRef: collaboration.apiRef,
532
+ canDraw: configuration.canDraw,
533
+ excalidraw,
534
+ isCollaborating: Boolean(props.collab),
535
+ selectedLatex,
536
+ setSelectedLatex,
537
+ syncScene: collaboration.syncScene
538
+ });
539
+ const initialData = useWhiteboardInitialData(configuration.theme, props.localParticipantColor);
540
+ const uiOptions = useWhiteboardUiOptions(configuration.canDraw);
541
+ const resolvedLoadError = loadError ?? stylesheet.error;
542
+ return {
543
+ collaboration,
544
+ configuration,
545
+ excalidraw,
546
+ initialData,
547
+ isReady: Boolean(excalidraw && stylesheet.loaded && !resolvedLoadError),
548
+ math,
549
+ resolvedLoadError,
550
+ uiOptions
551
+ };
552
+ }
553
+ function WhiteboardCanvasView({ state }) {
554
+ const { collaboration, configuration, excalidraw, initialData, isReady, math, resolvedLoadError, uiOptions } = state;
555
+ return /* @__PURE__ */ jsxs2("div", { className: configuration.rootClassName, hidden: !configuration.isVisible, children: [
556
+ /* @__PURE__ */ jsx2(WhiteboardMathToolbar, { canDraw: configuration.canDraw, classNames: configuration.classNames, isReady, onOpenMath: math.openMath, selectedLatex: math.selectedLatex }),
557
+ /* @__PURE__ */ jsx2(WhiteboardCanvasStatus, { classNames: configuration.classNames, error: resolvedLoadError, icons: configuration.icons, isReady }),
558
+ excalidraw && /* @__PURE__ */ jsx2(
559
+ WhiteboardScene,
560
+ {
561
+ canDraw: configuration.canDraw,
562
+ collab: configuration.isCollaborating,
563
+ excalidraw,
564
+ initialData,
565
+ onApiReady: collaboration.handleApiReady,
566
+ onChange: collaboration.handleChange,
567
+ onPointerUpdate: collaboration.handlePointerUpdate,
568
+ theme: configuration.theme,
569
+ uiOptions
570
+ }
571
+ ),
572
+ math.isMathOpen && /* @__PURE__ */ jsx2(MathEditor, { initialLatex: math.selectedLatex ?? DEFAULT_LATEX, isEditing: Boolean(math.selectedLatex), classNames: configuration.classNames, icons: configuration.icons, onClose: math.closeMath, onSubmit: math.handleSubmitMath })
573
+ ] });
574
+ }
575
+ function WhiteboardMathToolbar({ canDraw, classNames, isReady, onOpenMath, selectedLatex }) {
576
+ if (!isReady) return null;
577
+ return /* @__PURE__ */ jsx2("div", { className: classNames.toolbar, style: { position: "absolute", top: 12, left: 12, zIndex: 20, display: "flex" }, children: /* @__PURE__ */ jsx2("button", { type: "button", onClick: onOpenMath, disabled: !canDraw, className: classNames.toolbarButton, "aria-label": selectedLatex ? "Edit math equation" : "Insert math equation", title: selectedLatex ? "Edit equation" : "Math", children: "\u2211" }) });
578
+ }
579
+ function WhiteboardCanvasStatus({ classNames, error, icons, isReady }) {
580
+ if (error) return /* @__PURE__ */ jsx2(WhiteboardLoadError, { className: classNames.error, error });
581
+ if (isReady) return null;
582
+ return /* @__PURE__ */ jsx2(WhiteboardLoading, { classNames, loadingIcon: icons.loading });
583
+ }
584
+ function WhiteboardLoading({ classNames, loadingIcon }) {
585
+ return /* @__PURE__ */ jsx2("div", { className: classNames.loading, style: { position: "absolute", inset: 0, zIndex: 30, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsxs2("div", { className: classNames.loadingContent, children: [
586
+ loadingIcon,
587
+ "Loading whiteboard..."
588
+ ] }) });
589
+ }
590
+ function WhiteboardLoadError({ className, error }) {
591
+ return /* @__PURE__ */ jsx2("div", { className, style: { position: "absolute", inset: 0, zIndex: 30, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx2("div", { children: error }) });
592
+ }
593
+ function WhiteboardScene({
594
+ canDraw,
595
+ collab,
596
+ excalidraw,
597
+ initialData,
598
+ onApiReady,
599
+ onChange,
600
+ onPointerUpdate,
601
+ theme,
602
+ uiOptions
603
+ }) {
604
+ return /* @__PURE__ */ jsx2(excalidraw.Excalidraw, { excalidrawAPI: onApiReady, initialData, isCollaborating: collab, name: "Chalk whiteboard", onChange, onPointerUpdate, renderTopRightUI: () => null, theme, UIOptions: uiOptions, viewModeEnabled: !canDraw });
605
+ }
606
+ function WhiteboardCanvasBase(props) {
607
+ return /* @__PURE__ */ jsx2(WhiteboardCanvasView, { state: useWhiteboardCanvasState(props) });
608
+ }
609
+ var WhiteboardCanvas = memo(WhiteboardCanvasBase);
610
+ WhiteboardCanvas.displayName = "WhiteboardCanvas";
611
+ export {
612
+ CHALK_MATH_CUSTOM_DATA_KEY,
613
+ CHALK_MATH_RENDERER,
614
+ WhiteboardCanvas,
615
+ appendOrReplaceMathElement,
616
+ createMathFileId,
617
+ createMathImageAsset,
618
+ getChalkMathData,
619
+ getInsertionPoint,
620
+ getRenderedSvgSize,
621
+ getSelectedMathElement,
622
+ isChalkMathElement,
623
+ renderLatexToSvg,
624
+ svgToDataUrl
625
+ };
@@ -0,0 +1,40 @@
1
+ import type { BinaryFileData, DataURL, ExcalidrawImperativeAPI } from "@excalidraw/excalidraw/types";
2
+ import type { ExcalidrawElement, ExcalidrawImageElement, FileId, OrderedExcalidrawElement } from "@excalidraw/excalidraw/element/types";
3
+ export declare const CHALK_MATH_CUSTOM_DATA_KEY = "chalk";
4
+ export declare const CHALK_MATH_RENDERER = "mathjax-svg";
5
+ export interface ChalkMathCustomData {
6
+ kind: "math";
7
+ latex: string;
8
+ renderer: typeof CHALK_MATH_RENDERER;
9
+ version: 1;
10
+ displayMode: boolean;
11
+ }
12
+ export interface MathImageAsset {
13
+ file: BinaryFileData;
14
+ width: number;
15
+ height: number;
16
+ customData: Record<string, unknown>;
17
+ }
18
+ export declare const svgToDataUrl: (svg: string) => DataURL;
19
+ export declare const createMathFileId: () => FileId;
20
+ export declare function createMathImageAsset(args: {
21
+ svg: string;
22
+ width: number;
23
+ height: number;
24
+ latex: string;
25
+ displayMode: boolean;
26
+ }): MathImageAsset;
27
+ export declare function getChalkMathData(element: ExcalidrawElement | null | undefined): ChalkMathCustomData | null;
28
+ export declare function isChalkMathElement(element: ExcalidrawElement | null | undefined): element is ExcalidrawImageElement;
29
+ export declare function getSelectedMathElement(api: ExcalidrawImperativeAPI): ExcalidrawImageElement | null;
30
+ export declare function getInsertionPoint(api: ExcalidrawImperativeAPI, width: number, height: number): {
31
+ x: number;
32
+ y: number;
33
+ };
34
+ export declare function appendOrReplaceMathElement(args: {
35
+ api: ExcalidrawImperativeAPI;
36
+ excalidraw: Pick<typeof import("@excalidraw/excalidraw"), "CaptureUpdateAction" | "convertToExcalidrawElements" | "newElementWith">;
37
+ asset: MathImageAsset;
38
+ existingElement?: ExcalidrawImageElement | null;
39
+ status?: ExcalidrawImageElement["status"];
40
+ }): OrderedExcalidrawElement;