@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,62 @@
1
+ import * as React from "react";
2
+ import { Glyph } from "./Glyph.js";
3
+ function chipClassName(props) {
4
+ const names = ["vm-chip"];
5
+ if (props.copy === true)
6
+ names.push("vm-copy");
7
+ if (props.name === true)
8
+ names.push("is-name");
9
+ if (props.ghost === true)
10
+ names.push("is-ghost");
11
+ return names.join(" ");
12
+ }
13
+ export function Chip(props) {
14
+ return (React.createElement("button", { ref: props.chipRef, className: chipClassName(props), type: "button", "aria-label": props.ariaLabel, "aria-disabled": props.disabled === true ? "true" : undefined, style: props.style, onClick: () => {
15
+ if (props.disabled === true)
16
+ return;
17
+ props.onClick();
18
+ } }, props.label));
19
+ }
20
+ export function ChipRow(props) {
21
+ return React.createElement("div", { className: "vm-picks" }, props.children);
22
+ }
23
+ function toggleable(state) {
24
+ return state.canBless === true || state.canUnbless === true;
25
+ }
26
+ function suggestionMark(text, state, onToggle) {
27
+ if (state.jump === true) {
28
+ return (React.createElement("span", { className: "vm-suggest-badge is-jump", role: "img", "aria-label": "Opens another app" },
29
+ React.createElement(Glyph, { name: "arrow-right" })));
30
+ }
31
+ if (typeof onToggle === "function" && toggleable(state)) {
32
+ return (React.createElement("button", { className: "vm-suggest-shield", type: "button", "aria-pressed": state.shielded === true ? "true" : "false", "aria-label": `Fast path: ${text}`, onClick: () => onToggle(text) },
33
+ React.createElement(Glyph, { name: "shield" })));
34
+ }
35
+ if (state.shielded === true) {
36
+ return (React.createElement("span", { className: "vm-suggest-badge is-shield", role: "img", "aria-label": "Stays in this app" },
37
+ React.createElement(Glyph, { name: "shield" })));
38
+ }
39
+ return null;
40
+ }
41
+ export function Suggestions(props) {
42
+ if (props.items.length === 0)
43
+ return null;
44
+ const onToggle = props.onToggleFastPath;
45
+ return (React.createElement("div", { className: "vm-suggestions" }, props.items.slice(0, 3).map((text) => {
46
+ const pick = (React.createElement("button", { key: text, className: "vm-suggest", type: "button", onClick: () => props.onPick(text) }, text));
47
+ const state = props.fastPaths?.find((path) => path.text === text)?.state;
48
+ if (state === undefined)
49
+ return pick;
50
+ const mark = suggestionMark(text, state, onToggle);
51
+ if (mark === null)
52
+ return pick;
53
+ return (React.createElement("span", { key: text, className: "vm-suggest-item" },
54
+ pick,
55
+ mark));
56
+ })));
57
+ }
58
+ export function RefreshButton(props) {
59
+ return (React.createElement("button", { className: "vm-refresh", type: "button", "aria-label": "More ideas", onClick: props.onRefresh },
60
+ React.createElement(Glyph, { name: "refresh" })));
61
+ }
62
+ //# sourceMappingURL=Chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chip.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Chip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import * as React from "react";
2
+ import type { UseAttachments } from "../../../attachments/use-attachments.js";
3
+ import { type PromptAttachment } from "../../../attachments/attachment-types.js";
4
+ export type ComposerCap = "Send" | "Stop" | "Remix this";
5
+ export interface ComposerEdge {
6
+ readonly text: string;
7
+ readonly seq: number;
8
+ }
9
+ export interface ComposerRestore extends ComposerEdge {
10
+ readonly attachments?: readonly PromptAttachment[];
11
+ }
12
+ export type ComposerSubmitAnswer = boolean | undefined | Promise<boolean | undefined>;
13
+ export interface ComposerSlice {
14
+ readonly placeholder: string;
15
+ readonly cap: ComposerCap;
16
+ readonly queuedNote: boolean;
17
+ readonly disabled: boolean;
18
+ readonly sendsNow: boolean;
19
+ readonly onSubmit: (text: string, attachments: readonly PromptAttachment[]) => ComposerSubmitAnswer;
20
+ readonly onStop: () => void;
21
+ readonly stopDisabled?: boolean;
22
+ readonly seed: ComposerEdge | null;
23
+ readonly restore: ComposerRestore | null;
24
+ }
25
+ export interface ComposerDraft {
26
+ readonly text: string;
27
+ setText(text: string): void;
28
+ readonly attachments: UseAttachments;
29
+ readonly queued: readonly string[];
30
+ submit(): void;
31
+ stop(): void;
32
+ }
33
+ export interface ComposerProps {
34
+ readonly composer: ComposerSlice;
35
+ readonly draft: ComposerDraft;
36
+ readonly placeholder?: string;
37
+ readonly fieldRef?: React.Ref<HTMLTextAreaElement>;
38
+ }
39
+ export declare function Composer(props: ComposerProps): React.ReactElement;
@@ -0,0 +1,47 @@
1
+ import * as React from "react";
2
+ import { ATTACHMENT_ACCEPT } from "../../../attachments/attachment-types.js";
3
+ import { composerFileDrop } from "../../../attachments/composer-file-drop.js";
4
+ import { Glyph } from "./Glyph.js";
5
+ function StagedAttachments(props) {
6
+ if (props.chips.length === 0)
7
+ return null;
8
+ return (React.createElement("div", { className: "vm-picks vm-attachments", "aria-live": "polite" }, props.chips.map((chip) => (React.createElement("button", { key: chip.id, className: "vm-chip is-name is-ghost", type: "button", "data-status": chip.status, title: chip.error, "aria-label": `Remove ${chip.name}`, onClick: () => props.onRemove(chip.id) },
9
+ chip.status === "processing" ? React.createElement("span", { className: "vm-busy", "aria-hidden": "true" }) : null,
10
+ React.createElement("span", null, chip.name))))));
11
+ }
12
+ export function Composer(props) {
13
+ const { composer, draft } = props;
14
+ const attachments = draft.attachments;
15
+ const fileInput = React.useRef(null);
16
+ const building = composer.cap === "Stop";
17
+ function submit() {
18
+ if (composer.disabled === true)
19
+ return;
20
+ draft.submit();
21
+ }
22
+ function onKeyDown(event) {
23
+ if (event.key !== "Enter" || event.shiftKey === true)
24
+ return;
25
+ if (event.nativeEvent.isComposing === true || event.nativeEvent.keyCode === 229)
26
+ return;
27
+ event.preventDefault();
28
+ submit();
29
+ }
30
+ const drop = composerFileDrop({ onFiles: attachments.add });
31
+ const sendCap = (React.createElement("button", { className: "vm-cap", type: "button", "data-send": "", disabled: composer.disabled, onClick: submit }, composer.cap === "Remix this" ? "Remix this" : "Send"));
32
+ return (React.createElement(React.Fragment, null,
33
+ React.createElement("input", { ref: fileInput, type: "file", multiple: true, hidden: true, accept: ATTACHMENT_ACCEPT, onChange: (event) => {
34
+ attachments.add(Array.from(event.currentTarget.files ?? []));
35
+ event.currentTarget.value = "";
36
+ } }),
37
+ React.createElement(StagedAttachments, { chips: attachments.attachments, onRemove: attachments.remove }),
38
+ React.createElement("label", { className: building ? "vm-composer is-building" : "vm-composer", onDragOver: drop.onDragOver, onDrop: drop.onDrop },
39
+ React.createElement("textarea", { ref: props.fieldRef, rows: 1, value: draft.text, placeholder: props.placeholder ?? composer.placeholder, "aria-label": composer.cap === "Remix this" ? "Describe your remix" : "Describe a change", disabled: composer.disabled, onChange: (event) => draft.setText(event.target.value), onKeyDown: onKeyDown }),
40
+ React.createElement("button", { className: "vm-attach", type: "button", "aria-label": "Attach a picture or file", disabled: composer.disabled, onClick: () => fileInput.current?.click() },
41
+ React.createElement(Glyph, { name: "paperclip" })),
42
+ building ? (React.createElement(React.Fragment, null,
43
+ React.createElement("button", { className: "vm-cap", type: "button", "data-stop": "", disabled: composer.stopDisabled === true, onClick: () => draft.stop() }, "Stop"),
44
+ sendCap)) : (sendCap)),
45
+ composer.queuedNote ? React.createElement("p", { className: "vm-queue-note" }, "Sends when this finishes.") : null));
46
+ }
47
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Composer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ export interface DoneButtonProps {
3
+ readonly onDone: () => void;
4
+ }
5
+ export declare function DoneButton(props: DoneButtonProps): React.ReactElement;
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ export function DoneButton(props) {
3
+ return (React.createElement("button", { className: "vm-done", type: "button", "data-back": "", onClick: props.onDone }, "Done"));
4
+ }
5
+ //# sourceMappingURL=DoneButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoneButton.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/DoneButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,CACL,gCAAQ,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,QAAQ,eAAW,EAAE,EAAC,OAAO,EAAE,KAAK,CAAC,MAAM,WAEnE,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ export type GlyphName = "home" | "settings" | "code" | "users" | "at-sign" | "plus" | "star" | "sliders" | "log-out" | "user-plus" | "arrow-right" | "arrow-left" | "check" | "chevron-right" | "layout-grid" | "key" | "palette" | "file" | "help-circle" | "braces" | "qr-code" | "paperclip" | "lock" | "globe" | "copy" | "refresh" | "database" | "line-chart" | "lines" | "bell" | "pin" | "user-minus" | "shield";
3
+ export declare const PORT_ADDED_GLYPHS: readonly GlyphName[];
4
+ export declare const GLYPH_NAMES: readonly GlyphName[];
5
+ export interface GlyphProps {
6
+ readonly name: GlyphName;
7
+ readonly className?: string;
8
+ }
9
+ export declare function Glyph(props: GlyphProps): React.ReactElement;
@@ -0,0 +1,123 @@
1
+ import * as React from "react";
2
+ export const PORT_ADDED_GLYPHS = ["bell", "pin", "user-minus", "shield"];
3
+ const GLYPH_SHAPES = {
4
+ home: React.createElement("path", { d: "M3 11l9-8 9 8v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z" }),
5
+ settings: (React.createElement(React.Fragment, null,
6
+ React.createElement("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
7
+ React.createElement("circle", { cx: "12", cy: "12", r: "3" }))),
8
+ code: (React.createElement(React.Fragment, null,
9
+ React.createElement("polyline", { points: "16 18 22 12 16 6" }),
10
+ React.createElement("polyline", { points: "8 6 2 12 8 18" }))),
11
+ users: (React.createElement(React.Fragment, null,
12
+ React.createElement("circle", { cx: "9", cy: "7", r: "4" }),
13
+ React.createElement("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2M23 21v-2a4 4 0 0 0-3-3.9M16 3.1a4 4 0 0 1 0 7.8" }))),
14
+ "at-sign": (React.createElement(React.Fragment, null,
15
+ React.createElement("circle", { cx: "12", cy: "12", r: "4" }),
16
+ React.createElement("path", { d: "M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8" }))),
17
+ plus: React.createElement("path", { d: "M12 5v14M5 12h14" }),
18
+ star: React.createElement("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01z" }),
19
+ sliders: React.createElement("path", { d: "M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6" }),
20
+ "log-out": React.createElement("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9" }),
21
+ "user-plus": (React.createElement(React.Fragment, null,
22
+ React.createElement("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
23
+ React.createElement("circle", { cx: "9", cy: "7", r: "4" }),
24
+ React.createElement("path", { d: "M19 8v6M22 11h-6" }))),
25
+ "arrow-right": React.createElement("path", { d: "M5 12h14M12 5l7 7-7 7" }),
26
+ "arrow-left": React.createElement("path", { d: "M19 12H5M12 19l-7-7 7-7" }),
27
+ check: React.createElement("path", { d: "M20 6L9 17l-5-5" }),
28
+ "chevron-right": React.createElement("path", { d: "M9 6l6 6-6 6" }),
29
+ "layout-grid": (React.createElement(React.Fragment, null,
30
+ React.createElement("rect", { x: "3", y: "3", width: "7", height: "7", rx: "1" }),
31
+ React.createElement("rect", { x: "14", y: "3", width: "7", height: "7", rx: "1" }),
32
+ React.createElement("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
33
+ React.createElement("rect", { x: "14", y: "14", width: "7", height: "7", rx: "1" }))),
34
+ key: (React.createElement(React.Fragment, null,
35
+ React.createElement("circle", { cx: "7.5", cy: "15.5", r: "5.5" }),
36
+ React.createElement("path", { d: "M21 2l-9.6 9.6M15.5 7.5l3 3L22 7l-3-3" }))),
37
+ palette: (React.createElement(React.Fragment, null,
38
+ React.createElement("circle", { cx: "13.5", cy: "6.5", r: "1" }),
39
+ React.createElement("circle", { cx: "17.5", cy: "10.5", r: "1" }),
40
+ React.createElement("circle", { cx: "8.5", cy: "7.5", r: "1" }),
41
+ React.createElement("circle", { cx: "6.5", cy: "12.5", r: "1" }),
42
+ React.createElement("path", { d: "M12 2a10 10 0 0 0 0 20c.93 0 1.5-.75 1.5-1.5 0-.39-.15-.74-.39-1.01-.24-.27-.38-.62-.38-.99 0-.83.67-1.5 1.5-1.5H16a6 6 0 0 0 6-6c0-4.97-4.48-9-10-9z" }))),
43
+ file: (React.createElement(React.Fragment, null,
44
+ React.createElement("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
45
+ React.createElement("path", { d: "M14 2v6h6" }))),
46
+ "help-circle": (React.createElement(React.Fragment, null,
47
+ React.createElement("circle", { cx: "12", cy: "12", r: "10" }),
48
+ React.createElement("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3M12 17h.01" }))),
49
+ braces: (React.createElement("path", { d: "M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5a2 2 0 0 0 2 2h1M16 21h1a2 2 0 0 0 2-2v-5a2 2 0 0 1 2-2 2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1" })),
50
+ "qr-code": (React.createElement(React.Fragment, null,
51
+ React.createElement("rect", { x: "3", y: "3", width: "7", height: "7" }),
52
+ React.createElement("rect", { x: "14", y: "3", width: "7", height: "7" }),
53
+ React.createElement("rect", { x: "3", y: "14", width: "7", height: "7" }),
54
+ React.createElement("path", { d: "M14 14h3v3h-3zM20 14v.01M14 20h.01M17 17h4v4h-4" }))),
55
+ paperclip: (React.createElement("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" })),
56
+ lock: (React.createElement(React.Fragment, null,
57
+ React.createElement("rect", { x: "4", y: "11", width: "16", height: "10", rx: "2" }),
58
+ React.createElement("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }))),
59
+ globe: (React.createElement(React.Fragment, null,
60
+ React.createElement("circle", { cx: "12", cy: "12", r: "10" }),
61
+ React.createElement("path", { d: "M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" }))),
62
+ copy: (React.createElement(React.Fragment, null,
63
+ React.createElement("rect", { x: "9", y: "9", width: "12", height: "12", rx: "2" }),
64
+ React.createElement("path", { d: "M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1" }))),
65
+ refresh: React.createElement("path", { d: "M21 12a9 9 0 1 1-2.64-6.36L21 8M21 3v5h-5" }),
66
+ database: (React.createElement(React.Fragment, null,
67
+ React.createElement("ellipse", { cx: "12", cy: "5", rx: "9", ry: "3" }),
68
+ React.createElement("path", { d: "M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5M3 12c0 1.66 4 3 9 3s9-1.34 9-3" }))),
69
+ "line-chart": (React.createElement(React.Fragment, null,
70
+ React.createElement("path", { d: "M3 3v18h18" }),
71
+ React.createElement("path", { d: "M7 15l4-4 3 3 5-6" }))),
72
+ lines: React.createElement("path", { d: "M4 7h16M4 12h16M4 17h10" }),
73
+ bell: (React.createElement(React.Fragment, null,
74
+ React.createElement("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
75
+ React.createElement("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" }))),
76
+ pin: (React.createElement(React.Fragment, null,
77
+ React.createElement("path", { d: "M12 17v5" }),
78
+ React.createElement("path", { d: "M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z" }))),
79
+ "user-minus": (React.createElement(React.Fragment, null,
80
+ React.createElement("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
81
+ React.createElement("circle", { cx: "9", cy: "7", r: "4" }),
82
+ React.createElement("path", { d: "M22 11h-6" }))),
83
+ shield: (React.createElement("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" })),
84
+ };
85
+ export const GLYPH_NAMES = [
86
+ "home",
87
+ "settings",
88
+ "code",
89
+ "users",
90
+ "at-sign",
91
+ "plus",
92
+ "star",
93
+ "sliders",
94
+ "log-out",
95
+ "user-plus",
96
+ "arrow-right",
97
+ "arrow-left",
98
+ "check",
99
+ "chevron-right",
100
+ "layout-grid",
101
+ "key",
102
+ "palette",
103
+ "file",
104
+ "help-circle",
105
+ "braces",
106
+ "qr-code",
107
+ "paperclip",
108
+ "lock",
109
+ "globe",
110
+ "copy",
111
+ "refresh",
112
+ "database",
113
+ "line-chart",
114
+ "lines",
115
+ "bell",
116
+ "pin",
117
+ "user-minus",
118
+ "shield",
119
+ ];
120
+ export function Glyph(props) {
121
+ return (React.createElement("svg", { className: props.className ?? "vm-glyph", viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false", "data-glyph": props.name }, GLYPH_SHAPES[props.name]));
122
+ }
123
+ //# sourceMappingURL=Glyph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Glyph.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/Glyph.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ export type GrantData = "read" | "write" | "submit";
3
+ export interface GrantControlsProps {
4
+ readonly who: string;
5
+ readonly label: string;
6
+ readonly data: GrantData | null;
7
+ readonly code: boolean | null;
8
+ readonly readOnly: boolean;
9
+ readonly disabled?: boolean;
10
+ readonly onData?: (data: "read" | "write") => void;
11
+ readonly onCode?: (code: boolean) => void;
12
+ }
13
+ export declare function GrantControls(props: GrantControlsProps): React.ReactElement;
@@ -0,0 +1,61 @@
1
+ import * as React from "react";
2
+ import { nextRadioIndex } from "./radio-keys.js";
3
+ const DATA_OPTIONS = [
4
+ { value: "read", label: "Read" },
5
+ { value: "write", label: "Write" },
6
+ ];
7
+ const CODE_OPTIONS = [
8
+ { value: "yes", label: "Yes" },
9
+ { value: "no", label: "No" },
10
+ ];
11
+ function MiniSegment(props) {
12
+ const buttons = React.useRef([]);
13
+ const focusIndex = Math.max(0, props.options.findIndex((option) => option.value === props.value));
14
+ function choose(index) {
15
+ const option = props.options[index];
16
+ if (option === undefined)
17
+ return;
18
+ buttons.current[index]?.focus();
19
+ if (option.value === props.value || props.disabled === true)
20
+ return;
21
+ props.onChange?.(option.value);
22
+ }
23
+ return (React.createElement("span", { className: "vm-grant-ctl" },
24
+ React.createElement("span", { className: "vm-grant-name" }, props.name),
25
+ React.createElement("span", { className: "vm-seg is-mini", role: "radiogroup", "aria-label": props.name }, props.options.map((option, index) => (React.createElement("button", { key: option.value, ref: (el) => {
26
+ buttons.current[index] = el;
27
+ }, className: option.value === props.value ? "is-active" : "", type: "button", role: "radio", "aria-checked": option.value === props.value, "aria-disabled": props.disabled === true ? "true" : undefined, tabIndex: index === focusIndex ? 0 : -1, "data-grant": `${props.who}:${props.kind}:${option.value}`, onClick: () => choose(index), onKeyDown: (event) => {
28
+ const next = nextRadioIndex({ key: event.key, index, count: props.options.length });
29
+ if (next === undefined)
30
+ return;
31
+ event.preventDefault();
32
+ choose(next);
33
+ } }, option.label))))));
34
+ }
35
+ function FixedGrant(props) {
36
+ return (React.createElement("span", { className: "vm-grant-ctl" },
37
+ React.createElement("span", { className: "vm-grant-name" }, props.name),
38
+ React.createElement("span", { className: "vm-grant-fixed" }, props.value)));
39
+ }
40
+ function DataGrantControl(props) {
41
+ const data = props.data;
42
+ if (data === "submit")
43
+ return React.createElement(FixedGrant, { name: "Data", value: "Submit" });
44
+ if (props.readOnly)
45
+ return data === null ? null : React.createElement(FixedGrant, { name: "Data", value: data === "read" ? "Read" : "Write" });
46
+ return (React.createElement(MiniSegment, { name: "Data", who: props.who, kind: "data", options: DATA_OPTIONS, value: data, disabled: props.disabled === true, onChange: props.onData }));
47
+ }
48
+ function CodeGrantControl(props) {
49
+ if (props.code === null)
50
+ return null;
51
+ if (props.readOnly)
52
+ return React.createElement(FixedGrant, { name: "Code", value: props.code ? "Yes" : "No" });
53
+ const onCode = props.onCode;
54
+ return (React.createElement(MiniSegment, { name: "Code", who: props.who, kind: "code", options: CODE_OPTIONS, value: props.code ? "yes" : "no", disabled: props.disabled === true, onChange: onCode === undefined ? undefined : (value) => onCode(value === "yes") }));
55
+ }
56
+ export function GrantControls(props) {
57
+ return (React.createElement("span", { className: "vm-grants", role: "group", "aria-label": `${props.label} access` },
58
+ React.createElement(DataGrantControl, { ...props }),
59
+ React.createElement(CodeGrantControl, { ...props })));
60
+ }
61
+ //# sourceMappingURL=GrantControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrantControls.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/GrantControls.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ import type { Result } from "@adviser/cement";
3
+ import { type GrantData } from "./GrantControls.js";
4
+ export interface MemberRowMember {
5
+ readonly key: string;
6
+ readonly handle: string | null;
7
+ readonly email: string | null;
8
+ readonly data: GrantData | null;
9
+ readonly code: boolean;
10
+ readonly pendingEmail: boolean;
11
+ }
12
+ export declare function memberDisplayName(member: MemberRowMember): string;
13
+ export interface MemberRowProps {
14
+ readonly member: MemberRowMember;
15
+ readonly readOnly: boolean;
16
+ readonly busy?: boolean;
17
+ readonly onData?: (data: "read" | "write") => void;
18
+ readonly onCode?: (code: boolean) => void;
19
+ readonly onOpen?: () => void;
20
+ readonly onRemoveInvite?: () => void;
21
+ }
22
+ export declare function MemberRow(props: MemberRowProps): React.ReactElement;
23
+ export interface MemberRequestProps {
24
+ readonly who: string;
25
+ readonly handle: string;
26
+ readonly pending: boolean;
27
+ readonly onApprove: (grants: {
28
+ readonly data: "read" | "write";
29
+ readonly code: boolean;
30
+ }) => void;
31
+ readonly onDecline: () => void;
32
+ }
33
+ export declare function MemberRequest(props: MemberRequestProps): React.ReactElement;
34
+ export interface InviteFieldProps {
35
+ readonly onInvite: (handleOrEmail: string) => Promise<Result<void>>;
36
+ }
37
+ export declare function InviteField(props: InviteFieldProps): React.ReactElement;
@@ -0,0 +1,70 @@
1
+ import * as React from "react";
2
+ import { Chip } from "./Chip.js";
3
+ import { GrantControls } from "./GrantControls.js";
4
+ export function memberDisplayName(member) {
5
+ if (member.handle !== null)
6
+ return `@${member.handle}`;
7
+ if (member.email !== null)
8
+ return member.email;
9
+ return member.key;
10
+ }
11
+ function memberInitial(member) {
12
+ return (member.handle ?? member.email ?? member.key).slice(0, 1).toUpperCase();
13
+ }
14
+ export function MemberRow(props) {
15
+ const member = props.member;
16
+ const name = memberDisplayName(member);
17
+ const nameNode = props.onOpen === undefined ? (React.createElement("span", { className: "vm-label is-plain" }, name)) : (React.createElement("button", { className: "vm-label is-plain", type: "button", onClick: props.onOpen }, name));
18
+ return (React.createElement("div", { className: "vm-person", "data-member": member.key },
19
+ React.createElement("span", { className: "vm-dot vm-initial", "aria-hidden": "true" }, memberInitial(member)),
20
+ nameNode,
21
+ member.pendingEmail ? (React.createElement(React.Fragment, null,
22
+ React.createElement("span", { className: "vm-grants" },
23
+ React.createElement("span", { className: "vm-grant-ctl" },
24
+ React.createElement("span", { className: "vm-grant-fixed" }, "Invited"))),
25
+ props.onRemoveInvite === undefined ? null : (React.createElement(Chip, { label: "Remove", ghost: true, ariaLabel: `Remove invite for ${name}`, disabled: props.busy === true, onClick: props.onRemoveInvite })))) : (React.createElement(GrantControls, { who: member.key, label: name, data: member.data, code: member.code, readOnly: props.readOnly, disabled: props.busy === true, onData: props.onData, onCode: props.onCode }))));
26
+ }
27
+ export function MemberRequest(props) {
28
+ const [data, setData] = React.useState("read");
29
+ const [code, setCode] = React.useState(false);
30
+ return (React.createElement("div", { className: "vm-request", "data-request": props.who },
31
+ React.createElement("div", { className: "vm-request-top" },
32
+ React.createElement("span", null,
33
+ React.createElement("b", null,
34
+ "@",
35
+ props.handle),
36
+ " wants access")),
37
+ React.createElement(GrantControls, { who: props.who, label: `@${props.handle}`, data: data, code: code, readOnly: false, onData: setData, onCode: setCode }),
38
+ React.createElement("div", { className: "vm-request-actions" },
39
+ React.createElement(Chip, { label: "Approve", disabled: props.pending, onClick: () => props.onApprove({ data, code }) }),
40
+ React.createElement(Chip, { label: "Not now", ghost: true, disabled: props.pending, onClick: () => props.onDecline() }))));
41
+ }
42
+ export function InviteField(props) {
43
+ const [value, setValue] = React.useState("");
44
+ const [failed, setFailed] = React.useState(false);
45
+ const [busy, setBusy] = React.useState(false);
46
+ async function send() {
47
+ const text = value.trim();
48
+ if (text === "" || busy === true)
49
+ return;
50
+ setBusy(true);
51
+ const result = await props.onInvite(text);
52
+ setBusy(false);
53
+ if (result.isErr()) {
54
+ setFailed(true);
55
+ return;
56
+ }
57
+ setFailed(false);
58
+ setValue((current) => (current.trim() === text ? "" : current));
59
+ }
60
+ return (React.createElement("input", { className: "vm-input", placeholder: "Invite by handle or email", "aria-label": "Invite by handle or email", autoCapitalize: "off", spellCheck: false, value: value, "aria-invalid": failed ? true : undefined, "aria-busy": busy ? true : undefined, onChange: (event) => {
61
+ setValue(event.target.value);
62
+ setFailed(false);
63
+ }, onKeyDown: (event) => {
64
+ if (event.key !== "Enter")
65
+ return;
66
+ event.preventDefault();
67
+ void send();
68
+ } }));
69
+ }
70
+ //# sourceMappingURL=MemberRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemberRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/MemberRow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ import type { ReactNode, Ref } from "react";
3
+ import type { Section } from "../menu-state.js";
4
+ export interface MenuCardProps {
5
+ readonly section: Section | null;
6
+ readonly cardRef?: Ref<HTMLElement>;
7
+ readonly bodyRef?: Ref<HTMLDivElement>;
8
+ readonly children?: ReactNode;
9
+ }
10
+ export declare function MenuCard(props: MenuCardProps): React.ReactElement;
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ import { SECTION_TITLES } from "../menu-state.js";
3
+ export function MenuCard(props) {
4
+ return (React.createElement("section", { ref: props.cardRef, className: "vm-card", "data-section": props.section ?? undefined, "aria-label": props.section === null ? "Vibe menu card" : SECTION_TITLES[props.section] },
5
+ React.createElement("div", { ref: props.bodyRef, className: "vm-card-body" }, props.children)));
6
+ }
7
+ //# sourceMappingURL=MenuCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuCard.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/MenuCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,OAAO,CACL,iCACE,GAAG,EAAE,KAAK,CAAC,OAAO,EAClB,SAAS,EAAC,SAAS,kBACL,KAAK,CAAC,OAAO,IAAI,SAAS,gBAC5B,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;QAErF,6BAAK,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAC,cAAc,IAC9C,KAAK,CAAC,QAAQ,CACX,CACE,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as React from "react";
2
+ import type { CurrentMoment, MomentItem } from "../moments.js";
3
+ export type AgentLogWho = "you" | "built" | "agent";
4
+ export interface AgentLogLine {
5
+ readonly who: AgentLogWho;
6
+ readonly text: string;
7
+ }
8
+ export interface MomentLogControl {
9
+ readonly open: boolean;
10
+ readonly lines: readonly AgentLogLine[];
11
+ readonly onToggle: () => void;
12
+ }
13
+ export interface MomentLineProps {
14
+ readonly moment: CurrentMoment;
15
+ readonly log: MomentLogControl | null;
16
+ readonly onAction: (item: MomentItem, action: string) => void;
17
+ }
18
+ export interface AgentLogProps {
19
+ readonly id?: string;
20
+ readonly lines: readonly AgentLogLine[];
21
+ }
22
+ export declare function AgentLog(props: AgentLogProps): React.ReactElement;
23
+ export declare function MomentLine(props: MomentLineProps): React.ReactElement | null;