@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.
- package/dist/{AgentChat-DVr2giwD.d.ts → AgentChat-Bibfj7u1.d.ts} +1 -1
- package/dist/{AgentChatStartScreen-CO49yepa.d.ts → AgentChatStartScreen-Bkv7Avni.d.ts} +6 -0
- package/dist/McpPluginCatalog-mbGw8FTu.d.ts +92 -0
- package/dist/ResponsiveSidebarShell-DOXd5T-d.d.ts +111 -0
- package/dist/SetupChecklist-H1JRCIIe.js +77 -0
- package/dist/{ThinkChatActivity-DyGHj01E.d.ts → ThinkChatActivity-CgvmTXXB.d.ts} +4 -1
- package/dist/Workspace-F3raHdYV.d.ts +140 -0
- package/dist/{WorkspaceFileView-D0yFwoDr.js → WorkspaceFileView-DWMKxX_u.js} +15 -21
- package/dist/components/agents-sdk/AgentActivity.js +3 -2
- package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
- package/dist/components/agents-sdk/AgentChat.js +1 -0
- package/dist/components/agents-sdk/BrowserRunPanel.js +2 -1
- package/dist/components/agents-sdk/ManagerOffice.d.ts +39 -27
- package/dist/components/agents-sdk/ManagerOffice.js +80 -44
- package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -91
- package/dist/components/agents-sdk/McpPluginCatalog.js +3 -1
- package/dist/components/agents-sdk/ModelSelector.js +1 -1
- package/dist/components/agents-sdk/ThinkChat.d.ts +2 -2
- package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkChatActivity.js +18 -4
- package/dist/components/agents-sdk/ThinkChatToolPanels.js +6 -2
- package/dist/components/agents-sdk/ThinkExecutionDetail.js +2 -0
- package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -0
- package/dist/components/agents-sdk/ThinkFullApp.d.ts +56 -90
- package/dist/components/agents-sdk/ThinkFullApp.js +74 -122
- package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +8 -6
- package/dist/components/agents-sdk/ThinkRoutineLibrary.js +71 -93
- package/dist/components/agents-sdk/ThinkSidepanel.d.ts +173 -0
- package/dist/components/agents-sdk/ThinkSidepanel.js +656 -0
- package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +4 -5
- package/dist/components/agents-sdk/ThinkThreadPicker.js +6 -5
- package/dist/components/agents-sdk/Workspace.d.ts +1 -139
- package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
- package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +1 -1
- package/dist/components/agents-sdk/WorkspaceExplorer.js +4 -3
- package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
- package/dist/components/ai-sdk/AgentChatStartScreen.d.ts +1 -1
- package/dist/components/ai-sdk/AgentChatStartScreen.js +5 -2
- package/dist/components/ai-sdk/MessageScroller.js +2 -1
- package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -0
- package/dist/components/ai-sdk/PromptInput.js +20 -14
- package/dist/components/extension/ChatGptSignInScreen.js +1 -0
- package/dist/components/foundations/ToggleGroup.d.ts +79 -1
- package/dist/components/foundations/Toolbar.d.ts +151 -1
- package/dist/components/general-purpose/AppFrame.js +1 -0
- package/dist/components/general-purpose/AppTopBar.d.ts +96 -1
- package/dist/components/general-purpose/ResizableSidePanel.d.ts +8 -0
- package/dist/components/general-purpose/ResizableSidePanel.js +3 -2
- package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +2 -95
- package/dist/components/general-purpose/ResponsiveSidebarShell.js +74 -74
- package/dist/components/general-purpose/SetupChecklist.js +1 -76
- package/dist/components/general-purpose/ThemeModeControl.js +1 -1
- package/dist/components/general-purpose/WebPreview.d.ts +3 -0
- package/dist/components/general-purpose/WebPreview.js +2 -2
- package/dist/components/nanites/AgentToolDetail.js +1 -0
- package/dist/styles/accordion.css +1 -0
- package/dist/styles/action-guide.css +8 -7
- package/dist/styles/activity-header.css +13 -39
- package/dist/styles/activity.css +40 -55
- package/dist/styles/agent-attention.css +14 -14
- package/dist/styles/agent-chat.css +80 -58
- package/dist/styles/agent-connection.css +10 -4
- package/dist/styles/agent-tool-detail.css +4 -4
- package/dist/styles/alert-dialog.css +4 -4
- package/dist/styles/app-frame.css +1 -3
- package/dist/styles/app-top-bar.css +5 -9
- package/dist/styles/approval.css +1 -0
- package/dist/styles/artifact.css +6 -6
- package/dist/styles/attachment-preview.css +5 -4
- package/dist/styles/browser-replay.css +6 -6
- package/dist/styles/browser-run-panel.css +1 -0
- package/dist/styles/button.css +15 -6
- package/dist/styles/card.css +5 -5
- package/dist/styles/chatgpt-sign-in-screen.css +1 -1
- package/dist/styles/code-block.css +14 -13
- package/dist/styles/codex-model-selector.css +2 -0
- package/dist/styles/collapsible.css +1 -0
- package/dist/styles/commit.css +6 -6
- package/dist/styles/context.css +9 -9
- package/dist/styles/conversation-tab-picker.css +1 -1
- package/dist/styles/conversation.css +6 -8
- package/dist/styles/dialog.css +4 -4
- package/dist/styles/empty-state.css +3 -3
- package/dist/styles/environment-variables.css +9 -9
- package/dist/styles/field.css +2 -1
- package/dist/styles/fieldset.css +2 -2
- package/dist/styles/index.css +4 -3
- package/dist/styles/manager-office.css +23 -29
- package/dist/styles/mcp-plugin-catalog.css +11 -10
- package/dist/styles/mcp-server-picker.css +3 -3
- package/dist/styles/message-scroller.css +9 -11
- package/dist/styles/message.css +43 -20
- package/dist/styles/navigation-menu.css +1 -0
- package/dist/styles/plan.css +13 -12
- package/dist/styles/pricing-page.css +26 -23
- package/dist/styles/prompt-input.css +18 -5
- package/dist/styles/queue.css +1 -0
- package/dist/styles/reasoning.css +1 -9
- package/dist/styles/recipes.css +28 -1
- package/dist/styles/responsive-sidebar-shell.css +55 -24
- package/dist/styles/separator.css +5 -5
- package/dist/styles/sources.css +4 -4
- package/dist/styles/stepper.css +1 -0
- package/dist/styles/streamdown.css +31 -21
- package/dist/styles/tabs.css +1 -0
- package/dist/styles/task.css +5 -17
- package/dist/styles/terminal.css +10 -10
- package/dist/styles/test-results.css +6 -6
- package/dist/styles/think-execution-status.css +2 -2
- package/dist/styles/think-execution-workbench.css +12 -15
- package/dist/styles/think-full-app.css +26 -64
- package/dist/styles/think-routine-library.css +26 -55
- package/dist/styles/think-sidepanel.css +74 -0
- package/dist/styles/think-thread-picker.css +9 -9
- package/dist/styles/utilities.css +33 -0
- package/dist/styles/web-preview.css +20 -19
- package/dist/styles/workspace-explorer.css +18 -21
- package/dist/styles/workspace-mount-manager.css +2 -2
- package/dist/utils/favicon.d.ts +6 -1
- package/dist/utils/favicon.js +18 -1
- package/package.json +2 -2
- package/dist/AppTopBar-ZdgmB_Lu.d.ts +0 -97
- package/dist/ToggleGroup-BrQZOQn_.d.ts +0 -80
- package/dist/Toolbar-CBOseBQr.d.ts +0 -152
|
@@ -1,2 +1,97 @@
|
|
|
1
|
-
import {
|
|
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
|
|
2
|
-
|
|
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
|
|
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",
|
|
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
|
|
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 (
|
|
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
|
-
}, [
|
|
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
|
-
}, [
|
|
80
|
+
}, [updateSidebar]);
|
|
102
81
|
const sidebarContent = typeof sidebar === "function" ? sidebar({
|
|
103
82
|
closeSidebar,
|
|
104
83
|
closeSidebarOnCompact
|
|
105
84
|
}) : sidebar;
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
|
|
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: [
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
children:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
|
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",
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
display: grid;
|
|
4
4
|
gap: var(--sigvelo-spacing-8);
|
|
5
5
|
inline-size: 100%;
|
|
6
|
-
padding: var(--sigvelo-
|
|
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-
|
|
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-
|
|
35
|
+
gap: var(--sigvelo-layout-stack);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.action-guide__list {
|
|
39
39
|
display: grid;
|
|
40
|
-
grid-template-columns:
|
|
41
|
-
gap: var(--sigvelo-
|
|
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
|
-
|
|
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,
|
|
121
|
+
grid-template-columns: repeat(2, var(--sigvelo-layout-track-fill));
|
|
121
122
|
}
|
|
122
123
|
}
|
|
123
124
|
|