@kirill.konshin/utils 0.0.18 → 0.0.20

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 (352) hide show
  1. package/.ctirc +19 -10
  2. package/.storybook/main.ts +1 -20
  3. package/.storybook/preview.ts +1 -16
  4. package/.turbo/turbo-build.log +9 -66
  5. package/CHANGELOG.md +27 -0
  6. package/README.md +6 -0
  7. package/dist/bootstrap/index.d.ts +1 -12
  8. package/dist/bootstrap/index.d.ts.map +1 -1
  9. package/dist/browser/index.d.ts +2 -0
  10. package/dist/browser/index.d.ts.map +1 -0
  11. package/dist/core/index.d.ts +1 -9
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/electron/index.d.ts +1 -2
  14. package/dist/electron/index.d.ts.map +1 -1
  15. package/dist/electron-builder/index.d.ts +1 -2
  16. package/dist/electron-builder/index.d.ts.map +1 -1
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +27 -0
  20. package/dist/mui/index.d.ts +1 -4
  21. package/dist/mui/index.d.ts.map +1 -1
  22. package/dist/next/index.d.ts +1 -5
  23. package/dist/next/index.d.ts.map +1 -1
  24. package/dist/node/index.d.ts +2 -0
  25. package/dist/node/index.d.ts.map +1 -0
  26. package/dist/react/index.d.ts +1 -5
  27. package/dist/react/index.d.ts.map +1 -1
  28. package/dist/react-native/index.d.ts +1 -3
  29. package/dist/react-native/index.d.ts.map +1 -1
  30. package/dist/tailwind/index.d.ts +1 -2
  31. package/dist/tailwind/index.d.ts.map +1 -1
  32. package/dist/worker/index.d.ts +2 -0
  33. package/dist/worker/index.d.ts.map +1 -0
  34. package/package.json +41 -99
  35. package/src/bootstrap/index.ts +2 -12
  36. package/src/browser/index.ts +2 -0
  37. package/src/core/index.ts +2 -9
  38. package/src/electron/index.ts +2 -2
  39. package/src/electron-builder/index.ts +2 -2
  40. package/src/index.ts +12 -0
  41. package/src/mui/index.ts +2 -4
  42. package/src/next/index.ts +2 -5
  43. package/src/node/index.ts +2 -0
  44. package/src/react/index.ts +2 -5
  45. package/src/react-native/index.ts +2 -3
  46. package/src/tailwind/index.ts +2 -2
  47. package/src/worker/index.ts +2 -0
  48. package/tsconfig.json +2 -14
  49. package/vite.config.ts +2 -56
  50. package/.turbo/turbo-test.log +0 -171
  51. package/builders/.swcrc +0 -18
  52. package/builders/build.config.ts +0 -11
  53. package/builders/bun.build.js +0 -23
  54. package/builders/package.json +0 -209
  55. package/builders/perf.mjs +0 -63
  56. package/builders/rollup.config.mjs +0 -50
  57. package/builders/rslib.config.ts +0 -26
  58. package/builders/tsconfig.json +0 -21
  59. package/builders/tsup.config.ts +0 -20
  60. package/builders/turbo.json +0 -24
  61. package/builders/vite.config.ts +0 -37
  62. package/demo/worker-demo.ts +0 -73
  63. package/dist/bootstrap/adaptiveContainer.d.ts +0 -3
  64. package/dist/bootstrap/adaptiveContainer.d.ts.map +0 -1
  65. package/dist/bootstrap/adaptiveContainer.js +0 -11
  66. package/dist/bootstrap/adaptiveContainer.js.map +0 -1
  67. package/dist/bootstrap/controls.d.ts +0 -38
  68. package/dist/bootstrap/controls.d.ts.map +0 -1
  69. package/dist/bootstrap/controls.js +0 -78
  70. package/dist/bootstrap/controls.js.map +0 -1
  71. package/dist/bootstrap/controls.stories.d.ts +0 -9
  72. package/dist/bootstrap/controls.stories.d.ts.map +0 -1
  73. package/dist/bootstrap/error.d.ts +0 -7
  74. package/dist/bootstrap/error.d.ts.map +0 -1
  75. package/dist/bootstrap/error.js +0 -32
  76. package/dist/bootstrap/error.js.map +0 -1
  77. package/dist/bootstrap/error.stories.d.ts +0 -8
  78. package/dist/bootstrap/error.stories.d.ts.map +0 -1
  79. package/dist/bootstrap/field.d.ts +0 -9
  80. package/dist/bootstrap/field.d.ts.map +0 -1
  81. package/dist/bootstrap/field.js +0 -29
  82. package/dist/bootstrap/field.js.map +0 -1
  83. package/dist/bootstrap/field.stories.d.ts +0 -8
  84. package/dist/bootstrap/field.stories.d.ts.map +0 -1
  85. package/dist/bootstrap/footer.d.ts +0 -10
  86. package/dist/bootstrap/footer.d.ts.map +0 -1
  87. package/dist/bootstrap/footer.js +0 -40
  88. package/dist/bootstrap/footer.js.map +0 -1
  89. package/dist/bootstrap/globalLoading.d.ts +0 -4
  90. package/dist/bootstrap/globalLoading.d.ts.map +0 -1
  91. package/dist/bootstrap/globalLoading.js +0 -10
  92. package/dist/bootstrap/globalLoading.js.map +0 -1
  93. package/dist/bootstrap/globalLoading.stories.d.ts +0 -7
  94. package/dist/bootstrap/globalLoading.stories.d.ts.map +0 -1
  95. package/dist/bootstrap/index.js +0 -35
  96. package/dist/bootstrap/loading.d.ts +0 -8
  97. package/dist/bootstrap/loading.d.ts.map +0 -1
  98. package/dist/bootstrap/loading.js +0 -18
  99. package/dist/bootstrap/loading.js.map +0 -1
  100. package/dist/bootstrap/loading.stories.d.ts +0 -9
  101. package/dist/bootstrap/loading.stories.d.ts.map +0 -1
  102. package/dist/bootstrap/responsiveHelper.d.ts +0 -7
  103. package/dist/bootstrap/responsiveHelper.d.ts.map +0 -1
  104. package/dist/bootstrap/responsiveHelper.js +0 -46
  105. package/dist/bootstrap/responsiveHelper.js.map +0 -1
  106. package/dist/bootstrap/screen.d.ts +0 -20
  107. package/dist/bootstrap/screen.d.ts.map +0 -1
  108. package/dist/bootstrap/screen.js +0 -79
  109. package/dist/bootstrap/screen.js.map +0 -1
  110. package/dist/bootstrap/screen.stories.d.ts +0 -14
  111. package/dist/bootstrap/screen.stories.d.ts.map +0 -1
  112. package/dist/bootstrap/toaster.d.ts +0 -9
  113. package/dist/bootstrap/toaster.d.ts.map +0 -1
  114. package/dist/bootstrap/toaster.js +0 -37
  115. package/dist/bootstrap/toaster.js.map +0 -1
  116. package/dist/bootstrap/toaster.stories.d.ts +0 -8
  117. package/dist/bootstrap/toaster.stories.d.ts.map +0 -1
  118. package/dist/bootstrap/useModal.d.ts +0 -22
  119. package/dist/bootstrap/useModal.d.ts.map +0 -1
  120. package/dist/bootstrap/useModal.js +0 -50
  121. package/dist/bootstrap/useModal.js.map +0 -1
  122. package/dist/bootstrap/useModal.stories.d.ts +0 -9
  123. package/dist/bootstrap/useModal.stories.d.ts.map +0 -1
  124. package/dist/bootstrap/useWrappedForm.d.ts +0 -14
  125. package/dist/bootstrap/useWrappedForm.d.ts.map +0 -1
  126. package/dist/bootstrap/useWrappedForm.js +0 -32
  127. package/dist/bootstrap/useWrappedForm.js.map +0 -1
  128. package/dist/core/cache.d.ts +0 -120
  129. package/dist/core/cache.d.ts.map +0 -1
  130. package/dist/core/cache.js +0 -107
  131. package/dist/core/cache.js.map +0 -1
  132. package/dist/core/cache.test.d.ts +0 -2
  133. package/dist/core/cache.test.d.ts.map +0 -1
  134. package/dist/core/errors.d.ts +0 -2
  135. package/dist/core/errors.d.ts.map +0 -1
  136. package/dist/core/errors.js +0 -15
  137. package/dist/core/errors.js.map +0 -1
  138. package/dist/core/files.d.ts +0 -3
  139. package/dist/core/files.d.ts.map +0 -1
  140. package/dist/core/files.js +0 -27
  141. package/dist/core/files.js.map +0 -1
  142. package/dist/core/index.js +0 -34
  143. package/dist/core/index.js.map +0 -1
  144. package/dist/core/ls.d.ts +0 -6
  145. package/dist/core/ls.d.ts.map +0 -1
  146. package/dist/core/ls.js +0 -12
  147. package/dist/core/ls.js.map +0 -1
  148. package/dist/core/measure.d.ts +0 -35
  149. package/dist/core/measure.d.ts.map +0 -1
  150. package/dist/core/measure.js +0 -56
  151. package/dist/core/measure.js.map +0 -1
  152. package/dist/core/mutex.d.ts +0 -6
  153. package/dist/core/mutex.d.ts.map +0 -1
  154. package/dist/core/mutex.js +0 -26
  155. package/dist/core/mutex.js.map +0 -1
  156. package/dist/core/worker.d.ts +0 -98
  157. package/dist/core/worker.d.ts.map +0 -1
  158. package/dist/core/worker.js +0 -240
  159. package/dist/core/worker.js.map +0 -1
  160. package/dist/core/worker.test.d.ts +0 -2
  161. package/dist/core/worker.test.d.ts.map +0 -1
  162. package/dist/core/workerUtils.d.ts +0 -3
  163. package/dist/core/workerUtils.d.ts.map +0 -1
  164. package/dist/core/workerUtils.js +0 -31
  165. package/dist/core/workerUtils.js.map +0 -1
  166. package/dist/core/wrpc.d.ts +0 -45
  167. package/dist/core/wrpc.d.ts.map +0 -1
  168. package/dist/core/wrpc.fixture.d.ts +0 -29
  169. package/dist/core/wrpc.fixture.d.ts.map +0 -1
  170. package/dist/core/wrpc.js +0 -242
  171. package/dist/core/wrpc.js.map +0 -1
  172. package/dist/core/wrpc.test.d.ts +0 -1
  173. package/dist/core/wrpc.test.d.ts.map +0 -1
  174. package/dist/electron/createWindow.d.ts +0 -23
  175. package/dist/electron/createWindow.d.ts.map +0 -1
  176. package/dist/electron/createWindow.js +0 -160
  177. package/dist/electron/createWindow.js.map +0 -1
  178. package/dist/electron/index.js +0 -9
  179. package/dist/electron/index.js.map +0 -1
  180. package/dist/electron/updater.d.ts +0 -2
  181. package/dist/electron/updater.d.ts.map +0 -1
  182. package/dist/electron/updater.js +0 -47
  183. package/dist/electron/updater.js.map +0 -1
  184. package/dist/electron-builder/builder.d.ts +0 -8
  185. package/dist/electron-builder/builder.d.ts.map +0 -1
  186. package/dist/electron-builder/builder.js +0 -130
  187. package/dist/electron-builder/builder.js.map +0 -1
  188. package/dist/electron-builder/images.d.ts +0 -7
  189. package/dist/electron-builder/images.d.ts.map +0 -1
  190. package/dist/electron-builder/images.js +0 -25
  191. package/dist/electron-builder/images.js.map +0 -1
  192. package/dist/electron-builder/index.js +0 -7
  193. package/dist/electron-builder/index.js.map +0 -1
  194. package/dist/mui/formControlFieldset.d.ts +0 -5
  195. package/dist/mui/formControlFieldset.d.ts.map +0 -1
  196. package/dist/mui/formControlFieldset.js +0 -28
  197. package/dist/mui/formControlFieldset.js.map +0 -1
  198. package/dist/mui/formControlFieldset.stories.d.ts +0 -7
  199. package/dist/mui/formControlFieldset.stories.d.ts.map +0 -1
  200. package/dist/mui/formLabelLegend.d.ts +0 -4
  201. package/dist/mui/formLabelLegend.d.ts.map +0 -1
  202. package/dist/mui/formLabelLegend.js +0 -12
  203. package/dist/mui/formLabelLegend.js.map +0 -1
  204. package/dist/mui/genericControl.d.ts +0 -7
  205. package/dist/mui/genericControl.d.ts.map +0 -1
  206. package/dist/mui/genericControl.js +0 -21
  207. package/dist/mui/genericControl.js.map +0 -1
  208. package/dist/mui/index.js +0 -11
  209. package/dist/mui/index.js.map +0 -1
  210. package/dist/mui/readOnly.d.ts +0 -6
  211. package/dist/mui/readOnly.d.ts.map +0 -1
  212. package/dist/mui/readOnly.js +0 -7
  213. package/dist/mui/readOnly.js.map +0 -1
  214. package/dist/next/appLink.d.ts +0 -8
  215. package/dist/next/appLink.d.ts.map +0 -1
  216. package/dist/next/appLink.js +0 -34
  217. package/dist/next/appLink.js.map +0 -1
  218. package/dist/next/index.js +0 -15
  219. package/dist/next/index.js.map +0 -1
  220. package/dist/next/measure.d.ts +0 -15
  221. package/dist/next/measure.d.ts.map +0 -1
  222. package/dist/next/measure.js +0 -9
  223. package/dist/next/measure.js.map +0 -1
  224. package/dist/next/noSSR.d.ts +0 -5
  225. package/dist/next/noSSR.d.ts.map +0 -1
  226. package/dist/next/noSSR.js +0 -15
  227. package/dist/next/noSSR.js.map +0 -1
  228. package/dist/next/redirect.d.ts +0 -6
  229. package/dist/next/redirect.d.ts.map +0 -1
  230. package/dist/next/useIsInner.d.ts +0 -3
  231. package/dist/next/useIsInner.d.ts.map +0 -1
  232. package/dist/next/useIsInner.js +0 -15
  233. package/dist/next/useIsInner.js.map +0 -1
  234. package/dist/react/apiCall.d.ts +0 -6
  235. package/dist/react/apiCall.d.ts.map +0 -1
  236. package/dist/react/apiCall.js +0 -24
  237. package/dist/react/apiCall.js.map +0 -1
  238. package/dist/react/form/client.d.ts +0 -7
  239. package/dist/react/form/client.d.ts.map +0 -1
  240. package/dist/react/form/client.js +0 -46
  241. package/dist/react/form/client.js.map +0 -1
  242. package/dist/react/form/form.d.ts +0 -45
  243. package/dist/react/form/form.d.ts.map +0 -1
  244. package/dist/react/form/form.js +0 -69
  245. package/dist/react/form/form.js.map +0 -1
  246. package/dist/react/form/index.d.ts +0 -3
  247. package/dist/react/form/index.d.ts.map +0 -1
  248. package/dist/react/index.js +0 -25
  249. package/dist/react/index.js.map +0 -1
  250. package/dist/react/keyboard.d.ts +0 -11
  251. package/dist/react/keyboard.d.ts.map +0 -1
  252. package/dist/react/keyboard.js +0 -38
  253. package/dist/react/keyboard.js.map +0 -1
  254. package/dist/react/useFetch.d.ts +0 -2
  255. package/dist/react/useFetch.d.ts.map +0 -1
  256. package/dist/react/useFetch.js +0 -20
  257. package/dist/react/useFetch.js.map +0 -1
  258. package/dist/react/useFetcher.d.ts +0 -10
  259. package/dist/react/useFetcher.d.ts.map +0 -1
  260. package/dist/react/useFetcher.js +0 -43
  261. package/dist/react/useFetcher.js.map +0 -1
  262. package/dist/react-native/index.js +0 -9
  263. package/dist/react-native/index.js.map +0 -1
  264. package/dist/react-native/share.d.ts +0 -9
  265. package/dist/react-native/share.d.ts.map +0 -1
  266. package/dist/react-native/share.js +0 -23
  267. package/dist/react-native/share.js.map +0 -1
  268. package/dist/react-native/update.d.ts +0 -4
  269. package/dist/react-native/update.d.ts.map +0 -1
  270. package/dist/react-native/update.js +0 -40
  271. package/dist/react-native/update.js.map +0 -1
  272. package/dist/react-native/useAppState.d.ts +0 -2
  273. package/dist/react-native/useAppState.d.ts.map +0 -1
  274. package/dist/react-native/useAppState.js +0 -18
  275. package/dist/react-native/useAppState.js.map +0 -1
  276. package/dist/tailwind/fullpage.d.ts +0 -7
  277. package/dist/tailwind/fullpage.d.ts.map +0 -1
  278. package/dist/tailwind/fullpage.js +0 -14
  279. package/dist/tailwind/fullpage.js.map +0 -1
  280. package/dist/tailwind/index.js +0 -7
  281. package/dist/tailwind/index.js.map +0 -1
  282. package/dist/tailwind/responsiveHelper.d.ts +0 -2
  283. package/dist/tailwind/responsiveHelper.d.ts.map +0 -1
  284. package/dist/tailwind/responsiveHelper.js +0 -16
  285. package/dist/tailwind/responsiveHelper.js.map +0 -1
  286. package/src/bootstrap/adaptiveContainer.tsx +0 -12
  287. package/src/bootstrap/controls.stories.tsx +0 -62
  288. package/src/bootstrap/controls.tsx +0 -119
  289. package/src/bootstrap/error.stories.tsx +0 -34
  290. package/src/bootstrap/error.tsx +0 -40
  291. package/src/bootstrap/field.stories.tsx +0 -42
  292. package/src/bootstrap/field.tsx +0 -35
  293. package/src/bootstrap/footer.tsx +0 -49
  294. package/src/bootstrap/globalLoading.stories.tsx +0 -25
  295. package/src/bootstrap/globalLoading.tsx +0 -17
  296. package/src/bootstrap/loading.stories.tsx +0 -35
  297. package/src/bootstrap/loading.tsx +0 -22
  298. package/src/bootstrap/main.scss +0 -86
  299. package/src/bootstrap/responsiveHelper.tsx +0 -50
  300. package/src/bootstrap/screen.stories.tsx +0 -160
  301. package/src/bootstrap/screen.tsx +0 -144
  302. package/src/bootstrap/toaster.stories.tsx +0 -32
  303. package/src/bootstrap/toaster.tsx +0 -38
  304. package/src/bootstrap/useModal.stories.tsx +0 -51
  305. package/src/bootstrap/useModal.tsx +0 -88
  306. package/src/bootstrap/useWrappedForm.ts +0 -40
  307. package/src/core/README.md +0 -91
  308. package/src/core/cache.test.ts +0 -121
  309. package/src/core/cache.ts +0 -239
  310. package/src/core/errors.ts +0 -14
  311. package/src/core/files.ts +0 -25
  312. package/src/core/ls.ts +0 -11
  313. package/src/core/measure.ts +0 -61
  314. package/src/core/mutex.ts +0 -22
  315. package/src/core/worker.test.ts +0 -197
  316. package/src/core/worker.ts +0 -340
  317. package/src/core/workerUtils.ts +0 -32
  318. package/src/core/wrpc.fixture.ts +0 -72
  319. package/src/core/wrpc.test.ts +0 -225
  320. package/src/core/wrpc.ts +0 -359
  321. package/src/electron/README.md +0 -13
  322. package/src/electron/createWindow.ts +0 -234
  323. package/src/electron/updater.ts +0 -54
  324. package/src/electron-builder/builder.ts +0 -150
  325. package/src/electron-builder/images.ts +0 -33
  326. package/src/mui/README.md +0 -3
  327. package/src/mui/formControlFieldset.stories.tsx +0 -71
  328. package/src/mui/formControlFieldset.tsx +0 -26
  329. package/src/mui/formLabelLegend.tsx +0 -11
  330. package/src/mui/genericControl.tsx +0 -20
  331. package/src/mui/readOnly.tsx +0 -6
  332. package/src/next/appLink.tsx +0 -40
  333. package/src/next/measure.ts +0 -7
  334. package/src/next/noSSR.tsx +0 -17
  335. package/src/next/redirect.tsx +0 -13
  336. package/src/next/useIsInner.ts +0 -13
  337. package/src/react/apiCall.ts +0 -25
  338. package/src/react/form/client.tsx +0 -62
  339. package/src/react/form/form.tsx +0 -129
  340. package/src/react/form/index.ts +0 -2
  341. package/src/react/keyboard.tsx +0 -49
  342. package/src/react/useFetch.ts +0 -29
  343. package/src/react/useFetcher.ts +0 -49
  344. package/src/react-native/share.ts +0 -31
  345. package/src/react-native/update.tsx +0 -40
  346. package/src/react-native/useAppState.ts +0 -18
  347. package/src/tailwind/README.md +0 -8
  348. package/src/tailwind/fullpage.tsx +0 -11
  349. package/src/tailwind/responsiveHelper.tsx +0 -16
  350. package/src-todo/auth0.tsx +0 -177
  351. package/vite.exports.ts +0 -121
  352. /package/dist/{bootstrap/index.js.map → index.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrpc.js","sources":["../../src/core/wrpc.ts"],"sourcesContent":["import { getTransferrable } from './workerUtils';\n\n// Types\n\nexport type Responders = { [key: string]: (arg?: any) => Generator<any> | AsyncGenerator<any> | Promise<any> | any };\n\nexport type Context = {\n message: string;\n id: string;\n signalName?: string;\n done?: boolean;\n abort?: string;\n error?: boolean;\n ack?: boolean;\n promise?: boolean;\n};\n\nexport type Event = MessageEvent<{ ctx: Context; payload: any | Error }>;\n\nexport type WorkerLike = {\n postMessage: (payload: any, transferable: any[]) => void;\n addEventListener: (\n event: string,\n listener: (e: any) => void,\n options?: { signal?: AbortSignal; once?: boolean },\n ) => void;\n removeEventListener: (event: string, listener: (e: any) => void) => void;\n};\n\nexport enum LogLevel {\n disabled = 0,\n error = 1,\n lifecycle = 2,\n detail = 3,\n transport = 4,\n}\n\n// Helpers\n\nexport function deriveController(signal?: AbortSignal): [AbortController, AbortSignal] {\n const controller = new AbortController();\n return [controller, AbortSignal.any([controller.signal, signal].filter(Boolean) as AbortSignal[])];\n}\n\nexport function rejectOnSignal(promise: Promise<any>, signal: AbortSignal) {\n return Promise.race([\n promise,\n new Promise<Event['data']>((resolve, reject) => {\n signal.addEventListener('abort', () => reject('RaceAborted:' + signal.reason), { once: true, signal });\n }),\n ]);\n}\n\n// Lib\n\nexport function wrpc({\n debug = LogLevel.disabled,\n name = (globalThis as any).importScripts ? 'RESPONDER' : 'CALLER',\n} = {}) {\n // Logger\n\n function logger(type: string) {\n return (level: number, ctx: Context | null, ...args: any[]) => {\n if (!debug || debug < level) return;\n const { id, message, ...restCtx } = ctx || {};\n console[type](name, message || '*', id || '*', ...args, restCtx);\n };\n }\n\n const log = logger('log');\n const logWarn = logger('warn');\n const logError = logger('error');\n\n // Service\n\n function send(worker: WorkerLike, ctx: Context, payload?: any) {\n log(LogLevel.transport, ctx, 'SEND', payload, typeof payload);\n worker.postMessage({ ctx, payload }, getTransferrable(payload));\n }\n\n //TODO Listener error handling\n function listen(\n worker: WorkerLike,\n context: Context | null,\n listener: (event: Event['data']) => void,\n signal: AbortSignal,\n once: boolean = false,\n ) {\n signal.addEventListener(\n 'abort',\n () => logWarn(LogLevel.detail, context, 'LISTEN SIGNAL ABORT', signal.reason),\n {\n signal,\n once: true,\n },\n );\n worker.addEventListener(\n 'message',\n ({ data }: Event) => {\n log(LogLevel.transport, context, 'LISTEN EVENT', data);\n // no context = listen all, or matching context\n if (!context || (data?.ctx?.message === context.message && data.ctx?.id === context.id)) listener(data);\n },\n { signal, once },\n );\n }\n\n function waitFor(\n worker: WorkerLike,\n ctx: Context,\n condition: (data: Event['data']) => boolean = (data) => true,\n signal: AbortSignal,\n ) {\n const [waitController, waitSignal] = deriveController(signal);\n\n return new Promise<Event['data']>((res) =>\n listen(\n worker,\n ctx,\n (data) => {\n if (!condition(data)) return;\n waitController.abort('WaitFinished');\n res(data);\n },\n waitSignal,\n ),\n );\n }\n\n // Responder\n\n //TODO Name arg\n function createResponder<T extends Responders>(worker: WorkerLike, responders: T) {\n const mainController = new AbortController();\n\n worker.addEventListener('messageerror', (e) => logError(LogLevel.error, null, 'MESSAGE ERROR', e), {\n signal: mainController.signal,\n });\n\n listen(\n worker,\n null,\n async ({ ctx, payload = {} }) => {\n if (!ctx || !ctx.message || !ctx.id || ctx.abort || ctx.ack) return; // ignore invalid and service messages\n try {\n const responder = responders[ctx.message];\n\n if (!responder) throw new Error('Unknown responder', { cause: ctx });\n\n const [subController, subSignal] = deriveController(mainController.signal);\n\n // always recover signal so that promises also can abort\n if (ctx.signalName) payload[ctx.signalName] = subSignal;\n\n const iterator = responder(payload); // no await!\n\n log(LogLevel.lifecycle, ctx, 'START', iterator);\n\n // PROMISE\n\n // https://stackoverflow.com/a/19660350/5125659 the only right way is to call function and see what it returned\n if (!iterator[Symbol.asyncIterator] && !iterator[Symbol.iterator]) {\n // Errors are caught in generic handler\n send(worker, { ...ctx, promise: true }, await rejectOnSignal(iterator, subSignal));\n log(LogLevel.detail, ctx, 'PROMISE RESOLVED');\n return;\n }\n\n // GENERATOR\n\n try {\n // Listen outside the loop to react immediately\n // Could be a wait for since abort is a one-off, but listeners are disposed by signal anyway, and we don't need to block the async thread\n listen(\n worker,\n ctx,\n (data) => {\n if (!data.ctx.abort) return;\n subController.abort(data.ctx.abort);\n logWarn(LogLevel.lifecycle, ctx, 'GOT ABORT');\n },\n subSignal,\n );\n\n let res: any;\n let nextPayload: any = payload; // does not matter, will be ignored anyway\n do {\n res = await rejectOnSignal(iterator.next(nextPayload), subSignal);\n\n send(worker, { ...ctx, done: res.done }, res.value);\n\n if (res.done) {\n subController.abort('Done');\n break;\n }\n\n const nextData = await rejectOnSignal(\n waitFor(worker, ctx, (data) => !!data.ctx.ack, subSignal),\n subSignal,\n );\n nextPayload = nextData.payload;\n\n log(LogLevel.detail, ctx, 'LOOP ACK');\n } while (!res.done && !subSignal.aborted);\n } catch (e) {\n if (!subSignal.aborted && !e.message.includes('RaceAborted')) {\n logError(LogLevel.error, ctx, 'LOOP ERROR', e);\n send(worker, { ...ctx, error: true, done: true }, e);\n }\n } finally {\n log(LogLevel.detail, ctx, 'LOOP DONE');\n }\n } catch (e) {\n // Generator-specific error handling\n logError(LogLevel.error, ctx, 'ERROR', e);\n send(worker, { ...ctx, error: true, done: true }, e); // Generic error handling\n } finally {\n log(LogLevel.detail, ctx, 'DONE');\n }\n },\n mainController.signal,\n );\n\n function stop() {\n mainController.abort('Stop');\n }\n\n return { responders, stop }; // responders needed for typing\n }\n\n // Caller\n\n //TODO Name arg\n function createCaller<T extends Responders>(worker: WorkerLike, responders: T): T {\n worker.addEventListener('messageerror', (e) => logError(LogLevel.error, null, 'MESSAGE ERROR', e));\n\n //TODO Stop\n\n return new Proxy<T>(responders as any, {\n get(target, prop, receiver) {\n function gen(payload: any) {\n const ctx: Context = { message: prop.toString(), id: crypto.randomUUID() };\n\n let signal: AbortSignal = null as any;\n\n if (payload && Object.is(payload, Object(payload))) {\n for (const [key, value] of Object.entries(payload)) {\n if (value instanceof AbortSignal) {\n log(LogLevel.detail, ctx, 'FOUND SIGNAL', key);\n ctx.signalName = key;\n signal = value;\n payload[key] = null; // will be recovered in responder\n }\n }\n }\n\n const [mainController, mainSignal] = deriveController(signal);\n\n const cancel = (notify: boolean, reason: string = '') => {\n if (mainController.signal.aborted) return;\n logWarn(LogLevel.lifecycle, ctx, 'CANCEL', reason, notify);\n if (reason) mainController.abort(reason); // stop listening\n if (notify) send(worker, { ...ctx, abort: reason }); // worker will break & acknowledge, but it's not important\n };\n\n // Generator\n\n const [promiseController, promiseSignal] = deriveController(mainSignal);\n\n const promise = waitFor(\n worker,\n ctx,\n (data) => !!data.ctx.promise || !!data.ctx.error,\n promiseSignal,\n ).then(({ ctx, payload }) => {\n if (ctx.error) {\n logError(LogLevel.error, ctx, 'PROMISE ERROR', payload);\n throw payload;\n }\n log(LogLevel.lifecycle, ctx, 'PROMISE RESOLVED', payload);\n return payload;\n });\n\n async function* generator() {\n let done = false;\n try {\n // React immediately\n mainSignal.addEventListener('abort', () => cancel(true, mainSignal.reason), {\n once: true,\n signal: mainSignal,\n });\n\n log(LogLevel.detail, ctx, 'GENERATOR START');\n promiseController.abort('GeneratorUsed');\n\n do {\n const data = await rejectOnSignal(\n waitFor(worker, ctx, undefined, mainSignal),\n mainSignal,\n );\n\n const { ctx: ctxIn, payload: value } = data;\n\n log(LogLevel.lifecycle, ctx, 'EVENT', mainSignal.aborted, ctxIn, value);\n\n if (ctxIn.promise) {\n // && !ctxIn.error\n // cancel(false, 'Resolved');\n // return payloadIn;\n logError(LogLevel.error, ctx, 'ERROR', 'Unexpected promise in generator', data);\n throw new Error('Unexpected promise in generator', { cause: data });\n }\n\n if (ctxIn.error) {\n logError(LogLevel.error, ctx, 'ERROR', data);\n cancel(false, 'Error');\n throw value;\n }\n\n if (ctxIn.done) {\n done = true;\n return value;\n } else {\n const nextPayload = yield value;\n if (!mainSignal.aborted) send(worker, { ...ctx, ack: true }, nextPayload);\n }\n } while (!mainSignal.aborted);\n } finally {\n // prevent further cycles in worker once main is closed/cancelled/aborted\n log(LogLevel.detail, ctx, 'DONE');\n cancel(true, mainSignal.aborted ? mainSignal.reason : done ? 'Done' : 'Break');\n }\n }\n\n const iterator = generator();\n\n send(worker, ctx, payload);\n\n // FIXME Nasty hack, return both iterator and promise\n // Consuming code will get both, but IDE should show only proper type\n // Consuming code will likely use only one except someone calls `for await ... of await` which is not useful in any case\n iterator['then'] = promise.then.bind(promise);\n iterator['catch'] = promise.catch.bind(promise);\n iterator['finally'] = promise.finally.bind(promise);\n return iterator;\n }\n\n //TODO mimic-function(gen, fn); but no access to original\n Object.defineProperty(gen, 'name', { value: prop.toString() });\n\n (target as any)[prop] = gen; // so that fn is visible after use, maybe not needed\n\n return gen;\n },\n }) as T;\n }\n\n return { createResponder, createCaller };\n}\n"],"names":["LogLevel","ctx","payload"],"mappings":"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"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=wrpc.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrpc.test.d.ts","sourceRoot":"","sources":["../../src/core/wrpc.test.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC"}
@@ -1,23 +0,0 @@
1
- import { BrowserWindow } from 'electron';
2
- export declare const isDev: boolean;
3
- export declare const appPath: string;
4
- export declare function createWindow({ width, height, disableSecurity, disableSecurityWarnings, quitOnClose, onOpen, onClose, localhostUrl, productionUrl, // in this mode Electron acts as a browser for remote app
5
- webPath, // must conform to what is in electron-builder.js files section
6
- useStaticInDev, updater, rememberBounds, }?: {
7
- width?: number;
8
- height?: number;
9
- disableSecurity?: boolean;
10
- disableSecurityWarnings?: boolean;
11
- quitOnClose?: boolean;
12
- onOpen?: (win: BrowserWindow) => void;
13
- onClose?: (win: BrowserWindow) => void;
14
- localhostUrl?: string;
15
- productionUrl?: string;
16
- webPath?: string;
17
- useStaticInDev?: boolean;
18
- updater?: boolean;
19
- rememberBounds?: boolean;
20
- }): {
21
- readonly mainWindow: BrowserWindow | null;
22
- };
23
- //# sourceMappingURL=createWindow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createWindow.d.ts","sourceRoot":"","sources":["../../src/electron/createWindow.ts"],"names":[],"mappings":"AAMA,OAAO,EAAa,aAAa,EAA8B,MAAM,UAAU,CAAC;AAKhF,eAAO,MAAM,KAAK,SAA4C,CAAC;AAC/D,eAAO,MAAM,OAAO,QAAmB,CAAC;AAiBxC,wBAAgB,YAAY,CAAC,EACzB,KAAY,EACZ,MAAa,EACb,eAAsB,EACtB,uBAA8B,EAC9B,WAAkB,EAClB,MAAM,EACN,OAAO,EACP,YAAsC,EACtC,aAAkB,EAAE,yDAAyD;AAC7E,OAAsC,EAAE,+DAA+D;AACvG,cAAsB,EACtB,OAAe,EACf,cAAqB,GACxB,GAAE;IACC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CACvB;;EAgLL"}
@@ -1,160 +0,0 @@
1
- import path from "node:path";
2
- import https from "node:https";
3
- import http from "node:http";
4
- import fs from "node:fs";
5
- import "node:fs/promises";
6
- import url from "node:url";
7
- import { app, BrowserWindow, protocol, shell, Menu } from "electron";
8
- import defaultMenu from "electron-default-menu";
9
- import Store from "electron-store";
10
- import { checkForUpdates } from "./updater.js";
11
- const isDev = process.env["NODE_ENV"] === "development";
12
- const appPath = app.getAppPath();
13
- const FILE_NOT_FOUND = -6;
14
- function createWindow({
15
- width = 1e3,
16
- height = 1e3,
17
- disableSecurity = true,
18
- disableSecurityWarnings = true,
19
- quitOnClose = true,
20
- onOpen,
21
- onClose,
22
- localhostUrl = "http://localhost:3000",
23
- productionUrl = "",
24
- // in this mode Electron acts as a browser for remote app
25
- webPath = path.resolve(appPath, "web"),
26
- // must conform to what is in electron-builder.js files section
27
- useStaticInDev = false,
28
- updater = false,
29
- rememberBounds = true
30
- } = {}) {
31
- let mainWindow = null;
32
- console.log("[APP] Starting Electron", {
33
- isDev,
34
- appPath,
35
- useStaticInDev,
36
- localhostUrl,
37
- productionUrl,
38
- webPath,
39
- updater,
40
- rememberBounds,
41
- quitOnClose,
42
- disableSecurity,
43
- disableSecurityWarnings
44
- });
45
- if (!productionUrl && !webPath) {
46
- throw new Error("productionUrl or webPath must be defined");
47
- }
48
- if (productionUrl && webPath) {
49
- throw new Error("productionUrl and webPath cannot be used together");
50
- }
51
- if (!localhostUrl) {
52
- throw new Error("localhostUrl must be defined");
53
- }
54
- const store = new Store({
55
- schema: {
56
- bounds: {
57
- type: "object",
58
- properties: {
59
- // Docs: https://electronjs.org/docs/api/structures/rectangle
60
- height: { type: "number" },
61
- width: { type: "number" },
62
- x: { type: "number" },
63
- y: { type: "number" }
64
- }
65
- }
66
- }
67
- });
68
- if (disableSecurityWarnings) process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";
69
- process.env["ELECTRON_ENABLE_LOGGING"] = "true";
70
- process.on("SIGTERM", () => process.exit(0));
71
- process.on("SIGINT", () => process.exit(0));
72
- const openDevTools = () => {
73
- if (!mainWindow) return;
74
- mainWindow.setSize(width + 800, height);
75
- mainWindow.center();
76
- mainWindow.webContents.openDevTools();
77
- };
78
- const createWindow2 = async () => {
79
- mainWindow = new BrowserWindow({
80
- width,
81
- height,
82
- icon: path.resolve(appPath, "assets/icon.png"),
83
- webPreferences: {
84
- nodeIntegration: false,
85
- // is default value after Electron v5
86
- contextIsolation: true,
87
- // protect against prototype pollution
88
- webSecurity: !disableSecurity,
89
- devTools: true
90
- },
91
- ...rememberBounds ? store.get("bounds") : {}
92
- });
93
- mainWindow.on("move", () => rememberBounds && mainWindow && store.set("bounds", mainWindow.getBounds()));
94
- mainWindow.once("ready-to-show", () => isDev && openDevTools());
95
- let interceptor = null;
96
- if (webPath && (!isDev || useStaticInDev)) {
97
- console.log(`[APP] Static Server Enabled, ${localhostUrl} will be intercepted to ${webPath}`);
98
- protocol.interceptStreamProtocol("http", (request, callback) => {
99
- if (request.url.startsWith(localhostUrl)) {
100
- let fileUrl = url.parse(request.url, false).pathname;
101
- if (!fileUrl) return callback({ error: FILE_NOT_FOUND });
102
- if (fileUrl === "/") fileUrl = "index.html";
103
- const filePath = path.join(webPath, fileUrl);
104
- const relativePath = path.relative(webPath, fileUrl);
105
- const isSafe = !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
106
- if (!isSafe && !isDev) return callback({ error: FILE_NOT_FOUND });
107
- console.log("[APP] Static Server", fileUrl, "->", filePath);
108
- callback(fs.createReadStream(filePath));
109
- return true;
110
- }
111
- (request.url.startsWith("https") ? https : http).get(request.url, callback);
112
- return true;
113
- });
114
- interceptor = () => protocol.uninterceptProtocol("http");
115
- }
116
- mainWindow.on("closed", () => {
117
- interceptor == null ? void 0 : interceptor();
118
- onClose == null ? void 0 : onClose(mainWindow);
119
- mainWindow = null;
120
- interceptor = null;
121
- });
122
- mainWindow.webContents.setWindowOpenHandler(({ url: url2 }) => {
123
- shell.openExternal(url2).catch((e) => console.error(e));
124
- return { action: "deny" };
125
- });
126
- const menu = defaultMenu(app, shell);
127
- if (updater) {
128
- menu.at(-1).submenu.push(
129
- { type: "separator" },
130
- {
131
- label: "Check For Updates",
132
- click: checkForUpdates
133
- }
134
- );
135
- }
136
- Menu.setApplicationMenu(Menu.buildFromTemplate(menu));
137
- await app.whenReady();
138
- onOpen == null ? void 0 : onOpen(mainWindow);
139
- if (!onOpen && localhostUrl) {
140
- await mainWindow.loadURL(productionUrl && !isDev ? productionUrl : `${localhostUrl}/`);
141
- }
142
- console.log("[APP] Main Window Open");
143
- };
144
- app.on("ready", createWindow2);
145
- app.on("window-all-closed", () => {
146
- if (process.platform !== "darwin" || quitOnClose) app.quit();
147
- });
148
- app.on("activate", () => BrowserWindow.getAllWindows().length === 0 && !mainWindow && createWindow2());
149
- return {
150
- get mainWindow() {
151
- return mainWindow;
152
- }
153
- };
154
- }
155
- export {
156
- appPath,
157
- createWindow,
158
- isDev
159
- };
160
- //# sourceMappingURL=createWindow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createWindow.js","sources":["../../src/electron/createWindow.ts"],"sourcesContent":["import path from 'node:path';\nimport https from 'node:https';\nimport http from 'node:http';\nimport fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport url from 'node:url';\nimport { Menu, app, BrowserWindow, shell, protocol, Rectangle } from 'electron';\nimport defaultMenu from 'electron-default-menu';\nimport Store from 'electron-store';\nimport { checkForUpdates } from './updater.js';\n\nexport const isDev = process.env['NODE_ENV'] === 'development';\nexport const appPath = app.getAppPath();\n\n// See https://cs.chromium.org/chromium/src/net/base/net_error_list.h\nconst FILE_NOT_FOUND = -6;\n\nconst getPath = async (path_, file = '') => {\n try {\n const result = await fsp.stat(path_);\n\n if (result.isFile()) return path_;\n\n if (result.isDirectory()) return getPath(path.join(path_, `${file}.html`));\n } catch {\n /* empty */\n }\n};\n\nexport function createWindow({\n width = 1000,\n height = 1000,\n disableSecurity = true,\n disableSecurityWarnings = true,\n quitOnClose = true,\n onOpen,\n onClose,\n localhostUrl = 'http://localhost:3000',\n productionUrl = '', // in this mode Electron acts as a browser for remote app\n webPath = path.resolve(appPath, 'web'), // must conform to what is in electron-builder.js files section\n useStaticInDev = false,\n updater = false,\n rememberBounds = true,\n}: {\n width?: number;\n height?: number;\n disableSecurity?: boolean;\n disableSecurityWarnings?: boolean;\n quitOnClose?: boolean;\n onOpen?: (win: BrowserWindow) => void;\n onClose?: (win: BrowserWindow) => void;\n localhostUrl?: string;\n productionUrl?: string;\n webPath?: string;\n useStaticInDev?: boolean;\n updater?: boolean;\n rememberBounds?: boolean;\n} = {}) {\n let mainWindow: BrowserWindow | null = null;\n\n console.log('[APP] Starting Electron', {\n isDev,\n appPath,\n useStaticInDev,\n localhostUrl,\n productionUrl,\n webPath,\n updater,\n rememberBounds,\n quitOnClose,\n disableSecurity,\n disableSecurityWarnings,\n });\n\n if (!productionUrl && !webPath) {\n throw new Error('productionUrl or webPath must be defined');\n }\n\n if (productionUrl && webPath) {\n throw new Error('productionUrl and webPath cannot be used together');\n }\n\n if (!localhostUrl) {\n throw new Error('localhostUrl must be defined');\n }\n\n const store = new Store<{ bounds: Rectangle }>({\n schema: {\n bounds: {\n type: 'object',\n properties: {\n // Docs: https://electronjs.org/docs/api/structures/rectangle\n height: { type: 'number' },\n width: { type: 'number' },\n x: { type: 'number' },\n y: { type: 'number' },\n },\n },\n },\n });\n\n if (disableSecurityWarnings) process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';\n process.env['ELECTRON_ENABLE_LOGGING'] = 'true';\n\n process.on('SIGTERM', () => process.exit(0));\n process.on('SIGINT', () => process.exit(0));\n\n const openDevTools = () => {\n if (!mainWindow) return;\n mainWindow.setSize(width + 800, height);\n mainWindow.center();\n mainWindow.webContents.openDevTools();\n };\n\n const createWindow = async () => {\n mainWindow = new BrowserWindow({\n width,\n height,\n icon: path.resolve(appPath, 'assets/icon.png'),\n webPreferences: {\n nodeIntegration: false, // is default value after Electron v5\n contextIsolation: true, // protect against prototype pollution\n webSecurity: !disableSecurity,\n devTools: true,\n },\n ...(rememberBounds ? store.get('bounds') : {}),\n });\n\n mainWindow.on('move', () => rememberBounds && mainWindow && store.set('bounds', mainWindow.getBounds()));\n\n mainWindow.once('ready-to-show', () => isDev && openDevTools());\n\n // Static interceptor\n\n let interceptor: (() => void) | null = null;\n\n if (webPath && (!isDev || useStaticInDev)) {\n console.log(`[APP] Static Server Enabled, ${localhostUrl} will be intercepted to ${webPath}`);\n\n //TODO https://localhost:3000\n // @see https://github.com/sindresorhus/electron-serve/blob/main/index.js\n protocol.interceptStreamProtocol('http', (request, callback) => {\n if (request.url.startsWith(localhostUrl)) {\n let fileUrl = url.parse(request.url, false).pathname;\n\n if (!fileUrl) return callback({ error: FILE_NOT_FOUND });\n\n if (fileUrl === '/') fileUrl = 'index.html';\n\n const filePath = path.join(webPath, fileUrl);\n\n const relativePath = path.relative(webPath, fileUrl);\n\n const isSafe = !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n\n if (!isSafe && !isDev) return callback({ error: FILE_NOT_FOUND });\n\n // const finalPath = await getPath(filePath, options.file);\n // const fileExtension = path.extname(filePath);\n\n console.log('[APP] Static Server', fileUrl, '->', filePath);\n\n // return {path: path.join(webPath, fileUrl)};\n callback(fs.createReadStream(filePath));\n\n return true;\n }\n\n // return {url: request.url};\n (request.url.startsWith('https') ? https : http).get(request.url, callback);\n\n return true;\n });\n\n interceptor = () => protocol.uninterceptProtocol('http');\n }\n\n mainWindow.on('closed', () => {\n interceptor?.();\n onClose?.(mainWindow as never);\n mainWindow = null;\n interceptor = null;\n });\n\n // External URLs\n\n mainWindow.webContents.setWindowOpenHandler(({ url }) => {\n shell.openExternal(url).catch((e) => console.error(e));\n return { action: 'deny' };\n });\n\n // Menu\n\n const menu = defaultMenu(app, shell);\n\n if (updater) {\n (menu.at(-1)!.submenu as any).push(\n { type: 'separator' },\n {\n label: 'Check For Updates',\n click: checkForUpdates,\n },\n );\n }\n\n Menu.setApplicationMenu(Menu.buildFromTemplate(menu)); //TODO onMenu\n\n // Should be last, after all listeners and menu\n\n await app.whenReady();\n\n onOpen?.(mainWindow);\n\n if (!onOpen && localhostUrl) {\n await mainWindow.loadURL(productionUrl && !isDev ? productionUrl : `${localhostUrl}/`);\n }\n\n console.log('[APP] Main Window Open');\n };\n\n app.on('ready', createWindow);\n\n app.on('window-all-closed', () => {\n if (process.platform !== 'darwin' || quitOnClose) app.quit();\n });\n\n app.on('activate', () => BrowserWindow.getAllWindows().length === 0 && !mainWindow && createWindow());\n\n return {\n get mainWindow() {\n return mainWindow;\n },\n };\n}\n"],"names":["createWindow","url"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { appPath, createWindow, isDev } from "./createWindow.js";
2
- import { checkForUpdates } from "./updater.js";
3
- export {
4
- appPath,
5
- checkForUpdates,
6
- createWindow,
7
- isDev
8
- };
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,2 +0,0 @@
1
- export declare function checkForUpdates(menuItem: any, focusedWindow: any, event: any): void;
2
- //# sourceMappingURL=updater.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/electron/updater.ts"],"names":[],"mappings":"AAiDA,wBAAgB,eAAe,CAAC,QAAQ,KAAA,EAAE,aAAa,KAAA,EAAE,KAAK,KAAA,QAI7D"}
@@ -1,47 +0,0 @@
1
- import { dialog } from "electron";
2
- import updater from "electron-updater";
3
- const { autoUpdater } = updater;
4
- let updateButton;
5
- autoUpdater.autoDownload = false;
6
- autoUpdater.on("error", (error) => {
7
- dialog.showErrorBox("Error: ", !error ? "unknown" : (error.stack || error).toString());
8
- });
9
- autoUpdater.on("update-available", async () => {
10
- const { response } = await dialog.showMessageBox({
11
- type: "info",
12
- title: "Found Updates",
13
- message: "Found updates, do you want update now?",
14
- buttons: ["Yes", "No"]
15
- });
16
- updateButton.enabled = true;
17
- updateButton = null;
18
- if (response === 0) await autoUpdater.downloadUpdate();
19
- });
20
- autoUpdater.on("update-not-available", async () => {
21
- try {
22
- await dialog.showMessageBox({
23
- title: "No Updates",
24
- message: "Current version is up-to-date."
25
- });
26
- } catch (e) {
27
- dialog.showErrorBox("Error: ", e.toString());
28
- }
29
- updateButton.enabled = true;
30
- updateButton = null;
31
- });
32
- autoUpdater.on("update-downloaded", async () => {
33
- await dialog.showMessageBox({
34
- title: "Install Update",
35
- message: "Update downloaded, application will quit for update..."
36
- });
37
- autoUpdater.quitAndInstall();
38
- });
39
- function checkForUpdates(menuItem, focusedWindow, event) {
40
- updateButton = menuItem;
41
- updateButton.enabled = false;
42
- autoUpdater.checkForUpdates().catch((e) => console.error("Update error", e));
43
- }
44
- export {
45
- checkForUpdates
46
- };
47
- //# sourceMappingURL=updater.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updater.js","sources":["../../src/electron/updater.ts"],"sourcesContent":["// https://github.com/electron-userland/electron-builder/blob/docs-deprecated/encapsulated%20manual%20update%20via%20menu.js\nimport { dialog } from 'electron';\nimport updater from 'electron-updater';\nconst { autoUpdater } = updater;\n\nlet updateButton;\n\nautoUpdater.autoDownload = false;\n\nautoUpdater.on('error', (error) => {\n dialog.showErrorBox('Error: ', !error ? 'unknown' : (error.stack || error).toString());\n});\n\nautoUpdater.on('update-available', async () => {\n const { response } = await dialog.showMessageBox({\n type: 'info',\n title: 'Found Updates',\n message: 'Found updates, do you want update now?',\n buttons: ['Yes', 'No'],\n });\n\n updateButton.enabled = true;\n updateButton = null;\n\n if (response === 0) await autoUpdater.downloadUpdate();\n});\n\nautoUpdater.on('update-not-available', async () => {\n try {\n await dialog.showMessageBox({\n title: 'No Updates',\n message: 'Current version is up-to-date.',\n });\n } catch (e) {\n dialog.showErrorBox('Error: ', e.toString());\n }\n updateButton.enabled = true;\n updateButton = null;\n});\n\nautoUpdater.on('update-downloaded', async () => {\n await dialog.showMessageBox({\n title: 'Install Update',\n message: 'Update downloaded, application will quit for update...',\n });\n\n autoUpdater.quitAndInstall();\n});\n\nexport function checkForUpdates(menuItem, focusedWindow, event) {\n updateButton = menuItem;\n updateButton.enabled = false;\n autoUpdater.checkForUpdates().catch((e) => console.error('Update error', e));\n}\n"],"names":[],"mappings":";;AAGA,MAAM,EAAE,YAAgB,IAAA;AAExB,IAAI;AAEJ,YAAY,eAAe;AAE3B,YAAY,GAAG,SAAS,CAAC,UAAU;AACxB,SAAA,aAAa,WAAW,CAAC,QAAQ,aAAa,MAAM,SAAS,OAAO,UAAU;AACzF,CAAC;AAED,YAAY,GAAG,oBAAoB,YAAY;AAC3C,QAAM,EAAE,SAAA,IAAa,MAAM,OAAO,eAAe;AAAA,IAC7C,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS,CAAC,OAAO,IAAI;AAAA,EAAA,CACxB;AAED,eAAa,UAAU;AACR,iBAAA;AAEf,MAAI,aAAa,EAAS,OAAA,YAAY,eAAe;AACzD,CAAC;AAED,YAAY,GAAG,wBAAwB,YAAY;AAC3C,MAAA;AACA,UAAM,OAAO,eAAe;AAAA,MACxB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,CACZ;AAAA,WACI,GAAG;AACR,WAAO,aAAa,WAAW,EAAE,SAAA,CAAU;AAAA,EAAA;AAE/C,eAAa,UAAU;AACR,iBAAA;AACnB,CAAC;AAED,YAAY,GAAG,qBAAqB,YAAY;AAC5C,QAAM,OAAO,eAAe;AAAA,IACxB,OAAO;AAAA,IACP,SAAS;AAAA,EAAA,CACZ;AAED,cAAY,eAAe;AAC/B,CAAC;AAEe,SAAA,gBAAgB,UAAU,eAAe,OAAO;AAC7C,iBAAA;AACf,eAAa,UAAU;AACX,cAAA,kBAAkB,MAAM,CAAC,MAAM,QAAQ,MAAM,gBAAgB,CAAC,CAAC;AAC/E;"}
@@ -1,8 +0,0 @@
1
- import { Configuration } from 'electron-builder';
2
- import { GithubOptions, S3Options } from 'builder-util-runtime';
3
- export declare function builerConfig(options: {
4
- config: Configuration;
5
- s3?: Pick<S3Options, 'bucket'> & Partial<S3Options>;
6
- githubReleases: Pick<GithubOptions, 'owner' | 'repo'> & Partial<GithubOptions>;
7
- }): Configuration;
8
- //# sourceMappingURL=builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/electron-builder/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAyDrE,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAClF,GAAG,aAAa,CAuFhB"}
@@ -1,130 +0,0 @@
1
- const {
2
- GITHUB_REF_TYPE,
3
- GITHUB_REF_NAME,
4
- GITHUB_RUN_ID,
5
- GITHUB_REF,
6
- AWS_URL,
7
- AWS_ACCESS_KEY_ID,
8
- AWS_SECRET_ACCESS_KEY,
9
- GH_TOKEN,
10
- CSC_IDENTITY_AUTO_DISCOVERY
11
- } = process.env;
12
- const isGithubTag = GITHUB_REF_TYPE === "tag";
13
- const isGithubMaster = GITHUB_REF_TYPE === "branch" && GITHUB_REF_NAME === "master";
14
- const isDevPublish = AWS_URL == null ? void 0 : AWS_URL.includes(":9000");
15
- const isNoAutoDiscovery = CSC_IDENTITY_AUTO_DISCOVERY === "false";
16
- const isSkipPublish = !isDevPublish && !isGithubMaster && !isGithubTag;
17
- const channel = isGithubTag ? "latest" : GITHUB_REF_NAME;
18
- function getVersion() {
19
- if (isGithubMaster) {
20
- return `0.0.${GITHUB_RUN_ID}`;
21
- }
22
- if (isGithubTag) {
23
- return GITHUB_REF.split("/").pop();
24
- }
25
- return `0.0.${Date.now()}`;
26
- }
27
- function getTarget() {
28
- const arch = ["arm64", isNoAutoDiscovery ? "" : "x64"].filter(Boolean);
29
- const target = [
30
- {
31
- target: "dmg",
32
- arch
33
- },
34
- {
35
- target: "zip",
36
- arch
37
- }
38
- ];
39
- if (isNoAutoDiscovery) {
40
- console.log("Skipping signing...");
41
- delete process.env.CSC_LINK;
42
- return [target[0]];
43
- }
44
- return target;
45
- }
46
- function builerConfig(options) {
47
- var _a;
48
- if (options.s3 && (!AWS_URL || !AWS_ACCESS_KEY_ID || !AWS_SECRET_ACCESS_KEY)) {
49
- throw new Error("Missing AWS configuration");
50
- }
51
- if (options.githubReleases && !GH_TOKEN) {
52
- throw new Error("Missing AWS configuration");
53
- }
54
- const config = {
55
- files: [
56
- "**/*",
57
- "!electron-builder.js",
58
- "!electron-builder.yml",
59
- "!package.json",
60
- "assets",
61
- ...options.config.files
62
- ],
63
- directories: {
64
- buildResources: "assets"
65
- },
66
- mac: {
67
- category: ((_a = options.config.mac) == null ? void 0 : _a.category) ?? "public.app-category.utils",
68
- target: getTarget()
69
- },
70
- //TODO Windows target
71
- dmg: {
72
- contents: [
73
- {
74
- x: 130,
75
- y: 130
76
- },
77
- {
78
- x: 370,
79
- y: 130,
80
- type: "link",
81
- path: "/Applications"
82
- }
83
- ]
84
- },
85
- publish: [
86
- options.s3 && {
87
- provider: "s3",
88
- endpoint: AWS_URL,
89
- channel,
90
- ...options.s3
91
- // bucket
92
- },
93
- options.githubReleases && GH_TOKEN && (isGithubTag || isGithubMaster) && {
94
- provider: "github",
95
- private: true,
96
- token: GH_TOKEN,
97
- releaseType: isGithubTag ? "release" : "draft",
98
- channel,
99
- ...options.githubReleases
100
- // repo, owner
101
- }
102
- ].filter(Boolean),
103
- extraMetadata: {
104
- version: getVersion()
105
- }
106
- };
107
- if (isSkipPublish) {
108
- delete config.publish;
109
- delete config.extraMetadata;
110
- }
111
- console.log("Electron Builder context", {
112
- isDevPublish,
113
- isGithubMaster,
114
- isGithubTag,
115
- isSkipPublish,
116
- isNoAutoDiscovery,
117
- channel,
118
- GITHUB_RUN_ID,
119
- GITHUB_REF_TYPE,
120
- GITHUB_REF_NAME,
121
- CSC_IDENTITY_AUTO_DISCOVERY,
122
- AWS_URL
123
- });
124
- console.log("Electron Builder configuration", JSON.stringify(config, null, 2));
125
- return config;
126
- }
127
- export {
128
- builerConfig
129
- };
130
- //# sourceMappingURL=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sources":["../../src/electron-builder/builder.ts"],"sourcesContent":["import type { Configuration, MacConfiguration } from 'electron-builder';\nimport type { GithubOptions, S3Options } from 'builder-util-runtime';\n\nconst {\n GITHUB_REF_TYPE,\n GITHUB_REF_NAME,\n GITHUB_RUN_ID,\n GITHUB_REF,\n AWS_URL,\n AWS_ACCESS_KEY_ID,\n AWS_SECRET_ACCESS_KEY,\n GH_TOKEN,\n CSC_IDENTITY_AUTO_DISCOVERY,\n} = process.env;\n\nconst isGithubTag = GITHUB_REF_TYPE === 'tag';\nconst isGithubMaster = GITHUB_REF_TYPE === 'branch' && GITHUB_REF_NAME === 'master';\nconst isDevPublish = AWS_URL?.includes(':9000');\nconst isNoAutoDiscovery = CSC_IDENTITY_AUTO_DISCOVERY === 'false';\nconst isSkipPublish = !isDevPublish && !isGithubMaster && !isGithubTag;\n\n//FIXME Refine logic, tags should be versions, not channels, use branches? See how Changesets does it\nconst channel = isGithubTag ? 'latest' : GITHUB_REF_NAME; // https://www.electron.build/tutorials/release-using-channels.html\n\nfunction getVersion() {\n if (isGithubMaster) {\n return `0.0.${GITHUB_RUN_ID}`; //TODO Figure out last normal in master and bump it\n }\n if (isGithubTag) {\n return GITHUB_REF!.split('/').pop();\n }\n return `0.0.${Date.now()}`; //TODO Read from package.json?\n}\n\nfunction getTarget() {\n const arch = ['arm64', isNoAutoDiscovery ? '' : 'x64'].filter(Boolean) as any;\n\n const target: MacConfiguration['target'] = [\n {\n target: 'dmg',\n arch,\n },\n {\n target: 'zip',\n arch,\n },\n ];\n\n // Leave only DMG if no signing\n if (isNoAutoDiscovery) {\n console.log('Skipping signing...');\n delete process.env.CSC_LINK;\n return [target[0]]; // only keep DMG\n }\n\n return target;\n}\n\nexport function builerConfig(options: {\n config: Configuration;\n s3?: Pick<S3Options, 'bucket'> & Partial<S3Options>; //TODO Omit?\n githubReleases: Pick<GithubOptions, 'owner' | 'repo'> & Partial<GithubOptions>;\n}): Configuration {\n if (options.s3 && (!AWS_URL || !AWS_ACCESS_KEY_ID || !AWS_SECRET_ACCESS_KEY)) {\n throw new Error('Missing AWS configuration');\n }\n\n if (options.githubReleases && !GH_TOKEN) {\n throw new Error('Missing AWS configuration');\n }\n\n const config: Configuration = {\n files: [\n '**/*',\n '!electron-builder.js',\n '!electron-builder.yml',\n '!package.json',\n 'assets',\n ...(options.config.files as never),\n ],\n directories: {\n buildResources: 'assets',\n },\n mac: {\n category: options.config.mac?.category ?? 'public.app-category.utils',\n target: getTarget(),\n },\n //TODO Windows target\n dmg: {\n contents: [\n {\n x: 130,\n y: 130,\n },\n {\n x: 370,\n y: 130,\n type: 'link',\n path: '/Applications',\n },\n ],\n },\n publish: [\n options.s3 &&\n ({\n provider: 's3',\n endpoint: AWS_URL,\n channel,\n ...options.s3, // bucket\n } as S3Options),\n options.githubReleases &&\n GH_TOKEN &&\n (isGithubTag || isGithubMaster) &&\n ({\n provider: 'github',\n private: true,\n token: GH_TOKEN,\n releaseType: isGithubTag ? 'release' : 'draft',\n channel,\n ...options.githubReleases, // repo, owner\n } as GithubOptions),\n ].filter(Boolean) as never,\n extraMetadata: {\n version: getVersion(),\n },\n };\n\n if (isSkipPublish) {\n delete config.publish;\n delete (config as never as any).extraMetadata;\n }\n\n console.log('Electron Builder context', {\n isDevPublish,\n isGithubMaster,\n isGithubTag,\n isSkipPublish,\n isNoAutoDiscovery,\n channel,\n GITHUB_RUN_ID: GITHUB_RUN_ID,\n GITHUB_REF_TYPE: GITHUB_REF_TYPE,\n GITHUB_REF_NAME: GITHUB_REF_NAME,\n CSC_IDENTITY_AUTO_DISCOVERY: CSC_IDENTITY_AUTO_DISCOVERY,\n AWS_URL: AWS_URL,\n });\n\n console.log('Electron Builder configuration', JSON.stringify(config, null, 2));\n\n return config;\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function generateImages({ iconPsdPath, dmgBackgroundPsdPath, electronAssetsPath, webPublicPath, }: {
2
- iconPsdPath: string;
3
- dmgBackgroundPsdPath: string;
4
- electronAssetsPath: string;
5
- webPublicPath: string;
6
- }): Promise<void>;
7
- //# sourceMappingURL=images.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/electron-builder/images.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,EACjC,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,GAChB,EAAE;IACC,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACzB,iBAkBA"}
@@ -1,25 +0,0 @@
1
- import psd from "psd";
2
- import sharp from "sharp";
3
- import path from "node:path";
4
- async function generateImages({
5
- iconPsdPath,
6
- dmgBackgroundPsdPath,
7
- electronAssetsPath,
8
- webPublicPath
9
- }) {
10
- const iconPsd = await psd.open(iconPsdPath);
11
- await iconPsd.image.saveAsPng(path.join(electronAssetsPath, "icon.png"));
12
- const bgPsd = await psd.open(dmgBackgroundPsdPath);
13
- await bgPsd.image.saveAsPng(path.join(electronAssetsPath, "background@2x.png"));
14
- const iconPng = sharp(path.join(electronAssetsPath, "icon.png"));
15
- const bgPng = sharp(path.join(electronAssetsPath, "background@2x.png"));
16
- await bgPng.resize(500).toFile(path.join(electronAssetsPath, "background.png"));
17
- await iconPng.toFile(path.join(electronAssetsPath, "splash.webp"));
18
- await iconPng.toFile(path.join(electronAssetsPath, "icon.icns"));
19
- await iconPng.toFile(path.join(webPublicPath, "icon.png"));
20
- await iconPng.resize(32).toFile(path.join(webPublicPath, "favicon.ico"));
21
- }
22
- export {
23
- generateImages
24
- };
25
- //# sourceMappingURL=images.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"images.js","sources":["../../src/electron-builder/images.ts"],"sourcesContent":["import psd from 'psd';\nimport sharp from 'sharp';\nimport path from 'node:path';\n\nexport async function generateImages({\n iconPsdPath,\n dmgBackgroundPsdPath,\n electronAssetsPath,\n webPublicPath,\n}: {\n iconPsdPath: string;\n dmgBackgroundPsdPath: string;\n electronAssetsPath: string;\n webPublicPath: string;\n}) {\n const iconPsd = await psd.open(iconPsdPath);\n await iconPsd.image!.saveAsPng(path.join(electronAssetsPath, 'icon.png'));\n\n const bgPsd = await psd.open(dmgBackgroundPsdPath);\n await bgPsd.image!.saveAsPng(path.join(electronAssetsPath, 'background@2x.png'));\n\n const iconPng = sharp(path.join(electronAssetsPath, 'icon.png'));\n const bgPng = sharp(path.join(electronAssetsPath, 'background@2x.png'));\n\n await bgPng.resize(500).toFile(path.join(electronAssetsPath, 'background.png'));\n\n await iconPng.toFile(path.join(electronAssetsPath, 'splash.webp'));\n await iconPng.toFile(path.join(electronAssetsPath, 'icon.icns'));\n\n //TODO Crop without icon BG\n await iconPng.toFile(path.join(webPublicPath, 'icon.png'));\n await iconPng.resize(32).toFile(path.join(webPublicPath, 'favicon.ico'));\n}\n"],"names":[],"mappings":";;;AAIA,eAAsB,eAAe;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKG;AACC,QAAM,UAAU,MAAM,IAAI,KAAK,WAAW;AAC1C,QAAM,QAAQ,MAAO,UAAU,KAAK,KAAK,oBAAoB,UAAU,CAAC;AAExE,QAAM,QAAQ,MAAM,IAAI,KAAK,oBAAoB;AACjD,QAAM,MAAM,MAAO,UAAU,KAAK,KAAK,oBAAoB,mBAAmB,CAAC;AAE/E,QAAM,UAAU,MAAM,KAAK,KAAK,oBAAoB,UAAU,CAAC;AAC/D,QAAM,QAAQ,MAAM,KAAK,KAAK,oBAAoB,mBAAmB,CAAC;AAEhE,QAAA,MAAM,OAAO,GAAG,EAAE,OAAO,KAAK,KAAK,oBAAoB,gBAAgB,CAAC;AAE9E,QAAM,QAAQ,OAAO,KAAK,KAAK,oBAAoB,aAAa,CAAC;AACjE,QAAM,QAAQ,OAAO,KAAK,KAAK,oBAAoB,WAAW,CAAC;AAG/D,QAAM,QAAQ,OAAO,KAAK,KAAK,eAAe,UAAU,CAAC;AACnD,QAAA,QAAQ,OAAO,EAAE,EAAE,OAAO,KAAK,KAAK,eAAe,aAAa,CAAC;AAC3E;"}
@@ -1,7 +0,0 @@
1
- import { builerConfig } from "./builder.js";
2
- import { generateImages } from "./images.js";
3
- export {
4
- builerConfig,
5
- generateImages
6
- };
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,5 +0,0 @@
1
- import { GenericControlProps } from './genericControl';
2
- import * as React from 'react';
3
- export type FormControlFieldsetProps = GenericControlProps;
4
- export declare const FormControlFieldset: React.FC<FormControlFieldsetProps>;
5
- //# sourceMappingURL=formControlFieldset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formControlFieldset.d.ts","sourceRoot":"","sources":["../../src/mui/formControlFieldset.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAkB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvE,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAmBlE,CAAC"}
@@ -1,28 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { GenericControl } from "./genericControl.js";
3
- import { inputClasses } from "@mui/material/Input";
4
- const FormControlFieldset = function FormControlFieldset2({
5
- children,
6
- sx,
7
- ...props
8
- }) {
9
- return /* @__PURE__ */ jsx(
10
- GenericControl,
11
- {
12
- ...props,
13
- component: "fieldset",
14
- sx: {
15
- ...sx,
16
- [`legend + .${inputClasses.root}`]: {
17
- marginTop: 2
18
- //FIXME 16px, hardcoded from @mui/material/Input/Input.js @ 59
19
- }
20
- },
21
- children
22
- }
23
- );
24
- };
25
- export {
26
- FormControlFieldset
27
- };
28
- //# sourceMappingURL=formControlFieldset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formControlFieldset.js","sources":["../../src/mui/formControlFieldset.tsx"],"sourcesContent":["import * as React from 'react';\nimport { GenericControl, GenericControlProps } from './genericControl';\nimport { inputClasses } from '@mui/material/Input';\n\nexport type FormControlFieldsetProps = GenericControlProps;\n\nexport const FormControlFieldset: React.FC<FormControlFieldsetProps> = function FormControlFieldset({\n children,\n sx,\n ...props\n}) {\n return (\n <GenericControl\n {...props}\n component=\"fieldset\"\n sx={{\n ...sx,\n [`legend + .${inputClasses.root}`]: {\n marginTop: 2, //FIXME 16px, hardcoded from @mui/material/Input/Input.js @ 59\n },\n }}\n >\n {children}\n </GenericControl>\n );\n};\n"],"names":["FormControlFieldset"],"mappings":";;;AAMa,MAAA,sBAA0D,SAASA,qBAAoB;AAAA,EAChG;AAAA,EACA;AAAA,EACA,GAAG;AACP,GAAG;AAEK,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ,WAAU;AAAA,MACV,IAAI;AAAA,QACA,GAAG;AAAA,QACH,CAAC,aAAa,aAAa,IAAI,EAAE,GAAG;AAAA,UAChC,WAAW;AAAA;AAAA,QAAA;AAAA,MAEnB;AAAA,MAEC;AAAA,IAAA;AAAA,EACL;AAER;"}
@@ -1,7 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { GenericControl } from './genericControl';
3
- declare const meta: Meta<typeof GenericControl>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
7
- //# sourceMappingURL=formControlFieldset.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formControlFieldset.stories.d.ts","sourceRoot":"","sources":["../../src/mui/formControlFieldset.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CA6CC,CAAC;AAExC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAQnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
@@ -1,4 +0,0 @@
1
- import { InputLabelProps } from '@mui/material/InputLabel';
2
- import * as React from 'react';
3
- export declare const FormLabelLegend: React.FC<InputLabelProps>;
4
- //# sourceMappingURL=formLabelLegend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formLabelLegend.d.ts","sourceRoot":"","sources":["../../src/mui/formLabelLegend.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAyB,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAElF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAOrD,CAAC"}