miqro 7.2.6 → 7.2.7

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 (286) hide show
  1. package/README.md +1 -21
  2. package/build/esm/src/bin/compile.js +0 -1
  3. package/build/esm/src/bin/doc-md.js +0 -1
  4. package/build/esm/src/bin/generate-doc.js +0 -1
  5. package/build/esm/src/bin/test.js +0 -1
  6. package/build/esm/src/bin/types.js +0 -1
  7. package/build/esm/src/cluster.js +0 -1
  8. package/build/esm/src/common/arguments.js +0 -1
  9. package/build/esm/src/common/assets.js +2 -3
  10. package/build/esm/src/common/checksum.js +0 -1
  11. package/build/esm/src/common/constants.js +0 -1
  12. package/build/esm/src/common/content-type.js +0 -1
  13. package/build/esm/src/common/esbuild.js +0 -1
  14. package/build/esm/src/common/exit.js +0 -1
  15. package/build/esm/src/common/fs.js +0 -1
  16. package/build/esm/src/common/help.js +0 -1
  17. package/build/esm/src/common/jsx.js +0 -1
  18. package/build/esm/src/common/jwt.js +0 -1
  19. package/build/esm/src/common/paths.js +0 -1
  20. package/build/esm/src/common/watch.js +0 -1
  21. package/build/esm/src/inflate/inflate-sea.js +0 -1
  22. package/build/esm/src/inflate/inflate.js +0 -1
  23. package/build/esm/src/inflate/md.js +0 -1
  24. package/build/esm/src/inflate/setup-auth.js +0 -1
  25. package/build/esm/src/inflate/setup-cors.js +0 -1
  26. package/build/esm/src/inflate/setup-db.js +0 -1
  27. package/build/esm/src/inflate/setup-error.js +0 -1
  28. package/build/esm/src/inflate/setup-http.js +0 -1
  29. package/build/esm/src/inflate/setup-log.js +0 -1
  30. package/build/esm/src/inflate/setup-middleware.js +0 -1
  31. package/build/esm/src/inflate/setup-server-config.js +0 -1
  32. package/build/esm/src/inflate/setup-test.js +0 -1
  33. package/build/esm/src/inflate/setup-ws.js +0 -1
  34. package/build/esm/src/inflate/setup.doc.js +0 -1
  35. package/build/esm/src/inflate/utils/sea-utils.js +0 -1
  36. package/build/esm/src/lib.js +0 -1
  37. package/build/esm/src/main.js +0 -1
  38. package/build/esm/src/services/app.js +1 -1
  39. package/build/esm/src/services/editor.js +10 -12
  40. package/build/esm/src/services/hot-reload.js +0 -1
  41. package/build/esm/src/services/migrations.js +0 -1
  42. package/build/esm/src/services/utils/admin-interface.js +0 -1
  43. package/build/esm/src/services/utils/cache.js +0 -1
  44. package/build/esm/src/services/utils/cluster-cache.js +0 -1
  45. package/build/esm/src/services/utils/cluster-ws.js +0 -1
  46. package/build/esm/src/services/utils/db-manager.js +0 -1
  47. package/build/esm/src/services/utils/get-route.js +0 -1
  48. package/build/esm/src/services/utils/jwt.js +0 -1
  49. package/build/esm/src/services/utils/log-transport.js +0 -1
  50. package/build/esm/src/services/utils/log.js +0 -1
  51. package/build/esm/src/services/utils/middleware.js +0 -1
  52. package/build/esm/src/services/utils/server-interface.js +0 -1
  53. package/build/esm/src/services/utils/websocketmanager.d.ts +2 -0
  54. package/build/esm/src/services/utils/websocketmanager.js +8 -2
  55. package/build/esm/src/types.js +0 -1
  56. package/build/lib.cjs +27 -29
  57. package/build/style.css +3 -3
  58. package/package.json +2 -2
  59. package/build/esm/editor/auth.d.ts +0 -6
  60. package/build/esm/editor/auth.js +0 -43
  61. package/build/esm/editor/auth.js.map +0 -1
  62. package/build/esm/editor/common/admin-interface.d.ts +0 -36
  63. package/build/esm/editor/common/admin-interface.js +0 -45
  64. package/build/esm/editor/common/admin-interface.js.map +0 -1
  65. package/build/esm/editor/common/constants.d.ts +0 -4
  66. package/build/esm/editor/common/constants.js +0 -21
  67. package/build/esm/editor/common/constants.js.map +0 -1
  68. package/build/esm/editor/common/constants.server.d.ts +0 -2
  69. package/build/esm/editor/common/constants.server.js +0 -5
  70. package/build/esm/editor/common/constants.server.js.map +0 -1
  71. package/build/esm/editor/common/editor-index.d.ts +0 -2
  72. package/build/esm/editor/common/editor-index.js +0 -15
  73. package/build/esm/editor/common/editor-index.js.map +0 -1
  74. package/build/esm/editor/common/html-encode.d.ts +0 -1
  75. package/build/esm/editor/common/html-encode.js +0 -15
  76. package/build/esm/editor/common/html-encode.js.map +0 -1
  77. package/build/esm/editor/common/log-socket.d.ts +0 -15
  78. package/build/esm/editor/common/log-socket.js +0 -72
  79. package/build/esm/editor/common/log-socket.js.map +0 -1
  80. package/build/esm/editor/common/templates.d.ts +0 -11
  81. package/build/esm/editor/common/templates.js +0 -478
  82. package/build/esm/editor/common/templates.js.map +0 -1
  83. package/build/esm/editor/components/api-preview.d.ts +0 -11
  84. package/build/esm/editor/components/api-preview.js +0 -93
  85. package/build/esm/editor/components/api-preview.js.map +0 -1
  86. package/build/esm/editor/components/editor.d.ts +0 -16
  87. package/build/esm/editor/components/editor.js +0 -368
  88. package/build/esm/editor/components/editor.js.map +0 -1
  89. package/build/esm/editor/components/file-browser.d.ts +0 -37
  90. package/build/esm/editor/components/file-browser.js +0 -128
  91. package/build/esm/editor/components/file-browser.js.map +0 -1
  92. package/build/esm/editor/components/file-editor-toolbar.d.ts +0 -22
  93. package/build/esm/editor/components/file-editor-toolbar.js +0 -96
  94. package/build/esm/editor/components/file-editor-toolbar.js.map +0 -1
  95. package/build/esm/editor/components/file-editor.d.ts +0 -32
  96. package/build/esm/editor/components/file-editor.js +0 -62
  97. package/build/esm/editor/components/file-editor.js.map +0 -1
  98. package/build/esm/editor/components/filter-query.d.ts +0 -1
  99. package/build/esm/editor/components/filter-query.js +0 -24
  100. package/build/esm/editor/components/filter-query.js.map +0 -1
  101. package/build/esm/editor/components/highlight-text-area.d.ts +0 -11
  102. package/build/esm/editor/components/highlight-text-area.js +0 -128
  103. package/build/esm/editor/components/highlight-text-area.js.map +0 -1
  104. package/build/esm/editor/components/log-viewer.d.ts +0 -6
  105. package/build/esm/editor/components/log-viewer.js +0 -72
  106. package/build/esm/editor/components/log-viewer.js.map +0 -1
  107. package/build/esm/editor/components/new-file.d.ts +0 -10
  108. package/build/esm/editor/components/new-file.js +0 -120
  109. package/build/esm/editor/components/new-file.js.map +0 -1
  110. package/build/esm/editor/components/scroll-query.d.ts +0 -7
  111. package/build/esm/editor/components/scroll-query.js +0 -23
  112. package/build/esm/editor/components/scroll-query.js.map +0 -1
  113. package/build/esm/editor/components/start-page.d.ts +0 -13
  114. package/build/esm/editor/components/start-page.js +0 -33
  115. package/build/esm/editor/components/start-page.js.map +0 -1
  116. package/build/esm/editor/http/admin/editor/api/fs/delete.api.d.ts +0 -4
  117. package/build/esm/editor/http/admin/editor/api/fs/delete.api.js +0 -31
  118. package/build/esm/editor/http/admin/editor/api/fs/delete.api.js.map +0 -1
  119. package/build/esm/editor/http/admin/editor/api/fs/read.api.d.ts +0 -7
  120. package/build/esm/editor/http/admin/editor/api/fs/read.api.js +0 -51
  121. package/build/esm/editor/http/admin/editor/api/fs/read.api.js.map +0 -1
  122. package/build/esm/editor/http/admin/editor/api/fs/rename.api.d.ts +0 -7
  123. package/build/esm/editor/http/admin/editor/api/fs/rename.api.js +0 -41
  124. package/build/esm/editor/http/admin/editor/api/fs/rename.api.js.map +0 -1
  125. package/build/esm/editor/http/admin/editor/api/fs/scan.api.d.ts +0 -26
  126. package/build/esm/editor/http/admin/editor/api/fs/scan.api.js +0 -151
  127. package/build/esm/editor/http/admin/editor/api/fs/scan.api.js.map +0 -1
  128. package/build/esm/editor/http/admin/editor/api/fs/write.api.d.ts +0 -3
  129. package/build/esm/editor/http/admin/editor/api/fs/write.api.js +0 -40
  130. package/build/esm/editor/http/admin/editor/api/fs/write.api.js.map +0 -1
  131. package/build/esm/editor/http/admin/editor/api/server/reload.api.d.ts +0 -10
  132. package/build/esm/editor/http/admin/editor/api/server/reload.api.js +0 -47
  133. package/build/esm/editor/http/admin/editor/api/server/reload.api.js.map +0 -1
  134. package/build/esm/editor/http/admin/editor/api/server/restart.api.d.ts +0 -10
  135. package/build/esm/editor/http/admin/editor/api/server/restart.api.js +0 -47
  136. package/build/esm/editor/http/admin/editor/api/server/restart.api.js.map +0 -1
  137. package/build/esm/editor/http/admin/editor/editor.d.ts +0 -1
  138. package/build/esm/editor/http/admin/editor/editor.js +0 -9
  139. package/build/esm/editor/http/admin/editor/editor.js.map +0 -1
  140. package/build/esm/editor/http/admin/editor/index.api.d.ts +0 -3
  141. package/build/esm/editor/http/admin/editor/index.api.js +0 -23
  142. package/build/esm/editor/http/admin/editor/index.api.js.map +0 -1
  143. package/build/esm/editor/server.d.ts +0 -3
  144. package/build/esm/editor/server.js +0 -50
  145. package/build/esm/editor/server.js.map +0 -1
  146. package/build/esm/editor/ws.d.ts +0 -3
  147. package/build/esm/editor/ws.js +0 -12
  148. package/build/esm/editor/ws.js.map +0 -1
  149. package/build/esm/src/bin/compile.js.map +0 -1
  150. package/build/esm/src/bin/doc-md.js.map +0 -1
  151. package/build/esm/src/bin/generate-doc.js.map +0 -1
  152. package/build/esm/src/bin/test.js.map +0 -1
  153. package/build/esm/src/bin/types.js.map +0 -1
  154. package/build/esm/src/cluster.js.map +0 -1
  155. package/build/esm/src/common/arguments.js.map +0 -1
  156. package/build/esm/src/common/assets.js.map +0 -1
  157. package/build/esm/src/common/checksum.js.map +0 -1
  158. package/build/esm/src/common/constants.js.map +0 -1
  159. package/build/esm/src/common/content-type.js.map +0 -1
  160. package/build/esm/src/common/esbuild.js.map +0 -1
  161. package/build/esm/src/common/exit.js.map +0 -1
  162. package/build/esm/src/common/fs.js.map +0 -1
  163. package/build/esm/src/common/help.js.map +0 -1
  164. package/build/esm/src/common/jsx.js.map +0 -1
  165. package/build/esm/src/common/jwt.js.map +0 -1
  166. package/build/esm/src/common/paths.js.map +0 -1
  167. package/build/esm/src/common/watch.js.map +0 -1
  168. package/build/esm/src/inflate/inflate-sea.js.map +0 -1
  169. package/build/esm/src/inflate/inflate.js.map +0 -1
  170. package/build/esm/src/inflate/md.js.map +0 -1
  171. package/build/esm/src/inflate/setup-auth.js.map +0 -1
  172. package/build/esm/src/inflate/setup-cors.js.map +0 -1
  173. package/build/esm/src/inflate/setup-db.js.map +0 -1
  174. package/build/esm/src/inflate/setup-error.js.map +0 -1
  175. package/build/esm/src/inflate/setup-http.js.map +0 -1
  176. package/build/esm/src/inflate/setup-log.js.map +0 -1
  177. package/build/esm/src/inflate/setup-middleware.js.map +0 -1
  178. package/build/esm/src/inflate/setup-server-config.js.map +0 -1
  179. package/build/esm/src/inflate/setup-test.js.map +0 -1
  180. package/build/esm/src/inflate/setup-ws.js.map +0 -1
  181. package/build/esm/src/inflate/setup.doc.js.map +0 -1
  182. package/build/esm/src/inflate/utils/sea-utils.js.map +0 -1
  183. package/build/esm/src/lib.js.map +0 -1
  184. package/build/esm/src/main.js.map +0 -1
  185. package/build/esm/src/services/app.js.map +0 -1
  186. package/build/esm/src/services/editor.js.map +0 -1
  187. package/build/esm/src/services/hot-reload.js.map +0 -1
  188. package/build/esm/src/services/migrations.js.map +0 -1
  189. package/build/esm/src/services/utils/admin-interface.js.map +0 -1
  190. package/build/esm/src/services/utils/cache.js.map +0 -1
  191. package/build/esm/src/services/utils/cluster-cache.js.map +0 -1
  192. package/build/esm/src/services/utils/cluster-ws.js.map +0 -1
  193. package/build/esm/src/services/utils/db-manager.js.map +0 -1
  194. package/build/esm/src/services/utils/get-route.js.map +0 -1
  195. package/build/esm/src/services/utils/jwt.js.map +0 -1
  196. package/build/esm/src/services/utils/log-transport.js.map +0 -1
  197. package/build/esm/src/services/utils/log.js.map +0 -1
  198. package/build/esm/src/services/utils/middleware.js.map +0 -1
  199. package/build/esm/src/services/utils/server-interface.js.map +0 -1
  200. package/build/esm/src/services/utils/websocketmanager.js.map +0 -1
  201. package/build/esm/src/types.js.map +0 -1
  202. package/build/font.ttf +0 -0
  203. package/editor/auth.ts +0 -52
  204. package/editor/common/admin-interface.ts +0 -84
  205. package/editor/common/constants.server.ts +0 -5
  206. package/editor/common/constants.ts +0 -21
  207. package/editor/common/editor-index.tsx +0 -17
  208. package/editor/common/html-encode.ts +0 -14
  209. package/editor/common/log-socket.tsx +0 -87
  210. package/editor/common/templates.ts +0 -481
  211. package/editor/components/api-preview.tsx +0 -118
  212. package/editor/components/editor.tsx +0 -496
  213. package/editor/components/file-browser.tsx +0 -311
  214. package/editor/components/file-editor-toolbar.tsx +0 -194
  215. package/editor/components/file-editor.tsx +0 -125
  216. package/editor/components/filter-query.tsx +0 -26
  217. package/editor/components/highlight-text-area.tsx +0 -148
  218. package/editor/components/log-viewer.tsx +0 -113
  219. package/editor/components/new-file.tsx +0 -172
  220. package/editor/components/scroll-query.tsx +0 -25
  221. package/editor/components/start-page.tsx +0 -52
  222. package/editor/http/admin/editor/api/fs/delete.api.tsx +0 -32
  223. package/editor/http/admin/editor/api/fs/read.api.tsx +0 -55
  224. package/editor/http/admin/editor/api/fs/rename.api.tsx +0 -41
  225. package/editor/http/admin/editor/api/fs/scan.api.tsx +0 -181
  226. package/editor/http/admin/editor/api/fs/write.api.tsx +0 -41
  227. package/editor/http/admin/editor/api/server/reload.api.ts +0 -53
  228. package/editor/http/admin/editor/api/server/restart.api.tsx +0 -52
  229. package/editor/http/admin/editor/editor.tsx +0 -10
  230. package/editor/http/admin/editor/index.api.tsx +0 -42
  231. package/editor/server.ts +0 -57
  232. package/editor/ws.ts +0 -15
  233. package/src/bin/compile.ts +0 -35
  234. package/src/bin/doc-md.ts +0 -210
  235. package/src/bin/generate-doc.ts +0 -64
  236. package/src/bin/test.ts +0 -93
  237. package/src/bin/types.ts +0 -34
  238. package/src/cluster.ts +0 -27
  239. package/src/common/arguments.ts +0 -853
  240. package/src/common/assets.ts +0 -148
  241. package/src/common/checksum.ts +0 -58
  242. package/src/common/constants.ts +0 -19
  243. package/src/common/content-type.ts +0 -84
  244. package/src/common/esbuild.ts +0 -103
  245. package/src/common/exit.ts +0 -91
  246. package/src/common/fs.ts +0 -82
  247. package/src/common/help.ts +0 -65
  248. package/src/common/jsx.ts +0 -574
  249. package/src/common/jwt.ts +0 -85
  250. package/src/common/paths.ts +0 -107
  251. package/src/common/watch.ts +0 -88
  252. package/src/inflate/inflate-sea.ts +0 -268
  253. package/src/inflate/inflate.ts +0 -105
  254. package/src/inflate/md.ts +0 -25
  255. package/src/inflate/setup-auth.ts +0 -41
  256. package/src/inflate/setup-cors.ts +0 -42
  257. package/src/inflate/setup-db.ts +0 -117
  258. package/src/inflate/setup-error.ts +0 -44
  259. package/src/inflate/setup-http.ts +0 -720
  260. package/src/inflate/setup-log.ts +0 -45
  261. package/src/inflate/setup-middleware.ts +0 -47
  262. package/src/inflate/setup-server-config.ts +0 -48
  263. package/src/inflate/setup-test.ts +0 -23
  264. package/src/inflate/setup-ws.ts +0 -50
  265. package/src/inflate/setup.doc.ts +0 -92
  266. package/src/inflate/utils/sea-utils.ts +0 -14
  267. package/src/lib.ts +0 -35
  268. package/src/main.ts +0 -107
  269. package/src/services/app.ts +0 -750
  270. package/src/services/editor.tsx +0 -101
  271. package/src/services/globals.ts.ignore +0 -186
  272. package/src/services/hot-reload.ts +0 -55
  273. package/src/services/migrations.ts +0 -68
  274. package/src/services/utils/admin-interface.ts +0 -37
  275. package/src/services/utils/cache.ts +0 -88
  276. package/src/services/utils/cluster-cache.ts +0 -255
  277. package/src/services/utils/cluster-ws.ts +0 -202
  278. package/src/services/utils/db-manager.ts +0 -92
  279. package/src/services/utils/get-route.ts +0 -70
  280. package/src/services/utils/jwt.ts +0 -25
  281. package/src/services/utils/log-transport.ts +0 -81
  282. package/src/services/utils/log.ts +0 -92
  283. package/src/services/utils/middleware.ts +0 -10
  284. package/src/services/utils/server-interface.ts +0 -122
  285. package/src/services/utils/websocketmanager.ts +0 -158
  286. package/src/types.ts +0 -287
@@ -1,311 +0,0 @@
1
- import * as jsx from "@miqro/jsx";
2
- import JSX from "@miqro/jsx";
3
-
4
- interface FileBrowserFile {
5
- filePath: string;
6
- fileName: string;
7
- language: string;
8
- content?: string;
9
- dirs: string[];
10
- }
11
-
12
- interface FileBrowserProps {
13
- filter: string;
14
- migrations: string[];
15
- current: string;
16
- isDirCollapsed: (dir: string) => boolean;
17
- toggleCollapseDir: (dir: string) => void;
18
- saveAll: () => void;
19
- isOpen: (file: string) => boolean;
20
- openFile: (file: string) => void;
21
- setfilter: (newFilter) => void;
22
- showNewFile: () => void;
23
- scanFiles: () => void;
24
- closeAll: () => void;
25
- closeFile: (file: string) => void;
26
- reloadServer: () => void;
27
- hasFileContentChanged: (file: string) => boolean;
28
- hasErrors: (file: string) => boolean;
29
- files: FileBrowserFile[];
30
- opened: {
31
- fileName: string;
32
- filePath: string;
33
- }[];
34
- isPanelVisible: (panel: string) => boolean;
35
- togglePanel: (panel: string) => void;
36
- disableLog?: boolean; disablePreview?: boolean; disableReload?: boolean;
37
- }
38
-
39
- export function FileBrowser(props: FileBrowserProps) {
40
- return <div class="file-browser" style={`${!props.isPanelVisible("left") ? "display: none;" : ""}`}>
41
- <div class="file-browser-toolbar">
42
- <div class="row">
43
- <button
44
- class="file-editor-button btn"
45
- style={`width: 10%;${props.disableReload ? "width: 30%;" : ""}`}
46
- onclick={ev => {
47
- ev.preventDefault();
48
- props.togglePanel("left");
49
- }}>{"<<"}</button>
50
- {props.disableLog ? <></> :
51
- <button
52
- id="log-btn"
53
- class="file-editor-button btn"
54
- style={`width: 30%;${props.disableLog ? "display: none;" : ""}`}
55
- onclick={ev => {
56
- ev.preventDefault();
57
- props.togglePanel("bottom");
58
- }}>log</button>}
59
- {props.disableReload ? <></> :
60
- <button
61
- id="scan-btn"
62
- class="file-editor-button btn active"
63
- style={`width: 30%;${props.disableReload ? "display: none;" : ""}`}
64
- onclick={ev => {
65
- ev.preventDefault();
66
- props.scanFiles();
67
- }}>scan</button>}
68
- {props.disableReload ? <></> :
69
- <button
70
- id="reload-btn"
71
- class="file-editor-button btn warning"
72
- style={`width: 30%;${props.disableReload ? "display: none;" : ""}`}
73
- onclick={ev => {
74
- ev.preventDefault();
75
- props.reloadServer();
76
- }}>reload</button>}
77
- </div>
78
- <div class="row">
79
- <input
80
- type="text"
81
- style="width: 100%;"
82
- value={props.filter}
83
- oninput={ev => {
84
- ev.preventDefault();
85
- const text = ev.target.value;
86
- props.setfilter(text);
87
- }}
88
- placeholder={"..filter.."} />
89
- </div>
90
- <div class="row">
91
- {props.disablePreview ? <></> :
92
- <button
93
- id="preview-btn"
94
- class="file-editor-button btn"
95
- style={`width: 30%;${props.disablePreview ? "display: none;" : ""}`}
96
- onclick={ev => {
97
- ev.preventDefault();
98
- props.togglePanel("right");
99
- }}>preview</button>}
100
- <button
101
- id="new-btn"
102
- class="file-editor-button btn info"
103
- style="width: 20%;"
104
- onclick={ev => {
105
- ev.preventDefault();
106
- props.showNewFile();
107
- }}>new</button>
108
- {props.disableReload ? <></> :
109
- <button
110
- id="scan-btn"
111
- class="file-editor-button btn active"
112
- style={`width: 30%;${!props.disableReload ? "display: none;" : ""}`}
113
- onclick={ev => {
114
- ev.preventDefault();
115
- props.scanFiles();
116
- }}>scan</button>}
117
- <button
118
- id="saveall-btn"
119
- class="file-editor-button btn success"
120
- style="width: 25%;"
121
- onclick={ev => {
122
- ev.preventDefault();
123
- props.saveAll();
124
-
125
- }}>save</button>
126
- <button
127
- id="closeall-btn"
128
- class="file-editor-button btn danger"
129
- style="width: 25%;"
130
- onclick={ev => {
131
- ev.preventDefault();
132
- props.closeAll();
133
- }}>close</button>
134
- </div>
135
- </div>
136
-
137
- <div class="file-browser-files">
138
- {props.opened.length > 0 ? <div class="file-browser-opened-files" style="padding: var(--file-browser-separation);">
139
- {/*<p style="padding: 0; margin: 0;">opened</p>*/}
140
- <ul style="padding: 0; margin: 0;">
141
- {props.opened.map(file => <File
142
- closeFile={props.closeFile}
143
- current={props.current}
144
- fileName={file.fileName}
145
- filePath={file.filePath}
146
- hasErrors={props.hasErrors}
147
- hasFileContentChanged={props.hasFileContentChanged}
148
- isOpen={props.isOpen}
149
- openFile={props.openFile} />)}
150
- </ul></div> : <></>}
151
- <FileTree
152
- isDirCollapsed={props.isDirCollapsed}
153
- toggleCollapseDir={props.toggleCollapseDir}
154
- closeFile={props.closeFile}
155
- current={props.current}
156
- files={props.files}
157
- filter={props.filter}
158
- hasErrors={props.hasErrors}
159
- hasFileContentChanged={props.hasFileContentChanged}
160
- isOpen={props.isOpen}
161
- openFile={props.openFile} />
162
- </div>
163
- </div>
164
- }
165
-
166
- interface FileTreeProps {
167
- isDirCollapsed: (dir: string) => boolean;
168
- toggleCollapseDir: (dir: string) => void;
169
- current: string;
170
- files: FileBrowserFile[];
171
- filter: string;
172
- isOpen: (file: string) => boolean;
173
- openFile: (file: string) => void;
174
- closeFile: (file: string) => void;
175
- hasErrors: (file: string) => boolean;
176
- hasFileContentChanged: (file: string) => boolean;
177
- }
178
-
179
- interface FileTreeDir {
180
- dirs: {
181
- [name: string]: FileTreeDir
182
- };
183
- files: FileBrowserFile[];
184
- name: string;
185
- fullName: string;
186
- }
187
-
188
- function FileTree(props: FileTreeProps) {
189
- const ret: FileTreeDir = {
190
- dirs: {},
191
- files: [],
192
- name: "",
193
- fullName: ""
194
- };
195
-
196
- props.files.forEach((file) => {
197
- let cDir = ret;
198
- let fullName = "";
199
- for (const dir of file.dirs) {
200
- fullName += dir + "/";
201
- if (cDir.dirs[dir] === undefined) {
202
- const newDir: FileTreeDir = {
203
- dirs: {},
204
- files: [],
205
- name: dir,
206
- fullName: `${fullName}`
207
- };
208
- cDir.dirs[dir] = newDir;
209
- cDir = newDir;
210
- } else {
211
- cDir = cDir.dirs[dir];
212
- }
213
- }
214
- cDir.files.push(file);
215
- });
216
-
217
- //console.dir(ret);
218
-
219
- return <FileTreeFolder {...props} tree={ret} level={0} />
220
- }
221
-
222
- interface FileTreeFolderProps {
223
- isDirCollapsed: (dir: string) => boolean;
224
- toggleCollapseDir: (dir: string) => void;
225
- tree: FileTreeDir;
226
- current: string;
227
- filter: string;
228
- level: number;
229
- isOpen: (file: string) => boolean;
230
- openFile: (file: string) => void;
231
- closeFile: (file: string) => void;
232
- hasErrors: (file: string) => boolean;
233
- hasFileContentChanged: (file: string) => boolean;
234
- }
235
-
236
- function FileTreeFolder(props: FileTreeFolderProps) {
237
-
238
- //console.dir(props.tree);
239
-
240
- const dirs = Object.keys(props.tree.dirs).map(k => props.tree.dirs[k]);
241
-
242
- const files = props.tree.files.filter(file => props.filter ? file.filePath.includes(props.filter) : true);
243
-
244
-
245
- return <ul style={`margin-left: calc(2 * var(--file-browser-separation-file));${props.level === 0 ? " padding: var(--file-browser-separation);" : ""}`}>
246
- <>
247
- {props.tree.name !== "" ? <div class="file-browser-dir" style="padding: 0;">
248
- <p style="margin: 0;">{props.tree.name}/</p>
249
- <button
250
- onclick={ev => {
251
- ev.preventDefault();
252
- ev.stopPropagation();
253
- props.toggleCollapseDir(props.tree.fullName);
254
- }}
255
- class="btn-small"
256
- style={"margin: 0; margin-left: calc(2 * var(--file-browser-separation));"}>{props.isDirCollapsed(props.tree.fullName) ? "+" : "-"}</button>
257
- </div> : <></>}
258
- {props.isDirCollapsed(props.tree.fullName) ? <></> :
259
- <>
260
- {dirs.map(dir => {
261
- return <FileTreeFolder {...props} tree={dir} level={props.level + 1} />
262
- })}
263
- {files.map(file => <File
264
- closeFile={props.closeFile}
265
- current={props.current}
266
- fileName={file.fileName}
267
- filePath={file.filePath}
268
- hasErrors={props.hasErrors}
269
- hasFileContentChanged={props.hasFileContentChanged}
270
- isOpen={props.isOpen}
271
- openFile={props.openFile} />)
272
- }
273
- </>}
274
- </>
275
- </ul>
276
- }
277
-
278
- interface FileProps {
279
- fileName: string;
280
- filePath: string;
281
- current: string;
282
- isOpen: (file: string) => boolean;
283
- openFile: (file: string) => void;
284
- closeFile: (file: string) => void;
285
- hasErrors: (file: string) => boolean;
286
- hasFileContentChanged: (file: string) => boolean;
287
- }
288
-
289
- function File(props: FileProps) {
290
- const isOpen = props.isOpen(props.filePath);
291
-
292
- return <li
293
- class={`file-browser-file${props.hasErrors(props.filePath) ? " error" : ""}${props.hasFileContentChanged(props.filePath) ? " changed" : ""}${props.current === props.filePath ? " active" : ""}${isOpen ? " open" : ""}`}
294
- style={"display: flex; justify-content: flex-start; align-items: center; margin-left: calc(2 * var(--file-browser-separation-file));"}
295
- onclick={ev => {
296
- ev.preventDefault();
297
- ev.stopPropagation();
298
- props.openFile(props.filePath);
299
- }}>
300
- <p style="margin: 0; padding: 0;">{props.fileName}{props.hasFileContentChanged(props.filePath) ? "(*)" : ""}</p>
301
- <button
302
- onclick={ev => {
303
- ev.preventDefault();
304
- ev.stopPropagation();
305
- props.closeFile(props.filePath);
306
- }}
307
- class="btn-small"
308
- style={props.isOpen(props.filePath) ? "margin-left: calc(2 * var(--file-browser-separation-file));" : "display: none;"}
309
- disabled={!props.isOpen(props.filePath)}>X</button>
310
- </li>
311
- }
@@ -1,194 +0,0 @@
1
- import * as jsx from "@miqro/jsx";
2
- import JSX from "@miqro/jsx";
3
-
4
- import { SUPPORTED_LANGUAGES } from "../common/constants.js";
5
-
6
- interface FileEditorToolbar {
7
- path: string;
8
- language: string;
9
- changed: boolean;
10
- renameFile: (newName: string) => void;
11
- deleteFile: () => void;
12
- setlanguage: (newLang: string) => void;
13
- saveFile: (reload?: boolean) => void;
14
- revertFile: () => void;
15
- closeFile: () => void;
16
- togglePanel: (panel: string) => void;
17
- isPanelVisible: (panel: string) => boolean;
18
- disableLog?: boolean; disablePreview?: boolean; disableReload?: boolean;
19
- }
20
-
21
- export function FileEditorToolbar(props: FileEditorToolbar) {
22
-
23
- const renamingRef = jsx.useRef();
24
- const refresh = jsx.useRefresh();
25
- const [renaming, setrenaming] = jsx.useState<boolean>(false);
26
-
27
- jsx.useEffect(() => {
28
- if (renamingRef.current) {
29
- renamingRef.current.value = props.path;
30
- renamingRef.current.focus();
31
- refresh();
32
- }
33
- }, [renamingRef.current]);
34
-
35
- jsx.useEffect(() => {
36
- setrenaming(false);
37
- }, [props.path]);
38
-
39
- return <div class="file-editor-toolbar">
40
- <div class="file-editor-toolbar-row">
41
- <button
42
- class="file-editor-button btn"
43
- style={`${props.isPanelVisible("left") ? "display: none;" : "margin-right: var(--file-browser-separation);"}`}
44
- onclick={ev => {
45
- ev.preventDefault();
46
- props.togglePanel("left");
47
- }}>{">>"}</button>
48
- <button
49
- id="save-btn"
50
- disabled={!props.changed}
51
- class={`btn success`}
52
- onclick={ev => {
53
- ev.preventDefault();
54
- props.saveFile();
55
- }}>save</button>
56
- {props.disableReload ? <></> : <button
57
- id="savereload-btn"
58
- disabled={!props.changed}
59
- class={`btn info`}
60
- style="margin-left: var(--file-browser-separation);"
61
- onclick={ev => {
62
- ev.preventDefault();
63
- props.saveFile(true);
64
- }}>save/reload</button>}
65
- <button
66
- id="revert-btn"
67
- disabled={!props.changed}
68
- style="margin-left: var(--file-browser-separation);"
69
- class={`btn warning`}
70
- onclick={ev => {
71
- ev.preventDefault();
72
- props.revertFile();
73
- }}>revert</button>
74
- <button
75
- id="close-btn"
76
- class={`btn danger`}
77
- style="margin-left: var(--file-browser-separation);"
78
- onclick={ev => {
79
- ev.preventDefault();
80
- props.closeFile();
81
-
82
- }}>close</button>
83
- {SUPPORTED_LANGUAGES.includes(props.language) ?
84
- <select
85
- value={props.language}
86
- oninput={ev => {
87
- ev.preventDefault();
88
- props.setlanguage(ev.target.value);
89
- }}
90
- style="margin: 0; padding: 0; margin-left: calc(2*var(--file-browser-separation-file));">
91
- {SUPPORTED_LANGUAGES.map(language => <option value={language}>{language}</option>)}
92
- </select> : <></>}
93
- {/*<div
94
- style="margin-left: calc(2*var(--file-browser-separation));"
95
- class={`toggle-panel-button left-side-panel-button ${props.isPanelVisible("left") ? "active" : ""}`}
96
- onclick={ev => {
97
- ev.preventDefault();
98
- props.togglePanel("left");
99
- }}
100
- ></div>
101
- <br />
102
- <div
103
- style="margin-left: calc(2*var(--file-browser-separation-file));"
104
- class={`toggle-panel-button bottom-side-panel-button ${props.isPanelVisible("bottom") ? "active" : ""}`}
105
- onclick={ev => {
106
- ev.preventDefault();
107
- props.togglePanel("bottom");
108
- }}
109
- ></div>
110
- <br />
111
- <div class={`toggle-panel-button right-side-panel-button ${props.isPanelVisible("right") ? "active" : ""}`}
112
- onclick={ev => {
113
- ev.preventDefault();
114
- props.togglePanel("right");
115
- }}
116
- ></div>*/}
117
-
118
-
119
- </div>
120
- <div class="file-editor-toolbar-row">
121
- {!renaming ?
122
- <><p
123
- style="margin-left:20px;"
124
- onclick={ev => {
125
- ev.preventDefault();
126
- setrenaming(true);
127
- }}>{props.path}</p>
128
- </> :
129
- <>
130
- <form
131
- style="width: 100%; height: 100%; margin-right: calc(2 * var(--file-browser-separation));"
132
- onsubmit={ev => {
133
- ev.preventDefault();
134
- setrenaming(false);
135
- if (renamingRef.current && renamingRef.current.value !== props.path) {
136
- setrenaming(false);
137
- props.renameFile(renamingRef.current.value);
138
- }
139
- }}>
140
- <input
141
- style="width: 100%; height: 100%;"
142
- onfocusout={ev => {
143
- ev.preventDefault();
144
- //setrenaming(false);
145
- }}
146
- ref={renamingRef}
147
- onkeydown={(ev) => {
148
- if (ev.keyCode === 27) {
149
- // catch esc
150
- ev.preventDefault();
151
- setrenaming(false);
152
- } else {
153
- refresh();
154
- }
155
- }}
156
- type="text" />
157
- </form>
158
- {renamingRef.current && renamingRef.current.value !== props.path && renamingRef.current.value !== "" ?
159
- <button
160
- style="margin-left: var(--file-browser-separation);"
161
- class="btn info"
162
- onclick={ev => {
163
- ev.preventDefault();
164
- if (renamingRef.current) {
165
- setrenaming(false);
166
- props.renameFile(renamingRef.current.value);
167
- }
168
- }}>rename file</button>
169
- : <></>}
170
- <button
171
- style="margin-left: var(--file-browser-separation);"
172
- class="btn danger"
173
- onclick={ev => {
174
- ev.preventDefault();
175
- if (renamingRef.current) {
176
- setrenaming(false);
177
- props.deleteFile();
178
- }
179
- }}>delete file</button>
180
- <button
181
- style="margin-left: var(--file-browser-separation);"
182
- class="btn"
183
- onclick={ev => {
184
- ev.preventDefault();
185
- setrenaming(false);
186
- }}>cancel</button>
187
- </>
188
- }
189
- </div>
190
- </div>
191
- }
192
-
193
- FileEditorToolbar.asFragment = true;
194
- FileEditorToolbar.shadowInit = false;
@@ -1,125 +0,0 @@
1
- import * as jsx from "@miqro/jsx";
2
- import JSX from "@miqro/jsx";
3
-
4
- import { APIPReview } from "./api-preview.js";
5
- import { FileEditorToolbar } from "./file-editor-toolbar.js";
6
- import { HighlightTextArea } from "./highlight-text-area.js";
7
- import { useScroll } from "./scroll-query.js";
8
-
9
- interface FileEditorProps {
10
- current: boolean;
11
- error: string;
12
- path: string;
13
- previewPath: string | undefined;
14
- apiPreview: undefined | {
15
- path: string;
16
- method: string;
17
- }[];
18
- content: string | null;
19
- contentchange: (content: string) => void;
20
- closeFile: () => void;
21
- saveFile: (reload?: boolean) => void;
22
- revertFile: () => void;
23
- deleteFile: () => void;
24
- renameFile: (newName) => void;
25
- setlanguage: (newLanguage) => void;
26
- language: string;
27
- changed: boolean;
28
- reloadString: string;
29
- togglePanel: (panel: string) => void;
30
- isPanelVisible: (panel: string) => boolean;
31
- disableLog?: boolean; disablePreview?: boolean; disableReload?: boolean;
32
- }
33
-
34
- export function FileEditor({ disableLog, disablePreview, disableReload, togglePanel, isPanelVisible, apiPreview, reloadString, error, revertFile, changed, setlanguage, saveFile, deleteFile, renameFile, current, path, previewPath, content, contentchange, closeFile, language }: FileEditorProps) {
35
- //console.log("FileEditor [%s]", path);
36
- const iFrameRef = jsx.useRef();
37
- const scrollRef = jsx.useRef();
38
- const [scroll, setScroll] = useScroll();
39
-
40
- jsx.useEffect(() => {
41
- if (scrollRef.current) {
42
- (scrollRef.current as any).scrollLeft = scroll.scrollLeft;
43
- (scrollRef.current as any).scrollTop = scroll.scrollTop;
44
- }
45
- }, [scrollRef.current]);
46
-
47
- jsx.useEffect(() => {
48
- if (current && scrollRef.current) {
49
- setScroll({
50
- scrollLeft: (scrollRef.current as any).scrollLeft,
51
- scrollTop: (scrollRef.current as any).scrollTop
52
- }, true);
53
- }
54
- }, [current]);
55
-
56
- jsx.useEffect(() => {
57
- if (iFrameRef.current) {
58
- (iFrameRef.current as any).src = "";
59
- (iFrameRef.current as any).src = previewPath;
60
- }
61
- }, [iFrameRef.current, previewPath, reloadString]);
62
-
63
- return <div class="file-editor">
64
- {content === null ? <p>loading</p> : <>
65
- <FileEditorToolbar
66
- disableLog={disableLog}
67
- disablePreview={disablePreview}
68
- disableReload={disableReload}
69
- isPanelVisible={isPanelVisible}
70
- togglePanel={togglePanel}
71
- revertFile={revertFile}
72
- closeFile={closeFile}
73
- language={language}
74
- path={path}
75
- changed={changed}
76
- saveFile={saveFile}
77
- setlanguage={setlanguage}
78
- deleteFile={deleteFile}
79
- renameFile={renameFile} />
80
- <div
81
- //class={`file-editor-content${previewPath || apiPreview ? " split" : ""}`}
82
- class="file-editor-content">
83
- <div ref={scrollRef}
84
- class={`file-editor-text-editor${previewPath || (apiPreview && apiPreview.length > 0) && isPanelVisible("right") ? " split" : ""}`}
85
- //class={`file-editor-text-editor`}
86
- onscroll={ev => {
87
- setScroll({
88
- scrollLeft: ev.target.scrollLeft,
89
- scrollTop: ev.target.scrollTop
90
- });
91
- }}>
92
- {error ?
93
- <p class="file-editor-content-error">{error}</p>
94
- : <></>}
95
- {language !== "binary" ?
96
- <HighlightTextArea
97
- tabChar=" "
98
- oncontentchange={(args: CustomEvent) => {
99
- if (contentchange) {
100
- contentchange(args.detail);
101
- }
102
- }}
103
- content={content}
104
- language={language} /> : <p>binary data not supported</p>
105
- }
106
- </div>
107
- {apiPreview && apiPreview.length > 0 ? <APIPReview
108
- isPanelVisible={isPanelVisible}
109
- apiPreview={apiPreview} /> : <></>}
110
- {previewPath && isPanelVisible("right") ? <div
111
- class={`file-editor-preview`}
112
- style={`${!isPanelVisible("right") ? "display: none;" : ""}`}>
113
- <div class="file-editor-preview-path"><a href={previewPath} target="_blank">open in new window</a></div>
114
- <iframe
115
- ref={iFrameRef}
116
- src={previewPath} sandbox="allow-scripts allow-same-origin"></iframe>
117
- </div> : <></>}
118
- </div>
119
- </>}
120
- </div>
121
- }
122
-
123
- FileEditor.asFragment = true;
124
- FileEditor.shadowInit = false;
125
-
@@ -1,26 +0,0 @@
1
-
2
- import * as jsx from "@miqro/jsx";
3
- import JSX from "@miqro/jsx";
4
-
5
- let queryTimeout2: any = null;
6
-
7
- export function useFilterQuery(): [string, (newFilter: string, inmediate?: boolean) => void] {
8
- const [filterQuery, setfilterQuery] = jsx.useQuery("filter", "");
9
- const [filter, setfilter] = jsx.useState<string>(typeof filterQuery === "string" ? filterQuery : "");
10
-
11
- return [
12
- filter,
13
- (newFilter: string, inmediate?: boolean) => {
14
- clearTimeout(queryTimeout2);
15
- if (inmediate) {
16
- setfilter(newFilter);
17
- setfilterQuery(newFilter);
18
- } else {
19
- setfilter(newFilter);
20
- queryTimeout2 = setTimeout(() => {
21
- setfilter(newFilter);
22
- setfilterQuery(newFilter);
23
- }, 1000);
24
- }
25
- }]
26
- }