@vibes.diy/base 14.3.113 → 14.3.115
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/vibe-menu/VibeMenu.js +9 -3
- package/components/vibe-menu/VibeMenu.js.map +1 -1
- package/components/vibe-menu/cards/AccountCard.d.ts +4 -1
- package/components/vibe-menu/cards/AccountCard.js +25 -9
- package/components/vibe-menu/cards/AccountCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeCard.d.ts +2 -1
- package/components/vibe-menu/cards/CodeCard.js +17 -6
- package/components/vibe-menu/cards/CodeCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +2 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.js +8 -6
- package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -1
- package/components/vibe-menu/geometry.d.ts +1 -0
- package/components/vibe-menu/geometry.js +5 -0
- package/components/vibe-menu/geometry.js.map +1 -1
- package/components/vibe-menu/index.d.ts +5 -0
- package/components/vibe-menu/index.js +5 -0
- package/components/vibe-menu/index.js.map +1 -1
- package/components/vibe-menu/parts/Chip.d.ts +2 -1
- package/components/vibe-menu/parts/Chip.js +26 -2
- package/components/vibe-menu/parts/Chip.js.map +1 -1
- package/components/vibe-menu/parts/Composer.d.ts +11 -0
- package/components/vibe-menu/parts/Composer.js +44 -1
- package/components/vibe-menu/parts/Composer.js.map +1 -1
- package/components/vibe-menu/parts/LookRestyleSection.d.ts +51 -0
- package/components/vibe-menu/parts/LookRestyleSection.js +290 -0
- package/components/vibe-menu/parts/LookRestyleSection.js.map +1 -0
- package/components/vibe-menu/parts/MomentLine.d.ts +1 -0
- package/components/vibe-menu/parts/MomentLine.js +4 -2
- package/components/vibe-menu/parts/MomentLine.js.map +1 -1
- package/components/vibe-menu/parts/SendCap.d.ts +8 -0
- package/components/vibe-menu/parts/SendCap.js +10 -0
- package/components/vibe-menu/parts/SendCap.js.map +1 -0
- package/components/vibe-menu/parts/StatusChipRow.d.ts +58 -0
- package/components/vibe-menu/parts/StatusChipRow.js +121 -0
- package/components/vibe-menu/parts/StatusChipRow.js.map +1 -0
- package/components/vibe-menu/parts/StatusLine.d.ts +21 -0
- package/components/vibe-menu/parts/StatusLine.js +25 -0
- package/components/vibe-menu/parts/StatusLine.js.map +1 -0
- package/components/vibe-menu/parts/SurveyStrip.d.ts +3 -1
- package/components/vibe-menu/parts/SurveyStrip.js +9 -1
- package/components/vibe-menu/parts/SurveyStrip.js.map +1 -1
- package/components/vibe-menu/parts/VibesSwitchGlass.d.ts +0 -9
- package/components/vibe-menu/parts/VibesSwitchGlass.js +2 -17
- package/components/vibe-menu/parts/VibesSwitchGlass.js.map +1 -1
- package/components/vibe-menu/parts/agent-log-frame.d.ts +9 -0
- package/components/vibe-menu/parts/agent-log-frame.js +10 -0
- package/components/vibe-menu/parts/agent-log-frame.js.map +1 -0
- package/components/vibe-menu/parts/use-composer-draft.js +30 -0
- package/components/vibe-menu/parts/use-composer-draft.js.map +1 -1
- package/components/vibe-menu/shell/VibeMenuShell.d.ts +5 -0
- package/components/vibe-menu/shell/VibeMenuShell.js +5 -1
- package/components/vibe-menu/shell/VibeMenuShell.js.map +1 -1
- package/components/vibe-menu/shell/shell.styles.js +270 -38
- package/components/vibe-menu/shell/shell.styles.js.map +1 -1
- package/components/vibe-menu/slices.d.ts +8 -2
- package/components/vibe-menu/slices.js.map +1 -1
- package/components/vibe-menu/vibe-menu.styles.d.ts +3 -3
- package/components/vibe-menu/vibe-menu.styles.js +99 -1
- package/components/vibe-menu/vibe-menu.styles.js.map +1 -1
- package/hooks/img-gen/use-img-gen.d.ts +1 -0
- package/hooks/img-gen/use-img-gen.js +374 -304
- package/hooks/img-gen/use-img-gen.js.map +1 -1
- package/package.json +5 -5
|
@@ -12,9 +12,12 @@ export * from "./parts/DoneButton.js";
|
|
|
12
12
|
export * from "./parts/BackRow.js";
|
|
13
13
|
export * from "./parts/Chip.js";
|
|
14
14
|
export * from "./parts/Composer.js";
|
|
15
|
+
export * from "./parts/SendCap.js";
|
|
15
16
|
export * from "./parts/use-composer-draft.js";
|
|
16
17
|
export * from "./parts/MomentLine.js";
|
|
18
|
+
export * from "./parts/agent-log-frame.js";
|
|
17
19
|
export * from "./parts/SurveyStrip.js";
|
|
20
|
+
export * from "./parts/LookRestyleSection.js";
|
|
18
21
|
export * from "./parts/ScrollTabRow.js";
|
|
19
22
|
export * from "./parts/ThinkingLine.js";
|
|
20
23
|
export * from "./parts/brief-faces-art.js";
|
|
@@ -26,6 +29,8 @@ export * from "./parts/SaveAskLine.js";
|
|
|
26
29
|
export * from "./shell/shell.styles.js";
|
|
27
30
|
export * from "./parts/SectionStrip.js";
|
|
28
31
|
export * from "./parts/VibesSwitchGlass.js";
|
|
32
|
+
export * from "./parts/StatusLine.js";
|
|
33
|
+
export * from "./parts/StatusChipRow.js";
|
|
29
34
|
export * from "./shell/useMenuSequencer.js";
|
|
30
35
|
export * from "./parts/MenuCard.js";
|
|
31
36
|
export * from "./shell/VibeMenuShell.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC"}
|
|
@@ -30,10 +30,11 @@ export interface SuggestionFastPath {
|
|
|
30
30
|
}
|
|
31
31
|
export interface SuggestionsProps {
|
|
32
32
|
readonly items: readonly string[];
|
|
33
|
-
readonly onPick: (text: string) =>
|
|
33
|
+
readonly onPick: (text: string) => unknown;
|
|
34
34
|
readonly fastPaths?: readonly SuggestionFastPath[] | null;
|
|
35
35
|
readonly onToggleFastPath?: ((text: string) => void) | null;
|
|
36
36
|
readonly gold?: string | null;
|
|
37
|
+
readonly inline?: boolean;
|
|
37
38
|
}
|
|
38
39
|
export declare function Suggestions(props: SuggestionsProps): React.ReactElement | null;
|
|
39
40
|
export interface RefreshButtonProps {
|
|
@@ -44,13 +44,37 @@ function suggestionMark(text, state, onToggle) {
|
|
|
44
44
|
}
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
|
+
function isPromiseLike(value) {
|
|
48
|
+
if (value === null || (typeof value !== "object" && typeof value !== "function"))
|
|
49
|
+
return false;
|
|
50
|
+
return typeof Reflect.get(value, "then") === "function";
|
|
51
|
+
}
|
|
47
52
|
export function Suggestions(props) {
|
|
53
|
+
const workingRef = React.useRef(null);
|
|
54
|
+
const [working, setWorking] = React.useState(null);
|
|
48
55
|
if (props.items.length === 0)
|
|
49
56
|
return null;
|
|
50
57
|
const onToggle = props.onToggleFastPath;
|
|
51
|
-
|
|
58
|
+
const onPick = props.onPick;
|
|
59
|
+
const choose = (text) => {
|
|
60
|
+
if (workingRef.current !== null)
|
|
61
|
+
return;
|
|
62
|
+
const answer = onPick(text);
|
|
63
|
+
if (!isPromiseLike(answer))
|
|
64
|
+
return;
|
|
65
|
+
workingRef.current = text;
|
|
66
|
+
setWorking(text);
|
|
67
|
+
const release = () => {
|
|
68
|
+
if (workingRef.current !== text)
|
|
69
|
+
return;
|
|
70
|
+
workingRef.current = null;
|
|
71
|
+
setWorking(null);
|
|
72
|
+
};
|
|
73
|
+
void Promise.resolve(answer).then(release, release);
|
|
74
|
+
};
|
|
75
|
+
return (React.createElement("div", { className: props.inline === true ? "vm-suggestions is-inline" : "vm-suggestions" }, props.items.slice(0, 3).map((text) => {
|
|
52
76
|
const isGold = props.gold === text;
|
|
53
|
-
const pick = (React.createElement("button", { key: text, className: isGold ? "vm-suggest is-gold" : "vm-suggest", type: "button", "data-gold": isGold ? "true" : undefined, onClick: () =>
|
|
77
|
+
const pick = (React.createElement("button", { key: text, className: isGold ? "vm-suggest is-gold" : "vm-suggest", type: "button", "data-gold": isGold ? "true" : undefined, "aria-busy": working === text ? "true" : undefined, disabled: working !== null, onClick: () => choose(text) },
|
|
54
78
|
isGold ? React.createElement(Glyph, { name: "star" }) : null,
|
|
55
79
|
text));
|
|
56
80
|
const state = props.fastPaths?.find((path) => path.text === text)?.state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Chip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AA0BnD,SAAS,aAAa,CAAC,KAAgB;IACrC,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAGD,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,OAAO,CACL,gCACE,GAAG,EAAE,KAAK,CAAC,OAAO,EAClB,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,EAC/B,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,SAAS,mBACZ,KAAK,CAAC,YAAY,mBAClB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC3D,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO;YACpC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAEA,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI;QAC/D,KAAK,CAAC,KAAK,CACL,CACV,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,OAAO,CAAC,KAA6C;IACnE,OAAO,6BAAK,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,QAAQ,CAAO,CAAC;AAC1D,CAAC;
|
|
1
|
+
{"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Chip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,17 @@ export interface ComposerSlice {
|
|
|
23
23
|
readonly seed: ComposerEdge | null;
|
|
24
24
|
readonly restore: ComposerRestore | null;
|
|
25
25
|
readonly onSendBlocked?: (reason: ComposerSendBlockedReason) => void;
|
|
26
|
+
readonly rewrite?: ComposerRewrite;
|
|
27
|
+
}
|
|
28
|
+
export interface ComposerRewrite {
|
|
29
|
+
readonly label: string;
|
|
30
|
+
readonly placeholder: string;
|
|
31
|
+
readonly loading: boolean;
|
|
32
|
+
readonly suggestion?: string;
|
|
33
|
+
readonly submitDisabled: boolean;
|
|
34
|
+
readonly refill?: ComposerEdge;
|
|
35
|
+
readonly onCancel: () => void;
|
|
36
|
+
readonly onSubmit: (text: string) => boolean | undefined | Promise<boolean>;
|
|
26
37
|
}
|
|
27
38
|
export interface ComposerDraft {
|
|
28
39
|
readonly text: string;
|
|
@@ -2,6 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import { ATTACHMENT_ACCEPT } from "../../../attachments/attachment-types.js";
|
|
3
3
|
import { composerFileDrop } from "../../../attachments/composer-file-drop.js";
|
|
4
4
|
import { Glyph } from "./Glyph.js";
|
|
5
|
+
import { SendCap } from "./SendCap.js";
|
|
5
6
|
import { FacesGlyph } from "./ThinkingLine.js";
|
|
6
7
|
function StagedAttachments(props) {
|
|
7
8
|
if (props.chips.length === 0)
|
|
@@ -14,6 +15,45 @@ export const STOP_GUARD_MS = 600;
|
|
|
14
15
|
export function stopGuardHolds(now, armedAt) {
|
|
15
16
|
return armedAt !== undefined && now - armedAt < STOP_GUARD_MS;
|
|
16
17
|
}
|
|
18
|
+
function RewriteComposer(props) {
|
|
19
|
+
const { rewrite, draft } = props;
|
|
20
|
+
const empty = draft.text.trim() === "";
|
|
21
|
+
const text = empty ? rewrite.suggestion : draft.text.trim();
|
|
22
|
+
const submitDisabled = props.disabled || rewrite.submitDisabled || text === undefined || text === "";
|
|
23
|
+
function submit() {
|
|
24
|
+
if (submitDisabled || text === undefined)
|
|
25
|
+
return;
|
|
26
|
+
void Promise.resolve(rewrite.onSubmit(text)).then((ok) => {
|
|
27
|
+
if (ok !== false)
|
|
28
|
+
draft.setText("");
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function cancel() {
|
|
32
|
+
if (rewrite.suggestion !== undefined && draft.text === rewrite.suggestion)
|
|
33
|
+
draft.setText("");
|
|
34
|
+
rewrite.onCancel();
|
|
35
|
+
}
|
|
36
|
+
function onKeyDown(event) {
|
|
37
|
+
if ((event.key === "Tab" || event.key === "ArrowRight") && event.shiftKey !== true && draft.text === "") {
|
|
38
|
+
if (rewrite.suggestion === undefined)
|
|
39
|
+
return;
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
draft.setText(rewrite.suggestion);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (event.key !== "Enter" || event.shiftKey === true)
|
|
45
|
+
return;
|
|
46
|
+
if (event.nativeEvent.isComposing === true || event.nativeEvent.keyCode === 229)
|
|
47
|
+
return;
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
submit();
|
|
50
|
+
}
|
|
51
|
+
return (React.createElement("label", { className: "vm-composer is-rewrite" },
|
|
52
|
+
React.createElement("textarea", { ref: props.fieldRef, rows: 1, value: draft.text, placeholder: rewrite.placeholder, "aria-label": "What should change?", "aria-busy": rewrite.loading ? true : undefined, disabled: props.disabled, onChange: (event) => draft.setText(event.target.value), onKeyDown: onKeyDown }),
|
|
53
|
+
rewrite.loading && draft.text === "" ? (React.createElement("span", { className: "vm-rewrite-shimmer", "aria-hidden": "true", "data-testid": "nature-suggestion-shimmer" })) : null,
|
|
54
|
+
React.createElement(SendCap, { variant: "cancel", onPress: cancel }),
|
|
55
|
+
React.createElement(SendCap, { label: rewrite.label, disabled: submitDisabled, onPress: submit })));
|
|
56
|
+
}
|
|
17
57
|
export function Composer(props) {
|
|
18
58
|
const { composer, draft } = props;
|
|
19
59
|
const attachments = draft.attachments;
|
|
@@ -29,6 +69,9 @@ export function Composer(props) {
|
|
|
29
69
|
setStopping(false);
|
|
30
70
|
wasBuilding.current = building;
|
|
31
71
|
}, [building]);
|
|
72
|
+
if (composer.rewrite !== undefined) {
|
|
73
|
+
return React.createElement(RewriteComposer, { rewrite: composer.rewrite, draft: draft, disabled: composer.disabled, fieldRef: props.fieldRef });
|
|
74
|
+
}
|
|
32
75
|
function submit() {
|
|
33
76
|
if (composer.disabled === true) {
|
|
34
77
|
composer.onSendBlocked?.("other");
|
|
@@ -52,7 +95,7 @@ export function Composer(props) {
|
|
|
52
95
|
submit();
|
|
53
96
|
}
|
|
54
97
|
const drop = composerFileDrop({ onFiles: attachments.add });
|
|
55
|
-
const sendCap = (React.createElement(
|
|
98
|
+
const sendCap = (React.createElement(SendCap, { label: composer.cap === "Remix this" ? "Remix this" : "Send", disabled: composer.disabled, onPress: submit }));
|
|
56
99
|
return (React.createElement(React.Fragment, null,
|
|
57
100
|
React.createElement("input", { ref: fileInput, type: "file", multiple: true, hidden: true, accept: ATTACHMENT_ACCEPT, onChange: (event) => {
|
|
58
101
|
attachments.add(Array.from(event.currentTarget.files ?? []));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAyB,MAAM,0CAA0C,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { surveyCountdownDigit, type SurveyChoosing } from "./SurveyStrip.js";
|
|
3
|
+
export interface LookRestyleTile {
|
|
4
|
+
readonly src?: string;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly fontLabel: string;
|
|
7
|
+
readonly fontFamily: string;
|
|
8
|
+
readonly fontUrl?: string;
|
|
9
|
+
readonly mode: "light" | "dark";
|
|
10
|
+
}
|
|
11
|
+
export type LookRestylePhase = "idle" | "loading" | "ready" | "sent" | "failed" | "credits-short" | "no-screenshot";
|
|
12
|
+
export interface LookRestyleView {
|
|
13
|
+
readonly phase: LookRestylePhase;
|
|
14
|
+
readonly now?: string;
|
|
15
|
+
readonly looks: readonly LookRestyleTile[];
|
|
16
|
+
readonly choosing?: SurveyChoosing;
|
|
17
|
+
readonly big?: number;
|
|
18
|
+
readonly picked?: number;
|
|
19
|
+
readonly onOpen?: () => void;
|
|
20
|
+
readonly onWanted?: () => void;
|
|
21
|
+
readonly onChoose?: (index: number) => void;
|
|
22
|
+
readonly onCancel?: () => void;
|
|
23
|
+
readonly onBig?: (index: number | undefined) => void;
|
|
24
|
+
readonly onRetry?: () => void;
|
|
25
|
+
}
|
|
26
|
+
export declare const LOOK_RESTYLE_COPY: Readonly<{
|
|
27
|
+
readonly title: "New looks for your app";
|
|
28
|
+
readonly aside: "Same features, new look";
|
|
29
|
+
readonly idle: "Four fresh looks for this app, painted from its latest picture.";
|
|
30
|
+
readonly now: "Your app now";
|
|
31
|
+
readonly nowSub: "From your latest version";
|
|
32
|
+
readonly loading: "Dreaming up new looks…";
|
|
33
|
+
readonly loadingSub: "Every button and label stays; colour and type get a fresh take.";
|
|
34
|
+
readonly counting: "Tap again to cancel";
|
|
35
|
+
readonly all: "All looks";
|
|
36
|
+
readonly compareNow: "Now";
|
|
37
|
+
readonly sent: (name: string) => string;
|
|
38
|
+
readonly sentSub: "Same features, new look. It lands in your app in a moment.";
|
|
39
|
+
readonly failed: "A fresh set of looks is one tap away.";
|
|
40
|
+
readonly retry: "Paint new looks";
|
|
41
|
+
readonly creditsShort: "Add credits and four fresh looks for this app are one scroll away.";
|
|
42
|
+
readonly noScreenshot: "New looks for your app appear here once its first picture is taken.";
|
|
43
|
+
readonly region: "New looks";
|
|
44
|
+
}>;
|
|
45
|
+
export declare function lookTileLabel(look: LookRestyleTile, digit: number | undefined): string;
|
|
46
|
+
export declare const LOOK_RESTYLE_CSS = "\n[data-vibe-menu] .vm-lr { display: flex; flex-direction: column; gap: var(--space-14); margin: var(--space-24) 0 var(--space-16); padding-top: var(--space-16); border-top: var(--stroke-rule) solid var(--line-hairline); container: vm-lr / inline-size; }\n[data-vibe-menu] .vm-lr-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-8); padding: 0 var(--space-2); }\n[data-vibe-menu] .vm-lr-title { font: 600 17px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-lr-aside { font: 400 12px/1.3 var(--font-display); color: var(--muted); white-space: nowrap; }\n[data-vibe-menu] .vm-lr-sub { margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); }\n[data-vibe-menu] .vm-lr-note { padding: var(--space-10) var(--space-12); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-moment); background: var(--card-bg); font: 400 13px/1.4 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-lr-retry { margin-top: var(--space-8); height: 32px; padding: 0 var(--space-14); border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 13px/1 var(--font-display); cursor: pointer; }\n[data-vibe-menu] .vm-lr-now { display: flex; align-items: center; gap: var(--space-12); }\n[data-vibe-menu] .vm-lr-now-pic { flex: none; width: 72px; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); }\n[data-vibe-menu] .vm-lr-pic { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }\n[data-vibe-menu] .vm-lr-now-text b { display: block; font: 700 14px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-lr-now-text span { display: block; margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); }\n[data-vibe-menu] .vm-lr-status { display: flex; align-items: center; gap: var(--space-8); font: 600 14px/1.3 var(--font-display); color: var(--ink); }\n[data-vibe-menu] .vm-lr-status::before { content: \"\"; flex: none; width: 10px; height: 10px; border-radius: var(--radius-full); background: var(--accent); color: var(--on-accent); border: var(--stroke-rule) solid var(--line-card); animation: vm-lr-pulse 1.4s ease-in-out infinite; }\n@keyframes vm-lr-pulse { 50% { transform: scale(0.6); } }\n[data-vibe-menu] .vm-lr-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-12) var(--space-10); }\n@container vm-lr (min-width: 600px) {\n /* Wide (Code mode on a desktop): four across, each tile capped so the row stays a glance, not a wall. */\n [data-vibe-menu] .vm-lr-grid { grid-template-columns: repeat(4, minmax(0, 232px)); justify-content: start; }\n [data-vibe-menu] .vm-lr-now-pic { width: 96px; }\n [data-vibe-menu] .vm-lr-big { max-width: 320px; }\n}\n[data-vibe-menu] .vm-lr-cell { position: relative; min-width: 0; }\n[data-vibe-menu] .vm-lr-tile { position: relative; display: block; width: 100%; min-height: 44px; padding: 0; aspect-ratio: 3 / 4; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; touch-action: manipulation; }\n[data-vibe-menu] .vm-lr-tile[data-on=\"true\"] { outline: var(--stroke-focus) solid var(--accent); outline-offset: 2px; }\n[data-vibe-menu] .vm-lr-tile[aria-disabled=\"true\"] { cursor: default; }\n[data-vibe-menu] .vm-lr[data-counting] .vm-lr-cell:not([data-on=\"true\"]) .vm-lr-tile { opacity: 0.55; }\n[data-vibe-menu] .vm-lr[data-sent] .vm-lr-cell:not([data-on=\"true\"]) .vm-lr-tile { opacity: 0.35; }\n[data-vibe-menu] .vm-lr-ghost .vm-lr-tile { cursor: default; }\n[data-vibe-menu] .vm-lr-ghost .vm-lr-pic { filter: grayscale(1); opacity: 0.35; }\n[data-vibe-menu] .vm-lr-ghost .vm-lr-tile::after { content: \"\"; position: absolute; inset: 0; background: linear-gradient(100deg, transparent 30%, var(--card-bg) 50%, transparent 70%); background-size: 250% 100%; animation: vm-lr-sweep 1.6s linear infinite; }\n@keyframes vm-lr-sweep { from { background-position: 120% 0; } to { background-position: -120% 0; } }\n[data-vibe-menu] .vm-lr-count-big { position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none; background: color-mix(in srgb, var(--card-bg) 30%, transparent); }\n[data-vibe-menu] .vm-lr-count-big span { display: grid; place-items: center; width: 64px; height: 64px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 32px/1 var(--font-display); font-variant-numeric: tabular-nums; }\n[data-vibe-menu] .vm-lr-count-big b, [data-vibe-menu] .vm-lr-count b { font: inherit; animation: vm-lr-tick 240ms ease-out; }\n@keyframes vm-lr-tick { from { transform: scale(1.35); } to { transform: scale(1); } }\n[data-vibe-menu] .vm-lr-count { position: absolute; top: 10px; right: 10px; display: grid; place-items: center; width: 36px; height: 36px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 17px/1 var(--font-display); font-variant-numeric: tabular-nums; pointer-events: none; }\n[data-vibe-menu] .vm-lr-grow { position: absolute; right: 6px; bottom: 6px; display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--card-bg); color: var(--ink); cursor: pointer; }\n[data-vibe-menu] .vm-lr-grow svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n[data-vibe-menu] .vm-lr-cap { margin-top: var(--space-6); padding: 0 var(--space-2); min-width: 0; }\n[data-vibe-menu] .vm-lr-cap b { display: block; font: 700 13px/1.25 var(--font-display); color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n[data-vibe-menu] .vm-lr-font { display: block; margin-top: var(--space-2); font-size: 15px; line-height: 1.2; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n[data-vibe-menu] .vm-lr-big { position: relative; }\n[data-vibe-menu] .vm-lr-big .vm-lr-tile { aspect-ratio: 390 / 600; }\n[data-vibe-menu] .vm-lr-bigbar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-8); margin-bottom: var(--space-10); }\n[data-vibe-menu] .vm-lr-back { flex: none; white-space: nowrap; height: 32px; padding: 0 var(--space-12); border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: transparent; color: var(--ink); font: 700 12px/1 var(--font-display); letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; }\n[data-vibe-menu] .vm-lr-inset { position: absolute; left: 10px; bottom: 10px; width: 64px; aspect-ratio: 3 / 4; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-meter); overflow: hidden; background: var(--card-bg); pointer-events: none; }\n[data-vibe-menu] .vm-lr-inset em { position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 0; font: 700 10px/1.2 var(--font-display); font-style: normal; text-align: center; color: var(--ink); background: var(--card-bg); border-top: var(--stroke-rule) solid var(--line-card); }\n[data-vibe-menu] .vm-lr-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }\n@media (prefers-reduced-motion: reduce) {\n [data-vibe-menu] .vm-lr-ghost .vm-lr-tile::after, [data-vibe-menu] .vm-lr-status::before, [data-vibe-menu] .vm-lr-count-big b, [data-vibe-menu] .vm-lr-count b { animation: none; }\n}\n";
|
|
47
|
+
export declare function LookRestyleSection(props: {
|
|
48
|
+
readonly view: LookRestyleView;
|
|
49
|
+
}): React.ReactElement;
|
|
50
|
+
export declare const LOOK_RESTYLE_COUNTDOWN_MS = 3000;
|
|
51
|
+
export { surveyCountdownDigit as lookRestyleCountdownDigit };
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { SURVEY_COUNTDOWN_MS, surveyCountdownDigit, useCountdownDigit } from "./SurveyStrip.js";
|
|
3
|
+
export const LOOK_RESTYLE_COPY = Object.freeze({
|
|
4
|
+
title: "New looks for your app",
|
|
5
|
+
aside: "Same features, new look",
|
|
6
|
+
idle: "Four fresh looks for this app, painted from its latest picture.",
|
|
7
|
+
now: "Your app now",
|
|
8
|
+
nowSub: "From your latest version",
|
|
9
|
+
loading: "Dreaming up new looks…",
|
|
10
|
+
loadingSub: "Every button and label stays; colour and type get a fresh take.",
|
|
11
|
+
counting: "Tap again to cancel",
|
|
12
|
+
all: "All looks",
|
|
13
|
+
compareNow: "Now",
|
|
14
|
+
sent: (name) => `Restyling in ${name}…`,
|
|
15
|
+
sentSub: "Same features, new look. It lands in your app in a moment.",
|
|
16
|
+
failed: "A fresh set of looks is one tap away.",
|
|
17
|
+
retry: "Paint new looks",
|
|
18
|
+
creditsShort: "Add credits and four fresh looks for this app are one scroll away.",
|
|
19
|
+
noScreenshot: "New looks for your app appear here once its first picture is taken.",
|
|
20
|
+
region: "New looks",
|
|
21
|
+
});
|
|
22
|
+
export function lookTileLabel(look, digit) {
|
|
23
|
+
const face = `${look.mode === "dark" ? "dark" : "light"}, ${look.fontLabel} headings`;
|
|
24
|
+
return digit === undefined ? `${look.name}: ${face}` : `${look.name}: restyling in ${digit}. ${LOOK_RESTYLE_COPY.counting}.`;
|
|
25
|
+
}
|
|
26
|
+
export const LOOK_RESTYLE_CSS = `
|
|
27
|
+
[data-vibe-menu] .vm-lr { display: flex; flex-direction: column; gap: var(--space-14); margin: var(--space-24) 0 var(--space-16); padding-top: var(--space-16); border-top: var(--stroke-rule) solid var(--line-hairline); container: vm-lr / inline-size; }
|
|
28
|
+
[data-vibe-menu] .vm-lr-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-8); padding: 0 var(--space-2); }
|
|
29
|
+
[data-vibe-menu] .vm-lr-title { font: 600 17px/1.3 var(--font-display); color: var(--ink); }
|
|
30
|
+
[data-vibe-menu] .vm-lr-aside { font: 400 12px/1.3 var(--font-display); color: var(--muted); white-space: nowrap; }
|
|
31
|
+
[data-vibe-menu] .vm-lr-sub { margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); }
|
|
32
|
+
[data-vibe-menu] .vm-lr-note { padding: var(--space-10) var(--space-12); border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-moment); background: var(--card-bg); font: 400 13px/1.4 var(--font-display); color: var(--ink); }
|
|
33
|
+
[data-vibe-menu] .vm-lr-retry { margin-top: var(--space-8); height: 32px; padding: 0 var(--space-14); border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 13px/1 var(--font-display); cursor: pointer; }
|
|
34
|
+
[data-vibe-menu] .vm-lr-now { display: flex; align-items: center; gap: var(--space-12); }
|
|
35
|
+
[data-vibe-menu] .vm-lr-now-pic { flex: none; width: 72px; aspect-ratio: 1; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); }
|
|
36
|
+
[data-vibe-menu] .vm-lr-pic { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
|
|
37
|
+
[data-vibe-menu] .vm-lr-now-text b { display: block; font: 700 14px/1.3 var(--font-display); color: var(--ink); }
|
|
38
|
+
[data-vibe-menu] .vm-lr-now-text span { display: block; margin-top: var(--space-2); font: 400 13px/1.4 var(--font-display); color: var(--muted); }
|
|
39
|
+
[data-vibe-menu] .vm-lr-status { display: flex; align-items: center; gap: var(--space-8); font: 600 14px/1.3 var(--font-display); color: var(--ink); }
|
|
40
|
+
[data-vibe-menu] .vm-lr-status::before { content: ""; flex: none; width: 10px; height: 10px; border-radius: var(--radius-full); background: var(--accent); color: var(--on-accent); border: var(--stroke-rule) solid var(--line-card); animation: vm-lr-pulse 1.4s ease-in-out infinite; }
|
|
41
|
+
@keyframes vm-lr-pulse { 50% { transform: scale(0.6); } }
|
|
42
|
+
[data-vibe-menu] .vm-lr-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-12) var(--space-10); }
|
|
43
|
+
@container vm-lr (min-width: 600px) {
|
|
44
|
+
/* Wide (Code mode on a desktop): four across, each tile capped so the row stays a glance, not a wall. */
|
|
45
|
+
[data-vibe-menu] .vm-lr-grid { grid-template-columns: repeat(4, minmax(0, 232px)); justify-content: start; }
|
|
46
|
+
[data-vibe-menu] .vm-lr-now-pic { width: 96px; }
|
|
47
|
+
[data-vibe-menu] .vm-lr-big { max-width: 320px; }
|
|
48
|
+
}
|
|
49
|
+
[data-vibe-menu] .vm-lr-cell { position: relative; min-width: 0; }
|
|
50
|
+
[data-vibe-menu] .vm-lr-tile { position: relative; display: block; width: 100%; min-height: 44px; padding: 0; aspect-ratio: 3 / 4; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-switch); overflow: hidden; background: var(--card-bg); cursor: pointer; touch-action: manipulation; }
|
|
51
|
+
[data-vibe-menu] .vm-lr-tile[data-on="true"] { outline: var(--stroke-focus) solid var(--accent); outline-offset: 2px; }
|
|
52
|
+
[data-vibe-menu] .vm-lr-tile[aria-disabled="true"] { cursor: default; }
|
|
53
|
+
[data-vibe-menu] .vm-lr[data-counting] .vm-lr-cell:not([data-on="true"]) .vm-lr-tile { opacity: 0.55; }
|
|
54
|
+
[data-vibe-menu] .vm-lr[data-sent] .vm-lr-cell:not([data-on="true"]) .vm-lr-tile { opacity: 0.35; }
|
|
55
|
+
[data-vibe-menu] .vm-lr-ghost .vm-lr-tile { cursor: default; }
|
|
56
|
+
[data-vibe-menu] .vm-lr-ghost .vm-lr-pic { filter: grayscale(1); opacity: 0.35; }
|
|
57
|
+
[data-vibe-menu] .vm-lr-ghost .vm-lr-tile::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, transparent 30%, var(--card-bg) 50%, transparent 70%); background-size: 250% 100%; animation: vm-lr-sweep 1.6s linear infinite; }
|
|
58
|
+
@keyframes vm-lr-sweep { from { background-position: 120% 0; } to { background-position: -120% 0; } }
|
|
59
|
+
[data-vibe-menu] .vm-lr-count-big { position: absolute; inset: 0; display: grid; place-items: center; pointer-events: none; background: color-mix(in srgb, var(--card-bg) 30%, transparent); }
|
|
60
|
+
[data-vibe-menu] .vm-lr-count-big span { display: grid; place-items: center; width: 64px; height: 64px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 32px/1 var(--font-display); font-variant-numeric: tabular-nums; }
|
|
61
|
+
[data-vibe-menu] .vm-lr-count-big b, [data-vibe-menu] .vm-lr-count b { font: inherit; animation: vm-lr-tick 240ms ease-out; }
|
|
62
|
+
@keyframes vm-lr-tick { from { transform: scale(1.35); } to { transform: scale(1); } }
|
|
63
|
+
[data-vibe-menu] .vm-lr-count { position: absolute; top: 10px; right: 10px; display: grid; place-items: center; width: 36px; height: 36px; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--accent); color: var(--on-accent); font: 700 17px/1 var(--font-display); font-variant-numeric: tabular-nums; pointer-events: none; }
|
|
64
|
+
[data-vibe-menu] .vm-lr-grow { position: absolute; right: 6px; bottom: 6px; display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: var(--card-bg); color: var(--ink); cursor: pointer; }
|
|
65
|
+
[data-vibe-menu] .vm-lr-grow svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
|
|
66
|
+
[data-vibe-menu] .vm-lr-cap { margin-top: var(--space-6); padding: 0 var(--space-2); min-width: 0; }
|
|
67
|
+
[data-vibe-menu] .vm-lr-cap b { display: block; font: 700 13px/1.25 var(--font-display); color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
68
|
+
[data-vibe-menu] .vm-lr-font { display: block; margin-top: var(--space-2); font-size: 15px; line-height: 1.2; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
69
|
+
[data-vibe-menu] .vm-lr-big { position: relative; }
|
|
70
|
+
[data-vibe-menu] .vm-lr-big .vm-lr-tile { aspect-ratio: 390 / 600; }
|
|
71
|
+
[data-vibe-menu] .vm-lr-bigbar { display: flex; align-items: center; justify-content: space-between; gap: var(--space-8); margin-bottom: var(--space-10); }
|
|
72
|
+
[data-vibe-menu] .vm-lr-back { flex: none; white-space: nowrap; height: 32px; padding: 0 var(--space-12); border-radius: var(--radius-full); border: var(--stroke-rule) solid var(--line-card); background: transparent; color: var(--ink); font: 700 12px/1 var(--font-display); letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; }
|
|
73
|
+
[data-vibe-menu] .vm-lr-inset { position: absolute; left: 10px; bottom: 10px; width: 64px; aspect-ratio: 3 / 4; border: var(--stroke-rule) solid var(--line-card); border-radius: var(--radius-meter); overflow: hidden; background: var(--card-bg); pointer-events: none; }
|
|
74
|
+
[data-vibe-menu] .vm-lr-inset em { position: absolute; left: 0; right: 0; bottom: 0; padding: 2px 0; font: 700 10px/1.2 var(--font-display); font-style: normal; text-align: center; color: var(--ink); background: var(--card-bg); border-top: var(--stroke-rule) solid var(--line-card); }
|
|
75
|
+
[data-vibe-menu] .vm-lr-live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
|
|
76
|
+
@media (prefers-reduced-motion: reduce) {
|
|
77
|
+
[data-vibe-menu] .vm-lr-ghost .vm-lr-tile::after, [data-vibe-menu] .vm-lr-status::before, [data-vibe-menu] .vm-lr-count-big b, [data-vibe-menu] .vm-lr-count b { animation: none; }
|
|
78
|
+
}
|
|
79
|
+
`;
|
|
80
|
+
function scrollParentOf(el) {
|
|
81
|
+
let at = el.parentElement;
|
|
82
|
+
while (at !== null) {
|
|
83
|
+
const overflow = getComputedStyle(at).overflowY;
|
|
84
|
+
if (overflow === "auto" || overflow === "scroll")
|
|
85
|
+
return at;
|
|
86
|
+
at = at.parentElement;
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function useScrollDownIntent(ref, onWanted) {
|
|
91
|
+
const wantedRef = React.useRef(onWanted);
|
|
92
|
+
wantedRef.current = onWanted;
|
|
93
|
+
const armed = onWanted !== undefined;
|
|
94
|
+
React.useEffect(() => {
|
|
95
|
+
const el = ref.current;
|
|
96
|
+
if (armed === false || el === null)
|
|
97
|
+
return;
|
|
98
|
+
const parent = scrollParentOf(el);
|
|
99
|
+
const host = parent ?? document.documentElement;
|
|
100
|
+
function top() {
|
|
101
|
+
return parent === undefined ? window.scrollY : parent.scrollTop;
|
|
102
|
+
}
|
|
103
|
+
const startTop = top();
|
|
104
|
+
let touchY;
|
|
105
|
+
let fired = false;
|
|
106
|
+
function fire() {
|
|
107
|
+
if (fired)
|
|
108
|
+
return;
|
|
109
|
+
fired = true;
|
|
110
|
+
wantedRef.current?.();
|
|
111
|
+
}
|
|
112
|
+
function onWheel(e) {
|
|
113
|
+
if (e.deltaY > 0)
|
|
114
|
+
fire();
|
|
115
|
+
}
|
|
116
|
+
function onScroll() {
|
|
117
|
+
if (top() > startTop)
|
|
118
|
+
fire();
|
|
119
|
+
}
|
|
120
|
+
function onTouchStart(e) {
|
|
121
|
+
touchY = e.touches[0]?.clientY;
|
|
122
|
+
}
|
|
123
|
+
function onTouchMove(e) {
|
|
124
|
+
const y = e.touches[0]?.clientY;
|
|
125
|
+
if (touchY !== undefined && y !== undefined && y < touchY - 8)
|
|
126
|
+
fire();
|
|
127
|
+
}
|
|
128
|
+
const opts = { passive: true };
|
|
129
|
+
host.addEventListener("wheel", onWheel, opts);
|
|
130
|
+
host.addEventListener("touchstart", onTouchStart, opts);
|
|
131
|
+
host.addEventListener("touchmove", onTouchMove, opts);
|
|
132
|
+
if (parent === undefined)
|
|
133
|
+
window.addEventListener("scroll", onScroll, opts);
|
|
134
|
+
else
|
|
135
|
+
parent.addEventListener("scroll", onScroll, opts);
|
|
136
|
+
return () => {
|
|
137
|
+
host.removeEventListener("wheel", onWheel);
|
|
138
|
+
host.removeEventListener("touchstart", onTouchStart);
|
|
139
|
+
host.removeEventListener("touchmove", onTouchMove);
|
|
140
|
+
if (parent === undefined)
|
|
141
|
+
window.removeEventListener("scroll", onScroll);
|
|
142
|
+
else
|
|
143
|
+
parent.removeEventListener("scroll", onScroll);
|
|
144
|
+
};
|
|
145
|
+
}, [ref, armed]);
|
|
146
|
+
}
|
|
147
|
+
function GrowGlyph() {
|
|
148
|
+
return (React.createElement("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false" },
|
|
149
|
+
React.createElement("polyline", { points: "15 3 21 3 21 9" }),
|
|
150
|
+
React.createElement("polyline", { points: "9 21 3 21 3 15" }),
|
|
151
|
+
React.createElement("line", { x1: "21", y1: "3", x2: "14", y2: "10" }),
|
|
152
|
+
React.createElement("line", { x1: "3", y1: "21", x2: "10", y2: "14" })));
|
|
153
|
+
}
|
|
154
|
+
function NowRow(props) {
|
|
155
|
+
return (React.createElement("div", { className: "vm-lr-now" },
|
|
156
|
+
React.createElement("div", { className: "vm-lr-now-pic" }, props.src === undefined ? null : React.createElement("img", { className: "vm-lr-pic", src: props.src, alt: "Your app as it looks now" })),
|
|
157
|
+
React.createElement("div", { className: "vm-lr-now-text" },
|
|
158
|
+
React.createElement("b", null, LOOK_RESTYLE_COPY.now),
|
|
159
|
+
React.createElement("span", null, LOOK_RESTYLE_COPY.nowSub))));
|
|
160
|
+
}
|
|
161
|
+
function Caption(props) {
|
|
162
|
+
return (React.createElement("div", { className: "vm-lr-cap" },
|
|
163
|
+
React.createElement("b", null, props.look.name),
|
|
164
|
+
React.createElement("span", { className: "vm-lr-font", style: { fontFamily: props.look.fontFamily } }, props.look.fontLabel)));
|
|
165
|
+
}
|
|
166
|
+
function LookTile(props) {
|
|
167
|
+
const { view, index, digit } = props;
|
|
168
|
+
const look = view.looks[index];
|
|
169
|
+
if (look === undefined)
|
|
170
|
+
return null;
|
|
171
|
+
const counting = view.choosing?.index === index;
|
|
172
|
+
const picked = view.picked === index;
|
|
173
|
+
const on = picked || counting;
|
|
174
|
+
const locked = view.phase === "sent";
|
|
175
|
+
function tap() {
|
|
176
|
+
if (locked)
|
|
177
|
+
return;
|
|
178
|
+
if (counting)
|
|
179
|
+
view.onCancel?.();
|
|
180
|
+
else
|
|
181
|
+
view.onChoose?.(index);
|
|
182
|
+
}
|
|
183
|
+
return (React.createElement("div", { className: "vm-lr-cell", "data-on": on },
|
|
184
|
+
React.createElement("div", { style: { position: "relative" } },
|
|
185
|
+
React.createElement("button", { type: "button", role: "radio", "aria-checked": on, "aria-label": lookTileLabel(look, counting ? digit : undefined), "aria-disabled": locked, className: "vm-lr-tile", "data-on": on, "data-testid": "look-restyle-tile", onClick: tap },
|
|
186
|
+
look.src === undefined ? null : React.createElement("img", { className: "vm-lr-pic", src: look.src, alt: "", draggable: false }),
|
|
187
|
+
counting && digit !== undefined ? (React.createElement("span", { className: "vm-lr-count-big", "data-testid": "look-restyle-countdown", "aria-hidden": "true" },
|
|
188
|
+
React.createElement("span", null,
|
|
189
|
+
React.createElement("b", { key: digit }, digit)))) : null),
|
|
190
|
+
locked ? null : (React.createElement("button", { type: "button", className: "vm-lr-grow", "aria-label": `See ${look.name} big`, onClick: () => view.onBig?.(index) },
|
|
191
|
+
React.createElement(GrowGlyph, null)))),
|
|
192
|
+
React.createElement(Caption, { look: look })));
|
|
193
|
+
}
|
|
194
|
+
function GhostTile(props) {
|
|
195
|
+
return (React.createElement("div", { className: "vm-lr-cell vm-lr-ghost" },
|
|
196
|
+
React.createElement("div", { className: "vm-lr-tile", "aria-hidden": "true" }, props.src === undefined ? null : React.createElement("img", { className: "vm-lr-pic", src: props.src, alt: "", draggable: false })),
|
|
197
|
+
React.createElement("div", { className: "vm-lr-cap" }, "\u00A0")));
|
|
198
|
+
}
|
|
199
|
+
function BigView(props) {
|
|
200
|
+
const { view, index, digit } = props;
|
|
201
|
+
const look = view.looks[index];
|
|
202
|
+
if (look === undefined)
|
|
203
|
+
return null;
|
|
204
|
+
const counting = view.choosing?.index === index;
|
|
205
|
+
return (React.createElement("div", { className: "vm-lr-big" },
|
|
206
|
+
React.createElement("div", { className: "vm-lr-bigbar" },
|
|
207
|
+
React.createElement(Caption, { look: look }),
|
|
208
|
+
React.createElement("button", { type: "button", className: "vm-lr-back", onClick: () => view.onBig?.(undefined) }, LOOK_RESTYLE_COPY.all)),
|
|
209
|
+
React.createElement("button", { type: "button", role: "radio", "aria-checked": counting, "aria-label": lookTileLabel(look, counting ? digit : undefined), className: "vm-lr-tile", "data-on": counting, "data-testid": "look-restyle-big", onClick: () => (counting ? view.onCancel?.() : view.onChoose?.(index)) },
|
|
210
|
+
look.src === undefined ? null : React.createElement("img", { className: "vm-lr-pic", src: look.src, alt: "", draggable: false }),
|
|
211
|
+
view.now === undefined ? null : (React.createElement("span", { className: "vm-lr-inset" },
|
|
212
|
+
React.createElement("img", { className: "vm-lr-pic", src: view.now, alt: "" }),
|
|
213
|
+
React.createElement("em", null, LOOK_RESTYLE_COPY.compareNow))),
|
|
214
|
+
counting && digit !== undefined ? (React.createElement("span", { className: "vm-lr-count", "data-testid": "look-restyle-countdown", "aria-hidden": "true" },
|
|
215
|
+
React.createElement("b", { key: digit }, digit))) : null)));
|
|
216
|
+
}
|
|
217
|
+
function Head(props) {
|
|
218
|
+
const { view } = props;
|
|
219
|
+
if (view.phase === "sent" && view.picked !== undefined) {
|
|
220
|
+
return (React.createElement("div", null,
|
|
221
|
+
React.createElement("div", { className: "vm-lr-title" }, LOOK_RESTYLE_COPY.sent(view.looks[view.picked]?.name ?? "")),
|
|
222
|
+
React.createElement("div", { className: "vm-lr-sub" }, LOOK_RESTYLE_COPY.sentSub)));
|
|
223
|
+
}
|
|
224
|
+
if (view.phase === "loading") {
|
|
225
|
+
return (React.createElement("div", null,
|
|
226
|
+
React.createElement("div", { className: "vm-lr-status", role: "status" }, LOOK_RESTYLE_COPY.loading),
|
|
227
|
+
React.createElement("div", { className: "vm-lr-sub" }, LOOK_RESTYLE_COPY.loadingSub)));
|
|
228
|
+
}
|
|
229
|
+
return (React.createElement("div", null,
|
|
230
|
+
React.createElement("div", { className: "vm-lr-head" },
|
|
231
|
+
React.createElement("span", { className: "vm-lr-title" }, LOOK_RESTYLE_COPY.title),
|
|
232
|
+
React.createElement("span", { className: "vm-lr-aside" }, view.choosing === undefined ? LOOK_RESTYLE_COPY.aside : LOOK_RESTYLE_COPY.counting)),
|
|
233
|
+
view.phase === "idle" ? React.createElement("div", { className: "vm-lr-sub" }, LOOK_RESTYLE_COPY.idle) : null));
|
|
234
|
+
}
|
|
235
|
+
function Body(props) {
|
|
236
|
+
const { view, digit } = props;
|
|
237
|
+
switch (view.phase) {
|
|
238
|
+
case "no-screenshot":
|
|
239
|
+
return React.createElement("div", { className: "vm-lr-note" }, LOOK_RESTYLE_COPY.noScreenshot);
|
|
240
|
+
case "credits-short":
|
|
241
|
+
return (React.createElement(React.Fragment, null,
|
|
242
|
+
React.createElement(NowRow, { src: view.now }),
|
|
243
|
+
React.createElement("div", { className: "vm-lr-note" }, LOOK_RESTYLE_COPY.creditsShort)));
|
|
244
|
+
case "failed":
|
|
245
|
+
return (React.createElement(React.Fragment, null,
|
|
246
|
+
React.createElement(NowRow, { src: view.now }),
|
|
247
|
+
React.createElement("div", { className: "vm-lr-note" },
|
|
248
|
+
LOOK_RESTYLE_COPY.failed,
|
|
249
|
+
React.createElement("div", null,
|
|
250
|
+
React.createElement("button", { type: "button", className: "vm-lr-retry", onClick: () => view.onRetry?.() }, LOOK_RESTYLE_COPY.retry)))));
|
|
251
|
+
case "idle":
|
|
252
|
+
return React.createElement(NowRow, { src: view.now });
|
|
253
|
+
case "loading":
|
|
254
|
+
return (React.createElement(React.Fragment, null,
|
|
255
|
+
React.createElement(NowRow, { src: view.now }),
|
|
256
|
+
React.createElement("div", { className: "vm-lr-grid", "aria-hidden": "true" }, [0, 1, 2, 3].map((i) => (React.createElement(GhostTile, { key: i, src: view.now }))))));
|
|
257
|
+
case "ready":
|
|
258
|
+
case "sent":
|
|
259
|
+
if (view.big !== undefined && view.phase === "ready")
|
|
260
|
+
return React.createElement(BigView, { view: view, index: view.big, digit: digit });
|
|
261
|
+
return (React.createElement(React.Fragment, null,
|
|
262
|
+
React.createElement(NowRow, { src: view.now }),
|
|
263
|
+
React.createElement("div", { className: "vm-lr-grid", role: "radiogroup", "aria-label": LOOK_RESTYLE_COPY.title }, view.looks.map((look, i) => (React.createElement(LookTile, { key: `${i}-${look.name}`, view: view, index: i, digit: digit }))))));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function FontLinks(props) {
|
|
267
|
+
const urls = [...new Set(props.looks.flatMap((l) => (l.fontUrl === undefined ? [] : [l.fontUrl])))];
|
|
268
|
+
return (React.createElement(React.Fragment, null, urls.map((href) => (React.createElement("link", { key: href, rel: "stylesheet", href: href })))));
|
|
269
|
+
}
|
|
270
|
+
export function LookRestyleSection(props) {
|
|
271
|
+
const { view } = props;
|
|
272
|
+
const ref = React.useRef(null);
|
|
273
|
+
useScrollDownIntent(ref, view.phase === "idle" ? view.onWanted : undefined);
|
|
274
|
+
const onOpenRef = React.useRef(view.onOpen);
|
|
275
|
+
onOpenRef.current = view.onOpen;
|
|
276
|
+
React.useEffect(() => {
|
|
277
|
+
onOpenRef.current?.();
|
|
278
|
+
}, []);
|
|
279
|
+
const digit = useCountdownDigit(view.choosing?.endsAtMs);
|
|
280
|
+
const name = view.choosing === undefined ? undefined : view.looks[view.choosing.index]?.name;
|
|
281
|
+
return (React.createElement("section", { ref: ref, className: "vm-lr", "aria-label": LOOK_RESTYLE_COPY.region, "data-testid": "look-restyle", "data-phase": view.phase, "data-counting": view.choosing === undefined ? undefined : "", "data-sent": view.phase === "sent" ? "" : undefined },
|
|
282
|
+
React.createElement("style", null, LOOK_RESTYLE_CSS),
|
|
283
|
+
React.createElement(FontLinks, { looks: view.looks }),
|
|
284
|
+
React.createElement(Head, { view: view }),
|
|
285
|
+
React.createElement(Body, { view: view, digit: digit }),
|
|
286
|
+
React.createElement("span", { className: "vm-lr-live", role: "status", "aria-live": "polite" }, name === undefined || digit === undefined ? "" : `${name}: restyling in ${digit}.`)));
|
|
287
|
+
}
|
|
288
|
+
export const LOOK_RESTYLE_COUNTDOWN_MS = SURVEY_COUNTDOWN_MS;
|
|
289
|
+
export { surveyCountdownDigit as lookRestyleCountdownDigit };
|
|
290
|
+
//# sourceMappingURL=LookRestyleSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookRestyleSection.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/LookRestyleSection.tsx"],"names":[],"mappings":"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"}
|