@vibes.diy/base 14.3.44 → 14.3.46
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/components/FilesPanelView.d.ts +19 -1
- package/components/FilesPanelView.js +52 -2
- package/components/FilesPanelView.js.map +1 -1
- package/components/HandlePickerMenu.d.ts +1 -0
- package/components/HandlePickerMenu.js.map +1 -1
- package/components/ImgGen.d.ts +5 -1
- package/components/ImgGen.js +36 -6
- package/components/ImgGen.js.map +1 -1
- package/components/NotificationDetailView.d.ts +15 -0
- package/components/NotificationDetailView.js +41 -3
- package/components/NotificationDetailView.js.map +1 -1
- package/components/ViewerTagView.d.ts +5 -1
- package/components/ViewerTagView.js +58 -12
- package/components/ViewerTagView.js.map +1 -1
- package/components/vibe-menu/cards/ShareCard.js +1 -1
- package/components/vibe-menu/cards/ShareCard.js.map +1 -1
- package/components/vibe-menu/cards/ShareLinkRows.js +3 -2
- package/components/vibe-menu/cards/ShareLinkRows.js.map +1 -1
- package/components/vibe-menu/cards/share-copy.d.ts +5 -3
- package/components/vibe-menu/cards/share-copy.js +7 -6
- package/components/vibe-menu/cards/share-copy.js.map +1 -1
- package/components/vibe-menu/slices.d.ts +1 -0
- package/components/vibe-menu/slices.js.map +1 -1
- package/hooks/img-gen/local-pictures.d.ts +10 -0
- package/hooks/img-gen/local-pictures.js +31 -0
- package/hooks/img-gen/local-pictures.js.map +1 -0
- package/hooks/img-gen/picture-bytes.d.ts +54 -0
- package/hooks/img-gen/picture-bytes.js +312 -0
- package/hooks/img-gen/picture-bytes.js.map +1 -0
- package/hooks/img-gen/use-img-gen.d.ts +9 -1
- package/hooks/img-gen/use-img-gen.js +109 -8
- package/hooks/img-gen/use-img-gen.js.map +1 -1
- package/hooks/img-gen/use-picture-src.d.ts +13 -0
- package/hooks/img-gen/use-picture-src.js +94 -0
- package/hooks/img-gen/use-picture-src.js.map +1 -0
- package/package.json +5 -4
|
@@ -6,11 +6,28 @@ export interface FileRowView {
|
|
|
6
6
|
readonly size: number;
|
|
7
7
|
readonly safety: FileSafetyView;
|
|
8
8
|
readonly cid: string;
|
|
9
|
+
readonly uploadId?: string;
|
|
10
|
+
readonly generated?: boolean;
|
|
9
11
|
}
|
|
12
|
+
export declare const FILES_GENERATED_READY_LINE = "ready";
|
|
10
13
|
export declare const FILES_KYC_GATED_LINE = "Add a card to upload files that aren't images.";
|
|
14
|
+
export interface FilesGenerationPreview {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly mimeType: string;
|
|
17
|
+
readonly size: number;
|
|
18
|
+
readonly previewUrl: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FilesGenerationView {
|
|
21
|
+
readonly status: "idle" | "generating" | "preview" | "error";
|
|
22
|
+
readonly preview: FilesGenerationPreview | null;
|
|
23
|
+
readonly error?: string;
|
|
24
|
+
readonly onGenerate: (prompt: string) => void;
|
|
25
|
+
readonly onAccept: (name: string) => void;
|
|
26
|
+
readonly onDiscard: () => void;
|
|
27
|
+
}
|
|
11
28
|
export declare function formatFileSize(bytes: number): string;
|
|
12
29
|
export declare function fileTypeBadge(mime: string): string;
|
|
13
|
-
export declare function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onDownloadOriginal, onCopyPath, busy, error, }: {
|
|
30
|
+
export declare function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onDownloadOriginal, onCopyPath, busy, error, generation, }: {
|
|
14
31
|
readonly rows: readonly FileRowView[];
|
|
15
32
|
readonly canRemove: boolean;
|
|
16
33
|
readonly onRemove: (path: string) => void;
|
|
@@ -20,4 +37,5 @@ export declare function FilesPanelView({ rows, canRemove, onRemove, onPick, kycC
|
|
|
20
37
|
readonly onCopyPath?: (path: string) => void;
|
|
21
38
|
readonly busy: boolean;
|
|
22
39
|
readonly error?: string;
|
|
40
|
+
readonly generation?: FilesGenerationView;
|
|
23
41
|
}): React.JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { AttachmentButton } from "./AttachmentRow.js";
|
|
3
|
+
export const FILES_GENERATED_READY_LINE = "ready";
|
|
3
4
|
export const FILES_KYC_GATED_LINE = "Add a card to upload files that aren't images.";
|
|
4
5
|
const SAFETY_LABEL = {
|
|
5
6
|
low: "ok",
|
|
@@ -28,7 +29,7 @@ export function fileTypeBadge(mime) {
|
|
|
28
29
|
}
|
|
29
30
|
const CARD_TEXT = "var(--vibes-card-text, #333333)";
|
|
30
31
|
const CARD_BORDER = "var(--vibes-card-border, rgba(0,0,0,0.14))";
|
|
31
|
-
export function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onDownloadOriginal, onCopyPath, busy, error, }) {
|
|
32
|
+
export function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onDownloadOriginal, onCopyPath, busy, error, generation, }) {
|
|
32
33
|
const [dragOver, setDragOver] = React.useState(false);
|
|
33
34
|
const disabled = busy || !canRemove;
|
|
34
35
|
return (React.createElement("div", { "data-testid": "files-panel", style: { color: CARD_TEXT, fontSize: 13, padding: 12, opacity: busy ? 0.6 : 1 } },
|
|
@@ -52,6 +53,7 @@ export function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onD
|
|
|
52
53
|
} },
|
|
53
54
|
React.createElement(AttachmentButton, { onFiles: onPick, disabled: busy }),
|
|
54
55
|
React.createElement("span", null, "Drop a file here, or use the clip to pick one."))),
|
|
56
|
+
canRemove && generation !== undefined && React.createElement(GenerateBlock, { generation: generation, disabled: busy }),
|
|
55
57
|
!kycCard && (React.createElement("p", { "data-testid": "files-kyc-gated", style: { marginTop: 8, marginBottom: 0, opacity: 0.75 } }, FILES_KYC_GATED_LINE)),
|
|
56
58
|
error && (React.createElement("p", { role: "alert", className: "text-red-600 dark:text-red-400", style: { marginTop: 8, marginBottom: 0 } }, error)),
|
|
57
59
|
rows.length === 0 ? (React.createElement("p", { style: { marginTop: 12, marginBottom: 0, opacity: 0.75 } }, "Nothing here yet. A file you add shows up in your app at the path listed here.")) : (React.createElement("ul", { style: { listStyle: "none", margin: "12px 0 0", padding: 0, display: "flex", flexDirection: "column", gap: 6 } }, rows.map((row) => (React.createElement("li", { key: row.cid + row.path, "data-testid": "files-row", style: {
|
|
@@ -66,12 +68,60 @@ export function FilesPanelView({ rows, canRemove, onRemove, onPick, kycCard, onD
|
|
|
66
68
|
React.createElement("span", { style: { flex: "1 1 140px", minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, row.path),
|
|
67
69
|
React.createElement("span", { "aria-hidden": true, style: { border: `1px solid ${CARD_BORDER}`, borderRadius: 4, padding: "0 4px", fontSize: 11, opacity: 0.8 } }, fileTypeBadge(row.mime)),
|
|
68
70
|
React.createElement("span", { style: { fontSize: 12, opacity: 0.8 } }, formatFileSize(row.size)),
|
|
69
|
-
SAFETY_LABEL[row.safety] !== "" && (React.createElement("span", { "data-safety": row.safety, title: SAFETY_TITLE[row.safety], style: { fontSize: 12, opacity: 0.8 } }, SAFETY_LABEL[row.safety])),
|
|
71
|
+
SAFETY_LABEL[row.safety] !== "" && row.generated !== true && (React.createElement("span", { "data-safety": row.safety, title: SAFETY_TITLE[row.safety], style: { fontSize: 12, opacity: 0.8 } }, SAFETY_LABEL[row.safety])),
|
|
72
|
+
row.generated === true && (React.createElement("span", { "data-generated": true, title: "Made for this app; serves at full size.", style: { fontSize: 12, opacity: 0.8 } }, FILES_GENERATED_READY_LINE)),
|
|
70
73
|
React.createElement("span", { style: { display: "flex", gap: 6, marginLeft: "auto" } },
|
|
71
74
|
onCopyPath && (React.createElement(PanelButton, { label: `Copy path ${row.path}`, text: "Copy path", onClick: () => onCopyPath(row.path), disabled: busy })),
|
|
72
75
|
kycCard && onDownloadOriginal !== undefined && (React.createElement(PanelButton, { label: `Download original ${row.path}`, text: "Download original", onClick: () => onDownloadOriginal(row.cid), disabled: busy })),
|
|
73
76
|
canRemove && (React.createElement(PanelButton, { label: `Remove ${row.path}`, text: "Remove", onClick: () => onRemove(row.path), disabled: disabled }))))))))));
|
|
74
77
|
}
|
|
78
|
+
function GenerateBlock({ generation, disabled }) {
|
|
79
|
+
const [open, setOpen] = React.useState(false);
|
|
80
|
+
const [prompt, setPrompt] = React.useState("");
|
|
81
|
+
const nameRef = React.useRef(null);
|
|
82
|
+
const promptRef = React.useRef(null);
|
|
83
|
+
const generating = generation.status === "generating";
|
|
84
|
+
const preview = generation.status === "preview" ? generation.preview : null;
|
|
85
|
+
const controlsDisabled = disabled || generating;
|
|
86
|
+
React.useEffect(() => {
|
|
87
|
+
if (open)
|
|
88
|
+
promptRef.current?.focus();
|
|
89
|
+
}, [open]);
|
|
90
|
+
if (!open && preview === null && !generating && generation.status !== "error") {
|
|
91
|
+
return (React.createElement("div", { "data-testid": "files-generate", style: { marginTop: 8 } },
|
|
92
|
+
React.createElement(PanelButton, { label: "Generate an image into Files", text: "+ Generate image", onClick: () => setOpen(true), disabled: disabled })));
|
|
93
|
+
}
|
|
94
|
+
return (React.createElement("div", { "data-testid": "files-generate", style: {
|
|
95
|
+
marginTop: 8,
|
|
96
|
+
border: `1px dashed ${CARD_BORDER}`,
|
|
97
|
+
borderRadius: 8,
|
|
98
|
+
padding: "10px 12px",
|
|
99
|
+
display: "flex",
|
|
100
|
+
flexDirection: "column",
|
|
101
|
+
gap: 8,
|
|
102
|
+
} },
|
|
103
|
+
React.createElement("form", { onSubmit: (e) => {
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
if (prompt.trim() !== "")
|
|
106
|
+
generation.onGenerate(prompt);
|
|
107
|
+
}, style: { display: "flex", gap: 8, alignItems: "center" } },
|
|
108
|
+
React.createElement("input", { "data-testid": "files-generate-prompt", "aria-label": "Describe the image to generate", placeholder: "A logo, a hero, a texture\u2026", value: prompt, onChange: (e) => setPrompt(e.target.value), onKeyDown: (e) => {
|
|
109
|
+
if (e.key === "Escape" && generation.status === "idle") {
|
|
110
|
+
setOpen(false);
|
|
111
|
+
setPrompt("");
|
|
112
|
+
}
|
|
113
|
+
}, ref: promptRef, disabled: controlsDisabled, style: { flex: "1 1 auto", minWidth: 0, fontFamily: "inherit", fontSize: 13, padding: "4px 8px" } }),
|
|
114
|
+
React.createElement(PanelButton, { label: "Generate an image into Files", text: generating ? "Drawing…" : "Generate", onClick: () => generation.onGenerate(prompt), disabled: controlsDisabled || prompt.trim() === "" })),
|
|
115
|
+
generating && (React.createElement("p", { "data-testid": "files-generating", style: { margin: 0, opacity: 0.75 } }, "Drawing it \u2014 preview before anything lands in your app.")),
|
|
116
|
+
preview !== null && (React.createElement("div", { "data-testid": "files-preview", style: { display: "flex", gap: 8, alignItems: "center", flexWrap: "wrap" } },
|
|
117
|
+
React.createElement("img", { src: preview.previewUrl, alt: "", style: { width: 64, height: 64, objectFit: "cover", borderRadius: 6, border: `1px solid ${CARD_BORDER}` } }),
|
|
118
|
+
React.createElement("input", { key: preview.name, "data-testid": "files-preview-name", "aria-label": "File name for the generated image", defaultValue: preview.name, ref: nameRef, disabled: disabled, style: { flex: "1 1 140px", minWidth: 0, fontFamily: "inherit", fontSize: 13, padding: "4px 8px" } }),
|
|
119
|
+
React.createElement("span", { style: { fontSize: 12, opacity: 0.8 } }, formatFileSize(preview.size)),
|
|
120
|
+
React.createElement("span", { style: { display: "flex", gap: 6 } },
|
|
121
|
+
React.createElement(PanelButton, { label: `Add ${preview.name} to Files`, text: "Add to Files", onClick: () => generation.onAccept(nameRef.current?.value ?? preview.name), disabled: disabled }),
|
|
122
|
+
React.createElement(PanelButton, { label: "Discard the generated image", text: "Discard", onClick: generation.onDiscard, disabled: disabled })))),
|
|
123
|
+
generation.status === "error" && generation.error !== undefined && (React.createElement("p", { "data-testid": "files-generation-error", role: "alert", className: "text-red-600 dark:text-red-400", style: { margin: 0 } }, generation.error))));
|
|
124
|
+
}
|
|
75
125
|
function PanelButton({ label, text, onClick, disabled, }) {
|
|
76
126
|
return (React.createElement("button", { type: "button", "aria-label": label, title: label, disabled: disabled, onClick: onClick, className: "text-light-primary dark:text-dark-primary", style: {
|
|
77
127
|
fontFamily: "inherit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilesPanelView.js","sourceRoot":"","sources":["../../jsr/components/FilesPanelView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"FilesPanelView.js","sourceRoot":"","sources":["../../jsr/components/FilesPanelView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlePickerMenu.js","sourceRoot":"","sources":["../../jsr/components/HandlePickerMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"HandlePickerMenu.js","sourceRoot":"","sources":["../../jsr/components/HandlePickerMenu.tsx"],"names":[],"mappings":"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"}
|
package/components/ImgGen.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { ConfirmedMediaProbe, Database } from "@vibes.diy/vibe-runtime";
|
|
|
3
3
|
import type { ImgGenInputImage, ImgGenRequestOptions, ImgGenResult } from "@vibes.diy/vibe-types";
|
|
4
4
|
import type { Result } from "@adviser/cement";
|
|
5
5
|
import { type UseFireproofHook } from "../hooks/img-gen/use-img-gen.js";
|
|
6
|
+
import { type LocalFileUrl } from "../hooks/img-gen/local-pictures.js";
|
|
7
|
+
import type { PictureStore } from "../hooks/img-gen/picture-bytes.js";
|
|
6
8
|
export interface ImgGenProps {
|
|
7
9
|
prompt?: string;
|
|
8
10
|
_id?: string;
|
|
@@ -16,5 +18,7 @@ export interface ImgGenProps {
|
|
|
16
18
|
imgGen?: (prompt: string, opts?: ImgGenRequestOptions) => Promise<Result<ImgGenResult>>;
|
|
17
19
|
useFireproof?: UseFireproofHook;
|
|
18
20
|
confirmedMediaProbe?: ConfirmedMediaProbe | null;
|
|
21
|
+
pictures?: PictureStore | null;
|
|
22
|
+
localFileUrl?: LocalFileUrl | null;
|
|
19
23
|
}
|
|
20
|
-
export declare function ImgGen({ prompt, _id: propId, images, database, className, alt, style, showControls, model, imgGen, useFireproof, confirmedMediaProbe, }: ImgGenProps): React.JSX.Element;
|
|
24
|
+
export declare function ImgGen({ prompt, _id: propId, images, database, className, alt, style, showControls, model, imgGen, useFireproof, confirmedMediaProbe, pictures: picturesProp, localFileUrl, }: ImgGenProps): React.JSX.Element;
|
package/components/ImgGen.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { useState, useCallback, useMemo } from "react";
|
|
2
2
|
import { useImgGen } from "../hooks/img-gen/use-img-gen.js";
|
|
3
|
+
import { usePictureSrc } from "../hooks/img-gen/use-picture-src.js";
|
|
4
|
+
import { registeredPictureStore } from "../hooks/img-gen/local-pictures.js";
|
|
3
5
|
function promptToId(prompt) {
|
|
4
6
|
let hash = 0x811c9dc5;
|
|
5
7
|
for (let i = 0; i < prompt.length; i++) {
|
|
@@ -8,7 +10,8 @@ function promptToId(prompt) {
|
|
|
8
10
|
}
|
|
9
11
|
return `img-${(hash >>> 0).toString(36)}`;
|
|
10
12
|
}
|
|
11
|
-
export function ImgGen({ prompt, _id: propId, images, database, className, alt, style, showControls = true, model, imgGen, useFireproof, confirmedMediaProbe, }) {
|
|
13
|
+
export function ImgGen({ prompt, _id: propId, images, database, className, alt, style, showControls = true, model, imgGen, useFireproof, confirmedMediaProbe, pictures: picturesProp, localFileUrl, }) {
|
|
14
|
+
const pictures = picturesProp === undefined ? registeredPictureStore() : (picturesProp ?? undefined);
|
|
12
15
|
const inputImage = images?.[0];
|
|
13
16
|
const imageKey = inputImage
|
|
14
17
|
? `${inputImage.name ?? ""}-${inputImage.size ?? ""}-${inputImage.lastModified ?? ""}`
|
|
@@ -17,7 +20,7 @@ export function ImgGen({ prompt, _id: propId, images, database, className, alt,
|
|
|
17
20
|
const [generationId, setGenerationId] = useState(undefined);
|
|
18
21
|
const [tapGenerationId, setTapGenerationId] = useState(undefined);
|
|
19
22
|
const [versionIndex, setVersionIndex] = useState(null);
|
|
20
|
-
const { loading, progress, error, document, pending, needsTap, previewUrl } = useImgGen({
|
|
23
|
+
const { loading, progress, error, document, pending, needsTap, previewUrl, mintedUrls, reportUnavailable } = useImgGen({
|
|
21
24
|
prompt,
|
|
22
25
|
_id: stableId,
|
|
23
26
|
database: database,
|
|
@@ -29,14 +32,30 @@ export function ImgGen({ prompt, _id: propId, images, database, className, alt,
|
|
|
29
32
|
imgGen,
|
|
30
33
|
useFireproof,
|
|
31
34
|
confirmedMediaProbe,
|
|
35
|
+
pictures: pictures ?? null,
|
|
36
|
+
...(localFileUrl !== undefined ? { localFileUrl } : {}),
|
|
32
37
|
});
|
|
33
38
|
const versions = document?.versions ?? [];
|
|
34
39
|
const currentVersion = versionIndex ?? document?.currentVersion ?? 0;
|
|
35
40
|
const activeVersion = versions[currentVersion];
|
|
36
41
|
const activeFile = activeVersion?.id && document?._files ? document._files[activeVersion.id] : undefined;
|
|
37
42
|
const displayUrl = previewUrl ?? activeFile?.url;
|
|
43
|
+
const minted = previewUrl === undefined && displayUrl !== undefined && mintedUrls.has(displayUrl);
|
|
44
|
+
const picture = usePictureSrc({
|
|
45
|
+
url: displayUrl,
|
|
46
|
+
uploadId: previewUrl !== undefined ? undefined : activeFile?.uploadId,
|
|
47
|
+
store: pictures,
|
|
48
|
+
minted,
|
|
49
|
+
onUnavailable: reportUnavailable,
|
|
50
|
+
});
|
|
51
|
+
const onImageError = useCallback(() => {
|
|
52
|
+
const id = activeFile?.uploadId;
|
|
53
|
+
if (minted && id !== undefined)
|
|
54
|
+
reportUnavailable(id);
|
|
55
|
+
}, [minted, activeFile?.uploadId, reportUnavailable]);
|
|
38
56
|
const hasMultipleVersions = versions.length > 1;
|
|
39
|
-
const hasExistingImage = previewUrl !== undefined || (versions.length > 0 && !!displayUrl);
|
|
57
|
+
const hasExistingImage = previewUrl !== undefined || (versions.length > 0 && !!displayUrl && picture.unavailable === false);
|
|
58
|
+
const saving = loading && previewUrl !== undefined;
|
|
40
59
|
const handleTapGeneration = useCallback(() => {
|
|
41
60
|
const id = crypto.randomUUID();
|
|
42
61
|
setTapGenerationId(id);
|
|
@@ -72,12 +91,23 @@ export function ImgGen({ prompt, _id: propId, images, database, className, alt,
|
|
|
72
91
|
React.createElement("div", { style: { fontSize: 14, marginTop: 8 } }, prompt)));
|
|
73
92
|
}
|
|
74
93
|
return (React.createElement("div", { className: className, style: { padding: 20, textAlign: "center", color: "#888" } },
|
|
75
|
-
React.createElement("div", null, pending === true ? "Loading image..." : "Generating image..."),
|
|
94
|
+
React.createElement("div", null, pending === true || picture.unavailable ? "Loading image..." : "Generating image..."),
|
|
76
95
|
React.createElement("div", { style: { fontSize: 14, marginTop: 8 } }, prompt)));
|
|
77
96
|
}
|
|
78
97
|
return (React.createElement("div", { style: { position: "relative", display: "inline-block" } },
|
|
79
|
-
React.createElement("img", { src:
|
|
80
|
-
|
|
98
|
+
React.createElement("img", { src: picture.src, onError: onImageError, alt: alt ?? prompt ?? document?.prompt ?? "", className: className, style: style ?? { maxWidth: "100%", height: "auto" } }),
|
|
99
|
+
saving && (React.createElement("div", { role: "status", style: {
|
|
100
|
+
position: "absolute",
|
|
101
|
+
top: 10,
|
|
102
|
+
left: 10,
|
|
103
|
+
backgroundColor: "rgba(0, 0, 0, 0.6)",
|
|
104
|
+
color: "#fff",
|
|
105
|
+
padding: "4px 8px",
|
|
106
|
+
borderRadius: 4,
|
|
107
|
+
fontSize: 12,
|
|
108
|
+
zIndex: 11,
|
|
109
|
+
} }, "Saving\u2026")),
|
|
110
|
+
loading && !saving && (React.createElement("div", { "data-imggen-progress": true, style: {
|
|
81
111
|
position: "absolute",
|
|
82
112
|
top: 0,
|
|
83
113
|
left: 0,
|
package/components/ImgGen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImgGen.js","sourceRoot":"","sources":["../../jsr/components/ImgGen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAyB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"ImgGen.js","sourceRoot":"","sources":["../../jsr/components/ImgGen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAyB,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAqB,MAAM,oCAAoC,CAAC;AA+B/F,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C,CAAC;AAKD,MAAM,UAAU,MAAM,CAAC,EACrB,MAAM,EACN,GAAG,EAAE,MAAM,EACX,MAAM,EACN,QAAQ,EACR,SAAS,EACT,GAAG,EACH,KAAK,EACL,YAAY,GAAG,IAAI,EACnB,KAAK,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EAAE,YAAY,EACtB,YAAY,GACA;IACZ,MAAM,QAAQ,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC;IACrG,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,GAAI,UAA4B,CAAC,IAAI,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,IAAI,EAAE,IAAK,UAA4B,CAAC,YAAY,IAAI,EAAE,EAAE;QAC5H,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACpF,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAClC,CAAC;IACF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAGhF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IACtF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEtE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;QACrH,MAAM;QACN,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,QAAiB;QAC3B,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ;QAC1B,YAAY;QACZ,eAAe;QACf,UAAU;QACV,KAAK;QACL,MAAM;QACN,YAAY;QACZ,mBAAmB;QACnB,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,YAAY,IAAI,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,UAAU,GACd,aAAa,EAAE,EAAE,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtG,MAAM,UAAU,GAAG,UAAU,IAAI,UAAU,EAAE,GAAG,CAAC;IAGjD,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,GAAG,EAAE,UAAU;QACf,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ;QACrE,KAAK,EAAE,QAAQ;QACf,MAAM;QACN,aAAa,EAAE,iBAAiB;KACjC,CAAC,CAAC;IAIH,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,EAAE,GAAG,UAAU,EAAE,QAAQ,CAAC;QAChC,IAAI,MAAM,IAAI,EAAE,KAAK,SAAS;YAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IAC5H,MAAM,MAAM,GAAG,OAAO,IAAI,UAAU,KAAK,SAAS,CAAC;IAInD,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACvB,eAAe,CAAC,EAAE,CAAC,CAAC;QACpB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,IAAI,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;YAClD,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,IAAI,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;YAClD,OAAO,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAIhD,MAAM,gBAAgB,GAAG,CACvB,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAC,8BAA8B,mCAG7B,CACV,CAAC;IAEF,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,yBAE/E,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC/B,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;YACtF,4CAAsB;YACtB,iCAAM,KAAK,CAAC,OAAO,CAAO;YACzB,QAAQ,KAAK,IAAI,IAAI,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAG,gBAAgB,CAAO,CACzE,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;gBAClF,gBAAgB;gBACjB,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAG,MAAM,CAAO,CACtD,CACP,CAAC;QACJ,CAAC;QACD,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;YAMnF,iCAAM,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAO;YACjG,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAG,MAAM,CAAO,CACtD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE;QAC3D,6BACE,GAAG,EAAE,OAAO,CAAC,GAAG,EAChB,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,GAAG,IAAI,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,EAAE,EAC5C,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GACpD;QAGD,MAAM,IAAI,CACT,6BACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,eAAe,EAAE,oBAAoB;gBACrC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,SAAS;gBAClB,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE;aACX,mBAGG,CACP;QACA,OAAO,IAAI,CAAC,MAAM,IAAI,CACrB,2DAEE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,QAAQ;gBAClB,eAAe,EAAE,oBAAoB;gBACrC,MAAM,EAAE,EAAE;aACX,iBACW,MAAM;YAElB,6BACE,KAAK,EAAE;oBACL,KAAK,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG;oBAC1B,MAAM,EAAE,MAAM;oBACd,eAAe,EAAE,SAAS;oBAC1B,UAAU,EAAE,qBAAqB;iBAClC,GACD,CACE,CACP;QACA,KAAK,IAAI,CACR,6BACE,KAAK,EAAE,KAAK,CAAC,OAAO,EACpB,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,EAAE;gBACP,KAAK,EAAE,EAAE;gBACT,eAAe,EAAE,wBAAwB;gBACzC,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,SAAS;gBAClB,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;gBACxB,UAAU,EAAE,QAAQ;aACrB;;YAEO,KAAK,CAAC,OAAO,CACjB,CACP;QAGA,QAAQ,KAAK,IAAI,IAAI,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAG,gBAAgB,CAAO;QAChH,YAAY,IAAI,CACf,6BACE,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,MAAM;gBACf,GAAG,EAAE,CAAC;gBACN,OAAO,EAAE,GAAG;aACb;YAEA,mBAAmB,IAAI,CACtB;gBACE,gCAAQ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,kBAAkB,aAE5F;gBACT,8BAAM,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;oBAC/E,cAAc,GAAG,CAAC;;oBAAG,QAAQ,CAAC,MAAM,CAChC;gBACP,gCAAQ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,cAAc,aAE1G,CACR,CACJ;YACD,gCAAQ,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,YAAY,aAEnF,CACL,CACP,CACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAwB;IACpC,UAAU,EAAE,iBAAiB;IAC7B,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,CAAC;IACf,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,CAAC;CACd,CAAC;AAEF,MAAM,kBAAkB,GAAwB;IAC9C,GAAG,QAAQ;IACX,UAAU,EAAE,MAAM;IAGlB,MAAM,EAAE,kCAAkC;IAC1C,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;CAChB,CAAC"}
|
|
@@ -16,5 +16,20 @@ export interface NotificationDetailViewProps {
|
|
|
16
16
|
readonly onToggleVibeMute?: () => void;
|
|
17
17
|
readonly onToggleHandleMute?: () => void;
|
|
18
18
|
readonly mutesDisabled?: boolean;
|
|
19
|
+
readonly muteError?: string;
|
|
20
|
+
readonly actorHandle?: string;
|
|
21
|
+
readonly actorAvatarUrl?: string;
|
|
22
|
+
readonly turnSnippet?: string;
|
|
23
|
+
readonly accessRequest?: {
|
|
24
|
+
readonly requester: string;
|
|
25
|
+
readonly state: "pending" | "approved" | "revoked" | "decided";
|
|
26
|
+
readonly approvedRole?: string;
|
|
27
|
+
readonly busy: boolean;
|
|
28
|
+
readonly error?: string;
|
|
29
|
+
readonly onApprove: (role: "editor" | "viewer") => void;
|
|
30
|
+
readonly onReject: () => void;
|
|
31
|
+
};
|
|
32
|
+
readonly mediaSlot?: React.ReactNode;
|
|
33
|
+
readonly contextLinkSlot?: React.ReactNode;
|
|
19
34
|
}
|
|
20
35
|
export declare function NotificationDetailView(props: NotificationDetailViewProps): React.JSX.Element;
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
function ActorAvatar({ url, handle }) {
|
|
3
|
+
const [failedSrc, setFailedSrc] = useState(undefined);
|
|
4
|
+
if (failedSrc === url) {
|
|
5
|
+
return (React.createElement("span", { "aria-hidden": "true", className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-black/10 font-semibold text-neutral-700 uppercase dark:bg-white/15 dark:text-neutral-200", style: { fontSize: 13 } }, handle.slice(0, 1)));
|
|
6
|
+
}
|
|
7
|
+
return (React.createElement("img", { src: url, alt: `Avatar of @${handle}`, className: "h-7 w-7 shrink-0 rounded-full object-cover", loading: "lazy", decoding: "async", onError: () => setFailedSrc(url) }));
|
|
8
|
+
}
|
|
2
9
|
function MuteToggle({ testId, label, target, checked, disabled, onToggle, }) {
|
|
3
10
|
return (React.createElement("label", { className: "flex items-start gap-2 text-neutral-700 dark:text-neutral-300", style: { fontSize: 14, lineHeight: 1.4 } },
|
|
4
11
|
React.createElement("input", { type: "checkbox", "data-testid": testId, checked: checked, disabled: disabled, onChange: () => onToggle(), className: "mt-0.5 rounded border-gray-300 dark:border-gray-600" }),
|
|
@@ -20,9 +27,40 @@ export function NotificationDetailView(props) {
|
|
|
20
27
|
React.createElement("div", { className: "text-light-primary dark:text-dark-primary", "data-testid": "notification-detail-headline", style: { fontSize: 19, fontWeight: 600, lineHeight: 1.25 } }, props.headline),
|
|
21
28
|
props.body !== undefined && props.body !== "" && (React.createElement("p", { className: "text-light-secondary dark:text-dark-secondary", "data-testid": "notification-detail-body", style: { fontSize: 14, lineHeight: 1.45, margin: "6px 0 0" } }, props.body))),
|
|
22
29
|
buildBits.length > 0 && (React.createElement("p", { className: "text-light-secondary dark:text-dark-secondary", "data-testid": "notification-detail-build-meta", style: { fontSize: 13, lineHeight: 1.4, margin: 0 } }, buildBits.join(" · "))),
|
|
23
|
-
props.
|
|
30
|
+
props.actorHandle !== undefined && props.actorHandle !== "" && (React.createElement("div", { className: "flex items-center gap-2", "data-testid": "notification-detail-actor" },
|
|
31
|
+
props.actorAvatarUrl !== undefined && props.actorAvatarUrl !== "" ? (React.createElement(ActorAvatar, { url: props.actorAvatarUrl, handle: props.actorHandle })) : (React.createElement("span", { "aria-hidden": "true", className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-black/10 font-semibold text-neutral-700 uppercase dark:bg-white/15 dark:text-neutral-200", style: { fontSize: 13 } }, props.actorHandle.slice(0, 1))),
|
|
32
|
+
React.createElement("span", { className: "text-light-primary dark:text-dark-primary", style: { fontSize: 14, fontWeight: 600 } },
|
|
33
|
+
"@",
|
|
34
|
+
props.actorHandle))),
|
|
35
|
+
props.turnSnippet !== undefined && props.turnSnippet !== "" && (React.createElement("blockquote", { "data-testid": "notification-detail-turn", className: "border-l-2 border-black/20 pl-3 text-light-secondary italic dark:border-white/25 dark:text-dark-secondary", style: { fontSize: 13, lineHeight: 1.5, margin: 0 } }, props.turnSnippet)),
|
|
36
|
+
props.accessRequest !== undefined && (React.createElement("div", { "data-testid": "notification-detail-access", "data-access-state": props.accessRequest.state, className: "flex flex-col gap-2 rounded-md border border-black/10 p-3 dark:border-white/10" },
|
|
37
|
+
React.createElement("p", { className: "text-light-primary dark:text-dark-primary", style: { fontSize: 14, fontWeight: 600, margin: 0 } },
|
|
38
|
+
props.accessRequest.state === "pending" && React.createElement(React.Fragment, null,
|
|
39
|
+
"@",
|
|
40
|
+
props.accessRequest.requester,
|
|
41
|
+
" requested access"),
|
|
42
|
+
props.accessRequest.state === "approved" && (React.createElement(React.Fragment, null,
|
|
43
|
+
"@",
|
|
44
|
+
props.accessRequest.requester,
|
|
45
|
+
" approved",
|
|
46
|
+
props.accessRequest.approvedRole ? ` as ${props.accessRequest.approvedRole}` : "")),
|
|
47
|
+
props.accessRequest.state === "revoked" && React.createElement(React.Fragment, null,
|
|
48
|
+
"@",
|
|
49
|
+
props.accessRequest.requester,
|
|
50
|
+
" request rejected"),
|
|
51
|
+
props.accessRequest.state === "decided" && React.createElement(React.Fragment, null, "This request was already decided")),
|
|
52
|
+
props.accessRequest.state === "pending" && (React.createElement("div", { className: "flex flex-wrap items-center", style: { gap: 8 } },
|
|
53
|
+
React.createElement("button", { type: "button", "data-testid": "notification-detail-approve-editor", disabled: props.accessRequest.busy, onClick: () => props.accessRequest?.onApprove("editor"), className: "rounded-md bg-black px-3 py-1.5 font-semibold text-white disabled:opacity-50 dark:bg-white dark:text-black", style: { fontSize: 13 } }, "Editor"),
|
|
54
|
+
React.createElement("button", { type: "button", "data-testid": "notification-detail-approve-viewer", disabled: props.accessRequest.busy, onClick: () => props.accessRequest?.onApprove("viewer"), className: "rounded-md border border-black/20 px-3 py-1.5 font-semibold disabled:opacity-50 dark:border-white/25", style: { fontSize: 13 } }, "Viewer"),
|
|
55
|
+
React.createElement("button", { type: "button", "data-testid": "notification-detail-reject", disabled: props.accessRequest.busy, onClick: () => props.accessRequest?.onReject(), className: "rounded-md px-3 py-1.5 font-semibold text-red-700 underline disabled:opacity-50 dark:text-red-400", style: { fontSize: 13 } }, "Reject"))),
|
|
56
|
+
props.accessRequest.error !== undefined && props.accessRequest.error !== "" && (React.createElement("p", { "data-testid": "notification-detail-access-error", style: { fontSize: 13, lineHeight: 1.4, margin: 0 } }, props.accessRequest.error)))),
|
|
57
|
+
props.mediaSlot !== undefined && React.createElement("div", { "data-testid": "notification-detail-media" }, props.mediaSlot),
|
|
58
|
+
(props.appLinkSlot !== undefined || props.contextLinkSlot !== undefined) && (React.createElement("div", { "data-testid": "notification-detail-app-link", className: "flex flex-wrap items-center text-light-primary dark:text-dark-primary", style: { gap: 16 } },
|
|
59
|
+
props.appLinkSlot,
|
|
60
|
+
props.contextLinkSlot)),
|
|
24
61
|
(props.onToggleVibeMute !== undefined || props.onToggleHandleMute !== undefined) && (React.createElement("div", { className: "flex flex-col", style: { gap: 8 } },
|
|
25
62
|
props.onToggleVibeMute !== undefined && (React.createElement(MuteToggle, { testId: "notification-detail-mute-vibe", label: "Mute this vibe", target: props.vibeLabel, checked: props.mutedVibe === true, disabled: props.mutesDisabled === true, onToggle: props.onToggleVibeMute })),
|
|
26
|
-
props.onToggleHandleMute !== undefined && (React.createElement(MuteToggle, { testId: "notification-detail-mute-handle", label: "Mute this handle", target: props.handleLabel === undefined || props.handleLabel === "" ? undefined : `@${props.handleLabel}`, checked: props.mutedHandle === true, disabled: props.mutesDisabled === true, onToggle: props.onToggleHandleMute }))
|
|
63
|
+
props.onToggleHandleMute !== undefined && (React.createElement(MuteToggle, { testId: "notification-detail-mute-handle", label: "Mute this handle", target: props.handleLabel === undefined || props.handleLabel === "" ? undefined : `@${props.handleLabel}`, checked: props.mutedHandle === true, disabled: props.mutesDisabled === true, onToggle: props.onToggleHandleMute })),
|
|
64
|
+
props.muteError !== undefined && props.muteError !== "" && (React.createElement("p", { "data-testid": "notification-detail-mute-error", className: "text-light-secondary dark:text-dark-secondary", style: { fontSize: 13, lineHeight: 1.4, margin: 0 } }, props.muteError))))));
|
|
27
65
|
}
|
|
28
66
|
//# sourceMappingURL=NotificationDetailView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationDetailView.js","sourceRoot":"","sources":["../../jsr/components/NotificationDetailView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationDetailView.js","sourceRoot":"","sources":["../../jsr/components/NotificationDetailView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,9 +11,13 @@ export interface ViewerTagViewProps {
|
|
|
11
11
|
readonly onSignIn?: () => void;
|
|
12
12
|
readonly onPickFile?: (file: File) => void | Promise<void>;
|
|
13
13
|
readonly onTagClick?: () => void;
|
|
14
|
+
readonly onClick?: () => void;
|
|
15
|
+
readonly clickLabel?: string;
|
|
16
|
+
readonly size?: number;
|
|
17
|
+
readonly avatarOnly?: boolean;
|
|
14
18
|
readonly tagExpanded?: boolean;
|
|
15
19
|
readonly tagLabel?: string;
|
|
16
20
|
readonly trailing?: React.ReactNode;
|
|
17
21
|
readonly style?: React.CSSProperties;
|
|
18
22
|
}
|
|
19
|
-
export declare function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymous, pending, needsHandle, onChooseHandle, onSignIn, onPickFile, onTagClick, tagExpanded, tagLabel, trailing, style, }: ViewerTagViewProps): React.ReactElement;
|
|
23
|
+
export declare function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymous, pending, needsHandle, onChooseHandle, onSignIn, onPickFile, onTagClick, onClick, clickLabel, size, avatarOnly, tagExpanded, tagLabel, trailing, style, }: ViewerTagViewProps): React.ReactElement;
|
|
@@ -4,13 +4,20 @@ function CameraGlyph({ size }) {
|
|
|
4
4
|
React.createElement("path", { d: "M4 7h4l2-2h4l2 2h4a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1Z" }),
|
|
5
5
|
React.createElement("circle", { cx: "12", cy: "12.5", r: "3.5" })));
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
function avatarDiameter(size) {
|
|
8
|
+
if (typeof size === "number" && Number.isFinite(size) && size > 0)
|
|
9
|
+
return size;
|
|
10
|
+
return 30;
|
|
11
|
+
}
|
|
12
|
+
export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymous, pending, needsHandle, onChooseHandle, onSignIn, onPickFile, onTagClick, onClick, clickLabel, size, avatarOnly, tagExpanded, tagLabel, trailing, style, }) {
|
|
8
13
|
const [uploading, setUploading] = useState(false);
|
|
9
14
|
const [avatarError, setAvatarError] = useState(false);
|
|
10
15
|
const fileRef = useRef(null);
|
|
11
16
|
useEffect(() => {
|
|
12
17
|
setAvatarError(false);
|
|
13
18
|
}, [avatarUrl]);
|
|
19
|
+
const diameter = avatarDiameter(size);
|
|
20
|
+
const avatarOnlyMode = avatarOnly === true;
|
|
14
21
|
if (pending) {
|
|
15
22
|
return (React.createElement("span", { role: "status", "aria-busy": "true", "aria-label": "Checking your account", style: {
|
|
16
23
|
display: "inline-flex",
|
|
@@ -27,8 +34,8 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
27
34
|
...style,
|
|
28
35
|
} },
|
|
29
36
|
React.createElement("span", { "aria-hidden": "true", style: {
|
|
30
|
-
width:
|
|
31
|
-
height:
|
|
37
|
+
width: diameter,
|
|
38
|
+
height: diameter,
|
|
32
39
|
borderRadius: "50%",
|
|
33
40
|
flexShrink: 0,
|
|
34
41
|
background: "var(--border, light-dark(rgba(0,0,0,0.14), rgba(255,255,255,0.14)))",
|
|
@@ -109,6 +116,44 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
109
116
|
const initial = slug.charAt(0).toUpperCase();
|
|
110
117
|
const hasAvatarImage = Boolean(avatarUrl && !avatarError);
|
|
111
118
|
const interactive = Boolean(onTagClick);
|
|
119
|
+
const hasAction = onClick !== undefined && onTagClick === undefined && editable !== true;
|
|
120
|
+
const avatarOnlyChrome = avatarOnlyMode === true ? { background: "transparent", border: "none", padding: 0, alignSelf: "flex-start" } : {};
|
|
121
|
+
if (hasAction) {
|
|
122
|
+
return (React.createElement("button", { type: "button", onClick: onClick, "aria-label": clickLabel ?? `Open profile for ${slug}`, style: {
|
|
123
|
+
display: "inline-flex",
|
|
124
|
+
alignItems: "center",
|
|
125
|
+
gap: 8,
|
|
126
|
+
background: "var(--surface, var(--card-bg, light-dark(rgba(0,0,0,0.05), rgba(255,255,255,0.07))))",
|
|
127
|
+
border: "1px solid var(--border, light-dark(rgba(0,0,0,0.18), rgba(255,255,255,0.15)))",
|
|
128
|
+
borderRadius: 999,
|
|
129
|
+
padding: "5px 14px 5px 5px",
|
|
130
|
+
fontSize: 14,
|
|
131
|
+
fontFamily: "inherit",
|
|
132
|
+
color: "var(--text-primary, var(--text, light-dark(#3a3a3a, #e0e0e0)))",
|
|
133
|
+
colorScheme: "light dark",
|
|
134
|
+
cursor: "pointer",
|
|
135
|
+
boxSizing: "border-box",
|
|
136
|
+
minWidth: 0,
|
|
137
|
+
maxWidth: "100%",
|
|
138
|
+
...avatarOnlyChrome,
|
|
139
|
+
...style,
|
|
140
|
+
} },
|
|
141
|
+
React.createElement("span", { style: { position: "relative", flexShrink: 0, display: "flex" } },
|
|
142
|
+
React.createElement("span", { style: {
|
|
143
|
+
width: diameter,
|
|
144
|
+
height: diameter,
|
|
145
|
+
borderRadius: "50%",
|
|
146
|
+
background: "var(--accent, #6366f1)",
|
|
147
|
+
display: "flex",
|
|
148
|
+
alignItems: "center",
|
|
149
|
+
justifyContent: "center",
|
|
150
|
+
fontSize: diameter * 0.4,
|
|
151
|
+
fontWeight: 700,
|
|
152
|
+
color: "white",
|
|
153
|
+
overflow: "hidden",
|
|
154
|
+
} }, hasAvatarImage ? (React.createElement("img", { src: avatarUrl, alt: "", onError: () => setAvatarError(true), style: { width: "100%", height: "100%", objectFit: "cover", borderRadius: "50%" } })) : (initial))),
|
|
155
|
+
avatarOnlyMode ? null : (React.createElement("span", { style: { fontWeight: 500, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, displayName ?? slug))));
|
|
156
|
+
}
|
|
112
157
|
return (React.createElement("span", { onClick: interactive ? () => onTagClick?.() : undefined, style: {
|
|
113
158
|
display: "inline-flex",
|
|
114
159
|
alignItems: "center",
|
|
@@ -124,6 +169,7 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
124
169
|
boxSizing: "border-box",
|
|
125
170
|
minWidth: 0,
|
|
126
171
|
maxWidth: "100%",
|
|
172
|
+
...avatarOnlyChrome,
|
|
127
173
|
...style,
|
|
128
174
|
} },
|
|
129
175
|
React.createElement("span", { style: { position: "relative", flexShrink: 0 } },
|
|
@@ -141,14 +187,14 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
141
187
|
}
|
|
142
188
|
}
|
|
143
189
|
: undefined, style: {
|
|
144
|
-
width:
|
|
145
|
-
height:
|
|
190
|
+
width: diameter,
|
|
191
|
+
height: diameter,
|
|
146
192
|
borderRadius: "50%",
|
|
147
193
|
background: "var(--accent, #6366f1)",
|
|
148
194
|
display: "flex",
|
|
149
195
|
alignItems: "center",
|
|
150
196
|
justifyContent: "center",
|
|
151
|
-
fontSize:
|
|
197
|
+
fontSize: diameter * 0.4,
|
|
152
198
|
fontWeight: 700,
|
|
153
199
|
color: "white",
|
|
154
200
|
overflow: "hidden",
|
|
@@ -167,13 +213,13 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
167
213
|
color: "var(--accent-text, var(--accent, #a5b4fc))",
|
|
168
214
|
borderRadius: "50%",
|
|
169
215
|
} },
|
|
170
|
-
React.createElement(CameraGlyph, { size: 13 })))),
|
|
216
|
+
React.createElement(CameraGlyph, { size: diameter * (13 / 30) })))),
|
|
171
217
|
editable && hasAvatarImage && (React.createElement("span", { style: {
|
|
172
218
|
position: "absolute",
|
|
173
219
|
right: -1,
|
|
174
220
|
bottom: -1,
|
|
175
|
-
width: 13,
|
|
176
|
-
height: 13,
|
|
221
|
+
width: diameter * (13 / 30),
|
|
222
|
+
height: diameter * (13 / 30),
|
|
177
223
|
borderRadius: "50%",
|
|
178
224
|
background: "rgba(15,12,40,0.9)",
|
|
179
225
|
border: "1px solid var(--border, rgba(255,255,255,0.25))",
|
|
@@ -184,8 +230,8 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
184
230
|
color: "var(--accent-text, var(--accent, #a5b4fc))",
|
|
185
231
|
pointerEvents: "none",
|
|
186
232
|
} },
|
|
187
|
-
React.createElement(CameraGlyph, { size:
|
|
188
|
-
interactive ? (React.createElement("button", { type: "button", "aria-haspopup": "menu", "aria-expanded": tagExpanded ?? false, "aria-label": tagLabel ?? "Switch handle", onClick: (e) => {
|
|
233
|
+
React.createElement(CameraGlyph, { size: diameter * 0.3 })))),
|
|
234
|
+
avatarOnlyMode ? null : interactive ? (React.createElement("button", { type: "button", "aria-haspopup": "menu", "aria-expanded": tagExpanded ?? false, "aria-label": tagLabel ?? "Switch handle", onClick: (e) => {
|
|
189
235
|
e.stopPropagation();
|
|
190
236
|
onTagClick?.();
|
|
191
237
|
}, style: {
|
|
@@ -204,7 +250,7 @@ export function ViewerTagView({ slug, displayName, avatarUrl, editable, anonymou
|
|
|
204
250
|
overflow: "hidden",
|
|
205
251
|
textOverflow: "ellipsis",
|
|
206
252
|
} }, displayName ?? slug)) : (React.createElement("span", { style: { fontWeight: 500, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, displayName ?? slug)),
|
|
207
|
-
trailing,
|
|
253
|
+
avatarOnlyMode ? null : trailing,
|
|
208
254
|
editable && (React.createElement("input", { ref: fileRef, type: "file", accept: "image/*", style: { display: "none" }, onClick: (e) => e.stopPropagation(), onChange: handleFileChange }))));
|
|
209
255
|
}
|
|
210
256
|
//# sourceMappingURL=ViewerTagView.js.map
|