@vibes.diy/base 14.3.20 → 14.3.22
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/StyleControls.js +27 -3
- package/components/StyleControls.js.map +1 -1
- package/components/VibesSwitch.d.ts +1 -2
- package/components/VibesSwitch.js +4 -59
- package/components/VibesSwitch.js.map +1 -1
- package/components/chip-fast-path.d.ts +6 -0
- package/components/chip-fast-path.js +2 -0
- package/components/chip-fast-path.js.map +1 -0
- package/components/editor-tabs.d.ts +3 -0
- package/components/editor-tabs.js +1 -0
- package/components/editor-tabs.js.map +1 -1
- package/components/index.d.ts +2 -17
- package/components/index.js +2 -17
- package/components/index.js.map +1 -1
- package/components/vibe-menu/VibeMenu.d.ts +16 -0
- package/components/vibe-menu/VibeMenu.js +99 -0
- package/components/vibe-menu/VibeMenu.js.map +1 -0
- package/components/vibe-menu/cards/AccountCard.d.ts +40 -0
- package/components/vibe-menu/cards/AccountCard.js +234 -0
- package/components/vibe-menu/cards/AccountCard.js.map +1 -0
- package/components/vibe-menu/cards/CodeCard.d.ts +20 -0
- package/components/vibe-menu/cards/CodeCard.js +109 -0
- package/components/vibe-menu/cards/CodeCard.js.map +1 -0
- package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +31 -0
- package/components/vibe-menu/cards/CodeModeWorkspace.js +107 -0
- package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -0
- package/components/vibe-menu/cards/HomeCard.d.ts +22 -0
- package/components/vibe-menu/cards/HomeCard.js +64 -0
- package/components/vibe-menu/cards/HomeCard.js.map +1 -0
- package/components/vibe-menu/cards/ShareCard.d.ts +9 -0
- package/components/vibe-menu/cards/ShareCard.js +84 -0
- package/components/vibe-menu/cards/ShareCard.js.map +1 -0
- package/components/vibe-menu/cards/ShareDrills.d.ts +35 -0
- package/components/vibe-menu/cards/ShareDrills.js +146 -0
- package/components/vibe-menu/cards/ShareDrills.js.map +1 -0
- package/components/vibe-menu/cards/ShareLinkRows.d.ts +6 -0
- package/components/vibe-menu/cards/ShareLinkRows.js +27 -0
- package/components/vibe-menu/cards/ShareLinkRows.js.map +1 -0
- package/components/vibe-menu/cards/share-actions.d.ts +13 -0
- package/components/vibe-menu/cards/share-actions.js +37 -0
- package/components/vibe-menu/cards/share-actions.js.map +1 -0
- package/components/vibe-menu/cards/share-card.styles.d.ts +1 -0
- package/components/vibe-menu/cards/share-card.styles.js +90 -0
- package/components/vibe-menu/cards/share-card.styles.js.map +1 -0
- package/components/vibe-menu/cards/share-copy.d.ts +24 -0
- package/components/vibe-menu/cards/share-copy.js +64 -0
- package/components/vibe-menu/cards/share-copy.js.map +1 -0
- package/components/vibe-menu/cards/share-parts.d.ts +46 -0
- package/components/vibe-menu/cards/share-parts.js +87 -0
- package/components/vibe-menu/cards/share-parts.js.map +1 -0
- package/components/vibe-menu/code-tabs.d.ts +11 -0
- package/components/vibe-menu/code-tabs.js +32 -0
- package/components/vibe-menu/code-tabs.js.map +1 -0
- package/components/vibe-menu/copy.d.ts +7 -0
- package/components/vibe-menu/copy.js +13 -0
- package/components/vibe-menu/copy.js.map +1 -0
- package/components/vibe-menu/fixtures.d.ts +42 -0
- package/components/vibe-menu/fixtures.js +184 -0
- package/components/vibe-menu/fixtures.js.map +1 -0
- package/components/vibe-menu/geometry.d.ts +24 -0
- package/components/vibe-menu/geometry.js +28 -0
- package/components/vibe-menu/geometry.js.map +1 -0
- package/components/vibe-menu/index.d.ts +42 -0
- package/components/vibe-menu/index.js +43 -0
- package/components/vibe-menu/index.js.map +1 -0
- package/components/vibe-menu/menu-state.d.ts +42 -0
- package/components/vibe-menu/menu-state.js +82 -0
- package/components/vibe-menu/menu-state.js.map +1 -0
- package/components/vibe-menu/moments.d.ts +13 -0
- package/components/vibe-menu/moments.js +39 -0
- package/components/vibe-menu/moments.js.map +1 -0
- package/components/vibe-menu/motion.d.ts +10 -0
- package/components/vibe-menu/motion.js +10 -0
- package/components/vibe-menu/motion.js.map +1 -0
- package/components/vibe-menu/open-resolver.d.ts +46 -0
- package/components/vibe-menu/open-resolver.js +91 -0
- package/components/vibe-menu/open-resolver.js.map +1 -0
- package/components/vibe-menu/parts/AccessToggle.d.ts +13 -0
- package/components/vibe-menu/parts/AccessToggle.js +58 -0
- package/components/vibe-menu/parts/AccessToggle.js.map +1 -0
- package/components/vibe-menu/parts/ActionPill.d.ts +18 -0
- package/components/vibe-menu/parts/ActionPill.js +21 -0
- package/components/vibe-menu/parts/ActionPill.js.map +1 -0
- package/components/vibe-menu/parts/BackRow.d.ts +8 -0
- package/components/vibe-menu/parts/BackRow.js +10 -0
- package/components/vibe-menu/parts/BackRow.js.map +1 -0
- package/components/vibe-menu/parts/Chip.d.ts +37 -0
- package/components/vibe-menu/parts/Chip.js +62 -0
- package/components/vibe-menu/parts/Chip.js.map +1 -0
- package/components/vibe-menu/parts/Composer.d.ts +39 -0
- package/components/vibe-menu/parts/Composer.js +47 -0
- package/components/vibe-menu/parts/Composer.js.map +1 -0
- package/components/vibe-menu/parts/DoneButton.d.ts +5 -0
- package/components/vibe-menu/parts/DoneButton.js +5 -0
- package/components/vibe-menu/parts/DoneButton.js.map +1 -0
- package/components/vibe-menu/parts/Glyph.d.ts +9 -0
- package/components/vibe-menu/parts/Glyph.js +123 -0
- package/components/vibe-menu/parts/Glyph.js.map +1 -0
- package/components/vibe-menu/parts/GrantControls.d.ts +13 -0
- package/components/vibe-menu/parts/GrantControls.js +61 -0
- package/components/vibe-menu/parts/GrantControls.js.map +1 -0
- package/components/vibe-menu/parts/MemberRow.d.ts +37 -0
- package/components/vibe-menu/parts/MemberRow.js +70 -0
- package/components/vibe-menu/parts/MemberRow.js.map +1 -0
- package/components/vibe-menu/parts/MenuCard.d.ts +10 -0
- package/components/vibe-menu/parts/MenuCard.js +7 -0
- package/components/vibe-menu/parts/MenuCard.js.map +1 -0
- package/components/vibe-menu/parts/MomentLine.d.ts +23 -0
- package/components/vibe-menu/parts/MomentLine.js +58 -0
- package/components/vibe-menu/parts/MomentLine.js.map +1 -0
- package/components/vibe-menu/parts/Row.d.ts +41 -0
- package/components/vibe-menu/parts/Row.js +60 -0
- package/components/vibe-menu/parts/Row.js.map +1 -0
- package/components/vibe-menu/parts/SectionStrip.d.ts +14 -0
- package/components/vibe-menu/parts/SectionStrip.js +26 -0
- package/components/vibe-menu/parts/SectionStrip.js.map +1 -0
- package/components/vibe-menu/parts/VibesSwitchGlass.d.ts +24 -0
- package/components/vibe-menu/parts/VibesSwitchGlass.js +66 -0
- package/components/vibe-menu/parts/VibesSwitchGlass.js.map +1 -0
- package/components/vibe-menu/parts/radio-keys.d.ts +5 -0
- package/components/vibe-menu/parts/radio-keys.js +13 -0
- package/components/vibe-menu/parts/radio-keys.js.map +1 -0
- package/components/vibe-menu/parts/use-composer-draft.d.ts +9 -0
- package/components/vibe-menu/parts/use-composer-draft.js +94 -0
- package/components/vibe-menu/parts/use-composer-draft.js.map +1 -0
- package/components/vibe-menu/share-fixtures.d.ts +15 -0
- package/components/vibe-menu/share-fixtures.js +72 -0
- package/components/vibe-menu/share-fixtures.js.map +1 -0
- package/components/vibe-menu/shell/VibeMenuShell.d.ts +30 -0
- package/components/vibe-menu/shell/VibeMenuShell.js +124 -0
- package/components/vibe-menu/shell/VibeMenuShell.js.map +1 -0
- package/components/vibe-menu/shell/menu-sequence.d.ts +20 -0
- package/components/vibe-menu/shell/menu-sequence.js +35 -0
- package/components/vibe-menu/shell/menu-sequence.js.map +1 -0
- package/components/vibe-menu/shell/outline-geometry.d.ts +63 -0
- package/components/vibe-menu/shell/outline-geometry.js +83 -0
- package/components/vibe-menu/shell/outline-geometry.js.map +1 -0
- package/components/vibe-menu/shell/shell.styles.d.ts +1 -0
- package/components/vibe-menu/shell/shell.styles.js +386 -0
- package/components/vibe-menu/shell/shell.styles.js.map +1 -0
- package/components/vibe-menu/shell/useMenuSequencer.d.ts +33 -0
- package/components/vibe-menu/shell/useMenuSequencer.js +490 -0
- package/components/vibe-menu/shell/useMenuSequencer.js.map +1 -0
- package/components/vibe-menu/slices.d.ts +182 -0
- package/components/vibe-menu/slices.js +5 -0
- package/components/vibe-menu/slices.js.map +1 -0
- package/components/vibe-menu/use-remix-hint.d.ts +9 -0
- package/components/vibe-menu/use-remix-hint.js +21 -0
- package/components/vibe-menu/use-remix-hint.js.map +1 -0
- package/components/vibe-menu/vibe-menu.styles.d.ts +5 -0
- package/components/vibe-menu/vibe-menu.styles.js +1424 -0
- package/components/vibe-menu/vibe-menu.styles.js.map +1 -0
- package/package.json +4 -4
- package/components/AccountView.d.ts +0 -10
- package/components/AccountView.js +0 -31
- package/components/AccountView.js.map +0 -1
- package/components/AdminModeControl.d.ts +0 -7
- package/components/AdminModeControl.js +0 -9
- package/components/AdminModeControl.js.map +0 -1
- package/components/CodingIndicator.d.ts +0 -6
- package/components/CodingIndicator.js +0 -53
- package/components/CodingIndicator.js.map +0 -1
- package/components/CreditsDetailMenu.d.ts +0 -15
- package/components/CreditsDetailMenu.js +0 -97
- package/components/CreditsDetailMenu.js.map +0 -1
- package/components/CreditsRingView.d.ts +0 -15
- package/components/CreditsRingView.js +0 -77
- package/components/CreditsRingView.js.map +0 -1
- package/components/EditorTabStrip.d.ts +0 -10
- package/components/EditorTabStrip.js +0 -15
- package/components/EditorTabStrip.js.map +0 -1
- package/components/LinkLineControls.d.ts +0 -9
- package/components/LinkLineControls.js +0 -72
- package/components/LinkLineControls.js.map +0 -1
- package/components/MadeHereView.d.ts +0 -8
- package/components/MadeHereView.js +0 -37
- package/components/MadeHereView.js.map +0 -1
- package/components/RecentVibesList.d.ts +0 -19
- package/components/RecentVibesList.js +0 -106
- package/components/RecentVibesList.js.map +0 -1
- package/components/RecommendedView.d.ts +0 -22
- package/components/RecommendedView.js +0 -172
- package/components/RecommendedView.js.map +0 -1
- package/components/RemixInviteView.d.ts +0 -4
- package/components/RemixInviteView.js +0 -11
- package/components/RemixInviteView.js.map +0 -1
- package/components/SeedDataOffer.d.ts +0 -8
- package/components/SeedDataOffer.js +0 -15
- package/components/SeedDataOffer.js.map +0 -1
- package/components/SignedInDiscoveryView.d.ts +0 -17
- package/components/SignedInDiscoveryView.js +0 -30
- package/components/SignedInDiscoveryView.js.map +0 -1
- package/components/SignedOutDiscoveryView.d.ts +0 -7
- package/components/SignedOutDiscoveryView.js +0 -15
- package/components/SignedOutDiscoveryView.js.map +0 -1
- package/components/SignedOutSavePrompt.d.ts +0 -4
- package/components/SignedOutSavePrompt.js +0 -33
- package/components/SignedOutSavePrompt.js.map +0 -1
- package/components/UnifiedVibeCard.d.ts +0 -129
- package/components/UnifiedVibeCard.js +0 -1658
- package/components/UnifiedVibeCard.js.map +0 -1
- package/components/UnifiedVibeCardSettings.styles.d.ts +0 -3
- package/components/UnifiedVibeCardSettings.styles.js +0 -95
- package/components/UnifiedVibeCardSettings.styles.js.map +0 -1
- package/components/UnifiedVibeCardShare.styles.d.ts +0 -3
- package/components/UnifiedVibeCardShare.styles.js +0 -72
- package/components/UnifiedVibeCardShare.styles.js.map +0 -1
- package/components/ViewerAccessSummary.d.ts +0 -28
- package/components/ViewerAccessSummary.js +0 -105
- package/components/ViewerAccessSummary.js.map +0 -1
- package/components/ViewerStandingView.d.ts +0 -7
- package/components/ViewerStandingView.js +0 -10
- package/components/ViewerStandingView.js.map +0 -1
- package/hooks/useCardFloat.d.ts +0 -6
- package/hooks/useCardFloat.js +0 -191
- package/hooks/useCardFloat.js.map +0 -1
- package/hooks/useHomeMotionPress.d.ts +0 -17
- package/hooks/useHomeMotionPress.js +0 -93
- package/hooks/useHomeMotionPress.js.map +0 -1
- package/motion/card-motion-source.d.ts +0 -23
- package/motion/card-motion-source.js +0 -50
- package/motion/card-motion-source.js.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Chip } from "./Chip.js";
|
|
3
|
+
import { Glyph } from "./Glyph.js";
|
|
4
|
+
const WHO_LABEL = { you: "You", built: "Built", agent: "Agent" };
|
|
5
|
+
export function AgentLog(props) {
|
|
6
|
+
const logRef = React.useRef(null);
|
|
7
|
+
React.useLayoutEffect(() => {
|
|
8
|
+
const log = logRef.current;
|
|
9
|
+
if (log === null)
|
|
10
|
+
return;
|
|
11
|
+
log.scrollTop = log.scrollHeight;
|
|
12
|
+
}, [props.lines.length]);
|
|
13
|
+
return (React.createElement("div", { className: "vm-log", id: props.id, ref: logRef, role: "log", "aria-label": "Agent log" }, props.lines.map((line, index) => (React.createElement("p", { key: index, className: "vm-log-line" },
|
|
14
|
+
React.createElement("b", null, WHO_LABEL[line.who]),
|
|
15
|
+
" ",
|
|
16
|
+
line.text)))));
|
|
17
|
+
}
|
|
18
|
+
function PinnedMoment(props) {
|
|
19
|
+
const item = props.item;
|
|
20
|
+
const options = item.options;
|
|
21
|
+
return (React.createElement("div", { className: "vm-moment is-pinned", "data-moment": item.kind },
|
|
22
|
+
React.createElement("p", { className: "vm-moment-text", role: item.kind === "problem" || item.kind === "credits" ? "alert" : undefined }, item.text),
|
|
23
|
+
React.createElement("div", { className: "vm-moment-actions" },
|
|
24
|
+
options !== undefined
|
|
25
|
+
? options.map((option) => React.createElement(Chip, { key: option, label: option, ghost: true, onClick: () => props.onAction(item, option) }))
|
|
26
|
+
: (item.actions ?? []).map((action, index) => (React.createElement(Chip, { key: action, label: action, ghost: index > 0, onClick: () => props.onAction(item, action) }))),
|
|
27
|
+
item.kind === "question" ? React.createElement("span", { className: "vm-moment-hint" }, "or type your own answer") : null)));
|
|
28
|
+
}
|
|
29
|
+
function LiveMoment(props) {
|
|
30
|
+
const logId = React.useId();
|
|
31
|
+
const item = props.item;
|
|
32
|
+
const kindClass = item.kind === "progress" ? "is-progress" : "is-summary";
|
|
33
|
+
const busy = item.kind === "progress" ? React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }) : null;
|
|
34
|
+
const log = props.log;
|
|
35
|
+
if (log === null) {
|
|
36
|
+
return (React.createElement("p", { className: `vm-moment ${kindClass}`, "data-moment": item.kind },
|
|
37
|
+
busy,
|
|
38
|
+
React.createElement("span", null, item.text)));
|
|
39
|
+
}
|
|
40
|
+
return (React.createElement("div", { className: "vm-live" },
|
|
41
|
+
React.createElement("button", { className: `vm-moment ${kindClass} is-expander`, type: "button", "data-moment": item.kind, "aria-expanded": log.open, "aria-controls": logId, "aria-label": `Agent log: ${item.text}`, onClick: () => log.onToggle() },
|
|
42
|
+
React.createElement("span", { className: log.open ? "vm-chev is-open" : "vm-chev", "data-log-chev": "" },
|
|
43
|
+
React.createElement(Glyph, { name: "chevron-right" })),
|
|
44
|
+
busy,
|
|
45
|
+
React.createElement("span", null, item.text)),
|
|
46
|
+
React.createElement("div", { className: "vm-log-clip", "data-log-clip": "", "data-open": log.open ? "true" : "false", inert: log.open ? undefined : true },
|
|
47
|
+
React.createElement(AgentLog, { id: logId, lines: log.lines }))));
|
|
48
|
+
}
|
|
49
|
+
export function MomentLine(props) {
|
|
50
|
+
const { pinned, live } = props.moment;
|
|
51
|
+
if (pinned === null && live === null)
|
|
52
|
+
return null;
|
|
53
|
+
return (React.createElement("div", { className: "vm-moments", "data-moment-block": "" },
|
|
54
|
+
pinned === null ? null : React.createElement(PinnedMoment, { item: pinned, onAction: props.onAction }),
|
|
55
|
+
live === null ? null : React.createElement(LiveMoment, { item: live, log: props.log }),
|
|
56
|
+
live === null && props.log !== null && props.log.lines.length > 0 ? React.createElement(AgentLog, { lines: props.log.lines }) : null));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=MomentLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MomentLine.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/MomentLine.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type GlyphName } from "./Glyph.js";
|
|
3
|
+
export interface RowLetter {
|
|
4
|
+
readonly letter: string;
|
|
5
|
+
readonly kind: "app" | "person";
|
|
6
|
+
readonly color?: string;
|
|
7
|
+
}
|
|
8
|
+
export type RowTail = {
|
|
9
|
+
readonly kind: "none";
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: "drill";
|
|
12
|
+
readonly value?: string;
|
|
13
|
+
readonly handle?: boolean;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "value";
|
|
16
|
+
readonly value: string;
|
|
17
|
+
readonly handle?: boolean;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: "switch";
|
|
20
|
+
readonly on: boolean;
|
|
21
|
+
};
|
|
22
|
+
export interface RowProps {
|
|
23
|
+
readonly label: string;
|
|
24
|
+
readonly lead: GlyphName | RowLetter;
|
|
25
|
+
readonly plain?: boolean;
|
|
26
|
+
readonly compact?: boolean;
|
|
27
|
+
readonly quiet?: boolean;
|
|
28
|
+
readonly disabled?: boolean;
|
|
29
|
+
readonly tail?: RowTail;
|
|
30
|
+
readonly href?: string;
|
|
31
|
+
readonly external?: boolean;
|
|
32
|
+
readonly expanded?: boolean;
|
|
33
|
+
readonly onClick?: () => void;
|
|
34
|
+
readonly ariaLabel?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function Row(props: RowProps): React.ReactElement;
|
|
37
|
+
export interface RowGroupProps {
|
|
38
|
+
readonly flush?: boolean;
|
|
39
|
+
readonly children: React.ReactNode;
|
|
40
|
+
}
|
|
41
|
+
export declare function RowGroup(props: RowGroupProps): React.ReactElement;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Glyph } from "./Glyph.js";
|
|
3
|
+
function rowClassName(props) {
|
|
4
|
+
const names = ["vm-row"];
|
|
5
|
+
if (props.compact === true)
|
|
6
|
+
names.push("is-compact");
|
|
7
|
+
if (props.quiet === true)
|
|
8
|
+
names.push("is-quiet");
|
|
9
|
+
return names.join(" ");
|
|
10
|
+
}
|
|
11
|
+
function RowLead(props) {
|
|
12
|
+
const lead = props.lead;
|
|
13
|
+
if (typeof lead === "string") {
|
|
14
|
+
return (React.createElement("span", { className: "vm-dot" },
|
|
15
|
+
React.createElement(Glyph, { name: lead })));
|
|
16
|
+
}
|
|
17
|
+
if (lead.kind === "person") {
|
|
18
|
+
return (React.createElement("span", { className: "vm-dot vm-initial", "aria-hidden": "true" }, lead.letter));
|
|
19
|
+
}
|
|
20
|
+
const style = { "--app": lead.color ?? "var(--section-home)" };
|
|
21
|
+
return (React.createElement("span", { className: "vm-dot vm-app", style: style, "aria-hidden": "true" }, lead.letter));
|
|
22
|
+
}
|
|
23
|
+
function RowValue(props) {
|
|
24
|
+
return React.createElement("span", { className: props.handle === true ? "vm-count is-handle" : "vm-count" }, props.value);
|
|
25
|
+
}
|
|
26
|
+
function RowTailView(props) {
|
|
27
|
+
const tail = props.tail;
|
|
28
|
+
switch (tail.kind) {
|
|
29
|
+
case "none":
|
|
30
|
+
return null;
|
|
31
|
+
case "value":
|
|
32
|
+
return React.createElement(RowValue, { value: tail.value, handle: tail.handle });
|
|
33
|
+
case "drill":
|
|
34
|
+
return (React.createElement(React.Fragment, null,
|
|
35
|
+
tail.value === undefined ? null : React.createElement(RowValue, { value: tail.value, handle: tail.handle }),
|
|
36
|
+
React.createElement("span", { className: "vm-chev" },
|
|
37
|
+
React.createElement(Glyph, { name: "chevron-right" }))));
|
|
38
|
+
case "switch":
|
|
39
|
+
return React.createElement("span", { className: tail.on ? "vm-switch is-on" : "vm-switch", "aria-hidden": "true" });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function Row(props) {
|
|
43
|
+
const tail = props.tail ?? { kind: "none" };
|
|
44
|
+
const inner = (React.createElement(React.Fragment, null,
|
|
45
|
+
React.createElement(RowLead, { lead: props.lead }),
|
|
46
|
+
React.createElement("span", { className: props.plain === true ? "vm-label is-plain" : "vm-label" }, props.label),
|
|
47
|
+
React.createElement(RowTailView, { tail: tail })));
|
|
48
|
+
if (props.href !== undefined && props.disabled !== true) {
|
|
49
|
+
return (React.createElement("a", { className: rowClassName(props), href: props.href, target: props.external === true ? "_blank" : undefined, rel: props.external === true ? "noopener noreferrer" : undefined, "aria-label": props.ariaLabel, onClick: props.onClick }, inner));
|
|
50
|
+
}
|
|
51
|
+
return (React.createElement("button", { className: rowClassName(props), type: "button", role: tail.kind === "switch" ? "switch" : undefined, "aria-checked": tail.kind === "switch" ? tail.on : undefined, "aria-expanded": props.expanded, "aria-disabled": props.disabled === true ? "true" : undefined, "aria-label": props.ariaLabel, onClick: () => {
|
|
52
|
+
if (props.disabled === true)
|
|
53
|
+
return;
|
|
54
|
+
props.onClick?.();
|
|
55
|
+
} }, inner));
|
|
56
|
+
}
|
|
57
|
+
export function RowGroup(props) {
|
|
58
|
+
return React.createElement("div", { className: props.flush === true ? "vm-group is-flush" : "vm-group" }, props.children);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Row.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Row.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type Ref } from "react";
|
|
3
|
+
import type { Section } from "../menu-state.js";
|
|
4
|
+
export interface SectionStripProps {
|
|
5
|
+
readonly activeSection: Section | null;
|
|
6
|
+
readonly pressedSection: Section | null;
|
|
7
|
+
readonly tabbable: boolean;
|
|
8
|
+
readonly pendingRequests: number;
|
|
9
|
+
readonly onTab: (section: Section) => void;
|
|
10
|
+
readonly stripRef?: Ref<HTMLElement>;
|
|
11
|
+
readonly slideRef?: Ref<HTMLDivElement>;
|
|
12
|
+
readonly registerTab?: (section: Section, el: HTMLButtonElement | null) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function SectionStrip(props: SectionStripProps): React.ReactElement;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Glyph } from "./Glyph.js";
|
|
3
|
+
import { SECTIONS, SECTION_TITLES } from "../menu-state.js";
|
|
4
|
+
const TAB_GLYPH = {
|
|
5
|
+
home: "home",
|
|
6
|
+
settings: "settings",
|
|
7
|
+
vibe: "code",
|
|
8
|
+
share: "users",
|
|
9
|
+
};
|
|
10
|
+
function pendingLabel(count) {
|
|
11
|
+
return `${count} pending access request${count === 1 ? "" : "s"}`;
|
|
12
|
+
}
|
|
13
|
+
export function SectionStrip(props) {
|
|
14
|
+
return (React.createElement("nav", { className: "vm-strip", "aria-label": "Vibe menu", ref: props.stripRef },
|
|
15
|
+
React.createElement("div", { className: "vm-strip-slide", ref: props.slideRef },
|
|
16
|
+
React.createElement("div", { className: "vm-strip-inner" }, SECTIONS.map((section) => {
|
|
17
|
+
const title = SECTION_TITLES[section];
|
|
18
|
+
const badged = section === "share" && props.pendingRequests > 0;
|
|
19
|
+
return (React.createElement("button", { key: section, type: "button", className: props.activeSection === section ? "vm-tab is-active" : "vm-tab", "data-section": section, "aria-pressed": props.pressedSection === section, "aria-label": badged ? `${title} (${pendingLabel(props.pendingRequests)})` : undefined, tabIndex: props.tabbable ? 0 : -1, ref: (el) => props.registerTab?.(section, el), onClick: () => props.onTab(section) },
|
|
20
|
+
React.createElement("span", { className: "vm-tab-circle" },
|
|
21
|
+
React.createElement(Glyph, { name: TAB_GLYPH[section], className: "" })),
|
|
22
|
+
React.createElement("span", { className: "vm-tab-label" }, title),
|
|
23
|
+
badged ? (React.createElement("span", { className: "vm-badge", "aria-hidden": "true" }, props.pendingRequests)) : null));
|
|
24
|
+
})))));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=SectionStrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionStrip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/SectionStrip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAoB5D,MAAM,SAAS,GAAyC;IACtD,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,GAAG,KAAK,0BAA0B,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACpE,CAAC;AAGD,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,OAAO,CACL,6BAAK,SAAS,EAAC,UAAU,gBAAY,WAAW,EAAC,GAAG,EAAE,KAAK,CAAC,QAAQ;QAClE,6BAAK,SAAS,EAAC,gBAAgB,EAAC,GAAG,EAAE,KAAK,CAAC,QAAQ;YACjD,6BAAK,SAAS,EAAC,gBAAgB,IAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxB,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;gBAChE,OAAO,CACL,gCACE,GAAG,EAAE,OAAO,EACZ,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,kBAC5D,OAAO,kBACP,KAAK,CAAC,cAAc,KAAK,OAAO,gBAClC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EACpF,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;oBAEnC,8BAAM,SAAS,EAAC,eAAe;wBAC7B,oBAAC,KAAK,IAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,EAAC,EAAE,GAAG,CAC3C;oBACP,8BAAM,SAAS,EAAC,cAAc,IAAE,KAAK,CAAQ;oBAC5C,MAAM,CAAC,CAAC,CAAC,CACR,8BAAM,SAAS,EAAC,UAAU,iBAAa,MAAM,IAC1C,KAAK,CAAC,eAAe,CACjB,CACR,CAAC,CAAC,CAAC,IAAI,CACD,CACV,CAAC;YACJ,CAAC,CAAC,CACE,CACF,CACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ReactNode, Ref } from "react";
|
|
3
|
+
export interface SwitchArtPlacement {
|
|
4
|
+
readonly size: number;
|
|
5
|
+
readonly left: number;
|
|
6
|
+
readonly top: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function switchArtPlacement(box: {
|
|
9
|
+
readonly width: number;
|
|
10
|
+
readonly height: number;
|
|
11
|
+
}): SwitchArtPlacement;
|
|
12
|
+
export type SwitchChiclet = "draft" | "locked";
|
|
13
|
+
export interface VibesSwitchGlassProps {
|
|
14
|
+
readonly open: boolean;
|
|
15
|
+
readonly barOpen: boolean;
|
|
16
|
+
readonly onToggle: () => void;
|
|
17
|
+
readonly pendingRequests: number;
|
|
18
|
+
readonly chiclet: SwitchChiclet | null;
|
|
19
|
+
readonly onChiclet: () => void;
|
|
20
|
+
readonly closedStatus: ReactNode;
|
|
21
|
+
readonly twinkling: boolean;
|
|
22
|
+
readonly pillRef?: Ref<HTMLButtonElement>;
|
|
23
|
+
}
|
|
24
|
+
export declare function VibesSwitchGlass(props: VibesSwitchGlassProps): React.ReactElement;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { VibesSwitch } from "../../VibesSwitch.js";
|
|
4
|
+
import { MENU_GEOMETRY } from "../geometry.js";
|
|
5
|
+
import { MOTION } from "../motion.js";
|
|
6
|
+
const SWITCH_VIEWBOX = { x: 18, y: 58, height: 282 };
|
|
7
|
+
const SWITCH_STADIUM = { x: 59.9, y: 154.75, width: 479.73, height: 175.38 };
|
|
8
|
+
export function switchArtPlacement(box) {
|
|
9
|
+
const scale = Math.min(box.width / SWITCH_STADIUM.width, box.height / SWITCH_STADIUM.height);
|
|
10
|
+
return {
|
|
11
|
+
size: SWITCH_VIEWBOX.height * scale,
|
|
12
|
+
left: (box.width - SWITCH_STADIUM.width * scale) / 2 - (SWITCH_STADIUM.x - SWITCH_VIEWBOX.x) * scale,
|
|
13
|
+
top: (box.height - SWITCH_STADIUM.height * scale) / 2 - (SWITCH_STADIUM.y - SWITCH_VIEWBOX.y) * scale,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const ART = switchArtPlacement({ width: MENU_GEOMETRY.pillW, height: MENU_GEOMETRY.pillH });
|
|
17
|
+
const CHICLET_COPY = {
|
|
18
|
+
draft: { text: "Draft", label: "Draft — not live yet. Open the vibe menu to update." },
|
|
19
|
+
locked: { text: "Locked", label: "Version locked — new edits aren't live. Open the vibe menu to unlock." },
|
|
20
|
+
};
|
|
21
|
+
function switchLabel(input) {
|
|
22
|
+
if (input.open)
|
|
23
|
+
return "Close vibe menu";
|
|
24
|
+
if (input.pendingRequests > 0) {
|
|
25
|
+
const plural = input.pendingRequests === 1 ? "" : "s";
|
|
26
|
+
return `Open vibe menu (${input.pendingRequests} pending access request${plural})`;
|
|
27
|
+
}
|
|
28
|
+
return "Open vibe menu";
|
|
29
|
+
}
|
|
30
|
+
function hasContent(node) {
|
|
31
|
+
return node !== null && node !== undefined && node !== false && node !== "";
|
|
32
|
+
}
|
|
33
|
+
function ClosedStatusLine(props) {
|
|
34
|
+
const visible = hasContent(props.content);
|
|
35
|
+
const [retained, setRetained] = useState(visible ? props.content : null);
|
|
36
|
+
const [revealed, setRevealed] = useState(false);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (visible)
|
|
39
|
+
setRetained(props.content);
|
|
40
|
+
}, [visible, props.content]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (visible) {
|
|
43
|
+
const frame = requestAnimationFrame(() => setRevealed(true));
|
|
44
|
+
return () => cancelAnimationFrame(frame);
|
|
45
|
+
}
|
|
46
|
+
setRevealed(false);
|
|
47
|
+
const exit = setTimeout(() => setRetained(null), MOTION.closeMs);
|
|
48
|
+
return () => clearTimeout(exit);
|
|
49
|
+
}, [visible]);
|
|
50
|
+
if (hasContent(retained) === false)
|
|
51
|
+
return null;
|
|
52
|
+
return (React.createElement("div", { className: "vm-closed-status", "data-testid": "closed-build-status", "aria-hidden": visible ? undefined : true, inert: visible === false },
|
|
53
|
+
React.createElement("div", { className: "vm-closed-status-line", "data-revealed": revealed ? "true" : "false" }, retained)));
|
|
54
|
+
}
|
|
55
|
+
export function VibesSwitchGlass(props) {
|
|
56
|
+
const chiclet = props.chiclet === null ? undefined : CHICLET_COPY[props.chiclet];
|
|
57
|
+
return (React.createElement(React.Fragment, null,
|
|
58
|
+
React.createElement("div", { className: "vm-glass", "aria-hidden": "true" }),
|
|
59
|
+
React.createElement("button", { ref: props.pillRef, type: "button", className: "vm-pill", "data-vibe-switch-glass": "", "aria-label": switchLabel({ open: props.open, pendingRequests: props.pendingRequests }), "aria-expanded": props.open, onClick: props.onToggle },
|
|
60
|
+
React.createElement(VibesSwitch, { size: ART.size, className: "vm-switch-svg", style: { position: "absolute", left: ART.left, top: ART.top, pointerEvents: "none" }, isActive: props.barOpen === false, isTwinkling: props.twinkling }),
|
|
61
|
+
props.open === false && props.pendingRequests > 0 ? (React.createElement("span", { className: "vm-badge", "aria-hidden": "true" }, props.pendingRequests)) : null),
|
|
62
|
+
React.createElement("div", { className: "vm-beside" },
|
|
63
|
+
chiclet === undefined || props.chiclet === null ? null : (React.createElement("button", { type: "button", className: "vm-chiclet", "data-chiclet": props.chiclet, "aria-label": chiclet.label, onClick: props.onChiclet }, chiclet.text)),
|
|
64
|
+
React.createElement(ClosedStatusLine, { content: props.closedStatus }))));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=VibesSwitchGlass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VibesSwitchGlass.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/VibesSwitchGlass.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function nextRadioIndex(args) {
|
|
2
|
+
switch (args.key) {
|
|
3
|
+
case "ArrowRight":
|
|
4
|
+
case "ArrowDown":
|
|
5
|
+
return (args.index + 1) % args.count;
|
|
6
|
+
case "ArrowLeft":
|
|
7
|
+
case "ArrowUp":
|
|
8
|
+
return (args.index - 1 + args.count) % args.count;
|
|
9
|
+
default:
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=radio-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-keys.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/radio-keys.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,cAAc,CAAC,IAA8E;IAC3G,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACpD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ComposerDraft, ComposerSlice } from "./Composer.js";
|
|
2
|
+
export type { ComposerDraft, ComposerSlice } from "./Composer.js";
|
|
3
|
+
export declare const QUEUE_FLUSH_RETRY_MS = 400;
|
|
4
|
+
export declare const QUEUE_FLUSH_MAX_ATTEMPTS = 25;
|
|
5
|
+
export interface UseComposerDraftInput {
|
|
6
|
+
readonly composer: ComposerSlice;
|
|
7
|
+
readonly resetKey: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function useComposerDraft(input: UseComposerDraftInput): ComposerDraft;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useAttachments } from "../../../attachments/use-attachments.js";
|
|
3
|
+
export const QUEUE_FLUSH_RETRY_MS = 400;
|
|
4
|
+
export const QUEUE_FLUSH_MAX_ATTEMPTS = 25;
|
|
5
|
+
const ONE_FILE_TEXT = "Use the attached file.";
|
|
6
|
+
const MANY_FILES_TEXT = "Use the attached files.";
|
|
7
|
+
export function useComposerDraft(input) {
|
|
8
|
+
const { composer, resetKey } = input;
|
|
9
|
+
const [text, setText] = React.useState("");
|
|
10
|
+
const [queued, setQueued] = React.useState([]);
|
|
11
|
+
const [flushAttempt, setFlushAttempt] = React.useState(0);
|
|
12
|
+
const attachments = useAttachments();
|
|
13
|
+
const prevResetKey = React.useRef(resetKey);
|
|
14
|
+
if (prevResetKey.current !== resetKey) {
|
|
15
|
+
prevResetKey.current = resetKey;
|
|
16
|
+
setText("");
|
|
17
|
+
setQueued([]);
|
|
18
|
+
setFlushAttempt(0);
|
|
19
|
+
attachments.clear();
|
|
20
|
+
}
|
|
21
|
+
const restore = composer.restore;
|
|
22
|
+
const stage = attachments.stage;
|
|
23
|
+
const restoreSeq = React.useRef(undefined);
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
if (restore === null || restore.seq === restoreSeq.current)
|
|
26
|
+
return;
|
|
27
|
+
restoreSeq.current = restore.seq;
|
|
28
|
+
setText((d) => (d === "" ? restore.text : d));
|
|
29
|
+
stage(restore.attachments ?? []);
|
|
30
|
+
}, [restore, stage]);
|
|
31
|
+
const seed = composer.seed;
|
|
32
|
+
const seedSeq = React.useRef(undefined);
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
if (seed === null || seed.seq === seedSeq.current)
|
|
35
|
+
return;
|
|
36
|
+
seedSeq.current = seed.seq;
|
|
37
|
+
setText((d) => (d === "" ? seed.text : d));
|
|
38
|
+
}, [seed]);
|
|
39
|
+
const building = composer.cap === "Stop";
|
|
40
|
+
const { sendsNow } = composer;
|
|
41
|
+
const onSubmitRef = React.useRef(composer.onSubmit);
|
|
42
|
+
React.useLayoutEffect(() => {
|
|
43
|
+
onSubmitRef.current = composer.onSubmit;
|
|
44
|
+
});
|
|
45
|
+
React.useEffect(() => {
|
|
46
|
+
const flushable = sendsNow === true || building === false;
|
|
47
|
+
if (flushable === false || queued.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
const batch = queued.join("\n\n");
|
|
50
|
+
if (onSubmitRef.current(batch, []) !== false) {
|
|
51
|
+
setQueued([]);
|
|
52
|
+
setFlushAttempt(0);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (flushAttempt >= QUEUE_FLUSH_MAX_ATTEMPTS) {
|
|
56
|
+
setQueued([]);
|
|
57
|
+
setFlushAttempt(0);
|
|
58
|
+
setText((d) => (d === "" ? batch : `${d}\n${batch}`));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const timer = setTimeout(() => setFlushAttempt((n) => n + 1), QUEUE_FLUSH_RETRY_MS);
|
|
62
|
+
return () => clearTimeout(timer);
|
|
63
|
+
}, [building, sendsNow, queued, flushAttempt]);
|
|
64
|
+
function submit() {
|
|
65
|
+
const trimmed = text.trim();
|
|
66
|
+
const ready = attachments.readyAttachments;
|
|
67
|
+
if ((trimmed === "" && ready.length === 0) || attachments.busy === true)
|
|
68
|
+
return;
|
|
69
|
+
const sendNow = composer.sendsNow === true && queued.length === 0 && ready.length === 0;
|
|
70
|
+
if ((building === true && sendNow === false) || queued.length > 0) {
|
|
71
|
+
if (ready.length > 0)
|
|
72
|
+
return;
|
|
73
|
+
setQueued([...queued, trimmed]);
|
|
74
|
+
setText("");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const fileText = ready.length === 1 ? ONE_FILE_TEXT : MANY_FILES_TEXT;
|
|
78
|
+
const message = trimmed === "" ? fileText : trimmed;
|
|
79
|
+
const answer = composer.onSubmit(message, ready);
|
|
80
|
+
if (answer === false)
|
|
81
|
+
return;
|
|
82
|
+
attachments.clear();
|
|
83
|
+
setText("");
|
|
84
|
+
}
|
|
85
|
+
function stop() {
|
|
86
|
+
if (queued.length > 0) {
|
|
87
|
+
setText(queued.join("\n"));
|
|
88
|
+
setQueued([]);
|
|
89
|
+
}
|
|
90
|
+
composer.onStop();
|
|
91
|
+
}
|
|
92
|
+
return { text, setText, attachments, queued, submit, stop };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=use-composer-draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-composer-draft.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/use-composer-draft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ViewerRole } from "./open-resolver.js";
|
|
2
|
+
import type { RosterMember, ShareSlice, ViewerSlice } from "./slices.js";
|
|
3
|
+
export declare const SAMPLE_ROSTER: readonly RosterMember[];
|
|
4
|
+
export declare const SAMPLE_LINK: {
|
|
5
|
+
readonly url: string;
|
|
6
|
+
readonly display: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const SAMPLE_REQUEST: {
|
|
9
|
+
readonly key: string;
|
|
10
|
+
readonly handle: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const SAMPLE_EMBED_SNIPPET = "<iframe src=\"https://vibes.diy/embed/marcus/my-to-do-app\" title=\"My To-Do App, made on vibes.diy\" style=\"width:100%;aspect-ratio:16/9;border:0\" loading=\"lazy\"></iframe>";
|
|
13
|
+
export declare function makeShareSlice(over?: Partial<ShareSlice>): ShareSlice;
|
|
14
|
+
export declare function makeVisitorShareSlice(over?: Partial<ShareSlice>): ShareSlice;
|
|
15
|
+
export declare function makeShareViewer(role: ViewerRole, over?: Partial<ViewerSlice>): ViewerSlice;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
function ok() {
|
|
3
|
+
return Promise.resolve(Result.Ok(undefined));
|
|
4
|
+
}
|
|
5
|
+
function noop() {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
function member(handle, data, code) {
|
|
9
|
+
return { key: `user:${handle}`, handle, email: null, data, code, pendingEmail: false };
|
|
10
|
+
}
|
|
11
|
+
export const SAMPLE_ROSTER = [
|
|
12
|
+
member("alex", "write", true),
|
|
13
|
+
member("sam", "read", false),
|
|
14
|
+
member("priya", "write", false),
|
|
15
|
+
member("dev", "read", true),
|
|
16
|
+
member("mei", "write", true),
|
|
17
|
+
member("tom", "read", false),
|
|
18
|
+
];
|
|
19
|
+
export const SAMPLE_LINK = {
|
|
20
|
+
url: "https://vibes.diy/vibe/marcus/my-to-do-app",
|
|
21
|
+
display: "vibes.diy/vibe/marcus/my-to-do-app",
|
|
22
|
+
};
|
|
23
|
+
export const SAMPLE_REQUEST = { key: "user:jo", handle: "jo" };
|
|
24
|
+
export const SAMPLE_EMBED_SNIPPET = '<iframe src="https://vibes.diy/embed/marcus/my-to-do-app" title="My To-Do App, made on vibes.diy" style="width:100%;aspect-ratio:16/9;border:0" loading="lazy"></iframe>';
|
|
25
|
+
export function makeShareSlice(over = {}) {
|
|
26
|
+
return {
|
|
27
|
+
posture: "public",
|
|
28
|
+
postureState: "idle",
|
|
29
|
+
postureLoading: false,
|
|
30
|
+
onPosture: noop,
|
|
31
|
+
onRetryPosture: noop,
|
|
32
|
+
escape: { revealed: false, onPublishWithoutAccess: noop },
|
|
33
|
+
anonWritesOn: false,
|
|
34
|
+
link: SAMPLE_LINK,
|
|
35
|
+
qrValue: SAMPLE_LINK.url,
|
|
36
|
+
embed: null,
|
|
37
|
+
pinterestHref: null,
|
|
38
|
+
canManage: true,
|
|
39
|
+
roster: SAMPLE_ROSTER,
|
|
40
|
+
members: { onData: ok, onCode: ok, onRemove: ok, onInvite: ok },
|
|
41
|
+
request: null,
|
|
42
|
+
onApprove: ok,
|
|
43
|
+
onDecline: ok,
|
|
44
|
+
autoApprove: null,
|
|
45
|
+
yourAccess: { summary: "Data: Write · Code: Yes", roleLabel: "Owner", adminMode: false, onAdminMode: noop },
|
|
46
|
+
publish: null,
|
|
47
|
+
notificationsSlot: null,
|
|
48
|
+
...over,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function makeVisitorShareSlice(over = {}) {
|
|
52
|
+
return makeShareSlice({
|
|
53
|
+
canManage: false,
|
|
54
|
+
roster: [],
|
|
55
|
+
autoApprove: null,
|
|
56
|
+
yourAccess: { summary: "Data: Read · Code: No", roleLabel: "Reader", adminMode: null, onAdminMode: noop },
|
|
57
|
+
...over,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function makeShareViewer(role, over = {}) {
|
|
61
|
+
return {
|
|
62
|
+
role,
|
|
63
|
+
identityPending: false,
|
|
64
|
+
canEditSource: role === "owner",
|
|
65
|
+
appTitle: "My To-Do App",
|
|
66
|
+
appSlug: "my-to-do-app",
|
|
67
|
+
ownerHandle: "marcus",
|
|
68
|
+
draft: false,
|
|
69
|
+
...over,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=share-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-fixtures.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/share-fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
import type { MenuEvent, MenuState, Section } from "../menu-state.js";
|
|
4
|
+
import type { SequencerStep } from "./useMenuSequencer.js";
|
|
5
|
+
export interface VibeMenuShellBadges {
|
|
6
|
+
readonly pendingRequests: number;
|
|
7
|
+
readonly chiclet: "draft" | "locked" | null;
|
|
8
|
+
}
|
|
9
|
+
export interface VibeMenuSwitchActivity {
|
|
10
|
+
readonly twinkling: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface VibeMenuShellProps {
|
|
13
|
+
readonly state: MenuState;
|
|
14
|
+
readonly dispatch: (event: MenuEvent) => void;
|
|
15
|
+
readonly renderCard: (section: Section) => ReactNode;
|
|
16
|
+
readonly persistent?: ReactNode;
|
|
17
|
+
readonly contentKey: string;
|
|
18
|
+
readonly codeMode: boolean;
|
|
19
|
+
readonly logOpen: boolean;
|
|
20
|
+
readonly badges: VibeMenuShellBadges;
|
|
21
|
+
readonly closedStatus: ReactNode;
|
|
22
|
+
readonly switchActivity: VibeMenuSwitchActivity;
|
|
23
|
+
readonly onChiclet: () => void;
|
|
24
|
+
readonly frameCap?: boolean;
|
|
25
|
+
readonly reducedMotion?: boolean;
|
|
26
|
+
readonly onStep?: (step: SequencerStep) => void;
|
|
27
|
+
readonly frame?: "viewport" | "contained";
|
|
28
|
+
readonly settledAtMount?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function VibeMenuShell(props: VibeMenuShellProps): React.ReactElement;
|