@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,386 @@
|
|
|
1
|
+
import { MENU_GEOMETRY } from "../geometry.js";
|
|
2
|
+
import { MOTION } from "../motion.js";
|
|
3
|
+
const G = MENU_GEOMETRY;
|
|
4
|
+
export const VIBE_MENU_SHELL_CSS = `
|
|
5
|
+
.vm-layer,
|
|
6
|
+
.vm-layer *,
|
|
7
|
+
.vm-layer *::before,
|
|
8
|
+
.vm-layer *::after {
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
}
|
|
11
|
+
/* The full-viewport layer: a size container (Code mode and the caps read cqh)
|
|
12
|
+
that takes no hits itself. Not a backdrop: clicks fall through to the app. */
|
|
13
|
+
.vm-layer {
|
|
14
|
+
position: fixed;
|
|
15
|
+
inset: 0;
|
|
16
|
+
z-index: 50;
|
|
17
|
+
pointer-events: none;
|
|
18
|
+
container-type: size;
|
|
19
|
+
}
|
|
20
|
+
/* Stories and screenshot fixtures place the layer inside a sized box. */
|
|
21
|
+
.vm-layer[data-frame="contained"] {
|
|
22
|
+
position: absolute;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* ---------- the anchor: the pill's box, edge px from the corner ---------- */
|
|
26
|
+
.vm-layer .vm-menu {
|
|
27
|
+
--vm-edge: ${G.edgeDesktop}px;
|
|
28
|
+
--vm-ring: ${G.ring}px;
|
|
29
|
+
--vm-pill-w: ${G.pillW}px;
|
|
30
|
+
--vm-pill-h: ${G.pillH}px;
|
|
31
|
+
--vm-bar-h: ${G.barH}px;
|
|
32
|
+
--vm-tab-w: ${G.tabW}px;
|
|
33
|
+
--vm-tab-inset: 9px; /* space-9: the bar's rhythm */
|
|
34
|
+
--vm-home-extra: ${G.homeExtra}px;
|
|
35
|
+
--vm-band: ${G.band}px;
|
|
36
|
+
--vm-pill-flat-inset: ${G.pillFlatInset}px;
|
|
37
|
+
--vm-safe-bottom: env(safe-area-inset-bottom, 0px);
|
|
38
|
+
--vm-glass-w: calc(var(--vm-pill-w) + 2 * var(--vm-ring));
|
|
39
|
+
/* The bar stops halfway under the glass: Share's colour wraps the pill's left curve. */
|
|
40
|
+
--vm-bar-end: calc(var(--vm-glass-w) / 2);
|
|
41
|
+
--vm-menu-open-w: calc(var(--vm-tab-w) * 4 + var(--vm-home-extra) + var(--vm-bar-end) + 2px);
|
|
42
|
+
/* The card's right edge stops where the pill artwork's flat top ends. */
|
|
43
|
+
--vm-card-w: calc(var(--vm-menu-open-w) + var(--vm-bar-end) - var(--vm-ring) - var(--vm-pill-flat-inset));
|
|
44
|
+
--vm-frame-limit: calc(100cqh - 2 * var(--vm-edge) - var(--vm-safe-bottom) - 80px);
|
|
45
|
+
--vm-open-ms: ${MOTION.openMs}ms;
|
|
46
|
+
--vm-close-ms: ${MOTION.closeMs}ms;
|
|
47
|
+
--vm-open-ease: ${MOTION.openEase};
|
|
48
|
+
--vm-close-ease: ${MOTION.closeEase};
|
|
49
|
+
--vm-stagger-ms: ${MOTION.stripStaggerMs}ms;
|
|
50
|
+
--vm-settle-ms: ${MOTION.settleMs}ms;
|
|
51
|
+
position: absolute;
|
|
52
|
+
right: calc(var(--vm-edge) + var(--vm-ring));
|
|
53
|
+
bottom: calc(var(--vm-edge) + var(--vm-ring) + var(--vm-safe-bottom));
|
|
54
|
+
height: var(--vm-pill-h);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* ---------- the switch ---------- */
|
|
58
|
+
.vm-layer .vm-pill {
|
|
59
|
+
position: absolute;
|
|
60
|
+
right: 0;
|
|
61
|
+
bottom: 0;
|
|
62
|
+
left: auto;
|
|
63
|
+
top: auto;
|
|
64
|
+
width: var(--vm-pill-w);
|
|
65
|
+
height: var(--vm-pill-h);
|
|
66
|
+
padding: 0;
|
|
67
|
+
border: 0;
|
|
68
|
+
background: none;
|
|
69
|
+
overflow: visible;
|
|
70
|
+
cursor: pointer;
|
|
71
|
+
z-index: 4; /* above the glass (3) and the bar (2) */
|
|
72
|
+
pointer-events: auto;
|
|
73
|
+
touch-action: manipulation;
|
|
74
|
+
}
|
|
75
|
+
.vm-layer .vm-pill .vm-badge {
|
|
76
|
+
position: absolute;
|
|
77
|
+
top: -6px;
|
|
78
|
+
right: 4px;
|
|
79
|
+
}
|
|
80
|
+
/* The obsidian oval, fitted around the pill only: above the bar, below the pill. */
|
|
81
|
+
.vm-layer .vm-glass {
|
|
82
|
+
position: absolute;
|
|
83
|
+
right: calc(-1 * var(--vm-ring));
|
|
84
|
+
bottom: calc(-1 * var(--vm-ring));
|
|
85
|
+
width: var(--vm-glass-w);
|
|
86
|
+
height: calc(var(--vm-pill-h) + 2 * var(--vm-ring));
|
|
87
|
+
z-index: 3;
|
|
88
|
+
pointer-events: none;
|
|
89
|
+
}
|
|
90
|
+
/* Beside the collapsed switch: the Draft/Locked chiclet, then the build line. */
|
|
91
|
+
.vm-layer .vm-beside {
|
|
92
|
+
position: absolute;
|
|
93
|
+
right: calc(var(--vm-pill-w) + var(--vm-ring) + 6px);
|
|
94
|
+
bottom: 0;
|
|
95
|
+
height: var(--vm-pill-h);
|
|
96
|
+
display: flex;
|
|
97
|
+
flex-direction: row-reverse;
|
|
98
|
+
align-items: center;
|
|
99
|
+
gap: 6px;
|
|
100
|
+
pointer-events: none;
|
|
101
|
+
}
|
|
102
|
+
.vm-layer .vm-menu[data-bar="open"] .vm-beside {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
.vm-layer .vm-chiclet {
|
|
106
|
+
border: 0;
|
|
107
|
+
cursor: pointer;
|
|
108
|
+
pointer-events: auto;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
}
|
|
111
|
+
.vm-layer .vm-closed-status {
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
max-width: min(260px, calc(100cqw - 2 * var(--vm-edge) - var(--vm-pill-w) - 80px));
|
|
114
|
+
}
|
|
115
|
+
.vm-layer .vm-closed-status-line {
|
|
116
|
+
padding: 3px 5px;
|
|
117
|
+
border-radius: 3px;
|
|
118
|
+
background: var(--card-bg);
|
|
119
|
+
color: var(--muted);
|
|
120
|
+
font: 12px/18px var(--font-tab);
|
|
121
|
+
white-space: nowrap;
|
|
122
|
+
overflow: hidden;
|
|
123
|
+
text-overflow: ellipsis;
|
|
124
|
+
transform: translateX(calc(100% + 6px));
|
|
125
|
+
transition: transform var(--vm-close-ms) var(--vm-open-ease);
|
|
126
|
+
}
|
|
127
|
+
.vm-layer .vm-closed-status-line[data-revealed="true"] {
|
|
128
|
+
transform: translateX(0);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* ---------- the bar: window / sliding bar / counter-sliding tabs ---------- */
|
|
132
|
+
.vm-layer .vm-strip {
|
|
133
|
+
--vm-strip-w: var(--vm-menu-open-w);
|
|
134
|
+
/* Collapsed slide distance: everything but the part under the pill. */
|
|
135
|
+
--vm-slide-max: calc(var(--vm-strip-w) - var(--vm-bar-end));
|
|
136
|
+
position: absolute;
|
|
137
|
+
right: calc(var(--vm-bar-end) - var(--vm-ring));
|
|
138
|
+
bottom: calc(-1 * var(--vm-ring));
|
|
139
|
+
width: var(--vm-strip-w);
|
|
140
|
+
height: var(--vm-bar-h);
|
|
141
|
+
overflow: hidden;
|
|
142
|
+
z-index: 2;
|
|
143
|
+
pointer-events: auto;
|
|
144
|
+
}
|
|
145
|
+
.vm-layer .vm-menu[data-bar="closed"] .vm-strip {
|
|
146
|
+
pointer-events: none;
|
|
147
|
+
}
|
|
148
|
+
.vm-layer .vm-strip-slide {
|
|
149
|
+
display: block;
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 100%;
|
|
152
|
+
border: 2px solid var(--line);
|
|
153
|
+
border-right: 0; /* the square end is tucked under the pill */
|
|
154
|
+
/* The top-left corner squares off while a card stands on it: the sequencer
|
|
155
|
+
writes --bar-tl from the same progress value as the outline. */
|
|
156
|
+
border-radius: var(--bar-tl, calc(var(--vm-bar-h) / 2)) 0 0 calc(var(--vm-bar-h) / 2);
|
|
157
|
+
overflow: hidden;
|
|
158
|
+
background: var(--card-bg);
|
|
159
|
+
transform: translateX(var(--vm-slide-max));
|
|
160
|
+
will-change: transform;
|
|
161
|
+
transition: transform var(--vm-close-ms) var(--vm-close-ease);
|
|
162
|
+
}
|
|
163
|
+
.vm-layer .vm-strip-inner {
|
|
164
|
+
display: flex;
|
|
165
|
+
justify-content: flex-end; /* right-packed: tabs hold their positions */
|
|
166
|
+
width: 100%;
|
|
167
|
+
height: 100%;
|
|
168
|
+
transform: translateX(calc(-1 * var(--vm-slide-max)));
|
|
169
|
+
will-change: transform;
|
|
170
|
+
transition: transform var(--vm-close-ms) var(--vm-close-ease);
|
|
171
|
+
}
|
|
172
|
+
.vm-layer .vm-menu[data-bar="open"] .vm-strip-slide,
|
|
173
|
+
.vm-layer .vm-menu[data-bar="open"] .vm-strip-inner {
|
|
174
|
+
transform: translateX(0px);
|
|
175
|
+
transition: transform var(--vm-open-ms) var(--vm-open-ease);
|
|
176
|
+
}
|
|
177
|
+
.vm-layer .vm-tab {
|
|
178
|
+
position: relative;
|
|
179
|
+
width: var(--vm-tab-w);
|
|
180
|
+
flex: none;
|
|
181
|
+
height: 100%;
|
|
182
|
+
display: flex;
|
|
183
|
+
align-items: center;
|
|
184
|
+
justify-content: flex-start;
|
|
185
|
+
border: 0;
|
|
186
|
+
padding: 0 0 0 var(--vm-tab-inset);
|
|
187
|
+
background: var(--accent);
|
|
188
|
+
cursor: pointer;
|
|
189
|
+
opacity: 1;
|
|
190
|
+
transition: opacity var(--vm-close-ms) var(--vm-close-ease);
|
|
191
|
+
touch-action: manipulation;
|
|
192
|
+
}
|
|
193
|
+
.vm-layer .vm-tab[data-section="home"] {
|
|
194
|
+
--i: 3;
|
|
195
|
+
width: calc(var(--vm-tab-w) + var(--vm-home-extra));
|
|
196
|
+
padding-left: calc(var(--vm-tab-inset) + var(--vm-home-extra) / 2);
|
|
197
|
+
}
|
|
198
|
+
.vm-layer .vm-tab[data-section="home"] .vm-tab-label {
|
|
199
|
+
left: calc(var(--vm-home-extra) / 2);
|
|
200
|
+
}
|
|
201
|
+
.vm-layer .vm-tab[data-section="settings"] {
|
|
202
|
+
--i: 2;
|
|
203
|
+
}
|
|
204
|
+
.vm-layer .vm-tab[data-section="vibe"] {
|
|
205
|
+
--i: 1;
|
|
206
|
+
}
|
|
207
|
+
.vm-layer .vm-tab[data-section="share"] {
|
|
208
|
+
--i: 0;
|
|
209
|
+
width: calc(var(--vm-tab-w) + var(--vm-bar-end)); /* runs on under the pill */
|
|
210
|
+
}
|
|
211
|
+
.vm-layer .vm-tab[data-section="share"] .vm-tab-label {
|
|
212
|
+
right: var(--vm-bar-end);
|
|
213
|
+
}
|
|
214
|
+
.vm-layer .vm-tab .vm-badge {
|
|
215
|
+
position: absolute;
|
|
216
|
+
top: 4px;
|
|
217
|
+
right: 6px;
|
|
218
|
+
}
|
|
219
|
+
.vm-layer .vm-tab[data-section="share"] .vm-badge {
|
|
220
|
+
right: calc(var(--vm-bar-end) + 6px); /* clear of the glass */
|
|
221
|
+
}
|
|
222
|
+
/* Retract: tabs stay solid while the bar carries them away, then vanish. */
|
|
223
|
+
.vm-layer .vm-menu[data-bar="closed"] .vm-tab {
|
|
224
|
+
opacity: 0;
|
|
225
|
+
transition: opacity 0s linear var(--vm-close-ms);
|
|
226
|
+
}
|
|
227
|
+
.vm-layer .vm-menu[data-bar="open"] .vm-tab {
|
|
228
|
+
transition: opacity var(--vm-open-ms) var(--vm-open-ease);
|
|
229
|
+
transition-delay: calc(var(--i) * var(--vm-stagger-ms));
|
|
230
|
+
}
|
|
231
|
+
.vm-layer .vm-menu.has-card .vm-tab:not(.is-active) {
|
|
232
|
+
opacity: var(--opacity-tab-inactive);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* ---------- the card: surface only; the outline draws its edge and band ---------- */
|
|
236
|
+
.vm-layer .vm-card {
|
|
237
|
+
position: absolute;
|
|
238
|
+
right: var(--vm-pill-flat-inset);
|
|
239
|
+
left: auto;
|
|
240
|
+
top: auto;
|
|
241
|
+
bottom: calc(var(--vm-pill-h) + var(--vm-ring)); /* flush on the bar's top edge */
|
|
242
|
+
z-index: 1;
|
|
243
|
+
width: var(--vm-card-w);
|
|
244
|
+
max-height: min(480px, var(--vm-frame-limit));
|
|
245
|
+
overflow: auto;
|
|
246
|
+
background: var(--card-bg);
|
|
247
|
+
color: var(--ink);
|
|
248
|
+
border-radius: 0;
|
|
249
|
+
will-change: clip-path;
|
|
250
|
+
contain: layout paint;
|
|
251
|
+
visibility: hidden; /* the sequencer shows it while it has any height */
|
|
252
|
+
pointer-events: auto;
|
|
253
|
+
}
|
|
254
|
+
.vm-layer .vm-card .vm-card-body {
|
|
255
|
+
padding-bottom: calc(16px + var(--vm-band)); /* clears the band drawn over it */
|
|
256
|
+
}
|
|
257
|
+
/* An open agent log and the Share card lift the cap to the frame limit. */
|
|
258
|
+
.vm-layer .vm-menu[data-log-open] .vm-card,
|
|
259
|
+
.vm-layer .vm-menu[data-section="share"] .vm-card {
|
|
260
|
+
max-height: var(--vm-frame-limit);
|
|
261
|
+
}
|
|
262
|
+
/* FirstBuildCard's fullHeight (VibeMenuShellProps.frameCap): every card lifts to the frame limit. */
|
|
263
|
+
.vm-layer[data-frame-cap] .vm-card {
|
|
264
|
+
max-height: var(--vm-frame-limit);
|
|
265
|
+
}
|
|
266
|
+
/* Code mode: a tall box (80% of the frame) and, on desktop, a wide one that
|
|
267
|
+
grows leftwards; the sequencer tweens between the two boxes. */
|
|
268
|
+
.vm-layer .vm-menu[data-code-mode] .vm-card {
|
|
269
|
+
height: 80cqh;
|
|
270
|
+
max-height: none;
|
|
271
|
+
width: min(1200px, calc(100cqw - 2 * var(--vm-edge) - var(--vm-ring) - var(--vm-pill-flat-inset)));
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-direction: column;
|
|
274
|
+
/* Only the tab body scrolls (smoke F3): the kicker, composer, moment and
|
|
275
|
+
tab strip stay on top, so the card itself never scrolls in Code mode. */
|
|
276
|
+
overflow: hidden;
|
|
277
|
+
}
|
|
278
|
+
.vm-layer .vm-menu[data-code-mode] .vm-card-body {
|
|
279
|
+
flex: 1;
|
|
280
|
+
min-height: 0;
|
|
281
|
+
display: flex;
|
|
282
|
+
flex-direction: column;
|
|
283
|
+
}
|
|
284
|
+
/* The agent log's clip: its open and shut rules live in T5's VIBE_MENU_CSS
|
|
285
|
+
(RULINGS.md R1); the sequencer eases its height inline over them. */
|
|
286
|
+
|
|
287
|
+
/* ---------- the outline: one stroke, the band and the colour column ---------- */
|
|
288
|
+
.vm-layer .vm-outline {
|
|
289
|
+
position: absolute;
|
|
290
|
+
left: 0;
|
|
291
|
+
top: 0;
|
|
292
|
+
width: 1px;
|
|
293
|
+
height: 1px;
|
|
294
|
+
overflow: visible;
|
|
295
|
+
z-index: 3; /* same as the glass, which comes later in the DOM and wins */
|
|
296
|
+
pointer-events: none;
|
|
297
|
+
display: none; /* the sequencer shows it while a card has any height */
|
|
298
|
+
}
|
|
299
|
+
.vm-layer .vm-outline .vm-band,
|
|
300
|
+
.vm-layer .vm-outline .vm-cover {
|
|
301
|
+
fill: var(--accent, transparent);
|
|
302
|
+
transition: fill var(--vm-settle-ms) var(--vm-open-ease);
|
|
303
|
+
}
|
|
304
|
+
.vm-layer .vm-outline .vm-edge {
|
|
305
|
+
fill: none;
|
|
306
|
+
stroke: var(--line);
|
|
307
|
+
stroke-width: 2;
|
|
308
|
+
stroke-linejoin: miter;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* ---------- phones: the bar and card span the width ---------- */
|
|
312
|
+
@container (max-width: ${G.phoneMaxWidth}px) {
|
|
313
|
+
.vm-layer .vm-menu {
|
|
314
|
+
--vm-edge: ${G.edgePhone}px;
|
|
315
|
+
left: var(--vm-edge);
|
|
316
|
+
}
|
|
317
|
+
.vm-layer .vm-strip {
|
|
318
|
+
--vm-strip-w: calc(100cqw - 2 * var(--vm-edge) - var(--vm-bar-end));
|
|
319
|
+
}
|
|
320
|
+
.vm-layer .vm-tab {
|
|
321
|
+
width: auto;
|
|
322
|
+
flex: 1 1 auto;
|
|
323
|
+
flex-direction: column;
|
|
324
|
+
align-items: center;
|
|
325
|
+
justify-content: center;
|
|
326
|
+
gap: 2px;
|
|
327
|
+
min-width: 0;
|
|
328
|
+
padding: 4px 2px;
|
|
329
|
+
}
|
|
330
|
+
.vm-layer .vm-tab-circle {
|
|
331
|
+
width: 22px;
|
|
332
|
+
height: 22px;
|
|
333
|
+
}
|
|
334
|
+
.vm-layer .vm-tab[data-section="home"] {
|
|
335
|
+
width: auto;
|
|
336
|
+
padding: 4px 2px 4px calc(2px + var(--vm-home-extra) * 0.7);
|
|
337
|
+
}
|
|
338
|
+
.vm-layer .vm-tab[data-section="share"] {
|
|
339
|
+
width: auto;
|
|
340
|
+
padding-right: var(--vm-bar-end);
|
|
341
|
+
flex-grow: 1;
|
|
342
|
+
}
|
|
343
|
+
.vm-layer .vm-tab-label {
|
|
344
|
+
position: static;
|
|
345
|
+
display: block;
|
|
346
|
+
font-size: 9.6px;
|
|
347
|
+
letter-spacing: 1px;
|
|
348
|
+
white-space: nowrap;
|
|
349
|
+
padding: 0 0 0 1px;
|
|
350
|
+
}
|
|
351
|
+
.vm-layer .vm-tab svg {
|
|
352
|
+
width: 12px;
|
|
353
|
+
height: 12px;
|
|
354
|
+
}
|
|
355
|
+
.vm-layer .vm-card,
|
|
356
|
+
.vm-layer .vm-menu[data-code-mode] .vm-card {
|
|
357
|
+
left: 0;
|
|
358
|
+
width: auto;
|
|
359
|
+
}
|
|
360
|
+
.vm-layer .vm-card {
|
|
361
|
+
max-height: min(560px, 70cqh, var(--vm-frame-limit));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
@container (max-width: ${G.narrowMaxWidth}px) {
|
|
365
|
+
.vm-layer .vm-tab-label {
|
|
366
|
+
position: absolute;
|
|
367
|
+
width: 1px;
|
|
368
|
+
height: 1px;
|
|
369
|
+
overflow: hidden;
|
|
370
|
+
clip: rect(0 0 0 0);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* ---------- reduced motion: every transition snaps ---------- */
|
|
375
|
+
@media (prefers-reduced-motion: reduce) {
|
|
376
|
+
.vm-layer .vm-menu *,
|
|
377
|
+
.vm-layer .vm-menu *::before {
|
|
378
|
+
transition: none !important;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
.vm-layer[data-reduced-motion="true"] .vm-menu *,
|
|
382
|
+
.vm-layer[data-reduced-motion="true"] .vm-menu *::before {
|
|
383
|
+
transition: none !important;
|
|
384
|
+
}
|
|
385
|
+
`;
|
|
386
|
+
//# sourceMappingURL=shell.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.styles.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/shell/shell.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAYtC,MAAM,CAAC,GAAG,aAAa,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;eAuBpB,CAAC,CAAC,WAAW;eACb,CAAC,CAAC,IAAI;iBACJ,CAAC,CAAC,KAAK;iBACP,CAAC,CAAC,KAAK;gBACR,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI;;qBAED,CAAC,CAAC,SAAS;eACjB,CAAC,CAAC,IAAI;0BACK,CAAC,CAAC,aAAa;;;;;;;;;kBASvB,MAAM,CAAC,MAAM;mBACZ,MAAM,CAAC,OAAO;oBACb,MAAM,CAAC,QAAQ;qBACd,MAAM,CAAC,SAAS;qBAChB,MAAM,CAAC,cAAc;oBACtB,MAAM,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAsQV,CAAC,CAAC,aAAa;;iBAEvB,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAkDH,CAAC,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;CAqBxC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RefObject } from "react";
|
|
2
|
+
import type { MenuState, Section } from "../menu-state.js";
|
|
3
|
+
import type { PresentStep, Shown } from "./menu-sequence.js";
|
|
4
|
+
export type SequencerStep = PresentStep | "resize";
|
|
5
|
+
export type LogDirection = "open" | "close";
|
|
6
|
+
export interface TabRefs {
|
|
7
|
+
readonly current: Record<Section, HTMLButtonElement | null>;
|
|
8
|
+
}
|
|
9
|
+
export interface MenuSequencerRefs {
|
|
10
|
+
readonly menu: RefObject<HTMLDivElement | null>;
|
|
11
|
+
readonly slide: RefObject<HTMLDivElement | null>;
|
|
12
|
+
readonly card: RefObject<HTMLElement | null>;
|
|
13
|
+
readonly body: RefObject<HTMLDivElement | null>;
|
|
14
|
+
readonly outline: RefObject<SVGSVGElement | null>;
|
|
15
|
+
readonly band: RefObject<SVGRectElement | null>;
|
|
16
|
+
readonly cover: RefObject<SVGRectElement | null>;
|
|
17
|
+
readonly edge: RefObject<SVGPathElement | null>;
|
|
18
|
+
readonly tabs: TabRefs;
|
|
19
|
+
}
|
|
20
|
+
export interface MenuSequencerInput {
|
|
21
|
+
readonly state: MenuState;
|
|
22
|
+
readonly contentKey: string;
|
|
23
|
+
readonly logOpen: boolean;
|
|
24
|
+
readonly reducedMotion: boolean | undefined;
|
|
25
|
+
readonly onStep?: (step: SequencerStep) => void;
|
|
26
|
+
readonly settledAtMount?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MenuSequencer {
|
|
29
|
+
readonly shown: Shown;
|
|
30
|
+
readonly refs: MenuSequencerRefs;
|
|
31
|
+
}
|
|
32
|
+
export declare function prefersReducedMotion(): boolean;
|
|
33
|
+
export declare function useMenuSequencer(input: MenuSequencerInput): MenuSequencer;
|