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":"index.js","names":[],"sources":["../../../src/components/SidebarToggleButton/index.tsx"],"sourcesContent":["import React from 'react';\n\ninterface SidebarToggleButtonProps {\n /** 侧边栏是否折叠 */\n isCollapsed: boolean;\n /** 切换侧边栏的回调 */\n onToggle: () => void;\n /** 当前侧边栏宽度 */\n sidebarWidth: number;\n /** 折叠时的宽度 */\n collapsedWidth?: number;\n}\n\n/**\n * 桌面端悬浮侧边栏切换按钮\n */\nexport const DesktopSidebarToggleButton: React.FC<SidebarToggleButtonProps> = ({\n isCollapsed,\n onToggle,\n sidebarWidth,\n collapsedWidth = 64,\n}) => {\n return (\n <div className=\"bg-opacity-20\">\n <button\n onClick={onToggle}\n className=\"fixed top-1/2 -translate-y-1/2 z-50 bg-success opacity-60 hover:opacity-90 text-primary-content rounded-full p-1.5 sm:p-2.5 shadow-lg transition-all duration-300 ease-in-out backdrop-blur-sm hover:scale-110 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-opacity-50 lg:flex md:flex hidden\"\n style={{\n left: isCollapsed ? `${collapsedWidth - 24}px` : `${sidebarWidth - 24}px`,\n transform: 'translateY(-50%)',\n boxShadow: '0 4px 15px rgba(0, 0, 0, 0.1)',\n }}\n aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n className=\"w-4 h-4 sm:w-5 sm:h-5 transition-transform duration-300\"\n style={{\n transform: isCollapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n );\n};\n\n/**\n * 移动端悬浮侧边栏切换按钮\n */\nexport const MobileSidebarToggleButton: React.FC<Pick<SidebarToggleButtonProps, 'isCollapsed' | 'onToggle'>> = ({\n isCollapsed,\n onToggle,\n}) => {\n return (\n <button\n onClick={onToggle}\n className=\"fixed bottom-6 right-6 z-50 bg-primary bg-opacity-30 hover:bg-opacity-50 text-primary-content rounded-full p-3 shadow-lg transition-all duration-300 ease-in-out backdrop-blur-sm hover:scale-105 md:hidden\"\n style={{\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n }}\n aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n className=\"w-5 h-5\"\n >\n {isCollapsed ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n )}\n </svg>\n </button>\n );\n};\n\n/**\n * 组合的侧边栏切换按钮(包含桌面端和移动端)\n */\nexport const SidebarToggleButtons: React.FC<SidebarToggleButtonProps> = (props) => {\n return (\n <>\n <DesktopSidebarToggleButton {...props} />\n <MobileSidebarToggleButton isCollapsed={props.isCollapsed} onToggle={props.onToggle} />\n </>\n );\n};\n\nexport default SidebarToggleButtons;\n\n"],"mappings":";;AAgBA,IAAa,IAAA,CAAkE,EAC7E,aAAA,GACA,UAAA,GACA,cAAA,GACA,gBAAA,IAAiB,GAAA,MAGf,gBAAA,EAAC,OAAD;AAAA,EAAK,WAAU;AAAA,YACb,gBAAA,EAAC,UAAD;AAAA,IACE,SAAS;AAAA,IACT,WAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM,IAAc,GAAG,IAAiB,EAAA,OAAS,GAAG,IAAe,EAAA;AAAA,MACnE,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IACA,cAAY,IAAc,UAAU;AAAA,cAEpC,gBAAA,EAAC,OAAD;AAAA,MACE,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,WAAU;AAAA,MACV,OAAO,EACL,WAAW,IAAc,mBAAmB,eAC9C;AAAA,gBAEA,gBAAA,EAAC,QAAD;AAAA,QAAM,eAAc;AAAA,QAAQ,gBAAe;AAAA,QAAQ,aAAY;AAAA,QAAI,GAAE;AAAA,MAAmB,CAAA;AAAA,IACrF,CAAA;AAAA,EACC,CAAA;AACL,CAAA,GAOI,IAAA,CAAmG,EAC9G,aAAA,GACA,UAAA,EAAA,MAGE,gBAAA,EAAC,UAAD;AAAA,EACE,SAAS;AAAA,EACT,WAAU;AAAA,EACV,OAAO,EACL,WAAW,iCACb;AAAA,EACA,cAAY,IAAc,UAAU;AAAA,YAEpC,gBAAA,EAAC,OAAD;AAAA,IACE,OAAM;AAAA,IACN,MAAK;AAAA,IACL,SAAQ;AAAA,IACR,QAAO;AAAA,IACP,WAAU;AAAA,cAET,IACC,gBAAA,EAAC,QAAD;AAAA,MAAM,eAAc;AAAA,MAAQ,gBAAe;AAAA,MAAQ,aAAY;AAAA,MAAI,GAAE;AAAA,IAA2B,CAAA,IAEhG,gBAAA,EAAC,QAAD;AAAA,MAAM,eAAc;AAAA,MAAQ,gBAAe;AAAA,MAAQ,aAAY;AAAA,MAAI,GAAE;AAAA,IAAwB,CAAA;AAAA,EAE5F,CAAA;AACC,CAAA,GAOC,IAAA,CAA4D,MAErE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAA4B,GAAI,EAAQ,CAAA,GACxC,gBAAA,EAAC,GAAD;AAAA,EAA2B,aAAa,EAAM;AAAA,EAAa,UAAU,EAAM;AAAW,CAAA,CACtF,EAAA,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/SidebarToggleButton/index.tsx"],"sourcesContent":["import React from 'react';\n\ninterface SidebarToggleButtonProps {\n /** 侧边栏是否折叠 */\n isCollapsed: boolean;\n /** 切换侧边栏的回调 */\n onToggle: () => void;\n /** 当前侧边栏宽度 */\n sidebarWidth: number;\n /** 折叠时的宽度 */\n collapsedWidth?: number;\n}\n\n/**\n * 桌面端悬浮侧边栏切换按钮\n */\nexport const DesktopSidebarToggleButton: React.FC<SidebarToggleButtonProps> = ({\n isCollapsed,\n onToggle,\n sidebarWidth,\n collapsedWidth = 64,\n}) => {\n return (\n <div className=\"bg-opacity-20\">\n <button\n onClick={onToggle}\n className=\"fixed top-1/2 -translate-y-1/2 z-50 bg-success opacity-60 hover:opacity-90 text-primary-content rounded-full p-1.5 sm:p-2.5 shadow-lg transition-all duration-300 ease-in-out backdrop-blur-sm hover:scale-110 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-opacity-50 lg:flex md:flex hidden\"\n style={{\n left: isCollapsed ? `${collapsedWidth - 24}px` : `${sidebarWidth - 24}px`,\n transform: 'translateY(-50%)',\n boxShadow: '0 4px 15px rgba(0, 0, 0, 0.1)',\n }}\n aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n className=\"w-4 h-4 sm:w-5 sm:h-5 transition-transform duration-300\"\n style={{\n transform: isCollapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n }}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n );\n};\n\n/**\n * 移动端悬浮侧边栏切换按钮\n */\nexport const MobileSidebarToggleButton: React.FC<Pick<SidebarToggleButtonProps, 'isCollapsed' | 'onToggle'>> = ({\n isCollapsed,\n onToggle,\n}) => {\n return (\n <button\n onClick={onToggle}\n className=\"fixed bottom-6 right-6 z-50 bg-primary bg-opacity-30 hover:bg-opacity-50 text-primary-content rounded-full p-3 shadow-lg transition-all duration-300 ease-in-out backdrop-blur-sm hover:scale-105 md:hidden\"\n style={{\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n }}\n aria-label={isCollapsed ? '展开侧边栏' : '收起侧边栏'}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n className=\"w-5 h-5\"\n >\n {isCollapsed ? (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n ) : (\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n )}\n </svg>\n </button>\n );\n};\n\n/**\n * 组合的侧边栏切换按钮(包含桌面端和移动端)\n */\nexport const SidebarToggleButtons: React.FC<SidebarToggleButtonProps> = (props) => {\n return (\n <>\n <DesktopSidebarToggleButton {...props} />\n <MobileSidebarToggleButton isCollapsed={props.isCollapsed} onToggle={props.onToggle} />\n </>\n );\n};\n\nexport default SidebarToggleButtons;\n\n"],"mappings":";;AAgBA,IAAa,IAAA,CAAkE,EAC7E,aAAA,GACA,UAAA,GACA,cAAA,GACA,gBAAA,IAAiB,GAAA,MAGf,gBAAA,EAAC,OAAD;AAAA,EAAK,WAAU;AAAA,EACb,UAAA,gBAAA,EAAC,UAAD;AAAA,IACE,SAAS;AAAA,IACT,WAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM,IAAc,GAAG,IAAiB,EAAA,OAAS,GAAG,IAAe,EAAA;AAAA,MACnE,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IACA,cAAY,IAAc,UAAU;AAAA,IAEpC,UAAA,gBAAA,EAAC,OAAD;AAAA,MACE,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,QAAO;AAAA,MACP,WAAU;AAAA,MACV,OAAO,EACL,WAAW,IAAc,mBAAmB,eAC9C;AAAA,MAEA,UAAA,gBAAA,EAAC,QAAD;AAAA,QAAM,eAAc;AAAA,QAAQ,gBAAe;AAAA,QAAQ,aAAY;AAAA,QAAI,GAAE;AAAA,MAAmB,CAAA;AAAA,IACrF,CAAA;AAAA,EACC,CAAA;AACL,CAAA,GAOI,IAAA,CAAmG,EAC9G,aAAA,GACA,UAAA,EAAA,MAGE,gBAAA,EAAC,UAAD;AAAA,EACE,SAAS;AAAA,EACT,WAAU;AAAA,EACV,OAAO,EACL,WAAW,iCACb;AAAA,EACA,cAAY,IAAc,UAAU;AAAA,EAEpC,UAAA,gBAAA,EAAC,OAAD;AAAA,IACE,OAAM;AAAA,IACN,MAAK;AAAA,IACL,SAAQ;AAAA,IACR,QAAO;AAAA,IACP,WAAU;AAAA,IAET,UAAA,IACC,gBAAA,EAAC,QAAD;AAAA,MAAM,eAAc;AAAA,MAAQ,gBAAe;AAAA,MAAQ,aAAY;AAAA,MAAI,GAAE;AAAA,IAA2B,CAAA,IAEhG,gBAAA,EAAC,QAAD;AAAA,MAAM,eAAc;AAAA,MAAQ,gBAAe;AAAA,MAAQ,aAAY;AAAA,MAAI,GAAE;AAAA,IAAwB,CAAA;AAAA,EAE5F,CAAA;AACC,CAAA,GAOC,IAAA,CAA4D,MAErE,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAA4B,GAAI,EAAQ,CAAA,GACxC,gBAAA,EAAC,GAAD;AAAA,EAA2B,aAAa,EAAM;AAAA,EAAa,UAAU,EAAM;AAAW,CAAA,CACtF,EAAA,CAAA"}
@@ -6,6 +6,8 @@ export type StatCardProps = {
6
6
  value: React.ReactNode;
7
7
  /** 右上角图标 */
8
8
  icon?: React.ReactNode;
9
+ /** 图标位置:`top`(默认,图标在右上角)/ `left`(图标在左,文字居右) */
10
+ iconPosition?: 'top' | 'left';
9
11
  /** 色调(影响图标底色与文字色) */
10
12
  tone?: 'primary' | 'success' | 'warning' | 'info' | 'error' | 'neutral';
11
13
  /** 值下方的小字说明 */
@@ -18,5 +20,5 @@ export type StatCardProps = {
18
20
  * 统计卡片:仪表盘等场景的「标签 + 数值 + 图标」小卡。
19
21
  * 内部基于 Card 组件,默认紧凑内边距与小号字体。
20
22
  */
21
- declare const StatCard: ({ label, value, icon, tone, hint, loading, className, }: StatCardProps) => React.JSX.Element;
23
+ declare const StatCard: ({ label, value, icon, iconPosition, tone, hint, loading, className, }: StatCardProps) => React.JSX.Element;
22
24
  export default StatCard;
@@ -1,4 +1,4 @@
1
- import b from "../Card/index.js";
1
+ import m from "../Card/index.js";
2
2
  import "react";
3
3
  import { jsx as e, jsxs as a } from "react/jsx-runtime";
4
4
  var x = {
@@ -26,13 +26,41 @@ var x = {
26
26
  text: "text-base-content/70",
27
27
  bg: "bg-base-content/5"
28
28
  }
29
- }, u = ({ label: n, value: o, icon: t, tone: c = "primary", hint: r, loading: i = !1, className: m = "" }) => {
30
- const s = x[c];
31
- return /* @__PURE__ */ a(b, {
29
+ }, f = ({ label: n, value: c, icon: t, iconPosition: d = "top", tone: o = "primary", hint: s, loading: l = !1, className: i = "" }) => {
30
+ const r = x[o];
31
+ return d === "left" ? /* @__PURE__ */ e(m, {
32
32
  bordered: !0,
33
33
  glass: !1,
34
34
  hover: !0,
35
- className: `bg-base-200 p-4 ${m}`.trim(),
35
+ className: `bg-base-200 p-4 ${i}`.trim(),
36
+ children: /* @__PURE__ */ a("div", {
37
+ className: "flex items-center gap-3",
38
+ children: [t && /* @__PURE__ */ e("span", {
39
+ className: `flex shrink-0 items-center justify-center rounded-lg p-2.5 ${r.bg} [&>svg]:h-5 [&>svg]:w-5 ${r.text}`.trim(),
40
+ children: t
41
+ }), /* @__PURE__ */ a("div", {
42
+ className: "min-w-0 flex-1",
43
+ children: [
44
+ /* @__PURE__ */ e("span", {
45
+ className: "block truncate text-xs font-medium text-base-content/60",
46
+ children: n
47
+ }),
48
+ l ? /* @__PURE__ */ e("div", { className: "mt-1 h-6 w-14 animate-pulse rounded bg-base-content/10" }) : /* @__PURE__ */ e("p", {
49
+ className: "truncate text-xl font-bold leading-tight text-base-content",
50
+ children: c
51
+ }),
52
+ s && /* @__PURE__ */ e("p", {
53
+ className: "mt-0.5 truncate text-[11px] text-base-content/50",
54
+ children: s
55
+ })
56
+ ]
57
+ })]
58
+ })
59
+ }) : /* @__PURE__ */ a(m, {
60
+ bordered: !0,
61
+ glass: !1,
62
+ hover: !0,
63
+ className: `bg-base-200 p-4 ${i}`.trim(),
36
64
  children: [
37
65
  /* @__PURE__ */ a("div", {
38
66
  className: "mb-2 flex items-center justify-between gap-2",
@@ -40,23 +68,23 @@ var x = {
40
68
  className: "truncate text-xs font-medium text-base-content/60",
41
69
  children: n
42
70
  }), t && /* @__PURE__ */ e("span", {
43
- className: `rounded-md p-1.5 ${s.bg} [&>svg]:h-4 [&>svg]:w-4 ${s.text}`.trim(),
71
+ className: `rounded-md p-1.5 ${r.bg} [&>svg]:h-4 [&>svg]:w-4 ${r.text}`.trim(),
44
72
  children: t
45
73
  })]
46
74
  }),
47
- i ? /* @__PURE__ */ e("div", { className: "h-7 w-14 animate-pulse rounded bg-base-content/10" }) : /* @__PURE__ */ e("p", {
75
+ l ? /* @__PURE__ */ e("div", { className: "h-7 w-14 animate-pulse rounded bg-base-content/10" }) : /* @__PURE__ */ e("p", {
48
76
  className: "text-2xl font-bold leading-none text-base-content",
49
- children: o
77
+ children: c
50
78
  }),
51
- r && /* @__PURE__ */ e("p", {
79
+ s && /* @__PURE__ */ e("p", {
52
80
  className: "mt-1.5 text-[11px] text-base-content/50",
53
- children: r
81
+ children: s
54
82
  })
55
83
  ]
56
84
  });
57
85
  };
58
86
  export {
59
- u as default
87
+ f as default
60
88
  };
61
89
 
62
90
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/StatCard/index.tsx"],"sourcesContent":["import React from 'react';\nimport Card from '../Card';\n\nexport type StatCardProps = {\n /** 指标名称 */\n label: React.ReactNode;\n /** 指标值(数字或短文本) */\n value: React.ReactNode;\n /** 右上角图标 */\n icon?: React.ReactNode;\n /** 色调(影响图标底色与文字色) */\n tone?: 'primary' | 'success' | 'warning' | 'info' | 'error' | 'neutral';\n /** 值下方的小字说明 */\n hint?: React.ReactNode;\n /** 加载态:值显示为骨架 */\n loading?: boolean;\n className?: string;\n};\n\nconst TONE_CLASS: Record<NonNullable<StatCardProps['tone']>, { text: string; bg: string }> = {\n primary: { text: 'text-primary', bg: 'bg-primary/10' },\n success: { text: 'text-success', bg: 'bg-success/10' },\n warning: { text: 'text-warning', bg: 'bg-warning/10' },\n info: { text: 'text-info', bg: 'bg-info/10' },\n error: { text: 'text-error', bg: 'bg-error/10' },\n neutral: { text: 'text-base-content/70', bg: 'bg-base-content/5' },\n};\n\n/**\n * 统计卡片:仪表盘等场景的「标签 + 数值 + 图标」小卡。\n * 内部基于 Card 组件,默认紧凑内边距与小号字体。\n */\nconst StatCard = ({\n label,\n value,\n icon,\n tone = 'primary',\n hint,\n loading = false,\n className = '',\n}: StatCardProps) => {\n const t = TONE_CLASS[tone];\n\n return (\n <Card bordered glass={false} hover className={`bg-base-200 p-4 ${className}`.trim()}>\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"truncate text-xs font-medium text-base-content/60\">{label}</span>\n {icon && (\n <span className={`rounded-md p-1.5 ${t.bg} [&>svg]:h-4 [&>svg]:w-4 ${t.text}`.trim()}>\n {icon}\n </span>\n )}\n </div>\n {loading ? (\n <div className=\"h-7 w-14 animate-pulse rounded bg-base-content/10\" />\n ) : (\n <p className=\"text-2xl font-bold leading-none text-base-content\">{value}</p>\n )}\n {hint && <p className=\"mt-1.5 text-[11px] text-base-content/50\">{hint}</p>}\n </Card>\n );\n};\n\nexport default StatCard;\n"],"mappings":";;;AAmBA,IAAM,IAAuF;AAAA,EACzF,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,MAAM;AAAA,IAAE,MAAM;AAAA,IAAa,IAAI;AAAA,EAAa;AAAA,EAC5C,OAAO;AAAA,IAAE,MAAM;AAAA,IAAc,IAAI;AAAA,EAAc;AAAA,EAC/C,SAAS;AAAA,IAAE,MAAM;AAAA,IAAwB,IAAI;AAAA,EAAoB;AACrE,GAMM,IAAA,CAAY,EACd,OAAA,GACA,OAAA,GACA,MAAA,GACA,MAAA,IAAO,WACP,MAAA,GACA,SAAA,IAAU,IACV,WAAA,IAAY,GAAA,MACK;AACjB,QAAM,IAAI,EAAW,CAAA;AAErB,SACI,gBAAA,EAAC,GAAD;AAAA,IAAM,UAAA;AAAA,IAAS,OAAO;AAAA,IAAO,OAAA;AAAA,IAAM,WAAW,mBAAmB,CAAA,GAAY,KAAK;AAAA,cAAlF;AAAA,MACI,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,kBAAf,CACI,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,oBAAqD;AAAA,QAAY,CAAA,GAChF,KACG,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAW,oBAAoB,EAAE,EAAA,4BAA8B,EAAE,IAAA,GAAO,KAAK;AAAA,oBAC9E;AAAA,QACC,CAAA,CAET;AAAA;MACJ,IACG,gBAAA,EAAC,OAAD,EAAK,WAAU,oDAAqD,CAAA,IAEpE,gBAAA,EAAC,KAAD;AAAA,QAAG,WAAU;AAAA,kBAAqD;AAAA,MAAS,CAAA;AAAA,MAE9E,KAAQ,gBAAA,EAAC,KAAD;AAAA,QAAG,WAAU;AAAA,kBAA2C;AAAA,MAAQ,CAAA;AAAA,IACvE;AAAA;AAEd"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/StatCard/index.tsx"],"sourcesContent":["import React from 'react';\nimport Card from '../Card';\n\nexport type StatCardProps = {\n /** 指标名称 */\n label: React.ReactNode;\n /** 指标值(数字或短文本) */\n value: React.ReactNode;\n /** 右上角图标 */\n icon?: React.ReactNode;\n /** 图标位置:`top`(默认,图标在右上角)/ `left`(图标在左,文字居右) */\n iconPosition?: 'top' | 'left';\n /** 色调(影响图标底色与文字色) */\n tone?: 'primary' | 'success' | 'warning' | 'info' | 'error' | 'neutral';\n /** 值下方的小字说明 */\n hint?: React.ReactNode;\n /** 加载态:值显示为骨架 */\n loading?: boolean;\n className?: string;\n};\n\nconst TONE_CLASS: Record<NonNullable<StatCardProps['tone']>, { text: string; bg: string }> = {\n primary: { text: 'text-primary', bg: 'bg-primary/10' },\n success: { text: 'text-success', bg: 'bg-success/10' },\n warning: { text: 'text-warning', bg: 'bg-warning/10' },\n info: { text: 'text-info', bg: 'bg-info/10' },\n error: { text: 'text-error', bg: 'bg-error/10' },\n neutral: { text: 'text-base-content/70', bg: 'bg-base-content/5' },\n};\n\n/**\n * 统计卡片:仪表盘等场景的「标签 + 数值 + 图标」小卡。\n * 内部基于 Card 组件,默认紧凑内边距与小号字体。\n */\nconst StatCard = ({\n label,\n value,\n icon,\n iconPosition = 'top',\n tone = 'primary',\n hint,\n loading = false,\n className = '',\n}: StatCardProps) => {\n const t = TONE_CLASS[tone];\n\n // 图标在左、文字居右的水平布局\n if (iconPosition === 'left') {\n return (\n <Card bordered glass={false} hover className={`bg-base-200 p-4 ${className}`.trim()}>\n <div className=\"flex items-center gap-3\">\n {icon && (\n <span className={`flex shrink-0 items-center justify-center rounded-lg p-2.5 ${t.bg} [&>svg]:h-5 [&>svg]:w-5 ${t.text}`.trim()}>\n {icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-xs font-medium text-base-content/60\">{label}</span>\n {loading ? (\n <div className=\"mt-1 h-6 w-14 animate-pulse rounded bg-base-content/10\" />\n ) : (\n <p className=\"truncate text-xl font-bold leading-tight text-base-content\">{value}</p>\n )}\n {hint && <p className=\"mt-0.5 truncate text-[11px] text-base-content/50\">{hint}</p>}\n </div>\n </div>\n </Card>\n );\n }\n\n return (\n <Card bordered glass={false} hover className={`bg-base-200 p-4 ${className}`.trim()}>\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"truncate text-xs font-medium text-base-content/60\">{label}</span>\n {icon && (\n <span className={`rounded-md p-1.5 ${t.bg} [&>svg]:h-4 [&>svg]:w-4 ${t.text}`.trim()}>\n {icon}\n </span>\n )}\n </div>\n {loading ? (\n <div className=\"h-7 w-14 animate-pulse rounded bg-base-content/10\" />\n ) : (\n <p className=\"text-2xl font-bold leading-none text-base-content\">{value}</p>\n )}\n {hint && <p className=\"mt-1.5 text-[11px] text-base-content/50\">{hint}</p>}\n </Card>\n );\n};\n\nexport default StatCard;\n"],"mappings":";;;AAqBA,IAAM,IAAuF;AAAA,EACzF,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,SAAS;AAAA,IAAE,MAAM;AAAA,IAAgB,IAAI;AAAA,EAAgB;AAAA,EACrD,MAAM;AAAA,IAAE,MAAM;AAAA,IAAa,IAAI;AAAA,EAAa;AAAA,EAC5C,OAAO;AAAA,IAAE,MAAM;AAAA,IAAc,IAAI;AAAA,EAAc;AAAA,EAC/C,SAAS;AAAA,IAAE,MAAM;AAAA,IAAwB,IAAI;AAAA,EAAoB;AACrE,GAMM,IAAA,CAAY,EACd,OAAA,GACA,OAAA,GACA,MAAA,GACA,cAAA,IAAe,OACf,MAAA,IAAO,WACP,MAAA,GACA,SAAA,IAAU,IACV,WAAA,IAAY,GAAA,MACK;AACjB,QAAM,IAAI,EAAW,CAAA;AAGrB,SAAI,MAAiB,SAEb,gBAAA,EAAC,GAAD;AAAA,IAAM,UAAA;AAAA,IAAS,OAAO;AAAA,IAAO,OAAA;AAAA,IAAM,WAAW,mBAAmB,CAAA,GAAY,KAAK;AAAA,IAC9E,UAAA,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA,CACK,KACG,gBAAA,EAAC,QAAD;AAAA,QAAM,WAAW,8DAA8D,EAAE,EAAA,4BAA8B,EAAE,IAAA,GAAO,KAAK;AAAA,QACxH,UAAA;AAAA,MACC,CAAA,GAEV,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA;AAAA,UACI,gBAAA,EAAC,QAAD;AAAA,YAAM,WAAU;AAAA,YAA2D,UAAA;AAAA,UAAY,CAAA;AAAA,UACtF,IACG,gBAAA,EAAC,OAAD,EAAK,WAAU,yDAA0D,CAAA,IAEzE,gBAAA,EAAC,KAAD;AAAA,YAAG,WAAU;AAAA,YAA8D,UAAA;AAAA,UAAS,CAAA;AAAA,UAEvF,KAAQ,gBAAA,EAAC,KAAD;AAAA,YAAG,WAAU;AAAA,YAAoD,UAAA;AAAA,UAAQ,CAAA;AAAA,QACjF;AAAA,MACJ,CAAA,CAAA;AAAA;EACH,CAAA,IAKV,gBAAA,EAAC,GAAD;AAAA,IAAM,UAAA;AAAA,IAAS,OAAO;AAAA,IAAO,OAAA;AAAA,IAAM,WAAW,mBAAmB,CAAA,GAAY,KAAK;AAAA,IAAlF,UAAA;AAAA,MACI,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,QAAf,UAAA,CACI,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAU;AAAA,UAAqD,UAAA;AAAA,QAAY,CAAA,GAChF,KACG,gBAAA,EAAC,QAAD;AAAA,UAAM,WAAW,oBAAoB,EAAE,EAAA,4BAA8B,EAAE,IAAA,GAAO,KAAK;AAAA,UAC9E,UAAA;AAAA,QACC,CAAA,CAET;AAAA;MACJ,IACG,gBAAA,EAAC,OAAD,EAAK,WAAU,oDAAqD,CAAA,IAEpE,gBAAA,EAAC,KAAD;AAAA,QAAG,WAAU;AAAA,QAAqD,UAAA;AAAA,MAAS,CAAA;AAAA,MAE9E,KAAQ,gBAAA,EAAC,KAAD;AAAA,QAAG,WAAU;AAAA,QAA2C,UAAA;AAAA,MAAQ,CAAA;AAAA,IACvE;AAAA;AAEd"}
@@ -1,83 +1,74 @@
1
1
  import "react";
2
- import { jsx as e, jsxs as w } from "react/jsx-runtime";
3
- var u = ({ children: l, className: r = "", onClick: t, onMouseEnter: o, onMouseLeave: a }) => /* @__PURE__ */ e("table", {
4
- className: ["table", r].filter(Boolean).join(" "),
5
- onClick: t,
6
- onMouseEnter: o,
7
- onMouseLeave: a,
8
- children: l
9
- }), v = ({ children: l, className: r = "" }) => /* @__PURE__ */ e("thead", {
10
- className: ["table-header-group", r].filter(Boolean).join(" "),
11
- children: l
12
- }), b = ({ children: l, className: r = "" }) => /* @__PURE__ */ e("tbody", {
13
- className: ["table-row-group", r].filter(Boolean).join(" "),
14
- children: l
15
- }), f = ({ children: l, className: r = "", selected: t = !1, onClick: o, onDoubleClick: a, onMouseEnter: n, onMouseLeave: s, ...i }) => /* @__PURE__ */ e("tr", {
16
- className: [
2
+ import { jsx as e, jsxs as u } from "react/jsx-runtime";
3
+ var v = ({ children: l, className: a = "", onClick: o, onMouseEnter: s, onMouseLeave: r }) => {
4
+ const t = ["table", a].filter(Boolean).join(" ");
5
+ return /* @__PURE__ */ e("table", {
6
+ className: t,
7
+ onClick: o,
8
+ onMouseEnter: s,
9
+ onMouseLeave: r,
10
+ children: l
11
+ });
12
+ }, b = ({ children: l, className: a = "" }) => {
13
+ const o = ["table-header-group", a].filter(Boolean).join(" ");
14
+ return /* @__PURE__ */ e("thead", {
15
+ className: o,
16
+ children: l
17
+ });
18
+ }, f = ({ children: l, className: a = "" }) => {
19
+ const o = ["table-row-group", a].filter(Boolean).join(" ");
20
+ return /* @__PURE__ */ e("tbody", {
21
+ className: o,
22
+ children: l
23
+ });
24
+ }, p = ({ children: l, className: a = "", selected: o = !1, onClick: s, onDoubleClick: r, onMouseEnter: t, onMouseLeave: n, ...i }) => {
25
+ const c = [
17
26
  "table-row",
18
- t ? "bg-base-200" : "",
27
+ o ? "bg-base-200" : "",
19
28
  "hover:bg-base-100",
20
- r
21
- ].filter(Boolean).join(" "),
22
- onClick: o,
23
- onDoubleClick: a,
24
- onMouseEnter: n,
25
- onMouseLeave: s,
26
- ...i,
27
- children: l
28
- }), p = ({ children: l, className: r = "", onClick: t, colSpan: o, style: a, onDoubleClick: n, onMouseEnter: s, onMouseLeave: i }) => /* @__PURE__ */ e("td", {
29
- className: ["table-cell", r].filter(Boolean).join(" "),
30
- onClick: t,
31
- colSpan: o,
32
- style: a,
33
- onDoubleClick: n,
34
- onMouseEnter: s,
35
- onMouseLeave: i,
36
- children: l
37
- }), g = ({ children: l, className: r = "", onClick: t, sortable: o = !1, sortDirection: a = null, draggable: n, onDragStart: s, onDragOver: i, onDrop: c, onMouseEnter: m, onMouseLeave: h }) => /* @__PURE__ */ e("th", {
38
- className: [
29
+ a
30
+ ].filter(Boolean).join(" ");
31
+ return /* @__PURE__ */ e("tr", {
32
+ className: c,
33
+ onClick: s,
34
+ onDoubleClick: r,
35
+ onMouseEnter: t,
36
+ onMouseLeave: n,
37
+ ...i,
38
+ children: l
39
+ });
40
+ }, C = ({ children: l, className: a = "", onClick: o, colSpan: s, style: r, onDoubleClick: t, onMouseEnter: n, onMouseLeave: i }) => {
41
+ const c = ["table-cell", a].filter(Boolean).join(" ");
42
+ return /* @__PURE__ */ e("td", {
43
+ className: c,
44
+ onClick: o,
45
+ colSpan: s,
46
+ style: r,
47
+ onDoubleClick: t,
48
+ onMouseEnter: n,
49
+ onMouseLeave: i,
50
+ children: l
51
+ });
52
+ }, g = ({ children: l, className: a = "", onClick: o, sortable: s = !1, sortDirection: r = null, draggable: t, onDragStart: n, onDragOver: i, onDrop: c, onMouseEnter: m, onMouseLeave: h }) => {
53
+ const w = [
39
54
  "table-cell font-medium",
40
- o ? "cursor-pointer" : "",
41
- r
42
- ].filter(Boolean).join(" "),
43
- onClick: t,
44
- draggable: n,
45
- onDragStart: s,
46
- onDragOver: i,
47
- onDrop: c,
48
- onMouseEnter: m,
49
- onMouseLeave: h,
50
- children: /* @__PURE__ */ w("div", {
51
- className: "flex items-center gap-2",
52
- children: [l, o && /* @__PURE__ */ e("div", {
53
- className: "flex flex-col",
54
- children: a === "asc" ? /* @__PURE__ */ e("svg", {
55
- xmlns: "http://www.w3.org/2000/svg",
56
- className: "h-4 w-4",
57
- fill: "none",
58
- viewBox: "0 0 24 24",
59
- stroke: "currentColor",
60
- children: /* @__PURE__ */ e("path", {
61
- strokeLinecap: "round",
62
- strokeLinejoin: "round",
63
- strokeWidth: "2",
64
- d: "M5 15l7-7 7 7"
65
- })
66
- }) : a === "desc" ? /* @__PURE__ */ e("svg", {
67
- xmlns: "http://www.w3.org/2000/svg",
68
- className: "h-4 w-4",
69
- fill: "none",
70
- viewBox: "0 0 24 24",
71
- stroke: "currentColor",
72
- children: /* @__PURE__ */ e("path", {
73
- strokeLinecap: "round",
74
- strokeLinejoin: "round",
75
- strokeWidth: "2",
76
- d: "M19 9l-7 7-7-7"
77
- })
78
- }) : /* @__PURE__ */ e("div", {
79
- className: "h-4 w-4 opacity-30",
80
- children: /* @__PURE__ */ e("svg", {
55
+ s ? "cursor-pointer" : "",
56
+ a
57
+ ].filter(Boolean).join(" ");
58
+ return /* @__PURE__ */ e("th", {
59
+ className: w,
60
+ onClick: o,
61
+ draggable: t,
62
+ onDragStart: n,
63
+ onDragOver: i,
64
+ onDrop: c,
65
+ onMouseEnter: m,
66
+ onMouseLeave: h,
67
+ children: /* @__PURE__ */ u("div", {
68
+ className: "flex items-center gap-2",
69
+ children: [l, s && /* @__PURE__ */ e("div", {
70
+ className: "flex flex-col",
71
+ children: r === "asc" ? /* @__PURE__ */ e("svg", {
81
72
  xmlns: "http://www.w3.org/2000/svg",
82
73
  className: "h-4 w-4",
83
74
  fill: "none",
@@ -87,17 +78,44 @@ var u = ({ children: l, className: r = "", onClick: t, onMouseEnter: o, onMouseL
87
78
  strokeLinecap: "round",
88
79
  strokeLinejoin: "round",
89
80
  strokeWidth: "2",
90
- d: "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"
81
+ d: "M5 15l7-7 7 7"
82
+ })
83
+ }) : r === "desc" ? /* @__PURE__ */ e("svg", {
84
+ xmlns: "http://www.w3.org/2000/svg",
85
+ className: "h-4 w-4",
86
+ fill: "none",
87
+ viewBox: "0 0 24 24",
88
+ stroke: "currentColor",
89
+ children: /* @__PURE__ */ e("path", {
90
+ strokeLinecap: "round",
91
+ strokeLinejoin: "round",
92
+ strokeWidth: "2",
93
+ d: "M19 9l-7 7-7-7"
94
+ })
95
+ }) : /* @__PURE__ */ e("div", {
96
+ className: "h-4 w-4 opacity-30",
97
+ children: /* @__PURE__ */ e("svg", {
98
+ xmlns: "http://www.w3.org/2000/svg",
99
+ className: "h-4 w-4",
100
+ fill: "none",
101
+ viewBox: "0 0 24 24",
102
+ stroke: "currentColor",
103
+ children: /* @__PURE__ */ e("path", {
104
+ strokeLinecap: "round",
105
+ strokeLinejoin: "round",
106
+ strokeWidth: "2",
107
+ d: "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"
108
+ })
91
109
  })
92
110
  })
93
- })
94
- })]
95
- })
96
- }), d = u;
97
- d.Head = v;
98
- d.Body = b;
99
- d.Row = f;
100
- d.Cell = p;
111
+ })]
112
+ })
113
+ });
114
+ }, d = v;
115
+ d.Head = b;
116
+ d.Body = f;
117
+ d.Row = p;
118
+ d.Cell = C;
101
119
  d.HeaderCell = g;
102
120
  export {
103
121
  d as default
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\n\nexport type TableProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst Table = ({\n children,\n className = '',\n onClick,\n onMouseEnter,\n onMouseLeave,\n}: TableProps) => {\n const baseClass = 'table';\n \n const tableClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <table \n className={tableClasses}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </table>\n );\n};\n\n// Table.Head 组件\nexport type TableHeadProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst TableHead = ({\n children,\n className = '',\n}: TableHeadProps) => {\n const baseClass = 'table-header-group';\n \n const headClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <thead className={headClasses}>\n {children}\n </thead>\n );\n};\n\n// Table.Body 组件\nexport type TableBodyProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst TableBody = ({\n children,\n className = '',\n}: TableBodyProps) => {\n const baseClass = 'table-row-group';\n \n const bodyClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <tbody className={bodyClasses}>\n {children}\n </tbody>\n );\n};\n\n// Table.Row 组件\nexport type TableRowProps = {\n children: React.ReactNode;\n className?: string;\n selected?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & Omit<\n React.HTMLAttributes<HTMLTableRowElement>,\n 'className' | 'onClick' | 'onDoubleClick' | 'onMouseEnter' | 'onMouseLeave'\n>;\n\nconst TableRow = ({\n children,\n className = '',\n selected = false,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableRowProps) => {\n const baseClass = 'table-row';\n\n const rowClasses = [\n baseClass,\n selected ? 'bg-base-200' : '',\n 'hover:bg-base-100',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <tr \n className={rowClasses}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n {...rest}\n >\n {children}\n </tr>\n );\n};\n\n// Table.Cell 组件\nexport type TableCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n colSpan?: number;\n style?: React.CSSProperties;\n \n // 添加鼠标事件\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst TableCell = ({\n children,\n className = '',\n onClick,\n colSpan,\n style,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n}: TableCellProps) => {\n const baseClass = 'table-cell';\n \n const cellClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <td \n className={cellClasses}\n onClick={onClick}\n colSpan={colSpan}\n style={style}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </td>\n );\n};\n\n// Table.HeaderCell 组件\nexport type TableHeaderCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n sortable?: boolean;\n sortDirection?: 'asc' | 'desc' | null;\n \n // 拖拽相关属性\n draggable?: boolean;\n onDragStart?: (e: React.DragEvent) => void;\n onDragOver?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n \n // 鼠标事件\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst TableHeaderCell = ({\n children,\n className = '',\n onClick,\n sortable = false,\n sortDirection = null,\n \n // 拖拽相关属性\n draggable,\n onDragStart,\n onDragOver,\n onDrop,\n \n // 鼠标事件\n onMouseEnter,\n onMouseLeave,\n}: TableHeaderCellProps) => {\n const baseClass = 'table-cell font-medium';\n \n const headerCellClasses = [\n baseClass,\n sortable ? 'cursor-pointer' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <th \n className={headerCellClasses}\n onClick={onClick}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex items-center gap-2\">\n {children}\n {sortable && (\n <div className=\"flex flex-col\">\n {sortDirection === 'asc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n ) : sortDirection === 'desc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n ) : (\n <div className=\"h-4 w-4 opacity-30\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n </div>\n )}\n </div>\n )}\n </div>\n </th>\n );\n};\n\n// 扩展Table组件,添加子组件\ninterface TableCompound extends React.FC<TableProps> {\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Row: React.FC<TableRowProps>;\n Cell: React.FC<TableCellProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n}\n\nconst TableWithCompounds = Table as TableCompound;\nTableWithCompounds.Head = TableHead;\nTableWithCompounds.Body = TableBody;\nTableWithCompounds.Row = TableRow;\nTableWithCompounds.Cell = TableCell;\nTableWithCompounds.HeaderCell = TableHeaderCell;\n\nexport default TableWithCompounds; "],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Table/index.tsx"],"sourcesContent":["import React, { ReactElement } from 'react';\n\nexport type TableProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst Table = ({\n children,\n className = '',\n onClick,\n onMouseEnter,\n onMouseLeave,\n}: TableProps) => {\n const baseClass = 'table';\n \n const tableClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <table \n className={tableClasses}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </table>\n );\n};\n\n// Table.Head 组件\nexport type TableHeadProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst TableHead = ({\n children,\n className = '',\n}: TableHeadProps) => {\n const baseClass = 'table-header-group';\n \n const headClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <thead className={headClasses}>\n {children}\n </thead>\n );\n};\n\n// Table.Body 组件\nexport type TableBodyProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nconst TableBody = ({\n children,\n className = '',\n}: TableBodyProps) => {\n const baseClass = 'table-row-group';\n \n const bodyClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <tbody className={bodyClasses}>\n {children}\n </tbody>\n );\n};\n\n// Table.Row 组件\nexport type TableRowProps = {\n children: React.ReactNode;\n className?: string;\n selected?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n} & Omit<\n React.HTMLAttributes<HTMLTableRowElement>,\n 'className' | 'onClick' | 'onDoubleClick' | 'onMouseEnter' | 'onMouseLeave'\n>;\n\nconst TableRow = ({\n children,\n className = '',\n selected = false,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n}: TableRowProps) => {\n const baseClass = 'table-row';\n\n const rowClasses = [\n baseClass,\n selected ? 'bg-base-200' : '',\n 'hover:bg-base-100',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <tr \n className={rowClasses}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n {...rest}\n >\n {children}\n </tr>\n );\n};\n\n// Table.Cell 组件\nexport type TableCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n colSpan?: number;\n style?: React.CSSProperties;\n \n // 添加鼠标事件\n onDoubleClick?: (e: React.MouseEvent) => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst TableCell = ({\n children,\n className = '',\n onClick,\n colSpan,\n style,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n}: TableCellProps) => {\n const baseClass = 'table-cell';\n \n const cellClasses = [\n baseClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <td \n className={cellClasses}\n onClick={onClick}\n colSpan={colSpan}\n style={style}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </td>\n );\n};\n\n// Table.HeaderCell 组件\nexport type TableHeaderCellProps = {\n children: React.ReactNode;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n sortable?: boolean;\n sortDirection?: 'asc' | 'desc' | null;\n \n // 拖拽相关属性\n draggable?: boolean;\n onDragStart?: (e: React.DragEvent) => void;\n onDragOver?: (e: React.DragEvent) => void;\n onDrop?: (e: React.DragEvent) => void;\n \n // 鼠标事件\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n};\n\nconst TableHeaderCell = ({\n children,\n className = '',\n onClick,\n sortable = false,\n sortDirection = null,\n \n // 拖拽相关属性\n draggable,\n onDragStart,\n onDragOver,\n onDrop,\n \n // 鼠标事件\n onMouseEnter,\n onMouseLeave,\n}: TableHeaderCellProps) => {\n const baseClass = 'table-cell font-medium';\n \n const headerCellClasses = [\n baseClass,\n sortable ? 'cursor-pointer' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <th \n className={headerCellClasses}\n onClick={onClick}\n draggable={draggable}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex items-center gap-2\">\n {children}\n {sortable && (\n <div className=\"flex flex-col\">\n {sortDirection === 'asc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n ) : sortDirection === 'desc' ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n ) : (\n <div className=\"h-4 w-4 opacity-30\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n </div>\n )}\n </div>\n )}\n </div>\n </th>\n );\n};\n\n// 扩展Table组件,添加子组件\ninterface TableCompound extends React.FC<TableProps> {\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Row: React.FC<TableRowProps>;\n Cell: React.FC<TableCellProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n}\n\nconst TableWithCompounds = Table as TableCompound;\nTableWithCompounds.Head = TableHead;\nTableWithCompounds.Body = TableBody;\nTableWithCompounds.Row = TableRow;\nTableWithCompounds.Cell = TableCell;\nTableWithCompounds.HeaderCell = TableHeaderCell;\n\nexport default TableWithCompounds; "],"mappings":"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"}
@@ -2,6 +2,10 @@ import React from 'react';
2
2
  export type TabItem<T extends string = string> = {
3
3
  key: T;
4
4
  label: React.ReactNode;
5
+ /** 可选:标签前的图标 */
6
+ icon?: React.ReactNode;
7
+ /** 禁用该标签 */
8
+ disabled?: boolean;
5
9
  };
6
10
  export type TabsProps<T extends string = string> = {
7
11
  items: readonly TabItem<T>[];
@@ -9,13 +13,23 @@ export type TabsProps<T extends string = string> = {
9
13
  value: T;
10
14
  /** 切换回调 */
11
15
  onChange: (key: T) => void;
12
- /** 外观:box(daisyUI 5 的 tabs-box)/ border(tabs-border) */
13
- variant?: 'box' | 'border';
16
+ /**
17
+ * 外观(基于 daisyUI 5 的 tabs 修饰类):
18
+ * - `box` 实心分段(tabs-box)
19
+ * - `border` 底部下划线(tabs-border)
20
+ * - `lift` 抬升的文件夹页签(tabs-lift)
21
+ * - `pill` 胶囊/圆角实心(DishUI 扩展)
22
+ */
23
+ variant?: 'box' | 'border' | 'lift' | 'pill';
24
+ /** 尺寸:xs / sm / md / lg / xl */
25
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
26
+ /** 占满可用宽度,各标签平分 */
27
+ block?: boolean;
14
28
  className?: string;
15
29
  };
16
30
  /**
17
- * 标签页切换条。基于 daisyUI 5 的 `tabs` / `tabs-box` / `tabs-border`,
18
- * 字号统一使用小号文本,与管理后台紧凑风格一致。
31
+ * 标签页切换条。基于 daisyUI 5 的 `tabs` 系列修饰类,
32
+ * 支持 box / border / lift / pill 四种外观、五档尺寸与等宽(block)模式。
19
33
  */
20
- declare function Tabs<T extends string = string>({ items, value, onChange, variant, className, }: TabsProps<T>): React.JSX.Element;
34
+ declare function Tabs<T extends string = string>({ items, value, onChange, variant, size, block, className, }: TabsProps<T>): React.JSX.Element;
21
35
  export default Tabs;
@@ -1,25 +1,44 @@
1
1
  import "react";
2
- import { jsx as e } from "react/jsx-runtime";
3
- function c({ items: o, value: a, onChange: r, variant: b = "box", className: l = "" }) {
4
- return /* @__PURE__ */ e("div", {
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ var c = {
4
+ xs: "tabs-xs",
5
+ sm: "tabs-sm",
6
+ md: "tabs-md",
7
+ lg: "tabs-lg",
8
+ xl: "tabs-xl"
9
+ };
10
+ function p({ items: e, value: l, onChange: o, variant: a = "box", size: i = "sm", block: b = !1, className: d = "" }) {
11
+ const r = a === "border" ? "tabs-border" : a === "lift" ? "tabs-lift" : a === "pill" ? "tabs-box dishui-tabs-pill" : "tabs-box";
12
+ return /* @__PURE__ */ t("div", {
5
13
  role: "tablist",
6
14
  className: [
7
- "tabs h-auto min-h-0 text-xs",
8
- b === "box" ? "tabs-box" : "tabs-border",
9
- l
15
+ "tabs h-auto min-h-0",
16
+ c[i],
17
+ r,
18
+ b && "w-full",
19
+ d
10
20
  ].filter(Boolean).join(" "),
11
- children: o.map((t) => /* @__PURE__ */ e("button", {
21
+ children: e.map((s) => /* @__PURE__ */ n("button", {
12
22
  role: "tab",
13
23
  type: "button",
14
- "aria-selected": a === t.key,
15
- onClick: () => r(t.key),
16
- className: ["tab h-8 min-h-0 text-xs", a === t.key && "tab-active"].filter(Boolean).join(" "),
17
- children: t.label
18
- }, t.key))
24
+ "aria-selected": l === s.key,
25
+ disabled: s.disabled,
26
+ onClick: () => o(s.key),
27
+ className: [
28
+ "tab min-h-0 gap-1.5",
29
+ b && "flex-1",
30
+ l === s.key && "tab-active",
31
+ s.disabled && "tab-disabled"
32
+ ].filter(Boolean).join(" "),
33
+ children: [s.icon && /* @__PURE__ */ t("span", {
34
+ className: "[&>svg]:h-[1.1em] [&>svg]:w-[1.1em]",
35
+ children: s.icon
36
+ }), s.label]
37
+ }, s.key))
19
38
  });
20
39
  }
21
40
  export {
22
- c as default
41
+ p as default
23
42
  };
24
43
 
25
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["import React from 'react';\n\nexport type TabItem<T extends string = string> = {\n key: T;\n label: React.ReactNode;\n};\n\nexport type TabsProps<T extends string = string> = {\n items: readonly TabItem<T>[];\n /** 当前激活的 tab key */\n value: T;\n /** 切换回调 */\n onChange: (key: T) => void;\n /** 外观:box(daisyUI 5 的 tabs-box)/ bordertabs-border */\n variant?: 'box' | 'border';\n className?: string;\n};\n\n/**\n * 标签页切换条。基于 daisyUI 5 的 `tabs` / `tabs-box` / `tabs-border`,\n * 字号统一使用小号文本,与管理后台紧凑风格一致。\n */\nfunction Tabs<T extends string = string>({\n items,\n value,\n onChange,\n variant = 'box',\n className = '',\n}: TabsProps<T>) {\n const variantClass = variant === 'box' ? 'tabs-box' : 'tabs-border';\n\n return (\n <div\n role=\"tablist\"\n className={['tabs h-auto min-h-0 text-xs', variantClass, className].filter(Boolean).join(' ')}\n >\n {items.map((item) => (\n <button\n key={item.key}\n role=\"tab\"\n type=\"button\"\n aria-selected={value === item.key}\n onClick={() => onChange(item.key)}\n className={['tab h-8 min-h-0 text-xs', value === item.key && 'tab-active'].filter(Boolean).join(' ')}\n >\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n\nexport default Tabs;\n"],"mappings":";;AAsBA,SAAS,EAAgC,EACrC,OAAA,GACA,OAAA,GACA,UAAA,GACA,SAAA,IAAU,OACV,WAAA,IAAY,GAAA,GACC;AAGb,SACI,gBAAA,EAAC,OAAD;AAAA,IACI,MAAK;AAAA,IACL,WAAW;AAAA,MAAC;AAAA,MALC,MAAY,QAAQ,aAAa;AAAA,MAKW;AAAA,IAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,cAE3F,EAAM,IAAA,CAAK,MACR,gBAAA,EAAC,UAAD;AAAA,MAEI,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe,MAAU,EAAK;AAAA,MAC9B,SAAA,MAAe,EAAS,EAAK,GAAG;AAAA,MAChC,WAAW,CAAC,2BAA2B,MAAU,EAAK,OAAO,YAAY,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,gBAElG,EAAK;AAAA,IACF,GARC,EAAK,GAQN,CACX;AAAA,EACA,CAAA;AAEb"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["import React from 'react';\n\nexport type TabItem<T extends string = string> = {\n key: T;\n label: React.ReactNode;\n /** 可选:标签前的图标 */\n icon?: React.ReactNode;\n /** 禁用该标签 */\n disabled?: boolean;\n};\n\nexport type TabsProps<T extends string = string> = {\n items: readonly TabItem<T>[];\n /** 当前激活的 tab key */\n value: T;\n /** 切换回调 */\n onChange: (key: T) => void;\n /**\n * 外观(基于 daisyUI 5 的 tabs 修饰类):\n * - `box` 实心分段(tabs-box)\n * - `border` 底部下划线(tabs-border)\n * - `lift` 抬升的文件夹页签(tabs-lift)\n * - `pill` 胶囊/圆角实心(DishUI 扩展)\n */\n variant?: 'box' | 'border' | 'lift' | 'pill';\n /** 尺寸:xs / sm / md / lg / xl */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** 占满可用宽度,各标签平分 */\n block?: boolean;\n className?: string;\n};\n\nconst SIZE_CLASS: Record<NonNullable<TabsProps['size']>, string> = {\n xs: 'tabs-xs',\n sm: 'tabs-sm',\n md: 'tabs-md',\n lg: 'tabs-lg',\n xl: 'tabs-xl',\n};\n\n/**\n * 标签页切换条。基于 daisyUI 5 的 `tabs` 系列修饰类,\n * 支持 box / border / lift / pill 四种外观、五档尺寸与等宽(block)模式。\n */\nfunction Tabs<T extends string = string>({\n items,\n value,\n onChange,\n variant = 'box',\n size = 'sm',\n block = false,\n className = '',\n}: TabsProps<T>) {\n // pill 是 DishUI 扩展:在 tabs-box 基础上追加胶囊圆角类(见 components.css)\n const variantClass =\n variant === 'border' ? 'tabs-border'\n : variant === 'lift' ? 'tabs-lift'\n : variant === 'pill' ? 'tabs-box dishui-tabs-pill'\n : 'tabs-box';\n\n return (\n <div\n role=\"tablist\"\n className={[\n 'tabs h-auto min-h-0',\n SIZE_CLASS[size],\n variantClass,\n block && 'w-full',\n className,\n ].filter(Boolean).join(' ')}\n >\n {items.map((item) => (\n <button\n key={item.key}\n role=\"tab\"\n type=\"button\"\n aria-selected={value === item.key}\n disabled={item.disabled}\n onClick={() => onChange(item.key)}\n className={[\n 'tab min-h-0 gap-1.5',\n block && 'flex-1',\n value === item.key && 'tab-active',\n item.disabled && 'tab-disabled',\n ].filter(Boolean).join(' ')}\n >\n {item.icon && <span className=\"[&>svg]:h-[1.1em] [&>svg]:w-[1.1em]\">{item.icon}</span>}\n {item.label}\n </button>\n ))}\n </div>\n );\n}\n\nexport default Tabs;\n"],"mappings":";;AAgCA,IAAM,IAA6D;AAAA,EAC/D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACR;AAMA,SAAS,EAAgC,EACrC,OAAA,GACA,OAAA,GACA,UAAA,GACA,SAAA,IAAU,OACV,MAAA,IAAO,MACP,OAAA,IAAQ,IACR,WAAA,IAAY,GAAA,GACC;AAEb,QAAM,IACF,MAAY,WAAW,gBACrB,MAAY,SAAS,cACrB,MAAY,SAAS,8BACrB;AAEN,SACI,gBAAA,EAAC,OAAD;AAAA,IACI,MAAK;AAAA,IACL,WAAW;AAAA,MACP;AAAA,MACA,EAAW,CAAA;AAAA,MACX;AAAA,MACA,KAAS;AAAA,MACT;AAAA,IACJ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAEzB,UAAA,EAAM,IAAA,CAAK,MACR,gBAAA,EAAC,UAAD;AAAA,MAEI,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe,MAAU,EAAK;AAAA,MAC9B,UAAU,EAAK;AAAA,MACf,SAAA,MAAe,EAAS,EAAK,GAAG;AAAA,MAChC,WAAW;AAAA,QACP;AAAA,QACA,KAAS;AAAA,QACT,MAAU,EAAK,OAAO;AAAA,QACtB,EAAK,YAAY;AAAA,MACrB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAZ9B,UAAA,CAcK,EAAK,QAAQ,gBAAA,EAAC,QAAD;AAAA,QAAM,WAAU;AAAA,QAAuC,UAAA,EAAK;AAAA,MAAW,CAAA,GACpF,EAAK,KACF;AAAA,IAfC,GAAA,EAAK,GAeN,CACX;AAAA,EACA,CAAA;AAEb"}