@agent-native/core 0.84.10 → 0.84.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +37 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/agent/run-store.ts +29 -6
  5. package/corpus/core/src/client/require-session.tsx +20 -1
  6. package/corpus/core/src/client/sharing/ShareButton.tsx +9 -3
  7. package/corpus/core/src/collab/storage.ts +40 -5
  8. package/corpus/core/src/server/auth.ts +6 -0
  9. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +7 -6
  10. package/corpus/templates/assets/AGENTS.md +15 -0
  11. package/corpus/templates/assets/actions/_helpers.ts +3 -1
  12. package/corpus/templates/assets/actions/create-generation-preset.ts +12 -1
  13. package/corpus/templates/assets/actions/generate-asset.ts +5 -1
  14. package/corpus/templates/assets/actions/generate-image-batch.ts +6 -1
  15. package/corpus/templates/assets/actions/generate-image.ts +18 -11
  16. package/corpus/templates/assets/actions/open-asset-picker.ts +4 -2
  17. package/corpus/templates/assets/actions/update-generation-preset.ts +16 -3
  18. package/corpus/templates/assets/app/i18n/zh-TW.ts +3 -0
  19. package/corpus/templates/assets/app/i18n-data.ts +30 -0
  20. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +42 -7
  21. package/corpus/templates/assets/app/routes/library.tsx +4 -2
  22. package/corpus/templates/assets/changelog/2026-07-01-generation-presets-can-now-composite-your-brand-s-canonical-.md +6 -0
  23. package/corpus/templates/assets/changelog/2026-07-01-tagging-a-preset-now-briefs-the-agent-on-that-preset-s-aesth.md +6 -0
  24. package/corpus/templates/assets/server/lib/preset-chat-context.ts +118 -0
  25. package/corpus/templates/assets/server/plugins/agent-chat.ts +5 -0
  26. package/corpus/templates/assets/shared/api.ts +1 -0
  27. package/corpus/templates/design/actions/export-html.ts +4 -2
  28. package/corpus/templates/design/actions/export-pdf.ts +3 -1
  29. package/corpus/templates/design/actions/export-svg.ts +4 -2
  30. package/corpus/templates/design/actions/export-zip.ts +10 -3
  31. package/corpus/templates/design/actions/update-file.ts +68 -17
  32. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +3 -2
  33. package/corpus/templates/design/app/components/design/EditPanel.tsx +35 -3
  34. package/corpus/templates/design/app/components/design/MotionDock.tsx +46 -11
  35. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +80 -30
  36. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +60 -10
  37. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +2 -0
  38. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +4 -0
  39. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +2 -2
  40. package/corpus/templates/design/app/i18n-data.ts +1 -1
  41. package/corpus/templates/design/app/pages/DesignEditor.tsx +491 -107
  42. package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -16
  43. package/corpus/templates/design/e2e/helpers.ts +2 -2
  44. package/dist/agent/run-store.d.ts.map +1 -1
  45. package/dist/agent/run-store.js +28 -6
  46. package/dist/agent/run-store.js.map +1 -1
  47. package/dist/client/require-session.d.ts +14 -0
  48. package/dist/client/require-session.d.ts.map +1 -1
  49. package/dist/client/require-session.js +19 -1
  50. package/dist/client/require-session.js.map +1 -1
  51. package/dist/client/sharing/ShareButton.d.ts +4 -2
  52. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  53. package/dist/client/sharing/ShareButton.js +3 -1
  54. package/dist/client/sharing/ShareButton.js.map +1 -1
  55. package/dist/collab/routes.d.ts +1 -1
  56. package/dist/collab/storage.d.ts.map +1 -1
  57. package/dist/collab/storage.js +31 -5
  58. package/dist/collab/storage.js.map +1 -1
  59. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  60. package/dist/observability/routes.d.ts +8 -8
  61. package/dist/resources/handlers.d.ts +2 -2
  62. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  63. package/dist/server/auth.d.ts.map +1 -1
  64. package/dist/server/auth.js +7 -0
  65. package/dist/server/auth.js.map +1 -1
  66. package/dist/server/transcribe-voice.d.ts +1 -1
  67. package/package.json +1 -1
@@ -40,13 +40,31 @@ export function buildSignInReturnHref() {
40
40
  const ret = window.location.pathname + window.location.search + window.location.hash;
41
41
  return `${base}?return=${encodeURIComponent(ret)}`;
42
42
  }
43
+ /**
44
+ * True when the browser is already sitting on the framework sign-in entry
45
+ * point. Redirecting to sign-in from here would append the current sign-in
46
+ * URL as a fresh `?return=`, re-encode it, and navigate again — an infinite
47
+ * loop of ever-growing `…sign-in?return=%252F…sign-in%253Freturn%253D…` URLs.
48
+ *
49
+ * This happens when the authenticated app shell (wrapped in `RequireSession`)
50
+ * is served at the sign-in path instead of the framework login HTML — e.g.
51
+ * under a base-path deploy where the SPA shell answers `/<app>/_agent-native/
52
+ * sign-in`. The sign-in page is the framework's job, not the gate's: never
53
+ * redirect to ourselves. Compared against `agentNativePath(...)` so it matches
54
+ * whether or not the app is mounted under a base path.
55
+ */
56
+ export function isOnSignInPage() {
57
+ if (typeof window === "undefined")
58
+ return false;
59
+ return window.location.pathname === agentNativePath("/_agent-native/sign-in");
60
+ }
43
61
  export function RequireSession({ children, fallback, redirect = true, signedOut, bypass = false, }) {
44
62
  const { session, isLoading } = useSession();
45
63
  // Guard against firing the redirect more than once (effect re-runs, React
46
64
  // StrictMode double-invoke) — a second navigation while the first is in
47
65
  // flight is harmless but noisy.
48
66
  const redirectedRef = useRef(false);
49
- const mustRedirect = !bypass && !isLoading && !session && redirect;
67
+ const mustRedirect = !bypass && !isLoading && !session && redirect && !isOnSignInPage();
50
68
  useEffect(() => {
51
69
  if (!mustRedirect)
52
70
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"require-session.js","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8B9C,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,GAAG,GACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3E,OAAO,GAAG,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,MAAM,GAAG,KAAK,GACM;IACpB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAI,MAAM;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACnC,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,SAAS;QAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;QAC3D,OAAO,4BAAG,SAAS,IAAI,IAAI,GAAI,CAAC;IAClC,CAAC;IACD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["/**\n * Client-side session gate for an authenticated app shell.\n *\n * Wrap a template's private app shell with <RequireSession> so a logged-out\n * visitor is sent to the framework sign-in page instead of being left staring\n * at an infinite loading spinner.\n *\n * Why this exists in addition to the server-side auth guard (`runAuthGuard`,\n * which serves the onboarding/sign-in HTML for unauthenticated requests):\n * the server guard only protects requests that actually reach the Nitro\n * function. A statically-served / CDN-cached SPA shell, or a client-side\n * (React Router) navigation made after the session expired, never re-hits the\n * guard — so the app boots with no session, every data query 401s, and the UI\n * sticks on its loading state forever. This component closes that gap by\n * resolving the session on the client and redirecting when there is none.\n *\n * Place it INSIDE your providers (so the fallback is themed) but AROUND the\n * routed app layout:\n *\n * <AppProviders ...>\n * <RequireSession>\n * <AppLayout><Outlet /></AppLayout>\n * </RequireSession>\n * </AppProviders>\n *\n * Templates with public/anonymous routes (share pages, embeds) must NOT wrap\n * their whole app — gate only the private subtree, or pass `bypass` for the\n * surfaces that authenticate by another mechanism.\n */\nimport React, { useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"./api-path.js\";\nimport { DefaultSpinner } from \"./DefaultSpinner.js\";\nimport { useSession } from \"./use-session.js\";\n\nexport interface RequireSessionProps {\n children: React.ReactNode;\n /**\n * Rendered while the session is being resolved and while a redirect is in\n * flight. Defaults to the framework `<DefaultSpinner />`.\n */\n fallback?: React.ReactNode;\n /**\n * When true (default), unauthenticated visitors are redirected to the\n * framework sign-in entry point (`/_agent-native/sign-in`) with a `return`\n * query pointing back at the current URL — so they land back here once\n * signed in. When false, `signedOut` is rendered instead and no navigation\n * happens.\n */\n redirect?: boolean;\n /**\n * Rendered for unauthenticated visitors when `redirect` is false. Ignored\n * when `redirect` is true.\n */\n signedOut?: React.ReactNode;\n /**\n * Skip the gate entirely and always render children. Use for surfaces that\n * authenticate by another mechanism (e.g. an embed/popout iframe carrying\n * its own token) so they are never bounced to the sign-in page.\n */\n bypass?: boolean;\n}\n\n/** Build the framework sign-in URL that returns to the current location. */\nexport function buildSignInReturnHref(): string {\n const base = agentNativePath(\"/_agent-native/sign-in\");\n if (typeof window === \"undefined\") return base;\n const ret =\n window.location.pathname + window.location.search + window.location.hash;\n return `${base}?return=${encodeURIComponent(ret)}`;\n}\n\nexport function RequireSession({\n children,\n fallback,\n redirect = true,\n signedOut,\n bypass = false,\n}: RequireSessionProps) {\n const { session, isLoading } = useSession();\n // Guard against firing the redirect more than once (effect re-runs, React\n // StrictMode double-invoke) — a second navigation while the first is in\n // flight is harmless but noisy.\n const redirectedRef = useRef(false);\n\n const mustRedirect = !bypass && !isLoading && !session && redirect;\n\n useEffect(() => {\n if (!mustRedirect) return;\n if (redirectedRef.current) return;\n if (typeof window === \"undefined\") return;\n redirectedRef.current = true;\n // `replace` (not `assign`) so the dead authenticated URL doesn't land in\n // history — pressing Back after signing in shouldn't bounce here again.\n window.location.replace(buildSignInReturnHref());\n }, [mustRedirect]);\n\n if (bypass) return <>{children}</>;\n // Still resolving, or redirect already in flight: show the loading fallback\n // rather than flashing app chrome the visitor can't use.\n if (isLoading) return <>{fallback ?? <DefaultSpinner />}</>;\n if (!session) {\n if (redirect) return <>{fallback ?? <DefaultSpinner />}</>;\n return <>{signedOut ?? null}</>;\n }\n return <>{children}</>;\n}\n"]}
1
+ {"version":3,"file":"require-session.js","sourceRoot":"","sources":["../../src/client/require-session.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA8B9C,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,GAAG,GACP,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3E,OAAO,GAAG,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,MAAM,GAAG,KAAK,GACM;IACpB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IAC5C,0EAA0E;IAC1E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,YAAY,GAChB,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAI,MAAM;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACnC,4EAA4E;IAC5E,yDAAyD;IACzD,IAAI,SAAS;QAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,OAAO,4BAAG,QAAQ,IAAI,KAAC,cAAc,KAAG,GAAI,CAAC;QAC3D,OAAO,4BAAG,SAAS,IAAI,IAAI,GAAI,CAAC;IAClC,CAAC;IACD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["/**\n * Client-side session gate for an authenticated app shell.\n *\n * Wrap a template's private app shell with <RequireSession> so a logged-out\n * visitor is sent to the framework sign-in page instead of being left staring\n * at an infinite loading spinner.\n *\n * Why this exists in addition to the server-side auth guard (`runAuthGuard`,\n * which serves the onboarding/sign-in HTML for unauthenticated requests):\n * the server guard only protects requests that actually reach the Nitro\n * function. A statically-served / CDN-cached SPA shell, or a client-side\n * (React Router) navigation made after the session expired, never re-hits the\n * guard — so the app boots with no session, every data query 401s, and the UI\n * sticks on its loading state forever. This component closes that gap by\n * resolving the session on the client and redirecting when there is none.\n *\n * Place it INSIDE your providers (so the fallback is themed) but AROUND the\n * routed app layout:\n *\n * <AppProviders ...>\n * <RequireSession>\n * <AppLayout><Outlet /></AppLayout>\n * </RequireSession>\n * </AppProviders>\n *\n * Templates with public/anonymous routes (share pages, embeds) must NOT wrap\n * their whole app — gate only the private subtree, or pass `bypass` for the\n * surfaces that authenticate by another mechanism.\n */\nimport React, { useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"./api-path.js\";\nimport { DefaultSpinner } from \"./DefaultSpinner.js\";\nimport { useSession } from \"./use-session.js\";\n\nexport interface RequireSessionProps {\n children: React.ReactNode;\n /**\n * Rendered while the session is being resolved and while a redirect is in\n * flight. Defaults to the framework `<DefaultSpinner />`.\n */\n fallback?: React.ReactNode;\n /**\n * When true (default), unauthenticated visitors are redirected to the\n * framework sign-in entry point (`/_agent-native/sign-in`) with a `return`\n * query pointing back at the current URL — so they land back here once\n * signed in. When false, `signedOut` is rendered instead and no navigation\n * happens.\n */\n redirect?: boolean;\n /**\n * Rendered for unauthenticated visitors when `redirect` is false. Ignored\n * when `redirect` is true.\n */\n signedOut?: React.ReactNode;\n /**\n * Skip the gate entirely and always render children. Use for surfaces that\n * authenticate by another mechanism (e.g. an embed/popout iframe carrying\n * its own token) so they are never bounced to the sign-in page.\n */\n bypass?: boolean;\n}\n\n/** Build the framework sign-in URL that returns to the current location. */\nexport function buildSignInReturnHref(): string {\n const base = agentNativePath(\"/_agent-native/sign-in\");\n if (typeof window === \"undefined\") return base;\n const ret =\n window.location.pathname + window.location.search + window.location.hash;\n return `${base}?return=${encodeURIComponent(ret)}`;\n}\n\n/**\n * True when the browser is already sitting on the framework sign-in entry\n * point. Redirecting to sign-in from here would append the current sign-in\n * URL as a fresh `?return=`, re-encode it, and navigate again — an infinite\n * loop of ever-growing `…sign-in?return=%252F…sign-in%253Freturn%253D…` URLs.\n *\n * This happens when the authenticated app shell (wrapped in `RequireSession`)\n * is served at the sign-in path instead of the framework login HTML — e.g.\n * under a base-path deploy where the SPA shell answers `/<app>/_agent-native/\n * sign-in`. The sign-in page is the framework's job, not the gate's: never\n * redirect to ourselves. Compared against `agentNativePath(...)` so it matches\n * whether or not the app is mounted under a base path.\n */\nexport function isOnSignInPage(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.location.pathname === agentNativePath(\"/_agent-native/sign-in\");\n}\n\nexport function RequireSession({\n children,\n fallback,\n redirect = true,\n signedOut,\n bypass = false,\n}: RequireSessionProps) {\n const { session, isLoading } = useSession();\n // Guard against firing the redirect more than once (effect re-runs, React\n // StrictMode double-invoke) — a second navigation while the first is in\n // flight is harmless but noisy.\n const redirectedRef = useRef(false);\n\n const mustRedirect =\n !bypass && !isLoading && !session && redirect && !isOnSignInPage();\n\n useEffect(() => {\n if (!mustRedirect) return;\n if (redirectedRef.current) return;\n if (typeof window === \"undefined\") return;\n redirectedRef.current = true;\n // `replace` (not `assign`) so the dead authenticated URL doesn't land in\n // history — pressing Back after signing in shouldn't bounce here again.\n window.location.replace(buildSignInReturnHref());\n }, [mustRedirect]);\n\n if (bypass) return <>{children}</>;\n // Still resolving, or redirect already in flight: show the loading fallback\n // rather than flashing app chrome the visitor can't use.\n if (isLoading) return <>{fallback ?? <DefaultSpinner />}</>;\n if (!session) {\n if (redirect) return <>{fallback ?? <DefaultSpinner />}</>;\n return <>{signedOut ?? null}</>;\n }\n return <>{children}</>;\n}\n"]}
@@ -6,8 +6,10 @@ export interface ShareButtonProps {
6
6
  /** @deprecated No longer affects rendering — trigger always says
7
7
  * "Share". Kept for callsite compatibility. */
8
8
  variant?: "compact" | "label";
9
- /** Optional trigger style. Defaults to the Google-Docs-style "Share" label. */
10
- trigger?: "label" | "icon";
9
+ /** Optional trigger style. Defaults to the Google-Docs-style "Share" label.
10
+ * Use "label-icon" to render a leading share glyph alongside the label so
11
+ * the trigger matches adjacent icon+label buttons; "icon" is icon-only. */
12
+ trigger?: "label" | "icon" | "label-icon";
11
13
  /** @deprecated Label triggers no longer render a visibility/share glyph. */
12
14
  hideTriggerIcon?: boolean;
13
15
  /** Optional className applied to the trigger button. */
@@ -1 +1 @@
1
- {"version":3,"file":"ShareButton.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShareButton.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":"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"}
@@ -149,8 +149,10 @@ export function ShareButton(props) {
149
149
  });
150
150
  };
151
151
  // The default trigger stays text-only; the icon trigger keeps the share glyph.
152
+ // "label-icon" renders the glyph alongside the label for icon+label parity.
152
153
  const iconOnly = props.trigger === "icon";
153
- return (_jsxs(Popover, { open: open, onOpenChange: handleOpenChange, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn(iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM, props.triggerClassName), "aria-label": iconOnly ? "Share" : undefined, children: [iconOnly ? _jsx(IconShare3, { size: 16, strokeWidth: 1.75 }) : null, !iconOnly && _jsx("span", { children: "Share" })] }) }), _jsx(PopoverContent, { align: "end", sideOffset: 6, "data-agent-native-share-overlay": "", className: cn("z-[2000] w-[min(460px,92vw)] rounded-lg p-4 shadow-lg", SHARE_POPOVER_SURFACE, props.popoverClassName), onOpenAutoFocus: (e) => e.preventDefault(), onInteractOutside: handleSharePopoverInteractOutside, children: _jsx(SharePanel, { ...props, sharesQuery: sharesQuery, visibilityOverride: pendingVisibility, onVisibilityChange: handleVisibilityChange, onClose: () => handleOpenChange(false), activeTab: activeShareTab, onTabChange: handleShareTabChange }) })] }));
154
+ const showLabelIcon = props.trigger === "label-icon";
155
+ return (_jsxs(Popover, { open: open, onOpenChange: handleOpenChange, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn(iconOnly ? BUTTON_GHOST_ICON : BUTTON_OUTLINE_SM, props.triggerClassName), "aria-label": iconOnly ? "Share" : undefined, children: [iconOnly || showLabelIcon ? (_jsx(IconShare3, { size: 16, strokeWidth: 1.75 })) : null, !iconOnly && _jsx("span", { children: "Share" })] }) }), _jsx(PopoverContent, { align: "end", sideOffset: 6, "data-agent-native-share-overlay": "", className: cn("z-[2000] w-[min(460px,92vw)] rounded-lg p-4 shadow-lg", SHARE_POPOVER_SURFACE, props.popoverClassName), onOpenAutoFocus: (e) => e.preventDefault(), onInteractOutside: handleSharePopoverInteractOutside, children: _jsx(SharePanel, { ...props, sharesQuery: sharesQuery, visibilityOverride: pendingVisibility, onVisibilityChange: handleVisibilityChange, onClose: () => handleOpenChange(false), activeTab: activeShareTab, onTabChange: handleShareTabChange }) })] }));
154
156
  }
155
157
  function useOrgMemberSearch(query, enabled) {
156
158
  const search = query.trim();
@@ -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 IconBuilding,\n IconWorld,\n IconTrash,\n IconCheck,\n IconChevronDown,\n IconCopy,\n IconLoader2,\n IconSearch,\n IconSearchOff,\n IconShare3,\n} from \"@tabler/icons-react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useCallback,\n type ComponentPropsWithoutRef,\n useEffect,\n useId,\n useMemo,\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 { agentNativePath } from \"../api-path.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { useActionQuery, useActionMutation } from \"../use-action.js\";\nimport { cn } from \"../utils.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 the Google-Docs-style \"Share\" label. */\n trigger?: \"label\" | \"icon\";\n /** @deprecated Label triggers no longer render a visibility/share glyph. */\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 = \"private\" | \"org\" | \"public\";\ntype Role = \"viewer\" | \"editor\" | \"admin\";\ntype HideInSearchControl = NonNullable<ShareButtonProps[\"hideInSearchControl\"]>;\n\ninterface Share {\n id: string;\n principalType: \"user\" | \"org\";\n principalId: string;\n role: Role;\n}\n\ninterface SharesPolicy {\n /** When false, the visibility picker hides \"Public\". Default: true. */\n allowPublic: boolean;\n /** When true, individual user shares must target an org member or pending invitee. Default: false. */\n requireOrgMemberForUserShares: boolean;\n}\n\ninterface SharesResponse {\n ownerEmail: string | null;\n orgId: string | null;\n visibility: Visibility | null;\n role?: \"owner\" | Role;\n shares: Share[];\n /** Server-declared policy for what visibilities and share targets are allowed. */\n policy?: SharesPolicy;\n}\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 MEMBER_SUGGESTION_LIMIT = 25;\nconst MEMBER_SEARCH_DEBOUNCE_MS = 140;\n\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: IconBuilding,\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 [open, setOpen] = useState(false);\n const shareTabDefaultValue = props.shareTabs?.defaultValue ?? \"share\";\n const [activeShareTab, setActiveShareTab] = useState(shareTabDefaultValue);\n const [pendingVisibility, setPendingVisibility] = useState<Visibility | null>(\n null,\n );\n const appliedDefaultOpenRef = useRef(false);\n const visibilityRequestId = useRef(0);\n const queryClient = useQueryClient();\n const shareQueryParams = useMemo(\n () => ({\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n }),\n [props.resourceType, props.resourceId],\n );\n const shareQueryKey = useMemo(\n () => [\"action\", \"list-resource-shares\", shareQueryParams] as const,\n [shareQueryParams],\n );\n const setVisibility = useActionMutation(\"set-resource-visibility\");\n const sharesQuery = useActionQuery<SharesResponse>(\n \"list-resource-shares\",\n shareQueryParams,\n );\n const handleOpenChange = (v: boolean) => {\n setOpen(v);\n props.onOpenChange?.(v);\n if (v) {\n setActiveShareTab(shareTabDefaultValue);\n props.shareTabs?.onValueChange?.(shareTabDefaultValue);\n if (pendingVisibility === null) sharesQuery.refetch();\n }\n };\n\n const handleShareTabChange = (value: string) => {\n setActiveShareTab(value);\n props.shareTabs?.onValueChange?.(value);\n };\n\n useEffect(() => {\n if (!props.defaultOpen || appliedDefaultOpenRef.current) return;\n appliedDefaultOpenRef.current = true;\n handleOpenChange(true);\n });\n\n const updateCachedVisibility = (visibility: Visibility) => {\n queryClient.setQueryData<SharesResponse>(shareQueryKey, (prev) =>\n prev ? { ...prev, visibility } : prev,\n );\n };\n\n const handleVisibilityChange = (next: Visibility): Promise<void> => {\n const requestId = ++visibilityRequestId.current;\n const previous = queryClient.getQueryData<SharesResponse>(shareQueryKey);\n setPendingVisibility(next);\n updateCachedVisibility(next);\n return new Promise((resolve, reject) => {\n setVisibility.mutate(\n {\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n visibility: next,\n } as any,\n {\n onSuccess: (result: any) => {\n if (requestId === visibilityRequestId.current) {\n updateCachedVisibility(\n (result?.visibility as Visibility | undefined) ?? next,\n );\n }\n sharesQuery\n .refetch()\n .then(() => resolve())\n .catch(reject)\n .finally(() => {\n if (requestId === visibilityRequestId.current) {\n setPendingVisibility(null);\n }\n });\n },\n onError: (error) => {\n if (requestId === visibilityRequestId.current) {\n setPendingVisibility(null);\n if (previous) {\n queryClient.setQueryData(shareQueryKey, previous);\n } else {\n queryClient.invalidateQueries({ queryKey: shareQueryKey });\n }\n }\n reject(error);\n },\n },\n );\n });\n };\n\n // The default trigger stays text-only; the icon trigger keeps the share glyph.\n const iconOnly = props.trigger === \"icon\";\n\n return (\n <Popover open={open} onOpenChange={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={iconOnly ? \"Share\" : undefined}\n >\n {iconOnly ? <IconShare3 size={16} strokeWidth={1.75} /> : null}\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\n {...props}\n sharesQuery={sharesQuery}\n visibilityOverride={pendingVisibility}\n onVisibilityChange={handleVisibilityChange}\n onClose={() => handleOpenChange(false)}\n activeTab={activeShareTab}\n onTabChange={handleShareTabChange}\n />\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface OrgMember {\n email: string;\n name?: string | null;\n role?: string | null;\n joinedAt?: number | null;\n}\n\ninterface OrgMembersResponse {\n members: OrgMember[];\n hasMore?: boolean;\n nextOffset?: number | null;\n}\n\ninterface OrgMemberSearch {\n members: OrgMember[];\n isLoading: boolean;\n isLoadingMore: boolean;\n hasMore: boolean;\n error: boolean;\n loadMore: () => void;\n}\n\nfunction useOrgMemberSearch(query: string, enabled: boolean): OrgMemberSearch {\n const search = query.trim();\n const [members, setMembers] = useState<OrgMember[]>([]);\n const [nextOffset, setNextOffset] = useState<number | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [error, setError] = useState(false);\n const requestIdRef = useRef(0);\n const abortRef = useRef<AbortController | null>(null);\n\n const fetchPage = useCallback(\n (offset: number, append: boolean) => {\n if (!enabled) return;\n const requestId = ++requestIdRef.current;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n if (append) {\n setIsLoadingMore(true);\n } else {\n setIsLoading(true);\n setMembers([]);\n setNextOffset(null);\n setHasMore(false);\n }\n setError(false);\n\n const params = new URLSearchParams();\n if (search) params.set(\"search\", search);\n params.set(\"limit\", String(MEMBER_SUGGESTION_LIMIT));\n params.set(\"offset\", String(offset));\n\n fetch(`${agentNativePath(\"/_agent-native/org/members\")}?${params}`, {\n credentials: \"include\",\n signal: controller.signal,\n })\n .then((response) => {\n if (!response.ok) throw new Error(\"Could not load people\");\n return response.json() as Promise<OrgMembersResponse>;\n })\n .then((data) => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n const nextMembers = normalizeMembers(data?.members);\n setMembers((prev) =>\n append ? mergeMembers(prev, nextMembers) : nextMembers,\n );\n setHasMore(data?.hasMore === true);\n setNextOffset(\n typeof data?.nextOffset === \"number\" ? data.nextOffset : null,\n );\n })\n .catch((err) => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n setError(true);\n setHasMore(false);\n setNextOffset(null);\n if (!append) setMembers([]);\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[ShareButton] org member search failed\", err);\n }\n })\n .finally(() => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n if (append) setIsLoadingMore(false);\n else setIsLoading(false);\n });\n },\n [enabled, search],\n );\n\n useEffect(() => {\n if (!enabled) {\n abortRef.current?.abort();\n setMembers([]);\n setNextOffset(null);\n setHasMore(false);\n setIsLoading(false);\n setIsLoadingMore(false);\n setError(false);\n return;\n }\n const timeout = setTimeout(\n () => fetchPage(0, false),\n search ? MEMBER_SEARCH_DEBOUNCE_MS : 0,\n );\n return () => {\n clearTimeout(timeout);\n abortRef.current?.abort();\n };\n }, [enabled, fetchPage, search]);\n\n const loadMore = useCallback(() => {\n if (!enabled || !hasMore || nextOffset === null) return;\n if (isLoading || isLoadingMore) return;\n fetchPage(nextOffset, true);\n }, [enabled, fetchPage, hasMore, isLoading, isLoadingMore, nextOffset]);\n\n return {\n members,\n isLoading,\n isLoadingMore,\n hasMore,\n error,\n loadMore,\n };\n}\n\nfunction normalizeMembers(value: unknown): OrgMember[] {\n if (!Array.isArray(value)) return [];\n return value\n .map((m: any) => ({\n email: typeof m?.email === \"string\" ? m.email : \"\",\n name: typeof m?.name === \"string\" ? m.name : null,\n role: typeof m?.role === \"string\" ? m.role : null,\n joinedAt:\n typeof m?.joinedAt === \"number\"\n ? m.joinedAt\n : typeof m?.joined_at === \"number\"\n ? m.joined_at\n : null,\n }))\n .filter((m) => m.email);\n}\n\nfunction mergeMembers(existing: OrgMember[], next: OrgMember[]): OrgMember[] {\n const seen = new Set(existing.map((m) => m.email.toLowerCase()));\n const merged = [...existing];\n for (const member of next) {\n const key = member.email.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n merged.push(member);\n }\n return merged;\n}\n\nfunction SharePanel(\n props: ShareButtonProps & {\n sharesQuery: ReturnType<typeof useActionQuery<SharesResponse>>;\n visibilityOverride: Visibility | null;\n onVisibilityChange: (visibility: Visibility) => Promise<void>;\n onClose: () => void;\n activeTab: string;\n onTabChange: (value: string) => void;\n },\n) {\n const {\n resourceType,\n resourceId,\n resourceTitle,\n sharesQuery,\n visibilityOverride,\n onVisibilityChange,\n onClose,\n } = props;\n\n const share = useActionMutation(\"share-resource\");\n const unshare = useActionMutation(\"unshare-resource\");\n\n const [email, setEmail] = useState(\"\");\n const [role, setRole] = useState<Role>(\"viewer\");\n const [notifyPeople, setNotifyPeople] = useState(true);\n const [shareError, setShareError] = useState<string | null>(null);\n const [suggestionsOpen, setSuggestionsOpen] = useState(false);\n const hasInviteEmail = email.trim().length > 0;\n\n // Optimistic overlays so clicks feel instant.\n const [pendingAdds, setPendingAdds] = useState<Share[]>([]);\n const [pendingRemoves, setPendingRemoves] = useState<Set<string>>(new Set());\n const [roleOverrides, setRoleOverrides] = useState<Record<string, Role>>({});\n // Principals with an in-flight share/unshare mutation. We disable the\n // role dropdown and the trash button for any share in this set so a\n // user can't race a role-change against a remove (which would otherwise\n // let the upsert silently re-grant access after the delete landed), and\n // can't rapid-fire two creates for the same pending add.\n const [inFlight, setInFlight] = useState<Set<string>>(new Set());\n const addInFlight = (k: string) =>\n setInFlight((prev) => new Set(prev).add(k));\n const clearInFlight = (k: string) =>\n setInFlight((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n\n useEffect(() => {\n sharesQuery.refetch();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const data = sharesQuery.data;\n const isLoading = data === undefined;\n const policy: SharesPolicy = data?.policy ?? {\n allowPublic: true,\n requireOrgMemberForUserShares: false,\n };\n const visibility: Visibility =\n visibilityOverride ?? (data?.visibility as Visibility | null) ?? \"private\";\n const canManage = data?.role === \"owner\" || data?.role === \"admin\";\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 serverShares = data?.shares ?? [];\n const shares: Share[] = [\n ...serverShares\n .filter((s) => !pendingRemoves.has(keyOf(s)))\n .map((s) => ({ ...s, role: roleOverrides[keyOf(s)] ?? s.role })),\n ...pendingAdds,\n ];\n const memberSearch = useOrgMemberSearch(email, canManage && suggestionsOpen);\n const excludedMemberEmails = new Set<string>();\n if (data?.ownerEmail) excludedMemberEmails.add(data.ownerEmail.toLowerCase());\n for (const s of shares) {\n if (s.principalType === \"user\") {\n excludedMemberEmails.add(s.principalId.toLowerCase());\n }\n }\n const memberSuggestions = memberSearch.members.filter(\n (m) => !excludedMemberEmails.has(m.email.toLowerCase()),\n );\n const knownMembers = memberSearch.members;\n\n const handleVisibility = (next: Visibility) => {\n if (next === visibility) return;\n setShareError(null);\n void onVisibilityChange(next).catch((err) => {\n setShareError(extractShareErrorMessage(err));\n });\n };\n\n const handleHideInSearch = () => {\n const control = props.hideInSearchControl;\n if (!control || control.pending || !canManage) return;\n setShareError(null);\n try {\n Promise.resolve(control.onCheckedChange(!control.checked)).catch(\n (err) => {\n setShareError(extractShareErrorMessage(err));\n },\n );\n } catch (err) {\n setShareError(extractShareErrorMessage(err));\n }\n };\n\n const handleAdd = () => {\n const trimmed = email.trim();\n if (!trimmed) return;\n const optimistic: Share = {\n id: `pending-${trimmed}`,\n principalType: \"user\",\n principalId: trimmed,\n role,\n };\n const k = keyOf(optimistic);\n // Ignore duplicate submits while an add for the same principal is in flight.\n if (inFlight.has(k)) return;\n setShareError(null);\n setPendingAdds((p) => [...p, optimistic]);\n setEmail(\"\");\n setSuggestionsOpen(false);\n addInFlight(k);\n share.mutate(\n {\n resourceType,\n resourceId,\n principalType: \"user\",\n principalId: trimmed,\n role,\n notify: notifyPeople,\n resourceUrl: getNotificationUrl(props.shareUrl),\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));\n clearInFlight(k);\n });\n },\n onError: (err: any) => {\n setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));\n clearInFlight(k);\n setEmail(trimmed);\n setShareError(extractShareErrorMessage(err));\n },\n },\n );\n };\n\n const handleChangeRole = (s: Share, next: Role) => {\n if (s.role === next) return;\n const k = keyOf(s);\n // Don't stack a role change on top of an in-flight add/remove/role\n // change for the same principal — it can race with unshare and end up\n // re-granting access after a delete. UI already disables the control,\n // but belt-and-suspenders here too.\n if (inFlight.has(k)) return;\n setRoleOverrides((prev) => ({ ...prev, [k]: next }));\n addInFlight(k);\n // share-resource is upsert: calling with same principal + new role\n // updates the existing share row. See sharing/actions/share-resource.ts.\n share.mutate(\n {\n resourceType,\n resourceId,\n principalType: s.principalType,\n principalId: s.principalId,\n role: next,\n notify: false,\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setRoleOverrides((prev) => {\n const { [k]: _, ...rest } = prev;\n return rest;\n });\n clearInFlight(k);\n });\n },\n onError: () => {\n setRoleOverrides((prev) => {\n const { [k]: _, ...rest } = prev;\n return rest;\n });\n clearInFlight(k);\n },\n },\n );\n };\n\n const handleRemove = (s: Share) => {\n const k = keyOf(s);\n // If any other mutation is in flight for this principal, don't start a\n // remove — it can interleave with an upsert and leave the row in place.\n // The UI already disables the trash button when inFlight.has(k).\n if (inFlight.has(k)) return;\n setPendingRemoves((prev) => new Set(prev).add(k));\n addInFlight(k);\n unshare.mutate(\n {\n resourceType,\n resourceId,\n principalType: s.principalType,\n principalId: s.principalId,\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setPendingRemoves((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n clearInFlight(k);\n });\n },\n onError: () => {\n setPendingRemoves((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n clearInFlight(k);\n },\n },\n );\n };\n\n const handleDone = () => {\n if (canManage && hasInviteEmail) handleAdd();\n onClose();\n };\n\n const titleText = resourceTitle\n ? `Share \"${resourceTitle}\"`\n : `Share ${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 type=\"button\" onClick={onClose} className={BUTTON_PRIMARY_SM}>\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={email}\n open={suggestionsOpen}\n onOpenChange={setSuggestionsOpen}\n onValueChange={(next) => {\n setEmail(next);\n if (shareError) setShareError(null);\n }}\n onSelectMember={(member) => {\n setEmail(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 </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={\n s.principalType === \"org\"\n ? s.principalId\n : displayName(s.principalId, knownMembers)\n }\n org={s.principalType === \"org\"}\n />\n <span className=\"flex-1 min-w-0 truncate\">\n {s.principalType === \"org\"\n ? s.principalId\n : displayName(s.principalId, 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 {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 === props.activeTab)\n ? props.activeTab\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={() => props.onTabChange(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 \"Public\" option is omitted. Default: true. */\n allowPublic?: boolean;\n}) {\n const allowPublic = props.allowPublic !== false;\n const current = visibilityMeta(props.value, props.visibilityCopy);\n const options = (Object.keys(VIS_META) as Visibility[]).filter(\n (k) => allowPublic || k !== \"public\",\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 ? <IconBuilding 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\n/**\n * Pull a user-readable error message out of a failed action call. Action\n * routes surface server-side errors as a JSON `{ error: string }` body that\n * the `useActionMutation` wrapper re-throws as\n * `Error(\"Action <name> failed: <message>\")`. Strip the framework prefix so\n * what reaches the user is the underlying server message.\n */\nfunction extractShareErrorMessage(err: unknown): string {\n const fallback = \"Could not update sharing — please try again.\";\n const pickRaw = (): string | null => {\n if (!err) return null;\n if (err instanceof Error) return err.message?.trim() || null;\n if (typeof err === \"string\") return err.trim() || null;\n if (typeof err === \"object\") {\n const any = err as { error?: unknown; message?: unknown };\n if (typeof any.error === \"string\" && any.error.trim()) return any.error;\n if (typeof any.message === \"string\" && any.message.trim())\n return any.message;\n }\n return null;\n };\n const raw = pickRaw();\n if (!raw || raw.toLowerCase() === \"failed to fetch\") return fallback;\n const stripped = raw.replace(/^Action\\s+[\\w-]+\\s+failed:\\s*/i, \"\");\n return stripped || fallback;\n}\nfunction getNotificationUrl(explicit?: string): string | undefined {\n if (explicit) return explicit;\n if (typeof window === \"undefined\") return undefined;\n return window.location.href;\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 displayName(email: string, members: OrgMember[]): string {\n const match = members.find((m) => m.email === email);\n if (match?.name && match.name.trim()) return match.name;\n return email;\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 IconBuilding,\n IconWorld,\n IconTrash,\n IconCheck,\n IconChevronDown,\n IconCopy,\n IconLoader2,\n IconSearch,\n IconSearchOff,\n IconShare3,\n} from \"@tabler/icons-react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useCallback,\n type ComponentPropsWithoutRef,\n useEffect,\n useId,\n useMemo,\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 { agentNativePath } from \"../api-path.js\";\nimport { writeClipboardText } from \"../clipboard.js\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\nimport { useActionQuery, useActionMutation } from \"../use-action.js\";\nimport { cn } from \"../utils.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 the Google-Docs-style \"Share\" label.\n * Use \"label-icon\" to render a leading share glyph alongside the label so\n * the trigger matches adjacent icon+label buttons; \"icon\" is icon-only. */\n trigger?: \"label\" | \"icon\" | \"label-icon\";\n /** @deprecated Label triggers no longer render a visibility/share glyph. */\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 = \"private\" | \"org\" | \"public\";\ntype Role = \"viewer\" | \"editor\" | \"admin\";\ntype HideInSearchControl = NonNullable<ShareButtonProps[\"hideInSearchControl\"]>;\n\ninterface Share {\n id: string;\n principalType: \"user\" | \"org\";\n principalId: string;\n role: Role;\n}\n\ninterface SharesPolicy {\n /** When false, the visibility picker hides \"Public\". Default: true. */\n allowPublic: boolean;\n /** When true, individual user shares must target an org member or pending invitee. Default: false. */\n requireOrgMemberForUserShares: boolean;\n}\n\ninterface SharesResponse {\n ownerEmail: string | null;\n orgId: string | null;\n visibility: Visibility | null;\n role?: \"owner\" | Role;\n shares: Share[];\n /** Server-declared policy for what visibilities and share targets are allowed. */\n policy?: SharesPolicy;\n}\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 MEMBER_SUGGESTION_LIMIT = 25;\nconst MEMBER_SEARCH_DEBOUNCE_MS = 140;\n\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: IconBuilding,\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 [open, setOpen] = useState(false);\n const shareTabDefaultValue = props.shareTabs?.defaultValue ?? \"share\";\n const [activeShareTab, setActiveShareTab] = useState(shareTabDefaultValue);\n const [pendingVisibility, setPendingVisibility] = useState<Visibility | null>(\n null,\n );\n const appliedDefaultOpenRef = useRef(false);\n const visibilityRequestId = useRef(0);\n const queryClient = useQueryClient();\n const shareQueryParams = useMemo(\n () => ({\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n }),\n [props.resourceType, props.resourceId],\n );\n const shareQueryKey = useMemo(\n () => [\"action\", \"list-resource-shares\", shareQueryParams] as const,\n [shareQueryParams],\n );\n const setVisibility = useActionMutation(\"set-resource-visibility\");\n const sharesQuery = useActionQuery<SharesResponse>(\n \"list-resource-shares\",\n shareQueryParams,\n );\n const handleOpenChange = (v: boolean) => {\n setOpen(v);\n props.onOpenChange?.(v);\n if (v) {\n setActiveShareTab(shareTabDefaultValue);\n props.shareTabs?.onValueChange?.(shareTabDefaultValue);\n if (pendingVisibility === null) sharesQuery.refetch();\n }\n };\n\n const handleShareTabChange = (value: string) => {\n setActiveShareTab(value);\n props.shareTabs?.onValueChange?.(value);\n };\n\n useEffect(() => {\n if (!props.defaultOpen || appliedDefaultOpenRef.current) return;\n appliedDefaultOpenRef.current = true;\n handleOpenChange(true);\n });\n\n const updateCachedVisibility = (visibility: Visibility) => {\n queryClient.setQueryData<SharesResponse>(shareQueryKey, (prev) =>\n prev ? { ...prev, visibility } : prev,\n );\n };\n\n const handleVisibilityChange = (next: Visibility): Promise<void> => {\n const requestId = ++visibilityRequestId.current;\n const previous = queryClient.getQueryData<SharesResponse>(shareQueryKey);\n setPendingVisibility(next);\n updateCachedVisibility(next);\n return new Promise((resolve, reject) => {\n setVisibility.mutate(\n {\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n visibility: next,\n } as any,\n {\n onSuccess: (result: any) => {\n if (requestId === visibilityRequestId.current) {\n updateCachedVisibility(\n (result?.visibility as Visibility | undefined) ?? next,\n );\n }\n sharesQuery\n .refetch()\n .then(() => resolve())\n .catch(reject)\n .finally(() => {\n if (requestId === visibilityRequestId.current) {\n setPendingVisibility(null);\n }\n });\n },\n onError: (error) => {\n if (requestId === visibilityRequestId.current) {\n setPendingVisibility(null);\n if (previous) {\n queryClient.setQueryData(shareQueryKey, previous);\n } else {\n queryClient.invalidateQueries({ queryKey: shareQueryKey });\n }\n }\n reject(error);\n },\n },\n );\n });\n };\n\n // The default trigger stays text-only; the icon trigger keeps the share glyph.\n // \"label-icon\" renders the glyph alongside the label for icon+label parity.\n const iconOnly = props.trigger === \"icon\";\n const showLabelIcon = props.trigger === \"label-icon\";\n\n return (\n <Popover open={open} onOpenChange={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={iconOnly ? \"Share\" : undefined}\n >\n {iconOnly || showLabelIcon ? (\n <IconShare3 size={16} strokeWidth={1.75} />\n ) : null}\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\n {...props}\n sharesQuery={sharesQuery}\n visibilityOverride={pendingVisibility}\n onVisibilityChange={handleVisibilityChange}\n onClose={() => handleOpenChange(false)}\n activeTab={activeShareTab}\n onTabChange={handleShareTabChange}\n />\n </PopoverContent>\n </Popover>\n );\n}\n\ninterface OrgMember {\n email: string;\n name?: string | null;\n role?: string | null;\n joinedAt?: number | null;\n}\n\ninterface OrgMembersResponse {\n members: OrgMember[];\n hasMore?: boolean;\n nextOffset?: number | null;\n}\n\ninterface OrgMemberSearch {\n members: OrgMember[];\n isLoading: boolean;\n isLoadingMore: boolean;\n hasMore: boolean;\n error: boolean;\n loadMore: () => void;\n}\n\nfunction useOrgMemberSearch(query: string, enabled: boolean): OrgMemberSearch {\n const search = query.trim();\n const [members, setMembers] = useState<OrgMember[]>([]);\n const [nextOffset, setNextOffset] = useState<number | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const [error, setError] = useState(false);\n const requestIdRef = useRef(0);\n const abortRef = useRef<AbortController | null>(null);\n\n const fetchPage = useCallback(\n (offset: number, append: boolean) => {\n if (!enabled) return;\n const requestId = ++requestIdRef.current;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n if (append) {\n setIsLoadingMore(true);\n } else {\n setIsLoading(true);\n setMembers([]);\n setNextOffset(null);\n setHasMore(false);\n }\n setError(false);\n\n const params = new URLSearchParams();\n if (search) params.set(\"search\", search);\n params.set(\"limit\", String(MEMBER_SUGGESTION_LIMIT));\n params.set(\"offset\", String(offset));\n\n fetch(`${agentNativePath(\"/_agent-native/org/members\")}?${params}`, {\n credentials: \"include\",\n signal: controller.signal,\n })\n .then((response) => {\n if (!response.ok) throw new Error(\"Could not load people\");\n return response.json() as Promise<OrgMembersResponse>;\n })\n .then((data) => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n const nextMembers = normalizeMembers(data?.members);\n setMembers((prev) =>\n append ? mergeMembers(prev, nextMembers) : nextMembers,\n );\n setHasMore(data?.hasMore === true);\n setNextOffset(\n typeof data?.nextOffset === \"number\" ? data.nextOffset : null,\n );\n })\n .catch((err) => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n setError(true);\n setHasMore(false);\n setNextOffset(null);\n if (!append) setMembers([]);\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[ShareButton] org member search failed\", err);\n }\n })\n .finally(() => {\n if (controller.signal.aborted || requestId !== requestIdRef.current)\n return;\n if (append) setIsLoadingMore(false);\n else setIsLoading(false);\n });\n },\n [enabled, search],\n );\n\n useEffect(() => {\n if (!enabled) {\n abortRef.current?.abort();\n setMembers([]);\n setNextOffset(null);\n setHasMore(false);\n setIsLoading(false);\n setIsLoadingMore(false);\n setError(false);\n return;\n }\n const timeout = setTimeout(\n () => fetchPage(0, false),\n search ? MEMBER_SEARCH_DEBOUNCE_MS : 0,\n );\n return () => {\n clearTimeout(timeout);\n abortRef.current?.abort();\n };\n }, [enabled, fetchPage, search]);\n\n const loadMore = useCallback(() => {\n if (!enabled || !hasMore || nextOffset === null) return;\n if (isLoading || isLoadingMore) return;\n fetchPage(nextOffset, true);\n }, [enabled, fetchPage, hasMore, isLoading, isLoadingMore, nextOffset]);\n\n return {\n members,\n isLoading,\n isLoadingMore,\n hasMore,\n error,\n loadMore,\n };\n}\n\nfunction normalizeMembers(value: unknown): OrgMember[] {\n if (!Array.isArray(value)) return [];\n return value\n .map((m: any) => ({\n email: typeof m?.email === \"string\" ? m.email : \"\",\n name: typeof m?.name === \"string\" ? m.name : null,\n role: typeof m?.role === \"string\" ? m.role : null,\n joinedAt:\n typeof m?.joinedAt === \"number\"\n ? m.joinedAt\n : typeof m?.joined_at === \"number\"\n ? m.joined_at\n : null,\n }))\n .filter((m) => m.email);\n}\n\nfunction mergeMembers(existing: OrgMember[], next: OrgMember[]): OrgMember[] {\n const seen = new Set(existing.map((m) => m.email.toLowerCase()));\n const merged = [...existing];\n for (const member of next) {\n const key = member.email.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n merged.push(member);\n }\n return merged;\n}\n\nfunction SharePanel(\n props: ShareButtonProps & {\n sharesQuery: ReturnType<typeof useActionQuery<SharesResponse>>;\n visibilityOverride: Visibility | null;\n onVisibilityChange: (visibility: Visibility) => Promise<void>;\n onClose: () => void;\n activeTab: string;\n onTabChange: (value: string) => void;\n },\n) {\n const {\n resourceType,\n resourceId,\n resourceTitle,\n sharesQuery,\n visibilityOverride,\n onVisibilityChange,\n onClose,\n } = props;\n\n const share = useActionMutation(\"share-resource\");\n const unshare = useActionMutation(\"unshare-resource\");\n\n const [email, setEmail] = useState(\"\");\n const [role, setRole] = useState<Role>(\"viewer\");\n const [notifyPeople, setNotifyPeople] = useState(true);\n const [shareError, setShareError] = useState<string | null>(null);\n const [suggestionsOpen, setSuggestionsOpen] = useState(false);\n const hasInviteEmail = email.trim().length > 0;\n\n // Optimistic overlays so clicks feel instant.\n const [pendingAdds, setPendingAdds] = useState<Share[]>([]);\n const [pendingRemoves, setPendingRemoves] = useState<Set<string>>(new Set());\n const [roleOverrides, setRoleOverrides] = useState<Record<string, Role>>({});\n // Principals with an in-flight share/unshare mutation. We disable the\n // role dropdown and the trash button for any share in this set so a\n // user can't race a role-change against a remove (which would otherwise\n // let the upsert silently re-grant access after the delete landed), and\n // can't rapid-fire two creates for the same pending add.\n const [inFlight, setInFlight] = useState<Set<string>>(new Set());\n const addInFlight = (k: string) =>\n setInFlight((prev) => new Set(prev).add(k));\n const clearInFlight = (k: string) =>\n setInFlight((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n\n useEffect(() => {\n sharesQuery.refetch();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const data = sharesQuery.data;\n const isLoading = data === undefined;\n const policy: SharesPolicy = data?.policy ?? {\n allowPublic: true,\n requireOrgMemberForUserShares: false,\n };\n const visibility: Visibility =\n visibilityOverride ?? (data?.visibility as Visibility | null) ?? \"private\";\n const canManage = data?.role === \"owner\" || data?.role === \"admin\";\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 serverShares = data?.shares ?? [];\n const shares: Share[] = [\n ...serverShares\n .filter((s) => !pendingRemoves.has(keyOf(s)))\n .map((s) => ({ ...s, role: roleOverrides[keyOf(s)] ?? s.role })),\n ...pendingAdds,\n ];\n const memberSearch = useOrgMemberSearch(email, canManage && suggestionsOpen);\n const excludedMemberEmails = new Set<string>();\n if (data?.ownerEmail) excludedMemberEmails.add(data.ownerEmail.toLowerCase());\n for (const s of shares) {\n if (s.principalType === \"user\") {\n excludedMemberEmails.add(s.principalId.toLowerCase());\n }\n }\n const memberSuggestions = memberSearch.members.filter(\n (m) => !excludedMemberEmails.has(m.email.toLowerCase()),\n );\n const knownMembers = memberSearch.members;\n\n const handleVisibility = (next: Visibility) => {\n if (next === visibility) return;\n setShareError(null);\n void onVisibilityChange(next).catch((err) => {\n setShareError(extractShareErrorMessage(err));\n });\n };\n\n const handleHideInSearch = () => {\n const control = props.hideInSearchControl;\n if (!control || control.pending || !canManage) return;\n setShareError(null);\n try {\n Promise.resolve(control.onCheckedChange(!control.checked)).catch(\n (err) => {\n setShareError(extractShareErrorMessage(err));\n },\n );\n } catch (err) {\n setShareError(extractShareErrorMessage(err));\n }\n };\n\n const handleAdd = () => {\n const trimmed = email.trim();\n if (!trimmed) return;\n const optimistic: Share = {\n id: `pending-${trimmed}`,\n principalType: \"user\",\n principalId: trimmed,\n role,\n };\n const k = keyOf(optimistic);\n // Ignore duplicate submits while an add for the same principal is in flight.\n if (inFlight.has(k)) return;\n setShareError(null);\n setPendingAdds((p) => [...p, optimistic]);\n setEmail(\"\");\n setSuggestionsOpen(false);\n addInFlight(k);\n share.mutate(\n {\n resourceType,\n resourceId,\n principalType: \"user\",\n principalId: trimmed,\n role,\n notify: notifyPeople,\n resourceUrl: getNotificationUrl(props.shareUrl),\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));\n clearInFlight(k);\n });\n },\n onError: (err: any) => {\n setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));\n clearInFlight(k);\n setEmail(trimmed);\n setShareError(extractShareErrorMessage(err));\n },\n },\n );\n };\n\n const handleChangeRole = (s: Share, next: Role) => {\n if (s.role === next) return;\n const k = keyOf(s);\n // Don't stack a role change on top of an in-flight add/remove/role\n // change for the same principal — it can race with unshare and end up\n // re-granting access after a delete. UI already disables the control,\n // but belt-and-suspenders here too.\n if (inFlight.has(k)) return;\n setRoleOverrides((prev) => ({ ...prev, [k]: next }));\n addInFlight(k);\n // share-resource is upsert: calling with same principal + new role\n // updates the existing share row. See sharing/actions/share-resource.ts.\n share.mutate(\n {\n resourceType,\n resourceId,\n principalType: s.principalType,\n principalId: s.principalId,\n role: next,\n notify: false,\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setRoleOverrides((prev) => {\n const { [k]: _, ...rest } = prev;\n return rest;\n });\n clearInFlight(k);\n });\n },\n onError: () => {\n setRoleOverrides((prev) => {\n const { [k]: _, ...rest } = prev;\n return rest;\n });\n clearInFlight(k);\n },\n },\n );\n };\n\n const handleRemove = (s: Share) => {\n const k = keyOf(s);\n // If any other mutation is in flight for this principal, don't start a\n // remove — it can interleave with an upsert and leave the row in place.\n // The UI already disables the trash button when inFlight.has(k).\n if (inFlight.has(k)) return;\n setPendingRemoves((prev) => new Set(prev).add(k));\n addInFlight(k);\n unshare.mutate(\n {\n resourceType,\n resourceId,\n principalType: s.principalType,\n principalId: s.principalId,\n } as any,\n {\n onSuccess: () => {\n sharesQuery.refetch().then(() => {\n setPendingRemoves((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n clearInFlight(k);\n });\n },\n onError: () => {\n setPendingRemoves((prev) => {\n const next = new Set(prev);\n next.delete(k);\n return next;\n });\n clearInFlight(k);\n },\n },\n );\n };\n\n const handleDone = () => {\n if (canManage && hasInviteEmail) handleAdd();\n onClose();\n };\n\n const titleText = resourceTitle\n ? `Share \"${resourceTitle}\"`\n : `Share ${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 type=\"button\" onClick={onClose} className={BUTTON_PRIMARY_SM}>\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={email}\n open={suggestionsOpen}\n onOpenChange={setSuggestionsOpen}\n onValueChange={(next) => {\n setEmail(next);\n if (shareError) setShareError(null);\n }}\n onSelectMember={(member) => {\n setEmail(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 </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={\n s.principalType === \"org\"\n ? s.principalId\n : displayName(s.principalId, knownMembers)\n }\n org={s.principalType === \"org\"}\n />\n <span className=\"flex-1 min-w-0 truncate\">\n {s.principalType === \"org\"\n ? s.principalId\n : displayName(s.principalId, 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 {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 === props.activeTab)\n ? props.activeTab\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={() => props.onTabChange(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 \"Public\" option is omitted. Default: true. */\n allowPublic?: boolean;\n}) {\n const allowPublic = props.allowPublic !== false;\n const current = visibilityMeta(props.value, props.visibilityCopy);\n const options = (Object.keys(VIS_META) as Visibility[]).filter(\n (k) => allowPublic || k !== \"public\",\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 ? <IconBuilding 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\n/**\n * Pull a user-readable error message out of a failed action call. Action\n * routes surface server-side errors as a JSON `{ error: string }` body that\n * the `useActionMutation` wrapper re-throws as\n * `Error(\"Action <name> failed: <message>\")`. Strip the framework prefix so\n * what reaches the user is the underlying server message.\n */\nfunction extractShareErrorMessage(err: unknown): string {\n const fallback = \"Could not update sharing — please try again.\";\n const pickRaw = (): string | null => {\n if (!err) return null;\n if (err instanceof Error) return err.message?.trim() || null;\n if (typeof err === \"string\") return err.trim() || null;\n if (typeof err === \"object\") {\n const any = err as { error?: unknown; message?: unknown };\n if (typeof any.error === \"string\" && any.error.trim()) return any.error;\n if (typeof any.message === \"string\" && any.message.trim())\n return any.message;\n }\n return null;\n };\n const raw = pickRaw();\n if (!raw || raw.toLowerCase() === \"failed to fetch\") return fallback;\n const stripped = raw.replace(/^Action\\s+[\\w-]+\\s+failed:\\s*/i, \"\");\n return stripped || fallback;\n}\nfunction getNotificationUrl(explicit?: string): string | undefined {\n if (explicit) return explicit;\n if (typeof window === \"undefined\") return undefined;\n return window.location.href;\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 displayName(email: string, members: OrgMember[]): string {\n const match = members.find((m) => m.email === email);\n if (match?.name && match.name.trim()) return match.name;\n return email;\n}\n"]}