@arbidocs/blocks 0.5.79 → 0.5.80

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 (184) hide show
  1. package/dist/{ConnectedCallDock-QMNE6VLE.js → ConnectedCallDock-DIGOWCS7.js} +6 -6
  2. package/dist/{ConnectedCallDock-QMNE6VLE.js.map → ConnectedCallDock-DIGOWCS7.js.map} +1 -1
  3. package/dist/{ConnectedCallDock-7YJ42IDV.cjs → ConnectedCallDock-P42M6OVR.cjs} +15 -15
  4. package/dist/{ConnectedCallDock-7YJ42IDV.cjs.map → ConnectedCallDock-P42M6OVR.cjs.map} +1 -1
  5. package/dist/{ConnectedCallRoom-YDOASIWO.js → ConnectedCallRoom-AYNCZVWL.js} +6 -6
  6. package/dist/{ConnectedCallRoom-YDOASIWO.js.map → ConnectedCallRoom-AYNCZVWL.js.map} +1 -1
  7. package/dist/{ConnectedCallRoom-PUWWCV6W.cjs → ConnectedCallRoom-VFGV4X7I.cjs} +7 -7
  8. package/dist/{ConnectedCallRoom-PUWWCV6W.cjs.map → ConnectedCallRoom-VFGV4X7I.cjs.map} +1 -1
  9. package/dist/{ConnectedDocumentViewer-QW62ULRN.cjs → ConnectedDocumentViewer-EXR4XDRW.cjs} +22 -22
  10. package/dist/{ConnectedDocumentViewer-QW62ULRN.cjs.map → ConnectedDocumentViewer-EXR4XDRW.cjs.map} +1 -1
  11. package/dist/{ConnectedDocumentViewer-7QUKFBVM.js → ConnectedDocumentViewer-H7W6XQNJ.js} +21 -21
  12. package/dist/{ConnectedDocumentViewer-7QUKFBVM.js.map → ConnectedDocumentViewer-H7W6XQNJ.js.map} +1 -1
  13. package/dist/{ConnectedNativeDocxComparison-3YDCXF4V.js → ConnectedNativeDocxComparison-2W3NNA5C.js} +13 -13
  14. package/dist/ConnectedNativeDocxComparison-2W3NNA5C.js.map +1 -0
  15. package/dist/{ConnectedNativeDocxComparison-DFCBPV76.cjs → ConnectedNativeDocxComparison-UJWBGYOF.cjs} +14 -14
  16. package/dist/ConnectedNativeDocxComparison-UJWBGYOF.cjs.map +1 -0
  17. package/dist/{ConnectedNativeDocxEditor-Z2YVPZ3F.cjs → ConnectedNativeDocxEditor-672BRHOT.cjs} +14 -14
  18. package/dist/ConnectedNativeDocxEditor-672BRHOT.cjs.map +1 -0
  19. package/dist/{ConnectedNativeDocxEditor-JTB5GZ24.js → ConnectedNativeDocxEditor-QHVE5IR5.js} +12 -12
  20. package/dist/ConnectedNativeDocxEditor-QHVE5IR5.js.map +1 -0
  21. package/dist/{ConnectedStreamedWordArtifact-3Q54FIJO.cjs → ConnectedStreamedWordArtifact-3MNE42NH.cjs} +14 -14
  22. package/dist/ConnectedStreamedWordArtifact-3MNE42NH.cjs.map +1 -0
  23. package/dist/{ConnectedStreamedWordArtifact-4KQLOEP2.js → ConnectedStreamedWordArtifact-VI3S2YIG.js} +13 -13
  24. package/dist/ConnectedStreamedWordArtifact-VI3S2YIG.js.map +1 -0
  25. package/dist/{DocumentReviewCard-ODEJE27S.js → DocumentReviewCard-F26AXBYZ.js} +6 -6
  26. package/dist/{DocumentReviewCard-ODEJE27S.js.map → DocumentReviewCard-F26AXBYZ.js.map} +1 -1
  27. package/dist/{DocumentReviewCard-DQHW5W5T.cjs → DocumentReviewCard-XK77D3O4.cjs} +6 -6
  28. package/dist/{DocumentReviewCard-DQHW5W5T.cjs.map → DocumentReviewCard-XK77D3O4.cjs.map} +1 -1
  29. package/dist/{WorkspaceTableView-XDKMONPI.cjs → WorkspaceTableView-III5TFER.cjs} +9 -9
  30. package/dist/{WorkspaceTableView-XDKMONPI.cjs.map → WorkspaceTableView-III5TFER.cjs.map} +1 -1
  31. package/dist/{WorkspaceTableView-ZZW36JJV.js → WorkspaceTableView-JUQWTLXI.js} +7 -7
  32. package/dist/{WorkspaceTableView-ZZW36JJV.js.map → WorkspaceTableView-JUQWTLXI.js.map} +1 -1
  33. package/dist/agents/index.cjs +285 -285
  34. package/dist/agents/index.js +8 -8
  35. package/dist/calls/index.cjs +133 -133
  36. package/dist/calls/index.js +9 -9
  37. package/dist/chat/index.cjs +1 -1
  38. package/dist/chat/index.js +1 -1
  39. package/dist/{chunk-EN6IPLOI.cjs → chunk-276KHDQG.cjs} +67 -67
  40. package/dist/{chunk-EN6IPLOI.cjs.map → chunk-276KHDQG.cjs.map} +1 -1
  41. package/dist/{chunk-VUBYQKIR.js → chunk-2L4YFJ6U.js} +10 -10
  42. package/dist/{chunk-VUBYQKIR.js.map → chunk-2L4YFJ6U.js.map} +1 -1
  43. package/dist/{chunk-7ZHBRB3H.cjs → chunk-2MYWB55Z.cjs} +18 -18
  44. package/dist/{chunk-7ZHBRB3H.cjs.map → chunk-2MYWB55Z.cjs.map} +1 -1
  45. package/dist/{chunk-ICVUKTD3.cjs → chunk-3FKRE4BL.cjs} +11 -11
  46. package/dist/{chunk-ICVUKTD3.cjs.map → chunk-3FKRE4BL.cjs.map} +1 -1
  47. package/dist/{chunk-MN5DI5NZ.js → chunk-3TI4EVXB.js} +5 -5
  48. package/dist/{chunk-MN5DI5NZ.js.map → chunk-3TI4EVXB.js.map} +1 -1
  49. package/dist/{chunk-6RXH2H77.js → chunk-4FPFIDJE.js} +3 -3
  50. package/dist/{chunk-6RXH2H77.js.map → chunk-4FPFIDJE.js.map} +1 -1
  51. package/dist/{chunk-U5WK7WQS.js → chunk-4LIKVTSO.js} +3 -3
  52. package/dist/{chunk-U5WK7WQS.js.map → chunk-4LIKVTSO.js.map} +1 -1
  53. package/dist/{chunk-5OVCVCVZ.cjs → chunk-5S2N6HSA.cjs} +3 -3
  54. package/dist/{chunk-5OVCVCVZ.cjs.map → chunk-5S2N6HSA.cjs.map} +1 -1
  55. package/dist/{chunk-6CJNGKZQ.cjs → chunk-5V7JWZQ4.cjs} +55 -55
  56. package/dist/{chunk-6CJNGKZQ.cjs.map → chunk-5V7JWZQ4.cjs.map} +1 -1
  57. package/dist/{chunk-BNXZDIBF.js → chunk-6JDUM4R2.js} +11 -11
  58. package/dist/{chunk-BNXZDIBF.js.map → chunk-6JDUM4R2.js.map} +1 -1
  59. package/dist/{chunk-24DRVHN3.js → chunk-7IHMM6TG.js} +3 -3
  60. package/dist/{chunk-24DRVHN3.js.map → chunk-7IHMM6TG.js.map} +1 -1
  61. package/dist/{chunk-5DY5I2X4.js → chunk-AGC25AKG.js} +3 -3
  62. package/dist/{chunk-5DY5I2X4.js.map → chunk-AGC25AKG.js.map} +1 -1
  63. package/dist/{chunk-FNAM7AII.js → chunk-B7UCQEPD.js} +6 -6
  64. package/dist/{chunk-FNAM7AII.js.map → chunk-B7UCQEPD.js.map} +1 -1
  65. package/dist/{chunk-OKSRXXKP.js → chunk-BRY553LQ.js} +3 -3
  66. package/dist/{chunk-OKSRXXKP.js.map → chunk-BRY553LQ.js.map} +1 -1
  67. package/dist/{chunk-JCYGQHS7.js → chunk-CGVWWTEZ.js} +3 -3
  68. package/dist/{chunk-JCYGQHS7.js.map → chunk-CGVWWTEZ.js.map} +1 -1
  69. package/dist/{chunk-A3OM7LQI.cjs → chunk-D76PIWFN.cjs} +14 -14
  70. package/dist/{chunk-A3OM7LQI.cjs.map → chunk-D76PIWFN.cjs.map} +1 -1
  71. package/dist/{chunk-45D5RS6T.cjs → chunk-DL3XYTKI.cjs} +8 -8
  72. package/dist/{chunk-45D5RS6T.cjs.map → chunk-DL3XYTKI.cjs.map} +1 -1
  73. package/dist/{chunk-Y7SRZYJZ.js → chunk-E27367NI.js} +3 -3
  74. package/dist/{chunk-Y7SRZYJZ.js.map → chunk-E27367NI.js.map} +1 -1
  75. package/dist/{chunk-W6C2NOKI.js → chunk-GGY6GXVJ.js} +3 -3
  76. package/dist/{chunk-W6C2NOKI.js.map → chunk-GGY6GXVJ.js.map} +1 -1
  77. package/dist/{chunk-YYGYO6KB.js → chunk-H5IWMVS5.js} +3 -3
  78. package/dist/{chunk-YYGYO6KB.js.map → chunk-H5IWMVS5.js.map} +1 -1
  79. package/dist/{chunk-BI62XYJG.js → chunk-HJHLQPT2.js} +5 -5
  80. package/dist/{chunk-BI62XYJG.js.map → chunk-HJHLQPT2.js.map} +1 -1
  81. package/dist/{chunk-NWQ5RRNN.js → chunk-I2JQEXTG.js} +6 -6
  82. package/dist/{chunk-NWQ5RRNN.js.map → chunk-I2JQEXTG.js.map} +1 -1
  83. package/dist/{chunk-GX455LF3.cjs → chunk-IGMZN37B.cjs} +4 -4
  84. package/dist/{chunk-GX455LF3.cjs.map → chunk-IGMZN37B.cjs.map} +1 -1
  85. package/dist/{chunk-P34WL63W.cjs → chunk-JUP5PCLB.cjs} +6 -6
  86. package/dist/{chunk-P34WL63W.cjs.map → chunk-JUP5PCLB.cjs.map} +1 -1
  87. package/dist/{chunk-JRZQBFPS.js → chunk-KEWX6KFN.js} +3 -3
  88. package/dist/{chunk-JRZQBFPS.js.map → chunk-KEWX6KFN.js.map} +1 -1
  89. package/dist/{chunk-FWEDJBBV.cjs → chunk-KFXOZXZD.cjs} +4 -4
  90. package/dist/{chunk-FWEDJBBV.cjs.map → chunk-KFXOZXZD.cjs.map} +1 -1
  91. package/dist/{chunk-6V6C2OHX.js → chunk-KII2DCGW.js} +3 -3
  92. package/dist/{chunk-6V6C2OHX.js.map → chunk-KII2DCGW.js.map} +1 -1
  93. package/dist/{chunk-JUG2QEL7.cjs → chunk-KRWWRTDN.cjs} +3 -3
  94. package/dist/{chunk-JUG2QEL7.cjs.map → chunk-KRWWRTDN.cjs.map} +1 -1
  95. package/dist/{chunk-N6B6H4QV.cjs → chunk-L6DAJUDF.cjs} +22 -22
  96. package/dist/{chunk-N6B6H4QV.cjs.map → chunk-L6DAJUDF.cjs.map} +1 -1
  97. package/dist/{chunk-OVZ54T5M.cjs → chunk-LC7HFDCV.cjs} +25 -17
  98. package/dist/chunk-LC7HFDCV.cjs.map +1 -0
  99. package/dist/{chunk-YJOFSJYQ.cjs → chunk-LHQHK6MB.cjs} +10 -10
  100. package/dist/{chunk-YJOFSJYQ.cjs.map → chunk-LHQHK6MB.cjs.map} +1 -1
  101. package/dist/{chunk-JUO3S5OO.js → chunk-LXVFPIHM.js} +4 -4
  102. package/dist/{chunk-JUO3S5OO.js.map → chunk-LXVFPIHM.js.map} +1 -1
  103. package/dist/{chunk-MH2VQFAE.cjs → chunk-MA4RZFYH.cjs} +3 -3
  104. package/dist/{chunk-MH2VQFAE.cjs.map → chunk-MA4RZFYH.cjs.map} +1 -1
  105. package/dist/{chunk-DRDGSOO4.js → chunk-MEDTT4EK.js} +16 -8
  106. package/dist/chunk-MEDTT4EK.js.map +1 -0
  107. package/dist/{chunk-64GEEHKH.js → chunk-MQ2XHUAV.js} +3 -3
  108. package/dist/{chunk-64GEEHKH.js.map → chunk-MQ2XHUAV.js.map} +1 -1
  109. package/dist/{chunk-ZSBAE455.js → chunk-OAAG3TQ2.js} +3 -3
  110. package/dist/{chunk-ZSBAE455.js.map → chunk-OAAG3TQ2.js.map} +1 -1
  111. package/dist/{chunk-3VL64465.cjs → chunk-OAEJME5Q.cjs} +48 -48
  112. package/dist/{chunk-3VL64465.cjs.map → chunk-OAEJME5Q.cjs.map} +1 -1
  113. package/dist/{chunk-V4SRR4GE.cjs → chunk-ORIOOXUU.cjs} +5 -5
  114. package/dist/{chunk-V4SRR4GE.cjs.map → chunk-ORIOOXUU.cjs.map} +1 -1
  115. package/dist/{chunk-Y5RCJQ3A.cjs → chunk-QB7PNQDJ.cjs} +3 -3
  116. package/dist/{chunk-Y5RCJQ3A.cjs.map → chunk-QB7PNQDJ.cjs.map} +1 -1
  117. package/dist/{chunk-XUO32INL.cjs → chunk-QNDKLQYT.cjs} +3 -3
  118. package/dist/{chunk-XUO32INL.cjs.map → chunk-QNDKLQYT.cjs.map} +1 -1
  119. package/dist/{chunk-I7O7QWKX.cjs → chunk-QOV564TW.cjs} +4 -4
  120. package/dist/{chunk-I7O7QWKX.cjs.map → chunk-QOV564TW.cjs.map} +1 -1
  121. package/dist/{chunk-DBWDYPN2.js → chunk-QYILQJOD.js} +15 -15
  122. package/dist/{chunk-DBWDYPN2.js.map → chunk-QYILQJOD.js.map} +1 -1
  123. package/dist/{chunk-4VGZGM6M.cjs → chunk-QYRPFPQ7.cjs} +3 -3
  124. package/dist/{chunk-4VGZGM6M.cjs.map → chunk-QYRPFPQ7.cjs.map} +1 -1
  125. package/dist/{chunk-WLFHPXBA.js → chunk-RYSU62TM.js} +3 -3
  126. package/dist/{chunk-WLFHPXBA.js.map → chunk-RYSU62TM.js.map} +1 -1
  127. package/dist/{chunk-D4SDNNLX.cjs → chunk-UFGC77KR.cjs} +5 -5
  128. package/dist/{chunk-D4SDNNLX.cjs.map → chunk-UFGC77KR.cjs.map} +1 -1
  129. package/dist/{chunk-P7FHVWM7.cjs → chunk-UHP6AP6C.cjs} +10 -10
  130. package/dist/{chunk-P7FHVWM7.cjs.map → chunk-UHP6AP6C.cjs.map} +1 -1
  131. package/dist/{chunk-LMB5SJGW.js → chunk-UZER3JJX.js} +3 -3
  132. package/dist/{chunk-LMB5SJGW.js.map → chunk-UZER3JJX.js.map} +1 -1
  133. package/dist/{chunk-R33SPSXO.cjs → chunk-VGMK4F2E.cjs} +11 -11
  134. package/dist/{chunk-R33SPSXO.cjs.map → chunk-VGMK4F2E.cjs.map} +1 -1
  135. package/dist/{chunk-3STESMKX.cjs → chunk-WV6RHIFP.cjs} +3 -3
  136. package/dist/{chunk-3STESMKX.cjs.map → chunk-WV6RHIFP.cjs.map} +1 -1
  137. package/dist/{chunk-24JOY5V2.js → chunk-WWME52XL.js} +3 -3
  138. package/dist/{chunk-24JOY5V2.js.map → chunk-WWME52XL.js.map} +1 -1
  139. package/dist/{chunk-7SPVL54U.js → chunk-XAZUII52.js} +4 -4
  140. package/dist/{chunk-7SPVL54U.js.map → chunk-XAZUII52.js.map} +1 -1
  141. package/dist/{chunk-3XYTZG4F.js → chunk-YPTMALBZ.js} +3 -3
  142. package/dist/{chunk-3XYTZG4F.js.map → chunk-YPTMALBZ.js.map} +1 -1
  143. package/dist/{chunk-LYUS5I7M.cjs → chunk-ZK56K25Q.cjs} +7 -7
  144. package/dist/{chunk-LYUS5I7M.cjs.map → chunk-ZK56K25Q.cjs.map} +1 -1
  145. package/dist/{chunk-TANMVAB2.cjs → chunk-ZLDFQZSP.cjs} +4 -4
  146. package/dist/{chunk-TANMVAB2.cjs.map → chunk-ZLDFQZSP.cjs.map} +1 -1
  147. package/dist/collaboration/index.cjs +1 -1
  148. package/dist/collaboration/index.js +1 -1
  149. package/dist/connect/docx.cjs +16 -16
  150. package/dist/connect/docx.js +12 -12
  151. package/dist/connect/index.cjs +750 -750
  152. package/dist/connect/index.js +55 -55
  153. package/dist/connect/viewer.cjs +20 -20
  154. package/dist/connect/viewer.js +19 -19
  155. package/dist/embed/index.cjs +30 -30
  156. package/dist/embed/index.js +24 -24
  157. package/dist/facts/index.cjs +2 -2
  158. package/dist/facts/index.js +2 -2
  159. package/dist/files/index.cjs +1 -1
  160. package/dist/files/index.js +1 -1
  161. package/dist/home/index.cjs +31 -31
  162. package/dist/home/index.js +4 -4
  163. package/dist/index.cjs +1464 -1464
  164. package/dist/index.js +35 -35
  165. package/dist/settings/index.cjs +157 -157
  166. package/dist/settings/index.js +3 -3
  167. package/dist/shell/index.cjs +97 -97
  168. package/dist/shell/index.js +9 -9
  169. package/dist/studio/index.cjs +13 -13
  170. package/dist/studio/index.js +10 -10
  171. package/dist/workflow-canvas/index.cjs +44 -42
  172. package/dist/workflow-canvas/index.cjs.map +1 -1
  173. package/dist/workflow-canvas/index.js +29 -27
  174. package/dist/workflow-canvas/index.js.map +1 -1
  175. package/node_modules/@arbidocs/coedit/package.json +1 -1
  176. package/package.json +5 -5
  177. package/dist/ConnectedNativeDocxComparison-3YDCXF4V.js.map +0 -1
  178. package/dist/ConnectedNativeDocxComparison-DFCBPV76.cjs.map +0 -1
  179. package/dist/ConnectedNativeDocxEditor-JTB5GZ24.js.map +0 -1
  180. package/dist/ConnectedNativeDocxEditor-Z2YVPZ3F.cjs.map +0 -1
  181. package/dist/ConnectedStreamedWordArtifact-3Q54FIJO.cjs.map +0 -1
  182. package/dist/ConnectedStreamedWordArtifact-4KQLOEP2.js.map +0 -1
  183. package/dist/chunk-DRDGSOO4.js.map +0 -1
  184. package/dist/chunk-OVZ54T5M.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkFRQME5XS_cjs = require('./chunk-FRQME5XS.cjs');
5
4
  var chunkYZSQ7F5K_cjs = require('./chunk-YZSQ7F5K.cjs');
5
+ var chunkFRQME5XS_cjs = require('./chunk-FRQME5XS.cjs');
6
6
  var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
7
7
  var react = require('react');
8
8
  var ui = require('@arbidocs/react/ui');
@@ -599,5 +599,5 @@ exports.SidebarBadgeRow = SidebarBadgeRow;
599
599
  exports.SidebarRowHoverContext = SidebarRowHoverContext;
600
600
  exports.useShellStartInset = useShellStartInset;
601
601
  exports.useSidebarContext = useSidebarContext;
602
- //# sourceMappingURL=chunk-JUG2QEL7.cjs.map
603
- //# sourceMappingURL=chunk-JUG2QEL7.cjs.map
602
+ //# sourceMappingURL=chunk-KRWWRTDN.cjs.map
603
+ //# sourceMappingURL=chunk-KRWWRTDN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shell/sidebar-context.ts","../src/shell/SidebarBadgeRow.tsx","../src/lib/start-inset.ts","../src/shell/Sidebar.tsx"],"names":["createContext","useContext","forwardRef","SidebarBadgeRow","jsxs","cn","jsx","Tooltip","TooltipTrigger","TooltipContent","useEffect","useMemo","useRef","useDrawerBehavior","testIdOr","Fragment","BlocksTooltipProvider","useState","ActionLink","PanelLeftClose","PanelLeftOpen","X"],"mappings":";;;;;;;;;;AAYO,IAAM,sBAAA,GAAwC;AAAA,EACnD,cAAA,EAAgB,iBAAA;AAAA,EAChB,WAAA,EAAa,cAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,mBAAA,EAAqB;AACvB;AAOO,IAAM,iBAAiBA,mBAAA,CAAmC;AAAA,EAC/D,QAAA,EAAU,IAAA;AAAA,EACV,MAAA,EAAQ;AACV,CAAC,CAAA;AACM,IAAM,iBAAA,GAAoB,MAA2BC,gBAAA,CAAW,cAAc;AAG9E,IAAM,sBAAA,GAAyBD,oBAAc,KAAK;ACIlD,IAAM,eAAA,GAAkBE,gBAAA;AAAA,EAC7B,SAASC,gBAAAA,CACP,EAAE,IAAA,EAAM,OAAO,KAAA,EAAO,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,WAAW,IAAA,GAAO,QAAA,EAAU,GAAG,IAAA,IACtF,GAAA,EACA;AACA,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,iBAAA,EAAkB;AACvC,IAAA,MAAM,QAAA,GAAW,OAAA,KAAY,QAAA,GAAW,KAAA,GAAQ,MAAA,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,IAAa,KAAA,GAAQ,CAAA;AAChD,IAAA,MAAM,YAAY,QAAA,GAAY,KAAA,GAAQ,IAAI,IAAA,GAAO,MAAA,CAAO,KAAK,CAAA,GAAK,IAAA;AAClE,IAAA,MAAM,OAAO,SAAA,KAAc,QAAA,GAAW,GAAG,KAAK,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,KAAA,CAAA;AAE7D,IAAA,IAAI,aAAa,KAAA,EAAO;AACtB,MAAA,uBACEC,eAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA;AAAA,UACA,YAAA,EAAY,IAAA;AAAA,UACZ,WAAA,EAAU,mBAAA;AAAA,UACV,cAAA,EAAa,KAAA;AAAA,UACb,SAAA,EAAWC,KAAA;AAAA,YACT,0QAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG,IAAA;AAAA,UAEJ,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAA,EAAwD,aAAA,EAAW,MAChF,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,2CACC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAW,MAChD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YACC,SAAA,oBACCA,cAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAW,IAAA;AAAA,gBACX,aAAA,EAAa,WAAA;AAAA,gBACb,SAAA,EAAU,2KAAA;AAAA,gBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,OAEJ;AAAA,IAEJ;AAEA,IAAA,MAAM,UAAA,mBACJF,eAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EAAY,IAAA;AAAA,QACZ,WAAA,EAAU,mBAAA;AAAA,QACV,cAAA,EAAa,MAAA;AAAA,QACb,KAAA,EAAO,OAAA,KAAY,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,QACpC,SAAA,EAAWC,KAAA;AAAA,UACT,4OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA0C,aAAA,EAAW,MAClE,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,UACC,SAAA,oBACCA,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAW,IAAA;AAAA,cACX,aAAA,EAAa,WAAA;AAAA,cACb,SAAA,EAAU,qKAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAGF,IAAA,IAAI,OAAA,KAAY,QAAQ,OAAO,UAAA;AAC/B,IAAA,uBACEF,eAAA,CAACG,UAAA,EAAA,EAAQ,aAAA,EAAe,EAAA,EACtB,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAACE,iBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,qCACnCC,iBAAA,EAAA,EAAe,IAAA,EAAK,OAAA,EAAQ,UAAA,EAAY,GACtC,QAAA,EAAA,KAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AC9GO,IAAM,qBAAA,GAAwB;AAErC,IAAM,MAAA,uBAAa,GAAA,EAAoB;AAEvC,SAAS,KAAA,GAAc;AACrB,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,GAAG,MAAA,CAAO,QAAQ,CAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,SAAS,eAAA,CAAgB,KAAA;AACvC,EAAA,IAAI,QAAQ,CAAA,EAAG,KAAA,CAAM,YAAY,qBAAA,EAAuB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,OAC/D,KAAA,CAAM,eAAe,qBAAqB,CAAA;AACjD;AAOO,SAAS,mBAAmB,KAAA,EAAqB;AACtD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,GAAA,0BAAa,mBAAmB,CAAA;AACtC,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AACrB,IAAA,KAAA,EAAM;AACN,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AACjB,MAAA,KAAA,EAAM;AAAA,IACR,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACZ;ACHA,IAAM,OAAO,MAAM;AAAC,CAAA;AAEpB,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,eAAA,GAAkB,GAAG,YAAY,CAAA,EAAA,CAAA;AACvC,IAAM,cAAA,GAAiB,GAAG,WAAW,CAAA,EAAA,CAAA;AAyBrC,SAAS,WAAA,CAAY;AAAA,EACnB,IAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,eAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA,EAAc,aAAA;AAAA,EACd,MAAA;AAAA,EACA,aAAA,EAAe,MAAA;AAAA,EACf;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,YAAA,GAAeC,aAAA,CAAQ,OAAO,EAAE,GAAG,sBAAA,EAAwB,GAAG,MAAA,EAAO,CAAA,EAAI,CAAC,MAAM,CAAC,CAAA;AAEvF,EAAA,MAAM,SAAA,GAAYC,aAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAW,IAAA,KAAS,QAAA;AAC1B,EAAAC,mCAAA,CAAkB,QAAA,EAAU,eAAA,IAAmB,IAAA,EAAM,SAAS,CAAA;AAG9D,EAAA,kBAAA,CAAmB,SAAS,QAAA,GAAW,WAAA,GAAc,IAAA,KAAS,MAAA,GAAS,eAAe,CAAC,CAAA;AACvF,EAAA,MAAM,SAAA,GAAY,iBAAiB,YAAA,CAAa,cAAA;AAChD,EAAA,MAAM,YAAA,GAAeF,aAAA,CAAQ,OAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,YAAA,EAAa,CAAA,EAAI,CAAC,QAAA,EAAU,YAAY,CAAC,CAAA;AAGjG,EAAA,MAAM,OAAA,GACJ,8LAAA;AACF,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,YAAA,EAAc,SAAA;AAAA,IACd,eAAeG,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IACrD,WAAA,EAAa,SAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AACA,EAAA,MAAM,UAAA,GAA4B,EAAE,KAAA,EAAO,cAAA,EAAgB,UAAU,cAAA,EAAe;AAEpF,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,SAAS,QAAA,EAAU;AAGrB,IAAA,IAAA,mBACEV,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,MAAA;AAAA,QACX,YAAA,EAAY,SAAA;AAAA,QACZ,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAWC,KAAAA,CAAG,SAAA,GAAY,UAAA,GAAa,SAAS,cAAc,CAAA;AAAA,QAE9D,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,8BAAA;AAAA,cACV,OAAA,EAAS,eAAA;AAAA,cACT,aAAA,EAAY,MAAA;AAAA,cACZ,eAAaQ,0BAAA,CAAS,cAAA,EAAgB,EAAE,MAAA,EAAQ,oBAAoB;AAAA;AAAA,WACtE;AAAA,0BACAR,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACE,GAAG,MAAA;AAAA,cACJ,SAAA,EAAWD,KAAAA,CAAG,OAAA,EAAS,+CAAA,EAAiD,SAAS,CAAA;AAAA,cACjF,KAAA,EAAO,UAAA;AAAA,cAEN;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,EAEJ,CAAA,MAAA,IAAW,SAAS,WAAA,EAAa;AAG/B,IAAA,IAAA,mBACEC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,MAAA;AAAA,QACJ,SAAA,EAAWD,KAAAA,CAAG,OAAA,EAAS,8BAAA,EAAgC,SAAS,CAAA;AAAA,QAChE,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,QAAA,EAAU,CAAA;AAAA,UACV,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc,CAAA;AAAA,UACd,gBAAA,EAAkB,CAAA;AAAA,UAClB,aAAA,EAAe;AAAA,SACjB;AAAA,QAGA,KAAA,EAAK,IAAA;AAAA,QAEJ;AAAA;AAAA,KACH;AAAA,EAEJ,CAAA,MAAA,IAAW,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,mBACEC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,MAAA;AAAA,QACJ,SAAA,EAAWD,KAAAA,CAAG,OAAA,EAAS,8BAAA,EAAgC,SAAS,CAAA;AAAA,QAChE,KAAA,EAAO,UAAA;AAAA,QACP,YAAA;AAAA,QACA,YAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ,CAAA,MAAO;AAGL,IAAA,IAAA,mBACED,gBAAAW,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAT,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,4FAAA;AAAA,UACV,KAAA,EAAO,EAAE,KAAA,EAAO,eAAA,EAAiB,UAAU,eAAA,EAAgB;AAAA,UAC3D,aAAA,EAAY;AAAA;AAAA,OACd;AAAA,MACC,UAAA,IAAc,mCACbA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,kCAAA;AAAA,UACV,OAAA,EAAS,eAAA;AAAA,UACT,aAAA,EAAY,MAAA;AAAA,UACZ,eAAaQ,0BAAA,CAAS,cAAA,EAAgB,EAAE,MAAA,EAAQ,oBAAoB;AAAA;AAAA,OACtE;AAAA,sBAEFR,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,SAAA,EAAWD,KAAAA;AAAA,YACT,OAAA;AAAA,YACA,aAAa,iBAAA,GAAoB,OAAA;AAAA,YACjC,8BAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,aAAa,cAAA,GAAiB,eAAA;AAAA,YACrC,QAAA,EAAU,aAAa,cAAA,GAAiB;AAAA,WAC1C;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,UAEC;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEC,cAAAA,CAAC,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,YAAA,EAC9B,QAAA,kBAAAA,cAAAA,CAACU,uCAAA,EAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA,EAC/B,CAAA;AAEJ;AAQA,SAAS,cAAc,EAAE,QAAA,EAAU,SAAA,EAAW,aAAA,EAAe,QAAO,EAAwB;AAC1F,EAAA,uBACEV,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAWD,KAAAA,CAAG,wCAAA,EAA0C,SAAS,CAAA;AAAA,MAEhE;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAAoB;AAClB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,iBAAA,EAAkB;AACvC,EAAA,uBACED,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,WAAWC,KAAAA,CAAG,qCAAA,EAAuC,CAAC,QAAA,IAAY,gBAAgB,SAAS,CAAA;AAAA,MAE1F,QAAA,EAAA;AAAA,QAAA,KAAA,EAAO,GAAA,CAAI,CAAC,IAAA,qBACXC,cAAAA,CAAC,kBAA8B,GAAG,IAAA,EAAA,EAAb,IAAA,CAAK,EAAc,CACzC,CAAA;AAAA,QACA,QAAA,EAAU,GAAA,CAAI,CAAC,OAAA,qBACdA,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YAEC,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,eAAa,OAAA,CAAQ,MAAA;AAAA,YAEpB,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAClBA,cAAAA,CAAC,cAAA,EAAA,EAA8B,GAAG,IAAA,EAAA,EAAb,IAAA,CAAK,EAAc,CACzC;AAAA,WAAA;AAAA,UAPI,OAAA,CAAQ;AAAA,SAShB,CAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,YAAA,CAAa;AAAA,EACpB,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,iBAAA,EAAkB;AACvC,EAAA,uBACEF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA,KAAc,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,MAAA,CAAA;AAAA,MAC9D,WAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,WAAWC,KAAAA,CAAG,qCAAA,EAAuC,CAAC,QAAA,IAAY,gBAAgB,SAAS,CAAA;AAAA,MAE1F,QAAA,EAAA;AAAA,QAAA,KAAA,KACE,2BACCC,cAAAA,CAAC,iBAAA,EAAA,EAAmB,QAAA,EAAA,KAAA,EAAM,oBAE1BA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,WAAA;AAAA,YACL,WAAA,EAAU,uBAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ,CAAA;AAAA,QAEH;AAAA;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgD;AAC/F,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAWD,KAAAA;AAAA,QACT,oFAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEA,SAAS,cAAc,EAAE,QAAA,EAAU,SAAA,EAAW,aAAA,EAAe,QAAO,EAAwB;AAC1F,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,iBAAA,EAAkB;AACvC,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAWD,KAAAA;AAAA,QACT,qDAAA;AAAA,QACA,CAAC,QAAA,IAAY,cAAA;AAAA,QACb;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEA,IAAM,eAAA,GAAoD;AAAA,EACxD,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAgBA,SAAS,cAAA,CAAe;AAAA,EACtB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EACT,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,iBAAA,EAAkB;AAEvC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIY,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,GAAA,GAAM,QAAA,GAAW,MAAA,GAAa,OAAA,IAAW,KAAA;AAE/C,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,6BACJX,cAAAA;AAAA,MAACY,4BAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,QAChC,WAAA,EAAU,kBAAA;AAAA,QACV,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAWb,KAAAA;AAAA,UACT,gGAAA;AAAA,UACA,SACI,kCAAA,GACA,4DAAA;AAAA,UACJ,QAAA,IAAY,mDAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACZ,sCACCF,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,0BACDE,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,uBAAA;AAAA,cACV,WAAA,EAAW,SAAA;AAAA,cACX,SAAA,EAAWD,KAAAA;AAAA,gBACT,sEAAA;AAAA,gBACA,gBAAgB,SAAS;AAAA;AAC3B;AAAA;AACF,SAAA,EACF,IAEA,IAAA,EAEJ;AAAA;AAAA,KACF;AAEF,IAAA,IAAI,CAAC,KAAK,OAAO,UAAA;AACjB,IAAA,uBACED,eAAAA,CAACG,UAAAA,EAAA,EAAQ,eAAe,EAAA,EACtB,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAACE,iBAAAA,EAAA,EAAe,OAAA,EAAO,MAAE,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,sBACpCF,eAACG,iBAAAA,EAAA,EAAe,MAAK,OAAA,EAAQ,UAAA,EAAY,GACtC,QAAA,EAAA,GAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,QAAA,GAAWJ,KAAAA;AAAA,IACf,iHAAA;AAAA,IACA,SACI,gDAAA,GACA,wEAAA;AAAA,IACJ,QAAA,IAAY,mDAAA;AAAA,IACZ;AAAA,GACF;AACA,EAAA,MAAM,SAAA,GAAY,KAAA,KAAU,MAAA,oBAC1BD,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAEC,SAAA,EAAWC,KAAAA;AAAA,QACT,8FAAA;AAAA,QACA,SAAS,wBAAA,GAA2B;AAAA,OACtC;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAIF,EAAA,IAAI,IAAA,IAAQ,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU;AAClC,IAAA,uBACED,eAAAA;AAAA,MAACc,4BAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,QAChC,WAAA,EAAU,kBAAA;AAAA,QACV,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,QAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAZ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAyD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,0BAC7EA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAmC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACxD;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAIA,EAAA,IAAI,IAAA,IAAQ,CAAC,QAAA,EAAU;AACrB,IAAA,uBACEF,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QACvC,YAAA,EAAc,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,QACxC,cAAA,EAAgB,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QACzC,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,UAAA,IAAI,CAAC,EAAE,aAAA,CAAc,QAAA,CAAS,EAAE,aAA4B,CAAA,iBAAkB,KAAK,CAAA;AAAA,QACrF,CAAA;AAAA,QACA,WAAA,EAAU,kBAAA;AAAA,QACV,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAWC,KAAAA,CAAG,QAAA,EAAU,UAAU,CAAA;AAAA,QAElC,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAACY,4BAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,QAAA;AAAA,cACA,YAAA,EAAY,KAAA;AAAA,cACZ,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,cAChC,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAd,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,4BAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAyD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,4BAC7EA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAmC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACxD;AAAA,WAAA,EACH,CAAA;AAAA,0BACAA,cAAAA,CAAC,sBAAA,CAAuB,QAAA,EAAvB,EAAgC,KAAA,EAAO,WAAA,EACtC,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAiD,oBAAS,CAAA,EAC5E;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEF,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,MAC1B,cAAA,EAAc,SAAS,MAAA,GAAS,MAAA;AAAA,MAChC,OAAA,EAAS,WAAW,MAAA,GAAY,QAAA;AAAA,MAChC,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MACvC,YAAA,EAAc,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,MACxC,cAAA,EAAgB,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MACzC,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,QAAA,IAAI,CAAC,EAAE,aAAA,CAAc,QAAA,CAAS,EAAE,aAA4B,CAAA,iBAAkB,KAAK,CAAA;AAAA,MACrF,CAAA;AAAA,MACA,SAAA,EACE,QAAA,GACI,MAAA,GACA,CAAC,CAAA,KAAM;AACL,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,QAAA,EAAS;AAAA,QACX;AAAA,MACF,CAAA;AAAA,MAEN,WAAA,EAAU,kBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,QAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAE,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EAAyD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAC7EA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAmC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACxD,SAAA;AAAA,QACA,QAAA,oBACCA,cAAAA,CAAC,sBAAA,CAAuB,UAAvB,EAAgC,KAAA,EAAO,WAAA,EACtC,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAAgD,oBAAS,CAAA,EAC3E;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAgBA,SAAS,gBAAA,CAAiB;AAAA,EACxB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAA0B;AACxB,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,iBAAA,EAAkB;AAC/C,EAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,WAAA;AACrD,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,QAAA;AAAA,MACT,KAAA,EAAO,KAAA;AAAA,MACP,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,QAAA;AAAA,MACd,eAAaQ,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,sBAAsB,CAAA;AAAA,MAC9D,SAAA,EAAWT,KAAAA;AAAA,QACT,yKAAA;AAAA,QACA,uGAAA;AAAA,QACA,uFAAA;AAAA,QACA,2HAAA;AAAA,QACA,WAAW,QAAA,GAAW,UAAA;AAAA,QACtB;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,QAAA,mBAAWC,cAAAA,CAACa,0BAAA,EAAA,EAAe,SAAA,EAAU,QAAA,EAAS,CAAA,mBAAKb,cAAAA,CAACc,yBAAA,EAAA,EAAc,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,GACxF;AAEJ;AAYA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA,EAAe;AACjB,CAAA,EAA6B;AAC3B,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,iBAAA,EAAkB;AACrC,EAAA,MAAM,UAAA,GAAa,kBAAkB,MAAA,CAAO,mBAAA;AAC5C,EAAA,uBACEhB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAU,sDAAA;AAAA,MAET,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDE,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,YAAA,EAAY,UAAA;AAAA,YACZ,eAAaQ,0BAAA,CAAS,MAAA,EAAQ,EAAE,MAAA,EAAQ,oBAAoB,CAAA;AAAA,YAC5D,SAAA,EAAU,kIAAA;AAAA,YAEV,QAAA,kBAAAR,cAAAA,CAACe,aAAA,EAAA,EAAE,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA;AACxB;AAAA;AAAA,GACF;AAEJ;AAIO,IAAM,OAAA,GAAU;AAAA,EACrB,IAAA,EAAM,WAAA;AAAA,EACN,MAAA,EAAQ,aAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,YAAA;AAAA,EACP,UAAA,EAAY,iBAAA;AAAA,EACZ,OAAA,EAAS,cAAA;AAAA,EACT,MAAA,EAAQ,aAAA;AAAA,EACR,SAAA,EAAW,gBAAA;AAAA,EACX,QAAA,EAAU,eAAA;AAAA,EACV,YAAA,EAAc;AAChB","file":"chunk-JUG2QEL7.cjs","sourcesContent":["import { createContext, useContext } from 'react'\n\n/** Fixed strings of the sidebar family. Set once on `Sidebar.Root`; parts read them from context. */\nexport interface SidebarLabels {\n /** The sidebar's accessible name (the Root `aria-label` prop wins). */\n mainNavigation: string\n hideSidebar: string\n showSidebar: string\n /** The drawer's close button (the `closeLabel` prop wins). */\n closeNavigationMenu: string\n}\n\nexport const DEFAULT_SIDEBAR_LABELS: SidebarLabels = {\n mainNavigation: 'Main navigation',\n hideSidebar: 'Hide sidebar',\n showSidebar: 'Show sidebar',\n closeNavigationMenu: 'Close navigation menu',\n}\n\nexport interface SidebarContextValue {\n /** Labels are visible (full width), as opposed to the icon-only rail. */\n expanded: boolean\n labels: SidebarLabels\n}\nexport const SidebarContext = createContext<SidebarContextValue>({\n expanded: true,\n labels: DEFAULT_SIDEBAR_LABELS,\n})\nexport const useSidebarContext = (): SidebarContextValue => useContext(SidebarContext)\n\n/** True while the surrounding row is hovered/focused; trailing controls may brighten on it. */\nexport const SidebarRowHoverContext = createContext(false)\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { useSidebarContext } from './sidebar-context'\n\nexport interface SidebarBadgeRowProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Glyph (20px). */\n icon: ReactNode\n /** Visible label of the expanded row; the tooltip of the icon-only rail. */\n label: string\n /** Unread/pending number. Hidden at 0 or `undefined`; values above 9 read \"9+\". */\n count?: number\n /**\n * Accessible name including the count, for example \"Notifications, 2 unread\". Defaults to\n * `label` plus the count.\n */\n ariaLabel?: string\n /**\n * `row`: a labelled row styled like the module rows, badge at the right. `icon`: icon-only with\n * the badge on the corner. Default follows the sidebar (`row` expanded, `icon` on the rail).\n */\n variant?: 'row' | 'icon'\n /** Test id of the count badge. */\n badgeTestId?: string\n}\n\n/**\n * A sidebar row that carries a badge and may open something (a panel, a popover): the\n * notifications and contacts rows above the account bar. A real button that forwards its ref and\n * rest props, so it can be a popover trigger (`<DropdownMenuTrigger asChild>`). The badge is\n * visible in both the expanded row and the icon-only rail, and the accessible name carries the\n * count in both.\n */\nexport const SidebarBadgeRow = forwardRef<HTMLButtonElement, SidebarBadgeRowProps>(\n function SidebarBadgeRow(\n { icon, label, count, ariaLabel, variant, badgeTestId, className, type = 'button', ...rest },\n ref\n ) {\n const { expanded } = useSidebarContext()\n const resolved = variant ?? (expanded ? 'row' : 'icon')\n const hasCount = count !== undefined && count > 0\n const badgeText = hasCount ? (count > 9 ? '9+' : String(count)) : null\n const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label)\n\n if (resolved === 'row') {\n return (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"row\"\n className={cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 flex-shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n <span className=\"ml-3 min-w-0 truncate\" aria-hidden>\n {label}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"ml-auto inline-flex min-w-5 flex-shrink-0 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold leading-5 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n }\n\n const iconButton = (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"icon\"\n title={variant === 'icon' ? label : undefined}\n className={cn(\n 'relative m-0 flex h-9 w-12 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"absolute right-1 top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-xs font-semibold leading-4 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n // A standalone icon button (the page header) keeps its native title; the rail uses a tooltip.\n if (variant === 'icon') return iconButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{iconButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {label}\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n","import { useEffect } from 'react'\n\n/**\n * The CSS custom property that carries how much of the screen's start (left) edge a docked sidebar\n * takes, set on `<html>`. A floating element pinned to the start corner (the install prompt)\n * positions itself `calc(var(--shell-start-inset, 0px) + 0.75rem)` so it never covers the\n * sidebar's footer (the account menu).\n */\nexport const SHELL_START_INSET_VAR = '--shell-start-inset'\n\nconst widths = new Map<symbol, number>()\n\nfunction apply(): void {\n if (typeof document === 'undefined') return\n const inset = Math.max(0, ...widths.values())\n const style = document.documentElement.style\n if (inset > 0) style.setProperty(SHELL_START_INSET_VAR, `${inset}px`)\n else style.removeProperty(SHELL_START_INSET_VAR)\n}\n\n/**\n * Report a sidebar docked at the start edge, `width` px wide (0 while it is collapsed or is an\n * overlay drawer), to {@link SHELL_START_INSET_VAR}. `Sidebar.Root` calls it; call it from your\n * own docked side panel.\n */\nexport function useShellStartInset(width: number): void {\n useEffect(() => {\n const key = Symbol('shell-start-inset')\n widths.set(key, width)\n apply()\n return () => {\n widths.delete(key)\n apply()\n }\n }, [width])\n}\n","import { useMemo, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { PanelLeftClose, PanelLeftOpen, X } from 'lucide-react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport {\n DEFAULT_SIDEBAR_LABELS,\n SidebarContext,\n SidebarRowHoverContext,\n useSidebarContext,\n type SidebarLabels,\n} from './sidebar-context'\nimport { SidebarBadgeRow } from './SidebarBadgeRow'\nimport { ActionLink } from '../components/ActionLink'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\nimport { useDrawerBehavior } from '../lib/use-drawer'\nimport { useShellStartInset } from '../lib/start-inset'\nimport type { SidebarMode } from '../lib/sidebar-mode'\nimport type { NavItem, NavItemIndicator, NavSection } from './types'\n\n/**\n * Sidebar: the one tinted column that carries the app frame. Compound parts:\n * Sidebar.Root positioning shell for the four modes (drawer / collapsed / pinned / rail)\n * Sidebar.Header top block (switcher, ask field, pin toggle)\n * Sidebar.Nav the rows: pass `items` (NavItem[]) or compose Sidebar.NavItem children\n * Sidebar.Group a labelled run of rows (heading when expanded, divider on the rail)\n * Sidebar.Footer pinned to the bottom (offline pill, tips card, action cluster)\n * Sidebar.PinToggle / Sidebar.DrawerHeader the header's two stock controls\n *\n * Presentational and controlled: the app resolves `mode`/`expanded` (see `resolveSidebarLayout`\n * and `useSidebarSettle`) and owns where hover/pin/drawer state lives.\n */\n\nconst noop = () => {}\n\nconst COLLAPSED_PX = 64\nconst EXPANDED_PX = 256\nconst COLLAPSED_WIDTH = `${COLLAPSED_PX}px`\nconst EXPANDED_WIDTH = `${EXPANDED_PX}px`\n\nexport interface SidebarRootProps {\n /** Constrain the drawer to an embedded frame. The app keeps the viewport default. */\n contained?: boolean\n mode: SidebarMode\n /** Labels visible. Provided to every part through context. */\n expanded: boolean\n /** `rail` mode: floats open to full width. */\n isHovering?: boolean\n onBackdropClick?: () => void\n /** `rail` mode on touch: the floated-open rail dims the content behind it; tapping it closes. */\n hasRailBackdrop?: boolean\n onMouseEnter?: () => void\n onMouseLeave?: () => void\n children: ReactNode\n className?: string\n 'aria-label'?: string\n labels?: Partial<SidebarLabels>\n /** Root id (default `sidebar`). */\n 'data-testid'?: string\n /** Drawer backdrop id (default `sidebar-backdrop`). */\n backdropTestId?: string\n}\n\nfunction SidebarRoot({\n mode,\n contained = false,\n expanded,\n isHovering = false,\n onBackdropClick,\n hasRailBackdrop = false,\n onMouseEnter,\n onMouseLeave,\n children,\n className,\n 'aria-label': ariaLabelProp,\n labels,\n 'data-testid': testId,\n backdropTestId,\n}: SidebarRootProps) {\n const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels])\n // The drawer is a modal: scroll lock, Escape, focus trap and focus return to the opener.\n const drawerRef = useRef<HTMLDivElement>(null)\n const isDrawer = mode === 'drawer'\n useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef)\n // Floating start-corner elements (the install prompt) sit clear of the docked sidebar; a rail\n // expanding on hover floats over the page, so only its collapsed width counts.\n useShellStartInset(mode === 'pinned' ? EXPANDED_PX : mode === 'rail' ? COLLAPSED_PX : 0)\n const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation\n const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels])\n // `navBase` omits horizontal padding so each mode owns its own: the collapsed state must\n // reach a true 0 width, which an `!important` px would block.\n const navBase =\n 'group/sidebar bg-sidebar border-r border-border text-foreground scrollbar-themed flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out'\n const common = {\n 'aria-label': ariaLabel,\n 'data-testid': testIdOr(testId, { testId: 'sidebar' }),\n 'data-slot': 'sidebar',\n 'data-mode': mode,\n } as const\n const fixedWidth: CSSProperties = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH }\n\n let body: ReactNode\n if (mode === 'drawer') {\n // Small-screen off-canvas panel + dismiss backdrop; bypasses the hover/collapse model. The\n // wrapper is the modal dialog; the nav landmark sits inside it.\n body = (\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n data-slot=\"sidebar-drawer\"\n className={cn(contained ? 'absolute' : 'fixed', 'inset-0 z-50')}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n <nav\n {...common}\n className={cn(navBase, '!px-3 absolute left-0 top-0 pt-safe shadow-xl', className)}\n style={fixedWidth}\n >\n {children}\n </nav>\n </div>\n )\n } else if (mode === 'collapsed') {\n // Stays mounted at width 0 so the transition runs on both enter and leave. Horizontal padding\n // is dropped or overflow-hidden would reveal a clipped sliver of the icons.\n body = (\n <nav\n {...common}\n className={cn(navBase, 'absolute left-0 top-0 z-[45]', className)}\n style={{\n width: '0px',\n minWidth: 0,\n paddingLeft: 0,\n paddingRight: 0,\n borderRightWidth: 0,\n pointerEvents: 'none',\n }}\n // Width 0 hides the links visually; inert also takes them out of the tab order and the\n // accessibility tree.\n inert\n >\n {children}\n </nav>\n )\n } else if (mode === 'pinned') {\n body = (\n <nav\n {...common}\n className={cn(navBase, '!px-3 relative flex-shrink-0', className)}\n style={fixedWidth}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </nav>\n )\n } else {\n // Rail: a permanent spacer keeps the flex layout still; the nav is always absolute so only\n // its width animates on hover (no layout jump).\n body = (\n <>\n <div\n className=\"bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0\"\n style={{ width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH }}\n aria-hidden=\"true\"\n />\n {isHovering && hasRailBackdrop && (\n <div\n className=\"fixed inset-0 z-[44] bg-black/40\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n )}\n <nav\n {...common}\n className={cn(\n navBase,\n isHovering ? '!px-3 shadow-xl' : '!px-2',\n 'absolute left-0 top-0 z-[45]',\n className\n )}\n style={{\n width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </nav>\n </>\n )\n }\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <BlocksTooltipProvider>{body}</BlocksTooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarSectionProps {\n children: ReactNode\n className?: string\n 'data-testid'?: string\n}\n\nfunction SidebarHeader({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-3 pb-3', className)}\n >\n {children}\n </div>\n )\n}\n\nexport interface SidebarNavProps extends Omit<SidebarSectionProps, 'children'> {\n children?: ReactNode\n /** Rows as data. Children render after them. */\n items?: NavItem[]\n /** Labelled groups of rows as data (each a `Sidebar.Group`), after `items`. */\n sections?: NavSection[]\n}\n\nfunction SidebarNav({\n items,\n sections,\n children,\n className,\n 'data-testid': testId,\n}: SidebarNavProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-nav\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {items?.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n {sections?.map((section) => (\n <SidebarGroup\n key={section.id}\n label={section.label}\n ariaLabel={section.ariaLabel}\n data-testid={section.testId}\n >\n {section.items.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n </SidebarGroup>\n ))}\n {children}\n </div>\n )\n}\n\nexport interface SidebarGroupProps extends SidebarSectionProps {\n /** Group heading. Shown above the rows when expanded; a thin divider stands in on the rail. */\n label?: ReactNode\n /** Accessible name when `label` is not plain text. */\n ariaLabel?: string\n}\n\n/** A labelled run of rows inside the nav (for example \"Workspace\", \"Tools\"). */\nfunction SidebarGroup({\n label,\n ariaLabel,\n children,\n className,\n 'data-testid': testId,\n}: SidebarGroupProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : undefined)}\n data-slot=\"sidebar-group\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {label &&\n (expanded ? (\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n ) : (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className=\"my-1 h-px w-6 bg-border\"\n />\n ))}\n {children}\n </div>\n )\n}\n\n/** The heading of a `Sidebar.Group` (exported for custom headings). Hidden by the group on the rail. */\nfunction SidebarGroupLabel({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div\n data-slot=\"sidebar-group-label\"\n className={cn(\n 'px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nfunction SidebarFooter({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-testid={testId}\n className={cn(\n 'mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3',\n !expanded && 'items-center',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nconst INDICATOR_TONES: Record<NavItemIndicator, string> = {\n progress: 'bg-primary',\n error: 'bg-red-solid',\n attention: 'bg-yellow-solid',\n}\n\nexport type SidebarNavItemProps = Omit<NavItem, 'id'> & {\n id?: string\n className?: string\n /** Tooltip shown on the icon-only rail; defaults to the label. */\n tooltip?: string\n}\n\n/**\n * One row: [icon] [label] [count] [trailing]. 36px (44px on coarse pointers). The active row is\n * the selection tint, never a filled block; counts are quiet numbers, not pills.\n *\n * The expanded row is a div with role=\"button\" (not a native <button>) so an interactive\n * `trailing` control can be nested without producing button-in-button markup.\n */\nfunction SidebarNavItem({\n label,\n icon,\n active = false,\n onSelect,\n href,\n count,\n countIcon,\n testId,\n disabled = false,\n trailing,\n indicator,\n className,\n tooltip,\n}: SidebarNavItemProps) {\n const { expanded } = useSidebarContext()\n // Tracked as state (not CSS :hover) so a trailing control can read it via context.\n const [isRowActive, setIsRowActive] = useState(false)\n const tip = expanded ? undefined : (tooltip ?? label)\n\n if (!expanded) {\n const railButton = (\n <ActionLink\n href={href}\n onSelect={onSelect}\n disabled={disabled}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(\n 'm-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11',\n active\n ? 'bg-accent text-accent-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )}\n >\n <div className=\"flex size-5 items-center justify-center\">\n {indicator ? (\n <div className=\"relative\">\n {icon}\n <div\n data-slot=\"sidebar-nav-indicator\"\n data-tone={indicator}\n className={cn(\n 'absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar',\n INDICATOR_TONES[indicator]\n )}\n />\n </div>\n ) : (\n icon\n )}\n </div>\n </ActionLink>\n )\n if (!tip) return railButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{railButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n const rowClass = cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11',\n active\n ? 'bg-accent font-semibold text-accent-foreground'\n : 'font-medium text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )\n const countNode = count !== undefined && (\n <span\n // `ml-auto` lines the counts up on the right edge as one column of numbers.\n className={cn(\n 'ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums',\n active ? 'text-accent-foreground' : 'text-muted-foreground'\n )}\n >\n {countIcon}\n {count}\n </span>\n )\n\n // A link row without a nested control is the anchor itself.\n if (href && !disabled && !trailing) {\n return (\n <ActionLink\n href={href}\n onSelect={onSelect}\n aria-current={active ? 'page' : undefined}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </ActionLink>\n )\n }\n\n // A link row with a nested control: a stretched anchor sits under the content, and the\n // trailing control rises above it, so there is never an interactive element inside an anchor.\n if (href && !disabled) {\n return (\n <div\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(rowClass, 'relative')}\n >\n <ActionLink\n href={href}\n onSelect={onSelect}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n <div className=\"pointer-events-none flex min-w-0 flex-1 items-center\">\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </div>\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"relative ml-2 flex flex-shrink-0 items-center\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n </div>\n )\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-current={active ? 'page' : undefined}\n onClick={disabled ? undefined : onSelect}\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect()\n }\n }\n }\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n {trailing && (\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"ml-auto flex flex-shrink-0 items-center pl-2\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n )}\n </div>\n )\n}\n\nexport interface SidebarPinToggleProps {\n isPinned: boolean\n onToggle: () => void\n className?: string\n /** Default `sidebar-pin-button`. */\n 'data-testid'?: string\n}\n\n/**\n * Pin/unpin button, revealed while the pointer is over the sidebar. It is always visible on\n * coarse pointers (no hover on touch) and revealed by keyboard focus anywhere in the sidebar. It\n * is hidden with opacity and pointer-events, never display:none, so it keeps its accessible name\n * and stays in the tab order.\n */\nfunction SidebarPinToggle({\n isPinned,\n onToggle,\n className,\n 'data-testid': testId,\n}: SidebarPinToggleProps) {\n const { expanded, labels } = useSidebarContext()\n const label = isPinned ? labels.hideSidebar : labels.showSidebar\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n aria-pressed={isPinned}\n data-testid={testIdOr(testId, { testId: 'sidebar-pin-button' })}\n className={cn(\n 'flex flex-shrink-0 items-center justify-center rounded-md text-muted-foreground transition-[opacity,colors] hover:bg-muted hover:text-foreground pointer-coarse:size-11',\n 'pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100',\n 'group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100',\n 'pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100',\n expanded ? 'size-9' : 'h-9 w-12',\n className\n )}\n >\n {isPinned ? <PanelLeftClose className=\"size-5\" /> : <PanelLeftOpen className=\"size-5\" />}\n </button>\n )\n}\n\nexport interface SidebarDrawerHeaderProps {\n /** Brand mark. */\n logo: ReactNode\n onClose: () => void\n closeLabel?: string\n /** Close button id (default `mobile-nav-close`). */\n 'data-testid'?: string\n}\n\n/** The phone drawer's header: brand mark and a 44px close button. */\nfunction SidebarDrawerHeader({\n logo,\n onClose,\n closeLabel: closeLabelProp,\n 'data-testid': testId,\n}: SidebarDrawerHeaderProps) {\n const { labels } = useSidebarContext()\n const closeLabel = closeLabelProp ?? labels.closeNavigationMenu\n return (\n <div\n data-slot=\"sidebar-drawer-header\"\n className=\"flex flex-shrink-0 items-center justify-between pb-2\"\n >\n {logo}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n data-testid={testIdOr(testId, { testId: 'mobile-nav-close' })}\n className=\"flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-5\" />\n </button>\n </div>\n )\n}\n\nexport { DEFAULT_SIDEBAR_LABELS, SidebarRowHoverContext, useSidebarContext, type SidebarLabels }\n\nexport const Sidebar = {\n Root: SidebarRoot,\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n NavItem: SidebarNavItem,\n Footer: SidebarFooter,\n PinToggle: SidebarPinToggle,\n BadgeRow: SidebarBadgeRow,\n DrawerHeader: SidebarDrawerHeader,\n}\n"]}
1
+ {"version":3,"sources":["../src/shell/sidebar-context.ts","../src/shell/SidebarBadgeRow.tsx","../src/lib/start-inset.ts","../src/shell/Sidebar.tsx"],"names":["createContext","useContext","forwardRef","SidebarBadgeRow","jsxs","cn","jsx","Tooltip","TooltipTrigger","TooltipContent","useEffect","useMemo","useRef","useDrawerBehavior","testIdOr","Fragment","BlocksTooltipProvider","useState","ActionLink","PanelLeftClose","PanelLeftOpen","X"],"mappings":"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","file":"chunk-KRWWRTDN.cjs","sourcesContent":["import { createContext, useContext } from 'react'\n\n/** Fixed strings of the sidebar family. Set once on `Sidebar.Root`; parts read them from context. */\nexport interface SidebarLabels {\n /** The sidebar's accessible name (the Root `aria-label` prop wins). */\n mainNavigation: string\n hideSidebar: string\n showSidebar: string\n /** The drawer's close button (the `closeLabel` prop wins). */\n closeNavigationMenu: string\n}\n\nexport const DEFAULT_SIDEBAR_LABELS: SidebarLabels = {\n mainNavigation: 'Main navigation',\n hideSidebar: 'Hide sidebar',\n showSidebar: 'Show sidebar',\n closeNavigationMenu: 'Close navigation menu',\n}\n\nexport interface SidebarContextValue {\n /** Labels are visible (full width), as opposed to the icon-only rail. */\n expanded: boolean\n labels: SidebarLabels\n}\nexport const SidebarContext = createContext<SidebarContextValue>({\n expanded: true,\n labels: DEFAULT_SIDEBAR_LABELS,\n})\nexport const useSidebarContext = (): SidebarContextValue => useContext(SidebarContext)\n\n/** True while the surrounding row is hovered/focused; trailing controls may brighten on it. */\nexport const SidebarRowHoverContext = createContext(false)\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { useSidebarContext } from './sidebar-context'\n\nexport interface SidebarBadgeRowProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Glyph (20px). */\n icon: ReactNode\n /** Visible label of the expanded row; the tooltip of the icon-only rail. */\n label: string\n /** Unread/pending number. Hidden at 0 or `undefined`; values above 9 read \"9+\". */\n count?: number\n /**\n * Accessible name including the count, for example \"Notifications, 2 unread\". Defaults to\n * `label` plus the count.\n */\n ariaLabel?: string\n /**\n * `row`: a labelled row styled like the module rows, badge at the right. `icon`: icon-only with\n * the badge on the corner. Default follows the sidebar (`row` expanded, `icon` on the rail).\n */\n variant?: 'row' | 'icon'\n /** Test id of the count badge. */\n badgeTestId?: string\n}\n\n/**\n * A sidebar row that carries a badge and may open something (a panel, a popover): the\n * notifications and contacts rows above the account bar. A real button that forwards its ref and\n * rest props, so it can be a popover trigger (`<DropdownMenuTrigger asChild>`). The badge is\n * visible in both the expanded row and the icon-only rail, and the accessible name carries the\n * count in both.\n */\nexport const SidebarBadgeRow = forwardRef<HTMLButtonElement, SidebarBadgeRowProps>(\n function SidebarBadgeRow(\n { icon, label, count, ariaLabel, variant, badgeTestId, className, type = 'button', ...rest },\n ref\n ) {\n const { expanded } = useSidebarContext()\n const resolved = variant ?? (expanded ? 'row' : 'icon')\n const hasCount = count !== undefined && count > 0\n const badgeText = hasCount ? (count > 9 ? '9+' : String(count)) : null\n const name = ariaLabel ?? (hasCount ? `${label}, ${count}` : label)\n\n if (resolved === 'row') {\n return (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"row\"\n className={cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-left text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 flex-shrink-0 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n <span className=\"ml-3 min-w-0 truncate\" aria-hidden>\n {label}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"ml-auto inline-flex min-w-5 flex-shrink-0 items-center justify-center rounded-full bg-primary px-1.5 text-xs font-semibold leading-5 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n }\n\n const iconButton = (\n <button\n ref={ref}\n type={type}\n aria-label={name}\n data-slot=\"sidebar-badge-row\"\n data-variant=\"icon\"\n title={variant === 'icon' ? label : undefined}\n className={cn(\n 'relative m-0 flex h-9 w-12 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11',\n className\n )}\n {...rest}\n >\n <span className=\"flex size-5 items-center justify-center\" aria-hidden>\n {icon}\n </span>\n {badgeText && (\n <span\n aria-hidden\n data-testid={badgeTestId}\n className=\"absolute right-1 top-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-xs font-semibold leading-4 tabular-nums text-primary-foreground\"\n >\n {badgeText}\n </span>\n )}\n </button>\n )\n // A standalone icon button (the page header) keeps its native title; the rail uses a tooltip.\n if (variant === 'icon') return iconButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{iconButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {label}\n </TooltipContent>\n </Tooltip>\n )\n }\n)\n","import { useEffect } from 'react'\n\n/**\n * The CSS custom property that carries how much of the screen's start (left) edge a docked sidebar\n * takes, set on `<html>`. A floating element pinned to the start corner (the install prompt)\n * positions itself `calc(var(--shell-start-inset, 0px) + 0.75rem)` so it never covers the\n * sidebar's footer (the account menu).\n */\nexport const SHELL_START_INSET_VAR = '--shell-start-inset'\n\nconst widths = new Map<symbol, number>()\n\nfunction apply(): void {\n if (typeof document === 'undefined') return\n const inset = Math.max(0, ...widths.values())\n const style = document.documentElement.style\n if (inset > 0) style.setProperty(SHELL_START_INSET_VAR, `${inset}px`)\n else style.removeProperty(SHELL_START_INSET_VAR)\n}\n\n/**\n * Report a sidebar docked at the start edge, `width` px wide (0 while it is collapsed or is an\n * overlay drawer), to {@link SHELL_START_INSET_VAR}. `Sidebar.Root` calls it; call it from your\n * own docked side panel.\n */\nexport function useShellStartInset(width: number): void {\n useEffect(() => {\n const key = Symbol('shell-start-inset')\n widths.set(key, width)\n apply()\n return () => {\n widths.delete(key)\n apply()\n }\n }, [width])\n}\n","import { useMemo, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { PanelLeftClose, PanelLeftOpen, X } from 'lucide-react'\nimport { cn, Tooltip, TooltipContent, TooltipTrigger } from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\nimport {\n DEFAULT_SIDEBAR_LABELS,\n SidebarContext,\n SidebarRowHoverContext,\n useSidebarContext,\n type SidebarLabels,\n} from './sidebar-context'\nimport { SidebarBadgeRow } from './SidebarBadgeRow'\nimport { ActionLink } from '../components/ActionLink'\nimport { BlocksTooltipProvider } from '../provider/TooltipScope'\nimport { useDrawerBehavior } from '../lib/use-drawer'\nimport { useShellStartInset } from '../lib/start-inset'\nimport type { SidebarMode } from '../lib/sidebar-mode'\nimport type { NavItem, NavItemIndicator, NavSection } from './types'\n\n/**\n * Sidebar: the one tinted column that carries the app frame. Compound parts:\n * Sidebar.Root positioning shell for the four modes (drawer / collapsed / pinned / rail)\n * Sidebar.Header top block (switcher, ask field, pin toggle)\n * Sidebar.Nav the rows: pass `items` (NavItem[]) or compose Sidebar.NavItem children\n * Sidebar.Group a labelled run of rows (heading when expanded, divider on the rail)\n * Sidebar.Footer pinned to the bottom (offline pill, tips card, action cluster)\n * Sidebar.PinToggle / Sidebar.DrawerHeader the header's two stock controls\n *\n * Presentational and controlled: the app resolves `mode`/`expanded` (see `resolveSidebarLayout`\n * and `useSidebarSettle`) and owns where hover/pin/drawer state lives.\n */\n\nconst noop = () => {}\n\nconst COLLAPSED_PX = 64\nconst EXPANDED_PX = 256\nconst COLLAPSED_WIDTH = `${COLLAPSED_PX}px`\nconst EXPANDED_WIDTH = `${EXPANDED_PX}px`\n\nexport interface SidebarRootProps {\n /** Constrain the drawer to an embedded frame. The app keeps the viewport default. */\n contained?: boolean\n mode: SidebarMode\n /** Labels visible. Provided to every part through context. */\n expanded: boolean\n /** `rail` mode: floats open to full width. */\n isHovering?: boolean\n onBackdropClick?: () => void\n /** `rail` mode on touch: the floated-open rail dims the content behind it; tapping it closes. */\n hasRailBackdrop?: boolean\n onMouseEnter?: () => void\n onMouseLeave?: () => void\n children: ReactNode\n className?: string\n 'aria-label'?: string\n labels?: Partial<SidebarLabels>\n /** Root id (default `sidebar`). */\n 'data-testid'?: string\n /** Drawer backdrop id (default `sidebar-backdrop`). */\n backdropTestId?: string\n}\n\nfunction SidebarRoot({\n mode,\n contained = false,\n expanded,\n isHovering = false,\n onBackdropClick,\n hasRailBackdrop = false,\n onMouseEnter,\n onMouseLeave,\n children,\n className,\n 'aria-label': ariaLabelProp,\n labels,\n 'data-testid': testId,\n backdropTestId,\n}: SidebarRootProps) {\n const mergedLabels = useMemo(() => ({ ...DEFAULT_SIDEBAR_LABELS, ...labels }), [labels])\n // The drawer is a modal: scroll lock, Escape, focus trap and focus return to the opener.\n const drawerRef = useRef<HTMLDivElement>(null)\n const isDrawer = mode === 'drawer'\n useDrawerBehavior(isDrawer, onBackdropClick ?? noop, drawerRef)\n // Floating start-corner elements (the install prompt) sit clear of the docked sidebar; a rail\n // expanding on hover floats over the page, so only its collapsed width counts.\n useShellStartInset(mode === 'pinned' ? EXPANDED_PX : mode === 'rail' ? COLLAPSED_PX : 0)\n const ariaLabel = ariaLabelProp ?? mergedLabels.mainNavigation\n const contextValue = useMemo(() => ({ expanded, labels: mergedLabels }), [expanded, mergedLabels])\n // `navBase` omits horizontal padding so each mode owns its own: the collapsed state must\n // reach a true 0 width, which an `!important` px would block.\n const navBase =\n 'group/sidebar bg-sidebar border-r border-border text-foreground scrollbar-themed flex flex-col h-full overflow-y-auto overflow-x-hidden pb-safe pt-3 transition-all duration-300 ease-in-out'\n const common = {\n 'aria-label': ariaLabel,\n 'data-testid': testIdOr(testId, { testId: 'sidebar' }),\n 'data-slot': 'sidebar',\n 'data-mode': mode,\n } as const\n const fixedWidth: CSSProperties = { width: EXPANDED_WIDTH, minWidth: EXPANDED_WIDTH }\n\n let body: ReactNode\n if (mode === 'drawer') {\n // Small-screen off-canvas panel + dismiss backdrop; bypasses the hover/collapse model. The\n // wrapper is the modal dialog; the nav landmark sits inside it.\n body = (\n <div\n ref={drawerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n data-slot=\"sidebar-drawer\"\n className={cn(contained ? 'absolute' : 'fixed', 'inset-0 z-50')}\n >\n <div\n className=\"absolute inset-0 bg-black/50\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n <nav\n {...common}\n className={cn(navBase, '!px-3 absolute left-0 top-0 pt-safe shadow-xl', className)}\n style={fixedWidth}\n >\n {children}\n </nav>\n </div>\n )\n } else if (mode === 'collapsed') {\n // Stays mounted at width 0 so the transition runs on both enter and leave. Horizontal padding\n // is dropped or overflow-hidden would reveal a clipped sliver of the icons.\n body = (\n <nav\n {...common}\n className={cn(navBase, 'absolute left-0 top-0 z-[45]', className)}\n style={{\n width: '0px',\n minWidth: 0,\n paddingLeft: 0,\n paddingRight: 0,\n borderRightWidth: 0,\n pointerEvents: 'none',\n }}\n // Width 0 hides the links visually; inert also takes them out of the tab order and the\n // accessibility tree.\n inert\n >\n {children}\n </nav>\n )\n } else if (mode === 'pinned') {\n body = (\n <nav\n {...common}\n className={cn(navBase, '!px-3 relative flex-shrink-0', className)}\n style={fixedWidth}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </nav>\n )\n } else {\n // Rail: a permanent spacer keeps the flex layout still; the nav is always absolute so only\n // its width animates on hover (no layout jump).\n body = (\n <>\n <div\n className=\"bg-sidebar border-r border-border flex flex-col h-full relative px-0 pb-safe flex-shrink-0\"\n style={{ width: COLLAPSED_WIDTH, minWidth: COLLAPSED_WIDTH }}\n aria-hidden=\"true\"\n />\n {isHovering && hasRailBackdrop && (\n <div\n className=\"fixed inset-0 z-[44] bg-black/40\"\n onClick={onBackdropClick}\n aria-hidden=\"true\"\n data-testid={testIdOr(backdropTestId, { testId: 'sidebar-backdrop' })}\n />\n )}\n <nav\n {...common}\n className={cn(\n navBase,\n isHovering ? '!px-3 shadow-xl' : '!px-2',\n 'absolute left-0 top-0 z-[45]',\n className\n )}\n style={{\n width: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n minWidth: isHovering ? EXPANDED_WIDTH : COLLAPSED_WIDTH,\n }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </nav>\n </>\n )\n }\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <BlocksTooltipProvider>{body}</BlocksTooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nexport interface SidebarSectionProps {\n children: ReactNode\n className?: string\n 'data-testid'?: string\n}\n\nfunction SidebarHeader({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-3 pb-3', className)}\n >\n {children}\n </div>\n )\n}\n\nexport interface SidebarNavProps extends Omit<SidebarSectionProps, 'children'> {\n children?: ReactNode\n /** Rows as data. Children render after them. */\n items?: NavItem[]\n /** Labelled groups of rows as data (each a `Sidebar.Group`), after `items`. */\n sections?: NavSection[]\n}\n\nfunction SidebarNav({\n items,\n sections,\n children,\n className,\n 'data-testid': testId,\n}: SidebarNavProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-nav\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {items?.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n {sections?.map((section) => (\n <SidebarGroup\n key={section.id}\n label={section.label}\n ariaLabel={section.ariaLabel}\n data-testid={section.testId}\n >\n {section.items.map((item) => (\n <SidebarNavItem key={item.id} {...item} />\n ))}\n </SidebarGroup>\n ))}\n {children}\n </div>\n )\n}\n\nexport interface SidebarGroupProps extends SidebarSectionProps {\n /** Group heading. Shown above the rows when expanded; a thin divider stands in on the rail. */\n label?: ReactNode\n /** Accessible name when `label` is not plain text. */\n ariaLabel?: string\n}\n\n/** A labelled run of rows inside the nav (for example \"Workspace\", \"Tools\"). */\nfunction SidebarGroup({\n label,\n ariaLabel,\n children,\n className,\n 'data-testid': testId,\n}: SidebarGroupProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : undefined)}\n data-slot=\"sidebar-group\"\n data-testid={testId}\n className={cn('flex flex-shrink-0 flex-col gap-0.5', !expanded && 'items-center', className)}\n >\n {label &&\n (expanded ? (\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n ) : (\n <div\n role=\"separator\"\n data-slot=\"sidebar-group-divider\"\n className=\"my-1 h-px w-6 bg-border\"\n />\n ))}\n {children}\n </div>\n )\n}\n\n/** The heading of a `Sidebar.Group` (exported for custom headings). Hidden by the group on the rail. */\nfunction SidebarGroupLabel({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div\n data-slot=\"sidebar-group-label\"\n className={cn(\n 'px-2 pb-0.5 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nfunction SidebarFooter({ children, className, 'data-testid': testId }: SidebarSectionProps) {\n const { expanded } = useSidebarContext()\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-testid={testId}\n className={cn(\n 'mt-auto flex flex-shrink-0 flex-col gap-2 pt-3 pb-3',\n !expanded && 'items-center',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nconst INDICATOR_TONES: Record<NavItemIndicator, string> = {\n progress: 'bg-primary',\n error: 'bg-red-solid',\n attention: 'bg-yellow-solid',\n}\n\nexport type SidebarNavItemProps = Omit<NavItem, 'id'> & {\n id?: string\n className?: string\n /** Tooltip shown on the icon-only rail; defaults to the label. */\n tooltip?: string\n}\n\n/**\n * One row: [icon] [label] [count] [trailing]. 36px (44px on coarse pointers). The active row is\n * the selection tint, never a filled block; counts are quiet numbers, not pills.\n *\n * The expanded row is a div with role=\"button\" (not a native <button>) so an interactive\n * `trailing` control can be nested without producing button-in-button markup.\n */\nfunction SidebarNavItem({\n label,\n icon,\n active = false,\n onSelect,\n href,\n count,\n countIcon,\n testId,\n disabled = false,\n trailing,\n indicator,\n className,\n tooltip,\n}: SidebarNavItemProps) {\n const { expanded } = useSidebarContext()\n // Tracked as state (not CSS :hover) so a trailing control can read it via context.\n const [isRowActive, setIsRowActive] = useState(false)\n const tip = expanded ? undefined : (tooltip ?? label)\n\n if (!expanded) {\n const railButton = (\n <ActionLink\n href={href}\n onSelect={onSelect}\n disabled={disabled}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(\n 'm-0 flex h-9 w-12 items-center justify-center rounded-md transition-colors pointer-coarse:h-11',\n active\n ? 'bg-accent text-accent-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )}\n >\n <div className=\"flex size-5 items-center justify-center\">\n {indicator ? (\n <div className=\"relative\">\n {icon}\n <div\n data-slot=\"sidebar-nav-indicator\"\n data-tone={indicator}\n className={cn(\n 'absolute -right-1 -top-1 size-2.5 rounded-full border border-sidebar',\n INDICATOR_TONES[indicator]\n )}\n />\n </div>\n ) : (\n icon\n )}\n </div>\n </ActionLink>\n )\n if (!tip) return railButton\n return (\n <Tooltip delayDuration={50}>\n <TooltipTrigger asChild>{railButton}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n }\n\n const rowClass = cn(\n 'group flex h-9 w-full cursor-pointer items-center rounded-md px-3 text-sm transition-colors pointer-coarse:h-11',\n active\n ? 'bg-accent font-semibold text-accent-foreground'\n : 'font-medium text-muted-foreground hover:bg-muted hover:text-foreground',\n disabled && 'pointer-events-none cursor-not-allowed opacity-30',\n className\n )\n const countNode = count !== undefined && (\n <span\n // `ml-auto` lines the counts up on the right edge as one column of numbers.\n className={cn(\n 'ml-auto inline-flex flex-shrink-0 items-center gap-0.5 pl-2 text-xs font-normal tabular-nums',\n active ? 'text-accent-foreground' : 'text-muted-foreground'\n )}\n >\n {countIcon}\n {count}\n </span>\n )\n\n // A link row without a nested control is the anchor itself.\n if (href && !disabled && !trailing) {\n return (\n <ActionLink\n href={href}\n onSelect={onSelect}\n aria-current={active ? 'page' : undefined}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </ActionLink>\n )\n }\n\n // A link row with a nested control: a stretched anchor sits under the content, and the\n // trailing control rises above it, so there is never an interactive element inside an anchor.\n if (href && !disabled) {\n return (\n <div\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={cn(rowClass, 'relative')}\n >\n <ActionLink\n href={href}\n onSelect={onSelect}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n className=\"absolute inset-0 rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n <div className=\"pointer-events-none flex min-w-0 flex-1 items-center\">\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n </div>\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"relative ml-2 flex flex-shrink-0 items-center\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n </div>\n )\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-current={active ? 'page' : undefined}\n onClick={disabled ? undefined : onSelect}\n onMouseEnter={() => setIsRowActive(true)}\n onMouseLeave={() => setIsRowActive(false)}\n onFocusCapture={() => setIsRowActive(true)}\n onBlurCapture={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setIsRowActive(false)\n }}\n onKeyDown={\n disabled\n ? undefined\n : (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onSelect()\n }\n }\n }\n data-slot=\"sidebar-nav-item\"\n data-testid={testId}\n className={rowClass}\n >\n <div className=\"flex size-5 flex-shrink-0 items-center justify-center\">{icon}</div>\n <span className=\"ml-3 min-w-0 truncate text-left\">{label}</span>\n {countNode}\n {trailing && (\n <SidebarRowHoverContext.Provider value={isRowActive}>\n <span className=\"ml-auto flex flex-shrink-0 items-center pl-2\">{trailing}</span>\n </SidebarRowHoverContext.Provider>\n )}\n </div>\n )\n}\n\nexport interface SidebarPinToggleProps {\n isPinned: boolean\n onToggle: () => void\n className?: string\n /** Default `sidebar-pin-button`. */\n 'data-testid'?: string\n}\n\n/**\n * Pin/unpin button, revealed while the pointer is over the sidebar. It is always visible on\n * coarse pointers (no hover on touch) and revealed by keyboard focus anywhere in the sidebar. It\n * is hidden with opacity and pointer-events, never display:none, so it keeps its accessible name\n * and stays in the tab order.\n */\nfunction SidebarPinToggle({\n isPinned,\n onToggle,\n className,\n 'data-testid': testId,\n}: SidebarPinToggleProps) {\n const { expanded, labels } = useSidebarContext()\n const label = isPinned ? labels.hideSidebar : labels.showSidebar\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n title={label}\n aria-label={label}\n aria-pressed={isPinned}\n data-testid={testIdOr(testId, { testId: 'sidebar-pin-button' })}\n className={cn(\n 'flex flex-shrink-0 items-center justify-center rounded-md text-muted-foreground transition-[opacity,colors] hover:bg-muted hover:text-foreground pointer-coarse:size-11',\n 'pointer-events-none opacity-0 group-hover/sidebar:pointer-events-auto group-hover/sidebar:opacity-100',\n 'group-focus-within/sidebar:pointer-events-auto group-focus-within/sidebar:opacity-100',\n 'pointer-coarse:pointer-events-auto pointer-coarse:opacity-100 focus-visible:pointer-events-auto focus-visible:opacity-100',\n expanded ? 'size-9' : 'h-9 w-12',\n className\n )}\n >\n {isPinned ? <PanelLeftClose className=\"size-5\" /> : <PanelLeftOpen className=\"size-5\" />}\n </button>\n )\n}\n\nexport interface SidebarDrawerHeaderProps {\n /** Brand mark. */\n logo: ReactNode\n onClose: () => void\n closeLabel?: string\n /** Close button id (default `mobile-nav-close`). */\n 'data-testid'?: string\n}\n\n/** The phone drawer's header: brand mark and a 44px close button. */\nfunction SidebarDrawerHeader({\n logo,\n onClose,\n closeLabel: closeLabelProp,\n 'data-testid': testId,\n}: SidebarDrawerHeaderProps) {\n const { labels } = useSidebarContext()\n const closeLabel = closeLabelProp ?? labels.closeNavigationMenu\n return (\n <div\n data-slot=\"sidebar-drawer-header\"\n className=\"flex flex-shrink-0 items-center justify-between pb-2\"\n >\n {logo}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={closeLabel}\n data-testid={testIdOr(testId, { testId: 'mobile-nav-close' })}\n className=\"flex size-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-5\" />\n </button>\n </div>\n )\n}\n\nexport { DEFAULT_SIDEBAR_LABELS, SidebarRowHoverContext, useSidebarContext, type SidebarLabels }\n\nexport const Sidebar = {\n Root: SidebarRoot,\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n NavItem: SidebarNavItem,\n Footer: SidebarFooter,\n PinToggle: SidebarPinToggle,\n BadgeRow: SidebarBadgeRow,\n DrawerHeader: SidebarDrawerHeader,\n}\n"]}
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkI7O7QWKX_cjs = require('./chunk-I7O7QWKX.cjs');
5
- var chunkA3OM7LQI_cjs = require('./chunk-A3OM7LQI.cjs');
6
- var chunkMH2VQFAE_cjs = require('./chunk-MH2VQFAE.cjs');
4
+ var chunkQOV564TW_cjs = require('./chunk-QOV564TW.cjs');
5
+ var chunkD76PIWFN_cjs = require('./chunk-D76PIWFN.cjs');
6
+ var chunkMA4RZFYH_cjs = require('./chunk-MA4RZFYH.cjs');
7
7
  var chunkLUBZHVZK_cjs = require('./chunk-LUBZHVZK.cjs');
8
8
  var chunkXCZYMSDV_cjs = require('./chunk-XCZYMSDV.cjs');
9
9
  var chunkMOIZ2R5X_cjs = require('./chunk-MOIZ2R5X.cjs');
10
- var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
11
10
  var chunkC5YZWJCC_cjs = require('./chunk-C5YZWJCC.cjs');
11
+ var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
12
12
  var chunk25AIWOR6_cjs = require('./chunk-25AIWOR6.cjs');
13
13
  var react = require('@arbidocs/react');
14
14
  var react$1 = require('react');
@@ -605,7 +605,7 @@ function EnabledNewCallChip() {
605
605
  scope: "contacts",
606
606
  onSubmit: async ({ ring, invites }) => {
607
607
  await react.startContactsCall(arbi, {
608
- title: chunkMH2VQFAE_cjs.contactsCallTitle([
608
+ title: chunkMA4RZFYH_cjs.contactsCallTitle([
609
609
  ...ring.map((u) => ui.getUserDisplayName(u)),
610
610
  ...invites.map((g) => g.name)
611
611
  ]),
@@ -695,7 +695,7 @@ function MeetingThreadTranscriptAction({
695
695
  );
696
696
  if (!meetingCallExtId || !call?.is_creator) return null;
697
697
  return /* @__PURE__ */ jsxRuntime.jsx(
698
- chunkA3OM7LQI_cjs.SaveTranscriptToThread,
698
+ chunkD76PIWFN_cjs.SaveTranscriptToThread,
699
699
  {
700
700
  title,
701
701
  lines,
@@ -710,13 +710,13 @@ function MeetingThreadRecordingsAction({
710
710
  iconOnly = false
711
711
  }) {
712
712
  const [open, setOpen] = react$1.useState(false);
713
- const pending = chunkMH2VQFAE_cjs.usePendingRecording();
713
+ const pending = chunkMA4RZFYH_cjs.usePendingRecording();
714
714
  react$1.useEffect(() => {
715
715
  if (pending) setOpen(true);
716
716
  }, [pending]);
717
717
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
718
718
  /* @__PURE__ */ jsxRuntime.jsx(
719
- chunkMH2VQFAE_cjs.HeaderAction,
719
+ chunkMA4RZFYH_cjs.HeaderAction,
720
720
  {
721
721
  label: "Recordings",
722
722
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Disc, { className: "size-3.5", "aria-hidden": true }),
@@ -731,7 +731,7 @@ function MeetingThreadRecordingsAction({
731
731
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: "Recordings of this meeting, encrypted under the workspace key. Playing or downloading one decrypts it in this browser." })
732
732
  ] }),
733
733
  /* @__PURE__ */ jsxRuntime.jsx(
734
- chunkA3OM7LQI_cjs.RecordingsList,
734
+ chunkD76PIWFN_cjs.RecordingsList,
735
735
  {
736
736
  callExtId: meetingCallExtId,
737
737
  title,
@@ -792,7 +792,7 @@ function ChatCallCard({
792
792
  const inThisCall = react.useCallSession((s) => s.active?.callExtId === callExtId);
793
793
  const inAnotherCall = react.useCallSession((s) => !!s.active && s.active.callExtId !== callExtId);
794
794
  const [busy, setBusy] = react$1.useState(false);
795
- const live = latest && chunkMH2VQFAE_cjs.isCallLive(call, liveNow);
795
+ const live = latest && chunkMA4RZFYH_cjs.isCallLive(call, liveNow);
796
796
  let summary;
797
797
  if (live) summary = senderName ? `${senderName} started a call` : "Call in progress";
798
798
  else if (latest && call?.started_at && call.ended_at) {
@@ -800,7 +800,7 @@ function ChatCallCard({
800
800
  const joined = (call.last_participants ?? []).map(name);
801
801
  summary = [
802
802
  "Call",
803
- chunkMH2VQFAE_cjs.formatCallDuration(seconds),
803
+ chunkMA4RZFYH_cjs.formatCallDuration(seconds),
804
804
  joined.length ? `joined ${joined.join(", ")}` : null
805
805
  ].filter(Boolean).join(" \xB7 ");
806
806
  } else summary = senderName ? `Call started by ${senderName}` : "Call";
@@ -848,7 +848,7 @@ function useCallPersonName(identity, fallbackName) {
848
848
  }, [profile, byId, identity, fallbackName]);
849
849
  }
850
850
  function CallConversationEmpty({ callExtId }) {
851
- const { inCall, transcribing } = chunkMH2VQFAE_cjs.useMyCallStatus(callExtId);
851
+ const { inCall, transcribing } = chunkMA4RZFYH_cjs.useMyCallStatus(callExtId);
852
852
  const live = react.useCallSession((s) => !!s.liveCalls[callExtId]) || inCall;
853
853
  if (!live) {
854
854
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -880,7 +880,7 @@ function ProvisionalRow({ identity }) {
880
880
  {
881
881
  speakerId: identity,
882
882
  speakerName: name,
883
- speaker: /* @__PURE__ */ jsxRuntime.jsx(chunkMH2VQFAE_cjs.CallUserPill, { identity })
883
+ speaker: /* @__PURE__ */ jsxRuntime.jsx(chunkMA4RZFYH_cjs.CallUserPill, { identity })
884
884
  }
885
885
  );
886
886
  }
@@ -891,8 +891,8 @@ function ProvisionalSpeakers({ ids }) {
891
891
  var LINE_WAIT_MS = 1e4;
892
892
  var MIN_SPEECH_MS = 800;
893
893
  function useProvisionalSpeakers(callExtId, lines) {
894
- const { inCall, transcribing } = chunkMH2VQFAE_cjs.useMyCallStatus(callExtId);
895
- const speaking = chunkMH2VQFAE_cjs.useSpeakingIds();
894
+ const { inCall, transcribing } = chunkMA4RZFYH_cjs.useMyCallStatus(callExtId);
895
+ const speaking = chunkMA4RZFYH_cjs.useSpeakingIds();
896
896
  const pending = react$1.useRef(/* @__PURE__ */ new Map());
897
897
  const [, tick] = react$1.useState(0);
898
898
  const active = inCall && transcribing;
@@ -942,7 +942,7 @@ function ConnectedCallChatHistory({
942
942
  const [view, setView] = react$1.useState("all");
943
943
  react$1.useEffect(() => setView("all"), [chat?.external_id]);
944
944
  const recordingsCallExtId = chat?.call_ext_id ?? null;
945
- const pendingRecording = chunkMH2VQFAE_cjs.usePendingRecording();
945
+ const pendingRecording = chunkMA4RZFYH_cjs.usePendingRecording();
946
946
  react$1.useEffect(() => {
947
947
  if (pendingRecording && recordingsCallExtId) setView("recordings");
948
948
  }, [pendingRecording, recordingsCallExtId]);
@@ -1007,7 +1007,7 @@ function ConnectedCallChatHistory({
1007
1007
  const transcriptEntry = (msg) => {
1008
1008
  const { parsed, speakerId } = transcriptSpeaker(msg);
1009
1009
  return /* @__PURE__ */ jsxRuntime.jsx(
1010
- chunkI7O7QWKX_cjs.TranscriptEntry,
1010
+ chunkQOV564TW_cjs.TranscriptEntry,
1011
1011
  {
1012
1012
  speakerId,
1013
1013
  speakerName: speakerId === myExtId ? "Me" : parsed?.speaker_name || (memberById(speakerId) ? senderName(speakerId) : senderName(msg.sender_ext_id)),
@@ -1047,11 +1047,11 @@ function ConnectedCallChatHistory({
1047
1047
  onChange: setView
1048
1048
  }
1049
1049
  ) }),
1050
- view === "recordings" && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkA3OM7LQI_cjs.RecordingsList, { callExtId: recordingsCallExtId, title: meetingTitle, className: "py-1" }),
1050
+ view === "recordings" && recordingsCallExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkD76PIWFN_cjs.RecordingsList, { callExtId: recordingsCallExtId, title: meetingTitle, className: "py-1" }),
1051
1051
  loadOlder,
1052
1052
  view === "transcript" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col py-1", "data-testid": "transcript-view", children: [
1053
1053
  isHost && /* @__PURE__ */ jsxRuntime.jsx(
1054
- chunkA3OM7LQI_cjs.SaveTranscriptToThread,
1054
+ chunkD76PIWFN_cjs.SaveTranscriptToThread,
1055
1055
  {
1056
1056
  title: meetingTitle,
1057
1057
  lines: transcriptExport,
@@ -1079,7 +1079,7 @@ function ConnectedCallChatHistory({
1079
1079
  return /* @__PURE__ */ jsxRuntime.jsxs(react$1.Fragment, { children: [
1080
1080
  separator,
1081
1081
  /* @__PURE__ */ jsxRuntime.jsx(
1082
- chunkA3OM7LQI_cjs.RecordingCard,
1082
+ chunkD76PIWFN_cjs.RecordingCard,
1083
1083
  {
1084
1084
  callExtId: msg.call_ext_id,
1085
1085
  recordingExtId: msg.recording_ext_id ?? null,
@@ -1131,5 +1131,5 @@ exports.matchesQuery = matchesQuery;
1131
1131
  exports.useCallPersonName = useCallPersonName;
1132
1132
  exports.useMeetingThreadMessages = useMeetingThreadMessages;
1133
1133
  exports.useProvisionalSpeakers = useProvisionalSpeakers;
1134
- //# sourceMappingURL=chunk-N6B6H4QV.cjs.map
1135
- //# sourceMappingURL=chunk-N6B6H4QV.cjs.map
1134
+ //# sourceMappingURL=chunk-L6DAJUDF.cjs.map
1135
+ //# sourceMappingURL=chunk-L6DAJUDF.cjs.map