@opengeni/react 6.5.2-canary.41607687019001 → 6.7.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.d.ts +4 -0
- package/dist/app/app-state.js +19 -14
- package/dist/app/components/Composer.js +25 -23
- package/dist/app/components/agent/agent-capability-picker.js +10 -8
- package/dist/app/components/artifacts/artifact-browse-controls.js +4 -4
- package/dist/app/components/artifacts/artifact-library.js +21 -19
- package/dist/app/components/artifacts/artifact-page-chrome.js +3 -3
- package/dist/app/components/artifacts/artifact-viewer.js +23 -22
- package/dist/app/components/artifacts/artifact-viewer.js.map +1 -1
- package/dist/app/components/artifacts/chat-interactive-block.js +12 -12
- package/dist/app/components/artifacts/copy-artifact-link.js +7 -5
- package/dist/app/components/artifacts/file-reach-dialog.js +11 -9
- package/dist/app/components/artifacts/inline-chat-image.js +18 -18
- package/dist/app/components/artifacts/retained-file-preview.js +24 -23
- package/dist/app/components/artifacts/retained-text-preview.js +3 -3
- package/dist/app/components/artifacts/site-audience.js +6 -5
- package/dist/app/components/artifacts/site-conversations.js +16 -14
- package/dist/app/components/artifacts/site-data.js +18 -16
- package/dist/app/components/artifacts/site-public-link.js +3 -2
- package/dist/app/components/artifacts/site-publishing-page.js +39 -37
- package/dist/app/components/artifacts/site-publishing.js +34 -32
- package/dist/app/components/artifacts/site-settings.js +38 -36
- package/dist/app/components/artifacts/site-version-menu.js +8 -7
- package/dist/app/components/billing-class-mark.js +3 -3
- package/dist/app/components/bots/bot-launch-strip.js +17 -17
- package/dist/app/components/bots/bot-template-dialog.js +30 -28
- package/dist/app/components/bots/bot-template-shortcuts.js +19 -19
- package/dist/app/components/bots/bot-templates-page.js +38 -36
- package/dist/app/components/bots/bot-templates-page.js.map +1 -1
- package/dist/app/components/capabilities/capability-detail-sheet.js +13 -11
- package/dist/app/components/capabilities/capability-logo-source.js +13 -13
- package/dist/app/components/capabilities/capability-logo.js +4 -3
- package/dist/app/components/capabilities/connector-tool-permissions.js +8 -6
- package/dist/app/components/capabilities/native-connect-setup.js +14 -14
- package/dist/app/components/capabilities/own-logins-shared-heads-up.js +7 -6
- package/dist/app/components/capabilities/perform-capability-action.js +7 -6
- package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -17
- package/dist/app/components/capabilities/session-capability-card.js +72 -70
- package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
- package/dist/app/components/capabilities/session-chrome-card.js +28 -26
- package/dist/app/components/capabilities/session-connection-accounts.js +4 -3
- package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
- package/dist/app/components/capabilities/session-github-card.js +22 -20
- package/dist/app/components/capabilities/session-machine-card.js +27 -25
- package/dist/app/components/capabilities/session-personal-github-card.js +16 -16
- package/dist/app/components/capabilities/session-plugin-card.js +10 -9
- package/dist/app/components/capabilities/use-capabilities-catalog.js +4 -3
- package/dist/app/components/capabilities/use-connection-accounts.js +5 -4
- package/dist/app/components/command-menu/chat-status.js +15 -13
- package/dist/app/components/command-menu/chat-switcher.js +35 -33
- package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
- package/dist/app/components/command-menu/command-menu.js +53 -50
- package/dist/app/components/command-menu/command-menu.js.map +1 -1
- package/dist/app/components/command-menu/shortcut-sheet.js +18 -16
- package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -1
- package/dist/app/components/common.js +4 -3
- package/dist/app/components/composer-capabilities-menu-body.js +4 -4
- package/dist/app/components/composer-mobile-plus-panel.js +8 -8
- package/dist/app/components/composer-mobile-plus.js +1 -1
- package/dist/app/components/credit-required-gate.js +3 -3
- package/dist/app/components/credit-required-prompt.js +10 -8
- package/dist/app/components/credit-required-prompt.js.map +1 -1
- package/dist/app/components/credits/checkout-credits-celebration.js +3 -2
- package/dist/app/components/credits/checkout-return.js +3 -2
- package/dist/app/components/credits/checkout-return.js.map +1 -1
- package/dist/app/components/credits/coupon-redeem.js +5 -4
- package/dist/app/components/credits/credit-refusal-notice.js +7 -5
- package/dist/app/components/cross-slot-deep-link-recovery.js +5 -4
- package/dist/app/components/desktop/app-shots.js +13 -11
- package/dist/app/components/desktop/computer-use.js +6 -4
- package/dist/app/components/desktop/this-computer.js +9 -7
- package/dist/app/components/feedback.js +5 -4
- package/dist/app/components/follow-up-repository-menu-body.js +8 -6
- package/dist/app/components/follow-up-repository-menu-body.js.map +1 -1
- package/dist/app/components/follow-up-repository-picker.js +1 -1
- package/dist/app/components/github-app-connect-launcher.js +5 -4
- package/dist/app/components/in-app-help-link.js +3 -3
- package/dist/app/components/knowledge/agent-learning-settings.js +3 -2
- package/dist/app/components/knowledge/agent-learning-settings.js.map +1 -1
- package/dist/app/components/machines/connect-machine-dialog.js +18 -16
- package/dist/app/components/manual-repository-editor.js +3 -2
- package/dist/app/components/markdown.js +6 -6
- package/dist/app/components/models/models-ui.js +12 -10
- package/dist/app/components/my-things.js +12 -10
- package/dist/app/components/my-things.js.map +1 -1
- package/dist/app/components/new-session-starters.js +3 -3
- package/dist/app/components/own-where-it-works.js +9 -7
- 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 +7 -5
- package/dist/app/components/rail/project-glyph.js +17 -17
- package/dist/app/components/rail/project-profile.js +31 -29
- package/dist/app/components/rail/rail-context.js +3 -3
- package/dist/app/components/rail/rail-sections.js +68 -66
- package/dist/app/components/rail/session-header.js +59 -57
- package/dist/app/components/rail/session-list.js +66 -64
- package/dist/app/components/rail/session-row-content.js +4 -4
- package/dist/app/components/rail/session-row-hover-details.js +14 -12
- package/dist/app/components/rail/session-shell.js +90 -88
- package/dist/app/components/rail/site-session-group-heading.js +8 -8
- package/dist/app/components/repository-picker.js +8 -6
- package/dist/app/components/secrets/session-secrets-panel.js +4 -3
- package/dist/app/components/secrets/vault-model.js +3 -2
- package/dist/app/components/session/agent-configuration-panel.js +25 -23
- package/dist/app/components/session/agent-configuration-panel.js.map +1 -1
- package/dist/app/components/session/artifact-link-boundary.js +3 -3
- package/dist/app/components/session/artifact-session-page.js +11 -9
- package/dist/app/components/session/banners.js +8 -8
- package/dist/app/components/session/codex-usage-notice.js +5 -3
- package/dist/app/components/session/console-new-conversation.js +42 -40
- package/dist/app/components/session/context-text-reader.js +3 -2
- package/dist/app/components/session/descendant-requests.js +39 -37
- package/dist/app/components/session/descendant-requests.js.map +1 -1
- package/dist/app/components/session/editable-artifacts-workspace.js +36 -34
- package/dist/app/components/session/editable-artifacts-workspace.js.map +1 -1
- package/dist/app/components/session/failed-session-banner.js +13 -11
- package/dist/app/components/session/failed-session-banner.js.map +1 -1
- 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 +33 -31
- package/dist/app/components/session/inspector.js +57 -55
- package/dist/app/components/session/inspector.js.map +1 -1
- package/dist/app/components/session/message-actions.js +5 -4
- package/dist/app/components/session/message-actions.js.map +1 -1
- package/dist/app/components/session/message-resource-attachments.js +12 -11
- package/dist/app/components/session/message-resource-attachments.js.map +1 -1
- package/dist/app/components/session/model-context-inspector.js +6 -4
- package/dist/app/components/session/model-recovery-notice.js +3 -3
- package/dist/app/components/session/new-session-settings-menu.js +11 -9
- package/dist/app/components/session/new-session-setup-strip.js +18 -18
- package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
- package/dist/app/components/session/sandbox-switcher.js +10 -9
- package/dist/app/components/session/sandbox-workspace.js +47 -46
- package/dist/app/components/session/search-markdown-highlight.js +7 -7
- package/dist/app/components/session/search-results-view.js +8 -8
- package/dist/app/components/session/session-admin-access.js +13 -11
- package/dist/app/components/session/session-admission-notice.js +7 -5
- package/dist/app/components/session/session-avatar-picker.js +22 -20
- package/dist/app/components/session/session-avatar.js +16 -16
- package/dist/app/components/session/session-machine-access-notice.js +7 -5
- package/dist/app/components/session/session-profile-dialog.js +29 -27
- package/dist/app/components/session/session-profile-editor.js +30 -28
- package/dist/app/components/session/session-retention.js +10 -8
- package/dist/app/components/session/session-search-dialog.js +10 -10
- package/dist/app/components/session/session-skill-reviews.js +2 -1
- package/dist/app/components/session/session-skill-reviews.js.map +1 -1
- package/dist/app/components/session/session-tenancy-control.js +13 -11
- package/dist/app/components/session/session-tenancy-control.js.map +1 -1
- package/dist/app/components/session/session-unattended-setting.js +7 -5
- package/dist/app/components/session/session-usage-limit-section.js +11 -9
- package/dist/app/components/session/share-chat-dialog.js +9 -7
- package/dist/app/components/session/site-origin-link.js +3 -3
- package/dist/app/components/session/subagents.js +8 -8
- package/dist/app/components/session/subscription-account-indicator.js +6 -6
- package/dist/app/components/session-connectors-menu-body.js +4 -3
- package/dist/app/components/session-connectors-menu-body.js.map +1 -1
- package/dist/app/components/settings/row-select.js +7 -5
- package/dist/app/components/toaster.js +3 -2
- package/dist/app/components/transcription-settings.js +11 -9
- package/dist/app/components/ui/destructive-confirm.js +11 -9
- package/dist/app/components/usage/usage-entry.js +5 -5
- package/dist/app/components/window-bar.js +16 -14
- package/dist/app/components/workspace-composer-plus.js +22 -21
- package/dist/app/components/workspace-reach.js +6 -4
- package/dist/app/components/workspace-tenant-boundary.js +5 -4
- package/dist/app/embed/memory-navigation.js +3 -3
- package/dist/app/embed/session-app.js +211 -209
- package/dist/app/lib/actions/actions-provider.js +15 -13
- package/dist/app/lib/agent-capabilities.js +3 -3
- package/dist/app/lib/app-surfaces.js +7 -6
- package/dist/app/lib/archive-session.d.ts +9 -4
- package/dist/app/lib/archive-session.js +4 -2
- package/dist/app/lib/bot-templates.js +3 -2
- package/dist/app/lib/capabilities.js +3 -2
- package/dist/app/lib/codex-usage-query.js +2 -2
- package/dist/app/lib/composer-connectors.js +17 -16
- package/dist/app/lib/console-site.js +2 -2
- package/dist/app/lib/console-text.js +2 -2
- package/dist/app/lib/events.js +9 -9
- package/dist/app/lib/failed-session-copy.js +3 -3
- package/dist/app/lib/inbox.js +4 -2
- package/dist/app/lib/model-access-onboarding.js +3 -3
- package/dist/app/lib/move-chat-to-machine.js +3 -3
- package/dist/app/lib/navigation.js +2 -2
- package/dist/app/lib/session-branch-cache.js +6 -6
- package/dist/app/lib/session-create.js +4 -4
- package/dist/app/lib/session-group-pagination.js +6 -6
- package/dist/app/lib/session-hover-facts.js +13 -11
- package/dist/app/lib/session-model.js +2 -2
- package/dist/app/lib/session-rail.js +3 -3
- package/dist/app/lib/session-rename.js +3 -3
- package/dist/app/lib/session-restart-operation-controller.js +4 -3
- package/dist/app/lib/session-tenancy.js +3 -2
- package/dist/app/lib/session-usage-limit.js +3 -2
- package/dist/app/lib/sessions-group.js +5 -5
- package/dist/app/lib/site-publishing.js +3 -2
- package/dist/app/lib/site-tool-consent-dialog.js +9 -7
- 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/subscription-plans.js +3 -2
- package/dist/app/lib/toast.js +2 -1
- package/dist/app/lib/turn-failure-analytics.js +4 -4
- package/dist/app/lib/use-duplicate-site.js +6 -5
- package/dist/app/lib/use-follow-up-repositories.js +6 -5
- package/dist/app/lib/use-workspace-integrations.js +4 -3
- package/dist/app/lib/use-workspace-machines.js +4 -4
- package/dist/app/lib/use-workspace-model-catalog.js +5 -4
- 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 +67 -66
- package/dist/app/routes/artifacts.js.map +1 -1
- package/dist/app/routes/retained-artifact.js +42 -40
- package/dist/app/routes/retained-artifact.js.map +1 -1
- package/dist/app/routes/session-unavailable.js +8 -7
- package/dist/app/routes/session.js +119 -117
- package/dist/app/routes/sessions-index-hydration.js +5 -5
- package/dist/app/routes/sessions-index.js +104 -102
- package/dist/app/routes/site-view.js +67 -65
- 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 +10 -10
- package/dist/automations.js +17 -15
- package/dist/automations.js.map +1 -1
- package/dist/browser-viewer-TC27OCIP.js +23 -0
- package/dist/chat-interactive-block-RWPQBHVS.js +18 -0
- package/dist/chunk-2BDT3UZQ.js +229 -0
- package/dist/chunk-2CLNIEK4.js +373 -0
- package/dist/chunk-2FSBSCZJ.js +451 -0
- package/dist/chunk-2I7HDP53.js +199 -0
- package/dist/chunk-2INLDVK3.js +15 -0
- package/dist/chunk-2KALVELR.js +126 -0
- package/dist/chunk-2M3J7ZWQ.js +418 -0
- package/dist/chunk-2OP6WLGV.js +708 -0
- package/dist/chunk-2RG7NIAS.js +2936 -0
- package/dist/chunk-2STUPWEL.js +135 -0
- package/dist/chunk-2YUOVM3G.js +271 -0
- package/dist/chunk-2Z3NQNTM.js +3670 -0
- package/dist/chunk-3CPWWGNK.js +920 -0
- package/dist/chunk-3ED2U6XE.js +37 -0
- package/dist/chunk-3GZA4BUW.js +216 -0
- package/dist/chunk-3IK6UYO6.js +1022 -0
- package/dist/chunk-3PZ7JZI2.js +431 -0
- package/dist/chunk-4DVJ6ONS.js +50 -0
- package/dist/chunk-4DVNUCRR.js +2386 -0
- package/dist/chunk-4DVNUCRR.js.map +1 -0
- package/dist/chunk-4E3ZJRTZ.js +41 -0
- package/dist/chunk-4SAWSRAA.js +141 -0
- package/dist/chunk-53AGXXZM.js +307 -0
- package/dist/chunk-54YW6SZZ.js +818 -0
- package/dist/chunk-57AZS3IE.js +2317 -0
- package/dist/chunk-5CPEEAFD.js +143 -0
- package/dist/chunk-5EWSRZ2Y.js +340 -0
- package/dist/chunk-5IE76VCY.js +387 -0
- package/dist/chunk-5NWEKLDZ.js +170 -0
- package/dist/chunk-5O2FCCHZ.js +198 -0
- package/dist/chunk-5QAY6K77.js +399 -0
- package/dist/chunk-5YKW2K6I.js +625 -0
- package/dist/chunk-5YKW2K6I.js.map +1 -0
- package/dist/chunk-6BCXNDEI.js +4116 -0
- package/dist/chunk-6BCXNDEI.js.map +1 -0
- package/dist/chunk-6DK6Z4UN.js +2599 -0
- package/dist/chunk-6DVCC7QS.js +702 -0
- package/dist/chunk-6JHU2UBS.js +2058 -0
- package/dist/chunk-6PZ7OBYU.js +490 -0
- package/dist/chunk-6WD2INST.js +539 -0
- package/dist/chunk-6WD2INST.js.map +1 -0
- package/dist/chunk-6WGRDRMA.js +163 -0
- package/dist/chunk-77WAKEAH.js +186 -0
- package/dist/chunk-7T2ZE3VT.js +5558 -0
- package/dist/chunk-7T2ZE3VT.js.map +1 -0
- package/dist/chunk-7TDO3CUM.js +393 -0
- package/dist/chunk-7TIX2UAR.js +247 -0
- package/dist/chunk-7V5REBCP.js +148 -0
- package/dist/chunk-7VMZGLYI.js +339 -0
- package/dist/chunk-7W37NS3I.js +236 -0
- package/dist/chunk-7X6SDK2C.js +111 -0
- package/dist/chunk-7ZNUHRP5.js +95 -0
- package/dist/chunk-A36PZALD.js +84 -0
- package/dist/chunk-AUI6VA63.js +107 -0
- package/dist/chunk-AW2MQB37.js +24 -0
- package/dist/chunk-AWKES45Y.js +198 -0
- package/dist/chunk-AXHZYXUV.js +132 -0
- package/dist/chunk-BHNSJVBC.js +129 -0
- package/dist/chunk-BJEJFISW.js +50 -0
- package/dist/chunk-BJFH6JI5.js +422 -0
- package/dist/chunk-BMICEQZQ.js +960 -0
- package/dist/chunk-BTLBYBLU.js +29 -0
- package/dist/chunk-BXBDYNRP.js +89 -0
- package/dist/chunk-C372BFOV.js +357 -0
- package/dist/chunk-C43KRXGA.js +234 -0
- package/dist/chunk-C43KRXGA.js.map +1 -0
- package/dist/chunk-CMKGILJK.js +4824 -0
- package/dist/chunk-CRAOSVHC.js +50 -0
- package/dist/chunk-CRU35QQH.js +281 -0
- package/dist/chunk-CUIWCGMA.js +172 -0
- package/dist/chunk-D5TWNFFE.js +38 -0
- package/dist/chunk-DF5EAHDN.js +4461 -0
- package/dist/chunk-DJAXC5OK.js +56 -0
- package/dist/chunk-DXBYWSL5.js +3550 -0
- package/dist/chunk-DXR5PDFP.js +84 -0
- package/dist/chunk-DZWARC4M.js +267 -0
- package/dist/chunk-DZXEDSQI.js +106 -0
- package/dist/chunk-E7XERZWC.js +48 -0
- package/dist/chunk-ECJBYNLJ.js +79 -0
- package/dist/chunk-EDI6SJ2N.js +43 -0
- package/dist/chunk-EWSOC6WF.js +114 -0
- package/dist/chunk-F2OPHAUN.js +103 -0
- package/dist/chunk-F4ISQGGM.js +81 -0
- package/dist/chunk-FO4LYKJL.js +197 -0
- package/dist/chunk-FPXASDG5.js +73 -0
- package/dist/chunk-FSOQDUCG.js +117 -0
- package/dist/chunk-FSOQDUCG.js.map +1 -0
- package/dist/chunk-FVXBNBHO.js +157 -0
- package/dist/chunk-FYWT2O76.js +34 -0
- package/dist/chunk-FYWT2O76.js.map +1 -0
- package/dist/chunk-FZC5N55X.js +981 -0
- package/dist/chunk-GAVYGBFI.js +99 -0
- package/dist/chunk-GFIMOUDT.js +846 -0
- package/dist/chunk-GFIMOUDT.js.map +1 -0
- package/dist/chunk-GKVJIDHF.js +33 -0
- package/dist/chunk-GVN5SZLX.js +212 -0
- package/dist/chunk-H3T7IWNA.js +134 -0
- package/dist/chunk-HAX4LCR5.js +261 -0
- package/dist/chunk-HC4JFZVU.js +121 -0
- package/dist/chunk-HEFPPMBQ.js +581 -0
- package/dist/chunk-HGKTHF2U.js +1356 -0
- package/dist/chunk-HGKTHF2U.js.map +1 -0
- package/dist/chunk-HNLR7Q4Z.js +83 -0
- package/dist/chunk-HSOXMJOT.js +12 -0
- package/dist/chunk-I4MRDSUF.js +281 -0
- package/dist/chunk-I4QEJ62Y.js +202 -0
- package/dist/chunk-I5B5L6Q4.js +56 -0
- package/dist/chunk-I5QZJODL.js +264 -0
- package/dist/chunk-I7ITSXSJ.js +603 -0
- package/dist/chunk-I7XIZRFD.js +390 -0
- package/dist/chunk-IDANQPRH.js +82 -0
- package/dist/chunk-IFB3WJ36.js +212 -0
- package/dist/chunk-IHTAKKTK.js +264 -0
- package/dist/chunk-IKXNLWAL.js +205 -0
- package/dist/chunk-IKXNLWAL.js.map +1 -0
- package/dist/chunk-ILDXWY37.js +173 -0
- package/dist/chunk-IMDQUHBJ.js +570 -0
- package/dist/chunk-IMZCQBOT.js +119 -0
- package/dist/chunk-IXPTECSC.js +403 -0
- package/dist/chunk-J255A3N5.js +71 -0
- package/dist/chunk-J5F5HPPW.js +141 -0
- package/dist/chunk-JDTGRRNU.js +5045 -0
- package/dist/chunk-JDTGRRNU.js.map +1 -0
- package/dist/chunk-JEA3QDX7.js +2469 -0
- package/dist/chunk-JEUPAVYY.js +156 -0
- package/dist/chunk-JKHKLL5W.js +194 -0
- package/dist/chunk-JQL7ZH6C.js +650 -0
- package/dist/chunk-JWB44UGJ.js +57 -0
- package/dist/chunk-JZ4NLCAP.js +333 -0
- package/dist/chunk-K2A5PXQ5.js +412 -0
- package/dist/chunk-K56XV3C3.js +623 -0
- package/dist/chunk-K6GAXXVA.js +23 -0
- package/dist/chunk-KCBMFSMS.js +199 -0
- package/dist/chunk-KF2FV3ZJ.js +268 -0
- package/dist/chunk-KJD65EJP.js +278 -0
- package/dist/chunk-KLEUWIMZ.js +386 -0
- package/dist/chunk-KODELWYT.js +309 -0
- package/dist/chunk-KRDR5RJD.js +83 -0
- package/dist/chunk-KUDGXAF7.js +914 -0
- package/dist/chunk-KY2R73CG.js +171 -0
- package/dist/chunk-KY2R73CG.js.map +1 -0
- package/dist/chunk-KYS77RPN.js +85 -0
- package/dist/chunk-L7YTNTIK.js +368 -0
- package/dist/chunk-LHPNABDH.js +686 -0
- package/dist/chunk-MFROMEKA.js +401 -0
- package/dist/chunk-MIHN76LX.js +2656 -0
- package/dist/chunk-MIYFS2XN.js +42 -0
- package/dist/chunk-MJUCFQMS.js +65 -0
- package/dist/chunk-MM4FNWI4.js +3064 -0
- package/dist/chunk-MNZG4OHU.js +790 -0
- package/dist/chunk-MVW6HNPI.js +250 -0
- package/dist/chunk-MVW6HNPI.js.map +1 -0
- package/dist/chunk-N6AACDUW.js +200 -0
- package/dist/chunk-NC55IFN3.js +781 -0
- package/dist/chunk-NC7PVOEK.js +98 -0
- package/dist/chunk-NCYMNCJO.js +70 -0
- package/dist/chunk-ND2BXV3P.js +259 -0
- package/dist/chunk-NDBTFUO6.js +272 -0
- package/dist/chunk-NDQJZ7HF.js +206 -0
- package/dist/chunk-NGJJJPZZ.js +162 -0
- package/dist/chunk-NJTSNNE7.js +251 -0
- package/dist/chunk-NPGISCU6.js +4159 -0
- package/dist/chunk-NPGISCU6.js.map +1 -0
- package/dist/chunk-NRTE7DNV.js +1270 -0
- package/dist/chunk-NULUNM7H.js +290 -0
- package/dist/chunk-NUNZS36W.js +227 -0
- package/dist/chunk-NW53H5RW.js +2424 -0
- package/dist/chunk-NXCMHIKI.js +263 -0
- package/dist/chunk-O3LKCBP5.js +159 -0
- package/dist/chunk-O4EA4F3W.js +103 -0
- package/dist/chunk-O4EA4F3W.js.map +1 -0
- package/dist/chunk-O4OOG3D6.js +116 -0
- package/dist/chunk-O4OOG3D6.js.map +1 -0
- package/dist/chunk-O6N4ABCA.js +376 -0
- package/dist/chunk-O732GAFC.js +112 -0
- package/dist/chunk-OF4TIKYC.js +690 -0
- package/dist/chunk-OMPVOMPP.js +70 -0
- package/dist/chunk-OPJJSKUK.js +118 -0
- package/dist/chunk-OPWCMA4D.js +196 -0
- package/dist/chunk-ORJPS5VN.js +1193 -0
- package/dist/chunk-OSY5K7L7.js +187 -0
- package/dist/chunk-OV6QJRT4.js +45 -0
- package/dist/chunk-OVKYVZMW.js +108 -0
- package/dist/chunk-OZCBM3UC.js +171 -0
- package/dist/chunk-P3A2EINJ.js +61 -0
- package/dist/chunk-PTAG4PDC.js +27 -0
- package/dist/chunk-PTF5B7TJ.js +298 -0
- package/dist/chunk-Q3DPEYX4.js +848 -0
- package/dist/chunk-Q6CGOPJD.js +215 -0
- package/dist/chunk-Q6CGOPJD.js.map +1 -0
- package/dist/chunk-QB2KMIDP.js +100 -0
- package/dist/chunk-QCSJ4CWE.js +1067 -0
- package/dist/chunk-QIOQ2NPQ.js +414 -0
- package/dist/chunk-QK5EFEUT.js +353 -0
- package/dist/chunk-QPQBLYQJ.js +41 -0
- package/dist/chunk-QPSGCC5D.js +184 -0
- package/dist/chunk-QZAAUQRN.js +474 -0
- package/dist/chunk-QZM6YDJW.js +489 -0
- package/dist/chunk-QZM6YDJW.js.map +1 -0
- package/dist/chunk-RGBI63KJ.js +188 -0
- package/dist/chunk-RLBKLAEY.js +138 -0
- package/dist/chunk-RMFKVOM7.js +304 -0
- package/dist/chunk-ROKQU7WG.js +258 -0
- package/dist/chunk-RPVREAU7.js +251 -0
- package/dist/chunk-RQKLF42C.js +723 -0
- package/dist/chunk-SC6RRD2D.js +38 -0
- package/dist/chunk-SC6RRD2D.js.map +1 -0
- package/dist/chunk-SEO7TICN.js +94 -0
- package/dist/chunk-SHHJCL7X.js +432 -0
- package/dist/chunk-SIRLACNZ.js +114 -0
- package/dist/chunk-SKPHMYAA.js +237 -0
- package/dist/chunk-SODC7T6L.js +1583 -0
- package/dist/chunk-SQJIKMN3.js +366 -0
- package/dist/chunk-SVINDKVW.js +26 -0
- package/dist/chunk-SYCDHPZF.js +335 -0
- package/dist/chunk-T2QX3FDP.js +133 -0
- package/dist/chunk-T3OWFVMS.js +1187 -0
- package/dist/chunk-T6XI5FLY.js +61 -0
- package/dist/chunk-T7OXJZCX.js +62 -0
- package/dist/chunk-TAT5USZN.js +353 -0
- package/dist/chunk-TPQTRNER.js +172 -0
- package/dist/chunk-TUIN4MB7.js +266 -0
- package/dist/chunk-TX3VECZU.js +71 -0
- package/dist/chunk-TXLIEOJX.js +9624 -0
- package/dist/chunk-U3DN4HEY.js +27 -0
- package/dist/chunk-U7XM7CB4.js +191 -0
- package/dist/chunk-UJK53QFL.js +140 -0
- package/dist/chunk-UMTXA2TH.js +319 -0
- package/dist/chunk-UPDSXFK5.js +199 -0
- package/dist/chunk-UTIAXH52.js +269 -0
- package/dist/chunk-UVN5TMHU.js +1184 -0
- package/dist/chunk-V4Z4B2E3.js +52 -0
- package/dist/chunk-V4Z4B2E3.js.map +1 -0
- package/dist/chunk-VGYXW3VG.js +246 -0
- package/dist/chunk-VS7AHPCZ.js +255 -0
- package/dist/chunk-VTTAJOQ7.js +121 -0
- package/dist/chunk-VWPOLUAO.js +99 -0
- package/dist/chunk-X3MWB2QU.js +3851 -0
- package/dist/chunk-X6KAJI3V.js +211 -0
- package/dist/chunk-XBLRHV5R.js +50 -0
- package/dist/chunk-XDFP2LMW.js +605 -0
- package/dist/chunk-XEQMZB3C.js +525 -0
- package/dist/chunk-XEYLT5VA.js +223 -0
- package/dist/chunk-XHIQ5I6N.js +918 -0
- package/dist/chunk-XLH7QY2R.js +378 -0
- package/dist/chunk-XWFAMUZQ.js +113 -0
- package/dist/chunk-Y4BB2KS2.js +294 -0
- package/dist/chunk-Y4BB2KS2.js.map +1 -0
- package/dist/chunk-Y4OBB2VN.js +84 -0
- package/dist/chunk-YCVD6CI3.js +234 -0
- package/dist/chunk-YENLNISG.js +270 -0
- package/dist/chunk-YIRVLKAX.js +351 -0
- package/dist/chunk-YL73CVNK.js +390 -0
- package/dist/chunk-YLS6QE5G.js +288 -0
- package/dist/chunk-YNF2OC54.js +366 -0
- package/dist/chunk-YNF2OC54.js.map +1 -0
- package/dist/chunk-YPWU5KPE.js +147 -0
- package/dist/chunk-YQXTDZSU.js +2984 -0
- package/dist/chunk-YSJEAAOL.js +178 -0
- package/dist/chunk-YWIFM7D7.js +499 -0
- package/dist/chunk-YWVI6ZMK.js +103 -0
- package/dist/chunk-Z4FMAFNH.js +847 -0
- package/dist/chunk-Z654FWNU.js +136 -0
- package/dist/chunk-Z7Y523PS.js +130 -0
- package/dist/chunk-ZD67RM6G.js +60 -0
- package/dist/chunk-ZEG4VPBL.js +187 -0
- package/dist/chunk-ZHDFQITM.js +283 -0
- package/dist/chunk-ZHDFQITM.js.map +1 -0
- package/dist/chunk-ZLYCOBHW.js +75 -0
- package/dist/chunk-ZNJ5MTXV.js +89 -0
- package/dist/chunk-ZSGY3H53.js +155 -0
- package/dist/chunk-ZTPXACWB.js +1788 -0
- package/dist/chunk-ZUA3JMI6.js +107 -0
- package/dist/chunk-ZYAZUPPV.js +559 -0
- package/dist/composer.js +8 -8
- package/dist/computer-viewer-TDDO25AV.js +21 -0
- package/dist/connect.js +12 -12
- package/dist/desktop-dictation.js +12 -10
- package/dist/desktop-dictation.js.map +1 -1
- package/dist/desktop.js +2 -2
- package/dist/editor.js +2 -2
- package/dist/embedded-new-voice-2G3VLPVQ.js +24 -0
- package/dist/embedded-voice-T5IWOWGD.js +24 -0
- package/dist/fleet-decision-row-WM64KXP3.js +361 -0
- package/dist/in-chat-connect-model.js +5 -5
- package/dist/index.js +51 -51
- package/dist/interaction.js +5 -5
- package/dist/machines.js +3 -3
- package/dist/meetings-recorder.js +1 -1
- package/dist/meetings.js +40 -32
- package/dist/meetings.js.map +1 -1
- package/dist/messages/en.d.ts +3 -0
- package/dist/messages.js +1 -1
- package/dist/model-policy-picker-menu-SMC6J6QN.js +22 -0
- package/dist/payment-page-card-G4U63KUV.js +223 -0
- package/dist/platform-activity-row-BUZGZAKZ.js +128 -0
- package/dist/queue-surface-implementation-4KUZ4PJV.js +908 -0
- package/dist/realtime.js +4 -4
- package/dist/recorder-host-WF2RRR56.js +69 -0
- package/dist/recorder-host-WF2RRR56.js.map +1 -0
- package/dist/recordings.js +3 -3
- package/dist/sandbox-files-ESDMOFSD.js +27 -0
- package/dist/session-app.js +211 -209
- package/dist/session-connect-cards-Q53KMMYY.js +25 -0
- package/dist/session-list-model.js +2 -2
- package/dist/session-realtime-CF3I35WJ.js +30 -0
- package/dist/session-realtime.js +2 -2
- package/dist/session-ui.js +33 -31
- package/dist/session.js +5 -5
- package/dist/sites.js +2 -2
- package/dist/terminal.js +2 -2
- package/dist/this-computer.js +3 -3
- package/dist/timeline-annotation-markers-CJK4RYZ4.js +157 -0
- package/dist/timeline-annotation-selection-67GF5H26.js +208 -0
- package/dist/timeline-annotations-dialog-ONJPQDJQ.js +283 -0
- package/dist/ui/access-list.js +11 -9
- package/dist/ui/access-list.js.map +1 -1
- package/dist/ui/api-error.d.ts +6 -3
- package/dist/ui/api-error.js +2 -1
- package/dist/ui/cadence-picker.js +6 -4
- package/dist/ui/choice-cards.js +5 -3
- package/dist/ui/confirm-dialog.js +2 -2
- package/dist/ui/copy-field.js +5 -3
- package/dist/ui/detail-page.js +2 -2
- package/dist/ui/detail-sheet.js +2 -2
- package/dist/ui/diff-view.js +4 -3
- package/dist/ui/disclosure.js +3 -3
- package/dist/ui/email-chips-input.js +5 -3
- package/dist/ui/error-message.js +2 -1
- package/dist/ui/error-reference.d.ts +15 -0
- package/dist/ui/error-text.d.ts +10 -0
- package/dist/ui/error-text.js +9 -0
- package/dist/ui/error-text.js.map +1 -0
- package/dist/ui/field.js +4 -2
- package/dist/ui/flush-form-page.js +8 -6
- package/dist/ui/form-dialog.js +7 -5
- package/dist/ui/list-row.js +3 -3
- package/dist/ui/load-failure.js +3 -2
- package/dist/ui/load-failure.js.map +1 -1
- package/dist/ui/notice.js +3 -1
- package/dist/ui/relative-time.js +2 -2
- package/dist/ui/revision-history.js +9 -7
- package/dist/ui/revision-history.js.map +1 -1
- package/dist/ui/role-select.js +10 -8
- package/dist/ui/segmented-control.js +4 -2
- package/dist/ui/select-menu.js +5 -3
- package/dist/ui/setting-row.js +3 -1
- package/dist/ui/switch.js +4 -2
- package/dist/ui/usage-meter.js +3 -3
- package/dist/ui/word-list-row.js +4 -2
- package/dist/usage.js +2 -2
- package/dist/workbench.js +4 -4
- package/package.json +5 -6
- package/src/app/app-state.tsx +126 -14
- package/src/app/components/artifacts/site-data.tsx +2 -2
- package/src/app/components/artifacts/site-settings.tsx +2 -2
- package/src/app/components/rail/session-list.tsx +7 -8
- package/src/app/components/rail/session-shell.tsx +3 -3
- package/src/app/components/repository-picker.tsx +8 -1
- package/src/app/components/session/model-context-inspector.tsx +2 -1
- package/src/app/components/session/session-admin-access.tsx +2 -2
- package/src/app/lib/actions/chat-operations.ts +4 -4
- package/src/app/lib/archive-session.test.tsx +265 -2
- package/src/app/lib/archive-session.tsx +175 -9
- package/src/app/lib/copy-link.ts +2 -2
- package/src/app/lib/inbox.tsx +2 -2
- package/src/app/lib/session-failure-toasts.ts +3 -2
- package/src/app/lib/toast.test.tsx +215 -0
- package/src/app/lib/toast.tsx +67 -2
- package/src/app/personal-github-reconnect.test.tsx +356 -0
- package/src/app/routes/artifacts.tsx +1 -2
- package/src/components/tool-action-review.tsx +14 -1
- package/src/meetings/delete-meeting-dialog.tsx +2 -1
- package/src/meetings/meeting-ask.tsx +2 -1
- package/src/meetings/meeting-detail-page.tsx +2 -1
- package/src/meetings/meeting-notes.tsx +2 -1
- package/src/meetings/meeting-settings.tsx +4 -1
- package/src/meetings/meeting-transcript.tsx +4 -1
- package/src/meetings/recorder-context.tsx +10 -0
- package/src/meetings/recorder-host.test.tsx +60 -2
- package/src/meetings/recorder-host.tsx +16 -3
- package/src/meetings/recorder-panel.tsx +2 -1
- package/src/meetings/recorder-workspace.test.tsx +26 -1
- package/src/messages/en.ts +6 -0
- package/src/ui/api-error.test.ts +29 -5
- package/src/ui/api-error.tsx +10 -4
- package/src/ui/error-message.tsx +8 -0
- package/src/ui/error-reference.test.ts +54 -0
- package/src/ui/error-reference.ts +51 -0
- package/src/ui/error-text.test.tsx +66 -0
- package/src/ui/error-text.tsx +49 -0
- package/src/ui/field.tsx +4 -1
- package/src/ui/notice.tsx +7 -2
- package/src/ui/setting-row.tsx +4 -1
- package/styles/app.css +12 -0
- package/styles/compiled.css +9 -0
- package/dist/browser-viewer-NOP5EAUO.js +0 -23
- package/dist/chat-interactive-block-G7O44JHR.js +0 -18
- package/dist/chunk-26RWVLRD.js +0 -135
- package/dist/chunk-2AHTY7OT.js +0 -247
- package/dist/chunk-2GDNWKSC.js +0 -3670
- package/dist/chunk-2JENKGCE.js +0 -339
- package/dist/chunk-2KYQC4T5.js +0 -155
- package/dist/chunk-2RREGDQH.js +0 -708
- package/dist/chunk-2T7DX6KR.js +0 -353
- package/dist/chunk-2VB2O4FQ.js +0 -920
- package/dist/chunk-2VTTKH23.js +0 -94
- package/dist/chunk-2XNG2KNT.js +0 -172
- package/dist/chunk-2YC6JQRO.js +0 -399
- package/dist/chunk-2ZVRJRXC.js +0 -27
- package/dist/chunk-35737UT4.js +0 -162
- package/dist/chunk-366XZ4PM.js +0 -41
- package/dist/chunk-36MIDGAH.js +0 -199
- package/dist/chunk-3FD76LXM.js +0 -212
- package/dist/chunk-3OVIXY4O.js +0 -213
- package/dist/chunk-3OVIXY4O.js.map +0 -1
- package/dist/chunk-3QNRBEYH.js +0 -432
- package/dist/chunk-3QX55WLC.js +0 -15
- package/dist/chunk-3USJPT2S.js +0 -1022
- package/dist/chunk-42CMQ5VR.js +0 -251
- package/dist/chunk-4LPOWQJY.js +0 -42
- package/dist/chunk-4NBTZRKT.js +0 -79
- package/dist/chunk-4OXI6HCV.js +0 -118
- package/dist/chunk-4SZZAFYQ.js +0 -2317
- package/dist/chunk-4TQL3WP2.js +0 -140
- package/dist/chunk-4Y6BK7IU.js +0 -196
- package/dist/chunk-4YD7YZC5.js +0 -373
- package/dist/chunk-5DTST3TP.js +0 -81
- package/dist/chunk-5FH5LQVS.js +0 -130
- package/dist/chunk-5KWMYPJV.js +0 -847
- package/dist/chunk-5MUJDC6C.js +0 -84
- package/dist/chunk-5QM2WPKV.js +0 -41
- package/dist/chunk-5WUN7XPD.js +0 -1184
- package/dist/chunk-64PO2WXU.js +0 -1067
- package/dist/chunk-6AHATAAY.js +0 -431
- package/dist/chunk-6ED2YWBT.js +0 -56
- package/dist/chunk-6GXVYAGR.js +0 -170
- package/dist/chunk-6H4SJBPE.js +0 -85
- package/dist/chunk-6MT3HHUB.js +0 -84
- package/dist/chunk-6UHCBH4G.js +0 -198
- package/dist/chunk-6WLX3NR3.js +0 -198
- package/dist/chunk-73NXYYWE.js +0 -112
- package/dist/chunk-76ERNKIZ.js +0 -603
- package/dist/chunk-776QZ573.js +0 -57
- package/dist/chunk-7BYWOFVH.js +0 -171
- package/dist/chunk-7O5CGGIQ.js +0 -108
- package/dist/chunk-7QOHRZ67.js +0 -251
- package/dist/chunk-7WIDB4PL.js +0 -2058
- package/dist/chunk-7WKP3DYJ.js +0 -37
- package/dist/chunk-7XOVTPDI.js +0 -227
- package/dist/chunk-AB5MBIXY.js +0 -281
- package/dist/chunk-ADNMXBCX.js +0 -1193
- package/dist/chunk-AFBJTUFK.js +0 -202
- package/dist/chunk-ALVRWCXE.js +0 -61
- package/dist/chunk-AOHU6O3M.js +0 -247
- package/dist/chunk-AOHU6O3M.js.map +0 -1
- package/dist/chunk-APW4T4SW.js +0 -270
- package/dist/chunk-AXBSYWKX.js +0 -2656
- package/dist/chunk-B2I5ZW35.js +0 -422
- package/dist/chunk-B3LMRTRF.js +0 -223
- package/dist/chunk-BE2XENG2.js +0 -292
- package/dist/chunk-BE2XENG2.js.map +0 -1
- package/dist/chunk-BF4SADKX.js +0 -29
- package/dist/chunk-BKP43KK4.js +0 -1788
- package/dist/chunk-BM3NEZ6X.js +0 -781
- package/dist/chunk-BT3BAGB5.js +0 -216
- package/dist/chunk-BTSYDIVJ.js +0 -357
- package/dist/chunk-BUBNGKWG.js +0 -70
- package/dist/chunk-BVUJV5WR.js +0 -126
- package/dist/chunk-BZO5ZMUP.js +0 -27
- package/dist/chunk-C3HUF3M2.js +0 -157
- package/dist/chunk-C5QCAOES.js +0 -264
- package/dist/chunk-CGK6ALQU.js +0 -159
- package/dist/chunk-CPYGO76Q.js +0 -335
- package/dist/chunk-CQH4FWYA.js +0 -490
- package/dist/chunk-CZP5QXNB.js +0 -234
- package/dist/chunk-D2TOWEYH.js +0 -266
- package/dist/chunk-D6L4GHRH.js +0 -340
- package/dist/chunk-DKT3N37I.js +0 -50
- package/dist/chunk-DMMJIFKA.js +0 -84
- package/dist/chunk-DO74DQC7.js +0 -26
- package/dist/chunk-DOFJZ2JU.js +0 -83
- package/dist/chunk-DSXVY5WZ.js +0 -119
- package/dist/chunk-E337C2VK.js +0 -82
- package/dist/chunk-E6NRSRBE.js +0 -114
- package/dist/chunk-E6SQKHAU.js +0 -114
- package/dist/chunk-E7UIVD7F.js +0 -236
- package/dist/chunk-EGBII4CP.js +0 -229
- package/dist/chunk-EILSAQVJ.js +0 -200
- package/dist/chunk-ELL6HSYR.js +0 -307
- package/dist/chunk-EUBGLFFR.js +0 -73
- package/dist/chunk-EW6RNWSH.js +0 -212
- package/dist/chunk-EYUT5Y6V.js +0 -2599
- package/dist/chunk-F7U3QPZ3.js +0 -304
- package/dist/chunk-FBTJKSTM.js +0 -1270
- package/dist/chunk-FC2FTSK3.js +0 -2424
- package/dist/chunk-FOGNA3BU.js +0 -148
- package/dist/chunk-FQFKHNC7.js +0 -650
- package/dist/chunk-FTCHM755.js +0 -50
- package/dist/chunk-FXSHP4JZ.js +0 -3550
- package/dist/chunk-G6ZZC543.js +0 -818
- package/dist/chunk-G7FU6PUA.js +0 -100
- package/dist/chunk-GA4YEAMX.js +0 -3851
- package/dist/chunk-GE33BGB7.js +0 -12
- package/dist/chunk-GQ67HSJY.js +0 -570
- package/dist/chunk-GXXZ3WAK.js +0 -106
- package/dist/chunk-H2TCRX3H.js +0 -237
- package/dist/chunk-HLL4PBO7.js +0 -60
- package/dist/chunk-HLOEPV5C.js +0 -259
- package/dist/chunk-HUAGBS4O.js +0 -56
- package/dist/chunk-I36GSRUJ.js +0 -211
- package/dist/chunk-I6VBHT7S.js +0 -261
- package/dist/chunk-ICNNNOXE.js +0 -333
- package/dist/chunk-ICX64J4U.js +0 -172
- package/dist/chunk-ID36Y46W.js +0 -5046
- package/dist/chunk-ID36Y46W.js.map +0 -1
- package/dist/chunk-IGVVXLKJ.js +0 -559
- package/dist/chunk-IKJLSBUI.js +0 -2984
- package/dist/chunk-IKMUFDVS.js +0 -50
- package/dist/chunk-IKUNOX7F.js +0 -255
- package/dist/chunk-ILKDYBON.js +0 -288
- package/dist/chunk-IVYJX3OY.js +0 -187
- package/dist/chunk-JCY4CMDH.js +0 -107
- package/dist/chunk-JJZPLGIP.js +0 -474
- package/dist/chunk-JW33RV4V.js +0 -143
- package/dist/chunk-JWPA6ZPZ.js +0 -351
- package/dist/chunk-JZ4QXS6D.js +0 -50
- package/dist/chunk-K42OUZQ3.js +0 -386
- package/dist/chunk-K5TOVX5A.js +0 -206
- package/dist/chunk-K63HGHZX.js +0 -99
- package/dist/chunk-K6R5T44I.js +0 -75
- package/dist/chunk-KHJ5PXFM.js +0 -914
- package/dist/chunk-KJZRQ55O.js +0 -2319
- package/dist/chunk-KJZRQ55O.js.map +0 -1
- package/dist/chunk-KKI55ZMW.js +0 -65
- package/dist/chunk-KRPLAAFP.js +0 -199
- package/dist/chunk-KVFEZDBO.js +0 -134
- package/dist/chunk-L4I665WK.js +0 -45
- package/dist/chunk-L4OF77LE.js +0 -110
- package/dist/chunk-L4OF77LE.js.map +0 -1
- package/dist/chunk-LA5T52RM.js +0 -70
- package/dist/chunk-LM2W5YAT.js +0 -401
- package/dist/chunk-LQ62ECE6.js +0 -390
- package/dist/chunk-LQDUHU3Y.js +0 -71
- package/dist/chunk-LRJIYTZW.js +0 -4157
- package/dist/chunk-LRJIYTZW.js.map +0 -1
- package/dist/chunk-LRN6GYAZ.js +0 -138
- package/dist/chunk-M4SDVTKJ.js +0 -790
- package/dist/chunk-MA6O7CM6.js +0 -99
- package/dist/chunk-MBIBB6GI.js +0 -197
- package/dist/chunk-MF3ZFB4H.js +0 -199
- package/dist/chunk-MJJGJMYJ.js +0 -98
- package/dist/chunk-MLJADQFI.js +0 -4824
- package/dist/chunk-MQG7RV3B.js +0 -62
- package/dist/chunk-MTTGSQA5.js +0 -186
- package/dist/chunk-MW7Y3T55.js +0 -525
- package/dist/chunk-MYUFMVCH.js +0 -121
- package/dist/chunk-N3OARGH2.js +0 -61
- package/dist/chunk-NB2HMRT2.js +0 -353
- package/dist/chunk-NFDFYWMV.js +0 -141
- package/dist/chunk-NWGNFN3N.js +0 -1187
- package/dist/chunk-NWJRPDIO.js +0 -840
- package/dist/chunk-NWJRPDIO.js.map +0 -1
- package/dist/chunk-NXWBBZJV.js +0 -267
- package/dist/chunk-NY2QWROL.js +0 -71
- package/dist/chunk-O2IOPP3R.js +0 -848
- package/dist/chunk-O2UWH5RG.js +0 -141
- package/dist/chunk-O5YWDLYF.js +0 -393
- package/dist/chunk-OBMCZO7E.js +0 -121
- package/dist/chunk-OD3DCCCB.js +0 -132
- package/dist/chunk-OMH7R6I3.js +0 -390
- package/dist/chunk-OSA5EQG5.js +0 -113
- package/dist/chunk-OSJ3MUTZ.js +0 -2936
- package/dist/chunk-OWAYJ2OV.js +0 -368
- package/dist/chunk-OYXBFSGK.js +0 -269
- package/dist/chunk-PC2EBA5G.js +0 -4116
- package/dist/chunk-PC2EBA5G.js.map +0 -1
- package/dist/chunk-PC2MVXIP.js +0 -363
- package/dist/chunk-PC2MVXIP.js.map +0 -1
- package/dist/chunk-PENGLDR5.js +0 -309
- package/dist/chunk-PSMAWRPL.js +0 -191
- package/dist/chunk-PW4IMTYR.js +0 -702
- package/dist/chunk-PW54V7T5.js +0 -387
- package/dist/chunk-Q2EXYSMO.js +0 -24
- package/dist/chunk-Q2XJK5I4.js +0 -51
- package/dist/chunk-Q2XJK5I4.js.map +0 -1
- package/dist/chunk-Q4EFRI6X.js +0 -258
- package/dist/chunk-Q52CXW6C.js +0 -48
- package/dist/chunk-Q6XQ2R37.js +0 -184
- package/dist/chunk-QAJ53XBW.js +0 -23
- package/dist/chunk-QDTKECT4.js +0 -129
- package/dist/chunk-QE3ZFGI3.js +0 -43
- package/dist/chunk-QHHSUR2Y.js +0 -298
- package/dist/chunk-QHNVNR7B.js +0 -173
- package/dist/chunk-QIK2Q6N5.js +0 -376
- package/dist/chunk-QWL4L366.js +0 -38
- package/dist/chunk-R3J2PTVQ.js +0 -690
- package/dist/chunk-RBRX5ZS3.js +0 -319
- package/dist/chunk-REX6JIC7.js +0 -33
- package/dist/chunk-RGZ7EEC3.js +0 -537
- package/dist/chunk-RGZ7EEC3.js.map +0 -1
- package/dist/chunk-RIPS7GFR.js +0 -960
- package/dist/chunk-RTBZNFNV.js +0 -1354
- package/dist/chunk-RTBZNFNV.js.map +0 -1
- package/dist/chunk-SKMNW4SW.js +0 -187
- package/dist/chunk-SRFARKXC.js +0 -623
- package/dist/chunk-SWIHWCTW.js +0 -4461
- package/dist/chunk-TA5CFTO4.js +0 -103
- package/dist/chunk-TF4ZVJLI.js +0 -156
- package/dist/chunk-TG7DADJR.js +0 -9624
- package/dist/chunk-TI4R2ZD5.js +0 -623
- package/dist/chunk-TI4R2ZD5.js.map +0 -1
- package/dist/chunk-TNKWOUWP.js +0 -412
- package/dist/chunk-TNUSPXPW.js +0 -5555
- package/dist/chunk-TNUSPXPW.js.map +0 -1
- package/dist/chunk-TNYFHKVV.js +0 -366
- package/dist/chunk-TPMZBOFH.js +0 -178
- package/dist/chunk-TW3LKRJF.js +0 -263
- package/dist/chunk-TZAO65I4.js +0 -83
- package/dist/chunk-U5EFEMYU.js +0 -89
- package/dist/chunk-U6M4LS3M.js +0 -378
- package/dist/chunk-UI4HI5QK.js +0 -918
- package/dist/chunk-UJDOWCQ3.js +0 -272
- package/dist/chunk-UJUQ2QOX.js +0 -581
- package/dist/chunk-UQ3IM6FY.js +0 -133
- package/dist/chunk-UYE47LO6.js +0 -246
- package/dist/chunk-VADHIT26.js +0 -89
- package/dist/chunk-VFQ3H6CO.js +0 -163
- package/dist/chunk-VGUN6VB2.js +0 -188
- package/dist/chunk-VGWWEVSD.js +0 -723
- package/dist/chunk-VIEFJ2DM.js +0 -2469
- package/dist/chunk-VLXM36VS.js +0 -268
- package/dist/chunk-W3BFRR2G.js +0 -499
- package/dist/chunk-W5MPXR3A.js +0 -981
- package/dist/chunk-W5OWKVZG.js +0 -136
- package/dist/chunk-W6FRORMX.js +0 -486
- package/dist/chunk-W6FRORMX.js.map +0 -1
- package/dist/chunk-W7XROSZO.js +0 -232
- package/dist/chunk-W7XROSZO.js.map +0 -1
- package/dist/chunk-WEZ5PXZP.js +0 -403
- package/dist/chunk-WHWUWN2X.js +0 -197
- package/dist/chunk-WHWUWN2X.js.map +0 -1
- package/dist/chunk-WLEDGIVS.js +0 -114
- package/dist/chunk-WLEDGIVS.js.map +0 -1
- package/dist/chunk-WNDAKLHG.js +0 -281
- package/dist/chunk-WTJ4PLMU.js +0 -103
- package/dist/chunk-WV2KPJUW.js +0 -107
- package/dist/chunk-X3VY5EGY.js +0 -277
- package/dist/chunk-X3VY5EGY.js.map +0 -1
- package/dist/chunk-XDBYWVCW.js +0 -418
- package/dist/chunk-XF7MA4U5.js +0 -36
- package/dist/chunk-XF7MA4U5.js.map +0 -1
- package/dist/chunk-XOSQP3YA.js +0 -605
- package/dist/chunk-XYBV4ZJQ.js +0 -271
- package/dist/chunk-YBKVGLQR.js +0 -147
- package/dist/chunk-YDCUBUWH.js +0 -1583
- package/dist/chunk-YG6NARQY.js +0 -51
- package/dist/chunk-YG6NARQY.js.map +0 -1
- package/dist/chunk-YSVD5HI4.js +0 -278
- package/dist/chunk-YT3WGNG6.js +0 -290
- package/dist/chunk-YYICQDK4.js +0 -414
- package/dist/chunk-YYLMZLI6.js +0 -686
- package/dist/chunk-ZAMTKG5U.js +0 -95
- package/dist/chunk-ZDLYSXKN.js +0 -111
- package/dist/chunk-ZG447FSS.js +0 -194
- package/dist/chunk-ZIT5KD4Q.js +0 -264
- package/dist/chunk-ZUDOVDKR.js +0 -3064
- package/dist/chunk-ZW2ECJ3A.js +0 -451
- package/dist/computer-viewer-LPZ763KF.js +0 -21
- package/dist/embedded-new-voice-YVMKSLKJ.js +0 -24
- package/dist/embedded-voice-BJPQFXSU.js +0 -24
- package/dist/fleet-decision-row-AA4H5CDT.js +0 -361
- package/dist/model-policy-picker-menu-HSMWVO4P.js +0 -22
- package/dist/payment-page-card-3LTSFJGN.js +0 -223
- package/dist/platform-activity-row-5VYV6TX4.js +0 -128
- package/dist/queue-surface-implementation-NXHZUKD2.js +0 -908
- package/dist/recorder-host-ZKRWTDBM.js +0 -57
- package/dist/recorder-host-ZKRWTDBM.js.map +0 -1
- package/dist/sandbox-files-YCMLQUFU.js +0 -27
- package/dist/session-connect-cards-KSQLMRM5.js +0 -25
- package/dist/session-realtime-ZR6JLG3Y.js +0 -30
- package/dist/timeline-annotation-markers-YAHDPWVG.js +0 -157
- package/dist/timeline-annotation-selection-KHXNCEJP.js +0 -208
- package/dist/timeline-annotations-dialog-Y4XD3N7B.js +0 -283
- /package/dist/{browser-viewer-NOP5EAUO.js.map → browser-viewer-TC27OCIP.js.map} +0 -0
- /package/dist/{chat-interactive-block-G7O44JHR.js.map → chat-interactive-block-RWPQBHVS.js.map} +0 -0
- /package/dist/{chunk-EGBII4CP.js.map → chunk-2BDT3UZQ.js.map} +0 -0
- /package/dist/{chunk-4YD7YZC5.js.map → chunk-2CLNIEK4.js.map} +0 -0
- /package/dist/{chunk-ZW2ECJ3A.js.map → chunk-2FSBSCZJ.js.map} +0 -0
- /package/dist/{chunk-KRPLAAFP.js.map → chunk-2I7HDP53.js.map} +0 -0
- /package/dist/{chunk-3QX55WLC.js.map → chunk-2INLDVK3.js.map} +0 -0
- /package/dist/{chunk-BVUJV5WR.js.map → chunk-2KALVELR.js.map} +0 -0
- /package/dist/{chunk-XDBYWVCW.js.map → chunk-2M3J7ZWQ.js.map} +0 -0
- /package/dist/{chunk-2RREGDQH.js.map → chunk-2OP6WLGV.js.map} +0 -0
- /package/dist/{chunk-OSJ3MUTZ.js.map → chunk-2RG7NIAS.js.map} +0 -0
- /package/dist/{chunk-26RWVLRD.js.map → chunk-2STUPWEL.js.map} +0 -0
- /package/dist/{chunk-XYBV4ZJQ.js.map → chunk-2YUOVM3G.js.map} +0 -0
- /package/dist/{chunk-2GDNWKSC.js.map → chunk-2Z3NQNTM.js.map} +0 -0
- /package/dist/{chunk-2VB2O4FQ.js.map → chunk-3CPWWGNK.js.map} +0 -0
- /package/dist/{chunk-7WKP3DYJ.js.map → chunk-3ED2U6XE.js.map} +0 -0
- /package/dist/{chunk-BT3BAGB5.js.map → chunk-3GZA4BUW.js.map} +0 -0
- /package/dist/{chunk-3USJPT2S.js.map → chunk-3IK6UYO6.js.map} +0 -0
- /package/dist/{chunk-6AHATAAY.js.map → chunk-3PZ7JZI2.js.map} +0 -0
- /package/dist/{chunk-JZ4QXS6D.js.map → chunk-4DVJ6ONS.js.map} +0 -0
- /package/dist/{chunk-5QM2WPKV.js.map → chunk-4E3ZJRTZ.js.map} +0 -0
- /package/dist/{chunk-NFDFYWMV.js.map → chunk-4SAWSRAA.js.map} +0 -0
- /package/dist/{chunk-ELL6HSYR.js.map → chunk-53AGXXZM.js.map} +0 -0
- /package/dist/{chunk-G6ZZC543.js.map → chunk-54YW6SZZ.js.map} +0 -0
- /package/dist/{chunk-4SZZAFYQ.js.map → chunk-57AZS3IE.js.map} +0 -0
- /package/dist/{chunk-JW33RV4V.js.map → chunk-5CPEEAFD.js.map} +0 -0
- /package/dist/{chunk-D6L4GHRH.js.map → chunk-5EWSRZ2Y.js.map} +0 -0
- /package/dist/{chunk-PW54V7T5.js.map → chunk-5IE76VCY.js.map} +0 -0
- /package/dist/{chunk-6GXVYAGR.js.map → chunk-5NWEKLDZ.js.map} +0 -0
- /package/dist/{chunk-6UHCBH4G.js.map → chunk-5O2FCCHZ.js.map} +0 -0
- /package/dist/{chunk-2YC6JQRO.js.map → chunk-5QAY6K77.js.map} +0 -0
- /package/dist/{chunk-EYUT5Y6V.js.map → chunk-6DK6Z4UN.js.map} +0 -0
- /package/dist/{chunk-PW4IMTYR.js.map → chunk-6DVCC7QS.js.map} +0 -0
- /package/dist/{chunk-7WIDB4PL.js.map → chunk-6JHU2UBS.js.map} +0 -0
- /package/dist/{chunk-CQH4FWYA.js.map → chunk-6PZ7OBYU.js.map} +0 -0
- /package/dist/{chunk-VFQ3H6CO.js.map → chunk-6WGRDRMA.js.map} +0 -0
- /package/dist/{chunk-MTTGSQA5.js.map → chunk-77WAKEAH.js.map} +0 -0
- /package/dist/{chunk-O5YWDLYF.js.map → chunk-7TDO3CUM.js.map} +0 -0
- /package/dist/{chunk-2AHTY7OT.js.map → chunk-7TIX2UAR.js.map} +0 -0
- /package/dist/{chunk-FOGNA3BU.js.map → chunk-7V5REBCP.js.map} +0 -0
- /package/dist/{chunk-2JENKGCE.js.map → chunk-7VMZGLYI.js.map} +0 -0
- /package/dist/{chunk-E7UIVD7F.js.map → chunk-7W37NS3I.js.map} +0 -0
- /package/dist/{chunk-ZDLYSXKN.js.map → chunk-7X6SDK2C.js.map} +0 -0
- /package/dist/{chunk-ZAMTKG5U.js.map → chunk-7ZNUHRP5.js.map} +0 -0
- /package/dist/{chunk-DMMJIFKA.js.map → chunk-A36PZALD.js.map} +0 -0
- /package/dist/{chunk-WV2KPJUW.js.map → chunk-AUI6VA63.js.map} +0 -0
- /package/dist/{chunk-Q2EXYSMO.js.map → chunk-AW2MQB37.js.map} +0 -0
- /package/dist/{chunk-6WLX3NR3.js.map → chunk-AWKES45Y.js.map} +0 -0
- /package/dist/{chunk-OD3DCCCB.js.map → chunk-AXHZYXUV.js.map} +0 -0
- /package/dist/{chunk-QDTKECT4.js.map → chunk-BHNSJVBC.js.map} +0 -0
- /package/dist/{chunk-FTCHM755.js.map → chunk-BJEJFISW.js.map} +0 -0
- /package/dist/{chunk-B2I5ZW35.js.map → chunk-BJFH6JI5.js.map} +0 -0
- /package/dist/{chunk-RIPS7GFR.js.map → chunk-BMICEQZQ.js.map} +0 -0
- /package/dist/{chunk-BF4SADKX.js.map → chunk-BTLBYBLU.js.map} +0 -0
- /package/dist/{chunk-U5EFEMYU.js.map → chunk-BXBDYNRP.js.map} +0 -0
- /package/dist/{chunk-BTSYDIVJ.js.map → chunk-C372BFOV.js.map} +0 -0
- /package/dist/{chunk-MLJADQFI.js.map → chunk-CMKGILJK.js.map} +0 -0
- /package/dist/{chunk-DKT3N37I.js.map → chunk-CRAOSVHC.js.map} +0 -0
- /package/dist/{chunk-WNDAKLHG.js.map → chunk-CRU35QQH.js.map} +0 -0
- /package/dist/{chunk-2XNG2KNT.js.map → chunk-CUIWCGMA.js.map} +0 -0
- /package/dist/{chunk-QWL4L366.js.map → chunk-D5TWNFFE.js.map} +0 -0
- /package/dist/{chunk-SWIHWCTW.js.map → chunk-DF5EAHDN.js.map} +0 -0
- /package/dist/{chunk-HUAGBS4O.js.map → chunk-DJAXC5OK.js.map} +0 -0
- /package/dist/{chunk-FXSHP4JZ.js.map → chunk-DXBYWSL5.js.map} +0 -0
- /package/dist/{chunk-5MUJDC6C.js.map → chunk-DXR5PDFP.js.map} +0 -0
- /package/dist/{chunk-NXWBBZJV.js.map → chunk-DZWARC4M.js.map} +0 -0
- /package/dist/{chunk-GXXZ3WAK.js.map → chunk-DZXEDSQI.js.map} +0 -0
- /package/dist/{chunk-Q52CXW6C.js.map → chunk-E7XERZWC.js.map} +0 -0
- /package/dist/{chunk-4NBTZRKT.js.map → chunk-ECJBYNLJ.js.map} +0 -0
- /package/dist/{chunk-QE3ZFGI3.js.map → chunk-EDI6SJ2N.js.map} +0 -0
- /package/dist/{chunk-E6NRSRBE.js.map → chunk-EWSOC6WF.js.map} +0 -0
- /package/dist/{chunk-TA5CFTO4.js.map → chunk-F2OPHAUN.js.map} +0 -0
- /package/dist/{chunk-5DTST3TP.js.map → chunk-F4ISQGGM.js.map} +0 -0
- /package/dist/{chunk-MBIBB6GI.js.map → chunk-FO4LYKJL.js.map} +0 -0
- /package/dist/{chunk-EUBGLFFR.js.map → chunk-FPXASDG5.js.map} +0 -0
- /package/dist/{chunk-C3HUF3M2.js.map → chunk-FVXBNBHO.js.map} +0 -0
- /package/dist/{chunk-W5MPXR3A.js.map → chunk-FZC5N55X.js.map} +0 -0
- /package/dist/{chunk-MA6O7CM6.js.map → chunk-GAVYGBFI.js.map} +0 -0
- /package/dist/{chunk-REX6JIC7.js.map → chunk-GKVJIDHF.js.map} +0 -0
- /package/dist/{chunk-EW6RNWSH.js.map → chunk-GVN5SZLX.js.map} +0 -0
- /package/dist/{chunk-KVFEZDBO.js.map → chunk-H3T7IWNA.js.map} +0 -0
- /package/dist/{chunk-I6VBHT7S.js.map → chunk-HAX4LCR5.js.map} +0 -0
- /package/dist/{chunk-OBMCZO7E.js.map → chunk-HC4JFZVU.js.map} +0 -0
- /package/dist/{chunk-UJUQ2QOX.js.map → chunk-HEFPPMBQ.js.map} +0 -0
- /package/dist/{chunk-DOFJZ2JU.js.map → chunk-HNLR7Q4Z.js.map} +0 -0
- /package/dist/{chunk-GE33BGB7.js.map → chunk-HSOXMJOT.js.map} +0 -0
- /package/dist/{chunk-AB5MBIXY.js.map → chunk-I4MRDSUF.js.map} +0 -0
- /package/dist/{chunk-AFBJTUFK.js.map → chunk-I4QEJ62Y.js.map} +0 -0
- /package/dist/{chunk-6ED2YWBT.js.map → chunk-I5B5L6Q4.js.map} +0 -0
- /package/dist/{chunk-C5QCAOES.js.map → chunk-I5QZJODL.js.map} +0 -0
- /package/dist/{chunk-76ERNKIZ.js.map → chunk-I7ITSXSJ.js.map} +0 -0
- /package/dist/{chunk-OMH7R6I3.js.map → chunk-I7XIZRFD.js.map} +0 -0
- /package/dist/{chunk-E337C2VK.js.map → chunk-IDANQPRH.js.map} +0 -0
- /package/dist/{chunk-3FD76LXM.js.map → chunk-IFB3WJ36.js.map} +0 -0
- /package/dist/{chunk-ZIT5KD4Q.js.map → chunk-IHTAKKTK.js.map} +0 -0
- /package/dist/{chunk-QHNVNR7B.js.map → chunk-ILDXWY37.js.map} +0 -0
- /package/dist/{chunk-GQ67HSJY.js.map → chunk-IMDQUHBJ.js.map} +0 -0
- /package/dist/{chunk-DSXVY5WZ.js.map → chunk-IMZCQBOT.js.map} +0 -0
- /package/dist/{chunk-WEZ5PXZP.js.map → chunk-IXPTECSC.js.map} +0 -0
- /package/dist/{chunk-NY2QWROL.js.map → chunk-J255A3N5.js.map} +0 -0
- /package/dist/{chunk-O2UWH5RG.js.map → chunk-J5F5HPPW.js.map} +0 -0
- /package/dist/{chunk-VIEFJ2DM.js.map → chunk-JEA3QDX7.js.map} +0 -0
- /package/dist/{chunk-TF4ZVJLI.js.map → chunk-JEUPAVYY.js.map} +0 -0
- /package/dist/{chunk-ZG447FSS.js.map → chunk-JKHKLL5W.js.map} +0 -0
- /package/dist/{chunk-FQFKHNC7.js.map → chunk-JQL7ZH6C.js.map} +0 -0
- /package/dist/{chunk-776QZ573.js.map → chunk-JWB44UGJ.js.map} +0 -0
- /package/dist/{chunk-ICNNNOXE.js.map → chunk-JZ4NLCAP.js.map} +0 -0
- /package/dist/{chunk-TNKWOUWP.js.map → chunk-K2A5PXQ5.js.map} +0 -0
- /package/dist/{chunk-SRFARKXC.js.map → chunk-K56XV3C3.js.map} +0 -0
- /package/dist/{chunk-QAJ53XBW.js.map → chunk-K6GAXXVA.js.map} +0 -0
- /package/dist/{chunk-MF3ZFB4H.js.map → chunk-KCBMFSMS.js.map} +0 -0
- /package/dist/{chunk-VLXM36VS.js.map → chunk-KF2FV3ZJ.js.map} +0 -0
- /package/dist/{chunk-YSVD5HI4.js.map → chunk-KJD65EJP.js.map} +0 -0
- /package/dist/{chunk-K42OUZQ3.js.map → chunk-KLEUWIMZ.js.map} +0 -0
- /package/dist/{chunk-PENGLDR5.js.map → chunk-KODELWYT.js.map} +0 -0
- /package/dist/{chunk-TZAO65I4.js.map → chunk-KRDR5RJD.js.map} +0 -0
- /package/dist/{chunk-KHJ5PXFM.js.map → chunk-KUDGXAF7.js.map} +0 -0
- /package/dist/{chunk-6H4SJBPE.js.map → chunk-KYS77RPN.js.map} +0 -0
- /package/dist/{chunk-OWAYJ2OV.js.map → chunk-L7YTNTIK.js.map} +0 -0
- /package/dist/{chunk-YYLMZLI6.js.map → chunk-LHPNABDH.js.map} +0 -0
- /package/dist/{chunk-LM2W5YAT.js.map → chunk-MFROMEKA.js.map} +0 -0
- /package/dist/{chunk-AXBSYWKX.js.map → chunk-MIHN76LX.js.map} +0 -0
- /package/dist/{chunk-4LPOWQJY.js.map → chunk-MIYFS2XN.js.map} +0 -0
- /package/dist/{chunk-KKI55ZMW.js.map → chunk-MJUCFQMS.js.map} +0 -0
- /package/dist/{chunk-ZUDOVDKR.js.map → chunk-MM4FNWI4.js.map} +0 -0
- /package/dist/{chunk-M4SDVTKJ.js.map → chunk-MNZG4OHU.js.map} +0 -0
- /package/dist/{chunk-EILSAQVJ.js.map → chunk-N6AACDUW.js.map} +0 -0
- /package/dist/{chunk-BM3NEZ6X.js.map → chunk-NC55IFN3.js.map} +0 -0
- /package/dist/{chunk-MJJGJMYJ.js.map → chunk-NC7PVOEK.js.map} +0 -0
- /package/dist/{chunk-LA5T52RM.js.map → chunk-NCYMNCJO.js.map} +0 -0
- /package/dist/{chunk-HLOEPV5C.js.map → chunk-ND2BXV3P.js.map} +0 -0
- /package/dist/{chunk-UJDOWCQ3.js.map → chunk-NDBTFUO6.js.map} +0 -0
- /package/dist/{chunk-K5TOVX5A.js.map → chunk-NDQJZ7HF.js.map} +0 -0
- /package/dist/{chunk-35737UT4.js.map → chunk-NGJJJPZZ.js.map} +0 -0
- /package/dist/{chunk-42CMQ5VR.js.map → chunk-NJTSNNE7.js.map} +0 -0
- /package/dist/{chunk-FBTJKSTM.js.map → chunk-NRTE7DNV.js.map} +0 -0
- /package/dist/{chunk-YT3WGNG6.js.map → chunk-NULUNM7H.js.map} +0 -0
- /package/dist/{chunk-7XOVTPDI.js.map → chunk-NUNZS36W.js.map} +0 -0
- /package/dist/{chunk-FC2FTSK3.js.map → chunk-NW53H5RW.js.map} +0 -0
- /package/dist/{chunk-TW3LKRJF.js.map → chunk-NXCMHIKI.js.map} +0 -0
- /package/dist/{chunk-CGK6ALQU.js.map → chunk-O3LKCBP5.js.map} +0 -0
- /package/dist/{chunk-QIK2Q6N5.js.map → chunk-O6N4ABCA.js.map} +0 -0
- /package/dist/{chunk-73NXYYWE.js.map → chunk-O732GAFC.js.map} +0 -0
- /package/dist/{chunk-R3J2PTVQ.js.map → chunk-OF4TIKYC.js.map} +0 -0
- /package/dist/{chunk-BUBNGKWG.js.map → chunk-OMPVOMPP.js.map} +0 -0
- /package/dist/{chunk-4OXI6HCV.js.map → chunk-OPJJSKUK.js.map} +0 -0
- /package/dist/{chunk-4Y6BK7IU.js.map → chunk-OPWCMA4D.js.map} +0 -0
- /package/dist/{chunk-ADNMXBCX.js.map → chunk-ORJPS5VN.js.map} +0 -0
- /package/dist/{chunk-SKMNW4SW.js.map → chunk-OSY5K7L7.js.map} +0 -0
- /package/dist/{chunk-L4I665WK.js.map → chunk-OV6QJRT4.js.map} +0 -0
- /package/dist/{chunk-7O5CGGIQ.js.map → chunk-OVKYVZMW.js.map} +0 -0
- /package/dist/{chunk-7BYWOFVH.js.map → chunk-OZCBM3UC.js.map} +0 -0
- /package/dist/{chunk-ALVRWCXE.js.map → chunk-P3A2EINJ.js.map} +0 -0
- /package/dist/{chunk-BZO5ZMUP.js.map → chunk-PTAG4PDC.js.map} +0 -0
- /package/dist/{chunk-QHHSUR2Y.js.map → chunk-PTF5B7TJ.js.map} +0 -0
- /package/dist/{chunk-O2IOPP3R.js.map → chunk-Q3DPEYX4.js.map} +0 -0
- /package/dist/{chunk-G7FU6PUA.js.map → chunk-QB2KMIDP.js.map} +0 -0
- /package/dist/{chunk-64PO2WXU.js.map → chunk-QCSJ4CWE.js.map} +0 -0
- /package/dist/{chunk-YYICQDK4.js.map → chunk-QIOQ2NPQ.js.map} +0 -0
- /package/dist/{chunk-NB2HMRT2.js.map → chunk-QK5EFEUT.js.map} +0 -0
- /package/dist/{chunk-366XZ4PM.js.map → chunk-QPQBLYQJ.js.map} +0 -0
- /package/dist/{chunk-Q6XQ2R37.js.map → chunk-QPSGCC5D.js.map} +0 -0
- /package/dist/{chunk-JJZPLGIP.js.map → chunk-QZAAUQRN.js.map} +0 -0
- /package/dist/{chunk-VGUN6VB2.js.map → chunk-RGBI63KJ.js.map} +0 -0
- /package/dist/{chunk-LRN6GYAZ.js.map → chunk-RLBKLAEY.js.map} +0 -0
- /package/dist/{chunk-F7U3QPZ3.js.map → chunk-RMFKVOM7.js.map} +0 -0
- /package/dist/{chunk-Q4EFRI6X.js.map → chunk-ROKQU7WG.js.map} +0 -0
- /package/dist/{chunk-7QOHRZ67.js.map → chunk-RPVREAU7.js.map} +0 -0
- /package/dist/{chunk-VGWWEVSD.js.map → chunk-RQKLF42C.js.map} +0 -0
- /package/dist/{chunk-2VTTKH23.js.map → chunk-SEO7TICN.js.map} +0 -0
- /package/dist/{chunk-3QNRBEYH.js.map → chunk-SHHJCL7X.js.map} +0 -0
- /package/dist/{chunk-E6SQKHAU.js.map → chunk-SIRLACNZ.js.map} +0 -0
- /package/dist/{chunk-H2TCRX3H.js.map → chunk-SKPHMYAA.js.map} +0 -0
- /package/dist/{chunk-YDCUBUWH.js.map → chunk-SODC7T6L.js.map} +0 -0
- /package/dist/{chunk-TNYFHKVV.js.map → chunk-SQJIKMN3.js.map} +0 -0
- /package/dist/{chunk-DO74DQC7.js.map → chunk-SVINDKVW.js.map} +0 -0
- /package/dist/{chunk-CPYGO76Q.js.map → chunk-SYCDHPZF.js.map} +0 -0
- /package/dist/{chunk-UQ3IM6FY.js.map → chunk-T2QX3FDP.js.map} +0 -0
- /package/dist/{chunk-NWGNFN3N.js.map → chunk-T3OWFVMS.js.map} +0 -0
- /package/dist/{chunk-N3OARGH2.js.map → chunk-T6XI5FLY.js.map} +0 -0
- /package/dist/{chunk-MQG7RV3B.js.map → chunk-T7OXJZCX.js.map} +0 -0
- /package/dist/{chunk-2T7DX6KR.js.map → chunk-TAT5USZN.js.map} +0 -0
- /package/dist/{chunk-ICX64J4U.js.map → chunk-TPQTRNER.js.map} +0 -0
- /package/dist/{chunk-D2TOWEYH.js.map → chunk-TUIN4MB7.js.map} +0 -0
- /package/dist/{chunk-LQDUHU3Y.js.map → chunk-TX3VECZU.js.map} +0 -0
- /package/dist/{chunk-TG7DADJR.js.map → chunk-TXLIEOJX.js.map} +0 -0
- /package/dist/{chunk-2ZVRJRXC.js.map → chunk-U3DN4HEY.js.map} +0 -0
- /package/dist/{chunk-PSMAWRPL.js.map → chunk-U7XM7CB4.js.map} +0 -0
- /package/dist/{chunk-4TQL3WP2.js.map → chunk-UJK53QFL.js.map} +0 -0
- /package/dist/{chunk-RBRX5ZS3.js.map → chunk-UMTXA2TH.js.map} +0 -0
- /package/dist/{chunk-36MIDGAH.js.map → chunk-UPDSXFK5.js.map} +0 -0
- /package/dist/{chunk-OYXBFSGK.js.map → chunk-UTIAXH52.js.map} +0 -0
- /package/dist/{chunk-5WUN7XPD.js.map → chunk-UVN5TMHU.js.map} +0 -0
- /package/dist/{chunk-UYE47LO6.js.map → chunk-VGYXW3VG.js.map} +0 -0
- /package/dist/{chunk-IKUNOX7F.js.map → chunk-VS7AHPCZ.js.map} +0 -0
- /package/dist/{chunk-MYUFMVCH.js.map → chunk-VTTAJOQ7.js.map} +0 -0
- /package/dist/{chunk-K63HGHZX.js.map → chunk-VWPOLUAO.js.map} +0 -0
- /package/dist/{chunk-GA4YEAMX.js.map → chunk-X3MWB2QU.js.map} +0 -0
- /package/dist/{chunk-I36GSRUJ.js.map → chunk-X6KAJI3V.js.map} +0 -0
- /package/dist/{chunk-IKMUFDVS.js.map → chunk-XBLRHV5R.js.map} +0 -0
- /package/dist/{chunk-XOSQP3YA.js.map → chunk-XDFP2LMW.js.map} +0 -0
- /package/dist/{chunk-MW7Y3T55.js.map → chunk-XEQMZB3C.js.map} +0 -0
- /package/dist/{chunk-B3LMRTRF.js.map → chunk-XEYLT5VA.js.map} +0 -0
- /package/dist/{chunk-UI4HI5QK.js.map → chunk-XHIQ5I6N.js.map} +0 -0
- /package/dist/{chunk-U6M4LS3M.js.map → chunk-XLH7QY2R.js.map} +0 -0
- /package/dist/{chunk-OSA5EQG5.js.map → chunk-XWFAMUZQ.js.map} +0 -0
- /package/dist/{chunk-6MT3HHUB.js.map → chunk-Y4OBB2VN.js.map} +0 -0
- /package/dist/{chunk-CZP5QXNB.js.map → chunk-YCVD6CI3.js.map} +0 -0
- /package/dist/{chunk-APW4T4SW.js.map → chunk-YENLNISG.js.map} +0 -0
- /package/dist/{chunk-JWPA6ZPZ.js.map → chunk-YIRVLKAX.js.map} +0 -0
- /package/dist/{chunk-LQ62ECE6.js.map → chunk-YL73CVNK.js.map} +0 -0
- /package/dist/{chunk-ILKDYBON.js.map → chunk-YLS6QE5G.js.map} +0 -0
- /package/dist/{chunk-YBKVGLQR.js.map → chunk-YPWU5KPE.js.map} +0 -0
- /package/dist/{chunk-IKJLSBUI.js.map → chunk-YQXTDZSU.js.map} +0 -0
- /package/dist/{chunk-TPMZBOFH.js.map → chunk-YSJEAAOL.js.map} +0 -0
- /package/dist/{chunk-W3BFRR2G.js.map → chunk-YWIFM7D7.js.map} +0 -0
- /package/dist/{chunk-WTJ4PLMU.js.map → chunk-YWVI6ZMK.js.map} +0 -0
- /package/dist/{chunk-5KWMYPJV.js.map → chunk-Z4FMAFNH.js.map} +0 -0
- /package/dist/{chunk-W5OWKVZG.js.map → chunk-Z654FWNU.js.map} +0 -0
- /package/dist/{chunk-5FH5LQVS.js.map → chunk-Z7Y523PS.js.map} +0 -0
- /package/dist/{chunk-HLL4PBO7.js.map → chunk-ZD67RM6G.js.map} +0 -0
- /package/dist/{chunk-IVYJX3OY.js.map → chunk-ZEG4VPBL.js.map} +0 -0
- /package/dist/{chunk-K6R5T44I.js.map → chunk-ZLYCOBHW.js.map} +0 -0
- /package/dist/{chunk-VADHIT26.js.map → chunk-ZNJ5MTXV.js.map} +0 -0
- /package/dist/{chunk-2KYQC4T5.js.map → chunk-ZSGY3H53.js.map} +0 -0
- /package/dist/{chunk-BKP43KK4.js.map → chunk-ZTPXACWB.js.map} +0 -0
- /package/dist/{chunk-JCY4CMDH.js.map → chunk-ZUA3JMI6.js.map} +0 -0
- /package/dist/{chunk-IGVVXLKJ.js.map → chunk-ZYAZUPPV.js.map} +0 -0
- /package/dist/{computer-viewer-LPZ763KF.js.map → computer-viewer-TDDO25AV.js.map} +0 -0
- /package/dist/{embedded-new-voice-YVMKSLKJ.js.map → embedded-new-voice-2G3VLPVQ.js.map} +0 -0
- /package/dist/{embedded-voice-BJPQFXSU.js.map → embedded-voice-T5IWOWGD.js.map} +0 -0
- /package/dist/{fleet-decision-row-AA4H5CDT.js.map → fleet-decision-row-WM64KXP3.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-HSMWVO4P.js.map → model-policy-picker-menu-SMC6J6QN.js.map} +0 -0
- /package/dist/{payment-page-card-3LTSFJGN.js.map → payment-page-card-G4U63KUV.js.map} +0 -0
- /package/dist/{platform-activity-row-5VYV6TX4.js.map → platform-activity-row-BUZGZAKZ.js.map} +0 -0
- /package/dist/{queue-surface-implementation-NXHZUKD2.js.map → queue-surface-implementation-4KUZ4PJV.js.map} +0 -0
- /package/dist/{sandbox-files-YCMLQUFU.js.map → sandbox-files-ESDMOFSD.js.map} +0 -0
- /package/dist/{session-connect-cards-KSQLMRM5.js.map → session-connect-cards-Q53KMMYY.js.map} +0 -0
- /package/dist/{session-realtime-ZR6JLG3Y.js.map → session-realtime-CF3I35WJ.js.map} +0 -0
- /package/dist/{timeline-annotation-markers-YAHDPWVG.js.map → timeline-annotation-markers-CJK4RYZ4.js.map} +0 -0
- /package/dist/{timeline-annotation-selection-KHXNCEJP.js.map → timeline-annotation-selection-67GF5H26.js.map} +0 -0
- /package/dist/{timeline-annotations-dialog-Y4XD3N7B.js.map → timeline-annotations-dialog-ONJPQDJQ.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/access-list.tsx"],"sourcesContent":["/* ----------------------------------------------------------------------------\n AccessList - the one membership editor, used everywhere access is edited:\n Workspace Access, the person sheet, the workspace sheet and the invite\n dialog. Same rows, verbs and role definitions in all four places.\n\n Roles come from the server's role catalog (see RoleSelect). You and owners\n are always listed. Service accounts sit in their own subgroup.\n\n Variants:\n - \"inline\" (default): avatar, name and email, a role select that saves\n immediately, and a menu with Remove.\n - \"text\": quieter rows with the role as text; the whole row opens the\n person sheet, where the role is changed.\n - \"matrix\": people by workspaces, one role per cell. Only for a few\n workspaces.\n -------------------------------------------------------------------------- */\n\nimport { useId, type ReactNode } from \"react\";\nimport {\n BotIcon,\n ChevronRightIcon,\n MailIcon,\n MoreHorizontalIcon,\n RotateCcwIcon,\n SlidersHorizontalIcon,\n UserMinusIcon,\n XIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar, AvatarFallback } from \"./avatar\";\nimport { Button } from \"./button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport { MetaChip } from \"./meta-chip\";\nimport { failedLoadParts, type FailedLoad } from \"./diff-view\";\nimport { ErrorMessage } from \"./error-message\";\nimport { InlineDisabledReason } from \"./select-menu\";\nimport { Skeleton } from \"./skeleton\";\nimport { StatusBadge } from \"./status-badge\";\nimport { RoleSelect, roleLabel, type RoleOption, type RoleValue } from \"./role-select\";\n\nexport type AccessMemberStatus = \"active\" | \"invited\" | \"invite_failed\" | \"suspended\";\n\nexport interface AccessMember<R extends string = string> {\n id: string;\n name: string;\n /** Service accounts have none. */\n email?: string | null | undefined;\n initials: string;\n kind?: \"person\" | \"service\" | undefined;\n isYou?: boolean | undefined;\n /**\n * The viewer administers this list from above (an organization owner or\n * admin on the organization's workspace page), so their own row stays\n * editable: they set and remove their own access like anyone else's.\n */\n managesOwnAccess?: boolean | undefined;\n /** Owners are always listed and can't be removed here. */\n isOwner?: boolean | undefined;\n /** A small tag after the name, for example \"Only owner\". */\n tag?: string | undefined;\n status?: AccessMemberStatus | undefined;\n /** \"Invited · expires in 5 days\". Shown only when not active. */\n statusLabel?: string | undefined;\n /** The role in this list's scope. */\n role: RoleValue<R>;\n /** For a legacy custom grant: the role \"Reset to role\" goes back to. */\n resetRole?: R | undefined;\n /** Why this person's role can't be changed here. */\n roleLockedReason?: string | undefined;\n /** Why this person can't be removed here. Owners and You never can. */\n removeLockedReason?: string | undefined;\n /** Matrix variant: the role per scope id (null is no access). */\n grants?: Record<string, RoleValue<R>> | undefined;\n}\n\nexport interface AccessScope {\n id: string;\n /** \"Platform engineering\". */\n label: string;\n}\n\nexport type AccessListVariant = \"inline\" | \"text\" | \"matrix\";\n\nexport interface AccessListProps<R extends string = string> {\n members: readonly AccessMember<R>[];\n /** From the server's role catalog, least to most access. */\n roles: readonly RoleOption<R>[];\n variant?: AccessListVariant | undefined;\n /** Accessible name for the list: \"People with access to Platform engineering\". */\n label: string;\n /** Matrix columns. */\n scopes?: readonly AccessScope[] | undefined;\n /** Saves a role. Return a promise to show the saving state. */\n onRoleChange?: (\n member: AccessMember<R>,\n role: R | null,\n scopeId?: string,\n ) => void | Promise<unknown>;\n onRemove?: ((member: AccessMember<R>) => void) | undefined;\n /**\n * Opens the hand-picked permission editor (\"Custom permissions…\" in the ⋯\n * menu). Optional: most places only offer roles.\n */\n onCustomize?: ((member: AccessMember<R>) => void) | undefined;\n /** Replaces a legacy custom grant with `member.resetRole`. */\n onResetToRole?: ((member: AccessMember<R>) => void | Promise<unknown>) | undefined;\n /** Text variant: opens the person sheet. */\n onOpen?: ((member: AccessMember<R>) => void) | undefined;\n onResendInvite?: ((member: AccessMember<R>) => void) | undefined;\n onRevokeInvite?: ((member: AccessMember<R>) => void) | undefined;\n /** When set, nothing can be changed and this line says why. */\n readOnlyReason?: string | undefined;\n loading?: boolean | undefined;\n /** Skeleton rows while loading. Default 4. */\n loadingRows?: number | undefined;\n /** What happened, what to do next, and an optional retry. Replaces the list. */\n error?: FailedLoad | undefined;\n /** Members whose role is being saved elsewhere, shown with a spinner. */\n savingIds?: readonly string[] | undefined;\n /** Shown when only you have access. */\n emptyMessage?: ReactNode | undefined;\n /** \"Remove from workspace\" or \"Remove from organization\". */\n removeLabel?: string | undefined;\n /** What the list sits on, so the matrix's sticky column matches. Default \"bg\". */\n canvas?: \"bg\" | \"surface\" | undefined;\n /** Adds \"No access\" to role choices (matrix, person sheet). */\n noAccessLabel?: string | undefined;\n className?: string | undefined;\n}\n\n/** Service accounts go in their own subgroup, after the people. */\nexport function groupAccessMembers<R extends string>(\n members: readonly AccessMember<R>[],\n): { people: AccessMember<R>[]; services: AccessMember<R>[] } {\n const people = members.filter((member) => member.kind !== \"service\");\n const services = members.filter((member) => member.kind === \"service\");\n // You first, then owners, then everyone else in the order the server sent.\n const rank = (member: AccessMember<R>) => (member.isYou ? 0 : member.isOwner ? 1 : 2);\n return {\n people: people\n .map((member, index) => ({ member, index }))\n .sort((a, b) => rank(a.member) - rank(b.member) || a.index - b.index)\n .map(({ member }) => member),\n services,\n };\n}\n\n/** Why a member can't be removed, or null when they can. */\nexport function removeBlockedReason(member: AccessMember): string | null {\n if (member.removeLockedReason) return member.removeLockedReason;\n if (member.isYou && !member.managesOwnAccess) return \"You can't remove yourself here.\";\n if (member.isOwner) return \"Owners always have access.\";\n return null;\n}\n\nfunction isInvite(member: AccessMember): boolean {\n return member.status === \"invited\" || member.status === \"invite_failed\";\n}\n\n/* ---------------------------------------------------------------- pieces */\n\nfunction MemberAvatar({ member }: { member: AccessMember }) {\n if (member.kind === \"service\") {\n return (\n <span\n aria-hidden=\"true\"\n className=\"grid size-8 shrink-0 place-items-center rounded-[10px] border border-border bg-surface-2 text-fg-muted\"\n >\n <BotIcon className=\"size-4\" />\n </span>\n );\n }\n // Someone who hasn't joined yet: a dashed outline, the same initials.\n const pending = isInvite(member);\n return (\n <Avatar aria-hidden=\"true\">\n <AvatarFallback\n className={cn(\n \"text-xs font-semibold\",\n pending\n ? \"border border-dashed border-border-strong bg-transparent text-fg-subtle\"\n : \"bg-surface-2 text-fg-muted\",\n )}\n >\n {member.initials}\n </AvatarFallback>\n </Avatar>\n );\n}\n\nfunction MemberIdentity({\n member,\n roles,\n onResetToRole,\n readOnly,\n}: {\n member: AccessMember<string>;\n roles: readonly RoleOption<string>[];\n onResetToRole?: ((member: AccessMember<string>) => void | Promise<unknown>) | undefined;\n readOnly: boolean;\n}) {\n const showStatus = member.status && member.status !== \"active\" && member.statusLabel;\n const secondary = member.kind === \"service\" ? \"Service account\" : member.email;\n const resetTo =\n member.role === \"custom\" && member.resetRole ? roleLabel(roles, member.resetRole) : null;\n return (\n <div className=\"min-w-0\">\n {/* One line: the name truncates before the chip wraps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm leading-5 font-medium text-fg\">\n {member.name}\n </span>\n {member.isYou ? <MetaChip variant=\"outline\">You</MetaChip> : null}\n </div>\n {secondary || member.tag ? (\n // Like a ListRow meta line: the separator trails its item, so a\n // wrapped tag (\"Only owner\") starts its own line cleanly.\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-1.5 text-xs leading-4.5 text-fg-muted\">\n {secondary ? (\n <span className=\"inline-flex max-w-full min-w-0 items-center gap-1.5\">\n <span className=\"min-w-0 truncate\">{secondary}</span>\n {member.tag ? (\n <span aria-hidden=\"true\" className=\"text-fg-subtle\">\n ·\n </span>\n ) : null}\n </span>\n ) : null}\n {member.tag ? <span className=\"whitespace-nowrap\">{member.tag}</span> : null}\n </div>\n ) : null}\n {showStatus ? (\n <div className=\"mt-0.5 flex min-w-0\">\n <StatusBadge variant=\"dot\" status={member.status} className=\"min-w-0\">\n {member.statusLabel}\n </StatusBadge>\n </div>\n ) : null}\n {member.role === \"custom\" ? (\n // The reset link carries its own icon, so it needs no separator (and no\n // dot is left dangling when it wraps under the text on narrow rows).\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-2 text-xs leading-4.5 text-fg-muted\">\n <span className=\"whitespace-nowrap\">Hand-picked permissions</span>\n {resetTo && onResetToRole && !readOnly ? (\n <button\n type=\"button\"\n onClick={() => void onResetToRole(member)}\n className=\"inline-flex items-center gap-1 rounded-[6px] font-medium whitespace-nowrap og-link pointer-coarse:min-h-11\"\n >\n <RotateCcwIcon aria-hidden=\"true\" className=\"size-3\" />\n Reset to {resetTo}\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction RowMenu({\n member,\n removeLabel,\n onRemove,\n onCustomize,\n onResetToRole,\n onResendInvite,\n onRevokeInvite,\n roles,\n}: {\n member: AccessMember<string>;\n removeLabel: string;\n onRemove?: ((member: AccessMember<string>) => void) | undefined;\n onCustomize?: ((member: AccessMember<string>) => void) | undefined;\n onResetToRole?: ((member: AccessMember<string>) => void | Promise<unknown>) | undefined;\n onResendInvite?: ((member: AccessMember<string>) => void) | undefined;\n onRevokeInvite?: ((member: AccessMember<string>) => void) | undefined;\n roles: readonly RoleOption<string>[];\n}) {\n const invite = isInvite(member);\n const blocked = removeBlockedReason(member);\n const canReset = member.role === \"custom\" && member.resetRole && onResetToRole;\n // Custom permissions follow the same rule as the role: never your own.\n const canCustomize =\n Boolean(onCustomize) && (!member.isYou || member.managesOwnAccess) && !member.isOwner;\n const hasItems = invite\n ? Boolean(onResendInvite || onRevokeInvite)\n : Boolean((onRemove && !blocked) || canReset || canCustomize);\n if (!hasItems) return <span aria-hidden=\"true\" className=\"size-8\" />;\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label={`More actions for ${member.name}`}\n className=\"grid size-8 shrink-0 place-items-center rounded-[10px] text-fg-subtle transition-colors duration-[120ms] outline-hidden hover:bg-surface-3 hover:text-fg focus-visible:ring-2 focus-visible:ring-brand/55 data-[state=open]:bg-surface-3 data-[state=open]:text-fg pointer-coarse:size-11\"\n >\n <MoreHorizontalIcon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n {/* Same menu as a ListRow's ⋯: default content, icon + verb per item. */}\n <DropdownMenuContent align=\"end\" className=\"min-w-44\">\n {invite ? (\n <>\n {onResendInvite ? (\n <DropdownMenuItem onSelect={() => onResendInvite(member)}>\n <MailIcon />\n Resend invitation\n </DropdownMenuItem>\n ) : null}\n {onRevokeInvite ? (\n <DropdownMenuItem variant=\"destructive\" onSelect={() => onRevokeInvite(member)}>\n <XIcon />\n Revoke invitation\n </DropdownMenuItem>\n ) : null}\n </>\n ) : (\n <>\n {canReset ? (\n <DropdownMenuItem onSelect={() => void onResetToRole!(member)}>\n <RotateCcwIcon />\n Reset to {roleLabel(roles, member.resetRole!)}\n </DropdownMenuItem>\n ) : null}\n {canCustomize ? (\n <DropdownMenuItem onSelect={() => onCustomize!(member)}>\n <SlidersHorizontalIcon />\n Custom permissions…\n </DropdownMenuItem>\n ) : null}\n {(canReset || canCustomize) && onRemove && !blocked ? <DropdownMenuSeparator /> : null}\n {onRemove && !blocked ? (\n <DropdownMenuItem variant=\"destructive\" onSelect={() => onRemove(member)}>\n <UserMinusIcon />\n {removeLabel}\n </DropdownMenuItem>\n ) : null}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction roleLockReason(\n member: AccessMember,\n readOnlyReason: string | undefined,\n): string | undefined {\n if (readOnlyReason) return undefined; // read-only lists show text, not locked controls\n if (member.roleLockedReason) return member.roleLockedReason;\n if (member.isYou && !member.managesOwnAccess) {\n return \"You can't change your own role. Ask another admin.\";\n }\n return undefined;\n}\n\n/* ---------------------------------------------------------------- states */\n\nfunction LoadingRows({ rows, variant }: { rows: number; variant: AccessListVariant }) {\n return (\n <ul aria-hidden=\"true\" className=\"flex flex-col divide-y divide-border\">\n {Array.from({ length: rows }, (_, index) => (\n // oxlint-disable-next-line react/no-array-index-key -- static placeholders\n <li key={index} className=\"flex min-h-14 items-center gap-3 px-3 py-3\">\n <Skeleton className=\"size-8 shrink-0 rounded-full bg-surface-3\" />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Skeleton className=\"h-3.5 w-36 max-w-[60%] rounded-full bg-surface-3\" />\n <Skeleton className=\"h-3 w-48 max-w-[80%] rounded-full bg-surface-3\" />\n </div>\n {variant === \"inline\" ? (\n <Skeleton className=\"hidden h-8 w-[12.5rem] shrink-0 rounded-[10px] bg-surface-3 @md/access:block\" />\n ) : (\n <Skeleton className=\"h-3.5 w-20 shrink-0 rounded-full bg-surface-3\" />\n )}\n </li>\n ))}\n </ul>\n );\n}\n\nfunction ErrorState({ error }: { error: NonNullable<AccessListProps[\"error\"]> }) {\n const failure = failedLoadParts(error);\n return (\n <ErrorMessage\n title={error.message}\n details={failure.details}\n align=\"center\"\n announce\n action={\n error.onRetry ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={error.onRetry}>\n Try again\n </Button>\n ) : undefined\n }\n >\n {failure.detail}\n </ErrorMessage>\n );\n}\n\n/* ---------------------------------------------------------------- variants */\n\ninterface RowProps {\n member: AccessMember<string>;\n props: AccessListProps<string>;\n}\n\nfunction InlineRow({ member, props }: RowProps) {\n const { roles, onRoleChange, readOnlyReason, noAccessLabel } = props;\n const readOnly = Boolean(readOnlyReason);\n const lockReason = roleLockReason(member, readOnlyReason);\n return (\n <li className=\"grid min-h-14 grid-cols-[2rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-3 @md/access:grid-cols-[2rem_minmax(0,1fr)_12.5rem_2rem]\">\n <div className=\"row-start-1 self-start @md/access:self-center\">\n <MemberAvatar member={member} />\n </div>\n <div className=\"row-start-1 min-w-0\">\n <MemberIdentity\n member={member}\n roles={roles}\n onResetToRole={props.onResetToRole}\n readOnly={readOnly}\n />\n </div>\n <div className=\"col-span-2 col-start-2 row-start-2 min-w-0 @md/access:col-span-1 @md/access:col-start-3 @md/access:row-start-1\">\n {readOnly ? (\n <RoleSelect\n variant=\"text\"\n roles={roles}\n value={member.role}\n noAccessLabel={noAccessLabel}\n />\n ) : (\n <RoleSelect\n roles={roles}\n value={member.role}\n subjectName={member.name}\n noAccessLabel={noAccessLabel}\n disabledReason={lockReason}\n pending={props.savingIds?.includes(member.id)}\n onValueChange={onRoleChange ? (role) => onRoleChange(member, role) : undefined}\n className=\"w-full max-w-[12.5rem] @md/access:max-w-none\"\n />\n )}\n </div>\n <div className=\"col-start-3 row-start-1 flex justify-end @md/access:col-start-4\">\n {readOnly ? null : (\n <RowMenu\n member={member}\n roles={roles}\n removeLabel={props.removeLabel ?? \"Remove from workspace\"}\n onRemove={props.onRemove}\n onCustomize={props.onCustomize}\n onResetToRole={props.onResetToRole}\n onResendInvite={props.onResendInvite}\n onRevokeInvite={props.onRevokeInvite}\n />\n )}\n </div>\n </li>\n );\n}\n\nfunction TextRow({ member, props }: RowProps) {\n const { roles, onOpen, noAccessLabel } = props;\n const content = (\n <>\n <MemberAvatar member={member} />\n <div className=\"min-w-0 flex-1\">\n <MemberIdentity member={member} roles={roles} readOnly />\n </div>\n <span\n className={cn(\n \"shrink-0 text-sm\",\n member.role === null ? \"text-fg-subtle\" : \"text-fg-muted\",\n )}\n >\n {roleLabel(roles, member.role, { noAccessLabel })}\n </span>\n {onOpen ? (\n <ChevronRightIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-fg-subtle\" />\n ) : null}\n </>\n );\n return (\n <li className=\"min-w-0\">\n {onOpen ? (\n <button\n type=\"button\"\n onClick={() => onOpen(member)}\n aria-label={`${member.name}, ${roleLabel(roles, member.role, { noAccessLabel })}`}\n className=\"flex min-h-14 w-full min-w-0 items-center gap-3 px-3 py-3 text-left transition-colors duration-[120ms] outline-hidden hover:bg-surface-2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-brand/55\"\n >\n {content}\n </button>\n ) : (\n <div className=\"flex min-h-14 min-w-0 items-center gap-3 px-3 py-3\">{content}</div>\n )}\n </li>\n );\n}\n\nfunction ListVariant({ props }: { props: AccessListProps<string> }) {\n const { people, services } = groupAccessMembers(props.members);\n const servicesId = useId();\n const Row = props.variant === \"text\" ? TextRow : InlineRow;\n // Both list layouts use the resource row's hairlines (see ListRow).\n const listClass = \"flex min-w-0 flex-col divide-y divide-border\";\n const onlyYou = people.length <= 1 && services.length === 0;\n return (\n <>\n <ul aria-label={props.label} className={listClass}>\n {people.map((member) => (\n <Row key={member.id} member={member} props={props} />\n ))}\n </ul>\n {onlyYou && props.emptyMessage ? (\n <p className=\"border-t border-border px-3 pt-3 text-sm text-fg-muted\">\n {props.emptyMessage}\n </p>\n ) : null}\n {services.length > 0 ? (\n <div className=\"border-t border-border pt-4\">\n <h3 id={servicesId} className=\"px-3 text-xs leading-4.5 font-medium text-fg\">\n Service accounts\n </h3>\n <ul aria-labelledby={servicesId} className={cn(listClass, \"mt-1\")}>\n {services.map((member) => (\n <Row key={member.id} member={member} props={props} />\n ))}\n </ul>\n </div>\n ) : null}\n </>\n );\n}\n\nfunction MatrixVariant({ props }: { props: AccessListProps<string> }) {\n const { roles, scopes = [], onRoleChange, readOnlyReason, noAccessLabel = \"No access\" } = props;\n const { people, services } = groupAccessMembers(props.members);\n const readOnly = Boolean(readOnlyReason);\n const cellClass = \"border-b border-border px-1.5 py-1.5 align-middle\";\n // Sticky cells need an opaque fill that matches what the list sits on.\n const sticky = props.canvas === \"surface\" ? \"bg-surface\" : \"bg-bg\";\n const renderRow = (member: AccessMember<string>) => {\n const lockReason = roleLockReason(member, readOnlyReason);\n return (\n <tr key={member.id}>\n <th\n scope=\"row\"\n className={cn(cellClass, sticky, \"sticky left-0 z-10 pr-4 pl-0 text-left font-normal\")}\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n <MemberAvatar member={member} />\n <MemberIdentity member={member} roles={roles} readOnly />\n </div>\n </th>\n {scopes.map((scope) => {\n const value = member.grants?.[scope.id] ?? null;\n return (\n <td key={scope.id} className={cellClass}>\n {readOnly ? (\n <span className=\"px-2\">\n <RoleSelect\n variant=\"text\"\n roles={roles}\n value={value}\n noAccessLabel={noAccessLabel}\n />\n </span>\n ) : (\n <RoleSelect\n variant=\"cell\"\n roles={roles}\n value={value}\n noAccessLabel={noAccessLabel}\n subjectName={member.name}\n aria-label={`${member.name} in ${scope.label}`}\n disabledReason={lockReason}\n align=\"start\"\n onValueChange={\n onRoleChange ? (role) => onRoleChange(member, role, scope.id) : undefined\n }\n />\n )}\n </td>\n );\n })}\n </tr>\n );\n };\n return (\n <div\n role=\"region\"\n aria-label={props.label}\n // A scrollable region must be reachable by keyboard.\n tabIndex={0}\n className=\"-mx-1 min-w-0 overflow-x-auto px-1 pb-1\"\n >\n <table\n className=\"w-full table-fixed border-separate border-spacing-0 text-sm\"\n style={{ minWidth: `${16 + scopes.length * 11}rem` }}\n >\n <colgroup>\n <col className=\"w-52 @md/access:w-64\" />\n {scopes.map((scope) => (\n <col key={scope.id} className=\"w-44\" />\n ))}\n </colgroup>\n <thead>\n <tr>\n <th\n scope=\"col\"\n className={cn(\n sticky,\n \"sticky left-0 z-10 border-b border-border pr-4 pb-2 text-left text-xs leading-4.5 font-medium text-fg-subtle\",\n )}\n >\n Person\n </th>\n {scopes.map((scope) => (\n <th\n key={scope.id}\n scope=\"col\"\n className=\"truncate border-b border-border px-3.5 pb-2 text-left text-xs leading-4.5 font-medium text-fg-subtle\"\n >\n {scope.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {people.map(renderRow)}\n {services.length > 0 ? (\n <tr>\n <th\n scope=\"colgroup\"\n colSpan={scopes.length + 1}\n className={cn(\n sticky,\n \"border-b border-border pt-4 pb-1.5 text-left text-xs leading-4.5 font-medium text-fg-subtle\",\n )}\n >\n Service accounts\n </th>\n </tr>\n ) : null}\n {services.map(renderRow)}\n </tbody>\n </table>\n </div>\n );\n}\n\n/** Who has access, with one role each. */\nexport function AccessList<R extends string>(props: AccessListProps<R>) {\n const { variant = \"inline\", loading, loadingRows = 4, error, readOnlyReason, className } = props;\n // Rows are generic over the role id; internally they only pass ids through.\n const erased = { ...props, variant } as unknown as AccessListProps<string>;\n return (\n <div\n data-variant={variant}\n aria-busy={loading || undefined}\n className={cn(\"@container/access min-w-0\", className)}\n >\n {readOnlyReason && !loading && !error ? (\n <p className=\"mb-1 flex min-w-0 px-3\">\n <InlineDisabledReason>{readOnlyReason}</InlineDisabledReason>\n </p>\n ) : null}\n {loading ? (\n <>\n <span className=\"sr-only\">Loading who has access</span>\n <LoadingRows rows={loadingRows} variant={variant} />\n </>\n ) : error ? (\n <ErrorState error={error} />\n ) : variant === \"matrix\" ? (\n <MatrixVariant props={erased} />\n ) : (\n <ListVariant props={erased} />\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/access-list.tsx"],"sourcesContent":["/* ----------------------------------------------------------------------------\n AccessList - the one membership editor, used everywhere access is edited:\n Workspace Access, the person sheet, the workspace sheet and the invite\n dialog. Same rows, verbs and role definitions in all four places.\n\n Roles come from the server's role catalog (see RoleSelect). You and owners\n are always listed. Service accounts sit in their own subgroup.\n\n Variants:\n - \"inline\" (default): avatar, name and email, a role select that saves\n immediately, and a menu with Remove.\n - \"text\": quieter rows with the role as text; the whole row opens the\n person sheet, where the role is changed.\n - \"matrix\": people by workspaces, one role per cell. Only for a few\n workspaces.\n -------------------------------------------------------------------------- */\n\nimport { useId, type ReactNode } from \"react\";\nimport {\n BotIcon,\n ChevronRightIcon,\n MailIcon,\n MoreHorizontalIcon,\n RotateCcwIcon,\n SlidersHorizontalIcon,\n UserMinusIcon,\n XIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../lib/cn\";\nimport { Avatar, AvatarFallback } from \"./avatar\";\nimport { Button } from \"./button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport { MetaChip } from \"./meta-chip\";\nimport { failedLoadParts, type FailedLoad } from \"./diff-view\";\nimport { ErrorMessage } from \"./error-message\";\nimport { InlineDisabledReason } from \"./select-menu\";\nimport { Skeleton } from \"./skeleton\";\nimport { StatusBadge } from \"./status-badge\";\nimport { RoleSelect, roleLabel, type RoleOption, type RoleValue } from \"./role-select\";\n\nexport type AccessMemberStatus = \"active\" | \"invited\" | \"invite_failed\" | \"suspended\";\n\nexport interface AccessMember<R extends string = string> {\n id: string;\n name: string;\n /** Service accounts have none. */\n email?: string | null | undefined;\n initials: string;\n kind?: \"person\" | \"service\" | undefined;\n isYou?: boolean | undefined;\n /**\n * The viewer administers this list from above (an organization owner or\n * admin on the organization's workspace page), so their own row stays\n * editable: they set and remove their own access like anyone else's.\n */\n managesOwnAccess?: boolean | undefined;\n /** Owners are always listed and can't be removed here. */\n isOwner?: boolean | undefined;\n /** A small tag after the name, for example \"Only owner\". */\n tag?: string | undefined;\n status?: AccessMemberStatus | undefined;\n /** \"Invited · expires in 5 days\". Shown only when not active. */\n statusLabel?: string | undefined;\n /** The role in this list's scope. */\n role: RoleValue<R>;\n /** For a legacy custom grant: the role \"Reset to role\" goes back to. */\n resetRole?: R | undefined;\n /** Why this person's role can't be changed here. */\n roleLockedReason?: string | undefined;\n /** Why this person can't be removed here. Owners and You never can. */\n removeLockedReason?: string | undefined;\n /** Matrix variant: the role per scope id (null is no access). */\n grants?: Record<string, RoleValue<R>> | undefined;\n}\n\nexport interface AccessScope {\n id: string;\n /** \"Platform engineering\". */\n label: string;\n}\n\nexport type AccessListVariant = \"inline\" | \"text\" | \"matrix\";\n\nexport interface AccessListProps<R extends string = string> {\n members: readonly AccessMember<R>[];\n /** From the server's role catalog, least to most access. */\n roles: readonly RoleOption<R>[];\n variant?: AccessListVariant | undefined;\n /** Accessible name for the list: \"People with access to Platform engineering\". */\n label: string;\n /** Matrix columns. */\n scopes?: readonly AccessScope[] | undefined;\n /** Saves a role. Return a promise to show the saving state. */\n onRoleChange?: (\n member: AccessMember<R>,\n role: R | null,\n scopeId?: string,\n ) => void | Promise<unknown>;\n onRemove?: ((member: AccessMember<R>) => void) | undefined;\n /**\n * Opens the hand-picked permission editor (\"Custom permissions…\" in the ⋯\n * menu). Optional: most places only offer roles.\n */\n onCustomize?: ((member: AccessMember<R>) => void) | undefined;\n /** Replaces a legacy custom grant with `member.resetRole`. */\n onResetToRole?: ((member: AccessMember<R>) => void | Promise<unknown>) | undefined;\n /** Text variant: opens the person sheet. */\n onOpen?: ((member: AccessMember<R>) => void) | undefined;\n onResendInvite?: ((member: AccessMember<R>) => void) | undefined;\n onRevokeInvite?: ((member: AccessMember<R>) => void) | undefined;\n /** When set, nothing can be changed and this line says why. */\n readOnlyReason?: string | undefined;\n loading?: boolean | undefined;\n /** Skeleton rows while loading. Default 4. */\n loadingRows?: number | undefined;\n /** What happened, what to do next, and an optional retry. Replaces the list. */\n error?: FailedLoad | undefined;\n /** Members whose role is being saved elsewhere, shown with a spinner. */\n savingIds?: readonly string[] | undefined;\n /** Shown when only you have access. */\n emptyMessage?: ReactNode | undefined;\n /** \"Remove from workspace\" or \"Remove from organization\". */\n removeLabel?: string | undefined;\n /** What the list sits on, so the matrix's sticky column matches. Default \"bg\". */\n canvas?: \"bg\" | \"surface\" | undefined;\n /** Adds \"No access\" to role choices (matrix, person sheet). */\n noAccessLabel?: string | undefined;\n className?: string | undefined;\n}\n\n/** Service accounts go in their own subgroup, after the people. */\nexport function groupAccessMembers<R extends string>(\n members: readonly AccessMember<R>[],\n): { people: AccessMember<R>[]; services: AccessMember<R>[] } {\n const people = members.filter((member) => member.kind !== \"service\");\n const services = members.filter((member) => member.kind === \"service\");\n // You first, then owners, then everyone else in the order the server sent.\n const rank = (member: AccessMember<R>) => (member.isYou ? 0 : member.isOwner ? 1 : 2);\n return {\n people: people\n .map((member, index) => ({ member, index }))\n .sort((a, b) => rank(a.member) - rank(b.member) || a.index - b.index)\n .map(({ member }) => member),\n services,\n };\n}\n\n/** Why a member can't be removed, or null when they can. */\nexport function removeBlockedReason(member: AccessMember): string | null {\n if (member.removeLockedReason) return member.removeLockedReason;\n if (member.isYou && !member.managesOwnAccess) return \"You can't remove yourself here.\";\n if (member.isOwner) return \"Owners always have access.\";\n return null;\n}\n\nfunction isInvite(member: AccessMember): boolean {\n return member.status === \"invited\" || member.status === \"invite_failed\";\n}\n\n/* ---------------------------------------------------------------- pieces */\n\nfunction MemberAvatar({ member }: { member: AccessMember }) {\n if (member.kind === \"service\") {\n return (\n <span\n aria-hidden=\"true\"\n className=\"grid size-8 shrink-0 place-items-center rounded-[10px] border border-border bg-surface-2 text-fg-muted\"\n >\n <BotIcon className=\"size-4\" />\n </span>\n );\n }\n // Someone who hasn't joined yet: a dashed outline, the same initials.\n const pending = isInvite(member);\n return (\n <Avatar aria-hidden=\"true\">\n <AvatarFallback\n className={cn(\n \"text-xs font-semibold\",\n pending\n ? \"border border-dashed border-border-strong bg-transparent text-fg-subtle\"\n : \"bg-surface-2 text-fg-muted\",\n )}\n >\n {member.initials}\n </AvatarFallback>\n </Avatar>\n );\n}\n\nfunction MemberIdentity({\n member,\n roles,\n onResetToRole,\n readOnly,\n}: {\n member: AccessMember<string>;\n roles: readonly RoleOption<string>[];\n onResetToRole?: ((member: AccessMember<string>) => void | Promise<unknown>) | undefined;\n readOnly: boolean;\n}) {\n const showStatus = member.status && member.status !== \"active\" && member.statusLabel;\n const secondary = member.kind === \"service\" ? \"Service account\" : member.email;\n const resetTo =\n member.role === \"custom\" && member.resetRole ? roleLabel(roles, member.resetRole) : null;\n return (\n <div className=\"min-w-0\">\n {/* One line: the name truncates before the chip wraps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm leading-5 font-medium text-fg\">\n {member.name}\n </span>\n {member.isYou ? <MetaChip variant=\"outline\">You</MetaChip> : null}\n </div>\n {secondary || member.tag ? (\n // Like a ListRow meta line: the separator trails its item, so a\n // wrapped tag (\"Only owner\") starts its own line cleanly.\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-1.5 text-xs leading-4.5 text-fg-muted\">\n {secondary ? (\n <span className=\"inline-flex max-w-full min-w-0 items-center gap-1.5\">\n <span className=\"min-w-0 truncate\">{secondary}</span>\n {member.tag ? (\n <span aria-hidden=\"true\" className=\"text-fg-subtle\">\n ·\n </span>\n ) : null}\n </span>\n ) : null}\n {member.tag ? <span className=\"whitespace-nowrap\">{member.tag}</span> : null}\n </div>\n ) : null}\n {showStatus ? (\n <div className=\"mt-0.5 flex min-w-0\">\n <StatusBadge variant=\"dot\" status={member.status} className=\"min-w-0\">\n {member.statusLabel}\n </StatusBadge>\n </div>\n ) : null}\n {member.role === \"custom\" ? (\n // The reset link carries its own icon, so it needs no separator (and no\n // dot is left dangling when it wraps under the text on narrow rows).\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-2 text-xs leading-4.5 text-fg-muted\">\n <span className=\"whitespace-nowrap\">Hand-picked permissions</span>\n {resetTo && onResetToRole && !readOnly ? (\n <button\n type=\"button\"\n onClick={() => void onResetToRole(member)}\n className=\"inline-flex items-center gap-1 rounded-[6px] font-medium whitespace-nowrap og-link pointer-coarse:min-h-11\"\n >\n <RotateCcwIcon aria-hidden=\"true\" className=\"size-3\" />\n Reset to {resetTo}\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction RowMenu({\n member,\n removeLabel,\n onRemove,\n onCustomize,\n onResetToRole,\n onResendInvite,\n onRevokeInvite,\n roles,\n}: {\n member: AccessMember<string>;\n removeLabel: string;\n onRemove?: ((member: AccessMember<string>) => void) | undefined;\n onCustomize?: ((member: AccessMember<string>) => void) | undefined;\n onResetToRole?: ((member: AccessMember<string>) => void | Promise<unknown>) | undefined;\n onResendInvite?: ((member: AccessMember<string>) => void) | undefined;\n onRevokeInvite?: ((member: AccessMember<string>) => void) | undefined;\n roles: readonly RoleOption<string>[];\n}) {\n const invite = isInvite(member);\n const blocked = removeBlockedReason(member);\n const canReset = member.role === \"custom\" && member.resetRole && onResetToRole;\n // Custom permissions follow the same rule as the role: never your own.\n const canCustomize =\n Boolean(onCustomize) && (!member.isYou || member.managesOwnAccess) && !member.isOwner;\n const hasItems = invite\n ? Boolean(onResendInvite || onRevokeInvite)\n : Boolean((onRemove && !blocked) || canReset || canCustomize);\n if (!hasItems) return <span aria-hidden=\"true\" className=\"size-8\" />;\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label={`More actions for ${member.name}`}\n className=\"grid size-8 shrink-0 place-items-center rounded-[10px] text-fg-subtle transition-colors duration-[120ms] outline-hidden hover:bg-surface-3 hover:text-fg focus-visible:ring-2 focus-visible:ring-brand/55 data-[state=open]:bg-surface-3 data-[state=open]:text-fg pointer-coarse:size-11\"\n >\n <MoreHorizontalIcon aria-hidden=\"true\" className=\"size-4\" />\n </button>\n </DropdownMenuTrigger>\n {/* Same menu as a ListRow's ⋯: default content, icon + verb per item. */}\n <DropdownMenuContent align=\"end\" className=\"min-w-44\">\n {invite ? (\n <>\n {onResendInvite ? (\n <DropdownMenuItem onSelect={() => onResendInvite(member)}>\n <MailIcon />\n Resend invitation\n </DropdownMenuItem>\n ) : null}\n {onRevokeInvite ? (\n <DropdownMenuItem variant=\"destructive\" onSelect={() => onRevokeInvite(member)}>\n <XIcon />\n Revoke invitation\n </DropdownMenuItem>\n ) : null}\n </>\n ) : (\n <>\n {canReset ? (\n <DropdownMenuItem onSelect={() => void onResetToRole!(member)}>\n <RotateCcwIcon />\n Reset to {roleLabel(roles, member.resetRole!)}\n </DropdownMenuItem>\n ) : null}\n {canCustomize ? (\n <DropdownMenuItem onSelect={() => onCustomize!(member)}>\n <SlidersHorizontalIcon />\n Custom permissions…\n </DropdownMenuItem>\n ) : null}\n {(canReset || canCustomize) && onRemove && !blocked ? <DropdownMenuSeparator /> : null}\n {onRemove && !blocked ? (\n <DropdownMenuItem variant=\"destructive\" onSelect={() => onRemove(member)}>\n <UserMinusIcon />\n {removeLabel}\n </DropdownMenuItem>\n ) : null}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction roleLockReason(\n member: AccessMember,\n readOnlyReason: string | undefined,\n): string | undefined {\n if (readOnlyReason) return undefined; // read-only lists show text, not locked controls\n if (member.roleLockedReason) return member.roleLockedReason;\n if (member.isYou && !member.managesOwnAccess) {\n return \"You can't change your own role. Ask another admin.\";\n }\n return undefined;\n}\n\n/* ---------------------------------------------------------------- states */\n\nfunction LoadingRows({ rows, variant }: { rows: number; variant: AccessListVariant }) {\n return (\n <ul aria-hidden=\"true\" className=\"flex flex-col divide-y divide-border\">\n {Array.from({ length: rows }, (_, index) => (\n // oxlint-disable-next-line react/no-array-index-key -- static placeholders\n <li key={index} className=\"flex min-h-14 items-center gap-3 px-3 py-3\">\n <Skeleton className=\"size-8 shrink-0 rounded-full bg-surface-3\" />\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Skeleton className=\"h-3.5 w-36 max-w-[60%] rounded-full bg-surface-3\" />\n <Skeleton className=\"h-3 w-48 max-w-[80%] rounded-full bg-surface-3\" />\n </div>\n {variant === \"inline\" ? (\n <Skeleton className=\"hidden h-8 w-[12.5rem] shrink-0 rounded-[10px] bg-surface-3 @md/access:block\" />\n ) : (\n <Skeleton className=\"h-3.5 w-20 shrink-0 rounded-full bg-surface-3\" />\n )}\n </li>\n ))}\n </ul>\n );\n}\n\nfunction ErrorState({ error }: { error: NonNullable<AccessListProps[\"error\"]> }) {\n const failure = failedLoadParts(error);\n return (\n <ErrorMessage\n title={error.message}\n details={failure.details}\n align=\"center\"\n announce\n action={\n error.onRetry ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={error.onRetry}>\n Try again\n </Button>\n ) : undefined\n }\n >\n {failure.detail}\n </ErrorMessage>\n );\n}\n\n/* ---------------------------------------------------------------- variants */\n\ninterface RowProps {\n member: AccessMember<string>;\n props: AccessListProps<string>;\n}\n\nfunction InlineRow({ member, props }: RowProps) {\n const { roles, onRoleChange, readOnlyReason, noAccessLabel } = props;\n const readOnly = Boolean(readOnlyReason);\n const lockReason = roleLockReason(member, readOnlyReason);\n return (\n <li className=\"grid min-h-14 grid-cols-[2rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-3 @md/access:grid-cols-[2rem_minmax(0,1fr)_12.5rem_2rem]\">\n <div className=\"row-start-1 self-start @md/access:self-center\">\n <MemberAvatar member={member} />\n </div>\n <div className=\"row-start-1 min-w-0\">\n <MemberIdentity\n member={member}\n roles={roles}\n onResetToRole={props.onResetToRole}\n readOnly={readOnly}\n />\n </div>\n <div className=\"col-span-2 col-start-2 row-start-2 min-w-0 @md/access:col-span-1 @md/access:col-start-3 @md/access:row-start-1\">\n {readOnly ? (\n <RoleSelect\n variant=\"text\"\n roles={roles}\n value={member.role}\n noAccessLabel={noAccessLabel}\n />\n ) : (\n <RoleSelect\n roles={roles}\n value={member.role}\n subjectName={member.name}\n noAccessLabel={noAccessLabel}\n disabledReason={lockReason}\n pending={props.savingIds?.includes(member.id)}\n onValueChange={onRoleChange ? (role) => onRoleChange(member, role) : undefined}\n className=\"w-full max-w-[12.5rem] @md/access:max-w-none\"\n />\n )}\n </div>\n <div className=\"col-start-3 row-start-1 flex justify-end @md/access:col-start-4\">\n {readOnly ? null : (\n <RowMenu\n member={member}\n roles={roles}\n removeLabel={props.removeLabel ?? \"Remove from workspace\"}\n onRemove={props.onRemove}\n onCustomize={props.onCustomize}\n onResetToRole={props.onResetToRole}\n onResendInvite={props.onResendInvite}\n onRevokeInvite={props.onRevokeInvite}\n />\n )}\n </div>\n </li>\n );\n}\n\nfunction TextRow({ member, props }: RowProps) {\n const { roles, onOpen, noAccessLabel } = props;\n const content = (\n <>\n <MemberAvatar member={member} />\n <div className=\"min-w-0 flex-1\">\n <MemberIdentity member={member} roles={roles} readOnly />\n </div>\n <span\n className={cn(\n \"shrink-0 text-sm\",\n member.role === null ? \"text-fg-subtle\" : \"text-fg-muted\",\n )}\n >\n {roleLabel(roles, member.role, { noAccessLabel })}\n </span>\n {onOpen ? (\n <ChevronRightIcon aria-hidden=\"true\" className=\"size-4 shrink-0 text-fg-subtle\" />\n ) : null}\n </>\n );\n return (\n <li className=\"min-w-0\">\n {onOpen ? (\n <button\n type=\"button\"\n onClick={() => onOpen(member)}\n aria-label={`${member.name}, ${roleLabel(roles, member.role, { noAccessLabel })}`}\n className=\"flex min-h-14 w-full min-w-0 items-center gap-3 px-3 py-3 text-left transition-colors duration-[120ms] outline-hidden hover:bg-surface-2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-brand/55\"\n >\n {content}\n </button>\n ) : (\n <div className=\"flex min-h-14 min-w-0 items-center gap-3 px-3 py-3\">{content}</div>\n )}\n </li>\n );\n}\n\nfunction ListVariant({ props }: { props: AccessListProps<string> }) {\n const { people, services } = groupAccessMembers(props.members);\n const servicesId = useId();\n const Row = props.variant === \"text\" ? TextRow : InlineRow;\n // Both list layouts use the resource row's hairlines (see ListRow).\n const listClass = \"flex min-w-0 flex-col divide-y divide-border\";\n const onlyYou = people.length <= 1 && services.length === 0;\n return (\n <>\n <ul aria-label={props.label} className={listClass}>\n {people.map((member) => (\n <Row key={member.id} member={member} props={props} />\n ))}\n </ul>\n {onlyYou && props.emptyMessage ? (\n <p className=\"border-t border-border px-3 pt-3 text-sm text-fg-muted\">\n {props.emptyMessage}\n </p>\n ) : null}\n {services.length > 0 ? (\n <div className=\"border-t border-border pt-4\">\n <h3 id={servicesId} className=\"px-3 text-xs leading-4.5 font-medium text-fg\">\n Service accounts\n </h3>\n <ul aria-labelledby={servicesId} className={cn(listClass, \"mt-1\")}>\n {services.map((member) => (\n <Row key={member.id} member={member} props={props} />\n ))}\n </ul>\n </div>\n ) : null}\n </>\n );\n}\n\nfunction MatrixVariant({ props }: { props: AccessListProps<string> }) {\n const { roles, scopes = [], onRoleChange, readOnlyReason, noAccessLabel = \"No access\" } = props;\n const { people, services } = groupAccessMembers(props.members);\n const readOnly = Boolean(readOnlyReason);\n const cellClass = \"border-b border-border px-1.5 py-1.5 align-middle\";\n // Sticky cells need an opaque fill that matches what the list sits on.\n const sticky = props.canvas === \"surface\" ? \"bg-surface\" : \"bg-bg\";\n const renderRow = (member: AccessMember<string>) => {\n const lockReason = roleLockReason(member, readOnlyReason);\n return (\n <tr key={member.id}>\n <th\n scope=\"row\"\n className={cn(cellClass, sticky, \"sticky left-0 z-10 pr-4 pl-0 text-left font-normal\")}\n >\n <div className=\"flex min-w-0 items-center gap-3\">\n <MemberAvatar member={member} />\n <MemberIdentity member={member} roles={roles} readOnly />\n </div>\n </th>\n {scopes.map((scope) => {\n const value = member.grants?.[scope.id] ?? null;\n return (\n <td key={scope.id} className={cellClass}>\n {readOnly ? (\n <span className=\"px-2\">\n <RoleSelect\n variant=\"text\"\n roles={roles}\n value={value}\n noAccessLabel={noAccessLabel}\n />\n </span>\n ) : (\n <RoleSelect\n variant=\"cell\"\n roles={roles}\n value={value}\n noAccessLabel={noAccessLabel}\n subjectName={member.name}\n aria-label={`${member.name} in ${scope.label}`}\n disabledReason={lockReason}\n align=\"start\"\n onValueChange={\n onRoleChange ? (role) => onRoleChange(member, role, scope.id) : undefined\n }\n />\n )}\n </td>\n );\n })}\n </tr>\n );\n };\n return (\n <div\n role=\"region\"\n aria-label={props.label}\n // A scrollable region must be reachable by keyboard.\n tabIndex={0}\n className=\"-mx-1 min-w-0 overflow-x-auto px-1 pb-1\"\n >\n <table\n className=\"w-full table-fixed border-separate border-spacing-0 text-sm\"\n style={{ minWidth: `${16 + scopes.length * 11}rem` }}\n >\n <colgroup>\n <col className=\"w-52 @md/access:w-64\" />\n {scopes.map((scope) => (\n <col key={scope.id} className=\"w-44\" />\n ))}\n </colgroup>\n <thead>\n <tr>\n <th\n scope=\"col\"\n className={cn(\n sticky,\n \"sticky left-0 z-10 border-b border-border pr-4 pb-2 text-left text-xs leading-4.5 font-medium text-fg-subtle\",\n )}\n >\n Person\n </th>\n {scopes.map((scope) => (\n <th\n key={scope.id}\n scope=\"col\"\n className=\"truncate border-b border-border px-3.5 pb-2 text-left text-xs leading-4.5 font-medium text-fg-subtle\"\n >\n {scope.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {people.map(renderRow)}\n {services.length > 0 ? (\n <tr>\n <th\n scope=\"colgroup\"\n colSpan={scopes.length + 1}\n className={cn(\n sticky,\n \"border-b border-border pt-4 pb-1.5 text-left text-xs leading-4.5 font-medium text-fg-subtle\",\n )}\n >\n Service accounts\n </th>\n </tr>\n ) : null}\n {services.map(renderRow)}\n </tbody>\n </table>\n </div>\n );\n}\n\n/** Who has access, with one role each. */\nexport function AccessList<R extends string>(props: AccessListProps<R>) {\n const { variant = \"inline\", loading, loadingRows = 4, error, readOnlyReason, className } = props;\n // Rows are generic over the role id; internally they only pass ids through.\n const erased = { ...props, variant } as unknown as AccessListProps<string>;\n return (\n <div\n data-variant={variant}\n aria-busy={loading || undefined}\n className={cn(\"@container/access min-w-0\", className)}\n >\n {readOnlyReason && !loading && !error ? (\n <p className=\"mb-1 flex min-w-0 px-3\">\n <InlineDisabledReason>{readOnlyReason}</InlineDisabledReason>\n </p>\n ) : null}\n {loading ? (\n <>\n <span className=\"sr-only\">Loading who has access</span>\n <LoadingRows rows={loadingRows} variant={variant} />\n </>\n ) : error ? (\n <ErrorState error={error} />\n ) : variant === \"matrix\" ? (\n <MatrixVariant props={erased} />\n ) : (\n <ListVariant props={erased} />\n )}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
package/dist/ui/api-error.d.ts
CHANGED
|
@@ -25,9 +25,12 @@ export declare function isPermissionDenied(error: unknown): boolean;
|
|
|
25
25
|
export declare function apiErrorAdvice(error: unknown): string;
|
|
26
26
|
/**
|
|
27
27
|
* The text to show for a failed action where only one line fits (a toast
|
|
28
|
-
* description, a form error). API errors become advice
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* description, a form error). API errors become advice; an error the app
|
|
29
|
+
* wrote itself keeps its own message. An expected refusal (a 4xx) is only
|
|
30
|
+
* what to do. An unexpected failure ends with "Reference: <id>." for support,
|
|
31
|
+
* which the toast and the shared error renderers turn into a discreet "Copy
|
|
32
|
+
* details" or Technical details instead of printing it. Next to Technical
|
|
33
|
+
* details (which already show the reference), use
|
|
31
34
|
* `userErrorTextWithoutReference`.
|
|
32
35
|
*/
|
|
33
36
|
export declare function userErrorText(error: unknown, fallback?: string): string;
|
package/dist/ui/api-error.js
CHANGED
|
@@ -26,16 +26,18 @@ import {
|
|
|
26
26
|
validateCadence,
|
|
27
27
|
zonedParts,
|
|
28
28
|
zonedTimeToUtc
|
|
29
|
-
} from "../chunk-
|
|
30
|
-
import "../chunk-
|
|
29
|
+
} from "../chunk-6JHU2UBS.js";
|
|
30
|
+
import "../chunk-3CPWWGNK.js";
|
|
31
31
|
import "../chunk-5OTQA7CM.js";
|
|
32
|
-
import "../chunk-
|
|
32
|
+
import "../chunk-MVW6HNPI.js";
|
|
33
|
+
import "../chunk-V4Z4B2E3.js";
|
|
34
|
+
import "../chunk-FYWT2O76.js";
|
|
33
35
|
import "../chunk-USG4XNMA.js";
|
|
34
36
|
import "../chunk-EDYVC3U3.js";
|
|
35
37
|
import "../chunk-UD6AAZSC.js";
|
|
36
38
|
import "../chunk-XEA5BCMA.js";
|
|
37
39
|
import "../chunk-TXS65BB2.js";
|
|
38
|
-
import "../chunk-
|
|
40
|
+
import "../chunk-7T2ZE3VT.js";
|
|
39
41
|
export {
|
|
40
42
|
CadencePicker,
|
|
41
43
|
CadencePreview,
|
package/dist/ui/choice-cards.js
CHANGED
|
@@ -7,12 +7,14 @@ import {
|
|
|
7
7
|
SELECTED_SURFACE_CLASS,
|
|
8
8
|
SelectedCheck,
|
|
9
9
|
selectableSurface
|
|
10
|
-
} from "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
} from "../chunk-YENLNISG.js";
|
|
11
|
+
import "../chunk-MVW6HNPI.js";
|
|
12
12
|
import "../chunk-ZMBJPN4T.js";
|
|
13
|
+
import "../chunk-V4Z4B2E3.js";
|
|
14
|
+
import "../chunk-FYWT2O76.js";
|
|
13
15
|
import "../chunk-EDYVC3U3.js";
|
|
14
16
|
import "../chunk-TXS65BB2.js";
|
|
15
|
-
import "../chunk-
|
|
17
|
+
import "../chunk-7T2ZE3VT.js";
|
|
16
18
|
export {
|
|
17
19
|
ChoiceCard,
|
|
18
20
|
ChoiceCards,
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ConfirmDialog,
|
|
4
4
|
destructiveActionFocusTarget
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-SIRLACNZ.js";
|
|
6
6
|
import "../chunk-ZQCND77P.js";
|
|
7
7
|
import "../chunk-HD5X76TP.js";
|
|
8
8
|
import "../chunk-7QQN3KNP.js";
|
|
9
9
|
import "../chunk-UD6AAZSC.js";
|
|
10
10
|
import "../chunk-XEA5BCMA.js";
|
|
11
11
|
import "../chunk-TXS65BB2.js";
|
|
12
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-7T2ZE3VT.js";
|
|
13
13
|
export {
|
|
14
14
|
ConfirmDialog,
|
|
15
15
|
destructiveActionFocusTarget
|
package/dist/ui/copy-field.js
CHANGED
|
@@ -4,14 +4,16 @@ import {
|
|
|
4
4
|
copyText,
|
|
5
5
|
truncateMiddle,
|
|
6
6
|
useCopyToClipboard
|
|
7
|
-
} from "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
} from "../chunk-2YUOVM3G.js";
|
|
8
|
+
import "../chunk-MVW6HNPI.js";
|
|
9
|
+
import "../chunk-V4Z4B2E3.js";
|
|
10
|
+
import "../chunk-FYWT2O76.js";
|
|
9
11
|
import "../chunk-7QQN3KNP.js";
|
|
10
12
|
import "../chunk-EDYVC3U3.js";
|
|
11
13
|
import "../chunk-UD6AAZSC.js";
|
|
12
14
|
import "../chunk-XEA5BCMA.js";
|
|
13
15
|
import "../chunk-TXS65BB2.js";
|
|
14
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-7T2ZE3VT.js";
|
|
15
17
|
export {
|
|
16
18
|
CopyField,
|
|
17
19
|
copyText,
|
package/dist/ui/detail-page.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import {
|
|
10
10
|
BackLink,
|
|
11
11
|
DetailPage
|
|
12
|
-
} from "../chunk-
|
|
12
|
+
} from "../chunk-6PZ7OBYU.js";
|
|
13
13
|
import "../chunk-ZBIXBQNI.js";
|
|
14
14
|
import "../chunk-K4DHWGCT.js";
|
|
15
15
|
import "../chunk-HJO32O7Z.js";
|
|
@@ -21,7 +21,7 @@ import "../chunk-7QQN3KNP.js";
|
|
|
21
21
|
import "../chunk-UD6AAZSC.js";
|
|
22
22
|
import "../chunk-XEA5BCMA.js";
|
|
23
23
|
import "../chunk-TXS65BB2.js";
|
|
24
|
-
import "../chunk-
|
|
24
|
+
import "../chunk-7T2ZE3VT.js";
|
|
25
25
|
export {
|
|
26
26
|
BackLink,
|
|
27
27
|
DetailAside,
|
package/dist/ui/detail-sheet.js
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
DetailSheetTrigger,
|
|
17
17
|
DetailSkeleton,
|
|
18
18
|
useDetailPresentation
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-6PZ7OBYU.js";
|
|
20
20
|
import "../chunk-ZBIXBQNI.js";
|
|
21
21
|
import "../chunk-K4DHWGCT.js";
|
|
22
22
|
import "../chunk-HJO32O7Z.js";
|
|
@@ -28,7 +28,7 @@ import "../chunk-7QQN3KNP.js";
|
|
|
28
28
|
import "../chunk-UD6AAZSC.js";
|
|
29
29
|
import "../chunk-XEA5BCMA.js";
|
|
30
30
|
import "../chunk-TXS65BB2.js";
|
|
31
|
-
import "../chunk-
|
|
31
|
+
import "../chunk-7T2ZE3VT.js";
|
|
32
32
|
export {
|
|
33
33
|
BackLink,
|
|
34
34
|
DetailBody,
|
package/dist/ui/diff-view.js
CHANGED
|
@@ -6,11 +6,12 @@ import {
|
|
|
6
6
|
diffStats,
|
|
7
7
|
diffWords,
|
|
8
8
|
failedLoadParts
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-K56XV3C3.js";
|
|
10
|
+
import "../chunk-IKXNLWAL.js";
|
|
11
|
+
import "../chunk-O4OOG3D6.js";
|
|
12
12
|
import "../chunk-HJO32O7Z.js";
|
|
13
13
|
import "../chunk-ZMBJPN4T.js";
|
|
14
|
+
import "../chunk-FYWT2O76.js";
|
|
14
15
|
import "../chunk-7QQN3KNP.js";
|
|
15
16
|
import "../chunk-TXS65BB2.js";
|
|
16
17
|
export {
|
package/dist/ui/disclosure.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
Disclosure
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-I4MRDSUF.js";
|
|
5
5
|
import "../chunk-NKFTYEON.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-6PZ7OBYU.js";
|
|
7
7
|
import "../chunk-ZBIXBQNI.js";
|
|
8
8
|
import "../chunk-K4DHWGCT.js";
|
|
9
9
|
import "../chunk-HJO32O7Z.js";
|
|
@@ -15,7 +15,7 @@ import "../chunk-7QQN3KNP.js";
|
|
|
15
15
|
import "../chunk-UD6AAZSC.js";
|
|
16
16
|
import "../chunk-XEA5BCMA.js";
|
|
17
17
|
import "../chunk-TXS65BB2.js";
|
|
18
|
-
import "../chunk-
|
|
18
|
+
import "../chunk-7T2ZE3VT.js";
|
|
19
19
|
export {
|
|
20
20
|
Disclosure
|
|
21
21
|
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
EmailChipsInput
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-O732GAFC.js";
|
|
5
|
+
import "../chunk-MVW6HNPI.js";
|
|
6
|
+
import "../chunk-V4Z4B2E3.js";
|
|
7
|
+
import "../chunk-FYWT2O76.js";
|
|
6
8
|
import "../chunk-EDYVC3U3.js";
|
|
7
9
|
import "../chunk-TXS65BB2.js";
|
|
8
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-7T2ZE3VT.js";
|
|
9
11
|
export {
|
|
10
12
|
EmailChipsInput
|
|
11
13
|
};
|
package/dist/ui/error-message.js
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ErrorTextParts {
|
|
2
|
+
/** The text without an "API 409:" prefix or the reference. */
|
|
3
|
+
text: string;
|
|
4
|
+
/** The request reference, for an unexpected failure only. */
|
|
5
|
+
reference: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
/** True for a 4xx: the request was refused for a reason the person can act on. */
|
|
8
|
+
export declare function isExpectedApiStatus(status: number | undefined): boolean;
|
|
9
|
+
/** The status in a raw "API 409: ..." message, if it has one. */
|
|
10
|
+
export declare function apiStatusInText(text: string): number | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Splits text meant for a person into what to show and the reference to offer
|
|
13
|
+
* discreetly. A raw "API 4xx: ..." message loses its prefix and its reference.
|
|
14
|
+
*/
|
|
15
|
+
export declare function splitErrorText(text: string): ErrorTextParts;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* One line of error text from `userErrorText`. An unexpected failure's
|
|
4
|
+
* "Reference: <id>." becomes a small "Copy details" instead of printed text,
|
|
5
|
+
* and a raw "API 409:" prefix never shows. Anything that is not a string
|
|
6
|
+
* renders as is.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ErrorText({ children }: {
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/ui/field.js
CHANGED
|
@@ -8,10 +8,12 @@ import {
|
|
|
8
8
|
TextInput,
|
|
9
9
|
useField,
|
|
10
10
|
useFieldControlProps
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-MVW6HNPI.js";
|
|
12
|
+
import "../chunk-V4Z4B2E3.js";
|
|
13
|
+
import "../chunk-FYWT2O76.js";
|
|
12
14
|
import "../chunk-EDYVC3U3.js";
|
|
13
15
|
import "../chunk-TXS65BB2.js";
|
|
14
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-7T2ZE3VT.js";
|
|
15
17
|
export {
|
|
16
18
|
Checkbox,
|
|
17
19
|
CheckboxField,
|
|
@@ -3,19 +3,21 @@ import {
|
|
|
3
3
|
FLUSH_DETAIL_PAGE_CLASS,
|
|
4
4
|
FLUSH_FORM_PAGE_CLASS,
|
|
5
5
|
FlushFormPage
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-4E3ZJRTZ.js";
|
|
7
|
+
import "../chunk-ZYAZUPPV.js";
|
|
8
|
+
import "../chunk-IKXNLWAL.js";
|
|
9
|
+
import "../chunk-O4OOG3D6.js";
|
|
10
10
|
import "../chunk-HJO32O7Z.js";
|
|
11
11
|
import "../chunk-HD5X76TP.js";
|
|
12
12
|
import "../chunk-ZMBJPN4T.js";
|
|
13
|
-
import "../chunk-
|
|
13
|
+
import "../chunk-FSOQDUCG.js";
|
|
14
|
+
import "../chunk-V4Z4B2E3.js";
|
|
15
|
+
import "../chunk-FYWT2O76.js";
|
|
14
16
|
import "../chunk-7QQN3KNP.js";
|
|
15
17
|
import "../chunk-UD6AAZSC.js";
|
|
16
18
|
import "../chunk-XEA5BCMA.js";
|
|
17
19
|
import "../chunk-TXS65BB2.js";
|
|
18
|
-
import "../chunk-
|
|
20
|
+
import "../chunk-7T2ZE3VT.js";
|
|
19
21
|
export {
|
|
20
22
|
FLUSH_DETAIL_PAGE_CLASS,
|
|
21
23
|
FLUSH_FORM_PAGE_CLASS,
|
package/dist/ui/form-dialog.js
CHANGED
|
@@ -7,18 +7,20 @@ import {
|
|
|
7
7
|
FormPage,
|
|
8
8
|
firstFormField,
|
|
9
9
|
useFormOverlay
|
|
10
|
-
} from "../chunk-
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
10
|
+
} from "../chunk-ZYAZUPPV.js";
|
|
11
|
+
import "../chunk-IKXNLWAL.js";
|
|
12
|
+
import "../chunk-O4OOG3D6.js";
|
|
13
13
|
import "../chunk-HJO32O7Z.js";
|
|
14
14
|
import "../chunk-HD5X76TP.js";
|
|
15
15
|
import "../chunk-ZMBJPN4T.js";
|
|
16
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-FSOQDUCG.js";
|
|
17
|
+
import "../chunk-V4Z4B2E3.js";
|
|
18
|
+
import "../chunk-FYWT2O76.js";
|
|
17
19
|
import "../chunk-7QQN3KNP.js";
|
|
18
20
|
import "../chunk-UD6AAZSC.js";
|
|
19
21
|
import "../chunk-XEA5BCMA.js";
|
|
20
22
|
import "../chunk-TXS65BB2.js";
|
|
21
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-7T2ZE3VT.js";
|
|
22
24
|
export {
|
|
23
25
|
FormDialog,
|
|
24
26
|
FormDialogChromeProvider,
|
package/dist/ui/list-row.js
CHANGED
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
RowIndicator,
|
|
6
6
|
RowList,
|
|
7
7
|
useRowListVariant
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-54YW6SZZ.js";
|
|
9
9
|
import "../chunk-GM3LG6BG.js";
|
|
10
10
|
import "../chunk-K4DHWGCT.js";
|
|
11
11
|
import "../chunk-HJO32O7Z.js";
|
|
12
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-53AGXXZM.js";
|
|
13
13
|
import "../chunk-5OTQA7CM.js";
|
|
14
14
|
import "../chunk-ZMBJPN4T.js";
|
|
15
15
|
import "../chunk-UX3XHFRX.js";
|
|
@@ -17,7 +17,7 @@ import "../chunk-X5NTDJIO.js";
|
|
|
17
17
|
import "../chunk-UD6AAZSC.js";
|
|
18
18
|
import "../chunk-XEA5BCMA.js";
|
|
19
19
|
import "../chunk-TXS65BB2.js";
|
|
20
|
-
import "../chunk-
|
|
20
|
+
import "../chunk-7T2ZE3VT.js";
|
|
21
21
|
export {
|
|
22
22
|
ListRow,
|
|
23
23
|
ListRowSkeleton,
|
package/dist/ui/load-failure.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ErrorMessage
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-IKXNLWAL.js";
|
|
5
5
|
import {
|
|
6
6
|
apiErrorFacts
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-O4OOG3D6.js";
|
|
8
8
|
import "../chunk-ZMBJPN4T.js";
|
|
9
|
+
import "../chunk-FYWT2O76.js";
|
|
9
10
|
import {
|
|
10
11
|
Button
|
|
11
12
|
} from "../chunk-7QQN3KNP.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/load-failure.tsx"],"sourcesContent":["import { RotateCcwIcon } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { ErrorMessage } from \"./error-message\";\nimport { apiErrorFacts } from \"./api-error\";\n\n/** A page or section that could not load, with its server facts and one retry action. */\nexport function LoadFailure({\n title,\n error,\n onRetry,\n}: {\n title: string;\n error: unknown;\n onRetry: () => void;\n}) {\n const { status, reference, serverMessage } = apiErrorFacts(error);\n let message = serverMessage ?? \"\";\n if (message && !/[.!?]$/u.test(message)) message = `${message}.`;\n if (message) message = message.charAt(0).toUpperCase() + message.slice(1);\n return (\n <ErrorMessage\n variant=\"block\"\n align=\"center\"\n title={title}\n reference={reference}\n details={[\n ...(status ? [{ label: \"Status\", value: String(status) }] : []),\n { label: \"Message\", value: message || \"Something went wrong. Try again.\" },\n ]}\n action={\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onRetry}>\n <RotateCcwIcon aria-hidden=\"true\" />\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </ErrorMessage>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/ui/load-failure.tsx"],"sourcesContent":["import { RotateCcwIcon } from \"lucide-react\";\nimport { Button } from \"./button\";\nimport { ErrorMessage } from \"./error-message\";\nimport { apiErrorFacts } from \"./api-error\";\n\n/** A page or section that could not load, with its server facts and one retry action. */\nexport function LoadFailure({\n title,\n error,\n onRetry,\n}: {\n title: string;\n error: unknown;\n onRetry: () => void;\n}) {\n const { status, reference, serverMessage } = apiErrorFacts(error);\n let message = serverMessage ?? \"\";\n if (message && !/[.!?]$/u.test(message)) message = `${message}.`;\n if (message) message = message.charAt(0).toUpperCase() + message.slice(1);\n return (\n <ErrorMessage\n variant=\"block\"\n align=\"center\"\n title={title}\n reference={reference}\n details={[\n ...(status ? [{ label: \"Status\", value: String(status) }] : []),\n { label: \"Message\", value: message || \"Something went wrong. Try again.\" },\n ]}\n action={\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onRetry}>\n <RotateCcwIcon aria-hidden=\"true\" />\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </ErrorMessage>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AA8BtB,SACE,KADF;AAxBD,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,QAAQ,WAAW,cAAc,IAAI,cAAc,KAAK;AAChE,MAAI,UAAU,iBAAiB;AAC/B,MAAI,WAAW,CAAC,UAAU,KAAK,OAAO,EAAG,WAAU,GAAG,OAAO;AAC7D,MAAI,QAAS,WAAU,QAAQ,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,MAAM,CAAC;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACP,GAAI,SAAS,CAAC,EAAE,OAAO,UAAU,OAAO,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC;AAAA,QAC7D,EAAE,OAAO,WAAW,OAAO,WAAW,mCAAmC;AAAA,MAC3E;AAAA,MACA,QACE,qBAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,MAAK,MAAK,SAAS,SACzD;AAAA,4BAAC,iBAAc,eAAY,QAAO;AAAA,QAAE;AAAA,SAEtC;AAAA,MAEH;AAAA;AAAA,EAED;AAEJ;","names":[]}
|
package/dist/ui/notice.js
CHANGED
package/dist/ui/relative-time.js
CHANGED
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
timeZoneLabel,
|
|
12
12
|
toDate,
|
|
13
13
|
useMinuteNow
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-53AGXXZM.js";
|
|
15
15
|
import "../chunk-UX3XHFRX.js";
|
|
16
16
|
import "../chunk-UD6AAZSC.js";
|
|
17
17
|
import "../chunk-XEA5BCMA.js";
|
|
18
18
|
import "../chunk-TXS65BB2.js";
|
|
19
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-7T2ZE3VT.js";
|
|
20
20
|
export {
|
|
21
21
|
RelativeTime,
|
|
22
22
|
RelativeTimeDefaultsContext,
|