@molecule/app-ide-react 1.3.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Public share-link manager — the single UI for a project's public link, used
3
+ * both inside {@link ShareModal} (the `/share` command + header share button)
4
+ * and by a host's team/access panel so the two never diverge.
5
+ *
6
+ * It reflects the project's CURRENT link state rather than always offering to
7
+ * mint one:
8
+ *
9
+ * - On mount it lists the project's links (`GET /projects/:projectId/shares`).
10
+ * - When a link already exists it shows the full, absolute URL
11
+ * (`<origin>/share/<slug>`) as a click-to-copy field with visual confirmation,
12
+ * plus a Revoke control — and it does NOT offer "Create link". A project has
13
+ * one public link at a time; to change the role you revoke and re-create.
14
+ * - When none exists (and the caller may manage) it offers create at the roles
15
+ * the host actually grants (`roles`, default `[viewer]`).
16
+ *
17
+ * `canManage` gates the mutating controls: a read-only viewer still sees and can
18
+ * copy an existing link, but cannot create or revoke. All mint requests clamp to
19
+ * a role the host grants — a public link is an unauthenticated credential.
20
+ *
21
+ * Styling uses `getClassMap()` (`cm.*`); inline styles are layout only. All
22
+ * user-facing text goes through `t()`.
23
+ *
24
+ * @module
25
+ */
26
+ import type { JSX } from 'react';
27
+ import type { ShareLinkResult, ShareRole } from './chat-share-utilities.js';
28
+ /**
29
+ * The reusable public-link manager. See the module doc for behavior.
30
+ *
31
+ * @param props - Component props.
32
+ * @returns The rendered manager.
33
+ */
34
+ export declare function ShareLinkManager({ projectId, canManage, canCreate, canRevoke, roles, initialRole, onCreated, onRevoked, }: {
35
+ projectId: string;
36
+ /**
37
+ * Umbrella default for {@link canCreate} and {@link canRevoke}. A caller who
38
+ * can neither create nor revoke may still view and copy an existing link.
39
+ */
40
+ canManage?: boolean;
41
+ /**
42
+ * Whether the caller may CREATE a link. Defaults to `canManage`. The two are
43
+ * separate because a host's backend often gates them at different roles (e.g.
44
+ * minting is admin+, revoking editor+), and offering a control the backend
45
+ * will 403 is worse than not offering it.
46
+ */
47
+ canCreate?: boolean;
48
+ /** Whether the caller may REVOKE a link. Defaults to `canManage`. */
49
+ canRevoke?: boolean;
50
+ /**
51
+ * The roles this host's backend actually grants through a public link, in the
52
+ * order to offer them. Defaults to `[viewer]`; pass more only when the backend
53
+ * really honours them.
54
+ */
55
+ roles?: readonly ShareRole[];
56
+ /** Role pre-selected in the create control when more than one is offered. */
57
+ initialRole?: ShareRole;
58
+ /** Called after a link is created, with the created link. */
59
+ onCreated?: (result: ShareLinkResult) => void;
60
+ /** Called after a link is revoked, with the revoked link's id. */
61
+ onRevoked?: (id: string) => void;
62
+ }): JSX.Element;
63
+ //# sourceMappingURL=ShareLinkManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkManager.d.ts","sourceRoot":"","sources":["../../src/components/ShareLinkManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAShC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAmB3E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,SAAgB,EAChB,SAAqB,EACrB,SAAqB,EACrB,KAA4B,EAC5B,WAAgC,EAChC,SAAS,EACT,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;IAC7C,kEAAkE;IAClE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,GAAG,GAAG,CAAC,OAAO,CAkRd"}
@@ -0,0 +1,162 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { t } from '@molecule/app-i18n';
4
+ import { getLogger } from '@molecule/app-logger';
5
+ import { useHttpClient, useThemeMode } from '@molecule/app-react';
6
+ import { getClassMap } from '@molecule/app-ui';
7
+ import { useCoarsePointer, useNarrowViewport } from '../hooks/useViewport.js';
8
+ import { buildSharePayload, buildShareUrl, DEFAULT_SHARE_ROLE, SHARE_ROLE_LABELS, } from './chat-share-utilities.js';
9
+ import { Icon } from './Icon.js';
10
+ const logger = getLogger('share-link-manager');
11
+ /** The current page origin, or `''` during SSR. */
12
+ function pageOrigin() {
13
+ return typeof window !== 'undefined' ? window.location.origin : '';
14
+ }
15
+ /**
16
+ * The reusable public-link manager. See the module doc for behavior.
17
+ *
18
+ * @param props - Component props.
19
+ * @returns The rendered manager.
20
+ */
21
+ export function ShareLinkManager({ projectId, canManage = true, canCreate = canManage, canRevoke = canManage, roles = [DEFAULT_SHARE_ROLE], initialRole = DEFAULT_SHARE_ROLE, onCreated, onRevoked, }) {
22
+ const cm = getClassMap();
23
+ const http = useHttpClient();
24
+ const isLight = useThemeMode() === 'light';
25
+ const isNarrow = useNarrowViewport();
26
+ const isCoarse = useCoarsePointer();
27
+ const offeredRoles = roles.length ? roles : [DEFAULT_SHARE_ROLE];
28
+ const [role, setRole] = useState(offeredRoles.includes(initialRole) ? initialRole : offeredRoles[0]);
29
+ const [links, setLinks] = useState([]);
30
+ const [loading, setLoading] = useState(true);
31
+ const [creating, setCreating] = useState(false);
32
+ const [revokingId, setRevokingId] = useState(null);
33
+ const [copiedId, setCopiedId] = useState(null);
34
+ const [error, setError] = useState(null);
35
+ const copyTimer = useRef(null);
36
+ useEffect(() => () => {
37
+ if (copyTimer.current)
38
+ clearTimeout(copyTimer.current);
39
+ }, []);
40
+ const border = isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)';
41
+ const fieldStyle = {
42
+ width: '100%',
43
+ padding: '6px 8px',
44
+ borderRadius: 4,
45
+ border: `1px solid ${border}`,
46
+ background: 'transparent',
47
+ color: 'inherit',
48
+ outline: 'none',
49
+ // ≥16px on phones/touch so iOS Safari doesn't zoom the page on focus.
50
+ ...(isNarrow || isCoarse ? { fontSize: 16 } : {}),
51
+ };
52
+ const loadLinks = useCallback(async () => {
53
+ try {
54
+ const res = await http.get(`/projects/${projectId}/shares`);
55
+ const body = res.data;
56
+ const list = Array.isArray(body) ? body : (body?.data ?? []);
57
+ // A revoked link is gone as far as the product is concerned.
58
+ setLinks(list.filter((link) => !link.revokedAt));
59
+ }
60
+ catch (err) {
61
+ logger.warn('Failed to list share links', { error: err });
62
+ setLinks([]);
63
+ }
64
+ finally {
65
+ setLoading(false);
66
+ }
67
+ }, [http, projectId]);
68
+ useEffect(() => {
69
+ void loadLinks();
70
+ }, [loadLinks]);
71
+ const handleCreate = useCallback(async () => {
72
+ if (creating)
73
+ return;
74
+ setCreating(true);
75
+ setError(null);
76
+ try {
77
+ const res = await http.post(`/projects/${projectId}/shares`, buildSharePayload(role));
78
+ setLinks((prev) => [res.data, ...prev]);
79
+ onCreated?.(res.data);
80
+ }
81
+ catch (err) {
82
+ logger.warn('Failed to create share link', { error: err });
83
+ setError(t('ide.chat.share.error', undefined, {
84
+ defaultValue: 'Could not create a share link. Please try again.',
85
+ }));
86
+ }
87
+ finally {
88
+ setCreating(false);
89
+ }
90
+ }, [creating, http, projectId, role, onCreated]);
91
+ const handleRevoke = useCallback(async (id) => {
92
+ if (revokingId)
93
+ return;
94
+ setRevokingId(id);
95
+ setError(null);
96
+ try {
97
+ await http.delete(`/projects/${projectId}/shares/${id}`);
98
+ setLinks((prev) => prev.filter((link) => link.id !== id));
99
+ onRevoked?.(id);
100
+ }
101
+ catch (err) {
102
+ logger.warn('Failed to revoke share link', { error: err });
103
+ setError(t('ide.chat.share.revokeFailed', undefined, {
104
+ defaultValue: 'Could not revoke that link. Please try again.',
105
+ }));
106
+ }
107
+ finally {
108
+ setRevokingId(null);
109
+ }
110
+ }, [revokingId, http, projectId, onRevoked]);
111
+ const handleCopy = useCallback((id, url) => {
112
+ void navigator.clipboard.writeText(url).then(() => {
113
+ setCopiedId(id);
114
+ if (copyTimer.current)
115
+ clearTimeout(copyTimer.current);
116
+ copyTimer.current = setTimeout(() => setCopiedId(null), 1500);
117
+ }, (err) => {
118
+ // Clipboard can be blocked (permissions / insecure context); the URL is
119
+ // still visible and the click selected it, so the user can copy by hand.
120
+ logger.warn('Clipboard write failed', { error: err });
121
+ });
122
+ }, []);
123
+ const hasLink = links.length > 0;
124
+ if (loading) {
125
+ return (_jsx("div", { "data-mol-id": "share-links-loading", className: cm.cn(cm.textMuted, cm.textSize('sm')), children: t('ide.chat.share.loading', undefined, { defaultValue: 'Loading…' }) }));
126
+ }
127
+ return (_jsxs("div", { "data-mol-id": "share-links", style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: [hasLink &&
128
+ links.map((link) => {
129
+ const url = buildShareUrl(link, pageOrigin());
130
+ const copied = copiedId === link.id;
131
+ return (_jsxs("div", { "data-mol-id": `share-link-${link.id ?? link.slug}`, style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.share.linkLabel', undefined, { defaultValue: 'Public link' }) }), _jsxs("div", { style: { display: 'flex', gap: 8, alignItems: 'stretch' }, children: [_jsx("input", { value: url, "data-mol-id": "share-link-url", readOnly: true, title: t('ide.chat.share.copyHint', undefined, { defaultValue: 'Click to copy' }), onClick: (e) => {
132
+ e.currentTarget.select();
133
+ handleCopy(link.id ?? link.slug, url);
134
+ }, className: cm.textSize('sm'), style: { ...fieldStyle, flex: 1, cursor: 'pointer' } }), _jsxs("button", { type: "button", "data-mol-id": "share-link-copy", onClick: () => handleCopy(link.id ?? link.slug, url), className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), title: t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), "aria-label": t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), style: {
135
+ flexShrink: 0,
136
+ display: 'inline-flex',
137
+ alignItems: 'center',
138
+ gap: 6,
139
+ height: 'auto',
140
+ }, children: [_jsx(Icon, { name: copied ? 'check' : 'copy', size: 14, "aria-hidden": "true" }), copied
141
+ ? t('ide.chat.share.copied', undefined, { defaultValue: 'Copied' })
142
+ : t('ide.chat.share.copyShort', undefined, { defaultValue: 'Copy' })] })] }), _jsxs("div", { style: {
143
+ display: 'flex',
144
+ alignItems: 'center',
145
+ justifyContent: 'space-between',
146
+ gap: 8,
147
+ }, children: [_jsx("span", { className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { lineHeight: 1.4 }, children: t(`ide.chat.share.grants.${link.role}`, { role: link.role }, { defaultValue: 'Anyone with this link can act as {{role}}.' }) }), canRevoke && link.id && (_jsx("button", { type: "button", "data-mol-id": `share-link-revoke-${link.id}`, onClick: () => void handleRevoke(link.id), disabled: revokingId === link.id, className: cm.cn(cm.button({ variant: 'ghost', color: 'error', size: 'sm' })), style: { flexShrink: 0 }, children: revokingId === link.id
148
+ ? t('ide.chat.share.revoking', undefined, { defaultValue: 'Revoking…' })
149
+ : t('ide.chat.share.revoke', undefined, { defaultValue: 'Revoke' }) }))] })] }, link.id ?? link.slug));
150
+ }), !hasLink && !canCreate && (_jsx("div", { "data-mol-id": "share-links-none", className: cm.cn(cm.textMuted, cm.textSize('sm')), children: t('ide.chat.share.none', undefined, { defaultValue: 'No public link yet.' }) })), !hasLink && canCreate && (_jsxs(_Fragment, { children: [offeredRoles.length > 1 && (_jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.share.roleLabel', undefined, { defaultValue: 'Role' }) }), _jsx("select", { value: role, "data-mol-id": "share-role", onChange: (e) => setRole(e.target.value), className: cm.textSize('sm'), style: fieldStyle, children: offeredRoles.map((r) => (_jsx("option", { value: r, children: t(`ide.chat.share.role.${r}`, undefined, {
151
+ defaultValue: SHARE_ROLE_LABELS[r],
152
+ }) }, r))) })] })), _jsxs("button", { type: "button", "data-mol-id": "share-create", onClick: () => void handleCreate(), disabled: creating, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), style: {
153
+ opacity: creating ? 0.6 : 1,
154
+ display: 'inline-flex',
155
+ alignItems: 'center',
156
+ gap: 6,
157
+ alignSelf: 'flex-start',
158
+ }, children: [_jsx(Icon, { name: "share", size: 14, "aria-hidden": "true" }), creating
159
+ ? t('ide.chat.share.creating', undefined, { defaultValue: 'Creating…' })
160
+ : t('ide.chat.share.create', undefined, { defaultValue: 'Create link' })] })] })), error && (_jsx("div", { "data-mol-id": "share-error", className: cm.textError, style: { lineHeight: 1.4 }, children: error }))] }));
161
+ }
162
+ //# sourceMappingURL=ShareLinkManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkManager.js","sourceRoot":"","sources":["../../src/components/ShareLinkManager.tsx"],"names":[],"mappings":"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"}
@@ -1,21 +1,17 @@
1
1
  /**
2
2
  * `/share` link modal.
3
3
  *
4
- * A centered modal that creates a public share link for the current project. It
5
- * POSTs `{ role }` to `POST /projects/:projectId/shares`; the backend (wired in
6
- * the host app) mints a slug-bearing link and returns it, and the modal renders
7
- * the resulting URL in a read-only field with a copy-to-clipboard button so the
8
- * user can hand it out. Opening `GET /share/:slug` grants that role.
4
+ * A centered modal wrapping {@link ShareLinkManager} the shared public-link UI
5
+ * a host also mounts in its team/access panel, so the modal and that panel never
6
+ * diverge. On open the manager reflects the project's CURRENT link: if one
7
+ * already exists it shows the absolute URL (click-to-copy) plus Revoke and does
8
+ * NOT offer to create another; otherwise it offers create at the roles the host
9
+ * grants.
9
10
  *
10
11
  * **Only the roles the HOST actually grants are offered**, via `roles`, which
11
12
  * defaults to `[viewer]` — a link anyone can open is an unauthenticated
12
13
  * credential, so write access through one is something a host has to opt into
13
- * rather than something this modal offers by default. The role `<select>`
14
- * appears only when there is a genuine choice; with one role the modal simply
15
- * states what the link will grant. This used to render all four contract roles
16
- * unconditionally while the only shipped backend clamped every one of them to
17
- * `viewer` — so picking "Editor — view & edit" minted a viewer link and the
18
- * dialog told the user two contradictory things at once.
14
+ * rather than something this modal offers by default.
19
15
  *
20
16
  * Styling uses `getClassMap()` (`cm.*`); the only inline styles are layout the
21
17
  * ClassMap can't express. All user-facing text goes through `t()`.
@@ -1 +1 @@
1
- {"version":3,"file":"ShareModal.d.ts","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAShC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAW3E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,WAAgC,EAChC,KAA4B,EAC5B,OAAO,EACP,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAC9C,GAAG,GAAG,CAAC,OAAO,CAkQd"}
1
+ {"version":3,"file":"ShareModal.d.ts","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAMhC,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAI3E;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,WAAgC,EAChC,KAA4B,EAC5B,OAAO,EACP,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;CAC9C,GAAG,GAAG,CAAC,OAAO,CAyFd"}
@@ -1,13 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useState } from 'react';
2
+ import { useEffect } from 'react';
3
3
  import { t } from '@molecule/app-i18n';
4
- import { getLogger } from '@molecule/app-logger';
5
- import { useHttpClient, useThemeMode } from '@molecule/app-react';
6
4
  import { getClassMap } from '@molecule/app-ui';
7
- import { useCoarsePointer, useNarrowViewport } from '../hooks/useViewport.js';
8
- import { buildSharePayload, buildShareUrl, DEFAULT_SHARE_ROLE, SHARE_ROLE_LABELS, } from './chat-share-utilities.js';
9
- import { Icon } from './Icon.js';
10
- const logger = getLogger('share-modal');
5
+ import { DEFAULT_SHARE_ROLE } from './chat-share-utilities.js';
6
+ import { ShareLinkManager } from './ShareLinkManager.js';
11
7
  /**
12
8
  * The share-link modal opened by `/share`, `/share <role>`, and the header
13
9
  * share button.
@@ -17,17 +13,6 @@ const logger = getLogger('share-modal');
17
13
  */
18
14
  export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles = [DEFAULT_SHARE_ROLE], onClose, onCreated, }) {
19
15
  const cm = getClassMap();
20
- const http = useHttpClient();
21
- const isLight = useThemeMode() === 'light';
22
- // A requested role the host does not grant would be silently downgraded by
23
- // the backend, so fall back to the first offered role rather than showing a
24
- // choice that will not be honoured.
25
- const offeredRoles = roles.length ? roles : [DEFAULT_SHARE_ROLE];
26
- const [role, setRole] = useState(offeredRoles.includes(initialRole) ? initialRole : offeredRoles[0]);
27
- const [creating, setCreating] = useState(false);
28
- const [created, setCreated] = useState(null);
29
- const [copied, setCopied] = useState(false);
30
- const [error, setError] = useState(null);
31
16
  // Escape closes the modal.
32
17
  useEffect(() => {
33
18
  const handler = (e) => {
@@ -37,58 +22,7 @@ export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles
37
22
  window.addEventListener('keydown', handler);
38
23
  return () => window.removeEventListener('keydown', handler);
39
24
  }, [onClose]);
40
- const isNarrow = useNarrowViewport();
41
- const isCoarse = useCoarsePointer();
42
- const border = isLight ? 'rgba(0,0,0,0.12)' : 'rgba(255,255,255,0.12)';
43
- const fieldStyle = {
44
- width: '100%',
45
- padding: '6px 8px',
46
- borderRadius: 4,
47
- border: `1px solid ${border}`,
48
- background: 'transparent',
49
- color: 'inherit',
50
- outline: 'none',
51
- // ≥16px on phones/touch so iOS Safari doesn't zoom the page on focus
52
- // (the role <select> and the focus-selecting link input both zoom below
53
- // 16px; the inline size deliberately overrides cm.textSize('sm') there).
54
- ...(isNarrow || isCoarse ? { fontSize: 16 } : {}),
55
- };
56
- const shareUrl = created
57
- ? buildShareUrl(created, typeof window !== 'undefined' ? window.location.origin : '')
58
- : '';
59
- const handleCreate = useCallback(async () => {
60
- if (creating)
61
- return;
62
- setCreating(true);
63
- setError(null);
64
- try {
65
- const res = await http.post(`/projects/${projectId}/shares`, buildSharePayload(role));
66
- setCreated(res.data);
67
- setCopied(false);
68
- onCreated?.(res.data);
69
- }
70
- catch (err) {
71
- logger.warn('Failed to create share link', { error: err });
72
- setError(t('ide.chat.share.error', undefined, {
73
- defaultValue: 'Could not create a share link. Please try again.',
74
- }));
75
- }
76
- finally {
77
- setCreating(false);
78
- }
79
- }, [creating, http, projectId, role, onCreated]);
80
- const handleCopy = useCallback(() => {
81
- if (!shareUrl)
82
- return;
83
- void navigator.clipboard.writeText(shareUrl).then(() => {
84
- setCopied(true);
85
- setTimeout(() => setCopied(false), 1500);
86
- }, (err) => {
87
- // Clipboard can be blocked (permissions / insecure context); the link
88
- // is still visible and selectable in the field, so this is recoverable.
89
- logger.warn('Clipboard write failed', { error: err });
90
- });
91
- }, [shareUrl]);
25
+ const offeredRoles = roles.length ? roles : [DEFAULT_SHARE_ROLE];
92
26
  return (_jsx("div", { "data-mol-id": "share-modal-backdrop", onClick: onClose, style: {
93
27
  position: 'fixed',
94
28
  inset: 0,
@@ -114,34 +48,6 @@ export function ShareModal({ projectId, initialRole = DEFAULT_SHARE_ROLE, roles
114
48
  })
115
49
  : t(`ide.chat.share.subheading.${offeredRoles[0]}`, { role: offeredRoles[0] }, {
116
50
  defaultValue: 'Create a public link. Anyone with the link can act as {{role}}.',
117
- }) }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: [offeredRoles.length > 1 && (_jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.share.roleLabel', undefined, { defaultValue: 'Role' }) }), _jsx("select", { value: role, "data-mol-id": "share-role", onChange: (e) => setRole(e.target.value), className: cm.textSize('sm'), style: fieldStyle, children: offeredRoles.map((r) => (_jsx("option", { value: r, children: t(`ide.chat.share.role.${r}`, undefined, {
118
- defaultValue: SHARE_ROLE_LABELS[r],
119
- }) }, r))) })] })), created && (_jsxs("label", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { className: cm.fontWeight('medium'), children: t('ide.chat.share.linkLabel', undefined, { defaultValue: 'Public link' }) }), _jsxs("div", { style: { display: 'flex', gap: 8, alignItems: 'stretch' }, children: [_jsx("input", { value: shareUrl, "data-mol-id": "share-link", readOnly: true, onFocus: (e) => e.currentTarget.select(), className: cm.textSize('sm'), style: { ...fieldStyle, flex: 1 } }), _jsxs("button", { type: "button", "data-mol-id": "share-copy", onClick: handleCopy, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), title: t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), "aria-label": t('ide.chat.share.copy', undefined, { defaultValue: 'Copy link' }), style: {
120
- flexShrink: 0,
121
- display: 'inline-flex',
122
- alignItems: 'center',
123
- gap: 6,
124
- // The `sm` button class hard-sets h-[26px]; an explicit height
125
- // can't be stretched by the row's alignItems:'stretch', so it
126
- // stays shorter than the taller hand-rolled link input beside
127
- // it (16px font on touch makes that input taller still).
128
- // Dropping to auto lets stretch size the button to the input.
129
- height: 'auto',
130
- }, children: [_jsx(Icon, { name: copied ? 'check' : 'copy', size: 14, "aria-hidden": "true" }), copied
131
- ? t('ide.chat.share.copied', undefined, { defaultValue: 'Copied' })
132
- : t('ide.chat.share.copyShort', undefined, { defaultValue: 'Copy' })] })] }), _jsx("span", { className: cm.cn(cm.textMuted, cm.textSize('xs')), style: { lineHeight: 1.4 }, children: t(`ide.chat.share.grants.${created.role}`, { role: created.role }, {
133
- defaultValue: 'Anyone with this link can act as {{role}}.',
134
- }) })] })), error && (_jsx("div", { "data-mol-id": "share-error", className: cm.textError, style: { lineHeight: 1.4 }, children: error }))] }), _jsxs("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, marginTop: 16 }, children: [_jsx("button", { type: "button", "data-mol-id": "share-close", onClick: onClose, className: cm.cn(cm.button({ variant: 'ghost', size: 'sm' })), children: created
135
- ? t('common.done', undefined, { defaultValue: 'Done' })
136
- : t('common.cancel', undefined, { defaultValue: 'Cancel' }) }), _jsxs("button", { type: "button", "data-mol-id": "share-create", onClick: () => void handleCreate(), disabled: creating, className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'sm' })), style: {
137
- opacity: creating ? 0.6 : 1,
138
- display: 'inline-flex',
139
- alignItems: 'center',
140
- gap: 6,
141
- }, children: [_jsx(Icon, { name: "share", size: 14, "aria-hidden": "true" }), creating
142
- ? t('ide.chat.share.creating', undefined, { defaultValue: 'Creating…' })
143
- : created
144
- ? t('ide.chat.share.createAnother', undefined, { defaultValue: 'Create new link' })
145
- : t('ide.chat.share.create', undefined, { defaultValue: 'Create link' })] })] })] }) }));
51
+ }) }), _jsx(ShareLinkManager, { projectId: projectId, roles: offeredRoles, initialRole: initialRole, onCreated: onCreated }), _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, marginTop: 16 }, children: _jsx("button", { type: "button", "data-mol-id": "share-close", onClick: onClose, className: cm.cn(cm.button({ variant: 'ghost', size: 'sm' })), children: t('common.done', undefined, { defaultValue: 'Done' }) }) })] }) }));
146
52
  }
147
53
  //# sourceMappingURL=ShareModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShareModal.js","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShareModal.js","sourceRoot":"","sources":["../../src/components/ShareModal.tsx"],"names":[],"mappings":"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"}
@@ -51,6 +51,12 @@ export interface ShareLinkResult {
51
51
  * wins over the current page origin.
52
52
  */
53
53
  url?: string;
54
+ /** When the link expires, if ever (ISO 8601); absent/`null` = no expiry. */
55
+ expiresAt?: string | null;
56
+ /** When the link was revoked (ISO 8601); absent/`null` = still active. */
57
+ revokedAt?: string | null;
58
+ /** When the link was created (ISO 8601). */
59
+ createdAt?: string;
54
60
  }
55
61
  /**
56
62
  * The parsed result of a `/share` command:
@@ -1 +1 @@
1
- {"version":3,"file":"chat-share-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-share-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,qDAAsD,CAAA;AAE9E,sCAAsC;AACtC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,SAAoB,CAAA;AAErD,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAKvD,CAAA;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,SAAS,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,IAAI,EAAE,SAAS,CAAA;IACf;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjG;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,SAA8B,GAAG,YAAY,CAEpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7E"}
1
+ {"version":3,"file":"chat-share-utilities.d.ts","sourceRoot":"","sources":["../../src/components/chat-share-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,qDAAsD,CAAA;AAE9E,sCAAsC;AACtC,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,SAAoB,CAAA;AAErD,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAKvD,CAAA;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,IAAI,EAAE,SAAS,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,IAAI,EAAE,SAAS,CAAA;IACf;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjG;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,SAA8B,GAAG,YAAY,CAEpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat-share-utilities.js","sourceRoot":"","sources":["../../src/components/chat-share-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAK9E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAc,QAAQ,CAAA;AAErD,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,4BAA4B;IACvC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,qBAAqB;CAC7B,CAAA;AAoCD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAQ,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC9D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAkB,kBAAkB;IACpE,OAAO,EAAE,IAAI,EAAE,CAAA;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,MAAc;IACnE,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,GAAG,CAAA;IACjC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAChD,OAAO,GAAG,aAAa,UAAU,MAAM,CAAC,IAAI,EAAE,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"chat-share-utilities.js","sourceRoot":"","sources":["../../src/components/chat-share-utilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAK9E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAc,QAAQ,CAAA;AAErD,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,4BAA4B;IACvC,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,qBAAqB;CAC7B,CAAA;AA0CD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAQ,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAA;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC/B,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC9D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAkB,kBAAkB;IACpE,OAAO,EAAE,IAAI,EAAE,CAAA;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,MAAc;IACnE,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,GAAG,CAAA;IACjC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAChD,OAAO,GAAG,aAAa,UAAU,MAAM,CAAC,IAAI,EAAE,CAAA;AAChD,CAAC"}
@@ -24,6 +24,7 @@ export { QuickPicker } from './QuickPicker.js';
24
24
  export { ReportModal } from './ReportModal.js';
25
25
  export { ResizeHandle } from './ResizeHandle.js';
26
26
  export { SearchPanel } from './SearchPanel.js';
27
+ export { ShareLinkManager } from './ShareLinkManager.js';
27
28
  export { ShareModal } from './ShareModal.js';
28
29
  export { SidebarTabs } from './SidebarTabs.js';
29
30
  export { TabBar } from './TabBar.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AACvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AACvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
@@ -22,6 +22,7 @@ export { QuickPicker } from './QuickPicker.js';
22
22
  export { ReportModal } from './ReportModal.js';
23
23
  export { ResizeHandle } from './ResizeHandle.js';
24
24
  export { SearchPanel } from './SearchPanel.js';
25
+ export { ShareLinkManager } from './ShareLinkManager.js';
25
26
  export { ShareModal } from './ShareModal.js';
26
27
  export { SidebarTabs } from './SidebarTabs.js';
27
28
  export { TabBar } from './TabBar.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/types.d.ts CHANGED
@@ -7,6 +7,7 @@ import type { ErrorInfo, ReactNode } from 'react';
7
7
  import type { ChatMessage, ChatStreamEvent } from '@molecule/app-ai-chat';
8
8
  import type { EditorTab, FixWithAIRequest } from '@molecule/app-code-editor';
9
9
  import type { DeviceFrame } from '@molecule/app-live-preview';
10
+ import type { CommandDef } from './command-metadata.js';
10
11
  import type { Activity as ActivityFromCard } from './components/activity-utilities.js';
11
12
  import type { ChatEventCardAction } from './customEventCards.js';
12
13
  /**
@@ -187,6 +188,12 @@ export interface ChatPanelProps {
187
188
  * surface). Omit to hide the row — the shared package stays host-agnostic.
188
189
  */
189
190
  onManageCustomModels?: () => void;
191
+ /**
192
+ * Bump to make the panel re-read its persisted model/settings state — e.g.
193
+ * after the host's custom-provider surface sets the chat model via "Use".
194
+ * The panel loads that state once on mount otherwise.
195
+ */
196
+ modelSelectionSignal?: number;
190
197
  /** Spinner/busy indicator node to show for in-chat loading states (e.g. the "designing" indicator). Falls back to a built-in dots animation. */
191
198
  spinner?: ReactNode;
192
199
  /** Path of the currently focused file in the editor (shown first in @ picker). */
@@ -292,6 +299,19 @@ export interface ChatPanelProps {
292
299
  * of its own, so when omitted it falls back to the package default constant.
293
300
  */
294
301
  version?: string;
302
+ /**
303
+ * Host-specific slash commands to MERGE into the command menu, `/help`, and the
304
+ * keyboard dispatcher, on top of the shared {@link COMMANDS} registry. For
305
+ * commands the host handles itself (server-side intercepts or the agent), so
306
+ * they show up in the menu instead of being invisible. Selecting one fills the
307
+ * input with `/<id> ` (so the user can add arguments) and sending it routes to
308
+ * the host's own handler — the shared package never dispatches these.
309
+ *
310
+ * The host owns keeping this list in sync with its handlers; molecule.dev, for
311
+ * example, fetches it from `GET /ai/commands`. Ids must not collide with a
312
+ * shared command id. Optional — omit for the plain shared command set.
313
+ */
314
+ extraCommands?: readonly CommandDef[];
295
315
  /**
296
316
  * URL the command-menu "Report a problem" link points at (the host's own issue
297
317
  * tracker / feedback page). The shared IDE owns no product URLs, so when this