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.
Files changed (177) hide show
  1. package/dist/components/Badge/index.js +12 -9
  2. package/dist/components/Badge/index.js.map +1 -1
  3. package/dist/components/Button/index.js +43 -40
  4. package/dist/components/Button/index.js.map +1 -1
  5. package/dist/components/Card/index.d.ts +11 -0
  6. package/dist/components/Card/index.js +62 -37
  7. package/dist/components/Card/index.js.map +1 -1
  8. package/dist/components/Chart/Chart.js.map +1 -1
  9. package/dist/components/Checkbox/index.js +32 -30
  10. package/dist/components/Checkbox/index.js.map +1 -1
  11. package/dist/components/Demo/index.js.map +1 -1
  12. package/dist/components/EmptyState/index.d.ts +4 -1
  13. package/dist/components/EmptyState/index.js +3 -3
  14. package/dist/components/EmptyState/index.js.map +1 -1
  15. package/dist/components/FileUploader/DropZone.js.map +1 -1
  16. package/dist/components/FileUploader/FileItem.js.map +1 -1
  17. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  18. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  19. package/dist/components/Input/index.js +30 -30
  20. package/dist/components/Input/index.js.map +1 -1
  21. package/dist/components/Label/index.js +41 -40
  22. package/dist/components/Label/index.js.map +1 -1
  23. package/dist/components/List/index.js +47 -32
  24. package/dist/components/List/index.js.map +1 -1
  25. package/dist/components/Markdown/Markdown.js +61 -57
  26. package/dist/components/Markdown/Markdown.js.map +1 -1
  27. package/dist/components/Markdown/markdownComponents.js +49 -49
  28. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  29. package/dist/components/Modal/index.d.ts +7 -3
  30. package/dist/components/Modal/index.js +77 -65
  31. package/dist/components/Modal/index.js.map +1 -1
  32. package/dist/components/Page/index.d.ts +58 -0
  33. package/dist/components/Page/index.js +74 -0
  34. package/dist/components/Page/index.js.map +1 -0
  35. package/dist/components/PageHeader/index.js.map +1 -1
  36. package/dist/components/Select/index.js +0 -3
  37. package/dist/components/Select/index.js.map +1 -1
  38. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  39. package/dist/components/StatCard/index.d.ts +3 -1
  40. package/dist/components/StatCard/index.js +39 -11
  41. package/dist/components/StatCard/index.js.map +1 -1
  42. package/dist/components/Table/index.js +103 -85
  43. package/dist/components/Table/index.js.map +1 -1
  44. package/dist/components/Tabs/index.d.ts +19 -5
  45. package/dist/components/Tabs/index.js +32 -13
  46. package/dist/components/Tabs/index.js.map +1 -1
  47. package/dist/components/Tree/Tree.js.map +1 -1
  48. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  49. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  50. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +141 -134
  51. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  52. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +81 -78
  53. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  54. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  55. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  56. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  57. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  58. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  59. package/dist/components/pro/CodeEditor/themes.js +59 -59
  60. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  61. package/dist/components/pro/DataTable/DataTable.js +49 -48
  62. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  63. package/dist/components/pro/DataTable/Filters.js +42 -42
  64. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  65. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  66. package/dist/components/pro/DataTable/PivotView.js +35 -32
  67. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  68. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  69. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  70. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  71. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  72. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  73. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  74. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  75. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  76. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  77. package/dist/components/pro/DataTable/tanstack-table.js +37 -37
  78. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  79. package/dist/components/pro/FileExplorer/Breadcrumb.js +53 -53
  80. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  81. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  82. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  83. package/dist/components/pro/FileExplorer/FileIcon.js +22 -22
  84. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  85. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  86. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  87. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  88. package/dist/components/pro/Flow/Flow.js +496 -494
  89. package/dist/components/pro/Flow/Flow.js.map +1 -1
  90. package/dist/components/pro/Flow/FlowCanvas.js +916 -917
  91. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  92. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  93. package/dist/components/pro/Flow/edges/EdgeRenderer.js +59 -59
  94. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  95. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  96. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  97. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  98. package/dist/components/pro/Flow/hooks/useLayoutActions.js +9 -11
  99. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  100. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  101. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  102. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  103. package/dist/components/pro/Flow/lines/FreehandTool.js +9 -9
  104. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  105. package/dist/components/pro/Flow/lines/LineRenderer.js +5 -5
  106. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  107. package/dist/components/pro/Flow/nodes/DataNodeView.js +113 -93
  108. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  109. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  110. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  111. package/dist/components/pro/Flow/nodes/Model3DView.js +1 -1
  112. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  113. package/dist/components/pro/Flow/nodes/NodeRenderer.js +118 -118
  114. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  115. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  116. package/dist/components/pro/Flow/nodes/shapes.js +1 -3
  117. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  118. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  119. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  120. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  121. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  122. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  123. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  124. package/dist/components/pro/Flow/panels/FlowToolbar.js +97 -97
  125. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  126. package/dist/components/pro/Flow/panels/InspectorPanel.js +57 -57
  127. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  128. package/dist/components/pro/Flow/panels/OutlinePanel.js +26 -22
  129. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  130. package/dist/components/pro/Flow/panels/PresentationMode.js +18 -16
  131. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  132. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  133. package/dist/components/pro/Flow/panels/ShapePalette.js +109 -104
  134. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  135. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  136. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  137. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  138. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  139. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  140. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  141. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  142. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  143. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  144. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  145. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  146. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  147. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  148. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  149. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  150. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  151. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  152. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  153. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  154. package/dist/contexts/AppContext.js.map +1 -1
  155. package/dist/dishui.css +1 -1
  156. package/dist/hooks/useTableColumns.js +7 -8
  157. package/dist/hooks/useTableColumns.js.map +1 -1
  158. package/dist/index.d.ts +2 -0
  159. package/dist/index.js +227 -221
  160. package/dist/layouts/MainLayout.js +22 -22
  161. package/dist/layouts/MainLayout.js.map +1 -1
  162. package/dist/layouts/Navbar.js.map +1 -1
  163. package/dist/layouts/Sidebar.js +94 -73
  164. package/dist/layouts/Sidebar.js.map +1 -1
  165. package/dist/layouts/headbar/Headbar.js.map +1 -1
  166. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  167. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  168. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +11 -11
  169. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  170. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  171. package/dist/utils/i18n.js +10 -10
  172. package/dist/utils/i18n.js.map +1 -1
  173. package/dist/utils/menu.js.map +1 -1
  174. package/dist/utils/routerBuilder.js +17 -15
  175. package/dist/utils/routerBuilder.js.map +1 -1
  176. package/dist/utils/themes.js.map +1 -1
  177. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"HeadbarSearch.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarSearch.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { useAppContext } from '../../contexts/AppContext';\nimport { getTranslations } from '../../utils/i18n';\n\nexport type SearchResult = {\n title: string;\n path: string;\n description: string;\n};\n\nexport type SearchConfig = {\n enabled: boolean;\n searchFunction?: (term: string, language: 'zh' | 'en') => SearchResult[];\n placeholder?: { zh: string; en: string };\n shortcut?: string;\n};\n\nexport type HeadbarSearchProps = {\n /** 搜索配置 */\n searchConfig?: SearchConfig;\n};\n\n/**\n * HeadbarSearch - 搜索按钮 + 搜索对话框\n */\nconst HeadbarSearch: React.FC<HeadbarSearchProps> = ({ searchConfig }) => {\n const { language } = useAppContext();\n const t = getTranslations(language);\n\n const [isSearchOpen, setIsSearchOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [searchResults, setSearchResults] = useState<SearchResult[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const modalRef = useRef<HTMLDialogElement>(null);\n\n const isSearchEnabled = searchConfig?.enabled ?? true;\n\n const toggleSearch = () => {\n setIsSearchOpen(!isSearchOpen);\n if (!isSearchOpen && modalRef.current) {\n modalRef.current.showModal();\n setTimeout(() => {\n searchInputRef.current?.focus();\n }, 100);\n } else if (modalRef.current) {\n modalRef.current.close();\n }\n };\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchTerm(value);\n const searchFn = searchConfig?.searchFunction;\n if (searchFn) {\n setSearchResults(searchFn(value, language));\n }\n };\n\n useEffect(() => {\n if (!isSearchEnabled) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n toggleSearch();\n }\n if (e.key === 'Escape' && isSearchOpen) {\n toggleSearch();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isSearchOpen, isSearchEnabled]);\n\n // 当语言改变时,更新搜索结果\n useEffect(() => {\n if (searchTerm && isSearchEnabled && searchConfig?.searchFunction) {\n setSearchResults(searchConfig.searchFunction(searchTerm, language));\n }\n }, [language, searchConfig, isSearchEnabled, searchTerm]);\n\n if (!isSearchEnabled) return null;\n\n return (\n <>\n <button className=\"btn btn-ghost gap-2\" onClick={toggleSearch}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n {searchConfig?.placeholder?.[language] || t.navbar.search} (\n {searchConfig?.shortcut || t.navbar.searchShortcut})\n </button>\n\n {/* 搜索对话框 */}\n <dialog\n ref={modalRef}\n className=\"modal modal-bottom sm:modal-middle\"\n onClick={(e) => {\n if (e.target === modalRef.current) toggleSearch();\n }}\n >\n <div className=\"modal-box bg-base-100\">\n <div className=\"relative mb-4\">\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder={\n searchConfig?.placeholder?.[language] ||\n t.navbar.searchPlaceholder\n }\n className=\"input input-bordered w-full pr-10\"\n value={searchTerm}\n onChange={handleSearch}\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5 absolute top-3 right-3 opacity-50\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n\n <div className=\"search-results max-h-80 overflow-y-auto\">\n {searchResults.length > 0 ? (\n <ul className=\"menu bg-base-100 rounded-box\">\n {searchResults.map((result, index) => (\n <li key={index}>\n <a\n href={result.path}\n className=\"flex flex-col items-start\"\n onClick={() => toggleSearch()}\n >\n <div className=\"font-medium\">{result.title}</div>\n <div className=\"text-sm opacity-70\">\n {result.description}\n </div>\n </a>\n </li>\n ))}\n </ul>\n ) : searchTerm ? (\n <div className=\"py-4 text-center text-base-content/70\">\n {t.navbar.noResults}\n </div>\n ) : null}\n </div>\n\n <div className=\"modal-action\">\n <form method=\"dialog\">\n <button className=\"btn\" onClick={toggleSearch}>\n ESC\n </button>\n </form>\n </div>\n </div>\n </dialog>\n </>\n );\n};\n\nexport default HeadbarSearch;\n"],"mappings":"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"}
1
+ {"version":3,"file":"HeadbarSearch.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarSearch.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { useAppContext } from '../../contexts/AppContext';\nimport { getTranslations } from '../../utils/i18n';\n\nexport type SearchResult = {\n title: string;\n path: string;\n description: string;\n};\n\nexport type SearchConfig = {\n enabled: boolean;\n searchFunction?: (term: string, language: 'zh' | 'en') => SearchResult[];\n placeholder?: { zh: string; en: string };\n shortcut?: string;\n};\n\nexport type HeadbarSearchProps = {\n /** 搜索配置 */\n searchConfig?: SearchConfig;\n};\n\n/**\n * HeadbarSearch - 搜索按钮 + 搜索对话框\n */\nconst HeadbarSearch: React.FC<HeadbarSearchProps> = ({ searchConfig }) => {\n const { language } = useAppContext();\n const t = getTranslations(language);\n\n const [isSearchOpen, setIsSearchOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [searchResults, setSearchResults] = useState<SearchResult[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const modalRef = useRef<HTMLDialogElement>(null);\n\n const isSearchEnabled = searchConfig?.enabled ?? true;\n\n const toggleSearch = () => {\n setIsSearchOpen(!isSearchOpen);\n if (!isSearchOpen && modalRef.current) {\n modalRef.current.showModal();\n setTimeout(() => {\n searchInputRef.current?.focus();\n }, 100);\n } else if (modalRef.current) {\n modalRef.current.close();\n }\n };\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchTerm(value);\n const searchFn = searchConfig?.searchFunction;\n if (searchFn) {\n setSearchResults(searchFn(value, language));\n }\n };\n\n useEffect(() => {\n if (!isSearchEnabled) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n toggleSearch();\n }\n if (e.key === 'Escape' && isSearchOpen) {\n toggleSearch();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isSearchOpen, isSearchEnabled]);\n\n // 当语言改变时,更新搜索结果\n useEffect(() => {\n if (searchTerm && isSearchEnabled && searchConfig?.searchFunction) {\n setSearchResults(searchConfig.searchFunction(searchTerm, language));\n }\n }, [language, searchConfig, isSearchEnabled, searchTerm]);\n\n if (!isSearchEnabled) return null;\n\n return (\n <>\n <button className=\"btn btn-ghost gap-2\" onClick={toggleSearch}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n {searchConfig?.placeholder?.[language] || t.navbar.search} (\n {searchConfig?.shortcut || t.navbar.searchShortcut})\n </button>\n\n {/* 搜索对话框 */}\n <dialog\n ref={modalRef}\n className=\"modal modal-bottom sm:modal-middle\"\n onClick={(e) => {\n if (e.target === modalRef.current) toggleSearch();\n }}\n >\n <div className=\"modal-box bg-base-100\">\n <div className=\"relative mb-4\">\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder={\n searchConfig?.placeholder?.[language] ||\n t.navbar.searchPlaceholder\n }\n className=\"input input-bordered w-full pr-10\"\n value={searchTerm}\n onChange={handleSearch}\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5 absolute top-3 right-3 opacity-50\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n\n <div className=\"search-results max-h-80 overflow-y-auto\">\n {searchResults.length > 0 ? (\n <ul className=\"menu bg-base-100 rounded-box\">\n {searchResults.map((result, index) => (\n <li key={index}>\n <a\n href={result.path}\n className=\"flex flex-col items-start\"\n onClick={() => toggleSearch()}\n >\n <div className=\"font-medium\">{result.title}</div>\n <div className=\"text-sm opacity-70\">\n {result.description}\n </div>\n </a>\n </li>\n ))}\n </ul>\n ) : searchTerm ? (\n <div className=\"py-4 text-center text-base-content/70\">\n {t.navbar.noResults}\n </div>\n ) : null}\n </div>\n\n <div className=\"modal-action\">\n <form method=\"dialog\">\n <button className=\"btn\" onClick={toggleSearch}>\n ESC\n </button>\n </form>\n </div>\n </div>\n </dialog>\n </>\n );\n};\n\nexport default HeadbarSearch;\n"],"mappings":"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"}
@@ -1,31 +1,31 @@
1
- import { getThemes as m } from "../../utils/themes.js";
1
+ import { getThemes as t } from "../../utils/themes.js";
2
2
  import { useAppContext as l } from "../../contexts/AppContext.js";
3
3
  import "react";
4
- import { jsx as a, jsxs as r } from "react/jsx-runtime";
5
- var u = ({ themes: s }) => {
6
- const { language: o, theme: n, setTheme: c } = l(), d = s || m();
7
- return /* @__PURE__ */ r("div", {
4
+ import { jsx as a, jsxs as d } from "react/jsx-runtime";
5
+ var x = ({ themes: s }) => {
6
+ const { language: c, theme: r, setTheme: o } = l(), n = s || t(), m = n.find((e) => e.id === r) || n[0];
7
+ return /* @__PURE__ */ d("div", {
8
8
  className: "dropdown dropdown-end",
9
9
  children: [/* @__PURE__ */ a("label", {
10
10
  tabIndex: 0,
11
11
  className: "btn btn-ghost",
12
- children: (d.find((e) => e.id === n) || d[0]).icon
12
+ children: m.icon
13
13
  }), /* @__PURE__ */ a("ul", {
14
14
  tabIndex: 0,
15
15
  className: "menu dropdown-content p-2 shadow bg-base-100 rounded-box w-52 mt-4",
16
- children: d.map((e) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ r("a", {
17
- className: n === e.id ? "active" : "",
18
- onClick: () => c(e.id),
16
+ children: n.map((e) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ d("a", {
17
+ className: r === e.id ? "active" : "",
18
+ onClick: () => o(e.id),
19
19
  children: [/* @__PURE__ */ a("span", {
20
20
  className: "mr-2",
21
21
  children: e.icon
22
- }), o === "zh" ? e.name.zh : e.name.en]
22
+ }), c === "zh" ? e.name.zh : e.name.en]
23
23
  }) }, e.id))
24
24
  })]
25
25
  });
26
26
  };
27
27
  export {
28
- u as default
28
+ x as default
29
29
  };
30
30
 
31
31
  //# sourceMappingURL=HeadbarThemeSwitcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeadbarThemeSwitcher.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarThemeSwitcher.tsx"],"sourcesContent":["import React from 'react';\nimport { useAppContext } from '../../contexts/AppContext';\nimport { ThemeConfig, getThemes as defaultGetThemes } from '../../utils/themes';\n\nexport type HeadbarThemeSwitcherProps = {\n /** 可选的主题配置列表,不传则使用默认主题列表 */\n themes?: ThemeConfig[];\n};\n\n/**\n * HeadbarThemeSwitcher - 主题切换下拉菜单\n */\nconst HeadbarThemeSwitcher: React.FC<HeadbarThemeSwitcherProps> = ({\n themes: propThemes,\n}) => {\n const { language, theme, setTheme } = useAppContext();\n\n const themes = propThemes || defaultGetThemes();\n const currentTheme = themes.find((t) => t.id === theme) || themes[0];\n\n return (\n <div className=\"dropdown dropdown-end\">\n <label tabIndex={0} className=\"btn btn-ghost\">\n {currentTheme.icon}\n </label>\n <ul\n tabIndex={0}\n className=\"menu dropdown-content p-2 shadow bg-base-100 rounded-box w-52 mt-4\"\n >\n {themes.map((themeOption) => (\n <li key={themeOption.id}>\n <a\n className={theme === themeOption.id ? 'active' : ''}\n onClick={() => setTheme(themeOption.id)}\n >\n <span className=\"mr-2\">{themeOption.icon}</span>\n {language === 'zh' ? themeOption.name.zh : themeOption.name.en}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport default HeadbarThemeSwitcher;\n"],"mappings":";;;;AAYA,IAAM,IAAA,CAA6D,EACjE,QAAQ,EAAA,MACJ;AACJ,QAAM,EAAE,UAAA,GAAU,OAAA,GAAO,UAAA,EAAA,IAAa,EAAc,GAE9C,IAAS,KAAc,EAAiB;AAG9C,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,cAAf,CACE,gBAAA,EAAC,SAAD;AAAA,MAAO,UAAU;AAAA,MAAG,WAAU;AAAA,iBAJb,EAAO,KAAA,CAAM,MAAM,EAAE,OAAO,CAAK,KAAK,EAAO,CAAA,GAK9C;AAAA,IACT,CAAA,GACP,gBAAA,EAAC,MAAD;AAAA,MACE,UAAU;AAAA,MACV,WAAU;AAAA,gBAET,EAAO,IAAA,CAAK,MACX,gBAAA,EAAC,MAAD,EAAA,UACE,gBAAA,EAAC,KAAD;AAAA,QACE,WAAW,MAAU,EAAY,KAAK,WAAW;AAAA,QACjD,SAAA,MAAe,EAAS,EAAY,EAAE;AAAA,kBAFxC,CAIE,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,oBAAQ,EAAY;AAAA,QAAW,CAAA,GAC9C,MAAa,OAAO,EAAY,KAAK,KAAK,EAAY,KAAK,EAC3D;AAAA,SACD,GARK,EAAY,EAQjB,CACL;AAAA,IACC,CAAA,CACD;AAAA;AAET"}
1
+ {"version":3,"file":"HeadbarThemeSwitcher.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarThemeSwitcher.tsx"],"sourcesContent":["import React from 'react';\nimport { useAppContext } from '../../contexts/AppContext';\nimport { ThemeConfig, getThemes as defaultGetThemes } from '../../utils/themes';\n\nexport type HeadbarThemeSwitcherProps = {\n /** 可选的主题配置列表,不传则使用默认主题列表 */\n themes?: ThemeConfig[];\n};\n\n/**\n * HeadbarThemeSwitcher - 主题切换下拉菜单\n */\nconst HeadbarThemeSwitcher: React.FC<HeadbarThemeSwitcherProps> = ({\n themes: propThemes,\n}) => {\n const { language, theme, setTheme } = useAppContext();\n\n const themes = propThemes || defaultGetThemes();\n const currentTheme = themes.find((t) => t.id === theme) || themes[0];\n\n return (\n <div className=\"dropdown dropdown-end\">\n <label tabIndex={0} className=\"btn btn-ghost\">\n {currentTheme.icon}\n </label>\n <ul\n tabIndex={0}\n className=\"menu dropdown-content p-2 shadow bg-base-100 rounded-box w-52 mt-4\"\n >\n {themes.map((themeOption) => (\n <li key={themeOption.id}>\n <a\n className={theme === themeOption.id ? 'active' : ''}\n onClick={() => setTheme(themeOption.id)}\n >\n <span className=\"mr-2\">{themeOption.icon}</span>\n {language === 'zh' ? themeOption.name.zh : themeOption.name.en}\n </a>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n\nexport default HeadbarThemeSwitcher;\n"],"mappings":";;;;AAYA,IAAM,IAAA,CAA6D,EACjE,QAAQ,EAAA,MACJ;AACJ,QAAM,EAAE,UAAA,GAAU,OAAA,GAAO,UAAA,EAAA,IAAa,EAAc,GAE9C,IAAS,KAAc,EAAiB,GACxC,IAAe,EAAO,KAAA,CAAM,MAAM,EAAE,OAAO,CAAK,KAAK,EAAO,CAAA;AAElE,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAf,UAAA,CACE,gBAAA,EAAC,SAAD;AAAA,MAAO,UAAU;AAAA,MAAG,WAAU;AAAA,MAC3B,UAAA,EAAa;AAAA,IACT,CAAA,GACP,gBAAA,EAAC,MAAD;AAAA,MACE,UAAU;AAAA,MACV,WAAU;AAAA,MAET,UAAA,EAAO,IAAA,CAAK,MACX,gBAAA,EAAC,MAAD,EAAA,UACE,gBAAA,EAAC,KAAD;AAAA,QACE,WAAW,MAAU,EAAY,KAAK,WAAW;AAAA,QACjD,SAAA,MAAe,EAAS,EAAY,EAAE;AAAA,QAFxC,UAAA,CAIE,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,UAAQ,UAAA,EAAY;AAAA,QAAW,CAAA,GAC9C,MAAa,OAAO,EAAY,KAAK,KAAK,EAAY,KAAK,EAC3D;AAAA,MACD,CAAA,EAAA,GARK,EAAY,EAQjB,CACL;AAAA,IACC,CAAA,CACD;AAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadbarTitle.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarTitle.tsx"],"sourcesContent":["import React from 'react';\n\nexport type HeadbarTitleProps = {\n /** 显示的标题 */\n title?: string;\n /** 点击 hamburger 按钮时的回调(移动端切换侧边栏) */\n onToggleSidebar?: () => void;\n};\n\n/**\n * HeadbarTitle - 左侧标题区域,包含移动端 hamburger 按钮 + 应用标题链接\n */\nconst HeadbarTitle: React.FC<HeadbarTitleProps> = ({\n title = 'DiShUI',\n onToggleSidebar,\n}) => {\n return (\n <>\n {onToggleSidebar && (\n <div className=\"flex-none lg:hidden\">\n <button className=\"btn btn-square btn-ghost\" onClick={onToggleSidebar}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n className=\"inline-block w-5 h-5 stroke-current\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n </button>\n </div>\n )}\n <a href=\"/\" className=\"btn btn-ghost normal-case text-xl\">\n {title}\n </a>\n </>\n );\n};\n\nexport default HeadbarTitle;\n"],"mappings":";;AAYA,IAAM,IAAA,CAA6C,EACjD,OAAA,IAAQ,UACR,iBAAA,EAAA,MAGE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACG,KACC,gBAAA,EAAC,OAAD;AAAA,EAAK,WAAU;AAAA,YACb,gBAAA,EAAC,UAAD;AAAA,IAAQ,WAAU;AAAA,IAA2B,SAAS;AAAA,cACpD,gBAAA,EAAC,OAAD;AAAA,MACE,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,WAAU;AAAA,gBAEV,gBAAA,EAAC,QAAD;AAAA,QACE,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,aAAY;AAAA,QACZ,GAAE;AAAA,MACH,CAAA;AAAA,IACE,CAAA;AAAA,EACC,CAAA;AACL,CAAA,GAEP,gBAAA,EAAC,KAAD;AAAA,EAAG,MAAK;AAAA,EAAI,WAAU;AAAA,YACnB;AACA,CAAA,CACH,EAAA,CAAA"}
1
+ {"version":3,"file":"HeadbarTitle.js","names":[],"sources":["../../../src/layouts/headbar/HeadbarTitle.tsx"],"sourcesContent":["import React from 'react';\n\nexport type HeadbarTitleProps = {\n /** 显示的标题 */\n title?: string;\n /** 点击 hamburger 按钮时的回调(移动端切换侧边栏) */\n onToggleSidebar?: () => void;\n};\n\n/**\n * HeadbarTitle - 左侧标题区域,包含移动端 hamburger 按钮 + 应用标题链接\n */\nconst HeadbarTitle: React.FC<HeadbarTitleProps> = ({\n title = 'DiShUI',\n onToggleSidebar,\n}) => {\n return (\n <>\n {onToggleSidebar && (\n <div className=\"flex-none lg:hidden\">\n <button className=\"btn btn-square btn-ghost\" onClick={onToggleSidebar}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n className=\"inline-block w-5 h-5 stroke-current\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n </button>\n </div>\n )}\n <a href=\"/\" className=\"btn btn-ghost normal-case text-xl\">\n {title}\n </a>\n </>\n );\n};\n\nexport default HeadbarTitle;\n"],"mappings":";;AAYA,IAAM,IAAA,CAA6C,EACjD,OAAA,IAAQ,UACR,iBAAA,EAAA,MAGE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACG,KACC,gBAAA,EAAC,OAAD;AAAA,EAAK,WAAU;AAAA,EACb,UAAA,gBAAA,EAAC,UAAD;AAAA,IAAQ,WAAU;AAAA,IAA2B,SAAS;AAAA,IACpD,UAAA,gBAAA,EAAC,OAAD;AAAA,MACE,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,WAAU;AAAA,MAEV,UAAA,gBAAA,EAAC,QAAD;AAAA,QACE,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,aAAY;AAAA,QACZ,GAAE;AAAA,MACH,CAAA;AAAA,IACE,CAAA;AAAA,EACC,CAAA;AACL,CAAA,GAEP,gBAAA,EAAC,KAAD;AAAA,EAAG,MAAK;AAAA,EAAI,WAAU;AAAA,EACnB,UAAA;AACA,CAAA,CACH,EAAA,CAAA"}
@@ -50,11 +50,6 @@ var e = {
50
50
  label: "卡片 Card",
51
51
  path: "/components/card"
52
52
  },
53
- pageheader: {
54
- id: "pageheader",
55
- label: "页面头部 PageHeader",
56
- path: "/components/pageheader"
57
- },
58
53
  statcard: {
59
54
  id: "statcard",
60
55
  label: "统计卡片 StatCard",
@@ -135,6 +130,11 @@ var e = {
135
130
  id: "space",
136
131
  label: "占位 Space",
137
132
  path: "/layouts/space"
133
+ },
134
+ page: {
135
+ id: "page",
136
+ label: "页面布局 Page",
137
+ path: "/layouts/page"
138
138
  }
139
139
  }
140
140
  },
@@ -349,11 +349,6 @@ var e = {
349
349
  label: "Card",
350
350
  path: "/components/card"
351
351
  },
352
- pageheader: {
353
- id: "pageheader",
354
- label: "PageHeader",
355
- path: "/components/pageheader"
356
- },
357
352
  statcard: {
358
353
  id: "statcard",
359
354
  label: "StatCard",
@@ -434,6 +429,11 @@ var e = {
434
429
  id: "space",
435
430
  label: "Space",
436
431
  path: "/layouts/space"
432
+ },
433
+ page: {
434
+ id: "page",
435
+ label: "Page Layout",
436
+ path: "/layouts/page"
437
437
  }
438
438
  }
439
439
  },
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","names":[],"sources":["../../src/utils/i18n.tsx"],"sourcesContent":["// 导入类型\nimport { MenuItem } from '../types/menu';\n\n// 定义语言类型\nexport type Language = 'zh' | 'en';\n\n// 定义翻译类型\nexport type Translations = {\n navbar: {\n search: string;\n searchPlaceholder: string;\n searchShortcut: string;\n noResults: string;\n };\n sidebar: {\n menu: {\n home: MenuItem;\n components: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n layouts: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n advanced: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n charts: MenuItem;\n };\n };\n};\n\n// 中文翻译\nexport const zhTranslations: Translations = {\n navbar: {\n search: '搜索组件',\n searchPlaceholder: '搜索组件、文档、示例...',\n searchShortcut: 'Cmd+K',\n noResults: '没有找到匹配的结果',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: '主页',\n path: '/',\n },\n components: {\n id: 'components',\n label: '组件',\n children: {\n button: {\n id: 'button',\n label: '按钮 Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: '徽章 Badge',\n path: '/components/badge',\n },\n input: {\n id: 'input',\n label: '输入框 Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: '标签 Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: '复选框 Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: '选择器 Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: '卡片 Card',\n path: '/components/card',\n },\n pageheader: {\n id: 'pageheader',\n label: '页面头部 PageHeader',\n path: '/components/pageheader',\n },\n statcard: {\n id: 'statcard',\n label: '统计卡片 StatCard',\n path: '/components/statcard',\n },\n emptystate: {\n id: 'emptystate',\n label: '空状态 EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: '模态框 Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: '标签页 Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: '列表 List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: '表格 Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: '文档 Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: '树形控件 Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: '文件上传 FileUploader',\n path: '/components/fileuploader',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: '布局 Layout',\n children: {\n layout: { id: 'layout', label: '布局总览 Layout', path: '/layouts/layout' },\n container: { id: 'container', label: '容器 Container', path: '/layouts/container' },\n grid: { id: 'grid', label: '栅格 Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: '弹性布局 Flex', path: '/layouts/flex' },\n group: { id: 'group', label: '布局组 Group', path: '/layouts/group' },\n space: { id: 'space', label: '占位 Space', path: '/layouts/space' },\n },\n },\n charts: {\n id: 'charts',\n label: '图表 Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: '折线图 Line', path: '/components/chart/line' },\n { id: 'chart-area', label: '面积图 Area', path: '/components/chart/area' },\n { id: 'chart-bar', label: '柱状图 Bar', path: '/components/chart/bar' },\n { id: 'chart-pie', label: '饼图 Pie', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: '散点图 Scatter', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: '组合图 Combo', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: '堆叠面积图 Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: '热力图 Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: '回归分析 Regression', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: '雷达图 Radar', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: '桑基图 Sankey', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: '网络图 Network', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: '日历热力图 Calendar', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: '堆叠饼图 Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: '销售漏斗图 Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: '矩形树图 Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: '地球 Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: '世界地图 World Map', path: '/components/chart/special/world-map' },\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: '高级组件',\n children: {\n datatable: {\n id: 'datatable',\n label: '数据表格 DataTable',\n path: '/components/datatable',\n },\n\n jukebox: {\n id: 'jukebox',\n label: '音乐播放器 Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: '文档悬浮控件 ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: '代码编辑器 CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'Markdown编辑器 MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: '侧边栏 Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: '文件浏览器 FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: '富文本编辑器 RichTextEditor',\n path: '/components/richtexteditor',\n },\n flow: {\n id: 'flow',\n label: '流程图编辑器 Flow',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow 使用示例',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow 移动端示例',\n path: '/components/flow/mobile',\n },\n },\n },\n },\n },\n};\n\n// 英文翻译\nexport const enTranslations: Translations = {\n navbar: {\n search: 'Search Components',\n searchPlaceholder: 'Search components, docs, examples...',\n searchShortcut: 'Cmd+K',\n noResults: 'No results found',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: 'Home',\n path: '/',\n },\n components: {\n id: 'components',\n label: 'Components',\n children: {\n button: {\n id: 'button',\n label: 'Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: 'Badge',\n path: '/components/badge',\n },\n input: {\n id: 'input',\n label: 'Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: 'Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: 'Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: 'Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: 'Card',\n path: '/components/card',\n },\n pageheader: {\n id: 'pageheader',\n label: 'PageHeader',\n path: '/components/pageheader',\n },\n statcard: {\n id: 'statcard',\n label: 'StatCard',\n path: '/components/statcard',\n },\n emptystate: {\n id: 'emptystate',\n label: 'EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: 'Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: 'Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: 'List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: 'Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: 'Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: 'FileUploader',\n path: '/components/fileuploader',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: 'Layout',\n children: {\n layout: { id: 'layout', label: 'Layout Overview', path: '/layouts/layout' },\n container: { id: 'container', label: 'Container', path: '/layouts/container' },\n grid: { id: 'grid', label: 'Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: 'Flex', path: '/layouts/flex' },\n group: { id: 'group', label: 'Group', path: '/layouts/group' },\n space: { id: 'space', label: 'Space', path: '/layouts/space' },\n },\n },\n charts: {\n id: 'charts',\n label: 'Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: 'Line Chart', path: '/components/chart/line' },\n { id: 'chart-area', label: 'Area Chart', path: '/components/chart/area' },\n { id: 'chart-bar', label: 'Bar Chart', path: '/components/chart/bar' },\n { id: 'chart-pie', label: 'Pie Chart', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: 'Scatter Chart', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: 'Combo Chart', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: 'Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: 'Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: 'Regression Analysis', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: 'Radar Chart', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: 'Sankey Diagram', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: 'Network Graph', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: 'Calendar Heatmap', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: 'Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: 'Sales Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: 'Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: 'Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: 'World Map', path: '/components/chart/special/world-map' }\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: 'Advanced Components',\n children: {\n datatable: {\n id: 'datatable',\n label: 'DataTable',\n path: '/components/datatable',\n },\n\n jukebox: {\n id: 'jukebox',\n label: 'Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: 'ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: 'CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: 'Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: 'FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: 'RichTextEditor',\n path: '/components/richtexteditor',\n },\n flow: {\n id: 'flow',\n label: 'Flow Editor',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow Usage Guide',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow Mobile Guide',\n path: '/components/flow/mobile',\n },\n },\n },\n },\n },\n};\n\n// 根据语言获取翻译\nexport const getTranslations = (language: Language): Translations => {\n return language === 'zh' ? zhTranslations : enTranslations;\n};"],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","names":[],"sources":["../../src/utils/i18n.tsx"],"sourcesContent":["// 导入类型\nimport { MenuItem } from '../types/menu';\n\n// 定义语言类型\nexport type Language = 'zh' | 'en';\n\n// 定义翻译类型\nexport type Translations = {\n navbar: {\n search: string;\n searchPlaceholder: string;\n searchShortcut: string;\n noResults: string;\n };\n sidebar: {\n menu: {\n home: MenuItem;\n components: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n layouts: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n advanced: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n charts: MenuItem;\n };\n };\n};\n\n// 中文翻译\nexport const zhTranslations: Translations = {\n navbar: {\n search: '搜索组件',\n searchPlaceholder: '搜索组件、文档、示例...',\n searchShortcut: 'Cmd+K',\n noResults: '没有找到匹配的结果',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: '主页',\n path: '/',\n },\n components: {\n id: 'components',\n label: '组件',\n children: {\n button: {\n id: 'button',\n label: '按钮 Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: '徽章 Badge',\n path: '/components/badge',\n },\n input: {\n id: 'input',\n label: '输入框 Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: '标签 Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: '复选框 Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: '选择器 Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: '卡片 Card',\n path: '/components/card',\n },\n statcard: {\n id: 'statcard',\n label: '统计卡片 StatCard',\n path: '/components/statcard',\n },\n emptystate: {\n id: 'emptystate',\n label: '空状态 EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: '模态框 Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: '标签页 Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: '列表 List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: '表格 Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: '文档 Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: '树形控件 Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: '文件上传 FileUploader',\n path: '/components/fileuploader',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: '布局 Layout',\n children: {\n layout: { id: 'layout', label: '布局总览 Layout', path: '/layouts/layout' },\n container: { id: 'container', label: '容器 Container', path: '/layouts/container' },\n grid: { id: 'grid', label: '栅格 Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: '弹性布局 Flex', path: '/layouts/flex' },\n group: { id: 'group', label: '布局组 Group', path: '/layouts/group' },\n space: { id: 'space', label: '占位 Space', path: '/layouts/space' },\n page: { id: 'page', label: '页面布局 Page', path: '/layouts/page' },\n },\n },\n charts: {\n id: 'charts',\n label: '图表 Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: '折线图 Line', path: '/components/chart/line' },\n { id: 'chart-area', label: '面积图 Area', path: '/components/chart/area' },\n { id: 'chart-bar', label: '柱状图 Bar', path: '/components/chart/bar' },\n { id: 'chart-pie', label: '饼图 Pie', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: '散点图 Scatter', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: '组合图 Combo', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: '堆叠面积图 Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: '热力图 Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: '回归分析 Regression', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: '雷达图 Radar', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: '桑基图 Sankey', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: '网络图 Network', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: '日历热力图 Calendar', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: '堆叠饼图 Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: '销售漏斗图 Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: '矩形树图 Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: '地球 Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: '世界地图 World Map', path: '/components/chart/special/world-map' },\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: '高级组件',\n children: {\n datatable: {\n id: 'datatable',\n label: '数据表格 DataTable',\n path: '/components/datatable',\n },\n\n jukebox: {\n id: 'jukebox',\n label: '音乐播放器 Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: '文档悬浮控件 ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: '代码编辑器 CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'Markdown编辑器 MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: '侧边栏 Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: '文件浏览器 FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: '富文本编辑器 RichTextEditor',\n path: '/components/richtexteditor',\n },\n flow: {\n id: 'flow',\n label: '流程图编辑器 Flow',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow 使用示例',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow 移动端示例',\n path: '/components/flow/mobile',\n },\n },\n },\n },\n },\n};\n\n// 英文翻译\nexport const enTranslations: Translations = {\n navbar: {\n search: 'Search Components',\n searchPlaceholder: 'Search components, docs, examples...',\n searchShortcut: 'Cmd+K',\n noResults: 'No results found',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: 'Home',\n path: '/',\n },\n components: {\n id: 'components',\n label: 'Components',\n children: {\n button: {\n id: 'button',\n label: 'Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: 'Badge',\n path: '/components/badge',\n },\n input: {\n id: 'input',\n label: 'Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: 'Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: 'Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: 'Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: 'Card',\n path: '/components/card',\n },\n statcard: {\n id: 'statcard',\n label: 'StatCard',\n path: '/components/statcard',\n },\n emptystate: {\n id: 'emptystate',\n label: 'EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: 'Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: 'Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: 'List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: 'Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: 'Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: 'FileUploader',\n path: '/components/fileuploader',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: 'Layout',\n children: {\n layout: { id: 'layout', label: 'Layout Overview', path: '/layouts/layout' },\n container: { id: 'container', label: 'Container', path: '/layouts/container' },\n grid: { id: 'grid', label: 'Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: 'Flex', path: '/layouts/flex' },\n group: { id: 'group', label: 'Group', path: '/layouts/group' },\n space: { id: 'space', label: 'Space', path: '/layouts/space' },\n page: { id: 'page', label: 'Page Layout', path: '/layouts/page' },\n },\n },\n charts: {\n id: 'charts',\n label: 'Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: 'Line Chart', path: '/components/chart/line' },\n { id: 'chart-area', label: 'Area Chart', path: '/components/chart/area' },\n { id: 'chart-bar', label: 'Bar Chart', path: '/components/chart/bar' },\n { id: 'chart-pie', label: 'Pie Chart', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: 'Scatter Chart', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: 'Combo Chart', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: 'Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: 'Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: 'Regression Analysis', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: 'Radar Chart', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: 'Sankey Diagram', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: 'Network Graph', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: 'Calendar Heatmap', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: 'Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: 'Sales Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: 'Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: 'Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: 'World Map', path: '/components/chart/special/world-map' }\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: 'Advanced Components',\n children: {\n datatable: {\n id: 'datatable',\n label: 'DataTable',\n path: '/components/datatable',\n },\n\n jukebox: {\n id: 'jukebox',\n label: 'Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: 'ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: 'CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: 'Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: 'FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: 'RichTextEditor',\n path: '/components/richtexteditor',\n },\n flow: {\n id: 'flow',\n label: 'Flow Editor',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow Usage Guide',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow Mobile Guide',\n path: '/components/flow/mobile',\n },\n },\n },\n },\n },\n};\n\n// 根据语言获取翻译\nexport const getTranslations = (language: Language): Translations => {\n return language === 'zh' ? zhTranslations : enTranslations;\n};"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","names":[],"sources":["../../src/utils/menu.tsx"],"sourcesContent":["// 菜单配置\nimport React from 'react';\nimport { MenuItem } from '../types/menu';\nimport { getTranslations, Language } from './i18n';\n\n// 转换扁平化的菜单项字典为菜单树\nexport const getMenuItems = (language: Language): MenuItem[] => {\n const translations = getTranslations(language);\n const { home, components, layouts, charts, advanced } = translations.sidebar.menu;\n\n // 转换组件子菜单\n const componentsChildren = Object.values(components.children || {});\n\n const layoutsChildren = Object.values(layouts.children || {});\n const advancedChildren = advanced ? Object.values(advanced.children || {}) : [];\n\n // 创建完整菜单树,确保结构正确\n const menuItems: MenuItem[] = [\n {\n ...home,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n },\n {\n id: components.id,\n label: components.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01\" />\n </svg>,\n children: componentsChildren\n },\n {\n id: layouts.id,\n label: layouts.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 5a1 1 0 011-1h16v6H4V5zm0 9h7v6H4v-6zm11 0h6v6h-6v-6z\" />\n </svg>,\n children: layoutsChildren\n },\n {\n ...charts,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 19V9m6 10V5m6 14v-7m4 7H2\" />\n </svg>,\n },\n ];\n\n if (advanced) {\n menuItems.push({\n id: advanced.id,\n label: advanced.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.384-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>,\n children: advancedChildren\n });\n }\n\n return menuItems;\n};\n"],"mappings":";;;AAMA,IAAa,IAAA,CAAgB,MAAmC;AAE5D,QAAM,EAAE,MAAA,GAAM,YAAA,GAAY,SAAA,GAAS,QAAA,GAAQ,UAAA,EAAA,IADtB,EAAgB,CACmB,EAAa,QAAQ,MAGvE,IAAqB,OAAO,OAAO,EAAW,YAAY,CAAC,CAAC,GAE5D,IAAkB,OAAO,OAAO,EAAQ,YAAY,CAAC,CAAC,GACtD,IAAmB,IAAW,OAAO,OAAO,EAAS,YAAY,CAAC,CAAC,IAAI,CAAC,GAGxE,IAAwB;AAAA,IAC1B;AAAA,MACI,GAAG;AAAA,MACH,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,kBACrG,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAoJ,CAAA;AAAA,MACxN,CAAA;AAAA,IACT;AAAA,IACA;AAAA,MACI,IAAI,EAAW;AAAA,MACf,OAAO,EAAW;AAAA,MAClB,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,kBACrG,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAoM,CAAA;AAAA,MACxQ,CAAA;AAAA,MACL,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACI,IAAI,EAAQ;AAAA,MACZ,OAAO,EAAQ;AAAA,MACf,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,kBACrG,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAA4D,CAAA;AAAA,MAChI,CAAA;AAAA,MACL,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACI,GAAG;AAAA,MACH,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,kBACrG,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAgC,CAAA;AAAA,MACpG,CAAA;AAAA,IACT;AAAA,EACJ;AAEA,SAAI,KACA,EAAU,KAAK;AAAA,IACX,IAAI,EAAS;AAAA,IACb,OAAO,EAAS;AAAA,IAChB,MAAM,gBAAA,EAAC,OAAD;AAAA,MAAK,OAAM;AAAA,MAA6B,WAAU;AAAA,MAAU,MAAK;AAAA,MAAO,SAAQ;AAAA,MAAY,QAAO;AAAA,gBACrG,gBAAA,EAAC,QAAD;AAAA,QAAM,eAAc;AAAA,QAAQ,gBAAe;AAAA,QAAQ,aAAY;AAAA,QAAI,GAAE;AAAA,MAAyQ,CAAA;AAAA,IAC7U,CAAA;AAAA,IACL,UAAU;AAAA,EACd,CAAC,GAGE;AACX"}
1
+ {"version":3,"file":"menu.js","names":[],"sources":["../../src/utils/menu.tsx"],"sourcesContent":["// 菜单配置\nimport React from 'react';\nimport { MenuItem } from '../types/menu';\nimport { getTranslations, Language } from './i18n';\n\n// 转换扁平化的菜单项字典为菜单树\nexport const getMenuItems = (language: Language): MenuItem[] => {\n const translations = getTranslations(language);\n const { home, components, layouts, charts, advanced } = translations.sidebar.menu;\n\n // 转换组件子菜单\n const componentsChildren = Object.values(components.children || {});\n\n const layoutsChildren = Object.values(layouts.children || {});\n const advancedChildren = advanced ? Object.values(advanced.children || {}) : [];\n\n // 创建完整菜单树,确保结构正确\n const menuItems: MenuItem[] = [\n {\n ...home,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n },\n {\n id: components.id,\n label: components.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01\" />\n </svg>,\n children: componentsChildren\n },\n {\n id: layouts.id,\n label: layouts.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 5a1 1 0 011-1h16v6H4V5zm0 9h7v6H4v-6zm11 0h6v6h-6v-6z\" />\n </svg>,\n children: layoutsChildren\n },\n {\n ...charts,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 19V9m6 10V5m6 14v-7m4 7H2\" />\n </svg>,\n },\n ];\n\n if (advanced) {\n menuItems.push({\n id: advanced.id,\n label: advanced.label,\n icon: <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.384-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>,\n children: advancedChildren\n });\n }\n\n return menuItems;\n};\n"],"mappings":";;;AAMA,IAAa,IAAA,CAAgB,MAAmC;AAE5D,QAAM,EAAE,MAAA,GAAM,YAAA,GAAY,SAAA,GAAS,QAAA,GAAQ,UAAA,EAAA,IADtB,EAAgB,CACmB,EAAa,QAAQ,MAGvE,IAAqB,OAAO,OAAO,EAAW,YAAY,CAAC,CAAC,GAE5D,IAAkB,OAAO,OAAO,EAAQ,YAAY,CAAC,CAAC,GACtD,IAAmB,IAAW,OAAO,OAAO,EAAS,YAAY,CAAC,CAAC,IAAI,CAAC,GAGxE,IAAwB;AAAA,IAC1B;AAAA,MACI,GAAG;AAAA,MACH,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,QACrG,UAAA,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAoJ,CAAA;AAAA,MACxN,CAAA;AAAA,IACT;AAAA,IACA;AAAA,MACI,IAAI,EAAW;AAAA,MACf,OAAO,EAAW;AAAA,MAClB,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,QACrG,UAAA,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAoM,CAAA;AAAA,MACxQ,CAAA;AAAA,MACL,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACI,IAAI,EAAQ;AAAA,MACZ,OAAO,EAAQ;AAAA,MACf,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,QACrG,UAAA,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAA4D,CAAA;AAAA,MAChI,CAAA;AAAA,MACL,UAAU;AAAA,IACd;AAAA,IACA;AAAA,MACI,GAAG;AAAA,MACH,MAAM,gBAAA,EAAC,OAAD;AAAA,QAAK,OAAM;AAAA,QAA6B,WAAU;AAAA,QAAU,MAAK;AAAA,QAAO,SAAQ;AAAA,QAAY,QAAO;AAAA,QACrG,UAAA,gBAAA,EAAC,QAAD;AAAA,UAAM,eAAc;AAAA,UAAQ,gBAAe;AAAA,UAAQ,aAAY;AAAA,UAAI,GAAE;AAAA,QAAgC,CAAA;AAAA,MACpG,CAAA;AAAA,IACT;AAAA,EACJ;AAEA,SAAI,KACA,EAAU,KAAK;AAAA,IACX,IAAI,EAAS;AAAA,IACb,OAAO,EAAS;AAAA,IAChB,MAAM,gBAAA,EAAC,OAAD;AAAA,MAAK,OAAM;AAAA,MAA6B,WAAU;AAAA,MAAU,MAAK;AAAA,MAAO,SAAQ;AAAA,MAAY,QAAO;AAAA,MACrG,UAAA,gBAAA,EAAC,QAAD;AAAA,QAAM,eAAc;AAAA,QAAQ,gBAAe;AAAA,QAAQ,aAAY;AAAA,QAAI,GAAE;AAAA,MAAyQ,CAAA;AAAA,IAC7U,CAAA;AAAA,IACL,UAAU;AAAA,EACd,CAAC,GAGE;AACX"}
@@ -1,46 +1,48 @@
1
1
  import "react";
2
- import { jsx as u, jsxs as h } from "react/jsx-runtime";
3
- import { createRootRoute as m, createRoute as c, createRouter as i } from "@tanstack/react-router";
4
- function s(t, o) {
2
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
3
+ import { createRootRoute as h, createRoute as m, createRouter as i } from "@tanstack/react-router";
4
+ function p(t, o) {
5
5
  const e = [], n = {
6
6
  getParentRoute: () => o,
7
7
  component: t.component
8
8
  };
9
9
  t.path ? n.path = t.path : t.id && (n.id = t.id);
10
- const r = c(n);
11
- return e.push(r), t.children && t.children.length > 0 && t.children.forEach((p) => {
12
- const d = s(p, r);
10
+ const r = m(n);
11
+ return e.push(r), t.children && t.children.length > 0 && t.children.forEach((u) => {
12
+ const d = p(u, r);
13
13
  e.push(...d);
14
14
  }), e;
15
15
  }
16
16
  function l(t) {
17
- const o = m({
17
+ const o = h({
18
18
  component: t.rootComponent,
19
19
  notFoundComponent: t.notFoundComponent ?? a
20
20
  }), e = [];
21
- return t.routes.forEach((n) => {
22
- const r = s(n, o);
23
- e.push(...r);
24
- }), i({
25
- routeTree: o.addChildren(e),
21
+ t.routes.forEach((r) => {
22
+ const u = p(r, o);
23
+ e.push(...u);
24
+ });
25
+ const n = o.addChildren(e);
26
+ return i({
27
+ routeTree: n,
26
28
  basepath: t.basepath,
27
29
  defaultNotFoundComponent: t.notFoundComponent ?? a
28
30
  });
29
31
  }
30
32
  function a() {
31
- return /* @__PURE__ */ h("div", {
33
+ return /* @__PURE__ */ c("div", {
32
34
  style: {
33
35
  textAlign: "center",
34
36
  padding: "4rem 1rem"
35
37
  },
36
- children: [/* @__PURE__ */ u("h1", {
38
+ children: [/* @__PURE__ */ s("h1", {
37
39
  style: {
38
40
  fontSize: "3rem",
39
41
  fontWeight: 700,
40
42
  margin: 0
41
43
  },
42
44
  children: "404"
43
- }), /* @__PURE__ */ u("p", {
45
+ }), /* @__PURE__ */ s("p", {
44
46
  style: {
45
47
  color: "#666",
46
48
  marginTop: "0.5rem"
@@ -1 +1 @@
1
- {"version":3,"file":"routerBuilder.js","names":[],"sources":["../../src/utils/routerBuilder.tsx"],"sourcesContent":["import React from 'react';\nimport {\n createRouter,\n createRootRoute,\n createRoute,\n RootRoute,\n AnyRoute,\n RouteComponent,\n} from '@tanstack/react-router';\n\n/**\n * 路由配置接口\n */\nexport interface RouteConfig {\n /** 路由路径(与 id 二选一,优先使用 path) */\n path?: string;\n /** 路由组件 */\n component?: RouteComponent;\n /** 子路由配置 */\n children?: RouteConfig[];\n /** 路由 ID(仅用于无路径的布局路由,不能与 path 同时使用) */\n id?: string;\n}\n\n/**\n * 路由构建器配置\n */\nexport interface RouterBuilderConfig {\n /** 路由配置数组 */\n routes: RouteConfig[];\n /** 根路由组件,默认使用 AppLayoutWrapper */\n rootComponent?: RouteComponent;\n /** 路由基础路径,部署在子路径时使用(如 '/dish-ui') */\n basepath?: string;\n /** 自定义 404 组件 */\n notFoundComponent?: RouteComponent;\n}\n\n/**\n * 递归创建路由树\n * @param config 路由配置\n * @param parentRoute 父路由\n * @returns 创建的路由数组\n */\nfunction createRoutesRecursive(\n config: RouteConfig,\n parentRoute: RootRoute | AnyRoute\n): AnyRoute[] {\n const routes: AnyRoute[] = [];\n\n // 创建当前路由\n // 注意:TanStack Router 不允许同时设置 id 和 path\n // id 只用于无路径的布局路由\n const routeOptions: any = {\n getParentRoute: () => parentRoute,\n component: config.component,\n };\n\n // 如果有 path,使用 path;否则使用 id(用于布局路由)\n if (config.path) {\n routeOptions.path = config.path;\n } else if (config.id) {\n routeOptions.id = config.id;\n }\n\n const currentRoute = createRoute(routeOptions);\n\n routes.push(currentRoute);\n\n // 递归创建子路由\n if (config.children && config.children.length > 0) {\n config.children.forEach((childConfig) => {\n const childRoutes = createRoutesRecursive(childConfig, currentRoute);\n routes.push(...childRoutes);\n });\n }\n\n return routes;\n}\n\n/**\n * 构建路由器\n * @param config 路由构建器配置\n * @returns TanStack Router 实例\n */\nexport function buildRouter(config: RouterBuilderConfig) {\n const rootRoute = createRootRoute({\n component: config.rootComponent,\n notFoundComponent: config.notFoundComponent ?? DefaultNotFound,\n });\n\n const allRoutes: AnyRoute[] = [];\n\n config.routes.forEach((routeConfig) => {\n const routes = createRoutesRecursive(routeConfig, rootRoute);\n allRoutes.push(...routes);\n });\n\n const routeTree = rootRoute.addChildren(allRoutes);\n\n const router = createRouter({\n routeTree,\n basepath: config.basepath,\n defaultNotFoundComponent: config.notFoundComponent ?? DefaultNotFound,\n });\n\n return router;\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={{ textAlign: 'center', padding: '4rem 1rem' }}>\n <h1 style={{ fontSize: '3rem', fontWeight: 700, margin: 0 }}>404</h1>\n <p style={{ color: '#666', marginTop: '0.5rem' }}>Page not found</p>\n </div>\n );\n}\n\n/**\n * 从扁平路由配置创建路由器(简化版)\n * @param routes 路由配置数组\n * @param rootComponent 根路由组件\n * @returns TanStack Router 实例\n */\nexport function createRouterFromConfig(\n routes: RouteConfig[],\n rootComponent?: RouteComponent,\n options?: { basepath?: string; notFoundComponent?: RouteComponent }\n) {\n return buildRouter({\n routes,\n rootComponent,\n basepath: options?.basepath,\n notFoundComponent: options?.notFoundComponent,\n });\n}\n\n"],"mappings":";;;AA4CA,SAAS,EACL,GACA,GACU;AACV,QAAM,IAAqB,CAAC,GAKtB,IAAoB;AAAA,IACtB,gBAAA,MAAsB;AAAA,IACtB,WAAW,EAAO;AAAA,EACtB;AAGA,EAAI,EAAO,OACP,EAAa,OAAO,EAAO,OACpB,EAAO,OACd,EAAa,KAAK,EAAO;AAG7B,QAAM,IAAe,EAAY,CAAY;AAE7C,SAAA,EAAO,KAAK,CAAY,GAGpB,EAAO,YAAY,EAAO,SAAS,SAAS,KAC5C,EAAO,SAAS,QAAA,CAAS,MAAgB;AACrC,UAAM,IAAc,EAAsB,GAAa,CAAY;AACnE,IAAA,EAAO,KAAK,GAAG,CAAW;AAAA,EAC9B,CAAC,GAGE;AACX;AAOA,SAAgB,EAAY,GAA6B;AACrD,QAAM,IAAY,EAAgB;AAAA,IAC9B,WAAW,EAAO;AAAA,IAClB,mBAAmB,EAAO,qBAAqB;AAAA,EACnD,CAAC,GAEK,IAAwB,CAAC;AAE/B,SAAA,EAAO,OAAO,QAAA,CAAS,MAAgB;AACnC,UAAM,IAAS,EAAsB,GAAa,CAAS;AAC3D,IAAA,EAAU,KAAK,GAAG,CAAM;AAAA,EAC5B,CAAC,GAIc,EAAa;AAAA,IACxB,WAHc,EAAU,YAAY,CAGpC;AAAA,IACA,UAAU,EAAO;AAAA,IACjB,0BAA0B,EAAO,qBAAqB;AAAA,EAC1D,CAEO;AACX;AAEA,SAAS,IAAkB;AACvB,SACI,gBAAA,EAAC,OAAD;AAAA,IAAK,OAAO;AAAA,MAAE,WAAW;AAAA,MAAU,SAAS;AAAA,IAAY;AAAA,cAAxD,CACI,gBAAA,EAAC,MAAD;AAAA,MAAI,OAAO;AAAA,QAAE,UAAU;AAAA,QAAQ,YAAY;AAAA,QAAK,QAAQ;AAAA,MAAE;AAAA,gBAAG;AAAA,IAAO,CAAA,GACpE,gBAAA,EAAC,KAAD;AAAA,MAAG,OAAO;AAAA,QAAE,OAAO;AAAA,QAAQ,WAAW;AAAA,MAAS;AAAA,gBAAG;AAAA,IAAiB,CAAA,CAClE;AAAA;AAEb;AAQA,SAAgB,EACZ,GACA,GACA,GACF;AACE,SAAO,EAAY;AAAA,IACf,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAU,GAAS;AAAA,IACnB,mBAAmB,GAAS;AAAA,EAChC,CAAC;AACL"}
1
+ {"version":3,"file":"routerBuilder.js","names":[],"sources":["../../src/utils/routerBuilder.tsx"],"sourcesContent":["import React from 'react';\nimport {\n createRouter,\n createRootRoute,\n createRoute,\n RootRoute,\n AnyRoute,\n RouteComponent,\n} from '@tanstack/react-router';\n\n/**\n * 路由配置接口\n */\nexport interface RouteConfig {\n /** 路由路径(与 id 二选一,优先使用 path) */\n path?: string;\n /** 路由组件 */\n component?: RouteComponent;\n /** 子路由配置 */\n children?: RouteConfig[];\n /** 路由 ID(仅用于无路径的布局路由,不能与 path 同时使用) */\n id?: string;\n}\n\n/**\n * 路由构建器配置\n */\nexport interface RouterBuilderConfig {\n /** 路由配置数组 */\n routes: RouteConfig[];\n /** 根路由组件,默认使用 AppLayoutWrapper */\n rootComponent?: RouteComponent;\n /** 路由基础路径,部署在子路径时使用(如 '/dish-ui') */\n basepath?: string;\n /** 自定义 404 组件 */\n notFoundComponent?: RouteComponent;\n}\n\n/**\n * 递归创建路由树\n * @param config 路由配置\n * @param parentRoute 父路由\n * @returns 创建的路由数组\n */\nfunction createRoutesRecursive(\n config: RouteConfig,\n parentRoute: RootRoute | AnyRoute\n): AnyRoute[] {\n const routes: AnyRoute[] = [];\n\n // 创建当前路由\n // 注意:TanStack Router 不允许同时设置 id 和 path\n // id 只用于无路径的布局路由\n const routeOptions: any = {\n getParentRoute: () => parentRoute,\n component: config.component,\n };\n\n // 如果有 path,使用 path;否则使用 id(用于布局路由)\n if (config.path) {\n routeOptions.path = config.path;\n } else if (config.id) {\n routeOptions.id = config.id;\n }\n\n const currentRoute = createRoute(routeOptions);\n\n routes.push(currentRoute);\n\n // 递归创建子路由\n if (config.children && config.children.length > 0) {\n config.children.forEach((childConfig) => {\n const childRoutes = createRoutesRecursive(childConfig, currentRoute);\n routes.push(...childRoutes);\n });\n }\n\n return routes;\n}\n\n/**\n * 构建路由器\n * @param config 路由构建器配置\n * @returns TanStack Router 实例\n */\nexport function buildRouter(config: RouterBuilderConfig) {\n const rootRoute = createRootRoute({\n component: config.rootComponent,\n notFoundComponent: config.notFoundComponent ?? DefaultNotFound,\n });\n\n const allRoutes: AnyRoute[] = [];\n\n config.routes.forEach((routeConfig) => {\n const routes = createRoutesRecursive(routeConfig, rootRoute);\n allRoutes.push(...routes);\n });\n\n const routeTree = rootRoute.addChildren(allRoutes);\n\n const router = createRouter({\n routeTree,\n basepath: config.basepath,\n defaultNotFoundComponent: config.notFoundComponent ?? DefaultNotFound,\n });\n\n return router;\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={{ textAlign: 'center', padding: '4rem 1rem' }}>\n <h1 style={{ fontSize: '3rem', fontWeight: 700, margin: 0 }}>404</h1>\n <p style={{ color: '#666', marginTop: '0.5rem' }}>Page not found</p>\n </div>\n );\n}\n\n/**\n * 从扁平路由配置创建路由器(简化版)\n * @param routes 路由配置数组\n * @param rootComponent 根路由组件\n * @returns TanStack Router 实例\n */\nexport function createRouterFromConfig(\n routes: RouteConfig[],\n rootComponent?: RouteComponent,\n options?: { basepath?: string; notFoundComponent?: RouteComponent }\n) {\n return buildRouter({\n routes,\n rootComponent,\n basepath: options?.basepath,\n notFoundComponent: options?.notFoundComponent,\n });\n}\n\n"],"mappings":";;;AA4CA,SAAS,EACL,GACA,GACU;AACV,QAAM,IAAqB,CAAC,GAKtB,IAAoB;AAAA,IACtB,gBAAA,MAAsB;AAAA,IACtB,WAAW,EAAO;AAAA,EACtB;AAGA,EAAI,EAAO,OACP,EAAa,OAAO,EAAO,OACpB,EAAO,OACd,EAAa,KAAK,EAAO;AAG7B,QAAM,IAAe,EAAY,CAAY;AAE7C,SAAA,EAAO,KAAK,CAAY,GAGpB,EAAO,YAAY,EAAO,SAAS,SAAS,KAC5C,EAAO,SAAS,QAAA,CAAS,MAAgB;AACrC,UAAM,IAAc,EAAsB,GAAa,CAAY;AACnE,IAAA,EAAO,KAAK,GAAG,CAAW;AAAA,EAC9B,CAAC,GAGE;AACX;AAOA,SAAgB,EAAY,GAA6B;AACrD,QAAM,IAAY,EAAgB;AAAA,IAC9B,WAAW,EAAO;AAAA,IAClB,mBAAmB,EAAO,qBAAqB;AAAA,EACnD,CAAC,GAEK,IAAwB,CAAC;AAE/B,EAAA,EAAO,OAAO,QAAA,CAAS,MAAgB;AACnC,UAAM,IAAS,EAAsB,GAAa,CAAS;AAC3D,IAAA,EAAU,KAAK,GAAG,CAAM;AAAA,EAC5B,CAAC;AAED,QAAM,IAAY,EAAU,YAAY,CAAS;AAQjD,SANe,EAAa;AAAA,IACxB,WAAA;AAAA,IACA,UAAU,EAAO;AAAA,IACjB,0BAA0B,EAAO,qBAAqB;AAAA,EAC1D,CAEO;AACX;AAEA,SAAS,IAAkB;AACvB,SACI,gBAAA,EAAC,OAAD;AAAA,IAAK,OAAO;AAAA,MAAE,WAAW;AAAA,MAAU,SAAS;AAAA,IAAY;AAAA,IAAxD,UAAA,CACI,gBAAA,EAAC,MAAD;AAAA,MAAI,OAAO;AAAA,QAAE,UAAU;AAAA,QAAQ,YAAY;AAAA,QAAK,QAAQ;AAAA,MAAE;AAAA,MAAG,UAAA;AAAA,IAAO,CAAA,GACpE,gBAAA,EAAC,KAAD;AAAA,MAAG,OAAO;AAAA,QAAE,OAAO;AAAA,QAAQ,WAAW;AAAA,MAAS;AAAA,MAAG,UAAA;AAAA,IAAiB,CAAA,CAClE;AAAA;AAEb;AAQA,SAAgB,EACZ,GACA,GACA,GACF;AACE,SAAO,EAAY;AAAA,IACf,QAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAU,GAAS;AAAA,IACnB,mBAAmB,GAAS;AAAA,EAChC,CAAC;AACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"themes.js","names":[],"sources":["../../src/utils/themes.tsx"],"sourcesContent":["// 主题配置\nimport React from 'react';\nimport { ThemeType } from '../contexts/AppContext';\n\n// 定义主题配置类型\nexport type ThemeConfig = {\n id: ThemeType;\n name: { zh: string; en: string };\n icon: React.ReactNode;\n};\n\n// 默认主题配置\nexport const getThemes = (): ThemeConfig[] => {\n return [\n {\n id: 'light',\n name: { zh: '明亮', en: 'Light' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n ),\n },\n {\n id: 'dark',\n name: { zh: '暗黑', en: 'Dark' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\n </svg>\n ),\n },\n {\n id: 'retro',\n name: { zh: '复古', en: 'Retro' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n ),\n },\n {\n id: 'cyberpunk',\n name: { zh: '赛博朋克', en: 'CyberPunk' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z\" />\n </svg>\n ),\n },\n {\n id: 'matrix',\n name: { zh: '黑客帝国', en: 'Matrix' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n ),\n },\n {\n id: 'oceanblue',\n name: { zh: '海洋蓝', en: 'OceanBlue' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M14 10l-2 1m0 0l-2-1m2 1v2.5M20 7l-2 1m2-1l-2-1m2 1v2.5M14 4l-2-1-2 1M4 7l2-1M4 7l2 1M4 7v2.5M12 21l-2-1m2 1l2-1m-2 1v-2.5M6 18l-2-1v-2.5M18 18l2-1v-2.5\" />\n </svg>\n ),\n },\n {\n id: 'eyecare',\n name: { zh: '护眼', en: 'EyeCare' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\n </svg>\n ),\n },\n {\n id: 'ghibli',\n name: { zh: '吉卜力', en: 'Ghibli' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z\" />\n </svg>\n ),\n },\n {\n id: 'pinkgirl',\n name: { zh: '粉红少女心', en: 'Pink Girl' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\" />\n </svg>\n ),\n },\n {\n id: 'mintgirl',\n name: { zh: '薄荷少女心', en: 'Mint Girl' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n ),\n },\n {\n id: 'wuxing',\n name: { zh: '五行', en: 'WuXing' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" strokeWidth=\"1.5\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\" d=\"M12 3v18M3 12h18M6.34 6.34l11.32 11.32M17.66 6.34L6.34 17.66\" />\n </svg>\n ),\n },\n {\n id: 'jukebox',\n name: { zh: '音乐盒', en: 'Jukebox' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3\" />\n </svg>\n ),\n },\n ];\n};\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"themes.js","names":[],"sources":["../../src/utils/themes.tsx"],"sourcesContent":["// 主题配置\nimport React from 'react';\nimport { ThemeType } from '../contexts/AppContext';\n\n// 定义主题配置类型\nexport type ThemeConfig = {\n id: ThemeType;\n name: { zh: string; en: string };\n icon: React.ReactNode;\n};\n\n// 默认主题配置\nexport const getThemes = (): ThemeConfig[] => {\n return [\n {\n id: 'light',\n name: { zh: '明亮', en: 'Light' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n ),\n },\n {\n id: 'dark',\n name: { zh: '暗黑', en: 'Dark' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\n </svg>\n ),\n },\n {\n id: 'retro',\n name: { zh: '复古', en: 'Retro' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n ),\n },\n {\n id: 'cyberpunk',\n name: { zh: '赛博朋克', en: 'CyberPunk' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z\" />\n </svg>\n ),\n },\n {\n id: 'matrix',\n name: { zh: '黑客帝国', en: 'Matrix' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n ),\n },\n {\n id: 'oceanblue',\n name: { zh: '海洋蓝', en: 'OceanBlue' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M14 10l-2 1m0 0l-2-1m2 1v2.5M20 7l-2 1m2-1l-2-1m2 1v2.5M14 4l-2-1-2 1M4 7l2-1M4 7l2 1M4 7v2.5M12 21l-2-1m2 1l2-1m-2 1v-2.5M6 18l-2-1v-2.5M18 18l2-1v-2.5\" />\n </svg>\n ),\n },\n {\n id: 'eyecare',\n name: { zh: '护眼', en: 'EyeCare' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\n </svg>\n ),\n },\n {\n id: 'ghibli',\n name: { zh: '吉卜力', en: 'Ghibli' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z\" />\n </svg>\n ),\n },\n {\n id: 'pinkgirl',\n name: { zh: '粉红少女心', en: 'Pink Girl' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\" />\n </svg>\n ),\n },\n {\n id: 'mintgirl',\n name: { zh: '薄荷少女心', en: 'Mint Girl' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n ),\n },\n {\n id: 'wuxing',\n name: { zh: '五行', en: 'WuXing' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" strokeWidth=\"1.5\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.5\" d=\"M12 3v18M3 12h18M6.34 6.34l11.32 11.32M17.66 6.34L6.34 17.66\" />\n </svg>\n ),\n },\n {\n id: 'jukebox',\n name: { zh: '音乐盒', en: 'Jukebox' },\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3\" />\n </svg>\n ),\n },\n ];\n};\n\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dishui",
3
- "version": "0.0.64",
3
+ "version": "0.0.65",
4
4
  "description": "New Components UI Framework with AI Powered",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -72,13 +72,13 @@
72
72
  "author": "dameng(pingf0)",
73
73
  "license": "MIT",
74
74
  "peerDependencies": {
75
- "@tanstack/react-router": "^1.167.0",
75
+ "@tanstack/react-router": "^1.170.33",
76
76
  "react": "^19.0.0",
77
77
  "react-dom": "^19.0.0"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@tailwindcss/postcss": "^4.3.3",
81
- "@tanstack/react-router": "^1.170.18",
81
+ "@tanstack/react-router": "^1.170.33",
82
82
  "@types/hast": "^3.0.5",
83
83
  "@types/mdast": "^4.0.4",
84
84
  "@types/node": "^26.1.1",
@@ -88,7 +88,7 @@
88
88
  "@types/three": "0.180.0",
89
89
  "@vitejs/plugin-react": "^6.0.3",
90
90
  "autoprefixer": "^10.5.4",
91
- "daisyui": "^5.6.18",
91
+ "daisyui": "^5.7.28",
92
92
  "d3-geo": "3.1.1",
93
93
  "postcss": "^8.5.19",
94
94
  "react": "^19.2.7",
@@ -98,7 +98,7 @@
98
98
  "tslib": "^2.8.1",
99
99
  "typescript": "^7.0.2",
100
100
  "unified": "^11.0.5",
101
- "vite": "^8.1.5"
101
+ "vite": "^8.2.2"
102
102
  },
103
103
  "dependencies": {
104
104
  "@codemirror/autocomplete": "^6.20.3",
@@ -118,10 +118,10 @@
118
118
  "@codemirror/view": "^6.43.6",
119
119
  "@lezer/highlight": "^1.2.3",
120
120
  "@tailwindcss/vite": "^4.3.3",
121
- "@tanstack/react-charts": "^0.14.0",
121
+ "@tanstack/react-charts": "^0.16.0",
122
122
  "topojson-client": "^3.1.0",
123
123
  "world-atlas": "^2.0.2",
124
- "@tanstack/react-table": "9.0.0-beta.52",
124
+ "@tanstack/react-table": "^9.2.4",
125
125
  "@tiptap/extension-color": "^3.28.0",
126
126
  "@tiptap/extension-font-family": "^3.28.0",
127
127
  "@tiptap/extension-highlight": "^3.28.0",