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":"ListView.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/ListView.tsx"],"sourcesContent":["import React from 'react';\nimport { ListViewProps, SortField } from './types';\nimport { FileIcon } from './FileIcon';\nimport Button from '../../Button';\nimport { formatFileSize } from '../../FileUploader/DropZone';\n\nconst defaultLabels = {\n name: 'Name',\n size: 'Size',\n modified: 'Modified',\n type: 'Type',\n delete: 'Delete',\n rename: 'Rename',\n emptyFolder: 'This folder is empty',\n noResults: 'No files match your search',\n};\n\n// --- Icons ---\n\nconst SortAscIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n </svg>\n);\n\nconst SortDescIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst SortNeutralIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline opacity-30\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n);\n\nconst TrashIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n);\n\nconst EditIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\n </svg>\n);\n\ntype ColumnDef = {\n field: SortField;\n labelKey: keyof typeof defaultLabels;\n className: string;\n};\n\nconst columns: ColumnDef[] = [\n { field: 'name', labelKey: 'name', className: 'flex-1 min-w-0' },\n { field: 'size', labelKey: 'size', className: 'w-20 text-right hidden sm:block' },\n { field: 'modifiedAt', labelKey: 'modified', className: 'w-32 hidden md:block' },\n { field: 'type', labelKey: 'type', className: 'w-16 hidden lg:block' },\n];\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return '-';\n try {\n const d = new Date(dateStr);\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n } catch {\n return dateStr;\n }\n}\n\nfunction getExtension(name: string): string {\n const parts = name.split('.');\n return parts.length > 1 ? parts.pop()!.toUpperCase() : '-';\n}\n\nexport const ListView: React.FC<ListViewProps> = ({\n entries,\n sortConfig,\n onSortChange,\n onEntryClick,\n onEntryDoubleClick,\n onDelete,\n onRename,\n enableDelete = false,\n enableRename = false,\n labels: userLabels,\n className = '',\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n\n const handleHeaderClick = (field: SortField) => {\n if (sortConfig.field === field) {\n onSortChange({ field, direction: sortConfig.direction === 'asc' ? 'desc' : 'asc' });\n } else {\n onSortChange({ field, direction: 'asc' });\n }\n };\n\n const sortIcon = (field: SortField) => {\n if (sortConfig.field !== field) return <SortNeutralIcon />;\n return sortConfig.direction === 'asc' ? <SortAscIcon /> : <SortDescIcon />;\n };\n\n if (entries.length === 0) {\n return (\n <div className={`flex items-center justify-center py-16 opacity-50 text-sm ${className}`}>\n {labels.emptyFolder}\n </div>\n );\n }\n\n return (\n <div className={`overflow-x-auto ${className}`}>\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-base-300 text-xs font-medium opacity-60 select-none\">\n {/* Icon spacer */}\n <div className=\"w-6 flex-shrink-0\" />\n {columns.map(col => (\n <div\n key={col.field}\n className={`${col.className} cursor-pointer hover:opacity-100 transition-opacity flex items-center gap-1`}\n onClick={() => handleHeaderClick(col.field)}\n >\n {labels[col.labelKey]}\n {sortIcon(col.field)}\n </div>\n ))}\n {/* Actions spacer */}\n {(enableDelete || enableRename) && <div className=\"w-16 flex-shrink-0\" />}\n </div>\n\n {/* Rows */}\n <div className=\"divide-y divide-base-200\">\n {entries.map(entry => (\n <div\n key={entry.path}\n className=\"flex items-center gap-2 px-3 py-2 hover:bg-base-200/60 cursor-pointer transition-colors group min-h-[44px]\"\n onClick={() => onEntryClick(entry)}\n onDoubleClick={() => onEntryDoubleClick(entry)}\n >\n {/* Icon */}\n <div className=\"w-6 flex-shrink-0 flex items-center justify-center\">\n <FileIcon entry={entry} size=\"sm\" />\n </div>\n\n {/* Name */}\n <div className=\"flex-1 min-w-0\">\n <span className={`text-sm truncate block ${entry.type === 'folder' ? 'font-medium' : ''}`}>\n {entry.name}\n </span>\n </div>\n\n {/* Size */}\n <div className=\"w-20 text-right hidden sm:block\">\n <span className=\"text-xs opacity-60\">\n {entry.type === 'file' && entry.size != null ? formatFileSize(entry.size) : '-'}\n </span>\n </div>\n\n {/* Modified */}\n <div className=\"w-32 hidden md:block\">\n <span className=\"text-xs opacity-60\">\n {formatDate(entry.modifiedAt)}\n </span>\n </div>\n\n {/* Type */}\n <div className=\"w-16 hidden lg:block\">\n <span className=\"text-xs opacity-50\">\n {entry.type === 'folder' ? 'Folder' : getExtension(entry.name)}\n </span>\n </div>\n\n {/* Actions */}\n {(enableDelete || enableRename) && (\n <div className=\"w-16 flex-shrink-0 flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n {enableRename && onRename && (\n <span onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n circle\n onClick={() => onRename(entry)}\n >\n <EditIcon />\n </Button>\n </span>\n )}\n {enableDelete && onDelete && (\n <span onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n circle\n className=\"text-error\"\n onClick={() => onDelete(entry)}\n >\n <TrashIcon />\n </Button>\n </span>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;AAMA,IAAM,IAAgB;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AACf,GAIM,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAiB,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAClI,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAiB,CAAA;AACrE,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAiB,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAClI,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAkB,CAAA;AACtE,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAA4B,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC7I,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAoD,CAAA;AACxG,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAc,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC/H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAgI,CAAA;AACpL,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAc,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC/H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAA0H,CAAA;AAC9K,CAAA,GASH,IAAuB;AAAA,EACzB;AAAA,IAAE,OAAO;AAAA,IAAQ,UAAU;AAAA,IAAQ,WAAW;AAAA,EAAiB;AAAA,EAC/D;AAAA,IAAE,OAAO;AAAA,IAAQ,UAAU;AAAA,IAAQ,WAAW;AAAA,EAAkC;AAAA,EAChF;AAAA,IAAE,OAAO;AAAA,IAAc,UAAU;AAAA,IAAY,WAAW;AAAA,EAAuB;AAAA,EAC/E;AAAA,IAAE,OAAO;AAAA,IAAQ,UAAU;AAAA,IAAQ,WAAW;AAAA,EAAuB;AACzE;AAEA,SAAS,EAAW,GAA0B;AAC1C,MAAI,CAAC,EAAS,QAAO;AACrB,MAAI;AAEA,WAAO,IADO,KAAK,CACZ,EAAE,mBAAmB,QAAW;AAAA,MAAE,OAAO;AAAA,MAAS,KAAK;AAAA,MAAW,MAAM;AAAA,IAAU,CAAC;AAAA,EAC9F,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,EAAa,GAAsB;AACxC,QAAM,IAAQ,EAAK,MAAM,GAAG;AAC5B,SAAO,EAAM,SAAS,IAAI,EAAM,IAAI,EAAG,YAAY,IAAI;AAC3D;AAEA,IAAa,IAAA,CAAqC,EAC9C,SAAA,GACA,YAAA,GACA,cAAA,GACA,cAAA,GACA,oBAAA,GACA,UAAA,GACA,UAAA,GACA,cAAA,IAAe,IACf,cAAA,IAAe,IACf,QAAQ,GACR,WAAA,IAAY,GAAA,MACV;AACF,QAAM,IAAS;AAAA,IAAE,GAAG;AAAA,IAAe,GAAG;AAAA,EAAW,GAE3C,IAAA,CAAqB,MAAqB;AAC5C,IAAI,EAAW,UAAU,IACrB,EAAa;AAAA,MAAE,OAAA;AAAA,MAAO,WAAW,EAAW,cAAc,QAAQ,SAAS;AAAA,IAAM,CAAC,IAElF,EAAa;AAAA,MAAE,OAAA;AAAA,MAAO,WAAW;AAAA,IAAM,CAAC;AAAA,EAEhD,GAEM,IAAA,CAAY,MACV,EAAW,UAAU,IAAc,gBAAA,EAAC,GAAD,CAAkB,CAAA,IAClD,EAAW,cAAc,QAAQ,gBAAA,EAAC,GAAD,CAAc,CAAA,IAAI,gBAAA,EAAC,GAAD,CAAe,CAAA;AAG7E,SAAI,EAAQ,WAAW,IAEf,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,6DAA6D,CAAA;AAAA,cACxE,EAAO;AAAA,EACP,CAAA,IAKT,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,mBAAmB,CAAA;AAAA,cAAnC,CAEI,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBAAf;AAAA,QAEI,gBAAA,EAAC,OAAD,EAAK,WAAU,oBAAqB,CAAA;AAAA,QACnC,EAAQ,IAAA,CAAI,MACT,gBAAA,EAAC,OAAD;AAAA,UAEI,WAAW,GAAG,EAAI,SAAA;AAAA,UAClB,SAAA,MAAe,EAAkB,EAAI,KAAK;AAAA,oBAH9C,CAKK,EAAO,EAAI,QAAA,GACX,EAAS,EAAI,KAAK,CAClB;AAAA,WANI,EAAI,KAMR,CACR;AAAA,SAEC,KAAgB,MAAiB,gBAAA,EAAC,OAAD,EAAK,WAAU,qBAAsB,CAAA;AAAA,MACvE;AAAA,QAGL,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,gBACV,EAAQ,IAAA,CAAI,MACT,gBAAA,EAAC,OAAD;AAAA,QAEI,WAAU;AAAA,QACV,SAAA,MAAe,EAAa,CAAK;AAAA,QACjC,eAAA,MAAqB,EAAmB,CAAK;AAAA,kBAJjD;AAAA,UAOI,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBACX,gBAAA,EAAC,GAAD;AAAA,cAAiB,OAAA;AAAA,cAAO,MAAK;AAAA,YAAM,CAAA;AAAA,UAClC,CAAA;AAAA,UAGL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBACX,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAW,0BAA0B,EAAM,SAAS,WAAW,gBAAgB,EAAA;AAAA,wBAChF,EAAM;AAAA,YACL,CAAA;AAAA,UACL,CAAA;AAAA,UAGL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBACX,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAU;AAAA,wBACX,EAAM,SAAS,UAAU,EAAM,QAAQ,OAAO,EAAe,EAAM,IAAI,IAAI;AAAA,YAC1E,CAAA;AAAA,UACL,CAAA;AAAA,UAGL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBACX,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAU;AAAA,wBACX,EAAW,EAAM,UAAU;AAAA,YAC1B,CAAA;AAAA,UACL,CAAA;AAAA,UAGL,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBACX,gBAAA,EAAC,QAAD;AAAA,cAAM,WAAU;AAAA,wBACX,EAAM,SAAS,WAAW,WAAW,EAAa,EAAM,IAAI;AAAA,YAC3D,CAAA;AAAA,UACL,CAAA;AAAA,WAGH,KAAgB,MACd,gBAAA,EAAC,OAAD;AAAA,YAAK,WAAU;AAAA,sBAAf,CACK,KAAgB,KACb,gBAAA,EAAC,QAAD;AAAA,cAAM,SAAA,CAAU,MAAM,EAAE,gBAAgB;AAAA,wBACpC,gBAAA,EAAC,GAAD;AAAA,gBACI,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAA;AAAA,gBACA,SAAA,MAAe,EAAS,CAAK;AAAA,0BAE7B,gBAAA,EAAC,GAAD,CAAW,CAAA;AAAA,cACP,CAAA;AAAA,YACN,CAAA,GAET,KAAgB,KACb,gBAAA,EAAC,QAAD;AAAA,cAAM,SAAA,CAAU,MAAM,EAAE,gBAAgB;AAAA,wBACpC,gBAAA,EAAC,GAAD;AAAA,gBACI,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,QAAA;AAAA,gBACA,WAAU;AAAA,gBACV,SAAA,MAAe,EAAS,CAAK;AAAA,0BAE7B,gBAAA,EAAC,GAAD,CAAY,CAAA;AAAA,cACR,CAAA;AAAA,YACN,CAAA,CAET;AAAA;QAER;AAAA,SApEI,EAAM,IAoEV,CACR;AAAA,IACA,CAAA,CACJ;AAAA;AAEb"}
1
+ {"version":3,"file":"ListView.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/ListView.tsx"],"sourcesContent":["import React from 'react';\nimport { ListViewProps, SortField } from './types';\nimport { FileIcon } from './FileIcon';\nimport Button from '../../Button';\nimport { formatFileSize } from '../../FileUploader/DropZone';\n\nconst defaultLabels = {\n name: 'Name',\n size: 'Size',\n modified: 'Modified',\n type: 'Type',\n delete: 'Delete',\n rename: 'Rename',\n emptyFolder: 'This folder is empty',\n noResults: 'No files match your search',\n};\n\n// --- Icons ---\n\nconst SortAscIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n </svg>\n);\n\nconst SortDescIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst SortNeutralIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3 inline opacity-30\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\" />\n </svg>\n);\n\nconst TrashIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n);\n\nconst EditIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" />\n </svg>\n);\n\ntype ColumnDef = {\n field: SortField;\n labelKey: keyof typeof defaultLabels;\n className: string;\n};\n\nconst columns: ColumnDef[] = [\n { field: 'name', labelKey: 'name', className: 'flex-1 min-w-0' },\n { field: 'size', labelKey: 'size', className: 'w-20 text-right hidden sm:block' },\n { field: 'modifiedAt', labelKey: 'modified', className: 'w-32 hidden md:block' },\n { field: 'type', labelKey: 'type', className: 'w-16 hidden lg:block' },\n];\n\nfunction formatDate(dateStr?: string): string {\n if (!dateStr) return '-';\n try {\n const d = new Date(dateStr);\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });\n } catch {\n return dateStr;\n }\n}\n\nfunction getExtension(name: string): string {\n const parts = name.split('.');\n return parts.length > 1 ? parts.pop()!.toUpperCase() : '-';\n}\n\nexport const ListView: React.FC<ListViewProps> = ({\n entries,\n sortConfig,\n onSortChange,\n onEntryClick,\n onEntryDoubleClick,\n onDelete,\n onRename,\n enableDelete = false,\n enableRename = false,\n labels: userLabels,\n className = '',\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n\n const handleHeaderClick = (field: SortField) => {\n if (sortConfig.field === field) {\n onSortChange({ field, direction: sortConfig.direction === 'asc' ? 'desc' : 'asc' });\n } else {\n onSortChange({ field, direction: 'asc' });\n }\n };\n\n const sortIcon = (field: SortField) => {\n if (sortConfig.field !== field) return <SortNeutralIcon />;\n return sortConfig.direction === 'asc' ? <SortAscIcon /> : <SortDescIcon />;\n };\n\n if (entries.length === 0) {\n return (\n <div className={`flex items-center justify-center py-16 opacity-50 text-sm ${className}`}>\n {labels.emptyFolder}\n </div>\n );\n }\n\n return (\n <div className={`overflow-x-auto ${className}`}>\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-base-300 text-xs font-medium opacity-60 select-none\">\n {/* Icon spacer */}\n <div className=\"w-6 flex-shrink-0\" />\n {columns.map(col => (\n <div\n key={col.field}\n className={`${col.className} cursor-pointer hover:opacity-100 transition-opacity flex items-center gap-1`}\n onClick={() => handleHeaderClick(col.field)}\n >\n {labels[col.labelKey]}\n {sortIcon(col.field)}\n </div>\n ))}\n {/* Actions spacer */}\n {(enableDelete || enableRename) && <div className=\"w-16 flex-shrink-0\" />}\n </div>\n\n {/* Rows */}\n <div className=\"divide-y divide-base-200\">\n {entries.map(entry => (\n <div\n key={entry.path}\n className=\"flex items-center gap-2 px-3 py-2 hover:bg-base-200/60 cursor-pointer transition-colors group min-h-[44px]\"\n onClick={() => onEntryClick(entry)}\n onDoubleClick={() => onEntryDoubleClick(entry)}\n >\n {/* Icon */}\n <div className=\"w-6 flex-shrink-0 flex items-center justify-center\">\n <FileIcon entry={entry} size=\"sm\" />\n </div>\n\n {/* Name */}\n <div className=\"flex-1 min-w-0\">\n <span className={`text-sm truncate block ${entry.type === 'folder' ? 'font-medium' : ''}`}>\n {entry.name}\n </span>\n </div>\n\n {/* Size */}\n <div className=\"w-20 text-right hidden sm:block\">\n <span className=\"text-xs opacity-60\">\n {entry.type === 'file' && entry.size != null ? formatFileSize(entry.size) : '-'}\n </span>\n </div>\n\n {/* Modified */}\n <div className=\"w-32 hidden md:block\">\n <span className=\"text-xs opacity-60\">\n {formatDate(entry.modifiedAt)}\n </span>\n </div>\n\n {/* Type */}\n <div className=\"w-16 hidden lg:block\">\n <span className=\"text-xs opacity-50\">\n {entry.type === 'folder' ? 'Folder' : getExtension(entry.name)}\n </span>\n </div>\n\n {/* Actions */}\n {(enableDelete || enableRename) && (\n <div className=\"w-16 flex-shrink-0 flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n {enableRename && onRename && (\n <span onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n circle\n onClick={() => onRename(entry)}\n >\n <EditIcon />\n </Button>\n </span>\n )}\n {enableDelete && onDelete && (\n <span onClick={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n circle\n className=\"text-error\"\n onClick={() => onDelete(entry)}\n >\n <TrashIcon />\n </Button>\n </span>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Toolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { ToolbarProps, SortField } from './types';\nimport Button from '../../Button';\nimport Input from '../../Input';\n\nconst defaultLabels = {\n searchPlaceholder: 'Search files...',\n listView: 'List',\n gridView: 'Grid',\n newFolder: 'New Folder',\n newFile: 'New File',\n sortBy: 'Sort',\n name: 'Name',\n size: 'Size',\n modified: 'Modified',\n type: 'Type',\n};\n\n// --- Icons ---\n\nconst ListIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 10h16M4 14h16M4 18h16\" />\n </svg>\n);\n\nconst GridIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z\" />\n </svg>\n);\n\nconst FolderPlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n </svg>\n);\n\nconst FilePlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nconst UploadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 opacity-50\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst SortAscIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n </svg>\n);\n\nconst SortDescIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst sortFields: SortField[] = ['name', 'size', 'modifiedAt', 'type'];\n\nconst sortFieldLabelMap: Record<SortField, keyof typeof defaultLabels> = {\n name: 'name',\n size: 'size',\n modifiedAt: 'modified',\n type: 'type',\n};\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n searchQuery,\n onSearchChange,\n viewMode,\n onViewModeChange,\n sortConfig,\n onSortChange,\n enableCreate = false,\n hasCreateFolder = false,\n hasCreateFile = false,\n onCreateFolder,\n onCreateFile,\n enableUpload = false,\n onUploadFiles,\n labels: userLabels,\n className = '',\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n\n const handleSortFieldClick = (field: SortField) => {\n if (sortConfig.field === field) {\n onSortChange({ field, direction: sortConfig.direction === 'asc' ? 'desc' : 'asc' });\n } else {\n onSortChange({ field, direction: 'asc' });\n }\n };\n\n return (\n <div className={`flex flex-wrap items-center gap-2 px-2 py-2 border-b border-base-300 ${className}`}>\n {/* Search */}\n <div className=\"flex-1 min-w-[120px] max-w-xs\">\n <Input\n size=\"sm\"\n placeholder={labels.searchPlaceholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n leftSection={<SearchIcon />}\n />\n </div>\n\n {/* Sort buttons */}\n <div className=\"flex items-center gap-0.5\">\n {sortFields.map(field => (\n <button\n key={field}\n className={`btn btn-xs ${sortConfig.field === field ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => handleSortFieldClick(field)}\n >\n {labels[sortFieldLabelMap[field]]}\n {sortConfig.field === field && (\n <span className=\"ml-0.5\">\n {sortConfig.direction === 'asc' ? <SortAscIcon /> : <SortDescIcon />}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* View mode toggle */}\n <Button.Group>\n <Button\n size=\"xs\"\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\n onClick={() => onViewModeChange('list')}\n square\n >\n <ListIcon />\n </Button>\n <Button\n size=\"xs\"\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\n onClick={() => onViewModeChange('grid')}\n square\n >\n <GridIcon />\n </Button>\n </Button.Group>\n\n {/* Create actions */}\n {enableCreate && (\n <div className=\"flex gap-1\">\n {hasCreateFolder && (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n leftSection={<FolderPlusIcon />}\n onClick={onCreateFolder}\n >\n {labels.newFolder}\n </Button>\n )}\n {hasCreateFile && (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n leftSection={<FilePlusIcon />}\n onClick={onCreateFile}\n >\n {labels.newFile}\n </Button>\n )}\n </div>\n )}\n\n {/* Upload action */}\n {enableUpload && (\n <Button\n size=\"xs\"\n variant=\"primary\"\n outline\n leftSection={<UploadIcon />}\n onClick={onUploadFiles}\n >\n {(labels as any).uploadFiles || 'Upload'}\n </Button>\n )}\n </div>\n );\n};\n"],"mappings":";;;;AAKA,IAAM,IAAgB;AAAA,EAClB,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACV,GAIM,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAmC,CAAA;AACvF,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAwQ,CAAA;AAC5T,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAwF,CAAA;AAC5I,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAwH,CAAA;AAC5K,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAyF,CAAA;AAC7I,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAqB,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YACtI,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAA+C,CAAA;AACnG,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAiB,CAAA;AACrE,CAAA,GAGH,IAAA,MACF,gBAAA,EAAC,OAAD;AAAA,EAAK,OAAM;AAAA,EAA6B,WAAU;AAAA,EAAU,MAAK;AAAA,EAAO,SAAQ;AAAA,EAAY,QAAO;AAAA,EAAe,aAAa;AAAA,YAC3H,gBAAA,EAAC,QAAD;AAAA,IAAM,eAAc;AAAA,IAAQ,gBAAe;AAAA,IAAQ,GAAE;AAAA,EAAkB,CAAA;AACtE,CAAA,GAGH,IAA0B;AAAA,EAAC;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAc;AAAM,GAE/D,IAAmE;AAAA,EACrE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,MAAM;AACV,GAEa,IAAA,CAAmC,EAC5C,aAAA,GACA,gBAAA,GACA,UAAA,GACA,kBAAA,GACA,YAAA,GACA,cAAA,GACA,cAAA,IAAe,IACf,iBAAA,IAAkB,IAClB,eAAA,IAAgB,IAChB,gBAAA,GACA,cAAA,GACA,cAAA,IAAe,IACf,eAAA,GACA,QAAQ,GACR,WAAA,IAAY,GAAA,MACV;AACF,QAAM,IAAS;AAAA,IAAE,GAAG;AAAA,IAAe,GAAG;AAAA,EAAW,GAE3C,IAAA,CAAwB,MAAqB;AAC/C,IAAI,EAAW,UAAU,IACrB,EAAa;AAAA,MAAE,OAAA;AAAA,MAAO,WAAW,EAAW,cAAc,QAAQ,SAAS;AAAA,IAAM,CAAC,IAElF,EAAa;AAAA,MAAE,OAAA;AAAA,MAAO,WAAW;AAAA,IAAM,CAAC;AAAA,EAEhD;AAEA,SACI,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAW,wEAAwE,CAAA;AAAA,cAAxF;AAAA,MAEI,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,kBACX,gBAAA,EAAC,GAAD;AAAA,UACI,MAAK;AAAA,UACL,aAAa,EAAO;AAAA,UACpB,OAAO;AAAA,UACP,UAAA,CAAW,MAAM,EAAe,EAAE,OAAO,KAAK;AAAA,UAC9C,aAAa,gBAAA,EAAC,GAAD,CAAa,CAAA;AAAA,QAC7B,CAAA;AAAA,MACA,CAAA;AAAA,MAGL,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,kBACV,EAAW,IAAA,CAAI,MACZ,gBAAA,EAAC,UAAD;AAAA,UAEI,WAAW,cAAc,EAAW,UAAU,IAAQ,gBAAgB,WAAA;AAAA,UACtE,SAAA,MAAe,EAAqB,CAAK;AAAA,oBAH7C,CAKK,EAAO,EAAkB,CAAA,CAAA,GACzB,EAAW,UAAU,KAClB,gBAAA,EAAC,QAAD;AAAA,YAAM,WAAU;AAAA,sBACX,EAAW,cAAc,QAAQ,gBAAA,EAAC,GAAD,CAAc,CAAA,IAAI,gBAAA,EAAC,GAAD,CAAe,CAAA;AAAA,UACjE,CAAA,CAEN;AAAA,WAVC,CAUD,CACX;AAAA,MACA,CAAA;AAAA,MAGL,gBAAA,EAAC,EAAO,OAAR,EAAA,UAAA,CACI,gBAAA,EAAC,GAAD;AAAA,QACI,MAAK;AAAA,QACL,SAAS,MAAa,SAAS,YAAY;AAAA,QAC3C,SAAA,MAAe,EAAiB,MAAM;AAAA,QACtC,QAAA;AAAA,kBAEA,gBAAA,EAAC,GAAD,CAAW,CAAA;AAAA,MACP,CAAA,GACR,gBAAA,EAAC,GAAD;AAAA,QACI,MAAK;AAAA,QACL,SAAS,MAAa,SAAS,YAAY;AAAA,QAC3C,SAAA,MAAe,EAAiB,MAAM;AAAA,QACtC,QAAA;AAAA,kBAEA,gBAAA,EAAC,GAAD,CAAW,CAAA;AAAA,MACP,CAAA,CACE,EAAA,CAAA;AAAA,MAGb,KACG,gBAAA,EAAC,OAAD;AAAA,QAAK,WAAU;AAAA,kBAAf,CACK,KACG,gBAAA,EAAC,GAAD;AAAA,UACI,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,aAAa,gBAAA,EAAC,GAAD,CAAiB,CAAA;AAAA,UAC9B,SAAS;AAAA,oBAER,EAAO;AAAA,QACJ,CAAA,GAEX,KACG,gBAAA,EAAC,GAAD;AAAA,UACI,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,aAAa,gBAAA,EAAC,GAAD,CAAe,CAAA;AAAA,UAC5B,SAAS;AAAA,oBAER,EAAO;AAAA,QACJ,CAAA,CAEX;AAAA;MAIR,KACG,gBAAA,EAAC,GAAD;AAAA,QACI,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAA;AAAA,QACA,aAAa,gBAAA,EAAC,GAAD,CAAa,CAAA;AAAA,QAC1B,SAAS;AAAA,kBAEP,EAAe,eAAe;AAAA,MAC5B,CAAA;AAAA,IAEX;AAAA;AAEb"}
1
+ {"version":3,"file":"Toolbar.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Toolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { ToolbarProps, SortField } from './types';\nimport Button from '../../Button';\nimport Input from '../../Input';\n\nconst defaultLabels = {\n searchPlaceholder: 'Search files...',\n listView: 'List',\n gridView: 'Grid',\n newFolder: 'New Folder',\n newFile: 'New File',\n sortBy: 'Sort',\n name: 'Name',\n size: 'Size',\n modified: 'Modified',\n type: 'Type',\n};\n\n// --- Icons ---\n\nconst ListIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 10h16M4 14h16M4 18h16\" />\n </svg>\n);\n\nconst GridIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z\" />\n </svg>\n);\n\nconst FolderPlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n </svg>\n);\n\nconst FilePlusIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n);\n\nconst UploadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n);\n\nconst SearchIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 opacity-50\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst SortAscIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 15l7-7 7 7\" />\n </svg>\n);\n\nconst SortDescIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst sortFields: SortField[] = ['name', 'size', 'modifiedAt', 'type'];\n\nconst sortFieldLabelMap: Record<SortField, keyof typeof defaultLabels> = {\n name: 'name',\n size: 'size',\n modifiedAt: 'modified',\n type: 'type',\n};\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n searchQuery,\n onSearchChange,\n viewMode,\n onViewModeChange,\n sortConfig,\n onSortChange,\n enableCreate = false,\n hasCreateFolder = false,\n hasCreateFile = false,\n onCreateFolder,\n onCreateFile,\n enableUpload = false,\n onUploadFiles,\n labels: userLabels,\n className = '',\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n\n const handleSortFieldClick = (field: SortField) => {\n if (sortConfig.field === field) {\n onSortChange({ field, direction: sortConfig.direction === 'asc' ? 'desc' : 'asc' });\n } else {\n onSortChange({ field, direction: 'asc' });\n }\n };\n\n return (\n <div className={`flex flex-wrap items-center gap-2 px-2 py-2 border-b border-base-300 ${className}`}>\n {/* Search */}\n <div className=\"flex-1 min-w-[120px] max-w-xs\">\n <Input\n size=\"sm\"\n placeholder={labels.searchPlaceholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n leftSection={<SearchIcon />}\n />\n </div>\n\n {/* Sort buttons */}\n <div className=\"flex items-center gap-0.5\">\n {sortFields.map(field => (\n <button\n key={field}\n className={`btn btn-xs ${sortConfig.field === field ? 'btn-primary' : 'btn-ghost'}`}\n onClick={() => handleSortFieldClick(field)}\n >\n {labels[sortFieldLabelMap[field]]}\n {sortConfig.field === field && (\n <span className=\"ml-0.5\">\n {sortConfig.direction === 'asc' ? <SortAscIcon /> : <SortDescIcon />}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* View mode toggle */}\n <Button.Group>\n <Button\n size=\"xs\"\n variant={viewMode === 'list' ? 'primary' : 'ghost'}\n onClick={() => onViewModeChange('list')}\n square\n >\n <ListIcon />\n </Button>\n <Button\n size=\"xs\"\n variant={viewMode === 'grid' ? 'primary' : 'ghost'}\n onClick={() => onViewModeChange('grid')}\n square\n >\n <GridIcon />\n </Button>\n </Button.Group>\n\n {/* Create actions */}\n {enableCreate && (\n <div className=\"flex gap-1\">\n {hasCreateFolder && (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n leftSection={<FolderPlusIcon />}\n onClick={onCreateFolder}\n >\n {labels.newFolder}\n </Button>\n )}\n {hasCreateFile && (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n leftSection={<FilePlusIcon />}\n onClick={onCreateFile}\n >\n {labels.newFile}\n </Button>\n )}\n </div>\n )}\n\n {/* Upload action */}\n {enableUpload && (\n <Button\n size=\"xs\"\n variant=\"primary\"\n outline\n leftSection={<UploadIcon />}\n onClick={onUploadFiles}\n >\n {(labels as any).uploadFiles || 'Upload'}\n </Button>\n )}\n </div>\n );\n};\n"],"mappings":"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"}