@tangle-network/agent-app 0.45.47 → 0.45.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DesignCanvas-P2ZVK6FM.js → DesignCanvas-JRBCAWHW.js} +2 -2
- package/dist/{DesignCanvasEditor-DGNCA54P.js → DesignCanvasEditor-J2OLS22G.js} +4 -4
- package/dist/{IntakeInterview-3ZIQMZS6.js → IntakeInterview-OKT6DCBN.js} +2 -2
- package/dist/InvitationsPanel-OFCYVSAE.js +9 -0
- package/dist/InviteAcceptPage-BDOO4JSE.js +7 -0
- package/dist/MembersPanel-3ZK2GCMC.js +9 -0
- package/dist/{TimelineEditor-OTNPJ3SN.js → TimelineEditor-52YEPDX5.js} +2 -2
- package/dist/VaultPane-IGJKB6CX.js +7 -0
- package/dist/assistant/index.d.ts +36 -11
- package/dist/assistant/index.js +235 -90
- package/dist/assistant/index.js.map +1 -1
- package/dist/{billing-BibxgALe.d.ts → billing-BuNlaKlE.d.ts} +15 -23
- package/dist/chat-react/index.js +2 -1
- package/dist/chat-react/index.js.map +1 -1
- package/dist/{chunk-TL37E5YY.js → chunk-33BN7P57.js} +6 -6
- package/dist/chunk-33BN7P57.js.map +1 -0
- package/dist/{chunk-IUSO2XRE.js → chunk-5MI2SKQH.js} +14 -15
- package/dist/chunk-5MI2SKQH.js.map +1 -0
- package/dist/{chunk-65OZT566.js → chunk-7LJYCHXK.js} +29 -27
- package/dist/chunk-7LJYCHXK.js.map +1 -0
- package/dist/chunk-AULM4X7U.js +77 -0
- package/dist/chunk-AULM4X7U.js.map +1 -0
- package/dist/{chunk-GNPN6ED4.js → chunk-CJHIAZKK.js} +128 -166
- package/dist/chunk-CJHIAZKK.js.map +1 -0
- package/dist/{chunk-54FYYXAX.js → chunk-ENLRJYVW.js} +21 -18
- package/dist/chunk-ENLRJYVW.js.map +1 -0
- package/dist/{chunk-F4XLTVQ3.js → chunk-GRDLGQ6A.js} +19 -18
- package/dist/chunk-GRDLGQ6A.js.map +1 -0
- package/dist/{chunk-BT4QFCTB.js → chunk-HSBJB46C.js} +13 -1
- package/dist/chunk-HSBJB46C.js.map +1 -0
- package/dist/{chunk-VOJB7MVG.js → chunk-I2CA5N7V.js} +70 -28
- package/dist/chunk-I2CA5N7V.js.map +1 -0
- package/dist/chunk-MLG6XKPV.js +44 -0
- package/dist/chunk-MLG6XKPV.js.map +1 -0
- package/dist/{chunk-IN6LNZ7O.js → chunk-Q2QKEV6J.js} +7 -7
- package/dist/{chunk-IN6LNZ7O.js.map → chunk-Q2QKEV6J.js.map} +1 -1
- package/dist/{chunk-B62EZF52.js → chunk-UMV45ZDF.js} +3 -3
- package/dist/{chunk-JJJEO4ND.js → chunk-VWTODXRW.js} +2 -2
- package/dist/{chunk-JJJEO4ND.js.map → chunk-VWTODXRW.js.map} +1 -1
- package/dist/{chunk-VCPZ3HTN.js → chunk-W7P5KV6O.js} +51 -27
- package/dist/chunk-W7P5KV6O.js.map +1 -0
- package/dist/{chunk-ZX5UT4HF.js → chunk-ZAKKG6WI.js} +354 -273
- package/dist/chunk-ZAKKG6WI.js.map +1 -0
- package/dist/{chunk-PE67O2LH.js → chunk-ZGY6QB4F.js} +21 -16
- package/dist/chunk-ZGY6QB4F.js.map +1 -0
- package/dist/design-canvas-react/index.js +18 -16
- package/dist/design-canvas-react/index.js.map +1 -1
- package/dist/design-canvas-react/lazy.js +1 -1
- package/dist/intakes-react/index.js +1 -1
- package/dist/intakes-react/lazy.js +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +16 -16
- package/dist/platform/index.js.map +1 -1
- package/dist/sequences-react/index.js +2 -2
- package/dist/studio/index.d.ts +13 -1
- package/dist/studio/index.js +13 -1
- package/dist/studio-react/index.js +115 -78
- package/dist/studio-react/index.js.map +1 -1
- package/dist/studio-react/studio.css +0 -56
- package/dist/teams-react/index.js +4 -3
- package/dist/teams-react/lazy.js +3 -3
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.css +15 -13
- package/dist/vault/index.js +1 -1
- package/dist/vault/lazy.js +1 -1
- package/dist/web-react/index.d.ts +16 -12
- package/dist/web-react/index.js +6 -4
- package/dist/work-product-react/index.js +9 -27
- package/dist/work-product-react/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/InvitationsPanel-F56UOQXA.js +0 -8
- package/dist/InviteAcceptPage-P3QJC3C6.js +0 -7
- package/dist/MembersPanel-XNLF3SA4.js +0 -8
- package/dist/VaultPane-MUWGYVJ7.js +0 -7
- package/dist/chunk-54FYYXAX.js.map +0 -1
- package/dist/chunk-65OZT566.js.map +0 -1
- package/dist/chunk-BT4QFCTB.js.map +0 -1
- package/dist/chunk-F4XLTVQ3.js.map +0 -1
- package/dist/chunk-GNPN6ED4.js.map +0 -1
- package/dist/chunk-IUSO2XRE.js.map +0 -1
- package/dist/chunk-PE67O2LH.js.map +0 -1
- package/dist/chunk-TL37E5YY.js.map +0 -1
- package/dist/chunk-VCPZ3HTN.js.map +0 -1
- package/dist/chunk-VOJB7MVG.js.map +0 -1
- package/dist/chunk-ZX5UT4HF.js.map +0 -1
- /package/dist/{DesignCanvas-P2ZVK6FM.js.map → DesignCanvas-JRBCAWHW.js.map} +0 -0
- /package/dist/{DesignCanvasEditor-DGNCA54P.js.map → DesignCanvasEditor-J2OLS22G.js.map} +0 -0
- /package/dist/{IntakeInterview-3ZIQMZS6.js.map → IntakeInterview-OKT6DCBN.js.map} +0 -0
- /package/dist/{InvitationsPanel-F56UOQXA.js.map → InvitationsPanel-OFCYVSAE.js.map} +0 -0
- /package/dist/{InviteAcceptPage-P3QJC3C6.js.map → InviteAcceptPage-BDOO4JSE.js.map} +0 -0
- /package/dist/{MembersPanel-XNLF3SA4.js.map → MembersPanel-3ZK2GCMC.js.map} +0 -0
- /package/dist/{TimelineEditor-OTNPJ3SN.js.map → TimelineEditor-52YEPDX5.js.map} +0 -0
- /package/dist/{VaultPane-MUWGYVJ7.js.map → VaultPane-IGJKB6CX.js.map} +0 -0
- /package/dist/{chunk-B62EZF52.js.map → chunk-UMV45ZDF.js.map} +0 -0
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RoleSelect
|
|
3
|
+
} from "./chunk-AULM4X7U.js";
|
|
1
4
|
import {
|
|
2
5
|
hasWorkspaceRole
|
|
3
6
|
} from "./chunk-6XIAPIW6.js";
|
|
@@ -5,12 +8,7 @@ import {
|
|
|
5
8
|
// src/teams-react/components/InvitationsPanel.tsx
|
|
6
9
|
import { useState } from "react";
|
|
7
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
var
|
|
9
|
-
{ value: "viewer", label: "Viewer" },
|
|
10
|
-
{ value: "editor", label: "Editor" },
|
|
11
|
-
{ value: "admin", label: "Admin" }
|
|
12
|
-
];
|
|
13
|
-
var BADGE_BASE = "inline-flex items-center rounded border px-2 py-0.5 text-[11px] font-semibold uppercase tracking-[0.05em]";
|
|
11
|
+
var BADGE_BASE = "inline-flex items-center rounded border px-2 py-0.5 text-xs font-semibold uppercase tracking-[0.05em]";
|
|
14
12
|
var STATUS_BADGE = {
|
|
15
13
|
accepted: "border-[var(--surface-success-border)] bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]",
|
|
16
14
|
pending: "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]",
|
|
@@ -22,6 +20,9 @@ var EMAIL_BADGE = {
|
|
|
22
20
|
not_sent: "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]",
|
|
23
21
|
failed: "border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]"
|
|
24
22
|
};
|
|
23
|
+
function capitalize(text) {
|
|
24
|
+
return text.length === 0 ? text : text[0].toUpperCase() + text.slice(1);
|
|
25
|
+
}
|
|
25
26
|
function InvitationsPanel({
|
|
26
27
|
invitations,
|
|
27
28
|
currentRole,
|
|
@@ -103,13 +104,11 @@ function InvitationsPanel({
|
|
|
103
104
|
}
|
|
104
105
|
),
|
|
105
106
|
/* @__PURE__ */ jsx(
|
|
106
|
-
|
|
107
|
+
RoleSelect,
|
|
107
108
|
{
|
|
108
109
|
value: inviteRole,
|
|
109
|
-
|
|
110
|
-
onChange:
|
|
111
|
-
className: "rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-2 py-1.5 text-xs text-[var(--text-secondary)]",
|
|
112
|
-
children: ASSIGNABLE.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.value))
|
|
110
|
+
ariaLabel: "Invite role",
|
|
111
|
+
onChange: setInviteRole
|
|
113
112
|
}
|
|
114
113
|
),
|
|
115
114
|
/* @__PURE__ */ jsx(
|
|
@@ -118,7 +117,7 @@ function InvitationsPanel({
|
|
|
118
117
|
type: "button",
|
|
119
118
|
onClick: () => void submitInvite(),
|
|
120
119
|
disabled: inviting || !inviteEmail.trim(),
|
|
121
|
-
className: "rounded bg-[var(--brand-primary)] px-3 py-1.5 text-sm text-
|
|
120
|
+
className: "rounded bg-[var(--brand-primary)] px-3 py-1.5 text-sm text-[hsl(var(--primary-foreground))] disabled:opacity-50",
|
|
122
121
|
children: inviting ? "Inviting\u2026" : "Invite"
|
|
123
122
|
}
|
|
124
123
|
)
|
|
@@ -159,8 +158,8 @@ function InvitationRow({ invitation, canManage, busy, onCopy, onResend, onRevoke
|
|
|
159
158
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
|
|
160
159
|
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
161
160
|
/* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium text-[var(--text-primary)]", children: invitation.email }),
|
|
162
|
-
/* @__PURE__ */ jsxs("p", { className: "text-xs
|
|
163
|
-
invitation.permissions,
|
|
161
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-[var(--text-muted)]", children: [
|
|
162
|
+
capitalize(invitation.permissions),
|
|
164
163
|
" \xB7 expires ",
|
|
165
164
|
expiry
|
|
166
165
|
] }),
|
|
@@ -209,4 +208,4 @@ function InvitationRow({ invitation, canManage, busy, onCopy, onResend, onRevoke
|
|
|
209
208
|
export {
|
|
210
209
|
InvitationsPanel
|
|
211
210
|
};
|
|
212
|
-
//# sourceMappingURL=chunk-
|
|
211
|
+
//# sourceMappingURL=chunk-5MI2SKQH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/teams-react/components/InvitationsPanel.tsx"],"sourcesContent":["/**\n * Email-invitation panel: invite by email + role, and a history of every\n * invitation (pending / accepted / expired / revoked) with its email-delivery\n * status. Pending rows expose copy-link / resend / revoke. Fully callback-driven\n * — the host supplies the data and the async `onInvite` / `onResend` / `onRevoke`\n * callbacks (backed by `./teams/invitations-api`), so this imports no app router,\n * fetch client, or toast. Styled with the shipped Tangle Quiet tokens (`var(--*)`).\n *\n * Mount alongside a list-only `MembersPanel` (`showInviteForm={false}`): the\n * members panel shows accepted members, this owns the invite flow + pending list.\n */\n\nimport { useState } from 'react'\nimport type { WorkspaceRole } from '../../teams/roles'\nimport { hasWorkspaceRole } from '../../teams/roles'\nimport type { InvitationView, InvitationsPanelProps } from '../contracts'\nimport { RoleSelect } from './RoleSelect'\n\nconst BADGE_BASE = 'inline-flex items-center rounded border px-2 py-0.5 text-xs font-semibold uppercase tracking-[0.05em]'\n\n// Lifecycle status: green = in, amber = awaiting, red = killed, muted = lapsed.\nconst STATUS_BADGE: Record<InvitationView['status'], string> = {\n accepted: 'border-[var(--surface-success-border)] bg-[var(--surface-success-bg)] text-[var(--surface-success-text)]',\n pending: 'border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]',\n revoked: 'border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]',\n expired: 'border-[var(--border-default)] text-[var(--text-muted)]',\n}\n\n// Delivery status: red = bounced, amber = not yet attempted, muted = the normal happy path.\nconst EMAIL_BADGE: Record<InvitationView['emailStatus'], string> = {\n sent: 'border-[var(--border-default)] text-[var(--text-muted)]',\n not_sent: 'border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)] text-[var(--surface-warning-text)]',\n failed: 'border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)] text-[var(--surface-danger-text)]',\n}\n\n/** Uppercase the role's first letter in JS (not CSS `capitalize`, which would\n * also hit the lowercase \"expires\" in the same line). */\nfunction capitalize(text: string): string {\n return text.length === 0 ? text : text[0]!.toUpperCase() + text.slice(1)\n}\n\nexport function InvitationsPanel({\n invitations,\n currentRole,\n onInvite,\n onResend,\n onRevoke,\n onCopy,\n onNotice,\n}: InvitationsPanelProps) {\n const [inviteEmail, setInviteEmail] = useState('')\n const [inviteRole, setInviteRole] = useState<WorkspaceRole>('editor')\n const [inviting, setInviting] = useState(false)\n const [busyId, setBusyId] = useState<string | null>(null)\n\n const canManage = hasWorkspaceRole(currentRole, 'admin')\n\n function notify(kind: 'success' | 'error', message: string) {\n onNotice?.({ kind, message })\n }\n\n async function submitInvite() {\n const email = inviteEmail.trim()\n if (!email || inviting) return\n setInviting(true)\n try {\n await onInvite({ email, role: inviteRole })\n notify('success', `Invitation sent to ${email}`)\n setInviteEmail('')\n } catch (err) {\n notify('error', err instanceof Error ? err.message : 'Failed to invite')\n } finally {\n setInviting(false)\n }\n }\n\n async function copyLink(inviteUrl: string) {\n try {\n if (onCopy) await onCopy({ inviteUrl })\n else await navigator.clipboard.writeText(inviteUrl)\n notify('success', 'Invite link copied')\n } catch (err) {\n notify('error', err instanceof Error ? err.message : 'Failed to copy link')\n }\n }\n\n async function resend(invitationId: string) {\n setBusyId(invitationId)\n try {\n await onResend({ invitationId })\n notify('success', 'Invitation resent')\n } catch (err) {\n notify('error', err instanceof Error ? err.message : 'Failed to resend invitation')\n } finally {\n setBusyId(null)\n }\n }\n\n async function revoke(invitationId: string) {\n setBusyId(invitationId)\n try {\n await onRevoke({ invitationId })\n notify('success', 'Invitation revoked')\n } catch (err) {\n notify('error', err instanceof Error ? err.message : 'Failed to revoke invitation')\n } finally {\n setBusyId(null)\n }\n }\n\n return (\n <section className=\"flex flex-col gap-4\">\n {canManage && (\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-xs font-medium text-[var(--text-muted)]\">Invite by email</label>\n <div className=\"flex gap-2\">\n <input\n type=\"email\"\n placeholder=\"colleague@example.com\"\n value={inviteEmail}\n aria-label=\"Invite email address\"\n onChange={(event) => setInviteEmail(event.target.value)}\n onKeyDown={(event) => { if (event.key === 'Enter') void submitInvite() }}\n className=\"flex-1 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-3 py-1.5 text-sm text-[var(--text-primary)] placeholder:text-[var(--text-muted)]\"\n />\n <RoleSelect\n value={inviteRole}\n ariaLabel=\"Invite role\"\n onChange={setInviteRole}\n />\n <button\n type=\"button\"\n onClick={() => void submitInvite()}\n disabled={inviting || !inviteEmail.trim()}\n className=\"rounded bg-[var(--brand-primary)] px-3 py-1.5 text-sm text-[hsl(var(--primary-foreground))] disabled:opacity-50\"\n >\n {inviting ? 'Inviting…' : 'Invite'}\n </button>\n </div>\n </div>\n )}\n\n <div className=\"flex flex-col gap-2 border-t border-[var(--border-default)] pt-3\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-xs font-semibold text-[var(--text-primary)]\">Invitation history</h4>\n <span className=\"text-xs text-[var(--text-muted)]\">{invitations.length} total</span>\n </div>\n {invitations.length === 0 ? (\n <p className=\"text-sm text-[var(--text-muted)]\">No invitations yet.</p>\n ) : (\n invitations.map((invitation) => (\n <InvitationRow\n key={invitation.id}\n invitation={invitation}\n canManage={canManage}\n busy={busyId === invitation.id}\n onCopy={() => void copyLink(invitation.inviteUrl)}\n onResend={() => void resend(invitation.id)}\n onRevoke={() => void revoke(invitation.id)}\n />\n ))\n )}\n </div>\n </section>\n )\n}\n\ninterface InvitationRowProps {\n invitation: InvitationView\n canManage: boolean\n busy: boolean\n onCopy(): void\n onResend(): void\n onRevoke(): void\n}\n\nfunction InvitationRow({ invitation, canManage, busy, onCopy, onResend, onRevoke }: InvitationRowProps) {\n const isPending = invitation.status === 'pending'\n const emailFailed = invitation.emailStatus === 'failed'\n const expiry = new Date(invitation.expiresAt).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n })\n\n return (\n <div className=\"rounded-lg border border-[var(--border-default)] bg-[var(--bg-input)] p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-[var(--text-primary)]\">{invitation.email}</p>\n <p className=\"text-xs text-[var(--text-muted)]\">\n {capitalize(invitation.permissions)} · expires {expiry}\n </p>\n {emailFailed && (\n <p className=\"mt-1 text-xs text-[var(--surface-danger-text)]\">Email was not sent — copy the link to share it.</p>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <span className={`${BADGE_BASE} ${STATUS_BADGE[invitation.status]}`}>\n {invitation.status}\n </span>\n <span className={`${BADGE_BASE} ${EMAIL_BADGE[invitation.emailStatus]}`}>\n {invitation.emailStatus.replace('_', ' ')}\n </span>\n </div>\n </div>\n {canManage && isPending && (\n <div className=\"mt-3 flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n onClick={onCopy}\n disabled={busy}\n className=\"rounded border border-[var(--border-default)] px-2 py-1 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] disabled:opacity-50\"\n >\n Copy link\n </button>\n <button\n type=\"button\"\n onClick={onResend}\n disabled={busy}\n className=\"rounded border border-[var(--border-default)] px-2 py-1 text-xs text-[var(--text-secondary)] hover:text-[var(--text-primary)] disabled:opacity-50\"\n >\n {busy ? 'Working…' : 'Resend'}\n </button>\n <button\n type=\"button\"\n onClick={onRevoke}\n disabled={busy}\n className=\"rounded px-2 py-1 text-xs text-[var(--text-danger)] hover:bg-[var(--border-default)] disabled:opacity-50\"\n >\n Revoke\n </button>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
|
|
@@ -278,6 +278,7 @@ var AlignRightGlyph = glyph(
|
|
|
278
278
|
var BoldGlyph = glyph(/* @__PURE__ */ jsx3("path", { d: "M6 4h8a4 4 0 0 1 0 8H6zM6 12h9a4 4 0 0 1 0 8H6z", fill: "currentColor", stroke: "none" }));
|
|
279
279
|
var ItalicGlyph = glyph(/* @__PURE__ */ jsx3("path", { d: "M11 4h6M7 20h6M14 4 8 20" }));
|
|
280
280
|
var PlusGlyph = glyph(/* @__PURE__ */ jsx3("path", { d: "M12 5v14M5 12h14" }));
|
|
281
|
+
var MinusGlyph = glyph(/* @__PURE__ */ jsx3("path", { d: "M5 12h14" }));
|
|
281
282
|
var ChevronDownGlyph = glyph(/* @__PURE__ */ jsx3("path", { d: "m6 9 6 6 6-6" }));
|
|
282
283
|
var RectGlyph = glyph(/* @__PURE__ */ jsx3("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }));
|
|
283
284
|
var EllipseGlyph = glyph(/* @__PURE__ */ jsx3("ellipse", { cx: "12", cy: "12", rx: "10", ry: "7" }));
|
|
@@ -298,8 +299,8 @@ var VideoGlyph = glyph(
|
|
|
298
299
|
);
|
|
299
300
|
var SlotGlyph = glyph(
|
|
300
301
|
/* @__PURE__ */ jsxs2(Fragment2, { children: [
|
|
301
|
-
/* @__PURE__ */ jsx3("
|
|
302
|
-
/* @__PURE__ */ jsx3("
|
|
302
|
+
/* @__PURE__ */ jsx3("path", { d: "M3 4h6.5l2.5 3.5L14.5 4H21v16H3z" }),
|
|
303
|
+
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "14", r: "2" })
|
|
303
304
|
] })
|
|
304
305
|
);
|
|
305
306
|
var PageGlyph = glyph(
|
|
@@ -410,7 +411,7 @@ function PagesStrip({
|
|
|
410
411
|
return /* @__PURE__ */ jsxs3("div", { className: "flex shrink-0 flex-col bg-[var(--bg-input)]", children: [
|
|
411
412
|
label ? /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-1.5 px-3 pt-1.5 text-[var(--text-muted)]", children: [
|
|
412
413
|
/* @__PURE__ */ jsx5(PageGlyph, { className: "h-3 w-3" }),
|
|
413
|
-
/* @__PURE__ */ jsx5("span", { className: "text-
|
|
414
|
+
/* @__PURE__ */ jsx5("span", { className: "text-xs font-semibold uppercase tracking-[0.05em]", children: label })
|
|
414
415
|
] }) : null,
|
|
415
416
|
/* @__PURE__ */ jsxs3(
|
|
416
417
|
"div",
|
|
@@ -477,7 +478,7 @@ function PagesStrip({
|
|
|
477
478
|
) : /* @__PURE__ */ jsx5("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx5(PageGlyph, { className: "h-5 w-5 text-[var(--text-muted)]" }) })
|
|
478
479
|
}
|
|
479
480
|
),
|
|
480
|
-
/* @__PURE__ */ jsx5("span", { className: "max-w-[80px] truncate text-
|
|
481
|
+
/* @__PURE__ */ jsx5("span", { className: "max-w-[80px] truncate text-xs text-[var(--text-secondary)]", children: page.name })
|
|
481
482
|
]
|
|
482
483
|
}
|
|
483
484
|
),
|
|
@@ -524,7 +525,7 @@ function PagesStrip({
|
|
|
524
525
|
className: "flex h-[72px] w-[80px] shrink-0 flex-col items-center justify-center gap-1 rounded border border-dashed border-[var(--border-default)] text-[var(--text-muted)] transition hover:border-[var(--brand-primary)] hover:text-[var(--brand-primary)]",
|
|
525
526
|
children: [
|
|
526
527
|
/* @__PURE__ */ jsx5(PlusGlyph, { className: "h-4 w-4" }),
|
|
527
|
-
/* @__PURE__ */ jsx5("span", { className: "text-
|
|
528
|
+
/* @__PURE__ */ jsx5("span", { className: "text-xs", children: "Add page" })
|
|
528
529
|
]
|
|
529
530
|
}
|
|
530
531
|
) : null
|
|
@@ -881,7 +882,7 @@ function Popover({
|
|
|
881
882
|
open ? children : null
|
|
882
883
|
] });
|
|
883
884
|
}
|
|
884
|
-
var FIELD_LABEL = "text-
|
|
885
|
+
var FIELD_LABEL = "text-xs font-semibold uppercase tracking-[0.05em] text-[var(--text-muted)]";
|
|
885
886
|
function NumberInput({
|
|
886
887
|
label,
|
|
887
888
|
value,
|
|
@@ -944,7 +945,7 @@ function SelectControl({
|
|
|
944
945
|
className: `${buttonClassName} flex items-center justify-between gap-1 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-2 py-0.5 text-left text-xs text-[var(--text-primary)] hover:border-[var(--brand-primary)] disabled:cursor-default disabled:opacity-40`,
|
|
945
946
|
children: [
|
|
946
947
|
/* @__PURE__ */ jsx7("span", { className: "truncate", children: current?.label ?? value }),
|
|
947
|
-
/* @__PURE__ */ jsx7(
|
|
948
|
+
/* @__PURE__ */ jsx7(ChevronDownGlyph, { className: "h-3 w-3 shrink-0 text-[var(--text-muted)]" })
|
|
948
949
|
]
|
|
949
950
|
}
|
|
950
951
|
),
|
|
@@ -999,7 +1000,7 @@ function FontPicker({
|
|
|
999
1000
|
style: { fontFamily: value },
|
|
1000
1001
|
children: [
|
|
1001
1002
|
/* @__PURE__ */ jsx7("span", { className: "truncate", children: value }),
|
|
1002
|
-
/* @__PURE__ */ jsx7(
|
|
1003
|
+
/* @__PURE__ */ jsx7(ChevronDownGlyph, { className: "h-3 w-3 shrink-0 text-[var(--text-muted)]" })
|
|
1003
1004
|
]
|
|
1004
1005
|
}
|
|
1005
1006
|
),
|
|
@@ -1015,7 +1016,7 @@ function FontPicker({
|
|
|
1015
1016
|
className: "m-1 rounded border border-[var(--border-default)] bg-transparent px-2 py-1 text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)]"
|
|
1016
1017
|
}
|
|
1017
1018
|
),
|
|
1018
|
-
/* @__PURE__ */ jsx7("div", { role: "listbox", className: "max-h-60 overflow-y-auto py-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx7("div", { className: "px-3 py-2 text-
|
|
1019
|
+
/* @__PURE__ */ jsx7("div", { role: "listbox", className: "max-h-60 overflow-y-auto py-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx7("div", { className: "px-3 py-2 text-xs text-[var(--text-muted)]", children: "No matches" }) : filtered.map((family) => /* @__PURE__ */ jsx7(
|
|
1019
1020
|
"button",
|
|
1020
1021
|
{
|
|
1021
1022
|
type: "button",
|
|
@@ -1294,7 +1295,7 @@ function SelectionControls({
|
|
|
1294
1295
|
onBindSlot(slotInput.trim() || null);
|
|
1295
1296
|
setSlotPopoverOpen(false);
|
|
1296
1297
|
},
|
|
1297
|
-
className: "flex-1 rounded border border-[var(--brand-primary)] px-2 py-0.5 text-
|
|
1298
|
+
className: "flex-1 rounded border border-[var(--brand-primary)] px-2 py-0.5 text-xs text-[var(--brand-primary)] hover:bg-[color-mix(in_srgb,var(--brand-primary)_10%,transparent)]",
|
|
1298
1299
|
children: slotInput.trim() ? "Bind" : "Unbind"
|
|
1299
1300
|
}
|
|
1300
1301
|
),
|
|
@@ -1303,7 +1304,7 @@ function SelectionControls({
|
|
|
1303
1304
|
{
|
|
1304
1305
|
type: "button",
|
|
1305
1306
|
onClick: () => setSlotPopoverOpen(false),
|
|
1306
|
-
className: "rounded border border-[var(--border-default)] px-2 py-0.5 text-
|
|
1307
|
+
className: "rounded border border-[var(--border-default)] px-2 py-0.5 text-xs text-[var(--text-secondary)]",
|
|
1307
1308
|
children: "Cancel"
|
|
1308
1309
|
}
|
|
1309
1310
|
)
|
|
@@ -1442,7 +1443,7 @@ function ImageControls({ element, canWrite, onPatch }) {
|
|
|
1442
1443
|
onPatch({ src: swapUrl.trim() });
|
|
1443
1444
|
setSwapOpen(false);
|
|
1444
1445
|
},
|
|
1445
|
-
className: "flex-1 rounded border border-[var(--brand-primary)] px-2 py-0.5 text-
|
|
1446
|
+
className: "flex-1 rounded border border-[var(--brand-primary)] px-2 py-0.5 text-xs text-[var(--brand-primary)] hover:bg-[color-mix(in_srgb,var(--brand-primary)_10%,transparent)] disabled:cursor-default disabled:opacity-40",
|
|
1446
1447
|
children: "Replace"
|
|
1447
1448
|
}
|
|
1448
1449
|
),
|
|
@@ -1451,7 +1452,7 @@ function ImageControls({ element, canWrite, onPatch }) {
|
|
|
1451
1452
|
{
|
|
1452
1453
|
type: "button",
|
|
1453
1454
|
onClick: () => setSwapOpen(false),
|
|
1454
|
-
className: "rounded border border-[var(--border-default)] px-2 py-0.5 text-
|
|
1455
|
+
className: "rounded border border-[var(--border-default)] px-2 py-0.5 text-xs text-[var(--text-secondary)]",
|
|
1455
1456
|
children: "Cancel"
|
|
1456
1457
|
}
|
|
1457
1458
|
)
|
|
@@ -1484,7 +1485,7 @@ function PagePropsControls({ page, canWrite, onSetPageProps, onSetPageGuides, pa
|
|
|
1484
1485
|
value: page.name,
|
|
1485
1486
|
disabled: !canWrite,
|
|
1486
1487
|
onChange: (event) => onSetPageProps({ name: event.target.value }),
|
|
1487
|
-
className: "w-28 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-2 py-0.5 text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)]"
|
|
1488
|
+
className: "w-28 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-2 py-0.5 text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)] disabled:cursor-default disabled:opacity-40"
|
|
1488
1489
|
}
|
|
1489
1490
|
),
|
|
1490
1491
|
SEP,
|
|
@@ -1517,7 +1518,7 @@ function PagePropsControls({ page, canWrite, onSetPageProps, onSetPageGuides, pa
|
|
|
1517
1518
|
if (event.key === "Enter") commitDimension("width", event.target.value);
|
|
1518
1519
|
if (event.key === "Escape") setCustomW(null);
|
|
1519
1520
|
},
|
|
1520
|
-
className: "w-16 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-1 py-0.5 text-center text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)]"
|
|
1521
|
+
className: "w-16 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-1 py-0.5 text-center text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)] disabled:cursor-default disabled:opacity-40"
|
|
1521
1522
|
}
|
|
1522
1523
|
)
|
|
1523
1524
|
] }),
|
|
@@ -1537,7 +1538,7 @@ function PagePropsControls({ page, canWrite, onSetPageProps, onSetPageGuides, pa
|
|
|
1537
1538
|
if (event.key === "Enter") commitDimension("height", event.target.value);
|
|
1538
1539
|
if (event.key === "Escape") setCustomH(null);
|
|
1539
1540
|
},
|
|
1540
|
-
className: "w-16 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-1 py-0.5 text-center text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)]"
|
|
1541
|
+
className: "w-16 rounded border border-[var(--border-default)] bg-[var(--bg-input)] px-1 py-0.5 text-center text-xs text-[var(--text-primary)] focus:border-[var(--brand-primary)] disabled:cursor-default disabled:opacity-40"
|
|
1541
1542
|
}
|
|
1542
1543
|
)
|
|
1543
1544
|
] }),
|
|
@@ -1629,7 +1630,7 @@ function ZoomControls({ zoom, onZoom, onFit, fitLabel = "Fit to screen" }) {
|
|
|
1629
1630
|
onClick: zoomOut,
|
|
1630
1631
|
disabled: zoom <= MIN,
|
|
1631
1632
|
className: BTN_SM,
|
|
1632
|
-
children: /* @__PURE__ */ jsx8(
|
|
1633
|
+
children: /* @__PURE__ */ jsx8(MinusGlyph, { className: "h-3.5 w-3.5" })
|
|
1633
1634
|
}
|
|
1634
1635
|
),
|
|
1635
1636
|
/* @__PURE__ */ jsxs6(
|
|
@@ -1638,7 +1639,7 @@ function ZoomControls({ zoom, onZoom, onFit, fitLabel = "Fit to screen" }) {
|
|
|
1638
1639
|
type: "button",
|
|
1639
1640
|
"aria-label": "Reset to 100%",
|
|
1640
1641
|
onClick: resetHundred,
|
|
1641
|
-
className: "rounded px-1.5 py-0.5 font-mono text-
|
|
1642
|
+
className: "rounded px-1.5 py-0.5 font-mono text-xs tabular-nums text-[var(--text-secondary)] transition hover:bg-[var(--border-default)] hover:text-[var(--text-primary)]",
|
|
1642
1643
|
title: "Reset to 100%",
|
|
1643
1644
|
children: [
|
|
1644
1645
|
Math.round(zoom * 100),
|
|
@@ -1654,7 +1655,7 @@ function ZoomControls({ zoom, onZoom, onFit, fitLabel = "Fit to screen" }) {
|
|
|
1654
1655
|
onClick: zoomIn,
|
|
1655
1656
|
disabled: zoom >= MAX,
|
|
1656
1657
|
className: BTN_SM,
|
|
1657
|
-
children: /* @__PURE__ */ jsx8(
|
|
1658
|
+
children: /* @__PURE__ */ jsx8(PlusGlyph, { className: "h-3.5 w-3.5" })
|
|
1658
1659
|
}
|
|
1659
1660
|
)
|
|
1660
1661
|
] });
|
|
@@ -1671,6 +1672,7 @@ var SCALES = [
|
|
|
1671
1672
|
{ value: 1, label: "1x" },
|
|
1672
1673
|
{ value: 2, label: "2x" }
|
|
1673
1674
|
];
|
|
1675
|
+
var FIELD_LABEL2 = "text-xs font-semibold uppercase tracking-[0.05em] text-[var(--text-muted)]";
|
|
1674
1676
|
function ExportControl({ defaults, onExport, className }) {
|
|
1675
1677
|
const [open, setOpen] = useState4(false);
|
|
1676
1678
|
const [format, setFormat] = useState4(defaults?.format ?? "png");
|
|
@@ -1715,28 +1717,28 @@ function ExportControl({ defaults, onExport, className }) {
|
|
|
1715
1717
|
className: "absolute right-0 top-full z-50 mt-1 flex w-52 flex-col gap-3 rounded-md border border-[var(--card-edge)] bg-[hsl(var(--popover))] p-3 shadow-[var(--shadow-overlay)]",
|
|
1716
1718
|
children: [
|
|
1717
1719
|
/* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-1.5", children: [
|
|
1718
|
-
/* @__PURE__ */ jsx9("span", { className:
|
|
1720
|
+
/* @__PURE__ */ jsx9("span", { className: FIELD_LABEL2, children: "Format" }),
|
|
1719
1721
|
/* @__PURE__ */ jsx9("div", { className: "flex gap-1.5", children: FORMATS.map((f) => /* @__PURE__ */ jsx9(
|
|
1720
1722
|
"button",
|
|
1721
1723
|
{
|
|
1722
1724
|
type: "button",
|
|
1723
1725
|
"aria-pressed": format === f.id,
|
|
1724
1726
|
onClick: () => setFormat(f.id),
|
|
1725
|
-
className: `flex-1 rounded border px-2 py-1 text-
|
|
1727
|
+
className: `flex-1 rounded border px-2 py-1 text-xs transition-colors ${format === f.id ? "border-[var(--brand-primary)] text-[var(--brand-primary)]" : "border-[var(--border-default)] text-[var(--text-secondary)] hover:text-[var(--text-primary)]"}`,
|
|
1726
1728
|
children: f.label
|
|
1727
1729
|
},
|
|
1728
1730
|
f.id
|
|
1729
1731
|
)) })
|
|
1730
1732
|
] }),
|
|
1731
1733
|
/* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-1.5", children: [
|
|
1732
|
-
/* @__PURE__ */ jsx9("span", { className:
|
|
1734
|
+
/* @__PURE__ */ jsx9("span", { className: FIELD_LABEL2, children: "Scale" }),
|
|
1733
1735
|
/* @__PURE__ */ jsx9("div", { className: "flex gap-1.5", children: SCALES.map((s) => /* @__PURE__ */ jsx9(
|
|
1734
1736
|
"button",
|
|
1735
1737
|
{
|
|
1736
1738
|
type: "button",
|
|
1737
1739
|
"aria-pressed": pixelRatio === s.value,
|
|
1738
1740
|
onClick: () => setPixelRatio(s.value),
|
|
1739
|
-
className: `flex-1 rounded border px-2 py-1 text-
|
|
1741
|
+
className: `flex-1 rounded border px-2 py-1 text-xs transition-colors ${pixelRatio === s.value ? "border-[var(--brand-primary)] text-[var(--brand-primary)]" : "border-[var(--border-default)] text-[var(--text-secondary)] hover:text-[var(--text-primary)]"}`,
|
|
1740
1742
|
children: s.label
|
|
1741
1743
|
},
|
|
1742
1744
|
s.value
|
|
@@ -1748,7 +1750,7 @@ function ExportControl({ defaults, onExport, className }) {
|
|
|
1748
1750
|
type: "button",
|
|
1749
1751
|
"aria-label": "Export image",
|
|
1750
1752
|
onClick: confirm,
|
|
1751
|
-
className: "rounded border border-[var(--brand-primary)] px-2 py-1 text-
|
|
1753
|
+
className: "rounded border border-[var(--brand-primary)] px-2 py-1 text-xs font-medium text-[var(--brand-primary)] transition-colors hover:bg-[color-mix(in_srgb,var(--brand-primary)_10%,transparent)]",
|
|
1752
1754
|
children: "Export"
|
|
1753
1755
|
}
|
|
1754
1756
|
)
|
|
@@ -2052,7 +2054,7 @@ function DesignCanvas({
|
|
|
2052
2054
|
}, [activePage, editorState.selectedElementIds]);
|
|
2053
2055
|
const review = mode === "review";
|
|
2054
2056
|
if (!activePage) {
|
|
2055
|
-
return /* @__PURE__ */ jsx10("div", { className: `flex h-full items-center justify-center bg-[var(--bg-input)] text-[var(--text-muted)]
|
|
2057
|
+
return /* @__PURE__ */ jsx10("div", { className: `flex h-full items-center justify-center bg-[var(--bg-input)] ${className ?? ""}`, children: /* @__PURE__ */ jsx10("p", { className: "text-xs text-[var(--text-muted)]", children: "This document has no pages." }) });
|
|
2056
2058
|
}
|
|
2057
2059
|
const bleedScreen = editorState.showBleed && activePage.bleed ? {
|
|
2058
2060
|
top: activePage.bleed.top * editorState.zoom,
|
|
@@ -2126,7 +2128,7 @@ function DesignCanvas({
|
|
|
2126
2128
|
/* @__PURE__ */ jsx10(BrandKnot, { size: 32, className: "shrink-0" }),
|
|
2127
2129
|
/* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-1", children: [
|
|
2128
2130
|
/* @__PURE__ */ jsx10("p", { className: "text-sm font-semibold text-[var(--text-primary)]", children: "Best edited on a larger screen" }),
|
|
2129
|
-
/* @__PURE__ */ jsx10("p", { className: "text-xs leading-5 text-[var(--text-secondary)]", children: "
|
|
2131
|
+
/* @__PURE__ */ jsx10("p", { className: "text-xs leading-5 text-[var(--text-secondary)]", children: "Open this on a tablet or desktop to edit and export." })
|
|
2130
2132
|
] })
|
|
2131
2133
|
] }),
|
|
2132
2134
|
/* @__PURE__ */ jsxs8("div", { className: `relative hidden min-h-0 flex-1 sm:block ${editorState.showRulers ? "pl-[20px] pt-[20px]" : ""}`, children: [
|
|
@@ -2259,4 +2261,4 @@ export {
|
|
|
2259
2261
|
ExportControl,
|
|
2260
2262
|
DesignCanvas
|
|
2261
2263
|
};
|
|
2262
|
-
//# sourceMappingURL=chunk-
|
|
2264
|
+
//# sourceMappingURL=chunk-7LJYCHXK.js.map
|