@agent-native/core 0.118.1 → 0.119.1
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +19 -0
- package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-plan.mdx +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/activity.ts +371 -0
- package/corpus/core/src/a2a/client.ts +3 -1
- package/corpus/core/src/a2a/index.ts +21 -0
- package/corpus/core/src/a2a/types.ts +8 -0
- package/corpus/core/src/agent/model-config.ts +19 -23
- package/corpus/core/src/agent/production-agent.ts +167 -100
- package/corpus/core/src/agent/types.ts +16 -1
- package/corpus/core/src/client/chat/tool-call-display.tsx +190 -35
- package/corpus/core/src/client/chat-model-groups.ts +67 -27
- package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
- package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
- package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
- package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
- package/corpus/core/src/client/sse-event-processor.ts +85 -1
- package/corpus/core/src/ingestion/figma-node-to-html.ts +20 -99
- package/corpus/core/src/ingestion/figma-paint-math.ts +371 -0
- package/corpus/core/src/ingestion/index.ts +20 -0
- package/corpus/core/src/localization/default-messages.ts +6 -0
- package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/corpus/core/src/scripts/call-agent.ts +49 -6
- package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/templates/assets/app/routes/library.tsx +17 -9
- package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
- package/corpus/templates/clips/server/plugins/db.ts +9 -1
- package/corpus/templates/design/AGENTS.md +18 -5
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +25 -12
- package/corpus/templates/design/actions/hydrate-figma-paste-images.ts +115 -0
- package/corpus/templates/design/actions/import-figma-clipboard.ts +83 -18
- package/corpus/templates/design/actions/import-figma-frame.ts +34 -21
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +28 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +106 -11
- package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +273 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +7 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +57 -9
- package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +10 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +8 -1
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +150 -2
- package/corpus/templates/design/app/lib/design-file-upload.ts +85 -0
- package/corpus/templates/design/app/lib/design-import.ts +19 -1
- package/corpus/templates/design/app/lib/figma-clipboard.ts +110 -10
- package/corpus/templates/design/changelog/2026-07-20-paste-figma-frames-directly-onto-the-canvas-no-token-needed.md +6 -0
- package/corpus/templates/design/changelog/2026-07-21-fig-upload-frame-url-and-rate-limit-errors.md +5 -0
- package/corpus/templates/design/changelog/2026-07-22-connecting-a-figma-token-now-actually-fills-in-a-pasted-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-figma-line-arrow-vectors-and-stroked-icons-now-render-instea.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-fill-a-no-token-figma-paste-s-images-by-dropping-the-origina.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-imported-and-pasted-figma-frames-now-render-faithfully-fixed.md +6 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +50 -0
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +90 -49
- package/corpus/templates/design/server/lib/fig-file-import.ts +19 -5
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +583 -78
- package/corpus/templates/design/server/lib/figma-clipboard-local-decode.ts +238 -0
- package/corpus/templates/design/server/lib/figma-image-hydration.ts +389 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +136 -36
- package/corpus/templates/design/server/register-secrets.ts +14 -2
- package/dist/a2a/activity.d.ts +50 -0
- package/dist/a2a/activity.d.ts.map +1 -0
- package/dist/a2a/activity.js +236 -0
- package/dist/a2a/activity.js.map +1 -0
- package/dist/a2a/client.d.ts +2 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -1
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/index.d.ts +2 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -0
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/types.d.ts +1 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +16 -16
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +19 -23
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +26 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +137 -80
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +10 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +63 -14
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +44 -21
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +1 -1
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -4
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sharing/ShareDialog.js +1 -2
- package/dist/client/sharing/ShareDialog.js.map +1 -1
- package/dist/client/sharing/useShareButtonController.d.ts +0 -1
- package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
- package/dist/client/sharing/useShareButtonController.js +0 -6
- package/dist/client/sharing/useShareButtonController.js.map +1 -1
- package/dist/client/sharing/useShareDialogController.d.ts +0 -1
- package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
- package/dist/client/sharing/useShareDialogController.js +0 -1
- package/dist/client/sharing/useShareDialogController.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +12 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +63 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/ingestion/figma-node-to-html.d.ts.map +1 -1
- package/dist/ingestion/figma-node-to-html.js +14 -88
- package/dist/ingestion/figma-node-to-html.js.map +1 -1
- package/dist/ingestion/figma-paint-math.d.ts +157 -0
- package/dist/ingestion/figma-paint-math.d.ts.map +1 -0
- package/dist/ingestion/figma-paint-math.js +274 -0
- package/dist/ingestion/figma-paint-math.js.map +1 -0
- package/dist/ingestion/index.d.ts +1 -0
- package/dist/ingestion/index.d.ts.map +1 -1
- package/dist/ingestion/index.js +1 -0
- package/dist/ingestion/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +6 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +6 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +7 -7
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
- package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
- package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +49 -6
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/secrets/routes.d.ts +3 -3
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +38 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/docs/content/a2a-protocol.mdx +15 -0
- package/docs/content/template-chat.mdx +1 -1
- package/docs/content/template-plan.mdx +3 -3
- package/package.json +1 -1
- package/src/a2a/activity.ts +371 -0
- package/src/a2a/client.ts +3 -1
- package/src/a2a/index.ts +21 -0
- package/src/a2a/types.ts +8 -0
- package/src/agent/model-config.ts +19 -23
- package/src/agent/production-agent.ts +167 -100
- package/src/agent/types.ts +16 -1
- package/src/client/chat/tool-call-display.tsx +190 -35
- package/src/client/chat-model-groups.ts +67 -27
- package/src/client/sharing/ShareButton.tsx +1 -27
- package/src/client/sharing/ShareDialog.tsx +0 -16
- package/src/client/sharing/useShareButtonController.ts +0 -7
- package/src/client/sharing/useShareDialogController.ts +0 -2
- package/src/client/sse-event-processor.ts +85 -1
- package/src/ingestion/figma-node-to-html.ts +20 -99
- package/src/ingestion/figma-paint-math.ts +371 -0
- package/src/ingestion/index.ts +20 -0
- package/src/localization/default-messages.ts +6 -0
- package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
- package/src/scripts/call-agent.ts +49 -6
- package/src/server/agent-chat-plugin.ts +50 -10
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
- package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
- package/dist/observability/hosted-model-experiment.d.ts +0 -39
- package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
- package/dist/observability/hosted-model-experiment.js +0 -90
- package/dist/observability/hosted-model-experiment.js.map +0 -1
- package/src/observability/hosted-model-experiment.ts +0 -118
|
@@ -88,7 +88,7 @@ export function ShareButton(props) {
|
|
|
88
88
|
}
|
|
89
89
|
function SharePanel(props) {
|
|
90
90
|
const { resourceTitle, controller } = props;
|
|
91
|
-
const { inviteEmail, setInviteEmail: onInviteEmailChange,
|
|
91
|
+
const { inviteEmail, setInviteEmail: onInviteEmailChange, activeShareTab, handleShareTabChange, data, policy, visibility, canManage, role, setRole, notifyPeople, setNotifyPeople, shareError, setShareError, suggestionsOpen, setSuggestionsOpen, inFlight, memberSearch, memberSuggestions, knownMembers, shares, handleVisibility, handleHideInSearch, handleAdd, handleChangeRole, handleRemove, } = controller;
|
|
92
92
|
const hasInviteEmail = inviteEmail.trim().length > 0;
|
|
93
93
|
const isLoading = data === undefined;
|
|
94
94
|
const meta = visibilityMeta(visibility, props.visibilityCopy);
|
|
@@ -99,7 +99,6 @@ function SharePanel(props) {
|
|
|
99
99
|
(Boolean(props.shareUrl) ||
|
|
100
100
|
Boolean(props.shareUrlPlaceholder) ||
|
|
101
101
|
Boolean(props.secondaryShareUrl));
|
|
102
|
-
const showDoneButton = props.showDoneButton ?? true;
|
|
103
102
|
const shareUrlPlacement = props.shareUrlPlacement ?? "bottom";
|
|
104
103
|
const extraTabs = props.shareTabs?.tabs ?? [];
|
|
105
104
|
const hasTabs = extraTabs.length > 0;
|
|
@@ -107,7 +106,7 @@ function SharePanel(props) {
|
|
|
107
106
|
const titleText = resourceTitle
|
|
108
107
|
? `Share "${resourceTitle}"`
|
|
109
108
|
: `Share ${props.resourceType}`;
|
|
110
|
-
const sharePanel = isLoading ? (_jsxs("div", { children: [!hasTabs ? (_jsx("div", { className: "mb-3 truncate text-base font-semibold", title: titleText, children: titleText })) : null, _jsx("div", { className: "mb-4 h-9 rounded-md bg-muted animate-pulse" }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: peopleAccessLabel }), _jsx("div", { className: "mb-4 h-7 rounded-md bg-muted animate-pulse" }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: generalAccessLabel }), _jsx("div", { className: "mb-4 h-9 rounded-md bg-muted animate-pulse" })
|
|
109
|
+
const sharePanel = isLoading ? (_jsxs("div", { children: [!hasTabs ? (_jsx("div", { className: "mb-3 truncate text-base font-semibold", title: titleText, children: titleText })) : null, _jsx("div", { className: "mb-4 h-9 rounded-md bg-muted animate-pulse" }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: peopleAccessLabel }), _jsx("div", { className: "mb-4 h-7 rounded-md bg-muted animate-pulse" }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: generalAccessLabel }), _jsx("div", { className: "mb-4 h-9 rounded-md bg-muted animate-pulse" })] })) : (_jsxs("div", { children: [!hasTabs ? (_jsx("div", { className: "mb-3 truncate text-base font-semibold", title: titleText, children: titleText })) : null, showShareLinks && shareUrlPlacement === "top" ? shareLinks : null, canManage ? (_jsxs("div", { className: "mb-4 space-y-2", children: [_jsxs("div", { className: "flex items-stretch gap-2", children: [_jsx(MemberAutocomplete, { value: inviteEmail, open: suggestionsOpen, onOpenChange: setSuggestionsOpen, onValueChange: (next) => {
|
|
111
110
|
onInviteEmailChange(next);
|
|
112
111
|
if (shareError)
|
|
113
112
|
setShareError(null);
|
|
@@ -118,7 +117,7 @@ function SharePanel(props) {
|
|
|
118
117
|
setShareError(null);
|
|
119
118
|
}, onSubmit: handleAdd, placeholder: policy.requireOrgMemberForUserShares
|
|
120
119
|
? "Add people from your organization"
|
|
121
|
-
: "Add people by email", suggestions: memberSuggestions, search: memberSearch }), _jsx(RoleSelect, { value: role, onChange: setRole }), _jsx("button", { type: "button", onClick: handleAdd, disabled: !hasInviteEmail, className: BUTTON_PRIMARY_SM, children: "Add" })] }), shareError ? (_jsx("div", { role: "alert", className: "rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive", children: shareError })) : null, hasInviteEmail ? (_jsxs("label", { className: "inline-flex items-center gap-2 text-xs text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: notifyPeople, onChange: (e) => setNotifyPeople(e.target.checked), className: "h-4 w-4 rounded border-input accent-primary" }), "Notify people"] })) : null] })) : null, _jsx("div", { className: "mb-2 text-sm font-semibold", children: peopleAccessLabel }), _jsxs("ul", { className: "mb-4 flex flex-col gap-1 list-none p-0 m-0", children: [data?.ownerEmail ? (_jsxs("li", { className: "flex items-center gap-3 px-1 py-1.5 text-sm", children: [_jsx(Avatar, { label: displayName(data.ownerEmail, knownMembers) }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: displayName(data.ownerEmail, knownMembers) }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Owner" })] })) : null, shares.map((s) => (_jsxs("li", { className: cn("flex items-center gap-3 px-1 py-1.5 text-sm", inFlight.has(keyOf(s)) && "opacity-60"), children: [_jsx(Avatar, { label: principalLabel(s, knownMembers), org: s.principalType === "org" }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: principalLabel(s, knownMembers) }), canManage ? (_jsx(RoleSelect, { value: s.role, onChange: (r) => handleChangeRole(s, r), disabled: inFlight.has(keyOf(s)), plain: true })) : (_jsx("span", { className: "text-xs text-muted-foreground", children: cap(s.role) })), canManage ? (_jsx("button", { type: "button", "aria-label": "Remove", onClick: () => handleRemove(s), disabled: inFlight.has(keyOf(s)), className: BUTTON_GHOST_ICON, children: _jsx(IconTrash, { size: 14 }) })) : null] }, keyOf(s)))), !shares.length && !data?.ownerEmail ? (_jsx("li", { className: "px-1 py-1.5 text-sm text-muted-foreground", children: "No one has access yet." })) : null] }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: generalAccessLabel }), _jsxs("div", { className: "mb-4 flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(meta.Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { value: visibility, onChange: handleVisibility, disabled: !canManage, visibilityCopy: props.visibilityCopy, allowPublic: policy.allowPublic }), _jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground", children: [_jsx("span", { children: meta.description }), visibility === "org" && props.hideInSearchControl ? (_jsx(AdvancedAccessPopover, { control: props.hideInSearchControl, canManage: canManage, onToggle: handleHideInSearch })) : null] })] })] }), shareError && !canManage ? (_jsx("div", { role: "alert", className: "mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive", children: shareError })) : null, props.accessNote ? (_jsx("div", { className: "mb-4 rounded-md border border-border bg-muted/35 p-3 text-xs text-muted-foreground", children: props.accessNote })) : null, showShareLinks && shareUrlPlacement === "bottom" ? shareLinks : null, props.shareFooterContent
|
|
120
|
+
: "Add people by email", suggestions: memberSuggestions, search: memberSearch }), _jsx(RoleSelect, { value: role, onChange: setRole }), _jsx("button", { type: "button", onClick: handleAdd, disabled: !hasInviteEmail, className: BUTTON_PRIMARY_SM, children: "Add" })] }), shareError ? (_jsx("div", { role: "alert", className: "rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive", children: shareError })) : null, hasInviteEmail ? (_jsxs("label", { className: "inline-flex items-center gap-2 text-xs text-muted-foreground", children: [_jsx("input", { type: "checkbox", checked: notifyPeople, onChange: (e) => setNotifyPeople(e.target.checked), className: "h-4 w-4 rounded border-input accent-primary" }), "Notify people"] })) : null] })) : null, _jsx("div", { className: "mb-2 text-sm font-semibold", children: peopleAccessLabel }), _jsxs("ul", { className: "mb-4 flex flex-col gap-1 list-none p-0 m-0", children: [data?.ownerEmail ? (_jsxs("li", { className: "flex items-center gap-3 px-1 py-1.5 text-sm", children: [_jsx(Avatar, { label: displayName(data.ownerEmail, knownMembers) }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: displayName(data.ownerEmail, knownMembers) }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Owner" })] })) : null, shares.map((s) => (_jsxs("li", { className: cn("flex items-center gap-3 px-1 py-1.5 text-sm", inFlight.has(keyOf(s)) && "opacity-60"), children: [_jsx(Avatar, { label: principalLabel(s, knownMembers), org: s.principalType === "org" }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: principalLabel(s, knownMembers) }), canManage ? (_jsx(RoleSelect, { value: s.role, onChange: (r) => handleChangeRole(s, r), disabled: inFlight.has(keyOf(s)), plain: true })) : (_jsx("span", { className: "text-xs text-muted-foreground", children: cap(s.role) })), canManage ? (_jsx("button", { type: "button", "aria-label": "Remove", onClick: () => handleRemove(s), disabled: inFlight.has(keyOf(s)), className: BUTTON_GHOST_ICON, children: _jsx(IconTrash, { size: 14 }) })) : null] }, keyOf(s)))), !shares.length && !data?.ownerEmail ? (_jsx("li", { className: "px-1 py-1.5 text-sm text-muted-foreground", children: "No one has access yet." })) : null] }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: generalAccessLabel }), _jsxs("div", { className: "mb-4 flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(meta.Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { value: visibility, onChange: handleVisibility, disabled: !canManage, visibilityCopy: props.visibilityCopy, allowPublic: policy.allowPublic }), _jsxs("div", { className: "mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground", children: [_jsx("span", { children: meta.description }), visibility === "org" && props.hideInSearchControl ? (_jsx(AdvancedAccessPopover, { control: props.hideInSearchControl, canManage: canManage, onToggle: handleHideInSearch })) : null] })] })] }), shareError && !canManage ? (_jsx("div", { role: "alert", className: "mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive", children: shareError })) : null, props.accessNote ? (_jsx("div", { className: "mb-4 rounded-md border border-border bg-muted/35 p-3 text-xs text-muted-foreground", children: props.accessNote })) : null, showShareLinks && shareUrlPlacement === "bottom" ? shareLinks : null, props.shareFooterContent] }));
|
|
122
121
|
if (!hasTabs)
|
|
123
122
|
return sharePanel;
|
|
124
123
|
const tabs = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShareButton.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as Select from \"@radix-ui/react-select\";\nimport {\n IconLock,\n IconWorld,\n IconTrash,\n IconCheck,\n IconChevronDown,\n IconCopy,\n IconLoader2,\n IconSearch,\n IconSearchOff,\n IconShare3,\n IconUsersGroup,\n} from \"@tabler/icons-react\";\nimport {\n type ComponentPropsWithoutRef,\n useEffect,\n useId,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n UIEvent as ReactUIEvent,\n} from \"react\";\n\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { cn } from \"../utils.js\";\nimport {\n useShareButtonController,\n type ShareButtonController,\n type ShareButtonOrgMember,\n type ShareButtonOrgMemberSearch,\n type ShareButtonShare,\n type ShareButtonRole,\n type ShareButtonVisibility,\n} from \"./useShareButtonController.js\";\n\nexport interface ShareButtonProps {\n resourceType: string;\n resourceId: string;\n resourceTitle?: string;\n /** @deprecated No longer affects rendering — trigger always says\n * \"Share\". Kept for callsite compatibility. */\n variant?: \"compact\" | \"label\";\n /** Optional trigger style. Defaults to a text-only \"Share\" label.\n * \"label-icon\" opts into an icon plus label; \"icon\" is icon-only. */\n trigger?: \"label\" | \"icon\" | \"label-icon\";\n /** @deprecated No longer affects rendering — kept for callsite compatibility. */\n hideTriggerIcon?: boolean;\n /** Optional className applied to the trigger button. */\n triggerClassName?: string;\n /** Notified when the share popover opens or closes. Hosts that render the\n * button next to an iframe use this to disable the iframe's pointer events\n * while the popover is open, so popover hover/clicks aren't swallowed. */\n onOpenChange?: (open: boolean) => void;\n /** Open the popover on first render. Useful after an upgrade/create flow that\n * lands the user directly in the shareable resource. */\n defaultOpen?: boolean;\n /** Optional public/share URL shown as a copyable link in the popover.\n * This is treated as the primary \"Copy link\" target — same convention\n * as Google Docs' Share dialog, which copies the editor URL. */\n shareUrl?: string;\n /** Optional label for the primary copyable link section. */\n shareUrlLabel?: string;\n /** Optional helper text for the primary copyable link section. */\n shareUrlDescription?: ReactNode;\n /** Where to render share links in the popover. Defaults to the bottom,\n * matching the historical Google-Docs-style share dialog. */\n shareUrlPlacement?: \"top\" | \"bottom\";\n /** Whether to render copyable share URL fields. Defaults to true. */\n showShareLinks?: boolean;\n /** Whether to render the bottom Done button. Defaults to true. */\n showDoneButton?: boolean;\n /** Optional placeholder shown in the share-URL slot when `shareUrl` is\n * undefined. Use this to explain *why* there's no link yet (e.g. \"Publish\n * this form to get a public response link\") instead of leaving the slot\n * empty. */\n shareUrlPlaceholder?: ReactNode;\n /** Optional secondary copyable link (e.g. a presentation / read-only\n * surface for the same resource). Anyone with at least viewer access\n * can open it — access is enforced on the resource itself, not the\n * URL shape, so we never gate this behind visibility. */\n secondaryShareUrl?: string;\n /** Optional label for the secondary copyable link. */\n secondaryShareUrlLabel?: string;\n /** Optional helper text for the secondary copyable link. */\n secondaryShareUrlDescription?: ReactNode;\n /** @deprecated No longer enforced — access is checked on the resource,\n * not the URL shape, mirroring Google Slides. Kept for callsite\n * compatibility; the prop is now a no-op. */\n shareUrlRequiresPublic?: boolean;\n /** @deprecated See `shareUrlRequiresPublic`. No longer rendered. */\n shareUrlUnavailableDescription?: ReactNode;\n /** Optional template-specific copy for the visibility picker. */\n visibilityCopy?: Partial<\n Record<Visibility, { label?: string; description?: string }>\n >;\n /** Optional label for the explicit per-person access list. */\n peopleAccessLabel?: ReactNode;\n /** Optional label for the coarse visibility control. */\n generalAccessLabel?: ReactNode;\n /** Optional note rendered between general access and the copyable link. */\n accessNote?: ReactNode;\n /** Optional host-rendered footer for compact app-specific share actions. */\n shareFooterContent?: ReactNode;\n /** Optional Notion-style organization access control. When present, the\n * share panel exposes a \"Hide in search\" switch under Advanced for org\n * visibility. */\n hideInSearchControl?: {\n checked: boolean;\n pending?: boolean;\n label?: string;\n description?: ReactNode;\n onCheckedChange: (checked: boolean) => void | Promise<void>;\n };\n /** Optional extra tabs rendered beside the default sharing/access panel. */\n shareTabs?: {\n shareLabel?: ReactNode;\n defaultValue?: string;\n tabs: Array<{\n value: string;\n label: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n }>;\n onValueChange?: (value: string) => void;\n };\n /** Optional className for the popover content, useful for wider custom tabs. */\n popoverClassName?: string;\n}\n\ntype Visibility = ShareButtonVisibility;\ntype Role = ShareButtonRole;\ntype HideInSearchControl = NonNullable<ShareButtonProps[\"hideInSearchControl\"]>;\ntype OrgMember = ShareButtonOrgMember;\ntype OrgMemberSearch = ShareButtonOrgMemberSearch;\n\ntype Share = ShareButtonShare;\n\n// Match shadcn's <Button size=\"sm\" variant=\"outline\"> sizing so the trigger\n// sits flush next to other controls while staying transparent at rest.\nconst BUTTON_BASE =\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\";\nconst BUTTON_OUTLINE_SM = cn(\n BUTTON_BASE,\n \"h-9 px-3 border border-[hsl(var(--sidebar-border,var(--input)))] bg-transparent text-foreground hover:bg-[hsl(var(--sidebar-accent,var(--accent)))] hover:text-[hsl(var(--sidebar-accent-foreground,var(--accent-foreground)))]\",\n);\nconst BUTTON_PRIMARY_SM = cn(\n BUTTON_BASE,\n \"h-9 px-4 bg-primary text-primary-foreground hover:bg-primary/90\",\n);\nconst BUTTON_GHOST_ICON = cn(\n BUTTON_BASE,\n \"h-7 w-7 p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n);\nconst SHARE_POPOVER_SURFACE =\n \"border border-border bg-popover text-popover-foreground\";\nconst SHARE_NESTED_OVERLAY_ATTR = \"data-agent-native-share-overlay\";\nconst SHARE_NESTED_OVERLAY_Z = \"z-[100020]\";\nconst VIS_META: Record<\n Visibility,\n { label: string; description: string; Icon: typeof IconLock }\n> = {\n private: {\n label: \"Private\",\n description: \"Only people with access can view\",\n Icon: IconLock,\n },\n org: {\n label: \"Organization\",\n description: \"Anyone in your organization can view\",\n Icon: IconUsersGroup,\n },\n public: {\n label: \"Public\",\n description: \"Anyone with the link can view\",\n Icon: IconWorld,\n },\n};\n\nfunction visibilityMeta(\n visibility: Visibility,\n copy?: ShareButtonProps[\"visibilityCopy\"],\n): (typeof VIS_META)[Visibility] {\n const base = VIS_META[visibility];\n const override = copy?.[visibility];\n return {\n ...base,\n label: override?.label ?? base.label,\n description: override?.description ?? base.description,\n };\n}\n\nconst ROLE_OPTIONS: Array<{ value: Role; label: string; description: string }> =\n [\n { value: \"viewer\", label: \"Viewer\", description: \"Can view\" },\n { value: \"editor\", label: \"Editor\", description: \"Can edit\" },\n {\n value: \"admin\",\n label: \"Admin\",\n description: \"Can edit and manage access\",\n },\n ];\n\ntype SharePopoverInteractOutsideEvent = Parameters<\n NonNullable<\n ComponentPropsWithoutRef<typeof PopoverContent>[\"onInteractOutside\"]\n >\n>[0];\n\nfunction isShareNestedOverlayTarget(target: EventTarget | null): boolean {\n return (\n target instanceof Element &&\n target.closest(`[${SHARE_NESTED_OVERLAY_ATTR}]`) !== null\n );\n}\n\nfunction handleSharePopoverInteractOutside(\n event: SharePopoverInteractOutsideEvent,\n) {\n const originalTarget = event.detail.originalEvent.target;\n if (isShareNestedOverlayTarget(originalTarget)) {\n event.preventDefault();\n }\n}\n\n/**\n * Framework share control. Renders a shadcn-outline-styled trigger that\n * opens a Google-Docs-style popover anchored beneath it. Uses Tailwind\n * + CSS variables so the same component renders natively in light and\n * dark mode in any shadcn template.\n */\nexport function ShareButton(props: ShareButtonProps) {\n const controller = useShareButtonController({\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n defaultOpen: props.defaultOpen,\n onOpenChange: props.onOpenChange,\n shareTabs: props.shareTabs,\n shareUrl: props.shareUrl,\n hideInSearchControl: props.hideInSearchControl,\n });\n const triggerVisibility = controller.triggerVisibility;\n const triggerMeta = triggerVisibility\n ? visibilityMeta(triggerVisibility, props.visibilityCopy)\n : null;\n const TriggerIcon = triggerMeta?.Icon ?? IconShare3;\n const iconOnly = props.trigger === \"icon\";\n const showTriggerIcon = iconOnly || props.trigger === \"label-icon\";\n const triggerLabel =\n iconOnly && triggerMeta ? `Share (${triggerMeta.label})` : \"Share\";\n\n return (\n <Popover open={controller.open} onOpenChange={controller.handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM,\n props.triggerClassName,\n )}\n aria-label={triggerLabel}\n title={triggerLabel}\n >\n {showTriggerIcon && <TriggerIcon size={16} strokeWidth={1.75} />}\n {!iconOnly && <span>Share</span>}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n sideOffset={6}\n data-agent-native-share-overlay=\"\"\n className={cn(\n \"z-[2000] w-[min(460px,92vw)] rounded-lg p-4 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n props.popoverClassName,\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onInteractOutside={handleSharePopoverInteractOutside}\n >\n <SharePanel {...props} controller={controller} />\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction SharePanel(\n props: ShareButtonProps & {\n controller: ShareButtonController;\n },\n) {\n const { resourceTitle, controller } = props;\n const {\n inviteEmail,\n setInviteEmail: onInviteEmailChange,\n handleOpenChange,\n activeShareTab,\n handleShareTabChange,\n data,\n policy,\n visibility,\n canManage,\n role,\n setRole,\n notifyPeople,\n setNotifyPeople,\n shareError,\n setShareError,\n suggestionsOpen,\n setSuggestionsOpen,\n inFlight,\n memberSearch,\n memberSuggestions,\n knownMembers,\n shares,\n handleVisibility,\n handleHideInSearch,\n handleAdd,\n handleChangeRole,\n handleRemove,\n handleDone,\n } = controller;\n const hasInviteEmail = inviteEmail.trim().length > 0;\n\n const isLoading = data === undefined;\n const meta = visibilityMeta(visibility, props.visibilityCopy);\n const peopleAccessLabel = props.peopleAccessLabel ?? \"People with access\";\n const generalAccessLabel = props.generalAccessLabel ?? \"General access\";\n const shareLinks = (\n <>\n {props.shareUrl ? (\n <CopyLinkField\n value={props.shareUrl}\n label={props.shareUrlLabel}\n description={props.shareUrlDescription}\n />\n ) : props.shareUrlPlaceholder ? (\n <div className=\"mb-4 rounded-md border border-dashed border-border bg-muted/20 px-3 py-2.5 text-xs text-muted-foreground\">\n {props.shareUrlLabel ? (\n <div className=\"mb-0.5 font-medium text-foreground\">\n {props.shareUrlLabel}\n </div>\n ) : null}\n {props.shareUrlPlaceholder}\n </div>\n ) : null}\n\n {props.secondaryShareUrl ? (\n <CopyLinkField\n value={props.secondaryShareUrl}\n label={props.secondaryShareUrlLabel}\n description={props.secondaryShareUrlDescription}\n />\n ) : null}\n </>\n );\n const showShareLinks =\n (props.showShareLinks ?? true) &&\n (Boolean(props.shareUrl) ||\n Boolean(props.shareUrlPlaceholder) ||\n Boolean(props.secondaryShareUrl));\n const showDoneButton = props.showDoneButton ?? true;\n const shareUrlPlacement = props.shareUrlPlacement ?? \"bottom\";\n const extraTabs = props.shareTabs?.tabs ?? [];\n const hasTabs = extraTabs.length > 0;\n const shareTabLabel = props.shareTabs?.shareLabel ?? \"Share link\";\n\n const titleText = resourceTitle\n ? `Share \"${resourceTitle}\"`\n : `Share ${props.resourceType}`;\n\n const sharePanel = isLoading ? (\n <div>\n {!hasTabs ? (\n <div\n className=\"mb-3 truncate text-base font-semibold\"\n title={titleText}\n >\n {titleText}\n </div>\n ) : null}\n <div className=\"mb-4 h-9 rounded-md bg-muted animate-pulse\" />\n <div className=\"mb-2 text-sm font-semibold\">{peopleAccessLabel}</div>\n <div className=\"mb-4 h-7 rounded-md bg-muted animate-pulse\" />\n <div className=\"mb-2 text-sm font-semibold\">{generalAccessLabel}</div>\n <div className=\"mb-4 h-9 rounded-md bg-muted animate-pulse\" />\n {showDoneButton ? (\n <div className=\"mt-2 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => handleOpenChange(false)}\n className={BUTTON_PRIMARY_SM}\n >\n Done\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div>\n {!hasTabs ? (\n <div\n className=\"mb-3 truncate text-base font-semibold\"\n title={titleText}\n >\n {titleText}\n </div>\n ) : null}\n\n {showShareLinks && shareUrlPlacement === \"top\" ? shareLinks : null}\n\n {canManage ? (\n <div className=\"mb-4 space-y-2\">\n <div className=\"flex items-stretch gap-2\">\n <MemberAutocomplete\n value={inviteEmail}\n open={suggestionsOpen}\n onOpenChange={setSuggestionsOpen}\n onValueChange={(next) => {\n onInviteEmailChange(next);\n if (shareError) setShareError(null);\n }}\n onSelectMember={(member) => {\n onInviteEmailChange(member.email);\n setSuggestionsOpen(false);\n if (shareError) setShareError(null);\n }}\n onSubmit={handleAdd}\n placeholder={\n policy.requireOrgMemberForUserShares\n ? \"Add people from your organization\"\n : \"Add people by email\"\n }\n suggestions={memberSuggestions}\n search={memberSearch}\n />\n <RoleSelect value={role} onChange={setRole} />\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!hasInviteEmail}\n className={BUTTON_PRIMARY_SM}\n >\n Add\n </button>\n </div>\n {shareError ? (\n <div\n role=\"alert\"\n className=\"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\"\n >\n {shareError}\n </div>\n ) : null}\n {hasInviteEmail ? (\n <label className=\"inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={notifyPeople}\n onChange={(e) => setNotifyPeople(e.target.checked)}\n className=\"h-4 w-4 rounded border-input accent-primary\"\n />\n Notify people\n </label>\n ) : null}\n </div>\n ) : null}\n\n <div className=\"mb-2 text-sm font-semibold\">{peopleAccessLabel}</div>\n <ul className=\"mb-4 flex flex-col gap-1 list-none p-0 m-0\">\n {data?.ownerEmail ? (\n <li className=\"flex items-center gap-3 px-1 py-1.5 text-sm\">\n <Avatar label={displayName(data.ownerEmail, knownMembers)} />\n <span className=\"flex-1 min-w-0 truncate\">\n {displayName(data.ownerEmail, knownMembers)}\n </span>\n <span className=\"text-xs text-muted-foreground\">Owner</span>\n </li>\n ) : null}\n {shares.map((s) => (\n <li\n key={keyOf(s)}\n className={cn(\n \"flex items-center gap-3 px-1 py-1.5 text-sm\",\n inFlight.has(keyOf(s)) && \"opacity-60\",\n )}\n >\n <Avatar\n label={principalLabel(s, knownMembers)}\n org={s.principalType === \"org\"}\n />\n <span className=\"flex-1 min-w-0 truncate\">\n {principalLabel(s, knownMembers)}\n </span>\n {canManage ? (\n <RoleSelect\n value={s.role}\n onChange={(r) => handleChangeRole(s, r)}\n disabled={inFlight.has(keyOf(s))}\n plain\n />\n ) : (\n <span className=\"text-xs text-muted-foreground\">\n {cap(s.role)}\n </span>\n )}\n {canManage ? (\n <button\n type=\"button\"\n aria-label=\"Remove\"\n onClick={() => handleRemove(s)}\n disabled={inFlight.has(keyOf(s))}\n className={BUTTON_GHOST_ICON}\n >\n <IconTrash size={14} />\n </button>\n ) : null}\n </li>\n ))}\n {!shares.length && !data?.ownerEmail ? (\n <li className=\"px-1 py-1.5 text-sm text-muted-foreground\">\n No one has access yet.\n </li>\n ) : null}\n </ul>\n\n <div className=\"mb-2 text-sm font-semibold\">{generalAccessLabel}</div>\n <div className=\"mb-4 flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <meta.Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect\n value={visibility}\n onChange={handleVisibility}\n disabled={!canManage}\n visibilityCopy={props.visibilityCopy}\n allowPublic={policy.allowPublic}\n />\n <div className=\"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\">\n <span>{meta.description}</span>\n {visibility === \"org\" && props.hideInSearchControl ? (\n <AdvancedAccessPopover\n control={props.hideInSearchControl}\n canManage={canManage}\n onToggle={handleHideInSearch}\n />\n ) : null}\n </div>\n </div>\n </div>\n\n {shareError && !canManage ? (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\"\n >\n {shareError}\n </div>\n ) : null}\n\n {props.accessNote ? (\n <div className=\"mb-4 rounded-md border border-border bg-muted/35 p-3 text-xs text-muted-foreground\">\n {props.accessNote}\n </div>\n ) : null}\n\n {showShareLinks && shareUrlPlacement === \"bottom\" ? shareLinks : null}\n\n {props.shareFooterContent}\n\n {showDoneButton ? (\n <div className=\"mt-2 flex justify-end\">\n <button\n type=\"button\"\n onClick={handleDone}\n className={BUTTON_PRIMARY_SM}\n >\n Done\n </button>\n </div>\n ) : null}\n </div>\n );\n\n if (!hasTabs) return sharePanel;\n\n const tabs = [\n {\n value: \"share\",\n label: shareTabLabel,\n content: sharePanel,\n disabled: false,\n },\n ...extraTabs,\n ];\n const activeTab = tabs.some((tab) => tab.value === activeShareTab)\n ? activeShareTab\n : \"share\";\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div\n role=\"tablist\"\n aria-label=\"Share options\"\n className=\"flex gap-1 rounded-xl bg-muted/70 p-1\"\n >\n {tabs.map((tab) => {\n const active = tab.value === activeTab;\n return (\n <button\n key={tab.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={tab.disabled}\n onClick={() => handleShareTabChange(tab.value)}\n className={cn(\n \"h-11 min-w-0 flex-1 rounded-lg px-3 text-sm font-medium text-muted-foreground transition-colors hover:bg-background/70 hover:text-foreground disabled:pointer-events-none disabled:opacity-50\",\n active &&\n \"bg-background text-foreground shadow-sm ring-2 ring-primary\",\n )}\n >\n <span className=\"block truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n <div role=\"tabpanel\">\n {tabs.find((tab) => tab.value === activeTab)?.content}\n </div>\n </div>\n );\n}\n\nfunction AdvancedAccessPopover({\n control,\n canManage,\n onToggle,\n}: {\n control: HideInSearchControl;\n canManage: boolean;\n onToggle: () => void;\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={!canManage}\n className=\"inline-flex items-center gap-1 rounded-sm px-1 py-0.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n >\n Advanced\n <IconChevronDown size={12} strokeWidth={1.8} />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n data-agent-native-share-overlay=\"\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n className={cn(\n SHARE_NESTED_OVERLAY_Z,\n \"w-72 p-3 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n )}\n >\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-sm font-medium text-foreground\">\n Advanced access\n </div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n Control how organization access appears in search.\n </div>\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={control.checked}\n disabled={!canManage || control.pending}\n onClick={onToggle}\n className={cn(\n \"flex w-full items-start gap-3 rounded-md border border-border/70 bg-card px-3 py-2.5 text-start transition-colors hover:bg-accent/45 disabled:cursor-not-allowed disabled:opacity-60\",\n control.checked && \"border-border bg-accent/35 text-foreground\",\n )}\n >\n <span\n aria-hidden\n className={cn(\n \"relative mt-0.5 inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-border bg-muted-foreground/25 transition-colors\",\n control.checked && \"border-primary/70 bg-primary\",\n )}\n >\n <span\n className={cn(\n \"ml-0.5 size-4 rounded-full bg-popover shadow-sm transition-transform\",\n control.checked && \"translate-x-4\",\n )}\n />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center gap-1.5 text-sm font-medium text-foreground\">\n <IconSearchOff size={14} strokeWidth={1.8} />\n {control.label ?? \"Hide in search\"}\n </span>\n <span className=\"mt-0.5 block text-xs leading-5 text-muted-foreground\">\n {control.description ??\n \"People with the link can still open this.\"}\n </span>\n </span>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface MemberAutocompleteProps {\n value: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onValueChange: (value: string) => void;\n onSelectMember: (member: OrgMember) => void;\n onSubmit: () => void;\n placeholder: string;\n suggestions: OrgMember[];\n search: OrgMemberSearch;\n}\n\nfunction MemberAutocomplete({\n value,\n open,\n onOpenChange,\n onValueChange,\n onSelectMember,\n onSubmit,\n placeholder,\n suggestions,\n search,\n}: MemberAutocompleteProps) {\n const rawListboxId = useId();\n const listboxId = rawListboxId.replace(/:/g, \"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const activeMember =\n activeIndex >= 0 && activeIndex < suggestions.length\n ? suggestions[activeIndex]\n : null;\n\n useEffect(() => {\n setActiveIndex(-1);\n }, [value]);\n\n useEffect(() => {\n if (activeIndex >= suggestions.length) {\n setActiveIndex(suggestions.length > 0 ? suggestions.length - 1 : -1);\n }\n }, [activeIndex, suggestions.length]);\n\n useEffect(() => {\n if (activeIndex < 0) return;\n document\n .getElementById(optionId(listboxId, activeIndex))\n ?.scrollIntoView({ block: \"nearest\" });\n }, [activeIndex, listboxId]);\n\n const chooseMember = (member: OrgMember) => {\n onSelectMember(member);\n onOpenChange(false);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n onOpenChange(true);\n if (suggestions.length === 0) return;\n setActiveIndex((prev) => {\n if (prev >= suggestions.length - 1) {\n if (search.hasMore && !search.isLoadingMore) search.loadMore();\n return suggestions.length - 1;\n }\n return prev + 1;\n });\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n onOpenChange(true);\n if (suggestions.length === 0) return;\n setActiveIndex((prev) => (prev <= 0 ? suggestions.length - 1 : prev - 1));\n return;\n }\n\n if (event.key === \"Enter\") {\n if (open && activeMember) {\n event.preventDefault();\n chooseMember(activeMember);\n return;\n }\n if (value.trim()) {\n event.preventDefault();\n onSubmit();\n }\n return;\n }\n\n if (event.key === \"Escape\" && open) {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n setActiveIndex(-1);\n }\n };\n\n const handleScroll = (event: ReactUIEvent<HTMLDivElement>) => {\n const target = event.currentTarget;\n if (\n search.hasMore &&\n !search.isLoadingMore &&\n target.scrollTop + target.clientHeight >= target.scrollHeight - 24\n ) {\n search.loadMore();\n }\n };\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverAnchor asChild>\n <div className=\"relative flex-1 min-w-0\">\n <IconSearch\n aria-hidden\n size={15}\n strokeWidth={1.8}\n className=\"pointer-events-none absolute start-2.5 top-1/2 -translate-y-1/2 text-muted-foreground\"\n />\n <input\n ref={inputRef}\n type=\"email\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={\n activeIndex >= 0 ? optionId(listboxId, activeIndex) : undefined\n }\n placeholder={placeholder}\n value={value}\n onChange={(event) => {\n onValueChange(event.target.value);\n onOpenChange(true);\n }}\n onFocus={() => onOpenChange(true)}\n onBlur={() => {\n setTimeout(() => {\n if (document.activeElement !== inputRef.current) {\n onOpenChange(false);\n }\n }, 0);\n }}\n onKeyDown={handleKeyDown}\n autoComplete=\"off\"\n className=\"h-9 w-full min-w-0 rounded-md border border-input bg-card ps-8 pe-8 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\"\n />\n {search.isLoading ? (\n <IconLoader2\n aria-hidden\n size={15}\n strokeWidth={1.8}\n className=\"pointer-events-none absolute end-2.5 top-1/2 -translate-y-1/2 animate-spin text-muted-foreground\"\n />\n ) : null}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n data-agent-native-share-overlay=\"\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n className={cn(\n SHARE_NESTED_OVERLAY_Z,\n \"w-[var(--radix-popper-anchor-width)] min-w-[18rem] rounded-md p-1 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n )}\n >\n <div\n id={listboxId}\n role=\"listbox\"\n className=\"max-h-56 overflow-y-auto overflow-x-hidden\"\n onScroll={handleScroll}\n >\n {suggestions.map((member, index) => {\n const active = index === activeIndex;\n return (\n <div\n key={member.email}\n id={optionId(listboxId, index)}\n role=\"option\"\n aria-selected={active}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => chooseMember(member)}\n className={cn(\n \"flex cursor-pointer select-none flex-col rounded-sm px-3 py-2 text-sm outline-none\",\n active\n ? \"bg-accent text-accent-foreground\"\n : \"text-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n >\n <span className=\"truncate font-medium\">\n {member.name?.trim() || member.email}\n </span>\n {member.name?.trim() ? (\n <span className=\"truncate text-xs text-muted-foreground\">\n {member.email}\n </span>\n ) : null}\n </div>\n );\n })}\n\n {search.isLoading && suggestions.length === 0 ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n Searching...\n </div>\n ) : null}\n\n {search.error ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n Could not load people.\n </div>\n ) : null}\n\n {!search.isLoading && !search.error && suggestions.length === 0 ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n {value.trim() ? \"No matches.\" : \"No people found.\"}\n </div>\n ) : null}\n\n {search.isLoadingMore ? (\n <div className=\"flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground\">\n <IconLoader2\n aria-hidden\n size={14}\n strokeWidth={1.8}\n className=\"animate-spin\"\n />\n Loading...\n </div>\n ) : null}\n\n {search.hasMore && !search.isLoadingMore ? (\n <button\n type=\"button\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={search.loadMore}\n className=\"mt-1 flex w-full items-center justify-center rounded-sm px-3 py-2 text-sm font-medium text-muted-foreground hover:bg-accent hover:text-accent-foreground\"\n >\n Load more\n </button>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction optionId(baseId: string, index: number): string {\n return `${baseId}-option-${index}`;\n}\n\nfunction CopyLinkField({\n value,\n label = \"Share link\",\n description,\n}: {\n value: string;\n label?: string;\n description?: ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n return () => {\n if (resetRef.current) clearTimeout(resetRef.current);\n };\n }, []);\n\n const handleCopy = async () => {\n if (await writeClipboardText(value)) {\n setCopied(true);\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1400);\n } else {\n setCopied(false);\n }\n };\n\n return (\n <div className=\"mb-4\">\n <div className=\"mb-2 text-sm font-semibold\">{label}</div>\n {description ? (\n <div className=\"mb-2 text-xs text-muted-foreground\">{description}</div>\n ) : null}\n <div className=\"flex min-w-0 items-center gap-2\">\n <input\n readOnly\n value={value}\n className=\"h-9 min-w-0 flex-1 rounded-md border border-input bg-card px-3 text-sm text-muted-foreground outline-none\"\n onFocus={(event) => event.currentTarget.select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex h-9 shrink-0 items-center gap-2 rounded-md border border-input bg-card px-3 text-sm font-medium text-foreground hover:bg-accent\"\n >\n {copied ? <IconCheck size={15} /> : <IconCopy size={15} />}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Radix Select wrappers styled like shadcn Select (no native <select> anywhere)\n// ---------------------------------------------------------------------------\n\nconst selectContentClass = `${SHARE_NESTED_OVERLAY_Z} min-w-[12rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`;\nconst selectItemClass =\n \"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-sm py-2 ps-8 pe-3 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\ninterface ShadSelectItemProps {\n value: string;\n label: string;\n description?: string;\n}\n\nfunction SelectItems({ items }: { items: ShadSelectItemProps[] }) {\n return (\n <>\n {items.map((it) => (\n <Select.Item\n key={it.value}\n value={it.value}\n className={selectItemClass}\n >\n <span className=\"absolute start-2 top-2 flex h-4 w-4 items-center justify-center\">\n <Select.ItemIndicator>\n <IconCheck size={14} />\n </Select.ItemIndicator>\n </span>\n <span className=\"flex flex-col\">\n <Select.ItemText>{it.label}</Select.ItemText>\n {it.description ? (\n <span className=\"text-xs text-muted-foreground\">\n {it.description}\n </span>\n ) : null}\n </span>\n </Select.Item>\n ))}\n </>\n );\n}\n\nfunction RoleSelect(props: {\n value: Role;\n onChange: (v: Role) => void;\n disabled?: boolean;\n /** When true, render as inline text + chevron (no border / bg) — matches\n * the per-person role picker in Google Docs. */\n plain?: boolean;\n}) {\n const current =\n ROLE_OPTIONS.find((o) => o.value === props.value) ?? ROLE_OPTIONS[0];\n return (\n <Select.Root\n value={props.value}\n onValueChange={(v) => props.onChange(v as Role)}\n disabled={props.disabled}\n >\n <Select.Trigger\n className={\n props.plain\n ? cn(\n BUTTON_BASE,\n \"h-7 px-2 bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n )\n : cn(\n BUTTON_BASE,\n \"h-9 px-3 border border-input bg-card hover:bg-accent hover:text-accent-foreground\",\n )\n }\n aria-label=\"Role\"\n >\n <Select.Value>{current.label}</Select.Value>\n <Select.Icon>\n <IconChevronDown size={14} />\n </Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Content\n data-agent-native-share-overlay=\"\"\n className={selectContentClass}\n position=\"popper\"\n sideOffset={4}\n >\n <Select.Viewport>\n <SelectItems items={ROLE_OPTIONS} />\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction VisibilitySelect(props: {\n value: Visibility;\n onChange: (v: Visibility) => void;\n disabled?: boolean;\n visibilityCopy?: ShareButtonProps[\"visibilityCopy\"];\n /** When false, the \"Private\" option is omitted unless currently selected. */\n allowPrivate?: boolean;\n /** When false, the \"Public\" option is omitted. Default: true. */\n allowPublic?: boolean;\n}) {\n const allowPrivate = props.allowPrivate !== false;\n const allowPublic = props.allowPublic !== false;\n const current = visibilityMeta(props.value, props.visibilityCopy);\n const options = (Object.keys(VIS_META) as Visibility[]).filter((k) => {\n if (k === props.value) return true;\n if (k === \"private\" && !allowPrivate) return false;\n if (k === \"public\" && !allowPublic) return false;\n return true;\n });\n return (\n <Select.Root\n value={props.value}\n onValueChange={(v) => props.onChange(v as Visibility)}\n disabled={props.disabled}\n >\n <Select.Trigger\n className={cn(\n BUTTON_BASE,\n \"h-7 px-1 -ms-1 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n aria-label=\"General access\"\n >\n <Select.Value>{current.label}</Select.Value>\n <Select.Icon>\n <IconChevronDown size={14} />\n </Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Content\n data-agent-native-share-overlay=\"\"\n className={selectContentClass}\n position=\"popper\"\n sideOffset={4}\n >\n <Select.Viewport>\n <SelectItems\n items={options.map((k) => ({\n value: k,\n label: visibilityMeta(k, props.visibilityCopy).label,\n description: visibilityMeta(k, props.visibilityCopy)\n .description,\n }))}\n />\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction Avatar({ label, org }: { label: string; org?: boolean }) {\n return (\n <span\n aria-hidden\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground\"\n >\n {org ? <IconUsersGroup size={14} strokeWidth={1.75} /> : initials(label)}\n </span>\n );\n}\n\nfunction keyOf(s: Share): string {\n return `${s.principalType}:${s.principalId}`;\n}\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nfunction initials(s: string): string {\n const name = s.split(\"@\")[0] ?? s;\n return (name[0] ?? \"?\").toUpperCase();\n}\n\nfunction principalLabel(share: Share, members: OrgMember[]): string {\n const serverLabel = share.displayName?.trim();\n if (serverLabel) return serverLabel;\n if (share.principalType === \"org\") return \"Organization\";\n return displayName(share.principalId, members);\n}\n\nfunction displayName(emailOrId: string, members: OrgMember[]): string {\n const normalized = emailOrId.trim().toLowerCase();\n const match = members.find((m) => m.email.toLowerCase() === normalized);\n if (match?.name && match.name.trim()) return match.name;\n return normalized.includes(\"@\") ? emailOrId : \"Unknown person\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ShareButton.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as Select from \"@radix-ui/react-select\";\nimport {\n IconLock,\n IconWorld,\n IconTrash,\n IconCheck,\n IconChevronDown,\n IconCopy,\n IconLoader2,\n IconSearch,\n IconSearchOff,\n IconShare3,\n IconUsersGroup,\n} from \"@tabler/icons-react\";\nimport {\n type ComponentPropsWithoutRef,\n useEffect,\n useId,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n UIEvent as ReactUIEvent,\n} from \"react\";\n\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { cn } from \"../utils.js\";\nimport {\n useShareButtonController,\n type ShareButtonController,\n type ShareButtonOrgMember,\n type ShareButtonOrgMemberSearch,\n type ShareButtonShare,\n type ShareButtonRole,\n type ShareButtonVisibility,\n} from \"./useShareButtonController.js\";\n\nexport interface ShareButtonProps {\n resourceType: string;\n resourceId: string;\n resourceTitle?: string;\n /** @deprecated No longer affects rendering — trigger always says\n * \"Share\". Kept for callsite compatibility. */\n variant?: \"compact\" | \"label\";\n /** Optional trigger style. Defaults to a text-only \"Share\" label.\n * \"label-icon\" opts into an icon plus label; \"icon\" is icon-only. */\n trigger?: \"label\" | \"icon\" | \"label-icon\";\n /** @deprecated No longer affects rendering — kept for callsite compatibility. */\n hideTriggerIcon?: boolean;\n /** Optional className applied to the trigger button. */\n triggerClassName?: string;\n /** Notified when the share popover opens or closes. Hosts that render the\n * button next to an iframe use this to disable the iframe's pointer events\n * while the popover is open, so popover hover/clicks aren't swallowed. */\n onOpenChange?: (open: boolean) => void;\n /** Open the popover on first render. Useful after an upgrade/create flow that\n * lands the user directly in the shareable resource. */\n defaultOpen?: boolean;\n /** Optional public/share URL shown as a copyable link in the popover.\n * This is treated as the primary \"Copy link\" target — same convention\n * as Google Docs' Share dialog, which copies the editor URL. */\n shareUrl?: string;\n /** Optional label for the primary copyable link section. */\n shareUrlLabel?: string;\n /** Optional helper text for the primary copyable link section. */\n shareUrlDescription?: ReactNode;\n /** Where to render share links in the popover. Defaults to the bottom,\n * matching the historical Google-Docs-style share dialog. */\n shareUrlPlacement?: \"top\" | \"bottom\";\n /** Whether to render copyable share URL fields. Defaults to true. */\n showShareLinks?: boolean;\n /** @deprecated The Done action was removed; share popovers dismiss directly. */\n showDoneButton?: boolean;\n /** Optional placeholder shown in the share-URL slot when `shareUrl` is\n * undefined. Use this to explain *why* there's no link yet (e.g. \"Publish\n * this form to get a public response link\") instead of leaving the slot\n * empty. */\n shareUrlPlaceholder?: ReactNode;\n /** Optional secondary copyable link (e.g. a presentation / read-only\n * surface for the same resource). Anyone with at least viewer access\n * can open it — access is enforced on the resource itself, not the\n * URL shape, so we never gate this behind visibility. */\n secondaryShareUrl?: string;\n /** Optional label for the secondary copyable link. */\n secondaryShareUrlLabel?: string;\n /** Optional helper text for the secondary copyable link. */\n secondaryShareUrlDescription?: ReactNode;\n /** @deprecated No longer enforced — access is checked on the resource,\n * not the URL shape, mirroring Google Slides. Kept for callsite\n * compatibility; the prop is now a no-op. */\n shareUrlRequiresPublic?: boolean;\n /** @deprecated See `shareUrlRequiresPublic`. No longer rendered. */\n shareUrlUnavailableDescription?: ReactNode;\n /** Optional template-specific copy for the visibility picker. */\n visibilityCopy?: Partial<\n Record<Visibility, { label?: string; description?: string }>\n >;\n /** Optional label for the explicit per-person access list. */\n peopleAccessLabel?: ReactNode;\n /** Optional label for the coarse visibility control. */\n generalAccessLabel?: ReactNode;\n /** Optional note rendered between general access and the copyable link. */\n accessNote?: ReactNode;\n /** Optional host-rendered footer for compact app-specific share actions. */\n shareFooterContent?: ReactNode;\n /** Optional Notion-style organization access control. When present, the\n * share panel exposes a \"Hide in search\" switch under Advanced for org\n * visibility. */\n hideInSearchControl?: {\n checked: boolean;\n pending?: boolean;\n label?: string;\n description?: ReactNode;\n onCheckedChange: (checked: boolean) => void | Promise<void>;\n };\n /** Optional extra tabs rendered beside the default sharing/access panel. */\n shareTabs?: {\n shareLabel?: ReactNode;\n defaultValue?: string;\n tabs: Array<{\n value: string;\n label: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n }>;\n onValueChange?: (value: string) => void;\n };\n /** Optional className for the popover content, useful for wider custom tabs. */\n popoverClassName?: string;\n}\n\ntype Visibility = ShareButtonVisibility;\ntype Role = ShareButtonRole;\ntype HideInSearchControl = NonNullable<ShareButtonProps[\"hideInSearchControl\"]>;\ntype OrgMember = ShareButtonOrgMember;\ntype OrgMemberSearch = ShareButtonOrgMemberSearch;\n\ntype Share = ShareButtonShare;\n\n// Match shadcn's <Button size=\"sm\" variant=\"outline\"> sizing so the trigger\n// sits flush next to other controls while staying transparent at rest.\nconst BUTTON_BASE =\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\";\nconst BUTTON_OUTLINE_SM = cn(\n BUTTON_BASE,\n \"h-9 px-3 border border-[hsl(var(--sidebar-border,var(--input)))] bg-transparent text-foreground hover:bg-[hsl(var(--sidebar-accent,var(--accent)))] hover:text-[hsl(var(--sidebar-accent-foreground,var(--accent-foreground)))]\",\n);\nconst BUTTON_PRIMARY_SM = cn(\n BUTTON_BASE,\n \"h-9 px-4 bg-primary text-primary-foreground hover:bg-primary/90\",\n);\nconst BUTTON_GHOST_ICON = cn(\n BUTTON_BASE,\n \"h-7 w-7 p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n);\nconst SHARE_POPOVER_SURFACE =\n \"border border-border bg-popover text-popover-foreground\";\nconst SHARE_NESTED_OVERLAY_ATTR = \"data-agent-native-share-overlay\";\nconst SHARE_NESTED_OVERLAY_Z = \"z-[100020]\";\nconst VIS_META: Record<\n Visibility,\n { label: string; description: string; Icon: typeof IconLock }\n> = {\n private: {\n label: \"Private\",\n description: \"Only people with access can view\",\n Icon: IconLock,\n },\n org: {\n label: \"Organization\",\n description: \"Anyone in your organization can view\",\n Icon: IconUsersGroup,\n },\n public: {\n label: \"Public\",\n description: \"Anyone with the link can view\",\n Icon: IconWorld,\n },\n};\n\nfunction visibilityMeta(\n visibility: Visibility,\n copy?: ShareButtonProps[\"visibilityCopy\"],\n): (typeof VIS_META)[Visibility] {\n const base = VIS_META[visibility];\n const override = copy?.[visibility];\n return {\n ...base,\n label: override?.label ?? base.label,\n description: override?.description ?? base.description,\n };\n}\n\nconst ROLE_OPTIONS: Array<{ value: Role; label: string; description: string }> =\n [\n { value: \"viewer\", label: \"Viewer\", description: \"Can view\" },\n { value: \"editor\", label: \"Editor\", description: \"Can edit\" },\n {\n value: \"admin\",\n label: \"Admin\",\n description: \"Can edit and manage access\",\n },\n ];\n\ntype SharePopoverInteractOutsideEvent = Parameters<\n NonNullable<\n ComponentPropsWithoutRef<typeof PopoverContent>[\"onInteractOutside\"]\n >\n>[0];\n\nfunction isShareNestedOverlayTarget(target: EventTarget | null): boolean {\n return (\n target instanceof Element &&\n target.closest(`[${SHARE_NESTED_OVERLAY_ATTR}]`) !== null\n );\n}\n\nfunction handleSharePopoverInteractOutside(\n event: SharePopoverInteractOutsideEvent,\n) {\n const originalTarget = event.detail.originalEvent.target;\n if (isShareNestedOverlayTarget(originalTarget)) {\n event.preventDefault();\n }\n}\n\n/**\n * Framework share control. Renders a shadcn-outline-styled trigger that\n * opens a Google-Docs-style popover anchored beneath it. Uses Tailwind\n * + CSS variables so the same component renders natively in light and\n * dark mode in any shadcn template.\n */\nexport function ShareButton(props: ShareButtonProps) {\n const controller = useShareButtonController({\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n defaultOpen: props.defaultOpen,\n onOpenChange: props.onOpenChange,\n shareTabs: props.shareTabs,\n shareUrl: props.shareUrl,\n hideInSearchControl: props.hideInSearchControl,\n });\n const triggerVisibility = controller.triggerVisibility;\n const triggerMeta = triggerVisibility\n ? visibilityMeta(triggerVisibility, props.visibilityCopy)\n : null;\n const TriggerIcon = triggerMeta?.Icon ?? IconShare3;\n const iconOnly = props.trigger === \"icon\";\n const showTriggerIcon = iconOnly || props.trigger === \"label-icon\";\n const triggerLabel =\n iconOnly && triggerMeta ? `Share (${triggerMeta.label})` : \"Share\";\n\n return (\n <Popover open={controller.open} onOpenChange={controller.handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM,\n props.triggerClassName,\n )}\n aria-label={triggerLabel}\n title={triggerLabel}\n >\n {showTriggerIcon && <TriggerIcon size={16} strokeWidth={1.75} />}\n {!iconOnly && <span>Share</span>}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n sideOffset={6}\n data-agent-native-share-overlay=\"\"\n className={cn(\n \"z-[2000] w-[min(460px,92vw)] rounded-lg p-4 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n props.popoverClassName,\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onInteractOutside={handleSharePopoverInteractOutside}\n >\n <SharePanel {...props} controller={controller} />\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction SharePanel(\n props: ShareButtonProps & {\n controller: ShareButtonController;\n },\n) {\n const { resourceTitle, controller } = props;\n const {\n inviteEmail,\n setInviteEmail: onInviteEmailChange,\n activeShareTab,\n handleShareTabChange,\n data,\n policy,\n visibility,\n canManage,\n role,\n setRole,\n notifyPeople,\n setNotifyPeople,\n shareError,\n setShareError,\n suggestionsOpen,\n setSuggestionsOpen,\n inFlight,\n memberSearch,\n memberSuggestions,\n knownMembers,\n shares,\n handleVisibility,\n handleHideInSearch,\n handleAdd,\n handleChangeRole,\n handleRemove,\n } = controller;\n const hasInviteEmail = inviteEmail.trim().length > 0;\n\n const isLoading = data === undefined;\n const meta = visibilityMeta(visibility, props.visibilityCopy);\n const peopleAccessLabel = props.peopleAccessLabel ?? \"People with access\";\n const generalAccessLabel = props.generalAccessLabel ?? \"General access\";\n const shareLinks = (\n <>\n {props.shareUrl ? (\n <CopyLinkField\n value={props.shareUrl}\n label={props.shareUrlLabel}\n description={props.shareUrlDescription}\n />\n ) : props.shareUrlPlaceholder ? (\n <div className=\"mb-4 rounded-md border border-dashed border-border bg-muted/20 px-3 py-2.5 text-xs text-muted-foreground\">\n {props.shareUrlLabel ? (\n <div className=\"mb-0.5 font-medium text-foreground\">\n {props.shareUrlLabel}\n </div>\n ) : null}\n {props.shareUrlPlaceholder}\n </div>\n ) : null}\n\n {props.secondaryShareUrl ? (\n <CopyLinkField\n value={props.secondaryShareUrl}\n label={props.secondaryShareUrlLabel}\n description={props.secondaryShareUrlDescription}\n />\n ) : null}\n </>\n );\n const showShareLinks =\n (props.showShareLinks ?? true) &&\n (Boolean(props.shareUrl) ||\n Boolean(props.shareUrlPlaceholder) ||\n Boolean(props.secondaryShareUrl));\n const shareUrlPlacement = props.shareUrlPlacement ?? \"bottom\";\n const extraTabs = props.shareTabs?.tabs ?? [];\n const hasTabs = extraTabs.length > 0;\n const shareTabLabel = props.shareTabs?.shareLabel ?? \"Share link\";\n\n const titleText = resourceTitle\n ? `Share \"${resourceTitle}\"`\n : `Share ${props.resourceType}`;\n\n const sharePanel = isLoading ? (\n <div>\n {!hasTabs ? (\n <div\n className=\"mb-3 truncate text-base font-semibold\"\n title={titleText}\n >\n {titleText}\n </div>\n ) : null}\n <div className=\"mb-4 h-9 rounded-md bg-muted animate-pulse\" />\n <div className=\"mb-2 text-sm font-semibold\">{peopleAccessLabel}</div>\n <div className=\"mb-4 h-7 rounded-md bg-muted animate-pulse\" />\n <div className=\"mb-2 text-sm font-semibold\">{generalAccessLabel}</div>\n <div className=\"mb-4 h-9 rounded-md bg-muted animate-pulse\" />\n </div>\n ) : (\n <div>\n {!hasTabs ? (\n <div\n className=\"mb-3 truncate text-base font-semibold\"\n title={titleText}\n >\n {titleText}\n </div>\n ) : null}\n\n {showShareLinks && shareUrlPlacement === \"top\" ? shareLinks : null}\n\n {canManage ? (\n <div className=\"mb-4 space-y-2\">\n <div className=\"flex items-stretch gap-2\">\n <MemberAutocomplete\n value={inviteEmail}\n open={suggestionsOpen}\n onOpenChange={setSuggestionsOpen}\n onValueChange={(next) => {\n onInviteEmailChange(next);\n if (shareError) setShareError(null);\n }}\n onSelectMember={(member) => {\n onInviteEmailChange(member.email);\n setSuggestionsOpen(false);\n if (shareError) setShareError(null);\n }}\n onSubmit={handleAdd}\n placeholder={\n policy.requireOrgMemberForUserShares\n ? \"Add people from your organization\"\n : \"Add people by email\"\n }\n suggestions={memberSuggestions}\n search={memberSearch}\n />\n <RoleSelect value={role} onChange={setRole} />\n <button\n type=\"button\"\n onClick={handleAdd}\n disabled={!hasInviteEmail}\n className={BUTTON_PRIMARY_SM}\n >\n Add\n </button>\n </div>\n {shareError ? (\n <div\n role=\"alert\"\n className=\"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\"\n >\n {shareError}\n </div>\n ) : null}\n {hasInviteEmail ? (\n <label className=\"inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={notifyPeople}\n onChange={(e) => setNotifyPeople(e.target.checked)}\n className=\"h-4 w-4 rounded border-input accent-primary\"\n />\n Notify people\n </label>\n ) : null}\n </div>\n ) : null}\n\n <div className=\"mb-2 text-sm font-semibold\">{peopleAccessLabel}</div>\n <ul className=\"mb-4 flex flex-col gap-1 list-none p-0 m-0\">\n {data?.ownerEmail ? (\n <li className=\"flex items-center gap-3 px-1 py-1.5 text-sm\">\n <Avatar label={displayName(data.ownerEmail, knownMembers)} />\n <span className=\"flex-1 min-w-0 truncate\">\n {displayName(data.ownerEmail, knownMembers)}\n </span>\n <span className=\"text-xs text-muted-foreground\">Owner</span>\n </li>\n ) : null}\n {shares.map((s) => (\n <li\n key={keyOf(s)}\n className={cn(\n \"flex items-center gap-3 px-1 py-1.5 text-sm\",\n inFlight.has(keyOf(s)) && \"opacity-60\",\n )}\n >\n <Avatar\n label={principalLabel(s, knownMembers)}\n org={s.principalType === \"org\"}\n />\n <span className=\"flex-1 min-w-0 truncate\">\n {principalLabel(s, knownMembers)}\n </span>\n {canManage ? (\n <RoleSelect\n value={s.role}\n onChange={(r) => handleChangeRole(s, r)}\n disabled={inFlight.has(keyOf(s))}\n plain\n />\n ) : (\n <span className=\"text-xs text-muted-foreground\">\n {cap(s.role)}\n </span>\n )}\n {canManage ? (\n <button\n type=\"button\"\n aria-label=\"Remove\"\n onClick={() => handleRemove(s)}\n disabled={inFlight.has(keyOf(s))}\n className={BUTTON_GHOST_ICON}\n >\n <IconTrash size={14} />\n </button>\n ) : null}\n </li>\n ))}\n {!shares.length && !data?.ownerEmail ? (\n <li className=\"px-1 py-1.5 text-sm text-muted-foreground\">\n No one has access yet.\n </li>\n ) : null}\n </ul>\n\n <div className=\"mb-2 text-sm font-semibold\">{generalAccessLabel}</div>\n <div className=\"mb-4 flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <meta.Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect\n value={visibility}\n onChange={handleVisibility}\n disabled={!canManage}\n visibilityCopy={props.visibilityCopy}\n allowPublic={policy.allowPublic}\n />\n <div className=\"mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground\">\n <span>{meta.description}</span>\n {visibility === \"org\" && props.hideInSearchControl ? (\n <AdvancedAccessPopover\n control={props.hideInSearchControl}\n canManage={canManage}\n onToggle={handleHideInSearch}\n />\n ) : null}\n </div>\n </div>\n </div>\n\n {shareError && !canManage ? (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive\"\n >\n {shareError}\n </div>\n ) : null}\n\n {props.accessNote ? (\n <div className=\"mb-4 rounded-md border border-border bg-muted/35 p-3 text-xs text-muted-foreground\">\n {props.accessNote}\n </div>\n ) : null}\n\n {showShareLinks && shareUrlPlacement === \"bottom\" ? shareLinks : null}\n\n {props.shareFooterContent}\n </div>\n );\n\n if (!hasTabs) return sharePanel;\n\n const tabs = [\n {\n value: \"share\",\n label: shareTabLabel,\n content: sharePanel,\n disabled: false,\n },\n ...extraTabs,\n ];\n const activeTab = tabs.some((tab) => tab.value === activeShareTab)\n ? activeShareTab\n : \"share\";\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div\n role=\"tablist\"\n aria-label=\"Share options\"\n className=\"flex gap-1 rounded-xl bg-muted/70 p-1\"\n >\n {tabs.map((tab) => {\n const active = tab.value === activeTab;\n return (\n <button\n key={tab.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={tab.disabled}\n onClick={() => handleShareTabChange(tab.value)}\n className={cn(\n \"h-11 min-w-0 flex-1 rounded-lg px-3 text-sm font-medium text-muted-foreground transition-colors hover:bg-background/70 hover:text-foreground disabled:pointer-events-none disabled:opacity-50\",\n active &&\n \"bg-background text-foreground shadow-sm ring-2 ring-primary\",\n )}\n >\n <span className=\"block truncate\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n <div role=\"tabpanel\">\n {tabs.find((tab) => tab.value === activeTab)?.content}\n </div>\n </div>\n );\n}\n\nfunction AdvancedAccessPopover({\n control,\n canManage,\n onToggle,\n}: {\n control: HideInSearchControl;\n canManage: boolean;\n onToggle: () => void;\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={!canManage}\n className=\"inline-flex items-center gap-1 rounded-sm px-1 py-0.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n >\n Advanced\n <IconChevronDown size={12} strokeWidth={1.8} />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n data-agent-native-share-overlay=\"\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n className={cn(\n SHARE_NESTED_OVERLAY_Z,\n \"w-72 p-3 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n )}\n >\n <div className=\"space-y-3\">\n <div>\n <div className=\"text-sm font-medium text-foreground\">\n Advanced access\n </div>\n <div className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n Control how organization access appears in search.\n </div>\n </div>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={control.checked}\n disabled={!canManage || control.pending}\n onClick={onToggle}\n className={cn(\n \"flex w-full items-start gap-3 rounded-md border border-border/70 bg-card px-3 py-2.5 text-start transition-colors hover:bg-accent/45 disabled:cursor-not-allowed disabled:opacity-60\",\n control.checked && \"border-border bg-accent/35 text-foreground\",\n )}\n >\n <span\n aria-hidden\n className={cn(\n \"relative mt-0.5 inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-border bg-muted-foreground/25 transition-colors\",\n control.checked && \"border-primary/70 bg-primary\",\n )}\n >\n <span\n className={cn(\n \"ml-0.5 size-4 rounded-full bg-popover shadow-sm transition-transform\",\n control.checked && \"translate-x-4\",\n )}\n />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center gap-1.5 text-sm font-medium text-foreground\">\n <IconSearchOff size={14} strokeWidth={1.8} />\n {control.label ?? \"Hide in search\"}\n </span>\n <span className=\"mt-0.5 block text-xs leading-5 text-muted-foreground\">\n {control.description ??\n \"People with the link can still open this.\"}\n </span>\n </span>\n </button>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface MemberAutocompleteProps {\n value: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onValueChange: (value: string) => void;\n onSelectMember: (member: OrgMember) => void;\n onSubmit: () => void;\n placeholder: string;\n suggestions: OrgMember[];\n search: OrgMemberSearch;\n}\n\nfunction MemberAutocomplete({\n value,\n open,\n onOpenChange,\n onValueChange,\n onSelectMember,\n onSubmit,\n placeholder,\n suggestions,\n search,\n}: MemberAutocompleteProps) {\n const rawListboxId = useId();\n const listboxId = rawListboxId.replace(/:/g, \"\");\n const inputRef = useRef<HTMLInputElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const activeMember =\n activeIndex >= 0 && activeIndex < suggestions.length\n ? suggestions[activeIndex]\n : null;\n\n useEffect(() => {\n setActiveIndex(-1);\n }, [value]);\n\n useEffect(() => {\n if (activeIndex >= suggestions.length) {\n setActiveIndex(suggestions.length > 0 ? suggestions.length - 1 : -1);\n }\n }, [activeIndex, suggestions.length]);\n\n useEffect(() => {\n if (activeIndex < 0) return;\n document\n .getElementById(optionId(listboxId, activeIndex))\n ?.scrollIntoView({ block: \"nearest\" });\n }, [activeIndex, listboxId]);\n\n const chooseMember = (member: OrgMember) => {\n onSelectMember(member);\n onOpenChange(false);\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n onOpenChange(true);\n if (suggestions.length === 0) return;\n setActiveIndex((prev) => {\n if (prev >= suggestions.length - 1) {\n if (search.hasMore && !search.isLoadingMore) search.loadMore();\n return suggestions.length - 1;\n }\n return prev + 1;\n });\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n onOpenChange(true);\n if (suggestions.length === 0) return;\n setActiveIndex((prev) => (prev <= 0 ? suggestions.length - 1 : prev - 1));\n return;\n }\n\n if (event.key === \"Enter\") {\n if (open && activeMember) {\n event.preventDefault();\n chooseMember(activeMember);\n return;\n }\n if (value.trim()) {\n event.preventDefault();\n onSubmit();\n }\n return;\n }\n\n if (event.key === \"Escape\" && open) {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n setActiveIndex(-1);\n }\n };\n\n const handleScroll = (event: ReactUIEvent<HTMLDivElement>) => {\n const target = event.currentTarget;\n if (\n search.hasMore &&\n !search.isLoadingMore &&\n target.scrollTop + target.clientHeight >= target.scrollHeight - 24\n ) {\n search.loadMore();\n }\n };\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverAnchor asChild>\n <div className=\"relative flex-1 min-w-0\">\n <IconSearch\n aria-hidden\n size={15}\n strokeWidth={1.8}\n className=\"pointer-events-none absolute start-2.5 top-1/2 -translate-y-1/2 text-muted-foreground\"\n />\n <input\n ref={inputRef}\n type=\"email\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={\n activeIndex >= 0 ? optionId(listboxId, activeIndex) : undefined\n }\n placeholder={placeholder}\n value={value}\n onChange={(event) => {\n onValueChange(event.target.value);\n onOpenChange(true);\n }}\n onFocus={() => onOpenChange(true)}\n onBlur={() => {\n setTimeout(() => {\n if (document.activeElement !== inputRef.current) {\n onOpenChange(false);\n }\n }, 0);\n }}\n onKeyDown={handleKeyDown}\n autoComplete=\"off\"\n className=\"h-9 w-full min-w-0 rounded-md border border-input bg-card ps-8 pe-8 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\"\n />\n {search.isLoading ? (\n <IconLoader2\n aria-hidden\n size={15}\n strokeWidth={1.8}\n className=\"pointer-events-none absolute end-2.5 top-1/2 -translate-y-1/2 animate-spin text-muted-foreground\"\n />\n ) : null}\n </div>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n data-agent-native-share-overlay=\"\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n className={cn(\n SHARE_NESTED_OVERLAY_Z,\n \"w-[var(--radix-popper-anchor-width)] min-w-[18rem] rounded-md p-1 shadow-lg\",\n SHARE_POPOVER_SURFACE,\n )}\n >\n <div\n id={listboxId}\n role=\"listbox\"\n className=\"max-h-56 overflow-y-auto overflow-x-hidden\"\n onScroll={handleScroll}\n >\n {suggestions.map((member, index) => {\n const active = index === activeIndex;\n return (\n <div\n key={member.email}\n id={optionId(listboxId, index)}\n role=\"option\"\n aria-selected={active}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => chooseMember(member)}\n className={cn(\n \"flex cursor-pointer select-none flex-col rounded-sm px-3 py-2 text-sm outline-none\",\n active\n ? \"bg-accent text-accent-foreground\"\n : \"text-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n >\n <span className=\"truncate font-medium\">\n {member.name?.trim() || member.email}\n </span>\n {member.name?.trim() ? (\n <span className=\"truncate text-xs text-muted-foreground\">\n {member.email}\n </span>\n ) : null}\n </div>\n );\n })}\n\n {search.isLoading && suggestions.length === 0 ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n Searching...\n </div>\n ) : null}\n\n {search.error ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n Could not load people.\n </div>\n ) : null}\n\n {!search.isLoading && !search.error && suggestions.length === 0 ? (\n <div className=\"px-3 py-3 text-sm text-muted-foreground\">\n {value.trim() ? \"No matches.\" : \"No people found.\"}\n </div>\n ) : null}\n\n {search.isLoadingMore ? (\n <div className=\"flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground\">\n <IconLoader2\n aria-hidden\n size={14}\n strokeWidth={1.8}\n className=\"animate-spin\"\n />\n Loading...\n </div>\n ) : null}\n\n {search.hasMore && !search.isLoadingMore ? (\n <button\n type=\"button\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={search.loadMore}\n className=\"mt-1 flex w-full items-center justify-center rounded-sm px-3 py-2 text-sm font-medium text-muted-foreground hover:bg-accent hover:text-accent-foreground\"\n >\n Load more\n </button>\n ) : null}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nfunction optionId(baseId: string, index: number): string {\n return `${baseId}-option-${index}`;\n}\n\nfunction CopyLinkField({\n value,\n label = \"Share link\",\n description,\n}: {\n value: string;\n label?: string;\n description?: ReactNode;\n}) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n return () => {\n if (resetRef.current) clearTimeout(resetRef.current);\n };\n }, []);\n\n const handleCopy = async () => {\n if (await writeClipboardText(value)) {\n setCopied(true);\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1400);\n } else {\n setCopied(false);\n }\n };\n\n return (\n <div className=\"mb-4\">\n <div className=\"mb-2 text-sm font-semibold\">{label}</div>\n {description ? (\n <div className=\"mb-2 text-xs text-muted-foreground\">{description}</div>\n ) : null}\n <div className=\"flex min-w-0 items-center gap-2\">\n <input\n readOnly\n value={value}\n className=\"h-9 min-w-0 flex-1 rounded-md border border-input bg-card px-3 text-sm text-muted-foreground outline-none\"\n onFocus={(event) => event.currentTarget.select()}\n />\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex h-9 shrink-0 items-center gap-2 rounded-md border border-input bg-card px-3 text-sm font-medium text-foreground hover:bg-accent\"\n >\n {copied ? <IconCheck size={15} /> : <IconCopy size={15} />}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Radix Select wrappers styled like shadcn Select (no native <select> anywhere)\n// ---------------------------------------------------------------------------\n\nconst selectContentClass = `${SHARE_NESTED_OVERLAY_Z} min-w-[12rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`;\nconst selectItemClass =\n \"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-sm py-2 ps-8 pe-3 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\ninterface ShadSelectItemProps {\n value: string;\n label: string;\n description?: string;\n}\n\nfunction SelectItems({ items }: { items: ShadSelectItemProps[] }) {\n return (\n <>\n {items.map((it) => (\n <Select.Item\n key={it.value}\n value={it.value}\n className={selectItemClass}\n >\n <span className=\"absolute start-2 top-2 flex h-4 w-4 items-center justify-center\">\n <Select.ItemIndicator>\n <IconCheck size={14} />\n </Select.ItemIndicator>\n </span>\n <span className=\"flex flex-col\">\n <Select.ItemText>{it.label}</Select.ItemText>\n {it.description ? (\n <span className=\"text-xs text-muted-foreground\">\n {it.description}\n </span>\n ) : null}\n </span>\n </Select.Item>\n ))}\n </>\n );\n}\n\nfunction RoleSelect(props: {\n value: Role;\n onChange: (v: Role) => void;\n disabled?: boolean;\n /** When true, render as inline text + chevron (no border / bg) — matches\n * the per-person role picker in Google Docs. */\n plain?: boolean;\n}) {\n const current =\n ROLE_OPTIONS.find((o) => o.value === props.value) ?? ROLE_OPTIONS[0];\n return (\n <Select.Root\n value={props.value}\n onValueChange={(v) => props.onChange(v as Role)}\n disabled={props.disabled}\n >\n <Select.Trigger\n className={\n props.plain\n ? cn(\n BUTTON_BASE,\n \"h-7 px-2 bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n )\n : cn(\n BUTTON_BASE,\n \"h-9 px-3 border border-input bg-card hover:bg-accent hover:text-accent-foreground\",\n )\n }\n aria-label=\"Role\"\n >\n <Select.Value>{current.label}</Select.Value>\n <Select.Icon>\n <IconChevronDown size={14} />\n </Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Content\n data-agent-native-share-overlay=\"\"\n className={selectContentClass}\n position=\"popper\"\n sideOffset={4}\n >\n <Select.Viewport>\n <SelectItems items={ROLE_OPTIONS} />\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction VisibilitySelect(props: {\n value: Visibility;\n onChange: (v: Visibility) => void;\n disabled?: boolean;\n visibilityCopy?: ShareButtonProps[\"visibilityCopy\"];\n /** When false, the \"Private\" option is omitted unless currently selected. */\n allowPrivate?: boolean;\n /** When false, the \"Public\" option is omitted. Default: true. */\n allowPublic?: boolean;\n}) {\n const allowPrivate = props.allowPrivate !== false;\n const allowPublic = props.allowPublic !== false;\n const current = visibilityMeta(props.value, props.visibilityCopy);\n const options = (Object.keys(VIS_META) as Visibility[]).filter((k) => {\n if (k === props.value) return true;\n if (k === \"private\" && !allowPrivate) return false;\n if (k === \"public\" && !allowPublic) return false;\n return true;\n });\n return (\n <Select.Root\n value={props.value}\n onValueChange={(v) => props.onChange(v as Visibility)}\n disabled={props.disabled}\n >\n <Select.Trigger\n className={cn(\n BUTTON_BASE,\n \"h-7 px-1 -ms-1 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground\",\n )}\n aria-label=\"General access\"\n >\n <Select.Value>{current.label}</Select.Value>\n <Select.Icon>\n <IconChevronDown size={14} />\n </Select.Icon>\n </Select.Trigger>\n <Select.Portal>\n <Select.Content\n data-agent-native-share-overlay=\"\"\n className={selectContentClass}\n position=\"popper\"\n sideOffset={4}\n >\n <Select.Viewport>\n <SelectItems\n items={options.map((k) => ({\n value: k,\n label: visibilityMeta(k, props.visibilityCopy).label,\n description: visibilityMeta(k, props.visibilityCopy)\n .description,\n }))}\n />\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n}\n\nfunction Avatar({ label, org }: { label: string; org?: boolean }) {\n return (\n <span\n aria-hidden\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground\"\n >\n {org ? <IconUsersGroup size={14} strokeWidth={1.75} /> : initials(label)}\n </span>\n );\n}\n\nfunction keyOf(s: Share): string {\n return `${s.principalType}:${s.principalId}`;\n}\n\nfunction cap(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nfunction initials(s: string): string {\n const name = s.split(\"@\")[0] ?? s;\n return (name[0] ?? \"?\").toUpperCase();\n}\n\nfunction principalLabel(share: Share, members: OrgMember[]): string {\n const serverLabel = share.displayName?.trim();\n if (serverLabel) return serverLabel;\n if (share.principalType === \"org\") return \"Organization\";\n return displayName(share.principalId, members);\n}\n\nfunction displayName(emailOrId: string, members: OrgMember[]): string {\n const normalized = emailOrId.trim().toLowerCase();\n const match = members.find((m) => m.email.toLowerCase() === normalized);\n if (match?.name && match.name.trim()) return match.name;\n return normalized.includes(\"@\") ? emailOrId : \"Unknown person\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,oFAAoF;IACpF,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,oFAAoF;IACpF,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAyBD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,UAAU,EACV,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,aAAa,GACd,EAAE,gBAAgB,sCA0ElB"}
|
|
@@ -5,7 +5,6 @@ import { cn } from "../utils.js";
|
|
|
5
5
|
import { useShareDialogController, } from "./useShareDialogController.js";
|
|
6
6
|
const BUTTON_BASE = "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors active:!scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
|
|
7
7
|
const BUTTON_OUTLINE_SM = cn(BUTTON_BASE, "!h-9 !px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground");
|
|
8
|
-
const BUTTON_PRIMARY_SM = cn(BUTTON_BASE, "!h-9 !px-4 bg-primary text-primary-foreground hover:bg-primary/90");
|
|
9
8
|
const BUTTON_GHOST_ICON = cn(BUTTON_BASE, "!h-8 !w-8 !p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground");
|
|
10
9
|
const VIS_ICONS = {
|
|
11
10
|
private: IconLock,
|
|
@@ -41,7 +40,7 @@ export function ShareDialog({ open, onClose, resourceType, resourceId, resourceT
|
|
|
41
40
|
return (_jsx(TabTrigger, { active: controller.activeTab === tab.value, onClick: () => controller.setActiveTab(tab.value), icon: _jsx(Icon, { size: 14, strokeWidth: 1.75 }), label: tab.label }, tab.value));
|
|
42
41
|
}) })) : null, _jsxs("div", { className: "px-5 py-4", children: [controller.tabsEnabled && controller.activeTab === "link" ? (_jsx(LinkTab, { controller: controller, extras: linkTabExtras })) : null, !controller.tabsEnabled || controller.activeTab === "invite" ? (_jsx(InviteTab, { controller: controller, showVisibility: !controller.tabsEnabled })) : null, controller.tabsEnabled && controller.activeTab === "embed"
|
|
43
42
|
? (embedTabContent ?? _jsx(DefaultEmbedBody, { controller: controller }))
|
|
44
|
-
: null] })
|
|
43
|
+
: null] })] }));
|
|
45
44
|
}
|
|
46
45
|
function TabTrigger({ active, onClick, icon, label, }) {
|
|
47
46
|
return (_jsxs(ActionButton, { type: "button", emphasis: "ghost", "aria-pressed": active, onPress: onClick, className: cn("inline-flex !h-auto items-center gap-1.5 !rounded-none border-b-2 !px-3 !py-2 text-sm font-medium transition-colors hover:!bg-transparent active:!scale-100 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_svg]:!size-auto", active
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShareDialog.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionButton,\n Avatar as DesignSystemAvatar,\n Dialog as DesignSystemDialog,\n IconButton,\n Picker,\n Status,\n TextArea,\n TextField,\n} from \"@agent-native/toolkit/design-system\";\nimport {\n IconCheck,\n IconCode,\n IconCopy,\n IconLink,\n IconLock,\n IconMail,\n IconTrash,\n IconUsersGroup,\n IconWorld,\n} from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../utils.js\";\nimport {\n useShareDialogController,\n type ResourceShare,\n type ShareDialogController,\n type ShareDialogPerson,\n type ShareDialogTab,\n type ShareVisibility,\n} from \"./useShareDialogController.js\";\n\nexport interface ShareDialogProps {\n open: boolean;\n onClose: () => void;\n resourceType: string;\n resourceId: string;\n resourceTitle?: string;\n /**\n * When provided, enables the \"Link\" tab with a copy-link field.\n * Pass the user-facing share URL (e.g. `https://…/share/<id>`).\n */\n shareUrl?: string;\n /**\n * When provided, enables the \"Embed\" tab with a default iframe snippet.\n * For richer per-resource controls (autoplay, start time, responsive /\n * fixed size), pass `embedTabContent` instead (or in addition) — it\n * replaces the default embed body.\n */\n embedUrl?: string;\n /** Advanced: fully custom Embed tab body. Requires `embedUrl` to enable the tab. */\n embedTabContent?: ReactNode;\n /** Extra content appended to the bottom of the Link tab (e.g. download buttons). */\n linkTabExtras?: ReactNode;\n}\n\nconst BUTTON_BASE =\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors active:!scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\";\nconst BUTTON_OUTLINE_SM = cn(\n BUTTON_BASE,\n \"!h-9 !px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n);\nconst BUTTON_PRIMARY_SM = cn(\n BUTTON_BASE,\n \"!h-9 !px-4 bg-primary text-primary-foreground hover:bg-primary/90\",\n);\nconst BUTTON_GHOST_ICON = cn(\n BUTTON_BASE,\n \"!h-8 !w-8 !p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n);\n\nconst VIS_ICONS: Record<ShareVisibility, typeof IconLock> = {\n private: IconLock,\n org: IconUsersGroup,\n public: IconWorld,\n};\n\nconst TAB_ICONS: Record<ShareDialogTab, typeof IconLink> = {\n link: IconLink,\n invite: IconMail,\n embed: IconCode,\n};\n\n/**\n * Framework share dialog. Drop into any template via\n * `<ShareDialog open onClose resourceType resourceId />`. Passing `shareUrl`\n * lights up a Link tab with a copy field; passing `embedUrl` lights up an\n * Embed tab. With neither prop, renders a single Invite + general-access\n * panel (Google-Docs-lite).\n */\nexport function ShareDialog({\n open,\n onClose,\n resourceType,\n resourceId,\n resourceTitle,\n shareUrl,\n embedUrl,\n embedTabContent,\n linkTabExtras,\n}: ShareDialogProps) {\n const controller = useShareDialogController({\n open,\n onClose,\n resourceType,\n resourceId,\n resourceTitle,\n shareUrl,\n embedUrl,\n });\n if (!open) return null;\n\n return (\n <DesignSystemDialog\n open={controller.open}\n onOpenChange={controller.onOpenChange}\n title={\n <span\n className=\"truncate !text-base !leading-normal !tracking-normal !text-inherit\"\n title={controller.title}\n >\n {controller.title}\n </span>\n }\n closeLabel={controller.labels.close}\n size=\"large\"\n className=\"!top-4 !z-[2010] !block !max-h-none !w-[calc(100vw-2rem)] !max-w-lg !translate-y-0 !gap-0 !overflow-visible !rounded-xl !border-border !bg-popover !p-0 !text-popover-foreground !shadow-2xl sm:!top-1/2 sm:!-translate-y-1/2\"\n aria-label={controller.title}\n >\n <div className=\"px-5 pt-0 pb-3\">\n {controller.ownerLabel ? (\n <div className=\"truncate text-xs text-muted-foreground\">\n {controller.ownerLabel}\n </div>\n ) : null}\n </div>\n\n {controller.tabsEnabled ? (\n <div\n role=\"tablist\"\n aria-label={controller.labels.shareOptions}\n className=\"mx-5 mt-1 flex gap-1 border-b border-border\"\n >\n {controller.tabs.map((tab) => {\n const Icon = TAB_ICONS[tab.value];\n return (\n <TabTrigger\n key={tab.value}\n active={controller.activeTab === tab.value}\n onClick={() => controller.setActiveTab(tab.value)}\n icon={<Icon size={14} strokeWidth={1.75} />}\n label={tab.label}\n />\n );\n })}\n </div>\n ) : null}\n\n <div className=\"px-5 py-4\">\n {controller.tabsEnabled && controller.activeTab === \"link\" ? (\n <LinkTab controller={controller} extras={linkTabExtras} />\n ) : null}\n {!controller.tabsEnabled || controller.activeTab === \"invite\" ? (\n <InviteTab\n controller={controller}\n showVisibility={!controller.tabsEnabled}\n />\n ) : null}\n {controller.tabsEnabled && controller.activeTab === \"embed\"\n ? (embedTabContent ?? <DefaultEmbedBody controller={controller} />)\n : null}\n </div>\n\n <div className=\"flex justify-end border-t border-border px-5 py-3\">\n <ActionButton\n type=\"button\"\n intent=\"primary\"\n emphasis=\"solid\"\n onPress={controller.close}\n className={BUTTON_PRIMARY_SM}\n >\n {controller.labels.done}\n </ActionButton>\n </div>\n </DesignSystemDialog>\n );\n}\n\nfunction TabTrigger({\n active,\n onClick,\n icon,\n label,\n}: {\n active: boolean;\n onClick: () => void;\n icon: ReactNode;\n label: string;\n}) {\n return (\n <ActionButton\n type=\"button\"\n emphasis=\"ghost\"\n aria-pressed={active}\n onPress={onClick}\n className={cn(\n \"inline-flex !h-auto items-center gap-1.5 !rounded-none border-b-2 !px-3 !py-2 text-sm font-medium transition-colors hover:!bg-transparent active:!scale-100 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_svg]:!size-auto\",\n active\n ? \"border-foreground text-foreground\"\n : \"border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n {icon}\n {label}\n </ActionButton>\n );\n}\n\nfunction LinkTab({\n controller,\n extras,\n}: {\n controller: ShareDialogController;\n extras?: ReactNode;\n}) {\n const Icon = VIS_ICONS[controller.visibility.value];\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.generalAccess}\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect controller={controller} />\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {controller.visibility.description}\n </div>\n </div>\n </div>\n </div>\n <CopyField\n field=\"share-link\"\n label={controller.labels.shareLink}\n value={controller.shareUrl!}\n controller={controller}\n />\n {extras}\n </div>\n );\n}\n\nfunction InviteTab({\n controller,\n showVisibility,\n}: {\n controller: ShareDialogController;\n showVisibility: boolean;\n}) {\n const Icon = VIS_ICONS[controller.visibility.value];\n return (\n <div className=\"space-y-4\">\n {controller.canManage ? (\n <div className=\"space-y-2\">\n <div className=\"flex items-stretch gap-2\">\n <input\n type=\"email\"\n placeholder={controller.labels.addPeopleByEmail}\n value={controller.invite.email}\n onChange={(event) =>\n controller.invite.setEmail(event.currentTarget.value)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\") controller.invite.submit();\n }}\n autoComplete=\"off\"\n className=\"flex-1 min-w-0 h-9 rounded-md border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\"\n />\n <RoleSelect controller={controller} />\n </div>\n {controller.invite.showNotifyPeople ? (\n <label className=\"inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={controller.invite.notifyPeople}\n onChange={(event) =>\n controller.invite.setNotifyPeople(event.currentTarget.checked)\n }\n className=\"h-4 w-4 rounded border-input accent-primary\"\n />\n {controller.labels.notifyPeople}\n </label>\n ) : null}\n </div>\n ) : null}\n\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.peopleWithAccess}\n </div>\n <ul className=\"flex flex-col gap-1 list-none p-0 m-0\">\n {controller.people.map((person) => (\n <PersonRow\n key={person.key}\n person={person}\n canManage={controller.canManage}\n removeLabel={controller.labels.remove}\n onRemove={controller.removeShare}\n />\n ))}\n {!controller.people.length ? (\n <li className=\"px-1 py-1.5 text-sm text-muted-foreground\">\n {controller.labels.noAccess}\n </li>\n ) : null}\n </ul>\n </div>\n\n {showVisibility ? (\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.generalAccess}\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect controller={controller} />\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {controller.visibility.description}\n </div>\n </div>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PersonRow({\n person,\n canManage,\n removeLabel,\n onRemove,\n}: {\n person: ShareDialogPerson;\n canManage: boolean;\n removeLabel: string;\n onRemove: (share: ResourceShare) => void;\n}) {\n return (\n <li className=\"flex items-center gap-3 px-1 py-1.5 text-sm\">\n <DesignSystemAvatar\n name={person.label}\n fallback={\n person.principalType === \"org\" ? (\n <IconUsersGroup size={14} strokeWidth={1.75} />\n ) : (\n person.avatarText\n )\n }\n size=\"compact\"\n className=\"inline-flex h-7 w-7 shrink-0 text-[11px] font-semibold\"\n />\n <span className=\"flex-1 min-w-0 truncate\">{person.label}</span>\n <Status\n tone=\"neutral\"\n size=\"compact\"\n className=\"border-0 bg-transparent px-0 text-xs text-muted-foreground\"\n >\n {person.roleLabel}\n </Status>\n {canManage && person.share ? (\n <IconButton\n intent=\"danger\"\n emphasis=\"ghost\"\n size=\"compact\"\n icon={<IconTrash size={14} />}\n label={removeLabel}\n aria-label={removeLabel}\n onPress={() => onRemove(person.share!)}\n className={cn(BUTTON_GHOST_ICON, \"[&_svg]:!size-auto\")}\n />\n ) : null}\n </li>\n );\n}\n\nfunction DefaultEmbedBody({\n controller,\n}: {\n controller: ShareDialogController;\n}) {\n return (\n <div className=\"space-y-3\">\n <CopyField\n field=\"embed-url\"\n label={controller.labels.embedUrl}\n value={controller.embedUrl!}\n controller={controller}\n />\n <CopyField\n field=\"embed-code\"\n label={controller.labels.embedCode}\n value={controller.embedCode!}\n controller={controller}\n multiline\n />\n </div>\n );\n}\n\nfunction CopyField({\n field,\n label,\n value,\n controller,\n multiline,\n}: {\n field: string;\n label: string;\n value: string;\n controller: ShareDialogController;\n multiline?: boolean;\n}) {\n const copied = controller.copiedField === field;\n return (\n <div>\n <div className=\"mb-1 text-xs font-medium text-muted-foreground\">\n {label}\n </div>\n <div className=\"flex items-stretch gap-2\">\n {multiline ? (\n <TextArea\n readOnly\n value={value}\n onChange={() => undefined}\n aria-label={label}\n className=\"flex-1 h-20 text-xs font-mono\"\n />\n ) : (\n <TextField\n readOnly\n value={value}\n onChange={() => undefined}\n aria-label={label}\n className=\"flex-1 min-w-0 text-xs font-mono\"\n />\n )}\n <IconButton\n emphasis=\"outline\"\n size=\"compact\"\n icon={copied ? <IconCheck size={14} /> : <IconCopy size={14} />}\n label={controller.labels.copy}\n onPress={() => void controller.copy(field, value)}\n aria-label={controller.labels.copy}\n className={cn(BUTTON_OUTLINE_SM, \"!w-9 !px-0 [&_svg]:!size-auto\")}\n />\n </div>\n </div>\n );\n}\n\nfunction RoleSelect({ controller }: { controller: ShareDialogController }) {\n return (\n <Picker\n mode=\"select\"\n options={controller.invite.roleOptions}\n value={controller.invite.role}\n onChange={(value) => {\n if (value === \"viewer\" || value === \"editor\" || value === \"admin\") {\n controller.invite.setRole(value);\n }\n }}\n aria-label={controller.labels.role}\n className=\"w-auto\"\n />\n );\n}\n\nfunction VisibilitySelect({\n controller,\n}: {\n controller: ShareDialogController;\n}) {\n return (\n <Picker\n mode=\"select\"\n options={controller.visibility.options}\n value={controller.visibility.value}\n onChange={(value) => {\n if (value === \"private\" || value === \"org\" || value === \"public\") {\n controller.visibility.set(value);\n }\n }}\n disabled={controller.visibility.disabled}\n aria-label={controller.labels.generalAccess}\n className=\"-ms-1 w-auto\"\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ShareDialog.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionButton,\n Avatar as DesignSystemAvatar,\n Dialog as DesignSystemDialog,\n IconButton,\n Picker,\n Status,\n TextArea,\n TextField,\n} from \"@agent-native/toolkit/design-system\";\nimport {\n IconCheck,\n IconCode,\n IconCopy,\n IconLink,\n IconLock,\n IconMail,\n IconTrash,\n IconUsersGroup,\n IconWorld,\n} from \"@tabler/icons-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../utils.js\";\nimport {\n useShareDialogController,\n type ResourceShare,\n type ShareDialogController,\n type ShareDialogPerson,\n type ShareDialogTab,\n type ShareVisibility,\n} from \"./useShareDialogController.js\";\n\nexport interface ShareDialogProps {\n open: boolean;\n onClose: () => void;\n resourceType: string;\n resourceId: string;\n resourceTitle?: string;\n /**\n * When provided, enables the \"Link\" tab with a copy-link field.\n * Pass the user-facing share URL (e.g. `https://…/share/<id>`).\n */\n shareUrl?: string;\n /**\n * When provided, enables the \"Embed\" tab with a default iframe snippet.\n * For richer per-resource controls (autoplay, start time, responsive /\n * fixed size), pass `embedTabContent` instead (or in addition) — it\n * replaces the default embed body.\n */\n embedUrl?: string;\n /** Advanced: fully custom Embed tab body. Requires `embedUrl` to enable the tab. */\n embedTabContent?: ReactNode;\n /** Extra content appended to the bottom of the Link tab (e.g. download buttons). */\n linkTabExtras?: ReactNode;\n}\n\nconst BUTTON_BASE =\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors active:!scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\";\nconst BUTTON_OUTLINE_SM = cn(\n BUTTON_BASE,\n \"!h-9 !px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n);\nconst BUTTON_GHOST_ICON = cn(\n BUTTON_BASE,\n \"!h-8 !w-8 !p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n);\n\nconst VIS_ICONS: Record<ShareVisibility, typeof IconLock> = {\n private: IconLock,\n org: IconUsersGroup,\n public: IconWorld,\n};\n\nconst TAB_ICONS: Record<ShareDialogTab, typeof IconLink> = {\n link: IconLink,\n invite: IconMail,\n embed: IconCode,\n};\n\n/**\n * Framework share dialog. Drop into any template via\n * `<ShareDialog open onClose resourceType resourceId />`. Passing `shareUrl`\n * lights up a Link tab with a copy field; passing `embedUrl` lights up an\n * Embed tab. With neither prop, renders a single Invite + general-access\n * panel (Google-Docs-lite).\n */\nexport function ShareDialog({\n open,\n onClose,\n resourceType,\n resourceId,\n resourceTitle,\n shareUrl,\n embedUrl,\n embedTabContent,\n linkTabExtras,\n}: ShareDialogProps) {\n const controller = useShareDialogController({\n open,\n onClose,\n resourceType,\n resourceId,\n resourceTitle,\n shareUrl,\n embedUrl,\n });\n if (!open) return null;\n\n return (\n <DesignSystemDialog\n open={controller.open}\n onOpenChange={controller.onOpenChange}\n title={\n <span\n className=\"truncate !text-base !leading-normal !tracking-normal !text-inherit\"\n title={controller.title}\n >\n {controller.title}\n </span>\n }\n closeLabel={controller.labels.close}\n size=\"large\"\n className=\"!top-4 !z-[2010] !block !max-h-none !w-[calc(100vw-2rem)] !max-w-lg !translate-y-0 !gap-0 !overflow-visible !rounded-xl !border-border !bg-popover !p-0 !text-popover-foreground !shadow-2xl sm:!top-1/2 sm:!-translate-y-1/2\"\n aria-label={controller.title}\n >\n <div className=\"px-5 pt-0 pb-3\">\n {controller.ownerLabel ? (\n <div className=\"truncate text-xs text-muted-foreground\">\n {controller.ownerLabel}\n </div>\n ) : null}\n </div>\n\n {controller.tabsEnabled ? (\n <div\n role=\"tablist\"\n aria-label={controller.labels.shareOptions}\n className=\"mx-5 mt-1 flex gap-1 border-b border-border\"\n >\n {controller.tabs.map((tab) => {\n const Icon = TAB_ICONS[tab.value];\n return (\n <TabTrigger\n key={tab.value}\n active={controller.activeTab === tab.value}\n onClick={() => controller.setActiveTab(tab.value)}\n icon={<Icon size={14} strokeWidth={1.75} />}\n label={tab.label}\n />\n );\n })}\n </div>\n ) : null}\n\n <div className=\"px-5 py-4\">\n {controller.tabsEnabled && controller.activeTab === \"link\" ? (\n <LinkTab controller={controller} extras={linkTabExtras} />\n ) : null}\n {!controller.tabsEnabled || controller.activeTab === \"invite\" ? (\n <InviteTab\n controller={controller}\n showVisibility={!controller.tabsEnabled}\n />\n ) : null}\n {controller.tabsEnabled && controller.activeTab === \"embed\"\n ? (embedTabContent ?? <DefaultEmbedBody controller={controller} />)\n : null}\n </div>\n </DesignSystemDialog>\n );\n}\n\nfunction TabTrigger({\n active,\n onClick,\n icon,\n label,\n}: {\n active: boolean;\n onClick: () => void;\n icon: ReactNode;\n label: string;\n}) {\n return (\n <ActionButton\n type=\"button\"\n emphasis=\"ghost\"\n aria-pressed={active}\n onPress={onClick}\n className={cn(\n \"inline-flex !h-auto items-center gap-1.5 !rounded-none border-b-2 !px-3 !py-2 text-sm font-medium transition-colors hover:!bg-transparent active:!scale-100 focus-visible:!ring-0 focus-visible:!ring-offset-0 [&_svg]:!size-auto\",\n active\n ? \"border-foreground text-foreground\"\n : \"border-transparent text-muted-foreground hover:text-foreground\",\n )}\n >\n {icon}\n {label}\n </ActionButton>\n );\n}\n\nfunction LinkTab({\n controller,\n extras,\n}: {\n controller: ShareDialogController;\n extras?: ReactNode;\n}) {\n const Icon = VIS_ICONS[controller.visibility.value];\n return (\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.generalAccess}\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect controller={controller} />\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {controller.visibility.description}\n </div>\n </div>\n </div>\n </div>\n <CopyField\n field=\"share-link\"\n label={controller.labels.shareLink}\n value={controller.shareUrl!}\n controller={controller}\n />\n {extras}\n </div>\n );\n}\n\nfunction InviteTab({\n controller,\n showVisibility,\n}: {\n controller: ShareDialogController;\n showVisibility: boolean;\n}) {\n const Icon = VIS_ICONS[controller.visibility.value];\n return (\n <div className=\"space-y-4\">\n {controller.canManage ? (\n <div className=\"space-y-2\">\n <div className=\"flex items-stretch gap-2\">\n <input\n type=\"email\"\n placeholder={controller.labels.addPeopleByEmail}\n value={controller.invite.email}\n onChange={(event) =>\n controller.invite.setEmail(event.currentTarget.value)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\") controller.invite.submit();\n }}\n autoComplete=\"off\"\n className=\"flex-1 min-w-0 h-9 rounded-md border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\"\n />\n <RoleSelect controller={controller} />\n </div>\n {controller.invite.showNotifyPeople ? (\n <label className=\"inline-flex items-center gap-2 text-xs text-muted-foreground\">\n <input\n type=\"checkbox\"\n checked={controller.invite.notifyPeople}\n onChange={(event) =>\n controller.invite.setNotifyPeople(event.currentTarget.checked)\n }\n className=\"h-4 w-4 rounded border-input accent-primary\"\n />\n {controller.labels.notifyPeople}\n </label>\n ) : null}\n </div>\n ) : null}\n\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.peopleWithAccess}\n </div>\n <ul className=\"flex flex-col gap-1 list-none p-0 m-0\">\n {controller.people.map((person) => (\n <PersonRow\n key={person.key}\n person={person}\n canManage={controller.canManage}\n removeLabel={controller.labels.remove}\n onRemove={controller.removeShare}\n />\n ))}\n {!controller.people.length ? (\n <li className=\"px-1 py-1.5 text-sm text-muted-foreground\">\n {controller.labels.noAccess}\n </li>\n ) : null}\n </ul>\n </div>\n\n {showVisibility ? (\n <div>\n <div className=\"mb-2 text-sm font-semibold\">\n {controller.labels.generalAccess}\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n aria-hidden\n className=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground\"\n >\n <Icon size={16} strokeWidth={1.75} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <VisibilitySelect controller={controller} />\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {controller.visibility.description}\n </div>\n </div>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction PersonRow({\n person,\n canManage,\n removeLabel,\n onRemove,\n}: {\n person: ShareDialogPerson;\n canManage: boolean;\n removeLabel: string;\n onRemove: (share: ResourceShare) => void;\n}) {\n return (\n <li className=\"flex items-center gap-3 px-1 py-1.5 text-sm\">\n <DesignSystemAvatar\n name={person.label}\n fallback={\n person.principalType === \"org\" ? (\n <IconUsersGroup size={14} strokeWidth={1.75} />\n ) : (\n person.avatarText\n )\n }\n size=\"compact\"\n className=\"inline-flex h-7 w-7 shrink-0 text-[11px] font-semibold\"\n />\n <span className=\"flex-1 min-w-0 truncate\">{person.label}</span>\n <Status\n tone=\"neutral\"\n size=\"compact\"\n className=\"border-0 bg-transparent px-0 text-xs text-muted-foreground\"\n >\n {person.roleLabel}\n </Status>\n {canManage && person.share ? (\n <IconButton\n intent=\"danger\"\n emphasis=\"ghost\"\n size=\"compact\"\n icon={<IconTrash size={14} />}\n label={removeLabel}\n aria-label={removeLabel}\n onPress={() => onRemove(person.share!)}\n className={cn(BUTTON_GHOST_ICON, \"[&_svg]:!size-auto\")}\n />\n ) : null}\n </li>\n );\n}\n\nfunction DefaultEmbedBody({\n controller,\n}: {\n controller: ShareDialogController;\n}) {\n return (\n <div className=\"space-y-3\">\n <CopyField\n field=\"embed-url\"\n label={controller.labels.embedUrl}\n value={controller.embedUrl!}\n controller={controller}\n />\n <CopyField\n field=\"embed-code\"\n label={controller.labels.embedCode}\n value={controller.embedCode!}\n controller={controller}\n multiline\n />\n </div>\n );\n}\n\nfunction CopyField({\n field,\n label,\n value,\n controller,\n multiline,\n}: {\n field: string;\n label: string;\n value: string;\n controller: ShareDialogController;\n multiline?: boolean;\n}) {\n const copied = controller.copiedField === field;\n return (\n <div>\n <div className=\"mb-1 text-xs font-medium text-muted-foreground\">\n {label}\n </div>\n <div className=\"flex items-stretch gap-2\">\n {multiline ? (\n <TextArea\n readOnly\n value={value}\n onChange={() => undefined}\n aria-label={label}\n className=\"flex-1 h-20 text-xs font-mono\"\n />\n ) : (\n <TextField\n readOnly\n value={value}\n onChange={() => undefined}\n aria-label={label}\n className=\"flex-1 min-w-0 text-xs font-mono\"\n />\n )}\n <IconButton\n emphasis=\"outline\"\n size=\"compact\"\n icon={copied ? <IconCheck size={14} /> : <IconCopy size={14} />}\n label={controller.labels.copy}\n onPress={() => void controller.copy(field, value)}\n aria-label={controller.labels.copy}\n className={cn(BUTTON_OUTLINE_SM, \"!w-9 !px-0 [&_svg]:!size-auto\")}\n />\n </div>\n </div>\n );\n}\n\nfunction RoleSelect({ controller }: { controller: ShareDialogController }) {\n return (\n <Picker\n mode=\"select\"\n options={controller.invite.roleOptions}\n value={controller.invite.role}\n onChange={(value) => {\n if (value === \"viewer\" || value === \"editor\" || value === \"admin\") {\n controller.invite.setRole(value);\n }\n }}\n aria-label={controller.labels.role}\n className=\"w-auto\"\n />\n );\n}\n\nfunction VisibilitySelect({\n controller,\n}: {\n controller: ShareDialogController;\n}) {\n return (\n <Picker\n mode=\"select\"\n options={controller.visibility.options}\n value={controller.visibility.value}\n onChange={(value) => {\n if (value === \"private\" || value === \"org\" || value === \"public\") {\n controller.visibility.set(value);\n }\n }}\n disabled={controller.visibility.disabled}\n aria-label={controller.labels.generalAccess}\n className=\"-ms-1 w-auto\"\n />\n );\n}\n"]}
|
|
@@ -85,7 +85,6 @@ export interface ShareButtonController {
|
|
|
85
85
|
handleAdd: () => void;
|
|
86
86
|
handleChangeRole: (share: ShareButtonShare, role: ShareButtonRole) => void;
|
|
87
87
|
handleRemove: (share: ShareButtonShare) => void;
|
|
88
|
-
handleDone: () => void;
|
|
89
88
|
}
|
|
90
89
|
export declare function useShareButtonController(options: ShareButtonControllerOptions): ShareButtonController;
|
|
91
90
|
//# sourceMappingURL=useShareButtonController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShareButtonController.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/useShareButtonController.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useShareButtonController.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/useShareButtonController.ts"],"names":[],"mappings":"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"}
|
|
@@ -343,11 +343,6 @@ export function useShareButtonController(options) {
|
|
|
343
343
|
sharesQuery,
|
|
344
344
|
unshare,
|
|
345
345
|
]);
|
|
346
|
-
const handleDone = useCallback(() => {
|
|
347
|
-
if (canManage && inviteEmail.trim())
|
|
348
|
-
handleAdd();
|
|
349
|
-
handleOpenChange(false);
|
|
350
|
-
}, [canManage, handleAdd, handleOpenChange, inviteEmail]);
|
|
351
346
|
return {
|
|
352
347
|
open,
|
|
353
348
|
handleOpenChange,
|
|
@@ -381,7 +376,6 @@ export function useShareButtonController(options) {
|
|
|
381
376
|
handleAdd,
|
|
382
377
|
handleChangeRole,
|
|
383
378
|
handleRemove,
|
|
384
|
-
handleDone,
|
|
385
379
|
};
|
|
386
380
|
}
|
|
387
381
|
function keyOf(share) {
|