@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,43 @@
|
|
|
1
|
+
export * from "./menu-state.js";
|
|
2
|
+
export * from "./motion.js";
|
|
3
|
+
export * from "./moments.js";
|
|
4
|
+
export * from "./code-tabs.js";
|
|
5
|
+
export * from "./open-resolver.js";
|
|
6
|
+
export * from "./geometry.js";
|
|
7
|
+
export * from "./vibe-menu.styles.js";
|
|
8
|
+
export * from "./parts/Glyph.js";
|
|
9
|
+
export * from "./parts/Row.js";
|
|
10
|
+
export * from "./parts/ActionPill.js";
|
|
11
|
+
export * from "./parts/DoneButton.js";
|
|
12
|
+
export * from "./parts/BackRow.js";
|
|
13
|
+
export * from "./parts/Chip.js";
|
|
14
|
+
export * from "./parts/Composer.js";
|
|
15
|
+
export * from "./parts/use-composer-draft.js";
|
|
16
|
+
export * from "./parts/MomentLine.js";
|
|
17
|
+
export * from "./parts/AccessToggle.js";
|
|
18
|
+
export * from "./parts/GrantControls.js";
|
|
19
|
+
export * from "./parts/MemberRow.js";
|
|
20
|
+
export * from "./shell/shell.styles.js";
|
|
21
|
+
export * from "./parts/SectionStrip.js";
|
|
22
|
+
export * from "./parts/VibesSwitchGlass.js";
|
|
23
|
+
export * from "./shell/useMenuSequencer.js";
|
|
24
|
+
export * from "./parts/MenuCard.js";
|
|
25
|
+
export * from "./shell/VibeMenuShell.js";
|
|
26
|
+
export * from "./slices.js";
|
|
27
|
+
export * from "./copy.js";
|
|
28
|
+
export * from "./use-remix-hint.js";
|
|
29
|
+
export * from "./fixtures.js";
|
|
30
|
+
export * from "./cards/CodeModeWorkspace.js";
|
|
31
|
+
export * from "./cards/HomeCard.js";
|
|
32
|
+
export * from "./cards/AccountCard.js";
|
|
33
|
+
export * from "./cards/CodeCard.js";
|
|
34
|
+
export * from "./cards/ShareCard.js";
|
|
35
|
+
export * from "./cards/share-copy.js";
|
|
36
|
+
export * from "./cards/share-actions.js";
|
|
37
|
+
export * from "./cards/share-parts.js";
|
|
38
|
+
export * from "./cards/share-card.styles.js";
|
|
39
|
+
export * from "./share-fixtures.js";
|
|
40
|
+
export * from "./cards/ShareDrills.js";
|
|
41
|
+
export * from "./cards/ShareLinkRows.js";
|
|
42
|
+
export * from "./VibeMenu.js";
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,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,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type Section = "home" | "settings" | "vibe" | "share";
|
|
2
|
+
export declare const SECTIONS: readonly Section[];
|
|
3
|
+
export declare const SECTION_TITLES: Readonly<Record<Section, string>>;
|
|
4
|
+
export type Drill = "look" | "details" | "help" | "handles" | "choose" | "access" | "members" | "member" | "notifications";
|
|
5
|
+
export declare const DRILL_SECTION: Readonly<Record<Drill, Section>>;
|
|
6
|
+
export interface MenuView {
|
|
7
|
+
readonly drill: Drill;
|
|
8
|
+
readonly memberKey?: string;
|
|
9
|
+
}
|
|
10
|
+
export type Banner = "publish" | "madeHere" | "remixInvite" | "accessWizard" | "savePrompt";
|
|
11
|
+
export type MenuPhase = "collapsed" | "strip" | "card";
|
|
12
|
+
export interface MenuState {
|
|
13
|
+
readonly phase: MenuPhase;
|
|
14
|
+
readonly section: Section | null;
|
|
15
|
+
readonly view: MenuView | null;
|
|
16
|
+
readonly banner: Banner | null;
|
|
17
|
+
}
|
|
18
|
+
export type MenuEvent = {
|
|
19
|
+
type: "PILL_TAP";
|
|
20
|
+
} | {
|
|
21
|
+
type: "ITEM_TAP";
|
|
22
|
+
section: Section;
|
|
23
|
+
} | {
|
|
24
|
+
type: "APP_TAP";
|
|
25
|
+
} | {
|
|
26
|
+
type: "ESCAPE";
|
|
27
|
+
} | {
|
|
28
|
+
type: "OPEN";
|
|
29
|
+
section: Section;
|
|
30
|
+
view?: MenuView;
|
|
31
|
+
banner?: Banner;
|
|
32
|
+
} | {
|
|
33
|
+
type: "DRILL";
|
|
34
|
+
view: MenuView;
|
|
35
|
+
} | {
|
|
36
|
+
type: "LEAVE_DRILL";
|
|
37
|
+
};
|
|
38
|
+
export declare const INITIAL_MENU_STATE: MenuState;
|
|
39
|
+
export declare function isSection(v: unknown): v is Section;
|
|
40
|
+
export declare function viewBelongsTo(section: Section, view: MenuView): boolean;
|
|
41
|
+
export declare function reduceMenu(state: MenuState, event: MenuEvent): MenuState;
|
|
42
|
+
export declare function useVibeMenuState(initial?: MenuState): readonly [MenuState, (e: MenuEvent) => void];
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { useReducer } from "react";
|
|
2
|
+
export const SECTIONS = Object.freeze(["home", "settings", "vibe", "share"]);
|
|
3
|
+
export const SECTION_TITLES = Object.freeze({
|
|
4
|
+
home: "Home",
|
|
5
|
+
settings: "Account",
|
|
6
|
+
vibe: "Code",
|
|
7
|
+
share: "Share",
|
|
8
|
+
});
|
|
9
|
+
export const DRILL_SECTION = Object.freeze({
|
|
10
|
+
look: "vibe",
|
|
11
|
+
details: "vibe",
|
|
12
|
+
help: "vibe",
|
|
13
|
+
handles: "settings",
|
|
14
|
+
choose: "settings",
|
|
15
|
+
access: "share",
|
|
16
|
+
members: "share",
|
|
17
|
+
member: "share",
|
|
18
|
+
notifications: "share",
|
|
19
|
+
});
|
|
20
|
+
export const INITIAL_MENU_STATE = Object.freeze({ phase: "collapsed", section: null, view: null, banner: null });
|
|
21
|
+
const STRIP = Object.freeze({ phase: "strip", section: null, view: null, banner: null });
|
|
22
|
+
export function isSection(v) {
|
|
23
|
+
return SECTIONS.some((s) => s === v);
|
|
24
|
+
}
|
|
25
|
+
export function viewBelongsTo(section, view) {
|
|
26
|
+
if (DRILL_SECTION[view.drill] !== section)
|
|
27
|
+
return false;
|
|
28
|
+
if (view.drill === "member")
|
|
29
|
+
return view.memberKey !== undefined && view.memberKey !== "";
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
function openCard(target) {
|
|
33
|
+
return { phase: "card", section: target.section, view: target.view, banner: target.banner };
|
|
34
|
+
}
|
|
35
|
+
function mainView(state) {
|
|
36
|
+
return { phase: state.phase, section: state.section, view: null, banner: state.banner };
|
|
37
|
+
}
|
|
38
|
+
function isDrilled(state) {
|
|
39
|
+
return state.phase === "card" && state.view !== null;
|
|
40
|
+
}
|
|
41
|
+
export function reduceMenu(state, event) {
|
|
42
|
+
switch (event.type) {
|
|
43
|
+
case "PILL_TAP":
|
|
44
|
+
return state.phase === "collapsed" ? STRIP : INITIAL_MENU_STATE;
|
|
45
|
+
case "ITEM_TAP":
|
|
46
|
+
if (state.phase === "collapsed")
|
|
47
|
+
return state;
|
|
48
|
+
if (isSection(event.section) === false)
|
|
49
|
+
return state;
|
|
50
|
+
if (state.phase === "card" && state.section === event.section) {
|
|
51
|
+
return isDrilled(state) ? mainView(state) : STRIP;
|
|
52
|
+
}
|
|
53
|
+
return openCard({ section: event.section, view: null, banner: null });
|
|
54
|
+
case "APP_TAP":
|
|
55
|
+
return INITIAL_MENU_STATE;
|
|
56
|
+
case "ESCAPE":
|
|
57
|
+
if (isDrilled(state))
|
|
58
|
+
return mainView(state);
|
|
59
|
+
return state.phase === "card" ? STRIP : INITIAL_MENU_STATE;
|
|
60
|
+
case "OPEN": {
|
|
61
|
+
if (isSection(event.section) === false)
|
|
62
|
+
return state;
|
|
63
|
+
const view = event.view !== undefined && viewBelongsTo(event.section, event.view) ? event.view : null;
|
|
64
|
+
return openCard({ section: event.section, view, banner: event.banner ?? null });
|
|
65
|
+
}
|
|
66
|
+
case "DRILL":
|
|
67
|
+
if (state.phase !== "card" || state.section === null)
|
|
68
|
+
return state;
|
|
69
|
+
if (viewBelongsTo(state.section, event.view) === false)
|
|
70
|
+
return state;
|
|
71
|
+
return { phase: state.phase, section: state.section, view: event.view, banner: state.banner };
|
|
72
|
+
case "LEAVE_DRILL":
|
|
73
|
+
return isDrilled(state) ? mainView(state) : state;
|
|
74
|
+
default:
|
|
75
|
+
return state;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function useVibeMenuState(initial) {
|
|
79
|
+
const [state, dispatch] = useReducer(reduceMenu, initial ?? INITIAL_MENU_STATE);
|
|
80
|
+
return [state, dispatch];
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=menu-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-state.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/menu-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type MomentKind = "progress" | "summary" | "question" | "problem" | "offer" | "credits";
|
|
2
|
+
export interface MomentItem {
|
|
3
|
+
readonly kind: MomentKind;
|
|
4
|
+
readonly text: string;
|
|
5
|
+
readonly options?: readonly string[];
|
|
6
|
+
readonly actions?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface CurrentMoment {
|
|
9
|
+
readonly pinned: MomentItem | null;
|
|
10
|
+
readonly live: MomentItem | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function currentMoment(items: readonly MomentItem[]): CurrentMoment;
|
|
13
|
+
export declare const MOMENT_FIXTURES: Readonly<Record<string, readonly MomentItem[]>>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const PINNED_ORDER = Object.freeze(["credits", "problem", "question", "offer"]);
|
|
2
|
+
function firstPinned(items) {
|
|
3
|
+
for (const kind of PINNED_ORDER) {
|
|
4
|
+
const hit = items.find((i) => i.kind === kind);
|
|
5
|
+
if (hit !== undefined)
|
|
6
|
+
return hit;
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
function lastSummary(items) {
|
|
11
|
+
const summaries = items.filter((i) => i.kind === "summary");
|
|
12
|
+
return summaries.length === 0 ? null : summaries[summaries.length - 1];
|
|
13
|
+
}
|
|
14
|
+
export function currentMoment(items) {
|
|
15
|
+
const pinned = firstPinned(items);
|
|
16
|
+
const progress = items.find((i) => i.kind === "progress") ?? null;
|
|
17
|
+
if (pinned !== null)
|
|
18
|
+
return { pinned, live: progress };
|
|
19
|
+
if (progress !== null)
|
|
20
|
+
return { pinned: null, live: progress };
|
|
21
|
+
return { pinned: null, live: lastSummary(items) };
|
|
22
|
+
}
|
|
23
|
+
const QUESTION = {
|
|
24
|
+
kind: "question",
|
|
25
|
+
text: "Should finished tasks disappear or move to the bottom?",
|
|
26
|
+
options: ["Disappear", "Move to the bottom"],
|
|
27
|
+
};
|
|
28
|
+
const BUILDING = { kind: "progress", text: "Adding due dates…" };
|
|
29
|
+
export const MOMENT_FIXTURES = Object.freeze({
|
|
30
|
+
none: [],
|
|
31
|
+
building: [BUILDING],
|
|
32
|
+
summary: [{ kind: "summary", text: "Tasks now have due dates." }],
|
|
33
|
+
question: [QUESTION],
|
|
34
|
+
problem: [{ kind: "problem", text: "Your app hit an error when it opened.", actions: ["Fix this"] }],
|
|
35
|
+
offer: [{ kind: "offer", text: "This app came with example data. Add it?", actions: ["Add", "Not now"] }],
|
|
36
|
+
credits: [{ kind: "credits", text: "You're out of credits for this month.", actions: ["Top up"] }],
|
|
37
|
+
"question+building": [QUESTION, BUILDING],
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=moments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moments.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/moments.ts"],"names":[],"mappings":"AAmBA,MAAM,YAAY,GAA0B,MAAM,CAAC,MAAM,CAAe,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAErH,SAAS,WAAW,CAAC,KAA4B;IAC/C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAA4B;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC5D,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA4B;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;IAElE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC/D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,QAAQ,GAAe;IAC3B,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,wDAAwD;IAC9D,OAAO,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AACF,MAAM,QAAQ,GAAe,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;AAE7E,MAAM,CAAC,MAAM,eAAe,GAAoD,MAAM,CAAC,MAAM,CAAC;IAC5F,IAAI,EAAE,EAAE;IACR,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;IACjE,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,uCAAuC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IACpG,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,0CAA0C,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAGzG,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,uCAAuC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClG,mBAAmB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface MenuMotion {
|
|
2
|
+
readonly openMs: 280;
|
|
3
|
+
readonly closeMs: 240;
|
|
4
|
+
readonly openEase: "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
5
|
+
readonly closeEase: "cubic-bezier(0.64, 0, 0.78, 0)";
|
|
6
|
+
readonly stripStaggerMs: 30;
|
|
7
|
+
readonly settleMs: 160;
|
|
8
|
+
readonly copiedMs: 1500;
|
|
9
|
+
}
|
|
10
|
+
export declare const MOTION: MenuMotion;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const MOTION = Object.freeze({
|
|
2
|
+
openMs: 280,
|
|
3
|
+
closeMs: 240,
|
|
4
|
+
openEase: "cubic-bezier(0.22, 1, 0.36, 1)",
|
|
5
|
+
closeEase: "cubic-bezier(0.64, 0, 0.78, 0)",
|
|
6
|
+
stripStaggerMs: 30,
|
|
7
|
+
settleMs: 160,
|
|
8
|
+
copiedMs: 1500,
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/motion.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,MAAM,GAAe,MAAM,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,gCAAgC;IAC1C,SAAS,EAAE,gCAAgC;IAC3C,cAAc,EAAE,EAAE;IAClB,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type EditorTabKey } from "../editor-tabs.js";
|
|
2
|
+
import type { CodeTab } from "./code-tabs.js";
|
|
3
|
+
import type { Banner, MenuEvent, MenuView, Section } from "./menu-state.js";
|
|
4
|
+
export type ViewerRole = "owner" | "member" | "visitor" | "signedOut";
|
|
5
|
+
export interface OpeningViewer {
|
|
6
|
+
readonly role: ViewerRole;
|
|
7
|
+
readonly canEditSource: boolean;
|
|
8
|
+
readonly identityPending: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type Opening = {
|
|
11
|
+
kind: "switchTap";
|
|
12
|
+
} | {
|
|
13
|
+
kind: "viewParam";
|
|
14
|
+
view: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "madeHere";
|
|
17
|
+
} | {
|
|
18
|
+
kind: "remixInvite";
|
|
19
|
+
} | {
|
|
20
|
+
kind: "startChips";
|
|
21
|
+
} | {
|
|
22
|
+
kind: "bootError";
|
|
23
|
+
} | {
|
|
24
|
+
kind: "creditsWall";
|
|
25
|
+
} | {
|
|
26
|
+
kind: "writeRejectedSignedOut";
|
|
27
|
+
} | {
|
|
28
|
+
kind: "handleRequired";
|
|
29
|
+
} | {
|
|
30
|
+
kind: "draftChiclet";
|
|
31
|
+
} | {
|
|
32
|
+
kind: "pendingBadge";
|
|
33
|
+
} | {
|
|
34
|
+
kind: "accessWizard";
|
|
35
|
+
};
|
|
36
|
+
export interface ResolvedOpening {
|
|
37
|
+
readonly section: Section;
|
|
38
|
+
readonly view: MenuView | null;
|
|
39
|
+
readonly banner: Banner | null;
|
|
40
|
+
readonly codeModeForVisit: boolean | null;
|
|
41
|
+
readonly codeTab: CodeTab | null;
|
|
42
|
+
}
|
|
43
|
+
export declare function editorTabForViewParam(view: unknown): EditorTabKey | null;
|
|
44
|
+
export declare function viewParamOpensMenu(view: unknown): boolean;
|
|
45
|
+
export declare function resolveOpening(opening: Opening, viewer: OpeningViewer): ResolvedOpening;
|
|
46
|
+
export declare function openEventFor(resolved: ResolvedOpening): MenuEvent;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { isEditorTabKey } from "../editor-tabs.js";
|
|
2
|
+
export function editorTabForViewParam(view) {
|
|
3
|
+
if (view === "chat")
|
|
4
|
+
return "requests";
|
|
5
|
+
return isEditorTabKey(view) ? view : null;
|
|
6
|
+
}
|
|
7
|
+
export function viewParamOpensMenu(view) {
|
|
8
|
+
return editorTabForViewParam(view) !== null;
|
|
9
|
+
}
|
|
10
|
+
function hasTools(viewer) {
|
|
11
|
+
if (viewer.identityPending === true)
|
|
12
|
+
return false;
|
|
13
|
+
return viewer.role === "owner" || viewer.canEditSource === true;
|
|
14
|
+
}
|
|
15
|
+
function landing(target) {
|
|
16
|
+
return {
|
|
17
|
+
section: target.section,
|
|
18
|
+
view: target.view ?? null,
|
|
19
|
+
banner: target.banner ?? null,
|
|
20
|
+
codeModeForVisit: target.codeModeForVisit ?? null,
|
|
21
|
+
codeTab: target.codeTab ?? null,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function switchLanding(viewer) {
|
|
25
|
+
return hasTools(viewer) ? landing({ section: "vibe" }) : landing({ section: "share" });
|
|
26
|
+
}
|
|
27
|
+
function plainCode(viewer) {
|
|
28
|
+
return hasTools(viewer) ? landing({ section: "vibe", codeModeForVisit: false }) : landing({ section: "vibe" });
|
|
29
|
+
}
|
|
30
|
+
function codeModeTab(viewer, codeTab) {
|
|
31
|
+
return hasTools(viewer) ? landing({ section: "vibe", codeModeForVisit: true, codeTab }) : landing({ section: "vibe" });
|
|
32
|
+
}
|
|
33
|
+
function resolveViewParam(view, viewer) {
|
|
34
|
+
const tab = editorTabForViewParam(view);
|
|
35
|
+
switch (tab) {
|
|
36
|
+
case null:
|
|
37
|
+
return switchLanding(viewer);
|
|
38
|
+
case "standing":
|
|
39
|
+
return landing({ section: "share", view: { drill: "access" } });
|
|
40
|
+
case "edit-chat":
|
|
41
|
+
return plainCode(viewer);
|
|
42
|
+
case "style":
|
|
43
|
+
return hasTools(viewer)
|
|
44
|
+
? landing({ section: "vibe", view: { drill: "look" }, codeTab: "look" })
|
|
45
|
+
: landing({ section: "vibe" });
|
|
46
|
+
case "faq":
|
|
47
|
+
return hasTools(viewer)
|
|
48
|
+
? landing({ section: "vibe", view: { drill: "help" }, codeTab: "help" })
|
|
49
|
+
: landing({ section: "vibe", view: { drill: "help" } });
|
|
50
|
+
case "code":
|
|
51
|
+
case "files":
|
|
52
|
+
case "data":
|
|
53
|
+
return codeModeTab(viewer, tab);
|
|
54
|
+
case "settings":
|
|
55
|
+
return codeModeTab(viewer, "app-settings");
|
|
56
|
+
case "requests":
|
|
57
|
+
return codeModeTab(viewer, "ai-requests");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function resolveOpening(opening, viewer) {
|
|
61
|
+
switch (opening.kind) {
|
|
62
|
+
case "switchTap":
|
|
63
|
+
return switchLanding(viewer);
|
|
64
|
+
case "viewParam":
|
|
65
|
+
return resolveViewParam(opening.view, viewer);
|
|
66
|
+
case "madeHere":
|
|
67
|
+
return landing({ section: "home", banner: "madeHere" });
|
|
68
|
+
case "remixInvite":
|
|
69
|
+
return landing({ section: "vibe", banner: "remixInvite" });
|
|
70
|
+
case "startChips":
|
|
71
|
+
return plainCode(viewer);
|
|
72
|
+
case "bootError":
|
|
73
|
+
return landing({ section: "vibe" });
|
|
74
|
+
case "creditsWall":
|
|
75
|
+
return landing({ section: "vibe" });
|
|
76
|
+
case "writeRejectedSignedOut":
|
|
77
|
+
return landing({ section: "settings", banner: "savePrompt" });
|
|
78
|
+
case "handleRequired":
|
|
79
|
+
return landing({ section: "settings", view: { drill: "choose" } });
|
|
80
|
+
case "draftChiclet":
|
|
81
|
+
return landing({ section: "share", banner: "publish" });
|
|
82
|
+
case "pendingBadge":
|
|
83
|
+
return landing({ section: "share" });
|
|
84
|
+
case "accessWizard":
|
|
85
|
+
return landing({ section: "share", banner: "accessWizard" });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function openEventFor(resolved) {
|
|
89
|
+
return { type: "OPEN", section: resolved.section, view: resolved.view ?? undefined, banner: resolved.banner ?? undefined };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=open-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-resolver.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/open-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AccessPosture = "restricted" | "public";
|
|
3
|
+
export type AccessToggleState = "idle" | "pending" | "failed";
|
|
4
|
+
export interface AccessToggleProps {
|
|
5
|
+
readonly posture: AccessPosture;
|
|
6
|
+
readonly state: AccessToggleState;
|
|
7
|
+
readonly onPosture: (posture: AccessPosture) => void;
|
|
8
|
+
readonly onRetry: () => void;
|
|
9
|
+
readonly copyChip: React.ReactNode;
|
|
10
|
+
readonly kicker: boolean;
|
|
11
|
+
readonly loading?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function AccessToggle(props: AccessToggleProps): React.ReactElement;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Chip } from "./Chip.js";
|
|
3
|
+
import { Glyph } from "./Glyph.js";
|
|
4
|
+
import { nextRadioIndex } from "./radio-keys.js";
|
|
5
|
+
const POSTURES = [
|
|
6
|
+
{ value: "restricted", label: "Restricted" },
|
|
7
|
+
{ value: "public", label: "Public" },
|
|
8
|
+
];
|
|
9
|
+
const LINE = {
|
|
10
|
+
restricted: { glyph: "lock", text: "Only the people below can open this app." },
|
|
11
|
+
public: { glyph: "globe", text: "Anyone with the link can open this app." },
|
|
12
|
+
};
|
|
13
|
+
const FAILED = {
|
|
14
|
+
public: "Couldn't make it public. Try again",
|
|
15
|
+
restricted: "Couldn't make it restricted. Try again",
|
|
16
|
+
};
|
|
17
|
+
function otherPosture(posture) {
|
|
18
|
+
return posture === "public" ? "restricted" : "public";
|
|
19
|
+
}
|
|
20
|
+
export function AccessToggle(props) {
|
|
21
|
+
const radios = React.useRef([]);
|
|
22
|
+
const target = otherPosture(props.posture);
|
|
23
|
+
const line = LINE[props.posture];
|
|
24
|
+
const loading = props.loading === true;
|
|
25
|
+
function choose(index) {
|
|
26
|
+
if (loading === true)
|
|
27
|
+
return;
|
|
28
|
+
const option = POSTURES[index];
|
|
29
|
+
if (option === undefined)
|
|
30
|
+
return;
|
|
31
|
+
radios.current[index]?.focus();
|
|
32
|
+
if (option.value === props.posture)
|
|
33
|
+
return;
|
|
34
|
+
props.onPosture(option.value);
|
|
35
|
+
}
|
|
36
|
+
return (React.createElement(React.Fragment, null,
|
|
37
|
+
props.kicker ? React.createElement("p", { className: "vm-kicker" }, "Choose who can open this app") : null,
|
|
38
|
+
React.createElement("div", { className: "vm-access", role: "radiogroup", "aria-label": "Who can open this app", "aria-disabled": loading === true ? "true" : undefined }, POSTURES.map((option, index) => {
|
|
39
|
+
const active = option.value === props.posture;
|
|
40
|
+
const busy = loading === false && props.state === "pending" && option.value === target;
|
|
41
|
+
return (React.createElement("button", { key: option.value, ref: (el) => {
|
|
42
|
+
radios.current[index] = el;
|
|
43
|
+
}, className: active ? "is-active" : "", type: "button", role: "radio", "aria-checked": active, "aria-busy": busy ? true : undefined, "aria-disabled": loading === true ? "true" : undefined, tabIndex: active ? 0 : -1, "data-access": option.value, onClick: () => choose(index), onKeyDown: (event) => {
|
|
44
|
+
const next = nextRadioIndex({ key: event.key, index, count: POSTURES.length });
|
|
45
|
+
if (next === undefined)
|
|
46
|
+
return;
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
choose(next);
|
|
49
|
+
} }, busy ? (React.createElement(React.Fragment, null,
|
|
50
|
+
React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }),
|
|
51
|
+
"Securing\u2026")) : (option.label)));
|
|
52
|
+
})),
|
|
53
|
+
React.createElement("p", { className: "vm-access-line" },
|
|
54
|
+
React.createElement(Glyph, { name: line.glyph }),
|
|
55
|
+
React.createElement("span", null, props.state === "failed" ? FAILED[target] : line.text),
|
|
56
|
+
props.state === "failed" ? React.createElement(Chip, { label: "Retry", copy: true, onClick: () => props.onRetry() }) : props.copyChip)));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=AccessToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessToggle.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/AccessToggle.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type GlyphName } from "./Glyph.js";
|
|
3
|
+
export interface ActionPillProps {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly glyph?: GlyphName;
|
|
6
|
+
readonly solo?: boolean;
|
|
7
|
+
readonly caption?: React.ReactNode;
|
|
8
|
+
readonly ariaLabel?: string;
|
|
9
|
+
readonly href?: string;
|
|
10
|
+
readonly disabled?: boolean;
|
|
11
|
+
readonly onClick?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function ActionPill(props: ActionPillProps): React.ReactElement;
|
|
14
|
+
export interface TextButtonProps {
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly onClick: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function TextButton(props: TextButtonProps): React.ReactElement;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Glyph } from "./Glyph.js";
|
|
3
|
+
export function ActionPill(props) {
|
|
4
|
+
const className = props.solo === true ? "vm-ask is-solo" : "vm-ask";
|
|
5
|
+
const disabled = props.disabled === true;
|
|
6
|
+
const content = (React.createElement(React.Fragment, null,
|
|
7
|
+
React.createElement("span", null, props.label),
|
|
8
|
+
React.createElement(Glyph, { name: props.glyph ?? "arrow-right" })));
|
|
9
|
+
const pill = props.href !== undefined && disabled === false ? (React.createElement("a", { className: className, href: props.href, "aria-label": props.ariaLabel, onClick: props.onClick }, content)) : (React.createElement("button", { className: className, type: "button", "aria-label": props.ariaLabel, "aria-disabled": disabled ? "true" : undefined, onClick: () => {
|
|
10
|
+
if (disabled)
|
|
11
|
+
return;
|
|
12
|
+
props.onClick?.();
|
|
13
|
+
} }, content));
|
|
14
|
+
return (React.createElement(React.Fragment, null,
|
|
15
|
+
pill,
|
|
16
|
+
props.caption === undefined ? null : React.createElement("p", { className: "vm-sub" }, props.caption)));
|
|
17
|
+
}
|
|
18
|
+
export function TextButton(props) {
|
|
19
|
+
return (React.createElement("button", { className: "vm-textbtn", type: "button", onClick: props.onClick }, props.label));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ActionPill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionPill.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/ActionPill.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AAoBnD,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,CACd;QACE,kCAAO,KAAK,CAAC,KAAK,CAAQ;QAC1B,oBAAC,KAAK,IAAC,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa,GAAI,CAC5C,CACJ,CAAC;IACF,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAC/C,2BAAG,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,gBAAc,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAC3F,OAAO,CACN,CACL,CAAC,CAAC,CAAC,CACF,gCACE,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,QAAQ,gBACD,KAAK,CAAC,SAAS,mBACZ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC5C,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,QAAQ;gBAAE,OAAO;YACrB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACpB,CAAC,IAEA,OAAO,CACD,CACV,CAAC;IACJ,OAAO,CACL;QACG,IAAI;QACJ,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAAG,SAAS,EAAC,QAAQ,IAAE,KAAK,CAAC,OAAO,CAAK,CAC9E,CACJ,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,CACL,gCAAQ,SAAS,EAAC,YAAY,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,IAChE,KAAK,CAAC,KAAK,CACL,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Glyph } from "./Glyph.js";
|
|
3
|
+
export function BackRow(props) {
|
|
4
|
+
return (React.createElement("button", { className: props.top === true ? "vm-back is-top" : "vm-back", type: "button", "aria-label": `Back to ${props.card}`, "data-back": "", onClick: props.onBack },
|
|
5
|
+
React.createElement("span", { className: "vm-dot" },
|
|
6
|
+
React.createElement(Glyph, { name: "arrow-left" })),
|
|
7
|
+
React.createElement("span", { className: "vm-label" }, "Back"),
|
|
8
|
+
React.createElement("span", { className: "vm-back-name" }, props.name)));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=BackRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/BackRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAanC,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,OAAO,CACL,gCACE,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAC5D,IAAI,EAAC,QAAQ,gBACD,WAAW,KAAK,CAAC,IAAI,EAAE,eACzB,EAAE,EACZ,OAAO,EAAE,KAAK,CAAC,MAAM;QAErB,8BAAM,SAAS,EAAC,QAAQ;YACtB,oBAAC,KAAK,IAAC,IAAI,EAAC,YAAY,GAAG,CACtB;QACP,8BAAM,SAAS,EAAC,UAAU,WAAY;QACtC,8BAAM,SAAS,EAAC,cAAc,IAAE,KAAK,CAAC,IAAI,CAAQ,CAC3C,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ChipProps {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly ghost?: boolean;
|
|
5
|
+
readonly name?: boolean;
|
|
6
|
+
readonly copy?: boolean;
|
|
7
|
+
readonly ariaLabel?: string;
|
|
8
|
+
readonly disabled?: boolean;
|
|
9
|
+
readonly onClick: () => void;
|
|
10
|
+
readonly chipRef?: React.Ref<HTMLButtonElement>;
|
|
11
|
+
readonly style?: React.CSSProperties;
|
|
12
|
+
}
|
|
13
|
+
export declare function Chip(props: ChipProps): React.ReactElement;
|
|
14
|
+
export declare function ChipRow(props: {
|
|
15
|
+
readonly children: React.ReactNode;
|
|
16
|
+
}): React.ReactElement;
|
|
17
|
+
export interface SuggestionFastPathState {
|
|
18
|
+
readonly shielded?: boolean;
|
|
19
|
+
readonly jump?: boolean;
|
|
20
|
+
readonly canBless?: boolean;
|
|
21
|
+
readonly canUnbless?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SuggestionFastPath {
|
|
24
|
+
readonly text: string;
|
|
25
|
+
readonly state: SuggestionFastPathState;
|
|
26
|
+
}
|
|
27
|
+
export interface SuggestionsProps {
|
|
28
|
+
readonly items: readonly string[];
|
|
29
|
+
readonly onPick: (text: string) => void;
|
|
30
|
+
readonly fastPaths?: readonly SuggestionFastPath[] | null;
|
|
31
|
+
readonly onToggleFastPath?: ((text: string) => void) | null;
|
|
32
|
+
}
|
|
33
|
+
export declare function Suggestions(props: SuggestionsProps): React.ReactElement | null;
|
|
34
|
+
export interface RefreshButtonProps {
|
|
35
|
+
readonly onRefresh: () => void;
|
|
36
|
+
}
|
|
37
|
+
export declare function RefreshButton(props: RefreshButtonProps): React.ReactElement;
|