@marimo-team/frontend 0.25.3-dev10 → 0.25.3-dev101

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 (461) hide show
  1. package/dist/assets/CellStatus-fK4n2NPc.js +1 -0
  2. package/dist/assets/{ConnectedDataExplorerComponent-t8fH_TNc.js → ConnectedDataExplorerComponent-Dft8R6l5.js} +1 -1
  3. package/dist/assets/{ErrorBoundary-B4n9EnHB.js → ErrorBoundary-CAEGdoFW.js} +2 -2
  4. package/dist/assets/JsonOutput-CyAKmZDD.js +11 -0
  5. package/dist/assets/{LazyAnyLanguageCodeMirror-CKcCbG2G.js → LazyAnyLanguageCodeMirror-BPYE76jR.js} +2 -2
  6. package/dist/assets/MarimoErrorOutput-CgZvP0p0.js +10 -0
  7. package/dist/assets/{RenderHTML-9bMgbYmo.js → RenderHTML-DQvxDDNS.js} +1 -1
  8. package/dist/assets/RunButton-BBDnDL6G.js +1 -0
  9. package/dist/assets/__vite-browser-external-8vDMR0Kk.js +1 -0
  10. package/dist/assets/__vite-browser-external-mKcnhO20.js +1 -0
  11. package/dist/assets/{add-cell-with-ai-f_MnLCwI.js → add-cell-with-ai-Clg5FELx.js} +7 -7
  12. package/dist/assets/{add-connection-dialog-CoE_PhuD.js → add-connection-dialog-BqdWmD-7.js} +2 -2
  13. package/dist/assets/{agent-panel-BWZz24jK.js → agent-panel-5RxG5Y82.js} +3 -3
  14. package/dist/assets/ai-model-dropdown-Bvl1ktQq.js +13 -0
  15. package/dist/assets/{alert-dialog-BaPGzeOK.js → alert-dialog-C-sWmKva.js} +1 -1
  16. package/dist/assets/any-language-editor-DUMe1UCk.js +1 -0
  17. package/dist/assets/{app-config-button-BhU0ulYs.js → app-config-button-0QTeQ2Mv.js} +1 -1
  18. package/dist/assets/arrays-0R2reF2y.js +1 -0
  19. package/dist/assets/{blob-iOBwGaP9.js → blob-5VcB8K_t.js} +1 -1
  20. package/dist/assets/{button-COI-NGrx.js → button-D8gVKwe-.js} +1 -1
  21. package/dist/assets/{cache-panel-DTY1dqvi.js → cache-panel-BV-c7ed0.js} +1 -1
  22. package/dist/assets/{capabilities-BJvf-MD4.js → capabilities-Pq1YNPlK.js} +1 -1
  23. package/dist/assets/cell-editor-Byw5y-oI.js +42 -0
  24. package/dist/assets/cell-link-C5yYyzuF.js +1 -0
  25. package/dist/assets/{cells-rA_jsZCj.js → cells-D_11MjVB.js} +60 -60
  26. package/dist/assets/{chat-display-BmEPmhDP.js → chat-display-BCR_ySiV.js} +1 -1
  27. package/dist/assets/chat-panel-RPRvBsaU.js +4 -0
  28. package/dist/assets/chat-ui-CGviVaRA.js +4 -0
  29. package/dist/assets/{circle-DXf-VWZG.js → circle-B6D_6D8w.js} +1 -1
  30. package/dist/assets/code-visibility-DYDagVy7.js +1 -0
  31. package/dist/assets/coerce-DWjFeXOY.js +1 -0
  32. package/dist/assets/column-preview-xe533-Cn.js +1 -0
  33. package/dist/assets/command-palette-BB9bWdWp.js +1 -0
  34. package/dist/assets/{common-lisZ0l6a.js → common-CaeItbcI.js} +1 -1
  35. package/dist/assets/components-CBE8cOLK.js +1 -0
  36. package/dist/assets/{components-CP_UoFtT.js → components-DCo7mAWO.js} +1 -1
  37. package/dist/assets/{components-Dvd1GnD6.js → components-G6frbw0c.js} +1 -1
  38. package/dist/assets/config-CD1IuZFJ.js +1 -0
  39. package/dist/assets/{config-DJLAC21v.js → config-DMz7oN0r.js} +1 -1
  40. package/dist/assets/config-DpY86_Yq.js +1 -0
  41. package/dist/assets/{copy-D8O_CYCG.js → copy-KlhazlhB.js} +1 -1
  42. package/dist/assets/{copy-icon-BIiRXh_3.js → copy-icon-8-a5vovc.js} +1 -1
  43. package/dist/assets/{createReducer-DgRODTW6.js → createReducer-CaI_Oa0v.js} +1 -1
  44. package/dist/assets/{datasource-Dr1xNKUn.js → datasource-deuXnlU-.js} +1 -1
  45. package/dist/assets/{dates-CfmdTL6B.js → dates-CQMwFko2.js} +1 -1
  46. package/dist/assets/{dependency-graph-panel-B0uP-_id.js → dependency-graph-panel-CIykLnJe.js} +2 -2
  47. package/dist/assets/{dist-iaThVDkA.js → dist-jlhMTKo_.js} +1 -1
  48. package/dist/assets/{documentation-panel-DVl_ebWy.js → documentation-panel-2PQ8kQLa.js} +1 -1
  49. package/dist/assets/{download-Bx55LMki.js → download-dK52bLxZ.js} +1 -1
  50. package/dist/assets/{dropdown-menu-C1rnl-0o.js → dropdown-menu-DS6umAnH.js} +1 -1
  51. package/dist/assets/edit-page-DrElzw10.js +9 -0
  52. package/dist/assets/{error-banner-Cd69vvyX.js → error-banner-B5kzVf_0.js} +1 -1
  53. package/dist/assets/{error-entries-DOWpdGvI.js → error-entries-3GVk2KjS.js} +1 -1
  54. package/dist/assets/{error-panel-DpbNKSLs.js → error-panel-CzDRGPeC.js} +1 -1
  55. package/dist/assets/{errors-DCrsa1nH.js → errors-CNsgAw6m.js} +1 -1
  56. package/dist/assets/{es-Cqst59WX.js → es-N9SHpmG7.js} +1 -1
  57. package/dist/assets/{feedback-button-B99ThNJW.js → feedback-button-C5NgWpFg.js} +2 -2
  58. package/dist/assets/feedback-button-CONwLFpw.js +1 -0
  59. package/dist/assets/file-explorer-panel-B50xDnTZ.js +1 -0
  60. package/dist/assets/{file-name-input-ChnBsDE_.js → file-name-input-DqwMSgGU.js} +1 -1
  61. package/dist/assets/{floating-outline-MYqQW4Vp.js → floating-outline-ChmAuvxz.js} +1 -1
  62. package/dist/assets/{formats-yZ06h1Pl.js → formats-zylfwejq.js} +1 -1
  63. package/dist/assets/{formatting-BqrP-n49.js → formatting-uom1es4b.js} +1 -1
  64. package/dist/assets/{fullscreen-B9tHcfpV.js → fullscreen-BWTs8pYZ.js} +1 -1
  65. package/dist/assets/{gallery-page-DSL0J4md.js → gallery-page-CiL8aMS1.js} +1 -1
  66. package/dist/assets/{ganttDiagram-EL5Y4UJY-2n7Ig5Jm.js → ganttDiagram-EL5Y4UJY-CYqkCfFG.js} +1 -1
  67. package/dist/assets/{glide-data-editor-B1MWlKeM.js → glide-data-editor-CqRclBkp.js} +2 -2
  68. package/dist/assets/{glide-utils-CIrAxdjv.js → glide-utils-HFqhvWHI.js} +2 -2
  69. package/dist/assets/home-page-BgZVl4dP.js +1 -0
  70. package/dist/assets/{hooks-BIogTGCr.js → hooks-DM5n7Osw.js} +1 -1
  71. package/dist/assets/{html-to-image-DK9Zl1lU.js → html-to-image-D_0rd3_B.js} +1 -1
  72. package/dist/assets/index-BnhSnwvB.css +2 -0
  73. package/dist/assets/index-EG2n8Oht.js +30 -0
  74. package/dist/assets/{input-BoBxR50a.js → input-DmHMEZGh.js} +1 -1
  75. package/dist/assets/kiosk-mode-DFS6HopF.js +1 -0
  76. package/dist/assets/layout-BpP8nTjb.js +9 -0
  77. package/dist/assets/linear-Bma8J3iM.js +1 -0
  78. package/dist/assets/links-DX2w97N9.js +1 -0
  79. package/dist/assets/{logs-panel-y0XnfulJ.js → logs-panel-B5eVAZtH.js} +1 -1
  80. package/dist/assets/{markdown-renderer-Q5AhbRU3.js → markdown-renderer-BWUzqkJM.js} +1 -1
  81. package/dist/assets/{menu-items-BrwnTgyK.js → menu-items-BgUyNUpu.js} +1 -1
  82. package/dist/assets/{mermaid-a3xYymTy.js → mermaid-BKXlWk4F.js} +2 -2
  83. package/dist/assets/{name-cell-input-BNOnF6-0.js → name-cell-input-DXW68gRW.js} +1 -1
  84. package/dist/assets/numbers-CsZVw3Dc.js +1 -0
  85. package/dist/assets/{objects-snlMn4yk.js → objects-rLPlQ3X_.js} +1 -1
  86. package/dist/assets/{once-Haz_uxEL.js → once-6KNTRW0u.js} +1 -1
  87. package/dist/assets/{outline-panel-Be7stWwv.js → outline-panel-DPxJhJ_A.js} +1 -1
  88. package/dist/assets/{package-data-dv4FBHxR.js → package-data-CKPmBDtg.js} +1 -1
  89. package/dist/assets/packages-panel-gBE2FWQr.js +1 -0
  90. package/dist/assets/{panel-accordion-state-GeMEdCPw.js → panel-accordion-state-CCF5Gxnc.js} +1 -1
  91. package/dist/assets/panels-Dr6qMCvU.js +105 -0
  92. package/dist/assets/precisionRound-BxlUs8G4.js +1 -0
  93. package/dist/assets/process-output-Cw9IDcKQ.js +1 -0
  94. package/dist/assets/{quadrantDiagram-AXDQQJYC-yBhCDI7E.js → quadrantDiagram-AXDQQJYC-D9KH5Zge.js} +1 -1
  95. package/dist/assets/react-vega-BTNeboR2.js +189 -0
  96. package/dist/assets/{readonly-code-display-YULOXf4h.js → readonly-code-display-DYcZQ28T.js} +1 -1
  97. package/dist/assets/{readonly-python-code-CadgXgRu.js → readonly-python-code-RFuQP50v.js} +1 -1
  98. package/dist/assets/{renderShortcut-BkVJQ_Zh.js → renderShortcut-rUwGqKgC.js} +1 -1
  99. package/dist/assets/{requests-lt0JK8Jt.js → requests-BIFR-h4M.js} +1 -1
  100. package/dist/assets/requests-DuLJN9Tf.js +1 -0
  101. package/dist/assets/{reveal-component-BVAR7ayZ.js → reveal-component-yRrDmCQz.js} +37 -37
  102. package/dist/assets/run-page-B69M4-zE.js +1 -0
  103. package/dist/assets/{runs-BLp5jezv.js → runs-C49hleBy.js} +1 -1
  104. package/dist/assets/{runtime-details-state-DuChzsA6.js → runtime-details-state-pobtu6TO.js} +1 -1
  105. package/dist/assets/{save-worker-BbUSwZRG.js → save-worker-pCkSHhuz.js} +1 -1
  106. package/dist/assets/{schemas-Dv42wLFq.js → schemas-ChRqMOTL.js} +1 -1
  107. package/dist/assets/scratchpad-panel-H44_pvb_.js +1 -0
  108. package/dist/assets/{scroll-to-bottom-button-1FyowpWV.js → scroll-to-bottom-button-CIkON2WJ.js} +1 -1
  109. package/dist/assets/{secrets-panel-Bctbtkrp.js → secrets-panel-bcfEKxRx.js} +1 -1
  110. package/dist/assets/{select-DTBn5eTb.js → select-3CVGlYrC.js} +1 -1
  111. package/dist/assets/{session-DqoWmb7X.js → session-CMLIzZKw.js} +1 -1
  112. package/dist/assets/session-panel-Bnd1iXkO.js +1 -0
  113. package/dist/assets/{snippets-panel-CQ1dn3lA.js → snippets-panel-DKApxKx9.js} +1 -1
  114. package/dist/assets/{spec-BfSBcO5B.js → spec-uCpVvaAR.js} +1 -1
  115. package/dist/assets/{state-uwRvJLb8.js → state-3mcyTS9q.js} +1 -1
  116. package/dist/assets/state-B_MCKzBL.js +1 -0
  117. package/dist/assets/state-Bl9BiY_s.js +3 -0
  118. package/dist/assets/{state-C3oDoyFe.js → state-C5WAeuTu.js} +1 -1
  119. package/dist/assets/{state-DxQnC_1I.js → state-Cv2JW3l9.js} +1 -1
  120. package/dist/assets/{state-Bfh_2SLl.js → state-Dv059B3A.js} +1 -1
  121. package/dist/assets/{strings-B2vv-ENv.js → strings-C25fhMR_.js} +1 -1
  122. package/dist/assets/{swiper-component-a07domrZ.js → swiper-component-CRGRy5_O.js} +1 -1
  123. package/dist/assets/{switch-CTaiAjrz.js → switch-DYjBfpNJ.js} +1 -1
  124. package/dist/assets/{tabs-BuQlZFbt.js → tabs-CY8E4r9U.js} +1 -1
  125. package/dist/assets/{terminal-Ck_vK-34.js → terminal-Ca-kubKb.js} +1 -1
  126. package/dist/assets/{time-MgToa8VM.js → time-DswSXBDk.js} +1 -1
  127. package/dist/assets/{toast-BGzLGnvw.js → toast-Gzxi-le_.js} +1 -1
  128. package/dist/assets/tooltip-Brya4Ghn.js +61 -0
  129. package/dist/assets/{tooltip-C9TuY18o.js → tooltip-CkGm8X7m.js} +1 -1
  130. package/dist/assets/tracing-Clwy4SlW.js +1 -0
  131. package/dist/assets/tracing-panel-BwjLG_aC.js +2 -0
  132. package/dist/assets/{tree-actions-DAd80MbP.js → tree-actions-BZNTQ12N.js} +1 -1
  133. package/dist/assets/{use-restore-focus-BxEGwIbk.js → use-restore-focus-DdS7Tl0F.js} +1 -1
  134. package/dist/assets/{useAddCell-DGstJK0S.js → useAddCell-Cjuqk2YR.js} +1 -1
  135. package/dist/assets/useAsyncData-qvoPYHtx.js +1 -0
  136. package/dist/assets/useBoolean-Dd2nWXFJ.js +1 -0
  137. package/dist/assets/useCellActionButton-MoWLvuGe.js +1 -0
  138. package/dist/assets/useDebounce-DwTQ_1Pu.js +1 -0
  139. package/dist/assets/{useDeepCompareMemoize-DFIVN9dn.js → useDeepCompareMemoize-B2DVK2De.js} +1 -1
  140. package/dist/assets/useDelayElapsed-BlsDT4TV.js +1 -0
  141. package/dist/assets/{useDeleteCell-DFBGlSQk.js → useDeleteCell-BC-MW7d1.js} +1 -1
  142. package/dist/assets/{useDependencyPanelTab-DydxsE5d.js → useDependencyPanelTab-CZU7i-B3.js} +1 -1
  143. package/dist/assets/{useEvent-Dfcbgjhg.js → useEvent-BDjgaBtz.js} +1 -1
  144. package/dist/assets/{useEventListener-D9cftcHj.js → useEventListener-CjDeLqFC.js} +1 -1
  145. package/dist/assets/{useIframeCapabilities-CwTkczVN.js → useIframeCapabilities-Czr9e4uG.js} +1 -1
  146. package/dist/assets/{useInstallPackage-iX1eufdl.js → useInstallPackage-wcDq9hYT.js} +1 -1
  147. package/dist/assets/{useInterval--x3s1VpI.js → useInterval-DJdQmXnq.js} +1 -1
  148. package/dist/assets/useNotebookActions-wFxVdRXQ.js +1 -0
  149. package/dist/assets/{useRunCells-BFjFX3hz.js → useRunCells-ByaWxoIt.js} +1 -1
  150. package/dist/assets/{useSplitCell-Tqv5pPtL.js → useSplitCell-YJIystwv.js} +1 -1
  151. package/dist/assets/useStateForKey-CGMJQT8x.js +1 -0
  152. package/dist/assets/{useTheme-COhSHkCj.js → useTheme-BAA27lh7.js} +1 -1
  153. package/dist/assets/{utils-CaQYvazl.js → utils-DfElfBpz.js} +1 -1
  154. package/dist/assets/vega-component-BeyxAJad.js +1 -0
  155. package/dist/assets/{vega-embed-container-DJPNkHPb.js → vega-embed-container-DtArSJz1.js} +1 -1
  156. package/dist/assets/vega-loader.browser-Bu25TKax.js +6 -0
  157. package/dist/assets/{worker-DTQ7oH2A.js → worker-bSCjCvwz.js} +1 -1
  158. package/dist/assets/{write-secret-modal-DzKAInL2.js → write-secret-modal-BEx-EUlh.js} +1 -1
  159. package/dist/assets/{xychartDiagram-S5SC5T6Z-KbGzG6-u.js → xychartDiagram-S5SC5T6Z-CeRnBS5e.js} +1 -1
  160. package/dist/index.html +80 -78
  161. package/package.json +7 -7
  162. package/src/__tests__/host-imports.test.ts +1 -0
  163. package/src/components/app-config/ai-config.tsx +7 -2
  164. package/src/components/chat/__tests__/message-queue.test.tsx +17 -0
  165. package/src/components/chat/acp/__tests__/state.test.ts +2 -2
  166. package/src/components/chat/acp/blocks.tsx +2 -2
  167. package/src/components/chat/chat-components.tsx +2 -0
  168. package/src/components/chat/chat-panel.tsx +9 -8
  169. package/src/components/chat/chat-utils.ts +4 -8
  170. package/src/components/data-table/__tests__/column-explorer.test.tsx +27 -1
  171. package/src/components/data-table/__tests__/columns.test.tsx +105 -0
  172. package/src/components/data-table/__tests__/context-menu-interaction.test.tsx +130 -0
  173. package/src/components/data-table/__tests__/date-popover.test.tsx +72 -0
  174. package/src/components/data-table/__tests__/export-actions.test.tsx +105 -0
  175. package/src/components/data-table/__tests__/search-highlight.test.tsx +109 -0
  176. package/src/components/data-table/__tests__/url-detector.test.tsx +74 -0
  177. package/src/components/data-table/cell-selection/feature.ts +2 -2
  178. package/src/components/data-table/cell-selection/types.ts +2 -2
  179. package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +74 -1
  180. package/src/components/data-table/charts/__tests__/storage.test.ts +4 -1
  181. package/src/components/data-table/charts/charts.tsx +35 -25
  182. package/src/components/data-table/charts/storage.ts +16 -5
  183. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  184. package/src/components/data-table/column-summary/column-summary.tsx +2 -4
  185. package/src/components/data-table/column-visibility-dropdown.tsx +8 -13
  186. package/src/components/data-table/columns.tsx +45 -46
  187. package/src/components/data-table/context-menu.tsx +36 -20
  188. package/src/components/data-table/data-table.tsx +7 -1
  189. package/src/components/data-table/date-popover.tsx +6 -4
  190. package/src/components/data-table/export-actions.tsx +76 -48
  191. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +2 -2
  192. package/src/components/data-table/search-highlight.tsx +79 -0
  193. package/src/components/data-table/types.ts +1 -0
  194. package/src/components/data-table/url-detector.tsx +49 -9
  195. package/src/components/datasources/__tests__/column-actions.test.tsx +97 -0
  196. package/src/components/datasources/__tests__/column-preview.test.tsx +63 -2
  197. package/src/components/datasources/__tests__/table-list.test.tsx +118 -0
  198. package/src/components/datasources/column-preview.tsx +8 -2
  199. package/src/components/datasources/datasources.tsx +47 -35
  200. package/src/components/debugger/debugger-code.tsx +5 -0
  201. package/src/components/dependency-graph/panels.tsx +2 -1
  202. package/src/components/editor/SortableCell.tsx +1 -3
  203. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +111 -18
  204. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +24 -0
  205. package/src/components/editor/actions/pair-with-agent-modal.tsx +18 -15
  206. package/src/components/editor/ai/add-cell-with-ai.tsx +3 -3
  207. package/src/components/editor/ai/ai-completion-editor.tsx +1 -0
  208. package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
  209. package/src/components/editor/cell/CreateCellButton.tsx +8 -10
  210. package/src/components/editor/cell/DeleteButton.tsx +1 -0
  211. package/src/components/editor/cell/__tests__/useShouldShowInterrupt.test.ts +39 -0
  212. package/src/components/editor/cell/code/__tests__/language-toggle.test.tsx +54 -0
  213. package/src/components/editor/cell/code/cell-editor.tsx +1 -1
  214. package/src/components/editor/cell/code/language-toggle.tsx +8 -7
  215. package/src/components/editor/cell/useShouldShowInterrupt.ts +2 -12
  216. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +30 -1
  217. package/src/components/editor/chrome/panels/cache-panel.tsx +1 -0
  218. package/src/components/editor/chrome/panels/packages-panel.tsx +4 -7
  219. package/src/components/editor/chrome/wrapper/__tests__/attachment-status.test.tsx +12 -18
  220. package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +58 -1
  221. package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
  222. package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +12 -2
  223. package/src/components/editor/chrome/wrapper/storage.ts +1 -1
  224. package/src/components/editor/connections/components.tsx +1 -1
  225. package/src/components/editor/controls/__tests__/command-palette.test.tsx +53 -0
  226. package/src/components/editor/controls/command-palette.tsx +22 -10
  227. package/src/components/editor/dynamic-favicon.tsx +21 -40
  228. package/src/components/editor/errors/__tests__/send-error-report-button.test.tsx +12 -23
  229. package/src/components/editor/file-tree/__tests__/file-explorer-interactions.test.tsx +6 -0
  230. package/src/components/editor/file-tree/__tests__/use-file-search.test.tsx +91 -0
  231. package/src/components/editor/file-tree/file-explorer.tsx +10 -5
  232. package/src/components/editor/file-tree/file-viewer.tsx +4 -2
  233. package/src/components/editor/file-tree/use-file-search.ts +35 -21
  234. package/src/components/editor/notebook-banner.tsx +1 -0
  235. package/src/components/editor/output/MarimoTracebackOutput.tsx +2 -2
  236. package/src/components/editor/output/ansi-reduce.ts +6 -0
  237. package/src/components/editor/output/console/ConsoleOutput.tsx +19 -25
  238. package/src/components/editor/package-alert.tsx +6 -4
  239. package/src/components/editor/renderers/vertical-layout/sidebar/toggle.tsx +7 -1
  240. package/src/components/home/components.tsx +17 -31
  241. package/src/components/icons/__tests__/large-spinner.test.tsx +39 -0
  242. package/src/components/icons/large-spinner.tsx +3 -14
  243. package/src/components/icons/spinner.tsx +1 -1
  244. package/src/components/mcp/mcp-status-indicator.tsx +1 -1
  245. package/src/components/pages/__tests__/home-page.test.tsx +116 -0
  246. package/src/components/pages/home-page.tsx +164 -91
  247. package/src/components/scratchpad/scratchpad.tsx +2 -2
  248. package/src/components/slides/reveal-component.tsx +4 -2
  249. package/src/components/slides/slide-cell-view.tsx +1 -1
  250. package/src/components/slides/slide-form.tsx +1 -0
  251. package/src/components/tracing/tracing.tsx +2 -2
  252. package/src/components/ui/alert-dialog.tsx +1 -1
  253. package/src/core/ai/context/providers/datasource.ts +6 -2
  254. package/src/core/attachments/state.ts +5 -8
  255. package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +4 -0
  256. package/src/core/cells/__tests__/cell.test.ts +39 -0
  257. package/src/core/cells/__tests__/cells.test.ts +3 -1
  258. package/src/core/cells/__tests__/collapseConsoleOutputs.test.ts +54 -0
  259. package/src/core/cells/__tests__/notebook-outline.test.ts +113 -0
  260. package/src/core/cells/cell.ts +14 -3
  261. package/src/core/cells/cells.ts +3 -1
  262. package/src/core/cells/pending-delete-service.ts +2 -6
  263. package/src/core/cells/session.ts +1 -1
  264. package/src/core/cells/types.ts +10 -1
  265. package/src/core/codemirror/__tests__/setup.test.ts +1 -1
  266. package/src/core/codemirror/keymaps/vim.ts +2 -6
  267. package/src/core/codemirror/language/languages/markdown.ts +1 -1
  268. package/src/core/codemirror/language/languages/python.ts +3 -3
  269. package/src/core/codemirror/language/panel/panel.tsx +1 -0
  270. package/src/core/datasets/__tests__/data-source-discovery.test.ts +4 -4
  271. package/src/core/datasets/data-source-discovery.ts +4 -6
  272. package/src/core/document/__tests__/draft.test.ts +322 -0
  273. package/src/core/document/__tests__/fixtures.ts +92 -0
  274. package/src/core/document/__tests__/lifecycle-scenarios.test.ts +61 -0
  275. package/src/core/document/__tests__/model.test.ts +158 -0
  276. package/src/core/document/__tests__/protocol-fixtures.ts +38 -0
  277. package/src/core/document/__tests__/recovery-scenarios.test.ts +230 -0
  278. package/src/core/document/__tests__/scenario-fixture.ts +42 -0
  279. package/src/core/document/__tests__/scenarios.test.ts +205 -0
  280. package/src/core/document/__tests__/state.test.ts +446 -0
  281. package/src/core/document/__tests__/submission.test.ts +201 -0
  282. package/src/core/document/__tests__/test-host.test.ts +92 -0
  283. package/src/core/document/__tests__/test-host.ts +247 -0
  284. package/src/core/document/__tests__/test-notebook.ts +139 -0
  285. package/src/core/document/__tests__/user.ts +61 -0
  286. package/src/core/document/draft.ts +472 -0
  287. package/src/core/document/index.ts +10 -0
  288. package/src/core/document/model.ts +53 -0
  289. package/src/core/document/state.ts +401 -0
  290. package/src/core/document/sync.ts +359 -0
  291. package/src/core/edit-app.tsx +2 -2
  292. package/src/core/host/AGENTS.md +12 -2
  293. package/src/core/host/__tests__/attachments.test.ts +56 -0
  294. package/src/core/host/__tests__/document.test.ts +126 -0
  295. package/src/core/host/__tests__/fixtures.ts +41 -0
  296. package/src/core/host/__tests__/notebook-client.test.ts +570 -0
  297. package/src/core/host/connection.ts +42 -0
  298. package/src/core/host/notebook-client.ts +297 -0
  299. package/src/core/host/resources/attachments.ts +22 -0
  300. package/src/core/host/resources/document.ts +101 -0
  301. package/src/core/hotkeys/actions.ts +2 -4
  302. package/src/core/islands/__tests__/bootstrap.test.ts +0 -26
  303. package/src/core/islands/bootstrap.ts +0 -1
  304. package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
  305. package/src/core/network/connection.ts +4 -2
  306. package/src/core/network/useConnectionNotice.ts +8 -2
  307. package/src/core/run-app.tsx +2 -2
  308. package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
  309. package/src/core/runtime/__tests__/runtime.test.ts +18 -17
  310. package/src/core/runtime/runtime.ts +26 -30
  311. package/src/core/state/__tests__/jotai.test.tsx +108 -0
  312. package/src/core/state/jotai.ts +1 -1
  313. package/src/core/static/files.ts +2 -0
  314. package/src/core/wasm/bridge.ts +2 -10
  315. package/src/core/wasm/store.ts +3 -3
  316. package/src/core/wasm/worker/bootstrap.ts +1 -1
  317. package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
  318. package/src/core/websocket/__tests__/{useMarimoKernelConnection.test.ts → connection-state.test.ts} +15 -29
  319. package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +223 -0
  320. package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +606 -0
  321. package/src/core/websocket/connection-state.ts +60 -0
  322. package/src/core/websocket/state.ts +7 -0
  323. package/src/core/websocket/transports/__tests__/notebook.test.ts +502 -0
  324. package/src/core/websocket/transports/notebook.ts +213 -0
  325. package/src/core/websocket/types.ts +9 -39
  326. package/src/core/websocket/useNotebookClient.ts +89 -0
  327. package/src/core/websocket/{useMarimoKernelConnection.tsx → useNotebookSession.tsx} +53 -233
  328. package/src/css/globals.css +5 -0
  329. package/src/hooks/__tests__/useAsyncData.test.tsx +148 -0
  330. package/src/hooks/__tests__/useDebounce.test.tsx +51 -0
  331. package/src/hooks/__tests__/useDeepCompareMemoize.test.tsx +39 -0
  332. package/src/hooks/__tests__/useDelayElapsed.test.tsx +28 -0
  333. package/src/hooks/__tests__/useInternalStateWithSync.test.tsx +20 -0
  334. package/src/hooks/__tests__/useScript.test.tsx +77 -0
  335. package/src/hooks/__tests__/useStateForKey.test.tsx +257 -0
  336. package/src/hooks/useAsyncData.ts +3 -3
  337. package/src/hooks/useDataSourceDiscovery.ts +6 -4
  338. package/src/hooks/useDebounce.ts +5 -8
  339. package/src/hooks/useDeepCompareMemoize.ts +1 -1
  340. package/src/hooks/useDelayElapsed.ts +14 -10
  341. package/src/hooks/useElapsedTime.ts +3 -3
  342. package/src/hooks/useInputHistory.ts +4 -7
  343. package/src/hooks/useInternalStateWithSync.ts +6 -6
  344. package/src/hooks/useResizeObserver.ts +4 -7
  345. package/src/hooks/useScript.ts +67 -70
  346. package/src/hooks/useStateForKey.ts +93 -0
  347. package/src/plugins/core/registerReactComponent.tsx +1 -1
  348. package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
  349. package/src/plugins/impl/DataTablePlugin.tsx +14 -15
  350. package/src/plugins/impl/DropdownPlugin.tsx +2 -6
  351. package/src/plugins/impl/FileBrowserPlugin.tsx +4 -16
  352. package/src/plugins/impl/FormPlugin.tsx +1 -1
  353. package/src/plugins/impl/RangeSliderPlugin.tsx +0 -1
  354. package/src/plugins/impl/RefreshPlugin.tsx +1 -0
  355. package/src/plugins/impl/SliderPlugin.tsx +6 -8
  356. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +117 -1
  357. package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +45 -0
  358. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +24 -3
  359. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +2 -0
  360. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +241 -2
  361. package/src/plugins/impl/anywidget/runtime.ts +21 -9
  362. package/src/plugins/impl/anywidget/widget-binding.ts +160 -82
  363. package/src/plugins/impl/chat/__tests__/chat-prompts.test.tsx +93 -0
  364. package/src/plugins/impl/chat/chat-ui.tsx +12 -10
  365. package/src/plugins/impl/code/any-language-editor.tsx +2 -2
  366. package/src/plugins/impl/data-editor/glide-data-editor.tsx +8 -5
  367. package/src/plugins/impl/data-editor/glide-utils.ts +3 -1
  368. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
  369. package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
  370. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +0 -1
  371. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +5 -3
  372. package/src/plugins/impl/panel/PanelPlugin.tsx +16 -17
  373. package/src/plugins/impl/panel/__tests__/utils.test.ts +39 -1
  374. package/src/plugins/impl/panel/utils.ts +17 -0
  375. package/src/plugins/impl/vega/make-selectable.ts +4 -7
  376. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  377. package/src/stories/__tests__/editor-story.test.tsx +33 -0
  378. package/src/stories/button.stories.tsx +1 -0
  379. package/src/stories/editor.stories.tsx +24 -17
  380. package/src/stories/form-wrapper.stories.tsx +2 -2
  381. package/src/stories/select.stories.tsx +2 -2
  382. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  383. package/src/utils/__tests__/arrays.test.ts +35 -0
  384. package/src/utils/__tests__/batch-requests.test.ts +3 -3
  385. package/src/utils/__tests__/numbers.test.ts +48 -1
  386. package/src/utils/__tests__/objects.test.ts +21 -0
  387. package/src/utils/arrays.ts +10 -0
  388. package/src/utils/blob.ts +1 -1
  389. package/src/utils/numbers.ts +28 -17
  390. package/src/utils/objects.ts +3 -7
  391. package/src/utils/once.ts +19 -19
  392. package/src/utils/zod-utils.ts +1 -3
  393. package/dist/assets/CellStatus-nZpuDkm7.js +0 -1
  394. package/dist/assets/JsonOutput-BxB0NL8w.js +0 -11
  395. package/dist/assets/MarimoErrorOutput-BTy4MOzX.js +0 -10
  396. package/dist/assets/RunButton-CFQUNN5c.js +0 -1
  397. package/dist/assets/__vite-browser-external-CYO_P3S8.js +0 -1
  398. package/dist/assets/__vite-browser-external-FeDVGZU8.js +0 -1
  399. package/dist/assets/ai-model-dropdown-zm-2fXzf.js +0 -13
  400. package/dist/assets/any-language-editor-BLCAD3yx.js +0 -1
  401. package/dist/assets/arrays-BqUx5USx.js +0 -1
  402. package/dist/assets/cell-editor-CAj1UKxx.js +0 -21
  403. package/dist/assets/cell-link-1CynTVGQ.js +0 -1
  404. package/dist/assets/chat-panel-Ce2Xh7dM.js +0 -4
  405. package/dist/assets/chat-ui-DTy98rP3.js +0 -4
  406. package/dist/assets/circle-play-CYIb0qT6.js +0 -1
  407. package/dist/assets/code-visibility-B-_GvwR5.js +0 -1
  408. package/dist/assets/coerce-CpE6kUdX.js +0 -1
  409. package/dist/assets/column-preview-DU6dT80y.js +0 -1
  410. package/dist/assets/command-palette-BMqFKXVr.js +0 -1
  411. package/dist/assets/components-CXfO-F47.js +0 -1
  412. package/dist/assets/config-DX8Y2WbJ.js +0 -1
  413. package/dist/assets/config-VPSq73n8.js +0 -1
  414. package/dist/assets/edit-page-DlfCLUaq.js +0 -9
  415. package/dist/assets/feedback-button-DlqZkJwz.js +0 -1
  416. package/dist/assets/file-explorer-panel-Bo9eN3rW.js +0 -1
  417. package/dist/assets/home-page-KrhQ55Vg.js +0 -4
  418. package/dist/assets/index-6b4mf8Ai.css +0 -2
  419. package/dist/assets/index-B3fcrmuf.js +0 -30
  420. package/dist/assets/kiosk-mode-BZECfg9k.js +0 -1
  421. package/dist/assets/layout-DOpdUwym.js +0 -9
  422. package/dist/assets/linear-0eij_aAG.js +0 -1
  423. package/dist/assets/link-NuFVR7G9.js +0 -1
  424. package/dist/assets/links-DkkL9DVa.js +0 -1
  425. package/dist/assets/numbers-Mk3-CcoU.js +0 -1
  426. package/dist/assets/packages-panel-ClxOAEGy.js +0 -1
  427. package/dist/assets/panels-DfCmzLtT.js +0 -4
  428. package/dist/assets/precisionRound-Bq_nmf5u.js +0 -1
  429. package/dist/assets/process-output-DNFKMODr.js +0 -1
  430. package/dist/assets/react-vega-C3rYGtP6.js +0 -189
  431. package/dist/assets/requests-CgSY1X4a.js +0 -1
  432. package/dist/assets/run-page-Cxu1yV8Q.js +0 -1
  433. package/dist/assets/scratchpad-panel-By-ybhjg.js +0 -1
  434. package/dist/assets/session-panel-BmW6PH4z.js +0 -1
  435. package/dist/assets/state-BAJYRhmO.js +0 -1
  436. package/dist/assets/state-z3dlofZB.js +0 -3
  437. package/dist/assets/tooltip-mT3CGest.js +0 -61
  438. package/dist/assets/tracing-BARlJ_Dk.js +0 -1
  439. package/dist/assets/tracing-panel-dgnr2fIN.js +0 -2
  440. package/dist/assets/useAsyncData-C7aJJz0Y.js +0 -1
  441. package/dist/assets/useBoolean-BDD6_xQQ.js +0 -1
  442. package/dist/assets/useCellActionButton-DY9RlJTb.js +0 -1
  443. package/dist/assets/useDebounce-B_ccBZTp.js +0 -1
  444. package/dist/assets/useNotebookActions-DfvB7RD_.js +0 -1
  445. package/dist/assets/vega-component-CnadTgoE.js +0 -1
  446. package/dist/assets/vega-loader.browser-CLRkNgm7.js +0 -6
  447. package/dist/assets/ws-BXWY541V.js +0 -22
  448. package/src/core/host/__tests__/protocol.test.ts +0 -214
  449. package/src/core/host/protocol.ts +0 -1943
  450. package/src/core/state/__tests__/jotai.test.ts +0 -25
  451. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +0 -789
  452. package/src/core/websocket/__tests__/useWebSocket.test.ts +0 -49
  453. package/src/core/websocket/transports/__tests__/basic.test.ts +0 -275
  454. package/src/core/websocket/transports/__tests__/sse.test.ts +0 -338
  455. package/src/core/websocket/transports/__tests__/transport.test.ts +0 -308
  456. package/src/core/websocket/transports/__tests__/ws.test.ts +0 -125
  457. package/src/core/websocket/transports/basic.ts +0 -102
  458. package/src/core/websocket/transports/sse.ts +0 -308
  459. package/src/core/websocket/transports/transport.ts +0 -61
  460. package/src/core/websocket/transports/ws.ts +0 -98
  461. package/src/core/websocket/useWebSocket.tsx +0 -88
@@ -1 +0,0 @@
1
- import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./useEvent-Dfcbgjhg.js";import{t as n}from"./react-DVplv7_D.js";import{t as r}from"./compiler-runtime-BrajqUja.js";import{t as i}from"./debounce-aFmHgJZY.js";import{f as a,g as o}from"./useEventListener-D9cftcHj.js";import{t as s}from"./objects-snlMn4yk.js";import{n as c}from"./config-DX8Y2WbJ.js";import{t as l}from"./cn-ldLVeaqm.js";import{t as u}from"./jsx-runtime-B74pBk57.js";import{t as d}from"./tooltip-C9TuY18o.js";import{r as f}from"./button-COI-NGrx.js";import{s as ee}from"./toDate-DOj9Q6uC.js";import{u as p}from"./arrays-BqUx5USx.js";import{r as te}from"./useTheme-COhSHkCj.js";import{n as ne}from"./useAsyncData-C7aJJz0Y.js";import{t as m}from"./isValid-q_Ad80ug.js";import{r as re,t as ie}from"./tooltip-mT3CGest.js";import{n as h}from"./vega-loader.browser-CLRkNgm7.js";import{t as ae}from"./react-vega-C3rYGtP6.js";import{r as oe,t as se}from"./alert-DTaqCu_d.js";import{n as ce}from"./error-banner-Cd69vvyX.js";import{t as le}from"./utils-CaQYvazl.js";import{t as g}from"./formats-yZ06h1Pl.js";import{t as ue}from"./useDeepCompareMemoize-DFIVN9dn.js";import{t as de}from"./semaphore-BjoL5P0h.js";import{t as fe}from"./use-vega-container-remeasure-BpmHehNK.js";var pe=e(n(),1),me=r();function he(e){return e.data&&`url`in e.data&&(e.data.url=c(e.data.url).href),e}var _={arc:`arc`,area:`area`,bar:`bar`,image:`image`,line:`line`,point:`point`,rect:`rect`,rule:`rule`,text:`text`,tick:`tick`,trail:`trail`,circle:`circle`,square:`square`,geoshape:`geoshape`},v=new Set([`boxplot`,`errorband`,`errorbar`]),y={getMarkType(e){let t=typeof e==`string`?e:e.type;if(v.has(t))throw Error(`Not supported`);return t},isInteractive(e){let t=typeof e==`string`?e:e.type;return!v.has(t)},makeClickable(e){let t=typeof e==`string`?e:e.type;return t in _?typeof e==`string`?{type:e,cursor:`pointer`,tooltip:!0}:{...e,type:t,cursor:`pointer`,tooltip:!0}:e},getOpacity(e){return typeof e==`string`?null:`opacity`in e&&typeof e.opacity==`number`?e.opacity:null}},b={point(e){return e==null?`select_point`:`select_point_${e}`},interval(e){return e==null?`select_interval`:`select_interval_${e}`},legendSelection(e){return`legend_selection_${e}`},binColoring(e){return e==null?`bin_coloring`:`bin_coloring_${e}`},HIGHLIGHT:`highlight`,PAN_ZOOM:`pan_zoom`,hasPoint(e){return e.some(e=>e.startsWith(`select_point`))},hasInterval(e){return e.some(e=>e.startsWith(`select_interval`))},hasLegend(e){return e.some(e=>e.startsWith(`legend_selection`))},hasPanZoom(e){return e.some(e=>e.startsWith(`pan_zoom`))},isBinColoring(e){return e.startsWith(`bin_coloring`)}};function x(){return a()?`metaKey`:`ctrlKey`}var S={highlight(){return{name:b.HIGHLIGHT,select:{type:`point`,on:`mouseover`}}},interval(e,t){let n=x();return{name:b.interval(t),select:{type:`interval`,encodings:C(e),mark:{fill:`#669EFF`,fillOpacity:.07,stroke:`#669EFF`,strokeOpacity:.4},on:`[mousedown[!event.${n}], mouseup] > mousemove[!event.${n}]`,translate:`[mousedown[!event.${n}], mouseup] > mousemove[!event.${n}]`}}},point(e,t){return{name:b.point(t),select:{type:`point`,encodings:C(e),on:`click[!event.${x()}]`}}},binColoring(e){return{name:b.binColoring(e),select:{type:`point`,on:`click[!event.${x()}]`}}},legend(e){return{name:b.legendSelection(e),select:{type:`point`,fields:[e]},bind:`legend`}},panZoom(){let e=x();return{name:b.PAN_ZOOM,bind:`scales`,select:{type:`interval`,on:`[mousedown[event.${e}], window:mouseup] > window:mousemove!`,translate:`[mousedown[event.${e}], window:mouseup] > window:mousemove!`,zoom:`wheel![event.${e}]`}}}};function C(e){switch(y.getMarkType(e.mark)){case _.image:case _.trail:return;case _.area:case _.arc:return[`color`];case _.bar:{let t=T(e);return t===`horizontal`?[`y`]:t===`vertical`?[`x`]:void 0}case _.circle:case _.geoshape:case _.line:case _.point:case _.rect:case _.rule:case _.square:case _.text:case _.tick:return[`x`,`y`]}}function w(e){if(`params`in e&&e.params&&e.params.length>0){let t=e.params.filter(e=>e!=null&&`select`in e&&e.select!==void 0).map(e=>e.name);return p(t)}return`layer`in e?p(e.layer.flatMap(w)):`vconcat`in e?p(e.vconcat.flatMap(w)):`hconcat`in e?p(e.hconcat.flatMap(w)):[]}function T(e){if(!e||!(`mark`in e))return;let t=e.encoding?.x,n=e.encoding?.y;if(t&&`type`in t&&t.type===`nominal`)return`vertical`;if(n&&`type`in n&&n.type===`nominal`||t&&`aggregate`in t)return`horizontal`;if(n&&`aggregate`in n)return`vertical`}function E(e){if(!e.encoding)return[];let t=[];for(let n of Object.values(e.encoding))n&&typeof n==`object`&&`bin`in n&&n.bin&&`field`in n&&typeof n.field==`string`&&t.push(n.field);return t}function D(e){if(!e||!(`encoding`in e))return[];let{encoding:t}=e;return t?Object.entries(t).flatMap(e=>{let[t,n]=e;return!n||!O.has(t)?[]:`field`in n&&typeof n.field==`string`?[n.field]:`condition`in n&&n.condition&&typeof n.condition==`object`&&`field`in n.condition&&n.condition.field&&typeof n.condition.field==`string`?[n.condition.field]:[]}):[]}var O=new Set([`color`,`fill`,`fillOpacity`,`opacity`,`shape`,`size`]);function k(e,t,n,r){let i=n.filter(e=>b.isBinColoring(e)),a={and:(i.length>0?i:n).map(e=>({param:e}))};switch(e){case`opacity`:{let e=y.getOpacity(r)||1;return{...t,opacity:{condition:{test:a,value:e},value:e/5}}}default:return t}}function A(e){if(!(`select`in e)||!e.select)return JSON.stringify(e);let t=e.select;if(typeof t==`string`)return JSON.stringify({type:t,bind:e.bind});let n={type:t.type,encodings:`encodings`in t&&t.encodings?[...t.encodings].toSorted():void 0,fields:`fields`in t&&t.fields?[...t.fields].toSorted():void 0,bind:e.bind};return JSON.stringify(n)}function j(e){let t=M(e);if(t.length===0)return e;let n=N(t);return n.length===0?e:{...F(P(e,new Set(n.map(e=>e.name))),n.map(e=>e.name)),params:[...e.params||[],...n]}}function M(e){let t=[];if(`vconcat`in e&&Array.isArray(e.vconcat))for(let n of e.vconcat)t.push(...M(n));else if(`hconcat`in e&&Array.isArray(e.hconcat))for(let n of e.hconcat)t.push(...M(n));else if(`layer`in e)return[];else`mark`in e&&`params`in e&&e.params&&e.params.length>0&&t.push({params:e.params});return t}function N(e){if(e.length===0)return[];let t=new Map,n=e.length;for(let{params:n}of e){let e=new Set;for(let r of n){let n=A(r);e.has(n)||(e.add(n),t.has(n)||t.set(n,{count:0,param:r}),t.get(n).count++)}}let r=[];for(let[,{count:e,param:i}]of t)e===n&&r.push(i);return r}function P(e,t){if(`vconcat`in e&&Array.isArray(e.vconcat))return{...e,vconcat:e.vconcat.map(e=>P(e,t))};if(`hconcat`in e&&Array.isArray(e.hconcat))return{...e,hconcat:e.hconcat.map(e=>P(e,t))};if(`mark`in e&&`params`in e&&e.params){let n=e.params,r=[];for(let e of n){if(!e||typeof e!=`object`||!(`name`in e)){r.push(e);continue}t.has(e.name)||r.push(e)}if(r.length===0){let{params:t,...n}=e;return n}return{...e,params:r}}return e}function F(e,t){return`vconcat`in e&&Array.isArray(e.vconcat)?{...e,vconcat:e.vconcat.map(e=>F(e,t))}:`hconcat`in e&&Array.isArray(e.hconcat)?{...e,hconcat:e.hconcat.map(e=>F(e,t))}:`layer`in e?e:`mark`in e&&y.isInteractive(e.mark)?{...e,mark:y.makeClickable(e.mark),encoding:k(`opacity`,e.encoding||{},t,e.mark)}:e}function ge(e,t){let{chartSelection:n=!0,fieldSelection:r=!0}=t;if(!n&&!r)return e;e.params?.some(e=>e.bind===`legend`)&&(r=!1);let i=e.params?.some(e=>!e.bind);i&&(n=!1);let a=`vconcat`in e||`hconcat`in e;if(i&&a)return e;if(`vconcat`in e){let t=e.vconcat.map(e=>`mark`in e?ge(e,{chartSelection:n,fieldSelection:r}):e);return j({...e,vconcat:t})}if(`hconcat`in e){let t=e.hconcat.map(e=>`mark`in e?ge(e,{chartSelection:n,fieldSelection:r}):e);return j({...e,hconcat:t})}if(`layer`in e){let t=e.params&&e.params.length>0,i=r!==!1&&!t,a=[];if(i){let t=e.layer.flatMap(e=>`mark`in e?D(e):[]);a=[...new Set(t)],Array.isArray(r)&&(a=a.filter(e=>r.includes(e)))}let o=e.layer.map((e,t)=>{if(!(`mark`in e))return e;let r=e;if(t===0&&a.length>0){let e=a.map(e=>S.legend(e));r={...r,params:[...r.params||[],...e]}}return r=L(r,n,t),r=z(r),t===0&&(r=R(r)),r});return{...e,layer:o}}if(!(`mark`in e)||!y.isInteractive(e.mark))return e;let o=e;return o=I(o,r),o=L(o,n,void 0),o=z(o),o=R(o),o}function I(e,t){if(t===!1)return e;let n=D(e);Array.isArray(t)&&(n=n.filter(e=>t.includes(e)));let r=n.map(e=>S.legend(e)),i=[...e.params||[],...r];return{...e,params:i}}function L(e,t,n){if(t===!1)return e;let r;try{r=y.getMarkType(e.mark)}catch{return e}if(r===`geoshape`)return e;let i=E(e),a=t===!0?i.length>0?[`point`]:B(r):[t];if(!a||a.length===0)return e;let o=a.map(t=>t===`interval`?S.interval(e,n):S.point(e,n)),s=[...e.params||[],...o];return i.length>0&&a.includes(`point`)&&s.push(S.binColoring(n)),{...e,params:s}}function R(e){let t;try{t=y.getMarkType(e.mark)}catch{}if(t===`geoshape`)return e;let n=e.params||[];return n.some(e=>e.bind===`scales`)?e:{...e,params:[...n,S.panZoom()]}}function z(e){let t=`encoding`in e?e.encoding:void 0,n=e.params||[],r=n.map(e=>e.name);return n.length===0||!y.isInteractive(e.mark)?e:{...e,mark:y.makeClickable(e.mark),encoding:k(`opacity`,t||{},r,e.mark)}}function B(e){switch(e){case`arc`:case`area`:return[`point`];case`text`:case`bar`:return[`point`,`interval`];case`line`:return;default:return[`point`,`interval`]}}var V=5;async function H(e){if(!e)return e;let t=`datasets`in e?{...e.datasets}:{},n=new de(V),r=async e=>{if(!e)return e;if(`layer`in e){let t=await Promise.all(e.layer.map(r));e={...e,layer:t}}if(`hconcat`in e){let t=await Promise.all(e.hconcat.map(r));e={...e,hconcat:t}}if(`vconcat`in e){let t=await Promise.all(e.vconcat.map(r));e={...e,vconcat:t}}if(`spec`in e&&(e={...e,spec:await r(e.spec)}),!e.data||!(`url`in e.data))return e;let i;try{i=c(e.data.url)}catch{return e}let a=e.data.format,o=await n.run(()=>re(i.href,a));return t[i.pathname]=o,{...e,data:{name:i.pathname}}},i=await r(e);return Object.keys(t).length===0?i:{...i,datasets:t}}var U=u();h(`arrow`,g);var W=e=>{let t=(0,me.c)(12),{value:n,setValue:r,chartSelection:i,fieldSelection:a,spec:o,embedOptions:s}=e,c,l;t[0]===o?(c=t[1],l=t[2]):(c=async()=>H(o),l=[o],t[0]=o,t[1]=c,t[2]=l);let{data:u,error:d}=ne(c,l);if(d){let e;return t[3]===d?e=t[4]:(e=(0,U.jsx)(ce,{error:d}),t[3]=d,t[4]=e),e}if(!u)return null;let f;return t[5]!==i||t[6]!==s||t[7]!==a||t[8]!==u||t[9]!==r||t[10]!==n?(f=(0,U.jsx)(G,{value:n,setValue:r,chartSelection:i,fieldSelection:a,spec:u,embedOptions:s}),t[5]=i,t[6]=s,t[7]=a,t[8]=u,t[9]=r,t[10]=n,t[11]=f):f=t[11],f},G=e=>{let n=(0,me.c)(50),{value:r,setValue:c,chartSelection:u,fieldSelection:p,spec:ne,embedOptions:m}=e,{theme:re}=te(),h=(0,pe.useRef)(null),ce=(0,pe.useRef)(void 0),[g,de]=(0,pe.useState)(),_;bb0:{if(m&&`actions`in m){_=m.actions;break bb0}let e;n[0]===Symbol.for(`react.memo_cache_sentinel`)?(e={source:!1,compiled:!1},n[0]=e):e=n[0],_=e}let v=_,y=ue(ne),x;n[1]!==u||n[2]!==p||n[3]!==y?(x=ge(he(y),{chartSelection:u,fieldSelection:p}),n[1]=u,n[2]=p,n[3]=y,n[4]=x):x=n[4];let S=x,C;n[5]===S?C=n[6]:(C=w(S),n[5]=S,n[6]=C);let T=C,E;n[7]!==c||n[8]!==r?(E=e=>{c({...r,...e})},n[7]=c,n[8]=r,n[9]=E):E=n[9];let D=t(E),O;n[10]===D?O=n[11]:(O=i((e,t)=>{o.debug(`[Vega signal]`,e,t);let n=s.mapValues(t,ve);n=s.mapValues(n,_e),D({[e]:n})},100),n[10]=D,n[11]=O);let k=O,A=ue(T),j;if(n[12]!==k||n[13]!==A){let e;n[15]===k?e=n[16]:(e=(e,t)=>(b.PAN_ZOOM===t||b.isBinColoring(t)||e.push({signalName:t,handler:(e,t)=>k(e,t)}),e),n[15]=k,n[16]=e),j=A.reduce(e,[]),n[12]=k,n[13]=A,n[14]=j}else j=n[14];let M=j,N;n[17]===S?N=n[18]:(N=e=>{o.error(e),o.debug(S),de(e)},n[17]=S,n[18]=N);let P=t(N),F;n[19]===Symbol.for(`react.memo_cache_sentinel`)?(F=e=>{o.debug(`[Vega view] created`,e),ce.current=e,de(void 0)},n[19]=F):F=n[19];let I=t(F),L;n[20]===T?L=n[21]:(L=()=>{let e=[];if(b.hasPoint(T)&&e.push([`Point selection`,`click to select a point; hold shift for multi-select`]),b.hasInterval(T)&&e.push([`Interval selection`,`click and drag to select an interval`]),b.hasLegend(T)&&e.push([`Legend selection`,`click to select a legend item; hold shift for multi-select`]),b.hasPanZoom(T)){let t=a()?`⌘`:`ctrl`;e.push([`Pan`,`hold the ${t} key and drag`],[`Zoom`,`hold the ${t} key and scroll`])}return e.length===0?null:(0,U.jsx)(d,{delayDuration:300,side:`left`,content:(0,U.jsx)(`div`,{className:`text-xs flex flex-col`,children:e.map(ye)}),children:(0,U.jsx)(ee,{className:`absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground`})})},n[20]=T,n[21]=L);let R=L,z=re===`dark`?`dark`:void 0,B;n[22]!==v||n[23]!==z?(B={theme:z,actions:v,mode:`vega-lite`,tooltip:ie.call,renderer:`canvas`},n[22]=v,n[23]=z,n[24]=B):B=n[24];let V;n[25]!==P||n[26]!==I||n[27]!==S||n[28]!==B?(V={ref:h,spec:S,options:B,onError:P,onEmbed:I},n[25]=P,n[26]=I,n[27]=S,n[28]=B,n[29]=V):V=n[29];let H=ae(V),W;n[30]===S?W=n[31]:(W=le(S),n[30]=S,n[31]=W);let G=W;fe(h,G===`container`);let K,q;n[32]!==H||n[33]!==M?(K=()=>(M.forEach(e=>{let{signalName:t,handler:n}=e;try{H?.view.addSignalListener(t,n)}catch(e){let t=e;o.error(t)}}),()=>{M.forEach(e=>{let{signalName:t,handler:n}=e;try{H?.view.removeSignalListener(t,n)}catch(e){let t=e;o.error(t)}})}),q=[H,M],n[32]=H,n[33]=M,n[34]=K,n[35]=q):(K=n[34],q=n[35]),(0,pe.useEffect)(K,q);let J;n[36]===g?J=n[37]:(J=g&&(0,U.jsxs)(se,{variant:`destructive`,children:[(0,U.jsx)(oe,{children:g.message}),(0,U.jsx)(`div`,{className:`text-md`,children:g.stack})]}),n[36]=g,n[37]=J);let Y,X;n[38]===Symbol.for(`react.memo_cache_sentinel`)?(Y=l(`relative`),X=f.stopPropagation(),n[38]=Y,n[39]=X):(Y=n[38],X=n[39]);let Z;n[40]===G?Z=n[41]:(Z=(0,U.jsx)(`div`,{ref:h,"data-container-width":G}),n[40]=G,n[41]=Z);let Q;n[42]===R?Q=n[43]:(Q=R(),n[42]=R,n[43]=Q);let $;n[44]!==Z||n[45]!==Q?($=(0,U.jsxs)(`div`,{className:Y,onPointerDown:X,children:[Z,Q]}),n[44]=Z,n[45]=Q,n[46]=$):$=n[46];let be;return n[47]!==J||n[48]!==$?(be=(0,U.jsxs)(U.Fragment,{children:[J,$]}),n[47]=J,n[48]=$,n[49]=be):be=n[49],be};function _e(e){return e instanceof Set?[...e]:e}function ve(e){return Array.isArray(e)?e.map(e=>e instanceof Date&&m(e)?new Date(e).getTime():e):e}function ye(e,t){return(0,U.jsxs)(`div`,{children:[(0,U.jsxs)(`span`,{className:`font-bold tracking-wide`,children:[e[0],`:`]}),` `,e[1]]},t)}export{W as default};
@@ -1,6 +0,0 @@
1
- import{a as e,n as t,r as n,s as r,t as i}from"./precisionRound-Bq_nmf5u.js";import{i as a,n as o,r as s,t as c}from"./defaultLocale-CNPGWpMu.js";import{C as l,E as u,P as d,S as f,T as p,_ as m,a as ee,c as h,d as g,i as te,l as ne,n as re,o as ie,p as ae,r as oe,s as se,t as ce,v as le,w as ue,x as _,y as v}from"./defaultLocale-D5bOh7g6.js";function y(e,t,n){return Object.assign(e,{fields:t||[],fname:n})}function de(e){return e==null?null:e.fname}function fe(e){return e==null?null:e.fields}function pe(e){return e.length===1?me(e[0]):he(e)}var me=e=>function(t){return t[e]},he=e=>{let t=e.length;return function(n){for(let r=0;r<t;++r)n=n[e[r]];return n}};function b(e){throw Error(e)}function ge(e){let t=[],n=e.length,r=null,i=0,a=``,o,s,c;e+=``;function l(){t.push(a+e.substring(o,s)),a=``,o=s+1}for(o=s=0;s<n;++s)if(c=e[s],c===`\\`)a+=e.substring(o,s++),o=s;else if(c===r)l(),r=null,i=-1;else if(r)continue;else o===i&&c===`"`||o===i&&c===`'`?(o=s+1,r=c):c===`.`&&!i?s>o?l():o=s+1:c===`[`?(s>o&&l(),i=o=s+1):c===`]`&&(i||b(`Access path missing open bracket: `+e),i>0&&l(),i=0,o=s+1);return i&&b(`Access path missing closing bracket: `+e),r&&b(`Access path missing closing quote: `+e),s>o&&(s++,l()),t}function x(e,t,n){let r=ge(e),i=r.length===1?r[0]:e;return y((n&&n.get||pe)(r),[i],t||i)}var _e=x(`id`),ve=y(e=>e,[],`identity`),S=y(()=>0,[],`zero`),ye=y(()=>1,[],`one`),be=y(()=>!0,[],`true`),xe=y(()=>!1,[],`false`),Se=new Set([...Object.getOwnPropertyNames(Object.prototype).filter(e=>typeof Object.prototype[e]==`function`),`__proto__`,`then`]),C=Array.isArray;function w(e){return e===Object(e)}var Ce=e=>e!==`__proto__`&&e!==`constructor`&&e!==`prototype`;function we(...e){return e.reduce((e,t)=>{for(let n in t)if(n===`signals`)e.signals=Ee(e.signals,t.signals);else{let r=n===`legend`?{layout:1}:n===`style`||null;Te(e,n,t[n],r)}return e},{})}function Te(e,t,n,r){if(!Ce(t))return;let i=e,a,o;if(w(n)&&!C(n)){let e=n;for(a in o=w(i[t])?i[t]:i[t]={},e)r&&(r===!0||r[a])?Te(o,a,e[a]):Ce(a)&&(o[a]=e[a])}else i[t]=n}function Ee(e,t){if(e==null)return t;if(t==null)return e;let n={},r=[];function i(e){n[e.name]||(n[e.name]=1,r.push(e))}return t.forEach(i),e.forEach(i),r}function De(e){return e[e.length-1]}function Oe(e){return e==null||e===``?null:+e}function T(e){return e==null?[]:C(e)?e:[e]}function E(e){return typeof e==`function`}var ke=`descending`;function Ae(e,t,n){let r=n||{},i=T(t)||[],a=[],o=[],s={},c=r.comparator||Me;return T(e).forEach((e,t)=>{if(e==null)return;a.push(i[t]===ke?-1:1);let n=E(e)?e:x(e,void 0,r);o.push(n),(fe(n)||[]).forEach(e=>s[e]=1)}),o.length===0?null:y(c(o,a),Object.keys(s))}var je=(e,t)=>{let n=e,r=t;return(n<r||n==null)&&r!=null?-1:(n>r||r==null)&&n!=null?1:(r=r instanceof Date?+r:r,(n=n instanceof Date?+n:n)!==n&&r===r?-1:+(r!==r&&n===n))},Me=(e,t)=>e.length===1?Ne(e[0],t[0]):Pe(e,t,e.length),Ne=(e,t)=>function(n,r){return je(e(n),e(r))*t},Pe=(e,t,n)=>(t.push(0),function(r,i){let a,o=0,s=-1;for(;o===0&&++s<n;)a=e[s],o=je(a(r),a(i));return o*t[s]});function Fe(e){return E(e)?e:()=>e}function D(e,...t){for(let n of t)for(let t in n)e[t]=n[t];return e}function O(e,t){return Object.hasOwn(e,t)}function Ie(e){return Object.prototype.toString.call(e)===`[object Date]`}function Le(e){return e!=null&&E(e[Symbol.iterator])}function Re(e){return typeof e==`number`}function k(e){return typeof e==`string`}function ze(e,t,n){let r=e?t?T(e).map(e=>e.replace(/\\(.)/g,`$1`)):T(e):void 0,i=r?.length,a=n&&n.get||pe,o=e=>a(t?[e]:ge(e)),s;if(!i||!r)s=function(){return``};else if(i===1){let e=o(r[0]);s=function(t){return``+e(t)}}else{let e=r.map(o);s=function(t){let n=``+e[0](t),r=0;for(;++r<i;)n+=`|`+e[r](t);return n}}return y(s,r,`key`)}function Be(e){return e&&De(e)-e[0]||0}function Ve(e){return C(e)?`[${e.map(e=>e===null?`null`:Ve(e))}]`:w(e)||k(e)?JSON.stringify(e).replaceAll(`\u2028`,`\\u2028`).replaceAll(`\u2029`,`\\u2029`):e}function He(e){return e==null||e===``?null:!e||e===`false`||e===`0`?!1:!!e}var Ue=e=>Re(e)||Ie(e)?e:Date.parse(e);function We(e,t){return t||=Ue,e==null||e===``?null:t(e)}function Ge(e){return e==null||e===``?null:e+``}function Ke(e){let t={},n=e.length;for(let r=0;r<n;++r)t[e[r]+``]=!0;return t}var qe={},Je={},Ye=34,A=10,Xe=13;function Ze(e){return Function(`d`,`return {`+e.map(function(e,t){return JSON.stringify(e)+`: d[`+t+`] || ""`}).join(`,`)+`}`)}function Qe(e,t){var n=Ze(e);return function(r,i){return t(n(r),i,e)}}function $e(e){var t=Object.create(null),n=[];return e.forEach(function(e){for(var r in e)r in t||n.push(t[r]=r)}),n}function j(e,t){var n=e+``,r=n.length;return r<t?Array(t-r+1).join(0)+n:n}function et(e){return e<0?`-`+j(-e,6):e>9999?`+`+j(e,6):j(e,4)}function tt(e){var t=e.getUTCHours(),n=e.getUTCMinutes(),r=e.getUTCSeconds(),i=e.getUTCMilliseconds();return isNaN(e)?`Invalid Date`:et(e.getUTCFullYear(),4)+`-`+j(e.getUTCMonth()+1,2)+`-`+j(e.getUTCDate(),2)+(i?`T`+j(t,2)+`:`+j(n,2)+`:`+j(r,2)+`.`+j(i,3)+`Z`:r?`T`+j(t,2)+`:`+j(n,2)+`:`+j(r,2)+`Z`:n||t?`T`+j(t,2)+`:`+j(n,2)+`Z`:``)}function nt(e){var t=RegExp(`["`+e+`
2
- \r]`),n=e.charCodeAt(0);function r(e,t){var n,r,a=i(e,function(e,i){if(n)return n(e,i-1);r=e,n=t?Qe(e,t):Ze(e)});return a.columns=r||[],a}function i(e,t){var r=[],i=e.length,a=0,o=0,s,c=i<=0,l=!1;e.charCodeAt(i-1)===A&&--i,e.charCodeAt(i-1)===Xe&&--i;function u(){if(c)return Je;if(l)return l=!1,qe;var t,r=a,o;if(e.charCodeAt(r)===Ye){for(;a++<i&&e.charCodeAt(a)!==Ye||e.charCodeAt(++a)===Ye;);return(t=a)>=i?c=!0:(o=e.charCodeAt(a++))===A?l=!0:o===Xe&&(l=!0,e.charCodeAt(a)===A&&++a),e.slice(r+1,t-1).replace(/""/g,`"`)}for(;a<i;){if((o=e.charCodeAt(t=a++))===A)l=!0;else if(o===Xe)l=!0,e.charCodeAt(a)===A&&++a;else if(o!==n)continue;return e.slice(r,t)}return c=!0,e.slice(r,i)}for(;(s=u())!==Je;){for(var d=[];s!==qe&&s!==Je;)d.push(s),s=u();t&&(d=t(d,o++))==null||r.push(d)}return r}function a(t,n){return t.map(function(t){return n.map(function(e){return u(t[e])}).join(e)})}function o(t,n){return n??=$e(t),[n.map(u).join(e)].concat(a(t,n)).join(`
3
- `)}function s(e,t){return t??=$e(e),a(e,t).join(`
4
- `)}function c(e){return e.map(l).join(`
5
- `)}function l(t){return t.map(u).join(e)}function u(e){return e==null?``:e instanceof Date?tt(e):t.test(e+=``)?`"`+e.replace(/"/g,`""`)+`"`:e}return{parse:r,parseRows:i,format:o,formatBody:s,formatRows:c,formatRow:l,formatValue:u}}function rt(e){return e}function it(e){if(e==null)return rt;var t,n,r=e.scale[0],i=e.scale[1],a=e.translate[0],o=e.translate[1];return function(e,s){s||(t=n=0);var c=2,l=e.length,u=Array(l);for(u[0]=(t+=e[0])*r+a,u[1]=(n+=e[1])*i+o;c<l;)u[c]=e[c],++c;return u}}function at(e,t){for(var n,r=e.length,i=r-t;i<--r;)n=e[i],e[i++]=e[r],e[r]=n}function ot(e,t){return typeof t==`string`&&(t=e.objects[t]),t.type===`GeometryCollection`?{type:`FeatureCollection`,features:t.geometries.map(function(t){return st(e,t)})}:st(e,t)}function st(e,t){var n=t.id,r=t.bbox,i=t.properties==null?{}:t.properties,a=ct(e,t);return n==null&&r==null?{type:`Feature`,properties:i,geometry:a}:r==null?{type:`Feature`,id:n,properties:i,geometry:a}:{type:`Feature`,id:n,bbox:r,properties:i,geometry:a}}function ct(e,t){var n=it(e.transform),r=e.arcs;function i(e,t){t.length&&t.pop();for(var i=r[e<0?~e:e],a=0,o=i.length;a<o;++a)t.push(n(i[a],a));e<0&&at(t,o)}function a(e){return n(e)}function o(e){for(var t=[],n=0,r=e.length;n<r;++n)i(e[n],t);return t.length<2&&t.push(t[0]),t}function s(e){for(var t=o(e);t.length<4;)t.push(t[0]);return t}function c(e){return e.map(s)}function l(e){var t=e.type,n;switch(t){case`GeometryCollection`:return{type:t,geometries:e.geometries.map(l)};case`Point`:n=a(e.coordinates);break;case`MultiPoint`:n=e.coordinates.map(a);break;case`LineString`:n=o(e.arcs);break;case`MultiLineString`:n=e.arcs.map(o);break;case`Polygon`:n=c(e.arcs);break;case`MultiPolygon`:n=e.arcs.map(c);break;default:return null}return{type:t,coordinates:n}}return l(t)}function lt(e,t){var n={},r={},i={},a=[],o=-1;t.forEach(function(n,r){var i=e.arcs[n<0?~n:n],a;i.length<3&&!i[1][0]&&!i[1][1]&&(a=t[++o],t[o]=n,t[r]=a)}),t.forEach(function(e){var t=s(e),n=t[0],a=t[1],o,c;if(o=i[n]){if(delete i[o.end],o.push(e),o.end=a,c=r[a]){delete r[c.start];var l=c===o?o:o.concat(c);r[l.start=o.start]=i[l.end=c.end]=l}else r[o.start]=i[o.end]=o}else if(o=r[a]){if(delete r[o.start],o.unshift(e),o.start=n,c=i[n]){delete i[c.end];var u=c===o?o:c.concat(o);r[u.start=c.start]=i[u.end=o.end]=u}else r[o.start]=i[o.end]=o}else o=[e],r[o.start=n]=i[o.end=a]=o});function s(t){var n=e.arcs[t<0?~t:t],r=n[0],i;return e.transform?(i=[0,0],n.forEach(function(e){i[0]+=e[0],i[1]+=e[1]})):i=n[n.length-1],t<0?[i,r]:[r,i]}function c(e,t){for(var r in e){var i=e[r];delete t[i.start],delete i.start,delete i.end,i.forEach(function(e){n[e<0?~e:e]=1}),a.push(i)}}return c(i,r),c(r,i),t.forEach(function(e){n[e<0?~e:e]||a.push([e])}),a}function ut(e){return ct(e,dt.apply(this,arguments))}function dt(e,t,n){var r,i,a;if(arguments.length>1)r=ft(e,t,n);else for(i=0,r=Array(a=e.arcs.length);i<a;++i)r[i]=i;return{type:`MultiLineString`,arcs:lt(e,r)}}function ft(e,t,n){var r=[],i=[],a;function o(e){var t=e<0?~e:e;(i[t]||(i[t]=[])).push({i:e,g:a})}function s(e){e.forEach(o)}function c(e){e.forEach(s)}function l(e){e.forEach(c)}function u(e){switch(a=e,e.type){case`GeometryCollection`:e.geometries.forEach(u);break;case`LineString`:s(e.arcs);break;case`MultiLineString`:case`Polygon`:c(e.arcs);break;case`MultiPolygon`:l(e.arcs)}}return u(t),i.forEach(n==null?function(e){r.push(e[0].i)}:function(e){n(e[0].g,e[e.length-1].g)&&r.push(e[0].i)}),r}var M=`year`,N=`quarter`,P=`month`,F=`week`,I=`isoweek`,L=`date`,R=`dayofyear`,z=`hours`,B=`minutes`,V=`seconds`,H=`milliseconds`,pt=[M,N,P,F,I,L,`day`,R,z,B,V,H],mt=pt.reduce((e,t,n)=>(e[t]=1+n,e),{});function ht(e){let t=T(e).slice(),n={};return t.length||b(`Missing time unit.`),t.forEach(e=>{O(mt,e)?n[e]=1:b(`Invalid time unit: ${e}.`)}),((n.week||n.isoweek||n.day?1:0)+(n.quarter||n.month||n.date?1:0)+ +!!n.dayofyear>1||n.week&&n.isoweek)&&b(`Incompatible time units: ${e}`),t.sort((e,t)=>mt[e]-mt[t]),t}var gt={[M]:`%Y `,[N]:`Q%q `,[P]:`%b `,[L]:`%d `,[F]:`W%U `,[I]:`W%V `,day:`%a `,[R]:`%j `,[z]:`%H:00`,[B]:`00:%M`,[V]:`:%S`,[H]:`.%L`,[`${M}-${I}`]:`%G W%V `,[`${M}-${P}`]:`%Y-%m `,[`${M}-${P}-${L}`]:`%Y-%m-%d `,[`${z}-${B}`]:`%H:%M`};function _t(e,t){let n=D({},gt,t),r=ht(e),i=r.length,a=``,o=0,s,c;for(o=0;o<i;)for(s=r.length;s>o;--s)if(c=r.slice(o,s).join(`-`),n[c]!=null){a+=n[c],o=s;break}return a.trim()}var U=new Date;function vt(e){return U.setFullYear(e),U.setMonth(0),U.setDate(1),U.setHours(0,0,0,0),U}function yt(e){return St(new Date(e))}function bt(e){return Ct(new Date(e))}function xt(e){return Tt(new Date(e))}function St(e){return v.count(vt(e.getFullYear())-1,e)}function Ct(e){return ae.count(vt(e.getFullYear())-1,e)}function wt(e){return v.offset(g.floor(e),3).getFullYear()}function Tt(e){return 1+g.count(Et(wt(e)),e)}function Et(e){return g.floor(v.offset(vt(e),3))}function Dt(e){let t=Et(e);return t.getMonth()?t.getDate()-31:t.getDate()}function Ot(e){return vt(e).getDay()}function kt(e,t,n,r,i,a,o){if(0<=e&&e<100){let s=new Date(-1,t,n,r,i,a,o);return s.setFullYear(e),s}return new Date(e,t,n,r,i,a,o)}function At(e){return Nt(new Date(e))}function jt(e){return Pt(new Date(e))}function Mt(e){return It(new Date(e))}function Nt(e){let t=Date.UTC(e.getUTCFullYear(),0,1);return _.count(t-1,e)}function Pt(e){let t=Date.UTC(e.getUTCFullYear(),0,1);return le.count(t-1,e)}function Ft(e){return _.offset(m.floor(e),3).getUTCFullYear()}function It(e){return 1+m.count(Lt(Ft(e)),e)}function Lt(e){return m.floor(_.offset(Date.UTC(e,0,1),3))}function Rt(e){let t=Lt(e);return t.getUTCMonth()?t.getUTCDate()-31:t.getUTCDate()}function zt(e){return U.setTime(Date.UTC(e,0,1)),U.getUTCDay()}function Bt(e,t,n,r,i,a,o){if(0<=e&&e<100){let e=new Date(Date.UTC(-1,t,n,r,i,a,o));return e.setUTCFullYear(n.y),e}return new Date(Date.UTC(e,t,n,r,i,a,o))}var Vt=2012,Ht=2015;function Ut(e,t,n,r,i){let a=t||1,o=De(e),s=(e,t,i)=>(i||=e,Wt(n[i],r[i],e===o&&a,t)),c=new Date,l=Ke(e),u=l.year?s(M,null,l.isoweek?M+I:M):Fe(l.isoweek?Ht:Vt),d=l.month?s(P):l.quarter?s(N):S,f=l.week&&l.day?s(`day`,1,F+`day`):l.isoweek&&l.day?s(`day`,1,I+`day`):l.week?s(F,1):l.isoweek?s(I,1):l.day?s(`day`,1):l.date?s(L,1):l.dayofyear?s(R,1):ye,p=l.hours?s(z):S,m=l.minutes?s(B):S,ee=l.seconds?s(V):S,h=l.milliseconds?s(H):S;return function(e){c.setTime(+e);let t=u(c);return i(t,d(c),f(c,t),p(c),m(c),ee(c),h(c))}}function Wt(e,t,n,r){let i=n<=1?e:r?(t,i)=>r+n*Math.floor((e(t,i)-r)/n):(t,r)=>n*Math.floor(e(t,r)/n);return t?(e,n)=>t(i(e,n),n):i}function W(e,t,n){return t+e*7-(n+6)%7}function Gt(e){return(e+6)%7}function Kt(e,t,n){return e+(t-1)*7+n}var qt={[M]:e=>e.getFullYear(),[N]:e=>Math.floor(e.getMonth()/3),[P]:e=>e.getMonth(),[L]:e=>e.getDate(),[z]:e=>e.getHours(),[B]:e=>e.getMinutes(),[V]:e=>e.getSeconds(),[H]:e=>e.getMilliseconds(),[R]:e=>St(e),[F]:e=>Ct(e),[F+`day`]:(e,t)=>W(Ct(e),e.getDay(),Ot(t)),day:(e,t)=>W(1,e.getDay(),Ot(t)),[I]:e=>Tt(e),[M+I]:e=>wt(e),[I+`day`]:(e,t)=>Kt(Dt(t),Tt(e),Gt(e.getDay()))},Jt={[N]:e=>3*e,[F]:(e,t)=>W(e,0,Ot(t)),[I]:(e,t)=>Kt(Dt(t),e,0)};function Yt(e,t){return Ut(e,t||1,qt,Jt,kt)}var Xt={[M]:e=>e.getUTCFullYear(),[N]:e=>Math.floor(e.getUTCMonth()/3),[P]:e=>e.getUTCMonth(),[L]:e=>e.getUTCDate(),[z]:e=>e.getUTCHours(),[B]:e=>e.getUTCMinutes(),[V]:e=>e.getUTCSeconds(),[H]:e=>e.getUTCMilliseconds(),[R]:e=>Nt(e),[F]:e=>Pt(e),day:(e,t)=>W(1,e.getUTCDay(),zt(t)),[F+`day`]:(e,t)=>W(Pt(e),e.getUTCDay(),zt(t)),[I]:e=>It(e),[M+I]:e=>Ft(e),[I+`day`]:(e,t)=>Kt(Rt(t),It(e),Gt(e.getUTCDay()))},Zt={[N]:e=>3*e,[F]:(e,t)=>W(e,0,zt(t)),[I]:(e,t)=>Kt(Rt(t),e,0)};function Qt(e,t){return Ut(e,t||1,Xt,Zt,Bt)}var $t={[M]:ie,[N]:h.every(3),[P]:h,[F]:ae,[I]:g,[L]:v,day:v,[R]:v,[z]:f,[B]:ue,[V]:u,[H]:d},en={[M]:se,[N]:ne.every(3),[P]:ne,[F]:le,[I]:m,[L]:_,day:_,[R]:_,[z]:l,[B]:p,[V]:u,[H]:d};function tn(e){return $t[e]}function nn(e){return en[e]}function rn(e,t,n){return e?e.offset(t,n):void 0}function an(e,t,n){return rn(tn(e),t,n)}function on(e,t,n){return rn(nn(e),t,n)}function sn(e,t,n,r){return e?e.range(t,n,r):void 0}function cn(e,t,n,r){return sn(tn(e),t,n,r)}function ln(e,t,n,r){return sn(nn(e),t,n,r)}var G=1e3,K=G*60,q=K*60,un=q*24,dn=un*7,fn=un*30,pn=un*365,mn=[M,P,L,z,B,V,H],J=mn.slice(0,-1),Y=J.slice(0,-1),X=Y.slice(0,-1),hn=X.slice(0,-1),gn=[M,F],_n=[M,P],vn=[M],Z=[[J,1,G],[J,5,5*G],[J,15,15*G],[J,30,30*G],[Y,1,K],[Y,5,5*K],[Y,15,15*K],[Y,30,30*K],[X,1,q],[X,3,3*q],[X,6,6*q],[X,12,12*q],[hn,1,un],[gn,1,dn],[_n,1,fn],[_n,3,3*fn],[vn,1,pn]];function yn(t){let n=t.extent,i=t.maxbins||40,a=Math.abs(Be(n))/i,o=r(e=>e[2]).right(Z,a),s,c;return o===Z.length?(s=vn,c=e(n[0]/pn,n[1]/pn,i)):o?(o=Z[a/Z[o-1][2]<Z[o][2]/a?o-1:o],s=o[0],c=o[1]):(s=mn,c=Math.max(e(n[0],n[1],i),1)),{units:s,step:c}}function Q(e){let t={};return n=>t[n]||(t[n]=e(n))}function bn(e,t){return n=>{let r=e(n),i=r.indexOf(t);if(i<0)return r;let a=xn(r,i),o=a<r.length?r.slice(a):``;for(;--a>i;)if(r[a]!==`0`){++a;break}return r.slice(0,a)+o}}function xn(e,t){let n=e.lastIndexOf(`e`),r;if(n>0)return n;for(n=e.length;--n>t;)if(r=e.charCodeAt(n),r>=48&&r<=57)return n+1}function Sn(r){let o=Q(r.format),s=r.formatPrefix;return{format:o,formatPrefix:s,formatFloat(e){let t=a(e||`,`);if(t.precision==null){switch(t.precision=12,t.type){case`%`:t.precision-=2;break;case`e`:--t.precision}return bn(o(t),o(`.1f`)(1)[1])}return o(t)},formatSpan(r,c,l,u){u=a(u??`,f`);let d=e(r,c,l),f=Math.max(Math.abs(r),Math.abs(c)),p;if(u.precision==null)switch(u.type){case`s`:return isNaN(p=t(d,f))||(u.precision=p),s(u,f);case``:case`e`:case`g`:case`p`:case`r`:isNaN(p=i(d,f))||(u.precision=p-(u.type===`e`));break;case`f`:case`%`:isNaN(p=n(d))||(u.precision=p-(u.type===`%`)*2)}return o(u)}}}var Cn;wn();function wn(){return Cn=Sn({format:c,formatPrefix:o})}function Tn(e){return Sn(s(e))}function En(e){return arguments.length?Cn=Tn(e):Cn}function Dn(e,t,n){n||={},w(n)||b(`Invalid time multi-format specifier: ${n}`);let r=t(V),i=t(B),a=t(z),o=t(L),s=t(F),c=t(P),l=t(N),u=t(M),d=e(n.milliseconds||`.%L`),f=e(n.seconds||`:%S`),p=e(n.minutes||`%I:%M`),m=e(n.hours||`%I %p`),ee=e(n.date||n.day||`%a %d`),h=e(n.week||`%b %d`),g=e(n.month||`%B`),te=e(n.quarter||`%B`),ne=e(n.year||`%Y`);return e=>(r(e)<e?d:i(e)<e?f:a(e)<e?p:o(e)<e?m:c(e)<e?s(e)<e?ee:h:u(e)<e?l(e)<e?g:te:ne)(e)}function On(e){let t=Q(e.format),n=Q(e.utcFormat);return{timeFormat:e=>k(e)?t(e):Dn(t,tn,e),utcFormat:e=>k(e)?n(e):Dn(n,nn,e),timeParse:Q(e.parse),utcParse:Q(e.utcParse)}}var kn;An();function An(){return kn=On({format:ce,parse:re,utcFormat:oe,utcParse:te})}function jn(e){return On(ee(e))}function $(e){return arguments.length?kn=jn(e):kn}var Mn=(e,t)=>D({},e,t);function Nn(e,t){return Mn(e?Tn(e):En(),t?jn(t):$())}function Pn(e,t){let n=arguments.length;return n&&n!==2&&b(`defaultLocale expects either zero or two arguments.`),n?Mn(En(e),$(t)):Mn(En(),$())}function Fn(){return wn(),An(),Pn()}var In=/^(data:|([A-Za-z]+:)?\/\/)/,Ln=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,Rn=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,zn=`file://`;function Bn(e){return t=>({options:t||{},sanitize:Hn,load:Vn,fileAccess:!1,file:Un(e),http:Gn})}async function Vn(e,t){let n=await this.sanitize(e,t),r=n.href;return n.localFile?this.file(r):this.http(r,t?.http)}async function Hn(e,t){t=D({},this.options,t);let n=this.fileAccess,r={href:null},i,a,o,s=Ln.test(e.replace(Rn,``));(e==null||typeof e!=`string`||!s)&&b(`Sanitize failure, invalid URI: `+Ve(e));let c=In.test(e);return(o=t.baseURL)&&!c&&(!e.startsWith(`/`)&&!o.endsWith(`/`)&&(e=`/`+e),e=o+e),a=(i=e.startsWith(zn))||t.mode===`file`||t.mode!==`http`&&!c&&n,i?e=e.slice(7):e.startsWith(`//`)&&(t.defaultProtocol===`file`?(e=e.slice(2),a=!0):e=(t.defaultProtocol||`http`)+`:`+e),Object.defineProperty(r,"localFile",{value:!!a}),r.href=e,t.target&&(r.target=t.target+``),t.rel&&(r.rel=t.rel+``),t.context===`image`&&t.crossOrigin&&(r.crossOrigin=t.crossOrigin+``),r}function Un(e){return e?t=>new Promise((n,r)=>{e.readFile(t,(e,t)=>{e?r(e):n(t)})}):Wn}async function Wn(){b(`No file system access.`)}async function Gn(e,t){let n=D({},this.options.http,t),r=t&&t.response,i=await fetch(e,n);return i.ok?E(i[r])?i[r]():i.text():b(i.status+``+i.statusText)}var Kn=e=>e!=null&&e===e,qn=e=>e===`true`||e===`false`||e===!0||e===!1,Jn=e=>!Number.isNaN(Date.parse(e)),Yn=e=>!Number.isNaN(+e)&&!(e instanceof Date),Xn=e=>Yn(e)&&Number.isInteger(+e),Zn={boolean:He,integer:Oe,number:Oe,date:We,string:Ge,unknown:ve},Qn=[qn,Xn,Yn,Jn],$n=[`boolean`,`integer`,`number`,`date`];function er(e,t){if(!e||!e.length)return`unknown`;let n=e.length,r=Qn.length,i=Qn.map((e,t)=>t+1);for(let a=0,o=0,s,c;a<n;++a)for(c=t?e[a][t]:e[a],s=0;s<r;++s)if(i[s]&&Kn(c)&&!Qn[s](c)&&(i[s]=0,++o,o===Qn.length))return`string`;return $n[i.reduce((e,t)=>e===0?t:e,0)-1]}function tr(e,t){return t.reduce((t,n)=>(t[n]=er(e,n),t),{})}function nr(e){let t=function(t,n){let r={delimiter:e};return rr(t,n?D(n,r):r)};return t.responseType=`text`,t}function rr(e,t){return t.header&&(e=t.header.map(Ve).join(t.delimiter)+`
6
- `+e),nt(t.delimiter).parse(e+``)}rr.responseType=`text`;function ir(e){return typeof Buffer==`function`&&E(Buffer.isBuffer)?Buffer.isBuffer(e):!1}function ar(e,t){let n=t&&t.property?x(t.property):ve;return w(e)&&!ir(e)?or(n(e),t):n(JSON.parse(e))}ar.responseType=`json`;function or(e,t){return!C(e)&&Le(e)&&(e=[...e]),t&&t.copy?JSON.parse(JSON.stringify(e)):e}var sr={interior:(e,t)=>e!==t,exterior:(e,t)=>e===t};function cr(e,t){let n,r,i,a;return e=ar(e,t),t&&t.feature?(n=ot,i=t.feature):t&&t.mesh?(n=ut,i=t.mesh,a=sr[t.filter]):b(`Missing TopoJSON feature or mesh parameter.`),r=(r=e.objects[i])?n(e,r,a):b(`Invalid TopoJSON object: `+i),r&&r.features||[r]}cr.responseType=`json`;var lr={dsv:rr,csv:nr(`,`),tsv:nr(` `),json:ar,topojson:cr};function ur(e,t){return arguments.length>1?(lr[e]=t,this):O(lr,e)?lr[e]:null}function dr(e){let t=ur(e);return t&&t.responseType||`text`}function fr(e,t,n,r){t||={};let i=ur(t.type||`json`);return i||b(`Unknown data format type: `+t.type),e=i(e,t),t.parse&&pr(e,t.parse,n,r),O(e,`columns`)&&delete e.columns,e}function pr(e,t,n,r){if(!e.length)return;let i=$();n||=i.timeParse,r||=i.utcParse;let a=e.columns||Object.keys(e[0]),o,s,c,l,u,d;t===`auto`&&(t=tr(e,a)),a=Object.keys(t);let f=a.map(e=>{let i=t[e],a,o;if(i&&(i.startsWith(`date:`)||i.startsWith(`utc:`)))return a=i.split(/:(.+)?/,2),o=a[1],(o[0]===`'`&&o[o.length-1]===`'`||o[0]===`"`&&o[o.length-1]===`"`)&&(o=o.slice(1,-1)),(a[0]===`utc`?r:n)(o);if(!Zn[i])throw Error(`Illegal format pattern: `+e+`:`+i);return Zn[i]});for(c=0,u=e.length,d=a.length;c<u;++c)for(o=e[c],l=0;l<d;++l)s=a[l],o[s]=f[l](o[s])}var mr=Bn(null);export{Te as $,jt as A,Re as B,ht as C,ln as D,on as E,He as F,Fe as G,Ie as H,Ve as I,E as J,je as K,Be as L,Ke as M,Ge as N,At as O,We as P,we as Q,ze as R,_t as S,nn as T,O as U,Le as V,D as W,Oe as X,T as Y,De as Z,xt as _,mr as a,ve as at,an as b,Zn as c,S as ct,En as d,b as dt,w as et,Fn as f,y as ft,yt as g,yn as h,tr as i,_e as it,bt as j,Mt as k,Pn as l,x as lt,pt as m,de as mt,ur as n,Se as nt,fr as o,ye as ot,$ as p,fe as pt,Ae as q,er as r,xe as rt,dr as s,be as st,lr as t,C as tt,Nn as u,ge as ut,Yt as v,Qt as w,cn as x,tn as y,k as z};
@@ -1,22 +0,0 @@
1
- (!globalThis.EventTarget||!globalThis.Event)&&console.error(`
2
- PartySocket requires a global 'EventTarget' class to be available!
3
- You can polyfill this global by adding this to your code before any partysocket imports:
4
-
5
- \`\`\`
6
- import 'partysocket/event-target-polyfill';
7
- \`\`\`
8
- Please file an issue at https://github.com/partykit/partykit if you're still having trouble.
9
- `);var e=class extends Event{message;error;constructor(e,t){super(`error`,t),this.message=e.message,this.error=e}},t=class extends Event{code;reason;wasClean=!0;constructor(e=1e3,t=``,n){super(`close`,n),this.code=e,this.reason=t}},n={Event,ErrorEvent:e,CloseEvent:t};function r(e,t){if(!e)throw Error(t)}function i(e){return new e.constructor(e.type,e)}function a(n){return`data`in n?new MessageEvent(n.type,n):`code`in n||`reason`in n?new t(n.code||1999,n.reason||`unknown reason`,n):`error`in n?new e(n.error,n):new Event(n.type,n)}var o=typeof process<`u`&&process.versions?.node!==void 0,s=typeof navigator<`u`&&navigator.product===`ReactNative`,c=o||s?a:i,l={maxReconnectionDelay:1e4,minReconnectionDelay:3e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},u=!1;function d(){}var f=class e extends EventTarget{_ws;_retryCount=-1;_uptimeTimeout;_connectTimeout;_shouldReconnect=!0;_connectLock=!1;_binaryType=`blob`;_closeCalled=!1;_didWarnAboutClosedSend=!1;_messageQueue=[];_debugLogger=console.log.bind(console);_url;_protocols;_options;constructor(e,t,n={}){super(),this._url=e,this._protocols=t,this._options=n,this._options.startClosed&&(this._shouldReconnect=!1),this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return e.CONNECTING}get OPEN(){return e.OPEN}get CLOSING(){return e.CLOSING}get CLOSED(){return e.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(e){this._binaryType=e,this._ws&&(this._ws.binaryType=e)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((e,t)=>(typeof t==`string`?e+=t.length:t instanceof Blob?e+=t.size:e+=t.byteLength,e),0)+(this._ws?this._ws.bufferedAmount:0)}get extensions(){return this._ws?this._ws.extensions:``}get protocol(){return this._ws?this._ws.protocol:``}get readyState(){return this._closeCalled?e.CLOSED:this._ws?this._ws.readyState:this._options.startClosed?e.CLOSED:e.CONNECTING}get url(){return this._ws?this._ws.url:``}get shouldReconnect(){return this._shouldReconnect}onclose=null;onerror=null;onmessage=null;onopen=null;close(e=1e3,t){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug(`close enqueued: no ws instance`);return}if(this._ws.readyState===this.CLOSED||this._ws.readyState===this.CLOSING){this._debug(`close: already closing or closed`);return}this._disconnect(e,t)}reconnect(e,t){this._shouldReconnect=!0,this._closeCalled=!1,this._didWarnAboutClosedSend=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED||this._ws.readyState===this.CLOSING||this._disconnect(e,t),this._connect()}send(e){if(this._ws&&this._ws.readyState===this.OPEN)return this._debug(`send`,e),this._ws.send(e),!0;this._closeCalled&&!this._didWarnAboutClosedSend&&(this._didWarnAboutClosedSend=!0,console.warn(`ReconnectingWebSocket: send() was called after close(). The message has been buffered, but it will only be delivered if reconnect() is called on this socket. If this socket has been discarded, the message is lost — this usually means a stale socket reference is being used.`));let{maxEnqueuedMessages:t=l.maxEnqueuedMessages}=this._options;return this._messageQueue.length<t&&(this._debug(`enqueue`,e),this._messageQueue.push(e)),!1}drainQueuedMessages(){let e=this._messageQueue;return this._messageQueue=[],e}_debug(...e){this._options.debug&&this._debugLogger(`RWS>`,...e)}_getNextDelay(){let{reconnectionDelayGrowFactor:e=l.reconnectionDelayGrowFactor,minReconnectionDelay:t=l.minReconnectionDelay,maxReconnectionDelay:n=l.maxReconnectionDelay}=this._options,r=0;return this._retryCount>0&&(r=t*e**(this._retryCount-1),r>n&&(r=n)),this._debug(`next delay`,r),r}_wait(){return new Promise(e=>{setTimeout(e,this._getNextDelay())})}_getNextProtocols(e){if(!e)return Promise.resolve(null);if(typeof e==`string`||Array.isArray(e))return Promise.resolve(e);if(typeof e==`function`){let t=e();if(!t)return Promise.resolve(null);if(typeof t==`string`||Array.isArray(t))return Promise.resolve(t);if(t.then)return t}throw Error(`Invalid protocols`)}_getNextUrl(e){if(typeof e==`string`)return Promise.resolve(e);if(typeof e==`function`){let t=e();if(typeof t==`string`)return Promise.resolve(t);if(t.then)return t}throw Error(`Invalid URL`)}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:e=l.maxRetries,connectionTimeout:t=l.connectionTimeout}=this._options;if(this._retryCount>=e){this._debug(`max retries reached`,this._retryCount,`>=`,e),this._connectLock=!1;return}this._retryCount++,this._debug(`connect`,this._retryCount),this._removeListeners(),this._wait().then(()=>Promise.all([this._getNextUrl(this._url),this._getNextProtocols(this._protocols||null)])).then(([e,n])=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>`u`&&!u&&(console.error(`‼️ No WebSocket implementation available. You should define options.WebSocket.
10
-
11
- For example, if you're using node.js, run \`npm install ws\`, and then in your code:
12
-
13
- import PartySocket from 'partysocket';
14
- import WS from 'ws';
15
-
16
- const partysocket = new PartySocket({
17
- host: "127.0.0.1:1999",
18
- room: "test-room",
19
- WebSocket: WS
20
- });
21
-
22
- `),u=!0);let r=this._options.WebSocket||WebSocket;this._debug(`connect`,{url:e,protocols:n}),this._ws=n?new r(e,n):new r(e),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),t)}).catch(e=>{this._connectLock=!1,this._handleError(new n.ErrorEvent(Error(e.message),this))})}_handleTimeout(){this._debug(`timeout event`),this._handleError(new n.ErrorEvent(Error(`TIMEOUT`),this))}_disconnect(e=1e3,t){if(this._clearTimeouts(),this._ws){this._removeListeners();try{(this._ws.readyState===this.OPEN||this._ws.readyState===this.CONNECTING)&&this._ws.close(e,t),this._handleClose(new n.CloseEvent(e,t,this))}catch{}}}_acceptOpen(){this._debug(`accept open`),this._retryCount=0}_handleOpen=e=>{this._debug(`open event`);let{minUptime:t=l.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),t),r(this._ws,`WebSocket is not defined`),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(e=>{this._ws?.send(e)}),this._messageQueue=[],this.onopen&&this.onopen(e),this.dispatchEvent(c(e))};_handleMessage=e=>{this._debug(`message event`),this.onmessage&&this.onmessage(e),this.dispatchEvent(c(e))};_handleError=e=>{this._debug(`error event`,e.message),this._disconnect(void 0,e.message===`TIMEOUT`?`timeout`:void 0),this.onerror&&this.onerror(e),this._debug(`exec error listeners`),this.dispatchEvent(c(e)),this._connect()};_handleClose=e=>{this._debug(`close event`),this._clearTimeouts(),this._options.shouldReconnectOnClose&&!this._options.shouldReconnectOnClose(e)&&(this._shouldReconnect=!1),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(e),this.dispatchEvent(c(e))};_removeListeners(){this._ws&&(this._debug(`removeListeners`),this._ws.removeEventListener(`open`,this._handleOpen),this._ws.removeEventListener(`close`,this._handleClose),this._ws.removeEventListener(`message`,this._handleMessage),this._ws.removeEventListener(`error`,this._handleError),this._ws.addEventListener(`error`,d))}_addListeners(){this._ws&&(this._debug(`addListeners`),this._ws.addEventListener(`open`,this._handleOpen),this._ws.addEventListener(`close`,this._handleClose),this._ws.addEventListener(`message`,this._handleMessage),this._ws.addEventListener(`error`,this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};export{f as t};
@@ -1,214 +0,0 @@
1
- /* Copyright 2026 Marimo. All rights reserved. */
2
-
3
- import NodeFs from "node:fs";
4
- import NodeUrl from "node:url";
5
- import { describe, expect, expectTypeOf, it } from "vitest";
6
- import * as Protocol from "../protocol";
7
-
8
- const fixtures = new NodeUrl.URL(
9
- "../../../../../protocols/host/fixtures/",
10
- import.meta.url,
11
- );
12
-
13
- function readFixture(name: string): unknown {
14
- return JSON.parse(
15
- NodeFs.readFileSync(new NodeUrl.URL(name, fixtures), "utf8"),
16
- );
17
- }
18
-
19
- const records = {
20
- "record.json": Protocol.HostRecord,
21
- "cell.json": Protocol.Cell,
22
- "analysis.json": Protocol.Analysis,
23
- "diagnostic.json": Protocol.Error,
24
- "edit.json": Protocol.EditRequest,
25
- "edit-conflict-request.json": Protocol.EditRequest,
26
- "edit-response.json": Protocol.EditResponse,
27
- "execution-restored.json": Protocol.Execution,
28
- "run-cells-request.json": Protocol.RunRequest,
29
- };
30
-
31
- describe("host protocol fixtures", () => {
32
- it.each(Object.entries(records))("parses %s unchanged", (name, schema) => {
33
- const input = readFixture(name);
34
- const original = structuredClone(input);
35
- expect(schema.parse(input)).toEqual(original);
36
- expect(input).toEqual(original);
37
- });
38
-
39
- it.each(NodeFs.readdirSync(new NodeUrl.URL("problems/", fixtures)))(
40
- "parses problem %s",
41
- (name) => {
42
- const input = readFixture(`problems/${name}`);
43
- expect(Protocol.Problem.parse(input)).toEqual(input);
44
- },
45
- );
46
-
47
- it.each(NodeFs.readdirSync(fixtures).filter((name) => name.endsWith(".sse")))(
48
- "parses events in %s unchanged",
49
- (name) => {
50
- const stream = NodeFs.readFileSync(
51
- new NodeUrl.URL(name, fixtures),
52
- "utf8",
53
- );
54
- let count = 0;
55
- for (const frame of stream.split(/\r?\n\r?\n/)) {
56
- const event = /^event: (.+)$/m.exec(frame)?.[1];
57
- if (!event && !/^data:/m.test(frame)) {
58
- continue;
59
- }
60
- const data = frame
61
- .split(/\r?\n/)
62
- .filter((line) => line.startsWith("data:"))
63
- .map((line) => line.slice(5).trimStart())
64
- .join("\n");
65
- const id = /^id: (.+)$/m.exec(frame)?.[1];
66
- const payload: unknown = JSON.parse(data);
67
- const input = { event, data: payload, ...(id ? { id } : {}) };
68
- const original = structuredClone(input);
69
- expect(Protocol.Event.parse(input)).toEqual(original);
70
- expect(input).toEqual(original);
71
- count += 1;
72
- }
73
- expect(count).toBeGreaterThan(0);
74
- },
75
- );
76
- });
77
-
78
- describe("host protocol bindings", () => {
79
- it("preserves native marimo payloads without interpreting them", () => {
80
- expectTypeOf<Protocol.MarimoEvent["data"]["marimo"]>().toBeUnknown();
81
- const input = {
82
- event: "marimo",
83
- id: "42",
84
- data: {
85
- marimo: {
86
- future_payload: { value: Number.NaN },
87
- },
88
- },
89
- };
90
- expect(Protocol.Event.parse(input)).toEqual(input);
91
- });
92
-
93
- it("accepts additive fields and preserves arbitrary notebook settings", () => {
94
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
95
- const input = {
96
- ...cell,
97
- future: { enabled: true },
98
- config: { ...cell.config, future: 42 },
99
- };
100
- const original = structuredClone(input);
101
- expect(Protocol.Cell.parse(input)).toEqual(cell);
102
- expect(input).toEqual(original);
103
-
104
- const { document } = Protocol.EditResponse.parse(
105
- readFixture("edit-response.json"),
106
- );
107
- const configured = {
108
- ...document,
109
- app_config: { extension: { values: [1, null, false] } },
110
- };
111
- expect(Protocol.Document.parse(configured)).toEqual(configured);
112
- });
113
-
114
- it("applies the defaults declared for cell inputs", () => {
115
- expect(
116
- Protocol.CellInput.parse({ id: "c3", code: "x = 1", config: {} }),
117
- ).toEqual({
118
- id: "c3",
119
- code: "x = 1",
120
- name: "_",
121
- config: {
122
- column: null,
123
- disabled: false,
124
- hide_code: false,
125
- expand_output: false,
126
- },
127
- });
128
- });
129
-
130
- it.each(["run_id", "runtime_id", "caused_by"] as const)(
131
- "requires the nullable execution field %s",
132
- (field) => {
133
- const execution = Protocol.Execution.parse(
134
- readFixture("execution-restored.json"),
135
- );
136
- const missing = Object.fromEntries(
137
- Object.entries(execution).filter(([key]) => key !== field),
138
- );
139
- expect(Protocol.Execution.safeParse(missing).success).toBe(false);
140
- expect(
141
- Protocol.Execution.safeParse({ ...execution, [field]: null }).success,
142
- ).toBe(true);
143
- },
144
- );
145
-
146
- it("preserves snapshot metadata omissions and validates live timestamps", () => {
147
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
148
- expect(Protocol.CellMessage.parse({ cell })).toEqual({ cell });
149
- const message = { cell, time: "2026-01-01T12:00:00+05:30" };
150
- expect(Protocol.CellMessage.parse(message)).toEqual(message);
151
- for (const time of [
152
- null,
153
- "yesterday",
154
- "2026-02-30T12:00:00Z",
155
- "2026-01-01T12:00:00",
156
- ]) {
157
- expect(Protocol.CellMessage.safeParse({ cell, time }).success).toBe(
158
- false,
159
- );
160
- }
161
- });
162
-
163
- it("rejects invalid cell fields without coercing their values", () => {
164
- const cell = Protocol.Cell.parse(readFixture("cell.json"));
165
- for (const patch of [
166
- { id: "" },
167
- { code: 42 },
168
- { etag: 42 },
169
- { version: "2" },
170
- { version: 0 },
171
- { version: 1.5 },
172
- { config: { ...cell.config, disabled: "false" } },
173
- ]) {
174
- expect(Protocol.Cell.safeParse({ ...cell, ...patch }).success).toBe(
175
- false,
176
- );
177
- }
178
- const result = Protocol.Cell.safeParse({ ...cell, code: 42 });
179
- expect(result.success).toBe(false);
180
- if (result.success) {
181
- throw new Error("Expected an invalid cell");
182
- }
183
- expect(result.error.issues).toEqual([
184
- expect.objectContaining({ path: ["code"], code: "invalid_type" }),
185
- ]);
186
- });
187
-
188
- it("requires the fields of the selected change kind", () => {
189
- const change = { kind: "delete_cell", id: "c3", base_etag: "*" };
190
- expect(Protocol.Change.parse(change)).toEqual(change);
191
- expect(
192
- Protocol.Change.safeParse({ kind: "delete_cell", id: "c3" }).success,
193
- ).toBe(false);
194
- expect(
195
- Protocol.Change.safeParse({ ...change, kind: "unknown" }).success,
196
- ).toBe(false);
197
- });
198
-
199
- it("requires custom payloads while allowing any JSON value", () => {
200
- for (const data of [
201
- null,
202
- false,
203
- 42,
204
- "text",
205
- { nested: [1, null, false] },
206
- ]) {
207
- const custom = { type: "example.event", data };
208
- expect(Protocol.Custom.parse(custom)).toEqual(custom);
209
- }
210
- expect(Protocol.Custom.safeParse({ type: "example.event" }).success).toBe(
211
- false,
212
- );
213
- });
214
- });