diff --git a/apps/docs/components/docs/mdx.tsx b/apps/docs/components/docs/mdx.tsx
index ede1fe46fbf..d4c58298ff2 100644
--- a/apps/docs/components/docs/mdx.tsx
+++ b/apps/docs/components/docs/mdx.tsx
@@ -79,7 +79,7 @@ export function getMDXComponents(overrides: MDXComponents = {}): MDXComponents {
diff --git a/apps/docs/components/docs/sample-panels.tsx b/apps/docs/components/docs/sample-panels.tsx
index 9176973148a..62b6892a593 100644
--- a/apps/docs/components/docs/sample-panels.tsx
+++ b/apps/docs/components/docs/sample-panels.tsx
@@ -86,10 +86,13 @@ export function SamplePanels({
value={item.value}
label={item.label}
id={item.id ?? `${selectorId}-${item.value}`}
+ tabIndex={-1}
{...(presentation === 'select' ? { role: 'region', 'aria-labelledby': selectorId } : {})}
className='[&>div]:pt-0'
>
- {item.panel}
+
+ {item.panel}
+
))}
diff --git a/apps/docs/components/ui/code-block.tsx b/apps/docs/components/ui/code-block.tsx
index eebd7306e3e..d01b974e1a2 100644
--- a/apps/docs/components/ui/code-block.tsx
+++ b/apps/docs/components/ui/code-block.tsx
@@ -18,13 +18,15 @@ interface CodeBlockProps extends HTMLAttributes {
interface CodeContentProps {
children: ReactNode
label?: string
+ tabIndex?: number
}
-export function CodeContent({ children, label = 'Code sample' }: CodeContentProps) {
+export function CodeContent({ children, label = 'Code sample', tabIndex }: CodeContentProps) {
return (
{children}
diff --git a/apps/docs/components/ui/scroll-region.tsx b/apps/docs/components/ui/scroll-region.tsx
index ec10d70c3f6..d6e2fccdbb1 100644
--- a/apps/docs/components/ui/scroll-region.tsx
+++ b/apps/docs/components/ui/scroll-region.tsx
@@ -8,24 +8,32 @@ interface ScrollRegionProps extends HTMLAttributes {
label: string
}
-/** Keyboard scrolling is reachable only when this region has horizontal overflow. */
-export function ScrollRegion({ label, className, children, ...props }: ScrollRegionProps) {
+/** Keeps scrolling keyboard-accessible before hydration, then skips nonoverflowing regions unless opted in. */
+export function ScrollRegion({
+ label,
+ className,
+ children,
+ tabIndex,
+ ...props
+}: ScrollRegionProps) {
const region = useRef(null)
useEffect(() => {
const element = region.current
if (!element) return
function updateFocusability() {
- if (element) element.tabIndex = element.scrollWidth > element.clientWidth + 1 ? 0 : -1
+ if (element)
+ element.tabIndex = tabIndex ?? (element.scrollWidth > element.clientWidth + 1 ? 0 : -1)
}
const observer = new ResizeObserver(updateFocusability)
observer.observe(element)
if (element.firstElementChild) observer.observe(element.firstElementChild)
return () => observer.disconnect()
- }, [])
+ }, [tabIndex])
return (
+
## Formatting text
Select text to open the formatting toolbar for bold, italic, strikethrough, inline code, and links. You can also type Markdown, such as `**bold**` and `*italic*`. A link's hover card lets you open, copy, edit, or remove it.
-
-
| Action | Shortcut or Markdown |
| --- | --- |
| Bold | **Cmd/Ctrl + B** |
@@ -39,28 +38,10 @@ Type `/` at the start of a block or after whitespace to open the insertion menu.
Insert a table from the slash menu. Select a cell to open the table toolbar, then add or remove rows and columns, or delete the table. The header row stays in place; you can edit its text. Column resizing and merged cells are not supported.
-
-
## Code blocks
Fenced code blocks have syntax highlighting, a language picker, line wrapping, and a copy button. Hover over the block or focus a control to reveal its toolbar.
-
-
Choose `mermaid` to render a diagram. Select **Show source** when you need to edit its definition.
## Images
diff --git a/apps/docs/lib/shiki-theme.ts b/apps/docs/lib/shiki-theme.ts
index c35aafd46e9..a7cd7004a61 100644
--- a/apps/docs/lib/shiki-theme.ts
+++ b/apps/docs/lib/shiki-theme.ts
@@ -195,4 +195,5 @@ const simShikiDark = buildTheme('sim-dark', 'dark', DARK)
export const simShikiOptions = {
themes: { light: simShikiLight, dark: simShikiDark },
defaultColor: false,
+ tabindex: false,
} as const
diff --git a/apps/docs/openapi-v2-workflows.json b/apps/docs/openapi-v2-workflows.json
index b9192e47728..f36b9bc5f69 100644
--- a/apps/docs/openapi-v2-workflows.json
+++ b/apps/docs/openapi-v2-workflows.json
@@ -5275,6 +5275,20 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewWorkspaceForkResponse"
+ },
+ "examples": {
+ "example1": {
+ "summary": "Response example 1",
+ "value": {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "workflows": [],
+ "selectedResourceCount": 0,
+ "draftOnly": true
+ }
+ }
+ }
}
}
}
@@ -5466,6 +5480,25 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewWorkspacePushResponse"
+ },
+ "examples": {
+ "example1": {
+ "summary": "Response example 1",
+ "value": {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13",
+ "targetWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "ready": true,
+ "workflows": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "excludedTargets": [],
+ "triggerSlots": [],
+ "triggerUrlChanges": []
+ }
+ }
+ }
}
}
}
@@ -5658,6 +5691,25 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewWorkspacePullResponse"
+ },
+ "examples": {
+ "example1": {
+ "summary": "Response example 1",
+ "value": {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "targetWorkspaceId": "e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13",
+ "ready": true,
+ "workflows": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "excludedTargets": [],
+ "triggerSlots": [],
+ "triggerUrlChanges": []
+ }
+ }
+ }
}
}
}
@@ -6716,6 +6768,22 @@
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewWorkflowImportResponse"
+ },
+ "examples": {
+ "example1": {
+ "summary": "Response example 1",
+ "value": {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "ready": true,
+ "bindings": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "unresolvedConfiguration": [],
+ "discovery": []
+ }
+ }
+ }
}
}
}
@@ -15566,7 +15634,18 @@
"required": ["data"],
"additionalProperties": false,
"title": "Preview workspace fork response",
- "description": "Deployed source workflows, selected-copy count, and a preview fingerprint."
+ "description": "Deployed source workflows, selected-copy count, and a preview fingerprint.",
+ "examples": [
+ {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "workflows": [],
+ "selectedResourceCount": 0,
+ "draftOnly": true
+ }
+ }
+ ]
},
"PreviewWorkspaceForkBody": {
"type": "object",
@@ -16446,7 +16525,23 @@
"required": ["data"],
"additionalProperties": false,
"title": "Preview workspace push response",
- "description": "Current-to-other workflow actions, required choices, and preview fingerprint."
+ "description": "Current-to-other workflow actions, required choices, and preview fingerprint.",
+ "examples": [
+ {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13",
+ "targetWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "ready": true,
+ "workflows": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "excludedTargets": [],
+ "triggerSlots": [],
+ "triggerUrlChanges": []
+ }
+ }
+ ]
},
"PreviewWorkspacePushBody": {
"type": "object",
@@ -16972,7 +17067,23 @@
"required": ["data"],
"additionalProperties": false,
"title": "Preview workspace pull response",
- "description": "Other-to-current workflow actions, required choices, and preview fingerprint."
+ "description": "Other-to-current workflow actions, required choices, and preview fingerprint.",
+ "examples": [
+ {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "sourceWorkspaceId": "9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94",
+ "targetWorkspaceId": "e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13",
+ "ready": true,
+ "workflows": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "excludedTargets": [],
+ "triggerSlots": [],
+ "triggerUrlChanges": []
+ }
+ }
+ ]
},
"PreviewWorkspacePullBody": {
"type": "object",
@@ -18487,7 +18598,20 @@
"required": ["data"],
"additionalProperties": false,
"title": "Preview workflow import response",
- "description": "Import readiness, unresolved bindings, and destination discovery instructions."
+ "description": "Import readiness, unresolved bindings, and destination discovery instructions.",
+ "examples": [
+ {
+ "data": {
+ "previewFingerprint": "c7d158e8cbc5137a2d0a4fc37ddaeb51a3b9757485679a6ad82a7de3fdac4e3a",
+ "ready": true,
+ "bindings": [],
+ "unresolvedBindings": [],
+ "configuration": [],
+ "unresolvedConfiguration": [],
+ "discovery": []
+ }
+ }
+ ]
},
"ImportWorkflowRequest": {
"type": "object",
diff --git a/apps/docs/scripts/fixtures/content-baseline.json b/apps/docs/scripts/fixtures/content-baseline.json
index c990fe65fa0..80b2cab120d 100644
--- a/apps/docs/scripts/fixtures/content-baseline.json
+++ b/apps/docs/scripts/fixtures/content-baseline.json
@@ -18851,42 +18851,15 @@
"media": [
{
"type": "Image",
- "src": "/static/docs-captures/files-formatting.webp",
- "alt": "Selected text in the Markdown editor with the text style, bold, italic, link, and more formatting controls",
+ "src": "/static/docs-captures/files-markdown.webp",
+ "alt": "A release brief open in the Markdown editor beside Chat, with a launch checklist, owner table, and highlighted JSON code block",
"width": {
- "expression": "900"
+ "expression": "2400"
},
"height": {
- "expression": "340"
- },
- "variant": "detail",
- "background": "architecture"
- },
- {
- "type": "Image",
- "src": "/static/docs-captures/files-table.webp",
- "alt": "A Markdown owner table with controls for adding a row, managing columns, and deleting the table",
- "width": {
"expression": "1200"
},
- "height": {
- "expression": "460"
- },
- "variant": "detail",
- "background": "architecture"
- },
- {
- "type": "Image",
- "src": "/static/docs-captures/files-code.webp",
- "alt": "A highlighted JSON code block with language, line wrap, and copy controls",
- "width": {
- "expression": "1200"
- },
- "height": {
- "expression": "400"
- },
- "variant": "detail",
- "background": "architecture"
+ "variant": "overview"
}
]
},
diff --git a/apps/sim/lib/api/contracts/v2/openapi/workspace-sync.ts b/apps/sim/lib/api/contracts/v2/openapi/workspace-sync.ts
index 8e622737eba..c939a6f0eed 100644
--- a/apps/sim/lib/api/contracts/v2/openapi/workspace-sync.ts
+++ b/apps/sim/lib/api/contracts/v2/openapi/workspace-sync.ts
@@ -75,7 +75,18 @@ export const workspaceSyncOpenApiRoutes = [
v2PreviewWorkspaceForkContract.response.schema,
'PreviewWorkspaceForkResponse',
'Preview workspace fork response',
- 'Deployed source workflows, selected-copy count, and a preview fingerprint.'
+ 'Deployed source workflows, selected-copy count, and a preview fingerprint.',
+ [
+ {
+ data: {
+ previewFingerprint: PREVIEW_FINGERPRINT_EXAMPLE,
+ sourceWorkspaceId: '9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94',
+ workflows: [],
+ selectedResourceCount: 0,
+ draftOnly: true,
+ },
+ },
+ ]
),
}
),
@@ -175,7 +186,23 @@ export const workspaceSyncOpenApiRoutes = [
v2PreviewWorkspacePushContract.response.schema,
'PreviewWorkspacePushResponse',
'Preview workspace push response',
- 'Current-to-other workflow actions, required choices, and preview fingerprint.'
+ 'Current-to-other workflow actions, required choices, and preview fingerprint.',
+ [
+ {
+ data: {
+ previewFingerprint: PREVIEW_FINGERPRINT_EXAMPLE,
+ sourceWorkspaceId: 'e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13',
+ targetWorkspaceId: '9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94',
+ ready: true,
+ workflows: [],
+ unresolvedBindings: [],
+ configuration: [],
+ excludedTargets: [],
+ triggerSlots: [],
+ triggerUrlChanges: [],
+ },
+ },
+ ]
),
}
),
@@ -276,7 +303,23 @@ export const workspaceSyncOpenApiRoutes = [
v2PreviewWorkspacePullContract.response.schema,
'PreviewWorkspacePullResponse',
'Preview workspace pull response',
- 'Other-to-current workflow actions, required choices, and preview fingerprint.'
+ 'Other-to-current workflow actions, required choices, and preview fingerprint.',
+ [
+ {
+ data: {
+ previewFingerprint: PREVIEW_FINGERPRINT_EXAMPLE,
+ sourceWorkspaceId: '9f4c2a10-3b7e-4d58-8f6a-2c1d0e5b7a94',
+ targetWorkspaceId: 'e4f8d2b6-9a1c-4e3d-8b7f-5c0a2d9e6f13',
+ ready: true,
+ workflows: [],
+ unresolvedBindings: [],
+ configuration: [],
+ excludedTargets: [],
+ triggerSlots: [],
+ triggerUrlChanges: [],
+ },
+ },
+ ]
),
}
),
@@ -683,7 +726,20 @@ export const workspaceSyncOpenApiRoutes = [
v2PreviewWorkflowImportContract.response.schema,
'PreviewWorkflowImportResponse',
'Preview workflow import response',
- 'Import readiness, unresolved bindings, and destination discovery instructions.'
+ 'Import readiness, unresolved bindings, and destination discovery instructions.',
+ [
+ {
+ data: {
+ previewFingerprint: PREVIEW_FINGERPRINT_EXAMPLE,
+ ready: true,
+ bindings: [],
+ unresolvedBindings: [],
+ configuration: [],
+ unresolvedConfiguration: [],
+ discovery: [],
+ },
+ },
+ ]
),
}
),