dishui 0.0.64 → 0.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Badge/index.js +12 -9
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js +43 -40
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.d.ts +11 -0
- package/dist/components/Card/index.js +62 -37
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.js.map +1 -1
- package/dist/components/Checkbox/index.js +32 -30
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Demo/index.js.map +1 -1
- package/dist/components/EmptyState/index.d.ts +4 -1
- package/dist/components/EmptyState/index.js +3 -3
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/FileUploader/DropZone.js.map +1 -1
- package/dist/components/FileUploader/FileItem.js.map +1 -1
- package/dist/components/FileUploader/FileUploader.js.map +1 -1
- package/dist/components/FileUploader/UploadQueue.js.map +1 -1
- package/dist/components/Input/index.js +30 -30
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Label/index.js +41 -40
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/List/index.js +47 -32
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js +61 -57
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js +49 -49
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Modal/index.d.ts +7 -3
- package/dist/components/Modal/index.js +77 -65
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/Page/index.d.ts +58 -0
- package/dist/components/Page/index.js +74 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/Select/index.js +0 -3
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/StatCard/index.d.ts +3 -1
- package/dist/components/StatCard/index.js +39 -11
- package/dist/components/StatCard/index.js.map +1 -1
- package/dist/components/Table/index.js +103 -85
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +19 -5
- package/dist/components/Tabs/index.js +32 -13
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
- package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js +141 -134
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +81 -78
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/themes.js +59 -59
- package/dist/components/pro/CodeEditor/themes.js.map +1 -1
- package/dist/components/pro/DataTable/DataTable.js +49 -48
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/Filters.js +42 -42
- package/dist/components/pro/DataTable/Filters.js.map +1 -1
- package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
- package/dist/components/pro/DataTable/PivotView.js +35 -32
- package/dist/components/pro/DataTable/PivotView.js.map +1 -1
- package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
- package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
- package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.js +37 -37
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/FileExplorer/Breadcrumb.js +53 -53
- package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
- package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileIcon.js +22 -22
- package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
- package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
- package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
- package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
- package/dist/components/pro/Flow/Flow.js +496 -494
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js +916 -917
- package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
- package/dist/components/pro/Flow/edges/EdgeRenderer.js +59 -59
- package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLayoutActions.js +9 -11
- package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
- package/dist/components/pro/Flow/lines/FreehandTool.js +9 -9
- package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/LineRenderer.js +5 -5
- package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/DataNodeView.js +113 -93
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeRenderer.js +118 -118
- package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js +1 -3
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
- package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
- package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowToolbar.js +97 -97
- package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
- package/dist/components/pro/Flow/panels/InspectorPanel.js +57 -57
- package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/OutlinePanel.js +26 -22
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js +18 -16
- package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
- package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
- package/dist/components/pro/Flow/panels/ShapePalette.js +109 -104
- package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/hooks/useTableColumns.js +7 -8
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +227 -221
- package/dist/layouts/MainLayout.js +22 -22
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Navbar.js.map +1 -1
- package/dist/layouts/Sidebar.js +94 -73
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js +11 -11
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
- package/dist/utils/i18n.js +10 -10
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js.map +1 -1
- package/dist/utils/routerBuilder.js +17 -15
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/themes.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariablePanel.js","names":[],"sources":["../../../../../src/components/pro/CodeEditor/panels/VariablePanel.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { VariableInfo } from '../types';\n\nexport interface VariablePanelProps {\n variables: VariableInfo[];\n onVariableClick: (line: number) => void;\n className?: string;\n height?: string;\n maxHeight?: string;\n}\n\ntype VariableType = 'all' | 'class' | 'function' | 'variable' | 'constant' | 'interface' | 'type' | 'method';\n\nconst VariablePanel: React.FC<VariablePanelProps> = ({ \n variables, \n onVariableClick, \n className = '',\n height,\n maxHeight = '600px',\n}) => {\n const [filter, setFilter] = useState('');\n const [sortBy, setSortBy] = useState<'name' | 'line' | 'type'>('line');\n const [selectedType, setSelectedType] = useState<VariableType>('all');\n\n // 统计各类型数量\n const typeCounts = useMemo(() => {\n const counts: Record<string, number> = {\n all: variables.length,\n class: 0,\n function: 0,\n variable: 0,\n constant: 0,\n interface: 0,\n type: 0,\n method: 0,\n };\n \n variables.forEach((v) => {\n if (v.type && counts[v.type] !== undefined) {\n counts[v.type]++;\n }\n });\n \n return counts;\n }, [variables]);\n\n const filteredVariables = useMemo(() => {\n return variables\n .filter((v) => {\n // 类型过滤\n if (selectedType !== 'all' && v.type !== selectedType) {\n return false;\n }\n // 名称过滤\n return v.name.toLowerCase().includes(filter.toLowerCase());\n })\n .sort((a, b) => {\n switch (sortBy) {\n case 'name':\n return a.name.localeCompare(b.name);\n case 'line':\n return a.line - b.line;\n case 'type':\n return (a.type || '').localeCompare(b.type || '');\n default:\n return 0;\n }\n });\n }, [variables, filter, sortBy, selectedType]);\n\n const getTypeColor = (type?: string) => {\n switch (type) {\n case 'function':\n case 'method':\n return 'text-primary';\n case 'class':\n return 'text-secondary';\n case 'variable':\n return 'text-accent';\n case 'constant':\n return 'text-warning';\n case 'interface':\n case 'type':\n return 'text-info';\n default:\n return 'text-base-content';\n }\n };\n\n const getTypeIcon = (type?: string) => {\n switch (type) {\n case 'function':\n return 'ƒ';\n case 'method':\n return 'ⓜ';\n case 'class':\n return 'C';\n case 'variable':\n return 'v';\n case 'constant':\n return 'K';\n case 'interface':\n return 'I';\n case 'type':\n return 'T';\n default:\n return '?';\n }\n };\n\n const typeButtons: Array<{ type: VariableType; label: string }> = [\n { type: 'all', label: 'All' },\n { type: 'class', label: 'Classes' },\n { type: 'function', label: 'Functions' },\n { type: 'variable', label: 'Variables' },\n { type: 'constant', label: 'Constants' },\n { type: 'interface', label: 'Interfaces' },\n { type: 'type', label: 'Types' },\n { type: 'method', label: 'Methods' },\n ];\n\n return (\n <div className={`variable-panel bg-base-100 border border-base-300 rounded-lg p-2 ${className}`}>\n <div className=\"variable-header mb-2\">\n <div className=\"flex items-center gap-2 px-2 py-1 mb-3 border-b border-base-300\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z\" />\n </svg>\n <span className=\"font-semibold\">Symbols</span>\n <span className=\"text-xs opacity-60 ml-auto\">({filteredVariables.length})</span>\n </div>\n\n {/* 类型过滤按钮 - 单行横向滚动 */}\n <div className=\"mb-2 overflow-x-auto\">\n <div className=\"flex gap-1 min-w-max pb-1\">\n {typeButtons.map(({ type, label }) => {\n const count = typeCounts[type];\n if (type !== 'all' && count === 0) return null;\n return (\n <button\n key={type}\n className={`btn btn-xs whitespace-nowrap flex-shrink-0 ${selectedType === type ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSelectedType(type)}\n >\n {label}\n {count > 0 && <span className=\"ml-1 text-xs opacity-70\">({count})</span>}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* 搜索框 */}\n <input\n type=\"text\"\n placeholder=\"Search symbols...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className=\"input input-sm input-bordered w-full mb-2\"\n />\n\n {/* 排序选项 */}\n <div className=\"flex gap-1\">\n <button\n className={`btn btn-xs ${sortBy === 'line' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('line')}\n >\n Line\n </button>\n <button\n className={`btn btn-xs ${sortBy === 'name' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('name')}\n >\n Name\n </button>\n <button\n className={`btn btn-xs ${sortBy === 'type' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('type')}\n >\n Type\n </button>\n </div>\n </div>\n\n <div \n className=\"variable-content overflow-y-auto\"\n style={{ \n height: height, \n maxHeight: !height ? maxHeight : undefined \n }}\n >\n {filteredVariables.length === 0 ? (\n <div className=\"text-center text-sm opacity-60 py-4\">\n {filter ? 'No matching symbols' : 'No symbols'}\n </div>\n ) : (\n <div className=\"space-y-1\">\n {filteredVariables.map((variable, index) => (\n <div\n key={`${variable.name}-${variable.line}-${index}`}\n className=\"variable-item flex items-center gap-2 px-2 py-1 hover:bg-base-200 cursor-pointer rounded transition-colors\"\n onClick={() => onVariableClick(variable.line)}\n title={`${variable.type}: ${variable.name} (line ${variable.line})`}\n >\n <span className={`font-mono font-bold text-xs ${getTypeColor(variable.type)}`}>\n {getTypeIcon(variable.type)}\n </span>\n <span className=\"text-sm truncate flex-1 font-mono\">{variable.name}</span>\n <span className=\"text-xs opacity-60\">{variable.line}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n <style>{`\n .variable-panel .overflow-x-auto {\n scrollbar-width: thin;\n scrollbar-color: oklch(var(--bc) / 0.2) transparent;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar {\n height: 4px;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-thumb {\n background: oklch(var(--bc) / 0.2);\n border-radius: 2px;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-thumb:hover {\n background: oklch(var(--bc) / 0.3);\n }\n `}</style>\n </div>\n );\n};\n\nexport default VariablePanel;\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VariablePanel.js","names":[],"sources":["../../../../../src/components/pro/CodeEditor/panels/VariablePanel.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { VariableInfo } from '../types';\n\nexport interface VariablePanelProps {\n variables: VariableInfo[];\n onVariableClick: (line: number) => void;\n className?: string;\n height?: string;\n maxHeight?: string;\n}\n\ntype VariableType = 'all' | 'class' | 'function' | 'variable' | 'constant' | 'interface' | 'type' | 'method';\n\nconst VariablePanel: React.FC<VariablePanelProps> = ({ \n variables, \n onVariableClick, \n className = '',\n height,\n maxHeight = '600px',\n}) => {\n const [filter, setFilter] = useState('');\n const [sortBy, setSortBy] = useState<'name' | 'line' | 'type'>('line');\n const [selectedType, setSelectedType] = useState<VariableType>('all');\n\n // 统计各类型数量\n const typeCounts = useMemo(() => {\n const counts: Record<string, number> = {\n all: variables.length,\n class: 0,\n function: 0,\n variable: 0,\n constant: 0,\n interface: 0,\n type: 0,\n method: 0,\n };\n \n variables.forEach((v) => {\n if (v.type && counts[v.type] !== undefined) {\n counts[v.type]++;\n }\n });\n \n return counts;\n }, [variables]);\n\n const filteredVariables = useMemo(() => {\n return variables\n .filter((v) => {\n // 类型过滤\n if (selectedType !== 'all' && v.type !== selectedType) {\n return false;\n }\n // 名称过滤\n return v.name.toLowerCase().includes(filter.toLowerCase());\n })\n .sort((a, b) => {\n switch (sortBy) {\n case 'name':\n return a.name.localeCompare(b.name);\n case 'line':\n return a.line - b.line;\n case 'type':\n return (a.type || '').localeCompare(b.type || '');\n default:\n return 0;\n }\n });\n }, [variables, filter, sortBy, selectedType]);\n\n const getTypeColor = (type?: string) => {\n switch (type) {\n case 'function':\n case 'method':\n return 'text-primary';\n case 'class':\n return 'text-secondary';\n case 'variable':\n return 'text-accent';\n case 'constant':\n return 'text-warning';\n case 'interface':\n case 'type':\n return 'text-info';\n default:\n return 'text-base-content';\n }\n };\n\n const getTypeIcon = (type?: string) => {\n switch (type) {\n case 'function':\n return 'ƒ';\n case 'method':\n return 'ⓜ';\n case 'class':\n return 'C';\n case 'variable':\n return 'v';\n case 'constant':\n return 'K';\n case 'interface':\n return 'I';\n case 'type':\n return 'T';\n default:\n return '?';\n }\n };\n\n const typeButtons: Array<{ type: VariableType; label: string }> = [\n { type: 'all', label: 'All' },\n { type: 'class', label: 'Classes' },\n { type: 'function', label: 'Functions' },\n { type: 'variable', label: 'Variables' },\n { type: 'constant', label: 'Constants' },\n { type: 'interface', label: 'Interfaces' },\n { type: 'type', label: 'Types' },\n { type: 'method', label: 'Methods' },\n ];\n\n return (\n <div className={`variable-panel bg-base-100 border border-base-300 rounded-lg p-2 ${className}`}>\n <div className=\"variable-header mb-2\">\n <div className=\"flex items-center gap-2 px-2 py-1 mb-3 border-b border-base-300\">\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z\" />\n </svg>\n <span className=\"font-semibold\">Symbols</span>\n <span className=\"text-xs opacity-60 ml-auto\">({filteredVariables.length})</span>\n </div>\n\n {/* 类型过滤按钮 - 单行横向滚动 */}\n <div className=\"mb-2 overflow-x-auto\">\n <div className=\"flex gap-1 min-w-max pb-1\">\n {typeButtons.map(({ type, label }) => {\n const count = typeCounts[type];\n if (type !== 'all' && count === 0) return null;\n return (\n <button\n key={type}\n className={`btn btn-xs whitespace-nowrap flex-shrink-0 ${selectedType === type ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSelectedType(type)}\n >\n {label}\n {count > 0 && <span className=\"ml-1 text-xs opacity-70\">({count})</span>}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* 搜索框 */}\n <input\n type=\"text\"\n placeholder=\"Search symbols...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className=\"input input-sm input-bordered w-full mb-2\"\n />\n\n {/* 排序选项 */}\n <div className=\"flex gap-1\">\n <button\n className={`btn btn-xs ${sortBy === 'line' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('line')}\n >\n Line\n </button>\n <button\n className={`btn btn-xs ${sortBy === 'name' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('name')}\n >\n Name\n </button>\n <button\n className={`btn btn-xs ${sortBy === 'type' ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => setSortBy('type')}\n >\n Type\n </button>\n </div>\n </div>\n\n <div \n className=\"variable-content overflow-y-auto\"\n style={{ \n height: height, \n maxHeight: !height ? maxHeight : undefined \n }}\n >\n {filteredVariables.length === 0 ? (\n <div className=\"text-center text-sm opacity-60 py-4\">\n {filter ? 'No matching symbols' : 'No symbols'}\n </div>\n ) : (\n <div className=\"space-y-1\">\n {filteredVariables.map((variable, index) => (\n <div\n key={`${variable.name}-${variable.line}-${index}`}\n className=\"variable-item flex items-center gap-2 px-2 py-1 hover:bg-base-200 cursor-pointer rounded transition-colors\"\n onClick={() => onVariableClick(variable.line)}\n title={`${variable.type}: ${variable.name} (line ${variable.line})`}\n >\n <span className={`font-mono font-bold text-xs ${getTypeColor(variable.type)}`}>\n {getTypeIcon(variable.type)}\n </span>\n <span className=\"text-sm truncate flex-1 font-mono\">{variable.name}</span>\n <span className=\"text-xs opacity-60\">{variable.line}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n <style>{`\n .variable-panel .overflow-x-auto {\n scrollbar-width: thin;\n scrollbar-color: oklch(var(--bc) / 0.2) transparent;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar {\n height: 4px;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-thumb {\n background: oklch(var(--bc) / 0.2);\n border-radius: 2px;\n }\n\n .variable-panel .overflow-x-auto::-webkit-scrollbar-thumb:hover {\n background: oklch(var(--bc) / 0.3);\n }\n `}</style>\n </div>\n );\n};\n\nexport default VariablePanel;\n\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EditorView as f } from "@codemirror/view";
|
|
2
2
|
import { HighlightStyle as g, syntaxHighlighting as b } from "@codemirror/language";
|
|
3
3
|
import { tags as e } from "@lezer/highlight";
|
|
4
|
-
var
|
|
4
|
+
var c = {
|
|
5
5
|
light: { colors: {
|
|
6
6
|
background: "#ffffff",
|
|
7
7
|
foreground: "#000000",
|
|
@@ -292,11 +292,11 @@ var o = {
|
|
|
292
292
|
attribute: "#2e8b57",
|
|
293
293
|
link: "#2f5496"
|
|
294
294
|
} }
|
|
295
|
-
}, d = (
|
|
296
|
-
const
|
|
295
|
+
}, d = (t) => {
|
|
296
|
+
const r = [
|
|
297
297
|
{
|
|
298
298
|
tag: e.keyword,
|
|
299
|
-
color:
|
|
299
|
+
color: t.keyword
|
|
300
300
|
},
|
|
301
301
|
{
|
|
302
302
|
tag: [
|
|
@@ -306,19 +306,19 @@ var o = {
|
|
|
306
306
|
e.contentSeparator,
|
|
307
307
|
e.labelName
|
|
308
308
|
],
|
|
309
|
-
color:
|
|
309
|
+
color: t.atom
|
|
310
310
|
},
|
|
311
311
|
{
|
|
312
312
|
tag: [e.literal, e.inserted],
|
|
313
|
-
color:
|
|
313
|
+
color: t.number
|
|
314
314
|
},
|
|
315
315
|
{
|
|
316
316
|
tag: e.number,
|
|
317
|
-
color:
|
|
317
|
+
color: t.number
|
|
318
318
|
},
|
|
319
319
|
{
|
|
320
320
|
tag: [e.string, e.deleted],
|
|
321
|
-
color:
|
|
321
|
+
color: t.string
|
|
322
322
|
},
|
|
323
323
|
{
|
|
324
324
|
tag: [
|
|
@@ -326,97 +326,97 @@ var o = {
|
|
|
326
326
|
e.escape,
|
|
327
327
|
e.special(e.string)
|
|
328
328
|
],
|
|
329
|
-
color:
|
|
329
|
+
color: t.string
|
|
330
330
|
},
|
|
331
331
|
{
|
|
332
332
|
tag: e.definition(e.variableName),
|
|
333
|
-
color:
|
|
333
|
+
color: t.def
|
|
334
334
|
},
|
|
335
335
|
{
|
|
336
336
|
tag: e.local(e.variableName),
|
|
337
|
-
color:
|
|
337
|
+
color: t.variable
|
|
338
338
|
},
|
|
339
339
|
{
|
|
340
340
|
tag: e.variableName,
|
|
341
|
-
color:
|
|
341
|
+
color: t.variable
|
|
342
342
|
},
|
|
343
343
|
{
|
|
344
344
|
tag: [e.typeName, e.namespace],
|
|
345
|
-
color:
|
|
345
|
+
color: t.type || t.builtin
|
|
346
346
|
},
|
|
347
347
|
{
|
|
348
348
|
tag: e.className,
|
|
349
|
-
color:
|
|
349
|
+
color: t.type || t.def
|
|
350
350
|
},
|
|
351
351
|
{
|
|
352
352
|
tag: [e.special(e.variableName), e.macroName],
|
|
353
|
-
color:
|
|
353
|
+
color: t.builtin
|
|
354
354
|
},
|
|
355
355
|
{
|
|
356
356
|
tag: e.definition(e.propertyName),
|
|
357
|
-
color:
|
|
357
|
+
color: t.property
|
|
358
358
|
},
|
|
359
359
|
{
|
|
360
360
|
tag: e.propertyName,
|
|
361
|
-
color:
|
|
361
|
+
color: t.property
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
tag: e.comment,
|
|
365
|
-
color:
|
|
365
|
+
color: t.comment,
|
|
366
366
|
fontStyle: "italic"
|
|
367
367
|
},
|
|
368
368
|
{
|
|
369
369
|
tag: e.meta,
|
|
370
|
-
color:
|
|
370
|
+
color: t.meta
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
tag: e.operatorKeyword,
|
|
374
|
-
color:
|
|
374
|
+
color: t.operator
|
|
375
375
|
},
|
|
376
376
|
{
|
|
377
377
|
tag: e.operator,
|
|
378
|
-
color:
|
|
378
|
+
color: t.operator
|
|
379
379
|
},
|
|
380
380
|
{
|
|
381
381
|
tag: e.bracket,
|
|
382
|
-
color:
|
|
382
|
+
color: t.bracket
|
|
383
383
|
},
|
|
384
384
|
{
|
|
385
385
|
tag: e.angleBracket,
|
|
386
|
-
color:
|
|
386
|
+
color: t.bracket
|
|
387
387
|
},
|
|
388
388
|
{
|
|
389
389
|
tag: e.squareBracket,
|
|
390
|
-
color:
|
|
390
|
+
color: t.bracket
|
|
391
391
|
},
|
|
392
392
|
{
|
|
393
393
|
tag: e.paren,
|
|
394
|
-
color:
|
|
394
|
+
color: t.bracket
|
|
395
395
|
},
|
|
396
396
|
{
|
|
397
397
|
tag: e.brace,
|
|
398
|
-
color:
|
|
398
|
+
color: t.bracket
|
|
399
399
|
},
|
|
400
400
|
{
|
|
401
401
|
tag: e.tagName,
|
|
402
|
-
color:
|
|
402
|
+
color: t.tag
|
|
403
403
|
},
|
|
404
404
|
{
|
|
405
405
|
tag: e.attributeName,
|
|
406
|
-
color:
|
|
406
|
+
color: t.attribute
|
|
407
407
|
},
|
|
408
408
|
{
|
|
409
409
|
tag: e.attributeValue,
|
|
410
|
-
color:
|
|
410
|
+
color: t.string
|
|
411
411
|
},
|
|
412
412
|
{
|
|
413
413
|
tag: e.link,
|
|
414
|
-
color:
|
|
414
|
+
color: t.link,
|
|
415
415
|
textDecoration: "underline"
|
|
416
416
|
},
|
|
417
417
|
{
|
|
418
418
|
tag: e.heading,
|
|
419
|
-
color:
|
|
419
|
+
color: t.keyword,
|
|
420
420
|
fontWeight: "bold"
|
|
421
421
|
},
|
|
422
422
|
{
|
|
@@ -432,51 +432,51 @@ var o = {
|
|
|
432
432
|
textDecoration: "line-through"
|
|
433
433
|
}
|
|
434
434
|
];
|
|
435
|
-
return
|
|
435
|
+
return t.error && r.push({
|
|
436
436
|
tag: e.invalid,
|
|
437
|
-
color:
|
|
438
|
-
}),
|
|
437
|
+
color: t.error
|
|
438
|
+
}), t.variable2 && r.push({
|
|
439
439
|
tag: e.special(e.variableName),
|
|
440
|
-
color:
|
|
441
|
-
}), g.define(
|
|
442
|
-
}, u = (
|
|
443
|
-
const { colors:
|
|
440
|
+
color: t.variable2
|
|
441
|
+
}), g.define(r);
|
|
442
|
+
}, u = (t) => {
|
|
443
|
+
const { colors: r, dark: a } = t, o = {
|
|
444
444
|
"&": {
|
|
445
|
-
backgroundColor:
|
|
446
|
-
color:
|
|
445
|
+
backgroundColor: r.background,
|
|
446
|
+
color: r.foreground
|
|
447
447
|
},
|
|
448
|
-
".cm-content": { caretColor:
|
|
449
|
-
".cm-cursor, .cm-dropCursor": { borderLeftColor:
|
|
450
|
-
".cm-activeLine": { backgroundColor:
|
|
448
|
+
".cm-content": { caretColor: r.caret },
|
|
449
|
+
".cm-cursor, .cm-dropCursor": { borderLeftColor: r.caret },
|
|
450
|
+
".cm-activeLine": { backgroundColor: r.activeLine },
|
|
451
451
|
".cm-selectionLayer": {
|
|
452
452
|
mixBlendMode: "normal",
|
|
453
453
|
pointerEvents: "none",
|
|
454
454
|
zIndex: 10
|
|
455
455
|
},
|
|
456
456
|
".cm-selectionLayer .cm-selectionBackground": {
|
|
457
|
-
backgroundColor:
|
|
458
|
-
opacity:
|
|
457
|
+
backgroundColor: r.selectionBackground,
|
|
458
|
+
opacity: r.selectionOpacity
|
|
459
459
|
},
|
|
460
460
|
".cm-selectionBackground": {
|
|
461
|
-
backgroundColor:
|
|
462
|
-
opacity:
|
|
461
|
+
backgroundColor: r.selectionBackground,
|
|
462
|
+
opacity: r.selectionOpacity
|
|
463
463
|
},
|
|
464
|
-
"&.cm-focused .cm-selectionBackground": { backgroundColor:
|
|
464
|
+
"&.cm-focused .cm-selectionBackground": { backgroundColor: r.selectionBackground },
|
|
465
465
|
".cm-gutters": {
|
|
466
|
-
backgroundColor:
|
|
467
|
-
color:
|
|
466
|
+
backgroundColor: r.gutterBackground,
|
|
467
|
+
color: r.gutterForeground,
|
|
468
468
|
border: "none"
|
|
469
469
|
}
|
|
470
470
|
};
|
|
471
|
-
return a && (
|
|
472
|
-
},
|
|
473
|
-
if (
|
|
474
|
-
const
|
|
475
|
-
return
|
|
476
|
-
}, s = (
|
|
477
|
-
if (
|
|
478
|
-
const
|
|
479
|
-
return
|
|
471
|
+
return a && (o[".cm-lineNumbers .cm-gutterElement"] = { color: r.gutterForeground }), f.theme(o, { dark: a });
|
|
472
|
+
}, n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), p = (t) => {
|
|
473
|
+
if (n.has(t)) return n.get(t);
|
|
474
|
+
const r = c[t] || c.light, a = u(r);
|
|
475
|
+
return n.set(t, a), a;
|
|
476
|
+
}, s = (t) => {
|
|
477
|
+
if (i.has(t)) return i.get(t);
|
|
478
|
+
const r = c[t] || c.light, a = d(r.colors), o = b(a);
|
|
479
|
+
return i.set(t, o), o;
|
|
480
480
|
};
|
|
481
481
|
export {
|
|
482
482
|
s as createHighlightExtension,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","names":[],"sources":["../../../../src/components/pro/CodeEditor/themes.ts"],"sourcesContent":["import { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\nimport type { EditorTheme } from './types';\n\n// ============= 主题配置类型 =============\n\ninterface ThemeColors {\n background: string;\n foreground: string;\n caret: string;\n activeLine: string;\n selectionBackground: string;\n selectionOpacity: number;\n gutterBackground: string;\n gutterForeground: string;\n // 语法高亮\n keyword: string;\n atom: string;\n number: string;\n def: string;\n variable: string;\n variable2?: string;\n type?: string;\n property: string;\n operator: string;\n comment: string;\n string: string;\n meta: string;\n builtin: string;\n bracket: string;\n tag: string;\n attribute: string;\n link: string;\n error?: string;\n}\n\n// ============= 主题配置 =============\n\nconst themeConfigs: Record<string, { colors: ThemeColors; dark?: boolean }> = {\n light: {\n colors: {\n background: '#ffffff',\n foreground: '#000000',\n caret: '#000000',\n activeLine: 'rgba(0, 0, 0, 0.03)',\n selectionBackground: '#add6ff',\n selectionOpacity: 0.9,\n gutterBackground: '#f8f8f8',\n gutterForeground: '#999',\n keyword: '#0000ff',\n atom: '#219',\n number: '#164',\n def: '#00f',\n variable: '#05a',\n property: '#05a',\n operator: '#000',\n comment: '#708090',\n string: '#a11',\n meta: '#555',\n builtin: '#30a',\n bracket: '#997',\n tag: '#170',\n attribute: '#00c',\n link: '#00e',\n },\n },\n dark: {\n colors: {\n background: '#1e1e1e',\n foreground: '#e0e0e0',\n caret: '#ffffff',\n activeLine: 'rgba(255, 255, 255, 0.08)',\n selectionBackground: '#555555',\n selectionOpacity: 0.85,\n gutterBackground: '#252526',\n gutterForeground: '#858585',\n keyword: '#ff79c6',\n atom: '#bd93f9',\n number: '#ffb86c',\n def: '#50fa7b',\n variable: '#f8f8f2',\n variable2: '#f1fa8c',\n type: '#bd93f9',\n property: '#ffd580',\n operator: '#ff79c6',\n comment: '#6a9955',\n string: '#f1fa8c',\n meta: '#f8f8f2',\n builtin: '#bd93f9',\n bracket: '#f8f8f2',\n tag: '#ff79c6',\n attribute: '#50fa7b',\n link: '#ff79c6',\n error: '#ff5555',\n },\n dark: true,\n },\n retro: {\n colors: {\n background: '#2d1b00',\n foreground: '#f5deb3',\n caret: '#ffcc66',\n activeLine: 'rgba(255, 204, 102, 0.1)',\n selectionBackground: '#663300',\n selectionOpacity: 0.8,\n gutterBackground: '#1a0f00',\n gutterForeground: '#997755',\n keyword: '#ff9966',\n atom: '#ffcc99',\n number: '#cc9966',\n def: '#ffaa55',\n variable: '#f5deb3',\n property: '#f5deb3',\n operator: '#ff9966',\n comment: '#8b7355',\n string: '#ffcc66',\n meta: '#cc9966',\n builtin: '#ff9966',\n bracket: '#cc9966',\n tag: '#ff9966',\n attribute: '#ffcc66',\n link: '#ffcc99',\n },\n dark: true,\n },\n cyberpunk: {\n colors: {\n background: '#0d0221',\n foreground: '#f72585',\n caret: '#7209b7',\n activeLine: 'rgba(114, 9, 183, 0.15)',\n selectionBackground: '#3c096c',\n selectionOpacity: 0.8,\n gutterBackground: '#0a0118',\n gutterForeground: '#7209b7',\n keyword: '#f72585',\n atom: '#b5179e',\n number: '#7209b7',\n def: '#f72585',\n variable: '#ffffff',\n property: '#ffffff',\n operator: '#f72585',\n comment: '#560bad',\n string: '#b5179e',\n meta: '#7209b7',\n builtin: '#f72585',\n bracket: '#b5179e',\n tag: '#f72585',\n attribute: '#b5179e',\n link: '#b5179e',\n },\n dark: true,\n },\n matrix: {\n colors: {\n background: '#0d1117',\n foreground: '#00ff00',\n caret: '#00ff00',\n activeLine: 'rgba(0, 255, 0, 0.08)',\n selectionBackground: '#003300',\n selectionOpacity: 0.8,\n gutterBackground: '#0a0e11',\n gutterForeground: '#00aa00',\n keyword: '#00ff00',\n atom: '#00cc00',\n number: '#00ff00',\n def: '#00ff00',\n variable: '#00ee00',\n property: '#00ee00',\n operator: '#00ff00',\n comment: '#008800',\n string: '#00cc00',\n meta: '#00ff00',\n builtin: '#00ff00',\n bracket: '#00dd00',\n tag: '#00ff00',\n attribute: '#00cc00',\n link: '#00ff00',\n },\n dark: true,\n },\n oceanblue: {\n colors: {\n background: '#f0f9ff',\n foreground: '#0c4a6e',\n caret: '#0369a1',\n activeLine: 'rgba(3, 105, 161, 0.05)',\n selectionBackground: '#bae6fd',\n selectionOpacity: 0.9,\n gutterBackground: '#e0f2fe',\n gutterForeground: '#075985',\n keyword: '#0369a1',\n atom: '#0891b2',\n number: '#0e7490',\n def: '#0369a1',\n variable: '#0c4a6e',\n property: '#0c4a6e',\n operator: '#0369a1',\n comment: '#64748b',\n string: '#0891b2',\n meta: '#475569',\n builtin: '#0369a1',\n bracket: '#334155',\n tag: '#0369a1',\n attribute: '#0891b2',\n link: '#0284c7',\n },\n },\n eyecare: {\n colors: {\n background: '#f5f8e8',\n foreground: '#2d4a2b',\n caret: '#4a7c59',\n activeLine: 'rgba(74, 124, 89, 0.06)',\n selectionBackground: '#d4e5d4',\n selectionOpacity: 0.9,\n gutterBackground: '#eef3dc',\n gutterForeground: '#5a8a5f',\n keyword: '#4a7c59',\n atom: '#5a8a5f',\n number: '#6b9b6f',\n def: '#4a7c59',\n variable: '#2d4a2b',\n property: '#2d4a2b',\n operator: '#4a7c59',\n comment: '#7a9d7e',\n string: '#5a8a5f',\n meta: '#5a7a5a',\n builtin: '#4a7c59',\n bracket: '#5a7a5a',\n tag: '#4a7c59',\n attribute: '#5a8a5f',\n link: '#4a7c59',\n },\n },\n ghibli: {\n colors: {\n background: '#fdfbf7',\n foreground: '#5c4a3c',\n caret: '#8b6f4e',\n activeLine: 'rgba(139, 111, 78, 0.05)',\n selectionBackground: '#f0e5d8',\n selectionOpacity: 0.9,\n gutterBackground: '#f7f2ea',\n gutterForeground: '#9b8b78',\n keyword: '#8b6f4e',\n atom: '#a67c52',\n number: '#7ea8a0',\n def: '#8b6f4e',\n variable: '#5c4a3c',\n property: '#5c4a3c',\n operator: '#8b6f4e',\n comment: '#9b8b78',\n string: '#a67c52',\n meta: '#7a6a58',\n builtin: '#8b6f4e',\n bracket: '#7a6a58',\n tag: '#8b6f4e',\n attribute: '#a67c52',\n link: '#7ea8a0',\n },\n },\n pinkgirl: {\n colors: {\n background: '#fff5f7',\n foreground: '#be185d',\n caret: '#db2777',\n activeLine: 'rgba(219, 39, 119, 0.05)',\n selectionBackground: '#fce7f3',\n selectionOpacity: 0.9,\n gutterBackground: '#fef1f5',\n gutterForeground: '#db2777',\n keyword: '#db2777',\n atom: '#ec4899',\n number: '#f472b6',\n def: '#db2777',\n variable: '#be185d',\n property: '#be185d',\n operator: '#db2777',\n comment: '#f9a8d4',\n string: '#ec4899',\n meta: '#be185d',\n builtin: '#db2777',\n bracket: '#be185d',\n tag: '#db2777',\n attribute: '#ec4899',\n link: '#db2777',\n },\n },\n mintgirl: {\n colors: {\n background: '#f0fdf4',\n foreground: '#065f46',\n caret: '#059669',\n activeLine: 'rgba(5, 150, 105, 0.05)',\n selectionBackground: '#d1fae5',\n selectionOpacity: 0.9,\n gutterBackground: '#ecfdf5',\n gutterForeground: '#059669',\n keyword: '#059669',\n atom: '#10b981',\n number: '#34d399',\n def: '#059669',\n variable: '#065f46',\n property: '#065f46',\n operator: '#059669',\n comment: '#6ee7b7',\n string: '#10b981',\n meta: '#047857',\n builtin: '#059669',\n bracket: '#047857',\n tag: '#059669',\n attribute: '#10b981',\n link: '#059669',\n },\n },\n // 五行主题 - 中国传统五行配色\n // 金(白/金) 木(青/绿) 水(黑/蓝) 火(赤/红) 土(黄/棕)\n wuxing: {\n colors: {\n // 背景:米黄色纸张质感(土)\n background: '#f5f0e6',\n // 前景:深棕色(土)\n foreground: '#4a3728',\n // 光标:赤红色(火)\n caret: '#c94c4c',\n // 活跃行:淡黄(土生金)\n activeLine: 'rgba(200, 170, 100, 0.12)',\n // 选中背景:淡青色(木)\n selectionBackground: '#d4e5d8',\n selectionOpacity: 0.85,\n // 行号背景:浅米黄\n gutterBackground: '#ebe5d8',\n gutterForeground: '#8b7355',\n // 关键字:赤红色(火)\n keyword: '#c94c4c',\n // 原子:金色(金)\n atom: '#b8860b',\n // 数字:深蓝(水)\n number: '#2f5496',\n // 定义:青绿色(木)\n def: '#2e7d32',\n // 变量:深棕(土)\n variable: '#5c4033',\n // 属性:棕黄(土)\n property: '#8b6914',\n // 运算符:赤色(火)\n operator: '#b5533c',\n // 注释:灰蓝(水生木)\n comment: '#6b8e8e',\n // 字符串:青绿(木)\n string: '#3d7a5a',\n // 元信息:深棕\n meta: '#6b5344',\n // 内置:金橙(金生水)\n builtin: '#cd853f',\n // 括号:深灰蓝(水)\n bracket: '#4a6670',\n // 标签:赤色(火)\n tag: '#c94c4c',\n // 属性名:青色(木)\n attribute: '#2e8b57',\n // 链接:深蓝(水)\n link: '#2f5496',\n },\n },\n};\n\n// ============= 语法高亮样式创建器 =============\n\nconst createHighlightStyle = (colors: ThemeColors): HighlightStyle => {\n const specs: { tag: any; color?: string; fontStyle?: string; fontWeight?: string; textDecoration?: string }[] = [\n { tag: tags.keyword, color: colors.keyword },\n { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName], color: colors.atom },\n { tag: [tags.literal, tags.inserted], color: colors.number },\n { tag: tags.number, color: colors.number },\n { tag: [tags.string, tags.deleted], color: colors.string },\n { tag: [tags.regexp, tags.escape, tags.special(tags.string)], color: colors.string },\n { tag: tags.definition(tags.variableName), color: colors.def },\n { tag: tags.local(tags.variableName), color: colors.variable },\n { tag: tags.variableName, color: colors.variable },\n { tag: [tags.typeName, tags.namespace], color: colors.type || colors.builtin },\n { tag: tags.className, color: colors.type || colors.def },\n { tag: [tags.special(tags.variableName), tags.macroName], color: colors.builtin },\n { tag: tags.definition(tags.propertyName), color: colors.property },\n { tag: tags.propertyName, color: colors.property },\n { tag: tags.comment, color: colors.comment, fontStyle: 'italic' },\n { tag: tags.meta, color: colors.meta },\n { tag: tags.operatorKeyword, color: colors.operator },\n { tag: tags.operator, color: colors.operator },\n { tag: tags.bracket, color: colors.bracket },\n { tag: tags.angleBracket, color: colors.bracket },\n { tag: tags.squareBracket, color: colors.bracket },\n { tag: tags.paren, color: colors.bracket },\n { tag: tags.brace, color: colors.bracket },\n { tag: tags.tagName, color: colors.tag },\n { tag: tags.attributeName, color: colors.attribute },\n { tag: tags.attributeValue, color: colors.string },\n { tag: tags.link, color: colors.link, textDecoration: 'underline' },\n { tag: tags.heading, color: colors.keyword, fontWeight: 'bold' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.strong, fontWeight: 'bold' },\n { tag: tags.strikethrough, textDecoration: 'line-through' },\n ];\n\n if (colors.error) {\n specs.push({ tag: tags.invalid, color: colors.error });\n }\n\n if (colors.variable2) {\n specs.push({ tag: tags.special(tags.variableName), color: colors.variable2 });\n }\n\n return HighlightStyle.define(specs);\n};\n\n// ============= 编辑器外观主题创建器 =============\n\nconst createEditorTheme = (config: { colors: ThemeColors; dark?: boolean }): Extension => {\n const { colors, dark } = config;\n\n const baseStyles: Record<string, any> = {\n '&': {\n backgroundColor: colors.background,\n color: colors.foreground,\n },\n '.cm-content': {\n caretColor: colors.caret,\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: colors.caret,\n },\n '.cm-activeLine': {\n backgroundColor: colors.activeLine,\n },\n '.cm-selectionLayer': {\n mixBlendMode: 'normal',\n pointerEvents: 'none',\n zIndex: 10,\n },\n '.cm-selectionLayer .cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n opacity: colors.selectionOpacity,\n },\n '.cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n opacity: colors.selectionOpacity,\n },\n '&.cm-focused .cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n },\n '.cm-gutters': {\n backgroundColor: colors.gutterBackground,\n color: colors.gutterForeground,\n border: 'none',\n },\n };\n\n if (dark) {\n baseStyles['.cm-lineNumbers .cm-gutterElement'] = { color: colors.gutterForeground };\n }\n\n return EditorView.theme(baseStyles, { dark });\n};\n\n// ============= 缓存 =============\n\nconst editorThemeCache = new Map<EditorTheme, Extension>();\nconst highlightCache = new Map<EditorTheme, Extension>();\n\n/**\n * 创建编辑器外观主题(背景色、光标色等)\n * 放入 themeCompartment\n */\nexport const createThemeExtension = (theme: EditorTheme): Extension => {\n if (editorThemeCache.has(theme)) {\n return editorThemeCache.get(theme)!;\n }\n\n const config = themeConfigs[theme] || themeConfigs.light;\n const ext = createEditorTheme(config);\n editorThemeCache.set(theme, ext);\n return ext;\n};\n\n/**\n * 创建语法高亮扩展\n * 放入 highlightCompartment\n */\nexport const createHighlightExtension = (theme: EditorTheme): Extension => {\n if (highlightCache.has(theme)) {\n return highlightCache.get(theme)!;\n }\n\n const config = themeConfigs[theme] || themeConfigs.light;\n const hl = createHighlightStyle(config.colors);\n const ext = syntaxHighlighting(hl);\n highlightCache.set(theme, ext);\n return ext;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"themes.js","names":[],"sources":["../../../../src/components/pro/CodeEditor/themes.ts"],"sourcesContent":["import { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\nimport type { EditorTheme } from './types';\n\n// ============= 主题配置类型 =============\n\ninterface ThemeColors {\n background: string;\n foreground: string;\n caret: string;\n activeLine: string;\n selectionBackground: string;\n selectionOpacity: number;\n gutterBackground: string;\n gutterForeground: string;\n // 语法高亮\n keyword: string;\n atom: string;\n number: string;\n def: string;\n variable: string;\n variable2?: string;\n type?: string;\n property: string;\n operator: string;\n comment: string;\n string: string;\n meta: string;\n builtin: string;\n bracket: string;\n tag: string;\n attribute: string;\n link: string;\n error?: string;\n}\n\n// ============= 主题配置 =============\n\nconst themeConfigs: Record<string, { colors: ThemeColors; dark?: boolean }> = {\n light: {\n colors: {\n background: '#ffffff',\n foreground: '#000000',\n caret: '#000000',\n activeLine: 'rgba(0, 0, 0, 0.03)',\n selectionBackground: '#add6ff',\n selectionOpacity: 0.9,\n gutterBackground: '#f8f8f8',\n gutterForeground: '#999',\n keyword: '#0000ff',\n atom: '#219',\n number: '#164',\n def: '#00f',\n variable: '#05a',\n property: '#05a',\n operator: '#000',\n comment: '#708090',\n string: '#a11',\n meta: '#555',\n builtin: '#30a',\n bracket: '#997',\n tag: '#170',\n attribute: '#00c',\n link: '#00e',\n },\n },\n dark: {\n colors: {\n background: '#1e1e1e',\n foreground: '#e0e0e0',\n caret: '#ffffff',\n activeLine: 'rgba(255, 255, 255, 0.08)',\n selectionBackground: '#555555',\n selectionOpacity: 0.85,\n gutterBackground: '#252526',\n gutterForeground: '#858585',\n keyword: '#ff79c6',\n atom: '#bd93f9',\n number: '#ffb86c',\n def: '#50fa7b',\n variable: '#f8f8f2',\n variable2: '#f1fa8c',\n type: '#bd93f9',\n property: '#ffd580',\n operator: '#ff79c6',\n comment: '#6a9955',\n string: '#f1fa8c',\n meta: '#f8f8f2',\n builtin: '#bd93f9',\n bracket: '#f8f8f2',\n tag: '#ff79c6',\n attribute: '#50fa7b',\n link: '#ff79c6',\n error: '#ff5555',\n },\n dark: true,\n },\n retro: {\n colors: {\n background: '#2d1b00',\n foreground: '#f5deb3',\n caret: '#ffcc66',\n activeLine: 'rgba(255, 204, 102, 0.1)',\n selectionBackground: '#663300',\n selectionOpacity: 0.8,\n gutterBackground: '#1a0f00',\n gutterForeground: '#997755',\n keyword: '#ff9966',\n atom: '#ffcc99',\n number: '#cc9966',\n def: '#ffaa55',\n variable: '#f5deb3',\n property: '#f5deb3',\n operator: '#ff9966',\n comment: '#8b7355',\n string: '#ffcc66',\n meta: '#cc9966',\n builtin: '#ff9966',\n bracket: '#cc9966',\n tag: '#ff9966',\n attribute: '#ffcc66',\n link: '#ffcc99',\n },\n dark: true,\n },\n cyberpunk: {\n colors: {\n background: '#0d0221',\n foreground: '#f72585',\n caret: '#7209b7',\n activeLine: 'rgba(114, 9, 183, 0.15)',\n selectionBackground: '#3c096c',\n selectionOpacity: 0.8,\n gutterBackground: '#0a0118',\n gutterForeground: '#7209b7',\n keyword: '#f72585',\n atom: '#b5179e',\n number: '#7209b7',\n def: '#f72585',\n variable: '#ffffff',\n property: '#ffffff',\n operator: '#f72585',\n comment: '#560bad',\n string: '#b5179e',\n meta: '#7209b7',\n builtin: '#f72585',\n bracket: '#b5179e',\n tag: '#f72585',\n attribute: '#b5179e',\n link: '#b5179e',\n },\n dark: true,\n },\n matrix: {\n colors: {\n background: '#0d1117',\n foreground: '#00ff00',\n caret: '#00ff00',\n activeLine: 'rgba(0, 255, 0, 0.08)',\n selectionBackground: '#003300',\n selectionOpacity: 0.8,\n gutterBackground: '#0a0e11',\n gutterForeground: '#00aa00',\n keyword: '#00ff00',\n atom: '#00cc00',\n number: '#00ff00',\n def: '#00ff00',\n variable: '#00ee00',\n property: '#00ee00',\n operator: '#00ff00',\n comment: '#008800',\n string: '#00cc00',\n meta: '#00ff00',\n builtin: '#00ff00',\n bracket: '#00dd00',\n tag: '#00ff00',\n attribute: '#00cc00',\n link: '#00ff00',\n },\n dark: true,\n },\n oceanblue: {\n colors: {\n background: '#f0f9ff',\n foreground: '#0c4a6e',\n caret: '#0369a1',\n activeLine: 'rgba(3, 105, 161, 0.05)',\n selectionBackground: '#bae6fd',\n selectionOpacity: 0.9,\n gutterBackground: '#e0f2fe',\n gutterForeground: '#075985',\n keyword: '#0369a1',\n atom: '#0891b2',\n number: '#0e7490',\n def: '#0369a1',\n variable: '#0c4a6e',\n property: '#0c4a6e',\n operator: '#0369a1',\n comment: '#64748b',\n string: '#0891b2',\n meta: '#475569',\n builtin: '#0369a1',\n bracket: '#334155',\n tag: '#0369a1',\n attribute: '#0891b2',\n link: '#0284c7',\n },\n },\n eyecare: {\n colors: {\n background: '#f5f8e8',\n foreground: '#2d4a2b',\n caret: '#4a7c59',\n activeLine: 'rgba(74, 124, 89, 0.06)',\n selectionBackground: '#d4e5d4',\n selectionOpacity: 0.9,\n gutterBackground: '#eef3dc',\n gutterForeground: '#5a8a5f',\n keyword: '#4a7c59',\n atom: '#5a8a5f',\n number: '#6b9b6f',\n def: '#4a7c59',\n variable: '#2d4a2b',\n property: '#2d4a2b',\n operator: '#4a7c59',\n comment: '#7a9d7e',\n string: '#5a8a5f',\n meta: '#5a7a5a',\n builtin: '#4a7c59',\n bracket: '#5a7a5a',\n tag: '#4a7c59',\n attribute: '#5a8a5f',\n link: '#4a7c59',\n },\n },\n ghibli: {\n colors: {\n background: '#fdfbf7',\n foreground: '#5c4a3c',\n caret: '#8b6f4e',\n activeLine: 'rgba(139, 111, 78, 0.05)',\n selectionBackground: '#f0e5d8',\n selectionOpacity: 0.9,\n gutterBackground: '#f7f2ea',\n gutterForeground: '#9b8b78',\n keyword: '#8b6f4e',\n atom: '#a67c52',\n number: '#7ea8a0',\n def: '#8b6f4e',\n variable: '#5c4a3c',\n property: '#5c4a3c',\n operator: '#8b6f4e',\n comment: '#9b8b78',\n string: '#a67c52',\n meta: '#7a6a58',\n builtin: '#8b6f4e',\n bracket: '#7a6a58',\n tag: '#8b6f4e',\n attribute: '#a67c52',\n link: '#7ea8a0',\n },\n },\n pinkgirl: {\n colors: {\n background: '#fff5f7',\n foreground: '#be185d',\n caret: '#db2777',\n activeLine: 'rgba(219, 39, 119, 0.05)',\n selectionBackground: '#fce7f3',\n selectionOpacity: 0.9,\n gutterBackground: '#fef1f5',\n gutterForeground: '#db2777',\n keyword: '#db2777',\n atom: '#ec4899',\n number: '#f472b6',\n def: '#db2777',\n variable: '#be185d',\n property: '#be185d',\n operator: '#db2777',\n comment: '#f9a8d4',\n string: '#ec4899',\n meta: '#be185d',\n builtin: '#db2777',\n bracket: '#be185d',\n tag: '#db2777',\n attribute: '#ec4899',\n link: '#db2777',\n },\n },\n mintgirl: {\n colors: {\n background: '#f0fdf4',\n foreground: '#065f46',\n caret: '#059669',\n activeLine: 'rgba(5, 150, 105, 0.05)',\n selectionBackground: '#d1fae5',\n selectionOpacity: 0.9,\n gutterBackground: '#ecfdf5',\n gutterForeground: '#059669',\n keyword: '#059669',\n atom: '#10b981',\n number: '#34d399',\n def: '#059669',\n variable: '#065f46',\n property: '#065f46',\n operator: '#059669',\n comment: '#6ee7b7',\n string: '#10b981',\n meta: '#047857',\n builtin: '#059669',\n bracket: '#047857',\n tag: '#059669',\n attribute: '#10b981',\n link: '#059669',\n },\n },\n // 五行主题 - 中国传统五行配色\n // 金(白/金) 木(青/绿) 水(黑/蓝) 火(赤/红) 土(黄/棕)\n wuxing: {\n colors: {\n // 背景:米黄色纸张质感(土)\n background: '#f5f0e6',\n // 前景:深棕色(土)\n foreground: '#4a3728',\n // 光标:赤红色(火)\n caret: '#c94c4c',\n // 活跃行:淡黄(土生金)\n activeLine: 'rgba(200, 170, 100, 0.12)',\n // 选中背景:淡青色(木)\n selectionBackground: '#d4e5d8',\n selectionOpacity: 0.85,\n // 行号背景:浅米黄\n gutterBackground: '#ebe5d8',\n gutterForeground: '#8b7355',\n // 关键字:赤红色(火)\n keyword: '#c94c4c',\n // 原子:金色(金)\n atom: '#b8860b',\n // 数字:深蓝(水)\n number: '#2f5496',\n // 定义:青绿色(木)\n def: '#2e7d32',\n // 变量:深棕(土)\n variable: '#5c4033',\n // 属性:棕黄(土)\n property: '#8b6914',\n // 运算符:赤色(火)\n operator: '#b5533c',\n // 注释:灰蓝(水生木)\n comment: '#6b8e8e',\n // 字符串:青绿(木)\n string: '#3d7a5a',\n // 元信息:深棕\n meta: '#6b5344',\n // 内置:金橙(金生水)\n builtin: '#cd853f',\n // 括号:深灰蓝(水)\n bracket: '#4a6670',\n // 标签:赤色(火)\n tag: '#c94c4c',\n // 属性名:青色(木)\n attribute: '#2e8b57',\n // 链接:深蓝(水)\n link: '#2f5496',\n },\n },\n};\n\n// ============= 语法高亮样式创建器 =============\n\nconst createHighlightStyle = (colors: ThemeColors): HighlightStyle => {\n const specs: { tag: any; color?: string; fontStyle?: string; fontWeight?: string; textDecoration?: string }[] = [\n { tag: tags.keyword, color: colors.keyword },\n { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName], color: colors.atom },\n { tag: [tags.literal, tags.inserted], color: colors.number },\n { tag: tags.number, color: colors.number },\n { tag: [tags.string, tags.deleted], color: colors.string },\n { tag: [tags.regexp, tags.escape, tags.special(tags.string)], color: colors.string },\n { tag: tags.definition(tags.variableName), color: colors.def },\n { tag: tags.local(tags.variableName), color: colors.variable },\n { tag: tags.variableName, color: colors.variable },\n { tag: [tags.typeName, tags.namespace], color: colors.type || colors.builtin },\n { tag: tags.className, color: colors.type || colors.def },\n { tag: [tags.special(tags.variableName), tags.macroName], color: colors.builtin },\n { tag: tags.definition(tags.propertyName), color: colors.property },\n { tag: tags.propertyName, color: colors.property },\n { tag: tags.comment, color: colors.comment, fontStyle: 'italic' },\n { tag: tags.meta, color: colors.meta },\n { tag: tags.operatorKeyword, color: colors.operator },\n { tag: tags.operator, color: colors.operator },\n { tag: tags.bracket, color: colors.bracket },\n { tag: tags.angleBracket, color: colors.bracket },\n { tag: tags.squareBracket, color: colors.bracket },\n { tag: tags.paren, color: colors.bracket },\n { tag: tags.brace, color: colors.bracket },\n { tag: tags.tagName, color: colors.tag },\n { tag: tags.attributeName, color: colors.attribute },\n { tag: tags.attributeValue, color: colors.string },\n { tag: tags.link, color: colors.link, textDecoration: 'underline' },\n { tag: tags.heading, color: colors.keyword, fontWeight: 'bold' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.strong, fontWeight: 'bold' },\n { tag: tags.strikethrough, textDecoration: 'line-through' },\n ];\n\n if (colors.error) {\n specs.push({ tag: tags.invalid, color: colors.error });\n }\n\n if (colors.variable2) {\n specs.push({ tag: tags.special(tags.variableName), color: colors.variable2 });\n }\n\n return HighlightStyle.define(specs);\n};\n\n// ============= 编辑器外观主题创建器 =============\n\nconst createEditorTheme = (config: { colors: ThemeColors; dark?: boolean }): Extension => {\n const { colors, dark } = config;\n\n const baseStyles: Record<string, any> = {\n '&': {\n backgroundColor: colors.background,\n color: colors.foreground,\n },\n '.cm-content': {\n caretColor: colors.caret,\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: colors.caret,\n },\n '.cm-activeLine': {\n backgroundColor: colors.activeLine,\n },\n '.cm-selectionLayer': {\n mixBlendMode: 'normal',\n pointerEvents: 'none',\n zIndex: 10,\n },\n '.cm-selectionLayer .cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n opacity: colors.selectionOpacity,\n },\n '.cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n opacity: colors.selectionOpacity,\n },\n '&.cm-focused .cm-selectionBackground': {\n backgroundColor: colors.selectionBackground,\n },\n '.cm-gutters': {\n backgroundColor: colors.gutterBackground,\n color: colors.gutterForeground,\n border: 'none',\n },\n };\n\n if (dark) {\n baseStyles['.cm-lineNumbers .cm-gutterElement'] = { color: colors.gutterForeground };\n }\n\n return EditorView.theme(baseStyles, { dark });\n};\n\n// ============= 缓存 =============\n\nconst editorThemeCache = new Map<EditorTheme, Extension>();\nconst highlightCache = new Map<EditorTheme, Extension>();\n\n/**\n * 创建编辑器外观主题(背景色、光标色等)\n * 放入 themeCompartment\n */\nexport const createThemeExtension = (theme: EditorTheme): Extension => {\n if (editorThemeCache.has(theme)) {\n return editorThemeCache.get(theme)!;\n }\n\n const config = themeConfigs[theme] || themeConfigs.light;\n const ext = createEditorTheme(config);\n editorThemeCache.set(theme, ext);\n return ext;\n};\n\n/**\n * 创建语法高亮扩展\n * 放入 highlightCompartment\n */\nexport const createHighlightExtension = (theme: EditorTheme): Extension => {\n if (highlightCache.has(theme)) {\n return highlightCache.get(theme)!;\n }\n\n const config = themeConfigs[theme] || themeConfigs.light;\n const hl = createHighlightStyle(config.colors);\n const ext = syntaxHighlighting(hl);\n highlightCache.set(theme, ext);\n return ext;\n};\n"],"mappings":"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"}
|