@vibes.diy/base 14.3.113 → 14.3.115

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 (63) hide show
  1. package/components/vibe-menu/VibeMenu.js +9 -3
  2. package/components/vibe-menu/VibeMenu.js.map +1 -1
  3. package/components/vibe-menu/cards/AccountCard.d.ts +4 -1
  4. package/components/vibe-menu/cards/AccountCard.js +25 -9
  5. package/components/vibe-menu/cards/AccountCard.js.map +1 -1
  6. package/components/vibe-menu/cards/CodeCard.d.ts +2 -1
  7. package/components/vibe-menu/cards/CodeCard.js +17 -6
  8. package/components/vibe-menu/cards/CodeCard.js.map +1 -1
  9. package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +2 -1
  10. package/components/vibe-menu/cards/CodeModeWorkspace.js +8 -6
  11. package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -1
  12. package/components/vibe-menu/geometry.d.ts +1 -0
  13. package/components/vibe-menu/geometry.js +5 -0
  14. package/components/vibe-menu/geometry.js.map +1 -1
  15. package/components/vibe-menu/index.d.ts +5 -0
  16. package/components/vibe-menu/index.js +5 -0
  17. package/components/vibe-menu/index.js.map +1 -1
  18. package/components/vibe-menu/parts/Chip.d.ts +2 -1
  19. package/components/vibe-menu/parts/Chip.js +26 -2
  20. package/components/vibe-menu/parts/Chip.js.map +1 -1
  21. package/components/vibe-menu/parts/Composer.d.ts +11 -0
  22. package/components/vibe-menu/parts/Composer.js +44 -1
  23. package/components/vibe-menu/parts/Composer.js.map +1 -1
  24. package/components/vibe-menu/parts/LookRestyleSection.d.ts +51 -0
  25. package/components/vibe-menu/parts/LookRestyleSection.js +290 -0
  26. package/components/vibe-menu/parts/LookRestyleSection.js.map +1 -0
  27. package/components/vibe-menu/parts/MomentLine.d.ts +1 -0
  28. package/components/vibe-menu/parts/MomentLine.js +4 -2
  29. package/components/vibe-menu/parts/MomentLine.js.map +1 -1
  30. package/components/vibe-menu/parts/SendCap.d.ts +8 -0
  31. package/components/vibe-menu/parts/SendCap.js +10 -0
  32. package/components/vibe-menu/parts/SendCap.js.map +1 -0
  33. package/components/vibe-menu/parts/StatusChipRow.d.ts +58 -0
  34. package/components/vibe-menu/parts/StatusChipRow.js +121 -0
  35. package/components/vibe-menu/parts/StatusChipRow.js.map +1 -0
  36. package/components/vibe-menu/parts/StatusLine.d.ts +21 -0
  37. package/components/vibe-menu/parts/StatusLine.js +25 -0
  38. package/components/vibe-menu/parts/StatusLine.js.map +1 -0
  39. package/components/vibe-menu/parts/SurveyStrip.d.ts +3 -1
  40. package/components/vibe-menu/parts/SurveyStrip.js +9 -1
  41. package/components/vibe-menu/parts/SurveyStrip.js.map +1 -1
  42. package/components/vibe-menu/parts/VibesSwitchGlass.d.ts +0 -9
  43. package/components/vibe-menu/parts/VibesSwitchGlass.js +2 -17
  44. package/components/vibe-menu/parts/VibesSwitchGlass.js.map +1 -1
  45. package/components/vibe-menu/parts/agent-log-frame.d.ts +9 -0
  46. package/components/vibe-menu/parts/agent-log-frame.js +10 -0
  47. package/components/vibe-menu/parts/agent-log-frame.js.map +1 -0
  48. package/components/vibe-menu/parts/use-composer-draft.js +30 -0
  49. package/components/vibe-menu/parts/use-composer-draft.js.map +1 -1
  50. package/components/vibe-menu/shell/VibeMenuShell.d.ts +5 -0
  51. package/components/vibe-menu/shell/VibeMenuShell.js +5 -1
  52. package/components/vibe-menu/shell/VibeMenuShell.js.map +1 -1
  53. package/components/vibe-menu/shell/shell.styles.js +270 -38
  54. package/components/vibe-menu/shell/shell.styles.js.map +1 -1
  55. package/components/vibe-menu/slices.d.ts +8 -2
  56. package/components/vibe-menu/slices.js.map +1 -1
  57. package/components/vibe-menu/vibe-menu.styles.d.ts +3 -3
  58. package/components/vibe-menu/vibe-menu.styles.js +99 -1
  59. package/components/vibe-menu/vibe-menu.styles.js.map +1 -1
  60. package/hooks/img-gen/use-img-gen.d.ts +1 -0
  61. package/hooks/img-gen/use-img-gen.js +374 -304
  62. package/hooks/img-gen/use-img-gen.js.map +1 -1
  63. package/package.json +5 -5
@@ -10,9 +10,16 @@ export function useComposerDraft(input) {
10
10
  const [queued, setQueued] = React.useState([]);
11
11
  const [flushAttempt, setFlushAttempt] = React.useState(0);
12
12
  const attachments = useAttachments();
13
+ const submittedRender = React.useRef(false);
14
+ const pendingSubmit = React.useRef(undefined);
15
+ React.useLayoutEffect(() => {
16
+ submittedRender.current = false;
17
+ });
13
18
  const prevResetKey = React.useRef(resetKey);
14
19
  if (prevResetKey.current !== resetKey) {
15
20
  prevResetKey.current = resetKey;
21
+ submittedRender.current = false;
22
+ pendingSubmit.current = undefined;
16
23
  setText("");
17
24
  setQueued([]);
18
25
  setFlushAttempt(0);
@@ -36,6 +43,14 @@ export function useComposerDraft(input) {
36
43
  seedSeq.current = seed.seq;
37
44
  setText((d) => (d === "" ? seed.text : d));
38
45
  }, [seed]);
46
+ const refill = composer.rewrite?.refill;
47
+ const refillSeq = React.useRef(undefined);
48
+ React.useEffect(() => {
49
+ if (refill === undefined || refill.seq === refillSeq.current)
50
+ return;
51
+ refillSeq.current = refill.seq;
52
+ setText((d) => (d === "" ? refill.text : d));
53
+ }, [refill]);
39
54
  const building = composer.cap === "Stop";
40
55
  const { sendsNow } = composer;
41
56
  const onSubmitRef = React.useRef(composer.onSubmit);
@@ -62,6 +77,10 @@ export function useComposerDraft(input) {
62
77
  return () => clearTimeout(timer);
63
78
  }, [building, sendsNow, queued, flushAttempt]);
64
79
  function submit() {
80
+ if (submittedRender.current === true || pendingSubmit.current !== undefined) {
81
+ composer.onSendBlocked?.("busy");
82
+ return false;
83
+ }
65
84
  const trimmed = text.trim();
66
85
  const ready = attachments.readyAttachments;
67
86
  if (attachments.busy === true) {
@@ -78,17 +97,28 @@ export function useComposerDraft(input) {
78
97
  composer.onSendBlocked?.("busy");
79
98
  return false;
80
99
  }
100
+ submittedRender.current = true;
81
101
  setQueued([...queued, trimmed]);
82
102
  setText("");
83
103
  return true;
84
104
  }
85
105
  const fileText = ready.length === 1 ? ONE_FILE_TEXT : MANY_FILES_TEXT;
86
106
  const message = trimmed === "" ? fileText : trimmed;
107
+ submittedRender.current = true;
87
108
  const answer = composer.onSubmit(message, ready);
88
109
  if (answer === false) {
110
+ submittedRender.current = false;
89
111
  composer.onSendBlocked?.("other");
90
112
  return false;
91
113
  }
114
+ if (answer !== undefined && typeof answer !== "boolean") {
115
+ pendingSubmit.current = answer;
116
+ function release() {
117
+ if (pendingSubmit.current === answer)
118
+ pendingSubmit.current = undefined;
119
+ }
120
+ void answer.then(release, release);
121
+ }
92
122
  attachments.clear();
93
123
  setText("");
94
124
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"use-composer-draft.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/use-composer-draft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-composer-draft.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/use-composer-draft.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as React from "react";
2
2
  import type { ReactNode } from "react";
3
3
  import type { MenuEvent, MenuState, Section } from "../menu-state.js";
4
+ import type { StatusChip, StatusChipId } from "../parts/StatusChipRow.js";
4
5
  import type { SequencerStep } from "./useMenuSequencer.js";
5
6
  export interface VibeMenuShellBadges {
6
7
  readonly pendingRequests: number;
@@ -32,5 +33,9 @@ export interface VibeMenuShellProps {
32
33
  readonly onStep?: (step: SequencerStep) => void;
33
34
  readonly frame?: "viewport" | "contained";
34
35
  readonly settledAtMount?: boolean;
36
+ readonly chips?: readonly StatusChip[];
37
+ readonly hiddenChips?: readonly StatusChipId[];
38
+ readonly onHideChip?: (id: StatusChipId) => void;
39
+ readonly chipsInside?: boolean;
35
40
  }
36
41
  export declare function VibeMenuShell(props: VibeMenuShellProps): React.ReactElement;
@@ -4,6 +4,7 @@ import { VibeMenuStyles } from "../vibe-menu.styles.js";
4
4
  import { MenuCard } from "../parts/MenuCard.js";
5
5
  import { SectionStrip } from "../parts/SectionStrip.js";
6
6
  import { VibesSwitchGlass } from "../parts/VibesSwitchGlass.js";
7
+ import { StatusChipRow } from "../parts/StatusChipRow.js";
7
8
  import { VIBE_MENU_SHELL_CSS } from "./shell.styles.js";
8
9
  import { useMenuSequencer } from "./useMenuSequencer.js";
9
10
  import { shownKey, wantFor } from "./menu-sequence.js";
@@ -110,6 +111,8 @@ export function VibeMenuShell(props) {
110
111
  const collapsed = state.phase === "collapsed";
111
112
  const codeModeOn = props.codeMode && shown.section === "vibe";
112
113
  const logOpenOn = props.logOpen && shown.section === "vibe";
114
+ const hidden = props.hiddenChips ?? [];
115
+ const floatingChips = (props.chips ?? []).filter((chip) => hidden.includes(chip.id) === false && (collapsed || (props.chipsInside !== true && chip.id === "admin")));
113
116
  return (React.createElement("div", { className: "vm-layer", "data-vibe-menu": "", "data-frame": props.frame ?? "viewport", "data-frame-cap": props.frameCap === true ? "" : undefined, "data-reduced-motion": props.reducedMotion === true ? "true" : undefined },
114
117
  React.createElement(VibeMenuStyles, null),
115
118
  React.createElement("style", null, VIBE_MENU_SHELL_CSS),
@@ -121,7 +124,8 @@ export function VibeMenuShell(props) {
121
124
  React.createElement("rect", { ref: refs.band, className: "vm-band" }),
122
125
  React.createElement("rect", { ref: refs.cover, className: "vm-cover" }),
123
126
  React.createElement("path", { ref: refs.edge, className: "vm-edge" })),
124
- React.createElement(VibesSwitchGlass, { open: collapsed === false, barOpen: shown.bar, onToggle: () => dispatch({ type: "PILL_TAP" }), pendingRequests: props.badges.pendingRequests, chiclet: collapsed ? props.badges.chiclet : null, adminMode: props.badges.adminMode === true, editText: props.badges.editText ?? null, saveAskDot: props.badges.saveAsk === true, onChiclet: props.onChiclet, closedStatus: collapsed ? props.closedStatus : null, twinkling: props.switchActivity.twinkling, pillRef: pillRef }),
127
+ React.createElement(VibesSwitchGlass, { open: collapsed === false, barOpen: shown.bar, onToggle: () => dispatch({ type: "PILL_TAP" }), pendingRequests: props.badges.pendingRequests, saveAskDot: props.badges.saveAsk === true, closedStatus: collapsed ? props.closedStatus : null, twinkling: props.switchActivity.twinkling, pillRef: pillRef }),
128
+ React.createElement(StatusChipRow, { chips: floatingChips, place: "floating", onHide: collapsed ? props.onHideChip : undefined }),
125
129
  React.createElement(SectionStrip, { activeSection: shown.section, pressedSection: state.phase === "card" ? state.section : null, tabbable: collapsed === false, pendingRequests: props.badges.pendingRequests, saveAskDot: props.badges.saveAsk === true, onTab: (section) => dispatch({ type: "ITEM_TAP", section }), stripRef: stripRef, slideRef: refs.slide, registerTab: (section, el) => {
126
130
  refs.tabs.current[section] = el;
127
131
  } }))));
@@ -1 +1 @@
1
- {"version":3,"file":"VibeMenuShell.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/shell/VibeMenuShell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VibeMenuShell.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/shell/VibeMenuShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAyDvD,MAAM,yBAAyB,GAAsB;IACnD,yBAAyB;IACzB,uBAAuB;IACvB,wBAAwB;IACxB,mBAAmB;CACpB,CAAC;AAEF,SAAS,eAAe,CAAC,IAAiB;IACxC,IAAI,IAAI,YAAY,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AACpF,CAAC;AAKD,SAAS,eAAe,CAAC,KAIxB;IACC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO;QAClC,SAAS,cAAc,CAAC,KAAiB;YACvC,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;gBAAE,OAAO;YAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO;YACjD,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;gBAAE,OAAO;YACvC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAmF;IAC7G,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO;QAClC,SAAS,SAAS,CAAC,KAAoB;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI;gBAAE,OAAO;YACtE,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxB,CAAC;AAGD,SAAS,cAAc,CAAC,KAMvB;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IACvC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAkE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7G,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC7B,QAAQ,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvD,IAAI,MAAM,IAAI,OAAO;gBAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IACtH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAGD,SAAS,mBAAmB,CAAC,KAA0F;IACrH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;IAC3F,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACrB,CAAC;AAID,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC;QACvC,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAIlD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;IACjG,MAAM,QAAQ,GAAG,MAAM,CAAY,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAc,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrH,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI;YAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,mBAAmB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;IAI5D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CACnH,CAAC;IAEF,OAAO,CACL,6BACE,SAAS,EAAC,UAAU,oBACL,EAAE,gBACL,KAAK,CAAC,KAAK,IAAI,UAAU,oBACrB,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,yBACnC,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAKtE,oBAAC,cAAc,OAAG;QAClB,mCAAQ,mBAAmB,CAAS;QACpC,6BACE,GAAG,EAAE,IAAI,CAAC,IAAI,EACd,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,gBACtD,KAAK,CAAC,KAAK,eACZ,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,cACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,kBACzB,KAAK,CAAC,OAAO,IAAI,EAAE,eACtB,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,oBAClC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,mBAC5B,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAIzC,oBAAC,QAAQ,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI;gBACrE,OAAO;gBACP,KAAK,CAAC,UAAU,IAAI,IAAI,CAChB;YAIX,6BAAK,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAC,YAAY,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO;gBACjF,8BAAM,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,SAAS,GAAG;gBAC5C,8BAAM,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAC,UAAU,GAAG;gBAC9C,8BAAM,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,SAAS,GAAG,CACxC;YACN,oBAAC,gBAAgB,IACf,IAAI,EAAE,SAAS,KAAK,KAAK,EACzB,OAAO,EAAE,KAAK,CAAC,GAAG,EAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAC9C,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,EAC7C,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,EACzC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EACnD,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,EACzC,OAAO,EAAE,OAAO,GAChB;YACF,oBAAC,aAAa,IAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAC,UAAU,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,GAAI;YAC1G,oBAAC,YAAY,IACX,aAAa,EAAE,KAAK,CAAC,OAAO,EAC5B,cAAc,EAAE,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAC7D,QAAQ,EAAE,SAAS,KAAK,KAAK,EAC7B,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,EAC7C,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,EACzC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAC3D,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,IAAI,CAAC,KAAK,EACpB,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;oBAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAClC,CAAC,GACD,CACE,CACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { MENU_GEOMETRY, MENU_TOP_RESERVE_VAR } from "../geometry.js";
1
+ import { MENU_FULL_TABS_MIN_WIDTH, MENU_GEOMETRY, MENU_TOP_RESERVE_VAR } from "../geometry.js";
2
2
  import { MOTION } from "../motion.js";
3
3
  const G = MENU_GEOMETRY;
4
4
  export const VIBE_MENU_SHELL_CSS = `
@@ -29,7 +29,11 @@ export const VIBE_MENU_SHELL_CSS = `
29
29
  --vm-pill-w: ${G.pillW}px;
30
30
  --vm-pill-h: ${G.pillH}px;
31
31
  --vm-bar-h: ${G.barH}px;
32
- --vm-tab-w: ${G.tabW}px;
32
+ /* Fluid between the phone breakpoint and wide desktop: the tabs give up width
33
+ until the whole bar (and the card, which is the bar's width) fits between
34
+ the frame's edges, so neither ever runs off the left of the screen. At
35
+ full size it is exactly ${G.tabW}px; phones override the bar entirely. */
36
+ --vm-tab-w: min(${G.tabW}px, calc((100cqw - 2 * var(--vm-edge) - var(--vm-home-extra) - 2 * var(--vm-bar-end) - 2px) / 4));
33
37
  --vm-tab-inset: 9px; /* space-9: the bar's rhythm */
34
38
  --vm-home-extra: ${G.homeExtra}px;
35
39
  --vm-band: ${G.band}px;
@@ -93,40 +97,233 @@ export const VIBE_MENU_SHELL_CSS = `
93
97
  z-index: 3;
94
98
  pointer-events: none;
95
99
  }
96
- /* Beside the collapsed switch: the Draft/Locked chiclet, then the build line. */
100
+ /* Beside the collapsed switch: the status line (#7153), and nothing else. The
101
+ chips ride their own row above the switch (.vm-chip-row). One line, today's
102
+ height; the row is the switch's own 44px row and takes no hits itself. */
97
103
  .vm-layer .vm-beside {
98
104
  position: absolute;
99
105
  right: calc(var(--vm-pill-w) + var(--vm-ring) + 6px);
100
106
  bottom: 0;
101
107
  height: var(--vm-pill-h);
108
+ /* Desktop: .vm-menu has no width, so size the row to its content. */
109
+ width: max-content;
102
110
  display: flex;
103
111
  flex-direction: row-reverse;
104
112
  align-items: center;
105
- gap: 6px;
106
113
  pointer-events: none;
107
114
  }
108
- /* #4291: the admin badge survives the menu opening — elevation must read in
109
- * every state, not just while collapsed. The container stays laid out when
110
- * open (an all-hidden container paints nothing), the chiclet and the closed
111
- * build line stay hidden (existing behavior); only the badge remains, lifted
112
- * above the bar so it never covers the tabs. It keeps pointer-events:none
113
- * from .vm-beside, so it cannot intercept controls, and paints above the
114
- * card. */
115
115
  .vm-layer .vm-menu[data-bar="open"] .vm-beside {
116
+ display: none;
117
+ }
118
+ .vm-layer .vm-closed-status {
119
+ overflow: hidden;
120
+ min-width: 0;
121
+ max-width: 420px;
122
+ flex: 0 1 auto;
123
+ }
124
+ .vm-layer .vm-closed-status-line {
116
125
  display: flex;
126
+ align-items: center;
127
+ min-width: 0;
128
+ transform: translateX(calc(100% + 6px));
129
+ transition: transform var(--vm-close-ms) var(--vm-open-ease);
117
130
  }
118
- .vm-layer .vm-menu[data-bar="open"] .vm-beside > :not(.vm-admin-badge) {
119
- display: none;
131
+ .vm-layer .vm-closed-status-line[data-revealed="true"] {
132
+ transform: translateX(0);
133
+ }
134
+ /* The line is a real button: the 24px line in a 44px-tall hit box. */
135
+ .vm-layer .vm-status-tap {
136
+ display: flex;
137
+ align-items: center;
138
+ flex: 0 1 auto;
139
+ min-width: 0;
140
+ min-height: var(--vm-pill-h);
141
+ margin: 0;
142
+ padding: 0;
143
+ border: 0;
144
+ background: none;
145
+ color: inherit;
146
+ font: inherit;
147
+ text-align: left;
148
+ cursor: pointer;
149
+ pointer-events: auto;
150
+ touch-action: manipulation;
151
+ -webkit-tap-highlight-color: transparent;
152
+ }
153
+ .vm-layer .vm-status-chip {
154
+ display: flex;
155
+ align-items: center;
156
+ min-width: 0;
157
+ height: 24px;
158
+ padding: 3px 6px;
159
+ border-radius: 3px;
160
+ background: var(--card-bg);
161
+ color: var(--ink);
162
+ font: 12px/18px var(--font-tab);
163
+ white-space: nowrap;
164
+ overflow: hidden;
165
+ transition: transform 90ms ease-out, background-color 90ms ease-out;
166
+ }
167
+ .vm-layer .vm-status-chip .vm-glyph {
168
+ flex: none;
169
+ width: 13px;
170
+ height: 13px;
171
+ margin-right: 5px;
172
+ fill: none;
173
+ stroke: currentColor;
174
+ stroke-width: 2;
175
+ stroke-linecap: round;
176
+ stroke-linejoin: round;
177
+ }
178
+ .vm-layer .vm-status-fixed {
179
+ flex: none;
180
+ white-space: pre;
181
+ }
182
+ .vm-layer .vm-status-elastic {
183
+ flex: 0 1 auto;
184
+ min-width: 0;
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ white-space: pre;
188
+ }
189
+ .vm-layer .vm-status-clock {
190
+ flex: none;
191
+ white-space: pre;
192
+ font-variant-numeric: tabular-nums;
193
+ color: var(--muted);
194
+ }
195
+ .vm-layer .vm-status-tap:active .vm-status-chip {
196
+ transform: scale(0.97);
197
+ background: color-mix(in oklch, var(--card-bg), var(--ink) 12%);
198
+ }
199
+ .vm-layer .vm-status-tap:focus-visible {
200
+ outline: none;
120
201
  }
121
- .vm-layer .vm-menu[data-bar="open"] .vm-beside .vm-admin-badge {
202
+ .vm-layer .vm-status-tap:focus-visible .vm-status-chip {
203
+ outline: var(--stroke-focus, 2px) solid var(--section-share);
204
+ outline-offset: 1px;
205
+ }
206
+
207
+ /* ---------- the chip row (#7153): floating above the shut switch ---------- */
208
+ /* Right-aligned over the switch, 6px above its glass, never wider than the
209
+ frame less its edges (StatusChipRow collapses it to "+N" when it would be). */
210
+ .vm-layer .vm-chip-row[data-place="floating"] {
122
211
  position: absolute;
123
- right: 0;
124
- bottom: calc(var(--vm-pill-h) + 8px);
212
+ right: calc(-1 * var(--vm-ring));
213
+ bottom: calc(var(--vm-pill-h) + var(--vm-ring) + 6px);
125
214
  z-index: 5;
215
+ width: max-content;
216
+ max-width: calc(100cqw - 2 * var(--vm-edge));
217
+ display: flex;
218
+ align-items: center;
219
+ gap: 6px;
220
+ white-space: nowrap;
221
+ pointer-events: none;
222
+ }
223
+ .vm-layer .vm-chip-row[data-place="floating"][data-expanded] {
224
+ flex-wrap: wrap;
225
+ justify-content: flex-end;
226
+ row-gap: 4px;
227
+ }
228
+ .vm-layer .vm-chip-row[data-place="floating"] > * {
229
+ pointer-events: auto;
230
+ }
231
+ /* Admin is a status, never a control (#4291): taps fall through it. */
232
+ .vm-layer .vm-chip-row .vm-admin-badge {
233
+ pointer-events: none;
234
+ }
235
+ /* Inside the open switch: the same chips, directly above the now-line. */
236
+ .vm-layer .vm-chip-row[data-place="inside"] {
237
+ display: flex;
238
+ flex-wrap: wrap;
239
+ align-items: center;
240
+ gap: 6px;
241
+ padding: 6px 0 8px;
242
+ margin-bottom: 6px;
243
+ border-bottom: var(--stroke-mini, 1px) solid var(--line);
244
+ }
245
+ /* One height for every pill in a row: the production pills are 22px and 28px tall. */
246
+ .vm-layer .vm-chip-row .vm-row-chip {
247
+ display: inline-flex;
248
+ align-items: center;
249
+ height: 24px;
250
+ padding: 0 9px;
251
+ border: 0;
252
+ white-space: nowrap;
253
+ font: 700 11px/18px var(--font-display);
254
+ letter-spacing: 0.06em;
255
+ }
256
+ .vm-layer .vm-chip-row button.vm-row-chip {
257
+ cursor: pointer;
258
+ touch-action: manipulation;
126
259
  }
127
- /* #7066: Edit text's Editing / Using app pill. A control, so it takes hits
128
- * through .vm-beside's pointer-events:none, and it is tall enough to tap on a
129
- * phone. Code yellow while editing; the card colour while the app has the taps. */
260
+ .vm-layer .vm-chip-pill {
261
+ border-radius: var(--radius-full);
262
+ background: var(--card-bg);
263
+ color: var(--ink);
264
+ box-shadow: inset 0 0 0 var(--stroke-mini, 1px) var(--line);
265
+ }
266
+ .vm-layer .vm-chip-pill[data-chip="pending"] {
267
+ background: var(--badge);
268
+ color: var(--on-badge);
269
+ box-shadow: none;
270
+ }
271
+ /* The one-shot reads as a sentence, not a status tag. */
272
+ .vm-layer .vm-chip-row .vm-chip-pill[data-chip="examplesCleared"] {
273
+ box-shadow: inset 0 0 0 var(--stroke-mini, 1px) var(--section-home);
274
+ font: 600 11px/18px var(--font-tab);
275
+ letter-spacing: 0;
276
+ }
277
+ /* Importing: the same pill, working, its tap waiting on the data. */
278
+ .vm-layer .vm-chip-row .vm-chip-pill[data-chip="examplesCleared"][data-busy] {
279
+ cursor: progress;
280
+ animation: vm-chip-busy 1.6s ease-in-out infinite;
281
+ }
282
+ @keyframes vm-chip-busy {
283
+ 50% {
284
+ opacity: 0.6;
285
+ }
286
+ }
287
+ .vm-layer .vm-chip-row .vm-chip-more {
288
+ background: var(--ink);
289
+ color: var(--card-bg);
290
+ box-shadow: none;
291
+ }
292
+ /* The dismiss ×: a 24px hit box overlapping the pill's end by 6px. */
293
+ .vm-layer .vm-chip-wrap {
294
+ display: inline-flex;
295
+ align-items: center;
296
+ }
297
+ .vm-layer .vm-chip-x {
298
+ display: inline-grid;
299
+ place-items: center;
300
+ width: 24px;
301
+ height: 24px;
302
+ margin-left: -6px;
303
+ padding: 0;
304
+ border: 0;
305
+ border-radius: var(--radius-full);
306
+ background: none;
307
+ color: var(--ink);
308
+ cursor: pointer;
309
+ touch-action: manipulation;
310
+ }
311
+ .vm-layer .vm-chip-x span {
312
+ display: grid;
313
+ place-items: center;
314
+ width: 16px;
315
+ height: 16px;
316
+ border-radius: var(--radius-full);
317
+ background: var(--card-bg);
318
+ box-shadow: inset 0 0 0 var(--stroke-mini, 1px) var(--line);
319
+ font: 700 11px/1 var(--font-tab);
320
+ }
321
+ .vm-layer .vm-chip-x:active span {
322
+ background: var(--ink);
323
+ color: var(--card-bg);
324
+ }
325
+ /* #7066: Edit text's Editing / Using app pill. Code yellow while editing; the
326
+ * card colour while the app has the taps. */
130
327
  .vm-layer .vm-edit-pill {
131
328
  border: 0;
132
329
  cursor: pointer;
@@ -150,25 +347,6 @@ export const VIBE_MENU_SHELL_CSS = `
150
347
  pointer-events: auto;
151
348
  white-space: nowrap;
152
349
  }
153
- .vm-layer .vm-closed-status {
154
- overflow: hidden;
155
- max-width: min(260px, calc(100cqw - 2 * var(--vm-edge) - var(--vm-pill-w) - 80px));
156
- }
157
- .vm-layer .vm-closed-status-line {
158
- padding: 3px 5px;
159
- border-radius: 3px;
160
- background: var(--card-bg);
161
- color: var(--muted);
162
- font: 12px/18px var(--font-tab);
163
- white-space: nowrap;
164
- overflow: hidden;
165
- text-overflow: ellipsis;
166
- transform: translateX(calc(100% + 6px));
167
- transition: transform var(--vm-close-ms) var(--vm-open-ease);
168
- }
169
- .vm-layer .vm-closed-status-line[data-revealed="true"] {
170
- transform: translateX(0);
171
- }
172
350
 
173
351
  /* ---------- the bar: window / sliding bar / counter-sliding tabs ---------- */
174
352
  .vm-layer .vm-strip {
@@ -371,6 +549,14 @@ export const VIBE_MENU_SHELL_CSS = `
371
549
  --vm-edge: ${G.edgePhone}px;
372
550
  left: var(--vm-edge);
373
551
  }
552
+ /* #7153: the status line has the whole width beside the switch, and by
553
+ construction never more: it can't run off the frame's left edge. */
554
+ .vm-layer .vm-beside {
555
+ width: calc(100cqw - 2 * var(--vm-edge) - 2 * var(--vm-ring) - var(--vm-pill-w) - 6px);
556
+ }
557
+ .vm-layer .vm-closed-status {
558
+ max-width: 100%;
559
+ }
374
560
  .vm-layer .vm-strip {
375
561
  --vm-strip-w: calc(100cqw - 2 * var(--vm-edge) - var(--vm-bar-end));
376
562
  }
@@ -418,6 +604,43 @@ export const VIBE_MENU_SHELL_CSS = `
418
604
  max-height: min(560px, 70cqh, var(--vm-frame-limit));
419
605
  }
420
606
  }
607
+ /* ---------- between the phone and full desktop: the tabs give up width ----------
608
+ Past the phone breakpoint the bar keeps its desktop shape but its tabs are
609
+ fluid (--vm-tab-w), so below the width where they reach ${G.tabW}px a 14px
610
+ label would run into its icon: they stack the icon over the phone's small
611
+ label instead. The phone block above still owns everything at or below
612
+ ${G.phoneMaxWidth}px; this band starts one pixel past it. */
613
+ @container (min-width: ${G.phoneMaxWidth + 1}px) and (max-width: ${MENU_FULL_TABS_MIN_WIDTH - 0.02}px) {
614
+ .vm-layer .vm-tab {
615
+ flex-direction: column;
616
+ align-items: center;
617
+ justify-content: center;
618
+ gap: 2px;
619
+ padding: 4px 2px;
620
+ }
621
+ .vm-layer .vm-tab-circle {
622
+ width: 22px;
623
+ height: 22px;
624
+ }
625
+ .vm-layer .vm-tab[data-section="home"] {
626
+ padding: 4px 2px 4px calc(2px + var(--vm-home-extra));
627
+ }
628
+ .vm-layer .vm-tab[data-section="share"] {
629
+ padding-right: var(--vm-bar-end);
630
+ }
631
+ .vm-layer .vm-tab-label {
632
+ position: static;
633
+ display: block;
634
+ font-size: 9.6px;
635
+ letter-spacing: 1px;
636
+ white-space: nowrap;
637
+ padding: 0 0 0 1px;
638
+ }
639
+ .vm-layer .vm-tab svg {
640
+ width: 12px;
641
+ height: 12px;
642
+ }
643
+ }
421
644
  @container (max-width: ${G.narrowMaxWidth}px) {
422
645
  .vm-layer .vm-tab-label {
423
646
  position: absolute;
@@ -439,5 +662,14 @@ export const VIBE_MENU_SHELL_CSS = `
439
662
  .vm-layer[data-reduced-motion="true"] .vm-menu *::before {
440
663
  transition: none !important;
441
664
  }
665
+ /* The importing chip holds still; its words say it is working. */
666
+ @media (prefers-reduced-motion: reduce) {
667
+ .vm-layer .vm-chip-row .vm-chip-pill[data-busy] {
668
+ animation: none;
669
+ }
670
+ }
671
+ .vm-layer[data-reduced-motion="true"] .vm-chip-row .vm-chip-pill[data-busy] {
672
+ animation: none;
673
+ }
442
674
  `;
443
675
  //# sourceMappingURL=shell.styles.js.map
@@ -1 +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,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACrE,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;;;;;;;;;;;;;qGAa4D,oBAAoB;;kBAEvG,MAAM,CAAC,MAAM;mBACZ,MAAM,CAAC,OAAO;oBACb,MAAM,CAAC,QAAQ;qBACd,MAAM,CAAC,SAAS;qBAChB,MAAM,CAAC,cAAc;oBACtB,MAAM,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAyTV,CAAC,CAAC,aAAa;;iBAEvB,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAkDH,CAAC,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;CAqBxC,CAAC"}
1
+ {"version":3,"file":"shell.styles.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/shell/shell.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/F,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;;;;+BAIS,CAAC,CAAC,IAAI;oBACjB,CAAC,CAAC,IAAI;;qBAEL,CAAC,CAAC,SAAS;eACjB,CAAC,CAAC,IAAI;0BACK,CAAC,CAAC,aAAa;;;;;;;;;;;;;qGAa4D,oBAAoB;;kBAEvG,MAAM,CAAC,MAAM;mBACZ,MAAM,CAAC,OAAO;oBACb,MAAM,CAAC,QAAQ;qBACd,MAAM,CAAC,SAAS;qBAChB,MAAM,CAAC,cAAc;oBACtB,MAAM,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAueV,CAAC,CAAC,aAAa;;iBAEvB,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA4DiC,CAAC,CAAC,IAAI;;;KAG9D,CAAC,CAAC,aAAa;yBACK,CAAC,CAAC,aAAa,GAAG,CAAC,uBAAuB,wBAAwB,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA+BzE,CAAC,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BxC,CAAC"}
@@ -11,6 +11,7 @@ import type { AgentLogLine } from "./parts/MomentLine.js";
11
11
  import type { ComposerSlice } from "./parts/Composer.js";
12
12
  import type { SuggestionFastPath } from "./parts/Chip.js";
13
13
  import type { CodeSurvey } from "./parts/SurveyStrip.js";
14
+ import type { ExamplesChipPhase, StatusChipId } from "./parts/StatusChipRow.js";
14
15
  export type Posture = AccessPosture;
15
16
  export type DataGrant = GrantData;
16
17
  export type RosterMember = MemberRowMember;
@@ -71,7 +72,7 @@ export interface CodeSlice {
71
72
  log: readonly AgentLogLine[];
72
73
  suggestions: readonly string[];
73
74
  goldSuggestion: string | null;
74
- onSuggestion(text: string): void;
75
+ onSuggestion(text: string): unknown;
75
76
  suggestionFastPaths: readonly SuggestionFastPath[] | null;
76
77
  onToggleFastPath: ((text: string) => void) | null;
77
78
  kicker: string;
@@ -218,6 +219,12 @@ export interface VibeMenuProps {
218
219
  onPaused(paused: boolean): void;
219
220
  } | null;
220
221
  saveAsk?: boolean;
222
+ examplesCleared?: {
223
+ onTap(): void;
224
+ readonly phase?: ExamplesChipPhase;
225
+ } | null;
226
+ hidden?: readonly StatusChipId[];
227
+ onHide?(id: StatusChipId): void;
221
228
  };
222
229
  closedStatus: ReactNode;
223
230
  onHome(): void;
@@ -240,7 +247,6 @@ export interface VibeMenuProps {
240
247
  frame?: "viewport" | "contained";
241
248
  reducedMotion?: boolean;
242
249
  homeTabRow?: boolean;
243
- firstBuild?: boolean;
244
250
  settledAtMount?: boolean;
245
251
  }
246
252
  export interface CardNav {
@@ -1 +1 @@
1
- {"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"AA8UA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,qDAAqD;IACjE,eAAe,EAAE,sDAAsD;CAC/D,CAAC,CAAC"}
1
+ {"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"AAsVA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,qDAAqD;IACjE,eAAe,EAAE,sDAAsD;CAC/D,CAAC,CAAC"}