@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.
Files changed (222) hide show
  1. package/components/StyleControls.js +27 -3
  2. package/components/StyleControls.js.map +1 -1
  3. package/components/VibesSwitch.d.ts +1 -2
  4. package/components/VibesSwitch.js +4 -59
  5. package/components/VibesSwitch.js.map +1 -1
  6. package/components/chip-fast-path.d.ts +6 -0
  7. package/components/chip-fast-path.js +2 -0
  8. package/components/chip-fast-path.js.map +1 -0
  9. package/components/editor-tabs.d.ts +3 -0
  10. package/components/editor-tabs.js +1 -0
  11. package/components/editor-tabs.js.map +1 -1
  12. package/components/index.d.ts +2 -17
  13. package/components/index.js +2 -17
  14. package/components/index.js.map +1 -1
  15. package/components/vibe-menu/VibeMenu.d.ts +16 -0
  16. package/components/vibe-menu/VibeMenu.js +99 -0
  17. package/components/vibe-menu/VibeMenu.js.map +1 -0
  18. package/components/vibe-menu/cards/AccountCard.d.ts +40 -0
  19. package/components/vibe-menu/cards/AccountCard.js +234 -0
  20. package/components/vibe-menu/cards/AccountCard.js.map +1 -0
  21. package/components/vibe-menu/cards/CodeCard.d.ts +20 -0
  22. package/components/vibe-menu/cards/CodeCard.js +109 -0
  23. package/components/vibe-menu/cards/CodeCard.js.map +1 -0
  24. package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +31 -0
  25. package/components/vibe-menu/cards/CodeModeWorkspace.js +107 -0
  26. package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -0
  27. package/components/vibe-menu/cards/HomeCard.d.ts +22 -0
  28. package/components/vibe-menu/cards/HomeCard.js +64 -0
  29. package/components/vibe-menu/cards/HomeCard.js.map +1 -0
  30. package/components/vibe-menu/cards/ShareCard.d.ts +9 -0
  31. package/components/vibe-menu/cards/ShareCard.js +84 -0
  32. package/components/vibe-menu/cards/ShareCard.js.map +1 -0
  33. package/components/vibe-menu/cards/ShareDrills.d.ts +35 -0
  34. package/components/vibe-menu/cards/ShareDrills.js +146 -0
  35. package/components/vibe-menu/cards/ShareDrills.js.map +1 -0
  36. package/components/vibe-menu/cards/ShareLinkRows.d.ts +6 -0
  37. package/components/vibe-menu/cards/ShareLinkRows.js +27 -0
  38. package/components/vibe-menu/cards/ShareLinkRows.js.map +1 -0
  39. package/components/vibe-menu/cards/share-actions.d.ts +13 -0
  40. package/components/vibe-menu/cards/share-actions.js +37 -0
  41. package/components/vibe-menu/cards/share-actions.js.map +1 -0
  42. package/components/vibe-menu/cards/share-card.styles.d.ts +1 -0
  43. package/components/vibe-menu/cards/share-card.styles.js +90 -0
  44. package/components/vibe-menu/cards/share-card.styles.js.map +1 -0
  45. package/components/vibe-menu/cards/share-copy.d.ts +24 -0
  46. package/components/vibe-menu/cards/share-copy.js +64 -0
  47. package/components/vibe-menu/cards/share-copy.js.map +1 -0
  48. package/components/vibe-menu/cards/share-parts.d.ts +46 -0
  49. package/components/vibe-menu/cards/share-parts.js +87 -0
  50. package/components/vibe-menu/cards/share-parts.js.map +1 -0
  51. package/components/vibe-menu/code-tabs.d.ts +11 -0
  52. package/components/vibe-menu/code-tabs.js +32 -0
  53. package/components/vibe-menu/code-tabs.js.map +1 -0
  54. package/components/vibe-menu/copy.d.ts +7 -0
  55. package/components/vibe-menu/copy.js +13 -0
  56. package/components/vibe-menu/copy.js.map +1 -0
  57. package/components/vibe-menu/fixtures.d.ts +42 -0
  58. package/components/vibe-menu/fixtures.js +184 -0
  59. package/components/vibe-menu/fixtures.js.map +1 -0
  60. package/components/vibe-menu/geometry.d.ts +24 -0
  61. package/components/vibe-menu/geometry.js +28 -0
  62. package/components/vibe-menu/geometry.js.map +1 -0
  63. package/components/vibe-menu/index.d.ts +42 -0
  64. package/components/vibe-menu/index.js +43 -0
  65. package/components/vibe-menu/index.js.map +1 -0
  66. package/components/vibe-menu/menu-state.d.ts +42 -0
  67. package/components/vibe-menu/menu-state.js +82 -0
  68. package/components/vibe-menu/menu-state.js.map +1 -0
  69. package/components/vibe-menu/moments.d.ts +13 -0
  70. package/components/vibe-menu/moments.js +39 -0
  71. package/components/vibe-menu/moments.js.map +1 -0
  72. package/components/vibe-menu/motion.d.ts +10 -0
  73. package/components/vibe-menu/motion.js +10 -0
  74. package/components/vibe-menu/motion.js.map +1 -0
  75. package/components/vibe-menu/open-resolver.d.ts +46 -0
  76. package/components/vibe-menu/open-resolver.js +91 -0
  77. package/components/vibe-menu/open-resolver.js.map +1 -0
  78. package/components/vibe-menu/parts/AccessToggle.d.ts +13 -0
  79. package/components/vibe-menu/parts/AccessToggle.js +58 -0
  80. package/components/vibe-menu/parts/AccessToggle.js.map +1 -0
  81. package/components/vibe-menu/parts/ActionPill.d.ts +18 -0
  82. package/components/vibe-menu/parts/ActionPill.js +21 -0
  83. package/components/vibe-menu/parts/ActionPill.js.map +1 -0
  84. package/components/vibe-menu/parts/BackRow.d.ts +8 -0
  85. package/components/vibe-menu/parts/BackRow.js +10 -0
  86. package/components/vibe-menu/parts/BackRow.js.map +1 -0
  87. package/components/vibe-menu/parts/Chip.d.ts +37 -0
  88. package/components/vibe-menu/parts/Chip.js +62 -0
  89. package/components/vibe-menu/parts/Chip.js.map +1 -0
  90. package/components/vibe-menu/parts/Composer.d.ts +39 -0
  91. package/components/vibe-menu/parts/Composer.js +47 -0
  92. package/components/vibe-menu/parts/Composer.js.map +1 -0
  93. package/components/vibe-menu/parts/DoneButton.d.ts +5 -0
  94. package/components/vibe-menu/parts/DoneButton.js +5 -0
  95. package/components/vibe-menu/parts/DoneButton.js.map +1 -0
  96. package/components/vibe-menu/parts/Glyph.d.ts +9 -0
  97. package/components/vibe-menu/parts/Glyph.js +123 -0
  98. package/components/vibe-menu/parts/Glyph.js.map +1 -0
  99. package/components/vibe-menu/parts/GrantControls.d.ts +13 -0
  100. package/components/vibe-menu/parts/GrantControls.js +61 -0
  101. package/components/vibe-menu/parts/GrantControls.js.map +1 -0
  102. package/components/vibe-menu/parts/MemberRow.d.ts +37 -0
  103. package/components/vibe-menu/parts/MemberRow.js +70 -0
  104. package/components/vibe-menu/parts/MemberRow.js.map +1 -0
  105. package/components/vibe-menu/parts/MenuCard.d.ts +10 -0
  106. package/components/vibe-menu/parts/MenuCard.js +7 -0
  107. package/components/vibe-menu/parts/MenuCard.js.map +1 -0
  108. package/components/vibe-menu/parts/MomentLine.d.ts +23 -0
  109. package/components/vibe-menu/parts/MomentLine.js +58 -0
  110. package/components/vibe-menu/parts/MomentLine.js.map +1 -0
  111. package/components/vibe-menu/parts/Row.d.ts +41 -0
  112. package/components/vibe-menu/parts/Row.js +60 -0
  113. package/components/vibe-menu/parts/Row.js.map +1 -0
  114. package/components/vibe-menu/parts/SectionStrip.d.ts +14 -0
  115. package/components/vibe-menu/parts/SectionStrip.js +26 -0
  116. package/components/vibe-menu/parts/SectionStrip.js.map +1 -0
  117. package/components/vibe-menu/parts/VibesSwitchGlass.d.ts +24 -0
  118. package/components/vibe-menu/parts/VibesSwitchGlass.js +66 -0
  119. package/components/vibe-menu/parts/VibesSwitchGlass.js.map +1 -0
  120. package/components/vibe-menu/parts/radio-keys.d.ts +5 -0
  121. package/components/vibe-menu/parts/radio-keys.js +13 -0
  122. package/components/vibe-menu/parts/radio-keys.js.map +1 -0
  123. package/components/vibe-menu/parts/use-composer-draft.d.ts +9 -0
  124. package/components/vibe-menu/parts/use-composer-draft.js +94 -0
  125. package/components/vibe-menu/parts/use-composer-draft.js.map +1 -0
  126. package/components/vibe-menu/share-fixtures.d.ts +15 -0
  127. package/components/vibe-menu/share-fixtures.js +72 -0
  128. package/components/vibe-menu/share-fixtures.js.map +1 -0
  129. package/components/vibe-menu/shell/VibeMenuShell.d.ts +30 -0
  130. package/components/vibe-menu/shell/VibeMenuShell.js +124 -0
  131. package/components/vibe-menu/shell/VibeMenuShell.js.map +1 -0
  132. package/components/vibe-menu/shell/menu-sequence.d.ts +20 -0
  133. package/components/vibe-menu/shell/menu-sequence.js +35 -0
  134. package/components/vibe-menu/shell/menu-sequence.js.map +1 -0
  135. package/components/vibe-menu/shell/outline-geometry.d.ts +63 -0
  136. package/components/vibe-menu/shell/outline-geometry.js +83 -0
  137. package/components/vibe-menu/shell/outline-geometry.js.map +1 -0
  138. package/components/vibe-menu/shell/shell.styles.d.ts +1 -0
  139. package/components/vibe-menu/shell/shell.styles.js +386 -0
  140. package/components/vibe-menu/shell/shell.styles.js.map +1 -0
  141. package/components/vibe-menu/shell/useMenuSequencer.d.ts +33 -0
  142. package/components/vibe-menu/shell/useMenuSequencer.js +490 -0
  143. package/components/vibe-menu/shell/useMenuSequencer.js.map +1 -0
  144. package/components/vibe-menu/slices.d.ts +182 -0
  145. package/components/vibe-menu/slices.js +5 -0
  146. package/components/vibe-menu/slices.js.map +1 -0
  147. package/components/vibe-menu/use-remix-hint.d.ts +9 -0
  148. package/components/vibe-menu/use-remix-hint.js +21 -0
  149. package/components/vibe-menu/use-remix-hint.js.map +1 -0
  150. package/components/vibe-menu/vibe-menu.styles.d.ts +5 -0
  151. package/components/vibe-menu/vibe-menu.styles.js +1424 -0
  152. package/components/vibe-menu/vibe-menu.styles.js.map +1 -0
  153. package/package.json +4 -4
  154. package/components/AccountView.d.ts +0 -10
  155. package/components/AccountView.js +0 -31
  156. package/components/AccountView.js.map +0 -1
  157. package/components/AdminModeControl.d.ts +0 -7
  158. package/components/AdminModeControl.js +0 -9
  159. package/components/AdminModeControl.js.map +0 -1
  160. package/components/CodingIndicator.d.ts +0 -6
  161. package/components/CodingIndicator.js +0 -53
  162. package/components/CodingIndicator.js.map +0 -1
  163. package/components/CreditsDetailMenu.d.ts +0 -15
  164. package/components/CreditsDetailMenu.js +0 -97
  165. package/components/CreditsDetailMenu.js.map +0 -1
  166. package/components/CreditsRingView.d.ts +0 -15
  167. package/components/CreditsRingView.js +0 -77
  168. package/components/CreditsRingView.js.map +0 -1
  169. package/components/EditorTabStrip.d.ts +0 -10
  170. package/components/EditorTabStrip.js +0 -15
  171. package/components/EditorTabStrip.js.map +0 -1
  172. package/components/LinkLineControls.d.ts +0 -9
  173. package/components/LinkLineControls.js +0 -72
  174. package/components/LinkLineControls.js.map +0 -1
  175. package/components/MadeHereView.d.ts +0 -8
  176. package/components/MadeHereView.js +0 -37
  177. package/components/MadeHereView.js.map +0 -1
  178. package/components/RecentVibesList.d.ts +0 -19
  179. package/components/RecentVibesList.js +0 -106
  180. package/components/RecentVibesList.js.map +0 -1
  181. package/components/RecommendedView.d.ts +0 -22
  182. package/components/RecommendedView.js +0 -172
  183. package/components/RecommendedView.js.map +0 -1
  184. package/components/RemixInviteView.d.ts +0 -4
  185. package/components/RemixInviteView.js +0 -11
  186. package/components/RemixInviteView.js.map +0 -1
  187. package/components/SeedDataOffer.d.ts +0 -8
  188. package/components/SeedDataOffer.js +0 -15
  189. package/components/SeedDataOffer.js.map +0 -1
  190. package/components/SignedInDiscoveryView.d.ts +0 -17
  191. package/components/SignedInDiscoveryView.js +0 -30
  192. package/components/SignedInDiscoveryView.js.map +0 -1
  193. package/components/SignedOutDiscoveryView.d.ts +0 -7
  194. package/components/SignedOutDiscoveryView.js +0 -15
  195. package/components/SignedOutDiscoveryView.js.map +0 -1
  196. package/components/SignedOutSavePrompt.d.ts +0 -4
  197. package/components/SignedOutSavePrompt.js +0 -33
  198. package/components/SignedOutSavePrompt.js.map +0 -1
  199. package/components/UnifiedVibeCard.d.ts +0 -129
  200. package/components/UnifiedVibeCard.js +0 -1658
  201. package/components/UnifiedVibeCard.js.map +0 -1
  202. package/components/UnifiedVibeCardSettings.styles.d.ts +0 -3
  203. package/components/UnifiedVibeCardSettings.styles.js +0 -95
  204. package/components/UnifiedVibeCardSettings.styles.js.map +0 -1
  205. package/components/UnifiedVibeCardShare.styles.d.ts +0 -3
  206. package/components/UnifiedVibeCardShare.styles.js +0 -72
  207. package/components/UnifiedVibeCardShare.styles.js.map +0 -1
  208. package/components/ViewerAccessSummary.d.ts +0 -28
  209. package/components/ViewerAccessSummary.js +0 -105
  210. package/components/ViewerAccessSummary.js.map +0 -1
  211. package/components/ViewerStandingView.d.ts +0 -7
  212. package/components/ViewerStandingView.js +0 -10
  213. package/components/ViewerStandingView.js.map +0 -1
  214. package/hooks/useCardFloat.d.ts +0 -6
  215. package/hooks/useCardFloat.js +0 -191
  216. package/hooks/useCardFloat.js.map +0 -1
  217. package/hooks/useHomeMotionPress.d.ts +0 -17
  218. package/hooks/useHomeMotionPress.js +0 -93
  219. package/hooks/useHomeMotionPress.js.map +0 -1
  220. package/motion/card-motion-source.d.ts +0 -23
  221. package/motion/card-motion-source.js +0 -50
  222. 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;