@mcp-b/react-components 0.41.0 → 0.43.0

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 (125) hide show
  1. package/dist/{AgentChat-DVr2giwD.d.ts → AgentChat-Bibfj7u1.d.ts} +1 -1
  2. package/dist/{AgentChatStartScreen-CO49yepa.d.ts → AgentChatStartScreen-Bkv7Avni.d.ts} +6 -0
  3. package/dist/McpPluginCatalog-mbGw8FTu.d.ts +92 -0
  4. package/dist/ResponsiveSidebarShell-DOXd5T-d.d.ts +111 -0
  5. package/dist/SetupChecklist-H1JRCIIe.js +77 -0
  6. package/dist/{ThinkChatActivity-DyGHj01E.d.ts → ThinkChatActivity-CgvmTXXB.d.ts} +4 -1
  7. package/dist/Workspace-F3raHdYV.d.ts +140 -0
  8. package/dist/{WorkspaceFileView-D0yFwoDr.js → WorkspaceFileView-DWMKxX_u.js} +15 -21
  9. package/dist/components/agents-sdk/AgentActivity.js +3 -2
  10. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  11. package/dist/components/agents-sdk/AgentChat.js +1 -0
  12. package/dist/components/agents-sdk/BrowserRunPanel.js +2 -1
  13. package/dist/components/agents-sdk/ManagerOffice.d.ts +39 -27
  14. package/dist/components/agents-sdk/ManagerOffice.js +80 -44
  15. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -91
  16. package/dist/components/agents-sdk/McpPluginCatalog.js +3 -1
  17. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  18. package/dist/components/agents-sdk/ThinkChat.d.ts +2 -2
  19. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  20. package/dist/components/agents-sdk/ThinkChatActivity.js +18 -4
  21. package/dist/components/agents-sdk/ThinkChatToolPanels.js +6 -2
  22. package/dist/components/agents-sdk/ThinkExecutionDetail.js +2 -0
  23. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -0
  24. package/dist/components/agents-sdk/ThinkFullApp.d.ts +56 -90
  25. package/dist/components/agents-sdk/ThinkFullApp.js +74 -122
  26. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
  27. package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +8 -6
  28. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +71 -93
  29. package/dist/components/agents-sdk/ThinkSidepanel.d.ts +173 -0
  30. package/dist/components/agents-sdk/ThinkSidepanel.js +656 -0
  31. package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +4 -5
  32. package/dist/components/agents-sdk/ThinkThreadPicker.js +6 -5
  33. package/dist/components/agents-sdk/Workspace.d.ts +1 -139
  34. package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
  35. package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +1 -1
  36. package/dist/components/agents-sdk/WorkspaceExplorer.js +4 -3
  37. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  38. package/dist/components/ai-sdk/AgentChatStartScreen.d.ts +1 -1
  39. package/dist/components/ai-sdk/AgentChatStartScreen.js +5 -2
  40. package/dist/components/ai-sdk/MessageScroller.js +2 -1
  41. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -0
  42. package/dist/components/ai-sdk/PromptInput.js +20 -14
  43. package/dist/components/extension/ChatGptSignInScreen.js +1 -0
  44. package/dist/components/foundations/ToggleGroup.d.ts +79 -1
  45. package/dist/components/foundations/Toolbar.d.ts +151 -1
  46. package/dist/components/general-purpose/AppFrame.js +1 -0
  47. package/dist/components/general-purpose/AppTopBar.d.ts +96 -1
  48. package/dist/components/general-purpose/ResizableSidePanel.d.ts +8 -0
  49. package/dist/components/general-purpose/ResizableSidePanel.js +3 -2
  50. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +2 -95
  51. package/dist/components/general-purpose/ResponsiveSidebarShell.js +74 -74
  52. package/dist/components/general-purpose/SetupChecklist.js +1 -76
  53. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  54. package/dist/components/general-purpose/WebPreview.d.ts +3 -0
  55. package/dist/components/general-purpose/WebPreview.js +2 -2
  56. package/dist/components/nanites/AgentToolDetail.js +1 -0
  57. package/dist/styles/accordion.css +1 -0
  58. package/dist/styles/action-guide.css +8 -7
  59. package/dist/styles/activity-header.css +13 -39
  60. package/dist/styles/activity.css +40 -55
  61. package/dist/styles/agent-attention.css +14 -14
  62. package/dist/styles/agent-chat.css +80 -58
  63. package/dist/styles/agent-connection.css +10 -4
  64. package/dist/styles/agent-tool-detail.css +4 -4
  65. package/dist/styles/alert-dialog.css +4 -4
  66. package/dist/styles/app-frame.css +1 -3
  67. package/dist/styles/app-top-bar.css +5 -9
  68. package/dist/styles/approval.css +1 -0
  69. package/dist/styles/artifact.css +6 -6
  70. package/dist/styles/attachment-preview.css +5 -4
  71. package/dist/styles/browser-replay.css +6 -6
  72. package/dist/styles/browser-run-panel.css +1 -0
  73. package/dist/styles/button.css +15 -6
  74. package/dist/styles/card.css +5 -5
  75. package/dist/styles/chatgpt-sign-in-screen.css +1 -1
  76. package/dist/styles/code-block.css +14 -13
  77. package/dist/styles/codex-model-selector.css +2 -0
  78. package/dist/styles/collapsible.css +1 -0
  79. package/dist/styles/commit.css +6 -6
  80. package/dist/styles/context.css +9 -9
  81. package/dist/styles/conversation-tab-picker.css +1 -1
  82. package/dist/styles/conversation.css +6 -8
  83. package/dist/styles/dialog.css +4 -4
  84. package/dist/styles/empty-state.css +3 -3
  85. package/dist/styles/environment-variables.css +9 -9
  86. package/dist/styles/field.css +2 -1
  87. package/dist/styles/fieldset.css +2 -2
  88. package/dist/styles/index.css +4 -3
  89. package/dist/styles/manager-office.css +23 -29
  90. package/dist/styles/mcp-plugin-catalog.css +11 -10
  91. package/dist/styles/mcp-server-picker.css +3 -3
  92. package/dist/styles/message-scroller.css +9 -11
  93. package/dist/styles/message.css +43 -20
  94. package/dist/styles/navigation-menu.css +1 -0
  95. package/dist/styles/plan.css +13 -12
  96. package/dist/styles/pricing-page.css +26 -23
  97. package/dist/styles/prompt-input.css +18 -5
  98. package/dist/styles/queue.css +1 -0
  99. package/dist/styles/reasoning.css +1 -9
  100. package/dist/styles/recipes.css +28 -1
  101. package/dist/styles/responsive-sidebar-shell.css +55 -24
  102. package/dist/styles/separator.css +5 -5
  103. package/dist/styles/sources.css +4 -4
  104. package/dist/styles/stepper.css +1 -0
  105. package/dist/styles/streamdown.css +31 -21
  106. package/dist/styles/tabs.css +1 -0
  107. package/dist/styles/task.css +5 -17
  108. package/dist/styles/terminal.css +10 -10
  109. package/dist/styles/test-results.css +6 -6
  110. package/dist/styles/think-execution-status.css +2 -2
  111. package/dist/styles/think-execution-workbench.css +12 -15
  112. package/dist/styles/think-full-app.css +26 -64
  113. package/dist/styles/think-routine-library.css +26 -55
  114. package/dist/styles/think-sidepanel.css +74 -0
  115. package/dist/styles/think-thread-picker.css +9 -9
  116. package/dist/styles/utilities.css +33 -0
  117. package/dist/styles/web-preview.css +20 -19
  118. package/dist/styles/workspace-explorer.css +18 -21
  119. package/dist/styles/workspace-mount-manager.css +2 -2
  120. package/dist/utils/favicon.d.ts +6 -1
  121. package/dist/utils/favicon.js +18 -1
  122. package/package.json +2 -2
  123. package/dist/AppTopBar-ZdgmB_Lu.d.ts +0 -97
  124. package/dist/ToggleGroup-BrQZOQn_.d.ts +0 -80
  125. package/dist/Toolbar-CBOseBQr.d.ts +0 -152
@@ -1,2 +1,97 @@
1
- import { a as AppTopBarLinkProps, i as AppTopBarGroupProps, n as AppTopBarButtonProps, o as AppTopBarRootProps, r as AppTopBarControlProps, s as AppTopBarTitleProps, t as AppTopBar } from "../../AppTopBar-ZdgmB_Lu.js";
1
+ import { Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarLinkProps } from "../foundations/Toolbar.js";
2
+ import * as React from "react";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+
5
+ //#region src/components/general-purpose/AppTopBar.d.ts
6
+ interface AppTopBarRootProps extends React.ComponentPropsWithoutRef<typeof Toolbar.Root> {
7
+ /** Accessible name describing the controls in this application bar. */
8
+ "aria-label": string;
9
+ /**
10
+ * Where the title sits. An application bar centres it between the control
11
+ * groups; a panel header labels its leading edge instead.
12
+ */
13
+ titleAlign?: "center" | "start";
14
+ }
15
+ interface AppTopBarGroupProps extends ToolbarGroupProps {}
16
+ interface AppTopBarTitleProps extends useRender.ComponentProps<"div"> {}
17
+ interface AppTopBarButtonProps extends Omit<ToolbarButtonProps, "aria-label"> {
18
+ ref?: React.Ref<HTMLButtonElement>;
19
+ /** Accessible name and default tooltip text for the icon-only control. */
20
+ label: string;
21
+ /** Tooltip text when it should differ from the accessible name. */
22
+ tooltip?: React.ReactNode;
23
+ }
24
+ interface AppTopBarLinkProps extends Omit<ToolbarLinkProps, "aria-label"> {
25
+ ref?: React.Ref<HTMLAnchorElement>;
26
+ /** Accessible name and default tooltip text for the icon-only link. */
27
+ label: string;
28
+ /** Tooltip text when it should differ from the accessible name. */
29
+ tooltip?: React.ReactNode;
30
+ }
31
+ interface AppTopBarControlProps extends ToolbarButtonProps {
32
+ ref?: React.Ref<HTMLButtonElement>;
33
+ }
34
+ /**
35
+ * Stable application-level toolbar with composable leading, title, and trailing
36
+ * slots. Descendant buttons share Base UI's roving focus and tooltip provider.
37
+ */
38
+ declare function AppTopBarRoot({
39
+ children,
40
+ className,
41
+ titleAlign,
42
+ ...props
43
+ }: AppTopBarRootProps): React.JSX.Element;
44
+ declare function AppTopBarLeading({
45
+ className,
46
+ ...props
47
+ }: AppTopBarGroupProps): React.JSX.Element;
48
+ declare function AppTopBarTitle({
49
+ className,
50
+ render,
51
+ ref,
52
+ ...props
53
+ }: AppTopBarTitleProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
54
+ declare function AppTopBarTrailing({
55
+ className,
56
+ ...props
57
+ }: AppTopBarGroupProps): React.JSX.Element;
58
+ declare function AppTopBarControl({
59
+ className,
60
+ ...props
61
+ }: AppTopBarControlProps): React.JSX.Element;
62
+ declare function AppTopBarButton({
63
+ children,
64
+ className,
65
+ disabled,
66
+ label,
67
+ render,
68
+ tooltip,
69
+ ...props
70
+ }: AppTopBarButtonProps): React.JSX.Element;
71
+ declare function AppTopBarLink({
72
+ children,
73
+ className,
74
+ label,
75
+ render,
76
+ tooltip,
77
+ ...props
78
+ }: AppTopBarLinkProps): React.JSX.Element;
79
+ /**
80
+ * Composable application top bar with stable leading, title, and trailing
81
+ * slots. Icon controls use shared Toolbar roving focus and coordinated Tooltip
82
+ * behavior; their fixed slots do not resize when state icons change. Render an
83
+ * existing behavior-rich button through `Control` to retain those toolbar
84
+ * semantics without rebuilding the control. Use `Link` for navigation so an
85
+ * `href` or router-provided link keeps native link semantics.
86
+ */
87
+ declare const AppTopBar: {
88
+ Root: typeof AppTopBarRoot;
89
+ Leading: typeof AppTopBarLeading;
90
+ Title: typeof AppTopBarTitle;
91
+ Trailing: typeof AppTopBarTrailing;
92
+ Control: typeof AppTopBarControl;
93
+ Button: typeof AppTopBarButton;
94
+ Link: typeof AppTopBarLink;
95
+ };
96
+ //#endregion
2
97
  export { AppTopBar, AppTopBarButtonProps, AppTopBarControlProps, AppTopBarGroupProps, AppTopBarLinkProps, AppTopBarRootProps, AppTopBarTitleProps };
@@ -22,6 +22,13 @@ interface ResizableSidePanelRootProps extends React.HTMLAttributes<HTMLDivElemen
22
22
  collapseThreshold?: number;
23
23
  /** Called once pointer resizing crosses `collapseThreshold`. */
24
24
  onCollapse?: () => void;
25
+ /**
26
+ * Consumer-owned custom property mirroring the panel size, e.g.
27
+ * `--my-app-conversation-size`. Nested roots each write the shared
28
+ * `--resizable-side-panel-size` too, where the nearest writer wins; a named
29
+ * variable frees consumer stylesheets from that proximity rule.
30
+ */
31
+ sizeVariable?: `--${string}`;
25
32
  }
26
33
  interface ResizableSidePanelHandleProps extends Omit<SeparatorProps, "aria-label" | "aria-orientation" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "decorative" | "orientation"> {}
27
34
  /**
@@ -41,6 +48,7 @@ declare function ResizableSidePanelRoot({
41
48
  onCollapse,
42
49
  ref,
43
50
  side,
51
+ sizeVariable,
44
52
  style,
45
53
  ...props
46
54
  }: ResizableSidePanelRootProps & {
@@ -14,7 +14,7 @@ function panelSizeDelta(physicalDelta, side, direction) {
14
14
  * Shared sizing seam for a logical start- or end-side panel. Consumers retain
15
15
  * ownership of panel placement, visibility, compact behavior, and top bars.
16
16
  */
17
- function ResizableSidePanelRoot({ children, className, collapseThreshold, defaultSize, keyboardStep = 24, label, maxSize, minSize, onSizeChange, onCollapse, ref, side = "start", style, ...props }) {
17
+ function ResizableSidePanelRoot({ children, className, collapseThreshold, defaultSize, keyboardStep = 24, label, maxSize, minSize, onSizeChange, onCollapse, ref, side = "start", sizeVariable, style, ...props }) {
18
18
  const [size, setInnerSize] = React.useState(() => clamp(defaultSize, minSize, maxSize));
19
19
  const cleanupResizeRef = React.useRef(null);
20
20
  const setSize = React.useCallback((nextSize) => {
@@ -92,7 +92,8 @@ function ResizableSidePanelRoot({ children, className, collapseThreshold, defaul
92
92
  ]);
93
93
  const rootStyle = {
94
94
  ...style,
95
- "--resizable-side-panel-size": `${size}px`
95
+ "--resizable-side-panel-size": `${size}px`,
96
+ ...sizeVariable ? { [sizeVariable]: `${size}px` } : {}
96
97
  };
97
98
  return /* @__PURE__ */ jsx(ResizableSidePanelContext.Provider, {
98
99
  value: context,
@@ -1,95 +1,2 @@
1
- import { t as AppTopBar } from "../../AppTopBar-ZdgmB_Lu.js";
2
- import * as React from "react";
3
-
4
- //#region src/components/general-purpose/ResponsiveSidebarShell.d.ts
5
- interface ResponsiveSidebarShellControls {
6
- /** Close the sidebar and move focus to the main content. */
7
- closeSidebar: () => void;
8
- /** Close only when the shell is currently using its compact drawer layout. */
9
- closeSidebarOnCompact: () => void;
10
- }
11
- interface ResponsiveSidebarShellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children" | "title"> {
12
- /**
13
- * Navigation or other secondary surface shown beside the selected content.
14
- * Omit for a shell that is only a bar row over content — the app bar then
15
- * has one mount point whether or not a sidebar exists.
16
- */
17
- sidebar?: React.ReactNode | ((controls: ResponsiveSidebarShellControls) => React.ReactNode);
18
- /** Main content. */
19
- children?: React.ReactNode;
20
- /** Short noun used by the toggle and resize control, such as “threads” or “schedules”. */
21
- sidebarLabel?: string;
22
- /** Whether the sidebar is open. Omit for internal state. */
23
- sidebarOpen?: boolean;
24
- /** Initial sidebar state when `sidebarOpen` is uncontrolled. */
25
- defaultSidebarOpen?: boolean;
26
- /** Initial desktop sidebar width in CSS pixels. */
27
- defaultSidebarWidth?: number;
28
- /** Called when the sidebar is opened or closed. */
29
- onSidebarOpenChange?: (open: boolean) => void;
30
- /**
31
- * No bar row at all — for content that brings its own application bar.
32
- * Distinct from passing no slots: an empty shell with a sidebar still shows
33
- * a bar carrying the toggle.
34
- */
35
- topBarHidden?: boolean;
36
- /** Props for the shell-owned bar root: `aria-label`, `className`, data hooks. */
37
- topBarProps?: React.ComponentProps<typeof AppTopBar.Root> & {
38
- [dataAttribute: `data-${string}`]: string | undefined;
39
- };
40
- /**
41
- * App-owned leading navigation. When present it owns the single leading
42
- * slot instead of sitting beside a second shell toggle; wide sidebars use
43
- * their responsive default and compact sidebars remain available through
44
- * `compactTitleTrigger`.
45
- */
46
- topBarLeading?: React.ReactNode;
47
- /** Compact-only navigation that replaces the drawer trigger without hiding the wide rail toggle. */
48
- compactTopBarLeading?: React.ReactNode;
49
- /** Bar title content. Hidden at compact widths when `compactTitleTrigger` stands in. */
50
- topBarTitle?: React.ReactNode;
51
- /** Element the bar title renders into, e.g. `<h1 id={…}/>` for a labelled page. */
52
- topBarTitleRender?: React.ReactElement<Record<string, unknown>>;
53
- /** Content placed in the bar's trailing group. */
54
- topBarTrailing?: React.ReactNode;
55
- /**
56
- * Label content for a compact-width drawer trigger that replaces the plain
57
- * title and the icon toggle: the title itself becomes the control that opens
58
- * the sidebar. The shell renders the button and the disclosure chevron.
59
- */
60
- compactTitleTrigger?: React.ReactNode;
61
- /** Accessible name for the mobile peek target that returns to the main content. */
62
- showMainLabel?: string;
63
- }
64
- /**
65
- * The one application shell: responsive master-detail with a resizable desktop
66
- * sidebar, a compact floating drawer that leaves the main content in place as
67
- * a dismiss target, and a shell-owned application bar composed from slots.
68
- * The root exposes `data-sidebar-open="true" | "false"` as its public styling hook.
69
- */
70
- declare function ResponsiveSidebarShell({
71
- sidebar,
72
- sidebarLabel,
73
- sidebarOpen,
74
- defaultSidebarOpen,
75
- defaultSidebarWidth,
76
- onSidebarOpenChange,
77
- topBarHidden,
78
- topBarProps,
79
- topBarLeading,
80
- compactTopBarLeading,
81
- topBarTitle,
82
- topBarTitleRender,
83
- topBarTrailing,
84
- compactTitleTrigger,
85
- showMainLabel,
86
- className,
87
- children,
88
- ref,
89
- style,
90
- ...props
91
- }: ResponsiveSidebarShellProps & {
92
- ref?: React.Ref<HTMLDivElement>;
93
- }): React.JSX.Element;
94
- //#endregion
95
- export { ResponsiveSidebarShell, ResponsiveSidebarShellControls, ResponsiveSidebarShellProps };
1
+ import { a as ResponsiveSidebarShellProps, i as ResponsiveSidebarShellControls, n as ResponsiveSidebarShell, r as ResponsiveSidebarShellBar, t as AppBarSlots } from "../../ResponsiveSidebarShell-DOXd5T-d.js";
2
+ export { AppBarSlots, ResponsiveSidebarShell, ResponsiveSidebarShellBar, ResponsiveSidebarShellControls, ResponsiveSidebarShellProps };
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { W as SidebarIcon, f as ChevronDownIcon } from "../../icons-CVFSeTJn.js";
2
+ import { $ as WarningIcon, W as SidebarIcon, f as ChevronDownIcon, r as ArrowLeftIcon } from "../../icons-CVFSeTJn.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as capitalize } from "../../format-DB2mX9DA.js";
5
5
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
@@ -8,22 +8,13 @@ import { ResizableSidePanel } from "./ResizableSidePanel.js";
8
8
  import * as React from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/components/general-purpose/ResponsiveSidebarShell.tsx
11
+ /** Matches --sigvelo-layout-sidebar (16rem). */
11
12
  const sidebarDefaultWidth = 256;
12
13
  const sidebarMinWidth = 224;
13
14
  const sidebarMaxWidth = 384;
14
15
  const sidebarKeyboardStep = 24;
16
+ /** Matches --sigvelo-layout-break-compact. */
15
17
  const compactSidebarWidthRem = 56;
16
- function useControllableSidebar({ sidebarOpen, defaultSidebarOpen, onSidebarOpenChange }) {
17
- const [innerOpen, setInnerOpen] = React.useState(defaultSidebarOpen ?? true);
18
- return [
19
- sidebarOpen ?? innerOpen,
20
- React.useCallback((next) => {
21
- if (sidebarOpen === void 0) setInnerOpen(next);
22
- onSidebarOpenChange?.(next);
23
- }, [sidebarOpen, onSidebarOpenChange]),
24
- setInnerOpen
25
- ];
26
- }
27
18
  function isCompactSidebar(root) {
28
19
  const rootFontSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
29
20
  return root.offsetWidth <= compactSidebarWidthRem * rootFontSize;
@@ -32,21 +23,18 @@ function isCompactSidebar(root) {
32
23
  * The one application shell: responsive master-detail with a resizable desktop
33
24
  * sidebar, a compact floating drawer that leaves the main content in place as
34
25
  * a dismiss target, and a shell-owned application bar composed from slots.
35
- * The root exposes `data-sidebar-open="true" | "false"` as its public styling hook.
26
+ * The root exposes `data-sidebar-open="true" | "false"` as its public styling
27
+ * hook, and its container name `responsive-sidebar-shell` is public contract:
28
+ * surfaces that compose the shell size themselves against it.
36
29
  */
37
- function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen, defaultSidebarOpen, defaultSidebarWidth = sidebarDefaultWidth, onSidebarOpenChange, topBarHidden = false, topBarProps, topBarLeading, compactTopBarLeading, topBarTitle, topBarTitleRender, topBarTrailing, compactTitleTrigger, showMainLabel = "Show main content", className, children, ref, style, ...props }) {
30
+ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", defaultSidebarWidth = sidebarDefaultWidth, bar, error, showMainLabel = "Show main content", className, children, ref, style, ...props }) {
38
31
  const sidebarId = React.useId();
39
32
  const rootRef = React.useRef(null);
40
33
  const mainRef = React.useRef(null);
41
34
  const openerRef = React.useRef(null);
42
35
  const compactRef = React.useRef(null);
43
36
  const restoreSidebarOnWideRef = React.useRef(true);
44
- const [isSidebarOpen, setSidebarOpen, primeSidebarOpen] = useControllableSidebar({
45
- sidebarOpen,
46
- defaultSidebarOpen,
47
- onSidebarOpenChange
48
- });
49
- const wantsBuiltInDefault = sidebarOpen === void 0 && defaultSidebarOpen === void 0;
37
+ const [isSidebarOpen, setSidebarOpen] = React.useState(true);
50
38
  React.useLayoutEffect(() => {
51
39
  const root = rootRef.current;
52
40
  if (!root) return;
@@ -56,7 +44,7 @@ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen
56
44
  const wasCompact = compactRef.current;
57
45
  compactRef.current = compact;
58
46
  if (wasCompact === null) {
59
- if (wantsBuiltInDefault && compact) primeSidebarOpen(false);
47
+ if (compact) setSidebarOpen(false);
60
48
  return;
61
49
  }
62
50
  if (!wasCompact && compact) {
@@ -69,12 +57,7 @@ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen
69
57
  const observer = new ResizeObserver(syncLayout);
70
58
  observer.observe(root);
71
59
  return () => observer.disconnect();
72
- }, [
73
- isSidebarOpen,
74
- primeSidebarOpen,
75
- setSidebarOpen,
76
- wantsBuiltInDefault
77
- ]);
60
+ }, [isSidebarOpen]);
78
61
  const hasSidebar = sidebar != null;
79
62
  const toggleLabel = capitalize(sidebarLabel);
80
63
  const toggleTooltip = `${isSidebarOpen ? "Hide" : "Show"} ${sidebarLabel}`;
@@ -84,40 +67,29 @@ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen
84
67
  }, []);
85
68
  const closeSidebar = React.useCallback(() => {
86
69
  updateSidebar(() => setSidebarOpen(false), () => mainRef.current?.focus({ preventScroll: true }));
87
- }, [setSidebarOpen, updateSidebar]);
70
+ }, [updateSidebar]);
88
71
  const closeSidebarOnCompact = React.useCallback(() => {
89
72
  if (rootRef.current && isCompactSidebar(rootRef.current)) closeSidebar();
90
73
  }, [closeSidebar]);
91
74
  const toggleSidebar = React.useCallback((trigger) => {
92
75
  if (trigger) openerRef.current = trigger;
93
76
  updateSidebar(() => setSidebarOpen(!isSidebarOpen));
94
- }, [
95
- isSidebarOpen,
96
- setSidebarOpen,
97
- updateSidebar
98
- ]);
77
+ }, [isSidebarOpen, updateSidebar]);
99
78
  const dismissSidebar = React.useCallback(() => {
100
79
  updateSidebar(() => setSidebarOpen(false), () => openerRef.current?.focus({ preventScroll: true }));
101
- }, [setSidebarOpen, updateSidebar]);
80
+ }, [updateSidebar]);
102
81
  const sidebarContent = typeof sidebar === "function" ? sidebar({
103
82
  closeSidebar,
104
83
  closeSidebarOnCompact
105
84
  }) : sidebar;
106
- const hasTitleTrigger = hasSidebar && compactTitleTrigger != null && compactTopBarLeading == null;
107
- const renderSidebarToggle = (className) => hasSidebar ? /* @__PURE__ */ jsx(AppTopBar.Button, {
108
- className: cx("responsive-sidebar-shell__toggle", className),
109
- label: toggleLabel,
110
- tooltip: toggleTooltip,
111
- type: "button",
112
- "aria-controls": sidebarId,
113
- "aria-expanded": isSidebarOpen,
114
- onClick: (event) => toggleSidebar(event.currentTarget),
115
- children: /* @__PURE__ */ jsx(SidebarIcon, {})
116
- }) : null;
117
- const hasTopBar = !topBarHidden && (hasSidebar || topBarLeading != null || compactTopBarLeading != null || topBarTitle != null || topBarTrailing != null || topBarProps != null);
85
+ const hasAppLeading = bar?.back != null || bar?.leading != null;
86
+ const hasTitleTrigger = hasSidebar && bar?.compactTitleTrigger != null && bar?.compactLeading == null;
87
+ const hasTopBar = !bar?.hidden && (hasSidebar || bar?.back != null || bar?.leading != null || bar?.compactLeading != null || bar?.title != null || bar?.actions != null || bar?.primary != null);
88
+ const compactLeadingMode = hasTitleTrigger ? "trigger" : !hasAppLeading && bar?.compactLeading != null ? "custom" : void 0;
118
89
  return /* @__PURE__ */ jsx("div", {
119
90
  ref: mergeRefs(rootRef, ref),
120
91
  className: cx("responsive-sidebar-shell", className),
92
+ "data-recipe": "fill-host",
121
93
  style,
122
94
  ...props,
123
95
  "data-sidebar-open": hasSidebar && isSidebarOpen ? "true" : "false",
@@ -132,6 +104,7 @@ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen
132
104
  className: "responsive-sidebar-shell__frame",
133
105
  label: sidebarLabel,
134
106
  side: "start",
107
+ sizeVariable: "--responsive-sidebar-shell-sidebar-size",
135
108
  defaultSize: defaultSidebarWidth,
136
109
  minSize: sidebarMinWidth,
137
110
  maxSize: sidebarMaxWidth,
@@ -149,34 +122,61 @@ function ResponsiveSidebarShell({ sidebar, sidebarLabel = "sidebar", sidebarOpen
149
122
  ref: mainRef,
150
123
  className: "responsive-sidebar-shell__main",
151
124
  tabIndex: -1,
152
- children: [hasTopBar ? /* @__PURE__ */ jsxs(AppTopBar.Root, {
153
- "aria-label": "Application controls",
154
- ...topBarProps,
155
- children: [
156
- hasSidebar || topBarLeading != null || compactTopBarLeading != null ? /* @__PURE__ */ jsxs(AppTopBar.Leading, { children: [topBarLeading ?? renderSidebarToggle(hasTitleTrigger ? "responsive-sidebar-shell__toggle--replaced-by-title" : compactTopBarLeading != null ? "responsive-sidebar-shell__toggle--replaced-by-compact-leading" : void 0), topBarLeading == null && compactTopBarLeading != null ? /* @__PURE__ */ jsx("span", {
157
- className: "responsive-sidebar-shell__compact-leading",
158
- children: compactTopBarLeading
159
- }) : null] }) : null,
160
- topBarTitle != null || hasTitleTrigger ? /* @__PURE__ */ jsxs(AppTopBar.Title, {
161
- render: topBarTitleRender,
162
- children: [topBarTitle != null ? /* @__PURE__ */ jsx("span", {
163
- className: cx("responsive-sidebar-shell__title-text", hasTitleTrigger && "responsive-sidebar-shell__title-text--replaced-by-trigger"),
164
- children: topBarTitle
165
- }) : null, hasTitleTrigger ? /* @__PURE__ */ jsxs(Button, {
166
- type: "button",
167
- variant: "ghost",
168
- color: "neutral",
169
- size: "sm",
170
- className: "responsive-sidebar-shell__title-trigger",
171
- "aria-controls": sidebarId,
172
- "aria-expanded": isSidebarOpen,
173
- onClick: (event) => toggleSidebar(event.currentTarget),
174
- children: [compactTitleTrigger, /* @__PURE__ */ jsx(ChevronDownIcon, { "aria-hidden": "true" })]
175
- }) : null]
176
- }) : null,
177
- topBarTrailing != null ? /* @__PURE__ */ jsx(AppTopBar.Trailing, { children: topBarTrailing }) : null
178
- ]
179
- }) : null, children]
125
+ children: [
126
+ hasTopBar ? /* @__PURE__ */ jsxs(AppTopBar.Root, {
127
+ "aria-label": bar?.label ?? "Application controls",
128
+ className: bar?.className,
129
+ "data-compact-leading": compactLeadingMode,
130
+ children: [
131
+ hasSidebar || hasAppLeading || bar?.compactLeading != null ? /* @__PURE__ */ jsxs(AppTopBar.Leading, { children: [
132
+ bar?.back ? /* @__PURE__ */ jsx(AppTopBar.Link, {
133
+ label: bar.back.label,
134
+ render: bar.back.link,
135
+ children: /* @__PURE__ */ jsx(ArrowLeftIcon, {})
136
+ }) : null,
137
+ bar?.leading,
138
+ !hasAppLeading && hasSidebar ? /* @__PURE__ */ jsx(AppTopBar.Button, {
139
+ className: "responsive-sidebar-shell__toggle",
140
+ label: toggleLabel,
141
+ tooltip: toggleTooltip,
142
+ type: "button",
143
+ "aria-controls": sidebarId,
144
+ "aria-expanded": isSidebarOpen,
145
+ onClick: (event) => toggleSidebar(event.currentTarget),
146
+ children: /* @__PURE__ */ jsx(SidebarIcon, {})
147
+ }) : null,
148
+ compactLeadingMode === "custom" ? /* @__PURE__ */ jsx("span", {
149
+ className: "responsive-sidebar-shell__compact-leading",
150
+ children: bar?.compactLeading
151
+ }) : null
152
+ ] }) : null,
153
+ bar?.title != null || hasTitleTrigger ? /* @__PURE__ */ jsxs(AppTopBar.Title, {
154
+ render: bar?.titleRender,
155
+ children: [bar?.title != null ? /* @__PURE__ */ jsx("span", {
156
+ className: "responsive-sidebar-shell__title-text",
157
+ children: bar.title
158
+ }) : null, hasTitleTrigger ? /* @__PURE__ */ jsxs(Button, {
159
+ type: "button",
160
+ variant: "ghost",
161
+ color: "neutral",
162
+ size: "sm",
163
+ className: "responsive-sidebar-shell__title-trigger",
164
+ "aria-controls": sidebarId,
165
+ "aria-expanded": isSidebarOpen,
166
+ onClick: (event) => toggleSidebar(event.currentTarget),
167
+ children: [bar?.compactTitleTrigger, /* @__PURE__ */ jsx(ChevronDownIcon, { "aria-hidden": "true" })]
168
+ }) : null]
169
+ }) : null,
170
+ bar?.actions != null || bar?.primary != null ? /* @__PURE__ */ jsxs(AppTopBar.Trailing, { children: [bar.actions, bar.primary] }) : null
171
+ ]
172
+ }) : null,
173
+ error != null ? /* @__PURE__ */ jsxs("div", {
174
+ className: "responsive-sidebar-shell__error",
175
+ role: "alert",
176
+ children: [/* @__PURE__ */ jsx(WarningIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", { children: error })]
177
+ }) : null,
178
+ children
179
+ ]
180
180
  }),
181
181
  hasSidebar && isSidebarOpen ? /* @__PURE__ */ jsx(Button, {
182
182
  type: "button",
@@ -1,77 +1,2 @@
1
- import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { $ as WarningIcon, B as PlusIcon, d as CheckIcon, f as ChevronDownIcon } from "../../icons-CVFSeTJn.js";
3
- import { Button } from "../foundations/Button.js";
4
- import { Menu } from "../foundations/Menu.js";
5
- import * as React from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- //#region src/components/_internal/MenuDisclosureGroup.tsx
8
- /**
9
- * A menu-native disclosure: its trigger stays in the menu roving-focus model,
10
- * while its rows mount only after the user expands the section.
11
- */
12
- function MenuDisclosureGroup({ children, className, defaultOpen = false, label, triggerClassName, ...props }) {
13
- const [open, setOpen] = React.useState(defaultOpen);
14
- return /* @__PURE__ */ jsxs(Menu.Group, {
15
- className: mergeBaseClassName("menu-disclosure-group", className),
16
- ...props,
17
- children: [/* @__PURE__ */ jsxs(Menu.Item, {
18
- "aria-expanded": open,
19
- className: mergeBaseClassName("menu-disclosure-group__trigger", triggerClassName),
20
- closeOnClick: false,
21
- onClick: () => setOpen((current) => !current),
22
- children: [/* @__PURE__ */ jsx("span", {
23
- className: "sigvelo-truncate-grow",
24
- children: label
25
- }), /* @__PURE__ */ jsx(ChevronDownIcon, { "aria-hidden": "true" })]
26
- }), open ? /* @__PURE__ */ jsx("div", {
27
- className: "menu-disclosure-group__items",
28
- children
29
- }) : null]
30
- });
31
- }
32
- //#endregion
33
- //#region src/components/general-purpose/SetupChecklist.tsx
34
- /** Checklist rows for any Menu surface (composer plus menu, tray menu). */
35
- function SetupChecklistGroup({ label, entries, defaultOpen = false, onSelect }) {
36
- return /* @__PURE__ */ jsx(MenuDisclosureGroup, {
37
- label,
38
- defaultOpen,
39
- children: entries.map((entry) => /* @__PURE__ */ jsxs(Menu.Item, {
40
- "aria-label": `${entry.name}, ${entry.complete ? "complete" : "not set up"}`,
41
- onClick: () => onSelect(entry.id),
42
- children: [
43
- entry.icon,
44
- /* @__PURE__ */ jsx("span", {
45
- className: "sigvelo-truncate-grow",
46
- children: entry.description
47
- }),
48
- entry.complete ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx(PlusIcon, { "aria-hidden": "true" })
49
- ]
50
- }, entry.id))
51
- });
52
- }
53
- /** Progress-aware tray trigger opening the checklist in its own menu. */
54
- function SetupChecklistAction({ actionLabel, label, entries, onSelect }) {
55
- const completed = entries.filter((entry) => entry.complete).length;
56
- return /* @__PURE__ */ jsxs(Menu.Root, { children: [/* @__PURE__ */ jsxs(Button, {
57
- type: "button",
58
- variant: "ghost",
59
- color: "neutral",
60
- size: "md",
61
- "aria-label": `${actionLabel} — ${completed} of ${entries.length} set up`,
62
- render: /* @__PURE__ */ jsx(Menu.Trigger, { unstyled: true }),
63
- children: [completed === entries.length ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx(WarningIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", { children: actionLabel })]
64
- }), /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
65
- side: "bottom",
66
- align: "start",
67
- sideOffset: 4,
68
- children: /* @__PURE__ */ jsx(Menu.Popup, { children: /* @__PURE__ */ jsx(SetupChecklistGroup, {
69
- defaultOpen: true,
70
- label,
71
- entries,
72
- onSelect
73
- }) })
74
- }) })] });
75
- }
76
- //#endregion
1
+ import { n as SetupChecklistGroup, t as SetupChecklistAction } from "../../SetupChecklist-H1JRCIIe.js";
77
2
  export { SetupChecklistAction, SetupChecklistGroup };
@@ -1,6 +1,6 @@
1
1
  import { N as MonitorIcon, P as MoonIcon, Y as SunIcon } from "../../icons-CVFSeTJn.js";
2
- import { Radio, RadioGroup } from "../foundations/RadioGroup.js";
3
2
  import { useTheme } from "../foundations/ThemeProvider.js";
3
+ import { Radio, RadioGroup } from "../foundations/RadioGroup.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/general-purpose/ThemeModeControl.tsx
6
6
  const modes = [
@@ -25,6 +25,8 @@ interface WebPreviewProps extends React.HTMLAttributes<HTMLDivElement> {
25
25
  className?: string;
26
26
  /** Navigation, body, and optional console slots. */
27
27
  children?: React.ReactNode;
28
+ /** Extra recipes composed with the framed-panel contract. */
29
+ "data-recipe"?: string;
28
30
  }
29
31
  /**
30
32
  * An iframe preview with a navigation bar, URL input, and optional console
@@ -64,6 +66,7 @@ declare function WebPreview({
64
66
  onUrlChange,
65
67
  children,
66
68
  ref,
69
+ "data-recipe": recipe,
67
70
  ...props
68
71
  }: WebPreviewProps & {
69
72
  ref?: React.Ref<HTMLDivElement>;
@@ -44,7 +44,7 @@ function useWebPreviewContext() {
44
44
  * </WebPreview>
45
45
  * ```
46
46
  */
47
- function WebPreview({ className, defaultUrl = "", url: controlledUrl, onUrlChange, children, ref, ...props }) {
47
+ function WebPreview({ className, defaultUrl = "", url: controlledUrl, onUrlChange, children, ref, "data-recipe": recipe, ...props }) {
48
48
  const [navigation, setNavigation] = React.useState(() => ({
49
49
  history: defaultUrl ? [defaultUrl] : [],
50
50
  index: defaultUrl ? 0 : -1
@@ -126,7 +126,7 @@ function WebPreview({ className, defaultUrl = "", url: controlledUrl, onUrlChang
126
126
  ref,
127
127
  className: cx("web-preview", className),
128
128
  ...props,
129
- "data-recipe": "framed-panel",
129
+ "data-recipe": cx("framed-panel", recipe),
130
130
  children
131
131
  })
132
132
  });
@@ -29,6 +29,7 @@ function AgentToolDetail({ actions, backLink, chat, className, messages, ref, ru
29
29
  "data-slot": "agent-tool-detail",
30
30
  className: cx("agent-tool-detail", className),
31
31
  ...props,
32
+ "data-recipe": "fill-host",
32
33
  children: [
33
34
  /* @__PURE__ */ jsxs(AppTopBar.Root, {
34
35
  titleAlign: "start",
@@ -62,6 +62,7 @@
62
62
  }
63
63
 
64
64
  .accordion__panel > * {
65
+ /* Disclosure content, not --sigvelo-layout-stack. */
65
66
  padding-block-end: var(--sigvelo-spacing-4);
66
67
  padding-inline: var(--sigvelo-recipe-control-padding-inline);
67
68
  }
@@ -3,13 +3,13 @@
3
3
  display: grid;
4
4
  gap: var(--sigvelo-spacing-8);
5
5
  inline-size: 100%;
6
- padding: var(--sigvelo-spacing-2) var(--sigvelo-spacing-2) var(--sigvelo-spacing-8);
6
+ padding: var(--sigvelo-layout-cluster) var(--sigvelo-layout-gutter) var(--sigvelo-spacing-8);
7
7
  color: var(--sigvelo-color-text);
8
8
  }
9
9
 
10
10
  .action-guide__header {
11
11
  display: grid;
12
- gap: var(--sigvelo-spacing-4);
12
+ gap: var(--sigvelo-layout-stack);
13
13
  }
14
14
 
15
15
  .action-guide__title,
@@ -32,13 +32,13 @@
32
32
 
33
33
  .action-guide__section {
34
34
  display: grid;
35
- gap: var(--sigvelo-spacing-4);
35
+ gap: var(--sigvelo-layout-stack);
36
36
  }
37
37
 
38
38
  .action-guide__list {
39
39
  display: grid;
40
- grid-template-columns: minmax(0, 1fr);
41
- gap: var(--sigvelo-spacing-3);
40
+ grid-template-columns: var(--sigvelo-layout-track-fill);
41
+ gap: var(--sigvelo-layout-gutter);
42
42
  margin: 0;
43
43
  padding: 0;
44
44
  list-style: none;
@@ -115,9 +115,10 @@
115
115
  border-radius: var(--sigvelo-radius-lg);
116
116
  }
117
117
 
118
- @container action-guide (width > 30rem) {
118
+ /* Local wrap. Not --sigvelo-layout-break-compact. */
119
+ @container action-guide (inline-size > 30rem) {
119
120
  .action-guide__list[data-layout="cards"] {
120
- grid-template-columns: repeat(2, minmax(0, 1fr));
121
+ grid-template-columns: repeat(2, var(--sigvelo-layout-track-fill));
121
122
  }
122
123
  }
123
124