@opengeni/react 6.7.0 → 6.8.0
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 +9 -9
- package/dist/app/components/Composer.js +20 -20
- package/dist/app/components/agent/agent-capability-picker.js +6 -6
- package/dist/app/components/artifacts/artifact-browse-controls.js +2 -2
- package/dist/app/components/artifacts/artifact-library.js +13 -13
- package/dist/app/components/artifacts/artifact-viewer.js +21 -21
- package/dist/app/components/artifacts/chat-interactive-block.js +14 -14
- package/dist/app/components/artifacts/copy-artifact-link.js +2 -2
- package/dist/app/components/artifacts/file-reach-dialog.js +7 -7
- package/dist/app/components/artifacts/inline-chat-image.js +22 -22
- package/dist/app/components/artifacts/retained-file-preview.js +23 -23
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-actions.d.ts +43 -0
- package/dist/app/components/artifacts/site-actions.js +38 -0
- package/dist/app/components/artifacts/site-audience.js +5 -5
- package/dist/app/components/artifacts/site-conversations.js +13 -13
- package/dist/app/components/artifacts/site-data.js +14 -14
- package/dist/app/components/artifacts/site-publishing-page.js +31 -31
- package/dist/app/components/artifacts/site-publishing.js +25 -25
- package/dist/app/components/artifacts/site-settings.js +30 -30
- package/dist/app/components/artifacts/site-version-menu.js +3 -3
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/bots/bot-launch-strip.js +23 -23
- package/dist/app/components/bots/bot-template-dialog.js +30 -30
- package/dist/app/components/bots/bot-template-shortcuts.js +23 -23
- package/dist/app/components/bots/bot-templates-page.js +37 -37
- package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
- package/dist/app/components/capabilities/capability-logo-source.js +14 -15
- package/dist/app/components/capabilities/connection-ownership-selector.js +4 -4
- package/dist/app/components/capabilities/connector-tool-permissions.js +4 -4
- package/dist/app/components/capabilities/detail-dialog.js +3 -3
- package/dist/app/components/capabilities/native-connect-setup.js +16 -17
- package/dist/app/components/capabilities/native-connect-setup.js.map +1 -1
- package/dist/app/components/capabilities/own-logins-shared-heads-up.js +3 -3
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +16 -17
- package/dist/app/components/capabilities/session-capability-card.js +49 -50
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +24 -25
- package/dist/app/components/capabilities/session-custom-mcp-card.js +17 -18
- package/dist/app/components/capabilities/session-github-card.js +17 -18
- package/dist/app/components/capabilities/session-machine-card.js +23 -24
- package/dist/app/components/capabilities/session-personal-github-card.js +15 -16
- package/dist/app/components/capabilities/session-plugin-card.js +9 -10
- package/dist/app/components/capabilities/use-connection-accounts.js +2 -2
- package/dist/app/components/command-menu/chat-status.js +19 -19
- package/dist/app/components/command-menu/chat-switcher.js +35 -35
- package/dist/app/components/command-menu/command-menu.js +42 -42
- package/dist/app/components/command-menu/shortcut-sheet.js +11 -11
- package/dist/app/components/composer-capabilities-menu-body.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +10 -10
- package/dist/app/components/composer-mobile-plus.js +3 -3
- package/dist/app/components/credit-required-gate.js +1 -1
- package/dist/app/components/credit-required-prompt.js +4 -4
- package/dist/app/components/credits/checkout-credits-celebration.js +3 -3
- package/dist/app/components/credits/checkout-return.js +3 -3
- package/dist/app/components/credits/credit-refusal-notice.js +2 -2
- package/dist/app/components/desktop/app-shots.js +6 -6
- package/dist/app/components/desktop/computer-use.js +2 -2
- package/dist/app/components/desktop/this-computer.js +5 -5
- package/dist/app/components/feedback.js +5 -5
- package/dist/app/components/github-app-connect-launcher.js +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +14 -14
- package/dist/app/components/markdown.js +7 -7
- package/dist/app/components/models/models-ui.js +6 -6
- package/dist/app/components/my-things.js +6 -6
- package/dist/app/components/own-where-it-works.js +5 -5
- package/dist/app/components/personal-resource-attachment-surface.js +4 -4
- package/dist/app/components/pickers.js +5 -5
- package/dist/app/components/rail/channel-create-dialog.js +5 -5
- package/dist/app/components/rail/project-glyph.js +23 -23
- package/dist/app/components/rail/project-profile.js +32 -32
- package/dist/app/components/rail/rail-context.js +1 -1
- package/dist/app/components/rail/rail-sections.js +70 -61
- package/dist/app/components/rail/session-header.js +54 -53
- package/dist/app/components/rail/session-list.js +68 -59
- package/dist/app/components/rail/session-row-content.js +4 -4
- package/dist/app/components/rail/session-row-hover-details.js +18 -18
- package/dist/app/components/rail/session-shell.js +89 -80
- package/dist/app/components/rail/site-session-group-heading.js +29 -12
- package/dist/app/components/session/agent-configuration-panel.js +14 -14
- package/dist/app/components/session/artifact-session-page.js +5 -5
- package/dist/app/components/session/banners.js +9 -9
- package/dist/app/components/session/console-new-conversation.js +43 -44
- package/dist/app/components/session/descendant-requests.js +39 -40
- package/dist/app/components/session/descendant-requests.js.map +1 -1
- package/dist/app/components/session/editable-artifacts-workspace.js +27 -27
- package/dist/app/components/session/failed-session-banner.js +9 -9
- package/dist/app/components/session/failure-recovery-boundary.js +3 -3
- package/dist/app/components/session/human-input-delegation-record.js +2 -2
- package/dist/app/components/session/human-input.js +37 -38
- package/dist/app/components/session/inspector.js +47 -48
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +5 -5
- package/dist/app/components/session/message-resource-attachments.js +13 -13
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +6 -6
- package/dist/app/components/session/new-session-setup-strip.js +24 -24
- package/dist/app/components/session/sandbox-recovery-actions.js +5 -5
- package/dist/app/components/session/sandbox-switcher.js +8 -8
- package/dist/app/components/session/sandbox-workspace.js +52 -53
- package/dist/app/components/session/search-markdown-highlight.js +8 -8
- package/dist/app/components/session/search-results-view.js +9 -9
- package/dist/app/components/session/session-admin-access.js +5 -5
- package/dist/app/components/session/session-admission-notice.js +4 -4
- package/dist/app/components/session/session-avatar-picker.js +24 -24
- package/dist/app/components/session/session-avatar.js +22 -22
- package/dist/app/components/session/session-machine-access-notice.js +4 -4
- package/dist/app/components/session/session-profile-dialog.js +29 -29
- package/dist/app/components/session/session-profile-editor.js +30 -30
- package/dist/app/components/session/session-retention.js +3 -3
- package/dist/app/components/session/session-search-dialog.js +11 -11
- package/dist/app/components/session/session-tenancy-control.js +4 -4
- package/dist/app/components/session/session-usage-limit-section.js +4 -4
- package/dist/app/components/session/share-chat-dialog.js +7 -7
- package/dist/app/components/session/subagents.js +12 -12
- package/dist/app/components/session/subscription-account-indicator.js +6 -6
- package/dist/app/components/settings/row-select.js +4 -4
- package/dist/app/components/transcription-settings.js +6 -6
- package/dist/app/components/ui/destructive-confirm.js +7 -7
- package/dist/app/components/usage/usage-entry.js +3 -3
- package/dist/app/components/window-bar.d.ts +3 -1
- package/dist/app/components/window-bar.js +13 -11
- package/dist/app/components/workspace-composer-plus.js +19 -20
- package/dist/app/components/workspace-reach.js +4 -4
- package/dist/app/embed/session-app.js +173 -167
- package/dist/app/lib/actions/actions-provider.js +9 -9
- package/dist/app/lib/agent-capabilities.js +3 -3
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +15 -16
- package/dist/app/lib/composer-send-blocking.d.ts +135 -1
- package/dist/app/lib/composer-send-blocking.js +30 -3
- package/dist/app/lib/console-site.js +2 -2
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/copy-link.d.ts +2 -0
- package/dist/app/lib/events.js +15 -15
- package/dist/app/lib/failed-session-copy.js +4 -4
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/model-access.js +2 -2
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/session-branch-cache.js +12 -12
- package/dist/app/lib/session-composer-readiness.d.ts +2 -2
- package/dist/app/lib/session-create.js +4 -4
- package/dist/app/lib/session-group-pagination.js +12 -12
- package/dist/app/lib/session-hover-facts.js +17 -17
- package/dist/app/lib/session-model.js +2 -2
- 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/site-sidebar-bridge.d.ts +24 -0
- package/dist/app/lib/site-tool-consent-dialog.js +9 -10
- package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
- package/dist/app/lib/site-tool-consent.js +1 -1
- package/dist/app/lib/turn-failure-analytics.js +5 -5
- package/dist/app/lib/use-follow-up-repositories.js +5 -5
- package/dist/app/lib/use-workspace-machines.js +5 -5
- package/dist/app/lib/use-workspace-model-catalog.js +3 -3
- package/dist/app/lib/use-workspace-rigs.js +2 -2
- package/dist/app/lib/workspace-navigation-preference.js +4 -4
- package/dist/app/lib/workspace-scope-context.js +3 -3
- package/dist/app/routes/artifacts.js +69 -69
- package/dist/app/routes/retained-artifact.js +48 -48
- package/dist/app/routes/session.js +100 -101
- package/dist/app/routes/sessions-index-hydration.js +5 -5
- package/dist/app/routes/sessions-index.js +85 -85
- package/dist/app/routes/site-view.js +177 -85
- package/dist/app/routes/site-view.js.map +1 -1
- package/dist/artifacts-document.js +4 -4
- package/dist/artifacts-presentation.js +4 -4
- package/dist/artifacts-spreadsheet.js +4 -4
- package/dist/artifacts.js +13 -13
- package/dist/automations.js +12 -12
- package/dist/{browser-viewer-TC27OCIP.js → browser-viewer-ZHQDVHZ2.js} +5 -5
- package/dist/{chat-interactive-block-RWPQBHVS.js → chat-interactive-block-VSDD6X3M.js} +5 -5
- package/dist/{chunk-5MOJZORA.js → chunk-2EA4IRIP.js} +34 -3
- package/dist/chunk-2EA4IRIP.js.map +1 -0
- package/dist/{chunk-C43KRXGA.js → chunk-2GCHGWNE.js} +3 -3
- package/dist/{chunk-XLH7QY2R.js → chunk-2J77TWGH.js} +3 -3
- package/dist/{chunk-77WAKEAH.js → chunk-2OXSB2OL.js} +2 -2
- package/dist/{chunk-H3T7IWNA.js → chunk-2VJOSU4H.js} +2 -2
- package/dist/{chunk-N6AACDUW.js → chunk-34NV52R3.js} +4 -4
- package/dist/{chunk-L7YTNTIK.js → chunk-3CDJSKDW.js} +3 -3
- package/dist/{chunk-EWSOC6WF.js → chunk-3DRLCX5V.js} +2 -2
- package/dist/{chunk-JEUPAVYY.js → chunk-3L465FBR.js} +6 -6
- package/dist/{chunk-5NWEKLDZ.js → chunk-3NNAC43A.js} +2 -2
- package/dist/{chunk-EDI6SJ2N.js → chunk-3OK7Y6ES.js} +2 -2
- package/dist/{chunk-AWKES45Y.js → chunk-3PM3M2Q6.js} +2 -2
- package/dist/{chunk-I7XIZRFD.js → chunk-3PZ3LRPV.js} +3 -3
- package/dist/{chunk-AW2MQB37.js → chunk-44JWVYJB.js} +2 -2
- package/dist/{chunk-2M3J7ZWQ.js → chunk-467WDSOK.js} +2 -2
- package/dist/{chunk-UTIAXH52.js → chunk-477DTTMH.js} +3 -3
- package/dist/{chunk-J5F5HPPW.js → chunk-4BWMAGJJ.js} +3 -3
- package/dist/{chunk-YSJEAAOL.js → chunk-4F3AEJI6.js} +4 -4
- package/dist/{chunk-LHPNABDH.js → chunk-4JXPLTWV.js} +2 -2
- package/dist/{chunk-RQKLF42C.js → chunk-4K64EKM7.js} +4 -4
- package/dist/{chunk-NUNZS36W.js → chunk-4O2XWOLZ.js} +3 -3
- package/dist/{chunk-QB2KMIDP.js → chunk-4SJAEPM2.js} +2 -2
- package/dist/{chunk-6JHU2UBS.js → chunk-4Z5X7PLC.js} +3 -3
- package/dist/{chunk-2STUPWEL.js → chunk-54U6ZBEX.js} +3 -3
- package/dist/{chunk-XXSOHN35.js → chunk-5FLYHX5R.js} +2 -2
- package/dist/{chunk-MIYFS2XN.js → chunk-5MHMCE2G.js} +3 -3
- package/dist/{chunk-YWVI6ZMK.js → chunk-5MIBQ4P5.js} +2 -2
- package/dist/chunk-6B73WNLR.js +173 -0
- package/dist/chunk-6B73WNLR.js.map +1 -0
- package/dist/{chunk-5O2FCCHZ.js → chunk-6QK65ZWM.js} +3 -3
- package/dist/{chunk-RPVREAU7.js → chunk-736RUNIA.js} +4 -4
- package/dist/{chunk-2KALVELR.js → chunk-74CBR5YE.js} +3 -3
- package/dist/{chunk-5IE76VCY.js → chunk-752WXSDN.js} +2 -2
- package/dist/{chunk-OPJJSKUK.js → chunk-77B6UCNK.js} +6 -6
- package/dist/{chunk-SEO7TICN.js → chunk-77BHKC43.js} +1 -1
- package/dist/{chunk-ZUA3JMI6.js → chunk-77SYIH6O.js} +2 -2
- package/dist/{chunk-ILDXWY37.js → chunk-7AI4E7PV.js} +2 -2
- package/dist/{chunk-C372BFOV.js → chunk-7NLF35YL.js} +4 -4
- package/dist/{chunk-IFB3WJ36.js → chunk-7YTR3UFO.js} +4 -4
- package/dist/{chunk-BMICEQZQ.js → chunk-7Z76QP64.js} +3 -3
- package/dist/{chunk-YWIFM7D7.js → chunk-AAS7OWV6.js} +3 -3
- package/dist/{chunk-5QAY6K77.js → chunk-AB5IW227.js} +3 -3
- package/dist/{chunk-ZBIXBQNI.js → chunk-ABJZDRW2.js} +2 -2
- package/dist/{chunk-4DVJ6ONS.js → chunk-AH3DGOTK.js} +2 -2
- package/dist/{chunk-HGKTHF2U.js → chunk-AJBDAVX3.js} +8 -8
- package/dist/{chunk-5YKW2K6I.js → chunk-AJDGP2N4.js} +20 -20
- package/dist/{chunk-HD5X76TP.js → chunk-AQQT2FIC.js} +5 -5
- package/dist/chunk-AQQT2FIC.js.map +1 -0
- package/dist/{chunk-SC6RRD2D.js → chunk-ARTEEI2E.js} +11 -2
- package/dist/{chunk-SC6RRD2D.js.map → chunk-ARTEEI2E.js.map} +1 -1
- package/dist/{chunk-IXPTECSC.js → chunk-AVXDIRRW.js} +2 -2
- package/dist/{chunk-QK5EFEUT.js → chunk-BASI553K.js} +4 -4
- package/dist/{chunk-CRU35QQH.js → chunk-BFFNINCC.js} +108 -66
- package/dist/chunk-BFFNINCC.js.map +1 -0
- package/dist/{chunk-Z4FMAFNH.js → chunk-BQYRZIZ7.js} +2 -2
- package/dist/{chunk-DZXEDSQI.js → chunk-CEMSIU4Z.js} +5 -5
- package/dist/{chunk-FZC5N55X.js → chunk-CH4UQ4NO.js} +5 -5
- package/dist/{chunk-7X6SDK2C.js → chunk-CHU3RDV4.js} +3 -3
- package/dist/{chunk-Y4OBB2VN.js → chunk-CV4VVLPZ.js} +2 -2
- package/dist/{chunk-JQL7ZH6C.js → chunk-CXAN2FHF.js} +7 -7
- package/dist/{chunk-F2OPHAUN.js → chunk-CYDXCILL.js} +7 -7
- package/dist/{chunk-3PZ7JZI2.js → chunk-D3PTVN2I.js} +2 -2
- package/dist/{chunk-FPXASDG5.js → chunk-D5TIVCXG.js} +2 -2
- package/dist/{chunk-7W37NS3I.js → chunk-D74Z2N4K.js} +2 -2
- package/dist/{chunk-MNZG4OHU.js → chunk-DCEQCGVN.js} +2 -2
- package/dist/{chunk-ND2BXV3P.js → chunk-DEHLWZSI.js} +4 -4
- package/dist/{chunk-2YUOVM3G.js → chunk-DIP7YALH.js} +2 -2
- package/dist/{chunk-6PZ7OBYU.js → chunk-DLVIRJGK.js} +4 -4
- package/dist/{chunk-KLEUWIMZ.js → chunk-DQPIEQGP.js} +2 -2
- package/dist/{chunk-T2QX3FDP.js → chunk-DWJ6J3YW.js} +4 -4
- package/dist/{chunk-3CPWWGNK.js → chunk-E5KOWRDU.js} +2 -2
- package/dist/{chunk-6WGRDRMA.js → chunk-EBIVTDEG.js} +2 -2
- package/dist/{chunk-KUDGXAF7.js → chunk-EBTUPRRQ.js} +10 -10
- package/dist/{chunk-5CPEEAFD.js → chunk-EDDKPIIV.js} +2 -2
- package/dist/{chunk-TX3VECZU.js → chunk-EGKARC53.js} +2 -2
- package/dist/{chunk-JEA3QDX7.js → chunk-EKJHOWTZ.js} +4 -4
- package/dist/{chunk-UVN5TMHU.js → chunk-ESXAECZ3.js} +2 -2
- package/dist/{chunk-3SOIESJM.js → chunk-EWZ2RLNG.js} +2 -2
- package/dist/{chunk-CMKGILJK.js → chunk-FBA2NXYH.js} +4 -4
- package/dist/{chunk-O6N4ABCA.js → chunk-FER6EVIY.js} +2 -2
- package/dist/{chunk-DF5EAHDN.js → chunk-FLWQJDJ5.js} +5 -5
- package/dist/{chunk-PTAG4PDC.js → chunk-FNXCFIPW.js} +2 -2
- package/dist/chunk-FPSS23S4.js +36 -0
- package/dist/chunk-FPSS23S4.js.map +1 -0
- package/dist/{chunk-BJEJFISW.js → chunk-FSDQQQIA.js} +3 -3
- package/dist/{chunk-PTF5B7TJ.js → chunk-G5UQBTXY.js} +2 -2
- package/dist/{chunk-4E3ZJRTZ.js → chunk-G6ICCGJ3.js} +2 -2
- package/dist/{chunk-NRTE7DNV.js → chunk-GIWFLWXG.js} +4 -4
- package/dist/{chunk-MM4FNWI4.js → chunk-GMHIOYB7.js} +4 -4
- package/dist/{chunk-6DK6Z4UN.js → chunk-GOCODNQS.js} +3 -3
- package/dist/{chunk-TPQTRNER.js → chunk-GSCGKJNK.js} +2 -2
- package/dist/{chunk-7VMZGLYI.js → chunk-GTHCHCWW.js} +3 -3
- package/dist/{chunk-SQJIKMN3.js → chunk-GTRAH4FG.js} +2 -2
- package/dist/{chunk-ZYAZUPPV.js → chunk-GU7T2S5N.js} +3 -3
- package/dist/{chunk-JKHKLL5W.js → chunk-H6BX6WOW.js} +3 -3
- package/dist/{chunk-IMZCQBOT.js → chunk-H6MJFMHZ.js} +3 -3
- package/dist/{chunk-HSOXMJOT.js → chunk-HEGV4QMS.js} +2 -2
- package/dist/chunk-HROITVQJ.js +85 -0
- package/dist/chunk-HROITVQJ.js.map +1 -0
- package/dist/{chunk-OF4TIKYC.js → chunk-HTMQGS63.js} +17 -9
- package/dist/chunk-HTMQGS63.js.map +1 -0
- package/dist/{chunk-NC7PVOEK.js → chunk-HWVPLFIW.js} +2 -2
- package/dist/{chunk-IMDQUHBJ.js → chunk-HYEIA25Y.js} +2 -2
- package/dist/{chunk-ECJBYNLJ.js → chunk-ICAMYP5M.js} +2 -2
- package/dist/{chunk-DJAXC5OK.js → chunk-IFSXVU2S.js} +2 -2
- package/dist/{chunk-I4MRDSUF.js → chunk-IJR6VOLU.js} +3 -3
- package/dist/{chunk-YCVD6CI3.js → chunk-IN3VQFKS.js} +2 -2
- package/dist/{chunk-BJFH6JI5.js → chunk-IZXYFWA4.js} +13 -13
- package/dist/{chunk-MFROMEKA.js → chunk-J2BTILRR.js} +3 -3
- package/dist/{chunk-NCYMNCJO.js → chunk-J2WY42FA.js} +2 -2
- package/dist/{chunk-DGMR6JEJ.js → chunk-J4XSTXZP.js} +2 -2
- package/dist/{chunk-ZTPXACWB.js → chunk-JKL5S7UQ.js} +6 -6
- package/dist/{chunk-P77WNZDY.js → chunk-JMHEFZOB.js} +2 -2
- package/dist/{chunk-IDANQPRH.js → chunk-JV3UI7BH.js} +3 -3
- package/dist/{chunk-NW53H5RW.js → chunk-JV5ULONH.js} +166 -65
- package/dist/chunk-JV5ULONH.js.map +1 -0
- package/dist/{chunk-FVXBNBHO.js → chunk-K3D7IQQP.js} +6 -6
- package/dist/{chunk-XEQMZB3C.js → chunk-K4DQS2ML.js} +24 -6
- package/dist/chunk-K4DQS2ML.js.map +1 -0
- package/dist/{chunk-GKVJIDHF.js → chunk-KFNZZ2N6.js} +2 -2
- package/dist/{chunk-I4QEJ62Y.js → chunk-KI46GKMD.js} +7 -7
- package/dist/{chunk-SIRLACNZ.js → chunk-KO3OHHY2.js} +3 -3
- package/dist/{chunk-NULUNM7H.js → chunk-KUE5BOQE.js} +5 -5
- package/dist/{chunk-O3LKCBP5.js → chunk-LIJNVIT3.js} +3 -3
- package/dist/{chunk-JWB44UGJ.js → chunk-LIJPDVYP.js} +2 -2
- package/dist/{chunk-KYS77RPN.js → chunk-LPKJ77EK.js} +2 -2
- package/dist/{chunk-RMFKVOM7.js → chunk-LQKVNREV.js} +4 -4
- package/dist/{chunk-E7XERZWC.js → chunk-LTJFV2JI.js} +2 -2
- package/dist/{chunk-INXGSG3J.js → chunk-LVDNY5RC.js} +2 -2
- package/dist/{chunk-2INLDVK3.js → chunk-LVELUUK6.js} +2 -2
- package/dist/{chunk-TAT5USZN.js → chunk-M3FDGRB4.js} +3 -3
- package/dist/{chunk-5EWSRZ2Y.js → chunk-M3HGBO2Y.js} +1 -1
- package/dist/{chunk-J3DY5HWQ.js → chunk-M5IQVMLR.js} +4 -4
- package/dist/{chunk-53AGXXZM.js → chunk-MKDFYE2E.js} +2 -2
- package/dist/{chunk-4SAWSRAA.js → chunk-MRECRNVU.js} +5 -5
- package/dist/{chunk-2I7HDP53.js → chunk-MT2R57SF.js} +2 -2
- package/dist/{chunk-Z7Y523PS.js → chunk-MV2CLIO6.js} +6 -6
- package/dist/{chunk-JZ4NLCAP.js → chunk-MZY3VKKM.js} +2 -2
- package/dist/{chunk-YENLNISG.js → chunk-N3FM4BNA.js} +2 -2
- package/dist/{chunk-DZWARC4M.js → chunk-NFCS5WYC.js} +3 -3
- package/dist/{chunk-I5QZJODL.js → chunk-NQ2CPQJF.js} +3 -3
- package/dist/{chunk-6DVCC7QS.js → chunk-OBGOLHCP.js} +164 -43
- package/dist/chunk-OBGOLHCP.js.map +1 -0
- package/dist/{chunk-CUIWCGMA.js → chunk-OCXEY7HE.js} +2 -2
- package/dist/{chunk-VTTAJOQ7.js → chunk-OCXTTKVA.js} +2 -2
- package/dist/{chunk-KRDR5RJD.js → chunk-OGU73VUN.js} +2 -2
- package/dist/{chunk-YIRVLKAX.js → chunk-OI6VI6SU.js} +9 -9
- package/dist/{chunk-BHNSJVBC.js → chunk-OJWDNNW3.js} +5 -5
- package/dist/{chunk-X6KAJI3V.js → chunk-OK7BQMCI.js} +9 -9
- package/dist/{chunk-I5B5L6Q4.js → chunk-OOOSGPJL.js} +1 -1
- package/dist/chunk-OP2GD6QW.js +166 -0
- package/dist/chunk-OP2GD6QW.js.map +1 -0
- package/dist/{chunk-TUIN4MB7.js → chunk-ORV7EFSL.js} +4 -4
- package/dist/{chunk-JDTGRRNU.js → chunk-OSJ366KR.js} +49 -31
- package/dist/chunk-OSJ366KR.js.map +1 -0
- package/dist/{chunk-3IK6UYO6.js → chunk-OTW25A6I.js} +3 -3
- package/dist/{chunk-NPGISCU6.js → chunk-OWET7EY2.js} +16 -16
- package/dist/{chunk-CRAOSVHC.js → chunk-OXQ2SXVC.js} +2 -2
- package/dist/{chunk-3ED2U6XE.js → chunk-OYCK4JRS.js} +2 -2
- package/dist/{chunk-YQXTDZSU.js → chunk-OYOFPNLC.js} +4 -4
- package/dist/{chunk-4NQHXYMW.js → chunk-PD7NWM7V.js} +2 -2
- package/dist/{chunk-4YCA2Y73.js → chunk-PF2WU2IL.js} +3 -3
- package/dist/{chunk-Z654FWNU.js → chunk-PLYVGZIN.js} +2 -2
- package/dist/{chunk-MVW6HNPI.js → chunk-PRT4J2DL.js} +2 -2
- package/dist/{chunk-TXLIEOJX.js → chunk-PSM3CU7N.js} +111 -80
- package/dist/chunk-PSM3CU7N.js.map +1 -0
- package/dist/{chunk-OPWCMA4D.js → chunk-PUUEI4W3.js} +6 -6
- package/dist/{chunk-RLBKLAEY.js → chunk-PVB4YVDP.js} +2 -2
- package/dist/{chunk-NXCMHIKI.js → chunk-PWUSSSSL.js} +2 -2
- package/dist/{chunk-MJUCFQMS.js → chunk-PYB4BFEC.js} +3 -3
- package/dist/{chunk-2FSBSCZJ.js → chunk-PZKHST7A.js} +2 -2
- package/dist/{chunk-QZAAUQRN.js → chunk-Q5EZNBPI.js} +3 -3
- package/dist/{chunk-ZHDFQITM.js → chunk-Q5K2J5GG.js} +2 -2
- package/dist/{chunk-7T2ZE3VT.js → chunk-QPQ7R77C.js} +8 -1
- package/dist/chunk-QPQ7R77C.js.map +1 -0
- package/dist/{chunk-6BCXNDEI.js → chunk-QQIZMVAJ.js} +74 -60
- package/dist/chunk-QQIZMVAJ.js.map +1 -0
- package/dist/{chunk-OV6QJRT4.js → chunk-QRECBCJM.js} +2 -2
- package/dist/{chunk-3GZA4BUW.js → chunk-QURYQFDN.js} +2 -2
- package/dist/{chunk-VS7AHPCZ.js → chunk-R33SBMB7.js} +3 -3
- package/dist/{chunk-KCBMFSMS.js → chunk-R4JA5JFI.js} +3 -3
- package/dist/{chunk-HC4JFZVU.js → chunk-R5QAL43H.js} +2 -2
- package/dist/{chunk-QPSGCC5D.js → chunk-RGR57NYY.js} +2 -2
- package/dist/{chunk-XWFAMUZQ.js → chunk-RHXYO4H2.js} +2 -2
- package/dist/{chunk-Y4BB2KS2.js → chunk-RISUROBM.js} +7 -7
- package/dist/{chunk-U3DN4HEY.js → chunk-RMCLFSMX.js} +2 -2
- package/dist/{chunk-YK7756IF.js → chunk-RTZANSSC.js} +3 -3
- package/dist/{chunk-ZEG4VPBL.js → chunk-S27VZ5DO.js} +6 -6
- package/dist/{chunk-54YW6SZZ.js → chunk-SBXSKRFA.js} +3 -3
- package/dist/{chunk-HAX4LCR5.js → chunk-SFIXTOOJ.js} +3 -3
- package/dist/{chunk-QIOQ2NPQ.js → chunk-SGH7I7OY.js} +2 -2
- package/dist/{chunk-K2A5PXQ5.js → chunk-SJYTQLN3.js} +3 -3
- package/dist/{chunk-2Z3NQNTM.js → chunk-SK5S2PCK.js} +15 -15
- package/dist/{chunk-X3MWB2QU.js → chunk-SN2WENRP.js} +3 -3
- package/dist/{chunk-OSY5K7L7.js → chunk-SP44O3OU.js} +2 -2
- package/dist/{chunk-OZCBM3UC.js → chunk-SSR4ZX52.js} +2 -2
- package/dist/{chunk-QCSJ4CWE.js → chunk-SXGJL7UT.js} +14 -14
- package/dist/{chunk-NC55IFN3.js → chunk-T67LTMSW.js} +10 -10
- package/dist/{chunk-AXHZYXUV.js → chunk-TDTD66BK.js} +2 -2
- package/dist/{chunk-NGJJJPZZ.js → chunk-TK5FWVZR.js} +3 -3
- package/dist/{chunk-YPWU5KPE.js → chunk-TKQL7EDB.js} +56 -19
- package/dist/chunk-TKQL7EDB.js.map +1 -0
- package/dist/{chunk-2OP6WLGV.js → chunk-TNSJFZ6Q.js} +4 -4
- package/dist/{chunk-O732GAFC.js → chunk-U4LTPFD2.js} +2 -2
- package/dist/{chunk-4DVNUCRR.js → chunk-U5UGM5XD.js} +6 -6
- package/dist/{chunk-UJK53QFL.js → chunk-UBRQ3PQD.js} +2 -2
- package/dist/{chunk-SODC7T6L.js → chunk-UMX6DZME.js} +2 -2
- package/dist/{chunk-YLS6QE5G.js → chunk-UO35OEOX.js} +4 -4
- package/dist/{chunk-SHHJCL7X.js → chunk-UTRNLNCW.js} +3 -3
- package/dist/{chunk-HEFPPMBQ.js → chunk-UU5FBVRX.js} +2 -2
- package/dist/{chunk-GQXZPKK7.js → chunk-V6UOVHW3.js} +2 -2
- package/dist/{chunk-GVN5SZLX.js → chunk-VATYK3JQ.js} +3 -3
- package/dist/{chunk-7TIX2UAR.js → chunk-VCJQQYRE.js} +4 -4
- package/dist/{chunk-6WD2INST.js → chunk-WDASYY4S.js} +7 -7
- package/dist/{chunk-DXBYWSL5.js → chunk-WIFDNUKD.js} +3 -3
- package/dist/{chunk-RT7CJMER.js → chunk-WIXHUBQN.js} +2 -2
- package/dist/{chunk-57AZS3IE.js → chunk-WRMUXZ7C.js} +3 -3
- package/dist/{chunk-2CLNIEK4.js → chunk-WTSQUCHB.js} +3 -3
- package/dist/{chunk-OVKYVZMW.js → chunk-WXF2RTS4.js} +2 -2
- package/dist/{chunk-MIHN76LX.js → chunk-WYGTAQMX.js} +3 -3
- package/dist/{chunk-2RG7NIAS.js → chunk-X2QJXDE4.js} +10 -10
- package/dist/{chunk-GAVYGBFI.js → chunk-XMBOLFFS.js} +2 -2
- package/dist/{chunk-T7OXJZCX.js → chunk-XOIDUM2H.js} +1 -1
- package/dist/{chunk-ORJPS5VN.js → chunk-XUOYNJPB.js} +97 -37
- package/dist/chunk-XUOYNJPB.js.map +1 -0
- package/dist/{chunk-XHIQ5I6N.js → chunk-XVLEBB4Y.js} +2 -2
- package/dist/{chunk-Q3DPEYX4.js → chunk-XZCCEKPW.js} +7 -7
- package/dist/{chunk-T3OWFVMS.js → chunk-Y3XZEKDQ.js} +2 -2
- package/dist/{chunk-KODELWYT.js → chunk-YJSCLGAW.js} +3 -3
- package/dist/{chunk-ROKQU7WG.js → chunk-YMI27QPF.js} +2 -2
- package/dist/{chunk-U7XM7CB4.js → chunk-YNTLWCF4.js} +4 -4
- package/dist/{chunk-ZQCND77P.js → chunk-YRYF76OE.js} +2 -2
- package/dist/{chunk-2BDT3UZQ.js → chunk-ZAX4XQLN.js} +3 -3
- package/dist/{chunk-DXR5PDFP.js → chunk-ZBHGNE2J.js} +3 -3
- package/dist/{chunk-I7ITSXSJ.js → chunk-ZR5EKJT6.js} +2 -2
- package/dist/{chunk-IZXHMZQ6.js → chunk-ZW5YTIH3.js} +4 -4
- package/dist/components/artifacts/artifact-sandbox.d.ts +6 -1
- package/dist/components/artifacts/site-view.d.ts +4 -2
- package/dist/components/timeline-anchor.d.ts +8 -3
- package/dist/components/timeline-reading-progress.d.ts +1 -1
- package/dist/components/timeline-settlement.d.ts +1 -1
- package/dist/composer-messages.js +2 -2
- package/dist/composer.js +10 -10
- package/dist/{computer-viewer-TDDO25AV.js → computer-viewer-5LKRCEVQ.js} +5 -5
- package/dist/connect.js +13 -14
- package/dist/desktop-dictation.js +7 -7
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/{embedded-new-voice-2G3VLPVQ.js → embedded-new-voice-GHJRY3YL.js} +5 -5
- package/dist/{embedded-voice-T5IWOWGD.js → embedded-voice-ASQXBSTX.js} +5 -5
- package/dist/{fleet-decision-row-WM64KXP3.js → fleet-decision-row-U7LDVBEM.js} +2 -2
- package/dist/in-chat-connect-model.js +5 -5
- package/dist/index.js +62 -63
- package/dist/interaction.js +6 -6
- package/dist/{latest-question-OX56OVQ5.js → latest-question-RNVF262Q.js} +5 -5
- package/dist/lib/format.d.ts +10 -0
- package/dist/machines.js +4 -4
- package/dist/meetings-recorder.js +1 -1
- package/dist/meetings.js +24 -24
- package/dist/messages/en.d.ts +7 -0
- package/dist/messages.js +1 -1
- package/dist/{model-policy-picker-menu-SMC6J6QN.js → model-policy-picker-menu-E6XKMFTA.js} +4 -4
- package/dist/{payment-page-card-G4U63KUV.js → payment-page-card-DJDKV2LW.js} +6 -5
- package/dist/{payment-page-card-G4U63KUV.js.map → payment-page-card-DJDKV2LW.js.map} +1 -1
- package/dist/{platform-activity-row-BUZGZAKZ.js → platform-activity-row-MSDCSMET.js} +17 -7
- package/dist/platform-activity-row-MSDCSMET.js.map +1 -0
- package/dist/{queue-surface-implementation-4KUZ4PJV.js → queue-surface-implementation-GUAIG6TK.js} +5 -5
- package/dist/realtime.js +4 -4
- package/dist/{recorder-host-WF2RRR56.js → recorder-host-2MYDJPQW.js} +4 -4
- package/dist/recordings.js +3 -3
- package/dist/{sandbox-files-ESDMOFSD.js → sandbox-files-W5W2LW4K.js} +6 -6
- package/dist/session-app.js +173 -167
- package/dist/{session-connect-cards-Q53KMMYY.js → session-connect-cards-HPH7JOZP.js} +9 -10
- package/dist/session-list-model.js +2 -2
- package/dist/{session-realtime-CF3I35WJ.js → session-realtime-SDTKFFIR.js} +3 -3
- package/dist/session-realtime-SDTKFFIR.js.map +1 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +37 -38
- package/dist/session.js +9 -9
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline/shared.d.ts +2 -0
- package/dist/{timeline-annotation-markers-CJK4RYZ4.js → timeline-annotation-markers-FNILLWNU.js} +2 -2
- package/dist/{timeline-annotation-selection-67GF5H26.js → timeline-annotation-selection-MBCIDO2Q.js} +2 -2
- package/dist/{timeline-annotations-dialog-ONJPQDJQ.js → timeline-annotations-dialog-JPNKLOTE.js} +3 -3
- package/dist/timeline-model.js +6 -6
- package/dist/ui/access-list.js +6 -6
- package/dist/ui/cadence-picker.js +4 -4
- package/dist/ui/choice-cards.js +3 -3
- package/dist/ui/confirm-dialog.js +4 -4
- package/dist/ui/copy-field.js +3 -3
- package/dist/ui/detail-page.js +5 -5
- package/dist/ui/detail-sheet.js +4 -4
- package/dist/ui/dialog.js +2 -2
- package/dist/ui/disclosure.js +5 -5
- package/dist/ui/email-chips-input.js +3 -3
- package/dist/ui/field.js +2 -2
- package/dist/ui/flush-form-page.js +4 -4
- package/dist/ui/form-dialog.js +3 -3
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/page-header.js +2 -2
- package/dist/ui/relative-time.js +2 -2
- package/dist/ui/revision-history.js +4 -4
- package/dist/ui/role-select.js +6 -6
- package/dist/ui/select-menu.js +3 -3
- package/dist/ui/sheet.js +2 -2
- package/dist/ui/usage-meter.js +3 -3
- package/dist/ui/window-bar-title.d.ts +7 -3
- package/dist/ui/window-bar-title.js +1 -1
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +4 -4
- package/src/app/components/artifacts/site-actions.tsx +105 -0
- package/src/app/components/rail/session-header-copy.test.tsx +172 -0
- package/src/app/components/rail/session-header.tsx +68 -12
- package/src/app/components/rail/session-list.tsx +20 -0
- package/src/app/components/rail/site-session-group-heading.test.tsx +210 -0
- package/src/app/components/rail/site-session-group-heading.tsx +119 -60
- package/src/app/components/session/failed-session-actions.test.tsx +4 -0
- package/src/app/components/window-bar.tsx +63 -15
- package/src/app/lib/composer-send-blocking.tsx +312 -1
- package/src/app/lib/copy-link.ts +10 -0
- package/src/app/lib/session-composer-readiness.ts +4 -3
- package/src/app/lib/site-sidebar-bridge.test.tsx +67 -0
- package/src/app/lib/site-sidebar-bridge.ts +57 -0
- package/src/app/routes/session.tsx +45 -12
- package/src/app/routes/sessions-index.tsx +164 -105
- package/src/app/routes/site-view.test.tsx +74 -6
- package/src/app/routes/site-view.tsx +135 -14
- package/src/components/approval-surface.tsx +78 -3
- package/src/components/artifacts/artifact-sandbox.tsx +27 -2
- package/src/components/artifacts/site-view.tsx +13 -1
- package/src/components/message-timeline.tsx +25 -52
- package/src/components/session-capability-frame.tsx +2 -30
- package/src/components/timeline-anchor.tsx +19 -14
- package/src/components/timeline-reading-progress.ts +1 -2
- package/src/components/timeline-settlement.ts +3 -3
- package/src/lib/format.ts +46 -1
- package/src/messages/en.ts +11 -0
- package/src/timeline/platform-activity-row.tsx +20 -8
- package/src/timeline/shared.tsx +203 -32
- package/src/ui/window-bar-title.test.tsx +37 -0
- package/src/ui/window-bar-title.tsx +13 -6
- package/styles/compiled.css +5 -0
- package/dist/chunk-5MOJZORA.js.map +0 -1
- package/dist/chunk-6BCXNDEI.js.map +0 -1
- package/dist/chunk-6DVCC7QS.js.map +0 -1
- package/dist/chunk-7T2ZE3VT.js.map +0 -1
- package/dist/chunk-AFRGP2VP.js +0 -17
- package/dist/chunk-AFRGP2VP.js.map +0 -1
- package/dist/chunk-CRU35QQH.js.map +0 -1
- package/dist/chunk-FO4LYKJL.js +0 -197
- package/dist/chunk-FO4LYKJL.js.map +0 -1
- package/dist/chunk-HD5X76TP.js.map +0 -1
- package/dist/chunk-JDTGRRNU.js.map +0 -1
- package/dist/chunk-NW53H5RW.js.map +0 -1
- package/dist/chunk-OF4TIKYC.js.map +0 -1
- package/dist/chunk-ORJPS5VN.js.map +0 -1
- package/dist/chunk-TXLIEOJX.js.map +0 -1
- package/dist/chunk-VBUVBHFJ.js +0 -16
- package/dist/chunk-VBUVBHFJ.js.map +0 -1
- package/dist/chunk-XEQMZB3C.js.map +0 -1
- package/dist/chunk-YPWU5KPE.js.map +0 -1
- package/dist/components/timeline-answer-follow.d.ts +0 -8
- package/dist/platform-activity-row-BUZGZAKZ.js.map +0 -1
- package/src/components/timeline-answer-follow.ts +0 -15
- /package/dist/{browser-viewer-TC27OCIP.js.map → app/components/artifacts/site-actions.js.map} +0 -0
- /package/dist/{chat-interactive-block-RWPQBHVS.js.map → browser-viewer-ZHQDVHZ2.js.map} +0 -0
- /package/dist/{computer-viewer-TDDO25AV.js.map → chat-interactive-block-VSDD6X3M.js.map} +0 -0
- /package/dist/{chunk-C43KRXGA.js.map → chunk-2GCHGWNE.js.map} +0 -0
- /package/dist/{chunk-XLH7QY2R.js.map → chunk-2J77TWGH.js.map} +0 -0
- /package/dist/{chunk-77WAKEAH.js.map → chunk-2OXSB2OL.js.map} +0 -0
- /package/dist/{chunk-H3T7IWNA.js.map → chunk-2VJOSU4H.js.map} +0 -0
- /package/dist/{chunk-N6AACDUW.js.map → chunk-34NV52R3.js.map} +0 -0
- /package/dist/{chunk-L7YTNTIK.js.map → chunk-3CDJSKDW.js.map} +0 -0
- /package/dist/{chunk-EWSOC6WF.js.map → chunk-3DRLCX5V.js.map} +0 -0
- /package/dist/{chunk-JEUPAVYY.js.map → chunk-3L465FBR.js.map} +0 -0
- /package/dist/{chunk-5NWEKLDZ.js.map → chunk-3NNAC43A.js.map} +0 -0
- /package/dist/{chunk-EDI6SJ2N.js.map → chunk-3OK7Y6ES.js.map} +0 -0
- /package/dist/{chunk-AWKES45Y.js.map → chunk-3PM3M2Q6.js.map} +0 -0
- /package/dist/{chunk-I7XIZRFD.js.map → chunk-3PZ3LRPV.js.map} +0 -0
- /package/dist/{chunk-AW2MQB37.js.map → chunk-44JWVYJB.js.map} +0 -0
- /package/dist/{chunk-2M3J7ZWQ.js.map → chunk-467WDSOK.js.map} +0 -0
- /package/dist/{chunk-UTIAXH52.js.map → chunk-477DTTMH.js.map} +0 -0
- /package/dist/{chunk-J5F5HPPW.js.map → chunk-4BWMAGJJ.js.map} +0 -0
- /package/dist/{chunk-YSJEAAOL.js.map → chunk-4F3AEJI6.js.map} +0 -0
- /package/dist/{chunk-LHPNABDH.js.map → chunk-4JXPLTWV.js.map} +0 -0
- /package/dist/{chunk-RQKLF42C.js.map → chunk-4K64EKM7.js.map} +0 -0
- /package/dist/{chunk-NUNZS36W.js.map → chunk-4O2XWOLZ.js.map} +0 -0
- /package/dist/{chunk-QB2KMIDP.js.map → chunk-4SJAEPM2.js.map} +0 -0
- /package/dist/{chunk-6JHU2UBS.js.map → chunk-4Z5X7PLC.js.map} +0 -0
- /package/dist/{chunk-2STUPWEL.js.map → chunk-54U6ZBEX.js.map} +0 -0
- /package/dist/{chunk-XXSOHN35.js.map → chunk-5FLYHX5R.js.map} +0 -0
- /package/dist/{chunk-MIYFS2XN.js.map → chunk-5MHMCE2G.js.map} +0 -0
- /package/dist/{chunk-YWVI6ZMK.js.map → chunk-5MIBQ4P5.js.map} +0 -0
- /package/dist/{chunk-5O2FCCHZ.js.map → chunk-6QK65ZWM.js.map} +0 -0
- /package/dist/{chunk-RPVREAU7.js.map → chunk-736RUNIA.js.map} +0 -0
- /package/dist/{chunk-2KALVELR.js.map → chunk-74CBR5YE.js.map} +0 -0
- /package/dist/{chunk-5IE76VCY.js.map → chunk-752WXSDN.js.map} +0 -0
- /package/dist/{chunk-OPJJSKUK.js.map → chunk-77B6UCNK.js.map} +0 -0
- /package/dist/{chunk-SEO7TICN.js.map → chunk-77BHKC43.js.map} +0 -0
- /package/dist/{chunk-ZUA3JMI6.js.map → chunk-77SYIH6O.js.map} +0 -0
- /package/dist/{chunk-ILDXWY37.js.map → chunk-7AI4E7PV.js.map} +0 -0
- /package/dist/{chunk-C372BFOV.js.map → chunk-7NLF35YL.js.map} +0 -0
- /package/dist/{chunk-IFB3WJ36.js.map → chunk-7YTR3UFO.js.map} +0 -0
- /package/dist/{chunk-BMICEQZQ.js.map → chunk-7Z76QP64.js.map} +0 -0
- /package/dist/{chunk-YWIFM7D7.js.map → chunk-AAS7OWV6.js.map} +0 -0
- /package/dist/{chunk-5QAY6K77.js.map → chunk-AB5IW227.js.map} +0 -0
- /package/dist/{chunk-ZBIXBQNI.js.map → chunk-ABJZDRW2.js.map} +0 -0
- /package/dist/{chunk-4DVJ6ONS.js.map → chunk-AH3DGOTK.js.map} +0 -0
- /package/dist/{chunk-HGKTHF2U.js.map → chunk-AJBDAVX3.js.map} +0 -0
- /package/dist/{chunk-5YKW2K6I.js.map → chunk-AJDGP2N4.js.map} +0 -0
- /package/dist/{chunk-IXPTECSC.js.map → chunk-AVXDIRRW.js.map} +0 -0
- /package/dist/{chunk-QK5EFEUT.js.map → chunk-BASI553K.js.map} +0 -0
- /package/dist/{chunk-Z4FMAFNH.js.map → chunk-BQYRZIZ7.js.map} +0 -0
- /package/dist/{chunk-DZXEDSQI.js.map → chunk-CEMSIU4Z.js.map} +0 -0
- /package/dist/{chunk-FZC5N55X.js.map → chunk-CH4UQ4NO.js.map} +0 -0
- /package/dist/{chunk-7X6SDK2C.js.map → chunk-CHU3RDV4.js.map} +0 -0
- /package/dist/{chunk-Y4OBB2VN.js.map → chunk-CV4VVLPZ.js.map} +0 -0
- /package/dist/{chunk-JQL7ZH6C.js.map → chunk-CXAN2FHF.js.map} +0 -0
- /package/dist/{chunk-F2OPHAUN.js.map → chunk-CYDXCILL.js.map} +0 -0
- /package/dist/{chunk-3PZ7JZI2.js.map → chunk-D3PTVN2I.js.map} +0 -0
- /package/dist/{chunk-FPXASDG5.js.map → chunk-D5TIVCXG.js.map} +0 -0
- /package/dist/{chunk-7W37NS3I.js.map → chunk-D74Z2N4K.js.map} +0 -0
- /package/dist/{chunk-MNZG4OHU.js.map → chunk-DCEQCGVN.js.map} +0 -0
- /package/dist/{chunk-ND2BXV3P.js.map → chunk-DEHLWZSI.js.map} +0 -0
- /package/dist/{chunk-2YUOVM3G.js.map → chunk-DIP7YALH.js.map} +0 -0
- /package/dist/{chunk-6PZ7OBYU.js.map → chunk-DLVIRJGK.js.map} +0 -0
- /package/dist/{chunk-KLEUWIMZ.js.map → chunk-DQPIEQGP.js.map} +0 -0
- /package/dist/{chunk-T2QX3FDP.js.map → chunk-DWJ6J3YW.js.map} +0 -0
- /package/dist/{chunk-3CPWWGNK.js.map → chunk-E5KOWRDU.js.map} +0 -0
- /package/dist/{chunk-6WGRDRMA.js.map → chunk-EBIVTDEG.js.map} +0 -0
- /package/dist/{chunk-KUDGXAF7.js.map → chunk-EBTUPRRQ.js.map} +0 -0
- /package/dist/{chunk-5CPEEAFD.js.map → chunk-EDDKPIIV.js.map} +0 -0
- /package/dist/{chunk-TX3VECZU.js.map → chunk-EGKARC53.js.map} +0 -0
- /package/dist/{chunk-JEA3QDX7.js.map → chunk-EKJHOWTZ.js.map} +0 -0
- /package/dist/{chunk-UVN5TMHU.js.map → chunk-ESXAECZ3.js.map} +0 -0
- /package/dist/{chunk-3SOIESJM.js.map → chunk-EWZ2RLNG.js.map} +0 -0
- /package/dist/{chunk-CMKGILJK.js.map → chunk-FBA2NXYH.js.map} +0 -0
- /package/dist/{chunk-O6N4ABCA.js.map → chunk-FER6EVIY.js.map} +0 -0
- /package/dist/{chunk-DF5EAHDN.js.map → chunk-FLWQJDJ5.js.map} +0 -0
- /package/dist/{chunk-PTAG4PDC.js.map → chunk-FNXCFIPW.js.map} +0 -0
- /package/dist/{chunk-BJEJFISW.js.map → chunk-FSDQQQIA.js.map} +0 -0
- /package/dist/{chunk-PTF5B7TJ.js.map → chunk-G5UQBTXY.js.map} +0 -0
- /package/dist/{chunk-4E3ZJRTZ.js.map → chunk-G6ICCGJ3.js.map} +0 -0
- /package/dist/{chunk-NRTE7DNV.js.map → chunk-GIWFLWXG.js.map} +0 -0
- /package/dist/{chunk-MM4FNWI4.js.map → chunk-GMHIOYB7.js.map} +0 -0
- /package/dist/{chunk-6DK6Z4UN.js.map → chunk-GOCODNQS.js.map} +0 -0
- /package/dist/{chunk-TPQTRNER.js.map → chunk-GSCGKJNK.js.map} +0 -0
- /package/dist/{chunk-7VMZGLYI.js.map → chunk-GTHCHCWW.js.map} +0 -0
- /package/dist/{chunk-SQJIKMN3.js.map → chunk-GTRAH4FG.js.map} +0 -0
- /package/dist/{chunk-ZYAZUPPV.js.map → chunk-GU7T2S5N.js.map} +0 -0
- /package/dist/{chunk-JKHKLL5W.js.map → chunk-H6BX6WOW.js.map} +0 -0
- /package/dist/{chunk-IMZCQBOT.js.map → chunk-H6MJFMHZ.js.map} +0 -0
- /package/dist/{chunk-HSOXMJOT.js.map → chunk-HEGV4QMS.js.map} +0 -0
- /package/dist/{chunk-NC7PVOEK.js.map → chunk-HWVPLFIW.js.map} +0 -0
- /package/dist/{chunk-IMDQUHBJ.js.map → chunk-HYEIA25Y.js.map} +0 -0
- /package/dist/{chunk-ECJBYNLJ.js.map → chunk-ICAMYP5M.js.map} +0 -0
- /package/dist/{chunk-DJAXC5OK.js.map → chunk-IFSXVU2S.js.map} +0 -0
- /package/dist/{chunk-I4MRDSUF.js.map → chunk-IJR6VOLU.js.map} +0 -0
- /package/dist/{chunk-YCVD6CI3.js.map → chunk-IN3VQFKS.js.map} +0 -0
- /package/dist/{chunk-BJFH6JI5.js.map → chunk-IZXYFWA4.js.map} +0 -0
- /package/dist/{chunk-MFROMEKA.js.map → chunk-J2BTILRR.js.map} +0 -0
- /package/dist/{chunk-NCYMNCJO.js.map → chunk-J2WY42FA.js.map} +0 -0
- /package/dist/{chunk-DGMR6JEJ.js.map → chunk-J4XSTXZP.js.map} +0 -0
- /package/dist/{chunk-ZTPXACWB.js.map → chunk-JKL5S7UQ.js.map} +0 -0
- /package/dist/{chunk-P77WNZDY.js.map → chunk-JMHEFZOB.js.map} +0 -0
- /package/dist/{chunk-IDANQPRH.js.map → chunk-JV3UI7BH.js.map} +0 -0
- /package/dist/{chunk-FVXBNBHO.js.map → chunk-K3D7IQQP.js.map} +0 -0
- /package/dist/{chunk-GKVJIDHF.js.map → chunk-KFNZZ2N6.js.map} +0 -0
- /package/dist/{chunk-I4QEJ62Y.js.map → chunk-KI46GKMD.js.map} +0 -0
- /package/dist/{chunk-SIRLACNZ.js.map → chunk-KO3OHHY2.js.map} +0 -0
- /package/dist/{chunk-NULUNM7H.js.map → chunk-KUE5BOQE.js.map} +0 -0
- /package/dist/{chunk-O3LKCBP5.js.map → chunk-LIJNVIT3.js.map} +0 -0
- /package/dist/{chunk-JWB44UGJ.js.map → chunk-LIJPDVYP.js.map} +0 -0
- /package/dist/{chunk-KYS77RPN.js.map → chunk-LPKJ77EK.js.map} +0 -0
- /package/dist/{chunk-RMFKVOM7.js.map → chunk-LQKVNREV.js.map} +0 -0
- /package/dist/{chunk-E7XERZWC.js.map → chunk-LTJFV2JI.js.map} +0 -0
- /package/dist/{chunk-INXGSG3J.js.map → chunk-LVDNY5RC.js.map} +0 -0
- /package/dist/{chunk-2INLDVK3.js.map → chunk-LVELUUK6.js.map} +0 -0
- /package/dist/{chunk-TAT5USZN.js.map → chunk-M3FDGRB4.js.map} +0 -0
- /package/dist/{chunk-5EWSRZ2Y.js.map → chunk-M3HGBO2Y.js.map} +0 -0
- /package/dist/{chunk-J3DY5HWQ.js.map → chunk-M5IQVMLR.js.map} +0 -0
- /package/dist/{chunk-53AGXXZM.js.map → chunk-MKDFYE2E.js.map} +0 -0
- /package/dist/{chunk-4SAWSRAA.js.map → chunk-MRECRNVU.js.map} +0 -0
- /package/dist/{chunk-2I7HDP53.js.map → chunk-MT2R57SF.js.map} +0 -0
- /package/dist/{chunk-Z7Y523PS.js.map → chunk-MV2CLIO6.js.map} +0 -0
- /package/dist/{chunk-JZ4NLCAP.js.map → chunk-MZY3VKKM.js.map} +0 -0
- /package/dist/{chunk-YENLNISG.js.map → chunk-N3FM4BNA.js.map} +0 -0
- /package/dist/{chunk-DZWARC4M.js.map → chunk-NFCS5WYC.js.map} +0 -0
- /package/dist/{chunk-I5QZJODL.js.map → chunk-NQ2CPQJF.js.map} +0 -0
- /package/dist/{chunk-CUIWCGMA.js.map → chunk-OCXEY7HE.js.map} +0 -0
- /package/dist/{chunk-VTTAJOQ7.js.map → chunk-OCXTTKVA.js.map} +0 -0
- /package/dist/{chunk-KRDR5RJD.js.map → chunk-OGU73VUN.js.map} +0 -0
- /package/dist/{chunk-YIRVLKAX.js.map → chunk-OI6VI6SU.js.map} +0 -0
- /package/dist/{chunk-BHNSJVBC.js.map → chunk-OJWDNNW3.js.map} +0 -0
- /package/dist/{chunk-X6KAJI3V.js.map → chunk-OK7BQMCI.js.map} +0 -0
- /package/dist/{chunk-I5B5L6Q4.js.map → chunk-OOOSGPJL.js.map} +0 -0
- /package/dist/{chunk-TUIN4MB7.js.map → chunk-ORV7EFSL.js.map} +0 -0
- /package/dist/{chunk-3IK6UYO6.js.map → chunk-OTW25A6I.js.map} +0 -0
- /package/dist/{chunk-NPGISCU6.js.map → chunk-OWET7EY2.js.map} +0 -0
- /package/dist/{chunk-CRAOSVHC.js.map → chunk-OXQ2SXVC.js.map} +0 -0
- /package/dist/{chunk-3ED2U6XE.js.map → chunk-OYCK4JRS.js.map} +0 -0
- /package/dist/{chunk-YQXTDZSU.js.map → chunk-OYOFPNLC.js.map} +0 -0
- /package/dist/{chunk-4NQHXYMW.js.map → chunk-PD7NWM7V.js.map} +0 -0
- /package/dist/{chunk-4YCA2Y73.js.map → chunk-PF2WU2IL.js.map} +0 -0
- /package/dist/{chunk-Z654FWNU.js.map → chunk-PLYVGZIN.js.map} +0 -0
- /package/dist/{chunk-MVW6HNPI.js.map → chunk-PRT4J2DL.js.map} +0 -0
- /package/dist/{chunk-OPWCMA4D.js.map → chunk-PUUEI4W3.js.map} +0 -0
- /package/dist/{chunk-RLBKLAEY.js.map → chunk-PVB4YVDP.js.map} +0 -0
- /package/dist/{chunk-NXCMHIKI.js.map → chunk-PWUSSSSL.js.map} +0 -0
- /package/dist/{chunk-MJUCFQMS.js.map → chunk-PYB4BFEC.js.map} +0 -0
- /package/dist/{chunk-2FSBSCZJ.js.map → chunk-PZKHST7A.js.map} +0 -0
- /package/dist/{chunk-QZAAUQRN.js.map → chunk-Q5EZNBPI.js.map} +0 -0
- /package/dist/{chunk-ZHDFQITM.js.map → chunk-Q5K2J5GG.js.map} +0 -0
- /package/dist/{chunk-OV6QJRT4.js.map → chunk-QRECBCJM.js.map} +0 -0
- /package/dist/{chunk-3GZA4BUW.js.map → chunk-QURYQFDN.js.map} +0 -0
- /package/dist/{chunk-VS7AHPCZ.js.map → chunk-R33SBMB7.js.map} +0 -0
- /package/dist/{chunk-KCBMFSMS.js.map → chunk-R4JA5JFI.js.map} +0 -0
- /package/dist/{chunk-HC4JFZVU.js.map → chunk-R5QAL43H.js.map} +0 -0
- /package/dist/{chunk-QPSGCC5D.js.map → chunk-RGR57NYY.js.map} +0 -0
- /package/dist/{chunk-XWFAMUZQ.js.map → chunk-RHXYO4H2.js.map} +0 -0
- /package/dist/{chunk-Y4BB2KS2.js.map → chunk-RISUROBM.js.map} +0 -0
- /package/dist/{chunk-U3DN4HEY.js.map → chunk-RMCLFSMX.js.map} +0 -0
- /package/dist/{chunk-YK7756IF.js.map → chunk-RTZANSSC.js.map} +0 -0
- /package/dist/{chunk-ZEG4VPBL.js.map → chunk-S27VZ5DO.js.map} +0 -0
- /package/dist/{chunk-54YW6SZZ.js.map → chunk-SBXSKRFA.js.map} +0 -0
- /package/dist/{chunk-HAX4LCR5.js.map → chunk-SFIXTOOJ.js.map} +0 -0
- /package/dist/{chunk-QIOQ2NPQ.js.map → chunk-SGH7I7OY.js.map} +0 -0
- /package/dist/{chunk-K2A5PXQ5.js.map → chunk-SJYTQLN3.js.map} +0 -0
- /package/dist/{chunk-2Z3NQNTM.js.map → chunk-SK5S2PCK.js.map} +0 -0
- /package/dist/{chunk-X3MWB2QU.js.map → chunk-SN2WENRP.js.map} +0 -0
- /package/dist/{chunk-OSY5K7L7.js.map → chunk-SP44O3OU.js.map} +0 -0
- /package/dist/{chunk-OZCBM3UC.js.map → chunk-SSR4ZX52.js.map} +0 -0
- /package/dist/{chunk-QCSJ4CWE.js.map → chunk-SXGJL7UT.js.map} +0 -0
- /package/dist/{chunk-NC55IFN3.js.map → chunk-T67LTMSW.js.map} +0 -0
- /package/dist/{chunk-AXHZYXUV.js.map → chunk-TDTD66BK.js.map} +0 -0
- /package/dist/{chunk-NGJJJPZZ.js.map → chunk-TK5FWVZR.js.map} +0 -0
- /package/dist/{chunk-2OP6WLGV.js.map → chunk-TNSJFZ6Q.js.map} +0 -0
- /package/dist/{chunk-O732GAFC.js.map → chunk-U4LTPFD2.js.map} +0 -0
- /package/dist/{chunk-4DVNUCRR.js.map → chunk-U5UGM5XD.js.map} +0 -0
- /package/dist/{chunk-UJK53QFL.js.map → chunk-UBRQ3PQD.js.map} +0 -0
- /package/dist/{chunk-SODC7T6L.js.map → chunk-UMX6DZME.js.map} +0 -0
- /package/dist/{chunk-YLS6QE5G.js.map → chunk-UO35OEOX.js.map} +0 -0
- /package/dist/{chunk-SHHJCL7X.js.map → chunk-UTRNLNCW.js.map} +0 -0
- /package/dist/{chunk-HEFPPMBQ.js.map → chunk-UU5FBVRX.js.map} +0 -0
- /package/dist/{chunk-GQXZPKK7.js.map → chunk-V6UOVHW3.js.map} +0 -0
- /package/dist/{chunk-GVN5SZLX.js.map → chunk-VATYK3JQ.js.map} +0 -0
- /package/dist/{chunk-7TIX2UAR.js.map → chunk-VCJQQYRE.js.map} +0 -0
- /package/dist/{chunk-6WD2INST.js.map → chunk-WDASYY4S.js.map} +0 -0
- /package/dist/{chunk-DXBYWSL5.js.map → chunk-WIFDNUKD.js.map} +0 -0
- /package/dist/{chunk-RT7CJMER.js.map → chunk-WIXHUBQN.js.map} +0 -0
- /package/dist/{chunk-57AZS3IE.js.map → chunk-WRMUXZ7C.js.map} +0 -0
- /package/dist/{chunk-2CLNIEK4.js.map → chunk-WTSQUCHB.js.map} +0 -0
- /package/dist/{chunk-OVKYVZMW.js.map → chunk-WXF2RTS4.js.map} +0 -0
- /package/dist/{chunk-MIHN76LX.js.map → chunk-WYGTAQMX.js.map} +0 -0
- /package/dist/{chunk-2RG7NIAS.js.map → chunk-X2QJXDE4.js.map} +0 -0
- /package/dist/{chunk-GAVYGBFI.js.map → chunk-XMBOLFFS.js.map} +0 -0
- /package/dist/{chunk-T7OXJZCX.js.map → chunk-XOIDUM2H.js.map} +0 -0
- /package/dist/{chunk-XHIQ5I6N.js.map → chunk-XVLEBB4Y.js.map} +0 -0
- /package/dist/{chunk-Q3DPEYX4.js.map → chunk-XZCCEKPW.js.map} +0 -0
- /package/dist/{chunk-T3OWFVMS.js.map → chunk-Y3XZEKDQ.js.map} +0 -0
- /package/dist/{chunk-KODELWYT.js.map → chunk-YJSCLGAW.js.map} +0 -0
- /package/dist/{chunk-ROKQU7WG.js.map → chunk-YMI27QPF.js.map} +0 -0
- /package/dist/{chunk-U7XM7CB4.js.map → chunk-YNTLWCF4.js.map} +0 -0
- /package/dist/{chunk-ZQCND77P.js.map → chunk-YRYF76OE.js.map} +0 -0
- /package/dist/{chunk-2BDT3UZQ.js.map → chunk-ZAX4XQLN.js.map} +0 -0
- /package/dist/{chunk-DXR5PDFP.js.map → chunk-ZBHGNE2J.js.map} +0 -0
- /package/dist/{chunk-I7ITSXSJ.js.map → chunk-ZR5EKJT6.js.map} +0 -0
- /package/dist/{chunk-IZXHMZQ6.js.map → chunk-ZW5YTIH3.js.map} +0 -0
- /package/dist/{embedded-new-voice-2G3VLPVQ.js.map → computer-viewer-5LKRCEVQ.js.map} +0 -0
- /package/dist/{embedded-voice-T5IWOWGD.js.map → embedded-new-voice-GHJRY3YL.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-SMC6J6QN.js.map → embedded-voice-ASQXBSTX.js.map} +0 -0
- /package/dist/{fleet-decision-row-WM64KXP3.js.map → fleet-decision-row-U7LDVBEM.js.map} +0 -0
- /package/dist/{latest-question-OX56OVQ5.js.map → latest-question-RNVF262Q.js.map} +0 -0
- /package/dist/{sandbox-files-ESDMOFSD.js.map → model-policy-picker-menu-E6XKMFTA.js.map} +0 -0
- /package/dist/{queue-surface-implementation-4KUZ4PJV.js.map → queue-surface-implementation-GUAIG6TK.js.map} +0 -0
- /package/dist/{recorder-host-WF2RRR56.js.map → recorder-host-2MYDJPQW.js.map} +0 -0
- /package/dist/{session-connect-cards-Q53KMMYY.js.map → sandbox-files-W5W2LW4K.js.map} +0 -0
- /package/dist/{session-realtime-CF3I35WJ.js.map → session-connect-cards-HPH7JOZP.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-CJK4RYZ4.js.map → timeline-annotation-markers-FNILLWNU.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-67GF5H26.js.map → timeline-annotation-selection-MBCIDO2Q.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-ONJPQDJQ.js.map → timeline-annotations-dialog-JPNKLOTE.js.map} +0 -0
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
BellOffIcon,
|
|
35
35
|
BotIcon,
|
|
36
36
|
CalendarClockIcon,
|
|
37
|
+
CopyIcon,
|
|
37
38
|
GaugeIcon,
|
|
38
39
|
LinkIcon,
|
|
39
40
|
LockIcon,
|
|
@@ -71,6 +72,13 @@ import {
|
|
|
71
72
|
type SessionHeaderPart,
|
|
72
73
|
} from "./session-header-overflow";
|
|
73
74
|
import { Button } from "../../../ui/button";
|
|
75
|
+
import {
|
|
76
|
+
ContextMenu,
|
|
77
|
+
ContextMenuContent,
|
|
78
|
+
ContextMenuItem,
|
|
79
|
+
ContextMenuTrigger,
|
|
80
|
+
} from "../../../ui/context-menu";
|
|
81
|
+
import { copyTitle } from "../../lib/copy-link";
|
|
74
82
|
import {
|
|
75
83
|
DropdownMenu,
|
|
76
84
|
DropdownMenuContent,
|
|
@@ -405,7 +413,11 @@ export function SessionHeader({
|
|
|
405
413
|
/>
|
|
406
414
|
</button>
|
|
407
415
|
) : null}
|
|
408
|
-
<SessionTitleEditor
|
|
416
|
+
<SessionTitleEditor
|
|
417
|
+
session={session}
|
|
418
|
+
rename={rename}
|
|
419
|
+
onCopyLink={() => void chatOps.copyLink(session)}
|
|
420
|
+
/>
|
|
409
421
|
</div>
|
|
410
422
|
{/* Below lg (or when the full badge has no room) the lifecycle is a
|
|
411
423
|
dot beside the title. */}
|
|
@@ -678,6 +690,10 @@ export function SessionHeader({
|
|
|
678
690
|
<DropdownMenuShortcut>{copyLinkKeys.label}</DropdownMenuShortcut>
|
|
679
691
|
) : null}
|
|
680
692
|
</DropdownMenuItem>
|
|
693
|
+
<DropdownMenuItem onSelect={() => void copyTitle(sessionDisplayTitle(session))}>
|
|
694
|
+
<CopyIcon />
|
|
695
|
+
Copy title
|
|
696
|
+
</DropdownMenuItem>
|
|
681
697
|
{canShare ? (
|
|
682
698
|
<DropdownMenuItem
|
|
683
699
|
onSelect={() => {
|
|
@@ -1065,9 +1081,14 @@ function useSessionPinToggle(
|
|
|
1065
1081
|
* reload. The shared `useInlineRename` hook keeps this behaviour identical to
|
|
1066
1082
|
* the rail row's rename.
|
|
1067
1083
|
*/
|
|
1068
|
-
function SessionTitleEditor(props: {
|
|
1084
|
+
function SessionTitleEditor(props: {
|
|
1085
|
+
session: Session;
|
|
1086
|
+
rename: InlineRename;
|
|
1087
|
+
onCopyLink: () => void;
|
|
1088
|
+
}) {
|
|
1069
1089
|
const display = sessionDisplayTitle(props.session);
|
|
1070
1090
|
const rename = props.rename;
|
|
1091
|
+
const afterMenuClose = useRef<(() => void) | null>(null);
|
|
1071
1092
|
|
|
1072
1093
|
if (rename.editing) {
|
|
1073
1094
|
return (
|
|
@@ -1101,16 +1122,51 @@ function SessionTitleEditor(props: { session: Session; rename: InlineRename }) {
|
|
|
1101
1122
|
|
|
1102
1123
|
return (
|
|
1103
1124
|
<div className="group/title flex min-w-0 items-center gap-0.5">
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1125
|
+
{/* Right-click (or long-press) the title to copy it or the chat's link. */}
|
|
1126
|
+
<ContextMenu>
|
|
1127
|
+
<ContextMenuTrigger asChild>
|
|
1128
|
+
<button
|
|
1129
|
+
type="button"
|
|
1130
|
+
onClick={rename.startEditing}
|
|
1131
|
+
title={`${display} · click to rename`}
|
|
1132
|
+
dir="auto"
|
|
1133
|
+
data-session-title-text=""
|
|
1134
|
+
className="min-w-0 shrink truncate rounded-sm text-left text-[15px] font-semibold leading-6 tracking-[-0.01em] text-fg hover:text-fg focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring/40 pointer-coarse:min-h-11 pointer-coarse:px-2"
|
|
1135
|
+
>
|
|
1136
|
+
{display}
|
|
1137
|
+
</button>
|
|
1138
|
+
</ContextMenuTrigger>
|
|
1139
|
+
<ContextMenuContent
|
|
1140
|
+
className="min-w-40"
|
|
1141
|
+
data-session-title-menu=""
|
|
1142
|
+
onCloseAutoFocus={(event) => {
|
|
1143
|
+
// Rename starts once the menu has handed focus back, so the
|
|
1144
|
+
// field keeps it.
|
|
1145
|
+
const action = afterMenuClose.current;
|
|
1146
|
+
if (!action) return;
|
|
1147
|
+
afterMenuClose.current = null;
|
|
1148
|
+
event.preventDefault();
|
|
1149
|
+
action();
|
|
1150
|
+
}}
|
|
1151
|
+
>
|
|
1152
|
+
<ContextMenuItem onSelect={() => void copyTitle(display)}>
|
|
1153
|
+
<CopyIcon className="size-4" />
|
|
1154
|
+
Copy title
|
|
1155
|
+
</ContextMenuItem>
|
|
1156
|
+
<ContextMenuItem onSelect={props.onCopyLink}>
|
|
1157
|
+
<LinkIcon className="size-4" />
|
|
1158
|
+
Copy link
|
|
1159
|
+
</ContextMenuItem>
|
|
1160
|
+
<ContextMenuItem
|
|
1161
|
+
onSelect={() => {
|
|
1162
|
+
afterMenuClose.current = rename.startEditing;
|
|
1163
|
+
}}
|
|
1164
|
+
>
|
|
1165
|
+
<PencilIcon className="size-4" />
|
|
1166
|
+
Rename
|
|
1167
|
+
</ContextMenuItem>
|
|
1168
|
+
</ContextMenuContent>
|
|
1169
|
+
</ContextMenu>
|
|
1114
1170
|
{/* The pencil earns its pixels only when relevant: hidden at rest and
|
|
1115
1171
|
revealed on hover/focus. Touch screens rename by tapping the title
|
|
1116
1172
|
(or "…" > Rename), so the title keeps the row's width. */}
|
|
@@ -7,6 +7,7 @@ import { archiveActionLabel, requestSessionArchive } from "../../lib/archive-ses
|
|
|
7
7
|
import { t } from "../../lib/console-text";
|
|
8
8
|
import { useSessionListHintRefresh } from "../../lib/use-session-list-hint-refresh";
|
|
9
9
|
import { useSiteOpenedListener } from "../../lib/site-opened";
|
|
10
|
+
import { publishSiteSidebarBridge } from "../../lib/site-sidebar-bridge";
|
|
10
11
|
import { useOpenGeni } from "../../../session-context";
|
|
11
12
|
import { useChannels } from "../../../hooks/use-channels";
|
|
12
13
|
import { useSessionLineage } from "../../../hooks/use-session-lineage";
|
|
@@ -2306,6 +2307,25 @@ export function SessionList() {
|
|
|
2306
2307
|
: null,
|
|
2307
2308
|
[context.client, onArchiveSite, onMoveSite, onPinSite],
|
|
2308
2309
|
);
|
|
2310
|
+
// The open Site's page offers the same Pin and Archive as its row.
|
|
2311
|
+
const pinnedSiteIds = useMemo(
|
|
2312
|
+
() =>
|
|
2313
|
+
new Set(
|
|
2314
|
+
(siteGroups ?? [])
|
|
2315
|
+
.filter((group) => "pinned" in group && group.pinned === true)
|
|
2316
|
+
.map((group) => group.siteId),
|
|
2317
|
+
),
|
|
2318
|
+
[siteGroups],
|
|
2319
|
+
);
|
|
2320
|
+
useEffect(() => {
|
|
2321
|
+
if (!siteRowActions) return;
|
|
2322
|
+
return publishSiteSidebarBridge({
|
|
2323
|
+
workspaceId: rail.workspaceId,
|
|
2324
|
+
pinnedSiteIds,
|
|
2325
|
+
pin: siteRowActions.pin,
|
|
2326
|
+
archive: siteRowActions.archive,
|
|
2327
|
+
});
|
|
2328
|
+
}, [pinnedSiteIds, rail.workspaceId, siteRowActions]);
|
|
2309
2329
|
const onDeleteSession = useCallback(async (): Promise<boolean> => {
|
|
2310
2330
|
if (!sessionPendingDelete) return false;
|
|
2311
2331
|
try {
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, expect, test } from "bun:test";
|
|
2
|
+
import { GlobalRegistrator } from "@happy-dom/global-registrator";
|
|
3
|
+
import type { AnchorHTMLAttributes, ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
import type { AppContextValue } from "../../app-context";
|
|
6
|
+
import type { AppHost } from "../../lib/app-host";
|
|
7
|
+
import type { SiteRowActions } from "./site-session-group-heading";
|
|
8
|
+
|
|
9
|
+
// The real menus: Radix reads the DOM when it loads, so everything that
|
|
10
|
+
// renders is imported once the DOM exists.
|
|
11
|
+
let React: typeof import("react");
|
|
12
|
+
let createRoot: typeof import("react-dom/client").createRoot;
|
|
13
|
+
let AppContext: typeof import("../../app-context").AppContext;
|
|
14
|
+
let AppHostProvider: typeof import("../../lib/app-host").AppHostProvider;
|
|
15
|
+
let heading: typeof import("./site-session-group-heading");
|
|
16
|
+
let ownsDom = false;
|
|
17
|
+
|
|
18
|
+
beforeAll(async () => {
|
|
19
|
+
ownsDom = !GlobalRegistrator.isRegistered;
|
|
20
|
+
if (ownsDom) GlobalRegistrator.register({ url: "https://app.example.test/" });
|
|
21
|
+
Object.assign(globalThis, { IS_REACT_ACT_ENVIRONMENT: true });
|
|
22
|
+
React = await import("react");
|
|
23
|
+
({ createRoot } = await import("react-dom/client"));
|
|
24
|
+
({ AppContext } = await import("../../app-context"));
|
|
25
|
+
({ AppHostProvider } = await import("../../lib/app-host"));
|
|
26
|
+
heading = await import("./site-session-group-heading");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
afterAll(() => {
|
|
30
|
+
if (ownsDom) GlobalRegistrator.unregister();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
document.body.innerHTML = "";
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const workspaceId = "11111111-1111-4111-8111-111111111111";
|
|
38
|
+
const origin = { siteId: "22222222-2222-4222-8222-222222222222", title: "Opengeni usage" };
|
|
39
|
+
const settle = () => new Promise((resolve) => setTimeout(resolve, 10));
|
|
40
|
+
|
|
41
|
+
function TestLink({
|
|
42
|
+
to,
|
|
43
|
+
params,
|
|
44
|
+
search,
|
|
45
|
+
activeOptions: _activeOptions,
|
|
46
|
+
children,
|
|
47
|
+
...props
|
|
48
|
+
}: AnchorHTMLAttributes<HTMLAnchorElement> & {
|
|
49
|
+
activeOptions?: unknown;
|
|
50
|
+
to: string;
|
|
51
|
+
params?: Record<string, string>;
|
|
52
|
+
search?: Record<string, string>;
|
|
53
|
+
children?: ReactNode;
|
|
54
|
+
}) {
|
|
55
|
+
let href = to;
|
|
56
|
+
for (const [key, value] of Object.entries(params ?? {})) href = href.replace(`$${key}`, value);
|
|
57
|
+
const query = new URLSearchParams(search).toString();
|
|
58
|
+
return (
|
|
59
|
+
<a {...props} href={query ? `${href}?${query}` : href}>
|
|
60
|
+
{children}
|
|
61
|
+
</a>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function renderRow({
|
|
66
|
+
permissions,
|
|
67
|
+
publication,
|
|
68
|
+
}: {
|
|
69
|
+
permissions: string[];
|
|
70
|
+
publication?: { status: string; url: string; hostname: string };
|
|
71
|
+
}) {
|
|
72
|
+
const calls: string[] = [];
|
|
73
|
+
const actions: SiteRowActions = {
|
|
74
|
+
pin: (site, pinned) => void calls.push(`pin ${site.siteId} ${pinned}`),
|
|
75
|
+
archive: (site) => void calls.push(`archive ${site.siteId}`),
|
|
76
|
+
move: (site, from, to) => void calls.push(`move ${site.siteId} ${from} ${to}`),
|
|
77
|
+
};
|
|
78
|
+
const client = {
|
|
79
|
+
getSitePublicationLink: async () =>
|
|
80
|
+
publication
|
|
81
|
+
? { siteId: origin.siteId, ...publication }
|
|
82
|
+
: { siteId: origin.siteId, hostname: "", url: "", status: "inactive" },
|
|
83
|
+
};
|
|
84
|
+
const appContext = {
|
|
85
|
+
client,
|
|
86
|
+
accessContext: { subjectId: "me", workspaceGrants: [{ workspaceId, permissions }] },
|
|
87
|
+
} as unknown as AppContextValue;
|
|
88
|
+
const host = {
|
|
89
|
+
navigation: {
|
|
90
|
+
Link: TestLink,
|
|
91
|
+
useNavigate: () => async () => {},
|
|
92
|
+
page: null,
|
|
93
|
+
},
|
|
94
|
+
} as unknown as AppHost;
|
|
95
|
+
// One value per render, as a provider above the row would hold them.
|
|
96
|
+
const contexts = { app: appContext, row: actions };
|
|
97
|
+
const container = document.createElement("div");
|
|
98
|
+
document.body.append(container);
|
|
99
|
+
const root = createRoot(container);
|
|
100
|
+
await React.act(async () =>
|
|
101
|
+
root.render(
|
|
102
|
+
<AppHostProvider host={host}>
|
|
103
|
+
<AppContext.Provider value={contexts.app}>
|
|
104
|
+
<heading.SiteRowActionsContext.Provider value={contexts.row}>
|
|
105
|
+
<heading.SiteSessionGroupHeading
|
|
106
|
+
origin={origin}
|
|
107
|
+
workspaceId={workspaceId}
|
|
108
|
+
expanded={false}
|
|
109
|
+
onToggle={() => undefined}
|
|
110
|
+
summary={{ kind: "idle" } as never}
|
|
111
|
+
count={0}
|
|
112
|
+
channelId={null}
|
|
113
|
+
channels={[{ id: "channel-1", name: "Bugfixes" } as never]}
|
|
114
|
+
/>
|
|
115
|
+
</heading.SiteRowActionsContext.Provider>
|
|
116
|
+
</AppContext.Provider>
|
|
117
|
+
</AppHostProvider>,
|
|
118
|
+
),
|
|
119
|
+
);
|
|
120
|
+
const openMenu = () =>
|
|
121
|
+
React.act(async () => {
|
|
122
|
+
container.querySelector(`[data-site-row="${origin.siteId}"] a`)!.dispatchEvent(
|
|
123
|
+
new MouseEvent("contextmenu", {
|
|
124
|
+
bubbles: true,
|
|
125
|
+
cancelable: true,
|
|
126
|
+
clientX: 10,
|
|
127
|
+
clientY: 10,
|
|
128
|
+
}),
|
|
129
|
+
);
|
|
130
|
+
await settle();
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
calls,
|
|
134
|
+
openMenu,
|
|
135
|
+
items: () => [
|
|
136
|
+
...document.querySelectorAll<HTMLElement>(
|
|
137
|
+
`[data-site-menu="${origin.siteId}"] [role='menuitem']`,
|
|
138
|
+
),
|
|
139
|
+
],
|
|
140
|
+
unmount: () => React.act(async () => root.unmount()),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
test("a Site row's menu offers its own actions before the sidebar's Move", async () => {
|
|
145
|
+
const row = await renderRow({ permissions: ["artifacts:publish"] });
|
|
146
|
+
try {
|
|
147
|
+
await row.openMenu();
|
|
148
|
+
expect(row.items().map((item) => item.textContent)).toEqual([
|
|
149
|
+
"Copy link",
|
|
150
|
+
"Copy title",
|
|
151
|
+
"Pin",
|
|
152
|
+
"Duplicate",
|
|
153
|
+
"Site details",
|
|
154
|
+
"Archive",
|
|
155
|
+
"Default",
|
|
156
|
+
"Bugfixes",
|
|
157
|
+
]);
|
|
158
|
+
const details = row.items().find((item) => item.textContent === "Site details")!;
|
|
159
|
+
expect(details.getAttribute("href")).toBe(
|
|
160
|
+
`/workspaces/${workspaceId}/artifacts/${origin.siteId}?tab=settings`,
|
|
161
|
+
);
|
|
162
|
+
await React.act(async () => {
|
|
163
|
+
row
|
|
164
|
+
.items()
|
|
165
|
+
.find((item) => item.textContent === "Pin")!
|
|
166
|
+
.click();
|
|
167
|
+
await settle();
|
|
168
|
+
});
|
|
169
|
+
await row.openMenu();
|
|
170
|
+
await React.act(async () => {
|
|
171
|
+
row
|
|
172
|
+
.items()
|
|
173
|
+
.find((item) => item.textContent === "Archive")!
|
|
174
|
+
.click();
|
|
175
|
+
await settle();
|
|
176
|
+
});
|
|
177
|
+
expect(row.calls).toEqual([`pin ${origin.siteId} true`, `archive ${origin.siteId}`]);
|
|
178
|
+
} finally {
|
|
179
|
+
await row.unmount();
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test("people who can't publish get no Duplicate; a published Site opens on the web", async () => {
|
|
184
|
+
const row = await renderRow({
|
|
185
|
+
permissions: ["artifacts:read"],
|
|
186
|
+
publication: {
|
|
187
|
+
status: "active",
|
|
188
|
+
url: "https://usage-4k9x.sites.example/",
|
|
189
|
+
hostname: "usage-4k9x.sites.example",
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
await row.openMenu();
|
|
194
|
+
expect(row.items().map((item) => item.textContent)).toEqual([
|
|
195
|
+
"Copy link",
|
|
196
|
+
"Copy title",
|
|
197
|
+
"Pin",
|
|
198
|
+
"Site details",
|
|
199
|
+
"Archive",
|
|
200
|
+
"Open published Site",
|
|
201
|
+
"Default",
|
|
202
|
+
"Bugfixes",
|
|
203
|
+
]);
|
|
204
|
+
const open = row.items().find((item) => item.textContent === "Open published Site")!;
|
|
205
|
+
expect(open.getAttribute("href")).toBe("https://usage-4k9x.sites.example/");
|
|
206
|
+
expect(open.getAttribute("target")).toBe("_blank");
|
|
207
|
+
} finally {
|
|
208
|
+
await row.unmount();
|
|
209
|
+
}
|
|
210
|
+
});
|
|
@@ -3,11 +3,16 @@ import { Link } from "../../lib/navigation";
|
|
|
3
3
|
import {
|
|
4
4
|
ArchiveIcon,
|
|
5
5
|
ChevronRightIcon,
|
|
6
|
+
CopyIcon,
|
|
7
|
+
CopyPlusIcon,
|
|
6
8
|
EllipsisIcon,
|
|
7
9
|
FolderIcon,
|
|
10
|
+
InfoIcon,
|
|
11
|
+
LinkIcon,
|
|
8
12
|
PanelsTopLeftIcon,
|
|
9
13
|
PinIcon,
|
|
10
14
|
} from "lucide-react";
|
|
15
|
+
import { OpenPublishedSiteItem, useSiteActions, type SiteActions } from "../artifacts/site-actions";
|
|
11
16
|
import { RailTrailingMetadata } from "./session-row-content";
|
|
12
17
|
import {
|
|
13
18
|
RAIL_ROW_OVERFLOW_TRIGGER_CLASS,
|
|
@@ -109,6 +114,9 @@ export function SiteSessionGroupHeading({
|
|
|
109
114
|
channels?: readonly Channel[] | undefined;
|
|
110
115
|
}) {
|
|
111
116
|
const actions = useContext(SiteRowActionsContext);
|
|
117
|
+
// Held by the row, not its menu, so a duplicate still running when the
|
|
118
|
+
// menu closes stays busy the next time it opens.
|
|
119
|
+
const site = useSiteActions(workspaceId, origin);
|
|
112
120
|
const move = actions?.move;
|
|
113
121
|
// As for a chat row: listed only when there is a project to choose.
|
|
114
122
|
const moveTargets =
|
|
@@ -229,36 +237,16 @@ export function SiteSessionGroupHeading({
|
|
|
229
237
|
</Button>
|
|
230
238
|
</DropdownMenuTrigger>
|
|
231
239
|
<DropdownMenuContent align="end" className="min-w-40" data-site-menu={origin.siteId}>
|
|
232
|
-
<
|
|
233
|
-
|
|
234
|
-
{
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
<DropdownMenuSeparator />
|
|
243
|
-
<DropdownMenuLabel>Move to project</DropdownMenuLabel>
|
|
244
|
-
{moveTargets.map((channel) => {
|
|
245
|
-
const current = (channelId ?? null) === channel.id;
|
|
246
|
-
return (
|
|
247
|
-
<DropdownMenuItem
|
|
248
|
-
key={channel.id ?? "default"}
|
|
249
|
-
aria-current={current ? "true" : undefined}
|
|
250
|
-
onSelect={() => {
|
|
251
|
-
if (!current) move?.(origin, channelId ?? null, channel.id);
|
|
252
|
-
}}
|
|
253
|
-
>
|
|
254
|
-
<FolderIcon aria-hidden="true" />
|
|
255
|
-
<span className="min-w-0 flex-1 truncate">{channel.name}</span>
|
|
256
|
-
<DropdownMenuCheck checked={current} />
|
|
257
|
-
</DropdownMenuItem>
|
|
258
|
-
);
|
|
259
|
-
})}
|
|
260
|
-
</>
|
|
261
|
-
) : null}
|
|
240
|
+
<SiteRowMenuItems
|
|
241
|
+
menu="dropdown"
|
|
242
|
+
origin={origin}
|
|
243
|
+
site={site}
|
|
244
|
+
workspaceId={workspaceId}
|
|
245
|
+
pinned={pinned}
|
|
246
|
+
actions={actions}
|
|
247
|
+
moveTargets={moveTargets}
|
|
248
|
+
channelId={channelId}
|
|
249
|
+
/>
|
|
262
250
|
</DropdownMenuContent>
|
|
263
251
|
</DropdownMenu>
|
|
264
252
|
</>
|
|
@@ -270,37 +258,108 @@ export function SiteSessionGroupHeading({
|
|
|
270
258
|
<ContextMenu>
|
|
271
259
|
<ContextMenuTrigger asChild>{row}</ContextMenuTrigger>
|
|
272
260
|
<ContextMenuContent className="min-w-40" data-site-menu={origin.siteId}>
|
|
273
|
-
<
|
|
274
|
-
|
|
275
|
-
{
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
<ContextMenuSeparator />
|
|
284
|
-
<ContextMenuLabel>Move to project</ContextMenuLabel>
|
|
285
|
-
{moveTargets.map((channel) => {
|
|
286
|
-
const current = (channelId ?? null) === channel.id;
|
|
287
|
-
return (
|
|
288
|
-
<ContextMenuItem
|
|
289
|
-
key={channel.id ?? "default"}
|
|
290
|
-
aria-current={current ? "true" : undefined}
|
|
291
|
-
onSelect={() => {
|
|
292
|
-
if (!current) move?.(origin, channelId ?? null, channel.id);
|
|
293
|
-
}}
|
|
294
|
-
>
|
|
295
|
-
<FolderIcon aria-hidden="true" />
|
|
296
|
-
<span className="min-w-0 flex-1 truncate">{channel.name}</span>
|
|
297
|
-
<DropdownMenuCheck checked={current} />
|
|
298
|
-
</ContextMenuItem>
|
|
299
|
-
);
|
|
300
|
-
})}
|
|
301
|
-
</>
|
|
302
|
-
) : null}
|
|
261
|
+
<SiteRowMenuItems
|
|
262
|
+
menu="context"
|
|
263
|
+
origin={origin}
|
|
264
|
+
site={site}
|
|
265
|
+
workspaceId={workspaceId}
|
|
266
|
+
pinned={pinned}
|
|
267
|
+
actions={actions}
|
|
268
|
+
moveTargets={moveTargets}
|
|
269
|
+
channelId={channelId}
|
|
270
|
+
/>
|
|
303
271
|
</ContextMenuContent>
|
|
304
272
|
</ContextMenu>
|
|
305
273
|
);
|
|
306
274
|
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* A Site row's menu, the same for right-click and "…": what a chat row
|
|
278
|
+
* offers that fits a Site (Copy link, Copy title, Pin, Archive, Move to
|
|
279
|
+
* project), plus the Site's own: Duplicate, Site details and, once known to
|
|
280
|
+
* be on the web, Open published Site (last, so nothing moves when it shows). Renaming has no place here: a Site is
|
|
281
|
+
* named by what it publishes.
|
|
282
|
+
*/
|
|
283
|
+
function SiteRowMenuItems({
|
|
284
|
+
menu,
|
|
285
|
+
origin,
|
|
286
|
+
site,
|
|
287
|
+
workspaceId,
|
|
288
|
+
pinned,
|
|
289
|
+
actions,
|
|
290
|
+
moveTargets,
|
|
291
|
+
channelId,
|
|
292
|
+
}: {
|
|
293
|
+
menu: "context" | "dropdown";
|
|
294
|
+
origin: SessionSiteOrigin;
|
|
295
|
+
site: SiteActions;
|
|
296
|
+
workspaceId: string;
|
|
297
|
+
pinned: boolean;
|
|
298
|
+
actions: SiteRowActions;
|
|
299
|
+
moveTargets: readonly { id: string | null; name: string }[];
|
|
300
|
+
channelId: string | null | undefined;
|
|
301
|
+
}) {
|
|
302
|
+
const Item = (menu === "context" ? ContextMenuItem : DropdownMenuItem) as typeof DropdownMenuItem;
|
|
303
|
+
const Separator = menu === "context" ? ContextMenuSeparator : DropdownMenuSeparator;
|
|
304
|
+
const Label = menu === "context" ? ContextMenuLabel : DropdownMenuLabel;
|
|
305
|
+
return (
|
|
306
|
+
<>
|
|
307
|
+
<Item data-site-action="copy-link" onSelect={site.copyLink}>
|
|
308
|
+
<LinkIcon className="size-4" />
|
|
309
|
+
Copy link
|
|
310
|
+
</Item>
|
|
311
|
+
<Item data-site-action="copy-title" onSelect={site.copyTitle}>
|
|
312
|
+
<CopyIcon className="size-4" />
|
|
313
|
+
Copy title
|
|
314
|
+
</Item>
|
|
315
|
+
<Item onSelect={() => actions.pin(origin, !pinned)}>
|
|
316
|
+
<PinIcon className={pinned ? "size-4 fill-current" : "size-4"} />
|
|
317
|
+
{pinned ? "Unpin" : "Pin"}
|
|
318
|
+
</Item>
|
|
319
|
+
{site.duplicate ? (
|
|
320
|
+
<Item
|
|
321
|
+
data-site-action="duplicate"
|
|
322
|
+
disabled={site.duplicate.busy}
|
|
323
|
+
onSelect={site.duplicate.run}
|
|
324
|
+
>
|
|
325
|
+
<CopyPlusIcon className="size-4" />
|
|
326
|
+
{site.duplicate.busy ? "Duplicating…" : "Duplicate"}
|
|
327
|
+
</Item>
|
|
328
|
+
) : null}
|
|
329
|
+
<Item asChild data-site-action="details">
|
|
330
|
+
<Link {...site.details}>
|
|
331
|
+
<InfoIcon className="size-4" />
|
|
332
|
+
Site details
|
|
333
|
+
</Link>
|
|
334
|
+
</Item>
|
|
335
|
+
<Item onSelect={() => actions.archive(origin)}>
|
|
336
|
+
<ArchiveIcon className="size-4" />
|
|
337
|
+
Archive
|
|
338
|
+
</Item>
|
|
339
|
+
{/* Last, as it shows once the address has loaded: nothing above moves. */}
|
|
340
|
+
<OpenPublishedSiteItem item={Item} workspaceId={workspaceId} siteId={origin.siteId} />
|
|
341
|
+
{moveTargets.length > 0 ? (
|
|
342
|
+
<>
|
|
343
|
+
<Separator />
|
|
344
|
+
<Label>Move to project</Label>
|
|
345
|
+
{moveTargets.map((channel) => {
|
|
346
|
+
const current = (channelId ?? null) === channel.id;
|
|
347
|
+
return (
|
|
348
|
+
<Item
|
|
349
|
+
key={channel.id ?? "default"}
|
|
350
|
+
aria-current={current ? "true" : undefined}
|
|
351
|
+
onSelect={() => {
|
|
352
|
+
if (!current) actions.move?.(origin, channelId ?? null, channel.id);
|
|
353
|
+
}}
|
|
354
|
+
>
|
|
355
|
+
<FolderIcon aria-hidden="true" />
|
|
356
|
+
<span className="min-w-0 flex-1 truncate">{channel.name}</span>
|
|
357
|
+
<DropdownMenuCheck checked={current} />
|
|
358
|
+
</Item>
|
|
359
|
+
);
|
|
360
|
+
})}
|
|
361
|
+
</>
|
|
362
|
+
) : null}
|
|
363
|
+
</>
|
|
364
|
+
);
|
|
365
|
+
}
|
|
@@ -471,6 +471,10 @@ test("all draft, delivery, work, permission and deliberate pause guards hide Ret
|
|
|
471
471
|
"policy",
|
|
472
472
|
"personal_decision",
|
|
473
473
|
"personal_loading",
|
|
474
|
+
// The open chat's connected accounts failed to load, were denied, or are reconnecting.
|
|
475
|
+
"accounts",
|
|
476
|
+
"accounts_denied",
|
|
477
|
+
"updating",
|
|
474
478
|
] as const) {
|
|
475
479
|
await act(async () =>
|
|
476
480
|
root!.render(<FailedSessionActions {...actions} composerBlocker={composerBlocker} />),
|