@vibes.diy/base 14.3.105 → 14.3.107
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/HandlePickerMenu.d.ts +1 -2
- package/components/HandlePickerMenu.js +1 -2
- package/components/HandlePickerMenu.js.map +1 -1
- package/components/OnboardingOverlay.d.ts +2 -13
- package/components/OnboardingOverlay.js +51 -33
- package/components/OnboardingOverlay.js.map +1 -1
- package/components/ViewerTagView.d.ts +1 -3
- package/components/ViewerTagView.js +1 -17
- package/components/ViewerTagView.js.map +1 -1
- package/components/index.d.ts +0 -1
- package/components/index.js +0 -1
- package/components/index.js.map +1 -1
- package/components/vibe-menu/VibeMenu.js +23 -7
- package/components/vibe-menu/VibeMenu.js.map +1 -1
- package/components/vibe-menu/cards/AccountCard.d.ts +5 -9
- package/components/vibe-menu/cards/AccountCard.js +69 -61
- 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 +85 -22
- package/components/vibe-menu/cards/CodeCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +1 -0
- package/components/vibe-menu/cards/CodeModeWorkspace.js +2 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -1
- package/components/vibe-menu/cards/CodeTabRow.d.ts +29 -3
- package/components/vibe-menu/cards/CodeTabRow.js +79 -12
- package/components/vibe-menu/cards/CodeTabRow.js.map +1 -1
- package/components/vibe-menu/cards/HomeCard.d.ts +8 -0
- package/components/vibe-menu/cards/HomeCard.js +67 -5
- package/components/vibe-menu/cards/HomeCard.js.map +1 -1
- package/components/vibe-menu/cards/ShareCard.d.ts +3 -0
- package/components/vibe-menu/cards/ShareCard.js +109 -16
- package/components/vibe-menu/cards/ShareCard.js.map +1 -1
- package/components/vibe-menu/fixtures.js +0 -2
- package/components/vibe-menu/fixtures.js.map +1 -1
- package/components/vibe-menu/index.d.ts +4 -0
- package/components/vibe-menu/index.js +4 -0
- package/components/vibe-menu/index.js.map +1 -1
- package/components/vibe-menu/menu-state.d.ts +1 -1
- package/components/vibe-menu/moments.d.ts +9 -0
- package/components/vibe-menu/moments.js +6 -0
- package/components/vibe-menu/moments.js.map +1 -1
- package/components/vibe-menu/open-resolver.d.ts +0 -2
- package/components/vibe-menu/open-resolver.js +0 -2
- package/components/vibe-menu/open-resolver.js.map +1 -1
- package/components/vibe-menu/parts/AccessToggle.js +2 -1
- package/components/vibe-menu/parts/AccessToggle.js.map +1 -1
- package/components/vibe-menu/parts/CardTabRow.d.ts +27 -0
- package/components/vibe-menu/{sketches → parts}/CardTabRow.js +2 -7
- package/components/vibe-menu/parts/CardTabRow.js.map +1 -0
- package/components/vibe-menu/parts/Composer.js +2 -1
- package/components/vibe-menu/parts/Composer.js.map +1 -1
- package/components/vibe-menu/parts/MomentLine.js +10 -5
- package/components/vibe-menu/parts/MomentLine.js.map +1 -1
- package/components/vibe-menu/parts/ScrollTabRow.d.ts +29 -0
- package/components/vibe-menu/parts/ScrollTabRow.js +172 -0
- package/components/vibe-menu/parts/ScrollTabRow.js.map +1 -0
- package/components/vibe-menu/parts/SurveyStrip.d.ts +13 -3
- package/components/vibe-menu/parts/SurveyStrip.js +97 -54
- package/components/vibe-menu/parts/SurveyStrip.js.map +1 -1
- package/components/vibe-menu/parts/ThinkingLine.d.ts +24 -0
- package/components/vibe-menu/parts/ThinkingLine.js +77 -0
- package/components/vibe-menu/parts/ThinkingLine.js.map +1 -0
- package/components/vibe-menu/parts/brief-faces-art.d.ts +12 -0
- package/components/vibe-menu/parts/brief-faces-art.js +540 -0
- package/components/vibe-menu/parts/brief-faces-art.js.map +1 -0
- package/components/vibe-menu/sketches/CodeTierAudition.d.ts +42 -0
- package/components/vibe-menu/sketches/CodeTierAudition.js +141 -0
- package/components/vibe-menu/sketches/CodeTierAudition.js.map +1 -0
- package/components/vibe-menu/slices.d.ts +5 -2
- package/components/vibe-menu/slices.js.map +1 -1
- package/components/vibe-menu/vibe-menu.styles.d.ts +1 -1
- package/components/vibe-menu/vibe-menu.styles.js +0 -25
- package/components/vibe-menu/vibe-menu.styles.js.map +1 -1
- package/package.json +5 -5
- package/components/HandleChooser.d.ts +0 -44
- package/components/HandleChooser.js +0 -112
- package/components/HandleChooser.js.map +0 -1
- package/components/vibe-menu/sketches/AccountTabAudition.d.ts +0 -11
- package/components/vibe-menu/sketches/AccountTabAudition.js +0 -110
- package/components/vibe-menu/sketches/AccountTabAudition.js.map +0 -1
- package/components/vibe-menu/sketches/CardTabRow.d.ts +0 -27
- package/components/vibe-menu/sketches/CardTabRow.js.map +0 -1
- package/components/vibe-menu/sketches/HomeTabAudition.d.ts +0 -26
- package/components/vibe-menu/sketches/HomeTabAudition.js +0 -87
- package/components/vibe-menu/sketches/HomeTabAudition.js.map +0 -1
- package/components/vibe-menu/sketches/ShareTabAudition.d.ts +0 -14
- package/components/vibe-menu/sketches/ShareTabAudition.js +0 -155
- package/components/vibe-menu/sketches/ShareTabAudition.js.map +0 -1
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
2
|
-
import { toRFC2822_32ByteLength } from "@vibes.diy/vibe-types";
|
|
3
|
-
import { SAFE_AREA_TOP } from "../theme/safe-area.js";
|
|
4
|
-
export function HandleChooserPanel({ draftInitial, inputPlaceholder, title, subtitle, clerkSuggestions, wordSlugCandidates, onRefreshCandidates, refreshing, busy, confirmLabel, skipLabel, errorMessage, onConfirm, onSkip, }) {
|
|
5
|
-
const [draft, setDraft] = useState(draftInitial ?? "");
|
|
6
|
-
const [confirming, setConfirming] = useState(false);
|
|
7
|
-
const sanitized = toRFC2822_32ByteLength(draft);
|
|
8
|
-
const valid = sanitized.length > 0;
|
|
9
|
-
const disabled = busy === true || confirming;
|
|
10
|
-
const confirm = () => {
|
|
11
|
-
if (!valid || disabled)
|
|
12
|
-
return;
|
|
13
|
-
const pending = onConfirm(sanitized);
|
|
14
|
-
if (pending === undefined)
|
|
15
|
-
return;
|
|
16
|
-
setConfirming(true);
|
|
17
|
-
void pending.finally(() => setConfirming(false));
|
|
18
|
-
};
|
|
19
|
-
return (React.createElement("div", null,
|
|
20
|
-
React.createElement("div", { className: "text-light-primary dark:text-dark-primary", style: { fontSize: 15, fontWeight: 700, marginBottom: 2 } }, title ?? "Pick your handle"),
|
|
21
|
-
React.createElement("div", { className: "text-light-secondary dark:text-dark-secondary", style: { fontSize: 12, marginBottom: 10 } }, subtitle ??
|
|
22
|
-
"This is the publisher name your apps are credited to — you are picking the jchris in jchris/todo-live, not the app's name. Later you can add more handles and switch between them."),
|
|
23
|
-
React.createElement("input", { type: "text", value: draft, disabled: disabled, placeholder: inputPlaceholder, "aria-label": "Your handle", onChange: (e) => setDraft(e.target.value), onKeyDown: (e) => {
|
|
24
|
-
if (e.key === "Enter") {
|
|
25
|
-
e.preventDefault();
|
|
26
|
-
confirm();
|
|
27
|
-
}
|
|
28
|
-
}, className: "ph-no-capture border border-light-decorative-01 bg-light-background-00 text-sm text-light-primary dark:border-dark-decorative-01 dark:bg-dark-background-00 dark:text-dark-primary", style: {
|
|
29
|
-
width: "100%",
|
|
30
|
-
boxSizing: "border-box",
|
|
31
|
-
padding: "8px 10px",
|
|
32
|
-
borderRadius: 8,
|
|
33
|
-
outline: "none",
|
|
34
|
-
} }),
|
|
35
|
-
React.createElement("div", { className: errorMessage === undefined ? "ph-no-capture text-light-secondary dark:text-dark-secondary" : "ph-no-capture", "aria-live": "polite", style: { fontSize: 11, padding: "4px 2px 8px", minHeight: 15, ...(errorMessage === undefined ? {} : { color: "#dc2626" }) } }, errorMessage ?? (valid ? `vibes.diy/${sanitized}/your-app` : "letters, numbers, and dashes")),
|
|
36
|
-
clerkSuggestions.length > 0 && (React.createElement(SuggestionRow, { label: "Suggested for you", slugs: clerkSuggestions, busy: disabled, onPick: setDraft })),
|
|
37
|
-
React.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", margin: "6px 0 4px" } },
|
|
38
|
-
React.createElement("span", { className: "text-light-secondary dark:text-dark-secondary", style: { fontSize: 11 } }, "Or try a random one"),
|
|
39
|
-
React.createElement("button", { type: "button", onClick: onRefreshCandidates, disabled: disabled || refreshing, className: "border border-light-decorative-01 bg-transparent text-light-secondary dark:border-dark-decorative-01 dark:text-dark-secondary", style: {
|
|
40
|
-
borderRadius: 8,
|
|
41
|
-
padding: "3px 8px",
|
|
42
|
-
fontSize: 11,
|
|
43
|
-
cursor: disabled || refreshing ? "default" : "pointer",
|
|
44
|
-
opacity: disabled || refreshing ? 0.5 : 1,
|
|
45
|
-
} }, refreshing ? "…" : "↻ Refresh")),
|
|
46
|
-
React.createElement(SuggestionRow, { slugs: wordSlugCandidates, busy: disabled, onPick: setDraft }),
|
|
47
|
-
React.createElement(PanelButtons, { primary: confirmLabel ?? "Use this handle", skip: skipLabel ?? "Skip", disabled: !valid || disabled, skipDisabled: disabled, onPrimary: confirm, onSkip: onSkip })));
|
|
48
|
-
}
|
|
49
|
-
export function SuggestionRow({ label, slugs, busy, onPick, }) {
|
|
50
|
-
if (slugs.length === 0)
|
|
51
|
-
return React.createElement(React.Fragment, null);
|
|
52
|
-
return (React.createElement("div", { style: { marginBottom: 4 } },
|
|
53
|
-
label && (React.createElement("div", { className: "text-light-secondary dark:text-dark-secondary", style: { fontSize: 11, margin: "2px 0 4px" } }, label)),
|
|
54
|
-
React.createElement("div", { style: { display: "flex", flexWrap: "wrap", gap: 6 } }, slugs.map((slug) => (React.createElement("button", { key: slug, type: "button", disabled: busy, onClick: () => onPick(slug), className: "ph-no-capture border border-light-decorative-01 bg-light-background-01 text-light-primary dark:border-dark-decorative-01 dark:bg-dark-background-01 dark:text-dark-primary", style: {
|
|
55
|
-
borderRadius: 999,
|
|
56
|
-
padding: "4px 10px",
|
|
57
|
-
fontSize: 12,
|
|
58
|
-
cursor: busy ? "default" : "pointer",
|
|
59
|
-
opacity: busy ? 0.5 : 1,
|
|
60
|
-
} },
|
|
61
|
-
"@",
|
|
62
|
-
slug))))));
|
|
63
|
-
}
|
|
64
|
-
export function PanelButtons({ primary, skip, disabled, skipDisabled, onPrimary, onSkip, }) {
|
|
65
|
-
return (React.createElement("div", { style: { display: "flex", gap: 8, marginTop: 12 } },
|
|
66
|
-
React.createElement("button", { type: "button", disabled: disabled, onClick: onPrimary, className: "text-sm", style: {
|
|
67
|
-
flex: 1,
|
|
68
|
-
padding: "8px 10px",
|
|
69
|
-
borderRadius: 8,
|
|
70
|
-
border: "none",
|
|
71
|
-
cursor: disabled ? "default" : "pointer",
|
|
72
|
-
opacity: disabled ? 0.5 : 1,
|
|
73
|
-
background: "#6366f1",
|
|
74
|
-
color: "#fff",
|
|
75
|
-
fontWeight: 600,
|
|
76
|
-
} }, primary),
|
|
77
|
-
React.createElement("button", { type: "button", disabled: skipDisabled ?? disabled, onClick: onSkip, className: "border border-light-decorative-01 bg-transparent text-sm text-light-primary dark:border-dark-decorative-01 dark:text-dark-primary", style: {
|
|
78
|
-
padding: "8px 12px",
|
|
79
|
-
borderRadius: 8,
|
|
80
|
-
cursor: (skipDisabled ?? disabled) ? "default" : "pointer",
|
|
81
|
-
opacity: (skipDisabled ?? disabled) ? 0.5 : 1,
|
|
82
|
-
} }, skip ?? "Skip")));
|
|
83
|
-
}
|
|
84
|
-
export function OverlayCardShell({ ariaLabel, headerLeft, dismissLabel, onDismiss, children, }) {
|
|
85
|
-
return (React.createElement("div", { role: "dialog", "aria-label": ariaLabel, "aria-modal": "false", style: {
|
|
86
|
-
position: "fixed",
|
|
87
|
-
top: `calc(${SAFE_AREA_TOP} + 16px)`,
|
|
88
|
-
left: 0,
|
|
89
|
-
right: 0,
|
|
90
|
-
display: "flex",
|
|
91
|
-
justifyContent: "center",
|
|
92
|
-
pointerEvents: "none",
|
|
93
|
-
zIndex: 60,
|
|
94
|
-
} },
|
|
95
|
-
React.createElement("div", { className: "border border-light-decorative-01 bg-light-background-00 text-light-primary dark:border-dark-decorative-01 dark:bg-dark-background-00 dark:text-dark-primary", style: {
|
|
96
|
-
pointerEvents: "auto",
|
|
97
|
-
width: 360,
|
|
98
|
-
maxWidth: "calc(100vw - 24px)",
|
|
99
|
-
borderRadius: 14,
|
|
100
|
-
boxShadow: "0 12px 40px rgba(0,0,0,0.28)",
|
|
101
|
-
padding: 16,
|
|
102
|
-
} },
|
|
103
|
-
React.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: 8 } },
|
|
104
|
-
React.createElement("div", { className: "text-light-secondary dark:text-dark-secondary", style: { fontSize: 11 } }, headerLeft),
|
|
105
|
-
React.createElement("button", { type: "button", "aria-label": dismissLabel, onClick: onDismiss, className: "text-light-secondary dark:text-dark-secondary", style: { border: "none", background: "transparent", cursor: "pointer", fontSize: 16, lineHeight: 1, padding: 2 } }, "\u2715")),
|
|
106
|
-
children)));
|
|
107
|
-
}
|
|
108
|
-
export function HandleChooserCard({ onDismiss, headerLabel, ...panel }) {
|
|
109
|
-
return (React.createElement(OverlayCardShell, { ariaLabel: "Choose your handle", headerLeft: headerLabel ?? "Choose a handle to save and publish apps", dismissLabel: "Dismiss handle chooser", onDismiss: onDismiss },
|
|
110
|
-
React.createElement(HandleChooserPanel, { ...panel })));
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=HandleChooser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HandleChooser.js","sourceRoot":"","sources":["../../jsr/components/HandleChooser.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { AccountSlice, ViewerSlice } from "../slices.js";
|
|
3
|
-
import { type CardTabItem } from "./CardTabRow.js";
|
|
4
|
-
export declare const ACCOUNT_TAB_CSS = "\n[data-vibe-menu] .vm-xtab .vm-who .vm-textbtn {\n width: auto; height: auto; margin: 0 0 0 auto; padding: var(--space-4) 0;\n}\n";
|
|
5
|
-
export interface AccountTabAuditionProps {
|
|
6
|
-
readonly viewer: ViewerSlice;
|
|
7
|
-
readonly account: AccountSlice;
|
|
8
|
-
readonly initialActive?: string | null;
|
|
9
|
-
}
|
|
10
|
-
export declare function accountTabItems(account: AccountSlice): readonly CardTabItem[];
|
|
11
|
-
export declare function AccountTabAudition(props: AccountTabAuditionProps): React.ReactElement;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { ACCOUNT_CARD_CSS, ACCOUNT_COPY, ChooseHandleDrill, HandlesDrill } from "../cards/AccountCard.js";
|
|
3
|
-
import { JOIN_OR_SIGN_IN } from "../copy.js";
|
|
4
|
-
import { ActionPill } from "../parts/ActionPill.js";
|
|
5
|
-
import { CARD_TAB_ROW_CSS, CardTabRow, MainAction, Stretch, toggleDrill } from "./CardTabRow.js";
|
|
6
|
-
export const ACCOUNT_TAB_CSS = `
|
|
7
|
-
[data-vibe-menu] .vm-xtab .vm-who .vm-textbtn {
|
|
8
|
-
width: auto; height: auto; margin: 0 0 0 auto; padding: var(--space-4) 0;
|
|
9
|
-
}
|
|
10
|
-
`;
|
|
11
|
-
function initialOf(name) {
|
|
12
|
-
return name.slice(0, 1).toUpperCase();
|
|
13
|
-
}
|
|
14
|
-
export function accountTabItems(account) {
|
|
15
|
-
const items = [];
|
|
16
|
-
if (account.needsHandle === false && account.activeHandle !== null) {
|
|
17
|
-
items.push({ key: "handles", label: ACCOUNT_COPY.handles, glyph: "at-sign", kind: "drill" });
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
const action = account.creditsAction;
|
|
21
|
-
items.push({
|
|
22
|
-
key: "credits",
|
|
23
|
-
label: "Credits",
|
|
24
|
-
glyph: "plus",
|
|
25
|
-
kind: "link",
|
|
26
|
-
href: action.href,
|
|
27
|
-
onClick: () => action.onClick?.(),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
items.push({ key: "memberships", label: ACCOUNT_COPY.memberships, glyph: "star", kind: "link", href: account.membershipsHref });
|
|
31
|
-
items.push({ key: "settings", label: ACCOUNT_COPY.settings, glyph: "sliders", kind: "link", href: account.settingsHref });
|
|
32
|
-
return items;
|
|
33
|
-
}
|
|
34
|
-
function Credits(props) {
|
|
35
|
-
const { remaining, included } = props.account.credits;
|
|
36
|
-
if (remaining === null)
|
|
37
|
-
return null;
|
|
38
|
-
const caption = included === null
|
|
39
|
-
? [ACCOUNT_COPY.creditsLeft, ACCOUNT_COPY.thisMonth]
|
|
40
|
-
: [`/ ${included.toLocaleString("en-US")}`, ACCOUNT_COPY.creditsLeft, ACCOUNT_COPY.thisMonth];
|
|
41
|
-
const pct = included === null || included <= 0 ? null : Math.max(0, Math.min(100, (remaining / included) * 100));
|
|
42
|
-
return (React.createElement(React.Fragment, null,
|
|
43
|
-
React.createElement("div", { className: "vm-hero" },
|
|
44
|
-
React.createElement("span", { className: "vm-big" }, remaining.toLocaleString("en-US")),
|
|
45
|
-
React.createElement("span", { className: "vm-caption" }, caption.map((line, i) => (React.createElement(React.Fragment, { key: line },
|
|
46
|
-
i > 0 ? React.createElement("br", null) : null,
|
|
47
|
-
line))))),
|
|
48
|
-
pct === null || included === null ? null : (React.createElement("div", { className: "vm-meter", role: "img", "aria-label": `${remaining.toLocaleString("en-US")} of ${included.toLocaleString("en-US")} credits left` },
|
|
49
|
-
React.createElement("span", { style: { width: `${pct}%` } })))));
|
|
50
|
-
}
|
|
51
|
-
export function AccountTabAudition(props) {
|
|
52
|
-
const { viewer, account } = props;
|
|
53
|
-
const [active, setActive] = React.useState(props.initialActive ?? null);
|
|
54
|
-
const pending = viewer.identityPending === true;
|
|
55
|
-
const signedIn = viewer.role !== "signedOut";
|
|
56
|
-
const css = React.createElement("style", null, ACCOUNT_CARD_CSS + CARD_TAB_ROW_CSS + ACCOUNT_TAB_CSS);
|
|
57
|
-
const resolving = pending || (signedIn && account.needsHandle === false && account.activeHandle === null);
|
|
58
|
-
if (resolving) {
|
|
59
|
-
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
60
|
-
css,
|
|
61
|
-
React.createElement("div", { className: "vm-who", "aria-busy": "true" },
|
|
62
|
-
React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }),
|
|
63
|
-
React.createElement("span", { className: "vm-no-handle" }, ACCOUNT_COPY.loading))));
|
|
64
|
-
}
|
|
65
|
-
if (signedIn === false) {
|
|
66
|
-
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
67
|
-
css,
|
|
68
|
-
account.savePrompt !== null && account.savePrompt !== "" ? React.createElement("p", { className: "vm-kicker" }, account.savePrompt) : null,
|
|
69
|
-
React.createElement(ActionPill, { label: JOIN_OR_SIGN_IN, onClick: account.onSignIn }),
|
|
70
|
-
React.createElement("p", { className: "vm-sub" }, ACCOUNT_COPY.signedOutSub)));
|
|
71
|
-
}
|
|
72
|
-
const nav = {
|
|
73
|
-
view: active === null ? null : { drill: active === "choose" ? "choose" : "handles" },
|
|
74
|
-
banner: null,
|
|
75
|
-
onDrill: (view) => setActive(view.drill),
|
|
76
|
-
onLeaveDrill: () => setActive(null),
|
|
77
|
-
};
|
|
78
|
-
const row = (React.createElement(CardTabRow, { label: ACCOUNT_COPY.settings, items: accountTabItems(account), active: active, onDrill: (key) => setActive((open) => toggleDrill(open, key)) }));
|
|
79
|
-
if (active === "handles" || active === "choose") {
|
|
80
|
-
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
81
|
-
css,
|
|
82
|
-
active === "handles" ? (React.createElement(HandlesDrill, { viewer: viewer, account: account, nav: nav })) : (React.createElement(ChooseHandleDrill, { viewer: viewer, account: account, nav: nav })),
|
|
83
|
-
row));
|
|
84
|
-
}
|
|
85
|
-
const logOut = account.onLogout !== null ? (React.createElement("button", { className: "vm-textbtn", type: "button", "data-item": "logOut", onClick: account.onLogout }, ACCOUNT_COPY.logOut)) : null;
|
|
86
|
-
const handle = account.activeHandle ?? "";
|
|
87
|
-
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
88
|
-
css,
|
|
89
|
-
account.needsHandle === true ? (React.createElement(React.Fragment, null,
|
|
90
|
-
React.createElement(Stretch, null,
|
|
91
|
-
React.createElement("div", { className: "vm-who" },
|
|
92
|
-
React.createElement("span", { className: "vm-avatar", "aria-hidden": "true" }, initialOf(account.handleIdeas.fromName[0] ?? "")),
|
|
93
|
-
React.createElement("span", { className: "vm-no-handle" }, ACCOUNT_COPY.noHandle),
|
|
94
|
-
logOut),
|
|
95
|
-
React.createElement(Credits, { account: account })),
|
|
96
|
-
React.createElement(MainAction, null,
|
|
97
|
-
React.createElement(ActionPill, { label: ACCOUNT_COPY.chooseHandle, solo: true, onClick: () => setActive("choose") })))) : (React.createElement(React.Fragment, null,
|
|
98
|
-
React.createElement(Stretch, null,
|
|
99
|
-
React.createElement("div", { className: "vm-who" },
|
|
100
|
-
React.createElement("span", { className: "vm-avatar", "aria-hidden": "true" }, initialOf(handle)),
|
|
101
|
-
React.createElement("span", { className: "vm-handle" },
|
|
102
|
-
"@",
|
|
103
|
-
handle),
|
|
104
|
-
logOut),
|
|
105
|
-
React.createElement(Credits, { account: account })),
|
|
106
|
-
React.createElement(MainAction, null,
|
|
107
|
-
React.createElement(ActionPill, { label: account.creditsAction.label, href: account.creditsAction.href, onClick: account.creditsAction.onClick, solo: true })))),
|
|
108
|
-
row));
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=AccountTabAudition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AccountTabAudition.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/AccountTabAudition.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { type GlyphName } from "../parts/Glyph.js";
|
|
3
|
-
export type CardTabKind = "drill" | "link" | "action";
|
|
4
|
-
export interface CardTabItem {
|
|
5
|
-
readonly key: string;
|
|
6
|
-
readonly label: string;
|
|
7
|
-
readonly glyph: GlyphName;
|
|
8
|
-
readonly kind: CardTabKind;
|
|
9
|
-
readonly href?: string;
|
|
10
|
-
readonly onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
11
|
-
}
|
|
12
|
-
export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* A drill taller than the card (Handles, Share settings) scrolls the card; the\n row sticks on the band so it stays in view, pressed. Code's row never needed\n this: its drills are short. In flow (no overflow) this changes nothing. */\n[data-vibe-menu] .vm-xtab .vm-cnav { position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg); }\n[data-vibe-menu] .vm-xtab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
|
|
13
|
-
export interface CardTabRowProps {
|
|
14
|
-
readonly label: string;
|
|
15
|
-
readonly items: readonly CardTabItem[];
|
|
16
|
-
readonly active: string | null;
|
|
17
|
-
readonly onDrill: (key: string) => void;
|
|
18
|
-
}
|
|
19
|
-
export declare function CardTabRow(props: CardTabRowProps): React.ReactElement;
|
|
20
|
-
export declare function MainAction(props: {
|
|
21
|
-
readonly children: React.ReactNode;
|
|
22
|
-
}): React.ReactElement;
|
|
23
|
-
export declare function Stretch(props: {
|
|
24
|
-
readonly children: React.ReactNode;
|
|
25
|
-
}): React.ReactElement | null;
|
|
26
|
-
export declare function toggleDrill(open: string | null, key: string): string | null;
|
|
27
|
-
export declare function isPlainLeftClick(event: React.MouseEvent<HTMLElement>): boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CardTabRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/CardTabRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { VibeMenuProps, ViewerSlice } from "../slices.js";
|
|
3
|
-
import { type CardTabItem } from "./CardTabRow.js";
|
|
4
|
-
export type HomeTabVariant = "picks" | "pill";
|
|
5
|
-
export declare const HOME_TAB_LABELS: Readonly<{
|
|
6
|
-
picks: "Recommended";
|
|
7
|
-
recent: "Recent";
|
|
8
|
-
site: "vibes.diy";
|
|
9
|
-
myVibes: "My Vibes";
|
|
10
|
-
getApp: "Get the app";
|
|
11
|
-
}>;
|
|
12
|
-
export interface HomeTabAuditionProps {
|
|
13
|
-
readonly variant: HomeTabVariant;
|
|
14
|
-
readonly viewer: ViewerSlice;
|
|
15
|
-
readonly homeHref: string;
|
|
16
|
-
onHome(): void;
|
|
17
|
-
readonly myVibesHref: string;
|
|
18
|
-
readonly newAppHref: string;
|
|
19
|
-
readonly recommended: VibeMenuProps["recommended"];
|
|
20
|
-
readonly recommendedHeading?: VibeMenuProps["recommendedHeading"];
|
|
21
|
-
readonly onMakeYourOwn?: () => void;
|
|
22
|
-
readonly onGetFullApp?: () => void;
|
|
23
|
-
readonly initialActive?: string | null;
|
|
24
|
-
}
|
|
25
|
-
export declare function homeTabItems(props: HomeTabAuditionProps): readonly CardTabItem[];
|
|
26
|
-
export declare function HomeTabAudition(props: HomeTabAuditionProps): React.ReactElement;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { HOME_CARD_CSS, HOME_COPY } from "../cards/HomeCard.js";
|
|
3
|
-
import { ActionPill } from "../parts/ActionPill.js";
|
|
4
|
-
import { DoneButton } from "../parts/DoneButton.js";
|
|
5
|
-
import { Row } from "../parts/Row.js";
|
|
6
|
-
import { CARD_TAB_ROW_CSS, CardTabRow, MainAction, Stretch, isPlainLeftClick, toggleDrill, } from "./CardTabRow.js";
|
|
7
|
-
export const HOME_TAB_LABELS = Object.freeze({
|
|
8
|
-
picks: HOME_COPY.recommended,
|
|
9
|
-
recent: HOME_COPY.recent,
|
|
10
|
-
site: "vibes.diy",
|
|
11
|
-
myVibes: HOME_COPY.myVibes,
|
|
12
|
-
getApp: "Get the app",
|
|
13
|
-
});
|
|
14
|
-
const APP_COLORS = [
|
|
15
|
-
"var(--section-home)",
|
|
16
|
-
"var(--section-account)",
|
|
17
|
-
"var(--section-code)",
|
|
18
|
-
"var(--section-share)",
|
|
19
|
-
];
|
|
20
|
-
export function homeTabItems(props) {
|
|
21
|
-
const pending = props.viewer.identityPending === true;
|
|
22
|
-
const signedIn = props.viewer.role !== "signedOut" && pending === false;
|
|
23
|
-
const items = [];
|
|
24
|
-
if (props.variant === "pill" && props.recommended.length > 0) {
|
|
25
|
-
const label = props.recommendedHeading === "recent" ? HOME_TAB_LABELS.recent : HOME_TAB_LABELS.picks;
|
|
26
|
-
items.push({ key: "picks", label, glyph: "star", kind: "drill" });
|
|
27
|
-
}
|
|
28
|
-
items.push({
|
|
29
|
-
key: "site",
|
|
30
|
-
label: HOME_TAB_LABELS.site,
|
|
31
|
-
glyph: "home",
|
|
32
|
-
kind: "link",
|
|
33
|
-
href: props.homeHref,
|
|
34
|
-
onClick: (event) => {
|
|
35
|
-
if (isPlainLeftClick(event) === false)
|
|
36
|
-
return;
|
|
37
|
-
event.preventDefault();
|
|
38
|
-
props.onHome();
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
if (signedIn)
|
|
42
|
-
items.push({ key: "myVibes", label: HOME_TAB_LABELS.myVibes, glyph: "layout-grid", kind: "link", href: props.myVibesHref });
|
|
43
|
-
if (props.onGetFullApp !== undefined) {
|
|
44
|
-
const onGetFullApp = props.onGetFullApp;
|
|
45
|
-
items.push({ key: "getApp", label: HOME_TAB_LABELS.getApp, glyph: "app", kind: "action", onClick: () => onGetFullApp() });
|
|
46
|
-
}
|
|
47
|
-
return items;
|
|
48
|
-
}
|
|
49
|
-
function Picks(props) {
|
|
50
|
-
return (React.createElement("div", { className: "vm-group is-flush" }, props.recommended.slice(0, 3).map((rec, i) => (React.createElement(Row, { key: rec.href, lead: { letter: rec.title.slice(0, 1).toUpperCase(), kind: "app", color: APP_COLORS[i % APP_COLORS.length] }, label: rec.title, plain: true, href: rec.href })))));
|
|
51
|
-
}
|
|
52
|
-
function HomeAsk(props) {
|
|
53
|
-
const pending = props.viewer.identityPending === true;
|
|
54
|
-
if (pending)
|
|
55
|
-
return null;
|
|
56
|
-
if (props.viewer.role === "owner")
|
|
57
|
-
return React.createElement(ActionPill, { label: HOME_COPY.newApp, href: props.newAppHref, solo: true });
|
|
58
|
-
return (React.createElement(ActionPill, { label: HOME_COPY.makeYourOwn, href: props.onMakeYourOwn === undefined ? props.newAppHref : undefined, onClick: props.onMakeYourOwn, caption: HOME_COPY.makeSub }));
|
|
59
|
-
}
|
|
60
|
-
function madeOnLine(viewer) {
|
|
61
|
-
if (viewer.identityPending === true || viewer.role === "owner")
|
|
62
|
-
return null;
|
|
63
|
-
return (React.createElement("p", { className: "vm-kicker" },
|
|
64
|
-
React.createElement("span", { className: "vm-app-name" }, viewer.appTitle),
|
|
65
|
-
" ",
|
|
66
|
-
HOME_COPY.madeOn));
|
|
67
|
-
}
|
|
68
|
-
export function HomeTabAudition(props) {
|
|
69
|
-
const [active, setActive] = React.useState(props.initialActive ?? null);
|
|
70
|
-
const heading = props.recommendedHeading === "recent" ? HOME_COPY.recent : HOME_COPY.recommended;
|
|
71
|
-
const row = (React.createElement(CardTabRow, { label: "Home", items: homeTabItems(props), active: active, onDrill: (key) => setActive((open) => toggleDrill(open, key)) }));
|
|
72
|
-
return (React.createElement("div", { className: "vm-home vm-ctab vm-xtab", "data-card": "home", "data-variant": props.variant },
|
|
73
|
-
React.createElement("style", null, HOME_CARD_CSS + CARD_TAB_ROW_CSS),
|
|
74
|
-
active === "picks" ? (React.createElement(React.Fragment, null,
|
|
75
|
-
React.createElement("div", { className: "vm-drill", "data-drill": "picks" },
|
|
76
|
-
React.createElement("h3", { className: "vm-subhead" }, heading),
|
|
77
|
-
React.createElement(Picks, { recommended: props.recommended })),
|
|
78
|
-
React.createElement(DoneButton, { onDone: () => setActive(null) }))) : (React.createElement(React.Fragment, null,
|
|
79
|
-
React.createElement(Stretch, null,
|
|
80
|
-
props.variant === "picks" && props.recommended.length > 0 ? React.createElement("h3", { className: "vm-subhead" }, heading) : null,
|
|
81
|
-
props.variant === "picks" && props.recommended.length > 0 ? React.createElement(Picks, { recommended: props.recommended }) : null,
|
|
82
|
-
madeOnLine(props.viewer)),
|
|
83
|
-
React.createElement(MainAction, null,
|
|
84
|
-
React.createElement(HomeAsk, { ...props })))),
|
|
85
|
-
row));
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=HomeTabAudition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HomeTabAudition.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/HomeTabAudition.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { ShareSlice, ViewerSlice } from "../slices.js";
|
|
3
|
-
import { type CardTabItem } from "./CardTabRow.js";
|
|
4
|
-
export type ShareTabVariant = "code" | "link";
|
|
5
|
-
export declare const SHARE_TAB_CSS = "\n[data-vibe-menu] .vm-xtab .vm-share-link {\n margin: 0; font: 400 15px/1.35 var(--font-display); color: var(--ink); overflow-wrap: anywhere;\n}\n[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant=\"link\"] { align-items: stretch; padding-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant=\"link\"] .vm-share-actions { justify-content: flex-start; }\n[data-vibe-menu] .vm-xtab[data-variant=\"code\"] .vm-main > .vm-share-actions { justify-content: center; }\n[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant=\"link\"] > .vm-chip { align-self: flex-start; }\n[data-vibe-menu] .vm-xtab .vm-drill[data-drill=\"qr\"] { display: flex; flex-direction: column; align-items: center; gap: var(--space-12); }\n";
|
|
6
|
-
export interface ShareTabAuditionProps {
|
|
7
|
-
readonly variant: ShareTabVariant;
|
|
8
|
-
readonly viewer: ViewerSlice;
|
|
9
|
-
readonly share: ShareSlice | null;
|
|
10
|
-
readonly onSignIn: () => void;
|
|
11
|
-
readonly initialActive?: string | null;
|
|
12
|
-
}
|
|
13
|
-
export declare function shareTabItems(variant: ShareTabVariant, viewer: ViewerSlice, share: ShareSlice): readonly CardTabItem[];
|
|
14
|
-
export declare function ShareTabAudition(props: ShareTabAuditionProps): React.ReactElement;
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { useContext, useState } from "react";
|
|
3
|
-
import { exception2Result } from "@adviser/cement";
|
|
4
|
-
import { QrCode } from "../../QrCode.js";
|
|
5
|
-
import { JOIN_OR_SIGN_IN, SHARE_DEV_DRAFT_LINE, SHARE_HANDLE_ASK } from "../copy.js";
|
|
6
|
-
import { ActionPill } from "../parts/ActionPill.js";
|
|
7
|
-
import { Chip } from "../parts/Chip.js";
|
|
8
|
-
import { DoneButton } from "../parts/DoneButton.js";
|
|
9
|
-
import { useShareActions } from "../cards/share-actions.js";
|
|
10
|
-
import { SHARE_CARD_CSS } from "../cards/share-card.styles.js";
|
|
11
|
-
import { CopyChip, CopyLinkChip, shareCopied } from "../cards/share-copy.js";
|
|
12
|
-
import { PUBLISH_COPY } from "../cards/share-parts.js";
|
|
13
|
-
import { ShareSheetContext } from "../cards/ShareAppDrill.js";
|
|
14
|
-
import { SHARE_SETTINGS_LABEL, ShareDrill } from "../cards/ShareDrills.js";
|
|
15
|
-
import { CARD_TAB_ROW_CSS, CardTabRow, MainAction, Stretch, toggleDrill } from "./CardTabRow.js";
|
|
16
|
-
export const SHARE_TAB_CSS = `
|
|
17
|
-
[data-vibe-menu] .vm-xtab .vm-share-link {
|
|
18
|
-
margin: 0; font: 400 15px/1.35 var(--font-display); color: var(--ink); overflow-wrap: anywhere;
|
|
19
|
-
}
|
|
20
|
-
[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant="link"] { align-items: stretch; padding-top: 0; }
|
|
21
|
-
[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant="link"] .vm-share-actions { justify-content: flex-start; }
|
|
22
|
-
[data-vibe-menu] .vm-xtab[data-variant="code"] .vm-main > .vm-share-actions { justify-content: center; }
|
|
23
|
-
[data-vibe-menu] .vm-xtab .vm-share-hero[data-variant="link"] > .vm-chip { align-self: flex-start; }
|
|
24
|
-
[data-vibe-menu] .vm-xtab .vm-drill[data-drill="qr"] { display: flex; flex-direction: column; align-items: center; gap: var(--space-12); }
|
|
25
|
-
`;
|
|
26
|
-
export function shareTabItems(variant, viewer, share) {
|
|
27
|
-
const items = [];
|
|
28
|
-
if (variant === "link")
|
|
29
|
-
items.push({ key: "qr", label: "QR code", glyph: "qr-code", kind: "drill" });
|
|
30
|
-
if (share.app !== null)
|
|
31
|
-
items.push({ key: "app", label: "Share as app", glyph: "app", kind: "drill" });
|
|
32
|
-
if (viewer.role !== "signedOut" && share.notificationsSlot !== null) {
|
|
33
|
-
items.push({ key: "notifications", label: "Notifications", glyph: "bell", kind: "drill" });
|
|
34
|
-
}
|
|
35
|
-
items.push({ key: "shareSettings", label: SHARE_SETTINGS_LABEL, glyph: "settings", kind: "drill" });
|
|
36
|
-
return items;
|
|
37
|
-
}
|
|
38
|
-
function useSendLink(viewer, share) {
|
|
39
|
-
const sheet = useContext(ShareSheetContext);
|
|
40
|
-
const send = sheet.share;
|
|
41
|
-
if (send === undefined)
|
|
42
|
-
return null;
|
|
43
|
-
return () => {
|
|
44
|
-
void exception2Result(() => send({ url: share.link.url, title: viewer.appTitle })).then((res) => {
|
|
45
|
-
if (res.isOk())
|
|
46
|
-
share.onShareEvent?.({ kind: "sent", surface: "link" });
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function HandleAskLine(props) {
|
|
51
|
-
return (React.createElement("p", { className: "vm-handle-ask", "data-share-handle-ask": "" },
|
|
52
|
-
SHARE_HANDLE_ASK.sharedAs,
|
|
53
|
-
" ",
|
|
54
|
-
React.createElement("span", { className: "vm-handle-ask-name ph-no-capture" },
|
|
55
|
-
"@",
|
|
56
|
-
props.ask.handle),
|
|
57
|
-
React.createElement("span", { "aria-hidden": "true" }, " \u00B7 "),
|
|
58
|
-
React.createElement("button", { className: "vm-handle-ask-link", type: "button", onClick: props.ask.onChoose },
|
|
59
|
-
SHARE_HANDLE_ASK.choose,
|
|
60
|
-
" ",
|
|
61
|
-
React.createElement("span", { "aria-hidden": "true" }, "\u203A"))));
|
|
62
|
-
}
|
|
63
|
-
function EmbedReveal(props) {
|
|
64
|
-
const embed = props.share.embed;
|
|
65
|
-
if (embed === null)
|
|
66
|
-
return null;
|
|
67
|
-
return (React.createElement("div", { className: "vm-reveal", "data-reveal": "embed" },
|
|
68
|
-
React.createElement("textarea", { className: "vm-embed", readOnly: true, value: embed.snippet, "aria-label": "Embed code", onFocus: (e) => e.currentTarget.select() }),
|
|
69
|
-
React.createElement(CopyChip, { text: embed.snippet, label: "Copy embed code", ariaLabel: "Copy embed code", onCopied: shareCopied(props.share, "embed", props.owner) })));
|
|
70
|
-
}
|
|
71
|
-
function LinkActions(props) {
|
|
72
|
-
const { viewer, share, owner } = props;
|
|
73
|
-
const sendLink = useSendLink(viewer, share);
|
|
74
|
-
return (React.createElement("div", { className: "vm-share-actions", "data-share-main": "" },
|
|
75
|
-
React.createElement(CopyLinkChip, { url: share.link.url, display: share.link.display, onCopied: shareCopied(share, "link", owner) }),
|
|
76
|
-
sendLink !== null ? (React.createElement(Chip, { copy: true, glyph: "share", label: "Share\u2026", ariaLabel: `Share ${share.link.display}`, onClick: sendLink })) : null));
|
|
77
|
-
}
|
|
78
|
-
function ShareHero(props) {
|
|
79
|
-
const { variant, share, owner } = props;
|
|
80
|
-
const [embedOpen, setEmbedOpen] = useState(false);
|
|
81
|
-
const embed = owner ? share.embed : null;
|
|
82
|
-
return (React.createElement("div", { className: "vm-share-hero", "data-share-hero": true, "data-variant": variant },
|
|
83
|
-
variant === "code" ? (React.createElement("span", { className: "vm-qr" },
|
|
84
|
-
React.createElement(QrCode, { value: share.qrValue, size: 160, title: `QR code to open ${share.link.display}` }))) : (React.createElement("p", { className: "vm-share-link ph-no-capture" }, share.link.display)),
|
|
85
|
-
embed !== null ? (React.createElement(Chip, { copy: true, ghost: embedOpen === false, label: "Embed", ariaLabel: "Embed", ariaExpanded: embedOpen, onClick: () => setEmbedOpen((v) => v === false) })) : null,
|
|
86
|
-
props.actions,
|
|
87
|
-
owner && share.handleAsk !== undefined && share.handleAsk !== null ? React.createElement(HandleAskLine, { ask: share.handleAsk }) : null,
|
|
88
|
-
embed !== null && embedOpen ? React.createElement(EmbedReveal, { share: share, owner: owner }) : null));
|
|
89
|
-
}
|
|
90
|
-
function PublishAsk(props) {
|
|
91
|
-
const { publish } = props;
|
|
92
|
-
if (publish.state === "published")
|
|
93
|
-
return null;
|
|
94
|
-
const copy = PUBLISH_COPY[publish.state];
|
|
95
|
-
const failed = publish.error !== null;
|
|
96
|
-
const locked = publish.state === "locked";
|
|
97
|
-
return (React.createElement(ActionPill, { label: locked ? "Unlock" : failed ? "Retry" : "Publish", onClick: locked ? publish.onUnlock : publish.onPublish, caption: React.createElement(React.Fragment, null,
|
|
98
|
-
React.createElement("b", null, copy.lead),
|
|
99
|
-
" \u00B7 ",
|
|
100
|
-
failed ? publish.error : copy.line,
|
|
101
|
-
publish.state === "old" ? (React.createElement(React.Fragment, null,
|
|
102
|
-
" ",
|
|
103
|
-
React.createElement("button", { className: "vm-handle-ask-link", type: "button", onClick: publish.onViewLatest }, "View latest"))) : null) }));
|
|
104
|
-
}
|
|
105
|
-
export function ShareTabAudition(props) {
|
|
106
|
-
const { variant, viewer, share, onSignIn } = props;
|
|
107
|
-
const actions = useShareActions();
|
|
108
|
-
const [active, setActive] = useState(props.initialActive ?? null);
|
|
109
|
-
const css = React.createElement("style", null, SHARE_CARD_CSS + CARD_TAB_ROW_CSS + SHARE_TAB_CSS);
|
|
110
|
-
if (share === null) {
|
|
111
|
-
return (React.createElement("div", { className: "vm-ctab vm-xtab" },
|
|
112
|
-
css,
|
|
113
|
-
React.createElement("p", { className: "vm-share-empty", "data-share-draft": true }, SHARE_DEV_DRAFT_LINE)));
|
|
114
|
-
}
|
|
115
|
-
const owner = share.canManage === true && viewer.identityPending !== true;
|
|
116
|
-
const items = shareTabItems(variant, viewer, share);
|
|
117
|
-
const row = (React.createElement(CardTabRow, { label: "Share", items: items, active: active, onDrill: (key) => setActive((open) => toggleDrill(open, key)) }));
|
|
118
|
-
const close = () => setActive(null);
|
|
119
|
-
const unpublished = owner && share.publish !== null && share.publish.state !== "published";
|
|
120
|
-
const main = unpublished ? "publish" : viewer.role === "signedOut" ? "signIn" : "link";
|
|
121
|
-
const linkActions = React.createElement(LinkActions, { viewer: viewer, share: share, owner: owner });
|
|
122
|
-
let drill = null;
|
|
123
|
-
if (active === "qr") {
|
|
124
|
-
drill = (React.createElement(React.Fragment, null,
|
|
125
|
-
React.createElement("div", { className: "vm-drill", "data-drill": "qr" },
|
|
126
|
-
React.createElement("span", { className: "vm-qr" },
|
|
127
|
-
React.createElement(QrCode, { value: share.qrValue, size: 200, title: `QR code to open ${share.link.display}` })),
|
|
128
|
-
React.createElement("p", { className: "vm-share-link ph-no-capture" }, share.link.display)),
|
|
129
|
-
React.createElement(DoneButton, { onDone: close })));
|
|
130
|
-
}
|
|
131
|
-
else if (active === "embed") {
|
|
132
|
-
drill = (React.createElement(React.Fragment, null,
|
|
133
|
-
React.createElement("div", { className: "vm-drill", "data-drill": "embed" },
|
|
134
|
-
React.createElement(EmbedReveal, { share: share, owner: owner })),
|
|
135
|
-
React.createElement(DoneButton, { onDone: close })));
|
|
136
|
-
}
|
|
137
|
-
else if (active === "app" || active === "notifications" || active === "shareSettings") {
|
|
138
|
-
const nav = { view: { drill: active }, banner: null, onDrill: () => undefined, onLeaveDrill: close };
|
|
139
|
-
drill = (React.createElement(ShareDrill, { drill: active, viewer: viewer, share: share, memberKey: undefined, nav: nav, actions: actions, parent: "Share" }));
|
|
140
|
-
}
|
|
141
|
-
return (React.createElement("div", { className: "vm-ctab vm-xtab", "data-card": "share", "data-variant": variant },
|
|
142
|
-
css,
|
|
143
|
-
drill ?? (React.createElement(React.Fragment, null,
|
|
144
|
-
React.createElement(Stretch, null,
|
|
145
|
-
React.createElement(ShareHero, { variant: variant, share: share, owner: owner, actions: main === "link" ? null : linkActions })),
|
|
146
|
-
React.createElement(MainAction, null,
|
|
147
|
-
main === "publish" && share.publish !== null ? React.createElement(PublishAsk, { publish: share.publish }) : null,
|
|
148
|
-
main === "signIn" ? (React.createElement(ActionPill, { label: JOIN_OR_SIGN_IN, onClick: onSignIn, caption: React.createElement(React.Fragment, null,
|
|
149
|
-
"to become a member of ",
|
|
150
|
-
React.createElement("span", { className: "vm-app-name" }, viewer.appTitle),
|
|
151
|
-
".") })) : null,
|
|
152
|
-
main === "link" ? linkActions : null))),
|
|
153
|
-
row));
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=ShareTabAudition.js.map
|