@arbidocs/blocks 0.5.96 → 0.5.97

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 (147) hide show
  1. package/README.md +8 -1
  2. package/dist/{ConnectedCallDock-D4DG4VDA.cjs → ConnectedCallDock-HI2KMQZ3.cjs} +12 -12
  3. package/dist/{ConnectedCallDock-D4DG4VDA.cjs.map → ConnectedCallDock-HI2KMQZ3.cjs.map} +1 -1
  4. package/dist/{ConnectedCallDock-VVZUSFFK.js → ConnectedCallDock-Y64FTKFF.js} +11 -11
  5. package/dist/{ConnectedCallDock-VVZUSFFK.js.map → ConnectedCallDock-Y64FTKFF.js.map} +1 -1
  6. package/dist/{ConnectedCallRoom-EDHNAJHA.js → ConnectedCallRoom-LEBIJGFT.js} +11 -11
  7. package/dist/{ConnectedCallRoom-EDHNAJHA.js.map → ConnectedCallRoom-LEBIJGFT.js.map} +1 -1
  8. package/dist/{ConnectedCallRoom-VDQD25QW.cjs → ConnectedCallRoom-UXIJJKNG.cjs} +12 -12
  9. package/dist/{ConnectedCallRoom-VDQD25QW.cjs.map → ConnectedCallRoom-UXIJJKNG.cjs.map} +1 -1
  10. package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js → ConnectedNativeDocxComparison-6KL5XI3L.js} +10 -10
  11. package/dist/{ConnectedNativeDocxComparison-IS27M6FV.js.map → ConnectedNativeDocxComparison-6KL5XI3L.js.map} +1 -1
  12. package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs → ConnectedNativeDocxComparison-P346QOX5.cjs} +11 -11
  13. package/dist/{ConnectedNativeDocxComparison-ADQURGHU.cjs.map → ConnectedNativeDocxComparison-P346QOX5.cjs.map} +1 -1
  14. package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs → ConnectedNativeDocxEditor-7JHSQ6KI.cjs} +11 -11
  15. package/dist/{ConnectedNativeDocxEditor-7EQ6DE3Q.cjs.map → ConnectedNativeDocxEditor-7JHSQ6KI.cjs.map} +1 -1
  16. package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js → ConnectedNativeDocxEditor-ATZ2TG2L.js} +9 -9
  17. package/dist/{ConnectedNativeDocxEditor-JYXGX55F.js.map → ConnectedNativeDocxEditor-ATZ2TG2L.js.map} +1 -1
  18. package/dist/{ConnectedStreamedWordArtifact-IYAQ2L7G.cjs → ConnectedStreamedWordArtifact-5HI3WSAJ.cjs} +11 -11
  19. package/dist/ConnectedStreamedWordArtifact-5HI3WSAJ.cjs.map +1 -0
  20. package/dist/{ConnectedStreamedWordArtifact-KLLG6W5L.js → ConnectedStreamedWordArtifact-FHSGQHXQ.js} +10 -10
  21. package/dist/ConnectedStreamedWordArtifact-FHSGQHXQ.js.map +1 -0
  22. package/dist/{DocumentReviewCard-FEVDNY6U.js → DocumentReviewCard-7UFQGDOG.js} +6 -6
  23. package/dist/{DocumentReviewCard-FEVDNY6U.js.map → DocumentReviewCard-7UFQGDOG.js.map} +1 -1
  24. package/dist/{DocumentReviewCard-3H66FMMO.cjs → DocumentReviewCard-E3HB3K2G.cjs} +6 -6
  25. package/dist/{DocumentReviewCard-3H66FMMO.cjs.map → DocumentReviewCard-E3HB3K2G.cjs.map} +1 -1
  26. package/dist/{FilesViewerDialog-DSK5HMLL.cjs → FilesViewerDialog-3KWTQARB.cjs} +12 -12
  27. package/dist/{FilesViewerDialog-DSK5HMLL.cjs.map → FilesViewerDialog-3KWTQARB.cjs.map} +1 -1
  28. package/dist/{FilesViewerDialog-HL4E57K5.js → FilesViewerDialog-EQKBFAWI.js} +10 -10
  29. package/dist/{FilesViewerDialog-HL4E57K5.js.map → FilesViewerDialog-EQKBFAWI.js.map} +1 -1
  30. package/dist/{WorkspaceTableView-X3KZ7YFI.js → WorkspaceTableView-DYABS53K.js} +6 -6
  31. package/dist/{WorkspaceTableView-X3KZ7YFI.js.map → WorkspaceTableView-DYABS53K.js.map} +1 -1
  32. package/dist/{WorkspaceTableView-5DWNJN6J.cjs → WorkspaceTableView-ZIQ7JWT5.cjs} +8 -8
  33. package/dist/{WorkspaceTableView-5DWNJN6J.cjs.map → WorkspaceTableView-ZIQ7JWT5.cjs.map} +1 -1
  34. package/dist/agents/index.cjs +255 -255
  35. package/dist/agents/index.js +5 -5
  36. package/dist/agents/workflows/WorkflowStepAction.d.ts +9 -2
  37. package/dist/agents/workflows/requiredLabels.d.ts +7 -2
  38. package/dist/calls/index.cjs +2 -2
  39. package/dist/calls/index.js +2 -2
  40. package/dist/{chunk-VSZPY4LK.js → chunk-42IVGYNL.js} +5 -5
  41. package/dist/{chunk-VSZPY4LK.js.map → chunk-42IVGYNL.js.map} +1 -1
  42. package/dist/{chunk-GEUP5IV7.js → chunk-4LTDELP2.js} +3 -3
  43. package/dist/{chunk-GEUP5IV7.js.map → chunk-4LTDELP2.js.map} +1 -1
  44. package/dist/{chunk-HA27RMKD.js → chunk-4RCLA52C.js} +7 -7
  45. package/dist/{chunk-HA27RMKD.js.map → chunk-4RCLA52C.js.map} +1 -1
  46. package/dist/{chunk-6NMLRGUJ.cjs → chunk-6IS3IRUF.cjs} +4 -4
  47. package/dist/{chunk-6NMLRGUJ.cjs.map → chunk-6IS3IRUF.cjs.map} +1 -1
  48. package/dist/{chunk-KQUFEMPP.js → chunk-76O7J6IZ.js} +3 -3
  49. package/dist/{chunk-KQUFEMPP.js.map → chunk-76O7J6IZ.js.map} +1 -1
  50. package/dist/{chunk-5YIUHRTR.cjs → chunk-AINS6VU6.cjs} +4 -4
  51. package/dist/{chunk-5YIUHRTR.cjs.map → chunk-AINS6VU6.cjs.map} +1 -1
  52. package/dist/{chunk-ZA3ZELSH.cjs → chunk-CCALU47C.cjs} +5 -5
  53. package/dist/{chunk-ZA3ZELSH.cjs.map → chunk-CCALU47C.cjs.map} +1 -1
  54. package/dist/{chunk-BAJNXRI5.cjs → chunk-DDIV3MYQ.cjs} +5 -5
  55. package/dist/{chunk-BAJNXRI5.cjs.map → chunk-DDIV3MYQ.cjs.map} +1 -1
  56. package/dist/{chunk-ZJ3NII4U.cjs → chunk-ECCV4YOL.cjs} +9 -9
  57. package/dist/{chunk-ZJ3NII4U.cjs.map → chunk-ECCV4YOL.cjs.map} +1 -1
  58. package/dist/{chunk-S2CKH2LH.js → chunk-FNGFSHVE.js} +3 -3
  59. package/dist/{chunk-S2CKH2LH.js.map → chunk-FNGFSHVE.js.map} +1 -1
  60. package/dist/{chunk-CMMFXSTS.cjs → chunk-HXWBXYVN.cjs} +3 -3
  61. package/dist/{chunk-CMMFXSTS.cjs.map → chunk-HXWBXYVN.cjs.map} +1 -1
  62. package/dist/{chunk-NRE7ZR6M.js → chunk-ITK7GW7B.js} +3 -3
  63. package/dist/{chunk-NRE7ZR6M.js.map → chunk-ITK7GW7B.js.map} +1 -1
  64. package/dist/{chunk-FAKRTCAL.cjs → chunk-J4CXF4A7.cjs} +172 -14
  65. package/dist/chunk-J4CXF4A7.cjs.map +1 -0
  66. package/dist/{chunk-AS3HX7LL.js → chunk-K6UKLIRR.js} +3 -3
  67. package/dist/{chunk-AS3HX7LL.js.map → chunk-K6UKLIRR.js.map} +1 -1
  68. package/dist/{chunk-RMJNCYPD.js → chunk-KJLHFS7T.js} +3 -3
  69. package/dist/{chunk-RMJNCYPD.js.map → chunk-KJLHFS7T.js.map} +1 -1
  70. package/dist/{chunk-4DRLOAVD.js → chunk-LZI4EGOW.js} +209 -56
  71. package/dist/chunk-LZI4EGOW.js.map +1 -0
  72. package/dist/{chunk-6OXR4R6J.cjs → chunk-MMSHLHTA.cjs} +3 -3
  73. package/dist/{chunk-6OXR4R6J.cjs.map → chunk-MMSHLHTA.cjs.map} +1 -1
  74. package/dist/{chunk-VEK64VEE.js → chunk-N77UYRV7.js} +3 -3
  75. package/dist/{chunk-VEK64VEE.js.map → chunk-N77UYRV7.js.map} +1 -1
  76. package/dist/{chunk-64KZM3RZ.cjs → chunk-NZQZ2HFU.cjs} +3 -3
  77. package/dist/{chunk-64KZM3RZ.cjs.map → chunk-NZQZ2HFU.cjs.map} +1 -1
  78. package/dist/{chunk-7XVQATK2.cjs → chunk-OXHAUVK2.cjs} +3 -3
  79. package/dist/{chunk-7XVQATK2.cjs.map → chunk-OXHAUVK2.cjs.map} +1 -1
  80. package/dist/{chunk-YIKE2IY4.js → chunk-QSBPOYWA.js} +3 -3
  81. package/dist/{chunk-YIKE2IY4.js.map → chunk-QSBPOYWA.js.map} +1 -1
  82. package/dist/{chunk-NCGJKKGR.js → chunk-RQW2CFOQ.js} +9 -9
  83. package/dist/{chunk-NCGJKKGR.js.map → chunk-RQW2CFOQ.js.map} +1 -1
  84. package/dist/{chunk-DCNBNLWC.js → chunk-RZG4ALKZ.js} +4 -4
  85. package/dist/{chunk-DCNBNLWC.js.map → chunk-RZG4ALKZ.js.map} +1 -1
  86. package/dist/{chunk-O2ATVRRO.cjs → chunk-SDXK2COQ.cjs} +27 -27
  87. package/dist/{chunk-O2ATVRRO.cjs.map → chunk-SDXK2COQ.cjs.map} +1 -1
  88. package/dist/{chunk-CVYFX7AD.js → chunk-SEBNGA3F.js} +31 -15
  89. package/dist/chunk-SEBNGA3F.js.map +1 -0
  90. package/dist/{chunk-ZBQTFA5X.cjs → chunk-SYWJNSPS.cjs} +4 -4
  91. package/dist/{chunk-ZBQTFA5X.cjs.map → chunk-SYWJNSPS.cjs.map} +1 -1
  92. package/dist/{chunk-2JXJE7Y4.js → chunk-T7LLYVOW.js} +168 -10
  93. package/dist/chunk-T7LLYVOW.js.map +1 -0
  94. package/dist/{chunk-TANZTMPL.cjs → chunk-V2CNHRLZ.cjs} +4 -4
  95. package/dist/{chunk-TANZTMPL.cjs.map → chunk-V2CNHRLZ.cjs.map} +1 -1
  96. package/dist/{chunk-IMFE6FKN.cjs → chunk-WN7XPEYK.cjs} +7 -7
  97. package/dist/{chunk-IMFE6FKN.cjs.map → chunk-WN7XPEYK.cjs.map} +1 -1
  98. package/dist/{chunk-KVKKVSBT.cjs → chunk-XM4KRGCK.cjs} +252 -99
  99. package/dist/chunk-XM4KRGCK.cjs.map +1 -0
  100. package/dist/{chunk-MB2OXZEA.cjs → chunk-XTCNETMI.cjs} +4 -4
  101. package/dist/{chunk-MB2OXZEA.cjs.map → chunk-XTCNETMI.cjs.map} +1 -1
  102. package/dist/{chunk-4HMJQ66B.js → chunk-Y7UHKEVT.js} +4 -4
  103. package/dist/{chunk-4HMJQ66B.js.map → chunk-Y7UHKEVT.js.map} +1 -1
  104. package/dist/{chunk-CIXA5A65.cjs → chunk-YZ6YOOTF.cjs} +30 -14
  105. package/dist/chunk-YZ6YOOTF.cjs.map +1 -0
  106. package/dist/{chunk-QJVDQAYQ.js → chunk-Z4IPTLRS.js} +3 -3
  107. package/dist/{chunk-QJVDQAYQ.js.map → chunk-Z4IPTLRS.js.map} +1 -1
  108. package/dist/collaboration/index.cjs +1 -1
  109. package/dist/collaboration/index.js +1 -1
  110. package/dist/connect/docx.cjs +14 -14
  111. package/dist/connect/docx.js +10 -10
  112. package/dist/connect/index.cjs +680 -677
  113. package/dist/connect/index.cjs.map +1 -1
  114. package/dist/connect/index.js +43 -40
  115. package/dist/connect/index.js.map +1 -1
  116. package/dist/connect/viewer.cjs +9 -9
  117. package/dist/connect/viewer.js +8 -8
  118. package/dist/connection/workflows/ConnectedWorkflowRunPage.d.ts +4 -3
  119. package/dist/connection/workflows/WorkflowRunPage.d.ts +18 -15
  120. package/dist/connection/workflows/index.d.ts +2 -1
  121. package/dist/connection/workflows/runProject.d.ts +47 -0
  122. package/dist/dashboards/index.cjs +1 -1
  123. package/dist/dashboards/index.js +1 -1
  124. package/dist/embed/index.cjs +19 -19
  125. package/dist/embed/index.js +13 -13
  126. package/dist/index.cjs +383 -383
  127. package/dist/index.js +12 -12
  128. package/dist/settings/index.cjs +151 -151
  129. package/dist/settings/index.js +2 -2
  130. package/dist/shell/index.cjs +33 -33
  131. package/dist/shell/index.js +3 -3
  132. package/dist/studio/index.cjs +5 -5
  133. package/dist/studio/index.js +4 -4
  134. package/dist/workflow-canvas/index.cjs +32 -32
  135. package/dist/workflow-canvas/index.js +17 -17
  136. package/dist/workspaces/index.cjs +8 -8
  137. package/dist/workspaces/index.js +1 -1
  138. package/node_modules/@arbidocs/coedit/package.json +1 -1
  139. package/package.json +5 -5
  140. package/dist/ConnectedStreamedWordArtifact-IYAQ2L7G.cjs.map +0 -1
  141. package/dist/ConnectedStreamedWordArtifact-KLLG6W5L.js.map +0 -1
  142. package/dist/chunk-2JXJE7Y4.js.map +0 -1
  143. package/dist/chunk-4DRLOAVD.js.map +0 -1
  144. package/dist/chunk-CIXA5A65.cjs.map +0 -1
  145. package/dist/chunk-CVYFX7AD.js.map +0 -1
  146. package/dist/chunk-FAKRTCAL.cjs.map +0 -1
  147. package/dist/chunk-KVKKVSBT.cjs.map +0 -1
package/README.md CHANGED
@@ -938,7 +938,14 @@ const REVIEW: WorkflowDefinition = {
938
938
  ```
939
939
 
940
940
  - **Where it runs.** `projectFrom="pick"` asks for a project first (`ProjectPicker variant="run"`,
941
- with a new-project form) and opens its workspace in place; `{ step, project }` lets that form step
941
+ each project with its client; "New project" at the foot of the list opens a new-project form) and
942
+ opens its workspace in place. A new project asks for its name only, unless the host declares the
943
+ fields that matter to it:
944
+ `{ fields: [{ name: 'client', type: 'text', label: 'Client', required: true }], project? }`
945
+ (workflow fields, `advanced` ones folded under "More options"). `project(inputs)` maps what was
946
+ typed onto `useCreateProject`; without it a `client`, `client_ref` or `stage` field sets that
947
+ detail and the rest go in the project's `fields`. What was typed also starts the run's inputs, so
948
+ `{{client}}` in a step is filled at once. `{ step, project }` lets that form step
942
949
  make the project (`useCreateProject`, with its workspace, which `project` may describe) when it
943
950
  is completed, and the same run goes on in it. Without `projectFrom` the run works in
944
951
  `workspaceId`, else the open workspace.
@@ -1,7 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk7XVQATK2_cjs = require('./chunk-7XVQATK2.cjs');
4
+ var chunkOXHAUVK2_cjs = require('./chunk-OXHAUVK2.cjs');
5
+ var chunk7OPOPYV6_cjs = require('./chunk-7OPOPYV6.cjs');
6
+ require('./chunk-OAIOOVFN.cjs');
7
+ var chunk5HEMXXHR_cjs = require('./chunk-5HEMXXHR.cjs');
8
+ require('./chunk-WV65MJ43.cjs');
9
+ require('./chunk-TMX7YFVM.cjs');
10
+ require('./chunk-LUO46ELJ.cjs');
11
+ require('./chunk-SJSGSHIT.cjs');
12
+ require('./chunk-ZT5MIFLC.cjs');
5
13
  require('./chunk-QHOZDZF3.cjs');
6
14
  require('./chunk-32YCMXT2.cjs');
7
15
  require('./chunk-RT3M5WOS.cjs');
@@ -24,14 +32,6 @@ require('./chunk-5GQOIQCB.cjs');
24
32
  require('./chunk-UDSHVNU3.cjs');
25
33
  require('./chunk-IPSHAMO2.cjs');
26
34
  require('./chunk-FX3K6LNZ.cjs');
27
- var chunk7OPOPYV6_cjs = require('./chunk-7OPOPYV6.cjs');
28
- require('./chunk-OAIOOVFN.cjs');
29
- var chunk5HEMXXHR_cjs = require('./chunk-5HEMXXHR.cjs');
30
- require('./chunk-WV65MJ43.cjs');
31
- require('./chunk-TMX7YFVM.cjs');
32
- require('./chunk-LUO46ELJ.cjs');
33
- require('./chunk-SJSGSHIT.cjs');
34
- require('./chunk-ZT5MIFLC.cjs');
35
35
  var chunkZBP4ZSAJ_cjs = require('./chunk-ZBP4ZSAJ.cjs');
36
36
  require('./chunk-PPCATBOY.cjs');
37
37
  require('./chunk-UIXY4HKM.cjs');
@@ -302,7 +302,7 @@ function ConnectedCallDock() {
302
302
  ) })
303
303
  ] })),
304
304
  connected && /* @__PURE__ */ jsxRuntime.jsx(
305
- chunk7XVQATK2_cjs.ConnectedCallRoom,
305
+ chunkOXHAUVK2_cjs.ConnectedCallRoom,
306
306
  {
307
307
  tokenResponse: connected,
308
308
  e2eeKey: active.key,
@@ -327,5 +327,5 @@ function ConnectedCallDock() {
327
327
  }
328
328
 
329
329
  exports.ConnectedCallDock = ConnectedCallDock;
330
- //# sourceMappingURL=ConnectedCallDock-D4DG4VDA.cjs.map
331
- //# sourceMappingURL=ConnectedCallDock-D4DG4VDA.cjs.map
330
+ //# sourceMappingURL=ConnectedCallDock-HI2KMQZ3.cjs.map
331
+ //# sourceMappingURL=ConnectedCallDock-HI2KMQZ3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/calls/connected/WebinarHolding.tsx","../src/calls/connected/ConnectedCallDock.tsx"],"names":["useArbi","useRef","useEffect","callSession","joinFromPreJoin","AUDIENCE_CHOICES","onCallEvent","jsx","WebinarWaiting","CallUserPill","useState","useLayoutEffect","nearestCorner","useArbiHost","useCallSession","useCallback","useMirrorSelfView","useCall","rejoinAsAudience","calls","callLink","Fragment","jsxs","cn","MinimisedCall","CallHeader","CallStateMessage","PreJoin","DEFAULT_JOIN_CHOICES","classifyMediaError","Button","ConnectedCallRoom"],"mappings":"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","file":"ConnectedCallDock-D4DG4VDA.cjs","sourcesContent":["/**\n * The audience's holding screens in the call dock: \"Starting soon\" before the host goes live —\n * reading the webinar every few seconds and listening to WS `call.webinar`, then joining by itself\n * — and \"This webinar has ended\" once the host ended it.\n */\n\nimport {\n useArbi,\n onCallEvent,\n callSession,\n joinFromPreJoin,\n AUDIENCE_CHOICES,\n} from '@arbidocs/react'\nimport { useEffect, useRef, type ReactElement } from 'react'\nimport { WebinarWaiting } from '../ui'\nimport { CallUserPill } from './CallUserPill'\n\n/** How often \"Starting soon\" reads the webinar (a link holder gets no WS event). */\nexport const WEBINAR_WAIT_POLL_MS = 5_000\n\n/** Wait for go-live, then join once. */\nfunction useJoinWhenLive(callExtId: string, linkVersion: number, enabled: boolean): void {\n const arbi = useArbi()\n const joined = useRef(false)\n useEffect(() => {\n if (!enabled) return\n joined.current = false\n let stopped = false\n const join = () => {\n if (stopped || joined.current) return\n joined.current = true\n const active = callSession.getState().active\n if (active?.callExtId !== callExtId) return\n void joinFromPreJoin(arbi, active.choices ?? AUDIENCE_CHOICES)\n }\n const poll = () =>\n arbi.calls.webinar\n .get(callExtId, linkVersion)\n .then((s) => s.live && join())\n .catch((err: unknown) => console.warn('[calls] could not read the webinar state', err))\n const id = setInterval(() => void poll(), WEBINAR_WAIT_POLL_MS)\n const off = onCallEvent('call.webinar', (m) => {\n if (m.call_ext_id === callExtId && m.live) join()\n })\n return () => {\n stopped = true\n clearInterval(id)\n off()\n }\n }, [arbi, callExtId, linkVersion, enabled])\n}\n\nexport function WebinarHolding({\n variant,\n callExtId,\n linkVersion,\n title,\n host,\n onLeave,\n}: {\n variant: 'waiting' | 'ended'\n callExtId: string\n linkVersion: number\n title?: string | null\n /** The host (the call's creator), named as a pill. */\n host?: { identity: string; name?: string | null } | null\n onLeave(): void\n}): ReactElement {\n useJoinWhenLive(callExtId, linkVersion, variant === 'waiting')\n return (\n <WebinarWaiting\n variant={variant}\n title={title}\n host={host?.identity ? <CallUserPill identity={host.identity} name={host.name} /> : undefined}\n onLeave={onLeave}\n leaveLabel={variant === 'waiting' ? 'Leave' : 'Close'}\n />\n )\n}\n","/**\n * ConnectedCallDock — where the active call lives. Mount it once (lazily: it pulls LiveKit) while\n * the call session has an active call. Placements of ONE element (so the room never remounts and\n * hangs up):\n * docked → the call panel in the host's right-hand dock, like the document viewer: the host's\n * slot (`calls.useSlot`) reserves the space and this element follows that box. The\n * main pane shows the call's conversation (`calls.showConversation`) — its chat and\n * live transcript.\n * main → a webinar's audience has no conversation beside the call: its viewer takes the\n * host's main slot the same way, the stage large with the Q&A / chat column beside\n * it. Without a host slot the call floats at the right edge (or fills the page).\n * minimised → a small card in a corner (drag it to another), so the user keeps working; another\n * panel taking the dock also minimises the call.\n * Phases: prejoin (device check), knocking (waiting for a host), connected (<CallRoom>). A\n * webinar's audience skips the device check (it cannot publish), waits on \"Starting soon\" before\n * go-live and sees \"This webinar has ended\" after; when the stage changes under someone (moved to\n * the audience, stepped down) the room drops them and they join again at once, with no screen.\n */\n\nimport {\n useArbi,\n callSession,\n classifyMediaError,\n useCall,\n useCallSession,\n callLink,\n joinFromPreJoin,\n rejoinAsAudience,\n AUDIENCE_CHOICES,\n useArbiHost,\n type CallSlotMode,\n DEFAULT_JOIN_CHOICES,\n} from '@arbidocs/react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState, type ReactElement } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n CallHeader,\n CallStateMessage,\n MinimisedCall,\n PreJoin,\n nearestCorner,\n type PipCorner,\n} from '../ui'\nimport { calls } from '@arbidocs/sdk/browser'\nimport { ConnectedCallRoom } from './ConnectedCallRoom'\nimport { WebinarHolding } from './WebinarHolding'\nimport { useMirrorSelfView } from '../self-view'\n\nconst CORNER_KEY = 'arbi-call-pip-corner'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\n/** An element's viewport rectangle, kept current; null while there is none. */\nfunction useRectOf(el: Element | null): Rect | null {\n const [rect, setRect] = useState<Rect | null>(null)\n useLayoutEffect(() => {\n if (!el) {\n setRect(null)\n return\n }\n const measure = () => {\n const r = el.getBoundingClientRect()\n const next =\n r.width > 0 && r.height > 0\n ? { top: r.top, left: r.left, width: r.width, height: r.height }\n : null\n setRect((prev) =>\n prev &&\n next &&\n prev.top === next.top &&\n prev.left === next.left &&\n prev.width === next.width &&\n prev.height === next.height\n ? prev\n : next\n )\n }\n measure()\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null\n ro?.observe(el)\n window.addEventListener('resize', measure)\n // Banners, the sidebar and the dock's open animation move the box without resizing it.\n const id = setInterval(measure, 250)\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', measure)\n clearInterval(id)\n }\n }, [el])\n return rect\n}\n\nfunction readCorner(): PipCorner {\n try {\n const v = localStorage.getItem(CORNER_KEY)\n if (v === 'top-left' || v === 'top-right' || v === 'bottom-left' || v === 'bottom-right')\n return v\n } catch {\n // Storage blocked: the default corner.\n }\n return 'bottom-right'\n}\n\nconst CORNER_CLASS: Record<PipCorner, string> = {\n 'top-left': 'left-4 top-4',\n 'top-right': 'right-4 top-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n}\n\n/** Drag the minimised card; it settles in the nearest corner. */\nfunction usePipDrag(onCorner: (c: PipCorner) => void) {\n const [offset, setOffset] = useState<{ x: number; y: number } | null>(null)\n const start = useRef<{ x: number; y: number; moved: boolean } | null>(null)\n const onPointerDown = (e: React.PointerEvent<HTMLElement>) => {\n // Buttons keep their clicks; drag by the card's body.\n if (\n e.button !== 0 ||\n (e.target as HTMLElement).closest('button:not([data-testid=\"call-minimised-restore\"])')\n )\n return\n start.current = { x: e.clientX, y: e.clientY, moved: false }\n e.currentTarget.setPointerCapture?.(e.pointerId)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n if (!s) return\n const dx = e.clientX - s.x\n const dy = e.clientY - s.y\n if (!s.moved && Math.hypot(dx, dy) < 6) return\n s.moved = true\n setOffset({ x: dx, y: dy })\n }\n const onPointerUp = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n start.current = null\n if (!s?.moved) return\n const r = e.currentTarget.getBoundingClientRect()\n onCorner(\n nearestCorner(\n r.left + r.width / 2,\n r.top + r.height / 2,\n window.innerWidth,\n window.innerHeight\n )\n )\n setOffset(null)\n // The drag ended on the card: do not let it count as \"back to the call\".\n const swallow = (ev: Event) => {\n ev.stopPropagation()\n ev.preventDefault()\n }\n window.addEventListener('click', swallow, { capture: true, once: true })\n setTimeout(() => window.removeEventListener('click', swallow, { capture: true }), 0)\n }\n return { offset, handlers: { onPointerDown, onPointerMove, onPointerUp } }\n}\n\n/** A host slot that renders nothing: the call floats. */\nconst noSlot = (): HTMLElement | null => null\n\nexport function ConnectedCallDock(): ReactElement | null {\n const arbi = useArbi()\n const host = useArbiHost().calls\n const useSlot = host?.useSlot ?? noSlot\n const showConversation = host?.showConversation\n const active = useCallSession((s) => s.active)\n const { endActiveCall, updateActiveCall, setCallMinimized } = callSession\n const [joining, setJoining] = useState(false)\n const [corner, setCornerState] = useState<PipCorner>(readCorner)\n const setCorner = useCallback((c: PipCorner) => {\n setCornerState(c)\n try {\n localStorage.setItem(CORNER_KEY, c)\n } catch {\n // Not remembered: fine.\n }\n }, [])\n const minimized = !!active?.minimized\n const docked = !!active && !minimized\n const [mirrorSelf] = useMirrorSelfView()\n const drag = usePipDrag(setCorner)\n\n // A webinar: my role decides the join (the audience skips the device check) and the UI.\n const { data: call, isError: callUnreadable } = useCall(active?.callExtId)\n const callKnown = !!call || callUnreadable\n const webinarRole = call?.mode === 'webinar' ? (call.webinar?.my_role ?? 'attendee') : null\n const audience = webinarRole === 'attendee'\n const phase = active?.phase\n const callExtId = active?.callExtId\n const autoJoined = useRef<string | null>(null)\n useEffect(() => {\n if (phase !== 'prejoin' || !audience || !callExtId || autoJoined.current === callExtId) return\n autoJoined.current = callExtId\n setJoining(true)\n void joinFromPreJoin(arbi, AUDIENCE_CHOICES).finally(() => setJoining(false))\n }, [arbi, phase, audience, callExtId])\n\n /** A room I was in has gone: leave the call, unless it dropped me to join again (webinar stage). */\n const onRoomLeft = useCallback(\n (token: calls.CallTokenResponse) => {\n const current = callSession.getState().active\n if (!current || current.tokenResponse !== token) return // a room already replaced\n if (current.rejoining) void rejoinAsAudience(arbi, current.callExtId)\n else endActiveCall()\n },\n [arbi, endActiveCall]\n )\n /** The host ended the webinar: the audience and panelists see it ended; moderators just close. */\n const onRoomClosed =\n webinarRole && !calls.WEBINAR_MODERATORS.has(webinarRole) && callExtId\n ? () => updateActiveCall(callExtId, { phase: 'webinar-ended', tokenResponse: null })\n : undefined\n\n // The slot: the dock, or the main area for a webinar's audience (the viewer, or its waiting /\n // ended screens). The host's slot is claimed while the call shows; another panel taking it\n // minimises the call; closing the call frees it.\n const [roomViewer, setRoomViewer] = useState(false)\n const slotMode: CallSlotMode = (phase === 'connected' ? roomViewer : audience) ? 'main' : 'docked'\n const minimise = useCallback(() => setCallMinimized(true), [setCallMinimized])\n const slot = useSlot(slotMode, docked, minimise)\n const rect = useRectOf(docked ? slot : null)\n\n // Once connected, the main pane shows the call's conversation (its chat and transcript).\n const shownFor = useRef<string | null>(null)\n // A webinar's audience is not in its meeting chat: nothing to show.\n useEffect(() => {\n // The viewer took the main area (a team member off stage): show it again once back on stage.\n if (roomViewer) shownFor.current = null\n if (active?.phase !== 'connected' || shownFor.current === active.callExtId) return\n if (!callKnown || audience || roomViewer || !showConversation) return\n shownFor.current = active.callExtId\n void showConversation(active)\n }, [active, callKnown, audience, roomViewer, showConversation])\n\n if (!active) return null\n const title = active.title ?? 'Call'\n const connected = active.phase === 'connected' ? active.tokenResponse : null\n const link = callLink(active.callExtId, active.key, active.linkVersion)\n\n return (\n <>\n <section\n aria-label=\"Active call\"\n data-testid=\"call-dock\"\n data-placement={minimized ? 'minimised' : slotMode}\n className={cn(\n 'fixed flex flex-col overflow-hidden bg-background text-foreground',\n minimized\n ? cn(\n 'z-50 w-80 max-w-[calc(100vw-2rem)] cursor-grab touch-none rounded-md border border-border shadow-xl active:cursor-grabbing',\n CORNER_CLASS[corner]\n )\n : cn(\n 'z-40',\n !rect &&\n (slotMode === 'main'\n ? 'inset-0'\n : 'inset-y-0 right-0 w-[min(480px,100vw)] border-l border-border')\n )\n )}\n style={\n minimized\n ? drag.offset\n ? { transform: `translate(${drag.offset.x}px, ${drag.offset.y}px)` }\n : undefined\n : rect\n ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height }\n : undefined\n }\n {...(minimized ? drag.handlers : {})}\n >\n {active.phase !== 'connected' &&\n (minimized ? (\n <MinimisedCall\n title={title}\n onRestore={() => setCallMinimized(false)}\n onLeave={endActiveCall}\n />\n ) : (\n <div className=\"flex size-full min-h-0 flex-col\">\n <CallHeader title={title} onMinimise={() => setCallMinimized(true)} />\n <div className=\"flex min-h-0 flex-1 overflow-y-auto p-4\">\n {active.phase === 'prejoin' && (audience || !callKnown) ? (\n <CallStateMessage title=\"Joining…\" testId=\"call-joining\" />\n ) : active.phase === 'prejoin' ? (\n <PreJoin\n initialChoices={DEFAULT_JOIN_CHOICES}\n className=\"my-auto\"\n busy={joining}\n joinLabel={active.ringOnJoin ? 'Start call' : 'Join'}\n describeError={(err, kind) => classifyMediaError(err, kind)}\n mirror={mirrorSelf}\n onJoin={(choices) => {\n setJoining(true)\n void joinFromPreJoin(arbi, choices).finally(() => setJoining(false))\n }}\n onCancel={endActiveCall}\n />\n ) : active.phase === 'webinar-waiting' || active.phase === 'webinar-ended' ? (\n <WebinarHolding\n variant={active.phase === 'webinar-waiting' ? 'waiting' : 'ended'}\n callExtId={active.callExtId}\n linkVersion={active.linkVersion}\n title={active.title}\n host={\n call?.creator_ext_id\n ? { identity: call.creator_ext_id, name: call.creator_name }\n : null\n }\n onLeave={endActiveCall}\n />\n ) : (\n <CallStateMessage\n title=\"Waiting for the host to let you in…\"\n description=\"You will join as soon as someone in the call admits you.\"\n testId=\"call-knocking\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={endActiveCall}>\n Cancel\n </Button>\n }\n />\n )}\n </div>\n </div>\n ))}\n {connected && (\n <ConnectedCallRoom\n // A new token is a new room (a webinar rejoin): build it afresh.\n key={`${active.callExtId}:${connected.token}`}\n tokenResponse={connected}\n e2eeKey={active.key}\n choices={active.choices ?? undefined}\n isCreator={active.isCreator}\n lockedWorkspaceExtId={active.lockedWorkspaceExtId}\n title={title}\n startedAt={active.startedAt}\n link={link}\n minimized={minimized}\n onMinimizedChange={setCallMinimized}\n onLeave={() => onRoomLeft(connected)}\n webinarRole={webinarRole}\n onRoomClosed={onRoomClosed}\n onViewerChange={setRoomViewer}\n />\n )}\n </section>\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/calls/connected/WebinarHolding.tsx","../src/calls/connected/ConnectedCallDock.tsx"],"names":["useArbi","useRef","useEffect","callSession","joinFromPreJoin","AUDIENCE_CHOICES","onCallEvent","jsx","WebinarWaiting","CallUserPill","useState","useLayoutEffect","nearestCorner","useArbiHost","useCallSession","useCallback","useMirrorSelfView","useCall","rejoinAsAudience","calls","callLink","Fragment","jsxs","cn","MinimisedCall","CallHeader","CallStateMessage","PreJoin","DEFAULT_JOIN_CHOICES","classifyMediaError","Button","ConnectedCallRoom"],"mappings":"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","file":"ConnectedCallDock-HI2KMQZ3.cjs","sourcesContent":["/**\n * The audience's holding screens in the call dock: \"Starting soon\" before the host goes live —\n * reading the webinar every few seconds and listening to WS `call.webinar`, then joining by itself\n * — and \"This webinar has ended\" once the host ended it.\n */\n\nimport {\n useArbi,\n onCallEvent,\n callSession,\n joinFromPreJoin,\n AUDIENCE_CHOICES,\n} from '@arbidocs/react'\nimport { useEffect, useRef, type ReactElement } from 'react'\nimport { WebinarWaiting } from '../ui'\nimport { CallUserPill } from './CallUserPill'\n\n/** How often \"Starting soon\" reads the webinar (a link holder gets no WS event). */\nexport const WEBINAR_WAIT_POLL_MS = 5_000\n\n/** Wait for go-live, then join once. */\nfunction useJoinWhenLive(callExtId: string, linkVersion: number, enabled: boolean): void {\n const arbi = useArbi()\n const joined = useRef(false)\n useEffect(() => {\n if (!enabled) return\n joined.current = false\n let stopped = false\n const join = () => {\n if (stopped || joined.current) return\n joined.current = true\n const active = callSession.getState().active\n if (active?.callExtId !== callExtId) return\n void joinFromPreJoin(arbi, active.choices ?? AUDIENCE_CHOICES)\n }\n const poll = () =>\n arbi.calls.webinar\n .get(callExtId, linkVersion)\n .then((s) => s.live && join())\n .catch((err: unknown) => console.warn('[calls] could not read the webinar state', err))\n const id = setInterval(() => void poll(), WEBINAR_WAIT_POLL_MS)\n const off = onCallEvent('call.webinar', (m) => {\n if (m.call_ext_id === callExtId && m.live) join()\n })\n return () => {\n stopped = true\n clearInterval(id)\n off()\n }\n }, [arbi, callExtId, linkVersion, enabled])\n}\n\nexport function WebinarHolding({\n variant,\n callExtId,\n linkVersion,\n title,\n host,\n onLeave,\n}: {\n variant: 'waiting' | 'ended'\n callExtId: string\n linkVersion: number\n title?: string | null\n /** The host (the call's creator), named as a pill. */\n host?: { identity: string; name?: string | null } | null\n onLeave(): void\n}): ReactElement {\n useJoinWhenLive(callExtId, linkVersion, variant === 'waiting')\n return (\n <WebinarWaiting\n variant={variant}\n title={title}\n host={host?.identity ? <CallUserPill identity={host.identity} name={host.name} /> : undefined}\n onLeave={onLeave}\n leaveLabel={variant === 'waiting' ? 'Leave' : 'Close'}\n />\n )\n}\n","/**\n * ConnectedCallDock — where the active call lives. Mount it once (lazily: it pulls LiveKit) while\n * the call session has an active call. Placements of ONE element (so the room never remounts and\n * hangs up):\n * docked → the call panel in the host's right-hand dock, like the document viewer: the host's\n * slot (`calls.useSlot`) reserves the space and this element follows that box. The\n * main pane shows the call's conversation (`calls.showConversation`) — its chat and\n * live transcript.\n * main → a webinar's audience has no conversation beside the call: its viewer takes the\n * host's main slot the same way, the stage large with the Q&A / chat column beside\n * it. Without a host slot the call floats at the right edge (or fills the page).\n * minimised → a small card in a corner (drag it to another), so the user keeps working; another\n * panel taking the dock also minimises the call.\n * Phases: prejoin (device check), knocking (waiting for a host), connected (<CallRoom>). A\n * webinar's audience skips the device check (it cannot publish), waits on \"Starting soon\" before\n * go-live and sees \"This webinar has ended\" after; when the stage changes under someone (moved to\n * the audience, stepped down) the room drops them and they join again at once, with no screen.\n */\n\nimport {\n useArbi,\n callSession,\n classifyMediaError,\n useCall,\n useCallSession,\n callLink,\n joinFromPreJoin,\n rejoinAsAudience,\n AUDIENCE_CHOICES,\n useArbiHost,\n type CallSlotMode,\n DEFAULT_JOIN_CHOICES,\n} from '@arbidocs/react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState, type ReactElement } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n CallHeader,\n CallStateMessage,\n MinimisedCall,\n PreJoin,\n nearestCorner,\n type PipCorner,\n} from '../ui'\nimport { calls } from '@arbidocs/sdk/browser'\nimport { ConnectedCallRoom } from './ConnectedCallRoom'\nimport { WebinarHolding } from './WebinarHolding'\nimport { useMirrorSelfView } from '../self-view'\n\nconst CORNER_KEY = 'arbi-call-pip-corner'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\n/** An element's viewport rectangle, kept current; null while there is none. */\nfunction useRectOf(el: Element | null): Rect | null {\n const [rect, setRect] = useState<Rect | null>(null)\n useLayoutEffect(() => {\n if (!el) {\n setRect(null)\n return\n }\n const measure = () => {\n const r = el.getBoundingClientRect()\n const next =\n r.width > 0 && r.height > 0\n ? { top: r.top, left: r.left, width: r.width, height: r.height }\n : null\n setRect((prev) =>\n prev &&\n next &&\n prev.top === next.top &&\n prev.left === next.left &&\n prev.width === next.width &&\n prev.height === next.height\n ? prev\n : next\n )\n }\n measure()\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null\n ro?.observe(el)\n window.addEventListener('resize', measure)\n // Banners, the sidebar and the dock's open animation move the box without resizing it.\n const id = setInterval(measure, 250)\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', measure)\n clearInterval(id)\n }\n }, [el])\n return rect\n}\n\nfunction readCorner(): PipCorner {\n try {\n const v = localStorage.getItem(CORNER_KEY)\n if (v === 'top-left' || v === 'top-right' || v === 'bottom-left' || v === 'bottom-right')\n return v\n } catch {\n // Storage blocked: the default corner.\n }\n return 'bottom-right'\n}\n\nconst CORNER_CLASS: Record<PipCorner, string> = {\n 'top-left': 'left-4 top-4',\n 'top-right': 'right-4 top-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n}\n\n/** Drag the minimised card; it settles in the nearest corner. */\nfunction usePipDrag(onCorner: (c: PipCorner) => void) {\n const [offset, setOffset] = useState<{ x: number; y: number } | null>(null)\n const start = useRef<{ x: number; y: number; moved: boolean } | null>(null)\n const onPointerDown = (e: React.PointerEvent<HTMLElement>) => {\n // Buttons keep their clicks; drag by the card's body.\n if (\n e.button !== 0 ||\n (e.target as HTMLElement).closest('button:not([data-testid=\"call-minimised-restore\"])')\n )\n return\n start.current = { x: e.clientX, y: e.clientY, moved: false }\n e.currentTarget.setPointerCapture?.(e.pointerId)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n if (!s) return\n const dx = e.clientX - s.x\n const dy = e.clientY - s.y\n if (!s.moved && Math.hypot(dx, dy) < 6) return\n s.moved = true\n setOffset({ x: dx, y: dy })\n }\n const onPointerUp = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n start.current = null\n if (!s?.moved) return\n const r = e.currentTarget.getBoundingClientRect()\n onCorner(\n nearestCorner(\n r.left + r.width / 2,\n r.top + r.height / 2,\n window.innerWidth,\n window.innerHeight\n )\n )\n setOffset(null)\n // The drag ended on the card: do not let it count as \"back to the call\".\n const swallow = (ev: Event) => {\n ev.stopPropagation()\n ev.preventDefault()\n }\n window.addEventListener('click', swallow, { capture: true, once: true })\n setTimeout(() => window.removeEventListener('click', swallow, { capture: true }), 0)\n }\n return { offset, handlers: { onPointerDown, onPointerMove, onPointerUp } }\n}\n\n/** A host slot that renders nothing: the call floats. */\nconst noSlot = (): HTMLElement | null => null\n\nexport function ConnectedCallDock(): ReactElement | null {\n const arbi = useArbi()\n const host = useArbiHost().calls\n const useSlot = host?.useSlot ?? noSlot\n const showConversation = host?.showConversation\n const active = useCallSession((s) => s.active)\n const { endActiveCall, updateActiveCall, setCallMinimized } = callSession\n const [joining, setJoining] = useState(false)\n const [corner, setCornerState] = useState<PipCorner>(readCorner)\n const setCorner = useCallback((c: PipCorner) => {\n setCornerState(c)\n try {\n localStorage.setItem(CORNER_KEY, c)\n } catch {\n // Not remembered: fine.\n }\n }, [])\n const minimized = !!active?.minimized\n const docked = !!active && !minimized\n const [mirrorSelf] = useMirrorSelfView()\n const drag = usePipDrag(setCorner)\n\n // A webinar: my role decides the join (the audience skips the device check) and the UI.\n const { data: call, isError: callUnreadable } = useCall(active?.callExtId)\n const callKnown = !!call || callUnreadable\n const webinarRole = call?.mode === 'webinar' ? (call.webinar?.my_role ?? 'attendee') : null\n const audience = webinarRole === 'attendee'\n const phase = active?.phase\n const callExtId = active?.callExtId\n const autoJoined = useRef<string | null>(null)\n useEffect(() => {\n if (phase !== 'prejoin' || !audience || !callExtId || autoJoined.current === callExtId) return\n autoJoined.current = callExtId\n setJoining(true)\n void joinFromPreJoin(arbi, AUDIENCE_CHOICES).finally(() => setJoining(false))\n }, [arbi, phase, audience, callExtId])\n\n /** A room I was in has gone: leave the call, unless it dropped me to join again (webinar stage). */\n const onRoomLeft = useCallback(\n (token: calls.CallTokenResponse) => {\n const current = callSession.getState().active\n if (!current || current.tokenResponse !== token) return // a room already replaced\n if (current.rejoining) void rejoinAsAudience(arbi, current.callExtId)\n else endActiveCall()\n },\n [arbi, endActiveCall]\n )\n /** The host ended the webinar: the audience and panelists see it ended; moderators just close. */\n const onRoomClosed =\n webinarRole && !calls.WEBINAR_MODERATORS.has(webinarRole) && callExtId\n ? () => updateActiveCall(callExtId, { phase: 'webinar-ended', tokenResponse: null })\n : undefined\n\n // The slot: the dock, or the main area for a webinar's audience (the viewer, or its waiting /\n // ended screens). The host's slot is claimed while the call shows; another panel taking it\n // minimises the call; closing the call frees it.\n const [roomViewer, setRoomViewer] = useState(false)\n const slotMode: CallSlotMode = (phase === 'connected' ? roomViewer : audience) ? 'main' : 'docked'\n const minimise = useCallback(() => setCallMinimized(true), [setCallMinimized])\n const slot = useSlot(slotMode, docked, minimise)\n const rect = useRectOf(docked ? slot : null)\n\n // Once connected, the main pane shows the call's conversation (its chat and transcript).\n const shownFor = useRef<string | null>(null)\n // A webinar's audience is not in its meeting chat: nothing to show.\n useEffect(() => {\n // The viewer took the main area (a team member off stage): show it again once back on stage.\n if (roomViewer) shownFor.current = null\n if (active?.phase !== 'connected' || shownFor.current === active.callExtId) return\n if (!callKnown || audience || roomViewer || !showConversation) return\n shownFor.current = active.callExtId\n void showConversation(active)\n }, [active, callKnown, audience, roomViewer, showConversation])\n\n if (!active) return null\n const title = active.title ?? 'Call'\n const connected = active.phase === 'connected' ? active.tokenResponse : null\n const link = callLink(active.callExtId, active.key, active.linkVersion)\n\n return (\n <>\n <section\n aria-label=\"Active call\"\n data-testid=\"call-dock\"\n data-placement={minimized ? 'minimised' : slotMode}\n className={cn(\n 'fixed flex flex-col overflow-hidden bg-background text-foreground',\n minimized\n ? cn(\n 'z-50 w-80 max-w-[calc(100vw-2rem)] cursor-grab touch-none rounded-md border border-border shadow-xl active:cursor-grabbing',\n CORNER_CLASS[corner]\n )\n : cn(\n 'z-40',\n !rect &&\n (slotMode === 'main'\n ? 'inset-0'\n : 'inset-y-0 right-0 w-[min(480px,100vw)] border-l border-border')\n )\n )}\n style={\n minimized\n ? drag.offset\n ? { transform: `translate(${drag.offset.x}px, ${drag.offset.y}px)` }\n : undefined\n : rect\n ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height }\n : undefined\n }\n {...(minimized ? drag.handlers : {})}\n >\n {active.phase !== 'connected' &&\n (minimized ? (\n <MinimisedCall\n title={title}\n onRestore={() => setCallMinimized(false)}\n onLeave={endActiveCall}\n />\n ) : (\n <div className=\"flex size-full min-h-0 flex-col\">\n <CallHeader title={title} onMinimise={() => setCallMinimized(true)} />\n <div className=\"flex min-h-0 flex-1 overflow-y-auto p-4\">\n {active.phase === 'prejoin' && (audience || !callKnown) ? (\n <CallStateMessage title=\"Joining…\" testId=\"call-joining\" />\n ) : active.phase === 'prejoin' ? (\n <PreJoin\n initialChoices={DEFAULT_JOIN_CHOICES}\n className=\"my-auto\"\n busy={joining}\n joinLabel={active.ringOnJoin ? 'Start call' : 'Join'}\n describeError={(err, kind) => classifyMediaError(err, kind)}\n mirror={mirrorSelf}\n onJoin={(choices) => {\n setJoining(true)\n void joinFromPreJoin(arbi, choices).finally(() => setJoining(false))\n }}\n onCancel={endActiveCall}\n />\n ) : active.phase === 'webinar-waiting' || active.phase === 'webinar-ended' ? (\n <WebinarHolding\n variant={active.phase === 'webinar-waiting' ? 'waiting' : 'ended'}\n callExtId={active.callExtId}\n linkVersion={active.linkVersion}\n title={active.title}\n host={\n call?.creator_ext_id\n ? { identity: call.creator_ext_id, name: call.creator_name }\n : null\n }\n onLeave={endActiveCall}\n />\n ) : (\n <CallStateMessage\n title=\"Waiting for the host to let you in…\"\n description=\"You will join as soon as someone in the call admits you.\"\n testId=\"call-knocking\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={endActiveCall}>\n Cancel\n </Button>\n }\n />\n )}\n </div>\n </div>\n ))}\n {connected && (\n <ConnectedCallRoom\n // A new token is a new room (a webinar rejoin): build it afresh.\n key={`${active.callExtId}:${connected.token}`}\n tokenResponse={connected}\n e2eeKey={active.key}\n choices={active.choices ?? undefined}\n isCreator={active.isCreator}\n lockedWorkspaceExtId={active.lockedWorkspaceExtId}\n title={title}\n startedAt={active.startedAt}\n link={link}\n minimized={minimized}\n onMinimizedChange={setCallMinimized}\n onLeave={() => onRoomLeft(connected)}\n webinarRole={webinarRole}\n onRoomClosed={onRoomClosed}\n onViewerChange={setRoomViewer}\n />\n )}\n </section>\n </>\n )\n}\n"]}
@@ -1,5 +1,13 @@
1
1
  "use client";
2
- import { ConnectedCallRoom } from './chunk-RMJNCYPD.js';
2
+ import { ConnectedCallRoom } from './chunk-KJLHFS7T.js';
3
+ import { useMirrorSelfView, MinimisedCall, CallHeader, CallStateMessage, PreJoin, WebinarWaiting } from './chunk-Y2FPWPDB.js';
4
+ import './chunk-CHQMVIHR.js';
5
+ import { CallUserPill } from './chunk-46IG4KY7.js';
6
+ import './chunk-JVJOIZNN.js';
7
+ import './chunk-3UIJLUXN.js';
8
+ import './chunk-BH4MK2J5.js';
9
+ import './chunk-USTSEENR.js';
10
+ import './chunk-PFF5IZGS.js';
3
11
  import './chunk-YCINS3YV.js';
4
12
  import './chunk-KFVOZOMX.js';
5
13
  import './chunk-E4MNUJEU.js';
@@ -22,14 +30,6 @@ import './chunk-YQPI7SRN.js';
22
30
  import './chunk-XDDORJPA.js';
23
31
  import './chunk-X5YMI6A7.js';
24
32
  import './chunk-SLSBJRWW.js';
25
- import { useMirrorSelfView, MinimisedCall, CallHeader, CallStateMessage, PreJoin, WebinarWaiting } from './chunk-Y2FPWPDB.js';
26
- import './chunk-CHQMVIHR.js';
27
- import { CallUserPill } from './chunk-46IG4KY7.js';
28
- import './chunk-JVJOIZNN.js';
29
- import './chunk-3UIJLUXN.js';
30
- import './chunk-BH4MK2J5.js';
31
- import './chunk-USTSEENR.js';
32
- import './chunk-PFF5IZGS.js';
33
33
  import { nearestCorner } from './chunk-H773F7OR.js';
34
34
  import './chunk-NPLYHR2E.js';
35
35
  import './chunk-3KA6GZUW.js';
@@ -325,5 +325,5 @@ function ConnectedCallDock() {
325
325
  }
326
326
 
327
327
  export { ConnectedCallDock };
328
- //# sourceMappingURL=ConnectedCallDock-VVZUSFFK.js.map
329
- //# sourceMappingURL=ConnectedCallDock-VVZUSFFK.js.map
328
+ //# sourceMappingURL=ConnectedCallDock-Y64FTKFF.js.map
329
+ //# sourceMappingURL=ConnectedCallDock-Y64FTKFF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/calls/connected/WebinarHolding.tsx","../src/calls/connected/ConnectedCallDock.tsx"],"names":["useRef","useArbi","callSession","useEffect","joinFromPreJoin","AUDIENCE_CHOICES","jsx"],"mappings":"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","file":"ConnectedCallDock-VVZUSFFK.js","sourcesContent":["/**\n * The audience's holding screens in the call dock: \"Starting soon\" before the host goes live —\n * reading the webinar every few seconds and listening to WS `call.webinar`, then joining by itself\n * — and \"This webinar has ended\" once the host ended it.\n */\n\nimport {\n useArbi,\n onCallEvent,\n callSession,\n joinFromPreJoin,\n AUDIENCE_CHOICES,\n} from '@arbidocs/react'\nimport { useEffect, useRef, type ReactElement } from 'react'\nimport { WebinarWaiting } from '../ui'\nimport { CallUserPill } from './CallUserPill'\n\n/** How often \"Starting soon\" reads the webinar (a link holder gets no WS event). */\nexport const WEBINAR_WAIT_POLL_MS = 5_000\n\n/** Wait for go-live, then join once. */\nfunction useJoinWhenLive(callExtId: string, linkVersion: number, enabled: boolean): void {\n const arbi = useArbi()\n const joined = useRef(false)\n useEffect(() => {\n if (!enabled) return\n joined.current = false\n let stopped = false\n const join = () => {\n if (stopped || joined.current) return\n joined.current = true\n const active = callSession.getState().active\n if (active?.callExtId !== callExtId) return\n void joinFromPreJoin(arbi, active.choices ?? AUDIENCE_CHOICES)\n }\n const poll = () =>\n arbi.calls.webinar\n .get(callExtId, linkVersion)\n .then((s) => s.live && join())\n .catch((err: unknown) => console.warn('[calls] could not read the webinar state', err))\n const id = setInterval(() => void poll(), WEBINAR_WAIT_POLL_MS)\n const off = onCallEvent('call.webinar', (m) => {\n if (m.call_ext_id === callExtId && m.live) join()\n })\n return () => {\n stopped = true\n clearInterval(id)\n off()\n }\n }, [arbi, callExtId, linkVersion, enabled])\n}\n\nexport function WebinarHolding({\n variant,\n callExtId,\n linkVersion,\n title,\n host,\n onLeave,\n}: {\n variant: 'waiting' | 'ended'\n callExtId: string\n linkVersion: number\n title?: string | null\n /** The host (the call's creator), named as a pill. */\n host?: { identity: string; name?: string | null } | null\n onLeave(): void\n}): ReactElement {\n useJoinWhenLive(callExtId, linkVersion, variant === 'waiting')\n return (\n <WebinarWaiting\n variant={variant}\n title={title}\n host={host?.identity ? <CallUserPill identity={host.identity} name={host.name} /> : undefined}\n onLeave={onLeave}\n leaveLabel={variant === 'waiting' ? 'Leave' : 'Close'}\n />\n )\n}\n","/**\n * ConnectedCallDock — where the active call lives. Mount it once (lazily: it pulls LiveKit) while\n * the call session has an active call. Placements of ONE element (so the room never remounts and\n * hangs up):\n * docked → the call panel in the host's right-hand dock, like the document viewer: the host's\n * slot (`calls.useSlot`) reserves the space and this element follows that box. The\n * main pane shows the call's conversation (`calls.showConversation`) — its chat and\n * live transcript.\n * main → a webinar's audience has no conversation beside the call: its viewer takes the\n * host's main slot the same way, the stage large with the Q&A / chat column beside\n * it. Without a host slot the call floats at the right edge (or fills the page).\n * minimised → a small card in a corner (drag it to another), so the user keeps working; another\n * panel taking the dock also minimises the call.\n * Phases: prejoin (device check), knocking (waiting for a host), connected (<CallRoom>). A\n * webinar's audience skips the device check (it cannot publish), waits on \"Starting soon\" before\n * go-live and sees \"This webinar has ended\" after; when the stage changes under someone (moved to\n * the audience, stepped down) the room drops them and they join again at once, with no screen.\n */\n\nimport {\n useArbi,\n callSession,\n classifyMediaError,\n useCall,\n useCallSession,\n callLink,\n joinFromPreJoin,\n rejoinAsAudience,\n AUDIENCE_CHOICES,\n useArbiHost,\n type CallSlotMode,\n DEFAULT_JOIN_CHOICES,\n} from '@arbidocs/react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState, type ReactElement } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n CallHeader,\n CallStateMessage,\n MinimisedCall,\n PreJoin,\n nearestCorner,\n type PipCorner,\n} from '../ui'\nimport { calls } from '@arbidocs/sdk/browser'\nimport { ConnectedCallRoom } from './ConnectedCallRoom'\nimport { WebinarHolding } from './WebinarHolding'\nimport { useMirrorSelfView } from '../self-view'\n\nconst CORNER_KEY = 'arbi-call-pip-corner'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\n/** An element's viewport rectangle, kept current; null while there is none. */\nfunction useRectOf(el: Element | null): Rect | null {\n const [rect, setRect] = useState<Rect | null>(null)\n useLayoutEffect(() => {\n if (!el) {\n setRect(null)\n return\n }\n const measure = () => {\n const r = el.getBoundingClientRect()\n const next =\n r.width > 0 && r.height > 0\n ? { top: r.top, left: r.left, width: r.width, height: r.height }\n : null\n setRect((prev) =>\n prev &&\n next &&\n prev.top === next.top &&\n prev.left === next.left &&\n prev.width === next.width &&\n prev.height === next.height\n ? prev\n : next\n )\n }\n measure()\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null\n ro?.observe(el)\n window.addEventListener('resize', measure)\n // Banners, the sidebar and the dock's open animation move the box without resizing it.\n const id = setInterval(measure, 250)\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', measure)\n clearInterval(id)\n }\n }, [el])\n return rect\n}\n\nfunction readCorner(): PipCorner {\n try {\n const v = localStorage.getItem(CORNER_KEY)\n if (v === 'top-left' || v === 'top-right' || v === 'bottom-left' || v === 'bottom-right')\n return v\n } catch {\n // Storage blocked: the default corner.\n }\n return 'bottom-right'\n}\n\nconst CORNER_CLASS: Record<PipCorner, string> = {\n 'top-left': 'left-4 top-4',\n 'top-right': 'right-4 top-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n}\n\n/** Drag the minimised card; it settles in the nearest corner. */\nfunction usePipDrag(onCorner: (c: PipCorner) => void) {\n const [offset, setOffset] = useState<{ x: number; y: number } | null>(null)\n const start = useRef<{ x: number; y: number; moved: boolean } | null>(null)\n const onPointerDown = (e: React.PointerEvent<HTMLElement>) => {\n // Buttons keep their clicks; drag by the card's body.\n if (\n e.button !== 0 ||\n (e.target as HTMLElement).closest('button:not([data-testid=\"call-minimised-restore\"])')\n )\n return\n start.current = { x: e.clientX, y: e.clientY, moved: false }\n e.currentTarget.setPointerCapture?.(e.pointerId)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n if (!s) return\n const dx = e.clientX - s.x\n const dy = e.clientY - s.y\n if (!s.moved && Math.hypot(dx, dy) < 6) return\n s.moved = true\n setOffset({ x: dx, y: dy })\n }\n const onPointerUp = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n start.current = null\n if (!s?.moved) return\n const r = e.currentTarget.getBoundingClientRect()\n onCorner(\n nearestCorner(\n r.left + r.width / 2,\n r.top + r.height / 2,\n window.innerWidth,\n window.innerHeight\n )\n )\n setOffset(null)\n // The drag ended on the card: do not let it count as \"back to the call\".\n const swallow = (ev: Event) => {\n ev.stopPropagation()\n ev.preventDefault()\n }\n window.addEventListener('click', swallow, { capture: true, once: true })\n setTimeout(() => window.removeEventListener('click', swallow, { capture: true }), 0)\n }\n return { offset, handlers: { onPointerDown, onPointerMove, onPointerUp } }\n}\n\n/** A host slot that renders nothing: the call floats. */\nconst noSlot = (): HTMLElement | null => null\n\nexport function ConnectedCallDock(): ReactElement | null {\n const arbi = useArbi()\n const host = useArbiHost().calls\n const useSlot = host?.useSlot ?? noSlot\n const showConversation = host?.showConversation\n const active = useCallSession((s) => s.active)\n const { endActiveCall, updateActiveCall, setCallMinimized } = callSession\n const [joining, setJoining] = useState(false)\n const [corner, setCornerState] = useState<PipCorner>(readCorner)\n const setCorner = useCallback((c: PipCorner) => {\n setCornerState(c)\n try {\n localStorage.setItem(CORNER_KEY, c)\n } catch {\n // Not remembered: fine.\n }\n }, [])\n const minimized = !!active?.minimized\n const docked = !!active && !minimized\n const [mirrorSelf] = useMirrorSelfView()\n const drag = usePipDrag(setCorner)\n\n // A webinar: my role decides the join (the audience skips the device check) and the UI.\n const { data: call, isError: callUnreadable } = useCall(active?.callExtId)\n const callKnown = !!call || callUnreadable\n const webinarRole = call?.mode === 'webinar' ? (call.webinar?.my_role ?? 'attendee') : null\n const audience = webinarRole === 'attendee'\n const phase = active?.phase\n const callExtId = active?.callExtId\n const autoJoined = useRef<string | null>(null)\n useEffect(() => {\n if (phase !== 'prejoin' || !audience || !callExtId || autoJoined.current === callExtId) return\n autoJoined.current = callExtId\n setJoining(true)\n void joinFromPreJoin(arbi, AUDIENCE_CHOICES).finally(() => setJoining(false))\n }, [arbi, phase, audience, callExtId])\n\n /** A room I was in has gone: leave the call, unless it dropped me to join again (webinar stage). */\n const onRoomLeft = useCallback(\n (token: calls.CallTokenResponse) => {\n const current = callSession.getState().active\n if (!current || current.tokenResponse !== token) return // a room already replaced\n if (current.rejoining) void rejoinAsAudience(arbi, current.callExtId)\n else endActiveCall()\n },\n [arbi, endActiveCall]\n )\n /** The host ended the webinar: the audience and panelists see it ended; moderators just close. */\n const onRoomClosed =\n webinarRole && !calls.WEBINAR_MODERATORS.has(webinarRole) && callExtId\n ? () => updateActiveCall(callExtId, { phase: 'webinar-ended', tokenResponse: null })\n : undefined\n\n // The slot: the dock, or the main area for a webinar's audience (the viewer, or its waiting /\n // ended screens). The host's slot is claimed while the call shows; another panel taking it\n // minimises the call; closing the call frees it.\n const [roomViewer, setRoomViewer] = useState(false)\n const slotMode: CallSlotMode = (phase === 'connected' ? roomViewer : audience) ? 'main' : 'docked'\n const minimise = useCallback(() => setCallMinimized(true), [setCallMinimized])\n const slot = useSlot(slotMode, docked, minimise)\n const rect = useRectOf(docked ? slot : null)\n\n // Once connected, the main pane shows the call's conversation (its chat and transcript).\n const shownFor = useRef<string | null>(null)\n // A webinar's audience is not in its meeting chat: nothing to show.\n useEffect(() => {\n // The viewer took the main area (a team member off stage): show it again once back on stage.\n if (roomViewer) shownFor.current = null\n if (active?.phase !== 'connected' || shownFor.current === active.callExtId) return\n if (!callKnown || audience || roomViewer || !showConversation) return\n shownFor.current = active.callExtId\n void showConversation(active)\n }, [active, callKnown, audience, roomViewer, showConversation])\n\n if (!active) return null\n const title = active.title ?? 'Call'\n const connected = active.phase === 'connected' ? active.tokenResponse : null\n const link = callLink(active.callExtId, active.key, active.linkVersion)\n\n return (\n <>\n <section\n aria-label=\"Active call\"\n data-testid=\"call-dock\"\n data-placement={minimized ? 'minimised' : slotMode}\n className={cn(\n 'fixed flex flex-col overflow-hidden bg-background text-foreground',\n minimized\n ? cn(\n 'z-50 w-80 max-w-[calc(100vw-2rem)] cursor-grab touch-none rounded-md border border-border shadow-xl active:cursor-grabbing',\n CORNER_CLASS[corner]\n )\n : cn(\n 'z-40',\n !rect &&\n (slotMode === 'main'\n ? 'inset-0'\n : 'inset-y-0 right-0 w-[min(480px,100vw)] border-l border-border')\n )\n )}\n style={\n minimized\n ? drag.offset\n ? { transform: `translate(${drag.offset.x}px, ${drag.offset.y}px)` }\n : undefined\n : rect\n ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height }\n : undefined\n }\n {...(minimized ? drag.handlers : {})}\n >\n {active.phase !== 'connected' &&\n (minimized ? (\n <MinimisedCall\n title={title}\n onRestore={() => setCallMinimized(false)}\n onLeave={endActiveCall}\n />\n ) : (\n <div className=\"flex size-full min-h-0 flex-col\">\n <CallHeader title={title} onMinimise={() => setCallMinimized(true)} />\n <div className=\"flex min-h-0 flex-1 overflow-y-auto p-4\">\n {active.phase === 'prejoin' && (audience || !callKnown) ? (\n <CallStateMessage title=\"Joining…\" testId=\"call-joining\" />\n ) : active.phase === 'prejoin' ? (\n <PreJoin\n initialChoices={DEFAULT_JOIN_CHOICES}\n className=\"my-auto\"\n busy={joining}\n joinLabel={active.ringOnJoin ? 'Start call' : 'Join'}\n describeError={(err, kind) => classifyMediaError(err, kind)}\n mirror={mirrorSelf}\n onJoin={(choices) => {\n setJoining(true)\n void joinFromPreJoin(arbi, choices).finally(() => setJoining(false))\n }}\n onCancel={endActiveCall}\n />\n ) : active.phase === 'webinar-waiting' || active.phase === 'webinar-ended' ? (\n <WebinarHolding\n variant={active.phase === 'webinar-waiting' ? 'waiting' : 'ended'}\n callExtId={active.callExtId}\n linkVersion={active.linkVersion}\n title={active.title}\n host={\n call?.creator_ext_id\n ? { identity: call.creator_ext_id, name: call.creator_name }\n : null\n }\n onLeave={endActiveCall}\n />\n ) : (\n <CallStateMessage\n title=\"Waiting for the host to let you in…\"\n description=\"You will join as soon as someone in the call admits you.\"\n testId=\"call-knocking\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={endActiveCall}>\n Cancel\n </Button>\n }\n />\n )}\n </div>\n </div>\n ))}\n {connected && (\n <ConnectedCallRoom\n // A new token is a new room (a webinar rejoin): build it afresh.\n key={`${active.callExtId}:${connected.token}`}\n tokenResponse={connected}\n e2eeKey={active.key}\n choices={active.choices ?? undefined}\n isCreator={active.isCreator}\n lockedWorkspaceExtId={active.lockedWorkspaceExtId}\n title={title}\n startedAt={active.startedAt}\n link={link}\n minimized={minimized}\n onMinimizedChange={setCallMinimized}\n onLeave={() => onRoomLeft(connected)}\n webinarRole={webinarRole}\n onRoomClosed={onRoomClosed}\n onViewerChange={setRoomViewer}\n />\n )}\n </section>\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/calls/connected/WebinarHolding.tsx","../src/calls/connected/ConnectedCallDock.tsx"],"names":["useRef","useArbi","callSession","useEffect","joinFromPreJoin","AUDIENCE_CHOICES","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBO,IAAM,oBAAA,GAAuB,GAAA;AAGpC,SAAS,eAAA,CAAgB,SAAA,EAAmB,WAAA,EAAqB,OAAA,EAAwB;AACvF,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAA,CAAO,OAAA,GAAU,KAAA;AACjB,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,IAAI,OAAA,IAAW,OAAO,OAAA,EAAS;AAC/B,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAS,CAAE,MAAA;AACtC,MAAA,IAAI,MAAA,EAAQ,cAAc,SAAA,EAAW;AACrC,MAAA,KAAK,eAAA,CAAgB,IAAA,EAAM,MAAA,CAAO,OAAA,IAAW,gBAAgB,CAAA;AAAA,IAC/D,CAAA;AACA,IAAA,MAAM,IAAA,GAAO,MACX,IAAA,CAAK,KAAA,CAAM,OAAA,CACR,IAAI,SAAA,EAAW,WAAW,CAAA,CAC1B,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,IAAA,IAAQ,IAAA,EAAM,CAAA,CAC5B,KAAA,CAAM,CAAC,QAAiB,OAAA,CAAQ,IAAA,CAAK,0CAAA,EAA4C,GAAG,CAAC,CAAA;AAC1F,IAAA,MAAM,KAAK,WAAA,CAAY,MAAM,KAAK,IAAA,IAAQ,oBAAoB,CAAA;AAC9D,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,cAAA,EAAgB,CAAC,CAAA,KAAM;AAC7C,MAAA,IAAI,CAAA,CAAE,WAAA,KAAgB,SAAA,IAAa,CAAA,CAAE,MAAM,IAAA,EAAK;AAAA,IAClD,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,aAAA,CAAc,EAAE,CAAA;AAChB,MAAA,GAAA,EAAI;AAAA,IACN,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,SAAA,EAAW,WAAA,EAAa,OAAO,CAAC,CAAA;AAC5C;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAQiB;AACf,EAAA,eAAA,CAAgB,SAAA,EAAW,WAAA,EAAa,OAAA,KAAY,SAAS,CAAA;AAC7D,EAAA,uBACE,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA,EAAM,IAAA,EAAM,QAAA,mBAAW,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA,GAAK,MAAA;AAAA,MACpF,OAAA;AAAA,MACA,UAAA,EAAY,OAAA,KAAY,SAAA,GAAY,OAAA,GAAU;AAAA;AAAA,GAChD;AAEJ;AC9BA,IAAM,UAAA,GAAa,sBAAA;AAUnB,SAAS,UAAU,EAAA,EAAiC;AAClD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAsB,IAAI,CAAA;AAClD,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAM,CAAA,GAAI,GAAG,qBAAA,EAAsB;AACnC,MAAA,MAAM,IAAA,GACJ,EAAE,KAAA,GAAQ,CAAA,IAAK,EAAE,MAAA,GAAS,CAAA,GACtB,EAAE,GAAA,EAAK,CAAA,CAAE,KAAK,IAAA,EAAM,CAAA,CAAE,MAAM,KAAA,EAAO,CAAA,CAAE,OAAO,MAAA,EAAQ,CAAA,CAAE,QAAO,GAC7D,IAAA;AACN,MAAA,OAAA;AAAA,QAAQ,CAAC,SACP,IAAA,IACA,IAAA,IACA,KAAK,GAAA,KAAQ,IAAA,CAAK,OAClB,IAAA,CAAK,IAAA,KAAS,KAAK,IAAA,IACnB,IAAA,CAAK,UAAU,IAAA,CAAK,KAAA,IACpB,KAAK,MAAA,KAAW,IAAA,CAAK,SACjB,IAAA,GACA;AAAA,OACN;AAAA,IACF,CAAA;AACA,IAAA,OAAA,EAAQ;AACR,IAAA,MAAM,KAAK,OAAO,cAAA,KAAmB,cAAc,IAAI,cAAA,CAAe,OAAO,CAAA,GAAI,IAAA;AACjF,IAAA,EAAA,EAAI,QAAQ,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,OAAO,CAAA;AAEzC,IAAA,MAAM,EAAA,GAAK,WAAA,CAAY,OAAA,EAAS,GAAG,CAAA;AACnC,IAAA,OAAO,MAAM;AACX,MAAA,EAAA,EAAI,UAAA,EAAW;AACf,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,OAAO,CAAA;AAC5C,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA,IAClB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AACP,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,UAAA,GAAwB;AAC/B,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AACzC,IAAA,IAAI,MAAM,UAAA,IAAc,CAAA,KAAM,WAAA,IAAe,CAAA,KAAM,iBAAiB,CAAA,KAAM,cAAA;AACxE,MAAA,OAAO,CAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,cAAA;AACT;AAEA,IAAM,YAAA,GAA0C;AAAA,EAC9C,UAAA,EAAY,cAAA;AAAA,EACZ,WAAA,EAAa,eAAA;AAAA,EACb,aAAA,EAAe,iBAAA;AAAA,EACf,cAAA,EAAgB;AAClB,CAAA;AAGA,SAAS,WAAW,QAAA,EAAkC;AACpD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAA0C,IAAI,CAAA;AAC1E,EAAA,MAAM,KAAA,GAAQA,OAAwD,IAAI,CAAA;AAC1E,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAuC;AAE5D,IAAA,IACE,EAAE,MAAA,KAAW,CAAA,IACZ,CAAA,CAAE,MAAA,CAAuB,QAAQ,oDAAoD,CAAA;AAEtF,MAAA;AACF,IAAA,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM;AAC3D,IAAA,CAAA,CAAE,aAAA,CAAc,iBAAA,GAAoB,CAAA,CAAE,SAAS,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAuC;AAC5D,IAAA,MAAM,IAAI,KAAA,CAAM,OAAA;AAChB,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,CAAA;AACzB,IAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,CAAA;AACzB,IAAA,IAAI,CAAC,EAAE,KAAA,IAAS,IAAA,CAAK,MAAM,EAAA,EAAI,EAAE,IAAI,CAAA,EAAG;AACxC,IAAA,CAAA,CAAE,KAAA,GAAQ,IAAA;AACV,IAAA,SAAA,CAAU,EAAE,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA;AAAA,EAC5B,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAuC;AAC1D,IAAA,MAAM,IAAI,KAAA,CAAM,OAAA;AAChB,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAI,CAAC,GAAG,KAAA,EAAO;AACf,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,qBAAA,EAAsB;AAChD,IAAA,QAAA;AAAA,MACE,aAAA;AAAA,QACE,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,KAAA,GAAQ,CAAA;AAAA,QACnB,CAAA,CAAE,GAAA,GAAM,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,QACnB,MAAA,CAAO,UAAA;AAAA,QACP,MAAA,CAAO;AAAA;AACT,KACF;AACA,IAAA,SAAA,CAAU,IAAI,CAAA;AAEd,IAAA,MAAM,OAAA,GAAU,CAAC,EAAA,KAAc;AAC7B,MAAA,EAAA,CAAG,eAAA,EAAgB;AACnB,MAAA,EAAA,CAAG,cAAA,EAAe;AAAA,IACpB,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAA,EAAS,EAAE,SAAS,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACvE,IAAA,UAAA,CAAW,MAAM,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAAA,EACrF,CAAA;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,EAAE,aAAA,EAAe,aAAA,EAAe,aAAY,EAAE;AAC3E;AAGA,IAAM,SAAS,MAA0B,IAAA;AAElC,SAAS,iBAAA,GAAyC;AACvD,EAAA,MAAM,OAAOC,OAAAA,EAAQ;AACrB,EAAA,MAAM,IAAA,GAAO,aAAY,CAAE,KAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,IAAW,MAAA;AACjC,EAAA,MAAM,mBAAmB,IAAA,EAAM,gBAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAC7C,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAA,EAAkB,gBAAA,EAAiB,GAAIC,WAAAA;AAC9D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,MAAA,EAAQ,cAAc,CAAA,GAAI,SAAoB,UAAU,CAAA;AAC/D,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,CAAA,KAAiB;AAC9C,IAAA,cAAA,CAAe,CAAC,CAAA;AAChB,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,CAAC,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,MAAA,EAAQ,SAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,MAAA,IAAU,CAAC,SAAA;AAC5B,EAAA,MAAM,CAAC,UAAU,CAAA,GAAI,iBAAA,EAAkB;AACvC,EAAA,MAAM,IAAA,GAAO,WAAW,SAAS,CAAA;AAGjC,EAAA,MAAM,EAAE,MAAM,IAAA,EAAM,OAAA,EAAS,gBAAe,GAAI,OAAA,CAAQ,QAAQ,SAAS,CAAA;AACzE,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,IAAA,IAAQ,cAAA;AAC5B,EAAA,MAAM,cAAc,IAAA,EAAM,IAAA,KAAS,YAAa,IAAA,CAAK,OAAA,EAAS,WAAW,UAAA,GAAc,IAAA;AACvF,EAAA,MAAM,WAAW,WAAA,KAAgB,UAAA;AACjC,EAAA,MAAM,QAAQ,MAAA,EAAQ,KAAA;AACtB,EAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,EAAA,MAAM,UAAA,GAAaF,OAAsB,IAAI,CAAA;AAC7C,EAAAG,UAAU,MAAM;AACd,IAAA,IAAI,KAAA,KAAU,aAAa,CAAC,QAAA,IAAY,CAAC,SAAA,IAAa,UAAA,CAAW,YAAY,SAAA,EAAW;AACxF,IAAA,UAAA,CAAW,OAAA,GAAU,SAAA;AACrB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,KAAKC,eAAAA,CAAgB,MAAMC,gBAAgB,CAAA,CAAE,QAAQ,MAAM,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,EAC9E,GAAG,CAAC,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAS,CAAC,CAAA;AAGrC,EAAA,MAAM,UAAA,GAAa,WAAA;AAAA,IACjB,CAAC,KAAA,KAAmC;AAClC,MAAA,MAAM,OAAA,GAAUH,WAAAA,CAAY,QAAA,EAAS,CAAE,MAAA;AACvC,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,aAAA,KAAkB,KAAA,EAAO;AACjD,MAAA,IAAI,QAAQ,SAAA,EAAW,KAAK,gBAAA,CAAiB,IAAA,EAAM,QAAQ,SAAS,CAAA;AAAA,WAC/D,aAAA,EAAc;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,MAAM,aAAa;AAAA,GACtB;AAEA,EAAA,MAAM,eACJ,WAAA,IAAe,CAAC,MAAM,kBAAA,CAAmB,GAAA,CAAI,WAAW,CAAA,IAAK,SAAA,GACzD,MAAM,gBAAA,CAAiB,WAAW,EAAE,KAAA,EAAO,iBAAiB,aAAA,EAAe,IAAA,EAAM,CAAA,GACjF,MAAA;AAKN,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,QAAA,GAAA,CAA0B,KAAA,KAAU,WAAA,GAAc,UAAA,GAAa,YAAY,MAAA,GAAS,QAAA;AAC1F,EAAA,MAAM,QAAA,GAAW,YAAY,MAAM,gBAAA,CAAiB,IAAI,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAC7E,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,MAAA,GAAS,IAAA,GAAO,IAAI,CAAA;AAG3C,EAAA,MAAM,QAAA,GAAWF,OAAsB,IAAI,CAAA;AAE3C,EAAAG,UAAU,MAAM;AAEd,IAAA,IAAI,UAAA,WAAqB,OAAA,GAAU,IAAA;AACnC,IAAA,IAAI,QAAQ,KAAA,KAAU,WAAA,IAAe,QAAA,CAAS,OAAA,KAAY,OAAO,SAAA,EAAW;AAC5E,IAAA,IAAI,CAAC,SAAA,IAAa,QAAA,IAAY,UAAA,IAAc,CAAC,gBAAA,EAAkB;AAC/D,IAAA,QAAA,CAAS,UAAU,MAAA,CAAO,SAAA;AAC1B,IAAA,KAAK,iBAAiB,MAAM,CAAA;AAAA,EAC9B,GAAG,CAAC,MAAA,EAAQ,WAAW,QAAA,EAAU,UAAA,EAAY,gBAAgB,CAAC,CAAA;AAE9D,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,MAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,KAAU,WAAA,GAAc,OAAO,aAAA,GAAgB,IAAA;AACxE,EAAA,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,WAAW,MAAA,CAAO,GAAA,EAAK,OAAO,WAAW,CAAA;AAEtE,EAAA,uBACEG,IAAA,QAAA,EAAA,EACE,QAAA,kBAAA,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,aAAA;AAAA,MACX,aAAA,EAAY,WAAA;AAAA,MACZ,gBAAA,EAAgB,YAAY,WAAA,GAAc,QAAA;AAAA,MAC1C,SAAA,EAAW,EAAA;AAAA,QACT,mEAAA;AAAA,QACA,SAAA,GACI,EAAA;AAAA,UACE,4HAAA;AAAA,UACA,aAAa,MAAM;AAAA,SACrB,GACA,EAAA;AAAA,UACE,MAAA;AAAA,UACA,CAAC,IAAA,KACE,QAAA,KAAa,MAAA,GACV,SAAA,GACA,+DAAA;AAAA;AACR,OACN;AAAA,MACA,KAAA,EACE,SAAA,GACI,IAAA,CAAK,MAAA,GACH,EAAE,SAAA,EAAW,CAAA,UAAA,EAAa,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA,GAAA,CAAA,EAAM,GACjE,MAAA,GACF,IAAA,GACE,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,QAAO,GACzE,MAAA;AAAA,MAEP,GAAI,SAAA,GAAY,IAAA,CAAK,QAAA,GAAW,EAAC;AAAA,MAEjC,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,KAAA,KAAU,WAAA,KACf,SAAA,mBACCA,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,SAAA,EAAW,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,YACvC,OAAA,EAAS;AAAA;AAAA,SACX,mBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAC,UAAA,EAAA,EAAW,KAAA,EAAc,YAAY,MAAM,gBAAA,CAAiB,IAAI,CAAA,EAAG,CAAA;AAAA,0BACpEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CACZ,QAAA,EAAA,MAAA,CAAO,KAAA,KAAU,SAAA,KAAc,QAAA,IAAY,CAAC,SAAA,CAAA,mBAC3CA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAM,eAAA,EAAW,MAAA,EAAO,gBAAe,CAAA,GACvD,MAAA,CAAO,KAAA,KAAU,SAAA,mBACnBA,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,cAAA,EAAgB,oBAAA;AAAA,cAChB,SAAA,EAAU,SAAA;AAAA,cACV,IAAA,EAAM,OAAA;AAAA,cACN,SAAA,EAAW,MAAA,CAAO,UAAA,GAAa,YAAA,GAAe,MAAA;AAAA,cAC9C,eAAe,CAAC,GAAA,EAAK,IAAA,KAAS,kBAAA,CAAmB,KAAK,IAAI,CAAA;AAAA,cAC1D,MAAA,EAAQ,UAAA;AAAA,cACR,MAAA,EAAQ,CAAC,OAAA,KAAY;AACnB,gBAAA,UAAA,CAAW,IAAI,CAAA;AACf,gBAAA,KAAKF,eAAAA,CAAgB,MAAM,OAAO,CAAA,CAAE,QAAQ,MAAM,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,cACrE,CAAA;AAAA,cACA,QAAA,EAAU;AAAA;AAAA,cAEV,MAAA,CAAO,KAAA,KAAU,qBAAqB,MAAA,CAAO,KAAA,KAAU,kCACzDE,GAAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAA,CAAO,KAAA,KAAU,iBAAA,GAAoB,SAAA,GAAY,OAAA;AAAA,cAC1D,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,aAAa,MAAA,CAAO,WAAA;AAAA,cACpB,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,IAAA,EACE,IAAA,EAAM,cAAA,GACF,EAAE,QAAA,EAAU,KAAK,cAAA,EAAgB,IAAA,EAAM,IAAA,CAAK,YAAA,EAAa,GACzD,IAAA;AAAA,cAEN,OAAA,EAAS;AAAA;AAAA,8BAGXA,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,0CAAA;AAAA,cACN,WAAA,EAAY,0DAAA;AAAA,cACZ,MAAA,EAAO,eAAA;AAAA,cACP,MAAA,kBACEA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,aAAA,EAAe,QAAA,EAAA,QAAA,EAEhE;AAAA;AAAA,WAEJ,EAEJ;AAAA,SAAA,EACF,CAAA,CAAA;AAAA,QAEH,6BACCA,GAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YAGC,aAAA,EAAe,SAAA;AAAA,YACf,SAAS,MAAA,CAAO,GAAA;AAAA,YAChB,OAAA,EAAS,OAAO,OAAA,IAAW,MAAA;AAAA,YAC3B,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,sBAAsB,MAAA,CAAO,oBAAA;AAAA,YAC7B,KAAA;AAAA,YACA,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,IAAA;AAAA,YACA,SAAA;AAAA,YACA,iBAAA,EAAmB,gBAAA;AAAA,YACnB,OAAA,EAAS,MAAM,UAAA,CAAW,SAAS,CAAA;AAAA,YACnC,WAAA;AAAA,YACA,YAAA;AAAA,YACA,cAAA,EAAgB;AAAA,WAAA;AAAA,UAdX,CAAA,EAAG,MAAA,CAAO,SAAS,CAAA,CAAA,EAAI,UAAU,KAAK,CAAA;AAAA;AAe7C;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ","file":"ConnectedCallDock-Y64FTKFF.js","sourcesContent":["/**\n * The audience's holding screens in the call dock: \"Starting soon\" before the host goes live —\n * reading the webinar every few seconds and listening to WS `call.webinar`, then joining by itself\n * — and \"This webinar has ended\" once the host ended it.\n */\n\nimport {\n useArbi,\n onCallEvent,\n callSession,\n joinFromPreJoin,\n AUDIENCE_CHOICES,\n} from '@arbidocs/react'\nimport { useEffect, useRef, type ReactElement } from 'react'\nimport { WebinarWaiting } from '../ui'\nimport { CallUserPill } from './CallUserPill'\n\n/** How often \"Starting soon\" reads the webinar (a link holder gets no WS event). */\nexport const WEBINAR_WAIT_POLL_MS = 5_000\n\n/** Wait for go-live, then join once. */\nfunction useJoinWhenLive(callExtId: string, linkVersion: number, enabled: boolean): void {\n const arbi = useArbi()\n const joined = useRef(false)\n useEffect(() => {\n if (!enabled) return\n joined.current = false\n let stopped = false\n const join = () => {\n if (stopped || joined.current) return\n joined.current = true\n const active = callSession.getState().active\n if (active?.callExtId !== callExtId) return\n void joinFromPreJoin(arbi, active.choices ?? AUDIENCE_CHOICES)\n }\n const poll = () =>\n arbi.calls.webinar\n .get(callExtId, linkVersion)\n .then((s) => s.live && join())\n .catch((err: unknown) => console.warn('[calls] could not read the webinar state', err))\n const id = setInterval(() => void poll(), WEBINAR_WAIT_POLL_MS)\n const off = onCallEvent('call.webinar', (m) => {\n if (m.call_ext_id === callExtId && m.live) join()\n })\n return () => {\n stopped = true\n clearInterval(id)\n off()\n }\n }, [arbi, callExtId, linkVersion, enabled])\n}\n\nexport function WebinarHolding({\n variant,\n callExtId,\n linkVersion,\n title,\n host,\n onLeave,\n}: {\n variant: 'waiting' | 'ended'\n callExtId: string\n linkVersion: number\n title?: string | null\n /** The host (the call's creator), named as a pill. */\n host?: { identity: string; name?: string | null } | null\n onLeave(): void\n}): ReactElement {\n useJoinWhenLive(callExtId, linkVersion, variant === 'waiting')\n return (\n <WebinarWaiting\n variant={variant}\n title={title}\n host={host?.identity ? <CallUserPill identity={host.identity} name={host.name} /> : undefined}\n onLeave={onLeave}\n leaveLabel={variant === 'waiting' ? 'Leave' : 'Close'}\n />\n )\n}\n","/**\n * ConnectedCallDock — where the active call lives. Mount it once (lazily: it pulls LiveKit) while\n * the call session has an active call. Placements of ONE element (so the room never remounts and\n * hangs up):\n * docked → the call panel in the host's right-hand dock, like the document viewer: the host's\n * slot (`calls.useSlot`) reserves the space and this element follows that box. The\n * main pane shows the call's conversation (`calls.showConversation`) — its chat and\n * live transcript.\n * main → a webinar's audience has no conversation beside the call: its viewer takes the\n * host's main slot the same way, the stage large with the Q&A / chat column beside\n * it. Without a host slot the call floats at the right edge (or fills the page).\n * minimised → a small card in a corner (drag it to another), so the user keeps working; another\n * panel taking the dock also minimises the call.\n * Phases: prejoin (device check), knocking (waiting for a host), connected (<CallRoom>). A\n * webinar's audience skips the device check (it cannot publish), waits on \"Starting soon\" before\n * go-live and sees \"This webinar has ended\" after; when the stage changes under someone (moved to\n * the audience, stepped down) the room drops them and they join again at once, with no screen.\n */\n\nimport {\n useArbi,\n callSession,\n classifyMediaError,\n useCall,\n useCallSession,\n callLink,\n joinFromPreJoin,\n rejoinAsAudience,\n AUDIENCE_CHOICES,\n useArbiHost,\n type CallSlotMode,\n DEFAULT_JOIN_CHOICES,\n} from '@arbidocs/react'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState, type ReactElement } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport {\n CallHeader,\n CallStateMessage,\n MinimisedCall,\n PreJoin,\n nearestCorner,\n type PipCorner,\n} from '../ui'\nimport { calls } from '@arbidocs/sdk/browser'\nimport { ConnectedCallRoom } from './ConnectedCallRoom'\nimport { WebinarHolding } from './WebinarHolding'\nimport { useMirrorSelfView } from '../self-view'\n\nconst CORNER_KEY = 'arbi-call-pip-corner'\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\n/** An element's viewport rectangle, kept current; null while there is none. */\nfunction useRectOf(el: Element | null): Rect | null {\n const [rect, setRect] = useState<Rect | null>(null)\n useLayoutEffect(() => {\n if (!el) {\n setRect(null)\n return\n }\n const measure = () => {\n const r = el.getBoundingClientRect()\n const next =\n r.width > 0 && r.height > 0\n ? { top: r.top, left: r.left, width: r.width, height: r.height }\n : null\n setRect((prev) =>\n prev &&\n next &&\n prev.top === next.top &&\n prev.left === next.left &&\n prev.width === next.width &&\n prev.height === next.height\n ? prev\n : next\n )\n }\n measure()\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null\n ro?.observe(el)\n window.addEventListener('resize', measure)\n // Banners, the sidebar and the dock's open animation move the box without resizing it.\n const id = setInterval(measure, 250)\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', measure)\n clearInterval(id)\n }\n }, [el])\n return rect\n}\n\nfunction readCorner(): PipCorner {\n try {\n const v = localStorage.getItem(CORNER_KEY)\n if (v === 'top-left' || v === 'top-right' || v === 'bottom-left' || v === 'bottom-right')\n return v\n } catch {\n // Storage blocked: the default corner.\n }\n return 'bottom-right'\n}\n\nconst CORNER_CLASS: Record<PipCorner, string> = {\n 'top-left': 'left-4 top-4',\n 'top-right': 'right-4 top-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n}\n\n/** Drag the minimised card; it settles in the nearest corner. */\nfunction usePipDrag(onCorner: (c: PipCorner) => void) {\n const [offset, setOffset] = useState<{ x: number; y: number } | null>(null)\n const start = useRef<{ x: number; y: number; moved: boolean } | null>(null)\n const onPointerDown = (e: React.PointerEvent<HTMLElement>) => {\n // Buttons keep their clicks; drag by the card's body.\n if (\n e.button !== 0 ||\n (e.target as HTMLElement).closest('button:not([data-testid=\"call-minimised-restore\"])')\n )\n return\n start.current = { x: e.clientX, y: e.clientY, moved: false }\n e.currentTarget.setPointerCapture?.(e.pointerId)\n }\n const onPointerMove = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n if (!s) return\n const dx = e.clientX - s.x\n const dy = e.clientY - s.y\n if (!s.moved && Math.hypot(dx, dy) < 6) return\n s.moved = true\n setOffset({ x: dx, y: dy })\n }\n const onPointerUp = (e: React.PointerEvent<HTMLElement>) => {\n const s = start.current\n start.current = null\n if (!s?.moved) return\n const r = e.currentTarget.getBoundingClientRect()\n onCorner(\n nearestCorner(\n r.left + r.width / 2,\n r.top + r.height / 2,\n window.innerWidth,\n window.innerHeight\n )\n )\n setOffset(null)\n // The drag ended on the card: do not let it count as \"back to the call\".\n const swallow = (ev: Event) => {\n ev.stopPropagation()\n ev.preventDefault()\n }\n window.addEventListener('click', swallow, { capture: true, once: true })\n setTimeout(() => window.removeEventListener('click', swallow, { capture: true }), 0)\n }\n return { offset, handlers: { onPointerDown, onPointerMove, onPointerUp } }\n}\n\n/** A host slot that renders nothing: the call floats. */\nconst noSlot = (): HTMLElement | null => null\n\nexport function ConnectedCallDock(): ReactElement | null {\n const arbi = useArbi()\n const host = useArbiHost().calls\n const useSlot = host?.useSlot ?? noSlot\n const showConversation = host?.showConversation\n const active = useCallSession((s) => s.active)\n const { endActiveCall, updateActiveCall, setCallMinimized } = callSession\n const [joining, setJoining] = useState(false)\n const [corner, setCornerState] = useState<PipCorner>(readCorner)\n const setCorner = useCallback((c: PipCorner) => {\n setCornerState(c)\n try {\n localStorage.setItem(CORNER_KEY, c)\n } catch {\n // Not remembered: fine.\n }\n }, [])\n const minimized = !!active?.minimized\n const docked = !!active && !minimized\n const [mirrorSelf] = useMirrorSelfView()\n const drag = usePipDrag(setCorner)\n\n // A webinar: my role decides the join (the audience skips the device check) and the UI.\n const { data: call, isError: callUnreadable } = useCall(active?.callExtId)\n const callKnown = !!call || callUnreadable\n const webinarRole = call?.mode === 'webinar' ? (call.webinar?.my_role ?? 'attendee') : null\n const audience = webinarRole === 'attendee'\n const phase = active?.phase\n const callExtId = active?.callExtId\n const autoJoined = useRef<string | null>(null)\n useEffect(() => {\n if (phase !== 'prejoin' || !audience || !callExtId || autoJoined.current === callExtId) return\n autoJoined.current = callExtId\n setJoining(true)\n void joinFromPreJoin(arbi, AUDIENCE_CHOICES).finally(() => setJoining(false))\n }, [arbi, phase, audience, callExtId])\n\n /** A room I was in has gone: leave the call, unless it dropped me to join again (webinar stage). */\n const onRoomLeft = useCallback(\n (token: calls.CallTokenResponse) => {\n const current = callSession.getState().active\n if (!current || current.tokenResponse !== token) return // a room already replaced\n if (current.rejoining) void rejoinAsAudience(arbi, current.callExtId)\n else endActiveCall()\n },\n [arbi, endActiveCall]\n )\n /** The host ended the webinar: the audience and panelists see it ended; moderators just close. */\n const onRoomClosed =\n webinarRole && !calls.WEBINAR_MODERATORS.has(webinarRole) && callExtId\n ? () => updateActiveCall(callExtId, { phase: 'webinar-ended', tokenResponse: null })\n : undefined\n\n // The slot: the dock, or the main area for a webinar's audience (the viewer, or its waiting /\n // ended screens). The host's slot is claimed while the call shows; another panel taking it\n // minimises the call; closing the call frees it.\n const [roomViewer, setRoomViewer] = useState(false)\n const slotMode: CallSlotMode = (phase === 'connected' ? roomViewer : audience) ? 'main' : 'docked'\n const minimise = useCallback(() => setCallMinimized(true), [setCallMinimized])\n const slot = useSlot(slotMode, docked, minimise)\n const rect = useRectOf(docked ? slot : null)\n\n // Once connected, the main pane shows the call's conversation (its chat and transcript).\n const shownFor = useRef<string | null>(null)\n // A webinar's audience is not in its meeting chat: nothing to show.\n useEffect(() => {\n // The viewer took the main area (a team member off stage): show it again once back on stage.\n if (roomViewer) shownFor.current = null\n if (active?.phase !== 'connected' || shownFor.current === active.callExtId) return\n if (!callKnown || audience || roomViewer || !showConversation) return\n shownFor.current = active.callExtId\n void showConversation(active)\n }, [active, callKnown, audience, roomViewer, showConversation])\n\n if (!active) return null\n const title = active.title ?? 'Call'\n const connected = active.phase === 'connected' ? active.tokenResponse : null\n const link = callLink(active.callExtId, active.key, active.linkVersion)\n\n return (\n <>\n <section\n aria-label=\"Active call\"\n data-testid=\"call-dock\"\n data-placement={minimized ? 'minimised' : slotMode}\n className={cn(\n 'fixed flex flex-col overflow-hidden bg-background text-foreground',\n minimized\n ? cn(\n 'z-50 w-80 max-w-[calc(100vw-2rem)] cursor-grab touch-none rounded-md border border-border shadow-xl active:cursor-grabbing',\n CORNER_CLASS[corner]\n )\n : cn(\n 'z-40',\n !rect &&\n (slotMode === 'main'\n ? 'inset-0'\n : 'inset-y-0 right-0 w-[min(480px,100vw)] border-l border-border')\n )\n )}\n style={\n minimized\n ? drag.offset\n ? { transform: `translate(${drag.offset.x}px, ${drag.offset.y}px)` }\n : undefined\n : rect\n ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height }\n : undefined\n }\n {...(minimized ? drag.handlers : {})}\n >\n {active.phase !== 'connected' &&\n (minimized ? (\n <MinimisedCall\n title={title}\n onRestore={() => setCallMinimized(false)}\n onLeave={endActiveCall}\n />\n ) : (\n <div className=\"flex size-full min-h-0 flex-col\">\n <CallHeader title={title} onMinimise={() => setCallMinimized(true)} />\n <div className=\"flex min-h-0 flex-1 overflow-y-auto p-4\">\n {active.phase === 'prejoin' && (audience || !callKnown) ? (\n <CallStateMessage title=\"Joining…\" testId=\"call-joining\" />\n ) : active.phase === 'prejoin' ? (\n <PreJoin\n initialChoices={DEFAULT_JOIN_CHOICES}\n className=\"my-auto\"\n busy={joining}\n joinLabel={active.ringOnJoin ? 'Start call' : 'Join'}\n describeError={(err, kind) => classifyMediaError(err, kind)}\n mirror={mirrorSelf}\n onJoin={(choices) => {\n setJoining(true)\n void joinFromPreJoin(arbi, choices).finally(() => setJoining(false))\n }}\n onCancel={endActiveCall}\n />\n ) : active.phase === 'webinar-waiting' || active.phase === 'webinar-ended' ? (\n <WebinarHolding\n variant={active.phase === 'webinar-waiting' ? 'waiting' : 'ended'}\n callExtId={active.callExtId}\n linkVersion={active.linkVersion}\n title={active.title}\n host={\n call?.creator_ext_id\n ? { identity: call.creator_ext_id, name: call.creator_name }\n : null\n }\n onLeave={endActiveCall}\n />\n ) : (\n <CallStateMessage\n title=\"Waiting for the host to let you in…\"\n description=\"You will join as soon as someone in the call admits you.\"\n testId=\"call-knocking\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={endActiveCall}>\n Cancel\n </Button>\n }\n />\n )}\n </div>\n </div>\n ))}\n {connected && (\n <ConnectedCallRoom\n // A new token is a new room (a webinar rejoin): build it afresh.\n key={`${active.callExtId}:${connected.token}`}\n tokenResponse={connected}\n e2eeKey={active.key}\n choices={active.choices ?? undefined}\n isCreator={active.isCreator}\n lockedWorkspaceExtId={active.lockedWorkspaceExtId}\n title={title}\n startedAt={active.startedAt}\n link={link}\n minimized={minimized}\n onMinimizedChange={setCallMinimized}\n onLeave={() => onRoomLeft(connected)}\n webinarRole={webinarRole}\n onRoomClosed={onRoomClosed}\n onViewerChange={setRoomViewer}\n />\n )}\n </section>\n </>\n )\n}\n"]}
@@ -1,5 +1,13 @@
1
1
  "use client";
2
- export { ConnectedCallRoom } from './chunk-RMJNCYPD.js';
2
+ export { ConnectedCallRoom } from './chunk-KJLHFS7T.js';
3
+ import './chunk-Y2FPWPDB.js';
4
+ import './chunk-CHQMVIHR.js';
5
+ import './chunk-46IG4KY7.js';
6
+ import './chunk-JVJOIZNN.js';
7
+ import './chunk-3UIJLUXN.js';
8
+ import './chunk-BH4MK2J5.js';
9
+ import './chunk-USTSEENR.js';
10
+ import './chunk-PFF5IZGS.js';
3
11
  import './chunk-YCINS3YV.js';
4
12
  import './chunk-KFVOZOMX.js';
5
13
  import './chunk-E4MNUJEU.js';
@@ -22,14 +30,6 @@ import './chunk-YQPI7SRN.js';
22
30
  import './chunk-XDDORJPA.js';
23
31
  import './chunk-X5YMI6A7.js';
24
32
  import './chunk-SLSBJRWW.js';
25
- import './chunk-Y2FPWPDB.js';
26
- import './chunk-CHQMVIHR.js';
27
- import './chunk-46IG4KY7.js';
28
- import './chunk-JVJOIZNN.js';
29
- import './chunk-3UIJLUXN.js';
30
- import './chunk-BH4MK2J5.js';
31
- import './chunk-USTSEENR.js';
32
- import './chunk-PFF5IZGS.js';
33
33
  import './chunk-H773F7OR.js';
34
34
  import './chunk-NPLYHR2E.js';
35
35
  import './chunk-3KA6GZUW.js';
@@ -38,5 +38,5 @@ import './chunk-TX2ZICS7.js';
38
38
  import './chunk-SV65E4QW.js';
39
39
  import './chunk-UP3GCNPM.js';
40
40
  import './chunk-VUNV25KB.js';
41
- //# sourceMappingURL=ConnectedCallRoom-EDHNAJHA.js.map
42
- //# sourceMappingURL=ConnectedCallRoom-EDHNAJHA.js.map
41
+ //# sourceMappingURL=ConnectedCallRoom-LEBIJGFT.js.map
42
+ //# sourceMappingURL=ConnectedCallRoom-LEBIJGFT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedCallRoom-EDHNAJHA.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedCallRoom-LEBIJGFT.js"}
@@ -1,7 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk7XVQATK2_cjs = require('./chunk-7XVQATK2.cjs');
4
+ var chunkOXHAUVK2_cjs = require('./chunk-OXHAUVK2.cjs');
5
+ require('./chunk-7OPOPYV6.cjs');
6
+ require('./chunk-OAIOOVFN.cjs');
7
+ require('./chunk-5HEMXXHR.cjs');
8
+ require('./chunk-WV65MJ43.cjs');
9
+ require('./chunk-TMX7YFVM.cjs');
10
+ require('./chunk-LUO46ELJ.cjs');
11
+ require('./chunk-SJSGSHIT.cjs');
12
+ require('./chunk-ZT5MIFLC.cjs');
5
13
  require('./chunk-QHOZDZF3.cjs');
6
14
  require('./chunk-32YCMXT2.cjs');
7
15
  require('./chunk-RT3M5WOS.cjs');
@@ -24,14 +32,6 @@ require('./chunk-5GQOIQCB.cjs');
24
32
  require('./chunk-UDSHVNU3.cjs');
25
33
  require('./chunk-IPSHAMO2.cjs');
26
34
  require('./chunk-FX3K6LNZ.cjs');
27
- require('./chunk-7OPOPYV6.cjs');
28
- require('./chunk-OAIOOVFN.cjs');
29
- require('./chunk-5HEMXXHR.cjs');
30
- require('./chunk-WV65MJ43.cjs');
31
- require('./chunk-TMX7YFVM.cjs');
32
- require('./chunk-LUO46ELJ.cjs');
33
- require('./chunk-SJSGSHIT.cjs');
34
- require('./chunk-ZT5MIFLC.cjs');
35
35
  require('./chunk-ZBP4ZSAJ.cjs');
36
36
  require('./chunk-PPCATBOY.cjs');
37
37
  require('./chunk-UIXY4HKM.cjs');
@@ -45,7 +45,7 @@ require('./chunk-DES3K4SD.cjs');
45
45
 
46
46
  Object.defineProperty(exports, "ConnectedCallRoom", {
47
47
  enumerable: true,
48
- get: function () { return chunk7XVQATK2_cjs.ConnectedCallRoom; }
48
+ get: function () { return chunkOXHAUVK2_cjs.ConnectedCallRoom; }
49
49
  });
50
- //# sourceMappingURL=ConnectedCallRoom-VDQD25QW.cjs.map
51
- //# sourceMappingURL=ConnectedCallRoom-VDQD25QW.cjs.map
50
+ //# sourceMappingURL=ConnectedCallRoom-UXIJJKNG.cjs.map
51
+ //# sourceMappingURL=ConnectedCallRoom-UXIJJKNG.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedCallRoom-VDQD25QW.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedCallRoom-UXIJJKNG.cjs"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- export { ConnectedNativeDocxComparison } from './chunk-QJVDQAYQ.js';
2
+ export { ConnectedNativeDocxComparison } from './chunk-Z4IPTLRS.js';
3
3
  import './chunk-PGSBXD5U.js';
4
- import './chunk-VSZPY4LK.js';
4
+ import './chunk-42IVGYNL.js';
5
5
  import './chunk-MTSKK3BN.js';
6
6
  import './chunk-Y7UIFRWC.js';
7
7
  import './chunk-K2U5BCQ2.js';
@@ -9,7 +9,7 @@ import './chunk-TROXWCQQ.js';
9
9
  import './chunk-IA5BYEO7.js';
10
10
  import './chunk-IYUKJESY.js';
11
11
  import './chunk-AF6RDAJF.js';
12
- import './chunk-DCNBNLWC.js';
12
+ import './chunk-RZG4ALKZ.js';
13
13
  import './chunk-4QUUU7GH.js';
14
14
  import './chunk-DL6KPLNR.js';
15
15
  import './chunk-RLWIUUQ5.js';
@@ -19,17 +19,17 @@ import './chunk-P4CH2ATT.js';
19
19
  import './chunk-KPLWLHWH.js';
20
20
  import './chunk-7F5Z4K5W.js';
21
21
  import './chunk-WNDIVNPT.js';
22
+ import './chunk-CCUXCN4M.js';
23
+ import './chunk-JVJOIZNN.js';
24
+ import './chunk-BH4MK2J5.js';
25
+ import './chunk-USTSEENR.js';
26
+ import './chunk-P6GHJSLR.js';
22
27
  import './chunk-7SQVZML4.js';
23
28
  import './chunk-MMSBCSGH.js';
24
29
  import './chunk-YQPI7SRN.js';
25
30
  import './chunk-XDDORJPA.js';
26
31
  import './chunk-X5YMI6A7.js';
27
32
  import './chunk-SLSBJRWW.js';
28
- import './chunk-CCUXCN4M.js';
29
- import './chunk-JVJOIZNN.js';
30
- import './chunk-BH4MK2J5.js';
31
- import './chunk-USTSEENR.js';
32
- import './chunk-P6GHJSLR.js';
33
33
  import './chunk-NPLYHR2E.js';
34
34
  import './chunk-3KA6GZUW.js';
35
35
  import './chunk-WTTPZMZ7.js';
@@ -37,5 +37,5 @@ import './chunk-TX2ZICS7.js';
37
37
  import './chunk-SV65E4QW.js';
38
38
  import './chunk-UP3GCNPM.js';
39
39
  import './chunk-VUNV25KB.js';
40
- //# sourceMappingURL=ConnectedNativeDocxComparison-IS27M6FV.js.map
41
- //# sourceMappingURL=ConnectedNativeDocxComparison-IS27M6FV.js.map
40
+ //# sourceMappingURL=ConnectedNativeDocxComparison-6KL5XI3L.js.map
41
+ //# sourceMappingURL=ConnectedNativeDocxComparison-6KL5XI3L.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-IS27M6FV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-6KL5XI3L.js"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkTANZTMPL_cjs = require('./chunk-TANZTMPL.cjs');
4
+ var chunkV2CNHRLZ_cjs = require('./chunk-V2CNHRLZ.cjs');
5
5
  require('./chunk-FWBU4MKG.cjs');
6
- require('./chunk-ZJ3NII4U.cjs');
6
+ require('./chunk-ECCV4YOL.cjs');
7
7
  require('./chunk-464YPRAE.cjs');
8
8
  require('./chunk-LCPU44GW.cjs');
9
9
  require('./chunk-SIYNZR5B.cjs');
@@ -11,7 +11,7 @@ require('./chunk-DDWLMYRO.cjs');
11
11
  require('./chunk-ZESMRGDV.cjs');
12
12
  require('./chunk-JIOHDVWH.cjs');
13
13
  require('./chunk-RC25WMVB.cjs');
14
- require('./chunk-ZBQTFA5X.cjs');
14
+ require('./chunk-SYWJNSPS.cjs');
15
15
  require('./chunk-3YEXZX4H.cjs');
16
16
  require('./chunk-ZHUQYIV3.cjs');
17
17
  require('./chunk-AHDJXIUB.cjs');
@@ -21,17 +21,17 @@ require('./chunk-6UZC4XVV.cjs');
21
21
  require('./chunk-ZK3D3RWK.cjs');
22
22
  require('./chunk-LKK52DEY.cjs');
23
23
  require('./chunk-VZOOGA47.cjs');
24
+ require('./chunk-BFKTZUFT.cjs');
25
+ require('./chunk-WV65MJ43.cjs');
26
+ require('./chunk-LUO46ELJ.cjs');
27
+ require('./chunk-SJSGSHIT.cjs');
28
+ require('./chunk-ZW6FPIFC.cjs');
24
29
  require('./chunk-75BNMCUX.cjs');
25
30
  require('./chunk-MGVECEQQ.cjs');
26
31
  require('./chunk-5GQOIQCB.cjs');
27
32
  require('./chunk-UDSHVNU3.cjs');
28
33
  require('./chunk-IPSHAMO2.cjs');
29
34
  require('./chunk-FX3K6LNZ.cjs');
30
- require('./chunk-BFKTZUFT.cjs');
31
- require('./chunk-WV65MJ43.cjs');
32
- require('./chunk-LUO46ELJ.cjs');
33
- require('./chunk-SJSGSHIT.cjs');
34
- require('./chunk-ZW6FPIFC.cjs');
35
35
  require('./chunk-PPCATBOY.cjs');
36
36
  require('./chunk-UIXY4HKM.cjs');
37
37
  require('./chunk-JDFBEGQO.cjs');
@@ -44,7 +44,7 @@ require('./chunk-DES3K4SD.cjs');
44
44
 
45
45
  Object.defineProperty(exports, "ConnectedNativeDocxComparison", {
46
46
  enumerable: true,
47
- get: function () { return chunkTANZTMPL_cjs.ConnectedNativeDocxComparison; }
47
+ get: function () { return chunkV2CNHRLZ_cjs.ConnectedNativeDocxComparison; }
48
48
  });
49
- //# sourceMappingURL=ConnectedNativeDocxComparison-ADQURGHU.cjs.map
50
- //# sourceMappingURL=ConnectedNativeDocxComparison-ADQURGHU.cjs.map
49
+ //# sourceMappingURL=ConnectedNativeDocxComparison-P346QOX5.cjs.map
50
+ //# sourceMappingURL=ConnectedNativeDocxComparison-P346QOX5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-ADQURGHU.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedNativeDocxComparison-P346QOX5.cjs"}