fuma 2.0.50 → 2.1.1

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 (340) hide show
  1. package/dist/action/index.d.ts +2 -5
  2. package/dist/action/index.js +2 -5
  3. package/dist/action/list/handlers.d.ts +6 -6
  4. package/dist/action/list/handlers.js +6 -5
  5. package/dist/action/list/index.d.ts +1 -1
  6. package/dist/action/list/index.js +11 -5
  7. package/dist/action/list/trigger.js +6 -2
  8. package/dist/action/list/utils.js +1 -1
  9. package/dist/action/tip.js +2 -2
  10. package/dist/command/command.svelte.d.ts +16 -0
  11. package/dist/command/command.svelte.js +68 -0
  12. package/dist/command/index.d.ts +1 -0
  13. package/dist/command/index.js +1 -0
  14. package/dist/data.d.ts +87 -0
  15. package/dist/data.js +51 -0
  16. package/dist/index.d.ts +5 -5
  17. package/dist/index.js +5 -5
  18. package/dist/input/InputBoolean.svelte +107 -0
  19. package/dist/input/InputBoolean.svelte.d.ts +12 -0
  20. package/dist/input/InputNumber.svelte +33 -0
  21. package/dist/input/InputNumber.svelte.d.ts +10 -0
  22. package/dist/input/InputRadio.svelte +56 -0
  23. package/dist/input/InputRadio.svelte.d.ts +11 -0
  24. package/dist/input/InputRange.svelte +30 -0
  25. package/dist/input/InputRange.svelte.d.ts +10 -0
  26. package/dist/input/InputRelation.svelte +119 -0
  27. package/dist/input/InputRelation.svelte.d.ts +39 -0
  28. package/dist/input/InputSelect.svelte +113 -0
  29. package/dist/input/InputSelect.svelte.d.ts +37 -0
  30. package/dist/input/InputSelectNative.svelte +56 -0
  31. package/dist/input/InputSelectNative.svelte.d.ts +12 -0
  32. package/dist/input/InputString.svelte +48 -0
  33. package/dist/input/InputString.svelte.d.ts +11 -0
  34. package/dist/input/InputTextarea.svelte +47 -0
  35. package/dist/input/InputTextarea.svelte.d.ts +11 -0
  36. package/dist/input/Issues.svelte +21 -0
  37. package/dist/input/Issues.svelte.d.ts +7 -0
  38. package/dist/input/index.d.ts +11 -0
  39. package/dist/input/index.js +10 -0
  40. package/dist/input/type.d.ts +5 -0
  41. package/dist/popover/Popover.svelte +50 -0
  42. package/dist/popover/index.d.ts +2 -0
  43. package/dist/popover/index.js +2 -0
  44. package/dist/popover/popover.svelte.d.ts +26 -0
  45. package/dist/popover/popover.svelte.js +101 -0
  46. package/dist/remote/useForm.d.ts +6 -0
  47. package/dist/remote/useForm.js +22 -0
  48. package/dist/search/Spans.svelte +15 -0
  49. package/dist/search/Spans.svelte.d.ts +7 -0
  50. package/dist/search/index.d.ts +2 -0
  51. package/dist/search/index.js +2 -0
  52. package/dist/search/search.js +96 -0
  53. package/dist/server/index.d.ts +0 -4
  54. package/dist/server/index.js +0 -4
  55. package/dist/server/parseQuery.js +1 -1
  56. package/dist/server/sse.js +4 -4
  57. package/dist/server/table.js +1 -1
  58. package/dist/state/index.d.ts +1 -0
  59. package/dist/state/index.js +1 -0
  60. package/dist/state/param.svelte.d.ts +17 -0
  61. package/dist/state/param.svelte.js +64 -0
  62. package/dist/ui/button/ButtonDelete.svelte +49 -28
  63. package/dist/ui/button/ButtonDelete.svelte.d.ts +12 -31
  64. package/dist/ui/button/index.d.ts +0 -1
  65. package/dist/ui/button/index.js +0 -1
  66. package/dist/ui/copy/ButtonCopy.svelte +43 -0
  67. package/dist/ui/copy/ButtonCopy.svelte.d.ts +17 -0
  68. package/dist/ui/copy/index.d.ts +2 -0
  69. package/dist/ui/copy/index.js +2 -0
  70. package/dist/ui/copy/useCopy.svelte.d.ts +10 -0
  71. package/dist/ui/copy/useCopy.svelte.js +36 -0
  72. package/dist/ui/dialog/Dialog.svelte +56 -26
  73. package/dist/ui/dialog/Dialog.svelte.d.ts +14 -35
  74. package/dist/ui/dialog/index.d.ts +0 -1
  75. package/dist/ui/dialog/index.js +0 -1
  76. package/dist/ui/drawer/Drawer.svelte +53 -45
  77. package/dist/ui/drawer/Drawer.svelte.d.ts +8 -63
  78. package/dist/ui/drawer/drawerFly.js +1 -1
  79. package/dist/ui/drawer/useLayer.svelte.d.ts +5 -0
  80. package/dist/ui/drawer/useLayer.svelte.js +33 -0
  81. package/dist/ui/index.d.ts +4 -12
  82. package/dist/ui/index.js +4 -12
  83. package/dist/ui/menu/ContextMenu.svelte +27 -26
  84. package/dist/ui/menu/ContextMenu.svelte.d.ts +9 -35
  85. package/dist/ui/menu/DropDown.svelte +44 -26
  86. package/dist/ui/menu/DropDown.svelte.d.ts +18 -43
  87. package/dist/ui/menu/DropDownMenu.svelte +51 -41
  88. package/dist/ui/menu/DropDownMenu.svelte.d.ts +7 -29
  89. package/dist/ui/menu/dropdown.css +4 -4
  90. package/dist/ui/menu/index.d.ts +1 -1
  91. package/dist/ui/menu/index.js +2 -1
  92. package/dist/ui/mode/ToggleMode.svelte +25 -14
  93. package/dist/ui/mode/ToggleMode.svelte.d.ts +10 -35
  94. package/dist/ui/mode/index.d.ts +1 -1
  95. package/dist/ui/mode/index.js +1 -1
  96. package/dist/ui/mode/useMode.svelte.d.ts +8 -0
  97. package/dist/ui/mode/useMode.svelte.js +40 -0
  98. package/dist/ui/pagination/Pagination.svelte +18 -14
  99. package/dist/ui/pagination/Pagination.svelte.d.ts +4 -18
  100. package/dist/ui/range/RangePicker.svelte +3 -2
  101. package/dist/ui/range/RangePickerButton.svelte +49 -37
  102. package/dist/ui/range/RangePickerButton.svelte.d.ts +7 -21
  103. package/dist/ui/range/index.d.ts +1 -1
  104. package/dist/ui/range/index.js +1 -1
  105. package/dist/ui/table/Table.svelte +17 -24
  106. package/dist/ui/table/Table.svelte.d.ts +3 -3
  107. package/dist/ui/table/TableBody.svelte +1 -1
  108. package/dist/ui/table/TableBody.svelte.d.ts +1 -1
  109. package/dist/ui/table/TableFieldsEdition.svelte +90 -78
  110. package/dist/ui/table/TableFieldsEdition.svelte.d.ts +14 -13
  111. package/dist/ui/table/TableHead.svelte +1 -1
  112. package/dist/ui/table/TableViewSelect.svelte +71 -70
  113. package/dist/ui/table/TableViewSelect.svelte.d.ts +10 -23
  114. package/dist/ui/table/cell/TableCellArray.svelte +2 -2
  115. package/dist/ui/table/cell/TableCellBoolean.svelte +3 -4
  116. package/dist/ui/table/cell/index.d.ts +1 -1
  117. package/dist/ui/table/cell/index.js +1 -1
  118. package/dist/ui/table/field.d.ts +7 -7
  119. package/dist/ui/table/head/OrderButtons.svelte +18 -13
  120. package/dist/ui/table/head/OrderButtons.svelte.d.ts +11 -23
  121. package/dist/ui/table/head/TableHeadBoolean.svelte +3 -3
  122. package/dist/ui/table/head/TableHeadDate.svelte +40 -56
  123. package/dist/ui/table/head/TableHeadDate.svelte.d.ts +1 -1
  124. package/dist/ui/table/head/TableHeadDefault.svelte +2 -1
  125. package/dist/ui/table/head/TableHeadNumber.svelte +93 -108
  126. package/dist/ui/table/head/TableHeadNumber.svelte.d.ts +13 -10
  127. package/dist/ui/table/head/TableHeadSelect.svelte +55 -52
  128. package/dist/ui/table/head/TableHeadSelect.svelte.d.ts +13 -10
  129. package/dist/ui/table/head/TableHeadString.svelte +28 -34
  130. package/dist/ui/table/head/index.d.ts +3 -3
  131. package/dist/ui/table/head/index.js +3 -3
  132. package/dist/ui/table/index.d.ts +5 -5
  133. package/dist/ui/table/index.js +4 -5
  134. package/dist/utils/csv.js +1 -1
  135. package/dist/utils/eventEmitter.d.ts +2 -2
  136. package/dist/utils/eventEmitter.js +18 -11
  137. package/dist/utils/index.d.ts +4 -6
  138. package/dist/utils/index.js +4 -6
  139. package/dist/utils/normalizePath.js +1 -1
  140. package/dist/utils/options.d.ts +6 -5
  141. package/dist/utils/options.js +3 -2
  142. package/dist/utils/tippy.d.ts +1 -1
  143. package/dist/utils/tippy.js +1 -1
  144. package/dist/validation/index.d.ts +0 -1
  145. package/dist/validation/index.js +0 -1
  146. package/dist/validation/zod.d.ts +12 -393
  147. package/dist/validation/zod.js +22 -82
  148. package/package.json +115 -134
  149. package/dist/action/heightScreen.d.ts +0 -10
  150. package/dist/action/heightScreen.js +0 -24
  151. package/dist/action/portal.d.ts +0 -3
  152. package/dist/action/portal.js +0 -9
  153. package/dist/action/selector.d.ts +0 -15
  154. package/dist/action/selector.js +0 -71
  155. package/dist/api/client.d.ts +0 -3
  156. package/dist/api/client.js +0 -24
  157. package/dist/api/config.d.ts +0 -46
  158. package/dist/api/config.js +0 -7
  159. package/dist/api/index.d.ts +0 -3
  160. package/dist/api/index.js +0 -3
  161. package/dist/api/server.d.ts +0 -11
  162. package/dist/api/server.js +0 -17
  163. package/dist/private/Meta.svelte +0 -16
  164. package/dist/private/Meta.svelte.d.ts +0 -30
  165. package/dist/private/api.d.ts +0 -61
  166. package/dist/private/api.js +0 -10
  167. package/dist/private/constant.d.ts +0 -14
  168. package/dist/private/constant.js +0 -6
  169. package/dist/private/model.d.ts +0 -70
  170. package/dist/private/model.js +0 -25
  171. package/dist/private/prisma.d.ts +0 -2
  172. package/dist/private/prisma.js +0 -2
  173. package/dist/private/store.d.ts +0 -1
  174. package/dist/private/store.js +0 -2
  175. package/dist/server/auth.d.ts +0 -12
  176. package/dist/server/auth.js +0 -15
  177. package/dist/server/formAction.d.ts +0 -13
  178. package/dist/server/formAction.js +0 -8
  179. package/dist/server/json.d.ts +0 -1
  180. package/dist/server/json.js +0 -16
  181. package/dist/server/parseFormData.d.ts +0 -10
  182. package/dist/server/parseFormData.js +0 -85
  183. package/dist/server/try.d.ts +0 -9
  184. package/dist/server/try.js +0 -41
  185. package/dist/store/index.d.ts +0 -2
  186. package/dist/store/index.js +0 -2
  187. package/dist/store/isSmallScreen.d.ts +0 -1
  188. package/dist/store/isSmallScreen.js +0 -14
  189. package/dist/store/param.d.ts +0 -22
  190. package/dist/store/param.js +0 -61
  191. package/dist/store/session.d.ts +0 -1
  192. package/dist/store/session.js +0 -13
  193. package/dist/ui/badge/Badge.svelte +0 -9
  194. package/dist/ui/badge/Badge.svelte.d.ts +0 -21
  195. package/dist/ui/badge/index.d.ts +0 -1
  196. package/dist/ui/badge/index.js +0 -1
  197. package/dist/ui/button/ButtonCopy.svelte +0 -59
  198. package/dist/ui/button/ButtonCopy.svelte.d.ts +0 -27
  199. package/dist/ui/card/Card.svelte +0 -43
  200. package/dist/ui/card/Card.svelte.d.ts +0 -41
  201. package/dist/ui/card/CardBasic.svelte +0 -15
  202. package/dist/ui/card/CardBasic.svelte.d.ts +0 -31
  203. package/dist/ui/card/CardCollapse.svelte +0 -71
  204. package/dist/ui/card/CardCollapse.svelte.d.ts +0 -39
  205. package/dist/ui/card/CardFullScreen.svelte +0 -31
  206. package/dist/ui/card/CardFullScreen.svelte.d.ts +0 -38
  207. package/dist/ui/card/CardLink.svelte +0 -22
  208. package/dist/ui/card/CardLink.svelte.d.ts +0 -31
  209. package/dist/ui/card/index.d.ts +0 -5
  210. package/dist/ui/card/index.js +0 -5
  211. package/dist/ui/context.d.ts +0 -6
  212. package/dist/ui/context.js +0 -12
  213. package/dist/ui/dialog/DialogConfirm.svelte +0 -24
  214. package/dist/ui/dialog/DialogConfirm.svelte.d.ts +0 -35
  215. package/dist/ui/drawer/layers.d.ts +0 -7
  216. package/dist/ui/drawer/layers.js +0 -68
  217. package/dist/ui/form/Form.svelte +0 -168
  218. package/dist/ui/form/Form.svelte.d.ts +0 -62
  219. package/dist/ui/form/FormInput.svelte +0 -15
  220. package/dist/ui/form/FormSection.svelte +0 -78
  221. package/dist/ui/form/FormSection.svelte.d.ts +0 -39
  222. package/dist/ui/form/form.d.ts +0 -37
  223. package/dist/ui/form/form.js +0 -57
  224. package/dist/ui/form/formInput.js +0 -33
  225. package/dist/ui/form/index.d.ts +0 -3
  226. package/dist/ui/form/index.js +0 -3
  227. package/dist/ui/icon/Icon.svelte +0 -53
  228. package/dist/ui/icon/Icon.svelte.d.ts +0 -29
  229. package/dist/ui/icon/index.d.ts +0 -1
  230. package/dist/ui/icon/index.js +0 -1
  231. package/dist/ui/input/FormControl.svelte +0 -77
  232. package/dist/ui/input/FormControl.svelte.d.ts +0 -34
  233. package/dist/ui/input/InputBoolean.svelte +0 -33
  234. package/dist/ui/input/InputBoolean.svelte.d.ts +0 -46
  235. package/dist/ui/input/InputCheckboxs.svelte +0 -71
  236. package/dist/ui/input/InputCheckboxs.svelte.d.ts +0 -57
  237. package/dist/ui/input/InputCheckboxsMenu.svelte +0 -106
  238. package/dist/ui/input/InputCheckboxsMenu.svelte.d.ts +0 -59
  239. package/dist/ui/input/InputCheckboxsTree.svelte +0 -18
  240. package/dist/ui/input/InputCheckboxsTree.svelte.d.ts +0 -25
  241. package/dist/ui/input/InputCheckboxsTreeNodes.svelte +0 -68
  242. package/dist/ui/input/InputCheckboxsTreeNodes.svelte.d.ts +0 -27
  243. package/dist/ui/input/InputCombo.svelte +0 -99
  244. package/dist/ui/input/InputCombo.svelte.d.ts +0 -59
  245. package/dist/ui/input/InputDate.svelte +0 -47
  246. package/dist/ui/input/InputDate.svelte.d.ts +0 -46
  247. package/dist/ui/input/InputDateTime.svelte +0 -41
  248. package/dist/ui/input/InputDateTime.svelte.d.ts +0 -23
  249. package/dist/ui/input/InputImage.svelte +0 -116
  250. package/dist/ui/input/InputImage.svelte.d.ts +0 -48
  251. package/dist/ui/input/InputImagePreview.svelte +0 -60
  252. package/dist/ui/input/InputImagePreview.svelte.d.ts +0 -27
  253. package/dist/ui/input/InputNumber.svelte +0 -31
  254. package/dist/ui/input/InputNumber.svelte.d.ts +0 -23
  255. package/dist/ui/input/InputOptionInParam.svelte +0 -36
  256. package/dist/ui/input/InputOptionInParam.svelte.d.ts +0 -24
  257. package/dist/ui/input/InputOptions.svelte +0 -85
  258. package/dist/ui/input/InputOptions.svelte.d.ts +0 -21
  259. package/dist/ui/input/InputPassword.svelte +0 -25
  260. package/dist/ui/input/InputPassword.svelte.d.ts +0 -45
  261. package/dist/ui/input/InputRadio.svelte +0 -84
  262. package/dist/ui/input/InputRadio.svelte.d.ts +0 -56
  263. package/dist/ui/input/InputRelation.svelte +0 -171
  264. package/dist/ui/input/InputRelation.svelte.d.ts +0 -76
  265. package/dist/ui/input/InputRelations.svelte +0 -166
  266. package/dist/ui/input/InputRelations.svelte.d.ts +0 -55
  267. package/dist/ui/input/InputSearch.svelte +0 -59
  268. package/dist/ui/input/InputSearch.svelte.d.ts +0 -29
  269. package/dist/ui/input/InputSelect.svelte +0 -84
  270. package/dist/ui/input/InputSelect.svelte.d.ts +0 -29
  271. package/dist/ui/input/InputText.svelte +0 -46
  272. package/dist/ui/input/InputText.svelte.d.ts +0 -30
  273. package/dist/ui/input/InputTextarea.svelte +0 -23
  274. package/dist/ui/input/InputTextarea.svelte.d.ts +0 -23
  275. package/dist/ui/input/InputTime.svelte +0 -47
  276. package/dist/ui/input/InputTime.svelte.d.ts +0 -46
  277. package/dist/ui/input/RelationAfter.svelte +0 -34
  278. package/dist/ui/input/RelationAfter.svelte.d.ts +0 -26
  279. package/dist/ui/input/SelectorList.svelte +0 -50
  280. package/dist/ui/input/SelectorList.svelte.d.ts +0 -49
  281. package/dist/ui/input/action.d.ts +0 -13
  282. package/dist/ui/input/action.js +0 -56
  283. package/dist/ui/input/index.d.ts +0 -26
  284. package/dist/ui/input/index.js +0 -26
  285. package/dist/ui/input/textRich/InputTextRich.svelte +0 -72
  286. package/dist/ui/input/textRich/InputTextRich.svelte.d.ts +0 -48
  287. package/dist/ui/input/textRich/SuggesionList.svelte +0 -25
  288. package/dist/ui/input/textRich/SuggesionList.svelte.d.ts +0 -23
  289. package/dist/ui/input/textRich/ToolMark.svelte +0 -22
  290. package/dist/ui/input/textRich/ToolMark.svelte.d.ts +0 -25
  291. package/dist/ui/input/textRich/ToolMarkColor.svelte +0 -36
  292. package/dist/ui/input/textRich/ToolMarkColor.svelte.d.ts +0 -23
  293. package/dist/ui/input/textRich/ToolMarkLink.svelte +0 -72
  294. package/dist/ui/input/textRich/ToolMarkLink.svelte.d.ts +0 -21
  295. package/dist/ui/input/textRich/ToolMenu.svelte +0 -66
  296. package/dist/ui/input/textRich/ToolMenu.svelte.d.ts +0 -33
  297. package/dist/ui/input/textRich/ToolMenuAlign.svelte +0 -50
  298. package/dist/ui/input/textRich/ToolMenuAlign.svelte.d.ts +0 -21
  299. package/dist/ui/input/textRich/ToolMenuInsert.svelte +0 -54
  300. package/dist/ui/input/textRich/ToolMenuInsert.svelte.d.ts +0 -23
  301. package/dist/ui/input/textRich/ToolMenuNode.svelte +0 -60
  302. package/dist/ui/input/textRich/ToolMenuNode.svelte.d.ts +0 -21
  303. package/dist/ui/input/textRich/ToolsBar.svelte +0 -61
  304. package/dist/ui/input/textRich/ToolsBar.svelte.d.ts +0 -24
  305. package/dist/ui/input/textRich/extensions.d.ts +0 -2
  306. package/dist/ui/input/textRich/extensions.js +0 -62
  307. package/dist/ui/input/textRich/indent.d.ts +0 -13
  308. package/dist/ui/input/textRich/indent.js +0 -112
  309. package/dist/ui/input/textRich/index.d.ts +0 -3
  310. package/dist/ui/input/textRich/index.js +0 -3
  311. package/dist/ui/input/textRich/suggestion.d.ts +0 -7
  312. package/dist/ui/input/textRich/suggestion.js +0 -55
  313. package/dist/ui/input/textRich/tiptapParser.d.ts +0 -4
  314. package/dist/ui/input/textRich/tiptapParser.js +0 -29
  315. package/dist/ui/input/types.d.ts +0 -15
  316. package/dist/ui/input/types.js +0 -1
  317. package/dist/ui/login/Login.svelte +0 -99
  318. package/dist/ui/login/Login.svelte.d.ts +0 -20
  319. package/dist/ui/login/index.d.ts +0 -1
  320. package/dist/ui/login/index.js +0 -1
  321. package/dist/ui/placeholder/Placeholder.svelte +0 -12
  322. package/dist/ui/placeholder/Placeholder.svelte.d.ts +0 -30
  323. package/dist/ui/placeholder/PlaceholderImage.svelte +0 -16
  324. package/dist/ui/placeholder/PlaceholderImage.svelte.d.ts +0 -30
  325. package/dist/ui/placeholder/index.d.ts +0 -2
  326. package/dist/ui/placeholder/index.js +0 -2
  327. package/dist/ui/table/type.d.ts +0 -2
  328. package/dist/ui/tabs/Tabs.svelte +0 -32
  329. package/dist/ui/tabs/Tabs.svelte.d.ts +0 -22
  330. package/dist/ui/tabs/TabsIcon.svelte +0 -60
  331. package/dist/ui/tabs/TabsIcon.svelte.d.ts +0 -24
  332. package/dist/ui/tabs/index.d.ts +0 -8
  333. package/dist/ui/tabs/index.js +0 -2
  334. package/dist/utils/avatar.d.ts +0 -1
  335. package/dist/utils/avatar.js +0 -5
  336. package/dist/utils/component.d.ts +0 -6
  337. package/dist/utils/component.js +0 -3
  338. package/dist/validation/form.d.ts +0 -34
  339. package/dist/validation/form.js +0 -103
  340. /package/dist/{ui/table → input}/type.js +0 -0
@@ -1,84 +1,24 @@
1
- import zod from 'zod';
2
- import { jsonParse } from '../utils/index.js';
3
- function json(shap) {
4
- return zod.union([zod.object(shap), zod.string().transform(jsonParse).pipe(zod.object(shap))]);
5
- }
6
- function jsonArray(shap) {
7
- return zod.union([zod.array(shap), zod.string().transform(jsonParse).pipe(zod.array(shap))]);
8
- }
9
- const relation = {
10
- connect: zod.object({ id: zod.string() }).transform((item) => ({ connect: item })),
11
- create(shap) {
12
- return zod.object(shap).transform((value) => ({ create: value }));
13
- },
14
- connectOrCreate(shap) {
15
- return zod.object(shap).transform((value) => ({ connectOrCreate: value }));
16
- },
17
- upsert(shap) {
18
- return zod.object(shap).transform((value) => ({ upsert: value }));
19
- },
20
- update(shap) {
21
- return zod.object(shap).transform((value) => ({ update: value }));
1
+ import z from 'zod';
2
+ export const zodJsonValue = z.lazy(() => z.union([
3
+ z.null(),
4
+ z.string(),
5
+ z.number(),
6
+ z.boolean(),
7
+ zodJsonRecord,
8
+ z.array(z.string()),
9
+ z.array(z.number()),
10
+ z.array(z.boolean()),
11
+ z.array(zodJsonRecord)
12
+ ]));
13
+ export const zodJsonRecord = z.record(z.string(), zodJsonValue);
14
+ export const zodCoerceJson = z.string().transform((str, ctx) => {
15
+ try {
16
+ return JSON.parse(str);
22
17
  }
23
- };
24
- function relationsUniqueInput(operation = 'set') {
25
- return zod
26
- .array(zod.object({ id: zod.string() }))
27
- .transform((items) => ({ [operation]: items.map(({ id }) => ({ id })) }));
28
- }
29
- function objectOrArray(shap) {
30
- return zod.union([zod.array(zod.object(shap)), zod.object(shap)]);
31
- }
32
- const relations = {
33
- set: relationsUniqueInput('set'),
34
- disconnect: relationsUniqueInput('set'),
35
- delete: relationsUniqueInput('delete'),
36
- connect: relationsUniqueInput('connect'),
37
- create(shap) {
38
- return objectOrArray(shap).transform((value) => ({ create: value }));
39
- },
40
- connectOrCreate(shap) {
41
- return objectOrArray(shap).transform((value) => ({ connectOrCreate: value }));
42
- },
43
- upsert(shap) {
44
- return objectOrArray(shap).transform((value) => ({ upsert: value }));
45
- },
46
- createMany(shap) {
47
- return objectOrArray(shap).transform((value) => ({ createMany: value }));
48
- },
49
- update(shap) {
50
- return objectOrArray(shap).transform((value) => ({ update: value }));
51
- },
52
- updateMany(shap) {
53
- return objectOrArray(shap).transform((value) => ({ updateMany: value }));
54
- },
55
- deleteMany(shap) {
56
- return objectOrArray(shap).transform((value) => ({ deleteMany: value }));
18
+ catch (_err) {
19
+ ctx.addIssue({ code: 'custom', message: 'Invalid JSON' });
20
+ return z.NEVER;
57
21
  }
58
- };
59
- const filter = {
60
- number: json({
61
- min: zod.number().optional(),
62
- max: zod.number().optional(),
63
- order: zod.enum(['asc', 'desc']).optional()
64
- }).optional(),
65
- multiselect: jsonArray(zod.string()).optional(),
66
- range: json({
67
- start: zod.coerce.date().optional(),
68
- end: zod.coerce.date().optional(),
69
- order: zod.enum(['asc', 'desc']).optional()
70
- }).optional(),
71
- boolean: zod
72
- .enum(['true', 'false'])
73
- .transform((value) => value === 'true')
74
- .optional()
75
- };
76
- export const z = {
77
- ...zod,
78
- json,
79
- jsonArray,
80
- relation,
81
- relations,
82
- filter
83
- };
84
- export const toTuple = Object.keys;
22
+ });
23
+ export const zodCoerceJsonValue = zodCoerceJson.pipe(zodJsonValue);
24
+ export const zodCoerceJsonRecord = zodCoerceJson.pipe(zodJsonRecord);
package/package.json CHANGED
@@ -1,135 +1,116 @@
1
1
  {
2
- "name": "fuma",
3
- "version": "2.0.50",
4
- "description": "My fullstack material build with sveltekit, daisyui, zod, prisma, lucia",
5
- "author": {
6
- "name": "Jonas Voisard",
7
- "email": "jonas.voisard@gmail.com"
8
- },
9
- "svelte": "./dist/index.js",
10
- "types": "./dist/index.d.ts",
11
- "type": "module",
12
- "prisma": {
13
- "seed": "node --loader ts-node/esm prisma/seed.ts"
14
- },
15
- "exports": {
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "svelte": "./dist/index.js",
19
- "default": "./dist/index.js"
20
- },
21
- "./ui": {
22
- "types": "./dist/ui/index.d.ts",
23
- "svelte": "./dist/ui/index.js",
24
- "default": "./dist/ui/index.js"
25
- },
26
- "./utils": {
27
- "types": "./dist/utils/index.d.ts",
28
- "default": "./dist/utils/index.js"
29
- },
30
- "./api": {
31
- "types": "./dist/api/index.d.ts",
32
- "default": "./dist/api/index.js"
33
- },
34
- "./store": {
35
- "types": "./dist/store/index.d.ts",
36
- "default": "./dist/store/index.js"
37
- },
38
- "./validation": {
39
- "types": "./dist/validation/index.d.ts",
40
- "default": "./dist/validation/index.js"
41
- },
42
- "./action": {
43
- "types": "./dist/action/index.d.ts",
44
- "default": "./dist/action/index.js"
45
- },
46
- "./server": {
47
- "types": "./dist/server/index.d.ts",
48
- "default": "./dist/server/index.js"
49
- }
50
- },
51
- "files": [
52
- "dist",
53
- "!dist/**/*.test.*",
54
- "!dist/**/*.spec.*"
55
- ],
56
- "devDependencies": {
57
- "@sveltejs/adapter-auto": "^3.3.1",
58
- "@sveltejs/kit": "^2.43.8",
59
- "@sveltejs/package": "^2.5.4",
60
- "@sveltejs/vite-plugin-svelte": "^6.2.1",
61
- "@tailwindcss/typography": "^0.5.19",
62
- "@types/debounce": "^1.2.4",
63
- "@types/eslint": "^8.56.12",
64
- "@types/node": "^24.6.2",
65
- "@typescript-eslint/eslint-plugin": "^7.18.0",
66
- "@typescript-eslint/parser": "^7.18.0",
67
- "autoprefixer": "^10.4.21",
68
- "daisyui": "5.0.0-beta.3",
69
- "eslint": "^8.57.1",
70
- "eslint-config-prettier": "^9.1.2",
71
- "eslint-plugin-svelte": "^2.46.1",
72
- "postcss": "^8.5.6",
73
- "postcss-load-config": "^5.1.0",
74
- "prettier": "^3.6.2",
75
- "prettier-plugin-svelte": "^3.4.0",
76
- "prettier-plugin-tailwindcss": "^0.6.14",
77
- "prisma": "^5.22.0",
78
- "publint": "^0.1.16",
79
- "svelte-check": "^3.8.6",
80
- "tailwindcss": "^4.1.14",
81
- "tslib": "^2.8.1",
82
- "typescript": "^5.9.3",
83
- "vitest": "^1.6.1"
84
- },
85
- "dependencies": {
86
- "@lucia-auth/adapter-prisma": "^4.0.1",
87
- "@mdi/js": "^7.4.47",
88
- "@prisma/client": "5.22.0",
89
- "@tailwindcss/vite": "^4.1.14",
90
- "@tiptap/core": "^2.26.2",
91
- "@tiptap/extension-color": "^2.26.2",
92
- "@tiptap/extension-highlight": "^2.26.2",
93
- "@tiptap/extension-image": "^2.26.2",
94
- "@tiptap/extension-link": "^2.26.2",
95
- "@tiptap/extension-mention": "^2.26.2",
96
- "@tiptap/extension-placeholder": "^2.26.2",
97
- "@tiptap/extension-text-align": "^2.26.2",
98
- "@tiptap/extension-text-style": "^2.26.2",
99
- "@tiptap/extension-youtube": "^2.26.2",
100
- "@tiptap/html": "^2.26.2",
101
- "@tiptap/pm": "^2.26.2",
102
- "@tiptap/starter-kit": "^2.26.1",
103
- "@tiptap/suggestion": "^2.26.2",
104
- "axios": "^1.12.2",
105
- "dayjs": "^1.11.18",
106
- "debounce": "^2.2.0",
107
- "devalue": "^4.3.3",
108
- "litepicker": "^2.0.12",
109
- "lucia": "^3.2.2",
110
- "mode-watcher": "^0.5.1",
111
- "oslo": "^1.2.1",
112
- "svelte": "^5.39.8",
113
- "svelte-easy-crop": "^3.0.1",
114
- "svelte-sonner": "^0.3.28",
115
- "tippy.js": "^6.3.7",
116
- "ts-node": "^10.9.2",
117
- "vite": "^7.1.12",
118
- "zod": "^4.1.11"
119
- },
120
- "scripts": {
121
- "dev": "vite dev --host",
122
- "build": "vite build && npm run package",
123
- "preview": "vite preview --host",
124
- "package": "svelte-kit sync && svelte-package && publint",
125
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
126
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
127
- "test": "vitest",
128
- "lint": "prettier --check . && eslint .",
129
- "format": "prettier --write .",
130
- "migrate": "prisma migrate dev",
131
- "generate": "prisma generate",
132
- "studio": "prisma studio",
133
- "seed": "prisma db seed"
134
- }
135
- }
2
+ "name": "fuma",
3
+ "version": "2.1.1",
4
+ "description": "My fullstack material build with sveltekit, daisyui, zod, prisma, lucia",
5
+ "author": {
6
+ "name": "Jonas Voisard",
7
+ "email": "jonas.voisard@gmail.com"
8
+ },
9
+ "scripts": {
10
+ "dev": "vite dev --host",
11
+ "build": "vite build && npm run package",
12
+ "preview": "vite preview --host",
13
+ "package": "svelte-kit sync && svelte-package && publint",
14
+ "prepublishOnly": "npm run package",
15
+ "sync": "svelte-kit sync",
16
+ "svelte-check": "svelte-check --tsconfig ./tsconfig.json",
17
+ "check": "run-p sync svelte-check lint",
18
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
19
+ "test": "vitest",
20
+ "format": "prettier --write .",
21
+ "lint": "prettier --check . && eslint .",
22
+ "migrate": "prisma migrate dev",
23
+ "generate": "prisma generate",
24
+ "studio": "prisma studio",
25
+ "seed": "prisma db seed"
26
+ },
27
+ "svelte": "./dist/index.js",
28
+ "types": "./dist/index.d.ts",
29
+ "type": "module",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "svelte": "./dist/index.js",
34
+ "default": "./dist/index.js"
35
+ },
36
+ "./ui": {
37
+ "types": "./dist/ui/index.d.ts",
38
+ "svelte": "./dist/ui/index.js",
39
+ "default": "./dist/ui/index.js"
40
+ },
41
+ "./utils": {
42
+ "types": "./dist/utils/index.d.ts",
43
+ "default": "./dist/utils/index.js"
44
+ },
45
+ "./state": {
46
+ "types": "./dist/state/index.d.ts",
47
+ "default": "./dist/state/index.js"
48
+ },
49
+ "./validation": {
50
+ "types": "./dist/validation/index.d.ts",
51
+ "default": "./dist/validation/index.js"
52
+ },
53
+ "./action": {
54
+ "types": "./dist/action/index.d.ts",
55
+ "default": "./dist/action/index.js"
56
+ },
57
+ "./server": {
58
+ "types": "./dist/server/index.d.ts",
59
+ "default": "./dist/server/index.js"
60
+ }
61
+ },
62
+ "files": [
63
+ "dist",
64
+ "!dist/**/*.test.*",
65
+ "!dist/**/*.spec.*"
66
+ ],
67
+ "peerDependencies": {
68
+ "daisyui": "^5.5.17",
69
+ "tailwindcss": "^4.1.18",
70
+ "zod": "^4.3.6"
71
+ },
72
+ "devDependencies": {
73
+ "@biomejs/biome": "2.4.2",
74
+ "@eslint/compat": "^2.0.5",
75
+ "@sveltejs/adapter-auto": "^7.0.1",
76
+ "@sveltejs/kit": "^2.58.0",
77
+ "@sveltejs/package": "^2.5.7",
78
+ "@sveltejs/vite-plugin-svelte": "^6.2.4",
79
+ "@tailwindcss/vite": "^4.2.4",
80
+ "@types/node": "^25.6.0",
81
+ "daisyui": "^5.5.19",
82
+ "eslint": "^9.39.4",
83
+ "eslint-config-prettier": "^10.1.8",
84
+ "eslint-plugin-svelte": "^3.17.1",
85
+ "npm-run-all": "^4.1.5",
86
+ "prettier": "^3.8.3",
87
+ "prettier-plugin-svelte": "^3.5.1",
88
+ "prettier-plugin-tailwindcss": "^0.7.4",
89
+ "publint": "^0.1.16",
90
+ "shiki": "^4.0.2",
91
+ "svelte-check": "^4.4.6",
92
+ "tailwindcss": "^4.2.4",
93
+ "typescript": "^5.9.3",
94
+ "typescript-eslint": "^8.59.1",
95
+ "vite": "^7.3.2",
96
+ "vite-plugin-devtools-json": "^1.0.0",
97
+ "vitest": "^4.1.5"
98
+ },
99
+ "dependencies": {
100
+ "@faker-js/faker": "^10.4.0",
101
+ "@lucide/svelte": "^1.14.0",
102
+ "dayjs": "^1.11.20",
103
+ "debounce": "^3.0.0",
104
+ "devalue": "^5.7.1",
105
+ "dotenv": "^17.4.2",
106
+ "fuse.js": "^7.3.0",
107
+ "litepicker": "^2.0.12",
108
+ "perod": "^1.4.1",
109
+ "runed": "^0.37.1",
110
+ "svelte": "^5.55.5",
111
+ "svelte-easy-crop": "^5.0.1",
112
+ "svelte-sonner": "^1.1.1",
113
+ "tippy.js": "^6.3.7",
114
+ "zod": "^4.4.1"
115
+ }
116
+ }
@@ -1,10 +0,0 @@
1
- export declare function maxHeightScreen(node: HTMLElement, { padding }?: {
2
- padding?: number;
3
- }): {
4
- destroy(): void;
5
- };
6
- export declare function heightScreen(node: HTMLElement, { padding }?: {
7
- padding?: number;
8
- }): {
9
- destroy(): void;
10
- };
@@ -1,24 +0,0 @@
1
- export function maxHeightScreen(node, { padding = 16 } = {}) {
2
- function setMaxHeight() {
3
- node.style.maxHeight = `${window.innerHeight - node.offsetTop - padding}px`;
4
- }
5
- setMaxHeight();
6
- window.addEventListener('resize', setMaxHeight);
7
- return {
8
- destroy() {
9
- window.removeEventListener('resize', setMaxHeight);
10
- }
11
- };
12
- }
13
- export function heightScreen(node, { padding = 16 } = {}) {
14
- function setHeight() {
15
- node.style.height = `${window.innerHeight - node.offsetTop - padding}px`;
16
- }
17
- setHeight();
18
- window.addEventListener('resize', setHeight);
19
- return {
20
- destroy() {
21
- window.removeEventListener('resize', setHeight);
22
- }
23
- };
24
- }
@@ -1,3 +0,0 @@
1
- export declare function portal(node: HTMLElement, selector: string): {
2
- destroy: () => void;
3
- };
@@ -1,9 +0,0 @@
1
- export function portal(node, selector) {
2
- const target = document.querySelector(selector);
3
- if (!target)
4
- throw `tagret not found for selector "${selector}"`;
5
- target.appendChild(node);
6
- return {
7
- destroy: () => node.remove(),
8
- };
9
- }
@@ -1,15 +0,0 @@
1
- type Params = {
2
- trigger: HTMLElement | undefined;
3
- focusIndex?: number;
4
- listQuerySelector?: string;
5
- itemsQuerySelector?: string;
6
- onSelect?: (index: number) => unknown;
7
- onFocus?: (index: number) => unknown;
8
- keyDownEvent?: KeyboardEvent | undefined;
9
- keyDownPreventDefault?: boolean;
10
- };
11
- export declare function selector(node: HTMLElement, { trigger, focusIndex, listQuerySelector, itemsQuerySelector, onSelect, onFocus, keyDownEvent, keyDownPreventDefault }: Params): {
12
- update(props: Partial<Params>): void;
13
- destroy(): void;
14
- };
15
- export {};
@@ -1,71 +0,0 @@
1
- export function selector(node, { trigger, focusIndex = -1, listQuerySelector = 'ul', itemsQuerySelector = 'li', onSelect = () => { }, onFocus = () => { }, keyDownEvent = undefined, keyDownPreventDefault = true }) {
2
- trigger?.addEventListener('keydown', handleKeydown);
3
- function handleKeydown(event) {
4
- const items = node.querySelectorAll(itemsQuerySelector);
5
- if (event.key === 'Enter') {
6
- if (keyDownPreventDefault)
7
- event.preventDefault();
8
- onSelect(focusIndex);
9
- return;
10
- }
11
- if (event.key === 'ArrowUp') {
12
- if (keyDownPreventDefault)
13
- event.preventDefault();
14
- focusIndex--;
15
- if (focusIndex < 0)
16
- focusIndex = items.length - 1;
17
- onFocus(focusIndex);
18
- scrollToSelected(items);
19
- return;
20
- }
21
- if (event.key === 'ArrowDown') {
22
- if (keyDownPreventDefault)
23
- event.preventDefault();
24
- focusIndex++;
25
- if (focusIndex > items.length - 1)
26
- focusIndex = 0;
27
- onFocus(focusIndex);
28
- scrollToSelected(items);
29
- return;
30
- }
31
- }
32
- function scrollToSelected(items) {
33
- const list = node.tagName === 'UL' ? node : node.querySelector(listQuerySelector);
34
- if (!(list instanceof HTMLElement)) {
35
- console.error('wrapper element not found');
36
- return;
37
- }
38
- const item = items[focusIndex];
39
- if (!item)
40
- return;
41
- const top = item.offsetTop - 4;
42
- if (top < list.scrollTop) {
43
- list.scrollTo({ top });
44
- return;
45
- }
46
- const bottom = item.offsetTop + item.offsetHeight;
47
- const delta = bottom - (list.scrollTop + list.offsetHeight) + 10;
48
- if (delta > 0) {
49
- list.scrollTo({ top: list.scrollTop + delta });
50
- return;
51
- }
52
- }
53
- return {
54
- update(props) {
55
- if (props.focusIndex !== undefined)
56
- focusIndex = props.focusIndex;
57
- if (props.trigger) {
58
- trigger?.removeEventListener('keydown', handleKeydown);
59
- trigger = props.trigger;
60
- trigger?.addEventListener('keydown', handleKeydown);
61
- }
62
- if (props.keyDownEvent && keyDownEvent !== props.keyDownEvent) {
63
- keyDownEvent = props.keyDownEvent;
64
- handleKeydown(keyDownEvent);
65
- }
66
- },
67
- destroy() {
68
- trigger?.removeEventListener('keydown', handleKeydown);
69
- }
70
- };
71
- }
@@ -1,3 +0,0 @@
1
- import { type CreateAxiosDefaults } from 'axios';
2
- import type { TypeMap, ApiConfig, ApiClient } from './config.js';
3
- export declare function useApiClient<T extends TypeMap, C extends ApiConfig<T>>(prismaConfig: C, axiosConfig?: CreateAxiosDefaults): ApiClient<T, C>;
@@ -1,24 +0,0 @@
1
- import axios, {} from 'axios';
2
- import * as devalue from 'devalue';
3
- export function useApiClient(prismaConfig, axiosConfig = {}) {
4
- const _axios = axios.create({ baseURL: '/api', ...axiosConfig });
5
- function useSearch(model) {
6
- return async (search) => {
7
- const config = { params: { search, model } };
8
- const { data, headers } = await _axios.get('', config);
9
- ensureJson(headers);
10
- return devalue.unflatten(data);
11
- };
12
- }
13
- const api = Object.keys(prismaConfig).reduce((acc, model) => ({
14
- ...acc,
15
- [model]: useSearch(model)
16
- }), {});
17
- return api;
18
- }
19
- function ensureJson(headers) {
20
- const contentType = headers['content-type'];
21
- if (contentType !== 'application/json') {
22
- throw new Error(`Response Content-type is '${contentType}' instead 'application/json'`);
23
- }
24
- }
@@ -1,46 +0,0 @@
1
- import type { OperationPayload, GetResult } from '@prisma/client/runtime/library.js';
2
- export type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'update' | 'updateMany' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy';
3
- export type TypeMap = {
4
- model: {
5
- [M: string]: {
6
- payload: OperationPayload;
7
- operations: {
8
- [O in Operation]: {
9
- args: {};
10
- };
11
- };
12
- };
13
- };
14
- };
15
- export type Result<T extends TypeMap, M extends keyof T['model'], Query extends {}, Payload extends T['model'][M]['payload'] = T['model'][M]['payload']> = GetResult<Payload, Query, 'findMany'>;
16
- export type Query<T extends TypeMap, M extends keyof T['model'], O extends Operation = 'findMany'> = T['model'][M]['operations'][O]['args'];
17
- export type QueryToResult<T extends TypeMap, M extends keyof T['model'], O extends Operation = 'findMany', Q extends Query<T, M, O> = {}> = (query: Q) => Promise<Result<T, M, Q>>;
18
- export type ApiPrismaClient<T extends TypeMap> = {
19
- [M in keyof T['model']]: {
20
- [O in Operation]: QueryToResult<T, M, O>;
21
- };
22
- };
23
- /**
24
- * @example
25
- * const config = {
26
- * user: (contains) => ({ where: { username: { contains } } }),
27
- * } satisfies ApiConfig<Prisma.TypeMap>
28
- */
29
- export type ApiConfig<T extends TypeMap> = {
30
- [M in keyof T['model']]?: (search: string) => Query<T, M, 'findMany'>;
31
- };
32
- export type ApiClient<T extends TypeMap, C extends ApiConfig<T>> = {
33
- [M in keyof C]: C[M] extends (...args: any) => infer Q ? (search: string) => Promise<Result<T, M & string, Q & {}>> : never;
34
- };
35
- export type ModelApiQuery = {
36
- model: string;
37
- search?: string;
38
- take?: number;
39
- skip?: number;
40
- };
41
- export declare const modelApiQuery: {
42
- model: import("zod").ZodString;
43
- search: import("zod").ZodDefault<import("zod").ZodString>;
44
- take: import("zod").ZodDefault<import("zod").ZodNumber>;
45
- skip: import("zod").ZodDefault<import("zod").ZodNumber>;
46
- };
@@ -1,7 +0,0 @@
1
- import { z } from '../validation/zod.js';
2
- export const modelApiQuery = {
3
- model: z.string(),
4
- search: z.string().default(''),
5
- take: z.number().default(10),
6
- skip: z.number().default(0)
7
- };
@@ -1,3 +0,0 @@
1
- export * from './config.js';
2
- export * from './client.js';
3
- export * from './server.js';
package/dist/api/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from './config.js';
2
- export * from './client.js';
3
- export * from './server.js';
@@ -1,11 +0,0 @@
1
- import { type RequestHandler } from '@sveltejs/kit';
2
- import { type ApiConfig, type TypeMap } from './config.js';
3
- interface BasicPrismaClient {
4
- [K: string]: any;
5
- $connect: any;
6
- $transaction: any;
7
- }
8
- export declare function apiServer<T extends TypeMap>(config: ApiConfig<T>, client: BasicPrismaClient): {
9
- GET: RequestHandler;
10
- };
11
- export {};
@@ -1,17 +0,0 @@
1
- import { error } from '@sveltejs/kit';
2
- import { json } from '../server/json.js';
3
- import { parseQuery } from '../server/parseQuery.js';
4
- import { modelApiQuery } from './config.js';
5
- export function apiServer(config, client) {
6
- return {
7
- async GET(event) {
8
- const { model, search, take, skip } = parseQuery(event.url, modelApiQuery);
9
- if (!(model in config))
10
- error(400, `Model "${model}" is not exposed in this API.`);
11
- const baseQuery = { take, skip };
12
- //@ts-ignore
13
- const result = await client[model].findMany({ ...baseQuery, ...config[model](search) });
14
- return json(result);
15
- }
16
- };
17
- }