@opengeni/react 4.5.0 → 4.5.1-canary.39832248373001
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.
- package/dist/app/app-state.js +24 -24
- package/dist/app/components/Composer.js +20 -20
- package/dist/app/components/agent/agent-capability-picker.js +4 -4
- package/dist/app/components/artifacts/artifact-library.js +17 -17
- package/dist/app/components/artifacts/chat-interactive-block.js +15 -15
- package/dist/app/components/artifacts/inline-chat-image.js +27 -27
- package/dist/app/components/artifacts/retained-file-preview.js +30 -30
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-audience.js +4 -4
- package/dist/app/components/artifacts/site-conversations.js +20 -20
- package/dist/app/components/artifacts/site-data.js +19 -19
- package/dist/app/components/artifacts/site-publishing.js +36 -36
- package/dist/app/components/artifacts/site-settings.js +45 -45
- package/dist/app/components/billing-class-mark.js +4 -4
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +9 -9
- package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +11 -11
- package/dist/app/components/capabilities/perform-capability-action.js +1 -1
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +11 -11
- package/dist/app/components/capabilities/session-capability-card.js +71 -71
- package/dist/app/components/capabilities/session-chrome-card.js +30 -30
- package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
- package/dist/app/components/capabilities/session-github-card.js +21 -21
- package/dist/app/components/capabilities/session-machine-card.js +29 -29
- package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
- package/dist/app/components/command-menu/chat-status.js +14 -14
- package/dist/app/components/command-menu/chat-switcher.js +19 -19
- package/dist/app/components/command-menu/command-menu.js +28 -28
- package/dist/app/components/command-menu/shortcut-sheet.js +10 -10
- package/dist/app/components/composer-capabilities-menu-body.js +3 -3
- package/dist/app/components/composer-mobile-plus-panel.js +19 -19
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +10 -10
- package/dist/app/components/desktop/app-shots.js +1 -1
- package/dist/app/components/feedback.js +2 -2
- package/dist/app/components/follow-up-repository-menu-body.js +5 -5
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
- package/dist/app/components/machines/connect-machine-dialog.js +16 -16
- package/dist/app/components/markdown.js +8 -8
- package/dist/app/components/message-context-pills.js +2 -2
- package/dist/app/components/models/models-ui.js +7 -7
- package/dist/app/components/pickers.js +8 -8
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +57 -57
- package/dist/app/components/rail/session-header.js +45 -45
- package/dist/app/components/rail/session-list.js +55 -55
- package/dist/app/components/rail/session-row-hover-details.js +21 -21
- package/dist/app/components/rail/session-shell.js +93 -93
- package/dist/app/components/rail/site-session-group-heading.js +10 -10
- package/dist/app/components/repository-picker.js +5 -5
- package/dist/app/components/secrets/session-secrets-panel.js +3 -3
- package/dist/app/components/session/agent-configuration-panel.js +32 -32
- package/dist/app/components/session/artifact-session-page.js +2 -2
- package/dist/app/components/session/banners.js +10 -10
- package/dist/app/components/session/codex-account-indicator.js +9 -9
- package/dist/app/components/session/editable-artifacts-workspace.js +40 -40
- package/dist/app/components/session/failed-session-banner.js +6 -6
- package/dist/app/components/session/human-input.js +51 -51
- package/dist/app/components/session/inspector.js +80 -80
- package/dist/app/components/session/message-actions.js +2 -2
- package/dist/app/components/session/message-resource-attachments.js +18 -18
- package/dist/app/components/session/model-account-indicator.js +8 -8
- package/dist/app/components/session/model-context-inspector.js +2 -2
- package/dist/app/components/session/new-session-settings-menu.js +10 -10
- package/dist/app/components/session/sandbox-switcher.js +9 -9
- package/dist/app/components/session/sandbox-workspace.js +68 -68
- package/dist/app/components/session/search-markdown-highlight.js +9 -9
- package/dist/app/components/session/search-results-view.js +10 -10
- package/dist/app/components/session/session-admin-access.js +9 -9
- package/dist/app/components/session/session-admission-notice.js +2 -2
- package/dist/app/components/session/session-machine-access-notice.js +2 -2
- package/dist/app/components/session/session-retention.js +4 -4
- package/dist/app/components/session/session-search-dialog.js +10 -10
- package/dist/app/components/session/session-skill-reviews.js +1 -1
- package/dist/app/components/session/session-tenancy-control.js +22 -22
- package/dist/app/components/session/session-usage-limit-section.js +9 -9
- package/dist/app/components/session/session-wait-status.js +9 -9
- package/dist/app/components/session/subagents.js +13 -13
- package/dist/app/components/session-connectors-menu-body.js +5 -5
- package/dist/app/components/settings/row-select.js +1 -1
- package/dist/app/components/transcription-settings.js +2 -2
- package/dist/app/components/ui/destructive-confirm.js +6 -6
- package/dist/app/components/usage/usage-entry.js +4 -4
- package/dist/app/components/workspace-composer-plus.js +18 -18
- package/dist/app/embed/session-app.js +255 -255
- package/dist/app/lib/actions/actions-provider.js +10 -10
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +10 -10
- package/dist/app/lib/events.js +14 -14
- package/dist/app/lib/session-branch-cache.js +11 -11
- package/dist/app/lib/session-create.js +2 -2
- package/dist/app/lib/session-group-pagination.js +11 -11
- package/dist/app/lib/session-hover-facts.js +12 -12
- package/dist/app/lib/session-model.js +3 -3
- package/dist/app/lib/session-rail.js +9 -9
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/sessions-group.js +11 -11
- package/dist/app/lib/turn-failure-analytics.js +1 -1
- package/dist/app/lib/use-duplicate-site.js +2 -2
- package/dist/app/lib/use-follow-up-repositories.js +3 -3
- package/dist/app/lib/use-workspace-machines.js +2 -2
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +3 -3
- package/dist/app/lib/workspace-navigation-preference.js +1 -1
- package/dist/app/lib/workspace-scope-context.js +1 -1
- package/dist/app/routes/artifacts.js +125 -125
- package/dist/app/routes/retained-artifact.js +64 -64
- package/dist/app/routes/session-unavailable.js +3 -3
- package/dist/app/routes/session.js +160 -160
- package/dist/app/routes/sessions-index-hydration.js +3 -3
- package/dist/app/routes/sessions-index.js +112 -112
- package/dist/app/routes/site-view.js +83 -83
- package/dist/artifacts-document.js +2 -2
- package/dist/artifacts-presentation.js +2 -2
- package/dist/artifacts-spreadsheet.js +2 -2
- package/dist/artifacts.js +36 -36
- package/dist/{browser-viewer-QMCNV4RI.js → browser-viewer-VPK3CV2H.js} +6 -6
- package/dist/{chat-interactive-block-PMIAUXSO.js → chat-interactive-block-AMDSW656.js} +5 -5
- package/dist/{chunk-3STBLX4O.js → chunk-25LWDG5D.js} +5 -5
- package/dist/{chunk-MCTTONOW.js → chunk-2CKVVAGP.js} +22 -22
- package/dist/{chunk-J7FBBLHF.js → chunk-2DL6NJP5.js} +37 -37
- package/dist/{chunk-CFFNT2OY.js → chunk-3GLAPCVI.js} +8 -8
- package/dist/{chunk-BXQYAAVE.js → chunk-3XOISKZC.js} +4 -4
- package/dist/{chunk-N3ZP4IDU.js → chunk-45WYYFP6.js} +2 -2
- package/dist/{chunk-52WK2GGK.js → chunk-4MQLGMV2.js} +7 -7
- package/dist/{chunk-MXLKI7BI.js → chunk-4U4GXWXS.js} +2 -2
- package/dist/{chunk-3RMKPHBL.js → chunk-5HIOVXOX.js} +2 -2
- package/dist/{chunk-5W6ZDKRR.js → chunk-5M23GZA2.js} +4 -4
- package/dist/{chunk-S2U4CDAC.js → chunk-6AFSZKZA.js} +149 -149
- package/dist/chunk-6AFSZKZA.js.map +1 -0
- package/dist/{chunk-UUGR3X5I.js → chunk-6MRY2RUZ.js} +5 -5
- package/dist/{chunk-ZVVT72MT.js → chunk-6O4VWKSO.js} +2 -2
- package/dist/{chunk-FTX5CNHA.js → chunk-767WCGAX.js} +4 -4
- package/dist/{chunk-5JHRMUAZ.js → chunk-7IYAHFPE.js} +11 -11
- package/dist/{chunk-EJ7WARW7.js → chunk-7J7PZB4S.js} +2 -2
- package/dist/{chunk-RIYZFKIM.js → chunk-7PUFAH4I.js} +38 -38
- package/dist/{chunk-KEXYBG7Q.js → chunk-7R2JQHBX.js} +2 -2
- package/dist/{chunk-TV6BWONY.js → chunk-7VN6VC3D.js} +2 -2
- package/dist/{chunk-5FEN3KYH.js → chunk-A2E3ZF6N.js} +11 -11
- package/dist/{chunk-SM5QX6UK.js → chunk-A2EWJQXX.js} +4 -4
- package/dist/{chunk-UP7I3W6O.js → chunk-A6CK4ENG.js} +54 -54
- package/dist/{chunk-TIQPKOFW.js → chunk-A6T4FGE7.js} +2 -2
- package/dist/{chunk-7P4AQMGA.js → chunk-AOUCHCSB.js} +10 -10
- package/dist/{chunk-RFLYID6H.js → chunk-AT4K4F6S.js} +4 -4
- package/dist/{chunk-YV56F4UP.js → chunk-AW3QEFOF.js} +179 -179
- package/dist/chunk-AW3QEFOF.js.map +1 -0
- package/dist/{chunk-CMLJSF2F.js → chunk-BLPXOHG6.js} +11 -11
- package/dist/{chunk-LF5CBAOS.js → chunk-C535KSTY.js} +4 -4
- package/dist/{chunk-4YXAQMTD.js → chunk-CB574ERL.js} +10 -10
- package/dist/{chunk-552UYIQ7.js → chunk-CDUDKETD.js} +19 -19
- package/dist/{chunk-PCFK7HKD.js → chunk-D3RK3NGM.js} +17 -17
- package/dist/{chunk-LHLK7FUA.js → chunk-D64Z4V26.js} +2 -2
- package/dist/{chunk-JO6R5EXF.js → chunk-DFXZYNTX.js} +4 -4
- package/dist/{chunk-4RMN4E2Y.js → chunk-DKCX643S.js} +13 -13
- package/dist/{chunk-CD3MO3IC.js → chunk-E36IC3LU.js} +2 -2
- package/dist/{chunk-7XO7YKPC.js → chunk-ECHYJP63.js} +70 -70
- package/dist/{chunk-QFMLAT7L.js → chunk-EH7TTYE6.js} +184 -184
- package/dist/{chunk-7KIENXRE.js → chunk-EMCB6XKU.js} +1 -1
- package/dist/{chunk-FFNPUSVO.js → chunk-ERG355NM.js} +6 -6
- package/dist/{chunk-22JFMNMF.js → chunk-F2RMKGDQ.js} +4 -4
- package/dist/{chunk-7TCT7KPQ.js → chunk-F33EDYS7.js} +224 -224
- package/dist/chunk-F33EDYS7.js.map +1 -0
- package/dist/{chunk-4VK2R5QC.js → chunk-F3FN6DO6.js} +2 -2
- package/dist/{chunk-62VER7O4.js → chunk-F3NERYBQ.js} +6 -6
- package/dist/{chunk-S37GP7LX.js → chunk-FB3B45FP.js} +18 -18
- package/dist/{chunk-U6MPB3K6.js → chunk-FVL4B552.js} +7 -7
- package/dist/{chunk-WCMG4HYI.js → chunk-G2BX56CN.js} +10 -10
- package/dist/{chunk-EQE3MNQN.js → chunk-GFSOXB2K.js} +5 -5
- package/dist/{chunk-3X5FKDYQ.js → chunk-GZGQHQI7.js} +24 -24
- package/dist/{chunk-GGV4NSG3.js → chunk-H4IE2PYF.js} +6 -6
- package/dist/{chunk-J22HD2PB.js → chunk-HNNM2GDN.js} +5 -5
- package/dist/{chunk-GXW2I2M2.js → chunk-HPB4KSV3.js} +2 -2
- package/dist/{chunk-YEROLKOA.js → chunk-HSQRYJ4P.js} +15 -15
- package/dist/{chunk-HU6JTNWF.js → chunk-HUXDGWAN.js} +2 -2
- package/dist/{chunk-ITX2TB4K.js → chunk-I66ZB6KD.js} +4 -4
- package/dist/{chunk-FDAV72IX.js → chunk-IC7KNOBB.js} +7 -7
- package/dist/{chunk-PO3BH3KQ.js → chunk-IIO2MR3B.js} +2 -2
- package/dist/{chunk-FWOBNL2A.js → chunk-IPPVX5GF.js} +1 -1
- package/dist/{chunk-4SAGYEVB.js → chunk-IUK5QGP5.js} +2 -2
- package/dist/{chunk-4XQC7VLT.js → chunk-JWN7SLTO.js} +11 -11
- package/dist/{chunk-5Y2FPLZE.js → chunk-KFWVBTUH.js} +7 -7
- package/dist/{chunk-JXT5QDJC.js → chunk-KNFDWNCH.js} +5 -5
- package/dist/{chunk-5DSKMG2I.js → chunk-LEXPBQ56.js} +4 -4
- package/dist/{chunk-LT4J7RHI.js → chunk-LKJ2C7PH.js} +10 -10
- package/dist/{chunk-XN7NSPE6.js → chunk-MJQBC7C5.js} +2 -2
- package/dist/{chunk-JQCGPTZ6.js → chunk-MM7OKOTE.js} +9 -9
- package/dist/{chunk-ULJAOMJA.js → chunk-ND2WCWXI.js} +4 -4
- package/dist/{chunk-EYS4ZOF5.js → chunk-NML44AW2.js} +2 -2
- package/dist/{chunk-TL7BOFFL.js → chunk-NQQKOJDI.js} +2 -2
- package/dist/{chunk-CP7ZQHBW.js → chunk-O4DYOSOL.js} +13 -13
- package/dist/{chunk-GRSODLVO.js → chunk-OANSIX34.js} +4 -4
- package/dist/{chunk-2QBYDGWO.js → chunk-OFB6TUDC.js} +7 -7
- package/dist/{chunk-EPWD4KRA.js → chunk-OOEO4MKY.js} +2 -2
- package/dist/{chunk-CDEXRJB6.js → chunk-PEKPWK5M.js} +4 -4
- package/dist/{chunk-4GLLWX33.js → chunk-PKEKZ2VA.js} +9 -9
- package/dist/{chunk-3RQUWFZT.js → chunk-PMD7V4N7.js} +65 -65
- package/dist/{chunk-3RQUWFZT.js.map → chunk-PMD7V4N7.js.map} +1 -1
- package/dist/{chunk-7FJMRJDG.js → chunk-PVR5EELP.js} +2 -2
- package/dist/{chunk-Y5BSA3I7.js → chunk-QBADR2FO.js} +6 -6
- package/dist/{chunk-22FFOHPT.js → chunk-QLIDZGPV.js} +11 -11
- package/dist/{chunk-JM4HQPAI.js → chunk-QZRDCFHI.js} +5 -5
- package/dist/{chunk-5W7KJ5NQ.js → chunk-R7XCJWCD.js} +37 -37
- package/dist/{chunk-GT7JFQ4E.js → chunk-RAMZTZOB.js} +111 -111
- package/dist/{chunk-A4BD4ZVB.js → chunk-S7PVL7XH.js} +4 -4
- package/dist/{chunk-I6KIQKU6.js → chunk-SCNEQFIW.js} +3 -3
- package/dist/{chunk-4LPA25NQ.js → chunk-SD2K5ZN5.js} +4 -4
- package/dist/{chunk-IDXTASGN.js → chunk-SD4PPZFB.js} +2 -2
- package/dist/{chunk-4HEXNAFI.js → chunk-SFAU5R5S.js} +18 -18
- package/dist/chunk-SFAU5R5S.js.map +1 -0
- package/dist/{chunk-35BC2FU2.js → chunk-SJORXXLV.js} +18 -18
- package/dist/{chunk-ZS2UQ3DV.js → chunk-SOXZ4LGS.js} +4 -4
- package/dist/{chunk-ACL2V2KE.js → chunk-SQDPHCK2.js} +19 -19
- package/dist/{chunk-YJPKDRI2.js → chunk-TDIOBPLA.js} +13 -13
- package/dist/{chunk-RYSRFAHN.js → chunk-TEPPPAJI.js} +19 -19
- package/dist/{chunk-FWYEZ3LE.js → chunk-THVIT3PW.js} +37 -37
- package/dist/{chunk-MIECLOQC.js → chunk-TN5T5HRZ.js} +6 -6
- package/dist/{chunk-RQNZDTKT.js → chunk-TR4HIKJ2.js} +15 -15
- package/dist/{chunk-J5MEDX7C.js → chunk-U47YDYLQ.js} +8 -8
- package/dist/{chunk-HQWVDQXW.js → chunk-UGEWCWVV.js} +7 -7
- package/dist/{chunk-YXA2EKV3.js → chunk-UUSAOIJR.js} +3 -3
- package/dist/{chunk-YVBHGMKC.js → chunk-VAIESMPY.js} +4 -4
- package/dist/{chunk-SY2AAZNB.js → chunk-VO6RVVP7.js} +1 -1
- package/dist/{chunk-3GU7AWG7.js → chunk-VPNXQUUS.js} +17 -17
- package/dist/{chunk-WKHUZIOW.js → chunk-VW3BBTMA.js} +1 -1
- package/dist/{chunk-7NPCEBZE.js → chunk-VWSFA4LJ.js} +4 -4
- package/dist/{chunk-GZS37O3G.js → chunk-WBPQ7OPC.js} +1 -1
- package/dist/{chunk-5FA455GR.js → chunk-WNG757ID.js} +4 -4
- package/dist/{chunk-G4HQUBO4.js → chunk-WSLPZ43N.js} +12 -12
- package/dist/{chunk-73WI7FL2.js → chunk-WUHB422G.js} +18 -18
- package/dist/{chunk-Z7IGO5EA.js → chunk-WVX5AQXS.js} +2 -2
- package/dist/{chunk-2NC7NZCE.js → chunk-WWOHORRO.js} +5 -5
- package/dist/{chunk-SSOO4GWN.js → chunk-WYDZP5F2.js} +114 -114
- package/dist/{chunk-SSOO4GWN.js.map → chunk-WYDZP5F2.js.map} +1 -1
- package/dist/{chunk-V4QZ7UBK.js → chunk-WYEPUXGL.js} +2 -2
- package/dist/{chunk-ZEIFJ6PX.js → chunk-XN6CALYY.js} +8 -8
- package/dist/{chunk-VH5EGTH2.js → chunk-XNACICAB.js} +3 -3
- package/dist/{chunk-YYCOSTUU.js → chunk-XU4I47IP.js} +16 -16
- package/dist/{chunk-GHHM6WN4.js → chunk-YG3IJCM2.js} +3 -3
- package/dist/{chunk-NEK4WB5P.js → chunk-YGSJWWT3.js} +2 -2
- package/dist/{chunk-IBA5FMRE.js → chunk-YO64YVYL.js} +133 -133
- package/dist/{chunk-XMNUZUUA.js → chunk-Z2DAWUO3.js} +6 -6
- package/dist/{chunk-BCM7C3MJ.js → chunk-Z4GJB24B.js} +8 -8
- package/dist/{chunk-UYNCMZX5.js → chunk-ZX5H7LWD.js} +3 -3
- package/dist/composer.js +12 -12
- package/dist/{computer-viewer-25AJIDYA.js → computer-viewer-VA5JONUH.js} +6 -6
- package/dist/connect.js +8 -8
- package/dist/{embedded-new-voice-RZZEJT6M.js → embedded-new-voice-6BILAOUG.js} +6 -6
- package/dist/{embedded-voice-6OKSSPLW.js → embedded-voice-UDE4JRKB.js} +6 -6
- package/dist/index.js +215 -215
- package/dist/interaction.js +8 -8
- package/dist/{latest-question-2PFWQSSG.js → latest-question-4WDBECXB.js} +2 -2
- package/dist/machines.js +1 -1
- package/dist/{model-policy-picker-menu-VVFGGAI6.js → model-policy-picker-menu-NRTO6FRP.js} +5 -5
- package/dist/native-previews.js +3 -3
- package/dist/{queue-surface-implementation-4SHOQPQQ.js → queue-surface-implementation-H4XSNHZE.js} +4 -4
- package/dist/realtime.js +5 -5
- package/dist/{sandbox-files-CCOTGXXA.js → sandbox-files-IEHODU35.js} +8 -8
- package/dist/session-app.js +255 -255
- package/dist/session-list-model.js +2 -2
- package/dist/session-ui.js +64 -64
- package/dist/session.js +18 -18
- package/dist/terminal.js +1 -1
- package/dist/{timeline-annotation-markers-KHNYNY2J.js → timeline-annotation-markers-ZSOFW7PG.js} +4 -4
- package/dist/{timeline-annotation-selection-AXEDJHBP.js → timeline-annotation-selection-YWV2UC34.js} +6 -6
- package/dist/{timeline-annotations-dialog-AV4ZBXRC.js → timeline-annotations-dialog-ZWQVX2HI.js} +7 -7
- package/dist/timeline-model.js +27 -27
- package/dist/ui/access-list.js +20 -20
- package/dist/ui/choice-cards.js +2 -2
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +2 -2
- package/dist/ui/disclosure.js +4 -4
- package/dist/ui/flush-form-page.js +3 -3
- package/dist/ui/form-dialog.js +2 -2
- package/dist/ui/list-row.js +5 -5
- package/dist/ui/revision-history.js +11 -11
- package/dist/ui/role-select.js +6 -6
- package/dist/ui/settings-nav.js +3 -3
- package/dist/workbench.js +9 -9
- package/package.json +4 -4
- package/dist/chunk-4HEXNAFI.js.map +0 -1
- package/dist/chunk-7TCT7KPQ.js.map +0 -1
- package/dist/chunk-S2U4CDAC.js.map +0 -1
- package/dist/chunk-YV56F4UP.js.map +0 -1
- /package/dist/{browser-viewer-QMCNV4RI.js.map → browser-viewer-VPK3CV2H.js.map} +0 -0
- /package/dist/{chat-interactive-block-PMIAUXSO.js.map → chat-interactive-block-AMDSW656.js.map} +0 -0
- /package/dist/{chunk-3STBLX4O.js.map → chunk-25LWDG5D.js.map} +0 -0
- /package/dist/{chunk-MCTTONOW.js.map → chunk-2CKVVAGP.js.map} +0 -0
- /package/dist/{chunk-J7FBBLHF.js.map → chunk-2DL6NJP5.js.map} +0 -0
- /package/dist/{chunk-CFFNT2OY.js.map → chunk-3GLAPCVI.js.map} +0 -0
- /package/dist/{chunk-BXQYAAVE.js.map → chunk-3XOISKZC.js.map} +0 -0
- /package/dist/{chunk-N3ZP4IDU.js.map → chunk-45WYYFP6.js.map} +0 -0
- /package/dist/{chunk-52WK2GGK.js.map → chunk-4MQLGMV2.js.map} +0 -0
- /package/dist/{chunk-MXLKI7BI.js.map → chunk-4U4GXWXS.js.map} +0 -0
- /package/dist/{chunk-3RMKPHBL.js.map → chunk-5HIOVXOX.js.map} +0 -0
- /package/dist/{chunk-5W6ZDKRR.js.map → chunk-5M23GZA2.js.map} +0 -0
- /package/dist/{chunk-UUGR3X5I.js.map → chunk-6MRY2RUZ.js.map} +0 -0
- /package/dist/{chunk-ZVVT72MT.js.map → chunk-6O4VWKSO.js.map} +0 -0
- /package/dist/{chunk-FTX5CNHA.js.map → chunk-767WCGAX.js.map} +0 -0
- /package/dist/{chunk-5JHRMUAZ.js.map → chunk-7IYAHFPE.js.map} +0 -0
- /package/dist/{chunk-EJ7WARW7.js.map → chunk-7J7PZB4S.js.map} +0 -0
- /package/dist/{chunk-RIYZFKIM.js.map → chunk-7PUFAH4I.js.map} +0 -0
- /package/dist/{chunk-KEXYBG7Q.js.map → chunk-7R2JQHBX.js.map} +0 -0
- /package/dist/{chunk-TV6BWONY.js.map → chunk-7VN6VC3D.js.map} +0 -0
- /package/dist/{chunk-5FEN3KYH.js.map → chunk-A2E3ZF6N.js.map} +0 -0
- /package/dist/{chunk-SM5QX6UK.js.map → chunk-A2EWJQXX.js.map} +0 -0
- /package/dist/{chunk-UP7I3W6O.js.map → chunk-A6CK4ENG.js.map} +0 -0
- /package/dist/{chunk-TIQPKOFW.js.map → chunk-A6T4FGE7.js.map} +0 -0
- /package/dist/{chunk-7P4AQMGA.js.map → chunk-AOUCHCSB.js.map} +0 -0
- /package/dist/{chunk-RFLYID6H.js.map → chunk-AT4K4F6S.js.map} +0 -0
- /package/dist/{chunk-CMLJSF2F.js.map → chunk-BLPXOHG6.js.map} +0 -0
- /package/dist/{chunk-LF5CBAOS.js.map → chunk-C535KSTY.js.map} +0 -0
- /package/dist/{chunk-4YXAQMTD.js.map → chunk-CB574ERL.js.map} +0 -0
- /package/dist/{chunk-552UYIQ7.js.map → chunk-CDUDKETD.js.map} +0 -0
- /package/dist/{chunk-PCFK7HKD.js.map → chunk-D3RK3NGM.js.map} +0 -0
- /package/dist/{chunk-LHLK7FUA.js.map → chunk-D64Z4V26.js.map} +0 -0
- /package/dist/{chunk-JO6R5EXF.js.map → chunk-DFXZYNTX.js.map} +0 -0
- /package/dist/{chunk-4RMN4E2Y.js.map → chunk-DKCX643S.js.map} +0 -0
- /package/dist/{chunk-CD3MO3IC.js.map → chunk-E36IC3LU.js.map} +0 -0
- /package/dist/{chunk-7XO7YKPC.js.map → chunk-ECHYJP63.js.map} +0 -0
- /package/dist/{chunk-QFMLAT7L.js.map → chunk-EH7TTYE6.js.map} +0 -0
- /package/dist/{chunk-7KIENXRE.js.map → chunk-EMCB6XKU.js.map} +0 -0
- /package/dist/{chunk-FFNPUSVO.js.map → chunk-ERG355NM.js.map} +0 -0
- /package/dist/{chunk-22JFMNMF.js.map → chunk-F2RMKGDQ.js.map} +0 -0
- /package/dist/{chunk-4VK2R5QC.js.map → chunk-F3FN6DO6.js.map} +0 -0
- /package/dist/{chunk-62VER7O4.js.map → chunk-F3NERYBQ.js.map} +0 -0
- /package/dist/{chunk-S37GP7LX.js.map → chunk-FB3B45FP.js.map} +0 -0
- /package/dist/{chunk-U6MPB3K6.js.map → chunk-FVL4B552.js.map} +0 -0
- /package/dist/{chunk-WCMG4HYI.js.map → chunk-G2BX56CN.js.map} +0 -0
- /package/dist/{chunk-EQE3MNQN.js.map → chunk-GFSOXB2K.js.map} +0 -0
- /package/dist/{chunk-3X5FKDYQ.js.map → chunk-GZGQHQI7.js.map} +0 -0
- /package/dist/{chunk-GGV4NSG3.js.map → chunk-H4IE2PYF.js.map} +0 -0
- /package/dist/{chunk-J22HD2PB.js.map → chunk-HNNM2GDN.js.map} +0 -0
- /package/dist/{chunk-GXW2I2M2.js.map → chunk-HPB4KSV3.js.map} +0 -0
- /package/dist/{chunk-YEROLKOA.js.map → chunk-HSQRYJ4P.js.map} +0 -0
- /package/dist/{chunk-HU6JTNWF.js.map → chunk-HUXDGWAN.js.map} +0 -0
- /package/dist/{chunk-ITX2TB4K.js.map → chunk-I66ZB6KD.js.map} +0 -0
- /package/dist/{chunk-FDAV72IX.js.map → chunk-IC7KNOBB.js.map} +0 -0
- /package/dist/{chunk-PO3BH3KQ.js.map → chunk-IIO2MR3B.js.map} +0 -0
- /package/dist/{chunk-FWOBNL2A.js.map → chunk-IPPVX5GF.js.map} +0 -0
- /package/dist/{chunk-4SAGYEVB.js.map → chunk-IUK5QGP5.js.map} +0 -0
- /package/dist/{chunk-4XQC7VLT.js.map → chunk-JWN7SLTO.js.map} +0 -0
- /package/dist/{chunk-5Y2FPLZE.js.map → chunk-KFWVBTUH.js.map} +0 -0
- /package/dist/{chunk-JXT5QDJC.js.map → chunk-KNFDWNCH.js.map} +0 -0
- /package/dist/{chunk-5DSKMG2I.js.map → chunk-LEXPBQ56.js.map} +0 -0
- /package/dist/{chunk-LT4J7RHI.js.map → chunk-LKJ2C7PH.js.map} +0 -0
- /package/dist/{chunk-XN7NSPE6.js.map → chunk-MJQBC7C5.js.map} +0 -0
- /package/dist/{chunk-JQCGPTZ6.js.map → chunk-MM7OKOTE.js.map} +0 -0
- /package/dist/{chunk-ULJAOMJA.js.map → chunk-ND2WCWXI.js.map} +0 -0
- /package/dist/{chunk-EYS4ZOF5.js.map → chunk-NML44AW2.js.map} +0 -0
- /package/dist/{chunk-TL7BOFFL.js.map → chunk-NQQKOJDI.js.map} +0 -0
- /package/dist/{chunk-CP7ZQHBW.js.map → chunk-O4DYOSOL.js.map} +0 -0
- /package/dist/{chunk-GRSODLVO.js.map → chunk-OANSIX34.js.map} +0 -0
- /package/dist/{chunk-2QBYDGWO.js.map → chunk-OFB6TUDC.js.map} +0 -0
- /package/dist/{chunk-EPWD4KRA.js.map → chunk-OOEO4MKY.js.map} +0 -0
- /package/dist/{chunk-CDEXRJB6.js.map → chunk-PEKPWK5M.js.map} +0 -0
- /package/dist/{chunk-4GLLWX33.js.map → chunk-PKEKZ2VA.js.map} +0 -0
- /package/dist/{chunk-7FJMRJDG.js.map → chunk-PVR5EELP.js.map} +0 -0
- /package/dist/{chunk-Y5BSA3I7.js.map → chunk-QBADR2FO.js.map} +0 -0
- /package/dist/{chunk-22FFOHPT.js.map → chunk-QLIDZGPV.js.map} +0 -0
- /package/dist/{chunk-JM4HQPAI.js.map → chunk-QZRDCFHI.js.map} +0 -0
- /package/dist/{chunk-5W7KJ5NQ.js.map → chunk-R7XCJWCD.js.map} +0 -0
- /package/dist/{chunk-GT7JFQ4E.js.map → chunk-RAMZTZOB.js.map} +0 -0
- /package/dist/{chunk-A4BD4ZVB.js.map → chunk-S7PVL7XH.js.map} +0 -0
- /package/dist/{chunk-I6KIQKU6.js.map → chunk-SCNEQFIW.js.map} +0 -0
- /package/dist/{chunk-4LPA25NQ.js.map → chunk-SD2K5ZN5.js.map} +0 -0
- /package/dist/{chunk-IDXTASGN.js.map → chunk-SD4PPZFB.js.map} +0 -0
- /package/dist/{chunk-35BC2FU2.js.map → chunk-SJORXXLV.js.map} +0 -0
- /package/dist/{chunk-ZS2UQ3DV.js.map → chunk-SOXZ4LGS.js.map} +0 -0
- /package/dist/{chunk-ACL2V2KE.js.map → chunk-SQDPHCK2.js.map} +0 -0
- /package/dist/{chunk-YJPKDRI2.js.map → chunk-TDIOBPLA.js.map} +0 -0
- /package/dist/{chunk-RYSRFAHN.js.map → chunk-TEPPPAJI.js.map} +0 -0
- /package/dist/{chunk-FWYEZ3LE.js.map → chunk-THVIT3PW.js.map} +0 -0
- /package/dist/{chunk-MIECLOQC.js.map → chunk-TN5T5HRZ.js.map} +0 -0
- /package/dist/{chunk-RQNZDTKT.js.map → chunk-TR4HIKJ2.js.map} +0 -0
- /package/dist/{chunk-J5MEDX7C.js.map → chunk-U47YDYLQ.js.map} +0 -0
- /package/dist/{chunk-HQWVDQXW.js.map → chunk-UGEWCWVV.js.map} +0 -0
- /package/dist/{chunk-YXA2EKV3.js.map → chunk-UUSAOIJR.js.map} +0 -0
- /package/dist/{chunk-YVBHGMKC.js.map → chunk-VAIESMPY.js.map} +0 -0
- /package/dist/{chunk-SY2AAZNB.js.map → chunk-VO6RVVP7.js.map} +0 -0
- /package/dist/{chunk-3GU7AWG7.js.map → chunk-VPNXQUUS.js.map} +0 -0
- /package/dist/{chunk-WKHUZIOW.js.map → chunk-VW3BBTMA.js.map} +0 -0
- /package/dist/{chunk-7NPCEBZE.js.map → chunk-VWSFA4LJ.js.map} +0 -0
- /package/dist/{chunk-GZS37O3G.js.map → chunk-WBPQ7OPC.js.map} +0 -0
- /package/dist/{chunk-5FA455GR.js.map → chunk-WNG757ID.js.map} +0 -0
- /package/dist/{chunk-G4HQUBO4.js.map → chunk-WSLPZ43N.js.map} +0 -0
- /package/dist/{chunk-73WI7FL2.js.map → chunk-WUHB422G.js.map} +0 -0
- /package/dist/{chunk-Z7IGO5EA.js.map → chunk-WVX5AQXS.js.map} +0 -0
- /package/dist/{chunk-2NC7NZCE.js.map → chunk-WWOHORRO.js.map} +0 -0
- /package/dist/{chunk-V4QZ7UBK.js.map → chunk-WYEPUXGL.js.map} +0 -0
- /package/dist/{chunk-ZEIFJ6PX.js.map → chunk-XN6CALYY.js.map} +0 -0
- /package/dist/{chunk-VH5EGTH2.js.map → chunk-XNACICAB.js.map} +0 -0
- /package/dist/{chunk-YYCOSTUU.js.map → chunk-XU4I47IP.js.map} +0 -0
- /package/dist/{chunk-GHHM6WN4.js.map → chunk-YG3IJCM2.js.map} +0 -0
- /package/dist/{chunk-NEK4WB5P.js.map → chunk-YGSJWWT3.js.map} +0 -0
- /package/dist/{chunk-IBA5FMRE.js.map → chunk-YO64YVYL.js.map} +0 -0
- /package/dist/{chunk-XMNUZUUA.js.map → chunk-Z2DAWUO3.js.map} +0 -0
- /package/dist/{chunk-BCM7C3MJ.js.map → chunk-Z4GJB24B.js.map} +0 -0
- /package/dist/{chunk-UYNCMZX5.js.map → chunk-ZX5H7LWD.js.map} +0 -0
- /package/dist/{computer-viewer-25AJIDYA.js.map → computer-viewer-VA5JONUH.js.map} +0 -0
- /package/dist/{embedded-new-voice-RZZEJT6M.js.map → embedded-new-voice-6BILAOUG.js.map} +0 -0
- /package/dist/{embedded-voice-6OKSSPLW.js.map → embedded-voice-UDE4JRKB.js.map} +0 -0
- /package/dist/{latest-question-2PFWQSSG.js.map → latest-question-4WDBECXB.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-VVFGGAI6.js.map → model-policy-picker-menu-NRTO6FRP.js.map} +0 -0
- /package/dist/{queue-surface-implementation-4SHOQPQQ.js.map → queue-surface-implementation-H4XSNHZE.js.map} +0 -0
- /package/dist/{sandbox-files-CCOTGXXA.js.map → sandbox-files-IEHODU35.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-KHNYNY2J.js.map → timeline-annotation-markers-ZSOFW7PG.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-AXEDJHBP.js.map → timeline-annotation-selection-YWV2UC34.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-AV4ZBXRC.js.map → timeline-annotations-dialog-ZWQVX2HI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","jsxs","useState","jsx","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","useState","jsx","jsxs","useState","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
capabilityLogoFallback
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A6T4FGE7.js";
|
|
5
5
|
|
|
6
6
|
// src/app/components/capabilities/capability-logo-source.tsx
|
|
7
7
|
var FIRST_PARTY_CAPABILITY_LOGOS = {
|
|
@@ -21,4 +21,4 @@ export {
|
|
|
21
21
|
FIRST_PARTY_CAPABILITY_LOGOS,
|
|
22
22
|
capabilityLogoSource
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
24
|
+
//# sourceMappingURL=chunk-PVR5EELP.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
ComposerUsageNotice
|
|
4
|
-
} from "./chunk-5Y2FPLZE.js";
|
|
5
2
|
import {
|
|
6
3
|
useAppShotTarget
|
|
7
4
|
} from "./chunk-AIEXYO2X.js";
|
|
5
|
+
import {
|
|
6
|
+
ComposerUsageNotice
|
|
7
|
+
} from "./chunk-KFWVBTUH.js";
|
|
8
8
|
import {
|
|
9
9
|
MessageContextPills
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-A2EWJQXX.js";
|
|
11
11
|
import {
|
|
12
12
|
useAppContext
|
|
13
13
|
} from "./chunk-W6KAUGXO.js";
|
|
14
14
|
import {
|
|
15
15
|
ChatComposer
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UUSAOIJR.js";
|
|
17
17
|
import {
|
|
18
18
|
useFileAttachments
|
|
19
19
|
} from "./chunk-I6FIXEL4.js";
|
|
@@ -79,4 +79,4 @@ export {
|
|
|
79
79
|
useDraftAttachments,
|
|
80
80
|
ConsoleComposer
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
82
|
+
//# sourceMappingURL=chunk-QBADR2FO.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
openGeniGroupPresentation
|
|
4
|
-
} from "./chunk-PO3BH3KQ.js";
|
|
5
2
|
import {
|
|
6
3
|
capabilityGroupSelection,
|
|
7
4
|
sessionCapabilityGroupsFor
|
|
8
5
|
} from "./chunk-4NTPH5M6.js";
|
|
6
|
+
import {
|
|
7
|
+
openGeniGroupPresentation
|
|
8
|
+
} from "./chunk-IIO2MR3B.js";
|
|
9
9
|
import {
|
|
10
10
|
cn
|
|
11
11
|
} from "./chunk-A3MTTRCX.js";
|
|
@@ -15,23 +15,23 @@ import {
|
|
|
15
15
|
ComposerMenuRowsSkeleton,
|
|
16
16
|
lazyComposerPanel
|
|
17
17
|
} from "./chunk-O2LGEYG4.js";
|
|
18
|
+
import {
|
|
19
|
+
isComposerConnector
|
|
20
|
+
} from "./chunk-L6Y4ALSM.js";
|
|
18
21
|
import {
|
|
19
22
|
DropdownMenu,
|
|
20
23
|
DropdownMenuContent,
|
|
21
24
|
DropdownMenuTrigger
|
|
22
25
|
} from "./chunk-TREHTIBD.js";
|
|
23
|
-
import {
|
|
24
|
-
isComposerConnector
|
|
25
|
-
} from "./chunk-L6Y4ALSM.js";
|
|
26
|
-
import {
|
|
27
|
-
ModelPolicyPickerMenu
|
|
28
|
-
} from "./chunk-2NC7NZCE.js";
|
|
29
26
|
import {
|
|
30
27
|
Button
|
|
31
28
|
} from "./chunk-HMU5IELG.js";
|
|
29
|
+
import {
|
|
30
|
+
ModelPolicyPickerMenu
|
|
31
|
+
} from "./chunk-WWOHORRO.js";
|
|
32
32
|
import {
|
|
33
33
|
ModelPolicyPicker
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-ERG355NM.js";
|
|
35
35
|
|
|
36
36
|
// src/app/components/pickers.tsx
|
|
37
37
|
import { ChevronDownIcon, PlugIcon } from "lucide-react";
|
|
@@ -175,4 +175,4 @@ export {
|
|
|
175
175
|
sessionToolSelectionSummary,
|
|
176
176
|
SessionToolPicker
|
|
177
177
|
};
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
178
|
+
//# sourceMappingURL=chunk-QLIDZGPV.js.map
|
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
DetailSheet,
|
|
8
8
|
DetailSheetContent,
|
|
9
9
|
DetailSheetTrigger
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-LEXPBQ56.js";
|
|
11
|
+
import {
|
|
12
|
+
SheetClose
|
|
13
|
+
} from "./chunk-6KELG2EG.js";
|
|
11
14
|
import {
|
|
12
15
|
Collapsible,
|
|
13
16
|
CollapsibleContent,
|
|
14
17
|
CollapsibleTrigger
|
|
15
18
|
} from "./chunk-T6KM63FZ.js";
|
|
16
|
-
import {
|
|
17
|
-
SheetClose
|
|
18
|
-
} from "./chunk-6KELG2EG.js";
|
|
19
19
|
import {
|
|
20
20
|
Button
|
|
21
21
|
} from "./chunk-HMU5IELG.js";
|
|
@@ -278,4 +278,4 @@ function Disclosure({
|
|
|
278
278
|
export {
|
|
279
279
|
Disclosure
|
|
280
280
|
};
|
|
281
|
-
//# sourceMappingURL=chunk-
|
|
281
|
+
//# sourceMappingURL=chunk-QZRDCFHI.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
showUndoToast
|
|
4
|
-
} from "./chunk-CFFNT2OY.js";
|
|
5
2
|
import {
|
|
6
3
|
payerShortLabel
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Z4GJB24B.js";
|
|
5
|
+
import {
|
|
6
|
+
showUndoToast
|
|
7
|
+
} from "./chunk-3GLAPCVI.js";
|
|
8
8
|
import {
|
|
9
9
|
ACCESS_CHOICES,
|
|
10
10
|
SPEND_PERIOD_OPTIONS,
|
|
@@ -29,22 +29,19 @@ import {
|
|
|
29
29
|
viewAsVisitorUrl
|
|
30
30
|
} from "./chunk-MXIHJ4UI.js";
|
|
31
31
|
import {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
EmailChipsInput
|
|
36
|
-
} from "./chunk-MBYVEZOH.js";
|
|
37
|
-
import {
|
|
38
|
-
ListRow,
|
|
39
|
-
RowList
|
|
40
|
-
} from "./chunk-JQCGPTZ6.js";
|
|
32
|
+
ChoiceCard,
|
|
33
|
+
ChoiceCards
|
|
34
|
+
} from "./chunk-VAIESMPY.js";
|
|
41
35
|
import {
|
|
42
36
|
useCopyToClipboard
|
|
43
37
|
} from "./chunk-MK63VRBR.js";
|
|
44
38
|
import {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
Disclosure
|
|
40
|
+
} from "./chunk-QZRDCFHI.js";
|
|
41
|
+
import {
|
|
42
|
+
ListRow,
|
|
43
|
+
RowList
|
|
44
|
+
} from "./chunk-MM7OKOTE.js";
|
|
48
45
|
import {
|
|
49
46
|
Section
|
|
50
47
|
} from "./chunk-J6WRB3VZ.js";
|
|
@@ -52,14 +49,23 @@ import {
|
|
|
52
49
|
SelectMenu
|
|
53
50
|
} from "./chunk-TFK4KFKA.js";
|
|
54
51
|
import {
|
|
55
|
-
|
|
56
|
-
} from "./chunk-
|
|
52
|
+
EmailChipsInput
|
|
53
|
+
} from "./chunk-MBYVEZOH.js";
|
|
57
54
|
import {
|
|
58
55
|
useWorkspaceModelCatalog
|
|
59
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-5M23GZA2.js";
|
|
57
|
+
import {
|
|
58
|
+
ModelPicker
|
|
59
|
+
} from "./chunk-QLIDZGPV.js";
|
|
60
60
|
import {
|
|
61
61
|
cn
|
|
62
62
|
} from "./chunk-A3MTTRCX.js";
|
|
63
|
+
import {
|
|
64
|
+
StatusBadge
|
|
65
|
+
} from "./chunk-EPCPGUIF.js";
|
|
66
|
+
import {
|
|
67
|
+
LogoTile
|
|
68
|
+
} from "./chunk-FQQEZUSN.js";
|
|
63
69
|
import {
|
|
64
70
|
Switch
|
|
65
71
|
} from "./chunk-IZMUUUYD.js";
|
|
@@ -67,11 +73,16 @@ import {
|
|
|
67
73
|
SettingRow
|
|
68
74
|
} from "./chunk-XSOPQZGH.js";
|
|
69
75
|
import {
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
FormDialog,
|
|
77
|
+
FormInline,
|
|
78
|
+
FormPage
|
|
79
|
+
} from "./chunk-S7PVL7XH.js";
|
|
72
80
|
import {
|
|
73
|
-
|
|
74
|
-
} from "./chunk-
|
|
81
|
+
toast
|
|
82
|
+
} from "./chunk-YG6NARQY.js";
|
|
83
|
+
import {
|
|
84
|
+
userErrorText
|
|
85
|
+
} from "./chunk-L4OF77LE.js";
|
|
75
86
|
import {
|
|
76
87
|
CheckboxField,
|
|
77
88
|
Field,
|
|
@@ -79,23 +90,12 @@ import {
|
|
|
79
90
|
TextArea,
|
|
80
91
|
TextInput
|
|
81
92
|
} from "./chunk-XNTW77T6.js";
|
|
82
|
-
import {
|
|
83
|
-
StatusBadge
|
|
84
|
-
} from "./chunk-EPCPGUIF.js";
|
|
85
|
-
import {
|
|
86
|
-
toast
|
|
87
|
-
} from "./chunk-YG6NARQY.js";
|
|
88
93
|
import {
|
|
89
94
|
RelativeTime
|
|
90
95
|
} from "./chunk-XG57V2BN.js";
|
|
91
96
|
import {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
FormPage
|
|
95
|
-
} from "./chunk-A4BD4ZVB.js";
|
|
96
|
-
import {
|
|
97
|
-
userErrorText
|
|
98
|
-
} from "./chunk-L4OF77LE.js";
|
|
97
|
+
DropdownMenuItem
|
|
98
|
+
} from "./chunk-TREHTIBD.js";
|
|
99
99
|
import {
|
|
100
100
|
Notice
|
|
101
101
|
} from "./chunk-WLEDGIVS.js";
|
|
@@ -1054,4 +1054,4 @@ export {
|
|
|
1054
1054
|
sitePublicationHeader,
|
|
1055
1055
|
SitePublishPage
|
|
1056
1056
|
};
|
|
1057
|
-
//# sourceMappingURL=chunk-
|
|
1057
|
+
//# sourceMappingURL=chunk-R7XCJWCD.js.map
|