@agent-native/core 0.7.4 → 0.7.6

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 (238) hide show
  1. package/README.md +6 -5
  2. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/anthropic-engine.js +8 -4
  4. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  5. package/dist/agent/engine/types.d.ts +1 -1
  6. package/dist/agent/engine/types.d.ts.map +1 -1
  7. package/dist/agent/production-agent.d.ts +7 -0
  8. package/dist/agent/production-agent.d.ts.map +1 -1
  9. package/dist/agent/production-agent.js +153 -118
  10. package/dist/agent/production-agent.js.map +1 -1
  11. package/dist/cli/create.d.ts.map +1 -1
  12. package/dist/cli/create.js +8 -1
  13. package/dist/cli/create.js.map +1 -1
  14. package/dist/cli/index.js +8 -0
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/info.d.ts +2 -0
  17. package/dist/cli/info.d.ts.map +1 -0
  18. package/dist/cli/info.js +103 -0
  19. package/dist/cli/info.js.map +1 -0
  20. package/dist/client/AssistantChat.d.ts.map +1 -1
  21. package/dist/client/AssistantChat.js +171 -68
  22. package/dist/client/AssistantChat.js.map +1 -1
  23. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  24. package/dist/client/agent-chat-adapter.js +12 -1
  25. package/dist/client/agent-chat-adapter.js.map +1 -1
  26. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  27. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  28. package/dist/client/composer/TiptapComposer.js +46 -2
  29. package/dist/client/composer/TiptapComposer.js.map +1 -1
  30. package/dist/client/composer/VoiceButton.d.ts +21 -0
  31. package/dist/client/composer/VoiceButton.d.ts.map +1 -0
  32. package/dist/client/composer/VoiceButton.js +51 -0
  33. package/dist/client/composer/VoiceButton.js.map +1 -0
  34. package/dist/client/composer/useVoiceDictation.d.ts +38 -0
  35. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -0
  36. package/dist/client/composer/useVoiceDictation.js +398 -0
  37. package/dist/client/composer/useVoiceDictation.js.map +1 -0
  38. package/dist/client/onboarding/OnboardingPanel.js +2 -2
  39. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  40. package/dist/client/org/OrgSwitcher.d.ts +5 -4
  41. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  42. package/dist/client/org/OrgSwitcher.js +90 -24
  43. package/dist/client/org/OrgSwitcher.js.map +1 -1
  44. package/dist/client/resources/McpServerDetail.d.ts +15 -0
  45. package/dist/client/resources/McpServerDetail.d.ts.map +1 -0
  46. package/dist/client/resources/McpServerDetail.js +65 -0
  47. package/dist/client/resources/McpServerDetail.js.map +1 -0
  48. package/dist/client/resources/ResourceEditor.js +1 -1
  49. package/dist/client/resources/ResourceEditor.js.map +1 -1
  50. package/dist/client/resources/ResourceTree.d.ts +6 -1
  51. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  52. package/dist/client/resources/ResourceTree.js +18 -7
  53. package/dist/client/resources/ResourceTree.js.map +1 -1
  54. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  55. package/dist/client/resources/ResourcesPanel.js +191 -20
  56. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  57. package/dist/client/resources/use-mcp-servers.d.ts +68 -0
  58. package/dist/client/resources/use-mcp-servers.d.ts.map +1 -0
  59. package/dist/client/resources/use-mcp-servers.js +83 -0
  60. package/dist/client/resources/use-mcp-servers.js.map +1 -0
  61. package/dist/client/resources/use-resources.d.ts +27 -1
  62. package/dist/client/resources/use-resources.d.ts.map +1 -1
  63. package/dist/client/resources/use-resources.js +63 -0
  64. package/dist/client/resources/use-resources.js.map +1 -1
  65. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  66. package/dist/client/settings/SettingsPanel.js +3 -2
  67. package/dist/client/settings/SettingsPanel.js.map +1 -1
  68. package/dist/client/settings/VoiceTranscriptionSection.d.ts +14 -0
  69. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -0
  70. package/dist/client/settings/VoiceTranscriptionSection.js +111 -0
  71. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -0
  72. package/dist/client/sharing/ShareButton.d.ts +6 -4
  73. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  74. package/dist/client/sharing/ShareButton.js +299 -34
  75. package/dist/client/sharing/ShareButton.js.map +1 -1
  76. package/dist/client/sharing/ShareDialog.d.ts +22 -4
  77. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  78. package/dist/client/sharing/ShareDialog.js +170 -148
  79. package/dist/client/sharing/ShareDialog.js.map +1 -1
  80. package/dist/client/sharing/VisibilityBadge.d.ts.map +1 -1
  81. package/dist/client/sharing/VisibilityBadge.js +1 -2
  82. package/dist/client/sharing/VisibilityBadge.js.map +1 -1
  83. package/dist/client/use-action.d.ts.map +1 -1
  84. package/dist/client/use-action.js +20 -1
  85. package/dist/client/use-action.js.map +1 -1
  86. package/dist/db/migrations.d.ts +18 -3
  87. package/dist/db/migrations.d.ts.map +1 -1
  88. package/dist/db/migrations.js +25 -3
  89. package/dist/db/migrations.js.map +1 -1
  90. package/dist/deploy/workspace-core.js +2 -2
  91. package/dist/mcp-client/config.d.ts +20 -1
  92. package/dist/mcp-client/config.d.ts.map +1 -1
  93. package/dist/mcp-client/config.js +28 -11
  94. package/dist/mcp-client/config.js.map +1 -1
  95. package/dist/mcp-client/hub-client.d.ts +38 -0
  96. package/dist/mcp-client/hub-client.d.ts.map +1 -0
  97. package/dist/mcp-client/hub-client.js +147 -0
  98. package/dist/mcp-client/hub-client.js.map +1 -0
  99. package/dist/mcp-client/hub-routes.d.ts +42 -0
  100. package/dist/mcp-client/hub-routes.d.ts.map +1 -0
  101. package/dist/mcp-client/hub-routes.js +114 -0
  102. package/dist/mcp-client/hub-routes.js.map +1 -0
  103. package/dist/mcp-client/index.d.ts +15 -0
  104. package/dist/mcp-client/index.d.ts.map +1 -1
  105. package/dist/mcp-client/index.js +35 -0
  106. package/dist/mcp-client/index.js.map +1 -1
  107. package/dist/mcp-client/manager.d.ts +54 -8
  108. package/dist/mcp-client/manager.d.ts.map +1 -1
  109. package/dist/mcp-client/manager.js +276 -59
  110. package/dist/mcp-client/manager.js.map +1 -1
  111. package/dist/mcp-client/remote-store.d.ts +102 -0
  112. package/dist/mcp-client/remote-store.d.ts.map +1 -0
  113. package/dist/mcp-client/remote-store.js +200 -0
  114. package/dist/mcp-client/remote-store.js.map +1 -0
  115. package/dist/mcp-client/routes.d.ts +55 -0
  116. package/dist/mcp-client/routes.d.ts.map +1 -0
  117. package/dist/mcp-client/routes.js +384 -0
  118. package/dist/mcp-client/routes.js.map +1 -0
  119. package/dist/mcp-client/visibility.d.ts +16 -0
  120. package/dist/mcp-client/visibility.d.ts.map +1 -0
  121. package/dist/mcp-client/visibility.js +45 -0
  122. package/dist/mcp-client/visibility.js.map +1 -0
  123. package/dist/org/context.js +2 -2
  124. package/dist/org/context.js.map +1 -1
  125. package/dist/org/handlers.js +2 -2
  126. package/dist/org/handlers.js.map +1 -1
  127. package/dist/resources/handlers.d.ts.map +1 -1
  128. package/dist/resources/handlers.js +30 -0
  129. package/dist/resources/handlers.js.map +1 -1
  130. package/dist/secrets/register-framework-secrets.d.ts +13 -0
  131. package/dist/secrets/register-framework-secrets.d.ts.map +1 -0
  132. package/dist/secrets/register-framework-secrets.js +59 -0
  133. package/dist/secrets/register-framework-secrets.js.map +1 -0
  134. package/dist/secrets/register.d.ts.map +1 -1
  135. package/dist/secrets/register.js +8 -1
  136. package/dist/secrets/register.js.map +1 -1
  137. package/dist/server/action-routes.d.ts.map +1 -1
  138. package/dist/server/action-routes.js +22 -2
  139. package/dist/server/action-routes.js.map +1 -1
  140. package/dist/server/agent-chat-plugin.d.ts +16 -0
  141. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  142. package/dist/server/agent-chat-plugin.js +108 -25
  143. package/dist/server/agent-chat-plugin.js.map +1 -1
  144. package/dist/server/app-url.d.ts.map +1 -1
  145. package/dist/server/app-url.js +11 -3
  146. package/dist/server/app-url.js.map +1 -1
  147. package/dist/server/auth.d.ts.map +1 -1
  148. package/dist/server/auth.js +50 -0
  149. package/dist/server/auth.js.map +1 -1
  150. package/dist/server/better-auth-instance.d.ts.map +1 -1
  151. package/dist/server/better-auth-instance.js +99 -4
  152. package/dist/server/better-auth-instance.js.map +1 -1
  153. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  154. package/dist/server/core-routes-plugin.js +44 -0
  155. package/dist/server/core-routes-plugin.js.map +1 -1
  156. package/dist/server/create-server.d.ts.map +1 -1
  157. package/dist/server/create-server.js +6 -0
  158. package/dist/server/create-server.js.map +1 -1
  159. package/dist/server/date-utils.d.ts +15 -0
  160. package/dist/server/date-utils.d.ts.map +1 -0
  161. package/dist/server/date-utils.js +41 -0
  162. package/dist/server/date-utils.js.map +1 -0
  163. package/dist/server/index.d.ts +2 -1
  164. package/dist/server/index.d.ts.map +1 -1
  165. package/dist/server/index.js +2 -1
  166. package/dist/server/index.js.map +1 -1
  167. package/dist/server/onboarding-html.d.ts +3 -0
  168. package/dist/server/onboarding-html.d.ts.map +1 -1
  169. package/dist/server/onboarding-html.js +13 -3
  170. package/dist/server/onboarding-html.js.map +1 -1
  171. package/dist/server/request-context.d.ts +9 -0
  172. package/dist/server/request-context.d.ts.map +1 -1
  173. package/dist/server/request-context.js +10 -0
  174. package/dist/server/request-context.js.map +1 -1
  175. package/dist/server/transcribe-voice.d.ts +26 -0
  176. package/dist/server/transcribe-voice.d.ts.map +1 -0
  177. package/dist/server/transcribe-voice.js +143 -0
  178. package/dist/server/transcribe-voice.js.map +1 -0
  179. package/dist/styles/agent-native.css +111 -0
  180. package/dist/tailwind.preset.d.ts +2 -2
  181. package/dist/tailwind.preset.d.ts.map +1 -1
  182. package/dist/tailwind.preset.js +27 -7
  183. package/dist/tailwind.preset.js.map +1 -1
  184. package/dist/templates/default/app/global.css +65 -68
  185. package/dist/templates/default/components.json +1 -1
  186. package/dist/templates/default/package.json +2 -4
  187. package/dist/templates/default/vite.config.ts +3 -0
  188. package/dist/templates/workspace-core/package.json +1 -4
  189. package/dist/templates/workspace-core/src/index.ts +1 -1
  190. package/dist/templates/workspace-core/styles/tokens.css +22 -0
  191. package/dist/templates/workspace-core/tsconfig.json +1 -1
  192. package/dist/vite/client.d.ts +6 -0
  193. package/dist/vite/client.d.ts.map +1 -1
  194. package/dist/vite/client.js +18 -1
  195. package/dist/vite/client.js.map +1 -1
  196. package/docs/content/actions.md +169 -74
  197. package/docs/content/agent-teams.md +139 -0
  198. package/docs/content/cloneable-saas.md +98 -0
  199. package/docs/content/creating-templates.md +9 -11
  200. package/docs/content/deployment.md +2 -9
  201. package/docs/content/drop-in-agent.md +200 -0
  202. package/docs/content/enterprise-workspace.md +22 -10
  203. package/docs/content/getting-started.md +34 -19
  204. package/docs/content/integrations.md +3 -3
  205. package/docs/content/key-concepts.md +50 -23
  206. package/docs/content/mcp-clients.md +71 -0
  207. package/docs/content/pure-agent-apps.md +69 -0
  208. package/docs/content/recurring-jobs.md +123 -0
  209. package/docs/content/skills-guide.md +8 -0
  210. package/docs/content/template-analytics.md +190 -0
  211. package/docs/content/template-calendar.md +151 -0
  212. package/docs/content/template-clips.md +55 -0
  213. package/docs/content/template-content.md +141 -0
  214. package/docs/content/template-dispatch.md +58 -0
  215. package/docs/content/template-forms.md +51 -0
  216. package/docs/content/template-mail.md +169 -0
  217. package/docs/content/template-slides.md +218 -0
  218. package/docs/content/template-starter.md +68 -0
  219. package/docs/content/template-video.md +162 -0
  220. package/docs/content/voice-input.md +59 -0
  221. package/docs/content/what-is-agent-native.md +142 -45
  222. package/docs/content/workspace-management.md +1 -0
  223. package/docs/content/{resources.md → workspace.md} +94 -42
  224. package/package.json +9 -16
  225. package/src/templates/default/app/global.css +65 -68
  226. package/src/templates/default/components.json +1 -1
  227. package/src/templates/default/package.json +2 -4
  228. package/src/templates/default/vite.config.ts +3 -0
  229. package/src/templates/workspace-core/package.json +1 -4
  230. package/src/templates/workspace-core/src/index.ts +1 -1
  231. package/src/templates/workspace-core/styles/tokens.css +22 -0
  232. package/src/templates/workspace-core/tsconfig.json +1 -1
  233. package/dist/templates/default/postcss.config.js +0 -6
  234. package/dist/templates/default/tailwind.config.ts +0 -7
  235. package/dist/templates/workspace-core/tailwind.preset.ts +0 -34
  236. package/src/templates/default/postcss.config.js +0 -6
  237. package/src/templates/default/tailwind.config.ts +0 -7
  238. package/src/templates/workspace-core/tailwind.preset.ts +0 -34
@@ -1,43 +1,308 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { IconShare, IconLock, IconBuilding, IconWorld, } from "@tabler/icons-react";
4
- import { ShareDialog } from "./ShareDialog.js";
5
- import { useActionQuery } from "../use-action.js";
2
+ import { useEffect, useState } from "react";
3
+ import { IconLock, IconBuilding, IconWorld, IconTrash, IconCheck, IconChevronDown, } from "@tabler/icons-react";
4
+ import * as Popover from "@radix-ui/react-popover";
5
+ import * as Select from "@radix-ui/react-select";
6
+ import { useActionQuery, useActionMutation } from "../use-action.js";
7
+ import { cn } from "../utils.js";
8
+ // Mirror shadcn's <Button size="sm" variant="outline"> class string so the
9
+ // trigger sits flush next to other sm outline buttons in the template.
10
+ const BUTTON_BASE = "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";
11
+ const BUTTON_OUTLINE_SM = cn(BUTTON_BASE, "h-9 px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground");
12
+ const BUTTON_PRIMARY_SM = cn(BUTTON_BASE, "h-9 px-4 bg-primary text-primary-foreground hover:bg-primary/90");
13
+ const BUTTON_GHOST_ICON = cn(BUTTON_BASE, "h-7 w-7 p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground");
14
+ const VIS_META = {
15
+ private: {
16
+ label: "Private",
17
+ description: "Only people with access can view",
18
+ Icon: IconLock,
19
+ },
20
+ org: {
21
+ label: "Organization",
22
+ description: "Anyone in your organization can view",
23
+ Icon: IconBuilding,
24
+ },
25
+ public: {
26
+ label: "Public",
27
+ description: "Anyone signed in with the link can view",
28
+ Icon: IconWorld,
29
+ },
30
+ };
31
+ const ROLE_OPTIONS = [
32
+ { value: "viewer", label: "Viewer", description: "Can view" },
33
+ { value: "editor", label: "Editor", description: "Can edit" },
34
+ {
35
+ value: "admin",
36
+ label: "Admin",
37
+ description: "Can edit and manage access",
38
+ },
39
+ ];
6
40
  /**
7
- * Drop-in share button. Opens the framework-standard ShareDialog. Reflects the
8
- * current visibility with an icon so users can tell at a glance whether the
9
- * resource is private, org-visible, or public.
41
+ * Framework share control. Renders a shadcn-outline-styled trigger that
42
+ * opens a Google-Docs-style popover anchored beneath it. Uses Tailwind
43
+ * + CSS variables so the same component renders natively in light and
44
+ * dark mode in any shadcn template.
10
45
  */
11
46
  export function ShareButton(props) {
12
47
  const [open, setOpen] = useState(false);
13
- const q = useActionQuery("list-resource-shares", { resourceType: props.resourceType, resourceId: props.resourceId });
14
- const visibility = q.data?.visibility ?? "private";
15
- const Icon = visibility === "public"
48
+ const sharesQuery = useActionQuery("list-resource-shares", {
49
+ resourceType: props.resourceType,
50
+ resourceId: props.resourceId,
51
+ });
52
+ // The trigger always says "Share" — the icon reflects the resource's
53
+ // current visibility (lock / building / globe), matching Google Docs.
54
+ // While the query is loading and we don't know the visibility yet,
55
+ // render a skeleton placeholder in the icon slot instead of guessing.
56
+ const loaded = sharesQuery.data !== undefined;
57
+ const serverVisibility = sharesQuery.data?.visibility ?? "private";
58
+ const TriggerIcon = serverVisibility === "public"
16
59
  ? IconWorld
17
- : visibility === "org"
60
+ : serverVisibility === "org"
18
61
  ? IconBuilding
19
- : props.variant === "compact"
20
- ? IconLock
21
- : IconShare;
22
- const label = props.variant === "compact"
23
- ? visibility === "private"
24
- ? "Private"
25
- : visibility === "org"
26
- ? "Organization"
27
- : "Public"
28
- : "Share";
29
- return (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: () => setOpen(true), style: {
30
- display: "inline-flex",
31
- alignItems: "center",
32
- gap: 6,
33
- padding: "6px 10px",
34
- border: "1px solid #e5e7eb",
35
- borderRadius: 6,
36
- background: "#fff",
37
- color: "#111827",
38
- fontSize: 13,
39
- cursor: "pointer",
40
- font: "inherit",
41
- }, children: [_jsx(Icon, { size: 14 }), label] }), _jsx(ShareDialog, { open: open, onClose: () => setOpen(false), resourceType: props.resourceType, resourceId: props.resourceId, resourceTitle: props.resourceTitle })] }));
62
+ : IconLock;
63
+ return (_jsxs(Popover.Root, { open: open, onOpenChange: setOpen, children: [_jsx(Popover.Trigger, { asChild: true, children: _jsxs("button", { type: "button", className: BUTTON_OUTLINE_SM, children: [loaded ? (_jsx(TriggerIcon, { size: 16, strokeWidth: 1.75 })) : (_jsx("span", { "aria-hidden": true, className: "inline-block h-4 w-4 rounded-sm bg-muted animate-pulse" })), _jsx("span", { children: "Share" })] }) }), _jsx(Popover.Portal, { children: _jsx(Popover.Content, { align: "end", sideOffset: 6, className: "z-[2000] w-[min(460px,92vw)] rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none", onOpenAutoFocus: (e) => e.preventDefault(), children: _jsx(SharePanel, { ...props, sharesQuery: sharesQuery, onClose: () => setOpen(false) }) }) })] }));
64
+ }
65
+ function useOrgMembers() {
66
+ const [members, setMembers] = useState([]);
67
+ useEffect(() => {
68
+ let cancelled = false;
69
+ fetch("/_agent-native/org/members")
70
+ .then((r) => (r.ok ? r.json() : null))
71
+ .then((data) => {
72
+ if (cancelled || !data)
73
+ return;
74
+ const list = Array.isArray(data?.members) ? data.members : [];
75
+ setMembers(list
76
+ .map((m) => ({
77
+ email: typeof m?.email === "string" ? m.email : "",
78
+ name: typeof m?.name === "string" ? m.name : null,
79
+ }))
80
+ .filter((m) => m.email));
81
+ })
82
+ .catch(() => { });
83
+ return () => {
84
+ cancelled = true;
85
+ };
86
+ }, []);
87
+ return members;
88
+ }
89
+ function SharePanel(props) {
90
+ const { resourceType, resourceId, resourceTitle, sharesQuery, onClose } = props;
91
+ const setVisibility = useActionMutation("set-resource-visibility");
92
+ const share = useActionMutation("share-resource");
93
+ const unshare = useActionMutation("unshare-resource");
94
+ const [email, setEmail] = useState("");
95
+ const [role, setRole] = useState("viewer");
96
+ const orgMembers = useOrgMembers();
97
+ const datalistId = `share-autocomplete-${resourceType}-${resourceId}`;
98
+ // Optimistic overlays so clicks feel instant.
99
+ const [visibilityOverride, setVisibilityOverride] = useState(null);
100
+ const [pendingAdds, setPendingAdds] = useState([]);
101
+ const [pendingRemoves, setPendingRemoves] = useState(new Set());
102
+ const [roleOverrides, setRoleOverrides] = useState({});
103
+ // Principals with an in-flight share/unshare mutation. We disable the
104
+ // role dropdown and the trash button for any share in this set so a
105
+ // user can't race a role-change against a remove (which would otherwise
106
+ // let the upsert silently re-grant access after the delete landed), and
107
+ // can't rapid-fire two creates for the same pending add.
108
+ const [inFlight, setInFlight] = useState(new Set());
109
+ const addInFlight = (k) => setInFlight((prev) => new Set(prev).add(k));
110
+ const clearInFlight = (k) => setInFlight((prev) => {
111
+ const next = new Set(prev);
112
+ next.delete(k);
113
+ return next;
114
+ });
115
+ useEffect(() => {
116
+ sharesQuery.refetch();
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ }, []);
119
+ const data = sharesQuery.data;
120
+ const serverVisibility = data?.visibility ?? "private";
121
+ const visibility = visibilityOverride ?? serverVisibility;
122
+ const canManage = data?.role === "owner" || data?.role === "admin" || !data?.role;
123
+ const meta = VIS_META[visibility];
124
+ const serverShares = data?.shares ?? [];
125
+ const shares = [
126
+ ...serverShares
127
+ .filter((s) => !pendingRemoves.has(keyOf(s)))
128
+ .map((s) => ({ ...s, role: roleOverrides[keyOf(s)] ?? s.role })),
129
+ ...pendingAdds,
130
+ ];
131
+ const handleVisibility = (next) => {
132
+ if (next === visibility)
133
+ return;
134
+ setVisibilityOverride(next);
135
+ setVisibility.mutate({ resourceType, resourceId, visibility: next }, {
136
+ onSuccess: () => {
137
+ sharesQuery.refetch().then(() => setVisibilityOverride(null));
138
+ },
139
+ onError: () => setVisibilityOverride(null),
140
+ });
141
+ };
142
+ const handleAdd = () => {
143
+ const trimmed = email.trim();
144
+ if (!trimmed)
145
+ return;
146
+ const optimistic = {
147
+ id: `pending-${trimmed}`,
148
+ principalType: "user",
149
+ principalId: trimmed,
150
+ role,
151
+ };
152
+ const k = keyOf(optimistic);
153
+ // Ignore duplicate submits while an add for the same principal is in flight.
154
+ if (inFlight.has(k))
155
+ return;
156
+ setPendingAdds((p) => [...p, optimistic]);
157
+ setEmail("");
158
+ addInFlight(k);
159
+ share.mutate({
160
+ resourceType,
161
+ resourceId,
162
+ principalType: "user",
163
+ principalId: trimmed,
164
+ role,
165
+ }, {
166
+ onSuccess: () => {
167
+ sharesQuery.refetch().then(() => {
168
+ setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));
169
+ clearInFlight(k);
170
+ });
171
+ },
172
+ onError: () => {
173
+ setPendingAdds((p) => p.filter((s) => s.id !== optimistic.id));
174
+ clearInFlight(k);
175
+ },
176
+ });
177
+ };
178
+ const handleChangeRole = (s, next) => {
179
+ if (s.role === next)
180
+ return;
181
+ const k = keyOf(s);
182
+ // Don't stack a role change on top of an in-flight add/remove/role
183
+ // change for the same principal — it can race with unshare and end up
184
+ // re-granting access after a delete. UI already disables the control,
185
+ // but belt-and-suspenders here too.
186
+ if (inFlight.has(k))
187
+ return;
188
+ setRoleOverrides((prev) => ({ ...prev, [k]: next }));
189
+ addInFlight(k);
190
+ // share-resource is upsert: calling with same principal + new role
191
+ // updates the existing share row. See sharing/actions/share-resource.ts.
192
+ share.mutate({
193
+ resourceType,
194
+ resourceId,
195
+ principalType: s.principalType,
196
+ principalId: s.principalId,
197
+ role: next,
198
+ }, {
199
+ onSuccess: () => {
200
+ sharesQuery.refetch().then(() => {
201
+ setRoleOverrides((prev) => {
202
+ const { [k]: _, ...rest } = prev;
203
+ return rest;
204
+ });
205
+ clearInFlight(k);
206
+ });
207
+ },
208
+ onError: () => {
209
+ setRoleOverrides((prev) => {
210
+ const { [k]: _, ...rest } = prev;
211
+ return rest;
212
+ });
213
+ clearInFlight(k);
214
+ },
215
+ });
216
+ };
217
+ const handleRemove = (s) => {
218
+ const k = keyOf(s);
219
+ // If any other mutation is in flight for this principal, don't start a
220
+ // remove — it can interleave with an upsert and leave the row in place.
221
+ // The UI already disables the trash button when inFlight.has(k).
222
+ if (inFlight.has(k))
223
+ return;
224
+ setPendingRemoves((prev) => new Set(prev).add(k));
225
+ addInFlight(k);
226
+ unshare.mutate({
227
+ resourceType,
228
+ resourceId,
229
+ principalType: s.principalType,
230
+ principalId: s.principalId,
231
+ }, {
232
+ onSuccess: () => {
233
+ sharesQuery.refetch().then(() => {
234
+ setPendingRemoves((prev) => {
235
+ const next = new Set(prev);
236
+ next.delete(k);
237
+ return next;
238
+ });
239
+ clearInFlight(k);
240
+ });
241
+ },
242
+ onError: () => {
243
+ setPendingRemoves((prev) => {
244
+ const next = new Set(prev);
245
+ next.delete(k);
246
+ return next;
247
+ });
248
+ clearInFlight(k);
249
+ },
250
+ });
251
+ };
252
+ const titleText = resourceTitle
253
+ ? `Share "${resourceTitle}"`
254
+ : `Share ${resourceType}`;
255
+ return (_jsxs("div", { children: [_jsx("div", { className: "mb-3 truncate text-base font-semibold", title: titleText, children: titleText }), canManage ? (_jsxs("div", { className: "mb-4 flex items-stretch gap-2", children: [_jsx("input", { type: "email", placeholder: "Add people by email", value: email, onChange: (e) => setEmail(e.target.value), onKeyDown: (e) => {
256
+ if (e.key === "Enter")
257
+ handleAdd();
258
+ }, list: orgMembers.length > 0 ? datalistId : undefined, autoComplete: "off", className: "flex-1 min-w-0 h-9 rounded-md border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background" }), orgMembers.length > 0 ? (_jsx("datalist", { id: datalistId, children: orgMembers
259
+ .filter((m) => m.email !== sharesQuery.data?.ownerEmail &&
260
+ !(sharesQuery.data?.shares ?? []).some((s) => s.principalType === "user" && s.principalId === m.email))
261
+ .map((m) => (_jsx("option", { value: m.email, label: m.name ?? undefined }, m.email))) })) : null, _jsx(RoleSelect, { value: role, onChange: setRole })] })) : null, _jsx("div", { className: "mb-2 text-sm font-semibold", children: "People with access" }), _jsxs("ul", { className: "mb-4 flex flex-col gap-1 list-none p-0 m-0", children: [data?.ownerEmail ? (_jsxs("li", { className: "flex items-center gap-3 px-1 py-1.5 text-sm", children: [_jsx(Avatar, { label: displayName(data.ownerEmail, orgMembers) }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: displayName(data.ownerEmail, orgMembers) }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Owner" })] })) : null, shares.map((s) => (_jsxs("li", { className: cn("flex items-center gap-3 px-1 py-1.5 text-sm", inFlight.has(keyOf(s)) && "opacity-60"), children: [_jsx(Avatar, { label: s.principalType === "org"
262
+ ? s.principalId
263
+ : displayName(s.principalId, orgMembers), org: s.principalType === "org" }), _jsx("span", { className: "flex-1 min-w-0 truncate", children: s.principalType === "org"
264
+ ? s.principalId
265
+ : displayName(s.principalId, orgMembers) }), canManage ? (_jsx(RoleSelect, { value: s.role, onChange: (r) => handleChangeRole(s, r), disabled: inFlight.has(keyOf(s)), plain: true })) : (_jsx("span", { className: "text-xs text-muted-foreground", children: cap(s.role) })), canManage ? (_jsx("button", { type: "button", "aria-label": "Remove", onClick: () => handleRemove(s), disabled: inFlight.has(keyOf(s)), className: BUTTON_GHOST_ICON, children: _jsx(IconTrash, { size: 14 }) })) : null] }, keyOf(s)))), !shares.length && !data?.ownerEmail ? (_jsx("li", { className: "px-1 py-1.5 text-sm text-muted-foreground", children: "No one has access yet." })) : null] }), _jsx("div", { className: "mb-2 text-sm font-semibold", children: "General access" }), _jsxs("div", { className: "mb-4 flex items-center gap-3", children: [_jsx("span", { "aria-hidden": true, className: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-muted text-muted-foreground", children: _jsx(meta.Icon, { size: 16, strokeWidth: 1.75 }) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(VisibilitySelect, { value: visibility, onChange: handleVisibility, disabled: !canManage }), _jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: meta.description })] })] }), _jsx("div", { className: "mt-2 flex justify-end", children: _jsx("button", { type: "button", onClick: onClose, className: BUTTON_PRIMARY_SM, children: "Done" }) })] }));
266
+ }
267
+ // ---------------------------------------------------------------------------
268
+ // Radix Select wrappers styled like shadcn Select (no native <select> anywhere)
269
+ // ---------------------------------------------------------------------------
270
+ const selectContentClass = "z-[2100] 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";
271
+ const selectItemClass = "relative flex w-full cursor-pointer select-none items-start gap-2 rounded-sm py-2 pl-8 pr-3 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
272
+ function SelectItems({ items }) {
273
+ return (_jsx(_Fragment, { children: items.map((it) => (_jsxs(Select.Item, { value: it.value, className: selectItemClass, children: [_jsx("span", { className: "absolute left-2 top-2 flex h-4 w-4 items-center justify-center", children: _jsx(Select.ItemIndicator, { children: _jsx(IconCheck, { size: 14 }) }) }), _jsxs("span", { className: "flex flex-col", children: [_jsx(Select.ItemText, { children: it.label }), it.description ? (_jsx("span", { className: "text-xs text-muted-foreground", children: it.description })) : null] })] }, it.value))) }));
274
+ }
275
+ function RoleSelect(props) {
276
+ const current = ROLE_OPTIONS.find((o) => o.value === props.value) ?? ROLE_OPTIONS[0];
277
+ return (_jsxs(Select.Root, { value: props.value, onValueChange: (v) => props.onChange(v), disabled: props.disabled, children: [_jsxs(Select.Trigger, { className: props.plain
278
+ ? cn(BUTTON_BASE, "h-7 px-2 bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground")
279
+ : cn(BUTTON_BASE, "h-9 px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground"), "aria-label": "Role", children: [_jsx(Select.Value, { children: current.label }), _jsx(Select.Icon, { children: _jsx(IconChevronDown, { size: 14 }) })] }), _jsx(Select.Portal, { children: _jsx(Select.Content, { className: selectContentClass, position: "popper", sideOffset: 4, children: _jsx(Select.Viewport, { children: _jsx(SelectItems, { items: ROLE_OPTIONS }) }) }) })] }));
280
+ }
281
+ function VisibilitySelect(props) {
282
+ const current = VIS_META[props.value];
283
+ return (_jsxs(Select.Root, { value: props.value, onValueChange: (v) => props.onChange(v), disabled: props.disabled, children: [_jsxs(Select.Trigger, { className: cn(BUTTON_BASE, "h-7 px-1 -ml-1 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground"), "aria-label": "General access", children: [_jsx(Select.Value, { children: current.label }), _jsx(Select.Icon, { children: _jsx(IconChevronDown, { size: 14 }) })] }), _jsx(Select.Portal, { children: _jsx(Select.Content, { className: selectContentClass, position: "popper", sideOffset: 4, children: _jsx(Select.Viewport, { children: _jsx(SelectItems, { items: Object.keys(VIS_META).map((k) => ({
284
+ value: k,
285
+ label: VIS_META[k].label,
286
+ description: VIS_META[k].description,
287
+ })) }) }) }) })] }));
288
+ }
289
+ function Avatar({ label, org }) {
290
+ return (_jsx("span", { "aria-hidden": true, className: "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-semibold text-muted-foreground", children: org ? _jsx(IconBuilding, { size: 14, strokeWidth: 1.75 }) : initials(label) }));
291
+ }
292
+ function keyOf(s) {
293
+ return `${s.principalType}:${s.principalId}`;
294
+ }
295
+ function cap(s) {
296
+ return s.charAt(0).toUpperCase() + s.slice(1);
297
+ }
298
+ function initials(s) {
299
+ const name = s.split("@")[0] ?? s;
300
+ return (name[0] ?? "?").toUpperCase();
301
+ }
302
+ function displayName(email, members) {
303
+ const match = members.find((m) => m.email === email);
304
+ if (match?.name && match.name.trim())
305
+ return match.name;
306
+ return email;
42
307
  }
43
308
  //# sourceMappingURL=ShareButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShareButton.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,cAAc,CACtB,sBAAsB,EACtB,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CACnE,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS,CAAC;IACnD,MAAM,IAAI,GACR,UAAU,KAAK,QAAQ;QACrB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,UAAU,KAAK,KAAK;YACpB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS;gBAC3B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,CAAC;IACpB,MAAM,KAAK,GACT,KAAK,CAAC,OAAO,KAAK,SAAS;QACzB,CAAC,CAAC,UAAU,KAAK,SAAS;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,UAAU,KAAK,KAAK;gBACpB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,QAAQ;QACd,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,CACL,8BACE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAC5B,KAAK,EAAE;oBACL,OAAO,EAAE,aAAa;oBACtB,UAAU,EAAE,QAAQ;oBACpB,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,mBAAmB;oBAC3B,YAAY,EAAE,CAAC;oBACf,UAAU,EAAE,MAAM;oBAClB,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,SAAS;iBAChB,aAED,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,EACjB,KAAK,IACC,EACT,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,aAAa,EAAE,KAAK,CAAC,aAAa,GAClC,IACD,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ShareButton.js","sourceRoot":"","sources":["../../../src/client/sharing/ShareButton.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,33 @@
1
+ import { type ReactNode } from "react";
1
2
  export interface ShareDialogProps {
2
3
  open: boolean;
3
4
  onClose: () => void;
4
5
  resourceType: string;
5
6
  resourceId: string;
6
7
  resourceTitle?: string;
8
+ /**
9
+ * When provided, enables the "Link" tab with a copy-link field.
10
+ * Pass the user-facing share URL (e.g. `https://…/share/<id>`).
11
+ */
12
+ shareUrl?: string;
13
+ /**
14
+ * When provided, enables the "Embed" tab with a default iframe snippet.
15
+ * For richer per-resource controls (autoplay, start time, responsive /
16
+ * fixed size), pass `embedTabContent` instead (or in addition) — it
17
+ * replaces the default embed body.
18
+ */
19
+ embedUrl?: string;
20
+ /** Advanced: fully custom Embed tab body. Requires `embedUrl` to enable the tab. */
21
+ embedTabContent?: ReactNode;
22
+ /** Extra content appended to the bottom of the Link tab (e.g. download buttons). */
23
+ linkTabExtras?: ReactNode;
7
24
  }
8
25
  /**
9
- * Framework-standard share dialog. Drop into any template next to a resource
10
- * header via `<ShareButton resourceType resourceId />`. Uses inline styles to
11
- * avoid coupling to a specific shadcn setup templates can reimplement if
12
- * they want a tighter visual fit.
26
+ * Framework share dialog. Drop into any template via
27
+ * `<ShareDialog open onClose resourceType resourceId />`. Passing
28
+ * `shareUrl` lights up a Link tab with a copy field; passing `embedUrl`
29
+ * lights up an Embed tab. With neither prop, renders a single Invite +
30
+ * general-access panel (Google-Docs-lite).
13
31
  */
14
32
  export declare function ShareDialog(props: ShareDialogProps): any;
15
33
  //# sourceMappingURL=ShareDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAoBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,OAyMlD"}
1
+ {"version":3,"file":"ShareDialog.d.ts","sourceRoot":"","sources":["../../../src/client/sharing/ShareDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAmB5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,oFAAoF;IACpF,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAwGD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,OAgJlD"}