@digi-frontend/dgate-api-documentation 4.0.0-beta.1 → 4.0.0-beta.4

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.cjs","names":["antdTheme","token","keys: string[]","token","Typography","EndpointItem: React.FC<EndpointItemProps>","Tag","Text","title: React.ReactNode","NoDataIcon: React.FC<NoDataIconProps>","Grid","Sidebar: React.FC<{\n searchValue: string\n setSearchValue: (text: string) => void\n onNodeSelect?: () => void\n}>","useBreakpoint","Tooltip","Input","SearchOutlined","Button","Minify","Tree","MinusSquareOutlined","PlusSquareOutlined","Flex","token","NoDataIcon","Text","Resizable","token","Tooltip","Title","Flex","Button","LinkIcon","Text","Divider","Card","ViewModeApiHeader: FC<ViewModeApiHeaderProps>","token","Typography","SafetyOutlined","InfoCircleOutlined","DownOutlined","Button","AppstoreOutlined","BarsOutlined","useStore","filtered: typeof tags","Flex","token","Title","ApiCard","Divider","Typography","token","Tag","properties: Record<string, any>","required: string[]","EndpointPage: React.FC","useStore","theme","requestTabs: RequestTab[]","Table","Button","LeftOutlined","Breadcrumb","Tooltip","Title","Card","Tabs","MainContent: React.FC<{\n searchEnabled: boolean\n handleResetSearch: () => void\n handleVisitLandingPage?: () => void\n}>","useStore","token","Flex","NoDataIcon","Title","Text","Button","MouseSquareIcon","Grid","Typography","useBreakpoint","token","Tooltip","Title","RightOutlined","Button","EditOutlined","EyeOutlined","Grid","useBreakpoint","token","Title","Button","UpCircleOutlined","Input","AddParameterDrawer: FC<AddParameterDrawerProps>","Form","message","token","payload: ParameterFormValues","Drawer","Button","PlusOutlined","Input","Select","Switch","TrashIcon","Modal","Grid","token","EndpointsSection: FC<EndpointsSectionProps>","theme","useBreakpoint","Tag","Tooltip","Title","Button","UpCircleOutlined","Table","Select","Input","SearchOutlined","PlusOutlined","Empty","TrashIcon","EditOutlined","Pagination","DownOutlined","CheckCircleOutlined","InfoCircle","Modal","token","Alert","ExclamationCircleFilled","Grid","TagsSection: FC<TagsSectionProps>","token","Title","Button","PlusOutlined","UpCircleOutlined","Tooltip","TrashIcon","EditOutlined","AddTagDrawer: FC<AddTagDrawerProps>","Form","message","token","payload: TagFormValues","Drawer","Button","PlusOutlined","Input","Tooltip","Modal","groupedPathsByTags: Record<string, EndpointData[]>","currentVersion: string","authType: string","curl: string","resolvedContent: RequestBody['content']","SyntaxHighlighter","json","antdTheme","token","hljs","useStore","curlCommand: string","curlLines: string[]","antdTheme","token","tokens","Typography","Tooltip","Button","CopyOutlined","Select","Codebox","message","useStore","Grid","useBreakpoint","token","pathMethodToId: Record<string, string>","result: Record<string, ParameterFormValues[]>","openApiParams: Parameter[]","newTag: TagMeta","filtered: typeof tags","cloned: OpenAPIFile","idToPathMethod: Record<string, { path: string; method: string }>","EditOutlined","EyeOutlined","CodeboxSidebar","Modal","Button"],"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/info-circle.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/view/helper/mutate.ts","../src/assets/copy.tsx","../src/view/components/EndpointPage/Codebox/Codebox.tsx","../src/view/components/CodeboxSidebar.tsx","../src/view/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 // Used in styles for full specificity:\n // → .css-dev-only-do-not-override-xxx.ComponentName-className\n const scope = (className: string) => `.${hashId}.${componentName}-${className}`\n\n // Used in JSX: className=\"ComponentName-className css-dev-only-do-not-override-xxx\"\n const cx = (...classes: string[]) =>\n classes.map((cls) => `${componentName}-${cls} ${hashId}`).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","{\n \"token\": {\n \"brnadColor.1\": \"#f1f5fd\",\n \"brnadColor.2\": \"#e0e9f9\",\n \"brnadColor.3\": \"#c8d8f5\",\n \"brnadColor.4\": \"#a2bfee\",\n \"brnadColor.5\": \"#769de4\",\n \"brnadColor.6\": \"#4d75d9\",\n \"brnadColor.7\": \"#4261ce\",\n \"brnadColor.8\": \"#384fbd\",\n \"brnadColor.9\": \"#33419a\",\n \"brnadColor.10\": \"#20264b\",\n \"cyan.1\": \"#e6fffb\",\n \"cyan.2\": \"#b5f5ec\",\n \"cyan.3\": \"#87e8de\",\n \"cyan.4\": \"#5cdbd3\",\n \"cyan.5\": \"#36cfc9\",\n \"cyan.6\": \"#13c2c2\",\n \"cyan.7\": \"#08979c\",\n \"cyan.8\": \"#006d75\",\n \"cyan.9\": \"#00474f\",\n \"cyan.10\": \"#002329\",\n \"geekblue.1\": \"#f0f5ff\",\n \"geekblue.2\": \"#d6e4ff\",\n \"geekblue.3\": \"#adc6ff\",\n \"geekblue.4\": \"#85a5ff\",\n \"geekblue.5\": \"#597ef7\",\n \"geekblue.6\": \"#2f54eb\",\n \"geekblue.7\": \"#1d39c4\",\n \"geekblue.8\": \"#10239e\",\n \"geekblue.9\": \"#061178\",\n \"geekblue.10\": \"#030852\",\n \"gold.1\": \"#fffbe6\",\n \"gold.2\": \"#fff1b8\",\n \"gold.3\": \"#ffe58f\",\n \"gold.4\": \"#ffd666\",\n \"gold.5\": \"#ffc53d\",\n \"gold.6\": \"#faad14\",\n \"gold.7\": \"#d48806\",\n \"gold.8\": \"#ad6800\",\n \"gold.9\": \"#874d00\",\n \"gold.10\": \"#613400\",\n \"green.1\": \"#f6ffed\",\n \"green.2\": \"#d9f7be\",\n \"green.3\": \"#b7eb8f\",\n \"green.4\": \"#95de64\",\n \"green.5\": \"#73d13d\",\n \"green.6\": \"#52c41a\",\n \"green.7\": \"#389e0d\",\n \"green.8\": \"#237804\",\n \"green.9\": \"#135200\",\n \"green.10\": \"#092b00\",\n \"lime.1\": \"#fcffe6\",\n \"lime.2\": \"#f4ffb8\",\n \"lime.3\": \"#eaff8f\",\n \"lime.4\": \"#d3f261\",\n \"lime.5\": \"#bae637\",\n \"lime.6\": \"#a0d911\",\n \"lime.7\": \"#7cb305\",\n \"lime.8\": \"#5b8c00\",\n \"lime.9\": \"#3f6600\",\n \"lime.10\": \"#254000\",\n \"magenta.1\": \"#fff0f6\",\n \"magenta.2\": \"#ffd6e7\",\n \"magenta.3\": \"#ffadd2\",\n \"magenta.4\": \"#ff85c0\",\n \"magenta.5\": \"#f759ab\",\n \"magenta.6\": \"#eb2f96\",\n \"magenta.7\": \"#c41d7f\",\n \"magenta.8\": \"#9e1068\",\n \"magenta.9\": \"#780650\",\n \"magenta.10\": \"#520339\",\n \"orange.1\": \"#fff7e6\",\n \"orange.2\": \"#ffe7ba\",\n \"orange.3\": \"#ffd591\",\n \"orange.4\": \"#ffc069\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextSecondary\": \"rgba(0, 0, 0, 0.65)\",\n \"orange.5\": \"#ffa940\",\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"orange.6\": \"#fa8c16\",\n \"orange.7\": \"#d46b08\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextLabel\": \"rgba(0, 0, 0, 0.65)\",\n \"orange.8\": \"#ad4e00\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"orange.9\": \"#873800\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"orange.10\": \"#612500\",\n \"purple.1\": \"#f9f0ff\",\n \"purple.2\": \"#efdbff\",\n \"purple.3\": \"#d3adf7\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"purple.4\": \"#b37feb\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorBgContainer\": \"#ffffff\",\n \"purple.5\": \"#9254de\",\n \"colorBgElevated\": \"#ffffff\",\n \"purple.6\": \"#722ed1\",\n \"colorBgLayout\": \"#f5f5f5\",\n \"purple.7\": \"#531dab\",\n \"colorBgMask\": \"rgba(0, 0, 0, 0.45)\",\n \"purple.8\": \"#391085\",\n \"colorBgSpotlight\": \"rgba(0, 0, 0, 0.85)\",\n \"purple.9\": \"#22075e\",\n \"colorBorder\": \"#d9d9d9\",\n \"purple.10\": \"#120338\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"red.1\": \"#fff1f0\",\n \"colorFill\": \"rgba(0, 0, 0, 0.15)\",\n \"red.2\": \"#ffccc7\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorFillQuaternary\": \"rgba(0, 0, 0, 0.02)\",\n \"red.3\": \"#ffa39e\",\n \"red.4\": \"#ff7875\",\n \"colorWhite\": \"#ffffff\",\n \"red.5\": \"#ff4d4f\",\n \"colorBgBase\": \"#ffffff\",\n \"red.6\": \"#f5222d\",\n \"colorTextBase\": \"#000000\",\n \"red.7\": \"#cf1322\",\n \"red.8\": \"#a8071a\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"red.9\": \"#820014\",\n \"colorBgTextActive\": \"rgba(0, 0, 0, 0.15)\",\n \"red.10\": \"#5c0011\",\n \"colorBgTextHover\": \"rgba(0, 0, 0, 0.06)\",\n \"volcano.1\": \"#fff2e8\",\n \"colorBorderBg\": \"#ffffff\",\n \"volcano.2\": \"#ffd8bf\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"volcano.3\": \"#ffbb96\",\n \"colorFillContentHover\": \"rgba(0, 0, 0, 0.15)\",\n \"volcano.4\": \"#ff9c6e\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"volcano.5\": \"#ff7a45\",\n \"volcano.6\": \"#fa541c\",\n \"volcano.7\": \"#d4380d\",\n \"transparent\": \"rgba(0, 0, 0, 0)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"yellow.1\": \"#feffe6\",\n \"volcano.8\": \"#ad2102\",\n \"yellow.2\": \"#ffffb8\",\n \"yellow.3\": \"#fffb8f\",\n \"volcano.9\": \"#871400\",\n \"yellow.4\": \"#fff566\",\n \"volcano.10\": \"#610b00\",\n \"yellow.5\": \"#ffec3d\",\n \"yellow.6\": \"#fadb14\",\n \"yellow.7\": \"#d4b106\",\n \"yellow.8\": \"#ad8b00\",\n \"yellow.9\": \"#876800\",\n \"yellow.10\": \"#614700\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorSuccess\": \"#52c41a\",\n \"colorWarning\": \"#faad14\",\n \"colorInfo\": \"#4d75d9\",\n \"colorError\": \"#ff4d4f\",\n \"colorLink\": \"#4d75d9\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorErrorBgHover\": \"#fff1f0\",\n \"colorErrorBorder\": \"#ffccc7\",\n \"colorErrorBorderHover\": \"#ffa39e\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorErrorActive\": \"#d9363e\",\n \"colorErrorTextHover\": \"#ff7875\",\n \"colorErrorText\": \"#ff4d4f\",\n \"colorErrorTextActive\": \"#d9363e\",\n \"colorLinkHover\": \"#769de4\",\n \"colorInfoBg\": \"#f1f5fd\",\n \"colorInfoBgHover\": \"#e0e9f9\",\n \"colorInfoBorder\": \"#c8d8f5\",\n \"colorInfoBorderHover\": \"#a2bfee\",\n \"colorInfoHover\": \"#769de4\",\n \"colorInfoActive\": \"#4261ce\",\n \"colorInfoTextHover\": \"#769de4\",\n \"colorInfoText\": \"#4d75d9\",\n \"colorInfoTextActive\": \"#4261ce\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorPrimaryBg\": \"#f1f5fd\",\n \"colorPrimaryBgHover\": \"#e0e9f9\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimaryBorderHover\": \"#a2bfee\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryActive\": \"#4261ce\",\n \"colorPrimaryTextHover\": \"#769de4\",\n \"colorPrimaryText\": \"#4d75d9\",\n \"colorPrimaryTextActive\": \"#4261ce\",\n \"colorSuccessBg\": \"#f6ffed\",\n \"colorSuccessBgHover\": \"#d9f7be\",\n \"colorSuccessBorder\": \"#b7eb8f\",\n \"colorSuccessBorderHover\": \"#95de64\",\n \"colorSuccessHover\": \"#95de64\",\n \"colorSuccessActive\": \"#389e0d\",\n \"colorSuccessTextHover\": \"#73d13d\",\n \"colorSuccessText\": \"#52c41a\",\n \"colorSuccessTextActive\": \"#389e0d\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarningBgHover\": \"#fff1b8\",\n \"colorWarningBorder\": \"#ffe58f\",\n \"colorWarningBorderHover\": \"#ffd666\",\n \"colorWarningHover\": \"#ffd666\",\n \"colorWarningActive\": \"#d48806\",\n \"colorWarningTextHover\": \"#ffc53d\",\n \"colorWarningText\": \"#faad14\",\n \"colorWarningTextActive\": \"#d48806\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlItemBgActiveDisabled\": \"rgba(0, 0, 0, 0.15)\",\n \"controlItemBgActiveHover\": \"#e0e9f9\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlTmpOutline\": \"rgba(0, 0, 0, 0.02)\",\n \"borderRadius\": 6,\n \"borderRadiusLG\": 8,\n \"borderRadiusSM\": 4,\n \"borderRadiusXS\": 2,\n \"sizeStep\": 4,\n \"sizeUnit\": 4,\n \"controlInteractiveSize\": 16,\n \"size\": 16,\n \"sizeLG\": 24,\n \"sizeMD\": 20,\n \"sizeMS\": 16,\n \"sizeSM\": 12,\n \"sizeXL\": 32,\n \"sizeXS\": 8,\n \"sizeXXL\": 48,\n \"controlHeight\": 32,\n \"sizeXXS\": 4,\n \"controlHeightLG\": 40,\n \"controlHeightSM\": 24,\n \"controlHeightXS\": 16,\n \"lineWidth\": 1,\n \"lineWidthBold\": 2,\n \"lineWidthFocus\": 4,\n \"controlOutlineWidth\": 2,\n \"screenLG\": 992,\n \"screenLGMax\": 1199,\n \"screenLGMin\": 992,\n \"screenMD\": 768,\n \"screenMDMax\": 991,\n \"screenMDMin\": 768,\n \"screenSM\": 576,\n \"screenSMMax\": 767,\n \"screenSMMin\": 576,\n \"screenXL\": 1200,\n \"screenXLMax\": 1599,\n \"screenXLMin\": 1200,\n \"screenXS\": 480,\n \"screenXSMax\": 575,\n \"screenXSMin\": 480,\n \"screenXXL\": 1600,\n \"screenXXLMin\": 1600,\n \"sizePopupArrow\": 16,\n \"margin\": 16,\n \"marginLG\": 24,\n \"marginMD\": 20,\n \"marginSM\": 12,\n \"marginXL\": 32,\n \"marginXS\": 8,\n \"marginXXL\": 48,\n \"marginXXS\": 4,\n \"padding\": 16,\n \"paddingLG\": 24,\n \"paddingMD\": 20,\n \"paddingSM\": 12,\n \"paddingXL\": 32,\n \"paddingXS\": 8,\n \"paddingXXS\": 4,\n \"paddingContentHorizontal\": 16,\n \"paddingContentHorizontalLG\": 24,\n \"paddingContentHorizontalSM\": 16,\n \"paddingContentVertical\": 12,\n \"paddingContentVerticalLG\": 16,\n \"paddingContentVerticalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlPaddingHorizontalSM\": 8,\n \"fontFamily\": \"SF Pro\",\n \"fontFamilyCode\": \"Courier Prime\",\n \"fontSize\": 14,\n \"fontSizeLG\": 16,\n \"fontSizeSM\": 12,\n \"fontSizeXL\": 20,\n \"fontSizeHeading1\": 38,\n \"fontSizeHeading2\": 30,\n \"fontSizeHeading3\": 24,\n \"fontSizeHeading4\": 20,\n \"fontSizeHeading5\": 16,\n \"lineHeight\": 1.5714285714285714,\n \"lineHeightHeading1\": 1.2105263157894737,\n \"lineHeightHeading2\": 1.2666666666666666,\n \"lineHeightHeading3\": 1.3333333333333333,\n \"lineHeightHeading4\": 1.4,\n \"lineHeightHeading5\": 1.5,\n \"lineHeightLG\": 1.5,\n \"lineHeightSM\": 1.6666666666666667,\n \"fontSizeIcon\": 12,\n \"fontWeightStrong\": 600,\n \"colorFillAlterSolid\": \"#fafafa\",\n \"fontWeightNormal\": 400,\n \"colorFilledHandleBg\": \"#f0f0f0\",\n \"colorBgSolid\": \"#000000\",\n \"colorBgSolidActive\": \"rgba(0, 0, 0, 0.95)\",\n \"colorBgSolidHover\": \"rgba(0, 0, 0, 0.75)\",\n \"solidTextColor\": \"#ffffff\",\n \"pink.1\": \"#fff0f6\",\n \"pink.2\": \"#ffd6e7\",\n \"pink.3\": \"#ffadd2\",\n \"pink.4\": \"#ff85c0\",\n \"pink.5\": \"#f759ab\",\n \"pink.6\": \"#eb2f96\",\n \"pink.7\": \"#c41d7f\",\n \"pink.8\": \"#9e1068\",\n \"pink.9\": \"#780650\",\n \"pink.10\": \"#520339\",\n \"sizeXXXL\": 60,\n \"sizeXXXXL\": 72,\n \"paddingXXL\": 48,\n \"paddingXXXL\": 60,\n \"paddingXXXXL\": 72,\n \"marginXXXL\": 60,\n \"marginXXXXL\": 72\n },\n \"components\": {\n \"Input\": {\n \"paddingInlineSM\": 7,\n \"paddingInlineLG\": 11,\n \"paddingInline\": 11,\n \"paddingBlockSM\": 0,\n \"paddingBlockLG\": 7,\n \"paddingBlock\": 4,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorWarningBorderHover\": \"#ffd666\",\n \"colorWarning\": \"#faad14\",\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorErrorBorderHover\": \"#ffa39e\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"hoverBorderColor\": \"#769de4\",\n \"addonBg\": \"rgba(0, 0, 0, 0.02)\",\n \"activeBorderColor\": \"#4d75d9\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorErrorBgHover\": \"#fff1f0\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarningBgHover\": \"#fff1b8\",\n \"colorWarningText\": \"#faad14\",\n \"colorErrorText\": \"#ff4d4f\",\n \"activeBg\": \"#ffffff\",\n \"hoverBg\": \"#ffffff\",\n \"inputFontSize\": 14,\n \"inputFontSizeLG\": 16,\n \"inputFontSizeSM\": 12,\n \"fontFamily\": \"SF Pro\"\n },\n \"Transfer\": {\n \"listWidthLG\": 250,\n \"listWidth\": 180,\n \"listHeight\": 200,\n \"itemPaddingBlock\": 5,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActiveHover\": \"#e0e9f9\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusLG\": 8,\n \"colorWarning\": \"#faad14\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorLinkHover\": \"#769de4\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"itemHeight\": 32,\n \"headerHeight\": 40,\n \"fontFamily\": \"SF Pro\"\n },\n \"Segmented\": {\n \"segmentedBgColorSelected\": \"#ffffff\",\n \"paddingXXS\": 4,\n \"marginSM\": 12,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorTextLabel\": \"rgba(0, 0, 0, 0.65)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFill\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBgLayout\": \"#f5f5f5\",\n \"colorBgElevated\": \"#ffffff\",\n \"segmentedGroupBg\": \"rgba(0, 0, 0, 0.04)\",\n \"itemSelectedColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemSelectedBg\": \"#ffffff\",\n \"itemHoverColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"itemColor\": \"rgba(0, 0, 0, 0.65)\",\n \"itemActiveBg\": \"rgba(0, 0, 0, 0.15)\",\n \"trackPadding\": 2,\n \"trackBg\": \"#f5f5f5\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Switch\": {\n \"trackPadding\": 2,\n \"trackMinWidthSM\": 28,\n \"trackMinWidth\": 44,\n \"trackHeightSM\": 16,\n \"trackHeight\": 22,\n \"handleSizeSM\": 12,\n \"handleSize\": 18,\n \"marginXXS\": 4,\n \"lineWidthFocus\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlHeight\": 32,\n \"colorWhite\": \"#ffffff\",\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"handleBg\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"TimePicker\": {\n \"timeColumnWidth\": 56,\n \"timeColumnHeight\": 224,\n \"timeCellHeight\": 28,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"sizePopupArrow\": 16,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorWarning\": \"#faad14\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"hoverBorderColor\": \"#769de4\",\n \"cellHoverBg\": \"rgba(0, 0, 0, 0.04)\",\n \"cellHeight\": 24,\n \"activeBorderColor\": \"#4d75d9\",\n \"paddingInline\": 11,\n \"paddingInlineLG\": 11,\n \"paddingInlineSM\": 7,\n \"activeBg\": \"#ffffff\",\n \"hoverBg\": \"#ffffff\",\n \"cellBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"cellActiveWithRangeBg\": \"#f1f5fd\",\n \"cellHoverWithRangeBg\": \"#c8dfff\",\n \"cellRangeBorderColor\": \"#7cb3ff\",\n \"multipleItemBg\": \"rgba(0, 0, 0, 0.06)\",\n \"multipleItemBorderColor\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemBorderColorDisabled\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"multipleSelectorBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"cellWidth\": 36,\n \"multipleItemHeight\": 24,\n \"multipleItemHeightLG\": 32,\n \"multipleItemHeightSM\": 16,\n \"paddingBlock\": 4,\n \"paddingBlockLG\": 7,\n \"paddingBlockSM\": 0,\n \"presetsMaxWidth\": 200,\n \"presetsWidth\": 120,\n \"textHeight\": 40,\n \"withoutTimeCellHeight\": 66,\n \"inputFontSize\": 14,\n \"inputFontSizeLG\": 16,\n \"inputFontSizeSM\": 12,\n \"fontFamily\": \"SF Pro\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\"\n },\n \"Timeline\": {\n \"itemPaddingBottom\": 20,\n \"paddingXXS\": 4,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"margin\": 16,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorError\": \"#ff4d4f\",\n \"colorBgContainer\": \"#ffffff\",\n \"tailColor\": \"rgba(0, 0, 0, 0.06)\",\n \"dotBg\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Tabs\": {\n \"horizontalItemGutter\": 32,\n \"cardGutter\": 2,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"margin\": 16,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimaryActive\": \"#4261ce\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainer\": \"#ffffff\",\n \"itemSelectedColor\": \"#4d75d9\",\n \"itemHoverColor\": \"#769de4\",\n \"itemColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemActiveColor\": \"#4261ce\",\n \"inkBarColor\": \"#4d75d9\",\n \"cardHeight\": 40,\n \"cardBg\": \"rgba(0, 0, 0, 0.02)\",\n \"titleFontSize\": 14,\n \"titleFontSizeLG\": 16,\n \"titleFontSizeSM\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Table\": {\n \"stickyScrollBarBorderRadius\": 100,\n \"headerSplitColor\": \"#f0f0f0\",\n \"headerBg\": \"rgba(0, 0, 0, 0.02)\",\n \"footerBg\": \"rgba(0, 0, 0, 0.02)\",\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActiveHover\": \"#e0e9f9\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlInteractiveSize\": 16,\n \"controlHeight\": 32,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBgContainer\": \"#ffffff\",\n \"rowSelectedHoverBg\": \"#e0e9f9\",\n \"headerFilterHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"headerColor\": \"rgba(0, 0, 0, 0.88)\",\n \"headerBorderRadius\": 8,\n \"footerColor\": \"rgba(0, 0, 0, 0.88)\",\n \"filterDropdownMenuBg\": \"#ffffff\",\n \"filterDropdownBg\": \"#ffffff\",\n \"cellPaddingInlineSM\": 8,\n \"cellPaddingInlineMD\": 8,\n \"cellPaddingInline\": 16,\n \"cellPaddingBlockSM\": 8,\n \"cellPaddingBlockMD\": 12,\n \"cellPaddingBlock\": 16,\n \"borderColor\": \"#f0f0f0\",\n \"rowHoverBg\": \"#fafafa\",\n \"headerSortActiveBg\": \"rgba(0, 0, 0, 0.06)\",\n \"bodySortBg\": \"#fafafa\",\n \"headerSortHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"cellFontSize\": 14,\n \"cellFontSizeMD\": 14,\n \"cellFontSizeSM\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Steps\": {\n \"dotSize\": 8,\n \"dotCurrentSize\": 10,\n \"descriptionMaxWidth\": 140,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeightSM\": 1.6666666666666667,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSizeHeading3\": 24,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightLG\": 40,\n \"borderRadiusSM\": 4,\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextLabel\": \"rgba(0, 0, 0, 0.65)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBorderBg\": \"#ffffff\",\n \"colorBgContainer\": \"#ffffff\",\n \"titleLineHeight\": 32,\n \"iconSizeSM\": 24,\n \"iconSize\": 32,\n \"finishIconBorderColor\": \"#1677ff\",\n \"customIconFontSize\": 24,\n \"iconFontSize\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Spin\": {\n \"dotSizeSM\": 14,\n \"dotSize\": 20,\n \"contentHeight\": 400,\n \"marginXXS\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBgContainer\": \"#ffffff\",\n \"dotSizeLG\": 32,\n \"fontFamily\": \"SF Pro\"\n },\n \"Slider\": {\n \"railSize\": 4,\n \"handleSizeHover\": 12,\n \"dotSize\": 8,\n \"controlSize\": 10,\n \"handleSize\": 10,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryBorderHover\": \"#a2bfee\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillContentHover\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"trackHoverBg\": \"#a2bfee\",\n \"trackBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"trackBg\": \"#c8d8f5\",\n \"railHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"railBg\": \"rgba(0, 0, 0, 0.04)\",\n \"handleColor\": \"#c8d8f5\",\n \"handleActiveColor\": \"#4d75d9\",\n \"dotBorderColor\": \"#f0f0f0\",\n \"dotActiveBorderColor\": \"#c8d8f5\",\n \"handleColorDisabled\": \"#bfbfbf\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Rate\": {\n \"rateStarSize\": 20,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Radio\": {\n \"radioSize\": 16,\n \"dotSize\": 8,\n \"buttonPaddingInline\": 15,\n \"paddingXS\": 8,\n \"padding\": 16,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgActiveDisabled\": \"rgba(0, 0, 0, 0.15)\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWhite\": \"#ffffff\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimaryActive\": \"#4261ce\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"wrapperMarginInlineEnd\": 8,\n \"dotColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"buttonSolidCheckedHoverBg\": \"#769de4\",\n \"buttonSolidCheckedColor\": \"#ffffff\",\n \"buttonSolidCheckedBg\": \"#4d75d9\",\n \"buttonSolidCheckedActiveBg\": \"#4261ce\",\n \"buttonColor\": \"rgba(0, 0, 0, 0.88)\",\n \"buttonCheckedColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"buttonCheckedBgDisabled\": \"rgba(0, 0, 0, 0.15)\",\n \"buttonCheckedBg\": \"#ffffff\",\n \"buttonBg\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\",\n \"radioBgColor\": \"#4d75d9\",\n \"radioColor\": \"#ffffff\"\n },\n \"Popover\": {\n \"titleMinWidth\": 177,\n \"sizePopupArrow\": 16,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSize\": 14,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusLG\": 8,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorBgElevated\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Notification\": {\n \"width\": 384,\n \"paddingMD\": 20,\n \"paddingLG\": 24,\n \"paddingContentHorizontalLG\": 24,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorInfo\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorError\": \"#ff4d4f\",\n \"colorBgElevated\": \"#ffffff\",\n \"lineHeightLG\": 1.5,\n \"lineWidthFocus\": 4,\n \"fontFamily\": \"SF Pro\"\n },\n \"Tooltip\": {\n \"paddingSM\": 12,\n \"sizePopupArrow\": 16,\n \"paddingXS\": 8,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadius\": 6,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorBgSpotlight\": \"rgba(0, 0, 0, 0.85)\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Menu\": {\n \"subMenuItemBg\": \"rgba(0, 0, 0, 0.02)\",\n \"darkSubMenuItemBg\": \"#000c17\",\n \"darkItemDisabledColor\": \"rgba(255, 255, 255, 0.25)\",\n \"darkItemColor\": \"rgba(255, 255, 255, 0.65)\",\n \"darkGroupTitleColor\": \"rgba(255, 255, 255, 0.65)\",\n \"darkItemBg\": \"#001529\",\n \"paddingXS\": 8,\n \"paddingXL\": 32,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"margin\": 16,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"borderRadius\": 6,\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorError\": \"#ff4d4f\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainer\": \"#ffffff\",\n \"subMenuItemBorderRadius\": 4,\n \"popupBg\": \"#ffffff\",\n \"itemSelectedColor\": \"#4d75d9\",\n \"itemSelectedBg\": \"#f1f5fd\",\n \"itemHoverColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"itemHeight\": 40,\n \"itemDisabledColor\": \"rgba(0, 0, 0, 0.25)\",\n \"itemColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemBorderRadius\": 8,\n \"itemBg\": \"#ffffff\",\n \"iconSize\": 14,\n \"horizontalItemSelectedColor\": \"#4d75d9\",\n \"horizontalItemSelectedBg\": \"rgba(0, 0, 0, 0)\",\n \"horizontalItemHoverColor\": \"#4d75d9\",\n \"horizontalItemHoverBg\": \"rgba(0, 0, 0, 0)\",\n \"groupTitleColor\": \"rgba(0, 0, 0, 0.45)\",\n \"darkItemSelectedColor\": \"#ffffff\",\n \"darkItemSelectedBg\": \"#4d75d9\",\n \"darkItemHoverColor\": \"#ffffff\",\n \"darkItemHoverBg\": \"rgba(0, 0, 0, 0)\",\n \"collapsedIconSize\": 16,\n \"darkPopupBg\": \"#001529\",\n \"activeBarBorderWidth\": 1,\n \"collapsedWidth\": 80,\n \"dropdownWidth\": 160,\n \"itemMarginBlock\": 4,\n \"itemMarginInline\": 4,\n \"iconMarginInlineEnd\": 10,\n \"groupTitleFontSize\": 14,\n \"groupTitleLineHeight\": 1.5714285714285714,\n \"fontFamily\": \"SF Pro\",\n \"subMenuItemSelectedColor\": \"#4d75d9\"\n },\n \"InputNumber\": {\n \"paddingInlineSM\": 7,\n \"paddingInlineLG\": 11,\n \"paddingInline\": 11,\n \"paddingBlockSM\": 0,\n \"paddingBlockLG\": 7,\n \"paddingBlock\": 4,\n \"handleWidth\": 22,\n \"controlWidth\": 90,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningBorderHover\": \"#ffd666\",\n \"colorWarning\": \"#faad14\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorBorderHover\": \"#ffa39e\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"hoverBorderColor\": \"#769de4\",\n \"handleHoverColor\": \"#4d75d9\",\n \"handleBorderColor\": \"#d9d9d9\",\n \"handleBg\": \"#ffffff\",\n \"handleActiveBg\": \"rgba(0, 0, 0, 0.02)\",\n \"addonBg\": \"rgba(0, 0, 0, 0.02)\",\n \"activeBorderColor\": \"#4d75d9\",\n \"activeBg\": \"#ffffff\",\n \"hoverBg\": \"#ffffff\",\n \"inputFontSize\": 14,\n \"inputFontSizeLG\": 16,\n \"inputFontSizeSM\": 12,\n \"fontFamily\": \"SF Pro\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarningBgHover\": \"#fff1b8\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorErrorBgHover\": \"#fff1f0\",\n \"filledHandleBg\": \"#f0f0f0\",\n \"colorErrorText\": \"#ff4d4f\",\n \"colorWarningText\": \"#faad14\"\n },\n \"Image\": {\n \"previewOperationSize\": 18,\n \"previewOperationHoverColor\": \"rgba(255, 255, 255, 0.85)\",\n \"previewOperationColorDisabled\": \"rgba(255, 255, 255, 0.25)\",\n \"previewOperationColor\": \"rgba(255, 255, 255, 0.65)\",\n \"paddingXXS\": 4,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"marginXXS\": 4,\n \"marginXL\": 32,\n \"marginSM\": 12,\n \"margin\": 16,\n \"fontSizeIcon\": 12,\n \"controlHeightLG\": 40,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorBgMask\": \"rgba(0, 0, 0, 0.45)\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\"\n },\n \"Card\": {\n \"headerHeightSM\": 38,\n \"headerHeight\": 56,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSize\": 14,\n \"borderRadiusLG\": 8,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBgContainer\": \"#ffffff\",\n \"headerBg\": \"rgba(0, 0, 0, 0)\",\n \"headerFontSize\": 16,\n \"headerFontSizeSM\": 14,\n \"fontHeight\": 22,\n \"fontSizeLG\": 16,\n \"fontFamily\": \"SF Pro\",\n \"bodyPaddingSM\": 12,\n \"headerPaddingSM\": 12,\n \"bodyPadding\": 24,\n \"headerPadding\": 24\n },\n \"Carousel\": {\n \"dotWidth\": 16,\n \"dotHeight\": 3,\n \"dotActiveWidth\": 24,\n \"marginXXS\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorBgContainer\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Cascader\": {\n \"dropdownHeight\": 180,\n \"controlWidth\": 184,\n \"controlItemWidth\": 111,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlInteractiveSize\": 16,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"colorWhite\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"optionSelectedBg\": \"#f1f5fd\",\n \"menuPadding\": 4,\n \"optionSelectedFontWeight\": 600,\n \"fontFamily\": \"SF Pro\",\n \"borderRadiusLG\": 8,\n \"optionSelectedColor\": \"rgba(0, 0, 0, 0.88)\"\n },\n \"Calendar\": {\n \"yearControlWidth\": 80,\n \"monthControlWidth\": 70,\n \"controlHeight\": 32,\n \"screenXS\": 480,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeightSM\": 1.6666666666666667,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"itemActiveBg\": \"#f1f5fd\",\n \"fullPanelBg\": \"#ffffff\",\n \"fullBg\": \"#ffffff\",\n \"fontHeightSM\": 20,\n \"fontFamily\": \"SF Pro\"\n },\n \"Button\": {\n \"paddingInlineSM\": 7,\n \"paddingInlineLG\": 15,\n \"paddingInline\": 15,\n \"onlyIconSizeSM\": 14,\n \"onlyIconSizeLG\": 18,\n \"paddingXS\": 8,\n \"paddingContentHorizontal\": 16,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidth\": 1,\n \"contentLineHeight\": 1.5714285714285714,\n \"contentFontSizeLG\": 16,\n \"contentFontSize\": 14,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimaryActive\": \"#4261ce\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorErrorBorderHover\": \"#ffa39e\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorErrorActive\": \"#d9363e\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgTextActive\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"textHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"primaryColor\": \"#ffffff\",\n \"onlyIconSize\": 16,\n \"linkHoverBg\": \"rgba(0, 0, 0, 0)\",\n \"groupBorderColor\": \"#769de4\",\n \"ghostBg\": \"rgba(0, 0, 0, 0)\",\n \"defaultGhostColor\": \"#ffffff\",\n \"defaultGhostBorderColor\": \"#ffffff\",\n \"defaultColor\": \"rgba(0, 0, 0, 0.88)\",\n \"defaultBorderColor\": \"#d9d9d9\",\n \"defaultBg\": \"#ffffff\",\n \"dangerColor\": \"#ffffff\",\n \"borderColorDisabled\": \"#d9d9d9\",\n \"defaultHoverBg\": \"#ffffff\",\n \"defaultHoverColor\": \"#769de4\",\n \"defaultHoverBorderColor\": \"#769de4\",\n \"defaultActiveBg\": \"#ffffff\",\n \"defaultActiveColor\": \"#4261ce\",\n \"defaultActiveBorderColor\": \"#4261ce\",\n \"fontWeight\": 400,\n \"contentFontSizeSM\": 14,\n \"contentLineHeightLG\": 1.5,\n \"contentLineHeightSM\": 1.5714285714285714,\n \"textTextActiveColor\": \"rgba(0, 0, 0, 0.88)\",\n \"textTextHoverColor\": \"rgba(0, 0, 0, 0.88)\",\n \"textTextColor\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryBg\": \"#f1f5fd\",\n \"colorBgSolid\": \"#000000\",\n \"colorBgSolidActive\": \"rgba(0, 0, 0, 0.95)\",\n \"colorBgSolidHover\": \"rgba(0, 0, 0, 0.75)\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"solidTextColor\": \"#ffffff\"\n },\n \"Badge\": {\n \"statusSize\": 6,\n \"indicatorHeight\": 20,\n \"dotSize\": 6,\n \"paddingXS\": 8,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"borderRadiusSM\": 4,\n \"fontSizeSM\": 12,\n \"fontSize\": 14,\n \"colorWarning\": \"#faad14\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorderBg\": \"#ffffff\",\n \"colorBgContainer\": \"#ffffff\",\n \"indicatorHeightSM\": 14,\n \"textFontSize\": 12,\n \"textFontSizeSM\": 12,\n \"fontHeight\": 22,\n \"lineHeight\": 1.5714285714285714,\n \"fontFamily\": \"SF Pro\"\n },\n \"Form\": {\n \"screenXSMax\": 575,\n \"screenSMMax\": 767,\n \"screenMDMax\": 991,\n \"screenLGMax\": 1199,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"labelRequiredMarkColor\": \"#ff4d4f\",\n \"labelColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemMarginBottom\": 24,\n \"labelColonMarginInlineEnd\": 8,\n \"labelColonMarginInlineStart\": 2,\n \"labelHeight\": 32,\n \"labelFontSize\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Avatar\": {\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeXL\": 20,\n \"fontSizeLG\": 16,\n \"fontSizeHeading3\": 24,\n \"fontSize\": 14,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorBorderBg\": \"#ffffff\",\n \"containerSizeSM\": 24,\n \"containerSizeLG\": 40,\n \"containerSize\": 32,\n \"textFontSize\": 18,\n \"textFontSizeLG\": 24,\n \"textFontSizeSM\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Tour\": {\n \"sizePopupArrow\": 16,\n \"paddingXS\": 8,\n \"padding\": 16,\n \"marginXS\": 8,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSize\": 14,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWhite\": \"#ffffff\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFill\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBgTextHover\": \"rgba(0, 0, 0, 0.06)\",\n \"colorBgElevated\": \"#ffffff\",\n \"closeBtnSize\": 22,\n \"primaryNextBtnHoverBg\": \"#f0f0f0\",\n \"primaryPrevBtnBg\": \"rgba(255, 255, 255, 0.15)\",\n \"fontFamily\": \"SF Pro\",\n \"lineWidthFocus\": 4\n },\n \"QRCode\": {\n \"paddingSM\": 12,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"controlHeight\": 32,\n \"borderRadiusLG\": 8,\n \"colorWhite\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Upload\": {\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginXL\": 32,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSizeHeading3\": 24,\n \"fontSizeHeading2\": 30,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlHeightLG\": 40,\n \"borderRadiusLG\": 8,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgMask\": \"rgba(0, 0, 0, 0.45)\",\n \"fontHeight\": 22,\n \"fontHeightSM\": 20,\n \"lineWidthFocus\": 4,\n \"fontFamily\": \"SF Pro\"\n },\n \"Typography\": {\n \"paddingSM\": 12,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeightHeading5\": 1.5,\n \"lineHeightHeading4\": 1.4,\n \"lineHeightHeading3\": 1.3333333333333333,\n \"lineHeightHeading2\": 1.2666666666666666,\n \"lineHeightHeading1\": 1.2105263157894737,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeHeading5\": 16,\n \"fontSizeHeading4\": 20,\n \"fontSizeHeading3\": 24,\n \"fontSizeHeading2\": 30,\n \"fontSizeHeading1\": 38,\n \"fontSize\": 14,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorErrorActive\": \"#d9363e\",\n \"colorError\": \"#ff4d4f\",\n \"fontFamilyCode\": \"Courier Prime\"\n },\n \"TreeSelect\": {\n \"paddingXS\": 8,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlInteractiveSize\": 16,\n \"controlHeightSM\": 24,\n \"borderRadiusSM\": 4,\n \"borderRadius\": 6,\n \"colorWhite\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"titleHeight\": 24,\n \"nodeSelectedBg\": \"#f1f5fd\",\n \"nodeHoverBg\": \"rgba(0, 0, 0, 0.04)\",\n \"fontFamily\": \"SF Pro\",\n \"borderRadiusLG\": 8\n },\n \"Tree\": {\n \"paddingSM\": 12,\n \"borderRadiusLG\": 8,\n \"paddingXS\": 8,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlInteractiveSize\": 16,\n \"controlHeightSM\": 24,\n \"borderRadiusSM\": 4,\n \"borderRadius\": 6,\n \"colorWhite\": \"#ffffff\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"titleHeight\": 24,\n \"nodeSelectedBg\": \"#f1f5fd\",\n \"nodeHoverBg\": \"rgba(0, 0, 0, 0.04)\",\n \"directoryNodeSelectedColor\": \"#ffffff\",\n \"directoryNodeSelectedBg\": \"#4d75d9\",\n \"fontFamily\": \"SF Pro\",\n \"nodeHoverColor\": \"rgba(0, 0, 0, 0.88)\",\n \"nodeSelectedColor\": \"rgba(0, 0, 0, 0.88)\",\n \"indentSize\": 24\n },\n \"Tag\": {\n \"paddingXXS\": 4,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeightSM\": 1.6666666666666667,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"borderRadiusSM\": 4,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryActive\": \"#4261ce\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillQuaternary\": \"rgba(0, 0, 0, 0.02)\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorWarningBorder\": \"#ffe58f\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorSuccessBorder\": \"#b7eb8f\",\n \"colorSuccessBg\": \"#f6ffed\",\n \"colorInfoBorder\": \"#c8d8f5\",\n \"colorInfoBg\": \"#f1f5fd\",\n \"colorErrorBorder\": \"#ffccc7\",\n \"colorErrorBg\": \"#fff2f0\",\n \"defaultColor\": \"rgba(0, 0, 0, 0.88)\",\n \"defaultBg\": \"rgba(0, 0, 0, 0.02)\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Statistic\": {\n \"padding\": 16,\n \"marginXXS\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeHeading3\": 24,\n \"fontSize\": 14,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"contentFontSize\": 24,\n \"titleFontSize\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"Skeleton\": {\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginSM\": 12,\n \"marginLG\": 24,\n \"controlHeightXS\": 16,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFill\": \"rgba(0, 0, 0, 0.15)\"\n },\n \"Select\": {\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightXS\": 16,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorWarningHover\": \"#ffd666\",\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"singleItemHeightLG\": 40,\n \"selectorBg\": \"#ffffff\",\n \"optionSelectedColor\": \"rgba(0, 0, 0, 0.88)\",\n \"optionSelectedBg\": \"#f1f5fd\",\n \"optionLineHeight\": null,\n \"optionHeight\": 32,\n \"optionActiveBg\": \"rgba(0, 0, 0, 0.04)\",\n \"multipleSelectorBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"multipleItemHeightLG\": 32,\n \"multipleItemHeight\": 24,\n \"multipleItemColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"multipleItemBorderColorDisabled\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemBorderColor\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemBg\": \"rgba(0, 0, 0, 0.06)\",\n \"clearBg\": \"#ffffff\",\n \"optionFontSize\": \"SF Pro\",\n \"optionSelectedFontWeight\": 600,\n \"fontFamily\": \"SF Pro\",\n \"showArrowPaddingInlineEnd\": 18,\n \"activeBorderColor\": \"#4d75d9\",\n \"hoverBorderColor\": \"#769de4\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorErrorBgHover\": \"#fff1f0\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarningBgHover\": \"#fff1b8\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorWarning\": \"#faad14\",\n \"colorError\": \"#ff4d4f\"\n },\n \"Result\": {\n \"paddingXS\": 8,\n \"paddingXL\": 32,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginXS\": 8,\n \"lineHeightHeading3\": 1.3333333333333333,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeHeading3\": 24,\n \"fontSize\": 14,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorInfo\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorError\": \"#ff4d4f\",\n \"iconFontSize\": 72,\n \"subtitleFontSize\": 14,\n \"titleFontSize\": 24\n },\n \"Progress\": {\n \"paddingXS\": 8,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSize\": 14,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorError\": \"#ff4d4f\",\n \"colorBgContainer\": \"#ffffff\",\n \"remainingColor\": \"rgba(0, 0, 0, 0.06)\",\n \"defaultColor\": \"#4d75d9\",\n \"circleTextColor\": \"rgba(0, 0, 0, 0.88)\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Popconfirm\": {\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"fontWeightStrong\": 600,\n \"fontSize\": 14,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\"\n },\n \"Pagination\": {\n \"screenSM\": 576,\n \"screenLG\": 992,\n \"paddingXXS\": 4,\n \"paddingSM\": 12,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"margin\": 16,\n \"lineWidthFocus\": 4,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgActiveDisabled\": \"rgba(0, 0, 0, 0.15)\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgTextHover\": \"rgba(0, 0, 0, 0.06)\",\n \"colorBgTextActive\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"itemSizeSM\": 24,\n \"itemSize\": 32,\n \"itemLinkBg\": \"#ffffff\",\n \"itemInputBg\": \"#ffffff\",\n \"itemBg\": \"#ffffff\",\n \"itemActiveColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"itemActiveBgDisabled\": \"rgba(0, 0, 0, 0.15)\",\n \"itemActiveBg\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Modal\": {\n \"screenSMMax\": 767,\n \"paddingXS\": 8,\n \"paddingMD\": 20,\n \"paddingLG\": 24,\n \"paddingContentHorizontalLG\": 24,\n \"padding\": 16,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidthFocus\": 4,\n \"lineWidth\": 1,\n \"lineHeightHeading5\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeLG\": 16,\n \"fontSizeHeading5\": 16,\n \"fontSize\": 14,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorBgMask\": \"rgba(0, 0, 0, 0.45)\",\n \"titleColor\": \"rgba(0, 0, 0, 0.88)\",\n \"headerBg\": \"#ffffff\",\n \"footerBg\": \"rgba(0, 0, 0, 0)\",\n \"contentBg\": \"#ffffff\",\n \"titleFontSize\": 16,\n \"titleLineHeight\": 1.375,\n \"fontHeight\": 22,\n \"fontFamily\": \"SF Pro\"\n },\n \"Message\": {\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"marginXS\": 8,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"borderRadiusLG\": 8,\n \"colorWarning\": \"#faad14\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccess\": \"#52c41a\",\n \"colorInfo\": \"#4d75d9\",\n \"colorError\": \"#ff4d4f\",\n \"contentBg\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"List\": {\n \"screenSM\": 576,\n \"screenMD\": 768,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"paddingContentVerticalSM\": 8,\n \"paddingContentVerticalLG\": 16,\n \"paddingContentVertical\": 12,\n \"paddingContentHorizontalLG\": 24,\n \"paddingContentHorizontal\": 16,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXXL\": 48,\n \"marginSM\": 12,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusLG\": 8,\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"headerBg\": \"rgba(0, 0, 0, 0)\",\n \"footerBg\": \"rgba(0, 0, 0, 0)\",\n \"avatarMarginRight\": 16,\n \"descriptionFontSize\": 14,\n \"fontFamily\": \"SF Pro\"\n },\n \"FloatButton\": {\n \"paddingXXS\": 4,\n \"marginXXL\": 48,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlHeightLG\": 40,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillContent\": \"rgba(0, 0, 0, 0.06)\",\n \"colorBgElevated\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Empty\": {\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"fontSize\": 14,\n \"lineHeight\": 1.5714285714285714\n },\n \"Dropdown\": {\n \"sizePopupArrow\": 16,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeSM\": 12,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"controlPaddingHorizontal\": 12,\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActiveHover\": \"#e0e9f9\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorError\": \"#ff4d4f\",\n \"colorBgElevated\": \"#ffffff\",\n \"paddingBlock\": 5,\n \"fontFamily\": \"SF Pro\"\n },\n \"Drawer\": {\n \"paddingXS\": 8,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginSM\": 12,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"fontWeightStrong\": 600,\n \"fontSizeLG\": 16,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorBgMask\": \"rgba(0, 0, 0, 0.45)\",\n \"colorBgElevated\": \"#ffffff\",\n \"lineWidthFocus\": 4\n },\n \"Divider\": {\n \"marginXS\": 8,\n \"marginLG\": 24,\n \"margin\": 16,\n \"lineWidth\": 1,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"lineHeight\": 1.5714285714285714,\n \"fontFamily\": \"SF Pro\"\n },\n \"Descriptions\": {\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidth\": 1,\n \"lineHeightSM\": 1.6666666666666667,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeSM\": 12,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"borderRadiusLG\": 8,\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextSecondary\": \"rgba(0, 0, 0, 0.65)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"titleColor\": \"rgba(0, 0, 0, 0.88)\",\n \"labelBg\": \"rgba(0, 0, 0, 0.02)\",\n \"contentColor\": \"rgba(0, 0, 0, 0.88)\",\n \"fontFamily\": \"SF Pro\",\n \"labelColor\": \"rgba(0, 0, 0, 0.45)\"\n },\n \"DatePicker\": {\n \"sizePopupArrow\": 16,\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"padding\": 16,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeightLG\": 1.5,\n \"lineHeight\": 1.5714285714285714,\n \"fontWeightStrong\": 600,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorWarningHover\": \"#ffd666\",\n \"colorWarning\": \"#faad14\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextLightSolid\": \"#ffffff\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorLinkHover\": \"#769de4\",\n \"colorLinkActive\": \"#4261ce\",\n \"colorLink\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"hoverBorderColor\": \"#769de4\",\n \"cellHoverBg\": \"rgba(0, 0, 0, 0.04)\",\n \"cellHeight\": 24,\n \"activeBorderColor\": \"#4d75d9\",\n \"paddingInline\": 11,\n \"paddingInlineSM\": 7,\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarningText\": \"#faad14\",\n \"colorErrorText\": \"#ff4d4f\",\n \"colorWarningBgHover\": \"#fff1b8\",\n \"colorErrorBgHover\": \"#fff1f0\",\n \"activeBg\": \"#ffffff\",\n \"hoverBg\": \"#ffffff\",\n \"cellBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"cellActiveWithRangeBg\": \"#f1f5fd\",\n \"cellHoverWithRangeBg\": \"#c8dfff\",\n \"cellRangeBorderColor\": \"#7cb3ff\",\n \"multipleItemBg\": \"rgba(0, 0, 0, 0.06)\",\n \"multipleItemBorderColor\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemBorderColorDisabled\": \"rgba(0, 0, 0, 0)\",\n \"multipleItemColorDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"multipleSelectorBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"cellWidth\": 36,\n \"multipleItemHeight\": 24,\n \"multipleItemHeightLG\": 32,\n \"multipleItemHeightSM\": 16,\n \"paddingBlock\": 4,\n \"paddingBlockLG\": 7,\n \"paddingBlockSM\": 0,\n \"paddingInline 2\": 11,\n \"presetsMaxWidth\": 200,\n \"presetsWidth\": 120,\n \"textHeight\": 40,\n \"timeCellHeight\": 28,\n \"timeColumnHeight\": 224,\n \"timeColumnWidth\": 56,\n \"withoutTimeCellHeight\": 66,\n \"inputFontSize\": 14,\n \"inputFontSizeLG\": 16,\n \"inputFontSizeSM\": 12,\n \"fontHeight\": 22,\n \"fontHeightLG\": 24,\n \"fontFamily\": \"SF Pro\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\"\n },\n \"Collapse\": {\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"paddingLG\": 24,\n \"padding\": 16,\n \"marginSM\": 12,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"borderRadiusLG\": 8,\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorFillAlter\": \"rgba(0, 0, 0, 0.02)\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainer\": \"#ffffff\",\n \"headerBg\": \"rgba(0, 0, 0, 0.02)\",\n \"contentBg\": \"#ffffff\",\n \"fontHeight\": 22,\n \"fontHeightLG\": 24,\n \"lineHeightLG\": 1.5,\n \"fontFamily\": \"SF Pro\"\n },\n \"Checkbox\": {\n \"paddingXS\": 8,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineWidthBold\": 2,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"controlInteractiveSize\": 16,\n \"borderRadiusSM\": 4,\n \"colorWhite\": \"#ffffff\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"fontFamily\": \"SF Pro\"\n },\n \"Breadcrumb\": {\n \"paddingXXS\": 4,\n \"marginXXS\": 4,\n \"marginXS\": 8,\n \"lineWidthFocus\": 4,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeIcon\": 12,\n \"fontSize\": 14,\n \"borderRadiusSM\": 4,\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorBgTextHover\": \"rgba(0, 0, 0, 0.06)\",\n \"separatorColor\": \"rgba(0, 0, 0, 0.45)\",\n \"linkHoverColor\": \"rgba(0, 0, 0, 0.88)\",\n \"linkColor\": \"rgba(0, 0, 0, 0.45)\",\n \"lastItemColor\": \"rgba(0, 0, 0, 0.88)\",\n \"itemColor\": \"rgba(0, 0, 0, 0.45)\",\n \"separatorMargin\": 8,\n \"iconFontSize\": 14,\n \"fontHeight\": 22,\n \"fontFamily\": \"SF Pro\"\n },\n \"Anchor\": {\n \"paddingXXS\": 4,\n \"lineWidthBold\": 2,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSize\": 14,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSplit\": \"rgba(0, 0, 0, 0.06)\",\n \"colorPrimary\": \"#4d75d9\",\n \"linkPaddingInlineStart\": 16,\n \"linkPaddingBlock\": 4,\n \"fontFamily\": \"SF Pro\"\n },\n \"Alert\": {\n \"paddingMD\": 20,\n \"paddingContentVerticalSM\": 8,\n \"paddingContentHorizontalLG\": 24,\n \"marginXS\": 8,\n \"marginSM\": 12,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"fontSizeLG\": 16,\n \"fontSizeIcon\": 12,\n \"fontSizeHeading3\": 24,\n \"fontSize\": 14,\n \"borderRadiusLG\": 8,\n \"colorWarningBorder\": \"#ffe58f\",\n \"colorWarningBg\": \"#fffbe6\",\n \"colorWarning\": \"#faad14\",\n \"colorTextHeading\": \"rgba(0, 0, 0, 0.88)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorSuccessBorder\": \"#b7eb8f\",\n \"colorSuccessBg\": \"#f6ffed\",\n \"colorSuccess\": \"#52c41a\",\n \"colorInfoBorder\": \"#c8d8f5\",\n \"colorInfoBg\": \"#f1f5fd\",\n \"colorInfo\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorErrorBorder\": \"#ffccc7\",\n \"colorErrorBg\": \"#fff2f0\",\n \"colorError\": \"#ff4d4f\",\n \"withDescriptionIconSize\": 24,\n \"fontFamily\": \"SF Pro\"\n },\n \"Space\": {\n \"paddingXS\": 8,\n \"paddingLG\": 24,\n \"padding\": 16\n },\n \"AutoComplete\": {\n \"paddingXXS\": 4,\n \"paddingXS\": 8,\n \"paddingSM\": 12,\n \"lineWidth\": 1,\n \"lineHeight\": 1.5714285714285714,\n \"controlPaddingHorizontalSM\": 8,\n \"controlPaddingHorizontal\": 12,\n \"controlOutlineWidth\": 2,\n \"controlOutline\": \"rgba(5, 145, 255, 0.1)\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlHeightXS\": 16,\n \"controlHeightSM\": 24,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"borderRadiusXS\": 2,\n \"borderRadiusSM\": 4,\n \"borderRadiusLG\": 8,\n \"borderRadius\": 6,\n \"colorWarningOutline\": \"rgba(255, 215, 5, 0.1)\",\n \"colorWarningHover\": \"#ffd666\",\n \"colorWarning\": \"#faad14\",\n \"colorTextTertiary\": \"rgba(0, 0, 0, 0.45)\",\n \"colorTextQuaternary\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextPlaceholder\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorPrimaryHover\": \"#769de4\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorIconHover\": \"rgba(0, 0, 0, 0.88)\",\n \"colorIcon\": \"rgba(0, 0, 0, 0.45)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorErrorOutline\": \"rgba(255, 38, 6, 0.06)\",\n \"colorErrorHover\": \"#ff7875\",\n \"colorError\": \"#ff4d4f\",\n \"colorBorder\": \"#d9d9d9\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"optionActiveBg\": \"rgba(0, 0, 0, 0.04)\",\n \"optionHeight\": 32,\n \"optionFontSize\": 14,\n \"fontFamily\": \"SF Pro\",\n \"fontSize\": 14,\n \"fontSizeIcon\": 12,\n \"fontSizeLG\": 16,\n \"fontSizeSM\": 12\n },\n \"Layout\": {\n \"bodyBg\": \"#f5f5f5\",\n \"footerBg\": \"#f5f5f5\",\n \"headerBg\": \"#001529\",\n \"headerColor\": \"rgba(0, 0, 0, 0.88)\",\n \"lightSiderBg\": \"#ffffff\",\n \"lightTriggerBg\": \"#ffffff\",\n \"lightTriggerColor\": \"rgba(0, 0, 0, 0.88)\",\n \"siderBg\": \"#001529\",\n \"triggerBg\": \"#002140\",\n \"triggerColor\": \"#ffffff\",\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"headerHeight\": 64,\n \"triggerHeight\": 48,\n \"zeroTriggerHeight\": 40,\n \"zeroTriggerWidth\": 40,\n \"borderRadius\": 6,\n \"fontSize\": 14,\n \"fontSizeXL\": 20\n },\n \"Mentions\": {\n \"fontFamily\": \"SF Pro\",\n \"fontSize\": 14,\n \"lineHeight\": 1.5714285714285714\n },\n \"Splitter\": {\n \"railSize\": 4,\n \"handleSizeHover\": 12,\n \"dotSize\": 8,\n \"controlSize\": 10,\n \"handleSize\": 10,\n \"trackHoverBg\": \"#a2bfee\",\n \"trackBgDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"trackBg\": \"#c8d8f5\",\n \"railHoverBg\": \"rgba(0, 0, 0, 0.06)\",\n \"railBg\": \"rgba(0, 0, 0, 0.04)\",\n \"handleColor\": \"#c8d8f5\",\n \"handleColorDisabled\": \"#bfbfbf\",\n \"handleActiveColor\": \"#4d75d9\",\n \"dotBorderColor\": \"#f0f0f0\",\n \"dotActiveBorderColor\": \"#c8d8f5\",\n \"lineWidth\": 1,\n \"controlHeightLG\": 40,\n \"controlHeight\": 32,\n \"colorTextDisabled\": \"rgba(0, 0, 0, 0.25)\",\n \"colorTextDescription\": \"rgba(0, 0, 0, 0.45)\",\n \"colorPrimaryBorderHover\": \"#a2bfee\",\n \"colorPrimaryBorder\": \"#c8d8f5\",\n \"colorPrimary\": \"#4d75d9\",\n \"colorFillTertiary\": \"rgba(0, 0, 0, 0.04)\",\n \"colorFillSecondary\": \"rgba(0, 0, 0, 0.06)\",\n \"colorFillContentHover\": \"rgba(0, 0, 0, 0.15)\",\n \"colorBorderSecondary\": \"#f0f0f0\",\n \"colorBgElevated\": \"#ffffff\",\n \"colorBgContainerDisabled\": \"rgba(0, 0, 0, 0.04)\",\n \"colorBgContainer\": \"#ffffff\",\n \"resizeSpinnerSize\": 20,\n \"lineHeight\": 1.5714285714285714,\n \"fontSize\": 14,\n \"fontFamily\": \"SF Pro\",\n \"controlHeightSM\": 24,\n \"borderRadiusXS\": 2,\n \"colorText\": \"rgba(0, 0, 0, 0.88)\",\n \"colorFill\": \"rgba(0, 0, 0, 0.15)\",\n \"controlItemBgActive\": \"#f1f5fd\",\n \"controlItemBgActiveHover\": \"#e0e9f9\",\n \"controlItemBgHover\": \"rgba(0, 0, 0, 0.04)\",\n \"fontSizeSM\": 12,\n \"splitBarSize\": 2,\n \"splitTriggerSize\": 6\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// 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.colorBgElevated,\n overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: 'auto',\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': {\n width: '100%',\n },\n '& .ant-tree-list-holder-inner': {\n width: '100%',\n },\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': {\n width: '100%',\n padding: 0,\n },\n '& .ant-tree-switcher': {\n backgroundColor: token.colorBgElevated,\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 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\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 : 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\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 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 // 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, 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 './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\n ? null\n : nodeProps.expanded\n ? <MinusSquareOutlined style={{ fontSize: 12 }} />\n : <PlusSquareOutlined style={{ fontSize: 12 }} />\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<br />Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n )\n\n if (isMobile) {\n return wrapSSR(\n <aside className={cx('sider')} style={{ width: '100%', 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={{ top: false, right: true, bottom: false, left: false, topRight: false, bottomRight: false, bottomLeft: false, topLeft: false }}\n defaultSize={{ width: isMobile ? 225 : 333, height: 'auto' }}\n className={cx('sider')}\n >\n {inner}\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: token.colorPrimary,\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: '17.5rem',\n height: '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: token.colorPrimary,\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 { Divider, Flex } 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 = () => {\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={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 <Flex wrap={'wrap'} gap={viewStyle === 'grid' ? '1.5rem' : 0} vertical={viewStyle === 'list'}>\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 {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, 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 '@doc-lib/view/helper'\nimport { 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\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>\n {p.name}\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: 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, 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}>\n {name}\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\n ? header.schema.enum.map((e: string) => <Tag key={e}>{e}</Tag>)\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 ? prop.enum.map((e: string) => <Tag key={e}>{e}</Tag>) : '--',\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 height: '100%',\n },\n [scope('content')]: {\n width: '100%',\n height: '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 '& .ant-table-tbody > tr > td': {\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 const requestBodyData = buildRequestBodyData(selectedEndpoint?.requestBody, token)\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 ...(requestBodyData.length > 0\n ? [\n {\n key: 'requestBody',\n label: 'Request Body',\n children: (\n <Table\n columns={requestColumns}\n dataSource={requestBodyData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\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","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 width: '100%',\n height: 'auto',\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n overflow: 'hidden', // ← أضف\n minWidth: 0, // ← أضف\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:\n 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 />\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 switcherNode?: React.ReactNode\n}\n\nexport const ApiDocumentationBar = ({\n apiName,\n mode,\n onModeChange,\n onReset,\n onSave,\n hasChanges = 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: token.marginMD, // 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: token.marginMD,\n flex: 1,\n justifyContent: 'flex-end',\n },\n [scope('mobileActions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM, // 12px tighter for mobile\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} 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} onClick={onSave}>\n Save & Publish Changes\n </Button>\n </div>\n </div>\n )\n}\n","import { Input, Button, Grid } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { 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}\n\nexport const GeneralSection = ({\n apiName,\n authType,\n version,\n description,\n onApiNameChange,\n onDescriptionChange,\n collapsed = false,\n onToggleCollapse,\n onChangeDetected,\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',\n borderRadius: token.borderRadius,\n overflow: 'hidden',\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',\n gap: token.paddingLG,\n padding: token.paddingLG,\n paddingBottom: (token as any).paddingXXL ?? 48,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('row')]: {\n display: 'flex',\n gap: token.paddingLG,\n width: '100%',\n },\n [scope('field')]: {\n display: 'flex',\n flexDirection: 'column',\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('label-required')]: {\n color: token.colorError,\n fontSize: token.fontSize,\n },\n [scope('count')]: {\n alignSelf: 'flex-end',\n fontSize: token.fontSize,\n color: token.colorTextDescription,\n marginTop: token.marginXXS,\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 General\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')} style={isMobile ? { padding: token.paddingMD, paddingBottom: (token as any).paddingXXL ?? 48 } : undefined}>\n <div className={cx('row')} style={isMobile ? { flexDirection: 'column' } : undefined}>\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>API Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={apiName}\n onChange={(e) => {\n onApiNameChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={35}\n showCount\n />\n </div>\n\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Authentication Type</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input size=\"large\" value={authType} disabled />\n </div>\n\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Version</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input size=\"large\" value={version} disabled />\n </div>\n </div>\n\n <div className={cx('field')} style={{ width: '100%' }}>\n <div className={cx('label')}>\n <span>Description</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input.TextArea\n size=\"large\"\n value={description}\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 </div>\n )\n}\n","import React from 'react'\n\nconst Trash = (props: React.SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask id=\"path-1-inside-1_17984_239034\" 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=\"#FF4D4F\" mask=\"url(#path-1-inside-1_17984_239034)\" />\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=\"#FF4D4F\" />\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=\"#FF4D4F\" 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=\"#FF4D4F\" 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=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.7476 23.375H21.2451\" stroke=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.125 20.375H21.875\" stroke=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default Trash\n","import React from 'react'\n\nconst InfoCircle = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M12 22C17.5 22 22 17.5 22 12C22 6.5 17.5 2 12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22Z\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 8V13\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.9946 16H12.0036\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default InfoCircle\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}\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}\n\nconst PARAM_IN_OPTIONS = [\n { label: 'query', value: 'query' },\n { label: 'header', value: 'header' },\n { label: 'path', value: 'path' },\n]\n\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}) => {\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 })\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: 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 isAddEnabled = mode === 'edit' ? hasChanges : !!(nameValue?.trim() && inValue && typeValue)\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 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 }\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={{ required: true, in: 'query', type: 'string' }}\n onValuesChange={() => {\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={PARAM_IN_OPTIONS} />\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 {/* 4. Required? — Switch */}\n <Form.Item name=\"required\">\n <div className={cx('switch-row')}>\n <Switch\n checked={requiredValue ?? true}\n onChange={(checked) => form.setFieldValue('required', checked)}\n style={{ backgroundColor: (requiredValue ?? true) ? token.colorPrimary : undefined }}\n />\n <span className={cx('switch-label')}>Required?</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' : 'Add'} {paramName} parameter\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 </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 } from 'react'\nimport type { FC } from 'react'\nimport {\n Button,\n Empty,\n Input,\n Modal,\n Pagination,\n Select,\n Table,\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 EditOutlined,\n CheckCircleOutlined,\n SearchOutlined,\n} from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport InfoCircle from '../../../../assets/info-circle'\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 = 5\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 mode?: 'edit' | 'view'\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 mode = 'edit',\n}) => {\n const [expandedId, setExpandedId] = useState<string | null>(null)\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 [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 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 borderRadius: token.borderRadius,\n overflow: 'hidden',\n width: '100%',\n flexShrink: 0,\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 width: 64,\n padding: `0 ${token.paddingXS}px`,\n borderRadius: token.borderRadius,\n border: '1px solid',\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n alignSelf: 'stretch',\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: token.marginXXS,\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-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 },\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 24px`,\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-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: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderColor: token.colorPrimary,\n color: token.colorPrimary,\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('param-delete-btn')]: {\n width: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\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 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.colorTextSecondary,\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 // ── 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 '& .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 <span className={cx('view-param-name')}>{row.name}</span>\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 <span className={cx('view-param-desc')}>{row.description || '--'}</span>\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 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 <Table<ViewParamRow>\n dataSource={buildViewParamRows(endpointParams[ep.id] ?? [])}\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 </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 <Table<ViewParamRow>\n dataSource={buildViewParamRows(endpointResponseParams[ep.id] ?? [])}\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 </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 />\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 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 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={{\n padding: 0,\n lineHeight: 1,\n width: 32,\n height: 32,\n fontSize: 20,\n }}\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={<EditOutlined />}\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 type=\"text\"\n icon={<TrashIcon height={32} width={32} />}\n style={{ padding: 0, lineHeight: 1 }}\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={<EditOutlined />}\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 <div\n className={cx('param-row')}\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 {openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <code className={cx('code-area')}>\n {JSON.stringify(\n (endpointParams[ep.id] ?? []).map((p) => ({\n name: p.name,\n in: p.in,\n type: p.type,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n })),\n null,\n 2\n )}\n </code>\n <div className={cx('code-footer')}>\n <Button ghost size=\"small\" className={cx('code-btn')}>\n Validate\n </Button>\n <Button ghost size=\"small\" className={cx('code-btn')}>\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 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 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={{\n padding: 0,\n lineHeight: 1,\n width: 32,\n height: 32,\n fontSize: 20,\n }}\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={<EditOutlined />}\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={<EditOutlined />}\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 type=\"text\"\n icon={<TrashIcon height={18} width={18} />}\n style={{ padding: 0, lineHeight: 1 }}\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')}\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 <InfoCircle style={{ width: 24, height: 24 }} />\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <code className={cx('code-area')}>\n {JSON.stringify(\n (endpointResponseParams[ep.id] ?? []).map((p) => ({\n name: p.name,\n in: p.in,\n type: p.type,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n })),\n null,\n 2\n )}\n </code>\n <div className={cx('code-footer')}>\n <Button ghost size=\"small\" className={cx('code-btn')}>\n Validate\n </Button>\n <Button ghost size=\"small\" className={cx('code-btn')}>\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 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 />\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 may not be saved\"\n closable\n onClose={onClose}\n icon={<ExclamationCircleFilled />}\n showIcon\n />\n </div>\n )\n}\n","import type { FC } from 'react'\nimport { Button, Tooltip, Grid } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { PlusOutlined, UpCircleOutlined, EditOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\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) => void\n}\n\nexport const TagsSection: FC<TagsSectionProps> = ({\n tags,\n collapsed = false,\n onToggleCollapse,\n onAddTag,\n onEditTag,\n onDeleteTag,\n}) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const { wrapSSR, cx, token } = useStyle('TagsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n width: '100%',\n flexShrink: 0,\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('head-actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('tag-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: 50,\n paddingTop: token.controlHeightLG,\n paddingBottom: token.controlHeightLG,\n paddingRight: token.paddingLG,\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n },\n [scope('tag-row-last')]: {\n borderBottom: 'none',\n paddingBottom: token.marginLG,\n },\n [scope('tag-info')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 32,\n flex: 1, // ← أضف\n minWidth: 0, // ← أضف\n },\n [scope('tag-col')]: {\n display: 'flex',\n flexDirection: 'column',\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('btn-delete')]: {\n width: 40,\n height: 40,\n border: `1px solid ${token.colorError}`,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('btn-edit')]: {\n width: 40,\n height: 40,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n background: token.colorBgContainer,\n boxShadow: '0px 2px 0px 0px rgba(0,0,0,0.02)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('tag-row-mobile')]: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 8,\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',\n gap: 2,\n flex: 1,\n minWidth: 0,\n paddingTop: 4,\n },\n [scope('tag-col-mobile')]: {\n display: 'flex',\n flexDirection: 'row',\n gap: 4,\n alignItems: 'center',\n minWidth: 0,\n flexWrap: 'nowrap',\n },\n [scope('body-mobile')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: token.paddingMD,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n overflowX: 'auto',\n },\n }))\n\n return wrapSSR(\n <div className={cx('root')}>\n {/* HEAD */}\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n Tags\n </Title>\n <div className={cx('head-actions')}>\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\n {/* BODY */}\n {!collapsed &&\n (isMobile ? (\n // ── MOBILE BODY ──────────────────────────────────────────\n <div className={cx('body-mobile')}>\n {tags.map((tag, index) => {\n const isLast = index === tags.length - 1\n return (\n <div\n key={tag.name}\n className={cx('tag-row-mobile', isLast ? 'tag-row-mobile-last' : '')}\n >\n {/* Left: tag info stacked */}\n <div className={cx('tag-info-mobile')}>\n {/* Tag Name row */}\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 {/* Description row */}\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={\n tag.description && tag.description.length > 20 ? tag.description : ''\n }\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\n {/* Right: action buttons — same as desktop */}\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)}\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={<EditOutlined style={{ fontSize: 18 }} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n ) : (\n // ── DESKTOP BODY — EXACTLY AS BEFORE, ZERO CHANGES ───────\n <div className={cx('body')}>\n {tags.map((tag, index) => {\n const isLast = index === tags.length - 1\n return (\n <div key={tag.name} className={cx('tag-row', isLast ? 'tag-row-last' : '')}>\n {/* Tag info columns */}\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={\n tag.description && tag.description.length > 30 ? tag.description : ''\n }\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 title={tag.externalDocsUrl.length > 25 ? tag.externalDocsUrl : ''}>\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 {/* Actions */}\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)}\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={<EditOutlined style={{ fontSize: 18 }} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n","import type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button, Drawer, Form, Input, Modal, Tooltip, 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 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}\n\nconst TAG_NAME_REGEX = /^[A-Za-z0-9_-]+$/\nconst TAG_DESC_REGEX = /^[A-Za-z0-9_-]+$/\nconst EXT_DESC_REGEX = /^[A-Za-z0-9_-]+$/\n\nexport const AddTagDrawer: FC<AddTagDrawerProps> = ({\n open,\n onClose,\n mode,\n initialValues,\n onAddTag,\n onEditTag,\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))\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 // Clear link value and errors whenever External Docs Description is cleared\n useEffect(() => {\n if (!extDocsDesc?.trim()) {\n form.setFields([{ name: 'externalDocsLink', value: undefined, errors: [] }])\n }\n }, [extDocsDesc])\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 { pattern: TAG_NAME_REGEX, message: 'Only letters, numbers, underscores, and hyphens' },\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 validator: (_, value) => {\n if (!value || TAG_DESC_REGEX.test(value)) return Promise.resolve()\n return Promise.reject(new Error('Only letters, numbers, underscores, and hyphens'))\n },\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 validator: (_, value) => {\n if (!value || EXT_DESC_REGEX.test(value)) return Promise.resolve()\n return Promise.reject(new Error('Only letters, numbers, underscores, and hyphens'))\n },\n },\n ]}\n >\n <Input showCount maxLength={25} placeholder=\"Describe External Docs\" />\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: 512, message: 'Maximum 512 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 new URL(link)\n return Promise.resolve()\n } catch {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n },\n },\n ]}\n >\n <Tooltip\n title={!isLinkEnabled ? 'You need to add the External Docs Description first.' : ''}\n color=\"rgba(0,0,0,0.85)\"\n placement=\"topLeft\"\n >\n <Input\n showCount\n maxLength={512}\n placeholder=\"External Docs Link\"\n disabled={!isLinkEnabled}\n onChange={(e) => {\n form.setFieldValue('externalDocsLink', e.target.value)\n }}\n />\n </Tooltip>\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 { RequestBody, HTTPMethod, OpenAPIFile, Schema } from '@doc-lib/types/OpenApi'\nimport { OverviewData, EndpointData } from '../entities'\nimport { nanoid } from 'nanoid'\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 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-${nanoid(8)}` } as EndpointData)\n })\n } else {\n if (!groupedPathsByTags.default) {\n groupedPathsByTags.default = []\n }\n groupedPathsByTags.default.push({ ...entry, id: `endpoint-${nanoid(8)}` } 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-${nanoid(8)}`, // 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","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 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={appTheme === 'LIGHT' ? hljs.stackoverflowLight : hljs.stackoverflowDark}\n showLineNumbers\n wrapLines\n wrapLongLines={wrapLongLines}\n customStyle={{\n margin: 0,\n minHeight: '3rem',\n overflowY: 'auto',\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 activeRequestTab,\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 // Hide the Request curl panel when the active parameter tab (header/path/query) has no entries\n const hasActiveTabParams = (selectedEndpoint?.parameters ?? []).some(\n (p) => p.in === activeRequestTab\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 — only visible when active tab has parameters */}\n {hasActiveTabParams && (\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","'use client'\nimport {\n Sidebar,\n MainContent,\n ApiDocumentationBar,\n GeneralSection,\n TagsSection,\n EndpointsSection,\n UnsavedChangesBanner,\n AddTagDrawer,\n} from './components'\nimport type { ParameterFormValues } from './components/ApiPage/components/AddParameterDrawer'\nimport { Button, Grid, message, Modal } from 'antd'\nimport { EditOutlined, EyeOutlined } 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 './helper'\nimport CodeboxSidebar from './components/CodeboxSidebar'\n\nexport const DocumentationLayout = ({\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 [hasChanges, setHasChanges] = useState(false)\n const [bannerVisible, setBannerVisible] = useState(false)\n const [resetKey, setResetKey] = useState(0)\n const [generalCollapsed, setGeneralCollapsed] = useState(false)\n const [tagsCollapsed, setTagsCollapsed] = useState(false)\n const [endpointsCollapsed, setEndpointsCollapsed] = useState(false)\n const [localApiName, setLocalApiName] = useState('')\n const [localDescription, setLocalDescription] = useState('')\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 [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; tagName: string }>({\n open: false,\n tagName: '',\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 builtTreeData,\n selectedEndpoint,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\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\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 overflowY: 'auto',\n },\n [scope('section')]: {\n flexShrink: 0,\n height: 'auto',\n },\n [scope('docs-layout')]: {\n display: 'flex',\n flexShrink: 0,\n height: 'auto',\n gap: token.marginLG,\n width: '100%',\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 if (!rawFile?.tags) return []\n return 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 }, [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[] } | 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 }\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[] } | 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 }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n useEffect(() => {\n setLocalTags(tagMetadata)\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n }, [selectedApi])\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 // 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 // Skip if parameters are already in sync (prevents infinite loop after our own setSelectedEndpoint call)\n if (JSON.stringify(selectedEndpoint.parameters ?? []) === JSON.stringify(openApiParams)) return\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 // Edit mode does not group response params by status code, so we apply to all.\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 setSelectedEndpoint({\n ...selectedEndpoint,\n parameters: openApiParams,\n responses: patchedResponses,\n }) \n }, [mode, selectedEndpoint, 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 setHasChanges(true)\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 setHasChanges(true)\n setBannerVisible(true)\n }\n\n const handleDeleteTagConfirm = () => {\n setLocalTags((prev) => prev.filter((t) => t.name !== deleteTagModal.tagName))\n messageApi.success(`${deleteTagModal.tagName} tag has been deleted successfully.`)\n setDeleteTagModal({ open: false, tagName: '' })\n setHasChanges(true)\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 setHasChanges(false)\n setBannerVisible(false)\n setLocalApiName(selectedApi?.title ?? '')\n setLocalDescription(selectedApi?.description ?? '')\n setEndpointNames({})\n setEndpointDescs({})\n setEndpointTags({})\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setResetKey((prev) => prev + 1)\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 },\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 },\n }))\n } else {\n delete methodObj['x-response-params']\n }\n }\n })\n\n await onSave?.(cloned)\n setHasChanges(false)\n setBannerVisible(false)\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 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: '8px 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: 8,\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: mode === 'view' ? token.fontSize : token.fontSizeLG,\n color: token.colorText,\n }}\n >\n <EyeOutlined style={{ fontSize: 18 }} />\n View\n </button>\n </div>\n )\n\n return (\n <div className={cx('documentation-container')}>\n {contextHolder}\n <div className={cx('section')}>\n <ApiDocumentationBar\n apiName={selectedApi?.title || 'API'}\n mode={mode}\n onModeChange={setMode}\n onReset={handleReset}\n onSave={handleSave}\n hasChanges={hasChanges}\n switcherNode={isMobile ? switcherNode : undefined}\n />\n </div>\n {bannerVisible && <UnsavedChangesBanner onClose={() => setBannerVisible(false)} />}\n {mode === 'edit' ? (\n <>\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find((v) => v.apiId === selectedApi?.currentVersion)\n ?.version || ''\n }\n description={localDescription}\n onApiNameChange={setLocalApiName}\n onDescriptionChange={setLocalDescription}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setHasChanges(true)\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) => setDeleteTagModal({ open: true, tagName })}\n />\n </div>\n <div className={cx('section')}>\n <EndpointsSection\n key={resetKey}\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\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 setHasChanges(true)\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n />\n </div>\n {/* future sections go here */}\n </>\n ) : (\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 {!isMobile && focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\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 />\n\n {/* Delete tag confirmation modal */}\n <Modal\n open={deleteTagModal.open}\n onCancel={() => setDeleteTagModal({ open: false, tagName: '' })}\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 {deleteTagModal.tagName} tag</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setDeleteTagModal({ open: false, tagName: '' })}\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 {deleteTagModal.tagName} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setDeleteTagModal({ open: false, tagName: '' })}\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAa,mBAAmB,SAAgB,EAC9C,MAAM;CACJ,iBAAiB;CACjB,cAAc,EAAE;CAChB,cAAc;CACd,iBAAiB;CACjB,eAAe;CACf,aAAa;CACb,kBAAkB;CAClB,gBAAgB;CAChB,oBAAoB;CACpB,mBAAmB;CACnB,YAAY;CACZ,kBAAkB;CAElB,sBAAsB,QACpB,KAAK,UAAU;AACb,QAAM,KAAK,mBAAmB;GAC9B;CAEJ,gBAAgB,QACd,KAAK,UAAU;AACb,QAAM,KAAK,aAAa;GACxB;CAEJ,qBAAqB,QACnB,KAAK,UAAU;AACb,QAAM,KAAK,kBAAkB;GAC7B;CAEJ,kBAAkB,SAChB,KAAK,UAAU;AACb,QAAM,KAAK,eAAe;GAC1B;CAEJ,kBAAkB,SAChB,KAAK,UAAU;AACb,QAAM,KAAK,eAAe;GAC1B;CAEJ,iBAAiB,QACf,KAAK,UAAU;AACb,QAAM,KAAK,cAAc;GACzB;CAEJ,sBAAsB,aACpB,KAAK,UAAU;AACb,MAAI,UAAU;GACZ,MAAM,uBAAuB,OAAO,KAAK,UAAU,UAAU;AAC7D,SAAM,KAAK,oBAAoB,qBAAqB,IAAI,OAAO;AAC/D,SAAM,KAAK,qBAAqB,qBAAqB,GAAG,EAAE,GACtD,OAAO,qBAAqB,GAAG,EAAE,CAAC,GAClC;;AAEN,QAAM,KAAK,mBAAmB;GAC9B;CAEJ,qBAAqB,SACnB,KAAK,UAAU;AACb,QAAM,KAAK,kBAAkB;GAC7B;CAEJ,mBAAmB,SAA4B;AAC7C,SAAO,KAAK,UAAU;AACpB,SAAM,KAAK,gBAAgB;IAC3B;;CAGJ,oBAAoB,YAClB,KAAK,UAAU;AACb,QAAM,KAAK,iBAAiB;GAC5B;CAEJ,wBAAwB,SACtB,KAAK,UAAU;AACb,QAAM,KAAK,qBAAqB;GAChC;CACL,EACF;;;;AC5GD,MAAM,eAAe,SAAgB,EACnC,GAAG,gBAAgB,IAA6C,EACjE;AAED,MAAa,gCAAmD,sEAC/C,YAAY,EAAE,EAC3B,MAAM,oBACP,CAAC,CACH;AAGD,oBAAe;;;;ACZf,SAAgB,SACd,eACA,UAIA;CACA,MAAM,EAAE,gBAAO,gBAAO,WAAWA,WAAU,UAAU;CAIrD,MAAM,SAAS,cAAsB,IAAI,OAAO,GAAG,cAAc,GAAG;CAGpE,MAAM,MAAM,GAAG,YACb,QAAQ,KAAK,QAAQ,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,KAAK,IAAI;AAWrE,QAAO;EAAE,oDARP;GACE;GACA;GACA,MAAM,CAAC,cAAc;GACtB,QACK,SAASC,SAAO,MAAM,CAC7B;EAEiB;EAAI;EAAO;EAAO;EAAQ;;;;;YC/BnC;CACP,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,iBAAiB;CACjB,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,WAAW;CACX,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CACd,eAAe;CACf,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,YAAY;CACZ,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,WAAW;CACX,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,sBAAsB;CACtB,YAAY;CACZ,qBAAqB;CACrB,uBAAuB;CACvB,YAAY;CACZ,YAAY;CACZ,uBAAuB;CACvB,oBAAoB;CACpB,kBAAkB;CAClB,YAAY;CACZ,wBAAwB;CACxB,YAAY;CACZ,qBAAqB;CACrB,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,wBAAwB;CACxB,aAAa;CACb,YAAY;CACZ,kBAAkB;CAClB,oBAAoB;CACpB,YAAY;CACZ,mBAAmB;CACnB,YAAY;CACZ,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,YAAY;CACZ,oBAAoB;CACpB,YAAY;CACZ,eAAe;CACf,aAAa;CACb,wBAAwB;CACxB,SAAS;CACT,aAAa;CACb,SAAS;CACT,sBAAsB;CACtB,qBAAqB;CACrB,uBAAuB;CACvB,SAAS;CACT,SAAS;CACT,cAAc;CACd,SAAS;CACT,eAAe;CACf,SAAS;CACT,iBAAiB;CACjB,SAAS;CACT,SAAS;CACT,4BAA4B;CAC5B,SAAS;CACT,qBAAqB;CACrB,UAAU;CACV,oBAAoB;CACpB,aAAa;CACb,iBAAiB;CACjB,aAAa;CACb,oBAAoB;CACpB,aAAa;CACb,yBAAyB;CACzB,aAAa;CACb,kBAAkB;CAClB,aAAa;CACb,aAAa;CACb,aAAa;CACb,eAAe;CACf,cAAc;CACd,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,aAAa;CACb,cAAc;CACd,aAAa;CACb,gBAAgB;CAChB,qBAAqB;CACrB,oBAAoB;CACpB,yBAAyB;CACzB,mBAAmB;CACnB,oBAAoB;CACpB,uBAAuB;CACvB,kBAAkB;CAClB,wBAAwB;CACxB,kBAAkB;CAClB,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB,wBAAwB;CACxB,kBAAkB;CAClB,mBAAmB;CACnB,sBAAsB;CACtB,iBAAiB;CACjB,uBAAuB;CACvB,mBAAmB;CACnB,kBAAkB;CAClB,uBAAuB;CACvB,sBAAsB;CACtB,2BAA2B;CAC3B,qBAAqB;CACrB,sBAAsB;CACtB,yBAAyB;CACzB,oBAAoB;CACpB,0BAA0B;CAC1B,kBAAkB;CAClB,uBAAuB;CACvB,sBAAsB;CACtB,2BAA2B;CAC3B,qBAAqB;CACrB,sBAAsB;CACtB,yBAAyB;CACzB,oBAAoB;CACpB,0BAA0B;CAC1B,kBAAkB;CAClB,uBAAuB;CACvB,sBAAsB;CACtB,2BAA2B;CAC3B,qBAAqB;CACrB,sBAAsB;CACtB,yBAAyB;CACzB,oBAAoB;CACpB,0BAA0B;CAC1B,qBAAqB;CACrB,uBAAuB;CACvB,uBAAuB;CACvB,+BAA+B;CAC/B,4BAA4B;CAC5B,sBAAsB;CACtB,kBAAkB;CAClB,qBAAqB;CACrB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ,0BAA0B;CAC1B,QAAQ;CACR,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,WAAW;CACX,iBAAiB;CACjB,WAAW;CACX,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,aAAa;CACb,iBAAiB;CACjB,kBAAkB;CAClB,uBAAuB;CACvB,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,eAAe;CACf,eAAe;CACf,YAAY;CACZ,eAAe;CACf,eAAe;CACf,aAAa;CACb,gBAAgB;CAChB,kBAAkB;CAClB,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,aAAa;CACb,WAAW;CACX,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,cAAc;CACd,4BAA4B;CAC5B,8BAA8B;CAC9B,8BAA8B;CAC9B,0BAA0B;CAC1B,4BAA4B;CAC5B,4BAA4B;CAC5B,4BAA4B;CAC5B,8BAA8B;CAC9B,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ,cAAc;CACd,cAAc;CACd,cAAc;CACd,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,cAAc;CACd,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,gBAAgB;CAChB,oBAAoB;CACpB,uBAAuB;CACvB,oBAAoB;CACpB,uBAAuB;CACvB,gBAAgB;CAChB,sBAAsB;CACtB,qBAAqB;CACrB,kBAAkB;CAClB,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,aAAa;CACb,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,cAAc;CACd,eAAe;CAChB;;;;ACjSH,MAAa,eAAe;CAC1B,KAAK;EACH,IAAI;EACJ,OAAO,MAAM;EACd;CACD,MAAM;EACJ,IAAI;EACJ,OAAO,MAAM;EACd;CACD,QAAQ;EACN,IAAI;EACJ,OAAO,MAAM;EACd;CACD,KAAK;EACH,IAAI;EACJ,OAAO,MAAM;EACd;CACD,OAAO;EACL,IAAI;EACJ,OAAO,MAAM;EACd;CACD,SAAS;EACP,IAAI;EACJ,OAAO,MAAM;EACd;CACD,MAAM;EACJ,IAAI;EACJ,OAAO,MAAM;EACd;CACD,OAAO;EACL,IAAI;EACJ,OAAO,MAAM;EACd;CACF;AAGD,MAAa,qBAAqB;CAChC,KAAK;EACH,IAAI,MAAM;EACV,OAAO;EACR;CACD,MAAM;EACJ,IAAI,MAAM;EACV,OAAO;EACR;CACD,QAAQ;EACN,IAAI,MAAM;EACV,OAAO;EACR;CACD,KAAK;EACH,IAAI,MAAM;EACV,OAAO;EACR;CACD,OAAO;EACL,IAAI,MAAM;EACV,OAAO;EACR;CACD,SAAS;EACP,IAAI,MAAM;EACV,OAAO;EACR;CACD,MAAM;EACJ,IAAI,MAAM;EACV,OAAO;EACR;CACD,OAAO;EACL,IAAI,MAAM;EACV,OAAO;EACR;CACF;AAED,MAAa,sBAAsB;CACjC,KAAK;EAAE,IAAI,MAAM;EAAqB,OAAO,MAAM;EAAc;CACjE,MAAM;EAAE,IAAI,MAAM;EAAgB,OAAO,MAAM;EAAc;CAC7D,QAAQ;EAAE,IAAI,MAAM;EAAc,OAAO,MAAM;EAAY;CAC3D,KAAK;EAAE,IAAI,MAAM;EAAgB,OAAO,MAAM;EAAc;CAC5D,OAAO;EAAE,IAAI,MAAM;EAAc,OAAO,MAAM;EAAc;CAC5D,SAAS;EAAE,IAAI,MAAM;EAAe,OAAO,MAAM;EAAe;CAChE,MAAM;EAAE,IAAI,MAAM;EAAa,OAAO,MAAM;EAAa;CACzD,OAAO;EAAE,IAAI,MAAM;EAAc,OAAO,MAAM;EAAc;CAC7D;AAED,MAAa,0BAA0B,SAAgC;AACrE,KAAI,CAAC,KAAM,QAAO,EAAE;AACpB,QAAO,KAAK,KAAK,QAAQ;EACvB,MAAM,aAAa,OAAO,QAAQ,IAAI,KAAK;EAE3C,MAAM,aAAa,WAAW,MAAM,CAAC,SAAS,IAAI,aAAa,KAAK,UAAU;EAC9E,MAAM,iBAAiB,WAAW,QAAQ,CAAC,SAAS,IAAI,aAAa,KAAK,UAAU;EAEpF,MAAM,mBAAmB,aACrB,WAAW,GAAG,KAAK,cAAc;GAC/B,OAAO,SAAS;GAChB,KAAK,SAAS;GACd,QAAQ;GACR,YAAY;GACZ,QAAQ,SAAS;GACjB,MAAM;IACJ;IACA;IACA,SAAS;IACT,aAAa,IAAI;IAClB;GACF,EAAE,GACH,EAAE;EAEN,MAAM,WAAW,eAAe,KAAK,CAAC,KAAK,eAAe;GACxD,MAAM,QAAQ,OAAO,IAAI,GAAG,GAAG,IAAI,QAAQ,QAAQ,IAAI,CAAC,aAAa;AACrE,UAAO;IACL,OAAO;IACP,KAAK;IACL,YAAY;IACZ,MAAM;KAAE,SAAS;KAAK,SAAS;KAAK;IACpC,UAAU,UAAU,KAAK,cAAc;KACrC,OAAO,SAAS;KAChB,KAAK,SAAS;KACd,QAAQ;KACR,YAAY;KACZ,QAAQ,SAAS;KACjB,MAAM;MACJ;MACA;MACA,SAAS;MACT,aAAa,IAAI;MACjB;MACD;KACF,EAAE;IACJ;IACD;AAEF,SAAO;GACL,OAAO,IAAI;GACX,KAAK,IAAI;GACT,YAAY;GACZ,MAAM;GACN,UAAU,CAAC,GAAG,UAAU,GAAG,iBAAiB;GAC7C;GACD;;AAGJ,MAAa,iBAAiB,OAAmB,cAAuC;AACtF,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,KAAK,QAAQ,UACf,QAAO;AAET,MAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;GAC7C,MAAM,QAAQ,cAAc,KAAK,UAAU,UAAU;AACrD,OAAI,MAAO,QAAO;;;AAGtB,QAAO;;AAeT,MAAa,kBAAkB,SAA+B;CAC5D,MAAMC,OAAiB,EAAE;CACzB,MAAM,YAAY,UAAsB;AACtC,QAAM,SAAS,SAAS;AACtB,QAAK,KAAK,KAAK,IAAI;AACnB,OAAI,KAAK,YAAY,KAAK,SAAS,SAAS,EAC1C,UAAS,KAAK,SAAS;IAEzB;;AAEJ,UAAS,KAAK;AACd,QAAO;;AAIT,MAAa,kBAAkB,MAAkB,eAAmC;AAClF,KAAI,CAAC,WAAY,QAAO;CAGxB,MAAM,oBAAoB,OAAmB,QAAiC;AAC5E,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,QAAQ,IAAK,QAAO;AAC7B,OAAI,KAAK,UAAU;IACjB,MAAM,QAAQ,iBAAiB,KAAK,UAAU,IAAI;AAClD,QAAI,MAAO,QAAO;;;AAGtB,SAAO;;CAGT,MAAM,cAAc,SAAoC;EACtD,IAAI,YAAY;EAGhB,MAAM,eAAe,iBAAiB,MAAM,KAAK,IAAI;AACrD,MAAI,gBAAgB,OAAO,aAAa,UAAU,SAChD,aAAY,aAAa;WAChB,OAAO,KAAK,UAAU,SAC/B,aAAY,KAAK;EAInB,IAAI,iBAAiB;AACrB,MAAI,KAAK,UAAU,KAAK,OAEtB,kBAAiB,GAAG,KAAK,OAAO,GAAG,YAAY,aAAa;MAE5D,kBAAiB,UAAU,aAAa;EAG1C,MAAM,cAAc,WAAW,aAAa;EAC5C,MAAM,gBAAgB,eAAe,SAAS,YAAY;AAE1D,MAAI,KAAK,UAAU;GACjB,MAAM,mBAAmB,KAAK,SAC3B,KAAK,UAAoB,WAAW,MAAM,CAAC,CAC3C,QAAQ,UAA6B,UAAU,KAAK;AAEvD,OAAI,iBAAiB,iBAAiB,SAAS,EAC7C,QAAO;IACL,GAAG;IACH,UAAU;IACX;aAEM,cACT,QAAO;AAGT,SAAO;;AAGT,QAAO,KAAK,KAAK,SAAS,WAAW,KAAK,CAAC,CAAC,QAAQ,SAA2B,SAAS,KAAK;;AAqB/F,MAAa,oBAAoB,SAAY,WAAqC;EAC/E,MAAM,QAAQ,GAAG;EAChB,iBAAiBC,QAAM;EACvB,WAAW;EACX,cAAcA,QAAM;EACpB,QAAQ;EACT;EACA,MAAM,UAAU,GAAG,EAClB,SAASA,QAAM,SAChB;EACA,MAAM,WAAW,GAAG;EACnB,SAAS;EACT,KAAKA,QAAM;EACX,cAAcA,QAAM;EACrB;EACA,MAAM,eAAe,GAAG,EACvB,MAAM,GACP;EACA,MAAM,OAAO,GAAG;EACf,iBAAiB;EACjB,OAAO;EACP,oBAAoB,EAClB,OAAO,QACR;EACD,iCAAiC,EAC/B,OAAO,QACR;EACD,oCAAoC;GAClC,UAAU;GACV,MAAM;GACN,SAAS;GACT,YAAY;GACZ,SAAS;GACV;EACD,qBAAqB;GACnB,OAAO;GACP,UAAU;GACV,SAAS;GACT,YAAY;GACZ,aAAa;GACd;EACD,wBAAwB;GACtB,OAAO;GACP,SAAS;GACV;EACD,wBAAwB,EACtB,iBAAiBA,QAAM,iBACxB;EACF;EACA,MAAM,gBAAgB,GAAG;EACxB,SAAS;EACT,YAAY;EACZ,KAAKA,QAAM;EACX,OAAO;EACP,UAAU;EACV,UAAU;EACV,aAAaA,QAAM;EACnB,cAAcA,QAAM;EACrB;EACA,MAAM,aAAa,GAAG;EACrB,OAAO;EACP,QAAQ;EACR,YAAY;EACZ,UAAU;EACV,WAAW;EACX,QAAQ;EACR,cAAc;EACd,SAAS;EACT,SAAS;EACT,YAAY;EACZ,gBAAgB;EACjB;EACA,MAAM,gBAAgB,GAAG;EACxB,MAAM;EACN,UAAU;EACV,UAAU;EACV,UAAU;EACV,SAAS;EACV;EACA,MAAM,YAAY,GAAG;EACpB,OAAOA,QAAM;EACb,UAAU;EACV,SAAS;EACT,MAAM;EACP;EACA,MAAM,YAAY,GAAG;EACpB,MAAM;EACN,OAAOA,QAAM;EACb,UAAU;EACV,SAAS;EACT,aAAa;EACb,cAAc;EACd,QAAQ;EACT;CACF;;;;AC5XD,MAAM,EAAE,iBAASC;AAGjB,MAAaC,gBAA6C,EACxD,QACA,OACA,IACA,aAAa,YACT;CAEJ,MAAM,eADW,aAAa,qBAAqB,qBACtB;CAC7B,MAAM,SAAS,QAAQ,aAAa,KAAK;AAEzC,QACE,4CAAC;EACC,WAAW,GAAG,GAAG,gBAAgB,GAAG,aAAa,IAAI,GAAG,yBAAyB,KAAK;aAEtF,2CAACC;GACC,WAAW,GAAG,aAAa;GAC3B,OAAO;IACL,iBAAiB,aAAa;IAC9B,OAAO,aAAa;IACpB,QAAQ;IACR,GAAI,SAAS,EAAE,cAAc,GAAG,GAAG,EAAE;IACtC;aAEA;IACG,EACN,2CAACC;GAAK,WAAW,GAAG,gBAAgB;GAAE,UAAU,EAAE,SAAS,OAAO;GAAE,OAAO,EAAE,MAAM,GAAG;aACnF;IACI;GACH;;AAKV,MAAa,+BACX,mBACA,kBACA,OACe;CACf,MAAM,cAAc,SAA6B;EAC/C,IAAIC;AAEJ,MAAI,KAAK,UAAU,KAAK,QAAQ;GAE9B,MAAM,aACJ,oBAAoB,UAAU,QAAQ,KAAK,QAAQ,cAAc,KAAK,OACjE,KAAK,KAAa,UAAU,OAAO,kBAAkB,KACtD;AAGN,WACE,2CAAC;IACC,QAAQ,KAAK;IACb,OAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;IACjD;IACQ;KACZ;aAGJ,KAAK,QACL,QAAQ,KAAK,QACb,UAAU,KAAK,QACf,EAAE,cAAc,KAAK,SACrB,EAAE,aAAa,KAAK,MAGpB,SACE,2CAACD;GACC,WAAW,GAAG,YAAY;GAC1B,UAAU,EAAE,SAAS,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,YAAY;aAE9E,KAAK;IACD;MAIT,SACE,2CAACA;GACC,WAAW,GAAG,YAAY;GAC1B,UAAU,EAAE,SAAS,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,IAAI;aAEtE,KAAK;IACD;AAIX,SAAO;GACL,GAAG;GACH;GACA,UAAU,KAAK,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG;GAC3D;;AAGH,QAAO,kBAAkB,IAAI,WAAW;;;;;ACxF1C,MAAa,yBAAyB;CACpC,MAAM,EACJ,oBACA,mBACA,gBACA,qBACA,iBACA,cACA,eACA,kBACE,UAAU,EAAE,WAAW,KAAK;CAEhC,MAAM,uBACJ,UACA,YAC2B;AAC3B,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,QAAQ,WAAW,YAAY,EAAE;GACnC,MAAM,mBAAmB;AAGzB,uBAAoB;IAClB,GAAG,iBAAiB;IACpB,SAAS,iBAAiB;IAC1B,aAAa,iBAAiB;IAC/B,CAAC;AACF,kBAAe,iBAAiB,IAAI;AACpC,qBAAkB,WAAW;GAE7B,MAAM,WAAW;IACf,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB,IAAI;IACtB,CAAC,QAAQ,QAAuB,CAAC,CAAC,IAAI;GACvC,MAAM,WAAW,CAAC,GAAG,aAAa;AAClC,YAAS,SAAS,QAAQ;AACxB,QAAI,OAAO,SAAS,QAAQ,IAAI,GAAG,EACjC,UAAS,KAAK,IAAI;KAEpB;AACF,mBAAgB,SAAS;AAEzB,UAAO;IACL,MAAM;IACN,UAAU,iBAAiB;IAC3B,KAAK,iBAAiB;IACtB,KAAK,iBAAiB;IACvB;aACQ,QAAQ,WAAW,OAAO,IAAI,YAAY,eAAe;GAElE,MAAM,UAAU;AAChB,kBAAe,QAAQ;AAEvB,uBAAoB,KAAK;AACzB,qBAAkB,MAAM;AAExB,UAAO;IACL,MAAM;IACN,KAAK;IACN;SACI;GAEL,MAAM,UAAU;AAChB,kBAAe,QAAQ,QAAQ;AAC/B,uBAAoB,KAAK;AACzB,qBAAkB,MAAM;AACxB,iBAAc,QAAQ,QAAQ;AAE9B,UAAO;IACL,MAAM;IACN,KAAK,QAAQ;IACb,KAAK,QAAQ;IACd;;;CAKL,MAAM,mBAAmB,YAA4C;EACnE,MAAM,eAAe,cAAc,eAA6B,QAAQ;AACxE,MAAI,cAAc;GAChB,MAAM,SAAS,oBAAoB,aAAa,MAAM,QAAQ;AAC9D,sBAAmB,QAAQ;AAC3B,UAAO;;AAGT,SAAO;;CAIT,MAAM,cAAc,YAAoB;AACtC,MAAI,CAAC,aAAa,SAAS,QAAQ,CACjC,iBAAgB,CAAC,GAAG,cAAc,QAAQ,CAAC;;CAI/C,MAAM,wBAAwB,UAAsB,UAA0C;AAC5F,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;EAE/C,MAAM,cAAc,SAAS,MAC1B,SACC,KAAK,QACL,QAAQ,KAAK,QACb,UAAU,KAAK,QACf,EAAE,cAAc,KAAK,SACrB,EAAE,aAAa,KAAK,SACpB,MAAM,MAAM,mBAAmB,MAClC;AAED,MAAI,aAAa;GAEf,MAAM,eAAe,CAAC,YAAY,IAAI;AAGtC,OAAI,YAAY,SACd,aAAY,SAAS,SAAS,SAAS;AACrC,QAAI,CAAC,KAAK,OACR,cAAa,KAAK,KAAK,IAAI;KAE7B;AAIJ,mBAAgB,CACd,GAAG,cACH,GAAG,aAAa,QAAQ,QAAQ,CAAC,aAAa,SAAS,IAAI,CAAC,CAC7D,CAAC;AAGF,UAAO,gBAAgB,YAAY,IAAI;QAEvC,QAAO,eAAe,SAAS;AAGjC,SAAO;;CAIT,MAAM,kBAAkB,aAAiD;AACvE,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO;EAG/C,MAAM,eAAe,SAAS,MAC3B,SACC,KAAK,QACL,QAAQ,KAAK,QACb,UAAU,KAAK,QACf,EAAE,cAAc,KAAK,SACrB,EAAE,aAAa,KAAK,MACvB;AAED,MAAI,cAAc;GAEhB,MAAM,eAAe,CAAC,aAAa,IAAI;AAGvC,OAAI,aAAa,SACf,cAAa,SAAS,SAAS,SAAS;AACtC,QAAI,CAAC,KAAK,OACR,cAAa,KAAK,KAAK,IAAI;KAE7B;AAIJ,mBAAgB,CACd,GAAG,cACH,GAAG,aAAa,QAAQ,QAAQ,CAAC,aAAa,SAAS,IAAI,CAAC,CAC7D,CAAC;AAGF,UAAO,gBAAgB,aAAa,IAAI;;AAG1C,SAAO;;CAIT,MAAM,uBAAuB;AAC3B,qBAAmB,KAAK;AACxB,iBAAe,KAAK;AACpB,sBAAoB,KAAK;;AAG3B,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD;;;;;AC7MH,MAAM,UAAU,UACd,4CAAC;CAAI,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;YACjG,2CAAC;EAAK,GAAE;EAAgC,QAAO;GAAiB,EAChE,2CAAC;EAAK,GAAE;EAAkC,QAAO;GAAiB;EAC9D;AAGR,qBAAe;;;;ACDf,MAAME,cAAyC,EAC7C,QAAQ,KACR,SAAS,KACT,OAAO,WACP,SAAS,WACT,GAAG,YACC;AACJ,QACE,4CAAC;EACQ;EACC;EACR,SAAQ;EACF;EACN,OAAM;EACN,GAAI;;GAEJ,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,2CAAC;IACC,GAAE;IACF,MAAK;KACL;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IAAK,GAAE;IAAyD;KAAQ;GACzE,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACI;KACN;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IACC,GAAE;IACF,MAAK;IACG;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IAAK,GAAE;IAAmE,MAAK;KAAU;GAC1F,2CAAC;IACC,GAAE;IACM;IACR,eAAc;IACd,gBAAe;KACf;GACF,2CAAC;IAAK,GAAE;IAAmE,MAAK;KAAU;GAC1F,2CAAC;IACC,GAAE;IACM;IACR,eAAc;IACd,gBAAe;KACf;;GACE;;AAIV,yBAAe;;;;ACxKf,MAAM,EAAE,mCAAkBC;AAgB1B,MAAaC,WAIP,EAAE,aAAa,gBAAgB,mBAAmB;CACtD,MAAM,eAAe,UAAU,UAAU,MAAM,KAAK,aAAa;CACjE,MAAM,EAAE,iBAAiB,kBAAkB,eAAe,iBAAiB,uBACzE,UAAU,EAAE,WAAW,KAAK;CAE9B,MAAM,EAAE,iBAAiB,mBAAmB,kBAAkB;CAI9D,MAAM,CAAC,kBAAkB,2CAAgC,KAAK;CAG9D,MAAM,WAAW,CADDC,iBAAe,CACL;CAE1B,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,WAAW,iBAAiB;CAGpE,MAAM,gBAAgB,UAAkB;AACtC,MAAI,SAAS,eAAe;AAG1B,mBADgB,eAAe,cAAc,CACrB;AACxB,kBAAe,MAAM;AACrB,uBAAoB,KAAK;SACpB;AAEL,kBAAe,MAAM;AACrB,mBAAgB,EAAE,CAAC;AACnB,uBAAoB,MAAM;;;CAK9B,MAAM,0CAA+B;AACnC,MAAI,CAAC,cAAe,QAAO,EAAE;AAC7B,SAAO,4BAA4B,eAAe,kBAAkB,GAAG;IACtE;EAAC;EAAe;EAAkB;EAAG,CAAC;CAGzC,MAAM,4CAAiC;AACrC,MAAI,CAAC,YAAa,QAAO;AACzB,MAAI,CAAC,cAAe,QAAO,EAAE;AAK7B,SAAO,4BAFkB,eAAe,eAAe,YAAY,EAEd,kBAAkB,GAAG;IACzE;EAAC;EAAe;EAAa;EAAkB;EAAG,CAAC;CAGtD,MAAM,oBAAoB;AACxB,kBAAgB,EAAE,CAAC;;CAGrB,MAAM,oBAAoB,iBAA8B;EACtD,MAAM,aAAa,aAAa,KAAK,QAAQ,OAAO,IAAI,CAAC;AAEzD,MAAI,WAAW,WAAW,GAAG;AAC3B,mBAAgB;AAChB;;AAGF,MAAI,CAAC,cAAe;EAEpB,MAAM,cAAc,WAAW;AAC/B,kBAAgB,YAAY;AAC5B,qBAAmB,YAAY;;CAGjC,MAAM,QACJ,4CAAC;EAAI,WAAW,GAAG,UAAU;aAC3B,4CAAC;GAAI,WAAW,GAAG,WAAW;cAC5B,2CAACC;IAAQ,OAAM;IAA8B,WAAU;cACrD,2CAACC;KACC,aAAY;KACZ,OAAO;KACP,WAAW,MAAM,aAAa,EAAE,OAAO,MAAM;KAC7C;KACA,WAAW,GAAG,eAAe;KAC7B,YAAY,2CAACC,sCAAiB;MAC9B;KACM,EACV,2CAACF;IAAQ,OAAM;IAAe,WAAU;cACtC,2CAACG;KAAO,SAAS;KAAa,OAAM;KAAe,MAAM,2CAACC,mBAAS;MAAI;KAC/D;IACN,EACL,kBAAkB,SACjB,2CAACC;GACC,UAAU,EAAE,cAAc,OAAO;GACjC,UAAU;GACV,eAAe,cACb,UAAU,SACN,OACA,UAAU,WACR,2CAACC,0CAAoB,OAAO,EAAE,UAAU,IAAI,GAAI,GAChD,2CAACC,yCAAmB,OAAO,EAAE,UAAU,IAAI,GAAI;GAEzC;GACI;GAClB,cAAc,CAAC,mBAAmB,GAAG;GACrC,WAAW,iBAAiB;AAE1B,QAAI,CAAC,cAAc,OAAQ;AAC3B,qBAAiB,aAAa;AAC9B,uBAAmB,aAAa,GAAa;AAC7C,oBAAgB;;GAElB,WAAW,sBAAsB;AAC/B,oBAAgB,kBAA8B;AAC9C,wBAAoB,MAAM;;GAE5B,UAAU;GACV,WAAW,GAAG,OAAO;IACrB,GAEF,4CAACC;GACC,SAAQ;GACR,OAAM;GACN,KAAKC,QAAM;GACX;GACA,OAAO,EAAE,WAAWA,QAAM,WAAW;cAErC,2CAACC;IACC,QAAQD,QAAM;IACd,MAAMA,QAAM;IACZ,OAAO;IACP,QAAQ;KACR,EACD,YAAY,SACX,2CAACE;IACC,OAAO;KACL,WAAW;KACX,YAAYF,QAAM;KAClB,YAAY;KACZ,UAAUA,QAAM;KAChB,OAAOA,QAAM;KACd;cACF;KAEM,GAEP,4CAACE;IACC,OAAO;KACL,WAAW;KACX,YAAYF,QAAM;KAClB,YAAY;KACZ,UAAUA,QAAM;KAChB,OAAOA,QAAM;KACd;;KACF;KACO,2CAAC,SAAK;;;KACP;IAEJ;GAEL;AAGR,KAAI,SACF,QAAO,QACL,2CAAC;EAAM,WAAW,GAAG,QAAQ;EAAE,OAAO;GAAE,OAAO;GAAQ,QAAQ;GAAQ;YACpE;GACK,CACT;AAGH,QAAO,QACL,2CAACG;EACC,IAAI;EACJ,UAAU,WAAW,MAAM;EAC3B,UAAU;EACV,QAAQ;GAAE,KAAK;GAAO,OAAO;GAAM,QAAQ;GAAO,MAAM;GAAO,UAAU;GAAO,aAAa;GAAO,YAAY;GAAO,SAAS;GAAO;EACvI,aAAa;GAAE,OAAO,WAAW,MAAM;GAAK,QAAQ;GAAQ;EAC5D,WAAW,GAAG,QAAQ;YAErB;GACS,CACb;;;;;ACvMH,MAAM,QAAQ,UACZ,4CAAC;CAAI,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;YACjG,2CAAC;EAAK,GAAE;EAAuU,MAAK;GAAY,EAChW,2CAAC;EAAK,GAAE;EAA4U,MAAK;GAAY;EACjW;AAGR,mBAAe;;;;ACKf,MAAM,WAAW,EAAE,KAAK,gBAA0B;CAChD,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,yBAAyB,SAAO,WAAW;GAChF,MAAM,cAAc,GAAG;GACtB,UAAU;GACV,OAAO;GACP,aAAaC,QAAM;GACnB,cAAcA,QAAM;GACpB,SAAS;GACT,gBAAgB;GAChB,YAAY;GACZ,cAAcA,QAAM;GACrB;GACA,MAAM,iBAAiB,GAAG;GAAE,YAAYA,QAAM;GAAU,eAAeA,QAAM;GAAU;GACvF,MAAM,aAAa,GAAG;GACrB,WAAW;GACX,WAAW;GACX,SAAS;GACT,QAAQ;GACR,YAAY;GACZ,UAAUA,QAAM;GACjB;GACA,MAAM,mBAAmB,GAAG;GAC3B,OAAO;GACP,QAAQ;GACR,cAAcA,QAAM;GACpB,QAAQ,GAAGA,QAAM,UAAU,WAAWA,QAAM,QAAQ;GACpD,cAAcA,QAAM,QAAQ;GAC5B,aAAaA,QAAM,QAAQ;GAC3B,YAAYA,QAAM,QAAQ;GAC1B,WAAW,EACT,YAAYA,QAAM,QAAQ,WAC3B;GACF;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAYA,QAAM;GAClB,eAAeA,QAAM;GACrB,cAAcA,QAAM;GACpB,aAAaA,QAAM;GACnB,YAAY;GACZ,KAAKA,QAAM;GACX,WAAW;GACX,eAAe;GACf,cAAcA,QAAM;GACpB,QAAQ,aAAaA,QAAM;GAC3B,UAAU;GACV,UAAU;GACV,KAAK,EACH,MAAM,EACJ,MAAMA,QAAM,cACb,EACF;GACF;GACA,MAAM,aAAa,GAAG;GACrB,OAAOA,QAAM;GACb,UAAUA,QAAM;GAChB,YAAYA,QAAM;GAClB,YAAYA,QAAM;GAClB,eAAe;GACf,cAAc;GACd,YAAYA,QAAM;GAClB,QAAQ;GACR,YAAY;GAEZ,WAAW;IACT,OAAO,GAAGA,QAAM,aAAa;IAC7B,gBAAgB;IACjB;GACF;GACA,MAAM,YAAY,GAAG;GACpB,OAAOA,QAAM;GACb,UAAUA,QAAM;GAChB,YAAY;GACZ,YAAYA,QAAM;GACnB;GACA,MAAM,YAAY,GAAG;GACpB,OAAO;GACP,QAAQ;GACR,cAAcA,QAAM;GACrB;GACA,MAAM,aAAa,GAAG;GACrB,OAAOA,QAAM;GACb,UAAUA,QAAM;GAChB,YAAYA,QAAM;GAClB,YAAYA,QAAM;GAClB,eAAe;GACf,cAAc;GACd,YAAYA,QAAM;GACnB;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAYA,QAAM;GAClB,eAAeA,QAAM;GACrB,cAAcA,QAAM;GACpB,aAAaA,QAAM;GACnB,YAAY;GACZ,KAAKA,QAAM;GACX,WAAW;GACX,eAAe;GACf,cAAcA,QAAM;GACpB,QAAQ,aAAaA,QAAM;GAC3B,KAAK,EACH,MAAM,EACJ,MAAMA,QAAM,cACb,EACF;GACF;GACA,MAAM,iBAAiB,GAAG;GACzB,OAAOA,QAAM;GACb,UAAUA,QAAM;GAChB,YAAY;GACZ,YAAYA,QAAM;GACnB;GACA,MAAM,mBAAmB,GAAG;GAC3B,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,cAAcA,QAAM;GACpB,QAAQ,aAAaA,QAAM,QAAQ;GACnC,YAAYA,QAAM,QAAQ;GAC1B,WAAW;GACX,OAAO;GACP,QAAQ;GACT;EACF,EAAE;CAEH,MAAM,EAAE,oBAAoB,kBAAkB;CAE9C,MAAM,+BAA+B;AACnC,kBAAgB,IAAI,GAAG;;CAGzB,MAAM,kBAAkB,EAAE,WAA6B;EACrD,MAAM,aAAa,aAAa,SAAS,KAAK;AAC9C,MAAI,KAAK,SAAS,WAChB,QAAO;AAGT,SACE,4CAACC;GAAQ,OAAO;GAAM,WAAU;cAC7B,KAAK,UAAU,GAAG,WAAW,EAAC;IACvB;;CAId,MAAM,cAAc,EAAE,aAAiC;EACrD,MAAM,cAAc,aAAa;AACjC,SACE,2CAAC;GACC,WAAW,GAAG,cAAc;GAC5B,OAAO;IACL,iBAAiB,aAAa;IAC9B,OAAO,aAAa;IACpB,QAAQ;IACT;aAED,2CAACC;IAAM,OAAO,EAAE,OAAO,aAAa,OAAO;IAAE,WAAW,GAAG,aAAa;IAAE,OAAO;cAC9E;KACK;IACJ;;AAIV,KAAI,aAAa,OACf,QAAO,QACL,4CAACC;EAAK;;GACJ,4CAACA;IAAK,SAAQ;IAAgB,OAAM;IAAS,WAAW,GAAG,iBAAiB;eAC1E,4CAACA;KAAK,KAAKH,QAAM;gBACf,2CAAC,cAAW,QAAQ,IAAI,SAAU,EAClC,2CAACE;MAAM,WAAW,GAAG,aAAa;MAAE,OAAO;MAAG,SAAS;gBACrD,2CAAC,kBAAe,MAAM,KAAK,WAAW,kBAAmB;OACnD;MACH,EACP,2CAACE;KAAO,WAAW,GAAG,mBAAmB;KAAE,SAAS;eAAwB;MAEnE;KACJ;GACP,4CAAC;IAAI,WAAW,GAAG,eAAe;eAChC,2CAACC,iBAAW,EACZ,2CAACC;KAAK,WAAW,GAAG,YAAY;eAAG,KAAK;MAAY;KAChD;GACN,2CAACC,gBAAQ,OAAO;IAAE,WAAW;IAAW,cAAc;IAAW,GAAI;;GAChE,CACR;AAGH,QAAO,QACL,2CAACC;EAAK,WAAW,GAAG,YAAY;YAC9B,4CAACL;GAAK;GAAS,KAAKH,QAAM;;IACxB,2CAAC,cAAW,QAAQ,KAAK,SAAU;IACnC,2CAACE;KAAM,WAAW,GAAG,aAAa;KAAE,OAAO;eACzC,2CAAC,kBAAe,MAAM,KAAK,WAAW,kBAAmB;MACnD;IACR,4CAAC;KAAI,WAAW,GAAG,eAAe;gBAChC,2CAACG,iBAAW,EACZ,2CAACC;MAAK,WAAW,GAAG,iBAAiB;gBAAG,KAAK;OAAY;MACrD;IACN,2CAACF;KAAO,WAAW,GAAG,mBAAmB;KAAE,SAAS;eAAwB;MAEnE;;IACJ;GACF,CACR;;AAGH,sBAAe;;;;AC1Mf,SAAS,eAAe,UAA2B;AACjD,KAAI,CAAC,SAAU,QAAO;AACtB,SAAQ,SAAS,aAAa,EAA9B;EACE,KAAK;EACL,KAAK,SACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,QACE,QAAO;;;AAIb,MAAaK,qBAAiD,EAC5D,KACA,YACA,yBACI;CACJ,MAAM,EAAE,SAAS,OAAO,SAAS,sBAAsB,SAAO,WAAW;GACtE,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,KAAKC,QAAM;GACZ;GACA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,OAAO;GACR;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,YAAY;GACb;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,YAAY;GACZ,cAAc;GACd,aAAa,aAAaA,QAAM;GAChC,aAAa;GACd;GAEA,MAAM,UAAU,GAAG;GAClB,SAAS;GACT,YAAY;GACZ,QAAQ;GACR,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAc;GACd,SAAS;GACT,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,QAAQ;GACT;GAEA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,YAAY;GACZ,KAAK;GACL,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAc;GACd,SAAS;GACT,QAAQ;GACR,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,QAAQ;GACR,WAAW;GACZ;GACA,MAAM,YAAY,GAAG;GACpB,UAAU;GACV,SAAS;GACT,YAAY;GACb;GAEA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,KAAK;GACL,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAc;GACd,SAAS;GACT,QAAQ;GACR,QAAQ;GACR,WAAW;GACZ;GACA,MAAM,eAAe,GAAG;GACvB,UAAU;GACV,OAAOA,QAAM;GACb,SAAS;GACT,YAAY;GACb;GACA,MAAM,eAAe,GAAG;GACvB,UAAU;GACV,OAAOA,QAAM;GACb,YAAY;GACZ,YAAY;GACb;GACA,MAAM,cAAc,GAAG,EACtB,SAAS,QACV;GACA,MAAM,aAAa,GAAG;GACrB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,SAAS;GACT,YAAY;GACZ,gBAAgB;GACjB;GACA,MAAM,oBAAoB,GAAG;GAC5B,QAAQ,aAAaA,QAAM,aAAa;GACxC,OAAO,GAAGA,QAAM,aAAa;GAC7B,iBAAiB,GAAGA,QAAM,iBAAiB;GAC3C,QAAQ;GACT;GACA,MAAM,cAAc,GAAG;GACtB,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,QAAQ,GAAG,EAChB,YAAYA,QAAM,YACnB;EACF,EAAE;CAEH,MAAM,UACJ,IAAI,iBAAiB,MAAM,MAAM,EAAE,UAAU,IAAI,eAAe,EAAE,WAAW,IAAI;AAEnF,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,OAAO;;GAExB,2CAACC,gBAAW;IACV,OAAO;IACP,WAAW,GAAG,QAAQ;IACtB,UAAU,EAAE,SAAS,IAAI,OAAO;IAChC,OAAO;KAAE,QAAQ;KAAG,UAAU;KAAI,YAAY;KAAK;cAElD,IAAI;KACY;GAGnB,4CAAC;IAAI,WAAW,GAAG,WAAW;eAC5B,4CAAC;KAAI,WAAW,GAAG,YAAY;;MAE5B,IAAI,cACH,2CAAC;OAAI,WAAW,GAAG,OAAO;iBACxB,2CAAC;QAAI,WAAW,GAAG,UAAU;kBAAE;SAAmB;QAC9C;MAIR,2CAAC;OAAI,WAAW,GAAG,OAAO;iBACxB,4CAAC;QAAI,WAAW,GAAG,WAAW;mBAC5B,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAC9B,2CAACC,sCAAiB;UACb,EACN,eAAe,IAAI,SAAS;SACzB;QACF;MAGN,2CAAC;OAAI,WAAW,GAAG,OAAO;iBACxB,4CAAC;QAAI,WAAW,GAAG,cAAc;;SAC/B,2CAAC;UAAK,WAAW,GAAG,eAAe;oBACjC,2CAACC,0CAAqB;WACjB;SACP,2CAAC;UAAK,WAAW,GAAG,eAAe;oBAAG;WAAe;SACrD,2CAAC;UAAK,WAAW,GAAG,eAAe;oBACjC,2CAACC,oCAAe;WACX;;SACH;QACF;;MACF,EAGN,4CAAC;KAAI,WAAW,GAAG,cAAc;gBAC/B,2CAACC;MACC,WAAW,GAAG,cAAc,eAAe,SAAS,sBAAsB,GAAG;MAC7E,MAAM,2CAACC,wCAAmB;MAC1B,eAAe,mBAAmB,OAAO;MACzC,OAAO,EAAE,cAAc,eAAe;OACtC,EACF,2CAACD;MACC,WAAW,GAAG,cAAc,eAAe,SAAS,sBAAsB,GAAG;MAC7E,MAAM,2CAACE,oCAAe;MACtB,eAAe,mBAAmB,OAAO;MACzC,OAAO;OAAE,cAAc;OAAe,YAAY;OAAI;OACtD;MACE;KACF;GAGL,IAAI,eACH,2CAACN,gBAAW;IAAK,WAAW,GAAG,cAAc;cAAG,IAAI;KAA8B;;GAEhF,CACP;;;;;ACjNH,MAAa,gBAAgB;CAC3B,MAAM,CAAC,aAAa,sCAAmC,GAAG;CAC1D,MAAM,EACJ,MAAM,EACJ,aACA,YACA,oBAEAO,eAAU;CACd,MAAM,CAAC,WAAW,oCAA0C,OAAO;CACnE,MAAM,EAAE,SAAS,mBAAU,SAAS,+BAA+B,EAAE,EAAE;CAEvE,MAAM,uCAEF,aAAa,SAAS,KAAK,YAAY;EACrC,OAAO,QAAQ;EACf,OAAO,QAAQ;EAChB,EAAE,EACL,CAAC,aAAa,QAAQ,CACvB;AAED,4BAAgB;AACd,MAAI,cAAc,SAAS,eAAe,WAAW,EAAE;GACrD,MAAM,UAAU,SAAS,eAAe,WAAW;AACnD,OAAI,QACF,SAAQ,eAAe,EAAE,UAAU,UAAU,CAAC;AAEhD,iBAAc,KAAK;;IAEpB;EAAC;EAAY;EAAe;EAAY,CAAC;AAE5C,4BAAgB;AACd,MAAI,CAAC,CAAC,aAAa,OACjB,gBAAe,YAAY,IAAI,MAAM;IAEtC,CAAC,aAAa,YAAY,CAAC;AAE9B,4BAAgB;AACd,MAAI,aAAa,WAAW,CAAC,YAC3B,gBAAe,aAAa,UAAU,GAAG,IAAI;IAE9C,CAAC,aAAa,QAAQ,CAAC;CAG1B,MAAM,mCAAmC;AACvC,MAAI,CAAC,YAAa,QAAO,EAAE;EAE3B,MAAM,OAAO,YAAY,QAAQ,EAAE;EACnC,MAAM,OAAO,YAAY,QAAQ,EAAE;EAEnC,MAAMC,WAAwB,EAAE;AAEhC,SAAO,KAAK,KAAK,CAAC,SAAS,WAAW;AACpC,YAAS,UAAU,KAAK,QAAQ,KAAK,aAAa;IAChD,MAAM,YAAY,KAAK,MACpB,MACC,EAAE,cAAc,eAAe,EAAE,WAAW,SAAS,UAAU,EAAE,SAAS,SAAS,KACtF;AACD,WAAO;KACL,GAAG;KACH,aAAa,WAAW,eAAe;KACxC;KACD;IACF;AAEF,SAAO;;AAGT,QAAO,QACL,4CAACC;EAAK;EAAS,KAAKC,QAAM;aACvB,eACC,2CAAC;GACC,KAAK;GACL,YAAY;GACZ,oBAAoB;IACpB,EAEH,OAAO,QAAQ,4BAA4B,CAAC,CAC1C,MAAM,CAAC,IAAI,CAAC,OAAO;AAClB,OAAI,EAAE,aAAa,KAAK,UAAW,QAAO;AAC1C,OAAI,EAAE,aAAa,KAAK,UAAW,QAAO;AAC1C,UAAO;IACP,CACD,KAAK,CAAC,KAAK,YAAY,OAAO,QAAQ;AAIrC,UACE,2CAAC;IAEC,MAAM;IACN,SAAS;IACT,WAPc,EADG,IAAI,aAAa,KAAK,cACR,IAAI,SAAS;IAQ5C,eAAe,QAAQ,IAAI,SAAS;IACpC,aAAa,aAAa;IACf;IACX,OAAOA;MAPF,GAAG,aAAa,GAAG,GAAG,MAQ3B;IAEJ;GACC,CACR;;AAaH,MAAM,gBAAgB,EACpB,MACA,WACA,SACA,eACA,aACA,WACA,qBACuB;AACvB,QACE,4CAACD;EAEC,KAAK,cAAc,SAASC,QAAM,WAAW;EAC7C,OAAO;GAAE,cAAc;GAAG,eAAe;GAAG;EAC5C;;GAEC,aACC,2CAACC;IAAM,IAAI;IAAS,OAAO,EAAE,cAAc,GAAG;IAAE,OAAO;cACpD;KACK;GAEV,2CAACF;IAAK,MAAM;IAAQ,KAAK,cAAc,SAAS,WAAW;IAAG,UAAU,cAAc;cACnF,KAAK,KAAK,SACT,2CAACG;KAEC,KAAK;KACM;OAFN,GAAG,QAAQ,YAAY,KAAK,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,OAG3D,CACF;KACG;GACN,iBACC,2CAACC,gBAAQ,OAAO;IAAE,WAAWH,QAAM;IAAU,cAAcA,QAAM;IAAU,GAAI;;IApB5E,GAAG,QAAQ,YAAY,cAsBvB;;;;;AC7JX,MAAa,qBAAqB,SAAyB;AACzD,KAAI,QAAQ,OAAO,OAAO,IACxB,QAAO;UACE,QAAQ,OAAO,OAAO,IAC/B,QAAO;UACE,QAAQ,OAAO,OAAO,IAC/B,QAAO;UACE,QAAQ,OAAO,OAAO,IAC/B,QAAO;UACE,QAAQ,OAAO,OAAO,IAC/B,QAAO;KAEP,QAAO;;;;;ACHX,MAAM,EAAE,gBAAO,cAAcI;AAG7B,MAAM,iBAAiB;CACrB;EAAE,OAAO;EAAa,WAAW;EAAS,KAAK;EAAS;CACxD;EAAE,OAAO;EAAe,WAAW;EAAQ,KAAK;EAAQ;CACxD;EAAE,OAAO;EAAQ,WAAW;EAAQ,KAAK;EAAQ;CAClD;AAED,MAAM,kBAAkB,CAAC,GAAG,eAAe;AAG3C,MAAM,oBAAoB,QAAe,YACvC,CAAC,GAAG,OAAO,CACR,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,WAAW,IAAI,EAAE,WAAW,KAAK,EAAG,CACrE,KAAK,GAAG,UAAU;CACjB,IAAI,YAAY,EAAE,QAAQ;AAC1B,KAAI,EAAE,QAAQ,SAAS,WAAW,EAAE,QAAQ,OAAO,KACjD,aAAY,GAAG,EAAE,OAAO,KAAK,GAAG,EAAE,OAAO,MAAM;AAGjD,QAAO;EACL,KAAK;EACL,OACE,4CAAC;GACE,EAAE;GACF,aACC,2CAAC;IACC,OAAO;KACL,OAAOC,QAAM;KACb,YAAY;KACZ,aAAa;KACd;cAEA;KACI;GAER,EAAE,WACD,2CAAC;IAAK,OAAO,EAAE,OAAOA,QAAM,YAAY;cAAE;KAAQ,GAElD,2CAAC;IAAK,OAAO,EAAE,OAAOA,QAAM,cAAc;cAAE;KAAe;MAExD;EAET,MAAM,EAAE,eAAe;EACvB,MAAM,EAAE,QAAQ,OAAO,EAAE,OAAO,KAAK,KAAK,MAAc,2CAACC,sBAAa,KAAJ,EAAY,CAAC,GAAG;EACnF;EACD;AAGN,MAAM,mBAAmB,SAAc,YAAe;AACpD,KAAI,CAAC,QAAS,QAAO,EAAE;AACvB,QAAO,OAAO,QAAQ,QAAQ,CAC3B,MAAM,GAAG,IAAS,GAAG,OAAa,EAAE,aAAa,EAAE,WAAW,IAAI,EAAE,WAAW,KAAK,EAAG,CACvF,KAAK,CAAC,MAAM,SAAc,QAAQ;EACjC,IAAI,YAAY,OAAO,QAAQ;AAC/B,MAAI,OAAO,QAAQ,SAAS,WAAW,OAAO,QAAQ,OAAO,KAC3D,aAAY,GAAG,OAAO,OAAO,KAAK,GAAG,OAAO,OAAO,MAAM;AAG3D,SAAO;GACL,KAAK;GACL,OACE,4CAAC;IACE;IACA,aACC,2CAAC;KACC,OAAO;MACL,OAAOD,QAAM;MACb,YAAY;MACZ,aAAa;MACd;eAEA;MACI;IAER,OAAO,WACN,2CAAC;KAAK,OAAO,EAAE,OAAOA,QAAM,YAAY;eAAE;MAAQ,GAElD,2CAAC;KAAK,OAAO,EAAE,OAAOA,QAAM,cAAc;eAAE;MAAe;QAhBpD,IAkBJ;GAET,MAAM,OAAO,eAAe;GAC5B,MAAM,OAAO,QAAQ,OACjB,OAAO,OAAO,KAAK,KAAK,MAAc,2CAACC,sBAAa,KAAJ,EAAY,CAAC,GAC7D;GACL;GACD;;AAGN,MAAM,wBAAwB,aAAkB,YAAe;AAC7D,KAAI,CAAC,aAAa,QAAS,QAAO,EAAE;CAEpC,MAAM,cAAc,OAAO,KAAK,YAAY,QAAQ,CAAC;CACrD,MAAM,SAAS,YAAY,QAAQ,cAAc;AACjD,KAAI,CAAC,OAAQ,QAAO,EAAE;CAEtB,MAAMC,aAAkC,OAAO,cAAc,EAAE;CAC/D,MAAMC,WAAqB,OAAO,YAAY,EAAE;AAEhD,QAAO,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,MAAM,OAAsB,SAAS;EAC3E,KAAK;EACL,OACE,4CAAC;GACE;GACA,KAAK,QACJ,2CAAC;IACC,OAAO;KACL,OAAOH,QAAM;KACb,YAAY;KACZ,aAAa;KACd;cAEA,KAAK;KACD;GAER,SAAS,SAAS,KAAK,GACtB,2CAAC;IAAK,OAAO,EAAE,OAAOA,QAAM,YAAY;cAAE;KAAQ,GAElD,2CAAC;IAAK,OAAO,EAAE,OAAOA,QAAM,cAAc;cAAE;KAAe;MAExD;EAET,MAAM,KAAK,eAAe;EAC1B,MAAM,KAAK,OAAO,KAAK,KAAK,KAAK,MAAc,2CAACC,sBAAa,KAAJ,EAAY,CAAC,GAAG;EAC1E,EAAE;;AAGL,MAAaG,qBAA+B;CAC1C,MAAM,EACJ,kBACA,aACA,oBACA,oBACA,mBACA,eACA,wBACEC,eAAU,EAAE,WAAW,KAAK;CAChC,MAAM,CAAC,cAAc,uCAAoC,SAAS;CAElE,MAAM,EAAE,mBAAUC,WAAM,UAAU;CAElC,MAAM,EAAE,OAAO,SAAS,iBAAiB,SAAO,WAAW;GACxD,MAAM,0BAA0B,GAAG;GAClC,SAAS;GACT,eAAe;GACf,KAAKN,QAAM;GACX,QAAQ;GACT;GACA,MAAM,UAAU,GAAG;GAClB,OAAO;GACP,QAAQ;GACT;GACA,MAAM,OAAO,GAAG;GACf,YAAY;GACZ,cAAcA,QAAM;GACpB,SAASA,QAAM;GACf,YAAY;GACZ,YAAY;GACb;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,KAAKA,QAAM;GACX,YAAY;GACZ,cAAcA,QAAM;GACrB;GACA,MAAM,eAAe,GAAG;GACvB,cAAcA,QAAM;GACpB,iBAAiBA,QAAM;GACvB,kBAAkB;IAChB,WAAW;IACX,cAAc;IACd,SAAS;IACT,iBAAiBA,QAAM;IACxB;GACD,kBAAkB;IAChB,SAAS;IACT,iBAAiBA,QAAM;IACvB,iBAAiB,EACf,YAAY,KACb;IACF;GACD,gBAAgB,EACd,iBAAiB,GAAGA,QAAM,YAAY,cACvC;GACD,gCAAgC,EAC9B,iBAAiB,GAAGA,QAAM,YAAY,cACvC;GACD,gCAAgC,EAC9B,iBAAiB,GAAGA,QAAM,YAAY,cACvC;GACF;GACA,MAAM,UAAU,GAAG,EAClB,UAAU,EAAE,YAAY,GAAGA,QAAM,gBAAgB,cAAc,EAChE;GACA,MAAM,WAAW,GAAG,EACnB,UAAU,EAAE,YAAY,GAAGA,QAAM,cAAc,cAAc,EAC9D;EACF,EAAE;CAEH,MAAM,cACJ,oBAAoB,kBAAkB;CACxC,MAAM,eAAe,iBACnB,kBAAkB,YAAY,QAAQ,MAAM,EAAE,OAAO,SAAS,IAAI,EAAE,EACpEA,QACD;CACD,MAAM,aAAa,iBACjB,kBAAkB,YAAY,QAAQ,MAAM,EAAE,OAAO,OAAO,IAAI,EAAE,EAClEA,QACD;CACD,MAAM,cAAc,iBAClB,kBAAkB,YAAY,QAAQ,MAAM,EAAE,OAAO,QAAQ,IAAI,EAAE,EACnEA,QACD;CACD,MAAM,kBAAkB,qBAAqB,kBAAkB,aAAaA,QAAM;CAGlF,MAAMO,cAA4B;EAChC;GACE,KAAK;GACL,OAAO;GACP,UACE,2CAACC;IACC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ;IACA,MAAK;IACL,eAAe,GAAG,QAAQ,GAAG,MAAM,MAAM,IAAI,aAAa,UAAU;KACpE;GAEL;EACD;GACE,KAAK;GACL,OAAO;GACP,UACE,2CAACA;IACC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ;IACA,MAAK;IACL,eAAe,GAAG,QAAQ,GAAG,MAAM,MAAM,IAAI,aAAa,UAAU;KACpE;GAEL;EACD;GACE,KAAK;GACL,OAAO;GACP,UACE,2CAACA;IACC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ;IACA,MAAK;IACL,eAAe,GAAG,QAAQ,GAAG,MAAM,MAAM,IAAI,aAAa,UAAU;KACpE;GAEL;EACD,GAAI,gBAAgB,SAAS,IACzB,CACE;GACE,KAAK;GACL,OAAO;GACP,UACE,2CAACA;IACC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ;IACA,MAAK;IACL,eAAe,GAAG,QAAQ,GAAG,MAAM,MAAM,IAAI,aAAa,UAAU;KACpE;GAEL,CACF,GACD,EAAE;EACP,CAAC,QAAQ,MAAuB,MAAM,KAAK;AAI5C,4BAAgB;EACd,MAAM,WAAW,YAAY,IAAI,OAAO;AACxC,kBAAgB,SAAS;AACzB,sBAAoB,SAAS;IAC5B,CAAC,kBAAkB,GAAG,CAAC;CAG1B,MAAM,mBADc,kBAAkB,YAAY,sBAAsB,OACnC;CAErC,MAAM,qBAAqB,gBAAgB,iBAAiBR,QAAM;AAElE,QACE,2CAAC;EAAI,WAAW,GAAG,0BAA0B;YAE3C,4CAAC;GAAI,WAAW,GAAG,UAAU;;IAE3B,4CAAC;KAAI,WAAW,GAAG,aAAa;gBAC9B,2CAACS;MACC,OAAM;MACN,SAAQ;MACR,MAAM,2CAACC,oCAAe;MACtB,UAAU,MAAM;AACd,SAAE,gBAAgB;AAClB,0BAAmB,aAAa,GAAa;AAC7C,yBAAkB,MAAM;;OAElB,EAEV,2CAACC,mBACC,OAAO;MACL;OACE,MAAM;OACN,OAAO,2CAAC,oBAAM,aAAa,SAAS,aAAkB;OACtD,UAAU,MAAM;AACd,UAAE,gBAAgB;AAClB,2BAAmB,aAAa,GAAa;AAC7C,0BAAkB,MAAM;;OAE3B;MACD;OACE,MAAM;OACN,UAAU,MAAM;AACd,UAAE,gBAAgB;AAClB,2BAAmB,aAAa,GAAa;AAC7C,0BAAkB,MAAM;AACxB,sBAAc,kBAAkB,WAAW,UAAU;;OAEvD,OACE,2CAAC;QACC,OAAO;SACL,SAAS;SACT,eAAe;SACf,YAAY;SACZ,OAAOX,QAAM;SACb,KAAK;SACN;kBAED,2CAAC,oBAAM,kBAAkB,WAAW,YAAiB;SACnD;OAEP;MACD,EACE,OACE,2CAACY;OAAQ,OAAO,kBAAkB,WAAW;iBAC3C,2CAAC;QACC,OAAO;SACL,UAAU;SACV,cAAc;SACd,YAAY;SACZ,SAAS;SACT,UAAU;SACX;kBAEA,kBAAkB,WAAW;SACzB;QACC,EAEb;MACF,GACD;MACE;IACN,4CAACC;KAAM,OAAO;KAAG,OAAO;MAAE,SAAS;MAAQ,YAAY;MAAU,KAAK;MAAI,QAAQ;MAAG;gBACnF,2CAACZ;MACC,OAAO;OACL,iBAAiB,aAAa;OAC9B,OAAO,aAAa;OACpB,QAAQ;OACR,OAAO;OACP,QAAQ;OACR,WAAW;OACX,YAAY;OACb;gBAEA,kBAAkB;OACf,EACN,2CAACW;MAAQ,OAAO,kBAAkB,WAAW;gBAC3C,2CAAC;OACC,OAAO;QACL,UAAU;QACV,cAAc;QACd,YAAY;QACb;iBAEA,kBAAkB,SAAS,QAAQ,kBAAkB,QAAQ,GAAG,IAAI;QAChE;OACC;MACJ;IAuCR,2CAAC;KAAU,OAAO;MAAE,OAAOZ,QAAM;MAAmB,cAAc;MAAU;eACzE,kBAAkB,eAAe;MACxB;IAGX,YAAY,SAAS,KACpB,2CAACc;KACC,OAAM;KACN,WAAW,GAAG,eAAe;KAC7B,OAAO;MAAE,cAAc;MAAU,iBAAiBd,QAAM;MAAa;KACrE,QAAQ,EAAE,MAAM,EAAE,iBAAiBA,QAAM,aAAa,EAAE;eAExD,2CAACe;MACC,WAAW;MACX,WAAW,QAAQ;AACjB,uBAAgB,IAAI;AACpB,2BAAoB,IAAI;;MAE1B,OAAO;OACP;MACG;IAKT,2CAACD;KACC,OAAM;KACN,WAAW,GAAG,eAAe;KAC7B,OACE,mBAAmB,SAAS,KAC1B,4CAACb,uBACC,2CAAC,UACC,OAAO;MACL,YAAY,kBAAkB,mBAA6B;MAC3D,cAAc;MACd,SAAS;MACT,OAAO;MACP,QAAQ;MACR,aAAa;MACd,GACK,EACR,2CAAC,oBAAM,qBAA0B,IAC7B;eAIV,2CAACO;MACC,SAAS;MACT,YAAY;MACZ,YAAY;MACZ;MACA,MAAK;MACL,eAAe,GAAG,QAAQ,GAAG,MAAM,MAAM,IAAI,aAAa,UAAU;OACpE;MACG;;IACH;GACF;;;;;AC3eV,MAAM,eAAe,UACnB,4CAAC;CAAI,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;YACjG,2CAAC;EAAK,GAAE;EAAiG,QAAO;EAAQ,aAAY;EAAM,eAAc;EAAQ,gBAAe;GAAU,EACzL,2CAAC;EAAK,GAAE;EAAoR,QAAO;EAAQ,aAAY;EAAM,eAAc;EAAQ,gBAAe;GAAU;EACxW;AAGR,0BAAe;;;;ACGf,MAAaQ,eAIP,EAAE,eAAe,mBAAmB,6BAA6B;CACrE,MAAM,EAAE,gBAAgB,oBAAoBC,eAAU,EAAE,WAAW,KAAK;CACxE,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,gBAAgB,SAAO,WAAW;GACvE,MAAM,sBAAsB,GAAG;GAC9B,OAAO;GACP,QAAQ;GACR,cAAcC,QAAM;GACpB,SAASA,QAAM;GACf,UAAU;GACV,UAAU;GACX;GACA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,gBAAgB;GACjB;GACA,MAAM,WAAW,GAAG;GACnB,QAAQ;GACR,SAAS;GACV;GACA,MAAM,QAAQ,GAAG;GAChB,YAAYA,QAAM;GAClB,YAAY;GACZ,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,OAAO,GAAG;GACf,OAAOA,QAAM;GACb,YAAYA,QAAM;GACnB;GACA,MAAM,uBAAuB,GAAG;GAC/B,OAAO;GACP,QAAQ;GACR,cAAcA,QAAM;GACrB;GACA,MAAM,eAAe,GAAG;GACvB,OAAO;GACP,QAAQ;GACR,cAAcA,QAAM;GACpB,iBAAiBA,SAAO,QAAQ;GAChC,UAAUA,QAAM,QAAQ;GACzB;EACF,EAAE;AAEH,QAAO,QACL,2CAAC;EACC,WAAW,GAAG,uBAAuB,CAAC,iBAAiB,SAAS,aAAa,GAAG;EAChF,OAAO,EACL,iBACE,mBAAmB,aAAaA,QAAM,cAAcA,QAAM,iBAC7D;YAEA,CAAC,iBAAiB,SACjB,4CAACC;GAAK,SAAQ;GAAS,OAAM;GAAS,KAAK;GAAU;GAAS,MAAM;;IAClE,2CAACC;KACC,QAAQF,QAAM;KACd,MAAMA,QAAM;KACZ,OAAO;KACP,QAAQ;MACR;IACF,4CAACC;KAAK,SAAQ;KAAS,OAAM;KAAS,KAAK;KAAU;gBACnD,2CAACE;MAAM,WAAW,GAAG,YAAY,QAAQ;MAAE,OAAO;gBAC/C,CAAC,gBAAgB,+BAA+B;OAC3C,EACR,2CAACC;MAAK,WAAW,GAAG,YAAY,OAAO;gBACpC,CAAC,gBACE,wEACA;OACC;MACF;IACN,CAAC,gBACA,2CAACC;KACC,MAAK;KACL,SAAS;KACT,MAAM,2CAACC,wBAAkB;KACzB,cAAa;KACb,WAAW,GAAG,uBAAuB;eACtC;MAEQ,GAET,2CAACD;KAAO,MAAK;KAAU,WAAW,GAAG,eAAe;KAAE,SAAS;eAAmB;MAEzE;;IAEN,GACL,mBAAmB,aACrB,2CAAC,iBAAe,GAEhB,2CAAC,YAAU;GAET,CACP;;;;;ACvGH,MAAM,EAAE,mCAAkBE;AAC1B,MAAM,EAAE,mBAAUC;AAYlB,MAAa,uBAAuB,EAClC,SACA,MACA,cACA,SACA,QACA,aAAa,OACb,mBAC8B;CAE9B,MAAM,WAAW,CADDC,iBAAe,CACL;CAE1B,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,wBAAwB,SAAO,WAAW;GAC/E,MAAM,OAAO,GAAG;GACf,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,SAAS,GAAGC,QAAM,WAAW,EAAE,KAAKA,QAAM,UAAU;GACpD,YAAYA,QAAM;GAClB,cAAcA,QAAM;GACpB,OAAO;IACN,8BAA8B,EAC7B,SAAS,GAAGA,QAAM,SAAS,KAAKA,QAAM,SAAS,KAChD;GACF;GACA,MAAM,gBAAgB,GAAG;GACxB,eAAe;GACf,KAAKA,QAAM;GACZ;GACA,MAAM,eAAe,GAAG;GACvB,OAAO;GACP,SAAS;GACT,gBAAgB;GACjB;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,OAAO;GACR;GACA,MAAM,kBAAkB,GAAG;GAC1B,OAAO;GACP,SAAS;GACT,YAAY;GACZ,gBAAgB;GACjB;GACA,MAAM,gBAAgB,GAAG;GACxB,MAAM;GACN,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,UAAU;GACV,UAAU;GACX;GACA,MAAM,aAAa,GAAG;GACrB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,YAAY;GACZ,YAAYA,QAAM;GAClB,SAAS;GACT,cAAcA,QAAM;GACpB,KAAK;GACN;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,YAAY;GACZ,KAAK;GACL,SAAS;GACT,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAYA,QAAM;GAClB,YAAY;GACb;GACA,MAAM,uBAAuB,GAAG;GAC/B,YAAYA,QAAM;GAClB,cAAcA,QAAM;GACpB,WAAW;GACX,UAAUA,QAAM;GAChB,YAAY;GACb;GACA,MAAM,gBAAgB,GAAG;GACxB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,UAAU;GACX;GACA,MAAM,UAAU,GAAG;GAClB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,MAAM;GACN,gBAAgB;GACjB;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,gBAAgB;GACjB;EACF,EAAE;AAGH,KAAI,SACF,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,QAAQ,gBAAgB;aACxC,gBAAgB,2CAAC;GAAI,WAAW,GAAG,eAAe;aAAG;IAAmB,EACzE,4CAAC;GAAI,WAAW,GAAG,kBAAkB;cACnC,4CAAC;IAAI,WAAW,GAAG,gBAAgB;eACjC,2CAACC;KAAQ,OAAO;eACd,2CAACC;MACC,OAAO;MACP;MACA,OAAO;OACL,QAAQ;OACR,YAAY;OACZ,OAAOF,QAAM;OACd;gBAEA;OACK;MACA,EACV,2CAAC;KAAK,WAAW,GAAG,aAAa;eAC/B,2CAACG,oCAAc,OAAO,EAAE,UAAU,IAAI,GAAI;MACrC;KACH,EACN,4CAAC;IAAI,WAAW,GAAG,gBAAgB;eACjC,2CAACC;KAAO,MAAK;KAAQ,SAAS;KAAS,UAAU,CAAC;eAAY;MAErD,EACT,2CAACA;KAAO,MAAK;KAAQ,MAAK;KAAU,UAAU,CAAC;KAAY,SAAS;eAAQ;MAEnE;KACL;IACF;GACF,CACP;AAIH,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,OAAO;;GACxB,2CAAC;IAAI,WAAW,GAAG,gBAAgB;cACjC,2CAACH;KAAQ,OAAO,GAAG,QAAQ;eACzB,4CAACC;MACC,OAAO;MACP,OAAO;OACL,QAAQ;OACR,YAAY;OACZ,YAAY;OACZ,UAAU;OACV,cAAc;OACd,OAAOF,QAAM;OACb,UAAU;OACV,MAAM;OACP;iBAEA,SAAQ;OACH;MACA;KACN;GAEN,4CAAC;IAAI,WAAW,GAAG,WAAW;eAC5B,4CAAC;KACC,WAAW,GAAG,iBAAiB,SAAS,SAAS,yBAAyB,GAAG;KAC7E,eAAe,aAAa,OAAO;gBAEnC,2CAAC;MAAK,WAAW,GAAG,gBAAgB;gBAClC,2CAACK,oCAAe;OACX;MAEA,EACT,4CAAC;KACC,WAAW,GAAG,iBAAiB,SAAS,SAAS,yBAAyB,GAAG;KAC7E,eAAe,aAAa,OAAO;gBAEnC,2CAAC;MAAK,WAAW,GAAG,gBAAgB;gBAClC,2CAACC,mCAAc;OACV;MAEA;KACL;GAEN,4CAAC;IAAI,WAAW,GAAG,UAAU;eAC3B,2CAACF;KAAO,MAAK;KAAQ,SAAS;KAAS,UAAU,CAAC;eAAY;MAErD,EACT,2CAACA;KAAO,MAAK;KAAQ,MAAK;KAAU,UAAU,CAAC;KAAY,SAAS;eAAQ;MAEnE;KACL;;GACF,CACP;;;;;AC5NH,MAAM,EAAE,mCAAkBG;AAiB1B,MAAa,kBAAkB,EAC7B,SACA,UACA,SACA,aACA,iBACA,qBACA,YAAY,OACZ,kBACA,uBACyB;CAEzB,MAAM,WAAW,CADDC,iBAAe,CACL;CAC1B,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,mBAAmB,SAAO,WAAW;GAC1E,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,cAAcC,QAAM;GACpB,UAAU;GACV,OAAO;GACR;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,SAAS,GAAGA,QAAM,UAAU,KAAKA,QAAM,UAAU;GACjD,YAAYA,QAAM;GAClB,cAAc,GAAGA,QAAM,aAAa,KAAKA,QAAM,aAAa;GAC7D;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACX,SAASA,QAAM;GACf,eAAgBA,QAAc,cAAc;GAC5C,YAAYA,QAAM;GAClB,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GACjE;GACA,MAAM,MAAM,GAAG;GACd,SAAS;GACT,KAAKA,QAAM;GACX,OAAO;GACR;GACA,MAAM,QAAQ,GAAG;GAChB,SAAS;GACT,eAAe;GACf,MAAM;GACN,UAAU;GACX;GACA,MAAM,QAAQ,GAAG;GAChB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,eAAeA,QAAM;GACrB,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG;GACzB,OAAOA,QAAM;GACb,UAAUA,QAAM;GACjB;GACA,MAAM,QAAQ,GAAG;GAChB,WAAW;GACX,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACb,WAAWA,QAAM;GAClB;EACF,EAAE;AAEH,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,OAAO;aACxB,4CAAC;GAAI,WAAW,GAAG,OAAO;cACxB,2CAACC;IAAM,OAAO;IAAG,OAAO;KAAE,QAAQ;KAAG,OAAOD,QAAM;KAAkB;cAAE;KAE9D,EACR,2CAACE;IACC,MAAK;IACL,MAAK;IACL,MAAM,2CAACC,uCAAiB,OAAO,EAAE,UAAU,IAAI,GAAI;IACnD,SAAS;IACT,OAAO;KACL,WAAW,YAAY,mBAAmB;KAC1C,YAAY;KACb;KACD;IACE,EAEL,CAAC,aACA,4CAAC;GAAI,WAAW,GAAG,OAAO;GAAE,OAAO,WAAW;IAAE,SAASH,QAAM;IAAW,eAAgBA,QAAc,cAAc;IAAI,GAAG;cAC3H,4CAAC;IAAI,WAAW,GAAG,MAAM;IAAE,OAAO,WAAW,EAAE,eAAe,UAAU,GAAG;;KACzE,4CAAC;MAAI,WAAW,GAAG,QAAQ;iBACzB,4CAAC;OAAI,WAAW,GAAG,QAAQ;kBACzB,2CAAC,oBAAK,aAAe,EACrB,2CAAC;QAAK,WAAW,GAAG,iBAAiB;kBAAE;SAAQ;QAC3C,EACN,2CAACI;OACC,MAAK;OACL,OAAO;OACP,WAAW,MAAM;AACf,wBAAgB,EAAE,OAAO,MAAM;AAC/B,4BAAoB;;OAEtB,WAAW;OACX;QACA;OACE;KAEN,4CAAC;MAAI,WAAW,GAAG,QAAQ;iBACzB,4CAAC;OAAI,WAAW,GAAG,QAAQ;kBACzB,2CAAC,oBAAK,wBAA0B,EAChC,2CAAC;QAAK,WAAW,GAAG,iBAAiB;kBAAE;SAAQ;QAC3C,EACN,2CAACA;OAAM,MAAK;OAAQ,OAAO;OAAU;QAAW;OAC5C;KAEN,4CAAC;MAAI,WAAW,GAAG,QAAQ;iBACzB,4CAAC;OAAI,WAAW,GAAG,QAAQ;kBACzB,2CAAC,oBAAK,YAAc,EACpB,2CAAC;QAAK,WAAW,GAAG,iBAAiB;kBAAE;SAAQ;QAC3C,EACN,2CAACA;OAAM,MAAK;OAAQ,OAAO;OAAS;QAAW;OAC3C;;KACF,EAEN,4CAAC;IAAI,WAAW,GAAG,QAAQ;IAAE,OAAO,EAAE,OAAO,QAAQ;eACnD,4CAAC;KAAI,WAAW,GAAG,QAAQ;gBACzB,2CAAC,oBAAK,gBAAkB,EACxB,2CAAC;MAAK,WAAW,GAAG,iBAAiB;gBAAE;OAAQ;MAC3C,EACN,2CAACA,WAAM;KACL,MAAK;KACL,OAAO;KACP,WAAW,MAAM;AACf,0BAAoB,EAAE,OAAO,MAAM;AACnC,0BAAoB;;KAEtB,WAAW;KACX;KACA,OAAO;MAAE,QAAQ;MAAI,QAAQ;MAAY;MACzC;KACE;IACF;GAEJ,CACP;;;;;AClKH,MAAM,SAAS,UACb,4CAAC;CAAI,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;;EAC1E,2CAAC;GAAK,IAAG;GAA+B,MAAK;aAC3C,2CAAC,UAAK,GAAE,4HAA4H;IAC/H;EACP,2CAAC;GAAK,GAAE;GAA6W,MAAK;GAAU,MAAK;IAAuC;EAChb,2CAAC;GAAK,GAAE;GAAuH,MAAK;IAAY;EAChJ,2CAAC;GAAK,GAAE;GAAuH,QAAO;GAAU,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EACjN,2CAAC;GAAK,GAAE;GAAqI,QAAO;GAAU,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EAC/N,2CAAC;GAAK,GAAE;GAAyJ,QAAO;GAAU,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EACnP,2CAAC;GAAK,GAAE;GAA0B,QAAO;GAAU,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EACpH,2CAAC;GAAK,GAAE;GAAwB,QAAO;GAAU,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;;EAC9G;AAGR,oBAAe;;;;ACff,MAAM,cAAc,UAClB,4CAAC;CAAI,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;;EACjG,2CAAC;GAAK,GAAE;GAAwF,QAAO;GAAQ,eAAc;GAAO,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EACrM,2CAAC;GAAK,GAAE;GAAW,QAAO;GAAQ,eAAc;GAAO,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;EACxH,2CAAC;GAAK,GAAE;GAAsB,QAAO;GAAQ,eAAc;GAAO,aAAY;GAAM,eAAc;GAAQ,gBAAe;IAAU;;EAC/H;AAGR,0BAAe;;;;ACRf,SAAgB,YAAe,OAAU,QAAgB,KAAQ;CAC/D,MAAM,CAAC,gBAAgB,yCAAiC,MAAM;AAE9D,4BAAgB;EACd,MAAM,UAAU,iBAAiB;AAC/B,qBAAkB,MAAM;KACvB,MAAM;AAET,eAAa;AACX,gBAAa,QAAQ;;IAEtB,CAAC,OAAO,MAAM,CAAC;AAElB,QAAO;;;;;ACUT,MAAM,mBAAmB;CACvB;EAAE,OAAO;EAAS,OAAO;EAAS;CAClC;EAAE,OAAO;EAAU,OAAO;EAAU;CACpC;EAAE,OAAO;EAAQ,OAAO;EAAQ;CACjC;AAED,MAAM,qBAAqB;CACzB;EAAE,OAAO;EAAU,OAAO;EAAU;CACpC;EAAE,OAAO;EAAU,OAAO;EAAU;CACpC;EAAE,OAAO;EAAW,OAAO;EAAW;CACtC;EAAE,OAAO;EAAW,OAAO;EAAW;CACtC;EAAE,OAAO;EAAS,OAAO;EAAS;CAClC;EAAE,OAAO;EAAU,OAAO;EAAU;CACrC;AAED,MAAaC,sBAAmD,EAC9D,MACA,SACA,OACA,QACA,OAAO,OACP,oBACI;CACJ,MAAM,CAAC,QAAQC,UAAK,SAAS;CAC7B,MAAM,CAAC,YAAY,iBAAiBC,aAAQ,YAAY;CACxD,MAAM,CAAC,kBAAkB,2CAAgC,MAAM;CAC/D,MAAM,CAAC,WAAW,oCAAyB,GAAG;CAC9C,MAAM,CAAC,WAAW,oCAAyB,GAAG;CAC9C,MAAM,CAAC,YAAY,qCAAoC,EAAE,CAAC;CAE1D,MAAM,YAAYD,UAAK,SAAS,QAAQ,KAAK;CAC7C,MAAM,UAAUA,UAAK,SAAS,MAAM,KAAK;CACzC,MAAM,YAAYA,UAAK,SAAS,QAAQ,KAAK;CAC7C,MAAM,gBAAgBA,UAAK,SAAS,YAAY,KAAK;CACrD,MAAM,CAAC,YAAY,qCAA0B,MAAM;AAEnD,4BAAgB;AACd,MAAI,MAAM;AACR,OAAI,SAAS,UAAU,eAAe;AACpC,SAAK,eAAe;KAClB,MAAM,cAAc;KACpB,IAAI,cAAc;KAClB,MAAM,cAAc;KACpB,UAAU,cAAc;KACxB,aAAa,cAAc;KAC5B,CAAC;AACF,kBAAc,cAAc,QAAQ,EAAE,CAAC;UAClC;AACL,SAAK,aAAa;AAClB,kBAAc,EAAE,CAAC;;AAEnB,gBAAa,GAAG;AAChB,iBAAc,MAAM;;IAErB,CAAC,KAAK,CAAC;CAEV,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,uBAAuB,SAAO,WAAW;GAC9E,MAAM,QAAQ,GAAG;GAChB,UAAU;GACV,YAAY;GACZ,OAAOE,QAAM;GACb,YAAY;GACZ,YAAY;GACb;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,eAAe;GACf,KAAK;GACL,oBAAoB,EAClB,cAAc,GACf;GACF;GACA,MAAM,QAAQ,GAAG;GAChB,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,WAAW,GAAG;GACnB,OAAOA,QAAM;GACb,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG;GACzB,OAAOA,QAAM;GACb,YAAY;GACZ,UAAUA,QAAM;GACjB;GACA,MAAM,kBAAkB,GAAG;GAC1B,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,YAAY;GACZ,KAAK;GACN;GACA,MAAM,eAAe,GAAG;GACvB,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,YAAY;GACZ,KAAK;GACN;GACA,MAAM,kBAAkB,GAAG;GAC1B,MAAM;GACN,UAAU;GACX;GACA,MAAM,eAAe,GAAG;GACvB,OAAO;GACP,QAAQ;GACR,YAAY;GACZ,aAAaA,QAAM;GACnB,OAAOA,QAAM;GACb,SAAS;GACT,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,WAAW;IACT,aAAa,GAAGA,QAAM,aAAa;IACnC,OAAO,GAAGA,QAAM,aAAa;IAC9B;GACF;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACX,WAAWA,QAAM;GAClB;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACZ;GACA,MAAM,wBAAwB,GAAG;GAChC,MAAM;GACN,UAAU;GACX;GACA,MAAM,mBAAmB,GAAG;GAC3B,QAAQ;GACR,UAAU;GACV,OAAOA,QAAM;GACb,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAcA,QAAM;GACpB,QAAQ;GACR,OAAO;GACR;GACA,MAAM,kBAAkB,GAAG;GAC1B,OAAO;GACP,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,cAAcA,QAAM;GACrB;GACA,MAAM,SAAS,GAAG;GACjB,SAAS;GACT,KAAK;GACN;GACA,MAAM,aAAa,GAAG,EACrB,MAAM,GACP;GACA,MAAM,eAAe,GAAG;GACvB,wBAAwB;IACtB,SAAS;IACT,cAAc;IACd,UAAU;IACX;GACD,qBAAqB;IACnB,SAAS;IACT,QAAQ;IACT;GACF;GACA,kDAAkD;GACjD,+BAA+B;GAC/B,SAAS;GACV;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,OAAO;GACR;GACA,MAAM,aAAa,GAAG;GACrB,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,gBAAgB,GAAG;GACxB,UAAU;GACV,KAAK;GACL,OAAO;GACP,OAAO;GACP,QAAQ;GACR,cAAc;GACd,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,OAAOA,QAAM;GACb,UAAU;GACV,YAAY;GACZ,WAAW;IACT,OAAOA,QAAM;IACb,iBAAiBA,QAAM;IACxB;GACF;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,QAAQ;GACR,OAAO;GACR;GACA,MAAM,mBAAmB,GAAG;GAC3B,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,aAAa;GACb,cAAc;GACd,eAAe;GACf,OAAO;GACP,iBAAiB;GAClB;EACF,EAAE;CAEH,MAAM,eAAe,SAAS,SAAS,aAAa,CAAC,EAAE,WAAW,MAAM,IAAI,WAAW;CAEvF,MAAM,kBAAkB;AACtB,OAAK,aAAa;AAClB,eAAa,GAAG;AAChB,gBAAc,EAAE,CAAC;;CAGnB,MAAM,oBAAoB;AACxB,aAAW;AACX,WAAS;;CAGX,MAAM,2BAA2B;EAC/B,MAAM,MAAM,UAAU,MAAM;AAC5B,MAAI,CAAC,OAAO,WAAW,SAAS,IAAI,CAAE;EACtC,MAAM,OAAO,CAAC,GAAG,YAAY,IAAI;AACjC,gBAAc,KAAK;AACnB,eAAa,GAAG;AAChB,MAAI,SAAS,UAAU,cACrB,eAAc,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,cAAc,QAAQ,EAAE,CAAC,CAAC;;CAIpF,MAAM,yBAAyB,QAAgB;EAC7C,MAAM,OAAO,WAAW,QAAQ,MAAM,MAAM,IAAI;AAChD,gBAAc,KAAK;AACnB,MAAI,SAAS,UAAU,cACrB,eAAc,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,cAAc,QAAQ,EAAE,CAAC,CAAC;;CAIpF,MAAM,0BAA0B,MAA6C;AAC3E,MAAI,EAAE,QAAQ,SAAS;AACrB,KAAE,gBAAgB;AAClB,uBAAoB;;;CAIxB,MAAM,iBAAiB,YAAY;AACjC,MAAI;AACF,SAAM,KAAK,gBAAgB;AAC3B,gBAAa,KAAK,cAAc,OAAO,IAAI,GAAG;AAC9C,uBAAoB,KAAK;UACnB;;CAKV,MAAM,sBAAsB;EAC1B,MAAM,SAAS,KAAK,gBAAgB;EACpC,MAAMC,UAA+B;GACnC,MAAM,OAAO;GACb,IAAI,OAAO;GACX,MAAM,OAAO;GACb,UAAU,OAAO,YAAY;GAC7B,aAAa,OAAO,eAAe;GACnC,MAAM,WAAW,SAAS,IAAI,aAAa;GAC5C;AACD,MAAI,SAAS,QAAQ;AACnB,YAAS,QAAQ;AACjB,cAAW,QAAQ,GAAG,UAAU,2CAA2C;SACtE;AACL,SAAM,QAAQ;AACd,cAAW,QAAQ,GAAG,UAAU,yCAAyC;;AAE3E,sBAAoB,MAAM;AAC1B,aAAW;AACX,WAAS;;AAGX,QAAO,QACL;EACG;EACD,2CAACC;GACO;GACN,SAAS;GACT,OAAO;GACP,UAAU;GACV,OACE,2CAAC;IAAK,WAAW,GAAG,QAAQ;cACzB,SAAS,SAAS,mBAAmB;KACjC;GAET,QAAQ;IACN,QAAQ;KACN,SAAS;KACT,cAAc,aAAaF,QAAM;KACjC,YAAYA,QAAM;KACnB;IACD,MAAM,EAAE,SAAS,QAAQ;IACzB,QAAQ;KACN,SAAS;KACT,YAAYA,QAAM;KAClB,WAAW,aAAaA,QAAM;KAC/B;IACF;GACD,QACE,4CAAC;IAAI,WAAW,GAAG,SAAS;eAC1B,2CAACG;KAAO,MAAK;KAAQ,WAAW,GAAG,aAAa;KAAE,SAAS;eAAa;MAE/D,EACT,2CAACA;KACC,MAAK;KACL,MAAK;KACL,MAAM,SAAS,SAAS,SAAY,2CAACC,oCAAe;KACpD,WAAW,GAAG,aAAa;KAC3B,UAAU,CAAC;KACX,SAAS;eAER,SAAS,SAAS,iBAAiB;MAC7B;KACL;aAGR,4CAACN;IACO;IACN,QAAO;IACP,cAAc;IACd,WAAW,GAAG,YAAY;IAC1B,eAAe;KAAE,UAAU;KAAM,IAAI;KAAS,MAAM;KAAU;IAC9D,sBAAsB;AACpB,SAAI,SAAS,UAAU,eAAe;MACpC,MAAM,UAAU,KAAK,gBAAgB;AAQrC,oBANE,QAAQ,SAAS,cAAc,QAC/B,QAAQ,OAAO,cAAc,MAC7B,QAAQ,SAAS,cAAc,QAC/B,QAAQ,aAAa,cAAc,aAClC,QAAQ,eAAe,SAAS,cAAc,eAAe,OAC9D,KAAK,UAAU,WAAW,KAAK,KAAK,UAAU,cAAc,QAAQ,EAAE,CAAC,CACnD;;;;KAK1B,2CAACA,UAAK;MACJ,MAAK;MACL,OACE,4CAAC;OAAK,WAAW,GAAG,QAAQ;kBAAE,kBACd,2CAAC;QAAK,WAAW,GAAG,WAAW;kBAAE;SAAQ;QAClD;MAET,OAAO,CACL;OAAE,UAAU;OAAM,SAAS;OAA8B,EACzD;OAAE,KAAK;OAAI,SAAS;OAAyB,CAC9C;gBAED,2CAACO;OAAM;OAAU,WAAW;OAAI,aAAY;QAAmB;OACrD;KAGZ,2CAACP,UAAK;MACJ,MAAK;MACL,OACE,4CAAC;OAAK,WAAW,GAAG,QAAQ;kBAAE,gBAChB,2CAAC;QAAK,WAAW,GAAG,WAAW;kBAAE;SAAQ;QAChD;MAET,OAAO,CAAC;OAAE,UAAU;OAAM,SAAS;OAA4B,CAAC;gBAEhE,2CAACQ;OAAO,MAAK;OAAQ,aAAY;OAAS,SAAS;QAAoB;OAC7D;KAGZ,2CAACR,UAAK;MACJ,MAAK;MACL,OACE,4CAAC;OAAK,WAAW,GAAG,QAAQ;kBAAE,kBACd,2CAAC;QAAK,WAAW,GAAG,WAAW;kBAAE;SAAQ;QAClD;MAET,OAAO,CAAC;OAAE,UAAU;OAAM,SAAS;OAA8B,CAAC;gBAElE,2CAACQ;OAAO,MAAK;OAAQ,aAAY;OAAS,SAAS;QAAsB;OAC/D;KAGZ,2CAACR,UAAK;MAAK,MAAK;gBACd,4CAAC;OAAI,WAAW,GAAG,aAAa;kBAC9B,2CAACS;QACC,SAAS,iBAAiB;QAC1B,WAAW,YAAY,KAAK,cAAc,YAAY,QAAQ;QAC9D,OAAO,EAAE,iBAAkB,iBAAiB,OAAQP,QAAM,eAAe,QAAW;SACpF,EACF,2CAAC;QAAK,WAAW,GAAG,eAAe;kBAAE;SAAgB;QACjD;OACI;KAGZ,2CAACF,UAAK;MACJ,MAAK;MACL,OAAO,2CAAC;OAAK,WAAW,GAAG,kBAAkB;iBAAE;QAAkB;MACjE,OAAO,CAAC;OAAE,KAAK;OAAI,SAAS;OAAyB,CAAC;gBAEtD,2CAACO,WAAM;OACL;OACA,WAAW;OACX,aAAY;OACZ,OAAO;QAAE,QAAQ;QAAI,QAAQ;QAAQ;QACrC;OACQ;KAGZ,4CAACP,UAAK;MACJ,OACE,4CAAC;OAAK,WAAW,GAAG,kBAAkB;kBAAE,QAClC,2CAAC;QAAK,WAAW,GAAG,iBAAiB;kBAAE;SAAiB;QACvD;iBAGT,4CAAC;OAAI,WAAW,GAAG,iBAAiB;kBAClC,2CAAC;QAAI,WAAW,GAAG,kBAAkB;kBACnC,2CAACO;SACC;SACA,WAAW;SACX,OAAO;SACP,aAAY;SACZ,WAAW,MAAM,aAAa,EAAE,OAAO,MAAM;SAC7C,WAAW;UACX;SACE,EACN,2CAACF;QACC;QACA,MAAM,2CAACC,oCAAe;QACtB,WAAW,GAAG,eAAe;QAC7B,SAAS;QACT,UAAU,CAAC,UAAU,MAAM;SAC3B;QACE,EACL,WAAW,SAAS,KACnB,2CAAC;OAAI,WAAW,GAAG,YAAY;iBAC5B,WAAW,KAAK,QACf,4CAAC;QAAc,WAAW,GAAG,iBAAiB;mBAC5C,2CAAC;SAAI,WAAW,GAAG,wBAAwB;mBACzC,2CAACC;UAAM;UAAS,OAAO;UAAK,WAAW,GAAG,mBAAmB;WAAI;UAC7D,EACN,2CAACF;SACC;SACA,MAAK;SACL,MAAM,2CAACK;UAAU,OAAO;UAAI,QAAQ;WAAM;SAC1C,WAAW,GAAG,kBAAkB;SAChC,eAAe,sBAAsB,IAAI;UACzC;UAVM,IAWJ,CACN;QACE;OAEE;;KACP;IACA;EAGT,4CAACC;GACC,MAAM;GACN,gBAAgB,oBAAoB,MAAM;GAC1C;GACA,OAAO;GACP,QAAQ;GACR,UAAU;GACV,OAAO;GACP,WAAU;GACV,QAAQ,EAAE,MAAM,EAAE,iBAAiB,oBAAoB,EAAE;;IAEzD,4CAAC;KAAI,WAAW,GAAG,YAAY;gBAC7B,4CAAC;MAAK,WAAW,GAAG,aAAa;;OAC9B,SAAS,SAAS,SAAS;OAAM;OAAE;OAAU;;OACzC,EACP,2CAAC;MACC,WAAW,GAAG,gBAAgB;MAC9B,eAAe,oBAAoB,MAAM;MACzC,cAAW;gBACZ;OAEQ;MACL;IAEN,2CAAC;KAAI,WAAW,GAAG,eAAe;eAChC,4CAAC;MAAK,WAAW,GAAG,mBAAmB;;OAAE;OACb,SAAS,SAAS,SAAS;OAAM;OAAE;OAAU;;OAClE;MACH;IAEN,4CAAC;KAAI,WAAW,GAAG,cAAc;gBAC/B,2CAACN;MACC,MAAK;MACL,eAAe,oBAAoB,MAAM;MACzC,OAAO;OAAE,cAAc;OAAG,QAAQ;OAAI,eAAe;OAAI;gBAC1D;OAEQ,EACT,2CAACA;MACC,MAAK;MACL,MAAK;MACL,SAAS;MACT,OAAO;OACL,cAAc;OACd,QAAQ;OACR,eAAe;OACf,iBAAiBH,QAAM;OACvB,aAAaA,QAAM;OACnB,WAAW,eAAeA,QAAM;OACjC;gBAEA,SAAS,SAAS,cAAc;OAC1B;MACL;;IACA;KACP,CACJ;;;;;ACtjBH,MAAM,EAAE,mCAAkBU;AAoB1B,MAAM,YAAY;AAElB,MAAM,sBAAsB,MAAc,YAA8C;CACtF,MAAM,IAAI,SAAS,MAAM,GAAG;AAC5B,KAAI,KAAK,OAAO,IAAI,IAAK,QAAO;EAAE,KAAKC,QAAM;EAAY,MAAMA,QAAM;EAAY;AACjF,QAAO;EAAE,KAAKA,QAAM;EAAc,MAAMA,QAAM;EAAW;;AAY3D,MAAM,sBAAsB,WAC1B,OAAO,KAAK,GAAG,SAAS;CACtB,KAAK;CACL,MAAM,EAAE;CACR,MAAM,EAAE;CACR,UAAU,EAAE;CACZ,aAAa,EAAE,eAAe;CAC9B,MAAM,EAAE,QAAQ,EAAE;CACnB,EAAE;AAwBL,MAAaC,oBAA+C,EAC1D,gBACA,YAAY,OACZ,kBACA,eACA,eACA,cACA,eACA,sBACA,sBACA,sBACA,gBACA,gBACA,iBACA,mBACA,wBACA,wBACA,yBACA,2BACA,OAAO,aACH;CACJ,MAAM,CAAC,YAAY,qCAAyC,KAAK;CACjE,MAAM,CAAC,iBAAiB,0CAA+B,MAAM;CAC7D,MAAM,CAAC,uBAAuB,gDAAoD,KAAK;CACvF,MAAM,CAAC,iBAAiB,0CAA+C,MAAM;CAC7E,MAAM,CAAC,cAAc,uCAA2C,KAAK;CACrE,MAAM,CAAC,kBAAkB,2CAMtB;EAAE,MAAM;EAAO,YAAY;EAAI,KAAK;EAAI,MAAM;EAAI,QAAQ;EAAW,CAAC;CACzE,MAAM,CAAC,mBAAmB,4DAA8C,IAAI,KAAK,CAAC;CAClF,MAAM,CAAC,oBAAoB,6DAA+C,IAAI,KAAK,CAAC;CACpF,MAAM,CAAC,qBAAqB,8CAA2D,EAAE,CAAC;CAC1F,MAAM,CAAC,cAAc,uCAAoD,UAAU;CACnF,MAAM,CAAC,cAAc,uDAAiD,IAAI,KAAK,CAAC;CAChF,MAAM,CAAC,eAAe,wDAAkD,IAAI,KAAK,CAAC;CAClF,MAAM,CAAC,iBAAiB,0CAAuD,EAAE,CAAC;CAClF,MAAM,CAAC,kBAAkB,2CAAwD,EAAE,CAAC;CACpF,MAAM,CAAC,mBAAmB,4CAA0D,EAAE,CAAC;CACvF,MAAM,CAAC,oBAAoB,6CAA2D,EAAE,CAAC;CACzF,MAAM,2BAA2B,YAAY,gBAAgB;CAC7D,MAAM,4BAA4B,YAAY,iBAAiB;CAC/D,MAAM,EAAE,oBAAoB,kBAAkB;CAC9C,MAAM,EAAE,OAAO,cAAcC,WAAM,UAAU;CAE7C,MAAM,WAAW,CADDC,iBAAe,CACL;CAE1B,MAAM,sBAAsB,SAAiB;AAC3C,wBAAsB,SAAS;GAC7B,MAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,OAAI,KAAK,IAAI,KAAK,CAAE,MAAK,OAAO,KAAK;OAChC,MAAK,IAAI,KAAK;AACnB,UAAO;IACP;;CAGJ,MAAM,uBAAuB,SAAiB;AAC5C,yBAAuB,SAAS;GAC9B,MAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,OAAI,KAAK,IAAI,KAAK,CAAE,MAAK,OAAO,KAAK;OAChC,MAAK,IAAI,KAAK;AACnB,UAAO;IACP;;CAGJ,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,qBAAqB,SAAO,WAAW;GAC5E,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,cAAcH,QAAM;GACpB,UAAU;GACV,OAAO;GACP,YAAY;GACb;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,SAAS,GAAGA,QAAM,UAAU,KAAKA,QAAM,UAAU;GACjD,YAAYA,QAAM;GAClB,cAAc,GAAGA,QAAM,aAAa,KAAKA,QAAM,aAAa;GAC7D;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACX,SAASA,QAAM;GACf,YAAYA,QAAM;GAClB,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GACjE;GACA,MAAM,YAAY,GAAG;GACpB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,cAAcA,QAAM;GACrB;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,OAAO;GACR;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,MAAM;GACN,YAAY;GACZ,KAAK;GACL,SAAS,GAAGA,QAAM,UAAU,KAAKA,QAAM,QAAQ;GAC/C,YAAYA,QAAM;GAClB,cAAcA,QAAM;GACpB,QAAQ;GACR,UAAU;GACX;GACA,MAAM,uBAAuB,GAAG;GAC/B,YAAY;GACZ,QAAQ,aAAaA,QAAM;GAC5B;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,OAAO;GACP,SAAS,KAAKA,QAAM,UAAU;GAC9B,cAAcA,QAAM;GACpB,QAAQ;GACR,UAAUA,QAAM;GAChB,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,WAAW;GACZ;GACA,MAAM,gBAAgB,GAAG;GACxB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,UAAU;GACV,cAAc;GACd,YAAY;GACb;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACX,SAASA,QAAM;GACf,YAAY,aAAaA,QAAM;GAC/B,aAAa,aAAaA,QAAM;GAChC,cAAc,aAAaA,QAAM;GACjC,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GACjE;GACA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,KAAK;GACL,OAAO;GACR;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,eAAe;GACf,MAAM;GACN,UAAU;GACX;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,eAAeA,QAAM;GACrB,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG,EACzB,OAAOA,QAAM,YACd;GACA,MAAM,iBAAiB,GAAG,EACzB,OAAOA,QAAM,sBACd;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,eAAeA,QAAM;GACrB,cAAc,aAAaA,QAAM;GACjC,OAAO;GACR;GACA,MAAM,gBAAgB,GAAG;GACxB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACb;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACX,SAAS,GAAGA,QAAM,UAAU,KAAKA,QAAM,SAAS;GAChD,QAAQ,aAAaA,QAAM;GAC3B,cAAcA,QAAM;GACpB,YAAYA,QAAM;GAClB,OAAO;GACP,QAAQ;GACR,YAAY;GACZ,WAAW,EAAE,YAAYA,QAAM,mBAAmB;GACnD;GACA,MAAM,iBAAiB,GAAG;GACzB,UAAU;GACV,YAAY;GACb;GACA,MAAM,uBAAuB,GAAG,EAC/B,WAAW,kBACZ;GACA,MAAM,aAAa,GAAG;GACrB,OAAO;GACP,UAAU;GACX;GACA,MAAM,YAAY,GAAG;GACpB,YAAY;GACZ,SAAS;GACT,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,OAAO;GACP,YAAY;GACZ,WAAW;GACX,SAAS;GACV;GACA,MAAM,cAAc,GAAG;GACtB,YAAY;GACZ,SAAS;GACT,wBAAwB;GACxB,yBAAyB;GACzB,SAAS;GACT,KAAK;GACN;GACA,MAAM,WAAW,GAAG;GACnB,aAAa;GACb,OAAOA,QAAM;GACb,WAAW;IACT,aAAa;IACb,OAAO;IACP,YAAY;IACb;GACF;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,eAAe;GACf,OAAO;GACR;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,OAAO;GACP,SAAS;GACT,cAAc,aAAaA,QAAM;GACjC,YAAYA,QAAM;GAClB,gBAAgB,EACd,cAAc,QACf;GACF;GACA,MAAM,gBAAgB,GAAG;GACxB,MAAM;GACN,SAAS;GACT,YAAY;GACb;GACA,MAAM,oBAAoB,GAAG;GAC5B,MAAM;GACN,YAAY;GACZ,SAAS;GACT,eAAe;GACf,KAAK;GACN;GACA,MAAM,qBAAqB,GAAG;GAC7B,YAAY;GACZ,UAAU;GACV,OAAOA,QAAM;GACd;GACA,MAAM,qBAAqB,GAAG;GAC7B,YAAY;GACZ,UAAU;GACV,OAAOA,QAAM;GACd;GACA,MAAM,+BAA+B,GAAG;GACvC,UAAU;GACV,cAAc;GACd,YAAY;GACZ,UAAU;GACX;GACA,MAAM,uBAAuB,GAAG;GAC/B,SAAS;GACT,eAAe;GACf,YAAY;GACZ,YAAY;GACZ,KAAK;GACN;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,YAAY;GACZ,eAAe;GACf,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAc;GACd,SAAS;GACT,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,QAAQ;GACT;GACA,MAAM,kBAAkB,GAAG;GAC1B,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,OAAO;GACP,QAAQ;GACR,cAAc;GACd,QAAQ,aAAaA,QAAM;GAC3B,YAAY;GACZ,UAAU;GACV,OAAOA,QAAM;GACb,QAAQ;GACT;GACA,MAAM,oBAAoB,GAAG;GAC5B,QAAQ;GACR,SAAS;GACT,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACb;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,KAAK;GACL,UAAU;GACV,YAAY;GACZ,YAAY;GACb;GACA,MAAM,aAAa,GAAG;GACrB,OAAO;GACP,QAAQ;GACR,cAAc;GACd,YAAY;GACZ,SAAS;GACV;GACA,MAAM,wBAAwB,GAAG;GAChC,SAAS;GACT,YAAY;GACZ,KAAK;GACL,OAAO;GACR;GACA,MAAM,mBAAmB,GAAG;GAC3B,YAAY;GACZ,UAAU;GACX;GACA,MAAM,gBAAgB,GAAG,EACxB,OAAO,KACR;GACA,MAAM,oBAAoB,GAAG;GAC5B,SAAS;GACT,YAAY;GACZ,KAAK;GACN;GACA,0BAA0B;GACzB,cAAc;GACd,WACE;GACF,sBAAsB;IACpB,QAAQ;IACR,WAAW;IACX,SAAS;IACT,cAAc;IACd,YAAY;IACZ,UAAU;IACV,YAAY;IACb;GACD,qCAAqC;IACnC,SAAS;IACT,YAAY;IACZ,KAAK;IACN;GACD,sCAAsC,EACpC,YAAY,GAAGA,QAAM,eAAe,cACrC;GACF;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,KAAK;GACN;GACA,MAAM,iBAAiB,GAAG;GACzB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,aAAaA,QAAM;GACnB,OAAOA,QAAM;GACb,WAAW;IACT,aAAa,GAAGA,QAAM,aAAa;IACnC,OAAO,GAAGA,QAAM,aAAa;IAC9B;GACF;GACA,MAAM,mBAAmB,GAAG;GAC3B,OAAO;GACP,QAAQ;GACR,SAAS;GACT,SAAS;GACT,YAAY;GACZ,gBAAgB;GACjB;GACA,qDAAqD;GACpD,+BAA+B;GAC/B,SAAS;GACV;GACA,MAAM,kBAAkB,GAAG;GAC1B,SAAS;GACT,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,OAAO;GACR;GACA,MAAM,mBAAmB,GAAG;GAC3B,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,sBAAsB,GAAG;GAC9B,UAAU;GACV,KAAK;GACL,OAAO;GACP,OAAO;GACP,QAAQ;GACR,cAAc;GACd,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,OAAOA,QAAM;GACb,UAAU;GACV,YAAY;GACZ,WAAW;IACT,OAAOA,QAAM;IACb,iBAAiBA,QAAM;IACxB;GACF;GACA,MAAM,qBAAqB,GAAG;GAC7B,SAAS;GACT,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,QAAQ;GACR,OAAO;GACR;GACA,MAAM,yBAAyB,GAAG;GACjC,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,oBAAoB,GAAG;GAC5B,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,aAAa;GACb,cAAc;GACd,eAAe;GACf,OAAO;GACP,iBAAiB;GAClB;GAEA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,eAAe;GACf,KAAK;GACL,OAAO;GACP,YAAY,aAAaA,QAAM;GAC/B,aAAa,aAAaA,QAAM;GAChC,cAAc,aAAaA,QAAM;GACjC,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GAChE,SAASA,QAAM;GAChB;GACA,MAAM,mBAAmB,GAAG;GAC3B,QAAQ,aAAaA,QAAM;GAC3B,cAAcA,QAAM;GACpB,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACX,YAAY;GACZ,OAAO;GACP,UAAU;GACV,gCAAgC;IAC9B,YAAYA,QAAM;IAClB,YAAY;IACZ,UAAU;IACV,SAAS,GAAGA,QAAM,UAAU;IAC5B,eAAe,GAAGA,QAAM,UAAU;IAClC,aAAa,GAAGA,QAAM,WAAW;IAClC;GACD,gCAAgC;IAC9B,SAAS,GAAGA,QAAM,UAAU;IAC5B,eAAe,GAAGA,QAAM,UAAU;IAClC,aAAa,GAAGA,QAAM,YAAY;IAClC,QAAQ;IACT;GACD,0BAA0B;IACxB,cAAc;IACd,QAAQ;IACT;GACD,wBAAwB,EACtB,cAAc,GACf;GACF;GACA,MAAM,qBAAqB,GAAG;GAC7B,SAAS;GACT,gBAAgB;GAChB,YAAY;GACZ,aAAa;GACb,cAAc;GACf;GACA,MAAM,oBAAoB,GAAG;GAC5B,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,wBAAwB,GAAG,EAChC,OAAO,IACR;GACA,MAAM,kBAAkB,GAAG;GAC1B,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,kBAAkB,GAAG;GAC1B,YAAY;GACZ,UAAU;GACV,OAAOA,QAAM;GACb,YAAY;GACZ,aAAa;GACd;GACA,MAAM,sBAAsB,GAAG,EAC9B,OAAOA,QAAM,YACd;GACA,MAAM,sBAAsB,GAAG;GAC9B,OAAOA,QAAM;GACb,UAAU;GACV,YAAY;GACb;GACA,MAAM,kBAAkB,GAAG;GAC1B,UAAU;GACV,OAAOA,QAAM;GACd;GACA,MAAM,sBAAsB,GAAG;GAC9B,SAAS;GACT,UAAU;GACV,KAAK;GACL,YAAY;GACb;GACA,MAAM,gBAAgB,GAAG;GACxB,YAAYA,QAAM;GAClB,QAAQ,aAAaA,QAAM;GAC3B,cAAc;GACd,SAAS;GACT,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,QAAQ;GACR,QAAQ;GACT;GACA,MAAM,eAAe,GAAG,EACvB,UAAU,EACR,YAAY,GAAGA,QAAM,cAAc,cACpC,EACF;GACA,MAAM,gBAAgB,GAAG,EACxB,UAAU,EACR,YAAY,GAAGA,QAAM,iBAAiB,cACvC,EACF;GACA,MAAM,gBAAgB,GAAG;GACxB,YAAYA,QAAM;GAClB,cAAcA,QAAM;GACpB,YAAY;GACZ,eAAe;GACf,KAAK;GACL,SAAS;GACT,eAAe;GACf,YAAY;GACZ,gBAAgB;GAChB,OAAO;GACP,gBAAgB;IACd,QAAQ;IACR,SAAS;IACT,eAAe;IACf,YAAY;IACZ,KAAK;IACN;GACD,sBAAsB;IACpB,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,gBAAgB;IACjB;GACD,kDAAkD;IAChD,OAAO;IACP,QAAQ;IACT;GACD,4BAA4B,EAC1B,QAAQ,GACT;GACF;GACA,MAAM,oBAAoB,GAAG;GAC5B,UAAU;GACV,YAAY;GACZ,OAAOA,QAAM;GACb,WAAW;GACX,YAAY;GACb;GACA,MAAM,aAAa,GAAG;GACrB,SAAS;GACT,gBAAgB;GAChB,WAAWA,QAAM;GACjB,+BAA+B;IAC7B,iBAAiBA,QAAM;IACvB,aAAaA,QAAM;IACnB,cAAcA,QAAM;IACpB,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,GAAG;KACD,OAAOA,QAAM;KACb,YAAYA,QAAM;KAClB,UAAUA,QAAM;KAChB,YAAY;KACZ,SAAS;KACT,YAAY;KACZ,gBAAgB;KAChB,QAAQ;KACT;IACF;GACD,wBAAwB;IACtB,cAAcA,QAAM;IACpB,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,GAAG;KACD,OAAOA,QAAM;KACb,YAAY;KACZ,UAAUA,QAAM;KACjB;IACF;GACD,kGACE;IACE,cAAcA,QAAM;IACpB,OAAO;IACP,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACb;GACJ;EACF,EAAE;CAEH,MAAM,uBAAuB,OAAqB;EAChD,MAAM,QAAQ,eAAe,GAAG,KAAK,OAAO,GAAG;AAC/C,gBAAc,MAAM;AACpB,kCAAgB,IAAI,KAAK,CAAC;AAC1B,mCAAiB,IAAI,KAAK,CAAC;AAC3B,MAAI,OAAO;AACT,mBAAgB,GAAG,GAAG;AACtB,OAAI,CAAC,oBAAoB,GAAG,KAAK;IAC/B,MAAM,OAAO,OAAO,KAAK,GAAG,aAAa,EAAE,CAAC;IAC5C,MAAM,cAAc,KAAK,SAAS,MAAM,GAAG,QAAQ,KAAK;AACxD,QAAI,YACF,yBAAwB,UAAU;KAAE,GAAG;MAAO,GAAG,KAAK;KAAa,EAAE;;;;CAM7E,MAAM,mBAAmB;EACvB;GACE,OAAO;GACP,KAAK;GACL,SAAS,GAAY,QACnB,4CAAC;IACC,2CAAC;KAAK,WAAW,GAAG,kBAAkB;eAAG,IAAI;MAAY;IACxD,IAAI,QAAQ,2CAAC;KAAK,WAAW,GAAG,kBAAkB;eAAG,IAAI;MAAY;IACrE,IAAI,WACH,2CAAC;KAAK,WAAW,GAAG,sBAAsB;eAAE;MAAQ,GAEpD,2CAAC;KAAK,WAAW,GAAG,sBAAsB;eAAE;MAAe;OAExD;GAEV;EACD;GACE,OAAO;GACP,KAAK;GACL,SAAS,GAAY,QACnB,2CAAC;IAAK,WAAW,GAAG,kBAAkB;cAAG,IAAI,eAAe;KAAY;GAE3E;EACD;GACE,OAAO;GACP,KAAK;GACL,SAAS,GAAY,QAAsB;AACzC,QAAI,CAAC,IAAI,QAAQ,IAAI,KAAK,WAAW,EAAG,QAAO,2CAAC,oBAAK,OAAS;IAC9D,MAAM,UAAU,IAAI,KAAK,MAAM,GAAG,EAAE;IACpC,MAAM,OAAO,IAAI,KAAK,MAAM,EAAE;AAC9B,WACE,4CAAC;KAAK,WAAW,GAAG,sBAAsB;gBACvC,QAAQ,KAAK,MACZ,2CAACI;MAAY,WAAW,GAAG,gBAAgB;gBACxC;QADO,EAEJ,CACN,EACD,KAAK,SAAS,KACb,2CAACC;MACC,OACE,2CAAC;OAAG,WAAW,GAAG,oBAAoB;iBACnC,KAAK,KAAK,MACT,2CAAC,kBAAY,KAAJ,EAAW,CACpB;QACC;MAEP,WAAU;gBAEV,4CAACD;OAAI,WAAW,GAAG,gBAAgB;kBAAE,KAAE,KAAK;QAAa;OACjD;MAEP;;GAGZ;EACF;AAED,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,OAAO;;GACxB,4CAAC;IAAI,WAAW,GAAG,OAAO;eACxB,2CAACE;KAAM,OAAO;KAAG,OAAO;MAAE,QAAQ;MAAG,OAAON,QAAM;MAAkB;eAAE;MAE9D,EACR,2CAACO;KACC,MAAK;KACL,MAAK;KACL,MAAM,2CAACC,uCAAiB,OAAO,EAAE,UAAU,IAAI,GAAI;KACnD,SAAS;KACT,OAAO;MACL,WAAW,YAAY,mBAAmB;MAC1C,YAAY;MACb;MACD;KACE;GAEL,CAAC,aACA,2CAAC;IAAI,WAAW,GAAG,OAAO;cACvB,OAAO,OAAO,eAAe,CAC3B,MAAM,CACN,KAAK,OAAO;KACX,MAAM,aAAa,eAAe,GAAG;KACrC,MAAM,cAAc,aAAa,GAAG;AAEpC,YACE,4CAAC;MACC,4CAAC;OAAI,WAAW,GAAG,eAAe;kBAChC,4CAAC;QACC,WAAW,GAAG,iBAAiB,aAAa,yBAAyB,GAAG;QACxE,eAAe,oBAAoB,GAAG;mBAEtC,2CAAC;SACC,WAAW,GAAG,eAAe;SAC7B,OAAO;UACL,OAAO,aAAa,YAAY,aAAa;UAC7C,aAAa,aAAa;UAC1B,iBAAiB,aAAa,aAAa,QAAQ;UACpD;mBAEA,GAAG;UACC,EACP,2CAACH;SAAQ,OAAO,GAAG;mBACjB,2CAAC;UAAK,WAAW,GAAG,gBAAgB;oBAAG,GAAG;WAAY;UAC9C;SACN,EACN,2CAACG;QACC,eAAe,oBAAoB,GAAG;QACtC,OAAO;SACL,UAAU;SACV,QAAQ;SACR,WAAW,aAAa,iBAAiB;SACzC,YAAY;SACZ,YAAY;SACZ,OAAO,aAAaR,QAAM,eAAeA,QAAM;SAChD;SACD;QACE;MAEL,cAAc,SAAS,UACtB,4CAAC;OAAI,WAAW,GAAG,aAAa;kBAE9B,4CAAC;QAAI,WAAW,GAAG,mBAAmB;mBACpC,2CAAC;SAAI,WAAW,GAAG,qBAAqB;mBACtC,2CAAC;UAAK,WAAW,GAAG,oBAAoB;oBAAE;WAAc;UACpD,EACN,2CAACS;SACC,YAAY,mBAAmB,eAAe,GAAG,OAAO,EAAE,CAAC;SAC3D,SAAS;SACT,YAAY;SACZ,eAAe,GAAG,QAChB,GAAG,MAAM,MAAM,IAAI,iBAAiB,gBAAgB;SAEtD,MAAK;SACL;UACA;SACE,EAGN,4CAAC;QAAI,WAAW,GAAG,mBAAmB;mBACpC,4CAAC;SAAI,WAAW,GAAG,qBAAqB;oBACtC,2CAAC;UAAK,WAAW,GAAG,oBAAoB;oBAAE;WAAe,EACzD,2CAACC;UACC,WAAW,GAAG,wBAAwB;UACtC,gBAAe;UACf,OACE,oBAAoB,GAAG,QACtB,OAAO,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,GAC5C,QACA,OAAO,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC;UAEtC,WAAW,QACT,wBAAwB,UAAU;WAChC,GAAG;YACF,GAAG,KAAK;WACV,EAAE;UAEL,SAAS,OAAO,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC,KAAK,UAAU;WACtD,OAAO;WACP,OACE,4CAAC;YAAK,WAAW,GAAG,eAAe;uBACjC,2CAAC;aACC,WAAW,GAAG,aAAa;aAC3B,OAAO,EAAE,YAAY,mBAAmB,MAAM,UAAU,CAAC,KAAK;cAC9D,EACF,2CAAC,oBAAM,OAAY;aACd;WAEV,EAAE;UACH,MAAK;WACL;UACE,EACN,2CAACD;SACC,YAAY,mBAAmB,uBAAuB,GAAG,OAAO,EAAE,CAAC;SACnE,SAAS;SACT,YAAY;SACZ,eAAe,GAAG,QAChB,GAAG,MAAM,MAAM,IAAI,iBAAiB,gBAAgB;SAEtD,MAAK;SACL;UACA;SACE;QACF;MAEP,cAAc,SAAS,UACtB,4CAAC;OAAI,WAAW,GAAG,gBAAgB;;QACjC,4CAAC;SACC,WAAW,GAAG,WAAW;SACzB,OAAO,WAAW,EAAE,eAAe,UAAU,GAAG;oBAEhD,4CAAC;UAAI,WAAW,GAAG,aAAa;qBAC9B,4CAAC;WAAI,WAAW,GAAG,cAAc;sBAC/B,2CAAC,oBAAK,kBAAoB,EAC1B,2CAAC;YAAK,WAAW,GAAG,iBAAiB;sBAAE;aAAQ;YAC3C,EACN,2CAACE;WACC,MAAK;WACL,OAAO,cAAc,GAAG,OAAO,GAAG,WAAW;WAC7C,WAAW,MAAM,qBAAqB,GAAG,IAAI,EAAE,OAAO,MAAM;YAC5D;WACE,EACN,4CAAC;UAAI,WAAW,GAAG,aAAa;qBAC9B,2CAAC;WAAI,WAAW,GAAG,cAAc;qBAC/B,2CAAC,oBAAK,iBAAmB;YACrB,EACN,2CAACD;WACC,MAAK;WACL,MAAK;WACL,OAAO,EAAE,OAAO,QAAQ;WACxB,aAAY;WACZ,OAAO,aAAa,GAAG,OAAO,GAAG,QAAQ,EAAE;WAC3C,SAAS,cAAc,KAAK,OAAO;YAAE,OAAO;YAAG,OAAO;YAAG,EAAE;WAC3D,WAAW,QAAQ,qBAAqB,GAAG,IAAI,IAAI;YACnD;WACE;UACF;QAEN,4CAAC;SAAI,WAAW,GAAG,aAAa;SAAE,OAAO,EAAE,OAAO,QAAQ;oBACxD,4CAAC;UAAI,WAAW,GAAG,cAAc;qBAC/B,2CAAC,oBAAK,gBAAkB,EACxB,2CAAC;WAAK,WAAW,GAAG,iBAAiB;qBAAE;YAAiB;WACpD,EACN,2CAACC,WAAM;UACL,OAAO,cAAc,GAAG,OAAO,GAAG,eAAe;UACjD,WAAW,MAAM,qBAAqB,GAAG,IAAI,EAAE,OAAO,MAAM;UAC5D,WAAW;UACX;UACA,OAAO;WAAE,QAAQ;WAAI,QAAQ;WAAY;WACzC;UACE;QAEN,4CAAC;SAAI,WAAW,GAAG,aAAa;SAAE,OAAO,EAAE,OAAO,QAAQ;;UACxD,2CAAC;WAAI,WAAW,GAAG,iBAAiB;qBACjC,WACC,qFACE,4CAAC;YACC,OAAO;aACL,SAAS;aACT,YAAY;aACZ,KAAKX,QAAM;aACZ;uBAED,2CAAC;aAAK,WAAW,GAAG,gBAAgB;uBAAE;cAAsB,EAC5D,2CAACO;aACC;aACA,MAAK;aACL,MAAM,2CAACK,sCAAiB;aACxB,MAAK;aACL,OAAO;cAAE,OAAO;cAAI,QAAQ;cAAI,SAAS;cAAG;aAC5C,WAAW,eAAe,GAAG,OAAO,EAAE,EAAE,WAAW;aACnD,eAAe;AACb,oCAAsB,UAAU;eAC9B,GAAG;gBACF,GAAG,KAAK,CAAC,KAAK,GAAG;eACnB,EAAE;;cAEL;aACE,EACN,2CAACL;YACC;YACA,MAAK;YACL,MAAM,2CAACM,oCAAe;YACtB,eAAe;AACb,6BAAgB,UAAU;AAC1B,gCAAmB,MAAM;AACzB,6BAAgB,KAAK;AACrB,sCAAyB,GAAG,GAAG;AAC/B,gCAAmB,KAAK;;sBAE3B;aAEQ,IACR,GAEH,qFACE,4CAAC;YAAI,OAAO;aAAE,SAAS;aAAQ,YAAY;aAAU,KAAK;aAAI;uBAC5D,2CAAC;aAAK,WAAW,GAAG,gBAAgB;uBAAE;cAAsB,EAC5D,2CAACF,WAAM;aACL,aAAY;aACZ,OAAO,EAAE,OAAO,KAAK;aACrB,WAAW,eAAe,GAAG,OAAO,EAAE,EAAE,WAAW;aACnD,OAAO,gBAAgB,GAAG,OAAO;aACjC,WAAW,MAAM;cACf,MAAM,MAAM,EAAE,OAAO;AACrB,kCAAoB,UAAU;eAAE,GAAG;gBAAO,GAAG,KAAK;eAAK,EAAE;AACzD,+BAAiB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;;aAExD;cACA;aACE,EACN,2CAACJ;YACC;YACA,MAAK;YACL,MAAM,2CAACM,oCAAe;YACtB,eAAe;AACb,6BAAgB,UAAU;AAC1B,gCAAmB,MAAM;AACzB,6BAAgB,KAAK;AACrB,sCAAyB,GAAG,GAAG;AAC/B,gCAAmB,KAAK;;sBAE3B;aAEQ,IACR;YAED;UACL,YAAY,kBAAkB,GAAG,OAChC,2CAACF,WAAM;WACL,aAAY;WACZ,OAAO;YAAE,OAAO;YAAQ,WAAW;YAAG;WACtC,WAAW,eAAe,GAAG,OAAO,EAAE,EAAE,WAAW;WACnD,OAAO,gBAAgB,GAAG,OAAO;WACjC,WAAW,MAAM;YACf,MAAM,MAAM,EAAE,OAAO;AACrB,gCAAoB,UAAU;aAAE,GAAG;cAAO,GAAG,KAAK;aAAK,EAAE;AACzD,6BAAiB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;;WAExD;WACA;YACA;WAEF,eAAe,GAAG,OAAO,EAAE,EAAE,WAAW,IACxC,2CAAC;WAAI,WAAW,GAAG,gBAAgB;qBACjC,2CAACG;YACC,OAAOA,WAAM;YACb,YAAY;aAAE,OAAO;aAAK,QAAQ;aAAK;YACvC,aAAa,2CAAC;aAAK,WAAW,GAAG,oBAAoB;uBAAE;cAAc;aACrE;YACE,UAEC;WACL,MAAM,aAAa,yBAAyB,GAAG,OAAO,IAAI,aAAa;WACvE,MAAM,gBAAgB,eAAe,GAAG,OAAO,EAAE,EAAE,QAAQ,MACzD,EAAE,KAAK,aAAa,CAAC,SAAS,UAAU,CACzC;AACD,eAAI,aAAa,WAAW,EAC1B,QACE,2CAAC;YAAI,WAAW,GAAG,gBAAgB;sBACjC,2CAACA;aACC,OAAOA,WAAM;aACb,YAAY;cAAE,OAAO;cAAK,QAAQ;cAAK;aACvC,aACE,2CAAC;cAAK,WAAW,GAAG,oBAAoB;wBAAE;eAAc;cAE1D;aACE;WAGV,MAAM,UAAU,aAAa,IAAI,GAAG,GAAG,IAAI;WAC3C,MAAM,iBAAiB,aAAa,OACjC,UAAU,KAAK,WAChB,UAAU,UACX;AACD,kBACE,qFACE,2CAAC;YACC,WAAW,GAAG,aAAa;YAC3B,OAAO,EAAE,WAAWd,QAAM,QAAQ;sBAEjC,eAAe,KAAK,OAAO,MAAM;aAChC,MAAM,OAAO,UAAU,KAAK,YAAY;AACxC,oBACE,2CAAC;cAAc,WAAW,GAAG,iBAAiB;wBAC3C,WACC,qFACE,4CAAC;eACC,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,KAAK;gBACL,MAAM;gBACN,UAAU;gBACX;0BAED,4CAAC;gBAAI,WAAW,GAAG,oBAAoB;2BACrC,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BAAE;kBAEpC,EACP,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BACtC,MAAM;kBACF;iBACH,EACN,4CAAC;gBACC,WAAW,GAAG,oBAAoB;gBAClC,OAAO;iBAAE,MAAM;iBAAG,UAAU;iBAAG;2BAE/B,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BAAE;kBAEpC,EACP,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BACtC,MAAM;kBACF;iBACH;gBACF,EACN,4CAAC;eACC,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,KAAKA,QAAM;gBACX,YAAYA,QAAM;gBAClB,cAAcA,QAAM;gBACpB,SAAS,KAAKA,QAAM,SAAS;gBAC7B,QAAQ;gBACR,YAAY;gBACb;0BAED,2CAACO;gBACC;gBACA,MAAM,2CAACQ;iBAAU,OAAO;iBAAI,QAAQ;kBAAM;gBAC1C,OAAO;iBACL,SAAS;iBACT,YAAY;iBACZ,OAAO;iBACP,QAAQ;iBACR,UAAU;iBACX;gBACD,WAAW,GAAG,mBAAmB;gBACjC,eACE,oBAAoB;iBAClB,MAAM;iBACN,YAAY,GAAG;iBACf;iBACA,MAAM,MAAM;iBACZ,QAAQ;iBACT,CAAC;iBAEJ,EACF,2CAACR;gBACC;gBACA,MAAM,2CAACS,oCAAe;gBACtB,WAAW,GAAG,iBAAiB;gBAC/B,eAAe;AACb,iCAAgB,UAAU;AAC1B,oCAAmB,OAAO;AAC1B,iCAAgB,IAAI;AACpB,0CAAyB,GAAG,GAAG;AAC/B,oCAAmB,KAAK;;iBAE1B;gBACE,IACL,GAEH,qFACE,4CAAC;eAAI,WAAW,GAAG,gBAAgB;;gBACjC,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACN,MAAM,QAAQ,MAAM,KAAK,SAAS,IACjC,4CAAC;kBAAK,WAAW,GAAG,uBAAuB;6BACzC,2CAAC;mBAAK,WAAW,GAAG,iBAAiB;6BAClC,MAAM,KAAK;oBACP,EACN,MAAM,KAAK,SAAS,KACnB,2CAACX;mBACC,OACE,2CAAC;oBACC,OAAO;qBAAE,QAAQ;qBAAG,aAAa;qBAAI;8BAEpC,MAAM,KAAK,KAAK,MACf,2CAAC,kBAAY,KAAJ,EAAW,CACpB;qBACC;mBAEP,WAAU;6BAEV,4CAAC;oBAAK,WAAW,GAAG,kBAAkB;+BAAE,KACpC,MAAM,KAAK,SAAS;qBACjB;oBACC;mBAEP,GAEP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC;kBAEL;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM,WAAW,QAAQ;mBACrB;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBACC,WAAW,GACT,sBACA,+BACD;4BAEA,MAAM,eAAe;mBACjB;kBACH;;gBACF,EACN,4CAAC;eAAI,WAAW,GAAG,gBAAgB;0BACjC,2CAACE;gBACC;gBACA,MAAK;gBACL,MAAM,2CAACQ;iBAAU,QAAQ;iBAAI,OAAO;kBAAM;gBAC1C,OAAO;iBAAE,SAAS;iBAAG,YAAY;iBAAG;gBACpC,WAAW,GAAG,mBAAmB;gBACjC,eACE,oBAAoB;iBAClB,MAAM;iBACN,YAAY,GAAG;iBACf;iBACA,MAAM,MAAM;iBACZ,QAAQ;iBACT,CAAC;iBAEJ,EACF,2CAACR;gBACC;gBACA,MAAM,2CAACS,oCAAe;gBACtB,WAAW,GAAG,iBAAiB;gBAC/B,eAAe;AACb,iCAAgB,UAAU;AAC1B,oCAAmB,OAAO;AAC1B,iCAAgB,IAAI;AACpB,0CAAyB,GAAG,GAAG;AAC/B,oCAAmB,KAAK;;iBAE1B;gBACE,IACL;gBAhMG,IAkMJ;cAER;aACE,EACL,aAAa,SAAS,aACrB,2CAACC;YACC,SAAS;YACT,UAAU;YACV,OAAO,aAAa;YACpB,WAAW,SACT,iBAAiB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;YAE3D,iBAAiB;YACjB,WAAW,GAAG,aAAa;aAC3B,IAEH;cAEH;UAEN,4CAAC;WACC,WAAW,GAAG,YAAY;WAC1B,OAAO,EAAE,WAAWjB,QAAM,QAAQ;WAClC,eAAe,mBAAmB,GAAG,GAAG;sBAExC,2CAACkB,mCACC,WAAW,GACT,kBACA,kBAAkB,IAAI,GAAG,GAAG,GAAG,yBAAyB,GACzD,GACD,EACF,4CAAC;YAAK,OAAO,EAAE,UAAUlB,QAAM,UAAU;uBAAE,YACjC,2CAAC;aAAK,OAAO,EAAE,OAAOA,QAAM,YAAY;uBAAE;cAAQ;aACrD;YACH;UACL,kBAAkB,IAAI,GAAG,GAAG,IAC3B,4CAAC;WAAI,WAAW,GAAG,aAAa;sBAC9B,2CAAC;YAAK,WAAW,GAAG,YAAY;sBAC7B,KAAK,WACH,eAAe,GAAG,OAAO,EAAE,EAAE,KAAK,OAAO;aACxC,MAAM,EAAE;aACR,IAAI,EAAE;aACN,MAAM,EAAE;aACR,UAAU,EAAE;aACZ,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;aACvD,GAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE;aACxD,EAAE,EACH,MACA,EACD;aACI,EACP,4CAAC;YAAI,WAAW,GAAG,cAAc;uBAC/B,2CAACO;aAAO;aAAM,MAAK;aAAQ,WAAW,GAAG,WAAW;uBAAE;cAE7C,EACT,2CAACA;aAAO;aAAM,MAAK;aAAQ,WAAW,GAAG,WAAW;uBAAE;cAE7C;aACL;YACF;;UAEJ;QAEN,4CAAC;SAAI,WAAW,GAAG,aAAa;SAAE,OAAO,EAAE,OAAO,QAAQ;;UACxD,2CAAC;WAAI,WAAW,GAAG,iBAAiB;qBACjC,WACC,qFACE,4CAAC;YACC,OAAO;aACL,SAAS;aACT,YAAY;aACZ,KAAKP,QAAM;aACZ;uBAED,2CAAC;aAAK,WAAW,GAAG,gBAAgB;uBAAE;cAAuB,EAC7D,2CAACO;aACC;aACA,MAAK;aACL,MAAM,2CAACK,sCAAiB;aACxB,MAAK;aACL,OAAO;cAAE,OAAO;cAAI,QAAQ;cAAI,SAAS;cAAG;aAC5C,WAAW,uBAAuB,GAAG,OAAO,EAAE,EAAE,WAAW;aAC3D,eAAe;AACb,qCAAuB,UAAU;eAC/B,GAAG;gBACF,GAAG,KAAK,CAAC,KAAK,GAAG;eACnB,EAAE;;cAEL;aACE,EACN,2CAACL;YACC;YACA,MAAK;YACL,MAAM,2CAACM,oCAAe;YACtB,eAAe;AACb,6BAAgB,WAAW;AAC3B,gCAAmB,MAAM;AACzB,6BAAgB,KAAK;AACrB,sCAAyB,GAAG,GAAG;AAC/B,gCAAmB,KAAK;;sBAE3B;aAEQ,IACR,GAEH,qFACE,4CAAC;YAAI,OAAO;aAAE,SAAS;aAAQ,YAAY;aAAU,KAAK;aAAI;uBAC5D,2CAAC;aAAK,WAAW,GAAG,gBAAgB;uBAAE;cAAuB,EAC7D,4CAAC;aAAI,WAAW,GAAG,oBAAoB;wBACrC,2CAACF,WAAM;cACL,aAAY;cACZ,OAAO,EAAE,OAAO,KAAK;cACrB,WAAW,uBAAuB,GAAG,OAAO,EAAE,EAAE,WAAW;cAC3D,OAAO,iBAAiB,GAAG,OAAO;cAClC,WAAW,MAAM;eACf,MAAM,MAAM,EAAE,OAAO;AACrB,oCAAqB,UAAU;gBAAE,GAAG;iBAAO,GAAG,KAAK;gBAAK,EAAE;AAC1D,iCAAkB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;;cAEzD;eACA,EACF,2CAACN;cACC,OAAO,oBAAoB,GAAG,MAAM,WAAW;cAC/C,WAAU;wBAEV,2CAACK;eACC,WAAW,GAAG,gBAAgB;eAC9B,gBAAe;eACf,OAAO,oBAAoB,GAAG,OAAO;eACrC,WAAW,QACT,wBAAwB,UAAU;gBAChC,GAAG;iBACF,GAAG,KAAK;gBACV,EAAE;eAEL,SAAS,OAAO,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC,KAAK,UAAU;gBACtD,OAAO;gBACP,OACE,4CAAC;iBAAK,WAAW,GAAG,eAAe;4BACjC,2CAAC;kBACC,WAAW,GAAG,aAAa;kBAC3B,OAAO,EACL,YAAY,mBAAmB,MAAM,UAAU,CAAC,KACjD;mBACD,EACF,2CAAC;kBACC,OAAO,EACL,OAAO,mBAAmB,MAAM,UAAU,CAAC,MAC5C;4BAEA;mBACI;kBACF;gBAEV,EAAE;eACH,eAAe,WAAW;gBACxB,MAAM,OAAO,OAAO;gBACpB,MAAM,EAAE,KAAK,SAAS,mBAAmB,MAAM,UAAU;gBACzD,MAAM,aAAa,oBAAoB,GAAG,QAAQ;AAClD,uBACE,2CAACL;iBAAQ,OAAM;iBAAS,WAAU;2BAChC,4CAAC;kBAAK,WAAW,GAAG,wBAAwB;;mBAC1C,2CAAC;oBACC,WAAW,GAAG,aAAa;oBAC3B,OAAO,EAAE,YAAY,KAAK;qBAC1B;mBACF,2CAAC;oBAAK,OAAO,EAAE,OAAO,MAAM;8BAAG;qBAAY;mBAC1C,cACC,2CAACc;oBACC,WAAW,GAAG,mBAAmB;oBACjC,OAAO,EAAE,OAAO,MAAM;qBACtB;;mBAEC;kBACC;;gBAGd;eACM;cACN;aACF,EACN,2CAACZ;YACC;YACA,MAAK;YACL,MAAM,2CAACM,oCAAe;YACtB,eAAe;AACb,6BAAgB,WAAW;AAC3B,gCAAmB,MAAM;AACzB,6BAAgB,KAAK;AACrB,sCAAyB,GAAG,GAAG;AAC/B,gCAAmB,KAAK;;sBAE3B;aAEQ,IACR;YAED;UACL,YAAY,mBAAmB,GAAG,OACjC,2CAACF,WAAM;WACL,aAAY;WACZ,OAAO;YAAE,OAAO;YAAQ,WAAW;YAAG;WACtC,WAAW,uBAAuB,GAAG,OAAO,EAAE,EAAE,WAAW;WAC3D,OAAO,iBAAiB,GAAG,OAAO;WAClC,WAAW,MAAM;YACf,MAAM,MAAM,EAAE,OAAO;AACrB,iCAAqB,UAAU;aAAE,GAAG;cAAO,GAAG,KAAK;aAAK,EAAE;AAC1D,8BAAkB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;;WAEzD;WACA;YACA;WAEF,uBAAuB,GAAG,OAAO,EAAE,EAAE,WAAW,IAChD,2CAAC;WAAI,WAAW,GAAG,gBAAgB;qBACjC,2CAACG;YACC,OAAOA,WAAM;YACb,YAAY;aAAE,OAAO;aAAK,QAAQ;aAAK;YACvC,aAAa,2CAAC;aAAK,WAAW,GAAG,oBAAoB;uBAAE;cAAc;aACrE;YACE,UAEC;WACL,MAAM,aAAa,0BAA0B,GAAG,OAAO,IAAI,aAAa;WACxE,MAAM,gBAAgB,uBAAuB,GAAG,OAAO,EAAE,EAAE,QAAQ,MACjE,EAAE,KAAK,aAAa,CAAC,SAAS,UAAU,CACzC;AACD,eAAI,aAAa,WAAW,EAC1B,QACE,2CAAC;YAAI,WAAW,GAAG,gBAAgB;sBACjC,2CAACA;aACC,OAAOA,WAAM;aACb,YAAY;cAAE,OAAO;cAAK,QAAQ;cAAK;aACvC,aACE,2CAAC;cAAK,WAAW,GAAG,oBAAoB;wBAAE;eAAc;cAE1D;aACE;WAGV,MAAM,UAAU,cAAc,IAAI,GAAG,GAAG,IAAI;WAC5C,MAAM,iBAAiB,aAAa,OACjC,UAAU,KAAK,WAChB,UAAU,UACX;AACD,kBACE,qFACE,2CAAC;YACC,WAAW,GAAG,aAAa;YAC3B,OAAO,EAAE,WAAWd,QAAM,QAAQ;sBAEjC,eAAe,KAAK,OAAO,MAAM;aAChC,MAAM,OAAO,UAAU,KAAK,YAAY;AACxC,oBACE,2CAAC;cAAc,WAAW,GAAG,iBAAiB;wBAC3C,WACC,qFACE,4CAAC;eACC,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,KAAK;gBACL,MAAM;gBACN,UAAU;gBACX;0BAED,4CAAC;gBAAI,WAAW,GAAG,oBAAoB;2BACrC,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BAAE;kBAEpC,EACP,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BACtC,MAAM;kBACF;iBACH,EACN,4CAAC;gBACC,WAAW,GAAG,oBAAoB;gBAClC,OAAO;iBAAE,MAAM;iBAAG,UAAU;iBAAG;2BAE/B,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BAAE;kBAEpC,EACP,2CAAC;iBAAK,WAAW,GAAG,qBAAqB;2BACtC,MAAM;kBACF;iBACH;gBACF,EACN,4CAAC;eACC,OAAO;gBACL,SAAS;gBACT,YAAY;gBACZ,KAAKA,QAAM;gBACX,YAAYA,QAAM;gBAClB,cAAcA,QAAM;gBACpB,SAAS,KAAKA,QAAM,SAAS;gBAC7B,QAAQ;gBACR,YAAY;gBACb;0BAED,2CAACO;gBACC;gBACA,MAAM,2CAACQ;iBAAU,OAAO;iBAAI,QAAQ;kBAAM;gBAC1C,OAAO;iBACL,SAAS;iBACT,YAAY;iBACZ,OAAO;iBACP,QAAQ;iBACR,UAAU;iBACX;gBACD,WAAW,GAAG,mBAAmB;gBACjC,eACE,oBAAoB;iBAClB,MAAM;iBACN,YAAY,GAAG;iBACf;iBACA,MAAM,MAAM;iBACZ,QAAQ;iBACT,CAAC;iBAEJ,EACF,2CAACR;gBACC;gBACA,MAAM,2CAACS,oCAAe;gBACtB,WAAW,GAAG,iBAAiB;gBAC/B,eAAe;AACb,iCAAgB,WAAW;AAC3B,oCAAmB,OAAO;AAC1B,iCAAgB,IAAI;AACpB,0CAAyB,GAAG,GAAG;AAC/B,oCAAmB,KAAK;;iBAE1B;gBACE,IACL,GAEH,qFACE,4CAAC;eAAI,WAAW,GAAG,gBAAgB;;gBACjC,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM;mBACF;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACN,MAAM,QAAQ,MAAM,KAAK,SAAS,IACjC,4CAAC;kBAAK,WAAW,GAAG,uBAAuB;6BACzC,2CAAC;mBAAK,WAAW,GAAG,iBAAiB;6BAClC,MAAM,KAAK;oBACP,EACN,MAAM,KAAK,SAAS,KACnB,2CAACX;mBACC,OACE,2CAAC;oBACC,OAAO;qBAAE,QAAQ;qBAAG,aAAa;qBAAI;8BAEpC,MAAM,KAAK,KAAK,MACf,2CAAC,kBAAY,KAAJ,EAAW,CACpB;qBACC;mBAEP,WAAU;6BAEV,4CAAC;oBAAK,WAAW,GAAG,kBAAkB;+BAAE,KACpC,MAAM,KAAK,SAAS;qBACjB;oBACC;mBAEP,GAEP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC;kBAEL;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BACtC,MAAM,WAAW,QAAQ;mBACrB;kBACH;gBACN,4CAAC;iBAAI,WAAW,GAAG,oBAAoB;4BACrC,2CAAC;kBAAK,WAAW,GAAG,qBAAqB;4BAAE;mBAEpC,EACP,2CAAC;kBACC,WAAW,GACT,sBACA,+BACD;4BAEA,MAAM,eAAe;mBACjB;kBACH;;gBACF,EACN,4CAAC;eAAI,WAAW,GAAG,gBAAgB;0BACjC,2CAACE;gBACC;gBACA,MAAM,2CAACS,oCAAe;gBACtB,WAAW,GAAG,iBAAiB;gBAC/B,eAAe;AACb,iCAAgB,WAAW;AAC3B,oCAAmB,OAAO;AAC1B,iCAAgB,IAAI;AACpB,0CAAyB,GAAG,GAAG;AAC/B,oCAAmB,KAAK;;iBAE1B,EACF,2CAACT;gBACC;gBACA,MAAK;gBACL,MAAM,2CAACQ;iBAAU,QAAQ;iBAAI,OAAO;kBAAM;gBAC1C,OAAO;iBAAE,SAAS;iBAAG,YAAY;iBAAG;gBACpC,WAAW,GAAG,mBAAmB;gBACjC,eACE,oBAAoB;iBAClB,MAAM;iBACN,YAAY,GAAG;iBACf;iBACA,MAAM,MAAM;iBACZ,QAAQ;iBACT,CAAC;iBAEJ;gBACE,IACL;gBAhMG,IAkMJ;cAER;aACE,EACL,aAAa,SAAS,aACrB,2CAACE;YACC,SAAS;YACT,UAAU;YACV,OAAO,aAAa;YACpB,WAAW,SACT,kBAAkB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC;YAE5D,iBAAiB;YACjB,WAAW,GAAG,aAAa;aAC3B,IAEH;cAEH;UAEN,4CAAC;WACC,WAAW,GAAG,YAAY;WAC1B,OAAO,EAAE,WAAWjB,QAAM,QAAQ;WAClC,eAAe,oBAAoB,GAAG,GAAG;;YAEzC,2CAACkB,mCACC,WAAW,GACT,kBACA,mBAAmB,IAAI,GAAG,GAAG,GAAG,yBAAyB,GAC1D,GACD;YACF,4CAAC;aAAK,OAAO,EAAE,UAAUlB,QAAM,UAAU;wBAAE,aAChC,2CAAC;cAAK,OAAO,EAAE,OAAOA,QAAM,YAAY;wBAAE;eAAQ;cACtD;YACP,2CAACoB,uBAAW,OAAO;aAAE,OAAO;aAAI,QAAQ;aAAI,GAAI;;YAC5C;UACL,mBAAmB,IAAI,GAAG,GAAG,IAC5B,4CAAC;WAAI,WAAW,GAAG,aAAa;sBAC9B,2CAAC;YAAK,WAAW,GAAG,YAAY;sBAC7B,KAAK,WACH,uBAAuB,GAAG,OAAO,EAAE,EAAE,KAAK,OAAO;aAChD,MAAM,EAAE;aACR,IAAI,EAAE;aACN,MAAM,EAAE;aACR,UAAU,EAAE;aACZ,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;aACvD,GAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE;aACxD,EAAE,EACH,MACA,EACD;aACI,EACP,4CAAC;YAAI,WAAW,GAAG,cAAc;uBAC/B,2CAACb;aAAO;aAAM,MAAK;aAAQ,WAAW,GAAG,WAAW;uBAAE;cAE7C,EACT,2CAACA;aAAO;aAAM,MAAK;aAAQ,WAAW,GAAG,WAAW;uBAAE;cAE7C;aACL;YACF;;UAEJ;;QACF;UAx9BA,GAAG,GA09BP;MAER;KACA;GAGR,4CAACc;IACC,MAAM,iBAAiB;IACvB,gBACE,oBAAoB;KAAE,MAAM;KAAO,YAAY;KAAI,KAAK;KAAI,MAAM;KAAI,QAAQ;KAAW,CAAC;IAE5F;IACA,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAU;IACV,QAAQ;KACN,SAAS;MAAE,SAAS;MAAG,cAAc;MAAG,UAAU;MAAU;KAC5D,MAAM;MAAE,SAAS;MAAG,QAAQ;MAAG;KAChC;;KAED,4CAAC;MAAI,WAAW,GAAG,kBAAkB;iBACnC,4CAAC;OAAK,WAAW,GAAG,mBAAmB;;QAAE;QAAQ,iBAAiB;QAAK;;QAAiB,EACxF,2CAAC;OACC,WAAW,GAAG,sBAAsB;OACpC,eACE,oBAAoB;QAClB,MAAM;QACN,YAAY;QACZ,KAAK;QACL,MAAM;QACN,QAAQ;QACT,CAAC;OAEJ,cAAW;iBACZ;QAEQ;OACL;KACN,2CAAC;MAAI,WAAW,GAAG,qBAAqB;gBACtC,4CAAC;OAAK,WAAW,GAAG,yBAAyB;;QAAE;QACZ,iBAAiB;QAAK;;QAClD;OACH;KACN,4CAAC;MAAI,WAAW,GAAG,oBAAoB;iBACrC,2CAACd;OACC,MAAK;OACL,eACE,oBAAoB;QAClB,MAAM;QACN,YAAY;QACZ,KAAK;QACL,MAAM;QACN,QAAQ;QACT,CAAC;OAEJ,OAAO;QAAE,cAAc;QAAG,QAAQ;QAAI,eAAe;QAAI;iBAC1D;QAEQ,EACT,2CAACA;OACC,MAAK;OACL;OACA,MAAK;OACL,eAAe;QACb,MAAM,OAAO,iBAAiB;AAE9B,YADY,iBAAiB,WACjB,YAAY;SACtB,MAAM,SAAS,uBAAuB,SAAS,EAAE,EAAE,SAAS;SAC5D,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,UAAU,CAAC;AACzD,cAAK,cAAc,IAAI,KAAK,IAAI,KAAK,QACnC,mBAAkB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;AACxD,qCAA4B,MAAM,iBAAiB,IAAI;eAClD;SACL,MAAM,SAAS,eAAe,SAAS,EAAE,EAAE,SAAS;SACpD,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,UAAU,CAAC;AACzD,cAAK,aAAa,IAAI,KAAK,IAAI,KAAK,QAClC,kBAAiB,SAAS,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;AACvD,6BAAoB,MAAM,iBAAiB,IAAI;;AAEjD,4BAAoB;SAClB,MAAM;SACN,YAAY;SACZ,KAAK;SACL,MAAM;SACN,QAAQ;SACT,CAAC;;OAEJ,OAAO;QAAE,cAAc;QAAG,QAAQ;QAAI,eAAe;QAAI;iBAC1D;QAEQ;OACL;;KACA;GAER,2CAAC;IACC,MAAM;IACN,MAAM;IACN,eACE,oBAAoB,UAAU,yBAAyB,iBAAiB,OACpE,iBAAiB,aACf,uBAAuB,yBAAyB,gBAChD,eAAe,yBAAyB,gBAC1C;IAEN,eAAe;AACb,wBAAmB,MAAM;AACzB,8BAAyB,KAAK;AAC9B,wBAAmB,MAAM;AACzB,qBAAgB,KAAK;;IAEvB,QAAQ,UAAU;AAChB,SAAI,sBACF,KAAI,iBAAiB,WACnB,0BAAyB,uBAAuB,MAAM;SAEtD,kBAAiB,uBAAuB,MAAM;AAGlD,wBAAmB,MAAM;AACzB,8BAAyB,KAAK;AAC9B,wBAAmB,MAAM;AACzB,qBAAgB,KAAK;;IAEvB,SAAS,UAAU;AACjB,SAAI,yBAAyB,iBAAiB,KAC5C,KAAI,iBAAiB,WACnB,2BAA0B,uBAAuB,cAAc,MAAM;SAErE,mBAAkB,uBAAuB,cAAc,MAAM;AAGjE,wBAAmB,MAAM;AACzB,8BAAyB,KAAK;AAC9B,wBAAmB,MAAM;AACzB,qBAAgB,KAAK;;KAEvB;;GACE,CACP;;;;;ACj8DH,MAAa,wBAAwB,EAAE,cAAyC;CAC9E,MAAM,EAAE,SAAS,OAAO,SAAS,yBAAyB,SAAO,WAAW;GACzE,MAAM,OAAO,GAAG;GACf,UAAU;GACV,KAAK;GACL,QAAQ;GACR,OAAO;GACP,WAAW;GACZ;GACA,MAAM,QAAQ,GAAG;GAChB,SAAS;GACT,UAAUe,QAAM;GAChB,YAAY;GACZ,cAAc;GACf;EACF,EAAE;AAEH,QAAO,QACL,2CAAC;EAAI,WAAW,GAAG,OAAO;YACxB,2CAACC;GACC,WAAW,GAAG,QAAQ;GACtB,MAAK;GACL,SAAQ;GACR;GACS;GACT,MAAM,2CAACC,+CAA0B;GACjC;IACA;GACE,CACP;;;;;ACpCH,MAAM,EAAE,kBAAkBC;AAwB1B,MAAaC,eAAqC,EAChD,MACA,YAAY,OACZ,kBACA,UACA,WACA,kBACI;CAEJ,MAAM,WAAW,CADD,eAAe,CACL;CAC1B,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,gBAAgB,SAAO,WAAW;GACvE,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,cAAcC,QAAM;GACpB,UAAU;GACV,OAAO;GACP,YAAY;GACb;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,SAAS,GAAGA,QAAM,UAAU,KAAKA,QAAM,UAAU;GACjD,YAAYA,QAAM;GAClB,cAAc,GAAGA,QAAM,aAAa,KAAKA,QAAM,aAAa;GAC7D;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACZ;GACA,MAAM,OAAO,GAAG;GACf,SAAS;GACT,eAAe;GACf,KAAK;GACL,SAASA,QAAM;GACf,YAAYA,QAAM;GAClB,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GACjE;GACA,MAAM,UAAU,GAAG;GAClB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,YAAYA,QAAM;GAClB,eAAeA,QAAM;GACrB,cAAcA,QAAM;GACpB,cAAc,aAAaA,QAAM;GACjC,OAAO;GACR;GACA,MAAM,eAAe,GAAG;GACvB,cAAc;GACd,eAAeA,QAAM;GACtB;GACA,MAAM,WAAW,GAAG;GACnB,SAAS;GACT,YAAY;GACZ,KAAK;GACL,MAAM;GACN,UAAU;GACX;GACA,MAAM,UAAU,GAAG;GAClB,SAAS;GACT,eAAe;GACf,KAAKA,QAAM;GACZ;GACA,MAAM,YAAY,GAAG;GACpB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,YAAY;GACb;GACA,MAAM,YAAY,GAAG;GACpB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG;GACzB,UAAUA,QAAM;GAChB,YAAY;GACZ,OAAOA,QAAM;GACb,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACb;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,KAAKA,QAAM;GACZ;GACA,MAAM,aAAa,GAAG;GACrB,OAAO;GACP,QAAQ;GACR,QAAQ,aAAaA,QAAM;GAC3B,cAAcA,QAAM;GACpB,SAAS;GACT,YAAY;GACZ,gBAAgB;GACjB;GACA,MAAM,WAAW,GAAG;GACnB,OAAO;GACP,QAAQ;GACR,QAAQ,aAAaA,QAAM;GAC3B,cAAcA,QAAM;GACpB,YAAYA,QAAM;GAClB,WAAW;GACX,SAAS;GACT,YAAY;GACZ,gBAAgB;GACjB;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,eAAe;GACf,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,eAAeA,QAAM;GACrB,cAAc,aAAaA,QAAM;GACjC,OAAO;GACP,WAAW;GACZ;GACA,MAAM,sBAAsB,GAAG;GAC9B,cAAc;GACd,eAAe;GAChB;GACA,MAAM,kBAAkB,GAAG;GAC1B,SAAS;GACT,eAAe;GACf,KAAK;GACL,MAAM;GACN,UAAU;GACV,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG;GACzB,SAAS;GACT,eAAe;GACf,KAAK;GACL,YAAY;GACZ,UAAU;GACV,UAAU;GACX;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,eAAe;GACf,KAAK;GACL,SAASA,QAAM;GACf,YAAYA,QAAM;GAClB,cAAc,OAAOA,QAAM,aAAa,KAAKA,QAAM,aAAa;GAChE,WAAW;GACZ;EACF,EAAE;AAEH,QAAO,QACL,4CAAC;EAAI,WAAW,GAAG,OAAO;aAExB,4CAAC;GAAI,WAAW,GAAG,OAAO;cACxB,2CAACC;IAAM,OAAO;IAAG,OAAO;KAAE,QAAQ;KAAG,OAAOD,QAAM;KAAkB;cAAE;KAE9D,EACR,4CAAC;IAAI,WAAW,GAAG,eAAe;eAChC,2CAACE;KACC;KACA,MAAK;KACL,MAAM,2CAACC,oCAAe;KACtB,SAAS;KACT,OAAO,EAAE,cAAcH,QAAM,cAAc;eAC5C;MAEQ,EACT,2CAACE;KACC,MAAK;KACL,MAAK;KACL,MAAM,2CAACE,uCAAiB,OAAO,EAAE,UAAU,IAAI,GAAI;KACnD,SAAS;KACT,OAAO;MACL,WAAW,YAAY,mBAAmB;MAC1C,YAAY;MACb;MACD;KACE;IACF,EAGL,CAAC,cACC,WAEC,2CAAC;GAAI,WAAW,GAAG,cAAc;aAC9B,KAAK,KAAK,KAAK,UAAU;AAExB,WACE,4CAAC;KAEC,WAAW,GAAG,kBAJH,UAAU,KAAK,SAAS,IAIM,wBAAwB,GAAG;gBAGpE,4CAAC;MAAI,WAAW,GAAG,kBAAkB;iBAEnC,4CAAC;OAAI,WAAW,GAAG,iBAAiB;kBAClC,2CAAC;QACC,WAAW,GAAG,YAAY;QAC1B,OAAO;SAAE,UAAUJ,QAAM;SAAU,YAAY;SAAQ;kBACxD;SAEM,EACP,2CAAC;QACC,WAAW,GAAG,YAAY;QAC1B,OAAO;SACL,UAAUA,QAAM;SAChB,YAAY;SACZ,UAAU;SACV,cAAc;SACd,YAAY;SACb;kBAEA,IAAI;SACA;QACH,EAEN,4CAAC;OAAI,WAAW,GAAG,iBAAiB;kBAClC,2CAAC;QACC,WAAW,GAAG,YAAY;QAC1B,OAAO;SAAE,UAAUA,QAAM;SAAU,YAAY;SAAQ;kBACxD;SAEM,EACP,2CAACK;QACC,OACE,IAAI,eAAe,IAAI,YAAY,SAAS,KAAK,IAAI,cAAc;kBAGrE,2CAAC;SACC,WAAW,GAAG,YAAY;SAC1B,OAAO;UACL,UAAUL,QAAM;UAChB,YAAY;UACZ,UAAU;UACV,cAAc;UACd,YAAY;UACZ,UAAU;UACV,SAAS;UACV;mBAEA,IAAI,eAAe;UACf;SACC;QACN;OACF,EAGN,4CAAC;MAAI,WAAW,GAAG,cAAc;MAAE,OAAO;OAAE,YAAY;OAAG,YAAY;OAAG;iBACxE,2CAACK;OACC,OAAO,IAAI,YAAY,gDAAgD;iBAEvE,2CAACH;QACC;QACA,MAAK;QACL,MAAM,2CAACI;SAAU,OAAO;SAAI,QAAQ;UAAM;QAC1C,UAAU,IAAI;QACd,eAAe,CAAC,IAAI,aAAa,cAAc,IAAI,KAAK;QACxD,OAAO;SAAE,OAAO;SAAI,QAAQ;SAAI,SAAS;SAAG,YAAY;SAAG;SAC3D;QACM,EACV,2CAACD;OACC,OAAO,IAAI,YAAY,gDAAgD;iBAEvE,2CAACH;QACC,MAAM,2CAACK,mCAAa,OAAO,EAAE,UAAU,IAAI,GAAI;QAC/C,UAAU,IAAI;QACd,eAAe,CAAC,IAAI,aAAa,YAAY,IAAI;QACjD,OAAO;SAAE,OAAO;SAAI,QAAQ;SAAI,SAAS;SAAG,YAAY;SAAG;SAC3D;QACM;OACN;OAjFD,IAAI,KAkFL;KAER;IACE,GAGN,2CAAC;GAAI,WAAW,GAAG,OAAO;aACvB,KAAK,KAAK,KAAK,UAAU;AAExB,WACE,4CAAC;KAAmB,WAAW,GAAG,WAFrB,UAAU,KAAK,SAAS,IAEiB,iBAAiB,GAAG;gBAExE,4CAAC;MAAI,WAAW,GAAG,WAAW;;OAC5B,4CAAC;QAAI,WAAW,GAAG,UAAU;QAAE,OAAO,EAAE,OAAO,KAAK;mBAClD,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAAE;UAAe,EACjD,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAAG,IAAI;UAAY;SAC/C;OACN,4CAAC;QAAI,WAAW,GAAG,UAAU;QAAE,OAAO,EAAE,OAAO,KAAK;mBAClD,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAAE;UAAkB,EACpD,2CAACF;SACC,OACE,IAAI,eAAe,IAAI,YAAY,SAAS,KAAK,IAAI,cAAc;mBAGrE,2CAAC;UACC,WAAW,GAAG,YAAY;UAC1B,OAAO;WACL,UAAU;WACV,cAAc;WACd,YAAY;WACZ,UAAU;WACV,SAAS;WACV;oBAEA,IAAI,eAAe;WACf;UACC;SACN;OACN,4CAAC;QAAI,WAAW,GAAG,UAAU;QAAE,OAAO;SAAE,MAAM;SAAG,UAAU;SAAG;mBAC5D,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAAE;UAAoB,EACrD,IAAI,kBACH,2CAACA;SAAQ,OAAO,IAAI,gBAAgB,SAAS,KAAK,IAAI,kBAAkB;mBACtE,2CAAC;UACC,MAAM,IAAI;UACV,QAAO;UACP,KAAI;UACJ,WAAW,GAAG,iBAAiB;UAC/B,OAAO;WACL,UAAU;WACV,cAAc;WACd,YAAY;WACZ,SAAS;WACV;oBAEA,IAAI;WACH;UACI,GAEV,2CAAC;SAAK,WAAW,GAAG,YAAY;mBAAE;UAAQ;SAExC;;OACF,EAEN,4CAAC;MAAI,WAAW,GAAG,cAAc;iBAC/B,2CAACA;OACC,OAAO,IAAI,YAAY,gDAAgD;iBAEvE,2CAACH;QACC;QACA,MAAK;QACL,MAAM,2CAACI;SAAU,OAAO;SAAI,QAAQ;UAAM;QAC1C,UAAU,IAAI;QACd,eAAe,CAAC,IAAI,aAAa,cAAc,IAAI,KAAK;QACxD,OAAO;SAAE,OAAO;SAAI,QAAQ;SAAI,SAAS;SAAG,YAAY;SAAG;SAC3D;QACM,EACV,2CAACD;OACC,OAAO,IAAI,YAAY,gDAAgD;iBAEvE,2CAACH;QACC,MAAM,2CAACK,mCAAa,OAAO,EAAE,UAAU,IAAI,GAAI;QAC/C,UAAU,IAAI;QACd,eAAe,CAAC,IAAI,aAAa,YAAY,IAAI;QACjD,OAAO;SAAE,OAAO;SAAI,QAAQ;SAAI,SAAS;SAAG,YAAY;SAAG;SAC3D;QACM;OACN;OA5EE,IAAI,KA6ER;KAER;IACE;GAEN,CACP;;;;;ACtXH,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AACvB,MAAM,iBAAiB;AAEvB,MAAaC,gBAAuC,EAClD,MACA,SACA,MACA,eACA,UACA,gBACI;CACJ,MAAM,CAAC,QAAQC,UAAK,SAAS;CAC7B,MAAM,CAAC,YAAY,iBAAiBC,aAAQ,YAAY;CACxD,MAAM,CAAC,kBAAkB,2CAAgC,MAAM;CAC/D,MAAM,CAAC,SAAS,kCAAuB,GAAG;CAC1C,MAAM,eAAeD,UAAK,SAAS,QAAQ,KAAK;CAChD,MAAM,cAAcA,UAAK,SAAS,2BAA2B,KAAK;CAClE,MAAM,cAAcA,UAAK,SAAS,oBAAoB,KAAK;CAE3D,MAAM,EAAE,SAAS,IAAI,mBAAU,SAAS,iBAAiB,SAAO,WAAW;GAExE,MAAM,QAAQ,GAAG;GAChB,UAAU;GACV,YAAY;GACZ,OAAOE,QAAM;GACb,YAAY;GACZ,YAAY;GACb;GAEA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,eAAe;GACf,KAAK;GACL,oBAAoB,EAClB,cAAc,GACf;GACF;GACA,MAAM,QAAQ,GAAG;GAChB,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,WAAW,GAAG;GACnB,OAAOA,QAAM;GACb,YAAY;GACb;GACA,MAAM,iBAAiB,GAAG;GACzB,OAAOA,QAAM;GACb,YAAY;GACZ,UAAUA,QAAM;GACjB;GACA,MAAM,kBAAkB,GAAG;GAC1B,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GACA,MAAM,iBAAiB,GAAG;GACzB,UAAUA,QAAM;GAChB,OAAOA,QAAM;GACd;GAEA,MAAM,SAAS,GAAG;GACjB,SAAS;GACT,KAAK;GACN;GACA,MAAM,aAAa,GAAG,EACrB,MAAM,GACP;GAEA,MAAM,eAAe,GAAG;GACvB,wBAAwB;IACtB,SAAS;IACT,cAAc;IACd,UAAU;IACX;GACD,qBAAqB;IACnB,SAAS;IACT,QAAQ;IACT;GACF;GACA,gDAAgD;GAC/C,+BAA+B;GAC/B,SAAS;GACV;GACA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,OAAO;GACR;GACA,MAAM,aAAa,GAAG;GACrB,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,gBAAgB,GAAG;GACxB,UAAU;GACV,KAAK;GACL,OAAO;GACP,OAAO;GACP,QAAQ;GACR,cAAc;GACd,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,OAAOA,QAAM;GACb,UAAU;GACV,YAAY;GACZ,WAAW;IACT,OAAOA,QAAM;IACb,iBAAiBA,QAAM;IACxB;GACF;GACA,MAAM,eAAe,GAAG;GACvB,SAAS;GACT,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,QAAQ;GACR,OAAO;GACR;GACA,MAAM,mBAAmB,GAAG;GAC3B,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,aAAa;GACb,cAAc;GACd,eAAe;GACf,OAAO;GACP,iBAAiB;GAClB;EACF,EAAE;CAEH,MAAM,gBAAgB,QAAQ,aAAa,MAAM,CAAC;CAClD,MAAM,eAAe,CAAC,EAAE,gBAAgB,eAAe,KAAK,aAAa;AAGzE,4BAAgB;AACd,MAAI,QAAQ,SAAS,UAAU,cAC7B,MAAK,eAAe,cAAc;AAEpC,MAAI,CAAC,KACH,MAAK,aAAa;IAEnB,CAAC,KAAK,CAAC;AAGV,4BAAgB;AACd,MAAI,CAAC,aAAa,MAAM,CACtB,MAAK,UAAU,CAAC;GAAE,MAAM;GAAoB,OAAO;GAAW,QAAQ,EAAE;GAAE,CAAC,CAAC;IAE7E,CAAC,YAAY,CAAC;AAIjB,4BAAgB;AACd,MAAI,aAAa,MAAM,CACrB,MAAK,eAAe,CAAC,mBAAmB,CAAC,CAAC,YAAY,GAAG;IAE1D,CAAC,aAAa,YAAY,CAAC;CAE9B,MAAM,oBAAoB;AACxB,OAAK,aAAa;AAClB,WAAS;;CAGX,MAAM,oBAAoB,YAAY;AACpC,MAAI;AACF,SAAM,KAAK,gBAAgB;AAC3B,cAAW,KAAK,cAAc,OAAO,IAAI,GAAG;AAC5C,uBAAoB,KAAK;UACnB;;CAKV,MAAM,sBAAsB;EAC1B,MAAM,SAAS,KAAK,gBAAgB;EACpC,MAAMC,UAAyB;GAC7B,MAAM,OAAO;GACb,aAAa,OAAO,eAAe;GACnC,yBAAyB,OAAO,2BAA2B;GAC3D,kBAAkB,OAAO,oBAAoB;GAC9C;AACD,MAAI,SAAS,QAAQ;AACnB,eAAY,QAAQ;AACpB,cAAW,QAAQ,GAAG,QAAQ,qCAAqC;SAC9D;AACL,cAAW,QAAQ;AACnB,cAAW,QAAQ,GAAG,QAAQ,mCAAmC;;AAEnE,sBAAoB,MAAM;AAC1B,WAAS;AACT,OAAK,aAAa;;CAGpB,MAAM,cAAc,SAAS,SAAS,aAAa;CACnD,MAAM,cAAc,SAAS,SAAS,SAAS;CAC/C,MAAM,kBAAkB,SAAS,SAAS,gBAAgB;AAE1D,QAAO,QACL;EACG;EACD,2CAACC;GACO;GACN,SAAS;GACT,OAAO;GACP,UAAU;GACV,OAAO,2CAAC;IAAK,WAAW,GAAG,QAAQ;cAAG;KAAmB;GACzD,QAAQ;IACN,QAAQ;KACN,SAAS;KACT,cAAc,aAAaF,QAAM;KACjC,YAAYA,QAAM;KACnB;IACD,MAAM,EAAE,SAAS,QAAQ;IACzB,QAAQ;KACN,SAAS;KACT,YAAYA,QAAM;KAClB,WAAW,aAAaA,QAAM;KAC/B;IACF;GACD,QACE,4CAAC;IAAI,WAAW,GAAG,SAAS;eAC1B,2CAACG;KAAO,MAAK;KAAQ,WAAW,GAAG,aAAa;KAAE,SAAS;eAAa;MAE/D,EACT,2CAACA;KACC,MAAK;KACL,MAAK;KACL,MAAM,SAAS,QAAQ,2CAACC,oCAAe,GAAG;KAC1C,WAAW,GAAG,aAAa;KAC3B,UAAU,CAAC;KACX,SAAS;eAER,SAAS,SAAS,eAAe;MAC3B;KACL;aAGR,4CAACN;IAAW;IAAM,QAAO;IAAW,cAAc;IAAO,WAAW,GAAG,YAAY;;KAEjF,2CAACA,UAAK;MACJ,MAAK;MACL,OACE,4CAAC;OAAK,WAAW,GAAG,QAAQ;kBAAE,YACpB,2CAAC;QAAK,WAAW,GAAG,WAAW;kBAAE;SAAQ;QAC5C;MAET,OAAO;OACL;QAAE,UAAU;QAAM,SAAS;QAAwB;OACnD,EAAE,KAAK,GAAG;OACV;QAAE,KAAK;QAAI,SAAS;QAAyB;OAC7C;QAAE,SAAS;QAAgB,SAAS;QAAmD;OACxF;gBAED,2CAACO;OAAM;OAAU,WAAW;OAAI,aAAY;QAAa;OAC/C;KAGZ,2CAACP,UAAK;MACJ,MAAK;MACL,OACE,4CAAC;OAAK,WAAW,GAAG,kBAAkB;kBAAE,eAC3B,2CAAC;QAAK,WAAW,GAAG,iBAAiB;kBAAE;SAAiB;QAC9D;MAET,OAAO,CACL;OAAE,KAAK;OAAI,SAAS;OAAyB,EAC7C,EACE,YAAY,GAAG,UAAU;AACvB,WAAI,CAAC,SAAS,eAAe,KAAK,MAAM,CAAE,QAAO,QAAQ,SAAS;AAClE,cAAO,QAAQ,uBAAO,IAAI,MAAM,kDAAkD,CAAC;SAEtF,CACF;gBAED,2CAACO,WAAM;OACL;OACA,WAAW;OACX,aAAY;OACZ,OAAO;QAAE,QAAQ;QAAI,QAAQ;QAAQ;QACrC;OACQ;KAGZ,2CAACP,UAAK;MACJ,MAAK;MACL,OAAO,2CAAC;OAAK,WAAW,GAAG,kBAAkB;iBAAE;QAAgC;MAC/E,OAAO,CACL;OAAE,KAAK;OAAI,SAAS;OAAyB,EAC7C,EACE,YAAY,GAAG,UAAU;AACvB,WAAI,CAAC,SAAS,eAAe,KAAK,MAAM,CAAE,QAAO,QAAQ,SAAS;AAClE,cAAO,QAAQ,uBAAO,IAAI,MAAM,kDAAkD,CAAC;SAEtF,CACF;gBAED,2CAACO;OAAM;OAAU,WAAW;OAAI,aAAY;QAA2B;OAC7D;KAGZ,2CAACP,UAAK;MACJ,MAAK;MACL,cAAc,CAAC,0BAA0B;MACzC,OACE,2CAAC;OAAK,WAAW,gBAAgB,GAAG,kBAAkB,GAAG,GAAG,iBAAiB;iBAAE;QAExE;MAET,OAAO,CACL;OAAE,KAAK;OAAK,SAAS;OAA0B,EAC/C,EACE,WAAW,YAAY;OACrB,MAAM,OAAO,KAAK,cAAc,0BAA0B;OAC1D,MAAM,OAAO,KAAK,cAAc,mBAAmB;AAEnD,WAAI,CAAC,MAAM,MAAM,CAAE,QAAO,QAAQ,SAAS;AAE3C,WAAI,CAAC,MAAM,MAAM,CACf,QAAO,QAAQ,uBACb,IAAI,MAAM,4DAA4D,CACvE;AAGH,WAAI;AACF,YAAI,IAAI,KAAK;AACb,eAAO,QAAQ,SAAS;eAClB;AACN,eAAO,QAAQ,uBAAO,IAAI,MAAM,2BAA2B,CAAC;;SAGjE,CACF;gBAED,2CAACQ;OACC,OAAO,CAAC,gBAAgB,yDAAyD;OACjF,OAAM;OACN,WAAU;iBAEV,2CAACD;QACC;QACA,WAAW;QACX,aAAY;QACZ,UAAU,CAAC;QACX,WAAW,MAAM;AACf,cAAK,cAAc,oBAAoB,EAAE,OAAO,MAAM;;SAExD;QACM;OACA;;KACP;IACA;EAGT,4CAACE;GACC,MAAM;GACN,gBAAgB,oBAAoB,MAAM;GAC1C;GACA,OAAO;GACP,QAAQ;GACR,UAAU;GACV,OAAO;GACP,WAAU;GACV,QAAQ,EAAE,MAAM,EAAE,iBAAiB,oBAAoB,EAAE;;IAGzD,4CAAC;KAAI,WAAW,GAAG,YAAY;gBAC7B,4CAAC;MAAK,WAAW,GAAG,aAAa;;OAC9B,SAAS,SAAS,SAAS;OAAM;OAAE;OAAQ;;OACvC,EACP,2CAAC;MACC,WAAW,GAAG,gBAAgB;MAC9B,eAAe,oBAAoB,MAAM;MACzC,cAAW;gBACZ;OAEQ;MACL;IAGN,2CAAC;KAAI,WAAW,GAAG,eAAe;eAChC,4CAAC;MAAK,WAAW,GAAG,mBAAmB;;OAAE;OACb;OAAY;OAAE;OAAQ;;OAC3C;MACH;IAGN,4CAAC;KAAI,WAAW,GAAG,cAAc;gBAC/B,2CAACJ;MACC,MAAK;MACL,eAAe,oBAAoB,MAAM;MACzC,OAAO;OAAE,cAAc;OAAG,QAAQ;OAAI,eAAe;OAAI;gBAC1D;OAEQ,EACT,2CAACA;MACC,MAAK;MACL,MAAK;MACL,SAAS;MACT,OAAO;OACL,cAAc;OACd,QAAQ;OACR,eAAe;OACf,iBAAiBH,QAAM;OACvB,aAAaA,QAAM;OACnB,WAAW,eAAeA,QAAM;OACjC;gBAEA;OACM;MACL;;IACA;KACP,CACJ;;;;;ACncH,MAAM,iBACJ,QACA,eACuB;AACvB,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,OAAO,KAAM,QAAO;CAEzB,MAAM,UAAU,OAAO,KAAK,MAAM,IAAI,CAAC,KAAK;CAC5C,MAAM,WAAW,YAAY,UAAU;AACvC,KAAI,CAAC,SAAU,QAAO;AAEtB,QAAO,cAAc,UAAoB,WAAW;;AAGtD,MAAa,0BAA0B,QAAmC;CACxE,MAAMQ,qBAAqD,EAAE;CAC7D,MAAM,YAAY,IAAI,IAAI,KAAK,MAAM,KAAK,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;CACnE,MAAM,cAAc,OAAO,KAAK,IAAI,MAAM,CAAC;CAC3C,MAAM,kBACJ,wBAAwB,MACpB,OAAO,QAAQ,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,cAAc;EAAE;EAAO;EAAS,EAAE,GACzF,EAAE;AACR,iBAAgB,QAAQ;EAAE,OAAO,IAAI;EAAsB,SAAS,GAAG,IAAI,KAAK;EAAW,CAAC;CAC5F,MAAMC,iBACJ,uBAAuB,MAAO,IAAI,uBAAkC;CACtE,MAAM,aAAa,IAAI,YAAY;CACnC,IAAIC;AACJ,KAAI,cAAc,OAAO,KAAK,WAAW,GAAG,IAAI;AAC9C,aAAW,OAAO,KAAK,WAAW,CAAC;AACnC,MAAI,YAAY,SAAS,aAAa,KAAK,SACzC,YAAW;AAEb,MAAI,aAAa,SAAS,aAAa,KAAK,WAAW,SAAS,aAAa,KAAK,UAChF,YAAW;AAEb,aAAW,SAAS,aAAa;OAEjC,YAAW,iBAAiB,MAAO,IAAI,iBAA4B;CAErE,MAAMC,OAAe,aAAa,MAAO,IAAI,aAAqB;CAClE,MAAM,aAAa,IAAI,qBAAqB;AAE5C,MAAK,MAAM,CAAC,MAAM,YAAY,OAAO,QAAQ,IAAI,MAAM,CACrD,MAAK,MAAM,CAAC,QAAQ,eAAe,OAAO,QAAQ,QAAQ,EAAE;EAC1D,MAAM,QAAQ;GAAE,GAAG;GAAY,QAAQ,QAAQ,aAAa;GAAgB;GAAM;AAClF,MAAI,MAAM,aAAa,SAAS;GAC9B,MAAMC,kBAA0C,EAAE;AAClD,QAAK,MAAM,CAAC,aAAa,iBAAiB,OAAO,QAAQ,MAAM,YAAY,QAAQ,CACjF,iBAAgB,eAAe,EAC7B,QAAQ,cAAc,aAAa,QAAQ,IAAI,WAAW,IAAI,aAAa,QAC5E;AAEH,SAAM,cAAc;IAAE,GAAG,MAAM;IAAa,SAAS;IAAiB;;EAIxE,MAAM,eAFe,WAAW,QAAQ,EAAE,EAET,QAAQ,QAAQ,UAAU,IAAI,IAAI,CAAC;AAEpE,MAAI,YAAY,SAAS,EACvB,aAAY,SAAS,QAAQ;AAC3B,OAAI,CAAC,mBAAmB,KAAM,oBAAmB,OAAO,EAAE;AAC1D,sBAAmB,KAAK,KAAK;IAAE,GAAG;IAAO,IAAI,+BAAmB,EAAE;IAAI,CAAiB;IACvF;OACG;AACL,OAAI,CAAC,mBAAmB,QACtB,oBAAmB,UAAU,EAAE;AAEjC,sBAAmB,QAAQ,KAAK;IAAE,GAAG;IAAO,IAAI,+BAAmB,EAAE;IAAI,CAAiB;;;CAMhG,MAAM,2BAA2B,OAAO,KAAK,mBAAmB,CAC7D,MAAM,GAAG,MAAM;AACd,MAAI,MAAM,UAAW,QAAO;AAC5B,MAAI,MAAM,UAAW,QAAO;AAC5B,SAAO,EAAE,cAAc,EAAE;GACzB,CACD,QAAQ,KAAK,QAAQ;AACpB,MAAI,OAAO,mBAAmB;AAC9B,SAAO;IACN,EAAE,CAAmC;AAE1C,QAAO;EACL,GAAG,IAAI;EACP,IAAI,0BAAc,EAAE;EACpB;EACA,MAAM;EACN,SAAS,IAAI;EACb;EACA;EACA;EACA;EACA;EACD;;;;;ACjGH,MAAM,QAAQ,UACZ,4CAAC;CAAI,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,OAAM;CAA6B,GAAI;YACjG,2CAAC;EAAK,GAAE;EAAwe,MAAK;GAAiB,EACtgB,2CAAC;EAAK,GAAE;EAAumB,MAAK;GAAiB;EACjoB;AAGR,mBAAe;;;;ACFfC,+BAAkB,iBAAiB,QAAQC,8DAAK;AAEhD,MAAM,WAAW,EACf,MACA,UACA,oBAKI;CACJ,MAAM,CAAC,gCAAuC,OAAO;CACrD,MAAM,EAAE,gBAAO,OAAO,gBAAgBC,WAAU,UAAU;CAE1D,MAAM,SADS,YAAY,MAAM,IACTC,QAAM,mBAAmB;CACjD,MAAM,EAAE,OAAO,SAAS,YAAY,SAAO,WAAW,GACnD,MAAM,UAAU,GAAG;EAClB,cAAcA,QAAM;EACpB,QAAQ;EACR,WAAW;EACX,UAAU;EAEV,KAAK,EACH,QAAQ,QACT;EACF,EA0BF,EAAE;AAEH,QACE,2CAAC;EAAI,WAAW,GAAG,UAAU;YAkB3B,2CAACH;GACC,UAAU,YAAY;GACtB,OAAO,aAAa,UAAUI,8CAAK,qBAAqBA,8CAAK;GAC7D;GACA;GACe;GACf,aAAa;IACX,QAAQ;IACR,WAAW;IACX,WAAW;IACX,SAAS;IACT,iBAAiB;IACjB,UAAU;IACX;GACD,WAAW,EACT,OAAO,EAAE,YAAY,6BAA6B,EACnD;aAEA;IACiB;GAChB;;AAIV,sBAAe;;;;AC9Ff,SAAS,iBAAiB;CACxB,MAAM,EACJ,kBACA,aACA,kBACA,oBACA,mBACA,0BACEC,eAAU,EAAE,WAAW,KAAK;CAChC,MAAM,6CAEF,kBAAkB,KAAK,UAAU;EAC/B,OAAO;EACP,OACE,4CAAC;GAAK,OAAO;IAAE,SAAS;IAAQ,YAAY;IAAU,KAAK;IAAU;cACnE,2CAAC,UACC,OAAO;IACL,YAAY,kBAAkB,KAAK;IACnC,cAAc;IACd,SAAS;IACT,OAAO;IACP,QAAQ;IACR,UAAU;IACV,WAAW;IACZ,GACD,EACD;IACI;EAEV,EAAE,EACL,CAAC,kBAAkB,CACpB;CAED,MAAM,CAAC,aAAa,sCAA2B,eAAe;CAG9D,MAAMC,qBAA6B;AACjC,MAAI,CAAC,oBAAoB,CAAC,MAAM,QAAQ,aAAa,KAAK,CAAE,QAAO;AAMnE,SALe,YAAY,KAAe,MACvC,MACC,EAAE,SAAS,iBAAiB,QAC5B,EAAE,QAAQ,aAAa,KAAK,iBAAiB,OAAO,aAAa,CACpE,EACa,eAAe;KAC3B;CAKJ,MAAMC,mBAA6B;AACjC,MAAI,CAAC,iBAAkB,QAAO,EAAE;EAChC,MAAM,SAAS,iBAAiB,cAAc,EAAE;EAChD,MAAM,YAAY,aAAa,UAAU,IAAI,OAAO;EAEpD,MAAM,eAAe,OAClB,QAAQ,MAAM,EAAE,OAAO,OAAO,CAC9B,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,iBAAiB,KAAK;EAExF,MAAM,cAAc,OAAO,QAAQ,MAAM,EAAE,OAAO,QAAQ;AAU1D,SAAO,CANO,oBAAoB,YAAY,eAF5C,YAAY,SAAS,IAAI,MAAM,YAAY,KAAK,MAAM,GAAG,EAAE,KAAK,eAAe,CAAC,KAAK,IAAI,GAAG,GAE9B,IAMjD,GAJK,OACjB,QAAQ,MAAM,EAAE,OAAO,SAAS,CAChC,KAAK,MAAM,aAAa,EAAE,KAAK,iBAAiB,CAErB;KAC5B;CAGJ,MAAM,sBAAsB,kBAAkB,cAAc,EAAE,EAAE,MAC7D,MAAM,EAAE,OAAO,iBACjB;CAED,MAAM,EAAE,OAAO,WAAW,OAAO,gBAAgBC,WAAU,UAAU;CACrE,MAAM,SAAS,YAAY,MAAM;CACjC,MAAM,WAAW,SAAS,UAAU,kBAAkB;CACtD,MAAM,SAAS,SAAS,UAAU,mBAAmB;CACrD,MAAM,gBAAgB,SAAS,2BAA2B;CAE1D,MAAM,EAAE,OAAO,SAAS,mBAAmB,SAAO,WAAW;GAC1D,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,eAAe;GACf,KAAKC,QAAM;GACX,YAAYA,QAAM;GAClB,cAAcA,QAAM;GACpB,SAASA,QAAM;GACf,QAAQ;GACR,OAAO;GACP,UAAU;GACV,kBAAkB,EAAE,SAAS,GAAG;GAChC,wBAAwB,EAAE,OAAO,SAAS;GAC1C,kBAAkB,EAAE,cAAc,yBAAyB;GAC5D;GAEA,MAAM,YAAY,GAAG;GACpB,SAAS;GACT,eAAe;GACf,iBAAiB;GACjB,QAAQ,aAAaA,QAAM;GAC3B,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,EAAE;GACnF,uBAAuB;IACrB,SAAS;IACT,WAAW;IACZ;GACD,kBAAkB,EAChB,MAAM,YACP;GACD,cAAcA,QAAM;GACpB,UAAU;GACX;GACA,MAAM,mBAAmB,GAAG,EAC3B,WAAW,YACZ;GACA,MAAM,0BAA0B,GAAG,EAClC,SAAS,KAAKA,QAAM,OAAO,KAAKA,QAAM,SAAS,KAAKA,QAAM,OAAO,KAClE;GACA,MAAM,oBAAoB,GAAG;GAC5B,QAAQ;GACR,UAAU;GACV,uBAAuB;IACrB,SAAS;IACT,SAAS,KAAKA,QAAM,OAAO;IAC3B,eAAe;IACf,YAAY;IACZ,KAAK;IACL,WAAW;IACZ;GACF;GACA,MAAM,kBAAkB,GAAG;GAC1B,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,SAAS,GAAGA,QAAM,SAAS,KAAKA,QAAM,OAAO;GAC7C,cAAc,aAAaA,QAAM;GACjC,QAAQ;GACR,iBAAiB;GAClB;GACA,MAAM,gBAAgB,GAAG;GACxB,SAAS;GACT,eAAe;GACf,QAAQ;GACR,UAAU;GACV,iBAAiB;GACjB,kBAAkB,EAChB,MAAM,YACP;GACD,kBAAkB;IAChB,MAAM;IACN,WAAW;IACX,SAAS;IACV;GACD,uBAAuB;IACrB,SAAS;IACT,QAAQ;IACR,UAAU;IACV,WAAW;IACX,YAAY;KAAE,QAAQ;KAAe,UAAU;KAAQ;IACxD;GACF;GAEA,MAAM,eAAe,GAAG;GACvB,OAAO;GACP,UAAU;GAEV,wBAAwB;IACtB,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,OAAO;IACR;GACD,8BAA8B;IAC5B,OAAO;IACP,YAAY;IACb;GACD,qCAAqC,EACnC,OAAO,6BACR;GACD,qBAAqB,EACnB,OAAO,WACR;GACD,gCAAgC;IAC9B,aAAa,GAAGC,MAAO;IACvB,OAAO;IACR;GACD,2EAA2E;IACzE,aAAa,GAAGA,MAAO;IACvB,OAAO;IACR;GACF;GACA,MAAM,YAAY,GAAG;GACpB,QAAQ;GACR,SAAS;GACT,SAAS;GACT,eAAe;GACf,KAAK;GACL,iBAAiB;GAClB;GACA,MAAM,YAAY,GAAG;GACpB,YAAY;GACZ,UAAU;GACV,OAAO;GACP,WAAW;GACZ;EACF,EAAE;AAEH,QACE,4CAAC;EAAI,WAAW,GAAG,YAAY;aAE5B,sBACC,4CAAC;GAAI,WAAW,GAAG,aAAa,mBAAmB;cACjD,4CAAC;IAAI,WAAW,GAAG,kBAAkB;eACnC,2CAACC,gBAAW;KAAK;KAAO,OAAO,EAAE,OAAO,QAAQ;eAAE;MAEhC,EACjB,eACC,2CAACC;KAAQ,OAAO;eACd,2CAACC;MACC,OAAM;MACN,SAAQ;MACR,WAAW,GAAG,aAAa;MAC3B,eAAe;AACb,iBAAU,UAAU,UAAU,YAAY;AAC1C,sBAAe,UAAU;AACzB,wBAAiB,eAAe,YAAY,EAAE,KAAK;;MAErD,MAAM,2CAACC,gBAAa,OAAO,EAAE,OAAO,SAAS,GAAI;OACjD;MACM;KAER,EACN,2CAAC;IAAI,WAAW,GAAG,YAAY;cAC5B,UAAU,KAAK,MAAM,MACpB,2CAAC;KAAY,WAAW,GAAG,YAAY;eACpC;OADO,EAEJ,CACN;KACE;IACF,EAGP,kBAAkB,aAAa,kBAAkB,SAAS,KACzD,4CAAC;GAAI,WAAW,GAAG,aAAa,oBAAoB;cAClD,4CAAC;IAAI,WAAW,GAAG,mBAAmB,0BAA0B;eAC9D,2CAACH,gBAAW;KAAK;KAAO,OAAO,EAAE,OAAO,QAAQ;eAAE;MAEhC,EAClB,2CAACI;KACC,0BAA0B;KAC1B,cAAc;KACd,WAAW,GAAG,eAAe;KAC7B,QAAQ;KACR,OAAO,EAAE,OAAO,QAAQ;KACxB,OAAO;KACP,UAAU;KACV,SAAS;KACT,MAAM,kBAAkB,WAAW,IAAI,QAAQ;KAC/C,YAAY,kBAAkB,SAAS,IAAI,SAAY;MACvD;KACE,EACN,2CAACC,mBACC,MACE,KAAK,UAAU,kBAAkB,UAAU,qBAA+B,MAAM,EAAE,IAClF,KAEF;IACE;GAEJ;;AAIV,6BAAe;;;;ACrQf,MAAa,uBAAuB,EAClC,MACA,gBACA,wBACA,aAOI;CACJ,MAAM,CAAC,aAAa,sCAA2B,GAAG;CAClD,MAAM,CAAC,MAAM,+BAAqC,OAAO;CACzD,MAAM,CAAC,YAAY,qCAA0B,MAAM;CACnD,MAAM,CAAC,eAAe,wCAA6B,MAAM;CACzD,MAAM,CAAC,UAAU,mCAAwB,EAAE;CAC3C,MAAM,CAAC,kBAAkB,2CAAgC,MAAM;CAC/D,MAAM,CAAC,eAAe,wCAA6B,MAAM;CACzD,MAAM,CAAC,oBAAoB,6CAAkC,MAAM;CACnE,MAAM,CAAC,cAAc,uCAA4B,GAAG;CACpD,MAAM,CAAC,kBAAkB,2CAAgC,GAAG;CAC5D,MAAM,CAAC,aAAa,sCAA2B,GAAG;CAClD,MAAM,CAAC,eAAe,wCAAqD,EAAE,CAAC;CAC9E,MAAM,CAAC,eAAe,wCAAqD,EAAE,CAAC;CAC9E,MAAM,CAAC,cAAc,uCAAsD,EAAE,CAAC;CAC9E,MAAM,CAAC,gBAAgB,yCAAqE,EAAE,CAAC;CAC/F,MAAM,CAAC,wBAAwB,iDAE7B,EAAE,CAAC;CACL,MAAM,CAAC,gBAAgB,yCASpB;EAAE,MAAM;EAAO,MAAM;EAAO,CAAC;CAChC,MAAM,CAAC,gBAAgB,yCAAkE;EACvF,MAAM;EACN,SAAS;EACV,CAAC;CACF,MAAM,CAAC,WAAW,oCAAoC,EAAE,CAAC;CACzD,MAAM,CAAC,YAAY,iBAAiBC,aAAQ,YAAY;CAExD,MAAM,EACJ,gBACA,iBACA,aACA,cACA,eACA,kBACA,iBACA,oBACA,kBACA,mBACA,iBACA,wBACEC,eAAU,EAAE,WAAW,KAAK;CAChC,MAAM,EAAE,gBAAgB,sBAAsB,mBAAmB,kBAAkB;CACnF,MAAM,sCAA2B,MAAM;CAEvC,MAAM,EAAE,mCAAkBC;CAE1B,MAAM,WAAW,CADDC,iBAAe,CACL;AAE1B,4BAAgB;AACd,eAAa;AACX,eAAY;;IAEb,EAAE,CAAC;CAEN,MAAM,mBAAmB;AACvB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,KAAK;AACvB,mBAAiB,EAAE,CAAC;AACpB,qBAAmB,EAAE,CAAC;AACtB,kBAAgB,EAAE,CAAC;AACnB,iBAAe,GAAG;AAClB,kBAAgB;AAChB,oBAAkB,UAAU;;AAG9B,4BAAgB;AAEd,MAAI,CAAC,kBAAkB,WAAW,KAAK,SAAS,GAAG;AACjD,mBAAgB,KAAK;GAErB,MAAM,kBAAkB,KACrB,IAAI,uBAAuB,CAC3B,MAAM,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,MAAM,CAAC;AACjD,sBAAmB,gBAAgB;AAInC,oBADkB,uBAAuB,gBAAgB,CAC9B;AAG3B,qBAAkB,UAAU;;IAE7B;EAAC;EAAM;EAAiB;EAAoB;EAAiB,CAAC;AAGjE,4BAAgB;AACd,MACE,iBACA,cAAc,SAAS,KACvB,CAAC,eACD,CAAC,mBACD,kBAAkB,SAClB;AACA,OAAI,CAAC,eACH,gBAAe,cAAc;OAE7B,sBAAqB,eAAe,eAAe;AAErD,qBAAkB,UAAU;;IAE7B;EAAC;EAAe;EAAiB;EAAa;EAAe,CAAC;CAEjE,MAAM,EAAE,IAAI,mBAAU,SAAS,2BAA2B,SAAO,WAAW;GACzE,MAAM,0BAA0B,GAAG;GAClC,SAAS;GACT,eAAe;GACf,KAAKC,QAAM;GACX,QAAQ;GACR,WAAW;GACZ;GACA,MAAM,UAAU,GAAG;GAClB,YAAY;GACZ,QAAQ;GACT;GACA,MAAM,cAAc,GAAG;GACtB,SAAS;GACT,YAAY;GACZ,QAAQ;GACR,KAAKA,QAAM;GACX,OAAO;GACR;GAEA,mDAAmD;GAClD,+BAA+B;GAC/B,SAAS;GACV;GACA,MAAM,kBAAkB,GAAG;GAC1B,SAAS;GACT,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,eAAe;GACf,aAAa;GACb,cAAc;GACd,OAAO;GACR;GACA,MAAM,mBAAmB,GAAG;GAC3B,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,sBAAsB,GAAG;GAC9B,UAAU;GACV,KAAK;GACL,OAAO;GACP,OAAO;GACP,QAAQ;GACR,cAAc;GACd,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,QAAQ;GACR,YAAY;GACZ,SAAS;GACT,OAAOA,QAAM;GACb,UAAU;GACV,YAAY;GACZ,WAAW;IACT,OAAOA,QAAM;IACb,iBAAiBA,QAAM;IACxB;GACF;GACA,MAAM,qBAAqB,GAAG;GAC7B,SAAS;GACT,YAAY;GACZ,aAAa;GACb,cAAc;GACd,eAAe;GACf,QAAQ;GACR,OAAO;GACR;GACA,MAAM,yBAAyB,GAAG;GACjC,MAAM;GACN,UAAU;GACV,YAAY;GACZ,YAAY;GACZ,OAAOA,QAAM;GACd;GACA,MAAM,oBAAoB,GAAG;GAC5B,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GACL,aAAa;GACb,cAAc;GACd,eAAe;GACf,OAAO;GACP,iBAAiB;GAClB;EACF,EAAE;AAEH,4BAAgB;AACd,kBAAgB,aAAa,SAAS,GAAG;AACzC,sBAAoB,aAAa,eAAe,GAAG;AACnD,MAAI,aAAa,SAAS,OACxB,gBAAe,YAAY,QAAQ,GAAG,IAAI;IAE3C,CAAC,YAAY,CAAC;CAUjB,MAAM,uCAAuC;AAC3C,MAAI,CAAC,gBAAgB,CAAC,YAAa,QAAO,EAAE;EAG5C,MAAM,UAAU,aAAa,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM,CAAC,OAAO,YAAY,YAAY;AAC7F,MAAI,CAAC,SAAS,KAAM,QAAO,EAAE;AAC7B,SAAO,QAAQ,KAAK,KAAK,OAAO;GAC9B,MAAM,EAAE;GACR,aAAa,EAAE;GACf,iBAAiB,EAAE,cAAc;GACjC,yBAAyB,EAAE,cAAc;GACzC,WAAW,EAAE,KAAK,aAAa,KAAK;GACrC,EAAE;IACF,CAAC,cAAc,YAAY,CAAC;CAE/B,MAAM,yDAAqF;AACzF,MAAI,CAAC,gBAAgB,CAAC,YAAa,QAAO,EAAE;EAC5C,MAAM,UAAU,aAAa,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM,CAAC,OAAO,YAAY,YAAY;AAC7F,MAAI,CAAC,QAAS,QAAO,EAAE;EACvB,MAAMC,iBAAyC,EAAE;AACjD,SAAO,OAAO,YAAY,KAAK,CAC5B,MAAM,CACN,SAAS,OAAO;AACf,kBAAe,GAAG,GAAG,KAAK,IAAI,GAAG,OAAO,aAAa,MAAM,GAAG;IAC9D;EACJ,MAAMC,SAAgD,EAAE;AACxD,SAAO,QAAQ,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,aAAa;AACzD,UAAO,QAAQ,QAAmD,CAAC,SAChE,CAAC,QAAQ,eAAe;IACvB,MAAM,SAAS,YAAY;AAC3B,QAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,OAAO,WAAW,EAAG;IACnD,MAAM,OAAO,eAAe,GAAG,KAAK,IAAI;AACxC,QAAI,CAAC,KAAM;AACX,WAAO,QAAQ,OACZ,QAAQ,MAAoC,OAAO,MAAM,YAAY,MAAM,KAAK,CAChF,KAAK,MAAM;KACV,MAAM,SAAS,EAAE;AACjB,YAAO;MACL,MAAM,OAAO,EAAE,QAAQ,GAAG;MAC1B,IAAK,EAAE,MAAoC;MAC3C,MAAO,QAAQ,QAAQ;MACvB,UAAU,QAAQ,EAAE,YAAY,MAAM;MACtC,aAAa,EAAE,eAAe,OAAO,OAAO,EAAE,YAAY,GAAG;MAC7D,MAAM,MAAM,QAAQ,QAAQ,KAAK,GAAI,OAAQ,OAAoB;MAClE;MACD;KAEP;IACD;AACF,SAAO;IACN,CAAC,cAAc,YAAY,CAAC;CAE/B,MAAM,iDAA6E;AACjF,MAAI,CAAC,gBAAgB,CAAC,YAAa,QAAO,EAAE;EAC5C,MAAM,UAAU,aAAa,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM,CAAC,OAAO,YAAY,YAAY;AAC7F,MAAI,CAAC,QAAS,QAAO,EAAE;EACvB,MAAMD,iBAAyC,EAAE;AACjD,SAAO,OAAO,YAAY,KAAK,CAC5B,MAAM,CACN,SAAS,OAAO;AACf,kBAAe,GAAG,GAAG,KAAK,IAAI,GAAG,OAAO,aAAa,MAAM,GAAG;IAC9D;EACJ,MAAMC,SAAgD,EAAE;AACxD,SAAO,QAAQ,QAAQ,MAAM,CAAC,SAAS,CAAC,MAAM,aAAa;AACzD,UAAO,QAAQ,QAAsD,CAAC,SACnE,CAAC,QAAQ,eAAe;IACvB,MAAM,SAAU,WAA0C;AAC1D,QAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,OAAO,WAAW,EAAG;IACnD,MAAM,OAAO,eAAe,GAAG,KAAK,IAAI;AACxC,QAAI,CAAC,KAAM;AACX,WAAO,QAAQ,OACZ,QAAQ,MAAoC,OAAO,MAAM,YAAY,MAAM,KAAK,CAChF,KAAK,MAAM;KACV,MAAM,SAAS,EAAE;AACjB,YAAO;MACL,MAAM,OAAO,EAAE,QAAQ,GAAG;MAC1B,IAAK,EAAE,MAAoC;MAC3C,MAAO,QAAQ,QAAQ;MACvB,UAAU,QAAQ,EAAE,YAAY,MAAM;MACtC,aAAa,EAAE,eAAe,OAAO,OAAO,EAAE,YAAY,GAAG;MAC7D,MAAM,MAAM,QAAQ,QAAQ,KAAK,GAAI,OAAQ,OAAoB;MAClE;MACD;KAEP;IACD;AACF,SAAO;IACN,CAAC,cAAc,YAAY,CAAC;AAE/B,4BAAgB;AACd,eAAa,YAAY;AACzB,oBAAkB,sBAAsB;AACxC,4BAA0B,8BAA8B;IACvD,CAAC,YAAY,CAAC;AAKjB,4BAAgB;AACd,MAAI,SAAS,UAAU,CAAC,iBAAkB;EAC1C,MAAM,OAAO,iBAAiB;EAI9B,MAAMC,iBADqB,eAAe,SAAS,EAAE,EACC,KAAK,OAAO;GAChE,MAAM,EAAE;GACR,IAAI,EAAE;GACN,UAAU,EAAE;GACZ,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;GACvD,QAAQ;IACN,MAAM,EAAE;IACR,GAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE;IACxD;GACF,EAAE;AAGH,MAAI,KAAK,UAAU,iBAAiB,cAAc,EAAE,CAAC,KAAK,KAAK,UAAU,cAAc,CAAE;EAIzF,MAAM,sBADsB,uBAAuB,SAAS,EAAE,EACf,QAAiC,KAAK,MAAM;AACzF,OAAI,EAAE,QAAQ;IACZ,QAAQ;KAAE,MAAM,EAAE;KAAM,GAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE;KAAG;IAClF,UAAU,EAAE;IACZ,GAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,GAAG,EAAE;IACxD;AACD,UAAO;KACN,EAAE,CAAC;EAIN,MAAM,mBAAmB,OAAO,YAC9B,OAAO,QAAQ,iBAAiB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,UAAU,CACrE,MACA;GACE,GAAG;GACH,SAAS,OAAO,KAAK,mBAAmB,CAAC,SAAS,IAAI,qBAAqB,KAAK;GACjF,CACF,CAAC,CACH;AAEA,sBAAoB;GAClB,GAAG;GACH,YAAY;GACZ,WAAW;GACZ,CAAC;IACF;EAAC;EAAM;EAAkB;EAAgB;EAAwB;EAAoB,CAAC;CAEzF,MAAM,gBAAgB,QAKhB;EACJ,MAAMC,SAAkB;GACtB,MAAM,IAAI;GACV,aAAa,IAAI;GACjB,iBAAiB,IAAI;GACrB,yBAAyB,IAAI;GAC7B,WAAW;GACZ;AACD,gBAAc,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC;AACzC,gBAAc,KAAK;AACnB,mBAAiB,KAAK;;CAGxB,MAAM,mBAAmB,eAKnB;EACJ,MAAM,eAAe,eAAe,eAAe;AACnD,gBAAc,SACZ,KAAK,KAAK,MACR,EAAE,SAAS,eACP;GACE,GAAG;GACH,MAAM,WAAW;GACjB,aAAa,WAAW;GACxB,iBAAiB,WAAW;GAC5B,yBAAyB,WAAW;GACrC,GACD,EACL,CACF;AACD,gBAAc,KAAK;AACnB,mBAAiB,KAAK;;CAGxB,MAAM,+BAA+B;AACnC,gBAAc,SAAS,KAAK,QAAQ,MAAM,EAAE,SAAS,eAAe,QAAQ,CAAC;AAC7E,aAAW,QAAQ,GAAG,eAAe,QAAQ,qCAAqC;AAClF,oBAAkB;GAAE,MAAM;GAAO,SAAS;GAAI,CAAC;AAC/C,gBAAc,KAAK;AACnB,mBAAiB,KAAK;;CAGxB,MAAM,0BAAiD;AACrD,MAAI,CAAC,YAAa,QAAO,EAAE;EAC3B,MAAM,OAAO,YAAY,QAAQ,EAAE;EACnC,MAAM,OAAO,YAAY,QAAQ,EAAE;EACnC,MAAMC,WAAwB,EAAE;AAChC,SAAO,KAAK,KAAK,CAAC,SAAS,WAAW;AACpC,YAAS,UAAU,KAAK,QAAQ,KAAK,aAAa;IAChD,MAAM,YAAY,KAAK,MACpB,MACC,EAAE,cAAc,eAAe,EAAE,WAAW,SAAS,UAAU,EAAE,SAAS,SAAS,KACtF;AACD,WAAO;KAAE,GAAG;KAAU,aAAa,WAAW,eAAe;KAAM;KACnE;IACF;AACF,SAAO;;CAGT,MAAM,oBAAoB;AACxB,gBAAc,MAAM;AACpB,mBAAiB,MAAM;AACvB,kBAAgB,aAAa,SAAS,GAAG;AACzC,sBAAoB,aAAa,eAAe,GAAG;AACnD,mBAAiB,EAAE,CAAC;AACpB,mBAAiB,EAAE,CAAC;AACpB,kBAAgB,EAAE,CAAC;AACnB,oBAAkB,sBAAsB;AACxC,4BAA0B,8BAA8B;AACxD,eAAa,SAAS,OAAO,EAAE;;CAGjC,MAAM,aAAa,YAAY;AAC7B,MAAI,CAAC,eAAe,CAAC,aAAc;EAEnC,MAAM,UAAU,aAAa,MAAM,MAAM,OAAO,KAAK,EAAE,MAAM,CAAC,OAAO,YAAY,YAAY;AAC7F,MAAI,CAAC,QAAS;EAEd,MAAMC,SAAsB,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC;AAE/D,MAAI,CAAC,OAAO,QACV,QAAO,UAAU;AAGnB,SAAO,KAAK,QAAQ;AACpB,SAAO,KAAK,cAAc;AAE1B,SAAO,OAAO,UAAU,KAAK,MAAM;AAEjC,UAAO;IACL,GAFkB,QAAQ,MAAM,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,IAE7C,EAAE;IACrB,MAAM,EAAE;IACR,GAAI,EAAE,gBAAgB,UAAa,EAAE,aAAa,EAAE,aAAa;IACjE,IAAK,EAAE,oBAAoB,UAAa,EAAE,4BAA4B,WAAc,EAClF,cAAc;KACZ,KAAK,EAAE,mBAAmB;KAC1B,aAAa,EAAE,2BAA2B;KAC3C,EACF;IACF;IACD;EAEF,MAAMC,iBAAmE,EAAE;AAC3E,SAAO,OAAO,YAAY,KAAK,CAC5B,MAAM,CACN,SAAS,OAAO;AACf,kBAAe,GAAG,MAAM;IAAE,MAAM,GAAG;IAAM,QAAQ,GAAG,OAAO,aAAa;IAAE;IAC1E;AAEJ,SAAO,QAAQ,cAAc,CAAC,SAAS,CAAC,IAAI,UAAU;GACpD,MAAM,MAAM,eAAe;AAC3B,OAAI,OAAO,OAAO,MAAM,IAAI,QAAQ,IAAI,QACrC,CAAC,OAAO,MAAM,IAAI,MACjB,IAAI,QACJ,UAAU;IAEd;AAEF,SAAO,QAAQ,cAAc,CAAC,SAAS,CAAC,IAAI,UAAU;GACpD,MAAM,MAAM,eAAe;AAC3B,OAAI,OAAO,OAAO,MAAM,IAAI,QAAQ,IAAI,QACrC,CAAC,OAAO,MAAM,IAAI,MACjB,IAAI,QACJ,cAAc;IAElB;AAEF,SAAO,QAAQ,aAAa,CAAC,SAAS,CAAC,IAAI,UAAU;GACnD,MAAM,MAAM,eAAe;AAC3B,OAAI,OAAO,OAAO,MAAM,IAAI,QAAQ,IAAI,QACrC,CAAC,OAAO,MAAM,IAAI,MAA8C,IAAI,QAAQ,OAAO;IAEtF;AAEF,SAAO,QAAQ,eAAe,CAAC,SAAS,CAAC,IAAI,YAAY;GACvD,MAAM,MAAM,eAAe;AAC3B,OAAI,OAAO,OAAO,MAAM,IAAI,QAAQ,IAAI,SAAgD;IACtF,MAAM,YAAa,OAAO,MAAM,IAAI,MAClC,IAAI;AAEN,QAAI,OAAO,SAAS,EAClB,WAAU,aAAa,OAAO,KAAK,WAAW;KAC5C,MAAM,MAAM;KACZ,IAAI,MAAM;KACV,UAAU,MAAM;KAChB,GAAI,MAAM,eAAe,EAAE,aAAa,MAAM,aAAa;KAC3D,QAAQ;MACN,MAAM,MAAM;MACZ,GAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,KAAK,EAAE,MAAM,MAAM,MAAM;MAChE;KACF,EAAE;QAEH,QAAO,UAAU;;IAGrB;AAEF,SAAO,QAAQ,uBAAuB,CAAC,SAAS,CAAC,IAAI,YAAY;GAC/D,MAAM,MAAM,eAAe;AAC3B,OAAI,OAAO,OAAO,MAAM,IAAI,QAAQ,IAAI,SAAgD;IACtF,MAAM,YAAa,OAAO,MAAM,IAAI,MAClC,IAAI;AAEN,QAAI,OAAO,SAAS,EAClB,WAAU,uBAAuB,OAAO,KAAK,WAAW;KACtD,MAAM,MAAM;KACZ,IAAI,MAAM;KACV,UAAU,MAAM;KAChB,GAAI,MAAM,eAAe,EAAE,aAAa,MAAM,aAAa;KAC3D,QAAQ;MACN,MAAM,MAAM;MACZ,GAAI,MAAM,QAAQ,MAAM,KAAK,SAAS,KAAK,EAAE,MAAM,MAAM,MAAM;MAChE;KACF,EAAE;QAEH,QAAO,UAAU;;IAGrB;AAEF,QAAM,SAAS,OAAO;AACtB,gBAAc,MAAM;AACpB,mBAAiB,MAAM;;CAGzB,MAAM,0BAA0B;AAC9B,iBAAe,GAAG;;CAGpB,MAAM,gCAAgC;AACpC,MAAI,wBAAwB;AAC1B,2BAAwB;AACxB;;AAEF,SAAO,SAAS,WAAW;;CAG7B,MAAM,eACJ,4CAAC;EACC,OAAO;GACL,SAAS;GACT,YAAY;GACZ,YAAYP,QAAM;GAClB,SAAS;GACT,cAAc;GACd,KAAK;GACN;aAED,4CAAC;GACC,eAAe,QAAQ,OAAO;GAC9B,OAAO;IACL,SAAS;IACT,YAAY;IACZ,KAAK;IACL,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,YAAYA,QAAM;IAClB,YAAY,SAAS,SAASA,QAAM,mBAAmB;IACvD,WAAW,SAAS,SAAS,yCAAyC;IACtE,YAAY,SAAS,SAAS,MAAM;IACpC,UAAU,SAAS,SAASA,QAAM,WAAWA,QAAM;IACnD,OAAOA,QAAM;IACd;cAED,2CAACQ,mCAAa,OAAO,EAAE,UAAU,IAAI,GAAI;IAElC,EACT,4CAAC;GACC,eAAe,QAAQ,OAAO;GAC9B,OAAO;IACL,SAAS;IACT,YAAY;IACZ,KAAK;IACL,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,YAAYR,QAAM;IAClB,YAAY,SAAS,SAASA,QAAM,mBAAmB;IACvD,WAAW,SAAS,SAAS,yCAAyC;IACtE,YAAY,SAAS,SAAS,MAAM;IACpC,UAAU,SAAS,SAASA,QAAM,WAAWA,QAAM;IACnD,OAAOA,QAAM;IACd;cAED,2CAACS,kCAAY,OAAO,EAAE,UAAU,IAAI,GAAI;IAEjC;GACL;AAGR,QACE,4CAAC;EAAI,WAAW,GAAG,0BAA0B;;GAC1C;GACD,2CAAC;IAAI,WAAW,GAAG,UAAU;cAC3B,2CAAC;KACC,SAAS,aAAa,SAAS;KACzB;KACN,cAAc;KACd,SAAS;KACT,QAAQ;KACI;KACZ,cAAc,WAAW,eAAe;MACxC;KACE;GACL,iBAAiB,2CAAC,wBAAqB,eAAe,iBAAiB,MAAM,GAAI;GACjF,SAAS,SACR;IACE,2CAAC;KAAI,WAAW,GAAG,UAAU;eAC3B,2CAAC;MACC,SAAS;MACT,UAAU,aAAa,YAAY;MACnC,SACE,aAAa,iBAAiB,MAAM,MAAM,EAAE,UAAU,aAAa,eAAe,EAC9E,WAAW;MAEjB,aAAa;MACb,iBAAiB;MACjB,qBAAqB;MACrB,WAAW;MACX,wBAAwB,qBAAqB,MAAM,CAAC,EAAE;MACtD,wBAAwB;AACtB,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;OAExB;MACE;IACN,2CAAC;KAAI,WAAW,GAAG,UAAU;eAC3B,2CAAC;MACC,MAAM;MACN,WAAW;MACX,wBAAwB,kBAAkB,SAAS,CAAC,KAAK;MACzD,gBAAgB,kBAAkB;OAAE,MAAM;OAAM,MAAM;OAAO,CAAC;MAC9D,YAAY,QACV,kBAAkB;OAChB,MAAM;OACN,MAAM;OACN,eAAe;QACb,MAAM,IAAI;QACV,aAAa,IAAI;QACjB,yBAAyB,IAAI;QAC7B,kBAAkB,IAAI;QACvB;OACF,CAAC;MAEJ,cAAc,YAAY,kBAAkB;OAAE,MAAM;OAAM;OAAS,CAAC;OACpE;MACE;IACN,2CAAC;KAAI,WAAW,GAAG,UAAU;eAC3B,2CAAC;MAEO;MACN,gBAAgB,mBAAmB;MACnC,WAAW;MACX,wBAAwB,uBAAuB,MAAM,CAAC,EAAE;MACzC;MACA;MACD;MACd,eAAe,UAAU,KAAK,MAAM,EAAE,KAAK;MAC3C,uBAAuB,IAAI,QAAQ;AACjC,yBAAkB,UAAU;QAAE,GAAG;SAAO,KAAK;QAAK,EAAE;AACpD,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,uBAAuB,IAAI,QAAQ;AACjC,yBAAkB,UAAU;QAAE,GAAG;SAAO,KAAK;QAAK,EAAE;AACpD,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,uBAAuB,IAAI,QAAQ;AACjC,wBAAiB,UAAU;QAAE,GAAG;SAAO,KAAK;QAAK,EAAE;AACnD,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAER;MAChB,iBAAiB,YAAY,UAAU;AACrC,0BAAmB,UAAU;QAC3B,GAAG;SACF,aAAa,CAAC,GAAI,KAAK,eAAe,EAAE,EAAG,MAAM;QACnD,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,kBAAkB,YAAY,KAAK,UAAU;AAC3C,0BAAmB,UAAU;QAC3B,GAAG;SACF,aAAa,KAAK,aAAa,KAAK,GAAG,MAAO,MAAM,MAAM,QAAQ,EAAG,IAAI,EAAE;QAC7E,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,oBAAoB,YAAY,QAAQ;AACtC,0BAAmB,UAAU;QAC3B,GAAG;SACF,aAAa,KAAK,aAAa,QAAQ,GAAG,MAAM,MAAM,IAAI,IAAI,EAAE;QAClE,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAEA;MACxB,yBAAyB,YAAY,UAAU;AAC7C,kCAA2B,UAAU;QACnC,GAAG;SACF,aAAa,CAAC,GAAI,KAAK,eAAe,EAAE,EAAG,MAAM;QACnD,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,0BAA0B,YAAY,KAAK,UAAU;AACnD,kCAA2B,UAAU;QACnC,GAAG;SACF,aAAa,KAAK,aAAa,KAAK,GAAG,MAAO,MAAM,MAAM,QAAQ,EAAG,IAAI,EAAE;QAC7E,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;MAExB,4BAA4B,YAAY,QAAQ;AAC9C,kCAA2B,UAAU;QACnC,GAAG;SACF,aAAa,KAAK,aAAa,QAAQ,GAAG,MAAM,MAAM,IAAI,IAAI,EAAE;QAClE,EAAE;AACH,qBAAc,KAAK;AACnB,wBAAiB,KAAK;;QAxEnB,SA0EL;MACE;OAEL,GAEH,4CAAC;IAAI,WAAW,GAAG,cAAc;;KAC/B,2CAAC;MAAqB;MAA6B;OAAkB;KACrE,2CAAC;MACC,wBAAwB;MACL;MACnB,eAAe,CAAC,CAAC;OACjB;KACD,CAAC,YAAY,mBAAmB,cAAc,2CAACC,2BAAiB;;KAC7D;GAER,2CAAC;IACC,MAAM,eAAe;IACrB,MAAM,eAAe;IACrB,eAAe,eAAe;IAC9B,eAAe,kBAAkB;KAAE,MAAM;KAAO,MAAM;KAAO,CAAC;IAC9D,UAAU;IACV,WAAW;KACX;GAGF,4CAACC;IACC,MAAM,eAAe;IACrB,gBAAgB,kBAAkB;KAAE,MAAM;KAAO,SAAS;KAAI,CAAC;IAC/D;IACA,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAU;IACV,QAAQ;KACN,SAAS;MAAE,SAAS;MAAG,cAAc;MAAG,UAAU;MAAU;KAC5D,MAAM;MAAE,SAAS;MAAG,QAAQ;MAAG;KAChC;;KAGD,4CAAC;MAAI,WAAW,GAAG,kBAAkB;iBACnC,4CAAC;OAAK,WAAW,GAAG,mBAAmB;;QAAE;QAAQ,eAAe;QAAQ;;QAAW,EACnF,2CAAC;OACC,WAAW,GAAG,sBAAsB;OACpC,eAAe,kBAAkB;QAAE,MAAM;QAAO,SAAS;QAAI,CAAC;OAC9D,cAAW;iBACZ;QAEQ;OACL;KAGN,2CAAC;MAAI,WAAW,GAAG,qBAAqB;gBACtC,4CAAC;OAAK,WAAW,GAAG,yBAAyB;;QAAE;QACZ,eAAe;QAAQ;;QACnD;OACH;KAGN,4CAAC;MAAI,WAAW,GAAG,oBAAoB;iBACrC,2CAACC;OACC,MAAK;OACL,eAAe,kBAAkB;QAAE,MAAM;QAAO,SAAS;QAAI,CAAC;OAC9D,OAAO;QAAE,cAAc;QAAG,QAAQ;QAAI,eAAe;QAAI;iBAC1D;QAEQ,EACT,2CAACA;OACC,MAAK;OACL;OACA,MAAK;OACL,SAAS;OACT,OAAO;QAAE,cAAc;QAAG,QAAQ;QAAI,eAAe;QAAI;iBAC1D;QAEQ;OACL;;KACA;;GACJ"}
1
+ {"version":3,"file":"index.cjs","names":["antdTheme","methodColors","darkerMethodColors","buildTreeDataStructure","getAllTreeKeys","filterTreeData","getSidebarStyles","Typography","EndpointItem","darkerMethodColors","methodColors","Tag","Text","convertToRenderableTreeData","Sidebar","getSidebarStyles","getAllTreeKeys","convertToRenderableTreeData","filterTreeData","Resizable","Tooltip","Input","SearchOutlined","Button","Tree","Flex","Text","Tooltip","methodColors","Title","Flex","Button","LinkIcon","Text","Divider","Card","Typography","SafetyOutlined","InfoCircleOutlined","DownOutlined","Button","AppstoreOutlined","BarsOutlined","Flex","Title","Divider","Typography","requestColumns","responseColumns","buildRequestData","Tag","buildHeaderData","EndpointPage","methodColors","Table","Button","LeftOutlined","Breadcrumb","Title","Paragraph","Card","Tabs","MainContent","Flex","Title","Text","Button","MouseSquareIcon","EndpointPage","Grid","Typography","useBreakpoint","Tooltip","Title","RightOutlined","Button","EditOutlined","EyeOutlined","Grid","useBreakpoint","Title","Button","UpCircleOutlined","Input","Form","message","Drawer","Button","PlusOutlined","Input","Select","Switch","TrashIcon","Modal","Grid","theme","useBreakpoint","Tag","Tooltip","Title","Button","UpCircleOutlined","methodColors","Table","Select","Input","SearchOutlined","PlusOutlined","Empty","TrashIcon","EditOutlined","Pagination","DownOutlined","CheckCircleOutlined","Modal","Alert","ExclamationCircleFilled","Grid","useBreakpoint","Title","Button","PlusOutlined","UpCircleOutlined","Tooltip","TrashIcon","EditOutlined","Form","message","Drawer","Button","PlusOutlined","Input","Tooltip","Modal","Typography","Tag","Text","Grid","Tooltip","Input","SearchOutlined","Button","Tree","MinusSquareOutlined","PlusSquareOutlined","Flex","Text","Resizable","Typography","Tag","theme","Table","Button","LeftOutlined","Breadcrumb","Tooltip","Title","Card","Tabs","Flex","Title","Text","Button","MouseSquareIcon","SyntaxHighlighter","json","Codebox","antdTheme","hljs","CodeboxSidebar","antdTheme","token","tokens","Typography","Tooltip","Button","CopyOutlined","Select","Codebox","message","Grid","EditOutlined","EyeOutlined","CodeboxSidebar","Modal","Button","SyntaxHighlighter","json","hljs","token","tokens","Typography","Tooltip","Button","CopyOutlined","Select","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/info-circle.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/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 // Used in styles for full specificity:\n // → .css-dev-only-do-not-override-xxx.ComponentName-className\n const scope = (className: string) => `.${hashId}.${componentName}-${className}`\n\n // Used in JSX: className=\"ComponentName-className css-dev-only-do-not-override-xxx\"\n const cx = (...classes: string[]) =>\n classes.map((cls) => `${componentName}-${cls} ${hashId}`).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 },\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={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={{\n width: 333,\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: token.colorPrimary,\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: '17.5rem',\n height: '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: token.colorPrimary,\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 { Divider, Flex } 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 = () => {\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={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 <Flex wrap={'wrap'} gap={viewStyle === 'grid' ? '1.5rem' : 0} vertical={viewStyle === 'list'}>\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 {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\nconst buildRequestData = (params: 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>\n {p.name}\n {typeLabel && (\n <span\n style={{\n color: 'rgba(0,0,0,0.45)',\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {p.required ? (\n <span style={{ color: 'red' }}>*</span>\n ) : (\n <span style={{ color: '#52C41A' }}>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) => {\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: 'rgba(0,0,0,0.45)',\n marginLeft: '0.25rem',\n marginRight: '0.25rem',\n }}\n >\n {typeLabel}\n </span>\n )}\n {header.required ? (\n <span style={{ color: 'red' }}>*</span>\n ) : (\n <span style={{ color: '#52C41A' }}>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 } = useStyle('EndpointPage', (token, scope) => ({\n [scope('docs-endpoint-container')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: token.marginLG,\n height: '100%',\n },\n [scope('content')]: {\n width: '100%',\n height: '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 }))\n\n const methodStyle = methodColors[selectedEndpoint?.method as keyof typeof methodColors]\n const headerParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'header') || []\n )\n const pathParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'path') || []\n )\n const queryParams = buildRequestData(\n selectedEndpoint?.parameters?.filter((p) => p.in === 'query') || []\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 />\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 />\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 />\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)\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: 'rgba(0,0,0,0.45)',\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 />\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 height: '100%',\n width: '100%',\n maxHeight: '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 switcherNode?: React.ReactNode\n}\n\nexport const ApiDocumentationBar = ({\n apiName,\n mode,\n onModeChange,\n onReset,\n onSave,\n hasChanges = 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: token.marginMD, // 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: token.marginMD,\n flex: 1,\n justifyContent: 'flex-end',\n },\n [scope('mobileActions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.marginSM, // 12px tighter for mobile\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} 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} onClick={onSave}>\n Save & Publish Changes\n </Button>\n </div>\n </div>\n )\n}\n","import { Input, Button, Grid } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { 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}\n\nexport const GeneralSection = ({\n apiName,\n authType,\n version,\n description,\n onApiNameChange,\n onDescriptionChange,\n collapsed = false,\n onToggleCollapse,\n onChangeDetected,\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',\n borderRadius: token.borderRadius,\n overflow: 'hidden',\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',\n gap: token.paddingLG,\n padding: token.paddingLG,\n paddingBottom: (token as any).paddingXXL ?? 48,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('row')]: {\n display: 'flex',\n gap: token.paddingLG,\n width: '100%',\n },\n [scope('field')]: {\n display: 'flex',\n flexDirection: 'column',\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('label-required')]: {\n color: token.colorError,\n fontSize: token.fontSize,\n },\n [scope('count')]: {\n alignSelf: 'flex-end',\n fontSize: token.fontSize,\n color: token.colorTextDescription,\n marginTop: token.marginXXS,\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 General\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')} style={isMobile ? { padding: token.paddingMD, paddingBottom: (token as any).paddingXXL ?? 48 } : undefined}>\n <div className={cx('row')} style={isMobile ? { flexDirection: 'column' } : undefined}>\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>API Name</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input\n size=\"large\"\n value={apiName}\n onChange={(e) => {\n onApiNameChange(e.target.value)\n onChangeDetected?.()\n }}\n maxLength={35}\n showCount\n />\n </div>\n\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Authentication Type</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input size=\"large\" value={authType} disabled />\n </div>\n\n <div className={cx('field')}>\n <div className={cx('label')}>\n <span>Version</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input size=\"large\" value={version} disabled />\n </div>\n </div>\n\n <div className={cx('field')} style={{ width: '100%' }}>\n <div className={cx('label')}>\n <span>Description</span>\n <span className={cx('label-required')}>*</span>\n </div>\n <Input.TextArea\n size=\"large\"\n value={description}\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 </div>\n )\n}\n","import React from 'react'\n\nconst Trash = (props: React.SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask id=\"path-1-inside-1_17984_239034\" 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=\"#FF4D4F\" mask=\"url(#path-1-inside-1_17984_239034)\" />\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=\"#FF4D4F\" />\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=\"#FF4D4F\" 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=\"#FF4D4F\" 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=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.7476 23.375H21.2451\" stroke=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M18.125 20.375H21.875\" stroke=\"#FF4D4F\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default Trash\n","import React from 'react'\n\nconst InfoCircle = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M12 22C17.5 22 22 17.5 22 12C22 6.5 17.5 2 12 2C6.5 2 2 6.5 2 12C2 17.5 6.5 22 12 22Z\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 8V13\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.9946 16H12.0036\" stroke=\"black\" strokeOpacity=\"0.45\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport default InfoCircle\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}\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}\n\nconst PARAM_IN_OPTIONS = [\n { label: 'query', value: 'query' },\n { label: 'header', value: 'header' },\n { label: 'path', value: 'path' },\n]\n\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}) => {\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 })\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: 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 isAddEnabled = mode === 'edit' ? hasChanges : !!(nameValue?.trim() && inValue && typeValue)\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 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 }\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={{ required: true, in: 'query', type: 'string' }}\n onValuesChange={() => {\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={PARAM_IN_OPTIONS} />\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 {/* 4. Required? — Switch */}\n <Form.Item name=\"required\">\n <div className={cx('switch-row')}>\n <Switch\n checked={requiredValue ?? true}\n onChange={(checked) => form.setFieldValue('required', checked)}\n style={{ backgroundColor: (requiredValue ?? true) ? token.colorPrimary : undefined }}\n />\n <span className={cx('switch-label')}>Required?</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' : 'Add'} {paramName} parameter\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 </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 } from 'react'\nimport type { FC } from 'react'\nimport {\n Button,\n Empty,\n Input,\n Modal,\n Pagination,\n Select,\n Table,\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 EditOutlined,\n CheckCircleOutlined,\n SearchOutlined,\n} from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport InfoCircle from '../../../../assets/info-circle'\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 = 5\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 mode?: 'edit' | 'view'\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 mode = 'edit',\n}) => {\n const [expandedId, setExpandedId] = useState<string | null>(null)\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 [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 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 borderRadius: token.borderRadius,\n overflow: 'hidden',\n width: '100%',\n flexShrink: 0,\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 width: 64,\n padding: `0 ${token.paddingXS}px`,\n borderRadius: token.borderRadius,\n border: '1px solid',\n fontSize: token.fontSize,\n fontWeight: 400,\n lineHeight: '22px',\n whiteSpace: 'nowrap' as const,\n alignSelf: 'stretch',\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: token.marginXXS,\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-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 },\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 24px`,\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-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: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderColor: token.colorPrimary,\n color: token.colorPrimary,\n '&:hover': {\n borderColor: `${token.colorPrimary} !important`,\n color: `${token.colorPrimary} !important`,\n },\n },\n [scope('param-delete-btn')]: {\n width: 32,\n height: 32,\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\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 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.colorTextSecondary,\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 // ── 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 '& .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 <span className={cx('view-param-name')}>{row.name}</span>\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 <span className={cx('view-param-desc')}>{row.description || '--'}</span>\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 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 <Table<ViewParamRow>\n dataSource={buildViewParamRows(endpointParams[ep.id] ?? [])}\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 </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 <Table<ViewParamRow>\n dataSource={buildViewParamRows(endpointResponseParams[ep.id] ?? [])}\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 </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 />\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 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 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={{\n padding: 0,\n lineHeight: 1,\n width: 32,\n height: 32,\n fontSize: 20,\n }}\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={<EditOutlined />}\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 type=\"text\"\n icon={<TrashIcon height={32} width={32} />}\n style={{ padding: 0, lineHeight: 1 }}\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={<EditOutlined />}\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 <div\n className={cx('param-row')}\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 {openRequestPanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <code className={cx('code-area')}>\n {JSON.stringify(\n (endpointParams[ep.id] ?? []).map((p) => ({\n name: p.name,\n in: p.in,\n type: p.type,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n })),\n null,\n 2\n )}\n </code>\n <div className={cx('code-footer')}>\n <Button ghost size=\"small\" className={cx('code-btn')}>\n Validate\n </Button>\n <Button ghost size=\"small\" className={cx('code-btn')}>\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 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 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={{\n padding: 0,\n lineHeight: 1,\n width: 32,\n height: 32,\n fontSize: 20,\n }}\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={<EditOutlined />}\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={<EditOutlined />}\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 type=\"text\"\n icon={<TrashIcon height={18} width={18} />}\n style={{ padding: 0, lineHeight: 1 }}\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')}\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 <InfoCircle style={{ width: 24, height: 24 }} />\n </div>\n {openResponsePanels.has(ep.id) && (\n <div className={cx('code-panel')}>\n <code className={cx('code-area')}>\n {JSON.stringify(\n (endpointResponseParams[ep.id] ?? []).map((p) => ({\n name: p.name,\n in: p.in,\n type: p.type,\n required: p.required,\n ...(p.description ? { description: p.description } : {}),\n ...(p.enum && p.enum.length > 0 ? { enum: p.enum } : {}),\n })),\n null,\n 2\n )}\n </code>\n <div className={cx('code-footer')}>\n <Button ghost size=\"small\" className={cx('code-btn')}>\n Validate\n </Button>\n <Button ghost size=\"small\" className={cx('code-btn')}>\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 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 />\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 may not be saved\"\n closable\n onClose={onClose}\n icon={<ExclamationCircleFilled />}\n showIcon\n />\n </div>\n )\n}\n","import type { FC } from 'react'\nimport { Button, Tooltip, Grid } from 'antd'\nconst { useBreakpoint } = Grid\nimport Title from 'antd/es/typography/Title'\nimport { PlusOutlined, UpCircleOutlined, EditOutlined } from '@ant-design/icons'\nimport TrashIcon from '@doc-lib/assets/trash'\nimport { useStyle } from '@doc-lib/hooks/useStyle'\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) => void\n}\n\nexport const TagsSection: FC<TagsSectionProps> = ({\n tags,\n collapsed = false,\n onToggleCollapse,\n onAddTag,\n onEditTag,\n onDeleteTag,\n}) => {\n const screens = useBreakpoint()\n const isMobile = !screens.md\n const { wrapSSR, cx, token } = useStyle('TagsSection', (token, scope) => ({\n [scope('root')]: {\n display: 'flex',\n flexDirection: 'column',\n borderRadius: token.borderRadius,\n overflow: 'hidden',\n width: '100%',\n flexShrink: 0,\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('head-actions')]: {\n display: 'flex',\n alignItems: 'center',\n gap: token.margin,\n },\n [scope('body')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: token.paddingLG,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n },\n [scope('tag-row')]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: 50,\n paddingTop: token.controlHeightLG,\n paddingBottom: token.controlHeightLG,\n paddingRight: token.paddingLG,\n borderBottom: `1px solid ${token.colorBorder}`,\n width: '100%',\n },\n [scope('tag-row-last')]: {\n borderBottom: 'none',\n paddingBottom: token.marginLG,\n },\n [scope('tag-info')]: {\n display: 'flex',\n alignItems: 'center',\n gap: 32,\n flex: 1, // ← أضف\n minWidth: 0, // ← أضف\n },\n [scope('tag-col')]: {\n display: 'flex',\n flexDirection: 'column',\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('btn-delete')]: {\n width: 40,\n height: 40,\n border: `1px solid ${token.colorError}`,\n borderRadius: token.borderRadius,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('btn-edit')]: {\n width: 40,\n height: 40,\n border: `1px solid ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n background: token.colorBgContainer,\n boxShadow: '0px 2px 0px 0px rgba(0,0,0,0.02)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n [scope('tag-row-mobile')]: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 8,\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',\n gap: 2,\n flex: 1,\n minWidth: 0,\n paddingTop: 4,\n },\n [scope('tag-col-mobile')]: {\n display: 'flex',\n flexDirection: 'row',\n gap: 4,\n alignItems: 'center',\n minWidth: 0,\n flexWrap: 'nowrap',\n },\n [scope('body-mobile')]: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n padding: token.paddingMD,\n background: token.colorBgElevated,\n borderRadius: `0 0 ${token.borderRadius}px ${token.borderRadius}px`,\n overflowX: 'auto',\n },\n }))\n\n return wrapSSR(\n <div className={cx('root')}>\n {/* HEAD */}\n <div className={cx('head')}>\n <Title level={4} style={{ margin: 0, color: token.colorTextHeading }}>\n Tags\n </Title>\n <div className={cx('head-actions')}>\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\n {/* BODY */}\n {!collapsed &&\n (isMobile ? (\n // ── MOBILE BODY ──────────────────────────────────────────\n <div className={cx('body-mobile')}>\n {tags.map((tag, index) => {\n const isLast = index === tags.length - 1\n return (\n <div\n key={tag.name}\n className={cx('tag-row-mobile', isLast ? 'tag-row-mobile-last' : '')}\n >\n {/* Left: tag info stacked */}\n <div className={cx('tag-info-mobile')}>\n {/* Tag Name row */}\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 {/* Description row */}\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={\n tag.description && tag.description.length > 20 ? tag.description : ''\n }\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\n {/* Right: action buttons — same as desktop */}\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)}\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={<EditOutlined style={{ fontSize: 18 }} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n ) : (\n // ── DESKTOP BODY — EXACTLY AS BEFORE, ZERO CHANGES ───────\n <div className={cx('body')}>\n {tags.map((tag, index) => {\n const isLast = index === tags.length - 1\n return (\n <div key={tag.name} className={cx('tag-row', isLast ? 'tag-row-last' : '')}>\n {/* Tag info columns */}\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={\n tag.description && tag.description.length > 30 ? tag.description : ''\n }\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 title={tag.externalDocsUrl.length > 25 ? tag.externalDocsUrl : ''}>\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 {/* Actions */}\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)}\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={<EditOutlined style={{ fontSize: 18 }} />}\n disabled={tag.isDefault}\n onClick={() => !tag.isDefault && onEditTag?.(tag)}\n style={{ width: 32, height: 32, padding: 0, lineHeight: 1 }}\n />\n </Tooltip>\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )\n}\n","import type { FC } from 'react'\nimport { useEffect, useState } from 'react'\nimport { Button, Drawer, Form, Input, Modal, Tooltip, 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 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}\n\nconst TAG_NAME_REGEX = /^[A-Za-z0-9_-]+$/\nconst TAG_DESC_REGEX = /^[A-Za-z0-9_-]+$/\nconst EXT_DESC_REGEX = /^[A-Za-z0-9_-]+$/\n\nexport const AddTagDrawer: FC<AddTagDrawerProps> = ({\n open,\n onClose,\n mode,\n initialValues,\n onAddTag,\n onEditTag,\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))\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 // Clear link value and errors whenever External Docs Description is cleared\n useEffect(() => {\n if (!extDocsDesc?.trim()) {\n form.setFields([{ name: 'externalDocsLink', value: undefined, errors: [] }])\n }\n }, [extDocsDesc])\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 { pattern: TAG_NAME_REGEX, message: 'Only letters, numbers, underscores, and hyphens' },\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 validator: (_, value) => {\n if (!value || TAG_DESC_REGEX.test(value)) return Promise.resolve()\n return Promise.reject(new Error('Only letters, numbers, underscores, and hyphens'))\n },\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 validator: (_, value) => {\n if (!value || EXT_DESC_REGEX.test(value)) return Promise.resolve()\n return Promise.reject(new Error('Only letters, numbers, underscores, and hyphens'))\n },\n },\n ]}\n >\n <Input showCount maxLength={25} placeholder=\"Describe External Docs\" />\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: 512, message: 'Maximum 512 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 new URL(link)\n return Promise.resolve()\n } catch {\n return Promise.reject(new Error('Please enter a valid URL'))\n }\n },\n },\n ]}\n >\n <Tooltip\n title={!isLinkEnabled ? 'You need to add the External Docs Description first.' : ''}\n color=\"rgba(0,0,0,0.85)\"\n placement=\"topLeft\"\n >\n <Input\n showCount\n maxLength={512}\n placeholder=\"External Docs Link\"\n disabled={!isLinkEnabled}\n onChange={(e) => {\n form.setFieldValue('externalDocsLink', e.target.value)\n }}\n />\n </Tooltip>\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 { 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 overflowX: 'clip' as const,\n borderRadius: token.borderRadius,\n height: 'auto',\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\n ? null\n : nodeProps.expanded\n ? <MinusSquareOutlined style={{ fontSize: 12 }} />\n : <PlusSquareOutlined style={{ fontSize: 12 }} />\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<br />Documentation Found\n </Text>\n )}\n </Flex>\n )}\n </div>\n )\n\n if (isMobile) {\n return wrapSSR(\n <aside className={cx('sider')} style={{ width: '100%', 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={{ top: false, right: true, bottom: false, left: false, topRight: false, bottomRight: false, bottomLeft: false, topLeft: false }}\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\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>\n {p.name}\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: 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, 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}>\n {name}\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\n ? header.schema.enum.map((e: string) => <Tag key={e}>{e}</Tag>)\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 ? prop.enum.map((e: string) => <Tag key={e}>{e}</Tag>) : '--',\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 height: '100%',\n },\n [scope('content')]: {\n width: '100%',\n height: '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 '& .ant-table-tbody > tr > td': {\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 const requestBodyData = buildRequestBodyData(selectedEndpoint?.requestBody, token)\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 ...(requestBodyData.length > 0\n ? [\n {\n key: 'requestBody',\n label: 'Request Body',\n children: (\n <Table\n columns={requestColumns}\n dataSource={requestBodyData}\n pagination={false}\n bordered\n size=\"small\"\n rowClassName={(_, idx) => cx(idx % 2 === 0 ? 'row-even' : 'row-odd')}\n />\n ),\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'\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 width: '100%',\n height: 'auto',\n borderRadius: token.borderRadius,\n padding: token.paddingXL,\n overflow: 'hidden', // ← أضف\n minWidth: 0, // ← أضف\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:\n 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 />\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 height: '100%',\n maxHeight: '100%',\n overflow: 'auto',\n pre: { height: '100%' },\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 overflowY: 'auto',\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 activeRequestTab,\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 // Hide the Request curl panel when the active parameter tab (header/path/query) has no entries\n const hasActiveTabParams = (selectedEndpoint?.parameters ?? []).some(\n (p) => p.in === activeRequestTab\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 — only visible when active tab has parameters */}\n {hasActiveTabParams && (\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, Schema } from '@doc-lib/types/OpenApi'\nimport { OverviewData, EndpointData } from '../entities'\nimport { nanoid } from 'nanoid'\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 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-${nanoid(8)}` } as EndpointData)\n })\n } else {\n if (!groupedPathsByTags.default) {\n groupedPathsByTags.default = []\n }\n groupedPathsByTags.default.push({ ...entry, id: `endpoint-${nanoid(8)}` } 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-${nanoid(8)}`, // 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 { Sidebar } from './console/Sidebar'\nimport { MainContent } from './console/MainContent'\nimport CodeboxSidebar from './console/CodeboxSidebar'\nimport type { ParameterFormValues } from './components/ApiPage/components/AddParameterDrawer'\nimport { Button, Grid, message, Modal } from 'antd'\nimport { EditOutlined, EyeOutlined } 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 [hasChanges, setHasChanges] = useState(false)\n const [bannerVisible, setBannerVisible] = useState(false)\n const [resetKey, setResetKey] = useState(0)\n const [generalCollapsed, setGeneralCollapsed] = useState(false)\n const [tagsCollapsed, setTagsCollapsed] = useState(false)\n const [endpointsCollapsed, setEndpointsCollapsed] = useState(false)\n const [localApiName, setLocalApiName] = useState('')\n const [localDescription, setLocalDescription] = useState('')\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 [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; tagName: string }>({\n open: false,\n tagName: '',\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 builtTreeData,\n selectedEndpoint,\n setOriginalData,\n setTransformedData,\n setBuiltTreeData,\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\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 overflowY: 'auto',\n },\n [scope('section')]: {\n flexShrink: 0,\n height: 'auto',\n },\n [scope('docs-layout')]: {\n display: 'flex',\n flexShrink: 0,\n height: 'auto',\n gap: token.marginLG,\n width: '100%',\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 if (!rawFile?.tags) return []\n return 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 }, [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[] } | 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 }\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[] } | 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 }\n })\n }\n )\n })\n return result\n }, [originalData, selectedApi])\n\n useEffect(() => {\n setLocalTags(tagMetadata)\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n }, [selectedApi])\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 // 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 // Skip if parameters are already in sync (prevents infinite loop after our own setSelectedEndpoint call)\n if (JSON.stringify(selectedEndpoint.parameters ?? []) === JSON.stringify(openApiParams)) return\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 // Edit mode does not group response params by status code, so we apply to all.\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 setSelectedEndpoint({\n ...selectedEndpoint,\n parameters: openApiParams,\n responses: patchedResponses,\n }) \n }, [mode, selectedEndpoint, 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 setHasChanges(true)\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 setHasChanges(true)\n setBannerVisible(true)\n }\n\n const handleDeleteTagConfirm = () => {\n setLocalTags((prev) => prev.filter((t) => t.name !== deleteTagModal.tagName))\n messageApi.success(`${deleteTagModal.tagName} tag has been deleted successfully.`)\n setDeleteTagModal({ open: false, tagName: '' })\n setHasChanges(true)\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 setHasChanges(false)\n setBannerVisible(false)\n setLocalApiName(selectedApi?.title ?? '')\n setLocalDescription(selectedApi?.description ?? '')\n setEndpointNames({})\n setEndpointDescs({})\n setEndpointTags({})\n setEndpointParams(initialEndpointParams)\n setEndpointResponseParams(initialEndpointResponseParams)\n setResetKey((prev) => prev + 1)\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 },\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 },\n }))\n } else {\n delete methodObj['x-response-params']\n }\n }\n })\n\n await onSave?.(cloned)\n setHasChanges(false)\n setBannerVisible(false)\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 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: '8px 12px',\n border: 'none',\n cursor: 'pointer',\n borderRadius: 8,\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: mode === 'view' ? token.fontSize : token.fontSizeLG,\n color: token.colorText,\n }}\n >\n <EyeOutlined style={{ fontSize: 18 }} />\n View\n </button>\n </div>\n )\n\n return (\n <div className={cx('documentation-container')}>\n {contextHolder}\n <div className={cx('section')}>\n <ApiDocumentationBar\n apiName={selectedApi?.title || 'API'}\n mode={mode}\n onModeChange={setMode}\n onReset={handleReset}\n onSave={handleSave}\n hasChanges={hasChanges}\n switcherNode={isMobile ? switcherNode : undefined}\n />\n </div>\n {bannerVisible && <UnsavedChangesBanner onClose={() => setBannerVisible(false)} />}\n {mode === 'edit' ? (\n <>\n <div className={cx('section')}>\n <GeneralSection\n apiName={localApiName}\n authType={selectedApi?.authType || ''}\n version={\n selectedApi?.relatedVersions?.find((v) => v.apiId === selectedApi?.currentVersion)\n ?.version || ''\n }\n description={localDescription}\n onApiNameChange={setLocalApiName}\n onDescriptionChange={setLocalDescription}\n collapsed={generalCollapsed}\n onToggleCollapse={() => setGeneralCollapsed((c) => !c)}\n onChangeDetected={() => {\n setHasChanges(true)\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) => setDeleteTagModal({ open: true, tagName })}\n />\n </div>\n <div className={cx('section')}>\n <EndpointsSection\n key={resetKey}\n mode={mode}\n endpointsByTag={getEndpointsByTag()}\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 setHasChanges(true)\n setBannerVisible(true)\n }}\n onEndpointDescChange={(id, val) => {\n setEndpointDescs((prev) => ({ ...prev, [id]: val }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEndpointTagsChange={(id, val) => {\n setEndpointTags((prev) => ({ ...prev, [id]: val }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n endpointParams={endpointParams}\n onAddParameter={(endpointId, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEditParameter={(endpointId, idx, param) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onDeleteParameter={(endpointId, idx) => {\n setEndpointParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n endpointResponseParams={endpointResponseParams}\n onAddResponseParameter={(endpointId, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: [...(prev[endpointId] ?? []), param],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onEditResponseParameter={(endpointId, idx, param) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.map((p, i) => (i === idx ? param : p)) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n onDeleteResponseParameter={(endpointId, idx) => {\n setEndpointResponseParams((prev) => ({\n ...prev,\n [endpointId]: prev[endpointId]?.filter((_, i) => i !== idx) ?? [],\n }))\n setHasChanges(true)\n setBannerVisible(true)\n }}\n />\n </div>\n {/* future sections go here */}\n </>\n ) : (\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 {!isMobile && focusedContent === 'ENDPOINT' && <CodeboxSidebar />}\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 />\n\n {/* Delete tag confirmation modal */}\n <Modal\n open={deleteTagModal.open}\n onCancel={() => setDeleteTagModal({ open: false, tagName: '' })}\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 {deleteTagModal.tagName} tag</span>\n <button\n className={cx('deleteModalCloseBtn')}\n onClick={() => setDeleteTagModal({ open: false, tagName: '' })}\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 {deleteTagModal.tagName} tag?\n </span>\n </div>\n\n {/* FOOTER */}\n <div className={cx('deleteModalFooter')}>\n <Button\n size=\"middle\"\n onClick={() => setDeleteTagModal({ open: false, tagName: '' })}\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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"}