@digi-frontend/dgate-api-documentation 4.1.6 → 4.1.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["antdTheme","methodColors","darkerMethodColors","buildTreeDataStructure","getAllTreeKeys","filterTreeData","getSidebarStyles","EndpointItem","darkerMethodColors","methodColors","Text","convertToRenderableTreeData","Sidebar","getSidebarStyles","getAllTreeKeys","convertToRenderableTreeData","filterTreeData","methodColors","LinkIcon","requestColumns","responseColumns","buildRequestData","buildHeaderData","EndpointPage","methodColors","Title","Paragraph","MainContent","MouseSquareIcon","EndpointPage","useBreakpoint","Title","useBreakpoint","TrashIcon","useBreakpoint","methodColors","TrashIcon","EditTagIcon","useBreakpoint","TrashIcon","EditTagIcon","methodColors","Text","Title","MouseSquareIcon","SyntaxHighlighter","Codebox","antdTheme","CodeboxSidebar","antdTheme","token","tokens","CopyOutlined","Codebox","CodeboxSidebar","SyntaxHighlighter","token","tokens","CopyOutlined","buildTreeDataStructure","Sidebar","MainContent"],"sources":["../src/store/slices/view.ts","../src/store/index.ts","../src/hooks/useStyle.ts","../src/theme/light.json","../src/view/helper/sidebar.utils.ts","../src/view/helper/sidebar.components.tsx","../src/hooks/useNodeSelection.ts","../src/assets/Minify.tsx","../src/view/components/NoDataIcon.tsx","../src/view/components/Sidebar.tsx","../src/assets/link.tsx","../src/view/components/ApiPage/components/ApiCard.tsx","../src/view/components/ApiPage/components/ViewModeApiHeader.tsx","../src/view/components/ApiPage/index.tsx","../src/utils/index.ts","../src/view/components/EndpointPage/EndpointPage.tsx","../src/assets/mouseSquare.tsx","../src/view/components/MainContent.tsx","../src/view/components/ApiPage/components/ApiDocumentationBar.tsx","../src/view/components/ApiPage/components/GeneralSection.tsx","../src/assets/trash.tsx","../src/assets/icons/editTag.tsx","../src/hooks/useDebounce.ts","../src/view/components/ApiPage/components/AddParameterDrawer.tsx","../src/view/components/ApiPage/components/EndpointsSection.tsx","../src/view/components/ApiPage/components/UnsavedChangesBanner.tsx","../src/view/components/ApiPage/components/TagsSection.tsx","../src/view/components/ApiPage/components/AddTagDrawer.tsx","../src/assets/icons/restApi.tsx","../src/view/components/EditModeSidebar/index.tsx","../src/view/console/helper/sidebar.utils.ts","../src/view/console/helper/sidebar.components.tsx","../src/view/console/Sidebar.tsx","../src/view/console/EndpointPage/EndpointPage.tsx","../src/view/console/MainContent.tsx","../src/assets/copy.tsx","../src/view/console/EndpointPage/Codebox/Codebox.tsx","../src/view/console/CodeboxSidebar.tsx","../src/view/helper/mutate.ts","../src/view/layout.tsx","../src/view/components/EndpointPage/Codebox/Codebox.tsx","../src/view/components/CodeboxSidebar.tsx","../src/view/devportal-layout.tsx"],"sourcesContent":["import { OpenAPIFile } from '@doc-lib/types/OpenApi'\nimport { EndpointData, OverviewData } from '@doc-lib/view/entities'\nimport { transformOpenApiToDocs } from '@doc-lib/view/helper/mutate'\nimport { TreeNode } from '@doc-lib/view/helper'\n\ntype SetFn = (fn: (state: ViewSlice) => void) => void\n\ntype ViewSlice = {\n view: {\n originalData: OpenAPIFile[] | null\n transformedData: ReturnType<typeof transformOpenApiToDocs>[] | null\n builtTreeData: TreeNode[] | null\n selectedNodeKey: string | null\n expandedKeys: string[]\n selectedApi: OverviewData | null\n selectedEndpoint: EndpointData | null\n focusedContent: 'API' | 'ENDPOINT'\n selectedStatusCode: number | null\n focusedTag: string | null\n activeRequestTab: string | null\n setSelectedStatusCode: (code: number | null) => void\n statusCodeOptions: number[]\n // Actions\n setActiveRequestTab: (tab: string | null) => void\n setSelectedNodeKey: (key: string | null) => void\n setExpandedKeys: (keys: string[]) => void\n setOriginalData: (data: OpenAPIFile[]) => void\n setSelectedApi: (api: OverviewData | null) => void\n setSelectedEndpoint: (endpoint: EndpointData | null) => void\n setTransformedData: (data: ReturnType<typeof transformOpenApiToDocs>[] | null) => void\n setBuiltTreeData: (data: TreeNode[] | null) => void\n setFocusedContent: (content: 'API' | 'ENDPOINT' | null) => void\n setStatusCodeOptions: (options: number[]) => void\n setFocusedTag: (tag: string | null) => void\n }\n}\n\nexport const createViewSlice = (set: SetFn) => ({\n view: {\n selectedNodeKey: null,\n expandedKeys: [],\n originalData: null,\n transformedData: null,\n builtTreeData: null,\n selectedApi: undefined,\n selectedEndpoint: undefined,\n focusedContent: undefined,\n selectedStatusCode: null,\n statusCodeOptions: null,\n focusedTag: null,\n activeRequestTab: null,\n\n setActiveRequestTab: (tab: string | null) =>\n set((state) => {\n state.view.activeRequestTab = tab\n }),\n\n setFocusedTag: (tag: string | null) =>\n set((state) => {\n state.view.focusedTag = tag\n }),\n\n setSelectedNodeKey: (key: string | null) =>\n set((state) => {\n state.view.selectedNodeKey = key\n }),\n\n setExpandedKeys: (keys: string[]) =>\n set((state) => {\n state.view.expandedKeys = keys\n }),\n\n setOriginalData: (data: OpenAPIFile[]) =>\n set((state) => {\n state.view.originalData = data\n }),\n\n setSelectedApi: (api: OverviewData) =>\n set((state) => {\n state.view.selectedApi = api as OverviewData\n }),\n\n setSelectedEndpoint: (endpoint: EndpointData) =>\n set((state) => {\n if (endpoint) {\n const availableStatusCodes = Object.keys(endpoint?.responses)\n state.view.statusCodeOptions = availableStatusCodes.map(Number)\n state.view.selectedStatusCode = availableStatusCodes.at(0)\n ? Number(availableStatusCodes.at(0))\n : null\n }\n state.view.selectedEndpoint = endpoint\n }),\n\n setTransformedData: (data: ReturnType<typeof transformOpenApiToDocs>[] | null) =>\n set((state) => {\n state.view.transformedData = data\n }),\n\n setBuiltTreeData: (data: TreeNode[] | null) => {\n return set((state) => {\n state.view.builtTreeData = data\n })\n },\n\n setFocusedContent: (content: 'API' | 'ENDPOINT') =>\n set((state) => {\n state.view.focusedContent = content\n }),\n\n setSelectedStatusCode: (code: number | null) =>\n set((state) => {\n state.view.selectedStatusCode = code\n }),\n } as unknown as ViewSlice['view'],\n})\n","import { create } from 'zustand'\nimport { devtools } from 'zustand/middleware'\nimport { immer } from 'zustand/middleware/immer'\nimport { createViewSlice } from './slices/view'\n\ntype SetFn = (fn: (state: unknown) => void) => void\n\nconst createStore = (set: SetFn) => ({\n ...createViewSlice(set as Parameters<typeof createViewSlice>[0]),\n})\n\nexport const useStore = create<ReturnType<typeof createStore>>()(\n devtools(immer(createStore), {\n name: 'dgate-docs-store',\n })\n)\n\nexport type StoreState = ReturnType<typeof createStore>\nexport default useStore\n","'use client'\n\nimport { theme as antdTheme } from 'antd'\nimport { useStyleRegister } from '@ant-design/cssinjs'\nimport type { CSSObject } from '@ant-design/cssinjs'\n\nexport function useStyle(\n componentName: string,\n stylesFn: (\n token: ReturnType<typeof antdTheme.useToken>['token'],\n scope: (className: string) => string\n ) => Record<string, CSSObject>\n) {\n const { token, theme, hashId } = antdTheme.useToken()\n\n // `_tokenKey` is computed by `useCacheToken` from the actual token values.\n // It changes whenever the color palette switches (dark ↔ light), so we bake\n // it into selectors and classNames. Old <style> blocks (which stay in <head>\n // because autoClear is false) then have selectors that no longer match any\n // rendered element. This is the same WSL-2199 pattern used in the parent app,\n // but using the token signature instead of the app's Redux themeMode.\n const tokenKey = (token as any)._tokenKey as string | undefined\n const themeId = tokenKey ? `tk-${tokenKey.slice(-6)}` : 'tk-default'\n\n // Used in styles for full specificity:\n // → .css-dev-only-do-not-override-xxx.tk-abc123.ComponentName-className\n const scope = (className: string) => `.${hashId}.${themeId}.${componentName}-${className}`\n\n // Used in JSX: className=\"ComponentName-className css-dev-only-do-not-override-xxx tk-abc123\"\n const cx = (...classes: string[]) =>\n classes.map((cls) => `${componentName}-${cls} ${hashId} ${themeId}`).join(' ')\n\n const wrapSSR = useStyleRegister(\n {\n theme,\n token,\n path: [componentName],\n },\n () => stylesFn(token, scope)\n )\n\n return { wrapSSR, cx, scope, token, hashId }\n}\n","","import { token } from '@doc-lib/theme/light.json'\nimport { OverviewData, EndpointData } from '../entities'\n\nexport interface ApiNodeData extends OverviewData {}\n\nexport interface EndpointNodeData {\n endpoint: EndpointData\n api: OverviewData\n tagName: string\n parentApiId: string\n tagId?: string\n}\n\nexport interface TagNodeData {\n tagName: string\n apiData: OverviewData\n}\n\nexport type NodeData = EndpointNodeData | OverviewData | TagNodeData\n\n// Type definitions\nexport interface TreeNode {\n title: string | React.ReactNode\n key: string\n selectable?: boolean\n isLeaf?: boolean\n method?: string\n children?: TreeNode[]\n data?: NodeData\n}\n\nexport interface EndpointItemProps {\n method: string\n title: string\n cx: (className: string) => string\n isSelected?: boolean\n}\n\n// Method colors configuration\nexport const methodColors = {\n GET: {\n bg: token.colorPrimaryBgHover,\n color: token.colorPrimary,\n },\n POST: {\n bg: token['green.1'],\n color: token.colorSuccess,\n },\n DELETE: {\n bg: token.colorErrorBg,\n color: token.colorError,\n },\n PUT: {\n bg: token.colorWarningBg,\n color: token.colorWarning,\n },\n PATCH: {\n bg: token['volcano.1'],\n color: token['volcano.5'],\n },\n OPTIONS: {\n bg: token['geekblue.2'],\n color: token['geekblue.6'],\n },\n HEAD: {\n bg: token['purple.1'],\n color: token['purple.5'],\n },\n TRACE: {\n bg: token['cyan.1'],\n color: token['cyan.5'],\n },\n}\n\n// Darker method colors for selected state\nexport const darkerMethodColors = {\n GET: {\n bg: token.colorPrimary,\n color: '#FFFFFF',\n },\n POST: {\n bg: token.colorSuccess,\n color: '#FFFFFF',\n },\n DELETE: {\n bg: token.colorError,\n color: '#FFFFFF',\n },\n PUT: {\n bg: token.colorWarning,\n color: '#FFFFFF',\n },\n PATCH: {\n bg: token['volcano.5'],\n color: '#FFFFFF',\n },\n OPTIONS: {\n bg: token['geekblue.6'],\n color: '#FFFFFF',\n },\n HEAD: {\n bg: token['purple.5'],\n color: '#FFFFFF',\n },\n TRACE: {\n bg: token['cyan.5'],\n color: '#FFFFFF',\n },\n}\n\nexport const buildTreeDataStructure = (data: OverviewData[] | null) => {\n if (!data) return []\n return data.map((api) => {\n const tagEntries = Object.entries(api.tags)\n const hasOnlyDefaultTag = tagEntries.length === 1 && tagEntries[0][0] === 'default'\n\n return {\n title: api.title,\n key: api.id,\n selectable: true,\n data: api as OverviewData,\n children: hasOnlyDefaultTag\n ? tagEntries[0][1].map((endpoint) => {\n return {\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: 'default',\n parentApiId: api.id,\n } as EndpointNodeData,\n }\n })\n : tagEntries.map(([tag, endpoints]) => {\n // Use deterministic tag ID generation for consistent expansion\n const tagId = `tag-${api.id}-${tag.replace(/\\s+/g, '-').toLowerCase()}`\n return {\n title: tag,\n key: tagId,\n selectable: true,\n data: { tagName: tag, apiData: api } as TagNodeData, // Store tag info and parent API data\n children: endpoints.map((endpoint) => {\n return {\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: tag,\n parentApiId: api.id,\n tagId,\n } as EndpointNodeData,\n }\n }),\n }\n }),\n }\n })\n}\n\n// Helper function to find a node by key and return its data\nexport const findNodeByKey = (nodes: TreeNode[], targetKey: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === targetKey) {\n return node\n }\n if (node.children && node.children.length > 0) {\n const found = findNodeByKey(node.children, targetKey)\n if (found) return found\n }\n }\n return null\n}\n\n// Helper function to check if an API section should be highlighted when its children are selected\nexport const isApiSectionHighlighted = (\n apiKey: string,\n selectedEndpoint: { parentApiId: string } | null\n): boolean => {\n if (!selectedEndpoint) return false\n\n // Highlight the API if the selected endpoint belongs to this API\n return selectedEndpoint.parentApiId === apiKey\n}\n\n// Get all keys for expand/collapse functionality\nexport const getAllTreeKeys = (data: TreeNode[]): string[] => {\n const keys: string[] = []\n const traverse = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n keys.push(node.key)\n if (node.children && node.children.length > 0) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return keys\n}\n\n// Filter tree data based on search\nexport const filterTreeData = (data: TreeNode[], searchText: string): TreeNode[] => {\n if (!searchText) return data\n\n // Helper function to recursively find original node in the default tree structure\n const findOriginalNode = (nodes: TreeNode[], key: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === key) return node\n if (node.children) {\n const found = findOriginalNode(node.children, key)\n if (found) return found\n }\n }\n return null\n }\n\n const filterNode = (node: TreeNode): TreeNode | null => {\n let titleText = ''\n\n // Get the original title text from the default tree structure\n const originalNode = findOriginalNode(data, node.key)\n if (originalNode && typeof originalNode.title === 'string') {\n titleText = originalNode.title\n } else if (typeof node.title === 'string') {\n titleText = node.title\n }\n\n // For endpoints, also search by method + title combination\n let searchableText = titleText\n if (node.isLeaf && node.method) {\n // Include method in searchable text for endpoints\n searchableText = `${node.method} ${titleText}`.toLowerCase()\n } else {\n searchableText = titleText.toLowerCase()\n }\n\n const searchLower = searchText.toLowerCase()\n const matchesSearch = searchableText.includes(searchLower)\n\n if (node.children) {\n const filteredChildren = node.children\n .map((child: TreeNode) => filterNode(child))\n .filter((child): child is TreeNode => child !== null)\n\n if (matchesSearch || filteredChildren.length > 0) {\n return {\n ...node,\n children: filteredChildren,\n }\n }\n } else if (matchesSearch) {\n return node\n }\n\n return null\n }\n\n return data.map((node) => filterNode(node)).filter((node): node is TreeNode => node !== null)\n}\n\n// Helper function to get parent key for search expansion\nexport const getParentKey = (key: string, tree: TreeNode[]): string | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some((item: TreeNode) => item.key === key)) {\n return node.key\n }\n const parent = getParentKey(key, node.children)\n if (parent) {\n return parent\n }\n }\n }\n return null\n}\n\n// Sidebar style configuration\nexport const getSidebarStyles = (token: any, scope: (name: string) => string) => ({\n [scope('sider')]: {\n backgroundColor: token.colorBgContainer,\n overflowY: 'auto' as const,\n overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: '100%',\n },\n [scope('content')]: {\n padding: token.padding,\n },\n [scope('controls')]: {\n display: 'flex',\n gap: token.marginXS,\n marginBottom: token.marginSM,\n },\n [scope('search-input')]: {\n flex: 1,\n },\n [scope('tree')]: {\n backgroundColor: 'transparent',\n '& .ant-tree-node-content-wrapper': {\n overflow: 'hidden',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n },\n '& .ant-tree-title': {\n width: '100%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n marginBlock: 'auto',\n },\n '& .ant-tree-treenode': {\n width: '100%',\n padding: 0,\n },\n '& .ant-tree-node-content-wrapper:hover': {\n backgroundColor: token.colorFillTertiary,\n },\n },\n [scope('endpoint-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n width: '100%',\n maxWidth: '100%',\n minWidth: '100%',\n },\n [scope('method-tag')]: {\n minWidth: '3.75rem',\n textAlign: 'center' as const,\n border: 'none',\n },\n [scope('endpoint-text')]: {\n flex: 1,\n maxWidth: '100%',\n display: 'block',\n },\n [scope('tag-title')]: {\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n flex: 1,\n },\n [scope('api-title')]: {\n flex: 1,\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n padding: 0,\n margin: 0,\n '&.highlighted': {\n color: token.colorPrimary,\n },\n },\n})\n","import React from 'react'\nimport { Typography, Tag } from 'antd'\nimport {\n methodColors,\n TreeNode,\n EndpointItemProps,\n darkerMethodColors,\n isApiSectionHighlighted,\n} from './sidebar.utils'\nimport { EndpointData } from '../entities'\n\nconst { Text } = Typography\n\n// Endpoint item component\nexport const EndpointItem: React.FC<EndpointItemProps> = ({\n method,\n title,\n cx,\n isSelected = false,\n}) => {\n const colorSet = isSelected ? darkerMethodColors : methodColors\n const methodStyle = colorSet[method as keyof typeof colorSet]\n\n return (\n <div className={cx('endpoint-item')}>\n <Tag\n className={cx('method-tag')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {method}\n </Tag>\n <Text className={cx('endpoint-text')} ellipsis={{ tooltip: title }} style={{ flex: 1 }}>\n {title}\n </Text>\n </div>\n )\n}\n\n// Convert tree data to renderable format\nexport const convertToRenderableTreeData = (\n treeDataStructure: TreeNode[],\n selectedEndpoint: EndpointData | null,\n cx: (className: string) => string\n): TreeNode[] => {\n const renderNode = (node: TreeNode): TreeNode => {\n let title: React.ReactNode\n\n if (node.isLeaf && node.method) {\n // Check if this node's endpoint matches the selected endpoint\n const isSelected =\n selectedEndpoint && 'data' in node && node.data && 'endpoint' in node.data\n ? (node.data as any).endpoint?.id === selectedEndpoint?.id\n : false\n\n // Render endpoint item\n title = (\n <EndpointItem\n method={node.method}\n title={typeof node.title === 'string' ? node.title : 'Endpoint Name'}\n cx={cx}\n isSelected={isSelected}\n />\n )\n } else if (\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n ) {\n // Render API title - check if node data is OverviewData (API data)\n const isHighlighted = isApiSectionHighlighted(node.key, selectedEndpoint)\n title = (\n <Text\n className={cx('api-title') + (isHighlighted ? ' highlighted' : '')}\n ellipsis={{ tooltip: typeof node.title === 'string' ? node.title : 'API Name' }}\n >\n {node.title}\n </Text>\n )\n } else {\n // Render tag title\n title = (\n <Text\n className={cx('tag-title')}\n ellipsis={{ tooltip: typeof node.title === 'string' ? node.title : '' }}\n >\n {node.title}\n </Text>\n )\n }\n\n return {\n ...node,\n title,\n children: node.children ? node.children.map(renderNode) : undefined,\n }\n }\n\n return treeDataStructure.map(renderNode)\n}\n","import { useStore } from '@doc-lib/store'\nimport {\n NodeData,\n EndpointNodeData,\n TagNodeData,\n TreeNode,\n findNodeByKey,\n} from '@doc-lib/view/helper'\nimport { OverviewData } from '@doc-lib/view/entities'\n\nexport interface SelectionResult {\n type: 'endpoint' | 'api' | 'tag'\n endpoint?: EndpointNodeData['endpoint']\n api?: OverviewData\n tag?: string\n}\n\nexport const useNodeSelection = () => {\n const {\n setSelectedNodeKey,\n setFocusedContent,\n setSelectedApi,\n setSelectedEndpoint,\n setExpandedKeys,\n expandedKeys,\n builtTreeData,\n setFocusedTag,\n } = useStore(({ view }) => view)\n\n const handleNodeSelection = (\n nodeData: NodeData | undefined,\n nodeKey: string\n ): SelectionResult | null => {\n if (!nodeData) return null\n if (nodeKey.startsWith('endpoint-')) {\n const endpointNodeData = nodeData as EndpointNodeData\n\n // Set the endpoint data and its parent API separately\n setSelectedEndpoint({\n ...endpointNodeData.endpoint,\n tagName: endpointNodeData.tagName,\n parentApiId: endpointNodeData.parentApiId,\n })\n setSelectedApi(endpointNodeData.api)\n setFocusedContent('ENDPOINT')\n // TODO: auto expand\n const toExpand = [\n endpointNodeData.parentApiId,\n endpointNodeData.tagId,\n endpointNodeData.api.id,\n ].filter((key): key is string => !!key)\n const expanded = [...expandedKeys]\n toExpand.forEach((key) => {\n if (key && expanded.indexOf(key) < 0) {\n expanded.push(key)\n }\n })\n setExpandedKeys(expanded)\n\n return {\n type: 'endpoint' as const,\n endpoint: endpointNodeData.endpoint,\n api: endpointNodeData.api,\n tag: endpointNodeData.tagName,\n }\n } else if (nodeKey.startsWith('api-') || nodeKey === 'custom-auth') {\n // Handle API selection\n const apiData = nodeData as OverviewData\n setSelectedApi(apiData)\n // Clear endpoint selection when selecting API directly\n setSelectedEndpoint(null)\n setFocusedContent('API')\n\n return {\n type: 'api' as const,\n api: apiData,\n }\n } else {\n // Handle tag selection\n const tagData = nodeData as TagNodeData\n setSelectedApi(tagData.apiData)\n setSelectedEndpoint(null)\n setFocusedContent('API')\n setFocusedTag(tagData.tagName)\n\n return {\n type: 'tag' as const,\n tag: tagData.tagName,\n api: tagData.apiData,\n }\n }\n }\n\n // Select a node by its key from the tree structure\n const selectNodeByKey = (nodeKey: string): SelectionResult | null => {\n const selectedNode = findNodeByKey(builtTreeData as TreeNode[], nodeKey)\n if (selectedNode) {\n const result = handleNodeSelection(selectedNode.data, nodeKey)\n setSelectedNodeKey(nodeKey)\n return result\n }\n\n return null\n }\n\n // Expand a specific node by adding it to expanded keys\n const expandNode = (nodeKey: string) => {\n if (!expandedKeys.includes(nodeKey)) {\n setExpandedKeys([...expandedKeys, nodeKey])\n }\n }\n\n const selectPreSelectedApi = (treeData: TreeNode[], apiId: string): SelectionResult | null => {\n if (!treeData || treeData.length === 0) return null\n // Find the API node with same ID\n const apiNodeById = treeData.find(\n (node) =>\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data) &&\n node?.data?.currentVersion === apiId\n )\n\n if (apiNodeById) {\n // Collect all keys to expand at once\n const keysToExpand = [apiNodeById.key]\n\n // Also expand all tag nodes under the API (non-leaf children)\n if (apiNodeById.children) {\n apiNodeById.children.forEach((node) => {\n if (!node.isLeaf) {\n keysToExpand.push(node.key)\n }\n })\n }\n\n // Expand all keys at once to avoid state update batching issues\n setExpandedKeys([\n ...expandedKeys,\n ...keysToExpand.filter((key) => !expandedKeys.includes(key)),\n ])\n\n // Select the first API node\n return selectNodeByKey(apiNodeById.key)\n } else {\n return selectFirstApi(treeData)\n }\n\n return null\n }\n\n // Select the first API from the tree data and expand it\n const selectFirstApi = (treeData: TreeNode[]): SelectionResult | null => {\n if (!treeData || treeData.length === 0) return null\n\n // Find the first API node (should be at the top level)\n const firstApiNode = treeData.find(\n (node) =>\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n )\n\n if (firstApiNode) {\n // Collect all keys to expand at once\n const keysToExpand = [firstApiNode.key]\n\n // Also expand all tag nodes under the first API (non-leaf children)\n if (firstApiNode.children) {\n firstApiNode.children.forEach((node) => {\n if (!node.isLeaf) {\n keysToExpand.push(node.key)\n }\n })\n }\n\n // Expand all keys at once to avoid state update batching issues\n setExpandedKeys([\n ...expandedKeys,\n ...keysToExpand.filter((key) => !expandedKeys.includes(key)),\n ])\n\n // Select the first API node\n return selectNodeByKey(firstApiNode.key)\n }\n\n return null\n }\n\n // Clear all selections\n const clearSelection = () => {\n setSelectedNodeKey(null)\n setSelectedApi(null)\n setSelectedEndpoint(null)\n }\n\n return {\n handleNodeSelection,\n selectNodeByKey,\n selectFirstApi,\n clearSelection,\n expandNode,\n selectPreSelectedApi,\n }\n}\n","import React from 'react'\n\nconst Minify = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M6 11.334L8 9.33398L10 11.334\" stroke=\"currentcolor\" />\n <path d=\"M6 4.66602L8 6.66602L10 4.66602\" stroke=\"currentcolor\" />\n </svg>\n)\n\nexport default Minify\n","import React from 'react'\n\ninterface NoDataIconProps extends React.SVGProps<SVGSVGElement> {\n width?: string | number\n height?: string | number\n fill?: string\n}\n\nconst NoDataIcon: React.FC<NoDataIconProps> = ({\n width = 298,\n height = 237,\n fill = '#F1F5FD',\n stroke = '#E0E9F9',\n ...props\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 298 237\"\n fill={fill}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M174.518 85.777C156.105 85.887 137.407 85.0293 119.917 80.1689C102.427 75.3086 86.959 66.1378 72.8969 55.4275C63.6906 48.456 55.3192 42.9139 43.3664 43.7496C31.6796 44.3644 20.5009 48.7289 11.485 56.1973C-3.71966 69.5246 -1.4126 94.1561 4.65169 111.486C13.7921 137.591 41.6087 155.713 65.2286 167.523C92.5399 181.18 122.532 189.119 152.611 193.671C178.978 197.674 212.837 200.599 235.666 183.357C256.649 167.545 262.406 131.389 257.264 106.978C256.013 99.7674 252.177 93.2616 246.476 88.68C231.733 77.9037 209.761 85.0952 193.194 85.4691C187.152 85.6011 180.802 85.755 174.518 85.777Z\"\n fill={fill}\n />\n <path\n d=\"M84.7402 0.424805V9.88152\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M80.0156 5.15332H89.4636\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M263.988 188.921V198.378\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M259.264 193.649H268.712\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.3525 148.081C14.5417 148.081 15.5057 147.117 15.5057 145.926C15.5057 144.736 14.5417 143.771 13.3525 143.771C12.1633 143.771 11.1992 144.736 11.1992 145.926C11.1992 147.117 12.1633 148.081 13.3525 148.081Z\"\n fill=\"#E0E9F9\"\n />\n <path\n d=\"M196.686 10.1894C197.876 10.1894 198.84 9.22447 198.84 8.03416C198.84 6.84385 197.876 5.87891 196.686 5.87891C195.497 5.87891 194.533 6.84385 194.533 8.03416C194.533 9.22447 195.497 10.1894 196.686 10.1894Z\"\n fill=\"#E0E9F9\"\n />\n <path\n d=\"M137.01 236.425C181.545 236.425 217.648 234.18 217.648 231.411C217.648 228.641 181.545 226.396 137.01 226.396C92.4757 226.396 56.373 228.641 56.373 231.411C56.373 234.18 92.4757 236.425 137.01 236.425Z\"\n fill={fill}\n />\n <path\n d=\"M74.8972 26.1118H192.008C194.922 26.1118 197.716 27.2703 199.777 29.3325C201.837 31.3947 202.994 34.1916 202.994 37.108V176.562C202.994 179.478 201.837 182.275 199.777 184.337C197.716 186.399 194.922 187.558 192.008 187.558H59.8903C56.9766 187.558 54.1823 186.399 52.122 184.337C50.0617 182.275 48.9043 179.478 48.9043 176.562V52.3927L74.8972 26.1118Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M202.465 94.0684H81.707V188.899H202.465V94.0684Z\" fill={fill} />\n <path\n d=\"M48.9043 52.3927H70.1952C71.4443 52.3869 72.6402 51.8861 73.5214 51C74.4026 50.1139 74.8972 48.9146 74.8972 47.6643V26.1118L48.9043 52.3927Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M201.873 63.7852H82.4329C77.7852 63.7852 74.0176 67.5563 74.0176 72.2082V97.7853C74.0176 102.437 77.7852 106.208 82.4329 106.208H201.873C206.521 106.208 210.288 102.437 210.288 97.7853V72.2082C210.288 67.5563 206.521 63.7852 201.873 63.7852Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 92.397C101.273 92.397 104.558 89.1083 104.558 85.0515C104.558 80.9947 101.273 77.7061 97.2195 77.7061C93.1665 77.7061 89.8809 80.9947 89.8809 85.0515C89.8809 89.1083 93.1665 92.397 97.2195 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 92.397C124.343 92.397 127.629 89.1083 127.629 85.0515C127.629 80.9947 124.343 77.7061 120.29 77.7061C116.237 77.7061 112.951 80.9947 112.951 85.0515C112.951 89.1083 116.237 92.397 120.29 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 92.397C147.392 92.397 150.677 89.1083 150.677 85.0515C150.677 80.9947 147.392 77.7061 143.339 77.7061C139.286 77.7061 136 80.9947 136 85.0515C136 89.1083 139.286 92.397 143.339 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M201.873 110.805H82.4329C77.7852 110.805 74.0176 114.576 74.0176 119.228V144.805C74.0176 149.457 77.7852 153.228 82.4329 153.228H201.873C206.521 153.228 210.288 149.457 210.288 144.805V119.228C210.288 114.576 206.521 110.805 201.873 110.805Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 139.438C101.273 139.438 104.558 136.15 104.558 132.093C104.558 128.036 101.273 124.748 97.2195 124.748C93.1665 124.748 89.8809 128.036 89.8809 132.093C89.8809 136.15 93.1665 139.438 97.2195 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 139.438C124.343 139.438 127.629 136.15 127.629 132.093C127.629 128.036 124.343 124.748 120.29 124.748C116.237 124.748 112.951 128.036 112.951 132.093C112.951 136.15 116.237 139.438 120.29 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 139.438C147.392 139.438 150.677 136.15 150.677 132.093C150.677 128.036 147.392 124.748 143.339 124.748C139.286 124.748 136 128.036 136 132.093C136 136.15 139.286 139.438 143.339 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M201.873 157.846H82.4329C77.7852 157.846 74.0176 161.617 74.0176 166.269V191.846C74.0176 196.498 77.7852 200.269 82.4329 200.269H201.873C206.521 200.269 210.288 196.498 210.288 191.846V166.269C210.288 161.617 206.521 157.846 201.873 157.846Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 186.458C101.273 186.458 104.558 183.17 104.558 179.113C104.558 175.056 101.273 171.768 97.2195 171.768C93.1665 171.768 89.8809 175.056 89.8809 179.113C89.8809 183.17 93.1665 186.458 97.2195 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 186.458C124.343 186.458 127.629 183.17 127.629 179.113C127.629 175.056 124.343 171.768 120.29 171.768C116.237 171.768 112.951 175.056 112.951 179.113C112.951 183.17 116.237 186.458 120.29 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 186.458C147.392 186.458 150.677 183.17 150.677 179.113C150.677 175.056 147.392 171.768 143.339 171.768C139.286 171.768 136 175.056 136 179.113C136 183.17 139.286 186.458 143.339 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M212.923 117.908C238.079 117.908 258.471 97.4964 258.471 72.3177C258.471 47.1389 238.079 26.7275 212.923 26.7275C187.768 26.7275 167.375 47.1389 167.375 72.3177C167.375 97.4964 187.768 117.908 212.923 117.908Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M213.452 99.3023C228.05 99.3023 239.884 87.4571 239.884 72.8455C239.884 58.2338 228.05 46.3887 213.452 46.3887C198.854 46.3887 187.02 58.2338 187.02 72.8455C187.02 87.4571 198.854 99.3023 213.452 99.3023Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M199.387 58.7437C199.939 59.893 227.519 86.9245 227.519 86.9245Z\" fill=\"white\" />\n <path\n d=\"M199.387 58.7437C199.939 59.893 227.519 86.9245 227.519 86.9245\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M227.519 58.7437C226.945 59.893 199.387 86.9245 199.387 86.9245Z\" fill=\"white\" />\n <path\n d=\"M227.519 58.7437C226.945 59.893 199.387 86.9245 199.387 86.9245\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport default NoDataIcon\n","'use client'\nimport React, { useState, useMemo } from 'react'\nimport { Input, Tree, Button, Flex, Tooltip } from 'antd'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useStore } from '@doc-lib/store'\nimport Minify from '@doc-lib/assets/Minify'\nimport {\n getAllTreeKeys,\n filterTreeData,\n getSidebarStyles,\n convertToRenderableTreeData,\n} from '../helper'\nimport Text from 'antd/es/typography/Text'\nimport { SearchOutlined } from '@ant-design/icons'\nimport { Resizable } from 're-resizable'\nimport NoDataIcon from './NoDataIcon'\n\nexport const Sidebar: React.FC<{\n searchValue: string\n setSearchValue: (text: string) => void\n}> = ({ searchValue, setSearchValue }) => {\n const expandedKeys = useStore((state) => state.view.expandedKeys)\n const { selectedNodeKey, selectedEndpoint, builtTreeData, setExpandedKeys, setSelectedNodeKey } =\n useStore(({ view }) => view)\n\n const { selectNodeByKey, clearSelection } = useNodeSelection()\n\n // Local state for expand/collapse\n\n const [autoExpandParent, setAutoExpandParent] = useState(true)\n\n const { wrapSSR, cx, token } = useStyle('Sidebar', getSidebarStyles)\n\n // Handle search with expansion logic\n const handleSearch = (value: string) => {\n if (value && builtTreeData) {\n // Get all keys that should be expanded when searching\n const allKeys = getAllTreeKeys(builtTreeData)\n setExpandedKeys(allKeys)\n setSearchValue(value)\n setAutoExpandParent(true)\n } else {\n // Clear search -> collapse all\n setSearchValue(value)\n setExpandedKeys([])\n setAutoExpandParent(false)\n }\n }\n\n // Convert tree data to renderable format\n const renderTreeData = useMemo(() => {\n if (!builtTreeData) return []\n return convertToRenderableTreeData(builtTreeData, selectedEndpoint, cx)\n }, [builtTreeData, selectedEndpoint, cx])\n\n // Memoize filtered tree data\n const filteredTreeData = useMemo(() => {\n if (!searchValue) return renderTreeData\n if (!builtTreeData) return []\n\n // Filter using original tree structure, then convert to renderable format\n const filteredOriginal = filterTreeData(builtTreeData, searchValue)\n\n return convertToRenderableTreeData(filteredOriginal, selectedEndpoint, cx)\n }, [builtTreeData, searchValue, selectedEndpoint, cx])\n\n // Handle collapse all\n const collapseAll = () => {\n setExpandedKeys([])\n }\n\n const onTreeNodeSelect = (selectedKeys: React.Key[]) => {\n const stringKeys = selectedKeys.map((key) => String(key))\n\n if (stringKeys.length === 0) {\n clearSelection()\n return\n }\n\n if (!builtTreeData) return\n\n const selectedKey = stringKeys[0]\n selectNodeByKey(selectedKey)\n setSelectedNodeKey(selectedKey)\n }\n\n return wrapSSR(\n <Resizable\n as={'aside'}\n minWidth={240}\n maxWidth={240}\n enable={{\n top: false,\n right: true,\n bottom: false,\n left: false,\n topRight: false,\n bottomRight: false,\n bottomLeft: false,\n topLeft: false,\n }}\n defaultSize={{\n width: 240,\n height: '100%',\n }}\n className={cx('sider')}\n >\n <div className={cx('content')}>\n <div className={cx('controls')}>\n <Tooltip title=\"Search by APIs or Endpoints\" placement=\"bottom\">\n <Input\n placeholder=\"Search by APIs or Endpoints\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n allowClear\n className={cx('search-input')}\n addonAfter={<SearchOutlined />}\n />\n </Tooltip>\n <Tooltip title=\"Collapse All\" placement=\"bottom\">\n <Button onClick={collapseAll} title=\"Collapse All\" icon={<Minify />} />\n </Tooltip>\n </div>\n {filteredTreeData?.length ? (\n <Tree\n showLine={{ showLeafIcon: false }}\n showIcon={false}\n expandedKeys={expandedKeys}\n autoExpandParent={autoExpandParent}\n selectedKeys={[selectedNodeKey || '']}\n onSelect={(selectedKeys) => {\n // Don't allow to deselect a node\n if (!selectedKeys?.length) return\n onTreeNodeSelect(selectedKeys)\n setSelectedNodeKey(selectedKeys[0] as string)\n }}\n onExpand={(expandedKeysValue) => {\n setExpandedKeys(expandedKeysValue as string[])\n setAutoExpandParent(false)\n }}\n treeData={filteredTreeData}\n className={cx('tree')}\n />\n ) : (\n <Flex\n justify=\"center\"\n align=\"center\"\n gap={token.marginSM}\n vertical\n style={{ marginTop: token.paddingXL }}\n >\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'10.375rem'}\n height={'8.1875rem'}\n />\n {searchValue.length ? (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: 'rgba(0,0,0,0.45)',\n }}\n >\n No results found\n </Text>\n ) : (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: 'rgba(0,0,0,0.45)',\n }}\n >\n No API\n <br />\n Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n </Resizable>\n )\n}\n","import React from 'react'\n\nconst Link = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M3.875 9.25C2.085 9.25 0.625 7.79 0.625 6C0.625 4.21 2.085 2.75 3.875 2.75C4.08 2.75 4.25 2.92 4.25 3.125C4.25 3.33 4.08 3.5 3.875 3.5C2.495 3.5 1.375 4.62 1.375 6C1.375 7.38 2.495 8.5 3.875 8.5C5.255 8.5 6.375 7.38 6.375 6C6.375 5.795 6.545 5.625 6.75 5.625C6.955 5.625 7.125 5.795 7.125 6C7.125 7.79 5.665 9.25 3.875 9.25Z\" fill=\"#4D75D9\" />\n <path d=\"M8 9.375C7.795 9.375 7.625 9.205 7.625 9C7.625 8.795 7.795 8.625 8 8.625C9.445 8.625 10.625 7.445 10.625 6C10.625 4.555 9.445 3.375 8 3.375C6.555 3.375 5.375 4.555 5.375 6C5.375 6.205 5.205 6.375 5 6.375C4.795 6.375 4.625 6.205 4.625 6C4.625 4.14 6.14 2.625 8 2.625C9.86 2.625 11.375 4.14 11.375 6C11.375 7.86 9.86 9.375 8 9.375Z\" fill=\"#4D75D9\" />\n </svg>\n)\n\nexport default Link\n","import { useStyle } from '@doc-lib/hooks/useStyle'\nimport { EndpointData } from '@doc-lib/view/entities'\nimport { methodColors } from '@doc-lib/view/helper'\nimport { Button, Card, Divider, Flex, Tooltip } from 'antd'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport LinkIcon from '@doc-lib/assets/link'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\n\ninterface IAPICard {\n viewStyle: 'grid' | 'list'\n api: EndpointData\n}\n\nconst ApiCard = ({ api, viewStyle }: IAPICard) => {\n const { wrapSSR, cx, token } = useStyle('DocumentationApiCard', (token, scope) => ({\n [scope('method-chip')]: {\n minWidth: '5.375rem',\n width: 'fit-content',\n paddingLeft: token.marginXS,\n paddingRight: token.marginXS,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: token.borderRadius,\n },\n [scope('list-container')]: { paddingTop: token.marginXS, paddingBottom: token.marginXS },\n [scope('chip-title')]: {\n alignSelf: 'center',\n textAlign: 'center',\n padding: 0,\n margin: 0,\n lineHeight: '1.375rem',\n fontSize: token.fontSize,\n },\n [scope('list-see-details')]: {\n width: '6.5625rem',\n height: '2rem',\n borderRadius: token.borderRadius,\n border: `${token.lineWidth}px solid ${token.Button?.defaultBorderColor}`,\n paddingRight: token.Button?.paddingInline,\n paddingLeft: token.Button?.paddingInline,\n background: token.Button?.defaultBg,\n '&:hover': {\n background: token.Button?.defaultBg,\n },\n },\n [scope('list-content')]: {\n display: 'flex',\n paddingTop: token.paddingXXS,\n paddingBottom: token.paddingXXS,\n paddingRight: token.paddingXS,\n paddingLeft: token.paddingXS,\n alignItems: 'center',\n gap: token.marginXS,\n alignSelf: 'stretch',\n flexDirection: 'row',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.colorBorderSecondary}`,\n minWidth: '6.25rem',\n maxWidth: 'fit-content',\n svg: {\n path: {\n fill: '#4D75D9',\n },\n },\n },\n [scope('list-title')]: {\n color: token.colorTextHeading,\n fontSize: token.fontSizeHeading3,\n fontWeight: token.fontWeightStrong,\n lineHeight: token.lineHeightHeading3,\n paddingBottom: 0,\n marginBottom: 0,\n fontFamily: token.fontFamily,\n cursor: 'pointer',\n transition: 'color 0.2s ease-in',\n\n '&:hover': {\n color: `${token.colorPrimary} !important`,\n textDecoration: 'underline',\n },\n },\n [scope('path-name')]: {\n color: token.colorText,\n fontSize: token.fontSizeSM,\n fontWeight: 400,\n fontFamily: token.fontFamily,\n },\n [scope('grid-card')]: {\n width: '100%',\n borderRadius: token.borderRadiusLG,\n },\n [scope('grid-title')]: {\n color: token.colorTextHeading,\n fontSize: token.fontSizeHeading3,\n fontWeight: token.fontWeightStrong,\n lineHeight: token.lineHeightHeading3,\n paddingBottom: 0,\n marginBottom: 0,\n fontFamily: token.fontFamily,\n },\n [scope('grid-content')]: {\n display: 'flex',\n paddingTop: token.paddingXXS,\n paddingBottom: token.paddingXXS,\n paddingRight: token.paddingXS,\n paddingLeft: token.paddingXS,\n alignItems: 'center',\n gap: token.marginXS,\n alignSelf: 'stretch',\n flexDirection: 'row',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.colorBorderSecondary}`,\n svg: {\n path: {\n fill: '#4D75D9',\n },\n },\n },\n [scope('grid-path-name')]: {\n color: token.colorText,\n fontSize: token.fontSizeSM,\n fontWeight: 400,\n fontFamily: token.fontFamily,\n },\n [scope('grid-see-details')]: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: '0.4375rem',\n paddingRight: '0.4375rem',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.Button?.defaultBorderColor}`,\n background: token.Button?.defaultBg,\n boxShadow: `0 2px 0 0 rgba(0, 0, 0, 0.02)`,\n width: '100%',\n height: '1.5rem',\n },\n }))\n\n const { selectNodeByKey } = useNodeSelection()\n\n const handleOpenEndPointView = () => {\n selectNodeByKey(api.id)\n }\n\n const TooltippedText = ({ text }: { text: string }) => {\n const limitation = viewStyle == 'grid' ? 15 : 36\n if (text.length < limitation) {\n return text\n }\n\n return (\n <Tooltip title={text} placement=\"bottomLeft\">\n {text.substring(0, limitation)}...\n </Tooltip>\n )\n }\n\n const MethodChip = ({ method }: { method: string }) => {\n const methodStyle = methodColors[method as keyof typeof methodColors]\n return (\n <div\n className={cx('method-chip')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n <Title style={{ color: methodStyle?.color }} className={cx('chip-title')} level={5}>\n {method}\n </Title>\n </div>\n )\n }\n\n if (viewStyle == 'list') {\n return wrapSSR(\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" className={cx('list-container')}>\n <Flex gap={token.marginSM}>\n <MethodChip method={api.method} />\n <Title className={cx('list-title')} level={4} onClick={handleOpenEndPointView}>\n <TooltippedText text={api?.summary || 'Endpoint Name'} />\n </Title>\n </Flex>\n <Button className={cx('list-see-details')} onClick={handleOpenEndPointView}>\n See Details\n </Button>\n </Flex>\n <div className={cx('list-content')}>\n <LinkIcon />\n <Text className={cx('path-name')}>{api?.path}</Text>\n </div>\n <Divider style={{ marginTop: '0.75rem', marginBottom: '0.25rem' }} />\n </Flex>\n )\n }\n\n return wrapSSR(\n <Card className={cx('grid-card')}>\n <Flex vertical gap={token.marginSM}>\n <MethodChip method={api?.method} />\n <Title className={cx('grid-title')} level={4}>\n <TooltippedText text={api?.summary || 'Endpoint Name'} />\n </Title>\n <div className={cx('grid-content')}>\n <LinkIcon />\n <Text className={cx('grid-path-name')}>{api?.path}</Text>\n </div>\n <Button className={cx('grid-see-details')} onClick={handleOpenEndPointView}>\n See Details\n </Button>\n </Flex>\n </Card>\n )\n}\n\nexport default ApiCard\n","import type { FC } from 'react'\nimport { Button, Typography } from 'antd'\nimport {\n SafetyOutlined,\n InfoCircleOutlined,\n DownOutlined,\n AppstoreOutlined,\n BarsOutlined,\n} from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport type { OverviewData } from '@doc-lib/view/entities'\n\ninterface ViewModeApiHeaderProps {\n api: OverviewData\n viewLayout: 'grid' | 'list'\n onViewLayoutChange: (layout: 'grid' | 'list') => void\n}\n\nfunction formatAuthType(authType?: string): string {\n if (!authType) return 'Keyless'\n switch (authType.toUpperCase()) {\n case 'OAUTH':\n case 'OAUTH2':\n return 'OAuth'\n case 'BASIC':\n return 'Basic'\n case 'KEYLESS':\n return 'Keyless'\n default:\n return 'Keyless'\n }\n}\n\nexport const ViewModeApiHeader: FC<ViewModeApiHeaderProps> = ({\n api,\n viewLayout,\n onViewLayoutChange,\n}) => {\n const { wrapSSR, cx } = useStyle('ViewModeApiHeader', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n },\n [scope('meta-bar')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('meta-left')]: {\n display: 'flex',\n alignItems: 'center',\n },\n [scope('item')]: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: 12,\n borderRight: `1px solid ${token.colorBorderSecondary}`,\n marginRight: 12,\n },\n // Fix 1 — JWS Supported: custom div with brand colors\n [scope('jws-tag')]: {\n display: 'flex',\n alignItems: 'center',\n height: 32,\n background: token.colorPrimaryBg,\n border: `1px solid ${token.colorPrimaryBorder}`,\n borderRadius: 6,\n padding: '0 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorPrimary,\n fontWeight: 400,\n margin: 0,\n },\n // Fix 2 — Auth type: custom div, border-radius 4px, colorBgContainer bg\n [scope('auth-tag')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n background: token.colorBgContainer,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 4,\n padding: '0 8px',\n height: 32,\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n margin: 0,\n boxSizing: 'border-box' as const,\n },\n [scope('auth-icon')]: {\n fontSize: 12,\n display: 'flex',\n alignItems: 'center',\n },\n // Fix 3 — Version: custom div, not Ant Button\n [scope('version-box')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n background: token.colorFillTertiary,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 6,\n padding: '0 15px',\n height: 32,\n cursor: 'not-allowed',\n boxSizing: 'border-box' as const,\n },\n [scope('version-icon')]: {\n fontSize: 16,\n color: token.colorTextDisabled,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('version-text')]: {\n fontSize: 14,\n color: token.colorTextDisabled,\n fontWeight: 400,\n lineHeight: 1,\n },\n [scope('view-toggle')]: {\n display: 'flex',\n },\n [scope('toggle-btn')]: {\n width: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('toggle-btn-active')]: {\n border: `1px solid ${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n backgroundColor: `${token.colorBgContainer} !important`,\n zIndex: 1,\n },\n [scope('description')]: {\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n },\n }))\n\n const version =\n api.relatedVersions?.find((v) => v.apiId === api.currentVersion)?.version || api.version\n\n return wrapSSR(\n <div className={cx('root')}>\n {/* Row 1: Title */}\n <Typography.Title\n level={4}\n className={cx('title')}\n ellipsis={{ tooltip: api.title }}\n style={{ margin: 0, fontSize: 20, fontWeight: 600 }}\n >\n {api.title}\n </Typography.Title>\n\n {/* Row 2: Meta bar */}\n <div className={cx('meta-bar')}>\n <div className={cx('meta-left')}>\n {/* Fix 1 — JWS Supported (conditional, custom div) */}\n {api.jwsEnabled && (\n <div className={cx('item')}>\n <div className={cx('jws-tag')}>JWS Supported</div>\n </div>\n )}\n\n {/* Fix 2 — Auth type (custom div) */}\n <div className={cx('item')}>\n <div className={cx('auth-tag')}>\n <span className={cx('auth-icon')}>\n <SafetyOutlined />\n </span>\n {formatAuthType(api.authType)}\n </div>\n </div>\n\n {/* Fix 3 — Version (custom div, not Button) */}\n <div className={cx('item')}>\n <div className={cx('version-box')}>\n <span className={cx('version-icon')}>\n <InfoCircleOutlined />\n </span>\n <span className={cx('version-text')}>{version}</span>\n <span className={cx('version-icon')}>\n <DownOutlined />\n </span>\n </div>\n </div>\n </div>\n\n {/* View layout toggle: grid / list */}\n <div className={cx('view-toggle')}>\n <Button\n className={cx('toggle-btn', viewLayout === 'grid' ? 'toggle-btn-active' : '')}\n icon={<AppstoreOutlined />}\n onClick={() => onViewLayoutChange('grid')}\n style={{ borderRadius: '4px 0 0 4px' }}\n />\n <Button\n className={cx('toggle-btn', viewLayout === 'list' ? 'toggle-btn-active' : '')}\n icon={<BarsOutlined />}\n onClick={() => onViewLayoutChange('list')}\n style={{ borderRadius: '0 4px 4px 0', marginLeft: -1 }}\n />\n </div>\n </div>\n\n {/* Row 3: Description (only if present) */}\n {api.description && (\n <Typography.Text className={cx('description')}>{api.description}</Typography.Text>\n )}\n </div>\n )\n}\n","'use client'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { Col, Divider, Flex, Row } from 'antd'\nimport Title from 'antd/es/typography/Title'\nimport useStore from '@doc-lib/store'\nimport { OverviewData } from '@doc-lib/view/entities'\nimport ApiCard from './components/ApiCard'\nimport { ViewModeApiHeader } from './components/ViewModeApiHeader'\nimport { useEffect, useMemo, useState } from 'react'\n\nexport const APIPage = ({ apiOverride }: { apiOverride?: OverviewData | null }) => {\n const [selectedUrl, setSelectedUrl] = useState<string>('')\n const {\n view: {\n selectedApi,\n focusedTag,\n setFocusedTag,\n },\n } = useStore()\n const [viewStyle, setViewStyle] = useState<'grid' | 'list'>('grid')\n const { wrapSSR, token } = useStyle('DocumentationApiPage', () => ({}))\n\n const urlsOptions = useMemo(\n () =>\n selectedApi?.servers?.map((server) => ({\n label: server?.url,\n value: server?.url,\n })),\n [selectedApi?.servers]\n )\n\n useEffect(() => {\n if (focusedTag && document.getElementById(focusedTag)) {\n const element = document.getElementById(focusedTag)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' }) // or \"auto\"\n }\n setFocusedTag(null)\n }\n }, [focusedTag, setFocusedTag, selectedApi])\n\n useEffect(() => {\n if (!!urlsOptions?.length) {\n setSelectedUrl(urlsOptions[0]?.value)\n }\n }, [selectedApi, urlsOptions])\n\n useEffect(() => {\n if (selectedApi?.servers && !selectedUrl) {\n setSelectedUrl(selectedApi?.servers?.[0].url)\n }\n }, [selectedApi?.servers])\n\n // 🔹 Map endpoints with curl commands by selectedUrl\n const getEndpointsForSelectedUrl = () => {\n if (!selectedApi) return {}\n\n const tags = selectedApi.tags || {}\n const curl = selectedApi.curl || []\n\n const filtered: typeof tags = {}\n\n Object.keys(tags).forEach((tagKey) => {\n filtered[tagKey] = tags[tagKey].map((endpoint) => {\n const curlMatch = curl.find(\n (c: any) =>\n c.serverUrl === selectedUrl && c.method === endpoint.method && c.path === endpoint.path\n )\n return {\n ...endpoint,\n curlCommand: curlMatch?.curlCommand || null,\n }\n })\n })\n\n return filtered\n }\n\n return wrapSSR(\n <Flex vertical gap={token.margin}>\n {selectedApi && (\n <ViewModeApiHeader\n api={apiOverride ?? selectedApi}\n viewLayout={viewStyle}\n onViewLayoutChange={setViewStyle}\n />\n )}\n {Object.entries(getEndpointsForSelectedUrl())\n .sort(([a], [b]) => {\n if (a.toLowerCase() === 'default') return 1\n if (b.toLowerCase() === 'default') return -1\n return 0\n })\n .map(([key, endpoints], index, arr) => {\n const isDefaultTag = key.toLowerCase() === 'default'\n const showTitle = !isDefaultTag || arr.length > 1\n\n return (\n <APIsRenderer\n key={`${selectedApi?.id}_${key}`}\n apis={endpoints}\n tagName={key}\n withTitle={showTitle}\n haveUnderLine={index < arr.length - 1}\n contextPath={selectedApi?.contextPath}\n viewStyle={viewStyle}\n token={token}\n />\n )\n })}\n </Flex>\n )\n}\n\ninterface APIsRendererProps {\n apis: OverviewData['tags']['default']\n withTitle?: boolean\n tagName: string\n haveUnderLine?: boolean\n contextPath?: string\n viewStyle: 'grid' | 'list'\n token: any\n}\n\nconst APIsRenderer = ({\n apis,\n withTitle,\n tagName,\n haveUnderLine,\n contextPath,\n viewStyle,\n token,\n}: APIsRendererProps) => {\n return (\n <Flex\n key={`${tagName}_renderer_${contextPath}`}\n gap={viewStyle === 'grid' ? token.marginXS : 0}\n style={{ marginBottom: 0, paddingBottom: 0 }}\n vertical\n >\n {withTitle && (\n <Title id={tagName} style={{ marginBottom: 0 }} level={4}>\n {tagName}\n </Title>\n )}\n {viewStyle === 'grid' ? (\n <Row gutter={[24, 24]}>\n {apis.map((item) => (\n <Col\n key={`${tagName}_renderer_${item.id}_${item.method}_${item.path}`}\n xs={24}\n sm={24}\n md={12}\n lg={8}\n xl={8}\n >\n <ApiCard api={item} viewStyle={viewStyle} />\n </Col>\n ))}\n </Row>\n ) : (\n <Flex vertical>\n {apis.map((item) => (\n <ApiCard\n key={`${tagName}_renderer_${item.id}_${item.method}_${item.path}`}\n api={item}\n viewStyle={viewStyle}\n />\n ))}\n </Flex>\n )}\n {haveUnderLine && (\n <Divider style={{ marginTop: token.marginSM, marginBottom: token.marginSM }} />\n )}\n </Flex>\n )\n}\n\n","export const handleStatusColor = (code: number): string => {\n if (code >= 200 && code < 300) {\n return 'green' // 2xx codes\n } else if (code >= 400 && code < 500) {\n return 'red' // 4xx codes\n } else if (code >= 500 && code < 600) {\n return 'red' // 5xx codes\n } else if (code >= 100 && code < 200) {\n return 'blue' // 1xx codes (Informational)\n } else if (code >= 300 && code < 400) {\n return 'orange' // 3xx codes (Redirection)\n } else {\n return 'gray' // Default or invalid status codes\n }\n}\n\nexport const copyToClipboard = async (text: string) => {\n try {\n await navigator.clipboard.writeText(text)\n return;\n } catch (err) {\n return err\n }\n}\n","'use client'\nimport React, { useState } from 'react'\nimport { Typography, Table, Tag, Card, Select, Breadcrumb, Button, Tabs, Tooltip } from 'antd'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { LeftOutlined } from '@ant-design/icons'\nimport useStore from '@doc-lib/store'\nimport { methodColors } from '@doc-lib/view/helper'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { copyToClipboard, handleStatusColor } from '@doc-lib/utils'\n\nconst { Title, Paragraph } = Typography\n\n// Table column definitions\nconst requestColumns = [\n { title: 'Parameter', dataIndex: 'param', key: 'param' },\n { title: 'Description', dataIndex: 'desc', key: 'desc' },\n { title: 'Enum', dataIndex: 'enum', key: 'enum' },\n]\n\nconst responseColumns = [...requestColumns]\n\n// Helper to build table rows from OpenAPI params\ntype ParamColors = { typeLabel: string; required: string; optional: string }\n\nconst buildRequestData = (params: any[], colors: ParamColors) =>\n [...params]\n .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map((p, index) => {\n let typeLabel = p.schema?.type\n if (p.schema?.type === 'array' && p.schema?.items?.type) {\n typeLabel = `${p.schema.type}_${p.schema.items.type}`\n }\n\n return {\n key: index,\n param: (\n <span>\n {p.name}\n {typeLabel && (\n <span\n style={{\n color: colors.typeLabel,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {p.required ? (\n <span style={{ color: colors.required }}>*</span>\n ) : (\n <span style={{ color: colors.optional }}>Optional</span>\n )}\n </span>\n ),\n desc: p.description || '--',\n enum: p.schema?.enum ? p.schema.enum.map((e: string) => <Tag key={e}>{e}</Tag>) : '--',\n }\n })\n\n// Build response rows from headers\nconst buildHeaderData = (headers: any, colors: ParamColors) => {\n if (!headers) return []\n return Object.entries(headers)\n .sort(([, a]: any, [, b]: any) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map(([name, header]: any, idx) => {\n let typeLabel = header.schema?.type\n if (header.schema?.type === 'array' && header.schema?.items?.type) {\n typeLabel = `${header.schema.type}_${header.schema.items.type}`\n }\n\n return {\n key: idx,\n param: (\n <span key={idx}>\n {name}\n {typeLabel && (\n <span\n style={{\n color: colors.typeLabel,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {header.required ? (\n <span style={{ color: colors.required }}>*</span>\n ) : (\n <span style={{ color: colors.optional }}>Optional</span>\n )}\n </span>\n ),\n desc: header.description || '--',\n enum: header.schema?.enum\n ? header.schema.enum.map((e: string) => <Tag key={e}>{e}</Tag>)\n : '--',\n }\n })\n}\n\nexport const EndpointPage: React.FC = () => {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n setSelectedNodeKey,\n setFocusedContent,\n setFocusedTag,\n } = useStore(({ view }) => view)\n const [endpointTooltip, setEndpointTooltip] = useState('Copy endpoint')\n const [selectedServer, setSelectedServer] = useState(0)\n\n const { cx, token } = useStyle('EndpointPage', (token, scope) => ({\n [scope('docs-endpoint-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n },\n [scope('content')]: {\n width: '100%',\n },\n [scope('code')]: {\n background: 'unset',\n borderRadius: token.borderRadius,\n padding: token.paddingSM,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n },\n [scope('breadcrumb')]: {\n display: 'flex',\n gap: token.marginLG,\n alignItems: 'center',\n marginBottom: token.marginLG,\n },\n [scope('request-card')]: {\n '.ant-card-head': {\n minHeight: 'unset',\n borderBottom: 'unset',\n padding: '0.75rem',\n },\n '.ant-card-body': {\n padding: '0px 0.75rem 0.75rem 0.75rem',\n '.ant-tabs-tab': {\n paddingTop: '0',\n },\n },\n },\n [scope('row-odd')]: {\n '& > td': { background: `${token.colorBgLayout} !important` },\n },\n [scope('row-even')]: {\n '& > td': { background: `${token.colorBgContainer} !important` },\n },\n }))\n\n const methodStyle = methodColors[selectedEndpoint?.method as keyof typeof methodColors]\n const paramColors: ParamColors = {\n typeLabel: token.colorTextQuaternary,\n required: token.colorError,\n optional: token.colorSuccess,\n }\n const headerParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'header') || [],\n paramColors\n )\n const pathParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'path') || [],\n paramColors\n )\n const queryParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'query') || [],\n paramColors\n )\n type RequestTab = { key: string; label: string; children: any }\n\n const requestTabs: RequestTab[] = [\n {\n key: 'header',\n label: 'Header',\n children: (\n <Table\n columns={requestColumns}\n dataSource={headerParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n {\n key: 'path',\n label: 'Path',\n children: (\n <Table\n columns={requestColumns}\n dataSource={pathParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n {\n key: 'query',\n label: 'Query',\n children: (\n <Table\n columns={requestColumns}\n dataSource={queryParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n ].filter((t): t is RequestTab => t !== null)\n\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode || 200]\n const responseHeaders = responseObj?.headers\n\n const responseHeaderData = buildHeaderData(responseHeaders, paramColors)\n\n const serverOptions =\n selectedApi?.servers?.map((server: any, index: number) => ({\n value: index,\n label: `${server.url}${selectedEndpoint?.path || ''}`,\n })) || []\n\n const getFullEndpointUrl = () => {\n if (!selectedApi?.servers || !selectedApi.servers[selectedServer]) return ''\n\n const server = selectedApi.servers[selectedServer]\n return `${server.url}${selectedEndpoint?.path || ''}`\n }\n\n return (\n <div className={cx('docs-endpoint-container')}>\n {/* Main Content */}\n <div className={cx('content')}>\n {/* Header */}\n <div className={cx('breadcrumb')}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n icon={<LeftOutlined />}\n onClick={(e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n }}\n ></Button>\n\n <Breadcrumb\n items={[\n {\n href: '',\n title: <span>{selectedApi?.title || 'API Name'}</span>,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n },\n },\n {\n href: ``,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n setFocusedTag(selectedEndpoint?.tagName || 'default')\n },\n title: (\n <p\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: token.colorTextQuaternary,\n gap: '0.25rem',\n }}\n >\n <span>{selectedEndpoint?.tagName || 'default'}</span>\n </p>\n ),\n },\n {\n title: (\n <span style={{ display: 'flex', gap: '1rem' }}>\n {selectedEndpoint?.summary || 'Endpoint Name'}\n </span>\n ),\n },\n ]}\n />\n </div>\n <Title level={3}>\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n width: '4.375rem',\n height: '1.375rem',\n textAlign: 'center'\n }}\n >\n {selectedEndpoint?.method}\n </Tag>{' '}\n {selectedEndpoint?.summary?.replace(selectedEndpoint?.method, '') ?? '--'}\n </Title>\n {/* <Paragraph>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <Select\n value={selectedServer}\n style={{ width: '100%' }}\n onChange={(value) => setSelectedServer(value)}\n prefix={\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n }\n options={serverOptions}\n disabled={serverOptions.length === 0}\n suffixIcon={serverOptions.length > 1 ? undefined : false}\n />\n <Tooltip title={endpointTooltip}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n onClick={() => {\n const fullUrl = getFullEndpointUrl()\n if (fullUrl) {\n copyToClipboard(fullUrl)\n setEndpointTooltip('Copied!')\n setTimeout(() => setEndpointTooltip('Copy endpoint'), 1500)\n }\n }}\n icon={<CopyOutlined />}\n />\n </Tooltip>\n </div>\n </Paragraph> */}\n <Paragraph style={{ color: 'rgba(0,0,0,0.45)', marginBottom: '1.5rem' }}>\n {selectedEndpoint?.description ?? '--'}\n </Paragraph>\n\n {/* Request Section */}\n {requestTabs.length > 0 && (\n <Card title=\"Request\" className={cx('request-card')} style={{ marginBottom: '1.5rem' }}>\n <Tabs defaultActiveKey={requestTabs[0].key} items={requestTabs} />\n </Card>\n )}\n\n {/* Response Section */}\n\n <Card\n title=\"Response\"\n className={cx('request-card')}\n extra={\n responseHeaderData.length > 0 && (\n <Tag>\n <span\n style={{\n background: handleStatusColor(selectedStatusCode as number),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n marginRight: '0.5rem',\n }}\n ></span>\n <span>{selectedStatusCode}</span>\n </Tag>\n )\n }\n >\n <Table\n columns={responseColumns}\n dataSource={responseHeaderData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n </Card>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nconst MouseSquare = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M16.5 9V6.75C16.5 3 15 1.5 11.25 1.5H6.75C3 1.5 1.5 3 1.5 6.75V11.25C1.5 15 3 16.5 6.75 16.5H9\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.7202 13.3808L14.4978 13.7934C14.1603 13.9059 13.8902 14.1684 13.7777 14.5134L13.3652 15.7359C13.0127 16.7934 11.5277 16.7709 11.1977 15.7134L9.81025 11.2508C9.54025 10.3658 10.3577 9.54085 11.2352 9.81835L15.7053 11.2059C16.7553 11.5359 16.7702 13.0283 15.7202 13.3808Z\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default MouseSquare\n","'use client'\nimport React from 'react'\nimport { useStyle } from '../../hooks/useStyle'\nimport { APIPage } from './ApiPage'\nimport { EndpointPage } from './EndpointPage/EndpointPage'\nimport useStore from '@doc-lib/store'\nimport { Button, Flex } from 'antd'\nimport NoDataIcon from './NoDataIcon'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport MouseSquareIcon from '@doc-lib/assets/mouseSquare'\n\nexport const MainContent: React.FC<{\n searchEnabled: boolean\n handleResetSearch: () => void\n handleVisitLandingPage?: () => void\n}> = ({ searchEnabled, handleResetSearch, handleVisitLandingPage }) => {\n const { focusedContent, transformedData } = useStore(({ view }) => view)\n const { wrapSSR, cx, token } = useStyle('MainContent', (token, scope) => ({\n [scope('inner-doc-container')]: {\n backgroundColor: token.colorBgContainer,\n flex: 1,\n minWidth: 0,\n height: '100%',\n overflow: 'auto',\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n },\n [scope('centered')]: {\n display: 'flex',\n justifyContent: 'center',\n },\n [scope('no-space')]: {\n margin: 0,\n padding: 0,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n fontWeight: 600,\n fontSize: token.fontSizeHeading4,\n color: 'rgba(0, 0, 0, 0.88)',\n },\n [scope('text')]: {\n color: 'rgba(0, 0, 0, 0.88)',\n fontFamily: token.fontFamily,\n },\n [scope('visit-landing-button')]: {\n width: '12.25rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n },\n [scope('reset-button')]: {\n width: '8.125rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n backgroundColor: token?.Button?.primaryColor,\n fontSize: token.Button?.contentFontSizeLG,\n },\n }))\n\n return wrapSSR(\n <div className={cx('inner-doc-container', !transformedData?.length ? 'centered' : '')}>\n {!transformedData?.length ? (\n <Flex justify=\"center\" align=\"center\" gap={'1.5rem'} vertical flex={1}>\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'18.625rem'}\n height={'14.75rem'}\n />\n <Flex justify=\"center\" align=\"center\" gap={'0.5rem'} vertical>\n <Title className={cx('no-space', 'title')} level={4}>\n {!searchEnabled ? 'No API Documentation Found' : 'No results found'}\n </Title>\n <Text className={cx('no-space', 'text')}>\n {!searchEnabled\n ? 'No API Documentation has been added yet. Contact admin for support.'\n : 'Adjust your Search and try again'}\n </Text>\n </Flex>\n {!searchEnabled ? (\n <Button\n type=\"primary\"\n onClick={handleVisitLandingPage}\n icon={<MouseSquareIcon />}\n iconPosition=\"start\"\n className={cx('visit-landing-button')}\n >\n Visit Landing Page\n </Button>\n ) : (\n <Button type=\"default\" className={cx('reset-button')} onClick={handleResetSearch}>\n Reset Search\n </Button>\n )}\n </Flex>\n ) : focusedContent === 'ENDPOINT' ? (\n <EndpointPage />\n ) : (\n <APIPage />\n )}\n </div>\n )\n}\n","import { EditOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { Button, Grid, Tooltip, Typography } from 'antd'\n\nconst { useBreakpoint } = Grid\nconst { Title } = Typography\n\ninterface ApiDocumentationBarProps {\n apiName: string\n mode: 'edit' | 'view'\n onModeChange: (mode: 'edit' | 'view') => void\n onReset: () => void\n onSave: () => void\n hasChanges?: boolean\n hasErrors?: boolean\n switcherNode?: React.ReactNode\n}\n\nexport const ApiDocumentationBar = ({\n apiName,\n mode,\n onModeChange,\n onReset,\n onSave,\n hasChanges = false,\n hasErrors = false,\n switcherNode,\n}: ApiDocumentationBarProps) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const { wrapSSR, cx, token } = useStyle('ApiDocumentationBar', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginSM + 4}px ${token.paddingLG}px`, // 12px 24px\n background: token.colorBgContainer,\n borderRadius: token.borderRadius,\n width: '100%',\n ['@media (max-width: 640px)']: {\n padding: `${token.marginSM}px ${token.marginMD}px`, // 12px 16px\n },\n },\n [scope('mobileWrapper')]: {\n flexDirection: 'column',\n gap: 16, // 16px (updated from token.marginSM per Figma)\n },\n [scope('mobileTopRow')]: {\n width: '100%',\n display: 'flex',\n justifyContent: 'flex-start',\n },\n [scope('desktopRow')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('mobileBottomRow')]: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n [scope('title-section')]: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM, // 12px\n minWidth: 0,\n overflow: 'hidden',\n },\n [scope('arrow-icon')]: {\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: token.colorText,\n },\n [scope('switcher')]: {\n display: 'flex',\n alignItems: 'center',\n background: token.colorBgLayout,\n padding: '4px 4px',\n borderRadius: token.borderRadius,\n gap: 8,\n },\n [scope('switcher-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontSize: token.fontSizeLG,\n fontWeight: 400,\n color: token.colorText,\n fontFamily: token.fontFamily,\n transition: 'all 0.2s ease',\n },\n [scope('switcher-item-active')]: {\n background: token.colorBgContainer,\n borderRadius: token.borderRadius, // 8px\n boxShadow: '0px 2px 4px -2px rgba(17,12,34,0.12)', // Figma specs\n fontSize: token.fontSize,\n fontWeight: 700,\n },\n [scope('switcher-icon')]: {\n width: 18,\n height: 18,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 18,\n },\n [scope('actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n flex: 1,\n justifyContent: 'flex-end',\n },\n [scope('mobileActions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n justifyContent: 'flex-end',\n },\n }))\n\n // Mobile layout\n if (isMobile) {\n return wrapSSR(\n <div className={cx('root', 'mobileWrapper')}>\n {switcherNode && <div className={cx('mobileTopRow')}>{switcherNode}</div>}\n <div className={cx('mobileBottomRow')}>\n <div className={cx('title-section')}>\n <Tooltip title={apiName}>\n <Title\n level={3}\n ellipsis\n style={{\n margin: 0,\n fontWeight: 600,\n color: token.colorTextHeading,\n }}\n >\n {apiName}\n </Title>\n </Tooltip>\n <span className={cx('arrow-icon')}>\n <RightOutlined style={{ fontSize: 24 }} />\n </span>\n </div>\n <div className={cx('mobileActions')}>\n <Button size=\"large\" onClick={onReset} disabled={!hasChanges}>\n Reset\n </Button>\n <Button size=\"large\" type=\"primary\" disabled={!hasChanges || hasErrors} onClick={onSave}>\n Save\n </Button>\n </div>\n </div>\n </div>\n )\n }\n\n // Desktop layout (unchanged from original)\n return wrapSSR(\n <div className={cx('root')}>\n <div className={cx('title-section')}>\n <Tooltip title={`${apiName} API Documentation`}>\n <Title\n level={3}\n style={{\n margin: 0,\n fontWeight: 600,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: token.colorTextHeading,\n minWidth: 0,\n flex: 1,\n }}\n >\n {apiName} API Documentation\n </Title>\n </Tooltip>\n </div>\n\n <div className={cx('switcher')}>\n <button\n className={cx('switcher-item', mode === 'edit' ? 'switcher-item-active' : '')}\n onClick={() => onModeChange('edit')}\n >\n <span className={cx('switcher-icon')}>\n <EditOutlined />\n </span>\n Edit\n </button>\n <button\n className={cx('switcher-item', mode === 'view' ? 'switcher-item-active' : '')}\n onClick={() => onModeChange('view')}\n >\n <span className={cx('switcher-icon')}>\n <EyeOutlined />\n </span>\n View\n </button>\n </div>\n\n <div className={cx('actions')}>\n <Button size=\"large\" onClick={onReset} disabled={!hasChanges}>\n Reset\n </Button>\n <Button size=\"large\" type=\"primary\" disabled={!hasChanges || hasErrors} onClick={onSave}>\n Save & Publish Changes\n </Button>\n </div>\n </div>\n )\n}\n","import { Input, Grid, Button } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { CloseCircleOutlined, UpCircleOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\ninterface GeneralSectionProps {\n apiName: string\n authType: string\n version: string\n description: string\n onApiNameChange: (val: string) => void\n onDescriptionChange: (val: string) => void\n collapsed?: boolean\n onToggleCollapse?: () => void\n onChangeDetected?: () => void\n apiNameError?: boolean\n descriptionError?: boolean\n}\n\nexport const GeneralSection = ({\n apiName,\n authType,\n version,\n description,\n onApiNameChange,\n onDescriptionChange,\n onChangeDetected,\n collapsed,\n onToggleCollapse,\n apiNameError,\n descriptionError,\n}: GeneralSectionProps) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const { wrapSSR, cx, token } = useStyle('GeneralSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: `${token.marginLG}px ${token.marginLG}px 48px`,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n width: '100%',\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('fields')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n width: '100%',\n },\n [scope('row')]: {\n display: 'flex',\n gap: token.margin,\n width: '100%',\n },\n [scope('field')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n flex: '1 0 0',\n minWidth: 0,\n },\n [scope('label')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXXS,\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n paddingBottom: token.paddingXS,\n lineHeight: '22px',\n },\n [scope('required')]: {\n color: token.colorError,\n fontSize: token.fontSize,\n },\n }))\n\n const fieldsContent = (\n <div className={cx('fields')}>\n {/* Row 1: API Name */}\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>API Name</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={apiName}\n status={apiNameError ? 'error' : undefined}\n suffix={apiNameError ? (\n <CloseCircleOutlined\n style={{ color: token.colorError, cursor: 'pointer' }}\n onClick={() => {\n onApiNameChange('')\n onChangeDetected?.()\n }}\n />\n ) : undefined}\n onChange={(e) => {\n onApiNameChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={100}\n showCount\n />\n </div>\n\n {/* Row 2: Authentication Type + Version */}\n <div className={cx('row')} style={isMobile ? { flexDirection: 'column' } : undefined}>\n <div className={cx('field')} style={isMobile ? undefined : { flex: 'none', width: 436 }}>\n <div className={cx('label')}>\n <span>Authentication Type</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input size=\"large\" value={authType} disabled />\n </div>\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Version</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input size=\"large\" value={version} disabled />\n </div>\n </div>\n\n {/* Row 3: Description */}\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Description</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input.TextArea\n size=\"large\"\n value={description}\n status={descriptionError ? 'error' : undefined}\n onChange={(e) => {\n onDescriptionChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n </div>\n )\n\n return wrapSSR(\n isMobile ? (\n <div style={{ width: '100%' }}>\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>General</Title>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n {!collapsed && <div className={cx('body')}>{fieldsContent}</div>}\n </div>\n ) : (\n <div className={cx('root')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>General</Title>\n {fieldsContent}\n </div>\n )\n )\n}\n","import React, { useId } from 'react'\n\nconst Trash = (props: React.SVGProps<SVGSVGElement>) => {\n const uid = useId()\n const maskId = `trash-mask-${uid}`\n return (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask id={maskId} fill=\"white\">\n <path d=\"M0 8C0 3.58172 3.58172 0 8 0H32C36.4183 0 40 3.58172 40 8V32C40 36.4183 36.4183 40 32 40H8C3.58172 40 0 36.4183 0 32V8Z\" />\n </mask>\n <path d=\"M8 0V1H32V0V-1H8V0ZM40 8H39V32H40H41V8H40ZM32 40V39H8V40V41H32V40ZM0 32H1V8H0H-1V32H0ZM8 40V39C4.13401 39 1 35.866 1 32H0H-1C-1 36.9706 3.02944 41 8 41V40ZM40 32H39C39 35.866 35.866 39 32 39V40V41C36.9706 41 41 36.9706 41 32H40ZM32 0V1C35.866 1 39 4.13401 39 8H40H41C41 3.02944 36.9706 -1 32 -1V0ZM8 0V-1C3.02944 -1 -1 3.02944 -1 8H0H1C1 4.13401 4.13401 1 8 1V0Z\" fill=\"currentColor\" mask={`url(#${maskId})`} />\n <path d=\"M26.75 15.4844C24.2525 15.2369 21.74 15.1094 19.235 15.1094C17.75 15.1094 16.265 15.1844 14.78 15.3344L13.25 15.4844\" fill=\"currentColor\" />\n <path d=\"M26.75 15.4844C24.2525 15.2369 21.74 15.1094 19.235 15.1094C17.75 15.1094 16.265 15.1844 14.78 15.3344L13.25 15.4844\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M17.375 14.7275L17.54 13.745C17.66 13.0325 17.75 12.5 19.0175 12.5H20.9825C22.25 12.5 22.3475 13.0625 22.46 13.7525L22.625 14.7275\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M25.1373 17.8555L24.6498 25.408C24.5673 26.5855 24.4998 27.5005 22.4073 27.5005H17.5923C15.4998 27.5005 15.4323 26.5855 15.3498 25.408L14.8623 17.8555\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.7476 23.375H21.2451\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.125 20.375H21.875\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport default Trash\n","import React from 'react'\n\nconst EditTag = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M8.25 1.5H6.75C3 1.5 1.5 3 1.5 6.75V11.25C1.5 15 3 16.5 6.75 16.5H11.25C15 16.5 16.5 15 16.5 11.25V9.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0299 2.26592L6.11991 8.17592C5.89491 8.40092 5.66991 8.84342 5.62491 9.16592L5.30241 11.4234C5.18241 12.2409 5.75991 12.8109 6.57741 12.6984L8.83491 12.3759C9.14991 12.3309 9.59241 12.1059 9.82491 11.8809L15.7349 5.97092C16.7549 4.95092 17.2349 3.76592 15.7349 2.26592C14.2349 0.765922 13.0499 1.24592 12.0299 2.26592Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.1826 3.11328C11.6851 4.90578 13.0876 6.30828 14.8876 6.81828\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n)\n\nexport default EditTag\n","import { useState, useEffect } from 'react'\n\nexport function useDebounce<T>(value: T, delay: number = 500): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(handler)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n","import type { FC } from 'react'\nimport { useState, useEffect } from 'react'\nimport { Button, Drawer, Form, Input, Select, Switch, Modal, message } from 'antd'\nimport { PlusOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nexport interface ParameterFormValues {\n name: string\n in: 'query' | 'header' | 'path'\n type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'\n required: boolean\n description?: string\n enum?: string[]\n items?: { type: string }\n}\n\ninterface AddParameterDrawerProps {\n open: boolean\n onClose: () => void\n onAdd: (param: ParameterFormValues) => void\n onEdit?: (param: ParameterFormValues) => void\n mode?: 'add' | 'edit'\n initialValues?: ParameterFormValues\n source?: 'request' | 'response'\n endpointName?: string\n}\n\nconst PARAM_IN_OPTIONS = [\n { label: 'QUERY', value: 'query' },\n { label: 'HEADER', value: 'header' },\n { label: 'PATH', value: 'path' },\n]\n\nconst RESPONSE_PARAM_IN_OPTIONS = PARAM_IN_OPTIONS.filter((o) => o.value === 'header')\nconst PARAM_TYPE_OPTIONS = [\n { label: 'STRING', value: 'string' },\n { label: 'NUMBER', value: 'number' },\n { label: 'INTEGER', value: 'integer' },\n { label: 'BOOLEAN', value: 'boolean' },\n { label: 'ARRAY', value: 'array' },\n { label: 'OBJECT', value: 'object' },\n]\n\nexport const AddParameterDrawer: FC<AddParameterDrawerProps> = ({\n open,\n onClose,\n onAdd,\n onEdit,\n mode = 'add',\n initialValues,\n source,\n endpointName,\n}) => {\n const [form] = Form.useForm()\n const [messageApi, contextHolder] = message.useMessage()\n const [confirmModalOpen, setConfirmModalOpen] = useState(false)\n const [paramName, setParamName] = useState('')\n const [enumInput, setEnumInput] = useState('')\n const [enumValues, setEnumValues] = useState<string[]>([])\n\n const nameValue = Form.useWatch('name', form) as string | undefined\n const inValue = Form.useWatch('in', form) as string | undefined\n const typeValue = Form.useWatch('type', form) as string | undefined\n const requiredValue = Form.useWatch('required', form) as boolean | undefined\n const [hasChanges, setHasChanges] = useState(false)\n\n useEffect(() => {\n if (open) {\n if (mode === 'edit' && initialValues) {\n form.setFieldsValue({\n name: initialValues.name,\n in: initialValues.in,\n type: initialValues.type,\n required: initialValues.required,\n description: initialValues.description,\n itemsType: initialValues.items?.type,\n })\n setEnumValues(initialValues.enum ?? [])\n } else {\n form.resetFields()\n setEnumValues([])\n }\n setEnumInput('')\n setHasChanges(false)\n }\n }, [open])\n\n const { wrapSSR, cx, token } = useStyle('AddParameterDrawer', (token, scope) => ({\n [scope('title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorTextBase,\n lineHeight: '24px',\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n },\n [scope('form-body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n '& .ant-form-item': {\n marginBottom: 0,\n },\n },\n [scope('label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('asterisk')]: {\n color: token.colorError,\n marginLeft: 2,\n },\n [scope('label-optional')]: {\n color: token.colorTextTertiary,\n marginLeft: 4,\n fontSize: token.fontSize,\n },\n [scope('label-secondary')]: {\n fontSize: token.fontSize,\n color: token.colorTextSecondary,\n },\n [scope('switch-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n },\n [scope('switch-label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('enum-input-row')]: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n },\n [scope('enum-input-wrap')]: {\n flex: 1,\n minWidth: 0,\n },\n [scope('enum-add-btn')]: {\n width: 32,\n height: 32,\n flexShrink: 0,\n borderColor: token.colorPrimary,\n color: token.colorPrimary,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('enum-list')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginXS,\n marginTop: token.marginXS,\n },\n [scope('enum-value-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n },\n [scope('enum-value-input-wrap')]: {\n flex: 1,\n minWidth: 0,\n },\n [scope('enum-value-input')]: {\n height: 32,\n fontSize: 14,\n color: token.colorText,\n background: token.colorBgBase,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n cursor: 'default',\n width: '100%',\n },\n [scope('enum-delete-btn')]: {\n width: 32,\n height: 32,\n flexShrink: 0,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: token.borderRadius,\n },\n [scope('footer')]: {\n display: 'flex',\n gap: 24,\n },\n [scope('footer-btn')]: {\n flex: 1,\n },\n [scope('confirmModal')]: {\n '& .ant-modal-content': {\n padding: '0 !important',\n borderRadius: '8px !important',\n overflow: 'hidden !important',\n },\n '& .ant-modal-body': {\n padding: '0 !important',\n margin: '0 !important',\n },\n },\n ['.add-param-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('modalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingBottom: 5,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('modalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('modalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('modalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('modalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('modalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n const isAddEnabled = mode === 'edit' ? hasChanges : !!(nameValue?.trim() && inValue && typeValue)\n const paramInOptions = source === 'response' ? RESPONSE_PARAM_IN_OPTIONS : PARAM_IN_OPTIONS\n\n const resetForm = () => {\n form.resetFields()\n setEnumInput('')\n setEnumValues([])\n }\n\n const handleClose = () => {\n resetForm()\n onClose()\n }\n\n const handleAddEnumValue = () => {\n const val = enumInput.trim()\n if (!val || enumValues.includes(val)) return\n const next = [...enumValues, val]\n setEnumValues(next)\n setEnumInput('')\n if (mode === 'edit' && initialValues) {\n setHasChanges(JSON.stringify(next) !== JSON.stringify(initialValues.enum ?? []))\n }\n }\n\n const handleRemoveEnumValue = (val: string) => {\n const next = enumValues.filter((v) => v !== val)\n setEnumValues(next)\n if (mode === 'edit' && initialValues) {\n setHasChanges(JSON.stringify(next) !== JSON.stringify(initialValues.enum ?? []))\n }\n }\n\n const handleEnumInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleAddEnumValue()\n }\n }\n\n const handleAddClick = async () => {\n try {\n await form.validateFields()\n setParamName(form.getFieldValue('name') ?? '')\n setConfirmModalOpen(true)\n } catch {\n // validation failed — stay open, show field errors\n }\n }\n\n const handleConfirm = () => {\n const values = form.getFieldsValue() as Omit<ParameterFormValues, 'enum'> & {\n itemsType?: string\n }\n const payload: ParameterFormValues = {\n name: values.name,\n in: values.in,\n type: values.type,\n required: values.required ?? true,\n description: values.description || undefined,\n enum: enumValues.length > 0 ? enumValues : undefined,\n ...(values.type === 'array' && values.itemsType && { items: { type: values.itemsType } }),\n }\n if (mode === 'edit') {\n onEdit?.(payload)\n messageApi.success(`${paramName} parameter has been updated successfully.`)\n } else {\n onAdd(payload)\n messageApi.success(`${paramName} parameter has been added successfully.`)\n }\n setConfirmModalOpen(false)\n resetForm()\n onClose()\n }\n\n return wrapSSR(\n <>\n {contextHolder}\n <Drawer\n open={open}\n onClose={handleClose}\n width={480}\n closable={false}\n title={\n <span className={cx('title')}>\n {mode === 'edit' ? 'Edit Parameter' : 'Add Parameter'}\n </span>\n }\n styles={{\n header: {\n padding: '16px 24px',\n borderBottom: `1px solid ${token.colorFillSecondary}`,\n background: token.colorBgBase,\n },\n body: { padding: '24px' },\n footer: {\n padding: '24px',\n background: token.colorPrimaryBg,\n borderTop: `1px solid ${token.colorFillSecondary}`,\n },\n }}\n footer={\n <div className={cx('footer')}>\n <Button size=\"large\" className={cx('footer-btn')} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n size=\"large\"\n type=\"primary\"\n icon={mode === 'edit' ? undefined : <PlusOutlined />}\n className={cx('footer-btn')}\n disabled={!isAddEnabled}\n onClick={handleAddClick}\n >\n {mode === 'edit' ? 'Save Changes' : 'Add Parameter'}\n </Button>\n </div>\n }\n >\n <Form\n form={form}\n layout=\"vertical\"\n requiredMark={false}\n className={cx('form-body')}\n initialValues={{\n required: true,\n in: source === 'response' ? 'header' : 'query',\n type: 'string',\n }}\n onValuesChange={(_changed, allValues) => {\n if (allValues.in === 'path') {\n form.setFieldValue('required', true)\n }\n if (mode === 'edit' && initialValues) {\n const current = form.getFieldsValue()\n const changed =\n current.name !== initialValues.name ||\n current.in !== initialValues.in ||\n current.type !== initialValues.type ||\n current.required !== initialValues.required ||\n (current.description ?? '') !== (initialValues.description ?? '') ||\n JSON.stringify(enumValues) !== JSON.stringify(initialValues.enum ?? [])\n setHasChanges(changed)\n }\n }}\n >\n {/* 1. Parameter Name — required */}\n <Form.Item\n name=\"name\"\n label={\n <span className={cx('label')}>\n Parameter Name<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[\n { required: true, message: 'Parameter Name is required' },\n { max: 35, message: 'Maximum 35 characters' },\n ]}\n >\n <Input showCount maxLength={35} placeholder=\"Parameter Name\" />\n </Form.Item>\n\n {/* 2. Parameter In — required */}\n <Form.Item\n name=\"in\"\n label={\n <span className={cx('label')}>\n Parameter In<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Parameter In is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={paramInOptions} />\n </Form.Item>\n\n {/* 3. Parameter Type — required */}\n <Form.Item\n name=\"type\"\n label={\n <span className={cx('label')}>\n Parameter Type<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Parameter Type is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={PARAM_TYPE_OPTIONS} />\n </Form.Item>\n\n {/* 3b. Items Type — shown only when type is array */}\n {typeValue === 'array' && (\n <Form.Item\n name=\"itemsType\"\n label={\n <span className={cx('label')}>\n Items Type<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Items Type is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={PARAM_TYPE_OPTIONS} />\n </Form.Item>\n )}\n\n {/* 4. Required? — Switch */}\n <Form.Item name=\"required\">\n <div className={cx('switch-row')}>\n <Switch\n checked={inValue === 'path' ? true : (requiredValue ?? true)}\n disabled={inValue === 'path'}\n onChange={(checked) => form.setFieldValue('required', checked)}\n style={{\n backgroundColor: (inValue === 'path' ? true : (requiredValue ?? true))\n ? token.colorPrimary\n : undefined,\n }}\n />\n <span className={cx('switch-label')}>\n Required?\n {inValue === 'path' && (\n <span style={{ color: token.colorTextTertiary, fontSize: 12, marginLeft: 4 }}>\n (Always required for path parameter)\n </span>\n )}\n </span>\n </div>\n </Form.Item>\n\n {/* 5. Description — optional */}\n <Form.Item\n name=\"description\"\n label={<span className={cx('label-secondary')}>Description</span>}\n rules={[{ max: 50, message: 'Maximum 50 characters' }]}\n >\n <Input.TextArea\n showCount\n maxLength={50}\n placeholder=\"Textarea\"\n style={{ height: 52, resize: 'none' }}\n />\n </Form.Item>\n\n {/* 6. Enum — optional */}\n <Form.Item\n label={\n <span className={cx('label-secondary')}>\n Enum<span className={cx('label-optional')}>(optional)</span>\n </span>\n }\n >\n <div className={cx('enum-input-row')}>\n <div className={cx('enum-input-wrap')}>\n <Input\n showCount\n maxLength={35}\n value={enumInput}\n placeholder=\"e.g Expired\"\n onChange={(e) => setEnumInput(e.target.value)}\n onKeyDown={handleEnumInputKeyDown}\n />\n </div>\n <Button\n ghost\n icon={<PlusOutlined />}\n className={cx('enum-add-btn')}\n onClick={handleAddEnumValue}\n disabled={!enumInput.trim()}\n />\n </div>\n {enumValues.length > 0 && (\n <div className={cx('enum-list')}>\n {enumValues.map((val) => (\n <div key={val} className={cx('enum-value-row')}>\n <div className={cx('enum-value-input-wrap')}>\n <Input readOnly value={val} className={cx('enum-value-input')} />\n </div>\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n className={cx('enum-delete-btn')}\n onClick={() => handleRemoveEnumValue(val)}\n />\n </div>\n ))}\n </div>\n )}\n </Form.Item>\n </Form>\n </Drawer>\n\n {/* Confirmation modal */}\n <Modal\n open={confirmModalOpen}\n onCancel={() => setConfirmModalOpen(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"add-param-confirm-modal\"\n styles={{ mask: { backgroundColor: 'rgba(0,0,0,0.45)' } }}\n >\n <div className={cx('modalHead')}>\n <span className={cx('modalTitle')}>\n {mode === 'edit' ? `Edit ${paramName} parameter` : `Add Parameter to ${endpointName} endpoint`}\n </span>\n <button\n className={cx('modalCloseBtn')}\n onClick={() => setConfirmModalOpen(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <div className={cx('modalContent')}>\n <span className={cx('modalContentText')}>\n Are you sure you want to {mode === 'edit' ? 'edit' : 'add'} {paramName} parameter\n {mode === 'add' ? ` to ${endpointName} endpoint` : ''}?\n </span>\n </div>\n\n <div className={cx('modalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setConfirmModalOpen(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={handleConfirm}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: token.colorPrimary,\n borderColor: token.colorPrimary,\n boxShadow: `0px 2px 0px ${token.colorPrimaryBg}`,\n }}\n >\n {mode === 'edit' ? 'Yes, Edit' : 'Yes, Add'}\n </Button>\n </div>\n </Modal>\n </>\n )\n}\n","import { useState, useEffect, useMemo } from 'react'\nimport type { FC } from 'react'\nimport {\n Button,\n Empty,\n Input,\n message,\n Modal,\n Pagination,\n Select,\n Table,\n Tabs,\n Tag,\n Tooltip,\n theme,\n Grid,\n} from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport {\n UpCircleOutlined,\n DownOutlined,\n PlusOutlined,\n CheckCircleOutlined,\n SearchOutlined,\n} from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport EditTagIcon from '@doc-lib/assets/icons/editTag'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useDebounce } from '@doc-lib/hooks/useDebounce'\nimport { methodColors } from '@doc-lib/view/helper/sidebar.utils'\nimport type { EndpointData } from '@doc-lib/view/entities'\nimport { AddParameterDrawer } from './AddParameterDrawer'\nimport type { ParameterFormValues } from './AddParameterDrawer'\n\nconst PAGE_SIZE = 4\nconst VIEW_PAGE_SIZE = 4\n\nconst getStatusCodeColor = (code: string, token: any): { dot: string; text: string } => {\n const n = parseInt(code, 10)\n if (n >= 400 && n < 500) return { dot: token.colorError, text: token.colorError }\n return { dot: token.colorSuccess, text: token.colorText }\n}\n\ninterface ViewParamRow {\n key: number\n name: string\n type: string\n required: boolean\n description: string\n enum: string[]\n}\n\nconst buildViewParamRows = (params: ParameterFormValues[]): ViewParamRow[] =>\n params.map((p, idx) => ({\n key: idx,\n name: p.name,\n type: p.type,\n required: p.required,\n description: p.description ?? '',\n enum: p.enum ?? [],\n }))\n\ninterface EndpointsSectionProps {\n endpointsByTag: Record<string, EndpointData[]>\n collapsed?: boolean\n onToggleCollapse?: () => void\n endpointNames: Record<string, string>\n endpointDescs: Record<string, string>\n endpointTags: Record<string, string[]>\n availableTags: string[]\n onEndpointNameChange: (id: string, val: string) => void\n onEndpointDescChange: (id: string, val: string) => void\n onEndpointTagsChange: (id: string, val: string[]) => void\n endpointParams: Record<string, ParameterFormValues[]>\n onAddParameter?: (endpointId: string, param: ParameterFormValues) => void\n onEditParameter?: (endpointId: string, idx: number, param: ParameterFormValues) => void\n onDeleteParameter?: (endpointId: string, idx: number) => void\n endpointResponseParams: Record<string, ParameterFormValues[]>\n onAddResponseParameter?: (endpointId: string, param: ParameterFormValues) => void\n onEditResponseParameter?: (endpointId: string, idx: number, param: ParameterFormValues) => void\n onDeleteResponseParameter?: (endpointId: string, idx: number) => void\n onRequestContentChange?: (endpointId: string, jsonString: string) => void\n onResponseContentChange?: (endpointId: string, jsonString: string) => void\n resetKey?: number\n requestBodySchemas?: Record<string, unknown>\n responseBodySchemas?: Record<string, unknown>\n mode?: 'edit' | 'view'\n selectedEndpointKey?: string\n}\n\nexport const EndpointsSection: FC<EndpointsSectionProps> = ({\n endpointsByTag,\n collapsed = false,\n onToggleCollapse,\n endpointNames,\n endpointDescs,\n endpointTags,\n availableTags,\n onEndpointNameChange,\n onEndpointDescChange,\n onEndpointTagsChange,\n endpointParams,\n onAddParameter,\n onEditParameter,\n onDeleteParameter,\n endpointResponseParams,\n onAddResponseParameter,\n onEditResponseParameter,\n onDeleteResponseParameter,\n onRequestContentChange,\n onResponseContentChange,\n resetKey,\n requestBodySchemas,\n responseBodySchemas,\n mode = 'edit',\n selectedEndpointKey,\n}) => {\n const [expandedId, setExpandedId] = useState<string | null>(null)\n const [activeTab, setActiveTab] = useState('general')\n\n useEffect(() => {\n setActiveTab('general')\n }, [selectedEndpointKey])\n useEffect(() => {\n if (!selectedEndpointKey) return\n if (selectedStatusCodes[selectedEndpointKey]) return\n const ep = Object.values(endpointsByTag).flat().find((e) => e.id === selectedEndpointKey)\n if (!ep) return\n const keys = Object.keys(ep.responses ?? {})\n const defaultCode = keys.includes('200') ? '200' : keys[0]\n if (defaultCode) {\n setSelectedStatusCodes((prev) => ({ ...prev, [selectedEndpointKey]: defaultCode }))\n }\n }, [selectedEndpointKey])\n const [paramDrawerOpen, setParamDrawerOpen] = useState(false)\n const [paramDrawerEndpointId, setParamDrawerEndpointId] = useState<string | null>(null)\n const [paramDrawerMode, setParamDrawerMode] = useState<'add' | 'edit'>('add')\n const [editParamIdx, setEditParamIdx] = useState<number | null>(null)\n const [deleteParamModal, setDeleteParamModal] = useState<{\n open: boolean\n endpointId: string\n idx: number\n name: string\n source: 'request' | 'response'\n }>({ open: false, endpointId: '', idx: -1, name: '', source: 'request' })\n const [openRequestPanels, setOpenRequestPanels] = useState<Set<string>>(new Set())\n const [openResponsePanels, setOpenResponsePanels] = useState<Set<string>>(new Set())\n const [selectedStatusCodes, setSelectedStatusCodes] = useState<Record<string, string>>({})\n const [drawerSource, setDrawerSource] = useState<'request' | 'response'>('request')\n const drawerEndpointName = useMemo(() => {\n if (!paramDrawerEndpointId) return ''\n const ep = Object.values(endpointsByTag).flat().find((e) => e.id === paramDrawerEndpointId)\n return endpointNames[paramDrawerEndpointId] ?? ep?.summary ?? ''\n }, [paramDrawerEndpointId, endpointsByTag, endpointNames])\n\n const [requestPages, setRequestPages] = useState<Map<string, number>>(new Map())\n const [responsePages, setResponsePages] = useState<Map<string, number>>(new Map())\n const [requestSearches, setRequestSearches] = useState<Record<string, string>>({})\n const [responseSearches, setResponseSearches] = useState<Record<string, string>>({})\n const [showRequestSearch, setShowRequestSearch] = useState<Record<string, boolean>>({})\n const [showResponseSearch, setShowResponseSearch] = useState<Record<string, boolean>>({})\n const debouncedRequestSearches = useDebounce(requestSearches)\n const debouncedResponseSearches = useDebounce(responseSearches)\n\n // Editable JSON state for request/response code panels (keyed by endpoint id)\n const [editableRequestContent, setEditableRequestContent] = useState<Record<string, string>>({})\n const [editableResponseContent, setEditableResponseContent] = useState<Record<string, string>>({})\n\n // When resetKey changes (handleReset incremented it), re-populate the code boxes\n // from the freshly reset schemas so they show the original values.\n useEffect(() => {\n // Re-populate for all openRequestPanels endpoints\n openRequestPanels.forEach((epId) => {\n const val = requestBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableRequestContent((prev) => ({ ...prev, [epId]: json }))\n })\n // Re-populate for all openResponsePanels endpoints\n openResponsePanels.forEach((epId) => {\n const val = responseBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableResponseContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [resetKey, openRequestPanels, openResponsePanels, requestBodySchemas, responseBodySchemas])\n\n // Initialize editable content from requestBody/responseBody schemas when panel opens\n useEffect(() => {\n if (!openRequestPanels.size) return\n openRequestPanels.forEach((epId) => {\n if (editableRequestContent[epId] !== undefined) return\n const val = requestBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableRequestContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [openRequestPanels, requestBodySchemas])\n\n useEffect(() => {\n if (!openResponsePanels.size) return\n openResponsePanels.forEach((epId) => {\n if (editableResponseContent[epId] !== undefined) return\n const val = responseBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableResponseContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [openResponsePanels, responseBodySchemas])\n\n // Validate/Beautify handlers (reused from ImportOpenApiDrawer)\n const handleValidate = (content: string) => {\n try {\n JSON.parse(content)\n message.success('Definition is valid JSON.')\n } catch {\n message.error('Invalid JSON definition.')\n }\n }\n\n const handleBeautify = (content: string, setter: (v: string) => void) => {\n try {\n const parsed = JSON.parse(content)\n setter(JSON.stringify(parsed, null, 2))\n } catch {\n message.error('Could not beautify — content is not valid JSON.')\n }\n }\n\n const { selectNodeByKey } = useNodeSelection()\n const { token: antdToken } = theme.useToken()\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const toggleRequestPanel = (epId: string) => {\n setOpenRequestPanels((prev) => {\n const next = new Set(prev)\n if (next.has(epId)) next.delete(epId)\n else next.add(epId)\n return next\n })\n }\n\n const toggleResponsePanel = (epId: string) => {\n setOpenResponsePanels((prev) => {\n const next = new Set(prev)\n if (next.has(epId)) next.delete(epId)\n else next.add(epId)\n return next\n })\n }\n\n const { wrapSSR, cx, token } = useStyle('EndpointsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n flexShrink: 0,\n flex: 1,\n minHeight: 0,\n '& .ant-tabs': {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n '& .ant-tabs-content-holder': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n padding: `${token.paddingLG}px ${token.paddingLG}px 48px`,\n },\n '& .ant-tabs-content': {\n flex: 1,\n minHeight: 0,\n },\n '& .ant-tabs-tabpane-active': {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('tag-title')]: {\n fontSize: token.fontSize,\n fontWeight: 600,\n color: token.colorTextSecondary,\n marginBottom: token.marginXS,\n },\n [scope('endpoint-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM,\n width: '100%',\n },\n [scope('endpoint-card')]: {\n display: 'flex',\n flex: '1 0 0',\n alignItems: 'center',\n gap: 14,\n padding: `${token.paddingXS}px ${token.padding}px`,\n background: token.colorFillSecondary,\n borderRadius: token.borderRadius,\n cursor: 'pointer',\n overflow: 'hidden',\n },\n [scope('endpoint-card-active')]: {\n background: 'transparent',\n border: `1px solid ${token.colorPrimaryBorder}`,\n },\n [scope('method-badge')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 15px',\n borderRadius: token.borderRadius,\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('endpoint-path')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorTextHeading,\n lineHeight: '24px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n [scope('endpoint-form')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.paddingLG,\n padding: token.paddingLG,\n borderLeft: `3px solid ${token.colorPrimaryBorder}`,\n borderRight: `3px solid ${token.colorPrimaryBorder}`,\n borderBottom: `3px solid ${token.colorPrimaryBorder}`,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('form-row')]: {\n display: 'flex',\n gap: 24,\n width: '100%',\n },\n [scope('form-field')]: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 0 0',\n minWidth: 0,\n },\n [scope('field-label')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXXS,\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n paddingBottom: token.paddingXS,\n lineHeight: '22px',\n },\n [scope('label-required')]: {\n color: token.colorError,\n },\n [scope('label-optional')]: {\n color: token.colorTextDescription,\n },\n [scope('section-header')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: '18.5px',\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n },\n [scope('section-title')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorPrimary,\n lineHeight: '24px',\n },\n [scope('param-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n padding: `${token.marginXXS}px ${token.marginSM}px`,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n background: token.colorBgContainer,\n width: '100%',\n cursor: 'pointer',\n userSelect: 'none' as const,\n '&:hover': { background: token.colorFillTertiary },\n },\n [scope('param-row--open')]: {\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('param-row-icon')]: {\n fontSize: 12,\n transition: 'transform 0.2s',\n },\n [scope('param-row-icon--open')]: {\n transform: 'rotate(180deg)',\n },\n [scope('code-panel')]: {\n width: '100%',\n overflow: 'hidden',\n background: '#1D2856',\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n },\n [scope('code-area')]: {\n background: '#1D2856',\n padding: '10px 12px',\n fontFamily: 'Cairo, sans-serif',\n fontSize: 14,\n lineHeight: '20px',\n color: token.colorTextLightSolid,\n width: '100%',\n whiteSpace: 'pre' as const,\n overflowX: 'auto',\n display: 'block',\n },\n [scope('code-footer')]: {\n background: '#161D40',\n padding: 12,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n display: 'flex',\n gap: 8,\n },\n [scope('code-btn')]: {\n borderColor: '#fff',\n color: token.colorTextLightSolid,\n '&:hover': {\n borderColor: '#fff !important',\n color: '#fff !important',\n background: 'rgba(255,255,255,0.1) !important',\n },\n },\n [scope('param-list')]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n [scope('param-item-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: `12px 0px`,\n borderBottom: `1px solid ${token.colorBorderSecondary}`,\n background: token.colorBgContainer,\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n [scope('param-details')]: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('param-detail-cell')]: {\n flex: 1,\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n },\n [scope('param-detail-label')]: {\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n fontSize: 16,\n color: token.colorTextSecondary,\n },\n [scope('param-detail-value')]: {\n fontFamily: 'Cairo, sans-serif',\n fontSize: 16,\n color: token.colorText,\n },\n [scope('param-detail-value--ellipsis')]: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n maxWidth: 160,\n },\n [scope('param-detail-value-name')]: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n maxWidth: 200,\n display: 'block',\n },\n [scope('param-enum-container')]: {\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'center',\n lineHeight: '1',\n gap: 0,\n },\n [scope('param-enum-tag')]: {\n display: 'inline-flex',\n alignItems: 'center',\n verticalAlign: 'middle',\n background: token.colorBgContainer,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 6,\n padding: '1px 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n fontFamily: 'Cairo, sans-serif',\n margin: 0,\n },\n [scope('param-enum-pill')]: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 0,\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `1px solid ${token.colorBorder}`,\n background: 'white',\n fontSize: 12,\n color: token.colorText,\n cursor: 'default',\n },\n [scope('enum-tooltip-list')]: {\n margin: 0,\n padding: '0 0 0 16px',\n fontSize: 14,\n lineHeight: '22px',\n color: token.colorTextLightSolid,\n fontFamily: 'Cairo, sans-serif',\n },\n [scope('status-label')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 14,\n lineHeight: '22px',\n fontFamily: 'Cairo, sans-serif',\n },\n [scope('status-dot')]: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n flexShrink: 0,\n display: 'inline-block',\n },\n [scope('status-option-content')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n },\n [scope('status-checkmark')]: {\n marginLeft: 'auto',\n fontSize: 14,\n },\n [scope('status-select')]: {\n width: 106,\n },\n [scope('response-controls')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n },\n ['.status-code-dropdown']: {\n borderRadius: '12px !important',\n boxShadow:\n '0px 8px 20px rgba(0,0,0,0.12), 0px 5px 8px rgba(0,0,0,0.14), 0px 12px 32px rgba(0,0,0,0.08) !important',\n '& .ant-select-item': {\n height: 32,\n minHeight: 32,\n padding: '5px 12px !important',\n borderRadius: '6px !important',\n lineHeight: '22px',\n fontSize: 14,\n fontFamily: 'Cairo, sans-serif',\n },\n '& .ant-select-item-option-content': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n },\n '& .ant-select-item-option-selected': {\n background: `${token.colorPrimaryBg} !important`,\n },\n },\n [scope('param-actions')]: {\n display: 'flex',\n gap: 8,\n },\n [scope('param-edit-btn')]: {\n width: 40,\n height: 40,\n padding: 0,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n borderColor: '#D9D9D9',\n background: '#FFF !important',\n boxShadow: '0 2px 0 0 rgba(0, 0, 0, 0.02) !important',\n color: token.colorPrimary,\n '& .ant-btn-icon': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('param-delete-btn')]: {\n width: 40,\n height: 40,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '& svg path[mask]': { display: 'none' },\n },\n ['.delete-param-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('deleteModalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('deleteModalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('deleteModalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('deleteModalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n height: 56,\n width: '100%',\n },\n [scope('deleteModalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('deleteModalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n // ── View-mode styles ──────────────────────────────────────────────────────\n [scope('view-panel')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n width: '100%',\n borderLeft: `3px solid ${token.colorPrimaryBorder}`,\n borderRight: `3px solid ${token.colorPrimaryBorder}`,\n borderBottom: `3px solid ${token.colorPrimaryBorder}`,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n padding: token.paddingLG,\n },\n [scope('view-params-card')]: {\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginSM,\n paddingTop: 12,\n width: '100%',\n overflow: 'hidden',\n '& .ant-table-thead > tr > th': {\n background: token.colorFillSecondary,\n fontWeight: 700,\n fontSize: 14,\n padding: `${token.paddingXS}px`,\n paddingInline: `${token.paddingXS}px`,\n borderColor: `${token.colorSplit} !important`,\n },\n '& .ant-table-tbody > tr > td': {\n padding: `${token.paddingXS}px`,\n paddingInline: `${token.paddingXS}px`,\n borderColor: `${token.colorBorder} !important`,\n height: 38,\n },\n '& .ant-table-container': {\n borderRadius: 0,\n border: 'none',\n },\n '& .ant-table-wrapper': {\n borderRadius: 0,\n },\n },\n [scope('view-params-header')]: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n },\n [scope('view-params-title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorText,\n },\n [scope('view-status-select-sm')]: {\n width: 65,\n },\n [scope('view-param-name')]: {\n fontSize: 14,\n fontWeight: 400,\n color: token.colorText,\n },\n [scope('view-param-type')]: {\n fontFamily: \"'Cascadia Code', sans-serif\",\n fontSize: 12,\n color: token.colorTextSecondary,\n marginLeft: 4,\n marginRight: 4,\n },\n [scope('view-param-required')]: {\n color: token.colorError,\n },\n [scope('view-param-optional')]: {\n color: token.colorSuccess,\n fontSize: 12,\n marginLeft: 4,\n },\n [scope('view-param-desc')]: {\n fontSize: 12,\n color: token.colorText,\n },\n [scope('view-enum-container')]: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 4,\n alignItems: 'center',\n },\n [scope('view-enum-tag')]: {\n background: token.colorFillSecondary,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 4,\n padding: '1px 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n margin: 0,\n cursor: 'default',\n },\n [scope('view-row-odd')]: {\n '& > td': {\n background: `${token.colorBgLayout} !important`,\n },\n },\n [scope('view-row-even')]: {\n '& > td': {\n background: `${token.colorBgContainer} !important`,\n },\n },\n [scope('empty-wrapper')]: {\n background: token.colorBgElevated,\n borderRadius: token.borderRadius,\n paddingTop: 16,\n paddingBottom: 16,\n gap: 8,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n flex: 1,\n minHeight: 0,\n '& .ant-empty': {\n margin: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n },\n '& .ant-empty-image': {\n width: 184,\n height: 117,\n margin: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '& .ant-empty-image svg, & .ant-empty-image img': {\n width: '100%',\n height: '100%',\n },\n '& .ant-empty-description': {\n margin: 0,\n },\n },\n [scope('empty-description')]: {\n fontSize: 14,\n lineHeight: '22px',\n color: token.colorTextDescription,\n textAlign: 'center',\n fontWeight: 400,\n },\n [scope('pagination')]: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: token.marginMD,\n '.ant-pagination-item-active': {\n backgroundColor: token.colorBgContainer,\n borderColor: token.colorPrimary,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n a: {\n color: token.colorPrimary,\n fontWeight: token.fontWeightStrong,\n fontSize: token.fontSize,\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n },\n '.ant-pagination-item': {\n borderRadius: token.borderRadius,\n minWidth: 32,\n height: 32,\n lineHeight: '32px',\n a: {\n color: token.colorText,\n fontWeight: 400,\n fontSize: token.fontSize,\n },\n },\n '.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link':\n {\n borderRadius: token.borderRadius,\n width: 32,\n height: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: 'transparent',\n },\n },\n }))\n\n const handleEndpointClick = (ep: EndpointData) => {\n const newId = expandedId === ep.id ? null : ep.id\n setExpandedId(newId)\n setRequestPages(new Map())\n setResponsePages(new Map())\n if (newId) {\n selectNodeByKey(ep.id)\n if (!selectedStatusCodes[ep.id]) {\n const keys = Object.keys(ep.responses ?? {})\n const defaultCode = keys.includes('200') ? '200' : keys[0]\n if (defaultCode) {\n setSelectedStatusCodes((prev) => ({ ...prev, [ep.id]: defaultCode }))\n }\n }\n }\n }\n\n const viewParamColumns = [\n {\n title: 'Parameter',\n key: 'parameter',\n render: (_: unknown, row: ViewParamRow) => (\n <span>\n <Tooltip title={row.name} placement=\"bottom\">\n <span\n className={cx('view-param-name')}\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {row.name}\n </span>\n </Tooltip>\n {row.type && <span className={cx('view-param-type')}>{row.type}</span>}\n {row.required ? (\n <span className={cx('view-param-required')}>*</span>\n ) : (\n <span className={cx('view-param-optional')}>Optional</span>\n )}\n </span>\n ),\n },\n {\n title: 'Description',\n key: 'description',\n render: (_: unknown, row: ViewParamRow) => (\n <Tooltip title={row.description || '--'} placement=\"bottom\">\n <span\n className={cx('view-param-desc')}\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {row.description || '--'}\n </span>\n </Tooltip>\n ),\n },\n {\n title: 'Enum',\n key: 'enum',\n render: (_: unknown, row: ViewParamRow) => {\n if (!row.enum || row.enum.length === 0) return <span>--</span>\n const visible = row.enum.slice(0, 2)\n const rest = row.enum.slice(2)\n return (\n <span className={cx('view-enum-container')}>\n {visible.map((v) => (\n <Tag key={v} className={cx('view-enum-tag')}>\n {v}\n </Tag>\n ))}\n {rest.length > 0 && (\n <Tooltip\n title={\n <ul className={cx('enum-tooltip-list')}>\n {rest.map((v) => (\n <li key={v}>{v}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <Tag className={cx('view-enum-tag')}>+{rest.length}</Tag>\n </Tooltip>\n )}\n </span>\n )\n },\n },\n ]\n\n if (selectedEndpointKey) {\n const ep = Object.values(endpointsByTag)\n .flat()\n .find((e) => e.id === selectedEndpointKey)\n if (!ep) return wrapSSR(<div />)\n const methodColor = methodColors[ep.method as keyof typeof methodColors]\n const epHeader = (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n marginBottom: token.marginLG,\n }}\n >\n <span\n className={cx('method-badge')}\n style={{ color: methodColor?.color, backgroundColor: methodColor?.bg ?? 'transparent' }}\n >\n {ep.method}\n </span>\n <Tooltip title={ep.path}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n {ep.path}\n </Title>\n </Tooltip>\n </div>\n )\n return wrapSSR(\n <div className={cx('root')}>\n <Tabs\n activeKey={activeTab}\n onChange={setActiveTab}\n tabBarStyle={{ background: 'transparent', padding: '0 16px', marginBottom: 16 }}\n tabBarGutter={32}\n style={{\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n }}\n items={[\n {\n key: 'general',\n label: 'General',\n children: (\n <>\n {epHeader}\n <div style={{ display: 'flex', flexDirection: 'column', gap: token.paddingLG }}>\n <div\n className={cx('form-row')}\n style={isMobile ? { flexDirection: 'column' } : undefined}\n >\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={endpointNames[ep.id] ?? ep.summary ?? ''}\n onChange={(e) => onEndpointNameChange(ep.id, e.target.value)}\n maxLength={100}\n showCount\n />\n </div>\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Tag</span>\n </div>\n <Select\n mode=\"multiple\"\n size=\"large\"\n style={{ width: '100%' }}\n placeholder=\"Select\"\n value={endpointTags[ep.id] ?? ep.tags ?? []}\n options={availableTags.map((t) => ({ label: t, value: t }))}\n onChange={(val) => onEndpointTagsChange(ep.id, val)}\n />\n </div>\n </div>\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('field-label')}>\n <span>Description</span>\n <span className={cx('label-optional')}>(optional)</span>\n </div>\n <Input.TextArea\n value={endpointDescs[ep.id] ?? ep.description ?? ''}\n onChange={(e) => onEndpointDescChange(ep.id, e.target.value)}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n </div>\n </>\n ),\n },\n {\n key: 'request',\n label: 'Request',\n children: (\n <>\n {epHeader}\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{ display: 'flex', alignItems: 'center', gap: token.marginMD }}\n >\n <span className={cx('section-title')}>Request Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n onClick={() =>\n setShowRequestSearch((prev) => ({ ...prev, [ep.id]: !prev[ep.id] }))\n }\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Request Details</span>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showRequestSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const reqSearch = (debouncedRequestSearches[ep.id] ?? '').toLowerCase()\n const allReqParams = (endpointParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(reqSearch)\n )\n if (allReqParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const reqPage = requestPages.get(ep.id) ?? 1\n const pagedReqParams = allReqParams.slice(\n (reqPage - 1) * PAGE_SIZE,\n reqPage * PAGE_SIZE\n )\n return (\n <>\n <div className={cx('param-list')} style={{ marginTop: token.margin }}>\n {pagedReqParams.map((param, i) => {\n const idx = (reqPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>Enum</span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul style={{ margin: 0, paddingLeft: 16 }}>\n {param.enum.slice(1).map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>—</span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <Tooltip title={param.description || '—'} placement=\"bottom\">\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allReqParams.length > PAGE_SIZE && (\n <Pagination\n current={reqPage}\n pageSize={PAGE_SIZE}\n total={allReqParams.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n {!['GET', 'DELETE'].includes(ep.method) && (\n <div\n className={cx('param-row', openRequestPanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleRequestPanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openRequestPanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Request <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n )}\n {!['GET', 'DELETE'].includes(ep.method) && openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableRequestContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onRequestContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableRequestContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableRequestContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableRequestContent[ep.id] ?? '',\n (v) =>\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </>\n ),\n },\n {\n key: 'response',\n label: 'Response',\n children: (\n <>\n {epHeader}\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{ display: 'flex', alignItems: 'center', gap: token.marginMD }}\n >\n <span className={cx('section-title')}>Response Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n onClick={() =>\n setShowResponseSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Response Details</span>\n <div className={cx('response-controls')}>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n <Tooltip\n title={selectedStatusCodes[ep.id] ? 'Filled' : undefined}\n placement=\"bottom\"\n >\n <Select\n className={cx('status-select')}\n popupClassName=\"status-code-dropdown\"\n value={selectedStatusCodes[ep.id] ?? undefined}\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({ ...prev, [ep.id]: val }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{\n background: getStatusCodeColor(code, antdToken).dot,\n }}\n />\n <span\n style={{\n color: getStatusCodeColor(code, antdToken).text,\n }}\n >\n {code}\n </span>\n </span>\n ),\n }))}\n optionRender={(option) => {\n const code = option.value as string\n const { dot, text } = getStatusCodeColor(code, antdToken)\n const isSelected = selectedStatusCodes[ep.id] === code\n return (\n <Tooltip title=\"Filled\" placement=\"bottom\">\n <span className={cx('status-option-content')}>\n <span\n className={cx('status-dot')}\n style={{ background: dot }}\n />\n <span style={{ color: text }}>{code}</span>\n {isSelected && (\n <CheckCircleOutlined\n className={cx('status-checkmark')}\n style={{ color: text }}\n />\n )}\n </span>\n </Tooltip>\n )\n }}\n />\n </Tooltip>\n </div>\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showResponseSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointResponseParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const resSearch = (debouncedResponseSearches[ep.id] ?? '').toLowerCase()\n const allResParams = (endpointResponseParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(resSearch)\n )\n if (allResParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const resPage = responsePages.get(ep.id) ?? 1\n const pagedResParams = allResParams.slice(\n (resPage - 1) * PAGE_SIZE,\n resPage * PAGE_SIZE\n )\n return (\n <>\n <div className={cx('param-list')} style={{ marginTop: token.margin }}>\n {pagedResParams.map((param, i) => {\n const idx = (resPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>Enum</span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul style={{ margin: 0, paddingLeft: 16 }}>\n {param.enum.slice(1).map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>—</span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <Tooltip title={param.description || '—'} placement=\"bottom\">\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allResParams.length > PAGE_SIZE && (\n <Pagination\n current={resPage}\n pageSize={PAGE_SIZE}\n total={allResParams.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n <div\n className={cx('param-row', openResponsePanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleResponsePanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openResponsePanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Response <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableResponseContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onResponseContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableResponseContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableResponseContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableResponseContent[ep.id] ?? '',\n (v) =>\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </>\n ),\n },\n ]}\n />\n <Modal\n open={deleteParamModal.open}\n onCancel={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-param-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {deleteParamModal.name} parameter</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {deleteParamModal.name} parameter?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n onClick={() => {\n const epId = deleteParamModal.endpointId\n const src = deleteParamModal.source\n if (src === 'response') {\n const total = (endpointResponseParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((responsePages.get(epId) ?? 1) > maxPage)\n setResponsePages((prev) => new Map(prev).set(epId, 1))\n onDeleteResponseParameter?.(epId, deleteParamModal.idx)\n } else {\n const total = (endpointParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((requestPages.get(epId) ?? 1) > maxPage)\n setRequestPages((prev) => new Map(prev).set(epId, 1))\n onDeleteParameter?.(epId, deleteParamModal.idx)\n }\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n <AddParameterDrawer\n open={paramDrawerOpen}\n mode={paramDrawerMode}\n endpointName={drawerEndpointName}\n initialValues={\n paramDrawerMode === 'edit' && paramDrawerEndpointId && editParamIdx !== null\n ? drawerSource === 'response'\n ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx]\n : endpointParams[paramDrawerEndpointId]?.[editParamIdx]\n : undefined\n }\n onClose={() => {\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onAdd={(param) => {\n if (paramDrawerEndpointId) {\n if (drawerSource === 'response') {\n onAddResponseParameter?.(paramDrawerEndpointId, param)\n } else {\n onAddParameter?.(paramDrawerEndpointId, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onEdit={(param) => {\n if (paramDrawerEndpointId && editParamIdx !== null) {\n if (drawerSource === 'response') {\n onEditResponseParameter?.(paramDrawerEndpointId, editParamIdx, param)\n } else {\n onEditParameter?.(paramDrawerEndpointId, editParamIdx, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n source={drawerSource}\n />\n </div>\n )\n }\n\n return wrapSSR(\n <div className={cx('root')}>\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n Endpoints\n </Title>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n\n {!collapsed && (\n <div className={cx('body')}>\n {Object.values(endpointsByTag)\n .flat()\n .map((ep) => {\n const isExpanded = expandedId === ep.id\n const methodColor = methodColors[ep.method as keyof typeof methodColors]\n\n return (\n <div key={ep.id}>\n <div className={cx('endpoint-row')}>\n <div\n className={cx('endpoint-card', isExpanded ? 'endpoint-card-active' : '')}\n onClick={() => handleEndpointClick(ep)}\n >\n <span\n className={cx('method-badge')}\n style={{\n color: isExpanded ? '#ffffff' : methodColor?.color,\n borderColor: methodColor?.color,\n backgroundColor: isExpanded ? methodColor?.color : 'transparent',\n }}\n >\n {ep.method}\n </span>\n <Tooltip title={ep.path}>\n <span className={cx('endpoint-path')}>{ep.path}</span>\n </Tooltip>\n </div>\n <UpCircleOutlined\n onClick={() => handleEndpointClick(ep)}\n style={{\n fontSize: 16,\n cursor: 'pointer',\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(180deg)',\n transition: 'transform 0.2s',\n flexShrink: 0,\n color: isExpanded ? token.colorPrimary : token.colorText,\n }}\n />\n </div>\n\n {isExpanded && mode === 'view' && (\n <div className={cx('view-panel')}>\n {/* Request section */}\n <div className={cx('view-params-card')}>\n <div className={cx('view-params-header')}>\n <span className={cx('view-params-title')}>Request</span>\n </div>\n {(() => {\n const allVReqRows = buildViewParamRows(endpointParams[ep.id] ?? [])\n const vReqPage = requestPages.get(ep.id) ?? 1\n const pagedVReqRows = allVReqRows.slice(\n (vReqPage - 1) * VIEW_PAGE_SIZE,\n vReqPage * VIEW_PAGE_SIZE\n )\n return (\n <>\n <Table<ViewParamRow>\n dataSource={pagedVReqRows}\n columns={viewParamColumns}\n pagination={false}\n rowClassName={(_, idx) =>\n cx(idx % 2 === 0 ? 'view-row-odd' : 'view-row-even')\n }\n size=\"small\"\n bordered\n />\n {allVReqRows.length > VIEW_PAGE_SIZE && (\n <div style={{ paddingBottom: 12 }}>\n <Pagination\n current={vReqPage}\n pageSize={VIEW_PAGE_SIZE}\n total={allVReqRows.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n </div>\n )}\n </>\n )\n })()}\n </div>\n\n {/* Response section */}\n <div className={cx('view-params-card')}>\n <div className={cx('view-params-header')}>\n <span className={cx('view-params-title')}>Response</span>\n <Select\n className={cx('view-status-select-sm')}\n popupClassName=\"status-code-dropdown\"\n value={\n selectedStatusCodes[ep.id] ??\n (Object.keys(ep.responses ?? {}).includes('200')\n ? '200'\n : Object.keys(ep.responses ?? {})[0])\n }\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({\n ...prev,\n [ep.id]: val,\n }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{ background: getStatusCodeColor(code, antdToken).dot }}\n />\n <span>{code}</span>\n </span>\n ),\n }))}\n size=\"middle\"\n />\n </div>\n {(() => {\n const allVResRows = buildViewParamRows(endpointResponseParams[ep.id] ?? [])\n const vResPage = responsePages.get(ep.id) ?? 1\n const pagedVResRows = allVResRows.slice(\n (vResPage - 1) * VIEW_PAGE_SIZE,\n vResPage * VIEW_PAGE_SIZE\n )\n return (\n <>\n <Table<ViewParamRow>\n dataSource={pagedVResRows}\n columns={viewParamColumns}\n pagination={false}\n rowClassName={(_, idx) =>\n cx(idx % 2 === 0 ? 'view-row-odd' : 'view-row-even')\n }\n size=\"small\"\n bordered\n />\n {allVResRows.length > VIEW_PAGE_SIZE && (\n <div style={{ paddingBottom: 12 }}>\n <Pagination\n current={vResPage}\n pageSize={VIEW_PAGE_SIZE}\n total={allVResRows.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n </div>\n )}\n </>\n )\n })()}\n {(() => {\n const selectedCode =\n selectedStatusCodes[ep.id] ??\n (Object.keys(ep.responses ?? {}).includes('200')\n ? '200'\n : Object.keys(ep.responses ?? {})[0])\n const responseContent = ep.responses?.[selectedCode]?.content\n if (!responseContent) return null\n const schema = Object.values(responseContent)[0]?.schema\n if (!schema) return null\n return (\n <div className={cx('code-panel')} style={{ marginTop: token.marginSM }}>\n <code className={cx('code-area')}>\n {JSON.stringify(schema, null, 2)}\n </code>\n </div>\n )\n })()}\n </div>\n </div>\n )}\n {isExpanded && mode !== 'view' && (\n <div className={cx('endpoint-form')}>\n <div\n className={cx('form-row')}\n style={isMobile ? { flexDirection: 'column' } : undefined}\n >\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={endpointNames[ep.id] ?? ep.summary ?? ''}\n onChange={(e) => onEndpointNameChange(ep.id, e.target.value)}\n maxLength={100}\n showCount\n />\n </div>\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Tag</span>\n </div>\n <Select\n mode=\"multiple\"\n size=\"large\"\n style={{ width: '100%' }}\n placeholder=\"Select\"\n value={endpointTags[ep.id] ?? ep.tags ?? []}\n options={availableTags.map((t) => ({ label: t, value: t }))}\n onChange={(val) => onEndpointTagsChange(ep.id, val)}\n />\n </div>\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('field-label')}>\n <span>Description</span>\n <span className={cx('label-optional')}>(optional)</span>\n </div>\n <Input.TextArea\n value={endpointDescs[ep.id] ?? ep.description ?? ''}\n onChange={(e) => onEndpointDescChange(ep.id, e.target.value)}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginMD,\n }}\n >\n <span className={cx('section-title')}>Request Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n onClick={() => {\n setShowRequestSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }}\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Request Details</span>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showRequestSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const reqSearch = (debouncedRequestSearches[ep.id] ?? '').toLowerCase()\n const allReqParams = (endpointParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(reqSearch)\n )\n if (allReqParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const reqPage = requestPages.get(ep.id) ?? 1\n const pagedReqParams = allReqParams.slice(\n (reqPage - 1) * PAGE_SIZE,\n reqPage * PAGE_SIZE\n )\n return (\n <>\n <div\n className={cx('param-list')}\n style={{ marginTop: token.margin }}\n >\n {pagedReqParams.map((param, i) => {\n const idx = (reqPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Enum\n </span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul\n style={{ margin: 0, paddingLeft: 16 }}\n >\n {param.enum.map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>\n —\n </span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allReqParams.length > PAGE_SIZE && (\n <Pagination\n current={reqPage}\n pageSize={PAGE_SIZE}\n total={allReqParams.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n {!['GET', 'DELETE'].includes(ep.method) && (\n <div\n className={cx('param-row', openRequestPanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleRequestPanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openRequestPanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Request <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n )}\n {!['GET', 'DELETE'].includes(ep.method) && openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableRequestContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onRequestContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableRequestContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableRequestContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableRequestContent[ep.id] ?? '',\n (v) =>\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginMD,\n }}\n >\n <span className={cx('section-title')}>Response Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n onClick={() => {\n setShowResponseSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }}\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Response Details</span>\n <div className={cx('response-controls')}>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n <Tooltip\n title={selectedStatusCodes[ep.id] ? 'Filled' : undefined}\n placement=\"bottom\"\n >\n <Select\n className={cx('status-select')}\n popupClassName=\"status-code-dropdown\"\n value={selectedStatusCodes[ep.id] ?? undefined}\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({\n ...prev,\n [ep.id]: val,\n }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{\n background: getStatusCodeColor(code, antdToken).dot,\n }}\n />\n <span\n style={{\n color: getStatusCodeColor(code, antdToken).text,\n }}\n >\n {code}\n </span>\n </span>\n ),\n }))}\n optionRender={(option) => {\n const code = option.value as string\n const { dot, text } = getStatusCodeColor(code, antdToken)\n const isSelected = selectedStatusCodes[ep.id] === code\n return (\n <Tooltip title=\"Filled\" placement=\"bottom\">\n <span className={cx('status-option-content')}>\n <span\n className={cx('status-dot')}\n style={{ background: dot }}\n />\n <span style={{ color: text }}>{code}</span>\n {isSelected && (\n <CheckCircleOutlined\n className={cx('status-checkmark')}\n style={{ color: text }}\n />\n )}\n </span>\n </Tooltip>\n )\n }}\n />\n </Tooltip>\n </div>\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showResponseSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointResponseParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const resSearch = (debouncedResponseSearches[ep.id] ?? '').toLowerCase()\n const allResParams = (endpointResponseParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(resSearch)\n )\n if (allResParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const resPage = responsePages.get(ep.id) ?? 1\n const pagedResParams = allResParams.slice(\n (resPage - 1) * PAGE_SIZE,\n resPage * PAGE_SIZE\n )\n return (\n <>\n <div\n className={cx('param-list')}\n style={{ marginTop: token.margin }}\n >\n {pagedResParams.map((param, i) => {\n const idx = (resPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Enum\n </span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul\n style={{ margin: 0, paddingLeft: 16 }}\n >\n {param.enum.map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>\n —\n </span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allResParams.length > PAGE_SIZE && (\n <Pagination\n current={resPage}\n pageSize={PAGE_SIZE}\n total={allResParams.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n <div\n className={cx('param-row', openResponsePanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleResponsePanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openResponsePanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Response <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableResponseContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onResponseContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableResponseContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableResponseContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableResponseContent[ep.id] ?? '',\n (v) =>\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n <Modal\n open={deleteParamModal.open}\n onCancel={() =>\n setDeleteParamModal({ open: false, endpointId: '', idx: -1, name: '', source: 'request' })\n }\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-param-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {deleteParamModal.name} parameter</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {deleteParamModal.name} parameter?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n onClick={() => {\n const epId = deleteParamModal.endpointId\n const src = deleteParamModal.source\n if (src === 'response') {\n const total = (endpointResponseParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((responsePages.get(epId) ?? 1) > maxPage)\n setResponsePages((prev) => new Map(prev).set(epId, 1))\n onDeleteResponseParameter?.(epId, deleteParamModal.idx)\n } else {\n const total = (endpointParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((requestPages.get(epId) ?? 1) > maxPage)\n setRequestPages((prev) => new Map(prev).set(epId, 1))\n onDeleteParameter?.(epId, deleteParamModal.idx)\n }\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n\n <AddParameterDrawer\n open={paramDrawerOpen}\n mode={paramDrawerMode}\n endpointName={drawerEndpointName}\n initialValues={\n paramDrawerMode === 'edit' && paramDrawerEndpointId && editParamIdx !== null\n ? drawerSource === 'response'\n ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx]\n : endpointParams[paramDrawerEndpointId]?.[editParamIdx]\n : undefined\n }\n onClose={() => {\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onAdd={(param) => {\n if (paramDrawerEndpointId) {\n if (drawerSource === 'response') {\n onAddResponseParameter?.(paramDrawerEndpointId, param)\n } else {\n onAddParameter?.(paramDrawerEndpointId, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onEdit={(param) => {\n if (paramDrawerEndpointId && editParamIdx !== null) {\n if (drawerSource === 'response') {\n onEditResponseParameter?.(paramDrawerEndpointId, editParamIdx, param)\n } else {\n onEditParameter?.(paramDrawerEndpointId, editParamIdx, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n source={drawerSource}\n />\n </div>\n )\n}\n","'use client'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { Alert } from 'antd'\nimport { ExclamationCircleFilled } from '@ant-design/icons'\n\ninterface UnsavedChangesBannerProps {\n onClose: () => void\n}\n\nexport const UnsavedChangesBanner = ({ onClose }: UnsavedChangesBannerProps) => {\n const { wrapSSR, cx } = useStyle('UnsavedChangesBanner', (token, scope) => ({\n [scope('root')]: {\n position: 'sticky',\n top: 0,\n zIndex: 100,\n width: '100%',\n marginTop: -20,\n },\n [scope('alert')]: {\n padding: '8px 12px',\n fontSize: token.fontSize,\n fontWeight: 400,\n borderRadius: 0,\n },\n }))\n\n return wrapSSR(\n <div className={cx('root')}>\n <Alert\n className={cx('alert')}\n type=\"warning\"\n message=\"There are changes you made that may not be saved\"\n closable\n onClose={onClose}\n icon={<ExclamationCircleFilled />}\n showIcon\n />\n </div>\n )\n}\n","import { useState, type FC } from 'react'\nimport { Button, Tooltip, Grid, Pagination } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { PlusOutlined, UpCircleOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport EditTagIcon from '@doc-lib/assets/icons/editTag'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nconst TAGS_PAGE_SIZE = 8\n\ninterface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n}\n\ninterface TagsSectionProps {\n tags: TagMeta[]\n collapsed?: boolean\n onToggleCollapse?: () => void\n onChangeDetected?: () => void\n onAddTag?: () => void\n onEditTag?: (tag: TagMeta) => void\n onDeleteTag?: (tagName: string, tagIndex: number) => void\n}\n\nexport const TagsSection: FC<TagsSectionProps> = ({\n tags,\n collapsed,\n onToggleCollapse,\n onAddTag,\n onEditTag,\n onDeleteTag,\n}) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const [currentPage, setCurrentPage] = useState(1)\n const sortedTags = [...tags].sort((a, b) => (a.isDefault === b.isDefault ? 0 : a.isDefault ? -1 : 1))\n const maxPage = Math.max(1, Math.ceil(tags.length / TAGS_PAGE_SIZE))\n const safePage = Math.min(currentPage, maxPage)\n const paginatedTags = sortedTags.slice((safePage - 1) * TAGS_PAGE_SIZE, safePage * TAGS_PAGE_SIZE)\n const { wrapSSR, cx, token } = useStyle('TagsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.marginLG,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n width: '100%',\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('tags-list')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n width: '100%',\n },\n [scope('tag-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minHeight: 50,\n paddingTop: 12,\n paddingBottom: 12,\n width: '100%',\n borderBottom: `1px solid ${token.colorBorder}`,\n },\n [scope('tag-row-last')]: {\n borderBottom: 'none',\n },\n [scope('tag-info')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXL,\n flex: 1,\n minWidth: 0,\n },\n [scope('tag-col')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.marginXXS,\n },\n [scope('col-label')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorTextTertiary,\n lineHeight: '24px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('col-value')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 400,\n color: token.colorText,\n lineHeight: '24px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('col-value-link')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorPrimary,\n lineHeight: '22px',\n textDecoration: 'underline',\n whiteSpace: 'nowrap' as const,\n },\n [scope('tag-actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n },\n [scope('tag-row-mobile')]: {\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 8,\n paddingTop: 12,\n paddingBottom: token.margin,\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n minHeight: 50,\n },\n [scope('tag-row-mobile-last')]: {\n borderBottom: 'none',\n paddingBottom: 0,\n },\n [scope('tag-info-mobile')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: 2,\n flex: 1,\n minWidth: 0,\n paddingTop: 4,\n },\n [scope('tag-col-mobile')]: {\n display: 'flex',\n flexDirection: 'row' as const,\n gap: 4,\n alignItems: 'center',\n minWidth: 0,\n flexWrap: 'nowrap' as const,\n },\n [scope('body-mobile')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: 0,\n overflowX: 'auto' as const,\n },\n [scope('head-collapse')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body-collapse')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('pagination')]: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: token.marginMD,\n '.ant-pagination-item-active': {\n backgroundColor: token.colorBgContainer,\n borderColor: token.colorPrimary,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n a: {\n color: token.colorPrimary,\n fontWeight: token.fontWeightStrong,\n fontSize: token.fontSize,\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n },\n '.ant-pagination-item': {\n borderRadius: token.borderRadius,\n minWidth: 32,\n height: 32,\n lineHeight: '32px',\n a: { color: token.colorText, fontWeight: 400, fontSize: token.fontSize },\n },\n '.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link':\n {\n borderRadius: token.borderRadius,\n width: 32,\n height: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: 'transparent',\n },\n },\n }))\n\n const mobileTagsList = (\n <>\n <div className={cx('body-mobile')}>\n {paginatedTags.map((tag, index) => {\n const isLast = index === paginatedTags.length - 1\n return (\n <div\n key={tag.name}\n className={cx('tag-row-mobile', isLast ? 'tag-row-mobile-last' : '')}\n >\n <div className={cx('tag-info-mobile')}>\n <div className={cx('tag-col-mobile')}>\n <span\n className={cx('col-label')}\n style={{ fontSize: token.fontSize, lineHeight: '20px' }}\n >\n Tag Name:\n </span>\n <span\n className={cx('col-value')}\n style={{\n fontSize: token.fontSize,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {tag.name}\n </span>\n </div>\n <div className={cx('tag-col-mobile')}>\n <span\n className={cx('col-label')}\n style={{ fontSize: token.fontSize, lineHeight: '20px' }}\n >\n Description:\n </span>\n <Tooltip\n title={tag.description && tag.description.length > 20 ? tag.description : ''}\n >\n <span\n className={cx('col-value')}\n style={{\n fontSize: token.fontSize,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: 140,\n display: 'block',\n }}\n >\n {tag.description ?? '-'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('tag-actions')} style={{ paddingTop: 6, flexShrink: 0 }}>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex(t => t.name === tag.name))}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n icon={<EditTagIcon />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1, ...(!tag.isDefault && { color: '#A146B3' }) }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n {tags.length > TAGS_PAGE_SIZE && (\n <Pagination\n current={safePage}\n pageSize={TAGS_PAGE_SIZE}\n total={tags.length}\n onChange={setCurrentPage}\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n\n return wrapSSR(\n isMobile ? (\n <div style={{ width: '100%' }}>\n <div className={cx('head-collapse')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>Tags</Title>\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginXS }}>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={onAddTag}\n style={{ borderRadius: token.borderRadius }}\n >\n Add Tag\n </Button>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n </div>\n {!collapsed && (\n <div className={cx('body-collapse')}>\n {mobileTagsList}\n </div>\n )}\n </div>\n ) : (\n <div className={cx('root')}>\n {/* Header */}\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>Tags</Title>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={onAddTag}\n style={{ borderRadius: token.borderRadius }}\n >\n Add Tag\n </Button>\n </div>\n\n {/* Tags list */}\n <div className={cx('tags-list')}>\n {paginatedTags.map((tag, index) => {\n const isLast = index === paginatedTags.length - 1\n return (\n <div key={tag.name} className={cx('tag-row', isLast ? 'tag-row-last' : '')}>\n <div className={cx('tag-info')}>\n <div className={cx('tag-col')} style={{ width: 200 }}>\n <span className={cx('col-label')}>Tag Name</span>\n <span className={cx('col-value')}>{tag.name}</span>\n </div>\n <div className={cx('tag-col')} style={{ width: 280 }}>\n <span className={cx('col-label')}>Description</span>\n <Tooltip\n title={tag.description && tag.description.length > 30 ? tag.description : ''}\n >\n <span\n className={cx('col-value')}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: 280,\n display: 'block',\n }}\n >\n {tag.description ?? '-'}\n </span>\n </Tooltip>\n </div>\n <div className={cx('tag-col')} style={{ flex: 1, minWidth: 0 }}>\n <span className={cx('col-label')}>External Docs</span>\n {tag.externalDocsUrl ? (\n <Tooltip\n title={tag.externalDocsUrl.length > 25 ? tag.externalDocsUrl : ''}\n >\n <a\n href={tag.externalDocsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cx('col-value-link')}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n display: 'block',\n }}\n >\n {tag.externalDocsUrl}\n </a>\n </Tooltip>\n ) : (\n <span className={cx('col-value')}>-</span>\n )}\n </div>\n </div>\n <div className={cx('tag-actions')}>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex(t => t.name === tag.name))}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n icon={<EditTagIcon />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1, ...(!tag.isDefault && { color: '#A146B3' }) }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n {tags.length > TAGS_PAGE_SIZE && (\n <Pagination\n current={safePage}\n pageSize={TAGS_PAGE_SIZE}\n total={tags.length}\n onChange={setCurrentPage}\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </div>\n ),\n )\n}\n","import type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button, Drawer, Form, Input, Modal, message } from 'antd'\nimport { PlusOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nexport interface TagFormValues {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n}\n\ninterface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n}\n\ninterface AddTagDrawerProps {\n open: boolean\n onClose: () => void\n mode: 'add' | 'edit'\n initialValues?: TagFormValues\n onAddTag?: (tag: TagFormValues) => void\n onEditTag?: (tag: TagFormValues) => void\n existingTags?: TagMeta[]\n}\n\nconst TAG_NAME_REGEX = /^[A-Za-z0-9_\\s-]+$/\nconst TAG_DESC_REGEX = /^[A-Za-z0-9_\\s-]+$/\nconst EXTERNAL_DOCS_DESC_REGEX = /^[A-Za-z0-9_\\s-]+$/\n\nexport const AddTagDrawer: FC<AddTagDrawerProps> = ({\n open,\n onClose,\n mode,\n initialValues,\n onAddTag,\n onEditTag,\n existingTags,\n}) => {\n const [form] = Form.useForm()\n const [messageApi, contextHolder] = message.useMessage()\n const [confirmModalOpen, setConfirmModalOpen] = useState(false)\n const [tagName, setTagName] = useState('')\n const tagNameValue = Form.useWatch('name', form) as string | undefined\n const extDocsDesc = Form.useWatch('externalDocsDescription', form) as string | undefined\n const extDocsLink = Form.useWatch('externalDocsLink', form) as string | undefined\n\n const { wrapSSR, cx, token } = useStyle('AddTagDrawer', (token, scope) => ({\n // ── Drawer title ──────────────────────────────────────────────────────────\n [scope('title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorTextBase,\n lineHeight: '24px',\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n },\n // ── Form ──────────────────────────────────────────────────────────────────\n [scope('form-body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n '& .ant-form-item': {\n marginBottom: 0,\n },\n },\n [scope('label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('asterisk')]: {\n color: token.colorError,\n marginLeft: 2,\n },\n [scope('label-optional')]: {\n color: token.colorTextTertiary,\n marginLeft: 4,\n fontSize: token.fontSize,\n },\n [scope('label-secondary')]: {\n fontSize: token.fontSize,\n color: token.colorTextSecondary,\n },\n [scope('label-disabled')]: {\n fontSize: token.fontSize,\n color: token.colorTextDisabled,\n },\n // ── Drawer footer ─────────────────────────────────────────────────────────\n [scope('footer')]: {\n display: 'flex',\n gap: 24,\n },\n [scope('footer-btn')]: {\n flex: 1,\n },\n // ── Confirm modal — AntD padding reset (scoped to className) ─────────────\n [scope('confirmModal')]: {\n '& .ant-modal-content': {\n padding: '0 !important',\n borderRadius: '8px !important',\n overflow: 'hidden !important',\n },\n '& .ant-modal-body': {\n padding: '0 !important',\n margin: '0 !important',\n },\n },\n ['.add-tag-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('modalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingBottom: 8,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('modalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('modalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('modalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('modalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('modalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n const isLinkEnabled = Boolean(extDocsDesc?.trim())\n const isAddEnabled = !!(tagNameValue && TAG_NAME_REGEX.test(tagNameValue)) && !form.getFieldsError().some((field) => field.errors.length > 0)\n\n // Pre-fill form when opening in edit mode; reset when closing\n useEffect(() => {\n if (open && mode === 'edit' && initialValues) {\n form.setFieldsValue(initialValues)\n }\n if (!open) {\n form.resetFields()\n }\n }, [open])\n\n// Re-run link validation whenever the link value or description changes,\n // so the validator always reads the freshest form store state\n useEffect(() => {\n if (extDocsDesc?.trim()) {\n form.validateFields(['externalDocsLink']).catch(() => {})\n }\n }, [extDocsLink, extDocsDesc])\n\n const handleClose = () => {\n form.resetFields()\n onClose()\n }\n\n const handleAddTagClick = async () => {\n try {\n await form.validateFields()\n setTagName(form.getFieldValue('name') ?? '')\n setConfirmModalOpen(true)\n } catch {\n // validation failed — stay open, show field errors\n }\n }\n\n const handleConfirm = () => {\n const values = form.getFieldsValue() as TagFormValues\n const payload: TagFormValues = {\n name: values.name,\n description: values.description || undefined,\n externalDocsDescription: values.externalDocsDescription || undefined,\n externalDocsLink: values.externalDocsLink || undefined,\n }\n if (mode === 'edit') {\n onEditTag?.(payload)\n messageApi.success(`${tagName} tag has been updated successfully.`)\n } else {\n onAddTag?.(payload)\n messageApi.success(`${tagName} tag has been added successfully.`)\n }\n setConfirmModalOpen(false)\n onClose()\n form.resetFields()\n }\n\n const drawerTitle = mode === 'edit' ? 'Edit Tag' : 'Add Tag'\n const confirmVerb = mode === 'edit' ? 'edit' : 'add'\n const confirmBtnLabel = mode === 'edit' ? 'Yes, Update' : 'Yes, Add'\n\n return wrapSSR(\n <>\n {contextHolder}\n <Drawer\n open={open}\n onClose={handleClose}\n width={480}\n closable={false}\n title={<span className={cx('title')}>{drawerTitle}</span>}\n styles={{\n header: {\n padding: '16px 24px',\n borderBottom: `1px solid ${token.colorFillSecondary}`,\n background: token.colorBgBase,\n },\n body: { padding: '24px' },\n footer: {\n padding: '24px',\n background: token.colorPrimaryBg,\n borderTop: `1px solid ${token.colorFillSecondary}`,\n },\n }}\n footer={\n <div className={cx('footer')}>\n <Button size=\"large\" className={cx('footer-btn')} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n size=\"large\"\n type=\"primary\"\n icon={mode === 'add' ? <PlusOutlined /> : undefined}\n className={cx('footer-btn')}\n disabled={!isAddEnabled}\n onClick={handleAddTagClick}\n >\n {mode === 'edit' ? 'Update Tag' : 'Add Tag'}\n </Button>\n </div>\n }\n >\n <Form form={form} layout=\"vertical\" requiredMark={false} className={cx('form-body')}>\n {/* 1. Tag Name — required */}\n <Form.Item\n name=\"name\"\n label={\n <span className={cx('label')}>\n Tag Name<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[\n { required: true, message: 'Tag Name is required' },\n { min: 1 },\n { max: 25, message: 'Maximum 25 characters' },\n {\n pattern: TAG_NAME_REGEX,\n message: 'Only letters, numbers, spaces, underscores, and hyphens',\n },\n {\n validator: (_, value: string) => {\n if (!value || !existingTags?.length) return Promise.resolve()\n const originalName = initialValues?.name\n const isDuplicate = existingTags.some(\n (t) =>\n t.name.toLowerCase() === value.toLowerCase() &&\n t.name.toLowerCase() !== originalName?.toLowerCase()\n )\n if (isDuplicate) {\n return Promise.reject(new Error('Tag name already exists'))\n }\n return Promise.resolve()\n },\n },\n ]}\n >\n <Input showCount maxLength={25} placeholder=\"API Name\" />\n </Form.Item>\n\n {/* 2. Description — optional */}\n <Form.Item\n name=\"description\"\n label={\n <span className={cx('label-secondary')}>\n Description<span className={cx('label-optional')}>(optional)</span>\n </span>\n }\n rules={[\n { max: 50, message: 'Maximum 50 characters' },\n {\n pattern: TAG_DESC_REGEX,\n message: 'Only letters, numbers, spaces, _ and - allowed',\n },\n ]}\n >\n <Input.TextArea\n showCount\n maxLength={50}\n placeholder=\"Textarea\"\n style={{ height: 52, resize: 'none' }}\n />\n </Form.Item>\n\n {/* 3. External Docs Description — optional */}\n <Form.Item\n name=\"externalDocsDescription\"\n label={<span className={cx('label-secondary')}>External Docs Description</span>}\n rules={[\n { max: 25, message: 'Maximum 25 characters' },\n {\n pattern: EXTERNAL_DOCS_DESC_REGEX,\n message: 'Only letters, numbers, spaces, _ and - allowed',\n },\n ]}\n >\n <Input\n showCount\n maxLength={25}\n placeholder=\"Describe External Docs\"\n onChange={(e) => {\n if (!e.target.value?.trim()) {\n form.setFields([{ name: 'externalDocsLink', value: undefined, errors: [] }])\n }\n }}\n />\n </Form.Item>\n\n {/* 4. External Docs Link — conditionally required + disabled */}\n <Form.Item\n name=\"externalDocsLink\"\n dependencies={['externalDocsDescription']}\n label={\n <span className={isLinkEnabled ? cx('label-secondary') : cx('label-disabled')}>\n External Docs Link\n </span>\n }\n rules={[\n { max: 500, message: 'Maximum 500 characters' },\n {\n validator: async () => {\n const desc = form.getFieldValue('externalDocsDescription') as string | undefined\n const link = form.getFieldValue('externalDocsLink') as string | undefined\n\n if (!desc?.trim()) return Promise.resolve()\n\n if (!link?.trim()) {\n return Promise.reject(\n new Error('External Docs Link is required when Description is filled')\n )\n }\n\n try {\n const urlPattern = /^https?:\\/\\/[a-zA-Z0-9]+([\\-\\.]{1}[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,}(:[0-9]{1,5})?(\\/.*)?$/\n if (!urlPattern.test(link)) {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n return Promise.resolve()\n } catch {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n },\n },\n ]}\n >\n <Input\n showCount\n maxLength={500}\n placeholder=\"External Docs Link\"\n disabled={!isLinkEnabled}\n />\n </Form.Item>\n </Form>\n </Drawer>\n\n {/* Confirmation modal */}\n <Modal\n open={confirmModalOpen}\n onCancel={() => setConfirmModalOpen(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"add-tag-confirm-modal\"\n styles={{ mask: { backgroundColor: 'rgba(0,0,0,0.45)' } }}\n >\n {/* HEAD */}\n <div className={cx('modalHead')}>\n <span className={cx('modalTitle')}>\n {mode === 'edit' ? 'Edit' : 'Add'} {tagName} tag\n </span>\n <button\n className={cx('modalCloseBtn')}\n onClick={() => setConfirmModalOpen(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n {/* CONTENT */}\n <div className={cx('modalContent')}>\n <span className={cx('modalContentText')}>\n Are you sure you want to {confirmVerb} {tagName} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('modalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setConfirmModalOpen(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={handleConfirm}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: token.colorPrimary,\n borderColor: token.colorPrimary,\n boxShadow: `0px 2px 0px ${token.colorPrimaryBg}`,\n }}\n >\n {confirmBtnLabel}\n </Button>\n </div>\n </Modal>\n </>\n )\n}\n","import React from 'react'\n\nconst RestApiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#restapi-clip)\">\n <path d=\"M14.4059 7.73805H13.2601V7.23565C13.2601 7.11607 13.1787 7.01187 13.0626 6.98294L12.2915 6.79083L11.8883 5.81794L12.2975 5.13716C12.3591 5.03469 12.343 4.90341 12.2585 4.81888L11.1795 3.73987C11.0949 3.65531 10.9636 3.63922 10.8612 3.70081L10.1804 4.11003L9.20745 3.70685L9.01534 2.9357C8.98644 2.81966 8.88222 2.73823 8.76264 2.73823H8.26032V1.59245C8.26032 1.44862 8.14373 1.33203 7.9999 1.33203C7.85607 1.33203 7.73949 1.44862 7.73949 1.59245V2.73823H7.23709C7.11751 2.73823 7.01331 2.81966 6.98438 2.9357L6.79227 3.70685L5.81938 4.11003L5.1386 3.70081C5.03607 3.63919 4.90485 3.65529 4.82032 3.73987L3.74131 4.81888C3.65675 4.90344 3.64066 5.03471 3.70225 5.13716L4.11146 5.81794L3.70829 6.79083L2.93714 6.98294C2.8211 7.01185 2.73967 7.11607 2.73967 7.23565V7.73805H1.59391C1.45008 7.73805 1.3335 7.85463 1.3335 7.99846C1.3335 8.14226 1.45008 8.25888 1.59391 8.25888H2.73969V8.76128C2.73969 8.88086 2.82113 8.98508 2.93717 9.01396L3.70831 9.20609L4.11149 10.179L3.70225 10.8598C3.64063 10.9623 3.65675 11.0935 3.74131 11.1781L4.82032 12.2571C4.90488 12.3416 5.03615 12.3577 5.13865 12.2961L5.81941 11.8869L6.79232 12.2901L6.98443 13.0612C7.01334 13.1773 7.11756 13.2587 7.23714 13.2587H7.73951V14.4045C7.73951 14.5483 7.8561 14.6649 7.99993 14.6649C8.14376 14.6649 8.26034 14.5483 8.26034 14.4045V13.2587H8.76274C8.88232 13.2587 8.98652 13.1773 9.01545 13.0612L9.20756 12.2901L10.1805 11.8869L10.8612 12.2961C10.9637 12.3577 11.095 12.3416 11.1796 12.2571L12.2586 11.1781C12.3431 11.0935 12.3592 10.9622 12.2976 10.8598L11.8884 10.179L12.2916 9.20609L13.0627 9.01396C13.1788 8.98508 13.2602 8.88086 13.2602 8.76128V8.25888H14.406C14.5498 8.25888 14.6664 8.14226 14.6664 7.99846C14.6663 7.85463 14.5497 7.73805 14.4059 7.73805ZM12.7393 8.55779L12.0382 8.73247C11.9581 8.75245 11.8922 8.80919 11.8606 8.88547L11.3569 10.1009C11.3253 10.1772 11.3318 10.264 11.3743 10.3348L11.7463 10.9537L10.9551 11.7449L10.3362 11.3729C10.2654 11.3303 10.1786 11.3239 10.1023 11.3555L8.88686 11.8592C8.81058 11.8909 8.75383 11.9567 8.73386 12.0369L8.5592 12.7379H7.44055L7.26589 12.0369C7.24592 11.9567 7.18917 11.8909 7.1129 11.8592L5.89743 11.3555C5.82113 11.3239 5.73435 11.3303 5.66355 11.3729L5.04464 11.7449L4.25342 10.9537L4.62545 10.3348C4.668 10.264 4.67443 10.1772 4.64282 10.1009L4.13912 8.88547C4.10751 8.80919 4.04159 8.75245 3.96149 8.73247L3.26045 8.55779V7.43914L3.96152 7.26448C4.04162 7.2445 4.10753 7.18776 4.13915 7.11148L4.64284 5.89602C4.67446 5.81971 4.668 5.73294 4.62548 5.66216L4.25344 5.04325L5.04467 4.25203L5.66357 4.62406C5.73435 4.66661 5.82113 4.67307 5.89743 4.64143L7.1129 4.13773C7.18917 4.10612 7.24592 4.04021 7.26589 3.9601L7.44055 3.25904H8.5592L8.73386 3.9601C8.75383 4.04021 8.81058 4.10612 8.88686 4.13773L10.1023 4.64143C10.1787 4.67305 10.2654 4.66659 10.3362 4.62406L10.9551 4.25203L11.7463 5.04325L11.3743 5.66216C11.3317 5.73294 11.3253 5.81971 11.3569 5.89602L11.8606 7.11148C11.8922 7.18776 11.9581 7.2445 12.0382 7.26448L12.7393 7.43914V8.55779Z\" fill=\"currentColor\"/>\n <path d=\"M9.14809 4.86755C9.01309 4.81807 8.86346 4.88729 8.8139 5.02229C8.76434 5.15731 8.83364 5.30692 8.96864 5.35648C10.0712 5.76114 10.8121 6.82252 10.8121 7.99757C10.8121 9.54835 9.55041 10.81 7.99965 10.81C6.4489 10.81 5.18729 9.54833 5.18729 7.99755C5.18729 6.88567 5.84426 5.87593 6.86098 5.42515C6.99247 5.36687 7.05179 5.21302 6.99348 5.08156C6.9352 4.9501 6.78132 4.89075 6.64989 4.94906C5.44505 5.48325 4.6665 6.67987 4.6665 7.99755C4.6665 9.83546 6.16176 11.3308 7.99971 11.3308C9.83765 11.3308 11.3329 9.83546 11.3329 7.99755C11.3329 6.605 10.4549 5.34713 9.14809 4.86755Z\" fill=\"currentColor\"/>\n <path d=\"M8.01348 4.66409L7.99967 4.66406C7.85585 4.66406 7.73926 4.78065 7.73926 4.92448C7.73926 5.06831 7.85585 5.1849 7.99967 5.1849L8.01194 5.18492C8.0122 5.18492 8.01246 5.18492 8.01272 5.18492C8.15618 5.18492 8.2727 5.06883 8.27314 4.92526C8.27355 4.78143 8.1573 4.6645 8.01348 4.66409Z\" fill=\"currentColor\"/>\n <path d=\"M9.81413 6.96094C9.6703 6.96094 9.55371 7.07753 9.55371 7.22135V8.73919C9.55371 8.883 9.6703 8.99961 9.81413 8.99961C9.95796 8.99961 10.0745 8.883 10.0745 8.73919V7.22133C10.0745 7.0775 9.95796 6.96094 9.81413 6.96094Z\" fill=\"currentColor\"/>\n <path d=\"M8.55132 6.96094H8.01481C7.87098 6.96094 7.75439 7.07753 7.75439 7.22135V7.74057V8.09581V8.73917C7.75439 8.88297 7.87098 8.99958 8.01481 8.99958C8.15864 8.99958 8.27523 8.88297 8.27523 8.73917V8.35622H8.55135C8.91463 8.35622 9.2102 8.06063 9.2102 7.69737V7.61979C9.21018 7.25648 8.91463 6.96094 8.55132 6.96094ZM8.68937 7.69734C8.68937 7.77346 8.62744 7.83539 8.55132 7.83539H8.2752V7.74055V7.48172H8.55132C8.62744 7.48172 8.68937 7.54365 8.68937 7.61977V7.69734Z\" fill=\"currentColor\"/>\n <path d=\"M7.47523 8.67635L6.80685 7.1187C6.76581 7.02297 6.67169 6.96094 6.56755 6.96094C6.46341 6.96094 6.3693 7.02297 6.32823 7.11867L5.65984 8.67633C5.60312 8.80849 5.6643 8.96161 5.79648 9.01831C5.92867 9.075 6.08177 9.01385 6.13849 8.88169L6.56755 7.88172L6.99664 8.88169C7.03898 8.98039 7.13508 9.0395 7.23607 9.0395C7.27031 9.0395 7.30515 9.03268 7.33862 9.01833C7.47078 8.96164 7.53195 8.80852 7.47523 8.67635Z\" fill=\"currentColor\"/>\n <path d=\"M13.7813 1.33203C13.2931 1.33203 12.896 1.72919 12.896 2.21742C12.896 2.3668 12.9333 2.50755 12.9989 2.63107L12.0025 3.62737C11.9008 3.72906 11.9008 3.89396 12.0025 3.99565C12.0534 4.04648 12.1201 4.0719 12.1867 4.0719C12.2533 4.0719 12.32 4.04648 12.3708 3.99562L13.367 2.99951C13.4907 3.06531 13.6317 3.10279 13.7813 3.10279C14.2695 3.10279 14.6667 2.70562 14.6667 2.2174C14.6667 1.72917 14.2696 1.33203 13.7813 1.33203Z\" fill=\"currentColor\"/>\n <path d=\"M3.99712 12.002C3.89542 11.9004 3.73053 11.9004 3.62886 12.002L2.6329 12.998C2.50925 12.9323 2.36837 12.8949 2.21889 12.8949C1.73066 12.8949 1.3335 13.2921 1.3335 13.7803C1.3335 14.2685 1.73066 14.6657 2.21889 14.6657C2.70712 14.6657 3.10428 14.2685 3.10428 13.7803C3.10428 13.6308 3.06688 13.4899 3.00118 13.3663L3.99714 12.3703C4.09881 12.2686 4.09881 12.1037 3.99712 12.002Z\" fill=\"currentColor\"/>\n <path d=\"M12.3711 12.0021C12.3224 11.9536 12.2552 11.9258 12.1867 11.9258C12.1182 11.9258 12.051 11.9536 12.0026 12.0021C11.9541 12.0505 11.9263 12.1177 11.9263 12.1862C11.9263 12.2547 11.9541 12.3219 12.0026 12.3703C12.051 12.4187 12.1182 12.4466 12.1867 12.4466C12.2554 12.4466 12.3224 12.4187 12.3711 12.3703C12.4195 12.3219 12.4471 12.2549 12.4471 12.1862C12.4471 12.1177 12.4195 12.0505 12.3711 12.0021Z\" fill=\"currentColor\"/>\n <path d=\"M13.7813 12.8934C13.6316 12.8934 13.4906 12.9308 13.3669 12.9967L12.927 12.5567C12.8253 12.4551 12.6604 12.455 12.5587 12.5567C12.457 12.6584 12.457 12.8233 12.5587 12.925L12.9988 13.3651C12.9332 13.4887 12.8959 13.6294 12.8959 13.7788C12.8959 14.267 13.2931 14.6642 13.7813 14.6642C14.2695 14.6642 14.6666 14.267 14.6666 13.7788C14.6666 13.2905 14.2695 12.8934 13.7813 12.8934Z\" fill=\"currentColor\"/>\n <path d=\"M3.99712 3.62737L3.00118 2.63143C3.06688 2.50779 3.10428 2.3669 3.10428 2.21742C3.10428 1.72922 2.70712 1.33203 2.21889 1.33203C1.73066 1.33203 1.3335 1.72919 1.3335 2.21742C1.3335 2.70565 1.73066 3.10281 2.21889 3.10281C2.36839 3.10281 2.50928 3.06542 2.6329 2.99971L3.62886 3.99565C3.67972 4.04651 3.74636 4.07193 3.813 4.07193C3.87964 4.07193 3.94631 4.04651 3.99714 3.99565C4.09881 3.89396 4.09881 3.72906 3.99712 3.62737Z\" fill=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"restapi-clip\">\n <rect width=\"13.3333\" height=\"13.3333\" fill=\"white\" transform=\"translate(1.3335 1.33203)\"/>\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default RestApiIcon\n","'use client'\n\nimport { ExclamationCircleOutlined, TagOutlined } from '@ant-design/icons'\nimport { Menu, Tag } from 'antd'\nimport type { MenuProps } from 'antd'\nimport RestApiIcon from '@doc-lib/assets/icons/restApi'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { methodColors } from '@doc-lib/view/helper/sidebar.utils'\nimport type { EndpointData } from '@doc-lib/view/entities'\n\nexport type EditModeSelection =\n | { type: 'general' }\n | { type: 'tags' }\n | { type: 'endpoint'; key: string }\n | { type: 'errors' }\n\ninterface EditModeSidebarProps {\n selectedItem: EditModeSelection\n onSelectItem: (item: EditModeSelection) => void\n endpoints: EndpointData[]\n hasGeneralError?: boolean\n hasSaveErrors?: boolean\n}\n\nexport const EditModeSidebar = ({ selectedItem, onSelectItem, endpoints, hasGeneralError, hasSaveErrors }: EditModeSidebarProps) => {\n const { wrapSSR, cx, token } = useStyle('EditModeSidebar', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.marginXS,\n padding: token.padding,\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadius,\n width: 320,\n minWidth: 320,\n flexShrink: 0,\n overflowY: 'auto' as const,\n },\n [scope('spec-icon')]: {\n fontSize: 16,\n color: token.colorTextSecondary,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('spec-label')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n lineHeight: '22px',\n },\n [scope('badge')]: {\n minWidth: '3.75rem',\n textAlign: 'center' as const,\n border: 'none',\n fontSize: 14,\n },\n [scope('path')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden' as const,\n textOverflow: 'ellipsis' as const,\n flex: 1,\n },\n [`${scope('root')} .ant-menu`]: {\n background: 'transparent',\n border: 'none',\n paddingInline: 0,\n },\n [`${scope('root')} .ant-menu-item`]: {\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n borderRadius: token.borderRadius,\n height: 'auto',\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n marginInline: 0,\n marginBlock: 0,\n width: '100%',\n transition: 'background-color 0.15s',\n },\n [`${scope('root')} .ant-menu-item:not(.ant-menu-item-selected):hover`]: {\n backgroundColor: token.colorFillTertiary,\n },\n [`${scope('root')} .ant-menu-item-selected`]: {\n backgroundColor: token.colorPrimaryBg,\n },\n [`${scope('root')} .ant-menu-item.error-active.ant-menu-item-selected`]: {\n backgroundColor: token.colorErrorBg,\n },\n [`${scope('root')} .ant-menu-item-group-title`]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorTextTertiary,\n lineHeight: '22px',\n paddingInline: 0,\n paddingTop: 0,\n paddingBottom: token.marginXXS,\n userSelect: 'none' as const,\n },\n [`${scope('root')} .ant-menu-item-group + .ant-menu-item-group`]: {\n marginTop: token.marginXS,\n },\n [`${scope('spec-item')}:not(:last-child)`]: {\n marginBottom: token.marginXS,\n },\n [`${scope('root')} .ant-menu-title-content`]: {\n overflow: 'hidden',\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n minWidth: 0,\n gap: 12,\n },\n [`${scope('root')} .ant-menu-item-selected ${scope('spec-label')}`]: {\n color: token.colorPrimary,\n },\n }))\n\n const selectedKeys: string[] =\n selectedItem.type === 'endpoint' ? [selectedItem.key] : [selectedItem.type]\n\n const items: MenuProps['items'] = [\n {\n type: 'group',\n label: 'Specifications',\n children: [\n hasSaveErrors && {\n key: 'errors',\n className: `${cx('spec-item')} error-active`,\n icon: (\n <span className={cx('spec-icon')} style={{ color: token.colorError }}>\n <ExclamationCircleOutlined />\n </span>\n ),\n label: (\n <span className={cx('spec-label')} style={{ color: token.colorError }}>\n Errors\n </span>\n ),\n },\n {\n key: 'general',\n className: cx('spec-item'),\n icon: (\n <span className={cx('spec-icon')} style={hasGeneralError ? { color: token.colorError } : undefined}>\n <RestApiIcon />\n </span>\n ),\n label: (\n <span className={cx('spec-label')} style={hasGeneralError ? { color: token.colorError } : undefined}>\n General\n </span>\n ),\n },\n {\n key: 'tags',\n className: cx('spec-item'),\n icon: <span className={cx('spec-icon')}><TagOutlined /></span>,\n label: <span className={cx('spec-label')}>Tags</span>,\n },\n ].filter(Boolean) as MenuProps['items'],\n },\n {\n type: 'group',\n label: 'Endpoints',\n children: endpoints.map((ep) => {\n const colors = methodColors[ep.method as keyof typeof methodColors]\n return {\n key: ep.id,\n label: (\n <>\n <Tag className={cx('badge')} style={{ backgroundColor: colors?.bg, color: colors?.color, border: 'none' }}>\n {ep.method}\n </Tag>\n <span\n className={cx('path')}\n style={{ color: selectedItem.type === 'endpoint' && selectedItem.key === ep.id ? token.colorPrimary : token.colorText }}\n >\n {ep.path}\n </span>\n </>\n ),\n }\n }),\n },\n ]\n\n const handleMenuClick: MenuProps['onClick'] = ({ key }) => {\n if (key === 'errors') onSelectItem({ type: 'errors' })\n else if (key === 'general') onSelectItem({ type: 'general' })\n else if (key === 'tags') onSelectItem({ type: 'tags' })\n else onSelectItem({ type: 'endpoint', key })\n }\n\n return wrapSSR(\n <div className={cx('root')}>\n <Menu\n mode=\"inline\"\n selectedKeys={selectedKeys}\n items={items}\n onClick={handleMenuClick}\n style={{ background: 'transparent', border: 'none' }}\n />\n </div>,\n )\n}\n","import { token } from '@doc-lib/theme/light.json'\nimport { OverviewData, EndpointData } from '../../entities'\n\nexport interface ApiNodeData extends OverviewData {}\n\nexport interface EndpointNodeData {\n endpoint: EndpointData\n api: OverviewData\n tagName: string\n parentApiId: string\n tagId?: string\n}\n\nexport interface TagNodeData {\n tagName: string\n apiData: OverviewData\n}\n\nexport type NodeData = EndpointNodeData | OverviewData | TagNodeData\n\n// Type definitions\nexport interface TreeNode {\n title: string | React.ReactNode\n key: string\n selectable?: boolean\n isLeaf?: boolean\n method?: string\n children?: TreeNode[]\n data?: NodeData\n}\n\nexport interface EndpointItemProps {\n method: string\n title: string\n cx: (className: string) => string\n isSelected?: boolean\n}\n\n// Method colors configuration\nexport const methodColors = {\n GET: {\n bg: 'transparent',\n color: token.colorPrimary,\n },\n POST: {\n bg: 'transparent',\n color: token.colorSuccess,\n },\n DELETE: {\n bg: 'transparent',\n color: token.colorError,\n },\n PUT: {\n bg: 'transparent',\n color: token.colorWarning,\n },\n PATCH: {\n bg: 'transparent',\n color: token['volcano.5'],\n },\n OPTIONS: {\n bg: 'transparent',\n color: token['geekblue.6'],\n },\n HEAD: {\n bg: 'transparent',\n color: token['purple.5'],\n },\n TRACE: {\n bg: 'transparent',\n color: token['volcano.4'],\n },\n}\n\n// Darker method colors for selected state\nexport const darkerMethodColors = {\n GET: {\n bg: token.colorPrimary,\n color: '#FFFFFF',\n },\n POST: {\n bg: token.colorSuccess,\n color: '#FFFFFF',\n },\n DELETE: {\n bg: token.colorError,\n color: '#FFFFFF',\n },\n PUT: {\n bg: token.colorWarning,\n color: '#FFFFFF',\n },\n PATCH: {\n bg: token['volcano.5'],\n color: '#FFFFFF',\n },\n OPTIONS: {\n bg: token['geekblue.6'],\n color: '#FFFFFF',\n },\n HEAD: {\n bg: token['purple.5'],\n color: '#FFFFFF',\n },\n TRACE: {\n bg: token['cyan.5'],\n color: '#FFFFFF',\n },\n}\n\nexport const sidebarMethodColors = {\n GET: { bg: token.colorPrimaryBgHover, color: token.colorPrimary },\n POST: { bg: token.colorSuccessBg, color: token.colorSuccess },\n DELETE: { bg: token.colorErrorBg, color: token.colorError },\n PUT: { bg: token.colorWarningBg, color: token.colorWarning },\n PATCH: { bg: token['volcano.1'], color: token['volcano.5'] },\n OPTIONS: { bg: token['geekblue.2'], color: token['geekblue.6'] },\n HEAD: { bg: token['purple.1'], color: token['purple.5'] },\n TRACE: { bg: token['volcano.1'], color: token['volcano.4'] },\n}\n\nexport const buildTreeDataStructure = (data: OverviewData[] | null) => {\n if (!data) return []\n return data.map((api) => {\n const tagEntries = Object.entries(api.tags)\n\n const defaultTag = tagEntries.find(([tag]) => tag.toLowerCase() === 'default')\n const nonDefaultTags = tagEntries.filter(([tag]) => tag.toLowerCase() !== 'default')\n\n const defaultEndpoints = defaultTag\n ? defaultTag[1].map((endpoint) => ({\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: 'default',\n parentApiId: api.id,\n } as EndpointNodeData,\n }))\n : []\n\n const tagNodes = nonDefaultTags.map(([tag, endpoints]) => {\n const tagId = `tag-${api.id}-${tag.replace(/\\s+/g, '-').toLowerCase()}`\n return {\n title: tag,\n key: tagId,\n selectable: true,\n data: { tagName: tag, apiData: api } as TagNodeData,\n children: endpoints.map((endpoint) => ({\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: tag,\n parentApiId: api.id,\n tagId,\n } as EndpointNodeData,\n })),\n }\n })\n\n return {\n title: api.title,\n key: api.id,\n selectable: true,\n data: api as OverviewData,\n children: [...tagNodes, ...defaultEndpoints],\n }\n })\n}\n\nexport const findNodeByKey = (nodes: TreeNode[], targetKey: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === targetKey) {\n return node\n }\n if (node.children && node.children.length > 0) {\n const found = findNodeByKey(node.children, targetKey)\n if (found) return found\n }\n }\n return null\n}\n\nexport const isApiSectionHighlighted = (\n apiKey: string,\n selectedEndpoint: { parentApiId: string } | null\n): boolean => {\n if (!selectedEndpoint) return false\n return selectedEndpoint.parentApiId === apiKey\n}\n\nexport const getAllTreeKeys = (data: TreeNode[]): string[] => {\n const keys: string[] = []\n const traverse = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n keys.push(node.key)\n if (node.children && node.children.length > 0) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return keys\n}\n\nexport const filterTreeData = (data: TreeNode[], searchText: string): TreeNode[] => {\n if (!searchText) return data\n\n const findOriginalNode = (nodes: TreeNode[], key: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === key) return node\n if (node.children) {\n const found = findOriginalNode(node.children, key)\n if (found) return found\n }\n }\n return null\n }\n\n const filterNode = (node: TreeNode): TreeNode | null => {\n let titleText = ''\n\n const originalNode = findOriginalNode(data, node.key)\n if (originalNode && typeof originalNode.title === 'string') {\n titleText = originalNode.title\n } else if (typeof node.title === 'string') {\n titleText = node.title\n }\n\n let searchableText = titleText\n if (node.isLeaf && node.method) {\n searchableText = `${node.method} ${titleText}`.toLowerCase()\n } else {\n searchableText = titleText.toLowerCase()\n }\n\n const searchLower = searchText.toLowerCase()\n const matchesSearch = searchableText.includes(searchLower)\n\n if (node.children) {\n const filteredChildren = node.children\n .map((child: TreeNode) => filterNode(child))\n .filter((child): child is TreeNode => child !== null)\n\n if (matchesSearch || filteredChildren.length > 0) {\n return { ...node, children: filteredChildren }\n }\n } else if (matchesSearch) {\n return node\n }\n\n return null\n }\n\n return data.map((node) => filterNode(node)).filter((node): node is TreeNode => node !== null)\n}\n\nexport const getParentKey = (key: string, tree: TreeNode[]): string | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some((item: TreeNode) => item.key === key)) {\n return node.key\n }\n const parent = getParentKey(key, node.children)\n if (parent) {\n return parent\n }\n }\n }\n return null\n}\n\nexport const getSidebarStyles = (token: any, scope: (name: string) => string) => ({\n [scope('sider')]: {\n backgroundColor: token.colorBgElevated,\n overflowY: 'auto' as const,\n overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: '100%',\n },\n [scope('content')]: {\n padding: token.padding,\n },\n [scope('controls')]: {\n display: 'flex',\n gap: token.marginXS,\n marginBottom: token.marginSM,\n },\n [scope('search-input')]: {\n flex: 1,\n },\n [scope('tree')]: {\n backgroundColor: 'transparent',\n width: '100%',\n '& .ant-tree-list': { width: '100%' },\n '& .ant-tree-list-holder-inner': { width: '100%' },\n '& .ant-tree-node-content-wrapper': {\n overflow: 'hidden',\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n padding: '0 !important',\n },\n '& .ant-tree-title': {\n width: '100%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n marginBlock: 'auto',\n },\n '& .ant-tree-treenode': { width: '100%', padding: 0 },\n '& .ant-tree-switcher': { backgroundColor: token.colorBgElevated },\n },\n [scope('endpoint-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n width: '100%',\n maxWidth: '100%',\n minWidth: '100%',\n paddingLeft: token.marginXS,\n paddingRight: token.marginXS,\n },\n [scope('method-tag')]: {\n width: 51,\n height: 16,\n lineHeight: '16px',\n fontSize: 12,\n textAlign: 'center' as const,\n border: 'none',\n borderRadius: 6,\n padding: '0 8px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('endpoint-text')]: {\n flex: 1,\n maxWidth: '100%',\n minWidth: 0,\n overflow: 'hidden',\n display: 'block',\n },\n [scope('tag-title')]: {\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n flex: 1,\n },\n [scope('api-title')]: {\n flex: 1,\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n paddingLeft: '4px',\n paddingRight: '4px',\n margin: 0,\n },\n})\n","import React from 'react'\nimport { Typography, Tag } from 'antd'\nimport {\n sidebarMethodColors,\n TreeNode,\n EndpointItemProps,\n darkerMethodColors,\n} from './sidebar.utils'\nimport { EndpointData } from '../../entities'\n\nconst { Text } = Typography\n\nexport const EndpointItem: React.FC<EndpointItemProps> = ({\n method,\n title,\n cx,\n isSelected = false,\n}) => {\n const colorSet = isSelected ? darkerMethodColors : sidebarMethodColors\n const methodStyle = colorSet[method as keyof typeof colorSet]\n const isPost = method?.toUpperCase() === 'POST'\n\n return (\n <div\n className={`${cx('endpoint-item')}${isSelected ? ` ${cx('endpoint-item-selected')}` : ''}`}\n >\n <Tag\n className={cx('method-tag')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n ...(isPost ? { borderRadius: 4 } : {}),\n }}\n >\n {method}\n </Tag>\n <Text className={cx('endpoint-text')} ellipsis={{ tooltip: title }} style={{ flex: 1 }}>\n {title}\n </Text>\n </div>\n )\n}\n\nexport const convertToRenderableTreeData = (\n treeDataStructure: TreeNode[],\n selectedEndpoint: EndpointData | null,\n cx: (className: string) => string\n): TreeNode[] => {\n const renderNode = (node: TreeNode): TreeNode => {\n let title: React.ReactNode\n\n if (node.isLeaf && node.method) {\n const isSelected =\n selectedEndpoint && 'data' in node && node.data && 'endpoint' in node.data\n ? (node.data as any).endpoint?.id === selectedEndpoint?.id\n : false\n\n title = (\n <EndpointItem\n method={node.method}\n title={typeof node.title === 'string' ? node.title : 'Endpoint Name'}\n cx={cx}\n isSelected={isSelected}\n />\n )\n } else if (\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n ) {\n title = (\n <Text\n className={cx('api-title')}\n ellipsis={{ tooltip: typeof node.title === 'string' ? node.title : 'API Name' }}\n >\n {node.title}\n </Text>\n )\n } else {\n title = (\n <Text\n className={cx('tag-title')}\n ellipsis={{ tooltip: typeof node.title === 'string' ? node.title : '' }}\n >\n {node.title}\n </Text>\n )\n }\n\n return {\n ...node,\n title,\n children: node.children ? node.children.map(renderNode) : undefined,\n }\n }\n\n return treeDataStructure.map(renderNode)\n}\n","'use client'\nimport React, { useState, useMemo } from 'react'\nimport { Input, Tree, Button, Flex, Tooltip, Grid } from 'antd'\nimport { MinusSquareOutlined, PlusSquareOutlined } from '@ant-design/icons'\nconst { useBreakpoint } = Grid\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useStore } from '@doc-lib/store'\nimport Minify from '@doc-lib/assets/Minify'\nimport {\n getAllTreeKeys,\n filterTreeData,\n getSidebarStyles,\n convertToRenderableTreeData,\n} from './helper'\nimport Text from 'antd/es/typography/Text'\nimport { SearchOutlined } from '@ant-design/icons'\nimport { Resizable } from 're-resizable'\nimport NoDataIcon from '../components/NoDataIcon'\n\nexport const Sidebar: React.FC<{\n searchValue: string\n setSearchValue: (text: string) => void\n onNodeSelect?: () => void\n}> = ({ searchValue, setSearchValue, onNodeSelect }) => {\n const expandedKeys = useStore((state) => state.view.expandedKeys)\n const { selectedNodeKey, selectedEndpoint, builtTreeData, setExpandedKeys, setSelectedNodeKey } =\n useStore(({ view }) => view)\n\n const { selectNodeByKey, clearSelection } = useNodeSelection()\n\n // Local state for expand/collapse\n\n const [autoExpandParent, setAutoExpandParent] = useState(true)\n\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const { wrapSSR, cx, token } = useStyle('Sidebar', getSidebarStyles)\n\n // Handle search with expansion logic\n const handleSearch = (value: string) => {\n if (value && builtTreeData) {\n // Get all keys that should be expanded when searching\n const allKeys = getAllTreeKeys(builtTreeData)\n setExpandedKeys(allKeys)\n setSearchValue(value)\n setAutoExpandParent(true)\n } else {\n // Clear search -> collapse all\n setSearchValue(value)\n setExpandedKeys([])\n setAutoExpandParent(false)\n }\n }\n\n // Convert tree data to renderable format\n const renderTreeData = useMemo(() => {\n if (!builtTreeData) return []\n return convertToRenderableTreeData(builtTreeData, selectedEndpoint, cx)\n }, [builtTreeData, selectedEndpoint, cx])\n\n // Memoize filtered tree data\n const filteredTreeData = useMemo(() => {\n if (!searchValue) return renderTreeData\n if (!builtTreeData) return []\n\n // Filter using original tree structure, then convert to renderable format\n const filteredOriginal = filterTreeData(builtTreeData, searchValue)\n\n return convertToRenderableTreeData(filteredOriginal, selectedEndpoint, cx)\n }, [builtTreeData, searchValue, selectedEndpoint, cx])\n\n // Handle collapse all\n const collapseAll = () => {\n setExpandedKeys([])\n }\n\n const onTreeNodeSelect = (selectedKeys: React.Key[]) => {\n const stringKeys = selectedKeys.map((key) => String(key))\n\n if (stringKeys.length === 0) {\n clearSelection()\n return\n }\n\n if (!builtTreeData) return\n\n const selectedKey = stringKeys[0]\n selectNodeByKey(selectedKey)\n setSelectedNodeKey(selectedKey)\n }\n\n const inner = (\n <div className={cx('content')}>\n <div className={cx('controls')}>\n <Tooltip title=\"Search by APIs or Endpoints\" placement=\"bottom\">\n <Input\n placeholder=\"Search by APIs or Endpoints\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n allowClear\n className={cx('search-input')}\n addonAfter={<SearchOutlined />}\n />\n </Tooltip>\n <Tooltip title=\"Collapse All\" placement=\"bottom\">\n <Button onClick={collapseAll} title=\"Collapse All\" icon={<Minify />} />\n </Tooltip>\n </div>\n {filteredTreeData?.length ? (\n <Tree\n showLine={{ showLeafIcon: false }}\n showIcon={false}\n switcherIcon={(nodeProps: { expanded?: boolean; isLeaf?: boolean }) =>\n nodeProps.isLeaf ? null : nodeProps.expanded ? (\n <MinusSquareOutlined style={{ fontSize: 12 }} />\n ) : (\n <PlusSquareOutlined style={{ fontSize: 12 }} />\n )\n }\n expandedKeys={expandedKeys}\n autoExpandParent={autoExpandParent}\n selectedKeys={[selectedNodeKey || '']}\n onSelect={(selectedKeys) => {\n // Don't allow to deselect a node\n if (!selectedKeys?.length) return\n onTreeNodeSelect(selectedKeys)\n setSelectedNodeKey(selectedKeys[0] as string)\n onNodeSelect?.()\n }}\n onExpand={(expandedKeysValue) => {\n setExpandedKeys(expandedKeysValue as string[])\n setAutoExpandParent(false)\n }}\n treeData={filteredTreeData}\n className={cx('tree')}\n />\n ) : (\n <Flex\n justify=\"center\"\n align=\"center\"\n gap={token.marginSM}\n vertical\n style={{ marginTop: token.paddingXL }}\n >\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'10.375rem'}\n height={'8.1875rem'}\n />\n {searchValue.length ? (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n }}\n >\n No results found\n </Text>\n ) : (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n }}\n >\n No API\n <br />\n Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n )\n\n if (isMobile) {\n return wrapSSR(\n <aside className={cx('sider')} style={{ height: '100%' }}>\n {inner}\n </aside>\n )\n }\n\n return wrapSSR(\n <Resizable\n as={'aside'}\n minWidth={isMobile ? 180 : 300}\n maxWidth={386}\n enable={{\n top: false,\n right: true,\n bottom: false,\n left: false,\n topRight: false,\n bottomRight: false,\n bottomLeft: false,\n topLeft: false,\n }}\n defaultSize={{ width: isMobile ? 225 : 333, height: 'auto' }}\n className={cx('sider')}\n >\n {inner}\n </Resizable>\n )\n}\n","'use client'\nimport React, { useState, useEffect } from 'react'\nimport { Typography, Table, Tag, Card, Breadcrumb, Button, Tabs, theme, Tooltip } from 'antd'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { LeftOutlined } from '@ant-design/icons'\nimport useStore from '@doc-lib/store'\nimport { sidebarMethodColors } from '../helper'\nimport { handleStatusColor } from '@doc-lib/utils'\n\nconst { Title, Paragraph } = Typography\n\nconst MAX_VISIBLE_ENUMS = 2\n\nconst renderEnumTags = (enums: string[], token: any) => {\n const tagStyle = {\n background: token.colorFillAlter,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadiusSM,\n }\n if (enums.length <= MAX_VISIBLE_ENUMS) {\n return (\n <span style={{ display: 'flex', flexWrap: 'wrap', gap: token.marginXXS }}>\n {enums.map((e) => <Tag key={e} style={tagStyle}>{e}</Tag>)}\n </span>\n )\n }\n const visible = enums.slice(0, MAX_VISIBLE_ENUMS)\n const hidden = enums.slice(MAX_VISIBLE_ENUMS)\n return (\n <span style={{ display: 'flex', flexWrap: 'wrap', gap: token.marginXXS }}>\n {visible.map((e) => <Tag key={e} style={tagStyle}>{e}</Tag>)}\n <Tooltip title={hidden.join(', ')}>\n <Tag style={{ ...tagStyle, cursor: 'pointer' }}>+{hidden.length}</Tag>\n </Tooltip>\n </span>\n )\n}\n\n// Table column definitions\nconst requestColumns = [\n { title: 'Parameter', dataIndex: 'param', key: 'param' },\n { title: 'Description', dataIndex: 'desc', key: 'desc' },\n { title: 'Enum', dataIndex: 'enum', key: 'enum' },\n]\n\nconst responseColumns = [...requestColumns]\n\n// Helper to build table rows from OpenAPI params\nconst buildRequestData = (params: any[], token: any) =>\n [...params]\n .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map((p, index) => {\n let typeLabel = p.schema?.type\n if (p.schema?.type === 'array' && p.schema?.items?.type) {\n typeLabel = `${p.schema.type}_${p.schema.items.type}`\n }\n\n return {\n key: index,\n param: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <Tooltip title={p.name} placement=\"bottom\">\n <span style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}>\n {p.name}\n </span>\n </Tooltip>\n {typeLabel && (\n <span\n style={{\n color: token.colorTextTertiary,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {p.required ? (\n <span style={{ color: token.colorError }}>*</span>\n ) : (\n <span style={{ color: token.colorSuccess }}>Optional</span>\n )}\n </span>\n ),\n desc: (\n <Tooltip title={p.description || '--'} placement=\"bottom\">\n <span style={{\n display: 'inline-block',\n maxWidth: 300,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}>\n {p.description || '--'}\n </span>\n </Tooltip>\n ),\n enum: p.schema?.enum ? renderEnumTags(p.schema.enum, token) : '--',\n }\n })\n\n// Build response rows from headers\nconst buildHeaderData = (headers: any, token: any) => {\n if (!headers) return []\n return Object.entries(headers)\n .sort(([, a]: any, [, b]: any) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map(([name, header]: any, idx) => {\n let typeLabel = header.schema?.type\n if (header.schema?.type === 'array' && header.schema?.items?.type) {\n typeLabel = `${header.schema.type}_${header.schema.items.type}`\n }\n\n return {\n key: idx,\n param: (\n <span key={idx} style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <Tooltip title={name} placement=\"bottom\">\n <span style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}>\n {name}\n </span>\n </Tooltip>\n {typeLabel && (\n <span\n style={{\n color: token.colorTextTertiary,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {header.required ? (\n <span style={{ color: token.colorError }}>*</span>\n ) : (\n <span style={{ color: token.colorSuccess }}>Optional</span>\n )}\n </span>\n ),\n desc: header.description || '--',\n enum: header.schema?.enum ? renderEnumTags(header.schema.enum, token) : '--',\n }\n })\n}\n\nexport const EndpointPage: React.FC = () => {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n setSelectedNodeKey,\n setFocusedContent,\n setFocusedTag,\n setActiveRequestTab,\n } = useStore(({ view }) => view)\n const [activeTabKey, setActiveTabKey] = useState<string>('header')\n\n const { token } = theme.useToken()\n\n const { cx } = useStyle('EndpointPage', (token, scope) => ({\n [scope('docs-endpoint-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n },\n [scope('content')]: {\n width: '100%',\n },\n [scope('code')]: {\n background: 'unset',\n borderRadius: token.borderRadius,\n padding: token.paddingSM,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n },\n [scope('breadcrumb')]: {\n display: 'flex',\n gap: token.marginLG,\n alignItems: 'center',\n marginBottom: token.marginLG,\n },\n [scope('request-card')]: {\n borderRadius: token.borderRadius,\n backgroundColor: token.colorBgBase,\n '.ant-card-head': {\n minHeight: 'unset',\n borderBottom: 'unset',\n padding: '0.75rem',\n backgroundColor: token.colorBgBase,\n },\n '.ant-card-body': {\n padding: '0px 0.75rem 0.75rem 0.75rem',\n backgroundColor: token.colorBgBase,\n '.ant-tabs-tab': {\n paddingTop: '0',\n },\n },\n '& .ant-table': {\n backgroundColor: `${token.colorBgBase} !important`,\n },\n '& .ant-table-thead > tr > th': {\n backgroundColor: `${token.colorBgBase} !important`,\n },\n },\n [scope('row-odd')]: {\n '& > td': { background: `${token.colorBgElevated} !important` },\n },\n [scope('row-even')]: {\n '& > td': { background: `${token.colorBgLayout} !important` },\n },\n }))\n\n const methodStyle =\n sidebarMethodColors[selectedEndpoint?.method as keyof typeof sidebarMethodColors]\n const headerParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'header') || [],\n token\n )\n const pathParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'path') || [],\n token\n )\n const queryParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'query') || [],\n token\n )\n type RequestTab = { key: string; label: string; children: any }\n\n const requestTabs: RequestTab[] = [\n {\n key: 'header',\n label: 'Header',\n children: (\n <Table\n columns={requestColumns}\n dataSource={headerParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n {\n key: 'path',\n label: 'Path',\n children: (\n <Table\n columns={requestColumns}\n dataSource={pathParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n {\n key: 'query',\n label: 'Query',\n children: (\n <Table\n columns={requestColumns}\n dataSource={queryParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n ].filter((t): t is RequestTab => t !== null)\n\n // Reset to the first tab whenever the selected endpoint changes, and push to Zustand\n // so CodeboxSidebar can conditionally show the curl panel.\n useEffect(() => {\n const firstKey = requestTabs[0]?.key ?? 'header'\n setActiveTabKey(firstKey)\n setActiveRequestTab(firstKey)\n }, [selectedEndpoint?.id])\n\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode || 200]\n const responseHeaders = responseObj?.headers\n\n const responseHeaderData = buildHeaderData(responseHeaders, token)\n\n return (\n <div className={cx('docs-endpoint-container')}>\n {/* Main Content */}\n <div className={cx('content')}>\n {/* Header */}\n <div className={cx('breadcrumb')}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n icon={<LeftOutlined />}\n onClick={(e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n }}\n ></Button>\n\n <Breadcrumb\n items={[\n {\n href: '',\n title: <span>{selectedApi?.title || 'API Name'}</span>,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n },\n },\n {\n href: ``,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n setFocusedTag(selectedEndpoint?.tagName || 'default')\n },\n title: (\n <p\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: token.colorTextTertiary,\n gap: '0.25rem',\n }}\n >\n <span>{selectedEndpoint?.tagName || 'default'}</span>\n </p>\n ),\n },\n {\n title: (\n <Tooltip title={selectedEndpoint?.summary || 'Endpoint Name'}>\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n display: 'block',\n maxWidth: '300px',\n }}\n >\n {selectedEndpoint?.summary || 'Endpoint Name'}\n </span>\n </Tooltip>\n ),\n },\n ]}\n />\n </div>\n <Title level={3} style={{ display: 'flex', alignItems: 'center', gap: 12, margin: 0 }}>\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n width: '4.375rem',\n height: '1.375rem',\n textAlign: 'center',\n flexShrink: 0,\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n <Tooltip title={selectedEndpoint?.summary ?? '--'}>\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {selectedEndpoint?.summary?.replace(selectedEndpoint?.method, '') ?? '--'}\n </span>\n </Tooltip>\n </Title>\n {/* <Paragraph>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <Select\n value={selectedServer}\n style={{ width: '100%' }}\n onChange={(value) => setSelectedServer(value)}\n prefix={\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n }\n options={serverOptions}\n disabled={serverOptions.length === 0}\n suffixIcon={serverOptions.length > 1 ? undefined : false}\n />\n <Tooltip title={endpointTooltip}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n onClick={() => {\n const fullUrl = getFullEndpointUrl()\n if (fullUrl) {\n copyToClipboard(fullUrl)\n setEndpointTooltip('Copied!')\n setTimeout(() => setEndpointTooltip('Copy endpoint'), 1500)\n }\n }}\n icon={<CopyOutlined />}\n />\n </Tooltip>\n </div>\n </Paragraph> */}\n <Paragraph style={{ color: token.colorTextTertiary, marginBottom: '1.5rem' }}>\n {selectedEndpoint?.description ?? '--'}\n </Paragraph>\n\n {/* Request Section */}\n {requestTabs.length > 0 && (\n <Card\n title=\"Request\"\n className={cx('request-card')}\n style={{ marginBottom: '1.5rem', backgroundColor: token.colorBgBase }}\n styles={{ body: { backgroundColor: token.colorBgBase } }}\n >\n <Tabs\n activeKey={activeTabKey}\n onChange={(key) => {\n setActiveTabKey(key)\n setActiveRequestTab(key)\n }}\n items={requestTabs}\n />\n </Card>\n )}\n\n {/* Response Section */}\n\n <Card\n title=\"Response\"\n className={cx('request-card')}\n extra={\n responseHeaderData.length > 0 && (\n <Tag>\n <span\n style={{\n background: handleStatusColor(selectedStatusCode as number),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n marginRight: '0.5rem',\n }}\n ></span>\n <span>{selectedStatusCode}</span>\n </Tag>\n )\n }\n >\n <Table\n columns={responseColumns}\n dataSource={responseHeaderData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n </Card>\n </div>\n </div>\n )\n}\n","'use client'\nimport React from 'react'\nimport { useStyle } from '../../hooks/useStyle'\nimport { APIPage } from '../components/ApiPage'\nimport { EndpointPage } from './EndpointPage/EndpointPage'\nimport useStore from '@doc-lib/store'\nimport { Button, Flex } from 'antd'\nimport NoDataIcon from '../components/NoDataIcon'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport MouseSquareIcon from '@doc-lib/assets/mouseSquare'\nimport type { OverviewData } from '@doc-lib/view/entities'\n\nexport const MainContent: React.FC<{\n searchEnabled: boolean\n handleResetSearch: () => void\n handleVisitLandingPage?: () => void\n apiOverride?: OverviewData | null\n}> = ({ searchEnabled, handleResetSearch, handleVisitLandingPage, apiOverride }) => {\n const { focusedContent, transformedData } = useStore(({ view }) => view)\n const { wrapSSR, cx, token } = useStyle('MainContent', (token, scope) => ({\n [scope('inner-doc-container')]: {\n minWidth: 0,\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n },\n [scope('centered')]: {\n display: 'flex',\n justifyContent: 'center',\n },\n [scope('no-space')]: {\n margin: 0,\n padding: 0,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n fontWeight: 600,\n fontSize: token.fontSizeHeading4,\n color: token.colorText,\n },\n [scope('text')]: {\n color: token.colorText,\n fontFamily: token.fontFamily,\n },\n [scope('visit-landing-button')]: {\n width: '12.25rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n },\n [scope('reset-button')]: {\n width: '8.125rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n backgroundColor: token?.Button?.primaryColor,\n fontSize: token.Button?.contentFontSizeLG,\n },\n }))\n\n return wrapSSR(\n <div\n className={cx('inner-doc-container', !transformedData?.length ? 'centered' : '')}\n style={{\n backgroundColor: focusedContent === 'ENDPOINT' ? token.colorBgBase : token.colorBgElevated,\n }}\n >\n {!transformedData?.length ? (\n <Flex justify=\"center\" align=\"center\" gap={'1.5rem'} vertical flex={1}>\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'18.625rem'}\n height={'14.75rem'}\n />\n <Flex justify=\"center\" align=\"center\" gap={'0.5rem'} vertical>\n <Title className={cx('no-space', 'title')} level={4}>\n {!searchEnabled ? 'No API Documentation Found' : 'No results found'}\n </Title>\n <Text className={cx('no-space', 'text')}>\n {!searchEnabled\n ? 'No API Documentation has been added yet. Contact admin for support.'\n : 'Adjust your Search and try again'}\n </Text>\n </Flex>\n {!searchEnabled ? (\n <Button\n type=\"primary\"\n onClick={handleVisitLandingPage}\n icon={<MouseSquareIcon />}\n iconPosition=\"start\"\n className={cx('visit-landing-button')}\n >\n Visit Landing Page\n </Button>\n ) : (\n <Button type=\"default\" className={cx('reset-button')} onClick={handleResetSearch}>\n Reset Search\n </Button>\n )}\n </Flex>\n ) : focusedContent === 'ENDPOINT' ? (\n <EndpointPage />\n ) : (\n <APIPage apiOverride={apiOverride} />\n )}\n </div>\n )\n}\n","import React from 'react'\n\nconst Copy = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M7.39967 15.1673H4.59967C1.99301 15.1673 0.833008 14.0073 0.833008 11.4007V8.60065C0.833008 5.99398 1.99301 4.83398 4.59967 4.83398H7.39967C10.0063 4.83398 11.1663 5.99398 11.1663 8.60065V11.4007C11.1663 14.0073 10.0063 15.1673 7.39967 15.1673ZM4.59967 5.83398C2.53301 5.83398 1.83301 6.53398 1.83301 8.60065V11.4007C1.83301 13.4673 2.53301 14.1673 4.59967 14.1673H7.39967C9.46634 14.1673 10.1663 13.4673 10.1663 11.4007V8.60065C10.1663 6.53398 9.46634 5.83398 7.39967 5.83398H4.59967Z\" fill=\"currentcolor\" />\n <path d=\"M11.3997 11.1673H10.6663C10.393 11.1673 10.1663 10.9407 10.1663 10.6673V8.60065C10.1663 6.53398 9.46634 5.83398 7.39967 5.83398H5.33301C5.05967 5.83398 4.83301 5.60732 4.83301 5.33398V4.60065C4.83301 1.99398 5.99301 0.833984 8.59967 0.833984H11.3997C14.0063 0.833984 15.1663 1.99398 15.1663 4.60065V7.40065C15.1663 10.0073 14.0063 11.1673 11.3997 11.1673ZM11.1663 10.1673H11.3997C13.4663 10.1673 14.1663 9.46732 14.1663 7.40065V4.60065C14.1663 2.53398 13.4663 1.83398 11.3997 1.83398H8.59967C6.53301 1.83398 5.83301 2.53398 5.83301 4.60065V4.83398H7.39967C10.0063 4.83398 11.1663 5.99398 11.1663 8.60065V10.1673Z\" fill=\"currentcolor\" />\n </svg>\n)\n\nexport default Copy\n","import { useState } from 'react'\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport json from 'react-syntax-highlighter/dist/esm/languages/hljs/json'\nimport * as hljs from 'react-syntax-highlighter/dist/esm/styles/hljs'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { theme as antdTheme } from 'antd'\n\nSyntaxHighlighter.registerLanguage('json', json)\n\nconst Codebox = ({\n code,\n language,\n wrapLongLines,\n}: {\n code: string\n language?: string\n wrapLongLines?: boolean\n}) => {\n const [appTheme] = useState<'LIGHT' | 'DARK'>('DARK')\n const { token, theme: themeConfig } = antdTheme.useToken()\n const isDark = themeConfig.id == 1\n const bodyBg = isDark ? token.colorBgContainer : '#1d2856'\n const { cx } = useStyle('codeBox', (token, scope) => ({\n [scope('codebox')]: {\n borderRadius: token.borderRadius,\n },\n }))\n\n return (\n <div className={cx('codebox')}>\n <SyntaxHighlighter\n language={language || 'json'}\n style={appTheme === 'LIGHT' ? hljs.stackoverflowLight : hljs.stackoverflowDark}\n showLineNumbers\n wrapLines\n wrapLongLines={wrapLongLines}\n customStyle={{\n margin: 0,\n minHeight: '3rem',\n padding: '0.75rem 1rem 0.75rem 1.5rem',\n backgroundColor: bodyBg,\n fontSize: '0.75rem',\n }}\n lineProps={{\n style: { fontFamily: 'Cascadia Code, sans-serif' },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n )\n}\n\nexport default Codebox\n","import useStore from '@doc-lib/store'\nimport { handleStatusColor } from '@doc-lib/utils'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { Button, Select, Tooltip, Typography, theme as antdTheme } from 'antd'\nimport { useMemo, useState } from 'react'\nimport Codebox from './EndpointPage/Codebox/Codebox'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { token as tokens } from '@doc-lib/theme/light.json'\n\nfunction CodeboxSidebar() {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n statusCodeOptions,\n setSelectedStatusCode,\n } = useStore(({ view }) => view)\n const httpStatusOptions = useMemo(\n () =>\n statusCodeOptions.map((code) => ({\n value: code,\n label: (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span\n style={{\n background: handleStatusColor(code),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n minWidth: '0.5rem',\n minHeight: '0.5rem',\n }}\n />\n {code}\n </span>\n ),\n })),\n [statusCodeOptions]\n )\n\n const [curlTooltip, setCurlTooltip] = useState('Copy Request')\n // x-curls is stored on selectedApi.curl by transformOpenApiToDocs (mutate.ts).\n // Match by path and method (case-insensitive) against the selected endpoint.\n const curlCommand: string = (() => {\n if (!selectedEndpoint || !Array.isArray(selectedApi?.curl)) return ''\n const entry = (selectedApi.curl as any[]).find(\n (c: any) =>\n c.path === selectedEndpoint.path &&\n c.method?.toUpperCase() === selectedEndpoint.method.toUpperCase()\n )\n return entry?.curlCommand ?? ''\n })()\n\n // Build curl display lines directly from endpoint parameters — no string splitting.\n // line 1 → curl --location 'serverUrl + resolvedPath + ?queryParams'\n // line 2+ → --header 'name: sample-value' (one per header param)\n const curlLines: string[] = (() => {\n if (!selectedEndpoint) return []\n const params = selectedEndpoint.parameters ?? []\n const serverUrl = selectedApi?.servers?.[0]?.url ?? ''\n\n const resolvedPath = params\n .filter((p) => p.in === 'path')\n .reduce((acc, p) => acc.replace(`{${p.name}}`, 'sample-value'), selectedEndpoint.path)\n\n const queryParams = params.filter((p) => p.in === 'query')\n const qs =\n queryParams.length > 0 ? '?' + queryParams.map((p) => `${p.name}=sample-value`).join('&') : ''\n\n const line1 = `curl --location '${serverUrl}${resolvedPath}${qs}'`\n\n const headerLines = params\n .filter((p) => p.in === 'header')\n .map((p) => `--header '${p.name}: sample-value'`)\n\n return [line1, ...headerLines]\n })()\n\n\n const { token: antdToken, theme: themeConfig } = antdTheme.useToken()\n const isDark = themeConfig.id == 1\n const headerBg = isDark ? antdToken.colorBgElevated : '#1d2856'\n const bodyBg = isDark ? antdToken.colorBgContainer : '#1d2856'\n const codeTextColor = isDark ? 'rgba(255,255,255,0.85)' : '#ffffff'\n\n const { cx } = useStyle('CodeboxSidebar', (token, scope) => ({\n [scope('container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n padding: token.paddingLG,\n height: 'auto',\n width: '23.625rem',\n minWidth: '23.625rem',\n '.ant-card-body': { padding: 0 },\n '.ant-card-head-title': { color: 'white' },\n '.ant-card-head': { borderBottom: '.125rem solid #33419A' },\n },\n\n [scope('rightCard')]: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: headerBg,\n border: `1px solid ${token.colorBorder}`,\n '.CodeboxSidebar-copyButton': { '.isolated-btn-icon': { path: { fill: 'white' } } },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n borderTop: '.125rem solid #33419A',\n },\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n },\n [scope('rightCardRequest')]: {\n minHeight: '8.125rem',\n },\n [scope('rightCardHeaderResponse')]: {\n padding: `0 ${token.margin}px ${token.marginXS}px ${token.margin}px`,\n },\n [scope('rightCardResponse')]: {\n height: 'fit-content',\n overflow: 'hidden',\n '.isolated-card-body': {\n display: 'flex',\n padding: `0 ${token.margin}px`,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '10px',\n alignSelf: 'stretch',\n },\n },\n [scope('rightCardHeader')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginXS}px ${token.margin}px`,\n borderBottom: `1px solid ${token.colorBorderSecondary}`,\n height: '3.125rem',\n backgroundColor: headerBg,\n },\n [scope('rightCardFlex')]: {\n display: 'flex',\n flexDirection: 'column',\n height: 'fit-content',\n overflow: 'auto',\n backgroundColor: bodyBg,\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n '.ant-card-body': {\n flex: '1 1 auto',\n overflowY: 'auto',\n padding: '.125rem 0 0 0 !important',\n },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n height: 'fit-content',\n overflow: 'auto',\n borderTop: '.125rem solid #33419A',\n '.codebox': { height: 'fit-content', overflow: 'auto' },\n },\n },\n\n [scope('customSelect')]: {\n width: '5.5rem',\n maxWidth: '5.5rem',\n\n '.ant-select-selector': {\n backgroundColor: '#fff',\n borderColor: '#fff',\n borderRadius: '.375rem',\n color: '#101010',\n },\n '.ant-select-selection-item': {\n color: '#101010',\n fontWeight: 400,\n },\n '.ant-select-selection-placeholder': {\n color: 'rgba(255, 255, 255, 0.65)',\n },\n '.ant-select-arrow': {\n color: '#101010',\n },\n '&:hover .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n '&:focus .ant-select-selector, &.ant-select-focused .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n },\n [scope('curl-list')]: {\n margin: 0,\n padding: '0.75rem 1rem',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n backgroundColor: bodyBg,\n },\n [scope('curl-line')]: {\n fontFamily: 'Cascadia Code, monospace',\n fontSize: '0.75rem',\n color: codeTextColor,\n wordBreak: 'break-all' as const,\n },\n }))\n\n return (\n <div className={cx('container')}>\n {/* Request codebox — always visible when endpoint has any header/path/query parameters, or curlCommand exists from x-curls */}\n {(curlCommand) && (\n <div className={cx('rightCard', 'rightCardRequest')}>\n <div className={cx('rightCardHeader')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Request\n </Typography.Text>\n {curlCommand && (\n <Tooltip title={curlTooltip}>\n <Button\n color=\"default\"\n variant=\"link\"\n className={cx('copyButton')}\n onClick={() => {\n navigator.clipboard.writeText(curlCommand)\n setCurlTooltip('Copied!')\n setTimeout(() => setCurlTooltip('Copy cURL'), 1500)\n }}\n icon={<CopyOutlined style={{ color: 'white' }} />}\n />\n </Tooltip>\n )}\n </div>\n <div className={cx('curl-list')}>\n {curlLines.map((line, i) => (\n <div key={i} className={cx('curl-line')}>\n {line}\n </div>\n ))}\n </div>\n </div>\n )}\n {/* Response codebox */}\n {selectedEndpoint?.responses && httpStatusOptions.length > 0 && (\n <div className={cx('rightCard', 'rightCardResponse')}>\n <div className={cx('rightCardHeader', 'rightCardHeaderResponse')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Response\n </Typography.Text>\n <Select\n defaultActiveFirstOption={true}\n defaultValue={200}\n className={cx('customSelect')}\n prefix={false}\n style={{ width: '100%' }}\n value={selectedStatusCode}\n onChange={setSelectedStatusCode}\n options={httpStatusOptions}\n open={httpStatusOptions.length === 1 ? false : undefined}\n suffixIcon={httpStatusOptions.length > 1 ? undefined : false}\n />\n </div>\n <Codebox\n code={\n JSON.stringify(selectedEndpoint?.responses[selectedStatusCode as number], null, 2) ||\n ''\n }\n />\n </div>\n )}\n </div>\n )\n}\n\nexport default CodeboxSidebar\n","import { RequestBody, HTTPMethod, OpenAPIFile, Responses, Schema } from '@doc-lib/types/OpenApi'\nimport { OverviewData, EndpointData } from '../entities'\n\n/**\n * Simple deterministic string hash (djb2 variant).\n * Produces a stable, short base-36 hash for the same input.\n */\nconst stableHash = (input: string): string => {\n let hash = 5381\n for (let i = 0; i < input.length; i++) {\n hash = ((hash << 5) + hash) + input.charCodeAt(i)\n }\n return (hash >>> 0).toString(36)\n}\n\nconst resolveSchema = (\n schema: Schema | undefined,\n components: OpenAPIFile['components']\n): Schema | undefined => {\n if (!schema) return undefined\n if (!schema.$ref) return schema\n\n const refName = schema.$ref.split('/').pop()!\n const resolved = components?.schemas?.[refName]\n if (!resolved) return schema\n\n return resolveSchema(resolved as Schema, components)\n}\n\nexport const transformOpenApiToDocs = (api: OpenAPIFile): OverviewData => {\n const groupedPathsByTags: Record<string, EndpointData[]> = {}\n const validTags = new Set(api?.tags?.map(({ name }) => name) || [])\n const contextPath = Object.keys(api.paths)[0]\n const relatedVersions =\n 'x-related-versions' in api\n ? Object.entries(api['x-related-versions']).map(([apiId, version]) => ({ apiId, version }))\n : []\n relatedVersions.unshift({ apiId: api['x-current-version'], version: `${api.info.version}` })\n const currentVersion: string =\n 'x-current-version' in api ? (api['x-current-version'] as string) : ''\n const authScheme = api.components?.securitySchemes\n let authType: string\n if (authScheme && Object.keys(authScheme)?.[0]) {\n authType = Object.keys(authScheme)[0]\n if (authType && authType.toLowerCase() === 'public') {\n authType = 'KEYLESS'\n }\n if (authType && (authType.toLowerCase() === 'oauth' || authType.toLowerCase() === 'oauth2')) {\n authType = 'OAUTH2'\n }\n authType = authType.toUpperCase()\n } else {\n authType = 'x-auth-type' in api ? (api['x-auth-type'] as string) : ''\n }\n const curl: string = 'x-curls' in api ? (api['x-curls'] as any) : ''\n const jwsEnabled = api['x-jws-enabled'] === true\n\n for (const [path, methods] of Object.entries(api.paths)) {\n for (const [method, methodData] of Object.entries(methods)) {\n const entry = { ...methodData, method: method?.toUpperCase() as HTTPMethod, path }\n if (entry.requestBody?.content) {\n const resolvedContent: RequestBody['content'] = {}\n for (const [contentType, contentValue] of Object.entries(entry.requestBody.content)) {\n resolvedContent[contentType] = {\n schema: resolveSchema(contentValue.schema, api.components) ?? contentValue.schema,\n }\n }\n entry.requestBody = { ...entry.requestBody, content: resolvedContent }\n }\n if (entry.responses) {\n const resolvedResponses: Responses = {}\n for (const [code, responseValue] of Object.entries(entry.responses)) {\n if (responseValue.content) {\n const resolvedContent: NonNullable<Responses[string]['content']> = {}\n for (const [contentType, contentValue] of Object.entries(responseValue.content)) {\n resolvedContent[contentType] = {\n schema: resolveSchema(contentValue.schema, api.components) ?? contentValue.schema,\n }\n }\n resolvedResponses[code] = { ...responseValue, content: resolvedContent }\n } else {\n resolvedResponses[code] = responseValue\n }\n }\n entry.responses = resolvedResponses\n }\n const resourceTags = methodData.tags ?? []\n\n const matchedTags = resourceTags.filter((tag) => validTags.has(tag))\n\n if (matchedTags.length > 0) {\n matchedTags.forEach((tag) => {\n if (!groupedPathsByTags[tag]) groupedPathsByTags[tag] = []\n groupedPathsByTags[tag].push({ ...entry, id: `endpoint-${stableHash(entry.method + '-' + entry.path)}` } as EndpointData)\n })\n } else {\n if (!groupedPathsByTags.default) {\n groupedPathsByTags.default = []\n }\n groupedPathsByTags.default.push({ ...entry, id: `endpoint-${stableHash(entry.method + '-' + entry.path)}` } as EndpointData)\n }\n }\n }\n\n // Sort groupedPathsByTags so that 'default' comes last\n const sortedGroupedPathsByTags = Object.keys(groupedPathsByTags)\n .sort((a, b) => {\n if (a === 'default') return 1\n if (b === 'default') return -1\n return a.localeCompare(b)\n })\n .reduce((acc, key) => {\n acc[key] = groupedPathsByTags[key]\n return acc\n }, {} as Record<string, EndpointData[]>)\n\n return {\n ...api.info,\n id: `api-${contextPath ?? 'unknown'}`, // api prefix is used to identify what state should be changes (API | Endpoint)\n contextPath,\n tags: sortedGroupedPathsByTags,\n servers: api.servers,\n relatedVersions,\n currentVersion,\n authType,\n jwsEnabled,\n curl,\n }\n}\n","'use client'\nimport {\n ApiDocumentationBar,\n GeneralSection,\n TagsSection,\n EndpointsSection,\n UnsavedChangesBanner,\n AddTagDrawer,\n} from './components'\nimport { EditModeSidebar, type EditModeSelection } from './components/EditModeSidebar'\nimport { Sidebar } from './console/Sidebar'\nimport { MainContent } from './console/MainContent'\nimport CodeboxSidebar from './console/CodeboxSidebar'\nimport type { ParameterFormValues } from './components/ApiPage/components/AddParameterDrawer'\nimport { Button, Divider, Grid, message, Modal } from 'antd'\nimport Title from 'antd/es/typography/Title'\nimport { EditOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons'\nimport { useStyle } from '../hooks/useStyle'\nimport { useNodeSelection } from '../hooks/useNodeSelection'\nimport { OpenAPIFile, Parameter } from '@doc-lib/types/OpenApi'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport useStore from '@doc-lib/store'\nimport { transformOpenApiToDocs } from './helper/mutate'\nimport { buildTreeDataStructure } from './console/helper'\n\nexport const ConsoleDocumentationLayout = ({\n data,\n preSelectedApi,\n handleVisitLandingPage,\n onSave,\n}: {\n data: OpenAPIFile[]\n preSelectedApi?: string | null\n handleVisitLandingPage?: () => void\n onSave?: (updatedSpec: OpenAPIFile) => Promise<void> | void\n theme?: any\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [mode, setMode] = useState<'edit' | 'view'>('edit')\n const [bannerVisible, setBannerVisible] = useState(false)\n const [resetKey, setResetKey] = useState(0)\n const [generalCollapsed, setGeneralCollapsed] = useState(true)\n const [tagsCollapsed, setTagsCollapsed] = useState(true)\n const [endpointsCollapsed, setEndpointsCollapsed] = useState(false)\n const [saveConfirmModal, setSaveConfirmModal] = useState(false)\n const [resetConfirmModal, setResetConfirmModal] = useState(false)\n const [selectedEditItem, setSelectedEditItem] = useState<EditModeSelection>({ type: 'general' })\n const [errorBoxExpanded, setErrorBoxExpanded] = useState(false)\n const [localApiName, setLocalApiName] = useState('')\n const [apiNameTouched, setApiNameTouched] = useState(false)\n const [localDescription, setLocalDescription] = useState('')\n const [descriptionTouched, setDescriptionTouched] = useState(false)\n const hasApiNameError =\n apiNameTouched && (!localApiName.trim() || !/^[A-Za-z0-9_\\s-]+$/.test(localApiName.trim()))\n const hasDescriptionError = descriptionTouched && !localDescription.trim()\n const hasGeneralError = hasApiNameError || hasDescriptionError\n const [saveErrors, setSaveErrors] = useState<string[]>([])\n const [selectedUrl, setSelectedUrl] = useState('')\n const [endpointNames, setEndpointNames] = useState<Record<string, string>>({})\n const [endpointDescs, setEndpointDescs] = useState<Record<string, string>>({})\n const [endpointTags, setEndpointTags] = useState<Record<string, string[]>>({})\n const [endpointParams, setEndpointParams] = useState<Record<string, ParameterFormValues[]>>({})\n const [endpointResponseParams, setEndpointResponseParams] = useState<\n Record<string, ParameterFormValues[]>\n >({})\n const [endpointRequestBody, setEndpointRequestBody] = useState<Record<string, unknown>>({})\n const [endpointResponseBody, setEndpointResponseBody] = useState<Record<string, unknown>>({})\n const [tagDrawerState, setTagDrawerState] = useState<{\n open: boolean\n mode: 'add' | 'edit'\n initialValues?: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }\n }>({ open: false, mode: 'add' })\n const [deleteTagModal, setDeleteTagModal] = useState<{ open: boolean; tagIndex: number }>({\n open: false,\n tagIndex: -1,\n })\n const [localTags, setLocalTags] = useState<TagMeta[]>([])\n const [messageApi, contextHolder] = message.useMessage()\n\n const {\n focusedContent,\n selectedNodeKey,\n selectedApi,\n originalData,\n transformedData,\n builtTreeData,\n selectedEndpoint,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\n setSelectedApi,\n setFocusedContent,\n setExpandedKeys,\n setSelectedEndpoint,\n } = useStore(({ view }) => view)\n const { selectFirstApi, selectPreSelectedApi, clearSelection } = useNodeSelection()\n const hasInitializedRef = useRef(false)\n\n const { useBreakpoint } = Grid\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const allEndpoints = useMemo(\n () => (selectedApi ? Object.values(selectedApi.tags ?? {}).flat() : []),\n [selectedApi]\n )\n\n // Derived API object for View Mode display — combines saved selectedApi with pending local edits.\n // Never written to the Zustand store, so selectedApi baseline for hasChanges stays intact.\n const viewModeApi = useMemo(() => {\n if (!selectedApi) return null\n if (mode !== 'view') return selectedApi\n if (localApiName === selectedApi.title && localDescription === selectedApi.description) return selectedApi\n return { ...selectedApi, title: localApiName, description: localDescription }\n }, [mode, selectedApi, localApiName, localDescription])\n\n useEffect(() => {\n return () => {\n resetStore()\n }\n }, [])\n\n const resetStore = () => {\n setExpandedKeys([])\n setFocusedContent(null)\n setBuiltTreeData([])\n setTransformedData([])\n setOriginalData([])\n setSearchValue('')\n clearSelection()\n hasInitializedRef.current = false\n }\n\n useEffect(() => {\n // Initialize original data\n if (!hasInitializedRef.current && data.length > 0) {\n setOriginalData(data)\n // Transform data to documentation format\n const transformedData = data\n .map(transformOpenApiToDocs)\n .sort((a, b) => a.title.localeCompare(b.title))\n setTransformedData(transformedData)\n\n // Build tree data structure\n const builtTree = buildTreeDataStructure(transformedData)\n setBuiltTreeData(builtTree)\n\n // Reset initialization flag when new data arrives\n hasInitializedRef.current = true\n }\n }, [data, setOriginalData, setTransformedData, setBuiltTreeData])\n\n // Auto-select the first API when tree data is available\n useEffect(() => {\n if (\n builtTreeData &&\n builtTreeData.length > 0 &&\n !selectedApi &&\n !selectedNodeKey &&\n hasInitializedRef.current\n ) {\n if (!preSelectedApi) {\n selectFirstApi(builtTreeData)\n } else {\n selectPreSelectedApi(builtTreeData, preSelectedApi)\n }\n hasInitializedRef.current = false\n }\n }, [builtTreeData, selectedNodeKey, selectedApi, selectFirstApi])\n\n const { cx, token } = useStyle('APIDocumentationLayout', (token, scope) => ({\n [scope('documentation-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n height: '100%',\n },\n [scope('section')]: {\n flexShrink: 0,\n },\n [scope('section-grow')]: {\n flex: 1,\n minHeight: 0,\n },\n [scope('docs-layout')]: {\n display: 'flex',\n flex: 1,\n minHeight: 0,\n gap: token.marginLG,\n width: '100%',\n },\n [scope('content-scroll-area')]: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) auto',\n flex: 1,\n gap: token.marginLG,\n overflow: 'auto',\n minWidth: 0,\n },\n // ── Delete tag modal ───────────────────────────────────────────────────────\n ['.delete-tag-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('deleteModalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingBottom: 8,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('deleteModalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('deleteModalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('deleteModalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('deleteModalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('deleteModalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n useEffect(() => {\n setLocalApiName(selectedApi?.title || '')\n setLocalDescription(selectedApi?.description || '')\n if (selectedApi?.servers?.length) {\n setSelectedUrl(selectedApi.servers[0].url)\n }\n }, [selectedApi])\n\n interface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n }\n\n const tagMetadata = useMemo<TagMeta[]>(() => {\n if (!originalData || !selectedApi) return []\n // Find the raw OpenAPIFile whose transformed id matches selectedApi\n // The match is by contextPath — first path key in the raw file\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n const mapped: TagMeta[] =\n rawFile?.tags?.map((t) => ({\n name: t.name,\n description: t.description,\n externalDocsUrl: t.externalDocs?.url,\n externalDocsDescription: t.externalDocs?.description,\n isDefault: t.name.toLowerCase() === 'default',\n })) ?? []\n const hasDefault = mapped.some((t) => t.isDefault)\n const hasDefaultInMapped = mapped.some((t) => t.name.toLowerCase() === 'default')\n if (!hasDefault && !hasDefaultInMapped && selectedApi.tags['default']) {\n mapped.push({ name: 'default', isDefault: true })\n }\n return mapped\n }, [originalData, selectedApi])\n\n const initialEndpointResponseParams = useMemo<Record<string, ParameterFormValues[]>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, ParameterFormValues[]> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(methods as Record<string, Record<string, unknown>>).forEach(\n ([method, operation]) => {\n const params = operation?.['x-response-params']\n if (!Array.isArray(params) || params.length === 0) return\n const epId = pathMethodToId[`${path}||${method}`]\n if (!epId) return\n result[epId] = params\n .filter((p): p is Record<string, unknown> => typeof p === 'object' && p !== null)\n .map((p) => {\n const schema = p.schema as { type?: string; enum?: string[]; items?: { type?: string } } | undefined\n return {\n name: String(p.name ?? ''),\n in: (p.in as ParameterFormValues['in']) ?? 'query',\n type: (schema?.type ?? 'string') as ParameterFormValues['type'],\n required: Boolean(p.required ?? false),\n description: p.description != null ? String(p.description) : undefined,\n enum: Array.isArray(schema?.enum) ? (schema!.enum as string[]) : undefined,\n ...(schema?.items && { items: { type: schema.items.type ?? 'string' } }),\n }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointParams = useMemo<Record<string, ParameterFormValues[]>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, ParameterFormValues[]> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(methods as Record<string, { parameters?: unknown[] }>).forEach(\n ([method, operation]) => {\n const params = (operation as { parameters?: unknown[] })?.parameters\n if (!Array.isArray(params) || params.length === 0) return\n const epId = pathMethodToId[`${path}||${method}`]\n if (!epId) return\n result[epId] = params\n .filter((p): p is Record<string, unknown> => typeof p === 'object' && p !== null)\n .map((p) => {\n const schema = p.schema as { type?: string; enum?: string[]; items?: { type?: string } } | undefined\n return {\n name: String(p.name ?? ''),\n in: (p.in as ParameterFormValues['in']) ?? 'query',\n type: (schema?.type ?? 'string') as ParameterFormValues['type'],\n required: Boolean(p.required ?? false),\n description: p.description != null ? String(p.description) : undefined,\n enum: Array.isArray(schema?.enum) ? (schema!.enum as string[]) : undefined,\n ...(schema?.items && { items: { type: schema.items.type ?? 'string' } }),\n }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointRequestBody = useMemo<Record<string, unknown>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, unknown> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(\n methods as Record<\n string,\n { requestBody?: { content?: { 'application/json'?: { schema?: unknown; example?: unknown } } } }\n >\n ).forEach(([method, operation]) => {\n const schema = operation.requestBody?.content?.['application/json']?.example\n const epId = pathMethodToId[`${path}||${method}`]\n if (epId && schema) result[epId] = schema\n })\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointResponseBody = useMemo<Record<string, unknown>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, unknown> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(\n methods as Record<\n string,\n {\n responses?: Record<\n string,\n { content?: { 'application/json'?: { schema?: unknown } } }\n >\n }\n >\n ).forEach(([method, operation]) => {\n const responses = operation.responses\n if (!responses) return\n const statusCode = '200' in responses ? '200' : Object.keys(responses)[0]\n const schema = responses[statusCode]?.content?.['application/json']?.schema\n const epId = pathMethodToId[`${path}||${method}`]\n if (epId && schema) result[epId] = schema\n })\n })\n return result\n }, [originalData, selectedApi])\n\n useEffect(() => {\n setLocalTags(tagMetadata)\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setEndpointRequestBody(initialEndpointRequestBody)\n setEndpointResponseBody(initialEndpointResponseBody)\n }, [selectedApi])\n\n const hasChanges = useMemo(() => {\n if (!selectedApi) return false\n if (localApiName !== (selectedApi.title || '')) return true\n if (localDescription !== (selectedApi.description || '')) return true\n if (JSON.stringify(localTags) !== JSON.stringify(tagMetadata)) return true\n for (const [id, name] of Object.entries(endpointNames)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && name !== (ep.summary ?? '')) return true\n }\n for (const [id, desc] of Object.entries(endpointDescs)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && desc !== (ep.description ?? '')) return true\n }\n for (const [id, tags] of Object.entries(endpointTags)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && JSON.stringify(tags) !== JSON.stringify(ep.tags ?? [])) return true\n }\n if (JSON.stringify(endpointParams) !== JSON.stringify(initialEndpointParams)) return true\n if (JSON.stringify(endpointResponseParams) !== JSON.stringify(initialEndpointResponseParams))\n return true\n if (JSON.stringify(endpointRequestBody) !== JSON.stringify(initialEndpointRequestBody)) {\n console.log('hasChanges: endpointRequestBody changed', { endpointRequestBody, initialEndpointRequestBody })\n return true\n }\n if (JSON.stringify(endpointResponseBody) !== JSON.stringify(initialEndpointResponseBody)) return true\n return false\n }, [\n selectedApi,\n localApiName,\n localDescription,\n localTags,\n tagMetadata,\n allEndpoints,\n endpointNames,\n endpointDescs,\n endpointTags,\n endpointParams,\n endpointResponseParams,\n initialEndpointParams,\n initialEndpointResponseParams,\n endpointRequestBody,\n initialEndpointRequestBody,\n endpointResponseBody,\n initialEndpointResponseBody,\n ])\n\n useEffect(() => {\n setBannerVisible(hasChanges)\n }, [hasChanges])\n\n // Sync locally-edited params into selectedEndpoint (Zustand) while in view mode.\n // EndpointPage reads from selectedEndpoint.parameters and selectedEndpoint.responses[code].headers,\n // so we must keep those fields up-to-date with the local edit state.\n useEffect(() => {\n if (mode !== 'view' || !selectedEndpoint) return\n const epId = selectedEndpoint.id\n\n // Read endpoint name/description/tags from local edit state\n const localName = endpointNames[epId]\n const localDesc = endpointDescs[epId]\n const localEpTags = endpointTags[epId]\n\n const patchedSummary =\n localName !== undefined && localName !== selectedEndpoint.summary ? localName : selectedEndpoint.summary\n const patchedDesc =\n localDesc !== undefined && localDesc !== selectedEndpoint.description ? localDesc : selectedEndpoint.description\n const patchedTags =\n localEpTags !== undefined &&\n JSON.stringify(localEpTags) !== JSON.stringify(selectedEndpoint.tags ?? [])\n ? localEpTags\n : selectedEndpoint.tags\n\n // Convert ParameterFormValues → OpenAPI Parameter\n const localRequestParams = endpointParams[epId] ?? []\n const openApiParams: Parameter[] = localRequestParams.map((p) => ({\n name: p.name,\n in: p.in,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n schema: {\n type: p.type,\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n },\n }))\n\n // Convert response ParameterFormValues → OpenAPI headers map (name → header object)\n const localResponseParams = endpointResponseParams[epId] ?? []\n const responseHeadersMap = localResponseParams.reduce<Record<string, unknown>>((acc, p) => {\n acc[p.name] = {\n schema: { type: p.type, ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}) },\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n }\n return acc\n }, {})\n\n // Patch all response status codes with the local response params as headers.\n const patchedResponses = Object.fromEntries(\n Object.entries(selectedEndpoint.responses ?? {}).map(([code, resp]) => [\n code,\n {\n ...resp,\n headers: Object.keys(responseHeadersMap).length > 0 ? responseHeadersMap : resp.headers,\n },\n ])\n ) as typeof selectedEndpoint.responses\n\n // Anti-loop guard: skip if ALL fields already match\n const alreadyInSync =\n selectedEndpoint.summary === patchedSummary &&\n selectedEndpoint.description === patchedDesc &&\n JSON.stringify(selectedEndpoint.tags ?? []) === JSON.stringify(patchedTags ?? []) &&\n JSON.stringify(selectedEndpoint.parameters ?? []) === JSON.stringify(openApiParams) &&\n JSON.stringify(selectedEndpoint.responses) === JSON.stringify(patchedResponses)\n\n if (alreadyInSync) return\n\n setSelectedEndpoint({\n ...selectedEndpoint,\n summary: patchedSummary,\n description: patchedDesc,\n tags: patchedTags,\n parameters: openApiParams,\n responses: patchedResponses,\n })\n }, [mode, selectedEndpoint, endpointNames, endpointDescs, endpointTags, endpointParams, endpointResponseParams, setSelectedEndpoint])\n\n const handleAddTag = (tag: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }) => {\n const newTag: TagMeta = {\n name: tag.name,\n description: tag.description,\n externalDocsUrl: tag.externalDocsLink,\n externalDocsDescription: tag.externalDocsDescription,\n isDefault: false,\n }\n setLocalTags((prev) => [...prev, newTag])\n setBannerVisible(true)\n }\n\n const handleUpdateTag = (updatedTag: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }) => {\n const originalName = tagDrawerState.initialValues?.name\n setLocalTags((prev) =>\n prev.map((t) =>\n t.name === originalName\n ? {\n ...t,\n name: updatedTag.name,\n description: updatedTag.description,\n externalDocsUrl: updatedTag.externalDocsLink,\n externalDocsDescription: updatedTag.externalDocsDescription,\n }\n : t\n )\n )\n setBannerVisible(true)\n }\n\n const handleDeleteTagConfirm = () => {\n if (deleteTagModal.tagIndex < 0) return\n const tagName = localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'\n setLocalTags((prev) => prev.filter((_, index) => index !== deleteTagModal.tagIndex))\n messageApi.success(`${tagName} tag has been deleted successfully.`)\n setDeleteTagModal({ open: false, tagIndex: -1 })\n setBannerVisible(true)\n }\n\n const getEndpointsByTag = (): Record<string, any[]> => {\n if (!selectedApi) return {}\n const tags = selectedApi.tags || {}\n const curl = selectedApi.curl || []\n const filtered: typeof tags = {}\n Object.keys(tags).forEach((tagKey) => {\n filtered[tagKey] = tags[tagKey].map((endpoint) => {\n const curlMatch = curl.find(\n (c: any) =>\n c.serverUrl === selectedUrl && c.method === endpoint.method && c.path === endpoint.path\n )\n return { ...endpoint, curlCommand: curlMatch?.curlCommand || null }\n })\n })\n return filtered\n }\n\n const handleReset = () => {\n setBannerVisible(false)\n setApiNameTouched(false)\n setDescriptionTouched(false)\n setSaveErrors([])\n setLocalApiName(selectedApi?.title ?? '')\n setLocalDescription(selectedApi?.description ?? '')\n setEndpointNames({})\n setEndpointDescs({})\n setEndpointTags({})\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setEndpointRequestBody(initialEndpointRequestBody)\n setEndpointResponseBody(initialEndpointResponseBody)\n setLocalTags(tagMetadata)\n setResetKey((prev) => prev + 1)\n messageApi.success('Changes have been reset successfully.')\n }\n\n const handleSave = async () => {\n if (!selectedApi || !originalData) return\n\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return\n\n const cloned: OpenAPIFile = JSON.parse(JSON.stringify(rawFile))\n\n if (!cloned.openapi) {\n cloned.openapi = '3.0.1'\n }\n\n cloned.info.title = localApiName\n cloned.info.description = localDescription\n\n cloned.tags = localTags.map((t) => {\n const originalTag = rawFile.tags?.find((rt) => rt.name === t.name)\n return {\n ...(originalTag ?? {}),\n name: t.name,\n ...(t.description !== undefined && { description: t.description }),\n ...((t.externalDocsUrl !== undefined || t.externalDocsDescription !== undefined) && {\n externalDocs: {\n url: t.externalDocsUrl ?? '',\n description: t.externalDocsDescription ?? '',\n },\n }),\n }\n })\n\n const idToPathMethod: Record<string, { path: string; method: string }> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n idToPathMethod[ep.id] = { path: ep.path, method: ep.method.toLowerCase() }\n })\n\n Object.entries(endpointNames).forEach(([id, name]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { summary?: string; description?: string }>)[\n loc.method\n ].summary = name\n }\n })\n\n Object.entries(endpointDescs).forEach(([id, desc]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { summary?: string; description?: string }>)[\n loc.method\n ].description = desc\n }\n })\n\n Object.entries(endpointTags).forEach(([id, tags]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { tags?: string[] }>)[loc.method].tags = tags\n }\n })\n\n Object.entries(endpointParams).forEach(([id, params]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n const methodObj = (cloned.paths[loc.path] as Record<string, { parameters?: unknown[] }>)[\n loc.method\n ]\n if (params.length > 0) {\n methodObj.parameters = params.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required,\n ...(param.description && { description: param.description }),\n schema: {\n type: param.type,\n ...(param.enum && param.enum.length > 0 && { enum: param.enum }),\n ...(param.type === 'array' && param.items && { items: param.items }),\n },\n }))\n } else {\n delete methodObj.parameters\n }\n }\n })\n\n Object.entries(endpointResponseParams).forEach(([id, params]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n const methodObj = (cloned.paths[loc.path] as Record<string, Record<string, unknown>>)[\n loc.method\n ]\n if (params.length > 0) {\n methodObj['x-response-params'] = params.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required,\n ...(param.description && { description: param.description }),\n schema: {\n type: param.type,\n ...(param.enum && param.enum.length > 0 && { enum: param.enum }),\n ...(param.type === 'array' && param.items && { items: param.items }),\n },\n }))\n } else {\n delete methodObj['x-response-params']\n }\n }\n })\n\n Object.entries(endpointRequestBody).forEach(([id, schema]) => {\n const loc = idToPathMethod[id]\n if (!loc) return\n const pathEntry = cloned.paths[loc.path]\n if (!pathEntry) return\n const methodObj = pathEntry[loc.method as keyof typeof pathEntry]\n if (!methodObj) return\n const methodObjAny = methodObj as Record<string, unknown>\n if (!methodObjAny.requestBody) methodObjAny.requestBody = {}\n const rb = methodObjAny.requestBody as Record<string, unknown>\n if (!rb.content) rb.content = {}\n ;(rb.content as Record<string, unknown>)['application/json'] = { example: schema }\n })\n\n Object.entries(endpointResponseBody).forEach(([id, schema]) => {\n const loc = idToPathMethod[id]\n if (!loc) return\n const pathEntry = cloned.paths[loc.path]\n if (!pathEntry) return\n const methodObj = pathEntry[loc.method as keyof typeof pathEntry]\n if (!methodObj) return\n const methodObjAny = methodObj as Record<string, unknown>\n if (!methodObjAny.responses) return\n const responses = methodObjAny.responses as Record<\n string,\n { content?: { 'application/json'?: { schema?: unknown } } }\n >\n const statusCode = '200' in responses ? '200' : Object.keys(responses)[0]\n if (!responses[statusCode]) return\n if (!responses[statusCode].content) responses[statusCode].content = {}\n responses[statusCode].content['application/json'] = { schema }\n })\n\n try {\n await onSave?.(cloned)\n setBannerVisible(false)\n setSaveErrors([])\n messageApi.success('Changes have been saved and published successfully.')\n\n // Update store so view mode immediately reflects the saved changes\n const newOriginalData = originalData.map((f) =>\n Object.keys(f.paths)[0] === selectedApi.contextPath ? cloned : f\n )\n setOriginalData(newOriginalData)\n\n const newTransformed = [cloned].map(transformOpenApiToDocs)[0]\n const newTransformedData = (transformedData ?? []).map((t) =>\n t.contextPath === selectedApi.contextPath ? newTransformed : t\n )\n setTransformedData(newTransformedData)\n\n const newTree = buildTreeDataStructure(newTransformedData)\n setBuiltTreeData(newTree ?? [])\n\n setSelectedApi(newTransformed)\n } catch (err: unknown) {\n let messages: string[] = []\n if (err && typeof err === 'object' && 'data' in err) {\n const e = err as { data: { message?: string } }\n messages = [e.data?.message ?? 'Unknown error']\n } else if (err && typeof err === 'object' && 'message' in err) {\n const e = err as { message: unknown }\n messages = [String(e.message)]\n } else if (err instanceof Error) {\n messages = err.message.split('\\n').filter(Boolean)\n } else {\n messages = [String(err)]\n }\n setSaveErrors(messages)\n setSelectedEditItem({ type: 'errors' })\n }\n }\n\n const handleResetSearch = () => {\n setSearchValue('')\n }\n\n const _handleVisitLandingPage = () => {\n if (handleVisitLandingPage) {\n handleVisitLandingPage()\n return\n }\n window.location.pathname = '/'\n }\n\n useEffect(() => {\n setErrorBoxExpanded(false)\n }, [selectedEditItem])\n\n const errorBox =\n saveErrors.length > 0 ? (\n <div\n style={{\n background: token.colorErrorBg,\n borderRadius: token.borderRadiusLG,\n padding: `${token.marginLG}px ${token.marginLG}px 48px`,\n width: '100%',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n }}\n >\n {selectedEditItem.type !== 'errors' && (\n <button\n onClick={() => setErrorBoxExpanded((prev) => !prev)}\n style={{\n display: 'flex',\n alignItems: 'center',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Collapse\"\n >\n <RightOutlined\n style={{\n fontSize: 14,\n color: token.colorError,\n transform: errorBoxExpanded ? 'rotate(90deg)' : 'none',\n transition: 'transform 0.2s',\n }}\n />\n </button>\n )}\n <Title level={3} style={{ margin: 0, color: token.colorError }}>\n Errors\n </Title>\n </div>\n <p\n style={{\n color: token.colorError,\n fontSize: 16,\n lineHeight: '24px',\n marginTop: token.marginXS,\n marginBottom: token.marginSM,\n }}\n >\n Failed to update the OpenAPI documentation. Please resolve the following issues:\n </p>\n <Divider style={{ margin: `${token.marginSM}px 0` }} />\n <ol style={{ paddingLeft: token.marginLG, margin: 0 }}>\n {saveErrors.map((msg, i) => (\n <li key={i} style={{ color: token.colorText, marginBottom: token.marginXS }}>\n {msg}\n </li>\n ))}\n </ol>\n </div>\n ) : null\n\n const errorBoxCollapsed =\n saveErrors.length > 0 ? (\n <button\n onClick={() => setErrorBoxExpanded(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorErrorBg,\n borderRadius: token.borderRadiusLG,\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left' as const,\n }}\n >\n <RightOutlined style={{ fontSize: 14, color: token.colorError }} />\n <span style={{ color: token.colorError, fontSize: token.fontSizeLG, fontWeight: 600 }}>\n Errors\n </span>\n </button>\n ) : null\n\n const switcherNode = (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n background: token.colorBgLayout,\n padding: '4px',\n borderRadius: 8,\n gap: 8,\n }}\n >\n <button\n onClick={() => setMode('edit')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: 8,\n fontFamily: token.fontFamily,\n background: mode === 'edit' ? token.colorBgContainer : 'transparent',\n boxShadow: mode === 'edit' ? '0px 2px 4px -2px rgba(17,12,34,0.12)' : 'none',\n fontWeight: mode === 'edit' ? 700 : 400,\n fontSize: mode === 'edit' ? token.fontSize : token.fontSizeLG,\n color: token.colorText,\n }}\n >\n <EditOutlined style={{ fontSize: 18 }} />\n Edit\n </button>\n <button\n onClick={() => setMode('view')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: mode === 'view' ? '8px 12px' : '0 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: mode === 'view' ? 8 : 12,\n fontFamily: token.fontFamily,\n background: mode === 'view' ? token.colorBgContainer : 'transparent',\n boxShadow: mode === 'view' ? '0px 2px 4px -2px rgba(17,12,34,0.12)' : 'none',\n fontWeight: mode === 'view' ? 700 : 400,\n fontSize: token.fontSize,\n lineHeight: '22px',\n color: token.colorText,\n }}\n >\n <EyeOutlined style={{ fontSize: 18 }} />\n View\n </button>\n </div>\n )\n\n return (\n <div\n className={cx('documentation-container')}\n style={{ overflow: mode === 'view' ? 'hidden' : 'auto' }}\n >\n {contextHolder}\n <div className={cx('section')}>\n <ApiDocumentationBar\n apiName={localApiName}\n mode={mode}\n onModeChange={setMode}\n onReset={() => setResetConfirmModal(true)}\n onSave={() => setSaveConfirmModal(true)}\n hasChanges={hasChanges}\n hasErrors={hasGeneralError}\n switcherNode={isMobile ? switcherNode : undefined}\n />\n </div>\n {bannerVisible && <UnsavedChangesBanner onClose={() => setBannerVisible(false)} />}\n {mode === 'edit' ? (\n <div style={{ display: 'flex', gap: token.marginLG, flex: 1, minHeight: 0 }}>\n {!isMobile && (\n <EditModeSidebar\n selectedItem={selectedEditItem}\n onSelectItem={setSelectedEditItem}\n endpoints={allEndpoints}\n hasGeneralError={hasGeneralError}\n hasSaveErrors={saveErrors.length > 0}\n />\n )}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n flex: 1,\n overflow: 'auto',\n }}\n >\n {isMobile ? (\n <>\n {errorBox && <div className={cx('section')}>{errorBox}</div>}\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find(\n (v) => v.apiId === selectedApi?.currentVersion\n )?.version || ''\n }\n description={localDescription}\n onApiNameChange={(val) => {\n setApiNameTouched(true)\n setLocalApiName(val)\n }}\n apiNameError={hasApiNameError}\n onDescriptionChange={(val) => {\n setDescriptionTouched(true)\n setLocalDescription(val)\n }}\n descriptionError={hasDescriptionError}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setBannerVisible(true)\n }}\n />\n </div>\n <div className={cx('section')}>\n <TagsSection\n tags={localTags}\n collapsed={tagsCollapsed}\n onToggleCollapse={() => setTagsCollapsed((prev) => !prev)}\n onAddTag={() => setTagDrawerState({ open: true, mode: 'add' })}\n onEditTag={(tag) =>\n setTagDrawerState({\n open: true,\n mode: 'edit',\n initialValues: {\n name: tag.name,\n description: tag.description,\n externalDocsDescription: tag.externalDocsDescription,\n externalDocsLink: tag.externalDocsUrl,\n },\n })\n }\n onDeleteTag={(_tagName, tagIndex) => setDeleteTagModal({ open: true, tagIndex })}\n />\n </div>\n <div className={cx('section', 'section-grow')}>\n <EndpointsSection\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\n resetKey={resetKey}\n collapsed={endpointsCollapsed}\n onToggleCollapse={() => setEndpointsCollapsed((c) => !c)}\n endpointNames={endpointNames}\n endpointDescs={endpointDescs}\n endpointTags={endpointTags}\n availableTags={localTags.map((t) => t.name)}\n onEndpointNameChange={(id, val) => {\n setEndpointNames((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n onRequestContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointRequestBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n onResponseContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointResponseBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n requestBodySchemas={endpointRequestBody}\n responseBodySchemas={endpointResponseBody}\n />\n </div>\n </>\n ) : (\n <>\n {selectedEditItem.type === 'errors' && errorBox && (\n <div className={cx('section')}>{errorBox}</div>\n )}\n {selectedEditItem.type !== 'errors' && (\n <>\n {errorBoxExpanded && errorBox ? (\n <div className={cx('section')}>{errorBox}</div>\n ) : (\n errorBoxCollapsed && <div className={cx('section')}>{errorBoxCollapsed}</div>\n )}\n </>\n )}\n {selectedEditItem.type === 'general' && (\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find(\n (v) => v.apiId === selectedApi?.currentVersion\n )?.version || ''\n }\n description={localDescription}\n onApiNameChange={(val) => {\n setApiNameTouched(true)\n setLocalApiName(val)\n }}\n apiNameError={hasApiNameError}\n onDescriptionChange={(val) => {\n setDescriptionTouched(true)\n setLocalDescription(val)\n }}\n descriptionError={hasDescriptionError}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setBannerVisible(true)\n }}\n />\n </div>\n )}\n {selectedEditItem.type === 'tags' && (\n <div className={cx('section')}>\n <TagsSection\n tags={localTags}\n collapsed={tagsCollapsed}\n onToggleCollapse={() => setTagsCollapsed((prev) => !prev)}\n onAddTag={() => setTagDrawerState({ open: true, mode: 'add' })}\n onEditTag={(tag) =>\n setTagDrawerState({\n open: true,\n mode: 'edit',\n initialValues: {\n name: tag.name,\n description: tag.description,\n externalDocsDescription: tag.externalDocsDescription,\n externalDocsLink: tag.externalDocsUrl,\n },\n })\n }\n onDeleteTag={(_tagName, tagIndex) => setDeleteTagModal({ open: true, tagIndex })}\n />\n </div>\n )}\n {selectedEditItem.type === 'endpoint' && (\n <EndpointsSection\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\n selectedEndpointKey={selectedEditItem.key}\n collapsed={endpointsCollapsed}\n onToggleCollapse={() => setEndpointsCollapsed((c) => !c)}\n endpointNames={endpointNames}\n endpointDescs={endpointDescs}\n endpointTags={endpointTags}\n availableTags={localTags.map((t) => t.name)}\n onEndpointNameChange={(id, val) => {\n setEndpointNames((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n onRequestContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointRequestBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n onResponseContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointResponseBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n requestBodySchemas={endpointRequestBody}\n responseBodySchemas={endpointResponseBody}\n resetKey={resetKey}\n />\n )}\n </>\n )}\n </div>\n </div>\n ) : (\n <div className={cx('docs-layout')}>\n <Sidebar searchValue={searchValue} setSearchValue={setSearchValue} />\n <div className={cx('content-scroll-area')}>\n <MainContent\n handleVisitLandingPage={_handleVisitLandingPage}\n handleResetSearch={handleResetSearch}\n searchEnabled={!!searchValue}\n apiOverride={mode === 'view' ? viewModeApi : undefined}\n />\n {!isMobile && focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\n </div>\n </div>\n )}\n <AddTagDrawer\n open={tagDrawerState.open}\n mode={tagDrawerState.mode}\n initialValues={tagDrawerState.initialValues}\n onClose={() => setTagDrawerState({ open: false, mode: 'add' })}\n onAddTag={handleAddTag}\n onEditTag={handleUpdateTag}\n existingTags={localTags}\n />\n\n {/* Save & Publish confirmation modal */}\n <Modal\n open={saveConfirmModal}\n onCancel={() => setSaveConfirmModal(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Save &amp; Publish Changes</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setSaveConfirmModal(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to Save &amp; Publish Changes?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setSaveConfirmModal(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={() => {\n setSaveConfirmModal(false)\n handleSave()\n }}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Save &amp; Publish\n </Button>\n </div>\n </Modal>\n\n {/* Reset confirmation modal */}\n <Modal\n open={resetConfirmModal}\n onCancel={() => setResetConfirmModal(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Reset changes?</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setResetConfirmModal(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n This will discard your unsaved changes.\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setResetConfirmModal(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n size=\"middle\"\n onClick={() => {\n setResetConfirmModal(false)\n handleReset()\n }}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: '#faad14',\n borderColor: '#faad14',\n color: '#fff',\n }}\n >\n Yes, Reset\n </Button>\n </div>\n </Modal>\n\n {/* Delete tag confirmation modal */}\n <Modal\n open={deleteTagModal.open}\n onCancel={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n {/* HEAD */}\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'} tag</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n {/* CONTENT */}\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n onClick={handleDeleteTagConfirm}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport json from 'react-syntax-highlighter/dist/esm/languages/hljs/json'\nimport * as hljs from 'react-syntax-highlighter/dist/esm/styles/hljs'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nSyntaxHighlighter.registerLanguage('json', json)\n\nconst Codebox = ({ code, language }: { code: string; language?: string }) => {\n const [theme] = useState<'LIGHT' | 'DARK'>('DARK')\n const { cx } = useStyle('codeBox', (token, scope) => ({\n [scope('codebox')]: {\n borderRadius: token.borderRadius,\n height: '100%',\n maxHeight: '100%',\n overflow: 'auto',\n\n pre: {\n height: '100%',\n },\n },\n // [scope('codebox-header')]: {\n // display: 'flex',\n // alignItems: 'center',\n // gap: '0.25rem',\n // paddingLeft: '0.5rem',\n // height: '1.75rem',\n // border: '1px solid #bbbec5',\n // borderTopRightRadius: '0.25rem',\n // borderTopLeftRadius: '0.25rem',\n // },\n // [scope('themeToggle')]: {\n // width: '0.75rem',\n // minWidth: '0.75rem',\n // aspectRatio: '1 / 1',\n // border: '1px solid transparent',\n // borderRadius: '100%',\n // cursor: 'pointer',\n // borderColor: '#6b7280',\n // },\n // [scope('themeToggle_light')]: {\n // backgroundColor: '#edf1fb',\n // },\n // [scope('themeToggle_dark')]: {\n // backgroundColor: '#455162',\n // },\n }))\n\n return (\n <div className={cx('codebox')}>\n {/* TODO: Implement theme toggle */}\n {/* <div className={cx('codebox-header')}>\n <div\n role=\"button\"\n tabIndex={-1}\n onClick={() => theme !== 'LIGHT' && setTheme('LIGHT')}\n className={cx('themeToggle', 'themeToggle_light')}\n title=\"Light theme\"\n ></div>\n <div\n role=\"button\"\n tabIndex={-1}\n onClick={() => theme !== 'DARK' && setTheme('DARK')}\n className={cx('themeToggle', 'themeToggle_dark')}\n title=\"Dark theme\"\n ></div>\n </div> */}\n <SyntaxHighlighter\n language={language || 'json'}\n style={theme === 'LIGHT' ? hljs.stackoverflowLight : hljs.stackoverflowDark}\n showLineNumbers\n wrapLines\n customStyle={{\n margin: 0,\n minHeight: '3rem',\n overflowY: 'auto',\n padding: '0.75rem 1rem 0.75rem 1.5rem',\n backgroundColor: theme === 'DARK' ? '#20264B' : '#20264B',\n fontSize: '0.75rem',\n }}\n lineProps={{\n style: { fontFamily: 'Cascadia Code, sans-serif' },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n )\n}\n\nexport default Codebox\n","import useStore from '@doc-lib/store'\nimport { handleStatusColor } from '@doc-lib/utils'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { Button, Select, Tooltip, Typography } from 'antd'\nimport { useMemo, useState } from 'react'\nimport Codebox from './EndpointPage/Codebox/Codebox'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { token as tokens } from '@doc-lib/theme/light.json'\n\nfunction CodeboxSidebar() {\n const { selectedEndpoint, selectedStatusCode, statusCodeOptions, setSelectedStatusCode } =\n useStore(({ view }) => view)\n const httpStatusOptions = useMemo(\n () =>\n statusCodeOptions.map((code) => ({\n value: code,\n label: (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span\n style={{\n background: handleStatusColor(code),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n minWidth: '0.5rem',\n minHeight: '0.5rem',\n }}\n />\n {code}\n </span>\n ),\n })),\n [statusCodeOptions]\n )\n\n const { originalData } = useStore(({ view }) => view)\n\n const [curlTooltip, setCurlTooltip] = useState('Copy Request')\n // Find the curl command for the selected endpoint\n const findCurlForEndpoint = () => {\n if (!selectedEndpoint || !originalData) return ''\n\n // Find the API that contains this endpoint\n const api = originalData.find((apiData) => {\n const paths = apiData.paths || {}\n return Object.keys(paths).some((path) => {\n const methods = paths[path] || {}\n return Object.keys(methods).some((method) => {\n const endpointMethod = method.toUpperCase()\n return path === selectedEndpoint.path && endpointMethod === selectedEndpoint.method\n })\n })\n })\n\n if (!api || !api['x-curls']) return ''\n\n // Find all matching curl commands\n const matchingCurls = api['x-curls'].filter(\n (curlObj: any) =>\n curlObj.path === selectedEndpoint.path && curlObj.method === selectedEndpoint.method\n )\n\n // Prioritize SDB server URLs\n const sdbCurl = matchingCurls.find(\n (curl: any) => curl.serverUrl.includes('sdb') || curl.serverUrl.includes('SDB')\n )\n\n // If SDB found, return it, otherwise return the first match (or empty string)\n return sdbCurl ? sdbCurl.curlCommand : matchingCurls[0]?.curlCommand || ''\n }\n\n const curlCommand = findCurlForEndpoint()\n\n const formatCurlCommand = (cmd: string) => {\n if (!cmd) return ''\n\n return cmd\n .replace(/ -X /g, ' \\\\\\n -X ')\n .replace(/ -H /g, ' \\\\\\n -H ')\n .replace(/ -d /g, ' \\\\\\n -d ')\n .replace(/ (https?:\\/\\/[^\\s'\"]+)/g, ' \\\\\\n $1')\n }\n\n const { cx } = useStyle('CodeboxSidebar', (token, scope) => ({\n [scope('container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n background: token.colorBgContainer,\n borderRadius: token.borderRadiusLG,\n padding: token.paddingLG,\n overflow: 'hidden',\n height: '100%',\n maxHeight: '100%',\n width: '23.625rem',\n minWidth: '23.625rem',\n '.ant-card-body': { padding: 0 },\n '.ant-card-head-title': { color: 'white' },\n '.ant-card-head': { borderBottom: '.125rem solid #33419A' },\n },\n\n [scope('rightCard')]: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#20264B',\n '.CodeboxSidebar-copyButton': { '.isolated-btn-icon': { path: { fill: 'white' } } },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n borderTop: '.125rem solid #33419A',\n },\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n },\n [scope('rightCardRequest')]: {\n maxHeight: '50%',\n minHeight: '8.125rem',\n },\n [scope('rightCardResponse')]: {\n height: 'fit-content',\n overflow: 'hidden',\n },\n [scope('rightCardHeader')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginXS}px ${token.margin}px`,\n borderBottom: '.125rem solid #33419A',\n height: '3.125rem',\n },\n [scope('rightCardFlex')]: {\n display: 'flex',\n flexDirection: 'column',\n height: 'fit-content',\n overflow: 'auto',\n backgroundColor: '#20264B',\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n '.ant-card-body': {\n flex: '1 1 auto',\n overflowY: 'auto',\n padding: '.125rem 0 0 0 !important',\n },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n height: 'fit-content',\n overflow: 'auto',\n borderTop: '.125rem solid #33419A',\n '.codebox': { height: 'fit-content', overflow: 'auto' },\n },\n },\n\n [scope('customSelect')]: {\n width: '5.5rem',\n maxWidth: '5.5rem',\n\n '.ant-select-selector': {\n backgroundColor: '#fff',\n borderColor: '#fff',\n borderRadius: '.375rem',\n color: '#101010',\n },\n '.ant-select-selection-item': {\n color: '#101010',\n fontWeight: 400,\n },\n '.ant-select-selection-placeholder': {\n color: 'rgba(255, 255, 255, 0.65)',\n },\n '.ant-select-arrow': {\n color: '#101010',\n },\n '&:hover .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n '&:focus .ant-select-selector, &.ant-select-focused .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n },\n }))\n\n return (\n <div className={cx('container')}>\n {/* Request codebox */}\n {curlCommand && (\n <div className={cx('rightCard', 'rightCardRequest')}>\n <div className={cx('rightCardHeader')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Request\n </Typography.Text>\n <Tooltip title={curlTooltip}>\n <Button\n color=\"default\"\n variant=\"link\"\n className={cx('copyButton')}\n onClick={() => {\n const cleaned = curlCommand.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\')\n navigator.clipboard.writeText(formatCurlCommand(cleaned))\n setCurlTooltip('Copied!')\n setTimeout(() => setCurlTooltip('Copy cURL'), 1500)\n }}\n icon={<CopyOutlined style={{ color: 'white' }} />}\n />\n </Tooltip>\n </div>\n <Codebox\n language=\"bash\"\n code={formatCurlCommand(curlCommand.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\'))}\n />\n </div>\n )}\n {/* Response codebox */}\n {selectedEndpoint?.responses && httpStatusOptions.length > 0 && (\n <div className={cx('rightCard', 'rightCardResponse')}>\n <div className={cx('rightCardHeader', 'rightCardHeaderResponse')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Response\n </Typography.Text>\n <Select\n defaultActiveFirstOption={true}\n defaultValue={200}\n className={cx('customSelect')}\n prefix={false}\n style={{ width: '100%' }}\n value={selectedStatusCode}\n onChange={setSelectedStatusCode}\n options={httpStatusOptions}\n open={httpStatusOptions.length === 1 ? false : undefined}\n suffixIcon={httpStatusOptions.length > 1 ? undefined : false}\n />\n </div>\n <Codebox\n code={\n JSON.stringify(selectedEndpoint?.responses[selectedStatusCode as number], null, 2) ||\n ''\n }\n />\n </div>\n )}\n </div>\n )\n}\n\nexport default CodeboxSidebar\n","'use client'\nimport { Sidebar, MainContent } from './components'\nimport { useStyle } from '../hooks/useStyle'\nimport { useNodeSelection } from '../hooks/useNodeSelection'\nimport { OpenAPIFile } from '@doc-lib/types/OpenApi'\nimport { useEffect, useRef, useState } from 'react'\nimport useStore from '@doc-lib/store'\nimport { transformOpenApiToDocs } from './helper/mutate'\nimport { buildTreeDataStructure } from './helper'\nimport CodeboxSidebar from './components/CodeboxSidebar'\n\nexport const DocumentationLayout = ({\n data,\n preSelectedApi,\n handleVisitLandingPage,\n}: {\n data: OpenAPIFile[]\n preSelectedApi?: string | null\n handleVisitLandingPage?: () => void\n theme?: any\n}) => {\n const [searchValue, setSearchValue] = useState('')\n\n const {\n focusedContent,\n selectedNodeKey,\n selectedApi,\n builtTreeData,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\n setFocusedContent,\n setExpandedKeys,\n } = useStore(({ view }) => view)\n const { selectFirstApi, selectPreSelectedApi, clearSelection } = useNodeSelection()\n const hasInitializedRef = useRef(false)\n\n useEffect(() => {\n return () => {\n resetStore()\n }\n }, [])\n\n const resetStore = () => {\n setExpandedKeys([])\n setFocusedContent(null)\n setBuiltTreeData([])\n setTransformedData([])\n setOriginalData([])\n setSearchValue('')\n clearSelection()\n hasInitializedRef.current = false\n }\n\n useEffect(() => {\n if (!hasInitializedRef.current && data.length > 0) {\n setOriginalData(data)\n const transformedData = data\n .map(transformOpenApiToDocs)\n .sort((a, b) => a.title.localeCompare(b.title))\n setTransformedData(transformedData)\n\n const builtTree = buildTreeDataStructure(transformedData)\n setBuiltTreeData(builtTree)\n\n hasInitializedRef.current = true\n }\n }, [data, setOriginalData, setTransformedData, setBuiltTreeData])\n\n useEffect(() => {\n if (\n builtTreeData &&\n builtTreeData.length > 0 &&\n !selectedApi &&\n !selectedNodeKey &&\n hasInitializedRef.current\n ) {\n if (!preSelectedApi) {\n selectFirstApi(builtTreeData)\n } else {\n selectPreSelectedApi(builtTreeData, preSelectedApi)\n }\n hasInitializedRef.current = false\n }\n }, [builtTreeData, selectedNodeKey, selectedApi, selectFirstApi])\n\n const { cx } = useStyle('APIDocumentationLayout', (token, scope) => ({\n [scope('documentation-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n height: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n },\n [scope('docs-layout')]: {\n display: 'flex',\n height: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n gap: token.marginLG,\n width: '100%',\n },\n }))\n\n const handleResetSearch = () => {\n setSearchValue('')\n }\n\n const _handleVisitLandingPage = () => {\n if (handleVisitLandingPage) {\n handleVisitLandingPage()\n return\n }\n window.location.pathname = '/'\n }\n\n return (\n <div className={cx('documentation-container')}>\n <div className={cx('docs-layout')}>\n <Sidebar searchValue={searchValue} setSearchValue={setSearchValue} />\n <MainContent\n handleVisitLandingPage={_handleVisitLandingPage}\n handleResetSearch={handleResetSearch}\n searchEnabled={!!searchValue}\n />\n {focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["antdTheme","methodColors","darkerMethodColors","buildTreeDataStructure","getAllTreeKeys","filterTreeData","getSidebarStyles","EndpointItem","darkerMethodColors","methodColors","convertToRenderableTreeData","Sidebar","getSidebarStyles","getAllTreeKeys","convertToRenderableTreeData","filterTreeData","methodColors","LinkIcon","requestColumns","responseColumns","buildRequestData","buildHeaderData","EndpointPage","methodColors","Title","Paragraph","MainContent","MouseSquareIcon","EndpointPage","useBreakpoint","Title","useBreakpoint","TrashIcon","useBreakpoint","methodColors","TrashIcon","EditTagIcon","useBreakpoint","TrashIcon","EditTagIcon","methodColors","Title","MouseSquareIcon","SyntaxHighlighter","Codebox","antdTheme","CodeboxSidebar","antdTheme","token","tokens","CopyOutlined","Codebox","CodeboxSidebar","SyntaxHighlighter","token","tokens","CopyOutlined","buildTreeDataStructure","Sidebar","MainContent"],"sources":["../src/store/slices/view.ts","../src/store/index.ts","../src/hooks/useStyle.ts","../src/theme/light.json","../src/view/helper/sidebar.utils.ts","../src/utils/OverflowTooltip.tsx","../src/view/helper/sidebar.components.tsx","../src/hooks/useNodeSelection.ts","../src/assets/Minify.tsx","../src/view/components/NoDataIcon.tsx","../src/view/components/Sidebar.tsx","../src/assets/link.tsx","../src/view/components/ApiPage/components/ApiCard.tsx","../src/view/components/ApiPage/components/ViewModeApiHeader.tsx","../src/view/components/ApiPage/index.tsx","../src/utils/generateExampleFromSchema.ts","../src/utils/index.ts","../src/view/components/EndpointPage/EndpointPage.tsx","../src/assets/mouseSquare.tsx","../src/view/components/MainContent.tsx","../src/view/components/ApiPage/components/ApiDocumentationBar.tsx","../src/view/components/ApiPage/components/GeneralSection.tsx","../src/assets/trash.tsx","../src/assets/icons/editTag.tsx","../src/hooks/useDebounce.ts","../src/view/components/ApiPage/components/AddParameterDrawer.tsx","../src/view/components/ApiPage/components/EndpointsSection.tsx","../src/view/components/ApiPage/components/UnsavedChangesBanner.tsx","../src/view/components/ApiPage/components/TagsSection.tsx","../src/view/components/ApiPage/components/AddTagDrawer.tsx","../src/assets/icons/restApi.tsx","../src/view/components/EditModeSidebar/index.tsx","../src/view/console/helper/sidebar.utils.ts","../src/view/console/helper/sidebar.components.tsx","../src/view/console/Sidebar.tsx","../src/view/console/EndpointPage/EndpointPage.tsx","../src/view/console/MainContent.tsx","../src/assets/copy.tsx","../src/view/console/EndpointPage/Codebox/Codebox.tsx","../src/view/console/CodeboxSidebar.tsx","../src/view/helper/mutate.ts","../src/view/layout.tsx","../src/view/components/EndpointPage/Codebox/Codebox.tsx","../src/view/components/CodeboxSidebar.tsx","../src/view/devportal-layout.tsx"],"sourcesContent":["import { OpenAPIFile } from '@doc-lib/types/OpenApi'\nimport { EndpointData, OverviewData } from '@doc-lib/view/entities'\nimport { transformOpenApiToDocs } from '@doc-lib/view/helper/mutate'\nimport { TreeNode } from '@doc-lib/view/helper'\n\ntype SetFn = (fn: (state: ViewSlice) => void) => void\n\ntype ViewSlice = {\n view: {\n originalData: OpenAPIFile[] | null\n transformedData: ReturnType<typeof transformOpenApiToDocs>[] | null\n builtTreeData: TreeNode[] | null\n selectedNodeKey: string | null\n expandedKeys: string[]\n selectedApi: OverviewData | null\n selectedEndpoint: EndpointData | null\n focusedContent: 'API' | 'ENDPOINT'\n selectedStatusCode: number | null\n focusedTag: string | null\n activeRequestTab: string | null\n setSelectedStatusCode: (code: number | null) => void\n statusCodeOptions: number[]\n // Actions\n setActiveRequestTab: (tab: string | null) => void\n setSelectedNodeKey: (key: string | null) => void\n setExpandedKeys: (keys: string[]) => void\n setOriginalData: (data: OpenAPIFile[]) => void\n setSelectedApi: (api: OverviewData | null) => void\n setSelectedEndpoint: (endpoint: EndpointData | null) => void\n setTransformedData: (data: ReturnType<typeof transformOpenApiToDocs>[] | null) => void\n setBuiltTreeData: (data: TreeNode[] | null) => void\n setFocusedContent: (content: 'API' | 'ENDPOINT' | null) => void\n setStatusCodeOptions: (options: number[]) => void\n setFocusedTag: (tag: string | null) => void\n }\n}\n\nexport const createViewSlice = (set: SetFn) => ({\n view: {\n selectedNodeKey: null,\n expandedKeys: [],\n originalData: null,\n transformedData: null,\n builtTreeData: null,\n selectedApi: undefined,\n selectedEndpoint: undefined,\n focusedContent: undefined,\n selectedStatusCode: null,\n statusCodeOptions: null,\n focusedTag: null,\n activeRequestTab: null,\n\n setActiveRequestTab: (tab: string | null) =>\n set((state) => {\n state.view.activeRequestTab = tab\n }),\n\n setFocusedTag: (tag: string | null) =>\n set((state) => {\n state.view.focusedTag = tag\n }),\n\n setSelectedNodeKey: (key: string | null) =>\n set((state) => {\n state.view.selectedNodeKey = key\n }),\n\n setExpandedKeys: (keys: string[]) =>\n set((state) => {\n state.view.expandedKeys = keys\n }),\n\n setOriginalData: (data: OpenAPIFile[]) =>\n set((state) => {\n state.view.originalData = data\n }),\n\n setSelectedApi: (api: OverviewData) =>\n set((state) => {\n state.view.selectedApi = api as OverviewData\n }),\n\n setSelectedEndpoint: (endpoint: EndpointData) =>\n set((state) => {\n if (endpoint) {\n const availableStatusCodes = Object.keys(endpoint?.responses)\n state.view.statusCodeOptions = availableStatusCodes.map(Number)\n state.view.selectedStatusCode = availableStatusCodes.at(0)\n ? Number(availableStatusCodes.at(0))\n : null\n }\n state.view.selectedEndpoint = endpoint\n }),\n\n setTransformedData: (data: ReturnType<typeof transformOpenApiToDocs>[] | null) =>\n set((state) => {\n state.view.transformedData = data\n }),\n\n setBuiltTreeData: (data: TreeNode[] | null) => {\n return set((state) => {\n state.view.builtTreeData = data\n })\n },\n\n setFocusedContent: (content: 'API' | 'ENDPOINT') =>\n set((state) => {\n state.view.focusedContent = content\n }),\n\n setSelectedStatusCode: (code: number | null) =>\n set((state) => {\n state.view.selectedStatusCode = code\n }),\n } as unknown as ViewSlice['view'],\n})\n","import { create } from 'zustand'\nimport { devtools } from 'zustand/middleware'\nimport { immer } from 'zustand/middleware/immer'\nimport { createViewSlice } from './slices/view'\n\ntype SetFn = (fn: (state: unknown) => void) => void\n\nconst createStore = (set: SetFn) => ({\n ...createViewSlice(set as Parameters<typeof createViewSlice>[0]),\n})\n\nexport const useStore = create<ReturnType<typeof createStore>>()(\n devtools(immer(createStore), {\n name: 'dgate-docs-store',\n })\n)\n\nexport type StoreState = ReturnType<typeof createStore>\nexport default useStore\n","'use client'\n\nimport { theme as antdTheme } from 'antd'\nimport { useStyleRegister } from '@ant-design/cssinjs'\nimport type { CSSObject } from '@ant-design/cssinjs'\n\nexport function useStyle(\n componentName: string,\n stylesFn: (\n token: ReturnType<typeof antdTheme.useToken>['token'],\n scope: (className: string) => string\n ) => Record<string, CSSObject>\n) {\n const { token, theme, hashId } = antdTheme.useToken()\n\n // `_tokenKey` is computed by `useCacheToken` from the actual token values.\n // It changes whenever the color palette switches (dark ↔ light), so we bake\n // it into selectors and classNames. Old <style> blocks (which stay in <head>\n // because autoClear is false) then have selectors that no longer match any\n // rendered element. This is the same WSL-2199 pattern used in the parent app,\n // but using the token signature instead of the app's Redux themeMode.\n const tokenKey = (token as any)._tokenKey as string | undefined\n const themeId = tokenKey ? `tk-${tokenKey.slice(-6)}` : 'tk-default'\n\n // Used in styles for full specificity:\n // → .css-dev-only-do-not-override-xxx.tk-abc123.ComponentName-className\n const scope = (className: string) => `.${hashId}.${themeId}.${componentName}-${className}`\n\n // Used in JSX: className=\"ComponentName-className css-dev-only-do-not-override-xxx tk-abc123\"\n const cx = (...classes: string[]) =>\n classes.map((cls) => `${componentName}-${cls} ${hashId} ${themeId}`).join(' ')\n\n const wrapSSR = useStyleRegister(\n {\n theme,\n token,\n path: [componentName],\n },\n () => stylesFn(token, scope)\n )\n\n return { wrapSSR, cx, scope, token, hashId }\n}\n","","import { token } from '@doc-lib/theme/light.json'\nimport { OverviewData, EndpointData } from '../entities'\n\nexport interface ApiNodeData extends OverviewData {}\n\nexport interface EndpointNodeData {\n endpoint: EndpointData\n api: OverviewData\n tagName: string\n parentApiId: string\n tagId?: string\n}\n\nexport interface TagNodeData {\n tagName: string\n apiData: OverviewData\n}\n\nexport type NodeData = EndpointNodeData | OverviewData | TagNodeData\n\n// Type definitions\nexport interface TreeNode {\n title: string | React.ReactNode\n key: string\n selectable?: boolean\n isLeaf?: boolean\n method?: string\n children?: TreeNode[]\n data?: NodeData\n}\n\nexport interface EndpointItemProps {\n method: string\n title: string\n cx: (className: string) => string\n isSelected?: boolean\n}\n\n// Method colors configuration\nexport const methodColors = {\n GET: {\n bg: token.colorPrimaryBgHover,\n color: token.colorPrimary,\n },\n POST: {\n bg: token['green.1'],\n color: token.colorSuccess,\n },\n DELETE: {\n bg: token.colorErrorBg,\n color: token.colorError,\n },\n PUT: {\n bg: token.colorWarningBg,\n color: token.colorWarning,\n },\n PATCH: {\n bg: token['volcano.1'],\n color: token['volcano.5'],\n },\n OPTIONS: {\n bg: token['geekblue.2'],\n color: token['geekblue.6'],\n },\n HEAD: {\n bg: token['purple.1'],\n color: token['purple.5'],\n },\n TRACE: {\n bg: token['cyan.1'],\n color: token['cyan.5'],\n },\n}\n\n// Darker method colors for selected state\nexport const darkerMethodColors = {\n GET: {\n bg: token.colorPrimary,\n color: '#FFFFFF',\n },\n POST: {\n bg: token.colorSuccess,\n color: '#FFFFFF',\n },\n DELETE: {\n bg: token.colorError,\n color: '#FFFFFF',\n },\n PUT: {\n bg: token.colorWarning,\n color: '#FFFFFF',\n },\n PATCH: {\n bg: token['volcano.5'],\n color: '#FFFFFF',\n },\n OPTIONS: {\n bg: token['geekblue.6'],\n color: '#FFFFFF',\n },\n HEAD: {\n bg: token['purple.5'],\n color: '#FFFFFF',\n },\n TRACE: {\n bg: token['cyan.5'],\n color: '#FFFFFF',\n },\n}\n\nexport const buildTreeDataStructure = (data: OverviewData[] | null) => {\n if (!data) return []\n return data.map((api) => {\n const tagEntries = Object.entries(api.tags)\n const hasOnlyDefaultTag = tagEntries.length === 1 && tagEntries[0][0] === 'default'\n\n return {\n title: api.title,\n key: api.id,\n selectable: true,\n data: api as OverviewData,\n children: hasOnlyDefaultTag\n ? tagEntries[0][1].map((endpoint) => {\n return {\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: 'default',\n parentApiId: api.id,\n } as EndpointNodeData,\n }\n })\n : tagEntries.map(([tag, endpoints]) => {\n // Use deterministic tag ID generation for consistent expansion\n const tagId = `tag-${api.id}-${tag.replace(/\\s+/g, '-').toLowerCase()}`\n return {\n title: tag,\n key: tagId,\n selectable: true,\n data: { tagName: tag, apiData: api } as TagNodeData, // Store tag info and parent API data\n children: endpoints.map((endpoint) => {\n return {\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: tag,\n parentApiId: api.id,\n tagId,\n } as EndpointNodeData,\n }\n }),\n }\n }),\n }\n })\n}\n\n// Helper function to find a node by key and return its data\nexport const findNodeByKey = (nodes: TreeNode[], targetKey: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === targetKey) {\n return node\n }\n if (node.children && node.children.length > 0) {\n const found = findNodeByKey(node.children, targetKey)\n if (found) return found\n }\n }\n return null\n}\n\n// Helper function to check if an API section should be highlighted when its children are selected\nexport const isApiSectionHighlighted = (\n apiKey: string,\n selectedEndpoint: { parentApiId: string } | null\n): boolean => {\n if (!selectedEndpoint) return false\n\n // Highlight the API if the selected endpoint belongs to this API\n return selectedEndpoint.parentApiId === apiKey\n}\n\n// Get all keys for expand/collapse functionality\nexport const getAllTreeKeys = (data: TreeNode[]): string[] => {\n const keys: string[] = []\n const traverse = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n keys.push(node.key)\n if (node.children && node.children.length > 0) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return keys\n}\n\n// Filter tree data based on search\nexport const filterTreeData = (data: TreeNode[], searchText: string): TreeNode[] => {\n if (!searchText) return data\n\n // Helper function to recursively find original node in the default tree structure\n const findOriginalNode = (nodes: TreeNode[], key: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === key) return node\n if (node.children) {\n const found = findOriginalNode(node.children, key)\n if (found) return found\n }\n }\n return null\n }\n\n const filterNode = (node: TreeNode): TreeNode | null => {\n let titleText = ''\n\n // Get the original title text from the default tree structure\n const originalNode = findOriginalNode(data, node.key)\n if (originalNode && typeof originalNode.title === 'string') {\n titleText = originalNode.title\n } else if (typeof node.title === 'string') {\n titleText = node.title\n }\n\n // For endpoints, also search by method + title combination\n let searchableText = titleText\n if (node.isLeaf && node.method) {\n // Include method in searchable text for endpoints\n searchableText = `${node.method} ${titleText}`.toLowerCase()\n } else {\n searchableText = titleText.toLowerCase()\n }\n\n const searchLower = searchText.toLowerCase()\n const matchesSearch = searchableText.includes(searchLower)\n\n if (node.children) {\n const filteredChildren = node.children\n .map((child: TreeNode) => filterNode(child))\n .filter((child): child is TreeNode => child !== null)\n\n if (matchesSearch || filteredChildren.length > 0) {\n return {\n ...node,\n children: filteredChildren,\n }\n }\n } else if (matchesSearch) {\n return node\n }\n\n return null\n }\n\n return data.map((node) => filterNode(node)).filter((node): node is TreeNode => node !== null)\n}\n\n// Helper function to get parent key for search expansion\nexport const getParentKey = (key: string, tree: TreeNode[]): string | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some((item: TreeNode) => item.key === key)) {\n return node.key\n }\n const parent = getParentKey(key, node.children)\n if (parent) {\n return parent\n }\n }\n }\n return null\n}\n\n// Sidebar style configuration\nexport const getSidebarStyles = (token: any, scope: (name: string) => string) => ({\n [scope('sider')]: {\n backgroundColor: token.colorBgContainer,\n overflowY: 'auto' as const,\n overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: '100%',\n },\n [scope('content')]: {\n padding: token.padding,\n },\n [scope('controls')]: {\n display: 'flex',\n gap: token.marginXS,\n marginBottom: token.marginSM,\n },\n [scope('search-input')]: {\n flex: 1,\n },\n [scope('tree')]: {\n backgroundColor: 'transparent',\n '& .ant-tree-node-content-wrapper': {\n overflow: 'hidden',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n },\n '& .ant-tree-title': {\n width: '100%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n marginBlock: 'auto',\n },\n '& .ant-tree-treenode': {\n width: '100%',\n padding: 0,\n },\n '& .ant-tree-node-content-wrapper:hover': {\n backgroundColor: token.colorFillTertiary,\n },\n },\n [scope('endpoint-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n width: '100%',\n maxWidth: '100%',\n minWidth: '100%',\n },\n [scope('method-tag')]: {\n minWidth: '3.75rem',\n textAlign: 'center' as const,\n border: 'none',\n },\n [scope('endpoint-text')]: {\n flex: 1,\n maxWidth: '100%',\n display: 'block',\n },\n [scope('tag-title')]: {\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n flex: 1,\n },\n [scope('api-title')]: {\n flex: 1,\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n padding: 0,\n margin: 0,\n '&.highlighted': {\n color: token.colorPrimary,\n },\n },\n})\n","import React, { useRef, useState, useEffect, useCallback } from 'react'\nimport { Tooltip } from 'antd'\n\ninterface OverflowTooltipProps {\n title: React.ReactNode\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n placement?:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom'\n}\n\nexport const OverflowTooltip: React.FC<OverflowTooltipProps> = ({\n title,\n children,\n className,\n style,\n placement,\n}) => {\n const ref = useRef<HTMLSpanElement>(null)\n const [isOverflowing, setIsOverflowing] = useState(false)\n\n const checkOverflow = useCallback(() => {\n const el = ref.current\n if (!el) return\n const target = (el.firstElementChild as HTMLElement) ?? el\n setIsOverflowing(target.scrollWidth > target.clientWidth)\n }, [])\n\n useEffect(() => {\n checkOverflow()\n const el = ref.current\n if (!el) return\n const ro = new ResizeObserver(checkOverflow)\n ro.observe(el)\n return () => ro.disconnect()\n }, [checkOverflow, children, title])\n\n const content = (\n <span\n ref={ref}\n className={className}\n style={{\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n ...style,\n }}\n >\n {children}\n </span>\n )\n\n if (!isOverflowing) return content\n return (\n <Tooltip title={title} placement={placement}>\n {content}\n </Tooltip>\n )\n}\n","import React from 'react'\nimport { Tag } from 'antd'\nimport {\n methodColors,\n TreeNode,\n EndpointItemProps,\n darkerMethodColors,\n isApiSectionHighlighted,\n} from './sidebar.utils'\nimport { EndpointData } from '../entities'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\n\n// Endpoint item component\nexport const EndpointItem: React.FC<EndpointItemProps> = ({\n method,\n title,\n cx,\n isSelected = false,\n}) => {\n const colorSet = isSelected ? darkerMethodColors : methodColors\n const methodStyle = colorSet[method as keyof typeof colorSet]\n\n return (\n <div className={cx('endpoint-item')}>\n <Tag\n className={cx('method-tag')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {method}\n </Tag>\n <OverflowTooltip title={title} className={cx('endpoint-text')} style={{ flex: 1 }}>\n {title}\n </OverflowTooltip>\n </div>\n )\n}\n\n// Convert tree data to renderable format\nexport const convertToRenderableTreeData = (\n treeDataStructure: TreeNode[],\n selectedEndpoint: EndpointData | null,\n cx: (className: string) => string\n): TreeNode[] => {\n const renderNode = (node: TreeNode): TreeNode => {\n let title: React.ReactNode\n\n if (node.isLeaf && node.method) {\n // Check if this node's endpoint matches the selected endpoint\n const isSelected =\n selectedEndpoint && 'data' in node && node.data && 'endpoint' in node.data\n ? (node.data as any).endpoint?.id === selectedEndpoint?.id\n : false\n\n // Render endpoint item\n title = (\n <EndpointItem\n method={node.method}\n title={typeof node.title === 'string' ? node.title : 'Endpoint Name'}\n cx={cx}\n isSelected={isSelected}\n />\n )\n } else if (\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n ) {\n // Render API title - check if node data is OverviewData (API data)\n const isHighlighted = isApiSectionHighlighted(node.key, selectedEndpoint)\n title = (\n <OverflowTooltip\n title={typeof node.title === 'string' ? node.title : 'API Name'}\n className={cx('api-title') + (isHighlighted ? ' highlighted' : '')}\n >\n {node.title}\n </OverflowTooltip>\n )\n } else {\n // Render tag title\n title = (\n <OverflowTooltip\n title={typeof node.title === 'string' ? node.title : ''}\n className={cx('tag-title')}\n >\n {node.title}\n </OverflowTooltip>\n )\n }\n\n return {\n ...node,\n title,\n children: node.children ? node.children.map(renderNode) : undefined,\n }\n }\n\n return treeDataStructure.map(renderNode)\n}\n","import { useStore } from '@doc-lib/store'\nimport {\n NodeData,\n EndpointNodeData,\n TagNodeData,\n TreeNode,\n findNodeByKey,\n} from '@doc-lib/view/helper'\nimport { OverviewData } from '@doc-lib/view/entities'\n\nexport interface SelectionResult {\n type: 'endpoint' | 'api' | 'tag'\n endpoint?: EndpointNodeData['endpoint']\n api?: OverviewData\n tag?: string\n}\n\nexport const useNodeSelection = () => {\n const {\n setSelectedNodeKey,\n setFocusedContent,\n setSelectedApi,\n setSelectedEndpoint,\n setExpandedKeys,\n expandedKeys,\n builtTreeData,\n setFocusedTag,\n } = useStore(({ view }) => view)\n\n const handleNodeSelection = (\n nodeData: NodeData | undefined,\n nodeKey: string\n ): SelectionResult | null => {\n if (!nodeData) return null\n if (nodeKey.startsWith('endpoint-')) {\n const endpointNodeData = nodeData as EndpointNodeData\n\n // Set the endpoint data and its parent API separately\n setSelectedEndpoint({\n ...endpointNodeData.endpoint,\n tagName: endpointNodeData.tagName,\n parentApiId: endpointNodeData.parentApiId,\n })\n setSelectedApi(endpointNodeData.api)\n setFocusedContent('ENDPOINT')\n // TODO: auto expand\n const toExpand = [\n endpointNodeData.parentApiId,\n endpointNodeData.tagId,\n endpointNodeData.api.id,\n ].filter((key): key is string => !!key)\n const expanded = [...expandedKeys]\n toExpand.forEach((key) => {\n if (key && expanded.indexOf(key) < 0) {\n expanded.push(key)\n }\n })\n setExpandedKeys(expanded)\n\n return {\n type: 'endpoint' as const,\n endpoint: endpointNodeData.endpoint,\n api: endpointNodeData.api,\n tag: endpointNodeData.tagName,\n }\n } else if (nodeKey.startsWith('api-') || nodeKey === 'custom-auth') {\n // Handle API selection\n const apiData = nodeData as OverviewData\n setSelectedApi(apiData)\n // Clear endpoint selection when selecting API directly\n setSelectedEndpoint(null)\n setFocusedContent('API')\n\n return {\n type: 'api' as const,\n api: apiData,\n }\n } else {\n // Handle tag selection\n const tagData = nodeData as TagNodeData\n setSelectedApi(tagData.apiData)\n setSelectedEndpoint(null)\n setFocusedContent('API')\n setFocusedTag(tagData.tagName)\n\n return {\n type: 'tag' as const,\n tag: tagData.tagName,\n api: tagData.apiData,\n }\n }\n }\n\n // Select a node by its key from the tree structure\n const selectNodeByKey = (nodeKey: string): SelectionResult | null => {\n const selectedNode = findNodeByKey(builtTreeData as TreeNode[], nodeKey)\n if (selectedNode) {\n const result = handleNodeSelection(selectedNode.data, nodeKey)\n setSelectedNodeKey(nodeKey)\n return result\n }\n\n return null\n }\n\n // Expand a specific node by adding it to expanded keys\n const expandNode = (nodeKey: string) => {\n if (!expandedKeys.includes(nodeKey)) {\n setExpandedKeys([...expandedKeys, nodeKey])\n }\n }\n\n const selectPreSelectedApi = (treeData: TreeNode[], apiId: string): SelectionResult | null => {\n if (!treeData || treeData.length === 0) return null\n // Find the API node with same ID\n const apiNodeById = treeData.find(\n (node) =>\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data) &&\n node?.data?.currentVersion === apiId\n )\n\n if (apiNodeById) {\n // Collect all keys to expand at once\n const keysToExpand = [apiNodeById.key]\n\n // Also expand all tag nodes under the API (non-leaf children)\n if (apiNodeById.children) {\n apiNodeById.children.forEach((node) => {\n if (!node.isLeaf) {\n keysToExpand.push(node.key)\n }\n })\n }\n\n // Expand all keys at once to avoid state update batching issues\n setExpandedKeys([\n ...expandedKeys,\n ...keysToExpand.filter((key) => !expandedKeys.includes(key)),\n ])\n\n // Select the first API node\n return selectNodeByKey(apiNodeById.key)\n } else {\n return selectFirstApi(treeData)\n }\n\n return null\n }\n\n // Select the first API from the tree data and expand it\n const selectFirstApi = (treeData: TreeNode[]): SelectionResult | null => {\n if (!treeData || treeData.length === 0) return null\n\n // Find the first API node (should be at the top level)\n const firstApiNode = treeData.find(\n (node) =>\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n )\n\n if (firstApiNode) {\n // Collect all keys to expand at once\n const keysToExpand = [firstApiNode.key]\n\n // Also expand all tag nodes under the first API (non-leaf children)\n if (firstApiNode.children) {\n firstApiNode.children.forEach((node) => {\n if (!node.isLeaf) {\n keysToExpand.push(node.key)\n }\n })\n }\n\n // Expand all keys at once to avoid state update batching issues\n setExpandedKeys([\n ...expandedKeys,\n ...keysToExpand.filter((key) => !expandedKeys.includes(key)),\n ])\n\n // Select the first API node\n return selectNodeByKey(firstApiNode.key)\n }\n\n return null\n }\n\n // Clear all selections\n const clearSelection = () => {\n setSelectedNodeKey(null)\n setSelectedApi(null)\n setSelectedEndpoint(null)\n }\n\n return {\n handleNodeSelection,\n selectNodeByKey,\n selectFirstApi,\n clearSelection,\n expandNode,\n selectPreSelectedApi,\n }\n}\n","import React from 'react'\n\nconst Minify = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M6 11.334L8 9.33398L10 11.334\" stroke=\"currentcolor\" />\n <path d=\"M6 4.66602L8 6.66602L10 4.66602\" stroke=\"currentcolor\" />\n </svg>\n)\n\nexport default Minify\n","import React from 'react'\n\ninterface NoDataIconProps extends React.SVGProps<SVGSVGElement> {\n width?: string | number\n height?: string | number\n fill?: string\n}\n\nconst NoDataIcon: React.FC<NoDataIconProps> = ({\n width = 298,\n height = 237,\n fill = '#F1F5FD',\n stroke = '#E0E9F9',\n ...props\n}) => {\n return (\n <svg\n width={width}\n height={height}\n viewBox=\"0 0 298 237\"\n fill={fill}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M174.518 85.777C156.105 85.887 137.407 85.0293 119.917 80.1689C102.427 75.3086 86.959 66.1378 72.8969 55.4275C63.6906 48.456 55.3192 42.9139 43.3664 43.7496C31.6796 44.3644 20.5009 48.7289 11.485 56.1973C-3.71966 69.5246 -1.4126 94.1561 4.65169 111.486C13.7921 137.591 41.6087 155.713 65.2286 167.523C92.5399 181.18 122.532 189.119 152.611 193.671C178.978 197.674 212.837 200.599 235.666 183.357C256.649 167.545 262.406 131.389 257.264 106.978C256.013 99.7674 252.177 93.2616 246.476 88.68C231.733 77.9037 209.761 85.0952 193.194 85.4691C187.152 85.6011 180.802 85.755 174.518 85.777Z\"\n fill={fill}\n />\n <path\n d=\"M84.7402 0.424805V9.88152\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M80.0156 5.15332H89.4636\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M263.988 188.921V198.378\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M259.264 193.649H268.712\"\n stroke=\"#E0E9F9\"\n strokeWidth=\"0.85\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M13.3525 148.081C14.5417 148.081 15.5057 147.117 15.5057 145.926C15.5057 144.736 14.5417 143.771 13.3525 143.771C12.1633 143.771 11.1992 144.736 11.1992 145.926C11.1992 147.117 12.1633 148.081 13.3525 148.081Z\"\n fill=\"#E0E9F9\"\n />\n <path\n d=\"M196.686 10.1894C197.876 10.1894 198.84 9.22447 198.84 8.03416C198.84 6.84385 197.876 5.87891 196.686 5.87891C195.497 5.87891 194.533 6.84385 194.533 8.03416C194.533 9.22447 195.497 10.1894 196.686 10.1894Z\"\n fill=\"#E0E9F9\"\n />\n <path\n d=\"M137.01 236.425C181.545 236.425 217.648 234.18 217.648 231.411C217.648 228.641 181.545 226.396 137.01 226.396C92.4757 226.396 56.373 228.641 56.373 231.411C56.373 234.18 92.4757 236.425 137.01 236.425Z\"\n fill={fill}\n />\n <path\n d=\"M74.8972 26.1118H192.008C194.922 26.1118 197.716 27.2703 199.777 29.3325C201.837 31.3947 202.994 34.1916 202.994 37.108V176.562C202.994 179.478 201.837 182.275 199.777 184.337C197.716 186.399 194.922 187.558 192.008 187.558H59.8903C56.9766 187.558 54.1823 186.399 52.122 184.337C50.0617 182.275 48.9043 179.478 48.9043 176.562V52.3927L74.8972 26.1118Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M202.465 94.0684H81.707V188.899H202.465V94.0684Z\" fill={fill} />\n <path\n d=\"M48.9043 52.3927H70.1952C71.4443 52.3869 72.6402 51.8861 73.5214 51C74.4026 50.1139 74.8972 48.9146 74.8972 47.6643V26.1118L48.9043 52.3927Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M201.873 63.7852H82.4329C77.7852 63.7852 74.0176 67.5563 74.0176 72.2082V97.7853C74.0176 102.437 77.7852 106.208 82.4329 106.208H201.873C206.521 106.208 210.288 102.437 210.288 97.7853V72.2082C210.288 67.5563 206.521 63.7852 201.873 63.7852Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 92.397C101.273 92.397 104.558 89.1083 104.558 85.0515C104.558 80.9947 101.273 77.7061 97.2195 77.7061C93.1665 77.7061 89.8809 80.9947 89.8809 85.0515C89.8809 89.1083 93.1665 92.397 97.2195 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 92.397C124.343 92.397 127.629 89.1083 127.629 85.0515C127.629 80.9947 124.343 77.7061 120.29 77.7061C116.237 77.7061 112.951 80.9947 112.951 85.0515C112.951 89.1083 116.237 92.397 120.29 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 92.397C147.392 92.397 150.677 89.1083 150.677 85.0515C150.677 80.9947 147.392 77.7061 143.339 77.7061C139.286 77.7061 136 80.9947 136 85.0515C136 89.1083 139.286 92.397 143.339 92.397Z\"\n fill={fill}\n />\n <path\n d=\"M201.873 110.805H82.4329C77.7852 110.805 74.0176 114.576 74.0176 119.228V144.805C74.0176 149.457 77.7852 153.228 82.4329 153.228H201.873C206.521 153.228 210.288 149.457 210.288 144.805V119.228C210.288 114.576 206.521 110.805 201.873 110.805Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 139.438C101.273 139.438 104.558 136.15 104.558 132.093C104.558 128.036 101.273 124.748 97.2195 124.748C93.1665 124.748 89.8809 128.036 89.8809 132.093C89.8809 136.15 93.1665 139.438 97.2195 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 139.438C124.343 139.438 127.629 136.15 127.629 132.093C127.629 128.036 124.343 124.748 120.29 124.748C116.237 124.748 112.951 128.036 112.951 132.093C112.951 136.15 116.237 139.438 120.29 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 139.438C147.392 139.438 150.677 136.15 150.677 132.093C150.677 128.036 147.392 124.748 143.339 124.748C139.286 124.748 136 128.036 136 132.093C136 136.15 139.286 139.438 143.339 139.438Z\"\n fill={fill}\n />\n <path\n d=\"M201.873 157.846H82.4329C77.7852 157.846 74.0176 161.617 74.0176 166.269V191.846C74.0176 196.498 77.7852 200.269 82.4329 200.269H201.873C206.521 200.269 210.288 196.498 210.288 191.846V166.269C210.288 161.617 206.521 157.846 201.873 157.846Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M97.2195 186.458C101.273 186.458 104.558 183.17 104.558 179.113C104.558 175.056 101.273 171.768 97.2195 171.768C93.1665 171.768 89.8809 175.056 89.8809 179.113C89.8809 183.17 93.1665 186.458 97.2195 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M120.29 186.458C124.343 186.458 127.629 183.17 127.629 179.113C127.629 175.056 124.343 171.768 120.29 171.768C116.237 171.768 112.951 175.056 112.951 179.113C112.951 183.17 116.237 186.458 120.29 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M143.339 186.458C147.392 186.458 150.677 183.17 150.677 179.113C150.677 175.056 147.392 171.768 143.339 171.768C139.286 171.768 136 175.056 136 179.113C136 183.17 139.286 186.458 143.339 186.458Z\"\n fill={fill}\n />\n <path\n d=\"M212.923 117.908C238.079 117.908 258.471 97.4964 258.471 72.3177C258.471 47.1389 238.079 26.7275 212.923 26.7275C187.768 26.7275 167.375 47.1389 167.375 72.3177C167.375 97.4964 187.768 117.908 212.923 117.908Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M213.452 99.3023C228.05 99.3023 239.884 87.4571 239.884 72.8455C239.884 58.2338 228.05 46.3887 213.452 46.3887C198.854 46.3887 187.02 58.2338 187.02 72.8455C187.02 87.4571 198.854 99.3023 213.452 99.3023Z\"\n fill=\"white\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M199.387 58.7437C199.939 59.893 227.519 86.9245 227.519 86.9245Z\" fill=\"white\" />\n <path\n d=\"M199.387 58.7437C199.939 59.893 227.519 86.9245 227.519 86.9245\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M227.519 58.7437C226.945 59.893 199.387 86.9245 199.387 86.9245Z\" fill=\"white\" />\n <path\n d=\"M227.519 58.7437C226.945 59.893 199.387 86.9245 199.387 86.9245\"\n stroke={stroke}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nexport default NoDataIcon\n","'use client'\nimport React, { useState, useMemo } from 'react'\nimport { Input, Tree, Button, Flex, Tooltip } from 'antd'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useStore } from '@doc-lib/store'\nimport Minify from '@doc-lib/assets/Minify'\nimport {\n getAllTreeKeys,\n filterTreeData,\n getSidebarStyles,\n convertToRenderableTreeData,\n} from '../helper'\nimport Text from 'antd/es/typography/Text'\nimport { SearchOutlined } from '@ant-design/icons'\nimport { Resizable } from 're-resizable'\nimport NoDataIcon from './NoDataIcon'\n\nexport const Sidebar: React.FC<{\n searchValue: string\n setSearchValue: (text: string) => void\n}> = ({ searchValue, setSearchValue }) => {\n const expandedKeys = useStore((state) => state.view.expandedKeys)\n const { selectedNodeKey, selectedEndpoint, builtTreeData, setExpandedKeys, setSelectedNodeKey } =\n useStore(({ view }) => view)\n\n const { selectNodeByKey, clearSelection } = useNodeSelection()\n\n // Local state for expand/collapse\n\n const [autoExpandParent, setAutoExpandParent] = useState(true)\n\n const { wrapSSR, cx, token } = useStyle('Sidebar', getSidebarStyles)\n\n // Handle search with expansion logic\n const handleSearch = (value: string) => {\n if (value && builtTreeData) {\n // Get all keys that should be expanded when searching\n const allKeys = getAllTreeKeys(builtTreeData)\n setExpandedKeys(allKeys)\n setSearchValue(value)\n setAutoExpandParent(true)\n } else {\n // Clear search -> collapse all\n setSearchValue(value)\n setExpandedKeys([])\n setAutoExpandParent(false)\n }\n }\n\n // Convert tree data to renderable format\n const renderTreeData = useMemo(() => {\n if (!builtTreeData) return []\n return convertToRenderableTreeData(builtTreeData, selectedEndpoint, cx)\n }, [builtTreeData, selectedEndpoint, cx])\n\n // Memoize filtered tree data\n const filteredTreeData = useMemo(() => {\n if (!searchValue) return renderTreeData\n if (!builtTreeData) return []\n\n // Filter using original tree structure, then convert to renderable format\n const filteredOriginal = filterTreeData(builtTreeData, searchValue)\n\n return convertToRenderableTreeData(filteredOriginal, selectedEndpoint, cx)\n }, [builtTreeData, searchValue, selectedEndpoint, cx])\n\n // Handle collapse all\n const collapseAll = () => {\n setExpandedKeys([])\n }\n\n const onTreeNodeSelect = (selectedKeys: React.Key[]) => {\n const stringKeys = selectedKeys.map((key) => String(key))\n\n if (stringKeys.length === 0) {\n clearSelection()\n return\n }\n\n if (!builtTreeData) return\n\n const selectedKey = stringKeys[0]\n selectNodeByKey(selectedKey)\n setSelectedNodeKey(selectedKey)\n }\n\n return wrapSSR(\n <Resizable\n as={'aside'}\n minWidth={240}\n maxWidth={240}\n enable={{\n top: false,\n right: true,\n bottom: false,\n left: false,\n topRight: false,\n bottomRight: false,\n bottomLeft: false,\n topLeft: false,\n }}\n defaultSize={{\n width: 240,\n height: '100%',\n }}\n className={cx('sider')}\n >\n <div className={cx('content')}>\n <div className={cx('controls')}>\n <Tooltip title=\"Search by APIs or Endpoints\" placement=\"bottom\">\n <Input\n placeholder=\"Search by APIs or Endpoints\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n allowClear\n className={cx('search-input')}\n addonAfter={<SearchOutlined />}\n />\n </Tooltip>\n <Tooltip title=\"Collapse All\" placement=\"bottom\">\n <Button onClick={collapseAll} title=\"Collapse All\" icon={<Minify />} />\n </Tooltip>\n </div>\n {filteredTreeData?.length ? (\n <Tree\n showLine={{ showLeafIcon: false }}\n showIcon={false}\n expandedKeys={expandedKeys}\n autoExpandParent={autoExpandParent}\n selectedKeys={[selectedNodeKey || '']}\n onSelect={(selectedKeys) => {\n // Don't allow to deselect a node\n if (!selectedKeys?.length) return\n onTreeNodeSelect(selectedKeys)\n setSelectedNodeKey(selectedKeys[0] as string)\n }}\n onExpand={(expandedKeysValue) => {\n setExpandedKeys(expandedKeysValue as string[])\n setAutoExpandParent(false)\n }}\n treeData={filteredTreeData}\n className={cx('tree')}\n />\n ) : (\n <Flex\n justify=\"center\"\n align=\"center\"\n gap={token.marginSM}\n vertical\n style={{ marginTop: token.paddingXL }}\n >\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'10.375rem'}\n height={'8.1875rem'}\n />\n {searchValue.length ? (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: 'rgba(0,0,0,0.45)',\n }}\n >\n No results found\n </Text>\n ) : (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: 'rgba(0,0,0,0.45)',\n }}\n >\n No API\n <br />\n Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n </Resizable>\n )\n}\n","import React from 'react'\n\nconst Link = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M3.875 9.25C2.085 9.25 0.625 7.79 0.625 6C0.625 4.21 2.085 2.75 3.875 2.75C4.08 2.75 4.25 2.92 4.25 3.125C4.25 3.33 4.08 3.5 3.875 3.5C2.495 3.5 1.375 4.62 1.375 6C1.375 7.38 2.495 8.5 3.875 8.5C5.255 8.5 6.375 7.38 6.375 6C6.375 5.795 6.545 5.625 6.75 5.625C6.955 5.625 7.125 5.795 7.125 6C7.125 7.79 5.665 9.25 3.875 9.25Z\" fill=\"#4D75D9\" />\n <path d=\"M8 9.375C7.795 9.375 7.625 9.205 7.625 9C7.625 8.795 7.795 8.625 8 8.625C9.445 8.625 10.625 7.445 10.625 6C10.625 4.555 9.445 3.375 8 3.375C6.555 3.375 5.375 4.555 5.375 6C5.375 6.205 5.205 6.375 5 6.375C4.795 6.375 4.625 6.205 4.625 6C4.625 4.14 6.14 2.625 8 2.625C9.86 2.625 11.375 4.14 11.375 6C11.375 7.86 9.86 9.375 8 9.375Z\" fill=\"#4D75D9\" />\n </svg>\n)\n\nexport default Link\n","import { useStyle } from '@doc-lib/hooks/useStyle'\nimport { EndpointData } from '@doc-lib/view/entities'\nimport { methodColors } from '@doc-lib/view/helper'\nimport { Button, Card, Divider, Flex } from 'antd'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport LinkIcon from '@doc-lib/assets/link'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\n\ninterface IAPICard {\n viewStyle: 'grid' | 'list'\n api: EndpointData\n}\n\nconst ApiCard = ({ api, viewStyle }: IAPICard) => {\n const { wrapSSR, cx, token } = useStyle('DocumentationApiCard', (token, scope) => ({\n [scope('method-chip')]: {\n minWidth: '5.375rem',\n width: 'fit-content',\n paddingLeft: token.marginXS,\n paddingRight: token.marginXS,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: token.borderRadius,\n },\n [scope('list-container')]: { paddingTop: token.marginXS, paddingBottom: token.marginXS },\n [scope('chip-title')]: {\n alignSelf: 'center',\n textAlign: 'center',\n padding: 0,\n margin: 0,\n lineHeight: '1.375rem',\n fontSize: token.fontSize,\n },\n [scope('list-see-details')]: {\n width: '6.5625rem',\n height: '2rem',\n borderRadius: token.borderRadius,\n border: `${token.lineWidth}px solid ${token.Button?.defaultBorderColor}`,\n paddingRight: token.Button?.paddingInline,\n paddingLeft: token.Button?.paddingInline,\n background: token.Button?.defaultBg,\n '&:hover': {\n background: token.Button?.defaultBg,\n },\n },\n [scope('list-content')]: {\n display: 'flex',\n paddingTop: token.paddingXXS,\n paddingBottom: token.paddingXXS,\n paddingRight: token.paddingXS,\n paddingLeft: token.paddingXS,\n alignItems: 'center',\n gap: token.marginXS,\n alignSelf: 'stretch',\n flexDirection: 'row',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.colorBorderSecondary}`,\n minWidth: '6.25rem',\n maxWidth: '100%',\n svg: {\n path: {\n fill: '#4D75D9',\n },\n },\n },\n [scope('list-title')]: {\n color: token.colorTextHeading,\n fontSize: token.fontSizeHeading3,\n fontWeight: token.fontWeightStrong,\n lineHeight: token.lineHeightHeading3,\n paddingBottom: 0,\n marginBottom: 0,\n fontFamily: token.fontFamily,\n cursor: 'pointer',\n transition: 'color 0.2s ease-in',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n\n '&:hover': {\n color: `${token.colorPrimary} !important`,\n textDecoration: 'underline',\n },\n },\n [scope('path-name')]: {\n color: token.colorText,\n fontSize: token.fontSizeSM,\n fontWeight: 400,\n fontFamily: token.fontFamily,\n },\n [scope('grid-card')]: {\n width: '100%',\n borderRadius: token.borderRadiusLG,\n },\n [scope('grid-title')]: {\n color: token.colorTextHeading,\n fontSize: token.fontSizeHeading3,\n fontWeight: token.fontWeightStrong,\n lineHeight: token.lineHeightHeading3,\n paddingBottom: 0,\n marginBottom: 0,\n fontFamily: token.fontFamily,\n },\n [scope('grid-content')]: {\n display: 'flex',\n paddingTop: token.paddingXXS,\n paddingBottom: token.paddingXXS,\n paddingRight: token.paddingXS,\n paddingLeft: token.paddingXS,\n alignItems: 'center',\n gap: token.marginXS,\n alignSelf: 'stretch',\n flexDirection: 'row',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.colorBorderSecondary}`,\n svg: {\n path: {\n fill: '#4D75D9',\n },\n },\n },\n [scope('grid-path-name')]: {\n color: token.colorText,\n fontSize: token.fontSizeSM,\n fontWeight: 400,\n fontFamily: token.fontFamily,\n },\n [scope('grid-see-details')]: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: '0.4375rem',\n paddingRight: '0.4375rem',\n borderRadius: token.borderRadiusSM,\n border: `1px solid ${token.Button?.defaultBorderColor}`,\n background: token.Button?.defaultBg,\n boxShadow: `0 2px 0 0 rgba(0, 0, 0, 0.02)`,\n width: '100%',\n height: '1.5rem',\n },\n }))\n\n const { selectNodeByKey } = useNodeSelection()\n\n const handleOpenEndPointView = () => {\n selectNodeByKey(api.id)\n }\n\n\n\n const MethodChip = ({ method }: { method: string }) => {\n const methodStyle = methodColors[method as keyof typeof methodColors]\n return (\n <div\n className={cx('method-chip')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n <Title style={{ color: methodStyle?.color }} className={cx('chip-title')} level={5}>\n {method}\n </Title>\n </div>\n )\n }\n\n if (viewStyle == 'list') {\n return wrapSSR(\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" className={cx('list-container')}>\n <Flex gap={token.marginSM} style={{ minWidth: 0 }}>\n <MethodChip method={api.method} />\n <Title className={cx('list-title')} level={4} onClick={handleOpenEndPointView}>\n <OverflowTooltip title={api?.summary || 'Endpoint Name'} placement=\"bottomLeft\">\n {api?.summary || 'Endpoint Name'}\n </OverflowTooltip>\n </Title>\n </Flex>\n <Button className={cx('list-see-details')} onClick={handleOpenEndPointView}>\n See Details\n </Button>\n </Flex>\n <div className={cx('list-content')}>\n <LinkIcon />\n <Text className={cx('path-name')}>{api?.path}</Text>\n </div>\n <Divider style={{ marginTop: '0.75rem', marginBottom: '0.25rem' }} />\n </Flex>\n )\n }\n\n return wrapSSR(\n <Card className={cx('grid-card')}>\n <Flex vertical gap={token.marginSM}>\n <MethodChip method={api?.method} />\n <Title className={cx('grid-title')} level={4}>\n <OverflowTooltip title={api?.summary || 'Endpoint Name'} placement=\"bottomLeft\">\n {api?.summary || 'Endpoint Name'}\n </OverflowTooltip>\n </Title>\n <div className={cx('grid-content')}>\n <LinkIcon />\n <Text className={cx('grid-path-name')}>{api?.path}</Text>\n </div>\n <Button className={cx('grid-see-details')} onClick={handleOpenEndPointView}>\n See Details\n </Button>\n </Flex>\n </Card>\n )\n}\n\nexport default ApiCard\n","import type { FC } from 'react'\nimport { Button, Typography } from 'antd'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\nimport {\n SafetyOutlined,\n InfoCircleOutlined,\n DownOutlined,\n AppstoreOutlined,\n BarsOutlined,\n} from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport type { OverviewData } from '@doc-lib/view/entities'\n\ninterface ViewModeApiHeaderProps {\n api: OverviewData\n viewLayout: 'grid' | 'list'\n onViewLayoutChange: (layout: 'grid' | 'list') => void\n}\n\nfunction formatAuthType(authType?: string): string {\n if (!authType) return 'Keyless'\n switch (authType.toUpperCase()) {\n case 'OAUTH':\n case 'OAUTH2':\n return 'OAuth'\n case 'BASIC':\n return 'Basic'\n case 'KEYLESS':\n return 'Keyless'\n default:\n return 'Keyless'\n }\n}\n\nexport const ViewModeApiHeader: FC<ViewModeApiHeaderProps> = ({\n api,\n viewLayout,\n onViewLayoutChange,\n}) => {\n const { wrapSSR, cx } = useStyle('ViewModeApiHeader', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n },\n [scope('meta-bar')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('meta-left')]: {\n display: 'flex',\n alignItems: 'center',\n },\n [scope('item')]: {\n display: 'flex',\n alignItems: 'center',\n paddingRight: 12,\n borderRight: `1px solid ${token.colorBorderSecondary}`,\n marginRight: 12,\n },\n // Fix 1 — JWS Supported: custom div with brand colors\n [scope('jws-tag')]: {\n display: 'flex',\n alignItems: 'center',\n height: 32,\n background: token.colorPrimaryBg,\n border: `1px solid ${token.colorPrimaryBorder}`,\n borderRadius: 6,\n padding: '0 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorPrimary,\n fontWeight: 400,\n margin: 0,\n },\n // Fix 2 — Auth type: custom div, border-radius 4px, colorBgContainer bg\n [scope('auth-tag')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n background: token.colorBgContainer,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 4,\n padding: '0 8px',\n height: 32,\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n margin: 0,\n boxSizing: 'border-box' as const,\n },\n [scope('auth-icon')]: {\n fontSize: 12,\n display: 'flex',\n alignItems: 'center',\n },\n // Fix 3 — Version: custom div, not Ant Button\n [scope('version-box')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n background: token.colorFillTertiary,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 6,\n padding: '0 15px',\n height: 32,\n cursor: 'not-allowed',\n boxSizing: 'border-box' as const,\n },\n [scope('version-icon')]: {\n fontSize: 16,\n color: token.colorTextDisabled,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('version-text')]: {\n fontSize: 14,\n color: token.colorTextDisabled,\n fontWeight: 400,\n lineHeight: 1,\n },\n [scope('view-toggle')]: {\n display: 'flex',\n },\n [scope('toggle-btn')]: {\n width: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('toggle-btn-active')]: {\n border: `1px solid ${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n backgroundColor: `${token.colorBgContainer} !important`,\n zIndex: 1,\n },\n [scope('description')]: {\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n },\n }))\n\n const version =\n api.relatedVersions?.find((v) => v.apiId === api.currentVersion)?.version || api.version\n\n return wrapSSR(\n <div className={cx('root')}>\n {/* Row 1: Title */}\n <OverflowTooltip title={api.title}>\n <Typography.Title\n level={4}\n className={cx('title')}\n ellipsis\n style={{ margin: 0, fontSize: 20, fontWeight: 600 }}\n >\n {api.title}\n </Typography.Title>\n </OverflowTooltip>\n\n {/* Row 2: Meta bar */}\n <div className={cx('meta-bar')}>\n <div className={cx('meta-left')}>\n {/* Fix 1 — JWS Supported (conditional, custom div) */}\n {api.jwsEnabled && (\n <div className={cx('item')}>\n <div className={cx('jws-tag')}>JWS Supported</div>\n </div>\n )}\n\n {/* Fix 2 — Auth type (custom div) */}\n <div className={cx('item')}>\n <div className={cx('auth-tag')}>\n <span className={cx('auth-icon')}>\n <SafetyOutlined />\n </span>\n {formatAuthType(api.authType)}\n </div>\n </div>\n\n {/* Fix 3 — Version (custom div, not Button) */}\n <div className={cx('item')}>\n <div className={cx('version-box')}>\n <span className={cx('version-icon')}>\n <InfoCircleOutlined />\n </span>\n <span className={cx('version-text')}>{version}</span>\n <span className={cx('version-icon')}>\n <DownOutlined />\n </span>\n </div>\n </div>\n </div>\n\n {/* View layout toggle: grid / list */}\n <div className={cx('view-toggle')}>\n <Button\n className={cx('toggle-btn', viewLayout === 'grid' ? 'toggle-btn-active' : '')}\n icon={<AppstoreOutlined />}\n onClick={() => onViewLayoutChange('grid')}\n style={{ borderRadius: '4px 0 0 4px' }}\n />\n <Button\n className={cx('toggle-btn', viewLayout === 'list' ? 'toggle-btn-active' : '')}\n icon={<BarsOutlined />}\n onClick={() => onViewLayoutChange('list')}\n style={{ borderRadius: '0 4px 4px 0', marginLeft: -1 }}\n />\n </div>\n </div>\n\n {/* Row 3: Description (only if present) */}\n {api.description && (\n <Typography.Text className={cx('description')}>{api.description}</Typography.Text>\n )}\n </div>\n )\n}\n","'use client'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { Col, Divider, Flex, Row } from 'antd'\nimport Title from 'antd/es/typography/Title'\nimport useStore from '@doc-lib/store'\nimport { OverviewData } from '@doc-lib/view/entities'\nimport ApiCard from './components/ApiCard'\nimport { ViewModeApiHeader } from './components/ViewModeApiHeader'\nimport { useEffect, useMemo, useState } from 'react'\n\nexport const APIPage = ({ apiOverride }: { apiOverride?: OverviewData | null }) => {\n const [selectedUrl, setSelectedUrl] = useState<string>('')\n const {\n view: {\n selectedApi,\n focusedTag,\n setFocusedTag,\n },\n } = useStore()\n const [viewStyle, setViewStyle] = useState<'grid' | 'list'>('grid')\n const { wrapSSR, token } = useStyle('DocumentationApiPage', () => ({}))\n\n const urlsOptions = useMemo(\n () =>\n selectedApi?.servers?.map((server) => ({\n label: server?.url,\n value: server?.url,\n })),\n [selectedApi?.servers]\n )\n\n useEffect(() => {\n if (focusedTag && document.getElementById(focusedTag)) {\n const element = document.getElementById(focusedTag)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' }) // or \"auto\"\n }\n setFocusedTag(null)\n }\n }, [focusedTag, setFocusedTag, selectedApi])\n\n useEffect(() => {\n if (!!urlsOptions?.length) {\n setSelectedUrl(urlsOptions[0]?.value)\n }\n }, [selectedApi, urlsOptions])\n\n useEffect(() => {\n if (selectedApi?.servers && !selectedUrl) {\n setSelectedUrl(selectedApi?.servers?.[0].url)\n }\n }, [selectedApi?.servers])\n\n // 🔹 Map endpoints with curl commands by selectedUrl\n const getEndpointsForSelectedUrl = () => {\n if (!selectedApi) return {}\n\n const tags = selectedApi.tags || {}\n const curl = selectedApi.curl || []\n\n const filtered: typeof tags = {}\n\n Object.keys(tags).forEach((tagKey) => {\n filtered[tagKey] = tags[tagKey].map((endpoint) => {\n const curlMatch = curl.find(\n (c: any) =>\n c.serverUrl === selectedUrl && c.method === endpoint.method && c.path === endpoint.path\n )\n return {\n ...endpoint,\n curlCommand: curlMatch?.curlCommand || null,\n }\n })\n })\n\n return filtered\n }\n\n return wrapSSR(\n <Flex vertical gap={token.margin}>\n {selectedApi && (\n <ViewModeApiHeader\n api={apiOverride ?? selectedApi}\n viewLayout={viewStyle}\n onViewLayoutChange={setViewStyle}\n />\n )}\n {Object.entries(getEndpointsForSelectedUrl())\n .sort(([a], [b]) => {\n if (a.toLowerCase() === 'default') return 1\n if (b.toLowerCase() === 'default') return -1\n return 0\n })\n .map(([key, endpoints], index, arr) => {\n const isDefaultTag = key.toLowerCase() === 'default'\n const showTitle = !isDefaultTag || arr.length > 1\n\n return (\n <APIsRenderer\n key={`${selectedApi?.id}_${key}`}\n apis={endpoints}\n tagName={key}\n withTitle={showTitle}\n haveUnderLine={index < arr.length - 1}\n contextPath={selectedApi?.contextPath}\n viewStyle={viewStyle}\n token={token}\n />\n )\n })}\n </Flex>\n )\n}\n\ninterface APIsRendererProps {\n apis: OverviewData['tags']['default']\n withTitle?: boolean\n tagName: string\n haveUnderLine?: boolean\n contextPath?: string\n viewStyle: 'grid' | 'list'\n token: any\n}\n\nconst APIsRenderer = ({\n apis,\n withTitle,\n tagName,\n haveUnderLine,\n contextPath,\n viewStyle,\n token,\n}: APIsRendererProps) => {\n return (\n <Flex\n key={`${tagName}_renderer_${contextPath}`}\n gap={viewStyle === 'grid' ? token.marginXS : 0}\n style={{ marginBottom: 0, paddingBottom: 0 }}\n vertical\n >\n {withTitle && (\n <Title id={tagName} style={{ marginBottom: 0 }} level={4}>\n {tagName}\n </Title>\n )}\n {viewStyle === 'grid' ? (\n <Row gutter={[24, 24]}>\n {apis.map((item) => (\n <Col\n key={`${tagName}_renderer_${item.id}_${item.method}_${item.path}`}\n xs={24}\n sm={24}\n md={12}\n lg={8}\n xl={8}\n >\n <ApiCard api={item} viewStyle={viewStyle} />\n </Col>\n ))}\n </Row>\n ) : (\n <Flex vertical>\n {apis.map((item) => (\n <ApiCard\n key={`${tagName}_renderer_${item.id}_${item.method}_${item.path}`}\n api={item}\n viewStyle={viewStyle}\n />\n ))}\n </Flex>\n )}\n {haveUnderLine && (\n <Divider style={{ marginTop: token.marginSM, marginBottom: token.marginSM }} />\n )}\n </Flex>\n )\n}\n\n","import { Schema } from '../types/OpenApi'\n\nexport function generateExampleFromSchema(schema: Schema | undefined): any {\n if (!schema) return null\n\n // 1. Direct example on the schema itself\n if (schema.example !== undefined) {\n return schema.example\n }\n if (schema.examples !== undefined) {\n return Array.isArray(schema.examples) ? schema.examples[0] : schema.examples\n }\n\n // 2. Object with properties\n if (schema.properties) {\n const result: Record<string, any> = {}\n for (const [key, prop] of Object.entries(schema.properties)) {\n result[key] = generateExampleFromSchema(prop)\n }\n return result\n }\n\n // 3. Array type\n if (schema.type === 'array' && schema.items) {\n return [generateExampleFromSchema(schema.items)]\n }\n\n // 4. Enum fallback\n if (schema.enum && schema.enum.length > 0) {\n return schema.enum[0]\n }\n\n // 5. Type-based defaults\n switch (schema.type) {\n case 'string':\n return 'string'\n case 'integer':\n case 'number':\n return 0\n case 'boolean':\n return false\n case 'array':\n return []\n case 'object':\n return {}\n default:\n return null\n }\n}\n\nexport function hasAnyExample(schema: Schema | undefined): boolean {\n if (!schema) return false\n if (schema.example !== undefined || schema.examples !== undefined) return true\n if (schema.properties) {\n return Object.values(schema.properties).some(hasAnyExample)\n }\n if (schema.type === 'array' && schema.items) {\n return hasAnyExample(schema.items)\n }\n return false\n}\n","export const handleStatusColor = (code: number): string => {\n if (code >= 200 && code < 300) {\n return 'green' // 2xx codes\n } else if (code >= 400 && code < 500) {\n return 'red' // 4xx codes\n } else if (code >= 500 && code < 600) {\n return 'red' // 5xx codes\n } else if (code >= 100 && code < 200) {\n return 'blue' // 1xx codes (Informational)\n } else if (code >= 300 && code < 400) {\n return 'orange' // 3xx codes (Redirection)\n } else {\n return 'gray' // Default or invalid status codes\n }\n}\n\nexport const copyToClipboard = async (text: string) => {\n try {\n await navigator.clipboard.writeText(text)\n return;\n } catch (err) {\n return err\n }\n}\n\nexport { generateExampleFromSchema, hasAnyExample } from './generateExampleFromSchema'\n","'use client'\nimport React, { useState } from 'react'\nimport { Typography, Table, Tag, Card, Select, Breadcrumb, Button, Tabs, Tooltip } from 'antd'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { LeftOutlined } from '@ant-design/icons'\nimport useStore from '@doc-lib/store'\nimport { methodColors } from '@doc-lib/view/helper'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { copyToClipboard, handleStatusColor } from '@doc-lib/utils'\n\nconst { Title, Paragraph } = Typography\n\n// Table column definitions\nconst requestColumns = [\n { title: 'Parameter', dataIndex: 'param', key: 'param' },\n { title: 'Description', dataIndex: 'desc', key: 'desc' },\n { title: 'Enum', dataIndex: 'enum', key: 'enum' },\n]\n\nconst responseColumns = [...requestColumns]\n\n// Helper to build table rows from OpenAPI params\ntype ParamColors = { typeLabel: string; required: string; optional: string }\n\nconst buildRequestData = (params: any[], colors: ParamColors) =>\n [...params]\n .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map((p, index) => {\n let typeLabel = p.schema?.type\n if (p.schema?.type === 'array' && p.schema?.items?.type) {\n typeLabel = `${p.schema.type}_${p.schema.items.type}`\n }\n\n return {\n key: index,\n param: (\n <span>\n {p.name}\n {typeLabel && (\n <span\n style={{\n color: colors.typeLabel,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {p.required ? (\n <span style={{ color: colors.required }}>*</span>\n ) : (\n <span style={{ color: colors.optional }}>Optional</span>\n )}\n </span>\n ),\n desc: p.description || '--',\n enum: (p.schema?.enum ?? p.schema?.items?.enum)\n ? (p.schema?.enum ?? p.schema?.items?.enum).map((e: string) => <Tag key={e}>{e}</Tag>)\n : '--',\n }\n })\n\n// Build response rows from headers\nconst buildHeaderData = (headers: any, colors: ParamColors) => {\n if (!headers) return []\n return Object.entries(headers)\n .sort(([, a]: any, [, b]: any) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map(([name, header]: any, idx) => {\n let typeLabel = header.schema?.type\n if (header.schema?.type === 'array' && header.schema?.items?.type) {\n typeLabel = `${header.schema.type}_${header.schema.items.type}`\n }\n\n return {\n key: idx,\n param: (\n <span key={idx}>\n {name}\n {typeLabel && (\n <span\n style={{\n color: colors.typeLabel,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {header.required ? (\n <span style={{ color: colors.required }}>*</span>\n ) : (\n <span style={{ color: colors.optional }}>Optional</span>\n )}\n </span>\n ),\n desc: header.description || '--',\n enum: (header.schema?.enum ?? header.schema?.items?.enum)\n ? (header.schema?.enum ?? header.schema?.items?.enum).map((e: string) => <Tag key={e}>{e}</Tag>)\n : '--',\n }\n })\n}\n\nexport const EndpointPage: React.FC = () => {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n setSelectedNodeKey,\n setFocusedContent,\n setFocusedTag,\n } = useStore(({ view }) => view)\n const [endpointTooltip, setEndpointTooltip] = useState('Copy endpoint')\n const [selectedServer, setSelectedServer] = useState(0)\n\n const { cx, token } = useStyle('EndpointPage', (token, scope) => ({\n [scope('docs-endpoint-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n },\n [scope('content')]: {\n width: '100%',\n },\n [scope('code')]: {\n background: 'unset',\n borderRadius: token.borderRadius,\n padding: token.paddingSM,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n },\n [scope('breadcrumb')]: {\n display: 'flex',\n gap: token.marginLG,\n alignItems: 'center',\n marginBottom: token.marginLG,\n },\n [scope('request-card')]: {\n '.ant-card-head': {\n minHeight: 'unset',\n borderBottom: 'unset',\n padding: '0.75rem',\n },\n '.ant-card-body': {\n padding: '0px 0.75rem 0.75rem 0.75rem',\n '.ant-tabs-tab': {\n paddingTop: '0',\n },\n },\n },\n [scope('row-odd')]: {\n '& > td': { background: `${token.colorBgLayout} !important` },\n },\n [scope('row-even')]: {\n '& > td': { background: `${token.colorBgContainer} !important` },\n },\n }))\n\n const methodStyle = methodColors[selectedEndpoint?.method as keyof typeof methodColors]\n const paramColors: ParamColors = {\n typeLabel: token.colorTextQuaternary,\n required: token.colorError,\n optional: token.colorSuccess,\n }\n const headerParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'header') || [],\n paramColors\n )\n const pathParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'path') || [],\n paramColors\n )\n const queryParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'query') || [],\n paramColors\n )\n type RequestTab = { key: string; label: string; children: any }\n\n const requestTabs: RequestTab[] = [\n {\n key: 'header',\n label: 'Header',\n children: (\n <Table\n columns={requestColumns}\n dataSource={headerParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n {\n key: 'path',\n label: 'Path',\n children: (\n <Table\n columns={requestColumns}\n dataSource={pathParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n {\n key: 'query',\n label: 'Query',\n children: (\n <Table\n columns={requestColumns}\n dataSource={queryParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n ),\n },\n ].filter((t): t is RequestTab => t !== null)\n\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode || 200]\n const responseHeaders = responseObj?.headers\n\n const responseHeaderData = buildHeaderData(responseHeaders, paramColors)\n\n const serverOptions =\n selectedApi?.servers?.map((server: any, index: number) => ({\n value: index,\n label: `${server.url}${selectedEndpoint?.path || ''}`,\n })) || []\n\n const getFullEndpointUrl = () => {\n if (!selectedApi?.servers || !selectedApi.servers[selectedServer]) return ''\n\n const server = selectedApi.servers[selectedServer]\n return `${server.url}${selectedEndpoint?.path || ''}`\n }\n\n return (\n <div className={cx('docs-endpoint-container')}>\n {/* Main Content */}\n <div className={cx('content')}>\n {/* Header */}\n <div className={cx('breadcrumb')}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n icon={<LeftOutlined />}\n onClick={(e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n }}\n ></Button>\n\n <Breadcrumb\n items={[\n {\n href: '',\n title: <span>{selectedApi?.title || 'API Name'}</span>,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n },\n },\n {\n href: ``,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n setFocusedTag(selectedEndpoint?.tagName || 'default')\n },\n title: (\n <p\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: token.colorTextQuaternary,\n gap: '0.25rem',\n }}\n >\n <span>{selectedEndpoint?.tagName || 'default'}</span>\n </p>\n ),\n },\n {\n title: (\n <span style={{ display: 'flex', gap: '1rem' }}>\n {selectedEndpoint?.summary || 'Endpoint Name'}\n </span>\n ),\n },\n ]}\n />\n </div>\n <Title level={3}>\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n width: '4.375rem',\n height: '1.375rem',\n textAlign: 'center'\n }}\n >\n {selectedEndpoint?.method}\n </Tag>{' '}\n {selectedEndpoint?.summary?.replace(selectedEndpoint?.method, '') ?? '--'}\n </Title>\n {/* <Paragraph>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <Select\n value={selectedServer}\n style={{ width: '100%' }}\n onChange={(value) => setSelectedServer(value)}\n prefix={\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n }\n options={serverOptions}\n disabled={serverOptions.length === 0}\n suffixIcon={serverOptions.length > 1 ? undefined : false}\n />\n <Tooltip title={endpointTooltip}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n onClick={() => {\n const fullUrl = getFullEndpointUrl()\n if (fullUrl) {\n copyToClipboard(fullUrl)\n setEndpointTooltip('Copied!')\n setTimeout(() => setEndpointTooltip('Copy endpoint'), 1500)\n }\n }}\n icon={<CopyOutlined />}\n />\n </Tooltip>\n </div>\n </Paragraph> */}\n <Paragraph style={{ color: 'rgba(0,0,0,0.45)', marginBottom: '1.5rem' }}>\n {selectedEndpoint?.description ?? '--'}\n </Paragraph>\n\n {/* Request Section */}\n {requestTabs.length > 0 && (\n <Card title=\"Request\" className={cx('request-card')} style={{ marginBottom: '1.5rem' }}>\n <Tabs defaultActiveKey={requestTabs[0].key} items={requestTabs} />\n </Card>\n )}\n\n {/* Response Section */}\n\n <Card\n title=\"Response\"\n className={cx('request-card')}\n extra={\n responseHeaderData.length > 0 && (\n <Tag>\n <span\n style={{\n background: handleStatusColor(selectedStatusCode as number),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n marginRight: '0.5rem',\n }}\n ></span>\n <span>{selectedStatusCode}</span>\n </Tag>\n )\n }\n >\n <Table\n columns={responseColumns}\n dataSource={responseHeaderData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-odd' : 'row-even')}\n />\n </Card>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nconst MouseSquare = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M16.5 9V6.75C16.5 3 15 1.5 11.25 1.5H6.75C3 1.5 1.5 3 1.5 6.75V11.25C1.5 15 3 16.5 6.75 16.5H9\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.7202 13.3808L14.4978 13.7934C14.1603 13.9059 13.8902 14.1684 13.7777 14.5134L13.3652 15.7359C13.0127 16.7934 11.5277 16.7709 11.1977 15.7134L9.81025 11.2508C9.54025 10.3658 10.3577 9.54085 11.2352 9.81835L15.7053 11.2059C16.7553 11.5359 16.7702 13.0283 15.7202 13.3808Z\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default MouseSquare\n","'use client'\nimport React from 'react'\nimport { useStyle } from '../../hooks/useStyle'\nimport { APIPage } from './ApiPage'\nimport { EndpointPage } from './EndpointPage/EndpointPage'\nimport useStore from '@doc-lib/store'\nimport { Button, Flex } from 'antd'\nimport NoDataIcon from './NoDataIcon'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport MouseSquareIcon from '@doc-lib/assets/mouseSquare'\n\nexport const MainContent: React.FC<{\n searchEnabled: boolean\n handleResetSearch: () => void\n handleVisitLandingPage?: () => void\n}> = ({ searchEnabled, handleResetSearch, handleVisitLandingPage }) => {\n const { focusedContent, transformedData } = useStore(({ view }) => view)\n const { wrapSSR, cx, token } = useStyle('MainContent', (token, scope) => ({\n [scope('inner-doc-container')]: {\n backgroundColor: token.colorBgContainer,\n flex: 1,\n minWidth: 0,\n height: '100%',\n overflow: 'auto',\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n },\n [scope('centered')]: {\n display: 'flex',\n justifyContent: 'center',\n },\n [scope('no-space')]: {\n margin: 0,\n padding: 0,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n fontWeight: 600,\n fontSize: token.fontSizeHeading4,\n color: 'rgba(0, 0, 0, 0.88)',\n },\n [scope('text')]: {\n color: 'rgba(0, 0, 0, 0.88)',\n fontFamily: token.fontFamily,\n },\n [scope('visit-landing-button')]: {\n width: '12.25rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n },\n [scope('reset-button')]: {\n width: '8.125rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n backgroundColor: token?.Button?.primaryColor,\n fontSize: token.Button?.contentFontSizeLG,\n },\n }))\n\n return wrapSSR(\n <div className={cx('inner-doc-container', !transformedData?.length ? 'centered' : '')}>\n {!transformedData?.length ? (\n <Flex justify=\"center\" align=\"center\" gap={'1.5rem'} vertical flex={1}>\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'18.625rem'}\n height={'14.75rem'}\n />\n <Flex justify=\"center\" align=\"center\" gap={'0.5rem'} vertical>\n <Title className={cx('no-space', 'title')} level={4}>\n {!searchEnabled ? 'No API Documentation Found' : 'No results found'}\n </Title>\n <Text className={cx('no-space', 'text')}>\n {!searchEnabled\n ? 'No API Documentation has been added yet. Contact admin for support.'\n : 'Adjust your Search and try again'}\n </Text>\n </Flex>\n {!searchEnabled ? (\n <Button\n type=\"primary\"\n onClick={handleVisitLandingPage}\n icon={<MouseSquareIcon />}\n iconPosition=\"start\"\n className={cx('visit-landing-button')}\n >\n Visit Landing Page\n </Button>\n ) : (\n <Button type=\"default\" className={cx('reset-button')} onClick={handleResetSearch}>\n Reset Search\n </Button>\n )}\n </Flex>\n ) : focusedContent === 'ENDPOINT' ? (\n <EndpointPage />\n ) : (\n <APIPage />\n )}\n </div>\n )\n}\n","import { EditOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { Button, Grid, Typography } from 'antd'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\n\nconst { useBreakpoint } = Grid\nconst { Title } = Typography\n\ninterface ApiDocumentationBarProps {\n apiName: string\n mode: 'edit' | 'view'\n onModeChange: (mode: 'edit' | 'view') => void\n onReset: () => void\n onSave: () => void\n hasChanges?: boolean\n hasErrors?: boolean\n switcherNode?: React.ReactNode\n}\n\nexport const ApiDocumentationBar = ({\n apiName,\n mode,\n onModeChange,\n onReset,\n onSave,\n hasChanges = false,\n hasErrors = false,\n switcherNode,\n}: ApiDocumentationBarProps) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const { wrapSSR, cx, token } = useStyle('ApiDocumentationBar', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginSM + 4}px ${token.paddingLG}px`, // 12px 24px\n background: token.colorBgContainer,\n borderRadius: token.borderRadius,\n width: '100%',\n ['@media (max-width: 640px)']: {\n padding: `${token.marginSM}px ${token.marginMD}px`, // 12px 16px\n },\n },\n [scope('mobileWrapper')]: {\n flexDirection: 'column',\n gap: 16, // 16px (updated from token.marginSM per Figma)\n },\n [scope('mobileTopRow')]: {\n width: '100%',\n display: 'flex',\n justifyContent: 'flex-start',\n },\n [scope('desktopRow')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('mobileBottomRow')]: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n [scope('title-section')]: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM, // 12px\n minWidth: 0,\n overflow: 'hidden',\n },\n [scope('arrow-icon')]: {\n width: 24,\n height: 24,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: token.colorText,\n },\n [scope('switcher')]: {\n display: 'flex',\n alignItems: 'center',\n background: token.colorBgLayout,\n padding: '4px 4px',\n borderRadius: token.borderRadius,\n gap: 8,\n },\n [scope('switcher-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n fontSize: token.fontSizeLG,\n fontWeight: 400,\n color: token.colorText,\n fontFamily: token.fontFamily,\n transition: 'all 0.2s ease',\n },\n [scope('switcher-item-active')]: {\n background: token.colorBgContainer,\n borderRadius: token.borderRadius, // 8px\n boxShadow: '0px 2px 4px -2px rgba(17,12,34,0.12)', // Figma specs\n fontSize: token.fontSize,\n fontWeight: 700,\n },\n [scope('switcher-icon')]: {\n width: 18,\n height: 18,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 18,\n },\n [scope('actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n flex: 1,\n justifyContent: 'flex-end',\n },\n [scope('mobileActions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n justifyContent: 'flex-end',\n },\n }))\n\n // Mobile layout\n if (isMobile) {\n return wrapSSR(\n <div className={cx('root', 'mobileWrapper')}>\n {switcherNode && <div className={cx('mobileTopRow')}>{switcherNode}</div>}\n <div className={cx('mobileBottomRow')}>\n <div className={cx('title-section')}>\n <OverflowTooltip title={apiName}>\n <Title\n level={3}\n style={{\n margin: 0,\n fontWeight: 600,\n color: token.colorTextHeading,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {apiName}\n </Title>\n </OverflowTooltip>\n <span className={cx('arrow-icon')}>\n <RightOutlined style={{ fontSize: 24 }} />\n </span>\n </div>\n <div className={cx('mobileActions')}>\n <Button size=\"large\" onClick={onReset} disabled={!hasChanges}>\n Reset\n </Button>\n <Button size=\"large\" type=\"primary\" disabled={!hasChanges || hasErrors} onClick={onSave}>\n Save\n </Button>\n </div>\n </div>\n </div>\n )\n }\n\n // Desktop layout (unchanged from original)\n return wrapSSR(\n <div className={cx('root')}>\n <div className={cx('title-section')}>\n <OverflowTooltip title={`${apiName} API Documentation`}>\n <Title\n level={3}\n style={{\n margin: 0,\n fontWeight: 600,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: token.colorTextHeading,\n minWidth: 0,\n flex: 1,\n }}\n >\n {apiName} API Documentation\n </Title>\n </OverflowTooltip>\n </div>\n\n <div className={cx('switcher')}>\n <button\n className={cx('switcher-item', mode === 'edit' ? 'switcher-item-active' : '')}\n onClick={() => onModeChange('edit')}\n >\n <span className={cx('switcher-icon')}>\n <EditOutlined />\n </span>\n Edit\n </button>\n <button\n className={cx('switcher-item', mode === 'view' ? 'switcher-item-active' : '')}\n onClick={() => onModeChange('view')}\n >\n <span className={cx('switcher-icon')}>\n <EyeOutlined />\n </span>\n View\n </button>\n </div>\n\n <div className={cx('actions')}>\n <Button size=\"large\" onClick={onReset} disabled={!hasChanges}>\n Reset\n </Button>\n <Button size=\"large\" type=\"primary\" disabled={!hasChanges || hasErrors} onClick={onSave}>\n Save & Publish Changes\n </Button>\n </div>\n </div>\n )\n}\n","import { Input, Grid, Button } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { CloseCircleOutlined, UpCircleOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\ninterface GeneralSectionProps {\n apiName: string\n authType: string\n version: string\n description: string\n onApiNameChange: (val: string) => void\n onDescriptionChange: (val: string) => void\n collapsed?: boolean\n onToggleCollapse?: () => void\n onChangeDetected?: () => void\n apiNameError?: boolean\n descriptionError?: boolean\n}\n\nexport const GeneralSection = ({\n apiName,\n authType,\n version,\n description,\n onApiNameChange,\n onDescriptionChange,\n onChangeDetected,\n collapsed,\n onToggleCollapse,\n apiNameError,\n descriptionError,\n}: GeneralSectionProps) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const { wrapSSR, cx, token } = useStyle('GeneralSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: `${token.marginLG}px ${token.marginLG}px 48px`,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n width: '100%',\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('fields')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n width: '100%',\n },\n [scope('row')]: {\n display: 'flex',\n gap: token.margin,\n width: '100%',\n },\n [scope('field')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n flex: '1 0 0',\n minWidth: 0,\n },\n [scope('label')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXXS,\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n paddingBottom: token.paddingXS,\n lineHeight: '22px',\n },\n [scope('required')]: {\n color: token.colorError,\n fontSize: token.fontSize,\n },\n }))\n\n const fieldsContent = (\n <div className={cx('fields')}>\n {/* Row 1: API Name */}\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>API Name</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={apiName}\n status={apiNameError ? 'error' : undefined}\n suffix={apiNameError ? (\n <CloseCircleOutlined\n style={{ color: token.colorError, cursor: 'pointer' }}\n onClick={() => {\n onApiNameChange('')\n onChangeDetected?.()\n }}\n />\n ) : undefined}\n onChange={(e) => {\n onApiNameChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={100}\n showCount\n />\n </div>\n\n {/* Row 2: Authentication Type + Version */}\n <div className={cx('row')} style={isMobile ? { flexDirection: 'column' } : undefined}>\n <div className={cx('field')} style={isMobile ? undefined : { flex: 'none', width: 436 }}>\n <div className={cx('label')}>\n <span>Authentication Type</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input size=\"large\" value={authType} disabled />\n </div>\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Version</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input size=\"large\" value={version} disabled />\n </div>\n </div>\n\n {/* Row 3: Description */}\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Description</span>\n <span className={cx('required')}>*</span>\n </div>\n <Input.TextArea\n size=\"large\"\n value={description}\n status={descriptionError ? 'error' : undefined}\n onChange={(e) => {\n onDescriptionChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n </div>\n )\n\n return wrapSSR(\n isMobile ? (\n <div style={{ width: '100%' }}>\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>General</Title>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n {!collapsed && <div className={cx('body')}>{fieldsContent}</div>}\n </div>\n ) : (\n <div className={cx('root')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>General</Title>\n {fieldsContent}\n </div>\n )\n )\n}\n","import React, { useId } from 'react'\n\nconst Trash = (props: React.SVGProps<SVGSVGElement>) => {\n const uid = useId()\n const maskId = `trash-mask-${uid}`\n return (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask id={maskId} fill=\"white\">\n <path d=\"M0 8C0 3.58172 3.58172 0 8 0H32C36.4183 0 40 3.58172 40 8V32C40 36.4183 36.4183 40 32 40H8C3.58172 40 0 36.4183 0 32V8Z\" />\n </mask>\n <path d=\"M8 0V1H32V0V-1H8V0ZM40 8H39V32H40H41V8H40ZM32 40V39H8V40V41H32V40ZM0 32H1V8H0H-1V32H0ZM8 40V39C4.13401 39 1 35.866 1 32H0H-1C-1 36.9706 3.02944 41 8 41V40ZM40 32H39C39 35.866 35.866 39 32 39V40V41C36.9706 41 41 36.9706 41 32H40ZM32 0V1C35.866 1 39 4.13401 39 8H40H41C41 3.02944 36.9706 -1 32 -1V0ZM8 0V-1C3.02944 -1 -1 3.02944 -1 8H0H1C1 4.13401 4.13401 1 8 1V0Z\" fill=\"currentColor\" mask={`url(#${maskId})`} />\n <path d=\"M26.75 15.4844C24.2525 15.2369 21.74 15.1094 19.235 15.1094C17.75 15.1094 16.265 15.1844 14.78 15.3344L13.25 15.4844\" fill=\"currentColor\" />\n <path d=\"M26.75 15.4844C24.2525 15.2369 21.74 15.1094 19.235 15.1094C17.75 15.1094 16.265 15.1844 14.78 15.3344L13.25 15.4844\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M17.375 14.7275L17.54 13.745C17.66 13.0325 17.75 12.5 19.0175 12.5H20.9825C22.25 12.5 22.3475 13.0625 22.46 13.7525L22.625 14.7275\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M25.1373 17.8555L24.6498 25.408C24.5673 26.5855 24.4998 27.5005 22.4073 27.5005H17.5923C15.4998 27.5005 15.4323 26.5855 15.3498 25.408L14.8623 17.8555\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.7476 23.375H21.2451\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.125 20.375H21.875\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport default Trash\n","import React from 'react'\n\nconst EditTag = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M8.25 1.5H6.75C3 1.5 1.5 3 1.5 6.75V11.25C1.5 15 3 16.5 6.75 16.5H11.25C15 16.5 16.5 15 16.5 11.25V9.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0299 2.26592L6.11991 8.17592C5.89491 8.40092 5.66991 8.84342 5.62491 9.16592L5.30241 11.4234C5.18241 12.2409 5.75991 12.8109 6.57741 12.6984L8.83491 12.3759C9.14991 12.3309 9.59241 12.1059 9.82491 11.8809L15.7349 5.97092C16.7549 4.95092 17.2349 3.76592 15.7349 2.26592C14.2349 0.765922 13.0499 1.24592 12.0299 2.26592Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.1826 3.11328C11.6851 4.90578 13.0876 6.30828 14.8876 6.81828\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n)\n\nexport default EditTag\n","import { useState, useEffect } from 'react'\n\nexport function useDebounce<T>(value: T, delay: number = 500): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(handler)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n","import type { FC } from 'react'\nimport { useState, useEffect } from 'react'\nimport { Button, Drawer, Form, Input, Select, Switch, Modal, message } from 'antd'\nimport { PlusOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nexport interface ParameterFormValues {\n name: string\n in: 'query' | 'header' | 'path'\n type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'\n required: boolean\n description?: string\n enum?: string[]\n items?: { type: string }\n}\n\ninterface AddParameterDrawerProps {\n open: boolean\n onClose: () => void\n onAdd: (param: ParameterFormValues) => void\n onEdit?: (param: ParameterFormValues) => void\n mode?: 'add' | 'edit'\n initialValues?: ParameterFormValues\n source?: 'request' | 'response'\n endpointName?: string\n}\n\nconst PARAM_IN_OPTIONS = [\n { label: 'QUERY', value: 'query' },\n { label: 'HEADER', value: 'header' },\n { label: 'PATH', value: 'path' },\n]\n\nconst RESPONSE_PARAM_IN_OPTIONS = PARAM_IN_OPTIONS.filter((o) => o.value === 'header')\nconst PARAM_TYPE_OPTIONS = [\n { label: 'STRING', value: 'string' },\n { label: 'NUMBER', value: 'number' },\n { label: 'INTEGER', value: 'integer' },\n { label: 'BOOLEAN', value: 'boolean' },\n { label: 'ARRAY', value: 'array' },\n { label: 'OBJECT', value: 'object' },\n]\n\nexport const AddParameterDrawer: FC<AddParameterDrawerProps> = ({\n open,\n onClose,\n onAdd,\n onEdit,\n mode = 'add',\n initialValues,\n source,\n endpointName,\n}) => {\n const [form] = Form.useForm()\n const [messageApi, contextHolder] = message.useMessage()\n const [confirmModalOpen, setConfirmModalOpen] = useState(false)\n const [paramName, setParamName] = useState('')\n const [enumInput, setEnumInput] = useState('')\n const [enumValues, setEnumValues] = useState<string[]>([])\n\n const nameValue = Form.useWatch('name', form) as string | undefined\n const inValue = Form.useWatch('in', form) as string | undefined\n const typeValue = Form.useWatch('type', form) as string | undefined\n const requiredValue = Form.useWatch('required', form) as boolean | undefined\n const [hasChanges, setHasChanges] = useState(false)\n\n useEffect(() => {\n if (open) {\n if (mode === 'edit' && initialValues) {\n form.setFieldsValue({\n name: initialValues.name,\n in: initialValues.in,\n type: initialValues.type,\n required: initialValues.required,\n description: initialValues.description,\n itemsType: initialValues.items?.type,\n })\n setEnumValues(initialValues.enum ?? [])\n } else {\n form.resetFields()\n setEnumValues([])\n }\n setEnumInput('')\n setHasChanges(false)\n }\n }, [open])\n\n const { wrapSSR, cx, token } = useStyle('AddParameterDrawer', (token, scope) => ({\n [scope('title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorTextBase,\n lineHeight: '24px',\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n },\n [scope('form-body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n '& .ant-form-item': {\n marginBottom: 0,\n },\n },\n [scope('label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('asterisk')]: {\n color: token.colorError,\n marginLeft: 2,\n },\n [scope('label-optional')]: {\n color: token.colorTextTertiary,\n marginLeft: 4,\n fontSize: token.fontSize,\n },\n [scope('label-secondary')]: {\n fontSize: token.fontSize,\n color: token.colorTextSecondary,\n },\n [scope('switch-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n },\n [scope('switch-label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('enum-input-row')]: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n },\n [scope('enum-input-wrap')]: {\n flex: 1,\n minWidth: 0,\n },\n [scope('enum-add-btn')]: {\n width: 32,\n height: 32,\n flexShrink: 0,\n borderColor: token.colorPrimary,\n color: token.colorPrimary,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('enum-list')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginXS,\n marginTop: token.marginXS,\n },\n [scope('enum-value-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n },\n [scope('enum-value-input-wrap')]: {\n flex: 1,\n minWidth: 0,\n },\n [scope('enum-value-input')]: {\n height: 32,\n fontSize: 14,\n color: token.colorText,\n background: token.colorBgBase,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n cursor: 'default',\n width: '100%',\n },\n [scope('enum-delete-btn')]: {\n width: 32,\n height: 32,\n flexShrink: 0,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: token.borderRadius,\n },\n [scope('footer')]: {\n display: 'flex',\n gap: 24,\n },\n [scope('footer-btn')]: {\n flex: 1,\n },\n [scope('confirmModal')]: {\n '& .ant-modal-content': {\n padding: '0 !important',\n borderRadius: '8px !important',\n overflow: 'hidden !important',\n },\n '& .ant-modal-body': {\n padding: '0 !important',\n margin: '0 !important',\n },\n },\n ['.add-param-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('modalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingBottom: 5,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('modalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('modalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('modalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('modalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('modalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n const isAddEnabled = mode === 'edit' ? hasChanges : !!(nameValue?.trim() && inValue && typeValue)\n const paramInOptions = source === 'response' ? RESPONSE_PARAM_IN_OPTIONS : PARAM_IN_OPTIONS\n\n const resetForm = () => {\n form.resetFields()\n setEnumInput('')\n setEnumValues([])\n }\n\n const handleClose = () => {\n resetForm()\n onClose()\n }\n\n const handleAddEnumValue = () => {\n const val = enumInput.trim()\n if (!val || enumValues.includes(val)) return\n const next = [...enumValues, val]\n setEnumValues(next)\n setEnumInput('')\n if (mode === 'edit' && initialValues) {\n setHasChanges(JSON.stringify(next) !== JSON.stringify(initialValues.enum ?? []))\n }\n }\n\n const handleRemoveEnumValue = (val: string) => {\n const next = enumValues.filter((v) => v !== val)\n setEnumValues(next)\n if (mode === 'edit' && initialValues) {\n setHasChanges(JSON.stringify(next) !== JSON.stringify(initialValues.enum ?? []))\n }\n }\n\n const handleEnumInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleAddEnumValue()\n }\n }\n\n const handleAddClick = async () => {\n try {\n await form.validateFields()\n setParamName(form.getFieldValue('name') ?? '')\n setConfirmModalOpen(true)\n } catch {\n // validation failed — stay open, show field errors\n }\n }\n\n const handleConfirm = () => {\n const values = form.getFieldsValue() as Omit<ParameterFormValues, 'enum'> & {\n itemsType?: string\n }\n const payload: ParameterFormValues = {\n name: values.name,\n in: values.in,\n type: values.type,\n required: values.required ?? true,\n description: values.description || undefined,\n enum: enumValues.length > 0 ? enumValues : undefined,\n ...(values.type === 'array' && values.itemsType && { items: { type: values.itemsType } }),\n }\n if (mode === 'edit') {\n onEdit?.(payload)\n messageApi.success(`${paramName} parameter has been updated successfully.`)\n } else {\n onAdd(payload)\n messageApi.success(`${paramName} parameter has been added successfully.`)\n }\n setConfirmModalOpen(false)\n resetForm()\n onClose()\n }\n\n return wrapSSR(\n <>\n {contextHolder}\n <Drawer\n open={open}\n onClose={handleClose}\n width={480}\n closable={false}\n title={\n <span className={cx('title')}>\n {mode === 'edit' ? 'Edit Parameter' : 'Add Parameter'}\n </span>\n }\n styles={{\n header: {\n padding: '16px 24px',\n borderBottom: `1px solid ${token.colorFillSecondary}`,\n background: token.colorBgBase,\n },\n body: { padding: '24px' },\n footer: {\n padding: '24px',\n background: token.colorPrimaryBg,\n borderTop: `1px solid ${token.colorFillSecondary}`,\n },\n }}\n footer={\n <div className={cx('footer')}>\n <Button size=\"large\" className={cx('footer-btn')} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n size=\"large\"\n type=\"primary\"\n icon={mode === 'edit' ? undefined : <PlusOutlined />}\n className={cx('footer-btn')}\n disabled={!isAddEnabled}\n onClick={handleAddClick}\n >\n {mode === 'edit' ? 'Save Changes' : 'Add Parameter'}\n </Button>\n </div>\n }\n >\n <Form\n form={form}\n layout=\"vertical\"\n requiredMark={false}\n className={cx('form-body')}\n initialValues={{\n required: true,\n in: source === 'response' ? 'header' : 'query',\n type: 'string',\n }}\n onValuesChange={(_changed, allValues) => {\n if (allValues.in === 'path') {\n form.setFieldValue('required', true)\n }\n if (mode === 'edit' && initialValues) {\n const current = form.getFieldsValue()\n const changed =\n current.name !== initialValues.name ||\n current.in !== initialValues.in ||\n current.type !== initialValues.type ||\n current.required !== initialValues.required ||\n (current.description ?? '') !== (initialValues.description ?? '') ||\n JSON.stringify(enumValues) !== JSON.stringify(initialValues.enum ?? [])\n setHasChanges(changed)\n }\n }}\n >\n {/* 1. Parameter Name — required */}\n <Form.Item\n name=\"name\"\n label={\n <span className={cx('label')}>\n Parameter Name<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[\n { required: true, message: 'Parameter Name is required' },\n { max: 35, message: 'Maximum 35 characters' },\n ]}\n >\n <Input showCount maxLength={35} placeholder=\"Parameter Name\" />\n </Form.Item>\n\n {/* 2. Parameter In — required */}\n <Form.Item\n name=\"in\"\n label={\n <span className={cx('label')}>\n Parameter In<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Parameter In is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={paramInOptions} />\n </Form.Item>\n\n {/* 3. Parameter Type — required */}\n <Form.Item\n name=\"type\"\n label={\n <span className={cx('label')}>\n Parameter Type<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Parameter Type is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={PARAM_TYPE_OPTIONS} />\n </Form.Item>\n\n {/* 3b. Items Type — shown only when type is array */}\n {typeValue === 'array' && (\n <Form.Item\n name=\"itemsType\"\n label={\n <span className={cx('label')}>\n Items Type<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[{ required: true, message: 'Items Type is required' }]}\n >\n <Select size=\"large\" placeholder=\"Select\" options={PARAM_TYPE_OPTIONS} />\n </Form.Item>\n )}\n\n {/* 4. Required? — Switch */}\n <Form.Item name=\"required\">\n <div className={cx('switch-row')}>\n <Switch\n checked={inValue === 'path' ? true : (requiredValue ?? true)}\n disabled={inValue === 'path'}\n onChange={(checked) => form.setFieldValue('required', checked)}\n style={{\n backgroundColor: (inValue === 'path' ? true : (requiredValue ?? true))\n ? token.colorPrimary\n : undefined,\n }}\n />\n <span className={cx('switch-label')}>\n Required?\n {inValue === 'path' && (\n <span style={{ color: token.colorTextTertiary, fontSize: 12, marginLeft: 4 }}>\n (Always required for path parameter)\n </span>\n )}\n </span>\n </div>\n </Form.Item>\n\n {/* 5. Description — optional */}\n <Form.Item\n name=\"description\"\n label={<span className={cx('label-secondary')}>Description</span>}\n rules={[{ max: 50, message: 'Maximum 50 characters' }]}\n >\n <Input.TextArea\n showCount\n maxLength={50}\n placeholder=\"Textarea\"\n style={{ height: 52, resize: 'none' }}\n />\n </Form.Item>\n\n {/* 6. Enum — optional */}\n <Form.Item\n label={\n <span className={cx('label-secondary')}>\n Enum<span className={cx('label-optional')}>(optional)</span>\n </span>\n }\n >\n <div className={cx('enum-input-row')}>\n <div className={cx('enum-input-wrap')}>\n <Input\n showCount\n maxLength={35}\n value={enumInput}\n placeholder=\"e.g Expired\"\n onChange={(e) => setEnumInput(e.target.value)}\n onKeyDown={handleEnumInputKeyDown}\n />\n </div>\n <Button\n ghost\n icon={<PlusOutlined />}\n className={cx('enum-add-btn')}\n onClick={handleAddEnumValue}\n disabled={!enumInput.trim()}\n />\n </div>\n {enumValues.length > 0 && (\n <div className={cx('enum-list')}>\n {enumValues.map((val) => (\n <div key={val} className={cx('enum-value-row')}>\n <div className={cx('enum-value-input-wrap')}>\n <Input readOnly value={val} className={cx('enum-value-input')} />\n </div>\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n className={cx('enum-delete-btn')}\n onClick={() => handleRemoveEnumValue(val)}\n />\n </div>\n ))}\n </div>\n )}\n </Form.Item>\n </Form>\n </Drawer>\n\n {/* Confirmation modal */}\n <Modal\n open={confirmModalOpen}\n onCancel={() => setConfirmModalOpen(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"add-param-confirm-modal\"\n styles={{ mask: { backgroundColor: 'rgba(0,0,0,0.45)' } }}\n >\n <div className={cx('modalHead')}>\n <span className={cx('modalTitle')}>\n {mode === 'edit' ? `Edit ${paramName} parameter` : `Add Parameter to ${endpointName} endpoint`}\n </span>\n <button\n className={cx('modalCloseBtn')}\n onClick={() => setConfirmModalOpen(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <div className={cx('modalContent')}>\n <span className={cx('modalContentText')}>\n Are you sure you want to {mode === 'edit' ? 'edit' : 'add'} {paramName} parameter\n {mode === 'add' ? ` to ${endpointName} endpoint` : ''}?\n </span>\n </div>\n\n <div className={cx('modalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setConfirmModalOpen(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={handleConfirm}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: token.colorPrimary,\n borderColor: token.colorPrimary,\n boxShadow: `0px 2px 0px ${token.colorPrimaryBg}`,\n }}\n >\n {mode === 'edit' ? 'Yes, Edit' : 'Yes, Add'}\n </Button>\n </div>\n </Modal>\n </>\n )\n}\n","import { useState, useEffect, useMemo } from 'react'\nimport type { FC } from 'react'\nimport {\n Button,\n Empty,\n Input,\n message,\n Modal,\n Pagination,\n Select,\n Table,\n Tabs,\n Tag,\n Tooltip,\n theme,\n Grid,\n} from 'antd'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\nimport { generateExampleFromSchema, hasAnyExample } from '@doc-lib/utils/generateExampleFromSchema'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport {\n UpCircleOutlined,\n DownOutlined,\n PlusOutlined,\n CheckCircleOutlined,\n SearchOutlined,\n} from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport EditTagIcon from '@doc-lib/assets/icons/editTag'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useDebounce } from '@doc-lib/hooks/useDebounce'\nimport { methodColors } from '@doc-lib/view/helper/sidebar.utils'\nimport type { EndpointData } from '@doc-lib/view/entities'\nimport { AddParameterDrawer } from './AddParameterDrawer'\nimport type { ParameterFormValues } from './AddParameterDrawer'\n\nconst PAGE_SIZE = 4\nconst VIEW_PAGE_SIZE = 4\n\nconst getStatusCodeColor = (code: string, token: any): { dot: string; text: string } => {\n const n = parseInt(code, 10)\n if (n >= 400 && n < 500) return { dot: token.colorError, text: token.colorError }\n return { dot: token.colorSuccess, text: token.colorText }\n}\n\ninterface ViewParamRow {\n key: number\n name: string\n type: string\n required: boolean\n description: string\n enum: string[]\n}\n\nconst buildViewParamRows = (params: ParameterFormValues[]): ViewParamRow[] =>\n params.map((p, idx) => ({\n key: idx,\n name: p.name,\n type: p.type,\n required: p.required,\n description: p.description ?? '',\n enum: p.enum ?? [],\n }))\n\ninterface EndpointsSectionProps {\n endpointsByTag: Record<string, EndpointData[]>\n collapsed?: boolean\n onToggleCollapse?: () => void\n endpointNames: Record<string, string>\n endpointDescs: Record<string, string>\n endpointTags: Record<string, string[]>\n availableTags: string[]\n onEndpointNameChange: (id: string, val: string) => void\n onEndpointDescChange: (id: string, val: string) => void\n onEndpointTagsChange: (id: string, val: string[]) => void\n endpointParams: Record<string, ParameterFormValues[]>\n onAddParameter?: (endpointId: string, param: ParameterFormValues) => void\n onEditParameter?: (endpointId: string, idx: number, param: ParameterFormValues) => void\n onDeleteParameter?: (endpointId: string, idx: number) => void\n endpointResponseParams: Record<string, ParameterFormValues[]>\n onAddResponseParameter?: (endpointId: string, param: ParameterFormValues) => void\n onEditResponseParameter?: (endpointId: string, idx: number, param: ParameterFormValues) => void\n onDeleteResponseParameter?: (endpointId: string, idx: number) => void\n onRequestContentChange?: (endpointId: string, jsonString: string) => void\n onResponseContentChange?: (endpointId: string, jsonString: string) => void\n resetKey?: number\n requestBodySchemas?: Record<string, unknown>\n responseBodySchemas?: Record<string, unknown>\n mode?: 'edit' | 'view'\n selectedEndpointKey?: string\n}\n\nexport const EndpointsSection: FC<EndpointsSectionProps> = ({\n endpointsByTag,\n collapsed = false,\n onToggleCollapse,\n endpointNames,\n endpointDescs,\n endpointTags,\n availableTags,\n onEndpointNameChange,\n onEndpointDescChange,\n onEndpointTagsChange,\n endpointParams,\n onAddParameter,\n onEditParameter,\n onDeleteParameter,\n endpointResponseParams,\n onAddResponseParameter,\n onEditResponseParameter,\n onDeleteResponseParameter,\n onRequestContentChange,\n onResponseContentChange,\n resetKey,\n requestBodySchemas,\n responseBodySchemas,\n mode = 'edit',\n selectedEndpointKey,\n}) => {\n const [expandedId, setExpandedId] = useState<string | null>(null)\n const [activeTab, setActiveTab] = useState('general')\n\n useEffect(() => {\n setActiveTab('general')\n }, [selectedEndpointKey])\n useEffect(() => {\n if (!selectedEndpointKey) return\n if (selectedStatusCodes[selectedEndpointKey]) return\n const ep = Object.values(endpointsByTag).flat().find((e) => e.id === selectedEndpointKey)\n if (!ep) return\n const keys = Object.keys(ep.responses ?? {})\n const defaultCode = keys.includes('200') ? '200' : keys[0]\n if (defaultCode) {\n setSelectedStatusCodes((prev) => ({ ...prev, [selectedEndpointKey]: defaultCode }))\n }\n }, [selectedEndpointKey])\n const [paramDrawerOpen, setParamDrawerOpen] = useState(false)\n const [paramDrawerEndpointId, setParamDrawerEndpointId] = useState<string | null>(null)\n const [paramDrawerMode, setParamDrawerMode] = useState<'add' | 'edit'>('add')\n const [editParamIdx, setEditParamIdx] = useState<number | null>(null)\n const [deleteParamModal, setDeleteParamModal] = useState<{\n open: boolean\n endpointId: string\n idx: number\n name: string\n source: 'request' | 'response'\n }>({ open: false, endpointId: '', idx: -1, name: '', source: 'request' })\n const [openRequestPanels, setOpenRequestPanels] = useState<Set<string>>(new Set())\n const [openResponsePanels, setOpenResponsePanels] = useState<Set<string>>(new Set())\n const [selectedStatusCodes, setSelectedStatusCodes] = useState<Record<string, string>>({})\n const [drawerSource, setDrawerSource] = useState<'request' | 'response'>('request')\n const drawerEndpointName = useMemo(() => {\n if (!paramDrawerEndpointId) return ''\n const ep = Object.values(endpointsByTag).flat().find((e) => e.id === paramDrawerEndpointId)\n return endpointNames[paramDrawerEndpointId] ?? ep?.summary ?? ''\n }, [paramDrawerEndpointId, endpointsByTag, endpointNames])\n\n const [requestPages, setRequestPages] = useState<Map<string, number>>(new Map())\n const [responsePages, setResponsePages] = useState<Map<string, number>>(new Map())\n const [requestSearches, setRequestSearches] = useState<Record<string, string>>({})\n const [responseSearches, setResponseSearches] = useState<Record<string, string>>({})\n const [showRequestSearch, setShowRequestSearch] = useState<Record<string, boolean>>({})\n const [showResponseSearch, setShowResponseSearch] = useState<Record<string, boolean>>({})\n const debouncedRequestSearches = useDebounce(requestSearches)\n const debouncedResponseSearches = useDebounce(responseSearches)\n\n // Editable JSON state for request/response code panels (keyed by endpoint id)\n const [editableRequestContent, setEditableRequestContent] = useState<Record<string, string>>({})\n const [editableResponseContent, setEditableResponseContent] = useState<Record<string, string>>({})\n\n // When resetKey changes (handleReset incremented it), re-populate the code boxes\n // from the freshly reset schemas so they show the original values.\n useEffect(() => {\n // Re-populate for all openRequestPanels endpoints\n openRequestPanels.forEach((epId) => {\n const val = requestBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableRequestContent((prev) => ({ ...prev, [epId]: json }))\n })\n // Re-populate for all openResponsePanels endpoints\n openResponsePanels.forEach((epId) => {\n const val = responseBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableResponseContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [resetKey, openRequestPanels, openResponsePanels, requestBodySchemas, responseBodySchemas])\n\n // Initialize editable content from requestBody/responseBody schemas when panel opens\n useEffect(() => {\n if (!openRequestPanels.size) return\n openRequestPanels.forEach((epId) => {\n if (editableRequestContent[epId] !== undefined) return\n const val = requestBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableRequestContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [openRequestPanels, requestBodySchemas])\n\n useEffect(() => {\n if (!openResponsePanels.size) return\n openResponsePanels.forEach((epId) => {\n if (editableResponseContent[epId] !== undefined) return\n const val = responseBodySchemas?.[epId]\n const json = val ? JSON.stringify(val, null, 2) : ''\n setEditableResponseContent((prev) => ({ ...prev, [epId]: json }))\n })\n }, [openResponsePanels, responseBodySchemas])\n\n // Validate/Beautify handlers (reused from ImportOpenApiDrawer)\n const handleValidate = (content: string) => {\n try {\n JSON.parse(content)\n message.success('Definition is valid JSON.')\n } catch {\n message.error('Invalid JSON definition.')\n }\n }\n\n const handleBeautify = (content: string, setter: (v: string) => void) => {\n try {\n const parsed = JSON.parse(content)\n setter(JSON.stringify(parsed, null, 2))\n } catch {\n message.error('Could not beautify — content is not valid JSON.')\n }\n }\n\n const { selectNodeByKey } = useNodeSelection()\n const { token: antdToken } = theme.useToken()\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const toggleRequestPanel = (epId: string) => {\n setOpenRequestPanels((prev) => {\n const next = new Set(prev)\n if (next.has(epId)) next.delete(epId)\n else next.add(epId)\n return next\n })\n }\n\n const toggleResponsePanel = (epId: string) => {\n setOpenResponsePanels((prev) => {\n const next = new Set(prev)\n if (next.has(epId)) next.delete(epId)\n else next.add(epId)\n return next\n })\n }\n\n const { wrapSSR, cx, token } = useStyle('EndpointsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n flexShrink: 0,\n flex: 1,\n minHeight: 0,\n '& .ant-tabs': {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n '& .ant-tabs-content-holder': {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n padding: `${token.paddingLG}px ${token.paddingLG}px 48px`,\n },\n '& .ant-tabs-content': {\n flex: 1,\n minHeight: 0,\n },\n '& .ant-tabs-tabpane-active': {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('tag-title')]: {\n fontSize: token.fontSize,\n fontWeight: 600,\n color: token.colorTextSecondary,\n marginBottom: token.marginXS,\n },\n [scope('endpoint-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM,\n width: '100%',\n },\n [scope('endpoint-card')]: {\n display: 'flex',\n flex: '1 0 0',\n alignItems: 'center',\n gap: 14,\n padding: `${token.paddingXS}px ${token.padding}px`,\n background: token.colorFillSecondary,\n borderRadius: token.borderRadius,\n cursor: 'pointer',\n overflow: 'hidden',\n },\n [scope('endpoint-card-active')]: {\n background: 'transparent',\n border: `1px solid ${token.colorPrimaryBorder}`,\n },\n [scope('method-badge')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0 15px',\n borderRadius: token.borderRadius,\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('endpoint-path')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorTextHeading,\n lineHeight: '24px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n [scope('endpoint-form')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.paddingLG,\n padding: token.paddingLG,\n borderLeft: `3px solid ${token.colorPrimaryBorder}`,\n borderRight: `3px solid ${token.colorPrimaryBorder}`,\n borderBottom: `3px solid ${token.colorPrimaryBorder}`,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('form-row')]: {\n display: 'flex',\n gap: 24,\n width: '100%',\n },\n [scope('form-field')]: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 0 0',\n minWidth: 0,\n },\n [scope('field-label')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXXS,\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n paddingBottom: token.paddingXS,\n lineHeight: '22px',\n },\n [scope('label-required')]: {\n color: token.colorError,\n },\n [scope('label-optional')]: {\n color: token.colorTextDescription,\n },\n [scope('section-header')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingBottom: '18.5px',\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n },\n [scope('section-title')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorPrimary,\n lineHeight: '24px',\n },\n [scope('param-row')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n padding: `${token.marginXXS}px ${token.marginSM}px`,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n background: token.colorBgContainer,\n width: '100%',\n cursor: 'pointer',\n userSelect: 'none' as const,\n '&:hover': { background: token.colorFillTertiary },\n },\n [scope('param-row--open')]: {\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('param-row-icon')]: {\n fontSize: 12,\n transition: 'transform 0.2s',\n },\n [scope('param-row-icon--open')]: {\n transform: 'rotate(180deg)',\n },\n [scope('code-panel')]: {\n width: '100%',\n overflow: 'hidden',\n background: '#1D2856',\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n },\n [scope('code-area')]: {\n background: '#1D2856',\n padding: '10px 12px',\n fontFamily: 'Cairo, sans-serif',\n fontSize: 14,\n lineHeight: '20px',\n color: token.colorTextLightSolid,\n width: '100%',\n whiteSpace: 'pre' as const,\n overflowX: 'auto',\n display: 'block',\n },\n [scope('code-footer')]: {\n background: '#161D40',\n padding: 12,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n display: 'flex',\n gap: 8,\n },\n [scope('code-btn')]: {\n borderColor: '#fff',\n color: token.colorTextLightSolid,\n '&:hover': {\n borderColor: '#fff !important',\n color: '#fff !important',\n background: 'rgba(255,255,255,0.1) !important',\n },\n },\n [scope('param-list')]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n [scope('param-item-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: `12px 0px`,\n borderBottom: `1px solid ${token.colorBorderSecondary}`,\n background: token.colorBgContainer,\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n [scope('param-details')]: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('param-detail-cell')]: {\n flex: 1,\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n },\n [scope('param-detail-label')]: {\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n fontSize: 16,\n color: token.colorTextSecondary,\n },\n [scope('param-detail-value')]: {\n fontFamily: 'Cairo, sans-serif',\n fontSize: 16,\n color: token.colorText,\n },\n [scope('param-detail-value--ellipsis')]: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n maxWidth: 160,\n },\n [scope('param-detail-value-name')]: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n maxWidth: 200,\n display: 'block',\n },\n [scope('param-enum-container')]: {\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'center',\n lineHeight: '1',\n gap: 0,\n },\n [scope('param-enum-tag')]: {\n display: 'inline-flex',\n alignItems: 'center',\n verticalAlign: 'middle',\n background: token.colorBgContainer,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 6,\n padding: '1px 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n fontFamily: 'Cairo, sans-serif',\n margin: 0,\n },\n [scope('param-enum-pill')]: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 0,\n width: 20,\n height: 20,\n borderRadius: '50%',\n border: `1px solid ${token.colorBorder}`,\n background: 'white',\n fontSize: 12,\n color: token.colorText,\n cursor: 'default',\n },\n [scope('enum-tooltip-list')]: {\n margin: 0,\n padding: '0 0 0 16px',\n fontSize: 14,\n lineHeight: '22px',\n color: token.colorTextLightSolid,\n fontFamily: 'Cairo, sans-serif',\n },\n [scope('status-label')]: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n fontSize: 14,\n lineHeight: '22px',\n fontFamily: 'Cairo, sans-serif',\n },\n [scope('status-dot')]: {\n width: 8,\n height: 8,\n borderRadius: '50%',\n flexShrink: 0,\n display: 'inline-block',\n },\n [scope('status-option-content')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n width: '100%',\n },\n [scope('status-checkmark')]: {\n marginLeft: 'auto',\n fontSize: 14,\n },\n [scope('status-select')]: {\n width: 106,\n },\n [scope('response-controls')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n },\n ['.status-code-dropdown']: {\n borderRadius: '12px !important',\n boxShadow:\n '0px 8px 20px rgba(0,0,0,0.12), 0px 5px 8px rgba(0,0,0,0.14), 0px 12px 32px rgba(0,0,0,0.08) !important',\n '& .ant-select-item': {\n height: 32,\n minHeight: 32,\n padding: '5px 12px !important',\n borderRadius: '6px !important',\n lineHeight: '22px',\n fontSize: 14,\n fontFamily: 'Cairo, sans-serif',\n },\n '& .ant-select-item-option-content': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n },\n '& .ant-select-item-option-selected': {\n background: `${token.colorPrimaryBg} !important`,\n },\n },\n [scope('param-actions')]: {\n display: 'flex',\n gap: 8,\n },\n [scope('param-edit-btn')]: {\n width: 40,\n height: 40,\n padding: 0,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n borderColor: '#D9D9D9',\n background: '#FFF !important',\n boxShadow: '0 2px 0 0 rgba(0, 0, 0, 0.02) !important',\n color: token.colorPrimary,\n '& .ant-btn-icon': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('param-delete-btn')]: {\n width: 40,\n height: 40,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '& svg path[mask]': { display: 'none' },\n },\n ['.delete-param-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('deleteModalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('deleteModalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('deleteModalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('deleteModalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n height: 56,\n width: '100%',\n },\n [scope('deleteModalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('deleteModalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n // ── View-mode styles ──────────────────────────────────────────────────────\n [scope('view-panel')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n width: '100%',\n borderLeft: `3px solid ${token.colorPrimaryBorder}`,\n borderRight: `3px solid ${token.colorPrimaryBorder}`,\n borderBottom: `3px solid ${token.colorPrimaryBorder}`,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n padding: token.paddingLG,\n },\n [scope('view-params-card')]: {\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginSM,\n paddingTop: 12,\n width: '100%',\n overflow: 'hidden',\n '& .ant-table-thead > tr > th': {\n background: token.colorFillSecondary,\n fontWeight: 700,\n fontSize: 14,\n padding: `${token.paddingXS}px`,\n paddingInline: `${token.paddingXS}px`,\n borderColor: `${token.colorSplit} !important`,\n },\n '& .ant-table-tbody > tr > td': {\n padding: `${token.paddingXS}px`,\n paddingInline: `${token.paddingXS}px`,\n borderColor: `${token.colorBorder} !important`,\n height: 38,\n },\n '& .ant-table-container': {\n borderRadius: 0,\n border: 'none',\n },\n '& .ant-table-wrapper': {\n borderRadius: 0,\n },\n },\n [scope('view-params-header')]: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n },\n [scope('view-params-title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorText,\n },\n [scope('view-status-select-sm')]: {\n width: 65,\n },\n [scope('view-param-name')]: {\n fontSize: 14,\n fontWeight: 400,\n color: token.colorText,\n },\n [scope('view-param-type')]: {\n fontFamily: \"'Cascadia Code', sans-serif\",\n fontSize: 12,\n color: token.colorTextSecondary,\n marginLeft: 4,\n marginRight: 4,\n },\n [scope('view-param-required')]: {\n color: token.colorError,\n },\n [scope('view-param-optional')]: {\n color: token.colorSuccess,\n fontSize: 12,\n marginLeft: 4,\n },\n [scope('view-param-desc')]: {\n fontSize: 12,\n color: token.colorText,\n },\n [scope('view-enum-container')]: {\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 4,\n alignItems: 'center',\n },\n [scope('view-enum-tag')]: {\n background: token.colorFillSecondary,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: 4,\n padding: '1px 8px',\n fontSize: 12,\n lineHeight: '20px',\n color: token.colorText,\n margin: 0,\n cursor: 'default',\n },\n [scope('view-row-odd')]: {\n '& > td': {\n background: `${token.colorBgLayout} !important`,\n },\n },\n [scope('view-row-even')]: {\n '& > td': {\n background: `${token.colorBgContainer} !important`,\n },\n },\n [scope('empty-wrapper')]: {\n background: token.colorBgElevated,\n borderRadius: token.borderRadius,\n paddingTop: 16,\n paddingBottom: 16,\n gap: 8,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n flex: 1,\n minHeight: 0,\n '& .ant-empty': {\n margin: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n },\n '& .ant-empty-image': {\n width: 184,\n height: 117,\n margin: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '& .ant-empty-image svg, & .ant-empty-image img': {\n width: '100%',\n height: '100%',\n },\n '& .ant-empty-description': {\n margin: 0,\n },\n },\n [scope('empty-description')]: {\n fontSize: 14,\n lineHeight: '22px',\n color: token.colorTextDescription,\n textAlign: 'center',\n fontWeight: 400,\n },\n [scope('pagination')]: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: token.marginMD,\n '.ant-pagination-item-active': {\n backgroundColor: token.colorBgContainer,\n borderColor: token.colorPrimary,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n a: {\n color: token.colorPrimary,\n fontWeight: token.fontWeightStrong,\n fontSize: token.fontSize,\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n },\n '.ant-pagination-item': {\n borderRadius: token.borderRadius,\n minWidth: 32,\n height: 32,\n lineHeight: '32px',\n a: {\n color: token.colorText,\n fontWeight: 400,\n fontSize: token.fontSize,\n },\n },\n '.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link':\n {\n borderRadius: token.borderRadius,\n width: 32,\n height: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: 'transparent',\n },\n },\n }))\n\n const handleEndpointClick = (ep: EndpointData) => {\n const newId = expandedId === ep.id ? null : ep.id\n setExpandedId(newId)\n setRequestPages(new Map())\n setResponsePages(new Map())\n if (newId) {\n selectNodeByKey(ep.id)\n if (!selectedStatusCodes[ep.id]) {\n const keys = Object.keys(ep.responses ?? {})\n const defaultCode = keys.includes('200') ? '200' : keys[0]\n if (defaultCode) {\n setSelectedStatusCodes((prev) => ({ ...prev, [ep.id]: defaultCode }))\n }\n }\n }\n }\n\n const viewParamColumns = [\n {\n title: 'Parameter',\n key: 'parameter',\n render: (_: unknown, row: ViewParamRow) => (\n <span>\n <Tooltip title={row.name} placement=\"bottom\">\n <span\n className={cx('view-param-name')}\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {row.name}\n </span>\n </Tooltip>\n {row.type && <span className={cx('view-param-type')}>{row.type}</span>}\n {row.required ? (\n <span className={cx('view-param-required')}>*</span>\n ) : (\n <span className={cx('view-param-optional')}>Optional</span>\n )}\n </span>\n ),\n },\n {\n title: 'Description',\n key: 'description',\n render: (_: unknown, row: ViewParamRow) => (\n <Tooltip title={row.description || '--'} placement=\"bottom\">\n <span\n className={cx('view-param-desc')}\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {row.description || '--'}\n </span>\n </Tooltip>\n ),\n },\n {\n title: 'Enum',\n key: 'enum',\n render: (_: unknown, row: ViewParamRow) => {\n if (!row.enum || row.enum.length === 0) return <span>--</span>\n const visible = row.enum.slice(0, 2)\n const rest = row.enum.slice(2)\n return (\n <span className={cx('view-enum-container')}>\n {visible.map((v) => (\n <Tag key={v} className={cx('view-enum-tag')}>\n {v}\n </Tag>\n ))}\n {rest.length > 0 && (\n <Tooltip\n title={\n <ul className={cx('enum-tooltip-list')}>\n {rest.map((v) => (\n <li key={v}>{v}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <Tag className={cx('view-enum-tag')}>+{rest.length}</Tag>\n </Tooltip>\n )}\n </span>\n )\n },\n },\n ]\n\n if (selectedEndpointKey) {\n const ep = Object.values(endpointsByTag)\n .flat()\n .find((e) => e.id === selectedEndpointKey)\n if (!ep) return wrapSSR(<div />)\n const methodColor = methodColors[ep.method as keyof typeof methodColors]\n const epHeader = (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n marginBottom: token.marginLG,\n }}\n >\n <span\n className={cx('method-badge')}\n style={{ color: methodColor?.color, backgroundColor: methodColor?.bg ?? 'transparent' }}\n >\n {ep.method}\n </span>\n <OverflowTooltip title={ep.path}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n {ep.path}\n </Title>\n </OverflowTooltip>\n </div>\n )\n return wrapSSR(\n <div className={cx('root')}>\n <Tabs\n activeKey={activeTab}\n onChange={setActiveTab}\n tabBarStyle={{ background: 'transparent', padding: '0 16px', marginBottom: 16 }}\n tabBarGutter={32}\n style={{\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n }}\n items={[\n {\n key: 'general',\n label: 'General',\n children: (\n <>\n {epHeader}\n <div style={{ display: 'flex', flexDirection: 'column', gap: token.paddingLG }}>\n <div\n className={cx('form-row')}\n style={isMobile ? { flexDirection: 'column' } : undefined}\n >\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={endpointNames[ep.id] ?? ep.summary ?? ''}\n onChange={(e) => onEndpointNameChange(ep.id, e.target.value)}\n maxLength={100}\n showCount\n />\n </div>\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Tag</span>\n </div>\n <Select\n mode=\"multiple\"\n size=\"large\"\n style={{ width: '100%' }}\n placeholder=\"Select\"\n value={endpointTags[ep.id] ?? ep.tags ?? []}\n options={availableTags.map((t) => ({ label: t, value: t }))}\n onChange={(val) => onEndpointTagsChange(ep.id, val)}\n />\n </div>\n </div>\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('field-label')}>\n <span>Description</span>\n <span className={cx('label-optional')}>(optional)</span>\n </div>\n <Input.TextArea\n value={endpointDescs[ep.id] ?? ep.description ?? ''}\n onChange={(e) => onEndpointDescChange(ep.id, e.target.value)}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n </div>\n </>\n ),\n },\n {\n key: 'request',\n label: 'Request',\n children: (\n <>\n {epHeader}\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{ display: 'flex', alignItems: 'center', gap: token.marginMD }}\n >\n <span className={cx('section-title')}>Request Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n onClick={() =>\n setShowRequestSearch((prev) => ({ ...prev, [ep.id]: !prev[ep.id] }))\n }\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Request Details</span>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showRequestSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const reqSearch = (debouncedRequestSearches[ep.id] ?? '').toLowerCase()\n const allReqParams = (endpointParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(reqSearch)\n )\n if (allReqParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const reqPage = requestPages.get(ep.id) ?? 1\n const pagedReqParams = allReqParams.slice(\n (reqPage - 1) * PAGE_SIZE,\n reqPage * PAGE_SIZE\n )\n return (\n <>\n <div className={cx('param-list')} style={{ marginTop: token.margin }}>\n {pagedReqParams.map((param, i) => {\n const idx = (reqPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>Enum</span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul style={{ margin: 0, paddingLeft: 16 }}>\n {param.enum.slice(1).map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>—</span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <Tooltip title={param.description || '—'} placement=\"bottom\">\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allReqParams.length > PAGE_SIZE && (\n <Pagination\n current={reqPage}\n pageSize={PAGE_SIZE}\n total={allReqParams.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n {!['GET', 'DELETE'].includes(ep.method) && (\n <div\n className={cx('param-row', openRequestPanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleRequestPanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openRequestPanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Request <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n )}\n {!['GET', 'DELETE'].includes(ep.method) && openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableRequestContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onRequestContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableRequestContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableRequestContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableRequestContent[ep.id] ?? '',\n (v) =>\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </>\n ),\n },\n {\n key: 'response',\n label: 'Response',\n children: (\n <>\n {epHeader}\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{ display: 'flex', alignItems: 'center', gap: token.marginMD }}\n >\n <span className={cx('section-title')}>Response Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n onClick={() =>\n setShowResponseSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Response Details</span>\n <div className={cx('response-controls')}>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n <Tooltip\n title={selectedStatusCodes[ep.id] ? 'Filled' : undefined}\n placement=\"bottom\"\n >\n <Select\n className={cx('status-select')}\n popupClassName=\"status-code-dropdown\"\n value={selectedStatusCodes[ep.id] ?? undefined}\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({ ...prev, [ep.id]: val }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{\n background: getStatusCodeColor(code, antdToken).dot,\n }}\n />\n <span\n style={{\n color: getStatusCodeColor(code, antdToken).text,\n }}\n >\n {code}\n </span>\n </span>\n ),\n }))}\n optionRender={(option) => {\n const code = option.value as string\n const { dot, text } = getStatusCodeColor(code, antdToken)\n const isSelected = selectedStatusCodes[ep.id] === code\n return (\n <Tooltip title=\"Filled\" placement=\"bottom\">\n <span className={cx('status-option-content')}>\n <span\n className={cx('status-dot')}\n style={{ background: dot }}\n />\n <span style={{ color: text }}>{code}</span>\n {isSelected && (\n <CheckCircleOutlined\n className={cx('status-checkmark')}\n style={{ color: text }}\n />\n )}\n </span>\n </Tooltip>\n )\n }}\n />\n </Tooltip>\n </div>\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showResponseSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointResponseParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const resSearch = (debouncedResponseSearches[ep.id] ?? '').toLowerCase()\n const allResParams = (endpointResponseParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(resSearch)\n )\n if (allResParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const resPage = responsePages.get(ep.id) ?? 1\n const pagedResParams = allResParams.slice(\n (resPage - 1) * PAGE_SIZE,\n resPage * PAGE_SIZE\n )\n return (\n <>\n <div className={cx('param-list')} style={{ marginTop: token.margin }}>\n {pagedResParams.map((param, i) => {\n const idx = (resPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <Tooltip title={param.name} placement=\"bottom\">\n <span className={cx('param-detail-value', 'param-detail-value-name')}>\n {param.name}\n </span>\n </Tooltip>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>Enum</span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul style={{ margin: 0, paddingLeft: 16 }}>\n {param.enum.slice(1).map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>—</span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <Tooltip title={param.description || '—'} placement=\"bottom\">\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allResParams.length > PAGE_SIZE && (\n <Pagination\n current={resPage}\n pageSize={PAGE_SIZE}\n total={allResParams.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n <div\n className={cx('param-row', openResponsePanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleResponsePanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openResponsePanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Response <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableResponseContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onResponseContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableResponseContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableResponseContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableResponseContent[ep.id] ?? '',\n (v) =>\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </>\n ),\n },\n ]}\n />\n <Modal\n open={deleteParamModal.open}\n onCancel={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-param-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {deleteParamModal.name} parameter</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {deleteParamModal.name} parameter?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n onClick={() => {\n const epId = deleteParamModal.endpointId\n const src = deleteParamModal.source\n if (src === 'response') {\n const total = (endpointResponseParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((responsePages.get(epId) ?? 1) > maxPage)\n setResponsePages((prev) => new Map(prev).set(epId, 1))\n onDeleteResponseParameter?.(epId, deleteParamModal.idx)\n } else {\n const total = (endpointParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((requestPages.get(epId) ?? 1) > maxPage)\n setRequestPages((prev) => new Map(prev).set(epId, 1))\n onDeleteParameter?.(epId, deleteParamModal.idx)\n }\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n <AddParameterDrawer\n open={paramDrawerOpen}\n mode={paramDrawerMode}\n endpointName={drawerEndpointName}\n initialValues={\n paramDrawerMode === 'edit' && paramDrawerEndpointId && editParamIdx !== null\n ? drawerSource === 'response'\n ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx]\n : endpointParams[paramDrawerEndpointId]?.[editParamIdx]\n : undefined\n }\n onClose={() => {\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onAdd={(param) => {\n if (paramDrawerEndpointId) {\n if (drawerSource === 'response') {\n onAddResponseParameter?.(paramDrawerEndpointId, param)\n } else {\n onAddParameter?.(paramDrawerEndpointId, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onEdit={(param) => {\n if (paramDrawerEndpointId && editParamIdx !== null) {\n if (drawerSource === 'response') {\n onEditResponseParameter?.(paramDrawerEndpointId, editParamIdx, param)\n } else {\n onEditParameter?.(paramDrawerEndpointId, editParamIdx, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n source={drawerSource}\n />\n </div>\n )\n }\n\n return wrapSSR(\n <div className={cx('root')}>\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n Endpoints\n </Title>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n\n {!collapsed && (\n <div className={cx('body')}>\n {Object.values(endpointsByTag)\n .flat()\n .map((ep) => {\n const isExpanded = expandedId === ep.id\n const methodColor = methodColors[ep.method as keyof typeof methodColors]\n\n return (\n <div key={ep.id}>\n <div className={cx('endpoint-row')}>\n <div\n className={cx('endpoint-card', isExpanded ? 'endpoint-card-active' : '')}\n onClick={() => handleEndpointClick(ep)}\n >\n <span\n className={cx('method-badge')}\n style={{\n color: isExpanded ? '#ffffff' : methodColor?.color,\n borderColor: methodColor?.color,\n backgroundColor: isExpanded ? methodColor?.color : 'transparent',\n }}\n >\n {ep.method}\n </span>\n <OverflowTooltip title={ep.path}>\n <span className={cx('endpoint-path')}>{ep.path}</span>\n </OverflowTooltip>\n </div>\n <UpCircleOutlined\n onClick={() => handleEndpointClick(ep)}\n style={{\n fontSize: 16,\n cursor: 'pointer',\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(180deg)',\n transition: 'transform 0.2s',\n flexShrink: 0,\n color: isExpanded ? token.colorPrimary : token.colorText,\n }}\n />\n </div>\n\n {isExpanded && mode === 'view' && (\n <div className={cx('view-panel')}>\n {/* Request section */}\n <div className={cx('view-params-card')}>\n <div className={cx('view-params-header')}>\n <span className={cx('view-params-title')}>Request</span>\n </div>\n {(() => {\n const allVReqRows = buildViewParamRows(endpointParams[ep.id] ?? [])\n const vReqPage = requestPages.get(ep.id) ?? 1\n const pagedVReqRows = allVReqRows.slice(\n (vReqPage - 1) * VIEW_PAGE_SIZE,\n vReqPage * VIEW_PAGE_SIZE\n )\n return (\n <>\n <Table<ViewParamRow>\n dataSource={pagedVReqRows}\n columns={viewParamColumns}\n pagination={false}\n rowClassName={(_, idx) =>\n cx(idx % 2 === 0 ? 'view-row-odd' : 'view-row-even')\n }\n size=\"small\"\n bordered\n />\n {allVReqRows.length > VIEW_PAGE_SIZE && (\n <div style={{ paddingBottom: 12 }}>\n <Pagination\n current={vReqPage}\n pageSize={VIEW_PAGE_SIZE}\n total={allVReqRows.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n </div>\n )}\n </>\n )\n })()}\n </div>\n\n {/* Response section */}\n <div className={cx('view-params-card')}>\n <div className={cx('view-params-header')}>\n <span className={cx('view-params-title')}>Response</span>\n <Select\n className={cx('view-status-select-sm')}\n popupClassName=\"status-code-dropdown\"\n value={\n selectedStatusCodes[ep.id] ??\n (Object.keys(ep.responses ?? {}).includes('200')\n ? '200'\n : Object.keys(ep.responses ?? {})[0])\n }\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({\n ...prev,\n [ep.id]: val,\n }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{ background: getStatusCodeColor(code, antdToken).dot }}\n />\n <span>{code}</span>\n </span>\n ),\n }))}\n size=\"middle\"\n />\n </div>\n {(() => {\n const allVResRows = buildViewParamRows(endpointResponseParams[ep.id] ?? [])\n const vResPage = responsePages.get(ep.id) ?? 1\n const pagedVResRows = allVResRows.slice(\n (vResPage - 1) * VIEW_PAGE_SIZE,\n vResPage * VIEW_PAGE_SIZE\n )\n return (\n <>\n <Table<ViewParamRow>\n dataSource={pagedVResRows}\n columns={viewParamColumns}\n pagination={false}\n rowClassName={(_, idx) =>\n cx(idx % 2 === 0 ? 'view-row-odd' : 'view-row-even')\n }\n size=\"small\"\n bordered\n />\n {allVResRows.length > VIEW_PAGE_SIZE && (\n <div style={{ paddingBottom: 12 }}>\n <Pagination\n current={vResPage}\n pageSize={VIEW_PAGE_SIZE}\n total={allVResRows.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n </div>\n )}\n </>\n )\n })()}\n {(() => {\n const selectedCode =\n selectedStatusCodes[ep.id] ??\n (Object.keys(ep.responses ?? {}).includes('200')\n ? '200'\n : Object.keys(ep.responses ?? {})[0])\n const responseContent = ep.responses?.[selectedCode]?.content\n if (!responseContent) return null\n const contentEntry = Object.values(responseContent)[0]\n if (!contentEntry) return null\n const schema = contentEntry.schema\n if (!schema) return null\n\n // Case A: content-level example or examples\n let displayData: any\n if (contentEntry.example !== undefined) {\n displayData = contentEntry.example\n } else if (contentEntry.examples !== undefined) {\n const firstKey = Object.keys(contentEntry.examples)[0]\n const firstExample = contentEntry.examples[firstKey]\n displayData = firstExample?.value ?? firstExample\n } else if (hasAnyExample(schema)) {\n // Case B: build from property-level examples\n displayData = generateExampleFromSchema(schema)\n } else {\n // Case C: fallback to raw schema\n displayData = schema\n }\n\n return (\n <div className={cx('code-panel')} style={{ marginTop: token.marginSM }}>\n <code className={cx('code-area')}>\n {JSON.stringify(displayData, null, 2)}\n </code>\n </div>\n )\n })()}\n </div>\n </div>\n )}\n {isExpanded && mode !== 'view' && (\n <div className={cx('endpoint-form')}>\n <div\n className={cx('form-row')}\n style={isMobile ? { flexDirection: 'column' } : undefined}\n >\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={endpointNames[ep.id] ?? ep.summary ?? ''}\n onChange={(e) => onEndpointNameChange(ep.id, e.target.value)}\n maxLength={100}\n showCount\n />\n </div>\n <div className={cx('form-field')}>\n <div className={cx('field-label')}>\n <span>Endpoint Tag</span>\n </div>\n <Select\n mode=\"multiple\"\n size=\"large\"\n style={{ width: '100%' }}\n placeholder=\"Select\"\n value={endpointTags[ep.id] ?? ep.tags ?? []}\n options={availableTags.map((t) => ({ label: t, value: t }))}\n onChange={(val) => onEndpointTagsChange(ep.id, val)}\n />\n </div>\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('field-label')}>\n <span>Description</span>\n <span className={cx('label-optional')}>(optional)</span>\n </div>\n <Input.TextArea\n value={endpointDescs[ep.id] ?? ep.description ?? ''}\n onChange={(e) => onEndpointDescChange(ep.id, e.target.value)}\n maxLength={500}\n showCount\n style={{ height: 52, resize: 'vertical' }}\n />\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginMD,\n }}\n >\n <span className={cx('section-title')}>Request Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n onClick={() => {\n setShowRequestSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }}\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Request Details</span>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showRequestSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointParams[ep.id] ?? []).length === 0}\n value={requestSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setRequestSearches((prev) => ({ ...prev, [ep.id]: val }))\n setRequestPages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const reqSearch = (debouncedRequestSearches[ep.id] ?? '').toLowerCase()\n const allReqParams = (endpointParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(reqSearch)\n )\n if (allReqParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const reqPage = requestPages.get(ep.id) ?? 1\n const pagedReqParams = allReqParams.slice(\n (reqPage - 1) * PAGE_SIZE,\n reqPage * PAGE_SIZE\n )\n return (\n <>\n <div\n className={cx('param-list')}\n style={{ marginTop: token.margin }}\n >\n {pagedReqParams.map((param, i) => {\n const idx = (reqPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Enum\n </span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul\n style={{ margin: 0, paddingLeft: 16 }}\n >\n {param.enum.map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>\n —\n </span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'request',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('request')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allReqParams.length > PAGE_SIZE && (\n <Pagination\n current={reqPage}\n pageSize={PAGE_SIZE}\n total={allReqParams.length}\n onChange={(page) =>\n setRequestPages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n {!['GET', 'DELETE'].includes(ep.method) && (\n <div\n className={cx('param-row', openRequestPanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleRequestPanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openRequestPanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Request <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n )}\n {!['GET', 'DELETE'].includes(ep.method) && openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableRequestContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onRequestContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableRequestContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableRequestContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableRequestContent[ep.id] ?? '',\n (v) =>\n setEditableRequestContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n\n <div className={cx('form-field')} style={{ width: '100%' }}>\n <div className={cx('section-header')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginMD,\n }}\n >\n <span className={cx('section-title')}>Response Details</span>\n <Button\n ghost\n type=\"primary\"\n icon={<SearchOutlined />}\n size=\"large\"\n style={{ width: 40, height: 40, padding: 0 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n onClick={() => {\n setShowResponseSearch((prev) => ({\n ...prev,\n [ep.id]: !prev[ep.id],\n }))\n }}\n />\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>\n <span className={cx('section-title')}>Response Details</span>\n <div className={cx('response-controls')}>\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: 310 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n />\n <Tooltip\n title={selectedStatusCodes[ep.id] ? 'Filled' : undefined}\n placement=\"bottom\"\n >\n <Select\n className={cx('status-select')}\n popupClassName=\"status-code-dropdown\"\n value={selectedStatusCodes[ep.id] ?? undefined}\n onChange={(val: string) =>\n setSelectedStatusCodes((prev) => ({\n ...prev,\n [ep.id]: val,\n }))\n }\n options={Object.keys(ep.responses ?? {}).map((code) => ({\n value: code,\n label: (\n <span className={cx('status-label')}>\n <span\n className={cx('status-dot')}\n style={{\n background: getStatusCodeColor(code, antdToken).dot,\n }}\n />\n <span\n style={{\n color: getStatusCodeColor(code, antdToken).text,\n }}\n >\n {code}\n </span>\n </span>\n ),\n }))}\n optionRender={(option) => {\n const code = option.value as string\n const { dot, text } = getStatusCodeColor(code, antdToken)\n const isSelected = selectedStatusCodes[ep.id] === code\n return (\n <Tooltip title=\"Filled\" placement=\"bottom\">\n <span className={cx('status-option-content')}>\n <span\n className={cx('status-dot')}\n style={{ background: dot }}\n />\n <span style={{ color: text }}>{code}</span>\n {isSelected && (\n <CheckCircleOutlined\n className={cx('status-checkmark')}\n style={{ color: text }}\n />\n )}\n </span>\n </Tooltip>\n )\n }}\n />\n </Tooltip>\n </div>\n </div>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n style={{ height: 32, paddingInline: 8 }}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('add')\n setEditParamIdx(null)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n >\n Add Parameter\n </Button>\n </>\n )}\n </div>\n {isMobile && showResponseSearch[ep.id] && (\n <Input.Search\n placeholder=\"Search by parameter name\"\n style={{ width: '100%', marginTop: 8 }}\n disabled={(endpointResponseParams[ep.id] ?? []).length === 0}\n value={responseSearches[ep.id] ?? ''}\n onChange={(e) => {\n const val = e.target.value\n setResponseSearches((prev) => ({ ...prev, [ep.id]: val }))\n setResponsePages((prev) => new Map(prev).set(ep.id, 1))\n }}\n allowClear\n autoFocus\n />\n )}\n {(endpointResponseParams[ep.id] ?? []).length === 0 ? (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={<span className={cx('empty-description')}>No Data</span>}\n />\n </div>\n ) : (\n (() => {\n const resSearch = (debouncedResponseSearches[ep.id] ?? '').toLowerCase()\n const allResParams = (endpointResponseParams[ep.id] ?? []).filter((p) =>\n p.name.toLowerCase().includes(resSearch)\n )\n if (allResParams.length === 0) {\n return (\n <div className={cx('empty-wrapper')}>\n <Empty\n image={Empty.PRESENTED_IMAGE_SIMPLE}\n imageStyle={{ width: 184, height: 117 }}\n description={\n <span className={cx('empty-description')}>No Data</span>\n }\n />\n </div>\n )\n }\n const resPage = responsePages.get(ep.id) ?? 1\n const pagedResParams = allResParams.slice(\n (resPage - 1) * PAGE_SIZE,\n resPage * PAGE_SIZE\n )\n return (\n <>\n <div\n className={cx('param-list')}\n style={{ marginTop: token.margin }}\n >\n {pagedResParams.map((param, i) => {\n const idx = (resPage - 1) * PAGE_SIZE + i\n return (\n <div key={idx} className={cx('param-item-row')}>\n {isMobile ? (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 24,\n flex: 1,\n minWidth: 0,\n }}\n >\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div\n className={cx('param-detail-cell')}\n style={{ flex: 1, minWidth: 0 }}\n >\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n background: token.colorFillTertiary,\n borderRadius: token.borderRadius,\n padding: `0 ${token.marginSM}px`,\n height: 50,\n flexShrink: 0,\n }}\n >\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n </div>\n </>\n ) : (\n <>\n <div className={cx('param-details')}>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Name\n </span>\n <span className={cx('param-detail-value')}>\n {param.name}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter In\n </span>\n <span className={cx('param-detail-value')}>\n {param.in}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Parameter Type\n </span>\n <span className={cx('param-detail-value')}>\n {param.type}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Enum\n </span>\n {param.enum && param.enum.length > 0 ? (\n <span className={cx('param-enum-container')}>\n <span className={cx('param-enum-tag')}>\n {param.enum[0]}\n </span>\n {param.enum.length > 1 && (\n <Tooltip\n title={\n <ul\n style={{ margin: 0, paddingLeft: 16 }}\n >\n {param.enum.map((e) => (\n <li key={e}>{e}</li>\n ))}\n </ul>\n }\n placement=\"bottom\"\n >\n <span className={cx('param-enum-pill')}>\n +{param.enum.length - 1}\n </span>\n </Tooltip>\n )}\n </span>\n ) : (\n <span className={cx('param-detail-value')}>\n —\n </span>\n )}\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Required?\n </span>\n <span className={cx('param-detail-value')}>\n {param.required ? 'Yes' : 'No'}\n </span>\n </div>\n <div className={cx('param-detail-cell')}>\n <span className={cx('param-detail-label')}>\n Description\n </span>\n <span\n className={cx(\n 'param-detail-value',\n 'param-detail-value--ellipsis'\n )}\n >\n {param.description || '—'}\n </span>\n </div>\n </div>\n <div className={cx('param-actions')}>\n <Button\n ghost\n icon={<EditTagIcon width={18} height={18} />}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n className={cx('param-edit-btn')}\n onClick={() => {\n setDrawerSource('response')\n setParamDrawerMode('edit')\n setEditParamIdx(idx)\n setParamDrawerEndpointId(ep.id)\n setParamDrawerOpen(true)\n }}\n />\n <Button\n danger\n icon={<TrashIcon width={32} height={32} />}\n style={{ padding: 0, lineHeight: 1, width: 40, height: 40 }}\n className={cx('param-delete-btn')}\n onClick={() =>\n setDeleteParamModal({\n open: true,\n endpointId: ep.id,\n idx,\n name: param.name,\n source: 'response',\n })\n }\n />\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n {allResParams.length > PAGE_SIZE && (\n <Pagination\n current={resPage}\n pageSize={PAGE_SIZE}\n total={allResParams.length}\n onChange={(page) =>\n setResponsePages((prev) => new Map(prev).set(ep.id, page))\n }\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n })()\n )}\n <div\n className={cx('param-row', openResponsePanels.has(ep.id) ? 'param-row--open' : '')}\n style={{ marginTop: token.margin }}\n onClick={() => toggleResponsePanel(ep.id)}\n >\n <DownOutlined\n className={cx(\n 'param-row-icon',\n openResponsePanels.has(ep.id) ? 'param-row-icon--open' : ''\n )}\n />\n <span style={{ fontSize: token.fontSize }}>\n Response <span style={{ color: token.colorError }}>*</span>\n </span>\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <Input.TextArea\n value={editableResponseContent[ep.id] ?? ''}\n onChange={(e) => {\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: e.target.value }))\n onResponseContentChange?.(ep.id, e.target.value)\n }}\n rows={Math.max(3, (editableResponseContent[ep.id] ?? '').split('\\n').length)}\n style={{ fontFamily: 'monospace', fontSize: '0.75rem', background: '#1D2856', color: '#fff', outline: 'none', boxShadow: 'none', border: 'none' }}\n />\n <div className={cx('code-footer')}>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() => handleValidate(editableResponseContent[ep.id] ?? '')}\n >\n Validate\n </Button>\n <Button\n ghost\n size=\"small\"\n className={cx('code-btn')}\n onClick={() =>\n handleBeautify(\n editableResponseContent[ep.id] ?? '',\n (v) =>\n setEditableResponseContent((prev) => ({ ...prev, [ep.id]: v }))\n )\n }\n >\n Beautify\n </Button>\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n <Modal\n open={deleteParamModal.open}\n onCancel={() =>\n setDeleteParamModal({ open: false, endpointId: '', idx: -1, name: '', source: 'request' })\n }\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-param-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {deleteParamModal.name} parameter</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {deleteParamModal.name} parameter?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() =>\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n onClick={() => {\n const epId = deleteParamModal.endpointId\n const src = deleteParamModal.source\n if (src === 'response') {\n const total = (endpointResponseParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((responsePages.get(epId) ?? 1) > maxPage)\n setResponsePages((prev) => new Map(prev).set(epId, 1))\n onDeleteResponseParameter?.(epId, deleteParamModal.idx)\n } else {\n const total = (endpointParams[epId] ?? []).length - 1\n const maxPage = Math.max(1, Math.ceil(total / PAGE_SIZE))\n if ((requestPages.get(epId) ?? 1) > maxPage)\n setRequestPages((prev) => new Map(prev).set(epId, 1))\n onDeleteParameter?.(epId, deleteParamModal.idx)\n }\n setDeleteParamModal({\n open: false,\n endpointId: '',\n idx: -1,\n name: '',\n source: 'request',\n })\n }}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n\n <AddParameterDrawer\n open={paramDrawerOpen}\n mode={paramDrawerMode}\n endpointName={drawerEndpointName}\n initialValues={\n paramDrawerMode === 'edit' && paramDrawerEndpointId && editParamIdx !== null\n ? drawerSource === 'response'\n ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx]\n : endpointParams[paramDrawerEndpointId]?.[editParamIdx]\n : undefined\n }\n onClose={() => {\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onAdd={(param) => {\n if (paramDrawerEndpointId) {\n if (drawerSource === 'response') {\n onAddResponseParameter?.(paramDrawerEndpointId, param)\n } else {\n onAddParameter?.(paramDrawerEndpointId, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n onEdit={(param) => {\n if (paramDrawerEndpointId && editParamIdx !== null) {\n if (drawerSource === 'response') {\n onEditResponseParameter?.(paramDrawerEndpointId, editParamIdx, param)\n } else {\n onEditParameter?.(paramDrawerEndpointId, editParamIdx, param)\n }\n }\n setParamDrawerOpen(false)\n setParamDrawerEndpointId(null)\n setParamDrawerMode('add')\n setEditParamIdx(null)\n }}\n source={drawerSource}\n />\n </div>\n )\n}\n","'use client'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { Alert } from 'antd'\nimport { ExclamationCircleFilled } from '@ant-design/icons'\n\ninterface UnsavedChangesBannerProps {\n onClose: () => void\n}\n\nexport const UnsavedChangesBanner = ({ onClose }: UnsavedChangesBannerProps) => {\n const { wrapSSR, cx } = useStyle('UnsavedChangesBanner', (token, scope) => ({\n [scope('root')]: {\n position: 'sticky',\n top: 0,\n zIndex: 100,\n width: '100%',\n marginTop: -20,\n },\n [scope('alert')]: {\n padding: '8px 12px',\n fontSize: token.fontSize,\n fontWeight: 400,\n borderRadius: 0,\n },\n }))\n\n return wrapSSR(\n <div className={cx('root')}>\n <Alert\n className={cx('alert')}\n type=\"warning\"\n message=\"There are changes you made that may not be saved\"\n closable\n onClose={onClose}\n icon={<ExclamationCircleFilled />}\n showIcon\n />\n </div>\n )\n}\n","import { useState, type FC } from 'react'\nimport { Button, Tooltip, Grid, Pagination } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { PlusOutlined, UpCircleOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport EditTagIcon from '@doc-lib/assets/icons/editTag'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nconst TAGS_PAGE_SIZE = 8\n\ninterface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n}\n\ninterface TagsSectionProps {\n tags: TagMeta[]\n collapsed?: boolean\n onToggleCollapse?: () => void\n onChangeDetected?: () => void\n onAddTag?: () => void\n onEditTag?: (tag: TagMeta) => void\n onDeleteTag?: (tagName: string, tagIndex: number) => void\n}\n\nexport const TagsSection: FC<TagsSectionProps> = ({\n tags,\n collapsed,\n onToggleCollapse,\n onAddTag,\n onEditTag,\n onDeleteTag,\n}) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const [currentPage, setCurrentPage] = useState(1)\n const sortedTags = [...tags].sort((a, b) => (a.isDefault === b.isDefault ? 0 : a.isDefault ? -1 : 1))\n const maxPage = Math.max(1, Math.ceil(tags.length / TAGS_PAGE_SIZE))\n const safePage = Math.min(currentPage, maxPage)\n const paginatedTags = sortedTags.slice((safePage - 1) * TAGS_PAGE_SIZE, safePage * TAGS_PAGE_SIZE)\n const { wrapSSR, cx, token } = useStyle('TagsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.marginLG,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n width: '100%',\n },\n [scope('head')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n [scope('tags-list')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n width: '100%',\n },\n [scope('tag-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minHeight: 50,\n paddingTop: 12,\n paddingBottom: 12,\n width: '100%',\n borderBottom: `1px solid ${token.colorBorder}`,\n },\n [scope('tag-row-last')]: {\n borderBottom: 'none',\n },\n [scope('tag-info')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXL,\n flex: 1,\n minWidth: 0,\n },\n [scope('tag-col')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.marginXXS,\n },\n [scope('col-label')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 600,\n color: token.colorTextTertiary,\n lineHeight: '24px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('col-value')]: {\n fontSize: token.fontSizeLG,\n fontWeight: 400,\n color: token.colorText,\n lineHeight: '24px',\n whiteSpace: 'nowrap' as const,\n },\n [scope('col-value-link')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorPrimary,\n lineHeight: '22px',\n textDecoration: 'underline',\n whiteSpace: 'nowrap' as const,\n },\n [scope('tag-actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n },\n [scope('tag-row-mobile')]: {\n display: 'flex',\n flexDirection: 'row' as const,\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 8,\n paddingTop: 12,\n paddingBottom: token.margin,\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n minHeight: 50,\n },\n [scope('tag-row-mobile-last')]: {\n borderBottom: 'none',\n paddingBottom: 0,\n },\n [scope('tag-info-mobile')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: 2,\n flex: 1,\n minWidth: 0,\n paddingTop: 4,\n },\n [scope('tag-col-mobile')]: {\n display: 'flex',\n flexDirection: 'row' as const,\n gap: 4,\n alignItems: 'center',\n minWidth: 0,\n flexWrap: 'nowrap' as const,\n },\n [scope('body-mobile')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: 0,\n overflowX: 'auto' as const,\n },\n [scope('head-collapse')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorPrimaryBg,\n borderRadius: `${token.borderRadius}px ${token.borderRadius}px 0 0`,\n },\n [scope('body-collapse')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.margin,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('pagination')]: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: token.marginMD,\n '.ant-pagination-item-active': {\n backgroundColor: token.colorBgContainer,\n borderColor: token.colorPrimary,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n a: {\n color: token.colorPrimary,\n fontWeight: token.fontWeightStrong,\n fontSize: token.fontSize,\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n },\n '.ant-pagination-item': {\n borderRadius: token.borderRadius,\n minWidth: 32,\n height: 32,\n lineHeight: '32px',\n a: { color: token.colorText, fontWeight: 400, fontSize: token.fontSize },\n },\n '.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link':\n {\n borderRadius: token.borderRadius,\n width: 32,\n height: 32,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n background: 'transparent',\n },\n },\n }))\n\n const mobileTagsList = (\n <>\n <div className={cx('body-mobile')}>\n {paginatedTags.map((tag, index) => {\n const isLast = index === paginatedTags.length - 1\n return (\n <div\n key={tag.name}\n className={cx('tag-row-mobile', isLast ? 'tag-row-mobile-last' : '')}\n >\n <div className={cx('tag-info-mobile')}>\n <div className={cx('tag-col-mobile')}>\n <span\n className={cx('col-label')}\n style={{ fontSize: token.fontSize, lineHeight: '20px' }}\n >\n Tag Name:\n </span>\n <span\n className={cx('col-value')}\n style={{\n fontSize: token.fontSize,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {tag.name}\n </span>\n </div>\n <div className={cx('tag-col-mobile')}>\n <span\n className={cx('col-label')}\n style={{ fontSize: token.fontSize, lineHeight: '20px' }}\n >\n Description:\n </span>\n <Tooltip\n title={tag.description && tag.description.length > 20 ? tag.description : ''}\n >\n <span\n className={cx('col-value')}\n style={{\n fontSize: token.fontSize,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: 140,\n display: 'block',\n }}\n >\n {tag.description ?? '-'}\n </span>\n </Tooltip>\n </div>\n </div>\n <div className={cx('tag-actions')} style={{ paddingTop: 6, flexShrink: 0 }}>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex(t => t.name === tag.name))}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n icon={<EditTagIcon />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1, ...(!tag.isDefault && { color: '#A146B3' }) }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n {tags.length > TAGS_PAGE_SIZE && (\n <Pagination\n current={safePage}\n pageSize={TAGS_PAGE_SIZE}\n total={tags.length}\n onChange={setCurrentPage}\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </>\n )\n\n return wrapSSR(\n isMobile ? (\n <div style={{ width: '100%' }}>\n <div className={cx('head-collapse')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>Tags</Title>\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginXS }}>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={onAddTag}\n style={{ borderRadius: token.borderRadius }}\n >\n Add Tag\n </Button>\n <Button\n type=\"text\"\n size=\"large\"\n icon={<UpCircleOutlined style={{ fontSize: 18 }} />}\n onClick={onToggleCollapse}\n style={{\n transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n </div>\n {!collapsed && (\n <div className={cx('body-collapse')}>\n {mobileTagsList}\n </div>\n )}\n </div>\n ) : (\n <div className={cx('root')}>\n {/* Header */}\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>Tags</Title>\n <Button\n ghost\n type=\"primary\"\n icon={<PlusOutlined />}\n onClick={onAddTag}\n style={{ borderRadius: token.borderRadius }}\n >\n Add Tag\n </Button>\n </div>\n\n {/* Tags list */}\n <div className={cx('tags-list')}>\n {paginatedTags.map((tag, index) => {\n const isLast = index === paginatedTags.length - 1\n return (\n <div key={tag.name} className={cx('tag-row', isLast ? 'tag-row-last' : '')}>\n <div className={cx('tag-info')}>\n <div className={cx('tag-col')} style={{ width: 200 }}>\n <span className={cx('col-label')}>Tag Name</span>\n <span className={cx('col-value')}>{tag.name}</span>\n </div>\n <div className={cx('tag-col')} style={{ width: 280 }}>\n <span className={cx('col-label')}>Description</span>\n <Tooltip\n title={tag.description && tag.description.length > 30 ? tag.description : ''}\n >\n <span\n className={cx('col-value')}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: 280,\n display: 'block',\n }}\n >\n {tag.description ?? '-'}\n </span>\n </Tooltip>\n </div>\n <div className={cx('tag-col')} style={{ flex: 1, minWidth: 0 }}>\n <span className={cx('col-label')}>External Docs</span>\n {tag.externalDocsUrl ? (\n <Tooltip\n title={tag.externalDocsUrl.length > 25 ? tag.externalDocsUrl : ''}\n >\n <a\n href={tag.externalDocsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cx('col-value-link')}\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n display: 'block',\n }}\n >\n {tag.externalDocsUrl}\n </a>\n </Tooltip>\n ) : (\n <span className={cx('col-value')}>-</span>\n )}\n </div>\n </div>\n <div className={cx('tag-actions')}>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n danger\n type=\"text\"\n icon={<TrashIcon width={32} height={32} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex(t => t.name === tag.name))}\n style={{ width: 40, height: 40, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n <Tooltip\n title={tag.isDefault ? 'The default tag cannot be deleted or edited' : ''}\n >\n <Button\n icon={<EditTagIcon />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1, ...(!tag.isDefault && { color: '#A146B3' }) }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n {tags.length > TAGS_PAGE_SIZE && (\n <Pagination\n current={safePage}\n pageSize={TAGS_PAGE_SIZE}\n total={tags.length}\n onChange={setCurrentPage}\n showSizeChanger={false}\n className={cx('pagination')}\n />\n )}\n </div>\n ),\n )\n}\n","import type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button, Drawer, Form, Input, Modal, message } from 'antd'\nimport { PlusOutlined } from '@ant-design/icons'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nexport interface TagFormValues {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n}\n\ninterface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n}\n\ninterface AddTagDrawerProps {\n open: boolean\n onClose: () => void\n mode: 'add' | 'edit'\n initialValues?: TagFormValues\n onAddTag?: (tag: TagFormValues) => void\n onEditTag?: (tag: TagFormValues) => void\n existingTags?: TagMeta[]\n}\n\nconst TAG_NAME_REGEX = /^[A-Za-z0-9_\\s-]+$/\nconst TAG_DESC_REGEX = /^[A-Za-z0-9_\\s-]+$/\nconst EXTERNAL_DOCS_DESC_REGEX = /^[A-Za-z0-9_\\s-]+$/\n\nexport const AddTagDrawer: FC<AddTagDrawerProps> = ({\n open,\n onClose,\n mode,\n initialValues,\n onAddTag,\n onEditTag,\n existingTags,\n}) => {\n const [form] = Form.useForm()\n const [messageApi, contextHolder] = message.useMessage()\n const [confirmModalOpen, setConfirmModalOpen] = useState(false)\n const [tagName, setTagName] = useState('')\n const tagNameValue = Form.useWatch('name', form) as string | undefined\n const extDocsDesc = Form.useWatch('externalDocsDescription', form) as string | undefined\n const extDocsLink = Form.useWatch('externalDocsLink', form) as string | undefined\n\n const { wrapSSR, cx, token } = useStyle('AddTagDrawer', (token, scope) => ({\n // ── Drawer title ──────────────────────────────────────────────────────────\n [scope('title')]: {\n fontSize: 16,\n fontWeight: 600,\n color: token.colorTextBase,\n lineHeight: '24px',\n fontFamily: 'Cairo SemiBold, Cairo, sans-serif',\n },\n // ── Form ──────────────────────────────────────────────────────────────────\n [scope('form-body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n '& .ant-form-item': {\n marginBottom: 0,\n },\n },\n [scope('label')]: {\n fontSize: token.fontSize,\n color: token.colorText,\n },\n [scope('asterisk')]: {\n color: token.colorError,\n marginLeft: 2,\n },\n [scope('label-optional')]: {\n color: token.colorTextTertiary,\n marginLeft: 4,\n fontSize: token.fontSize,\n },\n [scope('label-secondary')]: {\n fontSize: token.fontSize,\n color: token.colorTextSecondary,\n },\n [scope('label-disabled')]: {\n fontSize: token.fontSize,\n color: token.colorTextDisabled,\n },\n // ── Drawer footer ─────────────────────────────────────────────────────────\n [scope('footer')]: {\n display: 'flex',\n gap: 24,\n },\n [scope('footer-btn')]: {\n flex: 1,\n },\n // ── Confirm modal — AntD padding reset (scoped to className) ─────────────\n [scope('confirmModal')]: {\n '& .ant-modal-content': {\n padding: '0 !important',\n borderRadius: '8px !important',\n overflow: 'hidden !important',\n },\n '& .ant-modal-body': {\n padding: '0 !important',\n margin: '0 !important',\n },\n },\n ['.add-tag-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('modalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('modalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('modalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('modalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('modalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('modalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n const isLinkEnabled = Boolean(extDocsDesc?.trim())\n const isAddEnabled = !!(tagNameValue && TAG_NAME_REGEX.test(tagNameValue)) && !form.getFieldsError().some((field) => field.errors.length > 0)\n\n // Pre-fill form when opening in edit mode; reset when closing\n useEffect(() => {\n if (open && mode === 'edit' && initialValues) {\n form.setFieldsValue(initialValues)\n }\n if (!open) {\n form.resetFields()\n }\n }, [open])\n\n// Re-run link validation whenever the link value or description changes,\n // so the validator always reads the freshest form store state\n useEffect(() => {\n if (extDocsDesc?.trim()) {\n form.validateFields(['externalDocsLink']).catch(() => {})\n }\n }, [extDocsLink, extDocsDesc])\n\n const handleClose = () => {\n form.resetFields()\n onClose()\n }\n\n const handleAddTagClick = async () => {\n try {\n await form.validateFields()\n setTagName(form.getFieldValue('name') ?? '')\n setConfirmModalOpen(true)\n } catch {\n // validation failed — stay open, show field errors\n }\n }\n\n const handleConfirm = () => {\n const values = form.getFieldsValue() as TagFormValues\n const payload: TagFormValues = {\n name: values.name,\n description: values.description || undefined,\n externalDocsDescription: values.externalDocsDescription || undefined,\n externalDocsLink: values.externalDocsLink || undefined,\n }\n if (mode === 'edit') {\n onEditTag?.(payload)\n messageApi.success(`${tagName} tag has been updated successfully.`)\n } else {\n onAddTag?.(payload)\n messageApi.success(`${tagName} tag has been added successfully.`)\n }\n setConfirmModalOpen(false)\n onClose()\n form.resetFields()\n }\n\n const drawerTitle = mode === 'edit' ? 'Edit Tag' : 'Add Tag'\n const confirmVerb = mode === 'edit' ? 'edit' : 'add'\n const confirmBtnLabel = mode === 'edit' ? 'Yes, Update' : 'Yes, Add'\n\n return wrapSSR(\n <>\n {contextHolder}\n <Drawer\n open={open}\n onClose={handleClose}\n width={480}\n closable={false}\n title={<span className={cx('title')}>{drawerTitle}</span>}\n styles={{\n header: {\n padding: '16px 24px',\n borderBottom: `1px solid ${token.colorFillSecondary}`,\n background: token.colorBgBase,\n },\n body: { padding: '24px' },\n footer: {\n padding: '24px',\n background: token.colorPrimaryBg,\n borderTop: `1px solid ${token.colorFillSecondary}`,\n },\n }}\n footer={\n <div className={cx('footer')}>\n <Button size=\"large\" className={cx('footer-btn')} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n size=\"large\"\n type=\"primary\"\n icon={mode === 'add' ? <PlusOutlined /> : undefined}\n className={cx('footer-btn')}\n disabled={!isAddEnabled}\n onClick={handleAddTagClick}\n >\n {mode === 'edit' ? 'Update Tag' : 'Add Tag'}\n </Button>\n </div>\n }\n >\n <Form form={form} layout=\"vertical\" requiredMark={false} className={cx('form-body')}>\n {/* 1. Tag Name — required */}\n <Form.Item\n name=\"name\"\n label={\n <span className={cx('label')}>\n Tag Name<span className={cx('asterisk')}>*</span>\n </span>\n }\n rules={[\n { required: true, message: 'Tag Name is required' },\n { min: 1 },\n { max: 25, message: 'Maximum 25 characters' },\n {\n pattern: TAG_NAME_REGEX,\n message: 'Only letters, numbers, spaces, underscores, and hyphens',\n },\n {\n validator: (_, value: string) => {\n if (!value || !existingTags?.length) return Promise.resolve()\n const originalName = initialValues?.name\n const isDuplicate = existingTags.some(\n (t) =>\n t.name.toLowerCase() === value.toLowerCase() &&\n t.name.toLowerCase() !== originalName?.toLowerCase()\n )\n if (isDuplicate) {\n return Promise.reject(new Error('Tag name already exists'))\n }\n return Promise.resolve()\n },\n },\n ]}\n >\n <Input showCount maxLength={25} placeholder=\"API Name\" />\n </Form.Item>\n\n {/* 2. Description — optional */}\n <Form.Item\n name=\"description\"\n label={\n <span className={cx('label-secondary')}>\n Description<span className={cx('label-optional')}>(optional)</span>\n </span>\n }\n rules={[\n { max: 50, message: 'Maximum 50 characters' },\n {\n pattern: TAG_DESC_REGEX,\n message: 'Only letters, numbers, spaces, _ and - allowed',\n },\n ]}\n >\n <Input.TextArea\n showCount\n maxLength={50}\n placeholder=\"Textarea\"\n style={{ height: 52, resize: 'none' }}\n />\n </Form.Item>\n\n {/* 3. External Docs Description — optional */}\n <Form.Item\n name=\"externalDocsDescription\"\n label={<span className={cx('label-secondary')}>External Docs Description</span>}\n rules={[\n { max: 25, message: 'Maximum 25 characters' },\n {\n pattern: EXTERNAL_DOCS_DESC_REGEX,\n message: 'Only letters, numbers, spaces, _ and - allowed',\n },\n ]}\n >\n <Input\n showCount\n maxLength={25}\n placeholder=\"Describe External Docs\"\n onChange={(e) => {\n if (!e.target.value?.trim()) {\n form.setFields([{ name: 'externalDocsLink', value: undefined, errors: [] }])\n }\n }}\n />\n </Form.Item>\n\n {/* 4. External Docs Link — conditionally required + disabled */}\n <Form.Item\n name=\"externalDocsLink\"\n dependencies={['externalDocsDescription']}\n label={\n <span className={isLinkEnabled ? cx('label-secondary') : cx('label-disabled')}>\n External Docs Link\n </span>\n }\n rules={[\n { max: 500, message: 'Maximum 500 characters' },\n {\n validator: async () => {\n const desc = form.getFieldValue('externalDocsDescription') as string | undefined\n const link = form.getFieldValue('externalDocsLink') as string | undefined\n\n if (!desc?.trim()) return Promise.resolve()\n\n if (!link?.trim()) {\n return Promise.reject(\n new Error('External Docs Link is required when Description is filled')\n )\n }\n\n try {\n const urlPattern = /^https?:\\/\\/[a-zA-Z0-9]+([\\-\\.]{1}[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,}(:[0-9]{1,5})?(\\/.*)?$/\n if (!urlPattern.test(link)) {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n return Promise.resolve()\n } catch {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n },\n },\n ]}\n >\n <Input\n showCount\n maxLength={500}\n placeholder=\"External Docs Link\"\n disabled={!isLinkEnabled}\n />\n </Form.Item>\n </Form>\n </Drawer>\n\n {/* Confirmation modal */}\n <Modal\n open={confirmModalOpen}\n onCancel={() => setConfirmModalOpen(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"add-tag-confirm-modal\"\n styles={{ mask: { backgroundColor: 'rgba(0,0,0,0.45)' } }}\n >\n {/* HEAD */}\n <div className={cx('modalHead')}>\n <span className={cx('modalTitle')}>\n {mode === 'edit' ? 'Edit' : 'Add'} {tagName} tag\n </span>\n <button\n className={cx('modalCloseBtn')}\n onClick={() => setConfirmModalOpen(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n {/* CONTENT */}\n <div className={cx('modalContent')}>\n <span className={cx('modalContentText')}>\n Are you sure you want to {confirmVerb} {tagName} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('modalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setConfirmModalOpen(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={handleConfirm}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: token.colorPrimary,\n borderColor: token.colorPrimary,\n boxShadow: `0px 2px 0px ${token.colorPrimaryBg}`,\n }}\n >\n {confirmBtnLabel}\n </Button>\n </div>\n </Modal>\n </>\n )\n}\n","import React from 'react'\n\nconst RestApiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#restapi-clip)\">\n <path d=\"M14.4059 7.73805H13.2601V7.23565C13.2601 7.11607 13.1787 7.01187 13.0626 6.98294L12.2915 6.79083L11.8883 5.81794L12.2975 5.13716C12.3591 5.03469 12.343 4.90341 12.2585 4.81888L11.1795 3.73987C11.0949 3.65531 10.9636 3.63922 10.8612 3.70081L10.1804 4.11003L9.20745 3.70685L9.01534 2.9357C8.98644 2.81966 8.88222 2.73823 8.76264 2.73823H8.26032V1.59245C8.26032 1.44862 8.14373 1.33203 7.9999 1.33203C7.85607 1.33203 7.73949 1.44862 7.73949 1.59245V2.73823H7.23709C7.11751 2.73823 7.01331 2.81966 6.98438 2.9357L6.79227 3.70685L5.81938 4.11003L5.1386 3.70081C5.03607 3.63919 4.90485 3.65529 4.82032 3.73987L3.74131 4.81888C3.65675 4.90344 3.64066 5.03471 3.70225 5.13716L4.11146 5.81794L3.70829 6.79083L2.93714 6.98294C2.8211 7.01185 2.73967 7.11607 2.73967 7.23565V7.73805H1.59391C1.45008 7.73805 1.3335 7.85463 1.3335 7.99846C1.3335 8.14226 1.45008 8.25888 1.59391 8.25888H2.73969V8.76128C2.73969 8.88086 2.82113 8.98508 2.93717 9.01396L3.70831 9.20609L4.11149 10.179L3.70225 10.8598C3.64063 10.9623 3.65675 11.0935 3.74131 11.1781L4.82032 12.2571C4.90488 12.3416 5.03615 12.3577 5.13865 12.2961L5.81941 11.8869L6.79232 12.2901L6.98443 13.0612C7.01334 13.1773 7.11756 13.2587 7.23714 13.2587H7.73951V14.4045C7.73951 14.5483 7.8561 14.6649 7.99993 14.6649C8.14376 14.6649 8.26034 14.5483 8.26034 14.4045V13.2587H8.76274C8.88232 13.2587 8.98652 13.1773 9.01545 13.0612L9.20756 12.2901L10.1805 11.8869L10.8612 12.2961C10.9637 12.3577 11.095 12.3416 11.1796 12.2571L12.2586 11.1781C12.3431 11.0935 12.3592 10.9622 12.2976 10.8598L11.8884 10.179L12.2916 9.20609L13.0627 9.01396C13.1788 8.98508 13.2602 8.88086 13.2602 8.76128V8.25888H14.406C14.5498 8.25888 14.6664 8.14226 14.6664 7.99846C14.6663 7.85463 14.5497 7.73805 14.4059 7.73805ZM12.7393 8.55779L12.0382 8.73247C11.9581 8.75245 11.8922 8.80919 11.8606 8.88547L11.3569 10.1009C11.3253 10.1772 11.3318 10.264 11.3743 10.3348L11.7463 10.9537L10.9551 11.7449L10.3362 11.3729C10.2654 11.3303 10.1786 11.3239 10.1023 11.3555L8.88686 11.8592C8.81058 11.8909 8.75383 11.9567 8.73386 12.0369L8.5592 12.7379H7.44055L7.26589 12.0369C7.24592 11.9567 7.18917 11.8909 7.1129 11.8592L5.89743 11.3555C5.82113 11.3239 5.73435 11.3303 5.66355 11.3729L5.04464 11.7449L4.25342 10.9537L4.62545 10.3348C4.668 10.264 4.67443 10.1772 4.64282 10.1009L4.13912 8.88547C4.10751 8.80919 4.04159 8.75245 3.96149 8.73247L3.26045 8.55779V7.43914L3.96152 7.26448C4.04162 7.2445 4.10753 7.18776 4.13915 7.11148L4.64284 5.89602C4.67446 5.81971 4.668 5.73294 4.62548 5.66216L4.25344 5.04325L5.04467 4.25203L5.66357 4.62406C5.73435 4.66661 5.82113 4.67307 5.89743 4.64143L7.1129 4.13773C7.18917 4.10612 7.24592 4.04021 7.26589 3.9601L7.44055 3.25904H8.5592L8.73386 3.9601C8.75383 4.04021 8.81058 4.10612 8.88686 4.13773L10.1023 4.64143C10.1787 4.67305 10.2654 4.66659 10.3362 4.62406L10.9551 4.25203L11.7463 5.04325L11.3743 5.66216C11.3317 5.73294 11.3253 5.81971 11.3569 5.89602L11.8606 7.11148C11.8922 7.18776 11.9581 7.2445 12.0382 7.26448L12.7393 7.43914V8.55779Z\" fill=\"currentColor\"/>\n <path d=\"M9.14809 4.86755C9.01309 4.81807 8.86346 4.88729 8.8139 5.02229C8.76434 5.15731 8.83364 5.30692 8.96864 5.35648C10.0712 5.76114 10.8121 6.82252 10.8121 7.99757C10.8121 9.54835 9.55041 10.81 7.99965 10.81C6.4489 10.81 5.18729 9.54833 5.18729 7.99755C5.18729 6.88567 5.84426 5.87593 6.86098 5.42515C6.99247 5.36687 7.05179 5.21302 6.99348 5.08156C6.9352 4.9501 6.78132 4.89075 6.64989 4.94906C5.44505 5.48325 4.6665 6.67987 4.6665 7.99755C4.6665 9.83546 6.16176 11.3308 7.99971 11.3308C9.83765 11.3308 11.3329 9.83546 11.3329 7.99755C11.3329 6.605 10.4549 5.34713 9.14809 4.86755Z\" fill=\"currentColor\"/>\n <path d=\"M8.01348 4.66409L7.99967 4.66406C7.85585 4.66406 7.73926 4.78065 7.73926 4.92448C7.73926 5.06831 7.85585 5.1849 7.99967 5.1849L8.01194 5.18492C8.0122 5.18492 8.01246 5.18492 8.01272 5.18492C8.15618 5.18492 8.2727 5.06883 8.27314 4.92526C8.27355 4.78143 8.1573 4.6645 8.01348 4.66409Z\" fill=\"currentColor\"/>\n <path d=\"M9.81413 6.96094C9.6703 6.96094 9.55371 7.07753 9.55371 7.22135V8.73919C9.55371 8.883 9.6703 8.99961 9.81413 8.99961C9.95796 8.99961 10.0745 8.883 10.0745 8.73919V7.22133C10.0745 7.0775 9.95796 6.96094 9.81413 6.96094Z\" fill=\"currentColor\"/>\n <path d=\"M8.55132 6.96094H8.01481C7.87098 6.96094 7.75439 7.07753 7.75439 7.22135V7.74057V8.09581V8.73917C7.75439 8.88297 7.87098 8.99958 8.01481 8.99958C8.15864 8.99958 8.27523 8.88297 8.27523 8.73917V8.35622H8.55135C8.91463 8.35622 9.2102 8.06063 9.2102 7.69737V7.61979C9.21018 7.25648 8.91463 6.96094 8.55132 6.96094ZM8.68937 7.69734C8.68937 7.77346 8.62744 7.83539 8.55132 7.83539H8.2752V7.74055V7.48172H8.55132C8.62744 7.48172 8.68937 7.54365 8.68937 7.61977V7.69734Z\" fill=\"currentColor\"/>\n <path d=\"M7.47523 8.67635L6.80685 7.1187C6.76581 7.02297 6.67169 6.96094 6.56755 6.96094C6.46341 6.96094 6.3693 7.02297 6.32823 7.11867L5.65984 8.67633C5.60312 8.80849 5.6643 8.96161 5.79648 9.01831C5.92867 9.075 6.08177 9.01385 6.13849 8.88169L6.56755 7.88172L6.99664 8.88169C7.03898 8.98039 7.13508 9.0395 7.23607 9.0395C7.27031 9.0395 7.30515 9.03268 7.33862 9.01833C7.47078 8.96164 7.53195 8.80852 7.47523 8.67635Z\" fill=\"currentColor\"/>\n <path d=\"M13.7813 1.33203C13.2931 1.33203 12.896 1.72919 12.896 2.21742C12.896 2.3668 12.9333 2.50755 12.9989 2.63107L12.0025 3.62737C11.9008 3.72906 11.9008 3.89396 12.0025 3.99565C12.0534 4.04648 12.1201 4.0719 12.1867 4.0719C12.2533 4.0719 12.32 4.04648 12.3708 3.99562L13.367 2.99951C13.4907 3.06531 13.6317 3.10279 13.7813 3.10279C14.2695 3.10279 14.6667 2.70562 14.6667 2.2174C14.6667 1.72917 14.2696 1.33203 13.7813 1.33203Z\" fill=\"currentColor\"/>\n <path d=\"M3.99712 12.002C3.89542 11.9004 3.73053 11.9004 3.62886 12.002L2.6329 12.998C2.50925 12.9323 2.36837 12.8949 2.21889 12.8949C1.73066 12.8949 1.3335 13.2921 1.3335 13.7803C1.3335 14.2685 1.73066 14.6657 2.21889 14.6657C2.70712 14.6657 3.10428 14.2685 3.10428 13.7803C3.10428 13.6308 3.06688 13.4899 3.00118 13.3663L3.99714 12.3703C4.09881 12.2686 4.09881 12.1037 3.99712 12.002Z\" fill=\"currentColor\"/>\n <path d=\"M12.3711 12.0021C12.3224 11.9536 12.2552 11.9258 12.1867 11.9258C12.1182 11.9258 12.051 11.9536 12.0026 12.0021C11.9541 12.0505 11.9263 12.1177 11.9263 12.1862C11.9263 12.2547 11.9541 12.3219 12.0026 12.3703C12.051 12.4187 12.1182 12.4466 12.1867 12.4466C12.2554 12.4466 12.3224 12.4187 12.3711 12.3703C12.4195 12.3219 12.4471 12.2549 12.4471 12.1862C12.4471 12.1177 12.4195 12.0505 12.3711 12.0021Z\" fill=\"currentColor\"/>\n <path d=\"M13.7813 12.8934C13.6316 12.8934 13.4906 12.9308 13.3669 12.9967L12.927 12.5567C12.8253 12.4551 12.6604 12.455 12.5587 12.5567C12.457 12.6584 12.457 12.8233 12.5587 12.925L12.9988 13.3651C12.9332 13.4887 12.8959 13.6294 12.8959 13.7788C12.8959 14.267 13.2931 14.6642 13.7813 14.6642C14.2695 14.6642 14.6666 14.267 14.6666 13.7788C14.6666 13.2905 14.2695 12.8934 13.7813 12.8934Z\" fill=\"currentColor\"/>\n <path d=\"M3.99712 3.62737L3.00118 2.63143C3.06688 2.50779 3.10428 2.3669 3.10428 2.21742C3.10428 1.72922 2.70712 1.33203 2.21889 1.33203C1.73066 1.33203 1.3335 1.72919 1.3335 2.21742C1.3335 2.70565 1.73066 3.10281 2.21889 3.10281C2.36839 3.10281 2.50928 3.06542 2.6329 2.99971L3.62886 3.99565C3.67972 4.04651 3.74636 4.07193 3.813 4.07193C3.87964 4.07193 3.94631 4.04651 3.99714 3.99565C4.09881 3.89396 4.09881 3.72906 3.99712 3.62737Z\" fill=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"restapi-clip\">\n <rect width=\"13.3333\" height=\"13.3333\" fill=\"white\" transform=\"translate(1.3335 1.33203)\"/>\n </clipPath>\n </defs>\n </svg>\n)\n\nexport default RestApiIcon\n","'use client'\n\nimport { ExclamationCircleOutlined, TagOutlined } from '@ant-design/icons'\nimport { Menu, Tag } from 'antd'\nimport type { MenuProps } from 'antd'\nimport RestApiIcon from '@doc-lib/assets/icons/restApi'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { methodColors } from '@doc-lib/view/helper/sidebar.utils'\nimport type { EndpointData } from '@doc-lib/view/entities'\n\nexport type EditModeSelection =\n | { type: 'general' }\n | { type: 'tags' }\n | { type: 'endpoint'; key: string }\n | { type: 'errors' }\n\ninterface EditModeSidebarProps {\n selectedItem: EditModeSelection\n onSelectItem: (item: EditModeSelection) => void\n endpoints: EndpointData[]\n hasGeneralError?: boolean\n hasSaveErrors?: boolean\n}\n\nexport const EditModeSidebar = ({ selectedItem, onSelectItem, endpoints, hasGeneralError, hasSaveErrors }: EditModeSidebarProps) => {\n const { wrapSSR, cx, token } = useStyle('EditModeSidebar', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: token.marginXS,\n padding: token.padding,\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadius,\n width: 320,\n minWidth: 320,\n flexShrink: 0,\n overflowY: 'auto' as const,\n },\n [scope('spec-icon')]: {\n fontSize: 16,\n color: token.colorTextSecondary,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n },\n [scope('spec-label')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorText,\n lineHeight: '22px',\n },\n [scope('badge')]: {\n minWidth: '3.75rem',\n textAlign: 'center' as const,\n border: 'none',\n fontSize: 14,\n },\n [scope('path')]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden' as const,\n textOverflow: 'ellipsis' as const,\n flex: 1,\n },\n [`${scope('root')} .ant-menu`]: {\n background: 'transparent',\n border: 'none',\n paddingInline: 0,\n },\n [`${scope('root')} .ant-menu-item`]: {\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n borderRadius: token.borderRadius,\n height: 'auto',\n lineHeight: '22px',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n marginInline: 0,\n marginBlock: 0,\n width: '100%',\n transition: 'background-color 0.15s',\n },\n [`${scope('root')} .ant-menu-item:not(.ant-menu-item-selected):hover`]: {\n backgroundColor: token.colorFillTertiary,\n },\n [`${scope('root')} .ant-menu-item-selected`]: {\n backgroundColor: token.colorPrimaryBg,\n },\n [`${scope('root')} .ant-menu-item.error-active.ant-menu-item-selected`]: {\n backgroundColor: token.colorErrorBg,\n },\n [`${scope('root')} .ant-menu-item-group-title`]: {\n fontSize: token.fontSize,\n fontWeight: 400,\n color: token.colorTextTertiary,\n lineHeight: '22px',\n paddingInline: 0,\n paddingTop: 0,\n paddingBottom: token.marginXXS,\n userSelect: 'none' as const,\n },\n [`${scope('root')} .ant-menu-item-group + .ant-menu-item-group`]: {\n marginTop: token.marginXS,\n },\n [`${scope('spec-item')}:not(:last-child)`]: {\n marginBottom: token.marginXS,\n },\n [`${scope('root')} .ant-menu-title-content`]: {\n overflow: 'hidden',\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n minWidth: 0,\n gap: 12,\n },\n [`${scope('root')} .ant-menu-item-selected ${scope('spec-label')}`]: {\n color: token.colorPrimary,\n },\n }))\n\n const selectedKeys: string[] =\n selectedItem.type === 'endpoint' ? [selectedItem.key] : [selectedItem.type]\n\n const items: MenuProps['items'] = [\n {\n type: 'group',\n label: 'Specifications',\n children: [\n hasSaveErrors && {\n key: 'errors',\n className: `${cx('spec-item')} error-active`,\n icon: (\n <span className={cx('spec-icon')} style={{ color: token.colorError }}>\n <ExclamationCircleOutlined />\n </span>\n ),\n label: (\n <span className={cx('spec-label')} style={{ color: token.colorError }}>\n Errors\n </span>\n ),\n },\n {\n key: 'general',\n className: cx('spec-item'),\n icon: (\n <span className={cx('spec-icon')} style={hasGeneralError ? { color: token.colorError } : undefined}>\n <RestApiIcon />\n </span>\n ),\n label: (\n <span className={cx('spec-label')} style={hasGeneralError ? { color: token.colorError } : undefined}>\n General\n </span>\n ),\n },\n {\n key: 'tags',\n className: cx('spec-item'),\n icon: <span className={cx('spec-icon')}><TagOutlined /></span>,\n label: <span className={cx('spec-label')}>Tags</span>,\n },\n ].filter(Boolean) as MenuProps['items'],\n },\n {\n type: 'group',\n label: 'Endpoints',\n children: endpoints.map((ep) => {\n const colors = methodColors[ep.method as keyof typeof methodColors]\n return {\n key: ep.id,\n label: (\n <>\n <Tag className={cx('badge')} style={{ backgroundColor: colors?.bg, color: colors?.color, border: 'none' }}>\n {ep.method}\n </Tag>\n <span\n className={cx('path')}\n style={{ color: selectedItem.type === 'endpoint' && selectedItem.key === ep.id ? token.colorPrimary : token.colorText }}\n >\n {ep.path}\n </span>\n </>\n ),\n }\n }),\n },\n ]\n\n const handleMenuClick: MenuProps['onClick'] = ({ key }) => {\n if (key === 'errors') onSelectItem({ type: 'errors' })\n else if (key === 'general') onSelectItem({ type: 'general' })\n else if (key === 'tags') onSelectItem({ type: 'tags' })\n else onSelectItem({ type: 'endpoint', key })\n }\n\n return wrapSSR(\n <div className={cx('root')}>\n <Menu\n mode=\"inline\"\n selectedKeys={selectedKeys}\n items={items}\n onClick={handleMenuClick}\n style={{ background: 'transparent', border: 'none' }}\n />\n </div>,\n )\n}\n","import { token } from '@doc-lib/theme/light.json'\nimport { OverviewData, EndpointData } from '../../entities'\n\nexport interface ApiNodeData extends OverviewData {}\n\nexport interface EndpointNodeData {\n endpoint: EndpointData\n api: OverviewData\n tagName: string\n parentApiId: string\n tagId?: string\n}\n\nexport interface TagNodeData {\n tagName: string\n apiData: OverviewData\n}\n\nexport type NodeData = EndpointNodeData | OverviewData | TagNodeData\n\n// Type definitions\nexport interface TreeNode {\n title: string | React.ReactNode\n key: string\n selectable?: boolean\n isLeaf?: boolean\n method?: string\n children?: TreeNode[]\n data?: NodeData\n}\n\nexport interface EndpointItemProps {\n method: string\n title: string\n cx: (className: string) => string\n isSelected?: boolean\n}\n\n// Method colors configuration\nexport const methodColors = {\n GET: {\n bg: 'transparent',\n color: token.colorPrimary,\n },\n POST: {\n bg: 'transparent',\n color: token.colorSuccess,\n },\n DELETE: {\n bg: 'transparent',\n color: token.colorError,\n },\n PUT: {\n bg: 'transparent',\n color: token.colorWarning,\n },\n PATCH: {\n bg: 'transparent',\n color: token['volcano.5'],\n },\n OPTIONS: {\n bg: 'transparent',\n color: token['geekblue.6'],\n },\n HEAD: {\n bg: 'transparent',\n color: token['purple.5'],\n },\n TRACE: {\n bg: 'transparent',\n color: token['volcano.4'],\n },\n}\n\n// Darker method colors for selected state\nexport const darkerMethodColors = {\n GET: {\n bg: token.colorPrimary,\n color: '#FFFFFF',\n },\n POST: {\n bg: token.colorSuccess,\n color: '#FFFFFF',\n },\n DELETE: {\n bg: token.colorError,\n color: '#FFFFFF',\n },\n PUT: {\n bg: token.colorWarning,\n color: '#FFFFFF',\n },\n PATCH: {\n bg: token['volcano.5'],\n color: '#FFFFFF',\n },\n OPTIONS: {\n bg: token['geekblue.6'],\n color: '#FFFFFF',\n },\n HEAD: {\n bg: token['purple.5'],\n color: '#FFFFFF',\n },\n TRACE: {\n bg: token['cyan.5'],\n color: '#FFFFFF',\n },\n}\n\nexport const sidebarMethodColors = {\n GET: { bg: token.colorPrimaryBgHover, color: token.colorPrimary },\n POST: { bg: token.colorSuccessBg, color: token.colorSuccess },\n DELETE: { bg: token.colorErrorBg, color: token.colorError },\n PUT: { bg: token.colorWarningBg, color: token.colorWarning },\n PATCH: { bg: token['volcano.1'], color: token['volcano.5'] },\n OPTIONS: { bg: token['geekblue.2'], color: token['geekblue.6'] },\n HEAD: { bg: token['purple.1'], color: token['purple.5'] },\n TRACE: { bg: token['volcano.1'], color: token['volcano.4'] },\n}\n\nexport const buildTreeDataStructure = (data: OverviewData[] | null) => {\n if (!data) return []\n return data.map((api) => {\n const tagEntries = Object.entries(api.tags)\n const hasOnlyDefaultTag = tagEntries.length === 1 && tagEntries[0][0] === 'default'\n\n return {\n title: api.title,\n key: api.id,\n selectable: true,\n data: api as OverviewData,\n children: hasOnlyDefaultTag\n ? tagEntries[0][1].map((endpoint) => ({\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: 'default',\n parentApiId: api.id,\n } as EndpointNodeData,\n }))\n : tagEntries.map(([tag, endpoints]) => {\n const tagId = `tag-${api.id}-${tag.replace(/\\s+/g, '-').toLowerCase()}`\n return {\n title: tag,\n key: tagId,\n selectable: true,\n data: { tagName: tag, apiData: api } as TagNodeData,\n children: endpoints.map((endpoint) => ({\n title: endpoint.summary,\n key: endpoint.id,\n isLeaf: true,\n selectable: true,\n method: endpoint.method,\n data: {\n endpoint,\n api,\n tagName: tag,\n parentApiId: api.id,\n tagId,\n } as EndpointNodeData,\n })),\n }\n }),\n }\n })\n}\n\nexport const findNodeByKey = (nodes: TreeNode[], targetKey: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === targetKey) {\n return node\n }\n if (node.children && node.children.length > 0) {\n const found = findNodeByKey(node.children, targetKey)\n if (found) return found\n }\n }\n return null\n}\n\nexport const isApiSectionHighlighted = (\n apiKey: string,\n selectedEndpoint: { parentApiId: string } | null\n): boolean => {\n if (!selectedEndpoint) return false\n return selectedEndpoint.parentApiId === apiKey\n}\n\nexport const getAllTreeKeys = (data: TreeNode[]): string[] => {\n const keys: string[] = []\n const traverse = (nodes: TreeNode[]) => {\n nodes.forEach((node) => {\n keys.push(node.key)\n if (node.children && node.children.length > 0) {\n traverse(node.children)\n }\n })\n }\n traverse(data)\n return keys\n}\n\nexport const filterTreeData = (data: TreeNode[], searchText: string): TreeNode[] => {\n if (!searchText) return data\n\n const findOriginalNode = (nodes: TreeNode[], key: string): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === key) return node\n if (node.children) {\n const found = findOriginalNode(node.children, key)\n if (found) return found\n }\n }\n return null\n }\n\n const filterNode = (node: TreeNode): TreeNode | null => {\n let titleText = ''\n\n const originalNode = findOriginalNode(data, node.key)\n if (originalNode && typeof originalNode.title === 'string') {\n titleText = originalNode.title\n } else if (typeof node.title === 'string') {\n titleText = node.title\n }\n\n let searchableText = titleText\n if (node.isLeaf && node.method) {\n searchableText = `${node.method} ${titleText}`.toLowerCase()\n } else {\n searchableText = titleText.toLowerCase()\n }\n\n const searchLower = searchText.toLowerCase()\n const matchesSearch = searchableText.includes(searchLower)\n\n if (node.children) {\n const filteredChildren = node.children\n .map((child: TreeNode) => filterNode(child))\n .filter((child): child is TreeNode => child !== null)\n\n if (matchesSearch || filteredChildren.length > 0) {\n return { ...node, children: filteredChildren }\n }\n } else if (matchesSearch) {\n return node\n }\n\n return null\n }\n\n return data.map((node) => filterNode(node)).filter((node): node is TreeNode => node !== null)\n}\n\nexport const getParentKey = (key: string, tree: TreeNode[]): string | null => {\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i]\n if (node.children) {\n if (node.children.some((item: TreeNode) => item.key === key)) {\n return node.key\n }\n const parent = getParentKey(key, node.children)\n if (parent) {\n return parent\n }\n }\n }\n return null\n}\n\nexport const getSidebarStyles = (token: any, scope: (name: string) => string) => ({\n [scope('sider')]: {\n backgroundColor: token.colorBgElevated,\n overflowY: 'auto' as const,\n overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: '100%',\n },\n [scope('content')]: {\n padding: token.padding,\n },\n [scope('controls')]: {\n display: 'flex',\n gap: token.marginXS,\n marginBottom: token.marginSM,\n },\n [scope('search-input')]: {\n flex: 1,\n },\n [scope('tree')]: {\n backgroundColor: 'transparent',\n width: '100%',\n '& .ant-tree-list': { width: '100%' },\n '& .ant-tree-list-holder-inner': { width: '100%' },\n '& .ant-tree-node-content-wrapper': {\n overflow: 'hidden',\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n padding: '0 !important',\n },\n '& .ant-tree-title': {\n width: '100%',\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n marginBlock: 'auto',\n },\n '& .ant-tree-treenode': { width: '100%', padding: 0 },\n '& .ant-tree-switcher': { backgroundColor: token.colorBgElevated },\n },\n [scope('endpoint-item')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n width: '100%',\n maxWidth: '100%',\n minWidth: '100%',\n paddingLeft: token.marginXS,\n paddingRight: token.marginXS,\n },\n [scope('method-tag')]: {\n width: 51,\n height: 16,\n lineHeight: '16px',\n fontSize: 12,\n textAlign: 'center' as const,\n border: 'none',\n borderRadius: 6,\n padding: '0 8px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('endpoint-text')]: {\n flex: 1,\n maxWidth: '100%',\n minWidth: 0,\n overflow: 'hidden',\n display: 'block',\n },\n [scope('tag-title')]: {\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n flex: 1,\n },\n [scope('api-title')]: {\n flex: 1,\n color: token.colorText,\n maxWidth: '100%',\n display: 'block',\n paddingLeft: '4px',\n paddingRight: '4px',\n margin: 0,\n },\n})\n","import React from 'react'\nimport { Tag } from 'antd'\nimport {\n sidebarMethodColors,\n TreeNode,\n EndpointItemProps,\n darkerMethodColors,\n} from './sidebar.utils'\nimport { EndpointData } from '../../entities'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\n\nexport const EndpointItem: React.FC<EndpointItemProps> = ({\n method,\n title,\n cx,\n isSelected = false,\n}) => {\n const colorSet = isSelected ? darkerMethodColors : sidebarMethodColors\n const methodStyle = colorSet[method as keyof typeof colorSet]\n const isPost = method?.toUpperCase() === 'POST'\n\n return (\n <div\n className={`${cx('endpoint-item')}${isSelected ? ` ${cx('endpoint-item-selected')}` : ''}`}\n >\n <Tag\n className={cx('method-tag')}\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n ...(isPost ? { borderRadius: 4 } : {}),\n }}\n >\n {method}\n </Tag>\n <OverflowTooltip title={title} className={cx('endpoint-text')} style={{ flex: 1 }}>\n {title}\n </OverflowTooltip>\n </div>\n )\n}\n\nexport const convertToRenderableTreeData = (\n treeDataStructure: TreeNode[],\n selectedEndpoint: EndpointData | null,\n cx: (className: string) => string\n): TreeNode[] => {\n const renderNode = (node: TreeNode): TreeNode => {\n let title: React.ReactNode\n\n if (node.isLeaf && node.method) {\n const isSelected =\n selectedEndpoint && 'data' in node && node.data && 'endpoint' in node.data\n ? (node.data as any).endpoint?.id === selectedEndpoint?.id\n : false\n\n title = (\n <EndpointItem\n method={node.method}\n title={typeof node.title === 'string' ? node.title : 'Endpoint Name'}\n cx={cx}\n isSelected={isSelected}\n />\n )\n } else if (\n node.data &&\n 'id' in node.data &&\n 'tags' in node.data &&\n !('endpoint' in node.data) &&\n !('tagName' in node.data)\n ) {\n title = (\n <OverflowTooltip\n title={typeof node.title === 'string' ? node.title : 'API Name'}\n className={cx('api-title')}\n >\n {node.title}\n </OverflowTooltip>\n )\n } else {\n title = (\n <OverflowTooltip\n title={typeof node.title === 'string' ? node.title : ''}\n className={cx('tag-title')}\n >\n {node.title}\n </OverflowTooltip>\n )\n }\n\n return {\n ...node,\n title,\n children: node.children ? node.children.map(renderNode) : undefined,\n }\n }\n\n return treeDataStructure.map(renderNode)\n}\n","'use client'\nimport React, { useState, useMemo } from 'react'\nimport { Input, Tree, Button, Flex, Tooltip, Grid } from 'antd'\nimport { MinusSquareOutlined, PlusSquareOutlined } from '@ant-design/icons'\nconst { useBreakpoint } = Grid\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { useNodeSelection } from '@doc-lib/hooks/useNodeSelection'\nimport { useStore } from '@doc-lib/store'\nimport Minify from '@doc-lib/assets/Minify'\nimport {\n getAllTreeKeys,\n filterTreeData,\n getSidebarStyles,\n convertToRenderableTreeData,\n} from './helper'\nimport Text from 'antd/es/typography/Text'\nimport { SearchOutlined } from '@ant-design/icons'\nimport { Resizable } from 're-resizable'\nimport NoDataIcon from '../components/NoDataIcon'\n\nexport const Sidebar: React.FC<{\n searchValue: string\n setSearchValue: (text: string) => void\n onNodeSelect?: () => void\n}> = ({ searchValue, setSearchValue, onNodeSelect }) => {\n const expandedKeys = useStore((state) => state.view.expandedKeys)\n const { selectedNodeKey, selectedEndpoint, builtTreeData, setExpandedKeys, setSelectedNodeKey } =\n useStore(({ view }) => view)\n\n const { selectNodeByKey, clearSelection } = useNodeSelection()\n\n // Local state for expand/collapse\n\n const [autoExpandParent, setAutoExpandParent] = useState(true)\n\n const screens = useBreakpoint()\n const isMobile = !screens.md\n\n const { wrapSSR, cx, token } = useStyle('Sidebar', getSidebarStyles)\n\n // Handle search with expansion logic\n const handleSearch = (value: string) => {\n if (value && builtTreeData) {\n // Get all keys that should be expanded when searching\n const allKeys = getAllTreeKeys(builtTreeData)\n setExpandedKeys(allKeys)\n setSearchValue(value)\n setAutoExpandParent(true)\n } else {\n // Clear search -> collapse all\n setSearchValue(value)\n setExpandedKeys([])\n setAutoExpandParent(false)\n }\n }\n\n // Convert tree data to renderable format\n const renderTreeData = useMemo(() => {\n if (!builtTreeData) return []\n return convertToRenderableTreeData(builtTreeData, selectedEndpoint, cx)\n }, [builtTreeData, selectedEndpoint, cx])\n\n // Memoize filtered tree data\n const filteredTreeData = useMemo(() => {\n if (!searchValue) return renderTreeData\n if (!builtTreeData) return []\n\n // Filter using original tree structure, then convert to renderable format\n const filteredOriginal = filterTreeData(builtTreeData, searchValue)\n\n return convertToRenderableTreeData(filteredOriginal, selectedEndpoint, cx)\n }, [builtTreeData, searchValue, selectedEndpoint, cx])\n\n // Handle collapse all\n const collapseAll = () => {\n setExpandedKeys([])\n }\n\n const onTreeNodeSelect = (selectedKeys: React.Key[]) => {\n const stringKeys = selectedKeys.map((key) => String(key))\n\n if (stringKeys.length === 0) {\n clearSelection()\n return\n }\n\n if (!builtTreeData) return\n\n const selectedKey = stringKeys[0]\n selectNodeByKey(selectedKey)\n setSelectedNodeKey(selectedKey)\n }\n\n const inner = (\n <div className={cx('content')}>\n <div className={cx('controls')}>\n <Tooltip title=\"Search by APIs or Endpoints\" placement=\"bottom\">\n <Input\n placeholder=\"Search by APIs or Endpoints\"\n value={searchValue}\n onChange={(e) => handleSearch(e.target.value)}\n allowClear\n className={cx('search-input')}\n addonAfter={<SearchOutlined />}\n />\n </Tooltip>\n <Tooltip title=\"Collapse All\" placement=\"bottom\">\n <Button onClick={collapseAll} title=\"Collapse All\" icon={<Minify />} />\n </Tooltip>\n </div>\n {filteredTreeData?.length ? (\n <Tree\n showLine={{ showLeafIcon: false }}\n showIcon={false}\n switcherIcon={(nodeProps: { expanded?: boolean; isLeaf?: boolean }) =>\n nodeProps.isLeaf ? null : nodeProps.expanded ? (\n <MinusSquareOutlined style={{ fontSize: 12 }} />\n ) : (\n <PlusSquareOutlined style={{ fontSize: 12 }} />\n )\n }\n expandedKeys={expandedKeys}\n autoExpandParent={autoExpandParent}\n selectedKeys={[selectedNodeKey || '']}\n onSelect={(selectedKeys) => {\n // Don't allow to deselect a node\n if (!selectedKeys?.length) return\n onTreeNodeSelect(selectedKeys)\n setSelectedNodeKey(selectedKeys[0] as string)\n onNodeSelect?.()\n }}\n onExpand={(expandedKeysValue) => {\n setExpandedKeys(expandedKeysValue as string[])\n setAutoExpandParent(false)\n }}\n treeData={filteredTreeData}\n className={cx('tree')}\n />\n ) : (\n <Flex\n justify=\"center\"\n align=\"center\"\n gap={token.marginSM}\n vertical\n style={{ marginTop: token.paddingXL }}\n >\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'10.375rem'}\n height={'8.1875rem'}\n />\n {searchValue.length ? (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n }}\n >\n No results found\n </Text>\n ) : (\n <Text\n style={{\n textAlign: 'center',\n fontFamily: token.fontFamily,\n fontWeight: 400,\n fontSize: token.fontSizeLG,\n color: token.colorTextTertiary,\n }}\n >\n No API\n <br />\n Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n )\n\n if (isMobile) {\n return wrapSSR(\n <aside className={cx('sider')} style={{ height: '100%' }}>\n {inner}\n </aside>\n )\n }\n\n return wrapSSR(\n <Resizable\n as={'aside'}\n minWidth={isMobile ? 180 : 300}\n maxWidth={386}\n enable={{\n top: false,\n right: true,\n bottom: false,\n left: false,\n topRight: false,\n bottomRight: false,\n bottomLeft: false,\n topLeft: false,\n }}\n defaultSize={{ width: isMobile ? 225 : 333, height: 'auto' }}\n className={cx('sider')}\n >\n {inner}\n </Resizable>\n )\n}\n","'use client'\nimport React, { useState, useEffect } from 'react'\nimport { Typography, Table, Tag, Card, Breadcrumb, Button, Tabs, theme, Tooltip } from 'antd'\nimport { OverflowTooltip } from '@doc-lib/utils/OverflowTooltip'\nimport { useStyle } from '../../../hooks/useStyle'\nimport { LeftOutlined } from '@ant-design/icons'\nimport useStore from '@doc-lib/store'\nimport { sidebarMethodColors } from '../helper'\nimport { handleStatusColor } from '@doc-lib/utils'\n\nconst { Title, Paragraph } = Typography\n\nconst MAX_VISIBLE_ENUMS = 2\n\nconst renderEnumTags = (enums: string[], token: any) => {\n const tagStyle = {\n background: token.colorFillAlter,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadiusSM,\n }\n if (enums.length <= MAX_VISIBLE_ENUMS) {\n return (\n <span style={{ display: 'flex', flexWrap: 'wrap', gap: token.marginXXS }}>\n {enums.map((e) => (\n <Tag key={e} style={tagStyle}>\n {e}\n </Tag>\n ))}\n </span>\n )\n }\n const visible = enums.slice(0, MAX_VISIBLE_ENUMS)\n const hidden = enums.slice(MAX_VISIBLE_ENUMS)\n return (\n <span style={{ display: 'flex', flexWrap: 'wrap', gap: token.marginXXS }}>\n {visible.map((e) => (\n <Tag key={e} style={tagStyle}>\n {e}\n </Tag>\n ))}\n <Tooltip title={hidden.join(', ')}>\n <Tag style={{ ...tagStyle, cursor: 'pointer' }}>+{hidden.length}</Tag>\n </Tooltip>\n </span>\n )\n}\n\n// Table column definitions\nconst requestColumns = [\n { title: 'Parameter', dataIndex: 'param', key: 'param' },\n { title: 'Description', dataIndex: 'desc', key: 'desc' },\n { title: 'Enum', dataIndex: 'enum', key: 'enum' },\n]\n\nconst responseColumns = [...requestColumns]\n\n// Helper to build table rows from OpenAPI params\nconst buildRequestData = (params: any[], token: any) =>\n [...params]\n .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map((p, index) => {\n let typeLabel = p.schema?.type\n if (p.schema?.type === 'array' && p.schema?.items?.type) {\n typeLabel = `${p.schema.type}_${p.schema.items.type}`\n }\n\n return {\n key: index,\n param: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <Tooltip title={p.name} placement=\"bottom\">\n <span\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {p.name}\n </span>\n </Tooltip>\n {typeLabel && (\n <span\n style={{\n color: token.colorTextTertiary,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {p.required ? (\n <span style={{ color: token.colorError }}>*</span>\n ) : (\n <span style={{ color: token.colorSuccess }}>Optional</span>\n )}\n </span>\n ),\n desc: (\n <Tooltip title={p.description || '--'} placement=\"bottom\">\n <span\n style={{\n display: 'inline-block',\n maxWidth: 300,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {p.description || '--'}\n </span>\n </Tooltip>\n ),\n enum:\n (p.schema?.enum ?? p.schema?.items?.enum)\n ? renderEnumTags(p.schema?.enum ?? p.schema?.items?.enum, token)\n : '--',\n }\n })\n\n// Build response rows from headers\nconst buildHeaderData = (headers: any, token: any) => {\n if (!headers) return []\n return Object.entries(headers)\n .sort(([, a]: any, [, b]: any) => (a.required === b.required ? 0 : a.required ? -1 : 1))\n .map(([name, header]: any, idx) => {\n let typeLabel = header.schema?.type\n if (header.schema?.type === 'array' && header.schema?.items?.type) {\n typeLabel = `${header.schema.type}_${header.schema.items.type}`\n }\n\n return {\n key: idx,\n param: (\n <span key={idx} style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <Tooltip title={name} placement=\"bottom\">\n <span\n style={{\n display: 'inline-block',\n maxWidth: 200,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n }}\n >\n {name}\n </span>\n </Tooltip>\n {typeLabel && (\n <span\n style={{\n color: token.colorTextTertiary,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {header.required ? (\n <span style={{ color: token.colorError }}>*</span>\n ) : (\n <span style={{ color: token.colorSuccess }}>Optional</span>\n )}\n </span>\n ),\n desc: header.description || '--',\n enum:\n (header.schema?.enum ?? header.schema?.items?.enum)\n ? renderEnumTags(header.schema?.enum ?? header.schema?.items?.enum, token)\n : '--',\n }\n })\n}\n\nconst buildRequestBodyData = (requestBody: any, token: any) => {\n if (!requestBody?.content) return []\n\n const contentType = Object.keys(requestBody.content)[0]\n const schema = requestBody.content[contentType]?.schema\n if (!schema) return []\n\n const properties: Record<string, any> = schema.properties ?? {}\n const required: string[] = schema.required ?? []\n\n return Object.entries(properties).map(([name, prop]: [string, any], idx) => ({\n key: idx,\n param: (\n <span>\n {name}\n {prop.type && (\n <span\n style={{\n color: token.colorTextTertiary,\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {prop.type}\n </span>\n )}\n {required.includes(name) ? (\n <span style={{ color: token.colorError }}>*</span>\n ) : (\n <span style={{ color: token.colorSuccess }}>Optional</span>\n )}\n </span>\n ),\n desc: prop.description || '--',\n enum: prop.enum ? renderEnumTags(prop.enum, token) : '--',\n }))\n}\n\nexport const EndpointPage: React.FC = () => {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n setSelectedNodeKey,\n setFocusedContent,\n setFocusedTag,\n setActiveRequestTab,\n } = useStore(({ view }) => view)\n const [activeTabKey, setActiveTabKey] = useState<string>('header')\n\n const { token } = theme.useToken()\n\n const { cx } = useStyle('EndpointPage', (token, scope) => ({\n [scope('docs-endpoint-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n },\n [scope('content')]: {\n width: '100%',\n },\n [scope('code')]: {\n background: 'unset',\n borderRadius: token.borderRadius,\n padding: token.paddingSM,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n },\n [scope('breadcrumb')]: {\n display: 'flex',\n gap: token.marginLG,\n alignItems: 'center',\n marginBottom: token.marginLG,\n },\n [scope('request-card')]: {\n borderRadius: token.borderRadius,\n backgroundColor: token.colorBgBase,\n '.ant-card-head': {\n minHeight: 'unset',\n borderBottom: 'unset',\n padding: '0.75rem',\n backgroundColor: token.colorBgBase,\n },\n '.ant-card-body': {\n padding: '0px 0.75rem 0.75rem 0.75rem',\n backgroundColor: token.colorBgBase,\n '.ant-tabs-tab': {\n paddingTop: '0',\n },\n },\n '& .ant-table': {\n backgroundColor: `${token.colorBgBase} !important`,\n },\n '& .ant-table-thead > tr > th': {\n backgroundColor: `${token.colorBgBase} !important`,\n },\n },\n [scope('row-odd')]: {\n '& > td': { background: `${token.colorBgElevated} !important` },\n },\n [scope('row-even')]: {\n '& > td': { background: `${token.colorBgLayout} !important` },\n },\n }))\n\n const methodStyle =\n sidebarMethodColors[selectedEndpoint?.method as keyof typeof sidebarMethodColors]\n const headerParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'header') || [],\n token\n )\n const pathParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'path') || [],\n token\n )\n const queryParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'query') || [],\n token\n )\n type RequestTab = { key: string; label: string; children: any }\n\n const requestTabs: RequestTab[] = [\n {\n key: 'header',\n label: 'Header',\n children: (\n <Table\n columns={requestColumns}\n dataSource={headerParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n {\n key: 'path',\n label: 'Path',\n children: (\n <Table\n columns={requestColumns}\n dataSource={pathParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n {\n key: 'query',\n label: 'Query',\n children: (\n <Table\n columns={requestColumns}\n dataSource={queryParams}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\n },\n ].filter((t): t is RequestTab => t !== null)\n\n // Reset to the first tab whenever the selected endpoint changes, and push to Zustand\n // so CodeboxSidebar can conditionally show the curl panel.\n useEffect(() => {\n const firstKey = requestTabs[0]?.key ?? 'header'\n setActiveTabKey(firstKey)\n setActiveRequestTab(firstKey)\n }, [selectedEndpoint?.id])\n\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode || 200]\n const responseHeaders = responseObj?.headers\n\n const responseHeaderData = buildHeaderData(responseHeaders, token)\n\n return (\n <div className={cx('docs-endpoint-container')}>\n {/* Main Content */}\n <div className={cx('content')}>\n {/* Header */}\n <div className={cx('breadcrumb')}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n icon={<LeftOutlined />}\n onClick={(e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n }}\n ></Button>\n\n <Breadcrumb\n items={[\n {\n href: '',\n title: <span>{selectedApi?.title || 'API Name'}</span>,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n },\n },\n {\n href: ``,\n onClick: (e) => {\n e.preventDefault()\n setSelectedNodeKey(selectedApi?.id as string)\n setFocusedContent('API')\n setFocusedTag(selectedEndpoint?.tagName || 'default')\n },\n title: (\n <p\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n color: token.colorTextTertiary,\n gap: '0.25rem',\n }}\n >\n <span>{selectedEndpoint?.tagName || 'default'}</span>\n </p>\n ),\n },\n {\n title: (\n <OverflowTooltip\n title={selectedEndpoint?.summary || 'Endpoint Name'}\n style={{ maxWidth: '300px' }}\n >\n <span>{selectedEndpoint?.summary || 'Endpoint Name'}</span>\n </OverflowTooltip>\n ),\n },\n ]}\n />\n </div>\n <Title level={3} style={{ display: 'flex', alignItems: 'center', gap: 12, margin: 0 }}>\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n width: '4.375rem',\n height: '1.375rem',\n textAlign: 'center',\n flexShrink: 0,\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n <OverflowTooltip title={selectedEndpoint?.summary ?? '--'}>\n <span>{selectedEndpoint?.summary?.replace(selectedEndpoint?.method, '') ?? '--'}</span>\n </OverflowTooltip>\n </Title>\n {/* <Paragraph>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <Select\n value={selectedServer}\n style={{ width: '100%' }}\n onChange={(value) => setSelectedServer(value)}\n prefix={\n <Tag\n style={{\n backgroundColor: methodStyle?.bg,\n color: methodStyle?.color,\n border: 'none',\n }}\n >\n {selectedEndpoint?.method}\n </Tag>\n }\n options={serverOptions}\n disabled={serverOptions.length === 0}\n suffixIcon={serverOptions.length > 1 ? undefined : false}\n />\n <Tooltip title={endpointTooltip}>\n <Button\n color=\"default\"\n variant=\"outlined\"\n onClick={() => {\n const fullUrl = getFullEndpointUrl()\n if (fullUrl) {\n copyToClipboard(fullUrl)\n setEndpointTooltip('Copied!')\n setTimeout(() => setEndpointTooltip('Copy endpoint'), 1500)\n }\n }}\n icon={<CopyOutlined />}\n />\n </Tooltip>\n </div>\n </Paragraph> */}\n <Paragraph style={{ color: token.colorTextTertiary, marginBottom: '1.5rem' }}>\n {selectedEndpoint?.description ?? '--'}\n </Paragraph>\n\n {/* Request Section */}\n {requestTabs.length > 0 && (\n <Card\n title=\"Request\"\n className={cx('request-card')}\n style={{ marginBottom: '1.5rem', backgroundColor: token.colorBgBase }}\n styles={{ body: { backgroundColor: token.colorBgBase } }}\n >\n <Tabs\n activeKey={activeTabKey}\n onChange={(key) => {\n setActiveTabKey(key)\n setActiveRequestTab(key)\n }}\n items={requestTabs}\n />\n </Card>\n )}\n\n {/* Response Section */}\n\n <Card\n title=\"Response\"\n className={cx('request-card')}\n extra={\n responseHeaderData.length > 0 && (\n <Tag>\n <span\n style={{\n background: handleStatusColor(selectedStatusCode as number),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n marginRight: '0.5rem',\n }}\n ></span>\n <span>{selectedStatusCode}</span>\n </Tag>\n )\n }\n >\n <Table\n columns={responseColumns}\n dataSource={responseHeaderData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n </Card>\n </div>\n </div>\n )\n}\n","'use client'\nimport React from 'react'\nimport { useStyle } from '../../hooks/useStyle'\nimport { APIPage } from '../components/ApiPage'\nimport { EndpointPage } from './EndpointPage/EndpointPage'\nimport useStore from '@doc-lib/store'\nimport { Button, Flex } from 'antd'\nimport NoDataIcon from '../components/NoDataIcon'\nimport Title from 'antd/es/typography/Title'\nimport Text from 'antd/es/typography/Text'\nimport MouseSquareIcon from '@doc-lib/assets/mouseSquare'\nimport type { OverviewData } from '@doc-lib/view/entities'\n\nexport const MainContent: React.FC<{\n searchEnabled: boolean\n handleResetSearch: () => void\n handleVisitLandingPage?: () => void\n apiOverride?: OverviewData | null\n}> = ({ searchEnabled, handleResetSearch, handleVisitLandingPage, apiOverride }) => {\n const { focusedContent, transformedData } = useStore(({ view }) => view)\n const { wrapSSR, cx, token } = useStyle('MainContent', (token, scope) => ({\n [scope('inner-doc-container')]: {\n minWidth: 0,\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n },\n [scope('centered')]: {\n display: 'flex',\n justifyContent: 'center',\n },\n [scope('no-space')]: {\n margin: 0,\n padding: 0,\n },\n [scope('title')]: {\n fontFamily: token.fontFamily,\n fontWeight: 600,\n fontSize: token.fontSizeHeading4,\n color: token.colorText,\n },\n [scope('text')]: {\n color: token.colorText,\n fontFamily: token.fontFamily,\n },\n [scope('visit-landing-button')]: {\n width: '12.25rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n },\n [scope('reset-button')]: {\n width: '8.125rem',\n height: '2.5rem',\n borderRadius: token.borderRadiusLG,\n backgroundColor: token?.Button?.primaryColor,\n fontSize: token.Button?.contentFontSizeLG,\n },\n }))\n\n return wrapSSR(\n <div\n className={cx('inner-doc-container', !transformedData?.length ? 'centered' : '')}\n style={{\n backgroundColor: focusedContent === 'ENDPOINT' ? token.colorBgBase : token.colorBgElevated,\n }}\n >\n {!transformedData?.length ? (\n <Flex justify=\"center\" align=\"center\" gap={'1.5rem'} vertical flex={1}>\n <NoDataIcon\n stroke={token.colorPrimaryHover}\n fill={token.colorPrimaryBg}\n width={'18.625rem'}\n height={'14.75rem'}\n />\n <Flex justify=\"center\" align=\"center\" gap={'0.5rem'} vertical>\n <Title className={cx('no-space', 'title')} level={4}>\n {!searchEnabled ? 'No API Documentation Found' : 'No results found'}\n </Title>\n <Text className={cx('no-space', 'text')}>\n {!searchEnabled\n ? 'No API Documentation has been added yet. Contact admin for support.'\n : 'Adjust your Search and try again'}\n </Text>\n </Flex>\n {!searchEnabled ? (\n <Button\n type=\"primary\"\n onClick={handleVisitLandingPage}\n icon={<MouseSquareIcon />}\n iconPosition=\"start\"\n className={cx('visit-landing-button')}\n >\n Visit Landing Page\n </Button>\n ) : (\n <Button type=\"default\" className={cx('reset-button')} onClick={handleResetSearch}>\n Reset Search\n </Button>\n )}\n </Flex>\n ) : focusedContent === 'ENDPOINT' ? (\n <EndpointPage />\n ) : (\n <APIPage apiOverride={apiOverride} />\n )}\n </div>\n )\n}\n","import React from 'react'\n\nconst Copy = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M7.39967 15.1673H4.59967C1.99301 15.1673 0.833008 14.0073 0.833008 11.4007V8.60065C0.833008 5.99398 1.99301 4.83398 4.59967 4.83398H7.39967C10.0063 4.83398 11.1663 5.99398 11.1663 8.60065V11.4007C11.1663 14.0073 10.0063 15.1673 7.39967 15.1673ZM4.59967 5.83398C2.53301 5.83398 1.83301 6.53398 1.83301 8.60065V11.4007C1.83301 13.4673 2.53301 14.1673 4.59967 14.1673H7.39967C9.46634 14.1673 10.1663 13.4673 10.1663 11.4007V8.60065C10.1663 6.53398 9.46634 5.83398 7.39967 5.83398H4.59967Z\" fill=\"currentcolor\" />\n <path d=\"M11.3997 11.1673H10.6663C10.393 11.1673 10.1663 10.9407 10.1663 10.6673V8.60065C10.1663 6.53398 9.46634 5.83398 7.39967 5.83398H5.33301C5.05967 5.83398 4.83301 5.60732 4.83301 5.33398V4.60065C4.83301 1.99398 5.99301 0.833984 8.59967 0.833984H11.3997C14.0063 0.833984 15.1663 1.99398 15.1663 4.60065V7.40065C15.1663 10.0073 14.0063 11.1673 11.3997 11.1673ZM11.1663 10.1673H11.3997C13.4663 10.1673 14.1663 9.46732 14.1663 7.40065V4.60065C14.1663 2.53398 13.4663 1.83398 11.3997 1.83398H8.59967C6.53301 1.83398 5.83301 2.53398 5.83301 4.60065V4.83398H7.39967C10.0063 4.83398 11.1663 5.99398 11.1663 8.60065V10.1673Z\" fill=\"currentcolor\" />\n </svg>\n)\n\nexport default Copy\n","import { useState } from 'react'\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport json from 'react-syntax-highlighter/dist/esm/languages/hljs/json'\nimport * as hljs from 'react-syntax-highlighter/dist/esm/styles/hljs'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { theme as antdTheme } from 'antd'\n\nSyntaxHighlighter.registerLanguage('json', json)\n\nconst Codebox = ({\n code,\n language,\n wrapLongLines,\n}: {\n code: string\n language?: string\n wrapLongLines?: boolean\n}) => {\n const [appTheme] = useState<'LIGHT' | 'DARK'>('DARK')\n const { token, theme: themeConfig } = antdTheme.useToken()\n const isDark = themeConfig.id == 1\n const bodyBg = isDark ? token.colorBgContainer : '#1d2856'\n const { cx } = useStyle('codeBox', (token, scope) => ({\n [scope('codebox')]: {\n borderRadius: token.borderRadius,\n },\n }))\n\n return (\n <div className={cx('codebox')}>\n <SyntaxHighlighter\n language={language || 'json'}\n style={appTheme === 'LIGHT' ? hljs.stackoverflowLight : hljs.stackoverflowDark}\n showLineNumbers\n wrapLines\n wrapLongLines={wrapLongLines}\n customStyle={{\n margin: 0,\n minHeight: '3rem',\n padding: '0.75rem 1rem 0.75rem 1.5rem',\n backgroundColor: bodyBg,\n fontSize: '0.75rem',\n }}\n lineProps={{\n style: { fontFamily: 'Cascadia Code, sans-serif' },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n )\n}\n\nexport default Codebox\n","import useStore from '@doc-lib/store'\nimport { handleStatusColor, generateExampleFromSchema, hasAnyExample } from '@doc-lib/utils'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { Button, Select, Tooltip, Typography, theme as antdTheme } from 'antd'\nimport { useMemo, useState } from 'react'\nimport Codebox from './EndpointPage/Codebox/Codebox'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { token as tokens } from '@doc-lib/theme/light.json'\n\nfunction CodeboxSidebar() {\n const {\n selectedEndpoint,\n selectedApi,\n selectedStatusCode,\n statusCodeOptions,\n setSelectedStatusCode,\n } = useStore(({ view }) => view)\n const httpStatusOptions = useMemo(\n () =>\n statusCodeOptions.map((code) => ({\n value: code,\n label: (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span\n style={{\n background: handleStatusColor(code),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n minWidth: '0.5rem',\n minHeight: '0.5rem',\n }}\n />\n {code}\n </span>\n ),\n })),\n [statusCodeOptions]\n )\n\n // x-curls is stored on selectedApi.curl by transformOpenApiToDocs (mutate.ts).\n // Match by path and method (case-insensitive) against the selected endpoint.\n const curlCommand: string = (() => {\n if (!selectedEndpoint || !Array.isArray(selectedApi?.curl)) return ''\n const entry = (selectedApi.curl as any[]).find(\n (c: any) =>\n c.path === selectedEndpoint.path &&\n c.method?.toUpperCase() === selectedEndpoint.method.toUpperCase()\n )\n return entry?.curlCommand ?? ''\n })()\n\n // Split curlCommand by newlines for display, filtering empty lines\n const curlDisplayLines: string[] = curlCommand\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n\n const [curlTooltip, setCurlTooltip] = useState('Copy Request')\n\n\n const { token: antdToken, theme: themeConfig } = antdTheme.useToken()\n const isDark = themeConfig.id == 1\n const headerBg = isDark ? antdToken.colorBgElevated : '#1d2856'\n const bodyBg = isDark ? antdToken.colorBgContainer : '#1d2856'\n const codeTextColor = isDark ? 'rgba(255,255,255,0.85)' : '#ffffff'\n\n const { cx } = useStyle('CodeboxSidebar', (token, scope) => ({\n [scope('container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n background: token.colorBgElevated,\n borderRadius: token.borderRadiusLG,\n padding: token.paddingLG,\n height: 'auto',\n width: '23.625rem',\n minWidth: '23.625rem',\n '.ant-card-body': { padding: 0 },\n '.ant-card-head-title': { color: 'white' },\n '.ant-card-head': { borderBottom: '.125rem solid #33419A' },\n },\n\n [scope('rightCard')]: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: headerBg,\n border: `1px solid ${token.colorBorder}`,\n '.CodeboxSidebar-copyButton': { '.isolated-btn-icon': { path: { fill: 'white' } } },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n borderTop: '.125rem solid #33419A',\n },\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n },\n [scope('rightCardRequest')]: {\n minHeight: '8.125rem',\n },\n [scope('rightCardHeaderResponse')]: {\n padding: `0 ${token.margin}px ${token.marginXS}px ${token.margin}px`,\n },\n [scope('rightCardResponse')]: {\n height: 'fit-content',\n overflow: 'hidden',\n '.isolated-card-body': {\n display: 'flex',\n padding: `0 ${token.margin}px`,\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '10px',\n alignSelf: 'stretch',\n },\n },\n [scope('rightCardHeader')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginXS}px ${token.margin}px`,\n borderBottom: `1px solid ${token.colorBorderSecondary}`,\n height: '3.125rem',\n backgroundColor: headerBg,\n },\n [scope('rightCardFlex')]: {\n display: 'flex',\n flexDirection: 'column',\n height: 'fit-content',\n overflow: 'auto',\n backgroundColor: bodyBg,\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n '.ant-card-body': {\n flex: '1 1 auto',\n overflowY: 'auto',\n padding: '.125rem 0 0 0 !important',\n },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n height: 'fit-content',\n overflow: 'auto',\n borderTop: '.125rem solid #33419A',\n '.codebox': { height: 'fit-content', overflow: 'auto' },\n },\n },\n\n [scope('customSelect')]: {\n width: '5.5rem',\n maxWidth: '5.5rem',\n\n '.ant-select-selector': {\n backgroundColor: '#fff',\n borderColor: '#fff',\n borderRadius: '.375rem',\n color: '#101010',\n },\n '.ant-select-selection-item': {\n color: '#101010',\n fontWeight: 400,\n },\n '.ant-select-selection-placeholder': {\n color: 'rgba(255, 255, 255, 0.65)',\n },\n '.ant-select-arrow': {\n color: '#101010',\n },\n '&:hover .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n '&:focus .ant-select-selector, &.ant-select-focused .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n },\n [scope('curl-list')]: {\n margin: 0,\n padding: '0.75rem 1rem',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n backgroundColor: bodyBg,\n },\n [scope('curl-line')]: {\n fontFamily: 'Cascadia Code, monospace',\n fontSize: '0.75rem',\n color: codeTextColor,\n wordBreak: 'break-all' as const,\n },\n }))\n\n return (\n <div className={cx('container')}>\n {/* Request codebox — always visible when endpoint has any header/path/query parameters, or curlCommand exists from x-curls */}\n {(curlCommand) && (\n <div className={cx('rightCard', 'rightCardRequest')}>\n <div className={cx('rightCardHeader')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Request\n </Typography.Text>\n {curlCommand && (\n <Tooltip title={curlTooltip}>\n <Button\n color=\"default\"\n variant=\"link\"\n className={cx('copyButton')}\n onClick={() => {\n navigator.clipboard.writeText(curlCommand)\n setCurlTooltip('Copied!')\n setTimeout(() => setCurlTooltip('Copy cURL'), 1500)\n }}\n icon={<CopyOutlined style={{ color: 'white' }} />}\n />\n </Tooltip>\n )}\n </div>\n <div className={cx('curl-list')}>\n {curlDisplayLines.map((line, i) => (\n <div key={i} className={cx('curl-line')}>\n {line}\n </div>\n ))}\n </div>\n </div>\n )}\n {/* Response codebox */}\n {selectedEndpoint?.responses && httpStatusOptions.length > 0 && (\n <div className={cx('rightCard', 'rightCardResponse')}>\n <div className={cx('rightCardHeader', 'rightCardHeaderResponse')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Response\n </Typography.Text>\n <Select\n defaultActiveFirstOption={true}\n defaultValue={200}\n className={cx('customSelect')}\n prefix={false}\n style={{ width: '100%' }}\n value={selectedStatusCode}\n onChange={setSelectedStatusCode}\n options={httpStatusOptions}\n open={httpStatusOptions.length === 1 ? false : undefined}\n suffixIcon={httpStatusOptions.length > 1 ? undefined : false}\n />\n </div>\n {(() => {\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode as number]\n const contentEntry = responseObj?.content\n ? Object.values(responseObj.content)[0]\n : undefined\n let displayData: any\n\n if (contentEntry?.example !== undefined) {\n displayData = contentEntry.example\n } else if (contentEntry?.examples !== undefined) {\n const firstKey = Object.keys(contentEntry.examples)[0]\n const firstExample = contentEntry.examples[firstKey]\n displayData = firstExample?.value ?? firstExample\n } else if (contentEntry?.schema && hasAnyExample(contentEntry.schema)) {\n displayData = generateExampleFromSchema(contentEntry.schema)\n } else if (contentEntry?.schema) {\n displayData = contentEntry.schema\n } else {\n displayData = responseObj\n }\n\n return (\n <Codebox\n code={JSON.stringify(displayData, null, 2) || ''}\n />\n )\n })()}\n </div>\n )}\n </div>\n )\n}\n\nexport default CodeboxSidebar\n","import { RequestBody, HTTPMethod, OpenAPIFile, Responses, Schema } from '@doc-lib/types/OpenApi'\nimport { OverviewData, EndpointData } from '../entities'\n\n/**\n * Simple deterministic string hash (djb2 variant).\n * Produces a stable, short base-36 hash for the same input.\n */\nconst stableHash = (input: string): string => {\n let hash = 5381\n for (let i = 0; i < input.length; i++) {\n hash = ((hash << 5) + hash) + input.charCodeAt(i)\n }\n return (hash >>> 0).toString(36)\n}\n\nconst resolveSchema = (\n schema: Schema | undefined,\n components: OpenAPIFile['components']\n): Schema | undefined => {\n if (!schema) return undefined\n if (!schema.$ref) return schema\n\n const refName = schema.$ref.split('/').pop()!\n const resolved = components?.schemas?.[refName]\n if (!resolved) return schema\n\n return resolveSchema(resolved as Schema, components)\n}\n\nexport const transformOpenApiToDocs = (api: OpenAPIFile): OverviewData => {\n const groupedPathsByTags: Record<string, EndpointData[]> = {}\n const validTags = new Set(api?.tags?.map(({ name }) => name) || [])\n const contextPath = Object.keys(api.paths)[0]\n const relatedVersions =\n 'x-related-versions' in api\n ? Object.entries(api['x-related-versions']).map(([apiId, version]) => ({ apiId, version }))\n : []\n relatedVersions.unshift({ apiId: api['x-current-version'], version: `${api.info.version}` })\n const currentVersion: string =\n 'x-current-version' in api ? (api['x-current-version'] as string) : ''\n const authScheme = api.components?.securitySchemes\n let authType: string\n if (authScheme && Object.keys(authScheme)?.[0]) {\n authType = Object.keys(authScheme)[0]\n if (authType && authType.toLowerCase() === 'public') {\n authType = 'KEYLESS'\n }\n if (authType && (authType.toLowerCase() === 'oauth' || authType.toLowerCase() === 'oauth2')) {\n authType = 'OAUTH2'\n }\n authType = authType.toUpperCase()\n } else {\n authType = 'x-auth-type' in api ? (api['x-auth-type'] as string) : ''\n }\n const curl: string = 'x-curls' in api ? (api['x-curls'] as any) : ''\n const jwsEnabled = api['x-jws-enabled'] === true\n\n for (const [path, methods] of Object.entries(api.paths)) {\n for (const [method, methodData] of Object.entries(methods)) {\n const entry = { ...methodData, method: method?.toUpperCase() as HTTPMethod, path }\n if (entry.requestBody?.content) {\n const resolvedContent: RequestBody['content'] = {}\n for (const [contentType, contentValue] of Object.entries(entry.requestBody.content)) {\n const resolvedSchema =\n resolveSchema(contentValue.schema, api.components) ?? contentValue.schema\n const resolvedExample =\n contentValue.example !== undefined ? contentValue.example : resolvedSchema.example\n resolvedContent[contentType] = {\n schema: resolvedSchema,\n ...(resolvedExample !== undefined && { example: resolvedExample }),\n ...(contentValue.examples !== undefined && { examples: contentValue.examples }),\n }\n }\n entry.requestBody = { ...entry.requestBody, content: resolvedContent }\n }\n if (entry.responses) {\n const resolvedResponses: Responses = {}\n for (const [code, responseValue] of Object.entries(entry.responses)) {\n if (responseValue.content) {\n const resolvedContent: NonNullable<Responses[string]['content']> = {}\n for (const [contentType, contentValue] of Object.entries(responseValue.content)) {\n const resolvedSchema =\n resolveSchema(contentValue.schema, api.components) ?? contentValue.schema\n const resolvedExample =\n contentValue.example !== undefined ? contentValue.example : resolvedSchema.example\n resolvedContent[contentType] = {\n schema: resolvedSchema,\n ...(resolvedExample !== undefined && { example: resolvedExample }),\n ...(contentValue.examples !== undefined && { examples: contentValue.examples }),\n }\n }\n resolvedResponses[code] = { ...responseValue, content: resolvedContent }\n } else {\n resolvedResponses[code] = responseValue\n }\n }\n entry.responses = resolvedResponses\n }\n const resourceTags = methodData.tags ?? []\n\n const matchedTags = resourceTags.filter((tag) => validTags.has(tag))\n\n if (matchedTags.length > 0) {\n matchedTags.forEach((tag) => {\n if (!groupedPathsByTags[tag]) groupedPathsByTags[tag] = []\n groupedPathsByTags[tag].push({ ...entry, id: `endpoint-${stableHash(entry.method + '-' + entry.path)}` } as EndpointData)\n })\n } else {\n if (!groupedPathsByTags.default) {\n groupedPathsByTags.default = []\n }\n groupedPathsByTags.default.push({ ...entry, id: `endpoint-${stableHash(entry.method + '-' + entry.path)}` } as EndpointData)\n }\n }\n }\n\n // Sort groupedPathsByTags so that 'default' comes last\n const sortedGroupedPathsByTags = Object.keys(groupedPathsByTags)\n .sort((a, b) => {\n if (a === 'default') return 1\n if (b === 'default') return -1\n return a.localeCompare(b)\n })\n .reduce((acc, key) => {\n acc[key] = groupedPathsByTags[key]\n return acc\n }, {} as Record<string, EndpointData[]>)\n\n return {\n ...api.info,\n id: `api-${contextPath ?? 'unknown'}`, // api prefix is used to identify what state should be changes (API | Endpoint)\n contextPath,\n tags: sortedGroupedPathsByTags,\n servers: api.servers,\n relatedVersions,\n currentVersion,\n authType,\n jwsEnabled,\n curl,\n }\n}\n","'use client'\nimport {\n ApiDocumentationBar,\n GeneralSection,\n TagsSection,\n EndpointsSection,\n UnsavedChangesBanner,\n AddTagDrawer,\n} from './components'\nimport { EditModeSidebar, type EditModeSelection } from './components/EditModeSidebar'\nimport { Sidebar } from './console/Sidebar'\nimport { MainContent } from './console/MainContent'\nimport CodeboxSidebar from './console/CodeboxSidebar'\nimport type { ParameterFormValues } from './components/ApiPage/components/AddParameterDrawer'\nimport { Button, Divider, Grid, message, Modal } from 'antd'\nimport Title from 'antd/es/typography/Title'\nimport { EditOutlined, EyeOutlined, RightOutlined } from '@ant-design/icons'\nimport { useStyle } from '../hooks/useStyle'\nimport { useNodeSelection } from '../hooks/useNodeSelection'\nimport { OpenAPIFile, Parameter } from '@doc-lib/types/OpenApi'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport useStore from '@doc-lib/store'\nimport { transformOpenApiToDocs } from './helper/mutate'\nimport { buildTreeDataStructure } from './console/helper'\n\nexport const ConsoleDocumentationLayout = ({\n data,\n preSelectedApi,\n handleVisitLandingPage,\n onSave,\n}: {\n data: OpenAPIFile[]\n preSelectedApi?: string | null\n handleVisitLandingPage?: () => void\n onSave?: (updatedSpec: OpenAPIFile) => Promise<void> | void\n theme?: any\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [mode, setMode] = useState<'edit' | 'view'>('edit')\n const [bannerVisible, setBannerVisible] = useState(false)\n const [resetKey, setResetKey] = useState(0)\n const [generalCollapsed, setGeneralCollapsed] = useState(true)\n const [tagsCollapsed, setTagsCollapsed] = useState(true)\n const [endpointsCollapsed, setEndpointsCollapsed] = useState(false)\n const [saveConfirmModal, setSaveConfirmModal] = useState(false)\n const [resetConfirmModal, setResetConfirmModal] = useState(false)\n const [selectedEditItem, setSelectedEditItem] = useState<EditModeSelection>({ type: 'general' })\n const [errorBoxExpanded, setErrorBoxExpanded] = useState(false)\n const [localApiName, setLocalApiName] = useState('')\n const [apiNameTouched, setApiNameTouched] = useState(false)\n const [localDescription, setLocalDescription] = useState('')\n const [descriptionTouched, setDescriptionTouched] = useState(false)\n const hasApiNameError =\n apiNameTouched && (!localApiName.trim() || !/^[A-Za-z0-9_\\s-]+$/.test(localApiName.trim()))\n const hasDescriptionError = descriptionTouched && !localDescription.trim()\n const hasGeneralError = hasApiNameError || hasDescriptionError\n const [saveErrors, setSaveErrors] = useState<string[]>([])\n const [selectedUrl, setSelectedUrl] = useState('')\n const [endpointNames, setEndpointNames] = useState<Record<string, string>>({})\n const [endpointDescs, setEndpointDescs] = useState<Record<string, string>>({})\n const [endpointTags, setEndpointTags] = useState<Record<string, string[]>>({})\n const [endpointParams, setEndpointParams] = useState<Record<string, ParameterFormValues[]>>({})\n const [endpointResponseParams, setEndpointResponseParams] = useState<\n Record<string, ParameterFormValues[]>\n >({})\n const [endpointRequestBody, setEndpointRequestBody] = useState<Record<string, unknown>>({})\n const [endpointResponseBody, setEndpointResponseBody] = useState<Record<string, unknown>>({})\n const [tagDrawerState, setTagDrawerState] = useState<{\n open: boolean\n mode: 'add' | 'edit'\n initialValues?: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }\n }>({ open: false, mode: 'add' })\n const [deleteTagModal, setDeleteTagModal] = useState<{ open: boolean; tagIndex: number }>({\n open: false,\n tagIndex: -1,\n })\n const [localTags, setLocalTags] = useState<TagMeta[]>([])\n const [messageApi, contextHolder] = message.useMessage()\n\n const {\n focusedContent,\n selectedNodeKey,\n selectedApi,\n originalData,\n transformedData,\n builtTreeData,\n selectedEndpoint,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\n setSelectedApi,\n setFocusedContent,\n setExpandedKeys,\n setSelectedEndpoint,\n } = useStore(({ view }) => view)\n const { selectFirstApi, selectPreSelectedApi, clearSelection } = useNodeSelection()\n const hasInitializedRef = useRef(false)\n\n const { useBreakpoint } = Grid\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const allEndpoints = useMemo(\n () => (selectedApi ? Object.values(selectedApi.tags ?? {}).flat() : []),\n [selectedApi]\n )\n\n // Derived API object for View Mode display — combines saved selectedApi with pending local edits.\n // Never written to the Zustand store, so selectedApi baseline for hasChanges stays intact.\n const viewModeApi = useMemo(() => {\n if (!selectedApi) return null\n if (mode !== 'view') return selectedApi\n if (localApiName === selectedApi.title && localDescription === selectedApi.description) return selectedApi\n return { ...selectedApi, title: localApiName, description: localDescription }\n }, [mode, selectedApi, localApiName, localDescription])\n\n useEffect(() => {\n return () => {\n resetStore()\n }\n }, [])\n\n const resetStore = () => {\n setExpandedKeys([])\n setFocusedContent(null)\n setBuiltTreeData([])\n setTransformedData([])\n setOriginalData([])\n setSearchValue('')\n clearSelection()\n hasInitializedRef.current = false\n }\n\n useEffect(() => {\n // Initialize original data\n if (!hasInitializedRef.current && data.length > 0) {\n setOriginalData(data)\n // Transform data to documentation format\n const transformedData = data\n .map(transformOpenApiToDocs)\n .sort((a, b) => a.title.localeCompare(b.title))\n setTransformedData(transformedData)\n\n // Build tree data structure\n const builtTree = buildTreeDataStructure(transformedData)\n setBuiltTreeData(builtTree)\n\n // Reset initialization flag when new data arrives\n hasInitializedRef.current = true\n }\n }, [data, setOriginalData, setTransformedData, setBuiltTreeData])\n\n // Auto-select the first API when tree data is available\n useEffect(() => {\n if (\n builtTreeData &&\n builtTreeData.length > 0 &&\n !selectedApi &&\n !selectedNodeKey &&\n hasInitializedRef.current\n ) {\n if (!preSelectedApi) {\n selectFirstApi(builtTreeData)\n } else {\n selectPreSelectedApi(builtTreeData, preSelectedApi)\n }\n hasInitializedRef.current = false\n }\n }, [builtTreeData, selectedNodeKey, selectedApi, selectFirstApi])\n\n const { cx, token } = useStyle('APIDocumentationLayout', (token, scope) => ({\n [scope('documentation-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n height: '100%',\n },\n [scope('section')]: {\n flexShrink: 0,\n },\n [scope('section-grow')]: {\n flex: 1,\n minHeight: 0,\n },\n [scope('docs-layout')]: {\n display: 'flex',\n flex: 1,\n minHeight: 0,\n gap: token.marginLG,\n width: '100%',\n },\n [scope('content-scroll-area')]: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) auto',\n flex: 1,\n gap: token.marginLG,\n overflow: 'auto',\n minWidth: 0,\n },\n // ── Delete tag modal ───────────────────────────────────────────────────────\n ['.delete-tag-confirm-modal .ant-modal-container']: {\n '--ant-modal-content-padding': '0px !important',\n padding: '0 !important',\n },\n [scope('deleteModalHead')]: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n paddingTop: 20,\n paddingLeft: 24,\n paddingRight: 24,\n width: '100%',\n },\n [scope('deleteModalTitle')]: {\n flex: '1 0 0',\n fontSize: 16,\n fontWeight: 400,\n lineHeight: '24px',\n color: token.colorText,\n },\n [scope('deleteModalCloseBtn')]: {\n position: 'absolute',\n top: 16,\n right: 20,\n width: 22,\n height: 22,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n border: 'none',\n background: 'transparent',\n padding: 0,\n color: token.colorTextTertiary,\n fontSize: 16,\n lineHeight: 1,\n '&:hover': {\n color: token.colorText,\n backgroundColor: token.colorFillSecondary,\n },\n },\n [scope('deleteModalContent')]: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 12,\n height: 56,\n width: '100%',\n },\n [scope('deleteModalContentText')]: {\n flex: '1 0 0',\n fontSize: 14,\n fontWeight: 400,\n lineHeight: '22px',\n color: token.colorText,\n },\n [scope('deleteModalFooter')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n paddingLeft: 24,\n paddingRight: 24,\n paddingBottom: 20,\n width: '100%',\n backgroundColor: 'transparent',\n },\n }))\n\n useEffect(() => {\n setLocalApiName(selectedApi?.title || '')\n setLocalDescription(selectedApi?.description || '')\n if (selectedApi?.servers?.length) {\n setSelectedUrl(selectedApi.servers[0].url)\n }\n }, [selectedApi])\n\n interface TagMeta {\n name: string\n description?: string\n externalDocsUrl?: string\n externalDocsDescription?: string\n isDefault: boolean\n }\n\n const tagMetadata = useMemo<TagMeta[]>(() => {\n if (!originalData || !selectedApi) return []\n // Find the raw OpenAPIFile whose transformed id matches selectedApi\n // The match is by contextPath — first path key in the raw file\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n const mapped: TagMeta[] =\n rawFile?.tags?.map((t) => ({\n name: t.name,\n description: t.description,\n externalDocsUrl: t.externalDocs?.url,\n externalDocsDescription: t.externalDocs?.description,\n isDefault: t.name.toLowerCase() === 'default',\n })) ?? []\n const hasDefault = mapped.some((t) => t.isDefault)\n const hasDefaultInMapped = mapped.some((t) => t.name.toLowerCase() === 'default')\n if (!hasDefault && !hasDefaultInMapped && selectedApi.tags['default']) {\n mapped.push({ name: 'default', isDefault: true })\n }\n return mapped\n }, [originalData, selectedApi])\n\n const initialEndpointResponseParams = useMemo<Record<string, ParameterFormValues[]>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, ParameterFormValues[]> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(methods as Record<string, Record<string, unknown>>).forEach(\n ([method, operation]) => {\n const params = operation?.['x-response-params']\n if (!Array.isArray(params) || params.length === 0) return\n const epId = pathMethodToId[`${path}||${method}`]\n if (!epId) return\n result[epId] = params\n .filter((p): p is Record<string, unknown> => typeof p === 'object' && p !== null)\n .map((p) => {\n const schema = p.schema as { type?: string; enum?: string[]; items?: { type?: string; enum?: string[] } } | undefined\n return {\n name: String(p.name ?? ''),\n in: (p.in as ParameterFormValues['in']) ?? 'query',\n type: (schema?.type ?? 'string') as ParameterFormValues['type'],\n required: Boolean(p.required ?? false),\n description: p.description != null ? String(p.description) : undefined,\n enum: Array.isArray(schema?.enum)\n ? (schema!.enum as string[])\n : Array.isArray(schema?.items?.enum)\n ? (schema!.items!.enum as string[])\n : undefined,\n ...(schema?.items && { items: { type: schema.items.type ?? 'string' } }),\n }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointParams = useMemo<Record<string, ParameterFormValues[]>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, ParameterFormValues[]> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(methods as Record<string, { parameters?: unknown[] }>).forEach(\n ([method, operation]) => {\n const params = (operation as { parameters?: unknown[] })?.parameters\n if (!Array.isArray(params) || params.length === 0) return\n const epId = pathMethodToId[`${path}||${method}`]\n if (!epId) return\n result[epId] = params\n .filter((p): p is Record<string, unknown> => typeof p === 'object' && p !== null)\n .map((p) => {\n const schema = p.schema as { type?: string; enum?: string[]; items?: { type?: string; enum?: string[] } } | undefined\n return {\n name: String(p.name ?? ''),\n in: (p.in as ParameterFormValues['in']) ?? 'query',\n type: (schema?.type ?? 'string') as ParameterFormValues['type'],\n required: Boolean(p.required ?? false),\n description: p.description != null ? String(p.description) : undefined,\n enum: Array.isArray(schema?.enum)\n ? (schema!.enum as string[])\n : Array.isArray(schema?.items?.enum)\n ? (schema!.items!.enum as string[])\n : undefined,\n ...(schema?.items && { items: { type: schema.items.type ?? 'string' } }),\n }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointRequestBody = useMemo<Record<string, unknown>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, unknown> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(\n methods as Record<\n string,\n { requestBody?: { content?: { 'application/json'?: { schema?: unknown; example?: unknown } } } }\n >\n ).forEach(([method, operation]) => {\n const schema = operation.requestBody?.content?.['application/json']?.example\n const epId = pathMethodToId[`${path}||${method}`]\n if (epId && schema) result[epId] = schema\n })\n })\n return result\n }, [originalData, selectedApi])\n\n const initialEndpointResponseBody = useMemo<Record<string, unknown>>(() => {\n if (!originalData || !selectedApi) return {}\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return {}\n const pathMethodToId: Record<string, string> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n pathMethodToId[`${ep.path}||${ep.method.toLowerCase()}`] = ep.id\n })\n const result: Record<string, unknown> = {}\n Object.entries(rawFile.paths).forEach(([path, methods]) => {\n Object.entries(\n methods as Record<\n string,\n {\n responses?: Record<\n string,\n { content?: { 'application/json'?: { schema?: unknown; example?: unknown } } }\n >\n }\n >\n ).forEach(([method, operation]) => {\n const responses = operation.responses\n if (!responses) return\n const statusCode = '200' in responses ? '200' : Object.keys(responses)[0]\n const schema = responses[statusCode]?.content?.['application/json']?.example\n const epId = pathMethodToId[`${path}||${method}`]\n if (epId && schema) result[epId] = schema\n })\n })\n return result\n }, [originalData, selectedApi])\n\n useEffect(() => {\n setLocalTags(tagMetadata)\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setEndpointRequestBody(initialEndpointRequestBody)\n setEndpointResponseBody(initialEndpointResponseBody)\n }, [selectedApi])\n\n const hasChanges = useMemo(() => {\n if (!selectedApi) return false\n if (localApiName !== (selectedApi.title || '')) return true\n if (localDescription !== (selectedApi.description || '')) return true\n if (JSON.stringify(localTags) !== JSON.stringify(tagMetadata)) return true\n for (const [id, name] of Object.entries(endpointNames)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && name !== (ep.summary ?? '')) return true\n }\n for (const [id, desc] of Object.entries(endpointDescs)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && desc !== (ep.description ?? '')) return true\n }\n for (const [id, tags] of Object.entries(endpointTags)) {\n const ep = allEndpoints.find((e) => e.id === id)\n if (ep && JSON.stringify(tags) !== JSON.stringify(ep.tags ?? [])) return true\n }\n if (JSON.stringify(endpointParams) !== JSON.stringify(initialEndpointParams)) return true\n if (JSON.stringify(endpointResponseParams) !== JSON.stringify(initialEndpointResponseParams))\n return true\n if (JSON.stringify(endpointRequestBody) !== JSON.stringify(initialEndpointRequestBody)) {\n console.log('hasChanges: endpointRequestBody changed', { endpointRequestBody, initialEndpointRequestBody })\n return true\n }\n if (JSON.stringify(endpointResponseBody) !== JSON.stringify(initialEndpointResponseBody)) return true\n return false\n }, [\n selectedApi,\n localApiName,\n localDescription,\n localTags,\n tagMetadata,\n allEndpoints,\n endpointNames,\n endpointDescs,\n endpointTags,\n endpointParams,\n endpointResponseParams,\n initialEndpointParams,\n initialEndpointResponseParams,\n endpointRequestBody,\n initialEndpointRequestBody,\n endpointResponseBody,\n initialEndpointResponseBody,\n ])\n\n useEffect(() => {\n setBannerVisible(hasChanges)\n }, [hasChanges])\n\n // Sync locally-edited params into selectedEndpoint (Zustand) while in view mode.\n // EndpointPage reads from selectedEndpoint.parameters and selectedEndpoint.responses[code].headers,\n // so we must keep those fields up-to-date with the local edit state.\n useEffect(() => {\n if (mode !== 'view' || !selectedEndpoint) return\n const epId = selectedEndpoint.id\n\n // Read endpoint name/description/tags from local edit state\n const localName = endpointNames[epId]\n const localDesc = endpointDescs[epId]\n const localEpTags = endpointTags[epId]\n\n const patchedSummary =\n localName !== undefined && localName !== selectedEndpoint.summary ? localName : selectedEndpoint.summary\n const patchedDesc =\n localDesc !== undefined && localDesc !== selectedEndpoint.description ? localDesc : selectedEndpoint.description\n const patchedTags =\n localEpTags !== undefined &&\n JSON.stringify(localEpTags) !== JSON.stringify(selectedEndpoint.tags ?? [])\n ? localEpTags\n : selectedEndpoint.tags\n\n // Convert ParameterFormValues → OpenAPI Parameter\n const localRequestParams = endpointParams[epId] ?? []\n const openApiParams: Parameter[] = localRequestParams.map((p) => ({\n name: p.name,\n in: p.in,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n schema: {\n type: p.type,\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n },\n }))\n\n // Convert response ParameterFormValues → OpenAPI headers map (name → header object)\n const localResponseParams = endpointResponseParams[epId] ?? []\n const responseHeadersMap = localResponseParams.reduce<Record<string, unknown>>((acc, p) => {\n acc[p.name] = {\n schema: { type: p.type, ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}) },\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n }\n return acc\n }, {})\n\n // Patch all response status codes with the local response params as headers.\n const patchedResponses = Object.fromEntries(\n Object.entries(selectedEndpoint.responses ?? {}).map(([code, resp]) => [\n code,\n {\n ...resp,\n headers: Object.keys(responseHeadersMap).length > 0 ? responseHeadersMap : resp.headers,\n },\n ])\n ) as typeof selectedEndpoint.responses\n\n // Anti-loop guard: skip if ALL fields already match\n const alreadyInSync =\n selectedEndpoint.summary === patchedSummary &&\n selectedEndpoint.description === patchedDesc &&\n JSON.stringify(selectedEndpoint.tags ?? []) === JSON.stringify(patchedTags ?? []) &&\n JSON.stringify(selectedEndpoint.parameters ?? []) === JSON.stringify(openApiParams) &&\n JSON.stringify(selectedEndpoint.responses) === JSON.stringify(patchedResponses)\n\n if (alreadyInSync) return\n\n setSelectedEndpoint({\n ...selectedEndpoint,\n summary: patchedSummary,\n description: patchedDesc,\n tags: patchedTags,\n parameters: openApiParams,\n responses: patchedResponses,\n })\n }, [mode, selectedEndpoint, endpointNames, endpointDescs, endpointTags, endpointParams, endpointResponseParams, setSelectedEndpoint])\n\n const handleAddTag = (tag: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }) => {\n const newTag: TagMeta = {\n name: tag.name,\n description: tag.description,\n externalDocsUrl: tag.externalDocsLink,\n externalDocsDescription: tag.externalDocsDescription,\n isDefault: false,\n }\n setLocalTags((prev) => [...prev, newTag])\n setBannerVisible(true)\n }\n\n const handleUpdateTag = (updatedTag: {\n name: string\n description?: string\n externalDocsDescription?: string\n externalDocsLink?: string\n }) => {\n const originalName = tagDrawerState.initialValues?.name\n setLocalTags((prev) =>\n prev.map((t) =>\n t.name === originalName\n ? {\n ...t,\n name: updatedTag.name,\n description: updatedTag.description,\n externalDocsUrl: updatedTag.externalDocsLink,\n externalDocsDescription: updatedTag.externalDocsDescription,\n }\n : t\n )\n )\n setBannerVisible(true)\n }\n\n const handleDeleteTagConfirm = () => {\n if (deleteTagModal.tagIndex < 0) return\n const tagName = localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'\n setLocalTags((prev) => prev.filter((_, index) => index !== deleteTagModal.tagIndex))\n messageApi.success(`${tagName} tag has been deleted successfully.`)\n setDeleteTagModal({ open: false, tagIndex: -1 })\n setBannerVisible(true)\n }\n\n const getEndpointsByTag = (): Record<string, any[]> => {\n if (!selectedApi) return {}\n const tags = selectedApi.tags || {}\n const curl = selectedApi.curl || []\n const filtered: typeof tags = {}\n Object.keys(tags).forEach((tagKey) => {\n filtered[tagKey] = tags[tagKey].map((endpoint) => {\n const curlMatch = curl.find(\n (c: any) =>\n c.serverUrl === selectedUrl && c.method === endpoint.method && c.path === endpoint.path\n )\n return { ...endpoint, curlCommand: curlMatch?.curlCommand || null }\n })\n })\n return filtered\n }\n\n const handleReset = () => {\n setBannerVisible(false)\n setApiNameTouched(false)\n setDescriptionTouched(false)\n setSaveErrors([])\n setLocalApiName(selectedApi?.title ?? '')\n setLocalDescription(selectedApi?.description ?? '')\n setEndpointNames({})\n setEndpointDescs({})\n setEndpointTags({})\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setEndpointRequestBody(initialEndpointRequestBody)\n setEndpointResponseBody(initialEndpointResponseBody)\n setLocalTags(tagMetadata)\n setResetKey((prev) => prev + 1)\n messageApi.success('Changes have been reset successfully.')\n }\n\n const handleSave = async () => {\n if (!selectedApi || !originalData) return\n\n const rawFile = originalData.find((f) => Object.keys(f.paths)[0] === selectedApi.contextPath)\n if (!rawFile) return\n\n const cloned: OpenAPIFile = JSON.parse(JSON.stringify(rawFile))\n\n if (!cloned.openapi) {\n cloned.openapi = '3.0.1'\n }\n\n cloned.info.title = localApiName\n cloned.info.description = localDescription\n\n cloned.tags = localTags.map((t) => {\n const originalTag = rawFile.tags?.find((rt) => rt.name === t.name)\n return {\n ...(originalTag ?? {}),\n name: t.name,\n ...(t.description !== undefined && { description: t.description }),\n ...((t.externalDocsUrl !== undefined || t.externalDocsDescription !== undefined) && {\n externalDocs: {\n url: t.externalDocsUrl ?? '',\n description: t.externalDocsDescription ?? '',\n },\n }),\n }\n })\n\n const idToPathMethod: Record<string, { path: string; method: string }> = {}\n Object.values(selectedApi.tags)\n .flat()\n .forEach((ep) => {\n idToPathMethod[ep.id] = { path: ep.path, method: ep.method.toLowerCase() }\n })\n\n Object.entries(endpointNames).forEach(([id, name]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { summary?: string; description?: string }>)[\n loc.method\n ].summary = name\n }\n })\n\n Object.entries(endpointDescs).forEach(([id, desc]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { summary?: string; description?: string }>)[\n loc.method\n ].description = desc\n }\n })\n\n Object.entries(endpointTags).forEach(([id, tags]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n ;(cloned.paths[loc.path] as Record<string, { tags?: string[] }>)[loc.method].tags = tags\n }\n })\n\n Object.entries(endpointParams).forEach(([id, params]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n const methodObj = (cloned.paths[loc.path] as Record<string, { parameters?: unknown[] }>)[\n loc.method\n ]\n if (params.length > 0) {\n methodObj.parameters = params.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required,\n ...(param.description && { description: param.description }),\n schema: {\n type: param.type,\n ...(param.type === 'array' && param.enum && param.enum.length > 0\n ? { items: { type: param.items?.type ?? 'string', enum: param.enum } }\n : param.enum && param.enum.length > 0\n ? { enum: param.enum }\n : {}),\n ...(param.type === 'array' && param.items && !param.enum?.length ? { items: param.items } : {}),\n },\n }))\n } else {\n delete methodObj.parameters\n }\n }\n })\n\n Object.entries(endpointResponseParams).forEach(([id, params]) => {\n const loc = idToPathMethod[id]\n if (loc && cloned.paths[loc.path]?.[loc.method as keyof (typeof cloned.paths)[string]]) {\n const methodObj = (cloned.paths[loc.path] as Record<string, Record<string, unknown>>)[\n loc.method\n ]\n if (params.length > 0) {\n methodObj['x-response-params'] = params.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required,\n ...(param.description && { description: param.description }),\n schema: {\n type: param.type,\n ...(param.type === 'array' && param.enum && param.enum.length > 0\n ? { items: { type: param.items?.type ?? 'string', enum: param.enum } }\n : param.enum && param.enum.length > 0\n ? { enum: param.enum }\n : {}),\n ...(param.type === 'array' && param.items && !param.enum?.length ? { items: param.items } : {}),\n },\n }))\n } else {\n delete methodObj['x-response-params']\n }\n }\n })\n\n Object.entries(endpointRequestBody).forEach(([id, schema]) => {\n const loc = idToPathMethod[id]\n if (!loc) return\n const pathEntry = cloned.paths[loc.path]\n if (!pathEntry) return\n const methodObj = pathEntry[loc.method as keyof typeof pathEntry]\n if (!methodObj) return\n const methodObjAny = methodObj as Record<string, unknown>\n if (!methodObjAny.requestBody) methodObjAny.requestBody = {}\n const rb = methodObjAny.requestBody as Record<string, unknown>\n if (!rb.content) rb.content = {}\n ;(rb.content as Record<string, unknown>)['application/json'] = { example: schema }\n })\n\n Object.entries(endpointResponseBody).forEach(([id, schema]) => {\n const loc = idToPathMethod[id]\n if (!loc) return\n const pathEntry = cloned.paths[loc.path]\n if (!pathEntry) return\n const methodObj = pathEntry[loc.method as keyof typeof pathEntry]\n if (!methodObj) return\n const methodObjAny = methodObj as Record<string, unknown>\n if (!methodObjAny.responses) return\n const responses = methodObjAny.responses as Record<\n string,\n { content?: { 'application/json'?: { schema?: unknown; example?: unknown } } }\n >\n const statusCode = '200' in responses ? '200' : Object.keys(responses)[0]\n if (!responses[statusCode]) return\n if (!responses[statusCode].content) responses[statusCode].content = {}\n responses[statusCode].content['application/json'] = { example: schema }\n })\n\n try {\n await onSave?.(cloned)\n setBannerVisible(false)\n setSaveErrors([])\n messageApi.success('Changes have been saved and published successfully.')\n\n // Update store so view mode immediately reflects the saved changes\n const newOriginalData = originalData.map((f) =>\n Object.keys(f.paths)[0] === selectedApi.contextPath ? cloned : f\n )\n setOriginalData(newOriginalData)\n\n const newTransformed = [cloned].map(transformOpenApiToDocs)[0]\n const newTransformedData = (transformedData ?? []).map((t) =>\n t.contextPath === selectedApi.contextPath ? newTransformed : t\n )\n setTransformedData(newTransformedData)\n\n const newTree = buildTreeDataStructure(newTransformedData)\n setBuiltTreeData(newTree ?? [])\n\n setSelectedApi(newTransformed)\n } catch (err: unknown) {\n let messages: string[] = []\n if (err && typeof err === 'object' && 'data' in err) {\n const e = err as { data: { message?: string } }\n messages = [e.data?.message ?? 'Unknown error']\n } else if (err && typeof err === 'object' && 'message' in err) {\n const e = err as { message: unknown }\n messages = [String(e.message)]\n } else if (err instanceof Error) {\n messages = err.message.split('\\n').filter(Boolean)\n } else {\n messages = [String(err)]\n }\n setSaveErrors(messages)\n setSelectedEditItem({ type: 'errors' })\n }\n }\n\n const handleResetSearch = () => {\n setSearchValue('')\n }\n\n const _handleVisitLandingPage = () => {\n if (handleVisitLandingPage) {\n handleVisitLandingPage()\n return\n }\n window.location.pathname = '/'\n }\n\n useEffect(() => {\n setErrorBoxExpanded(false)\n }, [selectedEditItem])\n\n const errorBox =\n saveErrors.length > 0 ? (\n <div\n style={{\n background: token.colorErrorBg,\n borderRadius: token.borderRadiusLG,\n padding: `${token.marginLG}px ${token.marginLG}px 48px`,\n width: '100%',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n }}\n >\n {selectedEditItem.type !== 'errors' && (\n <button\n onClick={() => setErrorBoxExpanded((prev) => !prev)}\n style={{\n display: 'flex',\n alignItems: 'center',\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Collapse\"\n >\n <RightOutlined\n style={{\n fontSize: 14,\n color: token.colorError,\n transform: errorBoxExpanded ? 'rotate(90deg)' : 'none',\n transition: 'transform 0.2s',\n }}\n />\n </button>\n )}\n <Title level={3} style={{ margin: 0, color: token.colorError }}>\n Errors\n </Title>\n </div>\n <p\n style={{\n color: token.colorError,\n fontSize: 16,\n lineHeight: '24px',\n marginTop: token.marginXS,\n marginBottom: token.marginSM,\n }}\n >\n Failed to update the OpenAPI documentation. Please resolve the following issues:\n </p>\n <Divider style={{ margin: `${token.marginSM}px 0` }} />\n <ol style={{ paddingLeft: token.marginLG, margin: 0 }}>\n {saveErrors.map((msg, i) => (\n <li key={i} style={{ color: token.colorText, marginBottom: token.marginXS }}>\n {msg}\n </li>\n ))}\n </ol>\n </div>\n ) : null\n\n const errorBoxCollapsed =\n saveErrors.length > 0 ? (\n <button\n onClick={() => setErrorBoxExpanded(true)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n padding: `${token.paddingXS}px ${token.paddingLG}px`,\n background: token.colorErrorBg,\n borderRadius: token.borderRadiusLG,\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left' as const,\n }}\n >\n <RightOutlined style={{ fontSize: 14, color: token.colorError }} />\n <span style={{ color: token.colorError, fontSize: token.fontSizeLG, fontWeight: 600 }}>\n Errors\n </span>\n </button>\n ) : null\n\n const switcherNode = (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n background: token.colorBgLayout,\n padding: '4px',\n borderRadius: 8,\n gap: 8,\n }}\n >\n <button\n onClick={() => setMode('edit')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: 8,\n fontFamily: token.fontFamily,\n background: mode === 'edit' ? token.colorBgContainer : 'transparent',\n boxShadow: mode === 'edit' ? '0px 2px 4px -2px rgba(17,12,34,0.12)' : 'none',\n fontWeight: mode === 'edit' ? 700 : 400,\n fontSize: mode === 'edit' ? token.fontSize : token.fontSizeLG,\n color: token.colorText,\n }}\n >\n <EditOutlined style={{ fontSize: 18 }} />\n Edit\n </button>\n <button\n onClick={() => setMode('view')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: mode === 'view' ? '8px 12px' : '0 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: mode === 'view' ? 8 : 12,\n fontFamily: token.fontFamily,\n background: mode === 'view' ? token.colorBgContainer : 'transparent',\n boxShadow: mode === 'view' ? '0px 2px 4px -2px rgba(17,12,34,0.12)' : 'none',\n fontWeight: mode === 'view' ? 700 : 400,\n fontSize: token.fontSize,\n lineHeight: '22px',\n color: token.colorText,\n }}\n >\n <EyeOutlined style={{ fontSize: 18 }} />\n View\n </button>\n </div>\n )\n\n return (\n <div\n className={cx('documentation-container')}\n style={{ overflow: mode === 'view' ? 'hidden' : 'auto' }}\n >\n {contextHolder}\n <div className={cx('section')}>\n <ApiDocumentationBar\n apiName={localApiName}\n mode={mode}\n onModeChange={setMode}\n onReset={() => setResetConfirmModal(true)}\n onSave={() => setSaveConfirmModal(true)}\n hasChanges={hasChanges}\n hasErrors={hasGeneralError}\n switcherNode={isMobile ? switcherNode : undefined}\n />\n </div>\n {bannerVisible && <UnsavedChangesBanner onClose={() => setBannerVisible(false)} />}\n {mode === 'edit' ? (\n <div style={{ display: 'flex', gap: token.marginLG, flex: 1, minHeight: 0 }}>\n {!isMobile && (\n <EditModeSidebar\n selectedItem={selectedEditItem}\n onSelectItem={setSelectedEditItem}\n endpoints={allEndpoints}\n hasGeneralError={hasGeneralError}\n hasSaveErrors={saveErrors.length > 0}\n />\n )}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n flex: 1,\n overflow: 'auto',\n }}\n >\n {isMobile ? (\n <>\n {errorBox && <div className={cx('section')}>{errorBox}</div>}\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find(\n (v) => v.apiId === selectedApi?.currentVersion\n )?.version || ''\n }\n description={localDescription}\n onApiNameChange={(val) => {\n setApiNameTouched(true)\n setLocalApiName(val)\n }}\n apiNameError={hasApiNameError}\n onDescriptionChange={(val) => {\n setDescriptionTouched(true)\n setLocalDescription(val)\n }}\n descriptionError={hasDescriptionError}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setBannerVisible(true)\n }}\n />\n </div>\n <div className={cx('section')}>\n <TagsSection\n tags={localTags}\n collapsed={tagsCollapsed}\n onToggleCollapse={() => setTagsCollapsed((prev) => !prev)}\n onAddTag={() => setTagDrawerState({ open: true, mode: 'add' })}\n onEditTag={(tag) =>\n setTagDrawerState({\n open: true,\n mode: 'edit',\n initialValues: {\n name: tag.name,\n description: tag.description,\n externalDocsDescription: tag.externalDocsDescription,\n externalDocsLink: tag.externalDocsUrl,\n },\n })\n }\n onDeleteTag={(_tagName, tagIndex) => setDeleteTagModal({ open: true, tagIndex })}\n />\n </div>\n <div className={cx('section', 'section-grow')}>\n <EndpointsSection\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\n resetKey={resetKey}\n collapsed={endpointsCollapsed}\n onToggleCollapse={() => setEndpointsCollapsed((c) => !c)}\n endpointNames={endpointNames}\n endpointDescs={endpointDescs}\n endpointTags={endpointTags}\n availableTags={localTags.map((t) => t.name)}\n onEndpointNameChange={(id, val) => {\n setEndpointNames((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n onRequestContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointRequestBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n onResponseContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointResponseBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n requestBodySchemas={endpointRequestBody}\n responseBodySchemas={endpointResponseBody}\n />\n </div>\n </>\n ) : (\n <>\n {selectedEditItem.type === 'errors' && errorBox && (\n <div className={cx('section')}>{errorBox}</div>\n )}\n {selectedEditItem.type !== 'errors' && (\n <>\n {errorBoxExpanded && errorBox ? (\n <div className={cx('section')}>{errorBox}</div>\n ) : (\n errorBoxCollapsed && <div className={cx('section')}>{errorBoxCollapsed}</div>\n )}\n </>\n )}\n {selectedEditItem.type === 'general' && (\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find(\n (v) => v.apiId === selectedApi?.currentVersion\n )?.version || ''\n }\n description={localDescription}\n onApiNameChange={(val) => {\n setApiNameTouched(true)\n setLocalApiName(val)\n }}\n apiNameError={hasApiNameError}\n onDescriptionChange={(val) => {\n setDescriptionTouched(true)\n setLocalDescription(val)\n }}\n descriptionError={hasDescriptionError}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setBannerVisible(true)\n }}\n />\n </div>\n )}\n {selectedEditItem.type === 'tags' && (\n <div className={cx('section')}>\n <TagsSection\n tags={localTags}\n collapsed={tagsCollapsed}\n onToggleCollapse={() => setTagsCollapsed((prev) => !prev)}\n onAddTag={() => setTagDrawerState({ open: true, mode: 'add' })}\n onEditTag={(tag) =>\n setTagDrawerState({\n open: true,\n mode: 'edit',\n initialValues: {\n name: tag.name,\n description: tag.description,\n externalDocsDescription: tag.externalDocsDescription,\n externalDocsLink: tag.externalDocsUrl,\n },\n })\n }\n onDeleteTag={(_tagName, tagIndex) => setDeleteTagModal({ open: true, tagIndex })}\n />\n </div>\n )}\n {selectedEditItem.type === 'endpoint' && (\n <EndpointsSection\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\n selectedEndpointKey={selectedEditItem.key}\n collapsed={endpointsCollapsed}\n onToggleCollapse={() => setEndpointsCollapsed((c) => !c)}\n endpointNames={endpointNames}\n endpointDescs={endpointDescs}\n endpointTags={endpointTags}\n availableTags={localTags.map((t) => t.name)}\n onEndpointNameChange={(id, val) => {\n setEndpointNames((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]:\n prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setBannerVisible(true)\n }}\n onRequestContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointRequestBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n onResponseContentChange={(endpointId, jsonString) => {\n try {\n const schema = JSON.parse(jsonString)\n setEndpointResponseBody((prev) => ({ ...prev, [endpointId]: schema }))\n setBannerVisible(true)\n } catch {\n // invalid JSON — don't update\n }\n }}\n requestBodySchemas={endpointRequestBody}\n responseBodySchemas={endpointResponseBody}\n resetKey={resetKey}\n />\n )}\n </>\n )}\n </div>\n </div>\n ) : (\n <div className={cx('docs-layout')}>\n <Sidebar searchValue={searchValue} setSearchValue={setSearchValue} />\n <div className={cx('content-scroll-area')}>\n <MainContent\n handleVisitLandingPage={_handleVisitLandingPage}\n handleResetSearch={handleResetSearch}\n searchEnabled={!!searchValue}\n apiOverride={mode === 'view' ? viewModeApi : undefined}\n />\n {!isMobile && focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\n </div>\n </div>\n )}\n <AddTagDrawer\n open={tagDrawerState.open}\n mode={tagDrawerState.mode}\n initialValues={tagDrawerState.initialValues}\n onClose={() => setTagDrawerState({ open: false, mode: 'add' })}\n onAddTag={handleAddTag}\n onEditTag={handleUpdateTag}\n existingTags={localTags}\n />\n\n {/* Save & Publish confirmation modal */}\n <Modal\n open={saveConfirmModal}\n onCancel={() => setSaveConfirmModal(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Save &amp; Publish Changes</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setSaveConfirmModal(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to Save &amp; Publish Changes?\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setSaveConfirmModal(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"middle\"\n onClick={() => {\n setSaveConfirmModal(false)\n handleSave()\n }}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Save &amp; Publish\n </Button>\n </div>\n </Modal>\n\n {/* Reset confirmation modal */}\n <Modal\n open={resetConfirmModal}\n onCancel={() => setResetConfirmModal(false)}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Reset changes?</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setResetConfirmModal(false)}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n This will discard your unsaved changes.\n </span>\n </div>\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setResetConfirmModal(false)}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n size=\"middle\"\n onClick={() => {\n setResetConfirmModal(false)\n handleReset()\n }}\n style={{\n borderRadius: 8,\n height: 32,\n paddingInline: 16,\n backgroundColor: '#faad14',\n borderColor: '#faad14',\n color: '#fff',\n }}\n >\n Yes, Reset\n </Button>\n </div>\n </Modal>\n\n {/* Delete tag confirmation modal */}\n <Modal\n open={deleteTagModal.open}\n onCancel={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n centered\n title={null}\n footer={null}\n closable={false}\n width={520}\n className=\"delete-tag-confirm-modal\"\n styles={{\n content: { padding: 0, borderRadius: 8, overflow: 'hidden' },\n body: { padding: 0, margin: 0 },\n }}\n >\n {/* HEAD */}\n <div className={cx('deleteModalHead')}>\n <span className={cx('deleteModalTitle')}>Delete {localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'} tag</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n {/* CONTENT */}\n <div className={cx('deleteModalContent')}>\n <span className={cx('deleteModalContentText')}>\n Are you sure you want to delete {localTags[deleteTagModal.tagIndex]?.name ?? 'Tag'} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setDeleteTagModal({ open: false, tagIndex: -1 })}\n style={{ borderRadius: 8, height: 32, paddingInline: 15 }}\n >\n Cancel\n </Button>\n <Button\n type=\"primary\"\n danger\n size=\"middle\"\n onClick={handleDeleteTagConfirm}\n style={{ borderRadius: 8, height: 32, paddingInline: 16 }}\n >\n Yes, Delete\n </Button>\n </div>\n </Modal>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter'\nimport json from 'react-syntax-highlighter/dist/esm/languages/hljs/json'\nimport * as hljs from 'react-syntax-highlighter/dist/esm/styles/hljs'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\n\nSyntaxHighlighter.registerLanguage('json', json)\n\nconst Codebox = ({ code, language }: { code: string; language?: string }) => {\n const [theme] = useState<'LIGHT' | 'DARK'>('DARK')\n const { cx } = useStyle('codeBox', (token, scope) => ({\n [scope('codebox')]: {\n borderRadius: token.borderRadius,\n height: '100%',\n maxHeight: '100%',\n overflow: 'auto',\n\n pre: {\n height: '100%',\n },\n },\n // [scope('codebox-header')]: {\n // display: 'flex',\n // alignItems: 'center',\n // gap: '0.25rem',\n // paddingLeft: '0.5rem',\n // height: '1.75rem',\n // border: '1px solid #bbbec5',\n // borderTopRightRadius: '0.25rem',\n // borderTopLeftRadius: '0.25rem',\n // },\n // [scope('themeToggle')]: {\n // width: '0.75rem',\n // minWidth: '0.75rem',\n // aspectRatio: '1 / 1',\n // border: '1px solid transparent',\n // borderRadius: '100%',\n // cursor: 'pointer',\n // borderColor: '#6b7280',\n // },\n // [scope('themeToggle_light')]: {\n // backgroundColor: '#edf1fb',\n // },\n // [scope('themeToggle_dark')]: {\n // backgroundColor: '#455162',\n // },\n }))\n\n return (\n <div className={cx('codebox')}>\n {/* TODO: Implement theme toggle */}\n {/* <div className={cx('codebox-header')}>\n <div\n role=\"button\"\n tabIndex={-1}\n onClick={() => theme !== 'LIGHT' && setTheme('LIGHT')}\n className={cx('themeToggle', 'themeToggle_light')}\n title=\"Light theme\"\n ></div>\n <div\n role=\"button\"\n tabIndex={-1}\n onClick={() => theme !== 'DARK' && setTheme('DARK')}\n className={cx('themeToggle', 'themeToggle_dark')}\n title=\"Dark theme\"\n ></div>\n </div> */}\n <SyntaxHighlighter\n language={language || 'json'}\n style={theme === 'LIGHT' ? hljs.stackoverflowLight : hljs.stackoverflowDark}\n showLineNumbers\n wrapLines\n customStyle={{\n margin: 0,\n minHeight: '3rem',\n overflowY: 'auto',\n padding: '0.75rem 1rem 0.75rem 1.5rem',\n backgroundColor: theme === 'DARK' ? '#20264B' : '#20264B',\n fontSize: '0.75rem',\n }}\n lineProps={{\n style: { fontFamily: 'Cascadia Code, sans-serif' },\n }}\n >\n {code}\n </SyntaxHighlighter>\n </div>\n )\n}\n\nexport default Codebox\n","import useStore from '@doc-lib/store'\nimport { handleStatusColor, generateExampleFromSchema, hasAnyExample } from '@doc-lib/utils'\nimport CopyOutlined from '@doc-lib/assets/copy'\nimport { Button, Select, Tooltip, Typography } from 'antd'\nimport { useMemo, useState } from 'react'\nimport Codebox from './EndpointPage/Codebox/Codebox'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\nimport { token as tokens } from '@doc-lib/theme/light.json'\n\nfunction CodeboxSidebar() {\n const { selectedEndpoint, selectedStatusCode, statusCodeOptions, setSelectedStatusCode } =\n useStore(({ view }) => view)\n const httpStatusOptions = useMemo(\n () =>\n statusCodeOptions.map((code) => ({\n value: code,\n label: (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span\n style={{\n background: handleStatusColor(code),\n borderRadius: '50%',\n display: 'inline-block',\n width: '0.5rem',\n height: '0.5rem',\n minWidth: '0.5rem',\n minHeight: '0.5rem',\n }}\n />\n {code}\n </span>\n ),\n })),\n [statusCodeOptions]\n )\n\n const { originalData } = useStore(({ view }) => view)\n\n const [curlTooltip, setCurlTooltip] = useState('Copy Request')\n // Find the curl command for the selected endpoint\n const findCurlForEndpoint = () => {\n if (!selectedEndpoint || !originalData) return ''\n\n // Find the API that contains this endpoint\n const api = originalData.find((apiData) => {\n const paths = apiData.paths || {}\n return Object.keys(paths).some((path) => {\n const methods = paths[path] || {}\n return Object.keys(methods).some((method) => {\n const endpointMethod = method.toUpperCase()\n return path === selectedEndpoint.path && endpointMethod === selectedEndpoint.method\n })\n })\n })\n\n if (!api || !api['x-curls']) return ''\n\n // Find all matching curl commands\n const matchingCurls = api['x-curls'].filter(\n (curlObj: any) =>\n curlObj.path === selectedEndpoint.path && curlObj.method === selectedEndpoint.method\n )\n\n // Prioritize SDB server URLs\n const sdbCurl = matchingCurls.find(\n (curl: any) => curl.serverUrl.includes('sdb') || curl.serverUrl.includes('SDB')\n )\n\n // If SDB found, return it, otherwise return the first match (or empty string)\n return sdbCurl ? sdbCurl.curlCommand : matchingCurls[0]?.curlCommand || ''\n }\n\n const curlCommand = findCurlForEndpoint()\n\n const formatCurlCommand = (cmd: string) => {\n if (!cmd) return ''\n\n return cmd\n .replace(/ -X /g, ' \\\\\\n -X ')\n .replace(/ -H /g, ' \\\\\\n -H ')\n .replace(/ -d /g, ' \\\\\\n -d ')\n .replace(/ (https?:\\/\\/[^\\s'\"]+)/g, ' \\\\\\n $1')\n }\n\n const { cx } = useStyle('CodeboxSidebar', (token, scope) => ({\n [scope('container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginMD,\n background: token.colorBgContainer,\n borderRadius: token.borderRadiusLG,\n padding: token.paddingLG,\n overflow: 'hidden',\n height: '100%',\n maxHeight: '100%',\n width: '23.625rem',\n minWidth: '23.625rem',\n '.ant-card-body': { padding: 0 },\n '.ant-card-head-title': { color: 'white' },\n '.ant-card-head': { borderBottom: '.125rem solid #33419A' },\n },\n\n [scope('rightCard')]: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#20264B',\n '.CodeboxSidebar-copyButton': { '.isolated-btn-icon': { path: { fill: 'white' } } },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n borderTop: '.125rem solid #33419A',\n },\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n },\n [scope('rightCardRequest')]: {\n maxHeight: '50%',\n minHeight: '8.125rem',\n },\n [scope('rightCardResponse')]: {\n height: 'fit-content',\n overflow: 'hidden',\n },\n [scope('rightCardHeader')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${token.marginXS}px ${token.margin}px`,\n borderBottom: '.125rem solid #33419A',\n height: '3.125rem',\n },\n [scope('rightCardFlex')]: {\n display: 'flex',\n flexDirection: 'column',\n height: 'fit-content',\n overflow: 'auto',\n backgroundColor: '#20264B',\n '.ant-card-head': {\n flex: '0 0 auto',\n },\n '.ant-card-body': {\n flex: '1 1 auto',\n overflowY: 'auto',\n padding: '.125rem 0 0 0 !important',\n },\n '.isolated-card-body': {\n padding: ' .125rem 0 0 0 !important',\n height: 'fit-content',\n overflow: 'auto',\n borderTop: '.125rem solid #33419A',\n '.codebox': { height: 'fit-content', overflow: 'auto' },\n },\n },\n\n [scope('customSelect')]: {\n width: '5.5rem',\n maxWidth: '5.5rem',\n\n '.ant-select-selector': {\n backgroundColor: '#fff',\n borderColor: '#fff',\n borderRadius: '.375rem',\n color: '#101010',\n },\n '.ant-select-selection-item': {\n color: '#101010',\n fontWeight: 400,\n },\n '.ant-select-selection-placeholder': {\n color: 'rgba(255, 255, 255, 0.65)',\n },\n '.ant-select-arrow': {\n color: '#101010',\n },\n '&:hover .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n '&:focus .ant-select-selector, &.ant-select-focused .ant-select-selector': {\n borderColor: `${tokens['brnadColor.7']}`,\n color: 'white',\n },\n },\n }))\n\n return (\n <div className={cx('container')}>\n {/* Request codebox */}\n {curlCommand && (\n <div className={cx('rightCard', 'rightCardRequest')}>\n <div className={cx('rightCardHeader')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Request\n </Typography.Text>\n <Tooltip title={curlTooltip}>\n <Button\n color=\"default\"\n variant=\"link\"\n className={cx('copyButton')}\n onClick={() => {\n const cleaned = curlCommand.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\')\n navigator.clipboard.writeText(formatCurlCommand(cleaned))\n setCurlTooltip('Copied!')\n setTimeout(() => setCurlTooltip('Copy cURL'), 1500)\n }}\n icon={<CopyOutlined style={{ color: 'white' }} />}\n />\n </Tooltip>\n </div>\n <Codebox\n language=\"bash\"\n code={formatCurlCommand(curlCommand.replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\'))}\n />\n </div>\n )}\n {/* Response codebox */}\n {selectedEndpoint?.responses && httpStatusOptions.length > 0 && (\n <div className={cx('rightCard', 'rightCardResponse')}>\n <div className={cx('rightCardHeader', 'rightCardHeaderResponse')}>\n <Typography.Text strong style={{ color: '#fff' }}>\n Response\n </Typography.Text>\n <Select\n defaultActiveFirstOption={true}\n defaultValue={200}\n className={cx('customSelect')}\n prefix={false}\n style={{ width: '100%' }}\n value={selectedStatusCode}\n onChange={setSelectedStatusCode}\n options={httpStatusOptions}\n open={httpStatusOptions.length === 1 ? false : undefined}\n suffixIcon={httpStatusOptions.length > 1 ? undefined : false}\n />\n </div>\n {(() => {\n const responseObj = selectedEndpoint?.responses?.[selectedStatusCode as number]\n const contentEntry = responseObj?.content\n ? Object.values(responseObj.content)[0]\n : undefined\n let displayData: any\n\n if (contentEntry?.example !== undefined) {\n displayData = contentEntry.example\n } else if (contentEntry?.examples !== undefined) {\n const firstKey = Object.keys(contentEntry.examples)[0]\n const firstExample = contentEntry.examples[firstKey]\n displayData = firstExample?.value ?? firstExample\n } else if (contentEntry?.schema && hasAnyExample(contentEntry.schema)) {\n displayData = generateExampleFromSchema(contentEntry.schema)\n } else if (contentEntry?.schema) {\n displayData = contentEntry.schema\n } else {\n displayData = responseObj\n }\n\n return (\n <Codebox\n code={JSON.stringify(displayData, null, 2) || ''}\n />\n )\n })()}\n </div>\n )}\n </div>\n )\n}\n\nexport default CodeboxSidebar\n","'use client'\nimport { Sidebar, MainContent } from './components'\nimport { useStyle } from '../hooks/useStyle'\nimport { useNodeSelection } from '../hooks/useNodeSelection'\nimport { OpenAPIFile } from '@doc-lib/types/OpenApi'\nimport { useEffect, useRef, useState } from 'react'\nimport useStore from '@doc-lib/store'\nimport { transformOpenApiToDocs } from './helper/mutate'\nimport { buildTreeDataStructure } from './helper'\nimport CodeboxSidebar from './components/CodeboxSidebar'\n\nexport const DocumentationLayout = ({\n data,\n preSelectedApi,\n handleVisitLandingPage,\n}: {\n data: OpenAPIFile[]\n preSelectedApi?: string | null\n handleVisitLandingPage?: () => void\n theme?: any\n}) => {\n const [searchValue, setSearchValue] = useState('')\n\n const {\n focusedContent,\n selectedNodeKey,\n selectedApi,\n builtTreeData,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\n setFocusedContent,\n setExpandedKeys,\n } = useStore(({ view }) => view)\n const { selectFirstApi, selectPreSelectedApi, clearSelection } = useNodeSelection()\n const hasInitializedRef = useRef(false)\n\n useEffect(() => {\n return () => {\n resetStore()\n }\n }, [])\n\n const resetStore = () => {\n setExpandedKeys([])\n setFocusedContent(null)\n setBuiltTreeData([])\n setTransformedData([])\n setOriginalData([])\n setSearchValue('')\n clearSelection()\n hasInitializedRef.current = false\n }\n\n useEffect(() => {\n if (!hasInitializedRef.current && data.length > 0) {\n setOriginalData(data)\n const transformedData = data\n .map(transformOpenApiToDocs)\n .sort((a, b) => a.title.localeCompare(b.title))\n setTransformedData(transformedData)\n\n const builtTree = buildTreeDataStructure(transformedData)\n setBuiltTreeData(builtTree)\n\n hasInitializedRef.current = true\n }\n }, [data, setOriginalData, setTransformedData, setBuiltTreeData])\n\n useEffect(() => {\n if (\n builtTreeData &&\n builtTreeData.length > 0 &&\n !selectedApi &&\n !selectedNodeKey &&\n hasInitializedRef.current\n ) {\n if (!preSelectedApi) {\n selectFirstApi(builtTreeData)\n } else {\n selectPreSelectedApi(builtTreeData, preSelectedApi)\n }\n hasInitializedRef.current = false\n }\n }, [builtTreeData, selectedNodeKey, selectedApi, selectFirstApi])\n\n const { cx } = useStyle('APIDocumentationLayout', (token, scope) => ({\n [scope('documentation-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n height: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n },\n [scope('docs-layout')]: {\n display: 'flex',\n height: '100%',\n maxHeight: '100%',\n overflow: 'hidden',\n gap: token.marginLG,\n width: '100%',\n },\n }))\n\n const handleResetSearch = () => {\n setSearchValue('')\n }\n\n const _handleVisitLandingPage = () => {\n if (handleVisitLandingPage) {\n handleVisitLandingPage()\n return\n }\n window.location.pathname = '/'\n }\n\n return (\n <div className={cx('documentation-container')}>\n <div className={cx('docs-layout')}>\n <Sidebar searchValue={searchValue} setSearchValue={setSearchValue} />\n <MainContent\n handleVisitLandingPage={_handleVisitLandingPage}\n handleResetSearch={handleResetSearch}\n searchEnabled={!!searchValue}\n />\n {focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}