@lijian-ui/dsh-file-manager 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/LICENSE +38 -38
  2. package/README.i18n.yaml +6 -6
  3. package/README.md +66 -66
  4. package/README.zh.md +66 -66
  5. package/cordis.patch.yml +13 -13
  6. package/lib/client.js +27305 -270
  7. package/lib/client.js.map +1 -1
  8. package/lib/index.js +474 -42
  9. package/lib/tsconfig.client.tsbuildinfo +1 -1
  10. package/lib/tsconfig.host.tsbuildinfo +1 -1
  11. package/lib/types/client/file-source.d.ts +10 -0
  12. package/lib/types/client/file-source.d.ts.map +1 -1
  13. package/lib/types/client/fileType.d.ts +19 -4
  14. package/lib/types/client/fileType.d.ts.map +1 -1
  15. package/lib/types/client/index.d.ts.map +1 -1
  16. package/lib/types/client/locales.d.ts +3 -0
  17. package/lib/types/client/locales.d.ts.map +1 -1
  18. package/lib/types/client/mount.d.ts +1 -1
  19. package/lib/types/client/mount.d.ts.map +1 -1
  20. package/lib/types/client/preview/PreviewPanel.d.ts +2 -1
  21. package/lib/types/client/preview/PreviewPanel.d.ts.map +1 -1
  22. package/lib/types/client/preview/PreviewToolbar.d.ts +3 -1
  23. package/lib/types/client/preview/PreviewToolbar.d.ts.map +1 -1
  24. package/lib/types/client/preview/content.d.ts +3 -1
  25. package/lib/types/client/preview/content.d.ts.map +1 -1
  26. package/lib/types/client/preview/office.d.ts +23 -0
  27. package/lib/types/client/preview/office.d.ts.map +1 -0
  28. package/lib/types/client/reference.d.ts +17 -0
  29. package/lib/types/client/reference.d.ts.map +1 -1
  30. package/lib/types/client/store.d.ts.map +1 -1
  31. package/lib/types/host/fs-service.d.ts.map +1 -1
  32. package/lib/types/host/office-preview.d.ts +13 -0
  33. package/lib/types/host/office-preview.d.ts.map +1 -0
  34. package/lib/types/host/routes.d.ts.map +1 -1
  35. package/lib/types/index.d.ts.map +1 -1
  36. package/package.json +19 -4
  37. package/src/client/FileManagerSettingsCard.tsx +117 -117
  38. package/src/client/PluginSettingsCard.tsx +337 -337
  39. package/src/client/chat/file-ref.ts +144 -144
  40. package/src/client/chat/mermaid-chat.tsx +102 -102
  41. package/src/client/chat/placeholder-hint.tsx +46 -46
  42. package/src/client/components/ExplorerPanel.tsx +534 -534
  43. package/src/client/components/FileIcon.tsx +46 -46
  44. package/src/client/components/ScmPanel.tsx +480 -480
  45. package/src/client/components/a11y.ts +20 -20
  46. package/src/client/components/icons.tsx +274 -274
  47. package/src/client/components/overlay.tsx +225 -225
  48. package/src/client/drag/DragFileInlay.tsx +89 -89
  49. package/src/client/drag/file-drag.ts +67 -67
  50. package/src/client/drag.ts +154 -154
  51. package/src/client/file-source.ts +34 -0
  52. package/src/client/fileType.ts +32 -5
  53. package/src/client/hooks/useResizableSplit.ts +91 -91
  54. package/src/client/hooks/useStore.ts +15 -15
  55. package/src/client/index.ts +42 -3
  56. package/src/client/layout.ts +523 -523
  57. package/src/client/locales.ts +6 -0
  58. package/src/client/maximize.ts +34 -34
  59. package/src/client/mount.tsx +2 -1
  60. package/src/client/persist.ts +194 -194
  61. package/src/client/picker/FilePickerModal.tsx +526 -526
  62. package/src/client/picker/file-picker.ts +86 -86
  63. package/src/client/preview/PreviewPanel.tsx +7 -1
  64. package/src/client/preview/PreviewTabs.tsx +159 -159
  65. package/src/client/preview/PreviewToolbar.tsx +3 -2
  66. package/src/client/preview/content.tsx +7 -2
  67. package/src/client/preview/markdown.ts +351 -351
  68. package/src/client/preview/mermaid.ts +274 -274
  69. package/src/client/preview/office.tsx +321 -0
  70. package/src/client/reference.ts +49 -0
  71. package/src/client/settings-card.module.css +316 -316
  72. package/src/client/settings-form.ts +451 -451
  73. package/src/client/store.ts +17 -12
  74. package/src/client/styles/drag.module.css +30 -30
  75. package/src/client/styles/explorer.module.css +371 -371
  76. package/src/client/styles/picker.module.css +344 -344
  77. package/src/client/styles/preview.module.css +3 -1
  78. package/src/client/styles/scm.module.css +380 -380
  79. package/src/client/styles/tokens.module.css +376 -371
  80. package/src/core/types.ts +162 -162
  81. package/src/host/fs-service.ts +7 -1
  82. package/src/host/gate.ts +73 -73
  83. package/src/host/git-runner.ts +116 -116
  84. package/src/host/git-service.ts +395 -395
  85. package/src/host/loopback.ts +63 -63
  86. package/src/host/office-preview.ts +399 -0
  87. package/src/host/poll-guard.ts +109 -109
  88. package/src/host/routes.ts +72 -1
  89. package/src/index.ts +3 -1
  90. package/src/mount-once.ts +48 -48
  91. package/lib/types/client/chat/AttachedFilesDock.d.ts +0 -51
  92. package/lib/types/client/chat/AttachedFilesDock.d.ts.map +0 -1
  93. package/lib/types/client/floating.d.ts +0 -27
  94. package/lib/types/client/floating.d.ts.map +0 -1
  95. package/lib/types/client/mention.d.ts +0 -44
  96. package/lib/types/client/mention.d.ts.map +0 -1
@@ -1,20 +1,20 @@
1
- import type { KeyboardEvent } from 'react'
2
-
3
- /**
4
- * Keyboard activation parity for focusable rows/divs styled as buttons
5
- * (role="button" + tabIndex={0}): Enter and Space trigger the same action as
6
- * a click, and events bubbling out of nested interactive elements (a row's
7
- * inline action buttons, a tab's close control) are ignored so they never
8
- * double-activate the row.
9
- * @param handler - the activation handler (the element's click action).
10
- * @returns a keydown handler for the focusable element.
11
- */
12
- export function activateOnKey(handler: () => void) {
13
- return (event: KeyboardEvent<HTMLElement>): void => {
14
- if (event.target !== event.currentTarget) return
15
- if (event.key === 'Enter' || event.key === ' ') {
16
- event.preventDefault()
17
- handler()
18
- }
19
- }
20
- }
1
+ import type { KeyboardEvent } from 'react'
2
+
3
+ /**
4
+ * Keyboard activation parity for focusable rows/divs styled as buttons
5
+ * (role="button" + tabIndex={0}): Enter and Space trigger the same action as
6
+ * a click, and events bubbling out of nested interactive elements (a row's
7
+ * inline action buttons, a tab's close control) are ignored so they never
8
+ * double-activate the row.
9
+ * @param handler - the activation handler (the element's click action).
10
+ * @returns a keydown handler for the focusable element.
11
+ */
12
+ export function activateOnKey(handler: () => void) {
13
+ return (event: KeyboardEvent<HTMLElement>): void => {
14
+ if (event.target !== event.currentTarget) return
15
+ if (event.key === 'Enter' || event.key === ' ') {
16
+ event.preventDefault()
17
+ handler()
18
+ }
19
+ }
20
+ }
@@ -1,274 +1,274 @@
1
- /**
2
- * Inline 16px icon set for the panel surfaces (outline style, currentColor).
3
- * No icon package is introduced; the set covers the explorer tree, SCM rows,
4
- * and the preview toolbar/tabs with plain geometric shapes.
5
- * @module dsh-filemgr/client/components/icons
6
- */
7
-
8
- import type { JSX, SVGProps } from 'react'
9
-
10
- interface IconProps {
11
- size?: number
12
- className?: string
13
- }
14
-
15
- const base = (size: number): SVGProps<SVGSVGElement> => ({
16
- width: size,
17
- height: size,
18
- viewBox: '0 0 16 16',
19
- fill: 'none',
20
- stroke: 'currentColor',
21
- strokeWidth: 1.3,
22
- strokeLinecap: 'round',
23
- strokeLinejoin: 'round',
24
- 'aria-hidden': true,
25
- })
26
-
27
- export function FolderIcon({ size = 16, className }: IconProps): JSX.Element {
28
- return (
29
- <svg {...base(size)} className={className}>
30
- <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1Z" />
31
- </svg>
32
- )
33
- }
34
-
35
- export function FolderOpenIcon({ size = 16, className }: IconProps): JSX.Element {
36
- return (
37
- <svg {...base(size)} className={className}>
38
- <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1v1H3.5a1 1 0 0 0-.96.72L1 13.5V4.5a1 1 0 0 1 1-1Z" />
39
- <path d="M2.8 11.5 4 7.5h11l-1.4 4a1 1 0 0 1-.96.72H3.76a1 1 0 0 1-.96-.72Z" />
40
- </svg>
41
- )
42
- }
43
-
44
- export function FileIcon({ size = 16, className }: IconProps): JSX.Element {
45
- return (
46
- <svg {...base(size)} className={className}>
47
- <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
48
- <path d="M9 2v3h3" />
49
- </svg>
50
- )
51
- }
52
-
53
- export function FileCodeIcon({ size = 16, className }: IconProps): JSX.Element {
54
- return (
55
- <svg {...base(size)} className={className}>
56
- <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
57
- <path d="M9 2v3h3" />
58
- <path d="m6.2 8.6-1.4 1.4 1.4 1.4M9.8 8.6l1.4 1.4-1.4 1.4" />
59
- </svg>
60
- )
61
- }
62
-
63
- export function FileImageIcon({ size = 16, className }: IconProps): JSX.Element {
64
- return (
65
- <svg {...base(size)} className={className}>
66
- <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
67
- <path d="M9 2v3h3" />
68
- <circle cx="6.2" cy="6.8" r="1" />
69
- <path d="m5 11 1.8-1.8 1.4 1.4 1.3-1.3L12 12" />
70
- </svg>
71
- )
72
- }
73
-
74
- export function FileTextIcon({ size = 16, className }: IconProps): JSX.Element {
75
- return (
76
- <svg {...base(size)} className={className}>
77
- <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
78
- <path d="M9 2v3h3" />
79
- <path d="M6 9h4M6 11.2h4" />
80
- </svg>
81
- )
82
- }
83
-
84
- export function ChevronRightIcon({ size = 14, className }: IconProps): JSX.Element {
85
- return (
86
- <svg {...base(size)} className={className}>
87
- <path d="m6 3.5 4.5 4.5L6 12.5" />
88
- </svg>
89
- )
90
- }
91
-
92
- export function ChevronDownIcon({ size = 14, className }: IconProps): JSX.Element {
93
- return (
94
- <svg {...base(size)} className={className}>
95
- <path d="m3.5 6 4.5 4.5L12.5 6" />
96
- </svg>
97
- )
98
- }
99
-
100
- export function CloseIcon({ size = 12, className }: IconProps): JSX.Element {
101
- return (
102
- <svg {...base(size)} className={className}>
103
- <path d="m3.5 3.5 9 9M12.5 3.5l-9 9" />
104
- </svg>
105
- )
106
- }
107
-
108
- export function PlusIcon({ size = 14, className }: IconProps): JSX.Element {
109
- return (
110
- <svg {...base(size)} className={className}>
111
- <path d="M8 3v10M3 8h10" />
112
- </svg>
113
- )
114
- }
115
-
116
- export function MinusIcon({ size = 14, className }: IconProps): JSX.Element {
117
- return (
118
- <svg {...base(size)} className={className}>
119
- <path d="M3 8h10" />
120
- </svg>
121
- )
122
- }
123
-
124
- export function UndoIcon({ size = 14, className }: IconProps): JSX.Element {
125
- return (
126
- <svg {...base(size)} className={className}>
127
- <path d="M5 3.5 2.5 6 5 8.5" />
128
- <path d="M2.5 6h8a3.5 3.5 0 0 1 0 7h-3" />
129
- </svg>
130
- )
131
- }
132
-
133
- export function RefreshIcon({ size = 14, className }: IconProps): JSX.Element {
134
- return (
135
- <svg {...base(size)} className={className}>
136
- <path d="M13 8a5 5 0 1 1-1.6-3.65" />
137
- <path d="M13.5 2v2.8h-2.8" />
138
- </svg>
139
- )
140
- }
141
-
142
- export function SplitIcon({ size = 14, className }: IconProps): JSX.Element {
143
- return (
144
- <svg {...base(size)} className={className}>
145
- <rect x="2" y="2.5" width="12" height="11" rx="1" />
146
- <path d="M8 2.5v11" />
147
- </svg>
148
- )
149
- }
150
-
151
- export function CodeIcon({ size = 14, className }: IconProps): JSX.Element {
152
- return (
153
- <svg {...base(size)} className={className}>
154
- <path d="m5.5 4.5-4 3.5 4 3.5M10.5 4.5l4 3.5-4 3.5" />
155
- </svg>
156
- )
157
- }
158
-
159
- export function EyeIcon({ size = 14, className }: IconProps): JSX.Element {
160
- return (
161
- <svg {...base(size)} className={className}>
162
- <path d="M1.5 8s2.5-4.5 6.5-4.5S14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8Z" />
163
- <circle cx="8" cy="8" r="2" />
164
- </svg>
165
- )
166
- }
167
-
168
- export function SaveIcon({ size = 14, className }: IconProps): JSX.Element {
169
- return (
170
- <svg {...base(size)} className={className}>
171
- <path d="M3 2.5h8l2.5 2.5v8.5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1Z" />
172
- <path d="M5 2.5v3.5h4.5V2.5M5 13.5V9.5h6v4" />
173
- </svg>
174
- )
175
- }
176
-
177
- export function DownloadIcon({ size = 14, className }: IconProps): JSX.Element {
178
- return (
179
- <svg {...base(size)} className={className}>
180
- <path d="M8 2v7.5M4.5 6.5 8 10l3.5-3.5" />
181
- <path d="M2.5 13h11" />
182
- </svg>
183
- )
184
- }
185
-
186
- export function ExternalIcon({ size = 14, className }: IconProps): JSX.Element {
187
- return (
188
- <svg {...base(size)} className={className}>
189
- <path d="M9 2.5h4.5V7" />
190
- <path d="M13.5 2.5 7.5 8.5" />
191
- <path d="M11.5 9v3.5a1 1 0 0 1-1 1H3.5a1 1 0 0 1-1-1V5.5a1 1 0 0 1 1-1H7" />
192
- </svg>
193
- )
194
- }
195
-
196
- export function SearchIcon({ size = 14, className }: IconProps): JSX.Element {
197
- return (
198
- <svg {...base(size)} className={className}>
199
- <circle cx="7" cy="7" r="4.5" />
200
- <path d="m10.5 10.5 3 3" />
201
- </svg>
202
- )
203
- }
204
-
205
- export function BranchIcon({ size = 14, className }: IconProps): JSX.Element {
206
- return (
207
- <svg {...base(size)} className={className}>
208
- <circle cx="4" cy="3.5" r="1.5" />
209
- <circle cx="4" cy="12.5" r="1.5" />
210
- <circle cx="12" cy="6.5" r="1.5" />
211
- <path d="M4 5v5M4 10.5c0-2 2-2.5 4-2.5s4-.5 4-1.5" />
212
- </svg>
213
- )
214
- }
215
-
216
- export function ListIcon({ size = 14, className }: IconProps): JSX.Element {
217
- return (
218
- <svg {...base(size)} className={className}>
219
- <path d="M2.5 4h11M2.5 8h11M2.5 12h11" />
220
- </svg>
221
- )
222
- }
223
-
224
- export function TreeIcon({ size = 14, className }: IconProps): JSX.Element {
225
- return (
226
- <svg {...base(size)} className={className}>
227
- <path d="M2.5 3.5h6M8.5 8h5M2.5 8h2" />
228
- <path d="M6 3.5v7" />
229
- <path d="M11 8v4.5h-2.5" />
230
- </svg>
231
- )
232
- }
233
-
234
- export function ShrinkIcon({ size = 14, className }: IconProps): JSX.Element {
235
- return (
236
- <svg {...base(size)} className={className}>
237
- <path d="M14 14 10 10M10 14v-4h4" />
238
- <path d="M2 2l4 4M6 2v4H2" />
239
- </svg>
240
- )
241
- }
242
-
243
- export function ExpandRightIcon({ size = 16, className }: IconProps): JSX.Element {
244
- return (
245
- <svg {...base(size)} className={className}>
246
- <path d="M6 3.5 11.5 8 6 12.5" />
247
- </svg>
248
- )
249
- }
250
-
251
- export function EmptyFolderIcon({ size = 16, className }: IconProps): JSX.Element {
252
- return (
253
- <svg {...base(size)} className={className}>
254
- <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1Z" opacity="0.55" />
255
- </svg>
256
- )
257
- }
258
-
259
- export function MaximizeIcon({ size = 14, className }: IconProps): JSX.Element {
260
- return (
261
- <svg {...base(size)} className={className}>
262
- <rect x="3" y="3" width="10" height="10" rx="1" />
263
- </svg>
264
- )
265
- }
266
-
267
- export function RestoreIcon({ size = 14, className }: IconProps): JSX.Element {
268
- return (
269
- <svg {...base(size)} className={className}>
270
- <rect x="3" y="5" width="8" height="8" rx="1" />
271
- <path d="M6.5 3.5h5a1 1 0 0 1 1 1V10" />
272
- </svg>
273
- )
274
- }
1
+ /**
2
+ * Inline 16px icon set for the panel surfaces (outline style, currentColor).
3
+ * No icon package is introduced; the set covers the explorer tree, SCM rows,
4
+ * and the preview toolbar/tabs with plain geometric shapes.
5
+ * @module dsh-filemgr/client/components/icons
6
+ */
7
+
8
+ import type { JSX, SVGProps } from 'react'
9
+
10
+ interface IconProps {
11
+ size?: number
12
+ className?: string
13
+ }
14
+
15
+ const base = (size: number): SVGProps<SVGSVGElement> => ({
16
+ width: size,
17
+ height: size,
18
+ viewBox: '0 0 16 16',
19
+ fill: 'none',
20
+ stroke: 'currentColor',
21
+ strokeWidth: 1.3,
22
+ strokeLinecap: 'round',
23
+ strokeLinejoin: 'round',
24
+ 'aria-hidden': true,
25
+ })
26
+
27
+ export function FolderIcon({ size = 16, className }: IconProps): JSX.Element {
28
+ return (
29
+ <svg {...base(size)} className={className}>
30
+ <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1Z" />
31
+ </svg>
32
+ )
33
+ }
34
+
35
+ export function FolderOpenIcon({ size = 16, className }: IconProps): JSX.Element {
36
+ return (
37
+ <svg {...base(size)} className={className}>
38
+ <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1v1H3.5a1 1 0 0 0-.96.72L1 13.5V4.5a1 1 0 0 1 1-1Z" />
39
+ <path d="M2.8 11.5 4 7.5h11l-1.4 4a1 1 0 0 1-.96.72H3.76a1 1 0 0 1-.96-.72Z" />
40
+ </svg>
41
+ )
42
+ }
43
+
44
+ export function FileIcon({ size = 16, className }: IconProps): JSX.Element {
45
+ return (
46
+ <svg {...base(size)} className={className}>
47
+ <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
48
+ <path d="M9 2v3h3" />
49
+ </svg>
50
+ )
51
+ }
52
+
53
+ export function FileCodeIcon({ size = 16, className }: IconProps): JSX.Element {
54
+ return (
55
+ <svg {...base(size)} className={className}>
56
+ <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
57
+ <path d="M9 2v3h3" />
58
+ <path d="m6.2 8.6-1.4 1.4 1.4 1.4M9.8 8.6l1.4 1.4-1.4 1.4" />
59
+ </svg>
60
+ )
61
+ }
62
+
63
+ export function FileImageIcon({ size = 16, className }: IconProps): JSX.Element {
64
+ return (
65
+ <svg {...base(size)} className={className}>
66
+ <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
67
+ <path d="M9 2v3h3" />
68
+ <circle cx="6.2" cy="6.8" r="1" />
69
+ <path d="m5 11 1.8-1.8 1.4 1.4 1.3-1.3L12 12" />
70
+ </svg>
71
+ )
72
+ }
73
+
74
+ export function FileTextIcon({ size = 16, className }: IconProps): JSX.Element {
75
+ return (
76
+ <svg {...base(size)} className={className}>
77
+ <path d="M4 2h5l3 3v9H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z" />
78
+ <path d="M9 2v3h3" />
79
+ <path d="M6 9h4M6 11.2h4" />
80
+ </svg>
81
+ )
82
+ }
83
+
84
+ export function ChevronRightIcon({ size = 14, className }: IconProps): JSX.Element {
85
+ return (
86
+ <svg {...base(size)} className={className}>
87
+ <path d="m6 3.5 4.5 4.5L6 12.5" />
88
+ </svg>
89
+ )
90
+ }
91
+
92
+ export function ChevronDownIcon({ size = 14, className }: IconProps): JSX.Element {
93
+ return (
94
+ <svg {...base(size)} className={className}>
95
+ <path d="m3.5 6 4.5 4.5L12.5 6" />
96
+ </svg>
97
+ )
98
+ }
99
+
100
+ export function CloseIcon({ size = 12, className }: IconProps): JSX.Element {
101
+ return (
102
+ <svg {...base(size)} className={className}>
103
+ <path d="m3.5 3.5 9 9M12.5 3.5l-9 9" />
104
+ </svg>
105
+ )
106
+ }
107
+
108
+ export function PlusIcon({ size = 14, className }: IconProps): JSX.Element {
109
+ return (
110
+ <svg {...base(size)} className={className}>
111
+ <path d="M8 3v10M3 8h10" />
112
+ </svg>
113
+ )
114
+ }
115
+
116
+ export function MinusIcon({ size = 14, className }: IconProps): JSX.Element {
117
+ return (
118
+ <svg {...base(size)} className={className}>
119
+ <path d="M3 8h10" />
120
+ </svg>
121
+ )
122
+ }
123
+
124
+ export function UndoIcon({ size = 14, className }: IconProps): JSX.Element {
125
+ return (
126
+ <svg {...base(size)} className={className}>
127
+ <path d="M5 3.5 2.5 6 5 8.5" />
128
+ <path d="M2.5 6h8a3.5 3.5 0 0 1 0 7h-3" />
129
+ </svg>
130
+ )
131
+ }
132
+
133
+ export function RefreshIcon({ size = 14, className }: IconProps): JSX.Element {
134
+ return (
135
+ <svg {...base(size)} className={className}>
136
+ <path d="M13 8a5 5 0 1 1-1.6-3.65" />
137
+ <path d="M13.5 2v2.8h-2.8" />
138
+ </svg>
139
+ )
140
+ }
141
+
142
+ export function SplitIcon({ size = 14, className }: IconProps): JSX.Element {
143
+ return (
144
+ <svg {...base(size)} className={className}>
145
+ <rect x="2" y="2.5" width="12" height="11" rx="1" />
146
+ <path d="M8 2.5v11" />
147
+ </svg>
148
+ )
149
+ }
150
+
151
+ export function CodeIcon({ size = 14, className }: IconProps): JSX.Element {
152
+ return (
153
+ <svg {...base(size)} className={className}>
154
+ <path d="m5.5 4.5-4 3.5 4 3.5M10.5 4.5l4 3.5-4 3.5" />
155
+ </svg>
156
+ )
157
+ }
158
+
159
+ export function EyeIcon({ size = 14, className }: IconProps): JSX.Element {
160
+ return (
161
+ <svg {...base(size)} className={className}>
162
+ <path d="M1.5 8s2.5-4.5 6.5-4.5S14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8Z" />
163
+ <circle cx="8" cy="8" r="2" />
164
+ </svg>
165
+ )
166
+ }
167
+
168
+ export function SaveIcon({ size = 14, className }: IconProps): JSX.Element {
169
+ return (
170
+ <svg {...base(size)} className={className}>
171
+ <path d="M3 2.5h8l2.5 2.5v8.5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1Z" />
172
+ <path d="M5 2.5v3.5h4.5V2.5M5 13.5V9.5h6v4" />
173
+ </svg>
174
+ )
175
+ }
176
+
177
+ export function DownloadIcon({ size = 14, className }: IconProps): JSX.Element {
178
+ return (
179
+ <svg {...base(size)} className={className}>
180
+ <path d="M8 2v7.5M4.5 6.5 8 10l3.5-3.5" />
181
+ <path d="M2.5 13h11" />
182
+ </svg>
183
+ )
184
+ }
185
+
186
+ export function ExternalIcon({ size = 14, className }: IconProps): JSX.Element {
187
+ return (
188
+ <svg {...base(size)} className={className}>
189
+ <path d="M9 2.5h4.5V7" />
190
+ <path d="M13.5 2.5 7.5 8.5" />
191
+ <path d="M11.5 9v3.5a1 1 0 0 1-1 1H3.5a1 1 0 0 1-1-1V5.5a1 1 0 0 1 1-1H7" />
192
+ </svg>
193
+ )
194
+ }
195
+
196
+ export function SearchIcon({ size = 14, className }: IconProps): JSX.Element {
197
+ return (
198
+ <svg {...base(size)} className={className}>
199
+ <circle cx="7" cy="7" r="4.5" />
200
+ <path d="m10.5 10.5 3 3" />
201
+ </svg>
202
+ )
203
+ }
204
+
205
+ export function BranchIcon({ size = 14, className }: IconProps): JSX.Element {
206
+ return (
207
+ <svg {...base(size)} className={className}>
208
+ <circle cx="4" cy="3.5" r="1.5" />
209
+ <circle cx="4" cy="12.5" r="1.5" />
210
+ <circle cx="12" cy="6.5" r="1.5" />
211
+ <path d="M4 5v5M4 10.5c0-2 2-2.5 4-2.5s4-.5 4-1.5" />
212
+ </svg>
213
+ )
214
+ }
215
+
216
+ export function ListIcon({ size = 14, className }: IconProps): JSX.Element {
217
+ return (
218
+ <svg {...base(size)} className={className}>
219
+ <path d="M2.5 4h11M2.5 8h11M2.5 12h11" />
220
+ </svg>
221
+ )
222
+ }
223
+
224
+ export function TreeIcon({ size = 14, className }: IconProps): JSX.Element {
225
+ return (
226
+ <svg {...base(size)} className={className}>
227
+ <path d="M2.5 3.5h6M8.5 8h5M2.5 8h2" />
228
+ <path d="M6 3.5v7" />
229
+ <path d="M11 8v4.5h-2.5" />
230
+ </svg>
231
+ )
232
+ }
233
+
234
+ export function ShrinkIcon({ size = 14, className }: IconProps): JSX.Element {
235
+ return (
236
+ <svg {...base(size)} className={className}>
237
+ <path d="M14 14 10 10M10 14v-4h4" />
238
+ <path d="M2 2l4 4M6 2v4H2" />
239
+ </svg>
240
+ )
241
+ }
242
+
243
+ export function ExpandRightIcon({ size = 16, className }: IconProps): JSX.Element {
244
+ return (
245
+ <svg {...base(size)} className={className}>
246
+ <path d="M6 3.5 11.5 8 6 12.5" />
247
+ </svg>
248
+ )
249
+ }
250
+
251
+ export function EmptyFolderIcon({ size = 16, className }: IconProps): JSX.Element {
252
+ return (
253
+ <svg {...base(size)} className={className}>
254
+ <path d="M2 3.5h4l1.5 2H14a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4.5a1 1 0 0 1 1-1Z" opacity="0.55" />
255
+ </svg>
256
+ )
257
+ }
258
+
259
+ export function MaximizeIcon({ size = 14, className }: IconProps): JSX.Element {
260
+ return (
261
+ <svg {...base(size)} className={className}>
262
+ <rect x="3" y="3" width="10" height="10" rx="1" />
263
+ </svg>
264
+ )
265
+ }
266
+
267
+ export function RestoreIcon({ size = 14, className }: IconProps): JSX.Element {
268
+ return (
269
+ <svg {...base(size)} className={className}>
270
+ <rect x="3" y="5" width="8" height="8" rx="1" />
271
+ <path d="M6.5 3.5h5a1 1 0 0 1 1 1V10" />
272
+ </svg>
273
+ )
274
+ }