@schlessera/brain-ui-react 0.4.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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/components/chat/ask-user-card.d.ts +12 -0
  4. package/dist/components/chat/ask-user-card.d.ts.map +1 -0
  5. package/dist/components/chat/ask-user-card.js +185 -0
  6. package/dist/components/chat/ask-user-card.js.map +1 -0
  7. package/dist/components/chat/brain-markdown.d.ts +35 -0
  8. package/dist/components/chat/brain-markdown.d.ts.map +1 -0
  9. package/dist/components/chat/brain-markdown.js +363 -0
  10. package/dist/components/chat/brain-markdown.js.map +1 -0
  11. package/dist/components/chat/chat-page.d.ts +2 -0
  12. package/dist/components/chat/chat-page.d.ts.map +1 -0
  13. package/dist/components/chat/chat-page.js +442 -0
  14. package/dist/components/chat/chat-page.js.map +1 -0
  15. package/dist/components/chat/command-palette.d.ts +5 -0
  16. package/dist/components/chat/command-palette.d.ts.map +1 -0
  17. package/dist/components/chat/command-palette.js +18 -0
  18. package/dist/components/chat/command-palette.js.map +1 -0
  19. package/dist/components/chat/markdown-content.d.ts +4 -0
  20. package/dist/components/chat/markdown-content.d.ts.map +1 -0
  21. package/dist/components/chat/markdown-content.js +6 -0
  22. package/dist/components/chat/markdown-content.js.map +1 -0
  23. package/dist/components/chat/message-bubble.d.ts +9 -0
  24. package/dist/components/chat/message-bubble.d.ts.map +1 -0
  25. package/dist/components/chat/message-bubble.js +129 -0
  26. package/dist/components/chat/message-bubble.js.map +1 -0
  27. package/dist/components/chat/message-share.d.ts +10 -0
  28. package/dist/components/chat/message-share.d.ts.map +1 -0
  29. package/dist/components/chat/message-share.js +65 -0
  30. package/dist/components/chat/message-share.js.map +1 -0
  31. package/dist/components/chat/renderers/claude-tools.d.ts +3 -0
  32. package/dist/components/chat/renderers/claude-tools.d.ts.map +1 -0
  33. package/dist/components/chat/renderers/claude-tools.js +38 -0
  34. package/dist/components/chat/renderers/claude-tools.js.map +1 -0
  35. package/dist/components/chat/renderers/generic.d.ts +9 -0
  36. package/dist/components/chat/renderers/generic.d.ts.map +1 -0
  37. package/dist/components/chat/renderers/generic.js +68 -0
  38. package/dist/components/chat/renderers/generic.js.map +1 -0
  39. package/dist/components/chat/renderers/index.d.ts +5 -0
  40. package/dist/components/chat/renderers/index.d.ts.map +1 -0
  41. package/dist/components/chat/renderers/index.js +17 -0
  42. package/dist/components/chat/renderers/index.js.map +1 -0
  43. package/dist/components/chat/risk-hints.d.ts +20 -0
  44. package/dist/components/chat/risk-hints.d.ts.map +1 -0
  45. package/dist/components/chat/risk-hints.js +81 -0
  46. package/dist/components/chat/risk-hints.js.map +1 -0
  47. package/dist/components/chat/session-drawer.d.ts +6 -0
  48. package/dist/components/chat/session-drawer.d.ts.map +1 -0
  49. package/dist/components/chat/session-drawer.js +96 -0
  50. package/dist/components/chat/session-drawer.js.map +1 -0
  51. package/dist/components/chat/share-block.d.ts +9 -0
  52. package/dist/components/chat/share-block.d.ts.map +1 -0
  53. package/dist/components/chat/share-block.js +70 -0
  54. package/dist/components/chat/share-block.js.map +1 -0
  55. package/dist/components/chat/tool-call-timeline.d.ts +8 -0
  56. package/dist/components/chat/tool-call-timeline.d.ts.map +1 -0
  57. package/dist/components/chat/tool-call-timeline.js +100 -0
  58. package/dist/components/chat/tool-call-timeline.js.map +1 -0
  59. package/dist/components/chat/tool-views.d.ts +116 -0
  60. package/dist/components/chat/tool-views.d.ts.map +1 -0
  61. package/dist/components/chat/tool-views.js +628 -0
  62. package/dist/components/chat/tool-views.js.map +1 -0
  63. package/dist/components/chat/welcome-state.d.ts +4 -0
  64. package/dist/components/chat/welcome-state.d.ts.map +1 -0
  65. package/dist/components/chat/welcome-state.js +10 -0
  66. package/dist/components/chat/welcome-state.js.map +1 -0
  67. package/dist/components/connectivity/connection-gate.d.ts +5 -0
  68. package/dist/components/connectivity/connection-gate.d.ts.map +1 -0
  69. package/dist/components/connectivity/connection-gate.js +42 -0
  70. package/dist/components/connectivity/connection-gate.js.map +1 -0
  71. package/dist/components/connectivity/login-screen.d.ts +9 -0
  72. package/dist/components/connectivity/login-screen.d.ts.map +1 -0
  73. package/dist/components/connectivity/login-screen.js +99 -0
  74. package/dist/components/connectivity/login-screen.js.map +1 -0
  75. package/dist/components/files/file-panel.d.ts +5 -0
  76. package/dist/components/files/file-panel.d.ts.map +1 -0
  77. package/dist/components/files/file-panel.js +46 -0
  78. package/dist/components/files/file-panel.js.map +1 -0
  79. package/dist/components/files/file-tree.d.ts +2 -0
  80. package/dist/components/files/file-tree.d.ts.map +1 -0
  81. package/dist/components/files/file-tree.js +63 -0
  82. package/dist/components/files/file-tree.js.map +1 -0
  83. package/dist/components/files/file-viewer-binary.d.ts +5 -0
  84. package/dist/components/files/file-viewer-binary.d.ts.map +1 -0
  85. package/dist/components/files/file-viewer-binary.js +20 -0
  86. package/dist/components/files/file-viewer-binary.js.map +1 -0
  87. package/dist/components/files/file-viewer-html.d.ts +4 -0
  88. package/dist/components/files/file-viewer-html.d.ts.map +1 -0
  89. package/dist/components/files/file-viewer-html.js +5 -0
  90. package/dist/components/files/file-viewer-html.js.map +1 -0
  91. package/dist/components/files/file-viewer-markdown.d.ts +4 -0
  92. package/dist/components/files/file-viewer-markdown.d.ts.map +1 -0
  93. package/dist/components/files/file-viewer-markdown.js +10 -0
  94. package/dist/components/files/file-viewer-markdown.js.map +1 -0
  95. package/dist/components/files/file-viewer-raw.d.ts +5 -0
  96. package/dist/components/files/file-viewer-raw.d.ts.map +1 -0
  97. package/dist/components/files/file-viewer-raw.js +15 -0
  98. package/dist/components/files/file-viewer-raw.js.map +1 -0
  99. package/dist/components/files/file-viewer.d.ts +2 -0
  100. package/dist/components/files/file-viewer.d.ts.map +1 -0
  101. package/dist/components/files/file-viewer.js +175 -0
  102. package/dist/components/files/file-viewer.js.map +1 -0
  103. package/dist/components/files/frontmatter-panel.d.ts +5 -0
  104. package/dist/components/files/frontmatter-panel.d.ts.map +1 -0
  105. package/dist/components/files/frontmatter-panel.js +12 -0
  106. package/dist/components/files/frontmatter-panel.js.map +1 -0
  107. package/dist/components/layout/app-shell.d.ts +5 -0
  108. package/dist/components/layout/app-shell.d.ts.map +1 -0
  109. package/dist/components/layout/app-shell.js +10 -0
  110. package/dist/components/layout/app-shell.js.map +1 -0
  111. package/dist/components/layout/mobile-tab-bar.d.ts +2 -0
  112. package/dist/components/layout/mobile-tab-bar.d.ts.map +1 -0
  113. package/dist/components/layout/mobile-tab-bar.js +16 -0
  114. package/dist/components/layout/mobile-tab-bar.js.map +1 -0
  115. package/dist/components/layout/side-rail.d.ts +2 -0
  116. package/dist/components/layout/side-rail.d.ts.map +1 -0
  117. package/dist/components/layout/side-rail.js +26 -0
  118. package/dist/components/layout/side-rail.js.map +1 -0
  119. package/dist/components/layout/slide-panel.d.ts +9 -0
  120. package/dist/components/layout/slide-panel.d.ts.map +1 -0
  121. package/dist/components/layout/slide-panel.js +18 -0
  122. package/dist/components/layout/slide-panel.js.map +1 -0
  123. package/dist/components/quick-actions/streaming-modal.d.ts +8 -0
  124. package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -0
  125. package/dist/components/quick-actions/streaming-modal.js +92 -0
  126. package/dist/components/quick-actions/streaming-modal.js.map +1 -0
  127. package/dist/components/quick-actions/whatsup-modal.d.ts +5 -0
  128. package/dist/components/quick-actions/whatsup-modal.d.ts.map +1 -0
  129. package/dist/components/quick-actions/whatsup-modal.js +82 -0
  130. package/dist/components/quick-actions/whatsup-modal.js.map +1 -0
  131. package/dist/components/settings/passkey-panel.d.ts +10 -0
  132. package/dist/components/settings/passkey-panel.d.ts.map +1 -0
  133. package/dist/components/settings/passkey-panel.js +118 -0
  134. package/dist/components/settings/passkey-panel.js.map +1 -0
  135. package/dist/components/share/share-menu.d.ts +23 -0
  136. package/dist/components/share/share-menu.d.ts.map +1 -0
  137. package/dist/components/share/share-menu.js +58 -0
  138. package/dist/components/share/share-menu.js.map +1 -0
  139. package/dist/components/voice/dictation-sheet.d.ts +6 -0
  140. package/dist/components/voice/dictation-sheet.d.ts.map +1 -0
  141. package/dist/components/voice/dictation-sheet.js +91 -0
  142. package/dist/components/voice/dictation-sheet.js.map +1 -0
  143. package/dist/components/voice/mic-button.d.ts +6 -0
  144. package/dist/components/voice/mic-button.d.ts.map +1 -0
  145. package/dist/components/voice/mic-button.js +9 -0
  146. package/dist/components/voice/mic-button.js.map +1 -0
  147. package/dist/components/voice/review-card.d.ts +8 -0
  148. package/dist/components/voice/review-card.d.ts.map +1 -0
  149. package/dist/components/voice/review-card.js +8 -0
  150. package/dist/components/voice/review-card.js.map +1 -0
  151. package/dist/config.d.ts +19 -0
  152. package/dist/config.d.ts.map +1 -0
  153. package/dist/config.js +10 -0
  154. package/dist/config.js.map +1 -0
  155. package/dist/hooks/use-vpn-status.d.ts +2 -0
  156. package/dist/hooks/use-vpn-status.d.ts.map +1 -0
  157. package/dist/hooks/use-vpn-status.js +71 -0
  158. package/dist/hooks/use-vpn-status.js.map +1 -0
  159. package/dist/hooks/use-websocket.d.ts +8 -0
  160. package/dist/hooks/use-websocket.d.ts.map +1 -0
  161. package/dist/hooks/use-websocket.js +366 -0
  162. package/dist/hooks/use-websocket.js.map +1 -0
  163. package/dist/index.d.ts +25 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +31 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/lib/api-client.d.ts +115 -0
  168. package/dist/lib/api-client.d.ts.map +1 -0
  169. package/dist/lib/api-client.js +70 -0
  170. package/dist/lib/api-client.js.map +1 -0
  171. package/dist/lib/backend.d.ts +7 -0
  172. package/dist/lib/backend.d.ts.map +1 -0
  173. package/dist/lib/backend.js +33 -0
  174. package/dist/lib/backend.js.map +1 -0
  175. package/dist/lib/frontmatter.d.ts +21 -0
  176. package/dist/lib/frontmatter.d.ts.map +1 -0
  177. package/dist/lib/frontmatter.js +88 -0
  178. package/dist/lib/frontmatter.js.map +1 -0
  179. package/dist/lib/image-attachments.d.ts +36 -0
  180. package/dist/lib/image-attachments.d.ts.map +1 -0
  181. package/dist/lib/image-attachments.js +175 -0
  182. package/dist/lib/image-attachments.js.map +1 -0
  183. package/dist/lib/passkeys.d.ts +18 -0
  184. package/dist/lib/passkeys.d.ts.map +1 -0
  185. package/dist/lib/passkeys.js +36 -0
  186. package/dist/lib/passkeys.js.map +1 -0
  187. package/dist/lib/share.d.ts +53 -0
  188. package/dist/lib/share.d.ts.map +1 -0
  189. package/dist/lib/share.js +144 -0
  190. package/dist/lib/share.js.map +1 -0
  191. package/dist/lib/strip-markdown.d.ts +10 -0
  192. package/dist/lib/strip-markdown.d.ts.map +1 -0
  193. package/dist/lib/strip-markdown.js +37 -0
  194. package/dist/lib/strip-markdown.js.map +1 -0
  195. package/dist/lib/tool-names.d.ts +17 -0
  196. package/dist/lib/tool-names.d.ts.map +1 -0
  197. package/dist/lib/tool-names.js +23 -0
  198. package/dist/lib/tool-names.js.map +1 -0
  199. package/dist/lib/utils.d.ts +3 -0
  200. package/dist/lib/utils.d.ts.map +1 -0
  201. package/dist/lib/utils.js +6 -0
  202. package/dist/lib/utils.js.map +1 -0
  203. package/dist/lib/ws-client.d.ts +26 -0
  204. package/dist/lib/ws-client.d.ts.map +1 -0
  205. package/dist/lib/ws-client.js +93 -0
  206. package/dist/lib/ws-client.js.map +1 -0
  207. package/dist/stores/chat-store.d.ts +131 -0
  208. package/dist/stores/chat-store.d.ts.map +1 -0
  209. package/dist/stores/chat-store.js +376 -0
  210. package/dist/stores/chat-store.js.map +1 -0
  211. package/dist/stores/connection-store.d.ts +11 -0
  212. package/dist/stores/connection-store.d.ts.map +1 -0
  213. package/dist/stores/connection-store.js +8 -0
  214. package/dist/stores/connection-store.js.map +1 -0
  215. package/dist/stores/file-store.d.ts +53 -0
  216. package/dist/stores/file-store.d.ts.map +1 -0
  217. package/dist/stores/file-store.js +284 -0
  218. package/dist/stores/file-store.js.map +1 -0
  219. package/dist/stores/provider-store.d.ts +24 -0
  220. package/dist/stores/provider-store.d.ts.map +1 -0
  221. package/dist/stores/provider-store.js +56 -0
  222. package/dist/stores/provider-store.js.map +1 -0
  223. package/dist/stores/ui-store.d.ts +21 -0
  224. package/dist/stores/ui-store.d.ts.map +1 -0
  225. package/dist/stores/ui-store.js +23 -0
  226. package/dist/stores/ui-store.js.map +1 -0
  227. package/dist/styles.css +2 -0
  228. package/dist/voice/asr-clients.d.ts +2 -0
  229. package/dist/voice/asr-clients.d.ts.map +1 -0
  230. package/dist/voice/asr-clients.js +33 -0
  231. package/dist/voice/asr-clients.js.map +1 -0
  232. package/dist/voice/asr-deepgram.d.ts +38 -0
  233. package/dist/voice/asr-deepgram.d.ts.map +1 -0
  234. package/dist/voice/asr-deepgram.js +307 -0
  235. package/dist/voice/asr-deepgram.js.map +1 -0
  236. package/dist/voice/asr-webspeech.d.ts +23 -0
  237. package/dist/voice/asr-webspeech.d.ts.map +1 -0
  238. package/dist/voice/asr-webspeech.js +93 -0
  239. package/dist/voice/asr-webspeech.js.map +1 -0
  240. package/dist/voice/use-dictation.d.ts +6 -0
  241. package/dist/voice/use-dictation.d.ts.map +1 -0
  242. package/dist/voice/use-dictation.js +174 -0
  243. package/dist/voice/use-dictation.js.map +1 -0
  244. package/dist/voice/voice-store.d.ts +26 -0
  245. package/dist/voice/voice-store.d.ts.map +1 -0
  246. package/dist/voice/voice-store.js +27 -0
  247. package/dist/voice/voice-store.js.map +1 -0
  248. package/package.json +71 -0
  249. package/src/components/chat/ask-user-card.tsx +451 -0
  250. package/src/components/chat/brain-markdown.tsx +547 -0
  251. package/src/components/chat/chat-page.tsx +820 -0
  252. package/src/components/chat/command-palette.tsx +68 -0
  253. package/src/components/chat/markdown-content.tsx +5 -0
  254. package/src/components/chat/message-bubble.tsx +362 -0
  255. package/src/components/chat/message-share.ts +78 -0
  256. package/src/components/chat/renderers/claude-tools.tsx +53 -0
  257. package/src/components/chat/renderers/generic.tsx +85 -0
  258. package/src/components/chat/renderers/index.ts +19 -0
  259. package/src/components/chat/risk-hints.ts +95 -0
  260. package/src/components/chat/session-drawer.tsx +213 -0
  261. package/src/components/chat/share-block.tsx +128 -0
  262. package/src/components/chat/tool-call-timeline.tsx +322 -0
  263. package/src/components/chat/tool-views.tsx +898 -0
  264. package/src/components/chat/welcome-state.tsx +105 -0
  265. package/src/components/connectivity/connection-gate.tsx +137 -0
  266. package/src/components/connectivity/login-screen.tsx +169 -0
  267. package/src/components/files/file-panel.tsx +116 -0
  268. package/src/components/files/file-tree.tsx +143 -0
  269. package/src/components/files/file-viewer-binary.tsx +63 -0
  270. package/src/components/files/file-viewer-html.tsx +10 -0
  271. package/src/components/files/file-viewer-markdown.tsx +14 -0
  272. package/src/components/files/file-viewer-raw.tsx +44 -0
  273. package/src/components/files/file-viewer.tsx +290 -0
  274. package/src/components/files/frontmatter-panel.tsx +78 -0
  275. package/src/components/layout/app-shell.tsx +25 -0
  276. package/src/components/layout/mobile-tab-bar.tsx +54 -0
  277. package/src/components/layout/side-rail.tsx +128 -0
  278. package/src/components/layout/slide-panel.tsx +64 -0
  279. package/src/components/quick-actions/streaming-modal.tsx +168 -0
  280. package/src/components/quick-actions/whatsup-modal.tsx +149 -0
  281. package/src/components/settings/passkey-panel.tsx +281 -0
  282. package/src/components/share/share-menu.tsx +121 -0
  283. package/src/components/voice/dictation-sheet.tsx +217 -0
  284. package/src/components/voice/mic-button.tsx +31 -0
  285. package/src/components/voice/review-card.tsx +66 -0
  286. package/src/config.ts +27 -0
  287. package/src/hooks/use-vpn-status.ts +75 -0
  288. package/src/hooks/use-websocket.ts +403 -0
  289. package/src/index.ts +46 -0
  290. package/src/lib/api-client.ts +173 -0
  291. package/src/lib/backend.ts +35 -0
  292. package/src/lib/frontmatter.ts +99 -0
  293. package/src/lib/image-attachments.ts +221 -0
  294. package/src/lib/passkeys.ts +50 -0
  295. package/src/lib/share.ts +167 -0
  296. package/src/lib/strip-markdown.ts +38 -0
  297. package/src/lib/tool-names.ts +27 -0
  298. package/src/lib/utils.ts +6 -0
  299. package/src/lib/ws-client.ts +109 -0
  300. package/src/stores/chat-store.ts +619 -0
  301. package/src/stores/connection-store.ts +23 -0
  302. package/src/stores/file-store.ts +344 -0
  303. package/src/stores/provider-store.ts +85 -0
  304. package/src/stores/ui-store.ts +48 -0
  305. package/src/styles.css +4 -0
  306. package/src/theme.css +425 -0
  307. package/src/voice/asr-clients.ts +45 -0
  308. package/src/voice/asr-deepgram.ts +325 -0
  309. package/src/voice/asr-webspeech.ts +135 -0
  310. package/src/voice/use-dictation.ts +187 -0
  311. package/src/voice/voice-store.ts +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-views.js","sourceRoot":"","sources":["../../../src/components/chat/tool-views.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,MAAM,EACN,GAAG,EACH,KAAK,EACL,GAAG,EACH,KAAK,EACL,MAAM,EACN,WAAW,EACX,MAAM,EACN,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAE/D,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,0EAA0E;IAC1E,+DAA+D;IAC/D,MAAM,SAAS,GAAuB,IAAI,CAAC;IAC3C,IAAI,kBAAkB,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,GAAG,GAAuB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,kBAAkB,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG;QAAE,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,GAAG,YAAG,GAAG,GAAY,CAAC;IACtD,OAAO,eAAM,KAAK,EAAE,IAAI,YAAG,IAAI,GAAQ,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,IAAI,EAAE,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,CAAC,EAAE,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,+DAA+D;AAC/D,4CAA4C;AAC5C,+DAA+D;AAE/D,MAAM,SAAS,GAAoC;IACjD,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,YAAY,EAAE,WAAW;IACzB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,MAAM;IACX,CAAC,sBAAsB,CAAC,EAAE,MAAM;CACjC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9B,KAAK,MAAM;YACT,sEAAsE;YACtE,OAAO,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;QACxE,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACtC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3D,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvE,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC3E,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAC1E,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CACR,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CACpE,CAAC;gBACF,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CACR,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC3B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAC7C,CAAC;gBACF,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;gBAC7B,MAAM;YACR;gBACE,IAAI,KAAK,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,cAAc;AACd,+DAA+D;AAE/D,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAsB;IACxD,+DAA+D;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,CACL,eAAK,SAAS,EAAC,8FAA8F,aAC3G,eACE,SAAS,EAAC,kDAAkD,EAC5D,KAAK,EAAE,EAAE,SAAS,EAAE,mCAAmC,EAAE,GACzD,6BAEE,CACP,CAAC;IACJ,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjF,OAAO,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACtC,CAAC;YACD,MAAM;QACR,KAAK,OAAO;YACV,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtC,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACvC,CAAC;YACD,MAAM;QACR,KAAK,MAAM;YACT,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtC,OAAO,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACzC,CAAC;YACD,MAAM;QACR,KAAK,MAAM;YACT,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;YACvC,CAAC;YACD,MAAM;IACV,CAAC;IACD,OAAO,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAkD;IACjF,OAAO,CACL,eAAK,SAAS,EAAC,wIAAwI,aACrJ,eAAM,SAAS,EAAC,qCAAqC,YAClD,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,GACnC,EACN,KAAK,IAAI,CACR,eAAM,SAAS,EAAC,+EAA+E,YAC5F,KAAK,GACD,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAS,OAAO,CACd,CAAM,EACN,CAAM,EACN,KAA8B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IAE/C,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,EAAE,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;gBACtB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC;AAKD;;;;GAIG;AACH,SAAS,QAAQ,CAAC,OAAe,EAAE,OAAe;IAChD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,MAAc;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,yEAAyE;IACzE,8EAA8E;IAC9E,yDAAyD;IACzD,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAChD,OAAO;YACL,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1E,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,GAAG,EAAE,CAAC;YACN,SAAS;QACX,CAAC;QACD,qEAAqE;QACrE,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;;gBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,GAAG,EAAE,CAAC;QACR,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AACxE,SAAS,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAI7C;IACC,IAAI,CAAC,MAAM;QAAE,OAAO,4BAAG,IAAI,GAAI,CAAC;IAChC,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACV,eAAc,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,YACpD,CAAC,CAAC,IAAI,IADE,CAAC,CAEL,CACR,CAAC,CAAC,CAAC,CACF,yBAAe,CAAC,CAAC,IAAI,IAAV,CAAC,CAAiB,CAC9B,CACF,GACA,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAsB;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACjG,OAAO,CACL,eAAK,SAAS,EAAC,wDAAwD,aACrE,KAAC,UAAU,IACT,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAC/B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,GACpD,EACF,cAAK,SAAS,EAAC,gHAAgH,YAC5H,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACnB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxB,OAAO,CACL,eAAmB,SAAS,EAAC,MAAM,aACjC,eAAM,SAAS,EAAC,+DAA+D,kBAAS,EACxF,eAAM,SAAS,EAAC,qEAAqE,YAClF,GAAG,CAAC,IAAI,GACJ,KAJC,IAAI,CAAC,EAAE,CAKX,CACP,CAAC;oBACJ,CAAC;oBACD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBACvB,OAAO,CACL,eAAmB,SAAS,EAAC,oBAAoB,aAC/C,eAAM,SAAS,EAAC,sDAAsD,kBAAS,EAC/E,eAAM,SAAS,EAAC,4DAA4D,YAC1E,KAAC,QAAQ,IAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAC,eAAe,GAAG,GACxE,KAJC,IAAI,CAAC,EAAE,CAKX,CACP,CAAC;oBACJ,CAAC;oBACD,OAAO,CACL,eAAmB,SAAS,EAAC,wBAAwB,aACnD,eAAM,SAAS,EAAC,0DAA0D,kBAAS,EACnF,eAAM,SAAS,EAAC,gEAAgE,YAC9E,KAAC,QAAQ,IAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAC,mBAAmB,GAAG,GAC5E,KAJC,IAAI,CAAC,EAAE,CAKX,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAsB;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,EAAE,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,CACL,eAAK,SAAS,EAAC,wDAAwD,aACrE,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,GAAI,EACjE,cAAK,SAAS,EAAC,uIAAuI,YACpJ,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO,KAAK,KAAK,EAAE,GAAI,GAChE,IACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAsB;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK,CAAC,yBAAyB;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzE,OAAO,CACL,eAAK,SAAS,EAAC,iGAAiG,aAC9G,eAAK,SAAS,EAAC,cAAc,aAC3B,eAAM,SAAS,EAAC,0BAA0B,kBAAS,EACnD,eAAM,SAAS,EAAC,0DAA0D,YACvE,OAAO,GACH,IACH,EACL,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,cAAK,SAAS,EAAC,6BAA6B,YACzC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,eAEE,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,CAAC,KAAK,kBAAkB;wBACtB,CAAC,CAAC,oCAAoC;wBACtC,CAAC,CAAC,yCAAyC,CAC9C,YAEA,CAAC,IARG,CAAC,CASD,CACR,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,IAAI,EAAsB;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GACT,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAC/B,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,GAAG,KAAK,EAAE;QACrC,CAAC,CAAC,MAAM,KAAK,IAAI;YACf,CAAC,CAAC,aAAa,MAAM,EAAE;YACvB,CAAC,CAAC,WAAW,CAAC;IACpB,OAAO,CACL,eAAK,SAAS,EAAC,iHAAiH,aAC9H,eAAM,SAAS,EAAC,qCAAqC,YAAE,SAAS,CAAC,IAAI,CAAC,GAAQ,EAC9E,eAAM,SAAS,EAAC,2CAA2C,YAAE,KAAK,GAAQ,IACtE,CACP,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAsB;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CACL,cAAK,SAAS,EAAC,uIAAuI,YACnJ,IAAI,CAAC,SAAS,IAAI,IAAI,GACnB,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,cAAK,SAAS,EAAC,2CAA2C,YACvD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAC7B,eAAe,SAAS,EAAC,4EAA4E,aACnG,gBAAM,SAAS,EAAC,mCAAmC,aAAE,GAAG,SAAS,EACjE,eAAM,SAAS,EAAC,wFAAwF,YACrG,OAAO,KAAK,KAAK,QAAQ;wBACxB,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;wBACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAC7B,KANC,GAAG,CAOP,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAsB;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAG,CAAC;IAC9C,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,6DAA6D;YAC7D,OAAO,CACL,KAAC,UAAU,IAAC,SAAS,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,YAClD,cAAK,SAAS,EAAC,6CAA6C,YAC1D,KAAC,eAAe,IAAC,OAAO,EAAE,MAAM,GAAI,GAChC,GACK,CACd,CAAC;QACJ,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAI,CAAC;QAC7E,KAAK,MAAM;YACT,OAAO,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC;QAC1C,KAAK,MAAM;YACT,OAAO,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC;QAC5C,KAAK,WAAW;YACd,OAAO,KAAC,oBAAoB,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC;QAClD;YACE,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,GAAI,CAAC;IACxC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAuC;IAC/E,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAC1F,OAAO,CACL,0BACE,eAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,OAAO,IAAI,0BAA0B,CAAC,aACjF,eACE,SAAS,EAAE,EAAE,CACX,qGAAqG,EACrG,OAAO;4BACL,CAAC,CAAC,oCAAoC;4BACtC,CAAC,CAAC,wCAAwC,CAC7C,aAEA,YAAY,CAAC,KAAK,CAAC,EACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,IAChC,EACL,SAAS,IAAI,CAAC,OAAO,IAAI,CACxB,cAAK,SAAS,EAAC,gHAAgH,GAAG,CACnI,IACG,EACL,SAAS,IAAI,CACZ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EACnC,SAAS,EAAC,mFAAmF,YAE5F,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,GAC5C,CACV,IACG,CACP,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA8C;IACrF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CACL,0BACE,eAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,IAAI,0BAA0B,CAAC,aACnE,QAAQ,EACR,CAAC,OAAO,IAAI,CACX,cAAK,SAAS,EAAC,gHAAgH,GAAG,CACnI,IACG,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EACnC,SAAS,EAAC,mFAAmF,YAE5F,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,SAAS,GAAG,GAC1C,IACL,CACP,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,EAAU;IACnD,MAAM,QAAQ,GAA4C,EAAE,CAAC;IAC7D,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAyB,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE,GAAG,MAAM;YAAE,MAAM;QAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,EAAE,CAAC,SAAS,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAA+C;IAC3F,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,iDAAiD;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC7C,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,GAAI,CAAC;IACtC,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,8EAA8E;IAC9E,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAa,EAAE;QAC5C,IAAI,CAAC,EAAE;YAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,OAAO,CACL,8BACG,MAAM,IAAI,yBAAO,YAAY,CAAC,MAAM,CAAC,GAAQ,EAC7C,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACxC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,eAAc,SAAS,EAAC,kDAAkD,YACvE,GAAG,CAAC,IAAI,IADA,CAAC,CAEL,CACR,CAAC,CAAC,CAAC,CACF,yBAAe,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAA1B,CAAC,CAAiC,CAC9C,CACF,IACA,CACJ,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CACL,cAAK,SAAS,EAAC,sHAAsH,YAClI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAEE,SAAS,EAAC,iFAAiF,YAE1F,SAAS,CAAC,IAAI,CAAC,IAHX,CAAC,CAIF,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAKD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QAC1C,0EAA0E;QAC1E,6EAA6E;QAC7E,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7C,OACE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EACrC,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO;QACpD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACZ,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,8CAA8C;IAC9C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAEnC,iCAAiC;IACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAEnC,8EAA8E;IAC9E,gFAAgF;IAChF,8EAA8E;IAC9E,MAAM,KAAK,GAAG,kBAAkB,CAAC;IACjC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAC5E,SAAS,oBAAoB,CAAC,EAAE,MAAM,EAAsB;IAC1D,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,GAAI,CAAC;IAC9D,OAAO,CACL,cAAK,SAAS,EAAC,yDAAyD,YACrE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YACD,OAAO,CACL,eAAa,SAAS,EAAC,SAAS,aAC9B,YACE,IAAI,EAAE,CAAC,CAAC,GAAG,EACX,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,6CAA6C,YAEtD,CAAC,CAAC,KAAK,GACN,EACJ,eAAM,SAAS,EAAC,qDAAqD,YAAE,IAAI,GAAQ,KAT3E,CAAC,CAUL,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,EAAE,MAAM,EAAsB;IACpD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CACL,0BACE,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAC,sGAAsG,aAEhH,KAAC,YAAY,IACX,SAAS,EAAE,EAAE,CAAC,8BAA8B,EAAE,IAAI,IAAI,WAAW,CAAC,GAClE,EACD,KAAK,mBACC,EACR,IAAI,IAAI,CACP,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,UAAU,IAAC,IAAI,EAAE,MAAM,GAAI,GACxB,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function WelcomeState({ onAction, }: {
2
+ onAction: (action: string) => void;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=welcome-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-state.d.ts","sourceRoot":"","sources":["../../../src/components/chat/welcome-state.tsx"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,+BAmEA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Brain, Newspaper, Search, BarChart3 } from "lucide-react";
3
+ import { motion } from "framer-motion";
4
+ export function WelcomeState({ onAction, }) {
5
+ return (_jsx("div", { className: "flex min-h-full items-center justify-center px-4 py-8", children: _jsxs("div", { className: "flex flex-col items-center gap-8 text-center", children: [_jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.4, ease: "easeOut" }, children: _jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-surface", children: _jsx(Brain, { className: "h-8 w-8 text-primary", style: { animation: "breathe 3s ease-in-out infinite" } }) }) }), _jsx(motion.h1, { className: "font-[family-name:var(--font-display)] text-3xl text-foreground", initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.4, delay: 0.1, ease: "easeOut" }, children: "What do you need to know?" }), _jsxs(motion.div, { className: "flex flex-col sm:flex-row gap-3", initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.4, delay: 0.2, ease: "easeOut" }, children: [_jsx(SuggestionCard, { icon: Newspaper, label: "What's new?", description: "Daily briefing", onClick: () => onAction("whatsup"), delay: 0 }), _jsx(SuggestionCard, { icon: Search, label: "Search...", description: "Find anything", onClick: () => onAction("search"), delay: 0.05 }), _jsx(SuggestionCard, { icon: BarChart3, label: "Brain stats", description: "Overview", onClick: () => onAction("stats"), delay: 0.1 })] }), _jsxs(motion.div, { className: "text-xs text-muted-foreground/40", initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { duration: 0.4, delay: 0.4 }, children: [_jsx("span", { className: "font-mono", children: "/" }), " for commands"] })] }) }));
6
+ }
7
+ function SuggestionCard({ icon: Icon, label, description, onClick, delay, }) {
8
+ return (_jsxs(motion.button, { onClick: onClick, className: "flex w-44 flex-col items-center gap-2 rounded-xl border border-border bg-surface p-4 text-center transition-all duration-200 hover:border-primary/40 hover:bg-surface-raised", initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3, delay: 0.25 + delay, ease: "easeOut" }, children: [_jsx(Icon, { className: "h-5 w-5 text-primary" }), _jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium text-foreground", children: label }), _jsx("div", { className: "text-[11px] text-muted-foreground", children: description })] })] }));
9
+ }
10
+ //# sourceMappingURL=welcome-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-state.js","sourceRoot":"","sources":["../../../src/components/chat/welcome-state.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from "react";
2
+ export declare function ConnectionGate({ children }: {
3
+ children: ReactNode;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=connection-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-gate.d.ts","sourceRoot":"","sources":["../../../src/components/connectivity/connection-gate.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5D,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAkFnE"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Brain, WifiOff, ShieldAlert } from "lucide-react";
3
+ import { motion, AnimatePresence } from "framer-motion";
4
+ import { useConnectionStore } from "../../stores/connection-store.js";
5
+ import { useEffect, useState } from "react";
6
+ import { LoginScreen } from "./login-screen.js";
7
+ import { useVpnStatus } from "../../hooks/use-vpn-status.js";
8
+ export function ConnectionGate({ children }) {
9
+ // The gate owns its connectivity probe — composing <ConnectionGate> is all
10
+ // an embedder needs; the store would otherwise sit on "checking" forever.
11
+ useVpnStatus();
12
+ const vpnStatus = useConnectionStore((s) => s.vpnStatus);
13
+ // Once the app has connected, never unmount the UI again — an intermittent
14
+ // drop must not destroy rendered chat state. Show a banner instead.
15
+ const [everConnected, setEverConnected] = useState(false);
16
+ useEffect(() => {
17
+ if (vpnStatus === "connected")
18
+ setEverConnected(true);
19
+ }, [vpnStatus]);
20
+ // Auth required (password mode) and no valid session: show the login screen,
21
+ // even if we were connected before (an expired session must re-prompt).
22
+ if (vpnStatus === "unauthorized") {
23
+ return _jsx(LoginScreen, {});
24
+ }
25
+ if (vpnStatus === "connected" || everConnected) {
26
+ return (_jsxs(_Fragment, { children: [_jsx(OfflineBanner, { show: everConnected && vpnStatus !== "connected", forbidden: vpnStatus === "forbidden" }), children] }));
27
+ }
28
+ return (_jsx("div", { className: "flex h-[100dvh] items-center justify-center bg-background", children: _jsx(AnimatePresence, { mode: "wait", children: _jsxs(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -8 }, transition: { duration: 0.3 }, className: "flex flex-col items-center gap-6 text-center px-6", children: [_jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-surface", children: _jsx(Brain, { className: "h-8 w-8 text-primary", style: vpnStatus === "checking"
29
+ ? { animation: "breathe 3s ease-in-out infinite" }
30
+ : undefined }) }), vpnStatus === "checking" && (_jsx("p", { className: "text-sm text-muted-foreground", children: "Connecting..." })), vpnStatus === "forbidden" && (_jsxs(_Fragment, { children: [_jsx("h1", { className: "font-[family-name:var(--font-display)] text-2xl text-foreground", children: "VPN Required" }), _jsx("p", { className: "text-sm text-muted-foreground max-w-xs", children: "Connect to the Tailscale VPN to access Brain." })] })), vpnStatus === "unreachable" && (_jsxs(_Fragment, { children: [_jsx("h1", { className: "font-[family-name:var(--font-display)] text-2xl text-foreground", children: "Unable to reach server" }), _jsx("p", { className: "text-sm text-muted-foreground max-w-xs", children: "Check your connection and try again. Retrying automatically..." })] }))] }, vpnStatus) }) }));
31
+ }
32
+ /**
33
+ * Slim overlay banner for connection drops after the app is up. The UI below
34
+ * stays mounted and interactive; reconnection is automatic (VPN poll + WS
35
+ * backoff both tighten while offline).
36
+ */
37
+ function OfflineBanner({ show, forbidden, }) {
38
+ return (_jsx(AnimatePresence, { children: show && (_jsx(motion.div, { initial: { opacity: 0, y: -24 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -24 }, transition: { duration: 0.2 }, className: "pointer-events-none fixed inset-x-0 top-0 z-[60] flex justify-center px-4 pt-3", children: _jsxs("div", { role: "status", className: "flex items-center gap-2 rounded-full border border-amber-500/30 bg-amber-950/90 px-4 py-1.5 text-xs text-amber-200 shadow-lg backdrop-blur", children: [forbidden ? (_jsx(ShieldAlert, { className: "h-3.5 w-3.5" })) : (_jsx(WifiOff, { className: "h-3.5 w-3.5" })), _jsx("span", { children: forbidden
39
+ ? "VPN required — reconnect Tailscale"
40
+ : "Connection lost — reconnecting…" }), _jsx("span", { className: "inline-block h-1.5 w-1.5 rounded-full bg-amber-400", style: { animation: "breathe 2s ease-in-out infinite" } })] }) })) }));
41
+ }
42
+ //# sourceMappingURL=connection-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-gate.js","sourceRoot":"","sources":["../../../src/components/connectivity/connection-gate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Login, shown when the server is in `password` auth mode and no valid session
3
+ * cookie is present (the /api/vpn-check probe returns 401). Password is always
4
+ * offered; a passkey button appears when the server reports registered
5
+ * passkeys and the browser supports WebAuthn. On success the browser has the
6
+ * HttpOnly session cookie; a reload boots the authenticated app.
7
+ */
8
+ export declare function LoginScreen(): import("react").JSX.Element;
9
+ //# sourceMappingURL=login-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-screen.d.ts","sourceRoot":"","sources":["../../../src/components/connectivity/login-screen.tsx"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,wBAAgB,WAAW,gCAqJ1B"}
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { uiConfig } from "../../config.js";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { Brain, Fingerprint, Lock } from "lucide-react";
5
+ import { motion } from "framer-motion";
6
+ import { api } from "../../lib/api-client.js";
7
+ import { isUserCancel, loginWithPasskey, supportsAutofill, supportsPasskeys, } from "../../lib/passkeys.js";
8
+ /**
9
+ * Login, shown when the server is in `password` auth mode and no valid session
10
+ * cookie is present (the /api/vpn-check probe returns 401). Password is always
11
+ * offered; a passkey button appears when the server reports registered
12
+ * passkeys and the browser supports WebAuthn. On success the browser has the
13
+ * HttpOnly session cookie; a reload boots the authenticated app.
14
+ */
15
+ export function LoginScreen() {
16
+ const [password, setPassword] = useState("");
17
+ const [error, setError] = useState(null);
18
+ const [submitting, setSubmitting] = useState(false);
19
+ const [passkeyAvailable, setPasskeyAvailable] = useState(false);
20
+ // Fail-open: if the methods probe fails, keep the password form — the
21
+ // server enforces the real policy, and hiding the only working method on a
22
+ // transient error would be a self-inflicted lockout.
23
+ const [passwordAvailable, setPasswordAvailable] = useState(true);
24
+ const conditionalStarted = useRef(false);
25
+ useEffect(() => {
26
+ let cancelled = false;
27
+ api
28
+ .authMethods()
29
+ .then(async (methods) => {
30
+ if (cancelled)
31
+ return;
32
+ if (methods.passkey && !methods.password)
33
+ setPasswordAvailable(false);
34
+ if (!methods.passkey || !supportsPasskeys())
35
+ return;
36
+ setPasskeyAvailable(true);
37
+ // Conditional UI (progressive enhancement): surface passkeys in the
38
+ // password input's autofill. Runs once; a user cancel is not an error.
39
+ if (conditionalStarted.current || !(await supportsAutofill()))
40
+ return;
41
+ conditionalStarted.current = true;
42
+ try {
43
+ await loginWithPasskey({ useBrowserAutofill: true });
44
+ window.location.reload();
45
+ }
46
+ catch (err) {
47
+ if (!isUserCancel(err)) {
48
+ console.warn("[passkeys] conditional UI failed:", err);
49
+ }
50
+ }
51
+ })
52
+ .catch(() => {
53
+ // Methods probe failing degrades to password-only — unchanged behavior.
54
+ });
55
+ return () => {
56
+ cancelled = true;
57
+ };
58
+ }, []);
59
+ async function onSubmit(e) {
60
+ e.preventDefault();
61
+ if (!password || submitting)
62
+ return;
63
+ setSubmitting(true);
64
+ setError(null);
65
+ try {
66
+ await api.login(password);
67
+ // Cookie is set; reload so the app boots authenticated.
68
+ window.location.reload();
69
+ }
70
+ catch (err) {
71
+ setError(err instanceof Error ? err.message : "Login failed");
72
+ setSubmitting(false);
73
+ }
74
+ }
75
+ async function onPasskeyClick() {
76
+ if (submitting)
77
+ return;
78
+ setSubmitting(true);
79
+ setError(null);
80
+ try {
81
+ await loginWithPasskey();
82
+ window.location.reload();
83
+ }
84
+ catch (err) {
85
+ if (!isUserCancel(err)) {
86
+ setError(err instanceof Error ? err.message : "Passkey login failed");
87
+ }
88
+ setSubmitting(false);
89
+ }
90
+ }
91
+ return (_jsx("div", { className: "flex h-[100dvh] items-center justify-center bg-background", children: _jsxs(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 }, className: "flex w-full max-w-xs flex-col items-center gap-6 px-6 text-center", children: [_jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-surface", children: _jsx(Brain, { className: "h-8 w-8 text-primary" }) }), _jsxs("div", { children: [_jsx("h1", { className: "font-[family-name:var(--font-display)] text-2xl text-foreground", children: uiConfig.appName }), _jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: !passwordAvailable
92
+ ? "Sign in with your passkey."
93
+ : passkeyAvailable
94
+ ? "Use your passkey or enter the password."
95
+ : "Enter the password to continue." })] }), _jsxs("form", { onSubmit: onSubmit, className: "flex w-full flex-col gap-3", children: [passwordAvailable && (_jsxs("div", { className: "relative", children: [_jsx(Lock, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground/60" }), _jsx("input", { type: "password", autoFocus: true, autoComplete: "current-password webauthn", value: password, onChange: (e) => setPassword(e.target.value), placeholder: "Password", className: "w-full rounded-lg border border-border-subtle bg-surface py-2 pl-9 pr-3 text-sm text-foreground outline-none transition-colors focus:border-primary" })] })), error && (_jsx("p", { role: "alert", className: "text-xs text-destructive", children: error })), passwordAvailable && (_jsx("button", { type: "submit", disabled: submitting || !password, className: "rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:brightness-110 disabled:opacity-50", children: submitting ? "Signing in…" : "Sign in" })), passkeyAvailable && (_jsxs("button", { type: "button", onClick: onPasskeyClick, disabled: submitting, className: passwordAvailable
96
+ ? "flex items-center justify-center gap-2 rounded-lg border border-border-subtle bg-surface px-4 py-2 text-sm font-medium text-foreground transition-colors hover:border-primary disabled:opacity-50"
97
+ : "flex items-center justify-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:brightness-110 disabled:opacity-50", children: [_jsx(Fingerprint, { className: "h-4 w-4" }), "Sign in with a passkey"] })), !passwordAvailable && !passkeyAvailable && (_jsx("p", { className: "text-xs text-muted-foreground", children: "Password login is disabled. Use a device or browser that supports passkeys." }))] })] }) }));
98
+ }
99
+ //# sourceMappingURL=login-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-screen.js","sourceRoot":"","sources":["../../../src/components/connectivity/login-screen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function FilePanel({ open, onClose }: {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=file-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-panel.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-panel.tsx"],"names":[],"mappings":"AAOA,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,+BA4GlF"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { ChevronDown, ChevronRight, X } from "lucide-react";
4
+ import { useFileStore } from "../../stores/file-store.js";
5
+ import { FileTree } from "./file-tree.js";
6
+ import { FileViewer } from "./file-viewer.js";
7
+ import { cn } from "../../lib/utils.js";
8
+ export function FilePanel({ open, onClose }) {
9
+ const currentPath = useFileStore((s) => s.currentPath);
10
+ const treeExpanded = useFileStore((s) => s.treeExpanded);
11
+ const setTreeExpanded = useFileStore((s) => s.setTreeExpanded);
12
+ const closeFile = useFileStore((s) => s.closeFile);
13
+ useEffect(() => {
14
+ if (!open)
15
+ return;
16
+ const handler = (e) => {
17
+ if (e.key === "Escape")
18
+ onClose();
19
+ };
20
+ document.addEventListener("keydown", handler);
21
+ return () => document.removeEventListener("keydown", handler);
22
+ }, [open, onClose]);
23
+ // Sync hash route to current file. When the panel closes, strip the
24
+ // `#/files*` segment entirely so a reload doesn't reopen it.
25
+ useEffect(() => {
26
+ if (!open) {
27
+ if (window.location.hash.startsWith("#/files")) {
28
+ // Replace with the pathname (no hash) so reload lands on the chat.
29
+ history.replaceState(null, "", window.location.pathname + window.location.search);
30
+ }
31
+ return;
32
+ }
33
+ if (currentPath) {
34
+ const target = `#/files/${currentPath}`;
35
+ if (window.location.hash !== target) {
36
+ history.replaceState(null, "", target);
37
+ }
38
+ }
39
+ else if (window.location.hash.startsWith("#/files")) {
40
+ history.replaceState(null, "", "#/files");
41
+ }
42
+ }, [open, currentPath]);
43
+ const showTree = !currentPath || treeExpanded;
44
+ return (_jsxs(_Fragment, { children: [open && (_jsx("div", { className: "fixed inset-0 z-40 bg-black/40 transition-opacity md:bg-black/20", onClick: onClose })), _jsxs("div", { className: cn("fixed right-0 top-0 z-50 flex h-full w-full flex-col border-l border-border bg-surface shadow-[0_16px_48px_rgba(0,0,0,0.5)] md:w-[560px]", "transform transition-transform duration-300 ease-out", open ? "translate-x-0" : "translate-x-full"), children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-5 py-4", children: [_jsx("h2", { className: "font-[family-name:var(--font-display)] text-lg text-foreground", children: "Files" }), _jsx("button", { onClick: onClose, className: "rounded-lg p-2.5 md:p-1.5 text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", children: _jsx(X, { className: "h-5 w-5 md:h-4 md:w-4" }) })] }), _jsxs("div", { className: "flex flex-1 flex-col overflow-hidden", children: [currentPath && (_jsxs("div", { className: "flex items-center gap-1 border-b border-border bg-surface-raised/40 px-3 py-1.5", children: [_jsxs("button", { onClick: () => setTreeExpanded(!treeExpanded), className: "flex items-center gap-1.5 rounded px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", children: [treeExpanded ? _jsx(ChevronDown, { className: "h-3.5 w-3.5" }) : _jsx(ChevronRight, { className: "h-3.5 w-3.5" }), treeExpanded ? "Hide tree" : "Show tree"] }), _jsx("button", { onClick: closeFile, className: "ml-auto rounded px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", children: "Close file" })] })), showTree && (_jsx("div", { className: cn("overflow-y-auto", currentPath ? "max-h-[45vh] border-b border-border" : "flex-1"), children: _jsx(FileTree, {}) })), currentPath && (_jsx("div", { className: "flex-1 overflow-hidden", children: _jsx(FileViewer, {}) }))] })] })] }));
45
+ }
46
+ //# sourceMappingURL=file-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-panel.js","sourceRoot":"","sources":["../../../src/components/files/file-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function FileTree(): import("react").JSX.Element;
2
+ //# sourceMappingURL=file-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-tree.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,QAAQ,gCAuCvB"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ import { ChevronRight, Folder, FolderOpen, FileText, FileCode, FileImage, File as FileIcon, Loader2, AlertCircle } from "lucide-react";
4
+ import { useFileStore } from "../../stores/file-store.js";
5
+ import { cn } from "../../lib/utils.js";
6
+ const IMAGE_EXT = new Set([".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".avif", ".bmp", ".ico"]);
7
+ const CODE_EXT = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".py", ".rb", ".go", ".rs", ".java", ".sh", ".bash", ".css", ".html", ".json", ".yaml", ".yml", ".toml", ".sql"]);
8
+ function iconForFile(name) {
9
+ const i = name.lastIndexOf(".");
10
+ const ext = i >= 0 ? name.slice(i).toLowerCase() : "";
11
+ if (ext === ".md" || ext === ".markdown" || ext === ".txt")
12
+ return FileText;
13
+ if (IMAGE_EXT.has(ext))
14
+ return FileImage;
15
+ if (CODE_EXT.has(ext))
16
+ return FileCode;
17
+ return FileIcon;
18
+ }
19
+ export function FileTree() {
20
+ const loadDir = useFileStore((s) => s.loadDir);
21
+ const dirCache = useFileStore((s) => s.dirCache);
22
+ const dirErrors = useFileStore((s) => s.dirErrors);
23
+ useEffect(() => {
24
+ if (!dirCache[""]) {
25
+ void loadDir("");
26
+ }
27
+ }, [dirCache, loadDir]);
28
+ const rootEntries = dirCache[""];
29
+ const rootError = dirErrors[""];
30
+ if (rootError) {
31
+ return (_jsxs("div", { className: "flex items-start gap-2 px-4 py-3 text-xs text-destructive", children: [_jsx(AlertCircle, { className: "h-4 w-4 shrink-0" }), _jsx("span", { children: rootError })] }));
32
+ }
33
+ if (!rootEntries) {
34
+ return (_jsxs("div", { className: "flex items-center gap-2 px-4 py-3 text-xs text-muted-foreground", children: [_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin" }), "Loading files..."] }));
35
+ }
36
+ return (_jsx("ul", { className: "py-1 text-sm", children: rootEntries.map((entry) => (_jsx(TreeNode, { entry: entry, depth: 0 }, entry.path))) }));
37
+ }
38
+ function TreeNode({ entry, depth }) {
39
+ const expanded = useFileStore((s) => s.expandedDirs.has(entry.path));
40
+ const loading = useFileStore((s) => s.loadingDirs.has(entry.path));
41
+ const childEntries = useFileStore((s) => (entry.type === "dir" ? s.dirCache[entry.path] : undefined));
42
+ const childError = useFileStore((s) => (entry.type === "dir" ? s.dirErrors[entry.path] : undefined));
43
+ const toggleDir = useFileStore((s) => s.toggleDir);
44
+ const openFile = useFileStore((s) => s.openFile);
45
+ const isActive = useFileStore((s) => s.currentPath === entry.path);
46
+ const highlighted = useFileStore((s) => entry.type === "dir" && s.highlightedDir === entry.path);
47
+ const setHighlightedDir = useFileStore((s) => s.setHighlightedDir);
48
+ const dirBtnRef = useRef(null);
49
+ useEffect(() => {
50
+ if (!highlighted || !dirBtnRef.current)
51
+ return;
52
+ dirBtnRef.current.scrollIntoView({ behavior: "smooth", block: "center" });
53
+ const t = setTimeout(() => setHighlightedDir(null), 1800);
54
+ return () => clearTimeout(t);
55
+ }, [highlighted, setHighlightedDir]);
56
+ const indent = { paddingLeft: depth * 14 + 8 };
57
+ if (entry.type === "dir") {
58
+ return (_jsxs("li", { children: [_jsxs("button", { ref: dirBtnRef, onClick: () => void toggleDir(entry.path), className: cn("flex w-full items-center gap-1.5 rounded px-2 py-1 text-left text-foreground transition-colors hover:bg-surface-raised", highlighted && "brain-tree-highlight"), style: indent, "aria-expanded": expanded, children: [_jsx(ChevronRight, { className: cn("h-3 w-3 shrink-0 text-muted-foreground transition-transform", expanded && "rotate-90") }), expanded ? (_jsx(FolderOpen, { className: "h-4 w-4 shrink-0 text-primary/80" })) : (_jsx(Folder, { className: "h-4 w-4 shrink-0 text-muted-foreground" })), _jsx("span", { className: "truncate", children: entry.name }), loading && _jsx(Loader2, { className: "ml-auto h-3 w-3 animate-spin text-muted-foreground" })] }), expanded && (_jsxs("ul", { children: [childError && (_jsxs("li", { className: "flex items-center gap-1.5 px-2 py-1 text-xs text-destructive", style: { paddingLeft: (depth + 1) * 14 + 8 }, children: [_jsx(AlertCircle, { className: "h-3 w-3" }), " ", childError] })), childEntries?.map((child) => (_jsx(TreeNode, { entry: child, depth: depth + 1 }, child.path)))] }))] }));
59
+ }
60
+ const Icon = iconForFile(entry.name);
61
+ return (_jsx("li", { children: _jsxs("button", { onClick: () => void openFile(entry.path), className: cn("flex w-full items-center gap-1.5 rounded px-2 py-1 text-left transition-colors hover:bg-surface-raised", isActive ? "bg-surface-raised text-primary" : "text-foreground/90"), style: indent, children: [_jsx("span", { className: "h-3 w-3 shrink-0" }), _jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }), _jsx("span", { className: "truncate", children: entry.name })] }) }));
62
+ }
63
+ //# sourceMappingURL=file-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tree.js","sourceRoot":"","sources":["../../../src/components/files/file-tree.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { FileContentResponse } from "@schlessera/brain-ui-sdk/protocol";
2
+ export declare function FileViewerBinary({ content }: {
3
+ content: FileContentResponse;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=file-viewer-binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-binary.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-viewer-binary.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAG7E,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,+BAoD7E"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { FileWarning, Download } from "lucide-react";
3
+ import { API_BASE } from "../../lib/backend.js";
4
+ export function FileViewerBinary({ content }) {
5
+ const isImage = content.mime?.startsWith("image/");
6
+ const rawUrl = `${API_BASE}/files/content?path=${encodeURIComponent(content.path)}&raw=1`;
7
+ if (isImage) {
8
+ const filename = content.path.split("/").pop() ?? content.path;
9
+ return (_jsxs("div", { className: "flex h-full flex-col items-center justify-center gap-3 p-6", children: [_jsx("div", { className: "flex max-h-full max-w-full overflow-auto rounded-lg border border-border bg-surface p-2", children: _jsx("img", { src: rawUrl, alt: content.path, className: "max-h-[70vh] max-w-full object-contain" }) }), _jsxs("div", { className: "flex flex-wrap items-center justify-center gap-2 text-xs text-muted-foreground", children: [_jsxs("span", { children: [content.mime, " \u00B7 ", formatSize(content.size)] }), _jsx("span", { className: "text-muted-foreground/40", children: "\u00B7" }), _jsxs("a", { href: rawUrl, download: filename, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 rounded text-muted-foreground transition-colors hover:text-foreground", children: [_jsx(Download, { className: "h-3 w-3" }), "Download"] })] })] }));
10
+ }
11
+ return (_jsxs("div", { className: "m-6 flex flex-col items-start gap-3 rounded-lg border border-border bg-surface p-6", children: [_jsxs("div", { className: "flex items-center gap-2 text-foreground", children: [_jsx(FileWarning, { className: "h-5 w-5 text-muted-foreground" }), _jsx("span", { className: "font-medium", children: "Preview not available" })] }), _jsxs("div", { className: "text-xs text-muted-foreground", children: [content.mime ?? "unknown", " \u00B7 ", formatSize(content.size)] }), _jsxs("a", { href: rawUrl, download: content.path.split("/").pop() ?? content.path, target: "_blank", rel: "noopener noreferrer", className: "mt-1 inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs text-foreground transition-colors hover:bg-surface-raised", children: [_jsx(Download, { className: "h-3.5 w-3.5" }), "Download"] })] }));
12
+ }
13
+ function formatSize(bytes) {
14
+ if (bytes < 1024)
15
+ return `${bytes} B`;
16
+ if (bytes < 1024 * 1024)
17
+ return `${(bytes / 1024).toFixed(1)} KB`;
18
+ return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
19
+ }
20
+ //# sourceMappingURL=file-viewer-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-binary.js","sourceRoot":"","sources":["../../../src/components/files/file-viewer-binary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAoC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,QAAQ,uBAAuB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;IAE1F,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;QAC/D,OAAO,CACL,eAAK,SAAS,EAAC,4DAA4D,aACzE,cAAK,SAAS,EAAC,yFAAyF,YACtG,cAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAC,wCAAwC,GAAG,GACtF,EACN,eAAK,SAAS,EAAC,gFAAgF,aAC7F,2BACG,OAAO,CAAC,IAAI,cAAK,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IACrC,EACP,eAAM,SAAS,EAAC,0BAA0B,uBAAS,EACnD,aACE,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,sGAAsG,aAEhH,KAAC,QAAQ,IAAC,SAAS,EAAC,SAAS,GAAG,gBAE9B,IACA,IACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,oFAAoF,aACjG,eAAK,SAAS,EAAC,yCAAyC,aACtD,KAAC,WAAW,IAAC,SAAS,EAAC,+BAA+B,GAAG,EACzD,eAAM,SAAS,EAAC,aAAa,sCAA6B,IACtD,EACN,eAAK,SAAS,EAAC,+BAA+B,aAC3C,OAAO,CAAC,IAAI,IAAI,SAAS,cAAK,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IACnD,EACN,aACE,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,EACvD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,mKAAmK,aAE7K,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,gBAElC,IACA,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function FileViewerHtml({ content }: {
2
+ content: string;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=file-viewer-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-html.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-viewer-html.tsx"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAS9D"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function FileViewerHtml({ content }) {
3
+ return (_jsx("iframe", { sandbox: "", srcDoc: content, className: "h-full w-full border-0 bg-white", title: "HTML preview" }));
4
+ }
5
+ //# sourceMappingURL=file-viewer-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-html.js","sourceRoot":"","sources":["../../../src/components/files/file-viewer-html.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAuB;IAC7D,OAAO,CACL,iBACE,OAAO,EAAC,EAAE,EACV,MAAM,EAAE,OAAO,EACf,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAC,cAAc,GACpB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function FileViewerMarkdown({ content }: {
2
+ content: string;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=file-viewer-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-markdown.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-viewer-markdown.tsx"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAQlE"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { BrainMarkdown } from "../chat/brain-markdown.js";
4
+ import { splitFrontmatter } from "../../lib/frontmatter.js";
5
+ import { FrontmatterPanel } from "./frontmatter-panel.js";
6
+ export function FileViewerMarkdown({ content }) {
7
+ const { fields, body } = useMemo(() => splitFrontmatter(content), [content]);
8
+ return (_jsxs("div", { className: "px-6 py-4", children: [fields.length > 0 && _jsx(FrontmatterPanel, { fields: fields }), _jsx(BrainMarkdown, { content: body, className: "brain-prose max-w-none", fileLinks: true })] }));
9
+ }
10
+ //# sourceMappingURL=file-viewer-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-markdown.js","sourceRoot":"","sources":["../../../src/components/files/file-viewer-markdown.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAuB;IACjE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACvB,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,EAC1D,KAAC,aAAa,IAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAC,wBAAwB,EAAC,SAAS,SAAG,IACzE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function FileViewerRaw({ content, fileName }: {
2
+ content: string;
3
+ fileName: string;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=file-viewer-raw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-raw.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-viewer-raw.tsx"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAwCzF"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { Copy, Check } from "lucide-react";
4
+ export function FileViewerRaw({ content, fileName }) {
5
+ const [copied, setCopied] = useState(false);
6
+ const [wrap, setWrap] = useState(false);
7
+ return (_jsxs("div", { className: "group relative", children: [_jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-end gap-2 border-b border-border/30 bg-surface/80 px-4 py-1.5 backdrop-blur", children: [_jsxs("label", { className: "flex cursor-pointer items-center gap-1.5 text-[11px] text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: wrap, onChange: (e) => setWrap(e.target.checked), className: "h-3 w-3 accent-primary" }), "Wrap"] }), _jsxs("button", { onClick: () => {
8
+ navigator.clipboard.writeText(content);
9
+ setCopied(true);
10
+ setTimeout(() => setCopied(false), 1500);
11
+ }, title: "Copy file content", className: "flex items-center gap-1 rounded px-2 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-surface-raised hover:text-foreground", children: [copied ? _jsx(Check, { className: "h-3 w-3" }) : _jsx(Copy, { className: "h-3 w-3" }), copied ? "Copied" : "Copy"] })] }), _jsx("pre", { className: wrap
12
+ ? "whitespace-pre-wrap break-words p-4 font-[family-name:var(--font-mono)] text-[13px] leading-relaxed text-foreground"
13
+ : "overflow-x-auto p-4 font-[family-name:var(--font-mono)] text-[13px] leading-relaxed text-foreground", children: _jsx("code", { "data-filename": fileName, children: content }) })] }));
14
+ }
15
+ //# sourceMappingURL=file-viewer-raw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer-raw.js","sourceRoot":"","sources":["../../../src/components/files/file-viewer-raw.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAyC;IACxF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,yHAAyH,aACtI,iBAAO,SAAS,EAAC,4EAA4E,aAC3F,gBACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAC1C,SAAS,EAAC,wBAAwB,GAClC,YAEI,EACR,kBACE,OAAO,EAAE,GAAG,EAAE;4BACZ,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;4BACvC,SAAS,CAAC,IAAI,CAAC,CAAC;4BAChB,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;wBAC3C,CAAC,EACD,KAAK,EAAC,mBAAmB,EACzB,SAAS,EAAC,+IAA+I,aAExJ,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,EACrE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IACpB,IACL,EACN,cACE,SAAS,EACP,IAAI;oBACF,CAAC,CAAC,qHAAqH;oBACvH,CAAC,CAAC,qGAAqG,YAG3G,gCAAqB,QAAQ,YAAG,OAAO,GAAQ,GAC3C,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function FileViewer(): import("react").JSX.Element;
2
+ //# sourceMappingURL=file-viewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-viewer.d.ts","sourceRoot":"","sources":["../../../src/components/files/file-viewer.tsx"],"names":[],"mappings":"AAeA,wBAAgB,UAAU,gCAmDzB"}