@djangocfg/ui-tools 2.1.335 → 2.1.337

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 (194) hide show
  1. package/README.md +68 -2
  2. package/dist/ChatRoot-PNNGQCYF.css +7 -0
  3. package/dist/ChatRoot-PNNGQCYF.css.map +1 -0
  4. package/dist/ChatRoot-XV2QXMV4.mjs +5 -0
  5. package/dist/ChatRoot-XV2QXMV4.mjs.map +1 -0
  6. package/dist/ChatRoot-YX4RLHQX.cjs +14 -0
  7. package/dist/ChatRoot-YX4RLHQX.cjs.map +1 -0
  8. package/dist/{CronScheduler.client-3O3VU4CI.mjs → CronScheduler.client-DLMXCPAJ.mjs} +4 -4
  9. package/dist/{CronScheduler.client-3O3VU4CI.mjs.map → CronScheduler.client-DLMXCPAJ.mjs.map} +1 -1
  10. package/dist/{CronScheduler.client-A4GO6YBY.cjs → CronScheduler.client-WEJF4PWQ.cjs} +14 -14
  11. package/dist/{CronScheduler.client-A4GO6YBY.cjs.map → CronScheduler.client-WEJF4PWQ.cjs.map} +1 -1
  12. package/dist/{DocsLayout-XLDB6CJ2.cjs → DocsLayout-N5ZJZPBY.cjs} +200 -199
  13. package/dist/DocsLayout-N5ZJZPBY.cjs.map +1 -0
  14. package/dist/{DocsLayout-CTJINVBM.mjs → DocsLayout-VFPPNKSQ.mjs} +7 -6
  15. package/dist/DocsLayout-VFPPNKSQ.mjs.map +1 -0
  16. package/dist/JsonSchemaForm-DD7CLRIG.cjs +13 -0
  17. package/dist/{JsonSchemaForm-6WMS4CIY.cjs.map → JsonSchemaForm-DD7CLRIG.cjs.map} +1 -1
  18. package/dist/JsonSchemaForm-XKUIVELK.mjs +4 -0
  19. package/dist/{JsonSchemaForm-KX4JT3M4.mjs.map → JsonSchemaForm-XKUIVELK.mjs.map} +1 -1
  20. package/dist/JsonTree-55625VVH.mjs +5 -0
  21. package/dist/{JsonTree-F27RMYSI.cjs.map → JsonTree-55625VVH.mjs.map} +1 -1
  22. package/dist/JsonTree-DCM5QGWF.cjs +11 -0
  23. package/dist/{JsonTree-QTJYSHCV.mjs.map → JsonTree-DCM5QGWF.cjs.map} +1 -1
  24. package/dist/{LottiePlayer.client-6WVWDO75.cjs → LottiePlayer.client-2S7ISJ2S.cjs} +6 -6
  25. package/dist/{LottiePlayer.client-6WVWDO75.cjs.map → LottiePlayer.client-2S7ISJ2S.cjs.map} +1 -1
  26. package/dist/{LottiePlayer.client-B4I6WNZM.mjs → LottiePlayer.client-5LDSSJWS.mjs} +4 -4
  27. package/dist/{LottiePlayer.client-B4I6WNZM.mjs.map → LottiePlayer.client-5LDSSJWS.mjs.map} +1 -1
  28. package/dist/{MapContainer-RYG4HPH4.cjs → MapContainer-76YL2JXL.cjs} +8 -8
  29. package/dist/{MapContainer-RYG4HPH4.cjs.map → MapContainer-76YL2JXL.cjs.map} +1 -1
  30. package/dist/{MapContainer-GXQLP5WY.mjs → MapContainer-7HXBI3OH.mjs} +3 -3
  31. package/dist/{MapContainer-GXQLP5WY.mjs.map → MapContainer-7HXBI3OH.mjs.map} +1 -1
  32. package/dist/{Mermaid.client-SXRRI2YW.mjs → Mermaid.client-NL4SVR7F.mjs} +4 -4
  33. package/dist/{Mermaid.client-SXRRI2YW.mjs.map → Mermaid.client-NL4SVR7F.mjs.map} +1 -1
  34. package/dist/{Mermaid.client-W76R5AKJ.cjs → Mermaid.client-NNTI6DFX.cjs} +26 -26
  35. package/dist/{Mermaid.client-W76R5AKJ.cjs.map → Mermaid.client-NNTI6DFX.cjs.map} +1 -1
  36. package/dist/Player-BRV7XTWR.mjs +4 -0
  37. package/dist/{Player-M3GC3VPE.mjs.map → Player-BRV7XTWR.mjs.map} +1 -1
  38. package/dist/Player-PM7F7DD7.cjs +13 -0
  39. package/dist/{Player-ZL2X5LGG.cjs.map → Player-PM7F7DD7.cjs.map} +1 -1
  40. package/dist/{PrettyCode.client-RPDIE5CH.cjs → PrettyCode.client-KOHDVPPN.cjs} +13 -13
  41. package/dist/{PrettyCode.client-RPDIE5CH.cjs.map → PrettyCode.client-KOHDVPPN.cjs.map} +1 -1
  42. package/dist/{PrettyCode.client-SPMTQEG4.mjs → PrettyCode.client-ZGYGKE7G.mjs} +4 -4
  43. package/dist/{PrettyCode.client-SPMTQEG4.mjs.map → PrettyCode.client-ZGYGKE7G.mjs.map} +1 -1
  44. package/dist/TreeRoot-N72OYKXU.cjs +19 -0
  45. package/dist/{TreeRoot-A3J65L6F.mjs.map → TreeRoot-N72OYKXU.cjs.map} +1 -1
  46. package/dist/TreeRoot-VGAIXCUA.mjs +4 -0
  47. package/dist/{TreeRoot-DSK5JILT.cjs.map → TreeRoot-VGAIXCUA.mjs.map} +1 -1
  48. package/dist/chunk-2ZLKZ5VR.mjs +631 -0
  49. package/dist/chunk-2ZLKZ5VR.mjs.map +1 -0
  50. package/dist/{chunk-LFWQ36LJ.mjs → chunk-5G5YBFS6.mjs} +4 -4
  51. package/dist/{chunk-LFWQ36LJ.mjs.map → chunk-5G5YBFS6.mjs.map} +1 -1
  52. package/dist/{chunk-IHAY6FO6.cjs → chunk-5I5QNGUG.cjs} +17 -17
  53. package/dist/{chunk-IHAY6FO6.cjs.map → chunk-5I5QNGUG.cjs.map} +1 -1
  54. package/dist/{chunk-F2CMIIOH.cjs → chunk-76NNDZH6.cjs} +42 -42
  55. package/dist/{chunk-F2CMIIOH.cjs.map → chunk-76NNDZH6.cjs.map} +1 -1
  56. package/dist/chunk-B5AWZOHJ.cjs +649 -0
  57. package/dist/chunk-B5AWZOHJ.cjs.map +1 -0
  58. package/dist/{chunk-KR6B3LVY.mjs → chunk-B6IR5KSC.mjs} +3 -3
  59. package/dist/{chunk-KR6B3LVY.mjs.map → chunk-B6IR5KSC.mjs.map} +1 -1
  60. package/dist/{chunk-5LBDYFWH.mjs → chunk-C6GXVH5J.mjs} +3 -3
  61. package/dist/{chunk-5LBDYFWH.mjs.map → chunk-C6GXVH5J.mjs.map} +1 -1
  62. package/dist/{chunk-NRKD4F5X.cjs → chunk-FEN5S772.cjs} +36 -36
  63. package/dist/{chunk-NRKD4F5X.cjs.map → chunk-FEN5S772.cjs.map} +1 -1
  64. package/dist/{chunk-2SMCH62O.cjs → chunk-FP2RLYQZ.cjs} +11 -11
  65. package/dist/{chunk-2SMCH62O.cjs.map → chunk-FP2RLYQZ.cjs.map} +1 -1
  66. package/dist/{chunk-MOME6KYD.mjs → chunk-G5IEC7SR.mjs} +3 -3
  67. package/dist/{chunk-MOME6KYD.mjs.map → chunk-G5IEC7SR.mjs.map} +1 -1
  68. package/dist/{chunk-SE5IERVH.mjs → chunk-GYIO7W7M.mjs} +3 -3
  69. package/dist/{chunk-SE5IERVH.mjs.map → chunk-GYIO7W7M.mjs.map} +1 -1
  70. package/dist/{chunk-3Z3A7FHA.cjs → chunk-IEEAENLX.cjs} +48 -48
  71. package/dist/{chunk-3Z3A7FHA.cjs.map → chunk-IEEAENLX.cjs.map} +1 -1
  72. package/dist/{chunk-DFTVB66S.cjs → chunk-KNDLV4PI.cjs} +85 -85
  73. package/dist/{chunk-DFTVB66S.cjs.map → chunk-KNDLV4PI.cjs.map} +1 -1
  74. package/dist/{chunk-SSUOENAZ.mjs → chunk-KNEQRUBA.mjs} +3 -3
  75. package/dist/{chunk-SSUOENAZ.mjs.map → chunk-KNEQRUBA.mjs.map} +1 -1
  76. package/dist/{chunk-CGILA3WO.mjs → chunk-N2XQF2OL.mjs} +5 -3
  77. package/dist/{chunk-CGILA3WO.mjs.map → chunk-N2XQF2OL.mjs.map} +1 -1
  78. package/dist/{chunk-EUADAUBQ.mjs → chunk-N4MZYNR4.mjs} +4 -4
  79. package/dist/{chunk-EUADAUBQ.mjs.map → chunk-N4MZYNR4.mjs.map} +1 -1
  80. package/dist/{chunk-GGKGH5PM.mjs → chunk-OBRSGM64.mjs} +4 -4
  81. package/dist/{chunk-GGKGH5PM.mjs.map → chunk-OBRSGM64.mjs.map} +1 -1
  82. package/dist/{chunk-6JTB2X72.mjs → chunk-ODO4GMW7.mjs} +3 -3
  83. package/dist/{chunk-6JTB2X72.mjs.map → chunk-ODO4GMW7.mjs.map} +1 -1
  84. package/dist/{chunk-WGEGR3DF.cjs → chunk-OLISEQHS.cjs} +5 -2
  85. package/dist/{chunk-WGEGR3DF.cjs.map → chunk-OLISEQHS.cjs.map} +1 -1
  86. package/dist/{chunk-PZKAH7WQ.mjs → chunk-PVAX67JG.mjs} +3 -3
  87. package/dist/{chunk-PZKAH7WQ.mjs.map → chunk-PVAX67JG.mjs.map} +1 -1
  88. package/dist/{chunk-PRPG2T2E.cjs → chunk-QJ6GTUCO.cjs} +6 -6
  89. package/dist/{chunk-PRPG2T2E.cjs.map → chunk-QJ6GTUCO.cjs.map} +1 -1
  90. package/dist/chunk-QW4RBGHN.cjs +961 -0
  91. package/dist/chunk-QW4RBGHN.cjs.map +1 -0
  92. package/dist/{chunk-33AMWFBZ.cjs → chunk-SGP7V2UW.cjs} +15 -15
  93. package/dist/{chunk-33AMWFBZ.cjs.map → chunk-SGP7V2UW.cjs.map} +1 -1
  94. package/dist/{chunk-FX2QFYWF.mjs → chunk-VWQ5WOIL.mjs} +3 -3
  95. package/dist/{chunk-FX2QFYWF.mjs.map → chunk-VWQ5WOIL.mjs.map} +1 -1
  96. package/dist/{chunk-ZLQHUZDU.cjs → chunk-YDPDTOSP.cjs} +139 -139
  97. package/dist/{chunk-ZLQHUZDU.cjs.map → chunk-YDPDTOSP.cjs.map} +1 -1
  98. package/dist/{chunk-77HQWEQ6.cjs → chunk-YW5IVWHQ.cjs} +33 -33
  99. package/dist/{chunk-77HQWEQ6.cjs.map → chunk-YW5IVWHQ.cjs.map} +1 -1
  100. package/dist/chunk-YWSQDBNU.mjs +2339 -0
  101. package/dist/chunk-YWSQDBNU.mjs.map +1 -0
  102. package/dist/{chunk-YXBOAGIM.cjs → chunk-YXZ6GU7H.cjs} +7 -7
  103. package/dist/{chunk-YXBOAGIM.cjs.map → chunk-YXZ6GU7H.cjs.map} +1 -1
  104. package/dist/{chunk-62Y65TGK.mjs → chunk-ZUFTH5IR.mjs} +8 -631
  105. package/dist/chunk-ZUFTH5IR.mjs.map +1 -0
  106. package/dist/chunk-ZWPBBAR2.cjs +2379 -0
  107. package/dist/chunk-ZWPBBAR2.cjs.map +1 -0
  108. package/dist/components-EHOGXATG.cjs +22 -0
  109. package/dist/{components-5UXYNAKR.cjs.map → components-EHOGXATG.cjs.map} +1 -1
  110. package/dist/components-MQ6DR7TX.cjs +26 -0
  111. package/dist/{components-CFXOEVPN.mjs.map → components-MQ6DR7TX.cjs.map} +1 -1
  112. package/dist/components-XRX7QGLB.mjs +5 -0
  113. package/dist/{components-WYEZL5TE.cjs.map → components-XRX7QGLB.mjs.map} +1 -1
  114. package/dist/components-YATKRWLH.mjs +5 -0
  115. package/dist/{components-ZAGG2PBO.mjs.map → components-YATKRWLH.mjs.map} +1 -1
  116. package/dist/file-icon/index.cjs +6 -6
  117. package/dist/file-icon/index.mjs +1 -1
  118. package/dist/index.cjs +739 -215
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.cts +1025 -39
  121. package/dist/index.d.ts +1025 -39
  122. package/dist/index.mjs +387 -31
  123. package/dist/index.mjs.map +1 -1
  124. package/dist/tree/index.cjs +38 -38
  125. package/dist/tree/index.d.cts +2 -2
  126. package/dist/tree/index.d.ts +2 -2
  127. package/dist/tree/index.mjs +3 -3
  128. package/package.json +6 -6
  129. package/src/index.ts +5 -0
  130. package/src/stories/index.ts +3 -1
  131. package/src/tools/Chat/Chat.story.tsx +1006 -0
  132. package/src/tools/Chat/README.md +528 -0
  133. package/src/tools/Chat/components/Attachments.tsx +192 -0
  134. package/src/tools/Chat/components/ChatRoot.tsx +208 -0
  135. package/src/tools/Chat/components/Composer.tsx +134 -0
  136. package/src/tools/Chat/components/EmptyState.tsx +47 -0
  137. package/src/tools/Chat/components/ErrorBanner.tsx +47 -0
  138. package/src/tools/Chat/components/JumpToLatest.tsx +30 -0
  139. package/src/tools/Chat/components/MessageActions.tsx +72 -0
  140. package/src/tools/Chat/components/MessageBubble.tsx +228 -0
  141. package/src/tools/Chat/components/MessageList.tsx +82 -0
  142. package/src/tools/Chat/components/Sources.tsx +55 -0
  143. package/src/tools/Chat/components/StreamingIndicator.tsx +29 -0
  144. package/src/tools/Chat/components/ToolCalls.tsx +172 -0
  145. package/src/tools/Chat/components/index.ts +24 -0
  146. package/src/tools/Chat/config.ts +55 -0
  147. package/src/tools/Chat/context/ChatProvider.tsx +126 -0
  148. package/src/tools/Chat/context/index.ts +9 -0
  149. package/src/tools/Chat/core/audio/audioBus.ts +172 -0
  150. package/src/tools/Chat/core/audio/index.ts +8 -0
  151. package/src/tools/Chat/core/audio/preferences.ts +68 -0
  152. package/src/tools/Chat/core/audio/types.ts +49 -0
  153. package/src/tools/Chat/core/ids.ts +16 -0
  154. package/src/tools/Chat/core/index.ts +5 -0
  155. package/src/tools/Chat/core/logger.ts +73 -0
  156. package/src/tools/Chat/core/markdown.ts +56 -0
  157. package/src/tools/Chat/core/payload-dispatch.ts +54 -0
  158. package/src/tools/Chat/core/persona.ts +35 -0
  159. package/src/tools/Chat/core/reducer.ts +335 -0
  160. package/src/tools/Chat/core/transport/http.ts +167 -0
  161. package/src/tools/Chat/core/transport/index.ts +13 -0
  162. package/src/tools/Chat/core/transport/mock.ts +134 -0
  163. package/src/tools/Chat/core/transport/sse.ts +116 -0
  164. package/src/tools/Chat/core/transport/types.ts +24 -0
  165. package/src/tools/Chat/hooks/index.ts +26 -0
  166. package/src/tools/Chat/hooks/useChat.ts +555 -0
  167. package/src/tools/Chat/hooks/useChatAudio.ts +191 -0
  168. package/src/tools/Chat/hooks/useChatComposer.ts +227 -0
  169. package/src/tools/Chat/hooks/useChatHistory.ts +59 -0
  170. package/src/tools/Chat/hooks/useChatLayout.ts +111 -0
  171. package/src/tools/Chat/hooks/useChatLightbox.ts +34 -0
  172. package/src/tools/Chat/hooks/useChatScroll.ts +132 -0
  173. package/src/tools/Chat/index.ts +161 -0
  174. package/src/tools/Chat/lazy.tsx +14 -0
  175. package/src/tools/Chat/types.ts +237 -0
  176. package/src/tools/Chat/utils/collectImageAttachments.ts +13 -0
  177. package/src/tools/Map/README.md +384 -0
  178. package/dist/DocsLayout-CTJINVBM.mjs.map +0 -1
  179. package/dist/DocsLayout-XLDB6CJ2.cjs.map +0 -1
  180. package/dist/JsonSchemaForm-6WMS4CIY.cjs +0 -13
  181. package/dist/JsonSchemaForm-KX4JT3M4.mjs +0 -4
  182. package/dist/JsonTree-F27RMYSI.cjs +0 -11
  183. package/dist/JsonTree-QTJYSHCV.mjs +0 -5
  184. package/dist/Player-M3GC3VPE.mjs +0 -4
  185. package/dist/Player-ZL2X5LGG.cjs +0 -13
  186. package/dist/TreeRoot-A3J65L6F.mjs +0 -4
  187. package/dist/TreeRoot-DSK5JILT.cjs +0 -19
  188. package/dist/chunk-62Y65TGK.mjs.map +0 -1
  189. package/dist/chunk-TKSFZHCG.cjs +0 -1597
  190. package/dist/chunk-TKSFZHCG.cjs.map +0 -1
  191. package/dist/components-5UXYNAKR.cjs +0 -22
  192. package/dist/components-CFXOEVPN.mjs +0 -5
  193. package/dist/components-WYEZL5TE.cjs +0 -26
  194. package/dist/components-ZAGG2PBO.mjs +0 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/lazy-wrapper.tsx","../src/tools/Map/lazy.tsx","../src/tools/Mermaid/lazy.tsx","../src/tools/PrettyCode/lazy.tsx","../src/tools/OpenapiViewer/lazy.tsx","../src/tools/JsonForm/lazy.tsx","../src/tools/LottiePlayer/lazy.tsx","../src/tools/AudioPlayer/lazy.tsx","../src/tools/VideoPlayer/lazy.tsx","../src/tools/JsonTree/lazy.tsx","../src/tools/ImageViewer/lazy.tsx","../src/tools/CronScheduler/lazy.tsx","../src/tools/Tree/lazy.tsx","../src/tools/LottiePlayer/index.tsx","../src/tools/OpenapiViewer/index.tsx","../src/tools/CronScheduler/index.tsx","../src/tools/CodeEditor/workers/setup.ts","../src/tools/CodeEditor/hooks/useMonaco.ts","../src/tools/CodeEditor/hooks/useEditorTheme.ts","../src/tools/CodeEditor/components/Editor.tsx","../src/tools/CodeEditor/components/DiffEditor.tsx","../src/tools/CodeEditor/lib/languages.ts","../src/tools/CodeEditor/context/EditorProvider.tsx","../src/tools/CodeEditor/hooks/useEditor.ts","../src/tools/CodeEditor/hooks/useLanguage.ts","../src/tools/MarkdownEditor/MentionList.tsx","../src/tools/MarkdownEditor/createMentionSuggestion.ts","../src/tools/MarkdownEditor/mentionPresets.ts","../src/tools/MarkdownEditor/MarkdownEditor.tsx"],"names":["useAppT","jsx","cn","__name","jsxs","Suspense","React","PlaygroundProvider","lazy","LoadingFallback","useState","useEffect","useResolvedTheme","useRef","s","forwardRef","Editor","useCallback","useImperativeHandle","createContext","useContext","useMemo","computePosition","offset","flip","shift","ReactRenderer","autoUpdate","StarterKit","Placeholder","Markdown","Mention","useEditor","editor","EditorContent","Bold","Italic","Strikethrough","Code","Heading1","Heading2","Heading3","List","ListOrdered","Quote","Minus"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAA2B;AAC7D,EAAA,MAAM,IAAIA,YAAA,EAAQ;AAClB,EAAA,MAAM,YAAA,GAAe,EAAE,mBAAmB,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,MAAA;AAAA,QACT,gDAAA;AAAA,QACA,2DAAA;AAAA,QACA,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY;AAAA;AAAA,GACd;AAEJ;AAhBgBC,wBAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAqBT,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA,GAAY,GAAA;AAAA,EACZ,QAAA,GAAW,IAAA;AAAA,EACX,IAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,IAAIH,YAAA,EAAQ;AAClB,EAAA,MAAM,WAAA,GAAc,IAAA,IAAQ,CAAA,CAAE,iBAAiB,CAAA;AAC/C,EAAA,MAAM,SAAS,OAAO,SAAA,KAAc,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA,GAAO,SAAA;AAElE,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,MAAA;AAAA,QACT,yDAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO;AAAA,MAE3B,QAAA,kBAAAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,cAAA,EAAe,CAAA;AAAA,QACjC,QAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA,EAEnE;AAAA;AAAA,GACF;AAEJ;AA1BgBE,wBAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AA+BT,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ;AACF,CAAA,EAKG;AACD,EAAA,MAAM,IAAIH,YAAA,EAAQ;AAClB,EAAA,MAAM,SAAA,GAAY,KAAA,IAAS,CAAA,CAAE,mBAAmB,CAAA;AAChD,EAAA,MAAM,SAAS,OAAO,SAAA,KAAc,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA,GAAO,SAAA;AAElE,EAAA,uBACEI,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWF,MAAA;AAAA,QACT,kEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAE,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,UAChE,WAAA,oBACCA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAEnE,CAAA;AAAA,wBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kCAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO;AAAA,YAE3B,QAAA,kBAAAA,cAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,cAAA,EAAe;AAAA;AAAA,SACpC,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAtCgBE,wBAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AA2CT,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA,GAAY,GAAA;AAAA,EACZ;AACF,CAAA,EAGG;AACD,EAAA,MAAM,IAAIH,YAAA,EAAQ;AAClB,EAAA,MAAM,WAAA,GAAc,EAAE,iBAAiB,CAAA;AACvC,EAAA,MAAM,SAAS,OAAO,SAAA,KAAc,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAA,CAAA,GAAO,SAAA;AAElE,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,MAAA;AAAA,QACT,iDAAA;AAAA,QACA,kCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO;AAAA,MAE3B,QAAA,kBAAAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,wBAAA,EAAyB,CAAA;AAAA,0BAC5CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACb,QAAA,kBAAAG,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,+BAAA;AAAA,cACV,IAAA,EAAK,MAAA;AAAA,cACL,OAAA,EAAQ,WAAA;AAAA,cACR,MAAA,EAAO,cAAA;AAAA,cAEP,QAAA,EAAA;AAAA,gCAAAH,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,WAAA,EAAa,CAAA;AAAA,oBACb,CAAA,EAAE;AAAA;AAAA,iBACJ;AAAA,gCACAA,cAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,WAAA,EAAa,CAAA;AAAA,oBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,WACF,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA,EACjE;AAAA;AAAA,GACF;AAEJ;AAjDgBE,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA4FT,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA,GAAY,GAAA;AAAA,EACZ;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,kBAAkB,IAAA,mBACtBF,cAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,eAAA;AAAA,MACb,SAAA;AAAA,MACA;AAAA;AAAA,GACF,mBAEAA,cAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAsB,SAAA,EAAsB,CAAA;AAG/D,EAAA,uBAAOA,cAAA,CAACI,cAAA,EAAA,EAAS,QAAA,EAAU,QAAA,IAAY,iBAAkB,QAAA,EAAS,CAAA;AACpE;AArBgBF,wBAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AA8CT,SAAS,mBAAA,CACd,MAAA,EACA,OAAA,GAAyC,EAAC,EACxB;AAClB,EAAA,MAAM,aAAA,GAAsBG,sBAAK,MAAM,CAAA;AAEvC,EAAA,MAAM,gBAAA,6CAAoB,KAAA,KAAa;AACrC,IAAA,MAAM,QAAA,GACJ,OAAO,OAAA,CAAQ,QAAA,KAAa,UAAA,GACxB,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,GACtB,OAAA,CAAQ,QAAA,oBAAYL,cAAA,CAAC,eAAA,EAAA,EAAgB,CAAA;AAE3C,IAAA,sCACGI,cAAA,EAAA,EAAS,QAAA,EACR,yCAAC,aAAA,EAAA,EAAe,GAAG,OAAO,CAAA,EAC5B,CAAA;AAAA,EAEJ,CAAA,EAXyB,kBAAA,CAAA;AAazB,EAAA,gBAAA,CAAiB,WAAA,GAAc,QAAQ,WAAA,IAAe,eAAA;AAEtD,EAAA,OAAO,gBAAA;AACT;AAtBgBF,wBAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AC1OT,IAAM,gBAAA,GAAmB,mBAAA;AAAA,EAC9B,MAAM,OAAO,6BAA2B,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,YAAA,EAAa,CAAE,CAAA;AAAA,EACvF;AAAA,IACE,WAAA,EAAa,kBAAA;AAAA,IACb,QAAA,kBAAUF,cAAAA,CAAC,kBAAA,EAAA,EAAmB,WAAW,GAAA,EAAK;AAAA;AAElD;AAKO,IAAM,WAAA,GAAc,mBAAA;AAAA,EACzB,MAAM,OAAO,6BAA2B,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,OAAA,EAAQ,CAAE,CAAA;AAAA,EAClF;AAAA,IACE,WAAA,EAAa,aAAA;AAAA,IACb,QAAA,kBAAUA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,WAAW,GAAA,EAAK;AAAA;AAElD;ACXO,IAAM,WAAA,GAAc,mBAAA;AAAA,EACzB,MAAM,OAAO,+BAAkB,CAAA;AAAA,EAC/B;AAAA,IACE,WAAA,EAAa,aAAA;AAAA,IACb,0BACEA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAY,YAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AAAA;AACb;AAGN;ACFA,SAAS,mBAAA,GAAsB;AAC7B,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EACb,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EAA4D,CAAA;AAAA,oBAC3EA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,iBAAA,EAAe;AAAA,GAAA,EACjE,GACF,CAAA,EACF,CAAA;AAEJ;AAXSE,wBAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;AAsBF,IAAM,cAAA,GAAiB,mBAAA;AAAA,EAC5B,MAAM,OAAO,kCAAqB,CAAA;AAAA,EAClC;AAAA,IACE,WAAA,EAAa,gBAAA;AAAA,IACb,QAAA,kBAAUF,cAAAA,CAAC,mBAAA,EAAA,EAAoB;AAAA;AAEnC;AC7CA,SAAS,sBAAA,GAAyB;AAChC,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEACb,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0GAAA,EAA2G,CAAA;AAAA,oBAC1HA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAqC,QAAA,EAAA,2BAAA,EAAyB;AAAA,GAAA,EAC7E,CAAA,EACF,CAAA;AAEJ;AATSE,wBAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAWT,IAAM,cAAA,GAAiB,mBAAA;AAAA,EACrB,MAAM,OAAO,2BAAyB,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,UAAA,EAAW,CAAE,CAAA;AAAA,EACnF;AAAA,IACE,WAAA,EAAa,gBAAA;AAAA,IACb,QAAA,kBAAUF,cAAAA,CAAC,sBAAA,EAAA,EAAuB;AAAA;AAEtC,CAAA;AAEO,IAAM,iBAAA,mBAA+CE,wBAAA,CAAA,CAAC,EAAE,MAAA,EAAO,KAAM;AAC1E,EAAA,uBACEF,cAAAA,CAACM,oCAAA,EAAA,EAAmB,QAClB,QAAA,kBAAAN,cAAAA,CAAC,kBAAe,CAAA,EAClB,CAAA;AAEJ,CAAA,EAN4D,mBAAA;AAQ5D,iBAAA,CAAkB,WAAA,GAAc,mBAAA;ACpBzB,IAAM,kBAAA,GAAqB,mBAAA;AAAA,EAChC,MAAM,OAAO,+BAAkB,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,cAAA,EAAe,CAAE,CAAA;AAAA,EAChF;AAAA,IACE,WAAA,EAAa,oBAAA;AAAA,IACb,0BACEA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,MAAA;AAAA,QACN,WAAA,EAAY,wBAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AAAA;AACb;AAGN;ACZA,SAAS,qBAAA,GAAwB;AAC/B,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACb,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EAA2E,CAAA;AAAA,oBAC1FA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,sBAAA,EAAoB;AAAA,GAAA,EACtE,CAAA,EACF,CAAA;AAEJ;AATSE,wBAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAoBF,IAAM,gBAAA,GAAmB,mBAAA;AAAA,EAC9B,MAAM,OAAO,oCAAuB,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,YAAA,EAAa,CAAE,CAAA;AAAA,EACnF;AAAA,IACE,WAAA,EAAa,kBAAA;AAAA,IACb,QAAA,kBAAUF,cAAAA,CAAC,qBAAA,EAAA,EAAsB;AAAA;AAErC;ACnDO,IAAM,UAAA,GAAa,mBAAA;AAAA,EACxB,MAAM,OAAO,uBAAU,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,MAAA,EAAO,CAAE,CAAA;AAAA,EAChE;AAAA,IACE,WAAA,EAAa,iBAAA;AAAA,IACb,0BACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFAAqF,QAAA,EAAA,4BAAA,EAEpG;AAAA;AAGN;ACUA,SAAS,oBAAA,GAAuB;AAC9B,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEACb,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAA8E,CAAA;AAAA,sBAC7FA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDACb,QAAA,kBAAAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,uBAAA;AAAA,UACV,IAAA,EAAK,cAAA;AAAA,UACL,OAAA,EAAQ,WAAA;AAAA,UAER,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA;AAAA,OAC1B,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,yBAAA,EAAuB;AAAA,GAAA,EACjE,CAAA,EACF,CAAA;AAEJ;AApBSE,wBAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AA+BF,IAAM,eAAA,GAAkB,mBAAA;AAAA,EAC7B,MAAM,OAAO,2BAAc,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,WAAA,EAAY,CAAE,CAAA;AAAA,EACzE;AAAA,IACE,WAAA,EAAa,iBAAA;AAAA,IACb,QAAA,kBAAUF,cAAAA,CAAC,oBAAA,EAAA,EAAqB;AAAA;AAEpC;ACPO,IAAM,YAAA,GAAe,mBAAA;AAAA,EAC1B,MAAM,OAAO,yBAAS,CAAA;AAAA,EACtB;AAAA,IACE,WAAA,EAAa,cAAA;AAAA,IACb,0BAAUA,cAAAA,CAAC,mBAAgB,SAAA,EAAW,GAAA,EAAK,MAAK,wBAAA,EAAyB;AAAA;AAE7E;AC/BO,IAAM,eAAA,GAAkB,mBAAA;AAAA,EAC7B,MAAM,OAAO,2BAAc,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,WAAA,EAAY,CAAE,CAAA;AAAA,EACzE;AAAA,IACE,WAAA,EAAa,iBAAA;AAAA,IACb,0BAAUA,cAAAA,CAAC,mBAAgB,SAAA,EAAW,GAAA,EAAK,MAAK,yBAAA,EAA0B;AAAA;AAE9E;ACkBO,IAAM,iBAAA,GAAoB,mBAAA;AAAA,EAC/B,MAAM,OAAO,qCAAwB,CAAA;AAAA,EACrC;AAAA,IACE,WAAA,EAAa,mBAAA;AAAA,IACb,0BACEA,cAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAA;AAAA,QACX,QAAA,EAAU,KAAA;AAAA,QACV,SAAA,EAAU;AAAA;AAAA;AACZ;AAGN;AC7DO,IAAM,QAAA,GAAW,mBAAA;AAAA,EACtB,MAAM,OAAO,yBAAY,CAAA;AAAA,EACzB;AAAA,IACE,WAAA,EAAa,UAAA;AAAA,IACb,0BAAUA,cAAAA,CAAC,mBAAgB,SAAA,EAAW,GAAA,EAAK,MAAK,oBAAA,EAAgB;AAAA;AAEpE;ACCA,IAAM,kBAAA,GAAqBO,UAAAA;AAAA,EAAK,MAC9B,OAAO,oCAAuB,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,YAAA,EAAa,CAAE;AAC/E,CAAA;AAGA,IAAMC,gBAAAA,mBAAkBN,wBAAA,CAAA,sBACtBF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,kBAAAH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EAA+E,CAAA;AAAA,kBAC9FA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,mBAAA,EAAiB;AAAA,CAAA,EAC3D,GACF,CAAA,EANsB,iBAAA,CAAA;AA2BjB,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,uBACEA,cAAAA,CAACI,cAAAA,EAAA,EAAS,0BAAUJ,cAAAA,CAACQ,gBAAAA,EAAA,EAAgB,GACnC,QAAA,kBAAAR,cAAAA,CAAC,kBAAA,EAAA,EAAoB,GAAG,OAAO,CAAA,EACjC,CAAA;AAEJ;AANgBE,wBAAA,CAAA,YAAA,EAAA,cAAA,CAAA;ACtChB,IAAM,UAAA,GAAaK,UAAAA;AAAA,EAAK,MACtB,OAAO,2BAAyB,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,MAAS,EAAE,OAAA,EAAS,GAAA,CAAI,UAAA,EAAW,CAAE;AAC/E,CAAA;AAEA,IAAMC,gBAAAA,mBAAkBN,wBAAA,CAAA,sBACtBF,cAAAA,CAAC,SAAI,SAAA,EAAU,gDAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,2BAAA,EAAyB,GAClE,CAAA,EAHsB,iBAAA,CAAA;AAUjB,IAAM,UAAA,mBAAwCE,wBAAA,CAAA,CAAC,EAAE,MAAA,EAAO,KAAM;AACnE,EAAA,uBACEF,cAAAA,CAACM,oCAAA,EAAA,EAAmB,QAClB,QAAA,kBAAAN,cAAAA,CAACI,gBAAA,EAAS,QAAA,kBAAUJ,cAAAA,CAACQ,kBAAA,EAAgB,CAAA,EACnC,0BAAAR,cAAAA,CAAC,UAAA,EAAA,EAAW,GACd,CAAA,EACF,CAAA;AAEJ,CAAA,EARqD,YAAA,CAAA;AAYrD,IAAO,qBAAA,GAAQ;ACTf,IAAM,mBAAA,GAAsBO,UAAAA,CAAK,MAAM,OAAO,qCAAwB,CAAC,CAAA;AAKhE,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,uBACEP,cAAAA,CAACI,cAAAA,EAAA,EAAS,0BAAUJ,cAAAA,CAAC,qBAAA,EAAA,EAAsB,CAAA,EACzC,QAAA,kBAAAA,cAAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,OAAO,CAAA,EAClC,CAAA;AAEJ;AANgBE,wBAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAWhB,SAAS,qBAAA,GAAwB;AAC/B,EAAA,uBACEF,cAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAA;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,SAAA,EAAU;AAAA;AAAA,GACZ;AAEJ;AARSE,wBAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;;;ACET,IAAI,OAAA,GAAU,KAAA;AAEP,SAAS,mBAAmB,SAAA,EAA+B;AAChE,EAAA,IAAI,OAAA,IAAW,OAAO,MAAA,KAAW,WAAA,EAAa;AAE9C,EAAA,IAAI,SAAA,EAAW;AAEb,IAAC,KAAkD,iBAAA,GAAoB;AAAA,MACrE,2BAAWA,wBAAA,CAAA,CAAC,SAAA,EAAmB,KAAA,KAAkB,SAAA,CAAU,KAAK,CAAA,EAArD,WAAA;AAAA,KACb;AAAA,EACF;AAKA,EAAA,OAAA,GAAU,IAAA;AACZ;AAdgBA,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;;;AChBT,SAAS,SAAA,GAA6B;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIO,eAAqC,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,OAAA,GAAU,IAAA;AAEd,IAAA,eAAe,UAAA,GAAa;AAC1B,MAAA,IAAI;AAEF,QAAA,kBAAA,EAAmB;AAGnB,QAAA,MAAM,YAAA,GAAe,MAAM,OAAO,eAAe,CAAA;AAEjD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,SAAA,CAAU,YAAY,CAAA;AACtB,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,QAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAC/E,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAlBe,IAAAR,wBAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAoBf,IAAA,UAAA,EAAW;AAEX,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAM;AACpC;AApCgBA,wBAAA,CAAA,SAAA,EAAA,WAAA,CAAA;ACZT,SAAS,cAAA,CACd,QACA,aAAA,EACQ;AACR,EAAA,MAAM,WAAWS,sBAAA,EAAiB;AAClC,EAAA,MAAM,UAAA,GAAaC,aAAO,KAAK,CAAA;AAG/B,EAAAF,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,UAAA,CAAW,OAAA,EAAS;AAEnC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,MAAA,MAAA,CAAO,MAAA,CAAO,YAAY,UAAA,EAAY;AAAA,QACpC,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,EAAE,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,QAAA,EAAU,WAAW,QAAA,EAAS;AAAA,UAC9D,EAAE,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,QAAA,EAAS;AAAA,UACzC,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,UACxC,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,UACxC,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS;AAAA,UACtC,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,QAAA,EAAS;AAAA,UAC1C,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,QAAA;AAAS,SAC5C;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,qBAAqB,MAAA,CAAO,UAAA;AAAA,UAC5B,qBAAqB,MAAA,CAAO,UAAA;AAAA,UAC5B,kCAAkC,MAAA,CAAO,aAAA;AAAA,UACzC,8BAA8B,MAAA,CAAO,SAAA;AAAA,UACrC,2BAA2B,MAAA,CAAO,UAAA;AAAA,UAClC,+BAA+B,MAAA,CAAO,eAAA;AAAA,UACtC,2BAA2B,MAAA,CAAO,IAAA;AAAA,UAClC,uBAAuB,MAAA,CAAO,MAAA;AAAA,UAC9B,oBAAoB,MAAA,CAAO,IAAA;AAAA,UAC3B,uBAAuB,MAAA,CAAO;AAAA;AAChC,OACD,CAAA;AAED,MAAA,MAAA,CAAO,MAAA,CAAO,YAAY,WAAA,EAAa;AAAA,QACrC,IAAA,EAAM,IAAA;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,EAAE,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,QAAA,EAAU,WAAW,QAAA,EAAS;AAAA,UAC9D,EAAE,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,QAAA,EAAS;AAAA,UACzC,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,UACxC,EAAE,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,UACxC,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS;AAAA,UACtC,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,QAAA,EAAS;AAAA,UAC1C,EAAE,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,QAAA;AAAS,SAC5C;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,qBAAqB,MAAA,CAAO,eAAA;AAAA,UAC5B,qBAAqB,MAAA,CAAO,eAAA;AAAA,UAC5B,kCAAkC,MAAA,CAAO,kBAAA;AAAA,UACzC,8BAA8B,MAAA,CAAO,cAAA;AAAA,UACrC,+BAA+B,MAAA,CAAO,oBAAA;AAAA,UACtC,2BAA2B,MAAA,CAAO,SAAA;AAAA,UAClC,uBAAuB,MAAA,CAAO;AAAA;AAChC,OACD,CAAA;AAED,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,IAAI,eAAe,OAAO,aAAA;AAG1B,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,OAAO,QAAA,KAAa,SAAS,UAAA,GAAa,WAAA;AAAA,EAC5C;AACA,EAAA,OAAO,QAAA,KAAa,SAAS,SAAA,GAAY,IAAA;AAC3C;AA7EgBR,wBAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAiFhB,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,GAAA,6CAAO,OAAA,KAA4B;AACvC,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,EAAA;AAC5C,IAAA,OAAO,iBAAiB,QAAA,CAAS,eAAe,EAAE,gBAAA,CAAiB,OAAO,EAAE,IAAA,EAAK;AAAA,EACnF,CAAA,EAHY,KAAA,CAAA;AAKZ,EAAA,MAAM,QAAA,6CAAY,GAAA,KAAwB;AACxC,IAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AAEjB,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,KAAK,EAAE,GAAA,CAAI,CAAAW,EAAAA,KAAK,UAAA,CAAWA,EAAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAC,CAAC,CAAA;AACtE,IAAA,IAAI,MAAM,MAAA,GAAS,CAAA,IAAK,MAAM,IAAA,CAAK,KAAK,GAAG,OAAO,EAAA;AAClD,IAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA,EAAK,KAAA,CAAM,CAAC,IAAI,GAAG,CAAA;AAE3D,IAAA,MAAM,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAC/B,IAAA,MAAM,CAAA,6CAAK,CAAA,KAAc;AACvB,MAAA,MAAM,CAAA,GAAA,CAAK,CAAA,GAAI,CAAA,GAAI,EAAA,IAAM,EAAA;AACzB,MAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AAC5D,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,KAAK,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAAA,IAC7D,CAAA,EAJU,GAAA,CAAA;AAKV,IAAA,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAAA,EAC/B,CAAA,EAdiB,UAAA,CAAA;AAiBjB,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,cAAc,CAAC,CAAA,IAAK,SAAA;AACpD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,cAAc,CAAC,CAAA,IAAK,SAAA;AACpD,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAC,CAAA,IAAK,SAAA;AACxC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,UAAU,CAAC,CAAA,IAAK,SAAA;AAC5C,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,GAAA,CAAI,oBAAoB,CAAC,CAAA,IAAK,SAAA;AAG/D,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,UAAA,EAAY,EAAE,CAAA;AACtD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,WAAW,CAAC,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,iBAAA,CAAkB,OAAA,EAAS,GAAG,CAAA,GAAI,SAAA;AAG9D,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA;AAAA,IAEA,eAAA,EAAiB,SAAA;AAAA,IACjB,eAAA,EAAiB,SAAA;AAAA,IACjB,SAAA,EAAW,SAAA;AAAA,IACX,WAAA,EAAa,SAAA;AAAA,IACb,oBAAA,EAAsB,SAAA;AAAA,IACtB,kBAAA,EAAoB,SAAA;AAAA,IACpB,cAAA,EAAgB;AAAA,GAClB;AACF;AApDSX,wBAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAsDT,SAAS,iBAAA,CAAkB,KAAa,MAAA,EAAwB;AAC9D,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA,CAAI,QAAQ,GAAA,EAAK,EAAE,GAAG,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAK,GAAA,IAAO,EAAA,GAAM,GAAA,IAAQ,MAAM,CAAC,CAAA;AAClE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAK,GAAA,IAAO,CAAA,GAAK,GAAA,IAAQ,MAAM,CAAC,CAAA;AACjE,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,GAAA,GAAM,GAAA,IAAQ,MAAM,CAAC,CAAA;AAC1D,EAAA,OAAO,CAAA,CAAA,EAAA,CAAM,CAAA,IAAK,EAAA,GAAO,CAAA,IAAK,CAAA,GAAK,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACrE;AANSA,wBAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;ACnHF,IAAM,MAAA,GAASY,gBAAA,iBAAmCZ,wBAAA,CAAA,SAASa,OAAAA,CAChE;AAAA,EACE,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA,GAAW,WAAA;AAAA,EACX,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,MAAA,GAAS,MAAA;AAAA,EACT,KAAA,GAAQ,MAAA;AAAA,EACR,UAAA,GAAa,KAAA;AAAA,EACb,SAAA,GAAY,GAAA;AAAA,EACZ,SAAA,GAAY;AACd,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAeH,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYA,aAAmD,IAAI,CAAA;AACzE,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,SAAA,EAAU;AACxC,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,MAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA;AAG1D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIH,eAAwB,IAAI,CAAA;AAEtE,EAAA,MAAM,mBAAA,GAAsBO,iBAAAA,CAAY,CAAC,MAAA,KAAgD;AACvF,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,MAAM,CAAA,GAAI,OAAO,gBAAA,EAAiB;AAClC,IAAA,gBAAA,CAAiB,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,SAAS,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,EAC9D,CAAA,EAAG,CAAC,UAAA,EAAY,SAAA,EAAW,SAAS,CAAC,CAAA;AAGrC,EAAA,MAAM,mBAAA,GAAsBJ,aAAO,KAAK,CAAA;AAGxC,EAAAK,yBAAA,CAAoB,KAAK,OAAO;AAAA,IAC9B,SAAA,kBAAWf,wBAAA,CAAA,MAAM,SAAA,CAAU,OAAA,EAAhB,WAAA,CAAA;AAAA,IACX,0BAAUA,wBAAA,CAAA,MAAM,SAAA,CAAU,OAAA,EAAS,QAAA,MAAc,EAAA,EAAvC,UAAA,CAAA;AAAA,IACV,0BAAUA,wBAAA,CAAA,CAAC,GAAA,KAAgB,UAAU,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAAhD,UAAA,CAAA;AAAA,IACV,KAAA,kBAAOA,wBAAA,CAAA,MAAM,SAAA,CAAU,OAAA,EAAS,OAAM,EAA/B,OAAA;AAAA,GACT,CAAE,CAAA;AAGF,EAAAQ,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,CAAa,OAAA,IAAW,UAAU,OAAA,EAAS;AAE3D,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,aAAa,OAAA,EAAS;AAAA,MACxD,KAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,MAC9B,UAAA,EAAY,QAAQ,UAAA,IAAc,oCAAA;AAAA,MAClC,OAAA,EAAS,QAAQ,OAAA,IAAW,CAAA;AAAA,MAC5B,YAAA,EAAc,QAAQ,YAAA,KAAiB,KAAA;AAAA,MACvC,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,MAC9B,OAAA,EAAS,EAAE,OAAA,EAAS,OAAA,CAAQ,YAAY,KAAA,EAAM;AAAA,MAC9C,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA;AAAA,MACpC,QAAA,EAAU,QAAQ,QAAA,IAAY,KAAA;AAAA,MAC9B,eAAA,EAAiB,IAAA;AAAA,MACjB,oBAAA,EAAsB,aAAa,KAAA,GAAQ,KAAA;AAAA,MAC3C,WAAW,UAAA,GAAa,EAAE,UAAU,QAAA,EAAU,UAAA,EAAY,QAAO,GAAI,MAAA;AAAA,MACrE,kBAAA,EAAoB,aAAa,CAAA,GAAI,MAAA;AAAA,MACrC,OAAA,EAAS,EAAE,GAAA,EAAK,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,MAC/B,mBAAA,EAAqB,KAAA;AAAA,MACrB,cAAA,EAAgB,QAAA;AAAA,MAChB,0BAAA,EAA4B,IAAA;AAAA,MAC5B,eAAA,EAAiB,IAAA;AAAA,MACjB,uBAAA,EAAyB,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,MACzC,MAAA,EAAQ;AAAA,QACN,YAAA,EAAc,IAAA;AAAA,QACd,WAAA,EAAa;AAAA;AACf,KACD,CAAA;AAED,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAGpB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAA,CAAO,wBAAwB,MAAM;AAEnC,QAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAC9B,QAAA,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA;AAAA,MAC5B,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,sBAAA,CAAuB,MAAM,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAC/D,MAAA,mBAAA,CAAoB,MAAM,CAAA;AAAA,IAC5B;AAGA,IAAA,OAAA,GAAU,MAAM,CAAA;AAEhB,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,OAAA,EAAQ;AACf,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,MAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,OAAO,QAAA,EAAS;AACrC,IAAA,IAAI,UAAU,YAAA,EAAc;AAE1B,MAAA,MAAM,QAAA,GAAW,OAAO,WAAA,EAAY;AACpC,MAAA,MAAM,UAAA,GAAa,OAAO,aAAA,EAAc;AAExC,MAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AAGrB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAA,CAAO,YAAY,QAAQ,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,QAAA,MAAA,CAAO,cAAc,UAAU,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ;AAExB,IAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,KAAA,EAAO,QAAQ,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAGrB,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAA,CAAO,aAAA,CAAc;AAAA,MACnB,KAAA,EAAO,aAAA;AAAA,MACP,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,OAAA,EAAS,EAAE,OAAA,EAAS,OAAA,CAAQ,YAAY,KAAA,EAAM;AAAA,MAC9C,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,aAAa,OAAA,CAAQ;AAAA,KACtB,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAA,EAAS,aAAa,CAAC,CAAA;AAE3B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEV,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA;AAAA,UACA,MAAA;AAAA,UACA,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO;AAAA,SACT;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,MAAM,cAAA,GAAiB,UAAA,IAAc,aAAA,IAAiB,IAAA,GAAO,aAAA,GAAgB,MAAA;AAE7E,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA;AAAA,QACA,MAAA,EAAQ,cAAA;AAAA,QACR,GAAI,UAAA,IAAc,EAAE,SAAA,EAAsB,SAAA,EAAsB,UAAU,QAAA;AAAS;AACrF;AAAA,GACF;AAEJ,CAAA,EA1LyD,QAAA,CA0LxD;ACtMM,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW,WAAA;AAAA,EACX,UAAU,EAAC;AAAA,EACX,SAAA,GAAY,EAAA;AAAA,EACZ,MAAA,GAAS;AACX,CAAA,EAAoB;AAClB,EAAA,MAAM,YAAA,GAAeY,aAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYA,aAAmD,IAAI,CAAA;AACzE,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,SAAA,EAAU;AACxC,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,MAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA;AAG1D,EAAAF,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,CAAa,OAAA,IAAW,UAAU,OAAA,EAAS;AAE3D,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,aAAa,OAAA,EAAS;AAAA,MAClE,KAAA,EAAO,aAAA;AAAA,MACP,QAAA,EAAU,QAAQ,QAAA,IAAY,EAAA;AAAA,MAC9B,UAAA,EAAY,QAAQ,UAAA,IAAc,oCAAA;AAAA,MAClC,QAAA,EAAU,IAAA;AAAA,MACV,eAAA,EAAiB,IAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,oBAAA,EAAsB,KAAA;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,KAAA;AAAM,KAC3B,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,UAAU,QAAQ,CAAA;AAClE,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,UAAU,QAAQ,CAAA;AAElE,IAAA,MAAA,CAAO,QAAA,CAAS;AAAA,MACd,QAAA,EAAU,aAAA;AAAA,MACV,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,IAAA,OAAO,MAAM;AACX,MAAA,aAAA,CAAc,OAAA,EAAQ;AACtB,MAAA,aAAA,CAAc,OAAA,EAAQ;AACtB,MAAA,MAAA,CAAO,OAAA,EAAQ;AACf,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ;AAExB,IAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,QAAA,CAAS,SAAS,QAAQ,CAAA;AAChC,MAAA,KAAA,CAAM,QAAA,CAAS,SAAS,QAAQ,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,QAAA,EAAU,MAAM,CAAC,CAAA;AAG/B,EAAAA,gBAAU,MAAM;AACd,IAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AACzB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,EAAQ;AAExB,IAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA;AACvD,MAAA,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAA;AAAA,IACzD;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEV,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,MAAA;AAAA,UACP,MAAA;AAAA,UACA,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,eAAA,EAAiB,SAAA;AAAA,UACjB,KAAA,EAAO;AAAA,SACT;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,YAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,MAAA;AAAA,QACP;AAAA;AACF;AAAA,GACF;AAEJ;AAnGgBE,wBAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACbT,IAAM,YAAA,GAAuC;AAAA;AAAA,EAElD,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,QAAA,EAAU,MAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,SAAA,EAAW,MAAA;AAAA;AAAA,EAGX,MAAA,EAAQ,KAAA;AAAA,EACR,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS,MAAA;AAAA;AAAA,EAGT,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,YAAA;AAAA,EACR,MAAA,EAAQ,YAAA;AAAA,EACR,MAAA,EAAQ,YAAA;AAAA,EACR,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,YAAA;AAAA,EACR,MAAA,EAAQ,YAAA;AAAA,EACR,MAAA,EAAQ,YAAA;AAAA;AAAA,EAGR,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA;AAAA,EAGR,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,WAAA,EAAa,UAAA;AAAA,EACb,MAAA,EAAQ,kBAAA;AAAA,EACR,MAAA,EAAQ,WAAA;AAAA,EACR,OAAA,EAAS,WAAA;AAAA;AAAA,EAGT,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,MAAA;AAAA,EACP,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,MAAA;AAAA,EACZ,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,QAAA,EAAU,OAAA;AAAA,EACV,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,KAAA,EAAO,KAAA;AAAA,EACP,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,GAAA;AAAA,EACN,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,MAAA;AAAA,EACT,SAAA,EAAW,QAAA;AAAA,EACX,SAAA,EAAW,QAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA;AAAA,EAGP,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,OAAA;AAAA,EACR,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,YAAA;AAAA,EACR,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA;AAAA,EAGR,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,OAAA,EAAS,KAAA;AAAA,EACT,aAAA,EAAe,KAAA;AAAA,EACf,MAAA,EAAQ,KAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,gBAAA,EAAkB,KAAA;AAAA,EAClB,eAAA,EAAiB,KAAA;AAAA,EACjB,QAAA,EAAU,KAAA;AAAA;AAAA,EAGV,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU,OAAA;AAAA,EACV,QAAA,EAAU,OAAA;AAAA,EACV,QAAA,EAAU,OAAA;AAAA,EACV,QAAA,EAAU,OAAA;AAAA;AAAA,EAGV,MAAA,EAAQ,YAAA;AAAA,EACR,aAAA,EAAe,YAAA;AAAA,EACf,WAAA,EAAa,YAAA;AAAA,EACb,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,OAAA,EAAS,KAAA;AAAA,EACT,OAAA,EAAS,MAAA;AAAA,EACT,SAAA,EAAW,QAAA;AAAA;AAAA,EAGX,UAAA,EAAY,SAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA;AAAA,EAGR,aAAA,EAAe,YAAA;AAAA;AAAA,EAGf,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,OAAA;AAAA,EACR,MAAA,EAAQ,OAAA;AAAA,EACR,MAAA,EAAQ,OAAA;AAAA,EACR,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAKA,IAAM,YAAA,GAAuC;AAAA,EAC3C,UAAA,EAAY,YAAA;AAAA,EACZ,oBAAA,EAAsB,MAAA;AAAA,EACtB,qBAAA,EAAuB,MAAA;AAAA,EACvB,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,WAAA,EAAa,QAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,SAAA,EAAW,OAAA;AAAA,EACX,eAAA,EAAiB,OAAA;AAAA,EACjB,QAAA,EAAU,OAAA;AAAA,EACV,UAAA,EAAY,OAAA;AAAA,EACZ,QAAA,EAAU,WAAA;AAAA,EACV,YAAA,EAAc,KAAA;AAAA,EACd,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,KAAA;AAAA,EACd,cAAA,EAAgB,MAAA;AAAA,EAChB,eAAA,EAAiB,MAAA;AAAA,EACjB,eAAA,EAAiB,MAAA;AAAA,EACjB,aAAA,EAAe,MAAA;AAAA,EACf,WAAA,EAAa,MAAA;AAAA,EACb,eAAA,EAAiB,MAAA;AAAA,EACjB,YAAA,EAAc,KAAA;AAAA,EACd,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,WAAA;AAAA,EACV,kBAAA,EAAoB,WAAA;AAAA,EACpB,gBAAA,EAAkB,KAAA;AAAA,EAClB,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa;AACf,CAAA;AAcO,SAAS,sBAAsB,QAAA,EAA0B;AAE9D,EAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,EAAG;AAC1B,IAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,EAC9B;AAGA,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,CAAM,OAAO,EAAE,WAAA,EAAY;AACtD,EAAA,OAAO,YAAA,CAAa,SAAS,CAAA,IAAK,WAAA;AACpC;AAdgBA,wBAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AC3MhB,IAAM,aAAA,GAAgBgB,oBAAyC,IAAI,CAAA;AAM5D,SAAS,gBAAA,GAAuC;AACrD,EAAA,MAAM,OAAA,GAAUC,iBAAW,aAAa,CAAA;AACxC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAA;AACT;AANgBjB,wBAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA2BT,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,MAAA,EAAO,EAAwB;AACxE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIO,eAAqD,IAAI,CAAA;AACrF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAAA,CAAuB,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAGxE,EAAA,MAAM,UAAA,GAAaW,aAAA;AAAA,IACjB,MAAM,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,IAAK,IAAA;AAAA,IAC1D,CAAC,WAAW,cAAc;AAAA,GAC5B;AAGA,EAAA,MAAM,QAAA,GAAWJ,iBAAAA;AAAA,IACf,CAAC,IAAA,EAAc,OAAA,EAAiB,QAAA,KAAsB;AACpD,MAAA,YAAA,CAAa,CAAC,KAAA,KAAU;AAEtB,QAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAClD,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,OAAO,KAAA;AAAA,QACT;AAGA,QAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,IAAA;AAC1C,QAAA,MAAM,gBAAA,GAAmB,QAAA,IAAY,qBAAA,CAAsB,QAAQ,CAAA;AAGnE,QAAA,MAAM,OAAA,GAAsB;AAAA,UAC1B,IAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA,EAAU,gBAAA;AAAA,UACV,OAAA,EAAS;AAAA,SACX;AAEA,QAAA,OAAO,CAAC,GAAG,KAAA,EAAO,OAAO,CAAA;AAAA,MAC3B,CAAC,CAAA;AAGD,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB,CAAA;AAAA,IACA;AAAC,GACH;AAGA,EAAA,MAAM,SAAA,GAAYA,iBAAAA;AAAA,IAChB,CAAC,IAAA,KAAiB;AAChB,MAAA,YAAA,CAAa,CAAC,KAAA,KAAU;AACtB,QAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AACpD,QAAA,IAAI,KAAA,KAAU,IAAI,OAAO,KAAA;AAEzB,QAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAGpD,QAAA,IAAI,cAAA,KAAmB,IAAA,IAAQ,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAClD,UAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AACpD,UAAA,iBAAA,CAAkB,QAAA,CAAS,QAAQ,CAAA,CAAE,IAAI,CAAA;AAAA,QAC3C,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAChC,UAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACxB;AAEA,QAAA,OAAO,QAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACjB;AAGA,EAAA,MAAM,aAAA,GAAgBA,iBAAAA,CAAY,CAAC,IAAA,KAAiB;AAClD,IAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,aAAA,GAAgBA,iBAAAA,CAAY,CAAC,IAAA,EAAc,OAAA,KAAoB;AACnE,IAAA,YAAA;AAAA,MAAa,CAAC,UACZ,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,CAAA,KACT,CAAA,CAAE,IAAA,KAAS,IAAA,GACP,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,OAAA,EAAS,IAAA,EAAK,GAC/B;AAAA;AACN,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,QAAA,GAAWA,iBAAAA;AAAA,IACf,OAAO,IAAA,KAAiB;AACtB,MAAA,MAAM,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAClD,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAAA,MACjC;AAGA,MAAA,YAAA;AAAA,QAAa,CAAC,UACZ,KAAA,CAAM,GAAA;AAAA,UAAI,CAAC,CAAA,KACT,CAAA,CAAE,IAAA,KAAS,IAAA,GAAO,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,KAAA,EAAM,GAAI;AAAA;AAC/C,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAW,MAAM;AAAA,GACpB;AAGA,EAAA,MAAM,OAAA,GAAUA,iBAAAA;AAAA,IACd,CAAC,IAAA,KAAiB;AAChB,MAAA,MAAM,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAClD,MAAA,OAAO,MAAM,OAAA,IAAW,KAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAGA,EAAA,MAAM,UAAA,GAAaA,iBAAAA;AAAA,IACjB,CAAC,IAAA,KAAiB;AAChB,MAAA,MAAM,OAAO,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAClD,MAAA,OAAO,MAAM,OAAA,IAAW,IAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAGA,EAAA,MAAM,OAAA,GAAUA,iBAAAA;AAAA,IACd,CAAC,IAAA,KAAiB;AAChB,MAAA,OAAO,UAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,IAAK,IAAA;AAAA,IACnD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,IAAA;AAAA,IAEvC,QAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IAEA,OAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEhB,cAAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,OACrB,QAAA,EACH,CAAA;AAEJ;AAvJgBE,wBAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;ACnBT,SAAS,SAAA,GAA6B;AAC3C,EAAA,MAAM,CAAC,MAAA,EAAQ,cAAc,CAAA,GAAIO,eAAqD,IAAI,CAAA;AAE1F,EAAA,MAAM,SAAA,GAAYO,iBAAAA,CAAY,CAAC,cAAA,KAA+D;AAC5F,IAAA,cAAA,CAAe,cAAc,CAAA;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAS,MAAA,KAAW,IAAA;AAAA,IACpB;AAAA,GACF;AACF;AAZgBd,wBAAA,CAAA,SAAA,EAAA,WAAA,CAAA;ACHT,SAAS,YAAY,QAAA,EAAsC;AAChE,EAAA,OAAOkB,cAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,UAAU,OAAO,WAAA;AAGtB,IAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,QAAA;AAC9C,IAAA,OAAO,sBAAsB,QAAQ,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AACf;AARgBlB,wBAAA,CAAA,WAAA,EAAA,aAAA,CAAA;ACNT,IAAM,WAAA,GAAcY,gBAAAA;AAAA,EACzB,CAAC,EAAE,KAAA,EAAO,OAAA,IAAW,GAAA,KAAQ;AAC3B,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIL,eAAS,CAAC,CAAA;AAEpD,IAAAC,gBAAU,MAAM,gBAAA,CAAiB,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAE5C,IAAA,MAAM,MAAA,GAASM,iBAAAA;AAAA,MACb,CAAC,KAAA,KAAkB;AACjB,QAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,QAAA,IAAI,IAAA,UAAc,IAAI,CAAA;AAAA,MACxB,CAAA;AAAA,MACA,CAAC,OAAO,OAAO;AAAA,KACjB;AAEA,IAAAC,yBAAAA,CAAoB,KAAK,OAAO;AAAA,MAC9B,SAAA,4CAAY,KAAA,KAAyB;AACnC,QAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,EAAW;AAC3B,UAAA,gBAAA,CAAiB,CAAC,CAAA,KAAA,CAAO,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,IAAK,MAAM,MAAM,CAAA;AAC7D,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,UAAA,gBAAA,CAAiB,CAAC,CAAA,KAAA,CAAO,CAAA,GAAI,CAAA,IAAK,MAAM,MAAM,CAAA;AAC9C,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,UAAA,MAAA,CAAO,aAAa,CAAA;AACpB,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA,EAdW,WAAA;AAAA,KAeb,CAAE,CAAA;AAEF,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,IAAA,uBACEjB,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,MAAA,MAAM,aAAa,CAAA,KAAM,aAAA;AACzB,MAAA,MAAM,GAAA,GAAM,CAAA,sBAAA,EAAyB,UAAA,GAAa,UAAA,GAAa,EAAE,CAAA,CAAA;AACjE,MAAA,uBACEG,eAAAA,CAAC,QAAA,EAAA,EAAqB,IAAA,EAAK,QAAA,EAAS,SAAA,EAAW,GAAA,EAAK,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,CAAA,EACxE,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,SAAA,oBACJH,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAK,SAAA,EAAW,GAAA,EAAI,EAAA,EAAG,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,wBAEvEG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,eAAK,KAAA,EAAM,CAAA;AAAA,UACnD,IAAA,CAAK,+BACJA,cAAAA,CAAC,UAAK,SAAA,EAAU,uBAAA,EAAyB,eAAK,WAAA,EAAY;AAAA,SAAA,EAE9D;AAAA,OAAA,EAAA,EATW,KAAK,EAUlB,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;AClEnB,SAAS,wBACd,MAAA,EACgD;AAChD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,OAAA,GAAU,KAAI,GAAI,MAAA;AAExC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IAEN,KAAA,kBAAOE,wBAAA,CAAA,CAAC,EAAE,KAAA,EAAM,KAAM;AACpB,MAAA,MAAM,CAAA,GAAI,MAAM,WAAA,EAAY;AAC5B,MAAA,OAAO,MAAA,CAAO,KAAA,CACX,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY,CAAE,SAAS,CAAC,CAAC,CAAA,CACrD,KAAA,CAAM,GAAG,QAAQ,CAAA;AAAA,IACtB,CAAA,EALO,OAAA,CAAA;AAAA,IAOP,wBAAQA,wBAAA,CAAA,MAAM;AACZ,MAAA,IAAI,SAAA,GAAkD,IAAA;AACtD,MAAA,IAAI,KAAA,GAA+B,IAAA;AACnC,MAAA,IAAI,iBAAA,GAAyC,IAAA;AAC7C,MAAA,IAAI,gBAAA,GAAkD,IAAA;AAItD,MAAA,MAAM,sCAAsBA,wBAAA,CAAA,OAAO;AAAA,QACjC,uCAAuBA,wBAAA,CAAA,MAAM;AAC3B,UAAA,MAAM,OAAO,gBAAA,IAAmB;AAGhC,UAAA,OAAO,QAAQ,IAAI,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,QACvC,CAAA,EALuB,uBAAA;AAAA,OAMzB,CAAA,EAP4B,qBAAA,CAAA;AAS5B,MAAA,MAAM,iCAAiBA,wBAAA,CAAA,MAAM;AAC3B,QAAA,IAAI,CAAC,KAAA,EAAO;AACZ,QAAA,MAAM,YAAY,mBAAA,EAAoB;AACtC,QAAA,KAAKmB,mBAAA,CAAgB,WAAW,KAAA,EAAO;AAAA,UACrC,SAAA,EAAW,cAAA;AAAA,UACX,UAAA,EAAY;AAAA,YACVC,WAAO,CAAC,CAAA;AAAA,YACRC,SAAK,EAAE,kBAAA,EAAoB,CAAC,WAAW,GAAG,CAAA;AAAA,YAC1CC,SAAA,CAAM,EAAE,OAAA,EAAS,CAAA,EAAG;AAAA;AACtB,SACD,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,CAAA,EAAG,GAAE,KAAM;AACpB,UAAA,IAAI,CAAC,KAAA,EAAO;AAGZ,UAAA,KAAA,CAAM,KAAA,CAAM,SAAA,GAAY,CAAA,YAAA,EAAe,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,MAAA,CAAA;AAAA,QAC1E,CAAC,CAAA;AAAA,MACH,CAAA,EAhBuB,gBAAA,CAAA;AAkBvB,MAAA,MAAM,2BAAWtB,wBAAA,CAAA,MAAM;AACrB,QAAA,iBAAA,IAAoB;AACpB,QAAA,iBAAA,GAAoB,IAAA;AACpB,QAAA,KAAA,EAAO,MAAA,EAAO;AACd,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,SAAA,EAAW,OAAA,EAAQ;AACnB,QAAA,SAAA,GAAY,IAAA;AACZ,QAAA,gBAAA,GAAmB,IAAA;AAAA,MACrB,CAAA,EARiB,UAAA,CAAA;AAUjB,MAAA,OAAO;AAAA,QACL,OAAA,4CAAU,KAAA,KAAU;AAClB,UAAA,SAAA,GAAY,IAAIuB,oBAAc,WAAA,EAAa;AAAA,YACzC,KAAA,EAAO;AAAA,cACL,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,OAAA,4CAAU,IAAA,KAAsB;AAC9B,gBAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,EAAA,EAAI,IAAA,CAAK,IAAI,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,cAClD,CAAA,EAFS,SAAA;AAAA,aAGX;AAAA,YACA,QAAQ,KAAA,CAAM;AAAA,WACf,CAAA;AAED,UAAA,KAAA,GAAQ,QAAA,CAAS,cAAc,KAAK,CAAA;AAEpC,UAAA,KAAA,CAAM,MAAM,OAAA,GAAU,sDAAA;AACtB,UAAA,KAAA,CAAM,WAAA,CAAY,UAAU,OAAO,CAAA;AACnC,UAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAE/B,UAAA,gBAAA,mBAAmBvB,wBAAA,CAAA,MAAM,KAAA,CAAM,UAAA,IAAa,IAAK,IAAA,EAA9B,kBAAA,CAAA;AAInB,UAAA,MAAM,YAAY,mBAAA,EAAoB;AACtC,UAAA,iBAAA,GAAoBwB,cAAA,CAAW,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAAA,QACjE,CAAA,EAvBS,SAAA,CAAA;AAAA,QAyBT,QAAA,4CAAW,KAAA,KAAU;AACnB,UAAA,SAAA,EAAW,WAAA,CAAY;AAAA,YACrB,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,OAAA,4CAAU,IAAA,KAAsB;AAC9B,cAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,EAAA,EAAI,IAAA,CAAK,IAAI,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,YAClD,CAAA,EAFS,SAAA;AAAA,WAGV,CAAA;AAGD,UAAA,gBAAA,mBAAmBxB,wBAAA,CAAA,MAAM,KAAA,CAAM,UAAA,IAAa,IAAK,IAAA,EAA9B,kBAAA,CAAA;AACnB,UAAA,cAAA,EAAe;AAAA,QACjB,CAAA,EAXU,UAAA,CAAA;AAAA,QAaV,SAAA,4CAAY,KAAA,KAAU;AACpB,UAAA,IAAI,KAAA,CAAM,KAAA,CAAM,GAAA,KAAQ,QAAA,EAAU;AAChC,YAAA,QAAA,EAAS;AACT,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,SAAA,EAAW,GAAA,EAAK,SAAA,CAAU,KAAA,CAAM,KAAuC,CAAA,IAAK,KAAA;AAAA,QACrF,CAAA,EANW,WAAA,CAAA;AAAA,QAQX,wBAAQA,wBAAA,CAAA,MAAM;AACZ,UAAA,QAAA,EAAS;AAAA,QACX,CAAA,EAFQ,QAAA;AAAA,OAGV;AAAA,IACF,CAAA,EAhGQ,QAAA;AAAA,GAiGV;AACF;AAjHgBA,wBAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;;;ACChB,IAAM,2BAAWA,wBAAA,CAAA,CAAC,CAAA,KAAsB,EAAE,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA,EAA5D,UAAA,CAAA;AAgBV,IAAM,cAAA,GAAiB;AAAA;AAAA,EAE5B,OAAA,6CAAW,EAAE,KAAA,EAAO,IAAG,KAAM,CAAA,CAAA,EAAI,KAAA,IAAS,EAAE,CAAA,CAAA,GAAlC,SAAA,CAAA;AAAA;AAAA,EAGV,4BAAaA,wBAAA,EAAA,CAAC,EAAE,OAAO,EAAA,EAAG,KAAM,SAAS,EAAA,GAA5B,YAAA,CAAA;AAAA;AAAA,EAGb,8BAAcA,wBAAA,CAAA,CAAC,OAAA,KACb,CAAC,EAAE,KAAA,EAAO,IAAG,KACX,CAAA,EAAA,EAAK,SAAS,KAAA,IAAS,EAAE,CAAC,CAAA,EAAA,EAAK,OAAO,GAAG,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,CAAA,EAFrD,cAAA,CAAA;AAAA;AAAA,EAKd,SAAA,4CAAY,MAAA,EAAgB,IAAA,KAC1B,CAAC,EAAE,KAAA,EAAO,EAAA,EAAG,KACX,CAAA,EAAA,EAAK,QAAA,CAAS,SAAS,EAAE,CAAC,KAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA,CAAA,EAFlE,WAAA,CAAA;AAAA;AAAA,EAKX,4BAAaA,wBAAA,EAAA,CAAC,EAAE,IAAG,KAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA,CAAA,GAAnB,YAAA,CAAA;AAAA;AAAA,EAGb,QAAA,4CACG,SAAA,GAAY,SAAA,KACb,CAAC,EAAE,KAAA,EAAO,IAAG,KACX,CAAA,aAAA,EAAgB,SAAS,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,EAAE,CAAC,CAAA,GAAA,EAAM,SAAS,KAAA,IAAS,EAAE,CAAC,CAAA,OAAA,CAAA,EAFlG,UAAA;AAGJ;ACxBA,SAAS,YAAY,MAAA,EAAwB;AAC3C,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,QAAA;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,OAAO,OAAA,EAAQ;AAC7C,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA;AACnD;AAJSA,wBAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAMT,SAAS,kBAAkB,MAAA,EAA0B;AACnD,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AACrC,IAAA,IAAI,KAAK,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,IAAA,CAAK,MAAM,EAAA,EAAI;AACjD,MAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,EAAY,CAAA;AAAA,IAClC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,GAAG,CAAC,CAAA;AACzB;AARSA,wBAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AA4CF,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,mBAAA;AAAA,EACd,SAAA,GAAY,GAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,QAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,gBAAA,GAAmBU,aAAO,KAAK,CAAA;AAQrC,EAAA,MAAM,yBAAA,GAA4BA,YAAAA,CAAgB,QAAA,KAAa,MAAS,CAAA;AACxE,EAAA,MAAM,SAAA,GAAYA,aAAO,KAAK,CAAA;AAC9B,EAAA,IACE,OAAA,CAAA,GAAA,CAAA,QAAA,KAAyB,gBACzB,CAAC,yBAAA,CAA0B,WAC3B,QAAA,KAAa,MAAA,IACb,CAAC,SAAA,CAAU,OAAA,EACX;AACA,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAEpB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KAKF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAaQ,cAAQ,MAAM;AAC/B,IAAA,MAAM,IAAA,GAAuB;AAAA,MAC3BO,2BAAA,CAAW,SAAA,CAAU,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAE,EAAG,CAAA;AAAA,MACvDC,4BAAA,CAAY,SAAA,CAAU,EAAE,WAAA,EAAa,CAAA;AAAA,MACrCC;AAAA,KACF;AAEA,IAAA,IAAI,QAAA,EAAU;AA8BZ,MAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,cAAA,IAAkB,cAAA,CAAe,OAAA;AACjE,MAAA,IAAA,CAAK,IAAA;AAAA,QACHC,yBAAQ,MAAA,CAAO;AAAA,UACb,eAAe,IAAA,EAAM;AACnB,YAAA,MAAM,MAAM,IAAA,CAAK,KAAA;AACjB,YAAA,MAAM,KAAA,GAAsB;AAAA,cAC1B,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,cACf,KAAA,EAAO,KAAK,KAAA,IAAS;AAAA,aACvB;AAIA,YAAA,IAAI,CAAC,KAAA,CAAM,EAAA,IAAM,CAAC,KAAA,CAAM,OAAO,OAAO,EAAA;AACtC,YAAA,OAAO,eAAe,KAAK,CAAA;AAAA,UAC7B;AAAA,SACD,EAAE,SAAA,CAAU;AAAA,UACX,cAAA,EAAgB,EAAE,KAAA,EAAO,kBAAA,EAAmB;AAAA,UAC5C,UAAA,EAAY,wBAAwB,QAAQ,CAAA;AAAA,UAC5C,UAAA,4CAAa,EAAE,IAAA,OAAW,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAA,EAAlC,YAAA;AAAA,SACb;AAAA,OACH;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,WAAA,EAAa,QAAQ,CAAC,CAAA;AAE1B,EAAA,MAAM,SAASC,eAAAA,CAAU;AAAA,IACvB,iBAAA,EAAmB,KAAA;AAAA,IACnB,UAAU,CAAC,QAAA;AAAA,IACX,UAAA;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,IACT,QAAA,kBAAU7B,wBAAA,CAAA,CAAC,EAAE,MAAA,EAAA8B,SAAO,KAAM;AACxB,MAAA,IAAI,iBAAiB,OAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,WAAA,CAAYA,OAAM,CAAC,CAAA;AAE5B,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,kBAAA,CAAmB,iBAAA,CAAkBA,OAAM,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF,CAAA,EAPU,UAAA,CAAA;AAAA,IAQV,WAAA,EAAa;AAAA,MACX,UAAA,EAAY;AAAA,QACV,KAAA,EAAO,oDAAA;AAAA,QACP,KAAA,EAAO,eAAe,SAAS,CAAA,EAAA;AAAA;AACjC;AACF,GACD,CAAA;AAED,EAAAtB,gBAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,OAAA,GAAU,YAAY,MAAM,CAAA;AAClC,IAAA,IAAI,YAAY,KAAA,EAAO;AACrB,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,MAAA,MAAA,CAAO,QAAA,CAAS,WAAW,KAAK,CAAA;AAChC,MAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,YAAA,GAAe,gEAAgE,QAAA,GAAW,YAAA,GAAe,EAAE,CAAA,CAAA,EAAI,SAAS,GAAG,IAAA,EAAK;AAEtI,EAAA,uBACEP,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EACb,QAAA,EAAA;AAAA,IAAA,WAAA,IAAe,MAAA,oBAAUH,cAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAgB,CAAA;AAAA,oBAC3DA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACb,QAAA,kBAAAA,cAAAA,CAACiC,mBAAA,EAAA,EAAc,MAAA,EAAgB,CAAA,EACjC;AAAA,GAAA,EACF,CAAA;AAEJ;AA9IgB/B,wBAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAyJhB,SAAS,eAAA,CAAgB,EAAE,MAAA,EAAO,EAAuB;AACvD,EAAA,MAAM,KAAA,GAAQkB,cAAgC,MAAM;AAAA,IAClD,EAAE,MAAMc,gBAAA,EAAM,KAAA,EAAO,QAAQ,MAAA,kBAAQhC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,UAAA,GAAa,GAAA,EAAI,EAA9C,WAAiD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAE;AAAA,IACtH,EAAE,MAAMiC,kBAAA,EAAQ,KAAA,EAAO,UAAU,MAAA,kBAAQjC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,GAAe,GAAA,EAAI,EAAhD,WAAmD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAE;AAAA,IAC9H,EAAE,MAAMkC,yBAAA,EAAe,KAAA,EAAO,UAAU,MAAA,kBAAQlC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,YAAA,GAAe,GAAA,EAAI,EAAhD,WAAmD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAE;AAAA,IACrI,EAAE,MAAMmC,gBAAA,EAAM,KAAA,EAAO,QAAQ,MAAA,kBAAQnC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,UAAA,GAAa,GAAA,EAAI,EAA9C,WAAiD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAE;AAAA,IACtH,IAAA;AAAA,IACA,EAAE,IAAA,EAAMoC,oBAAA,EAAU,KAAA,EAAO,IAAA,EAAM,MAAA,kBAAQpC,wBAAA,CAAA,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI,EAA7D,QAAA,CAAA,EAAgE,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE;AAAA,IACxJ,EAAE,IAAA,EAAMqC,oBAAA,EAAU,KAAA,EAAO,IAAA,EAAM,MAAA,kBAAQrC,wBAAA,CAAA,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI,EAA7D,QAAA,CAAA,EAAgE,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE;AAAA,IACxJ,EAAE,IAAA,EAAMsC,oBAAA,EAAU,KAAA,EAAO,IAAA,EAAM,MAAA,kBAAQtC,wBAAA,CAAA,MAAM,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,GAAA,EAAI,EAA7D,QAAA,CAAA,EAAgE,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,EAAE;AAAA,IACxJ,IAAA;AAAA,IACA,EAAE,MAAMuC,gBAAA,EAAM,KAAA,EAAO,eAAe,MAAA,kBAAQvC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI,EAApD,WAAuD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,EAAE;AAAA,IACzI,EAAE,MAAMwC,uBAAA,EAAa,KAAA,EAAO,gBAAgB,MAAA,kBAAQxC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI,EAArD,WAAwD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,EAAE;AAAA,IACnJ,EAAE,MAAMyC,iBAAA,EAAO,KAAA,EAAO,SAAS,MAAA,kBAAQzC,wBAAA,CAAA,MAAM,OAAO,KAAA,EAAM,CAAE,OAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI,EAApD,WAAuD,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,EAAE;AAAA,IACpI,EAAE,IAAA,EAAM0C,iBAAA,EAAO,OAAO,SAAA,EAAW,MAAA,iDAAc,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,GAAQ,iBAAA,EAAkB,CAAE,KAAI,EAArD,QAAA,CAAA,EAAwD,QAAQ,KAAA;AAAM,GACjH,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE5C,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,IAAA,IAAI,CAAC,MAAM,uBAAOA,eAAC,KAAA,EAAA,EAAY,SAAA,EAAU,6BAAb,CAAuC,CAAA;AACnE,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,QAAA,GAAW,CAAA,qBAAA,EAAwB,IAAA,CAAK,MAAA,GAAS,WAAW,EAAE,CAAA,CAAA;AACpE,IAAA,uBACEA,cAAAA,CAAC,QAAA,EAAA,EAAe,IAAA,EAAK,QAAA,EAAS,SAAS,IAAA,CAAK,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,SAAA,EAAW,UAChF,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,IAAI,MAAA,EAAQ,EAAA,EAAG,EAAG,CAAA,EAAA,EAD7B,CAEb,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AA/BSE,wBAAA,CAAA,eAAA,EAAA,iBAAA,CAAA","file":"index.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Suspense, type ReactNode, type ComponentType } from 'react';\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { useAppT } from '@djangocfg/i18n';\n\n// ============================================================================\n// Loading Fallback Components\n// ============================================================================\n\nexport interface LoadingFallbackProps {\n /** Minimum height of the loading container */\n minHeight?: string | number;\n /** Show loading text */\n showText?: boolean;\n /** Custom loading text */\n text?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Spinner - Simple spinning loader\n */\nexport function Spinner({ className }: { className?: string }) {\n const t = useAppT();\n const loadingLabel = t('ui.states.loading');\n\n return (\n <div\n className={cn(\n 'inline-block h-8 w-8 animate-spin rounded-full',\n 'border-4 border-solid border-current border-r-transparent',\n 'align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n className\n )}\n role=\"status\"\n aria-label={loadingLabel}\n />\n );\n}\n\n/**\n * LoadingFallback - Default loading state for lazy components\n */\nexport function LoadingFallback({\n minHeight = 200,\n showText = true,\n text,\n className,\n}: LoadingFallbackProps) {\n const t = useAppT();\n const loadingText = text ?? t('ui.form.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'flex items-center justify-center bg-muted/30 rounded-lg',\n className\n )}\n style={{ minHeight: height }}\n >\n <div className=\"text-center\">\n <Spinner className=\"text-primary\" />\n {showText && (\n <p className=\"mt-3 text-sm text-muted-foreground\">{loadingText}</p>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * CardLoadingFallback - Loading state styled as a card\n */\nexport function CardLoadingFallback({\n title,\n description,\n minHeight = 200,\n className,\n}: {\n title?: string;\n description?: string;\n minHeight?: string | number;\n className?: string;\n}) {\n const t = useAppT();\n const cardTitle = title ?? t('ui.states.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'relative bg-card rounded-lg border border-border overflow-hidden',\n className\n )}\n >\n <div className=\"p-4 border-b border-border bg-muted/50\">\n <h6 className=\"text-sm font-semibold text-foreground\">{cardTitle}</h6>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n <div className=\"p-4\">\n <div\n className=\"flex justify-center items-center\"\n style={{ minHeight: height }}\n >\n <Spinner className=\"text-primary\" />\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * MapLoadingFallback - Loading state for map components\n */\nexport function MapLoadingFallback({\n minHeight = 400,\n className,\n}: {\n minHeight?: string | number;\n className?: string;\n}) {\n const t = useAppT();\n const loadingText = t('ui.form.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'relative bg-muted/50 rounded-lg overflow-hidden',\n 'flex items-center justify-center',\n className\n )}\n style={{ minHeight: height }}\n >\n <div className=\"text-center\">\n <div className=\"relative\">\n <Spinner className=\"text-primary h-10 w-10\" />\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n className=\"h-5 w-5 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </div>\n </div>\n <p className=\"mt-3 text-sm text-muted-foreground\">{loadingText}</p>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Wrapper\n// ============================================================================\n\nexport interface LazyWrapperProps {\n children: ReactNode;\n /** Custom fallback component */\n fallback?: ReactNode;\n /** Use card-style fallback */\n card?: boolean;\n /** Card title (when card=true) */\n cardTitle?: string;\n /** Card description (when card=true) */\n cardDescription?: string;\n /** Minimum height for fallback */\n minHeight?: string | number;\n /** Additional CSS classes for fallback */\n className?: string;\n}\n\n/**\n * LazyWrapper - Suspense wrapper with configurable fallbacks\n *\n * @example\n * // Basic usage\n * <LazyWrapper>\n * <LazyComponent />\n * </LazyWrapper>\n *\n * @example\n * // Card style fallback\n * <LazyWrapper card cardTitle=\"Diagram\" minHeight={300}>\n * <Mermaid chart={...} />\n * </LazyWrapper>\n *\n * @example\n * // Custom fallback\n * <LazyWrapper fallback={<MyCustomLoader />}>\n * <HeavyComponent />\n * </LazyWrapper>\n */\nexport function LazyWrapper({\n children,\n fallback,\n card = false,\n cardTitle,\n cardDescription,\n minHeight = 200,\n className,\n}: LazyWrapperProps) {\n const defaultFallback = card ? (\n <CardLoadingFallback\n title={cardTitle}\n description={cardDescription}\n minHeight={minHeight}\n className={className}\n />\n ) : (\n <LoadingFallback minHeight={minHeight} className={className} />\n );\n\n return <Suspense fallback={fallback ?? defaultFallback}>{children}</Suspense>;\n}\n\n// ============================================================================\n// Lazy Component Factory\n// ============================================================================\n\nexport interface CreateLazyComponentOptions<P> {\n /** Loading fallback component */\n fallback?: ReactNode | ((props: P) => ReactNode);\n /** Display name for the component */\n displayName?: string;\n}\n\n/**\n * createLazyComponent - Factory for creating lazy-loaded components\n *\n * @example\n * const LazyMermaid = createLazyComponent(\n * () => import('./Mermaid.client'),\n * {\n * displayName: 'Mermaid',\n * fallback: <CardLoadingFallback title=\"Diagram\" />,\n * }\n * );\n */\nexport function createLazyComponent<P extends object>(\n loader: () => Promise<{ default: ComponentType<P> }>,\n options: CreateLazyComponentOptions<P> = {}\n): ComponentType<P> {\n const LazyComponent = React.lazy(loader);\n\n const WrappedComponent = (props: P) => {\n const fallback =\n typeof options.fallback === 'function'\n ? options.fallback(props)\n : options.fallback ?? <LoadingFallback />;\n\n return (\n <Suspense fallback={fallback}>\n <LazyComponent {...props} />\n </Suspense>\n );\n };\n\n WrappedComponent.displayName = options.displayName ?? 'LazyComponent';\n\n return WrappedComponent;\n}\n","'use client';\n\n/**\n * Lazy-loaded Map Components\n *\n * Heavy MapLibre GL (~800KB) is loaded only when components are rendered.\n * Use these for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { MapContainer } from '@djangocfg/ui-tools/map'\n */\n\nimport * as React from 'react';\nimport { createLazyComponent, MapLoadingFallback } from '../../components';\n\n// ============================================================================\n// Lazy Components\n// ============================================================================\n\n/**\n * LazyMapContainer - Lazy-loaded map container\n *\n * Automatically shows loading state while MapLibre GL loads (~800KB)\n */\nexport const LazyMapContainer = createLazyComponent(\n () => import('./components/MapContainer').then((mod) => ({ default: mod.MapContainer })),\n {\n displayName: 'LazyMapContainer',\n fallback: <MapLoadingFallback minHeight={400} />,\n }\n);\n\n/**\n * LazyMapView - Lazy-loaded map view (alias for MapContainer)\n */\nexport const LazyMapView = createLazyComponent(\n () => import('./components/MapContainer').then((mod) => ({ default: mod.MapView })),\n {\n displayName: 'LazyMapView',\n fallback: <MapLoadingFallback minHeight={400} />,\n }\n);\n\n// ============================================================================\n// Re-export types for convenience\n// ============================================================================\n\nexport type {\n MapContainerProps,\n} from './components';\n\nexport type {\n MapViewport,\n MapStyleKey,\n MarkerData,\n} from './types';\n","'use client';\n\n/**\n * Lazy-loaded Mermaid Component\n *\n * Heavy Mermaid library (~800KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import Mermaid from '@djangocfg/ui-tools/mermaid'\n */\n\nimport { createLazyComponent, CardLoadingFallback } from '../../components';\nimport type { MermaidProps } from './index';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type { MermaidProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyMermaid - Lazy-loaded Mermaid diagram renderer\n *\n * Automatically shows loading state while Mermaid loads (~800KB)\n */\nexport const LazyMermaid = createLazyComponent<MermaidProps>(\n () => import('./Mermaid.client'),\n {\n displayName: 'LazyMermaid',\n fallback: (\n <CardLoadingFallback\n title=\"Diagram\"\n description=\"Loading...\"\n minHeight={200}\n />\n ),\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded PrettyCode Component\n *\n * Heavy Prism library (~500KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import PrettyCode from '@djangocfg/ui-tools/pretty-code'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { Language } from 'prism-react-renderer';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string;\n isCompact?: boolean;\n scrollIsolation?: boolean;\n maxLines?: number;\n /** ``'card'`` (default) ships the full chrome. ``'plain'`` is\n * chrome-less — for embedding inside another scroll container. */\n variant?: 'card' | 'plain';\n}\n\nexport type { Language };\n\n// ============================================================================\n// Code Loading Fallback\n// ============================================================================\n\nfunction CodeLoadingFallback() {\n return (\n <div className=\"relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900\">\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20\" />\n <span className=\"text-xs text-muted-foreground\">Loading code...</span>\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyPrettyCode - Lazy-loaded code syntax highlighter\n *\n * Automatically shows loading state while Prism loads (~500KB)\n */\nexport const LazyPrettyCode = createLazyComponent<PrettyCodeProps>(\n () => import('./PrettyCode.client'),\n {\n displayName: 'LazyPrettyCode',\n fallback: <CodeLoadingFallback />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded OpenapiViewer Component\n *\n * Heavy OpenAPI viewer (~400KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import OpenapiViewer from '@djangocfg/ui-tools/openapi'\n */\n\nimport * as React from 'react';\nimport { createLazyComponent } from '../../components';\nimport { PlaygroundProvider } from './context/PlaygroundContext';\nimport type { ApiKey, PlaygroundConfig, SchemaSource } from './types';\n\nexport interface PlaygroundProps {\n config: PlaygroundConfig;\n}\n\nexport type { ApiKey, PlaygroundConfig, SchemaSource };\n\nfunction OpenapiLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center min-h-[400px] bg-muted/30 rounded-lg\">\n <div className=\"text-center\">\n <div className=\"inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-primary border-r-transparent\" />\n <p className=\"mt-3 text-sm text-muted-foreground\">Loading API Playground...</p>\n </div>\n </div>\n );\n}\n\nconst LazyDocsLayout = createLazyComponent(\n () => import('./components/DocsLayout').then((mod) => ({ default: mod.DocsLayout })),\n {\n displayName: 'LazyDocsLayout',\n fallback: <OpenapiLoadingFallback />,\n }\n);\n\nexport const LazyOpenapiViewer: React.FC<PlaygroundProps> = ({ config }) => {\n return (\n <PlaygroundProvider config={config}>\n <LazyDocsLayout />\n </PlaygroundProvider>\n );\n};\n\nLazyOpenapiViewer.displayName = 'LazyOpenapiViewer';\n","'use client';\n\n/**\n * Lazy-loaded JsonForm Component\n *\n * Heavy JSON Schema Form (~300KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { JsonSchemaForm } from '@djangocfg/ui-tools/json-form'\n */\n\nimport { createLazyComponent, CardLoadingFallback } from '../../components';\nimport type { JsonSchemaFormProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { JsonSchemaFormProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyJsonSchemaForm - Lazy-loaded JSON Schema form generator\n *\n * Automatically shows loading state while RJSF loads (~300KB)\n */\nexport const LazyJsonSchemaForm = createLazyComponent<JsonSchemaFormProps>(\n () => import('./JsonSchemaForm').then((mod) => ({ default: mod.JsonSchemaForm })),\n {\n displayName: 'LazyJsonSchemaForm',\n fallback: (\n <CardLoadingFallback\n title=\"Form\"\n description=\"Loading form schema...\"\n minHeight={200}\n />\n ),\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded LottiePlayer Component\n *\n * Lottie library (~200KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { LottiePlayer } from '@djangocfg/ui-tools/lottie'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { LottiePlayerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type {\n LottiePlayerProps,\n LottieSize,\n LottieSpeed,\n LottieDirection,\n} from './types';\n\n// ============================================================================\n// Lottie Loading Fallback\n// ============================================================================\n\nfunction LottieLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-muted border-t-primary\" />\n <span className=\"text-sm text-muted-foreground\">Loading animation...</span>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyLottiePlayer - Lazy-loaded Lottie animation player\n *\n * Automatically shows loading state while Lottie loads (~200KB)\n */\nexport const LazyLottiePlayer = createLazyComponent<LottiePlayerProps>(\n () => import('./LottiePlayer.client').then((mod) => ({ default: mod.LottiePlayer })),\n {\n displayName: 'LazyLottiePlayer',\n fallback: <LottieLoadingFallback />,\n }\n);\n","'use client';\n\nimport { createLazyComponent } from '../../components';\nimport type { PlayerProps } from './types';\n\nexport const LazyPlayer = createLazyComponent<PlayerProps>(\n () => import('./Player').then((mod) => ({ default: mod.Player })),\n {\n displayName: 'LazyAudioPlayer',\n fallback: (\n <div className=\"rounded-lg border border-border/60 bg-card px-4 py-6 text-sm text-muted-foreground\">\n Loading audio player…\n </div>\n ),\n },\n);\n","'use client';\n\n/**\n * Lazy-loaded VideoPlayer Component\n *\n * Heavy Vidstack (~150KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { VideoPlayer } from '@djangocfg/ui-tools/video'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { VideoPlayerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { VideoPlayerProps };\n\n// ============================================================================\n// Video Loading Fallback\n// ============================================================================\n\nfunction VideoLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center bg-black/90 rounded-lg aspect-video\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"relative\">\n <div className=\"h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-white\" />\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n className=\"h-5 w-5 text-white/60\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </div>\n </div>\n <span className=\"text-sm text-white/60\">Loading video player...</span>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyVideoPlayer - Lazy-loaded professional video player\n *\n * Automatically shows loading state while Vidstack loads (~150KB)\n */\nexport const LazyVideoPlayer = createLazyComponent<VideoPlayerProps>(\n () => import('./components').then((mod) => ({ default: mod.VideoPlayer })),\n {\n displayName: 'LazyVideoPlayer',\n fallback: <VideoLoadingFallback />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded JsonTree Component\n *\n * JsonTree (~100KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import JsonTree from '@djangocfg/ui-tools/json-tree'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { JsonTreeConfig, JsonTreeMode } from './index';\nimport type { CommonExternalProps } from 'react-json-tree';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface JsonTreeProps {\n title?: string;\n data: unknown;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport type { JsonTreeConfig, JsonTreeMode };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyJsonTree - Lazy-loaded JSON visualization tree\n *\n * Automatically shows loading state while JsonTree loads (~100KB)\n *\n * @example\n * // Full mode (with toolbar)\n * <LazyJsonTree data={obj} mode=\"full\" />\n *\n * // Compact mode (no toolbar)\n * <LazyJsonTree data={obj} mode=\"compact\" />\n *\n * // Inline mode (minimal, for embedding)\n * <LazyJsonTree data={obj} mode=\"inline\" />\n */\nexport const LazyJsonTree = createLazyComponent<JsonTreeProps>(\n () => import('./index'),\n {\n displayName: 'LazyJsonTree',\n fallback: <LoadingFallback minHeight={100} text=\"Loading JSON viewer...\" />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded ImageViewer Component\n *\n * ImageViewer (~50KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { ImageViewer } from '@djangocfg/ui-tools/image-viewer'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { ImageViewerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { ImageViewerProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyImageViewer - Lazy-loaded image viewer with zoom/pan/rotate\n *\n * Automatically shows loading state while ImageViewer loads (~50KB)\n */\nexport const LazyImageViewer = createLazyComponent<ImageViewerProps>(\n () => import('./components').then((mod) => ({ default: mod.ImageViewer })),\n {\n displayName: 'LazyImageViewer',\n fallback: <LoadingFallback minHeight={200} text=\"Loading image viewer...\" />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded CronScheduler Component\n *\n * CronScheduler (~15KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * @example\n * import { LazyCronScheduler } from '@djangocfg/ui-tools';\n *\n * <LazyCronScheduler\n * value={cron}\n * onChange={setCron}\n * />\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { CronSchedulerProps } from './types';\n\n// Re-export types\nexport type {\n CronSchedulerProps,\n ScheduleType,\n WeekDay,\n MonthDay,\n CronSchedulerState,\n} from './types';\n\n/**\n * LazyCronScheduler - Lazy-loaded cron expression builder\n *\n * Automatically shows loading state while CronScheduler loads (~15KB).\n * Uses createLazyComponent factory for optimal code-splitting.\n *\n * @example\n * // Basic usage\n * <LazyCronScheduler\n * value=\"0 9 * * *\"\n * onChange={handleChange}\n * />\n *\n * @example\n * // With all options\n * <LazyCronScheduler\n * value={cron}\n * onChange={setCron}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport const LazyCronScheduler = createLazyComponent<CronSchedulerProps>(\n () => import('./CronScheduler.client'),\n {\n displayName: 'LazyCronScheduler',\n fallback: (\n <LoadingFallback\n minHeight={120}\n showText={false}\n className=\"rounded-lg\"\n />\n ),\n }\n);\n","'use client';\n\nimport { createLazyComponent, LoadingFallback } from '../../components/lazy-wrapper';\nimport type { TreeRootProps } from './types';\n\nexport const LazyTree = createLazyComponent<TreeRootProps<unknown>>(\n () => import('./TreeRoot'),\n {\n displayName: 'LazyTree',\n fallback: <LoadingFallback minHeight={200} text=\"Loading tree…\" />,\n },\n);\n\nexport type { TreeRootProps };\n","/**\n * LottiePlayer - Dynamic Import Wrapper\n *\n * Lazy loads the LottiePlayer component for optimal bundle size\n */\n\n'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport { LottiePlayerProps } from './types';\n\n// Lazy load the client component\nconst LottiePlayerClient = lazy(() =>\n import('./LottiePlayer.client').then((mod) => ({ default: mod.LottiePlayer }))\n);\n\n// Loading fallback component\nconst LoadingFallback = () => (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900\" />\n <span className=\"text-sm text-gray-500\">Loading player...</span>\n </div>\n </div>\n);\n\n/**\n * LottiePlayer component wrapper with dynamic import\n *\n * This component automatically handles code splitting and lazy loading\n * of the Lottie player to optimize bundle size.\n *\n * Usage:\n * ```tsx\n * import { LottiePlayer } from '@djangocfg/ui-core/tools';\n *\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * size=\"md\"\n * autoplay\n * loop\n * />\n * ```\n */\nexport function LottiePlayer(props: LottiePlayerProps) {\n return (\n <Suspense fallback={<LoadingFallback />}>\n <LottiePlayerClient {...props} />\n </Suspense>\n );\n}\n\n// Re-export types for convenience\nexport type { LottiePlayerProps, LottieSize, LottieSpeed, LottieDirection } from './types';\nexport { useLottie } from './useLottie';\nexport type { UseLottieOptions, UseLottieReturn } from './useLottie';\n","'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport { PlaygroundProvider } from './context/PlaygroundContext';\nimport type { PlaygroundConfig } from './types';\n\nconst DocsLayout = lazy(() =>\n import('./components/DocsLayout').then((mod) => ({ default: mod.DocsLayout }))\n);\n\nconst LoadingFallback = () => (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <div className=\"text-muted-foreground\">Loading API Playground...</div>\n </div>\n);\n\nexport interface PlaygroundProps {\n config: PlaygroundConfig;\n}\n\nexport const Playground: React.FC<PlaygroundProps> = ({ config }) => {\n return (\n <PlaygroundProvider config={config}>\n <Suspense fallback={<LoadingFallback />}>\n <DocsLayout />\n </Suspense>\n </PlaygroundProvider>\n );\n};\n\nexport type { PlaygroundConfig, SchemaSource } from './types';\n\nexport default Playground;\n","'use client';\n\n/**\n * CronScheduler\n *\n * Compact cron expression builder following Apple HIG principles.\n * Lazy-loaded for optimal bundle size (~15KB).\n *\n * @example\n * import { CronScheduler } from '@djangocfg/ui-tools';\n *\n * <CronScheduler\n * value={cron}\n * onChange={setCron}\n * showPreview\n * />\n */\n\nimport React, { lazy, Suspense } from 'react';\nimport { LoadingFallback } from '../../components';\nimport type { CronSchedulerProps } from './types';\n\n// Lazy load the client component\nconst CronSchedulerClient = lazy(() => import('./CronScheduler.client'));\n\n/**\n * CronScheduler with Suspense wrapper\n */\nexport function CronScheduler(props: CronSchedulerProps) {\n return (\n <Suspense fallback={<CronSchedulerFallback />}>\n <CronSchedulerClient {...props} />\n </Suspense>\n );\n}\n\n/**\n * Loading fallback for CronScheduler\n */\nfunction CronSchedulerFallback() {\n return (\n <LoadingFallback\n minHeight={120}\n showText={false}\n className=\"rounded-lg\"\n />\n );\n}\n\n// Re-export types\nexport type {\n CronSchedulerProps,\n ScheduleType,\n WeekDay,\n MonthDay,\n CronSchedulerState,\n CronSchedulerContextValue,\n} from './types';\n\n// Re-export context and hooks for advanced usage\nexport {\n CronSchedulerProvider,\n useCronSchedulerContext,\n useCronType,\n useCronTime,\n useCronWeekDays,\n useCronMonthDays,\n useCronCustom,\n useCronPreview,\n useCronScheduler,\n} from './context';\n\n// Re-export utilities\nexport {\n buildCron,\n parseCron,\n isValidCron,\n humanizeCron,\n} from './utils';\n\n// Re-export components for custom compositions\nexport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\n\nexport default CronScheduler;\n","'use client';\n\n/**\n * Monaco Editor Web Worker Setup\n *\n * Workers improve performance for language services (TypeScript type-checking,\n * JSON validation, etc.) but require bundler-specific configuration:\n *\n * **Vite**: Use `?worker` imports (see example below)\n * **Next.js/Webpack**: Use `monaco-editor-webpack-plugin`\n * **No config**: Monaco falls back to main-thread execution (fully functional)\n *\n * @example Vite setup (call once in app entry):\n * ```ts\n * import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\n * import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'\n * import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n * import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'\n * import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'\n *\n * setupMonacoWorkers((label) => {\n * switch (label) {\n * case 'typescript': case 'javascript': return new tsWorker()\n * case 'json': return new jsonWorker()\n * case 'css': case 'scss': case 'less': return new cssWorker()\n * case 'html': case 'handlebars': case 'razor': return new htmlWorker()\n * default: return new editorWorker()\n * }\n * })\n * ```\n *\n * @example Next.js setup:\n * ```ts\n * // next.config.js — add monaco-editor-webpack-plugin\n * // Then just call setupMonacoWorkers() without arguments\n * setupMonacoWorkers()\n * ```\n */\n\ntype GetWorkerFn = (label: string) => Worker;\n\nlet isSetup = false;\n\nexport function setupMonacoWorkers(getWorker?: GetWorkerFn): void {\n if (isSetup || typeof window === 'undefined') return;\n\n if (getWorker) {\n // App provides bundler-specific worker factory\n (self as unknown as { MonacoEnvironment: object }).MonacoEnvironment = {\n getWorker: (_workerId: string, label: string) => getWorker(label),\n };\n }\n // else: don't set MonacoEnvironment at all.\n // - If webpack plugin is installed, it sets MonacoEnvironment automatically.\n // - If nothing sets it, Monaco falls back to main-thread execution.\n\n isSetup = true;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport type * as MonacoEditor from 'monaco-editor';\n\nimport { setupMonacoWorkers } from '../workers/setup';\nimport type { UseMonacoReturn } from '../types';\n\n/**\n * Hook to load and access Monaco Editor instance\n *\n * Handles:\n * - Dynamic import of Monaco (client-side only)\n * - Web worker configuration\n * - Loading state management\n *\n * @example\n * ```tsx\n * const { monaco, isLoading, error } = useMonaco();\n *\n * if (isLoading) return <Spinner />;\n * if (error) return <Error message={error.message} />;\n *\n * // Use monaco API\n * monaco.editor.create(...)\n * ```\n */\nexport function useMonaco(): UseMonacoReturn {\n const [monaco, setMonaco] = useState<typeof MonacoEditor | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n async function loadMonaco() {\n try {\n // Setup workers first\n setupMonacoWorkers();\n\n // Dynamic import Monaco\n const monacoModule = await import('monaco-editor');\n\n if (mounted) {\n setMonaco(monacoModule);\n setIsLoading(false);\n }\n } catch (err) {\n if (mounted) {\n setError(err instanceof Error ? err : new Error('Failed to load Monaco Editor'));\n setIsLoading(false);\n }\n }\n }\n\n loadMonaco();\n\n return () => {\n mounted = false;\n };\n }, []);\n\n return { monaco, isLoading, error };\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\n/**\n * Hook that syncs Monaco editor theme with the app theme.\n *\n * Reads CSS variables from the document and creates custom Monaco themes\n * that match the current light/dark mode. Falls back to built-in 'vs' / 'vs-dark'.\n *\n * @param monaco - Monaco namespace (null during loading)\n * @param themeOverride - Optional explicit theme name (skips auto-detection)\n * @returns Resolved Monaco theme name to pass to editor options\n */\nexport function useEditorTheme(\n monaco: typeof import('monaco-editor') | null,\n themeOverride?: string,\n): string {\n const appTheme = useResolvedTheme();\n const registered = useRef(false);\n\n // Register custom themes once Monaco is loaded\n useEffect(() => {\n if (!monaco || registered.current) return;\n\n try {\n const colors = _readCSSColors();\n\n monaco.editor.defineTheme('app-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'comment', foreground: '6A9955', fontStyle: 'italic' },\n { token: 'keyword', foreground: 'C586C0' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'type', foreground: '4EC9B0' },\n { token: 'function', foreground: 'DCDCAA' },\n { token: 'variable', foreground: '9CDCFE' },\n ],\n colors: {\n 'editor.background': colors.background,\n 'editor.foreground': colors.foreground,\n 'editor.lineHighlightBackground': colors.lineHighlight,\n 'editor.selectionBackground': colors.selection,\n 'editorCursor.foreground': colors.foreground,\n 'editorLineNumber.foreground': colors.mutedForeground,\n 'editorWidget.background': colors.card,\n 'editorWidget.border': colors.border,\n 'input.background': colors.card,\n 'dropdown.background': colors.card,\n },\n });\n\n monaco.editor.defineTheme('app-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'comment', foreground: '008000', fontStyle: 'italic' },\n { token: 'keyword', foreground: 'AF00DB' },\n { token: 'string', foreground: 'A31515' },\n { token: 'number', foreground: '098658' },\n { token: 'type', foreground: '267F99' },\n { token: 'function', foreground: '795E26' },\n { token: 'variable', foreground: '001080' },\n ],\n colors: {\n 'editor.background': colors.backgroundLight,\n 'editor.foreground': colors.foregroundLight,\n 'editor.lineHighlightBackground': colors.lineHighlightLight,\n 'editor.selectionBackground': colors.selectionLight,\n 'editorLineNumber.foreground': colors.mutedForegroundLight,\n 'editorWidget.background': colors.cardLight,\n 'editorWidget.border': colors.borderLight,\n },\n });\n\n registered.current = true;\n } catch {\n // Fallback — use built-in themes\n }\n }, [monaco]);\n\n // If explicit override provided, use it\n if (themeOverride) return themeOverride;\n\n // Use registered app themes if available, fallback to built-in\n if (registered.current) {\n return appTheme === 'dark' ? 'app-dark' : 'app-light';\n }\n return appTheme === 'dark' ? 'vs-dark' : 'vs';\n}\n\n\n/** Read CSS variables and convert HSL to hex for Monaco */\nfunction _readCSSColors() {\n const get = (varName: string): string => {\n if (typeof document === 'undefined') return '';\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n };\n\n const hslToHex = (hsl: string): string => {\n if (!hsl) return '';\n // CSS vars are \"0 0% 96%\" — strip % before parsing\n const parts = hsl.split(/\\s+/).map(s => parseFloat(s.replace('%', '')));\n if (parts.length < 3 || parts.some(isNaN)) return '';\n const [h, s, l] = [parts[0], parts[1] / 100, parts[2] / 100];\n\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) => {\n const k = (n + h / 30) % 12;\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round(255 * color).toString(16).padStart(2, '0');\n };\n return `#${f(0)}${f(8)}${f(4)}`;\n };\n\n // Read current (dark) theme CSS variables\n const background = hslToHex(get('--background')) || '#0a0a0a';\n const foreground = hslToHex(get('--foreground')) || '#f5f5f5';\n const card = hslToHex(get('--card')) || '#141414';\n const border = hslToHex(get('--border')) || '#262626';\n const mutedForeground = hslToHex(get('--muted-foreground')) || '#858585';\n\n // Compute derived colors\n const lineHighlight = _adjustBrightness(background, 10);\n const primary = hslToHex(get('--primary'));\n const selection = primary ? _adjustBrightness(primary, -40) : '#264F78';\n\n // Light theme colors (hardcoded since we can't switch CSS context)\n return {\n background,\n foreground,\n card,\n border,\n mutedForeground,\n lineHighlight,\n selection,\n // Light variants\n backgroundLight: '#ffffff',\n foregroundLight: '#1a1a1a',\n cardLight: '#ffffff',\n borderLight: '#e5e5e5',\n mutedForegroundLight: '#737373',\n lineHighlightLight: '#f5f5f5',\n selectionLight: '#ADD6FF',\n };\n}\n\nfunction _adjustBrightness(hex: string, amount: number): string {\n const num = parseInt(hex.replace('#', ''), 16);\n const r = Math.min(255, Math.max(0, ((num >> 16) & 0xff) + amount));\n const g = Math.min(255, Math.max(0, ((num >> 8) & 0xff) + amount));\n const b = Math.min(255, Math.max(0, (num & 0xff) + amount));\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;\n}\n\n","'use client';\n\nimport { useRef, useEffect, useState, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { useEditorTheme } from '../hooks/useEditorTheme';\nimport type { EditorProps } from '../types';\n\nexport interface EditorRef {\n /** Get editor instance */\n getEditor: () => monaco.editor.IStandaloneCodeEditor | null;\n /** Get current value */\n getValue: () => string;\n /** Set value */\n setValue: (value: string) => void;\n /** Focus editor */\n focus: () => void;\n}\n\n/**\n * Monaco Editor Component\n *\n * A React wrapper around Monaco Editor with full TypeScript support.\n *\n * @example\n * ```tsx\n * <Editor\n * value={code}\n * language=\"typescript\"\n * onChange={(value) => setCode(value)}\n * options={{ fontSize: 14, minimap: false }}\n * />\n * ```\n */\nexport const Editor = forwardRef<EditorRef, EditorProps>(function Editor(\n {\n value = '',\n language = 'plaintext',\n onChange,\n onMount,\n options = {},\n className = '',\n height = '100%',\n width = '100%',\n autoHeight = false,\n minHeight = 100,\n maxHeight = 600,\n },\n ref\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);\n const { monaco, isLoading } = useMonaco();\n const resolvedTheme = useEditorTheme(monaco, options.theme);\n\n // Auto-height state\n const [contentHeight, setContentHeight] = useState<number | null>(null);\n\n const updateContentHeight = useCallback((editor: monaco.editor.IStandaloneCodeEditor) => {\n if (!autoHeight) return;\n const h = editor.getContentHeight();\n setContentHeight(Math.min(Math.max(h, minHeight), maxHeight));\n }, [autoHeight, minHeight, maxHeight]);\n\n // Track internal changes to prevent cursor reset on prop sync\n const isInternalChangeRef = useRef(false);\n\n // Expose editor methods via ref\n useImperativeHandle(ref, () => ({\n getEditor: () => editorRef.current,\n getValue: () => editorRef.current?.getValue() || '',\n setValue: (val: string) => editorRef.current?.setValue(val),\n focus: () => editorRef.current?.focus(),\n }));\n\n // Create editor\n useEffect(() => {\n if (!monaco || !containerRef.current || editorRef.current) return;\n\n const editor = monaco.editor.create(containerRef.current, {\n value,\n language,\n theme: resolvedTheme,\n fontSize: options.fontSize || 14,\n fontFamily: options.fontFamily || \"'Fira Code', 'Consolas', monospace\",\n tabSize: options.tabSize || 2,\n insertSpaces: options.insertSpaces !== false,\n wordWrap: options.wordWrap || 'on',\n minimap: { enabled: options.minimap !== false },\n lineNumbers: options.lineNumbers || 'on',\n readOnly: options.readOnly || false,\n automaticLayout: true,\n scrollBeyondLastLine: autoHeight ? false : false,\n scrollbar: autoHeight ? { vertical: 'hidden', horizontal: 'auto' } : undefined,\n overviewRulerLanes: autoHeight ? 0 : undefined,\n padding: { top: 16, bottom: 16 },\n renderLineHighlight: 'all',\n cursorBlinking: 'smooth',\n cursorSmoothCaretAnimation: 'on',\n smoothScrolling: true,\n bracketPairColorization: { enabled: true },\n guides: {\n bracketPairs: true,\n indentation: true,\n },\n });\n\n editorRef.current = editor;\n\n // Setup change listener\n if (onChange) {\n editor.onDidChangeModelContent(() => {\n // Mark as internal change to prevent cursor reset on prop sync\n isInternalChangeRef.current = true;\n onChange(editor.getValue());\n });\n }\n\n // Auto-height: resize container to fit content\n if (autoHeight) {\n editor.onDidContentSizeChange(() => updateContentHeight(editor));\n updateContentHeight(editor);\n }\n\n // Call onMount callback\n onMount?.(editor);\n\n return () => {\n editor.dispose();\n editorRef.current = null;\n };\n }, [monaco]);\n\n // Update value when prop changes (only for external changes)\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // Skip if this is an internal change (user typing) - prevents cursor reset\n if (isInternalChangeRef.current) {\n isInternalChangeRef.current = false;\n return;\n }\n\n const currentValue = editor.getValue();\n if (value !== currentValue) {\n // Save cursor position\n const position = editor.getPosition();\n const selections = editor.getSelections();\n\n editor.setValue(value);\n\n // Restore cursor position if possible\n if (position) {\n editor.setPosition(position);\n }\n if (selections && selections.length > 0) {\n editor.setSelections(selections);\n }\n }\n }, [value]);\n\n // Update language when prop changes\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n monaco.editor.setModelLanguage(model, language);\n }\n }, [language, monaco]);\n\n // Update options when props change\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n editor.updateOptions({\n theme: resolvedTheme,\n fontSize: options.fontSize,\n readOnly: options.readOnly,\n minimap: { enabled: options.minimap !== false },\n wordWrap: options.wordWrap,\n lineNumbers: options.lineNumbers,\n });\n }, [options, resolvedTheme]);\n\n if (isLoading) {\n return (\n <div\n className={className}\n style={{\n width,\n height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#1e1e1e',\n color: '#666',\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n const resolvedHeight = autoHeight && contentHeight != null ? contentHeight : height;\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width,\n height: resolvedHeight,\n ...(autoHeight && { minHeight: minHeight, maxHeight: maxHeight, overflow: 'hidden' }),\n }}\n />\n );\n});\n","'use client';\n\nimport { useRef, useEffect } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { useEditorTheme } from '../hooks/useEditorTheme';\nimport type { DiffEditorProps } from '../types';\n\n/**\n * Monaco Diff Editor Component\n *\n * Side-by-side or inline diff view for comparing two versions of content.\n *\n * @example\n * ```tsx\n * <DiffEditor\n * original={originalCode}\n * modified={modifiedCode}\n * language=\"typescript\"\n * />\n * ```\n */\nexport function DiffEditor({\n original,\n modified,\n language = 'plaintext',\n options = {},\n className = '',\n height = '100%',\n}: DiffEditorProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monaco.editor.IStandaloneDiffEditor | null>(null);\n const { monaco, isLoading } = useMonaco();\n const resolvedTheme = useEditorTheme(monaco, options.theme);\n\n // Create diff editor\n useEffect(() => {\n if (!monaco || !containerRef.current || editorRef.current) return;\n\n const editor = monaco.editor.createDiffEditor(containerRef.current, {\n theme: resolvedTheme,\n fontSize: options.fontSize || 14,\n fontFamily: options.fontFamily || \"'Fira Code', 'Consolas', monospace\",\n readOnly: true,\n automaticLayout: true,\n renderSideBySide: true,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n });\n\n const originalModel = monaco.editor.createModel(original, language);\n const modifiedModel = monaco.editor.createModel(modified, language);\n\n editor.setModel({\n original: originalModel,\n modified: modifiedModel,\n });\n\n editorRef.current = editor;\n\n return () => {\n originalModel.dispose();\n modifiedModel.dispose();\n editor.dispose();\n editorRef.current = null;\n };\n }, [monaco]);\n\n // Update models when content changes\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n model.original.setValue(original);\n model.modified.setValue(modified);\n }\n }, [original, modified, monaco]);\n\n // Update language\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n monaco.editor.setModelLanguage(model.original, language);\n monaco.editor.setModelLanguage(model.modified, language);\n }\n }, [language, monaco]);\n\n if (isLoading) {\n return (\n <div\n className={className}\n style={{\n width: '100%',\n height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#1e1e1e',\n color: '#666',\n }}\n >\n Loading diff editor...\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width: '100%',\n height,\n }}\n />\n );\n}\n","/**\n * Language Detection & Mapping\n *\n * Maps file extensions to Monaco Editor language IDs.\n * Monaco supports 80+ languages out of the box.\n */\n\n/**\n * File extension to Monaco language ID mapping\n */\nexport const LANGUAGE_MAP: Record<string, string> = {\n // Web\n '.html': 'html',\n '.htm': 'html',\n '.xhtml': 'html',\n '.vue': 'html',\n '.svelte': 'html',\n\n // CSS\n '.css': 'css',\n '.scss': 'scss',\n '.sass': 'scss',\n '.less': 'less',\n\n // JavaScript/TypeScript\n '.js': 'javascript',\n '.mjs': 'javascript',\n '.cjs': 'javascript',\n '.jsx': 'javascript',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.mts': 'typescript',\n '.cts': 'typescript',\n\n // Data formats\n '.json': 'json',\n '.jsonc': 'json',\n '.json5': 'json',\n '.yaml': 'yaml',\n '.yml': 'yaml',\n '.toml': 'ini',\n '.xml': 'xml',\n '.svg': 'xml',\n '.xsl': 'xml',\n '.xsd': 'xml',\n\n // Markdown & Documentation\n '.md': 'markdown',\n '.mdx': 'markdown',\n '.markdown': 'markdown',\n '.rst': 'restructuredtext',\n '.txt': 'plaintext',\n '.text': 'plaintext',\n\n // Programming languages\n '.py': 'python',\n '.pyw': 'python',\n '.pyi': 'python',\n '.rb': 'ruby',\n '.rake': 'ruby',\n '.gemspec': 'ruby',\n '.php': 'php',\n '.phtml': 'php',\n '.java': 'java',\n '.kt': 'kotlin',\n '.kts': 'kotlin',\n '.scala': 'scala',\n '.go': 'go',\n '.rs': 'rust',\n '.swift': 'swift',\n '.c': 'c',\n '.h': 'c',\n '.cpp': 'cpp',\n '.cc': 'cpp',\n '.cxx': 'cpp',\n '.hpp': 'cpp',\n '.hxx': 'cpp',\n '.cs': 'csharp',\n '.fs': 'fsharp',\n '.fsx': 'fsharp',\n '.vb': 'vb',\n '.lua': 'lua',\n '.r': 'r',\n '.R': 'r',\n '.m': 'objective-c',\n '.mm': 'objective-c',\n '.pl': 'perl',\n '.pm': 'perl',\n '.ex': 'elixir',\n '.exs': 'elixir',\n '.erl': 'erlang',\n '.hrl': 'erlang',\n '.clj': 'clojure',\n '.cljs': 'clojure',\n '.cljc': 'clojure',\n '.hs': 'haskell',\n '.lhs': 'haskell',\n '.ml': 'fsharp',\n '.mli': 'fsharp',\n '.dart': 'dart',\n '.groovy': 'groovy',\n '.gradle': 'groovy',\n '.jl': 'julia',\n\n // Shell & Scripts\n '.sh': 'shell',\n '.bash': 'shell',\n '.zsh': 'shell',\n '.fish': 'shell',\n '.ps1': 'powershell',\n '.psm1': 'powershell',\n '.psd1': 'powershell',\n '.bat': 'bat',\n '.cmd': 'bat',\n\n // Config files\n '.ini': 'ini',\n '.cfg': 'ini',\n '.conf': 'ini',\n '.properties': 'ini',\n '.env': 'ini',\n '.gitignore': 'ini',\n '.gitattributes': 'ini',\n '.editorconfig': 'ini',\n '.npmrc': 'ini',\n\n // Database\n '.sql': 'sql',\n '.mysql': 'mysql',\n '.pgsql': 'pgsql',\n '.plsql': 'plsql',\n '.redis': 'redis',\n\n // Templates\n '.hbs': 'handlebars',\n '.handlebars': 'handlebars',\n '.mustache': 'handlebars',\n '.ejs': 'html',\n '.pug': 'pug',\n '.jade': 'pug',\n '.twig': 'twig',\n '.liquid': 'liquid',\n\n // GraphQL\n '.graphql': 'graphql',\n '.gql': 'graphql',\n\n // Docker\n '.dockerfile': 'dockerfile',\n\n // Other\n '.diff': 'diff',\n '.patch': 'diff',\n '.log': 'log',\n '.tex': 'latex',\n '.cls': 'latex',\n '.sty': 'latex',\n '.proto': 'protobuf',\n '.sol': 'sol',\n '.asm': 'mips',\n '.s': 'mips',\n '.wasm': 'wasm',\n};\n\n/**\n * Special filename mappings (without extension)\n */\nconst FILENAME_MAP: Record<string, string> = {\n Dockerfile: 'dockerfile',\n 'docker-compose.yml': 'yaml',\n 'docker-compose.yaml': 'yaml',\n Makefile: 'makefile',\n makefile: 'makefile',\n Gemfile: 'ruby',\n Rakefile: 'ruby',\n Jenkinsfile: 'groovy',\n Vagrantfile: 'ruby',\n '.bashrc': 'shell',\n '.bash_profile': 'shell',\n '.zshrc': 'shell',\n '.profile': 'shell',\n '.vimrc': 'plaintext',\n '.gitconfig': 'ini',\n '.htaccess': 'ini',\n 'nginx.conf': 'ini',\n 'package.json': 'json',\n 'tsconfig.json': 'json',\n 'jsconfig.json': 'json',\n '.prettierrc': 'json',\n '.eslintrc': 'json',\n 'composer.json': 'json',\n 'Cargo.toml': 'ini',\n 'go.mod': 'go',\n 'go.sum': 'plaintext',\n 'requirements.txt': 'plaintext',\n 'pyproject.toml': 'ini',\n 'setup.py': 'python',\n 'setup.cfg': 'ini',\n};\n\n/**\n * Get Monaco language ID from file extension\n */\nexport function getLanguageByExtension(extension: string): string {\n const ext = extension.startsWith('.') ? extension.toLowerCase() : `.${extension.toLowerCase()}`;\n return LANGUAGE_MAP[ext] || 'plaintext';\n}\n\n/**\n * Get Monaco language ID from filename\n * Checks special filenames first, then falls back to extension\n */\nexport function getLanguageByFilename(filename: string): string {\n // Check special filenames first\n if (FILENAME_MAP[filename]) {\n return FILENAME_MAP[filename];\n }\n\n // Extract extension\n const lastDot = filename.lastIndexOf('.');\n if (lastDot === -1) {\n return 'plaintext';\n }\n\n const extension = filename.slice(lastDot).toLowerCase();\n return LANGUAGE_MAP[extension] || 'plaintext';\n}\n","'use client';\n\nimport { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { getLanguageByFilename } from '../lib/languages';\nimport type { EditorFile, EditorContextValue } from '../types';\n\nconst EditorContext = createContext<EditorContextValue | null>(null);\n\n/**\n * Hook to access editor context\n * Must be used within EditorProvider\n */\nexport function useEditorContext(): EditorContextValue {\n const context = useContext(EditorContext);\n if (!context) {\n throw new Error('useEditorContext must be used within EditorProvider');\n }\n return context;\n}\n\ninterface EditorProviderProps {\n children: React.ReactNode;\n /** Callback when file save is requested */\n onSave?: (path: string, content: string) => Promise<void>;\n}\n\n/**\n * Editor Context Provider\n *\n * Manages multiple open files, active file state, and editor instance.\n *\n * @example\n * ```tsx\n * <EditorProvider onSave={handleSave}>\n * <EditorTabs />\n * <Editor />\n * </EditorProvider>\n * ```\n */\nexport function EditorProvider({ children, onSave }: EditorProviderProps) {\n const { monaco } = useMonaco();\n const [editor, setEditor] = useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n const [openFiles, setOpenFiles] = useState<EditorFile[]>([]);\n const [activeFilePath, setActiveFilePath] = useState<string | null>(null);\n\n // Get active file\n const activeFile = useMemo(\n () => openFiles.find((f) => f.path === activeFilePath) || null,\n [openFiles, activeFilePath]\n );\n\n // Open a file\n const openFile = useCallback(\n (path: string, content: string, language?: string) => {\n setOpenFiles((files) => {\n // Check if already open\n const existing = files.find((f) => f.path === path);\n if (existing) {\n return files;\n }\n\n // Detect language from filename\n const basename = path.split('/').pop() || path;\n const detectedLanguage = language || getLanguageByFilename(basename);\n\n // Create new file entry\n const newFile: EditorFile = {\n path,\n content,\n language: detectedLanguage,\n isDirty: false,\n };\n\n return [...files, newFile];\n });\n\n // Set as active\n setActiveFilePath(path);\n },\n []\n );\n\n // Close a file\n const closeFile = useCallback(\n (path: string) => {\n setOpenFiles((files) => {\n const index = files.findIndex((f) => f.path === path);\n if (index === -1) return files;\n\n const newFiles = files.filter((f) => f.path !== path);\n\n // If closing active file, activate adjacent file\n if (activeFilePath === path && newFiles.length > 0) {\n const newIndex = Math.min(index, newFiles.length - 1);\n setActiveFilePath(newFiles[newIndex].path);\n } else if (newFiles.length === 0) {\n setActiveFilePath(null);\n }\n\n return newFiles;\n });\n },\n [activeFilePath]\n );\n\n // Set active file\n const setActiveFile = useCallback((path: string) => {\n setActiveFilePath(path);\n }, []);\n\n // Update file content\n const updateContent = useCallback((path: string, content: string) => {\n setOpenFiles((files) =>\n files.map((f) =>\n f.path === path\n ? { ...f, content, isDirty: true }\n : f\n )\n );\n }, []);\n\n // Save file\n const saveFile = useCallback(\n async (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n if (!file) return;\n\n if (onSave) {\n await onSave(path, file.content);\n }\n\n // Mark as not dirty\n setOpenFiles((files) =>\n files.map((f) =>\n f.path === path ? { ...f, isDirty: false } : f\n )\n );\n },\n [openFiles, onSave]\n );\n\n // Check if file is dirty\n const isDirty = useCallback(\n (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n return file?.isDirty || false;\n },\n [openFiles]\n );\n\n // Get file content\n const getContent = useCallback(\n (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n return file?.content || null;\n },\n [openFiles]\n );\n\n // Get file by path\n const getFile = useCallback(\n (path: string) => {\n return openFiles.find((f) => f.path === path) || null;\n },\n [openFiles]\n );\n\n const value: EditorContextValue = {\n openFiles,\n activeFile,\n monaco,\n editor,\n isReady: monaco !== null && editor !== null,\n\n openFile,\n closeFile,\n setActiveFile,\n updateContent,\n saveFile,\n\n isDirty,\n getContent,\n getFile,\n };\n\n return (\n <EditorContext.Provider value={value}>\n {children}\n </EditorContext.Provider>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport type { UseEditorReturn } from '../types';\n\n/**\n * Hook to manage editor instance reference\n *\n * @example\n * ```tsx\n * const { editor, isReady, setEditor } = useEditor();\n *\n * // Pass setEditor to Editor component's onMount\n * <Editor onMount={setEditor} />\n *\n * // Use editor when ready\n * if (isReady) {\n * editor.getModel()?.getValue();\n * }\n * ```\n */\nexport function useEditor(): UseEditorReturn {\n const [editor, setEditorState] = useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n const setEditor = useCallback((editorInstance: monaco.editor.IStandaloneCodeEditor | null) => {\n setEditorState(editorInstance);\n }, []);\n\n return {\n editor,\n isReady: editor !== null,\n setEditor,\n };\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { getLanguageByFilename } from '../lib/languages';\n\n/**\n * Hook to detect language from filename\n *\n * @param filename - File name or path\n * @returns Monaco language ID\n *\n * @example\n * ```tsx\n * const language = useLanguage('app.tsx');\n * // Returns: 'typescript'\n *\n * const language2 = useLanguage('/path/to/Dockerfile');\n * // Returns: 'dockerfile'\n * ```\n */\nexport function useLanguage(filename: string | undefined): string {\n return useMemo(() => {\n if (!filename) return 'plaintext';\n\n // Extract basename from path\n const basename = filename.split('/').pop() || filename;\n return getLanguageByFilename(basename);\n }, [filename]);\n}\n","'use client';\n\nimport { forwardRef, useImperativeHandle, useState, useCallback, useEffect, type KeyboardEvent } from 'react';\nimport type { MentionItem } from './types';\n\nexport interface MentionListRef {\n onKeyDown: (event: KeyboardEvent) => boolean;\n}\n\ninterface MentionListProps {\n items: MentionItem[];\n command: (item: MentionItem) => void;\n}\n\nexport const MentionList = forwardRef<MentionListRef, MentionListProps>(\n ({ items, command }, ref) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n useEffect(() => setSelectedIndex(0), [items]);\n\n const select = useCallback(\n (index: number) => {\n const item = items[index];\n if (item) command(item);\n },\n [items, command],\n );\n\n useImperativeHandle(ref, () => ({\n onKeyDown: (event: KeyboardEvent) => {\n if (event.key === 'ArrowUp') {\n setSelectedIndex((i) => (i + items.length - 1) % items.length);\n return true;\n }\n if (event.key === 'ArrowDown') {\n setSelectedIndex((i) => (i + 1) % items.length);\n return true;\n }\n if (event.key === 'Enter') {\n select(selectedIndex);\n return true;\n }\n return false;\n },\n }));\n\n if (items.length === 0) return null;\n\n return (\n <div className=\"markdown-mention-list\">\n {items.map((item, i) => {\n const isSelected = i === selectedIndex;\n const cls = `markdown-mention-item ${isSelected ? 'selected' : ''}`;\n return (\n <button key={item.id} type=\"button\" className={cls} onClick={() => select(i)}>\n {item.thumbnail && (\n <img src={item.thumbnail} alt=\"\" className=\"markdown-mention-avatar\" />\n )}\n <div className=\"markdown-mention-info\">\n <span className=\"markdown-mention-name\">{item.label}</span>\n {item.description && (\n <span className=\"markdown-mention-desc\">{item.description}</span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n );\n },\n);\n\nMentionList.displayName = 'MentionList';\n","import { ReactRenderer } from '@tiptap/react';\nimport type { SuggestionOptions } from '@tiptap/suggestion';\nimport { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { MentionList, type MentionListRef } from './MentionList';\nimport type { MentionItem, MentionConfig } from './types';\n\nexport function createMentionSuggestion(\n config: MentionConfig,\n): Omit<SuggestionOptions<MentionItem>, 'editor'> {\n const { maxItems = 5, trigger = '@' } = config;\n\n return {\n char: trigger,\n\n items: ({ query }) => {\n const q = query.toLowerCase();\n return config.items\n .filter((item) => item.label.toLowerCase().includes(q))\n .slice(0, maxItems);\n },\n\n render: () => {\n let component: ReactRenderer<MentionListRef> | null = null;\n let popup: HTMLDivElement | null = null;\n let cleanupAutoUpdate: (() => void) | null = null;\n let getReferenceRect: (() => DOMRect | null) | null = null;\n\n // Floating-UI virtual element backed by Tiptap's clientRect.\n // We re-read it on every reposition so caret movement is tracked.\n const buildVirtualElement = () => ({\n getBoundingClientRect: () => {\n const rect = getReferenceRect?.();\n // Fallback to a zero-sized rect at origin if the editor is detached\n // (e.g. mid-teardown). Floating-UI tolerates this.\n return rect ?? new DOMRect(0, 0, 0, 0);\n },\n });\n\n const updatePosition = () => {\n if (!popup) return;\n const virtualEl = buildVirtualElement();\n void computePosition(virtualEl, popup, {\n placement: 'bottom-start',\n middleware: [\n offset(4),\n flip({ fallbackPlacements: ['top-start'] }),\n shift({ padding: 8 }),\n ],\n }).then(({ x, y }) => {\n if (!popup) return;\n // transform is more performant than top/left and avoids\n // sub-pixel layout thrash during scroll/resize.\n popup.style.transform = `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n });\n };\n\n const teardown = () => {\n cleanupAutoUpdate?.();\n cleanupAutoUpdate = null;\n popup?.remove();\n popup = null;\n component?.destroy();\n component = null;\n getReferenceRect = null;\n };\n\n return {\n onStart: (props) => {\n component = new ReactRenderer(MentionList, {\n props: {\n items: props.items,\n command: (item: MentionItem) => {\n props.command({ id: item.id, label: item.label });\n },\n },\n editor: props.editor,\n });\n\n popup = document.createElement('div');\n // top/left at 0; actual position is applied via transform by computePosition.\n popup.style.cssText = 'position: absolute; top: 0; left: 0; z-index: 99999;';\n popup.appendChild(component.element);\n document.body.appendChild(popup);\n\n getReferenceRect = () => props.clientRect?.() ?? null;\n\n // autoUpdate handles scroll, resize, ancestor scroll/resize, layout shifts.\n // It calls updatePosition synchronously on registration too — no manual first call needed.\n const virtualEl = buildVirtualElement();\n cleanupAutoUpdate = autoUpdate(virtualEl, popup, updatePosition);\n },\n\n onUpdate: (props) => {\n component?.updateProps({\n items: props.items,\n command: (item: MentionItem) => {\n props.command({ id: item.id, label: item.label });\n },\n });\n\n // Refresh reference accessor so autoUpdate sees the new caret rect.\n getReferenceRect = () => props.clientRect?.() ?? null;\n updatePosition();\n },\n\n onKeyDown: (props) => {\n if (props.event.key === 'Escape') {\n teardown();\n return true;\n }\n return component?.ref?.onKeyDown(props.event as unknown as React.KeyboardEvent) ?? false;\n },\n\n onExit: () => {\n teardown();\n },\n };\n },\n };\n}\n","import type { MentionMarkdownRenderer } from './types';\n\n/**\n * Escape characters that have meaning in markdown link/inline contexts.\n * Conservative — covers the chars that would break `[text](url)` and\n * inline emphasis when a label contains them.\n */\nconst escapeMd = (s: string): string => s.replace(/([\\\\\\[\\]()_*~`])/g, '\\\\$1');\n\n/**\n * Built-in serializers for the `MentionConfig.renderMarkdown` callback.\n *\n * Pick one based on what consumes the markdown:\n *\n * - LLM / chat composer → `plainAt` (the default)\n * - Plain text export → `plainLabel`\n * - Web app with deep-link → `markdownLink(baseUrl)`\n * - Notion / Linear-style → `customUri(scheme, kind)`\n * - Slack-style id refs → `slackStyle`\n * - HTML-allowing renderer → `htmlSpan(className?)`\n *\n * Or pass a custom function — the type is just `(attrs) => string`.\n */\nexport const mentionPresets = {\n /** \"@Label\" — default, ideal for chat where LLMs read the text. */\n plainAt: (({ label, id }) => `@${label || id}`) as MentionMarkdownRenderer,\n\n /** \"Label\" — bare label, no @ prefix. */\n plainLabel: (({ label, id }) => label || id) as MentionMarkdownRenderer,\n\n /** \"[@Label](baseUrl/id)\" — clickable markdown link. */\n markdownLink: (baseUrl: string): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `[@${escapeMd(label || id)}](${baseUrl}${encodeURIComponent(id)})`,\n\n /** \"@[Label](scheme://kind/id)\" — Notion / Linear-style custom URI. */\n customUri: (scheme: string, kind: string): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `@[${escapeMd(label || id)}](${scheme}://${kind}/${encodeURIComponent(id)})`,\n\n /** \"<@id>\" — Slack-style id-only reference (label dropped — receivers resolve it). */\n slackStyle: (({ id }) => `<@${id}>`) as MentionMarkdownRenderer,\n\n /** Inline HTML span — for products that consume markdown with raw HTML allowed. */\n htmlSpan:\n (className = 'mention'): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `<span class=\"${className}\" data-mention-id=\"${encodeURIComponent(id)}\">@${escapeMd(label || id)}</span>`,\n};\n","'use client';\n\nimport { useEditor, EditorContent, type Editor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Mention from '@tiptap/extension-mention';\nimport { Markdown } from '@tiptap/markdown';\nimport type { AnyExtension } from '@tiptap/core';\nimport { useEffect, useRef, useMemo } from 'react';\nimport {\n Bold, Italic, Strikethrough, Heading1, Heading2, Heading3,\n List, ListOrdered, Quote, Minus, Code, type LucideIcon,\n} from 'lucide-react';\nimport { createMentionSuggestion } from './createMentionSuggestion';\nimport { mentionPresets } from './mentionPresets';\nimport type { MentionAttrs, MentionConfig } from './types';\nimport './styles.css';\n\n// ── Helpers ──\n\ninterface MarkdownManager {\n serialize: (json: Record<string, unknown>) => string;\n}\n\nfunction getMarkdown(editor: Editor): string {\n const storage = editor.storage.markdown as { manager?: MarkdownManager } | undefined;\n if (!storage?.manager) return editor.getText();\n return storage.manager.serialize(editor.getJSON());\n}\n\nfunction extractMentionIds(editor: Editor): string[] {\n const ids: string[] = [];\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'mention' && node.attrs.id) {\n ids.push(node.attrs.id as string);\n }\n });\n return [...new Set(ids)];\n}\n\n// ── Types ──\n\nexport interface MarkdownEditorProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n minHeight?: number;\n className?: string;\n disabled?: boolean;\n showToolbar?: boolean;\n /**\n * `@`-mention autocomplete config.\n *\n * IMPORTANT: Tiptap's `useEditor` initialises the editor exactly once.\n * The `Mention` extension is only registered when `mentions` is truthy\n * on the FIRST render — handing in a real config later (e.g. after an\n * async items fetch) silently does nothing, and typing `@` will not\n * open the popover.\n *\n * If you want mentions even with async-loaded items, pass\n * `{ items: [] }` from the very first render and update the array\n * when data arrives. Either keep the `MentionConfig` object identity\n * stable across renders and mutate `items` in place (the suggestion\n * plugin captures the config by closure and reads `items` on each\n * query), or accept that swapping the whole object reference is a\n * no-op for the live editor.\n */\n mentions?: MentionConfig;\n /** Called when mentioned IDs change */\n onMentionIdsChange?: (ids: string[]) => void;\n}\n\n// ── Component ──\n\nexport function MarkdownEditor({\n value,\n onChange,\n placeholder = 'Write markdown...',\n minHeight = 120,\n className = '',\n disabled = false,\n showToolbar = true,\n mentions,\n onMentionIdsChange,\n}: MarkdownEditorProps) {\n const isExternalUpdate = useRef(false);\n\n // ── Dev-mode trap detector ──\n // Tiptap initialises the editor once with the extensions array from\n // first render. If `mentions` is undefined on mount and becomes\n // truthy later, the Mention extension is never installed and the\n // user-visible @-trigger silently does nothing. Catch this early so\n // future consumers don't spend hours debugging why @ does nothing.\n const initialMentionsDefinedRef = useRef<boolean>(mentions !== undefined);\n const warnedRef = useRef(false);\n if (\n process.env.NODE_ENV !== 'production' &&\n !initialMentionsDefinedRef.current &&\n mentions !== undefined &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[MarkdownEditor] `mentions` flipped from undefined to a config ' +\n 'after mount. Tiptap only installs the Mention extension on first ' +\n 'render — the @-popover will NOT work for this editor instance. ' +\n 'Pass `{ items: [] }` from the very first render and mutate `.items` ' +\n 'in place instead.',\n );\n }\n\n const extensions = useMemo(() => {\n const exts: AnyExtension[] = [\n StarterKit.configure({ heading: { levels: [1, 2, 3] } }),\n Placeholder.configure({ placeholder }),\n Markdown,\n ];\n\n if (mentions) {\n // ── Why .extend() with renderMarkdown ──\n //\n // Tiptap's `Mention` extension ships a default markdown serializer\n // (via `createInlineMarkdownSpec`, see @tiptap/extension-mention)\n // that emits a shortcode like `[@ id=\"...\" label=\"...\"]`. That's\n // round-trippable but useless for most consumers: a chat composer\n // feeding an LLM wants `@<label>`, a deep-linking app wants a\n // markdown link, etc.\n //\n // `renderText` only affects `editor.getText()` and the rendered\n // node — it does NOT influence `@tiptap/markdown`'s serializer.\n // The serializer reads `renderMarkdown` off the extension config\n // (see MarkdownManager.registerExtension → getExtensionField).\n // Overriding it via `.extend({ renderMarkdown })` replaces the\n // shortcode output with whatever the consumer supplied (or the\n // `plainAt` default — see ./mentionPresets.ts).\n //\n // Renderer-choice capture: useEditor only initialises once, so the\n // chosen renderer is captured by closure on first render. This is\n // intentional — swapping renderers per render would mean tearing\n // the editor down anyway, which we don't do for any other prop.\n //\n // Round-trip note: we intentionally do NOT also override\n // `parseMarkdown` / `markdownTokenizer`. Once a mention is\n // serialized, parsing it back would need the original mention\n // items list to look up the id, which we don't have at parse time.\n // Mentions are write-only by design here — `setContent(value)`\n // after submit gets back a plain string, which is fine for the\n // chat use case.\n const renderMarkdown = mentions.renderMarkdown ?? mentionPresets.plainAt;\n exts.push(\n Mention.extend({\n renderMarkdown(node) {\n const raw = node.attrs as { label?: string | null; id?: string | null };\n const attrs: MentionAttrs = {\n id: raw?.id ?? '',\n label: raw?.label ?? '',\n };\n // Defensive: if both are empty (shouldn't happen for a real\n // mention node, but `setContent` of malformed data could),\n // emit nothing rather than a stray \"@\" or invalid link.\n if (!attrs.id && !attrs.label) return '';\n return renderMarkdown(attrs);\n },\n }).configure({\n HTMLAttributes: { class: 'markdown-mention' },\n suggestion: createMentionSuggestion(mentions),\n renderText: ({ node }) => `@${node.attrs.label}`,\n }),\n );\n }\n\n return exts;\n }, [placeholder, mentions]);\n\n const editor = useEditor({\n immediatelyRender: false,\n editable: !disabled,\n extensions,\n content: value,\n onUpdate: ({ editor }) => {\n if (isExternalUpdate.current) return;\n onChange(getMarkdown(editor));\n\n if (onMentionIdsChange) {\n onMentionIdsChange(extractMentionIds(editor));\n }\n },\n editorProps: {\n attributes: {\n class: 'markdown-editor-content focus:outline-none text-sm',\n style: `min-height: ${minHeight}px`,\n },\n },\n });\n\n useEffect(() => {\n if (!editor) return;\n const current = getMarkdown(editor);\n if (current !== value) {\n isExternalUpdate.current = true;\n editor.commands.setContent(value);\n isExternalUpdate.current = false;\n }\n }, [value, editor]);\n\n const wrapperClass = `markdown-editor rounded-md border border-input bg-background ${disabled ? 'opacity-60' : ''} ${className}`.trim();\n\n return (\n <div className={wrapperClass}>\n {showToolbar && editor && <MarkdownToolbar editor={editor} />}\n <div className=\"px-3 py-2\">\n <EditorContent editor={editor} />\n </div>\n </div>\n );\n}\n\n// ── Toolbar ──\n\ninterface ToolbarItem {\n icon: LucideIcon;\n action: () => void;\n active: boolean;\n title: string;\n}\n\nfunction MarkdownToolbar({ editor }: { editor: Editor }) {\n const items = useMemo<(ToolbarItem | null)[]>(() => [\n { icon: Bold, title: 'Bold', action: () => editor.chain().focus().toggleBold().run(), active: editor.isActive('bold') },\n { icon: Italic, title: 'Italic', action: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive('italic') },\n { icon: Strikethrough, title: 'Strike', action: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive('strike') },\n { icon: Code, title: 'Code', action: () => editor.chain().focus().toggleCode().run(), active: editor.isActive('code') },\n null,\n { icon: Heading1, title: 'H1', action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(), active: editor.isActive('heading', { level: 1 }) },\n { icon: Heading2, title: 'H2', action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(), active: editor.isActive('heading', { level: 2 }) },\n { icon: Heading3, title: 'H3', action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(), active: editor.isActive('heading', { level: 3 }) },\n null,\n { icon: List, title: 'Bullet list', action: () => editor.chain().focus().toggleBulletList().run(), active: editor.isActive('bulletList') },\n { icon: ListOrdered, title: 'Ordered list', action: () => editor.chain().focus().toggleOrderedList().run(), active: editor.isActive('orderedList') },\n { icon: Quote, title: 'Quote', action: () => editor.chain().focus().toggleBlockquote().run(), active: editor.isActive('blockquote') },\n { icon: Minus, title: 'Divider', action: () => editor.chain().focus().setHorizontalRule().run(), active: false },\n ], [editor]);\n\n return (\n <div className=\"flex items-center gap-0.5 px-2 py-1.5 border-b border-border\">\n {items.map((item, i) => {\n if (!item) return <div key={i} className=\"w-px h-4 bg-border mx-1\" />;\n const Icon = item.icon;\n const btnClass = `markdown-toolbar-btn ${item.active ? 'active' : ''}`;\n return (\n <button key={i} type=\"button\" onClick={item.action} title={item.title} className={btnClass}>\n <Icon style={{ width: 14, height: 14 }} />\n </button>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/lazy-wrapper.tsx","../src/tools/Map/lazy.tsx","../src/tools/Mermaid/lazy.tsx","../src/tools/PrettyCode/lazy.tsx","../src/tools/OpenapiViewer/lazy.tsx","../src/tools/JsonForm/lazy.tsx","../src/tools/LottiePlayer/lazy.tsx","../src/tools/AudioPlayer/lazy.tsx","../src/tools/VideoPlayer/lazy.tsx","../src/tools/JsonTree/lazy.tsx","../src/tools/ImageViewer/lazy.tsx","../src/tools/CronScheduler/lazy.tsx","../src/tools/Tree/lazy.tsx","../src/tools/Chat/lazy.tsx","../src/tools/Chat/core/transport/types.ts","../src/tools/Chat/core/transport/sse.ts","../src/tools/Chat/core/transport/http.ts","../src/tools/Chat/core/transport/mock.ts","../src/tools/Chat/hooks/useChatLightbox.ts","../src/tools/Chat/core/payload-dispatch.ts","../src/tools/Chat/utils/collectImageAttachments.ts","../src/tools/LottiePlayer/index.tsx","../src/tools/OpenapiViewer/index.tsx","../src/tools/CronScheduler/index.tsx","../src/tools/CodeEditor/workers/setup.ts","../src/tools/CodeEditor/hooks/useMonaco.ts","../src/tools/CodeEditor/hooks/useEditorTheme.ts","../src/tools/CodeEditor/components/Editor.tsx","../src/tools/CodeEditor/components/DiffEditor.tsx","../src/tools/CodeEditor/lib/languages.ts","../src/tools/CodeEditor/context/EditorProvider.tsx","../src/tools/CodeEditor/hooks/useEditor.ts","../src/tools/CodeEditor/hooks/useLanguage.ts","../src/tools/MarkdownEditor/MentionList.tsx","../src/tools/MarkdownEditor/createMentionSuggestion.ts","../src/tools/MarkdownEditor/mentionPresets.ts","../src/tools/MarkdownEditor/MarkdownEditor.tsx"],"names":["useAppT","jsx","cn","__name","jsxs","Suspense","React","PlaygroundProvider","__publicField","LIMITS","createId","useState","useCallback","lazy","LoadingFallback","useEffect","useResolvedTheme","useRef","s","forwardRef","Editor","useImperativeHandle","createContext","useContext","useMemo","computePosition","offset","flip","shift","ReactRenderer","autoUpdate","StarterKit","Placeholder","Markdown","Mention","useEditor","editor","EditorContent","Bold","Italic","Strikethrough","Code","Heading1","Heading2","Heading3","List","ListOrdered","Quote","Minus"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Suspense, type ReactNode, type ComponentType } from 'react';\nimport { cn } from '@djangocfg/ui-core/lib';\nimport { useAppT } from '@djangocfg/i18n';\n\n// ============================================================================\n// Loading Fallback Components\n// ============================================================================\n\nexport interface LoadingFallbackProps {\n /** Minimum height of the loading container */\n minHeight?: string | number;\n /** Show loading text */\n showText?: boolean;\n /** Custom loading text */\n text?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Spinner - Simple spinning loader\n */\nexport function Spinner({ className }: { className?: string }) {\n const t = useAppT();\n const loadingLabel = t('ui.states.loading');\n\n return (\n <div\n className={cn(\n 'inline-block h-8 w-8 animate-spin rounded-full',\n 'border-4 border-solid border-current border-r-transparent',\n 'align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite]',\n className\n )}\n role=\"status\"\n aria-label={loadingLabel}\n />\n );\n}\n\n/**\n * LoadingFallback - Default loading state for lazy components\n */\nexport function LoadingFallback({\n minHeight = 200,\n showText = true,\n text,\n className,\n}: LoadingFallbackProps) {\n const t = useAppT();\n const loadingText = text ?? t('ui.form.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'flex items-center justify-center bg-muted/30 rounded-lg',\n className\n )}\n style={{ minHeight: height }}\n >\n <div className=\"text-center\">\n <Spinner className=\"text-primary\" />\n {showText && (\n <p className=\"mt-3 text-sm text-muted-foreground\">{loadingText}</p>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * CardLoadingFallback - Loading state styled as a card\n */\nexport function CardLoadingFallback({\n title,\n description,\n minHeight = 200,\n className,\n}: {\n title?: string;\n description?: string;\n minHeight?: string | number;\n className?: string;\n}) {\n const t = useAppT();\n const cardTitle = title ?? t('ui.states.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'relative bg-card rounded-lg border border-border overflow-hidden',\n className\n )}\n >\n <div className=\"p-4 border-b border-border bg-muted/50\">\n <h6 className=\"text-sm font-semibold text-foreground\">{cardTitle}</h6>\n {description && (\n <p className=\"text-xs text-muted-foreground mt-1\">{description}</p>\n )}\n </div>\n <div className=\"p-4\">\n <div\n className=\"flex justify-center items-center\"\n style={{ minHeight: height }}\n >\n <Spinner className=\"text-primary\" />\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * MapLoadingFallback - Loading state for map components\n */\nexport function MapLoadingFallback({\n minHeight = 400,\n className,\n}: {\n minHeight?: string | number;\n className?: string;\n}) {\n const t = useAppT();\n const loadingText = t('ui.form.loading');\n const height = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n\n return (\n <div\n className={cn(\n 'relative bg-muted/50 rounded-lg overflow-hidden',\n 'flex items-center justify-center',\n className\n )}\n style={{ minHeight: height }}\n >\n <div className=\"text-center\">\n <div className=\"relative\">\n <Spinner className=\"text-primary h-10 w-10\" />\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n className=\"h-5 w-5 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </div>\n </div>\n <p className=\"mt-3 text-sm text-muted-foreground\">{loadingText}</p>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Wrapper\n// ============================================================================\n\nexport interface LazyWrapperProps {\n children: ReactNode;\n /** Custom fallback component */\n fallback?: ReactNode;\n /** Use card-style fallback */\n card?: boolean;\n /** Card title (when card=true) */\n cardTitle?: string;\n /** Card description (when card=true) */\n cardDescription?: string;\n /** Minimum height for fallback */\n minHeight?: string | number;\n /** Additional CSS classes for fallback */\n className?: string;\n}\n\n/**\n * LazyWrapper - Suspense wrapper with configurable fallbacks\n *\n * @example\n * // Basic usage\n * <LazyWrapper>\n * <LazyComponent />\n * </LazyWrapper>\n *\n * @example\n * // Card style fallback\n * <LazyWrapper card cardTitle=\"Diagram\" minHeight={300}>\n * <Mermaid chart={...} />\n * </LazyWrapper>\n *\n * @example\n * // Custom fallback\n * <LazyWrapper fallback={<MyCustomLoader />}>\n * <HeavyComponent />\n * </LazyWrapper>\n */\nexport function LazyWrapper({\n children,\n fallback,\n card = false,\n cardTitle,\n cardDescription,\n minHeight = 200,\n className,\n}: LazyWrapperProps) {\n const defaultFallback = card ? (\n <CardLoadingFallback\n title={cardTitle}\n description={cardDescription}\n minHeight={minHeight}\n className={className}\n />\n ) : (\n <LoadingFallback minHeight={minHeight} className={className} />\n );\n\n return <Suspense fallback={fallback ?? defaultFallback}>{children}</Suspense>;\n}\n\n// ============================================================================\n// Lazy Component Factory\n// ============================================================================\n\nexport interface CreateLazyComponentOptions<P> {\n /** Loading fallback component */\n fallback?: ReactNode | ((props: P) => ReactNode);\n /** Display name for the component */\n displayName?: string;\n}\n\n/**\n * createLazyComponent - Factory for creating lazy-loaded components\n *\n * @example\n * const LazyMermaid = createLazyComponent(\n * () => import('./Mermaid.client'),\n * {\n * displayName: 'Mermaid',\n * fallback: <CardLoadingFallback title=\"Diagram\" />,\n * }\n * );\n */\nexport function createLazyComponent<P extends object>(\n loader: () => Promise<{ default: ComponentType<P> }>,\n options: CreateLazyComponentOptions<P> = {}\n): ComponentType<P> {\n const LazyComponent = React.lazy(loader);\n\n const WrappedComponent = (props: P) => {\n const fallback =\n typeof options.fallback === 'function'\n ? options.fallback(props)\n : options.fallback ?? <LoadingFallback />;\n\n return (\n <Suspense fallback={fallback}>\n <LazyComponent {...props} />\n </Suspense>\n );\n };\n\n WrappedComponent.displayName = options.displayName ?? 'LazyComponent';\n\n return WrappedComponent;\n}\n","'use client';\n\n/**\n * Lazy-loaded Map Components\n *\n * Heavy MapLibre GL (~800KB) is loaded only when components are rendered.\n * Use these for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { MapContainer } from '@djangocfg/ui-tools/map'\n */\n\nimport * as React from 'react';\nimport { createLazyComponent, MapLoadingFallback } from '../../components';\n\n// ============================================================================\n// Lazy Components\n// ============================================================================\n\n/**\n * LazyMapContainer - Lazy-loaded map container\n *\n * Automatically shows loading state while MapLibre GL loads (~800KB)\n */\nexport const LazyMapContainer = createLazyComponent(\n () => import('./components/MapContainer').then((mod) => ({ default: mod.MapContainer })),\n {\n displayName: 'LazyMapContainer',\n fallback: <MapLoadingFallback minHeight={400} />,\n }\n);\n\n/**\n * LazyMapView - Lazy-loaded map view (alias for MapContainer)\n */\nexport const LazyMapView = createLazyComponent(\n () => import('./components/MapContainer').then((mod) => ({ default: mod.MapView })),\n {\n displayName: 'LazyMapView',\n fallback: <MapLoadingFallback minHeight={400} />,\n }\n);\n\n// ============================================================================\n// Re-export types for convenience\n// ============================================================================\n\nexport type {\n MapContainerProps,\n} from './components';\n\nexport type {\n MapViewport,\n MapStyleKey,\n MarkerData,\n} from './types';\n","'use client';\n\n/**\n * Lazy-loaded Mermaid Component\n *\n * Heavy Mermaid library (~800KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import Mermaid from '@djangocfg/ui-tools/mermaid'\n */\n\nimport { createLazyComponent, CardLoadingFallback } from '../../components';\nimport type { MermaidProps } from './index';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type { MermaidProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyMermaid - Lazy-loaded Mermaid diagram renderer\n *\n * Automatically shows loading state while Mermaid loads (~800KB)\n */\nexport const LazyMermaid = createLazyComponent<MermaidProps>(\n () => import('./Mermaid.client'),\n {\n displayName: 'LazyMermaid',\n fallback: (\n <CardLoadingFallback\n title=\"Diagram\"\n description=\"Loading...\"\n minHeight={200}\n />\n ),\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded PrettyCode Component\n *\n * Heavy Prism library (~500KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import PrettyCode from '@djangocfg/ui-tools/pretty-code'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { Language } from 'prism-react-renderer';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string;\n isCompact?: boolean;\n scrollIsolation?: boolean;\n maxLines?: number;\n /** ``'card'`` (default) ships the full chrome. ``'plain'`` is\n * chrome-less — for embedding inside another scroll container. */\n variant?: 'card' | 'plain';\n}\n\nexport type { Language };\n\n// ============================================================================\n// Code Loading Fallback\n// ============================================================================\n\nfunction CodeLoadingFallback() {\n return (\n <div className=\"relative rounded-sm border border-border overflow-hidden bg-muted dark:bg-zinc-900\">\n <div className=\"p-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-pulse h-4 w-4 rounded-full bg-muted-foreground/20\" />\n <span className=\"text-xs text-muted-foreground\">Loading code...</span>\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyPrettyCode - Lazy-loaded code syntax highlighter\n *\n * Automatically shows loading state while Prism loads (~500KB)\n */\nexport const LazyPrettyCode = createLazyComponent<PrettyCodeProps>(\n () => import('./PrettyCode.client'),\n {\n displayName: 'LazyPrettyCode',\n fallback: <CodeLoadingFallback />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded OpenapiViewer Component\n *\n * Heavy OpenAPI viewer (~400KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import OpenapiViewer from '@djangocfg/ui-tools/openapi'\n */\n\nimport * as React from 'react';\nimport { createLazyComponent } from '../../components';\nimport { PlaygroundProvider } from './context/PlaygroundContext';\nimport type { ApiKey, PlaygroundConfig, SchemaSource } from './types';\n\nexport interface PlaygroundProps {\n config: PlaygroundConfig;\n}\n\nexport type { ApiKey, PlaygroundConfig, SchemaSource };\n\nfunction OpenapiLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center min-h-[400px] bg-muted/30 rounded-lg\">\n <div className=\"text-center\">\n <div className=\"inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-primary border-r-transparent\" />\n <p className=\"mt-3 text-sm text-muted-foreground\">Loading API Playground...</p>\n </div>\n </div>\n );\n}\n\nconst LazyDocsLayout = createLazyComponent(\n () => import('./components/DocsLayout').then((mod) => ({ default: mod.DocsLayout })),\n {\n displayName: 'LazyDocsLayout',\n fallback: <OpenapiLoadingFallback />,\n }\n);\n\nexport const LazyOpenapiViewer: React.FC<PlaygroundProps> = ({ config }) => {\n return (\n <PlaygroundProvider config={config}>\n <LazyDocsLayout />\n </PlaygroundProvider>\n );\n};\n\nLazyOpenapiViewer.displayName = 'LazyOpenapiViewer';\n","'use client';\n\n/**\n * Lazy-loaded JsonForm Component\n *\n * Heavy JSON Schema Form (~300KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { JsonSchemaForm } from '@djangocfg/ui-tools/json-form'\n */\n\nimport { createLazyComponent, CardLoadingFallback } from '../../components';\nimport type { JsonSchemaFormProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { JsonSchemaFormProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyJsonSchemaForm - Lazy-loaded JSON Schema form generator\n *\n * Automatically shows loading state while RJSF loads (~300KB)\n */\nexport const LazyJsonSchemaForm = createLazyComponent<JsonSchemaFormProps>(\n () => import('./JsonSchemaForm').then((mod) => ({ default: mod.JsonSchemaForm })),\n {\n displayName: 'LazyJsonSchemaForm',\n fallback: (\n <CardLoadingFallback\n title=\"Form\"\n description=\"Loading form schema...\"\n minHeight={200}\n />\n ),\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded LottiePlayer Component\n *\n * Lottie library (~200KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { LottiePlayer } from '@djangocfg/ui-tools/lottie'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { LottiePlayerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type {\n LottiePlayerProps,\n LottieSize,\n LottieSpeed,\n LottieDirection,\n} from './types';\n\n// ============================================================================\n// Lottie Loading Fallback\n// ============================================================================\n\nfunction LottieLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-muted border-t-primary\" />\n <span className=\"text-sm text-muted-foreground\">Loading animation...</span>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyLottiePlayer - Lazy-loaded Lottie animation player\n *\n * Automatically shows loading state while Lottie loads (~200KB)\n */\nexport const LazyLottiePlayer = createLazyComponent<LottiePlayerProps>(\n () => import('./LottiePlayer.client').then((mod) => ({ default: mod.LottiePlayer })),\n {\n displayName: 'LazyLottiePlayer',\n fallback: <LottieLoadingFallback />,\n }\n);\n","'use client';\n\nimport { createLazyComponent } from '../../components';\nimport type { PlayerProps } from './types';\n\nexport const LazyPlayer = createLazyComponent<PlayerProps>(\n () => import('./Player').then((mod) => ({ default: mod.Player })),\n {\n displayName: 'LazyAudioPlayer',\n fallback: (\n <div className=\"rounded-lg border border-border/60 bg-card px-4 py-6 text-sm text-muted-foreground\">\n Loading audio player…\n </div>\n ),\n },\n);\n","'use client';\n\n/**\n * Lazy-loaded VideoPlayer Component\n *\n * Heavy Vidstack (~150KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { VideoPlayer } from '@djangocfg/ui-tools/video'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { VideoPlayerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { VideoPlayerProps };\n\n// ============================================================================\n// Video Loading Fallback\n// ============================================================================\n\nfunction VideoLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center bg-black/90 rounded-lg aspect-video\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"relative\">\n <div className=\"h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-white\" />\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n className=\"h-5 w-5 text-white/60\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </div>\n </div>\n <span className=\"text-sm text-white/60\">Loading video player...</span>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyVideoPlayer - Lazy-loaded professional video player\n *\n * Automatically shows loading state while Vidstack loads (~150KB)\n */\nexport const LazyVideoPlayer = createLazyComponent<VideoPlayerProps>(\n () => import('./components').then((mod) => ({ default: mod.VideoPlayer })),\n {\n displayName: 'LazyVideoPlayer',\n fallback: <VideoLoadingFallback />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded JsonTree Component\n *\n * JsonTree (~100KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import JsonTree from '@djangocfg/ui-tools/json-tree'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { JsonTreeConfig, JsonTreeMode } from './index';\nimport type { CommonExternalProps } from 'react-json-tree';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface JsonTreeProps {\n title?: string;\n data: unknown;\n /**\n * Display mode:\n * - \"full\" (default): With toolbar and border\n * - \"compact\": No toolbar, subtle styling\n * - \"inline\": Minimal, no border\n */\n mode?: JsonTreeMode;\n config?: JsonTreeConfig;\n jsonTreeProps?: Partial<CommonExternalProps>;\n}\n\nexport type { JsonTreeConfig, JsonTreeMode };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyJsonTree - Lazy-loaded JSON visualization tree\n *\n * Automatically shows loading state while JsonTree loads (~100KB)\n *\n * @example\n * // Full mode (with toolbar)\n * <LazyJsonTree data={obj} mode=\"full\" />\n *\n * // Compact mode (no toolbar)\n * <LazyJsonTree data={obj} mode=\"compact\" />\n *\n * // Inline mode (minimal, for embedding)\n * <LazyJsonTree data={obj} mode=\"inline\" />\n */\nexport const LazyJsonTree = createLazyComponent<JsonTreeProps>(\n () => import('./index'),\n {\n displayName: 'LazyJsonTree',\n fallback: <LoadingFallback minHeight={100} text=\"Loading JSON viewer...\" />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded ImageViewer Component\n *\n * ImageViewer (~50KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * For direct imports without lazy loading, use:\n * import { ImageViewer } from '@djangocfg/ui-tools/image-viewer'\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { ImageViewerProps } from './types';\n\n// ============================================================================\n// Re-export types\n// ============================================================================\n\nexport type { ImageViewerProps };\n\n// ============================================================================\n// Lazy Component\n// ============================================================================\n\n/**\n * LazyImageViewer - Lazy-loaded image viewer with zoom/pan/rotate\n *\n * Automatically shows loading state while ImageViewer loads (~50KB)\n */\nexport const LazyImageViewer = createLazyComponent<ImageViewerProps>(\n () => import('./components').then((mod) => ({ default: mod.ImageViewer })),\n {\n displayName: 'LazyImageViewer',\n fallback: <LoadingFallback minHeight={200} text=\"Loading image viewer...\" />,\n }\n);\n","'use client';\n\n/**\n * Lazy-loaded CronScheduler Component\n *\n * CronScheduler (~15KB) is loaded only when component is rendered.\n * Use this for automatic code-splitting with Suspense fallback.\n *\n * @example\n * import { LazyCronScheduler } from '@djangocfg/ui-tools';\n *\n * <LazyCronScheduler\n * value={cron}\n * onChange={setCron}\n * />\n */\n\nimport { createLazyComponent, LoadingFallback } from '../../components';\nimport type { CronSchedulerProps } from './types';\n\n// Re-export types\nexport type {\n CronSchedulerProps,\n ScheduleType,\n WeekDay,\n MonthDay,\n CronSchedulerState,\n} from './types';\n\n/**\n * LazyCronScheduler - Lazy-loaded cron expression builder\n *\n * Automatically shows loading state while CronScheduler loads (~15KB).\n * Uses createLazyComponent factory for optimal code-splitting.\n *\n * @example\n * // Basic usage\n * <LazyCronScheduler\n * value=\"0 9 * * *\"\n * onChange={handleChange}\n * />\n *\n * @example\n * // With all options\n * <LazyCronScheduler\n * value={cron}\n * onChange={setCron}\n * defaultType=\"weekly\"\n * showPreview\n * showCronExpression\n * allowCopy\n * timeFormat=\"24h\"\n * />\n */\nexport const LazyCronScheduler = createLazyComponent<CronSchedulerProps>(\n () => import('./CronScheduler.client'),\n {\n displayName: 'LazyCronScheduler',\n fallback: (\n <LoadingFallback\n minHeight={120}\n showText={false}\n className=\"rounded-lg\"\n />\n ),\n }\n);\n","'use client';\n\nimport { createLazyComponent, LoadingFallback } from '../../components/lazy-wrapper';\nimport type { TreeRootProps } from './types';\n\nexport const LazyTree = createLazyComponent<TreeRootProps<unknown>>(\n () => import('./TreeRoot'),\n {\n displayName: 'LazyTree',\n fallback: <LoadingFallback minHeight={200} text=\"Loading tree…\" />,\n },\n);\n\nexport type { TreeRootProps };\n","'use client';\n\nimport { createLazyComponent, LoadingFallback } from '../../components/lazy-wrapper';\nimport type { ChatRootProps } from './components/ChatRoot';\n\nexport const LazyChat = createLazyComponent<ChatRootProps>(\n () => import('./components/ChatRoot').then((m) => ({ default: m.ChatRoot })),\n {\n displayName: 'LazyChat',\n fallback: <LoadingFallback minHeight={320} text=\"Loading chat…\" />,\n },\n);\n\nexport type { ChatRootProps };\n","/**\n * Transport surface re-export. Lives in core so transport implementations\n * never need to reach into the public types module.\n */\n\nexport type {\n ChatTransport,\n ChatStreamEvent,\n CreateSessionOptions,\n SessionInfo,\n HistoryPage,\n StreamOptions,\n SendOptions,\n} from '../../types';\n\nexport class TransportError extends Error {\n code: string;\n\n constructor(message: string, code = 'transport_error') {\n super(message);\n this.name = 'TransportError';\n this.code = code;\n }\n}\n","/**\n * Server-Sent Events parser as an AsyncGenerator.\n *\n * Yields parsed events from a `Response` body. Handles the split-read case\n * where `event:` and `data:` arrive in separate TCP packets. Skips malformed\n * JSON gracefully. Honors AbortSignal (caller passes one to fetch).\n */\n\nimport type { ChatStreamEvent } from '../../types';\nimport { LIMITS } from '../../config';\n\ninterface RawEvent {\n event?: string;\n data?: string;\n}\n\nexport interface ParseSSEOptions {\n signal?: AbortSignal;\n /** Map a raw SSE event to a ChatStreamEvent. Default: parse `data` as JSON\n * and assume the JSON shape already matches `ChatStreamEvent`. */\n map?: (raw: RawEvent) => ChatStreamEvent | null;\n idleTimeoutMs?: number;\n}\n\nconst DEFAULT_MAP = (raw: RawEvent): ChatStreamEvent | null => {\n if (!raw.data) return null;\n try {\n const parsed = JSON.parse(raw.data) as ChatStreamEvent;\n if (raw.event && !('type' in parsed)) {\n return { ...(parsed as object), type: raw.event } as ChatStreamEvent;\n }\n return parsed;\n } catch {\n return null;\n }\n};\n\nexport async function* parseSSE(\n response: Response,\n options: ParseSSEOptions = {},\n): AsyncGenerator<ChatStreamEvent, void, void> {\n if (!response.body) {\n throw new Error('SSE response has no body');\n }\n\n const map = options.map ?? DEFAULT_MAP;\n const idleMs = options.idleTimeoutMs ?? LIMITS.sseIdleMs;\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n let lastChunkAt = Date.now();\n\n const idleCheck = () => {\n if (Date.now() - lastChunkAt > idleMs) {\n throw new Error(`SSE idle timeout (${idleMs}ms)`);\n }\n };\n\n try {\n while (true) {\n if (options.signal?.aborted) {\n return;\n }\n const { value, done } = await reader.read();\n if (done) break;\n\n lastChunkAt = Date.now();\n buffer += decoder.decode(value, { stream: true });\n\n // Split on blank line which delimits SSE events.\n let separator = buffer.indexOf('\\n\\n');\n while (separator !== -1) {\n const rawBlock = buffer.slice(0, separator);\n buffer = buffer.slice(separator + 2);\n\n const raw = parseEventBlock(rawBlock);\n const evt = map(raw);\n if (evt) yield evt;\n\n separator = buffer.indexOf('\\n\\n');\n }\n\n idleCheck();\n }\n\n // Flush any trailing partial event.\n if (buffer.trim()) {\n const raw = parseEventBlock(buffer);\n const evt = map(raw);\n if (evt) yield evt;\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n /* ignore */\n }\n }\n}\n\nfunction parseEventBlock(block: string): RawEvent {\n const out: RawEvent = {};\n const lines = block.split(/\\r?\\n/);\n const dataLines: string[] = [];\n for (const line of lines) {\n if (!line || line.startsWith(':')) continue;\n const colon = line.indexOf(':');\n if (colon === -1) continue;\n const field = line.slice(0, colon).trim();\n const value = line.slice(colon + 1).replace(/^ /, '');\n if (field === 'event') out.event = value;\n else if (field === 'data') dataLines.push(value);\n }\n if (dataLines.length) out.data = dataLines.join('\\n');\n return out;\n}\n","/**\n * HTTP + SSE transport. Default implementation for web hosts.\n *\n * Backend contract (see @dev/@refactoring7-chat/06-integration.md):\n * POST /sessions → SessionInfo (JSON)\n * GET /sessions/:id/history?cursor= → HistoryPage (JSON)\n * POST /sessions/:id/messages → SSE stream of ChatStreamEvent\n * POST /sessions/:id/messages/buffered → ChatMessage (JSON, fallback)\n * DELETE /sessions/:id → 204\n */\n\nimport type {\n ChatMessage,\n ChatStreamEvent,\n ChatTransport,\n CreateSessionOptions,\n HistoryPage,\n SendOptions,\n SessionInfo,\n StreamOptions,\n} from '../../types';\nimport { TransportError } from './types';\nimport { parseSSE } from './sse';\n\nexport interface HttpTransportConfig {\n /** Base URL without trailing slash, e.g. '/api/chat' or 'https://api.example.com/v1/chat'. */\n baseUrl: string;\n /** Optional slug appended/forwarded as project identifier. */\n slug?: string;\n /** Returns headers applied to every request — e.g. Authorization. */\n getAuthHeader?: () => Record<string, string> | Promise<Record<string, string>>;\n /** Default fetch timeout (per non-streaming request). */\n timeoutMs?: number;\n /** Override fetch implementation (useful for tests or custom retry layers). */\n fetchImpl?: typeof fetch;\n}\n\nconst DEFAULT_TIMEOUT = 20_000;\n\nasync function jsonOrThrow<T>(res: Response, label: string): Promise<T> {\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new TransportError(\n `${label} failed (${res.status}): ${text || res.statusText}`,\n mapStatusToCode(res.status),\n );\n }\n try {\n return (await res.json()) as T;\n } catch {\n throw new TransportError(`${label} returned invalid JSON`, 'invalid_response');\n }\n}\n\nfunction mapStatusToCode(status: number): string {\n if (status === 401) return 'unauthorized';\n if (status === 403) return 'forbidden';\n if (status === 404) return 'not_found';\n if (status === 429) return 'rate_limited';\n if (status >= 500) return 'server_error';\n return 'http_error';\n}\n\nfunction withTimeout(signal: AbortSignal | undefined, timeoutMs: number): AbortSignal {\n const ctrl = new AbortController();\n const onAbort = () => ctrl.abort();\n signal?.addEventListener('abort', onAbort, { once: true });\n setTimeout(() => ctrl.abort(), timeoutMs);\n return ctrl.signal;\n}\n\nexport function createHttpTransport(config: HttpTransportConfig): ChatTransport {\n const fetchImpl = config.fetchImpl ?? fetch;\n const timeout = config.timeoutMs ?? DEFAULT_TIMEOUT;\n const base = config.baseUrl.replace(/\\/$/, '');\n\n async function buildHeaders(extra?: Record<string, string>): Promise<Record<string, string>> {\n const auth = (await config.getAuthHeader?.()) ?? {};\n return {\n 'Content-Type': 'application/json',\n ...auth,\n ...(extra ?? {}),\n };\n }\n\n return {\n async createSession(opts?: CreateSessionOptions): Promise<SessionInfo> {\n const res = await fetchImpl(`${base}/sessions`, {\n method: 'POST',\n headers: await buildHeaders(),\n body: JSON.stringify({ slug: config.slug, metadata: opts?.metadata ?? {} }),\n signal: withTimeout(undefined, timeout),\n });\n return jsonOrThrow<SessionInfo>(res, 'createSession');\n },\n\n async loadHistory(sessionId, cursor, limit): Promise<HistoryPage> {\n const params = new URLSearchParams();\n if (cursor) params.set('cursor', cursor);\n if (limit) params.set('limit', String(limit));\n const url = `${base}/sessions/${encodeURIComponent(sessionId)}/history${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n const res = await fetchImpl(url, {\n method: 'GET',\n headers: await buildHeaders(),\n signal: withTimeout(undefined, timeout),\n });\n return jsonOrThrow<HistoryPage>(res, 'loadHistory');\n },\n\n async *stream(\n sessionId: string,\n content: string,\n options: StreamOptions,\n ): AsyncGenerator<ChatStreamEvent, void, void> {\n const url = `${base}/sessions/${encodeURIComponent(sessionId)}/messages`;\n const res = await fetchImpl(url, {\n method: 'POST',\n headers: await buildHeaders({ Accept: 'text/event-stream' }),\n body: JSON.stringify({\n content,\n attachments: options.attachments ?? [],\n metadata: options.metadata ?? {},\n }),\n signal: options.signal,\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new TransportError(\n `stream failed (${res.status}): ${text || res.statusText}`,\n mapStatusToCode(res.status),\n );\n }\n\n yield* parseSSE(res, { signal: options.signal });\n },\n\n async send(sessionId, content, options?: SendOptions): Promise<ChatMessage> {\n const url = `${base}/sessions/${encodeURIComponent(sessionId)}/messages/buffered`;\n const res = await fetchImpl(url, {\n method: 'POST',\n headers: await buildHeaders(),\n body: JSON.stringify({\n content,\n attachments: options?.attachments ?? [],\n metadata: options?.metadata ?? {},\n }),\n signal: options?.signal ?? withTimeout(undefined, timeout),\n });\n return jsonOrThrow<ChatMessage>(res, 'send');\n },\n\n async closeSession(sessionId: string): Promise<void> {\n const url = `${base}/sessions/${encodeURIComponent(sessionId)}`;\n const res = await fetchImpl(url, {\n method: 'DELETE',\n headers: await buildHeaders(),\n signal: withTimeout(undefined, timeout),\n });\n if (!res.ok && res.status !== 404) {\n throw new TransportError(`closeSession failed (${res.status})`, mapStatusToCode(res.status));\n }\n },\n };\n}\n","/**\n * In-memory chat transport for stories and tests. Replays scripted replies.\n */\n\nimport type {\n ChatMessage,\n ChatStreamEvent,\n ChatTransport,\n CreateSessionOptions,\n HistoryPage,\n SendOptions,\n SessionInfo,\n StreamOptions,\n} from '../../types';\nimport { createId } from '../ids';\n\nexport interface MockTransportOptions {\n /** Each entry is the assistant's reply for one user turn. Strings are split\n * into chunks; arrays are taken as the exact event sequence (after a\n * prepended `message_start` and before a synthetic `message_end`). */\n replies?: Array<string | ChatStreamEvent[]>;\n latencyMs?: number;\n /** Initial history returned by `createSession`. */\n initialMessages?: ChatMessage[];\n shouldFail?: (attempt: number) => boolean;\n}\n\nconst DEFAULT_REPLY = 'Hi there!';\n\nfunction splitForStream(text: string, parts = 4): string[] {\n if (!text) return [];\n const chunkSize = Math.max(1, Math.ceil(text.length / parts));\n const out: string[] = [];\n for (let i = 0; i < text.length; i += chunkSize) {\n out.push(text.slice(i, i + chunkSize));\n }\n return out;\n}\n\nconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nexport function createMockTransport(opts: MockTransportOptions = {}): ChatTransport {\n const replies = opts.replies?.length ? opts.replies : [DEFAULT_REPLY];\n const latency = opts.latencyMs ?? 30;\n const history: ChatMessage[] = [...(opts.initialMessages ?? [])];\n let turn = 0;\n let attempt = 0;\n\n return {\n async createSession(_opts?: CreateSessionOptions): Promise<SessionInfo> {\n await sleep(latency);\n return {\n sessionId: createId('s'),\n messages: history.length ? [...history] : undefined,\n hasMore: false,\n cursor: null,\n resumed: history.length > 0,\n };\n },\n\n async loadHistory(_sid, _cursor, _limit): Promise<HistoryPage> {\n await sleep(latency);\n return { messages: [], hasMore: false, nextCursor: null };\n },\n\n async *stream(\n _sid: string,\n content: string,\n options: StreamOptions,\n ): AsyncGenerator<ChatStreamEvent, void, void> {\n attempt += 1;\n if (opts.shouldFail?.(attempt)) {\n throw new Error('mock transport scripted failure');\n }\n\n // Record the user message for any subsequent loadHistory.\n history.push({\n id: createId('u'),\n role: 'user',\n content,\n createdAt: Date.now(),\n });\n\n const messageId = createId('a');\n yield { type: 'message_start', messageId, sessionId: _sid };\n\n const reply = replies[turn % replies.length];\n turn += 1;\n\n if (typeof reply === 'string') {\n for (const piece of splitForStream(reply)) {\n if (options.signal.aborted) return;\n await sleep(latency);\n yield { type: 'chunk', delta: piece };\n }\n yield { type: 'message_end', tokensIn: content.length, tokensOut: reply.length };\n } else {\n for (const ev of reply) {\n if (options.signal.aborted) return;\n await sleep(latency);\n yield ev;\n }\n // If the script didn't end the message itself, do it for them.\n const lastType = reply[reply.length - 1]?.type;\n if (lastType !== 'message_end' && lastType !== 'error') {\n yield { type: 'message_end' };\n }\n }\n },\n\n async send(_sid, content, _options?: SendOptions): Promise<ChatMessage> {\n await sleep(latency);\n const reply = replies[turn % replies.length];\n turn += 1;\n const text =\n typeof reply === 'string'\n ? reply\n : reply\n .filter((e) => e.type === 'chunk')\n .map((e) => (e as { delta: string }).delta)\n .join('');\n return {\n id: createId('a'),\n role: 'assistant',\n content: text || DEFAULT_REPLY,\n createdAt: Date.now(),\n };\n },\n\n async closeSession(_sid: string): Promise<void> {\n // no-op\n },\n };\n}\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport type { ChatAttachment } from '../types';\n\nexport type ChatLightboxScope = 'message' | 'conversation';\n\nexport interface ChatLightboxState {\n gallery: ChatAttachment[];\n index: number;\n}\n\nexport interface UseChatLightboxReturn {\n state: ChatLightboxState | null;\n open: (att: ChatAttachment, gallery?: ChatAttachment[]) => void;\n close: () => void;\n}\n\n/** Tiny state container for an image lightbox. The host owns the modal +\n * `<LazyImageViewer>` mount; we just track which gallery to show. */\nexport function useChatLightbox(): UseChatLightboxReturn {\n const [state, setState] = useState<ChatLightboxState | null>(null);\n\n const open = useCallback((att: ChatAttachment, gallery?: ChatAttachment[]) => {\n const list = gallery && gallery.length ? gallery : [att];\n const idx = list.findIndex((a) => a.id === att.id);\n setState({ gallery: list, index: idx === -1 ? 0 : idx });\n }, []);\n\n const close = useCallback(() => setState(null), []);\n\n return { state, open, close };\n}\n","// Tiny dispatcher for tool-call payload renderers.\n//\n// Hosts compose matchers (predicate + render) and a fallback. The result is a\n// `renderPayload` function compatible with `<ToolCalls renderPayload>`.\n//\n// Pure — no React, no DOM. The matchers themselves return ReactNode.\n\nimport type { ReactNode } from 'react';\n\nimport type { ChatToolCall } from '../types';\nimport type { ToolPayloadKind } from '../components/ToolCalls';\n\nexport interface ToolPayloadMatcher {\n /** Cheap predicate. First match wins. */\n match: (value: unknown, kind: ToolPayloadKind, call: ChatToolCall) => boolean;\n render: (value: unknown, kind: ToolPayloadKind, call: ChatToolCall) => ReactNode;\n}\n\nexport type ToolPayloadFallback = (\n value: unknown,\n kind: ToolPayloadKind,\n call: ChatToolCall,\n) => ReactNode;\n\nexport function dispatchToolPayload(\n matchers: ToolPayloadMatcher[],\n fallback: ToolPayloadFallback,\n): ToolPayloadFallback {\n return (value, kind, call) => {\n for (const m of matchers) {\n if (m.match(value, kind, call)) return m.render(value, kind, call);\n }\n return fallback(value, kind, call);\n };\n}\n\n// ---- Common matcher predicates -------------------------------------------\n// Re-export as building blocks. Hosts can use directly or compose.\n\nexport function isPlainObject(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport function isLatLng(v: unknown): v is { lat: number; lng: number } {\n return isPlainObject(v) && typeof v.lat === 'number' && typeof v.lng === 'number';\n}\n\nexport function isGeoJSONFeatureCollection(v: unknown): v is { type: 'FeatureCollection'; features: unknown[] } {\n return isPlainObject(v) && v.type === 'FeatureCollection' && Array.isArray(v.features);\n}\n\nexport function isStringValue(v: unknown): v is string {\n return typeof v === 'string';\n}\n","import type { ChatAttachment, ChatMessage } from '../types';\n\n/** Walk the conversation and collect image attachments in chronological order. */\nexport function collectImageAttachments(messages: ChatMessage[]): ChatAttachment[] {\n const out: ChatAttachment[] = [];\n for (const m of messages) {\n if (!m.attachments) continue;\n for (const a of m.attachments) {\n if (a.type === 'image') out.push(a);\n }\n }\n return out;\n}\n","/**\n * LottiePlayer - Dynamic Import Wrapper\n *\n * Lazy loads the LottiePlayer component for optimal bundle size\n */\n\n'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport { LottiePlayerProps } from './types';\n\n// Lazy load the client component\nconst LottiePlayerClient = lazy(() =>\n import('./LottiePlayer.client').then((mod) => ({ default: mod.LottiePlayer }))\n);\n\n// Loading fallback component\nconst LoadingFallback = () => (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-4 border-gray-300 border-t-gray-900\" />\n <span className=\"text-sm text-gray-500\">Loading player...</span>\n </div>\n </div>\n);\n\n/**\n * LottiePlayer component wrapper with dynamic import\n *\n * This component automatically handles code splitting and lazy loading\n * of the Lottie player to optimize bundle size.\n *\n * Usage:\n * ```tsx\n * import { LottiePlayer } from '@djangocfg/ui-core/tools';\n *\n * <LottiePlayer\n * src=\"https://example.com/animation.json\"\n * size=\"md\"\n * autoplay\n * loop\n * />\n * ```\n */\nexport function LottiePlayer(props: LottiePlayerProps) {\n return (\n <Suspense fallback={<LoadingFallback />}>\n <LottiePlayerClient {...props} />\n </Suspense>\n );\n}\n\n// Re-export types for convenience\nexport type { LottiePlayerProps, LottieSize, LottieSpeed, LottieDirection } from './types';\nexport { useLottie } from './useLottie';\nexport type { UseLottieOptions, UseLottieReturn } from './useLottie';\n","'use client';\n\nimport React, { lazy, Suspense } from 'react';\nimport { PlaygroundProvider } from './context/PlaygroundContext';\nimport type { PlaygroundConfig } from './types';\n\nconst DocsLayout = lazy(() =>\n import('./components/DocsLayout').then((mod) => ({ default: mod.DocsLayout }))\n);\n\nconst LoadingFallback = () => (\n <div className=\"flex items-center justify-center min-h-[400px]\">\n <div className=\"text-muted-foreground\">Loading API Playground...</div>\n </div>\n);\n\nexport interface PlaygroundProps {\n config: PlaygroundConfig;\n}\n\nexport const Playground: React.FC<PlaygroundProps> = ({ config }) => {\n return (\n <PlaygroundProvider config={config}>\n <Suspense fallback={<LoadingFallback />}>\n <DocsLayout />\n </Suspense>\n </PlaygroundProvider>\n );\n};\n\nexport type { PlaygroundConfig, SchemaSource } from './types';\n\nexport default Playground;\n","'use client';\n\n/**\n * CronScheduler\n *\n * Compact cron expression builder following Apple HIG principles.\n * Lazy-loaded for optimal bundle size (~15KB).\n *\n * @example\n * import { CronScheduler } from '@djangocfg/ui-tools';\n *\n * <CronScheduler\n * value={cron}\n * onChange={setCron}\n * showPreview\n * />\n */\n\nimport React, { lazy, Suspense } from 'react';\nimport { LoadingFallback } from '../../components';\nimport type { CronSchedulerProps } from './types';\n\n// Lazy load the client component\nconst CronSchedulerClient = lazy(() => import('./CronScheduler.client'));\n\n/**\n * CronScheduler with Suspense wrapper\n */\nexport function CronScheduler(props: CronSchedulerProps) {\n return (\n <Suspense fallback={<CronSchedulerFallback />}>\n <CronSchedulerClient {...props} />\n </Suspense>\n );\n}\n\n/**\n * Loading fallback for CronScheduler\n */\nfunction CronSchedulerFallback() {\n return (\n <LoadingFallback\n minHeight={120}\n showText={false}\n className=\"rounded-lg\"\n />\n );\n}\n\n// Re-export types\nexport type {\n CronSchedulerProps,\n ScheduleType,\n WeekDay,\n MonthDay,\n CronSchedulerState,\n CronSchedulerContextValue,\n} from './types';\n\n// Re-export context and hooks for advanced usage\nexport {\n CronSchedulerProvider,\n useCronSchedulerContext,\n useCronType,\n useCronTime,\n useCronWeekDays,\n useCronMonthDays,\n useCronCustom,\n useCronPreview,\n useCronScheduler,\n} from './context';\n\n// Re-export utilities\nexport {\n buildCron,\n parseCron,\n isValidCron,\n humanizeCron,\n} from './utils';\n\n// Re-export components for custom compositions\nexport {\n ScheduleTypeSelector,\n TimeSelector,\n DayChips,\n MonthDayGrid,\n CustomInput,\n SchedulePreview,\n} from './components';\n\nexport default CronScheduler;\n","'use client';\n\n/**\n * Monaco Editor Web Worker Setup\n *\n * Workers improve performance for language services (TypeScript type-checking,\n * JSON validation, etc.) but require bundler-specific configuration:\n *\n * **Vite**: Use `?worker` imports (see example below)\n * **Next.js/Webpack**: Use `monaco-editor-webpack-plugin`\n * **No config**: Monaco falls back to main-thread execution (fully functional)\n *\n * @example Vite setup (call once in app entry):\n * ```ts\n * import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'\n * import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'\n * import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'\n * import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'\n * import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'\n *\n * setupMonacoWorkers((label) => {\n * switch (label) {\n * case 'typescript': case 'javascript': return new tsWorker()\n * case 'json': return new jsonWorker()\n * case 'css': case 'scss': case 'less': return new cssWorker()\n * case 'html': case 'handlebars': case 'razor': return new htmlWorker()\n * default: return new editorWorker()\n * }\n * })\n * ```\n *\n * @example Next.js setup:\n * ```ts\n * // next.config.js — add monaco-editor-webpack-plugin\n * // Then just call setupMonacoWorkers() without arguments\n * setupMonacoWorkers()\n * ```\n */\n\ntype GetWorkerFn = (label: string) => Worker;\n\nlet isSetup = false;\n\nexport function setupMonacoWorkers(getWorker?: GetWorkerFn): void {\n if (isSetup || typeof window === 'undefined') return;\n\n if (getWorker) {\n // App provides bundler-specific worker factory\n (self as unknown as { MonacoEnvironment: object }).MonacoEnvironment = {\n getWorker: (_workerId: string, label: string) => getWorker(label),\n };\n }\n // else: don't set MonacoEnvironment at all.\n // - If webpack plugin is installed, it sets MonacoEnvironment automatically.\n // - If nothing sets it, Monaco falls back to main-thread execution.\n\n isSetup = true;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport type * as MonacoEditor from 'monaco-editor';\n\nimport { setupMonacoWorkers } from '../workers/setup';\nimport type { UseMonacoReturn } from '../types';\n\n/**\n * Hook to load and access Monaco Editor instance\n *\n * Handles:\n * - Dynamic import of Monaco (client-side only)\n * - Web worker configuration\n * - Loading state management\n *\n * @example\n * ```tsx\n * const { monaco, isLoading, error } = useMonaco();\n *\n * if (isLoading) return <Spinner />;\n * if (error) return <Error message={error.message} />;\n *\n * // Use monaco API\n * monaco.editor.create(...)\n * ```\n */\nexport function useMonaco(): UseMonacoReturn {\n const [monaco, setMonaco] = useState<typeof MonacoEditor | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n async function loadMonaco() {\n try {\n // Setup workers first\n setupMonacoWorkers();\n\n // Dynamic import Monaco\n const monacoModule = await import('monaco-editor');\n\n if (mounted) {\n setMonaco(monacoModule);\n setIsLoading(false);\n }\n } catch (err) {\n if (mounted) {\n setError(err instanceof Error ? err : new Error('Failed to load Monaco Editor'));\n setIsLoading(false);\n }\n }\n }\n\n loadMonaco();\n\n return () => {\n mounted = false;\n };\n }, []);\n\n return { monaco, isLoading, error };\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\n\n/**\n * Hook that syncs Monaco editor theme with the app theme.\n *\n * Reads CSS variables from the document and creates custom Monaco themes\n * that match the current light/dark mode. Falls back to built-in 'vs' / 'vs-dark'.\n *\n * @param monaco - Monaco namespace (null during loading)\n * @param themeOverride - Optional explicit theme name (skips auto-detection)\n * @returns Resolved Monaco theme name to pass to editor options\n */\nexport function useEditorTheme(\n monaco: typeof import('monaco-editor') | null,\n themeOverride?: string,\n): string {\n const appTheme = useResolvedTheme();\n const registered = useRef(false);\n\n // Register custom themes once Monaco is loaded\n useEffect(() => {\n if (!monaco || registered.current) return;\n\n try {\n const colors = _readCSSColors();\n\n monaco.editor.defineTheme('app-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n { token: 'comment', foreground: '6A9955', fontStyle: 'italic' },\n { token: 'keyword', foreground: 'C586C0' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'type', foreground: '4EC9B0' },\n { token: 'function', foreground: 'DCDCAA' },\n { token: 'variable', foreground: '9CDCFE' },\n ],\n colors: {\n 'editor.background': colors.background,\n 'editor.foreground': colors.foreground,\n 'editor.lineHighlightBackground': colors.lineHighlight,\n 'editor.selectionBackground': colors.selection,\n 'editorCursor.foreground': colors.foreground,\n 'editorLineNumber.foreground': colors.mutedForeground,\n 'editorWidget.background': colors.card,\n 'editorWidget.border': colors.border,\n 'input.background': colors.card,\n 'dropdown.background': colors.card,\n },\n });\n\n monaco.editor.defineTheme('app-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'comment', foreground: '008000', fontStyle: 'italic' },\n { token: 'keyword', foreground: 'AF00DB' },\n { token: 'string', foreground: 'A31515' },\n { token: 'number', foreground: '098658' },\n { token: 'type', foreground: '267F99' },\n { token: 'function', foreground: '795E26' },\n { token: 'variable', foreground: '001080' },\n ],\n colors: {\n 'editor.background': colors.backgroundLight,\n 'editor.foreground': colors.foregroundLight,\n 'editor.lineHighlightBackground': colors.lineHighlightLight,\n 'editor.selectionBackground': colors.selectionLight,\n 'editorLineNumber.foreground': colors.mutedForegroundLight,\n 'editorWidget.background': colors.cardLight,\n 'editorWidget.border': colors.borderLight,\n },\n });\n\n registered.current = true;\n } catch {\n // Fallback — use built-in themes\n }\n }, [monaco]);\n\n // If explicit override provided, use it\n if (themeOverride) return themeOverride;\n\n // Use registered app themes if available, fallback to built-in\n if (registered.current) {\n return appTheme === 'dark' ? 'app-dark' : 'app-light';\n }\n return appTheme === 'dark' ? 'vs-dark' : 'vs';\n}\n\n\n/** Read CSS variables and convert HSL to hex for Monaco */\nfunction _readCSSColors() {\n const get = (varName: string): string => {\n if (typeof document === 'undefined') return '';\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n };\n\n const hslToHex = (hsl: string): string => {\n if (!hsl) return '';\n // CSS vars are \"0 0% 96%\" — strip % before parsing\n const parts = hsl.split(/\\s+/).map(s => parseFloat(s.replace('%', '')));\n if (parts.length < 3 || parts.some(isNaN)) return '';\n const [h, s, l] = [parts[0], parts[1] / 100, parts[2] / 100];\n\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) => {\n const k = (n + h / 30) % 12;\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round(255 * color).toString(16).padStart(2, '0');\n };\n return `#${f(0)}${f(8)}${f(4)}`;\n };\n\n // Read current (dark) theme CSS variables\n const background = hslToHex(get('--background')) || '#0a0a0a';\n const foreground = hslToHex(get('--foreground')) || '#f5f5f5';\n const card = hslToHex(get('--card')) || '#141414';\n const border = hslToHex(get('--border')) || '#262626';\n const mutedForeground = hslToHex(get('--muted-foreground')) || '#858585';\n\n // Compute derived colors\n const lineHighlight = _adjustBrightness(background, 10);\n const primary = hslToHex(get('--primary'));\n const selection = primary ? _adjustBrightness(primary, -40) : '#264F78';\n\n // Light theme colors (hardcoded since we can't switch CSS context)\n return {\n background,\n foreground,\n card,\n border,\n mutedForeground,\n lineHighlight,\n selection,\n // Light variants\n backgroundLight: '#ffffff',\n foregroundLight: '#1a1a1a',\n cardLight: '#ffffff',\n borderLight: '#e5e5e5',\n mutedForegroundLight: '#737373',\n lineHighlightLight: '#f5f5f5',\n selectionLight: '#ADD6FF',\n };\n}\n\nfunction _adjustBrightness(hex: string, amount: number): string {\n const num = parseInt(hex.replace('#', ''), 16);\n const r = Math.min(255, Math.max(0, ((num >> 16) & 0xff) + amount));\n const g = Math.min(255, Math.max(0, ((num >> 8) & 0xff) + amount));\n const b = Math.min(255, Math.max(0, (num & 0xff) + amount));\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, '0')}`;\n}\n\n","'use client';\n\nimport { useRef, useEffect, useState, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { useEditorTheme } from '../hooks/useEditorTheme';\nimport type { EditorProps } from '../types';\n\nexport interface EditorRef {\n /** Get editor instance */\n getEditor: () => monaco.editor.IStandaloneCodeEditor | null;\n /** Get current value */\n getValue: () => string;\n /** Set value */\n setValue: (value: string) => void;\n /** Focus editor */\n focus: () => void;\n}\n\n/**\n * Monaco Editor Component\n *\n * A React wrapper around Monaco Editor with full TypeScript support.\n *\n * @example\n * ```tsx\n * <Editor\n * value={code}\n * language=\"typescript\"\n * onChange={(value) => setCode(value)}\n * options={{ fontSize: 14, minimap: false }}\n * />\n * ```\n */\nexport const Editor = forwardRef<EditorRef, EditorProps>(function Editor(\n {\n value = '',\n language = 'plaintext',\n onChange,\n onMount,\n options = {},\n className = '',\n height = '100%',\n width = '100%',\n autoHeight = false,\n minHeight = 100,\n maxHeight = 600,\n },\n ref\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);\n const { monaco, isLoading } = useMonaco();\n const resolvedTheme = useEditorTheme(monaco, options.theme);\n\n // Auto-height state\n const [contentHeight, setContentHeight] = useState<number | null>(null);\n\n const updateContentHeight = useCallback((editor: monaco.editor.IStandaloneCodeEditor) => {\n if (!autoHeight) return;\n const h = editor.getContentHeight();\n setContentHeight(Math.min(Math.max(h, minHeight), maxHeight));\n }, [autoHeight, minHeight, maxHeight]);\n\n // Track internal changes to prevent cursor reset on prop sync\n const isInternalChangeRef = useRef(false);\n\n // Expose editor methods via ref\n useImperativeHandle(ref, () => ({\n getEditor: () => editorRef.current,\n getValue: () => editorRef.current?.getValue() || '',\n setValue: (val: string) => editorRef.current?.setValue(val),\n focus: () => editorRef.current?.focus(),\n }));\n\n // Create editor\n useEffect(() => {\n if (!monaco || !containerRef.current || editorRef.current) return;\n\n const editor = monaco.editor.create(containerRef.current, {\n value,\n language,\n theme: resolvedTheme,\n fontSize: options.fontSize || 14,\n fontFamily: options.fontFamily || \"'Fira Code', 'Consolas', monospace\",\n tabSize: options.tabSize || 2,\n insertSpaces: options.insertSpaces !== false,\n wordWrap: options.wordWrap || 'on',\n minimap: { enabled: options.minimap !== false },\n lineNumbers: options.lineNumbers || 'on',\n readOnly: options.readOnly || false,\n automaticLayout: true,\n scrollBeyondLastLine: autoHeight ? false : false,\n scrollbar: autoHeight ? { vertical: 'hidden', horizontal: 'auto' } : undefined,\n overviewRulerLanes: autoHeight ? 0 : undefined,\n padding: { top: 16, bottom: 16 },\n renderLineHighlight: 'all',\n cursorBlinking: 'smooth',\n cursorSmoothCaretAnimation: 'on',\n smoothScrolling: true,\n bracketPairColorization: { enabled: true },\n guides: {\n bracketPairs: true,\n indentation: true,\n },\n });\n\n editorRef.current = editor;\n\n // Setup change listener\n if (onChange) {\n editor.onDidChangeModelContent(() => {\n // Mark as internal change to prevent cursor reset on prop sync\n isInternalChangeRef.current = true;\n onChange(editor.getValue());\n });\n }\n\n // Auto-height: resize container to fit content\n if (autoHeight) {\n editor.onDidContentSizeChange(() => updateContentHeight(editor));\n updateContentHeight(editor);\n }\n\n // Call onMount callback\n onMount?.(editor);\n\n return () => {\n editor.dispose();\n editorRef.current = null;\n };\n }, [monaco]);\n\n // Update value when prop changes (only for external changes)\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // Skip if this is an internal change (user typing) - prevents cursor reset\n if (isInternalChangeRef.current) {\n isInternalChangeRef.current = false;\n return;\n }\n\n const currentValue = editor.getValue();\n if (value !== currentValue) {\n // Save cursor position\n const position = editor.getPosition();\n const selections = editor.getSelections();\n\n editor.setValue(value);\n\n // Restore cursor position if possible\n if (position) {\n editor.setPosition(position);\n }\n if (selections && selections.length > 0) {\n editor.setSelections(selections);\n }\n }\n }, [value]);\n\n // Update language when prop changes\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n monaco.editor.setModelLanguage(model, language);\n }\n }, [language, monaco]);\n\n // Update options when props change\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n editor.updateOptions({\n theme: resolvedTheme,\n fontSize: options.fontSize,\n readOnly: options.readOnly,\n minimap: { enabled: options.minimap !== false },\n wordWrap: options.wordWrap,\n lineNumbers: options.lineNumbers,\n });\n }, [options, resolvedTheme]);\n\n if (isLoading) {\n return (\n <div\n className={className}\n style={{\n width,\n height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#1e1e1e',\n color: '#666',\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n const resolvedHeight = autoHeight && contentHeight != null ? contentHeight : height;\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width,\n height: resolvedHeight,\n ...(autoHeight && { minHeight: minHeight, maxHeight: maxHeight, overflow: 'hidden' }),\n }}\n />\n );\n});\n","'use client';\n\nimport { useRef, useEffect } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { useEditorTheme } from '../hooks/useEditorTheme';\nimport type { DiffEditorProps } from '../types';\n\n/**\n * Monaco Diff Editor Component\n *\n * Side-by-side or inline diff view for comparing two versions of content.\n *\n * @example\n * ```tsx\n * <DiffEditor\n * original={originalCode}\n * modified={modifiedCode}\n * language=\"typescript\"\n * />\n * ```\n */\nexport function DiffEditor({\n original,\n modified,\n language = 'plaintext',\n options = {},\n className = '',\n height = '100%',\n}: DiffEditorProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monaco.editor.IStandaloneDiffEditor | null>(null);\n const { monaco, isLoading } = useMonaco();\n const resolvedTheme = useEditorTheme(monaco, options.theme);\n\n // Create diff editor\n useEffect(() => {\n if (!monaco || !containerRef.current || editorRef.current) return;\n\n const editor = monaco.editor.createDiffEditor(containerRef.current, {\n theme: resolvedTheme,\n fontSize: options.fontSize || 14,\n fontFamily: options.fontFamily || \"'Fira Code', 'Consolas', monospace\",\n readOnly: true,\n automaticLayout: true,\n renderSideBySide: true,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n });\n\n const originalModel = monaco.editor.createModel(original, language);\n const modifiedModel = monaco.editor.createModel(modified, language);\n\n editor.setModel({\n original: originalModel,\n modified: modifiedModel,\n });\n\n editorRef.current = editor;\n\n return () => {\n originalModel.dispose();\n modifiedModel.dispose();\n editor.dispose();\n editorRef.current = null;\n };\n }, [monaco]);\n\n // Update models when content changes\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n model.original.setValue(original);\n model.modified.setValue(modified);\n }\n }, [original, modified, monaco]);\n\n // Update language\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !monaco) return;\n\n const model = editor.getModel();\n if (model) {\n monaco.editor.setModelLanguage(model.original, language);\n monaco.editor.setModelLanguage(model.modified, language);\n }\n }, [language, monaco]);\n\n if (isLoading) {\n return (\n <div\n className={className}\n style={{\n width: '100%',\n height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#1e1e1e',\n color: '#666',\n }}\n >\n Loading diff editor...\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n width: '100%',\n height,\n }}\n />\n );\n}\n","/**\n * Language Detection & Mapping\n *\n * Maps file extensions to Monaco Editor language IDs.\n * Monaco supports 80+ languages out of the box.\n */\n\n/**\n * File extension to Monaco language ID mapping\n */\nexport const LANGUAGE_MAP: Record<string, string> = {\n // Web\n '.html': 'html',\n '.htm': 'html',\n '.xhtml': 'html',\n '.vue': 'html',\n '.svelte': 'html',\n\n // CSS\n '.css': 'css',\n '.scss': 'scss',\n '.sass': 'scss',\n '.less': 'less',\n\n // JavaScript/TypeScript\n '.js': 'javascript',\n '.mjs': 'javascript',\n '.cjs': 'javascript',\n '.jsx': 'javascript',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.mts': 'typescript',\n '.cts': 'typescript',\n\n // Data formats\n '.json': 'json',\n '.jsonc': 'json',\n '.json5': 'json',\n '.yaml': 'yaml',\n '.yml': 'yaml',\n '.toml': 'ini',\n '.xml': 'xml',\n '.svg': 'xml',\n '.xsl': 'xml',\n '.xsd': 'xml',\n\n // Markdown & Documentation\n '.md': 'markdown',\n '.mdx': 'markdown',\n '.markdown': 'markdown',\n '.rst': 'restructuredtext',\n '.txt': 'plaintext',\n '.text': 'plaintext',\n\n // Programming languages\n '.py': 'python',\n '.pyw': 'python',\n '.pyi': 'python',\n '.rb': 'ruby',\n '.rake': 'ruby',\n '.gemspec': 'ruby',\n '.php': 'php',\n '.phtml': 'php',\n '.java': 'java',\n '.kt': 'kotlin',\n '.kts': 'kotlin',\n '.scala': 'scala',\n '.go': 'go',\n '.rs': 'rust',\n '.swift': 'swift',\n '.c': 'c',\n '.h': 'c',\n '.cpp': 'cpp',\n '.cc': 'cpp',\n '.cxx': 'cpp',\n '.hpp': 'cpp',\n '.hxx': 'cpp',\n '.cs': 'csharp',\n '.fs': 'fsharp',\n '.fsx': 'fsharp',\n '.vb': 'vb',\n '.lua': 'lua',\n '.r': 'r',\n '.R': 'r',\n '.m': 'objective-c',\n '.mm': 'objective-c',\n '.pl': 'perl',\n '.pm': 'perl',\n '.ex': 'elixir',\n '.exs': 'elixir',\n '.erl': 'erlang',\n '.hrl': 'erlang',\n '.clj': 'clojure',\n '.cljs': 'clojure',\n '.cljc': 'clojure',\n '.hs': 'haskell',\n '.lhs': 'haskell',\n '.ml': 'fsharp',\n '.mli': 'fsharp',\n '.dart': 'dart',\n '.groovy': 'groovy',\n '.gradle': 'groovy',\n '.jl': 'julia',\n\n // Shell & Scripts\n '.sh': 'shell',\n '.bash': 'shell',\n '.zsh': 'shell',\n '.fish': 'shell',\n '.ps1': 'powershell',\n '.psm1': 'powershell',\n '.psd1': 'powershell',\n '.bat': 'bat',\n '.cmd': 'bat',\n\n // Config files\n '.ini': 'ini',\n '.cfg': 'ini',\n '.conf': 'ini',\n '.properties': 'ini',\n '.env': 'ini',\n '.gitignore': 'ini',\n '.gitattributes': 'ini',\n '.editorconfig': 'ini',\n '.npmrc': 'ini',\n\n // Database\n '.sql': 'sql',\n '.mysql': 'mysql',\n '.pgsql': 'pgsql',\n '.plsql': 'plsql',\n '.redis': 'redis',\n\n // Templates\n '.hbs': 'handlebars',\n '.handlebars': 'handlebars',\n '.mustache': 'handlebars',\n '.ejs': 'html',\n '.pug': 'pug',\n '.jade': 'pug',\n '.twig': 'twig',\n '.liquid': 'liquid',\n\n // GraphQL\n '.graphql': 'graphql',\n '.gql': 'graphql',\n\n // Docker\n '.dockerfile': 'dockerfile',\n\n // Other\n '.diff': 'diff',\n '.patch': 'diff',\n '.log': 'log',\n '.tex': 'latex',\n '.cls': 'latex',\n '.sty': 'latex',\n '.proto': 'protobuf',\n '.sol': 'sol',\n '.asm': 'mips',\n '.s': 'mips',\n '.wasm': 'wasm',\n};\n\n/**\n * Special filename mappings (without extension)\n */\nconst FILENAME_MAP: Record<string, string> = {\n Dockerfile: 'dockerfile',\n 'docker-compose.yml': 'yaml',\n 'docker-compose.yaml': 'yaml',\n Makefile: 'makefile',\n makefile: 'makefile',\n Gemfile: 'ruby',\n Rakefile: 'ruby',\n Jenkinsfile: 'groovy',\n Vagrantfile: 'ruby',\n '.bashrc': 'shell',\n '.bash_profile': 'shell',\n '.zshrc': 'shell',\n '.profile': 'shell',\n '.vimrc': 'plaintext',\n '.gitconfig': 'ini',\n '.htaccess': 'ini',\n 'nginx.conf': 'ini',\n 'package.json': 'json',\n 'tsconfig.json': 'json',\n 'jsconfig.json': 'json',\n '.prettierrc': 'json',\n '.eslintrc': 'json',\n 'composer.json': 'json',\n 'Cargo.toml': 'ini',\n 'go.mod': 'go',\n 'go.sum': 'plaintext',\n 'requirements.txt': 'plaintext',\n 'pyproject.toml': 'ini',\n 'setup.py': 'python',\n 'setup.cfg': 'ini',\n};\n\n/**\n * Get Monaco language ID from file extension\n */\nexport function getLanguageByExtension(extension: string): string {\n const ext = extension.startsWith('.') ? extension.toLowerCase() : `.${extension.toLowerCase()}`;\n return LANGUAGE_MAP[ext] || 'plaintext';\n}\n\n/**\n * Get Monaco language ID from filename\n * Checks special filenames first, then falls back to extension\n */\nexport function getLanguageByFilename(filename: string): string {\n // Check special filenames first\n if (FILENAME_MAP[filename]) {\n return FILENAME_MAP[filename];\n }\n\n // Extract extension\n const lastDot = filename.lastIndexOf('.');\n if (lastDot === -1) {\n return 'plaintext';\n }\n\n const extension = filename.slice(lastDot).toLowerCase();\n return LANGUAGE_MAP[extension] || 'plaintext';\n}\n","'use client';\n\nimport { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport { useMonaco } from '../hooks/useMonaco';\nimport { getLanguageByFilename } from '../lib/languages';\nimport type { EditorFile, EditorContextValue } from '../types';\n\nconst EditorContext = createContext<EditorContextValue | null>(null);\n\n/**\n * Hook to access editor context\n * Must be used within EditorProvider\n */\nexport function useEditorContext(): EditorContextValue {\n const context = useContext(EditorContext);\n if (!context) {\n throw new Error('useEditorContext must be used within EditorProvider');\n }\n return context;\n}\n\ninterface EditorProviderProps {\n children: React.ReactNode;\n /** Callback when file save is requested */\n onSave?: (path: string, content: string) => Promise<void>;\n}\n\n/**\n * Editor Context Provider\n *\n * Manages multiple open files, active file state, and editor instance.\n *\n * @example\n * ```tsx\n * <EditorProvider onSave={handleSave}>\n * <EditorTabs />\n * <Editor />\n * </EditorProvider>\n * ```\n */\nexport function EditorProvider({ children, onSave }: EditorProviderProps) {\n const { monaco } = useMonaco();\n const [editor, setEditor] = useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n const [openFiles, setOpenFiles] = useState<EditorFile[]>([]);\n const [activeFilePath, setActiveFilePath] = useState<string | null>(null);\n\n // Get active file\n const activeFile = useMemo(\n () => openFiles.find((f) => f.path === activeFilePath) || null,\n [openFiles, activeFilePath]\n );\n\n // Open a file\n const openFile = useCallback(\n (path: string, content: string, language?: string) => {\n setOpenFiles((files) => {\n // Check if already open\n const existing = files.find((f) => f.path === path);\n if (existing) {\n return files;\n }\n\n // Detect language from filename\n const basename = path.split('/').pop() || path;\n const detectedLanguage = language || getLanguageByFilename(basename);\n\n // Create new file entry\n const newFile: EditorFile = {\n path,\n content,\n language: detectedLanguage,\n isDirty: false,\n };\n\n return [...files, newFile];\n });\n\n // Set as active\n setActiveFilePath(path);\n },\n []\n );\n\n // Close a file\n const closeFile = useCallback(\n (path: string) => {\n setOpenFiles((files) => {\n const index = files.findIndex((f) => f.path === path);\n if (index === -1) return files;\n\n const newFiles = files.filter((f) => f.path !== path);\n\n // If closing active file, activate adjacent file\n if (activeFilePath === path && newFiles.length > 0) {\n const newIndex = Math.min(index, newFiles.length - 1);\n setActiveFilePath(newFiles[newIndex].path);\n } else if (newFiles.length === 0) {\n setActiveFilePath(null);\n }\n\n return newFiles;\n });\n },\n [activeFilePath]\n );\n\n // Set active file\n const setActiveFile = useCallback((path: string) => {\n setActiveFilePath(path);\n }, []);\n\n // Update file content\n const updateContent = useCallback((path: string, content: string) => {\n setOpenFiles((files) =>\n files.map((f) =>\n f.path === path\n ? { ...f, content, isDirty: true }\n : f\n )\n );\n }, []);\n\n // Save file\n const saveFile = useCallback(\n async (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n if (!file) return;\n\n if (onSave) {\n await onSave(path, file.content);\n }\n\n // Mark as not dirty\n setOpenFiles((files) =>\n files.map((f) =>\n f.path === path ? { ...f, isDirty: false } : f\n )\n );\n },\n [openFiles, onSave]\n );\n\n // Check if file is dirty\n const isDirty = useCallback(\n (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n return file?.isDirty || false;\n },\n [openFiles]\n );\n\n // Get file content\n const getContent = useCallback(\n (path: string) => {\n const file = openFiles.find((f) => f.path === path);\n return file?.content || null;\n },\n [openFiles]\n );\n\n // Get file by path\n const getFile = useCallback(\n (path: string) => {\n return openFiles.find((f) => f.path === path) || null;\n },\n [openFiles]\n );\n\n const value: EditorContextValue = {\n openFiles,\n activeFile,\n monaco,\n editor,\n isReady: monaco !== null && editor !== null,\n\n openFile,\n closeFile,\n setActiveFile,\n updateContent,\n saveFile,\n\n isDirty,\n getContent,\n getFile,\n };\n\n return (\n <EditorContext.Provider value={value}>\n {children}\n </EditorContext.Provider>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport type * as monaco from 'monaco-editor';\n\nimport type { UseEditorReturn } from '../types';\n\n/**\n * Hook to manage editor instance reference\n *\n * @example\n * ```tsx\n * const { editor, isReady, setEditor } = useEditor();\n *\n * // Pass setEditor to Editor component's onMount\n * <Editor onMount={setEditor} />\n *\n * // Use editor when ready\n * if (isReady) {\n * editor.getModel()?.getValue();\n * }\n * ```\n */\nexport function useEditor(): UseEditorReturn {\n const [editor, setEditorState] = useState<monaco.editor.IStandaloneCodeEditor | null>(null);\n\n const setEditor = useCallback((editorInstance: monaco.editor.IStandaloneCodeEditor | null) => {\n setEditorState(editorInstance);\n }, []);\n\n return {\n editor,\n isReady: editor !== null,\n setEditor,\n };\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { getLanguageByFilename } from '../lib/languages';\n\n/**\n * Hook to detect language from filename\n *\n * @param filename - File name or path\n * @returns Monaco language ID\n *\n * @example\n * ```tsx\n * const language = useLanguage('app.tsx');\n * // Returns: 'typescript'\n *\n * const language2 = useLanguage('/path/to/Dockerfile');\n * // Returns: 'dockerfile'\n * ```\n */\nexport function useLanguage(filename: string | undefined): string {\n return useMemo(() => {\n if (!filename) return 'plaintext';\n\n // Extract basename from path\n const basename = filename.split('/').pop() || filename;\n return getLanguageByFilename(basename);\n }, [filename]);\n}\n","'use client';\n\nimport { forwardRef, useImperativeHandle, useState, useCallback, useEffect, type KeyboardEvent } from 'react';\nimport type { MentionItem } from './types';\n\nexport interface MentionListRef {\n onKeyDown: (event: KeyboardEvent) => boolean;\n}\n\ninterface MentionListProps {\n items: MentionItem[];\n command: (item: MentionItem) => void;\n}\n\nexport const MentionList = forwardRef<MentionListRef, MentionListProps>(\n ({ items, command }, ref) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n useEffect(() => setSelectedIndex(0), [items]);\n\n const select = useCallback(\n (index: number) => {\n const item = items[index];\n if (item) command(item);\n },\n [items, command],\n );\n\n useImperativeHandle(ref, () => ({\n onKeyDown: (event: KeyboardEvent) => {\n if (event.key === 'ArrowUp') {\n setSelectedIndex((i) => (i + items.length - 1) % items.length);\n return true;\n }\n if (event.key === 'ArrowDown') {\n setSelectedIndex((i) => (i + 1) % items.length);\n return true;\n }\n if (event.key === 'Enter') {\n select(selectedIndex);\n return true;\n }\n return false;\n },\n }));\n\n if (items.length === 0) return null;\n\n return (\n <div className=\"markdown-mention-list\">\n {items.map((item, i) => {\n const isSelected = i === selectedIndex;\n const cls = `markdown-mention-item ${isSelected ? 'selected' : ''}`;\n return (\n <button key={item.id} type=\"button\" className={cls} onClick={() => select(i)}>\n {item.thumbnail && (\n <img src={item.thumbnail} alt=\"\" className=\"markdown-mention-avatar\" />\n )}\n <div className=\"markdown-mention-info\">\n <span className=\"markdown-mention-name\">{item.label}</span>\n {item.description && (\n <span className=\"markdown-mention-desc\">{item.description}</span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n );\n },\n);\n\nMentionList.displayName = 'MentionList';\n","import { ReactRenderer } from '@tiptap/react';\nimport type { SuggestionOptions } from '@tiptap/suggestion';\nimport { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';\nimport { MentionList, type MentionListRef } from './MentionList';\nimport type { MentionItem, MentionConfig } from './types';\n\nexport function createMentionSuggestion(\n config: MentionConfig,\n): Omit<SuggestionOptions<MentionItem>, 'editor'> {\n const { maxItems = 5, trigger = '@' } = config;\n\n return {\n char: trigger,\n\n items: ({ query }) => {\n const q = query.toLowerCase();\n return config.items\n .filter((item) => item.label.toLowerCase().includes(q))\n .slice(0, maxItems);\n },\n\n render: () => {\n let component: ReactRenderer<MentionListRef> | null = null;\n let popup: HTMLDivElement | null = null;\n let cleanupAutoUpdate: (() => void) | null = null;\n let getReferenceRect: (() => DOMRect | null) | null = null;\n\n // Floating-UI virtual element backed by Tiptap's clientRect.\n // We re-read it on every reposition so caret movement is tracked.\n const buildVirtualElement = () => ({\n getBoundingClientRect: () => {\n const rect = getReferenceRect?.();\n // Fallback to a zero-sized rect at origin if the editor is detached\n // (e.g. mid-teardown). Floating-UI tolerates this.\n return rect ?? new DOMRect(0, 0, 0, 0);\n },\n });\n\n const updatePosition = () => {\n if (!popup) return;\n const virtualEl = buildVirtualElement();\n void computePosition(virtualEl, popup, {\n placement: 'bottom-start',\n middleware: [\n offset(4),\n flip({ fallbackPlacements: ['top-start'] }),\n shift({ padding: 8 }),\n ],\n }).then(({ x, y }) => {\n if (!popup) return;\n // transform is more performant than top/left and avoids\n // sub-pixel layout thrash during scroll/resize.\n popup.style.transform = `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;\n });\n };\n\n const teardown = () => {\n cleanupAutoUpdate?.();\n cleanupAutoUpdate = null;\n popup?.remove();\n popup = null;\n component?.destroy();\n component = null;\n getReferenceRect = null;\n };\n\n return {\n onStart: (props) => {\n component = new ReactRenderer(MentionList, {\n props: {\n items: props.items,\n command: (item: MentionItem) => {\n props.command({ id: item.id, label: item.label });\n },\n },\n editor: props.editor,\n });\n\n popup = document.createElement('div');\n // top/left at 0; actual position is applied via transform by computePosition.\n popup.style.cssText = 'position: absolute; top: 0; left: 0; z-index: 99999;';\n popup.appendChild(component.element);\n document.body.appendChild(popup);\n\n getReferenceRect = () => props.clientRect?.() ?? null;\n\n // autoUpdate handles scroll, resize, ancestor scroll/resize, layout shifts.\n // It calls updatePosition synchronously on registration too — no manual first call needed.\n const virtualEl = buildVirtualElement();\n cleanupAutoUpdate = autoUpdate(virtualEl, popup, updatePosition);\n },\n\n onUpdate: (props) => {\n component?.updateProps({\n items: props.items,\n command: (item: MentionItem) => {\n props.command({ id: item.id, label: item.label });\n },\n });\n\n // Refresh reference accessor so autoUpdate sees the new caret rect.\n getReferenceRect = () => props.clientRect?.() ?? null;\n updatePosition();\n },\n\n onKeyDown: (props) => {\n if (props.event.key === 'Escape') {\n teardown();\n return true;\n }\n return component?.ref?.onKeyDown(props.event as unknown as React.KeyboardEvent) ?? false;\n },\n\n onExit: () => {\n teardown();\n },\n };\n },\n };\n}\n","import type { MentionMarkdownRenderer } from './types';\n\n/**\n * Escape characters that have meaning in markdown link/inline contexts.\n * Conservative — covers the chars that would break `[text](url)` and\n * inline emphasis when a label contains them.\n */\nconst escapeMd = (s: string): string => s.replace(/([\\\\\\[\\]()_*~`])/g, '\\\\$1');\n\n/**\n * Built-in serializers for the `MentionConfig.renderMarkdown` callback.\n *\n * Pick one based on what consumes the markdown:\n *\n * - LLM / chat composer → `plainAt` (the default)\n * - Plain text export → `plainLabel`\n * - Web app with deep-link → `markdownLink(baseUrl)`\n * - Notion / Linear-style → `customUri(scheme, kind)`\n * - Slack-style id refs → `slackStyle`\n * - HTML-allowing renderer → `htmlSpan(className?)`\n *\n * Or pass a custom function — the type is just `(attrs) => string`.\n */\nexport const mentionPresets = {\n /** \"@Label\" — default, ideal for chat where LLMs read the text. */\n plainAt: (({ label, id }) => `@${label || id}`) as MentionMarkdownRenderer,\n\n /** \"Label\" — bare label, no @ prefix. */\n plainLabel: (({ label, id }) => label || id) as MentionMarkdownRenderer,\n\n /** \"[@Label](baseUrl/id)\" — clickable markdown link. */\n markdownLink: (baseUrl: string): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `[@${escapeMd(label || id)}](${baseUrl}${encodeURIComponent(id)})`,\n\n /** \"@[Label](scheme://kind/id)\" — Notion / Linear-style custom URI. */\n customUri: (scheme: string, kind: string): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `@[${escapeMd(label || id)}](${scheme}://${kind}/${encodeURIComponent(id)})`,\n\n /** \"<@id>\" — Slack-style id-only reference (label dropped — receivers resolve it). */\n slackStyle: (({ id }) => `<@${id}>`) as MentionMarkdownRenderer,\n\n /** Inline HTML span — for products that consume markdown with raw HTML allowed. */\n htmlSpan:\n (className = 'mention'): MentionMarkdownRenderer =>\n ({ label, id }) =>\n `<span class=\"${className}\" data-mention-id=\"${encodeURIComponent(id)}\">@${escapeMd(label || id)}</span>`,\n};\n","'use client';\n\nimport { useEditor, EditorContent, type Editor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Mention from '@tiptap/extension-mention';\nimport { Markdown } from '@tiptap/markdown';\nimport type { AnyExtension } from '@tiptap/core';\nimport { useEffect, useRef, useMemo } from 'react';\nimport {\n Bold, Italic, Strikethrough, Heading1, Heading2, Heading3,\n List, ListOrdered, Quote, Minus, Code, type LucideIcon,\n} from 'lucide-react';\nimport { createMentionSuggestion } from './createMentionSuggestion';\nimport { mentionPresets } from './mentionPresets';\nimport type { MentionAttrs, MentionConfig } from './types';\nimport './styles.css';\n\n// ── Helpers ──\n\ninterface MarkdownManager {\n serialize: (json: Record<string, unknown>) => string;\n}\n\nfunction getMarkdown(editor: Editor): string {\n const storage = editor.storage.markdown as { manager?: MarkdownManager } | undefined;\n if (!storage?.manager) return editor.getText();\n return storage.manager.serialize(editor.getJSON());\n}\n\nfunction extractMentionIds(editor: Editor): string[] {\n const ids: string[] = [];\n editor.state.doc.descendants((node) => {\n if (node.type.name === 'mention' && node.attrs.id) {\n ids.push(node.attrs.id as string);\n }\n });\n return [...new Set(ids)];\n}\n\n// ── Types ──\n\nexport interface MarkdownEditorProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n minHeight?: number;\n className?: string;\n disabled?: boolean;\n showToolbar?: boolean;\n /**\n * `@`-mention autocomplete config.\n *\n * IMPORTANT: Tiptap's `useEditor` initialises the editor exactly once.\n * The `Mention` extension is only registered when `mentions` is truthy\n * on the FIRST render — handing in a real config later (e.g. after an\n * async items fetch) silently does nothing, and typing `@` will not\n * open the popover.\n *\n * If you want mentions even with async-loaded items, pass\n * `{ items: [] }` from the very first render and update the array\n * when data arrives. Either keep the `MentionConfig` object identity\n * stable across renders and mutate `items` in place (the suggestion\n * plugin captures the config by closure and reads `items` on each\n * query), or accept that swapping the whole object reference is a\n * no-op for the live editor.\n */\n mentions?: MentionConfig;\n /** Called when mentioned IDs change */\n onMentionIdsChange?: (ids: string[]) => void;\n}\n\n// ── Component ──\n\nexport function MarkdownEditor({\n value,\n onChange,\n placeholder = 'Write markdown...',\n minHeight = 120,\n className = '',\n disabled = false,\n showToolbar = true,\n mentions,\n onMentionIdsChange,\n}: MarkdownEditorProps) {\n const isExternalUpdate = useRef(false);\n\n // ── Dev-mode trap detector ──\n // Tiptap initialises the editor once with the extensions array from\n // first render. If `mentions` is undefined on mount and becomes\n // truthy later, the Mention extension is never installed and the\n // user-visible @-trigger silently does nothing. Catch this early so\n // future consumers don't spend hours debugging why @ does nothing.\n const initialMentionsDefinedRef = useRef<boolean>(mentions !== undefined);\n const warnedRef = useRef(false);\n if (\n process.env.NODE_ENV !== 'production' &&\n !initialMentionsDefinedRef.current &&\n mentions !== undefined &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n // eslint-disable-next-line no-console\n console.warn(\n '[MarkdownEditor] `mentions` flipped from undefined to a config ' +\n 'after mount. Tiptap only installs the Mention extension on first ' +\n 'render — the @-popover will NOT work for this editor instance. ' +\n 'Pass `{ items: [] }` from the very first render and mutate `.items` ' +\n 'in place instead.',\n );\n }\n\n const extensions = useMemo(() => {\n const exts: AnyExtension[] = [\n StarterKit.configure({ heading: { levels: [1, 2, 3] } }),\n Placeholder.configure({ placeholder }),\n Markdown,\n ];\n\n if (mentions) {\n // ── Why .extend() with renderMarkdown ──\n //\n // Tiptap's `Mention` extension ships a default markdown serializer\n // (via `createInlineMarkdownSpec`, see @tiptap/extension-mention)\n // that emits a shortcode like `[@ id=\"...\" label=\"...\"]`. That's\n // round-trippable but useless for most consumers: a chat composer\n // feeding an LLM wants `@<label>`, a deep-linking app wants a\n // markdown link, etc.\n //\n // `renderText` only affects `editor.getText()` and the rendered\n // node — it does NOT influence `@tiptap/markdown`'s serializer.\n // The serializer reads `renderMarkdown` off the extension config\n // (see MarkdownManager.registerExtension → getExtensionField).\n // Overriding it via `.extend({ renderMarkdown })` replaces the\n // shortcode output with whatever the consumer supplied (or the\n // `plainAt` default — see ./mentionPresets.ts).\n //\n // Renderer-choice capture: useEditor only initialises once, so the\n // chosen renderer is captured by closure on first render. This is\n // intentional — swapping renderers per render would mean tearing\n // the editor down anyway, which we don't do for any other prop.\n //\n // Round-trip note: we intentionally do NOT also override\n // `parseMarkdown` / `markdownTokenizer`. Once a mention is\n // serialized, parsing it back would need the original mention\n // items list to look up the id, which we don't have at parse time.\n // Mentions are write-only by design here — `setContent(value)`\n // after submit gets back a plain string, which is fine for the\n // chat use case.\n const renderMarkdown = mentions.renderMarkdown ?? mentionPresets.plainAt;\n exts.push(\n Mention.extend({\n renderMarkdown(node) {\n const raw = node.attrs as { label?: string | null; id?: string | null };\n const attrs: MentionAttrs = {\n id: raw?.id ?? '',\n label: raw?.label ?? '',\n };\n // Defensive: if both are empty (shouldn't happen for a real\n // mention node, but `setContent` of malformed data could),\n // emit nothing rather than a stray \"@\" or invalid link.\n if (!attrs.id && !attrs.label) return '';\n return renderMarkdown(attrs);\n },\n }).configure({\n HTMLAttributes: { class: 'markdown-mention' },\n suggestion: createMentionSuggestion(mentions),\n renderText: ({ node }) => `@${node.attrs.label}`,\n }),\n );\n }\n\n return exts;\n }, [placeholder, mentions]);\n\n const editor = useEditor({\n immediatelyRender: false,\n editable: !disabled,\n extensions,\n content: value,\n onUpdate: ({ editor }) => {\n if (isExternalUpdate.current) return;\n onChange(getMarkdown(editor));\n\n if (onMentionIdsChange) {\n onMentionIdsChange(extractMentionIds(editor));\n }\n },\n editorProps: {\n attributes: {\n class: 'markdown-editor-content focus:outline-none text-sm',\n style: `min-height: ${minHeight}px`,\n },\n },\n });\n\n useEffect(() => {\n if (!editor) return;\n const current = getMarkdown(editor);\n if (current !== value) {\n isExternalUpdate.current = true;\n editor.commands.setContent(value);\n isExternalUpdate.current = false;\n }\n }, [value, editor]);\n\n const wrapperClass = `markdown-editor rounded-md border border-input bg-background ${disabled ? 'opacity-60' : ''} ${className}`.trim();\n\n return (\n <div className={wrapperClass}>\n {showToolbar && editor && <MarkdownToolbar editor={editor} />}\n <div className=\"px-3 py-2\">\n <EditorContent editor={editor} />\n </div>\n </div>\n );\n}\n\n// ── Toolbar ──\n\ninterface ToolbarItem {\n icon: LucideIcon;\n action: () => void;\n active: boolean;\n title: string;\n}\n\nfunction MarkdownToolbar({ editor }: { editor: Editor }) {\n const items = useMemo<(ToolbarItem | null)[]>(() => [\n { icon: Bold, title: 'Bold', action: () => editor.chain().focus().toggleBold().run(), active: editor.isActive('bold') },\n { icon: Italic, title: 'Italic', action: () => editor.chain().focus().toggleItalic().run(), active: editor.isActive('italic') },\n { icon: Strikethrough, title: 'Strike', action: () => editor.chain().focus().toggleStrike().run(), active: editor.isActive('strike') },\n { icon: Code, title: 'Code', action: () => editor.chain().focus().toggleCode().run(), active: editor.isActive('code') },\n null,\n { icon: Heading1, title: 'H1', action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(), active: editor.isActive('heading', { level: 1 }) },\n { icon: Heading2, title: 'H2', action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(), active: editor.isActive('heading', { level: 2 }) },\n { icon: Heading3, title: 'H3', action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(), active: editor.isActive('heading', { level: 3 }) },\n null,\n { icon: List, title: 'Bullet list', action: () => editor.chain().focus().toggleBulletList().run(), active: editor.isActive('bulletList') },\n { icon: ListOrdered, title: 'Ordered list', action: () => editor.chain().focus().toggleOrderedList().run(), active: editor.isActive('orderedList') },\n { icon: Quote, title: 'Quote', action: () => editor.chain().focus().toggleBlockquote().run(), active: editor.isActive('blockquote') },\n { icon: Minus, title: 'Divider', action: () => editor.chain().focus().setHorizontalRule().run(), active: false },\n ], [editor]);\n\n return (\n <div className=\"flex items-center gap-0.5 px-2 py-1.5 border-b border-border\">\n {items.map((item, i) => {\n if (!item) return <div key={i} className=\"w-px h-4 bg-border mx-1\" />;\n const Icon = item.icon;\n const btnClass = `markdown-toolbar-btn ${item.active ? 'active' : ''}`;\n return (\n <button key={i} type=\"button\" onClick={item.action} title={item.title} className={btnClass}>\n <Icon style={{ width: 14, height: 14 }} />\n </button>\n );\n })}\n </div>\n );\n}\n"]}