fuma 2.0.50 → 2.1.0

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 (338) 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/input/type.js +1 -0
  42. package/dist/popover/Popover.svelte +50 -0
  43. package/dist/popover/index.d.ts +2 -0
  44. package/dist/popover/index.js +2 -0
  45. package/dist/popover/popover.svelte.d.ts +26 -0
  46. package/dist/popover/popover.svelte.js +101 -0
  47. package/dist/remote/useForm.d.ts +6 -0
  48. package/dist/remote/useForm.js +22 -0
  49. package/dist/search/Spans.svelte +15 -0
  50. package/dist/search/Spans.svelte.d.ts +7 -0
  51. package/dist/search/index.d.ts +2 -0
  52. package/dist/search/index.js +2 -0
  53. package/dist/search/search.js +96 -0
  54. package/dist/server/index.d.ts +0 -4
  55. package/dist/server/index.js +0 -4
  56. package/dist/server/parseQuery.js +1 -1
  57. package/dist/server/sse.js +4 -4
  58. package/dist/server/table.js +1 -1
  59. package/dist/state/index.d.ts +1 -0
  60. package/dist/state/index.js +1 -0
  61. package/dist/state/param.svelte.d.ts +18 -0
  62. package/dist/state/param.svelte.js +66 -0
  63. package/dist/ui/button/ButtonDelete.svelte +49 -28
  64. package/dist/ui/button/ButtonDelete.svelte.d.ts +12 -31
  65. package/dist/ui/button/index.d.ts +0 -1
  66. package/dist/ui/button/index.js +0 -1
  67. package/dist/ui/copy/ButtonCopy.svelte +43 -0
  68. package/dist/ui/copy/ButtonCopy.svelte.d.ts +17 -0
  69. package/dist/ui/copy/index.d.ts +2 -0
  70. package/dist/ui/copy/index.js +2 -0
  71. package/dist/ui/copy/useCopy.svelte.d.ts +10 -0
  72. package/dist/ui/copy/useCopy.svelte.js +36 -0
  73. package/dist/ui/dialog/Dialog.svelte +56 -26
  74. package/dist/ui/dialog/Dialog.svelte.d.ts +14 -35
  75. package/dist/ui/dialog/index.d.ts +0 -1
  76. package/dist/ui/dialog/index.js +0 -1
  77. package/dist/ui/drawer/Drawer.svelte +53 -45
  78. package/dist/ui/drawer/Drawer.svelte.d.ts +8 -63
  79. package/dist/ui/drawer/drawerFly.js +1 -1
  80. package/dist/ui/drawer/useLayer.svelte.d.ts +5 -0
  81. package/dist/ui/drawer/useLayer.svelte.js +33 -0
  82. package/dist/ui/index.d.ts +4 -12
  83. package/dist/ui/index.js +4 -12
  84. package/dist/ui/menu/ContextMenu.svelte +27 -26
  85. package/dist/ui/menu/ContextMenu.svelte.d.ts +9 -35
  86. package/dist/ui/menu/DropDown.svelte +44 -26
  87. package/dist/ui/menu/DropDown.svelte.d.ts +18 -43
  88. package/dist/ui/menu/DropDownMenu.svelte +51 -41
  89. package/dist/ui/menu/DropDownMenu.svelte.d.ts +7 -29
  90. package/dist/ui/menu/dropdown.css +4 -4
  91. package/dist/ui/menu/index.d.ts +1 -1
  92. package/dist/ui/menu/index.js +2 -1
  93. package/dist/ui/mode/ToggleMode.svelte +25 -14
  94. package/dist/ui/mode/ToggleMode.svelte.d.ts +10 -35
  95. package/dist/ui/mode/index.d.ts +1 -1
  96. package/dist/ui/mode/index.js +1 -1
  97. package/dist/ui/mode/useMode.svelte.d.ts +8 -0
  98. package/dist/ui/mode/useMode.svelte.js +40 -0
  99. package/dist/ui/pagination/Pagination.svelte +18 -14
  100. package/dist/ui/pagination/Pagination.svelte.d.ts +4 -18
  101. package/dist/ui/range/RangePicker.svelte +3 -2
  102. package/dist/ui/range/RangePickerButton.svelte +49 -37
  103. package/dist/ui/range/RangePickerButton.svelte.d.ts +7 -21
  104. package/dist/ui/range/index.d.ts +1 -1
  105. package/dist/ui/range/index.js +1 -1
  106. package/dist/ui/table/Table.svelte +15 -21
  107. package/dist/ui/table/Table.svelte.d.ts +1 -1
  108. package/dist/ui/table/TableBody.svelte +1 -1
  109. package/dist/ui/table/TableBody.svelte.d.ts +1 -1
  110. package/dist/ui/table/TableFieldsEdition.svelte +90 -78
  111. package/dist/ui/table/TableFieldsEdition.svelte.d.ts +14 -13
  112. package/dist/ui/table/TableHead.svelte +1 -1
  113. package/dist/ui/table/TableViewSelect.svelte +69 -69
  114. package/dist/ui/table/TableViewSelect.svelte.d.ts +10 -23
  115. package/dist/ui/table/cell/TableCellArray.svelte +1 -1
  116. package/dist/ui/table/cell/TableCellBoolean.svelte +3 -4
  117. package/dist/ui/table/cell/index.d.ts +1 -1
  118. package/dist/ui/table/cell/index.js +1 -1
  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 +41 -53
  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 +94 -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 +111 -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/tabs/Tabs.svelte +0 -32
  328. package/dist/ui/tabs/Tabs.svelte.d.ts +0 -22
  329. package/dist/ui/tabs/TabsIcon.svelte +0 -60
  330. package/dist/ui/tabs/TabsIcon.svelte.d.ts +0 -24
  331. package/dist/ui/tabs/index.d.ts +0 -8
  332. package/dist/ui/tabs/index.js +0 -2
  333. package/dist/utils/avatar.d.ts +0 -1
  334. package/dist/utils/avatar.js +0 -5
  335. package/dist/utils/component.d.ts +0 -6
  336. package/dist/utils/component.js +0 -3
  337. package/dist/validation/form.d.ts +0 -34
  338. package/dist/validation/form.js +0 -103
@@ -1,133 +1,119 @@
1
1
  <script lang="ts" generics="Item extends ItemBase">
2
- import { onMount } from 'svelte'
3
- import type { TippyInstance } from '../../../utils/tippy.js'
2
+ import { ArrowDownNarrowWideIcon, ArrowDownWideNarrowIcon, FunnelIcon } from '@lucide/svelte'
4
3
  import debounce from 'debounce'
4
+ import z from 'zod'
5
5
  import { goto } from '$app/navigation'
6
- import { page } from '$app/stores'
7
-
6
+ import { page } from '$app/state'
7
+ import { urlParam } from '../../../state/param.svelte.ts'
8
8
  import { DropDown } from '../../menu/index.js'
9
- import { InputNumber } from '../../input/index.js'
10
- import { urlParam } from '../../../store/param.js'
11
- import { jsonParse } from '../../../utils/jsonParse.js'
9
+ import { zodCoerceJsonRecord } from '../../../validation/zod.js'
12
10
  import type { ItemBase, TableField } from '../field.js'
13
- import { mdiFilterMultipleOutline, mdiSortAscending, mdiSortDescending } from '@mdi/js'
14
- import { Icon } from '../../icon/index.js'
15
11
  import OrderButtons from './OrderButtons.svelte'
16
12
 
17
- export let field: TableField<Item>
18
-
19
- let tip: TippyInstance
20
- type Range = { min: number | undefined; max: number | undefined }
13
+ let { field }: { field: TableField<Item> } = $props()
21
14
 
22
- let { min, max, order } = initRange($page.url)
23
- onMount(() => page.subscribe(({ url }) => ({ min, max, order } = initRange(url))))
15
+ const paramModel = zodCoerceJsonRecord
16
+ .pipe(
17
+ z.object({
18
+ min: z.number().optional(),
19
+ max: z.number().optional(),
20
+ order: z.enum(['asc', 'desc']).optional()
21
+ })
22
+ )
23
+ .default({})
24
24
 
25
- function initRange({ searchParams }: URL) {
26
- return jsonParse<Range & { order?: 'asc' | 'desc' }>(searchParams.get(field.key), {
27
- min: undefined,
28
- max: undefined,
29
- order: undefined
30
- })
31
- }
25
+ let { min, max, order } = $derived(paramModel.parse(page.url.searchParams.get(field.key)))
26
+ let isNegatifRange = $derived(min !== undefined && max !== undefined && max < min)
32
27
 
33
28
  const updateUrl = debounce(() => {
34
- if (isDefined(min) || isDefined(max) || order) {
35
- goto(
36
- $urlParam.with(
37
- {
38
- [field.key]: JSON.stringify({
39
- ...(isDefined(min) ? { min } : {}),
40
- ...(isDefined(max) ? { max } : {}),
41
- ...(order ? { order } : {})
42
- })
43
- },
44
- 'skip',
45
- 'take'
46
- ),
47
- {
48
- noScroll: true,
49
- keepFocus: true
50
- }
51
- )
52
- return
53
- }
54
- goto($urlParam.without(field.key, 'skip', 'take'), { noScroll: true, keepFocus: true })
29
+ const query: Record<string, string | number> = {}
30
+ if (order) query.order = order
31
+ if (min !== undefined) query.min = min
32
+ if (max !== undefined) query.max = max
33
+ if (!Object.keys(query).length) return resetFilter()
34
+ goto(urlParam.with({ [field.key]: JSON.stringify(query) }, 'skip', 'take'), {
35
+ noScroll: true,
36
+ keepFocus: true
37
+ })
55
38
  }, 250)
56
39
 
57
- function handleReset() {
58
- min = undefined
59
- max = undefined
60
- tip.hide()
61
- goto($urlParam.without(field.key, 'skip', 'take'), { noScroll: true, keepFocus: true })
62
- }
63
-
64
- function isDefined(v: number | undefined | null): v is number {
65
- return typeof v === 'number'
40
+ function resetFilter() {
41
+ return goto(urlParam.without(field.key, 'skip', 'take'), {
42
+ replaceState: true,
43
+ noScroll: true,
44
+ keepFocus: true
45
+ })
66
46
  }
67
-
68
- $: isNegatifRange = isDefined(min) && isDefined(max) && max < min
69
47
  </script>
70
48
 
71
49
  <th class="p-1">
72
- <DropDown
73
- bind:tip
74
- hideOnBlur
75
- hideOnNav={false}
76
- autofocus
77
- tippyProps={{ appendTo: () => document.body }}
78
- >
79
- <button slot="activator" class="menu-item min-h-8 w-full flex-wrap gap-y-1">
80
- <div class="flex gap-2">
81
- <span>{field.label}</span>
82
- {#if !isDefined(min) && !isDefined(max)}
83
- <Icon path={mdiFilterMultipleOutline} size={15} class="opacity-50" />
50
+ <DropDown hideOnBlur hideOnNav={false} autofocus tippyProps={{ appendTo: () => document.body }}>
51
+ {#snippet activator()}
52
+ <button class="menu-item min-h-8 w-full flex-wrap gap-y-1">
53
+ <div class="flex gap-2">
54
+ <span>{field.label}</span>
55
+ {#if min === undefined && max === undefined}
56
+ <FunnelIcon size={15} class="opacity-50" />
57
+ {/if}
58
+ </div>
59
+
60
+ {#if min !== undefined || max !== undefined}
61
+ <span class="badge badge-xs text-[0.7rem] font-normal text-white badge-primary">
62
+ {#if min !== undefined}
63
+ {min} ≤
64
+ {/if}
65
+ x
66
+ {#if max !== undefined}
67
+ ≤ {max}
68
+ {/if}
69
+ </span>
70
+ {/if}
71
+ {#if order === 'asc'}
72
+ <ArrowDownNarrowWideIcon size={18} class="fill-primary" />
73
+ {:else if order === 'desc'}
74
+ <ArrowDownWideNarrowIcon size={18} class="fill-primary" />
84
75
  {/if}
85
- </div>
76
+ </button>
77
+ {/snippet}
86
78
 
87
- {#if isDefined(min) || isDefined(max)}
88
- <span class="badge badge-primary badge-xs text-[0.7rem] font-normal text-white">
89
- {#if isDefined(min)}
90
- {min} ≤
91
- {/if}
92
- x
93
- {#if isDefined(max)}
94
- ≤ {max}
95
- {/if}
96
- </span>
97
- {/if}
98
- {#if order}
99
- <Icon
100
- path={order === 'asc' ? mdiSortAscending : mdiSortDescending}
101
- size={18}
102
- class="fill-primary"
79
+ {#snippet children({ tip })}
80
+ {#if field.sortable !== false}
81
+ <OrderButtons
82
+ bind:order
83
+ onChange={() => {
84
+ updateUrl()
85
+ tip?.hide()
86
+ }}
103
87
  />
88
+ <div class="divider"></div>
89
+ <span class="p-1 py-1 text-sm font-semibold opacity-70">Filtre:</span>
104
90
  {/if}
105
- </button>
106
-
107
- {#if field.sortable !== false}
108
- <OrderButtons
109
- bind:order
110
- on:change={() => {
111
- updateUrl()
112
- tip.hide()
91
+ <form
92
+ class="grid grid-cols-2 gap-2 p-1"
93
+ onsubmit={(e) => {
94
+ e.preventDefault()
95
+ tip?.hide()
113
96
  }}
114
- />
115
- <div class="divider"></div>
116
- <span class="p-1 py-1 text-sm font-semibold opacity-70">Filtre:</span>
117
- {/if}
118
- <form class="grid grid-cols-2 gap-2 p-1" on:submit|preventDefault={() => tip.hide()}>
119
- <InputNumber bind:value={min} on:input={updateUrl} input={{ placeholder: 'Min' }} />
120
- <InputNumber
121
- bind:value={max}
122
- on:input={updateUrl}
123
- hint={isNegatifRange ? 'Doit être plus grand' : ''}
124
- input={{ placeholder: 'Max' }}
125
- />
97
+ >
98
+ <input bind:value={min} oninput={updateUrl} placeholder="Min" />
99
+ <input bind:value={max} oninput={updateUrl} placeholder="Max" />
126
100
 
127
- <div class="col-span-full flex justify-end gap-2">
128
- <button class="btn btn-ghost" type="button" on:click={handleReset}>Effacer</button>
129
- <button class="btn">Ok</button>
130
- </div>
131
- </form>
101
+ <div class="col-span-full flex justify-end gap-2">
102
+ <button
103
+ class="btn btn-ghost"
104
+ type="button"
105
+ onclick={() => {
106
+ min = undefined
107
+ max = undefined
108
+ tip?.hide()
109
+ resetFilter()
110
+ }}
111
+ >
112
+ Effacer
113
+ </button>
114
+ <button class="btn">Ok</button>
115
+ </div>
116
+ </form>
117
+ {/snippet}
132
118
  </DropDown>
133
119
  </th>
@@ -1,22 +1,25 @@
1
1
  import type { ItemBase, TableField } from '../field.js';
2
- declare class __sveltets_Render<Item extends ItemBase> {
3
- props(): {
2
+ declare function $$render<Item extends ItemBase>(): {
3
+ props: {
4
4
  field: TableField<Item>;
5
5
  };
6
- events(): {} & {
7
- [evt: string]: CustomEvent<any>;
8
- };
9
- slots(): {};
10
- bindings(): string;
6
+ exports: {};
7
+ bindings: "";
8
+ slots: {};
9
+ events: {};
10
+ };
11
+ declare class __sveltets_Render<Item extends ItemBase> {
12
+ props(): ReturnType<typeof $$render<Item>>['props'];
13
+ events(): ReturnType<typeof $$render<Item>>['events'];
14
+ slots(): ReturnType<typeof $$render<Item>>['slots'];
15
+ bindings(): "";
11
16
  exports(): {};
12
17
  }
13
18
  interface $$IsomorphicComponent {
14
19
  new <Item extends ItemBase>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Item>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Item>['props']>, ReturnType<__sveltets_Render<Item>['events']>, ReturnType<__sveltets_Render<Item>['slots']>> & {
15
20
  $$bindings?: ReturnType<__sveltets_Render<Item>['bindings']>;
16
21
  } & ReturnType<__sveltets_Render<Item>['exports']>;
17
- <Item extends ItemBase>(internal: unknown, props: ReturnType<__sveltets_Render<Item>['props']> & {
18
- $$events?: ReturnType<__sveltets_Render<Item>['events']>;
19
- }): ReturnType<__sveltets_Render<Item>['exports']>;
22
+ <Item extends ItemBase>(internal: unknown, props: ReturnType<__sveltets_Render<Item>['props']> & {}): ReturnType<__sveltets_Render<Item>['exports']>;
20
23
  z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
21
24
  }
22
25
  declare const TableHeadNumber: $$IsomorphicComponent;
@@ -1,87 +1,90 @@
1
1
  <script lang="ts" generics="Item extends ItemBase">
2
- import { derived } from 'svelte/store'
3
- import { page } from '$app/stores'
4
-
5
- import { jsonParse } from '../../../utils/jsonParse.js'
6
- import type { ItemBase, TableField } from '../index.js'
2
+ import { ListFilterIcon } from '@lucide/svelte'
3
+ import { page } from '$app/state'
4
+ import { param, urlParam } from '../../../state/param.svelte.ts'
7
5
  import { DropDown } from '../../menu/index.js'
8
- import { Icon } from '../../icon/index.js'
6
+ import type { ItemBase, TableField } from '../index.js'
7
+ import { jsonParse } from '../../../utils/jsonParse.js'
9
8
  import { type Options, parseOptions } from '../../../utils/options.js'
10
- import { urlParam } from '../../../store/param.js'
11
- import { mdiOrderBoolAscendingVariant } from '@mdi/js'
12
-
13
- export let field: TableField<Item>
14
- export let options: Options
15
- export let multiSelect = false
16
- export let placeholder = 'No option'
17
-
18
- let _options = initOptions($page.url)
19
- page.subscribe(({ url }) => (_options = initOptions(url)))
20
9
 
21
- $: optionsActive = _options.filter((option) => option.isActive)
10
+ let {
11
+ field,
12
+ options: propOptions,
13
+ multiSelect = false,
14
+ placeholder = 'No option'
15
+ }: {
16
+ field: TableField<Item>
17
+ options: Options
18
+ multiSelect?: boolean
19
+ placeholder?: string
20
+ } = $props()
22
21
 
23
- function initOptions({ searchParams }: URL) {
24
- const selection = searchParams.get(field.key)
25
- const selections = jsonParse<string[]>(searchParams.get(field.key), [])
22
+ let options = $derived.by(() => {
23
+ const selection = page.url.searchParams.get(field.key)
24
+ const selections = jsonParse<string[]>(page.url.searchParams.get(field.key), [])
26
25
 
27
26
  function getActive(value: string) {
28
27
  if (!multiSelect) return selection === value
29
28
  return selections.includes(value)
30
29
  }
31
30
 
32
- return parseOptions(options).map((option) => ({
31
+ return parseOptions(propOptions).map((option) => ({
33
32
  ...option,
34
33
  isActive: getActive(option.value)
35
34
  }))
36
- }
35
+ })
36
+
37
+ let optionsActive = $derived(options.filter((option) => option.isActive))
37
38
 
38
- const getHref = derived(urlParam, (params) => (value: string) => {
39
- const selections = jsonParse<string[]>(params.get(field.key), [])
40
- if (!multiSelect) return params.toggle({ [field.key]: value }, 'skip', 'take')
39
+ const getHref = $derived((value: string) => {
40
+ const selections = jsonParse<string[]>(param.get(field.key), [])
41
+ if (!multiSelect) return urlParam.toggle({ [field.key]: value }, 'skip', 'take')
41
42
  if (selections.includes(value)) {
42
43
  const newSelections = selections.filter((v) => v !== value)
43
- if (!newSelections.length) return params.without(field.key)
44
- return params.with({ [field.key]: JSON.stringify(newSelections) }, 'skip', 'take')
44
+ if (!newSelections.length) return urlParam.without(field.key)
45
+ return urlParam.with({ [field.key]: JSON.stringify(newSelections) }, 'skip', 'take')
45
46
  }
46
- return params.with({ [field.key]: JSON.stringify([...selections, value]) }, 'skip', 'take')
47
+ return urlParam.with({ [field.key]: JSON.stringify([...selections, value]) }, 'skip', 'take')
47
48
  })
48
49
  </script>
49
50
 
50
51
  <th class="p-1">
51
52
  <DropDown hideOnBlur hideOnNav={!multiSelect} tippyProps={{ appendTo: () => document.body }}>
52
- <button slot="activator" class="menu-item min-h-8 w-full flex-wrap gap-y-1">
53
- <div class="flex gap-2">
54
- {field.label}
55
- {#if !optionsActive.length}
56
- <Icon path={mdiOrderBoolAscendingVariant} size={15} class="opacity-50" />
57
- {/if}
58
- </div>
59
-
60
- {#if optionsActive.length}
61
- <div class="flex flex-wrap gap-1">
62
- {#each optionsActive as option}
63
- <span class="badge badge-primary badge-xs text-[0.7rem] font-normal text-white">
64
- {#if option.icon}
65
- <Icon path={option.icon} size={10} class="-translate-x-1 fill-white/80" />
66
- {/if}
67
- {option.label}
68
- </span>
69
- {/each}
53
+ {#snippet activator()}
54
+ <button class="menu-item min-h-8 w-full flex-wrap gap-y-1">
55
+ <div class="flex gap-2">
56
+ {field.label}
57
+ {#if !optionsActive.length}
58
+ <ListFilterIcon size={15} class="opacity-50" />
59
+ {/if}
70
60
  </div>
71
- {/if}
72
- </button>
61
+
62
+ {#if optionsActive.length}
63
+ <div class="flex flex-wrap gap-1">
64
+ {#each optionsActive as option}
65
+ <span class="badge badge-xs text-[0.7rem] font-normal text-white badge-primary">
66
+ {#if option.icon}
67
+ <option.icon size={10} class="-translate-x-1 fill-white/80" />
68
+ {/if}
69
+ {option.label}
70
+ </span>
71
+ {/each}
72
+ </div>
73
+ {/if}
74
+ </button>
75
+ {/snippet}
73
76
 
74
77
  <div class="flex flex-col gap-1">
75
- {#each _options as { isActive, icon, label, value }}
78
+ {#each options as { isActive, icon: Icon, label, value }}
76
79
  <a
77
- href={$getHref(value)}
80
+ href={getHref(value)}
78
81
  class="menu-item px-3 py-2"
79
82
  class:active={isActive}
80
83
  data-sveltekit-noscroll
81
84
  data-sveltekit-replacestate
82
85
  >
83
- {#if icon}
84
- <Icon path={icon} size={18} class="opacity-60" />
86
+ {#if Icon}
87
+ <Icon size={18} class="opacity-60" />
85
88
  {/if}
86
89
  <span class="font-normal whitespace-nowrap">{label}</span>
87
90
  </a>
@@ -1,26 +1,29 @@
1
1
  import type { ItemBase, TableField } from '../index.js';
2
2
  import { type Options } from '../../../utils/options.js';
3
- declare class __sveltets_Render<Item extends ItemBase> {
4
- props(): {
3
+ declare function $$render<Item extends ItemBase>(): {
4
+ props: {
5
5
  field: TableField<Item>;
6
6
  options: Options;
7
7
  multiSelect?: boolean;
8
8
  placeholder?: string;
9
9
  };
10
- events(): {} & {
11
- [evt: string]: CustomEvent<any>;
12
- };
13
- slots(): {};
14
- bindings(): string;
10
+ exports: {};
11
+ bindings: "";
12
+ slots: {};
13
+ events: {};
14
+ };
15
+ declare class __sveltets_Render<Item extends ItemBase> {
16
+ props(): ReturnType<typeof $$render<Item>>['props'];
17
+ events(): ReturnType<typeof $$render<Item>>['events'];
18
+ slots(): ReturnType<typeof $$render<Item>>['slots'];
19
+ bindings(): "";
15
20
  exports(): {};
16
21
  }
17
22
  interface $$IsomorphicComponent {
18
23
  new <Item extends ItemBase>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<Item>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<Item>['props']>, ReturnType<__sveltets_Render<Item>['events']>, ReturnType<__sveltets_Render<Item>['slots']>> & {
19
24
  $$bindings?: ReturnType<__sveltets_Render<Item>['bindings']>;
20
25
  } & ReturnType<__sveltets_Render<Item>['exports']>;
21
- <Item extends ItemBase>(internal: unknown, props: ReturnType<__sveltets_Render<Item>['props']> & {
22
- $$events?: ReturnType<__sveltets_Render<Item>['events']>;
23
- }): ReturnType<__sveltets_Render<Item>['exports']>;
26
+ <Item extends ItemBase>(internal: unknown, props: ReturnType<__sveltets_Render<Item>['props']> & {}): ReturnType<__sveltets_Render<Item>['exports']>;
24
27
  z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
28
  }
26
29
  declare const TableHeadSelect: $$IsomorphicComponent;
@@ -1,48 +1,42 @@
1
1
  <script lang="ts" generics="Item extends ItemBase">
2
- import { mdiMagnify } from '@mdi/js'
2
+ import { SearchIcon } from '@lucide/svelte'
3
3
  import { page } from '$app/state'
4
-
5
4
  import { DropDown } from '../../menu/index.js'
6
- import { Icon } from '../../icon/index.js'
7
- import { InputSearch } from '../../input/index.js'
8
5
  import type { ItemBase, TableField } from '../index.js'
9
- import { goto } from '$app/navigation'
10
- import { urlParam } from '../../../store/param.js'
6
+
11
7
  let { field }: { field: TableField<Item> } = $props()
12
8
 
13
9
  let searchValue = $derived(page.url.searchParams.get(field.key) || '')
14
10
  </script>
15
11
 
16
12
  <th class="p-1">
17
- <DropDown
18
- let:tip
19
- hideOnBlur
20
- hideOnNav={false}
21
- autofocus
22
- tippyProps={{ appendTo: () => document.body }}
23
- >
24
- <button slot="activator" class="menu-item min-h-8 w-full flex-wrap gap-y-1">
25
- <div class="flex items-center gap-2">
26
- <span>{field.label}</span>
27
- {#if !searchValue}
28
- <Icon path={mdiMagnify} size={15} class="opacity-50" />
29
- {/if}
30
- </div>
13
+ <DropDown hideOnBlur hideOnNav={false} autofocus tippyProps={{ appendTo: () => document.body }}>
14
+ {#snippet activator()}
15
+ <button class="menu-item min-h-8 w-full flex-wrap gap-y-1">
16
+ <div class="flex items-center gap-2">
17
+ <span>{field.label}</span>
18
+ {#if !searchValue}
19
+ <SearchIcon size={15} class="opacity-50" />
20
+ {/if}
21
+ </div>
31
22
 
32
- {#if searchValue}
33
- <span class="badge badge-primary badge-xs text-[0.7rem] font-normal text-white">
34
- <Icon path={mdiMagnify} size={10} class="-translate-x-1 fill-white/80" />
35
- <span>{searchValue}</span>
36
- </span>
37
- {/if}
38
- </button>
23
+ {#if searchValue}
24
+ <span class="badge badge-xs text-[0.7rem] font-normal text-white badge-primary">
25
+ <SearchIcon size={10} class="-translate-x-1 fill-white/80" />
26
+ <span>{searchValue}</span>
27
+ </span>
28
+ {/if}
29
+ </button>
30
+ {/snippet}
39
31
 
40
- <InputSearch
41
- class="m-1"
42
- key={field.key}
43
- value={searchValue}
44
- onkeydown={(e) => e.key === 'Enter' && tip?.hide()}
45
- onclear={() => goto($urlParam.without(field.key))}
46
- />
32
+ {#snippet children({ tip })}
33
+ <input
34
+ name={field.key}
35
+ type="search"
36
+ class="m-1"
37
+ value={searchValue}
38
+ onkeydown={(e) => e.key === 'Enter' && tip?.hide()}
39
+ />
40
+ {/snippet}
47
41
  </DropDown>
48
42
  </th>
@@ -1,6 +1,6 @@
1
- export { default as TableHeadSelect } from './TableHeadSelect.svelte';
2
- export { default as TableHeadDate } from './TableHeadDate.svelte';
3
1
  export { default as TableHeadBoolean } from './TableHeadBoolean.svelte';
2
+ export { default as TableHeadDate } from './TableHeadDate.svelte';
3
+ export { default as TableHeadDefault } from './TableHeadDefault.svelte';
4
4
  export { default as TableHeadNumber } from './TableHeadNumber.svelte';
5
+ export { default as TableHeadSelect } from './TableHeadSelect.svelte';
5
6
  export { default as TableHeadString } from './TableHeadString.svelte';
6
- export { default as TableHeadDefault } from './TableHeadDefault.svelte';
@@ -1,6 +1,6 @@
1
- export { default as TableHeadSelect } from './TableHeadSelect.svelte';
2
- export { default as TableHeadDate } from './TableHeadDate.svelte';
3
1
  export { default as TableHeadBoolean } from './TableHeadBoolean.svelte';
2
+ export { default as TableHeadDate } from './TableHeadDate.svelte';
3
+ export { default as TableHeadDefault } from './TableHeadDefault.svelte';
4
4
  export { default as TableHeadNumber } from './TableHeadNumber.svelte';
5
+ export { default as TableHeadSelect } from './TableHeadSelect.svelte';
5
6
  export { default as TableHeadString } from './TableHeadString.svelte';
6
- export { default as TableHeadDefault } from './TableHeadDefault.svelte';
@@ -1,10 +1,10 @@
1
- export { type TableField } from './field.js';
1
+ export * from './context.js';
2
+ export type { TableField } from './field.js';
3
+ export * from './field.js';
4
+ export * from './head/index.js';
2
5
  export { default as Table } from './Table.svelte';
3
- export { default as TableHead } from './TableHead.svelte';
4
6
  export { default as TableBody } from './TableBody.svelte';
5
7
  export { default as TableCell } from './TableCell.svelte';
6
8
  export { default as TableFieldsEdition } from './TableFieldsEdition.svelte';
9
+ export { default as TableHead } from './TableHead.svelte';
7
10
  export { default as TableViewSelect } from './TableViewSelect.svelte';
8
- export * from './head/index.js';
9
- export * from './field.js';
10
- export * from './context.js';
@@ -1,10 +1,9 @@
1
- export {} from './field.js';
1
+ export * from './context.js';
2
+ export * from './field.js';
3
+ export * from './head/index.js';
2
4
  export { default as Table } from './Table.svelte';
3
- export { default as TableHead } from './TableHead.svelte';
4
5
  export { default as TableBody } from './TableBody.svelte';
5
6
  export { default as TableCell } from './TableCell.svelte';
6
7
  export { default as TableFieldsEdition } from './TableFieldsEdition.svelte';
8
+ export { default as TableHead } from './TableHead.svelte';
7
9
  export { default as TableViewSelect } from './TableViewSelect.svelte';
8
- export * from './head/index.js';
9
- export * from './field.js';
10
- export * from './context.js';
package/dist/utils/csv.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export function getCSV(items, fields) {
2
2
  const headers = Object.keys(fields).join('\t');
3
3
  const rows = items.map((m) => Object.values(fields)
4
- .map((getValue) => !!getValue ? getValue(m) : '')
4
+ .map((getValue) => (getValue ? getValue(m) : ''))
5
5
  .join('\t'));
6
6
  return [headers, rows.join('\r\n')].join('\r\n');
7
7
  }
@@ -1,4 +1,4 @@
1
- export declare function createEventEmitter<EventMap extends Record<string, any>>(): {
1
+ export declare function createEventEmitter<EventMap extends Record<string, unknown>>(): {
2
2
  on<K extends keyof EventMap>(eventKey: K, callback: Callback<EventMap[K]>): () => void;
3
3
  once<K extends keyof EventMap>(eventKey: K, callback: Callback<EventMap[K]>): () => void;
4
4
  off<K extends keyof EventMap>(eventKey: K, callback: Callback<EventMap[K]>): void;
@@ -6,5 +6,5 @@ export declare function createEventEmitter<EventMap extends Record<string, any>>
6
6
  emit<K extends keyof EventMap>(...args: EventEmitterArgs<EventMap, K>): void;
7
7
  };
8
8
  type Callback<Arg> = (arg: Arg) => unknown;
9
- type EventEmitterArgs<EventMap extends Record<string, any>, K extends keyof EventMap> = undefined extends EventMap[K] ? [type: K, parameter?: EventMap[K]] : [type: K, parameter: EventMap[K]];
9
+ type EventEmitterArgs<EventMap extends Record<string, unknown>, K extends keyof EventMap> = undefined extends EventMap[K] ? [type: K, parameter?: EventMap[K]] : [type: K, parameter: EventMap[K]];
10
10
  export {};