ugly-app 0.1.108 → 0.1.111

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 (168) hide show
  1. package/coverage/client/AppProvider.tsx.html +1 -1
  2. package/coverage/client/FeedbackContext.ts.html +1 -1
  3. package/coverage/client/LoginPopup.tsx.html +1 -1
  4. package/coverage/client/Router.tsx.html +1 -1
  5. package/coverage/client/Screenshot.ts.html +1 -1
  6. package/coverage/client/ViewFlipper.tsx.html +8 -2
  7. package/coverage/client/animation/Animated.tsx.html +8 -8
  8. package/coverage/client/animation/animatedValue.ts.html +1 -1
  9. package/coverage/client/animation/index.html +1 -1
  10. package/coverage/client/audio/index.html +1 -1
  11. package/coverage/client/audio/useSTT.ts.html +2 -2
  12. package/coverage/client/audio/useTTS.ts.html +1 -1
  13. package/coverage/client/components/Button.tsx.html +12 -9
  14. package/coverage/client/components/FeedbackButton.tsx.html +1 -1
  15. package/coverage/client/components/Input.tsx.html +1 -1
  16. package/coverage/client/components/Modal.tsx.html +1 -1
  17. package/coverage/client/components/Text.tsx.html +13 -4
  18. package/coverage/client/components/Toast.tsx.html +1 -1
  19. package/coverage/client/components/index.html +1 -1
  20. package/coverage/client/components/zIndex.ts.html +1 -1
  21. package/coverage/client/createSocket.ts.html +173 -170
  22. package/coverage/client/index.html +11 -11
  23. package/coverage/clover.xml +704 -687
  24. package/coverage/coverage-final.json +15 -15
  25. package/coverage/index.html +30 -30
  26. package/coverage/server/Auth.ts.html +1 -1
  27. package/coverage/server/Cache.ts.html +1 -1
  28. package/coverage/server/DB.ts.html +48 -150
  29. package/coverage/server/Email.ts.html +1 -1
  30. package/coverage/server/EmailTemplate.ts.html +1 -1
  31. package/coverage/server/PushNotification.ts.html +1 -1
  32. package/coverage/server/RateLimit.ts.html +1 -1
  33. package/coverage/server/Router.ts.html +1 -1
  34. package/coverage/server/Socket.ts.html +45 -21
  35. package/coverage/server/Storage.ts.html +1 -1
  36. package/coverage/server/StoreHandlers.ts.html +47 -17
  37. package/coverage/server/ai/ImageGenClient.ts.html +1 -1
  38. package/coverage/server/ai/ProviderSelector.ts.html +1 -1
  39. package/coverage/server/ai/TextGenClient.ts.html +1 -1
  40. package/coverage/server/ai/fallbacks.ts.html +1 -1
  41. package/coverage/server/ai/index.html +1 -1
  42. package/coverage/server/ai/index.ts.html +1 -1
  43. package/coverage/server/ai/providers/Claude.ts.html +1 -1
  44. package/coverage/server/ai/providers/FAL.ts.html +61 -13
  45. package/coverage/server/ai/providers/Fireworks.ts.html +1 -1
  46. package/coverage/server/ai/providers/Google.ts.html +1 -1
  47. package/coverage/server/ai/providers/GoogleImage.ts.html +35 -11
  48. package/coverage/server/ai/providers/Groq.ts.html +1 -1
  49. package/coverage/server/ai/providers/Kie.ts.html +1 -1
  50. package/coverage/server/ai/providers/KieImage.ts.html +35 -8
  51. package/coverage/server/ai/providers/OpenAIText.ts.html +1 -1
  52. package/coverage/server/ai/providers/Together.ts.html +1 -1
  53. package/coverage/server/ai/providers/TogetherImage.ts.html +43 -7
  54. package/coverage/server/ai/providers/UglyBotImageGenProvider.ts.html +1 -1
  55. package/coverage/server/ai/providers/UglyBotTextGenProvider.ts.html +1 -1
  56. package/coverage/server/ai/providers/Wavespeed.ts.html +42 -9
  57. package/coverage/server/ai/providers/index.html +30 -30
  58. package/coverage/server/ai/registry.ts.html +1 -1
  59. package/coverage/server/ai/types.ts.html +1 -1
  60. package/coverage/server/audio/STTStream.ts.html +1 -1
  61. package/coverage/server/audio/TTSStream.ts.html +1 -1
  62. package/coverage/server/audio/index.html +1 -1
  63. package/coverage/server/audio/index.ts.html +1 -1
  64. package/coverage/server/audio/resample.ts.html +1 -1
  65. package/coverage/server/audio/stt/GroqWhisper.ts.html +1 -1
  66. package/coverage/server/audio/stt/index.html +1 -1
  67. package/coverage/server/audio/stt/registry.ts.html +1 -1
  68. package/coverage/server/audio/tts/InWorld.ts.html +1 -1
  69. package/coverage/server/audio/tts/index.html +1 -1
  70. package/coverage/server/audio/tts/registry.ts.html +1 -1
  71. package/coverage/server/billing/BillingGateway.ts.html +1 -1
  72. package/coverage/server/billing/BillingLedger.ts.html +4 -4
  73. package/coverage/server/billing/CreditStore.ts.html +1 -1
  74. package/coverage/server/billing/LimitEnforcer.ts.html +1 -1
  75. package/coverage/server/billing/UserLimitCache.ts.html +1 -1
  76. package/coverage/server/billing/index.html +5 -5
  77. package/coverage/server/billing/types.ts.html +1 -1
  78. package/coverage/server/embeddings/EmbeddingClient.ts.html +1 -1
  79. package/coverage/server/embeddings/index.html +1 -1
  80. package/coverage/server/embeddings/providers/OpenAI.ts.html +1 -1
  81. package/coverage/server/embeddings/providers/index.html +1 -1
  82. package/coverage/server/embeddings/registry.ts.html +1 -1
  83. package/coverage/server/index.html +22 -22
  84. package/coverage/shared/Api.ts.html +1 -1
  85. package/coverage/shared/DB.ts.html +4 -4
  86. package/coverage/shared/Errors.ts.html +1 -1
  87. package/coverage/shared/Experiment.ts.html +1 -1
  88. package/coverage/shared/ImageGen.ts.html +1 -1
  89. package/coverage/shared/Router.ts.html +1 -1
  90. package/coverage/shared/TextGen.ts.html +1 -1
  91. package/coverage/shared/index.html +1 -1
  92. package/coverage/shared/index.ts.html +1 -1
  93. package/dist/cli/initDb.js +1 -1
  94. package/dist/cli/initDb.js.map +1 -1
  95. package/dist/cli/serverLogQuery.js +2 -2
  96. package/dist/cli/serverLogQuery.js.map +1 -1
  97. package/dist/cli/version.d.ts +1 -1
  98. package/dist/cli/version.js +1 -1
  99. package/dist/client/createSocket.d.ts.map +1 -1
  100. package/dist/client/createSocket.js +3 -10
  101. package/dist/client/createSocket.js.map +1 -1
  102. package/dist/server/App.js +1 -1
  103. package/dist/server/App.js.map +1 -1
  104. package/dist/server/ai/ProviderSelector.d.ts +2 -1
  105. package/dist/server/ai/ProviderSelector.d.ts.map +1 -1
  106. package/dist/server/ai/ProviderSelector.js +4 -1
  107. package/dist/server/ai/ProviderSelector.js.map +1 -1
  108. package/dist/server/ai/WebSearchClient.d.ts +9 -0
  109. package/dist/server/ai/WebSearchClient.d.ts.map +1 -0
  110. package/dist/server/ai/WebSearchClient.js +59 -0
  111. package/dist/server/ai/WebSearchClient.js.map +1 -0
  112. package/dist/server/ai/index.d.ts +4 -1
  113. package/dist/server/ai/index.d.ts.map +1 -1
  114. package/dist/server/ai/index.js +8 -2
  115. package/dist/server/ai/index.js.map +1 -1
  116. package/dist/server/ai/providers/Kagi.d.ts +3 -0
  117. package/dist/server/ai/providers/Kagi.d.ts.map +1 -0
  118. package/dist/server/ai/providers/Kagi.js +77 -0
  119. package/dist/server/ai/providers/Kagi.js.map +1 -0
  120. package/dist/server/ai/providers/UglyBotWebSearchProvider.d.ts +3 -0
  121. package/dist/server/ai/providers/UglyBotWebSearchProvider.d.ts.map +1 -0
  122. package/dist/server/ai/providers/UglyBotWebSearchProvider.js +60 -0
  123. package/dist/server/ai/providers/UglyBotWebSearchProvider.js.map +1 -0
  124. package/dist/server/ai/registry.d.ts +4 -1
  125. package/dist/server/ai/registry.d.ts.map +1 -1
  126. package/dist/server/ai/registry.js +11 -0
  127. package/dist/server/ai/registry.js.map +1 -1
  128. package/dist/server/ai/types.d.ts +14 -0
  129. package/dist/server/ai/types.d.ts.map +1 -1
  130. package/dist/server/ai/types.js.map +1 -1
  131. package/dist/server/index.d.ts +5 -2
  132. package/dist/server/index.d.ts.map +1 -1
  133. package/dist/server/index.js +3 -1
  134. package/dist/server/index.js.map +1 -1
  135. package/dist/shared/Audio.d.ts +147 -4
  136. package/dist/shared/Audio.d.ts.map +1 -1
  137. package/dist/shared/Audio.js +82 -1
  138. package/dist/shared/Audio.js.map +1 -1
  139. package/dist/shared/Voice.d.ts +60 -0
  140. package/dist/shared/Voice.d.ts.map +1 -0
  141. package/dist/shared/Voice.js +4 -0
  142. package/dist/shared/Voice.js.map +1 -0
  143. package/dist/shared/WebSearch.d.ts +27 -0
  144. package/dist/shared/WebSearch.d.ts.map +1 -0
  145. package/dist/shared/WebSearch.js +3 -0
  146. package/dist/shared/WebSearch.js.map +1 -0
  147. package/dist/shared/index.d.ts +5 -1
  148. package/dist/shared/index.d.ts.map +1 -1
  149. package/dist/shared/index.js +3 -0
  150. package/dist/shared/index.js.map +1 -1
  151. package/package.json +1 -1
  152. package/src/cli/initDb.ts +1 -1
  153. package/src/cli/serverLogQuery.ts +2 -2
  154. package/src/cli/version.ts +1 -1
  155. package/src/client/createSocket.ts +3 -8
  156. package/src/server/App.ts +1 -1
  157. package/src/server/ai/ProviderSelector.ts +14 -2
  158. package/src/server/ai/WebSearchClient.ts +79 -0
  159. package/src/server/ai/index.ts +9 -0
  160. package/src/server/ai/providers/Kagi.ts +140 -0
  161. package/src/server/ai/providers/UglyBotWebSearchProvider.ts +109 -0
  162. package/src/server/ai/registry.ts +18 -1
  163. package/src/server/ai/types.ts +27 -0
  164. package/src/server/index.ts +6 -0
  165. package/src/shared/Audio.ts +267 -4
  166. package/src/shared/Voice.ts +86 -0
  167. package/src/shared/WebSearch.ts +28 -0
  168. package/src/shared/index.ts +46 -1
@@ -787,7 +787,7 @@ function PopupLayer({ popups }: { popups: PopupEntry[] }) {
787
787
  <div class='footer quiet pad2 space-top1 center small'>
788
788
  Code coverage generated by
789
789
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
790
- at 2026-03-29T23:47:49.350Z
790
+ at 2026-03-30T07:32:37.770Z
791
791
  </div>
792
792
  <script src="../prettify.js"></script>
793
793
  <script>
@@ -118,7 +118,7 @@ export function clearFeedbackContext(): void {
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
121
- at 2026-03-29T23:47:49.350Z
121
+ at 2026-03-30T07:32:37.770Z
122
122
  </div>
123
123
  <script src="../prettify.js"></script>
124
124
  <script>
@@ -310,7 +310,7 @@ export function LoginPopup({ onSuccess, inline = false }: LoginPopupProps) {
310
310
  <div class='footer quiet pad2 space-top1 center small'>
311
311
  Code coverage generated by
312
312
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
313
- at 2026-03-29T23:47:49.350Z
313
+ at 2026-03-30T07:32:37.770Z
314
314
  </div>
315
315
  <script src="../prettify.js"></script>
316
316
  <script>
@@ -1918,7 +1918,7 @@ export function Link&lt;
1918
1918
  <div class='footer quiet pad2 space-top1 center small'>
1919
1919
  Code coverage generated by
1920
1920
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1921
- at 2026-03-29T23:47:49.350Z
1921
+ at 2026-03-30T07:32:37.770Z
1922
1922
  </div>
1923
1923
  <script src="../prettify.js"></script>
1924
1924
  <script>
@@ -244,7 +244,7 @@ function blobToDataUrl(blob: Blob): Promise&lt;string&gt; {
244
244
  <div class='footer quiet pad2 space-top1 center small'>
245
245
  Code coverage generated by
246
246
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
247
- at 2026-03-29T23:47:49.350Z
247
+ at 2026-03-30T07:32:37.770Z
248
248
  </div>
249
249
  <script src="../prettify.js"></script>
250
250
  <script>
@@ -292,7 +292,9 @@
292
292
  <a name='L227'></a><a href='#L227'>227</a>
293
293
  <a name='L228'></a><a href='#L228'>228</a>
294
294
  <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
296
298
  <span class="cline-any cline-neutral">&nbsp;</span>
297
299
  <span class="cline-any cline-neutral">&nbsp;</span>
298
300
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -503,6 +505,8 @@
503
505
  <span class="cline-any cline-neutral">&nbsp;</span>
504
506
  <span class="cline-any cline-neutral">&nbsp;</span>
505
507
  <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
510
  <span class="cline-any cline-yes">210x</span>
507
511
  <span class="cline-any cline-neutral">&nbsp;</span>
508
512
  <span class="cline-any cline-yes">210x</span>
@@ -725,6 +729,8 @@ export function ViewFlipper({
725
729
  style={{
726
730
  position: 'absolute',
727
731
  inset: '0',
732
+ display: 'flex',
733
+ flexDirection: 'column',
728
734
  pointerEvents: isVisible ? 'auto' : 'none',
729
735
  visibility: isQueued ? 'hidden' : 'visible',
730
736
  willChange: 'transform',
@@ -757,7 +763,7 @@ export function ViewFlipper({
757
763
  <div class='footer quiet pad2 space-top1 center small'>
758
764
  Code coverage generated by
759
765
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
760
- at 2026-03-29T23:47:49.350Z
766
+ at 2026-03-30T07:32:37.770Z
761
767
  </div>
762
768
  <script src="../prettify.js"></script>
763
769
  <script>
@@ -192,7 +192,7 @@
192
192
  <span class="cline-any cline-neutral">&nbsp;</span>
193
193
  <span class="cline-any cline-neutral">&nbsp;</span>
194
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-yes">2716x</span>
195
+ <span class="cline-any cline-yes">3380x</span>
196
196
  <span class="cline-any cline-neutral">&nbsp;</span>
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -201,7 +201,7 @@
201
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
202
  <span class="cline-any cline-neutral">&nbsp;</span>
203
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-yes">2704x</span>
204
+ <span class="cline-any cline-yes">3368x</span>
205
205
  <span class="cline-any cline-neutral">&nbsp;</span>
206
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
207
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -215,7 +215,7 @@
215
215
  <span class="cline-any cline-yes">208x</span>
216
216
  <span class="cline-any cline-neutral">&nbsp;</span>
217
217
  <span class="cline-any cline-yes">208x</span>
218
- <span class="cline-any cline-yes">1358x</span>
218
+ <span class="cline-any cline-yes">1690x</span>
219
219
  <span class="cline-any cline-neutral">&nbsp;</span>
220
220
  <span class="cline-any cline-yes">6x</span>
221
221
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -224,7 +224,7 @@
224
224
  <span class="cline-any cline-yes">2x</span>
225
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
226
  <span class="cline-any cline-yes">6x</span>
227
- <span class="cline-any cline-yes">1352x</span>
227
+ <span class="cline-any cline-yes">1684x</span>
228
228
  <span class="cline-any cline-neutral">&nbsp;</span>
229
229
  <span class="cline-any cline-yes">212x</span>
230
230
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -237,7 +237,7 @@
237
237
  <span class="cline-any cline-yes">212x</span>
238
238
  <span class="cline-any cline-neutral">&nbsp;</span>
239
239
  <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-yes">1140x</span>
240
+ <span class="cline-any cline-yes">1472x</span>
241
241
  <span class="cline-any cline-neutral">&nbsp;</span>
242
242
  <span class="cline-any cline-neutral">&nbsp;</span>
243
243
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -250,8 +250,8 @@
250
250
  <span class="cline-any cline-neutral">&nbsp;</span>
251
251
  <span class="cline-any cline-yes">209x</span>
252
252
  <span class="cline-any cline-yes">209x</span>
253
- <span class="cline-any cline-yes">1358x</span>
254
- <span class="cline-any cline-yes">1140x</span>
253
+ <span class="cline-any cline-yes">1690x</span>
254
+ <span class="cline-any cline-yes">1472x</span>
255
255
  <span class="cline-any cline-neutral">&nbsp;</span>
256
256
  <span class="cline-any cline-neutral">&nbsp;</span>
257
257
  <span class="cline-any cline-yes">209x</span>
@@ -424,7 +424,7 @@ export const Animated = {
424
424
  <div class='footer quiet pad2 space-top1 center small'>
425
425
  Code coverage generated by
426
426
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
427
- at 2026-03-29T23:47:49.350Z
427
+ at 2026-03-30T07:32:37.770Z
428
428
  </div>
429
429
  <script src="../../prettify.js"></script>
430
430
  <script>
@@ -652,7 +652,7 @@ export function useAnimatedValueTracker(animatedValue: AnimatedValueRef): number
652
652
  <div class='footer quiet pad2 space-top1 center small'>
653
653
  Code coverage generated by
654
654
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
655
- at 2026-03-29T23:47:49.350Z
655
+ at 2026-03-30T07:32:37.770Z
656
656
  </div>
657
657
  <script src="../../prettify.js"></script>
658
658
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-03-29T23:47:49.350Z
119
+ at 2026-03-30T07:32:37.770Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-03-29T23:47:49.350Z
119
+ at 2026-03-30T07:32:37.770Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -269,7 +269,7 @@
269
269
  <span class="cline-any cline-yes">19x</span>
270
270
  <span class="cline-any cline-yes">18x</span>
271
271
  <span class="cline-any cline-yes">18x</span>
272
- <span class="cline-any cline-yes">257x</span>
272
+ <span class="cline-any cline-yes">258x</span>
273
273
  <span class="cline-any cline-yes">4x</span>
274
274
  <span class="cline-any cline-yes">4x</span>
275
275
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -433,7 +433,7 @@ export function useSTT(socket: SocketLike, options: STTOptions = {}) {
433
433
  <div class='footer quiet pad2 space-top1 center small'>
434
434
  Code coverage generated by
435
435
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
436
- at 2026-03-29T23:47:49.350Z
436
+ at 2026-03-30T07:32:37.770Z
437
437
  </div>
438
438
  <script src="../../prettify.js"></script>
439
439
  <script>
@@ -367,7 +367,7 @@ export function useTTS(socket: SocketLike) {
367
367
  <div class='footer quiet pad2 space-top1 center small'>
368
368
  Code coverage generated by
369
369
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
370
- at 2026-03-29T23:47:49.350Z
370
+ at 2026-03-30T07:32:37.770Z
371
371
  </div>
372
372
  <script src="../../prettify.js"></script>
373
373
  <script>
@@ -154,7 +154,9 @@
154
154
  <a name='L89'></a><a href='#L89'>89</a>
155
155
  <a name='L90'></a><a href='#L90'>90</a>
156
156
  <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
158
160
  <span class="cline-any cline-neutral">&nbsp;</span>
159
161
  <span class="cline-any cline-neutral">&nbsp;</span>
160
162
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -245,7 +247,8 @@
245
247
  <span class="cline-any cline-neutral">&nbsp;</span>
246
248
  <span class="cline-any cline-neutral">&nbsp;</span>
247
249
  <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { CSSProperties, ElementType, ReactElement, ReactNode } from 'react';
250
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type React from 'react';
251
+ import type { CSSProperties, ElementType, ReactElement, ReactNode } from 'react';
249
252
  import { useState } from 'react';
250
253
  import { useLocalizer } from '../AppProvider.js';
251
254
  &nbsp;
@@ -258,7 +261,7 @@ export interface ButtonProps {
258
261
  variant?: 'primary' | 'secondary' | 'ghost' | 'error';
259
262
  size?: 'sm' | 'md' | 'lg';
260
263
  disabled?: boolean;
261
- onClick?: () =&gt; void;
264
+ onClick?: (e?: React.MouseEvent) =&gt; void;
262
265
  type?: 'button' | 'submit' | 'reset';
263
266
  style?: CSSProperties;
264
267
  /** Render as a different element or component */
@@ -270,10 +273,10 @@ export interface ButtonProps {
270
273
  }
271
274
  &nbsp;
272
275
  const variantStyles: Record&lt;string, CSSProperties&gt; = {
273
- primary: { background: 'var(--app-primary)', color: '#fff' },
274
- secondary: { background: 'var(--app-secondary)', color: 'var(--app-foreground)' },
275
- ghost: { background: 'transparent', color: 'var(--app-foreground)' },
276
- error: { background: 'var(--app-error)', color: '#fff' },
276
+ primary: { background: 'var(--app-primary, #2563eb)', color: '#fff' },
277
+ secondary: { background: 'var(--app-secondary, #f3f4f6)', color: 'var(--app-foreground, #111)' },
278
+ ghost: { background: 'transparent', color: 'var(--app-foreground, #111)' },
279
+ error: { background: 'var(--app-error, #dc2626)', color: '#fff' },
277
280
  };
278
281
  &nbsp;
279
282
  const sizeStyles: Record&lt;string, CSSProperties&gt; = {
@@ -324,7 +327,7 @@ export function Button({
324
327
  cursor: disabled ? 'not-allowed' : 'pointer',
325
328
  opacity: disabled ? 0.5 : hovered ? 0.9 : 1,
326
329
  transition: 'opacity 150ms',
327
- fontFamily: 'inherit',
330
+ fontFamily: 'var(--app-font-body, inherit)',
328
331
  ...variantStyles[variant],
329
332
  ...sizeStyles[size],
330
333
  ...style,
@@ -343,7 +346,7 @@ export function Button({
343
346
  <div class='footer quiet pad2 space-top1 center small'>
344
347
  Code coverage generated by
345
348
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
346
- at 2026-03-29T23:47:49.350Z
349
+ at 2026-03-30T07:32:37.770Z
347
350
  </div>
348
351
  <script src="../../prettify.js"></script>
349
352
  <script>
@@ -604,7 +604,7 @@ export function FeedbackButton({ socket }: Props): ReactNode {
604
604
  <div class='footer quiet pad2 space-top1 center small'>
605
605
  Code coverage generated by
606
606
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
607
- at 2026-03-29T23:47:49.350Z
607
+ at 2026-03-30T07:32:37.770Z
608
608
  </div>
609
609
  <script src="../../prettify.js"></script>
610
610
  <script>
@@ -262,7 +262,7 @@ export function Input({
262
262
  <div class='footer quiet pad2 space-top1 center small'>
263
263
  Code coverage generated by
264
264
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
265
- at 2026-03-29T23:47:49.350Z
265
+ at 2026-03-30T07:32:37.770Z
266
266
  </div>
267
267
  <script src="../../prettify.js"></script>
268
268
  <script>
@@ -244,7 +244,7 @@ export function Modal({
244
244
  <div class='footer quiet pad2 space-top1 center small'>
245
245
  Code coverage generated by
246
246
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
247
- at 2026-03-29T23:47:49.350Z
247
+ at 2026-03-30T07:32:37.770Z
248
248
  </div>
249
249
  <script src="../../prettify.js"></script>
250
250
  <script>
@@ -148,7 +148,12 @@
148
148
  <a name='L83'></a><a href='#L83'>83</a>
149
149
  <a name='L84'></a><a href='#L84'>84</a>
150
150
  <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
152
157
  <span class="cline-any cline-neutral">&nbsp;</span>
153
158
  <span class="cline-any cline-neutral">&nbsp;</span>
154
159
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -199,6 +204,7 @@
199
204
  <span class="cline-any cline-neutral">&nbsp;</span>
200
205
  <span class="cline-any cline-neutral">&nbsp;</span>
201
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
208
  <span class="cline-any cline-yes">35x</span>
203
209
  <span class="cline-any cline-neutral">&nbsp;</span>
204
210
  <span class="cline-any cline-yes">35x</span>
@@ -233,7 +239,8 @@
233
239
  <span class="cline-any cline-neutral">&nbsp;</span>
234
240
  <span class="cline-any cline-neutral">&nbsp;</span>
235
241
  <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { ElementType, ReactElement, ReactNode } from 'react';
242
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type React from 'react';
243
+ import type { ElementType, ReactElement, ReactNode } from 'react';
237
244
  import { useLocalizer } from '../AppProvider.js';
238
245
  &nbsp;
239
246
  export type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
@@ -251,6 +258,7 @@ export interface TextProps {
251
258
  weight?: TextWeight;
252
259
  color?: string;
253
260
  className?: string;
261
+ style?: React.CSSProperties;
254
262
  /** Render as a different element. Default: 'p' */
255
263
  as?: ElementType;
256
264
  numberOfLines?: number;
@@ -281,6 +289,7 @@ export function Text({
281
289
  weight = 'normal',
282
290
  color,
283
291
  className = '',
292
+ style,
284
293
  as: Tag = 'p',
285
294
  numberOfLines,
286
295
  }: TextProps): ReactElement {
@@ -312,7 +321,7 @@ export function Text({
312
321
  return (
313
322
  &lt;Tag
314
323
  className={`${sizeClasses[size]} ${weightClasses[weight]} text-gray-900 dark:text-gray-100 ${className}`}
315
- style={{ ...(color ? { color } : {}), ...truncateStyle }}
324
+ style={{ ...(color ? { color } : {}), ...truncateStyle, ...style }}
316
325
  &gt;
317
326
  {content}
318
327
  &lt;/Tag&gt;
@@ -325,7 +334,7 @@ export function Text({
325
334
  <div class='footer quiet pad2 space-top1 center small'>
326
335
  Code coverage generated by
327
336
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
328
- at 2026-03-29T23:47:49.350Z
337
+ at 2026-03-30T07:32:37.770Z
329
338
  </div>
330
339
  <script src="../../prettify.js"></script>
331
340
  <script>
@@ -220,7 +220,7 @@ export function Toast({
220
220
  <div class='footer quiet pad2 space-top1 center small'>
221
221
  Code coverage generated by
222
222
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
223
- at 2026-03-29T23:47:49.350Z
223
+ at 2026-03-30T07:32:37.770Z
224
224
  </div>
225
225
  <script src="../../prettify.js"></script>
226
226
  <script>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2026-03-29T23:47:49.350Z
194
+ at 2026-03-30T07:32:37.770Z
195
195
  </div>
196
196
  <script src="../../prettify.js"></script>
197
197
  <script>
@@ -103,7 +103,7 @@ export const Z = {
103
103
  <div class='footer quiet pad2 space-top1 center small'>
104
104
  Code coverage generated by
105
105
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
106
- at 2026-03-29T23:47:49.350Z
106
+ at 2026-03-30T07:32:37.770Z
107
107
  </div>
108
108
  <script src="../../prettify.js"></script>
109
109
  <script>