@kirill.konshin/utils 0.0.19 → 0.0.21

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/README.md +6 -0
  2. package/dist/bootstrap/index.d.ts +1 -12
  3. package/dist/bootstrap/index.d.ts.map +1 -1
  4. package/dist/bootstrap/index.js +2 -35
  5. package/dist/browser/index.d.ts +2 -0
  6. package/dist/browser/index.d.ts.map +1 -0
  7. package/dist/browser/index.js +2 -0
  8. package/dist/core/index.d.ts +1 -9
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +2 -35
  11. package/dist/electron/index.d.ts +1 -2
  12. package/dist/electron/index.d.ts.map +1 -1
  13. package/dist/electron/index.js +2 -9
  14. package/dist/electron-builder/index.d.ts +1 -2
  15. package/dist/electron-builder/index.d.ts.map +1 -1
  16. package/dist/electron-builder/index.js +2 -7
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +13 -0
  20. package/dist/mui/index.d.ts +1 -4
  21. package/dist/mui/index.d.ts.map +1 -1
  22. package/dist/mui/index.js +2 -11
  23. package/dist/next/index.d.ts +1 -5
  24. package/dist/next/index.d.ts.map +1 -1
  25. package/dist/next/index.js +2 -15
  26. package/dist/node/index.d.ts +2 -0
  27. package/dist/node/index.d.ts.map +1 -0
  28. package/dist/node/index.js +2 -0
  29. package/dist/react/index.d.ts +1 -5
  30. package/dist/react/index.d.ts.map +1 -1
  31. package/dist/react/index.js +2 -26
  32. package/dist/react-native/index.d.ts +1 -3
  33. package/dist/react-native/index.d.ts.map +1 -1
  34. package/dist/react-native/index.js +2 -9
  35. package/dist/tailwind/index.d.ts +1 -2
  36. package/dist/tailwind/index.d.ts.map +1 -1
  37. package/dist/tailwind/index.js +2 -7
  38. package/dist/worker/index.d.ts +2 -0
  39. package/dist/worker/index.d.ts.map +1 -0
  40. package/dist/worker/index.js +2 -0
  41. package/package.json +51 -99
  42. package/.ctirc +0 -11
  43. package/.storybook/main.ts +0 -21
  44. package/.storybook/preview.ts +0 -17
  45. package/.turbo/turbo-build.log +0 -72
  46. package/.turbo/turbo-test.log +0 -171
  47. package/CHANGELOG.md +0 -116
  48. package/builders/.swcrc +0 -18
  49. package/builders/build.config.ts +0 -11
  50. package/builders/bun.build.js +0 -23
  51. package/builders/package.json +0 -209
  52. package/builders/perf.mjs +0 -63
  53. package/builders/rollup.config.mjs +0 -50
  54. package/builders/rslib.config.ts +0 -26
  55. package/builders/tsconfig.json +0 -21
  56. package/builders/tsup.config.ts +0 -20
  57. package/builders/turbo.json +0 -24
  58. package/builders/vite.config.ts +0 -37
  59. package/demo/worker-demo.ts +0 -73
  60. package/dist/bootstrap/adaptiveContainer.d.ts +0 -4
  61. package/dist/bootstrap/adaptiveContainer.d.ts.map +0 -1
  62. package/dist/bootstrap/adaptiveContainer.js +0 -11
  63. package/dist/bootstrap/adaptiveContainer.js.map +0 -1
  64. package/dist/bootstrap/controls.d.ts +0 -38
  65. package/dist/bootstrap/controls.d.ts.map +0 -1
  66. package/dist/bootstrap/controls.js +0 -78
  67. package/dist/bootstrap/controls.js.map +0 -1
  68. package/dist/bootstrap/controls.stories.d.ts +0 -9
  69. package/dist/bootstrap/controls.stories.d.ts.map +0 -1
  70. package/dist/bootstrap/error.d.ts +0 -9
  71. package/dist/bootstrap/error.d.ts.map +0 -1
  72. package/dist/bootstrap/error.js +0 -27
  73. package/dist/bootstrap/error.js.map +0 -1
  74. package/dist/bootstrap/error.stories.d.ts +0 -8
  75. package/dist/bootstrap/error.stories.d.ts.map +0 -1
  76. package/dist/bootstrap/field.d.ts +0 -11
  77. package/dist/bootstrap/field.d.ts.map +0 -1
  78. package/dist/bootstrap/field.js +0 -29
  79. package/dist/bootstrap/field.js.map +0 -1
  80. package/dist/bootstrap/field.stories.d.ts +0 -8
  81. package/dist/bootstrap/field.stories.d.ts.map +0 -1
  82. package/dist/bootstrap/footer.d.ts +0 -10
  83. package/dist/bootstrap/footer.d.ts.map +0 -1
  84. package/dist/bootstrap/footer.js +0 -45
  85. package/dist/bootstrap/footer.js.map +0 -1
  86. package/dist/bootstrap/globalLoading.d.ts +0 -6
  87. package/dist/bootstrap/globalLoading.d.ts.map +0 -1
  88. package/dist/bootstrap/globalLoading.js +0 -10
  89. package/dist/bootstrap/globalLoading.js.map +0 -1
  90. package/dist/bootstrap/globalLoading.stories.d.ts +0 -7
  91. package/dist/bootstrap/globalLoading.stories.d.ts.map +0 -1
  92. package/dist/bootstrap/index.js.map +0 -1
  93. package/dist/bootstrap/loading.d.ts +0 -10
  94. package/dist/bootstrap/loading.d.ts.map +0 -1
  95. package/dist/bootstrap/loading.js +0 -19
  96. package/dist/bootstrap/loading.js.map +0 -1
  97. package/dist/bootstrap/loading.stories.d.ts +0 -9
  98. package/dist/bootstrap/loading.stories.d.ts.map +0 -1
  99. package/dist/bootstrap/responsiveHelper.d.ts +0 -8
  100. package/dist/bootstrap/responsiveHelper.d.ts.map +0 -1
  101. package/dist/bootstrap/responsiveHelper.js +0 -46
  102. package/dist/bootstrap/responsiveHelper.js.map +0 -1
  103. package/dist/bootstrap/screen.d.ts +0 -22
  104. package/dist/bootstrap/screen.d.ts.map +0 -1
  105. package/dist/bootstrap/screen.js +0 -80
  106. package/dist/bootstrap/screen.js.map +0 -1
  107. package/dist/bootstrap/screen.stories.d.ts +0 -14
  108. package/dist/bootstrap/screen.stories.d.ts.map +0 -1
  109. package/dist/bootstrap/toaster.d.ts +0 -11
  110. package/dist/bootstrap/toaster.d.ts.map +0 -1
  111. package/dist/bootstrap/toaster.js +0 -34
  112. package/dist/bootstrap/toaster.js.map +0 -1
  113. package/dist/bootstrap/toaster.stories.d.ts +0 -8
  114. package/dist/bootstrap/toaster.stories.d.ts.map +0 -1
  115. package/dist/bootstrap/useModal.d.ts +0 -23
  116. package/dist/bootstrap/useModal.d.ts.map +0 -1
  117. package/dist/bootstrap/useModal.js +0 -50
  118. package/dist/bootstrap/useModal.js.map +0 -1
  119. package/dist/bootstrap/useModal.stories.d.ts +0 -9
  120. package/dist/bootstrap/useModal.stories.d.ts.map +0 -1
  121. package/dist/bootstrap/useWrappedForm.d.ts +0 -14
  122. package/dist/bootstrap/useWrappedForm.d.ts.map +0 -1
  123. package/dist/bootstrap/useWrappedForm.js +0 -32
  124. package/dist/bootstrap/useWrappedForm.js.map +0 -1
  125. package/dist/core/cache.d.ts +0 -120
  126. package/dist/core/cache.d.ts.map +0 -1
  127. package/dist/core/cache.js +0 -107
  128. package/dist/core/cache.js.map +0 -1
  129. package/dist/core/cache.test.d.ts +0 -2
  130. package/dist/core/cache.test.d.ts.map +0 -1
  131. package/dist/core/errors.d.ts +0 -2
  132. package/dist/core/errors.d.ts.map +0 -1
  133. package/dist/core/errors.js +0 -15
  134. package/dist/core/errors.js.map +0 -1
  135. package/dist/core/files.d.ts +0 -4
  136. package/dist/core/files.d.ts.map +0 -1
  137. package/dist/core/files.js +0 -31
  138. package/dist/core/files.js.map +0 -1
  139. package/dist/core/index.js.map +0 -1
  140. package/dist/core/ls.d.ts +0 -6
  141. package/dist/core/ls.d.ts.map +0 -1
  142. package/dist/core/ls.js +0 -12
  143. package/dist/core/ls.js.map +0 -1
  144. package/dist/core/measure.d.ts +0 -35
  145. package/dist/core/measure.d.ts.map +0 -1
  146. package/dist/core/measure.js +0 -60
  147. package/dist/core/measure.js.map +0 -1
  148. package/dist/core/mutex.d.ts +0 -6
  149. package/dist/core/mutex.d.ts.map +0 -1
  150. package/dist/core/mutex.js +0 -26
  151. package/dist/core/mutex.js.map +0 -1
  152. package/dist/core/worker.d.ts +0 -98
  153. package/dist/core/worker.d.ts.map +0 -1
  154. package/dist/core/worker.js +0 -240
  155. package/dist/core/worker.js.map +0 -1
  156. package/dist/core/worker.test.d.ts +0 -2
  157. package/dist/core/worker.test.d.ts.map +0 -1
  158. package/dist/core/workerUtils.d.ts +0 -3
  159. package/dist/core/workerUtils.d.ts.map +0 -1
  160. package/dist/core/workerUtils.js +0 -31
  161. package/dist/core/workerUtils.js.map +0 -1
  162. package/dist/core/wrpc.d.ts +0 -45
  163. package/dist/core/wrpc.d.ts.map +0 -1
  164. package/dist/core/wrpc.fixture.d.ts +0 -26
  165. package/dist/core/wrpc.fixture.d.ts.map +0 -1
  166. package/dist/core/wrpc.js +0 -242
  167. package/dist/core/wrpc.js.map +0 -1
  168. package/dist/core/wrpc.test.d.ts +0 -1
  169. package/dist/core/wrpc.test.d.ts.map +0 -1
  170. package/dist/electron/createWindow.d.ts +0 -23
  171. package/dist/electron/createWindow.d.ts.map +0 -1
  172. package/dist/electron/createWindow.js +0 -160
  173. package/dist/electron/createWindow.js.map +0 -1
  174. package/dist/electron/index.js.map +0 -1
  175. package/dist/electron/updater.d.ts +0 -2
  176. package/dist/electron/updater.d.ts.map +0 -1
  177. package/dist/electron/updater.js +0 -47
  178. package/dist/electron/updater.js.map +0 -1
  179. package/dist/electron-builder/builder.d.ts +0 -8
  180. package/dist/electron-builder/builder.d.ts.map +0 -1
  181. package/dist/electron-builder/builder.js +0 -130
  182. package/dist/electron-builder/builder.js.map +0 -1
  183. package/dist/electron-builder/images.d.ts +0 -7
  184. package/dist/electron-builder/images.d.ts.map +0 -1
  185. package/dist/electron-builder/images.js +0 -25
  186. package/dist/electron-builder/images.js.map +0 -1
  187. package/dist/electron-builder/index.js.map +0 -1
  188. package/dist/mui/formControlFieldset.d.ts +0 -5
  189. package/dist/mui/formControlFieldset.d.ts.map +0 -1
  190. package/dist/mui/formControlFieldset.js +0 -28
  191. package/dist/mui/formControlFieldset.js.map +0 -1
  192. package/dist/mui/formControlFieldset.stories.d.ts +0 -7
  193. package/dist/mui/formControlFieldset.stories.d.ts.map +0 -1
  194. package/dist/mui/formLabelLegend.d.ts +0 -4
  195. package/dist/mui/formLabelLegend.d.ts.map +0 -1
  196. package/dist/mui/formLabelLegend.js +0 -12
  197. package/dist/mui/formLabelLegend.js.map +0 -1
  198. package/dist/mui/genericControl.d.ts +0 -7
  199. package/dist/mui/genericControl.d.ts.map +0 -1
  200. package/dist/mui/genericControl.js +0 -21
  201. package/dist/mui/genericControl.js.map +0 -1
  202. package/dist/mui/index.js.map +0 -1
  203. package/dist/mui/readOnly.d.ts +0 -6
  204. package/dist/mui/readOnly.d.ts.map +0 -1
  205. package/dist/mui/readOnly.js +0 -7
  206. package/dist/mui/readOnly.js.map +0 -1
  207. package/dist/next/appLink.d.ts +0 -8
  208. package/dist/next/appLink.d.ts.map +0 -1
  209. package/dist/next/appLink.js +0 -34
  210. package/dist/next/appLink.js.map +0 -1
  211. package/dist/next/index.js.map +0 -1
  212. package/dist/next/measure.d.ts +0 -15
  213. package/dist/next/measure.d.ts.map +0 -1
  214. package/dist/next/measure.js +0 -9
  215. package/dist/next/measure.js.map +0 -1
  216. package/dist/next/noSSR.d.ts +0 -29
  217. package/dist/next/noSSR.d.ts.map +0 -1
  218. package/dist/next/noSSR.js +0 -13
  219. package/dist/next/noSSR.js.map +0 -1
  220. package/dist/next/redirect.d.ts +0 -6
  221. package/dist/next/redirect.d.ts.map +0 -1
  222. package/dist/next/useIsInner.d.ts +0 -3
  223. package/dist/next/useIsInner.d.ts.map +0 -1
  224. package/dist/next/useIsInner.js +0 -15
  225. package/dist/next/useIsInner.js.map +0 -1
  226. package/dist/react/apiCall.d.ts +0 -6
  227. package/dist/react/apiCall.d.ts.map +0 -1
  228. package/dist/react/apiCall.js +0 -24
  229. package/dist/react/apiCall.js.map +0 -1
  230. package/dist/react/form/client.d.ts +0 -7
  231. package/dist/react/form/client.d.ts.map +0 -1
  232. package/dist/react/form/client.js +0 -46
  233. package/dist/react/form/client.js.map +0 -1
  234. package/dist/react/form/form.d.ts +0 -59
  235. package/dist/react/form/form.d.ts.map +0 -1
  236. package/dist/react/form/form.js +0 -89
  237. package/dist/react/form/form.js.map +0 -1
  238. package/dist/react/form/index.d.ts +0 -3
  239. package/dist/react/form/index.d.ts.map +0 -1
  240. package/dist/react/index.js.map +0 -1
  241. package/dist/react/keyboard.d.ts +0 -10
  242. package/dist/react/keyboard.d.ts.map +0 -1
  243. package/dist/react/keyboard.js +0 -38
  244. package/dist/react/keyboard.js.map +0 -1
  245. package/dist/react/useFetch.d.ts +0 -2
  246. package/dist/react/useFetch.d.ts.map +0 -1
  247. package/dist/react/useFetch.js +0 -20
  248. package/dist/react/useFetch.js.map +0 -1
  249. package/dist/react/useFetcher.d.ts +0 -10
  250. package/dist/react/useFetcher.d.ts.map +0 -1
  251. package/dist/react/useFetcher.js +0 -43
  252. package/dist/react/useFetcher.js.map +0 -1
  253. package/dist/react-native/index.js.map +0 -1
  254. package/dist/react-native/share.d.ts +0 -9
  255. package/dist/react-native/share.d.ts.map +0 -1
  256. package/dist/react-native/share.js +0 -23
  257. package/dist/react-native/share.js.map +0 -1
  258. package/dist/react-native/update.d.ts +0 -3
  259. package/dist/react-native/update.d.ts.map +0 -1
  260. package/dist/react-native/update.js +0 -40
  261. package/dist/react-native/update.js.map +0 -1
  262. package/dist/react-native/useAppState.d.ts +0 -2
  263. package/dist/react-native/useAppState.d.ts.map +0 -1
  264. package/dist/react-native/useAppState.js +0 -18
  265. package/dist/react-native/useAppState.js.map +0 -1
  266. package/dist/tailwind/fullpage.d.ts +0 -3
  267. package/dist/tailwind/fullpage.d.ts.map +0 -1
  268. package/dist/tailwind/fullpage.js +0 -14
  269. package/dist/tailwind/fullpage.js.map +0 -1
  270. package/dist/tailwind/index.js.map +0 -1
  271. package/dist/tailwind/responsiveHelper.d.ts +0 -3
  272. package/dist/tailwind/responsiveHelper.d.ts.map +0 -1
  273. package/dist/tailwind/responsiveHelper.js +0 -16
  274. package/dist/tailwind/responsiveHelper.js.map +0 -1
  275. package/src/bootstrap/adaptiveContainer.tsx +0 -12
  276. package/src/bootstrap/controls.stories.tsx +0 -62
  277. package/src/bootstrap/controls.tsx +0 -119
  278. package/src/bootstrap/error.stories.tsx +0 -34
  279. package/src/bootstrap/error.tsx +0 -37
  280. package/src/bootstrap/field.stories.tsx +0 -42
  281. package/src/bootstrap/field.tsx +0 -37
  282. package/src/bootstrap/footer.tsx +0 -61
  283. package/src/bootstrap/globalLoading.stories.tsx +0 -25
  284. package/src/bootstrap/globalLoading.tsx +0 -19
  285. package/src/bootstrap/index.ts +0 -12
  286. package/src/bootstrap/loading.stories.tsx +0 -35
  287. package/src/bootstrap/loading.tsx +0 -24
  288. package/src/bootstrap/main.scss +0 -86
  289. package/src/bootstrap/responsiveHelper.tsx +0 -55
  290. package/src/bootstrap/screen.stories.tsx +0 -160
  291. package/src/bootstrap/screen.tsx +0 -146
  292. package/src/bootstrap/toaster.stories.tsx +0 -32
  293. package/src/bootstrap/toaster.tsx +0 -40
  294. package/src/bootstrap/useModal.stories.tsx +0 -51
  295. package/src/bootstrap/useModal.tsx +0 -93
  296. package/src/bootstrap/useWrappedForm.ts +0 -42
  297. package/src/core/README.md +0 -91
  298. package/src/core/cache.test.ts +0 -121
  299. package/src/core/cache.ts +0 -246
  300. package/src/core/errors.ts +0 -17
  301. package/src/core/files.ts +0 -29
  302. package/src/core/index.ts +0 -9
  303. package/src/core/ls.ts +0 -15
  304. package/src/core/measure.ts +0 -109
  305. package/src/core/mutex.ts +0 -22
  306. package/src/core/worker.test.ts +0 -197
  307. package/src/core/worker.ts +0 -347
  308. package/src/core/workerUtils.ts +0 -32
  309. package/src/core/wrpc.fixture.ts +0 -106
  310. package/src/core/wrpc.test.ts +0 -225
  311. package/src/core/wrpc.ts +0 -377
  312. package/src/electron/README.md +0 -13
  313. package/src/electron/createWindow.ts +0 -234
  314. package/src/electron/index.ts +0 -2
  315. package/src/electron/updater.ts +0 -54
  316. package/src/electron-builder/builder.ts +0 -150
  317. package/src/electron-builder/images.ts +0 -33
  318. package/src/electron-builder/index.ts +0 -2
  319. package/src/mui/README.md +0 -3
  320. package/src/mui/formControlFieldset.stories.tsx +0 -71
  321. package/src/mui/formControlFieldset.tsx +0 -26
  322. package/src/mui/formLabelLegend.tsx +0 -11
  323. package/src/mui/genericControl.tsx +0 -20
  324. package/src/mui/index.ts +0 -4
  325. package/src/mui/readOnly.tsx +0 -6
  326. package/src/next/appLink.tsx +0 -40
  327. package/src/next/index.ts +0 -5
  328. package/src/next/measure.ts +0 -24
  329. package/src/next/noSSR.tsx +0 -36
  330. package/src/next/redirect.tsx +0 -13
  331. package/src/next/useIsInner.ts +0 -13
  332. package/src/react/apiCall.ts +0 -25
  333. package/src/react/form/client.tsx +0 -73
  334. package/src/react/form/form.tsx +0 -178
  335. package/src/react/form/index.ts +0 -2
  336. package/src/react/index.ts +0 -5
  337. package/src/react/keyboard.tsx +0 -54
  338. package/src/react/useFetch.ts +0 -29
  339. package/src/react/useFetcher.ts +0 -54
  340. package/src/react-native/index.ts +0 -3
  341. package/src/react-native/share.ts +0 -31
  342. package/src/react-native/update.tsx +0 -40
  343. package/src/react-native/useAppState.ts +0 -18
  344. package/src/tailwind/README.md +0 -8
  345. package/src/tailwind/fullpage.tsx +0 -11
  346. package/src/tailwind/index.ts +0 -2
  347. package/src/tailwind/responsiveHelper.tsx +0 -16
  348. package/src-todo/auth0.tsx +0 -177
  349. package/tsconfig.json +0 -23
  350. package/turbo.json +0 -10
  351. package/vite.config.ts +0 -56
  352. package/vite.exports.ts +0 -121
@@ -1,32 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { fn } from '@storybook/test';
3
-
4
- import { Toaster } from './toaster';
5
-
6
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
7
- const meta: Meta<typeof Toaster> = {
8
- title: 'Bootstrap / Toaster',
9
- component: Toaster,
10
- parameters: {
11
- layout: 'centered',
12
- },
13
- tags: ['autodocs'],
14
- argTypes: {},
15
- args: { onClick: fn() },
16
- };
17
-
18
- export default meta;
19
-
20
- type Story = StoryObj<typeof meta>;
21
-
22
- export const Default: Story = {
23
- args: {
24
- toast: 'Hello, World!',
25
- },
26
- };
27
-
28
- export const Object: Story = {
29
- args: {
30
- toast: { message: 'Toast', variant: 'dark' },
31
- },
32
- };
@@ -1,40 +0,0 @@
1
- 'use client';
2
-
3
- import React, { useState, FC } from 'react';
4
- import { Toast, ToastProps } from 'react-bootstrap';
5
- // import { useToaster } from '../redux/toasterSlice';
6
-
7
- export type ToasterProps = {
8
- toast: string | { message: string; title?: string; variant?: 'dark' | 'success' | 'danger' };
9
- } & ToastProps;
10
-
11
- export const Toaster: FC<ToasterProps> = function Toaster({ toast }) {
12
- //const { toast, setToast } = useToaster();
13
- const [dismissed, setDismissed] = useState(false);
14
-
15
- const msg = typeof toast === 'string' ? toast : toast?.message;
16
- // const title = typeof toast === 'string' ? 'Notification' : toast?.title;
17
- const variant = typeof toast === 'string' ? '' : toast?.variant;
18
-
19
- return (
20
- <Toast
21
- onClose={() => setDismissed(true)}
22
- show={!dismissed}
23
- delay={10000}
24
- autohide
25
- bg={variant?.toLowerCase()}
26
- className="position-fixed top-50 right-50 min-w-200px z-3"
27
- >
28
- <Toast.Header>
29
- <strong className="me-auto">Notification</strong>
30
- </Toast.Header>
31
- <Toast.Body
32
- className={
33
- ['dark', 'success', 'danger'].includes((variant as string)?.toLowerCase()) ? 'text-white' : ''
34
- }
35
- >
36
- {msg}
37
- </Toast.Body>
38
- </Toast>
39
- );
40
- };
@@ -1,51 +0,0 @@
1
- import React, { FC } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react';
3
- import { useModal, UseModalProps } from './useModal';
4
- import { Button } from 'react-bootstrap';
5
-
6
- // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
7
- const meta: Meta<FC<UseModalProps>> = {
8
- title: 'Bootstrap / useModal',
9
- parameters: {
10
- layout: 'centered',
11
- },
12
- tags: ['autodocs'],
13
- argTypes: {
14
- children: { control: 'text' },
15
- title: { control: 'text' },
16
- cancelButton: { control: 'text' },
17
- submitButton: { control: 'text' },
18
- offcanvas: { control: 'check' },
19
- },
20
- args: {
21
- children: 'Modal Content',
22
- title: 'Modal Title',
23
- },
24
- render: function Demo(args) {
25
- const { open, show, close, ModalDialog } = useModal();
26
- return (
27
- <>
28
- <Button onClick={open}>Open Modal</Button>
29
- <ModalDialog {...args} show={show}>
30
- {args.children}
31
- <Button onClick={close}>Close Modal</Button>
32
- </ModalDialog>
33
- </>
34
- );
35
- },
36
- // args: { onSubmit: (e) => e.preventDefault() },
37
- };
38
-
39
- export default meta;
40
-
41
- type Story = StoryObj<typeof meta>;
42
-
43
- export const Default: Story = {
44
- args: {},
45
- };
46
-
47
- export const Offcanvas: Story = {
48
- args: {
49
- offcanvas: true,
50
- },
51
- };
@@ -1,93 +0,0 @@
1
- import React, { useCallback, useMemo, useState, JSX, FC, memo } from 'react';
2
- import { Button, Modal, ModalProps, Offcanvas, OffcanvasProps, Stack } from 'react-bootstrap';
3
-
4
- export type UseModalArgs = { onClose?: any; showOnMount?: boolean };
5
-
6
- export type UseModalProps = {
7
- children?: any;
8
- show?: boolean;
9
- onSubmit?: (e: any) => void;
10
- submitButton?: string | any;
11
- cancelButton?: string | any;
12
- offcanvas?: boolean;
13
- title?: string | any;
14
- containerProps?: ModalProps | OffcanvasProps;
15
- };
16
-
17
- export function useModal({ onClose, showOnMount }: UseModalArgs = {}): {
18
- show: boolean | undefined;
19
- close: () => void;
20
- open: () => void;
21
- ModalDialog: FC<ModalProps>;
22
- } {
23
- const [show, setShow] = useState(showOnMount);
24
-
25
- const close = useCallback((): void => {
26
- setShow(false);
27
- onClose?.();
28
- }, [onClose]);
29
-
30
- const open = useCallback((): void => setShow(true), []);
31
-
32
- const defaultOnSubmit = useCallback(
33
- (e: any) => {
34
- e.preventDefault();
35
- close();
36
- },
37
- [close],
38
- );
39
-
40
- const ModalDialog = useMemo(
41
- () =>
42
- memo(function ModalDialog({
43
- children,
44
- show,
45
- onSubmit = defaultOnSubmit,
46
- submitButton = 'Done',
47
- cancelButton = 'Cancel',
48
- offcanvas = false,
49
- title = null as any,
50
- containerProps = {},
51
- }: ModalProps) {
52
- const Container = offcanvas ? Offcanvas : Modal;
53
- const containerDefaultProps = offcanvas ? { style: { maxWidth: '85%' } } : {};
54
- const Body = offcanvas ? Offcanvas.Body : Modal.Body;
55
- const Header = offcanvas ? Offcanvas.Header : Modal.Header;
56
- const Title = offcanvas ? Offcanvas.Title : Modal.Title;
57
-
58
- return (
59
- <Container {...{ ...containerDefaultProps, ...containerProps }} show={show} onHide={close}>
60
- <form onSubmit={onSubmit}>
61
- {title && (
62
- <Header closeButton>
63
- <Title>{title}</Title>
64
- </Header>
65
- )}
66
-
67
- <Body as={Stack} gap={3}>
68
- {show && children}
69
- </Body>
70
-
71
- {!offcanvas && (submitButton || cancelButton) && (
72
- <Modal.Footer>
73
- {cancelButton && (
74
- <Button variant="outline-secondary" onClick={close}>
75
- {cancelButton}
76
- </Button>
77
- )}
78
- {submitButton && (
79
- <Button variant="secondary" type="submit">
80
- {submitButton}
81
- </Button>
82
- )}
83
- </Modal.Footer>
84
- )}
85
- </form>
86
- </Container>
87
- );
88
- }),
89
- [close, defaultOnSubmit],
90
- );
91
-
92
- return { show, close, open, ModalDialog };
93
- }
@@ -1,42 +0,0 @@
1
- import { useForm, FormState } from 'react-hook-form';
2
- import { useCallback } from 'react';
3
-
4
- export const isFormLoading = (formState: FormState<any>): boolean => formState.isLoading || formState.isSubmitting;
5
-
6
- export const useWrappedForm: typeof useForm = (options) => {
7
- const form = useForm(options);
8
-
9
- const handleSubmit: typeof form.handleSubmit = useCallback(
10
- (onSubmit, onError) => {
11
- const wrappedSubmit: typeof onSubmit = async (data) => {
12
- try {
13
- await onSubmit(data);
14
- } catch (e) {
15
- form.setError('root', { type: 'server', message: (e as Error).message });
16
- console.error('Error submitting form', e);
17
- }
18
- };
19
- return form.handleSubmit(wrappedSubmit, onError);
20
- },
21
- [form],
22
- );
23
-
24
- return { ...form, handleSubmit };
25
- };
26
-
27
- /**
28
- * Issue #3: Submit event still propagates to parent when using portal
29
- * https://reactjs.org/docs/portals.html#event-bubbling-through-portals
30
- * Event bubbling goes through React DOM instead of HTML DOM
31
- * Portals don't have an effect on this one, we need to stop event propagation
32
- * This should be our default form handling method
33
- * https://codesandbox.io/s/react-hook-form-nested-portal-6x3fvy?file=/src/App.tsx:1905-2261
34
- * https://github.com/react-hook-form/react-hook-form/issues/1005#issuecomment-988380981
35
- */
36
- export const stopPropagation =
37
- (callback: any) =>
38
- (e: Event): void => {
39
- e.stopPropagation();
40
- e.preventDefault();
41
- callback(e);
42
- };
@@ -1,91 +0,0 @@
1
- # WRPC
2
-
3
- TODO
4
-
5
- - [ ] Add to readme https://stackoverflow.com/questions/77727664/how-to-get-returned-value-from-async-generator-when-using-for-await
6
- - [ ] Value passed to next are ignored https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator/next#sending_values_to_the_generator
7
-
8
- ```mermaid
9
- sequenceDiagram
10
- box Main
11
- participant Code
12
- participant Caller
13
- end
14
- box Worker
15
- participant Worker
16
- participant Resolver
17
- end
18
-
19
- %% autonumber
20
-
21
- Code->>Caller: caller.generator(payload)
22
-
23
- Caller-->>Code: iterator & promise
24
-
25
- Code->>Code: Start main CONSUMER loop
26
-
27
- Code->>Caller: iterator[Symbol]()
28
-
29
- Caller->>Caller: Start replica GENERATOR loop
30
-
31
- Code->>Caller: iterator.next()
32
-
33
- Caller->>Worker: postMessage(payload)
34
-
35
- Worker->>Resolver: resolver(payload)
36
-
37
- Resolver-->>Worker: iterator
38
-
39
- Worker->>Worker: Start replica CONSUMER loop
40
-
41
- Worker->>Resolver: iterator[Symbol]()
42
-
43
- Resolver->>Resolver: Start GENERATOR loop
44
-
45
- rect rgb(232, 244, 248)
46
-
47
- loop Synchronized iteration
48
- Worker->>+Resolver: iterator.next(payload)
49
-
50
- Resolver-->>-Worker: yield value
51
-
52
- Worker-->>Caller: postMessage(value, done=false)
53
-
54
- Note over Worker: Wait for ACK or ABORT
55
-
56
- Caller-->>Code: yield value
57
-
58
- Code->>Caller: iterator.next(nextPayload)
59
-
60
- Caller->>Worker: postMessage(ack, nextPayload)
61
- end
62
-
63
- end
64
-
65
- break Break or AbortSignal (maybe)
66
- Code-->>Code: Loop exits
67
- Code->>Caller: signal.abort()
68
-
69
- Caller-->>Caller: Loop exits
70
-
71
- Caller->>Worker: postMessage(abort)
72
-
73
- Worker-->>Worker: Loop exits via Break
74
-
75
- Resolver-->>Resolver: Loop exits
76
- end
77
-
78
- opt Occurs on Error
79
- Resolver-->>Worker: throw Error
80
-
81
- Worker-->>Caller: postMessage(error, done=true)
82
-
83
- Caller-->>Code: throw Error
84
- end
85
-
86
- Resolver-->>Worker: return value
87
-
88
- Worker-->>Caller: postMessage(value, done=true)
89
-
90
- Caller-->>Code: return value
91
- ```
@@ -1,121 +0,0 @@
1
- import { expect, describe, test, vi } from 'vitest';
2
- import { ANY, MaybePromise, memo, TransformerMap } from './cache';
3
-
4
- describe('memo', async () => {
5
- test('simple', async () => {
6
- const random = vi.fn(() => Math.random());
7
- const memoized = memo(random);
8
-
9
- const first = await memoized();
10
- const second = await memoized();
11
-
12
- expect(first.hit).toBeFalsy();
13
- expect(second.hit).toBeTruthy();
14
- expect(first.value).toBe(second.value);
15
- expect(memoized.size()).toBe(1);
16
-
17
- memoized.clear();
18
- expect(memoized.size()).toBe(0);
19
-
20
- const third = await memoized();
21
- expect(third.hit).toBeFalsy();
22
- });
23
-
24
- test('with key', async () => {
25
- const random = vi.fn((arg) => arg + Math.random().toString());
26
- const memoized = memo(random);
27
-
28
- const first = await memoized(1);
29
- const second = await memoized(2);
30
-
31
- expect(first.hit).toBeFalsy();
32
- expect(second.hit).toBeFalsy();
33
- expect(first.value).not.toBe(second.value);
34
- expect(memoized.size()).toBe(2);
35
-
36
- const first2 = await memoized(1);
37
- const second2 = await memoized(2);
38
-
39
- expect(first2.hit).toBeTruthy();
40
- expect(first.value).toBe(first2.value);
41
- expect(second2.hit).toBeTruthy();
42
- expect(second.value).toBe(second2.value);
43
-
44
- memoized.clear(1);
45
- expect(memoized.size()).toBe(1);
46
- memoized.clear(ANY);
47
- expect(memoized.size()).toBe(0);
48
- });
49
- });
50
-
51
- describe('TransformerMap', async () => {
52
- test('simple', async () => {
53
- const dispose = vi.fn();
54
-
55
- class Cache extends TransformerMap<number, any> {
56
- write(key, value, oldValue) {
57
- value.cached = true;
58
- value.read = 0;
59
- return value;
60
- }
61
- read(value, key) {
62
- value.read++;
63
- return value;
64
- }
65
- dispose(value, key) {
66
- dispose(value, key);
67
- }
68
- }
69
-
70
- const cache = new Cache('test');
71
-
72
- const obj = { a: 1 };
73
-
74
- const x1 = await cache.memo(1, obj);
75
- expect(x1).toStrictEqual({ a: 1, cached: true, read: 0 });
76
-
77
- const x2 = await cache.memo(1, obj);
78
- expect(x2).toStrictEqual({ a: 1, cached: true, read: 1 });
79
-
80
- const x3 = await cache.memo(1, { a: 2 });
81
- expect(x3).toStrictEqual({ a: 2, cached: true, read: 0 });
82
- expect(cache.size).toEqual(1);
83
- expect(dispose).toBeCalledTimes(1);
84
- expect(dispose).toBeCalledWith({ a: 1, cached: true, read: 1 }, 1);
85
-
86
- const x4 = await cache.memo(2, { a: 20 });
87
-
88
- expect(x4).toStrictEqual({ a: 20, cached: true, read: 0 });
89
- expect(cache.size).toEqual(2);
90
- expect(dispose).toBeCalledTimes(1);
91
- });
92
-
93
- test('key transform', async () => {
94
- const dispose = vi.fn();
95
-
96
- class Cache extends TransformerMap<number, any> {
97
- write(key, value, oldValue) {
98
- return { key, read: 0 };
99
- }
100
- read(value, key) {
101
- value.read++;
102
- return value;
103
- }
104
- dispose(value, key) {
105
- dispose(value, key);
106
- }
107
- }
108
-
109
- const cache = new Cache('test');
110
-
111
- const x1 = await cache.memo(1);
112
- expect(x1).toStrictEqual({ key: 1, read: 0 });
113
-
114
- const x2 = await cache.memo(1);
115
- expect(x2).toStrictEqual({ key: 1, read: 1 });
116
-
117
- cache.clear();
118
- expect(dispose).toBeCalledTimes(1);
119
- expect(dispose).toBeCalledWith({ key: 1, read: 1 }, 1);
120
- });
121
- });